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