cache_octeon.h revision 1.2.16.2 1 1.2.16.2 jdolecek /* $NetBSD: cache_octeon.h,v 1.2.16.2 2017/12/03 11:36:27 jdolecek Exp $ */
2 1.2.16.2 jdolecek
3 1.2.16.2 jdolecek #define CACHE_OCTEON_I 0
4 1.2.16.2 jdolecek #define CACHE_OCTEON_D 1
5 1.2.16.2 jdolecek
6 1.2.16.2 jdolecek #define CACHEOP_OCTEON_INV_ALL (0 << 2) /* I, D */
7 1.2.16.2 jdolecek #define CACHEOP_OCTEON_INDEX_LOAD_TAG (1 << 2) /* I, D */
8 1.2.16.2 jdolecek #define CACHEOP_OCTEON_BITMAP_STORE (3 << 2) /* I */
9 1.2.16.2 jdolecek #define CACHEOP_OCTEON_VIRTUAL_TAG_INV (4 << 2) /* D */
10 1.2.16.2 jdolecek
11 1.2.16.2 jdolecek #if !defined(_LOCORE)
12 1.2.16.2 jdolecek
13 1.2.16.2 jdolecek /*
14 1.2.16.2 jdolecek * cache_octeon_invalidate:
15 1.2.16.2 jdolecek *
16 1.2.16.2 jdolecek * Invalidate all cahce blocks.
17 1.2.16.2 jdolecek * Argument "op" must be CACHE_OCTEON_I or CACHE_OCTEON_D.
18 1.2.16.2 jdolecek * In Octeon specification, invalidate instruction works
19 1.2.16.2 jdolecek * all cache blocks.
20 1.2.16.2 jdolecek */
21 1.2.16.2 jdolecek #define cache_octeon_invalidate(op) \
22 1.2.16.2 jdolecek do { \
23 1.2.16.2 jdolecek __asm __volatile( \
24 1.2.16.2 jdolecek ".set noreorder \n\t" \
25 1.2.16.2 jdolecek "cache %0, 0($0) \n\t" \
26 1.2.16.2 jdolecek ".set reorder" \
27 1.2.16.2 jdolecek : \
28 1.2.16.2 jdolecek : "i" (op) \
29 1.2.16.2 jdolecek : "memory"); \
30 1.2.16.2 jdolecek } while (/*CONSTCOND*/0)
31 1.2.16.2 jdolecek
32 1.2.16.2 jdolecek /*
33 1.2.16.2 jdolecek * cache_octeon_op_line:
34 1.2.16.2 jdolecek *
35 1.2.16.2 jdolecek * Perform the specified cache operation on a single line.
36 1.2.16.2 jdolecek */
37 1.2.16.2 jdolecek #define cache_op_octeon_line(va, op) \
38 1.2.16.2 jdolecek do { \
39 1.2.16.2 jdolecek __asm __volatile( \
40 1.2.16.2 jdolecek ".set noreorder \n\t" \
41 1.2.16.2 jdolecek "cache %1, 0(%0) \n\t" \
42 1.2.16.2 jdolecek ".set reorder" \
43 1.2.16.2 jdolecek : \
44 1.2.16.2 jdolecek : "r" (va), "i" (op) \
45 1.2.16.2 jdolecek : "memory"); \
46 1.2.16.2 jdolecek } while (/*CONSTCOND*/0)
47 1.2.16.2 jdolecek
48 1.2.16.2 jdolecek void octeon_icache_sync_all(void);
49 1.2.16.2 jdolecek void octeon_icache_sync_range(register_t va, vsize_t size);
50 1.2.16.2 jdolecek void octeon_icache_sync_range_index(vaddr_t va, vsize_t size);
51 1.2.16.2 jdolecek void octeon_pdcache_inv_all(void);
52 1.2.16.2 jdolecek void octeon_pdcache_inv_range(register_t va, vsize_t size);
53 1.2.16.2 jdolecek void octeon_pdcache_inv_range_index(vaddr_t va, vsize_t size);
54 1.2.16.2 jdolecek void octeon_pdcache_wb_range(register_t va, vsize_t size);
55 1.2.16.2 jdolecek
56 1.2.16.2 jdolecek #endif /* !_LOCORE */
57