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 >