Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

MIPS: Netlogic: XLP9XX bridge and DRAM code

Update bridge code. Add code to the XLP9XX registers for DRAM
size, limit and node when running on XLPXX

Signed-off-by: Jayachandran C <jchandra@broadcom.com>
Signed-off-by: John Crispin <blogic@openwrt.org>
Patchwork: http://patchwork.linux-mips.org/patch/6282/

authored by

Jayachandran C and committed by
Ralf Baechle
e7aa6c66 61673de1

+51 -44
+32 -37
arch/mips/include/asm/netlogic/xlp-hal/bridge.h
··· 69 69 #define BRIDGE_FLASH_LIMIT3 0x13 70 70 71 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 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 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 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 76 #define BRIDGE_PCIEMEM_BASE0 0x34 112 77 #define BRIDGE_PCIEMEM_BASE1 0x35 ··· 143 178 #define BRIDGE_GIO_WEIGHT 0x2cb 144 179 #define BRIDGE_FLASH_WEIGHT 0x2cc 145 180 181 + /* FIXME verify */ 182 + #define BRIDGE_9XX_FLASH_BAR(i) (0x11 + (i)) 183 + #define BRIDGE_9XX_FLASH_BAR_LIMIT(i) (0x15 + (i)) 184 + 185 + #define BRIDGE_9XX_DRAM_BAR(i) (0x19 + (i)) 186 + #define BRIDGE_9XX_DRAM_LIMIT(i) (0x29 + (i)) 187 + #define BRIDGE_9XX_DRAM_NODE_TRANSLN(i) (0x39 + (i)) 188 + #define BRIDGE_9XX_DRAM_CHNL_TRANSLN(i) (0x49 + (i)) 189 + 190 + #define BRIDGE_9XX_ADDRESS_ERROR0 0x9d 191 + #define BRIDGE_9XX_ADDRESS_ERROR1 0x9e 192 + #define BRIDGE_9XX_ADDRESS_ERROR2 0x9f 193 + 194 + #define BRIDGE_9XX_PCIEMEM_BASE0 0x59 195 + #define BRIDGE_9XX_PCIEMEM_BASE1 0x5a 196 + #define BRIDGE_9XX_PCIEMEM_BASE2 0x5b 197 + #define BRIDGE_9XX_PCIEMEM_BASE3 0x5c 198 + #define BRIDGE_9XX_PCIEMEM_LIMIT0 0x5d 199 + #define BRIDGE_9XX_PCIEMEM_LIMIT1 0x5e 200 + #define BRIDGE_9XX_PCIEMEM_LIMIT2 0x5f 201 + #define BRIDGE_9XX_PCIEMEM_LIMIT3 0x60 202 + #define BRIDGE_9XX_PCIEIO_BASE0 0x61 203 + #define BRIDGE_9XX_PCIEIO_BASE1 0x62 204 + #define BRIDGE_9XX_PCIEIO_BASE2 0x63 205 + #define BRIDGE_9XX_PCIEIO_BASE3 0x64 206 + #define BRIDGE_9XX_PCIEIO_LIMIT0 0x65 207 + #define BRIDGE_9XX_PCIEIO_LIMIT1 0x66 208 + #define BRIDGE_9XX_PCIEIO_LIMIT2 0x67 209 + #define BRIDGE_9XX_PCIEIO_LIMIT3 0x68 210 + 146 211 #ifndef __ASSEMBLY__ 147 212 148 213 #define nlm_read_bridge_reg(b, r) nlm_read_reg(b, r) 149 214 #define nlm_write_bridge_reg(b, r, v) nlm_write_reg(b, r, v) 150 - #define nlm_get_bridge_pcibase(node) \ 151 - nlm_pcicfg_base(XLP_IO_BRIDGE_OFFSET(node)) 215 + #define nlm_get_bridge_pcibase(node) nlm_pcicfg_base(cpu_is_xlp9xx() ? \ 216 + XLP9XX_IO_BRIDGE_OFFSET(node) : XLP_IO_BRIDGE_OFFSET(node)) 152 217 #define nlm_get_bridge_regbase(node) \ 153 218 (nlm_get_bridge_pcibase(node) + XLP_IO_PCI_HDRSZ) 154 219
+19 -7
arch/mips/netlogic/xlp/nlm_hal.c
··· 314 314 { 315 315 uint64_t bridgebase, base, lim; 316 316 uint32_t val; 317 + unsigned int barreg, limreg, xlatreg; 317 318 int i, node, rv; 318 319 319 320 /* Look only at mapping on Node 0, we don't handle crazy configs */ 320 321 bridgebase = nlm_get_bridge_regbase(0); 321 322 rv = 0; 322 323 for (i = 0; i < 8; i++) { 323 - val = nlm_read_bridge_reg(bridgebase, 324 - BRIDGE_DRAM_NODE_TRANSLN(i)); 325 - node = (val >> 1) & 0x3; 326 - if (n >= 0 && n != node) 327 - continue; 328 - val = nlm_read_bridge_reg(bridgebase, BRIDGE_DRAM_BAR(i)); 324 + if (cpu_is_xlp9xx()) { 325 + barreg = BRIDGE_9XX_DRAM_BAR(i); 326 + limreg = BRIDGE_9XX_DRAM_LIMIT(i); 327 + xlatreg = BRIDGE_9XX_DRAM_NODE_TRANSLN(i); 328 + } else { 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 341 val = (val >> 12) & 0xfffff; 330 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 344 val = (val >> 12) & 0xfffff; 333 345 if (val == 0) /* BAR not used */ 334 346 continue;