Lines Matching full:i915

65 	struct drm_i915_private *i915;  member
144 bdb_find_section(struct drm_i915_private *i915, in bdb_find_section() argument
149 list_for_each_entry(entry, &i915->display.vbt.bdb_blocks, node) { in bdb_find_section()
199 static size_t lfp_data_min_size(struct drm_i915_private *i915) in lfp_data_min_size() argument
204 ptrs = bdb_find_section(i915, BDB_LVDS_LFP_DATA_PTRS); in lfp_data_min_size()
359 static void *generate_lfp_data_ptrs(struct drm_i915_private *i915, in generate_lfp_data_ptrs() argument
373 if (i915->display.vbt.version < 155) in generate_lfp_data_ptrs()
382 drm_dbg_kms(&i915->drm, "Generating LFP data table pointers\n"); in generate_lfp_data_ptrs()
450 init_bdb_block(struct drm_i915_private *i915, in init_bdb_block() argument
463 temp_block = generate_lfp_data_ptrs(i915, bdb); in init_bdb_block()
470 drm_WARN(&i915->drm, min_size == 0, in init_bdb_block()
494 drm_dbg_kms(&i915->drm, "Found BDB block %d (size %zu, min size %zu)\n", in init_bdb_block()
499 drm_err(&i915->drm, "VBT has malformed LFP data table pointers\n"); in init_bdb_block()
504 list_add_tail(&entry->node, &i915->display.vbt.bdb_blocks); in init_bdb_block()
507 static void init_bdb_blocks(struct drm_i915_private *i915, in init_bdb_blocks() argument
517 min_size = lfp_data_min_size(i915); in init_bdb_blocks()
519 init_bdb_block(i915, bdb, section_id, min_size); in init_bdb_blocks()
524 fill_detail_timing_data(struct drm_i915_private *i915, in fill_detail_timing_data() argument
567 drm_dbg_kms(&i915->drm, "reducing hsync_end %d->%d\n", in fill_detail_timing_data()
572 drm_dbg_kms(&i915->drm, "reducing vsync_end %d->%d\n", in fill_detail_timing_data()
614 static void dump_pnp_id(struct drm_i915_private *i915, in dump_pnp_id() argument
621 drm_dbg_kms(&i915->drm, "%s PNPID mfg: %s (0x%x), prod: %u, serial: %u, week: %d, year: %d\n", in dump_pnp_id()
627 static int opregion_get_panel_type(struct drm_i915_private *i915, in opregion_get_panel_type() argument
631 return intel_opregion_get_panel_type(i915); in opregion_get_panel_type()
634 static int vbt_get_panel_type(struct drm_i915_private *i915, in vbt_get_panel_type() argument
640 lvds_options = bdb_find_section(i915, BDB_LVDS_OPTIONS); in vbt_get_panel_type()
646 drm_dbg_kms(&i915->drm, "Invalid VBT panel type 0x%x\n", in vbt_get_panel_type()
654 drm_WARN_ON(&i915->drm, devdata && devdata->child.handle != DEVICE_HANDLE_LFP1); in vbt_get_panel_type()
659 static int pnpid_get_panel_type(struct drm_i915_private *i915, in pnpid_get_panel_type() argument
679 dump_pnp_id(i915, edid_id, "EDID"); in pnpid_get_panel_type()
681 ptrs = bdb_find_section(i915, BDB_LVDS_LFP_DATA_PTRS); in pnpid_get_panel_type()
685 data = bdb_find_section(i915, BDB_LVDS_LFP_DATA); in pnpid_get_panel_type()
709 static int fallback_get_panel_type(struct drm_i915_private *i915, in fallback_get_panel_type() argument
723 static int get_panel_type(struct drm_i915_private *i915, in get_panel_type() argument
729 int (*get_panel_type)(struct drm_i915_private *i915, in get_panel_type()
754 panel_types[i].panel_type = panel_types[i].get_panel_type(i915, devdata, in get_panel_type()
757 drm_WARN_ON(&i915->drm, panel_types[i].panel_type > 0xf && in get_panel_type()
761 drm_dbg_kms(&i915->drm, "Panel type (%s): %d\n", in get_panel_type()
776 drm_dbg_kms(&i915->drm, "Selected panel type (%s): %d\n", in get_panel_type()
794 parse_panel_options(struct drm_i915_private *i915, in parse_panel_options() argument
801 lvds_options = bdb_find_section(i915, BDB_LVDS_OPTIONS); in parse_panel_options()
825 drm_dbg_kms(&i915->drm, "DRRS supported mode is static\n"); in parse_panel_options()
829 drm_dbg_kms(&i915->drm, in parse_panel_options()
834 drm_dbg_kms(&i915->drm, in parse_panel_options()
841 parse_lfp_panel_dtd(struct drm_i915_private *i915, in parse_lfp_panel_dtd() argument
859 fill_detail_timing_data(i915, panel_fixed_mode, panel_dvo_timing); in parse_lfp_panel_dtd()
863 drm_dbg_kms(&i915->drm, in parse_lfp_panel_dtd()
875 drm_dbg_kms(&i915->drm, in parse_lfp_panel_dtd()
882 parse_lfp_data(struct drm_i915_private *i915, in parse_lfp_data() argument
891 ptrs = bdb_find_section(i915, BDB_LVDS_LFP_DATA_PTRS); in parse_lfp_data()
895 data = bdb_find_section(i915, BDB_LVDS_LFP_DATA); in parse_lfp_data()
900 parse_lfp_panel_dtd(i915, panel, data, ptrs); in parse_lfp_data()
903 dump_pnp_id(i915, pnp_id, "Panel"); in parse_lfp_data()
909 drm_dbg_kms(&i915->drm, "Panel name: %.*s\n", in parse_lfp_data()
913 if (i915->display.vbt.version >= 188) { in parse_lfp_data()
916 drm_dbg_kms(&i915->drm, in parse_lfp_data()
923 parse_generic_dtd(struct drm_i915_private *i915, in parse_generic_dtd() argument
939 if (i915->display.vbt.version < 229) in parse_generic_dtd()
942 generic_dtd = bdb_find_section(i915, BDB_GENERIC_DTD); in parse_generic_dtd()
947 drm_err(&i915->drm, "GDTD size %u is too small.\n", in parse_generic_dtd()
952 drm_err(&i915->drm, "Unexpected GDTD size %u\n", in parse_generic_dtd()
960 drm_err(&i915->drm, in parse_generic_dtd()
1005 drm_dbg_kms(&i915->drm, in parse_generic_dtd()
1013 parse_lfp_backlight(struct drm_i915_private *i915, in parse_lfp_backlight() argument
1021 backlight_data = bdb_find_section(i915, BDB_LVDS_BACKLIGHT); in parse_lfp_backlight()
1026 drm_dbg_kms(&i915->drm, in parse_lfp_backlight()
1036 drm_dbg_kms(&i915->drm, in parse_lfp_backlight()
1044 if (i915->display.vbt.version >= 191) { in parse_lfp_backlight()
1047 if (i915->display.vbt.version >= 236) in parse_lfp_backlight()
1049 else if (i915->display.vbt.version >= 234) in parse_lfp_backlight()
1066 if (i915->display.vbt.version >= 234) { in parse_lfp_backlight()
1073 if (i915->display.vbt.version >= 236) in parse_lfp_backlight()
1082 drm_warn(&i915->drm, "Brightness min level > 255\n"); in parse_lfp_backlight()
1094 if (i915->display.vbt.version >= 239) in parse_lfp_backlight()
1100 drm_dbg_kms(&i915->drm, in parse_lfp_backlight()
1112 parse_sdvo_panel_data(struct drm_i915_private *i915, in parse_sdvo_panel_data() argument
1119 index = i915->display.params.vbt_sdvo_panel_type; in parse_sdvo_panel_data()
1121 drm_dbg_kms(&i915->drm, in parse_sdvo_panel_data()
1129 sdvo_lvds_options = bdb_find_section(i915, BDB_SDVO_LVDS_OPTIONS); in parse_sdvo_panel_data()
1136 dtds = bdb_find_section(i915, BDB_SDVO_PANEL_DTDS); in parse_sdvo_panel_data()
1144 fill_detail_timing_data(i915, panel_fixed_mode, &dtds->dtds[index]); in parse_sdvo_panel_data()
1148 drm_dbg_kms(&i915->drm, in parse_sdvo_panel_data()
1153 static int intel_bios_ssc_frequency(struct drm_i915_private *i915, in intel_bios_ssc_frequency() argument
1156 switch (DISPLAY_VER(i915)) { in intel_bios_ssc_frequency()
1168 parse_general_features(struct drm_i915_private *i915) in parse_general_features() argument
1172 general = bdb_find_section(i915, BDB_GENERAL_FEATURES); in parse_general_features()
1176 i915->display.vbt.int_tv_support = general->int_tv_support; in parse_general_features()
1178 if (i915->display.vbt.version >= 155 && in parse_general_features()
1179 (HAS_DDI(i915) || IS_VALLEYVIEW(i915))) in parse_general_features()
1180 i915->display.vbt.int_crt_support = general->int_crt_support; in parse_general_features()
1181 i915->display.vbt.lvds_use_ssc = general->enable_ssc; in parse_general_features()
1182 i915->display.vbt.lvds_ssc_freq = in parse_general_features()
1183 intel_bios_ssc_frequency(i915, general->ssc_freq); in parse_general_features()
1184 i915->display.vbt.display_clock_mode = general->display_clock_mode; in parse_general_features()
1185 i915->display.vbt.fdi_rx_polarity_inverted = general->fdi_rx_polarity_inverted; in parse_general_features()
1186 if (i915->display.vbt.version >= 181) { in parse_general_features()
1187 i915->display.vbt.orientation = general->rotate_180 ? in parse_general_features()
1191 i915->display.vbt.orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN; in parse_general_features()
1194 if (i915->display.vbt.version >= 249 && general->afc_startup_config) { in parse_general_features()
1195 i915->display.vbt.override_afc_startup = true; in parse_general_features()
1196 i915->display.vbt.override_afc_startup_val = general->afc_startup_config == 0x1 ? 0x0 : 0x7; in parse_general_features()
1199 drm_dbg_kms(&i915->drm, in parse_general_features()
1201 i915->display.vbt.int_tv_support, in parse_general_features()
1202 i915->display.vbt.int_crt_support, in parse_general_features()
1203 i915->display.vbt.lvds_use_ssc, in parse_general_features()
1204 i915->display.vbt.lvds_ssc_freq, in parse_general_features()
1205 i915->display.vbt.display_clock_mode, in parse_general_features()
1206 i915->display.vbt.fdi_rx_polarity_inverted); in parse_general_features()
1216 parse_sdvo_device_mapping(struct drm_i915_private *i915) in parse_sdvo_device_mapping() argument
1225 if (!IS_DISPLAY_VER(i915, 3, 7)) { in parse_sdvo_device_mapping()
1226 drm_dbg_kms(&i915->drm, "Skipping SDVO device mapping\n"); in parse_sdvo_device_mapping()
1230 list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) { in parse_sdvo_device_mapping()
1245 drm_dbg_kms(&i915->drm, in parse_sdvo_device_mapping()
1249 drm_dbg_kms(&i915->drm, in parse_sdvo_device_mapping()
1255 mapping = &i915->display.vbt.sdvo_mappings[child->dvo_port - 1]; in parse_sdvo_device_mapping()
1263 drm_dbg_kms(&i915->drm, in parse_sdvo_device_mapping()
1269 drm_dbg_kms(&i915->drm, in parse_sdvo_device_mapping()
1276 drm_dbg_kms(&i915->drm, in parse_sdvo_device_mapping()
1285 drm_dbg_kms(&i915->drm, in parse_sdvo_device_mapping()
1291 parse_driver_features(struct drm_i915_private *i915) in parse_driver_features() argument
1295 driver = bdb_find_section(i915, BDB_DRIVER_FEATURES); in parse_driver_features()
1299 if (DISPLAY_VER(i915) >= 5) { in parse_driver_features()
1306 i915->display.vbt.int_lvds_support = 0; in parse_driver_features()
1319 if (i915->display.vbt.version >= 134 && in parse_driver_features()
1322 i915->display.vbt.int_lvds_support = 0; in parse_driver_features()
1327 parse_panel_driver_features(struct drm_i915_private *i915, in parse_panel_driver_features() argument
1332 driver = bdb_find_section(i915, BDB_DRIVER_FEATURES); in parse_panel_driver_features()
1336 if (i915->display.vbt.version < 228) { in parse_panel_driver_features()
1337 drm_dbg_kms(&i915->drm, "DRRS State Enabled:%d\n", in parse_panel_driver_features()
1361 parse_power_conservation_features(struct drm_i915_private *i915, in parse_power_conservation_features() argument
1369 if (i915->display.vbt.version < 228) in parse_power_conservation_features()
1372 power = bdb_find_section(i915, BDB_LFP_POWER); in parse_power_conservation_features()
1395 if (i915->display.vbt.version >= 232) in parse_power_conservation_features()
1398 if (i915->display.vbt.version >= 233) in parse_power_conservation_features()
1404 parse_edp(struct drm_i915_private *i915, in parse_edp() argument
1412 edp = bdb_find_section(i915, BDB_EDP); in parse_edp()
1434 if (i915->display.vbt.version >= 224) { in parse_edp()
1449 drm_dbg_kms(&i915->drm, in parse_edp()
1467 drm_dbg_kms(&i915->drm, in parse_edp()
1487 drm_dbg_kms(&i915->drm, in parse_edp()
1507 drm_dbg_kms(&i915->drm, in parse_edp()
1513 if (i915->display.vbt.version >= 173) { in parse_edp()
1517 if (i915->display.params.edp_vswing) { in parse_edp()
1519 i915->display.params.edp_vswing == 1; in parse_edp()
1529 if (i915->display.vbt.version >= 244) in parse_edp()
1535 parse_psr(struct drm_i915_private *i915, in parse_psr() argument
1542 psr = bdb_find_section(i915, BDB_PSR); in parse_psr()
1544 drm_dbg_kms(&i915->drm, "No PSR BDB found.\n"); in parse_psr()
1561 if (i915->display.vbt.version >= 205 && in parse_psr()
1562 (DISPLAY_VER(i915) >= 9 && !IS_BROXTON(i915))) { in parse_psr()
1574 drm_dbg_kms(&i915->drm, in parse_psr()
1594 drm_dbg_kms(&i915->drm, in parse_psr()
1607 if (i915->display.vbt.version >= 226) { in parse_psr()
1633 static void parse_dsi_backlight_ports(struct drm_i915_private *i915, in parse_dsi_backlight_ports() argument
1637 enum port port_bc = DISPLAY_VER(i915) >= 11 ? PORT_B : PORT_C; in parse_dsi_backlight_ports()
1639 if (!panel->vbt.dsi.config->dual_link || i915->display.vbt.version < 197) { in parse_dsi_backlight_ports()
1679 parse_mipi_config(struct drm_i915_private *i915, in parse_mipi_config() argument
1689 if (!intel_bios_is_dsi_present(i915, &port)) in parse_mipi_config()
1696 * stored in i915->lfp_lvds_vbt_mode in parse_mipi_config()
1703 start = bdb_find_section(i915, BDB_MIPI_CONFIG); in parse_mipi_config()
1705 drm_dbg_kms(&i915->drm, "No MIPI config BDB found"); in parse_mipi_config()
1709 drm_dbg(&i915->drm, "Found MIPI Config block, panel index = %d\n", in parse_mipi_config()
1730 parse_dsi_backlight_ports(i915, panel, port); in parse_mipi_config()
1920 static int get_init_otp_deassert_fragment_len(struct drm_i915_private *i915, in get_init_otp_deassert_fragment_len() argument
1926 if (drm_WARN_ON(&i915->drm, in get_init_otp_deassert_fragment_len()
1955 static void fixup_mipi_sequences(struct drm_i915_private *i915, in fixup_mipi_sequences() argument
1962 if (!IS_VALLEYVIEW(i915)) in fixup_mipi_sequences()
1977 len = get_init_otp_deassert_fragment_len(i915, panel); in fixup_mipi_sequences()
1981 drm_dbg_kms(&i915->drm, in fixup_mipi_sequences()
2001 parse_mipi_sequence(struct drm_i915_private *i915, in parse_mipi_sequence() argument
2015 sequence = bdb_find_section(i915, BDB_MIPI_SEQUENCE); in parse_mipi_sequence()
2017 drm_dbg_kms(&i915->drm, in parse_mipi_sequence()
2024 drm_err(&i915->drm, in parse_mipi_sequence()
2030 drm_dbg(&i915->drm, "Found MIPI sequence block v%u\n", in parse_mipi_sequence()
2048 drm_err(&i915->drm, "Unknown sequence %u\n", in parse_mipi_sequence()
2055 drm_dbg_kms(&i915->drm, in parse_mipi_sequence()
2065 drm_err(&i915->drm, "Invalid sequence %u\n", in parse_mipi_sequence()
2075 fixup_mipi_sequences(i915, panel); in parse_mipi_sequence()
2077 drm_dbg(&i915->drm, "MIPI related VBT parsing complete\n"); in parse_mipi_sequence()
2086 parse_compression_parameters(struct drm_i915_private *i915) in parse_compression_parameters() argument
2093 if (i915->display.vbt.version < 198) in parse_compression_parameters()
2096 params = bdb_find_section(i915, BDB_COMPRESSION_PARAMETERS); in parse_compression_parameters()
2100 drm_dbg_kms(&i915->drm, in parse_compression_parameters()
2107 drm_dbg_kms(&i915->drm, in parse_compression_parameters()
2113 list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) { in parse_compression_parameters()
2120 drm_dbg_kms(&i915->drm, in parse_compression_parameters()
2126 drm_dbg_kms(&i915->drm, in parse_compression_parameters()
2199 static u8 map_ddc_pin(struct drm_i915_private *i915, u8 vbt_pin) in map_ddc_pin() argument
2204 if (IS_DGFX(i915)) in map_ddc_pin()
2207 if (INTEL_PCH_TYPE(i915) >= PCH_LNL || HAS_PCH_MTP(i915) || in map_ddc_pin()
2208 IS_ALDERLAKE_P(i915)) { in map_ddc_pin()
2211 } else if (IS_ALDERLAKE_S(i915)) { in map_ddc_pin()
2214 } else if (IS_ROCKETLAKE(i915) && INTEL_PCH_TYPE(i915) == PCH_TGP) { in map_ddc_pin()
2217 } else if (HAS_PCH_TGP(i915) && DISPLAY_VER(i915) == 9) { in map_ddc_pin()
2220 } else if (INTEL_PCH_TYPE(i915) >= PCH_ICP) { in map_ddc_pin()
2223 } else if (HAS_PCH_CNP(i915)) { in map_ddc_pin()
2236 drm_dbg_kms(&i915->drm, in map_ddc_pin()
2294 static enum port dvo_port_to_port(struct drm_i915_private *i915, in dvo_port_to_port() argument
2348 if (DISPLAY_VER(i915) >= 13) in dvo_port_to_port()
2353 else if (IS_ALDERLAKE_S(i915)) in dvo_port_to_port()
2358 else if (IS_DG1(i915) || IS_ROCKETLAKE(i915)) in dvo_port_to_port()
2371 dsi_dvo_port_to_port(struct drm_i915_private *i915, u8 dvo_port) in dsi_dvo_port_to_port() argument
2377 if (DISPLAY_VER(i915) >= 11) in dsi_dvo_port_to_port()
2388 struct drm_i915_private *i915 = devdata->i915; in intel_bios_encoder_port() local
2392 port = dvo_port_to_port(i915, child->dvo_port); in intel_bios_encoder_port()
2393 if (port == PORT_NONE && DISPLAY_VER(i915) >= 11) in intel_bios_encoder_port()
2394 port = dsi_dvo_port_to_port(i915, child->dvo_port); in intel_bios_encoder_port()
2439 if (!devdata || devdata->i915->display.vbt.version < 216) in intel_bios_dp_max_link_rate()
2442 if (devdata->i915->display.vbt.version >= 230) in intel_bios_dp_max_link_rate()
2450 if (!devdata || devdata->i915->display.vbt.version < 244) in intel_bios_dp_max_lane_count()
2459 struct drm_i915_private *i915 = devdata->i915; in sanitize_device_type() local
2462 if (port != PORT_A || DISPLAY_VER(i915) >= 12) in sanitize_device_type()
2470 drm_dbg_kms(&i915->drm, "VBT claims port A supports DVI%s, ignoring\n", in sanitize_device_type()
2480 struct drm_i915_private *i915 = devdata->i915; in sanitize_hdmi_level_shift() local
2490 if (IS_BROADWELL(i915) && devdata->child.hdmi_level_shifter_value > 9) { in sanitize_hdmi_level_shift()
2491 drm_dbg_kms(&i915->drm, "Bogus port %c VBT HDMI level shift %d, adjusting to %d\n", in sanitize_hdmi_level_shift()
2539 return devdata && HAS_LSPCON(devdata->i915) && devdata->child.lspcon; in intel_bios_encoder_is_lspcon()
2545 if (!devdata || devdata->i915->display.vbt.version < 158 || in intel_bios_hdmi_level_shift()
2546 DISPLAY_VER(devdata->i915) >= 14) in intel_bios_hdmi_level_shift()
2554 if (!devdata || devdata->i915->display.vbt.version < 204) in intel_bios_hdmi_max_tmds_clock()
2576 static bool is_port_valid(struct drm_i915_private *i915, enum port port) in is_port_valid() argument
2583 if (port == PORT_F && IS_ICELAKE(i915)) in is_port_valid()
2584 return IS_ICL_WITH_PORT_F(i915); in is_port_valid()
2591 struct drm_i915_private *i915 = devdata->i915; in print_ddi_port() local
2611 drm_dbg_kms(&i915->drm, in print_ddi_port()
2621 drm_dbg_kms(&i915->drm, in print_ddi_port()
2628 drm_dbg_kms(&i915->drm, in print_ddi_port()
2635 drm_dbg_kms(&i915->drm, in print_ddi_port()
2641 drm_dbg_kms(&i915->drm, in print_ddi_port()
2647 drm_dbg_kms(&i915->drm, in print_ddi_port()
2655 drm_WARN(&i915->drm, child->use_vbt_vswing, in print_ddi_port()
2662 struct drm_i915_private *i915 = devdata->i915; in parse_ddi_port() local
2669 if (!is_port_valid(i915, port)) { in parse_ddi_port()
2670 drm_dbg_kms(&i915->drm, in parse_ddi_port()
2680 static bool has_ddi_port_info(struct drm_i915_private *i915) in has_ddi_port_info() argument
2682 return DISPLAY_VER(i915) >= 5 || IS_G4X(i915); in has_ddi_port_info()
2685 static void parse_ddi_ports(struct drm_i915_private *i915) in parse_ddi_ports() argument
2689 if (!has_ddi_port_info(i915)) in parse_ddi_ports()
2692 list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) in parse_ddi_ports()
2695 list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) in parse_ddi_ports()
2700 parse_general_definitions(struct drm_i915_private *i915) in parse_general_definitions() argument
2710 defs = bdb_find_section(i915, BDB_GENERAL_DEFINITIONS); in parse_general_definitions()
2712 drm_dbg_kms(&i915->drm, in parse_general_definitions()
2719 drm_dbg_kms(&i915->drm, in parse_general_definitions()
2726 drm_dbg_kms(&i915->drm, "crt_ddc_bus_pin: %d\n", bus_pin); in parse_general_definitions()
2727 if (intel_gmbus_is_valid_pin(i915, bus_pin)) in parse_general_definitions()
2728 i915->display.vbt.crt_ddc_pin = bus_pin; in parse_general_definitions()
2730 if (i915->display.vbt.version < 106) { in parse_general_definitions()
2732 } else if (i915->display.vbt.version < 111) { in parse_general_definitions()
2734 } else if (i915->display.vbt.version < 195) { in parse_general_definitions()
2736 } else if (i915->display.vbt.version == 195) { in parse_general_definitions()
2738 } else if (i915->display.vbt.version <= 215) { in parse_general_definitions()
2740 } else if (i915->display.vbt.version <= 250) { in parse_general_definitions()
2745 drm_dbg(&i915->drm, in parse_general_definitions()
2747 i915->display.vbt.version, expected_size); in parse_general_definitions()
2752 drm_err(&i915->drm, in parse_general_definitions()
2754 defs->child_dev_size, expected_size, i915->display.vbt.version); in parse_general_definitions()
2758 drm_dbg_kms(&i915->drm, in parse_general_definitions()
2772 drm_dbg_kms(&i915->drm, in parse_general_definitions()
2780 devdata->i915 = i915; in parse_general_definitions()
2790 list_add_tail(&devdata->node, &i915->display.vbt.display_devices); in parse_general_definitions()
2793 if (list_empty(&i915->display.vbt.display_devices)) in parse_general_definitions()
2794 drm_dbg_kms(&i915->drm, in parse_general_definitions()
2800 init_vbt_defaults(struct drm_i915_private *i915) in init_vbt_defaults() argument
2802 i915->display.vbt.crt_ddc_pin = GMBUS_PIN_VGADDC; in init_vbt_defaults()
2805 i915->display.vbt.int_tv_support = 1; in init_vbt_defaults()
2806 i915->display.vbt.int_crt_support = 1; in init_vbt_defaults()
2809 i915->display.vbt.int_lvds_support = 1; in init_vbt_defaults()
2812 i915->display.vbt.lvds_use_ssc = 1; in init_vbt_defaults()
2817 i915->display.vbt.lvds_ssc_freq = intel_bios_ssc_frequency(i915, in init_vbt_defaults()
2818 !HAS_PCH_SPLIT(i915)); in init_vbt_defaults()
2819 drm_dbg_kms(&i915->drm, "Set default to SSC at %d kHz\n", in init_vbt_defaults()
2820 i915->display.vbt.lvds_ssc_freq); in init_vbt_defaults()
2836 init_vbt_missing_defaults(struct drm_i915_private *i915) in init_vbt_missing_defaults() argument
2842 if (!HAS_DDI(i915) && !IS_CHERRYVIEW(i915)) in init_vbt_missing_defaults()
2848 enum phy phy = intel_port_to_phy(i915, port); in init_vbt_missing_defaults()
2854 if (intel_phy_is_tc(i915, phy)) in init_vbt_missing_defaults()
2862 devdata->i915 = i915; in init_vbt_missing_defaults()
2881 list_add_tail(&devdata->node, &i915->display.vbt.display_devices); in init_vbt_missing_defaults()
2883 drm_dbg_kms(&i915->drm, in init_vbt_missing_defaults()
2889 i915->display.vbt.version = 155; in init_vbt_missing_defaults()
2955 static struct vbt_header *spi_oprom_get_vbt(struct drm_i915_private *i915) in spi_oprom_get_vbt() argument
2963 static_region = intel_uncore_read(&i915->uncore, SPI_STATIC_REGIONS); in spi_oprom_get_vbt()
2965 intel_uncore_write(&i915->uncore, PRIMARY_SPI_REGIONID, static_region); in spi_oprom_get_vbt()
2967 oprom_offset = intel_uncore_read(&i915->uncore, OROM_OFFSET); in spi_oprom_get_vbt()
2971 data = intel_spi_read(&i915->uncore, oprom_offset + count); in spi_oprom_get_vbt()
2982 vbt_size = intel_spi_read(&i915->uncore, in spi_oprom_get_vbt()
2991 *(vbt + store++) = intel_spi_read(&i915->uncore, found + count); in spi_oprom_get_vbt()
2996 drm_dbg_kms(&i915->drm, "Found valid VBT in SPI flash\n"); in spi_oprom_get_vbt()
3006 static struct vbt_header *oprom_get_vbt(struct drm_i915_private *i915) in oprom_get_vbt() argument
3008 struct pci_dev *pdev = to_pci_dev(i915->drm.dev); in oprom_get_vbt()
3032 drm_dbg(&i915->drm, "VBT header incomplete\n"); in oprom_get_vbt()
3038 drm_dbg(&i915->drm, in oprom_get_vbt()
3055 drm_dbg_kms(&i915->drm, "Found valid VBT in PCI ROM\n"); in oprom_get_vbt()
3069 * @i915: i915 device instance
3075 void intel_bios_init(struct drm_i915_private *i915) in intel_bios_init() argument
3077 const struct vbt_header *vbt = i915->display.opregion.vbt; in intel_bios_init()
3081 INIT_LIST_HEAD(&i915->display.vbt.display_devices); in intel_bios_init()
3082 INIT_LIST_HEAD(&i915->display.vbt.bdb_blocks); in intel_bios_init()
3084 if (!HAS_DISPLAY(i915)) { in intel_bios_init()
3085 drm_dbg_kms(&i915->drm, in intel_bios_init()
3090 init_vbt_defaults(i915); in intel_bios_init()
3096 if (!vbt && IS_DGFX(i915)) { in intel_bios_init()
3097 oprom_vbt = spi_oprom_get_vbt(i915); in intel_bios_init()
3102 oprom_vbt = oprom_get_vbt(i915); in intel_bios_init()
3110 i915->display.vbt.version = bdb->version; in intel_bios_init()
3112 drm_dbg_kms(&i915->drm, in intel_bios_init()
3114 (int)sizeof(vbt->signature), vbt->signature, i915->display.vbt.version); in intel_bios_init()
3116 init_bdb_blocks(i915, bdb); in intel_bios_init()
3119 parse_general_features(i915); in intel_bios_init()
3120 parse_general_definitions(i915); in intel_bios_init()
3121 parse_driver_features(i915); in intel_bios_init()
3124 parse_compression_parameters(i915); in intel_bios_init()
3128 drm_info(&i915->drm, in intel_bios_init()
3130 init_vbt_missing_defaults(i915); in intel_bios_init()
3134 parse_sdvo_device_mapping(i915); in intel_bios_init()
3135 parse_ddi_ports(i915); in intel_bios_init()
3140 static void intel_bios_init_panel(struct drm_i915_private *i915, in intel_bios_init_panel() argument
3148 drm_WARN_ON(&i915->drm, !use_fallback); in intel_bios_init_panel()
3152 panel->vbt.panel_type = get_panel_type(i915, devdata, in intel_bios_init_panel()
3155 drm_WARN_ON(&i915->drm, use_fallback); in intel_bios_init_panel()
3161 parse_panel_options(i915, panel); in intel_bios_init_panel()
3162 parse_generic_dtd(i915, panel); in intel_bios_init_panel()
3163 parse_lfp_data(i915, panel); in intel_bios_init_panel()
3164 parse_lfp_backlight(i915, panel); in intel_bios_init_panel()
3165 parse_sdvo_panel_data(i915, panel); in intel_bios_init_panel()
3166 parse_panel_driver_features(i915, panel); in intel_bios_init_panel()
3167 parse_power_conservation_features(i915, panel); in intel_bios_init_panel()
3168 parse_edp(i915, panel); in intel_bios_init_panel()
3169 parse_psr(i915, panel); in intel_bios_init_panel()
3170 parse_mipi_config(i915, panel); in intel_bios_init_panel()
3171 parse_mipi_sequence(i915, panel); in intel_bios_init_panel()
3174 void intel_bios_init_panel_early(struct drm_i915_private *i915, in intel_bios_init_panel_early() argument
3178 intel_bios_init_panel(i915, panel, devdata, NULL, false); in intel_bios_init_panel_early()
3181 void intel_bios_init_panel_late(struct drm_i915_private *i915, in intel_bios_init_panel_late() argument
3186 intel_bios_init_panel(i915, panel, devdata, drm_edid, true); in intel_bios_init_panel_late()
3191 * @i915: i915 device instance
3193 void intel_bios_driver_remove(struct drm_i915_private *i915) in intel_bios_driver_remove() argument
3198 list_for_each_entry_safe(devdata, nd, &i915->display.vbt.display_devices, node) { in intel_bios_driver_remove()
3204 list_for_each_entry_safe(entry, ne, &i915->display.vbt.bdb_blocks, node) { in intel_bios_driver_remove()
3228 * @i915: i915 device instance
3233 bool intel_bios_is_tv_present(struct drm_i915_private *i915) in intel_bios_is_tv_present() argument
3237 if (!i915->display.vbt.int_tv_support) in intel_bios_is_tv_present()
3240 if (list_empty(&i915->display.vbt.display_devices)) in intel_bios_is_tv_present()
3243 list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) { in intel_bios_is_tv_present()
3269 * @i915: i915 device instance
3275 bool intel_bios_is_lvds_present(struct drm_i915_private *i915, u8 *i2c_pin) in intel_bios_is_lvds_present() argument
3279 if (list_empty(&i915->display.vbt.display_devices)) in intel_bios_is_lvds_present()
3282 list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) { in intel_bios_is_lvds_present()
3293 if (intel_gmbus_is_valid_pin(i915, child->i2c_pin)) in intel_bios_is_lvds_present()
3309 if (i915->display.opregion.vbt) in intel_bios_is_lvds_present()
3318 * @i915: i915 device instance
3323 bool intel_bios_is_port_present(struct drm_i915_private *i915, enum port port) in intel_bios_is_port_present() argument
3327 if (WARN_ON(!has_ddi_port_info(i915))) in intel_bios_is_port_present()
3330 if (!is_port_valid(i915, port)) in intel_bios_is_port_present()
3333 list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) { in intel_bios_is_port_present()
3336 if (dvo_port_to_port(i915, child->dvo_port) == port) in intel_bios_is_port_present()
3364 * @i915: i915 device instance
3369 bool intel_bios_is_dsi_present(struct drm_i915_private *i915, in intel_bios_is_dsi_present() argument
3374 list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) { in intel_bios_is_dsi_present()
3381 if (dsi_dvo_port_to_port(i915, dvo_port) == PORT_NONE) { in intel_bios_is_dsi_present()
3382 drm_dbg_kms(&i915->drm, in intel_bios_is_dsi_present()
3389 *port = dsi_dvo_port_to_port(i915, dvo_port); in intel_bios_is_dsi_present()
3465 struct drm_i915_private *i915 = to_i915(encoder->base.dev); in intel_bios_get_dsc_params() local
3468 list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) { in intel_bios_get_dsc_params()
3474 if (dsi_dvo_port_to_port(i915, child->dvo_port) == encoder->port) { in intel_bios_get_dsc_params()
3534 static enum aux_ch map_aux_ch(struct drm_i915_private *i915, u8 aux_channel) in map_aux_ch() argument
3539 if (DISPLAY_VER(i915) >= 13) { in map_aux_ch()
3542 } else if (IS_ALDERLAKE_S(i915)) { in map_aux_ch()
3545 } else if (IS_DG1(i915) || IS_ROCKETLAKE(i915)) { in map_aux_ch()
3558 drm_dbg_kms(&i915->drm, in map_aux_ch()
3570 return map_aux_ch(devdata->i915, devdata->child.aux_channel); in intel_bios_dp_aux_ch()
3575 struct drm_i915_private *i915; in intel_bios_dp_has_shared_aux_ch() local
3582 i915 = devdata->i915; in intel_bios_dp_has_shared_aux_ch()
3585 list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) { in intel_bios_dp_has_shared_aux_ch()
3596 if (!devdata || devdata->i915->display.vbt.version < 196 || !devdata->child.iboost) in intel_bios_dp_boost_level()
3604 if (!devdata || devdata->i915->display.vbt.version < 196 || !devdata->child.iboost) in intel_bios_hdmi_boost_level()
3615 return map_ddc_pin(devdata->i915, devdata->child.ddc_pin); in intel_bios_hdmi_ddc_pin()
3620 return devdata->i915->display.vbt.version >= 195 && devdata->child.dp_usb_type_c; in intel_bios_encoder_supports_typec_usb()
3625 return devdata->i915->display.vbt.version >= 209 && devdata->child.tbt; in intel_bios_encoder_supports_tbt()
3639 intel_bios_encoder_data_lookup(struct drm_i915_private *i915, enum port port) in intel_bios_encoder_data_lookup() argument
3643 list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) { in intel_bios_encoder_data_lookup()
3651 void intel_bios_for_each_encoder(struct drm_i915_private *i915, in intel_bios_for_each_encoder() argument
3652 void (*func)(struct drm_i915_private *i915, in intel_bios_for_each_encoder() argument
3657 list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) in intel_bios_for_each_encoder()
3658 func(i915, devdata); in intel_bios_for_each_encoder()