Re: kernel panic with latest DSS

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux