Skip to content

Commit 08d27da

Browse files
committed
Merge tag 'drm-intel-fixes-2022-06-22' of git://anongit.freedesktop.org/drm/drm-intel into drm-fixes
drm/i915 fixes for v5.19-rc4: - Revert low voltage SKU check removal to fix display issues - Apply PLL DCO fraction workaround for ADL-S - Don't show engine classes not present in client fdinfo Signed-off-by: Dave Airlie <[email protected]> From: Jani Nikula <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
2 parents 0a86b0d + c7b28f5 commit 08d27da

File tree

3 files changed

+34
-7
lines changed

3 files changed

+34
-7
lines changed

drivers/gpu/drm/i915/display/intel_dp.c

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -388,21 +388,47 @@ static int dg2_max_source_rate(struct intel_dp *intel_dp)
388388
return intel_dp_is_edp(intel_dp) ? 810000 : 1350000;
389389
}
390390

391+
static bool is_low_voltage_sku(struct drm_i915_private *i915, enum phy phy)
392+
{
393+
u32 voltage;
394+
395+
voltage = intel_de_read(i915, ICL_PORT_COMP_DW3(phy)) & VOLTAGE_INFO_MASK;
396+
397+
return voltage == VOLTAGE_INFO_0_85V;
398+
}
399+
391400
static int icl_max_source_rate(struct intel_dp *intel_dp)
392401
{
393402
struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
394403
struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);
395404
enum phy phy = intel_port_to_phy(dev_priv, dig_port->base.port);
396405

397-
if (intel_phy_is_combo(dev_priv, phy) && !intel_dp_is_edp(intel_dp))
406+
if (intel_phy_is_combo(dev_priv, phy) &&
407+
(is_low_voltage_sku(dev_priv, phy) || !intel_dp_is_edp(intel_dp)))
398408
return 540000;
399409

400410
return 810000;
401411
}
402412

403413
static int ehl_max_source_rate(struct intel_dp *intel_dp)
404414
{
405-
if (intel_dp_is_edp(intel_dp))
415+
struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
416+
struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);
417+
enum phy phy = intel_port_to_phy(dev_priv, dig_port->base.port);
418+
419+
if (intel_dp_is_edp(intel_dp) || is_low_voltage_sku(dev_priv, phy))
420+
return 540000;
421+
422+
return 810000;
423+
}
424+
425+
static int dg1_max_source_rate(struct intel_dp *intel_dp)
426+
{
427+
struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
428+
struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev);
429+
enum phy phy = intel_port_to_phy(i915, dig_port->base.port);
430+
431+
if (intel_phy_is_combo(i915, phy) && is_low_voltage_sku(i915, phy))
406432
return 540000;
407433

408434
return 810000;
@@ -445,7 +471,7 @@ intel_dp_set_source_rates(struct intel_dp *intel_dp)
445471
max_rate = dg2_max_source_rate(intel_dp);
446472
else if (IS_ALDERLAKE_P(dev_priv) || IS_ALDERLAKE_S(dev_priv) ||
447473
IS_DG1(dev_priv) || IS_ROCKETLAKE(dev_priv))
448-
max_rate = 810000;
474+
max_rate = dg1_max_source_rate(intel_dp);
449475
else if (IS_JSL_EHL(dev_priv))
450476
max_rate = ehl_max_source_rate(intel_dp);
451477
else

drivers/gpu/drm/i915/display/intel_dpll_mgr.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2396,15 +2396,15 @@ static void icl_wrpll_params_populate(struct skl_wrpll_params *params,
23962396
}
23972397

23982398
/*
2399-
* Display WA #22010492432: ehl, tgl, adl-p
2399+
* Display WA #22010492432: ehl, tgl, adl-s, adl-p
24002400
* Program half of the nominal DCO divider fraction value.
24012401
*/
24022402
static bool
24032403
ehl_combo_pll_div_frac_wa_needed(struct drm_i915_private *i915)
24042404
{
24052405
return ((IS_PLATFORM(i915, INTEL_ELKHARTLAKE) &&
24062406
IS_JSL_EHL_DISPLAY_STEP(i915, STEP_B0, STEP_FOREVER)) ||
2407-
IS_TIGERLAKE(i915) || IS_ALDERLAKE_P(i915)) &&
2407+
IS_TIGERLAKE(i915) || IS_ALDERLAKE_S(i915) || IS_ALDERLAKE_P(i915)) &&
24082408
i915->dpll.ref_clks.nssc == 38400;
24092409
}
24102410

drivers/gpu/drm/i915/i915_drm_client.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,9 @@ show_client_class(struct seq_file *m,
116116
total += busy_add(ctx, class);
117117
rcu_read_unlock();
118118

119-
seq_printf(m, "drm-engine-%s:\t%llu ns\n",
120-
uabi_class_names[class], total);
119+
if (capacity)
120+
seq_printf(m, "drm-engine-%s:\t%llu ns\n",
121+
uabi_class_names[class], total);
121122

122123
if (capacity > 1)
123124
seq_printf(m, "drm-engine-capacity-%s:\t%u\n",

0 commit comments

Comments
 (0)