diff options
| -rw-r--r-- | target/linux/brcm63xx/image/Makefile | 16 | ||||
| -rw-r--r-- | target/linux/brcm63xx/patches-2.6.35/410-boardid_fixup.patch | 62 | 
2 files changed, 75 insertions, 3 deletions
| diff --git a/target/linux/brcm63xx/image/Makefile b/target/linux/brcm63xx/image/Makefile index 588745cd2..589e47c56 100644 --- a/target/linux/brcm63xx/image/Makefile +++ b/target/linux/brcm63xx/image/Makefile @@ -37,7 +37,17 @@ define Image/Build/CFE  		--output $(BIN_DIR)/openwrt-$(4)-$(1)-cfe.bin \  		--boardid $(2) --chipid $(3) --entry $(KERNEL_ENTRY) \  		--load-addr $(LOADADDR) --rsa-signature "$(5)" \ -		--info1 "$(call Image/LimitName16,$(4))" --info2 $(1) \ +		--info1 "-$(call Image/LimitName16,$(4))" --info2 $(1) \ +		$(6) $(7) $(8) $(9) +endef + +define Image/Build/CFEFIXUP +	# Generate the tagged image +	$(STAGING_DIR_HOST)/bin/imagetag -i $(KDIR)/vmlinux.lzma.cfe -f $(KDIR)/root.$(1) \ +		--output $(BIN_DIR)/openwrt-$(4)-$(1)-cfe.bin \ +		--boardid $(2) --chipid $(3) --entry $(KERNEL_ENTRY) \ +		--load-addr $(LOADADDR) --rsa-signature "$(5)" \ +		--info1 "+$(call Image/LimitName16,$(4))" --info2 $(1) \  		$(6) $(7) $(8) $(9)  endef @@ -48,7 +58,7 @@ define Image/Build/CFEAGPF  		--boardid $(2) --chipid $(3) --entry $(LOADADDR) \  		--load-addr $(LOADADDR) --tag-version 8 \  		--signature2 IMAGE --block-size 0x20000 \ -		--image-offset $(4) --info1 "$(call Image/LimitName16,$(5))" --info2 $(1) +		--image-offset $(4) --info1 "-$(call Image/LimitName16,$(5))" --info2 $(1)  endef  define Image/Build/RG100A @@ -57,7 +67,7 @@ define Image/Build/RG100A  		--output $(BIN_DIR)/openwrt-$(5)-$(1)-cfe.bin \  		--boardid $(2) --chipid $(3) --entry $(LOADADDR) \  		--load-addr $(LOADADDR) --block-size 0x20000 \ -		--image-offset $(4) --info1 "$(call Image/LimitName16,$(5))" --info2 $(1) +		--image-offset $(4) --info1 "-$(call Image/LimitName16,$(5))" --info2 $(1)  endef  define Image/Build/RedBoot diff --git a/target/linux/brcm63xx/patches-2.6.35/410-boardid_fixup.patch b/target/linux/brcm63xx/patches-2.6.35/410-boardid_fixup.patch new file mode 100644 index 000000000..db1fac027 --- /dev/null +++ b/target/linux/brcm63xx/patches-2.6.35/410-boardid_fixup.patch @@ -0,0 +1,62 @@ +--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c ++++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c +@@ -35,6 +35,7 @@ + #include <bcm63xx_dev_usb_udc.h> + #include <bcm63xx_dev_spi.h> + #include <board_bcm963xx.h> ++#include <bcm_tag.h> +  + #define PFX	"board_bcm963xx: " +  +@@ -44,6 +45,9 @@ + #define NB4_SPI_GPIO_CLK	6 + #define NB4_74HC64_GPIO(X)	(NB4_74X164_GPIO_BASE + (X)) +  ++#define CFE_OFFSET_64K		0x10000 ++#define CFE_OFFSET_128K		0x20000 ++ + static struct bcm963xx_nvram nvram; + static unsigned int mac_addr_used; + static struct board_info board; +@@ -1508,6 +1512,29 @@ static int board_get_mac_address(u8 *mac + 	return 0; + } +  ++static void __init boardid_fixup(u8 *boot_addr) ++{ ++	struct bcm_tag *tag = (struct bcm_tag *)(boot_addr + CFE_OFFSET_64K); ++ ++	/* check if bcm_tag is at 64k offset */ ++	if (strncmp(nvram.name, tag->boardid, BOARDID_LEN) != 0) { ++		/* else try 128k */ ++		tag = (struct bcm_tag *)(boot_addr + CFE_OFFSET_128K); ++		if (strncmp(nvram.name, tag->boardid, BOARDID_LEN) != 0) { ++			/* No tag found */ ++			printk(KERN_DEBUG "No bcm_tag found!\n"); ++			return; ++		} ++	} ++	/* check if we should override the boardid */ ++	if (tag->information1[0] != '+') ++		return; ++ ++	strncpy(nvram.name, &tag->information1[1], BOARDID_LEN); ++ ++	printk(KERN_INFO "Overriding boardid with '%s'\n", nvram.name); ++} ++ + /* +  * early init callback, read nvram data from flash and checksum it +  */ +@@ -1559,6 +1586,11 @@ void __init board_prom_init(void) + 	/* Fixup broken nb4 board name */ + 	nb4_nvram_fixup(); +  ++	if (strcmp(cfe_version, "unknown") != 0) { ++		/* cfe present */ ++		boardid_fixup(boot_addr); ++	} ++ + 	/* find board by name */ + 	for (i = 0; i < ARRAY_SIZE(bcm963xx_boards); i++) { + 		if (strncmp(nvram.name, bcm963xx_boards[i]->name, | 
