Lines Matching +full:preemphasis +full:- +full:level

53  * blocks have a 1-byte Block ID, 2-byte Block Size, and Block Size bytes of
86 return _get_blocksize(block_data - 3); in get_blocksize()
99 index += bdb->header_size; in find_section()
100 total = bdb->bdb_size; in find_section()
124 panel_fixed_mode->hdisplay = (dvo_timing->hactive_hi << 8) | in fill_detail_timing_data()
125 dvo_timing->hactive_lo; in fill_detail_timing_data()
126 panel_fixed_mode->hsync_start = panel_fixed_mode->hdisplay + in fill_detail_timing_data()
127 ((dvo_timing->hsync_off_hi << 8) | dvo_timing->hsync_off_lo); in fill_detail_timing_data()
128 panel_fixed_mode->hsync_end = panel_fixed_mode->hsync_start + in fill_detail_timing_data()
129 ((dvo_timing->hsync_pulse_width_hi << 8) | in fill_detail_timing_data()
130 dvo_timing->hsync_pulse_width_lo); in fill_detail_timing_data()
131 panel_fixed_mode->htotal = panel_fixed_mode->hdisplay + in fill_detail_timing_data()
132 ((dvo_timing->hblank_hi << 8) | dvo_timing->hblank_lo); in fill_detail_timing_data()
134 panel_fixed_mode->vdisplay = (dvo_timing->vactive_hi << 8) | in fill_detail_timing_data()
135 dvo_timing->vactive_lo; in fill_detail_timing_data()
136 panel_fixed_mode->vsync_start = panel_fixed_mode->vdisplay + in fill_detail_timing_data()
137 ((dvo_timing->vsync_off_hi << 4) | dvo_timing->vsync_off_lo); in fill_detail_timing_data()
138 panel_fixed_mode->vsync_end = panel_fixed_mode->vsync_start + in fill_detail_timing_data()
139 ((dvo_timing->vsync_pulse_width_hi << 4) | in fill_detail_timing_data()
140 dvo_timing->vsync_pulse_width_lo); in fill_detail_timing_data()
141 panel_fixed_mode->vtotal = panel_fixed_mode->vdisplay + in fill_detail_timing_data()
142 ((dvo_timing->vblank_hi << 8) | dvo_timing->vblank_lo); in fill_detail_timing_data()
143 panel_fixed_mode->clock = dvo_timing->clock * 10; in fill_detail_timing_data()
144 panel_fixed_mode->type = DRM_MODE_TYPE_PREFERRED; in fill_detail_timing_data()
146 if (dvo_timing->hsync_positive) in fill_detail_timing_data()
147 panel_fixed_mode->flags |= DRM_MODE_FLAG_PHSYNC; in fill_detail_timing_data()
149 panel_fixed_mode->flags |= DRM_MODE_FLAG_NHSYNC; in fill_detail_timing_data()
151 if (dvo_timing->vsync_positive) in fill_detail_timing_data()
152 panel_fixed_mode->flags |= DRM_MODE_FLAG_PVSYNC; in fill_detail_timing_data()
154 panel_fixed_mode->flags |= DRM_MODE_FLAG_NVSYNC; in fill_detail_timing_data()
156 panel_fixed_mode->width_mm = (dvo_timing->himage_hi << 8) | in fill_detail_timing_data()
157 dvo_timing->himage_lo; in fill_detail_timing_data()
158 panel_fixed_mode->height_mm = (dvo_timing->vimage_hi << 8) | in fill_detail_timing_data()
159 dvo_timing->vimage_lo; in fill_detail_timing_data()
162 if (panel_fixed_mode->hsync_end > panel_fixed_mode->htotal) in fill_detail_timing_data()
163 panel_fixed_mode->htotal = panel_fixed_mode->hsync_end + 1; in fill_detail_timing_data()
164 if (panel_fixed_mode->vsync_end > panel_fixed_mode->vtotal) in fill_detail_timing_data()
165 panel_fixed_mode->vtotal = panel_fixed_mode->vsync_end + 1; in fill_detail_timing_data()
182 lvds_lfp_data_ptrs->ptr[1].dvo_timing_offset - in get_lvds_dvo_timing()
183 lvds_lfp_data_ptrs->ptr[0].dvo_timing_offset; in get_lvds_dvo_timing()
185 lvds_lfp_data_ptrs->ptr[0].dvo_timing_offset - in get_lvds_dvo_timing()
186 lvds_lfp_data_ptrs->ptr[0].fp_timing_offset; in get_lvds_dvo_timing()
187 char *entry = (char *)lvds_lfp_data->data + lfp_data_size * index; in get_lvds_dvo_timing()
201 size_t data_ofs = (const u8 *)data - (const u8 *)bdb; in get_lvds_fp_timing()
202 u16 data_size = ((const u16 *)data)[-1]; /* stored in header */ in get_lvds_fp_timing()
205 if (index >= ARRAY_SIZE(ptrs->ptr)) in get_lvds_fp_timing()
207 ofs = ptrs->ptr[index].fp_timing_offset; in get_lvds_fp_timing()
228 i915->vbt.lvds_dither = lvds_options->pixel_dither; in parse_panel_options()
232 drm_WARN_ON(&i915->drm, ret > 0xf); in parse_panel_options()
234 drm_dbg_kms(&i915->drm, "Panel type: %d (OpRegion)\n", in parse_panel_options()
237 if (lvds_options->panel_type > 0xf) { in parse_panel_options()
238 drm_dbg_kms(&i915->drm, in parse_panel_options()
240 lvds_options->panel_type); in parse_panel_options()
243 panel_type = lvds_options->panel_type; in parse_panel_options()
244 drm_dbg_kms(&i915->drm, "Panel type: %d (VBT)\n", in parse_panel_options()
248 i915->vbt.panel_type = panel_type; in parse_panel_options()
250 drrs_mode = (lvds_options->dps_panel_type_bits in parse_panel_options()
259 i915->vbt.drrs_type = STATIC_DRRS_SUPPORT; in parse_panel_options()
260 drm_dbg_kms(&i915->drm, "DRRS supported mode is static\n"); in parse_panel_options()
263 i915->vbt.drrs_type = SEAMLESS_DRRS_SUPPORT; in parse_panel_options()
264 drm_dbg_kms(&i915->drm, in parse_panel_options()
268 i915->vbt.drrs_type = DRRS_NOT_SUPPORTED; in parse_panel_options()
269 drm_dbg_kms(&i915->drm, in parse_panel_options()
285 int panel_type = i915->vbt.panel_type; in parse_lfp_panel_dtd()
305 i915->vbt.lfp_lvds_vbt_mode = panel_fixed_mode; in parse_lfp_panel_dtd()
307 drm_dbg_kms(&i915->drm, in parse_lfp_panel_dtd()
316 if (fp_timing->x_res == panel_fixed_mode->hdisplay && in parse_lfp_panel_dtd()
317 fp_timing->y_res == panel_fixed_mode->vdisplay) { in parse_lfp_panel_dtd()
318 i915->vbt.bios_lvds_val = fp_timing->lvds_reg_val; in parse_lfp_panel_dtd()
319 drm_dbg_kms(&i915->drm, in parse_lfp_panel_dtd()
321 i915->vbt.bios_lvds_val); in parse_lfp_panel_dtd()
339 if (generic_dtd->gdtd_size < sizeof(struct generic_dtd_entry)) { in parse_generic_dtd()
340 drm_err(&i915->drm, "GDTD size %u is too small.\n", in parse_generic_dtd()
341 generic_dtd->gdtd_size); in parse_generic_dtd()
343 } else if (generic_dtd->gdtd_size != in parse_generic_dtd()
345 drm_err(&i915->drm, "Unexpected GDTD size %u\n", in parse_generic_dtd()
346 generic_dtd->gdtd_size); in parse_generic_dtd()
350 num_dtd = (get_blocksize(generic_dtd) - in parse_generic_dtd()
351 sizeof(struct bdb_generic_dtd)) / generic_dtd->gdtd_size; in parse_generic_dtd()
352 if (i915->vbt.panel_type >= num_dtd) { in parse_generic_dtd()
353 drm_err(&i915->drm, in parse_generic_dtd()
355 i915->vbt.panel_type, num_dtd); in parse_generic_dtd()
359 dtd = &generic_dtd->dtd[i915->vbt.panel_type]; in parse_generic_dtd()
365 panel_fixed_mode->hdisplay = dtd->hactive; in parse_generic_dtd()
366 panel_fixed_mode->hsync_start = in parse_generic_dtd()
367 panel_fixed_mode->hdisplay + dtd->hfront_porch; in parse_generic_dtd()
368 panel_fixed_mode->hsync_end = in parse_generic_dtd()
369 panel_fixed_mode->hsync_start + dtd->hsync; in parse_generic_dtd()
370 panel_fixed_mode->htotal = in parse_generic_dtd()
371 panel_fixed_mode->hdisplay + dtd->hblank; in parse_generic_dtd()
373 panel_fixed_mode->vdisplay = dtd->vactive; in parse_generic_dtd()
374 panel_fixed_mode->vsync_start = in parse_generic_dtd()
375 panel_fixed_mode->vdisplay + dtd->vfront_porch; in parse_generic_dtd()
376 panel_fixed_mode->vsync_end = in parse_generic_dtd()
377 panel_fixed_mode->vsync_start + dtd->vsync; in parse_generic_dtd()
378 panel_fixed_mode->vtotal = in parse_generic_dtd()
379 panel_fixed_mode->vdisplay + dtd->vblank; in parse_generic_dtd()
381 panel_fixed_mode->clock = dtd->pixel_clock; in parse_generic_dtd()
382 panel_fixed_mode->width_mm = dtd->width_mm; in parse_generic_dtd()
383 panel_fixed_mode->height_mm = dtd->height_mm; in parse_generic_dtd()
385 panel_fixed_mode->type = DRM_MODE_TYPE_PREFERRED; in parse_generic_dtd()
388 if (dtd->hsync_positive_polarity) in parse_generic_dtd()
389 panel_fixed_mode->flags |= DRM_MODE_FLAG_PHSYNC; in parse_generic_dtd()
391 panel_fixed_mode->flags |= DRM_MODE_FLAG_NHSYNC; in parse_generic_dtd()
393 if (dtd->vsync_positive_polarity) in parse_generic_dtd()
394 panel_fixed_mode->flags |= DRM_MODE_FLAG_PVSYNC; in parse_generic_dtd()
396 panel_fixed_mode->flags |= DRM_MODE_FLAG_NVSYNC; in parse_generic_dtd()
398 drm_dbg_kms(&i915->drm, in parse_generic_dtd()
402 i915->vbt.lfp_lvds_vbt_mode = panel_fixed_mode; in parse_generic_dtd()
417 if (bdb->version >= 229) in parse_panel_dtd()
419 if (!i915->vbt.lfp_lvds_vbt_mode) in parse_panel_dtd()
429 int panel_type = i915->vbt.panel_type; in parse_lfp_backlight()
430 u16 level; in parse_lfp_backlight() local
436 if (backlight_data->entry_size != sizeof(backlight_data->data[0])) { in parse_lfp_backlight()
437 drm_dbg_kms(&i915->drm, in parse_lfp_backlight()
439 backlight_data->entry_size); in parse_lfp_backlight()
443 entry = &backlight_data->data[panel_type]; in parse_lfp_backlight()
445 i915->vbt.backlight.present = entry->type == BDB_BACKLIGHT_TYPE_PWM; in parse_lfp_backlight()
446 if (!i915->vbt.backlight.present) { in parse_lfp_backlight()
447 drm_dbg_kms(&i915->drm, in parse_lfp_backlight()
449 entry->type); in parse_lfp_backlight()
453 i915->vbt.backlight.type = INTEL_BACKLIGHT_DISPLAY_DDI; in parse_lfp_backlight()
454 if (bdb->version >= 191) { in parse_lfp_backlight()
457 if (bdb->version >= 236) in parse_lfp_backlight()
459 else if (bdb->version >= 234) in parse_lfp_backlight()
467 method = &backlight_data->backlight_control[panel_type]; in parse_lfp_backlight()
468 i915->vbt.backlight.type = method->type; in parse_lfp_backlight()
469 i915->vbt.backlight.controller = method->controller; in parse_lfp_backlight()
473 i915->vbt.backlight.pwm_freq_hz = entry->pwm_freq_hz; in parse_lfp_backlight()
474 i915->vbt.backlight.active_low_pwm = entry->active_low_pwm; in parse_lfp_backlight()
476 if (bdb->version >= 234) { in parse_lfp_backlight()
480 level = backlight_data->brightness_level[panel_type].level; in parse_lfp_backlight()
481 min_level = backlight_data->brightness_min_level[panel_type].level; in parse_lfp_backlight()
483 if (bdb->version >= 236) in parse_lfp_backlight()
484 scale = backlight_data->brightness_precision_bits[panel_type] == 16; in parse_lfp_backlight()
486 scale = level > 255; in parse_lfp_backlight()
492 drm_warn(&i915->drm, "Brightness min level > 255\n"); in parse_lfp_backlight()
493 level = 255; in parse_lfp_backlight()
495 i915->vbt.backlight.min_brightness = min_level; in parse_lfp_backlight()
497 level = backlight_data->level[panel_type]; in parse_lfp_backlight()
498 i915->vbt.backlight.min_brightness = entry->min_brightness; in parse_lfp_backlight()
501 drm_dbg_kms(&i915->drm, in parse_lfp_backlight()
503 "active %s, min brightness %u, level %u, controller %u\n", in parse_lfp_backlight()
504 i915->vbt.backlight.pwm_freq_hz, in parse_lfp_backlight()
505 i915->vbt.backlight.active_low_pwm ? "low" : "high", in parse_lfp_backlight()
506 i915->vbt.backlight.min_brightness, in parse_lfp_backlight()
507 level, in parse_lfp_backlight()
508 i915->vbt.backlight.controller); in parse_lfp_backlight()
520 index = i915->params.vbt_sdvo_panel_type; in parse_sdvo_panel_data()
521 if (index == -2) { in parse_sdvo_panel_data()
522 drm_dbg_kms(&i915->drm, in parse_sdvo_panel_data()
527 if (index == -1) { in parse_sdvo_panel_data()
534 index = sdvo_lvds_options->panel_type; in parse_sdvo_panel_data()
545 fill_detail_timing_data(panel_fixed_mode, &dtds->dtds[index]); in parse_sdvo_panel_data()
547 i915->vbt.sdvo_lvds_vbt_mode = panel_fixed_mode; in parse_sdvo_panel_data()
549 drm_dbg_kms(&i915->drm, in parse_sdvo_panel_data()
578 i915->vbt.int_tv_support = general->int_tv_support; in parse_general_features()
580 if (bdb->version >= 155 && in parse_general_features()
582 i915->vbt.int_crt_support = general->int_crt_support; in parse_general_features()
583 i915->vbt.lvds_use_ssc = general->enable_ssc; in parse_general_features()
584 i915->vbt.lvds_ssc_freq = in parse_general_features()
585 intel_bios_ssc_frequency(i915, general->ssc_freq); in parse_general_features()
586 i915->vbt.display_clock_mode = general->display_clock_mode; in parse_general_features()
587 i915->vbt.fdi_rx_polarity_inverted = general->fdi_rx_polarity_inverted; in parse_general_features()
588 if (bdb->version >= 181) { in parse_general_features()
589 i915->vbt.orientation = general->rotate_180 ? in parse_general_features()
593 i915->vbt.orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN; in parse_general_features()
595 drm_dbg_kms(&i915->drm, in parse_general_features()
597 i915->vbt.int_tv_support, in parse_general_features()
598 i915->vbt.int_crt_support, in parse_general_features()
599 i915->vbt.lvds_use_ssc, in parse_general_features()
600 i915->vbt.lvds_ssc_freq, in parse_general_features()
601 i915->vbt.display_clock_mode, in parse_general_features()
602 i915->vbt.fdi_rx_polarity_inverted); in parse_general_features()
608 return (const void *) &defs->devices[i * defs->child_dev_size]; in child_device_ptr()
624 drm_dbg_kms(&i915->drm, "Skipping SDVO device mapping\n"); in parse_sdvo_device_mapping()
628 list_for_each_entry(devdata, &i915->vbt.display_devices, node) { in parse_sdvo_device_mapping()
629 child = &devdata->child; in parse_sdvo_device_mapping()
631 if (child->slave_addr != SLAVE_ADDR1 && in parse_sdvo_device_mapping()
632 child->slave_addr != SLAVE_ADDR2) { in parse_sdvo_device_mapping()
639 if (child->dvo_port != DEVICE_PORT_DVOB && in parse_sdvo_device_mapping()
640 child->dvo_port != DEVICE_PORT_DVOC) { in parse_sdvo_device_mapping()
642 drm_dbg_kms(&i915->drm, in parse_sdvo_device_mapping()
646 drm_dbg_kms(&i915->drm, in parse_sdvo_device_mapping()
649 child->slave_addr, in parse_sdvo_device_mapping()
650 (child->dvo_port == DEVICE_PORT_DVOB) ? in parse_sdvo_device_mapping()
652 mapping = &i915->vbt.sdvo_mappings[child->dvo_port - 1]; in parse_sdvo_device_mapping()
653 if (!mapping->initialized) { in parse_sdvo_device_mapping()
654 mapping->dvo_port = child->dvo_port; in parse_sdvo_device_mapping()
655 mapping->slave_addr = child->slave_addr; in parse_sdvo_device_mapping()
656 mapping->dvo_wiring = child->dvo_wiring; in parse_sdvo_device_mapping()
657 mapping->ddc_pin = child->ddc_pin; in parse_sdvo_device_mapping()
658 mapping->i2c_pin = child->i2c_pin; in parse_sdvo_device_mapping()
659 mapping->initialized = 1; in parse_sdvo_device_mapping()
660 drm_dbg_kms(&i915->drm, in parse_sdvo_device_mapping()
662 mapping->dvo_port, mapping->slave_addr, in parse_sdvo_device_mapping()
663 mapping->dvo_wiring, mapping->ddc_pin, in parse_sdvo_device_mapping()
664 mapping->i2c_pin); in parse_sdvo_device_mapping()
666 drm_dbg_kms(&i915->drm, in parse_sdvo_device_mapping()
670 if (child->slave2_addr) { in parse_sdvo_device_mapping()
673 drm_dbg_kms(&i915->drm, in parse_sdvo_device_mapping()
682 drm_dbg_kms(&i915->drm, in parse_sdvo_device_mapping()
703 if (driver->lvds_config != BDB_DRIVER_FEATURE_INT_LVDS) in parse_driver_features()
704 i915->vbt.int_lvds_support = 0; in parse_driver_features()
717 if (bdb->version >= 134 && in parse_driver_features()
718 driver->lvds_config != BDB_DRIVER_FEATURE_INT_LVDS && in parse_driver_features()
719 driver->lvds_config != BDB_DRIVER_FEATURE_INT_SDVO_LVDS) in parse_driver_features()
720 i915->vbt.int_lvds_support = 0; in parse_driver_features()
723 if (bdb->version < 228) { in parse_driver_features()
724 drm_dbg_kms(&i915->drm, "DRRS State Enabled:%d\n", in parse_driver_features()
725 driver->drrs_enabled); in parse_driver_features()
730 * driver->drrs_enabled=false in parse_driver_features()
732 if (!driver->drrs_enabled) in parse_driver_features()
733 i915->vbt.drrs_type = DRRS_NOT_SUPPORTED; in parse_driver_features()
735 i915->vbt.psr.enable = driver->psr_enabled; in parse_driver_features()
744 u8 panel_type = i915->vbt.panel_type; in parse_power_conservation_features()
746 if (bdb->version < 228) in parse_power_conservation_features()
753 i915->vbt.psr.enable = power->psr & BIT(panel_type); in parse_power_conservation_features()
759 * power->drrs & BIT(panel_type)=false in parse_power_conservation_features()
761 if (!(power->drrs & BIT(panel_type))) in parse_power_conservation_features()
762 i915->vbt.drrs_type = DRRS_NOT_SUPPORTED; in parse_power_conservation_features()
764 if (bdb->version >= 232) in parse_power_conservation_features()
765 i915->vbt.edp.hobl = power->hobl & BIT(panel_type); in parse_power_conservation_features()
774 int panel_type = i915->vbt.panel_type; in parse_edp()
780 switch ((edp->color_depth >> (panel_type * 2)) & 3) { in parse_edp()
782 i915->vbt.edp.bpp = 18; in parse_edp()
785 i915->vbt.edp.bpp = 24; in parse_edp()
788 i915->vbt.edp.bpp = 30; in parse_edp()
793 edp_pps = &edp->power_seqs[panel_type]; in parse_edp()
794 edp_link_params = &edp->fast_link_params[panel_type]; in parse_edp()
796 i915->vbt.edp.pps = *edp_pps; in parse_edp()
798 switch (edp_link_params->rate) { in parse_edp()
800 i915->vbt.edp.rate = DP_LINK_BW_1_62; in parse_edp()
803 i915->vbt.edp.rate = DP_LINK_BW_2_7; in parse_edp()
806 drm_dbg_kms(&i915->drm, in parse_edp()
808 edp_link_params->rate); in parse_edp()
812 switch (edp_link_params->lanes) { in parse_edp()
814 i915->vbt.edp.lanes = 1; in parse_edp()
817 i915->vbt.edp.lanes = 2; in parse_edp()
820 i915->vbt.edp.lanes = 4; in parse_edp()
823 drm_dbg_kms(&i915->drm, in parse_edp()
825 edp_link_params->lanes); in parse_edp()
829 switch (edp_link_params->preemphasis) { in parse_edp()
831 i915->vbt.edp.preemphasis = DP_TRAIN_PRE_EMPH_LEVEL_0; in parse_edp()
834 i915->vbt.edp.preemphasis = DP_TRAIN_PRE_EMPH_LEVEL_1; in parse_edp()
837 i915->vbt.edp.preemphasis = DP_TRAIN_PRE_EMPH_LEVEL_2; in parse_edp()
840 i915->vbt.edp.preemphasis = DP_TRAIN_PRE_EMPH_LEVEL_3; in parse_edp()
843 drm_dbg_kms(&i915->drm, in parse_edp()
844 "VBT has unknown eDP pre-emphasis value %u\n", in parse_edp()
845 edp_link_params->preemphasis); in parse_edp()
849 switch (edp_link_params->vswing) { in parse_edp()
851 i915->vbt.edp.vswing = DP_TRAIN_VOLTAGE_SWING_LEVEL_0; in parse_edp()
854 i915->vbt.edp.vswing = DP_TRAIN_VOLTAGE_SWING_LEVEL_1; in parse_edp()
857 i915->vbt.edp.vswing = DP_TRAIN_VOLTAGE_SWING_LEVEL_2; in parse_edp()
860 i915->vbt.edp.vswing = DP_TRAIN_VOLTAGE_SWING_LEVEL_3; in parse_edp()
863 drm_dbg_kms(&i915->drm, in parse_edp()
865 edp_link_params->vswing); in parse_edp()
869 if (bdb->version >= 173) { in parse_edp()
873 if (i915->params.edp_vswing) { in parse_edp()
874 i915->vbt.edp.low_vswing = in parse_edp()
875 i915->params.edp_vswing == 1; in parse_edp()
877 vswing = (edp->edp_vswing_preemph >> (panel_type * 4)) & 0xF; in parse_edp()
878 i915->vbt.edp.low_vswing = vswing == 0; in parse_edp()
888 int panel_type = i915->vbt.panel_type; in parse_psr()
892 drm_dbg_kms(&i915->drm, "No PSR BDB found.\n"); in parse_psr()
896 psr_table = &psr->psr_table[panel_type]; in parse_psr()
898 i915->vbt.psr.full_link = psr_table->full_link; in parse_psr()
899 i915->vbt.psr.require_aux_wakeup = psr_table->require_aux_to_wakeup; in parse_psr()
902 i915->vbt.psr.idle_frames = psr_table->idle_frames < 0 ? 0 : in parse_psr()
903 psr_table->idle_frames > 15 ? 15 : psr_table->idle_frames; in parse_psr()
905 switch (psr_table->lines_to_wait) { in parse_psr()
907 i915->vbt.psr.lines_to_wait = PSR_0_LINES_TO_WAIT; in parse_psr()
910 i915->vbt.psr.lines_to_wait = PSR_1_LINE_TO_WAIT; in parse_psr()
913 i915->vbt.psr.lines_to_wait = PSR_4_LINES_TO_WAIT; in parse_psr()
916 i915->vbt.psr.lines_to_wait = PSR_8_LINES_TO_WAIT; in parse_psr()
919 drm_dbg_kms(&i915->drm, in parse_psr()
921 psr_table->lines_to_wait); in parse_psr()
929 if (bdb->version >= 205 && in parse_psr()
931 switch (psr_table->tp1_wakeup_time) { in parse_psr()
933 i915->vbt.psr.tp1_wakeup_time_us = 500; in parse_psr()
936 i915->vbt.psr.tp1_wakeup_time_us = 100; in parse_psr()
939 i915->vbt.psr.tp1_wakeup_time_us = 0; in parse_psr()
942 drm_dbg_kms(&i915->drm, in parse_psr()
943 "VBT tp1 wakeup time value %d is outside range[0-3], defaulting to max value 2500us\n", in parse_psr()
944 psr_table->tp1_wakeup_time); in parse_psr()
947 i915->vbt.psr.tp1_wakeup_time_us = 2500; in parse_psr()
951 switch (psr_table->tp2_tp3_wakeup_time) { in parse_psr()
953 i915->vbt.psr.tp2_tp3_wakeup_time_us = 500; in parse_psr()
956 i915->vbt.psr.tp2_tp3_wakeup_time_us = 100; in parse_psr()
959 i915->vbt.psr.tp2_tp3_wakeup_time_us = 0; in parse_psr()
962 drm_dbg_kms(&i915->drm, in parse_psr()
963 "VBT tp2_tp3 wakeup time value %d is outside range[0-3], defaulting to max value 2500us\n", in parse_psr()
964 psr_table->tp2_tp3_wakeup_time); in parse_psr()
967 i915->vbt.psr.tp2_tp3_wakeup_time_us = 2500; in parse_psr()
971 i915->vbt.psr.tp1_wakeup_time_us = psr_table->tp1_wakeup_time * 100; in parse_psr()
972 i915->vbt.psr.tp2_tp3_wakeup_time_us = psr_table->tp2_tp3_wakeup_time * 100; in parse_psr()
975 if (bdb->version >= 226) { in parse_psr()
976 u32 wakeup_time = psr->psr2_tp2_tp3_wakeup_time; in parse_psr()
994 i915->vbt.psr.psr2_tp2_tp3_wakeup_time_us = wakeup_time; in parse_psr()
997 i915->vbt.psr.psr2_tp2_tp3_wakeup_time_us = i915->vbt.psr.tp2_tp3_wakeup_time_us; in parse_psr()
1004 if (!i915->vbt.dsi.config->dual_link || version < 197) { in parse_dsi_backlight_ports()
1005 i915->vbt.dsi.bl_ports = BIT(port); in parse_dsi_backlight_ports()
1006 if (i915->vbt.dsi.config->cabc_supported) in parse_dsi_backlight_ports()
1007 i915->vbt.dsi.cabc_ports = BIT(port); in parse_dsi_backlight_ports()
1012 switch (i915->vbt.dsi.config->dl_dcs_backlight_ports) { in parse_dsi_backlight_ports()
1014 i915->vbt.dsi.bl_ports = BIT(PORT_A); in parse_dsi_backlight_ports()
1017 i915->vbt.dsi.bl_ports = BIT(PORT_C); in parse_dsi_backlight_ports()
1021 i915->vbt.dsi.bl_ports = BIT(PORT_A) | BIT(PORT_C); in parse_dsi_backlight_ports()
1025 if (!i915->vbt.dsi.config->cabc_supported) in parse_dsi_backlight_ports()
1028 switch (i915->vbt.dsi.config->dl_dcs_cabc_ports) { in parse_dsi_backlight_ports()
1030 i915->vbt.dsi.cabc_ports = BIT(PORT_A); in parse_dsi_backlight_ports()
1033 i915->vbt.dsi.cabc_ports = BIT(PORT_C); in parse_dsi_backlight_ports()
1037 i915->vbt.dsi.cabc_ports = in parse_dsi_backlight_ports()
1050 int panel_type = i915->vbt.panel_type; in parse_mipi_config()
1058 i915->vbt.dsi.panel_id = MIPI_DSI_UNDEFINED_PANEL_ID; in parse_mipi_config()
1061 * stored in i915->lfp_lvds_vbt_mode in parse_mipi_config()
1070 drm_dbg_kms(&i915->drm, "No MIPI config BDB found"); in parse_mipi_config()
1074 drm_dbg(&i915->drm, "Found MIPI Config block, panel index = %d\n", in parse_mipi_config()
1081 config = &start->config[panel_type]; in parse_mipi_config()
1082 pps = &start->pps[panel_type]; in parse_mipi_config()
1085 i915->vbt.dsi.config = kmemdup(config, sizeof(struct mipi_config), GFP_KERNEL); in parse_mipi_config()
1086 if (!i915->vbt.dsi.config) in parse_mipi_config()
1089 i915->vbt.dsi.pps = kmemdup(pps, sizeof(struct mipi_pps_data), GFP_KERNEL); in parse_mipi_config()
1090 if (!i915->vbt.dsi.pps) { in parse_mipi_config()
1091 kfree(i915->vbt.dsi.config); in parse_mipi_config()
1095 parse_dsi_backlight_ports(i915, bdb->version, port); in parse_mipi_config()
1098 switch (config->rotation) { in parse_mipi_config()
1104 i915->vbt.dsi.orientation = in parse_mipi_config()
1108 i915->vbt.dsi.orientation = in parse_mipi_config()
1112 i915->vbt.dsi.orientation = in parse_mipi_config()
1116 i915->vbt.dsi.orientation = in parse_mipi_config()
1122 i915->vbt.dsi.panel_id = MIPI_DSI_GENERIC_PANEL_ID; in parse_mipi_config()
1131 const u8 *data = &sequence->data[0]; in find_panel_sequence_block()
1134 int header_size = sequence->version >= 3 ? 5 : 3; in find_panel_sequence_block()
1139 if (sequence->version >= 3) in find_panel_sequence_block()
1149 if (sequence->version >= 3) in find_panel_sequence_block()
1282 * Get len of pre-fixed deassert fragment from a v1 init OTP sequence,
1287 const u8 *data = i915->vbt.dsi.sequence[MIPI_SEQ_INIT_OTP]; in get_init_otp_deassert_fragment_len()
1290 if (drm_WARN_ON(&i915->drm, in get_init_otp_deassert_fragment_len()
1291 !data || i915->vbt.dsi.seq_version != 1)) in get_init_otp_deassert_fragment_len()
1328 /* Limit this to v1 vid-mode sequences */ in fixup_mipi_sequences()
1329 if (i915->vbt.dsi.config->is_cmd_mode || in fixup_mipi_sequences()
1330 i915->vbt.dsi.seq_version != 1) in fixup_mipi_sequences()
1334 if (!i915->vbt.dsi.sequence[MIPI_SEQ_INIT_OTP] || in fixup_mipi_sequences()
1335 !i915->vbt.dsi.sequence[MIPI_SEQ_ASSERT_RESET] || in fixup_mipi_sequences()
1336 i915->vbt.dsi.sequence[MIPI_SEQ_DEASSERT_RESET]) in fixup_mipi_sequences()
1339 /* The deassert-sequence ends at the first DSI packet */ in fixup_mipi_sequences()
1344 drm_dbg_kms(&i915->drm, in fixup_mipi_sequences()
1348 init_otp = (u8 *)i915->vbt.dsi.sequence[MIPI_SEQ_INIT_OTP]; in fixup_mipi_sequences()
1349 i915->vbt.dsi.deassert_seq = kmemdup(init_otp, len + 1, GFP_KERNEL); in fixup_mipi_sequences()
1350 if (!i915->vbt.dsi.deassert_seq) in fixup_mipi_sequences()
1352 i915->vbt.dsi.deassert_seq[0] = MIPI_SEQ_DEASSERT_RESET; in fixup_mipi_sequences()
1353 i915->vbt.dsi.deassert_seq[len] = MIPI_SEQ_ELEM_END; in fixup_mipi_sequences()
1355 i915->vbt.dsi.sequence[MIPI_SEQ_DEASSERT_RESET] = in fixup_mipi_sequences()
1356 i915->vbt.dsi.deassert_seq; in fixup_mipi_sequences()
1358 init_otp[len - 1] = MIPI_SEQ_INIT_OTP; in fixup_mipi_sequences()
1360 i915->vbt.dsi.sequence[MIPI_SEQ_INIT_OTP] = init_otp + len - 1; in fixup_mipi_sequences()
1367 int panel_type = i915->vbt.panel_type; in parse_mipi_sequence()
1375 if (i915->vbt.dsi.panel_id != MIPI_DSI_GENERIC_PANEL_ID) in parse_mipi_sequence()
1380 drm_dbg_kms(&i915->drm, in parse_mipi_sequence()
1386 if (sequence->version >= 4) { in parse_mipi_sequence()
1387 drm_err(&i915->drm, in parse_mipi_sequence()
1389 sequence->version); in parse_mipi_sequence()
1393 drm_dbg(&i915->drm, "Found MIPI sequence block v%u\n", in parse_mipi_sequence()
1394 sequence->version); in parse_mipi_sequence()
1411 drm_err(&i915->drm, "Unknown sequence %u\n", in parse_mipi_sequence()
1418 drm_dbg_kms(&i915->drm, in parse_mipi_sequence()
1421 i915->vbt.dsi.sequence[seq_id] = data + index; in parse_mipi_sequence()
1423 if (sequence->version >= 3) in parse_mipi_sequence()
1428 drm_err(&i915->drm, "Invalid sequence %u\n", in parse_mipi_sequence()
1434 i915->vbt.dsi.data = data; in parse_mipi_sequence()
1435 i915->vbt.dsi.size = seq_size; in parse_mipi_sequence()
1436 i915->vbt.dsi.seq_version = sequence->version; in parse_mipi_sequence()
1440 drm_dbg(&i915->drm, "MIPI related VBT parsing complete\n"); in parse_mipi_sequence()
1445 memset(i915->vbt.dsi.sequence, 0, sizeof(i915->vbt.dsi.sequence)); in parse_mipi_sequence()
1458 if (bdb->version < 198) in parse_compression_parameters()
1464 if (params->entry_size != sizeof(params->data[0])) { in parse_compression_parameters()
1465 drm_dbg_kms(&i915->drm, in parse_compression_parameters()
1472 drm_dbg_kms(&i915->drm, in parse_compression_parameters()
1478 list_for_each_entry(devdata, &i915->vbt.display_devices, node) { in parse_compression_parameters()
1479 child = &devdata->child; in parse_compression_parameters()
1481 if (!child->compression_enable) in parse_compression_parameters()
1485 drm_dbg_kms(&i915->drm, in parse_compression_parameters()
1490 if (child->compression_method_cps) { in parse_compression_parameters()
1491 drm_dbg_kms(&i915->drm, in parse_compression_parameters()
1496 index = child->compression_structure_index; in parse_compression_parameters()
1498 devdata->dsc = kmemdup(&params->data[index], in parse_compression_parameters()
1499 sizeof(*devdata->dsc), GFP_KERNEL); in parse_compression_parameters()
1523 info = &i915->vbt.ddi_port_info[port]; in get_port_by_ddc_pin()
1525 if (info->devdata && ddc_pin == info->alternate_ddc_pin) in get_port_by_ddc_pin()
1535 struct ddi_vbt_port_info *info = &i915->vbt.ddi_port_info[port]; in sanitize_ddc_pin()
1539 p = get_port_by_ddc_pin(i915, info->alternate_ddc_pin); in sanitize_ddc_pin()
1543 drm_dbg_kms(&i915->drm, in sanitize_ddc_pin()
1546 port_name(port), info->alternate_ddc_pin, in sanitize_ddc_pin()
1555 * there are real machines (eg. Asrock B250M-HDV) where VBT has both in sanitize_ddc_pin()
1558 info = &i915->vbt.ddi_port_info[p]; in sanitize_ddc_pin()
1559 child = &info->devdata->child; in sanitize_ddc_pin()
1561 child->device_type &= ~DEVICE_TYPE_TMDS_DVI_SIGNALING; in sanitize_ddc_pin()
1562 child->device_type |= DEVICE_TYPE_NOT_HDMI_OUTPUT; in sanitize_ddc_pin()
1564 info->alternate_ddc_pin = 0; in sanitize_ddc_pin()
1576 info = &i915->vbt.ddi_port_info[port]; in get_port_by_aux_ch()
1578 if (info->devdata && aux_ch == info->alternate_aux_channel) in get_port_by_aux_ch()
1588 struct ddi_vbt_port_info *info = &i915->vbt.ddi_port_info[port]; in sanitize_aux_ch()
1592 p = get_port_by_aux_ch(i915, info->alternate_aux_channel); in sanitize_aux_ch()
1596 drm_dbg_kms(&i915->drm, in sanitize_aux_ch()
1599 port_name(port), info->alternate_aux_channel, in sanitize_aux_ch()
1608 * there are real machines (eg. Asrock B250M-HDV) where VBT has both in sanitize_aux_ch()
1611 info = &i915->vbt.ddi_port_info[p]; in sanitize_aux_ch()
1612 child = &info->devdata->child; in sanitize_aux_ch()
1614 child->device_type &= ~DEVICE_TYPE_DISPLAYPORT_OUTPUT; in sanitize_aux_ch()
1615 info->alternate_aux_channel = 0; in sanitize_aux_ch()
1689 drm_dbg_kms(&i915->drm, in map_ddc_pin()
1703 if (port_mapping[port][i] == -1) in __dvo_port_to_port()
1722 [PORT_A] = { DVO_PORT_HDMIA, DVO_PORT_DPA, -1 }, in dvo_port_to_port()
1723 [PORT_B] = { DVO_PORT_HDMIB, DVO_PORT_DPB, -1 }, in dvo_port_to_port()
1724 [PORT_C] = { DVO_PORT_HDMIC, DVO_PORT_DPC, -1 }, in dvo_port_to_port()
1725 [PORT_D] = { DVO_PORT_HDMID, DVO_PORT_DPD, -1 }, in dvo_port_to_port()
1727 [PORT_F] = { DVO_PORT_HDMIF, DVO_PORT_DPF, -1 }, in dvo_port_to_port()
1728 [PORT_G] = { DVO_PORT_HDMIG, DVO_PORT_DPG, -1 }, in dvo_port_to_port()
1729 [PORT_H] = { DVO_PORT_HDMIH, DVO_PORT_DPH, -1 }, in dvo_port_to_port()
1730 [PORT_I] = { DVO_PORT_HDMII, DVO_PORT_DPI, -1 }, in dvo_port_to_port()
1737 [PORT_A] = { DVO_PORT_HDMIA, DVO_PORT_DPA, -1 }, in dvo_port_to_port()
1738 [PORT_B] = { DVO_PORT_HDMIB, DVO_PORT_DPB, -1 }, in dvo_port_to_port()
1739 [PORT_C] = { -1 }, in dvo_port_to_port()
1740 [PORT_TC1] = { DVO_PORT_HDMIC, DVO_PORT_DPC, -1 }, in dvo_port_to_port()
1741 [PORT_TC2] = { DVO_PORT_HDMID, DVO_PORT_DPD, -1 }, in dvo_port_to_port()
1748 [PORT_A] = { DVO_PORT_HDMIA, DVO_PORT_DPA, -1 }, in dvo_port_to_port()
1749 [PORT_B] = { -1 }, in dvo_port_to_port()
1750 [PORT_C] = { -1 }, in dvo_port_to_port()
1751 [PORT_TC1] = { DVO_PORT_HDMIB, DVO_PORT_DPB, -1 }, in dvo_port_to_port()
1752 [PORT_TC2] = { DVO_PORT_HDMIC, DVO_PORT_DPC, -1 }, in dvo_port_to_port()
1753 [PORT_TC3] = { DVO_PORT_HDMID, DVO_PORT_DPD, -1 }, in dvo_port_to_port()
1754 [PORT_TC4] = { DVO_PORT_HDMIE, DVO_PORT_DPE, -1 }, in dvo_port_to_port()
1757 [PORT_A] = { DVO_PORT_HDMIA, DVO_PORT_DPA, -1 }, in dvo_port_to_port()
1758 [PORT_B] = { DVO_PORT_HDMIB, DVO_PORT_DPB, -1 }, in dvo_port_to_port()
1759 [PORT_C] = { DVO_PORT_HDMIC, DVO_PORT_DPC, -1 }, in dvo_port_to_port()
1760 [PORT_D_XELPD] = { DVO_PORT_HDMID, DVO_PORT_DPD, -1 }, in dvo_port_to_port()
1761 [PORT_E_XELPD] = { DVO_PORT_HDMIE, DVO_PORT_DPE, -1 }, in dvo_port_to_port()
1762 [PORT_TC1] = { DVO_PORT_HDMIF, DVO_PORT_DPF, -1 }, in dvo_port_to_port()
1763 [PORT_TC2] = { DVO_PORT_HDMIG, DVO_PORT_DPG, -1 }, in dvo_port_to_port()
1764 [PORT_TC3] = { DVO_PORT_HDMIH, DVO_PORT_DPH, -1 }, in dvo_port_to_port()
1765 [PORT_TC4] = { DVO_PORT_HDMII, DVO_PORT_DPI, -1 }, in dvo_port_to_port()
1831 struct drm_i915_private *i915 = devdata->i915; in sanitize_device_type()
1837 if (!(devdata->child.device_type & DEVICE_TYPE_TMDS_DVI_SIGNALING)) in sanitize_device_type()
1840 is_hdmi = !(devdata->child.device_type & DEVICE_TYPE_NOT_HDMI_OUTPUT); in sanitize_device_type()
1842 drm_dbg_kms(&i915->drm, "VBT claims port A supports DVI%s, ignoring\n", in sanitize_device_type()
1845 devdata->child.device_type &= ~DEVICE_TYPE_TMDS_DVI_SIGNALING; in sanitize_device_type()
1846 devdata->child.device_type |= DEVICE_TYPE_NOT_HDMI_OUTPUT; in sanitize_device_type()
1852 return devdata->child.device_type & DEVICE_TYPE_ANALOG_OUTPUT; in intel_bios_encoder_supports_crt()
1858 return devdata->child.device_type & DEVICE_TYPE_TMDS_DVI_SIGNALING; in intel_bios_encoder_supports_dvi()
1865 (devdata->child.device_type & DEVICE_TYPE_NOT_HDMI_OUTPUT) == 0; in intel_bios_encoder_supports_hdmi()
1871 return devdata->child.device_type & DEVICE_TYPE_DISPLAYPORT_OUTPUT; in intel_bios_encoder_supports_dp()
1878 devdata->child.device_type & DEVICE_TYPE_INTERNAL_CONNECTOR; in intel_bios_encoder_supports_edp()
1897 const struct child_device_config *child = &devdata->child; in parse_ddi_port()
1903 port = dvo_port_to_port(i915, child->dvo_port); in parse_ddi_port()
1908 drm_dbg_kms(&i915->drm, in parse_ddi_port()
1914 info = &i915->vbt.ddi_port_info[port]; in parse_ddi_port()
1916 if (info->devdata) { in parse_ddi_port()
1917 drm_dbg_kms(&i915->drm, in parse_ddi_port()
1934 drm_dbg_kms(&i915->drm, in parse_ddi_port()
1935 … "Port %c VBT info: CRT:%d DVI:%d HDMI:%d DP:%d eDP:%d LSPCON:%d USB-Type-C:%d TBT:%d DSC:%d\n", in parse_ddi_port()
1937 HAS_LSPCON(i915) && child->lspcon, in parse_ddi_port()
1939 devdata->dsc != NULL); in parse_ddi_port()
1944 ddc_pin = map_ddc_pin(i915, child->ddc_pin); in parse_ddi_port()
1946 info->alternate_ddc_pin = ddc_pin; in parse_ddi_port()
1949 drm_dbg_kms(&i915->drm, in parse_ddi_port()
1957 info->alternate_aux_channel = child->aux_channel; in parse_ddi_port()
1962 if (i915->vbt.version >= 158) { in parse_ddi_port()
1963 /* The VBT HDMI level shift values match the table we have. */ in parse_ddi_port()
1964 u8 hdmi_level_shift = child->hdmi_level_shifter_value; in parse_ddi_port()
1965 drm_dbg_kms(&i915->drm, in parse_ddi_port()
1966 "Port %c VBT HDMI level shift: %d\n", in parse_ddi_port()
1969 info->hdmi_level_shift = hdmi_level_shift; in parse_ddi_port()
1970 info->hdmi_level_shift_set = true; in parse_ddi_port()
1973 if (i915->vbt.version >= 204) { in parse_ddi_port()
1976 switch (child->hdmi_max_data_rate) { in parse_ddi_port()
1978 MISSING_CASE(child->hdmi_max_data_rate); in parse_ddi_port()
1992 drm_dbg_kms(&i915->drm, in parse_ddi_port()
1995 info->max_tmds_clock = max_tmds_clock; in parse_ddi_port()
2001 drm_dbg_kms(&i915->drm, in parse_ddi_port()
2002 "Port %c VBT (e)DP boost level: %d\n", in parse_ddi_port()
2007 drm_dbg_kms(&i915->drm, in parse_ddi_port()
2008 "Port %c VBT HDMI boost level: %d\n", in parse_ddi_port()
2012 if (i915->vbt.version >= 216) { in parse_ddi_port()
2013 if (i915->vbt.version >= 230) in parse_ddi_port()
2014 info->dp_max_link_rate = parse_bdb_230_dp_max_link_rate(child->dp_max_link_rate); in parse_ddi_port()
2016 info->dp_max_link_rate = parse_bdb_216_dp_max_link_rate(child->dp_max_link_rate); in parse_ddi_port()
2018 drm_dbg_kms(&i915->drm, in parse_ddi_port()
2020 port_name(port), info->dp_max_link_rate); in parse_ddi_port()
2023 info->devdata = devdata; in parse_ddi_port()
2033 if (i915->vbt.version < 155) in parse_ddi_ports()
2036 list_for_each_entry(devdata, &i915->vbt.display_devices, node) in parse_ddi_ports()
2054 drm_dbg_kms(&i915->drm, in parse_general_definitions()
2061 drm_dbg_kms(&i915->drm, in parse_general_definitions()
2067 bus_pin = defs->crt_ddc_gmbus_pin; in parse_general_definitions()
2068 drm_dbg_kms(&i915->drm, "crt_ddc_bus_pin: %d\n", bus_pin); in parse_general_definitions()
2070 i915->vbt.crt_ddc_pin = bus_pin; in parse_general_definitions()
2072 if (bdb->version < 106) { in parse_general_definitions()
2074 } else if (bdb->version < 111) { in parse_general_definitions()
2076 } else if (bdb->version < 195) { in parse_general_definitions()
2078 } else if (bdb->version == 195) { in parse_general_definitions()
2080 } else if (bdb->version <= 215) { in parse_general_definitions()
2082 } else if (bdb->version <= 237) { in parse_general_definitions()
2087 drm_dbg(&i915->drm, in parse_general_definitions()
2089 bdb->version, expected_size); in parse_general_definitions()
2093 if (defs->child_dev_size != expected_size) in parse_general_definitions()
2094 drm_err(&i915->drm, in parse_general_definitions()
2096 defs->child_dev_size, expected_size, bdb->version); in parse_general_definitions()
2099 if (defs->child_dev_size < LEGACY_CHILD_DEVICE_CONFIG_SIZE) { in parse_general_definitions()
2100 drm_dbg_kms(&i915->drm, in parse_general_definitions()
2102 defs->child_dev_size); in parse_general_definitions()
2107 child_device_num = (block_size - sizeof(*defs)) / defs->child_dev_size; in parse_general_definitions()
2111 if (!child->device_type) in parse_general_definitions()
2114 drm_dbg_kms(&i915->drm, in parse_general_definitions()
2116 child->device_type); in parse_general_definitions()
2122 devdata->i915 = i915; in parse_general_definitions()
2129 memcpy(&devdata->child, child, in parse_general_definitions()
2130 min_t(size_t, defs->child_dev_size, sizeof(*child))); in parse_general_definitions()
2132 list_add_tail(&devdata->node, &i915->vbt.display_devices); in parse_general_definitions()
2135 if (list_empty(&i915->vbt.display_devices)) in parse_general_definitions()
2136 drm_dbg_kms(&i915->drm, in parse_general_definitions()
2144 i915->vbt.crt_ddc_pin = GMBUS_PIN_VGADDC; in init_vbt_defaults()
2147 i915->vbt.backlight.present = true; in init_vbt_defaults()
2150 i915->vbt.lvds_dither = 1; in init_vbt_defaults()
2153 i915->vbt.sdvo_lvds_vbt_mode = NULL; in init_vbt_defaults()
2156 i915->vbt.int_tv_support = 1; in init_vbt_defaults()
2157 i915->vbt.int_crt_support = 1; in init_vbt_defaults()
2160 i915->vbt.int_lvds_support = 1; in init_vbt_defaults()
2163 i915->vbt.lvds_use_ssc = 1; in init_vbt_defaults()
2168 i915->vbt.lvds_ssc_freq = intel_bios_ssc_frequency(i915, in init_vbt_defaults()
2170 drm_dbg_kms(&i915->drm, "Set default to SSC at %d kHz\n", in init_vbt_defaults()
2171 i915->vbt.lvds_ssc_freq); in init_vbt_defaults()
2202 devdata->i915 = i915; in init_vbt_missing_defaults()
2203 child = &devdata->child; in init_vbt_missing_defaults()
2206 child->dvo_port = DVO_PORT_HDMIF; in init_vbt_missing_defaults()
2208 child->dvo_port = DVO_PORT_HDMIE; in init_vbt_missing_defaults()
2210 child->dvo_port = DVO_PORT_HDMIA + port; in init_vbt_missing_defaults()
2213 child->device_type |= DEVICE_TYPE_TMDS_DVI_SIGNALING; in init_vbt_missing_defaults()
2216 child->device_type |= DEVICE_TYPE_DISPLAYPORT_OUTPUT; in init_vbt_missing_defaults()
2219 child->device_type |= DEVICE_TYPE_INTERNAL_CONNECTOR; in init_vbt_missing_defaults()
2221 list_add_tail(&devdata->node, &i915->vbt.display_devices); in init_vbt_missing_defaults()
2223 drm_dbg_kms(&i915->drm, in init_vbt_missing_defaults()
2225 child->device_type, port_name(port)); in init_vbt_missing_defaults()
2229 i915->vbt.version = 155; in init_vbt_missing_defaults()
2236 return _vbt + vbt->bdb_offset; in get_bdb_header()
2240 * intel_bios_is_valid_vbt - does the given buffer contain a valid VBT
2259 if (memcmp(vbt->signature, "$VBT", 4)) { in intel_bios_is_valid_vbt()
2264 if (vbt->vbt_size > size) { in intel_bios_is_valid_vbt()
2269 size = vbt->vbt_size; in intel_bios_is_valid_vbt()
2272 vbt->bdb_offset, in intel_bios_is_valid_vbt()
2280 if (range_overflows_t(size_t, vbt->bdb_offset, bdb->bdb_size, size)) { in intel_bios_is_valid_vbt()
2290 struct pci_dev *pdev = to_pci_dev(i915->drm.dev); in oprom_get_vbt()
2306 size -= i; in oprom_get_vbt()
2314 drm_dbg(&i915->drm, "VBT header incomplete\n"); in oprom_get_vbt()
2320 drm_dbg(&i915->drm, in oprom_get_vbt()
2348 * intel_bios_init - find VBT and initialize settings from the BIOS
2357 const struct vbt_header *vbt = i915->opregion.vbt; in intel_bios_init()
2361 INIT_LIST_HEAD(&i915->vbt.display_devices); in intel_bios_init()
2364 drm_dbg_kms(&i915->drm, in intel_bios_init()
2379 drm_dbg_kms(&i915->drm, "Found valid VBT in PCI ROM\n"); in intel_bios_init()
2383 i915->vbt.version = bdb->version; in intel_bios_init()
2385 drm_dbg_kms(&i915->drm, in intel_bios_init()
2387 (int)sizeof(vbt->signature), vbt->signature, bdb->version); in intel_bios_init()
2408 drm_info(&i915->drm, in intel_bios_init()
2413 /* Further processing on pre-parsed or generated child device data */ in intel_bios_init()
2421 * intel_bios_driver_remove - Free any resources allocated by intel_bios_init()
2428 list_for_each_entry_safe(devdata, n, &i915->vbt.display_devices, node) { in intel_bios_driver_remove()
2429 list_del(&devdata->node); in intel_bios_driver_remove()
2430 kfree(devdata->dsc); in intel_bios_driver_remove()
2434 kfree(i915->vbt.sdvo_lvds_vbt_mode); in intel_bios_driver_remove()
2435 i915->vbt.sdvo_lvds_vbt_mode = NULL; in intel_bios_driver_remove()
2436 kfree(i915->vbt.lfp_lvds_vbt_mode); in intel_bios_driver_remove()
2437 i915->vbt.lfp_lvds_vbt_mode = NULL; in intel_bios_driver_remove()
2438 kfree(i915->vbt.dsi.data); in intel_bios_driver_remove()
2439 i915->vbt.dsi.data = NULL; in intel_bios_driver_remove()
2440 kfree(i915->vbt.dsi.pps); in intel_bios_driver_remove()
2441 i915->vbt.dsi.pps = NULL; in intel_bios_driver_remove()
2442 kfree(i915->vbt.dsi.config); in intel_bios_driver_remove()
2443 i915->vbt.dsi.config = NULL; in intel_bios_driver_remove()
2444 kfree(i915->vbt.dsi.deassert_seq); in intel_bios_driver_remove()
2445 i915->vbt.dsi.deassert_seq = NULL; in intel_bios_driver_remove()
2449 * intel_bios_is_tv_present - is integrated TV present in VBT
2460 if (!i915->vbt.int_tv_support) in intel_bios_is_tv_present()
2463 if (list_empty(&i915->vbt.display_devices)) in intel_bios_is_tv_present()
2466 list_for_each_entry(devdata, &i915->vbt.display_devices, node) { in intel_bios_is_tv_present()
2467 child = &devdata->child; in intel_bios_is_tv_present()
2472 switch (child->device_type) { in intel_bios_is_tv_present()
2480 /* Only when the addin_offset is non-zero, it is regarded in intel_bios_is_tv_present()
2483 if (child->addin_offset) in intel_bios_is_tv_present()
2491 * intel_bios_is_lvds_present - is LVDS present in VBT
2503 if (list_empty(&i915->vbt.display_devices)) in intel_bios_is_lvds_present()
2506 list_for_each_entry(devdata, &i915->vbt.display_devices, node) { in intel_bios_is_lvds_present()
2507 child = &devdata->child; in intel_bios_is_lvds_present()
2513 if (child->device_type != DEVICE_TYPE_INT_LFP && in intel_bios_is_lvds_present()
2514 child->device_type != DEVICE_TYPE_LFP) in intel_bios_is_lvds_present()
2517 if (intel_gmbus_is_valid_pin(i915, child->i2c_pin)) in intel_bios_is_lvds_present()
2518 *i2c_pin = child->i2c_pin; in intel_bios_is_lvds_present()
2522 * information from AIM blocks, a non-zero addin offset is in intel_bios_is_lvds_present()
2525 if (child->addin_offset) in intel_bios_is_lvds_present()
2533 if (i915->opregion.vbt) in intel_bios_is_lvds_present()
2541 * intel_bios_is_port_present - is the specified digital port present
2563 &i915->vbt.ddi_port_info[port]; in intel_bios_is_port_present()
2565 return port_info->devdata; in intel_bios_is_port_present()
2569 if (drm_WARN_ON(&i915->drm, in intel_bios_is_port_present()
2573 list_for_each_entry(devdata, &i915->vbt.display_devices, node) { in intel_bios_is_port_present()
2574 child = &devdata->child; in intel_bios_is_port_present()
2576 if ((child->dvo_port == port_mapping[port].dp || in intel_bios_is_port_present()
2577 child->dvo_port == port_mapping[port].hdmi) && in intel_bios_is_port_present()
2578 (child->device_type & (DEVICE_TYPE_TMDS_DVI_SIGNALING | in intel_bios_is_port_present()
2587 * intel_bios_is_port_edp - is the device in given port eDP
2613 list_for_each_entry(devdata, &i915->vbt.display_devices, node) { in intel_bios_is_port_edp()
2614 child = &devdata->child; in intel_bios_is_port_edp()
2616 if (child->dvo_port == port_mapping[port] && in intel_bios_is_port_edp()
2617 (child->device_type & DEVICE_TYPE_eDP_BITS) == in intel_bios_is_port_edp()
2645 if ((child->device_type & DEVICE_TYPE_DP_DUAL_MODE_BITS) != in child_dev_is_dp_dual_mode()
2649 if (child->dvo_port == port_mapping[port].dp) in child_dev_is_dp_dual_mode()
2653 if (child->dvo_port == port_mapping[port].hdmi && in child_dev_is_dp_dual_mode()
2654 child->aux_channel != 0) in child_dev_is_dp_dual_mode()
2665 list_for_each_entry(devdata, &i915->vbt.display_devices, node) { in intel_bios_is_port_dp_dual_mode()
2666 if (child_dev_is_dp_dual_mode(&devdata->child, port)) in intel_bios_is_port_dp_dual_mode()
2674 * intel_bios_is_dsi_present - is DSI present in VBT
2687 list_for_each_entry(devdata, &i915->vbt.display_devices, node) { in intel_bios_is_dsi_present()
2688 child = &devdata->child; in intel_bios_is_dsi_present()
2690 if (!(child->device_type & DEVICE_TYPE_MIPI_OUTPUT)) in intel_bios_is_dsi_present()
2693 dvo_port = child->dvo_port; in intel_bios_is_dsi_present()
2699 *port = dvo_port - DVO_PORT_MIPIA; in intel_bios_is_dsi_present()
2704 drm_dbg_kms(&i915->drm, in intel_bios_is_dsi_present()
2706 port_name(dvo_port - DVO_PORT_MIPIA)); in intel_bios_is_dsi_present()
2717 struct drm_dsc_config *vdsc_cfg = &crtc_state->dsc.config; in fill_dsc()
2720 vdsc_cfg->dsc_version_major = dsc->version_major; in fill_dsc()
2721 vdsc_cfg->dsc_version_minor = dsc->version_minor; in fill_dsc()
2723 if (dsc->support_12bpc && dsc_max_bpc >= 12) in fill_dsc()
2725 else if (dsc->support_10bpc && dsc_max_bpc >= 10) in fill_dsc()
2727 else if (dsc->support_8bpc && dsc_max_bpc >= 8) in fill_dsc()
2733 crtc_state->pipe_bpp = bpc * 3; in fill_dsc()
2735 crtc_state->dsc.compressed_bpp = min(crtc_state->pipe_bpp, in fill_dsc()
2736 VBT_DSC_MAX_BPP(dsc->max_bpp)); in fill_dsc()
2744 if (dsc->slices_per_line & BIT(2)) { in fill_dsc()
2745 crtc_state->dsc.slice_count = 4; in fill_dsc()
2746 } else if (dsc->slices_per_line & BIT(1)) { in fill_dsc()
2747 crtc_state->dsc.slice_count = 2; in fill_dsc()
2750 if (!(dsc->slices_per_line & BIT(0))) in fill_dsc()
2753 crtc_state->dsc.slice_count = 1; in fill_dsc()
2756 if (crtc_state->hw.adjusted_mode.crtc_hdisplay % in fill_dsc()
2757 crtc_state->dsc.slice_count != 0) in fill_dsc()
2759 crtc_state->hw.adjusted_mode.crtc_hdisplay, in fill_dsc()
2760 crtc_state->dsc.slice_count); in fill_dsc()
2766 vdsc_cfg->rc_model_size = drm_dsc_dp_rc_buffer_size(dsc->rc_buffer_block_size, in fill_dsc()
2767 dsc->rc_buffer_size); in fill_dsc()
2770 vdsc_cfg->line_buf_depth = VBT_DSC_LINE_BUFFER_DEPTH(dsc->line_buffer_depth); in fill_dsc()
2772 vdsc_cfg->block_pred_enable = dsc->block_prediction_enable; in fill_dsc()
2774 vdsc_cfg->slice_height = dsc->slice_height; in fill_dsc()
2782 struct drm_i915_private *i915 = to_i915(encoder->base.dev); in intel_bios_get_dsc_params()
2786 list_for_each_entry(devdata, &i915->vbt.display_devices, node) { in intel_bios_get_dsc_params()
2787 child = &devdata->child; in intel_bios_get_dsc_params()
2789 if (!(child->device_type & DEVICE_TYPE_MIPI_OUTPUT)) in intel_bios_get_dsc_params()
2792 if (child->dvo_port - DVO_PORT_MIPIA == encoder->port) { in intel_bios_get_dsc_params()
2793 if (!devdata->dsc) in intel_bios_get_dsc_params()
2797 fill_dsc(crtc_state, devdata->dsc, dsc_max_bpc); in intel_bios_get_dsc_params()
2807 * intel_bios_is_port_hpd_inverted - is HPD inverted for %port
2818 i915->vbt.ddi_port_info[port].devdata; in intel_bios_is_port_hpd_inverted()
2820 if (drm_WARN_ON_ONCE(&i915->drm, in intel_bios_is_port_hpd_inverted()
2824 return devdata && devdata->child.hpd_invert; in intel_bios_is_port_hpd_inverted()
2828 * intel_bios_is_lspcon_present - if LSPCON is attached on %port
2839 i915->vbt.ddi_port_info[port].devdata; in intel_bios_is_lspcon_present()
2841 return HAS_LSPCON(i915) && devdata && devdata->child.lspcon; in intel_bios_is_lspcon_present()
2845 * intel_bios_is_lane_reversal_needed - if lane reversal needed on port
2856 i915->vbt.ddi_port_info[port].devdata; in intel_bios_is_lane_reversal_needed()
2858 return devdata && devdata->child.lane_reversal; in intel_bios_is_lane_reversal_needed()
2865 &i915->vbt.ddi_port_info[port]; in intel_bios_port_aux_ch()
2868 if (!info->alternate_aux_channel) { in intel_bios_port_aux_ch()
2871 drm_dbg_kms(&i915->drm, in intel_bios_port_aux_ch()
2881 * ADL-S VBT uses PHY based mapping. Combo PHYs A,B,C,D,E in intel_bios_port_aux_ch()
2884 switch (info->alternate_aux_channel) { in intel_bios_port_aux_ch()
2945 MISSING_CASE(info->alternate_aux_channel); in intel_bios_port_aux_ch()
2950 drm_dbg_kms(&i915->drm, "using AUX %c for port %c (VBT)\n", in intel_bios_port_aux_ch()
2958 struct drm_i915_private *i915 = to_i915(encoder->base.dev); in intel_bios_max_tmds_clock()
2960 return i915->vbt.ddi_port_info[encoder->port].max_tmds_clock; in intel_bios_max_tmds_clock()
2965 struct drm_i915_private *i915 = to_i915(encoder->base.dev); in intel_bios_hdmi_level_shift()
2967 &i915->vbt.ddi_port_info[encoder->port]; in intel_bios_hdmi_level_shift()
2969 return info->hdmi_level_shift_set ? info->hdmi_level_shift : -1; in intel_bios_hdmi_level_shift()
2974 if (!devdata || devdata->i915->vbt.version < 196 || !devdata->child.iboost) in intel_bios_encoder_dp_boost_level()
2977 return translate_iboost(devdata->child.dp_iboost_level); in intel_bios_encoder_dp_boost_level()
2982 if (!devdata || devdata->i915->vbt.version < 196 || !devdata->child.iboost) in intel_bios_encoder_hdmi_boost_level()
2985 return translate_iboost(devdata->child.hdmi_iboost_level); in intel_bios_encoder_hdmi_boost_level()
2990 struct drm_i915_private *i915 = to_i915(encoder->base.dev); in intel_bios_dp_max_link_rate()
2992 return i915->vbt.ddi_port_info[encoder->port].dp_max_link_rate; in intel_bios_dp_max_link_rate()
2997 struct drm_i915_private *i915 = to_i915(encoder->base.dev); in intel_bios_alternate_ddc_pin()
2999 return i915->vbt.ddi_port_info[encoder->port].alternate_ddc_pin; in intel_bios_alternate_ddc_pin()
3004 return devdata->i915->vbt.version >= 195 && devdata->child.dp_usb_type_c; in intel_bios_encoder_supports_typec_usb()
3009 return devdata->i915->vbt.version >= 209 && devdata->child.tbt; in intel_bios_encoder_supports_tbt()
3015 return i915->vbt.ddi_port_info[port].devdata; in intel_bios_encoder_data_lookup()