dm: core: Add DM_DEVICE_REMOVE condition to all exit paths

At present device_bind() does some unnecessary work if a device fails to
bind in SPL. Add the missing conditions.

Also fix a style nit in the same function while we are here.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass
2021-02-03 21:29:44 -07:00
parent 24fd7e383d
commit 15421b71bc

View File

@@ -137,9 +137,8 @@ static int device_bind_common(struct udevice *parent, const struct driver *drv,
if (parent) { if (parent) {
size = parent->driver->per_child_plat_auto; size = parent->driver->per_child_plat_auto;
if (!size) { if (!size)
size = parent->uclass->uc_drv->per_child_plat_auto; size = parent->uclass->uc_drv->per_child_plat_auto;
}
if (size) { if (size) {
dev_or_flags(dev, DM_FLAG_ALLOC_PARENT_PDATA); dev_or_flags(dev, DM_FLAG_ALLOC_PARENT_PDATA);
ptr = calloc(1, size); ptr = calloc(1, size);
@@ -209,14 +208,18 @@ fail_uclass_bind:
} }
} }
fail_alloc3: fail_alloc3:
if (dev_get_flags(dev) & DM_FLAG_ALLOC_UCLASS_PDATA) { if (CONFIG_IS_ENABLED(DM_DEVICE_REMOVE)) {
free(dev_get_uclass_plat(dev)); if (dev_get_flags(dev) & DM_FLAG_ALLOC_UCLASS_PDATA) {
dev_set_uclass_plat(dev, NULL); free(dev_get_uclass_plat(dev));
dev_set_uclass_plat(dev, NULL);
}
} }
fail_alloc2: fail_alloc2:
if (dev_get_flags(dev) & DM_FLAG_ALLOC_PDATA) { if (CONFIG_IS_ENABLED(DM_DEVICE_REMOVE)) {
free(dev_get_plat(dev)); if (dev_get_flags(dev) & DM_FLAG_ALLOC_PDATA) {
dev_set_plat(dev, NULL); free(dev_get_plat(dev));
dev_set_plat(dev, NULL);
}
} }
fail_alloc1: fail_alloc1:
devres_release_all(dev); devres_release_all(dev);