All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] drm/nv50-/disp: Use output specific mask in interrupt
@ 2013-07-02 13:44 Emil Velikov
  2013-07-16 11:04 ` Emil Velikov
  0 siblings, 1 reply; 2+ messages in thread
From: Emil Velikov @ 2013-07-02 13:44 UTC (permalink / raw)
  To: nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
  Cc: stable-u79uwXL29TY76Z2rM5mHXA, "[3.9+]", Ben Skeggs

The commit

   commit 476e84e126171d809f9c0b5d97137f5055f95ca8
   Author: Ben Skeggs <bskeggs-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
   Date:   Mon Feb 11 09:24:23 2013 +1000

       drm/nv50-/disp: initial supervisor support for off-chip encoders

changed the write mask in one of the interrupt functions for on-chip encoders,
causing a regression in certain VGA dual-head setups. This commit reintroduces
the mask thus resolving the regression

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=66129
Reported-and-Tested-by: Yves-Alexis <corsac-8fiUuRrzOP0dnm+yROfE0A@public.gmane.org>
Cc: stable-u79uwXL29TY76Z2rM5mHXA@public.gmane.org [3.9+]
CC: Ben Skeggs <bskeggs-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Signed-off-by: Emil Velikov <emil.l.velikov-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
---
 drivers/gpu/drm/nouveau/core/engine/disp/nv50.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/nouveau/core/engine/disp/nv50.c b/drivers/gpu/drm/nouveau/core/engine/disp/nv50.c
index 8b42f45..7ffe2f3 100644
--- a/drivers/gpu/drm/nouveau/core/engine/disp/nv50.c
+++ b/drivers/gpu/drm/nouveau/core/engine/disp/nv50.c
@@ -1107,6 +1107,7 @@ nv50_disp_intr_unk20_2(struct nv50_disp_priv *priv, int head)
 	u32 pclk = nv_rd32(priv, 0x610ad0 + (head * 0x540)) & 0x3fffff;
 	u32 hval, hreg = 0x614200 + (head * 0x800);
 	u32 oval, oreg;
+	u32 mask;
 	u32 conf = exec_clkcmp(priv, head, 0xff, pclk, &outp);
 	if (conf != ~0) {
 		if (outp.location == 0 && outp.type == DCB_OUTPUT_DP) {
@@ -1133,6 +1134,7 @@ nv50_disp_intr_unk20_2(struct nv50_disp_priv *priv, int head)
 			oreg = 0x614280 + (ffs(outp.or) - 1) * 0x800;
 			oval = 0x00000000;
 			hval = 0x00000000;
+			mask = 0xffffffff;
 		} else
 		if (!outp.location) {
 			if (outp.type == DCB_OUTPUT_DP)
@@ -1140,14 +1142,16 @@ nv50_disp_intr_unk20_2(struct nv50_disp_priv *priv, int head)
 			oreg = 0x614300 + (ffs(outp.or) - 1) * 0x800;
 			oval = (conf & 0x0100) ? 0x00000101 : 0x00000000;
 			hval = 0x00000000;
+			mask = 0x00000707;
 		} else {
 			oreg = 0x614380 + (ffs(outp.or) - 1) * 0x800;
 			oval = 0x00000001;
 			hval = 0x00000001;
+			mask = 0x00000707;
 		}
 
 		nv_mask(priv, hreg, 0x0000000f, hval);
-		nv_mask(priv, oreg, 0x00000707, oval);
+		nv_mask(priv, oreg, mask, oval);
 	}
 }
 
-- 
1.8.3.2

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

* Re: [PATCH] drm/nv50-/disp: Use output specific mask in interrupt
  2013-07-02 13:44 [PATCH] drm/nv50-/disp: Use output specific mask in interrupt Emil Velikov
@ 2013-07-16 11:04 ` Emil Velikov
  0 siblings, 0 replies; 2+ messages in thread
From: Emil Velikov @ 2013-07-16 11:04 UTC (permalink / raw)
  To: stable; +Cc: Emil Velikov, nouveau, Ben Skeggs


Glad to see that the patch has been included in the 3.11 branch,
although as Yves-Alexis mentioned in the bugreport it does not seem to
be part of 3.9 or 3.10

Is there any issues in the patch, or did it simply got lost in the queue ?

Regards
Emil

On 02/07/13 14:44, Emil Velikov wrote:
> The commit
> 
>    commit 476e84e126171d809f9c0b5d97137f5055f95ca8
>    Author: Ben Skeggs <bskeggs@redhat.com>
>    Date:   Mon Feb 11 09:24:23 2013 +1000
> 
>        drm/nv50-/disp: initial supervisor support for off-chip encoders
> 
> changed the write mask in one of the interrupt functions for on-chip encoders,
> causing a regression in certain VGA dual-head setups. This commit reintroduces
> the mask thus resolving the regression
> 
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=66129
> Reported-and-Tested-by: Yves-Alexis <corsac@debian.org>
> Cc: stable@vger.kernel.org [3.9+]
> CC: Ben Skeggs <bskeggs@redhat.com>
> Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
> ---
>  drivers/gpu/drm/nouveau/core/engine/disp/nv50.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/nouveau/core/engine/disp/nv50.c b/drivers/gpu/drm/nouveau/core/engine/disp/nv50.c
> index 8b42f45..7ffe2f3 100644
> --- a/drivers/gpu/drm/nouveau/core/engine/disp/nv50.c
> +++ b/drivers/gpu/drm/nouveau/core/engine/disp/nv50.c
> @@ -1107,6 +1107,7 @@ nv50_disp_intr_unk20_2(struct nv50_disp_priv *priv, int head)
>  	u32 pclk = nv_rd32(priv, 0x610ad0 + (head * 0x540)) & 0x3fffff;
>  	u32 hval, hreg = 0x614200 + (head * 0x800);
>  	u32 oval, oreg;
> +	u32 mask;
>  	u32 conf = exec_clkcmp(priv, head, 0xff, pclk, &outp);
>  	if (conf != ~0) {
>  		if (outp.location == 0 && outp.type == DCB_OUTPUT_DP) {
> @@ -1133,6 +1134,7 @@ nv50_disp_intr_unk20_2(struct nv50_disp_priv *priv, int head)
>  			oreg = 0x614280 + (ffs(outp.or) - 1) * 0x800;
>  			oval = 0x00000000;
>  			hval = 0x00000000;
> +			mask = 0xffffffff;
>  		} else
>  		if (!outp.location) {
>  			if (outp.type == DCB_OUTPUT_DP)
> @@ -1140,14 +1142,16 @@ nv50_disp_intr_unk20_2(struct nv50_disp_priv *priv, int head)
>  			oreg = 0x614300 + (ffs(outp.or) - 1) * 0x800;
>  			oval = (conf & 0x0100) ? 0x00000101 : 0x00000000;
>  			hval = 0x00000000;
> +			mask = 0x00000707;
>  		} else {
>  			oreg = 0x614380 + (ffs(outp.or) - 1) * 0x800;
>  			oval = 0x00000001;
>  			hval = 0x00000001;
> +			mask = 0x00000707;
>  		}
>  
>  		nv_mask(priv, hreg, 0x0000000f, hval);
> -		nv_mask(priv, oreg, 0x00000707, oval);
> +		nv_mask(priv, oreg, mask, oval);
>  	}
>  }
>  
> 

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

end of thread, other threads:[~2013-07-16 11:04 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-07-02 13:44 [PATCH] drm/nv50-/disp: Use output specific mask in interrupt Emil Velikov
2013-07-16 11:04 ` Emil Velikov

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.