[Nouveau] [PATCH 1/8] nv50/display: Set VBLANK time in modeset script
Ben Skeggs
skeggsb at gmail.com
Fri Sep 5 15:49:03 PDT 2014
On Fri, Sep 5, 2014 at 12:58 AM, Roy Spliet <rspliet at eclipso.eu> wrote:
> Solves blinking on reclocking memory. The value set is an underestimate, but with non-reduced vblanking this should give us plenty of time
Hey Roy,
I've merged all (squashed the kepler change into the commit where it's
needed too) except this patch, which needs to be rebased on top of
3.17-rc. There's one minor nitpick inline too.
Please also try and watch the wrapping of commit messages, I added
newlines to make it easier to read them in git-log output.
Thanks,
Ben.
>
> Signed-off-by: Roy Spliet <rspliet at eclipso.eu>
> ---
> drivers/gpu/drm/nouveau/nv50_display.c | 12 +++++++++---
> 1 file changed, 9 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c
> index 4c534b7..cfa7ecf 100644
> --- a/drivers/gpu/drm/nouveau/nv50_display.c
> +++ b/drivers/gpu/drm/nouveau/nv50_display.c
> @@ -1070,7 +1070,7 @@ nv50_crtc_mode_set(struct drm_crtc *crtc, struct drm_display_mode *umode,
> u32 vscan = (mode->flags & DRM_MODE_FLAG_DBLSCAN) ? 2 : 1;
> u32 hactive, hsynce, hbackp, hfrontp, hblanke, hblanks;
> u32 vactive, vsynce, vbackp, vfrontp, vblanke, vblanks;
> - u32 vblan2e = 0, vblan2s = 1;
> + u32 vblan2e = 0, vblan2s = 1, vblankus;
> u32 *push;
> int ret;
>
> @@ -1087,6 +1087,7 @@ nv50_crtc_mode_set(struct drm_crtc *crtc, struct drm_display_mode *umode,
> vblanke = vsynce + vbackp;
> vfrontp = (mode->vsync_start - mode->vdisplay) * vscan / ilace;
> vblanks = vactive - vfrontp - 1;
> +
> if (mode->flags & DRM_MODE_FLAG_INTERLACE) {
> vblan2e = vactive + vsynce + vbackp;
> vblan2s = vblan2e + (mode->vdisplay * vscan / ilace);
> @@ -1100,17 +1101,22 @@ nv50_crtc_mode_set(struct drm_crtc *crtc, struct drm_display_mode *umode,
> push = evo_wait(mast, 64);
> if (push) {
> if (nv50_vers(mast) < NVD0_DISP_MAST_CLASS) {
> + /* XXX: Safe underestimate, even "0" works */
> + vblankus = (vactive - mode->vdisplay - 2) * hactive;
> + vblankus *= 1000;
> + vblankus /= mode->clock;
When you rebase, can you move this calculation into the common code please :)
> +
> evo_mthd(push, 0x0804 + (nv_crtc->index * 0x400), 2);
> evo_data(push, 0x00800000 | mode->clock);
> evo_data(push, (ilace == 2) ? 2 : 0);
> - evo_mthd(push, 0x0810 + (nv_crtc->index * 0x400), 6);
> + evo_mthd(push, 0x0810 + (nv_crtc->index * 0x400), 8);
> evo_data(push, 0x00000000);
> evo_data(push, (vactive << 16) | hactive);
> evo_data(push, ( vsynce << 16) | hsynce);
> evo_data(push, (vblanke << 16) | hblanke);
> evo_data(push, (vblanks << 16) | hblanks);
> evo_data(push, (vblan2e << 16) | vblan2s);
> - evo_mthd(push, 0x082c + (nv_crtc->index * 0x400), 1);
> + evo_data(push, vblankus);
> evo_data(push, 0x00000000);
> evo_mthd(push, 0x0900 + (nv_crtc->index * 0x400), 2);
> evo_data(push, 0x00000311);
> --
> 1.9.3
>
>
>
More information about the Nouveau
mailing list