[U-Boot] [PATCH] net: Add tftp speed indication

This prints a tftp speed indication after the download completes. This is the 3.6 MiB/s indicator below.
To enable this, define CONFIG_TFTP_SPEED in your board config.
Tegra2 (SeaBoard) # tftp ... Using asx0 device TFTP from server 172.22.72.144; our IP address is 172.22.73.81 Filename '/tftpboot/uImage-user-seaboard-1'. Load address: 0x408000 Loading: ################################################# 3.6 MiB/s done
Signed-off-by: Simon Glass sjg@chromium.org --- README | 9 +++++++++ net/tftp.c | 15 +++++++++++++++ 2 files changed, 24 insertions(+), 0 deletions(-)
diff --git a/README b/README index 0d17e7d..f754bd5 100644 --- a/README +++ b/README @@ -2349,6 +2349,15 @@ The following options need to be configured: A better solution is to properly configure the firewall, but sometimes that is not allowed.
+- TFTP Speed: + CONFIG_TFTP_SPEED + + If this is defined, the approximate download speed of the + tftp operation will be displayed after the # progress + markers, like this: + + Loading: ########### (more #) ############ 3.6 MiB/s + - Show boot progress: CONFIG_SHOW_BOOT_PROGRESS
diff --git a/net/tftp.c b/net/tftp.c index 59a8ebb..59161db 100644 --- a/net/tftp.c +++ b/net/tftp.c @@ -41,6 +41,10 @@ static ulong TftpTimeoutMSecs = TIMEOUT; static int TftpTimeoutCountMax = TIMEOUT_COUNT;
+#ifdef CONFIG_TFTP_SPEED +static ulong time_start; /* Record time we started tftp */ +#endif + /* * These globals govern the timeout behavior when attempting a connection to a * TFTP server. TftpRRQTimeoutMSecs specifies the number of milliseconds to @@ -299,6 +303,14 @@ static void tftp_complete(void) TftpNumchars++; } #endif +#ifdef CONFIG_TFTP_SPEED + time_start = get_timer(time_start); + if (time_start > 0) { + puts(" "); + print_size(NetBootFileXferSize / + time_start * 1000, "/s"); + } +#endif puts("\ndone\n"); net_set_state(NETLOOP_SUCCESS); } @@ -775,6 +787,9 @@ void TftpStart(enum proto_t protocol) TftpState = STATE_SEND_RRQ; }
+#ifdef CONFIG_TFTP_SPEED + time_start = get_timer(0); +#endif TftpTimeoutCountMax = TftpRRQTimeoutCountMax;
NetSetTimeout(TftpTimeoutMSecs, TftpTimeout);

Dear Simon Glass,
In message 1349913791-10564-1-git-send-email-sjg@chromium.org you wrote:
This prints a tftp speed indication after the download completes. This is the 3.6 MiB/s indicator below.
To enable this, define CONFIG_TFTP_SPEED in your board config.
Tegra2 (SeaBoard) # tftp ... Using asx0 device TFTP from server 172.22.72.144; our IP address is 172.22.73.81 Filename '/tftpboot/uImage-user-seaboard-1'. Load address: 0x408000 Loading: ################################################# 3.6 MiB/s done
Would it not make sense to print this (with a leading "\t ") on a new line?
Best regards,
Wolfgang Denk

On 10/11/12 02:03, Simon Glass wrote:
This prints a tftp speed indication after the download completes. This is the 3.6 MiB/s indicator below.
To enable this, define CONFIG_TFTP_SPEED in your board config.
This is relatively small (and nice) addition to the tftpboot command. Do we really need to introduce yet another config option for this? Can this be just added with no need to specify the config option?
Tegra2 (SeaBoard) # tftp ... Using asx0 device TFTP from server 172.22.72.144; our IP address is 172.22.73.81 Filename '/tftpboot/uImage-user-seaboard-1'. Load address: 0x408000 Loading: ################################################# 3.6 MiB/s done
Signed-off-by: Simon Glass sjg@chromium.org
README | 9 +++++++++ net/tftp.c | 15 +++++++++++++++ 2 files changed, 24 insertions(+), 0 deletions(-)
diff --git a/README b/README index 0d17e7d..f754bd5 100644 --- a/README +++ b/README @@ -2349,6 +2349,15 @@ The following options need to be configured: A better solution is to properly configure the firewall, but sometimes that is not allowed.
+- TFTP Speed:
CONFIG_TFTP_SPEED
If this is defined, the approximate download speed of the
tftp operation will be displayed after the # progress
markers, like this:
Loading: ########### (more #) ############ 3.6 MiB/s
- Show boot progress: CONFIG_SHOW_BOOT_PROGRESS
diff --git a/net/tftp.c b/net/tftp.c index 59a8ebb..59161db 100644 --- a/net/tftp.c +++ b/net/tftp.c @@ -41,6 +41,10 @@ static ulong TftpTimeoutMSecs = TIMEOUT; static int TftpTimeoutCountMax = TIMEOUT_COUNT;
+#ifdef CONFIG_TFTP_SPEED +static ulong time_start; /* Record time we started tftp */ +#endif
/*
- These globals govern the timeout behavior when attempting a connection to a
- TFTP server. TftpRRQTimeoutMSecs specifies the number of milliseconds to
@@ -299,6 +303,14 @@ static void tftp_complete(void) TftpNumchars++; } #endif +#ifdef CONFIG_TFTP_SPEED
- time_start = get_timer(time_start);
- if (time_start > 0) {
puts(" ");
print_size(NetBootFileXferSize /
time_start * 1000, "/s");
- }
+#endif puts("\ndone\n"); net_set_state(NETLOOP_SUCCESS); } @@ -775,6 +787,9 @@ void TftpStart(enum proto_t protocol) TftpState = STATE_SEND_RRQ; }
+#ifdef CONFIG_TFTP_SPEED
- time_start = get_timer(0);
+#endif TftpTimeoutCountMax = TftpRRQTimeoutCountMax;
NetSetTimeout(TftpTimeoutMSecs, TftpTimeout);

This prints a tftp speed indication after the download completes. This is the 3.6 MiB/s indicator below.
Tegra2 (SeaBoard) # tftp ... Using asx0 device TFTP from server 172.22.72.144; our IP address is 172.22.73.81 Filename '/tftpboot/uImage-user-seaboard-1'. Load address: 0x408000 Loading: ################################################# 3.6 MiB/s done
Signed-off-by: Simon Glass sjg@chromium.org --- Changes in v2: - Make this feature unconditional (remove need for CONFIG_TFTP_SPEED) - Display speed on the next line instead of same line
net/tftp.c | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/net/tftp.c b/net/tftp.c index 59a8ebb..09790eb 100644 --- a/net/tftp.c +++ b/net/tftp.c @@ -40,6 +40,7 @@
static ulong TftpTimeoutMSecs = TIMEOUT; static int TftpTimeoutCountMax = TIMEOUT_COUNT; +static ulong time_start; /* Record time we started tftp */
/* * These globals govern the timeout behavior when attempting a connection to a @@ -299,6 +300,12 @@ static void tftp_complete(void) TftpNumchars++; } #endif + time_start = get_timer(time_start); + if (time_start > 0) { + puts("\n\t "); /* Line up with "Loading: " */ + print_size(NetBootFileXferSize / + time_start * 1000, "/s"); + } puts("\ndone\n"); net_set_state(NETLOOP_SUCCESS); } @@ -775,6 +782,7 @@ void TftpStart(enum proto_t protocol) TftpState = STATE_SEND_RRQ; }
+ time_start = get_timer(0); TftpTimeoutCountMax = TftpRRQTimeoutCountMax;
NetSetTimeout(TftpTimeoutMSecs, TftpTimeout);

On 10/12/12 01:57, Simon Glass wrote:
This prints a tftp speed indication after the download completes. This is the 3.6 MiB/s indicator below.
Tegra2 (SeaBoard) # tftp ... Using asx0 device TFTP from server 172.22.72.144; our IP address is 172.22.73.81 Filename '/tftpboot/uImage-user-seaboard-1'. Load address: 0x408000 Loading: ################################################# 3.6 MiB/s done
Signed-off-by: Simon Glass sjg@chromium.org
Acked-by: Igor Grinberg grinberg@compulab.co.il
Thanks!
Changes in v2:
- Make this feature unconditional (remove need for CONFIG_TFTP_SPEED)
- Display speed on the next line instead of same line
net/tftp.c | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/net/tftp.c b/net/tftp.c index 59a8ebb..09790eb 100644 --- a/net/tftp.c +++ b/net/tftp.c @@ -40,6 +40,7 @@
static ulong TftpTimeoutMSecs = TIMEOUT; static int TftpTimeoutCountMax = TIMEOUT_COUNT; +static ulong time_start; /* Record time we started tftp */
/*
- These globals govern the timeout behavior when attempting a connection to a
@@ -299,6 +300,12 @@ static void tftp_complete(void) TftpNumchars++; } #endif
- time_start = get_timer(time_start);
- if (time_start > 0) {
puts("\n\t "); /* Line up with "Loading: " */
print_size(NetBootFileXferSize /
time_start * 1000, "/s");
- } puts("\ndone\n"); net_set_state(NETLOOP_SUCCESS);
} @@ -775,6 +782,7 @@ void TftpStart(enum proto_t protocol) TftpState = STATE_SEND_RRQ; }
time_start = get_timer(0); TftpTimeoutCountMax = TftpRRQTimeoutCountMax;
NetSetTimeout(TftpTimeoutMSecs, TftpTimeout);
participants (3)
-
Igor Grinberg
-
Simon Glass
-
Wolfgang Denk