1
2
3#ifndef __ASM_CSKY_CKMMUV1_H
4#define __ASM_CSKY_CKMMUV1_H
5#include <abi/reg_ops.h>
6
7static inline int read_mmu_index(void)
8{
9 return cprcr("cpcr0");
10}
11
12static inline void write_mmu_index(int value)
13{
14 cpwcr("cpcr0", value);
15}
16
17static inline int read_mmu_entrylo0(void)
18{
19 return cprcr("cpcr2") << 6;
20}
21
22static inline int read_mmu_entrylo1(void)
23{
24 return cprcr("cpcr3") << 6;
25}
26
27static inline void write_mmu_pagemask(int value)
28{
29 cpwcr("cpcr6", value);
30}
31
32static inline int read_mmu_entryhi(void)
33{
34 return cprcr("cpcr4");
35}
36
37static inline void write_mmu_entryhi(int value)
38{
39 cpwcr("cpcr4", value);
40}
41
42static inline unsigned long read_mmu_msa0(void)
43{
44 return cprcr("cpcr30");
45}
46
47static inline void write_mmu_msa0(unsigned long value)
48{
49 cpwcr("cpcr30", value);
50}
51
52static inline unsigned long read_mmu_msa1(void)
53{
54 return cprcr("cpcr31");
55}
56
57static inline void write_mmu_msa1(unsigned long value)
58{
59 cpwcr("cpcr31", value);
60}
61
62
63
64
65static inline void tlb_probe(void)
66{
67 cpwcr("cpcr8", 0x80000000);
68}
69
70static inline void tlb_read(void)
71{
72 cpwcr("cpcr8", 0x40000000);
73}
74
75static inline void tlb_invalid_all(void)
76{
77 cpwcr("cpcr8", 0x04000000);
78}
79
80
81static inline void local_tlb_invalid_all(void)
82{
83 tlb_invalid_all();
84}
85
86static inline void tlb_invalid_indexed(void)
87{
88 cpwcr("cpcr8", 0x02000000);
89}
90
91static inline void setup_pgd(pgd_t *pgd, int asid)
92{
93 cpwcr("cpcr29", __pa(pgd) | BIT(0));
94 write_mmu_entryhi(asid);
95}
96
97static inline pgd_t *get_pgd(void)
98{
99 return __va(cprcr("cpcr29") & ~BIT(0));
100}
101#endif
102