xref: /OK3568_Linux_fs/external/rkwifibt/drivers/bcmdhd/include/sbhndarm.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Broadcom SiliconBackplane ARM definitions
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * Copyright (C) 2020, Broadcom.
5*4882a593Smuzhiyun  *
6*4882a593Smuzhiyun  *      Unless you and Broadcom execute a separate written software license
7*4882a593Smuzhiyun  * agreement governing use of this software, this software is licensed to you
8*4882a593Smuzhiyun  * under the terms of the GNU General Public License version 2 (the "GPL"),
9*4882a593Smuzhiyun  * available at http://www.broadcom.com/licenses/GPLv2.php, with the
10*4882a593Smuzhiyun  * following added to such license:
11*4882a593Smuzhiyun  *
12*4882a593Smuzhiyun  *      As a special exception, the copyright holders of this software give you
13*4882a593Smuzhiyun  * permission to link this software with independent modules, and to copy and
14*4882a593Smuzhiyun  * distribute the resulting executable under terms of your choice, provided that
15*4882a593Smuzhiyun  * you also meet, for each linked independent module, the terms and conditions of
16*4882a593Smuzhiyun  * the license of that module.  An independent module is a module which is not
17*4882a593Smuzhiyun  * derived from this software.  The special exception does not apply to any
18*4882a593Smuzhiyun  * modifications of the software.
19*4882a593Smuzhiyun  *
20*4882a593Smuzhiyun  *
21*4882a593Smuzhiyun  * <<Broadcom-WL-IPTag/Dual:>>
22*4882a593Smuzhiyun  */
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun #ifndef	_sbhndarm_h_
25*4882a593Smuzhiyun #define	_sbhndarm_h_
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun #ifdef DONGLEBUILD
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun #include <arminc.h>
30*4882a593Smuzhiyun #include <sbconfig.h>
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun /* register offsets */
33*4882a593Smuzhiyun #define	ARM7_CORECTL		0
34*4882a593Smuzhiyun 
35*4882a593Smuzhiyun /* bits in corecontrol */
36*4882a593Smuzhiyun #define	ACC_FORCED_RST		0x1
37*4882a593Smuzhiyun #define	ACC_SERRINT		0x2
38*4882a593Smuzhiyun #define	ACC_WFICLKSTOP		0x4
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun #if !defined(__ARM_ARCH_7A__)
41*4882a593Smuzhiyun #define ACC_NOTSLEEPINGCLKREQ_SHIFT	24
42*4882a593Smuzhiyun #endif /* !__ARM_ARCH_7A__ */
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun #if defined(__ARM_ARCH_7A__)
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun #define ACC_FORCECLOCKRATIO		(0x1u << 8)
47*4882a593Smuzhiyun #define ACC_CLOCKRATIO_SHIFT		(9u)
48*4882a593Smuzhiyun #define ACC_CLOCKRATIO_MASK		(0xFu << ACC_CLOCKRATIO_SHIFT)
49*4882a593Smuzhiyun 
50*4882a593Smuzhiyun #define ACC_CLOCKRATIO_1_TO_1		(0u)
51*4882a593Smuzhiyun #define ACC_CLOCKRATIO_2_TO_1		(1u)
52*4882a593Smuzhiyun #define ACC_CLOCKRATIO_3_TO_1		(2u)
53*4882a593Smuzhiyun #define ACC_CLOCKRATIO_4_TO_1		(3u)
54*4882a593Smuzhiyun 
55*4882a593Smuzhiyun #define ACC_FASTCLOCKCHANNEL_SHIFT	(24u)
56*4882a593Smuzhiyun #define ACC_FASTCLOCKCHANNEL_MASK	(0x3u << ACC_FASTCLOCKCHANNEL_SHIFT)
57*4882a593Smuzhiyun #define ACC_NUM_FASTCLOCKS_SHIFT	(2u)
58*4882a593Smuzhiyun #define ACC_NUM_FASTCLOCKS_MASK		(0x3u << ACC_NUM_FASTCLOCKS_SHIFT)
59*4882a593Smuzhiyun 
60*4882a593Smuzhiyun #define ACC_NOTSLEEPINGCLKREQ_SHIFT	(4u)
61*4882a593Smuzhiyun #define ACC_NOTSLEEPINGCLKREQ_MASK	(0x3u << ACC_NOT_SLEEPING_CLKREQ_SHIFT)
62*4882a593Smuzhiyun #define ACC_NOTSLEEPING_ALP		(0u)
63*4882a593Smuzhiyun #define ACC_NOTSLEEPING_HT		(1u)
64*4882a593Smuzhiyun #define ACC_NOTSLEEPING_ALP_HT_AVAIL	(2u)
65*4882a593Smuzhiyun #define ACC_NOTSLEEPING_HT_AVAIL	(3u)
66*4882a593Smuzhiyun 
67*4882a593Smuzhiyun #elif defined(__ARM_ARCH_7R__) /* CR4 */
68*4882a593Smuzhiyun 
69*4882a593Smuzhiyun #define ACC_FORCECLOCKRATIO	(1u << 7u)
70*4882a593Smuzhiyun #define ACC_CLOCKRATIO_SHIFT	8u
71*4882a593Smuzhiyun #define ACC_CLOCKRATIO_MASK	(0xFu << ACC_CLOCKRATIO_SHIFT)
72*4882a593Smuzhiyun #define ACC_CLOCKMODE_SHIFT	12u
73*4882a593Smuzhiyun #define ACC_CLOCKMODE_MASK	(7u << ACC_CLOCKMODE_SHIFT)
74*4882a593Smuzhiyun #define ACC_NOTSLEEPCLKREQ0	3u
75*4882a593Smuzhiyun #define ACC_NOTSLEEPCLKREQ1	18u
76*4882a593Smuzhiyun #define ACC_FLOPSPROTECT	(1u << 20u)
77*4882a593Smuzhiyun 
78*4882a593Smuzhiyun #define ACC_CLOCKRATIO_1_TO_1	(0u)
79*4882a593Smuzhiyun #define ACC_CLOCKRATIO_2_TO_1	(4u)
80*4882a593Smuzhiyun 
81*4882a593Smuzhiyun #endif /* __ARM_ARCH_7A__ */
82*4882a593Smuzhiyun 
83*4882a593Smuzhiyun #define ACC_CLOCKMODE_SAME	(0)	/**< BP and CPU clock are the same */
84*4882a593Smuzhiyun #define ACC_CLOCKMODE_ASYNC	(1)	/**< BP and CPU clock are asynchronous */
85*4882a593Smuzhiyun #define ACC_CLOCKMODE_SYNCH	(2)	/**< BP and CPU clock are synch, ratio 1:1 or 1:2 */
86*4882a593Smuzhiyun 
87*4882a593Smuzhiyun /* Request ALP on backplane bit 3 and 18 */
88*4882a593Smuzhiyun #define ACC_REQALP			((1<<ACC_NOTSLEEPCLKREQ0) | (1<<ACC_NOTSLEEPCLKREQ1))
89*4882a593Smuzhiyun 
90*4882a593Smuzhiyun #define ACC_MPU_SHIFT		25u
91*4882a593Smuzhiyun #define ACC_MPU_MASK		(0x1u << ACC_MPU_SHIFT)
92*4882a593Smuzhiyun 
93*4882a593Smuzhiyun #define ACC_MPU_REGION_CNT_MASK		0x7u
94*4882a593Smuzhiyun #define ACC_MPU_REGION_CNT_SHIFT	3u
95*4882a593Smuzhiyun 
96*4882a593Smuzhiyun #define ACC_MPU_SECURE_SHIFT	27u
97*4882a593Smuzhiyun #define ACC_MPU_SECURE_MASK	(0x1u << ACC_MPU_SECURE_SHIFT)
98*4882a593Smuzhiyun #define ACC_MPU_READ_SHIFT	30u
99*4882a593Smuzhiyun #define ACC_MPU_READ_MASK	(0x1u << ACC_MPU_READ_SHIFT)
100*4882a593Smuzhiyun #define ACC_MPU_WRITE_SHIFT	29u
101*4882a593Smuzhiyun #define ACC_MPU_WRITE_MASK	(0x1u << ACC_MPU_WRITE_SHIFT)
102*4882a593Smuzhiyun #define ACC_MPU_VALID_SHIFT	31u
103*4882a593Smuzhiyun #define ACC_MPU_VALID_MASK	(0x1u << ACC_MPU_VALID_SHIFT)
104*4882a593Smuzhiyun 
105*4882a593Smuzhiyun /* arm resetlog */
106*4882a593Smuzhiyun #define SBRESETLOG		0x1
107*4882a593Smuzhiyun #define SERRORLOG		0x2
108*4882a593Smuzhiyun 
109*4882a593Smuzhiyun /* arm core-specific control flags */
110*4882a593Smuzhiyun #define	SICF_REMAP_MSK		0x001c
111*4882a593Smuzhiyun #define	SICF_REMAP_NONE		0
112*4882a593Smuzhiyun #define	SICF_REMAP_ROM		0x0004
113*4882a593Smuzhiyun #define	SIFC_REMAP_FLASH	0x0008
114*4882a593Smuzhiyun 
115*4882a593Smuzhiyun /* misc core-specific defines */
116*4882a593Smuzhiyun #if defined(__ARM_ARCH_7M__)
117*4882a593Smuzhiyun /* cortex-m3 */
118*4882a593Smuzhiyun /* backplane related stuff */
119*4882a593Smuzhiyun #define ARM_CORE_ID		ARMCM3_CORE_ID	/**< arm coreid */
120*4882a593Smuzhiyun #define SI_ARM_ROM		SI_ARMCM3_ROM	/**< ROM backplane/system address */
121*4882a593Smuzhiyun #define SI_ARM_SRAM2		SI_ARMCM3_SRAM2	/**< RAM backplane address when remap is 1 or 2 */
122*4882a593Smuzhiyun /* core registers offsets */
123*4882a593Smuzhiyun #define ARMCM3_CYCLECNT		0x90		/**< Cortex-M3 core registers offsets */
124*4882a593Smuzhiyun #define ARMCM3_INTTIMER		0x94
125*4882a593Smuzhiyun #define ARMCM3_INTMASK		0x98
126*4882a593Smuzhiyun #define ARMCM3_INTSTATUS	0x9c
127*4882a593Smuzhiyun /* interrupt/exception */
128*4882a593Smuzhiyun #define ARMCM3_NUMINTS		16		/**< # of external interrupts */
129*4882a593Smuzhiyun #define ARMCM3_INTALL		((1 << ARMCM3_NUMINTS) - 1)	/**< Interrupt mask */
130*4882a593Smuzhiyun #define ARMCM3_SHARED_INT	0		/**< Interrupt shared by multiple cores */
131*4882a593Smuzhiyun #define ARMCM3_INT(i)		(1 << (i))	/**< Individual interrupt enable/disable */
132*4882a593Smuzhiyun /* intmask/intstatus bits */
133*4882a593Smuzhiyun #define ARMCM3_INTMASK_TIMER	0x1
134*4882a593Smuzhiyun #define ARMCM3_INTMASK_SYSRESET	0x4
135*4882a593Smuzhiyun #define ARMCM3_INTMASK_LOCKUP	0x8
136*4882a593Smuzhiyun 
137*4882a593Smuzhiyun /*
138*4882a593Smuzhiyun  * Overlay Support in Rev 5
139*4882a593Smuzhiyun  */
140*4882a593Smuzhiyun #define ARMCM3_OVL_VALID_SHIFT		0
141*4882a593Smuzhiyun #define ARMCM3_OVL_VALID		1
142*4882a593Smuzhiyun #define ARMCM3_OVL_SZ_SHIFT		1
143*4882a593Smuzhiyun #define ARMCM3_OVL_SZ_MASK		0x0000000e
144*4882a593Smuzhiyun #define ARMCM3_OVL_SZ_512B		0	/* 512B */
145*4882a593Smuzhiyun #define ARMCM3_OVL_SZ_1KB		1	/* 1KB */
146*4882a593Smuzhiyun #define ARMCM3_OVL_SZ_2KB		2	/* 2KB */
147*4882a593Smuzhiyun #define ARMCM3_OVL_SZ_4KB		3	/* 4KB */
148*4882a593Smuzhiyun #define ARMCM3_OVL_SZ_8KB		4	/* 8KB */
149*4882a593Smuzhiyun #define ARMCM3_OVL_SZ_16KB		5	/* 16KB */
150*4882a593Smuzhiyun #define ARMCM3_OVL_SZ_32KB		6	/* 32KB */
151*4882a593Smuzhiyun #define ARMCM3_OVL_SZ_64KB		7	/* 64KB */
152*4882a593Smuzhiyun #define ARMCM3_OVL_ADDR_SHIFT		9
153*4882a593Smuzhiyun #define ARMCM3_OVL_ADDR_MASK		0x003FFE00
154*4882a593Smuzhiyun #define ARMCM3_OVL_MAX			16
155*4882a593Smuzhiyun 
156*4882a593Smuzhiyun #elif defined(__ARM_ARCH_7R__)
157*4882a593Smuzhiyun /* cortex-r4 */
158*4882a593Smuzhiyun /* backplane related stuff */
159*4882a593Smuzhiyun #define ARM_CORE_ID		ARMCR4_CORE_ID	/**< arm coreid */
160*4882a593Smuzhiyun #define SI_ARM_ROM		SI_ARMCR4_ROM	/**< ROM backplane/system address */
161*4882a593Smuzhiyun #define SI_ARM_SRAM2		0x0	/**< In the cr4 the RAM is just not available
162*4882a593Smuzhiyun 					 * when remap is 1
163*4882a593Smuzhiyun 					 */
164*4882a593Smuzhiyun 
165*4882a593Smuzhiyun /* core registers offsets */
166*4882a593Smuzhiyun #define ARMCR4_CORECTL		0
167*4882a593Smuzhiyun #define ARMCR4_CORECAP		4
168*4882a593Smuzhiyun #define ARMCR4_COREST		8
169*4882a593Smuzhiyun 
170*4882a593Smuzhiyun #define ARMCR4_FIQRSTATUS	0x10
171*4882a593Smuzhiyun #define ARMCR4_FIQMASK		0x14
172*4882a593Smuzhiyun #define ARMCR4_IRQMASK		0x18
173*4882a593Smuzhiyun 
174*4882a593Smuzhiyun #define ARMCR4_INTSTATUS	0x20
175*4882a593Smuzhiyun #define ARMCR4_INTMASK		0x24
176*4882a593Smuzhiyun #define ARMCR4_CYCLECNT		0x28
177*4882a593Smuzhiyun #define ARMCR4_INTTIMER		0x2c
178*4882a593Smuzhiyun 
179*4882a593Smuzhiyun #define ARMCR4_GPIOSEL		0x30
180*4882a593Smuzhiyun #define ARMCR4_GPIOEN		0x34
181*4882a593Smuzhiyun 
182*4882a593Smuzhiyun #define ARMCR4_BANKIDX		0x40
183*4882a593Smuzhiyun #define ARMCR4_BANKINFO		0x44
184*4882a593Smuzhiyun #define ARMCR4_BANKSTBY		0x48
185*4882a593Smuzhiyun #define ARMCR4_BANKPDA		0x4c
186*4882a593Smuzhiyun 
187*4882a593Smuzhiyun #define ARMCR4_TCAMPATCHCTRL		0x68
188*4882a593Smuzhiyun #define ARMCR4_TCAMPATCHTBLBASEADDR	0x6C
189*4882a593Smuzhiyun #define ARMCR4_TCAMCMDREG		0x70
190*4882a593Smuzhiyun #define ARMCR4_TCAMDATAREG		0x74
191*4882a593Smuzhiyun #define ARMCR4_TCAMBANKXMASKREG		0x78
192*4882a593Smuzhiyun 
193*4882a593Smuzhiyun #define	ARMCR4_ROMNB_MASK	0xf00
194*4882a593Smuzhiyun #define	ARMCR4_ROMNB_SHIFT	8
195*4882a593Smuzhiyun #define	ARMCR4_MSB_ROMNB_MASK	0x1E00000
196*4882a593Smuzhiyun /* adjusted shift to fit 4-LSB (21 - 4 = 17) */
197*4882a593Smuzhiyun #define	ARMCR4_MSB_ROMNB_SHIFT	17
198*4882a593Smuzhiyun #define	ARMCR4_TCBBNB_MASK	0xf0
199*4882a593Smuzhiyun #define	ARMCR4_TCBBNB_SHIFT	4
200*4882a593Smuzhiyun #define	ARMCR4_TCBANB_MASK	0xf
201*4882a593Smuzhiyun #define	ARMCR4_TCBANB_SHIFT	0
202*4882a593Smuzhiyun 
203*4882a593Smuzhiyun #define	ARMCR4_MT_MASK		0x300
204*4882a593Smuzhiyun #define	ARMCR4_MT_SHIFT		8
205*4882a593Smuzhiyun #define	ARMCR4_MT_ROM		0x100
206*4882a593Smuzhiyun #define	ARMCR4_MT_RAM		0
207*4882a593Smuzhiyun 
208*4882a593Smuzhiyun #define	ARMCR4_BSZ_MASK		0x7f
209*4882a593Smuzhiyun #define	ARMCR4_BUNITSZ_MASK	0x200
210*4882a593Smuzhiyun #define	ARMCR4_BSZ_8K		8192
211*4882a593Smuzhiyun #define	ARMCR4_BSZ_1K		1024
212*4882a593Smuzhiyun 
213*4882a593Smuzhiyun #define	ARMCR4_STBY_SUPPORTED		0x400
214*4882a593Smuzhiyun #define	ARMCR4_STBY_TIMER_PRESENT	0x800
215*4882a593Smuzhiyun 
216*4882a593Smuzhiyun #define ARMCR4_TIMER_VAL_MASK		0xfffff
217*4882a593Smuzhiyun #define ARMCR4_STBY_TIMER_ENABLE	(1 << 24)
218*4882a593Smuzhiyun #define ARMCR4_STBY_OVERRIDE		(1 << 31)
219*4882a593Smuzhiyun 
220*4882a593Smuzhiyun #define ARMCR4_TCAM_ENABLE		(1u << 31u)
221*4882a593Smuzhiyun #define ARMCR4_TCAM_CLKENAB		(1u << 30u)
222*4882a593Smuzhiyun #define ARMCR4_TCAM_WRITEPROT		(1u << 29u)
223*4882a593Smuzhiyun #define ARMCR4_TCAM_PATCHCNT_MASK	0xfu
224*4882a593Smuzhiyun 
225*4882a593Smuzhiyun #define ARMCR4_TCAM_CMD_DONE	(1u << 31)
226*4882a593Smuzhiyun #define ARMCR4_TCAM_MATCH	(1u << 24)
227*4882a593Smuzhiyun #define ARMCR4_TCAM_OPCODE_MASK	(3 << 16)
228*4882a593Smuzhiyun #define ARMCR4_TCAM_OPCODE_SHIFT 16
229*4882a593Smuzhiyun #define ARMCR4_TCAM_ADDR_MASK	0xffff
230*4882a593Smuzhiyun #define ARMCR4_TCAM_NONE	(0 << ARMCR4_TCAM_OPCODE_SHIFT)
231*4882a593Smuzhiyun #define ARMCR4_TCAM_READ	(1 << ARMCR4_TCAM_OPCODE_SHIFT)
232*4882a593Smuzhiyun #define ARMCR4_TCAM_WRITE	(2 << ARMCR4_TCAM_OPCODE_SHIFT)
233*4882a593Smuzhiyun #define ARMCR4_TCAM_COMPARE	(3 << ARMCR4_TCAM_OPCODE_SHIFT)
234*4882a593Smuzhiyun #define ARMCR4_TCAM_CMD_DONE_DLY	1000
235*4882a593Smuzhiyun 
236*4882a593Smuzhiyun #define ARMCR4_DATA_MASK	(~0x7)
237*4882a593Smuzhiyun #define ARMCR4_DATA_VALID	(1u << 0)
238*4882a593Smuzhiyun 
239*4882a593Smuzhiyun /* intmask/intstatus bits */
240*4882a593Smuzhiyun #define ARMCR4_INTMASK_TIMER		(0x1)
241*4882a593Smuzhiyun #define ARMCR4_INTMASK_CLOCKSTABLE	(0x20000000)
242*4882a593Smuzhiyun 
243*4882a593Smuzhiyun #define CHIP_SDRENABLE(sih)	(sih->boardflags2 & BFL2_SDR_EN)
244*4882a593Smuzhiyun #define CHIP_TCMPROTENAB(sih)	(si_arm_sflags(sih) & SISF_TCMPROT)
245*4882a593Smuzhiyun 
246*4882a593Smuzhiyun /* Power Control */
247*4882a593Smuzhiyun #define ARM_ENAB_MEM_CLK_GATE_SHIFT	5
248*4882a593Smuzhiyun 
249*4882a593Smuzhiyun #define ROM_STBY_TIMER_4378	0xb0
250*4882a593Smuzhiyun #define RAM_STBY_TIMER_4378	0x64
251*4882a593Smuzhiyun 
252*4882a593Smuzhiyun #define ROM_STBY_TIMER_4387	0x10
253*4882a593Smuzhiyun #define RAM_STBY_TIMER_4387	0x100
254*4882a593Smuzhiyun 
255*4882a593Smuzhiyun #define RAM_STBY_DEFAULT_WAIT_TIME	(3u)
256*4882a593Smuzhiyun #define ROM_STBY_DEFAULT_WAIT_TIME	(4u)
257*4882a593Smuzhiyun #define DEFAULT_FORCE_STBY_IN_WFI	(1u)
258*4882a593Smuzhiyun #define	ARMCR4_DYN_STBY_CTRL_RAM_STBY_WAIT_TIMER_SHIFT	(0u)
259*4882a593Smuzhiyun #define ARMCR4_DYN_STBY_CTRL_RAM_STBY_WAIT_TIMER_MASK	(0xF << \
260*4882a593Smuzhiyun 		ARMCR4_DYN_STBY_CTRL_RAM_STBY_WAIT_TIMER_SHIFT)
261*4882a593Smuzhiyun #define	ARMCR4_DYN_STBY_CTRL_ROM_STBY_WAIT_TIMER_SHIFT	(8u)
262*4882a593Smuzhiyun #define	ARMCR4_DYN_STBY_CTRL_ROM_STBY_WAIT_TIMER_MASK	(0x3F << \
263*4882a593Smuzhiyun 		ARMCR4_DYN_STBY_CTRL_ROM_STBY_WAIT_TIMER_SHIFT)
264*4882a593Smuzhiyun #define	ARMCR4_DYN_STBY_CTRL_FORCE_STBY_IN_WFI_SHIFT	(16u)
265*4882a593Smuzhiyun #define	ARMCR4_DYN_STBY_CTRL_FORCE_STBY_IN_WFI_MASK	(0x1 << \
266*4882a593Smuzhiyun 		ARMCR4_DYN_STBY_CTRL_FORCE_STBY_IN_WFI_SHIFT)
267*4882a593Smuzhiyun 
268*4882a593Smuzhiyun /* using CHIPID because no capabilities bit */
269*4882a593Smuzhiyun #define ARM_CLKGATING_CAP(sih)		((void)(sih), (BCM4378_CHIP(sih->chip) ||\
270*4882a593Smuzhiyun 					 BCM4387_CHIP(sih->chip)))
271*4882a593Smuzhiyun 
272*4882a593Smuzhiyun #define ARM_CLKGATING_ENAB(sih)	(ARM_CLKGATING_CAP(sih) && 1)
273*4882a593Smuzhiyun 
274*4882a593Smuzhiyun #elif defined(__ARM_ARCH_7A__)
275*4882a593Smuzhiyun 
276*4882a593Smuzhiyun #if defined(CA7)
277*4882a593Smuzhiyun /* backplane related stuff */
278*4882a593Smuzhiyun #define ARM_CORE_ID		ARMCA7_CORE_ID
279*4882a593Smuzhiyun #define SI_ARM_ROM		SI_ARMCA7_ROM	/**< ROM backplane/system address */
280*4882a593Smuzhiyun 
281*4882a593Smuzhiyun #else
282*4882a593Smuzhiyun /* backplane related stuff */
283*4882a593Smuzhiyun #define ARM_CORE_ID		ARMCA9_CORE_ID	/* arm coreid */
284*4882a593Smuzhiyun #endif /* __ARM_ARCH_7A__ */
285*4882a593Smuzhiyun #else	/* !__ARM_ARCH_7M__ && !__ARM_ARCH_7R__ */
286*4882a593Smuzhiyun #error Unrecognized ARM Architecture
287*4882a593Smuzhiyun #endif	/* !__ARM_ARCH_7M__ && !__ARM_ARCH_7R__ */
288*4882a593Smuzhiyun 
289*4882a593Smuzhiyun #endif /* DONGLEBUILD */
290*4882a593Smuzhiyun 
291*4882a593Smuzhiyun #ifndef _LANGUAGE_ASSEMBLY
292*4882a593Smuzhiyun 
293*4882a593Smuzhiyun /* cpp contortions to concatenate w/arg prescan */
294*4882a593Smuzhiyun #ifndef PAD
295*4882a593Smuzhiyun #define	_PADLINE(line)	pad ## line
296*4882a593Smuzhiyun #define	_XSTR(line)	_PADLINE(line)
297*4882a593Smuzhiyun #define	PAD		_XSTR(__LINE__)
298*4882a593Smuzhiyun #endif	/* PAD */
299*4882a593Smuzhiyun 
300*4882a593Smuzhiyun /* cortex-m3 */
301*4882a593Smuzhiyun typedef volatile struct {
302*4882a593Smuzhiyun 	uint32	corecontrol;	/* 0x0 */
303*4882a593Smuzhiyun 	uint32	corestatus;	/* 0x4 */
304*4882a593Smuzhiyun 	uint32	PAD[1];
305*4882a593Smuzhiyun 	uint32	biststatus;	/* 0xc */
306*4882a593Smuzhiyun 	uint32	nmiisrst;	/* 0x10 */
307*4882a593Smuzhiyun 	uint32	nmimask;	/* 0x14 */
308*4882a593Smuzhiyun 	uint32	isrmask;	/* 0x18 */
309*4882a593Smuzhiyun 	uint32	PAD[1];
310*4882a593Smuzhiyun 	uint32	resetlog;	/* 0x20 */
311*4882a593Smuzhiyun 	uint32	gpioselect;	/* 0x24 */
312*4882a593Smuzhiyun 	uint32	gpioenable;	/* 0x28 */
313*4882a593Smuzhiyun 	uint32	PAD[1];
314*4882a593Smuzhiyun 	uint32	bpaddrlo;	/* 0x30 */
315*4882a593Smuzhiyun 	uint32	bpaddrhi;	/* 0x34 */
316*4882a593Smuzhiyun 	uint32	bpdata;		/* 0x38 */
317*4882a593Smuzhiyun 	uint32	bpindaccess;	/* 0x3c */
318*4882a593Smuzhiyun 	uint32	ovlidx;		/* 0x40 */
319*4882a593Smuzhiyun 	uint32	ovlmatch;	/* 0x44 */
320*4882a593Smuzhiyun 	uint32	ovladdr;	/* 0x48 */
321*4882a593Smuzhiyun 	uint32	PAD[13];
322*4882a593Smuzhiyun 	uint32	bwalloc;	/* 0x80 */
323*4882a593Smuzhiyun 	uint32	PAD[3];
324*4882a593Smuzhiyun 	uint32	cyclecnt;	/* 0x90 */
325*4882a593Smuzhiyun 	uint32	inttimer;	/* 0x94 */
326*4882a593Smuzhiyun 	uint32	intmask;	/* 0x98 */
327*4882a593Smuzhiyun 	uint32	intstatus;	/* 0x9c */
328*4882a593Smuzhiyun 	uint32	PAD[80];
329*4882a593Smuzhiyun 	uint32	clk_ctl_st;	/* 0x1e0 */
330*4882a593Smuzhiyun 	uint32  PAD[1];
331*4882a593Smuzhiyun 	uint32  powerctl;	/* 0x1e8 */
332*4882a593Smuzhiyun } cm3regs_t;
333*4882a593Smuzhiyun #define ARM_CM3_REG(regs, reg)	(&((cm3regs_t *)regs)->reg)
334*4882a593Smuzhiyun 
335*4882a593Smuzhiyun /* cortex-R4 */
336*4882a593Smuzhiyun typedef volatile struct {
337*4882a593Smuzhiyun 	uint32	corecontrol;		/* 0x0 */
338*4882a593Smuzhiyun 	uint32	corecapabilities;	/* 0x4 */
339*4882a593Smuzhiyun 	uint32	corestatus;		/* 0x8 */
340*4882a593Smuzhiyun 	uint32	biststatus;		/* 0xc */
341*4882a593Smuzhiyun 	uint32	nmiisrst;		/* 0x10 */
342*4882a593Smuzhiyun 	uint32	nmimask;		/* 0x14 */
343*4882a593Smuzhiyun 	uint32	isrmask;		/* 0x18 */
344*4882a593Smuzhiyun 	uint32	swintreg;		/* 0x1C */
345*4882a593Smuzhiyun 	uint32	intstatus;		/* 0x20 */
346*4882a593Smuzhiyun 	uint32	intmask;		/* 0x24 */
347*4882a593Smuzhiyun 	uint32	cyclecnt;		/* 0x28 */
348*4882a593Smuzhiyun 	uint32	inttimer;		/* 0x2c */
349*4882a593Smuzhiyun 	uint32	gpioselect;		/* 0x30 */
350*4882a593Smuzhiyun 	uint32	gpioenable;		/* 0x34 */
351*4882a593Smuzhiyun 	uint32	PAD[2];
352*4882a593Smuzhiyun 	uint32	bankidx;		/* 0x40 */
353*4882a593Smuzhiyun 	uint32	bankinfo;		/* 0x44 */
354*4882a593Smuzhiyun 	uint32	bankstbyctl;		/* 0x48 */
355*4882a593Smuzhiyun 	uint32	bankpda;		/* 0x4c */
356*4882a593Smuzhiyun 	uint32	dyn_stby_control;	/* 0x50 */
357*4882a593Smuzhiyun 	uint32	PAD[5];
358*4882a593Smuzhiyun 	uint32	tcampatchctrl;		/* 0x68 */
359*4882a593Smuzhiyun 	uint32	tcampatchtblbaseaddr;	/* 0x6c */
360*4882a593Smuzhiyun 	uint32	tcamcmdreg;		/* 0x70 */
361*4882a593Smuzhiyun 	uint32	tcamdatareg;		/* 0x74 */
362*4882a593Smuzhiyun 	uint32	tcambankxmaskreg;	/* 0x78 */
363*4882a593Smuzhiyun 	uint32	PAD[5];
364*4882a593Smuzhiyun 	uint32  mpucontrol;		/* 0x90 */
365*4882a593Smuzhiyun 	uint32  mpucapabilities;	/* 0x94 */
366*4882a593Smuzhiyun 	uint32	rom_reloc_addr;		/* 0x98 */
367*4882a593Smuzhiyun 	uint32	PAD[1];
368*4882a593Smuzhiyun 	uint32  region_n_regs[16];	/* 0xa0 - 0xdc */
369*4882a593Smuzhiyun 	uint32  PAD[16];
370*4882a593Smuzhiyun 	uint32  initiat_n_masks[16];	/* 0x120 - 0x15c */
371*4882a593Smuzhiyun 	uint32  PAD[32];
372*4882a593Smuzhiyun 	uint32	clk_ctl_st;		/* 0x1e0 */
373*4882a593Smuzhiyun 	uint32	hw_war;			/* 0x1e4 */
374*4882a593Smuzhiyun 	uint32	powerctl;		/* 0x1e8 */
375*4882a593Smuzhiyun 	uint32  powerctl2;		/* 0x1ec */
376*4882a593Smuzhiyun } cr4regs_t;
377*4882a593Smuzhiyun #define ARM_CR4_REG(regs, reg)	(&((cr4regs_t *)regs)->reg)
378*4882a593Smuzhiyun 
379*4882a593Smuzhiyun #define SBRESETLOG_CR4		0x4
380*4882a593Smuzhiyun 
381*4882a593Smuzhiyun /* cortex-A7 */
382*4882a593Smuzhiyun typedef volatile struct {
383*4882a593Smuzhiyun 	uint32	corecontrol;		/* 0x0 */
384*4882a593Smuzhiyun 	uint32	corecapabilities;	/* 0x4 */
385*4882a593Smuzhiyun 	uint32	corestatus;		/* 0x8 */
386*4882a593Smuzhiyun 	uint32	tracecontrol;		/* 0xc */
387*4882a593Smuzhiyun 	uint32	gpioselect;		/* 0x10 */
388*4882a593Smuzhiyun 	uint32	gpioenable;		/* 0x14 */
389*4882a593Smuzhiyun 	uint32	PAD[114];
390*4882a593Smuzhiyun 	uint32	clk_ctl_st;		/* 0x1e0 */
391*4882a593Smuzhiyun 	uint32	workaround;		/* 0x1e4 */
392*4882a593Smuzhiyun 	uint32  powerctl;		/* 0x1e8 */
393*4882a593Smuzhiyun 	uint32  powerctl2;		/* 0x1ec */
394*4882a593Smuzhiyun } ca7regs_t;
395*4882a593Smuzhiyun #define ARM_CA7_REG(regs, reg)	(&((ca7regs_t *)regs)->reg)
396*4882a593Smuzhiyun 
397*4882a593Smuzhiyun #if defined(__ARM_ARCH_7M__)
398*4882a593Smuzhiyun #define ARMREG(regs, reg)	ARM_CM3_REG(regs, reg)
399*4882a593Smuzhiyun #endif	/* __ARM_ARCH_7M__ */
400*4882a593Smuzhiyun 
401*4882a593Smuzhiyun #if defined(__ARM_ARCH_7R__)
402*4882a593Smuzhiyun #define ARMREG(regs, reg)	ARM_CR4_REG(regs, reg)
403*4882a593Smuzhiyun #endif	/* __ARM_ARCH_7R__ */
404*4882a593Smuzhiyun 
405*4882a593Smuzhiyun #if defined(__ARM_ARCH_7A__)
406*4882a593Smuzhiyun #define ARMREG(regs, reg)	ARM_CA7_REG(regs, reg)
407*4882a593Smuzhiyun #endif	/* __ARM_ARCH_7A__ */
408*4882a593Smuzhiyun 
409*4882a593Smuzhiyun /* MPU is present mask of ca7regs_t->corecapabilities */
410*4882a593Smuzhiyun #define CAP_MPU_MASK		2000000u
411*4882a593Smuzhiyun 
412*4882a593Smuzhiyun #endif	/* _LANGUAGE_ASSEMBLY */
413*4882a593Smuzhiyun 
414*4882a593Smuzhiyun #endif	/* _sbhndarm_h_ */
415