Root/target/linux/brcm-2.4/patches/001-bcm47xx.patch

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 = &current_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

Archive Download this file



interactive