[U-Boot] data alignment problem with redundant env

Hi,
moving to latest U-Boot introduces some issues with the environment.
Setup: - PowerPC based boards (52xx / 83xx) - Environments are in flash with redundancy
Dumping flash the environments with dd and using hexdump shows :
- crc32 - flags Data (first entry beginning with 'a'). 0000000: b0ea 7858 0100 64... 0000010: ...
Regarding to include/environment.h data is "unsigned char" as well as data[]. To me it looks like 2-byte wide flags (or 16-bit alignment of data) is wrong.
Although env modification within u-boot only is safe it breakother tools modifying the environment within e.g. Linux.
This happened somewhere between v2010.9 and current master. Back then U-Boot env data started on byte 5.
Do we need an attribute(packed) on the env struct ?
Any help is welcome.
Regards, André
MATRIX VISION GmbH, Talstrasse 16, DE-71570 Oppenweiler Registergericht: Amtsgericht Stuttgart, HRB 271090 Geschaeftsfuehrer: Gerhard Thullner, Werner Armingeon, Uwe Furtner

Dear Andre Schwarz,
In message 4D949E22.5090000@matrix-vision.de you wrote:
moving to latest U-Boot introduces some issues with the environment.
Which board would that be? I don't see this on any board I tested.
Best regards,
Wolfgang Denk

Wolfgang,
Dear Andre Schwarz,
In message4D949E22.5090000@matrix-vision.de you wrote:
moving to latest U-Boot introduces some issues with the environment.
Which board would that be? I don't see this on any board I tested.
it is mvblm7 (=MPC8343) and a new MPC8377 based one waiting for the merge window to open.
I'm using a gcc-4.3.3 from OpenEmbedded/Angstrom ... if this matters at all.
Regards, André
MATRIX VISION GmbH, Talstrasse 16, DE-71570 Oppenweiler Registergericht: Amtsgericht Stuttgart, HRB 271090 Geschaeftsfuehrer: Gerhard Thullner, Werner Armingeon, Uwe Furtner

Dear Andre Schwarz,
In message 4D94A250.907@matrix-vision.de you wrote:
Which board would that be? I don't see this on any board I tested.
it is mvblm7 (=MPC8343) and a new MPC8377 based one waiting for the merge window to open.
I'm using a gcc-4.3.3 from OpenEmbedded/Angstrom ... if this matters at all.
Can you please try and use anothe rtool chain, say good ole ELDK 4.2 for a test?
Best regards,
Wolfgang Denk

Wolfgang,
Which board would that be? I don't see this on any board I tested.
it is mvblm7 (=MPC8343) and a new MPC8377 based one waiting for the merge window to open.
I'm using a gcc-4.3.3 from OpenEmbedded/Angstrom ... if this matters at all.
Can you please try and use anothe rtool chain, say good ole ELDK 4.2 for a test?
yes, of course. But I can make some tests on real hardware not before monday.
This is what I can say after compiling with both toolchains.
1. redundant env
CROSS_COMPILE=ppc_6xx- ARCH=powerpc sh MAKEALL mvblm7 text data bss dec hex filename 233298 21940 66960 322198 4ea96 ./u-boot
CROSS_COMPILE=powerpc-angstrom-linux- ARCH=powerpc sh MAKEALL mvblm7 text data bss dec hex filename 233758 21948 66956 322662 4ec66 ./u-boot
2. without redundant env
swa@swa-m460:~/u-boot$ CROSS_COMPILE=ppc_6xx- ARCH=powerpc sh MAKEALL mvblm7 text data bss dec hex filename 232494 21912 66960 321366 4e756 ./u-boot
swa@swa-m460:~/u-boot$ CROSS_COMPILE=powerpc-angstrom-linux- ARCH=powerpc sh MAKEALL mvblm7 text data bss dec hex filename 232954 21920 66956 321830 4e926 ./u-boot
size of final u-boot binary differs by 8 bytes ... sounds promising ;-)
Will run both versions asap.
Regards, André
MATRIX VISION GmbH, Talstrasse 16, DE-71570 Oppenweiler Registergericht: Amtsgericht Stuttgart, HRB 271090 Geschaeftsfuehrer: Gerhard Thullner, Werner Armingeon, Uwe Furtner

Wolfgang,
Which board would that be? I don't see this on any board I tested.
it is mvblm7 (=MPC8343) and a new MPC8377 based one waiting for the merge window to open.
I'm using a gcc-4.3.3 from OpenEmbedded/Angstrom ... if this matters at all.
Can you please try and use anothe rtool chain, say good ole ELDK 4.2 for a test?
ok - that's it.
Compiling with ELDK 4.2 gives an environment as expected.
4 bytes crc32 + 1 byte redundancy flags + data :
mvBL-M7> md ff800000 10 ff800000: 56900c81 01626175 64726174 653d3131 V....baudrate=11 ff800010: 35323030 00626f6f 74617267 733d726f 5200.bootargs=ro
Using OpenEmbedded's (Angstrom) gcc 4.3.3 produces a corrupted layout with data having a 16-Bit alignment leading to a 1 byte offset when redundancy is used.
Will stick to ELDK 4.2 for U-Boot.
Problem solved, but I'm still irritated how easily things can be broken nowadays ...
Regards, André
MATRIX VISION GmbH, Talstrasse 16, DE-71570 Oppenweiler Registergericht: Amtsgericht Stuttgart, HRB 271090 Geschaeftsfuehrer: Gerhard Thullner, Werner Armingeon, Uwe Furtner
participants (2)
-
Andre Schwarz
-
Wolfgang Denk