Add a fixup for the kernel to check the bcm tag of the image for a board id in 
the
information1 field, and use that instead of the supplied one by cfe.

Signed-off-by: Jonas Gorski <[email protected]>
---
 .../patches-2.6.32/270-generic_boardid_fixup.patch |   42 ++++++++++++++++++++
 1 files changed, 42 insertions(+), 0 deletions(-)
 create mode 100644 
target/linux/brcm63xx/patches-2.6.32/270-generic_boardid_fixup.patch

diff --git 
a/target/linux/brcm63xx/patches-2.6.32/270-generic_boardid_fixup.patch 
b/target/linux/brcm63xx/patches-2.6.32/270-generic_boardid_fixup.patch
new file mode 100644
index 0000000..87a0136
--- /dev/null
+++ b/target/linux/brcm63xx/patches-2.6.32/270-generic_boardid_fixup.patch
@@ -0,0 +1,42 @@
+--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
++++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
+@@ -41,6 +41,12 @@
+ #define NEUFBOX4_GPIO_74HC164_CLK     6
+ #define NXP_74HC64_GPIO(X)            (NEUFBOX4_EXP_GPIO_BASE + (X))
+ 
++#define TAG_INFO1_OFFSET              0xa2
++#define TAG_BOARD_MAGIC                       "BRD="
++#define TAG_MAGIC_LEN                 4
++#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;
+@@ -1254,6 +1260,16 @@ static void __init neufbox4_nvram_fixup(
+       }
+ }
+ 
++static void __init boardid_fixup(u8 *boot_addr)
++{
++      u8 *p = boot_addr + TAG_INFO1_OFFSET;
++
++      if (!memcmp(p + CFE_OFFSET_64K, TAG_BOARD_MAGIC, TAG_MAGIC_LEN))
++              memcpy(nvram.name, p + CFE_OFFSET_64K + TAG_MAGIC_LEN, 
sizeof(nvram.name));
++      else if (!memcmp(p + CFE_OFFSET_128K, TAG_BOARD_MAGIC, TAG_MAGIC_LEN))
++              memcpy(nvram.name, p + CFE_OFFSET_128K + TAG_MAGIC_LEN, 
sizeof(nvram.name));
++}
++
+ /*
+  * early init callback, read nvram data from flash and checksum it
+  */
+@@ -1304,6 +1320,9 @@ void __init board_prom_init(void)
+       /* Fixup broken neufbox4 board name */
+       neufbox4_nvram_fixup();
+ 
++      /* fixup board id */
++      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,
-- 
1.5.6.5

_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to