summaryrefslogtreecommitdiffstats
path: root/include/dm
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2020-10-03 11:31:41 -0600
committerSimon Glass <sjg@chromium.org>2020-10-29 14:42:59 -0600
commitcb43ac184f71f0ba696d0effcd39a746a6f3a456 (patch)
treed5b5f9b1eaa240b004ac1fd77ddc1bfe5323d1e1 /include/dm
parent4e28a259fd3a2025f42ad005b375aea2912c81de (diff)
downloadu-boot-cb43ac184f71f0ba696d0effcd39a746a6f3a456.tar.gz
u-boot-cb43ac184f71f0ba696d0effcd39a746a6f3a456.tar.xz
u-boot-cb43ac184f71f0ba696d0effcd39a746a6f3a456.zip
dm: Don't allow U_BOOT_DEVICE() when of-platdata is used
With of-platdata, the devicetree is supposed to specify all the devices in the system. So far this hasn't really mattered since of-platdata still works correctly. However, new of-platdata features rely on numbering the devices in a particular order so that they can be referenced by a single integer. It is tricky to implement this efficiently when other devices are present in the build. To address this, disable use of U_BOOT_DEVICE() when of-platdata is enabled. This seems acceptable as it is not supposed to be used at all, except in SPL/TPL, where of-platdata is the recommended approach. This breaks one non-compliant boards at present: mx6cuboxi Signed-off-by: Simon Glass <sjg@chromium.org> (disable CONFIG_IMX_THERMAL for mx6cuboxi to avoid a build error)
Diffstat (limited to 'include/dm')
-rw-r--r--include/dm/platdata.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/include/dm/platdata.h b/include/dm/platdata.h
index f800a866dd..216efa8ef7 100644
--- a/include/dm/platdata.h
+++ b/include/dm/platdata.h
@@ -55,9 +55,17 @@ struct driver_rt {
* NOTE: Avoid using these except in extreme circumstances, where device tree
* is not feasible (e.g. serial driver in SPL where <8KB of SRAM is
* available). U-Boot's driver model uses device tree for configuration.
+ *
+ * When of-platdata is in use, U_BOOT_DEVICE() cannot be used outside of the
+ * dt-platdata.c file created by dtoc
*/
+#if CONFIG_IS_ENABLED(OF_PLATDATA) && !defined(DT_PLATDATA_C)
+#define U_BOOT_DEVICE(__name) _Static_assert(false, \
+ "Cannot use U_BOOT_DEVICE with of-platdata. Please use devicetree instead")
+#else
#define U_BOOT_DEVICE(__name) \
ll_entry_declare(struct driver_info, __name, driver_info)
+#endif
/* Declare a list of devices. The argument is a driver_info[] array */
#define U_BOOT_DEVICES(__name) \