]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/i915/de: Add a simple intel_de_read64_2x32()
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Tue, 31 Mar 2026 15:42:56 +0000 (18:42 +0300)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Wed, 1 Apr 2026 14:07:00 +0000 (17:07 +0300)
intel_de_read64_2x32_volatile() is a complex beast because
it needs to deal with volatile register values. For simpler
cases we can simply do a pair normal intel_de_read()s.

My main reason for hating overuse of intel_de_read64_2x32_volatile()
is that it makes register tracepoints confusing. It always
does three accesses in the somewhat weird udw,ldw,udw order,
confusing the reader of the trace. Much more clear if we just
observe the two reads in the natural little endian order.

We also have no non-volatile use case where the LDW and UDW
are stored in non-consecutive registers, so we can just pass
along a single register offset.

v2: Put the function arguments on one line (Jani)

Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patch.msgid.link/20260331154259.24600-10-ville.syrjala@linux.intel.com
drivers/gpu/drm/i915/display/intel_de.h

index 295e7176b732aed65047e2cde778b08a138cbae7..14f9dc7b6dfd693badea5c137e0b91067b4e5394 100644 (file)
@@ -53,6 +53,18 @@ intel_de_read64_2x32_volatile(struct intel_display *display,
        return val;
 }
 
+static inline u64
+intel_de_read64_2x32(struct intel_display *display, i915_reg_t reg)
+{
+       i915_reg_t upper_reg = _MMIO(i915_mmio_reg_offset(reg) + 4);
+       u32 lower, upper;
+
+       lower = intel_de_read(display, reg);
+       upper = intel_de_read(display, upper_reg);
+
+       return (u64)upper << 32 | lower;
+}
+
 static inline void
 intel_de_posting_read(struct intel_display *display, i915_reg_t reg)
 {