• Łukasz Bartosik's avatar
    pinctrl: intel: fix unexpected interrupt · e986f0e6
    Łukasz Bartosik authored
    ASUS Chromebook C223 with Celeron N3350 crashes sometimes during
    cold booot. Inspection of the kernel log showed that it gets into
    an inifite loop logging the following message:
    
    ->handle_irq():  000000009cdb51e8, handle_bad_irq+0x0/0x251
    ->irq_data.chip(): 000000005ec212a7, 0xffffa043009d8e7
    ->action(): 00000
       IRQ_NOPROBE set
    unexpected IRQ trap at vector 7c
    
    The issue happens during cold boot but only if cold boot happens
    at most several dozen seconds after Chromebook is powered off. For
    longer intervals between power off and power on (cold boot) the issue
    does not reproduce. The unexpected interrupt is sourced from INT3452
    GPIO pin which is used for SD card detect. Investigation relevealed
    that when the interval between power off and power on (cold boot)
    is less than several dozen seconds then values of INT3452 GPIO interrupt
    enable and interrupt pending registers survive power off and power
    on sequence and interrupt for SD card detect pin is enabled and pending
    during probe of SD controller which causes the unexpected IRQ message.
    "Intel Pentium and Celeron Processor N- and J- Series" volume 3 doc
    mentions that GPIO interrupt enable and status registers default
    value is 0x0.
    The fix clears INT3452 GPIO interrupt enabled and interrupt pending
    registers in its probe function.
    
    Fixes: 7981c001 ("pinctrl: intel: Add Intel Sunrisepoint pin controller and GPIO support")
    Signed-off-by: default avatarŁukasz Bartosik <lb@semihalf.com>
    Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
    e986f0e6
pinctrl-intel.c 45.5 KB