#include <drm/drm_atomic_helper.h>
#include <drm/drm_damage_helper.h>
#include <drm/drm_debugfs.h>
#include "i915_drv.h"
#include "i915_reg.h"
#include "intel_alpm.h"
#include "intel_atomic.h"
#include "intel_crtc.h"
#include "intel_cursor_regs.h"
#include "intel_ddi.h"
#include "intel_de.h"
#include "intel_display_types.h"
#include "intel_dp.h"
#include "intel_dp_aux.h"
#include "intel_frontbuffer.h"
#include "intel_hdmi.h"
#include "intel_psr.h"
#include "intel_psr_regs.h"
#include "intel_snps_phy.h"
#include "skl_universal_plane.h"
#define CAN_PSR(intel_dp) …
bool intel_encoder_can_psr(struct intel_encoder *encoder)
{ … }
static bool psr_global_enabled(struct intel_dp *intel_dp)
{ … }
static bool psr2_global_enabled(struct intel_dp *intel_dp)
{ … }
static bool psr2_su_region_et_global_enabled(struct intel_dp *intel_dp)
{ … }
static bool panel_replay_global_enabled(struct intel_dp *intel_dp)
{ … }
static u32 psr_irq_psr_error_bit_get(struct intel_dp *intel_dp)
{ … }
static u32 psr_irq_post_exit_bit_get(struct intel_dp *intel_dp)
{ … }
static u32 psr_irq_pre_entry_bit_get(struct intel_dp *intel_dp)
{ … }
static u32 psr_irq_mask_get(struct intel_dp *intel_dp)
{ … }
static i915_reg_t psr_ctl_reg(struct drm_i915_private *dev_priv,
enum transcoder cpu_transcoder)
{ … }
static i915_reg_t psr_debug_reg(struct drm_i915_private *dev_priv,
enum transcoder cpu_transcoder)
{ … }
static i915_reg_t psr_perf_cnt_reg(struct drm_i915_private *dev_priv,
enum transcoder cpu_transcoder)
{ … }
static i915_reg_t psr_status_reg(struct drm_i915_private *dev_priv,
enum transcoder cpu_transcoder)
{ … }
static i915_reg_t psr_imr_reg(struct drm_i915_private *dev_priv,
enum transcoder cpu_transcoder)
{ … }
static i915_reg_t psr_iir_reg(struct drm_i915_private *dev_priv,
enum transcoder cpu_transcoder)
{ … }
static i915_reg_t psr_aux_ctl_reg(struct drm_i915_private *dev_priv,
enum transcoder cpu_transcoder)
{ … }
static i915_reg_t psr_aux_data_reg(struct drm_i915_private *dev_priv,
enum transcoder cpu_transcoder, int i)
{ … }
static void psr_irq_control(struct intel_dp *intel_dp)
{ … }
static void psr_event_print(struct drm_i915_private *i915,
u32 val, bool sel_update_enabled)
{ … }
void intel_psr_irq_handler(struct intel_dp *intel_dp, u32 psr_iir)
{ … }
static u8 intel_dp_get_sink_sync_latency(struct intel_dp *intel_dp)
{ … }
static u8 intel_dp_get_su_capability(struct intel_dp *intel_dp)
{ … }
static unsigned int
intel_dp_get_su_x_granularity_offset(struct intel_dp *intel_dp)
{ … }
static unsigned int
intel_dp_get_su_y_granularity_offset(struct intel_dp *intel_dp)
{ … }
static void intel_dp_get_su_granularity(struct intel_dp *intel_dp)
{ … }
static void _panel_replay_init_dpcd(struct intel_dp *intel_dp)
{ … }
static void _psr_init_dpcd(struct intel_dp *intel_dp)
{ … }
void intel_psr_init_dpcd(struct intel_dp *intel_dp)
{ … }
static void hsw_psr_setup_aux(struct intel_dp *intel_dp)
{ … }
static bool psr2_su_region_et_valid(struct intel_dp *intel_dp, bool panel_replay)
{ … }
static void _panel_replay_enable_sink(struct intel_dp *intel_dp,
const struct intel_crtc_state *crtc_state)
{ … }
static void _psr_enable_sink(struct intel_dp *intel_dp,
const struct intel_crtc_state *crtc_state)
{ … }
static void intel_psr_enable_sink_alpm(struct intel_dp *intel_dp,
const struct intel_crtc_state *crtc_state)
{ … }
void intel_psr_enable_sink(struct intel_dp *intel_dp,
const struct intel_crtc_state *crtc_state)
{ … }
static u32 intel_psr1_get_tp_time(struct intel_dp *intel_dp)
{ … }
static u8 psr_compute_idle_frames(struct intel_dp *intel_dp)
{ … }
static void hsw_activate_psr1(struct intel_dp *intel_dp)
{ … }
static u32 intel_psr2_get_tp_time(struct intel_dp *intel_dp)
{ … }
static int psr2_block_count_lines(struct intel_dp *intel_dp)
{ … }
static int psr2_block_count(struct intel_dp *intel_dp)
{ … }
static u8 frames_before_su_entry(struct intel_dp *intel_dp)
{ … }
static void dg2_activate_panel_replay(struct intel_dp *intel_dp)
{ … }
static void hsw_activate_psr2(struct intel_dp *intel_dp)
{ … }
static bool
transcoder_has_psr2(struct drm_i915_private *dev_priv, enum transcoder cpu_transcoder)
{ … }
static u32 intel_get_frame_time_us(const struct intel_crtc_state *crtc_state)
{ … }
static void psr2_program_idle_frames(struct intel_dp *intel_dp,
u32 idle_frames)
{ … }
static void tgl_psr2_enable_dc3co(struct intel_dp *intel_dp)
{ … }
static void tgl_psr2_disable_dc3co(struct intel_dp *intel_dp)
{ … }
static void tgl_dc3co_disable_work(struct work_struct *work)
{ … }
static void tgl_disallow_dc3co_on_psr2_exit(struct intel_dp *intel_dp)
{ … }
static bool
dc3co_is_pipe_port_compatible(struct intel_dp *intel_dp,
struct intel_crtc_state *crtc_state)
{ … }
static void
tgl_dc3co_exitline_compute_config(struct intel_dp *intel_dp,
struct intel_crtc_state *crtc_state)
{ … }
static bool intel_psr2_sel_fetch_config_valid(struct intel_dp *intel_dp,
struct intel_crtc_state *crtc_state)
{ … }
static bool psr2_granularity_check(struct intel_dp *intel_dp,
struct intel_crtc_state *crtc_state)
{ … }
static bool _compute_psr2_sdp_prior_scanline_indication(struct intel_dp *intel_dp,
struct intel_crtc_state *crtc_state)
{ … }
static int intel_psr_entry_setup_frames(struct intel_dp *intel_dp,
const struct drm_display_mode *adjusted_mode)
{ … }
static bool wake_lines_fit_into_vblank(struct intel_dp *intel_dp,
const struct intel_crtc_state *crtc_state,
bool aux_less)
{ … }
static bool alpm_config_valid(struct intel_dp *intel_dp,
const struct intel_crtc_state *crtc_state,
bool aux_less)
{ … }
static bool intel_psr2_config_valid(struct intel_dp *intel_dp,
struct intel_crtc_state *crtc_state)
{ … }
static bool intel_sel_update_config_valid(struct intel_dp *intel_dp,
struct intel_crtc_state *crtc_state)
{ … }
static bool _psr_compute_config(struct intel_dp *intel_dp,
struct intel_crtc_state *crtc_state)
{ … }
static bool
_panel_replay_compute_config(struct intel_dp *intel_dp,
const struct intel_crtc_state *crtc_state,
const struct drm_connector_state *conn_state)
{ … }
void intel_psr_compute_config(struct intel_dp *intel_dp,
struct intel_crtc_state *crtc_state,
struct drm_connector_state *conn_state)
{ … }
void intel_psr_get_config(struct intel_encoder *encoder,
struct intel_crtc_state *pipe_config)
{ … }
static void intel_psr_activate(struct intel_dp *intel_dp)
{ … }
static u32 wa_16013835468_bit_get(struct intel_dp *intel_dp)
{ … }
static void wm_optimization_wa(struct intel_dp *intel_dp,
const struct intel_crtc_state *crtc_state)
{ … }
static void intel_psr_enable_source(struct intel_dp *intel_dp,
const struct intel_crtc_state *crtc_state)
{ … }
static bool psr_interrupt_error_check(struct intel_dp *intel_dp)
{ … }
static void intel_psr_enable_locked(struct intel_dp *intel_dp,
const struct intel_crtc_state *crtc_state)
{ … }
static void intel_psr_exit(struct intel_dp *intel_dp)
{ … }
static void intel_psr_wait_exit_locked(struct intel_dp *intel_dp)
{ … }
static void intel_psr_disable_locked(struct intel_dp *intel_dp)
{ … }
void intel_psr_disable(struct intel_dp *intel_dp,
const struct intel_crtc_state *old_crtc_state)
{ … }
void intel_psr_pause(struct intel_dp *intel_dp)
{ … }
void intel_psr_resume(struct intel_dp *intel_dp)
{ … }
static u32 man_trk_ctl_enable_bit_get(struct drm_i915_private *dev_priv)
{ … }
static u32 man_trk_ctl_single_full_frame_bit_get(struct drm_i915_private *dev_priv)
{ … }
static u32 man_trk_ctl_partial_frame_bit_get(struct drm_i915_private *dev_priv)
{ … }
static u32 man_trk_ctl_continuos_full_frame(struct drm_i915_private *dev_priv)
{ … }
static void psr_force_hw_tracking_exit(struct intel_dp *intel_dp)
{ … }
void intel_psr2_program_trans_man_trk_ctl(const struct intel_crtc_state *crtc_state)
{ … }
static void psr2_man_trk_ctl_calc(struct intel_crtc_state *crtc_state,
bool full_update)
{ … }
static u32 psr2_pipe_srcsz_early_tpt_calc(struct intel_crtc_state *crtc_state,
bool full_update)
{ … }
static void clip_area_update(struct drm_rect *overlap_damage_area,
struct drm_rect *damage_area,
struct drm_rect *pipe_src)
{ … }
static void intel_psr2_sel_fetch_pipe_alignment(struct intel_crtc_state *crtc_state)
{ … }
static void
intel_psr2_sel_fetch_et_alignment(struct intel_atomic_state *state,
struct intel_crtc *crtc,
bool *cursor_in_su_area)
{ … }
static bool psr2_sel_fetch_plane_state_supported(const struct intel_plane_state *plane_state)
{ … }
static bool psr2_sel_fetch_pipe_state_supported(const struct intel_crtc_state *crtc_state)
{ … }
int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
struct intel_crtc *crtc)
{ … }
void intel_psr_pre_plane_update(struct intel_atomic_state *state,
struct intel_crtc *crtc)
{ … }
void intel_psr_post_plane_update(struct intel_atomic_state *state,
struct intel_crtc *crtc)
{ … }
static int _psr2_ready_for_pipe_update_locked(struct intel_dp *intel_dp)
{ … }
static int _psr1_ready_for_pipe_update_locked(struct intel_dp *intel_dp)
{ … }
static int _panel_replay_ready_for_pipe_update_locked(struct intel_dp *intel_dp)
{ … }
void intel_psr_wait_for_idle_locked(const struct intel_crtc_state *new_crtc_state)
{ … }
static bool __psr_wait_for_idle_locked(struct intel_dp *intel_dp)
{ … }
static int intel_psr_fastset_force(struct drm_i915_private *dev_priv)
{ … }
int intel_psr_debug_set(struct intel_dp *intel_dp, u64 val)
{ … }
static void intel_psr_handle_irq(struct intel_dp *intel_dp)
{ … }
static void intel_psr_work(struct work_struct *work)
{ … }
static void _psr_invalidate_handle(struct intel_dp *intel_dp)
{ … }
void intel_psr_invalidate(struct drm_i915_private *dev_priv,
unsigned frontbuffer_bits, enum fb_op_origin origin)
{ … }
static void
tgl_dc3co_flush_locked(struct intel_dp *intel_dp, unsigned int frontbuffer_bits,
enum fb_op_origin origin)
{ … }
static void _psr_flush_handle(struct intel_dp *intel_dp)
{ … }
void intel_psr_flush(struct drm_i915_private *dev_priv,
unsigned frontbuffer_bits, enum fb_op_origin origin)
{ … }
void intel_psr_init(struct intel_dp *intel_dp)
{ … }
static int psr_get_status_and_error_status(struct intel_dp *intel_dp,
u8 *status, u8 *error_status)
{ … }
static void psr_alpm_check(struct intel_dp *intel_dp)
{ … }
static void psr_capability_changed_check(struct intel_dp *intel_dp)
{ … }
void intel_psr_short_pulse(struct intel_dp *intel_dp)
{ … }
bool intel_psr_enabled(struct intel_dp *intel_dp)
{ … }
void intel_psr_lock(const struct intel_crtc_state *crtc_state)
{ … }
void intel_psr_unlock(const struct intel_crtc_state *crtc_state)
{ … }
static void
psr_source_status(struct intel_dp *intel_dp, struct seq_file *m)
{ … }
static void intel_psr_sink_capability(struct intel_dp *intel_dp,
struct seq_file *m)
{ … }
static void intel_psr_print_mode(struct intel_dp *intel_dp,
struct seq_file *m)
{ … }
static int intel_psr_status(struct seq_file *m, struct intel_dp *intel_dp)
{ … }
static int i915_edp_psr_status_show(struct seq_file *m, void *data)
{ … }
DEFINE_SHOW_ATTRIBUTE(…);
static int
i915_edp_psr_debug_set(void *data, u64 val)
{ … }
static int
i915_edp_psr_debug_get(void *data, u64 *val)
{ … }
DEFINE_SIMPLE_ATTRIBUTE(…);
void intel_psr_debugfs_register(struct drm_i915_private *i915)
{ … }
static const char *psr_mode_str(struct intel_dp *intel_dp)
{ … }
static int i915_psr_sink_status_show(struct seq_file *m, void *data)
{ … }
DEFINE_SHOW_ATTRIBUTE(…);
static int i915_psr_status_show(struct seq_file *m, void *data)
{ … }
DEFINE_SHOW_ATTRIBUTE(…);
void intel_psr_connector_debugfs_add(struct intel_connector *connector)
{ … }