1/* SPDX-License-Identifier: GPL-2.0 */ 2#ifndef _ASM_POWERPC_SYNCH_H 3#define _ASM_POWERPC_SYNCH_H 4#ifdef __KERNEL__ 5 6#include <asm/feature-fixups.h> 7#include <asm/asm-const.h> 8 9#ifndef __ASSEMBLY__ 10extern unsigned int __start___lwsync_fixup, __stop___lwsync_fixup; 11extern void do_lwsync_fixups(unsigned long value, void *fixup_start, 12 void *fixup_end); 13 14static inline void eieio(void) 15{ 16 __asm__ __volatile__ ("eieio" : : : "memory"); 17} 18 19static inline void isync(void) 20{ 21 __asm__ __volatile__ ("isync" : : : "memory"); 22} 23#endif /* __ASSEMBLY__ */ 24 25#if defined(__powerpc64__) 26# define LWSYNC lwsync 27#elif defined(CONFIG_E500) 28# define LWSYNC \ 29 START_LWSYNC_SECTION(96); \ 30 sync; \ 31 MAKE_LWSYNC_SECTION_ENTRY(96, __lwsync_fixup); 32#else 33# define LWSYNC sync 34#endif 35 36#ifdef CONFIG_SMP 37#define __PPC_ACQUIRE_BARRIER \ 38 START_LWSYNC_SECTION(97); \ 39 isync; \ 40 MAKE_LWSYNC_SECTION_ENTRY(97, __lwsync_fixup); 41#define PPC_ACQUIRE_BARRIER "\n" stringify_in_c(__PPC_ACQUIRE_BARRIER) 42#define PPC_RELEASE_BARRIER stringify_in_c(LWSYNC) "\n" 43#define PPC_ATOMIC_ENTRY_BARRIER "\n" stringify_in_c(sync) "\n" 44#define PPC_ATOMIC_EXIT_BARRIER "\n" stringify_in_c(sync) "\n" 45#else 46#define PPC_ACQUIRE_BARRIER 47#define PPC_RELEASE_BARRIER 48#define PPC_ATOMIC_ENTRY_BARRIER 49#define PPC_ATOMIC_EXIT_BARRIER 50#endif 51 52#endif /* __KERNEL__ */ 53#endif /* _ASM_POWERPC_SYNCH_H */ 54