Message ID | 20170608095618.GJ3730@atomide.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Tony, On 2017-06-08 12:56, Tony Lindgren wrote: > * Tony Lindgren <tony@atomide.com> [170608 01:28]: >> * Peter Ujfalusi <peter.ujfalusi@ti.com> [170607 23:29]: >>> >>> This will conflict with the changes introduced by the tusb6010 DMAengine >>> conversion: >>> https://patchwork.kernel.org/patch/9734219/ >> >> Oops forgot about that one. I'll take a look if it makes sense >> to leave the braces for now to avoid a merge conflict. >> >>> with this patch I think the omap24xx_sdma_map and omap3xxx_sdma_map can >>> also be removed, but we need to keep the omap24xx_sdma_dt_map for now >>> till we have proper DT support for tusb. >> >> OK good point, will check. > > Here's this one updated. > > Regards, > > Tony > > 8< ------------------ > From tony Mon Sep 17 00:00:00 2001 > From: Tony Lindgren <tony@atomide.com> > Date: Wed, 31 May 2017 15:51:35 -0700 > Subject: [PATCH] ARM: OMAP2+: Remove unused legacy code for DMA > > We are now booting all mach-omap2 in device tree only mode. > Any code that is only called in legacy boot mode where > of_have_populated_dt() is not set is safe to remove now. > > Let's leave the dummy omap2_system_dma_init_dev() check > in place for now to avoid a pointless merge conflict with > tusb6010 dmaengine conversion as pointed out by Peter > Ujfalusi <peter.ujfalusi@ti.com>. unfortunately we still have conflict as the https://patchwork.kernel.org/patch/9734219/ adds entries to omap24xx_sdma_map[] for - back then - valid non DT boot support. I have rebased and reworked my patch locally on top of your v1, but things must go in in a certain order to avoid conflict. The tsub conversion series in not yet in linux-next, but afaik Bin already applied it to somewhere. Leave the mach-omap2/dma.c cleanup for -rc1? > > Signed-off-by: Tony Lindgren <tony@atomide.com> > --- > arch/arm/mach-omap2/dma.c | 125 +--------------------------------------------- > 1 file changed, 2 insertions(+), 123 deletions(-) > > diff --git a/arch/arm/mach-omap2/dma.c b/arch/arm/mach-omap2/dma.c > --- a/arch/arm/mach-omap2/dma.c > +++ b/arch/arm/mach-omap2/dma.c > @@ -204,108 +204,6 @@ static unsigned configure_dma_errata(void) > return errata; > } > > -static const struct dma_slave_map omap24xx_sdma_map[] = { > - { "omap-gpmc", "rxtx", SDMA_FILTER_PARAM(4) }, > - { "omap-aes", "tx", SDMA_FILTER_PARAM(9) }, > - { "omap-aes", "rx", SDMA_FILTER_PARAM(10) }, > - { "omap-sham", "rx", SDMA_FILTER_PARAM(13) }, > - { "omap2_mcspi.2", "tx0", SDMA_FILTER_PARAM(15) }, > - { "omap2_mcspi.2", "rx0", SDMA_FILTER_PARAM(16) }, > - { "omap-mcbsp.3", "tx", SDMA_FILTER_PARAM(17) }, > - { "omap-mcbsp.3", "rx", SDMA_FILTER_PARAM(18) }, > - { "omap-mcbsp.4", "tx", SDMA_FILTER_PARAM(19) }, > - { "omap-mcbsp.4", "rx", SDMA_FILTER_PARAM(20) }, > - { "omap-mcbsp.5", "tx", SDMA_FILTER_PARAM(21) }, > - { "omap-mcbsp.5", "rx", SDMA_FILTER_PARAM(22) }, > - { "omap2_mcspi.2", "tx1", SDMA_FILTER_PARAM(23) }, > - { "omap2_mcspi.2", "rx1", SDMA_FILTER_PARAM(24) }, > - { "omap_i2c.1", "tx", SDMA_FILTER_PARAM(27) }, > - { "omap_i2c.1", "rx", SDMA_FILTER_PARAM(28) }, > - { "omap_i2c.2", "tx", SDMA_FILTER_PARAM(29) }, > - { "omap_i2c.2", "rx", SDMA_FILTER_PARAM(30) }, > - { "omap-mcbsp.1", "tx", SDMA_FILTER_PARAM(31) }, > - { "omap-mcbsp.1", "rx", SDMA_FILTER_PARAM(32) }, > - { "omap-mcbsp.2", "tx", SDMA_FILTER_PARAM(33) }, > - { "omap-mcbsp.2", "rx", SDMA_FILTER_PARAM(34) }, > - { "omap2_mcspi.0", "tx0", SDMA_FILTER_PARAM(35) }, > - { "omap2_mcspi.0", "rx0", SDMA_FILTER_PARAM(36) }, > - { "omap2_mcspi.0", "tx1", SDMA_FILTER_PARAM(37) }, > - { "omap2_mcspi.0", "rx1", SDMA_FILTER_PARAM(38) }, > - { "omap2_mcspi.0", "tx2", SDMA_FILTER_PARAM(39) }, > - { "omap2_mcspi.0", "rx2", SDMA_FILTER_PARAM(40) }, > - { "omap2_mcspi.0", "tx3", SDMA_FILTER_PARAM(41) }, > - { "omap2_mcspi.0", "rx3", SDMA_FILTER_PARAM(42) }, > - { "omap2_mcspi.1", "tx0", SDMA_FILTER_PARAM(43) }, > - { "omap2_mcspi.1", "rx0", SDMA_FILTER_PARAM(44) }, > - { "omap2_mcspi.1", "tx1", SDMA_FILTER_PARAM(45) }, > - { "omap2_mcspi.1", "rx1", SDMA_FILTER_PARAM(46) }, > - { "omap_hsmmc.1", "tx", SDMA_FILTER_PARAM(47) }, > - { "omap_hsmmc.1", "rx", SDMA_FILTER_PARAM(48) }, > - { "omap_uart.0", "tx", SDMA_FILTER_PARAM(49) }, > - { "omap_uart.0", "rx", SDMA_FILTER_PARAM(50) }, > - { "omap_uart.1", "tx", SDMA_FILTER_PARAM(51) }, > - { "omap_uart.1", "rx", SDMA_FILTER_PARAM(52) }, > - { "omap_uart.2", "tx", SDMA_FILTER_PARAM(53) }, > - { "omap_uart.2", "rx", SDMA_FILTER_PARAM(54) }, > - { "omap_hsmmc.0", "tx", SDMA_FILTER_PARAM(61) }, > - { "omap_hsmmc.0", "rx", SDMA_FILTER_PARAM(62) }, > -}; > - > -static const struct dma_slave_map omap3xxx_sdma_map[] = { > - { "omap-gpmc", "rxtx", SDMA_FILTER_PARAM(4) }, > - { "omap2_mcspi.2", "tx0", SDMA_FILTER_PARAM(15) }, > - { "omap2_mcspi.2", "rx0", SDMA_FILTER_PARAM(16) }, > - { "omap-mcbsp.3", "tx", SDMA_FILTER_PARAM(17) }, > - { "omap-mcbsp.3", "rx", SDMA_FILTER_PARAM(18) }, > - { "omap-mcbsp.4", "tx", SDMA_FILTER_PARAM(19) }, > - { "omap-mcbsp.4", "rx", SDMA_FILTER_PARAM(20) }, > - { "omap-mcbsp.5", "tx", SDMA_FILTER_PARAM(21) }, > - { "omap-mcbsp.5", "rx", SDMA_FILTER_PARAM(22) }, > - { "omap2_mcspi.2", "tx1", SDMA_FILTER_PARAM(23) }, > - { "omap2_mcspi.2", "rx1", SDMA_FILTER_PARAM(24) }, > - { "omap_i2c.3", "tx", SDMA_FILTER_PARAM(25) }, > - { "omap_i2c.3", "rx", SDMA_FILTER_PARAM(26) }, > - { "omap_i2c.1", "tx", SDMA_FILTER_PARAM(27) }, > - { "omap_i2c.1", "rx", SDMA_FILTER_PARAM(28) }, > - { "omap_i2c.2", "tx", SDMA_FILTER_PARAM(29) }, > - { "omap_i2c.2", "rx", SDMA_FILTER_PARAM(30) }, > - { "omap-mcbsp.1", "tx", SDMA_FILTER_PARAM(31) }, > - { "omap-mcbsp.1", "rx", SDMA_FILTER_PARAM(32) }, > - { "omap-mcbsp.2", "tx", SDMA_FILTER_PARAM(33) }, > - { "omap-mcbsp.2", "rx", SDMA_FILTER_PARAM(34) }, > - { "omap2_mcspi.0", "tx0", SDMA_FILTER_PARAM(35) }, > - { "omap2_mcspi.0", "rx0", SDMA_FILTER_PARAM(36) }, > - { "omap2_mcspi.0", "tx1", SDMA_FILTER_PARAM(37) }, > - { "omap2_mcspi.0", "rx1", SDMA_FILTER_PARAM(38) }, > - { "omap2_mcspi.0", "tx2", SDMA_FILTER_PARAM(39) }, > - { "omap2_mcspi.0", "rx2", SDMA_FILTER_PARAM(40) }, > - { "omap2_mcspi.0", "tx3", SDMA_FILTER_PARAM(41) }, > - { "omap2_mcspi.0", "rx3", SDMA_FILTER_PARAM(42) }, > - { "omap2_mcspi.1", "tx0", SDMA_FILTER_PARAM(43) }, > - { "omap2_mcspi.1", "rx0", SDMA_FILTER_PARAM(44) }, > - { "omap2_mcspi.1", "tx1", SDMA_FILTER_PARAM(45) }, > - { "omap2_mcspi.1", "rx1", SDMA_FILTER_PARAM(46) }, > - { "omap_hsmmc.1", "tx", SDMA_FILTER_PARAM(47) }, > - { "omap_hsmmc.1", "rx", SDMA_FILTER_PARAM(48) }, > - { "omap_uart.0", "tx", SDMA_FILTER_PARAM(49) }, > - { "omap_uart.0", "rx", SDMA_FILTER_PARAM(50) }, > - { "omap_uart.1", "tx", SDMA_FILTER_PARAM(51) }, > - { "omap_uart.1", "rx", SDMA_FILTER_PARAM(52) }, > - { "omap_uart.2", "tx", SDMA_FILTER_PARAM(53) }, > - { "omap_uart.2", "rx", SDMA_FILTER_PARAM(54) }, > - { "omap_hsmmc.0", "tx", SDMA_FILTER_PARAM(61) }, > - { "omap_hsmmc.0", "rx", SDMA_FILTER_PARAM(62) }, > - { "omap-aes", "tx", SDMA_FILTER_PARAM(65) }, > - { "omap-aes", "rx", SDMA_FILTER_PARAM(66) }, > - { "omap-sham", "rx", SDMA_FILTER_PARAM(69) }, > - { "omap2_mcspi.3", "tx0", SDMA_FILTER_PARAM(70) }, > - { "omap2_mcspi.3", "rx0", SDMA_FILTER_PARAM(71) }, > - { "omap_hsmmc.2", "tx", SDMA_FILTER_PARAM(77) }, > - { "omap_hsmmc.2", "rx", SDMA_FILTER_PARAM(78) }, > - { "omap_uart.3", "tx", SDMA_FILTER_PARAM(81) }, > - { "omap_uart.3", "rx", SDMA_FILTER_PARAM(82) }, > -}; > - > static struct omap_system_dma_plat_info dma_plat_info __initdata = { > .reg_map = reg_map, > .channel_stride = 0x60, > @@ -334,14 +232,9 @@ static int __init omap2_system_dma_init_dev(struct omap_hwmod *oh, void *unused) > p.dma_attr = (struct omap_dma_dev_attr *)oh->dev_attr; > p.errata = configure_dma_errata(); > > + /* REVISIT: Remove after v4.13 with a follow-up patch */ > if (!of_have_populated_dt()) { > if (soc_is_omap24xx()) { > - p.slave_map = omap24xx_sdma_map; > - p.slavecnt = ARRAY_SIZE(omap24xx_sdma_map); > - } else if (soc_is_omap34xx() || soc_is_omap3630()) { > - p.slave_map = omap3xxx_sdma_map; > - p.slavecnt = ARRAY_SIZE(omap3xxx_sdma_map); > - } else { > pr_err("%s: The legacy DMA map is not provided!\n", > __func__); > return -ENODEV; > @@ -389,21 +282,7 @@ static int __init omap2_system_dma_init_dev(struct omap_hwmod *oh, void *unused) > > static int __init omap2_system_dma_init(void) > { > - struct platform_device *pdev; > - int res; > - > - res = omap_hwmod_for_each_by_class("dma", > + return omap_hwmod_for_each_by_class("dma", > omap2_system_dma_init_dev, NULL); > - if (res) > - return res; > - > - if (of_have_populated_dt()) > - return res; > - > - pdev = platform_device_register_full(&omap_dma_dev_info); > - if (IS_ERR(pdev)) > - return PTR_ERR(pdev); > - > - return res; > } > omap_arch_initcall(omap2_system_dma_init); > - Péter
* Peter Ujfalusi <peter.ujfalusi@ti.com> [170608 03:40]: > unfortunately we still have conflict as the > https://patchwork.kernel.org/patch/9734219/ > adds entries to omap24xx_sdma_map[] for - back then - valid non DT boot > support. > > I have rebased and reworked my patch locally on top of your v1, but > things must go in in a certain order to avoid conflict. > > The tsub conversion series in not yet in linux-next, but afaik Bin > already applied it to somewhere. > Leave the mach-omap2/dma.c cleanup for -rc1? OK I'll save this for later then. Regards, Tony
On Thu, Jun 08, 2017 at 03:45:38AM -0700, Tony Lindgren wrote: > * Peter Ujfalusi <peter.ujfalusi@ti.com> [170608 03:40]: > > unfortunately we still have conflict as the > > https://patchwork.kernel.org/patch/9734219/ > > adds entries to omap24xx_sdma_map[] for - back then - valid non DT boot > > support. > > > > I have rebased and reworked my patch locally on top of your v1, but > > things must go in in a certain order to avoid conflict. > > > > The tsub conversion series in not yet in linux-next, but afaik Bin > > already applied it to somewhere. Yes, the series is in my local tree which is not public available. I plan to send them to GregKH next week. > > Leave the mach-omap2/dma.c cleanup for -rc1? > > OK I'll save this for later then. > > Regards, > > Tony Regards, -Bin.
diff --git a/arch/arm/mach-omap2/dma.c b/arch/arm/mach-omap2/dma.c --- a/arch/arm/mach-omap2/dma.c +++ b/arch/arm/mach-omap2/dma.c @@ -204,108 +204,6 @@ static unsigned configure_dma_errata(void) return errata; } -static const struct dma_slave_map omap24xx_sdma_map[] = { - { "omap-gpmc", "rxtx", SDMA_FILTER_PARAM(4) }, - { "omap-aes", "tx", SDMA_FILTER_PARAM(9) }, - { "omap-aes", "rx", SDMA_FILTER_PARAM(10) }, - { "omap-sham", "rx", SDMA_FILTER_PARAM(13) }, - { "omap2_mcspi.2", "tx0", SDMA_FILTER_PARAM(15) }, - { "omap2_mcspi.2", "rx0", SDMA_FILTER_PARAM(16) }, - { "omap-mcbsp.3", "tx", SDMA_FILTER_PARAM(17) }, - { "omap-mcbsp.3", "rx", SDMA_FILTER_PARAM(18) }, - { "omap-mcbsp.4", "tx", SDMA_FILTER_PARAM(19) }, - { "omap-mcbsp.4", "rx", SDMA_FILTER_PARAM(20) }, - { "omap-mcbsp.5", "tx", SDMA_FILTER_PARAM(21) }, - { "omap-mcbsp.5", "rx", SDMA_FILTER_PARAM(22) }, - { "omap2_mcspi.2", "tx1", SDMA_FILTER_PARAM(23) }, - { "omap2_mcspi.2", "rx1", SDMA_FILTER_PARAM(24) }, - { "omap_i2c.1", "tx", SDMA_FILTER_PARAM(27) }, - { "omap_i2c.1", "rx", SDMA_FILTER_PARAM(28) }, - { "omap_i2c.2", "tx", SDMA_FILTER_PARAM(29) }, - { "omap_i2c.2", "rx", SDMA_FILTER_PARAM(30) }, - { "omap-mcbsp.1", "tx", SDMA_FILTER_PARAM(31) }, - { "omap-mcbsp.1", "rx", SDMA_FILTER_PARAM(32) }, - { "omap-mcbsp.2", "tx", SDMA_FILTER_PARAM(33) }, - { "omap-mcbsp.2", "rx", SDMA_FILTER_PARAM(34) }, - { "omap2_mcspi.0", "tx0", SDMA_FILTER_PARAM(35) }, - { "omap2_mcspi.0", "rx0", SDMA_FILTER_PARAM(36) }, - { "omap2_mcspi.0", "tx1", SDMA_FILTER_PARAM(37) }, - { "omap2_mcspi.0", "rx1", SDMA_FILTER_PARAM(38) }, - { "omap2_mcspi.0", "tx2", SDMA_FILTER_PARAM(39) }, - { "omap2_mcspi.0", "rx2", SDMA_FILTER_PARAM(40) }, - { "omap2_mcspi.0", "tx3", SDMA_FILTER_PARAM(41) }, - { "omap2_mcspi.0", "rx3", SDMA_FILTER_PARAM(42) }, - { "omap2_mcspi.1", "tx0", SDMA_FILTER_PARAM(43) }, - { "omap2_mcspi.1", "rx0", SDMA_FILTER_PARAM(44) }, - { "omap2_mcspi.1", "tx1", SDMA_FILTER_PARAM(45) }, - { "omap2_mcspi.1", "rx1", SDMA_FILTER_PARAM(46) }, - { "omap_hsmmc.1", "tx", SDMA_FILTER_PARAM(47) }, - { "omap_hsmmc.1", "rx", SDMA_FILTER_PARAM(48) }, - { "omap_uart.0", "tx", SDMA_FILTER_PARAM(49) }, - { "omap_uart.0", "rx", SDMA_FILTER_PARAM(50) }, - { "omap_uart.1", "tx", SDMA_FILTER_PARAM(51) }, - { "omap_uart.1", "rx", SDMA_FILTER_PARAM(52) }, - { "omap_uart.2", "tx", SDMA_FILTER_PARAM(53) }, - { "omap_uart.2", "rx", SDMA_FILTER_PARAM(54) }, - { "omap_hsmmc.0", "tx", SDMA_FILTER_PARAM(61) }, - { "omap_hsmmc.0", "rx", SDMA_FILTER_PARAM(62) }, -}; - -static const struct dma_slave_map omap3xxx_sdma_map[] = { - { "omap-gpmc", "rxtx", SDMA_FILTER_PARAM(4) }, - { "omap2_mcspi.2", "tx0", SDMA_FILTER_PARAM(15) }, - { "omap2_mcspi.2", "rx0", SDMA_FILTER_PARAM(16) }, - { "omap-mcbsp.3", "tx", SDMA_FILTER_PARAM(17) }, - { "omap-mcbsp.3", "rx", SDMA_FILTER_PARAM(18) }, - { "omap-mcbsp.4", "tx", SDMA_FILTER_PARAM(19) }, - { "omap-mcbsp.4", "rx", SDMA_FILTER_PARAM(20) }, - { "omap-mcbsp.5", "tx", SDMA_FILTER_PARAM(21) }, - { "omap-mcbsp.5", "rx", SDMA_FILTER_PARAM(22) }, - { "omap2_mcspi.2", "tx1", SDMA_FILTER_PARAM(23) }, - { "omap2_mcspi.2", "rx1", SDMA_FILTER_PARAM(24) }, - { "omap_i2c.3", "tx", SDMA_FILTER_PARAM(25) }, - { "omap_i2c.3", "rx", SDMA_FILTER_PARAM(26) }, - { "omap_i2c.1", "tx", SDMA_FILTER_PARAM(27) }, - { "omap_i2c.1", "rx", SDMA_FILTER_PARAM(28) }, - { "omap_i2c.2", "tx", SDMA_FILTER_PARAM(29) }, - { "omap_i2c.2", "rx", SDMA_FILTER_PARAM(30) }, - { "omap-mcbsp.1", "tx", SDMA_FILTER_PARAM(31) }, - { "omap-mcbsp.1", "rx", SDMA_FILTER_PARAM(32) }, - { "omap-mcbsp.2", "tx", SDMA_FILTER_PARAM(33) }, - { "omap-mcbsp.2", "rx", SDMA_FILTER_PARAM(34) }, - { "omap2_mcspi.0", "tx0", SDMA_FILTER_PARAM(35) }, - { "omap2_mcspi.0", "rx0", SDMA_FILTER_PARAM(36) }, - { "omap2_mcspi.0", "tx1", SDMA_FILTER_PARAM(37) }, - { "omap2_mcspi.0", "rx1", SDMA_FILTER_PARAM(38) }, - { "omap2_mcspi.0", "tx2", SDMA_FILTER_PARAM(39) }, - { "omap2_mcspi.0", "rx2", SDMA_FILTER_PARAM(40) }, - { "omap2_mcspi.0", "tx3", SDMA_FILTER_PARAM(41) }, - { "omap2_mcspi.0", "rx3", SDMA_FILTER_PARAM(42) }, - { "omap2_mcspi.1", "tx0", SDMA_FILTER_PARAM(43) }, - { "omap2_mcspi.1", "rx0", SDMA_FILTER_PARAM(44) }, - { "omap2_mcspi.1", "tx1", SDMA_FILTER_PARAM(45) }, - { "omap2_mcspi.1", "rx1", SDMA_FILTER_PARAM(46) }, - { "omap_hsmmc.1", "tx", SDMA_FILTER_PARAM(47) }, - { "omap_hsmmc.1", "rx", SDMA_FILTER_PARAM(48) }, - { "omap_uart.0", "tx", SDMA_FILTER_PARAM(49) }, - { "omap_uart.0", "rx", SDMA_FILTER_PARAM(50) }, - { "omap_uart.1", "tx", SDMA_FILTER_PARAM(51) }, - { "omap_uart.1", "rx", SDMA_FILTER_PARAM(52) }, - { "omap_uart.2", "tx", SDMA_FILTER_PARAM(53) }, - { "omap_uart.2", "rx", SDMA_FILTER_PARAM(54) }, - { "omap_hsmmc.0", "tx", SDMA_FILTER_PARAM(61) }, - { "omap_hsmmc.0", "rx", SDMA_FILTER_PARAM(62) }, - { "omap-aes", "tx", SDMA_FILTER_PARAM(65) }, - { "omap-aes", "rx", SDMA_FILTER_PARAM(66) }, - { "omap-sham", "rx", SDMA_FILTER_PARAM(69) }, - { "omap2_mcspi.3", "tx0", SDMA_FILTER_PARAM(70) }, - { "omap2_mcspi.3", "rx0", SDMA_FILTER_PARAM(71) }, - { "omap_hsmmc.2", "tx", SDMA_FILTER_PARAM(77) }, - { "omap_hsmmc.2", "rx", SDMA_FILTER_PARAM(78) }, - { "omap_uart.3", "tx", SDMA_FILTER_PARAM(81) }, - { "omap_uart.3", "rx", SDMA_FILTER_PARAM(82) }, -}; - static struct omap_system_dma_plat_info dma_plat_info __initdata = { .reg_map = reg_map, .channel_stride = 0x60, @@ -334,14 +232,9 @@ static int __init omap2_system_dma_init_dev(struct omap_hwmod *oh, void *unused) p.dma_attr = (struct omap_dma_dev_attr *)oh->dev_attr; p.errata = configure_dma_errata(); + /* REVISIT: Remove after v4.13 with a follow-up patch */ if (!of_have_populated_dt()) { if (soc_is_omap24xx()) { - p.slave_map = omap24xx_sdma_map; - p.slavecnt = ARRAY_SIZE(omap24xx_sdma_map); - } else if (soc_is_omap34xx() || soc_is_omap3630()) { - p.slave_map = omap3xxx_sdma_map; - p.slavecnt = ARRAY_SIZE(omap3xxx_sdma_map); - } else { pr_err("%s: The legacy DMA map is not provided!\n", __func__); return -ENODEV; @@ -389,21 +282,7 @@ static int __init omap2_system_dma_init_dev(struct omap_hwmod *oh, void *unused) static int __init omap2_system_dma_init(void) { - struct platform_device *pdev; - int res; - - res = omap_hwmod_for_each_by_class("dma", + return omap_hwmod_for_each_by_class("dma", omap2_system_dma_init_dev, NULL); - if (res) - return res; - - if (of_have_populated_dt()) - return res; - - pdev = platform_device_register_full(&omap_dma_dev_info); - if (IS_ERR(pdev)) - return PTR_ERR(pdev); - - return res; } omap_arch_initcall(omap2_system_dma_init);