xref: /nrf52832-nimble/rt-thread/libcpu/mips/loongson_1c/ls1c.h (revision 104654410c56c573564690304ae786df310c91fc)
1*10465441SEvalZero /*
2*10465441SEvalZero  * File      : ls1c.h
3*10465441SEvalZero  * This file is part of RT-Thread RTOS
4*10465441SEvalZero  * COPYRIGHT (C) 2006-2011, RT-Thread Develop Team
5*10465441SEvalZero  *
6*10465441SEvalZero  * The license and distribution terms for this file may be
7*10465441SEvalZero  * found in the file LICENSE in this distribution or at
8*10465441SEvalZero  * http://www.rt-thread.org/license/LICENSE
9*10465441SEvalZero  *
10*10465441SEvalZero  * Change Logs:
11*10465441SEvalZero  * Date               Author             Notes
12*10465441SEvalZero  * 2011-08-08     lgnq                first version
13*10465441SEvalZero  * 2015-07-06     chinesebear      modified for loongson 1c
14*10465441SEvalZero  */
15*10465441SEvalZero 
16*10465441SEvalZero #ifndef __LS1C_H__
17*10465441SEvalZero #define __LS1C_H__
18*10465441SEvalZero 
19*10465441SEvalZero #include "../common/mipsregs.h"
20*10465441SEvalZero 
21*10465441SEvalZero #define LS1C_ACPI_IRQ	0
22*10465441SEvalZero #define LS1C_HPET_IRQ	1
23*10465441SEvalZero //#define LS1C_UART0_IRQ	3  // linux����3��v1.4�汾��1c�ֲ�����2�������Σ���ȷ��
24*10465441SEvalZero #define LS1C_UART1_IRQ	4
25*10465441SEvalZero #define LS1C_UART2_IRQ	5
26*10465441SEvalZero #define LS1C_CAN0_IRQ	6
27*10465441SEvalZero #define LS1C_CAN1_IRQ	7
28*10465441SEvalZero #define LS1C_SPI0_IRQ	8
29*10465441SEvalZero #define LS1C_SPI1_IRQ	9
30*10465441SEvalZero #define LS1C_AC97_IRQ	10
31*10465441SEvalZero #define LS1C_MS_IRQ		11
32*10465441SEvalZero #define LS1C_KB_IRQ		12
33*10465441SEvalZero #define LS1C_DMA0_IRQ	13
34*10465441SEvalZero #define LS1C_DMA1_IRQ	14
35*10465441SEvalZero #define LS1C_DMA2_IRQ   15
36*10465441SEvalZero #define LS1C_NAND_IRQ	16
37*10465441SEvalZero #define LS1C_PWM0_IRQ	17
38*10465441SEvalZero #define LS1C_PWM1_IRQ	18
39*10465441SEvalZero #define LS1C_PWM2_IRQ	19
40*10465441SEvalZero #define LS1C_PWM3_IRQ	20
41*10465441SEvalZero #define LS1C_RTC_INT0_IRQ  21
42*10465441SEvalZero #define LS1C_RTC_INT1_IRQ  22
43*10465441SEvalZero #define LS1C_RTC_INT2_IRQ  23
44*10465441SEvalZero #define LS1C_UART3_IRQ  29
45*10465441SEvalZero #define LS1C_ADC_IRQ    30
46*10465441SEvalZero #define LS1C_SDIO_IRQ   31
47*10465441SEvalZero 
48*10465441SEvalZero 
49*10465441SEvalZero #define LS1C_EHCI_IRQ	(32+0)
50*10465441SEvalZero #define LS1C_OHCI_IRQ	(32+1)
51*10465441SEvalZero #define LS1C_OTG_IRQ    (32+2)
52*10465441SEvalZero #define LS1C_MAC_IRQ    (32+3)
53*10465441SEvalZero #define LS1C_CAM_IRQ    (32+4)
54*10465441SEvalZero #define LS1C_UART4_IRQ  (32+5)
55*10465441SEvalZero #define LS1C_UART5_IRQ  (32+6)
56*10465441SEvalZero #define LS1C_UART6_IRQ  (32+7)
57*10465441SEvalZero #define LS1C_UART7_IRQ  (32+8)
58*10465441SEvalZero #define LS1C_UART8_IRQ  (32+9)
59*10465441SEvalZero #define LS1C_UART9_IRQ  (32+13)
60*10465441SEvalZero #define LS1C_UART10_IRQ (32+14)
61*10465441SEvalZero #define LS1C_UART11_IRQ (32+15)
62*10465441SEvalZero #define LS1C_I2C2_IRQ   (32+17)
63*10465441SEvalZero #define LS1C_I2C1_IRQ   (32+18)
64*10465441SEvalZero #define LS1C_I2C0_IRQ   (32+19)
65*10465441SEvalZero 
66*10465441SEvalZero 
67*10465441SEvalZero #define LS1C_GPIO_IRQ 64
68*10465441SEvalZero #define LS1C_GPIO_FIRST_IRQ 64
69*10465441SEvalZero #define LS1C_GPIO_IRQ_COUNT 96
70*10465441SEvalZero #define LS1C_GPIO_LAST_IRQ  (LS1C_GPIO_FIRST_IRQ + LS1C_GPIO_IRQ_COUNT-1)
71*10465441SEvalZero 
72*10465441SEvalZero 
73*10465441SEvalZero #define LS1C_LAST_IRQ 159
74*10465441SEvalZero #define LS1C_INTREG_BASE 0xbfd01040
75*10465441SEvalZero 
76*10465441SEvalZero // ��о1c���жϷ�Ϊ���飬ÿ��32��
77*10465441SEvalZero #define LS1C_NR_IRQS    (32*5)
78*10465441SEvalZero 
79*10465441SEvalZero 
80*10465441SEvalZero // GPIO��ź��жϺ�֮��Ļ���ת��
81*10465441SEvalZero #define LS1C_GPIO_TO_IRQ(GPIOn)     (LS1C_GPIO_FIRST_IRQ + (GPIOn))
82*10465441SEvalZero #define LS1C_IRQ_TO_GPIO(IRQn)      ((IRQn) - LS1C_GPIO_FIRST_IRQ)
83*10465441SEvalZero 
84*10465441SEvalZero 
85*10465441SEvalZero struct ls1c_intc_regs
86*10465441SEvalZero {
87*10465441SEvalZero 	volatile unsigned int int_isr;
88*10465441SEvalZero 	volatile unsigned int int_en;
89*10465441SEvalZero 	volatile unsigned int int_set;
90*10465441SEvalZero 	volatile unsigned int int_clr;		/* offset 0x10*/
91*10465441SEvalZero 	volatile unsigned int int_pol;
92*10465441SEvalZero    	volatile unsigned int int_edge;		/* offset 0 */
93*10465441SEvalZero };
94*10465441SEvalZero 
95*10465441SEvalZero struct ls1c_cop_global_regs
96*10465441SEvalZero {
97*10465441SEvalZero 	volatile unsigned int control;
98*10465441SEvalZero 	volatile unsigned int rd_inten;
99*10465441SEvalZero 	volatile unsigned int wr_inten;
100*10465441SEvalZero 	volatile unsigned int rd_intisr;		/* offset 0x10*/
101*10465441SEvalZero 	volatile unsigned int wr_intisr;
102*10465441SEvalZero 	unsigned int unused[11];
103*10465441SEvalZero } ;
104*10465441SEvalZero 
105*10465441SEvalZero struct ls1c_cop_channel_regs
106*10465441SEvalZero {
107*10465441SEvalZero 	volatile unsigned int rd_control;
108*10465441SEvalZero 	volatile unsigned int rd_src;
109*10465441SEvalZero 	volatile unsigned int rd_cnt;
110*10465441SEvalZero 	volatile unsigned int rd_status;		/* offset 0x10*/
111*10465441SEvalZero 	volatile unsigned int wr_control;
112*10465441SEvalZero 	volatile unsigned int wr_src;
113*10465441SEvalZero 	volatile unsigned int wr_cnt;
114*10465441SEvalZero 	volatile unsigned int wr_status;		/* offset 0x10*/
115*10465441SEvalZero } ;
116*10465441SEvalZero 
117*10465441SEvalZero struct ls1c_cop_regs
118*10465441SEvalZero {
119*10465441SEvalZero 	struct ls1c_cop_global_regs global;
120*10465441SEvalZero 	struct ls1c_cop_channel_regs chan[8][2];
121*10465441SEvalZero } ;
122*10465441SEvalZero 
123*10465441SEvalZero #define __REG8(addr)		*((volatile unsigned char *)(addr))
124*10465441SEvalZero #define __REG16(addr)		*((volatile unsigned short *)(addr))
125*10465441SEvalZero #define __REG32(addr)		*((volatile unsigned int *)(addr))
126*10465441SEvalZero 
127*10465441SEvalZero #define GMAC0_BASE			0xBFE10000
128*10465441SEvalZero #define GMAC0_DMA_BASE		0xBFE11000
129*10465441SEvalZero #define GMAC1_BASE			0xBFE20000
130*10465441SEvalZero #define GMAC1_DMA_BASE		0xBFE21000
131*10465441SEvalZero #define I2C0_BASE			0xBFE58000
132*10465441SEvalZero #define PWM0_BASE			0xBFE5C000
133*10465441SEvalZero #define PWM1_BASE			0xBFE5C010
134*10465441SEvalZero #define PWM2_BASE			0xBFE5C020
135*10465441SEvalZero #define PWM3_BASE			0xBFE5C030
136*10465441SEvalZero #define WDT_BASE			0xBFE5C060
137*10465441SEvalZero #define RTC_BASE			0xBFE64000
138*10465441SEvalZero #define I2C1_BASE			0xBFE68000
139*10465441SEvalZero #define I2C2_BASE			0xBFE70000
140*10465441SEvalZero #define AC97_BASE			0xBFE74000
141*10465441SEvalZero #define NAND_BASE			0xBFE78000
142*10465441SEvalZero #define SPI_BASE			0xBFE80000
143*10465441SEvalZero #define CAN1_BASE			0xBF004300
144*10465441SEvalZero #define CAN0_BASE			0xBF004400
145*10465441SEvalZero 
146*10465441SEvalZero /* Watch Dog registers */
147*10465441SEvalZero #define WDT_EN				__REG32(WDT_BASE + 0x00)
148*10465441SEvalZero #define WDT_SET				__REG32(WDT_BASE + 0x04)
149*10465441SEvalZero #define WDT_TIMER			__REG32(WDT_BASE + 0x08)
150*10465441SEvalZero 
151*10465441SEvalZero #define PLL_FREQ 				__REG32(0xbfe78030)
152*10465441SEvalZero #define PLL_DIV_PARAM 			__REG32(0xbfe78034)
153*10465441SEvalZero 
154*10465441SEvalZero #endif
155*10465441SEvalZero 
156