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