2019-08-26 15:09:31 +08:00
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Min He <min.he@intel.com>
|
|
|
|
Date: Wed, 10 Jul 2019 06:59:18 +0000
|
|
|
|
Subject: [PATCH] drm/i915: add GEN9 cache sharing control in debugfs
|
|
|
|
|
|
|
|
To support cache sharing QoS, we added support for Gen9 in this patch.
|
|
|
|
|
|
|
|
Tracked-On: PKT-2559
|
|
|
|
Tracked-On: projectacrn/acrn-hypervisor#3392
|
|
|
|
Signed-off-by: Min He <min.he@intel.com>
|
|
|
|
Reviewed-by: Zhao Yakui <yakui.zhao@intel.com>
|
|
|
|
---
|
|
|
|
drivers/gpu/drm/i915/i915_debugfs.c | 16 +++++++++++++---
|
|
|
|
drivers/gpu/drm/i915/i915_reg.h | 3 +++
|
|
|
|
2 files changed, 16 insertions(+), 3 deletions(-)
|
|
|
|
|
|
|
|
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
|
2019-09-19 15:09:25 +08:00
|
|
|
index 320564f..61b8a1f 100644
|
2019-08-26 15:09:31 +08:00
|
|
|
--- a/drivers/gpu/drm/i915/i915_debugfs.c
|
|
|
|
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
|
2019-09-19 15:09:25 +08:00
|
|
|
@@ -4267,7 +4267,8 @@ i915_cache_sharing_get(void *data, u64 *val)
|
2019-08-26 15:09:31 +08:00
|
|
|
struct drm_i915_private *dev_priv = data;
|
|
|
|
u32 snpcr;
|
|
|
|
|
|
|
|
- if (!(IS_GEN6(dev_priv) || IS_GEN7(dev_priv)))
|
|
|
|
+ if (!(IS_GEN6(dev_priv) || IS_GEN7(dev_priv)
|
|
|
|
+ || IS_GEN9(dev_priv)))
|
|
|
|
return -ENODEV;
|
|
|
|
|
|
|
|
intel_runtime_pm_get(dev_priv);
|
2019-09-19 15:09:25 +08:00
|
|
|
@@ -4285,9 +4286,10 @@ static int
|
2019-08-26 15:09:31 +08:00
|
|
|
i915_cache_sharing_set(void *data, u64 val)
|
|
|
|
{
|
|
|
|
struct drm_i915_private *dev_priv = data;
|
|
|
|
- u32 snpcr;
|
|
|
|
+ u32 snpcr, idicr;
|
|
|
|
|
|
|
|
- if (!(IS_GEN6(dev_priv) || IS_GEN7(dev_priv)))
|
|
|
|
+ if (!(IS_GEN6(dev_priv) || IS_GEN7(dev_priv)
|
|
|
|
+ || IS_GEN9(dev_priv)))
|
|
|
|
return -ENODEV;
|
|
|
|
|
|
|
|
if (val > 3)
|
2019-09-19 15:09:25 +08:00
|
|
|
@@ -4302,6 +4304,14 @@ i915_cache_sharing_set(void *data, u64 val)
|
2019-08-26 15:09:31 +08:00
|
|
|
snpcr |= (val << GEN6_MBC_SNPCR_SHIFT);
|
|
|
|
I915_WRITE(GEN6_MBCUNIT_SNPCR, snpcr);
|
|
|
|
|
|
|
|
+
|
|
|
|
+ if (IS_GEN9(dev_priv)) {
|
|
|
|
+ idicr = I915_READ(HSW_IDICR);
|
|
|
|
+ idicr &= ~IDI_QOS_MASK;
|
|
|
|
+ idicr |= (val << IDI_QOS_SHIFT);
|
|
|
|
+ I915_WRITE(HSW_IDICR, idicr);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
intel_runtime_pm_put(dev_priv);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
|
2019-09-19 15:09:25 +08:00
|
|
|
index f1c8be2..bee1a50 100644
|
2019-08-26 15:09:31 +08:00
|
|
|
--- a/drivers/gpu/drm/i915/i915_reg.h
|
|
|
|
+++ b/drivers/gpu/drm/i915/i915_reg.h
|
|
|
|
@@ -8367,6 +8367,9 @@ enum {
|
|
|
|
|
|
|
|
#define HSW_IDICR _MMIO(0x9008)
|
|
|
|
#define IDIHASHMSK(x) (((x) & 0x3f) << 16)
|
|
|
|
+#define IDI_QOS_MASK (3 << 22)
|
|
|
|
+#define IDI_QOS_SHIFT 22
|
|
|
|
+
|
|
|
|
#define HSW_EDRAM_CAP _MMIO(0x120010)
|
|
|
|
#define EDRAM_ENABLED 0x1
|
|
|
|
#define EDRAM_NUM_BANKS(cap) (((cap) >> 1) & 0xf)
|
|
|
|
--
|
|
|
|
https://clearlinux.org
|
|
|
|
|