[bugfix] ethernet of 88Q2220 phy ok
Change-Id: I2b25cdb22ddbd291651aac13c93c028f7c13a10d
diff --git a/src/kernel/linux/v4.19/drivers/net/phy/marvell-88q.c b/src/kernel/linux/v4.19/drivers/net/phy/marvell-88q.c
old mode 100644
new mode 100755
index 297a56b..d37df67
--- a/src/kernel/linux/v4.19/drivers/net/phy/marvell-88q.c
+++ b/src/kernel/linux/v4.19/drivers/net/phy/marvell-88q.c
@@ -6,7 +6,7 @@
#include <linux/phy.h>
#include <linux/of.h>
-#define PHY_ID_88Q2110 0x002b0980
+#define PHY_ID_88Q2220 0x002b0b21
#define Q2110_PMA_PMD_CTRL (MII_ADDR_C45 | 0x10000)
/* 1 = PMA/PMD reset, 0 = Normal */
@@ -29,7 +29,7 @@
/* 1 = Link Up, 0 = Link Down */
#define Q2110_T1_LINK_STATUS BIT(2)
-#define Q2110_COM_PORT_CTRL (MII_ADDR_C45 | 0x1f8001)
+#define Q2110_COM_PORT_CTRL (MII_ADDR_C45 | 0x4A001)
/* Add delay on TX_CLK */
#define Q2110_RGMII_TX_TIMING_CTRL BIT(15)
/* Add delay on RX_CLK */
@@ -52,13 +52,14 @@
return 0;
paddr = of_get_property(phydev->mdio.dev.of_node,
- "marvell,88q2110", &len);
+ "marvell,88q2220", &len);
if (!paddr)
return 0;
speed = be32_to_cpup(paddr);
master = be32_to_cpup(paddr + 1);
-
+printk("speed = %d\n",speed);
+printk("master = %d\n",master);
val = phy_read(phydev, Q2110_T1_PMA_PMD_CTRL);
if (val < 0)
return val;
@@ -70,8 +71,11 @@
val = phy_write(phydev, Q2110_T1_PMA_PMD_CTRL, val);
if (val < 0)
return val;
-
+
/* Software Reset PHY */
+ //phy_write(phydev, (MII_ADDR_C45 | 0x030900), 0x8000);
+ //phy_write(phydev, (MII_ADDR_C45 | 0x03FFE4), 0x000C);
+
val = phy_read(phydev, Q2110_PMA_PMD_CTRL);
if (val < 0)
return val;
@@ -85,6 +89,8 @@
if (val < 0)
return val;
} while (val & Q2110_PMA_PMD_RST);
+
+ printk("q2110 dts init ok!!\n");
return 0;
}
@@ -114,7 +120,7 @@
return val;
}
- /* Software Reset of T-unit */
+
val = phy_read(phydev, Q2110_RST_CTRL);
if (val < 0)
return val;
@@ -123,7 +129,6 @@
if (val < 0)
return val;
- /* not self-clearing */
val = phy_read(phydev, Q2110_RST_CTRL);
if (val < 0)
return val;
@@ -143,7 +148,8 @@
SUPPORTED_1000baseT_Full | SUPPORTED_100baseT_Full;
phydev->state = PHY_NOLINK;
phydev->autoneg = AUTONEG_DISABLE;
-
+
+printk("q2110_config_init \n");
q2110_dts_init(phydev);
q2110_timing_init(phydev);
@@ -169,6 +175,7 @@
return 0;
}
+
static int q2110_read_status(struct phy_device *phydev)
{
int val;
@@ -176,19 +183,10 @@
phydev->duplex = 1;
phydev->pause = 0;
- if (!phy_polling_mode(phydev) || !phydev->link) {
- val = phy_read(phydev, Q2110_T1_AN_STATUS);
- if (val < 0)
- return val;
- else if (val & Q2110_T1_LINK_STATUS)
- goto done;
- }
-
val = phy_read(phydev, Q2110_T1_AN_STATUS);
if (val < 0)
return val;
-done:
if (val & Q2110_T1_LINK_STATUS)
phydev->link = 1;
else
@@ -208,14 +206,14 @@
static int q2110_match_phy_device(struct phy_device *phydev)
{
- return (phydev->c45_ids.device_ids[1] & 0xfffffff0) == PHY_ID_88Q2110;
+ return (phydev->c45_ids.device_ids[1] & 0xffffffff) == PHY_ID_88Q2220;
}
static struct phy_driver marvell_88q_driver[] = {
{
- .phy_id = PHY_ID_88Q2110,
+ .phy_id = PHY_ID_88Q2220,
.phy_id_mask = 0xfffffff0,
- .name = "Marvell 88Q2110",
+ .name = "Marvell 88Q2220",
.config_init = q2110_config_init,
.match_phy_device = q2110_match_phy_device,
.set_loopback = &q2110_loopback,