linux/drivers/soc/tegra
Dmitry Osipenko 187c001c49 soc/tegra: pmc: Fix completion of power-gate toggling
[ Upstream commit c45e66a6b9 ]

The SW-initiated power gate toggling is dropped by PMC if there is
contention with a HW-initiated toggling, i.e. when one of CPU cores is
gated by cpuidle driver. Software should retry the toggling after 10
microseconds on Tegra20/30 SoCs, hence add the retrying. On Tegra114+ the
toggling method was changed in hardware, the TOGGLE_START bit indicates
whether PMC is busy or could accept the command to toggle, hence handle
that bit properly.

The problem pops up after enabling dynamic power gating of 3D hardware,
where 3D power domain fails to turn on/off "randomly".

The programming sequence and quirks are documented in TRMs, but PMC
driver obliviously re-used the Tegra20 logic for Tegra30+, which strikes
back now. The 10 microseconds and other timeouts aren't documented in TRM,
they are taken from downstream kernel.

Link: https://nv-tegra.nvidia.com/gitweb/?p=linux-2.6.git;a=commit;h=311dd1c318b70e93bcefec15456a10ff2b9eb0ff
Link: https://nv-tegra.nvidia.com/gitweb/?p=linux-3.10.git;a=commit;h=7f36693c47cb23730a6b2822e0975be65fb0c51d
Tested-by: Peter Geis <pgwipeout@gmail.com> # Ouya T30
Tested-by: Nicolas Chauvet <kwizart@gmail.com> # PAZ00 T20 and TK1 T124
Tested-by: Matt Merhar <mattmerhar@protonmail.com> # Ouya T30
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
Signed-off-by: Thierry Reding <treding@nvidia.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
History 2021-05-11 14:47:18 +02:00
..
fuse soc/tegra: fuse: Fix index bug in get_process_id 2020-12-26 16:02:38 +01:00
common.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
flowctrl.c remove ioremap_nocache and devm_ioremap_nocache 2020-01-06 09:45:59 +01:00
Kconfig arm64: tegra: Initial Tegra234 VDK support 2020-09-18 15:58:07 +02:00
Makefile soc/tegra: regulators: Add regulators coupler for Tegra30 2019-10-29 14:02:59 +01:00
pmc.c soc/tegra: pmc: Fix completion of power-gate toggling 2021-05-11 14:47:18 +02:00
powergate-bpmp.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 288 2019-06-05 17:36:37 +02:00
regulators-tegra20.c soc/tegra: regulators: Do nothing if voltage is unchanged 2020-01-10 15:42:58 +01:00
regulators-tegra30.c soc/tegra: regulators: Do nothing if voltage is unchanged 2020-01-10 15:42:58 +01:00