diff options
Diffstat (limited to 'arch/mips/alchemy')
-rw-r--r-- | arch/mips/alchemy/common/platform.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/arch/mips/alchemy/common/platform.c b/arch/mips/alchemy/common/platform.c index c233d64a0d60..1dc55ee2681b 100644 --- a/arch/mips/alchemy/common/platform.c +++ b/arch/mips/alchemy/common/platform.c | |||
@@ -12,6 +12,7 @@ | |||
12 | */ | 12 | */ |
13 | 13 | ||
14 | #include <linux/dma-mapping.h> | 14 | #include <linux/dma-mapping.h> |
15 | #include <linux/etherdevice.h> | ||
15 | #include <linux/platform_device.h> | 16 | #include <linux/platform_device.h> |
16 | #include <linux/serial_8250.h> | 17 | #include <linux/serial_8250.h> |
17 | #include <linux/init.h> | 18 | #include <linux/init.h> |
@@ -21,6 +22,8 @@ | |||
21 | #include <asm/mach-au1x00/au1100_mmc.h> | 22 | #include <asm/mach-au1x00/au1100_mmc.h> |
22 | #include <asm/mach-au1x00/au1xxx_eth.h> | 23 | #include <asm/mach-au1x00/au1xxx_eth.h> |
23 | 24 | ||
25 | #include <prom.h> | ||
26 | |||
24 | #define PORT(_base, _irq) \ | 27 | #define PORT(_base, _irq) \ |
25 | { \ | 28 | { \ |
26 | .mapbase = _base, \ | 29 | .mapbase = _base, \ |
@@ -434,17 +437,27 @@ static int __init au1xxx_platform_init(void) | |||
434 | { | 437 | { |
435 | unsigned int uartclk = get_au1x00_uart_baud_base() * 16; | 438 | unsigned int uartclk = get_au1x00_uart_baud_base() * 16; |
436 | int err, i; | 439 | int err, i; |
440 | unsigned char ethaddr[6]; | ||
437 | 441 | ||
438 | /* Fill up uartclk. */ | 442 | /* Fill up uartclk. */ |
439 | for (i = 0; au1x00_uart_data[i].flags; i++) | 443 | for (i = 0; au1x00_uart_data[i].flags; i++) |
440 | au1x00_uart_data[i].uartclk = uartclk; | 444 | au1x00_uart_data[i].uartclk = uartclk; |
441 | 445 | ||
446 | /* use firmware-provided mac addr if available and necessary */ | ||
447 | i = prom_get_ethernet_addr(ethaddr); | ||
448 | if (!i && !is_valid_ether_addr(au1xxx_eth0_platform_data.mac)) | ||
449 | memcpy(au1xxx_eth0_platform_data.mac, ethaddr, 6); | ||
450 | |||
442 | err = platform_add_devices(au1xxx_platform_devices, | 451 | err = platform_add_devices(au1xxx_platform_devices, |
443 | ARRAY_SIZE(au1xxx_platform_devices)); | 452 | ARRAY_SIZE(au1xxx_platform_devices)); |
444 | #ifndef CONFIG_SOC_AU1100 | 453 | #ifndef CONFIG_SOC_AU1100 |
454 | ethaddr[5] += 1; /* next addr for 2nd MAC */ | ||
455 | if (!i && !is_valid_ether_addr(au1xxx_eth1_platform_data.mac)) | ||
456 | memcpy(au1xxx_eth1_platform_data.mac, ethaddr, 6); | ||
457 | |||
445 | /* Register second MAC if enabled in pinfunc */ | 458 | /* Register second MAC if enabled in pinfunc */ |
446 | if (!err && !(au_readl(SYS_PINFUNC) & (u32)SYS_PF_NI2)) | 459 | if (!err && !(au_readl(SYS_PINFUNC) & (u32)SYS_PF_NI2)) |
447 | platform_device_register(&au1xxx_eth1_device); | 460 | err = platform_device_register(&au1xxx_eth1_device); |
448 | #endif | 461 | #endif |
449 | 462 | ||
450 | return err; | 463 | return err; |