
Hi Yann,
On Fri, 19 Oct 2012 10:02:09 +0200, Yann Vernier yann.vernier@orsoc.se wrote:
On Thu, 18 Oct 2012 15:55:31 -0500 Joe Hershberger joe.hershberger@gmail.com wrote:
Hi Yann,
On Fri, Oct 5, 2012 at 7:09 AM, Yann Vernier yann.vernier@orsoc.se wrote:
Removed board specific MAC reading code from driver. Should move the reading to the cm4008/cm41xx board code.
drivers/net/ks8695eth.c | 38 +++++++++----------------------------- 1 file changed, 9 insertions(+), 29 deletions(-)
diff --git a/drivers/net/ks8695eth.c b/drivers/net/ks8695eth.c index b4904b6..2dda7ab 100644 --- a/drivers/net/ks8695eth.c +++ b/drivers/net/ks8695eth.c @@ -71,30 +71,13 @@ volatile uint8_t ks8695_bufs[BUFSIZE*(TXDESCS+RXDESCS)] __attribute__((aligned(2
/****************************************************************************/
-/*
Ideally we want to use the MAC address stored in flash.
But we do some sanity checks in case they are not present
first.
- */
-unsigned char eth_mac[] = {
0x00, 0x13, 0xc6, 0x00, 0x00, 0x00
-};
-void ks8695_getmac(void) +static int ks8695_set_mac_address(struct eth_device *dev) {
unsigned char *fp;
int i;
/* Check if flash MAC is valid */
fp = (unsigned char *) 0x0201c000;
for (i = 0; (i < 6); i++) {
if ((fp[i] != 0) && (fp[i] != 0xff))
break;
}
/* If we found a valid looking MAC address then use it */
if (i < 6)
memcpy(ð_mac[0], fp, 6);
/* Set MAC address */
ks8695_write(KS8695_LAN_MAC_LOW, (dev->enetaddr[5] |
(dev->enetaddr[4] << 8) |
(dev->enetaddr[3] << 16) | (dev->enetaddr[2] <<
24)));
ks8695_write(KS8695_LAN_MAC_HIGH, (dev->enetaddr[1] |
(dev->enetaddr[0] << 8)));
return 0;
}
/****************************************************************************/ @@ -109,12 +92,8 @@ static int ks8695_eth_init(struct eth_device *dev, bd_t *bd) ks8695_write(KS8695_LAN_DMA_TX, 0x80000000); ks8695_write(KS8695_LAN_DMA_RX, 0x80000000);
ks8695_getmac();
/* Set MAC address */
ks8695_write(KS8695_LAN_MAC_LOW, (eth_mac[5] | (eth_mac[4]
<< 8) |
(eth_mac[3] << 16) | (eth_mac[2] << 24)));
ks8695_write(KS8695_LAN_MAC_HIGH, (eth_mac[1] | (eth_mac[0]
<< 8)));
ks8695_set_mac_address(dev);
Why do you set the MAC address here? It should be set for you by the network infrastructure without this call.
Simply because I was not aware of this at the time. Before the changes here the generic infrastructure could not do it, as write_hwaddr was unimplemented, and I was just trying to preserve function. The main reason I started poking at the network driver was that it loaded the MAC from a hardcoded address in ROM, obviously board specific (this is the magic number in [PATCH 11/11] arm: cm4008, cm41xx: read MAC address from flash). It also has a bug where it stops working after one command (i.e. can't tftp twice), which I have not tracked down as yet.
/* Turn the 4 port switch on */ i = ks8695_read(KS8695_SWITCH_CTRL0);
@@ -150,7 +129,7 @@ static int ks8695_eth_init(struct eth_device *dev, bd_t *bd) ks8695_write(KS8695_LAN_DMA_RX, 0x71); ks8695_write(KS8695_LAN_DMA_RX_START, 0x1);
printf("KS8695 ETHERNET: %pM\n", eth_mac);
printf("KS8695 ETHERNET: %pM\n", dev->enetaddr); return 0;
}
@@ -234,6 +213,7 @@ int ks8695_eth_initialize(void) dev->halt = ks8695_eth_halt; dev->send = ks8695_eth_send; dev->recv = ks8695_eth_recv;
dev->write_hwaddr = ks8695_set_mac_address; strcpy(dev->name, "ks8695eth"); eth_register(dev);
-- 1.7.10.4
-Joe
What is the status for this patch? Are you going to drop it or submit a new version?
Amicalement,