[RFC v2 02/18] mailbox: Add an API for flushing the FIFO
Bedia, Vaibhav
vaibhav.bedia at ti.com
Wed Jan 9 00:16:19 EST 2013
On Tue, Jan 08, 2013 at 19:26:51, Shilimkar, Santosh wrote:
> On Monday 31 December 2012 06:36 PM, Vaibhav Bedia wrote:
> > On AM33XX, the mailbox module between the MPU and the
> > WKUP-M3 co-processor facilitates a one-way communication.
> > MPU uses the assigned mailbox sub-module to issue the
> > interrupt to the WKUP-M3 co-processor which then goes
> > and reads the the IPC data from registers in the control
> > module.
> >
> > WKUP-M3 is in the L4_WKUP and does not have any access to
> > the mailbox module. Due to this limitation, the MPU is
> > completely responsible for FIFO maintenance and interrupt
> > generation. MPU needs to ensure that the FIFO does not
> > overflow by reading back the assigned mailbox sub-module.
> >
> > This patch adds an API in the mailbox code which the MPU
> > can use to empty the FIFO by issuing a readback command.
> >
> > Signed-off-by: Vaibhav Bedia <vaibhav.bedia at ti.com>
> > Cc: Santosh Shilimkar <santosh.shilimkar at ti.com>
> > ---
> > Note: This patch which will be slightly reworked once the mailbox
> > driver changes are finalized.
> >
> Can you expand a bit please ?
There could be some changes in the structure names.
>
> > drivers/mailbox/mailbox-omap2.c | 19 +++++++++++++++++++
> > drivers/mailbox/mailbox.c | 36 ++++++++++++++++++++++++++++++++++++
> > drivers/mailbox/mailbox.h | 3 +++
> > include/linux/mailbox.h | 1 +
> > 4 files changed, 59 insertions(+), 0 deletions(-)
> >
> > diff --git a/drivers/mailbox/mailbox-omap2.c b/drivers/mailbox/mailbox-omap2.c
> > index 6d61159..c732be1 100644
> > --- a/drivers/mailbox/mailbox-omap2.c
> > +++ b/drivers/mailbox/mailbox-omap2.c
> > @@ -125,6 +125,23 @@ static int omap2_mbox_fifo_full(struct mailbox *mbox)
> > return mbox_read_reg(fifo->fifo_stat);
> > }
> >
> > +static int omap2_mbox_fifo_needs_flush(struct mailbox *mbox)
> > +{
> > + struct omap_mbox2_priv *p = mbox->priv;
> > + struct omap_mbox2_fifo *fifo = &p->tx_fifo;
> > +
> > + return mbox_read_reg(fifo->msg_stat);
> > +}
> > +
> > +static void omap2_mbox_fifo_readback(struct mailbox *mbox,
> > + struct mailbox_msg *msg)
> > +{
> > + struct omap_mbox2_priv *p = mbox->priv;
> > + struct omap_mbox2_fifo *fifo = &p->tx_fifo;
> > +
> > + msg->header = mbox_read_reg(fifo->msg);
> > +}
> > +
> > static int ompa2_mbox_poll_for_space(struct mailbox *mbox)
> > {
> > if (omap2_mbox_fifo_full(mbox))
> > @@ -221,6 +238,8 @@ static struct mailbox_ops omap2_mbox_ops = {
> > .read = omap2_mbox_fifo_read,
> > .write = omap2_mbox_fifo_write,
> > .empty = omap2_mbox_fifo_empty,
> > + .fifo_needs_flush = omap2_mbox_fifo_needs_flush,
> > + .fifo_readback = omap2_mbox_fifo_readback,
> > .poll_for_space = ompa2_mbox_poll_for_space,
> > .enable_irq = omap2_mbox_enable_irq,
> > .disable_irq = omap2_mbox_disable_irq,
> > diff --git a/drivers/mailbox/mailbox.c b/drivers/mailbox/mailbox.c
> > index 2f50226..92c9f68 100644
> > --- a/drivers/mailbox/mailbox.c
> > +++ b/drivers/mailbox/mailbox.c
> > @@ -57,6 +57,15 @@ static inline int mbox_empty(struct mailbox *mbox)
> > {
> > return mbox->ops->empty(mbox);
> > }
> > +static inline int mbox_fifo_needs_flush(struct mailbox *mbox)
> > +{
> > + return mbox->ops->fifo_needs_flush(mbox);
> > +}
> > +static inline void mbox_fifo_readback(struct mailbox *mbox,
> > + struct mailbox_msg *msg)
> > +{
> > + mbox->ops->fifo_readback(mbox, msg);
> > +}
> >
> > /* Mailbox IRQ handle functions */
> > static inline void ack_mbox_irq(struct mailbox *mbox, mailbox_irq_t irq)
> > @@ -110,6 +119,33 @@ out:
> > }
> > EXPORT_SYMBOL(mailbox_msg_send);
> >
> > +/*
> s/*/**
Will do.
> > + * Flush the Rx FIFO by reading back the messages
> > + * Since the normal expectation is that the Rx will do the
> > + * reading, add a debug message to indicate if we really flush
> > + *
> > + * Returns the no. of messages read back
> > + */
> Just look at the kernel doc style for above
>
> Rest looks fine.
>
Ok.
Thanks,
Vaibhav
More information about the linux-arm-kernel
mailing list