OSDN Git Service

drm/nouveau/tegra: Avoid pulsing reset twice
authorThierry Reding <treding@nvidia.com>
Mon, 9 Dec 2019 12:00:01 +0000 (13:00 +0100)
committerBen Skeggs <bskeggs@redhat.com>
Wed, 15 Jan 2020 00:49:58 +0000 (10:49 +1000)
When the GPU powergate is controlled by a generic power domain provider,
the reset will automatically be asserted and deasserted as part of the
power-ungating procedure.

On some Jetson TX2 boards, doing an additional assert and deassert of
the GPU outside of the power-ungate procedure can cause the GPU to go
into a bad state where the memory interface can no longer access system
memory.

Signed-off-by: Thierry Reding <treding@nvidia.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c

index 0e372a1..747a775 100644 (file)
@@ -52,18 +52,18 @@ nvkm_device_tegra_power_up(struct nvkm_device_tegra *tdev)
        clk_set_rate(tdev->clk_pwr, 204000000);
        udelay(10);
 
-       reset_control_assert(tdev->rst);
-       udelay(10);
-
        if (!tdev->pdev->dev.pm_domain) {
+               reset_control_assert(tdev->rst);
+               udelay(10);
+
                ret = tegra_powergate_remove_clamping(TEGRA_POWERGATE_3D);
                if (ret)
                        goto err_clamp;
                udelay(10);
-       }
 
-       reset_control_deassert(tdev->rst);
-       udelay(10);
+               reset_control_deassert(tdev->rst);
+               udelay(10);
+       }
 
        return 0;