]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
dm: core: Allow manual sequence numbering
authorSimon Glass <sjg@chromium.org>
Thu, 17 Dec 2020 04:20:17 +0000 (21:20 -0700)
committerSimon Glass <sjg@chromium.org>
Sat, 19 Dec 2020 03:32:21 +0000 (20:32 -0700)
Some buses have their own rules which require assigning sequence numbers
with a bus-specific algorithm. For example, PCI requires that sub-buses
are numbered higher than their parent buses, meaning effectively that
parent buses must be numbered only after all of their child buses have
been numbered.

Add a uclass flag to indicate that driver model should not assign sequence
numbers. In this case, the uclass must do it.

Signed-off-by: Simon Glass <sjg@chromium.org>
drivers/core/device.c
include/dm/uclass.h

index 1e681333d35f973ac465758a53f78dca198d2080..d2cf05c8c44bd1b33b4878f7e2290313f599bf01 100644 (file)
@@ -103,7 +103,7 @@ static int device_bind_common(struct udevice *parent, const struct driver *drv,
                        dev->req_seq = uclass_find_next_free_req_seq(uc);
                }
        }
-       if (auto_seq)
+       if (auto_seq && !(uc->uc_drv->flags & DM_UC_FLAG_NO_AUTO_SEQ))
                dev->sqq = uclass_find_next_free_req_seq(uc);
 
        if (drv->plat_auto) {
index 068e8ea8bf7d924cbb9a644be067b5a730692dbc..c4cd58349ed2ae6cfea668e4f57e30f5376cdb70 100644 (file)
@@ -44,6 +44,9 @@ struct udevice;
 /* Members of this uclass sequence themselves with aliases */
 #define DM_UC_FLAG_SEQ_ALIAS                   (1 << 0)
 
+/* Members of this uclass without aliases don't get a sequence number */
+#define DM_UC_FLAG_NO_AUTO_SEQ                 (1 << 1)
+
 /* Same as DM_FLAG_ALLOC_PRIV_DMA */
 #define DM_UC_FLAG_ALLOC_PRIV_DMA              (1 << 5)