[PATCH 5/7] ARM: OMAP2+: mbox: remove dependencies with soc.h

2013-06-07 Thread Suman Anna
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

2013-06-08 Thread Russ Dill
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

2013-06-10 Thread Suman Anna
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())
>> +