[Bugfix][API-1149]fix eth2 link down
Change-Id: Id23b62c9b8e64f4c275bd6012bb13a47f1e7d84a
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/auto2735evb.dts b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/auto2735evb.dts
index d0f02dd..fa22ff4 100755
--- a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/auto2735evb.dts
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/auto2735evb.dts
@@ -1573,18 +1573,45 @@
};
/*Lxf add in 2022/12/2 for gpio init*/
&gpio_init{
- phy_power_gpio_24{
- gpio_num = <24>;
- gpio_mode = <0>;
- gpio_dir = <1>;
- gpio_dout = <1>;
- };
- phy_switch_gpio_178{
- gpio_num = <178>;
- gpio_mode = <0>;
- gpio_dir = <1>;
- gpio_dout = <1>;
- };
+ phy_power_gpio_24_down{
+ gpio_num = <24>;
+ gpio_mode = <0>;
+ gpio_dir = <1>;
+ gpio_dout = <0>;
+ };
+ phy_switch_gpio_178_down{
+ gpio_num = <178>;
+ gpio_mode = <0>;
+ gpio_dir = <1>;
+ gpio_dout = <0>;
+ };
+ phy_switch_gpio_26_down{
+ gpio_num = <26>;
+ gpio_mode = <0>;
+ gpio_dir = <1>;
+ gpio_dout = <0>;
+ post_mdelay_time = <30>;
+ };
+ phy_power_gpio_24_up{
+ gpio_num = <24>;
+ gpio_mode = <0>;
+ gpio_dir = <1>;
+ gpio_dout = <1>;
+ };
+ phy_switch_gpio_178_up{
+ gpio_num = <178>;
+ gpio_mode = <0>;
+ gpio_dir = <1>;
+ gpio_dout = <1>;
+ post_mdelay_time = <30>;
+ };
+ phy_switch_gpio_26_up{
+ gpio_num = <26>;
+ gpio_mode = <0>;
+ gpio_dir = <1>;
+ gpio_dout = <1>;
+ post_mdelay_time = <15>;
+ };
};
/*Lxf add in 2022/12/2 for gpio init end*/
/*youchen@2023-01-05 add for lpm suspend actions begin*/
diff --git a/src/bsp/lk/platform/mt2735/drivers/gpio/mt_gpio.c b/src/bsp/lk/platform/mt2735/drivers/gpio/mt_gpio.c
index 0915b9c..5276983 100755
--- a/src/bsp/lk/platform/mt2735/drivers/gpio/mt_gpio.c
+++ b/src/bsp/lk/platform/mt2735/drivers/gpio/mt_gpio.c
@@ -858,6 +858,11 @@
// mt_set_gpio_dir(GPIO24, GPIO_DIR_OUT);
// mt_set_gpio_out(GPIO24, GPIO_OUT_ZERO);
//xf.li2023/03/07 modify for phy gpio end
+ /* GPIO26 */
+ mt_set_gpio_mode(GPIO26, 0);
+ mt_set_gpio_dir(GPIO26, GPIO_DIR_OUT);
+ mt_set_gpio_out(GPIO26, GPIO_OUT_ZERO);
+
mt_set_gpio_mode(GPIO25, 0);
mt_set_gpio_dir(GPIO25, GPIO_DIR_OUT);
mt_set_gpio_out(GPIO25, GPIO_OUT_ZERO);
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 8bc1189..c1af865 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
@@ -1573,18 +1573,45 @@
};
/*Lxf add in 2022/12/2 for gpio init*/
&gpio_init{
- phy_power_gpio_24{
- gpio_num = <24>;
- gpio_mode = <0>;
- gpio_dir = <1>;
- gpio_dout = <1>;
- };
- phy_switch_gpio_178{
- gpio_num = <178>;
- gpio_mode = <0>;
- gpio_dir = <1>;
- gpio_dout = <1>;
- };
+ phy_power_gpio_24_down{
+ gpio_num = <24>;
+ gpio_mode = <0>;
+ gpio_dir = <1>;
+ gpio_dout = <0>;
+ };
+ phy_switch_gpio_178_down{
+ gpio_num = <178>;
+ gpio_mode = <0>;
+ gpio_dir = <1>;
+ gpio_dout = <0>;
+ };
+ phy_switch_gpio_26_down{
+ gpio_num = <26>;
+ gpio_mode = <0>;
+ gpio_dir = <1>;
+ gpio_dout = <0>;
+ post_mdelay_time = <30>;
+ };
+ phy_power_gpio_24_up{
+ gpio_num = <24>;
+ gpio_mode = <0>;
+ gpio_dir = <1>;
+ gpio_dout = <1>;
+ };
+ phy_switch_gpio_178_up{
+ gpio_num = <178>;
+ gpio_mode = <0>;
+ gpio_dir = <1>;
+ gpio_dout = <1>;
+ post_mdelay_time = <30>;
+ };
+ phy_switch_gpio_26_up{
+ gpio_num = <26>;
+ gpio_mode = <0>;
+ gpio_dir = <1>;
+ gpio_dout = <1>;
+ post_mdelay_time = <15>;
+ };
};
/*Lxf add in 2022/12/2 for gpio init end*/
/*youchen@2023-01-05 add for lpm suspend actions begin*/
diff --git a/src/kernel/linux/v4.19/drivers/lynq_gpio_init/lynq_gpio_init.h b/src/kernel/linux/v4.19/drivers/lynq_gpio_init/lynq_gpio_init.h
index 1d58455..e2e1241 100755
--- a/src/kernel/linux/v4.19/drivers/lynq_gpio_init/lynq_gpio_init.h
+++ b/src/kernel/linux/v4.19/drivers/lynq_gpio_init/lynq_gpio_init.h
@@ -11,6 +11,7 @@
#include <linux/sysfs.h>
#include <linux/stat.h>
#include <linux/slab.h>
+#include <linux/delay.h>
#include "../pinctrl/mediatek/pinctrl-mtk-common-v2_debug.h"
#include "../pinctrl/mediatek/pinctrl-mtk-common-v2.h"
@@ -25,6 +26,8 @@
int gpio_dir;
int gpio_dout;
int gpio_din;
+ int pre_mdelay_time;
+ int post_mdelay_time;
};
//struct gpio_node *gpio_test;
@@ -112,7 +115,7 @@
int set_gpio(struct device_node *gpio_node, int num)
{
int ret = 0;
- unsigned int gpio_num, gpio_mode, gpio_dir, gpio_dout, gpio_din;
+ unsigned int gpio_num, gpio_mode, gpio_dir, gpio_dout, gpio_din, pre_mdelay_time, post_mdelay_time;
int read_mode = -1;
gpio_node_list[num].gpio_num = -1;
@@ -121,6 +124,23 @@
gpio_node_list[num].gpio_din = -1;
gpio_node_list[num].gpio_dout = -1;
+ ret = of_property_read_u32(gpio_node, "pre_mdelay_time", &pre_mdelay_time);
+ if(ret == -EINVAL || ret == -ENODATA)
+ {
+ printk("no value or no node");
+ log_offset += sprintf(log_info + log_offset,"No pre_mdelay_time\n");
+ }
+ else if(ret < 0)
+ {
+ printk("GPIO_INIT:READ ERROR: %d", ret);
+ log_offset += sprintf(log_info + log_offset, "GPIO_INIT: read num ERROR: %d\n", ret);
+ return ret;
+ }
+ else
+ {
+ mdelay(pre_mdelay_time);
+ }
+
//get the gpio hw
ret = of_property_read_u32(gpio_node, "gpio_num", &gpio_num);
if(ret == -EINVAL || ret == -ENODATA)
@@ -311,5 +331,23 @@
error_offset += sprintf(error_info + error_offset, "GPIO_INIT: din: %u out of the range 0-1\n", gpio_din);
}
}
+
+ ret = of_property_read_u32(gpio_node, "post_mdelay_time", &post_mdelay_time);
+ if(ret == -EINVAL || ret == -ENODATA)
+ {
+ printk("no value or no node");
+ log_offset += sprintf(log_info + log_offset,"No post_mdelay_time\n");
+ }
+ else if(ret < 0)
+ {
+ printk("GPIO_INIT:READ ERROR: %d", ret);
+ log_offset += sprintf(log_info + log_offset, "GPIO_INIT: read num ERROR: %d\n", ret);
+ return ret;
+ }
+ else
+ {
+ mdelay(post_mdelay_time);
+ }
+
return ret;
}
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
index ab00fb0..930c382 100755
--- a/src/kernel/linux/v4.19/drivers/net/phy/marvell-88q.c
+++ b/src/kernel/linux/v4.19/drivers/net/phy/marvell-88q.c
@@ -153,6 +153,7 @@
phydev->state = PHY_NOLINK;
phydev->autoneg = AUTONEG_DISABLE;
phy_write(phydev, MII_ADDR_C45 | 0x038033, 0x6801);
+ phy_write(phydev, MII_ADDR_C45 | 0x070200, 0x0000U);
phy_write(phydev, MII_ADDR_C45 | 0x010000, 0x840);
phy_write(phydev, MII_ADDR_C45 | 0x03FE1B, 0x48);
phy_write(phydev, MII_ADDR_C45 | 0x01FFE4, 0x6B6);
@@ -169,6 +170,9 @@
phy_write(phydev, MII_ADDR_C45 | 0x078032, 0x2020);
phy_write(phydev, MII_ADDR_C45 | 0x078031, 0xA28);
phy_write(phydev, MII_ADDR_C45 | 0x078031, 0xC28);
+ phy_write(phydev, MII_ADDR_C45 | 0x03FFDB, 0xFC10);
+ phy_write(phydev, MII_ADDR_C45 | 0x03FE1B, 0x58);
+
phy_write(phydev, MII_ADDR_C45 | 0x03803A, 0xDA44);
phy_write(phydev, MII_ADDR_C45 | 0x038039, 0x2C0B);
@@ -176,7 +180,7 @@
q2110_timing_init(phydev);
q2110_dts_init(phydev);
-
+ printk("phy init ok\n");
return 0;
}