brcm63xx: add working lzma-loader and use it for initramfs
[openwrt/svn-archive/archive.git] / target / linux / brcm63xx / patches-3.10 / 501-board-NB4.patch
1 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
2 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
3 @@ -12,6 +12,10 @@
4 #include <linux/string.h>
5 #include <linux/gpio_keys.h>
6 #include <linux/input.h>
7 +#include <linux/platform_device.h>
8 +#include <linux/spi/spi.h>
9 +#include <linux/spi/spi_gpio.h>
10 +#include <linux/spi/74x164.h>
11 #include <asm/addrspace.h>
12 #include <bcm63xx_board.h>
13 #include <bcm63xx_cpu.h>
14 @@ -35,6 +39,12 @@
15 #define CFE_OFFSET_64K 0x10000
16 #define CFE_OFFSET_128K 0x20000
17
18 +#define NB4_PID_OFFSET 0xff80
19 +#define NB4_74X164_GPIO_BASE 64
20 +#define NB4_SPI_GPIO_MOSI 7
21 +#define NB4_SPI_GPIO_CLK 6
22 +#define NB4_74HC64_GPIO(X) (NB4_74X164_GPIO_BASE + (X))
23 +
24 /*
25 * known 3368 boards
26 */
27 @@ -739,6 +749,601 @@ static struct board_info __initdata boar
28
29 .has_ohci0 = 1,
30 };
31 +
32 +struct spi_gpio_platform_data nb4_spi_gpio_data = {
33 + .sck = NB4_SPI_GPIO_CLK,
34 + .mosi = NB4_SPI_GPIO_MOSI,
35 + .miso = SPI_GPIO_NO_MISO,
36 + .num_chipselect = 1,
37 +};
38 +
39 +
40 +static struct platform_device nb4_spi_gpio = {
41 + .name = "spi_gpio",
42 + .id = 1,
43 + .dev = {
44 + .platform_data = &nb4_spi_gpio_data,
45 + },
46 +};
47 +
48 +static struct platform_device * __initdata nb4_devices[] = {
49 + &nb4_spi_gpio,
50 +};
51 +
52 +const struct gen_74x164_chip_platform_data nb4_74x164_platform_data = {
53 + .base = NB4_74X164_GPIO_BASE
54 +};
55 +
56 +static struct spi_board_info nb4_spi_devices[] = {
57 + {
58 + .modalias = "74x164",
59 + .max_speed_hz = 781000,
60 + .bus_num = 1,
61 + .controller_data = (void *) SPI_GPIO_NO_CHIPSELECT,
62 + .mode = SPI_MODE_0,
63 + .platform_data = &nb4_74x164_platform_data
64 + }
65 +};
66 +
67 +static struct board_info __initdata board_nb4_ser_r0 = {
68 + .name = "NB4-SER-r0",
69 + .expected_cpu_id = 0x6358,
70 +
71 + .has_uart0 = 1,
72 + .has_enet0 = 1,
73 + .has_enet1 = 1,
74 + .has_pci = 1,
75 +
76 + .enet0 = {
77 + .has_phy = 1,
78 + .use_internal_phy = 1,
79 + },
80 +
81 + .enet1 = {
82 + .has_phy = 1,
83 + .phy_id = 0,
84 + .force_speed_100 = 1,
85 + .force_duplex_full = 1,
86 + },
87 +
88 +
89 + .has_ohci0 = 1,
90 + .has_pccard = 1,
91 + .has_ehci0 = 1,
92 + .num_usbh_ports = 2,
93 +
94 + .leds = {
95 + {
96 + .name = "NB4-SER-r0:white:adsl",
97 + .gpio = NB4_74HC64_GPIO(4),
98 + .active_low = 1,
99 + },
100 + {
101 + .name = "NB4-SER-r0:white:traffic",
102 + .gpio = 2,
103 + .active_low = 1,
104 + },
105 + {
106 + .name = "NB4-SER-r0:white:tel",
107 + .gpio = NB4_74HC64_GPIO(3),
108 + .active_low = 1,
109 + },
110 + {
111 + .name = "NB4-SER-r0:white:tv",
112 + .gpio = NB4_74HC64_GPIO(2),
113 + .active_low = 1,
114 + },
115 + {
116 + .name = "NB4-SER-r0:white:wifi",
117 + .gpio = 15,
118 + .active_low = 1,
119 + },
120 + {
121 + .name = "NB4-SER-r0:white:alarm",
122 + .gpio = NB4_74HC64_GPIO(0),
123 + .active_low = 1,
124 + },
125 + {
126 + .name = "NB4-SER-r0:red:service",
127 + .gpio = 29,
128 + .active_low = 1,
129 + },
130 + {
131 + .name = "NB4-SER-r0:green:service",
132 + .gpio = 30,
133 + .active_low = 1,
134 + },
135 + {
136 + .name = "NB4-SER-r0:blue:service",
137 + .gpio = 4,
138 + .active_low = 1,
139 + },
140 + },
141 + .buttons = {
142 + {
143 + .desc = "reset",
144 + .gpio = 34,
145 + .type = EV_KEY,
146 + .code = KEY_RESTART,
147 + .active_low = 1,
148 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
149 + },
150 + {
151 + .desc = "wps",
152 + .gpio = 37,
153 + .type = EV_KEY,
154 + .code = KEY_WPS_BUTTON,
155 + .active_low = 1,
156 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
157 + },
158 + {
159 + .desc = "service",
160 + .gpio = 27,
161 + .type = EV_KEY,
162 + .code = BTN_0,
163 + .active_low = 1,
164 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
165 + },
166 + {
167 + .desc = "clip",
168 + .gpio = 31,
169 + .type = EV_KEY,
170 + .code = BTN_1,
171 + .active_low = 1,
172 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
173 + },
174 + },
175 + .devs = nb4_devices,
176 + .num_devs = ARRAY_SIZE(nb4_devices),
177 + .spis = nb4_spi_devices,
178 + .num_spis = ARRAY_SIZE(nb4_spi_devices),
179 +};
180 +
181 +static struct board_info __initdata board_nb4_ser_r1 = {
182 + .name = "NB4-SER-r1",
183 + .expected_cpu_id = 0x6358,
184 +
185 + .has_uart0 = 1,
186 + .has_enet0 = 1,
187 + .has_enet1 = 1,
188 + .has_pci = 1,
189 +
190 + .enet0 = {
191 + .has_phy = 1,
192 + .use_internal_phy = 1,
193 + },
194 +
195 + .enet1 = {
196 + .has_phy = 1,
197 + .phy_id = 0,
198 + .force_speed_100 = 1,
199 + .force_duplex_full = 1,
200 + },
201 +
202 +
203 + .has_ohci0 = 1,
204 + .has_pccard = 1,
205 + .has_ehci0 = 1,
206 + .num_usbh_ports = 2,
207 +
208 + .leds = {
209 + {
210 + .name = "NB4-SER-r1:white:adsl",
211 + .gpio = NB4_74HC64_GPIO(4),
212 + .active_low = 1,
213 + },
214 + {
215 + .name = "NB4-SER-r1:white:traffic",
216 + .gpio = 2,
217 + .active_low = 1,
218 + },
219 + {
220 + .name = "NB4-SER-r1:white:tel",
221 + .gpio = NB4_74HC64_GPIO(3),
222 + .active_low = 1,
223 + },
224 + {
225 + .name = "NB4-SER-r1:white:tv",
226 + .gpio = NB4_74HC64_GPIO(2),
227 + .active_low = 1,
228 + },
229 + {
230 + .name = "NB4-SER-r1:white:wifi",
231 + .gpio = 15,
232 + .active_low = 1,
233 + },
234 + {
235 + .name = "NB4-SER-r1:white:alarm",
236 + .gpio = NB4_74HC64_GPIO(0),
237 + .active_low = 1,
238 + },
239 + {
240 + .name = "NB4-SER-r1:red:service",
241 + .gpio = 29,
242 + .active_low = 1,
243 + },
244 + {
245 + .name = "NB4-SER-r1:green:service",
246 + .gpio = 30,
247 + .active_low = 1,
248 + },
249 + {
250 + .name = "NB4-SER-r1:blue:service",
251 + .gpio = 4,
252 + .active_low = 1,
253 + },
254 + },
255 + .buttons = {
256 + {
257 + .desc = "reset",
258 + .gpio = 34,
259 + .type = EV_KEY,
260 + .code = KEY_RESTART,
261 + .active_low = 1,
262 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
263 + },
264 + {
265 + .desc = "wps",
266 + .gpio = 37,
267 + .type = EV_KEY,
268 + .code = KEY_WPS_BUTTON,
269 + .active_low = 1,
270 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
271 + },
272 + {
273 + .desc = "service",
274 + .gpio = 27,
275 + .type = EV_KEY,
276 + .code = BTN_0,
277 + .active_low = 1,
278 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
279 + },
280 + {
281 + .desc = "clip",
282 + .gpio = 31,
283 + .type = EV_KEY,
284 + .code = BTN_1,
285 + .active_low = 1,
286 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
287 + },
288 + },
289 + .devs = nb4_devices,
290 + .num_devs = ARRAY_SIZE(nb4_devices),
291 + .spis = nb4_spi_devices,
292 + .num_spis = ARRAY_SIZE(nb4_spi_devices),
293 +};
294 +
295 +static struct board_info __initdata board_nb4_ser_r2 = {
296 + .name = "NB4-SER-r2",
297 + .expected_cpu_id = 0x6358,
298 +
299 + .has_uart0 = 1,
300 + .has_enet0 = 1,
301 + .has_enet1 = 1,
302 + .has_pci = 1,
303 +
304 + .enet0 = {
305 + .has_phy = 1,
306 + .use_internal_phy = 1,
307 + },
308 +
309 + .enet1 = {
310 + .has_phy = 1,
311 + .phy_id = 0,
312 + .force_speed_100 = 1,
313 + .force_duplex_full = 1,
314 + },
315 +
316 +
317 + .has_ohci0 = 1,
318 + .has_pccard = 1,
319 + .has_ehci0 = 1,
320 + .num_usbh_ports = 2,
321 +
322 + .leds = {
323 + {
324 + .name = "NB4-SER-r2:white:adsl",
325 + .gpio = NB4_74HC64_GPIO(4),
326 + .active_low = 1,
327 + },
328 + {
329 + .name = "NB4-SER-r2:white:traffic",
330 + .gpio = 2,
331 + .active_low = 1,
332 + },
333 + {
334 + .name = "NB4-SER-r2:white:tel",
335 + .gpio = NB4_74HC64_GPIO(3),
336 + .active_low = 1,
337 + },
338 + {
339 + .name = "NB4-SER-r2:white:tv",
340 + .gpio = NB4_74HC64_GPIO(2),
341 + .active_low = 1,
342 + },
343 + {
344 + .name = "NB4-SER-r2:white:wifi",
345 + .gpio = 15,
346 + .active_low = 1,
347 + },
348 + {
349 + .name = "NB4-SER-r2:white:alarm",
350 + .gpio = NB4_74HC64_GPIO(0),
351 + .active_low = 1,
352 + },
353 + {
354 + .name = "NB4-SER-r2:red:service",
355 + .gpio = 29,
356 + .active_low = 1,
357 + },
358 + {
359 + .name = "NB4-SER-r2:green:service",
360 + .gpio = 30,
361 + .active_low = 1,
362 + },
363 + {
364 + .name = "NB4-SER-r2:blue:service",
365 + .gpio = 4,
366 + .active_low = 1,
367 + },
368 + },
369 + .buttons = {
370 + {
371 + .desc = "reset",
372 + .gpio = 34,
373 + .type = EV_KEY,
374 + .code = KEY_RESTART,
375 + .active_low = 1,
376 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
377 + },
378 + {
379 + .desc = "wps",
380 + .gpio = 37,
381 + .type = EV_KEY,
382 + .code = KEY_WPS_BUTTON,
383 + .active_low = 1,
384 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
385 + },
386 + {
387 + .desc = "service",
388 + .gpio = 27,
389 + .type = EV_KEY,
390 + .code = BTN_0,
391 + .active_low = 1,
392 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
393 + },
394 + {
395 + .desc = "clip",
396 + .gpio = 31,
397 + .type = EV_KEY,
398 + .code = BTN_1,
399 + .active_low = 1,
400 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
401 + },
402 + },
403 + .devs = nb4_devices,
404 + .num_devs = ARRAY_SIZE(nb4_devices),
405 + .spis = nb4_spi_devices,
406 + .num_spis = ARRAY_SIZE(nb4_spi_devices),
407 +};
408 +
409 +static struct board_info __initdata board_nb4_fxc_r1 = {
410 + .name = "NB4-FXC-r1",
411 + .expected_cpu_id = 0x6358,
412 +
413 + .has_uart0 = 1,
414 + .has_enet0 = 1,
415 + .has_enet1 = 1,
416 + .has_pci = 1,
417 +
418 + .enet0 = {
419 + .has_phy = 1,
420 + .use_internal_phy = 1,
421 + },
422 +
423 + .enet1 = {
424 + .has_phy = 1,
425 + .phy_id = 0,
426 + .force_speed_100 = 1,
427 + .force_duplex_full = 1,
428 + },
429 +
430 +
431 + .has_ohci0 = 1,
432 + .has_pccard = 1,
433 + .has_ehci0 = 1,
434 + .num_usbh_ports = 2,
435 +
436 + .leds = {
437 + {
438 + .name = "NB4-FXC-r1:white:adsl",
439 + .gpio = NB4_74HC64_GPIO(4),
440 + .active_low = 1,
441 + },
442 + {
443 + .name = "NB4-FXC-r1:white:traffic",
444 + .gpio = 2,
445 + },
446 + {
447 + .name = "NB4-FXC-r1:white:tel",
448 + .gpio = NB4_74HC64_GPIO(3),
449 + .active_low = 1,
450 + },
451 + {
452 + .name = "NB4-FXC-r1:white:tv",
453 + .gpio = NB4_74HC64_GPIO(2),
454 + .active_low = 1,
455 + },
456 + {
457 + .name = "NB4-FXC-r1:white:wifi",
458 + .gpio = 15,
459 + },
460 + {
461 + .name = "NB4-FXC-r1:white:alarm",
462 + .gpio = NB4_74HC64_GPIO(0),
463 + .active_low = 1,
464 + },
465 + {
466 + .name = "NB4-FXC-r1:red:service",
467 + .gpio = 29,
468 + },
469 + {
470 + .name = "NB4-FXC-r1:green:service",
471 + .gpio = 30,
472 + },
473 + {
474 + .name = "NB4-FXC-r1:blue:service",
475 + .gpio = 4,
476 + },
477 + },
478 + .buttons = {
479 + {
480 + .desc = "reset",
481 + .gpio = 34,
482 + .type = EV_KEY,
483 + .code = KEY_RESTART,
484 + .active_low = 1,
485 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
486 + },
487 + {
488 + .desc = "wps",
489 + .gpio = 37,
490 + .type = EV_KEY,
491 + .code = KEY_WPS_BUTTON,
492 + .active_low = 1,
493 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
494 + },
495 + {
496 + .desc = "service",
497 + .gpio = 27,
498 + .type = EV_KEY,
499 + .code = BTN_0,
500 + .active_low = 1,
501 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
502 + },
503 + {
504 + .desc = "clip",
505 + .gpio = 31,
506 + .type = EV_KEY,
507 + .code = BTN_1,
508 + .active_low = 1,
509 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
510 + },
511 + },
512 + .devs = nb4_devices,
513 + .num_devs = ARRAY_SIZE(nb4_devices),
514 + .spis = nb4_spi_devices,
515 + .num_spis = ARRAY_SIZE(nb4_spi_devices),
516 +};
517 +
518 +static struct board_info __initdata board_nb4_fxc_r2 = {
519 + .name = "NB4-FXC-r2",
520 + .expected_cpu_id = 0x6358,
521 +
522 + .has_uart0 = 1,
523 + .has_enet0 = 1,
524 + .has_enet1 = 1,
525 + .has_pci = 1,
526 +
527 + .enet0 = {
528 + .has_phy = 1,
529 + .use_internal_phy = 1,
530 + },
531 +
532 + .enet1 = {
533 + .has_phy = 1,
534 + .phy_id = 0,
535 + .force_speed_100 = 1,
536 + .force_duplex_full = 1,
537 + },
538 +
539 +
540 + .has_ohci0 = 1,
541 + .has_pccard = 1,
542 + .has_ehci0 = 1,
543 + .num_usbh_ports = 2,
544 +
545 + .leds = {
546 + {
547 + .name = "NB4-FXC-r2:white:adsl",
548 + .gpio = NB4_74HC64_GPIO(4),
549 + .active_low = 1,
550 + },
551 + {
552 + .name = "NB4-FXC-r2:white:traffic",
553 + .gpio = 2,
554 + },
555 + {
556 + .name = "NB4-FXC-r2:white:tel",
557 + .gpio = NB4_74HC64_GPIO(3),
558 + .active_low = 1,
559 + },
560 + {
561 + .name = "NB4-FXC-r2:white:tv",
562 + .gpio = NB4_74HC64_GPIO(2),
563 + .active_low = 1,
564 + },
565 + {
566 + .name = "NB4-FXC-r2:white:wifi",
567 + .gpio = 15,
568 + },
569 + {
570 + .name = "NB4-FXC-r2:white:alarm",
571 + .gpio = NB4_74HC64_GPIO(0),
572 + .active_low = 1,
573 + },
574 + {
575 + .name = "NB4-FXC-r2:red:service",
576 + .gpio = 29,
577 + },
578 + {
579 + .name = "NB4-FXC-r2:green:service",
580 + .gpio = 30,
581 + },
582 + {
583 + .name = "NB4-FXC-r2:blue:service",
584 + .gpio = 4,
585 + },
586 + },
587 + .buttons = {
588 + {
589 + .desc = "reset",
590 + .gpio = 34,
591 + .type = EV_KEY,
592 + .code = KEY_RESTART,
593 + .active_low = 1,
594 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
595 + },
596 + {
597 + .desc = "wps",
598 + .gpio = 37,
599 + .type = EV_KEY,
600 + .code = KEY_WPS_BUTTON,
601 + .active_low = 1,
602 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
603 + },
604 + {
605 + .desc = "service",
606 + .gpio = 27,
607 + .type = EV_KEY,
608 + .code = BTN_0,
609 + .active_low = 1,
610 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
611 + },
612 + {
613 + .desc = "clip",
614 + .gpio = 31,
615 + .type = EV_KEY,
616 + .code = BTN_1,
617 + .active_low = 1,
618 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
619 + },
620 + },
621 + .devs = nb4_devices,
622 + .num_devs = ARRAY_SIZE(nb4_devices),
623 + .spis = nb4_spi_devices,
624 + .num_spis = ARRAY_SIZE(nb4_spi_devices),
625 +};
626 #endif
627
628 /*
629 @@ -775,6 +1380,11 @@ static const struct board_info __initcon
630 &board_96358vw2,
631 &board_AGPFS0,
632 &board_DWVS0,
633 + &board_nb4_ser_r0,
634 + &board_nb4_ser_r1,
635 + &board_nb4_ser_r2,
636 + &board_nb4_fxc_r1,
637 + &board_nb4_fxc_r2,
638 #endif
639 };
640
641 @@ -783,6 +1393,16 @@ static void __init boardid_fixup(u8 *boo
642 struct bcm_tag *tag = (struct bcm_tag *)(boot_addr + CFE_OFFSET_64K);
643 char *board_name = (char *)bcm63xx_nvram_get_name();
644
645 + if (BCMCPU_IS_6358() && (!strcmp(board_name, "96358VW"))) {
646 + u8 *p = boot_addr + NB4_PID_OFFSET;
647 +
648 + /* Extract nb4 PID */
649 + if (!memcmp(p, "NB4-", 4)) {
650 + memcpy(board_name, p, sizeof("NB4-XXX-rX"));
651 + return;
652 + }
653 + }
654 +
655 /* check if bcm_tag is at 64k offset */
656 if (strncmp(board_name, tag->board_id, BOARDID_LEN) != 0) {
657 /* else try 128k */