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