| 1 | --- a/arch/mips/config-shared.in |
| 2 | +++ b/arch/mips/config-shared.in |
| 3 | @@ -208,6 +208,14 @@ if [ "$CONFIG_SIBYTE_SB1xxx_SOC" = "y" ] |
| 4 | fi |
| 5 | define_bool CONFIG_MIPS_RTC y |
| 6 | fi |
| 7 | +dep_bool 'Support for Broadcom MIPS-based boards' CONFIG_MIPS_BRCM $CONFIG_EXPERIMENTAL |
| 8 | +dep_bool 'Support for Broadcom BCM947XX' CONFIG_BCM947XX $CONFIG_MIPS_BRCM |
| 9 | +if [ "$CONFIG_BCM947XX" = "y" ] ; then |
| 10 | + bool ' Support for Broadcom BCM4710' CONFIG_BCM4710 |
| 11 | + bool ' Support for Broadcom BCM4310' CONFIG_BCM4310 |
| 12 | + bool ' Support for Broadcom BCM4704' CONFIG_BCM4704 |
| 13 | + bool ' Support for Broadcom BCM5365' CONFIG_BCM5365 |
| 14 | +fi |
| 15 | bool 'Support for SNI RM200 PCI' CONFIG_SNI_RM200_PCI |
| 16 | bool 'Support for TANBAC TB0226 (Mbase)' CONFIG_TANBAC_TB0226 |
| 17 | bool 'Support for TANBAC TB0229 (VR4131DIMM)' CONFIG_TANBAC_TB0229 |
| 18 | @@ -229,6 +237,11 @@ define_bool CONFIG_RWSEM_GENERIC_SPINLOC |
| 19 | define_bool CONFIG_RWSEM_XCHGADD_ALGORITHM n |
| 20 | |
| 21 | # |
| 22 | +# Provide an option for a default kernel command line |
| 23 | +# |
| 24 | +string 'Default kernel command string' CONFIG_CMDLINE "" |
| 25 | + |
| 26 | +# |
| 27 | # Select some configuration options automatically based on user selections. |
| 28 | # |
| 29 | if [ "$CONFIG_ACER_PICA_61" = "y" ]; then |
| 30 | @@ -554,6 +567,12 @@ if [ "$CONFIG_SIBYTE_SB1xxx_SOC" = "y" ] |
| 31 | define_bool CONFIG_SWAP_IO_SPACE_L y |
| 32 | define_bool CONFIG_BOOT_ELF32 y |
| 33 | fi |
| 34 | +if [ "$CONFIG_BCM947XX" = "y" ] ; then |
| 35 | + define_bool CONFIG_PCI y |
| 36 | + define_bool CONFIG_NONCOHERENT_IO y |
| 37 | + define_bool CONFIG_NEW_TIME_C y |
| 38 | + define_bool CONFIG_NEW_IRQ y |
| 39 | +fi |
| 40 | if [ "$CONFIG_SNI_RM200_PCI" = "y" ]; then |
| 41 | define_bool CONFIG_ARC32 y |
| 42 | define_bool CONFIG_ARC_MEMORY y |
| 43 | @@ -1042,7 +1061,11 @@ comment 'Kernel hacking' |
| 44 | |
| 45 | bool 'Are you using a crosscompiler' CONFIG_CROSSCOMPILE |
| 46 | bool 'Enable run-time debugging' CONFIG_RUNTIME_DEBUG |
| 47 | -bool 'Remote GDB kernel debugging' CONFIG_KGDB |
| 48 | +if [ "$CONFIG_BCM947XX" = "y" ] ; then |
| 49 | + bool 'Remote GDB kernel debugging' CONFIG_REMOTE_DEBUG |
| 50 | +else |
| 51 | + bool 'Remote GDB kernel debugging' CONFIG_KGDB |
| 52 | +fi |
| 53 | dep_bool ' Console output to GDB' CONFIG_GDB_CONSOLE $CONFIG_KGDB |
| 54 | if [ "$CONFIG_KGDB" = "y" ]; then |
| 55 | define_bool CONFIG_DEBUG_INFO y |
| 56 | --- a/arch/mips/kernel/cpu-probe.c |
| 57 | +++ b/arch/mips/kernel/cpu-probe.c |
| 58 | @@ -162,7 +162,7 @@ static inline int __cpu_has_fpu(void) |
| 59 | |
| 60 | static inline void cpu_probe_legacy(struct cpuinfo_mips *c) |
| 61 | { |
| 62 | - switch (c->processor_id & 0xff00) { |
| 63 | + switch (c->processor_id & PRID_IMP_MASK) { |
| 64 | case PRID_IMP_R2000: |
| 65 | c->cputype = CPU_R2000; |
| 66 | c->isa_level = MIPS_CPU_ISA_I; |
| 67 | @@ -172,7 +172,7 @@ static inline void cpu_probe_legacy(stru |
| 68 | c->tlbsize = 64; |
| 69 | break; |
| 70 | case PRID_IMP_R3000: |
| 71 | - if ((c->processor_id & 0xff) == PRID_REV_R3000A) |
| 72 | + if ((c->processor_id & PRID_REV_MASK) == PRID_REV_R3000A) |
| 73 | if (cpu_has_confreg()) |
| 74 | c->cputype = CPU_R3081E; |
| 75 | else |
| 76 | @@ -187,12 +187,12 @@ static inline void cpu_probe_legacy(stru |
| 77 | break; |
| 78 | case PRID_IMP_R4000: |
| 79 | if (read_c0_config() & CONF_SC) { |
| 80 | - if ((c->processor_id & 0xff) >= PRID_REV_R4400) |
| 81 | + if ((c->processor_id & PRID_REV_MASK) >= PRID_REV_R4400) |
| 82 | c->cputype = CPU_R4400PC; |
| 83 | else |
| 84 | c->cputype = CPU_R4000PC; |
| 85 | } else { |
| 86 | - if ((c->processor_id & 0xff) >= PRID_REV_R4400) |
| 87 | + if ((c->processor_id & PRID_REV_MASK) >= PRID_REV_R4400) |
| 88 | c->cputype = CPU_R4400SC; |
| 89 | else |
| 90 | c->cputype = CPU_R4000SC; |
| 91 | @@ -438,7 +438,7 @@ static inline void decode_config1(struct |
| 92 | static inline void cpu_probe_mips(struct cpuinfo_mips *c) |
| 93 | { |
| 94 | decode_config1(c); |
| 95 | - switch (c->processor_id & 0xff00) { |
| 96 | + switch (c->processor_id & PRID_IMP_MASK) { |
| 97 | case PRID_IMP_4KC: |
| 98 | c->cputype = CPU_4KC; |
| 99 | c->isa_level = MIPS_CPU_ISA_M32; |
| 100 | @@ -479,10 +479,10 @@ static inline void cpu_probe_alchemy(str |
| 101 | { |
| 102 | decode_config1(c); |
| 103 | c->options |= MIPS_CPU_PREFETCH; |
| 104 | - switch (c->processor_id & 0xff00) { |
| 105 | + switch (c->processor_id & PRID_IMP_MASK) { |
| 106 | case PRID_IMP_AU1_REV1: |
| 107 | case PRID_IMP_AU1_REV2: |
| 108 | - switch ((c->processor_id >> 24) & 0xff) { |
| 109 | + switch ((c->processor_id >> 24) & PRID_REV_MASK) { |
| 110 | case 0: |
| 111 | c->cputype = CPU_AU1000; |
| 112 | break; |
| 113 | @@ -510,10 +510,34 @@ static inline void cpu_probe_alchemy(str |
| 114 | } |
| 115 | } |
| 116 | |
| 117 | +static inline void cpu_probe_broadcom(struct cpuinfo_mips *c) |
| 118 | +{ |
| 119 | + decode_config1(c); |
| 120 | + c->options |= MIPS_CPU_PREFETCH; |
| 121 | + switch (c->processor_id & PRID_IMP_MASK) { |
| 122 | + case PRID_IMP_BCM4710: |
| 123 | + c->cputype = CPU_BCM4710; |
| 124 | + c->options = MIPS_CPU_TLB | MIPS_CPU_4KEX | |
| 125 | + MIPS_CPU_4KTLB | MIPS_CPU_COUNTER; |
| 126 | + c->scache.flags = MIPS_CACHE_NOT_PRESENT; |
| 127 | + break; |
| 128 | + case PRID_IMP_4KC: |
| 129 | + case PRID_IMP_BCM3302: |
| 130 | + c->cputype = CPU_BCM3302; |
| 131 | + c->options = MIPS_CPU_TLB | MIPS_CPU_4KEX | |
| 132 | + MIPS_CPU_4KTLB | MIPS_CPU_COUNTER; |
| 133 | + c->scache.flags = MIPS_CACHE_NOT_PRESENT; |
| 134 | + break; |
| 135 | + default: |
| 136 | + c->cputype = CPU_UNKNOWN; |
| 137 | + break; |
| 138 | + } |
| 139 | +} |
| 140 | + |
| 141 | static inline void cpu_probe_sibyte(struct cpuinfo_mips *c) |
| 142 | { |
| 143 | decode_config1(c); |
| 144 | - switch (c->processor_id & 0xff00) { |
| 145 | + switch (c->processor_id & PRID_IMP_MASK) { |
| 146 | case PRID_IMP_SB1: |
| 147 | c->cputype = CPU_SB1; |
| 148 | c->isa_level = MIPS_CPU_ISA_M64; |
| 149 | @@ -535,7 +559,7 @@ static inline void cpu_probe_sibyte(stru |
| 150 | static inline void cpu_probe_sandcraft(struct cpuinfo_mips *c) |
| 151 | { |
| 152 | decode_config1(c); |
| 153 | - switch (c->processor_id & 0xff00) { |
| 154 | + switch (c->processor_id & PRID_IMP_MASK) { |
| 155 | case PRID_IMP_SR71000: |
| 156 | c->cputype = CPU_SR71000; |
| 157 | c->isa_level = MIPS_CPU_ISA_M64; |
| 158 | @@ -560,7 +584,7 @@ __init void cpu_probe(void) |
| 159 | c->cputype = CPU_UNKNOWN; |
| 160 | |
| 161 | c->processor_id = read_c0_prid(); |
| 162 | - switch (c->processor_id & 0xff0000) { |
| 163 | + switch (c->processor_id & PRID_COMP_MASK) { |
| 164 | |
| 165 | case PRID_COMP_LEGACY: |
| 166 | cpu_probe_legacy(c); |
| 167 | @@ -571,6 +595,9 @@ __init void cpu_probe(void) |
| 168 | case PRID_COMP_ALCHEMY: |
| 169 | cpu_probe_alchemy(c); |
| 170 | break; |
| 171 | + case PRID_COMP_BROADCOM: |
| 172 | + cpu_probe_broadcom(c); |
| 173 | + break; |
| 174 | case PRID_COMP_SIBYTE: |
| 175 | cpu_probe_sibyte(c); |
| 176 | break; |
| 177 | --- a/arch/mips/kernel/head.S |
| 178 | +++ b/arch/mips/kernel/head.S |
| 179 | @@ -28,12 +28,20 @@ |
| 180 | #include <asm/mipsregs.h> |
| 181 | #include <asm/stackframe.h> |
| 182 | |
| 183 | +#ifdef CONFIG_BCM4710 |
| 184 | +#undef eret |
| 185 | +#define eret nop; nop; eret |
| 186 | +#endif |
| 187 | + |
| 188 | .text |
| 189 | + j kernel_entry |
| 190 | + nop |
| 191 | + |
| 192 | /* |
| 193 | * Reserved space for exception handlers. |
| 194 | * Necessary for machines which link their kernels at KSEG0. |
| 195 | */ |
| 196 | - .fill 0x400 |
| 197 | + .fill 0x3f4 |
| 198 | |
| 199 | /* The following two symbols are used for kernel profiling. */ |
| 200 | EXPORT(stext) |
| 201 | --- a/arch/mips/kernel/proc.c |
| 202 | +++ b/arch/mips/kernel/proc.c |
| 203 | @@ -78,9 +78,10 @@ static const char *cpu_name[] = { |
| 204 | [CPU_AU1550] "Au1550", |
| 205 | [CPU_24K] "MIPS 24K", |
| 206 | [CPU_AU1200] "Au1200", |
| 207 | + [CPU_BCM4710] "BCM4710", |
| 208 | + [CPU_BCM3302] "BCM3302", |
| 209 | }; |
| 210 | |
| 211 | - |
| 212 | static int show_cpuinfo(struct seq_file *m, void *v) |
| 213 | { |
| 214 | unsigned int version = current_cpu_data.processor_id; |
| 215 | --- a/arch/mips/kernel/setup.c |
| 216 | +++ b/arch/mips/kernel/setup.c |
| 217 | @@ -493,6 +493,7 @@ void __init setup_arch(char **cmdline_p) |
| 218 | void swarm_setup(void); |
| 219 | void hp_setup(void); |
| 220 | void au1x00_setup(void); |
| 221 | + void brcm_setup(void); |
| 222 | void frame_info_init(void); |
| 223 | |
| 224 | frame_info_init(); |
| 225 | @@ -691,6 +692,11 @@ void __init setup_arch(char **cmdline_p) |
| 226 | pmc_yosemite_setup(); |
| 227 | break; |
| 228 | #endif |
| 229 | +#if defined(CONFIG_BCM4710) || defined(CONFIG_BCM4310) |
| 230 | + case MACH_GROUP_BRCM: |
| 231 | + brcm_setup(); |
| 232 | + break; |
| 233 | +#endif |
| 234 | default: |
| 235 | panic("Unsupported architecture"); |
| 236 | } |
| 237 | --- a/arch/mips/kernel/traps.c |
| 238 | +++ b/arch/mips/kernel/traps.c |
| 239 | @@ -920,6 +920,7 @@ void __init per_cpu_trap_init(void) |
| 240 | void __init trap_init(void) |
| 241 | { |
| 242 | extern char except_vec1_generic; |
| 243 | + extern char except_vec2_generic; |
| 244 | extern char except_vec3_generic, except_vec3_r4000; |
| 245 | extern char except_vec_ejtag_debug; |
| 246 | extern char except_vec4; |
| 247 | @@ -927,6 +928,7 @@ void __init trap_init(void) |
| 248 | |
| 249 | /* Copy the generic exception handler code to it's final destination. */ |
| 250 | memcpy((void *)(KSEG0 + 0x80), &except_vec1_generic, 0x80); |
| 251 | + memcpy((void *)(KSEG0 + 0x100), &except_vec2_generic, 0x80); |
| 252 | |
| 253 | /* |
| 254 | * Setup default vectors |
| 255 | @@ -985,6 +987,12 @@ void __init trap_init(void) |
| 256 | set_except_vector(13, handle_tr); |
| 257 | set_except_vector(22, handle_mdmx); |
| 258 | |
| 259 | + if (current_cpu_data.cputype == CPU_SB1) { |
| 260 | + /* Enable timer interrupt and scd mapped interrupt */ |
| 261 | + clear_c0_status(0xf000); |
| 262 | + set_c0_status(0xc00); |
| 263 | + } |
| 264 | + |
| 265 | if (cpu_has_fpu && !cpu_has_nofpuex) |
| 266 | set_except_vector(15, handle_fpe); |
| 267 | |
| 268 | --- a/arch/mips/Makefile |
| 269 | +++ b/arch/mips/Makefile |
| 270 | @@ -726,6 +726,19 @@ LOADADDR += 0x80020000 |
| 271 | endif |
| 272 | |
| 273 | # |
| 274 | +# Broadcom BCM947XX variants |
| 275 | +# |
| 276 | +ifdef CONFIG_BCM947XX |
| 277 | +LIBS += arch/mips/bcm947xx/generic/brcm.o arch/mips/bcm947xx/bcm947xx.o |
| 278 | +SUBDIRS += arch/mips/bcm947xx/generic arch/mips/bcm947xx |
| 279 | +LOADADDR := 0x80001000 |
| 280 | + |
| 281 | +zImage: vmlinux |
| 282 | + $(MAKE) -C arch/$(ARCH)/bcm947xx/compressed |
| 283 | +export LOADADDR |
| 284 | +endif |
| 285 | + |
| 286 | +# |
| 287 | # Choosing incompatible machines durings configuration will result in |
| 288 | # error messages during linking. Select a default linkscript if |
| 289 | # none has been choosen above. |
| 290 | @@ -779,6 +792,7 @@ archclean: |
| 291 | $(MAKE) -C arch/$(ARCH)/tools clean |
| 292 | $(MAKE) -C arch/mips/baget clean |
| 293 | $(MAKE) -C arch/mips/lasat clean |
| 294 | + $(MAKE) -C arch/mips/bcm947xx/compressed clean |
| 295 | |
| 296 | archmrproper: |
| 297 | @$(MAKEBOOT) mrproper |
| 298 | --- a/arch/mips/mm/c-r4k.c |
| 299 | +++ b/arch/mips/mm/c-r4k.c |
| 300 | @@ -1118,3 +1118,47 @@ void __init ld_mmu_r4xx0(void) |
| 301 | build_clear_page(); |
| 302 | build_copy_page(); |
| 303 | } |
| 304 | + |
| 305 | +#ifdef CONFIG_BCM4704 |
| 306 | +static void __init mips32_icache_fill(unsigned long addr, uint nbytes) |
| 307 | +{ |
| 308 | + unsigned long ic_lsize = current_cpu_data.icache.linesz; |
| 309 | + int i; |
| 310 | + for (i = 0; i < nbytes; i += ic_lsize) |
| 311 | + fill_icache_line((addr + i)); |
| 312 | +} |
| 313 | + |
| 314 | +/* |
| 315 | + * This must be run from the cache on 4704A0 |
| 316 | + * so there are no mips core BIU ops in progress |
| 317 | + * when the PFC is enabled. |
| 318 | + */ |
| 319 | +#define PFC_CR0 0xff400000 /* control reg 0 */ |
| 320 | +#define PFC_CR1 0xff400004 /* control reg 1 */ |
| 321 | +static void __init enable_pfc(u32 mode) |
| 322 | +{ |
| 323 | + /* write range */ |
| 324 | + *(volatile u32 *)PFC_CR1 = 0xffff0000; |
| 325 | + |
| 326 | + /* enable */ |
| 327 | + *(volatile u32 *)PFC_CR0 = mode; |
| 328 | +} |
| 329 | +#endif |
| 330 | + |
| 331 | + |
| 332 | +void check_enable_mips_pfc(int val) |
| 333 | +{ |
| 334 | + |
| 335 | +#ifdef CONFIG_BCM4704 |
| 336 | + struct cpuinfo_mips *c = ¤t_cpu_data; |
| 337 | + |
| 338 | + /* enable prefetch cache */ |
| 339 | + if (((c->processor_id & (PRID_COMP_MASK | PRID_IMP_MASK)) == PRID_IMP_BCM3302) |
| 340 | + && (read_c0_diag() & (1 << 29))) { |
| 341 | + mips32_icache_fill((unsigned long) &enable_pfc, 64); |
| 342 | + enable_pfc(val); |
| 343 | + } |
| 344 | +#endif |
| 345 | +} |
| 346 | + |
| 347 | + |
| 348 | --- a/arch/mips/pci/Makefile |
| 349 | +++ b/arch/mips/pci/Makefile |
| 350 | @@ -13,7 +13,9 @@ obj-$(CONFIG_MIPS_GT64120) += ops-gt6412 |
| 351 | obj-$(CONFIG_MIPS_MSC) += ops-msc.o |
| 352 | obj-$(CONFIG_MIPS_NILE4) += ops-nile4.o |
| 353 | obj-$(CONFIG_SNI_RM200_PCI) += ops-sni.o |
| 354 | +ifndef CONFIG_BCM947XX |
| 355 | obj-y += pci.o |
| 356 | +endif |
| 357 | obj-$(CONFIG_PCI_AUTO) += pci_auto.o |
| 358 | |
| 359 | include $(TOPDIR)/Rules.make |
| 360 | --- a/drivers/char/serial.c |
| 361 | +++ b/drivers/char/serial.c |
| 362 | @@ -444,6 +444,10 @@ static _INLINE_ unsigned int serial_in(s |
| 363 | return inb(info->port+1); |
| 364 | #endif |
| 365 | case SERIAL_IO_MEM: |
| 366 | +#ifdef CONFIG_BCM4310 |
| 367 | + readb((unsigned long) info->iomem_base + |
| 368 | + (UART_SCR<<info->iomem_reg_shift)); |
| 369 | +#endif |
| 370 | return readb((unsigned long) info->iomem_base + |
| 371 | (offset<<info->iomem_reg_shift)); |
| 372 | default: |
| 373 | @@ -464,6 +468,9 @@ static _INLINE_ void serial_out(struct a |
| 374 | case SERIAL_IO_MEM: |
| 375 | writeb(value, (unsigned long) info->iomem_base + |
| 376 | (offset<<info->iomem_reg_shift)); |
| 377 | +#ifdef CONFIG_BCM4704 |
| 378 | + *((volatile unsigned int *) KSEG1ADDR(0x18000000)); |
| 379 | +#endif |
| 380 | break; |
| 381 | default: |
| 382 | outb(value, info->port+offset); |
| 383 | @@ -1728,7 +1735,7 @@ static void change_speed(struct async_st |
| 384 | /* Special case since 134 is really 134.5 */ |
| 385 | quot = (2*baud_base / 269); |
| 386 | else if (baud) |
| 387 | - quot = baud_base / baud; |
| 388 | + quot = (baud_base + (baud / 2)) / baud; |
| 389 | } |
| 390 | /* If the quotient is zero refuse the change */ |
| 391 | if (!quot && old_termios) { |
| 392 | @@ -1745,12 +1752,12 @@ static void change_speed(struct async_st |
| 393 | /* Special case since 134 is really 134.5 */ |
| 394 | quot = (2*baud_base / 269); |
| 395 | else if (baud) |
| 396 | - quot = baud_base / baud; |
| 397 | + quot = (baud_base + (baud / 2)) / baud; |
| 398 | } |
| 399 | } |
| 400 | /* As a last resort, if the quotient is zero, default to 9600 bps */ |
| 401 | if (!quot) |
| 402 | - quot = baud_base / 9600; |
| 403 | + quot = (baud_base + 4800) / 9600; |
| 404 | /* |
| 405 | * Work around a bug in the Oxford Semiconductor 952 rev B |
| 406 | * chip which causes it to seriously miscalculate baud rates |
| 407 | @@ -5994,6 +6001,13 @@ static int __init serial_console_setup(s |
| 408 | * Divisor, bytesize and parity |
| 409 | */ |
| 410 | state = rs_table + co->index; |
| 411 | + /* |
| 412 | + * Safe guard: state structure must have been initialized |
| 413 | + */ |
| 414 | + if (state->iomem_base == NULL) { |
| 415 | + printk("!unable to setup serial console!\n"); |
| 416 | + return -1; |
| 417 | + } |
| 418 | if (doflow) |
| 419 | state->flags |= ASYNC_CONS_FLOW; |
| 420 | info = &async_sercons; |
| 421 | @@ -6007,7 +6021,7 @@ static int __init serial_console_setup(s |
| 422 | info->io_type = state->io_type; |
| 423 | info->iomem_base = state->iomem_base; |
| 424 | info->iomem_reg_shift = state->iomem_reg_shift; |
| 425 | - quot = state->baud_base / baud; |
| 426 | + quot = (state->baud_base + (baud / 2)) / baud; |
| 427 | cval = cflag & (CSIZE | CSTOPB); |
| 428 | #if defined(__powerpc__) || defined(__alpha__) |
| 429 | cval >>= 8; |
| 430 | --- a/drivers/net/Makefile |
| 431 | +++ b/drivers/net/Makefile |
| 432 | @@ -3,6 +3,8 @@ |
| 433 | # Makefile for the Linux network (ethercard) device drivers. |
| 434 | # |
| 435 | |
| 436 | +EXTRA_CFLAGS := -I$(TOPDIR)/arch/mips/bcm947xx/include |
| 437 | + |
| 438 | obj-y := |
| 439 | obj-m := |
| 440 | obj-n := |
| 441 | --- a/drivers/parport/Config.in |
| 442 | +++ b/drivers/parport/Config.in |
| 443 | @@ -11,6 +11,7 @@ comment 'Parallel port support' |
| 444 | tristate 'Parallel port support' CONFIG_PARPORT |
| 445 | if [ "$CONFIG_PARPORT" != "n" ]; then |
| 446 | dep_tristate ' PC-style hardware' CONFIG_PARPORT_PC $CONFIG_PARPORT |
| 447 | + dep_tristate ' Asus WL500g parallel port' CONFIG_PARPORT_SPLINK $CONFIG_PARPORT |
| 448 | if [ "$CONFIG_PARPORT_PC" != "n" -a "$CONFIG_SERIAL" != "n" ]; then |
| 449 | if [ "$CONFIG_SERIAL" = "m" ]; then |
| 450 | define_tristate CONFIG_PARPORT_PC_CML1 m |
| 451 | --- a/drivers/parport/Makefile |
| 452 | +++ b/drivers/parport/Makefile |
| 453 | @@ -22,6 +22,7 @@ endif |
| 454 | |
| 455 | obj-$(CONFIG_PARPORT) += parport.o |
| 456 | obj-$(CONFIG_PARPORT_PC) += parport_pc.o |
| 457 | +obj-$(CONFIG_PARPORT_SPLINK) += parport_splink.o |
| 458 | obj-$(CONFIG_PARPORT_PC_PCMCIA) += parport_cs.o |
| 459 | obj-$(CONFIG_PARPORT_AMIGA) += parport_amiga.o |
| 460 | obj-$(CONFIG_PARPORT_MFC3) += parport_mfc3.o |
| 461 | --- a/include/asm-mips/bootinfo.h |
| 462 | +++ b/include/asm-mips/bootinfo.h |
| 463 | @@ -37,6 +37,7 @@ |
| 464 | #define MACH_GROUP_HP_LJ 20 /* Hewlett Packard LaserJet */ |
| 465 | #define MACH_GROUP_LASAT 21 |
| 466 | #define MACH_GROUP_TITAN 22 /* PMC-Sierra Titan */ |
| 467 | +#define MACH_GROUP_BRCM 23 /* Broadcom */ |
| 468 | |
| 469 | /* |
| 470 | * Valid machtype values for group unknown (low order halfword of mips_machtype) |
| 471 | @@ -197,6 +198,15 @@ |
| 472 | #define MACH_TANBAC_TB0229 7 /* TANBAC TB0229 (VR4131DIMM) */ |
| 473 | |
| 474 | /* |
| 475 | + * Valid machtypes for group Broadcom |
| 476 | + */ |
| 477 | +#define MACH_BCM93725 0 |
| 478 | +#define MACH_BCM93725_VJ 1 |
| 479 | +#define MACH_BCM93730 2 |
| 480 | +#define MACH_BCM947XX 3 |
| 481 | +#define MACH_BCM933XX 4 |
| 482 | + |
| 483 | +/* |
| 484 | * Valid machtype for group TITAN |
| 485 | */ |
| 486 | #define MACH_TITAN_YOSEMITE 1 /* PMC-Sierra Yosemite */ |
| 487 | --- a/include/asm-mips/cpu.h |
| 488 | +++ b/include/asm-mips/cpu.h |
| 489 | @@ -22,6 +22,11 @@ |
| 490 | spec. |
| 491 | */ |
| 492 | |
| 493 | +#define PRID_COPT_MASK 0xff000000 |
| 494 | +#define PRID_COMP_MASK 0x00ff0000 |
| 495 | +#define PRID_IMP_MASK 0x0000ff00 |
| 496 | +#define PRID_REV_MASK 0x000000ff |
| 497 | + |
| 498 | #define PRID_COMP_LEGACY 0x000000 |
| 499 | #define PRID_COMP_MIPS 0x010000 |
| 500 | #define PRID_COMP_BROADCOM 0x020000 |
| 501 | @@ -58,6 +63,7 @@ |
| 502 | #define PRID_IMP_RM7000 0x2700 |
| 503 | #define PRID_IMP_NEVADA 0x2800 /* RM5260 ??? */ |
| 504 | #define PRID_IMP_RM9000 0x3400 |
| 505 | +#define PRID_IMP_BCM4710 0x4000 |
| 506 | #define PRID_IMP_R5432 0x5400 |
| 507 | #define PRID_IMP_R5500 0x5500 |
| 508 | #define PRID_IMP_4KC 0x8000 |
| 509 | @@ -66,10 +72,16 @@ |
| 510 | #define PRID_IMP_4KEC 0x8400 |
| 511 | #define PRID_IMP_4KSC 0x8600 |
| 512 | #define PRID_IMP_25KF 0x8800 |
| 513 | +#define PRID_IMP_BCM3302 0x9000 |
| 514 | +#define PRID_IMP_BCM3303 0x9100 |
| 515 | #define PRID_IMP_24K 0x9300 |
| 516 | |
| 517 | #define PRID_IMP_UNKNOWN 0xff00 |
| 518 | |
| 519 | +#define BCM330X(id) \ |
| 520 | + (((id & (PRID_COMP_MASK | PRID_IMP_MASK)) == (PRID_COMP_BROADCOM | PRID_IMP_BCM3302)) \ |
| 521 | + || ((id & (PRID_COMP_MASK | PRID_IMP_MASK)) == (PRID_COMP_BROADCOM | PRID_IMP_BCM3303))) |
| 522 | + |
| 523 | /* |
| 524 | * These are the PRID's for when 23:16 == PRID_COMP_SIBYTE |
| 525 | */ |
| 526 | @@ -174,7 +186,9 @@ |
| 527 | #define CPU_AU1550 57 |
| 528 | #define CPU_24K 58 |
| 529 | #define CPU_AU1200 59 |
| 530 | -#define CPU_LAST 59 |
| 531 | +#define CPU_BCM4710 60 |
| 532 | +#define CPU_BCM3302 61 |
| 533 | +#define CPU_LAST 61 |
| 534 | |
| 535 | /* |
| 536 | * ISA Level encodings |
| 537 | --- a/include/asm-mips/r4kcache.h |
| 538 | +++ b/include/asm-mips/r4kcache.h |
| 539 | @@ -567,4 +567,17 @@ static inline void blast_scache128_page_ |
| 540 | cache128_unroll32(addr|ws,Index_Writeback_Inv_SD); |
| 541 | } |
| 542 | |
| 543 | +extern inline void fill_icache_line(unsigned long addr) |
| 544 | +{ |
| 545 | + __asm__ __volatile__( |
| 546 | + ".set noreorder\n\t" |
| 547 | + ".set mips3\n\t" |
| 548 | + "cache %1, (%0)\n\t" |
| 549 | + ".set mips0\n\t" |
| 550 | + ".set reorder" |
| 551 | + : |
| 552 | + : "r" (addr), |
| 553 | + "i" (Fill)); |
| 554 | +} |
| 555 | + |
| 556 | #endif /* __ASM_R4KCACHE_H */ |
| 557 | --- a/include/asm-mips/serial.h |
| 558 | +++ b/include/asm-mips/serial.h |
| 559 | @@ -223,6 +223,13 @@ |
| 560 | #define TXX927_SERIAL_PORT_DEFNS |
| 561 | #endif |
| 562 | |
| 563 | +#ifdef CONFIG_BCM947XX |
| 564 | +/* reserve 4 ports to be configured at runtime */ |
| 565 | +#define BCM947XX_SERIAL_PORT_DEFNS { 0, }, { 0, }, { 0, }, { 0, }, |
| 566 | +#else |
| 567 | +#define BCM947XX_SERIAL_PORT_DEFNS |
| 568 | +#endif |
| 569 | + |
| 570 | #ifdef CONFIG_HAVE_STD_PC_SERIAL_PORT |
| 571 | #define STD_SERIAL_PORT_DEFNS \ |
| 572 | /* UART CLK PORT IRQ FLAGS */ \ |
| 573 | @@ -470,6 +477,7 @@ |
| 574 | #define SERIAL_PORT_DFNS \ |
| 575 | ATLAS_SERIAL_PORT_DEFNS \ |
| 576 | AU1000_SERIAL_PORT_DEFNS \ |
| 577 | + BCM947XX_SERIAL_PORT_DEFNS \ |
| 578 | COBALT_SERIAL_PORT_DEFNS \ |
| 579 | DDB5477_SERIAL_PORT_DEFNS \ |
| 580 | EV96100_SERIAL_PORT_DEFNS \ |
| 581 | --- a/init/do_mounts.c |
| 582 | +++ b/init/do_mounts.c |
| 583 | @@ -255,7 +255,13 @@ static struct dev_name_struct { |
| 584 | { "ftlb", 0x2c08 }, |
| 585 | { "ftlc", 0x2c10 }, |
| 586 | { "ftld", 0x2c18 }, |
| 587 | +#if defined(CONFIG_MTD_BLOCK) || defined(CONFIG_MTD_BLOCK_RO) |
| 588 | { "mtdblock", 0x1f00 }, |
| 589 | + { "mtdblock0",0x1f00 }, |
| 590 | + { "mtdblock1",0x1f01 }, |
| 591 | + { "mtdblock2",0x1f02 }, |
| 592 | + { "mtdblock3",0x1f03 }, |
| 593 | +#endif |
| 594 | { "nb", 0x2b00 }, |
| 595 | { NULL, 0 } |
| 596 | }; |
| 597 | |