From 0bd3dc413536f1e102bc9fbff73dd87fdba2324c Mon Sep 17 00:00:00 2001 From: Mohan Thadikamalla Date: Wed, 13 Nov 2019 13:41:29 +0530 Subject: [PATCH] nvethernetrm: Remove sleep on MDIO PHY read/write Issue: C6 exit latency tests are failing due to NvEthernet driver sleep in MDIO read and write calls. Fix: Remove sleep from poll_for_mii_idle function and convert it to incremental delay up to 0.5 seconds. Bug 200545651 Change-Id: I2a03f21686444862f2f48b64f1f812be878c459b Signed-off-by: Mohan Thadikamalla Reviewed-on: https://git-master.nvidia.com/r/2238178 Reviewed-by: svc-mobile-coverity Reviewed-by: svc-mobile-misra Reviewed-by: svc-mobile-cert Reviewed-by: Bhadram Varka Reviewed-by: Automatic_Commit_Validation_User GVS: Gerrit_Virtual_Submit Reviewed-by: Narayan Reddy Reviewed-by: Bitan Biswas Reviewed-by: mobile promotions Tested-by: mobile promotions --- osi/core/osi_core.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/osi/core/osi_core.c b/osi/core/osi_core.c index dc40d89..576a494 100644 --- a/osi/core/osi_core.c +++ b/osi/core/osi_core.c @@ -53,7 +53,8 @@ */ static inline int poll_for_mii_idle(struct osi_core_priv_data *osi_core) { - unsigned int retry = 1000; + /* half sec timeout */ + unsigned int retry = 50000; unsigned int mac_gmiiar; unsigned int count; int cond = 1; @@ -69,13 +70,15 @@ static inline int poll_for_mii_idle(struct osi_core_priv_data *osi_core) } count++; - osd_msleep(1U); mac_gmiiar = osi_readl((unsigned char *)osi_core->base + MAC_MDIO_ADDRESS); if ((mac_gmiiar & MAC_GMII_BUSY) == 0U) { cond = 0; + } else { + /* wait on GMII Busy set */ + osd_udelay(10U); } } @@ -121,8 +124,6 @@ int osi_write_phy_reg(struct osi_core_priv_data *osi_core, unsigned int phyaddr, osi_writel(mac_gmiiar, (unsigned char *)osi_core->base + MAC_MDIO_ADDRESS); - osd_usleep_range(9, 11); - /* wait for MII write operation to complete */ ret = poll_for_mii_idle(osi_core); if (ret < 0) { @@ -163,8 +164,6 @@ int osi_read_phy_reg(struct osi_core_priv_data *osi_core, unsigned int phyaddr, (osi_core->mdc_cr) << 8U | ((0x3U) << 2U) | MAC_GMII_BUSY; osi_writel(mac_gmiiar, (unsigned char *)osi_core->base + MAC_MDIO_ADDRESS); - osd_usleep_range(9, 11); - /* wait for MII write operation to complete */ ret = poll_for_mii_idle(osi_core); if (ret < 0) {