1
0
mirror of https://xff.cz/git/u-boot/ synced 2025-09-01 08:42:12 +02:00

core: Log device probe errors and probe progress

Otherwise DM in U-Boot is hell to debug.

Signed-off-by: Ondrej Jirman <megi@xff.cz>
This commit is contained in:
Ondrej Jirman
2022-09-05 19:58:32 +02:00
parent d198b47344
commit 7dd1395cf8

View File

@@ -485,25 +485,33 @@ int device_probe(struct udevice *dev)
if (!dev)
return -EINVAL;
//dm_warn("probe req %s (%d)\n", dev->name, dev_get_flags(dev) & DM_FLAG_ACTIVATED);
if (dev_get_flags(dev) & DM_FLAG_ACTIVATED)
return 0;
ret = device_notify(dev, EVT_DM_PRE_PROBE);
if (ret)
if (ret) {
dm_warn("%s: pre probe fail\n", dev->name);
return ret;
}
drv = dev->driver;
assert(drv);
ret = device_of_to_plat(dev);
if (ret)
if (ret) {
dm_warn("%s: of plat fail\n", dev->name);
goto fail;
}
/* Ensure all parents are probed */
if (dev->parent) {
ret = device_probe(dev->parent);
if (ret)
if (ret) {
dm_warn("%s: parent probe fail\n", dev->name);
goto fail;
}
/*
* The device might have already been probed during
@@ -511,8 +519,10 @@ int device_probe(struct udevice *dev)
* (e.g. PCI bridge devices). Test the flags again
* so that we don't mess up the device.
*/
if (dev_get_flags(dev) & DM_FLAG_ACTIVATED)
if (dev_get_flags(dev) & DM_FLAG_ACTIVATED) {
dm_warn("%s: parent probe activated\n", dev->name);
return 0;
}
}
dev_or_flags(dev, DM_FLAG_ACTIVATED);
@@ -521,8 +531,10 @@ int device_probe(struct udevice *dev)
(device_get_uclass_id(dev) != UCLASS_POWER_DOMAIN) &&
!(drv->flags & DM_FLAG_DEFAULT_PD_CTRL_OFF)) {
ret = dev_power_domain_on(dev);
if (ret)
if (ret) {
dm_warn("%s: pm domain on fail\n", dev->name);
goto fail;
}
}
/*
@@ -550,8 +562,10 @@ int device_probe(struct udevice *dev)
if (CONFIG_IS_ENABLED(IOMMU) && dev->parent &&
(device_get_uclass_id(dev) != UCLASS_IOMMU)) {
ret = dev_iommu_enable(dev);
if (ret)
if (ret) {
dm_warn("%s: iommu en fail\n", dev->name);
goto fail;
}
}
ret = device_get_dma_constraints(dev);
@@ -559,13 +573,17 @@ int device_probe(struct udevice *dev)
goto fail;
ret = uclass_pre_probe_device(dev);
if (ret)
if (ret) {
dm_warn("%s: uclass preprobe fail\n", dev->name);
goto fail;
}
if (dev->parent && dev->parent->driver->child_pre_probe) {
ret = dev->parent->driver->child_pre_probe(dev);
if (ret)
if (ret) {
dm_warn("parent chld pre probe fail %s (%d)\n", dev->name, ret);
goto fail;
}
}
/* Only handle devices that have a valid ofnode */
@@ -575,19 +593,25 @@ int device_probe(struct udevice *dev)
* properties
*/
ret = clk_set_defaults(dev, CLK_DEFAULTS_PRE);
if (ret)
if (ret) {
dm_warn("clk defaults fail %s (%d)\n", dev->name, ret);
goto fail;
}
}
if (drv->probe) {
//dm_warn("probing %s\n", dev->name);
ret = drv->probe(dev);
//dm_warn("probed %s (%d)\n", dev->name, ret);
if (ret)
goto fail;
}
ret = uclass_post_probe_device(dev);
if (ret)
if (ret) {
dm_warn("uclass post-probe fail %s (%d)\n", dev->name, ret);
goto fail_uclass;
}
if (dev->parent && device_get_uclass_id(dev) == UCLASS_PINCTRL) {
ret = pinctrl_select_state(dev, "default");
@@ -597,8 +621,10 @@ int device_probe(struct udevice *dev)
}
ret = device_notify(dev, EVT_DM_POST_PROBE);
if (ret)
if (ret) {
dm_warn("dev post-probe fail %s (%d)\n", dev->name, ret);
return ret;
}
return 0;
fail_uclass:
@@ -610,6 +636,7 @@ fail:
dev_bic_flags(dev, DM_FLAG_ACTIVATED);
device_free(dev);
dm_warn("%s: Device '%s' failed (%d)\n", __func__, dev->name, ret);
return ret;
}