brcm63xx: add working lzma-loader and use it for initramfs
[openwrt.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 */