From af1df27379a6ff79c339419c02162289bd8bc364 Mon Sep 17 00:00:00 2001 From: Chris Ring Date: Mon, 10 Feb 2014 09:47:21 -0800 Subject: [PATCH] DRA7XX: Remove unnecessary rpmsg-related code Similar to commit 16adcaad which cleaned up OMAP5 code, this removes dead code for DRA7XX. Most of the changes remove untested, and likely broken, non-SMP code. In at least one case, the code cleanup may fix previously undiscovered issues. For example, in VirtQueue_isr(), the first switch() block was [likely inadvertently] skipped for DSP2. There is no known issue because of this, but now with this cleanup, DSP2 will (and should!) participate in this initial switch statement. --- packages/ti/ipc/family/vayu/VirtQueue.c | 203 +++++++----------------- 1 file changed, 60 insertions(+), 143 deletions(-) diff --git a/packages/ti/ipc/family/vayu/VirtQueue.c b/packages/ti/ipc/family/vayu/VirtQueue.c index 4ca8f1d..5b11e7c 100644 --- a/packages/ti/ipc/family/vayu/VirtQueue.c +++ b/packages/ti/ipc/family/vayu/VirtQueue.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011-2013, Texas Instruments Incorporated + * Copyright (c) 2011-2014, Texas Instruments Incorporated * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -69,7 +69,6 @@ #include #include #include -#include #include #include @@ -89,30 +88,34 @@ #include "VirtQueue.h" +/* + * The following three VIRTIO_* defines must match those in + * /include/uapi/linux/virtio_config.h + */ +#define VIRTIO_CONFIG_S_ACKNOWLEDGE 1 +#define VIRTIO_CONFIG_S_DRIVER 2 +#define VIRTIO_CONFIG_S_DRIVER_OK 4 + +#define VRING_BUFS_PRIMED (VIRTIO_CONFIG_S_ACKNOWLEDGE | \ + VIRTIO_CONFIG_S_DRIVER | VIRTIO_CONFIG_S_DRIVER_OK) + /* Used for defining the size of the virtqueue registry */ -#define NUM_QUEUES 4 +#define NUM_QUEUES 2 /* Predefined device addresses */ #ifdef DSP #define IPC_MEM_VRING0 0xA0000000 #define IPC_MEM_VRING1 0xA0004000 -#define IPC_MEM_VRING2 0xA0008000 -#define IPC_MEM_VRING3 0xA000c000 #else #define IPC_MEM_VRING0 0x60000000 #define IPC_MEM_VRING1 0x60004000 -#define IPC_MEM_VRING2 0x60008000 -#define IPC_MEM_VRING3 0x6000c000 #endif /* - * Sizes of the virtqueues (expressed in number of buffers supported, + * Size of the virtqueues (expressed in number of buffers supported, * and must be power of two) */ -#define VQ0_SIZE 256 -#define VQ1_SIZE 256 -#define VQ2_SIZE 256 -#define VQ3_SIZE 256 +#define VQ_SIZE 256 /* * enum - Predefined Mailbox Messages @@ -159,7 +162,7 @@ enum { }; #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) -#define RP_MSG_NUM_BUFS (VQ0_SIZE) /* must be power of two */ +#define RP_MSG_NUM_BUFS (VQ_SIZE) /* must be power of two */ #define RP_MSG_BUF_SIZE (512) #define RP_MSG_BUFS_SPACE (RP_MSG_NUM_BUFS * RP_MSG_BUF_SIZE * 2) @@ -178,13 +181,6 @@ enum { /* The total IPC space needed to communicate with a remote processor */ #define RPMSG_IPC_MEM (RP_MSG_BUFS_SPACE + 2 * RP_MSG_RING_SIZE) -#define ID_SYSM3_TO_A9 ID_SELF_TO_A9 -#define ID_A9_TO_SYSM3 ID_A9_TO_SELF -#define ID_DSP_TO_A9 ID_SELF_TO_A9 -#define ID_A9_TO_DSP ID_A9_TO_SELF -#define ID_APPM3_TO_A9 2 -#define ID_A9_TO_APPM3 3 - typedef struct VirtQueue_Object { /* Id for this VirtQueue_Object */ UInt16 id; @@ -217,20 +213,10 @@ Registry_Desc Registry_CURDESC; static struct VirtQueue_Object *queueRegistry[NUM_QUEUES] = {NULL}; static UInt16 hostProcId; -#ifndef SMP -static UInt16 dsp1ProcId; -static UInt16 sysm3ProcId; -static UInt16 appm3ProcId; -#endif #define DSPEVENTID 5 IInterrupt_IntInfo intInfo; -#if defined(M3_ONLY) && !defined(SMP) -extern Void OffloadM3_init(); -extern Int OffloadM3_processSysM3Tasks(UArg msg); -#endif - /*! * ======== _VirtQueue_init ======== * @@ -433,100 +419,65 @@ Void VirtQueue_isr(UArg msg) Log_print1(Diags_USER1, "VirtQueue_isr received msg = 0x%x\n", msg); -#ifndef SMP - if (MultiProc_self() == sysm3ProcId || MultiProc_self() == dsp1ProcId) { -#endif - switch(msg) { - case (UInt)RP_MSG_MBOX_READY: - return; + switch(msg) { + case (UInt)RP_MSG_MBOX_READY: + return; - case (UInt)RP_MBOX_ECHO_REQUEST: - InterruptProxy_intSend(hostProcId, NULL, - (UInt)(RP_MBOX_ECHO_REPLY)); - return; + case (UInt)RP_MBOX_ECHO_REQUEST: + InterruptProxy_intSend(hostProcId, NULL, (UInt)(RP_MBOX_ECHO_REPLY)); + return; - case (UInt)RP_MBOX_ABORT_REQUEST: - { - /* Suppress Coverity Error: FORWARD_NULL: */ - /* coverity[assign_zero] */ - Fxn f = (Fxn)0x0; - Log_print0(Diags_USER1, "Crash on demand ...\n"); - /* coverity[var_deref_op] */ - f(); - } - return; + case (UInt)RP_MBOX_ABORT_REQUEST: + { + /* Suppress Coverity Error: FORWARD_NULL: */ + /* coverity[assign_zero] */ + Fxn f = (Fxn)0x0; + Log_print0(Diags_USER1, "Crash on demand ...\n"); + /* coverity[var_deref_op] */ + f(); + } + return; - case (UInt)RP_MSG_FLUSH_CACHE: - Cache_wbAll(); - return; + case (UInt)RP_MSG_FLUSH_CACHE: + Cache_wbAll(); + return; #ifndef DSP - case (UInt)RP_MSG_HIBERNATION: - if (IpcPower_canHibernate() == FALSE) { - InterruptProxy_intSend(hostProcId, NULL, - (UInt)RP_MSG_HIBERNATION_CANCEL); - return; - } - - /* Fall through */ - case (UInt)RP_MSG_HIBERNATION_FORCE: -#ifndef SMP - /* Core0 should notify Core1 */ - if (MultiProc_self() == sysm3ProcId) { - InterruptProxy_intSend(appm3ProcId, NULL, - (UInt)(RP_MSG_HIBERNATION)); - } -#endif - /* Ack request */ + case (UInt)RP_MSG_HIBERNATION: + if (IpcPower_canHibernate() == FALSE) { InterruptProxy_intSend(hostProcId, NULL, - (UInt)RP_MSG_HIBERNATION_ACK); - IpcPower_suspend(); + (UInt)RP_MSG_HIBERNATION_CANCEL); return; -#endif - default: -#if defined(M3_ONLY) && !defined(SMP) - /* Check and process any Inter-M3 Offload messages */ - if (OffloadM3_processSysM3Tasks(msg)) - return; -#endif + } - /* - * If the message isn't one of the above, it's either part of the - * 2-message synchronization sequence or it a virtqueue message - */ - break; - } -#ifndef SMP - } - else if (msg & 0xFFFF0000) { -#ifndef DSP - if (msg == (UInt)RP_MSG_HIBERNATION) { + /* Fall through */ + case (UInt)RP_MSG_HIBERNATION_FORCE: + /* Ack request */ + InterruptProxy_intSend(hostProcId, NULL, + (UInt)RP_MSG_HIBERNATION_ACK); IpcPower_suspend(); - } + return; #endif - return; + default: + /* + * If the message isn't one of the above, it's either part of the + * 2-message synchronization sequence or it a virtqueue message + */ + break; } - if (MultiProc_self() == sysm3ProcId && (msg == ID_A9_TO_APPM3 || msg == ID_APPM3_TO_A9)) { - InterruptProxy_intSend(appm3ProcId, NULL, (UInt)msg); + /* Don't let unknown messages to pass as a virtqueue index */ + if (msg >= NUM_QUEUES) { + /* Adding print here deliberately, we should never see this */ + System_printf("VirtQueue_isr: Invalid mailbox message 0x%x " + "received\n", msg); + return; } - else { -#endif - /* Don't let unknown messages to pass as a virtqueue index */ - if (msg >= NUM_QUEUES) { - /* Adding print here deliberately, we should never see this */ - System_printf("VirtQueue_isr: Invalid mailbox message 0x%x " - "received\n", msg); - return; - } - vq = queueRegistry[msg]; - if (vq) { - vq->callback(vq); - } -#ifndef SMP + vq = queueRegistry[msg]; + if (vq) { + vq->callback(vq); } -#endif } @@ -560,14 +511,6 @@ VirtQueue_Handle VirtQueue_create(UInt16 remoteProcId, VirtQueue_Params *params, vq->procId = remoteProcId; vq->last_avail_idx = 0; -#ifndef SMP - if (MultiProc_self() == appm3ProcId) { - /* vqindices that belong to AppM3 should be big so they don't - * collide with SysM3's virtqueues */ - vq->id += 2; - } -#endif - switch (vq->id) { /* IPC transport vrings */ case ID_SELF_TO_A9: @@ -578,16 +521,6 @@ VirtQueue_Handle VirtQueue_create(UInt16 remoteProcId, VirtQueue_Params *params, /* A9 -> IPU/DSP */ vringAddr = (struct vring *) IPC_MEM_VRING1; break; -#ifndef SMP - case ID_APPM3_TO_A9: - /* APPM3 -> A9 */ - vringAddr = (struct vring *) IPC_MEM_VRING2; - break; - case ID_A9_TO_APPM3: - /* A9 -> APPM3 */ - vringAddr = (struct vring *) IPC_MEM_VRING3; - break; -#endif default: GateHwi_delete(&vq->gateH); Memory_free(NULL, vq, sizeof(VirtQueue_Object)); @@ -615,28 +548,12 @@ VirtQueue_Handle VirtQueue_create(UInt16 remoteProcId, VirtQueue_Params *params, return (vq); } -/* - * The following three VIRTIO_* defines must match those in - * /include/uapi/linux/virtio_config.h - */ -#define VIRTIO_CONFIG_S_ACKNOWLEDGE 1 -#define VIRTIO_CONFIG_S_DRIVER 2 -#define VIRTIO_CONFIG_S_DRIVER_OK 4 - -#define VRING_BUFS_PRIMED (VIRTIO_CONFIG_S_ACKNOWLEDGE | \ - VIRTIO_CONFIG_S_DRIVER | VIRTIO_CONFIG_S_DRIVER_OK) - /*! * ======== VirtQueue_startup ======== */ Void VirtQueue_startup() { hostProcId = MultiProc_getId("HOST"); -#ifndef SMP - dsp1ProcId = MultiProc_getId("DSP1"); - sysm3ProcId = MultiProc_getId("CORE0"); - appm3ProcId = MultiProc_getId("CORE1"); -#endif #ifdef DSP intInfo.intVectorId = DSPEVENTID; -- 2.26.2