X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fethoc.c;h=af06d4fb8226ef1631296db5f164647ab7b46e91;hb=62715a2c57c01630af8198ed108874def5a99cf7;hp=b912e44650681f29c9b1ecf89499686c0ce4ddfe;hpb=f6569884b45e480e2c575d85ce86a2636a41c66b;p=oweals%2Fu-boot.git diff --git a/drivers/net/ethoc.c b/drivers/net/ethoc.c index b912e44650..af06d4fb82 100644 --- a/drivers/net/ethoc.c +++ b/drivers/net/ethoc.c @@ -215,13 +215,14 @@ static inline void ethoc_write_bd(struct eth_device *dev, int index, ethoc_write(dev, offset + 4, bd->addr); } -static inline void ethoc_set_mac_address(struct eth_device *dev) +static int ethoc_set_mac_address(struct eth_device *dev) { u8 *mac = dev->enetaddr; ethoc_write(dev, MAC_ADDR0, (mac[2] << 24) | (mac[3] << 16) | (mac[4] << 8) | (mac[5] << 0)); ethoc_write(dev, MAC_ADDR1, (mac[0] << 8) | (mac[1] << 0)); + return 0; } static inline void ethoc_ack_irq(struct eth_device *dev, u32 mask) @@ -270,7 +271,7 @@ static int ethoc_init_ring(struct eth_device *dev) if (i == priv->num_rx - 1) bd.stat |= RX_BD_WRAP; - flush_dcache(bd.addr, PKTSIZE_ALIGN); + flush_dcache_range(bd.addr, bd.addr + PKTSIZE_ALIGN); ethoc_write_bd(dev, priv->num_tx + i, &bd); } @@ -308,8 +309,6 @@ static int ethoc_init(struct eth_device *dev, bd_t * bd) struct ethoc *priv = (struct ethoc *)dev->priv; printf("ethoc\n"); - ethoc_set_mac_address(dev); - priv->num_tx = 1; priv->num_rx = PKTBUFSRX; ethoc_write(dev, TX_BD_NUM, priv->num_tx); @@ -377,7 +376,7 @@ static int ethoc_rx(struct eth_device *dev, int limit) } /* clear the buffer descriptor so it can be reused */ - flush_dcache(bd.addr, PKTSIZE_ALIGN); + flush_dcache_range(bd.addr, bd.addr + PKTSIZE_ALIGN); bd.stat &= ~RX_BD_STATS; bd.stat |= RX_BD_EMPTY; ethoc_write_bd(dev, entry, &bd); @@ -415,7 +414,7 @@ static void ethoc_tx(struct eth_device *dev) (void)ethoc_update_tx_stats(&bd); } -static int ethoc_send(struct eth_device *dev, volatile void *packet, int length) +static int ethoc_send(struct eth_device *dev, void *packet, int length) { struct ethoc *priv = (struct ethoc *)dev->priv; struct ethoc_bd bd; @@ -431,7 +430,7 @@ static int ethoc_send(struct eth_device *dev, volatile void *packet, int length) bd.stat &= ~TX_BD_PAD; bd.addr = (u32)packet; - flush_dcache(bd.addr, length); + flush_dcache_range(bd.addr, bd.addr + length); bd.stat &= ~(TX_BD_STATS | TX_BD_LEN_MASK); bd.stat |= TX_BD_LEN(length); ethoc_write_bd(dev, entry, &bd); @@ -504,6 +503,7 @@ int ethoc_initialize(u8 dev_num, int base_addr) dev->halt = ethoc_halt; dev->send = ethoc_send; dev->recv = ethoc_recv; + dev->write_hwaddr = ethoc_set_mac_address; sprintf(dev->name, "%s-%hu", "ETHOC", dev_num); eth_register(dev);