xref: /openbmc/linux/arch/parisc/include/asm/prefetch.h (revision b2441318)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2deae26bfSKyle McMartin /*
3deae26bfSKyle McMartin  * include/asm-parisc/prefetch.h
4deae26bfSKyle McMartin  *
5deae26bfSKyle McMartin  * PA 2.0 defines data prefetch instructions on page 6-11 of the Kane book.
6deae26bfSKyle McMartin  * In addition, many implementations do hardware prefetching of both
7deae26bfSKyle McMartin  * instructions and data.
8deae26bfSKyle McMartin  *
9deae26bfSKyle McMartin  * PA7300LC (page 14-4 of the ERS) also implements prefetching by a load
10deae26bfSKyle McMartin  * to gr0 but not in a way that Linux can use.  If the load would cause an
11deae26bfSKyle McMartin  * interruption (eg due to prefetching 0), it is suppressed on PA2.0
12deae26bfSKyle McMartin  * processors, but not on 7300LC.
13deae26bfSKyle McMartin  *
14deae26bfSKyle McMartin  */
15deae26bfSKyle McMartin 
16deae26bfSKyle McMartin #ifndef __ASM_PARISC_PREFETCH_H
17deae26bfSKyle McMartin #define __ASM_PARISC_PREFETCH_H
18deae26bfSKyle McMartin 
19deae26bfSKyle McMartin #ifndef __ASSEMBLY__
20deae26bfSKyle McMartin #ifdef CONFIG_PREFETCH
21deae26bfSKyle McMartin 
22deae26bfSKyle McMartin #define ARCH_HAS_PREFETCH
prefetch(const void * addr)23deae26bfSKyle McMartin static inline void prefetch(const void *addr)
24deae26bfSKyle McMartin {
25b3cb8674SJames Bottomley 	__asm__(
26b3cb8674SJames Bottomley #ifndef CONFIG_PA20
27b3cb8674SJames Bottomley 		/* Need to avoid prefetch of NULL on PA7300LC */
28b3cb8674SJames Bottomley 		"	extrw,u,= %0,31,32,%%r0\n"
29b3cb8674SJames Bottomley #endif
30b3cb8674SJames Bottomley 		"	ldw 0(%0), %%r0" : : "r" (addr));
31deae26bfSKyle McMartin }
32deae26bfSKyle McMartin 
33deae26bfSKyle McMartin /* LDD is a PA2.0 addition. */
34deae26bfSKyle McMartin #ifdef CONFIG_PA20
35deae26bfSKyle McMartin #define ARCH_HAS_PREFETCHW
prefetchw(const void * addr)36deae26bfSKyle McMartin static inline void prefetchw(const void *addr)
37deae26bfSKyle McMartin {
38deae26bfSKyle McMartin 	__asm__("ldd 0(%0), %%r0" : : "r" (addr));
39deae26bfSKyle McMartin }
40deae26bfSKyle McMartin #endif /* CONFIG_PA20 */
41deae26bfSKyle McMartin 
42deae26bfSKyle McMartin #endif /* CONFIG_PREFETCH */
43deae26bfSKyle McMartin #endif /* __ASSEMBLY__ */
44deae26bfSKyle McMartin 
45deae26bfSKyle McMartin #endif /* __ASM_PARISC_PROCESSOR_H */
46