12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- From 8575548b08e33c9ff4fd540abec09dd177e33682 Mon Sep 17 00:00:00 2001
- From: Jonas Gorski <jogo@openwrt.org>
- Date: Thu, 31 Jul 2014 19:12:33 +0200
- Subject: [PATCH 09/10] MIPS: BCM63XX: allow board files to provide sprom
- fixups
- Allow board_info files to supply fixups for the base sproms to adapt
- them to the actual used sprom contents in case they do not use the
- default ones.
- Signed-off-by: Jonas Gorski <jogo@openwrt.org>
- ---
- arch/mips/bcm63xx/sprom.c | 14 +++++++++++++-
- .../mips/include/asm/mach-bcm63xx/bcm63xx_fallback_sprom.h | 8 ++++++++
- 2 files changed, 21 insertions(+), 1 deletion(-)
- --- a/arch/mips/bcm63xx/sprom.c
- +++ b/arch/mips/bcm63xx/sprom.c
- @@ -883,6 +883,14 @@ static int sprom_extract(struct ssb_spro
- return 0;
- }
-
- +void sprom_apply_fixups(u16 *sprom, struct sprom_fixup *fixups, int n)
- +{
- + unsigned int i;
- +
- + for (i = 0; i < n; i++)
- + sprom[fixups[i].offset] = fixups[i].value;
- +}
- +
- static __initdata u16 template_sprom[220];
- #endif
-
- @@ -961,8 +969,12 @@ int __init bcm63xx_register_fallback_spr
- return -EINVAL;
- }
-
- - if (size > 0)
- + if (size > 0) {
- + sprom_apply_fixups(template_sprom, data->board_fixups,
- + data->num_board_fixups);
- +
- sprom_extract(&bcm63xx_sprom, template_sprom, size);
- + }
-
- memcpy(bcm63xx_sprom.il0mac, data->mac_addr, ETH_ALEN);
- memcpy(bcm63xx_sprom.et0mac, data->mac_addr, ETH_ALEN);
- --- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_fallback_sprom.h
- +++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_fallback_sprom.h
- @@ -21,9 +21,17 @@ enum sprom_type {
- SPROM_BCM4331,
- };
-
- +struct sprom_fixup {
- + u16 offset;
- + u16 value;
- +};
- +
- struct fallback_sprom_data {
- u8 mac_addr[ETH_ALEN];
- enum sprom_type type;
- +
- + struct sprom_fixup *board_fixups;
- + unsigned int num_board_fixups;
- };
-
- int bcm63xx_register_fallback_sprom(struct fallback_sprom_data *data);
|