[U-Boot] [PATCH] ARM: UniPhier: remove __packed that causes a problem on GCC 4.9

Tom Rini trini at ti.com
Wed Jan 7 20:00:05 CET 2015


On Wed, Jan 07, 2015 at 07:41:38PM +0900, Masahiro Yamada wrote:
> The DDR PHY training function, ddrphy_prepare_training() would not
> work if compiled with GCC 4.9.
> 
> The struct ddrphy (arch/arm/include/asm/arch-uniphier/ddrphy-regs.h)
> is specified with __packed because it represents a hardware register
> mapping, but it turned out to cause a problem on GCC 4.9.
> 
> If -mno-unaligned-access is specified (actually it is in
> arch/arm/cpu/armv7/config.mk), GCC 4.9 is aware of the
> __attribute__((packed)) and generates extra instructions to perform
> the memory access in a way that does not cause unaligned access.
> (Actually it is bogus here because the register base, the first
> argument of the ddrphy_prepare_training(), is always given with a
> 4-byte aligned address.)
> 
> Anyway, as a result, readl() / writel() is divided into byte-wise
> accesses.  The problem is that this hardware only accepts 4-byte
> register access.  Byte-wise accesses lead to unexpected behavior.
> 
> There are some options to avoid this problem.
> 
> [1] Remove -mno-unaligned-access
> [2] Add __aligned(4) along with __packed to struct ddrphy
> [3] Remove __packed from struct ddrphy
> 
> [1] solves the problem for ARMv7, but it does not for pre-ARMv6 and
> ARMv6-M architectures where -mno-unaligned-access is default.
> So, [1] does not seem reasonable in terms of code portability.
> 
> Both [2] and [3] work well, but [2] seems too much.  All the members
> of struct ddrphy have the u32 type.  No padding would be inserted
> even if __packed is dropped.
> 
> Signed-off-by: Masahiro Yamada <yamada.m at jp.panasonic.com>

I wanted to think about this for a minute.  I argued with myself a bit
about [2] being the best choice, and lost.  I'm fairly sure that
__packed on an struct of all u32 (on a 32bit platform) is in fact the
wrong thing to do so yes, [3] is right.

Reviewed-by: Tom Rini <trini at ti.com>

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150107/01501330/attachment.pgp>


More information about the U-Boot mailing list