[MIPS] Malta: Fix for SOCitSC based Maltas

And an attempt to tidy up the core/controller differences.

Signed-off-by: Chris Dearman <chris@mips.com>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>

authored by Chris Dearman and committed by Ralf Baechle b72c0526 eedab661

+87 -64
+44 -18
arch/mips/mips-boards/generic/init.c
··· 57 57 58 58 int init_debug = 0; 59 59 60 - unsigned int mips_revision_corid; 60 + int mips_revision_corid; 61 + int mips_revision_sconid; 61 62 62 63 /* Bonito64 system controller register base. */ 63 64 unsigned long _pcictrl_bonito; ··· 276 275 else 277 276 mips_revision_corid = MIPS_REVISION_CORID_CORE_EMUL_MSC; 278 277 } 279 - switch(mips_revision_corid) { 278 + 279 + mips_revision_sconid = MIPS_REVISION_SCONID; 280 + if (mips_revision_sconid == MIPS_REVISION_SCON_OTHER) { 281 + switch (mips_revision_corid) { 282 + case MIPS_REVISION_CORID_QED_RM5261: 283 + case MIPS_REVISION_CORID_CORE_LV: 284 + case MIPS_REVISION_CORID_CORE_FPGA: 285 + case MIPS_REVISION_CORID_CORE_FPGAR2: 286 + mips_revision_sconid = MIPS_REVISION_SCON_GT64120; 287 + break; 288 + case MIPS_REVISION_CORID_CORE_EMUL_BON: 289 + case MIPS_REVISION_CORID_BONITO64: 290 + case MIPS_REVISION_CORID_CORE_20K: 291 + mips_revision_sconid = MIPS_REVISION_SCON_BONITO; 292 + break; 293 + case MIPS_REVISION_CORID_CORE_MSC: 294 + case MIPS_REVISION_CORID_CORE_FPGA2: 295 + case MIPS_REVISION_CORID_CORE_FPGA3: 296 + case MIPS_REVISION_CORID_CORE_24K: 297 + case MIPS_REVISION_CORID_CORE_EMUL_MSC: 298 + mips_revision_sconid = MIPS_REVISION_SCON_SOCIT; 299 + break; 300 + default: 301 + mips_display_message("CC Error"); 302 + while (1); /* We die here... */ 303 + } 304 + } 305 + 306 + switch (mips_revision_sconid) { 280 307 u32 start, map, mask, data; 281 308 282 - case MIPS_REVISION_CORID_QED_RM5261: 283 - case MIPS_REVISION_CORID_CORE_LV: 284 - case MIPS_REVISION_CORID_CORE_FPGA: 285 - case MIPS_REVISION_CORID_CORE_FPGAR2: 309 + case MIPS_REVISION_SCON_GT64120: 286 310 /* 287 311 * Setup the North bridge to do Master byte-lane swapping 288 312 * when running in bigendian. ··· 331 305 set_io_port_base(MALTA_GT_PORT_BASE); 332 306 break; 333 307 334 - case MIPS_REVISION_CORID_CORE_EMUL_BON: 335 - case MIPS_REVISION_CORID_BONITO64: 336 - case MIPS_REVISION_CORID_CORE_20K: 308 + case MIPS_REVISION_SCON_BONITO: 337 309 _pcictrl_bonito_pcicfg = (unsigned long)ioremap(BONITO_PCICFG_BASE, BONITO_PCICFG_SIZE); 338 310 339 311 /* ··· 358 334 set_io_port_base(MALTA_BONITO_PORT_BASE); 359 335 break; 360 336 361 - case MIPS_REVISION_CORID_CORE_MSC: 362 - case MIPS_REVISION_CORID_CORE_FPGA2: 363 - case MIPS_REVISION_CORID_CORE_FPGA3: 364 - case MIPS_REVISION_CORID_CORE_24K: 365 - case MIPS_REVISION_CORID_CORE_EMUL_MSC: 337 + case MIPS_REVISION_SCON_SOCIT: 338 + case MIPS_REVISION_SCON_ROCIT: 366 339 _pcictrl_msc = (unsigned long)ioremap(MIPS_MSC01_PCI_REG_BASE, 0x2000); 367 - 340 + mips_pci_controller: 368 341 mb(); 369 342 MSC_READ(MSC01_PCI_CFG, data); 370 343 MSC_WRITE(MSC01_PCI_CFG, data & ~MSC01_PCI_CFG_EN_BIT); ··· 395 374 set_io_port_base(MALTA_MSC_PORT_BASE); 396 375 break; 397 376 377 + case MIPS_REVISION_SCON_SOCITSC: 378 + case MIPS_REVISION_SCON_SOCITSCP: 379 + _pcictrl_msc = (unsigned long)ioremap(MIPS_SOCITSC_PCI_REG_BASE, 0x2000); 380 + goto mips_pci_controller; 381 + 398 382 default: 399 - /* Unknown Core card */ 400 - mips_display_message("CC Error"); 401 - while(1); /* We die here... */ 383 + /* Unknown system controller */ 384 + mips_display_message("SC Error"); 385 + while (1); /* We die here... */ 402 386 } 403 387 #endif 404 388 board_nmi_handler_setup = mips_nmi_setup;
+7 -13
arch/mips/mips-boards/generic/pci.c
··· 92 92 struct pci_controller *controller; 93 93 resource_size_t start, end, map, start1, end1, map1, map2, map3, mask; 94 94 95 - switch (mips_revision_corid) { 96 - case MIPS_REVISION_CORID_QED_RM5261: 97 - case MIPS_REVISION_CORID_CORE_LV: 98 - case MIPS_REVISION_CORID_CORE_FPGA: 99 - case MIPS_REVISION_CORID_CORE_FPGAR2: 95 + switch (mips_revision_sconid) { 96 + case MIPS_REVISION_SCON_GT64120: 100 97 /* 101 98 * Due to a bug in the Galileo system controller, we need 102 99 * to setup the PCI BAR for the Galileo internal registers. ··· 158 161 controller = &gt64120_controller; 159 162 break; 160 163 161 - case MIPS_REVISION_CORID_BONITO64: 162 - case MIPS_REVISION_CORID_CORE_20K: 163 - case MIPS_REVISION_CORID_CORE_EMUL_BON: 164 + case MIPS_REVISION_SCON_BONITO: 164 165 /* Set up resource ranges from the controller's registers. */ 165 166 map = BONITO_PCIMAP; 166 167 map1 = (BONITO_PCIMAP & BONITO_PCIMAP_PCIMAP_LO0) >> ··· 190 195 controller = &bonito64_controller; 191 196 break; 192 197 193 - case MIPS_REVISION_CORID_CORE_MSC: 194 - case MIPS_REVISION_CORID_CORE_FPGA2: 195 - case MIPS_REVISION_CORID_CORE_FPGA3: 196 - case MIPS_REVISION_CORID_CORE_24K: 197 - case MIPS_REVISION_CORID_CORE_EMUL_MSC: 198 + case MIPS_REVISION_SCON_SOCIT: 199 + case MIPS_REVISION_SCON_ROCIT: 200 + case MIPS_REVISION_SCON_SOCITSC: 201 + case MIPS_REVISION_SCON_SOCITSCP: 198 202 /* Set up resource ranges from the controller's registers. */ 199 203 MSC_READ(MSC01_PCI_SC2PMBASL, start); 200 204 MSC_READ(MSC01_PCI_SC2PMMSKL, mask);
+15 -27
arch/mips/mips-boards/malta/malta_int.c
··· 53 53 * Determine highest priority pending interrupt by performing 54 54 * a PCI Interrupt Acknowledge cycle. 55 55 */ 56 - switch(mips_revision_corid) { 57 - case MIPS_REVISION_CORID_CORE_MSC: 58 - case MIPS_REVISION_CORID_CORE_FPGA2: 59 - case MIPS_REVISION_CORID_CORE_FPGA3: 60 - case MIPS_REVISION_CORID_CORE_24K: 61 - case MIPS_REVISION_CORID_CORE_EMUL_MSC: 56 + switch (mips_revision_sconid) { 57 + case MIPS_REVISION_SCON_SOCIT: 58 + case MIPS_REVISION_SCON_ROCIT: 59 + case MIPS_REVISION_SCON_SOCITSC: 60 + case MIPS_REVISION_SCON_SOCITSCP: 62 61 MSC_READ(MSC01_PCI_IACK, irq); 63 62 irq &= 0xff; 64 63 break; 65 - case MIPS_REVISION_CORID_QED_RM5261: 66 - case MIPS_REVISION_CORID_CORE_LV: 67 - case MIPS_REVISION_CORID_CORE_FPGA: 68 - case MIPS_REVISION_CORID_CORE_FPGAR2: 64 + case MIPS_REVISION_SCON_GT64120: 69 65 irq = GT_READ(GT_PCI0_IACK_OFS); 70 66 irq &= 0xff; 71 67 break; 72 - case MIPS_REVISION_CORID_BONITO64: 73 - case MIPS_REVISION_CORID_CORE_20K: 74 - case MIPS_REVISION_CORID_CORE_EMUL_BON: 68 + case MIPS_REVISION_SCON_BONITO: 75 69 /* The following will generate a PCI IACK cycle on the 76 70 * Bonito controller. It's a little bit kludgy, but it 77 71 * was the easiest way to implement it in hardware at ··· 83 89 BONITO_PCIMAP_CFG = 0; 84 90 break; 85 91 default: 86 - printk("Unknown Core card, don't know the system controller.\n"); 92 + printk("Unknown system controller.\n"); 87 93 return -1; 88 94 } 89 95 return irq; ··· 138 144 Do it for the others too. 139 145 */ 140 146 141 - switch(mips_revision_corid) { 142 - case MIPS_REVISION_CORID_CORE_MSC: 143 - case MIPS_REVISION_CORID_CORE_FPGA2: 144 - case MIPS_REVISION_CORID_CORE_FPGA3: 145 - case MIPS_REVISION_CORID_CORE_24K: 146 - case MIPS_REVISION_CORID_CORE_EMUL_MSC: 147 + switch (mips_revision_sconid) { 148 + case MIPS_REVISION_SCON_SOCIT: 149 + case MIPS_REVISION_SCON_ROCIT: 150 + case MIPS_REVISION_SCON_SOCITSC: 151 + case MIPS_REVISION_SCON_SOCITSCP: 147 152 ll_msc_irq(); 148 153 break; 149 - case MIPS_REVISION_CORID_QED_RM5261: 150 - case MIPS_REVISION_CORID_CORE_LV: 151 - case MIPS_REVISION_CORID_CORE_FPGA: 152 - case MIPS_REVISION_CORID_CORE_FPGAR2: 154 + case MIPS_REVISION_SCON_GT64120: 153 155 intrcause = GT_READ(GT_INTRCAUSE_OFS); 154 156 datalo = GT_READ(GT_CPUERR_ADDRLO_OFS); 155 157 datahi = GT_READ(GT_CPUERR_ADDRHI_OFS); 156 158 printk("GT_INTRCAUSE = %08x\n", intrcause); 157 159 printk("GT_CPUERR_ADDR = %02x%08x\n", datahi, datalo); 158 160 break; 159 - case MIPS_REVISION_CORID_BONITO64: 160 - case MIPS_REVISION_CORID_CORE_20K: 161 - case MIPS_REVISION_CORID_CORE_EMUL_BON: 161 + case MIPS_REVISION_SCON_BONITO: 162 162 pcibadaddr = BONITO_PCIBADADDR; 163 163 pcimstat = BONITO_PCIMSTAT; 164 164 intisr = BONITO_INTISR;
+1 -3
arch/mips/mips-boards/malta/malta_setup.c
··· 103 103 kgdb_config (); 104 104 #endif 105 105 106 - if ((mips_revision_corid == MIPS_REVISION_CORID_BONITO64) || 107 - (mips_revision_corid == MIPS_REVISION_CORID_CORE_20K) || 108 - (mips_revision_corid == MIPS_REVISION_CORID_CORE_EMUL_BON)) { 106 + if (mips_revision_sconid == MIPS_REVISION_SCON_BONITO) { 109 107 char *argptr; 110 108 111 109 argptr = prom_getcmdline();
+19 -3
include/asm-mips/mips-boards/generic.h
··· 73 73 * CoreEMUL with Bonito System Controller is treated like a Core20K 74 74 * CoreEMUL with SOC-it 101 System Controller is treated like a CoreMSC 75 75 */ 76 - #define MIPS_REVISION_CORID_CORE_EMUL_BON 0x63 77 - #define MIPS_REVISION_CORID_CORE_EMUL_MSC 0x65 76 + #define MIPS_REVISION_CORID_CORE_EMUL_BON -1 77 + #define MIPS_REVISION_CORID_CORE_EMUL_MSC -2 78 78 79 79 #define MIPS_REVISION_CORID (((*(volatile u32 *)ioremap(MIPS_REVISION_REG, 4)) >> 10) & 0x3f) 80 80 81 - extern unsigned int mips_revision_corid; 81 + extern int mips_revision_corid; 82 + 83 + #define MIPS_REVISION_SCON_OTHER 0 84 + #define MIPS_REVISION_SCON_SOCITSC 1 85 + #define MIPS_REVISION_SCON_SOCITSCP 2 86 + 87 + /* Artificial SCON defines for MIPS_REVISION_SCON_OTHER */ 88 + #define MIPS_REVISION_SCON_UNKNOWN -1 89 + #define MIPS_REVISION_SCON_GT64120 -2 90 + #define MIPS_REVISION_SCON_BONITO -3 91 + #define MIPS_REVISION_SCON_BRTL -4 92 + #define MIPS_REVISION_SCON_SOCIT -5 93 + #define MIPS_REVISION_SCON_ROCIT -6 94 + 95 + #define MIPS_REVISION_SCONID (((*(volatile u32 *)ioremap(MIPS_REVISION_REG, 4)) >> 24) & 0xff) 96 + 97 + extern int mips_revision_sconid; 82 98 83 99 #ifdef CONFIG_PCI 84 100 extern void mips_pcibios_init(void);
+1
include/asm-mips/mips-boards/msc01_pci.h
··· 208 208 * latter, they should be moved elsewhere. 209 209 */ 210 210 #define MIPS_MSC01_PCI_REG_BASE 0x1bd00000 211 + #define MIPS_SOCITSC_PCI_REG_BASE 0x1ff10000 211 212 212 213 extern unsigned long _pcictrl_msc; 213 214