load board's mac address on Compex devices
authorGabor Juhos <juhosg@openwrt.org>
Wed, 13 Aug 2008 19:52:25 +0000 (19:52 +0000)
committerGabor Juhos <juhosg@openwrt.org>
Wed, 13 Aug 2008 19:52:25 +0000 (19:52 +0000)
SVN-Revision: 12302

target/linux/adm5120/files-2.6.26/arch/mips/adm5120/compex/compex.c
target/linux/adm5120/files-2.6.26/arch/mips/adm5120/prom/myloader.c
target/linux/adm5120/files-2.6.26/include/asm-mips/mach-adm5120/prom/myloader.h

index adc765f5e0b4ae4ab1903e16bb3cbac5db9b34bb..10120d6226d4b7e41edc6ab3b59e45e377a5c6ce 100644 (file)
 
 #include <linux/kernel.h>
 #include <linux/init.h>
+#include <linux/gpio.h>
 
 #include <asm/bootinfo.h>
-#include <linux/gpio.h>
 
 #include <asm/mach-adm5120/adm5120_info.h>
 #include <asm/mach-adm5120/adm5120_board.h>
 #include <asm/mach-adm5120/adm5120_platform.h>
 #include <asm/mach-adm5120/adm5120_irq.h>
 
+#include <asm/mach-adm5120/prom/myloader.h>
+
+#include "compex.h"
+
 #define COMPEX_GPIO_DEV_MASK   (1 << ADM5120_GPIO_PIN5)
 
 static void switch_bank_gpio5(unsigned bank)
@@ -34,6 +38,18 @@ static void switch_bank_gpio5(unsigned bank)
        }
 }
 
+void __init compex_mac_setup(void)
+{
+       int i, j;
+
+       if (!myloader_present())
+               return;
+
+       for (i = 0; i < 6; i++)
+               for (j = 0; j < 6; j++)
+                       adm5120_eth_macs[i][j] = myloader_info.macs[i][j];
+}
+
 void __init compex_generic_setup(void)
 {
        gpio_request(ADM5120_GPIO_PIN5, NULL); /* for flash A20 line */
@@ -43,4 +59,6 @@ void __init compex_generic_setup(void)
        adm5120_add_device_flash(0);
 
        adm5120_add_device_gpio(COMPEX_GPIO_DEV_MASK);
+
+       compex_mac_setup();
 }
index 737c15dea2d6bfd05bf92d7abe5d7a06a95d92a9..939422681b343598b5629af218efc86adaadc970 100644 (file)
@@ -36,6 +36,7 @@ int __init myloader_present(void)
        struct mylo_system_params *sysp;
        struct mylo_board_params *boardp;
        struct mylo_partition_table *parts;
+       int i;
 
        if (myloader_found)
                goto out;
@@ -55,6 +56,12 @@ int __init myloader_present(void)
        myloader_info.svid = le32_to_cpu(sysp->svid);
        myloader_info.sdid = le32_to_cpu(sysp->sdid);
 
+       for (i = 0; i < MYLO_ETHADDR_COUNT; i++) {
+               int j;
+               for (j = 0; j < 6; j++)
+                       myloader_info.macs[i][j] = boardp->addr[i].mac[j];
+       }
+
        myloader_found = 1;
 
 out:
index 2c40aa4056676d9fdc548ada0ac2ea567709e2a8..ea8db81ed3fbc732bb78177564dc57e679580944 100644 (file)
@@ -170,6 +170,7 @@ struct myloader_info {
        u32     did;
        u32     svid;
        u32     sdid;
+       uint8_t macs[MYLO_ETHADDR_COUNT][6];
 };
 
 extern struct myloader_info myloader_info;