Hi Simon, On Thu, 18 Jul 2019 09:22:20 -0600 Simon Glass s...@chromium.org wrote: ... > > > drivers/core/device-remove.c | 9 +++++++++ > > > include/dm/device.h | 6 ++++++ > > > 2 files changed, 15 insertions(+) > > Unfortunately this causes a test failure (make qcheck). Can you please > take a look?
The dm power_domain test worked, but later when dm_test_destroy() -> uclass_destroy() removes devices, first 'power-domain' device is removed, then the 'power-domain-test' device. When removing the latter, we run if (!power_domain_get(dev, &pd)) power_domain_off(&pd); and this probes sandbox_power_domain driver for 'power-domain' device activating this device again. Then 'power-domain-test' device is removed, but 'power-domain' is active. When unbinding it later, we get this error in device_unbind(): if (dev->flags & DM_FLAG_ACTIVATED) return -EINVAL; Following will fix it: diff --git a/drivers/core/device-remove.c b/drivers/core/device-remove.c index 586fadee0a..fadb05c944 100644 --- a/drivers/core/device-remove.c +++ b/drivers/core/device-remove.c @@ -64,7 +64,8 @@ int device_unbind(struct udevice *dev) if (!dev) return -EINVAL; - if (dev->flags & DM_FLAG_ACTIVATED) + if (dev->flags & DM_FLAG_ACTIVATED && + device_get_uclass_id(dev) != UCLASS_POWER_DOMAIN) return -EINVAL; if (!(dev->flags & DM_FLAG_BOUND)) But I'm not sure if this it the correct approach. What do you think? Thanks, Anatolij _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot