[feature] ethernet of 88Q2220 phy ok
Change-Id: I232fa154b28158e7adfd3c2db20b3e297fb1a967
diff --git a/src/kernel/linux/v4.19/arch/arm64/boot/dts/mediatek/auto2735evb.dts b/src/kernel/linux/v4.19/arch/arm64/boot/dts/mediatek/auto2735evb.dts
index ecb8e49..e544fbc 100755
--- a/src/kernel/linux/v4.19/arch/arm64/boot/dts/mediatek/auto2735evb.dts
+++ b/src/kernel/linux/v4.19/arch/arm64/boot/dts/mediatek/auto2735evb.dts
@@ -103,13 +103,13 @@
&snps_mac {
phy-mode ="rgmii-rxid";
- phy-handle = <ð_phy0>;
+ phy-handle = <ð_phy2>;
pinctrl-names = "default", "sleep";
pinctrl-0 = <ð_default>;
pinctrl-1 = <ð_sleep>;
mediatek,tx-delay-ps = <560>;
mediatek,rx-delay-ps = <1440>;
- snps,reset-gpio = <&pio 25 GPIO_ACTIVE_LOW>;
+ snps,reset-gpio = <&pio 26 GPIO_ACTIVE_LOW>;
snps,reset-active-low;
snps,reset-delays-us = <0 1000 0>;
status = "okay";
@@ -119,11 +119,18 @@
#address-cells = <1>;
#size-cells = <0>;
eth_phy0: eth_phy0@1 {
-
compatible = "ethernet-phy-ieee802.3-c22";
reg = <0x1>;
};
+ eth_phy2: eth_phy2@0 {
+ compatible = "ethernet-phy-ieee802.3-c45";
+ phy-intr-gpio=<&pio 25 0>;
+ marvell,88q2220=<100 0>;
+ //reg = <0x0>;
+
+ };
+
};
};
diff --git a/src/kernel/linux/v4.19/drivers/net/phy/phy_device.c b/src/kernel/linux/v4.19/drivers/net/phy/phy_device.c
old mode 100644
new mode 100755
index 2560bbb..bd80158
--- a/src/kernel/linux/v4.19/drivers/net/phy/phy_device.c
+++ b/src/kernel/linux/v4.19/drivers/net/phy/phy_device.c
@@ -476,9 +476,29 @@
u32 *devices_in_package)
{
int phy_reg, reg_addr;
+ mdiobus_write(bus, addr, 0xd, 0x0001);
+ mdiobus_write(bus, addr, 0xe, 0x0002);
+ mdiobus_write(bus, addr, 0xd, 0x4001);
+ phy_reg = mdiobus_read(bus, addr, 0xe);
+ printk("PHY_REG = %x\n",phy_reg);
+ if (phy_reg < 0)
+ return -EIO;
+ *devices_in_package = (phy_reg & 0xffff) << 16;
+ mdiobus_write(bus, addr, 0xd, 0x0001);
+ mdiobus_write(bus, addr, 0xe, 0x0003);
+ mdiobus_write(bus, addr, 0xd, 0x4001);
+ phy_reg = mdiobus_read(bus, addr, 0xe);
+ if (phy_reg < 0)
+ return -EIO;
+ *devices_in_package |= (phy_reg & 0xffff);
+ printk("phy IDDDD = %x\n",*devices_in_package);
+
+ return 0;
reg_addr = MII_ADDR_C45 | dev_addr << 16 | MDIO_DEVS2;
+ printk("reg addr = %x\n",reg_addr);
phy_reg = mdiobus_read(bus, addr, reg_addr);
+ printk("phy reg = %x\n",phy_reg);
if (phy_reg < 0)
return -EIO;
*devices_in_package = (phy_reg & 0xffff) << 16;
@@ -508,7 +528,7 @@
static int get_phy_c45_ids(struct mii_bus *bus, int addr, u32 *phy_id,
struct phy_c45_device_ids *c45_ids) {
int phy_reg;
- int i, reg_addr;
+ int i ;/*reg_addr*/
const int num_ids = ARRAY_SIZE(c45_ids->device_ids);
u32 *devs = &c45_ids->devices_in_package;
@@ -541,8 +561,24 @@
/* Now probe Device Identifiers for each device present. */
for (i = 1; i < num_ids; i++) {
- if (!(c45_ids->devices_in_package & (1 << i)))
- continue;
+ //if (!(c45_ids->devices_in_package & (1 << i)))
+ //continue;
+ mdiobus_write(bus, addr, 0xd, 0x0001);
+ mdiobus_write(bus, addr, 0xe, 0x0002);
+ mdiobus_write(bus, addr, 0xd, 0x4001);
+ phy_reg = mdiobus_read(bus, addr, 0xe);
+ if (phy_reg < 0)
+ return -EIO;
+ c45_ids->device_ids[i] = (phy_reg & 0xffff) << 16;
+
+ mdiobus_write(bus, addr, 0xd, 0x0001);
+ mdiobus_write(bus, addr, 0xe, 0x0003);
+ mdiobus_write(bus, addr, 0xd, 0x4001);
+ phy_reg = mdiobus_read(bus, addr, 0xe);
+ if (phy_reg < 0)
+ return -EIO;
+ c45_ids->device_ids[i] |= (phy_reg & 0xffff);
+ /*
reg_addr = MII_ADDR_C45 | i << 16 | MII_PHYSID1;
phy_reg = mdiobus_read(bus, addr, reg_addr);
@@ -555,6 +591,7 @@
if (phy_reg < 0)
return -EIO;
c45_ids->device_ids[i] |= (phy_reg & 0xffff);
+ */
}
*phy_id = 0;
return 0;
@@ -630,9 +667,10 @@
memset(c45_ids.device_ids, 0xff, sizeof(c45_ids.device_ids));
r = get_phy_id(bus, addr, &phy_id, is_c45, &c45_ids);
- printk("phy id = %x\n",phy_id);
+ printk("phy_id = %x\n",c45_ids.device_ids[1]);
if (r)
return ERR_PTR(r);
+
/* If the phy_id is mostly Fs, there is no device there */
if ((phy_id & 0x1fffffff) == 0x1fffffff)
return ERR_PTR(-ENODEV);
@@ -2067,8 +2105,8 @@
return retval;
}
-
printk("%s: Registered new driver\n", new_driver->name);
+
pr_debug("%s: Registered new driver\n", new_driver->name);
return 0;
@@ -2127,7 +2165,7 @@
int rc;
rc = mdio_bus_init();
- if (rc)
+ if (rc)
return rc;
rc = phy_driver_register(&genphy_10g_driver, THIS_MODULE);
@@ -2137,7 +2175,6 @@
rc = phy_driver_register(&genphy_driver, THIS_MODULE);
if (rc) {
phy_driver_unregister(&genphy_10g_driver);
-
err_10g:
mdio_bus_exit();
}