import PULS_20160108
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / arch / arm / mach-mt8127 / include / mach / m4u_reg.h
1 #ifndef _MT6592_SMI_REG_H__
2 #define _MT6592_SMI_REG_H__
3
4
5 #define M4U_BASE0 0xf0205000
6 #define M4U_BASE1 0xf0205000 //0x16010000
7 #define M4U_BASEg 0xf0205000
8
9 /*
10 #define LARB0_BASE 0xF7001000//0xF4010000 actually , 0xF7xxxxxx is not a valid address in 82
11 #define LARB1_BASE 0xF6010000//same as 89 , 0xF6010000 in 82 is LARB1 reg base
12 #define LARB2_BASE 0xF4010000//0xF5001000 actually , 0xF4010000 in 82 is LARB0 reg base
13 #define LARB3_BASE 0xF5001000//No LARB3 in 82 , 0xF5001000 in 82 is LARB2 reg base
14 #define LARB4_BASE 0xF5002000//same as 89 , 0xF5002000 in 82 is LARB4 reg base , it is fake engine
15 */
16
17 #define LARB0_BASE 0xF4010000
18 #define LARB1_BASE 0xF6010000
19 #define LARB2_BASE 0xF5001000
20 //#define LARB3_BASE 0xF7002000 // for 8127
21 //#define LARB5_BASE 0xF7002000 // for 8127
22
23 #define SMI_COMMON_EXT_BASE 0xF4011000
24
25 // SMI ALWAYS ON
26 #define SMI_COMMON_AO_BASE 0xF000C000
27
28 #define M4U_L2_BASE 0xf0205600
29 #define M4U_L2_SRAM_PA 0xf2020000
30
31
32
33 //=================================================
34 //common macro definitions
35 #define F_VAL(val,msb,lsb) (((val)&((1<<(msb-lsb+1))-1))<<lsb)
36 #define F_MSK(msb, lsb) F_VAL(0xffffffff, msb, lsb)
37 #define F_BIT_SET(bit) (1<<(bit))
38 #define F_BIT_VAL(val,bit) ((!!(val))<<(bit))
39 #define F_MSK_SHIFT(regval,msb,lsb) (((regval)&F_MSK(msb,lsb))>>lsb)
40
41
42 //=====================================================
43 //M4U register definition
44 //=====================================================
45
46 #define REG_MMUg_PT_BASE (0x0 + M4U_BASEg)
47 #define F_MMUg_PT_VA_MSK 0xffff0000
48 #define REG_MMUg_PT_BASE_SEC (0x4+M4U_BASEg)
49 #define F_MMUg_PT_VA_MSK_SEC 0xffff0000
50
51
52 #define REG_MMU_PROG_EN 0x10
53 #define F_MMU_PROG_EN 1
54 #define REG_MMU_PROG_VA 0x14
55 #define F_PROG_VA_LOCK_BIT (1<<11)
56 #define F_PROG_VA_SECURE_BIT (1<<10)
57 #define F_PROG_VA_MASK 0xfffff000
58
59 #define REG_MMU_PROG_DSC 0x18
60
61 #define REG_MMU_SQ_START_0_7(x) (0x20+((x)<<3))
62 #define REG_MMU_SQ_END_0_7(x) (0x24+((x)<<3))
63 #define REG_MMU_SQ_START_8_15(x) (0x500+(((x)-8)<<3))
64 #define REG_MMU_SQ_END_8_15(x) (0x504+(((x)-8)<<3))
65
66 #define REG_MMU_SQ_START(x) (((x)<8) ? REG_MMU_SQ_START_0_7(x): REG_MMU_SQ_START_8_15(x))
67 #define F_SQ_VA_MASK 0xfffc0000
68 #define F_SQ_EN_BIT (1<<17)
69 #define F_SQ_MULTI_ENTRY_VAL(x) (((x)&0xf)<<13)
70 #define REG_MMU_SQ_END(x) (((x)<8) ? REG_MMU_SQ_END_0_7(x): REG_MMU_SQ_END_8_15(x))
71
72 #define REG_MMU_PFH_DIST0 0x80
73 #define REG_MMU_PFH_DIST1 0x84
74 #define REG_MMU_PFH_DIST2 0x88
75 #define REG_MMU_PFH_DIST3 0x8c
76 #define REG_MMU_PFH_DIST4 0x90
77 #define REG_MMU_PFH_DIST5 0x94
78 #define REG_MMU_PFH_DIST6 0x98
79
80 #define REG_MMU_PFH_DIST(port) (0x80+(((port)>>3)<<2))
81 #define F_MMU_PFH_DIST_VAL(port,val) ((val&0xf)<<(((port)&0x7)<<2))
82 #define F_MMU_PFH_DIST_MASK(port) F_MMU_PFH_DIST_VAL((port), 0xf)
83
84 #define REG_MMU_PFH_DIST16_0 0xC0
85 #define REG_MMU_PFH_DISTS16_1 0xC4
86
87 #define REG_MMU_PFH_DIR0 0xF0
88 #define REG_MMU_PFH_DIR1 0xF4
89 #define REG_MMU_PFH_DIR(port) (((port)<32) ? REG_MMU_PFH_DIR0: REG_MMU_PFH_DIR1)
90 #define F_MMU_PFH_DIR(port,val) ((!!(val))<<((port)&0x1f))
91
92 #define REG_MMU_MAIN_TAG_0_31(x) (0x100+((x)<<2))
93 #define REG_MMU_MAIN_TAG_32_63(x) (0x400+(((x)-32)<<2))
94 #define REG_MMU_MAIN_TAG(x) (((x)<32) ? REG_MMU_MAIN_TAG_0_31(x): REG_MMU_MAIN_TAG_32_63(x))
95 #define F_MAIN_TLB_LOCK_BIT (1<<11)
96 #define F_MAIN_TLB_VALID_BIT (1<<10)
97 #define F_MAIN_TLB_SQ_EN_BIT (1<<9)
98 #define F_MAIN_TLB_SQ_INDEX_MSK (0xf<<5)
99 #define F_MAIN_TLB_INV_DES_BIT (1<<4)
100 #define F_MAIN_TLB_VA_MSK F_MSK(31, 12)
101
102
103 #define REG_MMU_PFH_TAG_0_31(x) (0x180+((x)<<2))
104 #define REG_MMU_PFH_TAG_32_63(x) (0x480+(((x)-32)<<2))
105 #define REG_MMU_PFH_TAG(x) (((x)<32) ? REG_MMU_PFH_TAG_0_31(x): REG_MMU_PFH_TAG_32_63(x))
106 #define F_PFH_TAG_VA_MSK F_MSK(31, 14)
107 #define F_PFH_TAG_VALID_MSK F_MSK(13, 10)
108 #define F_PFH_TAG_VALID(regval) F_MSK_SHIFT((regval),13,10)
109 #define F_PFH_TAG_VALID_MSK_OF_MVA(mva) ((F_BIT_SET(10))<<(F_MSK_SHIFT((mva),13,10)))
110 #define F_PFH_TAG_DESC_VALID_MSK F_MSK(9, 6)
111 #define F_PFH_TAG_DESC_VALID_MSK_OF_MVA(mva) ((F_BIT_SET(6))<<(F_MSK_SHIFT(mva,13,10)))
112 #define F_PFH_TAG_DESC_VALID(regval) F_MSK_SHIFT((regval),9,6)
113 #define F_PFH_TAG_REQUEST_BY_PFH F_BIT_SET(5)
114
115
116
117 #define REG_MMU_READ_ENTRY 0x200
118 #define F_READ_ENTRY_TLB_SEL_PFH F_BIT_SET(12)
119 #define F_READ_ENTRY_TLB_SEL_MAIN F_VAL(0,12,12)
120 #define F_READ_ENTRY_TLB_SEL_MSK F_VAL(1,0,0)
121 #define F_READ_ENTRY_INDEX_VAL(idx) F_VAL(idx,10,5)
122 #define F_READ_ENTRY_PFH_IDX(idx) F_VAL(idx,4,3)
123 #define F_READ_ENTRY_READ_EN_BIT F_BIT_SET(0)
124
125 #define REG_MMU_DES_RDATA 0x204
126
127
128 #define REG_MMU_CTRL_REG 0x210
129 #define F_MMU_CTRL_PFH_DIS(dis) F_BIT_VAL(dis, 0)
130 #define F_MMU_CTRL_TLB_WALK_DIS(dis) F_BIT_VAL(dis, 1)
131 #define F_MMU_CTRL_MONITOR_EN(en) F_BIT_VAL(en, 2)
132 #define F_MMU_CTRL_MONITOR_CLR(clr) F_BIT_VAL(clr, 3)
133 #define F_MMU_CTRL_PFH_RT_RPL_MODE(mod) F_BIT_VAL(mod, 4)
134 #define F_MMU_CTRL_TF_PROT_VAL(prot) F_VAL(prot, 6, 5)
135 #define F_MMU_CTRL_TF_PROT_MSK F_MSK(6,5)
136 #define F_MMU_CTRL_INT_HANG_en(en) F_BIT_VAL(en, 7)
137 #define F_MMU_CTRL_COHERE_EN(en) F_BIT_VAL(en, 8)
138
139
140
141
142
143 #define REG_MMU_IVRP_PADDR 0x214
144 #define REG_MMU_INT_CONTROL 0x220
145 #define F_INT_CLR_BIT (1<<12)
146 #define REG_MMU_FAULT_ST 0x224
147 #define F_INT_TRANSLATION_FAULT F_BIT_SET(0)
148 #define F_INT_TLB_MULTI_HIT_FAULT F_BIT_SET(1)
149 #define F_INT_INVALID_PHYSICAL_ADDRESS_FAULT F_BIT_SET(2)
150 #define F_INT_ENTRY_REPLACEMENT_FAULT F_BIT_SET(3)
151 #define F_INT_TABLE_WALK_FAULT F_BIT_SET(4)
152 #define F_INT_TLB_MISS_FAULT F_BIT_SET(5)
153 #define F_INT_PFH_DMA_FIFO_OVERFLOW F_BIT_SET(6)
154 #define F_INT_MISS_DMA_FIFO_OVERFLOW F_BIT_SET(7)
155 #define F_INT_PFH_FIFO_ERR F_BIT_SET(8)
156 #define F_INT_MISS_FIFO_ERR F_BIT_SET(9)
157
158 #define REG_MMU_FAULT_VA 0x228
159 #define REG_MMU_INVLD_PA 0x22C
160 #define REG_MMU_ACC_CNT 0x230
161 #define REG_MMU_MAIN_MSCNT 0x234
162 #define REG_MMU_PF_MSCNT 0x238
163 #define REG_MMU_PF_CNT 0x23C
164
165 #define REG_MMU_WRAP_SA(x) (0x300+((x)<<3))
166 #define REG_MMU_WRAP_EA(x) (0x304+((x)<<3))
167
168 #define REG_MMU_WRAP_EN0 0x340
169 #define REG_MMU_WRAP_EN1 0x344
170 #define REG_MMU_WRAP_EN2 0x348
171 #define REG_MMU_WRAP_EN3 0x34c
172 #define REG_MMU_WRAP_EN4 0x350
173 #define REG_MMU_WRAP_EN5 0x354
174 #define REG_MMU_WRAP_EN6 0x358
175 #define REG_MMU_WRAP_EN(port) (0x340+(((port)>>3)<<2))
176 #define F_MMU_WRAP_SEL_VAL(port, val) (((val)&0xf)<<(((port)&0x7)<<2))
177
178
179
180 #define REG_MMU_PFQ_BROADCAST_EN 0x364
181 #define REG_MMU_NON_BLOCKING_DIS 0x380
182 #define F_MMU_NON_BLOCK_DISABLE_BIT 1
183 #define REG_MMU_RS_PERF_CNT 0x384
184
185 #define REG_MMU_INT_ID 0x388
186 #define F_INT_ID_TF_PORT_ID(regval) F_MSK_SHIFT(regval,12, 8)
187 #define F_INT_ID_TF_LARB_ID(regval) F_MSK_SHIFT(regval,15, 13)
188 #define F_INT_ID_MH_PORT_ID(regval) F_MSK_SHIFT(regval,27, 24)
189 #define F_INT_ID_MH_LARB_ID(regval) F_MSK_SHIFT(regval,30, 28)
190
191
192
193 #define MMU_TOTAL_RS_NR 8
194 #define REG_MMU_RSx_VA(x) (0x550+((x)<<2))
195 #define F_MMU_RSx_VA_GET(regval) ((regval)&&F_MSK(31, 12))
196 #define F_MMU_RSx_VA_VALID(regval) F_MSK_SHIFT(regval, 8, 8)
197 #define F_MMU_RSx_VA_PID(regval) F_MSK_SHIFT(regval, 6, 0)
198
199 #define REG_MMU_RSx_PA(x) (0x570+((x)<<2))
200 #define F_MMU_RSx_PA_GET(regval) ((regval)&&F_MSK(31, 12))
201 #define F_MMU_RSx_PA_VALID(regval) F_MSK_SHIFT(regval, 1, 0)
202
203 #define REG_MMU_RSx_ST(x) (0x5A0+((x)<<2))
204 #define F_MMU_RSx_ST_LID(regval) F_MSK_SHIFT(regval, 21, 20)
205 #define F_MMU_RSx_ST_WRT(regval) F_MSK_SHIFT(regval, 12, 12)
206 #define F_MMU_RSx_ST_OTHER(regval) F_MSK_SHIFT(regval, 8, 0)
207
208
209 //================================================================
210 // SMI larb
211 //================================================================
212
213 #define SMI_LARB_STAT (0x0 )
214 #define SMI_LARB_CON (0x10 )
215 #define F_SMI_LARB_CON_MAU_IRQ_EN(en) F_BIT_VAL(en, 14)
216 #define SMI_LARB_CON_SET (0x14 )
217 #define SMI_LARB_CON_CLR (0x18 )
218 #define SMI_ARB_CON (0x20 )
219 #define SMI_ARB_CON_SET (0x24 )
220 #define SMI_ARB_CON_CLR (0x28 )
221 #define SMI_BW_EXT_CON0 (0x30 )
222 #define SMI_STARV_CON0 (0x40 )
223 #define SMI_STARV_CON1 (0x44 )
224 #define SMI_STARV_CON2 (0x48 )
225 #define SMI_INT_PATH_SEL (0x54 )
226 #define SMI_LARB_BWFILTER_EN (0x60 )
227 #define SMI_LARB_OSTD_CTRL_EN (0x64)
228 #define SMI_BW_VC0 (0x80 )
229 #define SMI_BW_VC1 (0x84 )
230 #define SMI_BW_VC2 (0x88 )
231 #define SMI_LARB_CMD_THRT_LMT (0x8C )
232
233 #define SMI_SHARE_EN (0xF0)
234 #define F_SMI_SHARE_EN(port) F_BIT_SET(m4u_port_2_larb_port(port))
235
236 #define SMI_LARB_EBW_PORT (0x100)
237 #define SMI_LARB_BWL_PORT (0x180)
238 #define SMI_LARB_OSTD_PORT (0x200)
239 #define SMI_SUB_PINFO (0x280)
240
241 //====== mau registers ========
242
243 #define SMI_MAU_ENTR_START(x) (0x300+(x)*0x10)
244 #define F_MAU_START_WR(en) F_BIT_VAL(en, 31)
245 #define F_MAU_START_RD(en) F_BIT_VAL(en, 30)
246 #define F_MAU_START_ADD_MSK F_MSK(29, 0)
247 #define F_MAU_START_ADD(addr) F_MSK_SHIFT(addr, 31, 2)
248 #define F_MAU_START_IS_WR(regval) F_MSK_SHIFT(regval, 31, 31)
249 #define F_MAU_START_IS_RD(regval) F_MSK_SHIFT(regval, 30, 30)
250 #define F_MAU_START_ADDR_VAL(regval) (F_MSK_SHIFT(regval, 29, 0)<<2)
251 #define SMI_MAU_ENTR_END(x) (0x304+(x)*0x10)
252 #define F_MAU_END_VIR(en) F_BIT_VAL(en, 30)
253 #define F_MAU_END_ADD(addr) F_MSK_SHIFT(addr, 31, 2)
254 #define F_MAU_END_IS_VIR(regval) F_MSK_SHIFT(regval, 30, 30)
255 #define F_MAU_END_ADDR_VAL(regval) (F_MSK_SHIFT(regval, 29, 0)<<2)
256 #define SMI_MAU_ENTR_GID(x) (0x308+(x)*0x10)
257
258 #define SMI_MAU_ENTR_STAT(x) (0x500+(x)*0x4)
259 #define F_MAU_STAT_ASSERT(regval) F_MSK_SHIFT(regval, 5, 5)
260 #define F_MAU_STAT_ID(regval) F_MSK_SHIFT(regval, 4, 0)
261
262 #define SMI_LARB_MON_ENA (0x400)
263 #define SMI_LARB_MON_CLR (0x404)
264 #define SMI_LARB_MON_PORT (0x408)
265 #define SMI_LARB_MON_TYPE (0x40c)
266 #define SMI_LARB_MON_CON (0x410)
267 #define SMI_LARB_MON_ACT_CNT (0x420)
268 #define SMI_LARB_MON_REQ_CNT (0x424)
269 #define SMI_LARB_MON_IDL_CNT (0x428)
270 #define SMI_LARB_MON_BEA_CNT (0x42c)
271 #define SMI_LARB_MON_BYT_CNT (0x430)
272 #define SMI_LARB_MON_CP_CNT (0x434)
273 #define SMI_LARB_MON_DP_CNT (0x438)
274 #define SMI_LARB_MON_CDP_MAX (0x43c)
275 #define SMI_LARB_MON_COS_MAX (0x440)
276 #define SMI_LARB_MON_BUS_REQ0 (0x450)
277 #define SMI_LARB_MON_BUS_REQ1 (0x454)
278 #define SMI_LARB_MON_WDT_CNT (0x460)
279 #define SMI_LARB_MON_RDT_CNT (0x464)
280 #define SMI_LARB_MON_OST_CNT (0x468)
281 #define SMI_LARB_MON_STALL_CNT (0x46C)
282
283 #define SMI_IRQ_STATUS (0x520)
284 #define SMI_LARB_FIFO_STAT0 (0x600)
285 #define SMI_LARB_FIFO_STAT1 (0x604)
286 #define SMI_LARB_BUS_STAT0 (0x610)
287 #define SMI_LARB_BUS_STAT1 (0x614)
288 #define SMI_LARB_DBG_MODE0 (0x700)
289 #define SMI_LARB_DBG_MODE1 (0x704)
290 #define SMI_LARB_TST_MODE0 (0x780)
291
292
293 /* ===============================================================
294 * SMI COMMON
295 * =============================================================== */
296 #define REG_SMI_MON_AXI_ENA (0x1a0+SMI_COMMON_EXT_BASE)
297 #define REG_SMI_MON_AXI_CLR (0x1a4+SMI_COMMON_EXT_BASE)
298 #define REG_SMI_MON_AXI_TYPE (0x1ac+SMI_COMMON_EXT_BASE)
299 #define REG_SMI_MON_AXI_CON (0x1b0+SMI_COMMON_EXT_BASE)
300 #define REG_SMI_MON_AXI_ACT_CNT (0x1c0+SMI_COMMON_EXT_BASE)
301 #define REG_SMI_MON_AXI_REQ_CNT (0x1c4+SMI_COMMON_EXT_BASE)
302 #define REG_SMI_MON_AXI_IDL_CNT (0x1c8+SMI_COMMON_EXT_BASE)
303 #define REG_SMI_MON_AXI_BEA_CNT (0x1cc+SMI_COMMON_EXT_BASE)
304 #define REG_SMI_MON_AXI_BYT_CNT (0x1d0+SMI_COMMON_EXT_BASE)
305 #define REG_SMI_MON_AXI_CP_CNT (0x1d4+SMI_COMMON_EXT_BASE)
306 #define REG_SMI_MON_AXI_DP_CNT (0x1d8+SMI_COMMON_EXT_BASE)
307 #define REG_SMI_MON_AXI_CP_MAX (0x1dc+SMI_COMMON_EXT_BASE)
308 #define REG_SMI_MON_AXI_COS_MAX (0x1e0+SMI_COMMON_EXT_BASE)
309 #define REG_SMI_L1LEN (0x200+SMI_COMMON_EXT_BASE)
310 #define REG_SMI_L1ARB0 (0x204+SMI_COMMON_EXT_BASE)
311 #define REG_SMI_L1ARB1 (0x208+SMI_COMMON_EXT_BASE)
312 #define REG_SMI_L1ARB2 (0x20C+SMI_COMMON_EXT_BASE)
313 #define REG_SMI_L1ARB3 (0x210+SMI_COMMON_EXT_BASE)
314 #define REG_SMI_L1ARB4 (0x214+SMI_COMMON_EXT_BASE)//exist in 8127,but not use mtk40525
315 #define REG_SMI_L1ARB5 (0x218+SMI_COMMON_EXT_BASE)
316
317 #define REG_SMI_WRR_REG0 (0x228+SMI_COMMON_EXT_BASE)
318 #define REG_SMI_READ_FIFO_TH (0x230+SMI_COMMON_EXT_BASE)
319 #define REG_SMI_M4U_TH (0x234+SMI_COMMON_EXT_BASE)
320
321 #define REG_SMI_DCM (0x300+SMI_COMMON_EXT_BASE)
322 #define REG_SMI_DEBUG0 (0x400+SMI_COMMON_EXT_BASE)
323 #define REG_SMI_DEBUG1 (0x404+SMI_COMMON_EXT_BASE)
324 #define REG_SMI_DUMMY (0x418+SMI_COMMON_EXT_BASE)
325
326 #define REG_SMI_CON (0x0010+SMI_COMMON_AO_BASE)
327 #define REG_SMI_CON_SET (0x0014+SMI_COMMON_AO_BASE)
328 #define REG_SMI_CON_CLR (0x0018+SMI_COMMON_AO_BASE)
329 #define REG_SMI_SEN (0x0500+SMI_COMMON_AO_BASE)
330 #define REG_D_VIO_CON(x) (0x0550+SMI_COMMON_AO_BASE+((x)<<2))
331 #define REG_D_VIO_STA(x) (0x0560+SMI_COMMON_AO_BASE+((x)<<2))
332
333
334 #define REG_SMI_SECUR_CON(x) (0x05C0+SMI_COMMON_AO_BASE+((x)<<2))
335 #define REG_SMI_SECUR_CON_OF_PORT(port) REG_SMI_SECUR_CON(((m4u_port_2_smi_port(port))>>3))
336 #define F_SMI_SECUR_CON_SECURE(port) ((1)<<(((m4u_port_2_smi_port(port))&0x7)<<2))
337 #define F_SMI_SECUR_CON_DOMAIN(port, val) (((val)&0x3)<<((((m4u_port_2_smi_port(port))&0x7)<<2)+1))
338 #define F_SMI_SECUR_CON_VIRTUAL(port) ((1)<<((((m4u_port_2_smi_port(port))&0x7)<<2)+3))
339 #define F_SMI_SECUR_CON_MASK(port) ((0xf)<<((((m4u_port_2_smi_port(port))&0x7)<<2)))
340
341 #define REG_SMI_SECUR_CON_G3D (0x05E8+SMI_COMMON_AO_BASE)
342 #define REG_SMI_ISPSYS_SEN (0x0600+SMI_COMMON_AO_BASE)
343 #define REG_SMI_ISPSYS_SRAM_RANG(x) (0x0620+SMI_COMMON_AO_BASE+((x)<<2))
344 #define F_SYSRAM_RANG_SEC(en) F_BIT_VAL(en, 30)
345 #define F_SYSRAM_RANG_ADDR_SET(addr) F_MSK_SHIFT(addr, 16, 4)
346 #define F_SYSRAM_RANG_ADDR_GET(regval) F_MSK_SHIFT(regval, 12, 0)
347 #define REG_SMI_ISPSYS_SRNG_ACTL(x) (0x0630+SMI_COMMON_AO_BASE+((x)<<2))
348 #define REG_ISPSYS_D_VIO_CON(x) (0x0650+SMI_COMMON_AO_BASE+((x)<<2))
349 #define REG_ISPSYS_D_VIO_STA(x) (0x0660+SMI_COMMON_AO_BASE+((x)<<2))
350 #define REG_ISPSYS_VIO_DBG0 (0x0670+SMI_COMMON_AO_BASE)
351 #define F_SYSRAM_VIO_DBG0_CLR F_BIT_SET(31)
352 #define F_SYSRAM_VIO_DBG0_RD(regval) F_MSK_SHIFT(regval, 29, 29)
353 #define F_SYSRAM_VIO_DBG0_WR(regval) F_MSK_SHIFT(regval, 28, 28)
354 #define F_SYSRAM_VIO_DBG0_APB(regval) F_MSK_SHIFT(regval, 24, 24)
355 #define F_SYSRAM_VIO_DBG0_DOMAIN(regval) F_MSK_SHIFT(regval, 13, 12)
356 #define F_SYSRAM_VIO_DBG0_PORT(regval) F_MSK_SHIFT(regval, 6, 0)
357
358
359 #define REG_ISPSYS_VIO_DBG1 (0x0674+SMI_COMMON_AO_BASE)
360
361 /* ============================= ==================================
362 * M4U global
363 * ============================= ================================== */
364
365 #define REG_MMUg_INVLD (0x5c0 + M4U_BASEg)
366 #define F_MMUg_INV_ALL 0x2
367 #define F_MMUg_INV_RANGE 0x1
368
369 #define REG_MMUg_INVLD_SA (0x5c4 + M4U_BASEg)
370 #define REG_MMUg_INVLD_EA (0x5c8 + M4U_BASEg)
371
372
373 #define REG_MMUg_INVLD_SEC (0x5cc+M4U_BASEg)
374 #define F_MMUg_INV_SEC_ALL 0x2
375 #define F_MMUg_INV_SEC_RANGE 0x1
376
377 #define REG_MMUg_INVLD_SA_SEC (0x5d0+M4U_BASEg)
378 #define REG_MMUg_INVLD_EA_SEC (0x5d4+M4U_BASEg)
379
380 #define REG_MMUg_CTRL (0x5d8+M4U_BASEg)
381 #define F_MMUg_CTRL_INV_EN0 (1<<0)
382 #define F_MMUg_CTRL_INV_EN1 (1<<0) // no use in 6582
383 #define F_MMUg_CTRL_INV_EN2 (1<<1) //in 6582 L2 invalid is in bit:1
384 #define F_MMUg_CTRL_PRE_LOCK(en) F_BIT_VAL(en, 3)
385 #define F_MMUg_CTRL_PRE_EN (1<<4)
386
387
388 #define REG_MMUg_CTRL_SEC (0x5dc + M4U_BASEg)
389 #define F_MMUg_CTRL_SEC_INV_EN0 (1<<0)
390 #define F_MMUg_CTRL_SEC_INV_EN1 (1<<1)
391 #define F_MMUg_CTRL_SEC_INV_EN2 (1<<2)
392 #define F_MMUg_CTRL_SEC_PRE_LOCK (1<<3)
393 #define F_MMUg_CTRL_SEC_PRE_EN (1<<4)
394 #define F_MMUg_CTRL_SEC_DBG (1<<5)
395
396 #define REG_MMUg_SEC_ABORT_INFO (0x5e0+M4U_BASEg)
397
398
399 #define REG_MMUg_DCM (0x5f0 + M4U_BASEg)
400 #define F_MMUg_DCM_ON(on) F_BIT_VAL(on, 0)
401
402
403
404
405
406 //=================================================================
407 // smi mmu L2 cache registers
408 //=================================================================
409
410
411 #define REG_L2_GDC_STATE (0x0 + M4U_L2_BASE)
412 #define F_L2_GDC_ST_EVENT_GET(regval) F_MSK_SHIFT(regval, 7, 6)
413 #define F_L2_GDC_ST_EVENT_MSK F_MSK(7,6)
414 #define F_L2_GDC_ST_EVENT_VAL(val) F_VAL(val, 7, 6)
415 #define F_L2_GDC_ST_OP_ST_GET(regval) F_MSK_SHIFT(regval, 5, 1)
416 #define F_L2_GDC_ST_BUSY_GET(regval) F_MSK_SHIFT(regval, 0, 0)
417
418 #define REG_L2_GDC_OP (0x4 + M4U_L2_BASE)
419 #define F_L2_GDC_BYPASS(en) F_BIT_VAL(en, 5)
420 #define F_GET_L2_GDC_PERF_MASK(regval) F_MSK_SHIFT(regval, 4, 2)
421 #define F_L2_GDC_PERF_MASK(msk) F_VAL(msk, 4, 2)
422 #define GDC_PERF_MASK_HIT_MISS 0
423 #define GDC_PERF_MASK_RI_RO 1
424 #define GDC_PERF_MASK_READ_OUTSTAND_FIFO 2
425 #define F_L2_GDC_PERF_EN(en) F_BIT_VAL(en, 1)
426 #define F_L2_GDC_PAUSE_OP(op) F_VAL(op, 0, 0)
427 #define GDC_NO_PAUSE 0
428 #define GDC_READ_PAUSE 1
429
430
431 #define REG_L2_GDC_PERF0 (0x8 + M4U_L2_BASE)
432 #define REG_L2_GPE_STATUS (0xc + M4U_L2_BASE)
433 #define F_L2_GPE_ST_RANGE_INV_DONE 2
434 #define F_L2_GPE_ST_PREFETCH_DONE 1
435
436 #define REG_L2_GPE_STATUS_SEC (0x10 + M4U_L2_BASE)
437 #define F_L2_GPE_ST_RANGE_INV_DONE_SEC 2
438 #define F_L2_GPE_ST_PREFETCH_DONE_SEC 1
439
440
441 //================================================================
442 // L2 parameters
443 #define MMU_L2_CACHE_SIZE (24*1024)
444 #define MMU_L2_SRAM_SIZE (16*1024)
445 #define MMU_L2_SET_NR (128)
446 #define MMU_L2_WAY_NR (4)
447 #define MMU_L2_CACHE_LINE (48)
448
449 /* the pagetable PT transfered by m4u to L2 is:
450 [31] secure bit
451 [30:13] TAG
452 [12:6] SetIndex
453 [5:4] CacheLineIndex
454 [3:0] BusLineIndex
455 */
456 #define F_L2_PA_SEC_BIT F_BIT_SET(31)
457 #define F_L2_PA_TAG_VAL(tag) F_VAL(tag,30,13)
458 #define F_L2_PA_TAG_MSK F_MSK(30, 13)
459 #define F_L2_PA_SET_INDEX(idx) F_VAL(idx,12,6)
460 #define F_L2_PA_SET_MSK F_MSK(12,6)
461 #define F_L2_PA_CACHE_LINE(l) F_VAL(l, 5, 4)
462
463 //=================================================================
464 //other un-register definitions
465 #define F_DESC_VALID F_VAL(0x2,1,0)
466 #define F_DESC_SHARE(en) F_BIT_VAL(en,2)
467 #define F_DESC_NONSEC(non_sec) F_BIT_VAL(non_sec,3)
468 #define F_DESC_PA_MSK F_MSK(31,12)
469
470
471 #if 1
472 static inline unsigned int M4U_ReadReg32(unsigned int M4uBase, unsigned int Offset)
473 {
474 unsigned int val;
475 val = ioread32((void*)(M4uBase+Offset));
476
477 //printk("read base=0x%x, reg=0x%x, val=0x%x\n",M4uBase,Offset,val );
478 return val;
479 }
480 static inline void M4U_WriteReg32(unsigned int M4uBase, unsigned int Offset, unsigned int Val)
481 {
482 //unsigned int read;
483 iowrite32(Val, (void*)(M4uBase+Offset));
484 mb();
485 /*
486 read = M4U_ReadReg32(M4uBase, Offset);
487 if(read != Val)
488 {
489 printk("error to write base=0x%x, reg=0x%x, val=0x%x, read=0x%x\n",M4uBase,Offset, Val, read );
490 }
491 else
492 {
493 printk("write base=0x%x, reg=0x%x, val=0x%x, read=0x%x\n",M4uBase,Offset, Val, read );
494 }
495 */
496
497 }
498
499 static inline unsigned int COM_ReadReg32(unsigned int addr)
500 {
501 return ioread32((void*)addr);
502 }
503 static inline void COM_WriteReg32(unsigned int addr, unsigned int Val)
504 {
505 iowrite32(Val, (void*)addr);
506 mb();
507 /*
508 if(COM_ReadReg32(addr) != Val)
509 {
510 printk("error to write add=0x%x, val=0x%x, read=0x%x\n",addr, Val, COM_ReadReg32(addr) );
511 }
512 else
513 {
514 printk("write success add=0x%x, val=0x%x, read=0x%x\n",addr, Val, COM_ReadReg32(addr) );
515 }
516 */
517 }
518
519 static inline unsigned int m4uHw_set_field(unsigned int M4UBase, unsigned int Reg,
520 unsigned int bit_width, unsigned int shift,
521 unsigned int value)
522 {
523 unsigned int mask = ((1<<bit_width)-1)<<shift;
524 unsigned int old;
525 value = (value<<shift)&mask;
526 old = M4U_ReadReg32(M4UBase, Reg);
527 M4U_WriteReg32(M4UBase, Reg, (old&(~mask))|value);
528 return (old&mask)>>shift;
529 }
530
531 #if 0
532 static inline unsigned int m4uHw_get_field(unsigned int M4UBase, unsigned int Reg,
533 unsigned int bit_width, unsigned int shift)
534 {
535 unsigned int mask = ((1<<bit_width)-1);
536 unsigned int reg = M4U_ReadReg32(M4UBase, Reg);
537 return ( (reg>>shift)&mask);
538 }
539 #endif
540
541 static inline void m4uHw_set_field_by_mask(unsigned int M4UBase, unsigned int reg,
542 unsigned int mask, unsigned int val)
543 {
544 unsigned int regval;
545 regval = M4U_ReadReg32(M4UBase, reg);
546 regval = (regval & (~mask))|val;
547 M4U_WriteReg32(M4UBase, reg, regval);
548 }
549 static inline unsigned int m4uHw_get_field_by_mask(unsigned int M4UBase, unsigned int reg,
550 unsigned int mask)
551 {
552 return M4U_ReadReg32(M4UBase, reg)&mask;
553 }
554
555 #endif
556
557
558
559 #endif
560