13 #include <asm/cache.h>
19 #define IMCR_CCFG 0x0000
20 #define IMCR_L1PCFG 0x0020
21 #define IMCR_L1PCC 0x0024
22 #define IMCR_L1DCFG 0x0040
23 #define IMCR_L1DCC 0x0044
24 #define IMCR_L2ALLOC0 0x2000
25 #define IMCR_L2ALLOC1 0x2004
26 #define IMCR_L2ALLOC2 0x2008
27 #define IMCR_L2ALLOC3 0x200c
28 #define IMCR_L2WBAR 0x4000
29 #define IMCR_L2WWC 0x4004
30 #define IMCR_L2WIBAR 0x4010
31 #define IMCR_L2WIWC 0x4014
32 #define IMCR_L2IBAR 0x4018
33 #define IMCR_L2IWC 0x401c
34 #define IMCR_L1PIBAR 0x4020
35 #define IMCR_L1PIWC 0x4024
36 #define IMCR_L1DWIBAR 0x4030
37 #define IMCR_L1DWIWC 0x4034
38 #define IMCR_L1DWBAR 0x4040
39 #define IMCR_L1DWWC 0x4044
40 #define IMCR_L1DIBAR 0x4048
41 #define IMCR_L1DIWC 0x404c
42 #define IMCR_L2WB 0x5000
43 #define IMCR_L2WBINV 0x5004
44 #define IMCR_L2INV 0x5008
45 #define IMCR_L1PINV 0x5028
46 #define IMCR_L1DWB 0x5040
47 #define IMCR_L1DWBINV 0x5044
48 #define IMCR_L1DINV 0x5048
49 #define IMCR_MAR_BASE 0x8000
50 #define IMCR_MAR96_111 0x8180
51 #define IMCR_MAR128_191 0x8200
52 #define IMCR_MAR224_239 0x8380
53 #define IMCR_L2MPFAR 0xa000
54 #define IMCR_L2MPFSR 0xa004
55 #define IMCR_L2MPFCR 0xa008
56 #define IMCR_L2MPLK0 0xa100
57 #define IMCR_L2MPLK1 0xa104
58 #define IMCR_L2MPLK2 0xa108
59 #define IMCR_L2MPLK3 0xa10c
60 #define IMCR_L2MPLKCMD 0xa110
61 #define IMCR_L2MPLKSTAT 0xa114
62 #define IMCR_L2MPPA_BASE 0xa200
63 #define IMCR_L1PMPFAR 0xa400
64 #define IMCR_L1PMPFSR 0xa404
65 #define IMCR_L1PMPFCR 0xa408
66 #define IMCR_L1PMPLK0 0xa500
67 #define IMCR_L1PMPLK1 0xa504
68 #define IMCR_L1PMPLK2 0xa508
69 #define IMCR_L1PMPLK3 0xa50c
70 #define IMCR_L1PMPLKCMD 0xa510
71 #define IMCR_L1PMPLKSTAT 0xa514
72 #define IMCR_L1PMPPA_BASE 0xa600
73 #define IMCR_L1DMPFAR 0xac00
74 #define IMCR_L1DMPFSR 0xac04
75 #define IMCR_L1DMPFCR 0xac08
76 #define IMCR_L1DMPLK0 0xad00
77 #define IMCR_L1DMPLK1 0xad04
78 #define IMCR_L1DMPLK2 0xad08
79 #define IMCR_L1DMPLK3 0xad0c
80 #define IMCR_L1DMPLKCMD 0xad10
81 #define IMCR_L1DMPLKSTAT 0xad14
82 #define IMCR_L1DMPPA_BASE 0xae00
83 #define IMCR_L2PDWAKE0 0xc040
84 #define IMCR_L2PDWAKE1 0xc044
85 #define IMCR_L2PDSLEEP0 0xc050
86 #define IMCR_L2PDSLEEP1 0xc054
87 #define IMCR_L2PDSTAT0 0xc060
88 #define IMCR_L2PDSTAT1 0xc064
93 #define L2MODE_0K_CACHE 0x0
94 #define L2MODE_32K_CACHE 0x1
95 #define L2MODE_64K_CACHE 0x2
96 #define L2MODE_128K_CACHE 0x3
97 #define L2MODE_256K_CACHE 0x7
99 #define L2PRIO_URGENT 0x0
100 #define L2PRIO_HIGH 0x1
101 #define L2PRIO_MEDIUM 0x2
102 #define L2PRIO_LOW 0x3
104 #define CCFG_ID 0x100
105 #define CCFG_IP 0x200
107 static void __iomem *cache_base;
112 #define imcr_get(reg) soc_readl(cache_base + (reg))
113 #define imcr_set(reg, value) \
115 soc_writel((value), cache_base + (reg)); \
116 soc_readl(cache_base + (reg)); \
119 static void cache_block_operation_wait(
unsigned int wc_reg)
132 static void cache_block_operation(
unsigned int *
start,
134 unsigned int bar_reg,
143 for (; wcnt; wcnt -=
wc, start +=
wc) {
151 spin_unlock_irqrestore(&cache_lock, flags);
154 cache_block_operation_wait(wc_reg);
170 spin_unlock_irqrestore(&cache_lock, flags);
173 cache_block_operation_wait(wc_reg);
177 static void cache_block_operation_nowait(
unsigned int *start,
179 unsigned int bar_reg,
188 for (; wcnt; wcnt -=
wc, start +=
wc) {
202 spin_unlock_irqrestore(&cache_lock, flags);
206 cache_block_operation_wait(wc_reg);
247 unsigned int set = 1;
262 unsigned int set = 1;
270 unsigned int set = 1;
278 unsigned int set = 1;
330 for (; mar <= mar_e; mar += 4)
339 for (; mar <= mar_e; mar += 4)
349 cache_block_operation((
unsigned int *) start,
350 (
unsigned int *) end,
356 cache_block_operation((
unsigned int *) start,
357 (
unsigned int *) end,
363 cache_block_operation((
unsigned int *) start,
364 (
unsigned int *) end,
370 cache_block_operation((
unsigned int *) start,
371 (
unsigned int *) end,
380 cache_block_operation((
unsigned int *) start,
381 (
unsigned int *) end,
387 cache_block_operation((
unsigned int *) start,
388 (
unsigned int *) end,
394 cache_block_operation((
unsigned int *) start,
395 (
unsigned int *) end,
401 cache_block_operation_nowait((
unsigned int *) start,
402 (
unsigned int *) end,
408 cache_block_operation_nowait((
unsigned int *) start,
409 (
unsigned int *) end,
416 cache_block_operation_nowait((
unsigned int *) start,
417 (
unsigned int *) end,