hc
2024-05-10 37f49e37ab4cb5d0bc4c60eb5c6d4dd57db767bb
gmac get mac form eeprom
2 files modified
111 ■■■■ changed files
kernel/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c 40 ●●●●● patch | view | raw | blame | history
kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c 71 ●●●●● patch | view | raw | blame | history
kernel/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
....@@ -2718,9 +2718,10 @@
27182718 struct rk_priv_data *bsp_priv = priv;
27192719 struct device *dev = &bsp_priv->pdev->dev;
27202720 //unsigned char ethaddr[ETH_ALEN * MAX_ETH] = {0};
2721
- //int ret, id = bsp_priv->bus_id;
2722
- int i;
2721
+ int ret, id = bsp_priv->bus_id;
2722
+ //int i;
27232723
2724
+ printk("hw-debug:enter rk_get_eth_addr.. \n");
27242725 #if 0
27252726 if (is_valid_ether_addr(addr))
27262727 goto out;
....@@ -2753,21 +2754,30 @@
27532754 }
27542755 #endif
27552756
2756
- #if 1
2757
- if (at24_mac_read(macaddr) > 0) {
2758
- printk("ben %s: at24_mac_read Success!! \n", __func__);
2759
- memcpy(addr, macaddr, 6);
27602757
2761
- printk("Read the Ethernet MAC address from :");
2762
- for (i = 0; i < 5; i++)
2763
- printk("%2.2x:", addr[i]);
2758
+ //eeprom
2759
+ ret = at24_mac_read(macaddr);
2760
+ if (ret > 0)
2761
+ {
2762
+ printk("ben %s: at24_mac_read Success!! \n", __func__);
2763
+ memcpy(addr, macaddr, 6);
27642764
2765
- printk("%2.2x\n", addr[i]);
2766
- } else {
2767
- printk("ben %s: at24_mac_read Failed!! \n", __func__);
2768
- goto out;
2769
- }
2770
- #endif
2765
+ if ((addr[0] == 0x68) && (addr[1] == 0xed))
2766
+ {
2767
+ printk("at24_eeprom mac is valid \n", __func__);
2768
+ goto out;
2769
+ }
2770
+ else
2771
+ {
2772
+ printk("at24_eeprom mac is invalid \n", __func__);
2773
+ addr[0] = 0x68;
2774
+ addr[1] = 0xed;
2775
+ addr[2] = 0x01;
2776
+ addr[3] = 0x02;
2777
+ addr[4] = 0x03;
2778
+ addr[5] = 0x04;
2779
+ }
2780
+ }
27712781 out:
27722782 dev_err(dev, "%s: mac address: %pM\n", __func__, addr);
27732783 }
kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
....@@ -1101,6 +1101,7 @@
11011101 }
11021102 }
11031103
1104
+#if 0
11041105 static void rtl8211F_led_control(struct phy_device *phydev)
11051106 {
11061107 printk("ben debug:rtl8211F_led_control...1 \n");
....@@ -1117,6 +1118,44 @@
11171118 // phy_write(phydev, 16, 0x6C0A);
11181119 printk("ben debug:rtl8211F_led_control...2 \n");
11191120 }
1121
+#endif
1122
+#define RTL_8211F_PHY_ID 0x001cc916
1123
+#define RTL_8211F_PHY_ID_MASK 0x001fffff
1124
+#define RTL_8211F_PAGE_SELECT 0x1f
1125
+#define RTL_8211F_LCR_ADDR 0x10
1126
+
1127
+#define GREEN_LED 0 // Â̵ÆÊÇLED0
1128
+#define YELLOW0_LED 1 // »ÆµÆÊÇLED1
1129
+#define YELLOW1_LED 2 // »ÆµÆÊÇLED2
1130
+
1131
+static int rtl8211F_led_control(struct phy_device *phydev)
1132
+{
1133
+ unsigned int temp;
1134
+
1135
+ printk("<<<<<<ben test led ctrl start... %s\n",__FUNCTION__);
1136
+ if(!phydev) return 0;
1137
+ if(phydev->phy_id!=0x001cc916) return 0; /* only for 8211E*/
1138
+
1139
+ // ÅäÖÃÍø¿ÚLEDµÆ
1140
+ phy_write(phydev, 31, 0xd04);
1141
+ temp = 0x02 << (5 * GREEN_LED); // Â̵ƱíʾÁ¬½Ó״̬
1142
+ temp |= 0x08 << (5 * YELLOW0_LED); // »ÆµÆ±íʾÁ¬½Ó״̬
1143
+
1144
+ temp |= 0x1b << (5 * YELLOW1_LED); // »ÆµÆ±íʾÊý¾Ý°üÊÕ·¢×´Ì¬
1145
+ phy_write(phydev, 0x10, temp);
1146
+
1147
+ temp = 1 << (YELLOW1_LED + 1); // Â̵Ʋ»Ö¸Ê¾EEE½ÚÄÜ״̬, ²åÁËÍøÏߺóµÆÒª³£ÁÁ
1148
+ // µ«»ÆµÆÒªÖ¸Ê¾EEE½ÚÄÜ״̬, ûÓÐÊý¾Ý°üʱµÆÒªÏ¨Ãð
1149
+ phy_write(phydev, 0x11, 0x00);
1150
+ phy_write(phydev, 31, 0);
1151
+
1152
+ // ²åÉÏÍøÏߺó, Â̵Ƴ£ÁÁ; °ÎµôÍøÏߺó, Â̵ÆÏ¨Ãð
1153
+ // Á´Â·Ö§³ÖEEE½ÚÄÜ: ÓÐÊý¾Ý´«Êä, »ÆµÆÉÁ˸, ·ñÔòϨÃð
1154
+ // Á´Â·²»Ö§³ÖEEE½ÚÄÜ: ÓÐÊý¾Ý´«Êä, »ÆµÆÉÁ˸, ·ñÔò³£ÁÁ
1155
+
1156
+ printk("<<<<<<<ben test led ctrl end %s\n",__FUNCTION__);
1157
+ return 0;
1158
+}
11201159
11211160 /**
11221161 * stmmac_init_phy - PHY initialization
....@@ -1132,29 +1171,43 @@
11321171 struct device_node *node;
11331172 int ret;
11341173
1174
+
1175
+ printk("ben stmmac_init_phy .. \n");
1176
+ mdelay(2000);
1177
+ printk("ben stmmac_init_phy delay .. \n");
11351178 if (priv->plat->integrated_phy_power)
11361179 ret = priv->plat->integrated_phy_power(priv->plat->bsp_priv, true);
11371180
11381181 node = priv->plat->phylink_node;
11391182
11401183 if (node)
1184
+ {
1185
+ //printk("ben ttt.. \n");
11411186 ret = phylink_of_phy_connect(priv->phylink, node, 0);
1187
+ //printk("ben ttt:%d \n", ret);
1188
+ }
11421189
11431190 /* Some DT bindings do not set-up the PHY handle. Let's try to
11441191 * manually parse it
11451192 */
1193
+ //printk("ben:stmmac_init_phy..1 \n");
11461194 if (!node || ret) {
1195
+ //if (1) {
11471196 int addr = priv->plat->phy_addr;
11481197 struct phy_device *phydev;
11491198
1199
+ //printk("ben:stmmac_init_phy..2 \n");
11501200 phydev = mdiobus_get_phy(priv->mii, addr);
11511201 if (!phydev) {
11521202 netdev_err(priv->dev, "no phy at addr %d\n", addr);
11531203 return -ENODEV;
11541204 }
11551205
1156
- rtl8211F_led_control(phydev);
1206
+ //rtl8211F_led_control(phydev);
1207
+
1208
+ //printk("ben:stmmac_init_phy..3 \n");
11571209 ret = phylink_connect_phy(priv->phylink, phydev);
1210
+ //rtl8211F_led_control(phydev);
11581211 }
11591212
11601213 if (!priv->plat->pmt) {
....@@ -2884,6 +2937,7 @@
28842937 u32 chan;
28852938 int ret;
28862939
2940
+ //printk("ben:stmmac_open.. \n");
28872941 ret = pm_runtime_get_sync(priv->device);
28882942 if (ret < 0) {
28892943 pm_runtime_put_noidle(priv->device);
....@@ -2957,6 +3011,12 @@
29573011 goto init_error;
29583012 }
29593013 }
3014
+
3015
+
3016
+ #if 1
3017
+ printk("ben -------bootup add 2s delay time.\n");
3018
+ mdelay(2500);
3019
+ #endif
29603020
29613021 ret = stmmac_hw_setup(dev, true);
29623022 if (ret < 0) {
....@@ -5246,6 +5306,9 @@
52465306 */
52475307 pm_runtime_put(device);
52485308
5309
+ //add
5310
+ phy_register_fixup_for_uid(RTL_8211F_PHY_ID, RTL_8211F_PHY_ID_MASK, rtl8211F_led_control);
5311
+
52495312 return ret;
52505313
52515314 error_netdev_register:
....@@ -5457,6 +5520,12 @@
54575520 stmmac_free_tx_skbufs(priv);
54585521 stmmac_clear_descriptors(priv);
54595522
5523
+#if 1
5524
+ printk("ben -------resume add 2s delay time.\n");
5525
+ mdelay(2000);
5526
+
5527
+#endif
5528
+
54605529 stmmac_hw_setup(ndev, false);
54615530 stmmac_init_coalesce(priv);
54625531 stmmac_set_rx_mode(ndev);