[PATCH 82/86] drm/i915: Track HAS_RPS alongside HAS_RC6 in the device info
Chris Wilson
chris at chris-wilson.co.uk
Fri Sep 28 10:45:44 UTC 2018
For consistency (and elegance!), add intel_device_info.has_rps.
The immediate boon is that RPS support is now emitted along the other
capabilities in the debug log and after errors.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
Reviewed-by: Sagar Arun Kamble <sagar.a.kamble at intel.com>
---
drivers/gpu/drm/i915/i915_drv.h | 2 ++
drivers/gpu/drm/i915/i915_pci.c | 6 ++++++
drivers/gpu/drm/i915/intel_device_info.h | 1 +
drivers/gpu/drm/i915/intel_gt_pm.c | 20 ++++++++++++++++----
4 files changed, 25 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 230705a299ee..dae6d63336b2 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2582,6 +2582,8 @@ intel_info(const struct drm_i915_private *dev_priv)
#define HAS_RC6p(dev_priv) ((dev_priv)->info.has_rc6p)
#define HAS_RC6pp(dev_priv) (false) /* HW was never validated */
+#define HAS_RPS(dev_priv) (INTEL_INFO(dev_priv)->has_rps)
+
#define HAS_CSR(dev_priv) ((dev_priv)->info.has_csr)
#define HAS_RUNTIME_PM(dev_priv) ((dev_priv)->info.has_runtime_pm)
diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
index 9ddd2db906ce..b50e8fe66fad 100644
--- a/drivers/gpu/drm/i915/i915_pci.c
+++ b/drivers/gpu/drm/i915/i915_pci.c
@@ -240,6 +240,7 @@ static const struct intel_device_info intel_ironlake_m_info = {
GEN5_FEATURES,
PLATFORM(INTEL_IRONLAKE),
.is_mobile = 1, .has_fbc = 1,
+ .has_rps = true,
};
#define GEN6_FEATURES \
@@ -252,6 +253,7 @@ static const struct intel_device_info intel_ironlake_m_info = {
.has_llc = 1, \
.has_rc6 = 1, \
.has_rc6p = 1, \
+ .has_rps = true, \
.ppgtt = INTEL_PPGTT_ALIASING, \
GEN_DEFAULT_PIPEOFFSETS, \
GEN_DEFAULT_PAGE_SIZES, \
@@ -297,6 +299,7 @@ static const struct intel_device_info intel_sandybridge_m_gt2_info = {
.has_llc = 1, \
.has_rc6 = 1, \
.has_rc6p = 1, \
+ .has_rps = true, \
.ppgtt = INTEL_PPGTT_FULL, \
GEN_DEFAULT_PIPEOFFSETS, \
GEN_DEFAULT_PAGE_SIZES, \
@@ -348,6 +351,7 @@ static const struct intel_device_info intel_valleyview_info = {
.num_pipes = 2,
.has_runtime_pm = 1,
.has_rc6 = 1,
+ .has_rps = true,
.has_gmch_display = 1,
.has_hotplug = 1,
.ppgtt = INTEL_PPGTT_FULL,
@@ -439,6 +443,7 @@ static const struct intel_device_info intel_cherryview_info = {
.has_64bit_reloc = 1,
.has_runtime_pm = 1,
.has_rc6 = 1,
+ .has_rps = true,
.has_logical_ring_contexts = 1,
.has_gmch_display = 1,
.ppgtt = INTEL_PPGTT_FULL,
@@ -513,6 +518,7 @@ static const struct intel_device_info intel_skylake_gt4_info = {
.has_pooled_eu = 0, \
.has_csr = 1, \
.has_rc6 = 1, \
+ .has_rps = true, \
.has_dp_mst = 1, \
.has_logical_ring_contexts = 1, \
.has_logical_ring_preemption = 1, \
diff --git a/drivers/gpu/drm/i915/intel_device_info.h b/drivers/gpu/drm/i915/intel_device_info.h
index af7002640cdf..f27e72a8d5b8 100644
--- a/drivers/gpu/drm/i915/intel_device_info.h
+++ b/drivers/gpu/drm/i915/intel_device_info.h
@@ -109,6 +109,7 @@ enum intel_ppgtt {
func(has_psr); \
func(has_rc6); \
func(has_rc6p); \
+ func(has_rps); \
func(has_runtime_pm); \
func(has_snoop); \
func(has_coherent_ggtt); \
diff --git a/drivers/gpu/drm/i915/intel_gt_pm.c b/drivers/gpu/drm/i915/intel_gt_pm.c
index b2b2e0a73e07..78903f897eed 100644
--- a/drivers/gpu/drm/i915/intel_gt_pm.c
+++ b/drivers/gpu/drm/i915/intel_gt_pm.c
@@ -848,6 +848,9 @@ void gen6_rps_busy(struct drm_i915_private *dev_priv)
{
struct intel_rps *rps = &dev_priv->gt_pm.rps;
+ if (!HAS_RPS(dev_priv))
+ return;
+
mutex_lock(&rps->lock);
if (rps->enabled) {
u8 freq;
@@ -877,6 +880,9 @@ void gen6_rps_idle(struct drm_i915_private *dev_priv)
{
struct intel_rps *rps = &dev_priv->gt_pm.rps;
+ if (!HAS_RPS(dev_priv))
+ return;
+
/*
* Flush our bottom-half so that it does not race with us
* setting the idle frequency and so that it is bounded by
@@ -904,6 +910,9 @@ void gen6_rps_boost(struct i915_request *rq, struct intel_rps_client *client)
unsigned long flags;
bool boost;
+ if (!HAS_RPS(rq->i915))
+ return;
+
/*
* This is intentionally racy! We peek at the state here, then
* validate inside the RPS worker.
@@ -1046,8 +1055,10 @@ static bool sanitize_rc6(struct drm_i915_private *i915)
struct intel_device_info *info = mkwrite_device_info(i915);
/* Powersaving is controlled by the host when inside a VM */
- if (intel_vgpu_active(i915))
+ if (intel_vgpu_active(i915)) {
info->has_rc6 = 0;
+ info->has_rps = 0;
+ }
if (info->has_rc6 &&
IS_GEN9_LP(i915) && !bxt_check_bios_rc6_setup(i915)) {
@@ -2680,7 +2691,7 @@ static void intel_disable_rps(struct drm_i915_private *i915)
valleyview_disable_rps(i915);
else if (INTEL_GEN(i915) >= 6)
gen6_disable_rps(i915);
- else if (IS_IRONLAKE_M(i915))
+ else if (INTEL_GEN(i915) >= 5)
ironlake_disable_drps(i915);
i915->gt_pm.rps.enabled = false;
@@ -2750,7 +2761,7 @@ static void intel_enable_rps(struct drm_i915_private *i915)
gen8_enable_rps(i915);
} else if (INTEL_GEN(i915) >= 6) {
gen6_enable_rps(i915);
- } else if (IS_IRONLAKE_M(i915)) {
+ } else if (INTEL_GEN(i915) >= 5) {
ironlake_enable_drps(i915);
intel_init_emon(i915);
}
@@ -2774,7 +2785,8 @@ void intel_enable_gt_powersave(struct drm_i915_private *i915)
if (HAS_RC6(i915))
intel_enable_rc6(i915);
- intel_enable_rps(i915);
+ if (HAS_RPS(i915))
+ intel_enable_rps(i915);
if (HAS_LLC(i915))
intel_enable_llc_pstate(i915);
--
2.19.0
More information about the Intel-gfx-trybot
mailing list