diff --git a/target/linux/adm5120/files-2.6.26/arch/mips/adm5120/compex/compex.c b/target/linux/adm5120/files-2.6.26/arch/mips/adm5120/compex/compex.c
index adc765f5e0b4ae4ab1903e16bb3cbac5db9b34bb..10120d6226d4b7e41edc6ab3b59e45e377a5c6ce 100644
--- a/target/linux/adm5120/files-2.6.26/arch/mips/adm5120/compex/compex.c
+++ b/target/linux/adm5120/files-2.6.26/arch/mips/adm5120/compex/compex.c
@@ -11,15 +11,19 @@
 
 #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();
 }
diff --git a/target/linux/adm5120/files-2.6.26/arch/mips/adm5120/prom/myloader.c b/target/linux/adm5120/files-2.6.26/arch/mips/adm5120/prom/myloader.c
index 737c15dea2d6bfd05bf92d7abe5d7a06a95d92a9..939422681b343598b5629af218efc86adaadc970 100644
--- a/target/linux/adm5120/files-2.6.26/arch/mips/adm5120/prom/myloader.c
+++ b/target/linux/adm5120/files-2.6.26/arch/mips/adm5120/prom/myloader.c
@@ -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:
diff --git a/target/linux/adm5120/files-2.6.26/include/asm-mips/mach-adm5120/prom/myloader.h b/target/linux/adm5120/files-2.6.26/include/asm-mips/mach-adm5120/prom/myloader.h
index 2c40aa4056676d9fdc548ada0ac2ea567709e2a8..ea8db81ed3fbc732bb78177564dc57e679580944 100644
--- a/target/linux/adm5120/files-2.6.26/include/asm-mips/mach-adm5120/prom/myloader.h
+++ b/target/linux/adm5120/files-2.6.26/include/asm-mips/mach-adm5120/prom/myloader.h
@@ -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;