[PATCH 6/6] omap: iommu: code reorganization and cleanup

Felipe Contreras felipe.contreras at gmail.com
Sat Nov 6 04:34:48 EDT 2010


On Sat, Nov 6, 2010 at 3:19 AM, Omar Ramirez Luna <omar.ramirez at ti.com> wrote:
> Since omap-iommu is now using hwmod, there are structures and
> arrays that can be cleaned up to increase the readability of
> the code.
>
> Signed-off-by: Omar Ramirez Luna <omar.ramirez at ti.com>

NAK.

> ---
>  arch/arm/mach-omap2/omap-iommu.c        |   95 +++++++++++--------------------
>  arch/arm/plat-omap/include/plat/iommu.h |    2 +-
>  2 files changed, 34 insertions(+), 63 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/omap-iommu.c b/arch/arm/mach-omap2/omap-iommu.c
> index 0a76bce..135474b 100644
> --- a/arch/arm/mach-omap2/omap-iommu.c
> +++ b/arch/arm/mach-omap2/omap-iommu.c
> @@ -17,53 +17,17 @@
>  #include <plat/omap_hwmod.h>
>  #include <plat/omap_device.h>
>
> -struct iommu_device {
> -       struct iommu_platform_data pdata;
> +static char *omap3_devices[] = {

Shouldn't this be __init?

> +       "isp",

#if defined(CONFIG_MPU_BRIDGE_IOMMU)

> +       "iva2",

#endif

> +       NULL,
>  };

If you want to get rid of CONFIG_MPU_BRIDGE_IOMMU, do it in a separate patch.

> -static int num_iommu_devices;
> -
> -#ifdef CONFIG_ARCH_OMAP3
> -static struct iommu_device omap3_devices[] = {
> -       {
> -               .pdata = {
> -                       .name = "isp",
> -               },
> -       },
> -#if defined(CONFIG_MPU_BRIDGE_IOMMU)
> -       {
> -               .pdata = {
> -                       .name = "iva2",
> -               },
> -       },
> -#endif
> -};
> -#define NR_OMAP3_IOMMU_DEVICES ARRAY_SIZE(omap3_devices)
> -#else
> -#define omap3_devices          NULL
> -#define NR_OMAP3_IOMMU_DEVICES 0
> -#endif
> -
> -#ifdef CONFIG_ARCH_OMAP4
> -static struct iommu_device omap4_devices[] = {
> -       {
> -               .pdata = {
> -                       .name = "ducati",
> -               },
> -       },
> -#if defined(CONFIG_MPU_TESLA_IOMMU)
> -       {
> -               .pdata = {
> -                       .name = "tesla",
> -               },
> -       },
> -#endif
> +
> +static char *omap4_devices[] = {
> +       "ducati",
> +       "tesla",
> +       NULL,
>  };
> -#define NR_OMAP4_IOMMU_DEVICES ARRAY_SIZE(omap4_devices)
> -#else
> -#define omap4_devices          NULL
> -#define NR_OMAP4_IOMMU_DEVICES 0
> -#endif
>
>  static struct omap_device_pm_latency iommu_latencies[] = {
>        [0] = {
> @@ -73,36 +37,28 @@ static struct omap_device_pm_latency iommu_latencies[] = {
>        },
>  };
>
> -static int __init omap_iommu_init(void)
> +static int __init omap_iommu_add(char **devices)
>  {
>        int i;
>
> -       if (cpu_is_omap34xx()) {
> -               devices = omap3_devices;
> -               num_iommu_devices = NR_OMAP3_IOMMU_DEVICES;
> -       } else if (cpu_is_omap44xx()) {
> -               devices = omap4_devices;
> -               num_iommu_devices = NR_OMAP4_IOMMU_DEVICES;
> -       } else
> -               return -ENODEV;
> -
> -       for (i = 0; i < num_iommu_devices; i++) {
> +       for (i = 0; devices[i]; i++) {
>                struct omap_hwmod *oh;
>                struct omap_device *od;
> +               struct iommu_platform_data pdata;
>
> -               oh = omap_hwmod_lookup(devices[i].pdata.name);
> +               oh = omap_hwmod_lookup(devices[i]);
>                if (!oh) {
>                        pr_err("%s: hwmod not found\n", __func__);
>                        return -ENODEV;
>                }
>
> -               devices[i].pdata.mmu_attr =
> -                               (struct omap_mmu_dev_attr *)oh->dev_attr;
> -               devices[i].pdata.device_enable = omap_device_enable;
> -               devices[i].pdata.device_disable = omap_device_idle;
> +               pdata.name = devices[i];
> +               pdata.mmu_attr = (struct omap_mmu_dev_attr *)oh->dev_attr;

No need for casting on a 'void *'.

> +               pdata.device_enable = omap_device_enable;
> +               pdata.device_disable = omap_device_idle;
>
>                od = omap_device_build("omap-iommu", i, oh,
> -                               &devices[i].pdata, sizeof(devices[i].pdata),
> +                               &pdata, sizeof(pdata),
>                                iommu_latencies, ARRAY_SIZE(iommu_latencies),
>                                0);
>                if (!od) {
> @@ -110,8 +66,23 @@ static int __init omap_iommu_init(void)
>                        return -EPERM;
>                }
>        }
> +
>        return 0;
>  }
> +
> +static int __init omap_iommu_init(void)
> +{
> +       int err;
> +
> +       if (cpu_is_omap34xx())
> +               err = omap_iommu_add(omap3_devices);
> +       else if (cpu_is_omap44xx())
> +               err = omap_iommu_add(omap4_devices);
> +       else
> +               return -ENODEV;
> +
> +       return err;
> +}

I don't see what's the point of having a separate omap_iommu_add. The
code of omap_iommu_add() can be moved to the end of omap_iommu_init()
very easily.

Cheers.

-- 
Felipe Contreras


More information about the linux-arm-kernel mailing list