summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cesar/hal/ipmbox/src/ipmbox.c26
-rw-r--r--cleopatre/devkit/plcdrv/src/ipmbox.c11
-rw-r--r--common/ipmbox/protocol.h2
3 files changed, 7 insertions, 32 deletions
diff --git a/cesar/hal/ipmbox/src/ipmbox.c b/cesar/hal/ipmbox/src/ipmbox.c
index e3d84f3bd8..b1a3b28197 100644
--- a/cesar/hal/ipmbox/src/ipmbox.c
+++ b/cesar/hal/ipmbox/src/ipmbox.c
@@ -276,35 +276,11 @@ ipmbox_init (void)
== IPMBOX_PROTOCOL_QUEUE_SIZE_A2L_MBX);
dbg_assert (init_info->queue_size[IPMBOX_QUEUE_MBX][IPMBOX_L2A]
== IPMBOX_PROTOCOL_QUEUE_SIZE_L2A_MBX);
- /* Initialize DATA queues. */
- /* Sizes. */
- ctx->queue[IPMBOX_QUEUE_DATA][IPMBOX_A2L].size =
- init_info->queue_size[IPMBOX_QUEUE_DATA][IPMBOX_A2L];
- ctx->queue[IPMBOX_QUEUE_DATA][IPMBOX_L2A].size =
- init_info->queue_size[IPMBOX_QUEUE_DATA][IPMBOX_L2A];
- /* Queue pointers. */
- ctx->queue[IPMBOX_QUEUE_DATA][IPMBOX_A2L].ptr =
- (ipmbox_queue_ptr_t *) &ctx->regs->a2l_tail;
- ctx->queue[IPMBOX_QUEUE_DATA][IPMBOX_L2A].ptr =
- (ipmbox_queue_ptr_t *) &ctx->regs->l2a_tail;
- /* Base pointers. */
- ctx->queue[IPMBOX_QUEUE_DATA][IPMBOX_A2L].base_ptr =
- (u32*) ctx->queue[IPMBOX_QUEUE_DATA][IPMBOX_A2L].ptr->tail
- - ctx->queue[IPMBOX_QUEUE_DATA][IPMBOX_A2L].size + 1;
- ctx->queue[IPMBOX_QUEUE_DATA][IPMBOX_L2A].base_ptr =
- (u32*) ctx->queue[IPMBOX_QUEUE_DATA][IPMBOX_L2A].ptr->head;
- /* End pointers. */
- ctx->queue[IPMBOX_QUEUE_DATA][IPMBOX_A2L].end_ptr =
- ctx->queue[IPMBOX_QUEUE_DATA][IPMBOX_A2L].base_ptr
- + ctx->queue[IPMBOX_QUEUE_DATA][IPMBOX_A2L].size;
- ctx->queue[IPMBOX_QUEUE_DATA][IPMBOX_L2A].end_ptr =
- ctx->queue[IPMBOX_QUEUE_DATA][IPMBOX_L2A].base_ptr
- + ctx->queue[IPMBOX_QUEUE_DATA][IPMBOX_L2A].size;
/* Get shared memory base address. */
volatile ipmbox_queue_ptr_t *shared_mem_ptr_zone = init_info->shared_mem;
/* Initialize other queues. */
uint i, j;
- for (i = IPMBOX_QUEUE_MBX; i < IPMBOX_QUEUE_DATA; i++)
+ for (i = IPMBOX_QUEUE_MBX; i < IPMBOX_QUEUE_TYPE_NB; i++)
{
for (j = IPMBOX_A2L; j < IPMBOX_QUEUE_DIRECTION_NB; j++)
{
diff --git a/cleopatre/devkit/plcdrv/src/ipmbox.c b/cleopatre/devkit/plcdrv/src/ipmbox.c
index 567ce3e4a8..f2cf7786a2 100644
--- a/cleopatre/devkit/plcdrv/src/ipmbox.c
+++ b/cleopatre/devkit/plcdrv/src/ipmbox.c
@@ -205,10 +205,6 @@ ipmbox_init (ipmbox_ctx_t *ctx, struct net_device *dev,
/* Map registers. */
ctx->regs = (ipmbox_registers_t *) dev->base_addr;
- ctx->queue[IPMBOX_QUEUE_DATA][IPMBOX_A2L].ptr
- = (ipmbox_queue_ptr_t *) &ctx->regs->a2l_tail;
- ctx->queue[IPMBOX_QUEUE_DATA][IPMBOX_L2A].ptr
- = (ipmbox_queue_ptr_t *) &ctx->regs->l2a_tail;
/* Mask all interrupts. */
ctx->regs->l2a_it_mask = IPMBOX_L2A_IT | IPMBOX_L2A_IT_ACK
@@ -228,7 +224,7 @@ ipmbox_init (ipmbox_ctx_t *ctx, struct net_device *dev,
for (j = 0; j < IPMBOX_QUEUE_DIRECTION_NB; j++)
ctx->shared_mem_size += ctx->queue[i][j].size * sizeof (uint32_t);
ctx->shared_mem_size += sizeof (ipmbox_queue_ptr_t)
- * (IPMBOX_QUEUE_TYPE_NB - 1) * IPMBOX_QUEUE_DIRECTION_NB;
+ * IPMBOX_QUEUE_TYPE_NB * IPMBOX_QUEUE_DIRECTION_NB;
/* Allocate shared memory. */
ctx->shared_mem_virt_base_ptr = dma_alloc_coherent
@@ -244,7 +240,7 @@ ipmbox_init (ipmbox_ctx_t *ctx, struct net_device *dev,
/* Map queues pointers (but not for data, already done in register). */
shared_mem_base_ptr = ctx->shared_mem_virt_base_ptr;
- for (i = 0; i < IPMBOX_QUEUE_DATA; i++)
+ for (i = 0; i < IPMBOX_QUEUE_TYPE_NB; i++)
{
for (j = 0; j < IPMBOX_QUEUE_DIRECTION_NB; j++)
{
@@ -286,6 +282,9 @@ ipmbox_init (ipmbox_ctx_t *ctx, struct net_device *dev,
for (j = 0; j < IPMBOX_QUEUE_DIRECTION_NB; j++)
init_struct->queue_size[i][j] = ctx->queue[i][j].size;
+ /* Use L2A head register to pass init info structure address to Cesar. */
+ ctx->regs->l2a_head = ctx->queue[IPMBOX_QUEUE_DATA][IPMBOX_L2A].ptr->head;
+
/* Initialise lock. */
spin_lock_init (&ctx->a2l_mbx_queue_lock);
diff --git a/common/ipmbox/protocol.h b/common/ipmbox/protocol.h
index af310d36cc..5b274c0dbb 100644
--- a/common/ipmbox/protocol.h
+++ b/common/ipmbox/protocol.h
@@ -20,7 +20,7 @@
* It must be changed when protocol is modified and is not compatible with
* previous version. It is stored on a 32 bits.
*/
-#define IPMBOX_PROTOCOL_VERSION 42
+#define IPMBOX_PROTOCOL_VERSION 43
/**
* Queues sizes in words.