On Fri, Mar 12, 2010 at 3:51 AM, Tomi Valkeinen <tomi.valkeinen@xxxxxxxxx> wrote: > Can you try this patch? > > I haven't run into this earlier as I always have DSI compiled in. It > possibly doesn't behave correctly in that case either, but doesn't > crash. Sorry, I got side-tracked with some unrelated client work. I finally tried the patch this morning and it does fix the issue. Thanks! Steve > Tomi > > > >From c065bb82e1358105d57d80974ce71d3e5aeabf35 Mon Sep 17 00:00:00 2001 > From: Tomi Valkeinen <tomi.valkeinen@xxxxxxxxx> > Date: Fri, 12 Mar 2010 12:46:05 +0200 > Subject: [PATCH] OMAP: DSS2: initialize dss clk sources properly > > Clk sources were not initialized, leading to kernel crash, or possibly to > strange behaviour if DSI was compiled in. > > Signed-off-by: Tomi Valkeinen <tomi.valkeinen@xxxxxxxxx> > --- > drivers/video/omap2/dss/dss.c | 3 +++ > 1 files changed, 3 insertions(+), 0 deletions(-) > > diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c > index 8254a42..5434418 100644 > --- a/drivers/video/omap2/dss/dss.c > +++ b/drivers/video/omap2/dss/dss.c > @@ -590,6 +590,9 @@ int dss_init(bool skip_init) > } > } > > + dss.dsi_clk_source = DSS_SRC_DSS1_ALWON_FCLK; > + dss.dispc_clk_source = DSS_SRC_DSS1_ALWON_FCLK; > + > dss_save_context(); > > rev = dss_read_reg(DSS_REVISION); > -- > 1.6.5 > > > > > > > On Wed, 2010-03-10 at 20:48 +0100, ext Steve Sakoman wrote: >> On Wed, Mar 10, 2010 at 10:58 AM, <Tomi.Valkeinen@xxxxxxxxx> wrote: >> >> > I haven't had time to look at this, but I don't think your analysis is correct. >> >> You are correct of course. My sleepy eyes neglected to notice that >> double = and that makes a big difference :-) >> >> > What first comes to my mind is that dss.dispc_clk_source is, for some reason, uninitialized. Could you put prints to dss_select_dispc_clk_source to see if it's called, and if so, what is assigned to dss.dispc_clk_source? >> >> I did a build with that change and it does seem that >> dss_select_dispc_clk_source is never called. >> >> Steve >> >> > Tomi >> > >> > ________________________________________ >> > From: ext Steve Sakoman [sakoman@xxxxxxxxx] >> > Sent: Wednesday, March 10, 2010 20:42 >> > To: linux-omap@xxxxxxxxxxxxxxx; Valkeinen Tomi (Nokia-D/Helsinki) >> > Subject: Re: kernel panic with latest DSS >> > >> > On Wed, Mar 10, 2010 at 10:16 AM, Steve Sakoman <sakoman@xxxxxxxxx> wrote: >> > >> >> The issue occurs in the following section of code in >> >> drivers/video/omap2/dss/dispc.c: >> >> >> >> unsigned long dispc_fclk_rate(void) >> >> { >> >> unsigned long r = 0; >> >> >> >> if (dss_get_dispc_clk_source() == DSS_SRC_DSS1_ALWON_FCLK) >> >> r = dss_clk_get_rate(DSS_CLK_FCK1); >> >> else >> >> #ifdef CONFIG_OMAP2_DSS_DSI >> >> r = dsi_get_dsi1_pll_rate(); >> >> #else >> >> BUG(); >> >> #endif >> >> return r; >> >> } >> >> >> >> Since my machines don't have DSI displays CONFIG_OMAP2_DSS_DSI is not >> >> defined and the BUG() call is triggered. >> > >> > The issue seems to be the test for DSS_SRC_DSS1_ALWON_FCLK. >> > >> > Looking at drivers/video/omap2/dss/dispc.c I see that >> > DSS_SRC_DSS1_ALWON_FCLK will never be returned since clk_src is always >> > set to 0 or 1 based on a test of DSS_SRC_DSS1_ALWON_FCLK : >> > >> > void dss_select_dispc_clk_source(enum dss_clk_source clk_src) >> > { >> > int b; >> > >> > BUG_ON(clk_src != DSS_SRC_DSI1_PLL_FCLK && >> > clk_src != DSS_SRC_DSS1_ALWON_FCLK); >> > >> > b = clk_src == DSS_SRC_DSS1_ALWON_FCLK ? 0 : 1; >> > >> > REG_FLD_MOD(DSS_CONTROL, b, 0, 0); /* DISPC_CLK_SWITCH */ >> > >> > dss.dispc_clk_source = clk_src; >> > } >> > >> > It seems to me that the test should return to the way it was in the >> > previous DSS version, i.e. a test for 0: >> > >> > diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c >> > index e777e35..be9b3de 100644 >> > --- a/drivers/video/omap2/dss/dispc.c >> > +++ b/drivers/video/omap2/dss/dispc.c >> > @@ -2218,7 +2218,7 @@ unsigned long dispc_fclk_rate(void) >> > { >> > unsigned long r = 0; >> > >> > - if (dss_get_dispc_clk_source() == DSS_SRC_DSS1_ALWON_FCLK) >> > + if (dss_get_dispc_clk_source() == 0) >> > r = dss_clk_get_rate(DSS_CLK_FCK1); >> > else >> > #ifdef CONFIG_OMAP2_DSS_DSI >> > >> > A test build confirms that this change restores my ability to play >> > DVD's and display webcam streams. My understanding of this code is >> > superficial, so hopefully Tomi can comment on whether this is a good >> > fix or not. >> > >> > Steve > > > -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html