A lifecycle transition can continue after a required state restore operation fails, leaving software state inconsistent with hardware.
Propagate the failure and unwind state acquired by the transition so callers cannot observe a false success. Signed-off-by: Pengpeng Hou <[email protected]> --- drivers/gpu/drm/tegra/dc.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/tegra/dc.c b/drivers/gpu/drm/tegra/dc.c index 0b3fcc7011b3..bac78b57dcff 100644 --- a/drivers/gpu/drm/tegra/dc.c +++ b/drivers/gpu/drm/tegra/dc.c @@ -2878,8 +2878,14 @@ static int tegra_dc_runtime_suspend(struct host1x_client *client) return err; } - if (dc->soc->has_powergate) - tegra_pmc_powergate_power_off(dc->pmc, dc->powergate); + if (dc->soc->has_powergate) { + err = tegra_pmc_powergate_power_off(dc->pmc, dc->powergate); + if (err < 0) { + dev_err(dev, "failed to powergate partition: %d\n", err); + reset_control_deassert(dc->rst); + return err; + } + } clk_disable_unprepare(dc->clk); pm_runtime_put_sync(dev); -- 2.43.0
