Lines Matching full:display
30 #include <drm/display/drm_dp_helper.h>
31 #include <drm/display/drm_dsc_helper.h>
50 * through other means. The configuration is mostly related to display
69 struct intel_display *display; member
148 bdb_find_section(struct intel_display *display, in bdb_find_section() argument
153 list_for_each_entry(entry, &display->vbt.bdb_blocks, node) { in bdb_find_section()
203 static size_t lfp_data_min_size(struct intel_display *display) in lfp_data_min_size() argument
208 ptrs = bdb_find_section(display, BDB_LFP_DATA_PTRS); in lfp_data_min_size()
363 static void *generate_lfp_data_ptrs(struct intel_display *display, in generate_lfp_data_ptrs() argument
377 if (display->vbt.version < 155) in generate_lfp_data_ptrs()
386 drm_dbg_kms(display->drm, "Generating LFP data table pointers\n"); in generate_lfp_data_ptrs()
454 init_bdb_block(struct intel_display *display, in init_bdb_block() argument
467 temp_block = generate_lfp_data_ptrs(display, bdb); in init_bdb_block()
474 drm_WARN(display->drm, min_size == 0, in init_bdb_block()
498 drm_dbg_kms(display->drm, in init_bdb_block()
504 drm_err(display->drm, in init_bdb_block()
510 list_add_tail(&entry->node, &display->vbt.bdb_blocks); in init_bdb_block()
513 static void init_bdb_blocks(struct intel_display *display, in init_bdb_blocks() argument
523 min_size = lfp_data_min_size(display); in init_bdb_blocks()
525 init_bdb_block(display, bdb, section_id, min_size); in init_bdb_blocks()
530 fill_detail_timing_data(struct intel_display *display, in fill_detail_timing_data() argument
573 drm_dbg_kms(display->drm, "reducing hsync_end %d->%d\n", in fill_detail_timing_data()
578 drm_dbg_kms(display->drm, "reducing vsync_end %d->%d\n", in fill_detail_timing_data()
623 static int opregion_get_panel_type(struct intel_display *display, in opregion_get_panel_type() argument
627 return intel_opregion_get_panel_type(display); in opregion_get_panel_type()
630 static int vbt_get_panel_type(struct intel_display *display, in vbt_get_panel_type() argument
636 lfp_options = bdb_find_section(display, BDB_LFP_OPTIONS); in vbt_get_panel_type()
642 drm_dbg_kms(display->drm, "Invalid VBT panel type 0x%x\n", in vbt_get_panel_type()
650 drm_WARN_ON(display->drm, in vbt_get_panel_type()
656 static int pnpid_get_panel_type(struct intel_display *display, in pnpid_get_panel_type() argument
675 p = drm_dbg_printer(display->drm, DRM_UT_KMS, "EDID"); in pnpid_get_panel_type()
678 ptrs = bdb_find_section(display, BDB_LFP_DATA_PTRS); in pnpid_get_panel_type()
682 data = bdb_find_section(display, BDB_LFP_DATA); in pnpid_get_panel_type()
706 static int fallback_get_panel_type(struct intel_display *display, in fallback_get_panel_type() argument
720 static int get_panel_type(struct intel_display *display, in get_panel_type() argument
726 int (*get_panel_type)(struct intel_display *display, in get_panel_type()
751 panel_types[i].panel_type = panel_types[i].get_panel_type(display, devdata, in get_panel_type()
754 drm_WARN_ON(display->drm, panel_types[i].panel_type > 0xf && in get_panel_type()
758 drm_dbg_kms(display->drm, "Panel type (%s): %d\n", in get_panel_type()
773 drm_dbg_kms(display->drm, "Selected panel type (%s): %d\n", in get_panel_type()
791 parse_panel_options(struct intel_display *display, in parse_panel_options() argument
798 lfp_options = bdb_find_section(display, BDB_LFP_OPTIONS); in parse_panel_options()
822 drm_dbg_kms(display->drm, "DRRS supported mode is static\n"); in parse_panel_options()
826 drm_dbg_kms(display->drm, in parse_panel_options()
831 drm_dbg_kms(display->drm, in parse_panel_options()
838 parse_lfp_panel_dtd(struct intel_display *display, in parse_lfp_panel_dtd() argument
856 fill_detail_timing_data(display, panel_fixed_mode, panel_dvo_timing); in parse_lfp_panel_dtd()
860 drm_dbg_kms(display->drm, in parse_lfp_panel_dtd()
872 drm_dbg_kms(display->drm, in parse_lfp_panel_dtd()
879 parse_lfp_data(struct intel_display *display, in parse_lfp_data() argument
889 ptrs = bdb_find_section(display, BDB_LFP_DATA_PTRS); in parse_lfp_data()
893 data = bdb_find_section(display, BDB_LFP_DATA); in parse_lfp_data()
898 parse_lfp_panel_dtd(display, panel, data, ptrs); in parse_lfp_data()
902 p = drm_dbg_printer(display->drm, DRM_UT_KMS, "Panel"); in parse_lfp_data()
909 drm_dbg_kms(display->drm, "Panel name: %.*s\n", in parse_lfp_data()
913 if (display->vbt.version >= 188) { in parse_lfp_data()
916 drm_dbg_kms(display->drm, in parse_lfp_data()
923 parse_generic_dtd(struct intel_display *display, in parse_generic_dtd() argument
939 if (display->vbt.version < 229) in parse_generic_dtd()
942 generic_dtd = bdb_find_section(display, BDB_GENERIC_DTD); in parse_generic_dtd()
947 drm_err(display->drm, "GDTD size %u is too small.\n", in parse_generic_dtd()
952 drm_err(display->drm, "Unexpected GDTD size %u\n", in parse_generic_dtd()
960 drm_err(display->drm, in parse_generic_dtd()
1005 drm_dbg_kms(display->drm, in parse_generic_dtd()
1013 parse_lfp_backlight(struct intel_display *display, in parse_lfp_backlight() argument
1021 backlight_data = bdb_find_section(display, BDB_LFP_BACKLIGHT); in parse_lfp_backlight()
1026 drm_dbg_kms(display->drm, in parse_lfp_backlight()
1036 drm_dbg_kms(display->drm, in parse_lfp_backlight()
1044 if (display->vbt.version >= 191) { in parse_lfp_backlight()
1055 if (display->vbt.version >= 234) { in parse_lfp_backlight()
1062 if (display->vbt.version >= 236) in parse_lfp_backlight()
1071 drm_warn(display->drm, "Brightness min level > 255\n"); in parse_lfp_backlight()
1083 if (display->vbt.version >= 239) in parse_lfp_backlight()
1089 drm_dbg_kms(display->drm, in parse_lfp_backlight()
1100 parse_sdvo_lvds_data(struct intel_display *display, in parse_sdvo_lvds_data() argument
1107 index = display->params.vbt_sdvo_panel_type; in parse_sdvo_lvds_data()
1109 drm_dbg_kms(display->drm, in parse_sdvo_lvds_data()
1117 sdvo_lvds_options = bdb_find_section(display, BDB_SDVO_LVDS_OPTIONS); in parse_sdvo_lvds_data()
1124 dtd = bdb_find_section(display, BDB_SDVO_LVDS_DTD); in parse_sdvo_lvds_data()
1135 drm_err(display->drm, in parse_sdvo_lvds_data()
1145 fill_detail_timing_data(display, panel_fixed_mode, &dtd->dtd[index]); in parse_sdvo_lvds_data()
1149 drm_dbg_kms(display->drm, in parse_sdvo_lvds_data()
1154 static int intel_bios_ssc_frequency(struct intel_display *display, in intel_bios_ssc_frequency() argument
1157 switch (DISPLAY_VER(display)) { in intel_bios_ssc_frequency()
1169 parse_general_features(struct intel_display *display) in parse_general_features() argument
1171 struct drm_i915_private *i915 = to_i915(display->drm); in parse_general_features()
1174 general = bdb_find_section(display, BDB_GENERAL_FEATURES); in parse_general_features()
1178 display->vbt.int_tv_support = general->int_tv_support; in parse_general_features()
1180 if (display->vbt.version >= 155 && in parse_general_features()
1181 (HAS_DDI(display) || IS_VALLEYVIEW(i915))) in parse_general_features()
1182 display->vbt.int_crt_support = general->int_crt_support; in parse_general_features()
1183 display->vbt.lvds_use_ssc = general->enable_ssc; in parse_general_features()
1184 display->vbt.lvds_ssc_freq = in parse_general_features()
1185 intel_bios_ssc_frequency(display, general->ssc_freq); in parse_general_features()
1186 display->vbt.display_clock_mode = general->display_clock_mode; in parse_general_features()
1187 display->vbt.fdi_rx_polarity_inverted = general->fdi_rx_polarity_inverted; in parse_general_features()
1188 if (display->vbt.version >= 181) { in parse_general_features()
1189 display->vbt.orientation = general->rotate_180 ? in parse_general_features()
1193 display->vbt.orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN; in parse_general_features()
1196 if (display->vbt.version >= 249 && general->afc_startup_config) { in parse_general_features()
1197 display->vbt.override_afc_startup = true; in parse_general_features()
1198 display->vbt.override_afc_startup_val = general->afc_startup_config == 1 ? 0 : 7; in parse_general_features()
1201 drm_dbg_kms(display->drm, in parse_general_features()
1203 display->vbt.int_tv_support, in parse_general_features()
1204 display->vbt.int_crt_support, in parse_general_features()
1205 display->vbt.lvds_use_ssc, in parse_general_features()
1206 display->vbt.lvds_ssc_freq, in parse_general_features()
1207 display->vbt.display_clock_mode, in parse_general_features()
1208 display->vbt.fdi_rx_polarity_inverted); in parse_general_features()
1218 parse_sdvo_device_mapping(struct intel_display *display) in parse_sdvo_device_mapping() argument
1227 if (!IS_DISPLAY_VER(display, 3, 7)) { in parse_sdvo_device_mapping()
1228 drm_dbg_kms(display->drm, "Skipping SDVO device mapping\n"); in parse_sdvo_device_mapping()
1232 list_for_each_entry(devdata, &display->vbt.display_devices, node) { in parse_sdvo_device_mapping()
1247 drm_dbg_kms(display->drm, in parse_sdvo_device_mapping()
1251 drm_dbg_kms(display->drm, in parse_sdvo_device_mapping()
1257 mapping = &display->vbt.sdvo_mappings[child->dvo_port - 1]; in parse_sdvo_device_mapping()
1265 drm_dbg_kms(display->drm, in parse_sdvo_device_mapping()
1271 drm_dbg_kms(display->drm, in parse_sdvo_device_mapping()
1278 drm_dbg_kms(display->drm, in parse_sdvo_device_mapping()
1287 drm_dbg_kms(display->drm, in parse_sdvo_device_mapping()
1293 parse_driver_features(struct intel_display *display) in parse_driver_features() argument
1297 driver = bdb_find_section(display, BDB_DRIVER_FEATURES); in parse_driver_features()
1301 if (DISPLAY_VER(display) >= 5) { in parse_driver_features()
1308 display->vbt.int_lvds_support = 0; in parse_driver_features()
1321 if (display->vbt.version >= 134 && in parse_driver_features()
1324 display->vbt.int_lvds_support = 0; in parse_driver_features()
1329 parse_panel_driver_features(struct intel_display *display, in parse_panel_driver_features() argument
1334 driver = bdb_find_section(display, BDB_DRIVER_FEATURES); in parse_panel_driver_features()
1338 if (display->vbt.version < 228) { in parse_panel_driver_features()
1339 drm_dbg_kms(display->drm, "DRRS State Enabled:%d\n", in parse_panel_driver_features()
1363 parse_power_conservation_features(struct intel_display *display, in parse_power_conservation_features() argument
1371 if (display->vbt.version < 228) in parse_power_conservation_features()
1374 power = bdb_find_section(display, BDB_LFP_POWER); in parse_power_conservation_features()
1397 if (display->vbt.version >= 232) in parse_power_conservation_features()
1400 if (display->vbt.version >= 233) in parse_power_conservation_features()
1406 parse_edp(struct intel_display *display, in parse_edp() argument
1414 edp = bdb_find_section(display, BDB_EDP); in parse_edp()
1436 if (display->vbt.version >= 224) { in parse_edp()
1451 drm_dbg_kms(display->drm, in parse_edp()
1469 drm_dbg_kms(display->drm, in parse_edp()
1489 drm_dbg_kms(display->drm, in parse_edp()
1509 drm_dbg_kms(display->drm, in parse_edp()
1515 if (display->vbt.version >= 173) { in parse_edp()
1519 if (display->params.edp_vswing) { in parse_edp()
1521 display->params.edp_vswing == 1; in parse_edp()
1531 if (display->vbt.version >= 244) in parse_edp()
1535 if (display->vbt.version >= 251) in parse_edp()
1541 parse_psr(struct intel_display *display, in parse_psr() argument
1544 struct drm_i915_private *i915 = to_i915(display->drm); in parse_psr()
1549 psr = bdb_find_section(display, BDB_PSR); in parse_psr()
1551 drm_dbg_kms(display->drm, "No PSR BDB found.\n"); in parse_psr()
1568 if (display->vbt.version >= 205 && in parse_psr()
1569 (DISPLAY_VER(display) >= 9 && !IS_BROXTON(i915))) { in parse_psr()
1581 drm_dbg_kms(display->drm, in parse_psr()
1601 drm_dbg_kms(display->drm, in parse_psr()
1614 if (display->vbt.version >= 226) { in parse_psr()
1640 static void parse_dsi_backlight_ports(struct intel_display *display, in parse_dsi_backlight_ports() argument
1644 enum port port_bc = DISPLAY_VER(display) >= 11 ? PORT_B : PORT_C; in parse_dsi_backlight_ports()
1646 if (!panel->vbt.dsi.config->dual_link || display->vbt.version < 197) { in parse_dsi_backlight_ports()
1686 parse_mipi_config(struct intel_display *display, in parse_mipi_config() argument
1696 if (!intel_bios_is_dsi_present(display, &port)) in parse_mipi_config()
1702 start = bdb_find_section(display, BDB_MIPI_CONFIG); in parse_mipi_config()
1704 drm_dbg_kms(display->drm, "No MIPI config BDB found"); in parse_mipi_config()
1708 drm_dbg(display->drm, "Found MIPI Config block, panel index = %d\n", in parse_mipi_config()
1729 parse_dsi_backlight_ports(display, panel, port); in parse_mipi_config()
1761 find_panel_sequence_block(struct intel_display *display, in find_panel_sequence_block() argument
1779 drm_err(display->drm, in find_panel_sequence_block()
1793 drm_err(display->drm, "Invalid sequence block\n"); in find_panel_sequence_block()
1805 drm_err(display->drm, in find_panel_sequence_block()
1811 static int goto_next_sequence(struct intel_display *display, in goto_next_sequence() argument
1842 drm_err(display->drm, "Unknown operation byte\n"); in goto_next_sequence()
1850 static int goto_next_sequence_v3(struct intel_display *display, in goto_next_sequence_v3() argument
1862 drm_err(display->drm, "Too small sequence size\n"); in goto_next_sequence_v3()
1879 drm_err(display->drm, "Invalid sequence size\n"); in goto_next_sequence_v3()
1889 drm_err(display->drm, in goto_next_sequence_v3()
1912 drm_err(display->drm, "Unknown operation byte %u\n", in goto_next_sequence_v3()
1925 static int get_init_otp_deassert_fragment_len(struct intel_display *display, in get_init_otp_deassert_fragment_len() argument
1931 if (drm_WARN_ON(display->drm, in get_init_otp_deassert_fragment_len()
1960 static void vlv_fixup_mipi_sequences(struct intel_display *display, in vlv_fixup_mipi_sequences() argument
1978 len = get_init_otp_deassert_fragment_len(display, panel); in vlv_fixup_mipi_sequences()
1982 drm_dbg_kms(display->drm, in vlv_fixup_mipi_sequences()
2015 static void icl_fixup_mipi_sequences(struct intel_display *display, in icl_fixup_mipi_sequences() argument
2020 drm_dbg_kms(display->drm, in icl_fixup_mipi_sequences()
2028 static void fixup_mipi_sequences(struct intel_display *display, in fixup_mipi_sequences() argument
2031 struct drm_i915_private *i915 = to_i915(display->drm); in fixup_mipi_sequences()
2033 if (DISPLAY_VER(display) >= 11) in fixup_mipi_sequences()
2034 icl_fixup_mipi_sequences(display, panel); in fixup_mipi_sequences()
2036 vlv_fixup_mipi_sequences(display, panel); in fixup_mipi_sequences()
2040 parse_mipi_sequence(struct intel_display *display, in parse_mipi_sequence() argument
2054 sequence = bdb_find_section(display, BDB_MIPI_SEQUENCE); in parse_mipi_sequence()
2056 drm_dbg_kms(display->drm, in parse_mipi_sequence()
2063 drm_err(display->drm, in parse_mipi_sequence()
2069 drm_dbg(display->drm, "Found MIPI sequence block v%u\n", in parse_mipi_sequence()
2072 seq_data = find_panel_sequence_block(display, sequence, panel_type, &seq_size); in parse_mipi_sequence()
2087 drm_err(display->drm, "Unknown sequence %u\n", in parse_mipi_sequence()
2094 drm_dbg_kms(display->drm, in parse_mipi_sequence()
2100 index = goto_next_sequence_v3(display, data, index, seq_size); in parse_mipi_sequence()
2102 index = goto_next_sequence(display, data, index, seq_size); in parse_mipi_sequence()
2104 drm_err(display->drm, "Invalid sequence %u\n", in parse_mipi_sequence()
2114 fixup_mipi_sequences(display, panel); in parse_mipi_sequence()
2116 drm_dbg(display->drm, "MIPI related VBT parsing complete\n"); in parse_mipi_sequence()
2125 parse_compression_parameters(struct intel_display *display) in parse_compression_parameters() argument
2132 if (display->vbt.version < 198) in parse_compression_parameters()
2135 params = bdb_find_section(display, BDB_COMPRESSION_PARAMETERS); in parse_compression_parameters()
2139 drm_dbg_kms(display->drm, in parse_compression_parameters()
2146 drm_dbg_kms(display->drm, in parse_compression_parameters()
2152 list_for_each_entry(devdata, &display->vbt.display_devices, node) { in parse_compression_parameters()
2159 drm_dbg_kms(display->drm, in parse_compression_parameters()
2165 drm_dbg_kms(display->drm, in parse_compression_parameters()
2177 static u8 translate_iboost(struct intel_display *display, u8 val) in translate_iboost() argument
2182 drm_dbg_kms(display->drm, in translate_iboost()
2183 "Unsupported I_boost value found in VBT (%d), display may not work properly\n", val); in translate_iboost()
2239 static u8 map_ddc_pin(struct intel_display *display, u8 vbt_pin) in map_ddc_pin() argument
2241 struct drm_i915_private *i915 = to_i915(display->drm); in map_ddc_pin()
2256 } else if (HAS_PCH_TGP(i915) && DISPLAY_VER(display) == 9) { in map_ddc_pin()
2275 drm_dbg_kms(display->drm, in map_ddc_pin()
2333 static enum port dvo_port_to_port(struct intel_display *display, in dvo_port_to_port() argument
2336 struct drm_i915_private *i915 = to_i915(display->drm); in dvo_port_to_port()
2388 if (DISPLAY_VER(display) >= 13) in dvo_port_to_port()
2411 dsi_dvo_port_to_port(struct intel_display *display, u8 dvo_port) in dsi_dvo_port_to_port() argument
2417 if (DISPLAY_VER(display) >= 11) in dsi_dvo_port_to_port()
2428 struct intel_display *display = devdata->display; in intel_bios_encoder_port() local
2432 port = dvo_port_to_port(display, child->dvo_port); in intel_bios_encoder_port()
2433 if (port == PORT_NONE && DISPLAY_VER(display) >= 11) in intel_bios_encoder_port()
2434 port = dsi_dvo_port_to_port(display, child->dvo_port); in intel_bios_encoder_port()
2479 if (!devdata || devdata->display->vbt.version < 216) in intel_bios_dp_max_link_rate()
2482 if (devdata->display->vbt.version >= 230) in intel_bios_dp_max_link_rate()
2490 if (!devdata || devdata->display->vbt.version < 244) in intel_bios_dp_max_lane_count()
2499 struct intel_display *display = devdata->display; in sanitize_device_type() local
2502 if (port != PORT_A || DISPLAY_VER(display) >= 12) in sanitize_device_type()
2510 drm_dbg_kms(display->drm, "VBT claims port A supports DVI%s, ignoring\n", in sanitize_device_type()
2520 struct intel_display *display = devdata->display; in sanitize_hdmi_level_shift() local
2521 struct drm_i915_private *i915 = to_i915(display->drm); in sanitize_hdmi_level_shift()
2532 drm_dbg_kms(display->drm, in sanitize_hdmi_level_shift()
2581 return devdata && HAS_LSPCON(devdata->display) && devdata->child.lspcon; in intel_bios_encoder_is_lspcon()
2587 if (!devdata || devdata->display->vbt.version < 158 || in intel_bios_hdmi_level_shift()
2588 DISPLAY_VER(devdata->display) >= 14) in intel_bios_hdmi_level_shift()
2596 if (!devdata || devdata->display->vbt.version < 204) in intel_bios_hdmi_max_tmds_clock()
2618 static bool is_port_valid(struct intel_display *display, enum port port) in is_port_valid() argument
2620 struct drm_i915_private *i915 = to_i915(display->drm); in is_port_valid()
2634 struct intel_display *display = devdata->display; in print_ddi_port() local
2654 drm_dbg_kms(display->drm, in print_ddi_port()
2664 drm_dbg_kms(display->drm, in print_ddi_port()
2671 drm_dbg_kms(display->drm, in print_ddi_port()
2678 drm_dbg_kms(display->drm, in print_ddi_port()
2684 drm_dbg_kms(display->drm, in print_ddi_port()
2690 drm_dbg_kms(display->drm, in print_ddi_port()
2698 drm_WARN(display->drm, child->use_vbt_vswing, in print_ddi_port()
2705 struct intel_display *display = devdata->display; in parse_ddi_port() local
2712 if (!is_port_valid(display, port)) { in parse_ddi_port()
2713 drm_dbg_kms(display->drm, in parse_ddi_port()
2723 static bool has_ddi_port_info(struct intel_display *display) in has_ddi_port_info() argument
2725 struct drm_i915_private *i915 = to_i915(display->drm); in has_ddi_port_info()
2727 return DISPLAY_VER(display) >= 5 || IS_G4X(i915); in has_ddi_port_info()
2730 static void parse_ddi_ports(struct intel_display *display) in parse_ddi_ports() argument
2734 if (!has_ddi_port_info(display)) in parse_ddi_ports()
2737 list_for_each_entry(devdata, &display->vbt.display_devices, node) in parse_ddi_ports()
2740 list_for_each_entry(devdata, &display->vbt.display_devices, node) in parse_ddi_ports()
2766 static bool child_device_size_valid(struct intel_display *display, int size) in child_device_size_valid() argument
2770 expected_size = child_device_expected_size(display->vbt.version); in child_device_size_valid()
2773 drm_dbg(display->drm, in child_device_size_valid()
2775 display->vbt.version, expected_size); in child_device_size_valid()
2780 drm_err(display->drm, in child_device_size_valid()
2782 size, expected_size, display->vbt.version); in child_device_size_valid()
2786 drm_dbg_kms(display->drm, in child_device_size_valid()
2796 parse_general_definitions(struct intel_display *display) in parse_general_definitions() argument
2798 struct drm_i915_private *i915 = to_i915(display->drm); in parse_general_definitions()
2806 defs = bdb_find_section(display, BDB_GENERAL_DEFINITIONS); in parse_general_definitions()
2808 drm_dbg_kms(display->drm, in parse_general_definitions()
2815 drm_dbg_kms(display->drm, in parse_general_definitions()
2822 drm_dbg_kms(display->drm, "crt_ddc_bus_pin: %d\n", bus_pin); in parse_general_definitions()
2824 display->vbt.crt_ddc_pin = bus_pin; in parse_general_definitions()
2826 if (!child_device_size_valid(display, defs->child_dev_size)) in parse_general_definitions()
2837 drm_dbg_kms(display->drm, in parse_general_definitions()
2845 devdata->display = display; in parse_general_definitions()
2855 list_add_tail(&devdata->node, &display->vbt.display_devices); in parse_general_definitions()
2858 if (list_empty(&display->vbt.display_devices)) in parse_general_definitions()
2859 drm_dbg_kms(display->drm, in parse_general_definitions()
2865 init_vbt_defaults(struct intel_display *display) in init_vbt_defaults() argument
2867 struct drm_i915_private *i915 = to_i915(display->drm); in init_vbt_defaults()
2869 display->vbt.crt_ddc_pin = GMBUS_PIN_VGADDC; in init_vbt_defaults()
2872 display->vbt.int_tv_support = 1; in init_vbt_defaults()
2873 display->vbt.int_crt_support = 1; in init_vbt_defaults()
2876 display->vbt.int_lvds_support = 1; in init_vbt_defaults()
2879 display->vbt.lvds_use_ssc = 1; in init_vbt_defaults()
2884 display->vbt.lvds_ssc_freq = intel_bios_ssc_frequency(display, in init_vbt_defaults()
2886 drm_dbg_kms(display->drm, "Set default to SSC at %d kHz\n", in init_vbt_defaults()
2887 display->vbt.lvds_ssc_freq); in init_vbt_defaults()
2903 init_vbt_missing_defaults(struct intel_display *display) in init_vbt_missing_defaults() argument
2905 struct drm_i915_private *i915 = to_i915(display->drm); in init_vbt_missing_defaults()
2906 unsigned int ports = DISPLAY_RUNTIME_INFO(display)->port_mask; in init_vbt_missing_defaults()
2909 if (!HAS_DDI(display) && !IS_CHERRYVIEW(i915)) in init_vbt_missing_defaults()
2929 devdata->display = display; in init_vbt_missing_defaults()
2948 list_add_tail(&devdata->node, &display->vbt.display_devices); in init_vbt_missing_defaults()
2950 drm_dbg_kms(display->drm, in init_vbt_missing_defaults()
2956 display->vbt.version = 155; in init_vbt_missing_defaults()
2968 * @display: display device
2974 bool intel_bios_is_valid_vbt(struct intel_display *display, in intel_bios_is_valid_vbt() argument
2984 drm_dbg_kms(display->drm, "VBT header incomplete\n"); in intel_bios_is_valid_vbt()
2989 drm_dbg_kms(display->drm, "VBT invalid signature\n"); in intel_bios_is_valid_vbt()
2994 drm_dbg_kms(display->drm, in intel_bios_is_valid_vbt()
3005 drm_dbg_kms(display->drm, "BDB header incomplete\n"); in intel_bios_is_valid_vbt()
3011 drm_dbg_kms(display->drm, "BDB incomplete\n"); in intel_bios_is_valid_vbt()
3018 static struct vbt_header *firmware_get_vbt(struct intel_display *display, in firmware_get_vbt() argument
3023 const char *name = display->params.vbt_firmware; in firmware_get_vbt()
3029 ret = request_firmware(&fw, name, display->drm->dev); in firmware_get_vbt()
3031 drm_err(display->drm, in firmware_get_vbt()
3037 if (intel_bios_is_valid_vbt(display, fw->data, fw->size)) { in firmware_get_vbt()
3040 drm_dbg_kms(display->drm, in firmware_get_vbt()
3046 drm_dbg_kms(display->drm, "Invalid VBT firmware \"%s\"\n", in firmware_get_vbt()
3062 static struct vbt_header *spi_oprom_get_vbt(struct intel_display *display, in spi_oprom_get_vbt() argument
3065 struct drm_i915_private *i915 = to_i915(display->drm); in spi_oprom_get_vbt()
3102 if (!intel_bios_is_valid_vbt(display, vbt, vbt_size)) in spi_oprom_get_vbt()
3105 drm_dbg_kms(display->drm, "Found valid VBT in SPI flash\n"); in spi_oprom_get_vbt()
3118 static struct vbt_header *oprom_get_vbt(struct intel_display *display, in oprom_get_vbt() argument
3121 struct pci_dev *pdev = to_pci_dev(display->drm->dev); in oprom_get_vbt()
3145 drm_dbg(display->drm, "VBT header incomplete\n"); in oprom_get_vbt()
3151 drm_dbg(display->drm, in oprom_get_vbt()
3163 if (!intel_bios_is_valid_vbt(display, vbt, vbt_size)) in oprom_get_vbt()
3171 drm_dbg_kms(display->drm, "Found valid VBT in PCI ROM\n"); in oprom_get_vbt()
3183 static const struct vbt_header *intel_bios_get_vbt(struct intel_display *display, in intel_bios_get_vbt() argument
3186 struct drm_i915_private *i915 = to_i915(display->drm); in intel_bios_get_vbt()
3190 vbt = firmware_get_vbt(display, sizep); in intel_bios_get_vbt()
3193 vbt = intel_opregion_get_vbt(display, sizep); in intel_bios_get_vbt()
3201 vbt = spi_oprom_get_vbt(display, sizep); in intel_bios_get_vbt()
3205 vbt = oprom_get_vbt(display, sizep); in intel_bios_get_vbt()
3212 * @display: display device instance
3218 void intel_bios_init(struct intel_display *display) in intel_bios_init() argument
3223 INIT_LIST_HEAD(&display->vbt.display_devices); in intel_bios_init()
3224 INIT_LIST_HEAD(&display->vbt.bdb_blocks); in intel_bios_init()
3226 if (!HAS_DISPLAY(display)) { in intel_bios_init()
3227 drm_dbg_kms(display->drm, in intel_bios_init()
3228 "Skipping VBT init due to disabled display.\n"); in intel_bios_init()
3232 init_vbt_defaults(display); in intel_bios_init()
3234 vbt = intel_bios_get_vbt(display, NULL); in intel_bios_init()
3240 display->vbt.version = bdb->version; in intel_bios_init()
3242 drm_dbg_kms(display->drm, in intel_bios_init()
3245 display->vbt.version); in intel_bios_init()
3247 init_bdb_blocks(display, bdb); in intel_bios_init()
3250 parse_general_features(display); in intel_bios_init()
3251 parse_general_definitions(display); in intel_bios_init()
3252 parse_driver_features(display); in intel_bios_init()
3255 parse_compression_parameters(display); in intel_bios_init()
3259 drm_info(display->drm, in intel_bios_init()
3261 init_vbt_missing_defaults(display); in intel_bios_init()
3265 parse_sdvo_device_mapping(display); in intel_bios_init()
3266 parse_ddi_ports(display); in intel_bios_init()
3271 static void intel_bios_init_panel(struct intel_display *display, in intel_bios_init_panel() argument
3279 drm_WARN_ON(display->drm, !use_fallback); in intel_bios_init_panel()
3283 panel->vbt.panel_type = get_panel_type(display, devdata, in intel_bios_init_panel()
3286 drm_WARN_ON(display->drm, use_fallback); in intel_bios_init_panel()
3292 parse_panel_options(display, panel); in intel_bios_init_panel()
3293 parse_generic_dtd(display, panel); in intel_bios_init_panel()
3294 parse_lfp_data(display, panel); in intel_bios_init_panel()
3295 parse_lfp_backlight(display, panel); in intel_bios_init_panel()
3296 parse_sdvo_lvds_data(display, panel); in intel_bios_init_panel()
3297 parse_panel_driver_features(display, panel); in intel_bios_init_panel()
3298 parse_power_conservation_features(display, panel); in intel_bios_init_panel()
3299 parse_edp(display, panel); in intel_bios_init_panel()
3300 parse_psr(display, panel); in intel_bios_init_panel()
3301 parse_mipi_config(display, panel); in intel_bios_init_panel()
3302 parse_mipi_sequence(display, panel); in intel_bios_init_panel()
3305 void intel_bios_init_panel_early(struct intel_display *display, in intel_bios_init_panel_early() argument
3309 intel_bios_init_panel(display, panel, devdata, NULL, false); in intel_bios_init_panel_early()
3312 void intel_bios_init_panel_late(struct intel_display *display, in intel_bios_init_panel_late() argument
3317 intel_bios_init_panel(display, panel, devdata, drm_edid, true); in intel_bios_init_panel_late()
3322 * @display: display device instance
3324 void intel_bios_driver_remove(struct intel_display *display) in intel_bios_driver_remove() argument
3329 list_for_each_entry_safe(devdata, nd, &display->vbt.display_devices, in intel_bios_driver_remove()
3336 list_for_each_entry_safe(entry, ne, &display->vbt.bdb_blocks, node) { in intel_bios_driver_remove()
3360 * @display: display device instance
3365 bool intel_bios_is_tv_present(struct intel_display *display) in intel_bios_is_tv_present() argument
3369 if (!display->vbt.int_tv_support) in intel_bios_is_tv_present()
3372 if (list_empty(&display->vbt.display_devices)) in intel_bios_is_tv_present()
3375 list_for_each_entry(devdata, &display->vbt.display_devices, node) { in intel_bios_is_tv_present()
3401 * @display: display device instance
3407 bool intel_bios_is_lvds_present(struct intel_display *display, u8 *i2c_pin) in intel_bios_is_lvds_present() argument
3409 struct drm_i915_private *i915 = to_i915(display->drm); in intel_bios_is_lvds_present()
3412 if (list_empty(&display->vbt.display_devices)) in intel_bios_is_lvds_present()
3415 list_for_each_entry(devdata, &display->vbt.display_devices, node) { in intel_bios_is_lvds_present()
3442 return intel_opregion_vbt_present(display); in intel_bios_is_lvds_present()
3450 * @display: display device instance
3455 bool intel_bios_is_port_present(struct intel_display *display, enum port port) in intel_bios_is_port_present() argument
3459 if (WARN_ON(!has_ddi_port_info(display))) in intel_bios_is_port_present()
3462 if (!is_port_valid(display, port)) in intel_bios_is_port_present()
3465 list_for_each_entry(devdata, &display->vbt.display_devices, node) { in intel_bios_is_port_present()
3468 if (dvo_port_to_port(display, child->dvo_port) == port) in intel_bios_is_port_present()
3499 * @display: display device instance
3504 bool intel_bios_is_dsi_present(struct intel_display *display, in intel_bios_is_dsi_present() argument
3509 list_for_each_entry(devdata, &display->vbt.display_devices, node) { in intel_bios_is_dsi_present()
3516 if (dsi_dvo_port_to_port(display, dvo_port) == PORT_NONE) { in intel_bios_is_dsi_present()
3517 drm_dbg_kms(display->drm, in intel_bios_is_dsi_present()
3524 *port = dsi_dvo_port_to_port(display, dvo_port); in intel_bios_is_dsi_present()
3535 struct intel_display *display = to_intel_display(crtc_state); in fill_dsc() local
3549 drm_dbg_kms(display->drm, "VBT: Unsupported BPC %d for DCS\n", in fill_dsc()
3570 drm_dbg_kms(display->drm, in fill_dsc()
3578 drm_dbg_kms(display->drm, in fill_dsc()
3603 struct intel_display *display = to_intel_display(encoder); in intel_bios_get_dsc_params() local
3606 list_for_each_entry(devdata, &display->vbt.display_devices, node) { in intel_bios_get_dsc_params()
3612 if (dsi_dvo_port_to_port(display, child->dvo_port) == encoder->port) { in intel_bios_get_dsc_params()
3672 static enum aux_ch map_aux_ch(struct intel_display *display, u8 aux_channel) in map_aux_ch() argument
3674 struct drm_i915_private *i915 = to_i915(display->drm); in map_aux_ch()
3678 if (DISPLAY_VER(display) >= 13) { in map_aux_ch()
3697 drm_dbg_kms(display->drm, in map_aux_ch()
3709 return map_aux_ch(devdata->display, devdata->child.aux_channel); in intel_bios_dp_aux_ch()
3714 struct intel_display *display; in intel_bios_dp_has_shared_aux_ch() local
3721 display = devdata->display; in intel_bios_dp_has_shared_aux_ch()
3724 list_for_each_entry(devdata, &display->vbt.display_devices, node) { in intel_bios_dp_has_shared_aux_ch()
3735 if (!devdata || devdata->display->vbt.version < 196 || !devdata->child.iboost) in intel_bios_dp_boost_level()
3738 return translate_iboost(devdata->display, devdata->child.dp_iboost_level); in intel_bios_dp_boost_level()
3743 if (!devdata || devdata->display->vbt.version < 196 || !devdata->child.iboost) in intel_bios_hdmi_boost_level()
3746 return translate_iboost(devdata->display, devdata->child.hdmi_iboost_level); in intel_bios_hdmi_boost_level()
3754 return map_ddc_pin(devdata->display, devdata->child.ddc_pin); in intel_bios_hdmi_ddc_pin()
3759 return devdata->display->vbt.version >= 195 && devdata->child.dp_usb_type_c; in intel_bios_encoder_supports_typec_usb()
3764 return devdata->display->vbt.version >= 209 && devdata->child.tbt; in intel_bios_encoder_supports_tbt()
3778 intel_bios_encoder_data_lookup(struct intel_display *display, enum port port) in intel_bios_encoder_data_lookup() argument
3782 list_for_each_entry(devdata, &display->vbt.display_devices, node) { in intel_bios_encoder_data_lookup()
3790 void intel_bios_for_each_encoder(struct intel_display *display, in intel_bios_for_each_encoder() argument
3791 void (*func)(struct intel_display *display, in intel_bios_for_each_encoder() argument
3796 list_for_each_entry(devdata, &display->vbt.display_devices, node) in intel_bios_for_each_encoder()
3797 func(display, devdata); in intel_bios_for_each_encoder()
3802 struct intel_display *display = m->private; in intel_bios_vbt_show() local
3806 vbt = intel_bios_get_vbt(display, &vbt_size); in intel_bios_vbt_show()
3818 void intel_bios_debugfs_register(struct intel_display *display) in intel_bios_debugfs_register() argument
3820 struct drm_minor *minor = display->drm->primary; in intel_bios_debugfs_register()
3823 display, &intel_bios_vbt_fops); in intel_bios_debugfs_register()