• Akshay Adiga's avatar
    powerpc/powernv/idle: Clear r12 on wakeup from stop lite · 4d0d7c02
    Akshay Adiga authored
    pnv_wakeup_noloss() expects r12 to contain SRR1 value to determine if the wakeup
    reason is an HMI in CHECK_HMI_INTERRUPT.
    
    When we wakeup with ESL=0, SRR1 will not contain the wakeup reason, so there is
    no point setting r12 to SRR1.
    
    However, we don't set r12 at all so r12 contains garbage (likely a kernel
    pointer), and is still used to check HMI assuming that it contained SRR1. This
    causes the OPAL msglog to be filled with the following print:
    
      HMI: Received HMI interrupt: HMER = 0x0040000000000000
    
    This patch clears r12 after waking up from stop with ESL=EC=0, so that we don't
    accidentally enter the HMI handler in pnv_wakeup_noloss() if the value of
    r12[42:45] corresponds to HMI as wakeup reason.
    
    Prior to commit 9d292501 ("powerpc/64s/idle: Avoid SRR usage in idle
    sleep/wake paths") this bug existed, in that we would incorrectly look at SRR1
    to check for a HMI when SRR1 didn't contain a wakeup reason. However the SRR1
    value would just happen to never have bits 42:45 set.
    
    Fixes: 9d292501 ("powerpc/64s/idle: Avoid SRR usage in idle sleep/wake paths")
    Signed-off-by: default avatarAkshay Adiga <akshay.adiga@linux.vnet.ibm.com>
    Reviewed-by: default avatarNicholas Piggin <npiggin@gmail.com>
    [mpe: Change log and comment massaging]
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    4d0d7c02
idle_book3s.S 22 KB