u-boot/arch/arm
Stephan Gerhold 548b89f8ad arm: mach-snapdragon: pinctrl: Place pin_name in .data section
According to arch/arm/lib/crt0_64.S, the BSS section is "UNAVAILABLE"
and uninitialized before relocation. Also, it overlaps with the
appended DTB before relocation, so writing data into a variable
in the BSS section might corrupt the appended DTB.

Unfortunately, pinctrl-apq8016.c and pinctrl-apq8096.c do place the
"pin_name" variable in the BSS section (since it's uninitialized).
It's also used before relocation, when setting up the pinctrl for
the serial driver.

On DB410c this causes "GPIO_5" to be written into some part of an
appended DTB, e.g.:

80111820: edfe0dd0 9f100000 38000000 c00e0000    ...........8....
80111830: 28000000 11000000 10000000 00000000    ...(............
80111840: 4f495047 8800355f 00000000 00000000    GPIO_5..........
80111850: 00000000 00000000 01000000 00000000    ................
80111860: 03000000 04000000 00000000 02000000    ................
80111870: 03000000 04000000 0f000000 02000000    ................
80111880: 03000000 2d000000 1b000000 6c617551    .......-....Qual
80111890: 6d6d6f63 63655420 6c6f6e68 6569676f    comm Technologie

Depending on the part of the DTB that is corrupted this might not
cause any problems, but it can also result in strange reboots
without any serial output.

Fortunately, in practice this does not cause issues on DB410c yet
because board_fdt_blob_setup() in dragonboard410c.c currently
overrides the appended DTB with the one passed by the previous
bootloader (LK) (which does not get corrupted).

DB820c does not have board_fdt_blob_setup() so I would expect it to
be affected by this problem. Perhaps everyone was just fortunate to
not compile an U-Boot configuration where the pin_name corrupts an
important part of the DTB.

Make sure "pin_name" is explicitly placed in the .data section
instead of .bss to fix this.

Cc: Ramon Fried <rfried.dev@gmail.com>
Signed-off-by: Stephan Gerhold <stephan@gerhold.net>
Reviewed-by: Ramon Fried <rfried.dev@gmail.com>
2021-07-14 16:48:01 -04:00
..
cpu arm: armv8: Fix warning about redeclaring global functions as weak 2021-07-09 12:15:41 -04:00
dts sunxi: h3: Add initial ZeroPi support 2021-07-10 01:22:09 +01:00
include mmc: sunxi: Increase MMIO FIFO read performance 2021-07-10 01:22:09 +01:00
lib arm: bootm: Disable LMB reservation for command line and board info on arm64 2021-07-09 12:15:41 -04:00
mach-aspeed common: Drop asm/global_data.h from common header 2021-02-02 15:33:42 -05:00
mach-at91 arm: Remove at91rm9200ek boards 2021-07-07 22:22:42 -04:00
mach-bcm283x reset: Remove addr parameter from reset_cpu() 2021-03-02 14:03:02 -05:00
mach-bcmstb
mach-cortina
mach-davinci reset: Remove addr parameter from reset_cpu() 2021-03-02 14:03:02 -05:00
mach-exynos ARM: make gd a function call for LTO and set via set_gd() 2021-05-24 14:21:30 -04:00
mach-highbank
mach-imx mx7d: Add Storopack's SMEGW01 board 2021-06-09 13:34:38 +02:00
mach-integrator
mach-ipq40xx
mach-k3 arm: mach-k3: j721e_init: Force early probe of clk-k3 driver 2021-06-11 16:34:52 +05:30
mach-keystone common: fit: Update board_fit_image_post_process() to pass fit and node_offset 2021-06-11 16:34:52 +05:30
mach-kirkwood Revert "arm: Remove nsa310s board" 2021-07-07 22:55:41 -04:00
mach-lpc32xx arm: lpc32xx: add EA LPC3250 DevKitv2 board support 2021-07-06 14:12:14 -04:00
mach-mediatek board: mt7629: enable compression of u-boot to reduce the size of final image 2021-03-20 16:24:27 -04:00
mach-meson arm: meson: remove static ethernet link setup 2021-04-06 11:10:29 +02:00
mach-mvebu arm: a37xx: pci: Fix a3700_fdt_fix_pcie_regions() function 2021-06-04 11:32:41 +02:00
mach-nexell treewide: Convert macro and uses of __section(foo) to __section("foo") 2021-05-24 14:21:30 -04:00
mach-octeontx reset: Remove addr parameter from reset_cpu() 2021-03-02 14:03:02 -05:00
mach-octeontx2 reset: Remove addr parameter from reset_cpu() 2021-03-02 14:03:02 -05:00
mach-omap2 ARM: omap3: fix LTO for DM3730 (and possibly other omap3 boards) 2021-05-24 14:21:30 -04:00
mach-orion5x reset: Remove addr parameter from reset_cpu() 2021-03-02 14:03:02 -05:00
mach-owl reset: Remove addr parameter from reset_cpu() 2021-03-02 14:03:02 -05:00
mach-qemu
mach-rmobile Merge branch 'next' of https://source.denx.de/u-boot/custodians/u-boot-sh into next 2021-06-28 18:32:07 -04:00
mach-rockchip board: rockchip: Add rk3568 evb support 2021-06-18 14:36:24 +08:00
mach-s5pc1xx
mach-snapdragon arm: mach-snapdragon: pinctrl: Place pin_name in .data section 2021-07-14 16:48:01 -04:00
mach-socfpga common: fit: Update board_fit_image_post_process() to pass fit and node_offset 2021-06-11 16:34:52 +05:30
mach-sti
mach-stm32 board: Add rt-thread art-pi board support 2021-04-09 11:53:00 +02:00
mach-stm32mp stm32mp: stm32prog: handle dfu error 2021-06-18 10:09:41 +02:00
mach-sunxi mmc: sunxi: Enable "new timing mode" on all new SoCs 2021-07-10 01:22:09 +01:00
mach-tegra ARM: fix LTO for seaboard 2021-05-24 14:21:30 -04:00
mach-u8500
mach-uniphier reset: Remove addr parameter from reset_cpu() 2021-03-02 14:03:02 -05:00
mach-versal arm64: versal: Remove gd reference 2021-04-23 08:49:19 +02:00
mach-versatile
mach-zynq reset: Remove addr parameter from reset_cpu() 2021-03-02 14:03:02 -05:00
mach-zynqmp arm64: zynqmp: Add support for 64bit addresses in its 2021-06-23 09:48:35 +02:00
mach-zynqmp-r5 reset: Remove addr parameter from reset_cpu() 2021-03-02 14:03:02 -05:00
thumb1/include/asm/proc-armv
config.mk ARM: don't use --gc-sections with LTO when using private libgcc 2021-05-24 14:21:30 -04:00
Kconfig arm: Remove spear600 boards and the rest of SPEAr support 2021-07-07 22:22:42 -04:00
Kconfig.debug
Makefile