From f258bb3ae540ccc311fd344a0121bba1928b85dd Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Tue, 13 Aug 2024 01:23:32 +0000 Subject: [PATCH] gmac get mac form eeprom --- kernel/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c | 24 +++++++++++++++++++++--- kernel/include/linux/platform_device.h | 5 +++++ kernel/include/linux/device/driver.h | 12 +++++++++++- kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 11 +++++++---- 4 files changed, 44 insertions(+), 8 deletions(-) diff --git a/kernel/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c b/kernel/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c index cf9c46e..27310a8 100644 --- a/kernel/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c +++ b/kernel/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c @@ -2711,13 +2711,15 @@ } EXPORT_SYMBOL(dwmac_rk_get_phy_interface); +static unsigned char macaddr[6]; +extern ssize_t at24_mac_read(unsigned char* addr); static void rk_get_eth_addr(void *priv, unsigned char *addr) { struct rk_priv_data *bsp_priv = priv; struct device *dev = &bsp_priv->pdev->dev; - unsigned char ethaddr[ETH_ALEN * MAX_ETH] = {0}; - int ret, id = bsp_priv->bus_id; + int i; +#if 0 if (is_valid_ether_addr(addr)) goto out; @@ -2747,6 +2749,22 @@ } else { memcpy(addr, ðaddr[id * ETH_ALEN], ETH_ALEN); } +#endif + + #if 1 + if (at24_mac_read(macaddr) > 0) { + printk("ben %s: at24_mac_read Success!! \n", __func__); + memcpy(addr, macaddr, 6); + printk("Read the Ethernet MAC address from :"); + for (i = 0; i < 5; i++) + printk("%2.2x:", addr[i]); + + printk("%2.2x\n", addr[i]); + } else { + printk("ben %s: at24_mac_read Failed!! \n", __func__); + goto out; + } + #endif out: dev_err(dev, "%s: mac address: %pM\n", __func__, addr); @@ -2920,7 +2938,7 @@ .of_match_table = rk_gmac_dwmac_match, }, }; -module_platform_driver(rk_gmac_dwmac_driver); +module_platform_driver1(rk_gmac_dwmac_driver); MODULE_AUTHOR("Chen-Zhi (Roger Chen) <roger.chen@rock-chips.com>"); MODULE_DESCRIPTION("Rockchip RK3288 DWMAC specific glue layer"); diff --git a/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index b1dc274..b380ef2 100644 --- a/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c @@ -2353,7 +2353,8 @@ */ static void stmmac_check_ether_addr(struct stmmac_priv *priv) { - if (!is_valid_ether_addr(priv->dev->dev_addr)) { +// if (!is_valid_ether_addr(priv->dev->dev_addr)) { + if(1) { stmmac_get_umac_addr(priv, priv->hw, priv->dev->dev_addr, 0); if (likely(priv->plat->get_eth_addr)) priv->plat->get_eth_addr(priv->plat->bsp_priv, @@ -5089,9 +5090,11 @@ /*switch to extension page31*/ phy_write(phydev, 31, 0xd04); - //phy_write(phydev, 0x10, 0x6d60); /*led1-green led2-yellow */ - phy_write(phydev, 0x10, 0xc160); /*led1-green led2-yellow */ - phy_write(phydev, 0x11, 0x8); + phy_write(phydev, 0x10, 0x6d20); /*led1-green led2-yellow */ + //phy_write(phydev, 0x10, 0xc160); /*led1-green led2-yellow */ + //phy_write(phydev, 0x11, 0x8); + val = phy_read(phydev, 0x10); + printk("%s in 0x10 val=0x%04x\n", __func__, val); /*switch back to page0*/ phy_write(phydev,31,0x0); diff --git a/kernel/include/linux/device/driver.h b/kernel/include/linux/device/driver.h index c52d23d..40e9f87 100644 --- a/kernel/include/linux/device/driver.h +++ b/kernel/include/linux/device/driver.h @@ -272,7 +272,17 @@ } \ module_exit(__driver##_exit); - +#define module_driver1(__driver, __register, __unregister, ...) \ +static int __init __driver##_init(void) \ +{ \ + return __register(&(__driver) , ##__VA_ARGS__); \ +} \ +arch_initcall(__driver##_init); \ +static void __exit __driver##_exit(void) \ +{ \ + __unregister(&(__driver) , ##__VA_ARGS__); \ +} \ +module_exit(__driver##_exit) #define module_driver2(__driver, __register, __unregister, ...) \ static int __init __driver##_init(void) \ diff --git a/kernel/include/linux/platform_device.h b/kernel/include/linux/platform_device.h index 72b8a95..78ebefe 100644 --- a/kernel/include/linux/platform_device.h +++ b/kernel/include/linux/platform_device.h @@ -256,6 +256,11 @@ module_driver(__platform_driver, platform_driver_register, \ platform_driver_unregister) + +#define module_platform_driver1(__platform_driver) \ + module_driver1(__platform_driver, platform_driver_register, \ + platform_driver_unregister) + /* builtin_platform_driver() - Helper macro for builtin drivers that * don't do anything special in driver init. This eliminates some * boilerplate. Each driver may only use this macro once, and -- Gitblit v1.6.2