* [PATCH 1/2] drm/i915/tv: Fix adjusted_mode dotclock for interlaced modes @ 2019-01-29 14:19 Ville Syrjala 2019-01-29 14:19 ` [PATCH 2/2] drm/i915/tv: Bypass the vertical filter if possible Ville Syrjala ` (2 more replies) 0 siblings, 3 replies; 5+ messages in thread From: Ville Syrjala @ 2019-01-29 14:19 UTC (permalink / raw) To: intel-gfx From: Ville Syrjälä <ville.syrjala@linux.intel.com> intel_tv_mode_to_mode() assumes the pipe will be in progressive fetch mode, and thus when programming the pipe into interlaced mode we have to halve the calculated dotclock to get the correct field duration. This becomes more important when we start to program the pipe into interlaced mode on i965gm as we depend on the timestamps to get accurate frame counter values. Withot halving the clock our guesstimated frame counter would tick at twice the expected speed. Cc: Imre Deak <imre.deak@intel.com> Fixes: 690157f0a9e7 ("drm/i915/tv: Fix >1024 modes on gen3") Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> --- drivers/gpu/drm/i915/intel_tv.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c index 751b88dde18e..3a5682f44e55 100644 --- a/drivers/gpu/drm/i915/intel_tv.c +++ b/drivers/gpu/drm/i915/intel_tv.c @@ -1150,6 +1150,8 @@ intel_tv_get_config(struct intel_encoder *encoder, ypos, mode.vdisplay - ysize - ypos); adjusted_mode->crtc_clock = mode.clock; + if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) + adjusted_mode->crtc_clock /= 2; /* pixel counter doesn't work on i965gm TV output */ if (IS_I965GM(dev_priv)) @@ -1214,8 +1216,11 @@ intel_tv_compute_config(struct intel_encoder *encoder, tv_conn_state->bypass_vfilter = true; - if (!tv_mode->progressive) + if (!tv_mode->progressive) { + adjusted_mode->clock /= 2; + adjusted_mode->crtc_clock /= 2; adjusted_mode->flags |= DRM_MODE_FLAG_INTERLACE; + } } else { tv_conn_state->margins.top = conn_state->tv.margins.top; tv_conn_state->margins.bottom = conn_state->tv.margins.bottom; -- 2.19.2 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/2] drm/i915/tv: Bypass the vertical filter if possible 2019-01-29 14:19 [PATCH 1/2] drm/i915/tv: Fix adjusted_mode dotclock for interlaced modes Ville Syrjala @ 2019-01-29 14:19 ` Ville Syrjala 2019-01-29 14:49 ` Daniel Vetter 2019-01-29 15:38 ` ✓ Fi.CI.BAT: success for series starting with [1/2] drm/i915/tv: Fix adjusted_mode dotclock for interlaced modes Patchwork 2019-01-29 19:11 ` ✓ Fi.CI.IGT: " Patchwork 2 siblings, 1 reply; 5+ messages in thread From: Ville Syrjala @ 2019-01-29 14:19 UTC (permalink / raw) To: intel-gfx From: Ville Syrjälä <ville.syrjala@linux.intel.com> Let's switch the pipe into interlaced mode and switch off the TV encoder vertical filter if the pipe vdisplay matches the TV YSIZE exactly. While I didn't measure it I presume this might reduce the power consumption a little bit, and the pixel rate is halved as the pipe will now fetching in interlaced mode rather than in progressive mode (effectively the same difference as between IF-ID vs. PF-ID pfit modes on more modern hardware) so a bit easier on the memory bandwidth. Cc: Imre Deak <imre.deak@intel.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> --- drivers/gpu/drm/i915/intel_tv.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c index 3a5682f44e55..3924c4944e1f 100644 --- a/drivers/gpu/drm/i915/intel_tv.c +++ b/drivers/gpu/drm/i915/intel_tv.c @@ -1159,6 +1159,22 @@ intel_tv_get_config(struct intel_encoder *encoder, I915_MODE_FLAG_USE_SCANLINE_COUNTER; } +static bool intel_tv_source_too_wide(struct drm_i915_private *dev_priv, + int hdisplay) +{ + return IS_GEN(dev_priv, 3) && hdisplay > 1024; +} + +static bool intel_tv_vert_scaling(const struct drm_display_mode *tv_mode, + const struct drm_connector_state *conn_state, + int vdisplay) +{ + return tv_mode->crtc_vdisplay - + conn_state->tv.margins.top - + conn_state->tv.margins.bottom != + vdisplay; +} + static int intel_tv_compute_config(struct intel_encoder *encoder, struct intel_crtc_state *pipe_config, @@ -1189,7 +1205,8 @@ intel_tv_compute_config(struct intel_encoder *encoder, intel_tv_mode_to_mode(adjusted_mode, tv_mode); drm_mode_set_crtcinfo(adjusted_mode, 0); - if (IS_GEN(dev_priv, 3) && hdisplay > 1024) { + if (intel_tv_source_too_wide(dev_priv, hdisplay) || + !intel_tv_vert_scaling(adjusted_mode, conn_state, vdisplay)) { int extra, top, bottom; extra = adjusted_mode->crtc_vdisplay - vdisplay; -- 2.19.2 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] drm/i915/tv: Bypass the vertical filter if possible 2019-01-29 14:19 ` [PATCH 2/2] drm/i915/tv: Bypass the vertical filter if possible Ville Syrjala @ 2019-01-29 14:49 ` Daniel Vetter 0 siblings, 0 replies; 5+ messages in thread From: Daniel Vetter @ 2019-01-29 14:49 UTC (permalink / raw) To: Ville Syrjala; +Cc: intel-gfx On Tue, Jan 29, 2019 at 04:19:13PM +0200, Ville Syrjala wrote: > From: Ville Syrjälä <ville.syrjala@linux.intel.com> > > Let's switch the pipe into interlaced mode and switch off > the TV encoder vertical filter if the pipe vdisplay > matches the TV YSIZE exactly. > > While I didn't measure it I presume this might reduce > the power consumption a little bit, and the pixel rate > is halved as the pipe will now fetching in interlaced > mode rather than in progressive mode (effectively the > same difference as between IF-ID vs. PF-ID pfit modes > on more modern hardware) so a bit easier on the memory > bandwidth. > > Cc: Imre Deak <imre.deak@intel.com> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Didn't bother checking docs, but both patches look reasonable and I don't think are going to make anything worse really. Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch> > --- > drivers/gpu/drm/i915/intel_tv.c | 19 ++++++++++++++++++- > 1 file changed, 18 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c > index 3a5682f44e55..3924c4944e1f 100644 > --- a/drivers/gpu/drm/i915/intel_tv.c > +++ b/drivers/gpu/drm/i915/intel_tv.c > @@ -1159,6 +1159,22 @@ intel_tv_get_config(struct intel_encoder *encoder, > I915_MODE_FLAG_USE_SCANLINE_COUNTER; > } > > +static bool intel_tv_source_too_wide(struct drm_i915_private *dev_priv, > + int hdisplay) > +{ > + return IS_GEN(dev_priv, 3) && hdisplay > 1024; > +} > + > +static bool intel_tv_vert_scaling(const struct drm_display_mode *tv_mode, > + const struct drm_connector_state *conn_state, > + int vdisplay) > +{ > + return tv_mode->crtc_vdisplay - > + conn_state->tv.margins.top - > + conn_state->tv.margins.bottom != > + vdisplay; > +} > + > static int > intel_tv_compute_config(struct intel_encoder *encoder, > struct intel_crtc_state *pipe_config, > @@ -1189,7 +1205,8 @@ intel_tv_compute_config(struct intel_encoder *encoder, > intel_tv_mode_to_mode(adjusted_mode, tv_mode); > drm_mode_set_crtcinfo(adjusted_mode, 0); > > - if (IS_GEN(dev_priv, 3) && hdisplay > 1024) { > + if (intel_tv_source_too_wide(dev_priv, hdisplay) || > + !intel_tv_vert_scaling(adjusted_mode, conn_state, vdisplay)) { > int extra, top, bottom; > > extra = adjusted_mode->crtc_vdisplay - vdisplay; > -- > 2.19.2 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 5+ messages in thread
* ✓ Fi.CI.BAT: success for series starting with [1/2] drm/i915/tv: Fix adjusted_mode dotclock for interlaced modes 2019-01-29 14:19 [PATCH 1/2] drm/i915/tv: Fix adjusted_mode dotclock for interlaced modes Ville Syrjala 2019-01-29 14:19 ` [PATCH 2/2] drm/i915/tv: Bypass the vertical filter if possible Ville Syrjala @ 2019-01-29 15:38 ` Patchwork 2019-01-29 19:11 ` ✓ Fi.CI.IGT: " Patchwork 2 siblings, 0 replies; 5+ messages in thread From: Patchwork @ 2019-01-29 15:38 UTC (permalink / raw) To: Ville Syrjälä; +Cc: intel-gfx == Series Details == Series: series starting with [1/2] drm/i915/tv: Fix adjusted_mode dotclock for interlaced modes URL : https://patchwork.freedesktop.org/series/55909/ State : success == Summary == CI Bug Log - changes from CI_DRM_5501 -> Patchwork_12070 ==================================================== Summary ------- **SUCCESS** No regressions found. External URL: https://patchwork.freedesktop.org/api/1.0/series/55909/revisions/1/mbox/ Known issues ------------ Here are the changes found in Patchwork_12070 that come from known issues: ### IGT changes ### #### Issues hit #### * igt@kms_busy@basic-flip-a: - fi-gdg-551: NOTRUN -> FAIL [fdo#103182] * igt@kms_chamelium@hdmi-hpd-fast: - fi-kbl-7500u: PASS -> FAIL [fdo#109485] * igt@kms_flip@basic-flip-vs-dpms: - fi-skl-6700hq: PASS -> DMESG-WARN [fdo#105998] * igt@kms_pipe_crc_basic@nonblocking-crc-pipe-a-frame-sequence: - fi-byt-clapper: PASS -> FAIL [fdo#103191] / [fdo#107362] * igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a: - fi-blb-e6850: PASS -> INCOMPLETE [fdo#107718] #### Possible fixes #### * igt@i915_selftest@live_execlists: - fi-apl-guc: INCOMPLETE [fdo#103927] -> PASS * igt@kms_pipe_crc_basic@nonblocking-crc-pipe-b-frame-sequence: - fi-byt-clapper: FAIL [fdo#103191] / [fdo#107362] -> PASS +1 {name}: This element is suppressed. This means it is ignored when computing the status of the difference (SUCCESS, WARNING, or FAILURE). [fdo#103182]: https://bugs.freedesktop.org/show_bug.cgi?id=103182 [fdo#103191]: https://bugs.freedesktop.org/show_bug.cgi?id=103191 [fdo#103927]: https://bugs.freedesktop.org/show_bug.cgi?id=103927 [fdo#105998]: https://bugs.freedesktop.org/show_bug.cgi?id=105998 [fdo#107362]: https://bugs.freedesktop.org/show_bug.cgi?id=107362 [fdo#107718]: https://bugs.freedesktop.org/show_bug.cgi?id=107718 [fdo#108915]: https://bugs.freedesktop.org/show_bug.cgi?id=108915 [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271 [fdo#109278]: https://bugs.freedesktop.org/show_bug.cgi?id=109278 [fdo#109485]: https://bugs.freedesktop.org/show_bug.cgi?id=109485 Participating hosts (46 -> 38) ------------------------------ Additional (2): fi-icl-y fi-gdg-551 Missing (10): fi-kbl-soraka fi-ilk-m540 fi-hsw-4200u fi-byt-squawks fi-bsw-cyan fi-skl-6260u fi-ctg-p8600 fi-whl-u fi-kbl-x1275 fi-bdw-samus Build changes ------------- * Linux: CI_DRM_5501 -> Patchwork_12070 CI_DRM_5501: 5aac0b69f3a3085b9b8a9924cb19cb94f7860dbe @ git://anongit.freedesktop.org/gfx-ci/linux IGT_4798: 998e0a4aedf10fb5f7c271018cd80d874668bf55 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools Patchwork_12070: fe55f3b839716809aee23e27affade135cc6dded @ git://anongit.freedesktop.org/gfx-ci/linux == Linux commits == fe55f3b83971 drm/i915/tv: Bypass the vertical filter if possible bb0e3c859600 drm/i915/tv: Fix adjusted_mode dotclock for interlaced modes == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_12070/ _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 5+ messages in thread
* ✓ Fi.CI.IGT: success for series starting with [1/2] drm/i915/tv: Fix adjusted_mode dotclock for interlaced modes 2019-01-29 14:19 [PATCH 1/2] drm/i915/tv: Fix adjusted_mode dotclock for interlaced modes Ville Syrjala 2019-01-29 14:19 ` [PATCH 2/2] drm/i915/tv: Bypass the vertical filter if possible Ville Syrjala 2019-01-29 15:38 ` ✓ Fi.CI.BAT: success for series starting with [1/2] drm/i915/tv: Fix adjusted_mode dotclock for interlaced modes Patchwork @ 2019-01-29 19:11 ` Patchwork 2 siblings, 0 replies; 5+ messages in thread From: Patchwork @ 2019-01-29 19:11 UTC (permalink / raw) To: Ville Syrjälä; +Cc: intel-gfx == Series Details == Series: series starting with [1/2] drm/i915/tv: Fix adjusted_mode dotclock for interlaced modes URL : https://patchwork.freedesktop.org/series/55909/ State : success == Summary == CI Bug Log - changes from CI_DRM_5501_full -> Patchwork_12070_full ==================================================== Summary ------- **SUCCESS** No regressions found. Known issues ------------ Here are the changes found in Patchwork_12070_full that come from known issues: ### IGT changes ### #### Issues hit #### * igt@kms_busy@extended-modeset-hang-newfb-with-reset-render-b: - shard-snb: NOTRUN -> DMESG-WARN [fdo#107956] * igt@kms_cursor_crc@cursor-128x128-dpms: - shard-apl: PASS -> FAIL [fdo#103232] +2 * igt@kms_cursor_crc@cursor-256x256-suspend: - shard-glk: PASS -> FAIL [fdo#103232] * igt@kms_plane@pixel-format-pipe-c-planes-source-clamping: - shard-apl: PASS -> FAIL [fdo#108948] * igt@kms_plane_multiple@atomic-pipe-a-tiling-none: - shard-glk: PASS -> FAIL [fdo#103166] +1 * igt@kms_plane_multiple@atomic-pipe-b-tiling-none: - shard-apl: PASS -> FAIL [fdo#103166] * igt@kms_setmode@basic: - shard-kbl: PASS -> FAIL [fdo#99912] #### Possible fixes #### * igt@kms_cursor_crc@cursor-256x256-random: - shard-glk: FAIL [fdo#103232] -> PASS +1 * igt@kms_cursor_crc@cursor-256x85-random: - shard-apl: FAIL [fdo#103232] -> PASS +2 * igt@kms_cursor_legacy@2x-long-nonblocking-modeset-vs-cursor-atomic: - shard-glk: FAIL [fdo#105454] / [fdo#106509] -> PASS * igt@kms_flip@flip-vs-expired-vblank: - shard-glk: FAIL [fdo#102887] / [fdo#105363] -> PASS * igt@kms_plane_alpha_blend@pipe-c-constant-alpha-max: - shard-glk: FAIL [fdo#108145] -> PASS * igt@kms_plane_multiple@atomic-pipe-b-tiling-x: - shard-apl: FAIL [fdo#103166] -> PASS * igt@kms_setmode@basic: - shard-hsw: FAIL [fdo#99912] -> PASS * igt@perf_pmu@rc6-runtime-pm-long: - shard-kbl: FAIL [fdo#105010] -> PASS {name}: This element is suppressed. This means it is ignored when computing the status of the difference (SUCCESS, WARNING, or FAILURE). [fdo#102887]: https://bugs.freedesktop.org/show_bug.cgi?id=102887 [fdo#103166]: https://bugs.freedesktop.org/show_bug.cgi?id=103166 [fdo#103232]: https://bugs.freedesktop.org/show_bug.cgi?id=103232 [fdo#105010]: https://bugs.freedesktop.org/show_bug.cgi?id=105010 [fdo#105363]: https://bugs.freedesktop.org/show_bug.cgi?id=105363 [fdo#105454]: https://bugs.freedesktop.org/show_bug.cgi?id=105454 [fdo#106509]: https://bugs.freedesktop.org/show_bug.cgi?id=106509 [fdo#107956]: https://bugs.freedesktop.org/show_bug.cgi?id=107956 [fdo#108145]: https://bugs.freedesktop.org/show_bug.cgi?id=108145 [fdo#108948]: https://bugs.freedesktop.org/show_bug.cgi?id=108948 [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271 [fdo#109278]: https://bugs.freedesktop.org/show_bug.cgi?id=109278 [fdo#99912]: https://bugs.freedesktop.org/show_bug.cgi?id=99912 Participating hosts (7 -> 5) ------------------------------ Missing (2): shard-skl shard-iclb Build changes ------------- * Linux: CI_DRM_5501 -> Patchwork_12070 CI_DRM_5501: 5aac0b69f3a3085b9b8a9924cb19cb94f7860dbe @ git://anongit.freedesktop.org/gfx-ci/linux IGT_4798: 998e0a4aedf10fb5f7c271018cd80d874668bf55 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools Patchwork_12070: fe55f3b839716809aee23e27affade135cc6dded @ git://anongit.freedesktop.org/gfx-ci/linux piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_12070/ _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2019-01-29 19:11 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2019-01-29 14:19 [PATCH 1/2] drm/i915/tv: Fix adjusted_mode dotclock for interlaced modes Ville Syrjala 2019-01-29 14:19 ` [PATCH 2/2] drm/i915/tv: Bypass the vertical filter if possible Ville Syrjala 2019-01-29 14:49 ` Daniel Vetter 2019-01-29 15:38 ` ✓ Fi.CI.BAT: success for series starting with [1/2] drm/i915/tv: Fix adjusted_mode dotclock for interlaced modes Patchwork 2019-01-29 19:11 ` ✓ Fi.CI.IGT: " Patchwork
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.