* [PATCH v3] omap3-iommu: reorganize
@ 2009-11-12 20:52 Felipe Contreras
2009-11-12 20:53 ` Felipe Contreras
2009-11-12 21:00 ` Felipe Contreras
0 siblings, 2 replies; 5+ messages in thread
From: Felipe Contreras @ 2009-11-12 20:52 UTC (permalink / raw)
To: linux-kernel; +Cc: Tony Lindgren, Hiroshi Doyu, Hari Kanigeri, Felipe Contreras
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.
Felipe Contreras (1):
omap3-iommu: reorganize
arch/arm/mach-omap2/omap3-iommu.c | 62 ++++++++++++++++++------------------
1 files changed, 31 insertions(+), 31 deletions(-)
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v3] omap3-iommu: reorganize
2009-11-12 20:52 [PATCH v3] omap3-iommu: reorganize Felipe Contreras
@ 2009-11-12 20:53 ` Felipe Contreras
2009-11-12 21:00 ` Felipe Contreras
1 sibling, 0 replies; 5+ messages in thread
From: Felipe Contreras @ 2009-11-12 20:53 UTC (permalink / raw)
To: linux-kernel
Cc: Tony Lindgren, Hiroshi Doyu, Hari Kanigeri, Felipe Contreras,
Russell King, Hiroshi DOYU, linux-omap, linux-arm-kernel
This way it's more object oriented and easier to see what is happening.
No functional changes.
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
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
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v3] omap3-iommu: reorganize
@ 2009-11-12 20:53 ` Felipe Contreras
0 siblings, 0 replies; 5+ messages in thread
From: Felipe Contreras @ 2009-11-12 20:53 UTC (permalink / raw)
To: linux-arm-kernel
This way it's more object oriented and easier to see what is happening.
No functional changes.
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
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
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v3] omap3-iommu: reorganize
2009-11-12 20:52 [PATCH v3] omap3-iommu: reorganize Felipe Contreras
2009-11-12 20:53 ` Felipe Contreras
@ 2009-11-12 21:00 ` Felipe Contreras
1 sibling, 0 replies; 5+ messages in thread
From: Felipe Contreras @ 2009-11-12 21:00 UTC (permalink / raw)
To: linux-kernel; +Cc: Tony Lindgren, Hiroshi Doyu, Hari Kanigeri, Felipe Contreras
[-- Attachment #1: Type: text/plain, Size: 645 bytes --]
On Thu, Nov 12, 2009 at 10:52 PM, Felipe Contreras
<felipe.contreras@gmail.com> 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
[-- Attachment #2: omap4-iommu-1.c --]
[-- Type: text/x-csrc, Size: 2699 bytes --]
/*
* omap iommu: omap4 device registration
*
* Copyright (C) 2008-2009 Nokia Corporation
*
* Written by Hari Kanigeri <h-kanigeri2@ti.com>
*
* 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");
[-- Attachment #3: omap4-iommu-2.c --]
[-- Type: text/x-csrc, Size: 2502 bytes --]
/*
* omap iommu: omap4 device registration
*
* Copyright (C) 2008-2009 Nokia Corporation
*
* Written by Hari Kanigeri <h-kanigeri2@ti.com>
*
* 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");
^ permalink raw reply [flat|nested] 5+ messages in thread
* [APPLIED] [PATCH v3] omap3-iommu: reorganize
2009-11-12 20:53 ` Felipe Contreras
(?)
@ 2009-11-12 23:31 ` Tony Lindgren
-1 siblings, 0 replies; 5+ messages in thread
From: Tony Lindgren @ 2009-11-12 23:31 UTC (permalink / raw)
To: linux-omap
This patch has been applied to the linux-omap
by youw fwiendly patch wobot.
Branch in linux-omap: for-next
Initial commit ID (Likely to change): 295f8ab5e478722a05388c25e73a5549c97312e1
PatchWorks
http://patchwork.kernel.org/patch/59650/
Git (Likely to change, and takes a while to get mirrored)
http://git.kernel.org/?p=linux/kernel/git/tmlind/linux-omap-2.6.git;a=commit;h=295f8ab5e478722a05388c25e73a5549c97312e1
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2009-11-12 23:31 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-11-12 20:52 [PATCH v3] omap3-iommu: reorganize Felipe Contreras
2009-11-12 20:53 ` Felipe Contreras
2009-11-12 20:53 ` Felipe Contreras
2009-11-12 23:31 ` [APPLIED] " Tony Lindgren
2009-11-12 21:00 ` Felipe Contreras
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.