Skip to content
Snippets Groups Projects
  • Anatolij Gustschin's avatar
    3e4fcfa4
    power-domain: fix hang in endless loop on i.MX8 · 3e4fcfa4
    Anatolij Gustschin authored and Tom Rini's avatar Tom Rini committed
    
    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: 52edfed6 ("dm: core: device: switch off power domain after device removal")
    Signed-off-by: default avatarAnatolij Gustschin <agust@denx.de>
    Reported-by: default avatarOliver Graute <oliver.graute@gmail.com>
    Reported-by: default avatarFabio Estevam <festevam@gmail.com>
    Reviewed-by: Simon Glass's avatarSimon Glass <sjg@chromium.org>
    Reviewed-by: Lokesh Vutla's avatarLokesh Vutla <lokeshvutla@ti.com>
    Tested-by: default avatarFabio Estevam <festevam@gmail.com>
    3e4fcfa4
    History
    power-domain: fix hang in endless loop on i.MX8
    Anatolij Gustschin authored and Tom Rini's avatar Tom Rini committed
    
    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: 52edfed6 ("dm: core: device: switch off power domain after device removal")
    Signed-off-by: default avatarAnatolij Gustschin <agust@denx.de>
    Reported-by: default avatarOliver Graute <oliver.graute@gmail.com>
    Reported-by: default avatarFabio Estevam <festevam@gmail.com>
    Reviewed-by: Simon Glass's avatarSimon Glass <sjg@chromium.org>
    Reviewed-by: Lokesh Vutla's avatarLokesh Vutla <lokeshvutla@ti.com>
    Tested-by: default avatarFabio Estevam <festevam@gmail.com>