mirror of
https://github.com/u-boot/u-boot.git
synced 2024-12-02 00:53:29 +08:00
3e4fcfa4bc
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:
|
||
---|---|---|
.. | ||
acpi_pmc | ||
battery | ||
domain | ||
fuel_gauge | ||
mfd | ||
pmic | ||
regulator | ||
axp152.c | ||
axp209.c | ||
axp221.c | ||
axp809.c | ||
axp818.c | ||
exynos-tmu.c | ||
ftpmu010.c | ||
Kconfig | ||
Makefile | ||
mt6323.c | ||
palmas.c | ||
power_core.c | ||
power_dialog.c | ||
power_fsl.c | ||
power_i2c.c | ||
power_spi.c | ||
sy8106a.c | ||
tps6586x.c | ||
twl4030.c | ||
twl6030.c |