From: Michael Bringmann <michael.bringm...@lsi.com> Increased the inbox mail buffer size by 8 times. Removed __devinit from the initialization routines
Signed-off-by: Michael Bringmann <michael.bringm...@lsi.com> --- drivers/rapidio/devices/lsi/axxia-rio-irq.c | 24 +++++++++--------------- drivers/rapidio/devices/lsi/axxia-rio.c | 4 ++-- drivers/rapidio/rio.c | 9 ++++++--- 3 files changed, 17 insertions(+), 20 deletions(-) diff --git a/drivers/rapidio/devices/lsi/axxia-rio-irq.c b/drivers/rapidio/devices/lsi/axxia-rio-irq.c index 73b5a4c..6a4d227 100644 --- a/drivers/rapidio/devices/lsi/axxia-rio-irq.c +++ b/drivers/rapidio/devices/lsi/axxia-rio-irq.c @@ -1010,7 +1010,7 @@ static inline int choose_ob_dme( if (len > sz) continue; - if (dme->entries >= (dme->entries_in_use+1)) { + if (dme->entries > (dme->entries_in_use+1)) { (*ob_dme) = dme; (*buf_sz) = sz; return ret + i; @@ -1474,7 +1474,6 @@ static void ib_dme_irq_handler(struct rio_irq_handler *h, u32 state) u32 dw0; int dme_no = 31 - CNTLZW(dme_mask); int num_new; - int nPending; dme_mask ^= (1 << dme_no); while (mb->me[letter]->dme_no != dme_no) @@ -1514,7 +1513,7 @@ static void ib_dme_irq_handler(struct rio_irq_handler *h, u32 state) #endif /** * Set Valid flag to 0 on each desc with a new message. - * Flag is reset when the message beloning to the desc + * Flag is reset when the message belonging to the desc * is fetched in get_inb_message(). * HW descriptor update and fetch is in order. */ @@ -1545,6 +1544,12 @@ static void ib_dme_irq_handler(struct rio_irq_handler *h, u32 state) dw0 & ~DME_DESC_DW0_VALID); } + if (mport->inb_msg[mbox_no].mcback) + mport->inb_msg[mbox_no].mcback(mport, + me->dev_id, + mbox_no, + desc->desc_no); + __ib_dme_dw_dbg(priv, dw0); __ib_dme_event_dbg(priv, dme_no, 1 << RIO_IB_DME_RX_PUSH); @@ -1565,16 +1570,6 @@ static void ib_dme_irq_handler(struct rio_irq_handler *h, u32 state) __ib_dme_event_dbg(priv, dme_no, 1 << RIO_IB_DME_RX_RING_FULL); - nPending = atomic_read(&me->pending); - if (nPending && - mport->inb_msg[mbox_no].mcback) { - - mport->inb_msg[mbox_no].mcback(mport, - me->dev_id, - mbox_no, - letter); - } - if (dme_stat & IB_DME_STAT_SLEEPING) { struct rio_msg_desc *desc; u32 dme_ctrl; @@ -2129,8 +2124,7 @@ static struct rio_msg_desc *get_ob_desc(struct rio_mport *mport, DESC_TABLE_W0(desc->desc_no), &dw0); } - if (!(dw0 & DME_DESC_DW0_VALID) || - (dw0 & DME_DESC_DW0_ERROR_MASK)) { + if (!(dw0 & DME_DESC_DW0_VALID)) { if (desc_num != mb->write_idx) return NULL; if (desc_num == mb->write_idx) diff --git a/drivers/rapidio/devices/lsi/axxia-rio.c b/drivers/rapidio/devices/lsi/axxia-rio.c index 4673b6b..1f1fc39 100644 --- a/drivers/rapidio/devices/lsi/axxia-rio.c +++ b/drivers/rapidio/devices/lsi/axxia-rio.c @@ -1369,7 +1369,7 @@ static int rio_mport_dtb_setup(struct platform_device *dev, return -ENOMEM; } rio_init_dbell_res(&mport->riores[RIO_DOORBELL_RESOURCE], 0, 0xffff); - rio_init_mbox_res(&mport->riores[RIO_INB_MBOX_RESOURCE], 0, 8); + rio_init_mbox_res(&mport->riores[RIO_INB_MBOX_RESOURCE], 0, 64); rio_init_mbox_res(&mport->riores[RIO_OUTB_MBOX_RESOURCE], 0, 3); sprintf(mport->name, "RIO%d mport", mport->id); @@ -1743,7 +1743,7 @@ err_ops: /* The probe function for RapidIO peer-to-peer network. */ -static int __devinit axxia_of_rio_rpn_probe(struct platform_device *dev) +static int axxia_of_rio_rpn_probe(struct platform_device *dev) { IODP(KERN_INFO "Setting up RapidIO peer-to-peer network %s\n", dev->dev.of_node->full_name); diff --git a/drivers/rapidio/rio.c b/drivers/rapidio/rio.c index 3148271..0fe82b3 100644 --- a/drivers/rapidio/rio.c +++ b/drivers/rapidio/rio.c @@ -414,7 +414,10 @@ int rio_release_outb_mbox(struct rio_mport *mport, int mbox) mport->ops->close_outb_mbox(mport, mbox); /* Release the mailbox resource */ - return release_resource(mport->outb_msg[mbox].res); + if (mport->outb_msg[mbox].res) + return release_resource(mport->outb_msg[mbox].res); + else + return -ENOMEM; } else return -ENOSYS; } @@ -1729,7 +1732,7 @@ static void rio_fixup_device(struct rio_dev *dev) { } -static int __devinit rio_init(void) +static int rio_init(void) { struct rio_dev *dev = NULL; @@ -1741,7 +1744,7 @@ static int __devinit rio_init(void) * @note No lock; Assuming this is used at boot time only, * before start of user space */ -int __devinit rio_init_mports(void) +int rio_init_mports(void) { struct rio_mport *port; -- 1.7.9.5 -- _______________________________________________ linux-yocto mailing list linux-yo...@yoctoproject.org https://lists.yoctoproject.org/listinfo/linux-yocto