Hi, On Fri, 2 Jul 2010, Paul Walmsley wrote: > On Tue, 29 Jun 2010, Kevin Hilman wrote: > > > Kevin Hilman <khilman@xxxxxxxxxxxxxxxxxxx> writes: > > > > > Create simple omap_devices for the main processors and busses. > > > > I've reworked this patch so that it is no longer using early devices, > > updated version below. > > Thanks for these changes, this seems better than the early_platform_device > approach. I've made a few more changes: Just FYI, after this patch, 2420 platforms (and presumably 2430 platforms also) emit this warning on boot: [ 0.057067] WARNING: at arch/arm/mach-omap2/pm.c:53 _init_omap_device+0x80/0xa0() [ 0.057098] _init_omap_device: could not find omap_hwmod for iva [ 0.057128] Modules linked in: [ 0.057189] [<c002a580>] (unwind_backtrace+0x0/0xec) from [<c004a084>] (warn_slowpath_common+0x4c/0x64) [ 0.057250] [<c004a084>] (warn_slowpath_common+0x4c/0x64) from [<c004a11c>] (warn_slowpath_fmt+0x2c/0x3) [ 0.057342] [<c004a11c>] (warn_slowpath_fmt+0x2c/0x3c) from [<c002ef90>] (_init_omap_device+0x80/0xa0) [ 0.057403] [<c002ef90>] (_init_omap_device+0x80/0xa0) from [<c000e360>] (omap2_common_pm_init+0x20/0x4) [ 0.057495] [<c000e360>] (omap2_common_pm_init+0x20/0x48) from [<c0024384>] (do_one_initcall+0x5c/0x1b4) [ 0.057556] [<c0024384>] (do_one_initcall+0x5c/0x1b4) from [<c00083f8>] (kernel_init+0x90/0x144) [ 0.057647] [<c00083f8>] (kernel_init+0x90/0x144) from [<c0025dd0>] (kernel_thread_exit+0x0/0x8) [ 0.057708] ---[ end trace dec6997083161631 ]--- This appears to be due to the lack of an IVA hwmod for 2420/2430, so I've added one based on Benoît's patch for 3xxx (below). This fixes the warnings. - Paul OMAP2: hwmod data: add IVA1 (2420), IVA2 (2430) hwmods From: Paul Walmsley <paul@xxxxxxxxx> Add IVA1 hwmod data for OMAP2420 and IVA2 hwmod data for 2430. The data is based on Benoît Cousson's hwmod data for the OMAP3 IVA blocks. Signed-off-by: Paul Walmsley <paul@xxxxxxxxx> Cc: Benoît Cousson <b-cousson@xxxxxx> Cc: Kevin Hilman <khilman@xxxxxxxxxxxxxxxxxxx> --- arch/arm/mach-omap2/omap_hwmod_2420_data.c | 30 ++++++++++++++++++++++++++ arch/arm/mach-omap2/omap_hwmod_2430_data.c | 32 ++++++++++++++++++++++++++-- 2 files changed, 60 insertions(+), 2 deletions(-) diff --git a/arch/arm/mach-omap2/omap_hwmod_2420_data.c b/arch/arm/mach-omap2/omap_hwmod_2420_data.c index 8c90b27..3cc768e 100644 --- a/arch/arm/mach-omap2/omap_hwmod_2420_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_2420_data.c @@ -30,6 +30,7 @@ */ static struct omap_hwmod omap2420_mpu_hwmod; +static struct omap_hwmod omap2420_iva_hwmod; static struct omap_hwmod omap2420_l3_main_hwmod; static struct omap_hwmod omap2420_l4_core_hwmod; @@ -136,11 +137,40 @@ static struct omap_hwmod omap2420_mpu_hwmod = { .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420), }; +/* + * IVA1 interface data + */ + +/* IVA <- L3 interface */ +static struct omap_hwmod_ocp_if omap2420_l3__iva = { + .master = &omap2420_l3_main_hwmod, + .slave = &omap2420_iva_hwmod, + .clk = "iva1_ifck", + .user = OCP_USER_MPU | OCP_USER_SDMA, +}; + +static struct omap_hwmod_ocp_if *omap2420_iva_masters[] = { + &omap2420_l3__iva, +}; + +/* + * IVA2 (IVA2) + */ + +static struct omap_hwmod omap2420_iva_hwmod = { + .name = "iva", + .class = &iva_hwmod_class, + .masters = omap2420_iva_masters, + .masters_cnt = ARRAY_SIZE(omap2420_iva_masters), + .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420) +}; + static __initdata struct omap_hwmod *omap2420_hwmods[] = { &omap2420_l3_main_hwmod, &omap2420_l4_core_hwmod, &omap2420_l4_wkup_hwmod, &omap2420_mpu_hwmod, + &omap2420_iva_hwmod, NULL, }; diff --git a/arch/arm/mach-omap2/omap_hwmod_2430_data.c b/arch/arm/mach-omap2/omap_hwmod_2430_data.c index c0f3311..4526628 100644 --- a/arch/arm/mach-omap2/omap_hwmod_2430_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_2430_data.c @@ -30,6 +30,7 @@ */ static struct omap_hwmod omap2430_mpu_hwmod; +static struct omap_hwmod omap2430_iva_hwmod; static struct omap_hwmod omap2430_l3_main_hwmod; static struct omap_hwmod omap2430_l4_core_hwmod; @@ -70,8 +71,6 @@ static struct omap_hwmod omap2430_l3_main_hwmod = { }; static struct omap_hwmod omap2430_l4_wkup_hwmod; -static struct omap_hwmod omap2430_mmc1_hwmod; -static struct omap_hwmod omap2430_mmc2_hwmod; /* L4_CORE -> L4_WKUP interface */ static struct omap_hwmod_ocp_if omap2430_l4_core__l4_wkup = { @@ -138,11 +137,40 @@ static struct omap_hwmod omap2430_mpu_hwmod = { .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430), }; +/* + * IVA2_1 interface data + */ + +/* IVA2 <- L3 interface */ +static struct omap_hwmod_ocp_if omap2430_l3__iva = { + .master = &omap2430_l3_main_hwmod, + .slave = &omap2430_iva_hwmod, + .clk = "dsp_fck", + .user = OCP_USER_MPU | OCP_USER_SDMA, +}; + +static struct omap_hwmod_ocp_if *omap2430_iva_masters[] = { + &omap2430_l3__iva, +}; + +/* + * IVA2 (IVA2) + */ + +static struct omap_hwmod omap2430_iva_hwmod = { + .name = "iva", + .class = &iva_hwmod_class, + .masters = omap2430_iva_masters, + .masters_cnt = ARRAY_SIZE(omap2430_iva_masters), + .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430) +}; + static __initdata struct omap_hwmod *omap2430_hwmods[] = { &omap2430_l3_main_hwmod, &omap2430_l4_core_hwmod, &omap2430_l4_wkup_hwmod, &omap2430_mpu_hwmod, + &omap2430_iva_hwmod, NULL, };