diff mbox

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

Message ID 1324580395-27004-1-git-send-email-marathon96@gmail.com
State Accepted
Headers show

Commit Message

Grant Erickson Dec. 22, 2011, 6:59 p.m. UTC
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(-)

Comments

Wolfgang Denk Jan. 5, 2012, 3:59 p.m. UTC | #1
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
Andreas Bießmann Jan. 23, 2012, 12:23 p.m. UTC | #2
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
Daniel Mack Jan. 23, 2012, 1:30 p.m. UTC | #3
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
Wolfgang Denk Jan. 23, 2012, 2:28 p.m. UTC | #4
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
Mike Frysinger Jan. 23, 2012, 8:40 p.m. UTC | #5
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
diff mbox

Patch

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';