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 sanitize_ddc_pin(struct drm_i915_private *dev_priv, 1039 enum port port) 1040 { 1041 const struct ddi_vbt_port_info *info = 1042 &dev_priv->vbt.ddi_port_info[port]; 1043 enum port p; 1044 1045 if (!info->alternate_ddc_pin) 1046 return; 1047 1048 for_each_port_masked(p, (1 << port) - 1) { 1049 struct ddi_vbt_port_info *i = &dev_priv->vbt.ddi_port_info[p]; 1050 1051 if (info->alternate_ddc_pin != i->alternate_ddc_pin) 1052 continue; 1053 1054 DRM_DEBUG_KMS("port %c trying to use the same DDC pin (0x%x) as port %c, " 1055 "disabling port %c DVI/HDMI support\n", 1056 port_name(p), i->alternate_ddc_pin, 1057 port_name(port), port_name(p)); 1058 1059 /* 1060 * If we have multiple ports supposedly sharing the 1061 * pin, then dvi/hdmi couldn't exist on the shared 1062 * port. Otherwise they share the same ddc bin and 1063 * system couldn't communicate with them separately. 1064 * 1065 * Due to parsing the ports in alphabetical order, 1066 * a higher port will always clobber a lower one. 1067 */ 1068 i->supports_dvi = false; 1069 i->supports_hdmi = false; 1070 i->alternate_ddc_pin = 0; 1071 } 1072 } 1073 1074 static void sanitize_aux_ch(struct drm_i915_private *dev_priv, 1075 enum port port) 1076 { 1077 const struct ddi_vbt_port_info *info = 1078 &dev_priv->vbt.ddi_port_info[port]; 1079 enum port p; 1080 1081 if (!info->alternate_aux_channel) 1082 return; 1083 1084 for_each_port_masked(p, (1 << port) - 1) { 1085 struct ddi_vbt_port_info *i = &dev_priv->vbt.ddi_port_info[p]; 1086 1087 if (info->alternate_aux_channel != i->alternate_aux_channel) 1088 continue; 1089 1090 DRM_DEBUG_KMS("port %c trying to use the same AUX CH (0x%x) as port %c, " 1091 "disabling port %c DP support\n", 1092 port_name(p), i->alternate_aux_channel, 1093 port_name(port), port_name(p)); 1094 1095 /* 1096 * If we have multiple ports supposedlt sharing the 1097 * aux channel, then DP couldn't exist on the shared 1098 * port. Otherwise they share the same aux channel 1099 * and system couldn't communicate with them separately. 1100 * 1101 * Due to parsing the ports in alphabetical order, 1102 * a higher port will always clobber a lower one. 1103 */ 1104 i->supports_dp = false; 1105 i->alternate_aux_channel = 0; 1106 } 1107 } 1108 1109 static void parse_ddi_port(struct drm_i915_private *dev_priv, enum port port, 1110 const struct bdb_header *bdb) 1111 { 1112 union child_device_config *it, *child = NULL; 1113 struct ddi_vbt_port_info *info = &dev_priv->vbt.ddi_port_info[port]; 1114 uint8_t hdmi_level_shift; 1115 int i, j; 1116 bool is_dvi, is_hdmi, is_dp, is_edp, is_crt; 1117 uint8_t aux_channel, ddc_pin; 1118 /* Each DDI port can have more than one value on the "DVO Port" field, 1119 * so look for all the possible values for each port and abort if more 1120 * than one is found. */ 1121 int dvo_ports[][3] = { 1122 {DVO_PORT_HDMIA, DVO_PORT_DPA, -1}, 1123 {DVO_PORT_HDMIB, DVO_PORT_DPB, -1}, 1124 {DVO_PORT_HDMIC, DVO_PORT_DPC, -1}, 1125 {DVO_PORT_HDMID, DVO_PORT_DPD, -1}, 1126 {DVO_PORT_CRT, DVO_PORT_HDMIE, DVO_PORT_DPE}, 1127 }; 1128 1129 /* Find the child device to use, abort if more than one found. */ 1130 for (i = 0; i < dev_priv->vbt.child_dev_num; i++) { 1131 it = dev_priv->vbt.child_dev + i; 1132 1133 for (j = 0; j < 3; j++) { 1134 if (dvo_ports[port][j] == -1) 1135 break; 1136 1137 if (it->common.dvo_port == dvo_ports[port][j]) { 1138 if (child) { 1139 DRM_DEBUG_KMS("More than one child device for port %c in VBT.\n", 1140 port_name(port)); 1141 return; 1142 } 1143 child = it; 1144 } 1145 } 1146 } 1147 if (!child) 1148 return; 1149 1150 aux_channel = child->common.aux_channel; 1151 ddc_pin = child->common.ddc_pin; 1152 1153 is_dvi = child->common.device_type & DEVICE_TYPE_TMDS_DVI_SIGNALING; 1154 is_dp = child->common.device_type & DEVICE_TYPE_DISPLAYPORT_OUTPUT; 1155 is_crt = child->common.device_type & DEVICE_TYPE_ANALOG_OUTPUT; 1156 is_hdmi = is_dvi && (child->common.device_type & DEVICE_TYPE_NOT_HDMI_OUTPUT) == 0; 1157 is_edp = is_dp && (child->common.device_type & DEVICE_TYPE_INTERNAL_CONNECTOR); 1158 1159 info->supports_dvi = is_dvi; 1160 info->supports_hdmi = is_hdmi; 1161 info->supports_dp = is_dp; 1162 1163 DRM_DEBUG_KMS("Port %c VBT info: DP:%d HDMI:%d DVI:%d EDP:%d CRT:%d\n", 1164 port_name(port), is_dp, is_hdmi, is_dvi, is_edp, is_crt); 1165 1166 if (is_edp && is_dvi) 1167 DRM_DEBUG_KMS("Internal DP port %c is TMDS compatible\n", 1168 port_name(port)); 1169 if (is_crt && port != PORT_E) 1170 DRM_DEBUG_KMS("Port %c is analog\n", port_name(port)); 1171 if (is_crt && (is_dvi || is_dp)) 1172 DRM_DEBUG_KMS("Analog port %c is also DP or TMDS compatible\n", 1173 port_name(port)); 1174 if (is_dvi && (port == PORT_A || port == PORT_E)) 1175 DRM_DEBUG_KMS("Port %c is TMDS compatible\n", port_name(port)); 1176 if (!is_dvi && !is_dp && !is_crt) 1177 DRM_DEBUG_KMS("Port %c is not DP/TMDS/CRT compatible\n", 1178 port_name(port)); 1179 if (is_edp && (port == PORT_B || port == PORT_C || port == PORT_E)) 1180 DRM_DEBUG_KMS("Port %c is internal DP\n", port_name(port)); 1181 1182 if (is_dvi) { 1183 info->alternate_ddc_pin = ddc_pin; 1184 1185 sanitize_ddc_pin(dev_priv, port); 1186 } 1187 1188 if (is_dp) { 1189 info->alternate_aux_channel = aux_channel; 1190 1191 sanitize_aux_ch(dev_priv, port); 1192 } 1193 1194 if (bdb->version >= 158) { 1195 /* The VBT HDMI level shift values match the table we have. */ 1196 hdmi_level_shift = child->raw[7] & 0xF; 1197 DRM_DEBUG_KMS("VBT HDMI level shift for port %c: %d\n", 1198 port_name(port), 1199 hdmi_level_shift); 1200 info->hdmi_level_shift = hdmi_level_shift; 1201 } 1202 1203 /* Parse the I_boost config for SKL and above */ 1204 if (bdb->version >= 196 && child->common.iboost) { 1205 info->dp_boost_level = translate_iboost(child->common.iboost_level & 0xF); 1206 DRM_DEBUG_KMS("VBT (e)DP boost level for port %c: %d\n", 1207 port_name(port), info->dp_boost_level); 1208 info->hdmi_boost_level = translate_iboost(child->common.iboost_level >> 4); 1209 DRM_DEBUG_KMS("VBT HDMI boost level for port %c: %d\n", 1210 port_name(port), info->hdmi_boost_level); 1211 } 1212 } 1213 1214 static void parse_ddi_ports(struct drm_i915_private *dev_priv, 1215 const struct bdb_header *bdb) 1216 { 1217 enum port port; 1218 1219 if (!HAS_DDI(dev_priv)) 1220 return; 1221 1222 if (!dev_priv->vbt.child_dev_num) 1223 return; 1224 1225 if (bdb->version < 155) 1226 return; 1227 1228 for (port = PORT_A; port < I915_MAX_PORTS; port++) 1229 parse_ddi_port(dev_priv, port, bdb); 1230 } 1231 1232 static void 1233 parse_device_mapping(struct drm_i915_private *dev_priv, 1234 const struct bdb_header *bdb) 1235 { 1236 const struct bdb_general_definitions *p_defs; 1237 const union child_device_config *p_child; 1238 union child_device_config *child_dev_ptr; 1239 int i, child_device_num, count; 1240 u8 expected_size; 1241 u16 block_size; 1242 1243 p_defs = find_section(bdb, BDB_GENERAL_DEFINITIONS); 1244 if (!p_defs) { 1245 DRM_DEBUG_KMS("No general definition block is found, no devices defined.\n"); 1246 return; 1247 } 1248 if (bdb->version < 106) { 1249 expected_size = 22; 1250 } else if (bdb->version < 111) { 1251 expected_size = 27; 1252 } else if (bdb->version < 195) { 1253 BUILD_BUG_ON(sizeof(struct old_child_dev_config) != 33); 1254 expected_size = sizeof(struct old_child_dev_config); 1255 } else if (bdb->version == 195) { 1256 expected_size = 37; 1257 } else if (bdb->version <= 197) { 1258 expected_size = 38; 1259 } else { 1260 expected_size = 38; 1261 BUILD_BUG_ON(sizeof(*p_child) < 38); 1262 DRM_DEBUG_DRIVER("Expected child device config size for VBT version %u not known; assuming %u\n", 1263 bdb->version, expected_size); 1264 } 1265 1266 /* Flag an error for unexpected size, but continue anyway. */ 1267 if (p_defs->child_dev_size != expected_size) 1268 DRM_ERROR("Unexpected child device config size %u (expected %u for VBT version %u)\n", 1269 p_defs->child_dev_size, expected_size, bdb->version); 1270 1271 /* The legacy sized child device config is the minimum we need. */ 1272 if (p_defs->child_dev_size < sizeof(struct old_child_dev_config)) { 1273 DRM_DEBUG_KMS("Child device config size %u is too small.\n", 1274 p_defs->child_dev_size); 1275 return; 1276 } 1277 1278 /* get the block size of general definitions */ 1279 block_size = get_blocksize(p_defs); 1280 /* get the number of child device */ 1281 child_device_num = (block_size - sizeof(*p_defs)) / 1282 p_defs->child_dev_size; 1283 count = 0; 1284 /* get the number of child device that is present */ 1285 for (i = 0; i < child_device_num; i++) { 1286 p_child = child_device_ptr(p_defs, i); 1287 if (!p_child->common.device_type) { 1288 /* skip the device block if device type is invalid */ 1289 continue; 1290 } 1291 count++; 1292 } 1293 if (!count) { 1294 DRM_DEBUG_KMS("no child dev is parsed from VBT\n"); 1295 return; 1296 } 1297 dev_priv->vbt.child_dev = kcalloc(count, sizeof(*p_child), GFP_KERNEL); 1298 if (!dev_priv->vbt.child_dev) { 1299 DRM_DEBUG_KMS("No memory space for child device\n"); 1300 return; 1301 } 1302 1303 dev_priv->vbt.child_dev_num = count; 1304 count = 0; 1305 for (i = 0; i < child_device_num; i++) { 1306 p_child = child_device_ptr(p_defs, i); 1307 if (!p_child->common.device_type) { 1308 /* skip the device block if device type is invalid */ 1309 continue; 1310 } 1311 1312 child_dev_ptr = dev_priv->vbt.child_dev + count; 1313 count++; 1314 1315 /* 1316 * Copy as much as we know (sizeof) and is available 1317 * (child_dev_size) of the child device. Accessing the data must 1318 * depend on VBT version. 1319 */ 1320 memcpy(child_dev_ptr, p_child, 1321 min_t(size_t, p_defs->child_dev_size, sizeof(*p_child))); 1322 1323 /* 1324 * copied full block, now init values when they are not 1325 * available in current version 1326 */ 1327 if (bdb->version < 196) { 1328 /* Set default values for bits added from v196 */ 1329 child_dev_ptr->common.iboost = 0; 1330 child_dev_ptr->common.hpd_invert = 0; 1331 } 1332 1333 if (bdb->version < 192) 1334 child_dev_ptr->common.lspcon = 0; 1335 } 1336 return; 1337 } 1338 1339 static void 1340 init_vbt_defaults(struct drm_i915_private *dev_priv) 1341 { 1342 enum port port; 1343 1344 dev_priv->vbt.crt_ddc_pin = GMBUS_PIN_VGADDC; 1345 1346 /* Default to having backlight */ 1347 dev_priv->vbt.backlight.present = true; 1348 1349 /* LFP panel data */ 1350 dev_priv->vbt.lvds_dither = 1; 1351 dev_priv->vbt.lvds_vbt = 0; 1352 1353 /* SDVO panel data */ 1354 dev_priv->vbt.sdvo_lvds_vbt_mode = NULL; 1355 1356 /* general features */ 1357 dev_priv->vbt.int_tv_support = 1; 1358 dev_priv->vbt.int_crt_support = 1; 1359 1360 /* Default to using SSC */ 1361 dev_priv->vbt.lvds_use_ssc = 1; 1362 /* 1363 * Core/SandyBridge/IvyBridge use alternative (120MHz) reference 1364 * clock for LVDS. 1365 */ 1366 dev_priv->vbt.lvds_ssc_freq = intel_bios_ssc_frequency(dev_priv, 1367 !HAS_PCH_SPLIT(dev_priv)); 1368 DRM_DEBUG_KMS("Set default to SSC at %d kHz\n", dev_priv->vbt.lvds_ssc_freq); 1369 1370 for (port = PORT_A; port < I915_MAX_PORTS; port++) { 1371 struct ddi_vbt_port_info *info = 1372 &dev_priv->vbt.ddi_port_info[port]; 1373 1374 info->hdmi_level_shift = HDMI_LEVEL_SHIFT_UNKNOWN; 1375 1376 info->supports_dvi = (port != PORT_A && port != PORT_E); 1377 info->supports_hdmi = info->supports_dvi; 1378 info->supports_dp = (port != PORT_E); 1379 } 1380 } 1381 1382 static const struct bdb_header *get_bdb_header(const struct vbt_header *vbt) 1383 { 1384 const void *_vbt = vbt; 1385 1386 return _vbt + vbt->bdb_offset; 1387 } 1388 1389 /** 1390 * intel_bios_is_valid_vbt - does the given buffer contain a valid VBT 1391 * @buf: pointer to a buffer to validate 1392 * @size: size of the buffer 1393 * 1394 * Returns true on valid VBT. 1395 */ 1396 bool intel_bios_is_valid_vbt(const void *buf, size_t size) 1397 { 1398 const struct vbt_header *vbt = buf; 1399 const struct bdb_header *bdb; 1400 1401 if (!vbt) 1402 return false; 1403 1404 if (sizeof(struct vbt_header) > size) { 1405 DRM_DEBUG_DRIVER("VBT header incomplete\n"); 1406 return false; 1407 } 1408 1409 if (memcmp(vbt->signature, "$VBT", 4)) { 1410 DRM_DEBUG_DRIVER("VBT invalid signature\n"); 1411 return false; 1412 } 1413 1414 if (vbt->bdb_offset + sizeof(struct bdb_header) > size) { 1415 DRM_DEBUG_DRIVER("BDB header incomplete\n"); 1416 return false; 1417 } 1418 1419 bdb = get_bdb_header(vbt); 1420 if (vbt->bdb_offset + bdb->bdb_size > size) { 1421 DRM_DEBUG_DRIVER("BDB incomplete\n"); 1422 return false; 1423 } 1424 1425 return vbt; 1426 } 1427 1428 static const struct vbt_header *find_vbt(void __iomem *bios, size_t size) 1429 { 1430 size_t i; 1431 1432 /* Scour memory looking for the VBT signature. */ 1433 for (i = 0; i + 4 < size; i++) { 1434 void *vbt; 1435 1436 if (ioread32(bios + i) != *((const u32 *) "$VBT")) 1437 continue; 1438 1439 /* 1440 * This is the one place where we explicitly discard the address 1441 * space (__iomem) of the BIOS/VBT. 1442 */ 1443 vbt = (void __force *) bios + i; 1444 if (intel_bios_is_valid_vbt(vbt, size - i)) 1445 return vbt; 1446 1447 break; 1448 } 1449 1450 return NULL; 1451 } 1452 1453 /** 1454 * intel_bios_init - find VBT and initialize settings from the BIOS 1455 * @dev_priv: i915 device instance 1456 * 1457 * Loads the Video BIOS and checks that the VBT exists. Sets scratch registers 1458 * to appropriate values. 1459 * 1460 * Returns 0 on success, nonzero on failure. 1461 */ 1462 int 1463 intel_bios_init(struct drm_i915_private *dev_priv) 1464 { 1465 struct pci_dev *pdev = dev_priv->drm.pdev; 1466 const struct vbt_header *vbt = dev_priv->opregion.vbt; 1467 const struct bdb_header *bdb; 1468 u8 __iomem *bios = NULL; 1469 1470 if (HAS_PCH_NOP(dev_priv)) 1471 return -ENODEV; 1472 1473 init_vbt_defaults(dev_priv); 1474 1475 if (!vbt) { 1476 size_t size; 1477 1478 bios = pci_map_rom(pdev, &size); 1479 if (!bios) 1480 return -1; 1481 1482 vbt = find_vbt(bios, size); 1483 if (!vbt) { 1484 pci_unmap_rom(pdev, bios); 1485 return -1; 1486 } 1487 1488 DRM_DEBUG_KMS("Found valid VBT in PCI ROM\n"); 1489 } 1490 1491 bdb = get_bdb_header(vbt); 1492 1493 DRM_DEBUG_KMS("VBT signature \"%.*s\", BDB version %d\n", 1494 (int)sizeof(vbt->signature), vbt->signature, bdb->version); 1495 1496 /* Grab useful general definitions */ 1497 parse_general_features(dev_priv, bdb); 1498 parse_general_definitions(dev_priv, bdb); 1499 parse_lfp_panel_data(dev_priv, bdb); 1500 parse_lfp_backlight(dev_priv, bdb); 1501 parse_sdvo_panel_data(dev_priv, bdb); 1502 parse_sdvo_device_mapping(dev_priv, bdb); 1503 parse_device_mapping(dev_priv, bdb); 1504 parse_driver_features(dev_priv, bdb); 1505 parse_edp(dev_priv, bdb); 1506 parse_psr(dev_priv, bdb); 1507 parse_mipi_config(dev_priv, bdb); 1508 parse_mipi_sequence(dev_priv, bdb); 1509 parse_ddi_ports(dev_priv, bdb); 1510 1511 if (bios) 1512 pci_unmap_rom(pdev, bios); 1513 1514 return 0; 1515 } 1516 1517 /** 1518 * intel_bios_is_tv_present - is integrated TV present in VBT 1519 * @dev_priv: i915 device instance 1520 * 1521 * Return true if TV is present. If no child devices were parsed from VBT, 1522 * assume TV is present. 1523 */ 1524 bool intel_bios_is_tv_present(struct drm_i915_private *dev_priv) 1525 { 1526 union child_device_config *p_child; 1527 int i; 1528 1529 if (!dev_priv->vbt.int_tv_support) 1530 return false; 1531 1532 if (!dev_priv->vbt.child_dev_num) 1533 return true; 1534 1535 for (i = 0; i < dev_priv->vbt.child_dev_num; i++) { 1536 p_child = dev_priv->vbt.child_dev + i; 1537 /* 1538 * If the device type is not TV, continue. 1539 */ 1540 switch (p_child->old.device_type) { 1541 case DEVICE_TYPE_INT_TV: 1542 case DEVICE_TYPE_TV: 1543 case DEVICE_TYPE_TV_SVIDEO_COMPOSITE: 1544 break; 1545 default: 1546 continue; 1547 } 1548 /* Only when the addin_offset is non-zero, it is regarded 1549 * as present. 1550 */ 1551 if (p_child->old.addin_offset) 1552 return true; 1553 } 1554 1555 return false; 1556 } 1557 1558 /** 1559 * intel_bios_is_lvds_present - is LVDS present in VBT 1560 * @dev_priv: i915 device instance 1561 * @i2c_pin: i2c pin for LVDS if present 1562 * 1563 * Return true if LVDS is present. If no child devices were parsed from VBT, 1564 * assume LVDS is present. 1565 */ 1566 bool intel_bios_is_lvds_present(struct drm_i915_private *dev_priv, u8 *i2c_pin) 1567 { 1568 int i; 1569 1570 if (!dev_priv->vbt.child_dev_num) 1571 return true; 1572 1573 for (i = 0; i < dev_priv->vbt.child_dev_num; i++) { 1574 union child_device_config *uchild = dev_priv->vbt.child_dev + i; 1575 struct old_child_dev_config *child = &uchild->old; 1576 1577 /* If the device type is not LFP, continue. 1578 * We have to check both the new identifiers as well as the 1579 * old for compatibility with some BIOSes. 1580 */ 1581 if (child->device_type != DEVICE_TYPE_INT_LFP && 1582 child->device_type != DEVICE_TYPE_LFP) 1583 continue; 1584 1585 if (intel_gmbus_is_valid_pin(dev_priv, child->i2c_pin)) 1586 *i2c_pin = child->i2c_pin; 1587 1588 /* However, we cannot trust the BIOS writers to populate 1589 * the VBT correctly. Since LVDS requires additional 1590 * information from AIM blocks, a non-zero addin offset is 1591 * a good indicator that the LVDS is actually present. 1592 */ 1593 if (child->addin_offset) 1594 return true; 1595 1596 /* But even then some BIOS writers perform some black magic 1597 * and instantiate the device without reference to any 1598 * additional data. Trust that if the VBT was written into 1599 * the OpRegion then they have validated the LVDS's existence. 1600 */ 1601 if (dev_priv->opregion.vbt) 1602 return true; 1603 } 1604 1605 return false; 1606 } 1607 1608 /** 1609 * intel_bios_is_port_present - is the specified digital port present 1610 * @dev_priv: i915 device instance 1611 * @port: port to check 1612 * 1613 * Return true if the device in %port is present. 1614 */ 1615 bool intel_bios_is_port_present(struct drm_i915_private *dev_priv, enum port port) 1616 { 1617 static const struct { 1618 u16 dp, hdmi; 1619 } port_mapping[] = { 1620 [PORT_B] = { DVO_PORT_DPB, DVO_PORT_HDMIB, }, 1621 [PORT_C] = { DVO_PORT_DPC, DVO_PORT_HDMIC, }, 1622 [PORT_D] = { DVO_PORT_DPD, DVO_PORT_HDMID, }, 1623 [PORT_E] = { DVO_PORT_DPE, DVO_PORT_HDMIE, }, 1624 }; 1625 int i; 1626 1627 /* FIXME maybe deal with port A as well? */ 1628 if (WARN_ON(port == PORT_A) || port >= ARRAY_SIZE(port_mapping)) 1629 return false; 1630 1631 if (!dev_priv->vbt.child_dev_num) 1632 return false; 1633 1634 for (i = 0; i < dev_priv->vbt.child_dev_num; i++) { 1635 const union child_device_config *p_child = 1636 &dev_priv->vbt.child_dev[i]; 1637 if ((p_child->common.dvo_port == port_mapping[port].dp || 1638 p_child->common.dvo_port == port_mapping[port].hdmi) && 1639 (p_child->common.device_type & (DEVICE_TYPE_TMDS_DVI_SIGNALING | 1640 DEVICE_TYPE_DISPLAYPORT_OUTPUT))) 1641 return true; 1642 } 1643 1644 return false; 1645 } 1646 1647 /** 1648 * intel_bios_is_port_edp - is the device in given port eDP 1649 * @dev_priv: i915 device instance 1650 * @port: port to check 1651 * 1652 * Return true if the device in %port is eDP. 1653 */ 1654 bool intel_bios_is_port_edp(struct drm_i915_private *dev_priv, enum port port) 1655 { 1656 union child_device_config *p_child; 1657 static const short port_mapping[] = { 1658 [PORT_B] = DVO_PORT_DPB, 1659 [PORT_C] = DVO_PORT_DPC, 1660 [PORT_D] = DVO_PORT_DPD, 1661 [PORT_E] = DVO_PORT_DPE, 1662 }; 1663 int i; 1664 1665 if (!dev_priv->vbt.child_dev_num) 1666 return false; 1667 1668 for (i = 0; i < dev_priv->vbt.child_dev_num; i++) { 1669 p_child = dev_priv->vbt.child_dev + i; 1670 1671 if (p_child->common.dvo_port == port_mapping[port] && 1672 (p_child->common.device_type & DEVICE_TYPE_eDP_BITS) == 1673 (DEVICE_TYPE_eDP & DEVICE_TYPE_eDP_BITS)) 1674 return true; 1675 } 1676 1677 return false; 1678 } 1679 1680 static bool child_dev_is_dp_dual_mode(const union child_device_config *p_child, 1681 enum port port) 1682 { 1683 static const struct { 1684 u16 dp, hdmi; 1685 } port_mapping[] = { 1686 /* 1687 * Buggy VBTs may declare DP ports as having 1688 * HDMI type dvo_port :( So let's check both. 1689 */ 1690 [PORT_B] = { DVO_PORT_DPB, DVO_PORT_HDMIB, }, 1691 [PORT_C] = { DVO_PORT_DPC, DVO_PORT_HDMIC, }, 1692 [PORT_D] = { DVO_PORT_DPD, DVO_PORT_HDMID, }, 1693 [PORT_E] = { DVO_PORT_DPE, DVO_PORT_HDMIE, }, 1694 }; 1695 1696 if (port == PORT_A || port >= ARRAY_SIZE(port_mapping)) 1697 return false; 1698 1699 if ((p_child->common.device_type & DEVICE_TYPE_DP_DUAL_MODE_BITS) != 1700 (DEVICE_TYPE_DP_DUAL_MODE & DEVICE_TYPE_DP_DUAL_MODE_BITS)) 1701 return false; 1702 1703 if (p_child->common.dvo_port == port_mapping[port].dp) 1704 return true; 1705 1706 /* Only accept a HDMI dvo_port as DP++ if it has an AUX channel */ 1707 if (p_child->common.dvo_port == port_mapping[port].hdmi && 1708 p_child->common.aux_channel != 0) 1709 return true; 1710 1711 return false; 1712 } 1713 1714 bool intel_bios_is_port_dp_dual_mode(struct drm_i915_private *dev_priv, 1715 enum port port) 1716 { 1717 int i; 1718 1719 for (i = 0; i < dev_priv->vbt.child_dev_num; i++) { 1720 const union child_device_config *p_child = 1721 &dev_priv->vbt.child_dev[i]; 1722 1723 if (child_dev_is_dp_dual_mode(p_child, port)) 1724 return true; 1725 } 1726 1727 return false; 1728 } 1729 1730 /** 1731 * intel_bios_is_dsi_present - is DSI present in VBT 1732 * @dev_priv: i915 device instance 1733 * @port: port for DSI if present 1734 * 1735 * Return true if DSI is present, and return the port in %port. 1736 */ 1737 bool intel_bios_is_dsi_present(struct drm_i915_private *dev_priv, 1738 enum port *port) 1739 { 1740 union child_device_config *p_child; 1741 u8 dvo_port; 1742 int i; 1743 1744 for (i = 0; i < dev_priv->vbt.child_dev_num; i++) { 1745 p_child = dev_priv->vbt.child_dev + i; 1746 1747 if (!(p_child->common.device_type & DEVICE_TYPE_MIPI_OUTPUT)) 1748 continue; 1749 1750 dvo_port = p_child->common.dvo_port; 1751 1752 switch (dvo_port) { 1753 case DVO_PORT_MIPIA: 1754 case DVO_PORT_MIPIC: 1755 if (port) 1756 *port = dvo_port - DVO_PORT_MIPIA; 1757 return true; 1758 case DVO_PORT_MIPIB: 1759 case DVO_PORT_MIPID: 1760 DRM_DEBUG_KMS("VBT has unsupported DSI port %c\n", 1761 port_name(dvo_port - DVO_PORT_MIPIA)); 1762 break; 1763 } 1764 } 1765 1766 return false; 1767 } 1768 1769 /** 1770 * intel_bios_is_port_hpd_inverted - is HPD inverted for %port 1771 * @dev_priv: i915 device instance 1772 * @port: port to check 1773 * 1774 * Return true if HPD should be inverted for %port. 1775 */ 1776 bool 1777 intel_bios_is_port_hpd_inverted(struct drm_i915_private *dev_priv, 1778 enum port port) 1779 { 1780 int i; 1781 1782 if (WARN_ON_ONCE(!IS_BROXTON(dev_priv))) 1783 return false; 1784 1785 for (i = 0; i < dev_priv->vbt.child_dev_num; i++) { 1786 if (!dev_priv->vbt.child_dev[i].common.hpd_invert) 1787 continue; 1788 1789 switch (dev_priv->vbt.child_dev[i].common.dvo_port) { 1790 case DVO_PORT_DPA: 1791 case DVO_PORT_HDMIA: 1792 if (port == PORT_A) 1793 return true; 1794 break; 1795 case DVO_PORT_DPB: 1796 case DVO_PORT_HDMIB: 1797 if (port == PORT_B) 1798 return true; 1799 break; 1800 case DVO_PORT_DPC: 1801 case DVO_PORT_HDMIC: 1802 if (port == PORT_C) 1803 return true; 1804 break; 1805 default: 1806 break; 1807 } 1808 } 1809 1810 return false; 1811 } 1812 1813 /** 1814 * intel_bios_is_lspcon_present - if LSPCON is attached on %port 1815 * @dev_priv: i915 device instance 1816 * @port: port to check 1817 * 1818 * Return true if LSPCON is present on this port 1819 */ 1820 bool 1821 intel_bios_is_lspcon_present(struct drm_i915_private *dev_priv, 1822 enum port port) 1823 { 1824 int i; 1825 1826 if (!HAS_LSPCON(dev_priv)) 1827 return false; 1828 1829 for (i = 0; i < dev_priv->vbt.child_dev_num; i++) { 1830 if (!dev_priv->vbt.child_dev[i].common.lspcon) 1831 continue; 1832 1833 switch (dev_priv->vbt.child_dev[i].common.dvo_port) { 1834 case DVO_PORT_DPA: 1835 case DVO_PORT_HDMIA: 1836 if (port == PORT_A) 1837 return true; 1838 break; 1839 case DVO_PORT_DPB: 1840 case DVO_PORT_HDMIB: 1841 if (port == PORT_B) 1842 return true; 1843 break; 1844 case DVO_PORT_DPC: 1845 case DVO_PORT_HDMIC: 1846 if (port == PORT_C) 1847 return true; 1848 break; 1849 case DVO_PORT_DPD: 1850 case DVO_PORT_HDMID: 1851 if (port == PORT_D) 1852 return true; 1853 break; 1854 default: 1855 break; 1856 } 1857 } 1858 1859 return false; 1860 } 1861