From 44b74a383b6f044701265ff5aedbb68bb35d29bb Mon Sep 17 00:00:00 2001 From: Bhadram Varka Date: Thu, 23 Sep 2021 08:44:54 +0530 Subject: [PATCH] nvethernet: Don't stop PHY RXC in LPI Issue: To save more power PHY RXC will be disabled when PHY in LPI state by setting 10th bit in below register. This is standard PHY register. - PCS Control 1 register (MMD device 3, Address 0x00) When EEE enabled above register being programmed (10th bit got set) and it created issue while accessing the MAC registers through indirect addressing since RXC stopped from PHY. Fix: Don't stop RXC in LPI for Orin EQOS Bug 200776300 Bug 200765092 Change-Id: I4150eebe8e2a5ab79ad5b7180232adad2331e315 Signed-off-by: Bhadram Varka Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvidia/+/2599137 Reviewed-by: svc_kernel_abi Reviewed-by: Narayan Reddy Reviewed-by: Rakesh Goyal Reviewed-by: Bitan Biswas Reviewed-by: mobile promotions GVS: Gerrit_Virtual_Submit Tested-by: mobile promotions --- drivers/net/ethernet/nvidia/nvethernet/ether_linux.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/nvidia/nvethernet/ether_linux.c b/drivers/net/ethernet/nvidia/nvethernet/ether_linux.c index f92b9ae4..ed045f7f 100644 --- a/drivers/net/ethernet/nvidia/nvethernet/ether_linux.c +++ b/drivers/net/ethernet/nvidia/nvethernet/ether_linux.c @@ -738,6 +738,7 @@ static int ether_enable_clks(struct ether_priv_data *pdata) */ int ether_conf_eee(struct ether_priv_data *pdata, unsigned int tx_lpi_enable) { + struct osi_core_priv_data *osi_core = pdata->osi_core; int ret = 0; struct phy_device *phydev = pdata->phydev; unsigned int enable = tx_lpi_enable; @@ -745,7 +746,9 @@ int ether_conf_eee(struct ether_priv_data *pdata, unsigned int tx_lpi_enable) if (tx_lpi_enable) { /* phy_init_eee() returns 0 if EEE is supported by the PHY */ - if (phy_init_eee(phydev, OSI_ENABLE)) { + if (phy_init_eee(phydev, + (osi_core->mac_ver == OSI_EQOS_MAC_5_30) ? + false : true)) { /* PHY does not support EEE, disable it in MAC */ enable = OSI_DISABLE; } else {