]> git.dujemihanovic.xyz Git - u-boot.git/commit
dm: core: Fix allocation of empty of-platdata
authorSimon Glass <sjg@chromium.org>
Mon, 8 Mar 2021 00:34:37 +0000 (17:34 -0700)
committerTom Rini <trini@konsulko.com>
Fri, 12 Mar 2021 14:57:29 +0000 (09:57 -0500)
commit20740e4fbc1678650346468674b7e1a9a911f0b9
tree426f503b95182a79e9ddb6edaaeebbd572ef24f1
parent668866aa24a87244e64be42f296959297ddc5014
dm: core: Fix allocation of empty of-platdata

With of-platdata we always have a dtv struct that holds the platform data
provided by the driver_info record. However, this struct can be empty if
there are no actual devicetree properties provided.

The upshot of empty platform data is that it will end up as a zero-size
member in the BSS section, which is fine. But if the driver specifies
plat_auto then it expects the correct amount of space to be allocated.

At present this does not happen, since device_bind() assumes that the
platform-data size will always be >0. As a result we end up not
allocating the space and just use the BSS region, overwriting whatever
other contents are present.

Fix this by removing the condition that platform data be non-empty, always
allocating space if requested.

This fixes a strange bug that has been lurking since of-platdata was
implemented. It has likely never been noticed since devices normally have
at least some devicetree properties, BSS is seldom used on SPL, the dtv
structs are normally at the end of bss and the overwriting only happens
if a driver changes its platform data.

It was discovered using sandbox_spl, which exercises more features than
a normal board might, and the critical global_data variable 'gd' happened
to be at the end of BSS.

Fixes: 9fa28190091 ("dm: core: Expand platdata for of-platdata devices")
Signed-off-by: Simon Glass <sjg@chromium.org>
drivers/core/device.c