* to the sibling threads' paca.
         */
        struct paca_struct **thread_sibling_pacas;
+       /* The PSSCR value that the kernel requested before going to stop */
+       u64 requested_psscr;
 #endif
 
 #ifdef CONFIG_PPC_STD_MMU_64
 
        OFFSET(PACA_THREAD_MASK, paca_struct, thread_mask);
        OFFSET(PACA_SUBCORE_SIBLING_MASK, paca_struct, subcore_sibling_mask);
        OFFSET(PACA_SIBLING_PACA_PTRS, paca_struct, thread_sibling_pacas);
+       OFFSET(PACA_REQ_PSSCR, paca_struct, requested_psscr);
 #endif
 
        DEFINE(PPC_DBELL_SERVER, PPC_DBELL_SERVER);
 
        mfspr   r5,SPRN_PSSCR
        andc    r5,r5,r4
        or      r3,r3,r5
+       std     r3, PACA_REQ_PSSCR(r13)
        mtspr   SPRN_PSSCR,r3
        LOAD_REG_ADDR(r5,power_enter_stop)
        li      r4,1
        LOAD_REG_ADDRBASE(r5,pnv_first_deep_stop_state)
        ld      r4,ADDROFF(pnv_first_deep_stop_state)(r5)
 
-       mfspr   r5,SPRN_PSSCR
+BEGIN_FTR_SECTION_NESTED(71)
+       /*
+        * Assume that we are waking up from the state
+        * same as the Requested Level (RL) in the PSSCR
+        * which are Bits 60-63
+        */
+       ld      r5,PACA_REQ_PSSCR(r13)
+       rldicl  r5,r5,0,60
+FTR_SECTION_ELSE_NESTED(71)
        /*
         * 0-3 bits correspond to Power-Saving Level Status
         * which indicates the idle state we are waking up from
         */
+       mfspr   r5, SPRN_PSSCR
        rldicl  r5,r5,4,60
+ALT_FTR_SECTION_END_NESTED_IFSET(CPU_FTR_POWER9_DD1, 71)
        cmpd    cr4,r5,r4
        bge     cr4,pnv_wakeup_tb_loss /* returns to caller */