summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorSuraj Jaiswal <jsuraj@codeaurora.org>2018-11-30 16:42:52 +0530
committerLakshit Tyagi <ltyagi@codeaurora.org>2019-11-06 16:13:36 +0530
commit832b9997cf4077c5128b334a5766cd1022e14d66 (patch)
tree2551cc18f7b921e54279fde6d249c2e8f05732ac /drivers
parent567126240bfd45e2420babfb7a2b23f615d74793 (diff)
downloaddata-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.c62
-rw-r--r--drivers/emac-dwc-eqos/DWC_ETH_QOS_mdio.c1
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*/