From: Oliver Graute <oliver.graute@gmail.com>
To: u-boot@lists.denx.de
Subject: [PATCH] power-domain: fix hang in endless loop on i.MX8
Date: Mon, 17 Feb 2020 10:07:31 +0100 [thread overview]
Message-ID: <20200217090731.GA31464@optiplex> (raw)
In-Reply-To: <20200215113443.6866-1-agust@denx.de>
On 15/02/20, Anatolij Gustschin wrote:
> 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 at 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: 52edfed65de9 ("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>
>
> ---
> drivers/power/domain/power-domain-uclass.c | 12 ++++++++++++
> 1 file changed, 12 insertions(+)
>
> diff --git a/drivers/power/domain/power-domain-uclass.c b/drivers/power/domain/power-domain-uclass.c
> index d9c623b56e..d8fe4d4877 100644
> --- a/drivers/power/domain/power-domain-uclass.c
> +++ b/drivers/power/domain/power-domain-uclass.c
> @@ -127,6 +127,18 @@ static int dev_power_domain_ctrl(struct udevice *dev, bool on)
> ret = power_domain_off(&pd);
> }
>
> + /*
> + * For platforms with parent and child power-domain devices
> + * we may not run device_remove() on the power-domain parent
> + * because it will result in removing its children and switching
> + * off their power-domain parent. So we will get here again and
> + * again and will be stuck in an endless loop.
> + */
> + if (!on && dev_get_parent(dev) == pd.dev &&
> + device_get_uclass_id(dev) == UCLASS_POWER_DOMAIN) {
> + return ret;
> + }
> +
> /*
> * power_domain_get() bound the device, thus
> * we must remove it again to prevent unbinding
> --
> 2.17.1
thx, just tested this and now I can drop my revert mentioned here:
https://lists.denx.de/pipermail/u-boot/2020-February/398910.html
Best regards,
Oliver
next prev parent reply other threads:[~2020-02-17 9:07 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-15 11:34 [PATCH] power-domain: fix hang in endless loop on i.MX8 Anatolij Gustschin
2020-02-16 19:02 ` Simon Glass
2020-02-16 19:24 ` Anatolij Gustschin
2020-02-17 2:44 ` Peng Fan
2020-02-17 3:27 ` Lokesh Vutla
2020-02-17 9:07 ` Oliver Graute [this message]
2020-02-17 9:12 ` Neil Armstrong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200217090731.GA31464@optiplex \
--to=oliver.graute@gmail.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.