From ecb428abffacd3f6b19595140a8e690eae1c54b5 Mon Sep 17 00:00:00 2001 From: florian Date: Thu, 6 Dec 2012 22:40:36 +0000 Subject: [PATCH] [adm8668] use the tulip platform driver Signed-off-by: Florian Fainelli git-svn-id: svn://svn.openwrt.org/openwrt/trunk@34558 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../files/arch/mips/adm8668/platform.c | 49 ++++++++++++++++++- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/target/linux/adm8668/files/arch/mips/adm8668/platform.c b/target/linux/adm8668/files/arch/mips/adm8668/platform.c index 264eaf485..dc0fd91a3 100644 --- a/target/linux/adm8668/files/arch/mips/adm8668/platform.c +++ b/target/linux/adm8668/files/arch/mips/adm8668/platform.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -27,6 +28,10 @@ #include #include +#define ADM8868_UBOOT_ENV 0x20000 +#define ADM8868_UBOOT_WAN_MAC 0x5ac +#define ADM8868_UBOOT_LAN_MAC 0x404 + static void adm8668_uart_set_mctrl(struct amba_device *dev, void __iomem *base, unsigned int mcrtl) @@ -66,11 +71,16 @@ static struct resource eth0_resources[] = { }, }; +static struct tulip_platform_data eth0_pdata = { + .chip_id = ADM8668, +}; + static struct platform_device adm8668_eth0_device = { - .name = "adm8668_eth", + .name = "tulip", .id = 0, .resource = eth0_resources, .num_resources = ARRAY_SIZE(eth0_resources), + .dev.platform_data = ð0_pdata, }; static struct resource eth1_resources[] = { @@ -85,11 +95,16 @@ static struct resource eth1_resources[] = { }, }; +static struct tulip_platform_data eth1_pdata = { + .chip_id = ADM8668, +}; + static struct platform_device adm8668_eth1_device = { - .name = "adm8668_eth", + .name = "tulip", .id = 1, .resource = eth1_resources, .num_resources = ARRAY_SIZE(eth1_resources), + .dev.platform_data = ð1_pdata, }; static const char *nor_probe_types[] = { "adm8668part", NULL }; @@ -121,6 +136,33 @@ static struct platform_device *adm8668_devs[] = { &adm8668_nor_device, }; +static void adm8668_fetch_mac(int unit) +{ + u8 *mac; + u32 offset; + struct tulip_platform_data *pdata; + + switch (unit) { + case -1: + case 0: + offset = ADM8868_UBOOT_LAN_MAC; + pdata = ð0_pdata; + break; + case 1: + offset = ADM8868_UBOOT_WAN_MAC; + pdata = ð1_pdata; + break; + default: + pr_err("unsupported ethernet unit: %d\n", unit); + return; + } + + mac = (u8 *)(KSEG1ADDR(ADM8668_SMEM1_BASE) + ADM8868_UBOOT_ENV + offset); + + memcpy(pdata->mac, mac, sizeof(pdata->mac)); +} + + int __devinit adm8668_devs_register(void) { int ret; @@ -129,6 +171,9 @@ int __devinit adm8668_devs_register(void) if (ret) panic("failed to register AMBA UART"); + adm8668_fetch_mac(0); + adm8668_fetch_mac(1); + return platform_add_devices(adm8668_devs, ARRAY_SIZE(adm8668_devs)); } arch_initcall(adm8668_devs_register);