Commit d753601a authored by Florian Fainelli's avatar Florian Fainelli Committed by Ralf Baechle

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: default avatarFlorian 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: default avatarRalf Baechle <ralf@linux-mips.org>
parent 7b933421
...@@ -28,8 +28,12 @@ ...@@ -28,8 +28,12 @@
#include <bcm63xx_dev_usb_usbd.h> #include <bcm63xx_dev_usb_usbd.h>
#include <board_bcm963xx.h> #include <board_bcm963xx.h>
#include <uapi/linux/bcm933xx_hcs.h>
#define PFX "board_bcm963xx: " #define PFX "board_bcm963xx: "
#define HCS_OFFSET_128K 0x20000
static struct board_info board; static struct board_info board;
/* /*
...@@ -722,8 +726,9 @@ void __init board_prom_init(void) ...@@ -722,8 +726,9 @@ void __init board_prom_init(void)
unsigned int i; unsigned int i;
u8 *boot_addr, *cfe; u8 *boot_addr, *cfe;
char cfe_version[32]; char cfe_version[32];
char *board_name; char *board_name = NULL;
u32 val; u32 val;
struct bcm_hcs *hcs;
/* read base address of boot chip select (0) /* read base address of boot chip select (0)
* 6328/6362 do not have MPI but boot from a fixed address * 6328/6362 do not have MPI but boot from a fixed address
...@@ -747,7 +752,12 @@ void __init board_prom_init(void) ...@@ -747,7 +752,12 @@ void __init board_prom_init(void)
bcm63xx_nvram_init(boot_addr + BCM963XX_NVRAM_OFFSET); bcm63xx_nvram_init(boot_addr + BCM963XX_NVRAM_OFFSET);
if (BCMCPU_IS_3368()) {
hcs = (struct bcm_hcs *)boot_addr;
board_name = hcs->filename;
} else {
board_name = bcm63xx_nvram_get_name(); board_name = bcm63xx_nvram_get_name();
}
/* find board by name */ /* find board by name */
for (i = 0; i < ARRAY_SIZE(bcm963xx_boards); i++) { for (i = 0; i < ARRAY_SIZE(bcm963xx_boards); i++) {
if (strncmp(board_name, bcm963xx_boards[i]->name, 16)) if (strncmp(board_name, bcm963xx_boards[i]->name, 16))
......
...@@ -62,6 +62,7 @@ header-y += auxvec.h ...@@ -62,6 +62,7 @@ header-y += auxvec.h
header-y += ax25.h header-y += ax25.h
header-y += b1lli.h header-y += b1lli.h
header-y += baycom.h header-y += baycom.h
header-y += bcm933xx_hcs.h
header-y += bfs_fs.h header-y += bfs_fs.h
header-y += binfmts.h header-y += binfmts.h
header-y += blkpg.h header-y += blkpg.h
......
/*
* 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 */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment