drm/i915/dmc: Add interface to block PKG C-state

Add interface to block PKG C-state. This is needed to implement workaround
for underrun on idle PSR HW issue (Wa_16025596647).

Bspec: 74151
Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
Reviewed-by: Mika Kahola <mika.kahola@intel.com>
Link: https://lore.kernel.org/r/20250414100508.1208774-6-jouni.hogander@intel.com
This commit is contained in:
Jouni Högander
2025-04-14 13:05:00 +03:00
parent f991ef47da
commit 973deeada0
2 changed files with 19 additions and 0 deletions

View File

@@ -516,6 +516,23 @@ void intel_dmc_disable_pipe(struct intel_display *display, enum pipe pipe)
intel_de_rmw(display, PIPEDMC_CONTROL(pipe), PIPEDMC_ENABLE, 0);
}
/**
* intel_dmc_block_pkgc() - block PKG C-state
* @display: display instance
* @pipe: pipe which register use to block
* @block: block/unblock
*
* This interface is target for Wa_16025596647 usage. I.e. to set/clear
* PIPEDMC_BLOCK_PKGC_SW_BLOCK_PKGC_ALWAYS bit in PIPEDMC_BLOCK_PKGC_SW register.
*/
void intel_dmc_block_pkgc(struct intel_display *display, enum pipe pipe,
bool block)
{
intel_de_rmw(display, PIPEDMC_BLOCK_PKGC_SW(pipe),
PIPEDMC_BLOCK_PKGC_SW_BLOCK_PKGC_ALWAYS, block ?
PIPEDMC_BLOCK_PKGC_SW_BLOCK_PKGC_ALWAYS : 0);
}
static bool is_dmc_evt_ctl_reg(struct intel_display *display,
enum intel_dmc_id dmc_id, i915_reg_t reg)
{

View File

@@ -18,6 +18,8 @@ void intel_dmc_load_program(struct intel_display *display);
void intel_dmc_disable_program(struct intel_display *display);
void intel_dmc_enable_pipe(struct intel_display *display, enum pipe pipe);
void intel_dmc_disable_pipe(struct intel_display *display, enum pipe pipe);
void intel_dmc_block_pkgc(struct intel_display *display, enum pipe pipe,
bool block);
void intel_dmc_fini(struct intel_display *display);
void intel_dmc_suspend(struct intel_display *display);
void intel_dmc_resume(struct intel_display *display);