[PATCH 5/7] ARM: OMAP2+: mbox: remove dependencies with soc.h
The OMAP mailbox platform driver code has been cleaned up to remove the dependencies with soc.h in preparation for moving the mailbox code to drivers folder. The code relied on cpu_is_xxx/soc_is_xxx macros previously to pick the the right set of mailbox devices and register with the mailbox driver. This data is now represented in a concise format and moved to the respective omap_hwmod data files and published to the driver through the platform data. Cc: Paul Walmsley Signed-off-by: Suman Anna --- arch/arm/mach-omap2/devices.c | 9 +- arch/arm/mach-omap2/mailbox.c | 250 ++--- arch/arm/mach-omap2/omap_hwmod_2420_data.c | 12 ++ arch/arm/mach-omap2/omap_hwmod_2430_data.c | 11 ++ arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 11 ++ arch/arm/mach-omap2/omap_hwmod_44xx_data.c | 13 ++ arch/arm/plat-omap/include/plat/mailbox.h | 2 +- include/linux/platform_data/mailbox-omap.h | 53 ++ 8 files changed, 198 insertions(+), 163 deletions(-) create mode 100644 include/linux/platform_data/mailbox-omap.h diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c index 4269fc1..4c97a86 100644 --- a/arch/arm/mach-omap2/devices.c +++ b/arch/arm/mach-omap2/devices.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -332,14 +333,20 @@ static inline void __init omap_init_mbox(void) { struct omap_hwmod *oh; struct platform_device *pdev; + struct omap_mbox_pdata *pdata; oh = omap_hwmod_lookup("mailbox"); if (!oh) { pr_err("%s: unable to find hwmod\n", __func__); return; } + if (!oh->dev_attr) { + pr_err("%s: hwmod doesn't have valid attrs\n", __func__); + return; + } - pdev = omap_device_build("omap-mailbox", -1, oh, NULL, 0); + pdata = (struct omap_mbox_pdata *)oh->dev_attr; + pdev = omap_device_build("omap-mailbox", -1, oh, pdata, sizeof(*pdata)); WARN(IS_ERR(pdev), "%s: could not build device, err %ld\n", __func__, PTR_ERR(pdev)); } diff --git a/arch/arm/mach-omap2/mailbox.c b/arch/arm/mach-omap2/mailbox.c index b01aae6..fcb425c 100644 --- a/arch/arm/mach-omap2/mailbox.c +++ b/arch/arm/mach-omap2/mailbox.c @@ -11,16 +11,16 @@ */ #include +#include #include #include #include #include #include +#include #include -#include "soc.h" - #define MAILBOX_REVISION 0x000 #define MAILBOX_MESSAGE(m) (0x040 + 4 * (m)) #define MAILBOX_FIFOSTATUS(m) (0x080 + 4 * (m)) @@ -59,6 +59,7 @@ struct omap_mbox2_priv { u32 notfull_bit; u32 ctx[OMAP4_MBOX_NR_REGS]; unsigned long irqdisable; + u32 intr_type; }; static inline unsigned int mbox_read_reg(size_t ofs) @@ -136,7 +137,7 @@ static void omap2_mbox_disable_irq(struct omap_mbox *mbox, omap_mbox_irq_t irq) struct omap_mbox2_priv *p = mbox->priv; u32 bit = (irq == IRQ_TX) ? p->notfull_bit : p->newmsg_bit; - if (!cpu_is_omap44xx()) + if (!p->intr_type) bit = mbox_read_reg(p->irqdisable) & ~bit; mbox_write_reg(bit, p->irqdisable); @@ -168,7 +169,8 @@ static void omap2_mbox_save_ctx(struct omap_mbox *mbox) int i; struct omap_mbox2_priv *p = mbox->priv; int nr_regs; - if (cpu_is_omap44xx()) + + if (p->intr_type) nr_regs = OMAP4_MBOX_NR_REGS; else nr_regs = MBOX_NR_REGS; @@ -185,7 +187,8 @@ static void omap2_mbox_restore_ctx(struct omap_mbox *mbox) int i; struct omap_mbox2_priv *p = mbox->priv; int nr_regs; - if (cpu_is_omap44xx()) + + if (p->intr_type) nr_regs = OMAP4_MBOX_NR_REGS; else nr_regs = MBOX_NR_REGS; @@ -213,188 +216,113 @@ static struct omap_mbox_ops omap2_mbox_ops = { .restore_ctx= omap2_mbox_restore_ctx, }; -/* - * MAILBOX 0: ARM -> DSP, - * MAILBOX 1: ARM <- DSP. - * MAILBOX 2: ARM -> IVA, - * MAILBOX 3: ARM <- IVA. - */ - -/* FIXME: the following structs should be filled automatically by the user id */ - -#if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_ARCH_OMAP2) -/* DSP */ -static struct omap_mbox2_priv omap2_mbox_dsp_priv = { - .tx_fifo = { - .msg= MAILBOX_MESSAGE(0), - .fifo_stat = MAILBOX_FIFOSTATUS(0), - }, - .rx_fifo = { - .msg= MAILBOX_MESSAGE(1), - .msg_stat = MAILBOX_MSGSTATUS(1), - }, - .irqenable = MAILBOX_IRQENABLE(0), - .irqstatus = MAILBOX_IRQSTATUS(0), - .notfull_bit= MAILBOX_IRQ_NOTFULL(0), - .newmsg_bit = MAILBOX_IRQ_NEWMSG(1), - .irqdisable = MAILBOX_IRQENABLE(0), -}; - -struct omap_mbox mbox_dsp_info = { - .name = "dsp", - .ops= &omap2_mbox_ops, -
Re: [PATCH 5/7] ARM: OMAP2+: mbox: remove dependencies with soc.h
On Fri, Jun 7, 2013 at 6:58 PM, Suman Anna wrote: > The OMAP mailbox platform driver code has been cleaned up to > remove the dependencies with soc.h in preparation for moving > the mailbox code to drivers folder. > > The code relied on cpu_is_xxx/soc_is_xxx macros previously to > pick the the right set of mailbox devices and register with the > mailbox driver. This data is now represented in a concise format > and moved to the respective omap_hwmod data files and published > to the driver through the platform data. I have some comments on how the cpu_is_xxx/soc_is_xxx was done. In its current form, intr_type is just a sub for cpu_is_omap44xx(). I'd like to see the scope of that parameter reduced a bit and have the changes match the model of gpio-omap.c a little better (see 4e962e89 for an example). Comments inline. > Cc: Paul Walmsley > Signed-off-by: Suman Anna > --- > arch/arm/mach-omap2/devices.c | 9 +- > arch/arm/mach-omap2/mailbox.c | 250 > ++--- > arch/arm/mach-omap2/omap_hwmod_2420_data.c | 12 ++ > arch/arm/mach-omap2/omap_hwmod_2430_data.c | 11 ++ > arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 11 ++ > arch/arm/mach-omap2/omap_hwmod_44xx_data.c | 13 ++ > arch/arm/plat-omap/include/plat/mailbox.h | 2 +- > include/linux/platform_data/mailbox-omap.h | 53 ++ > 8 files changed, 198 insertions(+), 163 deletions(-) > create mode 100644 include/linux/platform_data/mailbox-omap.h > > diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c > index 4269fc1..4c97a86 100644 > --- a/arch/arm/mach-omap2/devices.c > +++ b/arch/arm/mach-omap2/devices.c > @@ -20,6 +20,7 @@ > #include > #include > #include > +#include > #include > > #include > @@ -332,14 +333,20 @@ static inline void __init omap_init_mbox(void) > { > struct omap_hwmod *oh; > struct platform_device *pdev; > + struct omap_mbox_pdata *pdata; > > oh = omap_hwmod_lookup("mailbox"); > if (!oh) { > pr_err("%s: unable to find hwmod\n", __func__); > return; > } > + if (!oh->dev_attr) { > + pr_err("%s: hwmod doesn't have valid attrs\n", __func__); > + return; > + } > > - pdev = omap_device_build("omap-mailbox", -1, oh, NULL, 0); > + pdata = (struct omap_mbox_pdata *)oh->dev_attr; > + pdev = omap_device_build("omap-mailbox", -1, oh, pdata, > sizeof(*pdata)); > WARN(IS_ERR(pdev), "%s: could not build device, err %ld\n", > __func__, PTR_ERR(pdev)); > } > diff --git a/arch/arm/mach-omap2/mailbox.c b/arch/arm/mach-omap2/mailbox.c > index b01aae6..fcb425c 100644 > --- a/arch/arm/mach-omap2/mailbox.c > +++ b/arch/arm/mach-omap2/mailbox.c > @@ -11,16 +11,16 @@ > */ > > #include > +#include > #include > #include > #include > #include > #include > +#include > > #include > > -#include "soc.h" > - > #define MAILBOX_REVISION 0x000 > #define MAILBOX_MESSAGE(m) (0x040 + 4 * (m)) > #define MAILBOX_FIFOSTATUS(m) (0x080 + 4 * (m)) > @@ -59,6 +59,7 @@ struct omap_mbox2_priv { > u32 notfull_bit; > u32 ctx[OMAP4_MBOX_NR_REGS]; > unsigned long irqdisable; > + u32 intr_type; > }; > > static inline unsigned int mbox_read_reg(size_t ofs) > @@ -136,7 +137,7 @@ static void omap2_mbox_disable_irq(struct omap_mbox > *mbox, omap_mbox_irq_t irq) > struct omap_mbox2_priv *p = mbox->priv; > u32 bit = (irq == IRQ_TX) ? p->notfull_bit : p->newmsg_bit; > > - if (!cpu_is_omap44xx()) > + if (!p->intr_type) > bit = mbox_read_reg(p->irqdisable) & ~bit; This part here should really be the scope of intr_type. Is there any way to name it better though? An indication of what it's actually doing? > mbox_write_reg(bit, p->irqdisable); > @@ -168,7 +169,8 @@ static void omap2_mbox_save_ctx(struct omap_mbox *mbox) > int i; > struct omap_mbox2_priv *p = mbox->priv; > int nr_regs; > - if (cpu_is_omap44xx()) > + > + if (p->intr_type) > nr_regs = OMAP4_MBOX_NR_REGS; > else > nr_regs = MBOX_NR_REGS; Here it would seem to be better to put nr_regs in pdata. > @@ -185,7 +187,8 @@ static void omap2_mbox_restore_ctx(struct omap_mbox *mbox) > int i; > struct omap_mbox2_priv *p = mbox->priv; > int nr_regs; > - if (cpu_is_omap44xx()) > + > + if (p->intr_type) > nr_regs = OMAP4_MBOX_NR_REGS; > else > nr_regs = MBOX_NR_REGS; Same here. > @@ -213,188 +216,113 @@ static struct omap_mbox_ops omap2_mbox_ops = { > .restore_ctx= omap2_mbox_restore_ctx, > }; > > -/* > - * MAILBOX 0: ARM -> DSP, > - * MAILBOX 1: ARM <- DSP. > - * MAILBOX 2: ARM -> IVA, > - * MAILBOX 3: ARM <- IVA. > - */ > - > -/* FIXME: the following structs
Re: [PATCH 5/7] ARM: OMAP2+: mbox: remove dependencies with soc.h
Russ, On 06/08/2013 02:16 PM, Russ Dill wrote: > On Fri, Jun 7, 2013 at 6:58 PM, Suman Anna wrote: >> The OMAP mailbox platform driver code has been cleaned up to >> remove the dependencies with soc.h in preparation for moving >> the mailbox code to drivers folder. >> >> The code relied on cpu_is_xxx/soc_is_xxx macros previously to >> pick the the right set of mailbox devices and register with the >> mailbox driver. This data is now represented in a concise format >> and moved to the respective omap_hwmod data files and published >> to the driver through the platform data. > > I have some comments on how the cpu_is_xxx/soc_is_xxx was done. In its > current form, intr_type is just a sub for cpu_is_omap44xx(). I'd like > to see the scope of that parameter reduced a bit and have the changes > match the model of gpio-omap.c a little better (see 4e962e89 for an > example). Comments inline. I have looked up the gpio-omap.c and the usage style is different. The purpose here is similar, the interrupt programming is different between OMAP4+ and OMAP3-. For gpio, all the registers are supplied through platform data (published differently for DT and non-DT). The knowledge of the registers is with the driver for mailbox (in both DT and non-DT), with only the bare minimum data passed through pdata (for non-DT) with this patch. The only variation in mailbox registers is the interrupt type configuration, the number of valid registers are dictated by number of fifos and number of target processors, and I have added these to the platform data in Patch6. The main purpose of this patch is to remove the cpu_is_xxx macro dependencies which are currently used for defining the different mboxes as well as the register programming. I didn't want to separate out the mailbox device creation into a separate file with all the additional data that this patch is removing, we do not want to create a new file in mach-omap2 at this point. The omap_mbox_init will essentially vanish for DT, and so would be the dev_attrs being added to the hwmod data files. > >> Cc: Paul Walmsley >> Signed-off-by: Suman Anna >> --- >> arch/arm/mach-omap2/devices.c | 9 +- >> arch/arm/mach-omap2/mailbox.c | 250 >> ++--- >> arch/arm/mach-omap2/omap_hwmod_2420_data.c | 12 ++ >> arch/arm/mach-omap2/omap_hwmod_2430_data.c | 11 ++ >> arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 11 ++ >> arch/arm/mach-omap2/omap_hwmod_44xx_data.c | 13 ++ >> arch/arm/plat-omap/include/plat/mailbox.h | 2 +- >> include/linux/platform_data/mailbox-omap.h | 53 ++ >> 8 files changed, 198 insertions(+), 163 deletions(-) >> create mode 100644 include/linux/platform_data/mailbox-omap.h >> >> diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c >> index 4269fc1..4c97a86 100644 >> --- a/arch/arm/mach-omap2/devices.c >> +++ b/arch/arm/mach-omap2/devices.c >> @@ -20,6 +20,7 @@ >> #include >> #include >> #include >> +#include >> #include >> >> #include >> @@ -332,14 +333,20 @@ static inline void __init omap_init_mbox(void) >> { >> struct omap_hwmod *oh; >> struct platform_device *pdev; >> + struct omap_mbox_pdata *pdata; >> >> oh = omap_hwmod_lookup("mailbox"); >> if (!oh) { >> pr_err("%s: unable to find hwmod\n", __func__); >> return; >> } >> + if (!oh->dev_attr) { >> + pr_err("%s: hwmod doesn't have valid attrs\n", __func__); >> + return; >> + } >> >> - pdev = omap_device_build("omap-mailbox", -1, oh, NULL, 0); >> + pdata = (struct omap_mbox_pdata *)oh->dev_attr; >> + pdev = omap_device_build("omap-mailbox", -1, oh, pdata, >> sizeof(*pdata)); >> WARN(IS_ERR(pdev), "%s: could not build device, err %ld\n", >> __func__, PTR_ERR(pdev)); >> } >> diff --git a/arch/arm/mach-omap2/mailbox.c b/arch/arm/mach-omap2/mailbox.c >> index b01aae6..fcb425c 100644 >> --- a/arch/arm/mach-omap2/mailbox.c >> +++ b/arch/arm/mach-omap2/mailbox.c >> @@ -11,16 +11,16 @@ >> */ >> >> #include >> +#include >> #include >> #include >> #include >> #include >> #include >> +#include >> >> #include >> >> -#include "soc.h" >> - >> #define MAILBOX_REVISION 0x000 >> #define MAILBOX_MESSAGE(m) (0x040 + 4 * (m)) >> #define MAILBOX_FIFOSTATUS(m) (0x080 + 4 * (m)) >> @@ -59,6 +59,7 @@ struct omap_mbox2_priv { >> u32 notfull_bit; >> u32 ctx[OMAP4_MBOX_NR_REGS]; >> unsigned long irqdisable; >> + u32 intr_type; >> }; >> >> static inline unsigned int mbox_read_reg(size_t ofs) >> @@ -136,7 +137,7 @@ static void omap2_mbox_disable_irq(struct omap_mbox >> *mbox, omap_mbox_irq_t irq) >> struct omap_mbox2_priv *p = mbox->priv; >> u32 bit = (irq == IRQ_TX) ? p->notfull_bit : p->newmsg_bit; >> >> - if (!cpu_is_omap44xx()) >> +