hc
2024-08-13 f258bb3ae540ccc311fd344a0121bba1928b85dd
gmac get mac form eeprom
4 files modified
52 ■■■■ changed files
kernel/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c 24 ●●●● patch | view | raw | blame | history
kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c 11 ●●●●● patch | view | raw | blame | history
kernel/include/linux/device/driver.h 12 ●●●●● patch | view | raw | blame | history
kernel/include/linux/platform_device.h 5 ●●●●● patch | view | raw | blame | history
kernel/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
....@@ -2711,13 +2711,15 @@
27112711 }
27122712 EXPORT_SYMBOL(dwmac_rk_get_phy_interface);
27132713
2714
+static unsigned char macaddr[6];
2715
+extern ssize_t at24_mac_read(unsigned char* addr);
27142716 static void rk_get_eth_addr(void *priv, unsigned char *addr)
27152717 {
27162718 struct rk_priv_data *bsp_priv = priv;
27172719 struct device *dev = &bsp_priv->pdev->dev;
2718
- unsigned char ethaddr[ETH_ALEN * MAX_ETH] = {0};
2719
- int ret, id = bsp_priv->bus_id;
2720
+ int i;
27202721
2722
+#if 0
27212723 if (is_valid_ether_addr(addr))
27222724 goto out;
27232725
....@@ -2747,6 +2749,22 @@
27472749 } else {
27482750 memcpy(addr, &ethaddr[id * ETH_ALEN], ETH_ALEN);
27492751 }
2752
+#endif
2753
+
2754
+ #if 1
2755
+ if (at24_mac_read(macaddr) > 0) {
2756
+ printk("ben %s: at24_mac_read Success!! \n", __func__);
2757
+ memcpy(addr, macaddr, 6);
2758
+ printk("Read the Ethernet MAC address from :");
2759
+ for (i = 0; i < 5; i++)
2760
+ printk("%2.2x:", addr[i]);
2761
+
2762
+ printk("%2.2x\n", addr[i]);
2763
+ } else {
2764
+ printk("ben %s: at24_mac_read Failed!! \n", __func__);
2765
+ goto out;
2766
+ }
2767
+ #endif
27502768
27512769 out:
27522770 dev_err(dev, "%s: mac address: %pM\n", __func__, addr);
....@@ -2920,7 +2938,7 @@
29202938 .of_match_table = rk_gmac_dwmac_match,
29212939 },
29222940 };
2923
-module_platform_driver(rk_gmac_dwmac_driver);
2941
+module_platform_driver1(rk_gmac_dwmac_driver);
29242942
29252943 MODULE_AUTHOR("Chen-Zhi (Roger Chen) <roger.chen@rock-chips.com>");
29262944 MODULE_DESCRIPTION("Rockchip RK3288 DWMAC specific glue layer");
kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
....@@ -2353,7 +2353,8 @@
23532353 */
23542354 static void stmmac_check_ether_addr(struct stmmac_priv *priv)
23552355 {
2356
- if (!is_valid_ether_addr(priv->dev->dev_addr)) {
2356
+// if (!is_valid_ether_addr(priv->dev->dev_addr)) {
2357
+ if(1) {
23572358 stmmac_get_umac_addr(priv, priv->hw, priv->dev->dev_addr, 0);
23582359 if (likely(priv->plat->get_eth_addr))
23592360 priv->plat->get_eth_addr(priv->plat->bsp_priv,
....@@ -5089,9 +5090,11 @@
50895090 /*switch to extension page31*/
50905091 phy_write(phydev, 31, 0xd04);
50915092
5092
- //phy_write(phydev, 0x10, 0x6d60); /*led1-green led2-yellow */
5093
- phy_write(phydev, 0x10, 0xc160); /*led1-green led2-yellow */
5094
- phy_write(phydev, 0x11, 0x8);
5093
+ phy_write(phydev, 0x10, 0x6d20); /*led1-green led2-yellow */
5094
+ //phy_write(phydev, 0x10, 0xc160); /*led1-green led2-yellow */
5095
+ //phy_write(phydev, 0x11, 0x8);
5096
+ val = phy_read(phydev, 0x10);
5097
+ printk("%s in 0x10 val=0x%04x\n", __func__, val);
50955098
50965099 /*switch back to page0*/
50975100 phy_write(phydev,31,0x0);
kernel/include/linux/device/driver.h
....@@ -272,7 +272,17 @@
272272 } \
273273 module_exit(__driver##_exit);
274274
275
-
275
+#define module_driver1(__driver, __register, __unregister, ...) \
276
+static int __init __driver##_init(void) \
277
+{ \
278
+ return __register(&(__driver) , ##__VA_ARGS__); \
279
+} \
280
+arch_initcall(__driver##_init); \
281
+static void __exit __driver##_exit(void) \
282
+{ \
283
+ __unregister(&(__driver) , ##__VA_ARGS__); \
284
+} \
285
+module_exit(__driver##_exit)
276286
277287 #define module_driver2(__driver, __register, __unregister, ...) \
278288 static int __init __driver##_init(void) \
kernel/include/linux/platform_device.h
....@@ -256,6 +256,11 @@
256256 module_driver(__platform_driver, platform_driver_register, \
257257 platform_driver_unregister)
258258
259
+
260
+#define module_platform_driver1(__platform_driver) \
261
+ module_driver1(__platform_driver, platform_driver_register, \
262
+ platform_driver_unregister)
263
+
259264 /* builtin_platform_driver() - Helper macro for builtin drivers that
260265 * don't do anything special in driver init. This eliminates some
261266 * boilerplate. Each driver may only use this macro once, and