diff options
Diffstat (limited to 'drivers/net/ethernet/ti/cpsw.c')
| -rw-r--r-- | drivers/net/ethernet/ti/cpsw.c | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c index 79974e31187a..cc3ce557e4aa 100644 --- a/drivers/net/ethernet/ti/cpsw.c +++ b/drivers/net/ethernet/ti/cpsw.c | |||
| @@ -639,13 +639,6 @@ void cpsw_rx_handler(void *token, int len, int status) | |||
| 639 | static irqreturn_t cpsw_interrupt(int irq, void *dev_id) | 639 | static irqreturn_t cpsw_interrupt(int irq, void *dev_id) |
| 640 | { | 640 | { |
| 641 | struct cpsw_priv *priv = dev_id; | 641 | struct cpsw_priv *priv = dev_id; |
| 642 | u32 rx, tx, rx_thresh; | ||
| 643 | |||
| 644 | rx_thresh = __raw_readl(&priv->wr_regs->rx_thresh_stat); | ||
| 645 | rx = __raw_readl(&priv->wr_regs->rx_stat); | ||
| 646 | tx = __raw_readl(&priv->wr_regs->tx_stat); | ||
| 647 | if (!rx_thresh && !rx && !tx) | ||
| 648 | return IRQ_NONE; | ||
| 649 | 642 | ||
| 650 | cpsw_intr_disable(priv); | 643 | cpsw_intr_disable(priv); |
| 651 | if (priv->irq_enabled == true) { | 644 | if (priv->irq_enabled == true) { |
| @@ -1169,9 +1162,9 @@ static int cpsw_ndo_open(struct net_device *ndev) | |||
| 1169 | } | 1162 | } |
| 1170 | } | 1163 | } |
| 1171 | 1164 | ||
| 1165 | napi_enable(&priv->napi); | ||
| 1172 | cpdma_ctlr_start(priv->dma); | 1166 | cpdma_ctlr_start(priv->dma); |
| 1173 | cpsw_intr_enable(priv); | 1167 | cpsw_intr_enable(priv); |
| 1174 | napi_enable(&priv->napi); | ||
| 1175 | cpdma_ctlr_eoi(priv->dma, CPDMA_EOI_RX); | 1168 | cpdma_ctlr_eoi(priv->dma, CPDMA_EOI_RX); |
| 1176 | cpdma_ctlr_eoi(priv->dma, CPDMA_EOI_TX); | 1169 | cpdma_ctlr_eoi(priv->dma, CPDMA_EOI_TX); |
| 1177 | 1170 | ||
| @@ -1771,8 +1764,8 @@ static int cpsw_probe_dt(struct cpsw_platform_data *data, | |||
| 1771 | } | 1764 | } |
| 1772 | data->mac_control = prop; | 1765 | data->mac_control = prop; |
| 1773 | 1766 | ||
| 1774 | if (!of_property_read_u32(node, "dual_emac", &prop)) | 1767 | if (of_property_read_bool(node, "dual_emac")) |
| 1775 | data->dual_emac = prop; | 1768 | data->dual_emac = 1; |
| 1776 | 1769 | ||
| 1777 | /* | 1770 | /* |
| 1778 | * Populate all the child nodes here... | 1771 | * Populate all the child nodes here... |
| @@ -1782,7 +1775,7 @@ static int cpsw_probe_dt(struct cpsw_platform_data *data, | |||
| 1782 | if (ret) | 1775 | if (ret) |
| 1783 | pr_warn("Doesn't have any child node\n"); | 1776 | pr_warn("Doesn't have any child node\n"); |
| 1784 | 1777 | ||
| 1785 | for_each_node_by_name(slave_node, "slave") { | 1778 | for_each_child_of_node(node, slave_node) { |
| 1786 | struct cpsw_slave_data *slave_data = data->slave_data + i; | 1779 | struct cpsw_slave_data *slave_data = data->slave_data + i; |
| 1787 | const void *mac_addr = NULL; | 1780 | const void *mac_addr = NULL; |
| 1788 | u32 phyid; | 1781 | u32 phyid; |
| @@ -1791,6 +1784,10 @@ static int cpsw_probe_dt(struct cpsw_platform_data *data, | |||
| 1791 | struct device_node *mdio_node; | 1784 | struct device_node *mdio_node; |
| 1792 | struct platform_device *mdio; | 1785 | struct platform_device *mdio; |
| 1793 | 1786 | ||
| 1787 | /* This is no slave child node, continue */ | ||
| 1788 | if (strcmp(slave_node->name, "slave")) | ||
| 1789 | continue; | ||
| 1790 | |||
| 1794 | parp = of_get_property(slave_node, "phy_id", &lenp); | 1791 | parp = of_get_property(slave_node, "phy_id", &lenp); |
| 1795 | if ((parp == NULL) || (lenp != (sizeof(void *) * 2))) { | 1792 | if ((parp == NULL) || (lenp != (sizeof(void *) * 2))) { |
| 1796 | pr_err("Missing slave[%d] phy_id property\n", i); | 1793 | pr_err("Missing slave[%d] phy_id property\n", i); |
