summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/i915/display/intel_fbc.c
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2021-11-04 17:45:13 +0300
committerVille Syrjälä <ville.syrjala@linux.intel.com>2021-11-11 16:18:11 +0300
commita61cf3883c83d02cc27b18c4cf8f639279587bb0 (patch)
tree3618c1928540f07630fe2e0c3d0c4b4de280d3c4 /drivers/gpu/drm/i915/display/intel_fbc.c
parent8f8c61038768526d894e02b10ee1e4ace94e55df (diff)
downloadlinux-a61cf3883c83d02cc27b18c4cf8f639279587bb0.tar.xz
drm/i915/fbc: Introduce intel_fbc_set_false_color()
Pull the direct FBC register frobbing out from the debugfs code into the fbc code. Also add a vfunc for this so we don't need extra platforms checks. Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20211104144520.22605-11-ville.syrjala@linux.intel.com Acked-by: Jani Nikula <jani.nikula@intel.com> Reviewed-by: Mika Kahola <mika.kahola@intel.com>
Diffstat (limited to 'drivers/gpu/drm/i915/display/intel_fbc.c')
-rw-r--r--drivers/gpu/drm/i915/display/intel_fbc.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c b/drivers/gpu/drm/i915/display/intel_fbc.c
index 0cbd0e302320..b13a776cb3dc 100644
--- a/drivers/gpu/drm/i915/display/intel_fbc.c
+++ b/drivers/gpu/drm/i915/display/intel_fbc.c
@@ -55,6 +55,7 @@ struct intel_fbc_funcs {
bool (*is_compressing)(struct drm_i915_private *i915);
void (*nuke)(struct drm_i915_private *i915);
void (*program_cfb)(struct drm_i915_private *i915);
+ void (*set_false_color)(struct drm_i915_private *i915, bool enable);
};
/*
@@ -538,6 +539,13 @@ static bool ivb_fbc_is_compressing(struct drm_i915_private *i915)
return intel_de_read(i915, IVB_FBC_STATUS2) & IVB_FBC_COMP_SEG_MASK;
}
+static void ivb_fbc_set_false_color(struct drm_i915_private *i915,
+ bool enable)
+{
+ intel_de_rmw(i915, ILK_DPFC_CONTROL,
+ FBC_CTL_FALSE_COLOR, enable ? FBC_CTL_FALSE_COLOR : 0);
+}
+
static const struct intel_fbc_funcs ivb_fbc_funcs = {
.activate = ivb_fbc_activate,
.deactivate = ilk_fbc_deactivate,
@@ -545,6 +553,7 @@ static const struct intel_fbc_funcs ivb_fbc_funcs = {
.is_compressing = ivb_fbc_is_compressing,
.nuke = snb_fbc_nuke,
.program_cfb = ilk_fbc_program_cfb,
+ .set_false_color = ivb_fbc_set_false_color,
};
static bool intel_fbc_hw_is_active(struct drm_i915_private *dev_priv)
@@ -593,6 +602,24 @@ static void intel_fbc_nuke(struct drm_i915_private *i915)
fbc->funcs->nuke(i915);
}
+int intel_fbc_set_false_color(struct drm_i915_private *i915, bool enable)
+{
+ struct intel_fbc *fbc = &i915->fbc;
+
+ if (!fbc->funcs || !fbc->funcs->set_false_color)
+ return -ENODEV;
+
+ mutex_lock(&fbc->lock);
+
+ fbc->false_color = enable;
+
+ fbc->funcs->set_false_color(i915, enable);
+
+ mutex_unlock(&fbc->lock);
+
+ return 0;
+}
+
/**
* intel_fbc_is_active - Is FBC active?
* @dev_priv: i915 device instance