[U-Boot] [PATCH v3 1/9] net: Revert "tftp: adjust settings to be suitable for 100Mbit ethernet"

Commit 620776d "tftp: adjust settings to be suitable for 100Mbit ethernet" causes the following error message when trying to load a file using 'tftp' command via a tftp server.
TFTP error: 'Unsupported option(s) requested' (8)
This is due to with commit 620776d changes, the tftp option 'timeout' value is now set to zero which is an invalid value as per RFC2349 [1]. Valid values range between "1" and "255" seconds, inclusive. With some tftp servers that strictly implement the RFC requirement, it reports such an error message.
Revert commit 620776d for RFC compliance.
[1] https://www.ietf.org/rfc/rfc2349.txt
Signed-off-by: Bin Meng bmeng.cn@gmail.com Acked-by: Joe Hershberger joe.hershberger@ni.com
---
Changes in v3: - Drop e1000 build warning patch which is already applied
Changes in v2: - Rewrite the commit message to mention RFC2349
net/tftp.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/net/tftp.c b/net/tftp.c index 18ce84c..89be32a 100644 --- a/net/tftp.c +++ b/net/tftp.c @@ -19,10 +19,10 @@ /* Well known TFTP port # */ #define WELL_KNOWN_PORT 69 /* Millisecs to timeout for lost pkt */ -#define TIMEOUT 100UL +#define TIMEOUT 5000UL #ifndef CONFIG_NET_RETRY_COUNT /* # of timeouts before giving up */ -# define TIMEOUT_COUNT 1000 +# define TIMEOUT_COUNT 10 #else # define TIMEOUT_COUNT (CONFIG_NET_RETRY_COUNT * 2) #endif @@ -711,10 +711,10 @@ void tftp_start(enum proto_t protocol) if (ep != NULL) timeout_ms = simple_strtol(ep, NULL, 10);
- if (timeout_ms < 10) { - printf("TFTP timeout (%ld ms) too low, set min = 10 ms\n", + if (timeout_ms < 1000) { + printf("TFTP timeout (%ld ms) too low, set min = 1000 ms\n", timeout_ms); - timeout_ms = 10; + timeout_ms = 1000; }
debug("TFTP blocksize = %i, timeout = %ld ms\n",

With driver model, board_eth_init() or cpu_eth_init() is not a must. Thus we don't need print a misleading "Net Initialization Skipped".
Signed-off-by: Bin Meng bmeng.cn@gmail.com Acked-by: Joe Hershberger joe.hershberger@ni.com
---
Changes in v3: None Changes in v2: - Change to only comment out "Net Initialization Skipped" printf
net/eth.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/net/eth.c b/net/eth.c index d3ec8d6..c46a8c3 100644 --- a/net/eth.c +++ b/net/eth.c @@ -107,7 +107,9 @@ static void eth_common_init(void) if (cpu_eth_init(gd->bd) < 0) printf("CPU Net Initialization Failed\n"); } else { +#ifndef CONFIG_DM_ETH printf("Net Initialization Skipped\n"); +#endif } }

On 27 August 2015 at 23:25, Bin Meng bmeng.cn@gmail.com wrote:
With driver model, board_eth_init() or cpu_eth_init() is not a must. Thus we don't need print a misleading "Net Initialization Skipped".
Signed-off-by: Bin Meng bmeng.cn@gmail.com Acked-by: Joe Hershberger joe.hershberger@ni.com
Changes in v3: None Changes in v2:
- Change to only comment out "Net Initialization Skipped" printf
net/eth.c | 2 ++ 1 file changed, 2 insertions(+)
Applied to u-boot-x86, thanks!

Add one more ethernet device node in the sandbox test device tree, with name 'sbe5'. This is to support a new test case for testing network device rotation.
Signed-off-by: Bin Meng bmeng.cn@gmail.com Acked-by: Joe Hershberger joe.hershberger@ni.com
---
Changes in v3: None Changes in v2: - New patch to add a new test case for dm_test_eth_rotate
arch/sandbox/dts/test.dts | 7 +++++++ include/configs/sandbox.h | 3 ++- test/dm/eth.c | 5 +++++ 3 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts index c948df8..f5217fb 100644 --- a/arch/sandbox/dts/test.dts +++ b/arch/sandbox/dts/test.dts @@ -9,6 +9,7 @@ aliases { console = &uart0; eth0 = "/eth@10002000"; + eth3 = ð_3; eth5 = ð_5; i2c0 = "/i2c@0"; pci0 = &pci; @@ -121,6 +122,12 @@ fake-host-hwaddr = <0x00 0x00 0x66 0x44 0x22 0x11>; };
+ eth_3: sbe5 { + compatible = "sandbox,eth"; + reg = <0x10005000 0x1000>; + fake-host-hwaddr = <0x00 0x00 0x66 0x44 0x22 0x33>; + }; + eth@10004000 { compatible = "sandbox,eth"; reg = <0x10004000 0x1000>; diff --git a/include/configs/sandbox.h b/include/configs/sandbox.h index 6965d92..32e3a9b 100644 --- a/include/configs/sandbox.h +++ b/include/configs/sandbox.h @@ -187,7 +187,8 @@
#define SANDBOX_ETH_SETTINGS "ethaddr=00:00:11:22:33:44\0" \ "eth1addr=00:00:11:22:33:45\0" \ - "eth5addr=00:00:11:22:33:46\0" \ + "eth3addr=00:00:11:22:33:46\0" \ + "eth5addr=00:00:11:22:33:47\0" \ "ipaddr=1.2.3.4\0"
#define MEM_LAYOUT_ENV_SETTINGS \ diff --git a/test/dm/eth.c b/test/dm/eth.c index 700abdd..fcfb3e1 100644 --- a/test/dm/eth.c +++ b/test/dm/eth.c @@ -106,6 +106,11 @@ static int _dm_test_eth_rotate2(struct unit_test_state *uts) ut_assertok(net_loop(PING)); ut_asserteq_str("eth@10004000", getenv("ethact"));
+ /* Make sure we can handle device name which is not eth# */ + setenv("ethact", "sbe5"); + ut_assertok(net_loop(PING)); + ut_asserteq_str("sbe5", getenv("ethact")); + return 0; }

On 27 August 2015 at 23:25, Bin Meng bmeng.cn@gmail.com wrote:
Add one more ethernet device node in the sandbox test device tree, with name 'sbe5'. This is to support a new test case for testing network device rotation.
Signed-off-by: Bin Meng bmeng.cn@gmail.com Acked-by: Joe Hershberger joe.hershberger@ni.com
Changes in v3: None Changes in v2:
- New patch to add a new test case for dm_test_eth_rotate
arch/sandbox/dts/test.dts | 7 +++++++ include/configs/sandbox.h | 3 ++- test/dm/eth.c | 5 +++++ 3 files changed, 14 insertions(+), 1 deletion(-)
Applied to u-boot-x86, thanks!

When given a device name string, we should test to see if it is really an alias like "eth#".
Signed-off-by: Bin Meng bmeng.cn@gmail.com Acked-by: Joe Hershberger joe.hershberger@ni.com
---
Changes in v3: None Changes in v2: - Change to use strncmp()
net/eth.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/net/eth.c b/net/eth.c index c46a8c3..26520d3 100644 --- a/net/eth.c +++ b/net/eth.c @@ -195,10 +195,11 @@ struct udevice *eth_get_dev_by_name(const char *devname) const char *startp = NULL; struct udevice *it; struct uclass *uc; + int len = strlen("eth");
/* Must be longer than 3 to be an alias */ - if (strlen(devname) > strlen("eth")) { - startp = devname + strlen("eth"); + if (!strncmp(devname, "eth", len) && strlen(devname) > len) { + startp = devname + len; seq = simple_strtoul(startp, &endp, 10); }

On 27 August 2015 at 23:25, Bin Meng bmeng.cn@gmail.com wrote:
When given a device name string, we should test to see if it is really an alias like "eth#".
Signed-off-by: Bin Meng bmeng.cn@gmail.com Acked-by: Joe Hershberger joe.hershberger@ni.com
Changes in v3: None Changes in v2:
- Change to use strncmp()
net/eth.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
Applied to u-boot-x86, thanks!

Move to driver model for USB on Intel Crown Bay.
Signed-off-by: Bin Meng bmeng.cn@gmail.com Reviewed-by: Joe Hershberger joe.hershberger@ni.com Acked-by: Simon Glass sjg@chromium.org ---
Changes in v3: None Changes in v2: None
configs/crownbay_defconfig | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/configs/crownbay_defconfig b/configs/crownbay_defconfig index 4fc1827..6edd710 100644 --- a/configs/crownbay_defconfig +++ b/configs/crownbay_defconfig @@ -23,6 +23,8 @@ CONFIG_NETDEVICES=y CONFIG_E1000=y CONFIG_VIDEO_VESA=y CONFIG_FRAMEBUFFER_SET_VESA_MODE=y +CONFIG_USB=y +CONFIG_DM_USB=y CONFIG_DM_RTC=y CONFIG_USE_PRIVATE_LIBGCC=y CONFIG_SYS_VSNPRINTF=y

On 27 August 2015 at 23:25, Bin Meng bmeng.cn@gmail.com wrote:
Move to driver model for USB on Intel Crown Bay.
Signed-off-by: Bin Meng bmeng.cn@gmail.com Reviewed-by: Joe Hershberger joe.hershberger@ni.com Acked-by: Simon Glass sjg@chromium.org
Changes in v3: None Changes in v2: None
configs/crownbay_defconfig | 2 ++ 1 file changed, 2 insertions(+)
Applied to u-boot-x86, thanks!

Since E1000 driver has been converted to driver model, enable it on Intel Crown Bay. But the Intel Topcliff GbE driver has not been converted to driver model yet, disable it for now.
Signed-off-by: Bin Meng bmeng.cn@gmail.com Acked-by: Joe Hershberger joe.hershberger@ni.com ---
Changes in v3: None Changes in v2: None
board/intel/crownbay/crownbay.c | 6 ------ configs/crownbay_defconfig | 2 +- include/configs/crownbay.h | 1 - 3 files changed, 1 insertion(+), 8 deletions(-)
diff --git a/board/intel/crownbay/crownbay.c b/board/intel/crownbay/crownbay.c index d6de9fa..3a79e69 100644 --- a/board/intel/crownbay/crownbay.c +++ b/board/intel/crownbay/crownbay.c @@ -7,7 +7,6 @@ #include <common.h> #include <asm/ibmpc.h> #include <asm/pnp_def.h> -#include <netdev.h> #include <smsc_lpc47m.h>
int board_early_init_f(void) @@ -24,8 +23,3 @@ void setup_pch_gpios(u16 gpiobase, const struct pch_gpio_map *gpio) { return; } - -int board_eth_init(bd_t *bis) -{ - return pci_eth_init(bis); -} diff --git a/configs/crownbay_defconfig b/configs/crownbay_defconfig index 6edd710..f027faf 100644 --- a/configs/crownbay_defconfig +++ b/configs/crownbay_defconfig @@ -19,7 +19,7 @@ CONFIG_OF_CONTROL=y CONFIG_CPU=y CONFIG_DM_PCI=y CONFIG_SPI_FLASH=y -CONFIG_NETDEVICES=y +CONFIG_DM_ETH=y CONFIG_E1000=y CONFIG_VIDEO_VESA=y CONFIG_FRAMEBUFFER_SET_VESA_MODE=y diff --git a/include/configs/crownbay.h b/include/configs/crownbay.h index 998da78..a344c85 100644 --- a/include/configs/crownbay.h +++ b/include/configs/crownbay.h @@ -50,7 +50,6 @@ #define CONFIG_CMD_MMC
/* Topcliff Gigabit Ethernet */ -#define CONFIG_PCH_GBE #define CONFIG_PHYLIB
/* Environment configuration */

On 27 August 2015 at 23:25, Bin Meng bmeng.cn@gmail.com wrote:
Since E1000 driver has been converted to driver model, enable it on Intel Crown Bay. But the Intel Topcliff GbE driver has not been converted to driver model yet, disable it for now.
Signed-off-by: Bin Meng bmeng.cn@gmail.com Acked-by: Joe Hershberger joe.hershberger@ni.com
Changes in v3: None Changes in v2: None
board/intel/crownbay/crownbay.c | 6 ------ configs/crownbay_defconfig | 2 +- include/configs/crownbay.h | 1 - 3 files changed, 1 insertion(+), 8 deletions(-)
Applied to u-boot-x86, thanks!

This commit converts pch_gbe ethernet driver to driver model.
Since this driver is only used by Intel Crown Bay board, the conversion does not keep the non-dm version.
Signed-off-by: Bin Meng bmeng.cn@gmail.com Acked-by: Joe Hershberger joe.hershberger@ni.com Acked-by: Simon Glass sjg@chromium.org ---
Changes in v3: None Changes in v2: None
drivers/net/pch_gbe.c | 133 +++++++++++++++++++++++++++----------------------- drivers/net/pch_gbe.h | 2 - include/netdev.h | 4 -- 3 files changed, 73 insertions(+), 66 deletions(-)
diff --git a/drivers/net/pch_gbe.c b/drivers/net/pch_gbe.c index a03bdc0..004fcf8 100644 --- a/drivers/net/pch_gbe.c +++ b/drivers/net/pch_gbe.c @@ -7,10 +7,10 @@ */
#include <common.h> +#include <dm.h> #include <errno.h> #include <asm/io.h> #include <pci.h> -#include <malloc.h> #include <miiphy.h> #include "pch_gbe.h"
@@ -19,7 +19,7 @@ #endif
static struct pci_device_id supported[] = { - { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_TCF_GBE }, + { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_TCF_GBE) }, { } };
@@ -62,9 +62,10 @@ static int pch_gbe_mac_write(struct pch_gbe_regs *mac_regs, u8 *addr) return -ETIME; }
-static int pch_gbe_reset(struct eth_device *dev) +static int pch_gbe_reset(struct udevice *dev) { - struct pch_gbe_priv *priv = dev->priv; + struct pch_gbe_priv *priv = dev_get_priv(dev); + struct eth_pdata *plat = dev_get_platdata(dev); struct pch_gbe_regs *mac_regs = priv->mac_regs; ulong start;
@@ -97,7 +98,7 @@ static int pch_gbe_reset(struct eth_device *dev) * so we have to reload MAC address here in order to * make linux pch_gbe driver happy. */ - return pch_gbe_mac_write(mac_regs, dev->enetaddr); + return pch_gbe_mac_write(mac_regs, plat->enetaddr); }
udelay(10); @@ -107,9 +108,9 @@ static int pch_gbe_reset(struct eth_device *dev) return -ETIME; }
-static void pch_gbe_rx_descs_init(struct eth_device *dev) +static void pch_gbe_rx_descs_init(struct udevice *dev) { - struct pch_gbe_priv *priv = dev->priv; + struct pch_gbe_priv *priv = dev_get_priv(dev); struct pch_gbe_regs *mac_regs = priv->mac_regs; struct pch_gbe_rx_desc *rx_desc = &priv->rx_desc[0]; int i; @@ -128,9 +129,9 @@ static void pch_gbe_rx_descs_init(struct eth_device *dev) &mac_regs->rx_dsc_sw_p); }
-static void pch_gbe_tx_descs_init(struct eth_device *dev) +static void pch_gbe_tx_descs_init(struct udevice *dev) { - struct pch_gbe_priv *priv = dev->priv; + struct pch_gbe_priv *priv = dev_get_priv(dev); struct pch_gbe_regs *mac_regs = priv->mac_regs; struct pch_gbe_tx_desc *tx_desc = &priv->tx_desc[0];
@@ -183,9 +184,9 @@ static void pch_gbe_adjust_link(struct pch_gbe_regs *mac_regs, return; }
-static int pch_gbe_init(struct eth_device *dev, bd_t *bis) +static int pch_gbe_start(struct udevice *dev) { - struct pch_gbe_priv *priv = dev->priv; + struct pch_gbe_priv *priv = dev_get_priv(dev); struct pch_gbe_regs *mac_regs = priv->mac_regs;
if (pch_gbe_reset(dev)) @@ -226,18 +227,18 @@ static int pch_gbe_init(struct eth_device *dev, bd_t *bis) return 0; }
-static void pch_gbe_halt(struct eth_device *dev) +static void pch_gbe_stop(struct udevice *dev) { - struct pch_gbe_priv *priv = dev->priv; + struct pch_gbe_priv *priv = dev_get_priv(dev);
pch_gbe_reset(dev);
phy_shutdown(priv->phydev); }
-static int pch_gbe_send(struct eth_device *dev, void *packet, int length) +static int pch_gbe_send(struct udevice *dev, void *packet, int length) { - struct pch_gbe_priv *priv = dev->priv; + struct pch_gbe_priv *priv = dev_get_priv(dev); struct pch_gbe_regs *mac_regs = priv->mac_regs; struct pch_gbe_tx_desc *tx_head, *tx_desc; u16 frame_ctrl = 0; @@ -277,15 +278,13 @@ static int pch_gbe_send(struct eth_device *dev, void *packet, int length) return -ETIME; }
-static int pch_gbe_recv(struct eth_device *dev) +static int pch_gbe_recv(struct udevice *dev, int flags, uchar **packetp) { - struct pch_gbe_priv *priv = dev->priv; + struct pch_gbe_priv *priv = dev_get_priv(dev); struct pch_gbe_regs *mac_regs = priv->mac_regs; - struct pch_gbe_rx_desc *rx_head, *rx_desc; + struct pch_gbe_rx_desc *rx_desc; u32 hw_desc, buffer_addr, length; - int rx_swp;
- rx_head = &priv->rx_desc[0]; rx_desc = &priv->rx_desc[priv->rx_idx];
readl(&mac_regs->int_st); @@ -293,11 +292,21 @@ static int pch_gbe_recv(struct eth_device *dev)
/* Just return if not receiving any packet */ if ((u32)rx_desc == hw_desc) - return 0; + return -EAGAIN;
buffer_addr = pci_mem_to_phys(priv->bdf, rx_desc->buffer_addr); + *packetp = (uchar *)buffer_addr; length = rx_desc->rx_words_eob - 3 - ETH_FCS_LEN; - net_process_received_packet((uchar *)buffer_addr, length); + + return length; +} + +static int pch_gbe_free_pkt(struct udevice *dev, uchar *packet, int length) +{ + struct pch_gbe_priv *priv = dev_get_priv(dev); + struct pch_gbe_regs *mac_regs = priv->mac_regs; + struct pch_gbe_rx_desc *rx_head = &priv->rx_desc[0]; + int rx_swp;
/* Test the wrap-around condition */ if (++priv->rx_idx >= PCH_GBE_DESC_NUM) @@ -309,7 +318,7 @@ static int pch_gbe_recv(struct eth_device *dev) writel(pci_phys_to_mem(priv->bdf, (u32)(rx_head + rx_swp)), &mac_regs->rx_dsc_sw_p);
- return length; + return 0; }
static int pch_gbe_mdio_ready(struct pch_gbe_regs *mac_regs) @@ -365,7 +374,7 @@ static int pch_gbe_mdio_write(struct mii_dev *bus, int addr, int devad, return 0; }
-static int pch_gbe_mdio_init(char *name, struct pch_gbe_regs *mac_regs) +static int pch_gbe_mdio_init(const char *name, struct pch_gbe_regs *mac_regs) { struct mii_dev *bus;
@@ -384,13 +393,14 @@ static int pch_gbe_mdio_init(char *name, struct pch_gbe_regs *mac_regs) return mdio_register(bus); }
-static int pch_gbe_phy_init(struct eth_device *dev) +static int pch_gbe_phy_init(struct udevice *dev) { - struct pch_gbe_priv *priv = dev->priv; + struct pch_gbe_priv *priv = dev_get_priv(dev); + struct eth_pdata *plat = dev_get_platdata(dev); struct phy_device *phydev; int mask = 0xffffffff;
- phydev = phy_find_by_mask(priv->bus, mask, priv->interface); + phydev = phy_find_by_mask(priv->bus, mask, plat->phy_interface); if (!phydev) { printf("pch_gbe: cannot find the phy\n"); return -1; @@ -404,63 +414,66 @@ static int pch_gbe_phy_init(struct eth_device *dev) priv->phydev = phydev; phy_config(phydev);
- return 1; + return 0; }
-int pch_gbe_register(bd_t *bis) +int pch_gbe_probe(struct udevice *dev) { - struct eth_device *dev; struct pch_gbe_priv *priv; + struct eth_pdata *plat = dev_get_platdata(dev); pci_dev_t devno; u32 iobase;
- devno = pci_find_devices(supported, 0); - if (devno == -1) - return -ENODEV; - - dev = (struct eth_device *)malloc(sizeof(*dev)); - if (!dev) - return -ENOMEM; - memset(dev, 0, sizeof(*dev)); + devno = pci_get_bdf(dev);
/* * The priv structure contains the descriptors and frame buffers which - * need a strict buswidth alignment (64 bytes) + * need a strict buswidth alignment (64 bytes). This is guaranteed by + * DM_FLAG_ALLOC_PRIV_DMA flag in the U_BOOT_DRIVER. */ - priv = (struct pch_gbe_priv *)memalign(PCH_GBE_ALIGN_SIZE, - sizeof(*priv)); - if (!priv) { - free(dev); - return -ENOMEM; - } - memset(priv, 0, sizeof(*priv)); + priv = dev_get_priv(dev);
- dev->priv = priv; - priv->dev = dev; priv->bdf = devno;
pci_read_config_dword(devno, PCI_BASE_ADDRESS_1, &iobase); iobase &= PCI_BASE_ADDRESS_MEM_MASK; iobase = pci_mem_to_phys(devno, iobase);
- dev->iobase = iobase; + plat->iobase = iobase; priv->mac_regs = (struct pch_gbe_regs *)iobase;
- sprintf(dev->name, "pch_gbe"); - /* Read MAC address from SROM and initialize dev->enetaddr with it */ - pch_gbe_mac_read(priv->mac_regs, dev->enetaddr); - - dev->init = pch_gbe_init; - dev->halt = pch_gbe_halt; - dev->send = pch_gbe_send; - dev->recv = pch_gbe_recv; + pch_gbe_mac_read(priv->mac_regs, plat->enetaddr);
- eth_register(dev); - - priv->interface = PHY_INTERFACE_MODE_RGMII; + plat->phy_interface = PHY_INTERFACE_MODE_RGMII; pch_gbe_mdio_init(dev->name, priv->mac_regs); priv->bus = miiphy_get_dev_by_name(dev->name);
return pch_gbe_phy_init(dev); } + +static const struct eth_ops pch_gbe_ops = { + .start = pch_gbe_start, + .send = pch_gbe_send, + .recv = pch_gbe_recv, + .free_pkt = pch_gbe_free_pkt, + .stop = pch_gbe_stop, +}; + +static const struct udevice_id pch_gbe_ids[] = { + { .compatible = "intel,pch-gbe" }, + { } +}; + +U_BOOT_DRIVER(eth_pch_gbe) = { + .name = "pch_gbe", + .id = UCLASS_ETH, + .of_match = pch_gbe_ids, + .probe = pch_gbe_probe, + .ops = &pch_gbe_ops, + .priv_auto_alloc_size = sizeof(struct pch_gbe_priv), + .platdata_auto_alloc_size = sizeof(struct eth_pdata), + .flags = DM_FLAG_ALLOC_PRIV_DMA, +}; + +U_BOOT_PCI_DEVICE(eth_pch_gbe, supported); diff --git a/drivers/net/pch_gbe.h b/drivers/net/pch_gbe.h index 11329d4..afcb03d 100644 --- a/drivers/net/pch_gbe.h +++ b/drivers/net/pch_gbe.h @@ -287,12 +287,10 @@ struct pch_gbe_priv { struct pch_gbe_rx_desc rx_desc[PCH_GBE_DESC_NUM]; struct pch_gbe_tx_desc tx_desc[PCH_GBE_DESC_NUM]; char rx_buff[PCH_GBE_DESC_NUM][PCH_GBE_RX_FRAME_LEN]; - struct eth_device *dev; struct phy_device *phydev; struct mii_dev *bus; struct pch_gbe_regs *mac_regs; pci_dev_t bdf; - u32 interface; int rx_idx; int tx_idx; }; diff --git a/include/netdev.h b/include/netdev.h index 662d173..3d5a54f 100644 --- a/include/netdev.h +++ b/include/netdev.h @@ -70,7 +70,6 @@ int natsemi_initialize(bd_t *bis); int ne2k_register(void); int npe_initialize(bd_t *bis); int ns8382x_initialize(bd_t *bis); -int pch_gbe_register(bd_t *bis); int pcnet_initialize(bd_t *bis); int ppc_4xx_eth_initialize (bd_t *bis); int rtl8139_initialize(bd_t *bis); @@ -123,9 +122,6 @@ static inline int pci_eth_init(bd_t *bis) #ifdef CONFIG_E1000 num += e1000_initialize(bis); #endif -#ifdef CONFIG_PCH_GBE - num += pch_gbe_register(bis); -#endif #ifdef CONFIG_PCNET num += pcnet_initialize(bis); #endif

On 27 August 2015 at 23:25, Bin Meng bmeng.cn@gmail.com wrote:
This commit converts pch_gbe ethernet driver to driver model.
Since this driver is only used by Intel Crown Bay board, the conversion does not keep the non-dm version.
Signed-off-by: Bin Meng bmeng.cn@gmail.com Acked-by: Joe Hershberger joe.hershberger@ni.com Acked-by: Simon Glass sjg@chromium.org
Changes in v3: None Changes in v2: None
drivers/net/pch_gbe.c | 133 +++++++++++++++++++++++++++----------------------- drivers/net/pch_gbe.h | 2 - include/netdev.h | 4 -- 3 files changed, 73 insertions(+), 66 deletions(-)
Applied to u-boot-x86, thanks!

Add Kconfig option in preparation for moving board to use Kconfig.
Signed-off-by: Bin Meng bmeng.cn@gmail.com
---
Changes in v3: - Make PHYLIB chooseable in memuconfig - Remove 'default n' for PHYLIB and PCH_GBE
Changes in v2: - Add PHYLIB Kconfig option and let PCH_GBE select PHYLIB
drivers/net/Kconfig | 13 +++++++++++++ 1 file changed, 13 insertions(+)
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index 7367d9e..bbec6a6 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig @@ -8,6 +8,11 @@ config DM_ETH This is currently implemented in net/eth.c Look in include/net.h for details.
+config PHYLIB + bool "Ethernet PHY (physical media interface) support" + help + Enable Ethernet PHY (physical media interface) support. + menuconfig NETDEVICES bool "Network device support" depends on NET @@ -79,4 +84,12 @@ config ETH_DESIGNWARE 100Mbit and 1 Gbit operation. You must enable CONFIG_PHYLIB to provide the PHY (physical media interface).
+config PCH_GBE + bool "Intel Platform Controller Hub EG20T GMAC driver" + depends on DM_ETH && DM_PCI + select PHYLIB + help + This MAC is present in Intel Platform Controller Hub EG20T. It + supports 10/100/1000 Mbps operation. + endif # NETDEVICES

On 27 August 2015 at 23:25, Bin Meng bmeng.cn@gmail.com wrote:
Add Kconfig option in preparation for moving board to use Kconfig.
Signed-off-by: Bin Meng bmeng.cn@gmail.com
Changes in v3:
- Make PHYLIB chooseable in memuconfig
- Remove 'default n' for PHYLIB and PCH_GBE
Changes in v2:
- Add PHYLIB Kconfig option and let PCH_GBE select PHYLIB
drivers/net/Kconfig | 13 +++++++++++++ 1 file changed, 13 insertions(+)
Applied to u-boot-x86, thanks!

Now that we have converted the pch_gbe driver to driver moel, enable it on Intel Crown Bay board.
Signed-off-by: Bin Meng bmeng.cn@gmail.com Acked-by: Simon Glass sjg@chromium.org
---
Changes in v3: None Changes in v2: - Remove CONFIG_PHYLIB from crownbay.h
configs/crownbay_defconfig | 1 + include/configs/crownbay.h | 3 --- 2 files changed, 1 insertion(+), 3 deletions(-)
diff --git a/configs/crownbay_defconfig b/configs/crownbay_defconfig index f027faf..f328159 100644 --- a/configs/crownbay_defconfig +++ b/configs/crownbay_defconfig @@ -21,6 +21,7 @@ CONFIG_DM_PCI=y CONFIG_SPI_FLASH=y CONFIG_DM_ETH=y CONFIG_E1000=y +CONFIG_PCH_GBE=y CONFIG_VIDEO_VESA=y CONFIG_FRAMEBUFFER_SET_VESA_MODE=y CONFIG_USB=y diff --git a/include/configs/crownbay.h b/include/configs/crownbay.h index a344c85..3153a74 100644 --- a/include/configs/crownbay.h +++ b/include/configs/crownbay.h @@ -49,9 +49,6 @@ #define CONFIG_MMC_SDMA #define CONFIG_CMD_MMC
-/* Topcliff Gigabit Ethernet */ -#define CONFIG_PHYLIB - /* Environment configuration */ #define CONFIG_ENV_SECT_SIZE 0x1000 #define CONFIG_ENV_OFFSET 0

On 27 August 2015 at 23:25, Bin Meng bmeng.cn@gmail.com wrote:
Now that we have converted the pch_gbe driver to driver moel, enable it on Intel Crown Bay board.
Signed-off-by: Bin Meng bmeng.cn@gmail.com Acked-by: Simon Glass sjg@chromium.org
Changes in v3: None Changes in v2:
- Remove CONFIG_PHYLIB from crownbay.h
configs/crownbay_defconfig | 1 + include/configs/crownbay.h | 3 --- 2 files changed, 1 insertion(+), 3 deletions(-)
Applied to u-boot-x86, thanks!

Hi,
On 27 August 2015 at 23:25, Bin Meng bmeng.cn@gmail.com wrote:
Commit 620776d "tftp: adjust settings to be suitable for 100Mbit ethernet" causes the following error message when trying to load a file using 'tftp' command via a tftp server.
TFTP error: 'Unsupported option(s) requested' (8)
This is due to with commit 620776d changes, the tftp option 'timeout' value is now set to zero which is an invalid value as per RFC2349 [1]. Valid values range between "1" and "255" seconds, inclusive. With some tftp servers that strictly implement the RFC requirement, it reports such an error message.
Revert commit 620776d for RFC compliance.
[1] https://www.ietf.org/rfc/rfc2349.txt
Signed-off-by: Bin Meng bmeng.cn@gmail.com Acked-by: Joe Hershberger joe.hershberger@ni.com
Changes in v3:
- Drop e1000 build warning patch which is already applied
Changes in v2:
- Rewrite the commit message to mention RFC2349
This series is assigned to me in patchwork. Since the series seems to consist of bug fixes and driver model conversion of a driver with no other users, I'm inclined to apply it now.
Please let me know if you disagree.
Regards, Simon

Hi Simon,
On Sun, Aug 30, 2015 at 5:45 PM, Simon Glass sjg@chromium.org wrote:
Hi,
On 27 August 2015 at 23:25, Bin Meng bmeng.cn@gmail.com wrote:
Commit 620776d "tftp: adjust settings to be suitable for 100Mbit ethernet" causes the following error message when trying to load a file using 'tftp' command via a tftp server.
TFTP error: 'Unsupported option(s) requested' (8)
This is due to with commit 620776d changes, the tftp option 'timeout' value is now set to zero which is an invalid value as per RFC2349 [1]. Valid values range between "1" and "255" seconds, inclusive. With some tftp servers that strictly implement the RFC requirement, it reports such an error message.
Revert commit 620776d for RFC compliance.
[1] https://www.ietf.org/rfc/rfc2349.txt
Signed-off-by: Bin Meng bmeng.cn@gmail.com Acked-by: Joe Hershberger joe.hershberger@ni.com
Changes in v3:
- Drop e1000 build warning patch which is already applied
Changes in v2:
- Rewrite the commit message to mention RFC2349
This series is assigned to me in patchwork. Since the series seems to consist of bug fixes and driver model conversion of a driver with no other users, I'm inclined to apply it now.
Please let me know if you disagree.
I'm fine with that.
-Joe

On 31 August 2015 at 08:38, Joe Hershberger joe.hershberger@gmail.com wrote:
Hi Simon,
On Sun, Aug 30, 2015 at 5:45 PM, Simon Glass sjg@chromium.org wrote:
Hi,
On 27 August 2015 at 23:25, Bin Meng bmeng.cn@gmail.com wrote:
Commit 620776d "tftp: adjust settings to be suitable for 100Mbit ethernet" causes the following error message when trying to load a file using 'tftp' command via a tftp server.
TFTP error: 'Unsupported option(s) requested' (8)
This is due to with commit 620776d changes, the tftp option 'timeout' value is now set to zero which is an invalid value as per RFC2349 [1]. Valid values range between "1" and "255" seconds, inclusive. With some tftp servers that strictly implement the RFC requirement, it reports such an error message.
Revert commit 620776d for RFC compliance.
[1] https://www.ietf.org/rfc/rfc2349.txt
Signed-off-by: Bin Meng bmeng.cn@gmail.com Acked-by: Joe Hershberger joe.hershberger@ni.com
Changes in v3:
- Drop e1000 build warning patch which is already applied
Changes in v2:
- Rewrite the commit message to mention RFC2349
This series is assigned to me in patchwork. Since the series seems to consist of bug fixes and driver model conversion of a driver with no other users, I'm inclined to apply it now.
Please let me know if you disagree.
I'm fine with that.
-Joe
Applied to u-boot-x86, thanks!

Hello Bin,
Am 28.08.2015 um 07:25 schrieb Bin Meng:
Commit 620776d "tftp: adjust settings to be suitable for 100Mbit ethernet" causes the following error message when trying to load a file using 'tftp' command via a tftp server.
TFTP error: 'Unsupported option(s) requested' (8)
This is due to with commit 620776d changes, the tftp option 'timeout' value is now set to zero which is an invalid value as per RFC2349 [1]. Valid values range between "1" and "255" seconds, inclusive. With some tftp servers that strictly implement the RFC requirement, it reports such an error message.
Revert commit 620776d for RFC compliance.
[1] https://www.ietf.org/rfc/rfc2349.txt
Signed-off-by: Bin Meng bmeng.cn@gmail.com Acked-by: Joe Hershberger joe.hershberger@ni.com
Just tried current mainline on the smartweb board, and had the same issue. Your patch fixed it, thanks!
Tested-by: Heiko Schocher hs@denx.de
bye, Heiko
Changes in v3:
- Drop e1000 build warning patch which is already applied
Changes in v2:
Rewrite the commit message to mention RFC2349
net/tftp.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/net/tftp.c b/net/tftp.c index 18ce84c..89be32a 100644 --- a/net/tftp.c +++ b/net/tftp.c @@ -19,10 +19,10 @@ /* Well known TFTP port # */ #define WELL_KNOWN_PORT 69 /* Millisecs to timeout for lost pkt */ -#define TIMEOUT 100UL +#define TIMEOUT 5000UL #ifndef CONFIG_NET_RETRY_COUNT /* # of timeouts before giving up */ -# define TIMEOUT_COUNT 1000 +# define TIMEOUT_COUNT 10 #else # define TIMEOUT_COUNT (CONFIG_NET_RETRY_COUNT * 2) #endif @@ -711,10 +711,10 @@ void tftp_start(enum proto_t protocol) if (ep != NULL) timeout_ms = simple_strtol(ep, NULL, 10);
- if (timeout_ms < 10) {
printf("TFTP timeout (%ld ms) too low, set min = 10 ms\n",
- if (timeout_ms < 1000) {
printf("TFTP timeout (%ld ms) too low, set min = 1000 ms\n", timeout_ms);
timeout_ms = 10;
timeout_ms = 1000;
}
debug("TFTP blocksize = %i, timeout = %ld ms\n",

Hi,
what about: https://patchwork.ozlabs.org/patch/510476/
best regards, Hannes
On 08.09.2015 11:23, Heiko Schocher wrote:
Hello Bin,
Am 28.08.2015 um 07:25 schrieb Bin Meng:
Commit 620776d "tftp: adjust settings to be suitable for 100Mbit ethernet" causes the following error message when trying to load a file using 'tftp' command via a tftp server.
TFTP error: 'Unsupported option(s) requested' (8)
This is due to with commit 620776d changes, the tftp option 'timeout' value is now set to zero which is an invalid value as per RFC2349 [1]. Valid values range between "1" and "255" seconds, inclusive. With some tftp servers that strictly implement the RFC requirement, it reports such an error message.
Revert commit 620776d for RFC compliance.
[1] https://www.ietf.org/rfc/rfc2349.txt
Signed-off-by: Bin Meng bmeng.cn@gmail.com Acked-by: Joe Hershberger joe.hershberger@ni.com
Just tried current mainline on the smartweb board, and had the same issue. Your patch fixed it, thanks!
Tested-by: Heiko Schocher hs@denx.de
bye, Heiko
Changes in v3:
- Drop e1000 build warning patch which is already applied
Changes in v2:
Rewrite the commit message to mention RFC2349
net/tftp.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/net/tftp.c b/net/tftp.c index 18ce84c..89be32a 100644 --- a/net/tftp.c +++ b/net/tftp.c @@ -19,10 +19,10 @@ /* Well known TFTP port # */ #define WELL_KNOWN_PORT 69 /* Millisecs to timeout for lost pkt */ -#define TIMEOUT 100UL +#define TIMEOUT 5000UL #ifndef CONFIG_NET_RETRY_COUNT /* # of timeouts before giving up */ -# define TIMEOUT_COUNT 1000 +# define TIMEOUT_COUNT 10 #else # define TIMEOUT_COUNT (CONFIG_NET_RETRY_COUNT * 2) #endif @@ -711,10 +711,10 @@ void tftp_start(enum proto_t protocol) if (ep != NULL) timeout_ms = simple_strtol(ep, NULL, 10);
- if (timeout_ms < 10) {
printf("TFTP timeout (%ld ms) too low, set min = 10 ms\n",
- if (timeout_ms < 1000) {
printf("TFTP timeout (%ld ms) too low, set min = 1000 ms\n", timeout_ms);
timeout_ms = 10;
timeout_ms = 1000; } debug("TFTP blocksize = %i, timeout = %ld ms\n",

Hi Hannes,
On Tue, Sep 8, 2015 at 6:13 PM, Hannes Schmelzer hannes@schmelzer.or.at wrote:
Hi,
what about: https://patchwork.ozlabs.org/patch/510476/
best regards, Hannes
The patch you mentioned does not completely revert the changes. It was a mix of partial revert plus previous tftp timeout changes. I believe Pavel will need to work out a proper patch to resolve the tftp timeout issue he sees in his network environment. But that is for the next release (v2016.01), not for this release.
On 08.09.2015 11:23, Heiko Schocher wrote:
Hello Bin,
Am 28.08.2015 um 07:25 schrieb Bin Meng:
Commit 620776d "tftp: adjust settings to be suitable for 100Mbit ethernet" causes the following error message when trying to load a file using 'tftp' command via a tftp server.
TFTP error: 'Unsupported option(s) requested' (8)
This is due to with commit 620776d changes, the tftp option 'timeout' value is now set to zero which is an invalid value as per RFC2349 [1]. Valid values range between "1" and "255" seconds, inclusive. With some tftp servers that strictly implement the RFC requirement, it reports such an error message.
Revert commit 620776d for RFC compliance.
[1] https://www.ietf.org/rfc/rfc2349.txt
Signed-off-by: Bin Meng bmeng.cn@gmail.com Acked-by: Joe Hershberger joe.hershberger@ni.com
Just tried current mainline on the smartweb board, and had the same issue. Your patch fixed it, thanks!
Tested-by: Heiko Schocher hs@denx.de
bye, Heiko
Changes in v3:
- Drop e1000 build warning patch which is already applied
Changes in v2:
Rewrite the commit message to mention RFC2349
net/tftp.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/net/tftp.c b/net/tftp.c index 18ce84c..89be32a 100644 --- a/net/tftp.c +++ b/net/tftp.c @@ -19,10 +19,10 @@ /* Well known TFTP port # */ #define WELL_KNOWN_PORT 69 /* Millisecs to timeout for lost pkt */ -#define TIMEOUT 100UL +#define TIMEOUT 5000UL #ifndef CONFIG_NET_RETRY_COUNT /* # of timeouts before giving up */ -# define TIMEOUT_COUNT 1000 +# define TIMEOUT_COUNT 10 #else # define TIMEOUT_COUNT (CONFIG_NET_RETRY_COUNT * 2) #endif @@ -711,10 +711,10 @@ void tftp_start(enum proto_t protocol) if (ep != NULL) timeout_ms = simple_strtol(ep, NULL, 10);
- if (timeout_ms < 10) {
printf("TFTP timeout (%ld ms) too low, set min = 10 ms\n",
- if (timeout_ms < 1000) {
printf("TFTP timeout (%ld ms) too low, set min = 1000 ms\n", timeout_ms);
timeout_ms = 10;
timeout_ms = 1000; } debug("TFTP blocksize = %i, timeout = %ld ms\n",
Regards, Bin

Hi Hannes,
On 08.09.2015 12:13, Hannes Schmelzer wrote:
what about: https://patchwork.ozlabs.org/patch/510476/
I think the current plan is to first revert this patch for this release. To not introduce a risk of a new setup as done in the patch you are referencing above. This patch will most likely then be picked up after the release. So that it has more time to get tested before a release.
BTW: I think that Simon has queued the revert in his repo (Simon, please correct me if I'm wrong). The revert should definitely hit mainline soon. I've been hit by this problem now multiple times already.
Thanks, Stefan

Hi,
okay ... just wanted to get sure that the patch has been noticed.
best regards, Hannes
On 08.09.2015 12:36, Stefan Roese wrote:
Hi Hannes,
On 08.09.2015 12:13, Hannes Schmelzer wrote:
what about: https://patchwork.ozlabs.org/patch/510476/
I think the current plan is to first revert this patch for this release. To not introduce a risk of a new setup as done in the patch you are referencing above. This patch will most likely then be picked up after the release. So that it has more time to get tested before a release.
BTW: I think that Simon has queued the revert in his repo (Simon, please correct me if I'm wrong). The revert should definitely hit mainline soon. I've been hit by this problem now multiple times already.
Thanks, Stefan
participants (6)
-
Bin Meng
-
Hannes Schmelzer
-
Heiko Schocher
-
Joe Hershberger
-
Simon Glass
-
Stefan Roese