Hi Rob and all, >>> >>> Am Dienstag, den 05.06.2012, 12:42 -0600 schrieb Stephen Warren: >>>> On 06/05/2012 11:47 AM, Lucas Stach wrote: >>>>> Recent toolchains default to using the hardware feature for >>>>> unaligned access on ARM v7, rather than doing the software >>>>> fallback. According to ARM this is safe as all v7 implementations >>>>> have to support this feature. >>>>> (http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0471c/BABJFFAE.html) >>>>> >>>>> To avoid CPU hangs when doing unaligned memory access, we have to >>>>> turn off alignment checking in our CPU initialisation code. >>>>> (http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0491c/CIHCGCFD.html) >>>> >>>> Does this behavior change trickle down to Linux/... too, or would >>>> an OS completely re-initialize this state, and hence not be >>>> affected? >>>> >>> >>> Linux in particular does reinitialize this state and I expect any >>> reasonable OS to do so. >> >> Then what is the point of enabling it on U-Boot? Does it fix some issue >> whereby some mis-aligned piece of data cannot be properly aligned? >> > > This is a new optimization feature in gcc 4.7 (and backported to some > 4.6 versions like the ubuntu 12.04 arm cross compiler (4.6.3)): > > http://lists.linaro.org/pipermail/linaro-dev/2012-June/012360.html > > http://seabright.co.nz/2012/06/11/kernel-not-booting-with-linaro-gcc/ > > If you don't want to enable unaligned accesses, then > "-mno-unaligned-access" needs to be added. >
I verified it. Option "-mno-unaligned-access" works good. include/mtd/cfi_flash.h /* CFI standard query structure */ struct cfi_qry { u8 qry[3]; u16 p_id; <-- unaligned! ... } __attribute__((packed)); $ ${CROSS_COMPILE}gcc --version arm-none-eabi-gcc (GNU Tools for ARM Embedded Processors) 4.6.2 20110921 (release) [ARM/embedded-4_6-branch revision 182083] Copyright (C) 2011 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ===================================================================== Compiled without --mno-unaligned-access $ ${CROSS_COMPILE}objdump -d -S u-boot info->vendor = le16_to_cpu(qry.p_id); cc88: e3003a1c movw r3, #2588 ; 0xa1c cc8c: e1dd11bb ldrh r1, [sp, #27] <-- this is unaligned access cc90: ... cc94: e18410b3 strh r1, [r4, r3] ===================================================================== Compiled with --mno-unaligned-access $ ${CROSS_COMPILE}objdump -d -S u-boot info->vendor = le16_to_cpu(qry.p_id); cce8: e5dd101c ldrb r1, [sp, #28] <-- ccec: e5dd301b ldrb r3, [sp, #27] <-- separated 2 byte accesses ccf0: ... ccf4: e1831401 orr r1, r3, r1, lsl #8 ccf8: e3003a1c movw r3, #2588 ; 0xa1c ccfc: e18410b3 strh r1, [r4, r3] _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot