diff options
Diffstat (limited to 'drivers/gpu')
| -rw-r--r-- | drivers/gpu/drm/i915/display/intel_dp.c | 32 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 4 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_drm_client.c | 5 | 
3 files changed, 34 insertions, 7 deletions
| diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c index e4a79c11fd25..ff67899522cf 100644 --- a/drivers/gpu/drm/i915/display/intel_dp.c +++ b/drivers/gpu/drm/i915/display/intel_dp.c @@ -388,13 +388,23 @@ static int dg2_max_source_rate(struct intel_dp *intel_dp)  	return intel_dp_is_edp(intel_dp) ? 810000 : 1350000;  } +static bool is_low_voltage_sku(struct drm_i915_private *i915, enum phy phy) +{ +	u32 voltage; + +	voltage = intel_de_read(i915, ICL_PORT_COMP_DW3(phy)) & VOLTAGE_INFO_MASK; + +	return voltage == VOLTAGE_INFO_0_85V; +} +  static int icl_max_source_rate(struct intel_dp *intel_dp)  {  	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);  	struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);  	enum phy phy = intel_port_to_phy(dev_priv, dig_port->base.port); -	if (intel_phy_is_combo(dev_priv, phy) && !intel_dp_is_edp(intel_dp)) +	if (intel_phy_is_combo(dev_priv, phy) && +	    (is_low_voltage_sku(dev_priv, phy) || !intel_dp_is_edp(intel_dp)))  		return 540000;  	return 810000; @@ -402,7 +412,23 @@ static int icl_max_source_rate(struct intel_dp *intel_dp)  static int ehl_max_source_rate(struct intel_dp *intel_dp)  { -	if (intel_dp_is_edp(intel_dp)) +	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp); +	struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev); +	enum phy phy = intel_port_to_phy(dev_priv, dig_port->base.port); + +	if (intel_dp_is_edp(intel_dp) || is_low_voltage_sku(dev_priv, phy)) +		return 540000; + +	return 810000; +} + +static int dg1_max_source_rate(struct intel_dp *intel_dp) +{ +	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp); +	struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev); +	enum phy phy = intel_port_to_phy(i915, dig_port->base.port); + +	if (intel_phy_is_combo(i915, phy) && is_low_voltage_sku(i915, phy))  		return 540000;  	return 810000; @@ -445,7 +471,7 @@ intel_dp_set_source_rates(struct intel_dp *intel_dp)  			max_rate = dg2_max_source_rate(intel_dp);  		else if (IS_ALDERLAKE_P(dev_priv) || IS_ALDERLAKE_S(dev_priv) ||  			 IS_DG1(dev_priv) || IS_ROCKETLAKE(dev_priv)) -			max_rate = 810000; +			max_rate = dg1_max_source_rate(intel_dp);  		else if (IS_JSL_EHL(dev_priv))  			max_rate = ehl_max_source_rate(intel_dp);  		else diff --git a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c index 22f55574a35c..88c2f38aa870 100644 --- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c +++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c @@ -2396,7 +2396,7 @@ static void icl_wrpll_params_populate(struct skl_wrpll_params *params,  }  /* - * Display WA #22010492432: ehl, tgl, adl-p + * Display WA #22010492432: ehl, tgl, adl-s, adl-p   * Program half of the nominal DCO divider fraction value.   */  static bool @@ -2404,7 +2404,7 @@ ehl_combo_pll_div_frac_wa_needed(struct drm_i915_private *i915)  {  	return ((IS_PLATFORM(i915, INTEL_ELKHARTLAKE) &&  		 IS_JSL_EHL_DISPLAY_STEP(i915, STEP_B0, STEP_FOREVER)) || -		 IS_TIGERLAKE(i915) || IS_ALDERLAKE_P(i915)) && +		 IS_TIGERLAKE(i915) || IS_ALDERLAKE_S(i915) || IS_ALDERLAKE_P(i915)) &&  		 i915->dpll.ref_clks.nssc == 38400;  } diff --git a/drivers/gpu/drm/i915/i915_drm_client.c b/drivers/gpu/drm/i915/i915_drm_client.c index 18d38cb59923..b09d1d386574 100644 --- a/drivers/gpu/drm/i915/i915_drm_client.c +++ b/drivers/gpu/drm/i915/i915_drm_client.c @@ -116,8 +116,9 @@ show_client_class(struct seq_file *m,  		total += busy_add(ctx, class);  	rcu_read_unlock(); -	seq_printf(m, "drm-engine-%s:\t%llu ns\n", -		   uabi_class_names[class], total); +	if (capacity) +		seq_printf(m, "drm-engine-%s:\t%llu ns\n", +			   uabi_class_names[class], total);  	if (capacity > 1)  		seq_printf(m, "drm-engine-capacity-%s:\t%u\n", | 
