diff options
author | Suraj Jaiswal <jsuraj@codeaurora.org> | 2018-11-30 16:42:52 +0530 |
---|---|---|
committer | Lakshit Tyagi <ltyagi@codeaurora.org> | 2019-11-06 16:13:36 +0530 |
commit | 832b9997cf4077c5128b334a5766cd1022e14d66 (patch) | |
tree | 2551cc18f7b921e54279fde6d249c2e8f05732ac /drivers | |
parent | 567126240bfd45e2420babfb7a2b23f615d74793 (diff) | |
download | data-kernel-832b9997cf4077c5128b334a5766cd1022e14d66.tar.gz |
data-kernel: EMAc: add support for different phy chips
This change add the phy check for the phy specific code.
Change-Id: I28334df4cf16b6108afc7c44bf8e9623b22add98
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/emac-dwc-eqos/DWC_ETH_QOS_drv.c | 62 | ||||
-rw-r--r-- | drivers/emac-dwc-eqos/DWC_ETH_QOS_mdio.c | 1 |
2 files changed, 39 insertions, 24 deletions
diff --git a/drivers/emac-dwc-eqos/DWC_ETH_QOS_drv.c b/drivers/emac-dwc-eqos/DWC_ETH_QOS_drv.c index 4e5cbfd..fdafa85 100644 --- a/drivers/emac-dwc-eqos/DWC_ETH_QOS_drv.c +++ b/drivers/emac-dwc-eqos/DWC_ETH_QOS_drv.c @@ -784,30 +784,46 @@ void DWC_ETH_QOS_handle_phy_interrupt(struct DWC_ETH_QOS_prv_data *pdata) int micrel_intr_status = 0; EMACDBG("Enter\n"); - DWC_ETH_QOS_mdio_read_direct( - pdata, pdata->phyaddr, DWC_ETH_QOS_BASIC_STATUS, &phy_intr_status); - EMACDBG( - "Basic Status Reg (%#x) = %#x\n", DWC_ETH_QOS_BASIC_STATUS, phy_intr_status); - - DWC_ETH_QOS_mdio_read_direct( - pdata, pdata->phyaddr, DWC_ETH_QOS_MICREL_PHY_INTCS, &micrel_intr_status); - EMACDBG( - "MICREL PHY Intr EN Reg (%#x) = %#x\n", DWC_ETH_QOS_MICREL_PHY_INTCS, micrel_intr_status); - - /* Call ack interrupt to clear the WOL interrupt status fields */ - if (pdata->phydev->drv->ack_interrupt) - pdata->phydev->drv->ack_interrupt(pdata->phydev); - - /* Interrupt received for link state change */ - if (phy_intr_status & LINK_STATE_MASK) { - EMACDBG("Interrupt received for link UP state\n"); - phy_mac_interrupt(pdata->phydev, LINK_UP); - } else if (!(phy_intr_status & LINK_STATE_MASK)) { - EMACDBG("Interrupt received for link DOWN state\n"); - phy_mac_interrupt(pdata->phydev, LINK_DOWN); - } else if (!(phy_intr_status & AUTONEG_STATE_MASK)) { - EMACDBG("Interrupt received for link down with" + if ((pdata->phydev->phy_id & pdata->phydev->drv->phy_id_mask) == MICREL_PHY_ID) { + DWC_ETH_QOS_mdio_read_direct( + pdata, pdata->phyaddr, DWC_ETH_QOS_BASIC_STATUS, &phy_intr_status); + EMACDBG( + "Basic Status Reg (%#x) = %#x\n", DWC_ETH_QOS_BASIC_STATUS, phy_intr_status); + + DWC_ETH_QOS_mdio_read_direct( + pdata, pdata->phyaddr, DWC_ETH_QOS_MICREL_PHY_INTCS, &micrel_intr_status); + EMACDBG( + "MICREL PHY Intr EN Reg (%#x) = %#x\n", DWC_ETH_QOS_MICREL_PHY_INTCS, micrel_intr_status); + + /* Interrupt received for link state change */ + if (phy_intr_status & LINK_STATE_MASK) { + EMACDBG("Interrupt received for link UP state\n"); + phy_mac_interrupt(pdata->phydev, LINK_UP); + } else if (!(phy_intr_status & LINK_STATE_MASK)) { + EMACDBG("Interrupt received for link DOWN state\n"); + phy_mac_interrupt(pdata->phydev, LINK_DOWN); + } else if (!(phy_intr_status & AUTONEG_STATE_MASK)) { + EMACDBG("Interrupt received for link down with" + " auto-negotiation error\n"); + } + } else { + DWC_ETH_QOS_mdio_read_direct( + pdata, pdata->phyaddr, DWC_ETH_QOS_PHY_INTR_STATUS, &phy_intr_status); + EMACDBG("Phy Interrupt status Reg at offset 0x13 = %#x\n", phy_intr_status); + /* Interrupt received for link state change */ + if (phy_intr_status & LINK_UP_STATE) { + pdata->hw_if.stop_mac_tx_rx(); + EMACDBG("Interrupt received for link UP state\n"); + phy_mac_interrupt(pdata->phydev, LINK_UP); + } else if (phy_intr_status & LINK_DOWN_STATE) { + EMACDBG("Interrupt received for link DOWN state\n"); + phy_mac_interrupt(pdata->phydev, LINK_DOWN); + } else if (phy_intr_status & AUTO_NEG_ERROR) { + EMACDBG("Interrupt received for link down with" " auto-negotiation error\n"); + } else if (phy_intr_status & PHY_WOL) { + EMACDBG("Interrupt received for WoL packet\n"); + } } EMACDBG("Exit\n"); diff --git a/drivers/emac-dwc-eqos/DWC_ETH_QOS_mdio.c b/drivers/emac-dwc-eqos/DWC_ETH_QOS_mdio.c index 017fe03..3430568 100644 --- a/drivers/emac-dwc-eqos/DWC_ETH_QOS_mdio.c +++ b/drivers/emac-dwc-eqos/DWC_ETH_QOS_mdio.c @@ -799,7 +799,6 @@ static inline int DWC_ETH_QOS_configure_io_macro_dll_settings( EMACDBG("Enter\n"); #ifndef DWC_ETH_QOS_EMULATION_PLATFORM - if (pdata->emac_hw_version_type == EMAC_HW_v2_0_0 || pdata->emac_hw_version_type == EMAC_HW_v2_3_1) DWC_ETH_QOS_rgmii_io_macro_dll_reset(pdata); /* For RGMII ID mode with internal delay*/ |