diff options
Diffstat (limited to 'target/linux/brcm63xx/patches-3.10/037-MIPS-BCM63XX-recognize-Cable-Modem-firmware-format.patch')
-rw-r--r-- | target/linux/brcm63xx/patches-3.10/037-MIPS-BCM63XX-recognize-Cable-Modem-firmware-format.patch | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/target/linux/brcm63xx/patches-3.10/037-MIPS-BCM63XX-recognize-Cable-Modem-firmware-format.patch b/target/linux/brcm63xx/patches-3.10/037-MIPS-BCM63XX-recognize-Cable-Modem-firmware-format.patch new file mode 100644 index 0000000000..83e8b92a02 --- /dev/null +++ b/target/linux/brcm63xx/patches-3.10/037-MIPS-BCM63XX-recognize-Cable-Modem-firmware-format.patch @@ -0,0 +1,101 @@ +From f3b3faafe7b5a1c07b12d18e96c36bc8a0eecaed Mon Sep 17 00:00:00 2001 +From: Florian Fainelli <florian@openwrt.org> +Date: Tue, 18 Jun 2013 16:55:41 +0000 +Subject: [PATCH 3/6] MIPS: BCM63XX: recognize Cable Modem firmware format + +Add the firmware header format which is used by Broadcom Cable Modem +SoCs such as the BCM3368 SoC. We export the bcm_hcs firmware format +structure because it is used by user-land tools to create firmware +images for these SoCs and will later be used by a corresponding MTD +parser. + +Signed-off-by: Florian Fainelli <florian@openwrt.org> +Cc: linux-mips@linux-mips.org +Cc: cernekee@gmail.com +Cc: jogo@openwrt.org +Patchwork: https://patchwork.linux-mips.org/patch/5496/ +Signed-off-by: Ralf Baechle <ralf@linux-mips.org> +--- + arch/mips/bcm63xx/boards/board_bcm963xx.c | 14 ++++++++++++-- + include/uapi/linux/Kbuild | 1 + + include/uapi/linux/bcm933xx_hcs.h | 24 ++++++++++++++++++++++++ + 3 files changed, 37 insertions(+), 2 deletions(-) + create mode 100644 include/uapi/linux/bcm933xx_hcs.h + +--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c ++++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c +@@ -28,8 +28,12 @@ + #include <bcm63xx_dev_usb_usbd.h> + #include <board_bcm963xx.h> + ++#include <uapi/linux/bcm933xx_hcs.h> ++ + #define PFX "board_bcm963xx: " + ++#define HCS_OFFSET_128K 0x20000 ++ + static struct board_info board; + + /* +@@ -722,8 +726,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 +@@ -747,7 +752,12 @@ void __init board_prom_init(void) + + bcm63xx_nvram_init(boot_addr + BCM963XX_NVRAM_OFFSET); + +- board_name = bcm63xx_nvram_get_name(); ++ if (BCMCPU_IS_3368()) { ++ hcs = (struct bcm_hcs *)boot_addr; ++ board_name = hcs->filename; ++ } else { ++ 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)) +--- a/include/uapi/linux/Kbuild ++++ b/include/uapi/linux/Kbuild +@@ -62,6 +62,7 @@ header-y += auxvec.h + header-y += ax25.h + header-y += b1lli.h + header-y += baycom.h ++header-y += bcm933xx_hcs.h + header-y += bfs_fs.h + header-y += binfmts.h + header-y += blkpg.h +--- /dev/null ++++ b/include/uapi/linux/bcm933xx_hcs.h +@@ -0,0 +1,24 @@ ++/* ++ * Broadcom Cable Modem firmware format ++ */ ++ ++#ifndef __BCM933XX_HCS_H ++#define __BCM933XX_HCS_H ++ ++#include <linux/types.h> ++ ++struct bcm_hcs { ++ __u16 magic; ++ __u16 control; ++ __u16 rev_maj; ++ __u16 rev_min; ++ __u32 build_date; ++ __u32 filelen; ++ __u32 ldaddress; ++ char filename[64]; ++ __u16 hcs; ++ __u16 her_znaet_chto; ++ __u32 crc; ++}; ++ ++#endif /* __BCM933XX_HCS */ |