mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-13 17:39:23 -04:00
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:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user