blob: a3b07c6ad0d0c02a8cadb30ddc7f030927f7afea [file] [log] [blame]
wdenk6069ff22003-02-28 00:49:47 +00001/*
2 * Cache operations for the cache instruction.
3 *
Shinya Kuribayashi282223a2008-03-25 11:43:17 +09004 * (C) Copyright 1996, 97, 99, 2002, 03 Ralf Baechle
5 * (C) Copyright 1999 Silicon Graphics, Inc.
Daniel Schwierzeck898582b2016-01-12 21:48:27 +01006 *
7 * SPDX-License-Identifier: GPL-2.0
wdenk6069ff22003-02-28 00:49:47 +00008 */
Shinya Kuribayashi282223a2008-03-25 11:43:17 +09009#ifndef __ASM_CACHEOPS_H
10#define __ASM_CACHEOPS_H
wdenk6069ff22003-02-28 00:49:47 +000011
Paul Burton2b8bcc52015-01-29 01:27:56 +000012#ifndef __ASSEMBLY__
13
14static inline void mips_cache(int op, const volatile void *addr)
15{
16#ifdef __GCC_HAVE_BUILTIN_MIPS_CACHE
17 __builtin_mips_cache(op, addr);
18#else
Tony Wu49bbdae2015-05-30 15:02:39 +080019 __asm__ __volatile__("cache %0, %1" : : "i"(op), "R"(addr));
Paul Burton2b8bcc52015-01-29 01:27:56 +000020#endif
21}
22
23#endif /* !__ASSEMBLY__ */
24
wdenk6069ff22003-02-28 00:49:47 +000025/*
Shinya Kuribayashi282223a2008-03-25 11:43:17 +090026 * Cache Operations available on all MIPS processors with R4000-style caches
wdenk6069ff22003-02-28 00:49:47 +000027 */
Zhi-zhou Zhangcb0a6a12012-10-16 15:02:08 +020028#define INDEX_INVALIDATE_I 0x00
29#define INDEX_WRITEBACK_INV_D 0x01
30#define INDEX_LOAD_TAG_I 0x04
31#define INDEX_LOAD_TAG_D 0x05
32#define INDEX_STORE_TAG_I 0x08
33#define INDEX_STORE_TAG_D 0x09
Shinya Kuribayashi282223a2008-03-25 11:43:17 +090034#if defined(CONFIG_CPU_LOONGSON2)
Zhi-zhou Zhangcb0a6a12012-10-16 15:02:08 +020035#define HIT_INVALIDATE_I 0x00
Shinya Kuribayashi282223a2008-03-25 11:43:17 +090036#else
Zhi-zhou Zhangcb0a6a12012-10-16 15:02:08 +020037#define HIT_INVALIDATE_I 0x10
Shinya Kuribayashi282223a2008-03-25 11:43:17 +090038#endif
Zhi-zhou Zhangcb0a6a12012-10-16 15:02:08 +020039#define HIT_INVALIDATE_D 0x11
40#define HIT_WRITEBACK_INV_D 0x15
Shinya Kuribayashi282223a2008-03-25 11:43:17 +090041
42/*
43 * R4000-specific cacheops
44 */
Zhi-zhou Zhangcb0a6a12012-10-16 15:02:08 +020045#define CREATE_DIRTY_EXCL_D 0x0d
46#define FILL 0x14
47#define HIT_WRITEBACK_I 0x18
48#define HIT_WRITEBACK_D 0x19
Shinya Kuribayashi282223a2008-03-25 11:43:17 +090049
50/*
51 * R4000SC and R4400SC-specific cacheops
52 */
Zhi-zhou Zhangcb0a6a12012-10-16 15:02:08 +020053#define INDEX_INVALIDATE_SI 0x02
54#define INDEX_WRITEBACK_INV_SD 0x03
55#define INDEX_LOAD_TAG_SI 0x06
56#define INDEX_LOAD_TAG_SD 0x07
57#define INDEX_STORE_TAG_SI 0x0A
58#define INDEX_STORE_TAG_SD 0x0B
59#define CREATE_DIRTY_EXCL_SD 0x0f
60#define HIT_INVALIDATE_SI 0x12
61#define HIT_INVALIDATE_SD 0x13
62#define HIT_WRITEBACK_INV_SD 0x17
63#define HIT_WRITEBACK_SD 0x1b
64#define HIT_SET_VIRTUAL_SI 0x1e
65#define HIT_SET_VIRTUAL_SD 0x1f
wdenk6069ff22003-02-28 00:49:47 +000066
Shinya Kuribayashi282223a2008-03-25 11:43:17 +090067/*
68 * R5000-specific cacheops
69 */
Zhi-zhou Zhangcb0a6a12012-10-16 15:02:08 +020070#define R5K_PAGE_INVALIDATE_S 0x17
Shinya Kuribayashi282223a2008-03-25 11:43:17 +090071
72/*
73 * RM7000-specific cacheops
74 */
Zhi-zhou Zhangcb0a6a12012-10-16 15:02:08 +020075#define PAGE_INVALIDATE_T 0x16
Shinya Kuribayashi282223a2008-03-25 11:43:17 +090076
77/*
78 * R10000-specific cacheops
79 *
80 * Cacheops 0x02, 0x06, 0x0a, 0x0c-0x0e, 0x16, 0x1a and 0x1e are unused.
81 * Most of the _S cacheops are identical to the R4000SC _SD cacheops.
82 */
Zhi-zhou Zhangcb0a6a12012-10-16 15:02:08 +020083#define INDEX_WRITEBACK_INV_S 0x03
84#define INDEX_LOAD_TAG_S 0x07
85#define INDEX_STORE_TAG_S 0x0B
86#define HIT_INVALIDATE_S 0x13
87#define CACHE_BARRIER 0x14
88#define HIT_WRITEBACK_INV_S 0x17
89#define INDEX_LOAD_DATA_I 0x18
90#define INDEX_LOAD_DATA_D 0x19
91#define INDEX_LOAD_DATA_S 0x1b
92#define INDEX_STORE_DATA_I 0x1c
93#define INDEX_STORE_DATA_D 0x1d
94#define INDEX_STORE_DATA_S 0x1f
Shinya Kuribayashi282223a2008-03-25 11:43:17 +090095
96#endif /* __ASM_CACHEOPS_H */