1 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
2 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
3 @@ -2891,6 +2891,488 @@ static struct board_info __initdata boar
7 +static struct board_info __initdata board_HW556 = {
9 + .expected_cpu_id = 0x6358,
19 + .caldata_offset = 0xe00000,
27 + .force_speed_100 = 1,
28 + .force_duplex_full = 1,
33 + .name = "HW556:red:message",
38 + .name = "HW556:red:hspa",
43 + .name = "HW556:red:dsl",
48 + .name = "HW556:red:power",
51 + .default_trigger = "default-on",
54 + .name = "HW556:red:all",
57 + .default_trigger = "default-on",
68 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
76 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
83 + .code = KEY_RESTART,
84 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
92 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
96 +static struct board_info __initdata board_HW556_A = {
98 + .expected_cpu_id = 0x6358,
108 + .vendor = PCI_VENDOR_ID_RALINK,
109 + .caldata_offset = 0xeffe00,
111 + .eeprom = "rt2x00.eeprom",
119 + .force_speed_100 = 1,
120 + .force_duplex_full = 1,
125 + .name = "HW556:green:lan1",
130 + .name = "HW556:green:lan2",
135 + .name = "HW556:red:dsl",
140 + .name = "HW556:red:power",
143 + .default_trigger = "default-on",
146 + .name = "HW556:red:message",
151 + .name = "HW556:red:lan1",
156 + .name = "HW556:red:hspa",
161 + .name = "HW556:red:lan2",
166 + .name = "HW556:green:lan3",
171 + .name = "HW556:red:lan3",
176 + .name = "HW556:green:lan4",
181 + .name = "HW556:red:lan4",
194 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
202 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
209 + .code = KEY_RESTART,
210 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
217 + .code = KEY_CONFIG,
218 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
222 +static struct board_info __initdata board_HW556_B = {
224 + .expected_cpu_id = 0x6358,
234 + .vendor = PCI_VENDOR_ID_ATHEROS,
235 + .caldata_offset = 0xf7e000,
246 + .force_speed_100 = 1,
247 + .force_duplex_full = 1,
252 + .name = "HW556:red:message",
257 + .name = "HW556:red:hspa",
262 + .name = "HW556:red:dsl",
267 + .name = "HW556:red:power",
270 + .default_trigger = "default-on",
273 + .name = "HW556:red:all",
276 + .default_trigger = "default-on",
279 + .name = "HW556:green:lan1",
284 + .name = "HW556:red:lan1",
289 + .name = "HW556:green:lan2",
294 + .name = "HW556:red:lan2",
299 + .name = "HW556:green:lan3",
304 + .name = "HW556:red:lan3",
309 + .name = "HW556:green:lan4",
314 + .name = "HW556:red:lan4",
327 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
335 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
342 + .code = KEY_RESTART,
343 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
350 + .code = KEY_CONFIG,
351 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
355 +static struct board_info __initdata board_HW556_C = {
357 + .expected_cpu_id = 0x6358,
367 + .vendor = PCI_VENDOR_ID_ATHEROS,
368 + .caldata_offset = 0xefe000,
379 + .force_speed_100 = 1,
380 + .force_duplex_full = 1,
385 + .name = "HW556:red:message",
390 + .name = "HW556:red:hspa",
395 + .name = "HW556:red:dsl",
400 + .name = "HW556:red:power",
403 + .default_trigger = "default-on",
406 + .name = "HW556:red:all",
409 + .default_trigger = "default-on",
412 + .name = "HW556:green:lan1",
417 + .name = "HW556:red:lan1",
422 + .name = "HW556:green:lan2",
427 + .name = "HW556:red:lan2",
432 + .name = "HW556:green:lan3",
437 + .name = "HW556:red:lan3",
442 + .name = "HW556:green:lan4",
447 + .name = "HW556:red:lan4",
460 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
468 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
475 + .code = KEY_RESTART,
476 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
483 + .code = KEY_CONFIG,
484 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
489 /* T-Home Speedport W 303V Typ B */
490 static struct board_info __initdata board_spw303v = {
491 .name = "96358-502V",
492 @@ -3322,6 +3804,10 @@ static const struct board_info __initcon
503 @@ -3387,13 +3873,37 @@ static void __init boardid_fixup(u8 *boo
504 struct bcm_tag *tag = (struct bcm_tag *)(boot_addr + CFE_OFFSET_64K);
505 char *board_name = (char *)bcm63xx_nvram_get_name();
507 - if (BCMCPU_IS_6358() && (!strcmp(board_name, "96358VW"))) {
508 - u8 *p = boot_addr + NB4_PID_OFFSET;
510 - /* Extract nb4 PID */
511 - if (!memcmp(p, "NB4-", 4)) {
512 - memcpy(board_name, p, sizeof("NB4-XXX-rX"));
514 + if (BCMCPU_IS_6358()) {
515 + if (!strcmp(board_name, "96358VW")) {
516 + u8 *p = boot_addr + NB4_PID_OFFSET;
518 + /* Extract nb4 PID */
519 + if (!memcmp(p, "NB4-", 4)) {
520 + memcpy(board_name, p, sizeof("NB4-XXX-rX"));
523 + } else if (!strcmp(board_name, "HW556")) {
525 + * HW556 has different wlan caldatas depending on
526 + * hardware version.
527 + * Detect hardware version and change board id
529 + u8 cal_data_ath9k[4] = { 0xa5, 0x5a, 0, 0 };
530 + u8 cal_data_rt3062[4] = { 0x62, 0x30, 1, 0 };
532 + if (!memcmp(boot_addr + 0xeffe00,
533 + &cal_data_rt3062, 4)) {
534 + /* Ralink 0xeffe00 */
535 + memcpy(board_name, "HW556_A", 7);
536 + } else if (!memcmp(boot_addr + 0xf7e000,
537 + &cal_data_ath9k, 4)) {
538 + /* Atheros 0xf7e000 */
539 + memcpy(board_name, "HW556_B", 7);
540 + } else if (!memcmp(boot_addr + 0xefe000,
541 + &cal_data_ath9k, 4)) {
542 + /* Atheros 0xefe000 */
543 + memcpy(board_name, "HW556_C", 7);
548 --- a/drivers/mtd/bcm63xxpart.c
549 +++ b/drivers/mtd/bcm63xxpart.c
550 @@ -70,6 +70,11 @@ static int bcm63xx_parse_cfe_partitions(
551 BCM63XX_CFE_BLOCK_SIZE);
553 cfelen = cfe_erasesize;
555 + /* Fix HW556 MX29LV128DB */
556 + if (!strncmp(bcm63xx_nvram_get_name(), "HW556", 5))
559 nvramlen = bcm63xx_nvram_get_psi_size();
560 nvramlen = roundup(nvramlen, cfe_erasesize);
561 nvramaddr = master->size - nvramlen;