[PATCH 4/6] drm/i915: add display register accessors
Daniele Ceraolo Spurio
daniele.ceraolospurio at intel.com
Sat Jun 22 01:16:29 UTC 2019
Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio at intel.com>
---
drivers/gpu/drm/i915/i915_drv.h | 57 +++++++++++++++++++++++++++++++++
1 file changed, 57 insertions(+)
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index e7901890e17a..c554b7697bdc 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2747,6 +2747,63 @@ extern void intel_display_print_error_state(struct drm_i915_error_state_buf *e,
#define I915_READ_FW(reg__) __I915_REG_OP(read_fw, dev_priv, (reg__))
#define I915_WRITE_FW(reg__, val__) __I915_REG_OP(write_fw, dev_priv, (reg__), (val__))
+/*
+ * The following are mmio-accessors that use an independent lock and skip all
+ * the forcewake logic, to be used to access display registers, which are
+ * outside the GT forcewake wells.
+ */
+static inline void
+intel_assert_register_is_display(struct drm_i915_private *i915, i915_reg_t reg)
+{
+#ifdef CONFIG_DRM_I915_DEBUG_MMIO
+ u32 offset = i915_mmio_reg_offset(reg);
+ bool is_de_register;
+
+ if (INTEL_GEN(i915) >= 5) {
+ is_de_register = offset >= 0x40000 &&
+ (INTEL_GEN(i915) < 11 || offset < 0x1c0000);
+ } else {
+ is_de_register =
+ (offset >= 0x5000 && offset <= 0x5fff) ||
+ (offset >= 0x6000 && offset <= 0x6fff) ||
+ (offset >= 0xa000 && offset <= 0xafff) ||
+ offset >= 0x30000;
+ }
+
+ WARN_ONCE(!is_de_register,
+ "display reg access function used for non-display reg 0x%08x\n",
+ offset);
+#endif
+}
+
+static inline u32
+intel_de_read(struct drm_i915_private *i915, i915_reg_t reg)
+{
+ intel_assert_register_is_display(i915, reg);
+ return intel_uncore_read(&i915->de_uncore, reg);
+}
+
+static inline void
+intel_de_posting_read(struct drm_i915_private *i915, i915_reg_t reg)
+{
+ intel_assert_register_is_display(i915, reg);
+ intel_uncore_posting_read(&i915->de_uncore, reg);
+}
+
+static inline void
+intel_de_write(struct drm_i915_private *i915, i915_reg_t reg, u32 val)
+{
+ intel_assert_register_is_display(i915, reg);
+ intel_uncore_write(&i915->de_uncore, reg, val);
+}
+
+static inline void
+intel_de_rmw(struct drm_i915_private *i915, i915_reg_t reg, u32 clear, u32 set)
+{
+ intel_assert_register_is_display(i915, reg);
+ intel_uncore_rmw(&i915->de_uncore, reg, clear, set);
+}
+
/* "Broadcast RGB" property */
#define INTEL_BROADCAST_RGB_AUTO 0
#define INTEL_BROADCAST_RGB_FULL 1
--
2.20.1
More information about the Intel-gfx-trybot
mailing list