[U-Boot] [PATCH] tools/env: allow overwrite of ethaddr on default

This patch allows the U-Boot user space companion utility, fw_setenv, to overwrite the 'ethaddr' key/value pair if the current value is set to a per-board-configured default.
This change allows 'fw_setenv' to match the behavior of 'setenv' / 'env set' on the U-Boot command line.
Signed-off-by: Grant Erickson marathon96@gmail.com --- tools/env/fw_env.c | 14 ++++++++++++-- 1 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c index 996682e..2185be9 100644 --- a/tools/env/fw_env.c +++ b/tools/env/fw_env.c @@ -45,6 +45,8 @@
#include "fw_env.h"
+#include <config.h> + #define WHITESPACE(c) ((c == '\t') || (c == ' '))
#define min(x, y) ({ \ @@ -390,15 +392,23 @@ int fw_env_write(char *name, char *value) * Delete any existing definition */ if (oldval) { +#ifndef CONFIG_ENV_OVERWRITE + /* * Ethernet Address and serial# can be set only once */ - if ((strcmp (name, "ethaddr") == 0) || - (strcmp (name, "serial#") == 0)) { + if ( + (strcmp(name, "serial#") == 0) || + ((strcmp(name, "ethaddr") == 0) +#if defined(CONFIG_OVERWRITE_ETHADDR_ONCE) && defined(CONFIG_ETHADDR) + && (strcmp(oldval, MK_STR(CONFIG_ETHADDR)) != 0) +#endif /* CONFIG_OVERWRITE_ETHADDR_ONCE && CONFIG_ETHADDR */ + ) ) { fprintf (stderr, "Can't overwrite "%s"\n", name); errno = EROFS; return -1; } +#endif /* CONFIG_ENV_OVERWRITE */
if (*++nxt == '\0') { *env = '\0';

Dear Grant Erickson,
In message 1324580395-27004-1-git-send-email-marathon96@gmail.com you wrote:
This patch allows the U-Boot user space companion utility, fw_setenv, to overwrite the 'ethaddr' key/value pair if the current value is set to a per-board-configured default.
This change allows 'fw_setenv' to match the behavior of 'setenv' / 'env set' on the U-Boot command line.
Signed-off-by: Grant Erickson marathon96@gmail.com
tools/env/fw_env.c | 14 ++++++++++++-- 1 files changed, 12 insertions(+), 2 deletions(-)
Applied, thanks.
Best regards,
Wolfgang Denk

Dear Wolfgang,
On 05.01.2012 16:59, Wolfgang Denk wrote:
Dear Grant Erickson,
In message 1324580395-27004-1-git-send-email-marathon96@gmail.com you wrote:
This patch allows the U-Boot user space companion utility, fw_setenv, to overwrite the 'ethaddr' key/value pair if the current value is set to a per-board-configured default.
This change allows 'fw_setenv' to match the behavior of 'setenv' / 'env set' on the U-Boot command line.
Signed-off-by: Grant Erickson marathon96@gmail.com
tools/env/fw_env.c | 14 ++++++++++++-- 1 files changed, 12 insertions(+), 2 deletions(-)
Applied, thanks.
This patch breaks building 'env' without board configuration. This is bad cause our automatic build environment build this tool for different boards. Specific configuration is done via /etc/fw_env.config. Can't we use some build-time configuration like http://patchwork.ozlabs.org/patch/120372/ ?
best regards
Andreas Bießmann

Hello,
i recently stumbled upon a compile-error which appears after trying to compile via
/./MAKEALL --arch arm --cpu pxa --vendor toradex/
, it appears U-Boot uses software-FP whereas the native XScale-libs use hardware-FP, see for yourself please :
/[dmack@Blizzard ~/workspace/u-boot]$ ./MAKEALL --arch arm --cpu pxa --vendor toradex/
/Configuring for colibri_pxa270 board.../
/arm-linux-ld: ERROR: /usr/lib/gcc/arm-xscale-linux-gnu/3.4.6/libgcc.a(_udivsi3.oS) uses hardware FP, whereas u-boot uses software FP/
/arm-linux-ld: failed to merge target specific data of file /usr/lib/gcc/arm-xscale-linux-gnu/3.4.6/libgcc.a(_udivsi3.oS)/
/arm-linux-ld: ERROR: /usr/lib/gcc/arm-xscale-linux-gnu/3.4.6/libgcc.a(_divsi3.oS) uses hardware FP, whereas u-boot uses software FP/
/arm-linux-ld: failed to merge target specific data of file /usr/lib/gcc/arm-xscale-linux-gnu/3.4.6/libgcc.a(_divsi3.oS)/
/arm-linux-ld: ERROR: /usr/lib/gcc/arm-xscale-linux-gnu/3.4.6/libgcc.a(_umodsi3.oS) uses hardware FP, whereas u-boot uses software FP/
/arm-linux-ld: failed to merge target specific data of file /usr/lib/gcc/arm-xscale-linux-gnu/3.4.6/libgcc.a(_umodsi3.oS)/
/arm-linux-ld: ERROR: /usr/lib/gcc/arm-xscale-linux-gnu/3.4.6/libgcc.a(_modsi3.oS) uses hardware FP, whereas u-boot uses software FP/
/arm-linux-ld: failed to merge target specific data of file /usr/lib/gcc/arm-xscale-linux-gnu/3.4.6/libgcc.a(_modsi3.oS)/
/arm-linux-ld: ERROR: /usr/lib/gcc/arm-xscale-linux-gnu/3.4.6/libgcc.a(_dvmd_lnx.oS) uses hardware FP, whereas u-boot uses software FP/
/arm-linux-ld: failed to merge target specific data of file /usr/lib/gcc/arm-xscale-linux-gnu/3.4.6/libgcc.a(_dvmd_lnx.oS)/
/arm-linux-ld: ERROR: /usr/lib/gcc/arm-xscale-linux-gnu/3.4.6/libgcc.a(_lshrdi3.oS) uses hardware FP, whereas u-boot uses software FP/
/arm-linux-ld: failed to merge target specific data of file /usr/lib/gcc/arm-xscale-linux-gnu/3.4.6/libgcc.a(_lshrdi3.oS)/
/arm-linux-ld: ERROR: /usr/lib/gcc/arm-xscale-linux-gnu/3.4.6/libgcc.a(_ashldi3.oS) uses hardware FP, whereas u-boot uses software FP/
/arm-linux-ld: failed to merge target specific data of file /usr/lib/gcc/arm-xscale-linux-gnu/3.4.6/libgcc.a(_ashldi3.oS)/
/arm-linux-ld: ERROR: /usr/lib/gcc/arm-xscale-linux-gnu/3.4.6/libgcc.a(_udivdi3.oS) uses hardware FP, whereas u-boot uses software FP/
/arm-linux-ld: failed to merge target specific data of file /usr/lib/gcc/arm-xscale-linux-gnu/3.4.6/libgcc.a(_udivdi3.oS)/
/arm-linux-ld: ERROR: /usr/lib/gcc/arm-xscale-linux-gnu/3.4.6/libgcc.a(_clz.oS) uses hardware FP, whereas u-boot uses software FP/
/arm-linux-ld: failed to merge target specific data of file /usr/lib/gcc/arm-xscale-linux-gnu/3.4.6/libgcc.a(_clz.oS)/
/make: *** [u-boot] Fehler 1/
/size: './u-boot': No such file/
/--------------------- SUMMARY ----------------------------/
/Boards compiled: 1/
/Boards with warnings or errors: 1 ( colibri_pxa270 )/
/----------------------------------------------------------/
Is there a solution for this, am i missing something?
Best regards,
Daniel

Dear Daniel Mack,
In message 4F1D60E8.4030609@lertes.de you wrote:
i recently stumbled upon a compile-error which appears after trying to compile via
/./MAKEALL --arch arm --cpu pxa --vendor toradex/
, it appears U-Boot uses software-FP whereas the native XScale-libs use hardware-FP, see for yourself please :
This is a tool chain problem. You should get one that supports soft-FP, especially on processors that don;t have a FPU in the first place.
/arm-linux-ld: ERROR: /usr/lib/gcc/arm-xscale-linux-gnu/3.4.6/libgcc.a(_udivsi3.oS) uses hardware FP, whereas u-boot uses software FP/
GCC 3.4 has always been (in)famous for causing issues, especially on ARM. And it is so old that you can consider it unsupported.
Is there a solution for this, am i missing something?
I guess you did not bother to check the mailing list archives? You should.
Best regards,
Wolfgang Denk

On Monday 23 January 2012 07:23:09 Andreas Bießmann wrote:
On 05.01.2012 16:59, Wolfgang Denk wrote:
Grant Erickson wrote:
This patch allows the U-Boot user space companion utility, fw_setenv, to overwrite the 'ethaddr' key/value pair if the current value is set to a per-board-configured default.
This change allows 'fw_setenv' to match the behavior of 'setenv' / 'env set' on the U-Boot command line.
Signed-off-by: Grant Erickson marathon96@gmail.com
tools/env/fw_env.c | 14 ++++++++++++-- 1 files changed, 12 insertions(+), 2 deletions(-)
Applied, thanks.
This patch breaks building 'env' without board configuration. This is bad cause our automatic build environment build this tool for different boards. Specific configuration is done via /etc/fw_env.config. Can't we use some build-time configuration like http://patchwork.ozlabs.org/patch/120372/ ?
update your patch to take the new code into account. you're going to have to rebase anyways to get it merged. -mike
participants (5)
-
Andreas Bießmann
-
Daniel Mack
-
Grant Erickson
-
Mike Frysinger
-
Wolfgang Denk