From 966d47989b4f319d6bfba2c8cf22fdf8a3de67b2 Mon Sep 17 00:00:00 2001 From: Florian Fainelli Date: Thu, 6 Jun 2013 22:22:09 +0000 Subject: [PATCH] brcm63xx: add Broadcom cable modem firmware format header Signed-off-by: Florian Fainelli SVN-Revision: 36875 --- .../patches-3.8/425-bcm933xx_hcs.patch | 65 +++++++++++++++++++ .../patches-3.9/425-bcm933xx_hcs.patch | 65 +++++++++++++++++++ 2 files changed, 130 insertions(+) create mode 100644 target/linux/brcm63xx/patches-3.8/425-bcm933xx_hcs.patch create mode 100644 target/linux/brcm63xx/patches-3.9/425-bcm933xx_hcs.patch diff --git a/target/linux/brcm63xx/patches-3.8/425-bcm933xx_hcs.patch b/target/linux/brcm63xx/patches-3.8/425-bcm933xx_hcs.patch new file mode 100644 index 0000000000..79533fb64e --- /dev/null +++ b/target/linux/brcm63xx/patches-3.8/425-bcm933xx_hcs.patch @@ -0,0 +1,65 @@ +--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c ++++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c +@@ -37,6 +37,7 @@ + #include + + #include ++#include + + #define PFX "board_bcm963xx: " + +@@ -45,6 +46,7 @@ + + #define CFE_OFFSET_64K 0x10000 + #define CFE_OFFSET_128K 0x20000 ++#define HCS_OFFSET_128K 0x20000 + + static struct board_info board; + +@@ -782,8 +784,9 @@ void __init board_prom_init(void) + unsigned int i; + u8 *boot_addr, *cfe; + char cfe_version[32]; +- char *board_name; ++ char *board_name = NULL; + u32 val; ++ struct bcm_hcs *hcs; + + /* read base address of boot chip select (0) + * 6328/6362 do not have MPI but boot from a fixed address +@@ -812,9 +815,13 @@ void __init board_prom_init(void) + if (strcmp(cfe_version, "unknown") != 0) { + /* cfe present */ + boardid_fixup(boot_addr); ++ ++ board_name = bcm63xx_nvram_get_name(); ++ } else if (BCMCPU_IS_3368()) { ++ hcs = (struct bcm_hcs *)KSEG1ADDR(0x1fc00000 + HCS_OFFSET_128K); ++ board_name = hcs->filename; + } + +- board_name = bcm63xx_nvram_get_name(); + /* find board by name */ + for (i = 0; i < ARRAY_SIZE(bcm963xx_boards); i++) { + if (strncmp(board_name, bcm963xx_boards[i]->name, 16)) +--- /dev/null ++++ b/include/uapi/linux/bcm933xx_hcs.h +@@ -0,0 +1,18 @@ ++#ifndef __BCM_HCS_H ++#define __BCM_HCS_H ++ ++struct bcm_hcs { ++ uint16_t magic; ++ uint16_t control; ++ uint16_t rev_maj; ++ uint16_t rev_min; ++ uint32_t build_date; ++ uint32_t filelen; ++ uint32_t ldaddress; ++ char filename[64]; ++ uint16_t hcs; ++ uint16_t her_znaet_chto; ++ uint32_t crc; ++}; ++ ++#endif /* __BCM_HCS */ diff --git a/target/linux/brcm63xx/patches-3.9/425-bcm933xx_hcs.patch b/target/linux/brcm63xx/patches-3.9/425-bcm933xx_hcs.patch new file mode 100644 index 0000000000..79533fb64e --- /dev/null +++ b/target/linux/brcm63xx/patches-3.9/425-bcm933xx_hcs.patch @@ -0,0 +1,65 @@ +--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c ++++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c +@@ -37,6 +37,7 @@ + #include + + #include ++#include + + #define PFX "board_bcm963xx: " + +@@ -45,6 +46,7 @@ + + #define CFE_OFFSET_64K 0x10000 + #define CFE_OFFSET_128K 0x20000 ++#define HCS_OFFSET_128K 0x20000 + + static struct board_info board; + +@@ -782,8 +784,9 @@ void __init board_prom_init(void) + unsigned int i; + u8 *boot_addr, *cfe; + char cfe_version[32]; +- char *board_name; ++ char *board_name = NULL; + u32 val; ++ struct bcm_hcs *hcs; + + /* read base address of boot chip select (0) + * 6328/6362 do not have MPI but boot from a fixed address +@@ -812,9 +815,13 @@ void __init board_prom_init(void) + if (strcmp(cfe_version, "unknown") != 0) { + /* cfe present */ + boardid_fixup(boot_addr); ++ ++ board_name = bcm63xx_nvram_get_name(); ++ } else if (BCMCPU_IS_3368()) { ++ hcs = (struct bcm_hcs *)KSEG1ADDR(0x1fc00000 + HCS_OFFSET_128K); ++ board_name = hcs->filename; + } + +- board_name = bcm63xx_nvram_get_name(); + /* find board by name */ + for (i = 0; i < ARRAY_SIZE(bcm963xx_boards); i++) { + if (strncmp(board_name, bcm963xx_boards[i]->name, 16)) +--- /dev/null ++++ b/include/uapi/linux/bcm933xx_hcs.h +@@ -0,0 +1,18 @@ ++#ifndef __BCM_HCS_H ++#define __BCM_HCS_H ++ ++struct bcm_hcs { ++ uint16_t magic; ++ uint16_t control; ++ uint16_t rev_maj; ++ uint16_t rev_min; ++ uint32_t build_date; ++ uint32_t filelen; ++ uint32_t ldaddress; ++ char filename[64]; ++ uint16_t hcs; ++ uint16_t her_znaet_chto; ++ uint32_t crc; ++}; ++ ++#endif /* __BCM_HCS */