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>
This commit is contained in:
parent
7b9334215f
commit
d753601a2a
|
@ -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)
|
||||||
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)
|
||||||
|
|
||||||
bcm63xx_nvram_init(boot_addr + BCM963XX_NVRAM_OFFSET);
|
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 */
|
/* 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
|
||||||
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
|
||||||
|
|
|
@ -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 */
|
Loading…
Reference in New Issue