Hi Tomi,
nice test case.
On Fri, 5 Dec 2008, [EMAIL PROTECTED] wrote:
> I have had strange clk_enable() crashes with DSS2, and now I managed to
> isolate it. With the included patch, on OMAP3 SDP board, with default
> kernel config, I always get the crash below. In this example case it
> happens at specific time on boot, but with DSS2 it happens randomly at
> runtime, when I enable the DSS clocks.
Looks like there's some problem with the DSS driver's usage of
dss_tv_fclk. Enabling dss_tv_fclk before entering your test code's
while-loop makes the problem go away here. Patch below.
As an aside, your test patch does not actually disable dss1_fclk, since it
is already enabled by the time the while-loop starts. So you might also
want to add a clk_disable(c2) before your while-loop starts, when you
test.
Based on the traceback that you sent, I'd conjecture that probably some
part of the DSS subsystem is generating an interrupt via DSS_IRQ; but then
dss_iclk ends up disabled, and the MPU INTC is not able to communicate
with the DSS, and the INTC wedges. (The aborting access is to 0xd8200098,
the INTCPS_PENDING_IRQ0 register, rather than a DSS register.) Probably
some IRQs need to be masked before disabling the dss_iclk.
- Paul
drivers/video/omap/omapfb_main.c | 4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/drivers/video/omap/omapfb_main.c b/drivers/video/omap/omapfb_main.c
index a77e3bf..57b9e98 100644
--- a/drivers/video/omap/omapfb_main.c
+++ b/drivers/video/omap/omapfb_main.c
@@ -1808,9 +1808,11 @@ static int omapfb_probe(struct platform_device *pdev)
BUG_ON(fbdev_pdev != NULL);
{
- struct clk *c1, *c2;
+ struct clk *c1, *c2, *c3;
c1 = clk_get(&pdev->dev, "dss_ick");
c2 = clk_get(&pdev->dev, "dss1_fck");
+ c3 = clk_get(&pdev->dev, "dss_tv_fck");
+ clk_enable(c3);
while(1) {
clk_enable(c1);
clk_enable(c2);
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html