[RFC PATCH 06/15] dm: Embed struct uclass_member in struct udevice
Simon Glass
sjg at chromium.org
Thu Mar 19 22:35:36 CET 2026
Replace the individual uclass-membership fields in struct udevice
(uclass_, uclass_priv_, uclass_plat_, uclass_node, seq_) with an
embedded struct uclass_member. This groups the uclass-membership state
into a single struct that can also (later) be allocated independently
for adjunct uclass-registrations.
Update the affected accessors and the dtoc tool.
Signed-off-by: Simon Glass <sjg at chromium.org>
---
arch/arm/mach-rockchip/board.c | 2 +-
board/nuvoton/poleg_evb/poleg_evb.c | 4 +-
board/theobroma-systems/common/common.c | 4 +-
cmd/rng.c | 2 +-
drivers/core/device-remove.c | 4 +-
drivers/core/device.c | 44 ++++-----
drivers/core/dump.c | 6 +-
drivers/core/read.c | 2 +-
drivers/core/uclass.c | 46 +++++-----
drivers/i2c/ast2600_i2c.c | 2 +-
drivers/i2c/npcm_i2c.c | 2 +-
drivers/pci/pcie_mediatek_gen3.c | 4 +-
drivers/serial/serial_s5p4418_pl011.c | 2 +-
include/dm/device.h | 23 +----
include/dm/uclass.h | 6 +-
test/dm/bus.c | 12 +--
test/dm/core.c | 8 +-
test/dm/test-uclass.c | 8 +-
tools/dtoc/dtb_platdata.py | 33 +++----
tools/dtoc/test_dtoc.py | 114 +++++++++++++-----------
20 files changed, 165 insertions(+), 163 deletions(-)
diff --git a/arch/arm/mach-rockchip/board.c b/arch/arm/mach-rockchip/board.c
index 2e6bb38b923..6df816d3fb0 100644
--- a/arch/arm/mach-rockchip/board.c
+++ b/arch/arm/mach-rockchip/board.c
@@ -531,7 +531,7 @@ int mmc_get_env_dev(void)
return devnum;
}
- devnum = dev->seq_;
+ devnum = dev_seq(dev);
debug("%s: get MMC env from mmc%d\n", __func__, devnum);
return devnum;
}
diff --git a/board/nuvoton/poleg_evb/poleg_evb.c b/board/nuvoton/poleg_evb/poleg_evb.c
index 9dfe9744363..bed755f3053 100644
--- a/board/nuvoton/poleg_evb/poleg_evb.c
+++ b/board/nuvoton/poleg_evb/poleg_evb.c
@@ -55,14 +55,14 @@ static int last_stage_init(void)
env_set("mem", value);
}
- if (dev && (dev->seq_ >= 0)) {
+ if (dev && (dev_seq(dev) >= 0)) {
void *addr;
addr = dev_read_addr_ptr(dev);
if (addr) {
sprintf(value, "uart8250,mmio32,0x%x", (u32)addr);
env_set("earlycon", value);
}
- sprintf(value, "ttyS%d,115200n8", dev->seq_);
+ sprintf(value, "ttyS%d,115200n8", dev_seq(dev));
env_set("console", value);
#ifdef CONFIG_SYS_SKIP_UART_INIT
return board_set_console();
diff --git a/board/theobroma-systems/common/common.c b/board/theobroma-systems/common/common.c
index 585da438845..5db8d439e34 100644
--- a/board/theobroma-systems/common/common.c
+++ b/board/theobroma-systems/common/common.c
@@ -78,8 +78,8 @@ int setup_boottargets(void)
* If mmc1 comes first in the boot order and U-Boot proper was
* loaded from mmc0, swap mmc0 and mmc1 in the list.
*/
- if ((mmc0 < mmc1 && devp->seq_ == 1) ||
- (mmc0 > mmc1 && devp->seq_ == 0)) {
+ if ((mmc0 < mmc1 && dev_seq(devp) == 1) ||
+ (mmc0 > mmc1 && dev_seq(devp) == 0)) {
mmc0[3] = '1';
mmc1[3] = '0';
debug("%s: set boot_targets to: %s\n", __func__, env);
diff --git a/cmd/rng.c b/cmd/rng.c
index 4d91094a8ec..a752f704096 100644
--- a/cmd/rng.c
+++ b/cmd/rng.c
@@ -23,7 +23,7 @@ static int do_rng(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
uclass_foreach_dev_probe(UCLASS_RNG, dev) {
idx++;
- printf("RNG #%d - %s\n", dev->seq_, dev->name);
+ printf("RNG #%d - %s\n", dev_seq(dev), dev->name);
}
if (!idx) {
diff --git a/drivers/core/device-remove.c b/drivers/core/device-remove.c
index b532855621d..2a3253b34a5 100644
--- a/drivers/core/device-remove.c
+++ b/drivers/core/device-remove.c
@@ -137,7 +137,7 @@ void device_free(struct udevice *dev)
free(dev_get_priv(dev));
dev_set_priv(dev, NULL);
}
- size = dev->uclass_->uc_drv->per_device_auto;
+ size = dev->ucm.uc->uc_drv->per_device_auto;
if (size) {
free(dev_get_uclass_priv(dev));
dev_set_uclass_priv(dev, NULL);
@@ -145,7 +145,7 @@ void device_free(struct udevice *dev)
if (dev->parent) {
size = dev->parent->driver->per_child_auto;
if (!size)
- size = dev->parent->uclass_->uc_drv->per_child_auto;
+ size = dev->parent->ucm.uc->uc_drv->per_child_auto;
if (size) {
free(dev_get_parent_priv(dev));
dev_set_parent_priv(dev, NULL);
diff --git a/drivers/core/device.c b/drivers/core/device.c
index fe4b23b141b..f90c436e0a9 100644
--- a/drivers/core/device.c
+++ b/drivers/core/device.c
@@ -42,6 +42,7 @@ static int device_bind_common(struct udevice *parent, const struct driver *drv,
ulong driver_data, ofnode node,
uint of_plat_size, struct udevice **devp)
{
+ struct uclass_member *ucm;
struct udevice *dev;
struct uclass *uc;
int size, ret = 0;
@@ -66,9 +67,10 @@ static int device_bind_common(struct udevice *parent, const struct driver *drv,
if (!dev)
return -ENOMEM;
+ ucm = &dev->ucm;
INIT_LIST_HEAD(&dev->sibling_node);
INIT_LIST_HEAD(&dev->child_head);
- INIT_LIST_HEAD(&dev->uclass_node);
+ INIT_LIST_HEAD(&ucm->uc_node);
#if CONFIG_IS_ENABLED(DEVRES)
INIT_LIST_HEAD(&dev->devres_head);
#endif
@@ -78,9 +80,9 @@ static int device_bind_common(struct udevice *parent, const struct driver *drv,
dev_set_ofnode(dev, node);
dev->parent = parent;
dev->driver = drv;
- dev->uclass_ = uc;
+ ucm->uc = uc;
- dev->seq_ = -1;
+ ucm->seq = -1;
if (CONFIG_IS_ENABLED(DM_SEQ_ALIAS) &&
(uc->uc_drv->flags & DM_UC_FLAG_SEQ_ALIAS)) {
/*
@@ -90,15 +92,15 @@ static int device_bind_common(struct udevice *parent, const struct driver *drv,
if (CONFIG_IS_ENABLED(OF_CONTROL) &&
!CONFIG_IS_ENABLED(OF_PLATDATA)) {
if (uc->uc_drv->name && ofnode_valid(node)) {
- if (!dev_read_alias_seq(dev, &dev->seq_)) {
+ if (!dev_read_alias_seq(dev, &ucm->seq)) {
auto_seq = false;
- log_debug(" - seq=%d\n", dev->seq_);
+ log_debug(" - seq=%d\n", ucm->seq);
}
}
}
}
if (auto_seq && !(uc->uc_drv->flags & DM_UC_FLAG_NO_AUTO_SEQ))
- dev->seq_ = uclass_find_next_free_seq(uc);
+ ucm->seq = uclass_find_next_free_seq(uc);
/* Check if we need to allocate plat */
if (drv->plat_auto) {
@@ -146,7 +148,7 @@ static int device_bind_common(struct udevice *parent, const struct driver *drv,
if (parent) {
size = parent->driver->per_child_plat_auto;
if (!size)
- size = parent->uclass_->uc_drv->per_child_plat_auto;
+ size = parent->ucm.uc->uc_drv->per_child_plat_auto;
if (size) {
dev_or_flags(dev, DM_FLAG_ALLOC_PARENT_PDATA);
ptr = calloc(1, size);
@@ -362,9 +364,9 @@ static int device_alloc_priv(struct udevice *dev)
}
/* Allocate private data if requested and not reentered */
- size = dev->uclass_->uc_drv->per_device_auto;
+ size = dev->ucm.uc->uc_drv->per_device_auto;
if (size && !dev_get_uclass_priv(dev)) {
- ptr = alloc_priv(size, dev->uclass_->uc_drv->flags);
+ ptr = alloc_priv(size, dev->ucm.uc->uc_drv->flags);
if (!ptr)
return -ENOMEM;
dev_set_uclass_priv(dev, ptr);
@@ -374,7 +376,7 @@ static int device_alloc_priv(struct udevice *dev)
if (dev->parent) {
size = dev->parent->driver->per_child_auto;
if (!size)
- size = dev->parent->uclass_->uc_drv->per_child_auto;
+ size = dev->parent->ucm.uc->uc_drv->per_child_auto;
if (size && !dev_get_parent_priv(dev)) {
ptr = alloc_priv(size, drv->flags);
if (!ptr)
@@ -643,7 +645,7 @@ void *dev_get_uclass_plat(const struct udevice *dev)
return NULL;
}
- return dm_priv_to_rw(dev->uclass_plat_);
+ return dm_priv_to_rw(dev->ucm.uc_plat);
}
void *dev_get_priv(const struct udevice *dev)
@@ -664,7 +666,7 @@ notrace void *dev_get_uclass_priv(const struct udevice *dev)
return NULL;
}
- return dm_priv_to_rw(dev->uclass_priv_);
+ return dm_priv_to_rw(dev->ucm.uc_priv);
}
void *dev_get_parent_priv(const struct udevice *dev)
@@ -700,7 +702,7 @@ void *dev_get_attach_ptr(const struct udevice *dev, enum dm_tag_t tag)
int dev_get_attach_size(const struct udevice *dev, enum dm_tag_t tag)
{
const struct udevice *parent = dev_get_parent(dev);
- const struct uclass *uc = dev->uclass_;
+ const struct uclass *uc = dev->ucm.uc;
const struct uclass_driver *uc_drv = uc->uc_drv;
const struct driver *parent_drv = NULL;
int size = 0;
@@ -716,7 +718,7 @@ int dev_get_attach_size(const struct udevice *dev, enum dm_tag_t tag)
if (parent) {
size = parent_drv->per_child_plat_auto;
if (!size)
- size = parent->uclass_->uc_drv->per_child_plat_auto;
+ size = parent->ucm.uc->uc_drv->per_child_plat_auto;
}
break;
case DM_TAG_UC_PLAT:
@@ -729,7 +731,7 @@ int dev_get_attach_size(const struct udevice *dev, enum dm_tag_t tag)
if (parent) {
size = parent_drv->per_child_auto;
if (!size)
- size = parent->uclass_->uc_drv->per_child_auto;
+ size = parent->ucm.uc->uc_drv->per_child_auto;
}
break;
case DM_TAG_UC_PRIV:
@@ -829,7 +831,7 @@ int device_find_child_by_seq(const struct udevice *parent, int seq,
*devp = NULL;
device_foreach_child(dev, parent) {
- if (dev->seq_ == seq) {
+ if (dev->ucm.seq == seq) {
*devp = dev;
return 0;
}
@@ -1094,7 +1096,7 @@ const void *dev_get_driver_ops(const struct udevice *dev)
enum uclass_id device_get_uclass_id(const struct udevice *dev)
{
- return dev->uclass_->uc_drv->id;
+ return dev->ucm.uc->uc_drv->id;
}
const char *dev_get_uclass_name(const struct udevice *dev)
@@ -1102,7 +1104,7 @@ const char *dev_get_uclass_name(const struct udevice *dev)
if (!dev)
return NULL;
- return dev->uclass_->uc_drv->name;
+ return dev->ucm.uc->uc_drv->name;
}
bool device_has_children(const struct udevice *dev)
@@ -1161,7 +1163,7 @@ void dev_set_parent_priv(struct udevice *dev, void *parent_priv)
void dev_set_uclass_priv(struct udevice *dev, void *uclass_priv)
{
- dev->uclass_priv_ = uclass_priv;
+ dev->ucm.uc_priv = uclass_priv;
}
void dev_set_plat(struct udevice *dev, void *plat)
@@ -1176,12 +1178,12 @@ void dev_set_parent_plat(struct udevice *dev, void *parent_plat)
void dev_set_uclass_plat(struct udevice *dev, void *uclass_plat)
{
- dev->uclass_plat_ = uclass_plat;
+ dev->ucm.uc_plat = uclass_plat;
}
void dev_int_set_seq(struct udevice *dev, int seq)
{
- dev->seq_ = seq;
+ dev->ucm.seq = seq;
}
#if CONFIG_IS_ENABLED(OF_REAL)
diff --git a/drivers/core/dump.c b/drivers/core/dump.c
index f3f7b46a973..60e9a8ad001 100644
--- a/drivers/core/dump.c
+++ b/drivers/core/dump.c
@@ -39,8 +39,8 @@ static void show_devices(struct udevice *dev, int depth, int last_flag,
/* print the first 20 characters to not break the tree-format. */
printf(CONFIG_IS_ENABLED(USE_TINY_PRINTF) ? " %s %d [ %c ] %s " :
- " %-10.10s %3d [ %c ] %-20.20s ", dev->uclass_->uc_drv->name,
- dev->seq_,
+ " %-10.10s %3d [ %c ] %-20.20s ", dev->ucm.uc->uc_drv->name,
+ dev->ucm.seq,
flags & DM_FLAG_ACTIVATED ? '+' : ' ', dev->driver->name);
for (i = depth; i >= 0; i--) {
@@ -156,7 +156,7 @@ static void dm_display_line(struct udevice *dev, int index)
printf("%-3i %c %s @ %08lx", index,
dev_get_flags(dev) & DM_FLAG_ACTIVATED ? '*' : ' ',
dev->name, (ulong)map_to_sysmem(dev));
- if (dev->seq_ != -1)
+ if (dev->ucm.seq != -1)
printf(", seq %d", dev_seq(dev));
puts("\n");
}
diff --git a/drivers/core/read.c b/drivers/core/read.c
index 7cf50c0b040..489741aac09 100644
--- a/drivers/core/read.c
+++ b/drivers/core/read.c
@@ -347,7 +347,7 @@ const void *dev_read_prop_by_prop(struct ofprop *prop,
int dev_read_alias_seq(const struct udevice *dev, int *devnump)
{
ofnode node = dev_ofnode(dev);
- const char *uc_name = dev->uclass_->uc_drv->name;
+ const char *uc_name = dev->ucm.uc->uc_drv->name;
int ret = -ENOTSUPP;
if (ofnode_is_np(node)) {
diff --git a/drivers/core/uclass.c b/drivers/core/uclass.c
index da7c367d5c0..276aec855a0 100644
--- a/drivers/core/uclass.c
+++ b/drivers/core/uclass.c
@@ -122,7 +122,7 @@ int uclass_destroy(struct uclass *uc)
*/
while (!list_empty(&uc->dev_head)) {
dev = list_first_entry(&uc->dev_head, struct udevice,
- uclass_node);
+ ucm.uc_node);
ret = device_remove(dev, DM_REMOVE_NORMAL | DM_REMOVE_NO_PD);
if (ret)
return log_msg_ret("remove", ret);
@@ -203,7 +203,7 @@ enum uclass_id uclass_get_by_name(const char *name)
int dev_get_uclass_index(struct udevice *dev, struct uclass **ucp)
{
struct udevice *iter;
- struct uclass *uc = dev->uclass_;
+ struct uclass *uc = dev->ucm.uc;
int i = 0;
if (list_empty(&uc->dev_head))
@@ -256,7 +256,7 @@ int uclass_find_first_device(enum uclass_id id, struct udevice **devp)
if (list_empty(&uc->dev_head))
return 0;
- *devp = list_first_entry(&uc->dev_head, struct udevice, uclass_node);
+ *devp = list_first_entry(&uc->dev_head, struct udevice, ucm.uc_node);
return 0;
}
@@ -266,9 +266,9 @@ void uclass_find_next_device(struct udevice **devp)
struct udevice *dev = *devp;
*devp = NULL;
- if (!list_is_last(&dev->uclass_node, &dev->uclass_->dev_head))
- *devp = list_entry(dev->uclass_node.next, struct udevice,
- uclass_node);
+ if (!list_is_last(&dev->ucm.uc_node, &dev->ucm.uc->dev_head))
+ *devp = list_entry(dev->ucm.uc_node.next, struct udevice,
+ ucm.uc_node);
}
int uclass_find_device_by_namelen(enum uclass_id id, const char *name, int len,
@@ -310,7 +310,7 @@ struct udevice *uclass_try_first_device(enum uclass_id id)
if (!uc || list_empty(&uc->dev_head))
return NULL;
- return list_first_entry(&uc->dev_head, struct udevice, uclass_node);
+ return list_first_entry(&uc->dev_head, struct udevice, ucm.uc_node);
}
int uclass_find_next_free_seq(struct uclass *uc)
@@ -324,9 +324,9 @@ int uclass_find_next_free_seq(struct uclass *uc)
max = dev_read_alias_highest_id(uc->uc_drv->name);
/* Avoid conflict with existing devices */
- list_for_each_entry(dev, &uc->dev_head, uclass_node) {
- if (dev->seq_ > max)
- max = dev->seq_;
+ list_for_each_entry(dev, &uc->dev_head, ucm.uc_node) {
+ if (dev->ucm.seq > max)
+ max = dev->ucm.seq;
}
/*
* At this point, max will be -1 if there are no existing aliases or
@@ -351,8 +351,8 @@ int uclass_find_device_by_seq(enum uclass_id id, int seq, struct udevice **devp)
return ret;
uclass_foreach_dev(dev, uc) {
- log_debug(" - %d '%s'\n", dev->seq_, dev->name);
- if (dev->seq_ == seq) {
+ log_debug(" - %d '%s'\n", dev->ucm.seq, dev->name);
+ if (dev->ucm.seq == seq) {
*devp = dev;
log_debug(" - found\n");
return 0;
@@ -715,11 +715,11 @@ int uclass_bind_device(struct udevice *dev)
struct uclass *uc;
int ret;
- uc = dev->uclass_;
- list_add_tail(&dev->uclass_node, &uc->dev_head);
+ uc = dev->ucm.uc;
+ list_add_tail(&dev->ucm.uc_node, &uc->dev_head);
if (dev->parent) {
- struct uclass_driver *uc_drv = dev->parent->uclass_->uc_drv;
+ struct uclass_driver *uc_drv = dev->parent->ucm.uc->uc_drv;
if (uc_drv->child_post_bind) {
ret = uc_drv->child_post_bind(dev);
@@ -731,7 +731,7 @@ int uclass_bind_device(struct udevice *dev)
return 0;
err:
/* There is no need to undo the parent's post_bind call */
- list_del(&dev->uclass_node);
+ list_del(&dev->ucm.uc_node);
return ret;
}
@@ -742,7 +742,7 @@ int uclass_pre_unbind_device(struct udevice *dev)
struct uclass *uc;
int ret;
- uc = dev->uclass_;
+ uc = dev->ucm.uc;
if (uc->uc_drv->pre_unbind) {
ret = uc->uc_drv->pre_unbind(dev);
if (ret)
@@ -754,7 +754,7 @@ int uclass_pre_unbind_device(struct udevice *dev)
int uclass_unbind_device(struct udevice *dev)
{
- list_del(&dev->uclass_node);
+ list_del(&dev->ucm.uc_node);
return 0;
}
@@ -765,7 +765,7 @@ int uclass_pre_probe_device(struct udevice *dev)
struct uclass_driver *uc_drv;
int ret;
- uc_drv = dev->uclass_->uc_drv;
+ uc_drv = dev->ucm.uc->uc_drv;
if (uc_drv->pre_probe) {
ret = uc_drv->pre_probe(dev);
if (ret)
@@ -774,7 +774,7 @@ int uclass_pre_probe_device(struct udevice *dev)
if (!dev->parent)
return 0;
- uc_drv = dev->parent->uclass_->uc_drv;
+ uc_drv = dev->parent->ucm.uc->uc_drv;
if (uc_drv->child_pre_probe) {
ret = uc_drv->child_pre_probe(dev);
if (ret)
@@ -790,7 +790,7 @@ int uclass_post_probe_device(struct udevice *dev)
int ret;
if (dev->parent) {
- uc_drv = dev->parent->uclass_->uc_drv;
+ uc_drv = dev->parent->ucm.uc->uc_drv;
if (uc_drv->child_post_probe) {
ret = uc_drv->child_post_probe(dev);
if (ret)
@@ -798,7 +798,7 @@ int uclass_post_probe_device(struct udevice *dev)
}
}
- uc_drv = dev->uclass_->uc_drv;
+ uc_drv = dev->ucm.uc->uc_drv;
if (uc_drv->post_probe) {
ret = uc_drv->post_probe(dev);
if (ret)
@@ -814,7 +814,7 @@ int uclass_pre_remove_device(struct udevice *dev)
struct uclass *uc;
int ret;
- uc = dev->uclass_;
+ uc = dev->ucm.uc;
if (uc->uc_drv->pre_remove) {
ret = uc->uc_drv->pre_remove(dev);
if (ret)
diff --git a/drivers/i2c/ast2600_i2c.c b/drivers/i2c/ast2600_i2c.c
index 9d1d70670b9..57c3f574d49 100644
--- a/drivers/i2c/ast2600_i2c.c
+++ b/drivers/i2c/ast2600_i2c.c
@@ -183,7 +183,7 @@ static int ast2600_i2c_set_speed(struct udevice *dev, unsigned int speed)
int inc = 0;
u32 data;
- debug("Setting speed for I2C%d to <%u>\n", dev->seq_, speed);
+ debug("Setting speed for I2C%d to <%u>\n", dev_seq(dev), speed);
if (!speed) {
debug("No valid speed specified\n");
return -EINVAL;
diff --git a/drivers/i2c/npcm_i2c.c b/drivers/i2c/npcm_i2c.c
index d57237a6df1..fa83a772352 100644
--- a/drivers/i2c/npcm_i2c.c
+++ b/drivers/i2c/npcm_i2c.c
@@ -578,7 +578,7 @@ static int npcm_i2c_probe(struct udevice *dev)
return -EINVAL;
}
- bus->num = dev->seq_;
+ bus->num = dev_seq(dev);
bus->reg = dev_read_addr_ptr(dev);
bus->freq = dev_read_u32_default(dev, "clock-frequency", 100000);
bus->started = false;
diff --git a/drivers/pci/pcie_mediatek_gen3.c b/drivers/pci/pcie_mediatek_gen3.c
index 1818d4c1e30..6ed8f3aad03 100644
--- a/drivers/pci/pcie_mediatek_gen3.c
+++ b/drivers/pci/pcie_mediatek_gen3.c
@@ -97,10 +97,10 @@ static pci_dev_t convert_bdf(const struct udevice *controller, pci_dev_t bdf)
* external PCIe device. If multiple PCIe controllers are probed in U-Boot,
* U-Boot will use bus numbers greater than 2 as input parameters. Therefore,
* we should convert the BDF bus number to either 0 or 1 by subtracting the
- * offset by controller->seq_
+ * offset by dev_seq(controller)
*/
- bdfs[0] = bdfs[0] - controller->seq_;
+ bdfs[0] = bdfs[0] - dev_seq(controller);
return PCI_BDF(bdfs[0], bdfs[1], bdfs[2]);
}
diff --git a/drivers/serial/serial_s5p4418_pl011.c b/drivers/serial/serial_s5p4418_pl011.c
index 1fb954e80c2..dbbe3d98dcf 100644
--- a/drivers/serial/serial_s5p4418_pl011.c
+++ b/drivers/serial/serial_s5p4418_pl011.c
@@ -22,7 +22,7 @@ int s5p4418_pl011_serial_probe(struct udevice *dev)
int rst_id, ret;
if (!plat->skip_init) {
- uart_num = dev->seq_;
+ uart_num = dev_seq(dev);
rst_id = RESET_ID_UART0 + uart_num;
if (uart_num < 0 || rst_id > RESET_ID_UART5) {
diff --git a/include/dm/device.h b/include/dm/device.h
index 6d9528807cc..5824476f91d 100644
--- a/include/dm/device.h
+++ b/include/dm/device.h
@@ -172,28 +172,17 @@ struct uclass_member {
* model)
* @parent_plat_: The parent bus's configuration data for this device (do not
* access outside driver model)
- * @uclass_plat_: The uclass's configuration data for this device (do not access
- * outside driver model)
* @driver_data: Driver data word for the entry that matched this device with
* its driver
* @parent: Parent of this device, or NULL for the top level device
* @priv_: Private data for this device (do not access outside driver model)
- * @uclass_: Pointer to uclass for this device
- * @uclass_priv_: The uclass's private data for this device (do not access
- * outside driver model)
+ * @ucm: Primary uclass membership (do not access outside driver model)
* @parent_priv_: The parent's private data for this device (do not access
* outside driver model)
- * @uclass_node: Used by uclass to link its devices
* @child_head: List of children of this device
* @sibling_node: Next device in list of all devices
* @flags_: Flags for this device `DM_FLAG_...` (do not access outside driver
* model)
- * @seq_: Allocated sequence number for this device (-1 = none). This is set up
- * when the device is bound and is unique within the device's uclass. If the
- * device has an alias in the devicetree then that is used to set the sequence
- * number. Otherwise, the next available number is used. Sequence numbers are
- * used by certain commands that need device to be numbered (e.g. 'mmc dev').
- * (do not access outside driver model)
* @node_: Reference to device tree node for this device (do not access outside
* driver model)
* @devres_head: List of memory allocations associated with this device.
@@ -209,20 +198,16 @@ struct udevice {
const char *name;
void *plat_;
void *parent_plat_;
- void *uclass_plat_;
ulong driver_data;
struct udevice *parent;
void *priv_;
- struct uclass *uclass_;
- void *uclass_priv_;
+ struct uclass_member ucm;
void *parent_priv_;
- struct list_head uclass_node;
struct list_head child_head;
struct list_head sibling_node;
#if !CONFIG_IS_ENABLED(OF_PLATDATA_RT)
u32 flags_;
#endif
- int seq_;
#if CONFIG_IS_ENABLED(OF_REAL)
ofnode node_;
#endif
@@ -341,12 +326,12 @@ static inline void dev_set_ofnode(struct udevice *dev, ofnode node)
static inline int dev_seq(const struct udevice *dev)
{
- return dev->seq_;
+ return dev->ucm.seq;
}
static inline struct uclass *dev_uclass(const struct udevice *dev)
{
- return dev->uclass_;
+ return dev->ucm.uc;
}
/**
diff --git a/include/dm/uclass.h b/include/dm/uclass.h
index 8fdd7272511..b76797eeabd 100644
--- a/include/dm/uclass.h
+++ b/include/dm/uclass.h
@@ -504,7 +504,7 @@ int uclass_id_count(enum uclass_id id);
*/
#define uclass_id_foreach_dev(id, pos, uc) \
if (!uclass_get(id, &uc)) \
- list_for_each_entry(pos, &uc->dev_head, uclass_node)
+ list_for_each_entry(pos, &uc->dev_head, ucm.uc_node)
/**
* uclass_foreach_dev() - iterate through devices of a given uclass
@@ -517,7 +517,7 @@ int uclass_id_count(enum uclass_id id);
* @uc: uclass to scan (`struct uclass *`)
*/
#define uclass_foreach_dev(pos, uc) \
- list_for_each_entry(pos, &uc->dev_head, uclass_node)
+ list_for_each_entry(pos, &uc->dev_head, ucm.uc_node)
/**
* uclass_foreach_dev_safe() - safely iterate through devices of a given uclass
@@ -532,7 +532,7 @@ int uclass_id_count(enum uclass_id id);
* @uc: uclass to scan (`struct uclass *`)
*/
#define uclass_foreach_dev_safe(pos, next, uc) \
- list_for_each_entry_safe(pos, next, &uc->dev_head, uclass_node)
+ list_for_each_entry_safe(pos, next, &uc->dev_head, ucm.uc_node)
/**
* uclass_foreach_dev_probe() - iterate through devices of a given uclass ID
diff --git a/test/dm/bus.c b/test/dm/bus.c
index dd4c34f1f8a..7dd0d040650 100644
--- a/test/dm/bus.c
+++ b/test/dm/bus.c
@@ -219,15 +219,15 @@ static int dm_test_bus_parent_data_uclass(struct unit_test_state *uts)
size = drv->per_child_auto;
#ifdef CONFIG_SANDBOX
- os_mprotect_allow(bus->uclass_->uc_drv, sizeof(*bus->uclass_->uc_drv));
+ os_mprotect_allow(bus->ucm.uc->uc_drv, sizeof(*bus->ucm.uc->uc_drv));
os_mprotect_allow(drv, sizeof(*drv));
#endif
- bus->uclass_->uc_drv->per_child_auto = size;
+ bus->ucm.uc->uc_drv->per_child_auto = size;
drv->per_child_auto = 0;
ret = test_bus_parent_data(uts);
if (ret)
return ret;
- bus->uclass_->uc_drv->per_child_auto = 0;
+ bus->ucm.uc->uc_drv->per_child_auto = 0;
drv->per_child_auto = size;
return 0;
@@ -360,15 +360,15 @@ static int dm_test_bus_parent_plat_uclass(struct unit_test_state *uts)
drv = (struct driver *)bus->driver;
size = drv->per_child_plat_auto;
#ifdef CONFIG_SANDBOX
- os_mprotect_allow(bus->uclass_->uc_drv, sizeof(*bus->uclass_->uc_drv));
+ os_mprotect_allow(bus->ucm.uc->uc_drv, sizeof(*bus->ucm.uc->uc_drv));
os_mprotect_allow(drv, sizeof(*drv));
#endif
- bus->uclass_->uc_drv->per_child_plat_auto = size;
+ bus->ucm.uc->uc_drv->per_child_plat_auto = size;
drv->per_child_plat_auto = 0;
ret = test_bus_parent_plat(uts);
if (ret)
return ret;
- bus->uclass_->uc_drv->per_child_plat_auto = 0;
+ bus->ucm.uc->uc_drv->per_child_plat_auto = 0;
drv->per_child_plat_auto = size;
return 0;
diff --git a/test/dm/core.c b/test/dm/core.c
index 78ee14af228..94fa6cfa8f2 100644
--- a/test/dm/core.c
+++ b/test/dm/core.c
@@ -1226,11 +1226,11 @@ static int dm_test_all_have_seq(struct unit_test_state *uts)
struct uclass *uc;
list_for_each_entry(uc, gd->uclass_root, sibling_node) {
- list_for_each_entry(dev, &uc->dev_head, uclass_node) {
- if (dev->seq_ == -1)
+ list_for_each_entry(dev, &uc->dev_head, ucm.uc_node) {
+ if (dev->ucm.seq == -1)
printf("Device '%s' has no seq (%d)\n",
- dev->name, dev->seq_);
- ut_assert(dev->seq_ != -1);
+ dev->name, dev->ucm.seq);
+ ut_assert(dev->ucm.seq != -1);
}
}
diff --git a/test/dm/test-uclass.c b/test/dm/test-uclass.c
index 0f9c8a5a355..ee2ed1b6643 100644
--- a/test/dm/test-uclass.c
+++ b/test/dm/test-uclass.c
@@ -66,11 +66,11 @@ static int test_pre_probe(struct udevice *dev)
static int test_post_probe(struct udevice *dev)
{
struct unit_test_state *uts = ut_get_state();
- struct udevice *prev = list_entry(dev->uclass_node.prev,
- struct udevice, uclass_node);
+ struct udevice *prev = list_entry(dev->ucm.uc_node.prev,
+ struct udevice, ucm.uc_node);
struct dm_test_uclass_perdev_priv *priv = dev_get_uclass_priv(dev);
- struct uclass *uc = dev->uclass_;
+ struct uclass *uc = dev->ucm.uc;
dm_testdrv_op_count[DM_TEST_OP_POST_PROBE]++;
ut_assert(priv);
@@ -78,7 +78,7 @@ static int test_post_probe(struct udevice *dev)
priv->base_add = 0;
if (uts->skip_post_probe)
return 0;
- if (&prev->uclass_node != &uc->dev_head) {
+ if (&prev->ucm.uc_node != &uc->dev_head) {
struct dm_test_uclass_perdev_priv *prev_uc_priv
= dev_get_uclass_priv(prev);
struct dm_test_pdata *pdata = dev_get_plat(prev);
diff --git a/tools/dtoc/dtb_platdata.py b/tools/dtoc/dtb_platdata.py
index e0561f588b2..a570fd3b9a9 100644
--- a/tools/dtoc/dtb_platdata.py
+++ b/tools/dtoc/dtb_platdata.py
@@ -735,8 +735,6 @@ class DtbPlatdata():
self.buf('\t.plat_\t\t= &%s%s,\n' % (VAL_PREFIX, node.var_name))
if parent_plat_name:
self.buf('\t.parent_plat_\t= %s,\n' % parent_plat_name)
- if uclass_plat_name:
- self.buf('\t.uclass_plat_\t= %s,\n' % uclass_plat_name)
driver_date = None
if node != self._fdt.GetRoot():
@@ -763,20 +761,22 @@ class DtbPlatdata():
node.parent.var_name)
if priv_name:
self.buf('\t.priv_\t\t= %s,\n' % priv_name)
- self.buf('\t.uclass_\t= DM_UCLASS_REF(%s),\n' % uclass.name)
-
+ self.buf('\t.ucm\t\t= {\n')
+ self.buf('\t\t.uc\t= DM_UCLASS_REF(%s),\n' % uclass.name)
if uclass_priv_name:
- self.buf('\t.uclass_priv_ = %s,\n' % uclass_priv_name)
+ self.buf('\t\t.uc_priv = %s,\n' % uclass_priv_name)
+ if uclass_plat_name:
+ self.buf('\t\t.uc_plat = %s,\n' % uclass_plat_name)
+ self.list_node('uc_node', uclass.node_refs, node.uclass_seq, indent=2)
+ self.buf('\t\t.seq\t= %d,\n' % node.seq)
+ self.buf('\t},\n')
+
if parent_priv_name:
self.buf('\t.parent_priv_\t= %s,\n' % parent_priv_name)
- self.list_node('uclass_node', uclass.node_refs, node.uclass_seq)
self.list_head('child_head', 'sibling_node', node.child_devs, node.var_name)
if node.parent in self._valid_nodes:
self.list_node('sibling_node', node.parent.child_refs,
node.parent_seq)
- # flags is left as 0
-
- self.buf('\t.seq_ = %d,\n' % node.seq)
self.buf('};\n')
self.buf('\n')
@@ -827,11 +827,12 @@ class DtbPlatdata():
self.buf('\t\t.next = &%s->%s,\n' % (first, member))
self.buf('\t},\n')
- def list_node(self, member, node_refs, seq):
- self.buf('\t.%s\t= {\n' % member)
- self.buf('\t\t.prev = %s,\n' % node_refs[seq - 1])
- self.buf('\t\t.next = %s,\n' % node_refs[seq + 1])
- self.buf('\t},\n')
+ def list_node(self, member, node_refs, seq, indent=1):
+ tab = '\t' * indent
+ self.buf('%s.%s\t= {\n' % (tab, member))
+ self.buf('%s\t.prev = %s,\n' % (tab, node_refs[seq - 1]))
+ self.buf('%s\t.next = %s,\n' % (tab, node_refs[seq + 1]))
+ self.buf('%s},\n' % tab)
def generate_uclasses(self):
self.out('\n')
@@ -876,7 +877,7 @@ class DtbPlatdata():
self.buf('\t.priv_\t\t= %s,\n' % priv_name)
self.buf('\t.uc_drv\t\t= DM_UCLASS_DRIVER_REF(%s),\n' % uclass.name)
self.list_node('sibling_node', uclass_node, seq)
- self.list_head('dev_head', 'uclass_node', uc_drv.devs, None)
+ self.list_head('dev_head', 'ucm.uc_node', uc_drv.devs, None)
self.buf('};\n')
self.buf('\n')
self.out(''.join(self.get_buf()))
@@ -967,7 +968,7 @@ class DtbPlatdata():
node.uclass_seq = len(node.uclass.devs)
node.uclass.devs.append(node)
uclass.node_refs[node.uclass_seq] = \
- '&%s->uclass_node' % node.dev_ref
+ '&%s->ucm.uc_node' % node.dev_ref
parent_driver = None
if node.parent in self._valid_nodes:
diff --git a/tools/dtoc/test_dtoc.py b/tools/dtoc/test_dtoc.py
index fc1b73c5125..6bbf800adec 100755
--- a/tools/dtoc/test_dtoc.py
+++ b/tools/dtoc/test_dtoc.py
@@ -455,8 +455,8 @@ DM_UCLASS_INST(i2c) = {
.next = &DM_UCLASS_REF(misc)->sibling_node,
},
.dev_head = {
- .prev = &DM_DEVICE_REF(i2c)->uclass_node,
- .next = &DM_DEVICE_REF(i2c)->uclass_node,
+ .prev = &DM_DEVICE_REF(i2c)->ucm.uc_node,
+ .next = &DM_DEVICE_REF(i2c)->ucm.uc_node,
},
};
@@ -467,8 +467,8 @@ DM_UCLASS_INST(misc) = {
.next = &DM_UCLASS_REF(root)->sibling_node,
},
.dev_head = {
- .prev = &DM_DEVICE_REF(spl_test3)->uclass_node,
- .next = &DM_DEVICE_REF(spl_test)->uclass_node,
+ .prev = &DM_DEVICE_REF(spl_test3)->ucm.uc_node,
+ .next = &DM_DEVICE_REF(spl_test)->ucm.uc_node,
},
};
@@ -479,8 +479,8 @@ DM_UCLASS_INST(root) = {
.next = &DM_UCLASS_REF(testbus)->sibling_node,
},
.dev_head = {
- .prev = &DM_DEVICE_REF(root)->uclass_node,
- .next = &DM_DEVICE_REF(root)->uclass_node,
+ .prev = &DM_DEVICE_REF(root)->ucm.uc_node,
+ .next = &DM_DEVICE_REF(root)->ucm.uc_node,
},
};
@@ -491,8 +491,8 @@ DM_UCLASS_INST(testbus) = {
.next = &DM_UCLASS_REF(testfdt)->sibling_node,
},
.dev_head = {
- .prev = &DM_DEVICE_REF(some_bus)->uclass_node,
- .next = &DM_DEVICE_REF(some_bus)->uclass_node,
+ .prev = &DM_DEVICE_REF(some_bus)->ucm.uc_node,
+ .next = &DM_DEVICE_REF(some_bus)->ucm.uc_node,
},
};
@@ -507,8 +507,8 @@ DM_UCLASS_INST(testfdt) = {
.next = &uclass_head,
},
.dev_head = {
- .prev = &DM_DEVICE_REF(test0)->uclass_node,
- .next = &DM_DEVICE_REF(test)->uclass_node,
+ .prev = &DM_DEVICE_REF(test0)->ucm.uc_node,
+ .next = &DM_DEVICE_REF(test)->ucm.uc_node,
},
};
@@ -558,11 +558,14 @@ DM_DEVICE_INST(i2c) = {
\t.name\t\t= "sandbox_i2c",
\t.plat_\t\t= &dtv_i2c,
\t.priv_\t\t= _sandbox_i2c_priv_i2c,
-\t.uclass_\t= DM_UCLASS_REF(i2c),
-\t.uclass_priv_ = _sandbox_i2c_uc_priv_i2c,
-\t.uclass_node\t= {
-\t\t.prev = &DM_UCLASS_REF(i2c)->dev_head,
-\t\t.next = &DM_UCLASS_REF(i2c)->dev_head,
+\t.ucm\t\t= {
+\t\t.uc\t= DM_UCLASS_REF(i2c),
+\t\t.uc_priv = _sandbox_i2c_uc_priv_i2c,
+\t\t.uc_node\t= {
+\t\t\t.prev = &DM_UCLASS_REF(i2c)->dev_head,
+\t\t\t.next = &DM_UCLASS_REF(i2c)->dev_head,
+\t\t},
+\t\t.seq\t= 4,
\t},
\t.child_head\t= {
\t\t.prev = &DM_DEVICE_REF(i2c)->child_head,
@@ -572,7 +575,6 @@ DM_DEVICE_INST(i2c) = {
\t\t.prev = &DM_DEVICE_REF(root)->child_head,
\t\t.next = &DM_DEVICE_REF(some_bus)->sibling_node,
\t},
-\t.seq_ = 4,
};
/*
@@ -586,16 +588,18 @@ DM_DEVICE_INST(root) = {
\t.driver\t\t= DM_DRIVER_REF(root_driver),
\t.name\t\t= "root_driver",
\t.plat_\t\t= &dtv_root,
-\t.uclass_\t= DM_UCLASS_REF(root),
-\t.uclass_node\t= {
-\t\t.prev = &DM_UCLASS_REF(root)->dev_head,
-\t\t.next = &DM_UCLASS_REF(root)->dev_head,
+\t.ucm\t\t= {
+\t\t.uc\t= DM_UCLASS_REF(root),
+\t\t.uc_node\t= {
+\t\t\t.prev = &DM_UCLASS_REF(root)->dev_head,
+\t\t\t.next = &DM_UCLASS_REF(root)->dev_head,
+\t\t},
+\t\t.seq\t= 0,
\t},
\t.child_head\t= {
\t\t.prev = &DM_DEVICE_REF(spl_test3)->sibling_node,
\t\t.next = &DM_DEVICE_REF(i2c)->sibling_node,
\t},
-\t.seq_ = 0,
};
/*
@@ -627,14 +631,17 @@ DM_DEVICE_INST(some_bus) = {
\t.driver\t\t= DM_DRIVER_REF(denx_u_boot_test_bus),
\t.name\t\t= "denx_u_boot_test_bus",
\t.plat_\t\t= &_denx_u_boot_test_bus_plat_some_bus,
-\t.uclass_plat_\t= _denx_u_boot_test_bus_ucplat_some_bus,
\t.driver_data\t= DM_TEST_TYPE_FIRST,
\t.priv_\t\t= _denx_u_boot_test_bus_priv_some_bus,
-\t.uclass_\t= DM_UCLASS_REF(testbus),
-\t.uclass_priv_ = _denx_u_boot_test_bus_uc_priv_some_bus,
-\t.uclass_node\t= {
-\t\t.prev = &DM_UCLASS_REF(testbus)->dev_head,
-\t\t.next = &DM_UCLASS_REF(testbus)->dev_head,
+\t.ucm\t\t= {
+\t\t.uc\t= DM_UCLASS_REF(testbus),
+\t\t.uc_priv = _denx_u_boot_test_bus_uc_priv_some_bus,
+\t\t.uc_plat = _denx_u_boot_test_bus_ucplat_some_bus,
+\t\t.uc_node\t= {
+\t\t\t.prev = &DM_UCLASS_REF(testbus)->dev_head,
+\t\t\t.next = &DM_UCLASS_REF(testbus)->dev_head,
+\t\t},
+\t\t.seq\t= 2,
\t},
\t.child_head\t= {
\t\t.prev = &DM_DEVICE_REF(test0)->sibling_node,
@@ -644,7 +651,6 @@ DM_DEVICE_INST(some_bus) = {
\t\t.prev = &DM_DEVICE_REF(i2c)->sibling_node,
\t\t.next = &DM_DEVICE_REF(spl_test)->sibling_node,
\t},
-\t.seq_ = 2,
};
/*
@@ -660,10 +666,13 @@ DM_DEVICE_INST(spl_test) = {
\t.driver\t\t= DM_DRIVER_REF(sandbox_spl_test),
\t.name\t\t= "sandbox_spl_test",
\t.plat_\t\t= &dtv_spl_test,
-\t.uclass_\t= DM_UCLASS_REF(misc),
-\t.uclass_node\t= {
-\t\t.prev = &DM_UCLASS_REF(misc)->dev_head,
-\t\t.next = &DM_DEVICE_REF(spl_test3)->uclass_node,
+\t.ucm\t\t= {
+\t\t.uc\t= DM_UCLASS_REF(misc),
+\t\t.uc_node\t= {
+\t\t\t.prev = &DM_UCLASS_REF(misc)->dev_head,
+\t\t\t.next = &DM_DEVICE_REF(spl_test3)->ucm.uc_node,
+\t\t},
+\t\t.seq\t= 0,
\t},
\t.child_head\t= {
\t\t.prev = &DM_DEVICE_REF(spl_test)->child_head,
@@ -673,7 +682,6 @@ DM_DEVICE_INST(spl_test) = {
\t\t.prev = &DM_DEVICE_REF(some_bus)->sibling_node,
\t\t.next = &DM_DEVICE_REF(spl_test3)->sibling_node,
\t},
-\t.seq_ = 0,
};
/*
@@ -689,10 +697,13 @@ DM_DEVICE_INST(spl_test3) = {
\t.driver\t\t= DM_DRIVER_REF(sandbox_spl_test),
\t.name\t\t= "sandbox_spl_test",
\t.plat_\t\t= &dtv_spl_test3,
-\t.uclass_\t= DM_UCLASS_REF(misc),
-\t.uclass_node\t= {
-\t\t.prev = &DM_DEVICE_REF(spl_test)->uclass_node,
-\t\t.next = &DM_UCLASS_REF(misc)->dev_head,
+\t.ucm\t\t= {
+\t\t.uc\t= DM_UCLASS_REF(misc),
+\t\t.uc_node\t= {
+\t\t\t.prev = &DM_DEVICE_REF(spl_test)->ucm.uc_node,
+\t\t\t.next = &DM_UCLASS_REF(misc)->dev_head,
+\t\t},
+\t\t.seq\t= 1,
\t},
\t.child_head\t= {
\t\t.prev = &DM_DEVICE_REF(spl_test3)->child_head,
@@ -702,7 +713,6 @@ DM_DEVICE_INST(spl_test3) = {
\t\t.prev = &DM_DEVICE_REF(spl_test)->sibling_node,
\t\t.next = &DM_DEVICE_REF(root)->child_head,
\t},
-\t.seq_ = 1,
};
/*
@@ -737,12 +747,15 @@ DM_DEVICE_INST(test) = {
\t.driver_data\t= DM_TEST_TYPE_FIRST,
\t.parent\t\t= DM_DEVICE_REF(some_bus),
\t.priv_\t\t= _denx_u_boot_fdt_test_priv_test,
-\t.uclass_\t= DM_UCLASS_REF(testfdt),
-\t.parent_priv_\t= _denx_u_boot_fdt_test_parent_priv_test,
-\t.uclass_node\t= {
-\t\t.prev = &DM_UCLASS_REF(testfdt)->dev_head,
-\t\t.next = &DM_DEVICE_REF(test0)->uclass_node,
+\t.ucm\t\t= {
+\t\t.uc\t= DM_UCLASS_REF(testfdt),
+\t\t.uc_node\t= {
+\t\t\t.prev = &DM_UCLASS_REF(testfdt)->dev_head,
+\t\t\t.next = &DM_DEVICE_REF(test0)->ucm.uc_node,
+\t\t},
+\t\t.seq\t= 1,
\t},
+\t.parent_priv_\t= _denx_u_boot_fdt_test_parent_priv_test,
\t.child_head\t= {
\t\t.prev = &DM_DEVICE_REF(test)->child_head,
\t\t.next = &DM_DEVICE_REF(test)->child_head,
@@ -751,7 +764,6 @@ DM_DEVICE_INST(test) = {
\t\t.prev = &DM_DEVICE_REF(some_bus)->child_head,
\t\t.next = &DM_DEVICE_REF(test0)->sibling_node,
\t},
-\t.seq_ = 1,
};
/*
@@ -783,12 +795,15 @@ DM_DEVICE_INST(test0) = {
\t.driver_data\t= DM_TEST_TYPE_SECOND,
\t.parent\t\t= DM_DEVICE_REF(some_bus),
\t.priv_\t\t= _denx_u_boot_fdt_test_priv_test0,
-\t.uclass_\t= DM_UCLASS_REF(testfdt),
-\t.parent_priv_\t= _denx_u_boot_fdt_test_parent_priv_test0,
-\t.uclass_node\t= {
-\t\t.prev = &DM_DEVICE_REF(test)->uclass_node,
-\t\t.next = &DM_UCLASS_REF(testfdt)->dev_head,
+\t.ucm\t\t= {
+\t\t.uc\t= DM_UCLASS_REF(testfdt),
+\t\t.uc_node\t= {
+\t\t\t.prev = &DM_DEVICE_REF(test)->ucm.uc_node,
+\t\t\t.next = &DM_UCLASS_REF(testfdt)->dev_head,
+\t\t},
+\t\t.seq\t= 2,
\t},
+\t.parent_priv_\t= _denx_u_boot_fdt_test_parent_priv_test0,
\t.child_head\t= {
\t\t.prev = &DM_DEVICE_REF(test0)->child_head,
\t\t.next = &DM_DEVICE_REF(test0)->child_head,
@@ -797,7 +812,6 @@ DM_DEVICE_INST(test0) = {
\t\t.prev = &DM_DEVICE_REF(test)->sibling_node,
\t\t.next = &DM_DEVICE_REF(some_bus)->child_head,
\t},
-\t.seq_ = 2,
};
'''
--
2.43.0
More information about the U-Boot
mailing list