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:
@@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user