18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 28c2ecf20Sopenharmony_ci .align 32 38c2ecf20Sopenharmony_ci .globl __flushw_user 48c2ecf20Sopenharmony_ci .type __flushw_user,#function 58c2ecf20Sopenharmony_ci__flushw_user: 68c2ecf20Sopenharmony_ci rdpr %otherwin, %g1 78c2ecf20Sopenharmony_ci brz,pn %g1, 2f 88c2ecf20Sopenharmony_ci clr %g2 98c2ecf20Sopenharmony_ci1: save %sp, -128, %sp 108c2ecf20Sopenharmony_ci rdpr %otherwin, %g1 118c2ecf20Sopenharmony_ci brnz,pt %g1, 1b 128c2ecf20Sopenharmony_ci add %g2, 1, %g2 138c2ecf20Sopenharmony_ci1: sub %g2, 1, %g2 148c2ecf20Sopenharmony_ci brnz,pt %g2, 1b 158c2ecf20Sopenharmony_ci restore %g0, %g0, %g0 168c2ecf20Sopenharmony_ci2: retl 178c2ecf20Sopenharmony_ci nop 188c2ecf20Sopenharmony_ci .size __flushw_user,.-__flushw_user 198c2ecf20Sopenharmony_ciEXPORT_SYMBOL(__flushw_user) 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_ci /* Flush %fp and %i7 to the stack for all register 228c2ecf20Sopenharmony_ci * windows active inside of the cpu. This allows 238c2ecf20Sopenharmony_ci * show_stack_trace() to avoid using an expensive 248c2ecf20Sopenharmony_ci * 'flushw'. 258c2ecf20Sopenharmony_ci */ 268c2ecf20Sopenharmony_ci .globl stack_trace_flush 278c2ecf20Sopenharmony_ci .type stack_trace_flush,#function 288c2ecf20Sopenharmony_cistack_trace_flush: 298c2ecf20Sopenharmony_ci rdpr %pstate, %o0 308c2ecf20Sopenharmony_ci wrpr %o0, PSTATE_IE, %pstate 318c2ecf20Sopenharmony_ci 328c2ecf20Sopenharmony_ci rdpr %cwp, %g1 338c2ecf20Sopenharmony_ci rdpr %canrestore, %g2 348c2ecf20Sopenharmony_ci sub %g1, 1, %g3 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_ci1: brz,pn %g2, 2f 378c2ecf20Sopenharmony_ci sub %g2, 1, %g2 388c2ecf20Sopenharmony_ci wrpr %g3, %cwp 398c2ecf20Sopenharmony_ci stx %fp, [%sp + STACK_BIAS + RW_V9_I6] 408c2ecf20Sopenharmony_ci stx %i7, [%sp + STACK_BIAS + RW_V9_I7] 418c2ecf20Sopenharmony_ci ba,pt %xcc, 1b 428c2ecf20Sopenharmony_ci sub %g3, 1, %g3 438c2ecf20Sopenharmony_ci 448c2ecf20Sopenharmony_ci2: wrpr %g1, %cwp 458c2ecf20Sopenharmony_ci wrpr %o0, %pstate 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_ci retl 488c2ecf20Sopenharmony_ci nop 498c2ecf20Sopenharmony_ci .size stack_trace_flush,.-stack_trace_flush 508c2ecf20Sopenharmony_ci 518c2ecf20Sopenharmony_ci#ifdef CONFIG_SMP 528c2ecf20Sopenharmony_ci .globl hard_smp_processor_id 538c2ecf20Sopenharmony_ci .type hard_smp_processor_id,#function 548c2ecf20Sopenharmony_cihard_smp_processor_id: 558c2ecf20Sopenharmony_ci#endif 568c2ecf20Sopenharmony_ci .globl real_hard_smp_processor_id 578c2ecf20Sopenharmony_ci .type real_hard_smp_processor_id,#function 588c2ecf20Sopenharmony_cireal_hard_smp_processor_id: 598c2ecf20Sopenharmony_ci __GET_CPUID(%o0) 608c2ecf20Sopenharmony_ci retl 618c2ecf20Sopenharmony_ci nop 628c2ecf20Sopenharmony_ci#ifdef CONFIG_SMP 638c2ecf20Sopenharmony_ci .size hard_smp_processor_id,.-hard_smp_processor_id 648c2ecf20Sopenharmony_ci#endif 658c2ecf20Sopenharmony_ci .size real_hard_smp_processor_id,.-real_hard_smp_processor_id 668c2ecf20Sopenharmony_ciEXPORT_SYMBOL_GPL(real_hard_smp_processor_id) 67