aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/include/asm
diff options
context:
space:
mode:
authorWu Zhangjin <wuzhangjin@gmail.com>2009-10-16 02:17:19 -0400
committerRalf Baechle <ralf@linux-mips.org>2009-12-16 20:57:06 -0500
commite2fee5723bbda4a05c86f16a9d0f889a2c4ecede (patch)
tree7b6dade7ec51bc9d8ffe83c09070686bb3a278b1 /arch/mips/include/asm
parente8be5283881cb96bafb751e1f9ea34c4e6fc2845 (diff)
MIPS: Bonito64: Make Loongson independent from Bonito64 code.
The built-in Loongson 2E/2F northbridge in is bonito64-compatible but not identical with it. To avoid influencing the original bonito64 support and make the loongson support more maintainable, it's better to separate the Bonito64 code from the Loongson code. This also prepares the kernel for the coming Loongson 2f machines family support. Signed-off-by: Wu Zhangjin <wuzhangjin@gmail.com> Cc: Linux-MIPS <linux-mips@linux-mips.org> Cc: yanh@lemote.com Cc: huhb@lemote.com Cc: Zhang Le <r0bertz@gentoo.org> Cc: zhangfx@lemote.com, Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips/include/asm')
-rw-r--r--arch/mips/include/asm/mach-loongson/loongson.h182
-rw-r--r--arch/mips/include/asm/mach-loongson/machine.h2
-rw-r--r--arch/mips/include/asm/mach-loongson/pci.h6
-rw-r--r--arch/mips/include/asm/mips-boards/bonito64.h5
4 files changed, 172 insertions, 23 deletions
diff --git a/arch/mips/include/asm/mach-loongson/loongson.h b/arch/mips/include/asm/mach-loongson/loongson.h
index da70bcf2304e..e6869aa52bc8 100644
--- a/arch/mips/include/asm/mach-loongson/loongson.h
+++ b/arch/mips/include/asm/mach-loongson/loongson.h
@@ -15,9 +15,6 @@
15#include <linux/io.h> 15#include <linux/io.h>
16#include <linux/init.h> 16#include <linux/init.h>
17 17
18/* there is an internal bonito64-compatiable northbridge in loongson2e/2f */
19#include <asm/mips-boards/bonito64.h>
20
21/* loongson internal northbridge initialization */ 18/* loongson internal northbridge initialization */
22extern void bonito_irq_init(void); 19extern void bonito_irq_init(void);
23 20
@@ -41,24 +38,181 @@ extern void __init set_irq_trigger_mode(void);
41extern void __init mach_init_irq(void); 38extern void __init mach_init_irq(void);
42extern void mach_irq_dispatch(unsigned int pending); 39extern void mach_irq_dispatch(unsigned int pending);
43 40
41#define LOONGSON_REG(x) \
42 (*(volatile u32 *)((char *)CKSEG1ADDR(LOONGSON_REG_BASE) + (x)))
43
44#define LOONGSON_IRQ_BASE 32
45#define LOONGSON2_PERFCNT_IRQ (MIPS_CPU_IRQ_BASE + 6) /* cpu perf counter */
46
47#define LOONGSON_FLASH_BASE 0x1c000000
48#define LOONGSON_FLASH_SIZE 0x02000000 /* 32M */
49#define LOONGSON_FLASH_TOP (LOONGSON_FLASH_BASE+LOONGSON_FLASH_SIZE-1)
50
51#define LOONGSON_LIO0_BASE 0x1e000000
52#define LOONGSON_LIO0_SIZE 0x01C00000 /* 28M */
53#define LOONGSON_LIO0_TOP (LOONGSON_LIO0_BASE+LOONGSON_LIO0_SIZE-1)
54
55#define LOONGSON_BOOT_BASE 0x1fc00000
56#define LOONGSON_BOOT_SIZE 0x00100000 /* 1M */
57#define LOONGSON_BOOT_TOP (LOONGSON_BOOT_BASE+LOONGSON_BOOT_SIZE-1)
58#define LOONGSON_REG_BASE 0x1fe00000
59#define LOONGSON_REG_SIZE 0x00100000 /* 256Bytes + 256Bytes + ??? */
60#define LOONGSON_REG_TOP (LOONGSON_REG_BASE+LOONGSON_REG_SIZE-1)
61
62#define LOONGSON_LIO1_BASE 0x1ff00000
63#define LOONGSON_LIO1_SIZE 0x00100000 /* 1M */
64#define LOONGSON_LIO1_TOP (LOONGSON_LIO1_BASE+LOONGSON_LIO1_SIZE-1)
65
66#define LOONGSON_PCILO0_BASE 0x10000000
67#define LOONGSON_PCILO1_BASE 0x14000000
68#define LOONGSON_PCILO2_BASE 0x18000000
69#define LOONGSON_PCILO_BASE LOONGSON_PCILO0_BASE
70#define LOONGSON_PCILO_SIZE 0x0c000000 /* 64M * 3 */
71#define LOONGSON_PCILO_TOP (LOONGSON_PCILO0_BASE+LOONGSON_PCILO_SIZE-1)
72
73#define LOONGSON_PCICFG_BASE 0x1fe80000
74#define LOONGSON_PCICFG_SIZE 0x00000800 /* 2K */
75#define LOONGSON_PCICFG_TOP (LOONGSON_PCICFG_BASE+LOONGSON_PCICFG_SIZE-1)
76#define LOONGSON_PCIIO_BASE 0x1fd00000
77#define LOONGSON_PCIIO_SIZE 0x00100000 /* 1M */
78#define LOONGSON_PCIIO_TOP (LOONGSON_PCIIO_BASE+LOONGSON_PCIIO_SIZE-1)
79
80/* Loongson Register Bases */
81
82#define LOONGSON_PCICONFIGBASE 0x00
83#define LOONGSON_REGBASE 0x100
84
44/* PCI Configuration Registers */ 85/* PCI Configuration Registers */
45#define LOONGSON_PCI_ISR4C BONITO_PCI_REG(0x4c) 86
87#define LOONGSON_PCI_REG(x) LOONGSON_REG(LOONGSON_PCICONFIGBASE + (x))
88#define LOONGSON_PCIDID LOONGSON_PCI_REG(0x00)
89#define LOONGSON_PCICMD LOONGSON_PCI_REG(0x04)
90#define LOONGSON_PCICLASS LOONGSON_PCI_REG(0x08)
91#define LOONGSON_PCILTIMER LOONGSON_PCI_REG(0x0c)
92#define LOONGSON_PCIBASE0 LOONGSON_PCI_REG(0x10)
93#define LOONGSON_PCIBASE1 LOONGSON_PCI_REG(0x14)
94#define LOONGSON_PCIBASE2 LOONGSON_PCI_REG(0x18)
95#define LOONGSON_PCIBASE3 LOONGSON_PCI_REG(0x1c)
96#define LOONGSON_PCIBASE4 LOONGSON_PCI_REG(0x20)
97#define LOONGSON_PCIEXPRBASE LOONGSON_PCI_REG(0x30)
98#define LOONGSON_PCIINT LOONGSON_PCI_REG(0x3c)
99
100#define LOONGSON_PCI_ISR4C LOONGSON_PCI_REG(0x4c)
101
102#define LOONGSON_PCICMD_PERR_CLR 0x80000000
103#define LOONGSON_PCICMD_SERR_CLR 0x40000000
104#define LOONGSON_PCICMD_MABORT_CLR 0x20000000
105#define LOONGSON_PCICMD_MTABORT_CLR 0x10000000
106#define LOONGSON_PCICMD_TABORT_CLR 0x08000000
107#define LOONGSON_PCICMD_MPERR_CLR 0x01000000
108#define LOONGSON_PCICMD_PERRRESPEN 0x00000040
109#define LOONGSON_PCICMD_ASTEPEN 0x00000080
110#define LOONGSON_PCICMD_SERREN 0x00000100
111#define LOONGSON_PCILTIMER_BUSLATENCY 0x0000ff00
112#define LOONGSON_PCILTIMER_BUSLATENCY_SHIFT 8
113
114/* Loongson h/w Configuration */
115
116#define LOONGSON_GENCFG_OFFSET 0x4
117#define LOONGSON_GENCFG LOONGSON_REG(LOONGSON_REGBASE + LOONGSON_GENCFG_OFFSET)
118
119#define LOONGSON_GENCFG_DEBUGMODE 0x00000001
120#define LOONGSON_GENCFG_SNOOPEN 0x00000002
121#define LOONGSON_GENCFG_CPUSELFRESET 0x00000004
122
123#define LOONGSON_GENCFG_FORCE_IRQA 0x00000008
124#define LOONGSON_GENCFG_IRQA_ISOUT 0x00000010
125#define LOONGSON_GENCFG_IRQA_FROM_INT1 0x00000020
126#define LOONGSON_GENCFG_BYTESWAP 0x00000040
127
128#define LOONGSON_GENCFG_UNCACHED 0x00000080
129#define LOONGSON_GENCFG_PREFETCHEN 0x00000100
130#define LOONGSON_GENCFG_WBEHINDEN 0x00000200
131#define LOONGSON_GENCFG_CACHEALG 0x00000c00
132#define LOONGSON_GENCFG_CACHEALG_SHIFT 10
133#define LOONGSON_GENCFG_PCIQUEUE 0x00001000
134#define LOONGSON_GENCFG_CACHESTOP 0x00002000
135#define LOONGSON_GENCFG_MSTRBYTESWAP 0x00004000
136#define LOONGSON_GENCFG_BUSERREN 0x00008000
137#define LOONGSON_GENCFG_NORETRYTIMEOUT 0x00010000
138#define LOONGSON_GENCFG_SHORTCOPYTIMEOUT 0x00020000
139
140/* PCI address map control */
141
142#define LOONGSON_PCIMAP LOONGSON_REG(LOONGSON_REGBASE + 0x10)
143#define LOONGSON_PCIMEMBASECFG LOONGSON_REG(LOONGSON_REGBASE + 0x14)
144#define LOONGSON_PCIMAP_CFG LOONGSON_REG(LOONGSON_REGBASE + 0x18)
145
146/* GPIO Regs - r/w */
147
148#define LOONGSON_GPIODATA LOONGSON_REG(LOONGSON_REGBASE + 0x1c)
149#define LOONGSON_GPIOIE LOONGSON_REG(LOONGSON_REGBASE + 0x20)
150
151/* ICU Configuration Regs - r/w */
152
153#define LOONGSON_INTEDGE LOONGSON_REG(LOONGSON_REGBASE + 0x24)
154#define LOONGSON_INTSTEER LOONGSON_REG(LOONGSON_REGBASE + 0x28)
155#define LOONGSON_INTPOL LOONGSON_REG(LOONGSON_REGBASE + 0x2c)
156
157/* ICU Enable Regs - IntEn & IntISR are r/o. */
158
159#define LOONGSON_INTENSET LOONGSON_REG(LOONGSON_REGBASE + 0x30)
160#define LOONGSON_INTENCLR LOONGSON_REG(LOONGSON_REGBASE + 0x34)
161#define LOONGSON_INTEN LOONGSON_REG(LOONGSON_REGBASE + 0x38)
162#define LOONGSON_INTISR LOONGSON_REG(LOONGSON_REGBASE + 0x3c)
163
164/* ICU */
165#define LOONGSON_ICU_MBOXES 0x0000000f
166#define LOONGSON_ICU_MBOXES_SHIFT 0
167#define LOONGSON_ICU_DMARDY 0x00000010
168#define LOONGSON_ICU_DMAEMPTY 0x00000020
169#define LOONGSON_ICU_COPYRDY 0x00000040
170#define LOONGSON_ICU_COPYEMPTY 0x00000080
171#define LOONGSON_ICU_COPYERR 0x00000100
172#define LOONGSON_ICU_PCIIRQ 0x00000200
173#define LOONGSON_ICU_MASTERERR 0x00000400
174#define LOONGSON_ICU_SYSTEMERR 0x00000800
175#define LOONGSON_ICU_DRAMPERR 0x00001000
176#define LOONGSON_ICU_RETRYERR 0x00002000
177#define LOONGSON_ICU_GPIOS 0x01ff0000
178#define LOONGSON_ICU_GPIOS_SHIFT 16
179#define LOONGSON_ICU_GPINS 0x7e000000
180#define LOONGSON_ICU_GPINS_SHIFT 25
181#define LOONGSON_ICU_MBOX(N) (1<<(LOONGSON_ICU_MBOXES_SHIFT+(N)))
182#define LOONGSON_ICU_GPIO(N) (1<<(LOONGSON_ICU_GPIOS_SHIFT+(N)))
183#define LOONGSON_ICU_GPIN(N) (1<<(LOONGSON_ICU_GPINS_SHIFT+(N)))
184
185/* PCI prefetch window base & mask */
186
187#define LOONGSON_MEM_WIN_BASE_L LOONGSON_REG(LOONGSON_REGBASE + 0x40)
188#define LOONGSON_MEM_WIN_BASE_H LOONGSON_REG(LOONGSON_REGBASE + 0x44)
189#define LOONGSON_MEM_WIN_MASK_L LOONGSON_REG(LOONGSON_REGBASE + 0x48)
190#define LOONGSON_MEM_WIN_MASK_H LOONGSON_REG(LOONGSON_REGBASE + 0x4c)
46 191
47/* PCI_Hit*_Sel_* */ 192/* PCI_Hit*_Sel_* */
48 193
49#define LOONGSON_PCI_HIT0_SEL_L BONITO(BONITO_REGBASE + 0x50) 194#define LOONGSON_PCI_HIT0_SEL_L LOONGSON_REG(LOONGSON_REGBASE + 0x50)
50#define LOONGSON_PCI_HIT0_SEL_H BONITO(BONITO_REGBASE + 0x54) 195#define LOONGSON_PCI_HIT0_SEL_H LOONGSON_REG(LOONGSON_REGBASE + 0x54)
51#define LOONGSON_PCI_HIT1_SEL_L BONITO(BONITO_REGBASE + 0x58) 196#define LOONGSON_PCI_HIT1_SEL_L LOONGSON_REG(LOONGSON_REGBASE + 0x58)
52#define LOONGSON_PCI_HIT1_SEL_H BONITO(BONITO_REGBASE + 0x5c) 197#define LOONGSON_PCI_HIT1_SEL_H LOONGSON_REG(LOONGSON_REGBASE + 0x5c)
53#define LOONGSON_PCI_HIT2_SEL_L BONITO(BONITO_REGBASE + 0x60) 198#define LOONGSON_PCI_HIT2_SEL_L LOONGSON_REG(LOONGSON_REGBASE + 0x60)
54#define LOONGSON_PCI_HIT2_SEL_H BONITO(BONITO_REGBASE + 0x64) 199#define LOONGSON_PCI_HIT2_SEL_H LOONGSON_REG(LOONGSON_REGBASE + 0x64)
55 200
56/* PXArb Config & Status */ 201/* PXArb Config & Status */
57 202
58#define LOONGSON_PXARB_CFG BONITO(BONITO_REGBASE + 0x68) 203#define LOONGSON_PXARB_CFG LOONGSON_REG(LOONGSON_REGBASE + 0x68)
59#define LOONGSON_PXARB_STATUS BONITO(BONITO_REGBASE + 0x6c) 204#define LOONGSON_PXARB_STATUS LOONGSON_REG(LOONGSON_REGBASE + 0x6c)
205
206/* pcimap */
60 207
61/* loongson2-specific perf counter IRQ */ 208#define LOONGSON_PCIMAP_PCIMAP_LO0 0x0000003f
62#define LOONGSON2_PERFCNT_IRQ (MIPS_CPU_IRQ_BASE + 6) 209#define LOONGSON_PCIMAP_PCIMAP_LO0_SHIFT 0
210#define LOONGSON_PCIMAP_PCIMAP_LO1 0x00000fc0
211#define LOONGSON_PCIMAP_PCIMAP_LO1_SHIFT 6
212#define LOONGSON_PCIMAP_PCIMAP_LO2 0x0003f000
213#define LOONGSON_PCIMAP_PCIMAP_LO2_SHIFT 12
214#define LOONGSON_PCIMAP_PCIMAP_2 0x00040000
215#define LOONGSON_PCIMAP_WIN(WIN, ADDR) \
216 ((((ADDR)>>26) & LOONGSON_PCIMAP_PCIMAP_LO0) << ((WIN)*6))
63 217
64#endif /* __ASM_MACH_LOONGSON_LOONGSON_H */ 218#endif /* __ASM_MACH_LOONGSON_LOONGSON_H */
diff --git a/arch/mips/include/asm/mach-loongson/machine.h b/arch/mips/include/asm/mach-loongson/machine.h
index 206ea2067916..ea5954c4b221 100644
--- a/arch/mips/include/asm/mach-loongson/machine.h
+++ b/arch/mips/include/asm/mach-loongson/machine.h
@@ -13,7 +13,7 @@
13 13
14#ifdef CONFIG_LEMOTE_FULOONG2E 14#ifdef CONFIG_LEMOTE_FULOONG2E
15 15
16#define LOONGSON_UART_BASE (BONITO_PCIIO_BASE + 0x3f8) 16#define LOONGSON_UART_BASE (LOONGSON_PCIIO_BASE + 0x3f8)
17 17
18#define LOONGSON_MACHTYPE MACH_LEMOTE_FL2E 18#define LOONGSON_MACHTYPE MACH_LEMOTE_FL2E
19 19
diff --git a/arch/mips/include/asm/mach-loongson/pci.h b/arch/mips/include/asm/mach-loongson/pci.h
index f1663ca81da0..576487c00470 100644
--- a/arch/mips/include/asm/mach-loongson/pci.h
+++ b/arch/mips/include/asm/mach-loongson/pci.h
@@ -22,13 +22,13 @@
22#ifndef __ASM_MACH_LOONGSON_PCI_H_ 22#ifndef __ASM_MACH_LOONGSON_PCI_H_
23#define __ASM_MACH_LOONGSON_PCI_H_ 23#define __ASM_MACH_LOONGSON_PCI_H_
24 24
25extern struct pci_ops bonito64_pci_ops; 25extern struct pci_ops loongson_pci_ops;
26 26
27#ifdef CONFIG_LEMOTE_FULOONG2E 27#ifdef CONFIG_LEMOTE_FULOONG2E
28 28
29/* this pci memory space is mapped by pcimap in pci.c */ 29/* this pci memory space is mapped by pcimap in pci.c */
30#define LOONGSON_PCI_MEM_START BONITO_PCILO1_BASE 30#define LOONGSON_PCI_MEM_START LOONGSON_PCILO1_BASE
31#define LOONGSON_PCI_MEM_END (BONITO_PCILO1_BASE + 0x04000000 * 2) 31#define LOONGSON_PCI_MEM_END (LOONGSON_PCILO1_BASE + 0x04000000 * 2)
32/* this is an offset from mips_io_port_base */ 32/* this is an offset from mips_io_port_base */
33#define LOONGSON_PCI_IO_START 0x00004000UL 33#define LOONGSON_PCI_IO_START 0x00004000UL
34 34
diff --git a/arch/mips/include/asm/mips-boards/bonito64.h b/arch/mips/include/asm/mips-boards/bonito64.h
index a576ce044c3c..d14e2adc4be5 100644
--- a/arch/mips/include/asm/mips-boards/bonito64.h
+++ b/arch/mips/include/asm/mips-boards/bonito64.h
@@ -26,11 +26,6 @@
26/* offsets from base register */ 26/* offsets from base register */
27#define BONITO(x) (x) 27#define BONITO(x) (x)
28 28
29#elif defined(CONFIG_LEMOTE_FULOONG2E)
30
31#define BONITO(x) (*(volatile u32 *)((char *)CKSEG1ADDR(BONITO_REG_BASE) + (x)))
32#define BONITO_IRQ_BASE 32
33
34#else 29#else
35 30
36/* 31/*