arm-trusted-firmware/plat
Andre Przywara ff4e6c35c9 fdt/wrappers: Replace fdtw_read_cells() implementation
Our fdtw_read_cells() implementation goes to great lengths to
sanity-check every parameter and result, but leaves a big hole open:
The size of the storage the value pointer points at needs to match the
number of cells given. This can't be easily checked at compile time,
since we lose the size information by using a void pointer.
Regardless the current usage of this function is somewhat wrong anyways,
since we use it on single-element, fixed-length properties only, for
which the DT binding specifies the size.
Typically we use those functions dealing with a number of cells in DT
context to deal with *dynamically* sized properties, which depend on
other properties (#size-cells, #clock-cells, ...), to specify the number
of cells needed.

Another problem with the current implementation is the use of
ambiguously sized types (uintptr_t, size_t) together with a certain
expectation about their size. In general there is no relation between
the length of a DT property and the bitness of the code that parses the
DTB: AArch64 code could encounter 32-bit addresses (where the physical
address space is limited to 4GB [1]), while AArch32 code could read
64-bit sized properties (/memory nodes on LPAE systems, [2]).

To make this more clear, fix the potential issues and also align more
with other DT users (Linux and U-Boot), introduce functions to explicitly
read uint32 and uint64 properties. As the other DT consumers, we do this
based on the generic "read array" function.
Convert all users to use either of those two new functions, and make
sure we never use a pointer to anything other than uint32_t or uint64_t
variables directly.

This reveals (and fixes) a bug in plat_spmd_manifest.c, where we write
4 bytes into a uint16_t variable (passed via a void pointer).

Also we change the implementation of the function to better align with
other libfdt users, by using the right types (fdt32_t) and common
variable names (*prop, prop_names).

[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi#n874
[2] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm/boot/dts/ecx-2000.dts

Change-Id: I718de960515117ac7a3331a1b177d2ec224a3890
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
2020-04-29 10:19:17 +01:00
..
allwinner allwinner: H6: Fix GPIO and CCU memory map addresses 2020-03-23 11:04:46 +00:00
amlogic meson: Use generic console_t data structure 2020-02-25 09:34:38 +00:00
arm fdt/wrappers: Replace fdtw_read_cells() implementation 2020-04-29 10:19:17 +01:00
brcm stingray: fix coverity reported issues on brcm platform 2020-04-13 18:43:29 +05:30
common fdt/wrappers: Replace fdtw_read_cells() implementation 2020-04-29 10:19:17 +01:00
hisilicon hikey960: Enable system power off callback 2020-03-02 22:34:21 +08:00
imx Merge "plat: imx: imx8qx: provide debug uart num as build param" into integration 2020-03-31 21:27:39 +00:00
intel/soc Merge "intel: Enable EMAC PHY in Intel FPGA platform" into integration 2020-02-28 10:51:49 +00:00
layerscape LS 16550: Use generic console_t data structure 2020-02-25 09:34:38 +00:00
marvell TF-A GICv3 driver: Introduce makefile 2020-03-30 10:54:01 +00:00
mediatek linker_script: move .data section to bl_common.ld.h 2020-04-25 20:09:08 +09:00
nvidia/tegra Tegra: enable EHF for watchdog timer interrupts 2020-04-01 14:53:24 -07:00
qemu TF-A GICv3 driver: Introduce makefile 2020-03-30 10:54:01 +00:00
renesas/rcar rcar: Use generic console_t data structure 2020-02-25 09:34:38 +00:00
rockchip TF-A GICv3 driver: Introduce makefile 2020-03-30 10:54:01 +00:00
rpi rpi: Implement PSCI CPU_OFF 2020-04-01 15:58:57 +01:00
socionext uniphier: define PLAT_XLAT_TABLES_DYNAMIC only for BL2 2020-04-02 15:16:31 +09:00
st plat/stm32: Use generic fdt_read_uint32_array() implementation 2020-04-28 15:56:31 +01:00
ti/k3 TF-A GICv3 driver: Introduce makefile 2020-03-30 10:54:01 +00:00
xilinx Merge "Create separate header for ARM specific SMCCC defines" into integration 2020-03-31 14:16:40 +00:00