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