Skip to content

Commit 3d739d9

Browse files
rodrigovividanvet
authored andcommitted
drm/i915: add update function to disable/enable-back PSR
Required function to disable PSR when going to console mode. But also can be used whenever PSR mode entry conditions changed. v2: Add it before PSR Hook. Update function not really been called yet. v3: Fix coding style detected by checkpatch by Paulo Zanoni. v4: do_enable must be static as Paulo noticed. Cc: Paulo Zanoni <[email protected]> Signed-off-by: Rodrigo Vivi <[email protected]> Reviewed-by: Paulo Zanoni <[email protected]> Reviewed-by: Shobhit Kumar <[email protected]> Signed-off-by: Daniel Vetter <[email protected]>
1 parent 105b7c1 commit 3d739d9

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

drivers/gpu/drm/i915/intel_dp.c

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1562,7 +1562,7 @@ static bool intel_edp_psr_match_conditions(struct intel_dp *intel_dp)
15621562
return true;
15631563
}
15641564

1565-
void intel_edp_psr_enable(struct intel_dp *intel_dp)
1565+
static void intel_edp_psr_do_enable(struct intel_dp *intel_dp)
15661566
{
15671567
struct drm_device *dev = intel_dp_to_dev(intel_dp);
15681568

@@ -1580,6 +1580,15 @@ void intel_edp_psr_enable(struct intel_dp *intel_dp)
15801580
intel_edp_psr_enable_source(intel_dp);
15811581
}
15821582

1583+
void intel_edp_psr_enable(struct intel_dp *intel_dp)
1584+
{
1585+
struct drm_device *dev = intel_dp_to_dev(intel_dp);
1586+
1587+
if (intel_edp_psr_match_conditions(intel_dp) &&
1588+
!intel_edp_is_psr_enabled(dev))
1589+
intel_edp_psr_do_enable(intel_dp);
1590+
}
1591+
15831592
void intel_edp_psr_disable(struct intel_dp *intel_dp)
15841593
{
15851594
struct drm_device *dev = intel_dp_to_dev(intel_dp);
@@ -1596,6 +1605,26 @@ void intel_edp_psr_disable(struct intel_dp *intel_dp)
15961605
DRM_ERROR("Timed out waiting for PSR Idle State\n");
15971606
}
15981607

1608+
void intel_edp_psr_update(struct drm_device *dev)
1609+
{
1610+
struct intel_encoder *encoder;
1611+
struct intel_dp *intel_dp = NULL;
1612+
1613+
list_for_each_entry(encoder, &dev->mode_config.encoder_list, base.head)
1614+
if (encoder->type == INTEL_OUTPUT_EDP) {
1615+
intel_dp = enc_to_intel_dp(&encoder->base);
1616+
1617+
if (!is_edp_psr(intel_dp))
1618+
return;
1619+
1620+
if (!intel_edp_psr_match_conditions(intel_dp))
1621+
intel_edp_psr_disable(intel_dp);
1622+
else
1623+
if (!intel_edp_is_psr_enabled(dev))
1624+
intel_edp_psr_do_enable(intel_dp);
1625+
}
1626+
}
1627+
15991628
static void intel_disable_dp(struct intel_encoder *encoder)
16001629
{
16011630
struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);

drivers/gpu/drm/i915/intel_drv.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -837,5 +837,6 @@ extern bool intel_set_pch_fifo_underrun_reporting(struct drm_device *dev,
837837

838838
extern void intel_edp_psr_enable(struct intel_dp *intel_dp);
839839
extern void intel_edp_psr_disable(struct intel_dp *intel_dp);
840+
extern void intel_edp_psr_update(struct drm_device *dev);
840841

841842
#endif /* __INTEL_DRV_H__ */

0 commit comments

Comments
 (0)