Linux 5.19.13
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.19.13 kernel.
This release is to resolve a regression on some Intel graphics systems that had problems with 5.19.12. If you do not have this problem with 5.19.12, there is no need to upgrade.
The updated 5.19.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.19.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 drivers/gpu/drm/i915/display/g4x_dp.c | 22 drivers/gpu/drm/i915/display/icl_dsi.c | 18 drivers/gpu/drm/i915/display/intel_backlight.c | 23 - drivers/gpu/drm/i915/display/intel_bios.c | 384 +++++++---------- drivers/gpu/drm/i915/display/intel_bios.h | 4 drivers/gpu/drm/i915/display/intel_ddi.c | 22 drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c | 9 drivers/gpu/drm/i915/display/intel_display_types.h | 69 --- drivers/gpu/drm/i915/display/intel_dp.c | 40 - drivers/gpu/drm/i915/display/intel_dp.h | 2 drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c | 6 drivers/gpu/drm/i915/display/intel_drrs.c | 3 drivers/gpu/drm/i915/display/intel_dsi.c | 2 drivers/gpu/drm/i915/display/intel_dsi_dcs_backlight.c | 9 drivers/gpu/drm/i915/display/intel_dsi_vbt.c | 56 +- drivers/gpu/drm/i915/display/intel_lvds.c | 6 drivers/gpu/drm/i915/display/intel_panel.c | 13 drivers/gpu/drm/i915/display/intel_pps.c | 70 --- drivers/gpu/drm/i915/display/intel_psr.c | 35 - drivers/gpu/drm/i915/display/intel_sdvo.c | 3 drivers/gpu/drm/i915/display/vlv_dsi.c | 21 drivers/gpu/drm/i915/i915_drv.h | 63 ++ 23 files changed, 385 insertions(+), 497 deletions(-)
Greg Kroah-Hartman (9):
Revert "drm/i915/display: Fix handling of enable_psr parameter" Revert "drm/i915/dsi: fix dual-link DSI backlight and CABC ports for display 11+" Revert "drm/i915/dsi: filter invalid backlight and CABC ports" Revert "drm/i915/bios: Split VBT data into per-panel vs. global parts" Revert "drm/i915/bios: Split VBT parsing to global vs. panel specific parts" Revert "drm/i915/bios: Split parse_driver_features() into two parts" Revert "drm/i915/pps: Split pps_init_delays() into distinct parts" Revert "drm/i915: Extract intel_edp_fixup_vbt_bpp()"
Linux 5.19.13
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 19 -SUBLEVEL = 12 +SUBLEVEL = 13 EXTRAVERSION = NAME = Superb Owl
drivers/gpu/drm/i915/display/g4x_dp.c +20 -2
@@ -395,8 +395,26 @@ static void intel_dp_get_config(struct intel_encoder *encoder,intel_dotclock_calculate (pipe_config->port_clock, &pipe_config->dp_m_n); -if (intel_dp_is_edp (intel_dp)) -intel_edp_fixup_vbt_bpp (encoder, pipe_config->pipe_bpp); +if (intel_dp_is_edp (intel_dp) && dev_priv->vbt.edp.bpp && + pipe_config->pipe_bpp > dev_priv->vbt.edp.bpp) { +/* +* This is a big fat ugly hack. +* +* Some machines in UEFI boot mode provide us a VBT that has 18 +* bpp and 1.62 GHz link bandwidth for eDP, which for reasons +* unknown we fail to light up. Yet the same BIOS boots up with +* 24 bpp and 2.7 GHz link. Use the same bpp as the BIOS uses as +* max, not what it tells us to use. +* +* Note: This will still be broken if the eDP panel is not lit +* up by the BIOS, and thus we can't get the mode at module +* load. +*/ +drm_dbg_kms (&dev_priv->drm, +"pipe has %d bpp for eDP panel, overriding BIOS-provided max %d bpp\n" , + pipe_config->pipe_bpp, dev_priv->vbt.edp.bpp); + dev_priv->vbt.edp.bpp = pipe_config->pipe_bpp; + } } static void
drivers/gpu/drm/i915/display/icl_dsi.c +4 -14
@@ -1864,8 +1864,7 @@ static void icl_dphy_param_init(struct intel_dsi *intel_dsi) {struct drm_device *dev = intel_dsi->base.base.dev;struct drm_i915_private *dev_priv =to_i915 (dev); -struct intel_connector *connector = intel_dsi->attached_connector; -struct mipi_config *mipi_config = connector->panel.vbt.dsi.config; +struct mipi_config *mipi_config = dev_priv->vbt.dsi.config;u32 tlpx_ns;u32 prepare_cnt, exit_zero_cnt, clk_zero_cnt, trail_cnt;u32 ths_prepare_ns, tclk_trail_ns;
@@ -2052,8 +2051,6 @@ void icl_dsi_init(struct drm_i915_private *dev_priv)/* attach connector to encoder */ intel_connector_attach_encoder (intel_connector, encoder); -intel_bios_init_panel (dev_priv, &intel_connector->panel); -mutex_lock (&dev->mode_config.mutex);intel_panel_add_vbt_lfp_fixed_mode (intel_connector);mutex_unlock (&dev->mode_config.mutex);
@@ -2067,20 +2064,13 @@ void icl_dsi_init(struct drm_i915_private *dev_priv)intel_backlight_setup (intel_connector,INVALID_PIPE ); -if (intel_connector->panel.vbt.dsi.config->dual_link) +if (dev_priv->vbt.dsi.config->dual_link) intel_dsi->ports =BIT (PORT_A ) |BIT (PORT_B );else intel_dsi->ports =BIT (port); -if (drm_WARN_ON (&dev_priv->drm, intel_connector->panel.vbt.dsi.bl_ports & ~intel_dsi->ports)) - intel_connector->panel.vbt.dsi.bl_ports &= intel_dsi->ports; - - intel_dsi->dcs_backlight_ports = intel_connector->panel.vbt.dsi.bl_ports; - -if (drm_WARN_ON (&dev_priv->drm, intel_connector->panel.vbt.dsi.cabc_ports & ~intel_dsi->ports)) - intel_connector->panel.vbt.dsi.cabc_ports &= intel_dsi->ports; - - intel_dsi->dcs_cabc_ports = intel_connector->panel.vbt.dsi.cabc_ports; + intel_dsi->dcs_backlight_ports = dev_priv->vbt.dsi.bl_ports; + intel_dsi->dcs_cabc_ports = dev_priv->vbt.dsi.cabc_ports;for_each_dsi_port (port, intel_dsi->ports) {struct intel_dsi_host *host;
drivers/gpu/drm/i915/display/intel_backlight.c +11 -12
@@ -1158,10 +1158,9 @@ static u32 vlv_hz_to_pwm(struct intel_connector *connector, u32 pwm_freq_hz)return DIV_ROUND_CLOSEST (clock, pwm_freq_hz * mul); } -static u16 get_vbt_pwm_freq (struct intel_connector *connector) +static u16 get_vbt_pwm_freq (struct drm_i915_private *dev_priv) { -struct drm_i915_private *dev_priv =to_i915 (connector->base.dev); -u16 pwm_freq_hz = connector->panel.vbt.backlight.pwm_freq_hz; +u16 pwm_freq_hz = dev_priv->vbt.backlight.pwm_freq_hz;if (pwm_freq_hz) { drm_dbg_kms(&dev_priv->drm,
@@ -1181,7 +1180,7 @@ static u32 get_backlight_max_vbt(struct intel_connector *connector) {struct drm_i915_private *dev_priv =to_i915 (connector->base.dev);struct intel_panel *panel = &connector->panel; -u16 pwm_freq_hz =get_vbt_pwm_freq (connector); +u16 pwm_freq_hz =get_vbt_pwm_freq (dev_priv);u32 pwm;if (!panel->backlight.pwm_funcs->hz_to_pwm) {
@@ -1218,11 +1217,11 @@ static u32 get_backlight_min_vbt(struct intel_connector *connector)* against this by letting the minimum be at most (arbitrarily chosen) * 25% of the max. */ - min =clamp_t (int, connector->panel.vbt.backlight.min_brightness,0 ,64 ); -if (min != connector->panel.vbt.backlight.min_brightness) { + min =clamp_t (int, dev_priv->vbt.backlight.min_brightness,0 ,64 ); +if (min != dev_priv->vbt.backlight.min_brightness) {drm_dbg_kms (&dev_priv->drm,"clamping VBT min backlight %d/255 to %d/255\n" , - connector->panel.vbt.backlight.min_brightness, min); + dev_priv->vbt.backlight.min_brightness, min); }/* vbt value is a coefficient in range [0..255] */
@@ -1411,7 +1410,7 @@ bxt_setup_backlight(struct intel_connector *connector, enum pipe unused)struct intel_panel *panel = &connector->panel;u32 pwm_ctl, val; - panel->backlight.controller = connector->panel.vbt.backlight.controller; + panel->backlight.controller = dev_priv->vbt.backlight.controller; pwm_ctl =intel_de_read (dev_priv,BXT_BLC_PWM_CTL (panel->backlight.controller));
@@ -1484,7 +1483,7 @@ static int ext_pwm_setup_backlight(struct intel_connector *connector,u32 level;/* Get the right PWM chip for DSI backlight according to VBT */ -if (connector->panel.vbt.dsi.config->pwm_blc ==PPS_BLC_PMIC ) { +if (dev_priv->vbt.dsi.config->pwm_blc ==PPS_BLC_PMIC ) { panel->backlight.pwm =pwm_get (dev->dev,"pwm_pmic_backlight" ); desc ="PMIC" ; }else {
@@ -1513,11 +1512,11 @@ static int ext_pwm_setup_backlight(struct intel_connector *connector,drm_dbg_kms (&dev_priv->drm,"PWM already enabled at freq %ld, VBT freq %d, level %d\n" ,NSEC_PER_SEC / (unsigned long )panel->backlight.pwm_state.period, -get_vbt_pwm_freq (connector), level); +get_vbt_pwm_freq (dev_priv), level); }else {/* Set period from VBT frequency, leave other settings at 0. */ panel->backlight.pwm_state.period = -NSEC_PER_SEC /get_vbt_pwm_freq (connector); +NSEC_PER_SEC /get_vbt_pwm_freq (dev_priv); } drm_info(&dev_priv->drm, "Using %s PWM for LCD backlight control\n",
@@ -1602,7 +1601,7 @@ int intel_backlight_setup(struct intel_connector *connector, enum pipe pipe)struct intel_panel *panel = &connector->panel;int ret; -if (!connector->panel.vbt.backlight.present) { +if (!dev_priv->vbt.backlight.present) {if (dev_priv->quirks &QUIRK_BACKLIGHT_PRESENT ) {drm_dbg_kms (&dev_priv->drm,"no backlight present per VBT, but present per quirk\n" );
drivers/gpu/drm/i915/display/intel_bios.c +172 -212
871 lines not on this page · raw message
drivers/gpu/drm/i915/display/intel_bios.h +0 -4
@@ -36,7 +36,6 @@ struct drm_i915_private;struct intel_bios_encoder_data ;struct intel_crtc_state ;struct intel_encoder ; -struct intel_panel ;enum port ;enum intel_backlight_type {
@@ -231,9 +230,6 @@ struct mipi_pps_data { } __packed;void intel_bios_init (struct drm_i915_private *dev_priv); -void intel_bios_init_panel (struct drm_i915_private *dev_priv, -struct intel_panel *panel); -void intel_bios_fini_panel (struct intel_panel *panel);void intel_bios_driver_remove (struct drm_i915_private *dev_priv);bool intel_bios_is_valid_vbt (const void *buf,size_t size);bool intel_bios_is_tv_present (struct drm_i915_private *dev_priv);
drivers/gpu/drm/i915/display/intel_ddi.c +20 -2
@@ -3433,8 +3433,26 @@ static void intel_ddi_get_config(struct intel_encoder *encoder, pipe_config->has_audio =intel_ddi_is_audio_enabled (dev_priv, cpu_transcoder); -if (encoder->type ==INTEL_OUTPUT_EDP ) -intel_edp_fixup_vbt_bpp (encoder, pipe_config->pipe_bpp); +if (encoder->type ==INTEL_OUTPUT_EDP && dev_priv->vbt.edp.bpp && + pipe_config->pipe_bpp > dev_priv->vbt.edp.bpp) { +/* +* This is a big fat ugly hack. +* +* Some machines in UEFI boot mode provide us a VBT that has 18 +* bpp and 1.62 GHz link bandwidth for eDP, which for reasons +* unknown we fail to light up. Yet the same BIOS boots up with +* 24 bpp and 2.7 GHz link. Use the same bpp as the BIOS uses as +* max, not what it tells us to use. +* +* Note: This will still be broken if the eDP panel is not lit +* up by the BIOS, and thus we can't get the mode at module +* load. +*/ +drm_dbg_kms (&dev_priv->drm, +"pipe has %d bpp for eDP panel, overriding BIOS-provided max %d bpp\n" , + pipe_config->pipe_bpp, dev_priv->vbt.edp.bpp); + dev_priv->vbt.edp.bpp = pipe_config->pipe_bpp; + }ddi_dotclock_get (pipe_config);
drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c +4 -5
@@ -1062,18 +1062,17 @@ bool is_hobl_buf_trans(const struct intel_ddi_buf_trans *table)static bool use_edp_hobl (struct intel_encoder *encoder) { +struct drm_i915_private *i915 =to_i915 (encoder->base.dev);struct intel_dp *intel_dp =enc_to_intel_dp (encoder); -struct intel_connector *connector = intel_dp->attached_connector; -return connector->panel.vbt.edp.hobl && !intel_dp->hobl_failed; +return i915->vbt.edp.hobl && !intel_dp->hobl_failed; }static bool use_edp_low_vswing (struct intel_encoder *encoder) { -struct intel_dp *intel_dp =enc_to_intel_dp (encoder); -struct intel_connector *connector = intel_dp->attached_connector; +struct drm_i915_private *i915 =to_i915 (encoder->base.dev); -return connector->panel.vbt.edp.low_vswing; +return i915->vbt.edp.low_vswing; } static const struct intel_ddi_buf_trans *
drivers/gpu/drm/i915/display/intel_display_types.h +0 -69
81 lines not on this page · raw message
drivers/gpu/drm/i915/display/intel_dp.c +5 -35
@@ -1246,12 +1246,11 @@ static int intel_dp_max_bpp(struct intel_dp *intel_dp,if (intel_dp_is_edp (intel_dp)) {/* Get bpp from vbt only for panels that dont have bpp in edid */ if (intel_connector->base.display_info.bpc ==0 && - intel_connector->panel.vbt.edp.bpp && - intel_connector->panel.vbt.edp.bpp < bpp) { + dev_priv->vbt.edp.bpp && dev_priv->vbt.edp.bpp < bpp) {drm_dbg_kms (&dev_priv->drm,"clamping bpp for eDP panel to BIOS-provided %i\n" , - intel_connector->panel.vbt.edp.bpp); - bpp = intel_connector->panel.vbt.edp.bpp; + dev_priv->vbt.edp.bpp); + bpp = dev_priv->vbt.edp.bpp; } }
@@ -1908,7 +1907,7 @@ intel_dp_drrs_compute_config(struct intel_connector *connector, }if (IS_IRONLAKE (i915) ||IS_SANDYBRIDGE (i915) ||IS_IVYBRIDGE (i915)) - pipe_config->msa_timing_delay = connector->panel.vbt.edp.drrs_msa_timing_delay; + pipe_config->msa_timing_delay = i915->vbt.edp.drrs_msa_timing_delay; pipe_config->has_drrs = true;
@@ -2738,33 +2737,6 @@ static void intel_edp_mso_mode_fixup(struct intel_connector *connector, DRM_MODE_ARG(mode)); } -void intel_edp_fixup_vbt_bpp (struct intel_encoder *encoder,int pipe_bpp) -{ -struct drm_i915_private *dev_priv =to_i915 (encoder->base.dev); -struct intel_dp *intel_dp =enc_to_intel_dp (encoder); -struct intel_connector *connector = intel_dp->attached_connector; - -if (connector->panel.vbt.edp.bpp && pipe_bpp > connector->panel.vbt.edp.bpp) { -/* -* This is a big fat ugly hack. -* -* Some machines in UEFI boot mode provide us a VBT that has 18 -* bpp and 1.62 GHz link bandwidth for eDP, which for reasons -* unknown we fail to light up. Yet the same BIOS boots up with -* 24 bpp and 2.7 GHz link. Use the same bpp as the BIOS uses as -* max, not what it tells us to use. -* -* Note: This will still be broken if the eDP panel is not lit -* up by the BIOS, and thus we can't get the mode at module -* load. -*/ -drm_dbg_kms (&dev_priv->drm, -"pipe has %d bpp for eDP panel, overriding BIOS-provided max %d bpp\n" , - pipe_bpp, connector->panel.vbt.edp.bpp); - connector->panel.vbt.edp.bpp = pipe_bpp; - } -} -static void intel_edp_mso_init (struct intel_dp *intel_dp) {struct drm_i915_private *i915 =dp_to_i915 (intel_dp);
@@ -5240,10 +5212,8 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp, } intel_connector->edid = edid; -intel_bios_init_panel (dev_priv, &intel_connector->panel); -intel_panel_add_edid_fixed_modes (intel_connector, - intel_connector->panel.vbt.drrs_type !=DRRS_TYPE_NONE ); + dev_priv->vbt.drrs_type !=DRRS_TYPE_NONE );/* MSO requires information from the EDID */ intel_edp_mso_init (intel_dp);
drivers/gpu/drm/i915/display/intel_dp.h +0 -2
@@ -29,7 +29,6 @@ struct link_config_limits {int min_bpp, max_bpp; }; -void intel_edp_fixup_vbt_bpp (struct intel_encoder *encoder,int pipe_bpp);void intel_dp_adjust_compliance_config (struct intel_dp *intel_dp,struct intel_crtc_state *pipe_config,struct link_config_limits *limits);
@@ -64,7 +63,6 @@ enum irqreturn intel_dp_hpd_pulse(struct intel_digital_port *dig_port,void intel_edp_backlight_on (const struct intel_crtc_state *crtc_state,const struct drm_connector_state *conn_state);void intel_edp_backlight_off (const struct drm_connector_state *conn_state); -void intel_edp_fixup_vbt_bpp (struct intel_encoder *encoder,int pipe_bpp);void intel_dp_mst_suspend (struct drm_i915_private *dev_priv);void intel_dp_mst_resume (struct drm_i915_private *dev_priv);int intel_dp_max_link_rate (struct intel_dp *intel_dp);
drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c +3 -3
@@ -370,7 +370,7 @@ static int intel_dp_aux_vesa_setup_backlight(struct intel_connector *connector,int ret; ret =drm_edp_backlight_init (&intel_dp->aux, &panel->backlight.edp.vesa.info, - panel->vbt.backlight.pwm_freq_hz, intel_dp->edp_dpcd, + i915->vbt.backlight.pwm_freq_hz, intel_dp->edp_dpcd, ¤t_level, ¤t_mode);if (ret <0 )return ret;
@@ -454,7 +454,7 @@ int intel_dp_aux_init_backlight_funcs(struct intel_connector *connector)case INTEL_DP_AUX_BACKLIGHT_OFF :return -ENODEV ;case INTEL_DP_AUX_BACKLIGHT_AUTO : -switch (panel->vbt.backlight.type) { +switch (i915->vbt.backlight.type) {case INTEL_BACKLIGHT_VESA_EDP_AUX_INTERFACE : try_vesa_interface = true;break ;
@@ -466,7 +466,7 @@ int intel_dp_aux_init_backlight_funcs(struct intel_connector *connector) }break ;case INTEL_DP_AUX_BACKLIGHT_ON : -if (panel->vbt.backlight.type !=INTEL_BACKLIGHT_VESA_EDP_AUX_INTERFACE ) +if (i915->vbt.backlight.type !=INTEL_BACKLIGHT_VESA_EDP_AUX_INTERFACE ) try_intel_interface = true; try_vesa_interface = true;
drivers/gpu/drm/i915/display/intel_drrs.c +3 -0
@@ -217,6 +217,9 @@ static void intel_drrs_frontbuffer_update(struct drm_i915_private *dev_priv, {struct intel_crtc *crtc; +if (dev_priv->vbt.drrs_type !=DRRS_TYPE_SEAMLESS ) +return ; +for_each_intel_crtc (&dev_priv->drm, crtc) {unsigned int frontbuffer_bits;
drivers/gpu/drm/i915/display/intel_dsi.c +1 -1
@@ -102,7 +102,7 @@ intel_dsi_get_panel_orientation(struct intel_connector *connector)struct drm_i915_private *dev_priv =to_i915 (connector->base.dev);enum drm_panel_orientation orientation; - orientation = connector->panel.vbt.dsi.orientation; + orientation = dev_priv->vbt.dsi.orientation;if (orientation !=DRM_MODE_PANEL_ORIENTATION_UNKNOWN )return orientation;
drivers/gpu/drm/i915/display/intel_dsi_dcs_backlight.c +6 -3
@@ -160,10 +160,12 @@ static void dcs_enable_backlight(const struct intel_crtc_state *crtc_state,static int dcs_setup_backlight (struct intel_connector *connector,enum pipe unused) { +struct drm_device *dev = connector->base.dev; +struct drm_i915_private *dev_priv =to_i915 (dev);struct intel_panel *panel = &connector->panel; -if (panel->vbt.backlight.brightness_precision_bits >8 ) - panel->backlight.max = (1 << panel->vbt.backlight.brightness_precision_bits) -1 ; +if (dev_priv->vbt.backlight.brightness_precision_bits >8 ) + panel->backlight.max = (1 << dev_priv->vbt.backlight.brightness_precision_bits) -1 ;else panel->backlight.max =PANEL_PWM_MAX_VALUE ;
@@ -183,10 +185,11 @@ static const struct intel_panel_bl_funcs dcs_bl_funcs = {int intel_dsi_dcs_init_backlight_funcs (struct intel_connector *intel_connector) {struct drm_device *dev = intel_connector->base.dev; +struct drm_i915_private *dev_priv =to_i915 (dev);struct intel_encoder *encoder =intel_attached_encoder (intel_connector);struct intel_panel *panel = &intel_connector->panel; -if (panel->vbt.backlight.type !=INTEL_BACKLIGHT_DSI_DCS ) +if (dev_priv->vbt.backlight.type !=INTEL_BACKLIGHT_DSI_DCS )return -ENODEV ;if (drm_WARN_ON (dev, encoder->type !=INTEL_OUTPUT_DSI ))
drivers/gpu/drm/i915/display/intel_dsi_vbt.c +23 -33
173 lines not on this page · raw message
drivers/gpu/drm/i915/display/intel_lvds.c +2 -4
@@ -809,7 +809,7 @@ static bool compute_is_dual_link_lvds(struct intel_lvds_encoder *lvds_encoder)else val &= ~(LVDS_DETECTED |LVDS_PIPE_SEL_MASK );if (val ==0 ) - val = connector->panel.vbt.bios_lvds_val; + val = dev_priv->vbt.bios_lvds_val;return (val &LVDS_CLKB_POWER_MASK ) ==LVDS_CLKB_POWER_UP ; }
@@ -967,11 +967,9 @@ void intel_lvds_init(struct drm_i915_private *dev_priv) } intel_connector->edid = edid; -intel_bios_init_panel (dev_priv, &intel_connector->panel); -/* Try EDID first */ intel_panel_add_edid_fixed_modes (intel_connector, - intel_connector->panel.vbt.drrs_type !=DRRS_TYPE_NONE ); + dev_priv->vbt.drrs_type !=DRRS_TYPE_NONE );/* Failed to get EDID, what about VBT? */ if (!intel_panel_preferred_fixed_mode (intel_connector))
drivers/gpu/drm/i915/display/intel_panel.c +7 -6
@@ -75,8 +75,9 @@ const struct drm_display_mode * intel_panel_downclock_mode(struct intel_connector *connector, const struct drm_display_mode *adjusted_mode) { + struct drm_i915_private *i915 = to_i915(connector->base.dev);const struct drm_display_mode *fixed_mode, *best_mode =NULL ; -int min_vrefresh = connector->panel.vbt.seamless_drrs_min_refresh_rate; +int min_vrefresh = i915->vbt.seamless_drrs_min_refresh_rate;int max_vrefresh =drm_mode_vrefresh (adjusted_mode);/* pick the fixed_mode with the lowest refresh rate */
@@ -112,11 +113,13 @@ int intel_panel_get_modes(struct intel_connector *connector)enum drrs_type intel_panel_drrs_type (struct intel_connector *connector) { +struct drm_i915_private *i915 =to_i915 (connector->base.dev); +if (list_empty (&connector->panel.fixed_modes) ||list_is_singular (&connector->panel.fixed_modes))return DRRS_TYPE_NONE ; -return connector->panel.vbt.drrs_type; +return i915->vbt.drrs_type; } int intel_panel_compute_config(struct intel_connector *connector,
@@ -257,7 +260,7 @@ void intel_panel_add_vbt_lfp_fixed_mode(struct intel_connector *connector)struct drm_i915_private *i915 =to_i915 (connector->base.dev);const struct drm_display_mode *mode; - mode = connector->panel.vbt.lfp_lvds_vbt_mode; + mode = i915->vbt.lfp_lvds_vbt_mode;if (!mode)return ;
@@ -271,7 +274,7 @@ void intel_panel_add_vbt_sdvo_fixed_mode(struct intel_connector *connector)struct drm_i915_private *i915 =to_i915 (connector->base.dev);const struct drm_display_mode *mode; - mode = connector->panel.vbt.sdvo_lvds_vbt_mode; + mode = i915->vbt.sdvo_lvds_vbt_mode;if (!mode)return ;
@@ -636,8 +639,6 @@ void intel_panel_fini(struct intel_connector *connector)intel_backlight_destroy (panel); -intel_bios_fini_panel (panel); -list_for_each_entry_safe (fixed_mode, next, &panel->fixed_modes, head) {list_del (&fixed_mode->head);drm_mode_destroy (connector->base.dev, fixed_mode);
drivers/gpu/drm/i915/display/intel_pps.c +19 -51
111 lines not on this page · raw message
drivers/gpu/drm/i915/display/intel_psr.c +16 -19
@@ -86,13 +86,10 @@static bool psr_global_enabled (struct intel_dp *intel_dp) { -struct intel_connector *connector = intel_dp->attached_connector;struct drm_i915_private *i915 =dp_to_i915 (intel_dp);switch (intel_dp->psr.debug &I915_PSR_DEBUG_MODE_MASK ) {case I915_PSR_DEBUG_DEFAULT : -if (i915->params.enable_psr ==-1 ) -return connector->panel.vbt.psr.enable;return i915->params.enable_psr;case I915_PSR_DEBUG_DISABLE :return false;
@@ -402,7 +399,6 @@ static void intel_psr_enable_sink(struct intel_dp *intel_dp)static u32 intel_psr1_get_tp_time (struct intel_dp *intel_dp) { -struct intel_connector *connector = intel_dp->attached_connector;struct drm_i915_private *dev_priv =dp_to_i915 (intel_dp);u32 val =0 ;
@@ -415,20 +411,20 @@ static u32 intel_psr1_get_tp_time(struct intel_dp *intel_dp) goto check_tp3_sel; } -if (connector->panel.vbt.psr.tp1_wakeup_time_us ==0 ) +if (dev_priv->vbt.psr.tp1_wakeup_time_us ==0 ) val |= EDP_PSR_TP1_TIME_0us; -else if (connector->panel.vbt.psr.tp1_wakeup_time_us <=100 ) +else if (dev_priv->vbt.psr.tp1_wakeup_time_us <=100 ) val |= EDP_PSR_TP1_TIME_100us; -else if (connector->panel.vbt.psr.tp1_wakeup_time_us <=500 ) +else if (dev_priv->vbt.psr.tp1_wakeup_time_us <=500 ) val |= EDP_PSR_TP1_TIME_500us;else val |= EDP_PSR_TP1_TIME_2500us; -if (connector->panel.vbt.psr.tp2_tp3_wakeup_time_us ==0 ) +if (dev_priv->vbt.psr.tp2_tp3_wakeup_time_us ==0 ) val |= EDP_PSR_TP2_TP3_TIME_0us; -else if (connector->panel.vbt.psr.tp2_tp3_wakeup_time_us <=100 ) +else if (dev_priv->vbt.psr.tp2_tp3_wakeup_time_us <=100 ) val |= EDP_PSR_TP2_TP3_TIME_100us; -else if (connector->panel.vbt.psr.tp2_tp3_wakeup_time_us <=500 ) +else if (dev_priv->vbt.psr.tp2_tp3_wakeup_time_us <=500 ) val |= EDP_PSR_TP2_TP3_TIME_500us;else val |= EDP_PSR_TP2_TP3_TIME_2500us;
@@ -445,14 +441,13 @@ static u32 intel_psr1_get_tp_time(struct intel_dp *intel_dp)static u8 psr_compute_idle_frames (struct intel_dp *intel_dp) { -struct intel_connector *connector = intel_dp->attached_connector;struct drm_i915_private *dev_priv =dp_to_i915 (intel_dp);int idle_frames;/* Let's use 6 as the minimum to cover all known cases including the * off-by-one issue that HW has in some cases. */ - idle_frames =max (6 , connector->panel.vbt.psr.idle_frames); + idle_frames =max (6 , dev_priv->vbt.psr.idle_frames); idle_frames =max (idle_frames, intel_dp->psr.sink_sync_latency +1 );if (drm_WARN_ON (&dev_priv->drm, idle_frames >0xf ))
@@ -488,19 +483,18 @@ static void hsw_activate_psr1(struct intel_dp *intel_dp)static u32 intel_psr2_get_tp_time (struct intel_dp *intel_dp) { -struct intel_connector *connector = intel_dp->attached_connector;struct drm_i915_private *dev_priv =dp_to_i915 (intel_dp);u32 val =0 ;if (dev_priv->params.psr_safest_params)return EDP_PSR2_TP2_TIME_2500us; -if (connector->panel.vbt.psr.psr2_tp2_tp3_wakeup_time_us >=0 && - connector->panel.vbt.psr.psr2_tp2_tp3_wakeup_time_us <=50 ) +if (dev_priv->vbt.psr.psr2_tp2_tp3_wakeup_time_us >=0 && + dev_priv->vbt.psr.psr2_tp2_tp3_wakeup_time_us <=50 ) val |= EDP_PSR2_TP2_TIME_50us; -else if (connector->panel.vbt.psr.psr2_tp2_tp3_wakeup_time_us <=100 ) +else if (dev_priv->vbt.psr.psr2_tp2_tp3_wakeup_time_us <=100 ) val |= EDP_PSR2_TP2_TIME_100us; -else if (connector->panel.vbt.psr.psr2_tp2_tp3_wakeup_time_us <=500 ) +else if (dev_priv->vbt.psr.psr2_tp2_tp3_wakeup_time_us <=500 ) val |= EDP_PSR2_TP2_TIME_500us;else val |= EDP_PSR2_TP2_TIME_2500us;
@@ -2350,7 +2344,6 @@ void intel_psr_flush(struct drm_i915_private *dev_priv,*/ void intel_psr_init (struct intel_dp *intel_dp) { -struct intel_connector *connector = intel_dp->attached_connector;struct intel_digital_port *dig_port =dp_to_dig_port (intel_dp);struct drm_i915_private *dev_priv =dp_to_i915 (intel_dp);
@@ -2374,10 +2367,14 @@ void intel_psr_init(struct intel_dp *intel_dp) intel_dp->psr.source_support = true; +if (dev_priv->params.enable_psr ==-1 ) +if (!dev_priv->vbt.psr.enable) + dev_priv->params.enable_psr =0 ; +/* Set link_standby x link_off defaults */ if (DISPLAY_VER (dev_priv) <12 )/* For new platforms up to TGL let's respect VBT back again */ - intel_dp->psr.link_standby = connector->panel.vbt.psr.full_link; + intel_dp->psr.link_standby = dev_priv->vbt.psr.full_link;INIT_WORK (&intel_dp->psr.work, intel_psr_work);INIT_DELAYED_WORK (&intel_dp->psr.dc3co_work, tgl_dc3co_disable_work);
drivers/gpu/drm/i915/display/intel_sdvo.c +0 -3
@@ -2869,7 +2869,6 @@ static bool intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, int device) {struct drm_encoder *encoder = &intel_sdvo->base.base; -struct drm_i915_private *i915 =to_i915 (encoder->dev);struct drm_connector *connector;struct intel_connector *intel_connector;struct intel_sdvo_connector *intel_sdvo_connector;
@@ -2901,8 +2900,6 @@ intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, int device)if (!intel_sdvo_create_enhance_property (intel_sdvo, intel_sdvo_connector)) goto err; -intel_bios_init_panel (i915, &intel_connector->panel); -/* * Fetch modes from VBT. For SDVO prefer the VBT mode since some * SDVO->LVDS transcoders can't cope with the EDID mode.
drivers/gpu/drm/i915/display/vlv_dsi.c +5 -16
@@ -782,7 +782,6 @@ static void intel_dsi_pre_enable(struct intel_atomic_state *state, {struct intel_dsi *intel_dsi =enc_to_intel_dsi (encoder);struct intel_crtc *crtc =to_intel_crtc (pipe_config->uapi.crtc); -struct intel_connector *connector =to_intel_connector (conn_state->connector);struct drm_i915_private *dev_priv =to_i915 (crtc->base.dev);enum pipe pipe = crtc->pipe;enum port port;
@@ -839,7 +838,7 @@ static void intel_dsi_pre_enable(struct intel_atomic_state *state,* the delay in that case. If there is no deassert-seq, then an * unconditional msleep is used to give the panel time to power-on. */ -if (connector->panel.vbt.dsi.sequence[MIPI_SEQ_DEASSERT_RESET ]) { +if (dev_priv->vbt.dsi.sequence[MIPI_SEQ_DEASSERT_RESET ]) {intel_dsi_msleep (intel_dsi, intel_dsi->panel_on_delay);intel_dsi_vbt_exec_sequence (intel_dsi,MIPI_SEQ_DEASSERT_RESET ); }else {
@@ -1691,8 +1690,7 @@ static void vlv_dphy_param_init(struct intel_dsi *intel_dsi) {struct drm_device *dev = intel_dsi->base.base.dev;struct drm_i915_private *dev_priv =to_i915 (dev); -struct intel_connector *connector = intel_dsi->attached_connector; -struct mipi_config *mipi_config = connector->panel.vbt.dsi.config; +struct mipi_config *mipi_config = dev_priv->vbt.dsi.config;u32 tlpx_ns, extra_byte_count, tlpx_ui;u32 ui_num, ui_den;u32 prepare_cnt, exit_zero_cnt, clk_zero_cnt, trail_cnt;
@@ -1926,22 +1924,13 @@ void vlv_dsi_init(struct drm_i915_private *dev_priv) intel_dsi->panel_power_off_time =ktime_get_boottime (); -intel_bios_init_panel (dev_priv, &intel_connector->panel); - -if (intel_connector->panel.vbt.dsi.config->dual_link) +if (dev_priv->vbt.dsi.config->dual_link) intel_dsi->ports =BIT (PORT_A ) |BIT (PORT_C );else intel_dsi->ports =BIT (port); -if (drm_WARN_ON (&dev_priv->drm, intel_connector->panel.vbt.dsi.bl_ports & ~intel_dsi->ports)) - intel_connector->panel.vbt.dsi.bl_ports &= intel_dsi->ports; - - intel_dsi->dcs_backlight_ports = intel_connector->panel.vbt.dsi.bl_ports; - -if (drm_WARN_ON (&dev_priv->drm, intel_connector->panel.vbt.dsi.cabc_ports & ~intel_dsi->ports)) - intel_connector->panel.vbt.dsi.cabc_ports &= intel_dsi->ports; - - intel_dsi->dcs_cabc_ports = intel_connector->panel.vbt.dsi.cabc_ports; + intel_dsi->dcs_backlight_ports = dev_priv->vbt.dsi.bl_ports; + intel_dsi->dcs_cabc_ports = dev_priv->vbt.dsi.cabc_ports;/* Create a DSI host (and a device) for each port. */ for_each_dsi_port (port, intel_dsi->ports) {
drivers/gpu/drm/i915/i915_drv.h +63 -0
88 lines not on this page · raw message