net: Add a command to access the EEPROM from ethernet devices
Subsystems (2)
PATCH 1/2 net: Add a command to access the EEPROM from ethernet devices
Many ethernet devices use an EEPROM to store various settings, most commonly the device MAC address. But on some devices it can contains a lot more, for example USB device might also have many USB related parameters.
This commit add a set of commands to read/write this EEPROM, write a default configuration and read/write the device MAC address. The defaults command allow priming the EEPROM for devices that need more than just a MAC address in the EEPROM.
--- common/cmd_net.c | 134 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ include/net.h | 28 ++++++++++++ net/eth.c | 46 +++++++++++++++++++ 3 files changed, 208 insertions(+)
common/cmd_net.c +134 -0
@@ -445,3 +445,137 @@ U_BOOT_CMD( );#endif /* CONFIG_CMD_LINK_LOCAL */ + +#if defined(CONFIG_CMD_ETH_EEPROM ) +static int do_eth_eeprom_rw (struct eth_device *dev, +int argc,char *const argv[]) +{ +ulong addr, offset, length =1 ; + +if (argc <4 ) +return CMD_RET_USAGE ; + + addr =simple_strtoul (argv[2 ],NULL ,16 ); + offset =simple_strtoul (argv[3 ],NULL ,16 ); +if (argc >4 ) + length =simple_strtoul (argv[4 ],NULL ,16 ); + +if (!strcmp (argv[0 ],"write" )) { +if (eth_eeprom_write (dev, offset, length, (void *)addr)) { +printf ("EEPROM write failed\n" ); +return CMD_RET_FAILURE ; + } +return CMD_RET_SUCCESS ; + }else if (!strcmp (argv[0 ],"read" )) { +if (eth_eeprom_read (dev, offset, length, (void *)addr)) { +printf ("EEPROM read failed\n" ); +return CMD_RET_FAILURE ; + } +return CMD_RET_SUCCESS ; + } + +return CMD_RET_USAGE ; +} + +static int do_eth_eeprom_defaults (struct eth_device *dev, +int argc,char *const argv[]) +{ +if (eth_eeprom_defaults (dev)) { +printf ("EEPROM write failed\n" ); +return CMD_RET_FAILURE ; + } + +return CMD_RET_SUCCESS ; +} + +static int do_eth_eeprom_set_mac (struct eth_device *dev, +int argc,char *const argv[]) +{ +u8 mac[6 ]; + +if (argc <3 ) +return CMD_RET_USAGE ; + +eth_parse_enetaddr (argv[2 ], mac); +if (!is_valid_ether_addr (mac)) { +printf ("Invalid mac address given\n" ); +return CMD_RET_FAILURE ; + } + +printf ("Writing MAC to EEPROM ....\n" ); +if (eth_eeprom_write_mac (dev, mac)) { +printf ("EEPROM write failed\n" ); +return CMD_RET_FAILURE ; + } + +return CMD_RET_SUCCESS ; +} + +static int do_eth_eeprom_show_mac (struct eth_device *dev, +int argc,char *const argv[]) +{ +u8 data[6 ]; + +if (eth_eeprom_read_mac (dev, data)) { +printf ("EEPROM read failed\n" ); +return CMD_RET_FAILURE ; + } + +printf ("%pM\n" , data); +if (!is_valid_ether_addr (data)) +printf ("Warning: MAC address is not valid!\n" ); + +return CMD_RET_SUCCESS ; +} + +static int do_eth_eeprom (cmd_tbl_t *cmdtp,int flag,int argc, +char *const argv[]) +{ +struct eth_device *dev; +char *endp =NULL ; +int index; + +if (argc <3 ) +return CMD_RET_USAGE ; + +/* Get the ethernet device, by ID or by name */ + index = (int )simple_strtoul (argv[2 ], &endp,16 ); +if (endp > argv[2 ]) + dev =eth_get_dev_by_index (index); +else + dev =eth_get_dev_by_name (argv[2 ]); + +if (!dev) { +printf ("Ethernet device not found\n" ); +return CMD_RET_FAILURE ; + } + +if (!strcmp (argv[1 ],"read" ) || !strcmp (argv[1 ],"write" )) +return do_eth_eeprom_rw (dev, argc -1 , argv +1 ); +if (!strcmp (argv[1 ],"defaults" )) +return do_eth_eeprom_defaults (dev, argc -1 , argv +1 ); +if (!strcmp (argv[1 ],"set_mac" )) +return do_eth_eeprom_set_mac (dev, argc -1 , argv +1 ); +if (!strcmp (argv[1 ],"show_mac" )) +return do_eth_eeprom_show_mac (dev, argc -1 , argv +1 ); + +printf ("Unknown sub command: %s\n" , argv[1 ]); + +return CMD_RET_USAGE ; +} + +U_BOOT_CMD ( + eth_eeprom,6 ,0 , do_eth_eeprom, +"access the EEPROM of ethernet devices" , +"read dev addr off [size]\n" +" - read 'size' bytes starting at offset 'off' to memory address 'addr'.\n" +"eth_eeprom write dev addr off [size]\n" +" - write 'size' bytes starting at offset 'off' from memory address 'addr'.\n" +"eth_eeprom defaults dev\n" +" - write default settings in the EEPROM.\n" +"eth_eeprom set_mac dev mac\n" +" - set the MAC address in the EEPROM to 'mac'\n" +"eth_eeprom show_mac dev\n" +" - read the MAC address from the EEPROM." +); +#endif
include/net.h +28 -0
@@ -92,6 +92,25 @@ struct eth_device {int (*mcast) (struct eth_device *,const u8 *enetaddr,u8 set);#endif int (*write_hwaddr) (struct eth_device *); +#ifdef CONFIG_CMD_ETH_EEPROM +/* Read data from the ethernet device eeprom */ +int (*eeprom_read)(struct eth_device *, +u32 offset,u32 length,u8 *data); +/* Write data to the ethernet device eeprom */ +int (*eeprom_write)(struct eth_device *, +u32 offset,u32 length,u8 *data); +/* Write the default settings to the eeprom */ +int (*eeprom_defaults)(struct eth_device *); +/* Read the MAC stored in the eeprom, if not implemented +* the MAC is assumed to be at the given offset. */ +int (*eeprom_read_mac)(struct eth_device *,u8 *enetaddr); +/* Write the MAC in the eeprom, if not implemented +* the MAC is assumed to be at the given offset. */ +int (*eeprom_write_mac)(struct eth_device *,u8 *enetaddr); +/* Offset of the MAC address for the default implementation. +* Set to a negative value if the MAC is not in the EEPROM. */ +int eeprom_mac_offset; +#endif struct eth_device *next;int index;void *priv;
@@ -172,6 +191,15 @@ int eth_mcast_join(IPaddr_t mcast_addr, u8 join);u32 ether_crc (size_t len,unsigned char const *p);#endif +#ifdef CONFIG_CMD_ETH_EEPROM +int eth_eeprom_read (struct eth_device *dev,u32 offset, +u32 length,u8 *data); +int eth_eeprom_write (struct eth_device *dev,u32 offset, +u32 length,u8 *data); +int eth_eeprom_defaults (struct eth_device *dev); +int eth_eeprom_read_mac (struct eth_device *,u8 *enetaddr); +int eth_eeprom_write_mac (struct eth_device *,u8 *enetaddr); +#endif /**********************************************************************/ /*
net/eth.c +46 -0
49 lines not on this page · raw message
Signature · 1 line
2.1.1
PATCH 2/2 usb: eth: smsc95xx: Add EEPROM access support
Use the new ethernet eeprom API to allow the user to read/write the EEPROM.
--- drivers/usb/eth/smsc95xx.c | 199 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 192 insertions(+), 7 deletions(-)
drivers/usb/eth/smsc95xx.c +192 -7
@@ -59,6 +59,8 @@#define E2P_CMD 0x30#define E2P_CMD_BUSY_ 0x80000000 +#define E2P_CMD_EWEN_ 0x20000000 +#define E2P_CMD_WRITE_ 0x30000000#define E2P_CMD_READ_ 0x00000000#define E2P_CMD_TIMEOUT_ 0x00000400#define E2P_CMD_LOADED_ 0x00000200
@@ -146,6 +148,131 @@ struct smsc95xx_private {int have_hwaddr;/* 1 if we have a hardware MAC address */ }; +#ifdef CONFIG_CMD_ETH_EEPROM +static u8 eeprom_defaults[] = { +/* 0x00 */ +0xA5 ,/* Signature */ +0xFF ,0xFF ,/* MAC bytes 0-1 */ +0xFF ,0xFF ,/* MAC bytes 2-3 */ +0xFF ,0xFF ,/* MAC bytes 4-5 */ +0x01 ,/* FS Polling Interval for Interrupt Endpoint */ +0x01 ,/* HS Polling Interval for Interrupt Endpoint */ +0x01 ,/* Configuration Flags */ +0x09 ,0x04 ,/* Language ID */ +0x0a ,/* Manufacturer ID String Descriptor Length (bytes) */ +0x2f ,/* Manufacturer ID String Descriptor EEPROM Word Offset */ +0x10 ,/* Product Name String Descriptor Length (bytes) */ +0x34 ,/* Product Name String Descriptor EEPROM Word Offset */ +/* 0x10 */ +0x12 ,/* Serial Number String Descriptor Length (bytes) */ +0x3c ,/* Serial Number String Descriptor EEPROM Word Offset */ +0x08 ,/* Configuration String Descriptor Length (bytes) */ +0x45 ,/* Configuration String Descriptor Word Offset */ +0x08 ,/* Interface String Descriptor Length (bytes) */ +0x49 ,/* Interface String Descriptor Word Offset */ +0x12 ,/* Hi-Speed Device Descriptor Length (bytes) */ +0x1d ,/* Hi-Speed Device Descriptor Word Offset */ +0x12 ,/* Hi-Speed Configuration and Interface Descriptor Length (bytes) */ +0x26 ,/* Hi-Speed Configuration and Interface Descriptor Word Offset */ +0x12 ,/* Full-Speed Device Descriptor Length (bytes) */ +0x1d ,/* Full-Speed Device Descriptor Word Offset */ +0x12 ,/* Full-Speed Configuration and Interface Descriptor Length (bytes) */ +0x26 ,/* Full-Speed Configuration and Interface Descriptor Word Offset */ +0x00 ,0x00 ,/* RESERVED */ +/* 0x20 */ +0x24 ,0x04 ,/* Vendor ID */ +0x14 ,0x95 ,/* Product ID */ +0x00 ,0x01 ,/* Device ID */ +0x9b ,/* Config Data Byte 1 Register (CFG1) */ +0x18 ,/* Config Data Byte 2 Register (CFG2) */ +0x00 ,/* Config Data Byte 3 Register (CFG3) */ +0x32 ,/* Non-Removable Devices Register (NRD) */ +0x00 ,/* Port Disable (Self) Register (PDS) */ +0x00 ,/* Port Disable (Bus) Register (PDB) */ +0x01 ,/* Max Power (Self) Register (MAXPS) */ +0x00 ,/* Max Power (Bus) Register (MAXPB) */ +0x01 ,/* Hub Controller Max Current (Self) Register (HCMCS) */ +0x00 ,/* Hub Controller Max Current (Bus) Register (HCMCB) */ +/* 0x30 */ +0x32 ,/* Power-on Time Register (PWRT) */ +0x00 ,/* Boost_Up Register (BOOSTUP) */ +0x00 ,/* Boost_5 Register (BOOST5) */ +0x00 ,/* Boost_4:2 Register (BOOST42) */ +0x00 ,/* RESERVED */ +0x00 ,/* Port Swap Register (PRTSP) */ +0x21 ,/* Port Remap 12 Register (PRTR12) */ +0x43 ,/* Port Remap 34 Register (PRTR34) */ +0x05 ,/* Port Remap 5 Register (PRTR5) */ +0x01 ,/* Status/Command Register (STCD) */ +/* 0x3A - Device Descriptor */ +0x12 ,0x01 , +0x00 ,0x02 , +0xff ,0x00 , +/* 0x40 */ +0xff ,0x40 , +0x24 ,0x04 , +0x00 ,0xec , +0x00 ,0x01 , +0x01 ,0x02 , +0x03 ,0x01 , +/* 0x4C - Configuration and Interface Descriptor */ +0x09 ,0x02 , +0x27 ,0x00 , +/* 0x50 */ +0x01 ,0x01 , +0x04 ,0xc0 , +0x00 ,0x09 , +0x04 ,0x00 , +0x00 ,0x03 , +0xff ,0x00 , +0xff ,0x05 , +/* 0x5E - Manufacturer ID String Descriptor */ +0x0a ,0x03 , +/* 0x60 */ +0x53 ,0x00 ,/* S */ +0x4d ,0x00 ,/* M */ +0x53 ,0x00 ,/* S */ +0x43 ,0x00 ,/* C */ +/* 0x68 - Product Name String */ +0x10 ,0x03 , +0x4c ,0x00 ,/* L */ +0x41 ,0x00 ,/* A */ +0x4e ,0x00 ,/* N */ +/* 0x70 */ +0x39 ,0x00 ,/* 9 */ +0x35 ,0x00 ,/* 5 */ +0x31 ,0x00 ,/* 1 */ +0x34 ,0x00 ,/* 5 */ +/* 0x78 - Serial Number String Descriptor */ +0x12 ,0x03 , +0x31 ,0x00 ,/* 1 */ +0x32 ,0x00 ,/* 2 */ +0x33 ,0x00 ,/* 3 */ +/* 0x80 */ +0x34 ,0x00 ,/* 4 */ +0x35 ,0x00 ,/* 5 */ +0x36 ,0x00 ,/* 6 */ +0x37 ,0x00 ,/* 7 */ +0x38 ,0x00 ,/* 8 */ +/* 0x8A - Configuration String Descriptor */ +0x08 ,0x03 , +0x43 ,0x00 ,/* C */ +0x66 ,0x00 ,/* f */ +/* 0x90 */ +0x67 ,0x00 ,/* g */ +/* 0x92 - Interface String Descriptor */ +0x08 ,0x03 , +0x69 ,0x00 ,/* i */ +0x2f ,0x00 ,/* / */ +0x66 ,0x00 ,/* f */ +/* 0x9A - END */ +0x00 ,0x00 , +0x00 ,0x00 , +0x00 ,0x00 , +/* 0xA0 */ +}; +#endif +/* * Smsc95xx infrastructure commands */
@@ -285,9 +412,10 @@ static int smsc95xx_wait_eeprom(struct ueth_data *dev)return 0 ; } -static int smsc95xx_read_eeprom (struct ueth_data *dev,u32 offset,u32 length, -u8 *data) +static int smsc95xx_read_eeprom (struct eth_device *eth,u32 offset,u32 length, +u8 *data) { +struct ueth_data *dev = (struct ueth_data *)eth->priv;u32 val;int i, ret;
@@ -310,6 +438,58 @@ static int smsc95xx_read_eeprom(struct ueth_data *dev, u32 offset, u32 length,return 0 ; } +#ifdef CONFIG_CMD_ETH_EEPROM +static int smsc95xx_write_eeprom (struct eth_device *eth,u32 offset,u32 length, +u8 *data) +{ +struct ueth_data *dev = (struct ueth_data *)eth->priv; +u32 val; +int i, ret; + + ret =smsc95xx_eeprom_confirm_not_busy (dev); +if (ret) +return ret; + +/* Issue write/erase enable command */ + val =E2P_CMD_BUSY_ |E2P_CMD_EWEN_ ; + ret =smsc95xx_write_reg (dev,E2P_CMD , val); +if (ret <0 ) +return ret; + + ret =smsc95xx_wait_eeprom (dev); +if (ret <0 ) +return ret; + +for (i =0 ; i < length; i++) { +/* Fill data register */ + val = data[i]; + ret =smsc95xx_write_reg (dev,E2P_DATA , val); +if (ret <0 ) +return ret; + +/* Send "write" command */ + val =E2P_CMD_BUSY_ |E2P_CMD_WRITE_ | + (offset &E2P_CMD_ADDR_ ); + ret =smsc95xx_write_reg (dev,E2P_CMD , val); +if (ret <0 ) +return ret; + + ret =smsc95xx_wait_eeprom (dev); +if (ret <0 ) +return ret; + + offset++; + } +return 0 ; +} + +static int smsc95xx_defaults_eeprom (struct eth_device *eth) +{ +return smsc95xx_write_eeprom (eth,0 ,sizeof (eeprom_defaults), + eeprom_defaults); +} +#endif +/* * mii_nway_restart - restart NWay (autonegotiation) for this interface *
@@ -349,12 +529,11 @@ static int smsc95xx_phy_initialize(struct ueth_data *dev)return 0 ; } -static int smsc95xx_init_mac_address (struct eth_device *eth, -struct ueth_data *dev) +static int smsc95xx_init_mac_address (struct eth_device *eth) {/* try reading mac address from EEPROM */ -if (smsc95xx_read_eeprom (dev,EEPROM_MAC_OFFSET ,ETH_ALEN , - eth->enetaddr) ==0 ) { +if (smsc95xx_read_eeprom (eth,EEPROM_MAC_OFFSET ,ETH_ALEN , + eth->enetaddr) ==0 ) {if (is_valid_ether_addr (eth->enetaddr)) {/* eeprom values are valid so use them */ debug ("MAC address read from EEPROM\n" );
@@ -507,7 +686,7 @@ static int smsc95xx_init(struct eth_device *eth, bd_t *bd)debug ("timeout waiting for PHY Reset\n" );return -1 ; } -if (!priv->have_hwaddr &&smsc95xx_init_mac_address (eth, dev) ==0 ) +if (!priv->have_hwaddr &&smsc95xx_init_mac_address (eth) ==0 ) priv->have_hwaddr =1 ;if (!priv->have_hwaddr) {puts ("Error: SMSC95xx: No MAC address set - set usbethaddr\n" );
@@ -894,6 +1073,12 @@ int smsc95xx_eth_get_info(struct usb_device *dev, struct ueth_data *ss, eth->recv = smsc95xx_recv; eth->halt = smsc95xx_halt; eth->write_hwaddr = smsc95xx_write_hwaddr; +#ifdef CONFIG_CMD_ETH_EEPROM + eth->eeprom_read = smsc95xx_read_eeprom; + eth->eeprom_write = smsc95xx_write_eeprom; + eth->eeprom_defaults = smsc95xx_defaults_eeprom; + eth->eeprom_mac_offset =EEPROM_MAC_OFFSET ; +#endif eth->priv = ss;return 1 ; }
Signature · 1 line
2.1.1
PATCH 2/2 usb: eth: smsc95xx: Add EEPROM access support
Quoted 23 lines · Alban Bedel
Use the new ethernet eeprom API to allow the user to read/write the EEPROM.
Change-Id I21233b6ee805a75bd8a03ca12e22c41421b7629cSigned-off-by Alban Bedel <[email protected]>--- drivers/usb/eth/smsc95xx.c | 199 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 192 insertions(+), 7 deletions(-)drivers/usb/eth/smsc95xx.c +2
-0@@ -59,6 +59,8 @@#define E2P_CMD 0x30#define E2P_CMD_BUSY_ 0x80000000 +#define E2P_CMD_EWEN_ 0x20000000 +#define E2P_CMD_WRITE_ 0x30000000#define E2P_CMD_READ_ 0x00000000#define E2P_CMD_TIMEOUT_ 0x00000400#define E2P_CMD_LOADED_ 0x00000200
drivers/usb/eth/smsc95xx.c struct smsc95xx_private { · line 151
Quoted 4 lines
drivers/usb/eth/smsc95xx.c +1
-0@@ -146,6 +148,131 @@ struct smsc95xx_private {int have_hwaddr;/* 1 if we have a hardware MAC address */ }; +#ifdef CONFIG_CMD_ETH_EEPROM
Is this layout common for all machines using this driver? If not, is it worth comment which machine is it?
drivers/usb/eth/smsc95xx.c struct smsc95xx_private { · line 157
Quoted 6 lines
drivers/usb/eth/smsc95xx.c +6
-0+static u8 eeprom_defaults[] = { +/* 0x00 */ +0xA5 ,/* Signature */ +0xFF ,0xFF ,/* MAC bytes 0-1 */ +0xFF ,0xFF ,/* MAC bytes 2-3 */ +0xFF ,0xFF ,/* MAC bytes 4-5 */
Normally, we use all zeros for unset...?
Best regards,
Pavel
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
PATCH 2/2 usb: eth: smsc95xx: Add EEPROM access support
Quoted 27 lines · On Tue, 7 Oct 2014 14:22:09 +0200 Pavel Machek <[email protected]> wrote:
Quoted 26 lines · Alban Bedel
Use the new ethernet eeprom API to allow the user to read/write the EEPROM.
Change-Id I21233b6ee805a75bd8a03ca12e22c41421b7629cSigned-off-by Alban Bedel <[email protected]>--- drivers/usb/eth/smsc95xx.c | 199 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 192 insertions(+), 7 deletions(-)drivers/usb/eth/smsc95xx.c +2
-0@@ -59,6 +59,8 @@#define E2P_CMD 0x30#define E2P_CMD_BUSY_ 0x80000000 +#define E2P_CMD_EWEN_ 0x20000000 +#define E2P_CMD_WRITE_ 0x30000000#define E2P_CMD_READ_ 0x00000000#define E2P_CMD_TIMEOUT_ 0x00000400#define E2P_CMD_LOADED_ 0x00000200@@ -146,6 +148,131 @@ struct smsc95xx_private {int have_hwaddr;/* 1 if we have a hardware MAC address */ };
Quoted 4 lines
drivers/usb/eth/smsc95xx.c struct smsc95xx_private { · line 151
Quoted 1 line
drivers/usb/eth/smsc95xx.c +1
-0+#ifdef CONFIG_CMD_ETH_EEPROM Is this layout common for all machines using this driver? If not, is it worth comment which machine is it?
These are supposed to be the same values as would be used by the controller when the eeprom is not programmed. So they are not machine specific, however it is specific to the LAN9514, looking at the datasheet for the LAN9500 the eeprom layout is different.
Then I'll submit a new version that use per chip defaults, as well as allowing the board file to override the default data.
Quoted 8 lines
drivers/usb/eth/smsc95xx.c struct smsc95xx_private { · line 157
Quoted 6 lines
drivers/usb/eth/smsc95xx.c +6
-0+static u8 eeprom_defaults[] = { +/* 0x00 */ +0xA5 ,/* Signature */ +0xFF ,0xFF ,/* MAC bytes 0-1 */ +0xFF ,0xFF ,/* MAC bytes 2-3 */ +0xFF ,0xFF ,/* MAC bytes 4-5 */ Normally, we use all zeros for unset...?
That's what the controller use when the EEPROM hasn't been programmed, but I'll change it to all 0.
Alban
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20141007/19b1b18a/attachment.pgp>
PATCH 2/2 usb: eth: smsc95xx: Add EEPROM access support
Quoted 59 lines · Alban Bedel
On Tue, 7 Oct 2014 14:22:09 +0200
Quoted 30 lines · Pavel Machek
Quoted 29 lines · Alban Bedel
Use the new ethernet eeprom API to allow the user to read/write the EEPROM.
Change-Id I21233b6ee805a75bd8a03ca12e22c41421b7629cSigned-off-by Alban Bedel <[email protected]>---
drivers/usb/eth/smsc95xx.c | 199+++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 192 insertions(+), 7 deletions(-)
drivers/usb/eth/smsc95xx.c +2
-0@@ -59,6 +59,8 @@#define E2P_CMD 0x30#define E2P_CMD_BUSY_ 0x80000000 +#define E2P_CMD_EWEN_ 0x20000000 +#define E2P_CMD_WRITE_ 0x30000000#define E2P_CMD_READ_ 0x00000000#define
E2P_CMD_TIMEOUT_0x00000400
#defineE2P_CMD_LOADED_0x00000200drivers/usb/eth/smsc95xx.c +0
-0@@ -146,6 +148,131 @@ struct smsc95xx_private {Quoted 8 lines
drivers/usb/eth/smsc95xx.c struct smsc95xx_private { · line 151
Quoted 5 lines
drivers/usb/eth/smsc95xx.c +1
-0int have_hwaddr;/* 1 if we have a hardware MAC address */ }; +#ifdef CONFIG_CMD_ETH_EEPROM Is this layout common for all machines using this driver? If not, is it worth comment which machine is it?
These are supposed to be the same values as would be used by the controller when the eeprom is not programmed. So they are not machine specific, however it is specific to the LAN9514, looking at the datasheet for the LAN9500 the eeprom layout is different.
Then I'll submit a new version that use per chip defaults, as well as allowing the board file to override the default data.
Quoted 8 lines
drivers/usb/eth/smsc95xx.c struct smsc95xx_private { · line 157
Quoted 6 lines
drivers/usb/eth/smsc95xx.c +6
-0+static u8 eeprom_defaults[] = { +/* 0x00 */ +0xA5 ,/* Signature */ +0xFF ,0xFF ,/* MAC bytes 0-1 */ +0xFF ,0xFF ,/* MAC bytes 2-3 */ +0xFF ,0xFF ,/* MAC bytes 4-5 */ Normally, we use all zeros for unset...?
Quoted 2 lines
That's what the controller use when the EEPROM hasn't been programmed, but I'll change it to all 0.
Well isn't it better to use these settings as defaults then ?
Best regards,
Marek Vasut
PATCH 2/2 usb: eth: smsc95xx: Add EEPROM access support
In reply to Alban BedelHi!
Quoted 11 lines
Quoted 8 lines
drivers/usb/eth/smsc95xx.c struct smsc95xx_private { · line 157
Quoted 6 lines
drivers/usb/eth/smsc95xx.c +6
-0+static u8 eeprom_defaults[] = { +/* 0x00 */ +0xA5 ,/* Signature */ +0xFF ,0xFF ,/* MAC bytes 0-1 */ +0xFF ,0xFF ,/* MAC bytes 2-3 */ +0xFF ,0xFF ,/* MAC bytes 4-5 */ Normally, we use all zeros for unset...?
That's what the controller use when the EEPROM hasn't been programmed, but I'll change it to all 0.
Aha, if this is in-controller-default, don't change it. But comment explaining where this comes from would be nice.
Thanks,
Pavel
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html