public inbox for linux-tegra@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/3] drm/nouveau/tegra: Skip manual unpowergating when not necessary
@ 2017-06-09 12:25 Mikko Perttunen
       [not found] ` <20170609122541.31118-1-mperttunen-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
  0 siblings, 1 reply; 5+ messages in thread
From: Mikko Perttunen @ 2017-06-09 12:25 UTC (permalink / raw)
  To: bskeggs-H+wXaHxf7aLQT0dZR+AlfA,
	nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
  Cc: thierry.reding-Re5JQEeQqe8AvxtiuMwx3w,
	jonathanh-DDmLM1+adcrQT0dZR+AlfA, kholtta-DDmLM1+adcrQT0dZR+AlfA,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	linux-tegra-u79uwXL29TY76Z2rM5mHXA, Mikko Perttunen

On Tegra186, powergating is handled by the BPMP power domain provider
and the "legacy" powergating API is not available. Therefore skip
these calls if we are attached to a power domain.

Signed-off-by: Mikko Perttunen <mperttunen-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
---
 drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c
index 6474bd2a6d07..3d42cdbbe9c0 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c
@@ -51,10 +51,12 @@ nvkm_device_tegra_power_up(struct nvkm_device_tegra *tdev)
 	reset_control_assert(tdev->rst);
 	udelay(10);
 
-	ret = tegra_powergate_remove_clamping(TEGRA_POWERGATE_3D);
-	if (ret)
-		goto err_clamp;
-	udelay(10);
+	if (!tdev->pdev->dev.pm_domain) {
+		ret = tegra_powergate_remove_clamping(TEGRA_POWERGATE_3D);
+		if (ret)
+			goto err_clamp;
+		udelay(10);
+	}
 
 	reset_control_deassert(tdev->rst);
 	udelay(10);
-- 
2.13.0

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 2/3] drm/nouveau/tegra: Don't leave GPU in reset
       [not found] ` <20170609122541.31118-1-mperttunen-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
@ 2017-06-09 12:25   ` Mikko Perttunen
  2017-06-09 12:25   ` [PATCH 3/3] drm/nouveau: Skip vga_fini on non-PCI device Mikko Perttunen
  2017-06-12 22:52   ` [PATCH 1/3] drm/nouveau/tegra: Skip manual unpowergating when not necessary Ben Skeggs
  2 siblings, 0 replies; 5+ messages in thread
From: Mikko Perttunen @ 2017-06-09 12:25 UTC (permalink / raw)
  To: bskeggs-H+wXaHxf7aLQT0dZR+AlfA,
	nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
  Cc: thierry.reding-Re5JQEeQqe8AvxtiuMwx3w,
	jonathanh-DDmLM1+adcrQT0dZR+AlfA, kholtta-DDmLM1+adcrQT0dZR+AlfA,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	linux-tegra-u79uwXL29TY76Z2rM5mHXA, Mikko Perttunen

On Tegra186 systems with certain firmware revisions, leaving the GPU in
reset can cause a hang. To prevent this, don't leave the GPU in reset.

Signed-off-by: Mikko Perttunen <mperttunen-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
---
 drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c
index 3d42cdbbe9c0..189ed80e21ff 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c
@@ -82,9 +82,6 @@ nvkm_device_tegra_power_down(struct nvkm_device_tegra *tdev)
 {
 	int ret;
 
-	reset_control_assert(tdev->rst);
-	udelay(10);
-
 	clk_disable_unprepare(tdev->clk_pwr);
 	if (tdev->clk_ref)
 		clk_disable_unprepare(tdev->clk_ref);
-- 
2.13.0

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 3/3] drm/nouveau: Skip vga_fini on non-PCI device
       [not found] ` <20170609122541.31118-1-mperttunen-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
  2017-06-09 12:25   ` [PATCH 2/3] drm/nouveau/tegra: Don't leave GPU in reset Mikko Perttunen
@ 2017-06-09 12:25   ` Mikko Perttunen
  2017-06-12 22:52   ` [PATCH 1/3] drm/nouveau/tegra: Skip manual unpowergating when not necessary Ben Skeggs
  2 siblings, 0 replies; 5+ messages in thread
From: Mikko Perttunen @ 2017-06-09 12:25 UTC (permalink / raw)
  To: bskeggs-H+wXaHxf7aLQT0dZR+AlfA,
	nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
  Cc: thierry.reding-Re5JQEeQqe8AvxtiuMwx3w,
	jonathanh-DDmLM1+adcrQT0dZR+AlfA, kholtta-DDmLM1+adcrQT0dZR+AlfA,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	linux-tegra-u79uwXL29TY76Z2rM5mHXA, Mikko Perttunen

As with vga_init, this function doesn't make sense on non-PCI devices,
and the Thunderbolt check in it dereferences a NULL pointer in that
case. Add some code to skip this function when the device is not a PCI
device.

Signed-off-by: Mikko Perttunen <mperttunen-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
---
 drivers/gpu/drm/nouveau/nouveau_vga.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/gpu/drm/nouveau/nouveau_vga.c b/drivers/gpu/drm/nouveau/nouveau_vga.c
index a4aacbc0cec8..b19dd4dc7099 100644
--- a/drivers/gpu/drm/nouveau/nouveau_vga.c
+++ b/drivers/gpu/drm/nouveau/nouveau_vga.c
@@ -115,6 +115,10 @@ nouveau_vga_fini(struct nouveau_drm *drm)
 	struct drm_device *dev = drm->dev;
 	bool runtime = false;
 
+	/* only relevant for PCI devices */
+	if (!dev->pdev)
+		return;
+
 	vga_client_register(dev->pdev, NULL, NULL, NULL);
 
 	if (pci_is_thunderbolt_attached(dev->pdev))
-- 
2.13.0

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/3] drm/nouveau/tegra: Skip manual unpowergating when not necessary
       [not found] ` <20170609122541.31118-1-mperttunen-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
  2017-06-09 12:25   ` [PATCH 2/3] drm/nouveau/tegra: Don't leave GPU in reset Mikko Perttunen
  2017-06-09 12:25   ` [PATCH 3/3] drm/nouveau: Skip vga_fini on non-PCI device Mikko Perttunen
@ 2017-06-12 22:52   ` Ben Skeggs
       [not found]     ` <c8569914-3264-bd12-9418-8bdaa4aaa379-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
  2 siblings, 1 reply; 5+ messages in thread
From: Ben Skeggs @ 2017-06-12 22:52 UTC (permalink / raw)
  To: Mikko Perttunen, bskeggs-H+wXaHxf7aLQT0dZR+AlfA,
	nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
  Cc: linux-tegra-u79uwXL29TY76Z2rM5mHXA,
	thierry.reding-Re5JQEeQqe8AvxtiuMwx3w,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW


[-- Attachment #1.1.1: Type: text/plain, Size: 1307 bytes --]

On 06/09/2017 10:25 PM, Mikko Perttunen wrote:
> On Tegra186, powergating is handled by the BPMP power domain provider
> and the "legacy" powergating API is not available. Therefore skip
> these calls if we are attached to a power domain.
Thanks Mikko,

Taken all 3 patches into my tree.

Ben.

> 
> Signed-off-by: Mikko Perttunen <mperttunen-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
> ---
>  drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c | 10 ++++++----
>  1 file changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c
> index 6474bd2a6d07..3d42cdbbe9c0 100644
> --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c
> +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c
> @@ -51,10 +51,12 @@ nvkm_device_tegra_power_up(struct nvkm_device_tegra *tdev)
>  	reset_control_assert(tdev->rst);
>  	udelay(10);
>  
> -	ret = tegra_powergate_remove_clamping(TEGRA_POWERGATE_3D);
> -	if (ret)
> -		goto err_clamp;
> -	udelay(10);
> +	if (!tdev->pdev->dev.pm_domain) {
> +		ret = tegra_powergate_remove_clamping(TEGRA_POWERGATE_3D);
> +		if (ret)
> +			goto err_clamp;
> +		udelay(10);
> +	}
>  
>  	reset_control_deassert(tdev->rst);
>  	udelay(10);
> 


[-- Attachment #1.2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

[-- Attachment #2: Type: text/plain, Size: 154 bytes --]

_______________________________________________
Nouveau mailing list
Nouveau@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/nouveau

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/3] drm/nouveau/tegra: Skip manual unpowergating when not necessary
       [not found]     ` <c8569914-3264-bd12-9418-8bdaa4aaa379-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
@ 2017-06-13 12:43       ` Mikko Perttunen
  0 siblings, 0 replies; 5+ messages in thread
From: Mikko Perttunen @ 2017-06-13 12:43 UTC (permalink / raw)
  To: Ben Skeggs, Mikko Perttunen, bskeggs-H+wXaHxf7aLQT0dZR+AlfA,
	nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
  Cc: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	kholtta-DDmLM1+adcrQT0dZR+AlfA,
	thierry.reding-Re5JQEeQqe8AvxtiuMwx3w,
	linux-tegra-u79uwXL29TY76Z2rM5mHXA,
	jonathanh-DDmLM1+adcrQT0dZR+AlfA

On 13.06.2017 01:52, Ben Skeggs wrote:
> On 06/09/2017 10:25 PM, Mikko Perttunen wrote:
>> On Tegra186, powergating is handled by the BPMP power domain provider
>> and the "legacy" powergating API is not available. Therefore skip
>> these calls if we are attached to a power domain.
> Thanks Mikko,
>
> Taken all 3 patches into my tree.

Thanks!

>
> Ben.
>
>>
>> Signed-off-by: Mikko Perttunen <mperttunen-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
>> ---
>>  drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c | 10 ++++++----
>>  1 file changed, 6 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c
>> index 6474bd2a6d07..3d42cdbbe9c0 100644
>> --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c
>> +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c
>> @@ -51,10 +51,12 @@ nvkm_device_tegra_power_up(struct nvkm_device_tegra *tdev)
>>  	reset_control_assert(tdev->rst);
>>  	udelay(10);
>>
>> -	ret = tegra_powergate_remove_clamping(TEGRA_POWERGATE_3D);
>> -	if (ret)
>> -		goto err_clamp;
>> -	udelay(10);
>> +	if (!tdev->pdev->dev.pm_domain) {
>> +		ret = tegra_powergate_remove_clamping(TEGRA_POWERGATE_3D);
>> +		if (ret)
>> +			goto err_clamp;
>> +		udelay(10);
>> +	}
>>
>>  	reset_control_deassert(tdev->rst);
>>  	udelay(10);
>>
>

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2017-06-13 12:43 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-06-09 12:25 [PATCH 1/3] drm/nouveau/tegra: Skip manual unpowergating when not necessary Mikko Perttunen
     [not found] ` <20170609122541.31118-1-mperttunen-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2017-06-09 12:25   ` [PATCH 2/3] drm/nouveau/tegra: Don't leave GPU in reset Mikko Perttunen
2017-06-09 12:25   ` [PATCH 3/3] drm/nouveau: Skip vga_fini on non-PCI device Mikko Perttunen
2017-06-12 22:52   ` [PATCH 1/3] drm/nouveau/tegra: Skip manual unpowergating when not necessary Ben Skeggs
     [not found]     ` <c8569914-3264-bd12-9418-8bdaa4aaa379-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2017-06-13 12:43       ` Mikko Perttunen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox