drivers: net: cpsw: fix phy dt node setting
[oweals/u-boot.git] / drivers / net / cpsw.c
index b72258f83bfec9694d42637da38620e35b1c09ed..c31695eba9dd4c97df4bf704edaf532724570770 100644 (file)
@@ -910,8 +910,22 @@ out:
        return ret;
 }
 
+static int cpsw_reap_completed_packets(struct cpsw_priv *priv)
+{
+       int timeout = CPDMA_TIMEOUT;
+
+       /* reap completed packets */
+       while (timeout-- &&
+              (cpdma_process(priv, &priv->tx_chan, NULL, NULL) >= 0))
+               ;
+
+       return timeout;
+}
+
 static void _cpsw_halt(struct cpsw_priv *priv)
 {
+       cpsw_reap_completed_packets(priv);
+
        writel(0, priv->dma_regs + CPDMA_TXCONTROL);
        writel(0, priv->dma_regs + CPDMA_RXCONTROL);
 
@@ -925,18 +939,12 @@ static void _cpsw_halt(struct cpsw_priv *priv)
 
 static int _cpsw_send(struct cpsw_priv *priv, void *packet, int length)
 {
-       void *buffer;
-       int len;
-       int timeout = CPDMA_TIMEOUT;
+       int timeout;
 
        flush_dcache_range((unsigned long)packet,
                           (unsigned long)packet + ALIGN(length, PKTALIGN));
 
-       /* first reap completed packets */
-       while (timeout-- &&
-               (cpdma_process(priv, &priv->tx_chan, &buffer, &len) >= 0))
-               ;
-
+       timeout = cpsw_reap_completed_packets(priv);
        if (timeout == -1) {
                printf("cpdma_process timeout\n");
                return -ETIMEDOUT;
@@ -949,7 +957,7 @@ static int _cpsw_recv(struct cpsw_priv *priv, uchar **pkt)
 {
        void *buffer;
        int len;
-       int ret = -EAGAIN;
+       int ret;
 
        ret = cpdma_process(priv, &priv->rx_chan, &buffer, &len);
        if (ret < 0)
@@ -991,7 +999,7 @@ static int cpsw_phy_init(struct cpsw_priv *priv, struct cpsw_slave *slave)
 
 #ifdef CONFIG_DM_ETH
        if (slave->data->phy_of_handle)
-               dev_set_of_offset(phydev->dev, slave->data->phy_of_handle);
+               phydev->node = offset_to_ofnode(slave->data->phy_of_handle);
 #endif
 
        priv->phydev = phydev;