Skip to content
  • make shi's avatar
    ENGR00233728 mx6 usb: change usb driver load from arch_initcall to module_init · 3042d8dc
    make shi authored
    We should use module_init as usb driver initialization entry point.
    To avoid the following crash when sabreauto board bootup:
    Unable to handle kernel NULL pointer dereference at virtual address 00000030
    pgd = 80004000
    [00000030] *pgd=00000000
    Internal error: Oops: 5 [#1] PREEMPT SMP
    Modules linked in:
    CPU: 0    Not tainted  (3.0.35-02249-g64936321
    
    -dirty #3070)
    PC is at gpio_set_value_cansleep+0x20/0x34
    LR is at mx6_usb_h1_init+0x68/0x188
    pc : [<80251638>]    lr : [<80010bd4>]    psr: 20000013
    sp : e4049f60  ip : 000000ef  fp : 00000000
    r10: 00000000  r9 : 00000000  r8 : e4049f8c
    r7 : 80521f04  r6 : e4049f80  r5 : 80521f10  r4 : 80af53cc
    r3 : 00000000  r2 : 00000001  r1 : 00000001  r0 : 00000000
    Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
    Control: 10c53c7d  Table: 1000404a  DAC: 00000015
    Process swapper (pid: 1, stack limit = 0xe40482f0)
    Stack: (0xe4049f60 to 0xe404a000)
    9f60: 80af53cc 80010bd4 00000001 02184200 0000004a 00000001 02184200 00000048
    9f80: 00000001 0000004d 0000004a 00000001 0000004d 00000048 8002e020 80af4ac0
    9fa0: 00000000 80010b6c 00000000 8003b4c4 00000000 80130000 00000000 80abf898
    9fc0: 000001f0 8002e020 8002e564 80042040 00000013 00000000 00000000 00000000
    9fe0: 00000000 800083cc 00000000 80008334 80042040 80042040 5104b14a f0e00000
    [<80251638>] (gpio_set_value_cansleep+0x20/0x34) from [<80010bd4>]
    (mx6_usb_h1_init+0x68/0x188)
    [<80010bd4>] (mx6_usb_h1_init+0x68/0x188) from [<8003b4c4>]
    (do_one_initcall+0x30/0x16c)
    [<8003b4c4>] (do_one_initcall+0x30/0x16c) from [<800083cc>]
    (kernel_init+0x98/0x144)
    [<800083cc>] (kernel_init+0x98/0x144) from [<80042040>]
    (kernel_thread_exit+0x0/0x8)
    Code: e92d4010 e7933100 e1a02001 e1a00003 (e5931030)
    ---[ end trace 1b75b31a2719ed1c ]---
    Kernel panic - not syncing: Attempted to kill init!
    [<8004823c>] (unwind_backtrace+0x0/0xfc) from [<8051d790>]
    (panic+0x74/0x19c)
    [<8051d790>] (panic+0x74/0x19c) from [<80078ba8>] (do_exit+0x664/0x718)
    [<80078ba8>] (do_exit+0x664/0x718) from [<80044fcc>] (die+0x250/0x2c8)
    [<80044fcc>] (die+0x250/0x2c8) from [<8004ba74>]
    (__do_kernel_fault+0x64/0x84)
    [<8004ba74>] (__do_kernel_fault+0x64/0x84) from [<8004bc14>]
    (do_page_fault+0x180/0x2e0)
    [<8004bc14>] (do_page_fault+0x180/0x2e0) from [<8003b400>]
    (do_DataAbort+0x34/0x98)
    [<8003b400>] (do_DataAbort+0x34/0x98) from [<80040f10>]
    (__dabt_svc+0x70/0xa0)
    
    Some board for example sabreauto board usb power gpio is use a io
    i2c expander gpio, gpio i2c driver load use subsys_initcall as driver
    initialization entry point, so gpio is not accessible at early bootup.
    
    Signed-off-by: default avatarmake shi <b15407@freescale.com>
    3042d8dc