brcm63xx: Add profile and build image for Sagemcom F@ST2704V2 ADSL router
[openwrt/openwrt.git] / target / linux / brcm63xx / patches-3.10 / 534-board_hw556.patch
1 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
2 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
3 @@ -2900,6 +2900,489 @@ static struct board_info __initdata boar
4 },
5 };
6
7 +static struct board_info __initdata board_HW556 = {
8 + .name = "HW556",
9 + .expected_cpu_id = 0x6358,
10 +
11 + .has_uart0 = 1,
12 + .has_pci = 1,
13 + .has_ohci0 = 1,
14 + .has_ehci0 = 1,
15 + .num_usbh_ports = 2,
16 +
17 + .has_caldata = 1,
18 + .caldata = {
19 + {
20 + .caldata_offset = 0xe00000,
21 + },
22 + },
23 +
24 + .has_enet1 = 1,
25 + .enet1 = {
26 + .has_phy = 1,
27 + .phy_id = 0,
28 + .force_speed_100 = 1,
29 + .force_duplex_full = 1,
30 + },
31 +
32 + .leds = {
33 + {
34 + .name = "HW556:red:message",
35 + .gpio = 0,
36 + .active_low = 1,
37 + },
38 + {
39 + .name = "HW556:red:hspa",
40 + .gpio = 1,
41 + .active_low = 1,
42 + },
43 + {
44 + .name = "HW556:red:dsl",
45 + .gpio = 2,
46 + .active_low = 1,
47 + },
48 + {
49 + .name = "HW556:red:power",
50 + .gpio = 3,
51 + .active_low = 1,
52 + .default_trigger = "default-on",
53 + },
54 + {
55 + .name = "HW556:red:all",
56 + .gpio = 6,
57 + .active_low = 1,
58 + .default_trigger = "default-on",
59 + },
60 + },
61 +
62 + .buttons = {
63 + {
64 + .desc = "help",
65 + .gpio = 8,
66 + .active_low = 1,
67 + .type = EV_KEY,
68 + .code = KEY_HELP,
69 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
70 + },
71 + {
72 + .desc = "wlan",
73 + .gpio = 9,
74 + .active_low = 1,
75 + .type = EV_KEY,
76 + .code = KEY_WLAN,
77 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
78 + },
79 + {
80 + .desc = "restart",
81 + .gpio = 10,
82 + .active_low = 1,
83 + .type = EV_KEY,
84 + .code = KEY_RESTART,
85 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
86 + },
87 + {
88 + .desc = "reset",
89 + .gpio = 11,
90 + .active_low = 1,
91 + .type = EV_KEY,
92 + .code = KEY_CONFIG,
93 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
94 + },
95 + },
96 +};
97 +static struct board_info __initdata board_HW556_A = {
98 + .name = "HW556_A",
99 + .expected_cpu_id = 0x6358,
100 +
101 + .has_uart0 = 1,
102 + .has_pci = 1,
103 + .has_ohci0 = 1,
104 + .has_ehci0 = 1,
105 +
106 + .has_caldata = 1,
107 + .caldata = {
108 + {
109 + .vendor = PCI_VENDOR_ID_RALINK,
110 + .caldata_offset = 0xeffe00,
111 + .slot = 1,
112 + .eeprom = "rt2x00.eeprom",
113 + },
114 + },
115 +
116 + .has_enet1 = 1,
117 + .enet1 = {
118 + .has_phy = 1,
119 + .phy_id = 0,
120 + .force_speed_100 = 1,
121 + .force_duplex_full = 1,
122 + },
123 +
124 + .leds = {
125 + {
126 + .name = "HW556:green:lan1",
127 + .gpio = 0,
128 + .active_low = 1,
129 + },
130 + {
131 + .name = "HW556:green:lan2",
132 + .gpio = 1,
133 + .active_low = 1,
134 + },
135 + {
136 + .name = "HW556:red:dsl",
137 + .gpio = 2,
138 + .active_low = 1,
139 + },
140 + {
141 + .name = "HW556:red:power",
142 + .gpio = 3,
143 + .active_low = 1,
144 + .default_trigger = "default-on",
145 + },
146 + {
147 + .name = "HW556:red:message",
148 + .gpio = 12,
149 + .active_low = 1,
150 + },
151 + {
152 + .name = "HW556:red:lan1",
153 + .gpio = 13,
154 + .active_low = 1,
155 + },
156 + {
157 + .name = "HW556:red:hspa",
158 + .gpio = 15,
159 + .active_low = 1,
160 + },
161 + {
162 + .name = "HW556:red:lan2",
163 + .gpio = 22,
164 + .active_low = 1,
165 + },
166 + {
167 + .name = "HW556:green:lan3",
168 + .gpio = 23,
169 + .active_low = 1,
170 + },
171 + {
172 + .name = "HW556:red:lan3",
173 + .gpio = 26,
174 + .active_low = 1,
175 + },
176 + {
177 + .name = "HW556:green:lan4",
178 + .gpio = 27,
179 + .active_low = 1,
180 + },
181 + {
182 + .name = "HW556:red:lan4",
183 + .gpio = 28,
184 + .active_low = 1,
185 + },
186 + },
187 +
188 + .buttons = {
189 + {
190 + .desc = "help",
191 + .gpio = 8,
192 + .active_low = 1,
193 + .type = EV_KEY,
194 + .code = KEY_HELP,
195 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
196 + },
197 + {
198 + .desc = "wlan",
199 + .gpio = 9,
200 + .active_low = 1,
201 + .type = EV_KEY,
202 + .code = KEY_WLAN,
203 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
204 + },
205 + {
206 + .desc = "restart",
207 + .gpio = 10,
208 + .active_low = 1,
209 + .type = EV_KEY,
210 + .code = KEY_RESTART,
211 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
212 + },
213 + {
214 + .desc = "reset",
215 + .gpio = 11,
216 + .active_low = 1,
217 + .type = EV_KEY,
218 + .code = KEY_CONFIG,
219 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
220 + },
221 + },
222 +};
223 +static struct board_info __initdata board_HW556_B = {
224 + .name = "HW556_B",
225 + .expected_cpu_id = 0x6358,
226 +
227 + .has_uart0 = 1,
228 + .has_pci = 1,
229 + .has_ohci0 = 1,
230 + .has_ehci0 = 1,
231 +
232 + .has_caldata = 1,
233 + .caldata = {
234 + {
235 + .vendor = PCI_VENDOR_ID_ATHEROS,
236 + .caldata_offset = 0xf7e000,
237 + .slot = 1,
238 + .endian_check = 1,
239 + .led_pin = 2,
240 + },
241 + },
242 +
243 + .has_enet1 = 1,
244 + .enet1 = {
245 + .has_phy = 1,
246 + .phy_id = 0,
247 + .force_speed_100 = 1,
248 + .force_duplex_full = 1,
249 + },
250 +
251 + .leds = {
252 + {
253 + .name = "HW556:red:message",
254 + .gpio = 0,
255 + .active_low = 1,
256 + },
257 + {
258 + .name = "HW556:red:hspa",
259 + .gpio = 1,
260 + .active_low = 1,
261 + },
262 + {
263 + .name = "HW556:red:dsl",
264 + .gpio = 2,
265 + .active_low = 1,
266 + },
267 + {
268 + .name = "HW556:red:power",
269 + .gpio = 3,
270 + .active_low = 1,
271 + .default_trigger = "default-on",
272 + },
273 + {
274 + .name = "HW556:red:all",
275 + .gpio = 6,
276 + .active_low = 1,
277 + .default_trigger = "default-on",
278 + },
279 + {
280 + .name = "HW556:green:lan1",
281 + .gpio = 12,
282 + .active_low = 1,
283 + },
284 + {
285 + .name = "HW556:red:lan1",
286 + .gpio = 13,
287 + .active_low = 1,
288 + },
289 + {
290 + .name = "HW556:green:lan2",
291 + .gpio = 15,
292 + .active_low = 1,
293 + },
294 + {
295 + .name = "HW556:red:lan2",
296 + .gpio = 22,
297 + .active_low = 1,
298 + },
299 + {
300 + .name = "HW556:green:lan3",
301 + .gpio = 23,
302 + .active_low = 1,
303 + },
304 + {
305 + .name = "HW556:red:lan3",
306 + .gpio = 26,
307 + .active_low = 1,
308 + },
309 + {
310 + .name = "HW556:green:lan4",
311 + .gpio = 27,
312 + .active_low = 1,
313 + },
314 + {
315 + .name = "HW556:red:lan4",
316 + .gpio = 28,
317 + .active_low = 1,
318 + },
319 + },
320 +
321 + .buttons = {
322 + {
323 + .desc = "help",
324 + .gpio = 8,
325 + .active_low = 1,
326 + .type = EV_KEY,
327 + .code = KEY_HELP,
328 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
329 + },
330 + {
331 + .desc = "wlan",
332 + .gpio = 9,
333 + .active_low = 1,
334 + .type = EV_KEY,
335 + .code = KEY_WLAN,
336 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
337 + },
338 + {
339 + .desc = "restart",
340 + .gpio = 10,
341 + .active_low = 1,
342 + .type = EV_KEY,
343 + .code = KEY_RESTART,
344 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
345 + },
346 + {
347 + .desc = "reset",
348 + .gpio = 11,
349 + .active_low = 1,
350 + .type = EV_KEY,
351 + .code = KEY_CONFIG,
352 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
353 + },
354 + },
355 +};
356 +static struct board_info __initdata board_HW556_C = {
357 + .name = "HW556_C",
358 + .expected_cpu_id = 0x6358,
359 +
360 + .has_uart0 = 1,
361 + .has_pci = 1,
362 + .has_ohci0 = 1,
363 + .has_ehci0 = 1,
364 +
365 + .has_caldata = 1,
366 + .caldata = {
367 + {
368 + .vendor = PCI_VENDOR_ID_ATHEROS,
369 + .caldata_offset = 0xefe000,
370 + .slot = 1,
371 + .endian_check = 1,
372 + .led_pin = 2,
373 + },
374 + },
375 +
376 + .has_enet1 = 1,
377 + .enet1 = {
378 + .has_phy = 1,
379 + .phy_id = 0,
380 + .force_speed_100 = 1,
381 + .force_duplex_full = 1,
382 + },
383 +
384 + .leds = {
385 + {
386 + .name = "HW556:red:message",
387 + .gpio = 0,
388 + .active_low = 1,
389 + },
390 + {
391 + .name = "HW556:red:hspa",
392 + .gpio = 1,
393 + .active_low = 1,
394 + },
395 + {
396 + .name = "HW556:red:dsl",
397 + .gpio = 2,
398 + .active_low = 1,
399 + },
400 + {
401 + .name = "HW556:red:power",
402 + .gpio = 3,
403 + .active_low = 1,
404 + .default_trigger = "default-on",
405 + },
406 + {
407 + .name = "HW556:red:all",
408 + .gpio = 6,
409 + .active_low = 1,
410 + .default_trigger = "default-on",
411 + },
412 + {
413 + .name = "HW556:green:lan1",
414 + .gpio = 12,
415 + .active_low = 1,
416 + },
417 + {
418 + .name = "HW556:red:lan1",
419 + .gpio = 13,
420 + .active_low = 1,
421 + },
422 + {
423 + .name = "HW556:green:lan2",
424 + .gpio = 15,
425 + .active_low = 1,
426 + },
427 + {
428 + .name = "HW556:red:lan2",
429 + .gpio = 22,
430 + .active_low = 1,
431 + },
432 + {
433 + .name = "HW556:green:lan3",
434 + .gpio = 23,
435 + .active_low = 1,
436 + },
437 + {
438 + .name = "HW556:red:lan3",
439 + .gpio = 26,
440 + .active_low = 1,
441 + },
442 + {
443 + .name = "HW556:green:lan4",
444 + .gpio = 27,
445 + .active_low = 1,
446 + },
447 + {
448 + .name = "HW556:red:lan4",
449 + .gpio = 28,
450 + .active_low = 1,
451 + },
452 + },
453 +
454 + .buttons = {
455 + {
456 + .desc = "help",
457 + .gpio = 8,
458 + .active_low = 1,
459 + .type = EV_KEY,
460 + .code = KEY_HELP,
461 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
462 + },
463 + {
464 + .desc = "wlan",
465 + .gpio = 9,
466 + .active_low = 1,
467 + .type = EV_KEY,
468 + .code = KEY_WLAN,
469 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
470 + },
471 + {
472 + .desc = "restart",
473 + .gpio = 10,
474 + .active_low = 1,
475 + .type = EV_KEY,
476 + .code = KEY_RESTART,
477 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
478 + },
479 + {
480 + .desc = "reset",
481 + .gpio = 11,
482 + .active_low = 1,
483 + .type = EV_KEY,
484 + .code = KEY_CONFIG,
485 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
486 + },
487 + },
488 +};
489 +
490 /* T-Home Speedport W 303V Typ B */
491 static struct board_info __initdata board_spw303v = {
492 .name = "96358-502V",
493 @@ -3339,6 +3822,10 @@ static const struct board_info __initcon
494 &board_nb4_fxc_r2,
495 &board_ct6373_1,
496 &board_HW553,
497 + &board_HW556,
498 + &board_HW556_A,
499 + &board_HW556_B,
500 + &board_HW556_C,
501 &board_spw303v,
502 &board_DVAG3810BN,
503 #endif
504 @@ -3404,13 +3891,37 @@ static void __init boardid_fixup(u8 *boo
505 struct bcm_tag *tag = (struct bcm_tag *)(boot_addr + CFE_OFFSET_64K);
506 char *board_name = (char *)bcm63xx_nvram_get_name();
507
508 - if (BCMCPU_IS_6358() && (!strcmp(board_name, "96358VW"))) {
509 - u8 *p = boot_addr + NB4_PID_OFFSET;
510 -
511 - /* Extract nb4 PID */
512 - if (!memcmp(p, "NB4-", 4)) {
513 - memcpy(board_name, p, sizeof("NB4-XXX-rX"));
514 - return;
515 + if (BCMCPU_IS_6358()) {
516 + if (!strcmp(board_name, "96358VW")) {
517 + u8 *p = boot_addr + NB4_PID_OFFSET;
518 +
519 + /* Extract nb4 PID */
520 + if (!memcmp(p, "NB4-", 4)) {
521 + memcpy(board_name, p, sizeof("NB4-XXX-rX"));
522 + return;
523 + }
524 + } else if (!strcmp(board_name, "HW556")) {
525 + /*
526 + * HW556 has different wlan caldatas depending on
527 + * hardware version.
528 + * Detect hardware version and change board id
529 + */
530 + u8 cal_data_ath9k[4] = { 0xa5, 0x5a, 0, 0 };
531 + u8 cal_data_rt3062[4] = { 0x62, 0x30, 1, 0 };
532 +
533 + if (!memcmp(boot_addr + 0xeffe00,
534 + &cal_data_rt3062, 4)) {
535 + /* Ralink 0xeffe00 */
536 + memcpy(board_name, "HW556_A", 7);
537 + } else if (!memcmp(boot_addr + 0xf7e000,
538 + &cal_data_ath9k, 4)) {
539 + /* Atheros 0xf7e000 */
540 + memcpy(board_name, "HW556_B", 7);
541 + } else if (!memcmp(boot_addr + 0xefe000,
542 + &cal_data_ath9k, 4)) {
543 + /* Atheros 0xefe000 */
544 + memcpy(board_name, "HW556_C", 7);
545 + }
546 }
547 }
548
549 --- a/drivers/mtd/bcm63xxpart.c
550 +++ b/drivers/mtd/bcm63xxpart.c
551 @@ -70,6 +70,11 @@ static int bcm63xx_parse_cfe_partitions(
552 BCM63XX_CFE_BLOCK_SIZE);
553
554 cfelen = cfe_erasesize;
555 +
556 + /* Fix HW556 MX29LV128DB */
557 + if (!strncmp(bcm63xx_nvram_get_name(), "HW556", 5))
558 + cfelen = 0x20000;
559 +
560 nvramlen = bcm63xx_nvram_get_psi_size();
561 nvramlen = roundup(nvramlen, cfe_erasesize);
562 nvramaddr = master->size - nvramlen;