From patchwork Mon Feb 17 09:10:36 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Neil Armstrong X-Patchwork-Id: 236428 List-Id: U-Boot discussion From: narmstrong at baylibre.com (Neil Armstrong) Date: Mon, 17 Feb 2020 10:10:36 +0100 Subject: [PATCH] Revert "dm: core: device: switch off power domain after device removal" Message-ID: <20200217091036.19028-1-narmstrong@baylibre.com> This commit breaks Linux boot on Amlogic libretech-cc, libretech-ac, sei510, sei610 board by automatically disabling the power domain after device removal. This because the power domain associated to the video driver must be kept enabled for linux to boot. The only way is to use the introduced flag DM_FLAG_DEFAULT_PD_CTRL_OFF, which removes automatic handling of power domain. This flag is not a complete solution since it will force reverting to manually enable the power domain from the driver probe. Instead a flag to keep the power domain enabled after removal should be introduced. In the meantime revert this commit until a proper solution is found. This reverts commit 52edfed65de967a86983a55c51ba0727090efc43. Signed-off-by: Neil Armstrong --- Hi Simon, Tom, This revert is the simplest fix to make the boards boot again on v2020.04, the goal is to make this behavior happen again with a proper flag to keep the power domain enabled on specific drivers. I can push it on my next PR on my branch, is it ok ? Neil drivers/core/device-remove.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/drivers/core/device-remove.c b/drivers/core/device-remove.c index 444e34b492..5540053d3c 100644 --- a/drivers/core/device-remove.c +++ b/drivers/core/device-remove.c @@ -16,7 +16,6 @@ #include #include #include -#include int device_chld_unbind(struct udevice *dev, struct driver *drv) { @@ -194,10 +193,6 @@ int device_remove(struct udevice *dev, uint flags) } } - if (!(drv->flags & DM_FLAG_DEFAULT_PD_CTRL_OFF) && - (dev != gd->cur_serial_dev)) - dev_power_domain_off(dev); - if (flags_remove(flags, drv->flags)) { device_free(dev);