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.h233
1 files changed, 173 insertions, 60 deletions
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index f8dc84b2d2d3..a7d9ac912125 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -381,6 +381,15 @@ struct intel_hdcp_shim {
381 bool *hdcp_capable); 381 bool *hdcp_capable);
382}; 382};
383 383
384struct intel_hdcp {
385 const struct intel_hdcp_shim *shim;
386 /* Mutex for hdcp state of the connector */
387 struct mutex mutex;
388 u64 value;
389 struct delayed_work check_work;
390 struct work_struct prop_work;
391};
392
384struct intel_connector { 393struct intel_connector {
385 struct drm_connector base; 394 struct drm_connector base;
386 /* 395 /*
@@ -413,11 +422,7 @@ struct intel_connector {
413 /* Work struct to schedule a uevent on link train failure */ 422 /* Work struct to schedule a uevent on link train failure */
414 struct work_struct modeset_retry_work; 423 struct work_struct modeset_retry_work;
415 424
416 const struct intel_hdcp_shim *hdcp_shim; 425 struct intel_hdcp hdcp;
417 struct mutex hdcp_mutex;
418 uint64_t hdcp_value; /* protected by hdcp_mutex */
419 struct delayed_work hdcp_check_work;
420 struct work_struct hdcp_prop_work;
421}; 426};
422 427
423struct intel_digital_connector_state { 428struct intel_digital_connector_state {
@@ -539,6 +544,26 @@ struct intel_plane_state {
539 */ 544 */
540 int scaler_id; 545 int scaler_id;
541 546
547 /*
548 * linked_plane:
549 *
550 * ICL planar formats require 2 planes that are updated as pairs.
551 * This member is used to make sure the other plane is also updated
552 * when required, and for update_slave() to find the correct
553 * plane_state to pass as argument.
554 */
555 struct intel_plane *linked_plane;
556
557 /*
558 * slave:
559 * If set don't update use the linked plane's state for updating
560 * this plane during atomic commit with the update_slave() callback.
561 *
562 * It's also used by the watermark code to ignore wm calculations on
563 * this plane. They're calculated by the linked plane's wm code.
564 */
565 u32 slave;
566
542 struct drm_intel_sprite_colorkey ckey; 567 struct drm_intel_sprite_colorkey ckey;
543}; 568};
544 569
@@ -547,6 +572,7 @@ struct intel_initial_plane_config {
547 unsigned int tiling; 572 unsigned int tiling;
548 int size; 573 int size;
549 u32 base; 574 u32 base;
575 u8 rotation;
550}; 576};
551 577
552#define SKL_MIN_SRC_W 8 578#define SKL_MIN_SRC_W 8
@@ -712,6 +738,13 @@ struct intel_crtc_wm_state {
712 bool need_postvbl_update; 738 bool need_postvbl_update;
713}; 739};
714 740
741enum intel_output_format {
742 INTEL_OUTPUT_FORMAT_INVALID,
743 INTEL_OUTPUT_FORMAT_RGB,
744 INTEL_OUTPUT_FORMAT_YCBCR420,
745 INTEL_OUTPUT_FORMAT_YCBCR444,
746};
747
715struct intel_crtc_state { 748struct intel_crtc_state {
716 struct drm_crtc_state base; 749 struct drm_crtc_state base;
717 750
@@ -899,8 +932,11 @@ struct intel_crtc_state {
899 /* HDMI High TMDS char rate ratio */ 932 /* HDMI High TMDS char rate ratio */
900 bool hdmi_high_tmds_clock_ratio; 933 bool hdmi_high_tmds_clock_ratio;
901 934
902 /* output format is YCBCR 4:2:0 */ 935 /* Output format RGB/YCBCR etc */
903 bool ycbcr420; 936 enum intel_output_format output_format;
937
938 /* Output down scaling is done in LSPCON device */
939 bool lspcon_downsampling;
904}; 940};
905 941
906struct intel_crtc { 942struct intel_crtc {
@@ -973,6 +1009,9 @@ struct intel_plane {
973 void (*update_plane)(struct intel_plane *plane, 1009 void (*update_plane)(struct intel_plane *plane,
974 const struct intel_crtc_state *crtc_state, 1010 const struct intel_crtc_state *crtc_state,
975 const struct intel_plane_state *plane_state); 1011 const struct intel_plane_state *plane_state);
1012 void (*update_slave)(struct intel_plane *plane,
1013 const struct intel_crtc_state *crtc_state,
1014 const struct intel_plane_state *plane_state);
976 void (*disable_plane)(struct intel_plane *plane, 1015 void (*disable_plane)(struct intel_plane *plane,
977 struct intel_crtc *crtc); 1016 struct intel_crtc *crtc);
978 bool (*get_hw_state)(struct intel_plane *plane, enum pipe *pipe); 1017 bool (*get_hw_state)(struct intel_plane *plane, enum pipe *pipe);
@@ -1070,13 +1109,13 @@ struct intel_dp {
1070 bool link_mst; 1109 bool link_mst;
1071 bool link_trained; 1110 bool link_trained;
1072 bool has_audio; 1111 bool has_audio;
1073 bool detect_done;
1074 bool reset_link_params; 1112 bool reset_link_params;
1075 enum aux_ch aux_ch;
1076 uint8_t dpcd[DP_RECEIVER_CAP_SIZE]; 1113 uint8_t dpcd[DP_RECEIVER_CAP_SIZE];
1077 uint8_t psr_dpcd[EDP_PSR_RECEIVER_CAP_SIZE]; 1114 uint8_t psr_dpcd[EDP_PSR_RECEIVER_CAP_SIZE];
1078 uint8_t downstream_ports[DP_MAX_DOWNSTREAM_PORTS]; 1115 uint8_t downstream_ports[DP_MAX_DOWNSTREAM_PORTS];
1079 uint8_t edp_dpcd[EDP_DISPLAY_CTL_CAP_SIZE]; 1116 uint8_t edp_dpcd[EDP_DISPLAY_CTL_CAP_SIZE];
1117 u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE];
1118 u8 fec_capable;
1080 /* source rates */ 1119 /* source rates */
1081 int num_source_rates; 1120 int num_source_rates;
1082 const int *source_rates; 1121 const int *source_rates;
@@ -1094,7 +1133,6 @@ struct intel_dp {
1094 /* sink or branch descriptor */ 1133 /* sink or branch descriptor */
1095 struct drm_dp_desc desc; 1134 struct drm_dp_desc desc;
1096 struct drm_dp_aux aux; 1135 struct drm_dp_aux aux;
1097 enum intel_display_power_domain aux_power_domain;
1098 uint8_t train_set[4]; 1136 uint8_t train_set[4];
1099 int panel_power_up_delay; 1137 int panel_power_up_delay;
1100 int panel_power_down_delay; 1138 int panel_power_down_delay;
@@ -1156,9 +1194,15 @@ struct intel_dp {
1156 struct intel_dp_compliance compliance; 1194 struct intel_dp_compliance compliance;
1157}; 1195};
1158 1196
1197enum lspcon_vendor {
1198 LSPCON_VENDOR_MCA,
1199 LSPCON_VENDOR_PARADE
1200};
1201
1159struct intel_lspcon { 1202struct intel_lspcon {
1160 bool active; 1203 bool active;
1161 enum drm_lspcon_mode mode; 1204 enum drm_lspcon_mode mode;
1205 enum lspcon_vendor vendor;
1162}; 1206};
1163 1207
1164struct intel_digital_port { 1208struct intel_digital_port {
@@ -1170,18 +1214,20 @@ struct intel_digital_port {
1170 enum irqreturn (*hpd_pulse)(struct intel_digital_port *, bool); 1214 enum irqreturn (*hpd_pulse)(struct intel_digital_port *, bool);
1171 bool release_cl2_override; 1215 bool release_cl2_override;
1172 uint8_t max_lanes; 1216 uint8_t max_lanes;
1217 /* Used for DP and ICL+ TypeC/DP and TypeC/HDMI ports. */
1218 enum aux_ch aux_ch;
1173 enum intel_display_power_domain ddi_io_power_domain; 1219 enum intel_display_power_domain ddi_io_power_domain;
1174 enum tc_port_type tc_type; 1220 enum tc_port_type tc_type;
1175 1221
1176 void (*write_infoframe)(struct drm_encoder *encoder, 1222 void (*write_infoframe)(struct intel_encoder *encoder,
1177 const struct intel_crtc_state *crtc_state, 1223 const struct intel_crtc_state *crtc_state,
1178 unsigned int type, 1224 unsigned int type,
1179 const void *frame, ssize_t len); 1225 const void *frame, ssize_t len);
1180 void (*set_infoframes)(struct drm_encoder *encoder, 1226 void (*set_infoframes)(struct intel_encoder *encoder,
1181 bool enable, 1227 bool enable,
1182 const struct intel_crtc_state *crtc_state, 1228 const struct intel_crtc_state *crtc_state,
1183 const struct drm_connector_state *conn_state); 1229 const struct drm_connector_state *conn_state);
1184 bool (*infoframe_enabled)(struct drm_encoder *encoder, 1230 bool (*infoframe_enabled)(struct intel_encoder *encoder,
1185 const struct intel_crtc_state *pipe_config); 1231 const struct intel_crtc_state *pipe_config);
1186}; 1232};
1187 1233
@@ -1281,6 +1327,12 @@ enc_to_dig_port(struct drm_encoder *encoder)
1281 return NULL; 1327 return NULL;
1282} 1328}
1283 1329
1330static inline struct intel_digital_port *
1331conn_to_dig_port(struct intel_connector *connector)
1332{
1333 return enc_to_dig_port(&intel_attached_encoder(&connector->base)->base);
1334}
1335
1284static inline struct intel_dp_mst_encoder * 1336static inline struct intel_dp_mst_encoder *
1285enc_to_mst(struct drm_encoder *encoder) 1337enc_to_mst(struct drm_encoder *encoder)
1286{ 1338{
@@ -1306,6 +1358,12 @@ static inline bool intel_encoder_is_dp(struct intel_encoder *encoder)
1306 } 1358 }
1307} 1359}
1308 1360
1361static inline struct intel_lspcon *
1362enc_to_intel_lspcon(struct drm_encoder *encoder)
1363{
1364 return &enc_to_dig_port(encoder)->lspcon;
1365}
1366
1309static inline struct intel_digital_port * 1367static inline struct intel_digital_port *
1310dp_to_dig_port(struct intel_dp *intel_dp) 1368dp_to_dig_port(struct intel_dp *intel_dp)
1311{ 1369{
@@ -1331,6 +1389,27 @@ hdmi_to_dig_port(struct intel_hdmi *intel_hdmi)
1331} 1389}
1332 1390
1333static inline struct intel_plane_state * 1391static inline struct intel_plane_state *
1392intel_atomic_get_plane_state(struct intel_atomic_state *state,
1393 struct intel_plane *plane)
1394{
1395 struct drm_plane_state *ret =
1396 drm_atomic_get_plane_state(&state->base, &plane->base);
1397
1398 if (IS_ERR(ret))
1399 return ERR_CAST(ret);
1400
1401 return to_intel_plane_state(ret);
1402}
1403
1404static inline struct intel_plane_state *
1405intel_atomic_get_old_plane_state(struct intel_atomic_state *state,
1406 struct intel_plane *plane)
1407{
1408 return to_intel_plane_state(drm_atomic_get_old_plane_state(&state->base,
1409 &plane->base));
1410}
1411
1412static inline struct intel_plane_state *
1334intel_atomic_get_new_plane_state(struct intel_atomic_state *state, 1413intel_atomic_get_new_plane_state(struct intel_atomic_state *state,
1335 struct intel_plane *plane) 1414 struct intel_plane *plane)
1336{ 1415{
@@ -1444,6 +1523,7 @@ void icl_map_plls_to_ports(struct drm_crtc *crtc,
1444void icl_unmap_plls_to_ports(struct drm_crtc *crtc, 1523void icl_unmap_plls_to_ports(struct drm_crtc *crtc,
1445 struct intel_crtc_state *crtc_state, 1524 struct intel_crtc_state *crtc_state,
1446 struct drm_atomic_state *old_state); 1525 struct drm_atomic_state *old_state);
1526void icl_sanitize_encoder_pll_mapping(struct intel_encoder *encoder);
1447 1527
1448unsigned int intel_fb_align_height(const struct drm_framebuffer *fb, 1528unsigned int intel_fb_align_height(const struct drm_framebuffer *fb,
1449 int color_plane, unsigned int height); 1529 int color_plane, unsigned int height);
@@ -1488,7 +1568,6 @@ void intel_dump_cdclk_state(const struct intel_cdclk_state *cdclk_state,
1488void i830_enable_pipe(struct drm_i915_private *dev_priv, enum pipe pipe); 1568void i830_enable_pipe(struct drm_i915_private *dev_priv, enum pipe pipe);
1489void i830_disable_pipe(struct drm_i915_private *dev_priv, enum pipe pipe); 1569void i830_disable_pipe(struct drm_i915_private *dev_priv, enum pipe pipe);
1490enum pipe intel_crtc_pch_transcoder(struct intel_crtc *crtc); 1570enum pipe intel_crtc_pch_transcoder(struct intel_crtc *crtc);
1491void intel_update_rawclk(struct drm_i915_private *dev_priv);
1492int vlv_get_hpll_vco(struct drm_i915_private *dev_priv); 1571int vlv_get_hpll_vco(struct drm_i915_private *dev_priv);
1493int vlv_get_cck_clock(struct drm_i915_private *dev_priv, 1572int vlv_get_cck_clock(struct drm_i915_private *dev_priv,
1494 const char *name, u32 reg, int ref_freq); 1573 const char *name, u32 reg, int ref_freq);
@@ -1509,20 +1588,12 @@ void intel_mark_idle(struct drm_i915_private *dev_priv);
1509int intel_display_suspend(struct drm_device *dev); 1588int intel_display_suspend(struct drm_device *dev);
1510void intel_pps_unlock_regs_wa(struct drm_i915_private *dev_priv); 1589void intel_pps_unlock_regs_wa(struct drm_i915_private *dev_priv);
1511void intel_encoder_destroy(struct drm_encoder *encoder); 1590void intel_encoder_destroy(struct drm_encoder *encoder);
1512int intel_connector_init(struct intel_connector *);
1513struct intel_connector *intel_connector_alloc(void);
1514void intel_connector_free(struct intel_connector *connector);
1515bool intel_connector_get_hw_state(struct intel_connector *connector);
1516void intel_connector_attach_encoder(struct intel_connector *connector,
1517 struct intel_encoder *encoder);
1518struct drm_display_mode * 1591struct drm_display_mode *
1519intel_encoder_current_mode(struct intel_encoder *encoder); 1592intel_encoder_current_mode(struct intel_encoder *encoder);
1520bool intel_port_is_combophy(struct drm_i915_private *dev_priv, enum port port); 1593bool intel_port_is_combophy(struct drm_i915_private *dev_priv, enum port port);
1521bool intel_port_is_tc(struct drm_i915_private *dev_priv, enum port port); 1594bool intel_port_is_tc(struct drm_i915_private *dev_priv, enum port port);
1522enum tc_port intel_port_to_tc(struct drm_i915_private *dev_priv, 1595enum tc_port intel_port_to_tc(struct drm_i915_private *dev_priv,
1523 enum port port); 1596 enum port port);
1524
1525enum pipe intel_get_pipe_from_connector(struct intel_connector *connector);
1526int intel_get_pipe_from_crtc_id_ioctl(struct drm_device *dev, void *data, 1597int intel_get_pipe_from_crtc_id_ioctl(struct drm_device *dev, void *data,
1527 struct drm_file *file_priv); 1598 struct drm_file *file_priv);
1528enum transcoder intel_pipe_to_cpu_transcoder(struct drm_i915_private *dev_priv, 1599enum transcoder intel_pipe_to_cpu_transcoder(struct drm_i915_private *dev_priv,
@@ -1628,9 +1699,11 @@ void bxt_enable_dc9(struct drm_i915_private *dev_priv);
1628void bxt_disable_dc9(struct drm_i915_private *dev_priv); 1699void bxt_disable_dc9(struct drm_i915_private *dev_priv);
1629void gen9_enable_dc5(struct drm_i915_private *dev_priv); 1700void gen9_enable_dc5(struct drm_i915_private *dev_priv);
1630unsigned int skl_cdclk_get_vco(unsigned int freq); 1701unsigned int skl_cdclk_get_vco(unsigned int freq);
1702void skl_enable_dc6(struct drm_i915_private *dev_priv);
1631void intel_dp_get_m_n(struct intel_crtc *crtc, 1703void intel_dp_get_m_n(struct intel_crtc *crtc,
1632 struct intel_crtc_state *pipe_config); 1704 struct intel_crtc_state *pipe_config);
1633void intel_dp_set_m_n(struct intel_crtc *crtc, enum link_m_n_set m_n); 1705void intel_dp_set_m_n(const struct intel_crtc_state *crtc_state,
1706 enum link_m_n_set m_n);
1634int intel_dotclock_calculate(int link_freq, const struct intel_link_m_n *m_n); 1707int intel_dotclock_calculate(int link_freq, const struct intel_link_m_n *m_n);
1635bool bxt_find_best_dpll(struct intel_crtc_state *crtc_state, int target_clock, 1708bool bxt_find_best_dpll(struct intel_crtc_state *crtc_state, int target_clock,
1636 struct dpll *best_clock); 1709 struct dpll *best_clock);
@@ -1641,12 +1714,14 @@ bool hsw_crtc_state_ips_capable(const struct intel_crtc_state *crtc_state);
1641void hsw_enable_ips(const struct intel_crtc_state *crtc_state); 1714void hsw_enable_ips(const struct intel_crtc_state *crtc_state);
1642void hsw_disable_ips(const struct intel_crtc_state *crtc_state); 1715void hsw_disable_ips(const struct intel_crtc_state *crtc_state);
1643enum intel_display_power_domain intel_port_to_power_domain(enum port port); 1716enum intel_display_power_domain intel_port_to_power_domain(enum port port);
1717enum intel_display_power_domain
1718intel_aux_power_domain(struct intel_digital_port *dig_port);
1644void intel_mode_from_pipe_config(struct drm_display_mode *mode, 1719void intel_mode_from_pipe_config(struct drm_display_mode *mode,
1645 struct intel_crtc_state *pipe_config); 1720 struct intel_crtc_state *pipe_config);
1646void intel_crtc_arm_fifo_underrun(struct intel_crtc *crtc, 1721void intel_crtc_arm_fifo_underrun(struct intel_crtc *crtc,
1647 struct intel_crtc_state *crtc_state); 1722 struct intel_crtc_state *crtc_state);
1648 1723
1649u16 skl_scaler_calc_phase(int sub, bool chroma_center); 1724u16 skl_scaler_calc_phase(int sub, int scale, bool chroma_center);
1650int skl_update_scaler_crtc(struct intel_crtc_state *crtc_state); 1725int skl_update_scaler_crtc(struct intel_crtc_state *crtc_state);
1651int skl_max_scale(const struct intel_crtc_state *crtc_state, 1726int skl_max_scale(const struct intel_crtc_state *crtc_state,
1652 u32 pixel_format); 1727 u32 pixel_format);
@@ -1670,6 +1745,24 @@ unsigned int i9xx_plane_max_stride(struct intel_plane *plane,
1670 u32 pixel_format, u64 modifier, 1745 u32 pixel_format, u64 modifier,
1671 unsigned int rotation); 1746 unsigned int rotation);
1672 1747
1748/* intel_connector.c */
1749int intel_connector_init(struct intel_connector *connector);
1750struct intel_connector *intel_connector_alloc(void);
1751void intel_connector_free(struct intel_connector *connector);
1752void intel_connector_destroy(struct drm_connector *connector);
1753int intel_connector_register(struct drm_connector *connector);
1754void intel_connector_unregister(struct drm_connector *connector);
1755void intel_connector_attach_encoder(struct intel_connector *connector,
1756 struct intel_encoder *encoder);
1757bool intel_connector_get_hw_state(struct intel_connector *connector);
1758enum pipe intel_connector_get_pipe(struct intel_connector *connector);
1759int intel_connector_update_modes(struct drm_connector *connector,
1760 struct edid *edid);
1761int intel_ddc_get_modes(struct drm_connector *c, struct i2c_adapter *adapter);
1762void intel_attach_force_audio_property(struct drm_connector *connector);
1763void intel_attach_broadcast_rgb_property(struct drm_connector *connector);
1764void intel_attach_aspect_ratio_property(struct drm_connector *connector);
1765
1673/* intel_csr.c */ 1766/* intel_csr.c */
1674void intel_csr_ucode_init(struct drm_i915_private *); 1767void intel_csr_ucode_init(struct drm_i915_private *);
1675void intel_csr_load_program(struct drm_i915_private *); 1768void intel_csr_load_program(struct drm_i915_private *);
@@ -1728,9 +1821,6 @@ void intel_edp_drrs_invalidate(struct drm_i915_private *dev_priv,
1728 unsigned int frontbuffer_bits); 1821 unsigned int frontbuffer_bits);
1729void intel_edp_drrs_flush(struct drm_i915_private *dev_priv, 1822void intel_edp_drrs_flush(struct drm_i915_private *dev_priv,
1730 unsigned int frontbuffer_bits); 1823 unsigned int frontbuffer_bits);
1731void icl_program_mg_dp_mode(struct intel_dp *intel_dp);
1732void icl_enable_phy_clock_gating(struct intel_digital_port *dig_port);
1733void icl_disable_phy_clock_gating(struct intel_digital_port *dig_port);
1734 1824
1735void 1825void
1736intel_dp_program_link_training_pattern(struct intel_dp *intel_dp, 1826intel_dp_program_link_training_pattern(struct intel_dp *intel_dp,
@@ -1748,6 +1838,10 @@ bool intel_dp_source_supports_hbr2(struct intel_dp *intel_dp);
1748bool intel_dp_source_supports_hbr3(struct intel_dp *intel_dp); 1838bool intel_dp_source_supports_hbr3(struct intel_dp *intel_dp);
1749bool 1839bool
1750intel_dp_get_link_status(struct intel_dp *intel_dp, uint8_t link_status[DP_LINK_STATUS_SIZE]); 1840intel_dp_get_link_status(struct intel_dp *intel_dp, uint8_t link_status[DP_LINK_STATUS_SIZE]);
1841uint16_t intel_dp_dsc_get_output_bpp(int link_clock, uint8_t lane_count,
1842 int mode_clock, int mode_hdisplay);
1843uint8_t intel_dp_dsc_get_slice_count(struct intel_dp *intel_dp, int mode_clock,
1844 int mode_hdisplay);
1751 1845
1752static inline unsigned int intel_dp_unused_lane_mask(int lane_count) 1846static inline unsigned int intel_dp_unused_lane_mask(int lane_count)
1753{ 1847{
@@ -1768,6 +1862,9 @@ void intel_dp_mst_encoder_cleanup(struct intel_digital_port *intel_dig_port);
1768/* vlv_dsi.c */ 1862/* vlv_dsi.c */
1769void vlv_dsi_init(struct drm_i915_private *dev_priv); 1863void vlv_dsi_init(struct drm_i915_private *dev_priv);
1770 1864
1865/* icl_dsi.c */
1866void icl_dsi_init(struct drm_i915_private *dev_priv);
1867
1771/* intel_dsi_dcs_backlight.c */ 1868/* intel_dsi_dcs_backlight.c */
1772int intel_dsi_dcs_init_backlight_funcs(struct intel_connector *intel_connector); 1869int intel_dsi_dcs_init_backlight_funcs(struct intel_connector *intel_connector);
1773 1870
@@ -1858,7 +1955,6 @@ bool intel_hdmi_handle_sink_scrambling(struct intel_encoder *encoder,
1858void intel_dp_dual_mode_set_tmds_output(struct intel_hdmi *hdmi, bool enable); 1955void intel_dp_dual_mode_set_tmds_output(struct intel_hdmi *hdmi, bool enable);
1859void intel_infoframe_init(struct intel_digital_port *intel_dig_port); 1956void intel_infoframe_init(struct intel_digital_port *intel_dig_port);
1860 1957
1861
1862/* intel_lvds.c */ 1958/* intel_lvds.c */
1863bool intel_lvds_port_enabled(struct drm_i915_private *dev_priv, 1959bool intel_lvds_port_enabled(struct drm_i915_private *dev_priv,
1864 i915_reg_t lvds_reg, enum pipe *pipe); 1960 i915_reg_t lvds_reg, enum pipe *pipe);
@@ -1866,19 +1962,9 @@ void intel_lvds_init(struct drm_i915_private *dev_priv);
1866struct intel_encoder *intel_get_lvds_encoder(struct drm_device *dev); 1962struct intel_encoder *intel_get_lvds_encoder(struct drm_device *dev);
1867bool intel_is_dual_link_lvds(struct drm_device *dev); 1963bool intel_is_dual_link_lvds(struct drm_device *dev);
1868 1964
1869
1870/* intel_modes.c */
1871int intel_connector_update_modes(struct drm_connector *connector,
1872 struct edid *edid);
1873int intel_ddc_get_modes(struct drm_connector *c, struct i2c_adapter *adapter);
1874void intel_attach_force_audio_property(struct drm_connector *connector);
1875void intel_attach_broadcast_rgb_property(struct drm_connector *connector);
1876void intel_attach_aspect_ratio_property(struct drm_connector *connector);
1877
1878
1879/* intel_overlay.c */ 1965/* intel_overlay.c */
1880void intel_setup_overlay(struct drm_i915_private *dev_priv); 1966void intel_overlay_setup(struct drm_i915_private *dev_priv);
1881void intel_cleanup_overlay(struct drm_i915_private *dev_priv); 1967void intel_overlay_cleanup(struct drm_i915_private *dev_priv);
1882int intel_overlay_switch_off(struct intel_overlay *overlay); 1968int intel_overlay_switch_off(struct intel_overlay *overlay);
1883int intel_overlay_put_image_ioctl(struct drm_device *dev, void *data, 1969int intel_overlay_put_image_ioctl(struct drm_device *dev, void *data,
1884 struct drm_file *file_priv); 1970 struct drm_file *file_priv);
@@ -1907,7 +1993,6 @@ int intel_panel_setup_backlight(struct drm_connector *connector,
1907void intel_panel_enable_backlight(const struct intel_crtc_state *crtc_state, 1993void intel_panel_enable_backlight(const struct intel_crtc_state *crtc_state,
1908 const struct drm_connector_state *conn_state); 1994 const struct drm_connector_state *conn_state);
1909void intel_panel_disable_backlight(const struct drm_connector_state *old_conn_state); 1995void intel_panel_disable_backlight(const struct drm_connector_state *old_conn_state);
1910void intel_panel_destroy_backlight(struct drm_connector *connector);
1911extern struct drm_display_mode *intel_find_panel_downclock( 1996extern struct drm_display_mode *intel_find_panel_downclock(
1912 struct drm_i915_private *dev_priv, 1997 struct drm_i915_private *dev_priv,
1913 struct drm_display_mode *fixed_mode, 1998 struct drm_display_mode *fixed_mode,
@@ -1936,6 +2021,7 @@ int intel_hdcp_enable(struct intel_connector *connector);
1936int intel_hdcp_disable(struct intel_connector *connector); 2021int intel_hdcp_disable(struct intel_connector *connector);
1937int intel_hdcp_check_link(struct intel_connector *connector); 2022int intel_hdcp_check_link(struct intel_connector *connector);
1938bool is_hdcp_supported(struct drm_i915_private *dev_priv, enum port port); 2023bool is_hdcp_supported(struct drm_i915_private *dev_priv, enum port port);
2024bool intel_hdcp_capable(struct intel_connector *connector);
1939 2025
1940/* intel_psr.c */ 2026/* intel_psr.c */
1941#define CAN_PSR(dev_priv) (HAS_PSR(dev_priv) && dev_priv->psr.sink_support) 2027#define CAN_PSR(dev_priv) (HAS_PSR(dev_priv) && dev_priv->psr.sink_support)
@@ -1962,11 +2048,16 @@ void intel_psr_short_pulse(struct intel_dp *intel_dp);
1962int intel_psr_wait_for_idle(const struct intel_crtc_state *new_crtc_state, 2048int intel_psr_wait_for_idle(const struct intel_crtc_state *new_crtc_state,
1963 u32 *out_value); 2049 u32 *out_value);
1964 2050
2051/* intel_quirks.c */
2052void intel_init_quirks(struct drm_i915_private *dev_priv);
2053
1965/* intel_runtime_pm.c */ 2054/* intel_runtime_pm.c */
1966int intel_power_domains_init(struct drm_i915_private *); 2055int intel_power_domains_init(struct drm_i915_private *);
1967void intel_power_domains_cleanup(struct drm_i915_private *dev_priv); 2056void intel_power_domains_cleanup(struct drm_i915_private *dev_priv);
1968void intel_power_domains_init_hw(struct drm_i915_private *dev_priv, bool resume); 2057void intel_power_domains_init_hw(struct drm_i915_private *dev_priv, bool resume);
1969void intel_power_domains_fini_hw(struct drm_i915_private *dev_priv); 2058void intel_power_domains_fini_hw(struct drm_i915_private *dev_priv);
2059void icl_display_core_init(struct drm_i915_private *dev_priv, bool resume);
2060void icl_display_core_uninit(struct drm_i915_private *dev_priv);
1970void intel_power_domains_enable(struct drm_i915_private *dev_priv); 2061void intel_power_domains_enable(struct drm_i915_private *dev_priv);
1971void intel_power_domains_disable(struct drm_i915_private *dev_priv); 2062void intel_power_domains_disable(struct drm_i915_private *dev_priv);
1972 2063
@@ -2101,10 +2192,9 @@ int intel_enable_sagv(struct drm_i915_private *dev_priv);
2101int intel_disable_sagv(struct drm_i915_private *dev_priv); 2192int intel_disable_sagv(struct drm_i915_private *dev_priv);
2102bool skl_wm_level_equals(const struct skl_wm_level *l1, 2193bool skl_wm_level_equals(const struct skl_wm_level *l1,
2103 const struct skl_wm_level *l2); 2194 const struct skl_wm_level *l2);
2104bool skl_ddb_allocation_overlaps(struct drm_i915_private *dev_priv, 2195bool skl_ddb_allocation_overlaps(const struct skl_ddb_entry *ddb,
2105 const struct skl_ddb_entry **entries, 2196 const struct skl_ddb_entry entries[],
2106 const struct skl_ddb_entry *ddb, 2197 int num_entries, int ignore_idx);
2107 int ignore);
2108bool ilk_disable_lp_wm(struct drm_device *dev); 2198bool ilk_disable_lp_wm(struct drm_device *dev);
2109int skl_check_pipe_max_pixel_rate(struct intel_crtc *intel_crtc, 2199int skl_check_pipe_max_pixel_rate(struct intel_crtc *intel_crtc,
2110 struct intel_crtc_state *cstate); 2200 struct intel_crtc_state *cstate);
@@ -2127,23 +2217,29 @@ int intel_sprite_set_colorkey_ioctl(struct drm_device *dev, void *data,
2127 struct drm_file *file_priv); 2217 struct drm_file *file_priv);
2128void intel_pipe_update_start(const struct intel_crtc_state *new_crtc_state); 2218void intel_pipe_update_start(const struct intel_crtc_state *new_crtc_state);
2129void intel_pipe_update_end(struct intel_crtc_state *new_crtc_state); 2219void intel_pipe_update_end(struct intel_crtc_state *new_crtc_state);
2130void skl_update_plane(struct intel_plane *plane,
2131 const struct intel_crtc_state *crtc_state,
2132 const struct intel_plane_state *plane_state);
2133void skl_disable_plane(struct intel_plane *plane, struct intel_crtc *crtc);
2134bool skl_plane_get_hw_state(struct intel_plane *plane, enum pipe *pipe);
2135bool skl_plane_has_ccs(struct drm_i915_private *dev_priv,
2136 enum pipe pipe, enum plane_id plane_id);
2137bool skl_plane_has_planar(struct drm_i915_private *dev_priv,
2138 enum pipe pipe, enum plane_id plane_id);
2139unsigned int skl_plane_max_stride(struct intel_plane *plane,
2140 u32 pixel_format, u64 modifier,
2141 unsigned int rotation);
2142int skl_plane_check(struct intel_crtc_state *crtc_state,
2143 struct intel_plane_state *plane_state);
2144int intel_plane_check_stride(const struct intel_plane_state *plane_state); 2220int intel_plane_check_stride(const struct intel_plane_state *plane_state);
2145int intel_plane_check_src_coordinates(struct intel_plane_state *plane_state); 2221int intel_plane_check_src_coordinates(struct intel_plane_state *plane_state);
2146int chv_plane_check_rotation(const struct intel_plane_state *plane_state); 2222int chv_plane_check_rotation(const struct intel_plane_state *plane_state);
2223struct intel_plane *
2224skl_universal_plane_create(struct drm_i915_private *dev_priv,
2225 enum pipe pipe, enum plane_id plane_id);
2226
2227static inline bool icl_is_nv12_y_plane(enum plane_id id)
2228{
2229 /* Don't need to do a gen check, these planes are only available on gen11 */
2230 if (id == PLANE_SPRITE4 || id == PLANE_SPRITE5)
2231 return true;
2232
2233 return false;
2234}
2235
2236static inline bool icl_is_hdr_plane(struct intel_plane *plane)
2237{
2238 if (INTEL_GEN(to_i915(plane->base.dev)) < 11)
2239 return false;
2240
2241 return plane->id < PLANE_SPRITE2;
2242}
2147 2243
2148/* intel_tv.c */ 2244/* intel_tv.c */
2149void intel_tv_init(struct drm_i915_private *dev_priv); 2245void intel_tv_init(struct drm_i915_private *dev_priv);
@@ -2185,11 +2281,16 @@ int intel_atomic_setup_scalers(struct drm_i915_private *dev_priv,
2185 struct intel_crtc_state *crtc_state); 2281 struct intel_crtc_state *crtc_state);
2186 2282
2187/* intel_atomic_plane.c */ 2283/* intel_atomic_plane.c */
2188struct intel_plane_state *intel_create_plane_state(struct drm_plane *plane); 2284struct intel_plane *intel_plane_alloc(void);
2285void intel_plane_free(struct intel_plane *plane);
2189struct drm_plane_state *intel_plane_duplicate_state(struct drm_plane *plane); 2286struct drm_plane_state *intel_plane_duplicate_state(struct drm_plane *plane);
2190void intel_plane_destroy_state(struct drm_plane *plane, 2287void intel_plane_destroy_state(struct drm_plane *plane,
2191 struct drm_plane_state *state); 2288 struct drm_plane_state *state);
2192extern const struct drm_plane_helper_funcs intel_plane_helper_funcs; 2289extern const struct drm_plane_helper_funcs intel_plane_helper_funcs;
2290void intel_update_planes_on_crtc(struct intel_atomic_state *old_state,
2291 struct intel_crtc *crtc,
2292 struct intel_crtc_state *old_crtc_state,
2293 struct intel_crtc_state *new_crtc_state);
2193int intel_plane_atomic_check_with_state(const struct intel_crtc_state *old_crtc_state, 2294int intel_plane_atomic_check_with_state(const struct intel_crtc_state *old_crtc_state,
2194 struct intel_crtc_state *crtc_state, 2295 struct intel_crtc_state *crtc_state,
2195 const struct intel_plane_state *old_plane_state, 2296 const struct intel_plane_state *old_plane_state,
@@ -2205,6 +2306,18 @@ void intel_color_load_luts(struct drm_crtc_state *crtc_state);
2205bool lspcon_init(struct intel_digital_port *intel_dig_port); 2306bool lspcon_init(struct intel_digital_port *intel_dig_port);
2206void lspcon_resume(struct intel_lspcon *lspcon); 2307void lspcon_resume(struct intel_lspcon *lspcon);
2207void lspcon_wait_pcon_mode(struct intel_lspcon *lspcon); 2308void lspcon_wait_pcon_mode(struct intel_lspcon *lspcon);
2309void lspcon_write_infoframe(struct intel_encoder *encoder,
2310 const struct intel_crtc_state *crtc_state,
2311 unsigned int type,
2312 const void *buf, ssize_t len);
2313void lspcon_set_infoframes(struct intel_encoder *encoder,
2314 bool enable,
2315 const struct intel_crtc_state *crtc_state,
2316 const struct drm_connector_state *conn_state);
2317bool lspcon_infoframe_enabled(struct intel_encoder *encoder,
2318 const struct intel_crtc_state *pipe_config);
2319void lspcon_ycbcr420_config(struct drm_connector *connector,
2320 struct intel_crtc_state *crtc_state);
2208 2321
2209/* intel_pipe_crc.c */ 2322/* intel_pipe_crc.c */
2210#ifdef CONFIG_DEBUG_FS 2323#ifdef CONFIG_DEBUG_FS