Skip to content
Snippets Groups Projects
  1. Jan 22, 2015
    • Masahiro Yamada's avatar
      ARM: UniPhier: remove __packed that causes a problem on GCC 4.9 · d6bc30af
      Masahiro Yamada authored
      
      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 (yes, 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 not need 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: default avatarMasahiro Yamada <yamada.m@jp.panasonic.com>
      Reviewed-by: default avatarTom Rini <trini@ti.com>
      d6bc30af
  2. Jan 21, 2015
    • Hans de Goede's avatar
      sunxi: Restore lowlevel_init usage · b56f6e2b
      Hans de Goede authored
      
      2 recent sunxi changes have removed the usage of lowlevel_init by moving some
      code around and then setting CONFIG_SKIP_LOWLEVEL_INIT.
      This is problematic for 2 reasons:
      
      1) It does not just stop s_init from being called, it also stops
      cpu_init_cp15 from getting called, which is undesirable.
      
      2) We want u-boot.bin to be usable standalone, without SPL, some people e.g.
      use an upstream u-boot.bin together with Allwinner's boot0 loader. So
      u-boot.bin must (re)initialize the gpios, timer, etc.
      
      This commit restores the lowlevel_init / s_init usage, while keeping the
      changes to no longer use the global-data (gd) struct in the SPL.
      
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      b56f6e2b
  3. Jan 20, 2015
  4. Jan 19, 2015
  5. Jan 18, 2015
Loading