* [PATCH 1/2] drm/i915/psr: Introduce HAS_VLV_PSR
@ 2017-07-12 0:12 Rodrigo Vivi
2017-07-12 0:12 ` [PATCH 2/2] drm/i915/psr: Use more PSR HW tracking Rodrigo Vivi
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Rodrigo Vivi @ 2017-07-12 0:12 UTC (permalink / raw)
To: intel-gfx; +Cc: Dhinakaran Pandiyan, Rodrigo Vivi
This old PSR implementation died on gen8LP and had many
limitations such:
- no functional HW tracking
- required link standby with single frame updates
So, let's group them in a easier way to filter it now on.
Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Cc: Jim Bride <jim.bride@linux.intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
drivers/gpu/drm/i915/i915_drv.h | 5 ++++-
drivers/gpu/drm/i915/i915_pci.c | 4 ++--
drivers/gpu/drm/i915/intel_dp.c | 2 +-
drivers/gpu/drm/i915/intel_psr.c | 7 +++----
4 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 81cd21ecfa7d..d0a49307c6fb 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -769,6 +769,7 @@ struct intel_csr {
func(has_pipe_cxsr); \
func(has_pooled_eu); \
func(has_psr); \
+ func(has_vlv_psr); \
func(has_rc6); \
func(has_rc6p); \
func(has_resource_streamer); \
@@ -2983,7 +2984,9 @@ intel_info(const struct drm_i915_private *dev_priv)
#define HAS_DDI(dev_priv) ((dev_priv)->info.has_ddi)
#define HAS_FPGA_DBG_UNCLAIMED(dev_priv) ((dev_priv)->info.has_fpga_dbg)
-#define HAS_PSR(dev_priv) ((dev_priv)->info.has_psr)
+#define HAS_PSR(dev_priv) ((dev_priv)->info.has_psr || \
+ (dev_priv)->info.has_vlv_psr)
+#define HAS_VLV_PSR(dev_priv) ((dev_priv)->info.has_vlv_psr)
#define HAS_RC6(dev_priv) ((dev_priv)->info.has_rc6)
#define HAS_RC6p(dev_priv) ((dev_priv)->info.has_rc6p)
diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
index a1e6b696bcfa..e0e972210090 100644
--- a/drivers/gpu/drm/i915/i915_pci.c
+++ b/drivers/gpu/drm/i915/i915_pci.c
@@ -274,7 +274,7 @@ static const struct intel_device_info intel_valleyview_info = {
.gen = 7,
.is_lp = 1,
.num_pipes = 2,
- .has_psr = 1,
+ .has_vlv_psr = 1,
.has_runtime_pm = 1,
.has_rc6 = 1,
.has_gmbus_irq = 1,
@@ -334,7 +334,7 @@ static const struct intel_device_info intel_cherryview_info = {
.ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING,
.platform = INTEL_CHERRYVIEW,
.has_64bit_reloc = 1,
- .has_psr = 1,
+ .has_vlv_psr = 1,
.has_runtime_pm = 1,
.has_resource_streamer = 1,
.has_rc6 = 1,
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 2d42d09428c9..3f2191edc2c9 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -2653,7 +2653,7 @@ static void intel_disable_dp(struct intel_encoder *encoder,
if (old_crtc_state->has_audio)
intel_audio_codec_disable(encoder);
- if (HAS_PSR(dev_priv) && !HAS_DDI(dev_priv))
+ if (HAS_VLV_PSR(dev_priv))
intel_psr_disable(intel_dp);
/* Make sure the panel is off before trying to change the mode. But also
diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
index 559f1ab42bfc..461c7e4f6ecc 100644
--- a/drivers/gpu/drm/i915/intel_psr.c
+++ b/drivers/gpu/drm/i915/intel_psr.c
@@ -401,8 +401,7 @@ static bool intel_psr_match_conditions(struct intel_dp *intel_dp)
return false;
}
- if ((IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) &&
- !dev_priv->psr.link_standby) {
+ if (HAS_VLV_PSR(dev_priv) && !dev_priv->psr.link_standby) {
DRM_ERROR("PSR condition failed: Link off requested but not supported on this platform\n");
return false;
}
@@ -827,7 +826,7 @@ void intel_psr_single_frame_update(struct drm_i915_private *dev_priv,
* Single frame update is already supported on BDW+ but it requires
* many W/A and it isn't really needed.
*/
- if (!IS_VALLEYVIEW(dev_priv) && !IS_CHERRYVIEW(dev_priv))
+ if (!HAS_VLV_PSR(dev_priv))
return;
mutex_lock(&dev_priv->psr.lock);
@@ -949,7 +948,7 @@ void intel_psr_init(struct drm_i915_private *dev_priv)
if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv))
/* HSW and BDW require workarounds that we don't implement. */
dev_priv->psr.link_standby = false;
- else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
+ else if (HAS_VLV_PSR(dev_priv))
/* On VLV and CHV only standby mode is supported. */
dev_priv->psr.link_standby = true;
else
--
2.13.2
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/2] drm/i915/psr: Use more PSR HW tracking.
2017-07-12 0:12 [PATCH 1/2] drm/i915/psr: Introduce HAS_VLV_PSR Rodrigo Vivi
@ 2017-07-12 0:12 ` Rodrigo Vivi
2017-07-12 0:30 ` ✓ Fi.CI.BAT: success for series starting with [1/2] drm/i915/psr: Introduce HAS_VLV_PSR Patchwork
2017-07-12 9:51 ` [PATCH 1/2] " Jani Nikula
2 siblings, 0 replies; 5+ messages in thread
From: Rodrigo Vivi @ 2017-07-12 0:12 UTC (permalink / raw)
To: intel-gfx; +Cc: Dhinakaran Pandiyan, Rodrigo Vivi
So far we are using frontbuffer tracking for everything
and ignoring that PSR has a HW capable HW tracking for many
modern usages of GPU on Core platforms and newer Atom ones.
One reason for that is that we were trying to keep same
infrastructure in place for VLV/CHV than the rest of platforms.
But also because when this infrastructure was created
the front-buffer-tracking origin wasn't that good and stable
how it is today after Paulo reworked it to attend FBC cases.
However this PSR implementation without HW tracking died
on gen8LP. And newer platforms are starting to demand more HW
tracking specially with PSR2 cases in mind.
By disabling and re-enabling PSR totally every time we believe
someone is going to change the front buffer content we don't
allow PSR HW tracking to do this job and specially compromising
the whole idea of PSR2 case where the HW tracking detect only
the damaged area and do a partial screen update.
So, from now on, on the platforms that has hw_tracking let's
rely more on HW tracking.
This also is the case in used by other drivers and more validated
by SV teams. So I hope that this will lead us to less misterious
bugs.
Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Cc: Jim Bride <jim.bride@linux.intel.com>
Cc: Vathsala NAgaraju <vathsala.nagaraju@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
drivers/gpu/drm/i915/intel_drv.h | 3 ++-
drivers/gpu/drm/i915/intel_frontbuffer.c | 2 +-
drivers/gpu/drm/i915/intel_psr.c | 9 ++++++++-
3 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index d17a32437f07..0ff5b1741b98 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -1738,7 +1738,8 @@ static inline void intel_backlight_device_unregister(struct intel_connector *con
void intel_psr_enable(struct intel_dp *intel_dp);
void intel_psr_disable(struct intel_dp *intel_dp);
void intel_psr_invalidate(struct drm_i915_private *dev_priv,
- unsigned frontbuffer_bits);
+ unsigned frontbuffer_bits,
+ enum fb_op_origin origin);
void intel_psr_flush(struct drm_i915_private *dev_priv,
unsigned frontbuffer_bits,
enum fb_op_origin origin);
diff --git a/drivers/gpu/drm/i915/intel_frontbuffer.c b/drivers/gpu/drm/i915/intel_frontbuffer.c
index fcfc217e754e..efda1af9a5b3 100644
--- a/drivers/gpu/drm/i915/intel_frontbuffer.c
+++ b/drivers/gpu/drm/i915/intel_frontbuffer.c
@@ -79,7 +79,7 @@ void __intel_fb_obj_invalidate(struct drm_i915_gem_object *obj,
spin_unlock(&dev_priv->fb_tracking.lock);
}
- intel_psr_invalidate(dev_priv, frontbuffer_bits);
+ intel_psr_invalidate(dev_priv, frontbuffer_bits, origin);
intel_edp_drrs_invalidate(dev_priv, frontbuffer_bits);
intel_fbc_invalidate(dev_priv, frontbuffer_bits, origin);
}
diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
index 461c7e4f6ecc..ff8034b4feb2 100644
--- a/drivers/gpu/drm/i915/intel_psr.c
+++ b/drivers/gpu/drm/i915/intel_psr.c
@@ -854,6 +854,7 @@ void intel_psr_single_frame_update(struct drm_i915_private *dev_priv,
* intel_psr_invalidate - Invalidade PSR
* @dev_priv: i915 device
* @frontbuffer_bits: frontbuffer plane tracking bits
+ * @origin: which operation caused the invalidate
*
* Since the hardware frontbuffer tracking has gaps we need to integrate
* with the software frontbuffer tracking. This function gets called every
@@ -863,11 +864,14 @@ void intel_psr_single_frame_update(struct drm_i915_private *dev_priv,
* Dirty frontbuffers relevant to PSR are tracked in busy_frontbuffer_bits."
*/
void intel_psr_invalidate(struct drm_i915_private *dev_priv,
- unsigned frontbuffer_bits)
+ unsigned frontbuffer_bits, enum fb_op_origin origin)
{
struct drm_crtc *crtc;
enum pipe pipe;
+ if (origin == ORIGIN_FLIP || origin == ORIGIN_CS)
+ return;
+
mutex_lock(&dev_priv->psr.lock);
if (!dev_priv->psr.enabled) {
mutex_unlock(&dev_priv->psr.lock);
@@ -905,6 +909,9 @@ void intel_psr_flush(struct drm_i915_private *dev_priv,
struct drm_crtc *crtc;
enum pipe pipe;
+ if (origin == ORIGIN_FLIP || origin == ORIGIN_CS)
+ return;
+
mutex_lock(&dev_priv->psr.lock);
if (!dev_priv->psr.enabled) {
mutex_unlock(&dev_priv->psr.lock);
--
2.13.2
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 5+ messages in thread
* ✓ Fi.CI.BAT: success for series starting with [1/2] drm/i915/psr: Introduce HAS_VLV_PSR
2017-07-12 0:12 [PATCH 1/2] drm/i915/psr: Introduce HAS_VLV_PSR Rodrigo Vivi
2017-07-12 0:12 ` [PATCH 2/2] drm/i915/psr: Use more PSR HW tracking Rodrigo Vivi
@ 2017-07-12 0:30 ` Patchwork
2017-07-12 9:51 ` [PATCH 1/2] " Jani Nikula
2 siblings, 0 replies; 5+ messages in thread
From: Patchwork @ 2017-07-12 0:30 UTC (permalink / raw)
To: Rodrigo Vivi; +Cc: intel-gfx
== Series Details ==
Series: series starting with [1/2] drm/i915/psr: Introduce HAS_VLV_PSR
URL : https://patchwork.freedesktop.org/series/27143/
State : success
== Summary ==
Series 27143v1 Series without cover letter
https://patchwork.freedesktop.org/api/1.0/series/27143/revisions/1/mbox/
Test gem_exec_suspend:
Subgroup basic-s4-devices:
pass -> DMESG-WARN (fi-snb-2600) fdo#100125 +1
Test kms_busy:
Subgroup basic-flip-default-a:
pass -> DMESG-WARN (fi-skl-6700hq) fdo#101144
Test kms_pipe_crc_basic:
Subgroup hang-read-crc-pipe-a:
pass -> DMESG-WARN (fi-pnv-d510) fdo#101597
Subgroup suspend-read-crc-pipe-b:
dmesg-warn -> PASS (fi-byt-j1900) fdo#101705 +1
fdo#100125 https://bugs.freedesktop.org/show_bug.cgi?id=100125
fdo#101144 https://bugs.freedesktop.org/show_bug.cgi?id=101144
fdo#101597 https://bugs.freedesktop.org/show_bug.cgi?id=101597
fdo#101705 https://bugs.freedesktop.org/show_bug.cgi?id=101705
fi-bdw-5557u total:279 pass:268 dwarn:0 dfail:0 fail:0 skip:11 time:448s
fi-bdw-gvtdvm total:279 pass:265 dwarn:0 dfail:0 fail:0 skip:14 time:427s
fi-blb-e6850 total:279 pass:224 dwarn:1 dfail:0 fail:0 skip:54 time:356s
fi-bsw-n3050 total:279 pass:243 dwarn:0 dfail:0 fail:0 skip:36 time:524s
fi-bxt-j4205 total:279 pass:260 dwarn:0 dfail:0 fail:0 skip:19 time:504s
fi-byt-j1900 total:279 pass:255 dwarn:0 dfail:0 fail:0 skip:24 time:498s
fi-byt-n2820 total:279 pass:251 dwarn:0 dfail:0 fail:0 skip:28 time:486s
fi-glk-2a total:279 pass:260 dwarn:0 dfail:0 fail:0 skip:19 time:600s
fi-hsw-4770 total:279 pass:263 dwarn:0 dfail:0 fail:0 skip:16 time:436s
fi-hsw-4770r total:279 pass:263 dwarn:0 dfail:0 fail:0 skip:16 time:422s
fi-ilk-650 total:279 pass:229 dwarn:0 dfail:0 fail:0 skip:50 time:423s
fi-ivb-3520m total:279 pass:261 dwarn:0 dfail:0 fail:0 skip:18 time:503s
fi-ivb-3770 total:279 pass:261 dwarn:0 dfail:0 fail:0 skip:18 time:467s
fi-kbl-7500u total:279 pass:261 dwarn:0 dfail:0 fail:0 skip:18 time:466s
fi-kbl-7560u total:279 pass:269 dwarn:0 dfail:0 fail:0 skip:10 time:573s
fi-kbl-r total:279 pass:261 dwarn:0 dfail:0 fail:0 skip:18 time:580s
fi-pnv-d510 total:279 pass:221 dwarn:3 dfail:0 fail:0 skip:55 time:566s
fi-skl-6260u total:279 pass:269 dwarn:0 dfail:0 fail:0 skip:10 time:460s
fi-skl-6700hq total:279 pass:261 dwarn:1 dfail:0 fail:0 skip:17 time:588s
fi-skl-6700k total:279 pass:257 dwarn:4 dfail:0 fail:0 skip:18 time:468s
fi-skl-6770hq total:279 pass:269 dwarn:0 dfail:0 fail:0 skip:10 time:480s
fi-skl-gvtdvm total:279 pass:266 dwarn:0 dfail:0 fail:0 skip:13 time:436s
fi-skl-x1585l total:279 pass:269 dwarn:0 dfail:0 fail:0 skip:10 time:490s
fi-snb-2520m total:279 pass:251 dwarn:0 dfail:0 fail:0 skip:28 time:542s
fi-snb-2600 total:279 pass:249 dwarn:1 dfail:0 fail:0 skip:29 time:410s
8ad9e19aafea47c272163c2cbf554e06ff7f9857 drm-tip: 2017y-07m-11d-19h-08m-20s UTC integration manifest
581c47e drm/i915/psr: Use more PSR HW tracking.
db2e253 drm/i915/psr: Introduce HAS_VLV_PSR
== Logs ==
For more details see: https://intel-gfx-ci.01.org/CI/Patchwork_5168/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] drm/i915/psr: Introduce HAS_VLV_PSR
2017-07-12 0:12 [PATCH 1/2] drm/i915/psr: Introduce HAS_VLV_PSR Rodrigo Vivi
2017-07-12 0:12 ` [PATCH 2/2] drm/i915/psr: Use more PSR HW tracking Rodrigo Vivi
2017-07-12 0:30 ` ✓ Fi.CI.BAT: success for series starting with [1/2] drm/i915/psr: Introduce HAS_VLV_PSR Patchwork
@ 2017-07-12 9:51 ` Jani Nikula
2017-07-12 10:05 ` Daniel Vetter
2 siblings, 1 reply; 5+ messages in thread
From: Jani Nikula @ 2017-07-12 9:51 UTC (permalink / raw)
To: intel-gfx; +Cc: Dhinakaran Pandiyan, Rodrigo Vivi
On Tue, 11 Jul 2017, Rodrigo Vivi <rodrigo.vivi@intel.com> wrote:
> This old PSR implementation died on gen8LP and had many
> limitations such:
> - no functional HW tracking
> - required link standby with single frame updates
>
> So, let's group them in a easier way to filter it now on.
>
> Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> Cc: Jim Bride <jim.bride@linux.intel.com>
> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> ---
> drivers/gpu/drm/i915/i915_drv.h | 5 ++++-
> drivers/gpu/drm/i915/i915_pci.c | 4 ++--
> drivers/gpu/drm/i915/intel_dp.c | 2 +-
> drivers/gpu/drm/i915/intel_psr.c | 7 +++----
> 4 files changed, 10 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 81cd21ecfa7d..d0a49307c6fb 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -769,6 +769,7 @@ struct intel_csr {
> func(has_pipe_cxsr); \
> func(has_pooled_eu); \
> func(has_psr); \
> + func(has_vlv_psr); \
> func(has_rc6); \
> func(has_rc6p); \
> func(has_resource_streamer); \
> @@ -2983,7 +2984,9 @@ intel_info(const struct drm_i915_private *dev_priv)
>
> #define HAS_DDI(dev_priv) ((dev_priv)->info.has_ddi)
> #define HAS_FPGA_DBG_UNCLAIMED(dev_priv) ((dev_priv)->info.has_fpga_dbg)
> -#define HAS_PSR(dev_priv) ((dev_priv)->info.has_psr)
> +#define HAS_PSR(dev_priv) ((dev_priv)->info.has_psr || \
> + (dev_priv)->info.has_vlv_psr)
> +#define HAS_VLV_PSR(dev_priv) ((dev_priv)->info.has_vlv_psr)
I'm not convinced adding a intel info field for this is warranted. How
about just:
#define HAS_VLV_PSR(dev_priv) (HAS_PSR(dev_priv) && \
(IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)))
Though I'm not convinced about the HS_VLV_PSR name either!
BR,
Jani.
> #define HAS_RC6(dev_priv) ((dev_priv)->info.has_rc6)
> #define HAS_RC6p(dev_priv) ((dev_priv)->info.has_rc6p)
>
> diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
> index a1e6b696bcfa..e0e972210090 100644
> --- a/drivers/gpu/drm/i915/i915_pci.c
> +++ b/drivers/gpu/drm/i915/i915_pci.c
> @@ -274,7 +274,7 @@ static const struct intel_device_info intel_valleyview_info = {
> .gen = 7,
> .is_lp = 1,
> .num_pipes = 2,
> - .has_psr = 1,
> + .has_vlv_psr = 1,
> .has_runtime_pm = 1,
> .has_rc6 = 1,
> .has_gmbus_irq = 1,
> @@ -334,7 +334,7 @@ static const struct intel_device_info intel_cherryview_info = {
> .ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING,
> .platform = INTEL_CHERRYVIEW,
> .has_64bit_reloc = 1,
> - .has_psr = 1,
> + .has_vlv_psr = 1,
> .has_runtime_pm = 1,
> .has_resource_streamer = 1,
> .has_rc6 = 1,
> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> index 2d42d09428c9..3f2191edc2c9 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -2653,7 +2653,7 @@ static void intel_disable_dp(struct intel_encoder *encoder,
> if (old_crtc_state->has_audio)
> intel_audio_codec_disable(encoder);
>
> - if (HAS_PSR(dev_priv) && !HAS_DDI(dev_priv))
> + if (HAS_VLV_PSR(dev_priv))
> intel_psr_disable(intel_dp);
>
> /* Make sure the panel is off before trying to change the mode. But also
> diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
> index 559f1ab42bfc..461c7e4f6ecc 100644
> --- a/drivers/gpu/drm/i915/intel_psr.c
> +++ b/drivers/gpu/drm/i915/intel_psr.c
> @@ -401,8 +401,7 @@ static bool intel_psr_match_conditions(struct intel_dp *intel_dp)
> return false;
> }
>
> - if ((IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) &&
> - !dev_priv->psr.link_standby) {
> + if (HAS_VLV_PSR(dev_priv) && !dev_priv->psr.link_standby) {
> DRM_ERROR("PSR condition failed: Link off requested but not supported on this platform\n");
> return false;
> }
> @@ -827,7 +826,7 @@ void intel_psr_single_frame_update(struct drm_i915_private *dev_priv,
> * Single frame update is already supported on BDW+ but it requires
> * many W/A and it isn't really needed.
> */
> - if (!IS_VALLEYVIEW(dev_priv) && !IS_CHERRYVIEW(dev_priv))
> + if (!HAS_VLV_PSR(dev_priv))
> return;
>
> mutex_lock(&dev_priv->psr.lock);
> @@ -949,7 +948,7 @@ void intel_psr_init(struct drm_i915_private *dev_priv)
> if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv))
> /* HSW and BDW require workarounds that we don't implement. */
> dev_priv->psr.link_standby = false;
> - else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
> + else if (HAS_VLV_PSR(dev_priv))
> /* On VLV and CHV only standby mode is supported. */
> dev_priv->psr.link_standby = true;
> else
--
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] drm/i915/psr: Introduce HAS_VLV_PSR
2017-07-12 9:51 ` [PATCH 1/2] " Jani Nikula
@ 2017-07-12 10:05 ` Daniel Vetter
0 siblings, 0 replies; 5+ messages in thread
From: Daniel Vetter @ 2017-07-12 10:05 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx, Dhinakaran Pandiyan, Rodrigo Vivi
On Wed, Jul 12, 2017 at 12:51:10PM +0300, Jani Nikula wrote:
> On Tue, 11 Jul 2017, Rodrigo Vivi <rodrigo.vivi@intel.com> wrote:
> > This old PSR implementation died on gen8LP and had many
> > limitations such:
> > - no functional HW tracking
> > - required link standby with single frame updates
> >
> > So, let's group them in a easier way to filter it now on.
> >
> > Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> > Cc: Jim Bride <jim.bride@linux.intel.com>
> > Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> > ---
> > drivers/gpu/drm/i915/i915_drv.h | 5 ++++-
> > drivers/gpu/drm/i915/i915_pci.c | 4 ++--
> > drivers/gpu/drm/i915/intel_dp.c | 2 +-
> > drivers/gpu/drm/i915/intel_psr.c | 7 +++----
> > 4 files changed, 10 insertions(+), 8 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> > index 81cd21ecfa7d..d0a49307c6fb 100644
> > --- a/drivers/gpu/drm/i915/i915_drv.h
> > +++ b/drivers/gpu/drm/i915/i915_drv.h
> > @@ -769,6 +769,7 @@ struct intel_csr {
> > func(has_pipe_cxsr); \
> > func(has_pooled_eu); \
> > func(has_psr); \
> > + func(has_vlv_psr); \
> > func(has_rc6); \
> > func(has_rc6p); \
> > func(has_resource_streamer); \
> > @@ -2983,7 +2984,9 @@ intel_info(const struct drm_i915_private *dev_priv)
> >
> > #define HAS_DDI(dev_priv) ((dev_priv)->info.has_ddi)
> > #define HAS_FPGA_DBG_UNCLAIMED(dev_priv) ((dev_priv)->info.has_fpga_dbg)
> > -#define HAS_PSR(dev_priv) ((dev_priv)->info.has_psr)
> > +#define HAS_PSR(dev_priv) ((dev_priv)->info.has_psr || \
> > + (dev_priv)->info.has_vlv_psr)
> > +#define HAS_VLV_PSR(dev_priv) ((dev_priv)->info.has_vlv_psr)
>
> I'm not convinced adding a intel info field for this is warranted. How
> about just:
>
> #define HAS_VLV_PSR(dev_priv) (HAS_PSR(dev_priv) && \
> (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)))
>
> Though I'm not convinced about the HS_VLV_PSR name either!
Yeah, for platform-specific stuff like this I'd say make sure you have
vfuncs to split out the difference in behaviour if they're big enough to
warrant an entire macro of its own. And I'd say vlv vs big-core PSR is
different enough to justify having entirely different functions.
-Daniel
>
> BR,
> Jani.
>
>
> > #define HAS_RC6(dev_priv) ((dev_priv)->info.has_rc6)
> > #define HAS_RC6p(dev_priv) ((dev_priv)->info.has_rc6p)
> >
> > diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
> > index a1e6b696bcfa..e0e972210090 100644
> > --- a/drivers/gpu/drm/i915/i915_pci.c
> > +++ b/drivers/gpu/drm/i915/i915_pci.c
> > @@ -274,7 +274,7 @@ static const struct intel_device_info intel_valleyview_info = {
> > .gen = 7,
> > .is_lp = 1,
> > .num_pipes = 2,
> > - .has_psr = 1,
> > + .has_vlv_psr = 1,
> > .has_runtime_pm = 1,
> > .has_rc6 = 1,
> > .has_gmbus_irq = 1,
> > @@ -334,7 +334,7 @@ static const struct intel_device_info intel_cherryview_info = {
> > .ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING,
> > .platform = INTEL_CHERRYVIEW,
> > .has_64bit_reloc = 1,
> > - .has_psr = 1,
> > + .has_vlv_psr = 1,
> > .has_runtime_pm = 1,
> > .has_resource_streamer = 1,
> > .has_rc6 = 1,
> > diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> > index 2d42d09428c9..3f2191edc2c9 100644
> > --- a/drivers/gpu/drm/i915/intel_dp.c
> > +++ b/drivers/gpu/drm/i915/intel_dp.c
> > @@ -2653,7 +2653,7 @@ static void intel_disable_dp(struct intel_encoder *encoder,
> > if (old_crtc_state->has_audio)
> > intel_audio_codec_disable(encoder);
> >
> > - if (HAS_PSR(dev_priv) && !HAS_DDI(dev_priv))
> > + if (HAS_VLV_PSR(dev_priv))
> > intel_psr_disable(intel_dp);
> >
> > /* Make sure the panel is off before trying to change the mode. But also
> > diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
> > index 559f1ab42bfc..461c7e4f6ecc 100644
> > --- a/drivers/gpu/drm/i915/intel_psr.c
> > +++ b/drivers/gpu/drm/i915/intel_psr.c
> > @@ -401,8 +401,7 @@ static bool intel_psr_match_conditions(struct intel_dp *intel_dp)
> > return false;
> > }
> >
> > - if ((IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) &&
> > - !dev_priv->psr.link_standby) {
> > + if (HAS_VLV_PSR(dev_priv) && !dev_priv->psr.link_standby) {
> > DRM_ERROR("PSR condition failed: Link off requested but not supported on this platform\n");
> > return false;
> > }
> > @@ -827,7 +826,7 @@ void intel_psr_single_frame_update(struct drm_i915_private *dev_priv,
> > * Single frame update is already supported on BDW+ but it requires
> > * many W/A and it isn't really needed.
> > */
> > - if (!IS_VALLEYVIEW(dev_priv) && !IS_CHERRYVIEW(dev_priv))
> > + if (!HAS_VLV_PSR(dev_priv))
> > return;
> >
> > mutex_lock(&dev_priv->psr.lock);
> > @@ -949,7 +948,7 @@ void intel_psr_init(struct drm_i915_private *dev_priv)
> > if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv))
> > /* HSW and BDW require workarounds that we don't implement. */
> > dev_priv->psr.link_standby = false;
> > - else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
> > + else if (HAS_VLV_PSR(dev_priv))
> > /* On VLV and CHV only standby mode is supported. */
> > dev_priv->psr.link_standby = true;
> > else
>
> --
> Jani Nikula, Intel Open Source Technology Center
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2017-07-12 10:05 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-07-12 0:12 [PATCH 1/2] drm/i915/psr: Introduce HAS_VLV_PSR Rodrigo Vivi
2017-07-12 0:12 ` [PATCH 2/2] drm/i915/psr: Use more PSR HW tracking Rodrigo Vivi
2017-07-12 0:30 ` ✓ Fi.CI.BAT: success for series starting with [1/2] drm/i915/psr: Introduce HAS_VLV_PSR Patchwork
2017-07-12 9:51 ` [PATCH 1/2] " Jani Nikula
2017-07-12 10:05 ` Daniel Vetter
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.