* [PATCH v2 0/6] ALPM AUX-Less
@ 2024-02-20 12:10 Jouni Högander
2024-02-20 12:10 ` [PATCH v2 1/6] drm/display: Add missing aux less alpm wake related bits Jouni Högander
` (8 more replies)
0 siblings, 9 replies; 12+ messages in thread
From: Jouni Högander @ 2024-02-20 12:10 UTC (permalink / raw)
To: intel-gfx
Cc: Jouni Högander, Animesh Manna, Arun R Murthy,
Ville Syrjälä
This patch set is implementing calculation of ALPM AUX-Less parameters
for Intel HW and writing them in case of AUX-Less is enabled. It is
also enabling ALPM AUX-Less for eDP Panel Replay. Current code is not
allowing Panel Replay on eDP. Patches for this are coming later.
This implementation is only for Panel Replay usage. LOBF (Link Off
Between Active Frames) usage needs more work.
Cc: Animesh Manna <animesh.manna@intel.com>
Cc: Arun R Murthy <arun.r.murthy@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
v2:
- use variables instead of values directly
- fix several max values
- move converting port clock to Mhz into _lnl_compute_*
- do not set AUX-Wake related bits for AUX-Less case
- do not write ALPM configuration for DP2.0 Panel Replay or PSR1.
Jouni Högander (6):
drm/display: Add missing aux less alpm wake related bits
drm/i915/psr: Calculate aux less wake time
drm/i915/psr: Silence period and lfps half cycle
drm/i915/psr: Add missing ALPM AUX-Less register definitions
drm/i915/psr: Enable ALPM for eDP Panel replay
drm/i915/psr: Do not write ALPM configuration for PSR1 or DP2.0 Panel
Replay
.../drm/i915/display/intel_display_types.h | 3 +
drivers/gpu/drm/i915/display/intel_psr.c | 182 +++++++++++++++++-
drivers/gpu/drm/i915/display/intel_psr_regs.h | 12 +-
include/drm/display/drm_dp.h | 5 +-
4 files changed, 192 insertions(+), 10 deletions(-)
--
2.34.1
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v2 1/6] drm/display: Add missing aux less alpm wake related bits
2024-02-20 12:10 [PATCH v2 0/6] ALPM AUX-Less Jouni Högander
@ 2024-02-20 12:10 ` Jouni Högander
2024-02-20 12:10 ` [PATCH v2 2/6] drm/i915/psr: Calculate aux less wake time Jouni Högander
` (7 subsequent siblings)
8 siblings, 0 replies; 12+ messages in thread
From: Jouni Högander @ 2024-02-20 12:10 UTC (permalink / raw)
To: intel-gfx; +Cc: Jouni Högander
eDP1.5 adds some more bits into DP_RECEIVER_ALPM_CAP and
DP_RECEIVER_ALPM_CONFIG registers. Add definitions for these.
Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
---
include/drm/display/drm_dp.h | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/include/drm/display/drm_dp.h b/include/drm/display/drm_dp.h
index 281afff6ee4e..fcee8d7c4717 100644
--- a/include/drm/display/drm_dp.h
+++ b/include/drm/display/drm_dp.h
@@ -232,6 +232,8 @@
#define DP_RECEIVER_ALPM_CAP 0x02e /* eDP 1.4 */
# define DP_ALPM_CAP (1 << 0)
+# define DP_ALPM_PM_STATE_2A_SUPPORT (1 << 1) /* eDP 1.5 */
+# define DP_ALPM_AUX_LESS_CAP (1 << 2) /* eDP 1.5 */
#define DP_SINK_DEVICE_AUX_FRAME_SYNC_CAP 0x02f /* eDP 1.4 */
# define DP_AUX_FRAME_SYNC_CAP (1 << 0)
@@ -677,7 +679,8 @@
#define DP_RECEIVER_ALPM_CONFIG 0x116 /* eDP 1.4 */
# define DP_ALPM_ENABLE (1 << 0)
-# define DP_ALPM_LOCK_ERROR_IRQ_HPD_ENABLE (1 << 1)
+# define DP_ALPM_LOCK_ERROR_IRQ_HPD_ENABLE (1 << 1) /* eDP 1.5 */
+# define DP_ALPM_MODE_AUX_LESS (1 << 2) /* eDP 1.5 */
#define DP_SINK_DEVICE_AUX_FRAME_SYNC_CONF 0x117 /* eDP 1.4 */
# define DP_AUX_FRAME_SYNC_ENABLE (1 << 0)
--
2.34.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v2 2/6] drm/i915/psr: Calculate aux less wake time
2024-02-20 12:10 [PATCH v2 0/6] ALPM AUX-Less Jouni Högander
2024-02-20 12:10 ` [PATCH v2 1/6] drm/display: Add missing aux less alpm wake related bits Jouni Högander
@ 2024-02-20 12:10 ` Jouni Högander
2024-02-26 11:01 ` Manna, Animesh
2024-02-20 12:10 ` [PATCH v2 3/6] drm/i915/psr: Silence period and lfps half cycle Jouni Högander
` (6 subsequent siblings)
8 siblings, 1 reply; 12+ messages in thread
From: Jouni Högander @ 2024-02-20 12:10 UTC (permalink / raw)
To: intel-gfx; +Cc: Jouni Högander
Calculate aux less wake time and store it into alpm_params struct
Bspec: 71477
v2:
- use variables instead of values directly
- fix max value
- move converting port clock to Mhz into _lnl_compute_aux_less_wake_time
Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
---
.../drm/i915/display/intel_display_types.h | 1 +
drivers/gpu/drm/i915/display/intel_psr.c | 60 +++++++++++++++++++
2 files changed, 61 insertions(+)
diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
index 0d4012097db1..a531c1e5af20 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -1721,6 +1721,7 @@ struct intel_psr {
/* LNL and beyond */
u8 check_entry_lines;
+ u8 aux_less_wake_lines;
} alpm_parameters;
ktime_t last_entry_attempt;
diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
index 72cadad09db5..83f3cab31878 100644
--- a/drivers/gpu/drm/i915/display/intel_psr.c
+++ b/drivers/gpu/drm/i915/display/intel_psr.c
@@ -1126,6 +1126,63 @@ static bool _compute_psr2_sdp_prior_scanline_indication(struct intel_dp *intel_d
return true;
}
+/*
+ * AUX-Less Wake Time = CEILING( ((PHY P2 to P0) + tLFPS_Period, Max+
+ * tSilence, Max+ tPHY Establishment + tCDS) / tline)
+ * For the "PHY P2 to P0" latency see the PHY Power Control page
+ * (PHY P2 to P0) : https://gfxspecs.intel.com/Predator/Home/Index/68965
+ * : 12 us
+ * The tLFPS_Period, Max term is 800ns
+ * The tSilence, Max term is 180ns
+ * The tPHY Establishment (a.k.a. t1) term is 50us
+ * The tCDS term is 1 or 2 times t2
+ * t2 = Number ML_PHY_LOCK * tML_PHY_LOCK
+ * Number ML_PHY_LOCK = ( 7 + CEILING( 6.5us / tML_PHY_LOCK ) + 1)
+ * Rounding up the 6.5us padding to the next ML_PHY_LOCK boundary and
+ * adding the "+ 1" term ensures all ML_PHY_LOCK sequences that start
+ * within the CDS period complete within the CDS period regardless of
+ * entry into the period
+ * tML_PHY_LOCK = TPS4 Length * ( 10 / (Link Rate in MHz) )
+ * TPS4 Length = 252 Symbols
+ */
+static int _lnl_compute_aux_less_wake_time(int port_clock)
+{
+ int tphy2_p2_to_p0 = 12 * 1000;
+ int tlfps_period_max = 800;
+ int tsilence_max = 180;
+ int t1 = 50 * 1000;
+ int tps4 = 252;
+ int tml_phy_lock = 1000 * 1000 * tps4 * 10 / port_clock;
+ int num_ml_phy_lock = 7 + DIV_ROUND_UP(6500, tml_phy_lock) + 1;
+ int t2 = num_ml_phy_lock * tml_phy_lock;
+ int tcds = 1 * t2;
+
+ return DIV_ROUND_UP(tphy2_p2_to_p0 + tlfps_period_max + tsilence_max +
+ t1 + tcds, 1000);
+}
+
+static int _lnl_compute_aux_less_alpm_params(struct intel_dp *intel_dp,
+ struct intel_crtc_state *crtc_state)
+{
+ struct drm_i915_private *i915 = dp_to_i915(intel_dp);
+ int aux_less_wake_time, aux_less_wake_lines;
+
+ aux_less_wake_time =
+ _lnl_compute_aux_less_wake_time(crtc_state->port_clock);
+ aux_less_wake_lines = intel_usecs_to_scanlines(&crtc_state->hw.adjusted_mode,
+ aux_less_wake_time);
+
+ if (aux_less_wake_lines > 63)
+ return false;
+
+ if (i915->display.params.psr_safest_params)
+ aux_less_wake_lines = 63;
+
+ intel_dp->psr.alpm_parameters.aux_less_wake_lines = aux_less_wake_lines;
+
+ return true;
+}
+
static bool _lnl_compute_alpm_params(struct intel_dp *intel_dp,
struct intel_crtc_state *crtc_state)
{
@@ -1142,6 +1199,9 @@ static bool _lnl_compute_alpm_params(struct intel_dp *intel_dp,
if (check_entry_lines > 15)
return false;
+ if (!_lnl_compute_aux_less_alpm_params(intel_dp, crtc_state))
+ return false;
+
if (i915->display.params.psr_safest_params)
check_entry_lines = 15;
--
2.34.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v2 3/6] drm/i915/psr: Silence period and lfps half cycle
2024-02-20 12:10 [PATCH v2 0/6] ALPM AUX-Less Jouni Högander
2024-02-20 12:10 ` [PATCH v2 1/6] drm/display: Add missing aux less alpm wake related bits Jouni Högander
2024-02-20 12:10 ` [PATCH v2 2/6] drm/i915/psr: Calculate aux less wake time Jouni Högander
@ 2024-02-20 12:10 ` Jouni Högander
2024-02-20 12:10 ` [PATCH v2 4/6] drm/i915/psr: Add missing ALPM AUX-Less register definitions Jouni Högander
` (5 subsequent siblings)
8 siblings, 0 replies; 12+ messages in thread
From: Jouni Högander @ 2024-02-20 12:10 UTC (permalink / raw)
To: intel-gfx; +Cc: Jouni Högander
Add get function for silence period and lfps half cycle. Values are taken
from the tables in bspec.
Bspec: 71632
v2:
- fix some checks
- add some more comments
Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
---
.../drm/i915/display/intel_display_types.h | 2 +
drivers/gpu/drm/i915/display/intel_psr.c | 81 ++++++++++++++++++-
2 files changed, 81 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
index a531c1e5af20..8ef2ed657632 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -1722,6 +1722,8 @@ struct intel_psr {
/* LNL and beyond */
u8 check_entry_lines;
u8 aux_less_wake_lines;
+ u8 silence_period_sym_clocks;
+ u8 lfps_half_cycle_num_of_syms;
} alpm_parameters;
ktime_t last_entry_attempt;
diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
index 83f3cab31878..a269e3c10db9 100644
--- a/drivers/gpu/drm/i915/display/intel_psr.c
+++ b/drivers/gpu/drm/i915/display/intel_psr.c
@@ -1126,6 +1126,74 @@ static bool _compute_psr2_sdp_prior_scanline_indication(struct intel_dp *intel_d
return true;
}
+/*
+ * See Bspec: 71632 for the table
+ *
+ * Silence_period = tSilence,Min + ((tSilence,Max - tSilence,Min) / 2)
+ *
+ * Half cycle duration:
+ *
+ * Link rates 1.62 - 4.32 and tLFPS_Cycle = 70 ns
+ * FLOOR( (Link Rate * tLFPS_Cycle) / (2 * 10) )
+ *
+ * Link rates 5.4 - 8.1
+ * PORT_ALPM_LFPS_CTL[ LFPS Cycle Count ] = 10
+ * LFPS Period chosen is the mid-point of the min:max values from the table
+ * FLOOR( LFPS Period in Symbol clocks /
+ * (2 * PORT_ALPM_LFPS_CTL[ LFPS Cycle Count ]) )
+ */
+static bool _lnl_get_silence_period_and_lfps_half_cycle(int link_rate,
+ int *silence_period,
+ int *lfps_half_cycle)
+{
+ switch (link_rate) {
+ case 162000:
+ *silence_period = 20;
+ *lfps_half_cycle = 5;
+ break;
+ case 216000:
+ *silence_period = 27;
+ *lfps_half_cycle = 7;
+ break;
+ case 243000:
+ *silence_period = 31;
+ *lfps_half_cycle = 8;
+ break;
+ case 270000:
+ *silence_period = 34;
+ *lfps_half_cycle = 9;
+ break;
+ case 324000:
+ *silence_period = 41;
+ *lfps_half_cycle = 11;
+ break;
+ case 432000:
+ *silence_period = 56;
+ *lfps_half_cycle = 15;
+ break;
+ case 540000:
+ *silence_period = 69;
+ *lfps_half_cycle = 12;
+ break;
+ case 648000:
+ *silence_period = 84;
+ *lfps_half_cycle = 15;
+ break;
+ case 675000:
+ *silence_period = 87;
+ *lfps_half_cycle = 15;
+ break;
+ case 810000:
+ *silence_period = 104;
+ *lfps_half_cycle = 19;
+ break;
+ default:
+ *silence_period = *lfps_half_cycle = -1;
+ return false;
+ }
+ return true;
+}
+
/*
* AUX-Less Wake Time = CEILING( ((PHY P2 to P0) + tLFPS_Period, Max+
* tSilence, Max+ tPHY Establishment + tCDS) / tline)
@@ -1165,20 +1233,29 @@ static int _lnl_compute_aux_less_alpm_params(struct intel_dp *intel_dp,
struct intel_crtc_state *crtc_state)
{
struct drm_i915_private *i915 = dp_to_i915(intel_dp);
- int aux_less_wake_time, aux_less_wake_lines;
+ int aux_less_wake_time, aux_less_wake_lines, silence_period,
+ lfps_half_cycle;
aux_less_wake_time =
_lnl_compute_aux_less_wake_time(crtc_state->port_clock);
aux_less_wake_lines = intel_usecs_to_scanlines(&crtc_state->hw.adjusted_mode,
aux_less_wake_time);
- if (aux_less_wake_lines > 63)
+ if (!_lnl_get_silence_period_and_lfps_half_cycle(intel_dp->link_rate,
+ &silence_period,
+ &lfps_half_cycle))
+ return false;
+
+ if (aux_less_wake_lines > 63 || silence_period > 255 ||
+ lfps_half_cycle > 31)
return false;
if (i915->display.params.psr_safest_params)
aux_less_wake_lines = 63;
intel_dp->psr.alpm_parameters.aux_less_wake_lines = aux_less_wake_lines;
+ intel_dp->psr.alpm_parameters.silence_period_sym_clocks = silence_period;
+ intel_dp->psr.alpm_parameters.lfps_half_cycle_num_of_syms = lfps_half_cycle;
return true;
}
--
2.34.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v2 4/6] drm/i915/psr: Add missing ALPM AUX-Less register definitions
2024-02-20 12:10 [PATCH v2 0/6] ALPM AUX-Less Jouni Högander
` (2 preceding siblings ...)
2024-02-20 12:10 ` [PATCH v2 3/6] drm/i915/psr: Silence period and lfps half cycle Jouni Högander
@ 2024-02-20 12:10 ` Jouni Högander
2024-02-20 12:10 ` [PATCH v2 5/6] drm/i915/psr: Enable ALPM for eDP Panel replay Jouni Högander
` (4 subsequent siblings)
8 siblings, 0 replies; 12+ messages in thread
From: Jouni Högander @ 2024-02-20 12:10 UTC (permalink / raw)
To: intel-gfx; +Cc: Jouni Högander
Couple of ALPM AUX-Less related fields are missing from ALPM register
definitions. Add these and remove some duplicate definitions.
Bspec: 70294
V2: add Bspec reference
Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
---
drivers/gpu/drm/i915/display/intel_psr_regs.h | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_psr_regs.h b/drivers/gpu/drm/i915/display/intel_psr_regs.h
index 8427a736f639..b004672d1deb 100644
--- a/drivers/gpu/drm/i915/display/intel_psr_regs.h
+++ b/drivers/gpu/drm/i915/display/intel_psr_regs.h
@@ -348,9 +348,13 @@
#define PORT_ALPM_LFPS_CTL(tran) _MMIO_TRANS2(tran, _PORT_ALPM_LFPS_CTL_A)
#define PORT_ALPM_LFPS_CTL_LFPS_START_POLARITY REG_BIT(31)
#define PORT_ALPM_LFPS_CTL_LFPS_CYCLE_COUNT_MASK REG_GENMASK(27, 24)
-#define ALPM_CTL_EXTENDED_FAST_WAKE_MIN_LINES 5
-#define ALPM_CTL_EXTENDED_FAST_WAKE_TIME(lines) REG_FIELD_PREP(ALPM_CTL_EXTENDED_FAST_WAKE_TIME_MASK, (lines) - ALPM_CTL_EXTENDED_FAST_WAKE_MIN_LINES)
-#define ALPM_CTL_AUX_LESS_WAKE_TIME_MASK REG_GENMASK(5, 0)
-#define ALPM_CTL_AUX_LESS_WAKE_TIME(val) REG_FIELD_PREP(ALPM_CTL_AUX_LESS_WAKE_TIME_MASK, val)
+#define PORT_ALPM_LFPS_CTL_LFPS_CYCLE_COUNT_MIN 7
+#define PORT_ALPM_LFPS_CTL_LFPS_CYCLE_COUNT(val) REG_FIELD_PREP(PORT_ALPM_LFPS_CTL_LFPS_CYCLE_COUNT_MASK, (val) - PORT_ALPM_LFPS_CTL_LFPS_CYCLE_COUNT_MIN)
+#define PORT_ALPM_LFPS_CTL_LFPS_HALF_CYCLE_DURATION_MASK REG_GENMASK(20, 16)
+#define PORT_ALPM_LFPS_CTL_LFPS_HALF_CYCLE_DURATION(val) REG_FIELD_PREP(PORT_ALPM_LFPS_CTL_LFPS_HALF_CYCLE_DURATION_MASK, val)
+#define PORT_ALPM_LFPS_CTL_FIRST_LFPS_HALF_CYCLE_DURATION_MASK REG_GENMASK(12, 8)
+#define PORT_ALPM_LFPS_CTL_FIRST_LFPS_HALF_CYCLE_DURATION(val) REG_FIELD_PREP(PORT_ALPM_LFPS_CTL_LFPS_HALF_CYCLE_DURATION_MASK, val)
+#define PORT_ALPM_LFPS_CTL_LAST_LFPS_HALF_CYCLE_DURATION_MASK REG_GENMASK(4, 0)
+#define PORT_ALPM_LFPS_CTL_LAST_LFPS_HALF_CYCLE_DURATION(val) REG_FIELD_PREP(PORT_ALPM_LFPS_CTL_LFPS_HALF_CYCLE_DURATION_MASK, val)
#endif /* __INTEL_PSR_REGS_H__ */
--
2.34.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v2 5/6] drm/i915/psr: Enable ALPM for eDP Panel replay
2024-02-20 12:10 [PATCH v2 0/6] ALPM AUX-Less Jouni Högander
` (3 preceding siblings ...)
2024-02-20 12:10 ` [PATCH v2 4/6] drm/i915/psr: Add missing ALPM AUX-Less register definitions Jouni Högander
@ 2024-02-20 12:10 ` Jouni Högander
2024-02-21 18:35 ` kernel test robot
2024-02-20 12:10 ` [PATCH v2 6/6] drm/i915/psr: Do not write ALPM configuration for PSR1 or DP2.0 Panel Replay Jouni Högander
` (3 subsequent siblings)
8 siblings, 1 reply; 12+ messages in thread
From: Jouni Högander @ 2024-02-20 12:10 UTC (permalink / raw)
To: intel-gfx; +Cc: Jouni Högander
Enable ALPM AUX-Less for Panel Replay eDP. Also write all calculated
AUX-Less configuration values accordingly.
Bspec: 71477
v2:
- do not set AUX-Wake related bits for AUX-Less case
- drop switch to active latency
- add SLEEP_HOLD_TIME_50_SYMBOLS
- add PORT_ALPM_CTL_MAX_PHY_SWING_HOLD
Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
remove _SWITCH_TO_ACTIVE_LATENCY
add SLEEP_HOLD_TIME_50_SYMBOLS
add PORT_ALPM_CTL_MAX_PHY_SWING_HOLD
Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
---
drivers/gpu/drm/i915/display/intel_psr.c | 42 +++++++++++++++++++++---
1 file changed, 38 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
index a269e3c10db9..bf410c4890f4 100644
--- a/drivers/gpu/drm/i915/display/intel_psr.c
+++ b/drivers/gpu/drm/i915/display/intel_psr.c
@@ -1696,14 +1696,39 @@ static void lnl_alpm_configure(struct intel_dp *intel_dp)
struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
struct intel_psr *psr = &intel_dp->psr;
+ u32 alpm_ctl;
if (DISPLAY_VER(dev_priv) < 20)
return;
- intel_de_write(dev_priv, ALPM_CTL(cpu_transcoder),
- ALPM_CTL_EXTENDED_FAST_WAKE_ENABLE |
- ALPM_CTL_ALPM_ENTRY_CHECK(psr->alpm_parameters.check_entry_lines) |
- ALPM_CTL_EXTENDED_FAST_WAKE_TIME(psr->alpm_parameters.fast_wake_lines));
+ if (intel_dp->psr.panel_replay_enabled && intel_dp_is_edp(intel_dp)) {
+ alpm_ctl |= ALPM_CTL_ALPM_ENABLE |
+ ALPM_CTL_ALPM_AUX_LESS_ENABLE |
+ ALPM_CTL_AUX_LESS_SLEEP_HOLD_TIME_50_SYMBOLS;
+
+ intel_de_write(dev_priv, PORT_ALPM_CTL(cpu_transcoder),
+ PORT_ALPM_CTL_ALPM_AUX_LESS_ENABLE |
+ PORT_ALPM_CTL_MAX_PHY_SWING_SETUP(15) |
+ PORT_ALPM_CTL_MAX_PHY_SWING_HOLD(0) |
+ PORT_ALPM_CTL_SILENCE_PERIOD(
+ psr->alpm_parameters.silence_period_sym_clocks));
+
+ intel_de_write(dev_priv, PORT_ALPM_LFPS_CTL(cpu_transcoder),
+ PORT_ALPM_LFPS_CTL_LFPS_CYCLE_COUNT(10) |
+ PORT_ALPM_LFPS_CTL_LFPS_HALF_CYCLE_DURATION(
+ psr->alpm_parameters.lfps_half_cycle_num_of_syms) |
+ PORT_ALPM_LFPS_CTL_FIRST_LFPS_HALF_CYCLE_DURATION(
+ psr->alpm_parameters.lfps_half_cycle_num_of_syms) |
+ PORT_ALPM_LFPS_CTL_LAST_LFPS_HALF_CYCLE_DURATION(
+ psr->alpm_parameters.lfps_half_cycle_num_of_syms));
+ } else {
+ alpm_ctl = ALPM_CTL_EXTENDED_FAST_WAKE_ENABLE |
+ ALPM_CTL_EXTENDED_FAST_WAKE_TIME(psr->alpm_parameters.fast_wake_lines);
+ }
+
+ alpm_ctl |= ALPM_CTL_ALPM_ENTRY_CHECK(psr->alpm_parameters.check_entry_lines);
+
+ intel_de_write(dev_priv, ALPM_CTL(cpu_transcoder), alpm_ctl);
}
static void intel_psr_enable_source(struct intel_dp *intel_dp,
@@ -1974,6 +1999,15 @@ static void intel_psr_disable_locked(struct intel_dp *intel_dp)
intel_snps_phy_update_psr_power_state(dev_priv, phy, false);
+ if (intel_dp->psr.panel_replay_enabled && intel_dp_is_edp(intel_dp)) {
+ intel_de_rmw(dev_priv, ALPM_CTL(cpu_transcoder),
+ ALPM_CTL_ALPM_ENABLE |
+ ALPM_CTL_ALPM_AUX_LESS_ENABLE, 0);
+
+ intel_de_rmw(dev_priv, PORT_ALPM_CTL(cpu_transcoder),
+ PORT_ALPM_CTL_ALPM_AUX_LESS_ENABLE, 0);
+ }
+
/* Disable PSR on Sink */
drm_dp_dpcd_writeb(&intel_dp->aux, DP_PSR_EN_CFG, 0);
--
2.34.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v2 6/6] drm/i915/psr: Do not write ALPM configuration for PSR1 or DP2.0 Panel Replay
2024-02-20 12:10 [PATCH v2 0/6] ALPM AUX-Less Jouni Högander
` (4 preceding siblings ...)
2024-02-20 12:10 ` [PATCH v2 5/6] drm/i915/psr: Enable ALPM for eDP Panel replay Jouni Högander
@ 2024-02-20 12:10 ` Jouni Högander
2024-02-20 13:02 ` ✗ Fi.CI.CHECKPATCH: warning for ALPM AUX-Less (rev2) Patchwork
` (2 subsequent siblings)
8 siblings, 0 replies; 12+ messages in thread
From: Jouni Högander @ 2024-02-20 12:10 UTC (permalink / raw)
To: intel-gfx; +Cc: Jouni Högander
No need to write ALPM configuration for DP2.0 Panel Replay or PSR1.
Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
---
drivers/gpu/drm/i915/display/intel_psr.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
index bf410c4890f4..ed5f62f89027 100644
--- a/drivers/gpu/drm/i915/display/intel_psr.c
+++ b/drivers/gpu/drm/i915/display/intel_psr.c
@@ -1698,7 +1698,8 @@ static void lnl_alpm_configure(struct intel_dp *intel_dp)
struct intel_psr *psr = &intel_dp->psr;
u32 alpm_ctl;
- if (DISPLAY_VER(dev_priv) < 20)
+ if (DISPLAY_VER(dev_priv) < 20 || (!intel_dp->psr.psr2_enabled &&
+ !intel_dp_is_edp(intel_dp)))
return;
if (intel_dp->psr.panel_replay_enabled && intel_dp_is_edp(intel_dp)) {
--
2.34.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* ✗ Fi.CI.CHECKPATCH: warning for ALPM AUX-Less (rev2)
2024-02-20 12:10 [PATCH v2 0/6] ALPM AUX-Less Jouni Högander
` (5 preceding siblings ...)
2024-02-20 12:10 ` [PATCH v2 6/6] drm/i915/psr: Do not write ALPM configuration for PSR1 or DP2.0 Panel Replay Jouni Högander
@ 2024-02-20 13:02 ` Patchwork
2024-02-20 13:02 ` ✗ Fi.CI.SPARSE: " Patchwork
2024-02-20 13:20 ` ✗ Fi.CI.BAT: failure " Patchwork
8 siblings, 0 replies; 12+ messages in thread
From: Patchwork @ 2024-02-20 13:02 UTC (permalink / raw)
To: Jouni Högander; +Cc: intel-gfx
== Series Details ==
Series: ALPM AUX-Less (rev2)
URL : https://patchwork.freedesktop.org/series/129938/
State : warning
== Summary ==
Error: dim checkpatch failed
ea6ececafe60 drm/display: Add missing aux less alpm wake related bits
434fb689c399 drm/i915/psr: Calculate aux less wake time
c2f006945429 drm/i915/psr: Silence period and lfps half cycle
3558f2d67484 drm/i915/psr: Add missing ALPM AUX-Less register definitions
-:31: WARNING:LONG_LINE: line length of 169 exceeds 100 columns
#31: FILE: drivers/gpu/drm/i915/display/intel_psr_regs.h:352:
+#define PORT_ALPM_LFPS_CTL_LFPS_CYCLE_COUNT(val) REG_FIELD_PREP(PORT_ALPM_LFPS_CTL_LFPS_CYCLE_COUNT_MASK, (val) - PORT_ALPM_LFPS_CTL_LFPS_CYCLE_COUNT_MIN)
-:33: WARNING:LONG_LINE: line length of 133 exceeds 100 columns
#33: FILE: drivers/gpu/drm/i915/display/intel_psr_regs.h:354:
+#define PORT_ALPM_LFPS_CTL_LFPS_HALF_CYCLE_DURATION(val) REG_FIELD_PREP(PORT_ALPM_LFPS_CTL_LFPS_HALF_CYCLE_DURATION_MASK, val)
-:35: WARNING:LONG_LINE: line length of 133 exceeds 100 columns
#35: FILE: drivers/gpu/drm/i915/display/intel_psr_regs.h:356:
+#define PORT_ALPM_LFPS_CTL_FIRST_LFPS_HALF_CYCLE_DURATION(val) REG_FIELD_PREP(PORT_ALPM_LFPS_CTL_LFPS_HALF_CYCLE_DURATION_MASK, val)
-:37: WARNING:LONG_LINE: line length of 133 exceeds 100 columns
#37: FILE: drivers/gpu/drm/i915/display/intel_psr_regs.h:358:
+#define PORT_ALPM_LFPS_CTL_LAST_LFPS_HALF_CYCLE_DURATION(val) REG_FIELD_PREP(PORT_ALPM_LFPS_CTL_LFPS_HALF_CYCLE_DURATION_MASK, val)
total: 0 errors, 4 warnings, 0 checks, 17 lines checked
8784d6789a71 drm/i915/psr: Enable ALPM for eDP Panel replay
-:26: WARNING:BAD_SIGN_OFF: Duplicate signature
#26:
Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
-:54: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#54: FILE: drivers/gpu/drm/i915/display/intel_psr.c:1713:
+ PORT_ALPM_CTL_SILENCE_PERIOD(
-:59: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#59: FILE: drivers/gpu/drm/i915/display/intel_psr.c:1718:
+ PORT_ALPM_LFPS_CTL_LFPS_HALF_CYCLE_DURATION(
-:61: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#61: FILE: drivers/gpu/drm/i915/display/intel_psr.c:1720:
+ PORT_ALPM_LFPS_CTL_FIRST_LFPS_HALF_CYCLE_DURATION(
-:63: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#63: FILE: drivers/gpu/drm/i915/display/intel_psr.c:1722:
+ PORT_ALPM_LFPS_CTL_LAST_LFPS_HALF_CYCLE_DURATION(
total: 0 errors, 1 warnings, 4 checks, 58 lines checked
603e13a8edad drm/i915/psr: Do not write ALPM configuration for PSR1 or DP2.0 Panel Replay
^ permalink raw reply [flat|nested] 12+ messages in thread
* ✗ Fi.CI.SPARSE: warning for ALPM AUX-Less (rev2)
2024-02-20 12:10 [PATCH v2 0/6] ALPM AUX-Less Jouni Högander
` (6 preceding siblings ...)
2024-02-20 13:02 ` ✗ Fi.CI.CHECKPATCH: warning for ALPM AUX-Less (rev2) Patchwork
@ 2024-02-20 13:02 ` Patchwork
2024-02-20 13:20 ` ✗ Fi.CI.BAT: failure " Patchwork
8 siblings, 0 replies; 12+ messages in thread
From: Patchwork @ 2024-02-20 13:02 UTC (permalink / raw)
To: Jouni Högander; +Cc: intel-gfx
== Series Details ==
Series: ALPM AUX-Less (rev2)
URL : https://patchwork.freedesktop.org/series/129938/
State : warning
== Summary ==
Error: dim sparse failed
Sparse version: v0.6.2
Fast mode used, each commit won't be checked separately.
^ permalink raw reply [flat|nested] 12+ messages in thread
* ✗ Fi.CI.BAT: failure for ALPM AUX-Less (rev2)
2024-02-20 12:10 [PATCH v2 0/6] ALPM AUX-Less Jouni Högander
` (7 preceding siblings ...)
2024-02-20 13:02 ` ✗ Fi.CI.SPARSE: " Patchwork
@ 2024-02-20 13:20 ` Patchwork
8 siblings, 0 replies; 12+ messages in thread
From: Patchwork @ 2024-02-20 13:20 UTC (permalink / raw)
To: Jouni Högander; +Cc: intel-gfx
[-- Attachment #1: Type: text/plain, Size: 6565 bytes --]
== Series Details ==
Series: ALPM AUX-Less (rev2)
URL : https://patchwork.freedesktop.org/series/129938/
State : failure
== Summary ==
CI Bug Log - changes from CI_DRM_14300 -> Patchwork_129938v2
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with Patchwork_129938v2 absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in Patchwork_129938v2, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
to document this new failure mode, which will reduce false positives in CI.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_129938v2/index.html
Participating hosts (40 -> 37)
------------------------------
Missing (3): fi-glk-j4005 bat-kbl-2 fi-snb-2520m
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in Patchwork_129938v2:
### IGT changes ###
#### Possible regressions ####
* igt@i915_selftest@live@hangcheck:
- bat-rplp-1: [PASS][1] -> [ABORT][2]
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14300/bat-rplp-1/igt@i915_selftest@live@hangcheck.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_129938v2/bat-rplp-1/igt@i915_selftest@live@hangcheck.html
Known issues
------------
Here are the changes found in Patchwork_129938v2 that come from known issues:
### CI changes ###
#### Issues hit ####
* boot:
- bat-jsl-1: [PASS][3] -> [FAIL][4] ([i915#8293])
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14300/bat-jsl-1/boot.html
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_129938v2/bat-jsl-1/boot.html
#### Possible fixes ####
* boot:
- fi-apl-guc: [FAIL][5] ([i915#8293]) -> [PASS][6]
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14300/fi-apl-guc/boot.html
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_129938v2/fi-apl-guc/boot.html
### IGT changes ###
#### Issues hit ####
* igt@gem_lmem_swapping@basic:
- fi-apl-guc: NOTRUN -> [SKIP][7] ([fdo#109271] / [i915#4613]) +3 other tests skip
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_129938v2/fi-apl-guc/igt@gem_lmem_swapping@basic.html
* igt@i915_pm_rpm@module-reload:
- fi-kbl-7567u: [PASS][8] -> [CRASH][9] ([i915#9947])
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14300/fi-kbl-7567u/igt@i915_pm_rpm@module-reload.html
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_129938v2/fi-kbl-7567u/igt@i915_pm_rpm@module-reload.html
* igt@kms_hdmi_inject@inject-audio:
- fi-apl-guc: NOTRUN -> [SKIP][10] ([fdo#109271]) +13 other tests skip
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_129938v2/fi-apl-guc/igt@kms_hdmi_inject@inject-audio.html
#### Possible fixes ####
* igt@gem_busy@busy@all-engines:
- {bat-arls-2}: [INCOMPLETE][11] ([i915#10194]) -> [PASS][12]
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14300/bat-arls-2/igt@gem_busy@busy@all-engines.html
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_129938v2/bat-arls-2/igt@gem_busy@busy@all-engines.html
* igt@i915_selftest@live@hangcheck:
- {bat-adls-6}: [DMESG-WARN][13] ([i915#5591]) -> [PASS][14]
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14300/bat-adls-6/igt@i915_selftest@live@hangcheck.html
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_129938v2/bat-adls-6/igt@i915_selftest@live@hangcheck.html
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
[fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
[i915#10194]: https://gitlab.freedesktop.org/drm/intel/issues/10194
[i915#10196]: https://gitlab.freedesktop.org/drm/intel/issues/10196
[i915#10197]: https://gitlab.freedesktop.org/drm/intel/issues/10197
[i915#10200]: https://gitlab.freedesktop.org/drm/intel/issues/10200
[i915#10202]: https://gitlab.freedesktop.org/drm/intel/issues/10202
[i915#10206]: https://gitlab.freedesktop.org/drm/intel/issues/10206
[i915#10207]: https://gitlab.freedesktop.org/drm/intel/issues/10207
[i915#10208]: https://gitlab.freedesktop.org/drm/intel/issues/10208
[i915#10209]: https://gitlab.freedesktop.org/drm/intel/issues/10209
[i915#10211]: https://gitlab.freedesktop.org/drm/intel/issues/10211
[i915#10212]: https://gitlab.freedesktop.org/drm/intel/issues/10212
[i915#10213]: https://gitlab.freedesktop.org/drm/intel/issues/10213
[i915#10214]: https://gitlab.freedesktop.org/drm/intel/issues/10214
[i915#10215]: https://gitlab.freedesktop.org/drm/intel/issues/10215
[i915#10216]: https://gitlab.freedesktop.org/drm/intel/issues/10216
[i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708
[i915#4077]: https://gitlab.freedesktop.org/drm/intel/issues/4077
[i915#4079]: https://gitlab.freedesktop.org/drm/intel/issues/4079
[i915#4083]: https://gitlab.freedesktop.org/drm/intel/issues/4083
[i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
[i915#5591]: https://gitlab.freedesktop.org/drm/intel/issues/5591
[i915#8293]: https://gitlab.freedesktop.org/drm/intel/issues/8293
[i915#8809]: https://gitlab.freedesktop.org/drm/intel/issues/8809
[i915#9688]: https://gitlab.freedesktop.org/drm/intel/issues/9688
[i915#9886]: https://gitlab.freedesktop.org/drm/intel/issues/9886
[i915#9947]: https://gitlab.freedesktop.org/drm/intel/issues/9947
Build changes
-------------
* Linux: CI_DRM_14300 -> Patchwork_129938v2
CI-20190529: 20190529
CI_DRM_14300: e2b02e89746d8eff8c244f938eecd0f1db8eb805 @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_7718: 40e8b9122853f455c84afcfa56469a6bc9a0d564 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
Patchwork_129938v2: e2b02e89746d8eff8c244f938eecd0f1db8eb805 @ git://anongit.freedesktop.org/gfx-ci/linux
### Linux commits
aad55de2724d drm/i915/psr: Do not write ALPM configuration for PSR1 or DP2.0 Panel Replay
aedc0bf35454 drm/i915/psr: Enable ALPM for eDP Panel replay
40f17dca91be drm/i915/psr: Add missing ALPM AUX-Less register definitions
34d6929108e1 drm/i915/psr: Silence period and lfps half cycle
8a7e9a3a75ae drm/i915/psr: Calculate aux less wake time
221a96117a6b drm/display: Add missing aux less alpm wake related bits
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_129938v2/index.html
[-- Attachment #2: Type: text/html, Size: 6085 bytes --]
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v2 5/6] drm/i915/psr: Enable ALPM for eDP Panel replay
2024-02-20 12:10 ` [PATCH v2 5/6] drm/i915/psr: Enable ALPM for eDP Panel replay Jouni Högander
@ 2024-02-21 18:35 ` kernel test robot
0 siblings, 0 replies; 12+ messages in thread
From: kernel test robot @ 2024-02-21 18:35 UTC (permalink / raw)
To: Jouni Högander, intel-gfx; +Cc: llvm, oe-kbuild-all, Jouni Högander
Hi Jouni,
kernel test robot noticed the following build warnings:
[auto build test WARNING on drm-intel/for-linux-next]
[also build test WARNING on drm-tip/drm-tip drm/drm-next next-20240221]
[cannot apply to drm-intel/for-linux-next-fixes linus/master v6.8-rc5]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Jouni-H-gander/drm-display-Add-missing-aux-less-alpm-wake-related-bits/20240220-201356
base: git://anongit.freedesktop.org/drm-intel for-linux-next
patch link: https://lore.kernel.org/r/20240220121045.2156004-6-jouni.hogander%40intel.com
patch subject: [PATCH v2 5/6] drm/i915/psr: Enable ALPM for eDP Panel replay
config: riscv-allmodconfig (https://download.01.org/0day-ci/archive/20240222/202402220225.2eViN531-lkp@intel.com/config)
compiler: clang version 19.0.0git (https://github.com/llvm/llvm-project 36adfec155de366d722f2bac8ff9162289dcf06c)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240222/202402220225.2eViN531-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202402220225.2eViN531-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> drivers/gpu/drm/i915/display/intel_psr.c:1705:3: warning: variable 'alpm_ctl' is uninitialized when used here [-Wuninitialized]
1705 | alpm_ctl |= ALPM_CTL_ALPM_ENABLE |
| ^~~~~~~~
drivers/gpu/drm/i915/display/intel_psr.c:1699:14: note: initialize the variable 'alpm_ctl' to silence this warning
1699 | u32 alpm_ctl;
| ^
| = 0
1 warning generated.
vim +/alpm_ctl +1705 drivers/gpu/drm/i915/display/intel_psr.c
1693
1694 static void lnl_alpm_configure(struct intel_dp *intel_dp)
1695 {
1696 struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
1697 enum transcoder cpu_transcoder = intel_dp->psr.transcoder;
1698 struct intel_psr *psr = &intel_dp->psr;
1699 u32 alpm_ctl;
1700
1701 if (DISPLAY_VER(dev_priv) < 20)
1702 return;
1703
1704 if (intel_dp->psr.panel_replay_enabled && intel_dp_is_edp(intel_dp)) {
> 1705 alpm_ctl |= ALPM_CTL_ALPM_ENABLE |
1706 ALPM_CTL_ALPM_AUX_LESS_ENABLE |
1707 ALPM_CTL_AUX_LESS_SLEEP_HOLD_TIME_50_SYMBOLS;
1708
1709 intel_de_write(dev_priv, PORT_ALPM_CTL(cpu_transcoder),
1710 PORT_ALPM_CTL_ALPM_AUX_LESS_ENABLE |
1711 PORT_ALPM_CTL_MAX_PHY_SWING_SETUP(15) |
1712 PORT_ALPM_CTL_MAX_PHY_SWING_HOLD(0) |
1713 PORT_ALPM_CTL_SILENCE_PERIOD(
1714 psr->alpm_parameters.silence_period_sym_clocks));
1715
1716 intel_de_write(dev_priv, PORT_ALPM_LFPS_CTL(cpu_transcoder),
1717 PORT_ALPM_LFPS_CTL_LFPS_CYCLE_COUNT(10) |
1718 PORT_ALPM_LFPS_CTL_LFPS_HALF_CYCLE_DURATION(
1719 psr->alpm_parameters.lfps_half_cycle_num_of_syms) |
1720 PORT_ALPM_LFPS_CTL_FIRST_LFPS_HALF_CYCLE_DURATION(
1721 psr->alpm_parameters.lfps_half_cycle_num_of_syms) |
1722 PORT_ALPM_LFPS_CTL_LAST_LFPS_HALF_CYCLE_DURATION(
1723 psr->alpm_parameters.lfps_half_cycle_num_of_syms));
1724 } else {
1725 alpm_ctl = ALPM_CTL_EXTENDED_FAST_WAKE_ENABLE |
1726 ALPM_CTL_EXTENDED_FAST_WAKE_TIME(psr->alpm_parameters.fast_wake_lines);
1727 }
1728
1729 alpm_ctl |= ALPM_CTL_ALPM_ENTRY_CHECK(psr->alpm_parameters.check_entry_lines);
1730
1731 intel_de_write(dev_priv, ALPM_CTL(cpu_transcoder), alpm_ctl);
1732 }
1733
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 12+ messages in thread
* RE: [PATCH v2 2/6] drm/i915/psr: Calculate aux less wake time
2024-02-20 12:10 ` [PATCH v2 2/6] drm/i915/psr: Calculate aux less wake time Jouni Högander
@ 2024-02-26 11:01 ` Manna, Animesh
0 siblings, 0 replies; 12+ messages in thread
From: Manna, Animesh @ 2024-02-26 11:01 UTC (permalink / raw)
To: Hogander, Jouni, intel-gfx@lists.freedesktop.org; +Cc: Hogander, Jouni
> -----Original Message-----
> From: Intel-gfx <intel-gfx-bounces@lists.freedesktop.org> On Behalf Of Jouni
> Högander
> Sent: Tuesday, February 20, 2024 5:41 PM
> To: intel-gfx@lists.freedesktop.org
> Cc: Hogander, Jouni <jouni.hogander@intel.com>
> Subject: [PATCH v2 2/6] drm/i915/psr: Calculate aux less wake time
>
> Calculate aux less wake time and store it into alpm_params struct
>
> Bspec: 71477
>
> v2:
> - use variables instead of values directly
> - fix max value
> - move converting port clock to Mhz into
> _lnl_compute_aux_less_wake_time
>
> Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
> ---
> .../drm/i915/display/intel_display_types.h | 1 +
> drivers/gpu/drm/i915/display/intel_psr.c | 60 +++++++++++++++++++
> 2 files changed, 61 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h
> b/drivers/gpu/drm/i915/display/intel_display_types.h
> index 0d4012097db1..a531c1e5af20 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_types.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_types.h
> @@ -1721,6 +1721,7 @@ struct intel_psr {
>
> /* LNL and beyond */
> u8 check_entry_lines;
> + u8 aux_less_wake_lines;
> } alpm_parameters;
>
> ktime_t last_entry_attempt;
> diff --git a/drivers/gpu/drm/i915/display/intel_psr.c
> b/drivers/gpu/drm/i915/display/intel_psr.c
> index 72cadad09db5..83f3cab31878 100644
> --- a/drivers/gpu/drm/i915/display/intel_psr.c
> +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> @@ -1126,6 +1126,63 @@ static bool
> _compute_psr2_sdp_prior_scanline_indication(struct intel_dp *intel_d
> return true;
> }
>
> +/*
> + * AUX-Less Wake Time = CEILING( ((PHY P2 to P0) + tLFPS_Period, Max+
> + * tSilence, Max+ tPHY Establishment + tCDS) / tline)
> + * For the "PHY P2 to P0" latency see the PHY Power Control page
> + * (PHY P2 to P0) :
> +https://gfxspecs.intel.com/Predator/Home/Index/68965
> + * : 12 us
> + * The tLFPS_Period, Max term is 800ns
> + * The tSilence, Max term is 180ns
> + * The tPHY Establishment (a.k.a. t1) term is 50us
> + * The tCDS term is 1 or 2 times t2
> + * t2 = Number ML_PHY_LOCK * tML_PHY_LOCK
> + * Number ML_PHY_LOCK = ( 7 + CEILING( 6.5us / tML_PHY_LOCK ) + 1)
> + * Rounding up the 6.5us padding to the next ML_PHY_LOCK boundary and
> + * adding the "+ 1" term ensures all ML_PHY_LOCK sequences that start
> + * within the CDS period complete within the CDS period regardless of
> + * entry into the period
> + * tML_PHY_LOCK = TPS4 Length * ( 10 / (Link Rate in MHz) )
> + * TPS4 Length = 252 Symbols
> + */
> +static int _lnl_compute_aux_less_wake_time(int port_clock) {
> + int tphy2_p2_to_p0 = 12 * 1000;
> + int tlfps_period_max = 800;
> + int tsilence_max = 180;
> + int t1 = 50 * 1000;
> + int tps4 = 252;
> + int tml_phy_lock = 1000 * 1000 * tps4 * 10 / port_clock;
> + int num_ml_phy_lock = 7 + DIV_ROUND_UP(6500, tml_phy_lock) + 1;
> + int t2 = num_ml_phy_lock * tml_phy_lock;
> + int tcds = 1 * t2;
> +
> + return DIV_ROUND_UP(tphy2_p2_to_p0 + tlfps_period_max +
> tsilence_max +
> + t1 + tcds, 1000);
> +}
> +
> +static int _lnl_compute_aux_less_alpm_params(struct intel_dp *intel_dp,
> + struct intel_crtc_state *crtc_state)
> {
> + struct drm_i915_private *i915 = dp_to_i915(intel_dp);
> + int aux_less_wake_time, aux_less_wake_lines;
> +
> + aux_less_wake_time =
> + _lnl_compute_aux_less_wake_time(crtc_state->port_clock);
> + aux_less_wake_lines = intel_usecs_to_scanlines(&crtc_state-
> >hw.adjusted_mode,
> + aux_less_wake_time);
> +
> + if (aux_less_wake_lines > 63)
> + return false;
> +
> + if (i915->display.params.psr_safest_params)
> + aux_less_wake_lines = 63;
Overall changes looks good to me, just a nitpick - good to have some macro instead of magic number 63.
Regards,
Animesh
> +
> + intel_dp->psr.alpm_parameters.aux_less_wake_lines =
> +aux_less_wake_lines;
> +
> + return true;
> +}
> +
> static bool _lnl_compute_alpm_params(struct intel_dp *intel_dp,
> struct intel_crtc_state *crtc_state) { @@ -
> 1142,6 +1199,9 @@ static bool _lnl_compute_alpm_params(struct intel_dp
> *intel_dp,
> if (check_entry_lines > 15)
> return false;
>
> + if (!_lnl_compute_aux_less_alpm_params(intel_dp, crtc_state))
> + return false;
> +
> if (i915->display.params.psr_safest_params)
> check_entry_lines = 15;
>
> --
> 2.34.1
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2024-02-26 11:01 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-02-20 12:10 [PATCH v2 0/6] ALPM AUX-Less Jouni Högander
2024-02-20 12:10 ` [PATCH v2 1/6] drm/display: Add missing aux less alpm wake related bits Jouni Högander
2024-02-20 12:10 ` [PATCH v2 2/6] drm/i915/psr: Calculate aux less wake time Jouni Högander
2024-02-26 11:01 ` Manna, Animesh
2024-02-20 12:10 ` [PATCH v2 3/6] drm/i915/psr: Silence period and lfps half cycle Jouni Högander
2024-02-20 12:10 ` [PATCH v2 4/6] drm/i915/psr: Add missing ALPM AUX-Less register definitions Jouni Högander
2024-02-20 12:10 ` [PATCH v2 5/6] drm/i915/psr: Enable ALPM for eDP Panel replay Jouni Högander
2024-02-21 18:35 ` kernel test robot
2024-02-20 12:10 ` [PATCH v2 6/6] drm/i915/psr: Do not write ALPM configuration for PSR1 or DP2.0 Panel Replay Jouni Högander
2024-02-20 13:02 ` ✗ Fi.CI.CHECKPATCH: warning for ALPM AUX-Less (rev2) Patchwork
2024-02-20 13:02 ` ✗ Fi.CI.SPARSE: " Patchwork
2024-02-20 13:20 ` ✗ Fi.CI.BAT: failure " Patchwork
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox