]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/i915/de: Replace __intel_de_rmw_nowl() with intel_de_rmw_fw()
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Mon, 10 Nov 2025 17:27:51 +0000 (19:27 +0200)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Tue, 11 Nov 2025 17:33:10 +0000 (19:33 +0200)
We already have the lower level intel_de_*_fw() stuff, so use
that instead of hand rolling something custom for the DMC
wakelock stuff.

As the wakelock stuff exists only on platforms supported
by the xe driver this doesn't even result in any functional
changes since xe doesn't have uncore.lock nor unclaimed
register access detection.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patch.msgid.link/20251110172756.2132-13-ville.syrjala@linux.intel.com
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
Acked-by: Jani Nikula <jani.nikula@intel.com>
drivers/gpu/drm/i915/display/intel_de.h
drivers/gpu/drm/i915/display/intel_dmc_wl.c

index a82da6443af910b8f3992cc68d859bf1196e3d6a..345b27ada04f5a01925f5d1d8bf834ded1772aa7 100644 (file)
@@ -83,13 +83,6 @@ intel_de_write(struct intel_display *display, i915_reg_t reg, u32 val)
        intel_dmc_wl_put(display, reg);
 }
 
-static inline u32
-__intel_de_rmw_nowl(struct intel_display *display, i915_reg_t reg,
-                   u32 clear, u32 set)
-{
-       return intel_uncore_rmw(__to_uncore(display), reg, clear, set);
-}
-
 static inline u32
 intel_de_rmw(struct intel_display *display, i915_reg_t reg, u32 clear, u32 set)
 {
@@ -97,7 +90,7 @@ intel_de_rmw(struct intel_display *display, i915_reg_t reg, u32 clear, u32 set)
 
        intel_dmc_wl_get(display, reg);
 
-       val = __intel_de_rmw_nowl(display, reg, clear, set);
+       val = intel_uncore_rmw(__to_uncore(display), reg, clear, set);
 
        intel_dmc_wl_put(display, reg);
 
@@ -219,6 +212,18 @@ intel_de_write_fw(struct intel_display *display, i915_reg_t reg, u32 val)
        intel_uncore_write_fw(__to_uncore(display), reg, val);
 }
 
+static inline u32
+intel_de_rmw_fw(struct intel_display *display, i915_reg_t reg, u32 clear, u32 set)
+{
+       u32 old, val;
+
+       old = intel_de_read_fw(display, reg);
+       val = (old & ~clear) | set;
+       intel_de_write_fw(display, reg, val);
+
+       return old;
+}
+
 static inline u32
 intel_de_read_notrace(struct intel_display *display, i915_reg_t reg)
 {
index b3bb89ba34f990ca916b1908071ba8647c4bf569..869beb6f280d0b6ad8e29501003924dd579ff817 100644 (file)
@@ -179,7 +179,7 @@ static void intel_dmc_wl_work(struct work_struct *work)
        if (refcount_read(&wl->refcount))
                goto out_unlock;
 
-       __intel_de_rmw_nowl(display, DMC_WAKELOCK1_CTL, DMC_WAKELOCK_CTL_REQ, 0);
+       intel_de_rmw_fw(display, DMC_WAKELOCK1_CTL, DMC_WAKELOCK_CTL_REQ, 0);
 
        if (__intel_de_wait_for_register_atomic_nowl(display, DMC_WAKELOCK1_CTL,
                                                     DMC_WAKELOCK_CTL_ACK, 0,
@@ -207,8 +207,7 @@ static void __intel_dmc_wl_take(struct intel_display *display)
        if (wl->taken)
                return;
 
-       __intel_de_rmw_nowl(display, DMC_WAKELOCK1_CTL, 0,
-                           DMC_WAKELOCK_CTL_REQ);
+       intel_de_rmw_fw(display, DMC_WAKELOCK1_CTL, 0, DMC_WAKELOCK_CTL_REQ);
 
        /*
         * We need to use the atomic variant of the waiting routine
@@ -360,7 +359,7 @@ void intel_dmc_wl_enable(struct intel_display *display, u32 dc_state)
         * wakelock, because we're just enabling it, so call the
         * non-locking version directly here.
         */
-       __intel_de_rmw_nowl(display, DMC_WAKELOCK_CFG, 0, DMC_WAKELOCK_CFG_ENABLE);
+       intel_de_rmw_fw(display, DMC_WAKELOCK_CFG, 0, DMC_WAKELOCK_CFG_ENABLE);
 
        wl->enabled = true;
 
@@ -402,7 +401,7 @@ void intel_dmc_wl_disable(struct intel_display *display)
                goto out_unlock;
 
        /* Disable wakelock in DMC */
-       __intel_de_rmw_nowl(display, DMC_WAKELOCK_CFG, DMC_WAKELOCK_CFG_ENABLE, 0);
+       intel_de_rmw_fw(display, DMC_WAKELOCK_CFG, DMC_WAKELOCK_CFG_ENABLE, 0);
 
        wl->enabled = false;
 
@@ -414,7 +413,7 @@ void intel_dmc_wl_disable(struct intel_display *display)
         *
         * TODO: Get the correct expectation from the hardware team.
         */
-       __intel_de_rmw_nowl(display, DMC_WAKELOCK1_CTL, DMC_WAKELOCK_CTL_REQ, 0);
+       intel_de_rmw_fw(display, DMC_WAKELOCK1_CTL, DMC_WAKELOCK_CTL_REQ, 0);
 
        wl->taken = false;