rockchip: clk: rk3368: add support for configuring the SPI clocks
[platform/kernel/u-boot.git] / drivers / net / sunxi_emac.c
index 306a022..37685f3 100644 (file)
@@ -327,6 +327,20 @@ static void emac_reset(struct emac_eth_dev *priv)
        udelay(200);
 }
 
+static int _sunxi_write_hwaddr(struct emac_eth_dev *priv, u8 *enetaddr)
+{
+       struct emac_regs *regs = priv->regs;
+       u32 enetaddr_lo, enetaddr_hi;
+
+       enetaddr_lo = enetaddr[2] | (enetaddr[1] << 8) | (enetaddr[0] << 16);
+       enetaddr_hi = enetaddr[5] | (enetaddr[4] << 8) | (enetaddr[3] << 16);
+
+       writel(enetaddr_hi, &regs->mac_a1);
+       writel(enetaddr_lo, &regs->mac_a0);
+
+       return 0;
+}
+
 static int _sunxi_emac_eth_init(struct emac_eth_dev *priv, u8 *enetaddr)
 {
        struct emac_regs *regs = priv->regs;
@@ -350,10 +364,7 @@ static int _sunxi_emac_eth_init(struct emac_eth_dev *priv, u8 *enetaddr)
        /* Set up EMAC */
        emac_setup(priv);
 
-       writel(enetaddr[0] << 16 | enetaddr[1] << 8 | enetaddr[2],
-              &regs->mac_a1);
-       writel(enetaddr[3] << 16 | enetaddr[4] << 8 | enetaddr[5],
-              &regs->mac_a0);
+       _sunxi_write_hwaddr(priv, enetaddr);
 
        mdelay(1);
 
@@ -513,74 +524,6 @@ static void sunxi_emac_board_setup(struct emac_eth_dev *priv)
        clrsetbits_le32(&regs->mac_mcfg, 0xf << 2, 0xd << 2);
 }
 
-#ifndef CONFIG_DM_ETH
-static int sunxi_emac_eth_init(struct eth_device *dev, bd_t *bis)
-{
-       return _sunxi_emac_eth_init(dev->priv, dev->enetaddr);
-}
-
-static void sunxi_emac_eth_halt(struct eth_device *dev)
-{
-       /* Nothing to do here */
-}
-
-static int sunxi_emac_eth_recv(struct eth_device *dev)
-{
-       int rx_len;
-
-       rx_len = _sunxi_emac_eth_recv(dev->priv, net_rx_packets[0]);
-       if (rx_len <= 0)
-               return 0;
-
-       /* Pass to upper layer */
-       net_process_received_packet(net_rx_packets[0], rx_len);
-
-       return rx_len;
-}
-
-static int sunxi_emac_eth_send(struct eth_device *dev, void *packet, int length)
-{
-       return _sunxi_emac_eth_send(dev->priv, packet, length);
-}
-
-int sunxi_emac_initialize(void)
-{
-       struct emac_regs *regs =
-               (struct emac_regs *)SUNXI_EMAC_BASE;
-       struct eth_device *dev;
-       struct emac_eth_dev *priv;
-
-       dev = malloc(sizeof(*dev));
-       if (dev == NULL)
-               return -ENOMEM;
-
-       priv = (struct emac_eth_dev *)malloc(sizeof(struct emac_eth_dev));
-       if (!priv) {
-               free(dev);
-               return -ENOMEM;
-       }
-
-       memset(dev, 0, sizeof(*dev));
-       memset(priv, 0, sizeof(struct emac_eth_dev));
-
-       priv->regs = regs;
-       dev->iobase = (int)regs;
-       dev->priv = priv;
-       dev->init = sunxi_emac_eth_init;
-       dev->halt = sunxi_emac_eth_halt;
-       dev->send = sunxi_emac_eth_send;
-       dev->recv = sunxi_emac_eth_recv;
-       strcpy(dev->name, "emac");
-
-       sunxi_emac_board_setup(priv);
-
-       eth_register(dev);
-
-       return sunxi_emac_init_phy(priv, dev);
-}
-#endif
-
-#ifdef CONFIG_DM_ETH
 static int sunxi_emac_eth_start(struct udevice *dev)
 {
        struct eth_pdata *pdata = dev_get_platdata(dev);
@@ -595,7 +538,7 @@ static int sunxi_emac_eth_send(struct udevice *dev, void *packet, int length)
        return _sunxi_emac_eth_send(priv, packet, length);
 }
 
-static int sunxi_emac_eth_recv(struct udevice *dev, uchar **packetp)
+static int sunxi_emac_eth_recv(struct udevice *dev, int flags, uchar **packetp)
 {
        struct emac_eth_dev *priv = dev_get_priv(dev);
        int rx_len;
@@ -633,7 +576,7 @@ static int sunxi_emac_eth_ofdata_to_platdata(struct udevice *dev)
 {
        struct eth_pdata *pdata = dev_get_platdata(dev);
 
-       pdata->iobase = dev_get_addr(dev);
+       pdata->iobase = devfdt_get_addr(dev);
 
        return 0;
 }
@@ -653,4 +596,3 @@ U_BOOT_DRIVER(eth_sunxi_emac) = {
        .priv_auto_alloc_size = sizeof(struct emac_eth_dev),
        .platdata_auto_alloc_size = sizeof(struct eth_pdata),
 };
-#endif