diff options
-rw-r--r-- | arch/mips/include/asm/netlogic/xlp-hal/bridge.h | 69 | ||||
-rw-r--r-- | arch/mips/netlogic/xlp/nlm_hal.c | 26 |
2 files changed, 51 insertions, 44 deletions
diff --git a/arch/mips/include/asm/netlogic/xlp-hal/bridge.h b/arch/mips/include/asm/netlogic/xlp-hal/bridge.h index 4e8eacb9588a..3067f983495d 100644 --- a/arch/mips/include/asm/netlogic/xlp-hal/bridge.h +++ b/arch/mips/include/asm/netlogic/xlp-hal/bridge.h | |||
@@ -69,44 +69,9 @@ | |||
69 | #define BRIDGE_FLASH_LIMIT3 0x13 | 69 | #define BRIDGE_FLASH_LIMIT3 0x13 |
70 | 70 | ||
71 | #define BRIDGE_DRAM_BAR(i) (0x14 + (i)) | 71 | #define BRIDGE_DRAM_BAR(i) (0x14 + (i)) |
72 | #define BRIDGE_DRAM_BAR0 0x14 | ||
73 | #define BRIDGE_DRAM_BAR1 0x15 | ||
74 | #define BRIDGE_DRAM_BAR2 0x16 | ||
75 | #define BRIDGE_DRAM_BAR3 0x17 | ||
76 | #define BRIDGE_DRAM_BAR4 0x18 | ||
77 | #define BRIDGE_DRAM_BAR5 0x19 | ||
78 | #define BRIDGE_DRAM_BAR6 0x1a | ||
79 | #define BRIDGE_DRAM_BAR7 0x1b | ||
80 | |||
81 | #define BRIDGE_DRAM_LIMIT(i) (0x1c + (i)) | 72 | #define BRIDGE_DRAM_LIMIT(i) (0x1c + (i)) |
82 | #define BRIDGE_DRAM_LIMIT0 0x1c | ||
83 | #define BRIDGE_DRAM_LIMIT1 0x1d | ||
84 | #define BRIDGE_DRAM_LIMIT2 0x1e | ||
85 | #define BRIDGE_DRAM_LIMIT3 0x1f | ||
86 | #define BRIDGE_DRAM_LIMIT4 0x20 | ||
87 | #define BRIDGE_DRAM_LIMIT5 0x21 | ||
88 | #define BRIDGE_DRAM_LIMIT6 0x22 | ||
89 | #define BRIDGE_DRAM_LIMIT7 0x23 | ||
90 | |||
91 | #define BRIDGE_DRAM_NODE_TRANSLN(i) (0x24 + (i)) | 73 | #define BRIDGE_DRAM_NODE_TRANSLN(i) (0x24 + (i)) |
92 | #define BRIDGE_DRAM_NODE_TRANSLN0 0x24 | ||
93 | #define BRIDGE_DRAM_NODE_TRANSLN1 0x25 | ||
94 | #define BRIDGE_DRAM_NODE_TRANSLN2 0x26 | ||
95 | #define BRIDGE_DRAM_NODE_TRANSLN3 0x27 | ||
96 | #define BRIDGE_DRAM_NODE_TRANSLN4 0x28 | ||
97 | #define BRIDGE_DRAM_NODE_TRANSLN5 0x29 | ||
98 | #define BRIDGE_DRAM_NODE_TRANSLN6 0x2a | ||
99 | #define BRIDGE_DRAM_NODE_TRANSLN7 0x2b | ||
100 | |||
101 | #define BRIDGE_DRAM_CHNL_TRANSLN(i) (0x2c + (i)) | 74 | #define BRIDGE_DRAM_CHNL_TRANSLN(i) (0x2c + (i)) |
102 | #define BRIDGE_DRAM_CHNL_TRANSLN0 0x2c | ||
103 | #define BRIDGE_DRAM_CHNL_TRANSLN1 0x2d | ||
104 | #define BRIDGE_DRAM_CHNL_TRANSLN2 0x2e | ||
105 | #define BRIDGE_DRAM_CHNL_TRANSLN3 0x2f | ||
106 | #define BRIDGE_DRAM_CHNL_TRANSLN4 0x30 | ||
107 | #define BRIDGE_DRAM_CHNL_TRANSLN5 0x31 | ||
108 | #define BRIDGE_DRAM_CHNL_TRANSLN6 0x32 | ||
109 | #define BRIDGE_DRAM_CHNL_TRANSLN7 0x33 | ||
110 | 75 | ||
111 | #define BRIDGE_PCIEMEM_BASE0 0x34 | 76 | #define BRIDGE_PCIEMEM_BASE0 0x34 |
112 | #define BRIDGE_PCIEMEM_BASE1 0x35 | 77 | #define BRIDGE_PCIEMEM_BASE1 0x35 |
@@ -178,12 +143,42 @@ | |||
178 | #define BRIDGE_GIO_WEIGHT 0x2cb | 143 | #define BRIDGE_GIO_WEIGHT 0x2cb |
179 | #define BRIDGE_FLASH_WEIGHT 0x2cc | 144 | #define BRIDGE_FLASH_WEIGHT 0x2cc |
180 | 145 | ||
146 | /* FIXME verify */ | ||
147 | #define BRIDGE_9XX_FLASH_BAR(i) (0x11 + (i)) | ||
148 | #define BRIDGE_9XX_FLASH_BAR_LIMIT(i) (0x15 + (i)) | ||
149 | |||
150 | #define BRIDGE_9XX_DRAM_BAR(i) (0x19 + (i)) | ||
151 | #define BRIDGE_9XX_DRAM_LIMIT(i) (0x29 + (i)) | ||
152 | #define BRIDGE_9XX_DRAM_NODE_TRANSLN(i) (0x39 + (i)) | ||
153 | #define BRIDGE_9XX_DRAM_CHNL_TRANSLN(i) (0x49 + (i)) | ||
154 | |||
155 | #define BRIDGE_9XX_ADDRESS_ERROR0 0x9d | ||
156 | #define BRIDGE_9XX_ADDRESS_ERROR1 0x9e | ||
157 | #define BRIDGE_9XX_ADDRESS_ERROR2 0x9f | ||
158 | |||
159 | #define BRIDGE_9XX_PCIEMEM_BASE0 0x59 | ||
160 | #define BRIDGE_9XX_PCIEMEM_BASE1 0x5a | ||
161 | #define BRIDGE_9XX_PCIEMEM_BASE2 0x5b | ||
162 | #define BRIDGE_9XX_PCIEMEM_BASE3 0x5c | ||
163 | #define BRIDGE_9XX_PCIEMEM_LIMIT0 0x5d | ||
164 | #define BRIDGE_9XX_PCIEMEM_LIMIT1 0x5e | ||
165 | #define BRIDGE_9XX_PCIEMEM_LIMIT2 0x5f | ||
166 | #define BRIDGE_9XX_PCIEMEM_LIMIT3 0x60 | ||
167 | #define BRIDGE_9XX_PCIEIO_BASE0 0x61 | ||
168 | #define BRIDGE_9XX_PCIEIO_BASE1 0x62 | ||
169 | #define BRIDGE_9XX_PCIEIO_BASE2 0x63 | ||
170 | #define BRIDGE_9XX_PCIEIO_BASE3 0x64 | ||
171 | #define BRIDGE_9XX_PCIEIO_LIMIT0 0x65 | ||
172 | #define BRIDGE_9XX_PCIEIO_LIMIT1 0x66 | ||
173 | #define BRIDGE_9XX_PCIEIO_LIMIT2 0x67 | ||
174 | #define BRIDGE_9XX_PCIEIO_LIMIT3 0x68 | ||
175 | |||
181 | #ifndef __ASSEMBLY__ | 176 | #ifndef __ASSEMBLY__ |
182 | 177 | ||
183 | #define nlm_read_bridge_reg(b, r) nlm_read_reg(b, r) | 178 | #define nlm_read_bridge_reg(b, r) nlm_read_reg(b, r) |
184 | #define nlm_write_bridge_reg(b, r, v) nlm_write_reg(b, r, v) | 179 | #define nlm_write_bridge_reg(b, r, v) nlm_write_reg(b, r, v) |
185 | #define nlm_get_bridge_pcibase(node) \ | 180 | #define nlm_get_bridge_pcibase(node) nlm_pcicfg_base(cpu_is_xlp9xx() ? \ |
186 | nlm_pcicfg_base(XLP_IO_BRIDGE_OFFSET(node)) | 181 | XLP9XX_IO_BRIDGE_OFFSET(node) : XLP_IO_BRIDGE_OFFSET(node)) |
187 | #define nlm_get_bridge_regbase(node) \ | 182 | #define nlm_get_bridge_regbase(node) \ |
188 | (nlm_get_bridge_pcibase(node) + XLP_IO_PCI_HDRSZ) | 183 | (nlm_get_bridge_pcibase(node) + XLP_IO_PCI_HDRSZ) |
189 | 184 | ||
diff --git a/arch/mips/netlogic/xlp/nlm_hal.c b/arch/mips/netlogic/xlp/nlm_hal.c index 61f325d06e95..efd64ac1f407 100644 --- a/arch/mips/netlogic/xlp/nlm_hal.c +++ b/arch/mips/netlogic/xlp/nlm_hal.c | |||
@@ -314,21 +314,33 @@ int xlp_get_dram_map(int n, uint64_t *dram_map) | |||
314 | { | 314 | { |
315 | uint64_t bridgebase, base, lim; | 315 | uint64_t bridgebase, base, lim; |
316 | uint32_t val; | 316 | uint32_t val; |
317 | unsigned int barreg, limreg, xlatreg; | ||
317 | int i, node, rv; | 318 | int i, node, rv; |
318 | 319 | ||
319 | /* Look only at mapping on Node 0, we don't handle crazy configs */ | 320 | /* Look only at mapping on Node 0, we don't handle crazy configs */ |
320 | bridgebase = nlm_get_bridge_regbase(0); | 321 | bridgebase = nlm_get_bridge_regbase(0); |
321 | rv = 0; | 322 | rv = 0; |
322 | for (i = 0; i < 8; i++) { | 323 | for (i = 0; i < 8; i++) { |
323 | val = nlm_read_bridge_reg(bridgebase, | 324 | if (cpu_is_xlp9xx()) { |
324 | BRIDGE_DRAM_NODE_TRANSLN(i)); | 325 | barreg = BRIDGE_9XX_DRAM_BAR(i); |
325 | node = (val >> 1) & 0x3; | 326 | limreg = BRIDGE_9XX_DRAM_LIMIT(i); |
326 | if (n >= 0 && n != node) | 327 | xlatreg = BRIDGE_9XX_DRAM_NODE_TRANSLN(i); |
327 | continue; | 328 | } else { |
328 | val = nlm_read_bridge_reg(bridgebase, BRIDGE_DRAM_BAR(i)); | 329 | barreg = BRIDGE_DRAM_BAR(i); |
330 | limreg = BRIDGE_DRAM_LIMIT(i); | ||
331 | xlatreg = BRIDGE_DRAM_NODE_TRANSLN(i); | ||
332 | } | ||
333 | if (n >= 0) { | ||
334 | /* node specified, get node mapping of BAR */ | ||
335 | val = nlm_read_bridge_reg(bridgebase, xlatreg); | ||
336 | node = (val >> 1) & 0x3; | ||
337 | if (n != node) | ||
338 | continue; | ||
339 | } | ||
340 | val = nlm_read_bridge_reg(bridgebase, barreg); | ||
329 | val = (val >> 12) & 0xfffff; | 341 | val = (val >> 12) & 0xfffff; |
330 | base = (uint64_t) val << 20; | 342 | base = (uint64_t) val << 20; |
331 | val = nlm_read_bridge_reg(bridgebase, BRIDGE_DRAM_LIMIT(i)); | 343 | val = nlm_read_bridge_reg(bridgebase, limreg); |
332 | val = (val >> 12) & 0xfffff; | 344 | val = (val >> 12) & 0xfffff; |
333 | if (val == 0) /* BAR not used */ | 345 | if (val == 0) /* BAR not used */ |
334 | continue; | 346 | continue; |