1 /* 2 * Copyright © 2006 Intel Corporation 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the "Software"), 6 * to deal in the Software without restriction, including without limitation 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 * and/or sell copies of the Software, and to permit persons to whom the 9 * Software is furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice (including the next 12 * paragraph) shall be included in all copies or substantial portions of the 13 * Software. 14 * 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 * SOFTWARE. 22 * 23 * Authors: 24 * Eric Anholt <eric@anholt.net> 25 * 26 */ 27 28 #include <drm/drm_dp_helper.h> 29 #include <drm/drmP.h> 30 #include <drm/i915_drm.h> 31 #include "i915_drv.h" 32 33 #define _INTEL_BIOS_PRIVATE 34 #include "intel_vbt_defs.h" 35 36 /** 37 * DOC: Video BIOS Table (VBT) 38 * 39 * The Video BIOS Table, or VBT, provides platform and board specific 40 * configuration information to the driver that is not discoverable or available 41 * through other means. The configuration is mostly related to display 42 * hardware. The VBT is available via the ACPI OpRegion or, on older systems, in 43 * the PCI ROM. 44 * 45 * The VBT consists of a VBT Header (defined as &struct vbt_header), a BDB 46 * Header (&struct bdb_header), and a number of BIOS Data Blocks (BDB) that 47 * contain the actual configuration information. The VBT Header, and thus the 48 * VBT, begins with "$VBT" signature. The VBT Header contains the offset of the 49 * BDB Header. The data blocks are concatenated after the BDB Header. The data 50 * blocks have a 1-byte Block ID, 2-byte Block Size, and Block Size bytes of 51 * data. (Block 53, the MIPI Sequence Block is an exception.) 52 * 53 * The driver parses the VBT during load. The relevant information is stored in 54 * driver private data for ease of use, and the actual VBT is not read after 55 * that. 56 */ 57 58 #define SLAVE_ADDR1 0x70 59 #define SLAVE_ADDR2 0x72 60 61 /* Get BDB block size given a pointer to Block ID. */ 62 static u32 _get_blocksize(const u8 *block_base) 63 { 64 /* The MIPI Sequence Block v3+ has a separate size field. */ 65 if (*block_base == BDB_MIPI_SEQUENCE && *(block_base + 3) >= 3) 66 return *((const u32 *)(block_base + 4)); 67 else 68 return *((const u16 *)(block_base + 1)); 69 } 70 71 /* Get BDB block size give a pointer to data after Block ID and Block Size. */ 72 static u32 get_blocksize(const void *block_data) 73 { 74 return _get_blocksize(block_data - 3); 75 } 76 77 static const void * 78 find_section(const void *_bdb, int section_id) 79 { 80 const struct bdb_header *bdb = _bdb; 81 const u8 *base = _bdb; 82 int index = 0; 83 u32 total, current_size; 84 u8 current_id; 85 86 /* skip to first section */ 87 index += bdb->header_size; 88 total = bdb->bdb_size; 89 90 /* walk the sections looking for section_id */ 91 while (index + 3 < total) { 92 current_id = *(base + index); 93 current_size = _get_blocksize(base + index); 94 index += 3; 95 96 if (index + current_size > total) 97 return NULL; 98 99 if (current_id == section_id) 100 return base + index; 101 102 index += current_size; 103 } 104 105 return NULL; 106 } 107 108 static void 109 fill_detail_timing_data(struct drm_display_mode *panel_fixed_mode, 110 const struct lvds_dvo_timing *dvo_timing) 111 { 112 panel_fixed_mode->hdisplay = (dvo_timing->hactive_hi << 8) | 113 dvo_timing->hactive_lo; 114 panel_fixed_mode->hsync_start = panel_fixed_mode->hdisplay + 115 ((dvo_timing->hsync_off_hi << 8) | dvo_timing->hsync_off_lo); 116 panel_fixed_mode->hsync_end = panel_fixed_mode->hsync_start + 117 ((dvo_timing->hsync_pulse_width_hi << 8) | 118 dvo_timing->hsync_pulse_width_lo); 119 panel_fixed_mode->htotal = panel_fixed_mode->hdisplay + 120 ((dvo_timing->hblank_hi << 8) | dvo_timing->hblank_lo); 121 122 panel_fixed_mode->vdisplay = (dvo_timing->vactive_hi << 8) | 123 dvo_timing->vactive_lo; 124 panel_fixed_mode->vsync_start = panel_fixed_mode->vdisplay + 125 ((dvo_timing->vsync_off_hi << 4) | dvo_timing->vsync_off_lo); 126 panel_fixed_mode->vsync_end = panel_fixed_mode->vsync_start + 127 ((dvo_timing->vsync_pulse_width_hi << 4) | 128 dvo_timing->vsync_pulse_width_lo); 129 panel_fixed_mode->vtotal = panel_fixed_mode->vdisplay + 130 ((dvo_timing->vblank_hi << 8) | dvo_timing->vblank_lo); 131 panel_fixed_mode->clock = dvo_timing->clock * 10; 132 panel_fixed_mode->type = DRM_MODE_TYPE_PREFERRED; 133 134 if (dvo_timing->hsync_positive) 135 panel_fixed_mode->flags |= DRM_MODE_FLAG_PHSYNC; 136 else 137 panel_fixed_mode->flags |= DRM_MODE_FLAG_NHSYNC; 138 139 if (dvo_timing->vsync_positive) 140 panel_fixed_mode->flags |= DRM_MODE_FLAG_PVSYNC; 141 else 142 panel_fixed_mode->flags |= DRM_MODE_FLAG_NVSYNC; 143 144 panel_fixed_mode->width_mm = (dvo_timing->himage_hi << 8) | 145 dvo_timing->himage_lo; 146 panel_fixed_mode->height_mm = (dvo_timing->vimage_hi << 8) | 147 dvo_timing->vimage_lo; 148 149 /* Some VBTs have bogus h/vtotal values */ 150 if (panel_fixed_mode->hsync_end > panel_fixed_mode->htotal) 151 panel_fixed_mode->htotal = panel_fixed_mode->hsync_end + 1; 152 if (panel_fixed_mode->vsync_end > panel_fixed_mode->vtotal) 153 panel_fixed_mode->vtotal = panel_fixed_mode->vsync_end + 1; 154 155 drm_mode_set_name(panel_fixed_mode); 156 } 157 158 static const struct lvds_dvo_timing * 159 get_lvds_dvo_timing(const struct bdb_lvds_lfp_data *lvds_lfp_data, 160 const struct bdb_lvds_lfp_data_ptrs *lvds_lfp_data_ptrs, 161 int index) 162 { 163 /* 164 * the size of fp_timing varies on the different platform. 165 * So calculate the DVO timing relative offset in LVDS data 166 * entry to get the DVO timing entry 167 */ 168 169 int lfp_data_size = 170 lvds_lfp_data_ptrs->ptr[1].dvo_timing_offset - 171 lvds_lfp_data_ptrs->ptr[0].dvo_timing_offset; 172 int dvo_timing_offset = 173 lvds_lfp_data_ptrs->ptr[0].dvo_timing_offset - 174 lvds_lfp_data_ptrs->ptr[0].fp_timing_offset; 175 char *entry = (char *)lvds_lfp_data->data + lfp_data_size * index; 176 177 return (struct lvds_dvo_timing *)(entry + dvo_timing_offset); 178 } 179 180 /* get lvds_fp_timing entry 181 * this function may return NULL if the corresponding entry is invalid 182 */ 183 static const struct lvds_fp_timing * 184 get_lvds_fp_timing(const struct bdb_header *bdb, 185 const struct bdb_lvds_lfp_data *data, 186 const struct bdb_lvds_lfp_data_ptrs *ptrs, 187 int index) 188 { 189 size_t data_ofs = (const u8 *)data - (const u8 *)bdb; 190 u16 data_size = ((const u16 *)data)[-1]; /* stored in header */ 191 size_t ofs; 192 193 if (index >= ARRAY_SIZE(ptrs->ptr)) 194 return NULL; 195 ofs = ptrs->ptr[index].fp_timing_offset; 196 if (ofs < data_ofs || 197 ofs + sizeof(struct lvds_fp_timing) > data_ofs + data_size) 198 return NULL; 199 return (const struct lvds_fp_timing *)((const u8 *)bdb + ofs); 200 } 201 202 /* Try to find integrated panel data */ 203 static void 204 parse_lfp_panel_data(struct drm_i915_private *dev_priv, 205 const struct bdb_header *bdb) 206 { 207 const struct bdb_lvds_options *lvds_options; 208 const struct bdb_lvds_lfp_data *lvds_lfp_data; 209 const struct bdb_lvds_lfp_data_ptrs *lvds_lfp_data_ptrs; 210 const struct lvds_dvo_timing *panel_dvo_timing; 211 const struct lvds_fp_timing *fp_timing; 212 struct drm_display_mode *panel_fixed_mode; 213 int panel_type; 214 int drrs_mode; 215 int ret; 216 217 lvds_options = find_section(bdb, BDB_LVDS_OPTIONS); 218 if (!lvds_options) 219 return; 220 221 dev_priv->vbt.lvds_dither = lvds_options->pixel_dither; 222 223 ret = intel_opregion_get_panel_type(dev_priv); 224 if (ret >= 0) { 225 WARN_ON(ret > 0xf); 226 panel_type = ret; 227 DRM_DEBUG_KMS("Panel type: %d (OpRegion)\n", panel_type); 228 } else { 229 if (lvds_options->panel_type > 0xf) { 230 DRM_DEBUG_KMS("Invalid VBT panel type 0x%x\n", 231 lvds_options->panel_type); 232 return; 233 } 234 panel_type = lvds_options->panel_type; 235 DRM_DEBUG_KMS("Panel type: %d (VBT)\n", panel_type); 236 } 237 238 dev_priv->vbt.panel_type = panel_type; 239 240 drrs_mode = (lvds_options->dps_panel_type_bits 241 >> (panel_type * 2)) & MODE_MASK; 242 /* 243 * VBT has static DRRS = 0 and seamless DRRS = 2. 244 * The below piece of code is required to adjust vbt.drrs_type 245 * to match the enum drrs_support_type. 246 */ 247 switch (drrs_mode) { 248 case 0: 249 dev_priv->vbt.drrs_type = STATIC_DRRS_SUPPORT; 250 DRM_DEBUG_KMS("DRRS supported mode is static\n"); 251 break; 252 case 2: 253 dev_priv->vbt.drrs_type = SEAMLESS_DRRS_SUPPORT; 254 DRM_DEBUG_KMS("DRRS supported mode is seamless\n"); 255 break; 256 default: 257 dev_priv->vbt.drrs_type = DRRS_NOT_SUPPORTED; 258 DRM_DEBUG_KMS("DRRS not supported (VBT input)\n"); 259 break; 260 } 261 262 lvds_lfp_data = find_section(bdb, BDB_LVDS_LFP_DATA); 263 if (!lvds_lfp_data) 264 return; 265 266 lvds_lfp_data_ptrs = find_section(bdb, BDB_LVDS_LFP_DATA_PTRS); 267 if (!lvds_lfp_data_ptrs) 268 return; 269 270 dev_priv->vbt.lvds_vbt = 1; 271 272 panel_dvo_timing = get_lvds_dvo_timing(lvds_lfp_data, 273 lvds_lfp_data_ptrs, 274 panel_type); 275 276 panel_fixed_mode = kzalloc(sizeof(*panel_fixed_mode), GFP_KERNEL); 277 if (!panel_fixed_mode) 278 return; 279 280 fill_detail_timing_data(panel_fixed_mode, panel_dvo_timing); 281 282 dev_priv->vbt.lfp_lvds_vbt_mode = panel_fixed_mode; 283 284 DRM_DEBUG_KMS("Found panel mode in BIOS VBT tables:\n"); 285 drm_mode_debug_printmodeline(panel_fixed_mode); 286 287 fp_timing = get_lvds_fp_timing(bdb, lvds_lfp_data, 288 lvds_lfp_data_ptrs, 289 panel_type); 290 if (fp_timing) { 291 /* check the resolution, just to be sure */ 292 if (fp_timing->x_res == panel_fixed_mode->hdisplay && 293 fp_timing->y_res == panel_fixed_mode->vdisplay) { 294 dev_priv->vbt.bios_lvds_val = fp_timing->lvds_reg_val; 295 DRM_DEBUG_KMS("VBT initial LVDS value %x\n", 296 dev_priv->vbt.bios_lvds_val); 297 } 298 } 299 } 300 301 static void 302 parse_lfp_backlight(struct drm_i915_private *dev_priv, 303 const struct bdb_header *bdb) 304 { 305 const struct bdb_lfp_backlight_data *backlight_data; 306 const struct bdb_lfp_backlight_data_entry *entry; 307 int panel_type = dev_priv->vbt.panel_type; 308 309 backlight_data = find_section(bdb, BDB_LVDS_BACKLIGHT); 310 if (!backlight_data) 311 return; 312 313 if (backlight_data->entry_size != sizeof(backlight_data->data[0])) { 314 DRM_DEBUG_KMS("Unsupported backlight data entry size %u\n", 315 backlight_data->entry_size); 316 return; 317 } 318 319 entry = &backlight_data->data[panel_type]; 320 321 dev_priv->vbt.backlight.present = entry->type == BDB_BACKLIGHT_TYPE_PWM; 322 if (!dev_priv->vbt.backlight.present) { 323 DRM_DEBUG_KMS("PWM backlight not present in VBT (type %u)\n", 324 entry->type); 325 return; 326 } 327 328 dev_priv->vbt.backlight.type = INTEL_BACKLIGHT_DISPLAY_DDI; 329 if (bdb->version >= 191 && 330 get_blocksize(backlight_data) >= sizeof(*backlight_data)) { 331 const struct bdb_lfp_backlight_control_method *method; 332 333 method = &backlight_data->backlight_control[panel_type]; 334 dev_priv->vbt.backlight.type = method->type; 335 dev_priv->vbt.backlight.controller = method->controller; 336 } 337 338 dev_priv->vbt.backlight.pwm_freq_hz = entry->pwm_freq_hz; 339 dev_priv->vbt.backlight.active_low_pwm = entry->active_low_pwm; 340 dev_priv->vbt.backlight.min_brightness = entry->min_brightness; 341 DRM_DEBUG_KMS("VBT backlight PWM modulation frequency %u Hz, " 342 "active %s, min brightness %u, level %u, controller %u\n", 343 dev_priv->vbt.backlight.pwm_freq_hz, 344 dev_priv->vbt.backlight.active_low_pwm ? "low" : "high", 345 dev_priv->vbt.backlight.min_brightness, 346 backlight_data->level[panel_type], 347 dev_priv->vbt.backlight.controller); 348 } 349 350 /* Try to find sdvo panel data */ 351 static void 352 parse_sdvo_panel_data(struct drm_i915_private *dev_priv, 353 const struct bdb_header *bdb) 354 { 355 const struct lvds_dvo_timing *dvo_timing; 356 struct drm_display_mode *panel_fixed_mode; 357 int index; 358 359 index = i915.vbt_sdvo_panel_type; 360 if (index == -2) { 361 DRM_DEBUG_KMS("Ignore SDVO panel mode from BIOS VBT tables.\n"); 362 return; 363 } 364 365 if (index == -1) { 366 const struct bdb_sdvo_lvds_options *sdvo_lvds_options; 367 368 sdvo_lvds_options = find_section(bdb, BDB_SDVO_LVDS_OPTIONS); 369 if (!sdvo_lvds_options) 370 return; 371 372 index = sdvo_lvds_options->panel_type; 373 } 374 375 dvo_timing = find_section(bdb, BDB_SDVO_PANEL_DTDS); 376 if (!dvo_timing) 377 return; 378 379 panel_fixed_mode = kzalloc(sizeof(*panel_fixed_mode), GFP_KERNEL); 380 if (!panel_fixed_mode) 381 return; 382 383 fill_detail_timing_data(panel_fixed_mode, dvo_timing + index); 384 385 dev_priv->vbt.sdvo_lvds_vbt_mode = panel_fixed_mode; 386 387 DRM_DEBUG_KMS("Found SDVO panel mode in BIOS VBT tables:\n"); 388 drm_mode_debug_printmodeline(panel_fixed_mode); 389 } 390 391 static int intel_bios_ssc_frequency(struct drm_i915_private *dev_priv, 392 bool alternate) 393 { 394 switch (INTEL_INFO(dev_priv)->gen) { 395 case 2: 396 return alternate ? 66667 : 48000; 397 case 3: 398 case 4: 399 return alternate ? 100000 : 96000; 400 default: 401 return alternate ? 100000 : 120000; 402 } 403 } 404 405 static void 406 parse_general_features(struct drm_i915_private *dev_priv, 407 const struct bdb_header *bdb) 408 { 409 const struct bdb_general_features *general; 410 411 general = find_section(bdb, BDB_GENERAL_FEATURES); 412 if (!general) 413 return; 414 415 dev_priv->vbt.int_tv_support = general->int_tv_support; 416 /* int_crt_support can't be trusted on earlier platforms */ 417 if (bdb->version >= 155 && 418 (HAS_DDI(dev_priv) || IS_VALLEYVIEW(dev_priv))) 419 dev_priv->vbt.int_crt_support = general->int_crt_support; 420 dev_priv->vbt.lvds_use_ssc = general->enable_ssc; 421 dev_priv->vbt.lvds_ssc_freq = 422 intel_bios_ssc_frequency(dev_priv, general->ssc_freq); 423 dev_priv->vbt.display_clock_mode = general->display_clock_mode; 424 dev_priv->vbt.fdi_rx_polarity_inverted = general->fdi_rx_polarity_inverted; 425 DRM_DEBUG_KMS("BDB_GENERAL_FEATURES int_tv_support %d int_crt_support %d lvds_use_ssc %d lvds_ssc_freq %d display_clock_mode %d fdi_rx_polarity_inverted %d\n", 426 dev_priv->vbt.int_tv_support, 427 dev_priv->vbt.int_crt_support, 428 dev_priv->vbt.lvds_use_ssc, 429 dev_priv->vbt.lvds_ssc_freq, 430 dev_priv->vbt.display_clock_mode, 431 dev_priv->vbt.fdi_rx_polarity_inverted); 432 } 433 434 static void 435 parse_general_definitions(struct drm_i915_private *dev_priv, 436 const struct bdb_header *bdb) 437 { 438 const struct bdb_general_definitions *general; 439 440 general = find_section(bdb, BDB_GENERAL_DEFINITIONS); 441 if (general) { 442 u16 block_size = get_blocksize(general); 443 if (block_size >= sizeof(*general)) { 444 int bus_pin = general->crt_ddc_gmbus_pin; 445 DRM_DEBUG_KMS("crt_ddc_bus_pin: %d\n", bus_pin); 446 if (intel_gmbus_is_valid_pin(dev_priv, bus_pin)) 447 dev_priv->vbt.crt_ddc_pin = bus_pin; 448 } else { 449 DRM_DEBUG_KMS("BDB_GD too small (%d). Invalid.\n", 450 block_size); 451 } 452 } 453 } 454 455 static const union child_device_config * 456 child_device_ptr(const struct bdb_general_definitions *p_defs, int i) 457 { 458 return (const void *) &p_defs->devices[i * p_defs->child_dev_size]; 459 } 460 461 static void 462 parse_sdvo_device_mapping(struct drm_i915_private *dev_priv, 463 const struct bdb_header *bdb) 464 { 465 struct sdvo_device_mapping *p_mapping; 466 const struct bdb_general_definitions *p_defs; 467 const struct old_child_dev_config *child; /* legacy */ 468 int i, child_device_num, count; 469 u16 block_size; 470 471 p_defs = find_section(bdb, BDB_GENERAL_DEFINITIONS); 472 if (!p_defs) { 473 DRM_DEBUG_KMS("No general definition block is found, unable to construct sdvo mapping.\n"); 474 return; 475 } 476 477 /* 478 * Only parse SDVO mappings when the general definitions block child 479 * device size matches that of the *legacy* child device config 480 * struct. Thus, SDVO mapping will be skipped for newer VBT. 481 */ 482 if (p_defs->child_dev_size != sizeof(*child)) { 483 DRM_DEBUG_KMS("Unsupported child device size for SDVO mapping.\n"); 484 return; 485 } 486 /* get the block size of general definitions */ 487 block_size = get_blocksize(p_defs); 488 /* get the number of child device */ 489 child_device_num = (block_size - sizeof(*p_defs)) / 490 p_defs->child_dev_size; 491 count = 0; 492 for (i = 0; i < child_device_num; i++) { 493 child = &child_device_ptr(p_defs, i)->old; 494 if (!child->device_type) { 495 /* skip the device block if device type is invalid */ 496 continue; 497 } 498 if (child->slave_addr != SLAVE_ADDR1 && 499 child->slave_addr != SLAVE_ADDR2) { 500 /* 501 * If the slave address is neither 0x70 nor 0x72, 502 * it is not a SDVO device. Skip it. 503 */ 504 continue; 505 } 506 if (child->dvo_port != DEVICE_PORT_DVOB && 507 child->dvo_port != DEVICE_PORT_DVOC) { 508 /* skip the incorrect SDVO port */ 509 DRM_DEBUG_KMS("Incorrect SDVO port. Skip it\n"); 510 continue; 511 } 512 DRM_DEBUG_KMS("the SDVO device with slave addr %2x is found on" 513 " %s port\n", 514 child->slave_addr, 515 (child->dvo_port == DEVICE_PORT_DVOB) ? 516 "SDVOB" : "SDVOC"); 517 p_mapping = &dev_priv->vbt.sdvo_mappings[child->dvo_port - 1]; 518 if (!p_mapping->initialized) { 519 p_mapping->dvo_port = child->dvo_port; 520 p_mapping->slave_addr = child->slave_addr; 521 p_mapping->dvo_wiring = child->dvo_wiring; 522 p_mapping->ddc_pin = child->ddc_pin; 523 p_mapping->i2c_pin = child->i2c_pin; 524 p_mapping->initialized = 1; 525 DRM_DEBUG_KMS("SDVO device: dvo=%x, addr=%x, wiring=%d, ddc_pin=%d, i2c_pin=%d\n", 526 p_mapping->dvo_port, 527 p_mapping->slave_addr, 528 p_mapping->dvo_wiring, 529 p_mapping->ddc_pin, 530 p_mapping->i2c_pin); 531 } else { 532 DRM_DEBUG_KMS("Maybe one SDVO port is shared by " 533 "two SDVO device.\n"); 534 } 535 if (child->slave2_addr) { 536 /* Maybe this is a SDVO device with multiple inputs */ 537 /* And the mapping info is not added */ 538 DRM_DEBUG_KMS("there exists the slave2_addr. Maybe this" 539 " is a SDVO device with multiple inputs.\n"); 540 } 541 count++; 542 } 543 544 if (!count) { 545 /* No SDVO device info is found */ 546 DRM_DEBUG_KMS("No SDVO device info is found in VBT\n"); 547 } 548 return; 549 } 550 551 static void 552 parse_driver_features(struct drm_i915_private *dev_priv, 553 const struct bdb_header *bdb) 554 { 555 const struct bdb_driver_features *driver; 556 557 driver = find_section(bdb, BDB_DRIVER_FEATURES); 558 if (!driver) 559 return; 560 561 if (driver->lvds_config == BDB_DRIVER_FEATURE_EDP) 562 dev_priv->vbt.edp.support = 1; 563 564 DRM_DEBUG_KMS("DRRS State Enabled:%d\n", driver->drrs_enabled); 565 /* 566 * If DRRS is not supported, drrs_type has to be set to 0. 567 * This is because, VBT is configured in such a way that 568 * static DRRS is 0 and DRRS not supported is represented by 569 * driver->drrs_enabled=false 570 */ 571 if (!driver->drrs_enabled) 572 dev_priv->vbt.drrs_type = DRRS_NOT_SUPPORTED; 573 } 574 575 static void 576 parse_edp(struct drm_i915_private *dev_priv, const struct bdb_header *bdb) 577 { 578 const struct bdb_edp *edp; 579 const struct edp_power_seq *edp_pps; 580 const struct edp_link_params *edp_link_params; 581 int panel_type = dev_priv->vbt.panel_type; 582 583 edp = find_section(bdb, BDB_EDP); 584 if (!edp) { 585 if (dev_priv->vbt.edp.support) 586 DRM_DEBUG_KMS("No eDP BDB found but eDP panel supported.\n"); 587 return; 588 } 589 590 switch ((edp->color_depth >> (panel_type * 2)) & 3) { 591 case EDP_18BPP: 592 dev_priv->vbt.edp.bpp = 18; 593 break; 594 case EDP_24BPP: 595 dev_priv->vbt.edp.bpp = 24; 596 break; 597 case EDP_30BPP: 598 dev_priv->vbt.edp.bpp = 30; 599 break; 600 } 601 602 /* Get the eDP sequencing and link info */ 603 edp_pps = &edp->power_seqs[panel_type]; 604 edp_link_params = &edp->link_params[panel_type]; 605 606 dev_priv->vbt.edp.pps = *edp_pps; 607 608 switch (edp_link_params->rate) { 609 case EDP_RATE_1_62: 610 dev_priv->vbt.edp.rate = DP_LINK_BW_1_62; 611 break; 612 case EDP_RATE_2_7: 613 dev_priv->vbt.edp.rate = DP_LINK_BW_2_7; 614 break; 615 default: 616 DRM_DEBUG_KMS("VBT has unknown eDP link rate value %u\n", 617 edp_link_params->rate); 618 break; 619 } 620 621 switch (edp_link_params->lanes) { 622 case EDP_LANE_1: 623 dev_priv->vbt.edp.lanes = 1; 624 break; 625 case EDP_LANE_2: 626 dev_priv->vbt.edp.lanes = 2; 627 break; 628 case EDP_LANE_4: 629 dev_priv->vbt.edp.lanes = 4; 630 break; 631 default: 632 DRM_DEBUG_KMS("VBT has unknown eDP lane count value %u\n", 633 edp_link_params->lanes); 634 break; 635 } 636 637 switch (edp_link_params->preemphasis) { 638 case EDP_PREEMPHASIS_NONE: 639 dev_priv->vbt.edp.preemphasis = DP_TRAIN_PRE_EMPH_LEVEL_0; 640 break; 641 case EDP_PREEMPHASIS_3_5dB: 642 dev_priv->vbt.edp.preemphasis = DP_TRAIN_PRE_EMPH_LEVEL_1; 643 break; 644 case EDP_PREEMPHASIS_6dB: 645 dev_priv->vbt.edp.preemphasis = DP_TRAIN_PRE_EMPH_LEVEL_2; 646 break; 647 case EDP_PREEMPHASIS_9_5dB: 648 dev_priv->vbt.edp.preemphasis = DP_TRAIN_PRE_EMPH_LEVEL_3; 649 break; 650 default: 651 DRM_DEBUG_KMS("VBT has unknown eDP pre-emphasis value %u\n", 652 edp_link_params->preemphasis); 653 break; 654 } 655 656 switch (edp_link_params->vswing) { 657 case EDP_VSWING_0_4V: 658 dev_priv->vbt.edp.vswing = DP_TRAIN_VOLTAGE_SWING_LEVEL_0; 659 break; 660 case EDP_VSWING_0_6V: 661 dev_priv->vbt.edp.vswing = DP_TRAIN_VOLTAGE_SWING_LEVEL_1; 662 break; 663 case EDP_VSWING_0_8V: 664 dev_priv->vbt.edp.vswing = DP_TRAIN_VOLTAGE_SWING_LEVEL_2; 665 break; 666 case EDP_VSWING_1_2V: 667 dev_priv->vbt.edp.vswing = DP_TRAIN_VOLTAGE_SWING_LEVEL_3; 668 break; 669 default: 670 DRM_DEBUG_KMS("VBT has unknown eDP voltage swing value %u\n", 671 edp_link_params->vswing); 672 break; 673 } 674 675 if (bdb->version >= 173) { 676 uint8_t vswing; 677 678 /* Don't read from VBT if module parameter has valid value*/ 679 if (i915.edp_vswing) { 680 dev_priv->vbt.edp.low_vswing = i915.edp_vswing == 1; 681 } else { 682 vswing = (edp->edp_vswing_preemph >> (panel_type * 4)) & 0xF; 683 dev_priv->vbt.edp.low_vswing = vswing == 0; 684 } 685 } 686 } 687 688 static void 689 parse_psr(struct drm_i915_private *dev_priv, const struct bdb_header *bdb) 690 { 691 const struct bdb_psr *psr; 692 const struct psr_table *psr_table; 693 int panel_type = dev_priv->vbt.panel_type; 694 695 psr = find_section(bdb, BDB_PSR); 696 if (!psr) { 697 DRM_DEBUG_KMS("No PSR BDB found.\n"); 698 return; 699 } 700 701 psr_table = &psr->psr_table[panel_type]; 702 703 dev_priv->vbt.psr.full_link = psr_table->full_link; 704 dev_priv->vbt.psr.require_aux_wakeup = psr_table->require_aux_to_wakeup; 705 706 /* Allowed VBT values goes from 0 to 15 */ 707 dev_priv->vbt.psr.idle_frames = psr_table->idle_frames < 0 ? 0 : 708 psr_table->idle_frames > 15 ? 15 : psr_table->idle_frames; 709 710 switch (psr_table->lines_to_wait) { 711 case 0: 712 dev_priv->vbt.psr.lines_to_wait = PSR_0_LINES_TO_WAIT; 713 break; 714 case 1: 715 dev_priv->vbt.psr.lines_to_wait = PSR_1_LINE_TO_WAIT; 716 break; 717 case 2: 718 dev_priv->vbt.psr.lines_to_wait = PSR_4_LINES_TO_WAIT; 719 break; 720 case 3: 721 dev_priv->vbt.psr.lines_to_wait = PSR_8_LINES_TO_WAIT; 722 break; 723 default: 724 DRM_DEBUG_KMS("VBT has unknown PSR lines to wait %u\n", 725 psr_table->lines_to_wait); 726 break; 727 } 728 729 dev_priv->vbt.psr.tp1_wakeup_time = psr_table->tp1_wakeup_time; 730 dev_priv->vbt.psr.tp2_tp3_wakeup_time = psr_table->tp2_tp3_wakeup_time; 731 } 732 733 static void 734 parse_mipi_config(struct drm_i915_private *dev_priv, 735 const struct bdb_header *bdb) 736 { 737 const struct bdb_mipi_config *start; 738 const struct mipi_config *config; 739 const struct mipi_pps_data *pps; 740 int panel_type = dev_priv->vbt.panel_type; 741 742 /* parse MIPI blocks only if LFP type is MIPI */ 743 if (!intel_bios_is_dsi_present(dev_priv, NULL)) 744 return; 745 746 /* Initialize this to undefined indicating no generic MIPI support */ 747 dev_priv->vbt.dsi.panel_id = MIPI_DSI_UNDEFINED_PANEL_ID; 748 749 /* Block #40 is already parsed and panel_fixed_mode is 750 * stored in dev_priv->lfp_lvds_vbt_mode 751 * resuse this when needed 752 */ 753 754 /* Parse #52 for panel index used from panel_type already 755 * parsed 756 */ 757 start = find_section(bdb, BDB_MIPI_CONFIG); 758 if (!start) { 759 DRM_DEBUG_KMS("No MIPI config BDB found"); 760 return; 761 } 762 763 DRM_DEBUG_DRIVER("Found MIPI Config block, panel index = %d\n", 764 panel_type); 765 766 /* 767 * get hold of the correct configuration block and pps data as per 768 * the panel_type as index 769 */ 770 config = &start->config[panel_type]; 771 pps = &start->pps[panel_type]; 772 773 /* store as of now full data. Trim when we realise all is not needed */ 774 dev_priv->vbt.dsi.config = kmemdup(config, sizeof(struct mipi_config), GFP_KERNEL); 775 if (!dev_priv->vbt.dsi.config) 776 return; 777 778 dev_priv->vbt.dsi.pps = kmemdup(pps, sizeof(struct mipi_pps_data), GFP_KERNEL); 779 if (!dev_priv->vbt.dsi.pps) { 780 kfree(dev_priv->vbt.dsi.config); 781 return; 782 } 783 784 /* 785 * These fields are introduced from the VBT version 197 onwards, 786 * so making sure that these bits are set zero in the previous 787 * versions. 788 */ 789 if (dev_priv->vbt.dsi.config->dual_link && bdb->version < 197) { 790 dev_priv->vbt.dsi.config->dl_dcs_cabc_ports = 0; 791 dev_priv->vbt.dsi.config->dl_dcs_backlight_ports = 0; 792 } 793 794 /* We have mandatory mipi config blocks. Initialize as generic panel */ 795 dev_priv->vbt.dsi.panel_id = MIPI_DSI_GENERIC_PANEL_ID; 796 } 797 798 /* Find the sequence block and size for the given panel. */ 799 static const u8 * 800 find_panel_sequence_block(const struct bdb_mipi_sequence *sequence, 801 u16 panel_id, u32 *seq_size) 802 { 803 u32 total = get_blocksize(sequence); 804 const u8 *data = &sequence->data[0]; 805 u8 current_id; 806 u32 current_size; 807 int header_size = sequence->version >= 3 ? 5 : 3; 808 int index = 0; 809 int i; 810 811 /* skip new block size */ 812 if (sequence->version >= 3) 813 data += 4; 814 815 for (i = 0; i < MAX_MIPI_CONFIGURATIONS && index < total; i++) { 816 if (index + header_size > total) { 817 DRM_ERROR("Invalid sequence block (header)\n"); 818 return NULL; 819 } 820 821 current_id = *(data + index); 822 if (sequence->version >= 3) 823 current_size = *((const u32 *)(data + index + 1)); 824 else 825 current_size = *((const u16 *)(data + index + 1)); 826 827 index += header_size; 828 829 if (index + current_size > total) { 830 DRM_ERROR("Invalid sequence block\n"); 831 return NULL; 832 } 833 834 if (current_id == panel_id) { 835 *seq_size = current_size; 836 return data + index; 837 } 838 839 index += current_size; 840 } 841 842 DRM_ERROR("Sequence block detected but no valid configuration\n"); 843 844 return NULL; 845 } 846 847 static int goto_next_sequence(const u8 *data, int index, int total) 848 { 849 u16 len; 850 851 /* Skip Sequence Byte. */ 852 for (index = index + 1; index < total; index += len) { 853 u8 operation_byte = *(data + index); 854 index++; 855 856 switch (operation_byte) { 857 case MIPI_SEQ_ELEM_END: 858 return index; 859 case MIPI_SEQ_ELEM_SEND_PKT: 860 if (index + 4 > total) 861 return 0; 862 863 len = *((const u16 *)(data + index + 2)) + 4; 864 break; 865 case MIPI_SEQ_ELEM_DELAY: 866 len = 4; 867 break; 868 case MIPI_SEQ_ELEM_GPIO: 869 len = 2; 870 break; 871 case MIPI_SEQ_ELEM_I2C: 872 if (index + 7 > total) 873 return 0; 874 len = *(data + index + 6) + 7; 875 break; 876 default: 877 DRM_ERROR("Unknown operation byte\n"); 878 return 0; 879 } 880 } 881 882 return 0; 883 } 884 885 static int goto_next_sequence_v3(const u8 *data, int index, int total) 886 { 887 int seq_end; 888 u16 len; 889 u32 size_of_sequence; 890 891 /* 892 * Could skip sequence based on Size of Sequence alone, but also do some 893 * checking on the structure. 894 */ 895 if (total < 5) { 896 DRM_ERROR("Too small sequence size\n"); 897 return 0; 898 } 899 900 /* Skip Sequence Byte. */ 901 index++; 902 903 /* 904 * Size of Sequence. Excludes the Sequence Byte and the size itself, 905 * includes MIPI_SEQ_ELEM_END byte, excludes the final MIPI_SEQ_END 906 * byte. 907 */ 908 size_of_sequence = *((const uint32_t *)(data + index)); 909 index += 4; 910 911 seq_end = index + size_of_sequence; 912 if (seq_end > total) { 913 DRM_ERROR("Invalid sequence size\n"); 914 return 0; 915 } 916 917 for (; index < total; index += len) { 918 u8 operation_byte = *(data + index); 919 index++; 920 921 if (operation_byte == MIPI_SEQ_ELEM_END) { 922 if (index != seq_end) { 923 DRM_ERROR("Invalid element structure\n"); 924 return 0; 925 } 926 return index; 927 } 928 929 len = *(data + index); 930 index++; 931 932 /* 933 * FIXME: Would be nice to check elements like for v1/v2 in 934 * goto_next_sequence() above. 935 */ 936 switch (operation_byte) { 937 case MIPI_SEQ_ELEM_SEND_PKT: 938 case MIPI_SEQ_ELEM_DELAY: 939 case MIPI_SEQ_ELEM_GPIO: 940 case MIPI_SEQ_ELEM_I2C: 941 case MIPI_SEQ_ELEM_SPI: 942 case MIPI_SEQ_ELEM_PMIC: 943 break; 944 default: 945 DRM_ERROR("Unknown operation byte %u\n", 946 operation_byte); 947 break; 948 } 949 } 950 951 return 0; 952 } 953 954 static void 955 parse_mipi_sequence(struct drm_i915_private *dev_priv, 956 const struct bdb_header *bdb) 957 { 958 int panel_type = dev_priv->vbt.panel_type; 959 const struct bdb_mipi_sequence *sequence; 960 const u8 *seq_data; 961 u32 seq_size; 962 u8 *data; 963 int index = 0; 964 965 /* Only our generic panel driver uses the sequence block. */ 966 if (dev_priv->vbt.dsi.panel_id != MIPI_DSI_GENERIC_PANEL_ID) 967 return; 968 969 sequence = find_section(bdb, BDB_MIPI_SEQUENCE); 970 if (!sequence) { 971 DRM_DEBUG_KMS("No MIPI Sequence found, parsing complete\n"); 972 return; 973 } 974 975 /* Fail gracefully for forward incompatible sequence block. */ 976 if (sequence->version >= 4) { 977 DRM_ERROR("Unable to parse MIPI Sequence Block v%u\n", 978 sequence->version); 979 return; 980 } 981 982 DRM_DEBUG_DRIVER("Found MIPI sequence block v%u\n", sequence->version); 983 984 seq_data = find_panel_sequence_block(sequence, panel_type, &seq_size); 985 if (!seq_data) 986 return; 987 988 data = kmemdup(seq_data, seq_size, GFP_KERNEL); 989 if (!data) 990 return; 991 992 /* Parse the sequences, store pointers to each sequence. */ 993 for (;;) { 994 u8 seq_id = *(data + index); 995 if (seq_id == MIPI_SEQ_END) 996 break; 997 998 if (seq_id >= MIPI_SEQ_MAX) { 999 DRM_ERROR("Unknown sequence %u\n", seq_id); 1000 goto err; 1001 } 1002 1003 /* Log about presence of sequences we won't run. */ 1004 if (seq_id == MIPI_SEQ_TEAR_ON || seq_id == MIPI_SEQ_TEAR_OFF) 1005 DRM_DEBUG_KMS("Unsupported sequence %u\n", seq_id); 1006 1007 dev_priv->vbt.dsi.sequence[seq_id] = data + index; 1008 1009 if (sequence->version >= 3) 1010 index = goto_next_sequence_v3(data, index, seq_size); 1011 else 1012 index = goto_next_sequence(data, index, seq_size); 1013 if (!index) { 1014 DRM_ERROR("Invalid sequence %u\n", seq_id); 1015 goto err; 1016 } 1017 } 1018 1019 dev_priv->vbt.dsi.data = data; 1020 dev_priv->vbt.dsi.size = seq_size; 1021 dev_priv->vbt.dsi.seq_version = sequence->version; 1022 1023 DRM_DEBUG_DRIVER("MIPI related VBT parsing complete\n"); 1024 return; 1025 1026 err: 1027 kfree(data); 1028 memset(dev_priv->vbt.dsi.sequence, 0, sizeof(dev_priv->vbt.dsi.sequence)); 1029 } 1030 1031 static u8 translate_iboost(u8 val) 1032 { 1033 static const u8 mapping[] = { 1, 3, 7 }; /* See VBT spec */ 1034 1035 if (val >= ARRAY_SIZE(mapping)) { 1036 DRM_DEBUG_KMS("Unsupported I_boost value found in VBT (%d), display may not work properly\n", val); 1037 return 0; 1038 } 1039 return mapping[val]; 1040 } 1041 1042 static void sanitize_ddc_pin(struct drm_i915_private *dev_priv, 1043 enum port port) 1044 { 1045 const struct ddi_vbt_port_info *info = 1046 &dev_priv->vbt.ddi_port_info[port]; 1047 enum port p; 1048 1049 if (!info->alternate_ddc_pin) 1050 return; 1051 1052 for_each_port_masked(p, (1 << port) - 1) { 1053 struct ddi_vbt_port_info *i = &dev_priv->vbt.ddi_port_info[p]; 1054 1055 if (info->alternate_ddc_pin != i->alternate_ddc_pin) 1056 continue; 1057 1058 DRM_DEBUG_KMS("port %c trying to use the same DDC pin (0x%x) as port %c, " 1059 "disabling port %c DVI/HDMI support\n", 1060 port_name(p), i->alternate_ddc_pin, 1061 port_name(port), port_name(p)); 1062 1063 /* 1064 * If we have multiple ports supposedly sharing the 1065 * pin, then dvi/hdmi couldn't exist on the shared 1066 * port. Otherwise they share the same ddc bin and 1067 * system couldn't communicate with them separately. 1068 * 1069 * Due to parsing the ports in alphabetical order, 1070 * a higher port will always clobber a lower one. 1071 */ 1072 i->supports_dvi = false; 1073 i->supports_hdmi = false; 1074 i->alternate_ddc_pin = 0; 1075 } 1076 } 1077 1078 static void sanitize_aux_ch(struct drm_i915_private *dev_priv, 1079 enum port port) 1080 { 1081 const struct ddi_vbt_port_info *info = 1082 &dev_priv->vbt.ddi_port_info[port]; 1083 enum port p; 1084 1085 if (!info->alternate_aux_channel) 1086 return; 1087 1088 for_each_port_masked(p, (1 << port) - 1) { 1089 struct ddi_vbt_port_info *i = &dev_priv->vbt.ddi_port_info[p]; 1090 1091 if (info->alternate_aux_channel != i->alternate_aux_channel) 1092 continue; 1093 1094 DRM_DEBUG_KMS("port %c trying to use the same AUX CH (0x%x) as port %c, " 1095 "disabling port %c DP support\n", 1096 port_name(p), i->alternate_aux_channel, 1097 port_name(port), port_name(p)); 1098 1099 /* 1100 * If we have multiple ports supposedlt sharing the 1101 * aux channel, then DP couldn't exist on the shared 1102 * port. Otherwise they share the same aux channel 1103 * and system couldn't communicate with them separately. 1104 * 1105 * Due to parsing the ports in alphabetical order, 1106 * a higher port will always clobber a lower one. 1107 */ 1108 i->supports_dp = false; 1109 i->alternate_aux_channel = 0; 1110 } 1111 } 1112 1113 static void parse_ddi_port(struct drm_i915_private *dev_priv, enum port port, 1114 const struct bdb_header *bdb) 1115 { 1116 union child_device_config *it, *child = NULL; 1117 struct ddi_vbt_port_info *info = &dev_priv->vbt.ddi_port_info[port]; 1118 uint8_t hdmi_level_shift; 1119 int i, j; 1120 bool is_dvi, is_hdmi, is_dp, is_edp, is_crt; 1121 uint8_t aux_channel, ddc_pin; 1122 /* Each DDI port can have more than one value on the "DVO Port" field, 1123 * so look for all the possible values for each port. 1124 */ 1125 int dvo_ports[][3] = { 1126 {DVO_PORT_HDMIA, DVO_PORT_DPA, -1}, 1127 {DVO_PORT_HDMIB, DVO_PORT_DPB, -1}, 1128 {DVO_PORT_HDMIC, DVO_PORT_DPC, -1}, 1129 {DVO_PORT_HDMID, DVO_PORT_DPD, -1}, 1130 {DVO_PORT_CRT, DVO_PORT_HDMIE, DVO_PORT_DPE}, 1131 }; 1132 1133 /* 1134 * Find the first child device to reference the port, report if more 1135 * than one found. 1136 */ 1137 for (i = 0; i < dev_priv->vbt.child_dev_num; i++) { 1138 it = dev_priv->vbt.child_dev + i; 1139 1140 for (j = 0; j < 3; j++) { 1141 if (dvo_ports[port][j] == -1) 1142 break; 1143 1144 if (it->common.dvo_port == dvo_ports[port][j]) { 1145 if (child) { 1146 DRM_DEBUG_KMS("More than one child device for port %c in VBT, using the first.\n", 1147 port_name(port)); 1148 } else { 1149 child = it; 1150 } 1151 } 1152 } 1153 } 1154 if (!child) 1155 return; 1156 1157 aux_channel = child->common.aux_channel; 1158 ddc_pin = child->common.ddc_pin; 1159 1160 is_dvi = child->common.device_type & DEVICE_TYPE_TMDS_DVI_SIGNALING; 1161 is_dp = child->common.device_type & DEVICE_TYPE_DISPLAYPORT_OUTPUT; 1162 is_crt = child->common.device_type & DEVICE_TYPE_ANALOG_OUTPUT; 1163 is_hdmi = is_dvi && (child->common.device_type & DEVICE_TYPE_NOT_HDMI_OUTPUT) == 0; 1164 is_edp = is_dp && (child->common.device_type & DEVICE_TYPE_INTERNAL_CONNECTOR); 1165 1166 info->supports_dvi = is_dvi; 1167 info->supports_hdmi = is_hdmi; 1168 info->supports_dp = is_dp; 1169 info->supports_edp = is_edp; 1170 1171 DRM_DEBUG_KMS("Port %c VBT info: DP:%d HDMI:%d DVI:%d EDP:%d CRT:%d\n", 1172 port_name(port), is_dp, is_hdmi, is_dvi, is_edp, is_crt); 1173 1174 if (is_edp && is_dvi) 1175 DRM_DEBUG_KMS("Internal DP port %c is TMDS compatible\n", 1176 port_name(port)); 1177 if (is_crt && port != PORT_E) 1178 DRM_DEBUG_KMS("Port %c is analog\n", port_name(port)); 1179 if (is_crt && (is_dvi || is_dp)) 1180 DRM_DEBUG_KMS("Analog port %c is also DP or TMDS compatible\n", 1181 port_name(port)); 1182 if (is_dvi && (port == PORT_A || port == PORT_E)) 1183 DRM_DEBUG_KMS("Port %c is TMDS compatible\n", port_name(port)); 1184 if (!is_dvi && !is_dp && !is_crt) 1185 DRM_DEBUG_KMS("Port %c is not DP/TMDS/CRT compatible\n", 1186 port_name(port)); 1187 if (is_edp && (port == PORT_B || port == PORT_C || port == PORT_E)) 1188 DRM_DEBUG_KMS("Port %c is internal DP\n", port_name(port)); 1189 1190 if (is_dvi) { 1191 info->alternate_ddc_pin = ddc_pin; 1192 1193 sanitize_ddc_pin(dev_priv, port); 1194 } 1195 1196 if (is_dp) { 1197 info->alternate_aux_channel = aux_channel; 1198 1199 sanitize_aux_ch(dev_priv, port); 1200 } 1201 1202 if (bdb->version >= 158) { 1203 /* The VBT HDMI level shift values match the table we have. */ 1204 hdmi_level_shift = child->raw[7] & 0xF; 1205 DRM_DEBUG_KMS("VBT HDMI level shift for port %c: %d\n", 1206 port_name(port), 1207 hdmi_level_shift); 1208 info->hdmi_level_shift = hdmi_level_shift; 1209 } 1210 1211 /* Parse the I_boost config for SKL and above */ 1212 if (bdb->version >= 196 && child->common.iboost) { 1213 info->dp_boost_level = translate_iboost(child->common.iboost_level & 0xF); 1214 DRM_DEBUG_KMS("VBT (e)DP boost level for port %c: %d\n", 1215 port_name(port), info->dp_boost_level); 1216 info->hdmi_boost_level = translate_iboost(child->common.iboost_level >> 4); 1217 DRM_DEBUG_KMS("VBT HDMI boost level for port %c: %d\n", 1218 port_name(port), info->hdmi_boost_level); 1219 } 1220 } 1221 1222 static void parse_ddi_ports(struct drm_i915_private *dev_priv, 1223 const struct bdb_header *bdb) 1224 { 1225 enum port port; 1226 1227 if (!HAS_DDI(dev_priv)) 1228 return; 1229 1230 if (!dev_priv->vbt.child_dev_num) 1231 return; 1232 1233 if (bdb->version < 155) 1234 return; 1235 1236 for (port = PORT_A; port < I915_MAX_PORTS; port++) 1237 parse_ddi_port(dev_priv, port, bdb); 1238 } 1239 1240 static void 1241 parse_device_mapping(struct drm_i915_private *dev_priv, 1242 const struct bdb_header *bdb) 1243 { 1244 const struct bdb_general_definitions *p_defs; 1245 const union child_device_config *p_child; 1246 union child_device_config *child_dev_ptr; 1247 int i, child_device_num, count; 1248 u8 expected_size; 1249 u16 block_size; 1250 1251 p_defs = find_section(bdb, BDB_GENERAL_DEFINITIONS); 1252 if (!p_defs) { 1253 DRM_DEBUG_KMS("No general definition block is found, no devices defined.\n"); 1254 return; 1255 } 1256 if (bdb->version < 106) { 1257 expected_size = 22; 1258 } else if (bdb->version < 111) { 1259 expected_size = 27; 1260 } else if (bdb->version < 195) { 1261 BUILD_BUG_ON(sizeof(struct old_child_dev_config) != 33); 1262 expected_size = sizeof(struct old_child_dev_config); 1263 } else if (bdb->version == 195) { 1264 expected_size = 37; 1265 } else if (bdb->version <= 197) { 1266 expected_size = 38; 1267 } else { 1268 expected_size = 38; 1269 BUILD_BUG_ON(sizeof(*p_child) < 38); 1270 DRM_DEBUG_DRIVER("Expected child device config size for VBT version %u not known; assuming %u\n", 1271 bdb->version, expected_size); 1272 } 1273 1274 /* Flag an error for unexpected size, but continue anyway. */ 1275 if (p_defs->child_dev_size != expected_size) 1276 DRM_ERROR("Unexpected child device config size %u (expected %u for VBT version %u)\n", 1277 p_defs->child_dev_size, expected_size, bdb->version); 1278 1279 /* The legacy sized child device config is the minimum we need. */ 1280 if (p_defs->child_dev_size < sizeof(struct old_child_dev_config)) { 1281 DRM_DEBUG_KMS("Child device config size %u is too small.\n", 1282 p_defs->child_dev_size); 1283 return; 1284 } 1285 1286 /* get the block size of general definitions */ 1287 block_size = get_blocksize(p_defs); 1288 /* get the number of child device */ 1289 child_device_num = (block_size - sizeof(*p_defs)) / 1290 p_defs->child_dev_size; 1291 count = 0; 1292 /* get the number of child device that is present */ 1293 for (i = 0; i < child_device_num; i++) { 1294 p_child = child_device_ptr(p_defs, i); 1295 if (!p_child->common.device_type) { 1296 /* skip the device block if device type is invalid */ 1297 continue; 1298 } 1299 count++; 1300 } 1301 if (!count) { 1302 DRM_DEBUG_KMS("no child dev is parsed from VBT\n"); 1303 return; 1304 } 1305 dev_priv->vbt.child_dev = kcalloc(count, sizeof(*p_child), GFP_KERNEL); 1306 if (!dev_priv->vbt.child_dev) { 1307 DRM_DEBUG_KMS("No memory space for child device\n"); 1308 return; 1309 } 1310 1311 dev_priv->vbt.child_dev_num = count; 1312 count = 0; 1313 for (i = 0; i < child_device_num; i++) { 1314 p_child = child_device_ptr(p_defs, i); 1315 if (!p_child->common.device_type) { 1316 /* skip the device block if device type is invalid */ 1317 continue; 1318 } 1319 1320 child_dev_ptr = dev_priv->vbt.child_dev + count; 1321 count++; 1322 1323 /* 1324 * Copy as much as we know (sizeof) and is available 1325 * (child_dev_size) of the child device. Accessing the data must 1326 * depend on VBT version. 1327 */ 1328 memcpy(child_dev_ptr, p_child, 1329 min_t(size_t, p_defs->child_dev_size, sizeof(*p_child))); 1330 1331 /* 1332 * copied full block, now init values when they are not 1333 * available in current version 1334 */ 1335 if (bdb->version < 196) { 1336 /* Set default values for bits added from v196 */ 1337 child_dev_ptr->common.iboost = 0; 1338 child_dev_ptr->common.hpd_invert = 0; 1339 } 1340 1341 if (bdb->version < 192) 1342 child_dev_ptr->common.lspcon = 0; 1343 } 1344 return; 1345 } 1346 1347 /* Common defaults which may be overridden by VBT. */ 1348 static void 1349 init_vbt_defaults(struct drm_i915_private *dev_priv) 1350 { 1351 enum port port; 1352 1353 dev_priv->vbt.crt_ddc_pin = GMBUS_PIN_VGADDC; 1354 1355 /* Default to having backlight */ 1356 dev_priv->vbt.backlight.present = true; 1357 1358 /* LFP panel data */ 1359 dev_priv->vbt.lvds_dither = 1; 1360 dev_priv->vbt.lvds_vbt = 0; 1361 1362 /* SDVO panel data */ 1363 dev_priv->vbt.sdvo_lvds_vbt_mode = NULL; 1364 1365 /* general features */ 1366 dev_priv->vbt.int_tv_support = 1; 1367 dev_priv->vbt.int_crt_support = 1; 1368 1369 /* Default to using SSC */ 1370 dev_priv->vbt.lvds_use_ssc = 1; 1371 /* 1372 * Core/SandyBridge/IvyBridge use alternative (120MHz) reference 1373 * clock for LVDS. 1374 */ 1375 dev_priv->vbt.lvds_ssc_freq = intel_bios_ssc_frequency(dev_priv, 1376 !HAS_PCH_SPLIT(dev_priv)); 1377 DRM_DEBUG_KMS("Set default to SSC at %d kHz\n", dev_priv->vbt.lvds_ssc_freq); 1378 1379 for (port = PORT_A; port < I915_MAX_PORTS; port++) { 1380 struct ddi_vbt_port_info *info = 1381 &dev_priv->vbt.ddi_port_info[port]; 1382 1383 info->hdmi_level_shift = HDMI_LEVEL_SHIFT_UNKNOWN; 1384 } 1385 } 1386 1387 /* Defaults to initialize only if there is no VBT. */ 1388 static void 1389 init_vbt_missing_defaults(struct drm_i915_private *dev_priv) 1390 { 1391 enum port port; 1392 1393 for (port = PORT_A; port < I915_MAX_PORTS; port++) { 1394 struct ddi_vbt_port_info *info = 1395 &dev_priv->vbt.ddi_port_info[port]; 1396 1397 info->supports_dvi = (port != PORT_A && port != PORT_E); 1398 info->supports_hdmi = info->supports_dvi; 1399 info->supports_dp = (port != PORT_E); 1400 } 1401 } 1402 1403 static const struct bdb_header *get_bdb_header(const struct vbt_header *vbt) 1404 { 1405 const void *_vbt = vbt; 1406 1407 return _vbt + vbt->bdb_offset; 1408 } 1409 1410 /** 1411 * intel_bios_is_valid_vbt - does the given buffer contain a valid VBT 1412 * @buf: pointer to a buffer to validate 1413 * @size: size of the buffer 1414 * 1415 * Returns true on valid VBT. 1416 */ 1417 bool intel_bios_is_valid_vbt(const void *buf, size_t size) 1418 { 1419 const struct vbt_header *vbt = buf; 1420 const struct bdb_header *bdb; 1421 1422 if (!vbt) 1423 return false; 1424 1425 if (sizeof(struct vbt_header) > size) { 1426 DRM_DEBUG_DRIVER("VBT header incomplete\n"); 1427 return false; 1428 } 1429 1430 if (memcmp(vbt->signature, "$VBT", 4)) { 1431 DRM_DEBUG_DRIVER("VBT invalid signature\n"); 1432 return false; 1433 } 1434 1435 if (range_overflows_t(size_t, 1436 vbt->bdb_offset, 1437 sizeof(struct bdb_header), 1438 size)) { 1439 DRM_DEBUG_DRIVER("BDB header incomplete\n"); 1440 return false; 1441 } 1442 1443 bdb = get_bdb_header(vbt); 1444 if (range_overflows_t(size_t, vbt->bdb_offset, bdb->bdb_size, size)) { 1445 DRM_DEBUG_DRIVER("BDB incomplete\n"); 1446 return false; 1447 } 1448 1449 return vbt; 1450 } 1451 1452 static const struct vbt_header *find_vbt(void __iomem *bios, size_t size) 1453 { 1454 size_t i; 1455 1456 /* Scour memory looking for the VBT signature. */ 1457 for (i = 0; i + 4 < size; i++) { 1458 void *vbt; 1459 1460 if (ioread32(bios + i) != *((const u32 *) "$VBT")) 1461 continue; 1462 1463 /* 1464 * This is the one place where we explicitly discard the address 1465 * space (__iomem) of the BIOS/VBT. 1466 */ 1467 vbt = (void __force *) bios + i; 1468 if (intel_bios_is_valid_vbt(vbt, size - i)) 1469 return vbt; 1470 1471 break; 1472 } 1473 1474 return NULL; 1475 } 1476 1477 /** 1478 * intel_bios_init - find VBT and initialize settings from the BIOS 1479 * @dev_priv: i915 device instance 1480 * 1481 * Parse and initialize settings from the Video BIOS Tables (VBT). If the VBT 1482 * was not found in ACPI OpRegion, try to find it in PCI ROM first. Also 1483 * initialize some defaults if the VBT is not present at all. 1484 */ 1485 void intel_bios_init(struct drm_i915_private *dev_priv) 1486 { 1487 struct pci_dev *pdev = dev_priv->drm.pdev; 1488 const struct vbt_header *vbt = dev_priv->opregion.vbt; 1489 const struct bdb_header *bdb; 1490 u8 __iomem *bios = NULL; 1491 1492 if (HAS_PCH_NOP(dev_priv)) { 1493 DRM_DEBUG_KMS("Skipping VBT init due to disabled display.\n"); 1494 return; 1495 } 1496 1497 init_vbt_defaults(dev_priv); 1498 1499 /* If the OpRegion does not have VBT, look in PCI ROM. */ 1500 if (!vbt) { 1501 size_t size; 1502 1503 bios = pci_map_rom(pdev, &size); 1504 if (!bios) 1505 goto out; 1506 1507 vbt = find_vbt(bios, size); 1508 if (!vbt) 1509 goto out; 1510 1511 DRM_DEBUG_KMS("Found valid VBT in PCI ROM\n"); 1512 } 1513 1514 bdb = get_bdb_header(vbt); 1515 1516 DRM_DEBUG_KMS("VBT signature \"%.*s\", BDB version %d\n", 1517 (int)sizeof(vbt->signature), vbt->signature, bdb->version); 1518 1519 /* Grab useful general definitions */ 1520 parse_general_features(dev_priv, bdb); 1521 parse_general_definitions(dev_priv, bdb); 1522 parse_lfp_panel_data(dev_priv, bdb); 1523 parse_lfp_backlight(dev_priv, bdb); 1524 parse_sdvo_panel_data(dev_priv, bdb); 1525 parse_sdvo_device_mapping(dev_priv, bdb); 1526 parse_device_mapping(dev_priv, bdb); 1527 parse_driver_features(dev_priv, bdb); 1528 parse_edp(dev_priv, bdb); 1529 parse_psr(dev_priv, bdb); 1530 parse_mipi_config(dev_priv, bdb); 1531 parse_mipi_sequence(dev_priv, bdb); 1532 parse_ddi_ports(dev_priv, bdb); 1533 1534 out: 1535 if (!vbt) { 1536 DRM_INFO("Failed to find VBIOS tables (VBT)\n"); 1537 init_vbt_missing_defaults(dev_priv); 1538 } 1539 1540 if (bios) 1541 pci_unmap_rom(pdev, bios); 1542 } 1543 1544 /** 1545 * intel_bios_is_tv_present - is integrated TV present in VBT 1546 * @dev_priv: i915 device instance 1547 * 1548 * Return true if TV is present. If no child devices were parsed from VBT, 1549 * assume TV is present. 1550 */ 1551 bool intel_bios_is_tv_present(struct drm_i915_private *dev_priv) 1552 { 1553 union child_device_config *p_child; 1554 int i; 1555 1556 if (!dev_priv->vbt.int_tv_support) 1557 return false; 1558 1559 if (!dev_priv->vbt.child_dev_num) 1560 return true; 1561 1562 for (i = 0; i < dev_priv->vbt.child_dev_num; i++) { 1563 p_child = dev_priv->vbt.child_dev + i; 1564 /* 1565 * If the device type is not TV, continue. 1566 */ 1567 switch (p_child->old.device_type) { 1568 case DEVICE_TYPE_INT_TV: 1569 case DEVICE_TYPE_TV: 1570 case DEVICE_TYPE_TV_SVIDEO_COMPOSITE: 1571 break; 1572 default: 1573 continue; 1574 } 1575 /* Only when the addin_offset is non-zero, it is regarded 1576 * as present. 1577 */ 1578 if (p_child->old.addin_offset) 1579 return true; 1580 } 1581 1582 return false; 1583 } 1584 1585 /** 1586 * intel_bios_is_lvds_present - is LVDS present in VBT 1587 * @dev_priv: i915 device instance 1588 * @i2c_pin: i2c pin for LVDS if present 1589 * 1590 * Return true if LVDS is present. If no child devices were parsed from VBT, 1591 * assume LVDS is present. 1592 */ 1593 bool intel_bios_is_lvds_present(struct drm_i915_private *dev_priv, u8 *i2c_pin) 1594 { 1595 int i; 1596 1597 if (!dev_priv->vbt.child_dev_num) 1598 return true; 1599 1600 for (i = 0; i < dev_priv->vbt.child_dev_num; i++) { 1601 union child_device_config *uchild = dev_priv->vbt.child_dev + i; 1602 struct old_child_dev_config *child = &uchild->old; 1603 1604 /* If the device type is not LFP, continue. 1605 * We have to check both the new identifiers as well as the 1606 * old for compatibility with some BIOSes. 1607 */ 1608 if (child->device_type != DEVICE_TYPE_INT_LFP && 1609 child->device_type != DEVICE_TYPE_LFP) 1610 continue; 1611 1612 if (intel_gmbus_is_valid_pin(dev_priv, child->i2c_pin)) 1613 *i2c_pin = child->i2c_pin; 1614 1615 /* However, we cannot trust the BIOS writers to populate 1616 * the VBT correctly. Since LVDS requires additional 1617 * information from AIM blocks, a non-zero addin offset is 1618 * a good indicator that the LVDS is actually present. 1619 */ 1620 if (child->addin_offset) 1621 return true; 1622 1623 /* But even then some BIOS writers perform some black magic 1624 * and instantiate the device without reference to any 1625 * additional data. Trust that if the VBT was written into 1626 * the OpRegion then they have validated the LVDS's existence. 1627 */ 1628 if (dev_priv->opregion.vbt) 1629 return true; 1630 } 1631 1632 return false; 1633 } 1634 1635 /** 1636 * intel_bios_is_port_present - is the specified digital port present 1637 * @dev_priv: i915 device instance 1638 * @port: port to check 1639 * 1640 * Return true if the device in %port is present. 1641 */ 1642 bool intel_bios_is_port_present(struct drm_i915_private *dev_priv, enum port port) 1643 { 1644 static const struct { 1645 u16 dp, hdmi; 1646 } port_mapping[] = { 1647 [PORT_B] = { DVO_PORT_DPB, DVO_PORT_HDMIB, }, 1648 [PORT_C] = { DVO_PORT_DPC, DVO_PORT_HDMIC, }, 1649 [PORT_D] = { DVO_PORT_DPD, DVO_PORT_HDMID, }, 1650 [PORT_E] = { DVO_PORT_DPE, DVO_PORT_HDMIE, }, 1651 }; 1652 int i; 1653 1654 /* FIXME maybe deal with port A as well? */ 1655 if (WARN_ON(port == PORT_A) || port >= ARRAY_SIZE(port_mapping)) 1656 return false; 1657 1658 if (!dev_priv->vbt.child_dev_num) 1659 return false; 1660 1661 for (i = 0; i < dev_priv->vbt.child_dev_num; i++) { 1662 const union child_device_config *p_child = 1663 &dev_priv->vbt.child_dev[i]; 1664 if ((p_child->common.dvo_port == port_mapping[port].dp || 1665 p_child->common.dvo_port == port_mapping[port].hdmi) && 1666 (p_child->common.device_type & (DEVICE_TYPE_TMDS_DVI_SIGNALING | 1667 DEVICE_TYPE_DISPLAYPORT_OUTPUT))) 1668 return true; 1669 } 1670 1671 return false; 1672 } 1673 1674 /** 1675 * intel_bios_is_port_edp - is the device in given port eDP 1676 * @dev_priv: i915 device instance 1677 * @port: port to check 1678 * 1679 * Return true if the device in %port is eDP. 1680 */ 1681 bool intel_bios_is_port_edp(struct drm_i915_private *dev_priv, enum port port) 1682 { 1683 union child_device_config *p_child; 1684 static const short port_mapping[] = { 1685 [PORT_B] = DVO_PORT_DPB, 1686 [PORT_C] = DVO_PORT_DPC, 1687 [PORT_D] = DVO_PORT_DPD, 1688 [PORT_E] = DVO_PORT_DPE, 1689 }; 1690 int i; 1691 1692 if (HAS_DDI(dev_priv)) 1693 return dev_priv->vbt.ddi_port_info[port].supports_edp; 1694 1695 if (!dev_priv->vbt.child_dev_num) 1696 return false; 1697 1698 for (i = 0; i < dev_priv->vbt.child_dev_num; i++) { 1699 p_child = dev_priv->vbt.child_dev + i; 1700 1701 if (p_child->common.dvo_port == port_mapping[port] && 1702 (p_child->common.device_type & DEVICE_TYPE_eDP_BITS) == 1703 (DEVICE_TYPE_eDP & DEVICE_TYPE_eDP_BITS)) 1704 return true; 1705 } 1706 1707 return false; 1708 } 1709 1710 static bool child_dev_is_dp_dual_mode(const union child_device_config *p_child, 1711 enum port port) 1712 { 1713 static const struct { 1714 u16 dp, hdmi; 1715 } port_mapping[] = { 1716 /* 1717 * Buggy VBTs may declare DP ports as having 1718 * HDMI type dvo_port :( So let's check both. 1719 */ 1720 [PORT_B] = { DVO_PORT_DPB, DVO_PORT_HDMIB, }, 1721 [PORT_C] = { DVO_PORT_DPC, DVO_PORT_HDMIC, }, 1722 [PORT_D] = { DVO_PORT_DPD, DVO_PORT_HDMID, }, 1723 [PORT_E] = { DVO_PORT_DPE, DVO_PORT_HDMIE, }, 1724 }; 1725 1726 if (port == PORT_A || port >= ARRAY_SIZE(port_mapping)) 1727 return false; 1728 1729 if ((p_child->common.device_type & DEVICE_TYPE_DP_DUAL_MODE_BITS) != 1730 (DEVICE_TYPE_DP_DUAL_MODE & DEVICE_TYPE_DP_DUAL_MODE_BITS)) 1731 return false; 1732 1733 if (p_child->common.dvo_port == port_mapping[port].dp) 1734 return true; 1735 1736 /* Only accept a HDMI dvo_port as DP++ if it has an AUX channel */ 1737 if (p_child->common.dvo_port == port_mapping[port].hdmi && 1738 p_child->common.aux_channel != 0) 1739 return true; 1740 1741 return false; 1742 } 1743 1744 bool intel_bios_is_port_dp_dual_mode(struct drm_i915_private *dev_priv, 1745 enum port port) 1746 { 1747 int i; 1748 1749 for (i = 0; i < dev_priv->vbt.child_dev_num; i++) { 1750 const union child_device_config *p_child = 1751 &dev_priv->vbt.child_dev[i]; 1752 1753 if (child_dev_is_dp_dual_mode(p_child, port)) 1754 return true; 1755 } 1756 1757 return false; 1758 } 1759 1760 /** 1761 * intel_bios_is_dsi_present - is DSI present in VBT 1762 * @dev_priv: i915 device instance 1763 * @port: port for DSI if present 1764 * 1765 * Return true if DSI is present, and return the port in %port. 1766 */ 1767 bool intel_bios_is_dsi_present(struct drm_i915_private *dev_priv, 1768 enum port *port) 1769 { 1770 union child_device_config *p_child; 1771 u8 dvo_port; 1772 int i; 1773 1774 for (i = 0; i < dev_priv->vbt.child_dev_num; i++) { 1775 p_child = dev_priv->vbt.child_dev + i; 1776 1777 if (!(p_child->common.device_type & DEVICE_TYPE_MIPI_OUTPUT)) 1778 continue; 1779 1780 dvo_port = p_child->common.dvo_port; 1781 1782 switch (dvo_port) { 1783 case DVO_PORT_MIPIA: 1784 case DVO_PORT_MIPIC: 1785 if (port) 1786 *port = dvo_port - DVO_PORT_MIPIA; 1787 return true; 1788 case DVO_PORT_MIPIB: 1789 case DVO_PORT_MIPID: 1790 DRM_DEBUG_KMS("VBT has unsupported DSI port %c\n", 1791 port_name(dvo_port - DVO_PORT_MIPIA)); 1792 break; 1793 } 1794 } 1795 1796 return false; 1797 } 1798 1799 /** 1800 * intel_bios_is_port_hpd_inverted - is HPD inverted for %port 1801 * @dev_priv: i915 device instance 1802 * @port: port to check 1803 * 1804 * Return true if HPD should be inverted for %port. 1805 */ 1806 bool 1807 intel_bios_is_port_hpd_inverted(struct drm_i915_private *dev_priv, 1808 enum port port) 1809 { 1810 int i; 1811 1812 if (WARN_ON_ONCE(!IS_GEN9_LP(dev_priv))) 1813 return false; 1814 1815 for (i = 0; i < dev_priv->vbt.child_dev_num; i++) { 1816 if (!dev_priv->vbt.child_dev[i].common.hpd_invert) 1817 continue; 1818 1819 switch (dev_priv->vbt.child_dev[i].common.dvo_port) { 1820 case DVO_PORT_DPA: 1821 case DVO_PORT_HDMIA: 1822 if (port == PORT_A) 1823 return true; 1824 break; 1825 case DVO_PORT_DPB: 1826 case DVO_PORT_HDMIB: 1827 if (port == PORT_B) 1828 return true; 1829 break; 1830 case DVO_PORT_DPC: 1831 case DVO_PORT_HDMIC: 1832 if (port == PORT_C) 1833 return true; 1834 break; 1835 default: 1836 break; 1837 } 1838 } 1839 1840 return false; 1841 } 1842 1843 /** 1844 * intel_bios_is_lspcon_present - if LSPCON is attached on %port 1845 * @dev_priv: i915 device instance 1846 * @port: port to check 1847 * 1848 * Return true if LSPCON is present on this port 1849 */ 1850 bool 1851 intel_bios_is_lspcon_present(struct drm_i915_private *dev_priv, 1852 enum port port) 1853 { 1854 int i; 1855 1856 if (!HAS_LSPCON(dev_priv)) 1857 return false; 1858 1859 for (i = 0; i < dev_priv->vbt.child_dev_num; i++) { 1860 if (!dev_priv->vbt.child_dev[i].common.lspcon) 1861 continue; 1862 1863 switch (dev_priv->vbt.child_dev[i].common.dvo_port) { 1864 case DVO_PORT_DPA: 1865 case DVO_PORT_HDMIA: 1866 if (port == PORT_A) 1867 return true; 1868 break; 1869 case DVO_PORT_DPB: 1870 case DVO_PORT_HDMIB: 1871 if (port == PORT_B) 1872 return true; 1873 break; 1874 case DVO_PORT_DPC: 1875 case DVO_PORT_HDMIC: 1876 if (port == PORT_C) 1877 return true; 1878 break; 1879 case DVO_PORT_DPD: 1880 case DVO_PORT_HDMID: 1881 if (port == PORT_D) 1882 return true; 1883 break; 1884 default: 1885 break; 1886 } 1887 } 1888 1889 return false; 1890 } 1891