• Steve Twiss's avatar
    rtc: da9053: fix access ordering error during RTC interrupt at system power on · 6406d96e
    Steve Twiss authored
    This fix alters the ordering of the IRQ and device registrations in the RTC
    driver probe function. This change will apply to the RTC driver that supports
    both DA9052 and DA9053 PMICs.
    
    A problem could occur with the existing RTC driver if:
    
    A system is started from a cold boot using the PMIC RTC IRQ to initiate a
    power on operation. For instance, if an RTC alarm is used to start a
    platform from power off.
    The existing driver IRQ is requested before the device has been properly
    registered.
    
    i.e.
    ret = da9052_request_irq()
    comes before
    rtc->rtc = devm_rtc_device_register();
    
    In this case, an interrupt exists before the device has been registered and
    the IRQ handler can be called immediately: this can happen be before the
    memory for rtc->rtc has been allocated. The IRQ handler da9052_rtc_irq()
    contains the function call:
    
    rtc_update_irq(rtc->rtc, 1, RTC_IRQF | RTC_AF);
    
    which in turn tries to access the unavailable rtc->rtc.
    
    The fix is to reorder the functions inside the RTC probe. The IRQ is
    requested after the RTC device resource has been registered so that
    da9052_request_irq() is the last thing to happen.
    Signed-off-by: default avatarSteve Twiss <stwiss.opensource@diasemi.com>
    Signed-off-by: default avatarAlexandre Belloni <alexandre.belloni@free-electrons.com>
    6406d96e
rtc-da9052.c 7.79 KB