1/* SPDX-License-Identifier: GPL-2.0 */ 2/* 3 * Copyright (C) 1999 Cort Dougan <cort@cs.nmt.edu> 4 */ 5#ifndef _ASM_POWERPC_RUNLATCH_H 6#define _ASM_POWERPC_RUNLATCH_H 7 8#ifdef CONFIG_PPC64 9 10extern void __ppc64_runlatch_on(void); 11extern void __ppc64_runlatch_off(void); 12 13/* 14 * We manually hard enable-disable, this is called 15 * in the idle loop and we don't want to mess up 16 * with soft-disable/enable & interrupt replay. 17 */ 18#define ppc64_runlatch_off() \ 19 do { \ 20 if (cpu_has_feature(CPU_FTR_CTRL) && \ 21 test_thread_local_flags(_TLF_RUNLATCH)) { \ 22 __hard_irq_disable(); \ 23 __ppc64_runlatch_off(); \ 24 if (!(local_paca->irq_happened & PACA_IRQ_HARD_DIS)) \ 25 __hard_irq_enable(); \ 26 } \ 27 } while (0) 28 29#define ppc64_runlatch_on() \ 30 do { \ 31 if (cpu_has_feature(CPU_FTR_CTRL) && \ 32 !test_thread_local_flags(_TLF_RUNLATCH)) { \ 33 __hard_irq_disable(); \ 34 __ppc64_runlatch_on(); \ 35 if (!(local_paca->irq_happened & PACA_IRQ_HARD_DIS)) \ 36 __hard_irq_enable(); \ 37 } \ 38 } while (0) 39#else 40#define ppc64_runlatch_on() 41#define ppc64_runlatch_off() 42#endif /* CONFIG_PPC64 */ 43 44#endif /* _ASM_POWERPC_RUNLATCH_H */ 45