[PATCH 13/26] drm/i915: introduce is_active/activate/deactivate to the FBC terminology

Paulo Zanoni
2015-10-27T16:50:59Z

The long term goal is to have enable/disable as the higher level
functions and activate/deactivate as the lower level functions, just
like we do for PSR and for the CRTC. This way, we'll run enable and
disable once per modeset, while update, activate and deactivate will
be run many times. With this, we can move the checks and code that
need to run only once per modeset to enable(), making the code simpler
and possibly a little faster.

This patch is just the first step on the conversion: it starts by
converting the current low level functions from enable/disable to
activate/deactivate. This patch by itself has no benefits other than
making review and rebase easier. Please see the next patches for more
details on the conversion.

v2:
- Rebase.
- Improve commit message (Chris).

Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
---
drivers/gpu/drm/i915/i915_debugfs.c | 2 +-
drivers/gpu/drm/i915/i915_drv.h | 10 ++-
drivers/gpu/drm/i915/intel_display.c | 4 +-
drivers/gpu/drm/i915/intel_drv.h | 2 +-
drivers/gpu/drm/i915/intel_fbc.c | 116 +++++++++++++++++------------------
drivers/gpu/drm/i915/intel_pm.c | 2 +-
6 files changed, 67 insertions(+), 69 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index fbde0a4..1d6bb95 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -1636,7 +1636,7 @@ static int i915_fbc_status(struct seq_file *m, void *unused)
intel_runtime_pm_get(dev_priv);
mutex_lock(&dev_priv->fbc.lock);

- if (intel_fbc_enabled(dev_priv))
+ if (intel_fbc_is_active(dev_priv))
seq_puts(m, "FBC enabled\n");
else
seq_printf(m, "FBC disabled: %s\n",
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 6d7b42d..d4326e3 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -913,9 +913,7 @@ struct i915_fbc {

bool false_color;

- /* Tracks whether the HW is actually enabled, not whether the feature is
- * possible. */
- bool enabled;
+ bool active;

struct intel_fbc_work {
struct delayed_work work;
@@ -924,9 +922,9 @@ struct i915_fbc {

const char *no_fbc_reason;

- bool (*fbc_enabled)(struct drm_i915_private *dev_priv);
- void (*enable_fbc)(struct intel_crtc *crtc);
- void (*disable_fbc)(struct drm_i915_private *dev_priv);
+ bool (*is_active)(struct drm_i915_private *dev_priv);
+ void (*activate)(struct intel_crtc *crtc);
+ void (*deactivate)(struct drm_i915_private *dev_priv);
void (*flip_prepare)(struct drm_i915_private *dev_priv);
};

diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 820ad1e..2392f47 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -3173,8 +3173,8 @@ intel_pipe_set_base_atomic(struct drm_crtc *crtc, struct drm_framebuffer *fb,
struct drm_device *dev = crtc->dev;
struct drm_i915_private *dev_priv = dev->dev_private;

- if (dev_priv->fbc.disable_fbc)
- dev_priv->fbc.disable_fbc(dev_priv);
+ if (dev_priv->fbc.deactivate)
+ dev_priv->fbc.deactivate(dev_priv);

dev_priv->display.update_primary_plane(crtc, fb, x, y);

diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index b463bae..0debbe9 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -1295,7 +1295,7 @@ static inline void intel_fbdev_restore_mode(struct drm_device *dev)
#endif

/* intel_fbc.c */
-bool intel_fbc_enabled(struct drm_i915_private *dev_priv);
+bool intel_fbc_is_active(struct drm_i915_private *dev_priv);
void intel_fbc_update(struct intel_crtc *crtc);
void intel_fbc_init(struct drm_i915_private *dev_priv);
void intel_fbc_disable(struct drm_i915_private *dev_priv);
diff --git a/drivers/gpu/drm/i915/intel_fbc.c b/drivers/gpu/drm/i915/intel_fbc.c
index 80d881f..6f020fc 100644
--- a/drivers/gpu/drm/i915/intel_fbc.c
+++ b/drivers/gpu/drm/i915/intel_fbc.c
@@ -43,7 +43,7 @@

static inline bool fbc_supported(struct drm_i915_private *dev_priv)
{
- return dev_priv->fbc.enable_fbc != NULL;
+ return dev_priv->fbc.activate != NULL;
}

static inline bool fbc_on_pipe_a_only(struct drm_i915_private *dev_priv)
@@ -64,11 +64,11 @@ static unsigned int get_crtc_fence_y_offset(struct intel_crtc *crtc)
return crtc->base.y - crtc->adjusted_y;
}

-static void i8xx_fbc_disable(struct drm_i915_private *dev_priv)
+static void i8xx_fbc_deactivate(struct drm_i915_private *dev_priv)
{
u32 fbc_ctl;

- dev_priv->fbc.enabled = false;
+ dev_priv->fbc.active = false;

/* Disable compression */
fbc_ctl = I915_READ(FBC_CONTROL);
@@ -84,7 +84,7 @@ static void i8xx_fbc_disable(struct drm_i915_private *dev_priv)
return;
}

- DRM_DEBUG_KMS("disabled FBC\n");
+ DRM_DEBUG_KMS("deactivated FBC\n");
}

static void i8xx_fbc_flip_prepare(struct drm_i915_private *dev_priv)
@@ -103,7 +103,7 @@ static void i8xx_fbc_flip_prepare(struct drm_i915_private *dev_priv)
I915_WRITE(FBC_CONTROL, val);
}

-static void i8xx_fbc_enable(struct intel_crtc *crtc)
+static void i8xx_fbc_activate(struct intel_crtc *crtc)
{
struct drm_i915_private *dev_priv = crtc->base.dev->dev_private;
struct drm_framebuffer *fb = crtc->base.primary->fb;
@@ -112,7 +112,7 @@ static void i8xx_fbc_enable(struct intel_crtc *crtc)
int i;
u32 fbc_ctl;

- dev_priv->fbc.enabled = true;
+ dev_priv->fbc.active = true;

/* Note: fbc.threshold == 1 for i8xx */
cfb_pitch = dev_priv->fbc.uncompressed_size / FBC_LL_SIZE;
@@ -149,23 +149,23 @@ static void i8xx_fbc_enable(struct intel_crtc *crtc)
fbc_ctl |= obj->fence_reg;
I915_WRITE(FBC_CONTROL, fbc_ctl);

- DRM_DEBUG_KMS("enabled FBC, pitch %d, yoff %d, plane %c\n",
+ DRM_DEBUG_KMS("activated FBC, pitch %d, yoff %d, plane %c\n",
cfb_pitch, crtc->base.y, plane_name(crtc->plane));
}

-static bool i8xx_fbc_enabled(struct drm_i915_private *dev_priv)
+static bool i8xx_fbc_is_active(struct drm_i915_private *dev_priv)
{
return I915_READ(FBC_CONTROL) & FBC_CTL_EN;
}

-static void g4x_fbc_enable(struct intel_crtc *crtc)
+static void g4x_fbc_activate(struct intel_crtc *crtc)
{
struct drm_i915_private *dev_priv = crtc->base.dev->dev_private;
struct drm_framebuffer *fb = crtc->base.primary->fb;
struct drm_i915_gem_object *obj = intel_fb_obj(fb);
u32 dpfc_ctl;

- dev_priv->fbc.enabled = true;
+ dev_priv->fbc.active = true;

dpfc_ctl = DPFC_CTL_PLANE(crtc->plane) | DPFC_SR_EN;
if (drm_format_plane_cpp(fb->pixel_format, 0) == 2)
@@ -179,7 +179,7 @@ static void g4x_fbc_enable(struct intel_crtc *crtc)
/* enable it... */
I915_WRITE(DPFC_CONTROL, dpfc_ctl | DPFC_CTL_EN);

- DRM_DEBUG_KMS("enabled fbc on plane %c\n", plane_name(crtc->plane));
+ DRM_DEBUG_KMS("activated fbc on plane %c\n", plane_name(crtc->plane));
}

static void g4x_fbc_flip_prepare(struct drm_i915_private *dev_priv)
@@ -198,11 +198,11 @@ static void g4x_fbc_flip_prepare(struct drm_i915_private *dev_priv)
I915_WRITE(DPFC_CONTROL, val);
}

-static void g4x_fbc_disable(struct drm_i915_private *dev_priv)
+static void g4x_fbc_deactivate(struct drm_i915_private *dev_priv)
{
u32 dpfc_ctl;

- dev_priv->fbc.enabled = false;
+ dev_priv->fbc.active = false;

/* Disable compression */
dpfc_ctl = I915_READ(DPFC_CONTROL);
@@ -210,11 +210,11 @@ static void g4x_fbc_disable(struct drm_i915_private *dev_priv)
dpfc_ctl &= ~DPFC_CTL_EN;
I915_WRITE(DPFC_CONTROL, dpfc_ctl);

- DRM_DEBUG_KMS("disabled FBC\n");
+ DRM_DEBUG_KMS("deactivated FBC\n");
}
}

-static bool g4x_fbc_enabled(struct drm_i915_private *dev_priv)
+static bool g4x_fbc_is_active(struct drm_i915_private *dev_priv)
{
return I915_READ(DPFC_CONTROL) & DPFC_CTL_EN;
}
@@ -226,7 +226,7 @@ static void intel_fbc_recompress(struct drm_i915_private *dev_priv)
POSTING_READ(MSG_FBC_REND_STATE);
}

-static void ilk_fbc_enable(struct intel_crtc *crtc)
+static void ilk_fbc_activate(struct intel_crtc *crtc)
{
struct drm_i915_private *dev_priv = crtc->base.dev->dev_private;
struct drm_framebuffer *fb = crtc->base.primary->fb;
@@ -235,7 +235,7 @@ static void ilk_fbc_enable(struct intel_crtc *crtc)
int threshold = dev_priv->fbc.threshold;
unsigned int y_offset;

- dev_priv->fbc.enabled = true;
+ dev_priv->fbc.active = true;

dpfc_ctl = DPFC_CTL_PLANE(crtc->plane);
if (drm_format_plane_cpp(fb->pixel_format, 0) == 2)
@@ -271,7 +271,7 @@ static void ilk_fbc_enable(struct intel_crtc *crtc)

intel_fbc_recompress(dev_priv);

- DRM_DEBUG_KMS("enabled fbc on plane %c\n", plane_name(crtc->plane));
+ DRM_DEBUG_KMS("activated fbc on plane %c\n", plane_name(crtc->plane));
}

static void ilk_fbc_flip_prepare(struct drm_i915_private *dev_priv)
@@ -299,11 +299,11 @@ static void snb_fbc_flip_prepare(struct drm_i915_private *dev_priv)
I915_WRITE(SNB_DPFC_CTL_SA, SNB_CPU_FENCE_ENABLE | obj->fence_reg);
}

-static void ilk_fbc_disable(struct drm_i915_private *dev_priv)
+static void ilk_fbc_deactivate(struct drm_i915_private *dev_priv)
{
u32 dpfc_ctl;

- dev_priv->fbc.enabled = false;
+ dev_priv->fbc.active = false;

/* Disable compression */
dpfc_ctl = I915_READ(ILK_DPFC_CONTROL);
@@ -311,16 +311,16 @@ static void ilk_fbc_disable(struct drm_i915_private *dev_priv)
dpfc_ctl &= ~DPFC_CTL_EN;
I915_WRITE(ILK_DPFC_CONTROL, dpfc_ctl);

- DRM_DEBUG_KMS("disabled FBC\n");
+ DRM_DEBUG_KMS("deactivated FBC\n");
}
}

-static bool ilk_fbc_enabled(struct drm_i915_private *dev_priv)
+static bool ilk_fbc_is_active(struct drm_i915_private *dev_priv)
{
return I915_READ(ILK_DPFC_CONTROL) & DPFC_CTL_EN;
}

-static void gen7_fbc_enable(struct intel_crtc *crtc)
+static void gen7_fbc_activate(struct intel_crtc *crtc)
{
struct drm_i915_private *dev_priv = crtc->base.dev->dev_private;
struct drm_framebuffer *fb = crtc->base.primary->fb;
@@ -328,7 +328,7 @@ static void gen7_fbc_enable(struct intel_crtc *crtc)
u32 dpfc_ctl;
int threshold = dev_priv->fbc.threshold;

- dev_priv->fbc.enabled = true;
+ dev_priv->fbc.active = true;

dpfc_ctl = 0;
if (IS_IVYBRIDGE(dev_priv))
@@ -375,28 +375,28 @@ static void gen7_fbc_enable(struct intel_crtc *crtc)

intel_fbc_recompress(dev_priv);

- DRM_DEBUG_KMS("enabled fbc on plane %c\n", plane_name(crtc->plane));
+ DRM_DEBUG_KMS("activated fbc on plane %c\n", plane_name(crtc->plane));
}

/**
- * intel_fbc_enabled - Is FBC enabled?
+ * intel_fbc_is_active - Is FBC active?
* @dev_priv: i915 device instance
*
* This function is used to verify the current state of FBC.
* FIXME: This should be tracked in the plane config eventually
* instead of queried at runtime for most callers.
*/
-bool intel_fbc_enabled(struct drm_i915_private *dev_priv)
+bool intel_fbc_is_active(struct drm_i915_private *dev_priv)
{
- return dev_priv->fbc.enabled;
+ return dev_priv->fbc.active;
}

-static void intel_fbc_enable(const struct drm_framebuffer *fb)
+static void intel_fbc_activate(const struct drm_framebuffer *fb)
{
struct drm_i915_private *dev_priv = fb->dev->dev_private;
struct intel_crtc *crtc = dev_priv->fbc.crtc;

- dev_priv->fbc.enable_fbc(crtc);
+ dev_priv->fbc.activate(crtc);

dev_priv->fbc.fb_id = fb->base.id;
dev_priv->fbc.y = crtc->base.y;
@@ -416,7 +416,7 @@ static void intel_fbc_work_fn(struct work_struct *__work)
* the prior work.
*/
if (crtc_fb == work->fb)
- intel_fbc_enable(work->fb);
+ intel_fbc_activate(work->fb);

dev_priv->fbc.fbc_work = NULL;
}
@@ -432,7 +432,7 @@ static void intel_fbc_cancel_work(struct drm_i915_private *dev_priv)
if (dev_priv->fbc.fbc_work == NULL)
return;

- DRM_DEBUG_KMS("cancelling pending FBC enable\n");
+ DRM_DEBUG_KMS("cancelling pending FBC activation\n");

/* Synchronisation is provided by struct_mutex and checking of
* dev_priv->fbc.fbc_work, so we can perform the cancellation
@@ -450,7 +450,7 @@ static void intel_fbc_cancel_work(struct drm_i915_private *dev_priv)
dev_priv->fbc.fbc_work = NULL;
}

-static void intel_fbc_schedule_enable(struct intel_crtc *crtc)
+static void intel_fbc_schedule_activation(struct intel_crtc *crtc)
{
struct intel_fbc_work *work;
struct drm_i915_private *dev_priv = crtc->base.dev->dev_private;
@@ -463,7 +463,7 @@ static void intel_fbc_schedule_enable(struct intel_crtc *crtc)
work = kzalloc(sizeof(*work), GFP_KERNEL);
if (work == NULL) {
DRM_ERROR("Failed to allocate FBC work structure\n");
- intel_fbc_enable(crtc->base.primary->fb);
+ intel_fbc_activate(crtc->base.primary->fb);
return;
}

@@ -494,8 +494,8 @@ static void intel_fbc_deactivate(struct drm_i915_private *dev_priv)

intel_fbc_cancel_work(dev_priv);

- if (dev_priv->fbc.enabled)
- dev_priv->fbc.disable_fbc(dev_priv);
+ if (dev_priv->fbc.active)
+ dev_priv->fbc.deactivate(dev_priv);
}

static void __intel_fbc_disable(struct drm_i915_private *dev_priv)
@@ -959,10 +959,10 @@ static void __intel_fbc_update(struct intel_crtc *crtc)
if (dev_priv->fbc.crtc == crtc &&
dev_priv->fbc.fb_id == fb->base.id &&
dev_priv->fbc.y == crtc->base.y &&
- dev_priv->fbc.enabled)
+ dev_priv->fbc.active)
return;

- if (intel_fbc_enabled(dev_priv)) {
+ if (intel_fbc_is_active(dev_priv)) {
/* We update FBC along two paths, after changing fb/crtc
* configuration (modeswitching) and after page-flipping
* finishes. For the latter, we know that not only did
@@ -990,13 +990,13 @@ static void __intel_fbc_update(struct intel_crtc *crtc)
__intel_fbc_disable(dev_priv);
}

- intel_fbc_schedule_enable(crtc);
+ intel_fbc_schedule_activation(crtc);
dev_priv->fbc.no_fbc_reason = "FBC enabled (not necessarily active)\n";
return;

out_disable:
/* Multiple disables should be harmless */
- if (intel_fbc_enabled(dev_priv)) {
+ if (intel_fbc_is_active(dev_priv)) {
DRM_DEBUG_KMS("unsupported config, disabling FBC\n");
__intel_fbc_disable(dev_priv);
}
@@ -1035,7 +1035,7 @@ void intel_fbc_invalidate(struct drm_i915_private *dev_priv,

mutex_lock(&dev_priv->fbc.lock);

- if (dev_priv->fbc.enabled || dev_priv->fbc.fbc_work)
+ if (dev_priv->fbc.active || dev_priv->fbc.fbc_work)
fbc_bits = INTEL_FRONTBUFFER_PRIMARY(dev_priv->fbc.crtc->pipe);
else
fbc_bits = dev_priv->fbc.possible_framebuffer_bits;
@@ -1061,7 +1061,7 @@ void intel_fbc_flush(struct drm_i915_private *dev_priv,
* is enabled and we do a page flip, so we can safely ignore it here.
* FBC may be disabled in case we got an invalidate() before the
* flush(), so we'll still have to check that case below. */
- if (origin == ORIGIN_FLIP && dev_priv->fbc.enabled)
+ if (origin == ORIGIN_FLIP && dev_priv->fbc.active)
return;

mutex_lock(&dev_priv->fbc.lock);
@@ -1069,7 +1069,7 @@ void intel_fbc_flush(struct drm_i915_private *dev_priv,
dev_priv->fbc.busy_bits &= ~frontbuffer_bits;

if (!dev_priv->fbc.busy_bits && dev_priv->fbc.crtc) {
- if (dev_priv->fbc.enabled)
+ if (dev_priv->fbc.active)
intel_fbc_recompress(dev_priv);
else
__intel_fbc_update(dev_priv->fbc.crtc);
@@ -1088,7 +1088,7 @@ void intel_fbc_flip_prepare(struct drm_i915_private *dev_priv,

mutex_lock(&dev_priv->fbc.lock);

- if (dev_priv->fbc.enabled) {
+ if (dev_priv->fbc.active) {
fbc_bits = INTEL_FRONTBUFFER_PRIMARY(dev_priv->fbc.crtc->pipe);
if (fbc_bits & frontbuffer_bits)
dev_priv->fbc.flip_prepare(dev_priv);
@@ -1114,7 +1114,7 @@ void intel_fbc_init(struct drm_i915_private *dev_priv)
mutex_init(&dev_priv->fbc.lock);

if (!HAS_FBC(dev_priv)) {
- dev_priv->fbc.enabled = false;
+ dev_priv->fbc.active = false;
dev_priv->fbc.no_fbc_reason = "unsupported by this chipset";
return;
}
@@ -1128,32 +1128,32 @@ void intel_fbc_init(struct drm_i915_private *dev_priv)
}

if (INTEL_INFO(dev_priv)->gen >= 7) {
- dev_priv->fbc.fbc_enabled = ilk_fbc_enabled;
- dev_priv->fbc.enable_fbc = gen7_fbc_enable;
- dev_priv->fbc.disable_fbc = ilk_fbc_disable;
+ dev_priv->fbc.is_active = ilk_fbc_is_active;
+ dev_priv->fbc.activate = gen7_fbc_activate;
+ dev_priv->fbc.deactivate = ilk_fbc_deactivate;
dev_priv->fbc.flip_prepare = snb_fbc_flip_prepare;
} else if (INTEL_INFO(dev_priv)->gen >= 5) {
- dev_priv->fbc.fbc_enabled = ilk_fbc_enabled;
- dev_priv->fbc.enable_fbc = ilk_fbc_enable;
- dev_priv->fbc.disable_fbc = ilk_fbc_disable;
+ dev_priv->fbc.is_active = ilk_fbc_is_active;
+ dev_priv->fbc.activate = ilk_fbc_activate;
+ dev_priv->fbc.deactivate = ilk_fbc_deactivate;
if (INTEL_INFO(dev_priv)->gen == 5)
dev_priv->fbc.flip_prepare = ilk_fbc_flip_prepare;
else
dev_priv->fbc.flip_prepare = snb_fbc_flip_prepare;
} else if (IS_GM45(dev_priv)) {
- dev_priv->fbc.fbc_enabled = g4x_fbc_enabled;
- dev_priv->fbc.enable_fbc = g4x_fbc_enable;
- dev_priv->fbc.disable_fbc = g4x_fbc_disable;
+ dev_priv->fbc.is_active = g4x_fbc_is_active;
+ dev_priv->fbc.activate = g4x_fbc_activate;
+ dev_priv->fbc.deactivate = g4x_fbc_deactivate;
dev_priv->fbc.flip_prepare = g4x_fbc_flip_prepare;
} else {
- dev_priv->fbc.fbc_enabled = i8xx_fbc_enabled;
- dev_priv->fbc.enable_fbc = i8xx_fbc_enable;
- dev_priv->fbc.disable_fbc = i8xx_fbc_disable;
+ dev_priv->fbc.is_active = i8xx_fbc_is_active;
+ dev_priv->fbc.activate = i8xx_fbc_activate;
+ dev_priv->fbc.deactivate = i8xx_fbc_deactivate;
dev_priv->fbc.flip_prepare = i8xx_fbc_flip_prepare;

/* This value was pulled out of someone's hat */
I915_WRITE(FBC_CONTROL, 500 << FBC_CTL_INTERVAL_SHIFT);
}

- dev_priv->fbc.enabled = dev_priv->fbc.fbc_enabled(dev_priv);
+ dev_priv->fbc.active = dev_priv->fbc.is_active(dev_priv);
}
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index 0fb0459..277dcac 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -2422,7 +2422,7 @@ static void ilk_wm_merge(struct drm_device *dev,
* enabled sometime later.
*/
if (IS_GEN5(dev) && !merged->fbc_wm_enabled &&
- intel_fbc_enabled(dev_priv)) {
+ intel_fbc_is_active(dev_priv)) {
for (level = 2; level <= max_level; level++) {
struct intel_wm_level *wm = &merged->wm[level];