{
u32 val;
- intel_dmc_wl_get(i915, reg);
+ intel_dmc_wl_get(&i915->display, reg);
val = intel_uncore_read(&i915->uncore, reg);
- intel_dmc_wl_put(i915, reg);
+ intel_dmc_wl_put(&i915->display, reg);
return val;
}
{
u8 val;
- intel_dmc_wl_get(i915, reg);
+ intel_dmc_wl_get(&i915->display, reg);
val = intel_uncore_read8(&i915->uncore, reg);
- intel_dmc_wl_put(i915, reg);
+ intel_dmc_wl_put(&i915->display, reg);
return val;
}
{
u64 val;
- intel_dmc_wl_get(i915, lower_reg);
- intel_dmc_wl_get(i915, upper_reg);
+ intel_dmc_wl_get(&i915->display, lower_reg);
+ intel_dmc_wl_get(&i915->display, upper_reg);
val = intel_uncore_read64_2x32(&i915->uncore, lower_reg, upper_reg);
- intel_dmc_wl_put(i915, upper_reg);
- intel_dmc_wl_put(i915, lower_reg);
+ intel_dmc_wl_put(&i915->display, upper_reg);
+ intel_dmc_wl_put(&i915->display, lower_reg);
return val;
}
static inline void
intel_de_posting_read(struct drm_i915_private *i915, i915_reg_t reg)
{
- intel_dmc_wl_get(i915, reg);
+ intel_dmc_wl_get(&i915->display, reg);
intel_uncore_posting_read(&i915->uncore, reg);
- intel_dmc_wl_put(i915, reg);
+ intel_dmc_wl_put(&i915->display, reg);
}
static inline void
intel_de_write(struct drm_i915_private *i915, i915_reg_t reg, u32 val)
{
- intel_dmc_wl_get(i915, reg);
+ intel_dmc_wl_get(&i915->display, reg);
intel_uncore_write(&i915->uncore, reg, val);
- intel_dmc_wl_put(i915, reg);
+ intel_dmc_wl_put(&i915->display, reg);
}
static inline u32
{
u32 val;
- intel_dmc_wl_get(i915, reg);
+ intel_dmc_wl_get(&i915->display, reg);
val = __intel_de_rmw_nowl(i915, reg, clear, set);
- intel_dmc_wl_put(i915, reg);
+ intel_dmc_wl_put(&i915->display, reg);
return val;
}
{
int ret;
- intel_dmc_wl_get(i915, reg);
+ intel_dmc_wl_get(&i915->display, reg);
ret = __intel_de_wait_for_register_nowl(i915, reg, mask, value, timeout);
- intel_dmc_wl_put(i915, reg);
+ intel_dmc_wl_put(&i915->display, reg);
return ret;
}
{
int ret;
- intel_dmc_wl_get(i915, reg);
+ intel_dmc_wl_get(&i915->display, reg);
ret = intel_wait_for_register_fw(&i915->uncore, reg, mask, value, timeout);
- intel_dmc_wl_put(i915, reg);
+ intel_dmc_wl_put(&i915->display, reg);
return ret;
}
{
int ret;
- intel_dmc_wl_get(i915, reg);
+ intel_dmc_wl_get(&i915->display, reg);
ret = __intel_wait_for_register(&i915->uncore, reg, mask, value,
fast_timeout_us, slow_timeout_ms, out_value);
- intel_dmc_wl_put(i915, reg);
+ intel_dmc_wl_put(&i915->display, reg);
return ret;
}
intel_dpll_init_clock_hook(i915);
intel_init_display_hooks(i915);
intel_fdi_init_hook(i915);
- intel_dmc_wl_init(i915);
+ intel_dmc_wl_init(&i915->display);
}
/* part #1: call before irq install */
intel_de_rmw(dev_priv, GEN8_CHICKEN_DCPR_1,
0, SKL_SELECT_ALTERNATE_DC_EXIT);
- intel_dmc_wl_enable(dev_priv);
+ intel_dmc_wl_enable(&dev_priv->display);
gen9_set_dc_state(dev_priv, DC_STATE_EN_UPTO_DC5);
}
intel_de_rmw(dev_priv, GEN8_CHICKEN_DCPR_1,
0, SKL_SELECT_ALTERNATE_DC_EXIT);
- intel_dmc_wl_enable(dev_priv);
+ intel_dmc_wl_enable(&dev_priv->display);
gen9_set_dc_state(dev_priv, DC_STATE_EN_UPTO_DC6);
}
if (!HAS_DISPLAY(dev_priv))
return;
- intel_dmc_wl_disable(dev_priv);
+ intel_dmc_wl_disable(&dev_priv->display);
intel_cdclk_get_cdclk(dev_priv, &cdclk_config);
/* Can't read out voltage_level so can't use intel_cdclk_changed() */
disable_all_event_handlers(i915);
pipedmc_clock_gating_wa(i915, false);
- intel_dmc_wl_disable(i915);
+ intel_dmc_wl_disable(&i915->display);
}
void assert_dmc_loaded(struct drm_i915_private *i915)
if (dmc)
flush_work(&dmc->work);
- intel_dmc_wl_disable(i915);
+ intel_dmc_wl_disable(&i915->display);
/* Drop the reference held in case DMC isn't loaded. */
if (!intel_dmc_has_payload(i915))
{ .start = 0x60000, .end = 0x7ffff },
};
-static void __intel_dmc_wl_release(struct drm_i915_private *i915)
+static void __intel_dmc_wl_release(struct intel_display *display)
{
- struct intel_dmc_wl *wl = &i915->display.wl;
+ struct drm_i915_private *i915 = to_i915(display->drm);
+ struct intel_dmc_wl *wl = &display->wl;
WARN_ON(refcount_read(&wl->refcount));
return wl_needed;
}
-static bool __intel_dmc_wl_supported(struct drm_i915_private *i915)
+static bool __intel_dmc_wl_supported(struct intel_display *display)
{
+ struct drm_i915_private *i915 = to_i915(display->drm);
+
if (DISPLAY_VER(i915) < 20 ||
!intel_dmc_has_payload(i915) ||
- !i915->display.params.enable_dmc_wl)
+ !display->params.enable_dmc_wl)
return false;
return true;
}
-void intel_dmc_wl_init(struct drm_i915_private *i915)
+void intel_dmc_wl_init(struct intel_display *display)
{
- struct intel_dmc_wl *wl = &i915->display.wl;
+ struct drm_i915_private *i915 = to_i915(display->drm);
+ struct intel_dmc_wl *wl = &display->wl;
/* don't call __intel_dmc_wl_supported(), DMC is not loaded yet */
- if (DISPLAY_VER(i915) < 20 ||
- !i915->display.params.enable_dmc_wl)
+ if (DISPLAY_VER(i915) < 20 || !display->params.enable_dmc_wl)
return;
INIT_DELAYED_WORK(&wl->work, intel_dmc_wl_work);
refcount_set(&wl->refcount, 0);
}
-void intel_dmc_wl_enable(struct drm_i915_private *i915)
+void intel_dmc_wl_enable(struct intel_display *display)
{
- struct intel_dmc_wl *wl = &i915->display.wl;
+ struct drm_i915_private *i915 = to_i915(display->drm);
+ struct intel_dmc_wl *wl = &display->wl;
unsigned long flags;
- if (!__intel_dmc_wl_supported(i915))
+ if (!__intel_dmc_wl_supported(display))
return;
spin_lock_irqsave(&wl->lock, flags);
spin_unlock_irqrestore(&wl->lock, flags);
}
-void intel_dmc_wl_disable(struct drm_i915_private *i915)
+void intel_dmc_wl_disable(struct intel_display *display)
{
- struct intel_dmc_wl *wl = &i915->display.wl;
+ struct drm_i915_private *i915 = to_i915(display->drm);
+ struct intel_dmc_wl *wl = &display->wl;
unsigned long flags;
- if (!__intel_dmc_wl_supported(i915))
+ if (!__intel_dmc_wl_supported(display))
return;
flush_delayed_work(&wl->work);
spin_unlock_irqrestore(&wl->lock, flags);
}
-void intel_dmc_wl_get(struct drm_i915_private *i915, i915_reg_t reg)
+void intel_dmc_wl_get(struct intel_display *display, i915_reg_t reg)
{
- struct intel_dmc_wl *wl = &i915->display.wl;
+ struct drm_i915_private *i915 = to_i915(display->drm);
+ struct intel_dmc_wl *wl = &display->wl;
unsigned long flags;
- if (!__intel_dmc_wl_supported(i915))
+ if (!__intel_dmc_wl_supported(display))
return;
if (!intel_dmc_wl_check_range(reg.reg))
spin_unlock_irqrestore(&wl->lock, flags);
}
-void intel_dmc_wl_put(struct drm_i915_private *i915, i915_reg_t reg)
+void intel_dmc_wl_put(struct intel_display *display, i915_reg_t reg)
{
- struct intel_dmc_wl *wl = &i915->display.wl;
+ struct intel_dmc_wl *wl = &display->wl;
unsigned long flags;
- if (!__intel_dmc_wl_supported(i915))
+ if (!__intel_dmc_wl_supported(display))
return;
if (!intel_dmc_wl_check_range(reg.reg))
goto out_unlock;
if (refcount_dec_and_test(&wl->refcount)) {
- __intel_dmc_wl_release(i915);
+ __intel_dmc_wl_release(display);
goto out_unlock;
}
#include "i915_reg_defs.h"
-struct drm_i915_private;
+struct intel_display;
struct intel_dmc_wl {
spinlock_t lock; /* protects enabled, taken and refcount */
struct delayed_work work;
};
-void intel_dmc_wl_init(struct drm_i915_private *i915);
-void intel_dmc_wl_enable(struct drm_i915_private *i915);
-void intel_dmc_wl_disable(struct drm_i915_private *i915);
-void intel_dmc_wl_get(struct drm_i915_private *i915, i915_reg_t reg);
-void intel_dmc_wl_put(struct drm_i915_private *i915, i915_reg_t reg);
+void intel_dmc_wl_init(struct intel_display *display);
+void intel_dmc_wl_enable(struct intel_display *display);
+void intel_dmc_wl_disable(struct intel_display *display);
+void intel_dmc_wl_get(struct intel_display *display, i915_reg_t reg);
+void intel_dmc_wl_put(struct intel_display *display, i915_reg_t reg);
#endif /* __INTEL_WAKELOCK_H__ */