From 7dd1395cf8c8d36116e66f28dd6105fa239ff7cf Mon Sep 17 00:00:00 2001 From: Ondrej Jirman Date: Mon, 5 Sep 2022 19:58:32 +0200 Subject: [PATCH] core: Log device probe errors and probe progress Otherwise DM in U-Boot is hell to debug. Signed-off-by: Ondrej Jirman --- drivers/core/device.c | 49 +++++++++++++++++++++++++++++++++---------- 1 file changed, 38 insertions(+), 11 deletions(-) diff --git a/drivers/core/device.c b/drivers/core/device.c index 6e26b64fb81..a32fc4407c8 100644 --- a/drivers/core/device.c +++ b/drivers/core/device.c @@ -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; }