From patchwork Fri Feb 14 10:01:54 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anatolij Gustschin X-Patchwork-Id: 236358 List-Id: U-Boot discussion From: agust at denx.de (Anatolij Gustschin) Date: Fri, 14 Feb 2020 11:01:54 +0100 Subject: [RFC 2/2] Revert "dm: core: device: switch off power domain after device removal" In-Reply-To: <914a0443-bdab-3b43-3534-9e5c5a6c65c9@ti.com> References: <20200203135619.10180-1-oliver.graute@kococonnector.com> <20200203135619.10180-3-oliver.graute@kococonnector.com> <914a0443-bdab-3b43-3534-9e5c5a6c65c9@ti.com> Message-ID: <20200214110154.72e0eef0@crub> On Fri, 14 Feb 2020 09:50:54 +0530 Lokesh Vutla lokeshvutla at ti.com wrote: > On 13/02/20 10:42 PM, Neil Armstrong wrote: > > Hi, > > > > On 03/02/2020 14:59, Oliver Graute wrote: > >> The conga-imx8 board isn't booting without this revert. Can someone tell me > >> what I need to Do so that this revert is not necessary? > > Can you give more details on where the failure is happening?(logs would really > help). On i.MX8QXP based SoM running U-Boot v2020.04-rc2 with below patch the v4.14.98 kernel from NXP BSP boots: The generated debug log: Starting kernel ... device_remove: OFF 'clk', uclass pd 0 device_remove: OFF 'gpioledsgrp', uclass pd 0 device_remove: OFF 'lpi2c0grp', uclass pd 0 device_remove: OFF 'lpi2c1grp', uclass pd 0 device_remove: OFF 'lpuart2grp', uclass pd 0 device_remove: OFF 'usdhc1grp', uclass pd 0 device_remove: OFF 'fec2grp', uclass pd 0 device_remove: OFF 'imx8qxp-som', uclass pd 0 device_remove: OFF 'iomuxc', uclass pd 0 device_remove: OFF 'mu at 5d1c0000', uclass pd 0 device_remove: 'lsio_gpio0', uclass pd 1 device_remove: 'lsio_gpio1', uclass pd 1 device_remove: 'lsio_gpio3', uclass pd 1 device_remove: 'lsio_gpio4', uclass pd 1 device_remove: 'lsio_gpio5', uclass pd 1 device_remove: 'lsio_power_domain', uclass pd 1 device_remove: 'conn_sdhc0', uclass pd 1 device_remove: 'conn_enet1', uclass pd 1 device_remove: 'connectivity_power_domain', uclass pd 1 device_remove: 'dma_lpi2c0', uclass pd 1 device_remove: 'dma_lpi2c1', uclass pd 1 device_remove: 'dma_lpuart2', uclass pd 1 device_remove: 'dma_power_domain', uclass pd 1 device_remove: OFF 'imx8qx-pm', uclass pd 0 device_remove: OFF 'generic_50', uclass pd 0 device_remove: OFF 'i2c at 5a800000', uclass pd 0 device_remove: 'dma_lpi2c0', uclass pd 1 device_remove: OFF 'i2c at 5a810000', uclass pd 0 device_remove: 'dma_lpi2c1', uclass pd 1 device_remove: OFF 'gpio at 5d080000', uclass pd 0 device_remove: 'lsio_gpio0', uclass pd 1 device_remove: OFF 'gpio at 5d090000', uclass pd 0 device_remove: 'lsio_gpio1', uclass pd 1 device_remove: OFF 'gpio at 5d0b0000', uclass pd 0 device_remove: 'lsio_gpio3', uclass pd 1 device_remove: OFF 'gpio at 5d0c0000', uclass pd 0 device_remove: 'lsio_gpio4', uclass pd 1 device_remove: OFF 'gpio at 5d0d0000', uclass pd 0 device_remove: 'lsio_gpio5', uclass pd 1 device_remove: 'serial at 5a080000', uclass pd 0 device_remove: OFF 'usdhc at 5b010000.blk', uclass pd 0 device_remove: OFF 'usdhc at 5b010000', uclass pd 0 device_remove: 'conn_sdhc0', uclass pd 1 device_remove: OFF 'ethernet at 5b050000', uclass pd 0 device_remove: 'conn_enet1', uclass pd 1 device_remove: OFF 'run', uclass pd 0 device_remove: OFF 'flt', uclass pd 0 device_remove: OFF 'svc', uclass pd 0 device_remove: OFF 'com1_tx', uclass pd 0 device_remove: OFF 'com1_rx', uclass pd 0 device_remove: OFF 'com2_tx', uclass pd 0 device_remove: OFF 'com2_rx', uclass pd 0 device_remove: OFF 'cloud', uclass pd 0 device_remove: OFF 'wlan', uclass pd 0 device_remove: OFF 'dbg1', uclass pd 0 device_remove: OFF 'dbg2', uclass pd 0 device_remove: OFF 'dbg3', uclass pd 0 device_remove: OFF 'dbg4', uclass pd 0 device_remove: OFF 'leds', uclass pd 0 device_remove: OFF 'root_driver', uclass pd 0 My original patch v3 had this additional condition for power domain off: (device_get_uclass_id(dev) != UCLASS_POWER_DOMAIN) This was dropped in the merged patch for some reason, I don't know why. --- Anatolij diff --git a/arch/arm/mach-imx/imx8/fdt.c b/arch/arm/mach-imx/imx8/fdt.c index 65c8ac1a7e..cf79a12f42 100644 --- a/arch/arm/mach-imx/imx8/fdt.c +++ b/arch/arm/mach-imx/imx8/fdt.c @@ -280,7 +280,9 @@ int ft_system_setup(void *blob, bd_t *bd) { int ret; + /* update_fdt_with_owned_resources(blob); + */ if (is_imx8qm()) { ret = config_smmu_fdt(blob); diff --git a/drivers/core/device-remove.c b/drivers/core/device-remove.c index 444e34b492..a218f481b5 100644 --- a/drivers/core/device-remove.c +++ b/drivers/core/device-remove.c @@ -194,9 +194,18 @@ int device_remove(struct udevice *dev, uint flags) } } - if (!(drv->flags & DM_FLAG_DEFAULT_PD_CTRL_OFF) && - (dev != gd->cur_serial_dev)) + if (!(dev->flags & DM_FLAG_DEFAULT_PD_CTRL_OFF) && + (device_get_uclass_id(dev) != UCLASS_POWER_DOMAIN) && + (dev != gd->cur_serial_dev)) { + dm_warn("%s: OFF '%s', uclass pd %d\n", + __func__, dev->name, + device_get_uclass_id(dev) == UCLASS_POWER_DOMAIN); dev_power_domain_off(dev); + } else { + dm_warn("%s: '%s', uclass pd %d\n", + __func__, dev->name, + device_get_uclass_id(dev) == UCLASS_POWER_DOMAIN); + } if (flags_remove(flags, drv->flags)) { device_free(dev);