]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/i915/dmc: Extract is_event_handler()
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Mon, 12 May 2025 10:33:57 +0000 (13:33 +0300)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Fri, 16 May 2025 08:31:11 +0000 (11:31 +0300)
Extract the helper to determine if the mmio reg+data are the
event handler register (DMC_EVT_CTL) for a specific event.
We'll have another use for this for runtime event handler
enable/disable.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250512103358.15724-7-ville.syrjala@linux.intel.com
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
drivers/gpu/drm/i915/display/intel_dmc.c

index 09a1933657c4023d9a95c5424f234723781b2b99..9ab3ac3c1658ee75455bc8cc31a04f52b825896c 100644 (file)
@@ -567,6 +567,15 @@ static bool is_dmc_evt_htp_reg(struct intel_display *display,
        return offset >= start && offset < end;
 }
 
+static bool is_event_handler(struct intel_display *display,
+                            enum intel_dmc_id dmc_id,
+                            unsigned int event_id,
+                            i915_reg_t reg, u32 data)
+{
+       return is_dmc_evt_ctl_reg(display, dmc_id, reg) &&
+               REG_FIELD_GET(DMC_EVT_CTL_EVENT_ID_MASK, data) == event_id;
+}
+
 /**
  * intel_dmc_block_pkgc() - block PKG C-state
  * @display: display instance
@@ -625,12 +634,12 @@ static bool disable_dmc_evt(struct intel_display *display,
 
        /* also disable the flip queue event on the main DMC on TGL */
        if (display->platform.tigerlake &&
-           REG_FIELD_GET(DMC_EVT_CTL_EVENT_ID_MASK, data) == MAINDMC_EVENT_CLK_MSEC)
+           is_event_handler(display, dmc_id, MAINDMC_EVENT_CLK_MSEC, reg, data))
                return true;
 
        /* also disable the HRR event on the main DMC on TGL/ADLS */
        if ((display->platform.tigerlake || display->platform.alderlake_s) &&
-           REG_FIELD_GET(DMC_EVT_CTL_EVENT_ID_MASK, data) == MAINDMC_EVENT_VBLANK_A)
+           is_event_handler(display, dmc_id, MAINDMC_EVENT_VBLANK_A, reg, data))
                return true;
 
        return false;