• Stewart Smith's avatar
    rtc-opal: Fix handling of firmware error codes, prevent busy loops · b7dc0f53
    Stewart Smith authored
    commit 5b8b5806 upstream.
    
    According to the OPAL docs:
      skiboot-5.2.5/doc/opal-api/opal-rtc-read-3.txt
      skiboot-5.2.5/doc/opal-api/opal-rtc-write-4.txt
    
    OPAL_HARDWARE may be returned from OPAL_RTC_READ or OPAL_RTC_WRITE and
    this indicates either a transient or permanent error.
    
    Prior to this patch, Linux was not dealing with OPAL_HARDWARE being a
    permanent error particularly well, in that you could end up in a busy
    loop.
    
    This was not too hard to trigger on an AMI BMC based OpenPOWER machine
    doing a continuous "ipmitool mc reset cold" to the BMC, the result of
    that being that we'd get stuck in an infinite loop in
    opal_get_rtc_time().
    
    We now retry a few times before returning the error higher up the
    stack.
    
    Fixes: 16b1d26e ("rtc/tpo: Driver to support rtc and wakeup on PowerNV platform")
    Cc: stable@vger.kernel.org # v3.19+
    Signed-off-by: default avatarStewart Smith <stewart@linux.vnet.ibm.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    b7dc0f53
rtc-opal.c 6.29 KB