aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_drv.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/i915/intel_drv.h')
-rw-r--r--drivers/gpu/drm/i915/intel_drv.h242
1 files changed, 146 insertions, 96 deletions
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index a28b4aac1e02..089a42577ea3 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -242,14 +242,6 @@ struct intel_connector {
242 * and active (i.e. dpms ON state). */ 242 * and active (i.e. dpms ON state). */
243 bool (*get_hw_state)(struct intel_connector *); 243 bool (*get_hw_state)(struct intel_connector *);
244 244
245 /*
246 * Removes all interfaces through which the connector is accessible
247 * - like sysfs, debugfs entries -, so that no new operations can be
248 * started on the connector. Also makes sure all currently pending
249 * operations finish before returing.
250 */
251 void (*unregister)(struct intel_connector *);
252
253 /* Panel info for eDP and LVDS */ 245 /* Panel info for eDP and LVDS */
254 struct intel_panel panel; 246 struct intel_panel panel;
255 247
@@ -266,7 +258,7 @@ struct intel_connector {
266 struct intel_dp *mst_port; 258 struct intel_dp *mst_port;
267}; 259};
268 260
269typedef struct dpll { 261struct dpll {
270 /* given values */ 262 /* given values */
271 int n; 263 int n;
272 int m1, m2; 264 int m1, m2;
@@ -276,7 +268,7 @@ typedef struct dpll {
276 int vco; 268 int vco;
277 int m; 269 int m;
278 int p; 270 int p;
279} intel_clock_t; 271};
280 272
281struct intel_atomic_state { 273struct intel_atomic_state {
282 struct drm_atomic_state base; 274 struct drm_atomic_state base;
@@ -291,17 +283,32 @@ struct intel_atomic_state {
291 283
292 bool dpll_set, modeset; 284 bool dpll_set, modeset;
293 285
286 /*
287 * Does this transaction change the pipes that are active? This mask
288 * tracks which CRTC's have changed their active state at the end of
289 * the transaction (not counting the temporary disable during modesets).
290 * This mask should only be non-zero when intel_state->modeset is true,
291 * but the converse is not necessarily true; simply changing a mode may
292 * not flip the final active status of any CRTC's
293 */
294 unsigned int active_pipe_changes;
295
294 unsigned int active_crtcs; 296 unsigned int active_crtcs;
295 unsigned int min_pixclk[I915_MAX_PIPES]; 297 unsigned int min_pixclk[I915_MAX_PIPES];
296 298
299 /* SKL/KBL Only */
300 unsigned int cdclk_pll_vco;
301
297 struct intel_shared_dpll_config shared_dpll[I915_NUM_PLLS]; 302 struct intel_shared_dpll_config shared_dpll[I915_NUM_PLLS];
298 struct intel_wm_config wm_config;
299 303
300 /* 304 /*
301 * Current watermarks can't be trusted during hardware readout, so 305 * Current watermarks can't be trusted during hardware readout, so
302 * don't bother calculating intermediate watermarks. 306 * don't bother calculating intermediate watermarks.
303 */ 307 */
304 bool skip_intermediate_wm; 308 bool skip_intermediate_wm;
309
310 /* Gen9+ only */
311 struct skl_wm_values wm_results;
305}; 312};
306 313
307struct intel_plane_state { 314struct intel_plane_state {
@@ -405,6 +412,48 @@ struct skl_pipe_wm {
405 uint32_t linetime; 412 uint32_t linetime;
406}; 413};
407 414
415struct intel_crtc_wm_state {
416 union {
417 struct {
418 /*
419 * Intermediate watermarks; these can be
420 * programmed immediately since they satisfy
421 * both the current configuration we're
422 * switching away from and the new
423 * configuration we're switching to.
424 */
425 struct intel_pipe_wm intermediate;
426
427 /*
428 * Optimal watermarks, programmed post-vblank
429 * when this state is committed.
430 */
431 struct intel_pipe_wm optimal;
432 } ilk;
433
434 struct {
435 /* gen9+ only needs 1-step wm programming */
436 struct skl_pipe_wm optimal;
437
438 /* cached plane data rate */
439 unsigned plane_data_rate[I915_MAX_PLANES];
440 unsigned plane_y_data_rate[I915_MAX_PLANES];
441
442 /* minimum block allocation */
443 uint16_t minimum_blocks[I915_MAX_PLANES];
444 uint16_t minimum_y_blocks[I915_MAX_PLANES];
445 } skl;
446 };
447
448 /*
449 * Platforms with two-step watermark programming will need to
450 * update watermark programming post-vblank to switch from the
451 * safe intermediate watermarks to the optimal final
452 * watermarks.
453 */
454 bool need_postvbl_update;
455};
456
408struct intel_crtc_state { 457struct intel_crtc_state {
409 struct drm_crtc_state base; 458 struct drm_crtc_state base;
410 459
@@ -522,6 +571,12 @@ struct intel_crtc_state {
522 571
523 uint8_t lane_count; 572 uint8_t lane_count;
524 573
574 /*
575 * Used by platforms having DP/HDMI PHY with programmable lane
576 * latency optimization.
577 */
578 uint8_t lane_lat_optim_mask;
579
525 /* Panel fitter controls for gen2-gen4 + VLV */ 580 /* Panel fitter controls for gen2-gen4 + VLV */
526 struct { 581 struct {
527 u32 control; 582 u32 control;
@@ -558,32 +613,7 @@ struct intel_crtc_state {
558 /* IVB sprite scaling w/a (WaCxSRDisabledForSpriteScaling:ivb) */ 613 /* IVB sprite scaling w/a (WaCxSRDisabledForSpriteScaling:ivb) */
559 bool disable_lp_wm; 614 bool disable_lp_wm;
560 615
561 struct { 616 struct intel_crtc_wm_state wm;
562 /*
563 * Optimal watermarks, programmed post-vblank when this state
564 * is committed.
565 */
566 union {
567 struct intel_pipe_wm ilk;
568 struct skl_pipe_wm skl;
569 } optimal;
570
571 /*
572 * Intermediate watermarks; these can be programmed immediately
573 * since they satisfy both the current configuration we're
574 * switching away from and the new configuration we're switching
575 * to.
576 */
577 struct intel_pipe_wm intermediate;
578
579 /*
580 * Platforms with two-step watermark programming will need to
581 * update watermark programming post-vblank to switch from the
582 * safe intermediate watermarks to the optimal final
583 * watermarks.
584 */
585 bool need_postvbl_update;
586 } wm;
587 617
588 /* Gamma mode programmed on the pipe */ 618 /* Gamma mode programmed on the pipe */
589 uint32_t gamma_mode; 619 uint32_t gamma_mode;
@@ -598,14 +628,6 @@ struct vlv_wm_state {
598 bool cxsr; 628 bool cxsr;
599}; 629};
600 630
601struct intel_mmio_flip {
602 struct work_struct work;
603 struct drm_i915_private *i915;
604 struct drm_i915_gem_request *req;
605 struct intel_crtc *crtc;
606 unsigned int rotation;
607};
608
609struct intel_crtc { 631struct intel_crtc {
610 struct drm_crtc base; 632 struct drm_crtc base;
611 enum pipe pipe; 633 enum pipe pipe;
@@ -620,7 +642,7 @@ struct intel_crtc {
620 unsigned long enabled_power_domains; 642 unsigned long enabled_power_domains;
621 bool lowfreq_avail; 643 bool lowfreq_avail;
622 struct intel_overlay *overlay; 644 struct intel_overlay *overlay;
623 struct intel_unpin_work *unpin_work; 645 struct intel_flip_work *flip_work;
624 646
625 atomic_t unpin_work_count; 647 atomic_t unpin_work_count;
626 648
@@ -815,6 +837,7 @@ struct intel_dp {
815 uint8_t dpcd[DP_RECEIVER_CAP_SIZE]; 837 uint8_t dpcd[DP_RECEIVER_CAP_SIZE];
816 uint8_t psr_dpcd[EDP_PSR_RECEIVER_CAP_SIZE]; 838 uint8_t psr_dpcd[EDP_PSR_RECEIVER_CAP_SIZE];
817 uint8_t downstream_ports[DP_MAX_DOWNSTREAM_PORTS]; 839 uint8_t downstream_ports[DP_MAX_DOWNSTREAM_PORTS];
840 uint8_t edp_dpcd[EDP_DISPLAY_CTL_CAP_SIZE];
818 /* sink rates as reported by DP_SUPPORTED_LINK_RATES */ 841 /* sink rates as reported by DP_SUPPORTED_LINK_RATES */
819 uint8_t num_sink_rates; 842 uint8_t num_sink_rates;
820 int sink_rates[DP_MAX_SUPPORTED_RATES]; 843 int sink_rates[DP_MAX_SUPPORTED_RATES];
@@ -863,8 +886,6 @@ struct intel_dp {
863 /* This is called before a link training is starterd */ 886 /* This is called before a link training is starterd */
864 void (*prepare_link_retrain)(struct intel_dp *intel_dp); 887 void (*prepare_link_retrain)(struct intel_dp *intel_dp);
865 888
866 bool train_set_valid;
867
868 /* Displayport compliance testing */ 889 /* Displayport compliance testing */
869 unsigned long compliance_test_type; 890 unsigned long compliance_test_type;
870 unsigned long compliance_test_data; 891 unsigned long compliance_test_data;
@@ -947,22 +968,21 @@ intel_get_crtc_for_plane(struct drm_device *dev, int plane)
947 return dev_priv->plane_to_crtc_mapping[plane]; 968 return dev_priv->plane_to_crtc_mapping[plane];
948} 969}
949 970
950struct intel_unpin_work { 971struct intel_flip_work {
951 struct work_struct work; 972 struct work_struct unpin_work;
973 struct work_struct mmio_work;
974
952 struct drm_crtc *crtc; 975 struct drm_crtc *crtc;
953 struct drm_framebuffer *old_fb; 976 struct drm_framebuffer *old_fb;
954 struct drm_i915_gem_object *pending_flip_obj; 977 struct drm_i915_gem_object *pending_flip_obj;
955 struct drm_pending_vblank_event *event; 978 struct drm_pending_vblank_event *event;
956 atomic_t pending; 979 atomic_t pending;
957#define INTEL_FLIP_INACTIVE 0
958#define INTEL_FLIP_PENDING 1
959#define INTEL_FLIP_COMPLETE 2
960 u32 flip_count; 980 u32 flip_count;
961 u32 gtt_offset; 981 u32 gtt_offset;
962 struct drm_i915_gem_request *flip_queued_req; 982 struct drm_i915_gem_request *flip_queued_req;
963 u32 flip_queued_vblank; 983 u32 flip_queued_vblank;
964 u32 flip_ready_vblank; 984 u32 flip_ready_vblank;
965 bool enable_stall_check; 985 unsigned int rotation;
966}; 986};
967 987
968struct intel_load_detect_pipe { 988struct intel_load_detect_pipe {
@@ -1031,9 +1051,9 @@ void gen5_enable_gt_irq(struct drm_i915_private *dev_priv, uint32_t mask);
1031void gen5_disable_gt_irq(struct drm_i915_private *dev_priv, uint32_t mask); 1051void gen5_disable_gt_irq(struct drm_i915_private *dev_priv, uint32_t mask);
1032void gen6_enable_pm_irq(struct drm_i915_private *dev_priv, uint32_t mask); 1052void gen6_enable_pm_irq(struct drm_i915_private *dev_priv, uint32_t mask);
1033void gen6_disable_pm_irq(struct drm_i915_private *dev_priv, uint32_t mask); 1053void gen6_disable_pm_irq(struct drm_i915_private *dev_priv, uint32_t mask);
1034void gen6_reset_rps_interrupts(struct drm_device *dev); 1054void gen6_reset_rps_interrupts(struct drm_i915_private *dev_priv);
1035void gen6_enable_rps_interrupts(struct drm_device *dev); 1055void gen6_enable_rps_interrupts(struct drm_i915_private *dev_priv);
1036void gen6_disable_rps_interrupts(struct drm_device *dev); 1056void gen6_disable_rps_interrupts(struct drm_i915_private *dev_priv);
1037u32 gen6_sanitize_rps_pm_mask(struct drm_i915_private *dev_priv, u32 mask); 1057u32 gen6_sanitize_rps_pm_mask(struct drm_i915_private *dev_priv, u32 mask);
1038void intel_runtime_pm_disable_interrupts(struct drm_i915_private *dev_priv); 1058void intel_runtime_pm_disable_interrupts(struct drm_i915_private *dev_priv);
1039void intel_runtime_pm_enable_interrupts(struct drm_i915_private *dev_priv); 1059void intel_runtime_pm_enable_interrupts(struct drm_i915_private *dev_priv);
@@ -1112,14 +1132,16 @@ void i915_audio_component_init(struct drm_i915_private *dev_priv);
1112void i915_audio_component_cleanup(struct drm_i915_private *dev_priv); 1132void i915_audio_component_cleanup(struct drm_i915_private *dev_priv);
1113 1133
1114/* intel_display.c */ 1134/* intel_display.c */
1135void skl_set_preferred_cdclk_vco(struct drm_i915_private *dev_priv, int vco);
1136void intel_update_rawclk(struct drm_i915_private *dev_priv);
1115int vlv_get_cck_clock(struct drm_i915_private *dev_priv, 1137int vlv_get_cck_clock(struct drm_i915_private *dev_priv,
1116 const char *name, u32 reg, int ref_freq); 1138 const char *name, u32 reg, int ref_freq);
1117extern const struct drm_plane_funcs intel_plane_funcs; 1139extern const struct drm_plane_funcs intel_plane_funcs;
1118void intel_init_display_hooks(struct drm_i915_private *dev_priv); 1140void intel_init_display_hooks(struct drm_i915_private *dev_priv);
1119unsigned int intel_rotation_info_size(const struct intel_rotation_info *rot_info); 1141unsigned int intel_rotation_info_size(const struct intel_rotation_info *rot_info);
1120bool intel_has_pending_fb_unpin(struct drm_device *dev); 1142bool intel_has_pending_fb_unpin(struct drm_device *dev);
1121void intel_mark_busy(struct drm_device *dev); 1143void intel_mark_busy(struct drm_i915_private *dev_priv);
1122void intel_mark_idle(struct drm_device *dev); 1144void intel_mark_idle(struct drm_i915_private *dev_priv);
1123void intel_crtc_restore_mode(struct drm_crtc *crtc); 1145void intel_crtc_restore_mode(struct drm_crtc *crtc);
1124int intel_display_suspend(struct drm_device *dev); 1146int intel_display_suspend(struct drm_device *dev);
1125void intel_encoder_destroy(struct drm_encoder *encoder); 1147void intel_encoder_destroy(struct drm_encoder *encoder);
@@ -1128,7 +1150,6 @@ struct intel_connector *intel_connector_alloc(void);
1128bool intel_connector_get_hw_state(struct intel_connector *connector); 1150bool intel_connector_get_hw_state(struct intel_connector *connector);
1129void intel_connector_attach_encoder(struct intel_connector *connector, 1151void intel_connector_attach_encoder(struct intel_connector *connector,
1130 struct intel_encoder *encoder); 1152 struct intel_encoder *encoder);
1131struct drm_encoder *intel_best_encoder(struct drm_connector *connector);
1132struct drm_display_mode *intel_crtc_mode_get(struct drm_device *dev, 1153struct drm_display_mode *intel_crtc_mode_get(struct drm_device *dev,
1133 struct drm_crtc *crtc); 1154 struct drm_crtc *crtc);
1134enum pipe intel_get_pipe_from_connector(struct intel_connector *connector); 1155enum pipe intel_get_pipe_from_connector(struct intel_connector *connector);
@@ -1151,6 +1172,9 @@ intel_wait_for_vblank_if_active(struct drm_device *dev, int pipe)
1151 if (crtc->active) 1172 if (crtc->active)
1152 intel_wait_for_vblank(dev, pipe); 1173 intel_wait_for_vblank(dev, pipe);
1153} 1174}
1175
1176u32 intel_crtc_get_vblank_counter(struct intel_crtc *crtc);
1177
1154int ironlake_get_lanes_required(int target_clock, int link_bw, int bpp); 1178int ironlake_get_lanes_required(int target_clock, int link_bw, int bpp);
1155void vlv_wait_port_ready(struct drm_i915_private *dev_priv, 1179void vlv_wait_port_ready(struct drm_i915_private *dev_priv,
1156 struct intel_digital_port *dport, 1180 struct intel_digital_port *dport,
@@ -1164,14 +1188,14 @@ void intel_release_load_detect_pipe(struct drm_connector *connector,
1164 struct drm_modeset_acquire_ctx *ctx); 1188 struct drm_modeset_acquire_ctx *ctx);
1165int intel_pin_and_fence_fb_obj(struct drm_framebuffer *fb, 1189int intel_pin_and_fence_fb_obj(struct drm_framebuffer *fb,
1166 unsigned int rotation); 1190 unsigned int rotation);
1191void intel_unpin_fb_obj(struct drm_framebuffer *fb, unsigned int rotation);
1167struct drm_framebuffer * 1192struct drm_framebuffer *
1168__intel_framebuffer_create(struct drm_device *dev, 1193__intel_framebuffer_create(struct drm_device *dev,
1169 struct drm_mode_fb_cmd2 *mode_cmd, 1194 struct drm_mode_fb_cmd2 *mode_cmd,
1170 struct drm_i915_gem_object *obj); 1195 struct drm_i915_gem_object *obj);
1171void intel_prepare_page_flip(struct drm_device *dev, int plane); 1196void intel_finish_page_flip_cs(struct drm_i915_private *dev_priv, int pipe);
1172void intel_finish_page_flip(struct drm_device *dev, int pipe); 1197void intel_finish_page_flip_mmio(struct drm_i915_private *dev_priv, int pipe);
1173void intel_finish_page_flip_plane(struct drm_device *dev, int plane); 1198void intel_check_page_flip(struct drm_i915_private *dev_priv, int pipe);
1174void intel_check_page_flip(struct drm_device *dev, int pipe);
1175int intel_prepare_plane_fb(struct drm_plane *plane, 1199int intel_prepare_plane_fb(struct drm_plane *plane,
1176 const struct drm_plane_state *new_state); 1200 const struct drm_plane_state *new_state);
1177void intel_cleanup_plane_fb(struct drm_plane *plane, 1201void intel_cleanup_plane_fb(struct drm_plane *plane,
@@ -1228,23 +1252,25 @@ u32 intel_compute_tile_offset(int *x, int *y,
1228 const struct drm_framebuffer *fb, int plane, 1252 const struct drm_framebuffer *fb, int plane,
1229 unsigned int pitch, 1253 unsigned int pitch,
1230 unsigned int rotation); 1254 unsigned int rotation);
1231void intel_prepare_reset(struct drm_device *dev); 1255void intel_prepare_reset(struct drm_i915_private *dev_priv);
1232void intel_finish_reset(struct drm_device *dev); 1256void intel_finish_reset(struct drm_i915_private *dev_priv);
1233void hsw_enable_pc8(struct drm_i915_private *dev_priv); 1257void hsw_enable_pc8(struct drm_i915_private *dev_priv);
1234void hsw_disable_pc8(struct drm_i915_private *dev_priv); 1258void hsw_disable_pc8(struct drm_i915_private *dev_priv);
1235void broxton_init_cdclk(struct drm_i915_private *dev_priv); 1259void bxt_init_cdclk(struct drm_i915_private *dev_priv);
1236void broxton_uninit_cdclk(struct drm_i915_private *dev_priv); 1260void bxt_uninit_cdclk(struct drm_i915_private *dev_priv);
1237bool broxton_cdclk_verify_state(struct drm_i915_private *dev_priv); 1261void bxt_ddi_phy_init(struct drm_i915_private *dev_priv, enum dpio_phy phy);
1238void broxton_ddi_phy_init(struct drm_i915_private *dev_priv); 1262void bxt_ddi_phy_uninit(struct drm_i915_private *dev_priv, enum dpio_phy phy);
1239void broxton_ddi_phy_uninit(struct drm_i915_private *dev_priv); 1263bool bxt_ddi_phy_is_enabled(struct drm_i915_private *dev_priv,
1240void broxton_ddi_phy_verify_state(struct drm_i915_private *dev_priv); 1264 enum dpio_phy phy);
1265bool bxt_ddi_phy_verify_state(struct drm_i915_private *dev_priv,
1266 enum dpio_phy phy);
1241void gen9_sanitize_dc_state(struct drm_i915_private *dev_priv); 1267void gen9_sanitize_dc_state(struct drm_i915_private *dev_priv);
1242void bxt_enable_dc9(struct drm_i915_private *dev_priv); 1268void bxt_enable_dc9(struct drm_i915_private *dev_priv);
1243void bxt_disable_dc9(struct drm_i915_private *dev_priv); 1269void bxt_disable_dc9(struct drm_i915_private *dev_priv);
1244void gen9_enable_dc5(struct drm_i915_private *dev_priv); 1270void gen9_enable_dc5(struct drm_i915_private *dev_priv);
1245void skl_init_cdclk(struct drm_i915_private *dev_priv); 1271void skl_init_cdclk(struct drm_i915_private *dev_priv);
1246int skl_sanitize_cdclk(struct drm_i915_private *dev_priv);
1247void skl_uninit_cdclk(struct drm_i915_private *dev_priv); 1272void skl_uninit_cdclk(struct drm_i915_private *dev_priv);
1273unsigned int skl_cdclk_get_vco(unsigned int freq);
1248void skl_enable_dc6(struct drm_i915_private *dev_priv); 1274void skl_enable_dc6(struct drm_i915_private *dev_priv);
1249void skl_disable_dc6(struct drm_i915_private *dev_priv); 1275void skl_disable_dc6(struct drm_i915_private *dev_priv);
1250void intel_dp_get_m_n(struct intel_crtc *crtc, 1276void intel_dp_get_m_n(struct intel_crtc *crtc,
@@ -1252,8 +1278,8 @@ void intel_dp_get_m_n(struct intel_crtc *crtc,
1252void intel_dp_set_m_n(struct intel_crtc *crtc, enum link_m_n_set m_n); 1278void intel_dp_set_m_n(struct intel_crtc *crtc, enum link_m_n_set m_n);
1253int intel_dotclock_calculate(int link_freq, const struct intel_link_m_n *m_n); 1279int intel_dotclock_calculate(int link_freq, const struct intel_link_m_n *m_n);
1254bool bxt_find_best_dpll(struct intel_crtc_state *crtc_state, int target_clock, 1280bool bxt_find_best_dpll(struct intel_crtc_state *crtc_state, int target_clock,
1255 intel_clock_t *best_clock); 1281 struct dpll *best_clock);
1256int chv_calc_dpll_params(int refclk, intel_clock_t *pll_clock); 1282int chv_calc_dpll_params(int refclk, struct dpll *pll_clock);
1257 1283
1258bool intel_crtc_active(struct drm_crtc *crtc); 1284bool intel_crtc_active(struct drm_crtc *crtc);
1259void hsw_enable_ips(struct intel_crtc *crtc); 1285void hsw_enable_ips(struct intel_crtc *crtc);
@@ -1284,7 +1310,7 @@ void intel_csr_ucode_suspend(struct drm_i915_private *);
1284void intel_csr_ucode_resume(struct drm_i915_private *); 1310void intel_csr_ucode_resume(struct drm_i915_private *);
1285 1311
1286/* intel_dp.c */ 1312/* intel_dp.c */
1287void intel_dp_init(struct drm_device *dev, i915_reg_t output_reg, enum port port); 1313bool intel_dp_init(struct drm_device *dev, i915_reg_t output_reg, enum port port);
1288bool intel_dp_init_connector(struct intel_digital_port *intel_dig_port, 1314bool intel_dp_init_connector(struct intel_digital_port *intel_dig_port,
1289 struct intel_connector *intel_connector); 1315 struct intel_connector *intel_connector);
1290void intel_dp_set_link_params(struct intel_dp *intel_dp, 1316void intel_dp_set_link_params(struct intel_dp *intel_dp,
@@ -1339,12 +1365,22 @@ bool intel_dp_source_supports_hbr2(struct intel_dp *intel_dp);
1339bool 1365bool
1340intel_dp_get_link_status(struct intel_dp *intel_dp, uint8_t link_status[DP_LINK_STATUS_SIZE]); 1366intel_dp_get_link_status(struct intel_dp *intel_dp, uint8_t link_status[DP_LINK_STATUS_SIZE]);
1341 1367
1368static inline unsigned int intel_dp_unused_lane_mask(int lane_count)
1369{
1370 return ~((1 << lane_count) - 1) & 0xf;
1371}
1372
1373/* intel_dp_aux_backlight.c */
1374int intel_dp_aux_init_backlight_funcs(struct intel_connector *intel_connector);
1375
1342/* intel_dp_mst.c */ 1376/* intel_dp_mst.c */
1343int intel_dp_mst_encoder_init(struct intel_digital_port *intel_dig_port, int conn_id); 1377int intel_dp_mst_encoder_init(struct intel_digital_port *intel_dig_port, int conn_id);
1344void intel_dp_mst_encoder_cleanup(struct intel_digital_port *intel_dig_port); 1378void intel_dp_mst_encoder_cleanup(struct intel_digital_port *intel_dig_port);
1345/* intel_dsi.c */ 1379/* intel_dsi.c */
1346void intel_dsi_init(struct drm_device *dev); 1380void intel_dsi_init(struct drm_device *dev);
1347 1381
1382/* intel_dsi_dcs_backlight.c */
1383int intel_dsi_dcs_init_backlight_funcs(struct intel_connector *intel_connector);
1348 1384
1349/* intel_dvo.c */ 1385/* intel_dvo.c */
1350void intel_dvo_init(struct drm_device *dev); 1386void intel_dvo_init(struct drm_device *dev);
@@ -1385,11 +1421,15 @@ static inline void intel_fbdev_restore_mode(struct drm_device *dev)
1385void intel_fbc_choose_crtc(struct drm_i915_private *dev_priv, 1421void intel_fbc_choose_crtc(struct drm_i915_private *dev_priv,
1386 struct drm_atomic_state *state); 1422 struct drm_atomic_state *state);
1387bool intel_fbc_is_active(struct drm_i915_private *dev_priv); 1423bool intel_fbc_is_active(struct drm_i915_private *dev_priv);
1388void intel_fbc_pre_update(struct intel_crtc *crtc); 1424void intel_fbc_pre_update(struct intel_crtc *crtc,
1425 struct intel_crtc_state *crtc_state,
1426 struct intel_plane_state *plane_state);
1389void intel_fbc_post_update(struct intel_crtc *crtc); 1427void intel_fbc_post_update(struct intel_crtc *crtc);
1390void intel_fbc_init(struct drm_i915_private *dev_priv); 1428void intel_fbc_init(struct drm_i915_private *dev_priv);
1391void intel_fbc_init_pipe_state(struct drm_i915_private *dev_priv); 1429void intel_fbc_init_pipe_state(struct drm_i915_private *dev_priv);
1392void intel_fbc_enable(struct intel_crtc *crtc); 1430void intel_fbc_enable(struct intel_crtc *crtc,
1431 struct intel_crtc_state *crtc_state,
1432 struct intel_plane_state *plane_state);
1393void intel_fbc_disable(struct intel_crtc *crtc); 1433void intel_fbc_disable(struct intel_crtc *crtc);
1394void intel_fbc_global_disable(struct drm_i915_private *dev_priv); 1434void intel_fbc_global_disable(struct drm_i915_private *dev_priv);
1395void intel_fbc_invalidate(struct drm_i915_private *dev_priv, 1435void intel_fbc_invalidate(struct drm_i915_private *dev_priv,
@@ -1424,13 +1464,13 @@ void intel_attach_aspect_ratio_property(struct drm_connector *connector);
1424 1464
1425 1465
1426/* intel_overlay.c */ 1466/* intel_overlay.c */
1427void intel_setup_overlay(struct drm_device *dev); 1467void intel_setup_overlay(struct drm_i915_private *dev_priv);
1428void intel_cleanup_overlay(struct drm_device *dev); 1468void intel_cleanup_overlay(struct drm_i915_private *dev_priv);
1429int intel_overlay_switch_off(struct intel_overlay *overlay); 1469int intel_overlay_switch_off(struct intel_overlay *overlay);
1430int intel_overlay_put_image(struct drm_device *dev, void *data, 1470int intel_overlay_put_image_ioctl(struct drm_device *dev, void *data,
1431 struct drm_file *file_priv); 1471 struct drm_file *file_priv);
1432int intel_overlay_attrs(struct drm_device *dev, void *data, 1472int intel_overlay_attrs_ioctl(struct drm_device *dev, void *data,
1433 struct drm_file *file_priv); 1473 struct drm_file *file_priv);
1434void intel_overlay_reset(struct drm_i915_private *dev_priv); 1474void intel_overlay_reset(struct drm_i915_private *dev_priv);
1435 1475
1436 1476
@@ -1459,7 +1499,14 @@ extern struct drm_display_mode *intel_find_panel_downclock(
1459 struct drm_display_mode *fixed_mode, 1499 struct drm_display_mode *fixed_mode,
1460 struct drm_connector *connector); 1500 struct drm_connector *connector);
1461void intel_backlight_register(struct drm_device *dev); 1501void intel_backlight_register(struct drm_device *dev);
1462void intel_backlight_unregister(struct drm_device *dev); 1502
1503#if IS_ENABLED(CONFIG_BACKLIGHT_CLASS_DEVICE)
1504void intel_backlight_device_unregister(struct intel_connector *connector);
1505#else /* CONFIG_BACKLIGHT_CLASS_DEVICE */
1506static inline void intel_backlight_device_unregister(struct intel_connector *connector)
1507{
1508}
1509#endif /* CONFIG_BACKLIGHT_CLASS_DEVICE */
1463 1510
1464 1511
1465/* intel_psr.c */ 1512/* intel_psr.c */
@@ -1601,21 +1648,20 @@ void intel_init_clock_gating_hooks(struct drm_i915_private *dev_priv);
1601void intel_pm_setup(struct drm_device *dev); 1648void intel_pm_setup(struct drm_device *dev);
1602void intel_gpu_ips_init(struct drm_i915_private *dev_priv); 1649void intel_gpu_ips_init(struct drm_i915_private *dev_priv);
1603void intel_gpu_ips_teardown(void); 1650void intel_gpu_ips_teardown(void);
1604void intel_init_gt_powersave(struct drm_device *dev); 1651void intel_init_gt_powersave(struct drm_i915_private *dev_priv);
1605void intel_cleanup_gt_powersave(struct drm_device *dev); 1652void intel_cleanup_gt_powersave(struct drm_i915_private *dev_priv);
1606void intel_enable_gt_powersave(struct drm_device *dev); 1653void intel_enable_gt_powersave(struct drm_i915_private *dev_priv);
1607void intel_disable_gt_powersave(struct drm_device *dev); 1654void intel_disable_gt_powersave(struct drm_i915_private *dev_priv);
1608void intel_suspend_gt_powersave(struct drm_device *dev); 1655void intel_suspend_gt_powersave(struct drm_i915_private *dev_priv);
1609void intel_reset_gt_powersave(struct drm_device *dev); 1656void intel_reset_gt_powersave(struct drm_i915_private *dev_priv);
1610void gen6_update_ring_freq(struct drm_device *dev); 1657void gen6_update_ring_freq(struct drm_i915_private *dev_priv);
1611void gen6_rps_busy(struct drm_i915_private *dev_priv); 1658void gen6_rps_busy(struct drm_i915_private *dev_priv);
1612void gen6_rps_reset_ei(struct drm_i915_private *dev_priv); 1659void gen6_rps_reset_ei(struct drm_i915_private *dev_priv);
1613void gen6_rps_idle(struct drm_i915_private *dev_priv); 1660void gen6_rps_idle(struct drm_i915_private *dev_priv);
1614void gen6_rps_boost(struct drm_i915_private *dev_priv, 1661void gen6_rps_boost(struct drm_i915_private *dev_priv,
1615 struct intel_rps_client *rps, 1662 struct intel_rps_client *rps,
1616 unsigned long submitted); 1663 unsigned long submitted);
1617void intel_queue_rps_boost_for_request(struct drm_device *dev, 1664void intel_queue_rps_boost_for_request(struct drm_i915_gem_request *req);
1618 struct drm_i915_gem_request *req);
1619void vlv_wm_get_hw_state(struct drm_device *dev); 1665void vlv_wm_get_hw_state(struct drm_device *dev);
1620void ilk_wm_get_hw_state(struct drm_device *dev); 1666void ilk_wm_get_hw_state(struct drm_device *dev);
1621void skl_wm_get_hw_state(struct drm_device *dev); 1667void skl_wm_get_hw_state(struct drm_device *dev);
@@ -1623,7 +1669,11 @@ void skl_ddb_get_hw_state(struct drm_i915_private *dev_priv,
1623 struct skl_ddb_allocation *ddb /* out */); 1669 struct skl_ddb_allocation *ddb /* out */);
1624uint32_t ilk_pipe_pixel_rate(const struct intel_crtc_state *pipe_config); 1670uint32_t ilk_pipe_pixel_rate(const struct intel_crtc_state *pipe_config);
1625bool ilk_disable_lp_wm(struct drm_device *dev); 1671bool ilk_disable_lp_wm(struct drm_device *dev);
1626int sanitize_rc6_option(const struct drm_device *dev, int enable_rc6); 1672int sanitize_rc6_option(struct drm_i915_private *dev_priv, int enable_rc6);
1673static inline int intel_enable_rc6(void)
1674{
1675 return i915.enable_rc6;
1676}
1627 1677
1628/* intel_sdvo.c */ 1678/* intel_sdvo.c */
1629bool intel_sdvo_init(struct drm_device *dev, 1679bool intel_sdvo_init(struct drm_device *dev,
@@ -1635,7 +1685,7 @@ int intel_plane_init(struct drm_device *dev, enum pipe pipe, int plane);
1635int intel_sprite_set_colorkey(struct drm_device *dev, void *data, 1685int intel_sprite_set_colorkey(struct drm_device *dev, void *data,
1636 struct drm_file *file_priv); 1686 struct drm_file *file_priv);
1637void intel_pipe_update_start(struct intel_crtc *crtc); 1687void intel_pipe_update_start(struct intel_crtc *crtc);
1638void intel_pipe_update_end(struct intel_crtc *crtc); 1688void intel_pipe_update_end(struct intel_crtc *crtc, struct intel_flip_work *work);
1639 1689
1640/* intel_tv.c */ 1690/* intel_tv.c */
1641void intel_tv_init(struct drm_device *dev); 1691void intel_tv_init(struct drm_device *dev);