xref: /nrf52832-nimble/rt-thread/libcpu/mips/x1000/x1000.h (revision 104654410c56c573564690304ae786df310c91fc)
1*10465441SEvalZero /*
2*10465441SEvalZero  * File      : x1000.h
3*10465441SEvalZero  * This file is part of RT-Thread RTOS
4*10465441SEvalZero  * COPYRIGHT (C) 2008 - 2012, RT-Thread Development Team
5*10465441SEvalZero  *
6*10465441SEvalZero  *  This program is free software; you can redistribute it and/or modify
7*10465441SEvalZero  *  it under the terms of the GNU General Public License as published by
8*10465441SEvalZero  *  the Free Software Foundation; either version 2 of the License, or
9*10465441SEvalZero  *  (at your option) any later version.
10*10465441SEvalZero  *
11*10465441SEvalZero  *  This program is distributed in the hope that it will be useful,
12*10465441SEvalZero  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13*10465441SEvalZero  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14*10465441SEvalZero  *  GNU General Public License for more details.
15*10465441SEvalZero  *
16*10465441SEvalZero  *  You should have received a copy of the GNU General Public License along
17*10465441SEvalZero  *  with this program; if not, write to the Free Software Foundation, Inc.,
18*10465441SEvalZero  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19*10465441SEvalZero  *
20*10465441SEvalZero  * Change Logs:
21*10465441SEvalZero  * Date           Author       Notes
22*10465441SEvalZero  * 2015-11-19     Urey         the first version
23*10465441SEvalZero  */
24*10465441SEvalZero 
25*10465441SEvalZero #ifndef __X1000_H__
26*10465441SEvalZero #define __X1000_H__
27*10465441SEvalZero 
28*10465441SEvalZero #include "../common/mips.h"
29*10465441SEvalZero 
30*10465441SEvalZero #ifndef __ASSEMBLY__
31*10465441SEvalZero 
32*10465441SEvalZero #define cache_unroll(base,op)               \
33*10465441SEvalZero     __asm__ __volatile__("                  \
34*10465441SEvalZero         .set noreorder;                     \
35*10465441SEvalZero         .set mips3;                         \
36*10465441SEvalZero         cache %1, (%0);                     \
37*10465441SEvalZero         .set mips0;                         \
38*10465441SEvalZero         .set reorder"                       \
39*10465441SEvalZero         :                                   \
40*10465441SEvalZero         : "r" (base),                       \
41*10465441SEvalZero           "i" (op));
42*10465441SEvalZero 
43*10465441SEvalZero /* cpu pipeline flush */
jz_sync(void)44*10465441SEvalZero static inline void jz_sync(void)
45*10465441SEvalZero {
46*10465441SEvalZero     __asm__ volatile ("sync");
47*10465441SEvalZero }
48*10465441SEvalZero 
writeb(u8 value,u32 address)49*10465441SEvalZero static inline void writeb(u8 value, u32 address)
50*10465441SEvalZero {
51*10465441SEvalZero     *((volatile u8 *) address) = value;
52*10465441SEvalZero }
writew(u16 value,u32 address)53*10465441SEvalZero static inline void writew( u16 value, u32 address)
54*10465441SEvalZero {
55*10465441SEvalZero     *((volatile u16 *) address) = value;
56*10465441SEvalZero }
writel(u32 value,u32 address)57*10465441SEvalZero static inline void writel(u32 value, u32 address)
58*10465441SEvalZero {
59*10465441SEvalZero     *((volatile u32 *) address) = value;
60*10465441SEvalZero }
61*10465441SEvalZero 
readb(u32 address)62*10465441SEvalZero static inline u8 readb(u32 address)
63*10465441SEvalZero {
64*10465441SEvalZero     return *((volatile u8 *)address);
65*10465441SEvalZero }
66*10465441SEvalZero 
readw(u32 address)67*10465441SEvalZero static inline u16 readw(u32 address)
68*10465441SEvalZero {
69*10465441SEvalZero     return *((volatile u16 *)address);
70*10465441SEvalZero }
71*10465441SEvalZero 
readl(u32 address)72*10465441SEvalZero static inline u32 readl(u32 address)
73*10465441SEvalZero {
74*10465441SEvalZero     return *((volatile u32 *)address);
75*10465441SEvalZero }
76*10465441SEvalZero 
jz_writeb(u32 address,u8 value)77*10465441SEvalZero static inline void jz_writeb(u32 address, u8 value)
78*10465441SEvalZero {
79*10465441SEvalZero     *((volatile u8 *)address) = value;
80*10465441SEvalZero }
81*10465441SEvalZero 
jz_writew(u32 address,u16 value)82*10465441SEvalZero static inline void jz_writew(u32 address, u16 value)
83*10465441SEvalZero {
84*10465441SEvalZero     *((volatile u16 *)address) = value;
85*10465441SEvalZero }
86*10465441SEvalZero 
jz_writel(u32 address,u32 value)87*10465441SEvalZero static inline void jz_writel(u32 address, u32 value)
88*10465441SEvalZero {
89*10465441SEvalZero     *((volatile u32 *)address) = value;
90*10465441SEvalZero }
91*10465441SEvalZero 
jz_readb(u32 address)92*10465441SEvalZero static inline u8 jz_readb(u32 address)
93*10465441SEvalZero {
94*10465441SEvalZero     return *((volatile u8 *)address);
95*10465441SEvalZero }
96*10465441SEvalZero 
jz_readw(u32 address)97*10465441SEvalZero static inline u16 jz_readw(u32 address)
98*10465441SEvalZero {
99*10465441SEvalZero     return *((volatile u16 *)address);
100*10465441SEvalZero }
101*10465441SEvalZero 
jz_readl(u32 address)102*10465441SEvalZero static inline u32 jz_readl(u32 address)
103*10465441SEvalZero {
104*10465441SEvalZero     return *((volatile u32 *)address);
105*10465441SEvalZero }
106*10465441SEvalZero 
107*10465441SEvalZero #define BIT(n)          (0x01u << (n))
108*10465441SEvalZero #define BIT0            (0x01u <<  0)
109*10465441SEvalZero #define BIT1            (0x01u <<  1)
110*10465441SEvalZero #define BIT2            (0x01u <<  2)
111*10465441SEvalZero #define BIT3            (0x01u <<  3)
112*10465441SEvalZero #define BIT4            (0x01u <<  4)
113*10465441SEvalZero #define BIT5            (0x01u <<  5)
114*10465441SEvalZero #define BIT6            (0x01u <<  6)
115*10465441SEvalZero #define BIT7            (0x01u <<  7)
116*10465441SEvalZero #define BIT8            (0x01u <<  8)
117*10465441SEvalZero #define BIT9            (0x01u <<  9)
118*10465441SEvalZero #define BIT10           (0x01u << 10)
119*10465441SEvalZero #define BIT11           (0x01u << 11)
120*10465441SEvalZero #define BIT12           (0x01u << 12)
121*10465441SEvalZero #define BIT13           (0x01u << 13)
122*10465441SEvalZero #define BIT14           (0x01u << 14)
123*10465441SEvalZero #define BIT15           (0x01u << 15)
124*10465441SEvalZero #define BIT16           (0x01u << 16)
125*10465441SEvalZero #define BIT17           (0x01u << 17)
126*10465441SEvalZero #define BIT18           (0x01u << 18)
127*10465441SEvalZero #define BIT19           (0x01u << 19)
128*10465441SEvalZero #define BIT20           (0x01u << 20)
129*10465441SEvalZero #define BIT21           (0x01u << 21)
130*10465441SEvalZero #define BIT22           (0x01u << 22)
131*10465441SEvalZero #define BIT23           (0x01u << 23)
132*10465441SEvalZero #define BIT24           (0x01u << 24)
133*10465441SEvalZero #define BIT25           (0x01u << 25)
134*10465441SEvalZero #define BIT26           (0x01u << 26)
135*10465441SEvalZero #define BIT27           (0x01u << 27)
136*10465441SEvalZero #define BIT28           (0x01u << 28)
137*10465441SEvalZero #define BIT29           (0x01u << 29)
138*10465441SEvalZero #define BIT30           (0x01u << 30)
139*10465441SEvalZero #define BIT31           (0x01u << 31)
140*10465441SEvalZero 
141*10465441SEvalZero /* Generate the bit field mask from msb to lsb */
142*10465441SEvalZero #define BITS_H2L(msb, lsb)  ((0xFFFFFFFF >> (32-((msb)-(lsb)+1))) << (lsb))
143*10465441SEvalZero 
144*10465441SEvalZero 
145*10465441SEvalZero /* Get the bit field value from the data which is read from the register */
146*10465441SEvalZero #define get_bf_value(data, lsb, mask)  (((data) & (mask)) >> (lsb))
147*10465441SEvalZero 
148*10465441SEvalZero #endif /* !ASSEMBLY */
149*10465441SEvalZero 
150*10465441SEvalZero 
151*10465441SEvalZero //----------------------------------------------------------------------
152*10465441SEvalZero // Register Definitions
153*10465441SEvalZero //
154*10465441SEvalZero /* AHB0 BUS Devices Base */
155*10465441SEvalZero #define HARB0_BASE  0xB3000000
156*10465441SEvalZero #define EMC_BASE    0xB3010000
157*10465441SEvalZero #define DDRC_BASE   0xB3020000
158*10465441SEvalZero #define MDMAC_BASE  0xB3030000
159*10465441SEvalZero #define LCD_BASE    0xB3050000
160*10465441SEvalZero #define TVE_BASE    0xB3050000
161*10465441SEvalZero #define SLCD_BASE   0xB3050000
162*10465441SEvalZero #define CIM_BASE    0xB3060000
163*10465441SEvalZero #define IPU_BASE    0xB3080000
164*10465441SEvalZero /* AHB1 BUS Devices Base */
165*10465441SEvalZero #define HARB1_BASE  0xB3200000
166*10465441SEvalZero #define DMAGP0_BASE 0xB3210000
167*10465441SEvalZero #define DMAGP1_BASE 0xB3220000
168*10465441SEvalZero #define DMAGP2_BASE 0xB3230000
169*10465441SEvalZero #define MC_BASE     0xB3250000
170*10465441SEvalZero #define ME_BASE     0xB3260000
171*10465441SEvalZero #define DEBLK_BASE  0xB3270000
172*10465441SEvalZero #define IDCT_BASE   0xB3280000
173*10465441SEvalZero #define CABAC_BASE  0xB3290000
174*10465441SEvalZero #define TCSM0_BASE  0xB32B0000
175*10465441SEvalZero #define TCSM1_BASE  0xB32C0000
176*10465441SEvalZero #define SRAM_BASE   0xB32D0000
177*10465441SEvalZero /* AHB2 BUS Devices Base */
178*10465441SEvalZero #define HARB2_BASE  0xB3400000
179*10465441SEvalZero #define NEMC_BASE   0xB3410000
180*10465441SEvalZero #define DMAC_BASE   0xB3420000
181*10465441SEvalZero #define UHC_BASE    0xB3430000
182*10465441SEvalZero //#define UDC_BASE    0xB3440000
183*10465441SEvalZero #define SFC_BASE	 0xB3440000
184*10465441SEvalZero #define GPS_BASE    0xB3480000
185*10465441SEvalZero #define ETHC_BASE   0xB34B0000
186*10465441SEvalZero #define BCH_BASE    0xB34D0000
187*10465441SEvalZero #define MSC0_BASE   0xB3450000
188*10465441SEvalZero #define MSC1_BASE   0xB3460000
189*10465441SEvalZero #define MSC2_BASE   0xB3470000
190*10465441SEvalZero #define OTG_BASE    0xb3500000
191*10465441SEvalZero 
192*10465441SEvalZero /* APB BUS Devices Base */
193*10465441SEvalZero #define CPM_BASE    0xB0000000
194*10465441SEvalZero #define INTC_BASE   0xB0001000
195*10465441SEvalZero #define TCU_BASE    0xB0002000
196*10465441SEvalZero #define WDT_BASE    0xB0002000
197*10465441SEvalZero #define OST_BASE    0xB2000000      /* OS Timer */
198*10465441SEvalZero #define RTC_BASE    0xB0003000
199*10465441SEvalZero #define GPIO_BASE   0xB0010000
200*10465441SEvalZero #define AIC_BASE    0xB0020000
201*10465441SEvalZero #define DMIC_BASE   0xB0021000
202*10465441SEvalZero #define ICDC_BASE   0xB0020000
203*10465441SEvalZero #define UART0_BASE  0xB0030000
204*10465441SEvalZero #define UART1_BASE  0xB0031000
205*10465441SEvalZero #define UART2_BASE  0xB0032000
206*10465441SEvalZero #define SCC_BASE    0xB0040000
207*10465441SEvalZero #define SSI0_BASE   0xB0043000
208*10465441SEvalZero #define SSI1_BASE   0xB0044000
209*10465441SEvalZero #define SSI2_BASE   0xB0045000
210*10465441SEvalZero #define I2C0_BASE   0xB0050000
211*10465441SEvalZero #define I2C1_BASE   0xB0051000
212*10465441SEvalZero #define I2C2_BASE   0xB0052000
213*10465441SEvalZero #define PS2_BASE    0xB0060000
214*10465441SEvalZero #define SADC_BASE   0xB0070000
215*10465441SEvalZero #define OWI_BASE    0xB0072000
216*10465441SEvalZero #define TSSI_BASE   0xB0073000
217*10465441SEvalZero 
218*10465441SEvalZero /* NAND CHIP Base Address*/
219*10465441SEvalZero #define NEMC_CS1_IOBASE 0Xbb000000
220*10465441SEvalZero #define NEMC_CS2_IOBASE 0Xba000000
221*10465441SEvalZero #define NEMC_CS3_IOBASE 0Xb9000000
222*10465441SEvalZero #define NEMC_CS4_IOBASE 0Xb8000000
223*10465441SEvalZero #define NEMC_CS5_IOBASE 0Xb7000000
224*10465441SEvalZero #define NEMC_CS6_IOBASE 0Xb6000000
225*10465441SEvalZero 
226*10465441SEvalZero /*********************************************************************************************************
227*10465441SEvalZero **   WDT
228*10465441SEvalZero *********************************************************************************************************/
229*10465441SEvalZero #define WDT_TDR         (0x00)
230*10465441SEvalZero #define WDT_TCER        (0x04)
231*10465441SEvalZero #define WDT_TCNT        (0x08)
232*10465441SEvalZero #define WDT_TCSR        (0x0C)
233*10465441SEvalZero 
234*10465441SEvalZero #define REG_WDT_TDR     REG16(WDT_BASE + WDT_TDR)
235*10465441SEvalZero #define REG_WDT_TCER    REG8(WDT_BASE + WDT_TCER)
236*10465441SEvalZero #define REG_WDT_TCNT    REG16(WDT_BASE + WDT_TCNT)
237*10465441SEvalZero #define REG_WDT_TCSR    REG16(WDT_BASE + WDT_TCSR)
238*10465441SEvalZero 
239*10465441SEvalZero #define WDT_TSCR_WDTSC          (1 << 16)
240*10465441SEvalZero 
241*10465441SEvalZero #define WDT_TCSR_PRESCALE_1         (0 << 3)
242*10465441SEvalZero #define WDT_TCSR_PRESCALE_4         (1 << 3)
243*10465441SEvalZero #define WDT_TCSR_PRESCALE_16        (2 << 3)
244*10465441SEvalZero #define WDT_TCSR_PRESCALE_64        (3 << 3)
245*10465441SEvalZero #define WDT_TCSR_PRESCALE_256       (4 << 3)
246*10465441SEvalZero #define WDT_TCSR_PRESCALE_1024      (5 << 3)
247*10465441SEvalZero 
248*10465441SEvalZero #define WDT_TCSR_EXT_EN         (1 << 2)
249*10465441SEvalZero #define WDT_TCSR_RTC_EN         (1 << 1)
250*10465441SEvalZero #define WDT_TCSR_PCK_EN         (1 << 0)
251*10465441SEvalZero 
252*10465441SEvalZero #define WDT_TCER_TCEN           (1 << 0)
253*10465441SEvalZero 
254*10465441SEvalZero /* RTC Reg */
255*10465441SEvalZero #define RTC_RTCCR		(0x00)	/* rw, 32, 0x00000081 */
256*10465441SEvalZero #define RTC_RTCSR		(0x04)	/* rw, 32, 0x???????? */
257*10465441SEvalZero #define RTC_RTCSAR		(0x08)	/* rw, 32, 0x???????? */
258*10465441SEvalZero #define RTC_RTCGR		(0x0c)	/* rw, 32, 0x0??????? */
259*10465441SEvalZero #define RTC_HCR			(0x20)  /* rw, 32, 0x00000000 */
260*10465441SEvalZero #define RTC_HWFCR		(0x24)  /* rw, 32, 0x0000???0 */
261*10465441SEvalZero #define RTC_HRCR		(0x28)  /* rw, 32, 0x00000??0 */
262*10465441SEvalZero #define RTC_HWCR		(0x2c)  /* rw, 32, 0x00000008 */
263*10465441SEvalZero #define RTC_HWRSR		(0x30)  /* rw, 32, 0x00000000 */
264*10465441SEvalZero #define RTC_HSPR		(0x34)  /* rw, 32, 0x???????? */
265*10465441SEvalZero #define RTC_WENR		(0x3c)  /* rw, 32, 0x00000000 */
266*10465441SEvalZero #define RTC_CKPCR		(0x40)  /* rw, 32, 0x00000010 */
267*10465441SEvalZero #define RTC_OWIPCR		(0x44)  /* rw, 32, 0x00000010 */
268*10465441SEvalZero #define RTC_PWRONCR		(0x48)  /* rw, 32, 0x???????? */
269*10465441SEvalZero 
270*10465441SEvalZero #define RTCCR_WRDY				BIT(7)
271*10465441SEvalZero #define WENR_WEN                BIT(31)
272*10465441SEvalZero 
273*10465441SEvalZero #define RECOVERY_SIGNATURE	(0x001a1a)
274*10465441SEvalZero #define REBOOT_SIGNATURE	(0x003535)
275*10465441SEvalZero #define UNMSAK_SIGNATURE	(0x7c0000)//do not use these bits
276*10465441SEvalZero 
277*10465441SEvalZero 
278*10465441SEvalZero #include "x1000_cpm.h"
279*10465441SEvalZero #include "x1000_intc.h"
280*10465441SEvalZero #include "x1000_otg_dwc.h"
281*10465441SEvalZero #include "x1000_aic.h"
282*10465441SEvalZero #include "x1000_slcdc.h"
283*10465441SEvalZero 
284*10465441SEvalZero #endif /* _JZ_M150_H_ */
285