* [PATCH] drm/i915/icl: push pll to port mapping/unmapping to ddi encoder hooks @ 2018-11-29 11:57 Jani Nikula 2018-11-29 12:36 ` ✓ Fi.CI.BAT: success for " Patchwork ` (2 more replies) 0 siblings, 3 replies; 5+ messages in thread From: Jani Nikula @ 2018-11-29 11:57 UTC (permalink / raw) To: intel-gfx; +Cc: jani.nikula, Paulo Zanoni Unclutter the haswell_crtc_enable() and haswell_crtc_disable() functions a bit by moving the pll to port mapping and unmapping functions to the ddi encoder hooks. This allows removal of a bunch of boilerplate code from the functions. Additionally, the ICL DSI encoder needs to do the clock gating and ungating slightly differently, and this allows its own handling in a clean fashion. Cc: Madhav Chauhan <madhav.chauhan@intel.com> Cc: Paulo Zanoni <paulo.r.zanoni@intel.com> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Jani Nikula <jani.nikula@intel.com> --- drivers/gpu/drm/i915/intel_ddi.c | 84 +++++++++++++++--------------------- drivers/gpu/drm/i915/intel_display.c | 6 --- drivers/gpu/drm/i915/intel_drv.h | 6 --- 3 files changed, 34 insertions(+), 62 deletions(-) diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c index ad11540ac436..7bad6c857b81 100644 --- a/drivers/gpu/drm/i915/intel_ddi.c +++ b/drivers/gpu/drm/i915/intel_ddi.c @@ -2785,69 +2785,45 @@ uint32_t icl_dpclka_cfgcr0_clk_off(struct drm_i915_private *dev_priv, return 0; } -void icl_map_plls_to_ports(struct drm_crtc *crtc, - struct intel_crtc_state *crtc_state, - struct drm_atomic_state *old_state) +static void icl_map_plls_to_ports(struct intel_encoder *encoder, + const struct intel_crtc_state *crtc_state) { + struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); struct intel_shared_dpll *pll = crtc_state->shared_dpll; - struct drm_i915_private *dev_priv = to_i915(crtc->dev); - struct drm_connector_state *conn_state; - struct drm_connector *conn; - int i; - - for_each_new_connector_in_state(old_state, conn, conn_state, i) { - struct intel_encoder *encoder = - to_intel_encoder(conn_state->best_encoder); - enum port port; - uint32_t val; - - if (conn_state->crtc != crtc) - continue; - - port = encoder->port; - mutex_lock(&dev_priv->dpll_lock); + enum port port = encoder->port; + u32 val; - val = I915_READ(DPCLKA_CFGCR0_ICL); - WARN_ON((val & icl_dpclka_cfgcr0_clk_off(dev_priv, port)) == 0); + mutex_lock(&dev_priv->dpll_lock); - if (intel_port_is_combophy(dev_priv, port)) { - val &= ~DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(port); - val |= DPCLKA_CFGCR0_DDI_CLK_SEL(pll->info->id, port); - I915_WRITE(DPCLKA_CFGCR0_ICL, val); - POSTING_READ(DPCLKA_CFGCR0_ICL); - } + val = I915_READ(DPCLKA_CFGCR0_ICL); + WARN_ON((val & icl_dpclka_cfgcr0_clk_off(dev_priv, port)) == 0); - val &= ~icl_dpclka_cfgcr0_clk_off(dev_priv, port); + if (intel_port_is_combophy(dev_priv, port)) { + val &= ~DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(port); + val |= DPCLKA_CFGCR0_DDI_CLK_SEL(pll->info->id, port); I915_WRITE(DPCLKA_CFGCR0_ICL, val); - - mutex_unlock(&dev_priv->dpll_lock); + POSTING_READ(DPCLKA_CFGCR0_ICL); } + + val &= ~icl_dpclka_cfgcr0_clk_off(dev_priv, port); + I915_WRITE(DPCLKA_CFGCR0_ICL, val); + + mutex_unlock(&dev_priv->dpll_lock); } -void icl_unmap_plls_to_ports(struct drm_crtc *crtc, - struct intel_crtc_state *crtc_state, - struct drm_atomic_state *old_state) +static void icl_unmap_plls_to_ports(struct intel_encoder *encoder) { - struct drm_i915_private *dev_priv = to_i915(crtc->dev); - struct drm_connector_state *old_conn_state; - struct drm_connector *conn; - int i; + struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); + enum port port = encoder->port; + u32 val; - for_each_old_connector_in_state(old_state, conn, old_conn_state, i) { - struct intel_encoder *encoder = - to_intel_encoder(old_conn_state->best_encoder); - enum port port; + mutex_lock(&dev_priv->dpll_lock); - if (old_conn_state->crtc != crtc) - continue; + val = I915_READ(DPCLKA_CFGCR0_ICL); + val |= icl_dpclka_cfgcr0_clk_off(dev_priv, port); + I915_WRITE(DPCLKA_CFGCR0_ICL, val); - port = encoder->port; - mutex_lock(&dev_priv->dpll_lock); - I915_WRITE(DPCLKA_CFGCR0_ICL, - I915_READ(DPCLKA_CFGCR0_ICL) | - icl_dpclka_cfgcr0_clk_off(dev_priv, port)); - mutex_unlock(&dev_priv->dpll_lock); - } + mutex_unlock(&dev_priv->dpll_lock); } void icl_sanitize_encoder_pll_mapping(struct intel_encoder *encoder) @@ -3208,6 +3184,9 @@ static void intel_ddi_pre_enable(struct intel_encoder *encoder, WARN_ON(crtc_state->has_pch_encoder); + if (INTEL_GEN(dev_priv) >= 11) + icl_map_plls_to_ports(encoder, crtc_state); + intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, true); if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI)) { @@ -3306,6 +3285,8 @@ static void intel_ddi_post_disable(struct intel_encoder *encoder, const struct intel_crtc_state *old_crtc_state, const struct drm_connector_state *old_conn_state) { + struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); + /* * When called from DP MST code: * - old_conn_state will be NULL @@ -3325,6 +3306,9 @@ static void intel_ddi_post_disable(struct intel_encoder *encoder, else intel_ddi_post_disable_dp(encoder, old_crtc_state, old_conn_state); + + if (INTEL_GEN(dev_priv) >= 11) + icl_unmap_plls_to_ports(encoder); } void intel_ddi_fdi_post_disable(struct intel_encoder *encoder, diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index d07fa4456150..559db98b5a4a 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -5704,9 +5704,6 @@ static void haswell_crtc_enable(struct intel_crtc_state *pipe_config, if (pipe_config->shared_dpll) intel_enable_shared_dpll(pipe_config); - if (INTEL_GEN(dev_priv) >= 11) - icl_map_plls_to_ports(crtc, pipe_config, old_state); - intel_encoders_pre_enable(crtc, pipe_config, old_state); if (intel_crtc_has_dp_encoder(pipe_config)) @@ -5908,9 +5905,6 @@ static void haswell_crtc_disable(struct intel_crtc_state *old_crtc_state, intel_encoders_post_disable(crtc, old_crtc_state, old_state); - if (INTEL_GEN(dev_priv) >= 11) - icl_unmap_plls_to_ports(crtc, old_crtc_state, old_state); - intel_encoders_post_pll_disable(crtc, old_crtc_state, old_state); } diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h index 40edb21087a7..9018be2171ee 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h @@ -1522,12 +1522,6 @@ u8 intel_ddi_dp_pre_emphasis_max(struct intel_encoder *encoder, u8 voltage_swing); int intel_ddi_toggle_hdcp_signalling(struct intel_encoder *intel_encoder, bool enable); -void icl_map_plls_to_ports(struct drm_crtc *crtc, - struct intel_crtc_state *crtc_state, - struct drm_atomic_state *old_state); -void icl_unmap_plls_to_ports(struct drm_crtc *crtc, - struct intel_crtc_state *crtc_state, - struct drm_atomic_state *old_state); void icl_sanitize_encoder_pll_mapping(struct intel_encoder *encoder); unsigned int intel_fb_align_height(const struct drm_framebuffer *fb, -- 2.11.0 _______________________________________________ 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
* ✓ Fi.CI.BAT: success for drm/i915/icl: push pll to port mapping/unmapping to ddi encoder hooks 2018-11-29 11:57 [PATCH] drm/i915/icl: push pll to port mapping/unmapping to ddi encoder hooks Jani Nikula @ 2018-11-29 12:36 ` Patchwork 2018-11-29 21:50 ` ✓ Fi.CI.IGT: " Patchwork 2018-12-03 12:00 ` [PATCH] " Ville Syrjälä 2 siblings, 0 replies; 5+ messages in thread From: Patchwork @ 2018-11-29 12:36 UTC (permalink / raw) To: Jani Nikula; +Cc: intel-gfx == Series Details == Series: drm/i915/icl: push pll to port mapping/unmapping to ddi encoder hooks URL : https://patchwork.freedesktop.org/series/53237/ State : success == Summary == CI Bug Log - changes from CI_DRM_5221 -> Patchwork_10950 ==================================================== Summary ------- **SUCCESS** No regressions found. External URL: https://patchwork.freedesktop.org/api/1.0/series/53237/revisions/1/mbox/ Known issues ------------ Here are the changes found in Patchwork_10950 that come from known issues: ### IGT changes ### #### Issues hit #### * igt@i915_selftest@live_contexts: - fi-bsw-kefka: PASS -> DMESG-FAIL [fdo#108626] / [fdo#108656] - fi-cfl-8109u: PASS -> DMESG-FAIL [fdo#108698] * igt@kms_pipe_crc_basic@nonblocking-crc-pipe-b: - fi-byt-clapper: PASS -> FAIL [fdo#107362] +1 * igt@prime_vgem@basic-fence-flip: - fi-gdg-551: NOTRUN -> FAIL [fdo#103182] * {igt@runner@aborted}: - fi-kbl-8809g: NOTRUN -> FAIL [fdo#108709] #### Possible fixes #### * igt@gem_exec_suspend@basic-s4-devices: - fi-ivb-3520m: FAIL [fdo#108880] -> PASS * igt@gem_mmap@basic-small-bo: - fi-glk-dsi: INCOMPLETE [fdo#103359] / [k.org#198133] -> PASS * igt@kms_frontbuffer_tracking@basic: - fi-byt-clapper: FAIL [fdo#103167] -> PASS #### Warnings #### * igt@i915_selftest@live_contexts: - {fi-icl-u3}: INCOMPLETE [fdo#108315] -> DMESG-FAIL [fdo#108569] {name}: This element is suppressed. This means it is ignored when computing the status of the difference (SUCCESS, WARNING, or FAILURE). [fdo#103167]: https://bugs.freedesktop.org/show_bug.cgi?id=103167 [fdo#103182]: https://bugs.freedesktop.org/show_bug.cgi?id=103182 [fdo#103359]: https://bugs.freedesktop.org/show_bug.cgi?id=103359 [fdo#107362]: https://bugs.freedesktop.org/show_bug.cgi?id=107362 [fdo#108315]: https://bugs.freedesktop.org/show_bug.cgi?id=108315 [fdo#108569]: https://bugs.freedesktop.org/show_bug.cgi?id=108569 [fdo#108626]: https://bugs.freedesktop.org/show_bug.cgi?id=108626 [fdo#108656]: https://bugs.freedesktop.org/show_bug.cgi?id=108656 [fdo#108698]: https://bugs.freedesktop.org/show_bug.cgi?id=108698 [fdo#108709]: https://bugs.freedesktop.org/show_bug.cgi?id=108709 [fdo#108880]: https://bugs.freedesktop.org/show_bug.cgi?id=108880 [k.org#198133]: https://bugzilla.kernel.org/show_bug.cgi?id=198133 Participating hosts (45 -> 43) ------------------------------ Additional (3): fi-gdg-551 fi-kbl-8809g fi-pnv-d510 Missing (5): fi-kbl-soraka fi-ilk-m540 fi-hsw-4200u fi-bsw-cyan fi-ctg-p8600 Build changes ------------- * Linux: CI_DRM_5221 -> Patchwork_10950 CI_DRM_5221: 4c3e98f6787fab0ce3c5d20d25ebd538dfe234af @ git://anongit.freedesktop.org/gfx-ci/linux IGT_4735: b05c028ccdb6ac8e8d8499a041bb14dfe358ee26 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools Patchwork_10950: c2b6dd4bee5eb3f99b9b681728bb0583941e8e1b @ git://anongit.freedesktop.org/gfx-ci/linux == Linux commits == c2b6dd4bee5e drm/i915/icl: push pll to port mapping/unmapping to ddi encoder hooks == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_10950/ _______________________________________________ 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 drm/i915/icl: push pll to port mapping/unmapping to ddi encoder hooks 2018-11-29 11:57 [PATCH] drm/i915/icl: push pll to port mapping/unmapping to ddi encoder hooks Jani Nikula 2018-11-29 12:36 ` ✓ Fi.CI.BAT: success for " Patchwork @ 2018-11-29 21:50 ` Patchwork 2018-12-03 12:00 ` [PATCH] " Ville Syrjälä 2 siblings, 0 replies; 5+ messages in thread From: Patchwork @ 2018-11-29 21:50 UTC (permalink / raw) To: Jani Nikula; +Cc: intel-gfx == Series Details == Series: drm/i915/icl: push pll to port mapping/unmapping to ddi encoder hooks URL : https://patchwork.freedesktop.org/series/53237/ State : success == Summary == CI Bug Log - changes from CI_DRM_5221_full -> Patchwork_10950_full ==================================================== Summary ------- **WARNING** Minor unknown changes coming with Patchwork_10950_full need to be verified manually. If you think the reported changes have nothing to do with the changes introduced in Patchwork_10950_full, please notify your bug team to allow them to document this new failure mode, which will reduce false positives in CI. Possible new issues ------------------- Here are the unknown changes that may have been introduced in Patchwork_10950_full: ### IGT changes ### #### Warnings #### * igt@pm_rc6_residency@rc6-accuracy: - shard-snb: SKIP -> PASS Known issues ------------ Here are the changes found in Patchwork_10950_full that come from known issues: ### IGT changes ### #### Issues hit #### * igt@drm_import_export@import-close-race-flink: - shard-skl: PASS -> TIMEOUT [fdo#108667] * igt@gem_ppgtt@blt-vs-render-ctxn: - shard-kbl: PASS -> INCOMPLETE [fdo#103665] / [fdo#106023] / [fdo#106887] - shard-skl: NOTRUN -> INCOMPLETE [fdo#106887] * igt@gem_workarounds@suspend-resume-context: - shard-skl: PASS -> INCOMPLETE [fdo#104108] / [fdo#107773] * igt@kms_atomic_transition@plane-all-modeset-transition-internal-panels: - {shard-iclb}: PASS -> DMESG-WARN [fdo#107724] +15 * igt@kms_busy@extended-pageflip-modeset-hang-oldfb-render-c: - shard-skl: NOTRUN -> DMESG-WARN [fdo#107956] +1 * igt@kms_cursor_crc@cursor-128x128-random: - shard-apl: PASS -> FAIL [fdo#103232] +3 * igt@kms_draw_crc@draw-method-xrgb8888-mmap-cpu-xtiled: - {shard-iclb}: PASS -> WARN [fdo#108336] * igt@kms_fbcon_fbt@psr: - shard-skl: NOTRUN -> FAIL [fdo#107882] * igt@kms_flip@flip-vs-expired-vblank: - shard-skl: PASS -> FAIL [fdo#105363] - shard-glk: PASS -> FAIL [fdo#105363] * igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-indfb-draw-mmap-gtt: - {shard-iclb}: PASS -> DMESG-FAIL [fdo#107724] +2 * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-wc: - shard-glk: PASS -> FAIL [fdo#103167] +1 * igt@kms_frontbuffer_tracking@fbcpsr-stridechange: - shard-skl: NOTRUN -> FAIL [fdo#105683] * igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-render: - {shard-iclb}: PASS -> DMESG-WARN [fdo#107724] / [fdo#108336] +3 * igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-fullscreen: - {shard-iclb}: PASS -> FAIL [fdo#103167] +3 * igt@kms_frontbuffer_tracking@psr-indfb-scaledprimary: - shard-skl: PASS -> FAIL [fdo#103167] * igt@kms_plane@plane-panning-bottom-right-suspend-pipe-c-planes: - {shard-iclb}: PASS -> DMESG-FAIL [fdo#103166] / [fdo#107724] * igt@kms_plane@plane-position-covered-pipe-a-planes: - {shard-iclb}: PASS -> FAIL [fdo#103166] +3 * igt@kms_plane@plane-position-covered-pipe-b-planes: - shard-glk: PASS -> FAIL [fdo#103166] +3 * igt@kms_plane_alpha_blend@pipe-a-constant-alpha-max: - shard-skl: NOTRUN -> FAIL [fdo#108145] +1 * igt@kms_plane_multiple@atomic-pipe-a-tiling-y: - shard-apl: PASS -> FAIL [fdo#103166] * igt@kms_plane_multiple@atomic-pipe-c-tiling-yf: - shard-skl: NOTRUN -> FAIL [fdo#103166] / [fdo#107815] * igt@kms_properties@connector-properties-atomic: - shard-skl: NOTRUN -> FAIL [fdo#108642] * igt@kms_setmode@basic: - shard-apl: PASS -> FAIL [fdo#99912] - shard-kbl: PASS -> FAIL [fdo#99912] * igt@pm_rpm@gem-execbuf: - {shard-iclb}: PASS -> INCOMPLETE [fdo#108840] #### Possible fixes #### * igt@gem_ctx_isolation@vecs0-s3: - shard-kbl: INCOMPLETE [fdo#103665] -> PASS * igt@gem_softpin@noreloc-s3: - shard-skl: INCOMPLETE [fdo#104108] / [fdo#107773] -> PASS * igt@kms_busy@extended-pageflip-hang-newfb-render-a: - shard-glk: DMESG-WARN [fdo#107956] -> PASS * igt@kms_busy@extended-pageflip-modeset-hang-oldfb-render-b: - shard-hsw: DMESG-WARN [fdo#107956] -> PASS * igt@kms_color@pipe-a-ctm-max: - shard-apl: FAIL [fdo#108147] -> PASS * igt@kms_cursor_crc@cursor-128x128-suspend: - shard-skl: INCOMPLETE [fdo#104108] -> PASS * igt@kms_cursor_crc@cursor-256x256-dpms: - shard-apl: FAIL [fdo#103232] -> PASS * igt@kms_cursor_crc@cursor-256x85-sliding: - shard-glk: FAIL [fdo#103232] -> PASS * igt@kms_cursor_crc@cursor-64x21-random: - shard-apl: DMESG-FAIL [fdo#103232] / [fdo#103558] / [fdo#105602] -> PASS +1 * igt@kms_cursor_crc@cursor-64x64-suspend: - shard-glk: INCOMPLETE [fdo#103359] / [k.org#198133] -> PASS * igt@kms_draw_crc@draw-method-xrgb8888-mmap-cpu-xtiled: - shard-skl: FAIL [fdo#107791] -> PASS * igt@kms_flip@2x-flip-vs-dpms: - shard-hsw: DMESG-WARN [fdo#102614] -> PASS * igt@kms_flip@flip-vs-expired-vblank: - shard-apl: FAIL [fdo#102887] / [fdo#105363] -> PASS * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-pwrite: - {shard-iclb}: FAIL [fdo#103167] -> PASS +2 * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-onoff: - shard-apl: FAIL [fdo#103167] -> PASS * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-shrfb-draw-mmap-gtt: - shard-glk: FAIL [fdo#103167] -> PASS * igt@kms_pipe_crc_basic@hang-read-crc-pipe-c: - shard-apl: DMESG-WARN [fdo#103558] / [fdo#105602] -> PASS +24 * igt@kms_plane@plane-position-covered-pipe-a-planes: - shard-apl: FAIL [fdo#103166] -> PASS +2 * igt@kms_plane_multiple@atomic-pipe-a-tiling-y: - shard-glk: FAIL [fdo#103166] -> PASS * igt@pm_rpm@modeset-stress-extra-wait: - shard-skl: INCOMPLETE [fdo#107807] -> PASS +1 #### Warnings #### * igt@i915_suspend@shrink: - shard-skl: INCOMPLETE [fdo#106886] -> DMESG-WARN [fdo#108784] * igt@kms_cursor_crc@cursor-64x64-suspend: - {shard-iclb}: FAIL [fdo#103232] -> DMESG-FAIL [fdo#103232] / [fdo#107724] * igt@kms_plane_multiple@atomic-pipe-b-tiling-yf: - shard-apl: DMESG-FAIL [fdo#103166] / [fdo#103558] / [fdo#105602] -> FAIL [fdo#103166] * igt@pm_backlight@fade_with_suspend: - {shard-iclb}: FAIL [fdo#107847] -> INCOMPLETE [fdo#107713] / [fdo#107820] {name}: This element is suppressed. This means it is ignored when computing the status of the difference (SUCCESS, WARNING, or FAILURE). [fdo#102614]: https://bugs.freedesktop.org/show_bug.cgi?id=102614 [fdo#102887]: https://bugs.freedesktop.org/show_bug.cgi?id=102887 [fdo#103166]: https://bugs.freedesktop.org/show_bug.cgi?id=103166 [fdo#103167]: https://bugs.freedesktop.org/show_bug.cgi?id=103167 [fdo#103232]: https://bugs.freedesktop.org/show_bug.cgi?id=103232 [fdo#103359]: https://bugs.freedesktop.org/show_bug.cgi?id=103359 [fdo#103558]: https://bugs.freedesktop.org/show_bug.cgi?id=103558 [fdo#103665]: https://bugs.freedesktop.org/show_bug.cgi?id=103665 [fdo#104108]: https://bugs.freedesktop.org/show_bug.cgi?id=104108 [fdo#105363]: https://bugs.freedesktop.org/show_bug.cgi?id=105363 [fdo#105602]: https://bugs.freedesktop.org/show_bug.cgi?id=105602 [fdo#105683]: https://bugs.freedesktop.org/show_bug.cgi?id=105683 [fdo#106023]: https://bugs.freedesktop.org/show_bug.cgi?id=106023 [fdo#106886]: https://bugs.freedesktop.org/show_bug.cgi?id=106886 [fdo#106887]: https://bugs.freedesktop.org/show_bug.cgi?id=106887 [fdo#107713]: https://bugs.freedesktop.org/show_bug.cgi?id=107713 [fdo#107724]: https://bugs.freedesktop.org/show_bug.cgi?id=107724 [fdo#107773]: https://bugs.freedesktop.org/show_bug.cgi?id=107773 [fdo#107791]: https://bugs.freedesktop.org/show_bug.cgi?id=107791 [fdo#107807]: https://bugs.freedesktop.org/show_bug.cgi?id=107807 [fdo#107815]: https://bugs.freedesktop.org/show_bug.cgi?id=107815 [fdo#107820]: https://bugs.freedesktop.org/show_bug.cgi?id=107820 [fdo#107847]: https://bugs.freedesktop.org/show_bug.cgi?id=107847 [fdo#107882]: https://bugs.freedesktop.org/show_bug.cgi?id=107882 [fdo#107956]: https://bugs.freedesktop.org/show_bug.cgi?id=107956 [fdo#108145]: https://bugs.freedesktop.org/show_bug.cgi?id=108145 [fdo#108147]: https://bugs.freedesktop.org/show_bug.cgi?id=108147 [fdo#108336]: https://bugs.freedesktop.org/show_bug.cgi?id=108336 [fdo#108642]: https://bugs.freedesktop.org/show_bug.cgi?id=108642 [fdo#108667]: https://bugs.freedesktop.org/show_bug.cgi?id=108667 [fdo#108784]: https://bugs.freedesktop.org/show_bug.cgi?id=108784 [fdo#108840]: https://bugs.freedesktop.org/show_bug.cgi?id=108840 [fdo#99912]: https://bugs.freedesktop.org/show_bug.cgi?id=99912 [k.org#198133]: https://bugzilla.kernel.org/show_bug.cgi?id=198133 Participating hosts (7 -> 7) ------------------------------ No changes in participating hosts Build changes ------------- * Linux: CI_DRM_5221 -> Patchwork_10950 CI_DRM_5221: 4c3e98f6787fab0ce3c5d20d25ebd538dfe234af @ git://anongit.freedesktop.org/gfx-ci/linux IGT_4735: b05c028ccdb6ac8e8d8499a041bb14dfe358ee26 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools Patchwork_10950: c2b6dd4bee5eb3f99b9b681728bb0583941e8e1b @ 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_10950/shards.html _______________________________________________ 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
* Re: [PATCH] drm/i915/icl: push pll to port mapping/unmapping to ddi encoder hooks 2018-11-29 11:57 [PATCH] drm/i915/icl: push pll to port mapping/unmapping to ddi encoder hooks Jani Nikula 2018-11-29 12:36 ` ✓ Fi.CI.BAT: success for " Patchwork 2018-11-29 21:50 ` ✓ Fi.CI.IGT: " Patchwork @ 2018-12-03 12:00 ` Ville Syrjälä 2018-12-03 14:09 ` Jani Nikula 2 siblings, 1 reply; 5+ messages in thread From: Ville Syrjälä @ 2018-12-03 12:00 UTC (permalink / raw) To: Jani Nikula; +Cc: intel-gfx, Paulo Zanoni On Thu, Nov 29, 2018 at 01:57:15PM +0200, Jani Nikula wrote: > Unclutter the haswell_crtc_enable() and haswell_crtc_disable() functions > a bit by moving the pll to port mapping and unmapping functions to the > ddi encoder hooks. This allows removal of a bunch of boilerplate code > from the functions. > > Additionally, the ICL DSI encoder needs to do the clock gating and > ungating slightly differently, and this allows its own handling in a > clean fashion. > > Cc: Madhav Chauhan <madhav.chauhan@intel.com> > Cc: Paulo Zanoni <paulo.r.zanoni@intel.com> > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> > Signed-off-by: Jani Nikula <jani.nikula@intel.com> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> > --- > drivers/gpu/drm/i915/intel_ddi.c | 84 +++++++++++++++--------------------- > drivers/gpu/drm/i915/intel_display.c | 6 --- > drivers/gpu/drm/i915/intel_drv.h | 6 --- > 3 files changed, 34 insertions(+), 62 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c > index ad11540ac436..7bad6c857b81 100644 > --- a/drivers/gpu/drm/i915/intel_ddi.c > +++ b/drivers/gpu/drm/i915/intel_ddi.c > @@ -2785,69 +2785,45 @@ uint32_t icl_dpclka_cfgcr0_clk_off(struct drm_i915_private *dev_priv, > return 0; > } > > -void icl_map_plls_to_ports(struct drm_crtc *crtc, > - struct intel_crtc_state *crtc_state, > - struct drm_atomic_state *old_state) > +static void icl_map_plls_to_ports(struct intel_encoder *encoder, > + const struct intel_crtc_state *crtc_state) > { > + struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); > struct intel_shared_dpll *pll = crtc_state->shared_dpll; > - struct drm_i915_private *dev_priv = to_i915(crtc->dev); > - struct drm_connector_state *conn_state; > - struct drm_connector *conn; > - int i; > - > - for_each_new_connector_in_state(old_state, conn, conn_state, i) { > - struct intel_encoder *encoder = > - to_intel_encoder(conn_state->best_encoder); > - enum port port; > - uint32_t val; > - > - if (conn_state->crtc != crtc) > - continue; > - > - port = encoder->port; > - mutex_lock(&dev_priv->dpll_lock); > + enum port port = encoder->port; > + u32 val; > > - val = I915_READ(DPCLKA_CFGCR0_ICL); > - WARN_ON((val & icl_dpclka_cfgcr0_clk_off(dev_priv, port)) == 0); > + mutex_lock(&dev_priv->dpll_lock); > > - if (intel_port_is_combophy(dev_priv, port)) { > - val &= ~DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(port); > - val |= DPCLKA_CFGCR0_DDI_CLK_SEL(pll->info->id, port); > - I915_WRITE(DPCLKA_CFGCR0_ICL, val); > - POSTING_READ(DPCLKA_CFGCR0_ICL); > - } > + val = I915_READ(DPCLKA_CFGCR0_ICL); > + WARN_ON((val & icl_dpclka_cfgcr0_clk_off(dev_priv, port)) == 0); > > - val &= ~icl_dpclka_cfgcr0_clk_off(dev_priv, port); > + if (intel_port_is_combophy(dev_priv, port)) { > + val &= ~DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(port); > + val |= DPCLKA_CFGCR0_DDI_CLK_SEL(pll->info->id, port); > I915_WRITE(DPCLKA_CFGCR0_ICL, val); > - > - mutex_unlock(&dev_priv->dpll_lock); > + POSTING_READ(DPCLKA_CFGCR0_ICL); > } > + > + val &= ~icl_dpclka_cfgcr0_clk_off(dev_priv, port); > + I915_WRITE(DPCLKA_CFGCR0_ICL, val); > + > + mutex_unlock(&dev_priv->dpll_lock); > } > > -void icl_unmap_plls_to_ports(struct drm_crtc *crtc, > - struct intel_crtc_state *crtc_state, > - struct drm_atomic_state *old_state) > +static void icl_unmap_plls_to_ports(struct intel_encoder *encoder) > { > - struct drm_i915_private *dev_priv = to_i915(crtc->dev); > - struct drm_connector_state *old_conn_state; > - struct drm_connector *conn; > - int i; > + struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); > + enum port port = encoder->port; > + u32 val; > > - for_each_old_connector_in_state(old_state, conn, old_conn_state, i) { > - struct intel_encoder *encoder = > - to_intel_encoder(old_conn_state->best_encoder); > - enum port port; > + mutex_lock(&dev_priv->dpll_lock); > > - if (old_conn_state->crtc != crtc) > - continue; > + val = I915_READ(DPCLKA_CFGCR0_ICL); > + val |= icl_dpclka_cfgcr0_clk_off(dev_priv, port); > + I915_WRITE(DPCLKA_CFGCR0_ICL, val); > > - port = encoder->port; > - mutex_lock(&dev_priv->dpll_lock); > - I915_WRITE(DPCLKA_CFGCR0_ICL, > - I915_READ(DPCLKA_CFGCR0_ICL) | > - icl_dpclka_cfgcr0_clk_off(dev_priv, port)); > - mutex_unlock(&dev_priv->dpll_lock); > - } > + mutex_unlock(&dev_priv->dpll_lock); > } > > void icl_sanitize_encoder_pll_mapping(struct intel_encoder *encoder) > @@ -3208,6 +3184,9 @@ static void intel_ddi_pre_enable(struct intel_encoder *encoder, > > WARN_ON(crtc_state->has_pch_encoder); > > + if (INTEL_GEN(dev_priv) >= 11) > + icl_map_plls_to_ports(encoder, crtc_state); > + > intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, true); > > if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI)) { > @@ -3306,6 +3285,8 @@ static void intel_ddi_post_disable(struct intel_encoder *encoder, > const struct intel_crtc_state *old_crtc_state, > const struct drm_connector_state *old_conn_state) > { > + struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); > + > /* > * When called from DP MST code: > * - old_conn_state will be NULL > @@ -3325,6 +3306,9 @@ static void intel_ddi_post_disable(struct intel_encoder *encoder, > else > intel_ddi_post_disable_dp(encoder, > old_crtc_state, old_conn_state); > + > + if (INTEL_GEN(dev_priv) >= 11) > + icl_unmap_plls_to_ports(encoder); > } > > void intel_ddi_fdi_post_disable(struct intel_encoder *encoder, > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c > index d07fa4456150..559db98b5a4a 100644 > --- a/drivers/gpu/drm/i915/intel_display.c > +++ b/drivers/gpu/drm/i915/intel_display.c > @@ -5704,9 +5704,6 @@ static void haswell_crtc_enable(struct intel_crtc_state *pipe_config, > if (pipe_config->shared_dpll) > intel_enable_shared_dpll(pipe_config); > > - if (INTEL_GEN(dev_priv) >= 11) > - icl_map_plls_to_ports(crtc, pipe_config, old_state); > - > intel_encoders_pre_enable(crtc, pipe_config, old_state); > > if (intel_crtc_has_dp_encoder(pipe_config)) > @@ -5908,9 +5905,6 @@ static void haswell_crtc_disable(struct intel_crtc_state *old_crtc_state, > > intel_encoders_post_disable(crtc, old_crtc_state, old_state); > > - if (INTEL_GEN(dev_priv) >= 11) > - icl_unmap_plls_to_ports(crtc, old_crtc_state, old_state); > - > intel_encoders_post_pll_disable(crtc, old_crtc_state, old_state); > } > > diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h > index 40edb21087a7..9018be2171ee 100644 > --- a/drivers/gpu/drm/i915/intel_drv.h > +++ b/drivers/gpu/drm/i915/intel_drv.h > @@ -1522,12 +1522,6 @@ u8 intel_ddi_dp_pre_emphasis_max(struct intel_encoder *encoder, > u8 voltage_swing); > int intel_ddi_toggle_hdcp_signalling(struct intel_encoder *intel_encoder, > bool enable); > -void icl_map_plls_to_ports(struct drm_crtc *crtc, > - struct intel_crtc_state *crtc_state, > - struct drm_atomic_state *old_state); > -void icl_unmap_plls_to_ports(struct drm_crtc *crtc, > - struct intel_crtc_state *crtc_state, > - struct drm_atomic_state *old_state); > void icl_sanitize_encoder_pll_mapping(struct intel_encoder *encoder); > > unsigned int intel_fb_align_height(const struct drm_framebuffer *fb, > -- > 2.11.0 -- Ville Syrjälä Intel _______________________________________________ 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
* Re: [PATCH] drm/i915/icl: push pll to port mapping/unmapping to ddi encoder hooks 2018-12-03 12:00 ` [PATCH] " Ville Syrjälä @ 2018-12-03 14:09 ` Jani Nikula 0 siblings, 0 replies; 5+ messages in thread From: Jani Nikula @ 2018-12-03 14:09 UTC (permalink / raw) To: Ville Syrjälä; +Cc: intel-gfx, Paulo Zanoni On Mon, 03 Dec 2018, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote: > On Thu, Nov 29, 2018 at 01:57:15PM +0200, Jani Nikula wrote: >> Unclutter the haswell_crtc_enable() and haswell_crtc_disable() functions >> a bit by moving the pll to port mapping and unmapping functions to the >> ddi encoder hooks. This allows removal of a bunch of boilerplate code >> from the functions. >> >> Additionally, the ICL DSI encoder needs to do the clock gating and >> ungating slightly differently, and this allows its own handling in a >> clean fashion. >> >> Cc: Madhav Chauhan <madhav.chauhan@intel.com> >> Cc: Paulo Zanoni <paulo.r.zanoni@intel.com> >> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> >> Signed-off-by: Jani Nikula <jani.nikula@intel.com> > > Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Thanks, pushed to dinq as part of [1]. BR, Jani. [1] https://patchwork.freedesktop.org/series/51011/ > >> --- >> drivers/gpu/drm/i915/intel_ddi.c | 84 +++++++++++++++--------------------- >> drivers/gpu/drm/i915/intel_display.c | 6 --- >> drivers/gpu/drm/i915/intel_drv.h | 6 --- >> 3 files changed, 34 insertions(+), 62 deletions(-) >> >> diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c >> index ad11540ac436..7bad6c857b81 100644 >> --- a/drivers/gpu/drm/i915/intel_ddi.c >> +++ b/drivers/gpu/drm/i915/intel_ddi.c >> @@ -2785,69 +2785,45 @@ uint32_t icl_dpclka_cfgcr0_clk_off(struct drm_i915_private *dev_priv, >> return 0; >> } >> >> -void icl_map_plls_to_ports(struct drm_crtc *crtc, >> - struct intel_crtc_state *crtc_state, >> - struct drm_atomic_state *old_state) >> +static void icl_map_plls_to_ports(struct intel_encoder *encoder, >> + const struct intel_crtc_state *crtc_state) >> { >> + struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); >> struct intel_shared_dpll *pll = crtc_state->shared_dpll; >> - struct drm_i915_private *dev_priv = to_i915(crtc->dev); >> - struct drm_connector_state *conn_state; >> - struct drm_connector *conn; >> - int i; >> - >> - for_each_new_connector_in_state(old_state, conn, conn_state, i) { >> - struct intel_encoder *encoder = >> - to_intel_encoder(conn_state->best_encoder); >> - enum port port; >> - uint32_t val; >> - >> - if (conn_state->crtc != crtc) >> - continue; >> - >> - port = encoder->port; >> - mutex_lock(&dev_priv->dpll_lock); >> + enum port port = encoder->port; >> + u32 val; >> >> - val = I915_READ(DPCLKA_CFGCR0_ICL); >> - WARN_ON((val & icl_dpclka_cfgcr0_clk_off(dev_priv, port)) == 0); >> + mutex_lock(&dev_priv->dpll_lock); >> >> - if (intel_port_is_combophy(dev_priv, port)) { >> - val &= ~DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(port); >> - val |= DPCLKA_CFGCR0_DDI_CLK_SEL(pll->info->id, port); >> - I915_WRITE(DPCLKA_CFGCR0_ICL, val); >> - POSTING_READ(DPCLKA_CFGCR0_ICL); >> - } >> + val = I915_READ(DPCLKA_CFGCR0_ICL); >> + WARN_ON((val & icl_dpclka_cfgcr0_clk_off(dev_priv, port)) == 0); >> >> - val &= ~icl_dpclka_cfgcr0_clk_off(dev_priv, port); >> + if (intel_port_is_combophy(dev_priv, port)) { >> + val &= ~DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(port); >> + val |= DPCLKA_CFGCR0_DDI_CLK_SEL(pll->info->id, port); >> I915_WRITE(DPCLKA_CFGCR0_ICL, val); >> - >> - mutex_unlock(&dev_priv->dpll_lock); >> + POSTING_READ(DPCLKA_CFGCR0_ICL); >> } >> + >> + val &= ~icl_dpclka_cfgcr0_clk_off(dev_priv, port); >> + I915_WRITE(DPCLKA_CFGCR0_ICL, val); >> + >> + mutex_unlock(&dev_priv->dpll_lock); >> } >> >> -void icl_unmap_plls_to_ports(struct drm_crtc *crtc, >> - struct intel_crtc_state *crtc_state, >> - struct drm_atomic_state *old_state) >> +static void icl_unmap_plls_to_ports(struct intel_encoder *encoder) >> { >> - struct drm_i915_private *dev_priv = to_i915(crtc->dev); >> - struct drm_connector_state *old_conn_state; >> - struct drm_connector *conn; >> - int i; >> + struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); >> + enum port port = encoder->port; >> + u32 val; >> >> - for_each_old_connector_in_state(old_state, conn, old_conn_state, i) { >> - struct intel_encoder *encoder = >> - to_intel_encoder(old_conn_state->best_encoder); >> - enum port port; >> + mutex_lock(&dev_priv->dpll_lock); >> >> - if (old_conn_state->crtc != crtc) >> - continue; >> + val = I915_READ(DPCLKA_CFGCR0_ICL); >> + val |= icl_dpclka_cfgcr0_clk_off(dev_priv, port); >> + I915_WRITE(DPCLKA_CFGCR0_ICL, val); >> >> - port = encoder->port; >> - mutex_lock(&dev_priv->dpll_lock); >> - I915_WRITE(DPCLKA_CFGCR0_ICL, >> - I915_READ(DPCLKA_CFGCR0_ICL) | >> - icl_dpclka_cfgcr0_clk_off(dev_priv, port)); >> - mutex_unlock(&dev_priv->dpll_lock); >> - } >> + mutex_unlock(&dev_priv->dpll_lock); >> } >> >> void icl_sanitize_encoder_pll_mapping(struct intel_encoder *encoder) >> @@ -3208,6 +3184,9 @@ static void intel_ddi_pre_enable(struct intel_encoder *encoder, >> >> WARN_ON(crtc_state->has_pch_encoder); >> >> + if (INTEL_GEN(dev_priv) >= 11) >> + icl_map_plls_to_ports(encoder, crtc_state); >> + >> intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, true); >> >> if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI)) { >> @@ -3306,6 +3285,8 @@ static void intel_ddi_post_disable(struct intel_encoder *encoder, >> const struct intel_crtc_state *old_crtc_state, >> const struct drm_connector_state *old_conn_state) >> { >> + struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); >> + >> /* >> * When called from DP MST code: >> * - old_conn_state will be NULL >> @@ -3325,6 +3306,9 @@ static void intel_ddi_post_disable(struct intel_encoder *encoder, >> else >> intel_ddi_post_disable_dp(encoder, >> old_crtc_state, old_conn_state); >> + >> + if (INTEL_GEN(dev_priv) >= 11) >> + icl_unmap_plls_to_ports(encoder); >> } >> >> void intel_ddi_fdi_post_disable(struct intel_encoder *encoder, >> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c >> index d07fa4456150..559db98b5a4a 100644 >> --- a/drivers/gpu/drm/i915/intel_display.c >> +++ b/drivers/gpu/drm/i915/intel_display.c >> @@ -5704,9 +5704,6 @@ static void haswell_crtc_enable(struct intel_crtc_state *pipe_config, >> if (pipe_config->shared_dpll) >> intel_enable_shared_dpll(pipe_config); >> >> - if (INTEL_GEN(dev_priv) >= 11) >> - icl_map_plls_to_ports(crtc, pipe_config, old_state); >> - >> intel_encoders_pre_enable(crtc, pipe_config, old_state); >> >> if (intel_crtc_has_dp_encoder(pipe_config)) >> @@ -5908,9 +5905,6 @@ static void haswell_crtc_disable(struct intel_crtc_state *old_crtc_state, >> >> intel_encoders_post_disable(crtc, old_crtc_state, old_state); >> >> - if (INTEL_GEN(dev_priv) >= 11) >> - icl_unmap_plls_to_ports(crtc, old_crtc_state, old_state); >> - >> intel_encoders_post_pll_disable(crtc, old_crtc_state, old_state); >> } >> >> diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h >> index 40edb21087a7..9018be2171ee 100644 >> --- a/drivers/gpu/drm/i915/intel_drv.h >> +++ b/drivers/gpu/drm/i915/intel_drv.h >> @@ -1522,12 +1522,6 @@ u8 intel_ddi_dp_pre_emphasis_max(struct intel_encoder *encoder, >> u8 voltage_swing); >> int intel_ddi_toggle_hdcp_signalling(struct intel_encoder *intel_encoder, >> bool enable); >> -void icl_map_plls_to_ports(struct drm_crtc *crtc, >> - struct intel_crtc_state *crtc_state, >> - struct drm_atomic_state *old_state); >> -void icl_unmap_plls_to_ports(struct drm_crtc *crtc, >> - struct intel_crtc_state *crtc_state, >> - struct drm_atomic_state *old_state); >> void icl_sanitize_encoder_pll_mapping(struct intel_encoder *encoder); >> >> unsigned int intel_fb_align_height(const struct drm_framebuffer *fb, >> -- >> 2.11.0 -- Jani Nikula, Intel Open Source Graphics Center _______________________________________________ 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:[~2018-12-03 14:09 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2018-11-29 11:57 [PATCH] drm/i915/icl: push pll to port mapping/unmapping to ddi encoder hooks Jani Nikula 2018-11-29 12:36 ` ✓ Fi.CI.BAT: success for " Patchwork 2018-11-29 21:50 ` ✓ Fi.CI.IGT: " Patchwork 2018-12-03 12:00 ` [PATCH] " Ville Syrjälä 2018-12-03 14:09 ` Jani Nikula
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.