RTL8201 替换适配国产JL11网卡

shell@EMT100X:/ $ dmesg | grep PHY
<6>[    2.321807] eth0: PHY ID 937c4023 at 0 IRQ 193 (stmmac-0:00) active
<6>[    2.321812] eth0: PHY ID 937c4023 at 1 IRQ 193 (stmmac-0:01) active


commit 975ce7c514fe7f7109b1f4515f6d51f7a2b8c442
Author: linzheming <linzheming@star-net.cn>
Date:   Tue Apr 20 17:09:27 2021 +0800

    修改phy id

diff --git a/kernel/drivers/net/ethernet/rockchip/gmac/stmmac.h b/kernel/drivers/net/ethernet/rockchip/gmac/stmmac.h
index 8a29ae1..2636f5c 100755
--- a/kernel/drivers/net/ethernet/rockchip/gmac/stmmac.h
+++ b/kernel/drivers/net/ethernet/rockchip/gmac/stmmac.h
@@ -35,6 +35,8 @@
 
  //add by xlm
  #define RTL_8201F_PHY_ID  0x001cc816
+//add by lzm
+#define JL1101_PHY_ID  0x937c4023
  /* &xlm* */
 
  struct stmmac_priv {
diff --git a/kernel/drivers/net/ethernet/rockchip/gmac/stmmac_mdio.c b/kernel/drivers/net/ethernet/rockchip/gmac/stmmac_mdio.c
index f259834..086bcde 100755
--- a/kernel/drivers/net/ethernet/rockchip/gmac/stmmac_mdio.c
+++ b/kernel/drivers/net/ethernet/rockchip/gmac/stmmac_mdio.c


static int phy_rtl8201f_fixup(struct phy_device *phydev)
{
     int value;

    printk("register PHY board fixup.\n");
     /* use page 7 */
     value = phy_read(phydev, 31);
     value &= 0xff00;
     value |= 0x0007;
     value = phy_write(phydev, 31, value);

    /* set customized led enable */
     value = phy_read(phydev, 19);
     //value &= ~(0x11<<4);//11
     value |= 0x1<<3;
     phy_write(phydev, 19, value);

    /* set led0 link,led1 act */
     value &= 0x0000;
     value |= 0x83;
     phy_write(phydev, 17, value);

         /* use page 7 */
     value = phy_read(phydev, 31);
     value &= 0x0000;
     value = phy_write(phydev, 31, value);

    return 0;
}

static int phy_JL1111_fixup(struct phy_device *phydev)
{
     int rdata;

    printk("phy_JL1111_fixup.\n");
     // Step 1: Enable LED Custom Function
     phy_write(phydev, 31, 7);// page_sel -> 7
     rdata = phy_read(phydev, 19); // read register 19 config
     rdata = rdata | (1 << 3); // enable led custom function
     phy_write(phydev, 19, rdata);// write config to register 19

    // Step2: Config LED Custom Register
     phy_write(phydev, 31, 129);// page_sel -> 129
     rdata = phy_read(phydev, 24); // read led custom register
     /* set led0 link,led1 act */
     rdata = rdata & ~(1 << 13); // LED1 disable 10 Link
     rdata = rdata & ~(1 << 12); // LED1 disable 100 Link
     rdata = rdata | (1 << 11); // LED1 enable 10 Activity
     rdata = rdata | (1 << 10); // LED1 enable 100 Activity
     rdata = rdata | (1 << 5); // LED0 enable 10 Link
     rdata = rdata | (1 << 4); // LED0 enable 100 Link
     rdata = rdata & ~(1 << 3); // LED0 disable 10 Activity
     rdata = rdata & ~(1 << 2); // LED0 disable 100 Activity

    phy_write(phydev, 24, rdata); // write led custom register

    return 0;
}


@@ -148,6 +148,7 @@ static int phy_rtl8201f_fixup(struct phy_device *phydev)
  {
      int value;
 
+       printk("register PHY board fixup.\n");
      /* use page 7 */
      value = phy_read(phydev, 31);
      value &= 0xff00;
@@ -273,9 +274,16 @@ int stmmac_mdio_register(struct net_device *ndev)
      err = phy_register_fixup_for_uid(RTL_8201F_PHY_ID, 0xffffffff,
              phy_rtl8201f_fixup);
                 /* we can live without it, so just issue a warning */
+                printk("RTL_8201F_PHY_ID\n");
          if (err)
                  printk("Cannot register PHY board fixup.\n");
         /* &xlm* */
+    err = phy_JL1111_fixup(JL1101_PHY_ID, 0xffffffff,
+            phy_rtl8201f_fixup);
+                printk("JL1101_PHY_ID\n");
+               /* we can live without it, so just issue a warning */
+        if (err)
+                printk("Cannot register PHY board fixup.\n");

posted on 2021-04-20 17:18  katago  阅读(942)  评论(0编辑  收藏  举报