Bastian Beranek
2021-Jan-18 12:40 UTC
[Nouveau] [PATCH] drm/gpu/nouveau/dispnv50: Restore pushing of all data.
Commit f844eb485eb056ad3b67e49f95cbc6c685a73db4 introduced a regression for
NV50, which lead to visual artifacts, tearing and eventual crashes.
In the changes of f844eb485eb056ad3b67e49f95cbc6c685a73db4 only the first line
was correctly translated to the new NVIDIA header macros:
- PUSH_NVSQ(push, NV827C, 0x0110, 0,
- 0x0114, 0);
+ PUSH_MTHD(push, NV827C, SET_PROCESSING,
+ NVDEF(NV827C, SET_PROCESSING, USE_GAIN_OFS, DISABLE));
The lower part ("0x0114, 0") was probably omitted by accident.
This patch restores the push of the missing data and fixes the regression.
Signed-off-by: Bastian Beranek <bastian.beischer at rwth-aachen.de>
Fixes: f844eb485eb056ad3b67e49f95cbc6c685a73db4
Link: https://gitlab.freedesktop.org/drm/nouveau/-/issues/14
---
drivers/gpu/drm/nouveau/dispnv50/base827c.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/nouveau/dispnv50/base827c.c
b/drivers/gpu/drm/nouveau/dispnv50/base827c.c
index 18d34096f125..093d4ba6910e 100644
--- a/drivers/gpu/drm/nouveau/dispnv50/base827c.c
+++ b/drivers/gpu/drm/nouveau/dispnv50/base827c.c
@@ -49,7 +49,11 @@ base827c_image_set(struct nv50_wndw *wndw, struct
nv50_wndw_atom *asyw)
NVVAL(NV827C, SET_CONVERSION, OFS, 0x64));
} else {
PUSH_MTHD(push, NV827C, SET_PROCESSING,
- NVDEF(NV827C, SET_PROCESSING, USE_GAIN_OFS, DISABLE));
+ NVDEF(NV827C, SET_PROCESSING, USE_GAIN_OFS, DISABLE),
+
+ SET_CONVERSION,
+ NVVAL(NV827C, SET_CONVERSION, GAIN, 0) |
+ NVVAL(NV827C, SET_CONVERSION, OFS, 0));
}
PUSH_MTHD(push, NV827C, SURFACE_SET_OFFSET(0, 0), asyw->image.offset[0]
>> 8,
--
2.30.0
Bastian Beranek
2021-Jan-21 11:11 UTC
[Nouveau] [PATCH v2] drm/gpu/nouveau/dispnv50: Restore pushing of all data.
Commit f844eb485eb056ad3b67e49f95cbc6c685a73db4 introduced a regression for
NV50, which lead to visual artifacts, tearing and eventual crashes.
In the changes of f844eb485eb056ad3b67e49f95cbc6c685a73db4 only the first line
was correctly translated to the new NVIDIA header macros:
- PUSH_NVSQ(push, NV827C, 0x0110, 0,
- 0x0114, 0);
+ PUSH_MTHD(push, NV827C, SET_PROCESSING,
+ NVDEF(NV827C, SET_PROCESSING, USE_GAIN_OFS, DISABLE));
The lower part ("0x0114, 0") was probably omitted by accident.
This patch restores the push of the missing data and fixes the regression.
Signed-off-by: Bastian Beranek <bastian.beischer at rwth-aachen.de>
Fixes: f844eb485eb056ad3b67e49f95cbc6c685a73db4
Link: https://gitlab.freedesktop.org/drm/nouveau/-/issues/14
---
drivers/gpu/drm/nouveau/dispnv50/base507c.c | 6 +++++-
drivers/gpu/drm/nouveau/dispnv50/base827c.c | 6 +++++-
2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/nouveau/dispnv50/base507c.c
b/drivers/gpu/drm/nouveau/dispnv50/base507c.c
index 302d4e6fc52f..2d1825a5d751 100644
--- a/drivers/gpu/drm/nouveau/dispnv50/base507c.c
+++ b/drivers/gpu/drm/nouveau/dispnv50/base507c.c
@@ -88,7 +88,11 @@ base507c_image_set(struct nv50_wndw *wndw, struct
nv50_wndw_atom *asyw)
NVVAL(NV507C, SET_CONVERSION, OFS, 0x64));
} else {
PUSH_MTHD(push, NV507C, SET_PROCESSING,
- NVDEF(NV507C, SET_PROCESSING, USE_GAIN_OFS, DISABLE));
+ NVDEF(NV507C, SET_PROCESSING, USE_GAIN_OFS, DISABLE)),
+
+ SET_CONVERSION,
+ NVVAL(NV507C, SET_CONVERSION, GAIN, 0) |
+ NVVAL(NV507C, SET_CONVERSION, OFS, 0));
}
PUSH_MTHD(push, NV507C, SURFACE_SET_OFFSET(0, 0), asyw->image.offset[0]
>> 8);
diff --git a/drivers/gpu/drm/nouveau/dispnv50/base827c.c
b/drivers/gpu/drm/nouveau/dispnv50/base827c.c
index 18d34096f125..093d4ba6910e 100644
--- a/drivers/gpu/drm/nouveau/dispnv50/base827c.c
+++ b/drivers/gpu/drm/nouveau/dispnv50/base827c.c
@@ -49,7 +49,11 @@ base827c_image_set(struct nv50_wndw *wndw, struct
nv50_wndw_atom *asyw)
NVVAL(NV827C, SET_CONVERSION, OFS, 0x64));
} else {
PUSH_MTHD(push, NV827C, SET_PROCESSING,
- NVDEF(NV827C, SET_PROCESSING, USE_GAIN_OFS, DISABLE));
+ NVDEF(NV827C, SET_PROCESSING, USE_GAIN_OFS, DISABLE),
+
+ SET_CONVERSION,
+ NVVAL(NV827C, SET_CONVERSION, GAIN, 0) |
+ NVVAL(NV827C, SET_CONVERSION, OFS, 0));
}
PUSH_MTHD(push, NV827C, SURFACE_SET_OFFSET(0, 0), asyw->image.offset[0]
>> 8,
--
2.30.0
Karol Herbst
2021-Jan-21 11:14 UTC
[Nouveau] [PATCH v2] drm/gpu/nouveau/dispnv50: Restore pushing of all data.
ohh, at first I thought this was a resend, but it's in a different file :) On Thu, Jan 21, 2021 at 12:11 PM Bastian Beranek <bastian.beischer at rwth-aachen.de> wrote:> > Commit f844eb485eb056ad3b67e49f95cbc6c685a73db4 introduced a regression for > NV50, which lead to visual artifacts, tearing and eventual crashes. > > In the changes of f844eb485eb056ad3b67e49f95cbc6c685a73db4 only the first line > was correctly translated to the new NVIDIA header macros: > > - PUSH_NVSQ(push, NV827C, 0x0110, 0, > - 0x0114, 0); > + PUSH_MTHD(push, NV827C, SET_PROCESSING, > + NVDEF(NV827C, SET_PROCESSING, USE_GAIN_OFS, DISABLE)); > > The lower part ("0x0114, 0") was probably omitted by accident. > > This patch restores the push of the missing data and fixes the regression. > > Signed-off-by: Bastian Beranek <bastian.beischer at rwth-aachen.de> > Fixes: f844eb485eb056ad3b67e49f95cbc6c685a73db4 > Link: https://gitlab.freedesktop.org/drm/nouveau/-/issues/14 > --- > drivers/gpu/drm/nouveau/dispnv50/base507c.c | 6 +++++- > drivers/gpu/drm/nouveau/dispnv50/base827c.c | 6 +++++- > 2 files changed, 10 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/nouveau/dispnv50/base507c.c b/drivers/gpu/drm/nouveau/dispnv50/base507c.c > index 302d4e6fc52f..2d1825a5d751 100644 > --- a/drivers/gpu/drm/nouveau/dispnv50/base507c.c > +++ b/drivers/gpu/drm/nouveau/dispnv50/base507c.c > @@ -88,7 +88,11 @@ base507c_image_set(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw) > NVVAL(NV507C, SET_CONVERSION, OFS, 0x64)); > } else { > PUSH_MTHD(push, NV507C, SET_PROCESSING, > - NVDEF(NV507C, SET_PROCESSING, USE_GAIN_OFS, DISABLE)); > + NVDEF(NV507C, SET_PROCESSING, USE_GAIN_OFS, DISABLE)), > + > + SET_CONVERSION, > + NVVAL(NV507C, SET_CONVERSION, GAIN, 0) | > + NVVAL(NV507C, SET_CONVERSION, OFS, 0)); > } > > PUSH_MTHD(push, NV507C, SURFACE_SET_OFFSET(0, 0), asyw->image.offset[0] >> 8); > diff --git a/drivers/gpu/drm/nouveau/dispnv50/base827c.c b/drivers/gpu/drm/nouveau/dispnv50/base827c.c > index 18d34096f125..093d4ba6910e 100644 > --- a/drivers/gpu/drm/nouveau/dispnv50/base827c.c > +++ b/drivers/gpu/drm/nouveau/dispnv50/base827c.c > @@ -49,7 +49,11 @@ base827c_image_set(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw) > NVVAL(NV827C, SET_CONVERSION, OFS, 0x64)); > } else { > PUSH_MTHD(push, NV827C, SET_PROCESSING, > - NVDEF(NV827C, SET_PROCESSING, USE_GAIN_OFS, DISABLE)); > + NVDEF(NV827C, SET_PROCESSING, USE_GAIN_OFS, DISABLE), > + > + SET_CONVERSION, > + NVVAL(NV827C, SET_CONVERSION, GAIN, 0) | > + NVVAL(NV827C, SET_CONVERSION, OFS, 0)); > } > > PUSH_MTHD(push, NV827C, SURFACE_SET_OFFSET(0, 0), asyw->image.offset[0] >> 8, > -- > 2.30.0 >