]> git.sur5r.net Git - u-boot/blobdiff - drivers/net/fec_mxc.c
net: fec_mxc: simplify fec_get_miibus
[u-boot] / drivers / net / fec_mxc.c
index 29af85ce0a9a433deea905657d87241794cf66ff..74d36f479ec9b59301cb2002c94e783986c0e564 100644 (file)
@@ -807,7 +807,16 @@ static int fec_recv(struct eth_device *dev)
        uint16_t bd_status;
        ulong addr, size, end;
        int i;
+
+#ifdef CONFIG_DM_ETH
+       *packetp = memalign(ARCH_DMA_MINALIGN, FEC_MAX_PKT_SIZE);
+       if (*packetp == 0) {
+               printf("%s: error allocating packetp\n", __func__);
+               return -ENOMEM;
+       }
+#else
        ALLOC_CACHE_ALIGN_BUFFER(uchar, buff, FEC_MAX_PKT_SIZE);
+#endif
 
        /* Check if any critical events have happened */
        ievent = readl(&fec->eth->ievent);
@@ -883,8 +892,13 @@ static int fec_recv(struct eth_device *dev)
 #ifdef CONFIG_FEC_MXC_SWAP_PACKET
                        swap_packet((uint32_t *)addr, frame_length);
 #endif
+
+#ifdef CONFIG_DM_ETH
+                       memcpy(*packetp, (char *)addr, frame_length);
+#else
                        memcpy(buff, (char *)addr, frame_length);
                        net_process_received_packet(buff, frame_length);
+#endif
                        len = frame_length;
                } else {
                        if (bd_status & FEC_RBD_ERR)
@@ -998,18 +1012,9 @@ static void fec_free_descs(struct fec_priv *fec)
        free(fec->tbd_base);
 }
 
-#ifdef CONFIG_DM_ETH
-struct mii_dev *fec_get_miibus(struct udevice *dev, int dev_id)
-#else
-struct mii_dev *fec_get_miibus(uint32_t base_addr, int dev_id)
-#endif
+struct mii_dev *fec_get_miibus(ulong base_addr, int dev_id)
 {
-#ifdef CONFIG_DM_ETH
-       struct fec_priv *priv = dev_get_priv(dev);
-       struct ethernet_regs *eth = priv->eth;
-#else
-       struct ethernet_regs *eth = (struct ethernet_regs *)(ulong)base_addr;
-#endif
+       struct ethernet_regs *eth = (struct ethernet_regs *)base_addr;
        struct mii_dev *bus;
        int ret;
 
@@ -1202,10 +1207,19 @@ static int fecmxc_read_rom_hwaddr(struct udevice *dev)
        return fec_get_hwaddr(priv->dev_id, pdata->enetaddr);
 }
 
+static int fecmxc_free_pkt(struct udevice *dev, uchar *packet, int length)
+{
+       if (packet)
+               free(packet);
+
+       return 0;
+}
+
 static const struct eth_ops fecmxc_ops = {
        .start                  = fecmxc_init,
        .send                   = fecmxc_send,
        .recv                   = fecmxc_recv,
+       .free_pkt               = fecmxc_free_pkt,
        .stop                   = fecmxc_halt,
        .write_hwaddr           = fecmxc_set_hwaddr,
        .read_rom_hwaddr        = fecmxc_read_rom_hwaddr,
@@ -1260,7 +1274,7 @@ static int fecmxc_probe(struct udevice *dev)
        fec_reg_setup(priv);
        priv->dev_id = (dev_id == -1) ? 0 : dev_id;
 
-       bus = fec_get_miibus(dev, dev_id);
+       bus = fec_get_miibus((ulong)priv->eth, dev_id);
        if (!bus) {
                ret = -ENOMEM;
                goto err_mii;