|
View:
New views
3 Messages
—
Rating Filter:
Alert me
|
|
|
[PATCH v3] omap3-iommu: reorganizeThis is the third version of my attempt to reorganize the omap3 iommu code to
make it easier to read and more extensible. I've taken into consideration Russell and Hiroshi's comments. Also, rebased on top of Tony's 'for-next' branch, although no changes have been done since v2. I'm resending because Tony asked me to. Felipe Contreras (1): omap3-iommu: reorganize arch/arm/mach-omap2/omap3-iommu.c | 62 ++++++++++++++++++------------------ 1 files changed, 31 insertions(+), 31 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@... More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ |
|
|
[PATCH v3] omap3-iommu: reorganizeThis way it's more object oriented and easier to see what is happening.
No functional changes. Signed-off-by: Felipe Contreras <felipe.contreras@...> --- arch/arm/mach-omap2/omap3-iommu.c | 62 ++++++++++++++++++------------------ 1 files changed, 31 insertions(+), 31 deletions(-) diff --git a/arch/arm/mach-omap2/omap3-iommu.c b/arch/arm/mach-omap2/omap3-iommu.c index 6a9bf4f..fbbcb5c 100644 --- a/arch/arm/mach-omap2/omap3-iommu.c +++ b/arch/arm/mach-omap2/omap3-iommu.c @@ -14,47 +14,50 @@ #include <plat/iommu.h> -#define OMAP3_MMU1_BASE 0x480bd400 -#define OMAP3_MMU2_BASE 0x5d000000 -#define OMAP3_MMU1_IRQ 24 -#define OMAP3_MMU2_IRQ 28 - - -static unsigned long iommu_base[] __initdata = { - OMAP3_MMU1_BASE, - OMAP3_MMU2_BASE, -}; - -static int iommu_irq[] __initdata = { - OMAP3_MMU1_IRQ, - OMAP3_MMU2_IRQ, +struct iommu_device { + resource_size_t base; + int irq; + struct iommu_platform_data pdata; + struct resource res[2]; }; -static const struct iommu_platform_data omap3_iommu_pdata[] __initconst = { +static struct iommu_device devices[] = { { - .name = "isp", - .nr_tlb_entries = 8, - .clk_name = "cam_ick", + .base = 0x480bd400, + .irq = 24, + .pdata = { + .name = "isp", + .nr_tlb_entries = 8, + .clk_name = "cam_ick", + }, }, #if defined(CONFIG_MPU_BRIDGE_IOMMU) { - .name = "iva2", - .nr_tlb_entries = 32, - .clk_name = "iva2_ck", + .base = 0x5d000000, + .irq = 28, + .pdata = { + .name = "iva2", + .nr_tlb_entries = 32, + .clk_name = "iva2_ck", + }, }, #endif }; -#define NR_IOMMU_DEVICES ARRAY_SIZE(omap3_iommu_pdata) +#define NR_IOMMU_DEVICES ARRAY_SIZE(devices) static struct platform_device *omap3_iommu_pdev[NR_IOMMU_DEVICES]; static int __init omap3_iommu_init(void) { int i, err; + struct resource res[] = { + { .flags = IORESOURCE_MEM }, + { .flags = IORESOURCE_IRQ }, + }; for (i = 0; i < NR_IOMMU_DEVICES; i++) { struct platform_device *pdev; - struct resource res[2]; + const struct iommu_device *d = &devices[i]; pdev = platform_device_alloc("omap-iommu", i); if (!pdev) { @@ -62,19 +65,16 @@ static int __init omap3_iommu_init(void) goto err_out; } - memset(res, 0, sizeof(res)); - res[0].start = iommu_base[i]; - res[0].end = iommu_base[i] + MMU_REG_SIZE - 1; - res[0].flags = IORESOURCE_MEM; - res[1].start = res[1].end = iommu_irq[i]; - res[1].flags = IORESOURCE_IRQ; + res[0].start = d->base; + res[0].end = d->base + MMU_REG_SIZE - 1; + res[1].start = res[1].end = d->irq; err = platform_device_add_resources(pdev, res, ARRAY_SIZE(res)); if (err) goto err_out; - err = platform_device_add_data(pdev, &omap3_iommu_pdata[i], - sizeof(omap3_iommu_pdata[0])); + err = platform_device_add_data(pdev, &d->pdata, + sizeof(d->pdata)); if (err) goto err_out; err = platform_device_add(pdev); -- 1.6.5.2 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@... More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ |
|
|
Re: [PATCH v3] omap3-iommu: reorganizeOn Thu, Nov 12, 2009 at 10:52 PM, Felipe Contreras
<felipe.contreras@...> wrote: > This is the third version of my attempt to reorganize the omap3 iommu code to > make it easier to read and more extensible. I've taken into consideration > Russell and Hiroshi's comments. Also, rebased on top of Tony's 'for-next' > branch, although no changes have been done since v2. > > I'm resending because Tony asked me to. Last comments from Hiroshi were not so positive, so I'm attaching a dummy omap4-iommu.c with 4 devices in order to show that the new format is actually more extensible (the 2 formats are shown). Cheers. -- Felipe Contreras [omap4-iommu-1.c] /* * omap iommu: omap4 device registration * * Copyright (C) 2008-2009 Nokia Corporation * * Written by Hari Kanigeri <h-kanigeri2@...> * * Added support for OMAP4. This is based on original file * omap3-iommu.c * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ #include <linux/platform_device.h> #include <mach/iommu.h> #include <mach/irqs.h> #define OMAP4_MMU1_BASE 0x55082000 #define OMAP4_MMU2_BASE 0x4A066000 #define OMAP4_MMU3_BASE 0x00000000 #define OMAP4_MMU4_BASE 0x00000000 #define OMAP4_MMU1_IRQ INT_44XX_DUCATI_MMU_IRQ #define OMAP4_MMU2_IRQ INT_44XX_DSP_MMU #define OMAP4_MMU3_IRQ 0 #define OMAP4_MMU4_IRQ 0 static unsigned long iommu_base[] __initdata = { OMAP4_MMU1_BASE, OMAP4_MMU2_BASE, OMAP4_MMU3_BASE, OMAP4_MMU4_BASE, }; static int iommu_irq[] __initdata = { OMAP4_MMU1_IRQ, OMAP4_MMU2_IRQ, OMAP4_MMU3_IRQ, }; static const struct iommu_platform_data omap4_iommu_pdata[] __initconst = { { .name = "ducati", .nr_tlb_entries = 32, }, { .name = "isp", .nr_tlb_entries = 8, }, { .name = "foobar", .nr_tlb_entries = 8, }, #if defined(CONFIG_MPU_TESLA_IOMMU) { .name = "tesla", .nr_tlb_entries = 32, }, #endif }; #define NR_IOMMU_DEVICES ARRAY_SIZE(omap4_iommu_pdata) static struct platform_device *omap4_iommu_pdev[NR_IOMMU_DEVICES]; static int __init omap4_iommu_init(void) { int i, err; for (i = 0; i < NR_IOMMU_DEVICES; i++) { struct platform_device *pdev; struct resource res[2]; pdev = platform_device_alloc("omap-iommu", i); if (!pdev) { err = -ENOMEM; goto err_out; } memset(res, 0, sizeof(res)); res[0].start = iommu_base[i]; res[0].end = iommu_base[i] + MMU_REG_SIZE - 1; res[0].flags = IORESOURCE_MEM; res[1].start = res[1].end = iommu_irq[i]; res[1].flags = IORESOURCE_IRQ; err = platform_device_add_resources(pdev, res, ARRAY_SIZE(res)); if (err) goto err_out; err = platform_device_add_data(pdev, &omap4_iommu_pdata[i], sizeof(omap4_iommu_pdata[0])); if (err) goto err_out; err = platform_device_add(pdev); if (err) goto err_out; omap4_iommu_pdev[i] = pdev; } return 0; err_out: while (i--) platform_device_put(omap4_iommu_pdev[i]); return err; } module_init(omap4_iommu_init); static void __exit omap4_iommu_exit(void) { int i; for (i = 0; i < NR_IOMMU_DEVICES; i++) platform_device_unregister(omap4_iommu_pdev[i]); } module_exit(omap4_iommu_exit); MODULE_AUTHOR("Hiroshi DOYU, Hari Kanigeri"); MODULE_DESCRIPTION("omap iommu: omap4 device registration"); MODULE_LICENSE("GPL v2"); [omap4-iommu-2.c] /* * omap iommu: omap4 device registration * * Copyright (C) 2008-2009 Nokia Corporation * * Written by Hari Kanigeri <h-kanigeri2@...> * * Added support for OMAP4. This is based on original file * omap3-iommu.c * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ #include <linux/platform_device.h> #include <mach/iommu.h> #include <mach/irqs.h> struct iommu_device { resource_size_t base; int irq; struct iommu_platform_data pdata; struct resource res[2]; }; static struct iommu_device devices[] = { { .base = 0x55082000, .irq = INT_44XX_DUCATI_MMU_IRQ, .pdata = { .name = "ducati", .nr_tlb_entries = 32, }, }, { .base = 0x00000000, .irq = 0, .pdata = { .name = "isp", .nr_tlb_entries = 8, }, }, { .base = 0x00000000, .irq = 0, .pdata = { .name = "foobar", .nr_tlb_entries = 8, }, }, #if defined(CONFIG_MPU_TESLA_IOMMU) { .base = 0x4A066000, .irq = INT_44XX_DSP_MMU, .pdata = { .name = "tesla", .nr_tlb_entries = 32, }, }, #endif }; #define NR_IOMMU_DEVICES ARRAY_SIZE(devices) static struct platform_device *omap4_iommu_pdev[NR_IOMMU_DEVICES]; static int __init omap4_iommu_init(void) { int i, err; struct resource res[] = { { .flags = IORESOURCE_MEM }, { .flags = IORESOURCE_IRQ }, }; for (i = 0; i < NR_IOMMU_DEVICES; i++) { struct platform_device *pdev; const struct iommu_device *d = &devices[i]; pdev = platform_device_alloc("omap-iommu", i); if (!pdev) { err = -ENOMEM; goto err_out; } res[0].start = d->base; res[0].end = d->base + MMU_REG_SIZE - 1; res[1].start = res[1].end = d->irq; err = platform_device_add_resources(pdev, res, ARRAY_SIZE(res)); if (err) goto err_out; err = platform_device_add_data(pdev, &d->pdata, sizeof(d->pdata)); if (err) goto err_out; err = platform_device_add(pdev); if (err) goto err_out; omap4_iommu_pdev[i] = pdev; } return 0; err_out: while (i--) platform_device_put(omap4_iommu_pdev[i]); return err; } module_init(omap4_iommu_init); static void __exit omap4_iommu_exit(void) { int i; for (i = 0; i < NR_IOMMU_DEVICES; i++) platform_device_unregister(omap4_iommu_pdev[i]); } module_exit(omap4_iommu_exit); MODULE_AUTHOR("Hiroshi DOYU, Hari Kanigeri"); MODULE_DESCRIPTION("omap iommu: omap4 device registration"); MODULE_LICENSE("GPL v2"); |
| Free embeddable forum powered by Nabble | Forum Help |