@@ -2155,3 +2155,95 @@ ENTRY(ret_from_kernel_thread)
21552155 j common_exception_return
21562156
21572157ENDPROC(ret_from_kernel_thread)
2158+
2159+ #ifdef CONFIG_HIBERNATION
2160+
2161+ .bss
2162+ . align 4
2163+ .Lsaved_regs:
2164+ #if defined(__XTENSA_WINDOWED_ABI__)
2165+ .fill 2 , 4
2166+ #elif defined(__XTENSA_CALL0_ABI__)
2167+ .fill 6 , 4
2168+ #else
2169+ #error Unsupported Xtensa ABI
2170+ #endif
2171+ . align XCHAL_NCP_SA_ALIGN
2172+ .Lsaved_user_regs:
2173+ .fill XTREGS_USER_SIZE , 1
2174+
2175+ .previous
2176+
2177+ ENTRY(swsusp_arch_suspend)
2178+
2179+ abi_entry_default
2180+
2181+ movi a2 , .Lsaved_regs
2182+ movi a3 , .Lsaved_user_regs
2183+ s32i a0 , a2 , 0
2184+ s32i a1 , a2 , 4
2185+ save_xtregs_user a3 a4 a5 a6 a7 a8 0
2186+ #if defined(__XTENSA_WINDOWED_ABI__)
2187+ spill_registers_kernel
2188+ #elif defined(__XTENSA_CALL0_ABI__)
2189+ s32i a12 , a2 , 8
2190+ s32i a13 , a2 , 12
2191+ s32i a14 , a2 , 16
2192+ s32i a15 , a2 , 20
2193+ #else
2194+ #error Unsupported Xtensa ABI
2195+ #endif
2196+ abi_call swsusp_save
2197+ mov a2 , abi_rv
2198+ abi_ret_default
2199+
2200+ ENDPROC(swsusp_arch_suspend)
2201+
2202+ ENTRY(swsusp_arch_resume)
2203+
2204+ abi_entry_default
2205+
2206+ #if defined(__XTENSA_WINDOWED_ABI__)
2207+ spill_registers_kernel
2208+ #endif
2209+
2210+ movi a2 , restore_pblist
2211+ l32i a2 , a2 , 0
2212+
2213+ .Lcopy_pbe:
2214+ l32i a3 , a2 , PBE_ADDRESS
2215+ l32i a4 , a2 , PBE_ORIG_ADDRESS
2216+
2217+ __loopi a3 , a9 , PAGE_SIZE , 16
2218+ l32i a5 , a3 , 0
2219+ l32i a6 , a3 , 4
2220+ l32i a7 , a3 , 8
2221+ l32i a8 , a3 , 12
2222+ addi a3 , a3 , 16
2223+ s32i a5 , a4 , 0
2224+ s32i a6 , a4 , 4
2225+ s32i a7 , a4 , 8
2226+ s32i a8 , a4 , 12
2227+ addi a4 , a4 , 16
2228+ __endl a3 , a9
2229+
2230+ l32i a2 , a2 , PBE_NEXT
2231+ bnez a2 , .Lcopy_pbe
2232+
2233+ movi a2 , .Lsaved_regs
2234+ movi a3 , .Lsaved_user_regs
2235+ l32i a0 , a2 , 0
2236+ l32i a1 , a2 , 4
2237+ load_xtregs_user a3 a4 a5 a6 a7 a8 0
2238+ #if defined(__XTENSA_CALL0_ABI__)
2239+ l32i a12 , a2 , 8
2240+ l32i a13 , a2 , 12
2241+ l32i a14 , a2 , 16
2242+ l32i a15 , a2 , 20
2243+ #endif
2244+ movi a2 , 0
2245+ abi_ret_default
2246+
2247+ ENDPROC(swsusp_arch_resume)
2248+
2249+ #endif
0 commit comments