<Tomi.Valkeinen@xxxxxxxxx> writes: > Hi, > > 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. > > diff --git a/drivers/video/omap/omapfb_main.c > b/drivers/video/omap/omapfb_main.c > index 3bb4247..2d5ef0d 100644 > --- a/drivers/video/omap/omapfb_main.c > +++ b/drivers/video/omap/omapfb_main.c > @@ -27,6 +27,7 @@ > #include <linux/platform_device.h> > #include <linux/mm.h> > #include <linux/uaccess.h> > +#include <linux/clk.h> > > #include <mach/dma.h> > #include <mach/omapfb.h> > @@ -1806,6 +1807,18 @@ static int omapfb_probe(struct platform_device > *pdev) > { > BUG_ON(fbdev_pdev != NULL); > > + { > + struct clk *c1, *c2; > + c1 = clk_get(&pdev->dev, "dss_ick"); > + c2 = clk_get(&pdev->dev, "dss1_fck"); > + while(1) { > + clk_enable(c1); > + clk_enable(c2); > + clk_disable(c1); > + clk_disable(c2); > + } > + } > + > /* Delay actual initialization until the LCD is registered */ > fbdev_pdev = pdev; > if (fbdev_panel != NULL) > @@ -1958,7 +1971,7 @@ module_param_named(rotate, def_rotate, uint, > 0664); > module_param_named(mirror, def_mirror, uint, 0664); > module_param_named(manual_update, manual_update, bool, 0664); > > -module_init(omapfb_init); > +late_initcall(omapfb_init); > module_exit(omapfb_cleanup); > > MODULE_DESCRIPTION("TI OMAP framebuffer driver"); > > > And the crash: > > > > <1>Unhandled fault: external abort on non-linefetch (0x1028) at > 0xd8200098 > Unhandled fault: external abort on non-linefetch (0x1028) at 0xd8200098 > Internal error: : 1028 [#1] > Internal error: : 1028 [#1] > Modules linked in:Modules linked in: > > CPU: 0 Not tainted (2.6.28-rc6-omap1-05264-g1705711-dirty #6) > CPU: 0 Not tainted (2.6.28-rc6-omap1-05264-g1705711-dirty #6) > PC is at __irq_svc+0x34/0x80 > PC is at __irq_svc+0x34/0x80 > LR is at _omap2_clk_enable+0xa0/0xe0 > LR is at _omap2_clk_enable+0xa0/0xe0 What looks to be happening is an interrupt is firing in the middle of your clk_enable() call, and accesses to the Interrupt controller registers are triggering a fault. As a temporary workaround, could you try wrapping your clk_enable() with an IRQ save/restore? Something like: local_irq_save(flags); clk_enable(c); local_irq_restore(flags); If this works, then we need to investigate in more detail which interrupt is firing, and why the INTC registers are not accessible. Kevin > pc : [<c002c9d4>] lr : [<c0036314>] psr: 60000193 > sp : c7817d30 ip : c7817d40 fp : c7817d8c > pc : [<c002c9d4>] lr : [<c0036314>] psr: 60000193 > sp : c7817d30 ip : c7817d40 fp : c7817d8c > r10: c001a210 r9 : 00000000 r8 : c0395048 > r10: c001a210 r9 : 00000000 r8 : c0395048 > r7 : c03910c0 r6 : c03910c0 r5 : d8200000 r4 : ffffffff > r7 : c03910c0 r6 : c03910c0 r5 : d8200000 r4 : ffffffff > r3 : 60000013 r2 : c003ae80 r1 : c0036314 r0 : c7817d78 > r3 : 60000013 r2 : c003ae80 r1 : c0036314 r0 : c7817d78 > Flags: nZCv IRQs off FIQs on Mode SVC_32 ISA ARM Segment kernel > Flags: nZCv IRQs off FIQs on Mode SVC_32 ISA ARM Segment kernel > Control: 10c5387f Table: 80004018 DAC: 00000017 > Control: 10c5387f Table: 80004018 DAC: 00000017 > Process swapper (pid: 1, stack limit = 0xc78162e0) > Process swapper (pid: 1, stack limit = 0xc78162e0) > Stack: (0xc7817d30 to 0xc7818000) > Stack: (0xc7817d30 to 0xc7818000) > 7d20: 7d20: > 00000000 00000000 00000000 00000000 00000010 00000010 00000001 00000001 > > 7d40: 7d40: 80000013 80000013 c037ac4c c037ac4c c03910c0 c03910c0 > c03910c0 c03910c0 c0395048 c0395048 00000000 00000000 c001a210 c001a210 > c7817d8c c7817d8c > > 7d60: 7d60: c7817d40 c7817d40 c7817d78 c7817d78 c0036314 c0036314 > c003ae80 c003ae80 60000013 60000013 ffffffff ffffffff fffffffe fffffffe > c037ac4c c037ac4c > > 7d80: 7d80: c7817da4 c7817da4 c7817d90 c7817d90 c018bef4 c018bef4 > c003ae48 c003ae48 c037de28 c037de28 c037ded4 c037ded4 c7817db4 c7817db4 > c7817da8 c7817da8 > > 7da0: 7da0: c01afd70 c01afd70 c018beac c018beac c7817dd4 c7817dd4 > c7817db8 c7817db8 c01aef90 c01aef90 c01afd5c c01afd5c c037de28 c037de28 > c037ded4 c037ded4 > > 7dc0: 7dc0: c03910c0 c03910c0 c03910c0 c03910c0 c7817df4 c7817df4 > c7817dd8 c7817dd8 c01af0a4 c01af0a4 c01aeecc c01aeecc 00000000 00000000 > c7817df8 c7817df8 > > 7de0: 7de0: c01af03c c01af03c c03910c0 c03910c0 c7817e1c c7817e1c > c7817df8 c7817df8 c01ae510 c01ae510 c01af048 c01af048 c78034d8 c78034d8 > c037de70 c037de70 > > 7e00: 7e00: 00000000 00000000 c03910c0 c03910c0 00000000 00000000 > c7941b60 c7941b60 c7817e2c c7817e2c c7817e20 c7817e20 c01aedd8 c01aedd8 > c01ae4d0 c01ae4d0 > > 7e20: 7e20: c7817e5c c7817e5c c7817e30 c7817e30 c01ae994 c01ae994 > c01aedc4 c01aedc4 c0325184 c0325184 c03910c0 c03910c0 00000000 00000000 > c03a0480 c03a0480 > > 7e40: 7e40: c03910c0 c03910c0 00000000 00000000 00000000 00000000 > 00000000 00000000 c7817e84 c7817e84 c7817e60 c7817e60 c01af298 c01af298 > c01ae8f8 c01ae8f8 > > 7e60: 7e60: c03a0480 c03a0480 c0024b00 c0024b00 00000000 00000000 > 00000000 00000000 00000000 00000000 c001a210 c001a210 c7817e94 c7817e94 > c7817e88 c7817e88 > > 7e80: 7e80: c01b0108 c01b0108 c01af20c c01af20c c7817ebc c7817ebc > c7817e98 c7817e98 c001a41c c001a41c c01b009c c01b009c c0019c1c c0019c1c > c01754b0 c01754b0 > > 7ea0: 7ea0: 00000000 00000000 00000000 00000000 12bdf916 12bdf916 > c03a0480 c03a0480 c7817fdc c7817fdc c7817ec0 c7817ec0 c002c2d0 c002c2d0 > c001a21c c001a21c > > 7ec0: 7ec0: c78035a0 c78035a0 c78035a4 c78035a4 00000000 00000000 > 0000024e 0000024e c7817f34 c7817f34 c7817ee0 c7817ee0 c016ec10 c016ec10 > c0099994 c0099994 > > 7ee0: 7ee0: 00000000 00000000 c7817f54 c7817f54 000000d0 000000d0 > c7811f28 c7811f28 00000000 00000000 c03aa84c c03aa84c 000000d0 000000d0 > c03a93a4 c03a93a4 > > 7f00: 7f00: c7817f2c c7817f2c c7817f10 c7817f10 c016ee24 c016ee24 > c783c0a0 c783c0a0 c03859bc c03859bc c783d6e0 c783d6e0 c03a93a4 c03a93a4 > 00000000 00000000 > > 7f20: 7f20: 00000000 00000000 00000000 00000000 c7817f44 c7817f44 > c7817f38 c7817f38 c016ec44 c016ec44 c016ea7c c016ea7c c7817f74 c7817f74 > c7817f48 c7817f48 > > 7f40: 7f40: c00da818 c00da818 c016ec38 c016ec38 c783d6e0 c783d6e0 > c0328032 c0328032 c7817f9e c7817f9e 0000024e 0000024e c783c0a0 c783c0a0 > c03859bc c03859bc > > 7f60: 7f60: 0000015f 0000015f c03a93a4 c03a93a4 c7817f94 c7817f94 > c7817f78 c7817f78 c00daa00 c00daa00 c00da7ec c00da7ec c7817f94 c7817f94 > c783d6e0 c783d6e0 > > 7f80: 7f80: c00dab7c c00dab7c c7817f9e c7817f9e c7817fc4 c7817fc4 > c7817f98 c7817f98 c0077f98 c0077f98 c00daa0c c00daa0c c7817fb4 c7817fb4 > 35337588 35337588 > > 7fa0: 7fa0: 00000031 00000031 00000000 00000000 00000192 00000192 > c03865b0 c03865b0 00000000 00000000 c0024e74 c0024e74 c0024b00 c0024b00 > 00000000 00000000 > > 7fc0: 7fc0: 00000000 00000000 00000000 00000000 00000000 00000000 > 00000000 00000000 c7817ff4 c7817ff4 c7817fe0 c7817fe0 c00088b8 c00088b8 > c002c27c c002c27c > > 7fe0: 7fe0: 00000000 00000000 00000000 00000000 00000000 00000000 > c7817ff8 c7817ff8 c00538a8 c00538a8 c0008854 c0008854 ffff0000 ffff0000 > ffff0000 ffff0000 > > Backtrace: Backtrace: > > [<c003ae3c>] [<c003ae3c>] (clk_enable+0x0/0x54) (clk_enable+0x0/0x54) > from [<c018bef4>] from [<c018bef4>] (omapfb_probe+0x54/0x7c) > (omapfb_probe+0x54/0x7c) > r5:c037ac4c r5:c037ac4c r4:fffffffe r4:fffffffe > > [<c018bea0>] [<c018bea0>] (omapfb_probe+0x0/0x7c) > (omapfb_probe+0x0/0x7c) from [<c01afd70>] from [<c01afd70>] > (platform_drv_probe+0x20/0x24) > (platform_drv_probe+0x20/0x24) > r5:c037ded4 r5:c037ded4 r4:c037de28 r4:c037de28 > > [<c01afd50>] [<c01afd50>] (platform_drv_probe+0x0/0x24) > (platform_drv_probe+0x0/0x24) from [<c01aef90>] from [<c01aef90>] > (driver_probe_device+0xd0/0x17c) > (driver_probe_device+0xd0/0x17c) > [<c01aeec0>] [<c01aeec0>] (driver_probe_device+0x0/0x17c) > (driver_probe_device+0x0/0x17c) from [<c01af0a4>] from [<c01af0a4>] > (__driver_attach+0x68/0x8c) > (__driver_attach+0x68/0x8c) > r7:c03910c0 r7:c03910c0 r6:c03910c0 r6:c03910c0 r5:c037ded4 r5:c037ded4 > r4:c037de28 r4:c037de28 > > [<c01af03c>] [<c01af03c>] (__driver_attach+0x0/0x8c) > (__driver_attach+0x0/0x8c) from [<c01ae510>] from [<c01ae510>] > (bus_for_each_dev+0x4c/0x84) > (bus_for_each_dev+0x4c/0x84) > r7:c03910c0 r7:c03910c0 r6:c01af03c r6:c01af03c r5:c7817df8 r5:c7817df8 > r4:00000000 r4:00000000 > > [<c01ae4c4>] [<c01ae4c4>] (bus_for_each_dev+0x0/0x84) > (bus_for_each_dev+0x0/0x84) from [<c01aedd8>] from [<c01aedd8>] > (driver_attach+0x20/0x28) > (driver_attach+0x20/0x28) > r7:c7941b60 r7:c7941b60 r6:00000000 r6:00000000 r5:c03910c0 r5:c03910c0 > r4:00000000 r4:00000000 > > [<c01aedb8>] [<c01aedb8>] (driver_attach+0x0/0x28) > (driver_attach+0x0/0x28) from [<c01ae994>] from [<c01ae994>] > (bus_add_driver+0xa8/0x214) > (bus_add_driver+0xa8/0x214) > [<c01ae8ec>] [<c01ae8ec>] (bus_add_driver+0x0/0x214) > (bus_add_driver+0x0/0x214) from [<c01af298>] from [<c01af298>] > (driver_register+0x98/0x120) > (driver_register+0x98/0x120) > r8:00000000 r8:00000000 r7:00000000 r7:00000000 r6:00000000 r6:00000000 > r5:c03910c0 r5:c03910c0 r4:c03a0480 r4:c03a0480 > > [<c01af200>] [<c01af200>] (driver_register+0x0/0x120) > (driver_register+0x0/0x120) from [<c01b0108>] from [<c01b0108>] > (platform_driver_register+0x78/0x94) > (platform_driver_register+0x78/0x94) > [<c01b0090>] [<c01b0090>] (platform_driver_register+0x0/0x94) > (platform_driver_register+0x0/0x94) from [<c001a41c>] from [<c001a41c>] > (omapfb_init+0x20c/0x24c) > (omapfb_init+0x20c/0x24c) > [<c001a210>] [<c001a210>] (omapfb_init+0x0/0x24c) > (omapfb_init+0x0/0x24c) from [<c002c2d0>] from [<c002c2d0>] > (do_one_initcall+0x60/0x18c) > (do_one_initcall+0x60/0x18c) > r4:c03a0480 r4:c03a0480 > > [<c002c270>] [<c002c270>] (do_one_initcall+0x0/0x18c) > (do_one_initcall+0x0/0x18c) from [<c00088b8>] from [<c00088b8>] > (kernel_init+0x70/0xdc) > (kernel_init+0x70/0xdc) > [<c0008848>] [<c0008848>] (kernel_init+0x0/0xdc) (kernel_init+0x0/0xdc) > from [<c00538a8>] from [<c00538a8>] (do_exit+0x0/0x6ac) > (do_exit+0x0/0x6ac) > r5:00000000 r5:00000000 r4:00000000 r4:00000000 > > Code: Code: e58d1000 e58d1000 e1a0100e e1a0100e e885001f e885001f > e59f503c e59f503c (e5950098) (e5950098) > > <4>---[ end trace 7567be4737bae816 ]--- > ---[ end trace 7567be4737bae816 ]--- > <0>Kernel panic - not syncing: Attempted to kill init! > Kernel panic - not syncing: Attempted to kill init! > > > > -- > 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 -- 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