18c2ecf20Sopenharmony_ci/* 28c2ecf20Sopenharmony_ci * This file is subject to the terms and conditions of the GNU General Public 38c2ecf20Sopenharmony_ci * License. See the file "COPYING" in the main directory of this archive 48c2ecf20Sopenharmony_ci * for more details. 58c2ecf20Sopenharmony_ci * 68c2ecf20Sopenharmony_ci * Copyright (C) 2003 by Ralf Baechle 78c2ecf20Sopenharmony_ci */ 88c2ecf20Sopenharmony_ci#ifndef __ASM_PREFETCH_H 98c2ecf20Sopenharmony_ci#define __ASM_PREFETCH_H 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci/* 138c2ecf20Sopenharmony_ci * R5000 and RM5200 implements pref and prefx instructions but they're nops, so 148c2ecf20Sopenharmony_ci * rather than wasting time we pretend these processors don't support 158c2ecf20Sopenharmony_ci * prefetching at all. 168c2ecf20Sopenharmony_ci * 178c2ecf20Sopenharmony_ci * R5432 implements Load, Store, LoadStreamed, StoreStreamed, LoadRetained, 188c2ecf20Sopenharmony_ci * StoreRetained and WriteBackInvalidate but not Pref_PrepareForStore. 198c2ecf20Sopenharmony_ci * 208c2ecf20Sopenharmony_ci * Hell (and the book on my shelf I can't open ...) know what the R8000 does. 218c2ecf20Sopenharmony_ci * 228c2ecf20Sopenharmony_ci * RM7000 version 1.0 interprets all hints as Pref_Load; version 2.0 implements 238c2ecf20Sopenharmony_ci * Pref_PrepareForStore also. 248c2ecf20Sopenharmony_ci * 258c2ecf20Sopenharmony_ci * RM9000 is MIPS IV but implements prefetching like MIPS32/MIPS64; it's 268c2ecf20Sopenharmony_ci * Pref_WriteBackInvalidate is a nop and Pref_PrepareForStore is broken in 278c2ecf20Sopenharmony_ci * current versions due to erratum G105. 288c2ecf20Sopenharmony_ci * 298c2ecf20Sopenharmony_ci * VR5500 (including VR5701 and VR7701) only implement load prefetch. 308c2ecf20Sopenharmony_ci * 318c2ecf20Sopenharmony_ci * Finally MIPS32 and MIPS64 implement all of the following hints. 328c2ecf20Sopenharmony_ci */ 338c2ecf20Sopenharmony_ci 348c2ecf20Sopenharmony_ci#define Pref_Load 0 358c2ecf20Sopenharmony_ci#define Pref_Store 1 368c2ecf20Sopenharmony_ci /* 2 and 3 are reserved */ 378c2ecf20Sopenharmony_ci#define Pref_LoadStreamed 4 388c2ecf20Sopenharmony_ci#define Pref_StoreStreamed 5 398c2ecf20Sopenharmony_ci#define Pref_LoadRetained 6 408c2ecf20Sopenharmony_ci#define Pref_StoreRetained 7 418c2ecf20Sopenharmony_ci /* 8 ... 24 are reserved */ 428c2ecf20Sopenharmony_ci#define Pref_WriteBackInvalidate 25 438c2ecf20Sopenharmony_ci#define Pref_PrepareForStore 30 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_ci#ifdef __ASSEMBLY__ 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_ci .macro __pref hint addr 488c2ecf20Sopenharmony_ci#ifdef CONFIG_CPU_HAS_PREFETCH 498c2ecf20Sopenharmony_ci pref \hint, \addr 508c2ecf20Sopenharmony_ci#endif 518c2ecf20Sopenharmony_ci .endm 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_ci .macro pref_load addr 548c2ecf20Sopenharmony_ci __pref Pref_Load, \addr 558c2ecf20Sopenharmony_ci .endm 568c2ecf20Sopenharmony_ci 578c2ecf20Sopenharmony_ci .macro pref_store addr 588c2ecf20Sopenharmony_ci __pref Pref_Store, \addr 598c2ecf20Sopenharmony_ci .endm 608c2ecf20Sopenharmony_ci 618c2ecf20Sopenharmony_ci .macro pref_load_streamed addr 628c2ecf20Sopenharmony_ci __pref Pref_LoadStreamed, \addr 638c2ecf20Sopenharmony_ci .endm 648c2ecf20Sopenharmony_ci 658c2ecf20Sopenharmony_ci .macro pref_store_streamed addr 668c2ecf20Sopenharmony_ci __pref Pref_StoreStreamed, \addr 678c2ecf20Sopenharmony_ci .endm 688c2ecf20Sopenharmony_ci 698c2ecf20Sopenharmony_ci .macro pref_load_retained addr 708c2ecf20Sopenharmony_ci __pref Pref_LoadRetained, \addr 718c2ecf20Sopenharmony_ci .endm 728c2ecf20Sopenharmony_ci 738c2ecf20Sopenharmony_ci .macro pref_store_retained addr 748c2ecf20Sopenharmony_ci __pref Pref_StoreRetained, \addr 758c2ecf20Sopenharmony_ci .endm 768c2ecf20Sopenharmony_ci 778c2ecf20Sopenharmony_ci .macro pref_wback_inv addr 788c2ecf20Sopenharmony_ci __pref Pref_WriteBackInvalidate, \addr 798c2ecf20Sopenharmony_ci .endm 808c2ecf20Sopenharmony_ci 818c2ecf20Sopenharmony_ci .macro pref_prepare_for_store addr 828c2ecf20Sopenharmony_ci __pref Pref_PrepareForStore, \addr 838c2ecf20Sopenharmony_ci .endm 848c2ecf20Sopenharmony_ci 858c2ecf20Sopenharmony_ci#endif 868c2ecf20Sopenharmony_ci 878c2ecf20Sopenharmony_ci#endif /* __ASM_PREFETCH_H */ 88