arcregs.h 7.4 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11
/*
 * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */

#ifndef _ASM_ARC_ARCREGS_H
#define _ASM_ARC_ARCREGS_H

V
Vineet Gupta 已提交
12
/* Build Configuration Registers */
13 14
#define ARC_REG_AUX_DCCM	0x18	/* DCCM Base Addr ARCv2 */
#define ARC_REG_DCCM_BASE_BUILD	0x61	/* DCCM Base Addr ARCompact */
15
#define ARC_REG_CRC_BCR		0x62
V
Vineet Gupta 已提交
16
#define ARC_REG_VECBASE_BCR	0x68
17
#define ARC_REG_PERIBASE_BCR	0x69
18 19
#define ARC_REG_FP_BCR		0x6B	/* ARCompact: Single-Precision FPU */
#define ARC_REG_DPFP_BCR	0x6C	/* ARCompact: Dbl Precision FPU */
20
#define ARC_REG_FP_V2_BCR	0xc8	/* ARCv2 FPU */
21
#define ARC_REG_SLC_BCR		0xce
22
#define ARC_REG_DCCM_BUILD	0x74	/* DCCM size (common) */
23
#define ARC_REG_AP_BCR		0x76
24
#define ARC_REG_ICCM_BUILD	0x78	/* ICCM size (common) */
25 26 27 28 29 30 31 32
#define ARC_REG_XY_MEM_BCR	0x79
#define ARC_REG_MAC_BCR		0x7a
#define ARC_REG_MUL_BCR		0x7b
#define ARC_REG_SWAP_BCR	0x7c
#define ARC_REG_NORM_BCR	0x7d
#define ARC_REG_MIXMAX_BCR	0x7e
#define ARC_REG_BARREL_BCR	0x7f
#define ARC_REG_D_UNCACH_BCR	0x6A
33 34
#define ARC_REG_BPU_BCR		0xc0
#define ARC_REG_ISA_CFG_BCR	0xc1
V
Vineet Gupta 已提交
35
#define ARC_REG_RTT_BCR		0xF2
36
#define ARC_REG_IRQ_BCR		0xF3
37
#define ARC_REG_SMART_BCR	0xFF
38
#define ARC_REG_CLUSTER_BCR	0xcf
39
#define ARC_REG_AUX_ICCM	0x208	/* ICCM Base Addr (ARCv2) */
V
Vineet Gupta 已提交
40

41 42 43 44
/* status32 Bits Positions */
#define STATUS_AE_BIT		5	/* Exception active */
#define STATUS_DE_BIT		6	/* PC is in delay slot */
#define STATUS_U_BIT		7	/* User/Kernel mode */
45
#define STATUS_Z_BIT            11
46 47 48 49 50 51
#define STATUS_L_BIT		12	/* Loop inhibit */

/* These masks correspond to the status word(STATUS_32) bits */
#define STATUS_AE_MASK		(1<<STATUS_AE_BIT)
#define STATUS_DE_MASK		(1<<STATUS_DE_BIT)
#define STATUS_U_MASK		(1<<STATUS_U_BIT)
52
#define STATUS_Z_MASK		(1<<STATUS_Z_BIT)
53 54
#define STATUS_L_MASK		(1<<STATUS_L_BIT)

V
Vineet Gupta 已提交
55 56 57 58 59 60
/*
 * ECR: Exception Cause Reg bits-n-pieces
 * [23:16] = Exception Vector
 * [15: 8] = Exception Cause Code
 * [ 7: 0] = Exception Parameters (for certain types only)
 */
61
#ifdef CONFIG_ISA_ARCOMPACT
62
#define ECR_V_MEM_ERR			0x01
V
Vineet Gupta 已提交
63 64 65 66 67
#define ECR_V_INSN_ERR			0x02
#define ECR_V_MACH_CHK			0x20
#define ECR_V_ITLB_MISS			0x21
#define ECR_V_DTLB_MISS			0x22
#define ECR_V_PROTV			0x23
68
#define ECR_V_TRAP			0x25
69 70 71 72 73 74 75 76 77
#else
#define ECR_V_MEM_ERR			0x01
#define ECR_V_INSN_ERR			0x02
#define ECR_V_MACH_CHK			0x03
#define ECR_V_ITLB_MISS			0x04
#define ECR_V_DTLB_MISS			0x05
#define ECR_V_PROTV			0x06
#define ECR_V_TRAP			0x09
#endif
V
Vineet Gupta 已提交
78

79 80
/* DTLB Miss and Protection Violation Cause Codes */

V
Vineet Gupta 已提交
81 82 83 84 85 86
#define ECR_C_PROTV_INST_FETCH		0x00
#define ECR_C_PROTV_LOAD		0x01
#define ECR_C_PROTV_STORE		0x02
#define ECR_C_PROTV_XCHG		0x03
#define ECR_C_PROTV_MISALIG_DATA	0x04

87 88 89 90 91
#define ECR_C_BIT_PROTV_MISALIG_DATA	10

/* Machine Check Cause Code Values */
#define ECR_C_MCHK_DUP_TLB		0x01

V
Vineet Gupta 已提交
92 93 94 95
/* DTLB Miss Exception Cause Code Values */
#define ECR_C_BIT_DTLB_LD_MISS		8
#define ECR_C_BIT_DTLB_ST_MISS		9

96 97 98
/* Auxiliary registers */
#define AUX_IDENTITY		4
#define AUX_INTR_VEC_BASE	0x25
99
#define AUX_VOL			0x5e
V
Vineet Gupta 已提交
100

101 102 103 104 105 106 107 108 109 110 111
/*
 * Floating Pt Registers
 * Status regs are read-only (build-time) so need not be saved/restored
 */
#define ARC_AUX_FP_STAT         0x300
#define ARC_AUX_DPFP_1L         0x301
#define ARC_AUX_DPFP_1H         0x302
#define ARC_AUX_DPFP_2L         0x303
#define ARC_AUX_DPFP_2H         0x304
#define ARC_AUX_DPFP_STAT       0x305

112 113
#ifndef __ASSEMBLY__

114
#include <soc/arc/aux.h>
V
Vineet Gupta 已提交
115

116 117 118 119 120
/* Helpers */
#define TO_KB(bytes)		((bytes) >> 10)
#define TO_MB(bytes)		(TO_KB(bytes) >> 10)
#define PAGES_TO_KB(n_pages)	((n_pages) << (PAGE_SHIFT - 10))
#define PAGES_TO_MB(n_pages)	(PAGES_TO_KB(n_pages) >> 10)
V
Vineet Gupta 已提交
121

122

V
Vineet Gupta 已提交
123 124 125 126
/*
 ***************************************************************
 * Build Configuration Registers, with encoded hardware config
 */
127 128 129 130 131 132 133
struct bcr_identity {
#ifdef CONFIG_CPU_BIG_ENDIAN
	unsigned int chip_id:16, cpu_id:8, family:8;
#else
	unsigned int family:8, cpu_id:8, chip_id:16;
#endif
};
V
Vineet Gupta 已提交
134

135
struct bcr_isa {
136
#ifdef CONFIG_CPU_BIG_ENDIAN
137 138
	unsigned int div_rem:4, pad2:4, ldd:1, unalign:1, atomic:1, be:1,
		     pad1:11, atomic1:1, ver:8;
139
#else
140 141
	unsigned int ver:8, atomic1:1, pad1:11, be:1, atomic:1, unalign:1,
		     ldd:1, pad2:4, div_rem:4;
142 143 144
#endif
};

145
struct bcr_mpy {
146
#ifdef CONFIG_CPU_BIG_ENDIAN
147
	unsigned int pad:8, x1616:8, dsp:4, cycles:2, type:2, ver:8;
148
#else
149
	unsigned int ver:8, type:2, cycles:2, dsp:4, x1616:8, pad:8;
150 151 152 153 154 155 156 157 158 159
#endif
};

struct bcr_extn_xymem {
#ifdef CONFIG_CPU_BIG_ENDIAN
	unsigned int ram_org:2, num_banks:4, bank_sz:4, ver:8;
#else
	unsigned int ver:8, bank_sz:4, num_banks:4, ram_org:2;
#endif
};
160

161
struct bcr_iccm_arcompact {
162 163 164 165 166 167 168
#ifdef CONFIG_CPU_BIG_ENDIAN
	unsigned int base:16, pad:5, sz:3, ver:8;
#else
	unsigned int ver:8, sz:3, pad:5, base:16;
#endif
};

169
struct bcr_iccm_arcv2 {
170
#ifdef CONFIG_CPU_BIG_ENDIAN
171
	unsigned int pad:8, sz11:4, sz01:4, sz10:4, sz00:4, ver:8;
172
#else
173
	unsigned int ver:8, sz00:4, sz10:4, sz01:4, sz11:4, pad:8;
174 175 176
#endif
};

177
struct bcr_dccm_arcompact {
178 179 180 181 182 183 184
#ifdef CONFIG_CPU_BIG_ENDIAN
	unsigned int res:21, sz:3, ver:8;
#else
	unsigned int ver:8, sz:3, res:21;
#endif
};

185 186 187 188 189 190 191 192
struct bcr_dccm_arcv2 {
#ifdef CONFIG_CPU_BIG_ENDIAN
	unsigned int pad2:12, cyc:3, pad1:1, sz1:4, sz0:4, ver:8;
#else
	unsigned int ver:8, sz0:4, sz1:4, pad1:1, cyc:3, pad2:12;
#endif
};

193 194
/* ARCompact: Both SP and DP FPU BCRs have same format */
struct bcr_fp_arcompact {
195 196 197 198 199 200 201
#ifdef CONFIG_CPU_BIG_ENDIAN
	unsigned int fast:1, ver:8;
#else
	unsigned int ver:8, fast:1;
#endif
};

202 203 204 205 206 207 208 209
struct bcr_fp_arcv2 {
#ifdef CONFIG_CPU_BIG_ENDIAN
	unsigned int pad2:15, dp:1, pad1:7, sp:1, ver:8;
#else
	unsigned int ver:8, sp:1, pad1:7, dp:1, pad2:15;
#endif
};

210
#include <soc/arc/timers.h>
211 212 213 214 215 216 217 218 219

struct bcr_bpu_arcompact {
#ifdef CONFIG_CPU_BIG_ENDIAN
	unsigned int pad2:19, fam:1, pad:2, ent:2, ver:8;
#else
	unsigned int ver:8, ent:2, pad:2, fam:1, pad2:19;
#endif
};

220 221 222 223 224 225 226 227
struct bcr_bpu_arcv2 {
#ifdef CONFIG_CPU_BIG_ENDIAN
	unsigned int pad:6, fbe:2, tqe:2, ts:4, ft:1, rse:2, pte:3, bce:3, ver:8;
#else
	unsigned int ver:8, bce:3, pte:3, rse:2, ft:1, ts:4, tqe:2, fbe:2, pad:6;
#endif
};

228 229
struct bcr_generic {
#ifdef CONFIG_CPU_BIG_ENDIAN
230
	unsigned int info:24, ver:8;
231
#else
232
	unsigned int ver:8, info:24;
233 234 235
#endif
};

V
Vineet Gupta 已提交
236 237 238 239 240
/*
 *******************************************************************
 * Generic structures to hold build configuration used at runtime
 */

V
Vineet Gupta 已提交
241
struct cpuinfo_arc_mmu {
242
	unsigned int ver:4, pg_sz_k:8, s_pg_sz_m:8, pad:10, sasid:1, pae:1;
243
	unsigned int sets:12, ways:4, u_dtlb:8, u_itlb:8;
V
Vineet Gupta 已提交
244 245
};

V
Vineet Gupta 已提交
246
struct cpuinfo_arc_cache {
247
	unsigned int sz_k:14, line_len:8, assoc:4, ver:4, alias:1, vipt:1;
V
Vineet Gupta 已提交
248 249
};

250 251 252 253
struct cpuinfo_arc_bpu {
	unsigned int ver, full, num_cache, num_pred;
};

254 255 256 257
struct cpuinfo_arc_ccm {
	unsigned int base_addr, sz;
};

V
Vineet Gupta 已提交
258
struct cpuinfo_arc {
259
	struct cpuinfo_arc_cache icache, dcache, slc;
V
Vineet Gupta 已提交
260
	struct cpuinfo_arc_mmu mmu;
261
	struct cpuinfo_arc_bpu bpu;
262
	struct bcr_identity core;
263
	struct bcr_isa isa;
264
	const char *details, *name;
265 266
	unsigned int vec_base;
	struct cpuinfo_arc_ccm iccm, dccm;
267
	struct {
268
		unsigned int swap:1, norm:1, minmax:1, barrel:1, crc:1, swape:1, pad1:2,
269 270
			     fpu_sp:1, fpu_dp:1, pad2:6,
			     debug:1, ap:1, smart:1, rtt:1, pad3:4,
271
			     timer0:1, timer1:1, rtc:1, gfrc:1, pad4:4;
272 273
	} extn;
	struct bcr_mpy extn_mpy;
274
	struct bcr_extn_xymem extn_xymem;
V
Vineet Gupta 已提交
275 276 277 278
};

extern struct cpuinfo_arc cpuinfo_arc700[];

279 280 281 282 283 284 285 286 287 288
static inline int is_isa_arcv2(void)
{
	return IS_ENABLED(CONFIG_ISA_ARCV2);
}

static inline int is_isa_arcompact(void)
{
	return IS_ENABLED(CONFIG_ISA_ARCOMPACT);
}

289 290 291
#endif /* __ASEMBLY__ */

#endif /* _ASM_ARC_ARCREGS_H */