mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-10 02:12:00 -04:00
drm/i915/cdclk: Convert CDCLK code to intel_display
struct intel_display will replace struct drm_i915_private as
the main thing for display code. Convert the CDCLK code to
use it (as much as possible at this stage).
v2: Add local 'display' variable to __intel_display_device_info_runtime_init() (Jani)
Simplify the to_intel_display(crtc_state) stuff (Jani)
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240906143306.15937-3-ville.syrjala@linux.intel.com
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -11,9 +11,9 @@
|
||||
#include "intel_display_limits.h"
|
||||
#include "intel_global_state.h"
|
||||
|
||||
struct drm_i915_private;
|
||||
struct intel_atomic_state;
|
||||
struct intel_crtc_state;
|
||||
struct intel_display;
|
||||
|
||||
struct intel_cdclk_config {
|
||||
unsigned int cdclk, vco, ref, bypass;
|
||||
@@ -59,24 +59,24 @@ struct intel_cdclk_state {
|
||||
};
|
||||
|
||||
int intel_crtc_compute_min_cdclk(const struct intel_crtc_state *crtc_state);
|
||||
void intel_cdclk_init_hw(struct drm_i915_private *i915);
|
||||
void intel_cdclk_uninit_hw(struct drm_i915_private *i915);
|
||||
void intel_init_cdclk_hooks(struct drm_i915_private *dev_priv);
|
||||
void intel_update_max_cdclk(struct drm_i915_private *dev_priv);
|
||||
void intel_update_cdclk(struct drm_i915_private *dev_priv);
|
||||
u32 intel_read_rawclk(struct drm_i915_private *dev_priv);
|
||||
void intel_cdclk_init_hw(struct intel_display *display);
|
||||
void intel_cdclk_uninit_hw(struct intel_display *display);
|
||||
void intel_init_cdclk_hooks(struct intel_display *display);
|
||||
void intel_update_max_cdclk(struct intel_display *display);
|
||||
void intel_update_cdclk(struct intel_display *display);
|
||||
u32 intel_read_rawclk(struct intel_display *display);
|
||||
bool intel_cdclk_clock_changed(const struct intel_cdclk_config *a,
|
||||
const struct intel_cdclk_config *b);
|
||||
int intel_mdclk_cdclk_ratio(struct drm_i915_private *i915,
|
||||
int intel_mdclk_cdclk_ratio(struct intel_display *display,
|
||||
const struct intel_cdclk_config *cdclk_config);
|
||||
bool intel_cdclk_is_decreasing_later(struct intel_atomic_state *state);
|
||||
void intel_set_cdclk_pre_plane_update(struct intel_atomic_state *state);
|
||||
void intel_set_cdclk_post_plane_update(struct intel_atomic_state *state);
|
||||
void intel_cdclk_dump_config(struct drm_i915_private *i915,
|
||||
void intel_cdclk_dump_config(struct intel_display *display,
|
||||
const struct intel_cdclk_config *cdclk_config,
|
||||
const char *context);
|
||||
int intel_modeset_calc_cdclk(struct intel_atomic_state *state);
|
||||
void intel_cdclk_get_cdclk(struct drm_i915_private *dev_priv,
|
||||
void intel_cdclk_get_cdclk(struct intel_display *display,
|
||||
struct intel_cdclk_config *cdclk_config);
|
||||
int intel_cdclk_atomic_check(struct intel_atomic_state *state,
|
||||
bool *need_cdclk_calc);
|
||||
@@ -92,7 +92,7 @@ intel_atomic_get_cdclk_state(struct intel_atomic_state *state);
|
||||
#define intel_atomic_get_new_cdclk_state(state) \
|
||||
to_intel_cdclk_state(intel_atomic_get_new_global_obj_state(state, &to_intel_display(state)->cdclk.obj))
|
||||
|
||||
int intel_cdclk_init(struct drm_i915_private *dev_priv);
|
||||
void intel_cdclk_debugfs_register(struct drm_i915_private *i915);
|
||||
int intel_cdclk_init(struct intel_display *display);
|
||||
void intel_cdclk_debugfs_register(struct intel_display *display);
|
||||
|
||||
#endif /* __INTEL_CDCLK_H__ */
|
||||
|
||||
@@ -1068,7 +1068,7 @@ void intel_display_debugfs_register(struct drm_i915_private *i915)
|
||||
minor->debugfs_root, minor);
|
||||
|
||||
intel_bios_debugfs_register(display);
|
||||
intel_cdclk_debugfs_register(i915);
|
||||
intel_cdclk_debugfs_register(display);
|
||||
intel_dmc_debugfs_register(i915);
|
||||
intel_fbc_debugfs_register(display);
|
||||
intel_hpd_debugfs_register(i915);
|
||||
|
||||
@@ -1532,6 +1532,7 @@ void intel_display_device_remove(struct drm_i915_private *i915)
|
||||
|
||||
static void __intel_display_device_info_runtime_init(struct drm_i915_private *i915)
|
||||
{
|
||||
struct intel_display *display = &i915->display;
|
||||
struct intel_display_runtime_info *display_runtime = DISPLAY_RUNTIME_INFO(i915);
|
||||
enum pipe pipe;
|
||||
|
||||
@@ -1678,7 +1679,7 @@ static void __intel_display_device_info_runtime_init(struct drm_i915_private *i9
|
||||
}
|
||||
}
|
||||
|
||||
display_runtime->rawclk_freq = intel_read_rawclk(i915);
|
||||
display_runtime->rawclk_freq = intel_read_rawclk(display);
|
||||
drm_dbg_kms(&i915->drm, "rawclk rate: %d kHz\n", display_runtime->rawclk_freq);
|
||||
|
||||
return;
|
||||
|
||||
@@ -82,16 +82,17 @@ bool intel_display_driver_probe_defer(struct pci_dev *pdev)
|
||||
|
||||
void intel_display_driver_init_hw(struct drm_i915_private *i915)
|
||||
{
|
||||
struct intel_display *display = &i915->display;
|
||||
struct intel_cdclk_state *cdclk_state;
|
||||
|
||||
if (!HAS_DISPLAY(i915))
|
||||
return;
|
||||
|
||||
cdclk_state = to_intel_cdclk_state(i915->display.cdclk.obj.state);
|
||||
cdclk_state = to_intel_cdclk_state(display->cdclk.obj.state);
|
||||
|
||||
intel_update_cdclk(i915);
|
||||
intel_cdclk_dump_config(i915, &i915->display.cdclk.hw, "Current CDCLK");
|
||||
cdclk_state->logical = cdclk_state->actual = i915->display.cdclk.hw;
|
||||
intel_update_cdclk(display);
|
||||
intel_cdclk_dump_config(display, &display->cdclk.hw, "Current CDCLK");
|
||||
cdclk_state->logical = cdclk_state->actual = display->cdclk.hw;
|
||||
|
||||
intel_display_wa_apply(i915);
|
||||
}
|
||||
@@ -194,7 +195,7 @@ void intel_display_driver_early_probe(struct drm_i915_private *i915)
|
||||
intel_display_irq_init(i915);
|
||||
intel_dkl_phy_init(i915);
|
||||
intel_color_init_hooks(i915);
|
||||
intel_init_cdclk_hooks(i915);
|
||||
intel_init_cdclk_hooks(&i915->display);
|
||||
intel_audio_hooks_init(i915);
|
||||
intel_dpll_init_clock_hook(i915);
|
||||
intel_init_display_hooks(i915);
|
||||
@@ -244,7 +245,7 @@ int intel_display_driver_probe_noirq(struct drm_i915_private *i915)
|
||||
|
||||
intel_mode_config_init(i915);
|
||||
|
||||
ret = intel_cdclk_init(i915);
|
||||
ret = intel_cdclk_init(display);
|
||||
if (ret)
|
||||
goto cleanup_vga_client_pw_domain_dmc;
|
||||
|
||||
@@ -451,8 +452,8 @@ int intel_display_driver_probe_nogem(struct drm_i915_private *i915)
|
||||
intel_display_driver_init_hw(i915);
|
||||
intel_dpll_update_ref_clks(i915);
|
||||
|
||||
if (i915->display.cdclk.max_cdclk_freq == 0)
|
||||
intel_update_max_cdclk(i915);
|
||||
if (display->cdclk.max_cdclk_freq == 0)
|
||||
intel_update_max_cdclk(display);
|
||||
|
||||
intel_hti_init(display);
|
||||
|
||||
|
||||
@@ -1300,6 +1300,7 @@ static void hsw_disable_lcpll(struct drm_i915_private *dev_priv,
|
||||
*/
|
||||
static void hsw_restore_lcpll(struct drm_i915_private *dev_priv)
|
||||
{
|
||||
struct intel_display *display = &dev_priv->display;
|
||||
u32 val;
|
||||
|
||||
val = intel_de_read(dev_priv, LCPLL_CTL);
|
||||
@@ -1343,8 +1344,8 @@ static void hsw_restore_lcpll(struct drm_i915_private *dev_priv)
|
||||
|
||||
intel_uncore_forcewake_put(&dev_priv->uncore, FORCEWAKE_ALL);
|
||||
|
||||
intel_update_cdclk(dev_priv);
|
||||
intel_cdclk_dump_config(dev_priv, &dev_priv->display.cdclk.hw, "Current CDCLK");
|
||||
intel_update_cdclk(display);
|
||||
intel_cdclk_dump_config(display, &display->cdclk.hw, "Current CDCLK");
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1416,7 +1417,8 @@ static void intel_pch_reset_handshake(struct drm_i915_private *dev_priv,
|
||||
static void skl_display_core_init(struct drm_i915_private *dev_priv,
|
||||
bool resume)
|
||||
{
|
||||
struct i915_power_domains *power_domains = &dev_priv->display.power.domains;
|
||||
struct intel_display *display = &dev_priv->display;
|
||||
struct i915_power_domains *power_domains = &display->power.domains;
|
||||
struct i915_power_well *well;
|
||||
|
||||
gen9_set_dc_state(dev_priv, DC_STATE_DISABLE);
|
||||
@@ -1438,7 +1440,7 @@ static void skl_display_core_init(struct drm_i915_private *dev_priv,
|
||||
|
||||
mutex_unlock(&power_domains->lock);
|
||||
|
||||
intel_cdclk_init_hw(dev_priv);
|
||||
intel_cdclk_init_hw(display);
|
||||
|
||||
gen9_dbuf_enable(dev_priv);
|
||||
|
||||
@@ -1448,7 +1450,8 @@ static void skl_display_core_init(struct drm_i915_private *dev_priv,
|
||||
|
||||
static void skl_display_core_uninit(struct drm_i915_private *dev_priv)
|
||||
{
|
||||
struct i915_power_domains *power_domains = &dev_priv->display.power.domains;
|
||||
struct intel_display *display = &dev_priv->display;
|
||||
struct i915_power_domains *power_domains = &display->power.domains;
|
||||
struct i915_power_well *well;
|
||||
|
||||
if (!HAS_DISPLAY(dev_priv))
|
||||
@@ -1459,7 +1462,7 @@ static void skl_display_core_uninit(struct drm_i915_private *dev_priv)
|
||||
|
||||
gen9_dbuf_disable(dev_priv);
|
||||
|
||||
intel_cdclk_uninit_hw(dev_priv);
|
||||
intel_cdclk_uninit_hw(display);
|
||||
|
||||
/* The spec doesn't call for removing the reset handshake flag */
|
||||
/* disable PG1 and Misc I/O */
|
||||
@@ -1482,7 +1485,8 @@ static void skl_display_core_uninit(struct drm_i915_private *dev_priv)
|
||||
|
||||
static void bxt_display_core_init(struct drm_i915_private *dev_priv, bool resume)
|
||||
{
|
||||
struct i915_power_domains *power_domains = &dev_priv->display.power.domains;
|
||||
struct intel_display *display = &dev_priv->display;
|
||||
struct i915_power_domains *power_domains = &display->power.domains;
|
||||
struct i915_power_well *well;
|
||||
|
||||
gen9_set_dc_state(dev_priv, DC_STATE_DISABLE);
|
||||
@@ -1506,7 +1510,7 @@ static void bxt_display_core_init(struct drm_i915_private *dev_priv, bool resume
|
||||
|
||||
mutex_unlock(&power_domains->lock);
|
||||
|
||||
intel_cdclk_init_hw(dev_priv);
|
||||
intel_cdclk_init_hw(display);
|
||||
|
||||
gen9_dbuf_enable(dev_priv);
|
||||
|
||||
@@ -1516,7 +1520,8 @@ static void bxt_display_core_init(struct drm_i915_private *dev_priv, bool resume
|
||||
|
||||
static void bxt_display_core_uninit(struct drm_i915_private *dev_priv)
|
||||
{
|
||||
struct i915_power_domains *power_domains = &dev_priv->display.power.domains;
|
||||
struct intel_display *display = &dev_priv->display;
|
||||
struct i915_power_domains *power_domains = &display->power.domains;
|
||||
struct i915_power_well *well;
|
||||
|
||||
if (!HAS_DISPLAY(dev_priv))
|
||||
@@ -1527,7 +1532,7 @@ static void bxt_display_core_uninit(struct drm_i915_private *dev_priv)
|
||||
|
||||
gen9_dbuf_disable(dev_priv);
|
||||
|
||||
intel_cdclk_uninit_hw(dev_priv);
|
||||
intel_cdclk_uninit_hw(display);
|
||||
|
||||
/* The spec doesn't call for removing the reset handshake flag */
|
||||
|
||||
@@ -1623,7 +1628,8 @@ static void tgl_bw_buddy_init(struct drm_i915_private *dev_priv)
|
||||
static void icl_display_core_init(struct drm_i915_private *dev_priv,
|
||||
bool resume)
|
||||
{
|
||||
struct i915_power_domains *power_domains = &dev_priv->display.power.domains;
|
||||
struct intel_display *display = &dev_priv->display;
|
||||
struct i915_power_domains *power_domains = &display->power.domains;
|
||||
struct i915_power_well *well;
|
||||
|
||||
gen9_set_dc_state(dev_priv, DC_STATE_DISABLE);
|
||||
@@ -1657,7 +1663,7 @@ static void icl_display_core_init(struct drm_i915_private *dev_priv,
|
||||
HOLD_PHY_PG1_LATCH | HOLD_PHY_CLKREQ_PG1_LATCH, 0);
|
||||
|
||||
/* 4. Enable CDCLK. */
|
||||
intel_cdclk_init_hw(dev_priv);
|
||||
intel_cdclk_init_hw(display);
|
||||
|
||||
if (DISPLAY_VER(dev_priv) >= 12)
|
||||
gen12_dbuf_slices_config(dev_priv);
|
||||
@@ -1704,7 +1710,8 @@ static void icl_display_core_init(struct drm_i915_private *dev_priv,
|
||||
|
||||
static void icl_display_core_uninit(struct drm_i915_private *dev_priv)
|
||||
{
|
||||
struct i915_power_domains *power_domains = &dev_priv->display.power.domains;
|
||||
struct intel_display *display = &dev_priv->display;
|
||||
struct i915_power_domains *power_domains = &display->power.domains;
|
||||
struct i915_power_well *well;
|
||||
|
||||
if (!HAS_DISPLAY(dev_priv))
|
||||
@@ -1719,7 +1726,7 @@ static void icl_display_core_uninit(struct drm_i915_private *dev_priv)
|
||||
gen9_dbuf_disable(dev_priv);
|
||||
|
||||
/* 3. Disable CD clock */
|
||||
intel_cdclk_uninit_hw(dev_priv);
|
||||
intel_cdclk_uninit_hw(display);
|
||||
|
||||
if (DISPLAY_VER(dev_priv) == 14)
|
||||
intel_de_rmw(dev_priv, DC_STATE_EN, 0,
|
||||
|
||||
@@ -967,7 +967,8 @@ static void gen9_assert_dbuf_enabled(struct drm_i915_private *dev_priv)
|
||||
|
||||
void gen9_disable_dc_states(struct drm_i915_private *dev_priv)
|
||||
{
|
||||
struct i915_power_domains *power_domains = &dev_priv->display.power.domains;
|
||||
struct intel_display *display = &dev_priv->display;
|
||||
struct i915_power_domains *power_domains = &display->power.domains;
|
||||
struct intel_cdclk_config cdclk_config = {};
|
||||
|
||||
if (power_domains->target_dc_state == DC_STATE_EN_DC3CO) {
|
||||
@@ -982,10 +983,10 @@ void gen9_disable_dc_states(struct drm_i915_private *dev_priv)
|
||||
|
||||
intel_dmc_wl_disable(&dev_priv->display);
|
||||
|
||||
intel_cdclk_get_cdclk(dev_priv, &cdclk_config);
|
||||
intel_cdclk_get_cdclk(display, &cdclk_config);
|
||||
/* Can't read out voltage_level so can't use intel_cdclk_changed() */
|
||||
drm_WARN_ON(&dev_priv->drm,
|
||||
intel_cdclk_clock_changed(&dev_priv->display.cdclk.hw,
|
||||
drm_WARN_ON(display->drm,
|
||||
intel_cdclk_clock_changed(&display->cdclk.hw,
|
||||
&cdclk_config));
|
||||
|
||||
gen9_assert_dbuf_enabled(dev_priv);
|
||||
|
||||
@@ -2973,6 +2973,7 @@ static void skl_pipe_wm_get_hw_state(struct intel_crtc *crtc,
|
||||
|
||||
static void skl_wm_get_hw_state(struct drm_i915_private *i915)
|
||||
{
|
||||
struct intel_display *display = &i915->display;
|
||||
struct intel_dbuf_state *dbuf_state =
|
||||
to_intel_dbuf_state(i915->display.dbuf.obj.state);
|
||||
struct intel_crtc *crtc;
|
||||
@@ -2980,7 +2981,7 @@ static void skl_wm_get_hw_state(struct drm_i915_private *i915)
|
||||
if (HAS_MBUS_JOINING(i915))
|
||||
dbuf_state->joined_mbus = intel_de_read(i915, MBUS_CTL) & MBUS_JOIN;
|
||||
|
||||
dbuf_state->mdclk_cdclk_ratio = intel_mdclk_cdclk_ratio(i915, &i915->display.cdclk.hw);
|
||||
dbuf_state->mdclk_cdclk_ratio = intel_mdclk_cdclk_ratio(display, &display->cdclk.hw);
|
||||
|
||||
for_each_intel_crtc(&i915->drm, crtc) {
|
||||
struct intel_crtc_state *crtc_state =
|
||||
|
||||
Reference in New Issue
Block a user