mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 08:33:17 +02:00
drm/i915/display: convert high level power interfaces to struct intel_display
Going forward, struct intel_display is the main device data structure for display. Convert the high level interfaces (init, cleanup, suspend, resume, etc.) of intel_display_power.c over to it. The actual power get/put etc. are left for follow-up. Cc: Imre Deak <imre.deak@intel.com> Reviewed-by: Imre Deak <imre.deak@intel.com> Signed-off-by: Jani Nikula <jani.nikula@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/e1761b0fe5081bf6ca21cca3430befe254f61b32.1732808222.git.jani.nikula@intel.com
This commit is contained in:
parent
31f58252b7
commit
3987e35d69
|
|
@ -226,13 +226,13 @@ int intel_display_driver_probe_noirq(struct drm_i915_private *i915)
|
|||
goto cleanup_bios;
|
||||
|
||||
/* FIXME: completely on the wrong abstraction layer */
|
||||
ret = intel_power_domains_init(i915);
|
||||
ret = intel_power_domains_init(display);
|
||||
if (ret < 0)
|
||||
goto cleanup_vga;
|
||||
|
||||
intel_pmdemand_init_early(i915);
|
||||
|
||||
intel_power_domains_init_hw(i915, false);
|
||||
intel_power_domains_init_hw(display, false);
|
||||
|
||||
if (!HAS_DISPLAY(i915))
|
||||
return 0;
|
||||
|
|
@ -274,7 +274,7 @@ int intel_display_driver_probe_noirq(struct drm_i915_private *i915)
|
|||
|
||||
cleanup_vga_client_pw_domain_dmc:
|
||||
intel_dmc_fini(display);
|
||||
intel_power_domains_driver_remove(i915);
|
||||
intel_power_domains_driver_remove(display);
|
||||
cleanup_vga:
|
||||
intel_vga_unregister(display);
|
||||
cleanup_bios:
|
||||
|
|
@ -627,7 +627,7 @@ void intel_display_driver_remove_nogem(struct drm_i915_private *i915)
|
|||
|
||||
intel_dmc_fini(display);
|
||||
|
||||
intel_power_domains_driver_remove(i915);
|
||||
intel_power_domains_driver_remove(display);
|
||||
|
||||
intel_vga_unregister(display);
|
||||
|
||||
|
|
|
|||
|
|
@ -1423,7 +1423,6 @@ static void intel_display_vblank_dc_work(struct work_struct *work)
|
|||
{
|
||||
struct intel_display *display =
|
||||
container_of(work, typeof(*display), irq.vblank_dc_work);
|
||||
struct drm_i915_private *i915 = to_i915(display->drm);
|
||||
int vblank_wa_num_pipes = READ_ONCE(display->irq.vblank_wa_num_pipes);
|
||||
|
||||
/*
|
||||
|
|
@ -1432,7 +1431,7 @@ static void intel_display_vblank_dc_work(struct work_struct *work)
|
|||
* PSR code. If DC3CO is taken into use we need take that into account
|
||||
* here as well.
|
||||
*/
|
||||
intel_display_power_set_target_dc_state(i915, vblank_wa_num_pipes ? DC_STATE_DISABLE :
|
||||
intel_display_power_set_target_dc_state(display, vblank_wa_num_pipes ? DC_STATE_DISABLE :
|
||||
DC_STATE_EN_UPTO_DC6);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -281,17 +281,16 @@ sanitize_target_dc_state(struct intel_display *display,
|
|||
|
||||
/**
|
||||
* intel_display_power_set_target_dc_state - Set target dc state.
|
||||
* @dev_priv: i915 device
|
||||
* @display: display device
|
||||
* @state: state which needs to be set as target_dc_state.
|
||||
*
|
||||
* This function set the "DC off" power well target_dc_state,
|
||||
* based upon this target_dc_stste, "DC off" power well will
|
||||
* enable desired DC state.
|
||||
*/
|
||||
void intel_display_power_set_target_dc_state(struct drm_i915_private *dev_priv,
|
||||
void intel_display_power_set_target_dc_state(struct intel_display *display,
|
||||
u32 state)
|
||||
{
|
||||
struct intel_display *display = &dev_priv->display;
|
||||
struct i915_power_well *power_well;
|
||||
bool dc_off_enabled;
|
||||
struct i915_power_domains *power_domains = &display->power.domains;
|
||||
|
|
@ -998,14 +997,13 @@ static u32 get_allowed_dc_mask(struct intel_display *display, int enable_dc)
|
|||
|
||||
/**
|
||||
* intel_power_domains_init - initializes the power domain structures
|
||||
* @dev_priv: i915 device instance
|
||||
* @display: display device instance
|
||||
*
|
||||
* Initializes the power domain structures for @dev_priv depending upon the
|
||||
* supported platform.
|
||||
*/
|
||||
int intel_power_domains_init(struct drm_i915_private *dev_priv)
|
||||
int intel_power_domains_init(struct intel_display *display)
|
||||
{
|
||||
struct intel_display *display = &dev_priv->display;
|
||||
struct i915_power_domains *power_domains = &display->power.domains;
|
||||
|
||||
display->params.disable_power_well =
|
||||
|
|
@ -1026,14 +1024,12 @@ int intel_power_domains_init(struct drm_i915_private *dev_priv)
|
|||
|
||||
/**
|
||||
* intel_power_domains_cleanup - clean up power domains resources
|
||||
* @dev_priv: i915 device instance
|
||||
* @display: display device instance
|
||||
*
|
||||
* Release any resources acquired by intel_power_domains_init()
|
||||
*/
|
||||
void intel_power_domains_cleanup(struct drm_i915_private *dev_priv)
|
||||
void intel_power_domains_cleanup(struct intel_display *display)
|
||||
{
|
||||
struct intel_display *display = &dev_priv->display;
|
||||
|
||||
intel_display_power_map_cleanup(&display->power.domains);
|
||||
}
|
||||
|
||||
|
|
@ -1917,7 +1913,7 @@ static void intel_power_domains_verify_state(struct intel_display *display);
|
|||
|
||||
/**
|
||||
* intel_power_domains_init_hw - initialize hardware power domain state
|
||||
* @i915: i915 device instance
|
||||
* @display: display device instance
|
||||
* @resume: Called from resume code paths or not
|
||||
*
|
||||
* This function initializes the hardware power domain state and enables all
|
||||
|
|
@ -1931,9 +1927,9 @@ static void intel_power_domains_verify_state(struct intel_display *display);
|
|||
* intel_power_domains_enable()) and must be paired with
|
||||
* intel_power_domains_driver_remove().
|
||||
*/
|
||||
void intel_power_domains_init_hw(struct drm_i915_private *i915, bool resume)
|
||||
void intel_power_domains_init_hw(struct intel_display *display, bool resume)
|
||||
{
|
||||
struct intel_display *display = &i915->display;
|
||||
struct drm_i915_private *i915 = to_i915(display->drm);
|
||||
struct i915_power_domains *power_domains = &display->power.domains;
|
||||
|
||||
power_domains->initializing = true;
|
||||
|
|
@ -1985,7 +1981,7 @@ void intel_power_domains_init_hw(struct drm_i915_private *i915, bool resume)
|
|||
|
||||
/**
|
||||
* intel_power_domains_driver_remove - deinitialize hw power domain state
|
||||
* @i915: i915 device instance
|
||||
* @display: display device instance
|
||||
*
|
||||
* De-initializes the display power domain HW state. It also ensures that the
|
||||
* device stays powered up so that the driver can be reloaded.
|
||||
|
|
@ -1994,9 +1990,9 @@ void intel_power_domains_init_hw(struct drm_i915_private *i915, bool resume)
|
|||
* intel_power_domains_disable()) and must be paired with
|
||||
* intel_power_domains_init_hw().
|
||||
*/
|
||||
void intel_power_domains_driver_remove(struct drm_i915_private *i915)
|
||||
void intel_power_domains_driver_remove(struct intel_display *display)
|
||||
{
|
||||
struct intel_display *display = &i915->display;
|
||||
struct drm_i915_private *i915 = to_i915(display->drm);
|
||||
intel_wakeref_t wakeref __maybe_unused =
|
||||
fetch_and_zero(&display->power.domains.init_wakeref);
|
||||
|
||||
|
|
@ -2015,7 +2011,7 @@ void intel_power_domains_driver_remove(struct drm_i915_private *i915)
|
|||
|
||||
/**
|
||||
* intel_power_domains_sanitize_state - sanitize power domains state
|
||||
* @i915: i915 device instance
|
||||
* @display: display device instance
|
||||
*
|
||||
* Sanitize the power domains state during driver loading and system resume.
|
||||
* The function will disable all display power wells that BIOS has enabled
|
||||
|
|
@ -2023,9 +2019,8 @@ void intel_power_domains_driver_remove(struct drm_i915_private *i915)
|
|||
* on it by the time this function is called, after the state of all the
|
||||
* pipe, encoder, etc. HW resources have been sanitized).
|
||||
*/
|
||||
void intel_power_domains_sanitize_state(struct drm_i915_private *i915)
|
||||
void intel_power_domains_sanitize_state(struct intel_display *display)
|
||||
{
|
||||
struct intel_display *display = &i915->display;
|
||||
struct i915_power_domains *power_domains = &display->power.domains;
|
||||
struct i915_power_well *power_well;
|
||||
|
||||
|
|
@ -2047,7 +2042,7 @@ void intel_power_domains_sanitize_state(struct drm_i915_private *i915)
|
|||
|
||||
/**
|
||||
* intel_power_domains_enable - enable toggling of display power wells
|
||||
* @i915: i915 device instance
|
||||
* @display: display device instance
|
||||
*
|
||||
* Enable the ondemand enabling/disabling of the display power wells. Note that
|
||||
* power wells not belonging to POWER_DOMAIN_INIT are allowed to be toggled
|
||||
|
|
@ -2057,9 +2052,9 @@ void intel_power_domains_sanitize_state(struct drm_i915_private *i915)
|
|||
* of display HW readout (which will acquire the power references reflecting
|
||||
* the current HW state).
|
||||
*/
|
||||
void intel_power_domains_enable(struct drm_i915_private *i915)
|
||||
void intel_power_domains_enable(struct intel_display *display)
|
||||
{
|
||||
struct intel_display *display = &i915->display;
|
||||
struct drm_i915_private *i915 = to_i915(display->drm);
|
||||
intel_wakeref_t wakeref __maybe_unused =
|
||||
fetch_and_zero(&display->power.domains.init_wakeref);
|
||||
|
||||
|
|
@ -2069,14 +2064,14 @@ void intel_power_domains_enable(struct drm_i915_private *i915)
|
|||
|
||||
/**
|
||||
* intel_power_domains_disable - disable toggling of display power wells
|
||||
* @i915: i915 device instance
|
||||
* @display: display device instance
|
||||
*
|
||||
* Disable the ondemand enabling/disabling of the display power wells. See
|
||||
* intel_power_domains_enable() for which power wells this call controls.
|
||||
*/
|
||||
void intel_power_domains_disable(struct drm_i915_private *i915)
|
||||
void intel_power_domains_disable(struct intel_display *display)
|
||||
{
|
||||
struct intel_display *display = &i915->display;
|
||||
struct drm_i915_private *i915 = to_i915(display->drm);
|
||||
struct i915_power_domains *power_domains = &display->power.domains;
|
||||
|
||||
drm_WARN_ON(display->drm, power_domains->init_wakeref);
|
||||
|
|
@ -2088,7 +2083,7 @@ void intel_power_domains_disable(struct drm_i915_private *i915)
|
|||
|
||||
/**
|
||||
* intel_power_domains_suspend - suspend power domain state
|
||||
* @i915: i915 device instance
|
||||
* @display: display device instance
|
||||
* @s2idle: specifies whether we go to idle, or deeper sleep
|
||||
*
|
||||
* This function prepares the hardware power domain state before entering
|
||||
|
|
@ -2097,9 +2092,9 @@ void intel_power_domains_disable(struct drm_i915_private *i915)
|
|||
* It must be called with power domains already disabled (after a call to
|
||||
* intel_power_domains_disable()) and paired with intel_power_domains_resume().
|
||||
*/
|
||||
void intel_power_domains_suspend(struct drm_i915_private *i915, bool s2idle)
|
||||
void intel_power_domains_suspend(struct intel_display *display, bool s2idle)
|
||||
{
|
||||
struct intel_display *display = &i915->display;
|
||||
struct drm_i915_private *i915 = to_i915(display->drm);
|
||||
struct i915_power_domains *power_domains = &display->power.domains;
|
||||
intel_wakeref_t wakeref __maybe_unused =
|
||||
fetch_and_zero(&power_domains->init_wakeref);
|
||||
|
|
@ -2143,7 +2138,7 @@ void intel_power_domains_suspend(struct drm_i915_private *i915, bool s2idle)
|
|||
|
||||
/**
|
||||
* intel_power_domains_resume - resume power domain state
|
||||
* @i915: i915 device instance
|
||||
* @display: display device instance
|
||||
*
|
||||
* This function resume the hardware power domain state during system resume.
|
||||
*
|
||||
|
|
@ -2151,13 +2146,13 @@ void intel_power_domains_suspend(struct drm_i915_private *i915, bool s2idle)
|
|||
* intel_power_domains_enable()) and must be paired with
|
||||
* intel_power_domains_suspend().
|
||||
*/
|
||||
void intel_power_domains_resume(struct drm_i915_private *i915)
|
||||
void intel_power_domains_resume(struct intel_display *display)
|
||||
{
|
||||
struct intel_display *display = &i915->display;
|
||||
struct drm_i915_private *i915 = to_i915(display->drm);
|
||||
struct i915_power_domains *power_domains = &display->power.domains;
|
||||
|
||||
if (power_domains->display_core_suspended) {
|
||||
intel_power_domains_init_hw(i915, true);
|
||||
intel_power_domains_init_hw(display, true);
|
||||
power_domains->display_core_suspended = false;
|
||||
} else {
|
||||
drm_WARN_ON(display->drm, power_domains->init_wakeref);
|
||||
|
|
@ -2258,11 +2253,11 @@ static void intel_power_domains_verify_state(struct intel_display *display)
|
|||
|
||||
#endif
|
||||
|
||||
void intel_display_power_suspend_late(struct drm_i915_private *i915, bool s2idle)
|
||||
void intel_display_power_suspend_late(struct intel_display *display, bool s2idle)
|
||||
{
|
||||
struct intel_display *display = &i915->display;
|
||||
struct drm_i915_private *i915 = to_i915(display->drm);
|
||||
|
||||
intel_power_domains_suspend(i915, s2idle);
|
||||
intel_power_domains_suspend(display, s2idle);
|
||||
|
||||
if (DISPLAY_VER(display) >= 11 || display->platform.geminilake ||
|
||||
display->platform.broxton) {
|
||||
|
|
@ -2276,9 +2271,9 @@ void intel_display_power_suspend_late(struct drm_i915_private *i915, bool s2idle
|
|||
intel_de_rmw(i915, SOUTH_CHICKEN1, SBCLK_RUN_REFCLK_DIS, SBCLK_RUN_REFCLK_DIS);
|
||||
}
|
||||
|
||||
void intel_display_power_resume_early(struct drm_i915_private *i915)
|
||||
void intel_display_power_resume_early(struct intel_display *display)
|
||||
{
|
||||
struct intel_display *display = &i915->display;
|
||||
struct drm_i915_private *i915 = to_i915(display->drm);
|
||||
|
||||
if (DISPLAY_VER(display) >= 11 || display->platform.geminilake ||
|
||||
display->platform.broxton) {
|
||||
|
|
@ -2292,13 +2287,11 @@ void intel_display_power_resume_early(struct drm_i915_private *i915)
|
|||
if (INTEL_PCH_TYPE(i915) >= PCH_CNP && INTEL_PCH_TYPE(i915) < PCH_DG1)
|
||||
intel_de_rmw(i915, SOUTH_CHICKEN1, SBCLK_RUN_REFCLK_DIS, 0);
|
||||
|
||||
intel_power_domains_resume(i915);
|
||||
intel_power_domains_resume(display);
|
||||
}
|
||||
|
||||
void intel_display_power_suspend(struct drm_i915_private *i915)
|
||||
void intel_display_power_suspend(struct intel_display *display)
|
||||
{
|
||||
struct intel_display *display = &i915->display;
|
||||
|
||||
if (DISPLAY_VER(display) >= 11) {
|
||||
icl_display_core_uninit(display);
|
||||
bxt_enable_dc9(display);
|
||||
|
|
@ -2310,9 +2303,8 @@ void intel_display_power_suspend(struct drm_i915_private *i915)
|
|||
}
|
||||
}
|
||||
|
||||
void intel_display_power_resume(struct drm_i915_private *i915)
|
||||
void intel_display_power_resume(struct intel_display *display)
|
||||
{
|
||||
struct intel_display *display = &i915->display;
|
||||
struct i915_power_domains *power_domains = &display->power.domains;
|
||||
|
||||
if (DISPLAY_VER(display) >= 11) {
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ enum aux_ch;
|
|||
enum port;
|
||||
struct drm_i915_private;
|
||||
struct i915_power_well;
|
||||
struct intel_display;
|
||||
struct intel_encoder;
|
||||
struct seq_file;
|
||||
|
||||
|
|
@ -166,21 +167,21 @@ struct intel_display_power_domain_set {
|
|||
for ((__domain) = 0; (__domain) < POWER_DOMAIN_NUM; (__domain)++) \
|
||||
for_each_if(test_bit((__domain), (__mask)->bits))
|
||||
|
||||
int intel_power_domains_init(struct drm_i915_private *dev_priv);
|
||||
void intel_power_domains_cleanup(struct drm_i915_private *dev_priv);
|
||||
void intel_power_domains_init_hw(struct drm_i915_private *dev_priv, bool resume);
|
||||
void intel_power_domains_driver_remove(struct drm_i915_private *dev_priv);
|
||||
void intel_power_domains_enable(struct drm_i915_private *dev_priv);
|
||||
void intel_power_domains_disable(struct drm_i915_private *dev_priv);
|
||||
void intel_power_domains_suspend(struct drm_i915_private *dev_priv, bool s2idle);
|
||||
void intel_power_domains_resume(struct drm_i915_private *dev_priv);
|
||||
void intel_power_domains_sanitize_state(struct drm_i915_private *dev_priv);
|
||||
int intel_power_domains_init(struct intel_display *display);
|
||||
void intel_power_domains_cleanup(struct intel_display *display);
|
||||
void intel_power_domains_init_hw(struct intel_display *display, bool resume);
|
||||
void intel_power_domains_driver_remove(struct intel_display *display);
|
||||
void intel_power_domains_enable(struct intel_display *display);
|
||||
void intel_power_domains_disable(struct intel_display *display);
|
||||
void intel_power_domains_suspend(struct intel_display *display, bool s2idle);
|
||||
void intel_power_domains_resume(struct intel_display *display);
|
||||
void intel_power_domains_sanitize_state(struct intel_display *display);
|
||||
|
||||
void intel_display_power_suspend_late(struct drm_i915_private *i915, bool s2idle);
|
||||
void intel_display_power_resume_early(struct drm_i915_private *i915);
|
||||
void intel_display_power_suspend(struct drm_i915_private *i915);
|
||||
void intel_display_power_resume(struct drm_i915_private *i915);
|
||||
void intel_display_power_set_target_dc_state(struct drm_i915_private *dev_priv,
|
||||
void intel_display_power_suspend_late(struct intel_display *display, bool s2idle);
|
||||
void intel_display_power_resume_early(struct intel_display *display);
|
||||
void intel_display_power_suspend(struct intel_display *display);
|
||||
void intel_display_power_resume(struct intel_display *display);
|
||||
void intel_display_power_set_target_dc_state(struct intel_display *display,
|
||||
u32 state);
|
||||
|
||||
bool intel_display_power_is_enabled(struct drm_i915_private *dev_priv,
|
||||
|
|
|
|||
|
|
@ -1024,5 +1024,5 @@ void intel_modeset_setup_hw_state(struct drm_i915_private *i915,
|
|||
|
||||
intel_display_power_put(i915, POWER_DOMAIN_INIT, wakeref);
|
||||
|
||||
intel_power_domains_sanitize_state(i915);
|
||||
intel_power_domains_sanitize_state(display);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1130,18 +1130,16 @@ static void psr2_program_idle_frames(struct intel_dp *intel_dp,
|
|||
static void tgl_psr2_enable_dc3co(struct intel_dp *intel_dp)
|
||||
{
|
||||
struct intel_display *display = to_intel_display(intel_dp);
|
||||
struct drm_i915_private *dev_priv = to_i915(display->drm);
|
||||
|
||||
psr2_program_idle_frames(intel_dp, 0);
|
||||
intel_display_power_set_target_dc_state(dev_priv, DC_STATE_EN_DC3CO);
|
||||
intel_display_power_set_target_dc_state(display, DC_STATE_EN_DC3CO);
|
||||
}
|
||||
|
||||
static void tgl_psr2_disable_dc3co(struct intel_dp *intel_dp)
|
||||
{
|
||||
struct intel_display *display = to_intel_display(intel_dp);
|
||||
struct drm_i915_private *dev_priv = to_i915(display->drm);
|
||||
|
||||
intel_display_power_set_target_dc_state(dev_priv, DC_STATE_EN_UPTO_DC6);
|
||||
intel_display_power_set_target_dc_state(display, DC_STATE_EN_UPTO_DC6);
|
||||
psr2_program_idle_frames(intel_dp, psr_compute_idle_frames(intel_dp));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -286,8 +286,10 @@ static int i915_driver_early_probe(struct drm_i915_private *dev_priv)
|
|||
*/
|
||||
static void i915_driver_late_release(struct drm_i915_private *dev_priv)
|
||||
{
|
||||
struct intel_display *display = &dev_priv->display;
|
||||
|
||||
intel_irq_fini(dev_priv);
|
||||
intel_power_domains_cleanup(dev_priv);
|
||||
intel_power_domains_cleanup(display);
|
||||
i915_gem_cleanup_early(dev_priv);
|
||||
intel_gt_driver_late_release_all(dev_priv);
|
||||
intel_region_ttm_device_fini(dev_priv);
|
||||
|
|
@ -605,6 +607,7 @@ static void i915_driver_hw_remove(struct drm_i915_private *dev_priv)
|
|||
*/
|
||||
static void i915_driver_register(struct drm_i915_private *dev_priv)
|
||||
{
|
||||
struct intel_display *display = &dev_priv->display;
|
||||
struct intel_gt *gt;
|
||||
unsigned int i;
|
||||
|
||||
|
|
@ -635,7 +638,7 @@ static void i915_driver_register(struct drm_i915_private *dev_priv)
|
|||
|
||||
intel_display_driver_register(dev_priv);
|
||||
|
||||
intel_power_domains_enable(dev_priv);
|
||||
intel_power_domains_enable(display);
|
||||
intel_runtime_pm_enable(&dev_priv->runtime_pm);
|
||||
|
||||
intel_register_dsm_handler();
|
||||
|
|
@ -650,6 +653,7 @@ static void i915_driver_register(struct drm_i915_private *dev_priv)
|
|||
*/
|
||||
static void i915_driver_unregister(struct drm_i915_private *dev_priv)
|
||||
{
|
||||
struct intel_display *display = &dev_priv->display;
|
||||
struct intel_gt *gt;
|
||||
unsigned int i;
|
||||
|
||||
|
|
@ -658,7 +662,7 @@ static void i915_driver_unregister(struct drm_i915_private *dev_priv)
|
|||
intel_unregister_dsm_handler();
|
||||
|
||||
intel_runtime_pm_disable(&dev_priv->runtime_pm);
|
||||
intel_power_domains_disable(dev_priv);
|
||||
intel_power_domains_disable(display);
|
||||
|
||||
intel_display_driver_unregister(dev_priv);
|
||||
|
||||
|
|
@ -943,9 +947,11 @@ static void i915_driver_postclose(struct drm_device *dev, struct drm_file *file)
|
|||
|
||||
void i915_driver_shutdown(struct drm_i915_private *i915)
|
||||
{
|
||||
struct intel_display *display = &i915->display;
|
||||
|
||||
disable_rpm_wakeref_asserts(&i915->runtime_pm);
|
||||
intel_runtime_pm_disable(&i915->runtime_pm);
|
||||
intel_power_domains_disable(i915);
|
||||
intel_power_domains_disable(display);
|
||||
|
||||
intel_fbdev_set_suspend(&i915->drm, FBINFO_STATE_SUSPENDED, true);
|
||||
if (HAS_DISPLAY(i915)) {
|
||||
|
|
@ -981,7 +987,7 @@ void i915_driver_shutdown(struct drm_i915_private *i915)
|
|||
* - unify the driver remove and system/runtime suspend sequences with
|
||||
* the above unified shutdown/poweroff sequence.
|
||||
*/
|
||||
intel_power_domains_driver_remove(i915);
|
||||
intel_power_domains_driver_remove(display);
|
||||
enable_rpm_wakeref_asserts(&i915->runtime_pm);
|
||||
|
||||
intel_runtime_pm_driver_last_release(&i915->runtime_pm);
|
||||
|
|
@ -1029,7 +1035,7 @@ static int i915_drm_suspend(struct drm_device *dev)
|
|||
|
||||
/* We do a lot of poking in a lot of registers, make sure they work
|
||||
* properly. */
|
||||
intel_power_domains_disable(dev_priv);
|
||||
intel_power_domains_disable(display);
|
||||
intel_fbdev_set_suspend(dev, FBINFO_STATE_SUSPENDED, true);
|
||||
if (HAS_DISPLAY(dev_priv)) {
|
||||
drm_kms_helper_poll_disable(dev);
|
||||
|
|
@ -1071,6 +1077,7 @@ static int i915_drm_suspend(struct drm_device *dev)
|
|||
static int i915_drm_suspend_late(struct drm_device *dev, bool hibernation)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = to_i915(dev);
|
||||
struct intel_display *display = &dev_priv->display;
|
||||
struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
|
||||
struct intel_runtime_pm *rpm = &dev_priv->runtime_pm;
|
||||
struct intel_gt *gt;
|
||||
|
|
@ -1086,12 +1093,12 @@ static int i915_drm_suspend_late(struct drm_device *dev, bool hibernation)
|
|||
for_each_gt(gt, dev_priv, i)
|
||||
intel_uncore_suspend(gt->uncore);
|
||||
|
||||
intel_display_power_suspend_late(dev_priv, s2idle);
|
||||
intel_display_power_suspend_late(display, s2idle);
|
||||
|
||||
ret = vlv_suspend_complete(dev_priv);
|
||||
if (ret) {
|
||||
drm_err(&dev_priv->drm, "Suspend complete failed: %d\n", ret);
|
||||
intel_display_power_resume_early(dev_priv);
|
||||
intel_display_power_resume_early(display);
|
||||
|
||||
goto out;
|
||||
}
|
||||
|
|
@ -1217,7 +1224,7 @@ static int i915_drm_resume(struct drm_device *dev)
|
|||
|
||||
intel_fbdev_set_suspend(dev, FBINFO_STATE_RUNNING, false);
|
||||
|
||||
intel_power_domains_enable(dev_priv);
|
||||
intel_power_domains_enable(display);
|
||||
|
||||
intel_gvt_resume(dev_priv);
|
||||
|
||||
|
|
@ -1229,6 +1236,7 @@ static int i915_drm_resume(struct drm_device *dev)
|
|||
static int i915_drm_resume_early(struct drm_device *dev)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = to_i915(dev);
|
||||
struct intel_display *display = &dev_priv->display;
|
||||
struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
|
||||
struct intel_gt *gt;
|
||||
int ret, i;
|
||||
|
|
@ -1288,7 +1296,7 @@ static int i915_drm_resume_early(struct drm_device *dev)
|
|||
for_each_gt(gt, dev_priv, i)
|
||||
intel_gt_resume_early(gt);
|
||||
|
||||
intel_display_power_resume_early(dev_priv);
|
||||
intel_display_power_resume_early(display);
|
||||
|
||||
enable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
|
||||
|
||||
|
|
@ -1490,7 +1498,7 @@ static int intel_runtime_suspend(struct device *kdev)
|
|||
for_each_gt(gt, dev_priv, i)
|
||||
intel_uncore_suspend(gt->uncore);
|
||||
|
||||
intel_display_power_suspend(dev_priv);
|
||||
intel_display_power_suspend(display);
|
||||
|
||||
ret = vlv_suspend_complete(dev_priv);
|
||||
if (ret) {
|
||||
|
|
@ -1584,7 +1592,7 @@ static int intel_runtime_resume(struct device *kdev)
|
|||
drm_dbg(&dev_priv->drm,
|
||||
"Unclaimed access during suspend, bios?\n");
|
||||
|
||||
intel_display_power_resume(dev_priv);
|
||||
intel_display_power_resume(display);
|
||||
|
||||
ret = vlv_resume_prepare(dev_priv, true);
|
||||
|
||||
|
|
|
|||
|
|
@ -104,11 +104,12 @@ int xe_display_create(struct xe_device *xe)
|
|||
static void xe_display_fini_nommio(struct drm_device *dev, void *dummy)
|
||||
{
|
||||
struct xe_device *xe = to_xe_device(dev);
|
||||
struct intel_display *display = &xe->display;
|
||||
|
||||
if (!xe->info.probe_display)
|
||||
return;
|
||||
|
||||
intel_power_domains_cleanup(xe);
|
||||
intel_power_domains_cleanup(display);
|
||||
}
|
||||
|
||||
int xe_display_init_nommio(struct xe_device *xe)
|
||||
|
|
@ -216,21 +217,25 @@ void xe_display_fini(struct xe_device *xe)
|
|||
|
||||
void xe_display_register(struct xe_device *xe)
|
||||
{
|
||||
struct intel_display *display = &xe->display;
|
||||
|
||||
if (!xe->info.probe_display)
|
||||
return;
|
||||
|
||||
intel_display_driver_register(xe);
|
||||
intel_power_domains_enable(xe);
|
||||
intel_power_domains_enable(display);
|
||||
intel_register_dsm_handler();
|
||||
}
|
||||
|
||||
void xe_display_unregister(struct xe_device *xe)
|
||||
{
|
||||
struct intel_display *display = &xe->display;
|
||||
|
||||
if (!xe->info.probe_display)
|
||||
return;
|
||||
|
||||
intel_unregister_dsm_handler();
|
||||
intel_power_domains_disable(xe);
|
||||
intel_power_domains_disable(display);
|
||||
intel_display_driver_unregister(xe);
|
||||
}
|
||||
|
||||
|
|
@ -323,7 +328,7 @@ static void __xe_display_pm_suspend(struct xe_device *xe, bool runtime)
|
|||
* We do a lot of poking in a lot of registers, make sure they work
|
||||
* properly.
|
||||
*/
|
||||
intel_power_domains_disable(xe);
|
||||
intel_power_domains_disable(display);
|
||||
if (!runtime)
|
||||
intel_fbdev_set_suspend(&xe->drm, FBINFO_STATE_SUSPENDED, true);
|
||||
|
||||
|
|
@ -359,7 +364,7 @@ void xe_display_pm_shutdown(struct xe_device *xe)
|
|||
if (!xe->info.probe_display)
|
||||
return;
|
||||
|
||||
intel_power_domains_disable(xe);
|
||||
intel_power_domains_disable(display);
|
||||
intel_fbdev_set_suspend(&xe->drm, FBINFO_STATE_SUSPENDED, true);
|
||||
if (has_display(xe)) {
|
||||
drm_kms_helper_poll_disable(&xe->drm);
|
||||
|
|
@ -395,12 +400,13 @@ void xe_display_pm_runtime_suspend(struct xe_device *xe)
|
|||
|
||||
void xe_display_pm_suspend_late(struct xe_device *xe)
|
||||
{
|
||||
struct intel_display *display = &xe->display;
|
||||
bool s2idle = suspend_to_idle();
|
||||
|
||||
if (!xe->info.probe_display)
|
||||
return;
|
||||
|
||||
intel_display_power_suspend_late(xe, s2idle);
|
||||
intel_display_power_suspend_late(display, s2idle);
|
||||
}
|
||||
|
||||
void xe_display_pm_runtime_suspend_late(struct xe_device *xe)
|
||||
|
|
@ -423,6 +429,8 @@ void xe_display_pm_runtime_suspend_late(struct xe_device *xe)
|
|||
|
||||
void xe_display_pm_shutdown_late(struct xe_device *xe)
|
||||
{
|
||||
struct intel_display *display = &xe->display;
|
||||
|
||||
if (!xe->info.probe_display)
|
||||
return;
|
||||
|
||||
|
|
@ -431,15 +439,17 @@ void xe_display_pm_shutdown_late(struct xe_device *xe)
|
|||
* for now leaving all display power wells in the INIT power domain
|
||||
* enabled.
|
||||
*/
|
||||
intel_power_domains_driver_remove(xe);
|
||||
intel_power_domains_driver_remove(display);
|
||||
}
|
||||
|
||||
void xe_display_pm_resume_early(struct xe_device *xe)
|
||||
{
|
||||
struct intel_display *display = &xe->display;
|
||||
|
||||
if (!xe->info.probe_display)
|
||||
return;
|
||||
|
||||
intel_display_power_resume_early(xe);
|
||||
intel_display_power_resume_early(display);
|
||||
}
|
||||
|
||||
static void __xe_display_pm_resume(struct xe_device *xe, bool runtime)
|
||||
|
|
@ -473,7 +483,7 @@ static void __xe_display_pm_resume(struct xe_device *xe, bool runtime)
|
|||
if (!runtime)
|
||||
intel_fbdev_set_suspend(&xe->drm, FBINFO_STATE_RUNNING, false);
|
||||
|
||||
intel_power_domains_enable(xe);
|
||||
intel_power_domains_enable(display);
|
||||
}
|
||||
|
||||
void xe_display_pm_resume(struct xe_device *xe)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user