]> www.infradead.org Git - users/jedix/linux-maple.git/commit
drm/i915/dmc_wl: Do not check for DMC payload
authorGustavo Sousa <gustavo.sousa@intel.com>
Fri, 24 Jan 2025 19:12:34 +0000 (16:12 -0300)
committerGustavo Sousa <gustavo.sousa@intel.com>
Wed, 5 Feb 2025 13:50:58 +0000 (10:50 -0300)
commitbdcdb913c2d36447ea49d33774e5d6093c55d6f7
treeb9f8f1fb3fe573075b6dfce61cc9a0d3c3c85dde
parentebac36ea8ad55b7c08ceaef0e3fa408c8cffacc6
drm/i915/dmc_wl: Do not check for DMC payload

Enabling and disabling of DMC wakelock is already coupled with enabling
and disabling of dynamic DC states, which already depend on the DMC
being properly loaded. As such, we do not need to check if we already
have a DMC payload parsed in __intel_dmc_wl_supported().

Furthermore, the presence of such a check causes inconsistencies in the
refcount if the following sequence of events happen:

  1. A call to one of the register accessors from intel_de.h is done
     before the DMC payload is parsed. That causes intel_dmc_wl_get() to
     be called. Suppose the register offset qualifies as needing the
     wakelock.

     In normal circumstances, the refcount would be incremented, but,
     because __intel_dmc_wl_supported() returns false, the refcount is
     untouched.

  2. In a separate worker thread, the DMC firmware is parsed. Parsing of
     the DMC payload is finished before the corresponding
     intel_dmc_wl_put() from (1) is called.

  3. When in the context of (1), intel_dmc_wl_put() gets called, now we
     have __intel_dmc_wl_supported() returning true and we hit the
     warning, because the code doesn't expect a zero refcount.

Let's remove that check, since it is unnecessary and causes the
inconsistency illustrated above.

Reviewed-by: Krzysztof Karas <krzysztof.karas@intel.com>
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250124191250.56833-1-gustavo.sousa@intel.com
Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
drivers/gpu/drm/i915/display/intel_dmc_wl.c