* [U-Boot] [PATCH v2 1/2] net: Add a command to access the EEPROM from ethernet devices @ 2014-10-09 11:42 Alban Bedel 2014-10-09 11:42 ` [U-Boot] [PATCH v2 2/2] usb: eth: smsc95xx: Add EEPROM access support for LAN9514 Alban Bedel 2014-10-09 15:17 ` [U-Boot] [PATCH v2 1/2] net: Add a command to access the EEPROM from ethernet devices Marek Vasut 0 siblings, 2 replies; 6+ messages in thread From: Alban Bedel @ 2014-10-09 11:42 UTC (permalink / raw) To: u-boot 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. Signed-off-by: Alban Bedel <alban.bedel@avionic-design.de> --- v2: * No changes since v1 --- common/cmd_net.c | 134 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ include/net.h | 28 ++++++++++++ net/eth.c | 46 +++++++++++++++++++ 3 files changed, 208 insertions(+) diff --git a/common/cmd_net.c b/common/cmd_net.c index 09489d4..f4952d5 100644 --- a/common/cmd_net.c +++ b/common/cmd_net.c @@ -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 diff --git a/include/net.h b/include/net.h index 735b0b9..39ea848 100644 --- a/include/net.h +++ b/include/net.h @@ -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 /**********************************************************************/ /* diff --git a/net/eth.c b/net/eth.c index 76ffa05..2cde72c 100644 --- a/net/eth.c +++ b/net/eth.c @@ -542,3 +542,49 @@ char *eth_get_name(void) { return eth_current ? eth_current->name : "unknown"; } + +#ifdef CONFIG_CMD_ETH_EEPROM +int eth_eeprom_read(struct eth_device *dev, u32 offset, + u32 length, u8 *data) +{ + return dev->eeprom_read ? + dev->eeprom_read(dev, offset, length, data) : + -ENOSYS; +} + +int eth_eeprom_write(struct eth_device *dev, u32 offset, + u32 length, u8 *data) +{ + return dev->eeprom_write ? + dev->eeprom_write(dev, offset, length, data) : + -ENOSYS; +} + +int eth_eeprom_defaults(struct eth_device *dev) +{ + return dev->eeprom_defaults ? dev->eeprom_defaults(dev) : + -ENOSYS; +} + +int eth_eeprom_read_mac(struct eth_device *dev, u8 *enetaddr) +{ + if (dev->eeprom_read_mac) + return dev->eeprom_read_mac(dev, enetaddr); + + return dev->eeprom_mac_offset >= 0 ? + eth_eeprom_read(dev, dev->eeprom_mac_offset, + 6, enetaddr) : + -ENOSYS; +} + +int eth_eeprom_write_mac(struct eth_device *dev, u8 *enetaddr) +{ + if (dev->eeprom_write_mac) + return dev->eeprom_write_mac(dev, enetaddr); + + return dev->eeprom_mac_offset >= 0 ? + eth_eeprom_write(dev, dev->eeprom_mac_offset, + 6, enetaddr) : + -ENOSYS; +} +#endif -- 2.1.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [U-Boot] [PATCH v2 2/2] usb: eth: smsc95xx: Add EEPROM access support for LAN9514 2014-10-09 11:42 [U-Boot] [PATCH v2 1/2] net: Add a command to access the EEPROM from ethernet devices Alban Bedel @ 2014-10-09 11:42 ` Alban Bedel 2014-10-09 21:00 ` Pavel Machek 2014-10-09 15:17 ` [U-Boot] [PATCH v2 1/2] net: Add a command to access the EEPROM from ethernet devices Marek Vasut 1 sibling, 1 reply; 6+ messages in thread From: Alban Bedel @ 2014-10-09 11:42 UTC (permalink / raw) To: u-boot Use the new ethernet eeprom API to allow the user to read/write the EEPROM. Signed-off-by: Alban Bedel <alban.bedel@avionic-design.de> --- v2: * Rework the defaults implementation to use the proper config depending on the device type. * Allow the board to override the defaults data. * Use the proper defaults instead of the Tamonten config. * Fix style error in usb_ether.h * Add a comment to explain why the default MAC has all bits set This patch is based on earlier work from Thierry Reding, I assumed that the default config was derived from the datasheet. However it turned out that this config had been customized for the Tamonten boards. I restored the config according to the defaults found in the datasheet. Sadly the datasheet doesn't properly document all the fields from the EEPROM, so it may still have a few bugs as I don't have the default values for all fields. --- drivers/usb/eth/smsc95xx.c | 246 +++++++++++++++++++++++++++++++++++++++++++-- include/usb_ether.h | 8 ++ 2 files changed, 247 insertions(+), 7 deletions(-) diff --git a/drivers/usb/eth/smsc95xx.c b/drivers/usb/eth/smsc95xx.c index 6bca34d..4e06be7 100644 --- a/drivers/usb/eth/smsc95xx.c +++ b/drivers/usb/eth/smsc95xx.c @@ -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,155 @@ struct smsc95xx_private { int have_hwaddr; /* 1 if we have a hardware MAC address */ }; +#ifdef CONFIG_CMD_ETH_EEPROM +struct smsc95xx_eeprom_device { + unsigned short vendor; + unsigned short product; + struct smsc95xx_eeprom_defaults *defaults; +}; + +/* Default values as used by the controller when the EEPROM hasn't + * been programmed yet. Note that when unset the MAC address has + * all bits set instead of all bits cleared as is usual in u-boot. */ +static u8 smsc9514_eeprom_defaults_data[] = { + /* 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 */ + 0x04, /* HS Polling Interval for Interrupt Endpoint */ + 0x05, /* 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) */ + 0x02, /* 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 */ +}; + +/* This can be overriden by the board to use custom data */ +struct smsc95xx_eeprom_defaults __weak smsc9514_eeprom_defaults = { + .data = smsc9514_eeprom_defaults_data, + .size = ARRAY_SIZE(smsc9514_eeprom_defaults_data), +}; + +static struct smsc95xx_eeprom_device smsc95xx_eeprom_devices[] = { + { + .vendor = 0x0424, + .product = 0x9514, + .defaults = &smsc9514_eeprom_defaults, + }, + {} +}; +#endif + /* * Smsc95xx infrastructure commands */ @@ -285,9 +436,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 +462,81 @@ 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) +{ + struct ueth_data *ueth = (struct ueth_data *)eth->priv; + struct smsc95xx_eeprom_defaults *dflt; + struct usb_device *usb_dev; + int i; + + /* Try to find the device type, we must look at the parent to handle + * devices like the LAN9512 and LAN9514 that include a usb hub. */ + for (usb_dev = ueth->pusb_dev, dflt = NULL; + usb_dev && !dflt; + usb_dev = usb_dev->parent) { + for (i = 0; smsc95xx_eeprom_devices[i].defaults; i++) { + if (smsc95xx_eeprom_devices[i].vendor == + usb_dev->descriptor.idVendor && + smsc95xx_eeprom_devices[i].product == + usb_dev->descriptor.idProduct) { + dflt = smsc95xx_eeprom_devices[i].defaults; + break; + } + } + } + + if (dflt && dflt->data && dflt->size > 0) + return smsc95xx_write_eeprom(eth, 0, dflt->size, dflt->data); + + return -1; +} +#endif + /* * mii_nway_restart - restart NWay (autonegotiation) for this interface * @@ -349,12 +576,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 +733,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 +1120,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; } diff --git a/include/usb_ether.h b/include/usb_ether.h index 35700a2..e7d371f 100644 --- a/include/usb_ether.h +++ b/include/usb_ether.h @@ -61,4 +61,12 @@ int smsc95xx_eth_probe(struct usb_device *dev, unsigned int ifnum, int smsc95xx_eth_get_info(struct usb_device *dev, struct ueth_data *ss, struct eth_device *eth); +/* Default EEPROM data, to allow the boards to override it */ +struct smsc95xx_eeprom_defaults { + u8 *data; + u32 size; +}; + +extern struct smsc95xx_eeprom_defaults smsc9514_eeprom_defaults; + #endif /* __USB_ETHER_H__ */ -- 2.1.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [U-Boot] [PATCH v2 2/2] usb: eth: smsc95xx: Add EEPROM access support for LAN9514 2014-10-09 11:42 ` [U-Boot] [PATCH v2 2/2] usb: eth: smsc95xx: Add EEPROM access support for LAN9514 Alban Bedel @ 2014-10-09 21:00 ` Pavel Machek 0 siblings, 0 replies; 6+ messages in thread From: Pavel Machek @ 2014-10-09 21:00 UTC (permalink / raw) To: u-boot On Thu 2014-10-09 13:42:50, Alban Bedel wrote: > Use the new ethernet eeprom API to allow the user to read/write the > EEPROM. > > Signed-off-by: Alban Bedel <alban.bedel@avionic-design.de> Acked-by: Pavel Machek <pavel@denx.de> -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html ^ permalink raw reply [flat|nested] 6+ messages in thread
* [U-Boot] [PATCH v2 1/2] net: Add a command to access the EEPROM from ethernet devices 2014-10-09 11:42 [U-Boot] [PATCH v2 1/2] net: Add a command to access the EEPROM from ethernet devices Alban Bedel 2014-10-09 11:42 ` [U-Boot] [PATCH v2 2/2] usb: eth: smsc95xx: Add EEPROM access support for LAN9514 Alban Bedel @ 2014-10-09 15:17 ` Marek Vasut 2014-10-13 8:56 ` Alban Bedel 1 sibling, 1 reply; 6+ messages in thread From: Marek Vasut @ 2014-10-09 15:17 UTC (permalink / raw) To: u-boot On Thursday, October 09, 2014 at 01:42:49 PM, Alban Bedel wrote: > 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. > > Signed-off-by: Alban Bedel <alban.bedel@avionic-design.de> I will not comment on the code yet, but would like to discuss the concept instead. I wonder, can we not have a more generic command here? One which can manage the ethernet device altogether, not just adjust it's eeprom? Something like 'ethtool' in Linux ... What do you think please ? Best regards, Marek Vasut ^ permalink raw reply [flat|nested] 6+ messages in thread
* [U-Boot] [PATCH v2 1/2] net: Add a command to access the EEPROM from ethernet devices 2014-10-09 15:17 ` [U-Boot] [PATCH v2 1/2] net: Add a command to access the EEPROM from ethernet devices Marek Vasut @ 2014-10-13 8:56 ` Alban Bedel 2014-10-14 6:26 ` Joe Hershberger 0 siblings, 1 reply; 6+ messages in thread From: Alban Bedel @ 2014-10-13 8:56 UTC (permalink / raw) To: u-boot On Thu, 9 Oct 2014 17:17:00 +0200 Marek Vasut <marex@denx.de> wrote: > On Thursday, October 09, 2014 at 01:42:49 PM, Alban Bedel wrote: > > 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. > > > > Signed-off-by: Alban Bedel <alban.bedel@avionic-design.de> > > I will not comment on the code yet, but would like to discuss the concept > instead. I wonder, can we not have a more generic command here? One which > can manage the ethernet device altogether, not just adjust it's eeprom? > Something like 'ethtool' in Linux ... > > What do you think please ? Currently this is all I need for the boards I'm working on. However I have no problem with splitting the command from 'eth_eeprom' to 'eth eeprom' to leave room for other stuff. 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/20141013/06d9342c/attachment.pgp> ^ permalink raw reply [flat|nested] 6+ messages in thread
* [U-Boot] [PATCH v2 1/2] net: Add a command to access the EEPROM from ethernet devices 2014-10-13 8:56 ` Alban Bedel @ 2014-10-14 6:26 ` Joe Hershberger 0 siblings, 0 replies; 6+ messages in thread From: Joe Hershberger @ 2014-10-14 6:26 UTC (permalink / raw) To: u-boot On Mon, Oct 13, 2014 at 3:56 AM, Alban Bedel <alban.bedel@avionic-design.de> wrote: > > On Thu, 9 Oct 2014 17:17:00 +0200 > Marek Vasut <marex@denx.de> wrote: > > > On Thursday, October 09, 2014 at 01:42:49 PM, Alban Bedel wrote: > > > 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. > > > > > > Signed-off-by: Alban Bedel <alban.bedel@avionic-design.de> > > > > I will not comment on the code yet, but would like to discuss the concept > > instead. I wonder, can we not have a more generic command here? One which > > can manage the ethernet device altogether, not just adjust it's eeprom? > > Something like 'ethtool' in Linux ... > > > > What do you think please ? > > Currently this is all I need for the boards I'm working on. However I > have no problem with splitting the command from 'eth_eeprom' to > 'eth eeprom' to leave room for other stuff. I agree that the command would be better if it was "eth eeprom" -Joe ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2014-10-14 6:26 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-10-09 11:42 [U-Boot] [PATCH v2 1/2] net: Add a command to access the EEPROM from ethernet devices Alban Bedel 2014-10-09 11:42 ` [U-Boot] [PATCH v2 2/2] usb: eth: smsc95xx: Add EEPROM access support for LAN9514 Alban Bedel 2014-10-09 21:00 ` Pavel Machek 2014-10-09 15:17 ` [U-Boot] [PATCH v2 1/2] net: Add a command to access the EEPROM from ethernet devices Marek Vasut 2014-10-13 8:56 ` Alban Bedel 2014-10-14 6:26 ` Joe Hershberger
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox