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
7 +static struct board_info __initdata board_HW556 = {
9 + .expected_cpu_id = 0x6358,
15 + .num_usbh_ports = 2,
20 + .caldata_offset = 0xe00000,
28 + .force_speed_100 = 1,
29 + .force_duplex_full = 1,
34 + .name = "HW556:red:message",
39 + .name = "HW556:red:hspa",
44 + .name = "HW556:red:dsl",
49 + .name = "HW556:red:power",
52 + .default_trigger = "default-on",
55 + .name = "HW556:red:all",
58 + .default_trigger = "default-on",
69 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
77 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
84 + .code = KEY_RESTART,
85 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
93 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
97 +static struct board_info __initdata board_HW556_A = {
99 + .expected_cpu_id = 0x6358,
109 + .vendor = PCI_VENDOR_ID_RALINK,
110 + .caldata_offset = 0xeffe00,
112 + .eeprom = "rt2x00.eeprom",
120 + .force_speed_100 = 1,
121 + .force_duplex_full = 1,
126 + .name = "HW556:green:lan1",
131 + .name = "HW556:green:lan2",
136 + .name = "HW556:red:dsl",
141 + .name = "HW556:red:power",
144 + .default_trigger = "default-on",
147 + .name = "HW556:red:message",
152 + .name = "HW556:red:lan1",
157 + .name = "HW556:red:hspa",
162 + .name = "HW556:red:lan2",
167 + .name = "HW556:green:lan3",
172 + .name = "HW556:red:lan3",
177 + .name = "HW556:green:lan4",
182 + .name = "HW556:red:lan4",
195 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
203 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
210 + .code = KEY_RESTART,
211 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
218 + .code = KEY_CONFIG,
219 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
223 +static struct board_info __initdata board_HW556_B = {
225 + .expected_cpu_id = 0x6358,
235 + .vendor = PCI_VENDOR_ID_ATHEROS,
236 + .caldata_offset = 0xf7e000,
247 + .force_speed_100 = 1,
248 + .force_duplex_full = 1,
253 + .name = "HW556:red:message",
258 + .name = "HW556:red:hspa",
263 + .name = "HW556:red:dsl",
268 + .name = "HW556:red:power",
271 + .default_trigger = "default-on",
274 + .name = "HW556:red:all",
277 + .default_trigger = "default-on",
280 + .name = "HW556:green:lan1",
285 + .name = "HW556:red:lan1",
290 + .name = "HW556:green:lan2",
295 + .name = "HW556:red:lan2",
300 + .name = "HW556:green:lan3",
305 + .name = "HW556:red:lan3",
310 + .name = "HW556:green:lan4",
315 + .name = "HW556:red:lan4",
328 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
336 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
343 + .code = KEY_RESTART,
344 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
351 + .code = KEY_CONFIG,
352 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
356 +static struct board_info __initdata board_HW556_C = {
358 + .expected_cpu_id = 0x6358,
368 + .vendor = PCI_VENDOR_ID_ATHEROS,
369 + .caldata_offset = 0xefe000,
380 + .force_speed_100 = 1,
381 + .force_duplex_full = 1,
386 + .name = "HW556:red:message",
391 + .name = "HW556:red:hspa",
396 + .name = "HW556:red:dsl",
401 + .name = "HW556:red:power",
404 + .default_trigger = "default-on",
407 + .name = "HW556:red:all",
410 + .default_trigger = "default-on",
413 + .name = "HW556:green:lan1",
418 + .name = "HW556:red:lan1",
423 + .name = "HW556:green:lan2",
428 + .name = "HW556:red:lan2",
433 + .name = "HW556:green:lan3",
438 + .name = "HW556:red:lan3",
443 + .name = "HW556:green:lan4",
448 + .name = "HW556:red:lan4",
461 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
469 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
476 + .code = KEY_RESTART,
477 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
484 + .code = KEY_CONFIG,
485 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
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
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();
508 - if (BCMCPU_IS_6358() && (!strcmp(board_name, "96358VW"))) {
509 - u8 *p = boot_addr + NB4_PID_OFFSET;
511 - /* Extract nb4 PID */
512 - if (!memcmp(p, "NB4-", 4)) {
513 - memcpy(board_name, p, sizeof("NB4-XXX-rX"));
515 + if (BCMCPU_IS_6358()) {
516 + if (!strcmp(board_name, "96358VW")) {
517 + u8 *p = boot_addr + NB4_PID_OFFSET;
519 + /* Extract nb4 PID */
520 + if (!memcmp(p, "NB4-", 4)) {
521 + memcpy(board_name, p, sizeof("NB4-XXX-rX"));
524 + } else if (!strcmp(board_name, "HW556")) {
526 + * HW556 has different wlan caldatas depending on
527 + * hardware version.
528 + * Detect hardware version and change board id
530 + u8 cal_data_ath9k[4] = { 0xa5, 0x5a, 0, 0 };
531 + u8 cal_data_rt3062[4] = { 0x62, 0x30, 1, 0 };
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);
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);
554 cfelen = cfe_erasesize;
556 + /* Fix HW556 MX29LV128DB */
557 + if (!strncmp(bcm63xx_nvram_get_name(), "HW556", 5))
560 nvramlen = bcm63xx_nvram_get_psi_size();
561 nvramlen = roundup(nvramlen, cfe_erasesize);
562 nvramaddr = master->size - nvramlen;