Re: [PATCHv2 16/28] OMAP3: HWMOD: Add DSS opt clocks
HI, On Mon, 2011-08-01 at 19:27 -0600, Paul Walmsley wrote: > Hello Tomi, > > On Fri, 15 Jul 2011, Paul Walmsley wrote: > > > On Thu, 9 Jun 2011, Tomi Valkeinen wrote: > > > > > Add DSS optional clocks to HWMOD data for OMAP3xxx. > > > > Thanks; queued for 3.1-rc fixes at git://git.pwsan.com/linux-2.6 in the > > branch 'omap2_3_hwmod_dss_fixes_3.1rc'. > > This patch has been updated to remove the temporary hack added to the DSS > driver. Care to review it before it's sent to Tony? My hacks (for the OMAP2 case also) use the clocks from the clockdata, thus fixing the hwmod data won't make the hacks break. So I think it's cleaner if the HWMOD patches go separately through you, and I'll revert the hacks in my tree. But a few comments inline, which I noticed just now. > - Paul > > From: Tomi Valkeinen > Date: Fri, 15 Jul 2011 00:54:34 -0600 > Subject: [PATCH 2/2] OMAP3: HWMOD: Add DSS opt clocks > > Add DSS optional clocks to HWMOD data for OMAP3xxx. > > Revert OMAP3 portion of commit > 9ede365aa6f74428a1f69c21ca1cf21213167576 ("HACK: OMAP: DSS2: clk hack > for OMAP2/3"). > > Cc: Benoit Cousson > Signed-off-by: Tomi Valkeinen > [p...@pwsan.com: remove temporary DSS driver hack; update changelog] > Signed-off-by: Paul Walmsley > --- > arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 32 --- > drivers/video/omap2/dss/dsi.c |2 +- > drivers/video/omap2/dss/dss.h |2 - > drivers/video/omap2/dss/rfbi.c |5 +--- > drivers/video/omap2/dss/venc.c |5 +--- > 5 files changed, 31 insertions(+), 15 deletions(-) > > diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c > b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c > index 25bf43b..38ee033 100644 > --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c > +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c > @@ -1365,9 +1365,14 @@ static struct omap_hwmod_ocp_if *omap3xxx_dss_slaves[] > = { > }; > > static struct omap_hwmod_opt_clk dss_opt_clks[] = { > - { .role = "tv_clk", .clk = "dss_tv_fck" }, > - { .role = "video_clk", .clk = "dss_96m_fck" }, > + /* > + * The rest of the clocks are not needed by the driver, > + * but are needed by the hwmod to reset DSS properly. > + */ I think this wording should be changed, as with the latest hwmod code changes the dss_core does not use any opt clocks, and these all are just to make the dss reset work. Perhaps something like "The DSS HW needs all DSS clocks enabled during reset. The dss_core driver does not use these clocks." > { .role = "sys_clk", .clk = "dss2_alwon_fck" }, > + { .role = "tv_clk", .clk = "dss_tv_fck" }, > + /* required only on OMAP3430 */ > + { .role = "tv_dac_clk", .clk = "dss_96m_fck" }, > }; The dss_96m_fck exists only on OMAP3430. What happens when the HWMOD code tries to reset DSS on OMAP3630, and it first enables all the opt clocks, and encounters the dss_96m_fck which doesn't exist? Although, looking at the clock3xxx_data.c, it looks like dss_96m_fck is there, but I'm not sure what it is controlling. Does the clock exist in the HW, but it's just not connected to DSS? The hwmod code should also set HWMOD_CONTROL_OPT_CLKS_IN_RESET for dss_core, shouldn't it? > static struct omap_hwmod omap3430es1_dss_core_hwmod = { > @@ -1504,6 +1509,10 @@ static struct omap_hwmod_ocp_if > *omap3xxx_dss_dsi1_slaves[] = { > &omap3xxx_l4_core__dss_dsi1, > }; > > +static struct omap_hwmod_opt_clk dss_dsi1_opt_clks[] = { > + { .role = "sys_clk", .clk = "dss2_alwon_fck" }, > +}; > + DSI is missing the interface clock in omap3xxx_l4_core__dss_dsi1. Should it have .clk = "dss_ick" like the other dss modules? I can make a new patch with these changes if they look correct to you. Tomi -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCHv2 16/28] OMAP3: HWMOD: Add DSS opt clocks
Hello Tomi, On Fri, 15 Jul 2011, Paul Walmsley wrote: > On Thu, 9 Jun 2011, Tomi Valkeinen wrote: > > > Add DSS optional clocks to HWMOD data for OMAP3xxx. > > Thanks; queued for 3.1-rc fixes at git://git.pwsan.com/linux-2.6 in the > branch 'omap2_3_hwmod_dss_fixes_3.1rc'. This patch has been updated to remove the temporary hack added to the DSS driver. Care to review it before it's sent to Tony? - Paul From: Tomi Valkeinen Date: Fri, 15 Jul 2011 00:54:34 -0600 Subject: [PATCH 2/2] OMAP3: HWMOD: Add DSS opt clocks Add DSS optional clocks to HWMOD data for OMAP3xxx. Revert OMAP3 portion of commit 9ede365aa6f74428a1f69c21ca1cf21213167576 ("HACK: OMAP: DSS2: clk hack for OMAP2/3"). Cc: Benoit Cousson Signed-off-by: Tomi Valkeinen [p...@pwsan.com: remove temporary DSS driver hack; update changelog] Signed-off-by: Paul Walmsley --- arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 32 --- drivers/video/omap2/dss/dsi.c |2 +- drivers/video/omap2/dss/dss.h |2 - drivers/video/omap2/dss/rfbi.c |5 +--- drivers/video/omap2/dss/venc.c |5 +--- 5 files changed, 31 insertions(+), 15 deletions(-) diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c index 25bf43b..38ee033 100644 --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c @@ -1365,9 +1365,14 @@ static struct omap_hwmod_ocp_if *omap3xxx_dss_slaves[] = { }; static struct omap_hwmod_opt_clk dss_opt_clks[] = { - { .role = "tv_clk", .clk = "dss_tv_fck" }, - { .role = "video_clk", .clk = "dss_96m_fck" }, + /* +* The rest of the clocks are not needed by the driver, +* but are needed by the hwmod to reset DSS properly. +*/ { .role = "sys_clk", .clk = "dss2_alwon_fck" }, + { .role = "tv_clk", .clk = "dss_tv_fck" }, + /* required only on OMAP3430 */ + { .role = "tv_dac_clk", .clk = "dss_96m_fck" }, }; static struct omap_hwmod omap3430es1_dss_core_hwmod = { @@ -1504,6 +1509,10 @@ static struct omap_hwmod_ocp_if *omap3xxx_dss_dsi1_slaves[] = { &omap3xxx_l4_core__dss_dsi1, }; +static struct omap_hwmod_opt_clk dss_dsi1_opt_clks[] = { + { .role = "sys_clk", .clk = "dss2_alwon_fck" }, +}; + static struct omap_hwmod omap3xxx_dss_dsi1_hwmod = { .name = "dss_dsi1", .class = &omap3xxx_dsi_hwmod_class, @@ -1516,6 +1525,8 @@ static struct omap_hwmod omap3xxx_dss_dsi1_hwmod = { .module_offs = OMAP3430_DSS_MOD, }, }, + .opt_clks = dss_dsi1_opt_clks, + .opt_clks_cnt = ARRAY_SIZE(dss_dsi1_opt_clks), .slaves = omap3xxx_dss_dsi1_slaves, .slaves_cnt = ARRAY_SIZE(omap3xxx_dss_dsi1_slaves), .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES1 | @@ -1545,6 +1556,10 @@ static struct omap_hwmod_ocp_if *omap3xxx_dss_rfbi_slaves[] = { &omap3xxx_l4_core__dss_rfbi, }; +static struct omap_hwmod_opt_clk dss_rfbi_opt_clks[] = { + { .role = "ick", .clk = "dss_ick" }, +}; + static struct omap_hwmod omap3xxx_dss_rfbi_hwmod = { .name = "dss_rfbi", .class = &omap2_rfbi_hwmod_class, @@ -1556,6 +1571,8 @@ static struct omap_hwmod omap3xxx_dss_rfbi_hwmod = { .module_offs = OMAP3430_DSS_MOD, }, }, + .opt_clks = dss_rfbi_opt_clks, + .opt_clks_cnt = ARRAY_SIZE(dss_rfbi_opt_clks), .slaves = omap3xxx_dss_rfbi_slaves, .slaves_cnt = ARRAY_SIZE(omap3xxx_dss_rfbi_slaves), .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES1 | @@ -1568,7 +1585,7 @@ static struct omap_hwmod omap3xxx_dss_rfbi_hwmod = { static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_venc = { .master = &omap3xxx_l4_core_hwmod, .slave = &omap3xxx_dss_venc_hwmod, - .clk= "dss_tv_fck", + .clk= "dss_ick", .addr = omap2_dss_venc_addrs, .fw = { .omap2 = { @@ -1586,10 +1603,15 @@ static struct omap_hwmod_ocp_if *omap3xxx_dss_venc_slaves[] = { &omap3xxx_l4_core__dss_venc, }; +static struct omap_hwmod_opt_clk dss_venc_opt_clks[] = { + /* required only on OMAP3430 */ + { .role = "tv_dac_clk", .clk = "dss_96m_fck" }, +}; + static struct omap_hwmod omap3xxx_dss_venc_hwmod = { .name = "dss_venc", .class = &omap2_venc_hwmod_class, - .main_clk = "dss1_alwon_fck", + .main_clk = "dss_tv_fck", .prcm = { .omap2 = { .prcm_reg_id = 1, @@ -1597,6 +1619,8 @@ static struct omap_hwmod omap3xxx_dss_venc_hwmod = { .module_offs = OMAP3430_DSS_MOD, }, }, + .opt_clks = dss_venc_opt_clks
Re: [PATCHv2 16/28] OMAP3: HWMOD: Add DSS opt clocks
On Thu, 9 Jun 2011, Tomi Valkeinen wrote: > Add DSS optional clocks to HWMOD data for OMAP3xxx. Thanks; queued for 3.1-rc fixes at git://git.pwsan.com/linux-2.6 in the branch 'omap2_3_hwmod_dss_fixes_3.1rc'. - Paul -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCHv2 16/28] OMAP3: HWMOD: Add DSS opt clocks
Add DSS optional clocks to HWMOD data for OMAP3xxx. Cc: Benoit Cousson Signed-off-by: Tomi Valkeinen --- arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 37 ++- 1 files changed, 35 insertions(+), 2 deletions(-) diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c index 909a84d..5fac4c0 100644 --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c @@ -1542,9 +1542,15 @@ static struct omap_hwmod_ocp_if *omap3xxx_dss_slaves[] = { }; static struct omap_hwmod_opt_clk dss_opt_clks[] = { - { .role = "tv_clk", .clk = "dss_tv_fck" }, - { .role = "video_clk", .clk = "dss_96m_fck" }, + { .role = "dss_clk", .clk = "dss1_alwon_fck" }, + /* +* The rest of the clocks are not needed by the driver, +* but are needed by the hwmod to reset DSS properly. +*/ { .role = "sys_clk", .clk = "dss2_alwon_fck" }, + { .role = "tv_clk", .clk = "dss_tv_fck" }, + /* required only on OMAP3430 */ + { .role = "tv_dac_clk", .clk = "dss_96m_fck" }, }; static struct omap_hwmod omap3430es1_dss_core_hwmod = { @@ -1656,6 +1662,10 @@ static struct omap_hwmod_ocp_if *omap3xxx_dss_dispc_slaves[] = { &omap3xxx_l4_core__dss_dispc, }; +static struct omap_hwmod_opt_clk dispc_opt_clks[] = { + { .role = "dss_clk", .clk = "dss1_alwon_fck" }, +}; + static struct omap_hwmod omap3xxx_dss_dispc_hwmod = { .name = "dss_dispc", .class = &omap3xxx_dispc_hwmod_class, @@ -1669,6 +1679,8 @@ static struct omap_hwmod omap3xxx_dss_dispc_hwmod = { .module_offs = OMAP3430_DSS_MOD, }, }, + .opt_clks = dispc_opt_clks, + .opt_clks_cnt = ARRAY_SIZE(dispc_opt_clks), .slaves = omap3xxx_dss_dispc_slaves, .slaves_cnt = ARRAY_SIZE(omap3xxx_dss_dispc_slaves), .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES1 | @@ -1720,6 +1732,11 @@ static struct omap_hwmod_ocp_if *omap3xxx_dss_dsi1_slaves[] = { &omap3xxx_l4_core__dss_dsi1, }; +static struct omap_hwmod_opt_clk dsi1_opt_clks[] = { + { .role = "dss_clk", .clk = "dss1_alwon_fck" }, + { .role = "sys_clk", .clk = "dss2_alwon_fck" }, +}; + static struct omap_hwmod omap3xxx_dss_dsi1_hwmod = { .name = "dss_dsi1", .class = &omap3xxx_dsi_hwmod_class, @@ -1733,6 +1750,8 @@ static struct omap_hwmod omap3xxx_dss_dsi1_hwmod = { .module_offs = OMAP3430_DSS_MOD, }, }, + .opt_clks = dsi1_opt_clks, + .opt_clks_cnt = ARRAY_SIZE(dsi1_opt_clks), .slaves = omap3xxx_dss_dsi1_slaves, .slaves_cnt = ARRAY_SIZE(omap3xxx_dss_dsi1_slaves), .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES1 | @@ -1791,6 +1810,10 @@ static struct omap_hwmod_ocp_if *omap3xxx_dss_rfbi_slaves[] = { &omap3xxx_l4_core__dss_rfbi, }; +static struct omap_hwmod_opt_clk rfbi_opt_clks[] = { + { .role = "rfbi_iclk", .clk = "dss_ick" }, +}; + static struct omap_hwmod omap3xxx_dss_rfbi_hwmod = { .name = "dss_rfbi", .class = &omap3xxx_rfbi_hwmod_class, @@ -1802,6 +1825,8 @@ static struct omap_hwmod omap3xxx_dss_rfbi_hwmod = { .module_offs = OMAP3430_DSS_MOD, }, }, + .opt_clks = rfbi_opt_clks, + .opt_clks_cnt = ARRAY_SIZE(rfbi_opt_clks), .slaves = omap3xxx_dss_rfbi_slaves, .slaves_cnt = ARRAY_SIZE(omap3xxx_dss_rfbi_slaves), .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES1 | @@ -1851,6 +1876,12 @@ static struct omap_hwmod_ocp_if *omap3xxx_dss_venc_slaves[] = { &omap3xxx_l4_core__dss_venc, }; +static struct omap_hwmod_opt_clk venc_opt_clks[] = { + { .role = "tv_clk", .clk = "dss_tv_fck" }, + /* required only on OMAP3430 */ + { .role = "tv_dac_clk", .clk = "dss_96m_fck" }, +}; + static struct omap_hwmod omap3xxx_dss_venc_hwmod = { .name = "dss_venc", .class = &omap3xxx_venc_hwmod_class, @@ -1862,6 +1893,8 @@ static struct omap_hwmod omap3xxx_dss_venc_hwmod = { .module_offs = OMAP3430_DSS_MOD, }, }, + .opt_clks = venc_opt_clks, + .opt_clks_cnt = ARRAY_SIZE(venc_opt_clks), .slaves = omap3xxx_dss_venc_slaves, .slaves_cnt = ARRAY_SIZE(omap3xxx_dss_venc_slaves), .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES1 | -- 1.7.4.1 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html