• Paul Walmsley's avatar
    OMAP: counter_32k: init clocksource as part of machine timer init · d8328f3b
    Paul Walmsley authored
    After commit dc548fbb ("ARM: omap: convert
    sched_clock() to use new infrastructure"), OMAPs that use the 32KiHz
    "synchronization timer" as their clocksource crash during boot:
    
    [    0.000000] OMAP clockevent source: GPTIMER1 at 32768 Hz
    [    0.000000] Unable to handle kernel NULL pointer dereference at virtual address 00000000
    [    0.000000] pgd = c0004000
    [    0.000000] [00000000] *pgd=00000000
    [    0.000000] Internal error: Oops: 80000005 [#1] SMP
    [    0.000000] last sysfs file:
    [    0.000000] Modules linked in:
    [    0.000000] CPU: 0    Tainted: G        W    (2.6.37-07734-g2467802 #7)
    [    0.000000] PC is at 0x0
    [    0.000000] LR is at sched_clock_poll+0x2c/0x3c
    [    0.000000] pc : [<00000000>]    lr : [<c0060b74>]    psr: 600001d3
    [    0.000000] sp : c058bfd0  ip : c058a000  fp : 00000000
    [    0.000000] r10: 00000000  r9 : 411fc092  r8 : 800330c8
    [    0.000000] r7 : c05a08e0  r6 : c0034c48  r5 : c05ffc40  r4 : c0034c4c
    [    0.000000] r3 : c05ffe6c  r2 : c05a0bc0  r1 : c059f098  r0 : 00000000
    [    0.000000] Flags: nZCv  IRQs off  FIQs off  Mode SVC_32  ISA ARM  Segment kernel
    [    0.000000] Control: 10c53c7f  Table: 8000404a  DAC: 00000017
    
    This is due to the recent ARM init_sched_clock() changes and the late
    initialization of the counter_32k clock source.  More information here:
    
       http://marc.info/?l=linux-omap&m=129513468605208&w=2
    
    Fix by initializing the counter_32k clocksource during the machine timer
    initialization.
    Reported-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
    Tested-by: default avatarThomas Weber <weber@corscience.de>
    Signed-off-by: default avatarPaul Walmsley <paul@pwsan.com>
    d8328f3b
timer-gp.c 6.29 KB