u-boot-brain/drivers/power
Anatolij Gustschin 3e4fcfa4bc power-domain: fix hang in endless loop on i.MX8
Currently when booting the kernel on i.MX8 U-Boot hangs in an
endless loop when switching off dma, connectivity or lsio power
domains during device removal. It hapens first when removing
gpio0 (gpio@5d080000) device, here its power domain device
'lsio_gpio0' is obtained for switching off power. Since the
obtained 'lsio_gpio0' device is removed afterwards, its power
domain is also switched off and here the parent power domain
device 'lsio_power_domain' is optained for switching off the
power. Thereafter, when the obtained 'lsio_power_domain' is
removed, device_remove() removes its first child 'lsio_gpio0'.
During this child removal the 'lsio_power_domain' device is
obtained again for switching and when removing it later,
the same child removal is repeated, so we are stuck in an
endless loop. Below is a snippet from dm tree on i.MX8QXP
for better illustration of the DM devices relationship:

 Class     Index  Probed  Driver                Name
-----------------------------------------------------------
 root          0  [ + ]   root_driver           root_driver
...
 simple_bus    0  [ + ]   generic_simple_bus    |-- imx8qx-pm
 power_doma    0  [ + ]   imx8_power_domain     |   |-- lsio_power_domain
 power_doma    1  [ + ]   imx8_power_domain     |   |   |-- lsio_gpio0
 power_doma    2  [ + ]   imx8_power_domain     |   |   |-- lsio_gpio1

Do not remove a power domain device if it is a parent of the
currently controlled device.

Fixes: 52edfed65d ("dm: core: device: switch off power domain after device removal")
Signed-off-by: Anatolij Gustschin <agust@denx.de>
Reported-by: Oliver Graute <oliver.graute@gmail.com>
Reported-by: Fabio Estevam <festevam@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Lokesh Vutla <lokeshvutla@ti.com>
Tested-by: Fabio Estevam <festevam@gmail.com>
2020-03-10 16:29:38 -04:00
..
acpi_pmc dm: pci: Update the PCI read_config() method to const dev * 2020-02-05 19:33:45 -07:00
battery SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
domain power-domain: fix hang in endless loop on i.MX8 2020-03-10 16:29:38 -04:00
fuel_gauge SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
mfd SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
pmic dm: core: Create a new header file for 'compat' features 2020-02-05 19:33:46 -07:00
regulator sandbox conversion to SDL2 2020-02-11 10:58:41 -05:00
axp152.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
axp209.c power: axp209: Limit inrush current for broken boards 2018-12-07 22:24:33 +05:30
axp221.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
axp809.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
axp818.c power: axp818: Fix typo in axp_set_dldo 2019-03-08 11:36:59 +05:30
exynos-tmu.c power: change from meaningless value to error number 2017-01-11 19:40:14 +09:00
ftpmu010.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
Kconfig poweroff: add poweroff for mt6323 pmic 2020-01-10 10:25:13 -05:00
Makefile poweroff: add poweroff for mt6323 pmic 2020-01-10 10:25:13 -05:00
mt6323.c poweroff: add poweroff for mt6323 pmic 2020-01-10 10:25:13 -05:00
palmas.c power: make most tps drivers and the twl4030 driver compatible with DM_I2C 2018-12-10 06:17:30 +01:00
power_core.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
power_dialog.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
power_fsl.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
power_i2c.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
power_spi.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
sy8106a.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
tps6586x.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
twl4030.c power: make most tps drivers and the twl4030 driver compatible with DM_I2C 2018-12-10 06:17:30 +01:00
twl6030.c power: make most tps drivers and the twl4030 driver compatible with DM_I2C 2018-12-10 06:17:30 +01:00