[Nouveau] [PATCH 2/2] nv50: cosmetic cleanup in modesetting code.
Maxim Levitsky
maximlevitsky at gmail.com
Mon Oct 10 16:13:22 PDT 2011
Since I figured out the logic behind hardware mode values,
this renames variables adds comments to reflect this, etc...
Signed-off-by: Maxim Levitsky <maximlevitsky at gmail.com>
---
drivers/gpu/drm/nouveau/nv50_crtc.c | 88 ++++++++++++++++++-----------------
drivers/gpu/drm/nouveau/nv50_evo.h | 2 +-
2 files changed, 46 insertions(+), 44 deletions(-)
diff --git a/drivers/gpu/drm/nouveau/nv50_crtc.c b/drivers/gpu/drm/nouveau/nv50_crtc.c
index 36232d9..dc71913 100644
--- a/drivers/gpu/drm/nouveau/nv50_crtc.c
+++ b/drivers/gpu/drm/nouveau/nv50_crtc.c
@@ -622,53 +622,57 @@ nv50_crtc_mode_set(struct drm_crtc *crtc, struct drm_display_mode *mode,
struct nouveau_channel *evo = nv50_display(dev)->master;
struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc);
struct nouveau_connector *nv_connector = NULL;
- uint32_t hsync_dur, vsync_dur, hsync_start_to_end, vsync_start_to_end;
- uint32_t hunk1, vunk1, vunk2a, vunk2b;
- uint32_t vtotal, htotal;
int ret;
+ /* from start of sync to start of back porch*/
+ uint32_t hsbckp = adjusted_mode->hsync_end - adjusted_mode->hsync_start;
+ uint32_t vsbckp = adjusted_mode->vsync_end - adjusted_mode->vsync_start;
+
+ /* from start of sync to start of visible portion (end of back porch) */
+ uint32_t hsdisp = adjusted_mode->htotal - adjusted_mode->hsync_start;
+ uint32_t vsdisp = adjusted_mode->vtotal - adjusted_mode->vsync_start;
+
+ /* from start of sync to start of front porch (end of visible portion) */
+ uint32_t hsfrntp = hsdisp + adjusted_mode->hdisplay;
+ uint32_t vsfrntp = vsdisp + adjusted_mode->vdisplay;
+
+ /* from start of sync to start of another sync (end of front porch)*/
+ uint32_t htotal = adjusted_mode->htotal;
+ uint32_t vtotal = adjusted_mode->vtotal;
+
+ /* interlaced: from vsync to start of visible portion of _next_ field */
+ uint32_t vs2ndisp = vtotal + vsdisp ;
+
+ /* interlaced: from vsync to start of front porch of _next_ field */
+ uint32_t vs2nfrntp = vs2ndisp + adjusted_mode->vdisplay;
+
/* Find the connector attached to this CRTC */
nv_connector = nouveau_crtc_connector_get(nv_crtc);
-
*nv_crtc->mode = *adjusted_mode;
NV_DEBUG_KMS(dev, "index %d\n", nv_crtc->index);
- hsync_dur = adjusted_mode->hsync_end - adjusted_mode->hsync_start;
- vsync_dur = adjusted_mode->vsync_end - adjusted_mode->vsync_start;
- hsync_start_to_end = adjusted_mode->htotal - adjusted_mode->hsync_start;
- vsync_start_to_end = adjusted_mode->vtotal - adjusted_mode->vsync_start;
- /* I can't give this a proper name, anyone else can? */
- hunk1 = adjusted_mode->htotal -
- adjusted_mode->hsync_start + adjusted_mode->hdisplay;
- vunk1 = adjusted_mode->vtotal -
- adjusted_mode->vsync_start + adjusted_mode->vdisplay;
- /* Another strange value, this time only for interlaced adjusted_modes. */
- vunk2a = 2 * adjusted_mode->vtotal -
- adjusted_mode->vsync_start + adjusted_mode->vdisplay;
- vunk2b = adjusted_mode->vtotal -
- adjusted_mode->vsync_start + adjusted_mode->vtotal;
- vtotal = adjusted_mode->vtotal;
- htotal = adjusted_mode->htotal;
-
if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) {
- vsync_dur /= 2;
- vsync_start_to_end /= 2;
- vunk1 /= 2;
- vunk2a /= 2;
- vunk2b /= 2;
- /* magic */
+
+ vsbckp /= 2;
+ vsdisp /= 2;
+ vsfrntp /= 2;
+ vs2nfrntp /= 2;
+ vs2ndisp /= 2;
+
+ /* magic ??? */
if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN) {
- vsync_start_to_end -= 1;
- vunk1 -= 1;
- vunk2a -= 1;
- vunk2b -= 1;
+ vsdisp -= 1;
+ vsfrntp -= 1;
+ vs2nfrntp -= 1;
+ vs2ndisp -= 1;
}
+
} else if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN) {
vtotal *= 2;
- vsync_dur *= 2;
- vsync_start_to_end *= 2;
- vunk1 *= 2;
+ vsbckp *= 2;
+ vsdisp *= 2;
+ vsfrntp *= 2;
}
ret = RING_SPACE(evo, 17);
@@ -679,18 +683,16 @@ nv50_crtc_mode_set(struct drm_crtc *crtc, struct drm_display_mode *mode,
OUT_RING(evo, adjusted_mode->clock | 0x800000);
OUT_RING(evo, (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) ? 2 : 0);
- BEGIN_RING(evo, 0, NV50_EVO_CRTC(nv_crtc->index, DISPLAY_START), 5);
+ BEGIN_RING(evo, 0, NV50_EVO_CRTC(nv_crtc->index, DISPLAY_START),
+ (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) ? 6 : 5);
OUT_RING(evo, 0);
OUT_RING(evo, (vtotal << 16) | htotal);
- OUT_RING(evo, (vsync_dur - 1) << 16 | (hsync_dur - 1));
- OUT_RING(evo, (vsync_start_to_end - 1) << 16 |
- (hsync_start_to_end - 1));
- OUT_RING(evo, (vunk1 - 1) << 16 | (hunk1 - 1));
+ OUT_RING(evo, (vsbckp - 1) << 16 | (hsbckp - 1));
+ OUT_RING(evo, (vsdisp - 1) << 16 | (hsdisp - 1));
+ OUT_RING(evo, (vsfrntp - 1) << 16 | (hsfrntp - 1));
- if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) {
- BEGIN_RING(evo, 0, NV50_EVO_CRTC(nv_crtc->index, UNK0824), 1);
- OUT_RING(evo, (vunk2b - 1) << 16 | (vunk2a - 1));
- }
+ if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE)
+ OUT_RING(evo, (vs2ndisp - 1) << 16 | (vs2nfrntp - 1));
BEGIN_RING(evo, 0, NV50_EVO_CRTC(nv_crtc->index, UNK082C), 1);
OUT_RING(evo, 0);
diff --git a/drivers/gpu/drm/nouveau/nv50_evo.h b/drivers/gpu/drm/nouveau/nv50_evo.h
index 3860ca6..3131553 100644
--- a/drivers/gpu/drm/nouveau/nv50_evo.h
+++ b/drivers/gpu/drm/nouveau/nv50_evo.h
@@ -63,7 +63,7 @@
#define NV50_EVO_CRTC_DISPLAY_TOTAL 0x00000814
#define NV50_EVO_CRTC_SYNC_DURATION 0x00000818
#define NV50_EVO_CRTC_SYNC_START_TO_BLANK_END 0x0000081c
-#define NV50_EVO_CRTC_UNK0820 0x00000820
+#define NV50_EVO_CRTC_SYNC_START_TO_DISP_END 0x00000820
#define NV50_EVO_CRTC_UNK0824 0x00000824
#define NV50_EVO_CRTC_UNK082C 0x0000082c
#define NV50_EVO_CRTC_CLUT_MODE 0x00000840
--
1.7.4.1
More information about the Nouveau
mailing list