* [Intel-gfx] [PATCH 00/12] drm/i915/bios: vbt child device rework
@ 2021-02-17 17:03 Jani Nikula
2021-02-17 17:03 ` [Intel-gfx] [PATCH 01/12] drm/i915/bios: mass convert dev_priv to i915 Jani Nikula
` (15 more replies)
0 siblings, 16 replies; 40+ messages in thread
From: Jani Nikula @ 2021-02-17 17:03 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula, Lucas De Marchi
I see the parsing and caching of child device data into
i915->vbt.ddi_port_info[] slightly problematic. We keep adding data to
it, and it just duplicates information. Start moving towards a single
point of truth, and getting the information directly from the child
device data.
One obstacle has been that init_vbt_missing_defaults() only initializes
ddi_port_info, without child devices. As the same problem arose in a
patch from Lucas, I thought it was time to start creating fake child
devices to unify the code.
There are a bunch of cleanups and refactoring here. Patches 1-5 are
enough to fix Lucas' patch I think. Patch 10 does what Lucas was after,
just in a different way and as a byproduct of something else. The later
patches in the series are more to show the direction, and seek
validation for that direction.
Naming is also a question mark. All of these are a bit questionable:
intel_bios_encoder_data, devdata, intel_bios_encoder_supports_*, etc.
BR,
Jani.
[1] http://patchwork.freedesktop.org/patch/msgid/20210213190511.1017088-2-lucas.demarchi@intel.com
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Jani Nikula (12):
drm/i915/bios: mass convert dev_priv to i915
drm/i915/bios: store bdb version in i915
drm/i915/bios: limit default outputs by platform on missing VBT
drm/i915/bios: limit default outputs to ports A through F
drm/i915/bios: create fake child devices on missing VBT
drm/i915/bios: rename display_device_data to intel_bios_encoder_data
drm/i915/bios: add i915 backpointer to intel_bios_encoder_data
drm/i915/vbt: add helper functions to check output support
drm/i915/bios: save a higher level pointer in ddi_vbt_port_info[]
drm/i915/bios: start using the intel_bios_encoder_data directly
drm/i915/bios: start using intel_bios_encoder_data for Type-C USB and
TBT
drm/i915/bios: add intel_bios_encoder_data to encoder, use for iboost
drivers/gpu/drm/i915/display/intel_bios.c | 1021 +++++++++--------
drivers/gpu/drm/i915/display/intel_bios.h | 17 +-
drivers/gpu/drm/i915/display/intel_ddi.c | 28 +-
.../drm/i915/display/intel_display_types.h | 3 +
drivers/gpu/drm/i915/i915_drv.h | 9 +-
5 files changed, 584 insertions(+), 494 deletions(-)
--
2.20.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 40+ messages in thread
* [Intel-gfx] [PATCH 01/12] drm/i915/bios: mass convert dev_priv to i915
2021-02-17 17:03 [Intel-gfx] [PATCH 00/12] drm/i915/bios: vbt child device rework Jani Nikula
@ 2021-02-17 17:03 ` Jani Nikula
2021-02-22 18:14 ` Ville Syrjälä
2021-02-17 17:03 ` [Intel-gfx] [PATCH 02/12] drm/i915/bios: store bdb version in i915 Jani Nikula
` (14 subsequent siblings)
15 siblings, 1 reply; 40+ messages in thread
From: Jani Nikula @ 2021-02-17 17:03 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula, Lucas De Marchi
Time to just yank out the bandage. No functional changes.
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/display/intel_bios.c | 766 +++++++++++-----------
1 file changed, 383 insertions(+), 383 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
index 7902d4c2673e..802c228b2940 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.c
+++ b/drivers/gpu/drm/i915/display/intel_bios.c
@@ -211,7 +211,7 @@ get_lvds_fp_timing(const struct bdb_header *bdb,
/* Parse general panel options */
static void
-parse_panel_options(struct drm_i915_private *dev_priv,
+parse_panel_options(struct drm_i915_private *i915,
const struct bdb_header *bdb)
{
const struct bdb_lvds_options *lvds_options;
@@ -223,27 +223,27 @@ parse_panel_options(struct drm_i915_private *dev_priv,
if (!lvds_options)
return;
- dev_priv->vbt.lvds_dither = lvds_options->pixel_dither;
+ i915->vbt.lvds_dither = lvds_options->pixel_dither;
- ret = intel_opregion_get_panel_type(dev_priv);
+ ret = intel_opregion_get_panel_type(i915);
if (ret >= 0) {
- drm_WARN_ON(&dev_priv->drm, ret > 0xf);
+ drm_WARN_ON(&i915->drm, ret > 0xf);
panel_type = ret;
- drm_dbg_kms(&dev_priv->drm, "Panel type: %d (OpRegion)\n",
+ drm_dbg_kms(&i915->drm, "Panel type: %d (OpRegion)\n",
panel_type);
} else {
if (lvds_options->panel_type > 0xf) {
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"Invalid VBT panel type 0x%x\n",
lvds_options->panel_type);
return;
}
panel_type = lvds_options->panel_type;
- drm_dbg_kms(&dev_priv->drm, "Panel type: %d (VBT)\n",
+ drm_dbg_kms(&i915->drm, "Panel type: %d (VBT)\n",
panel_type);
}
- dev_priv->vbt.panel_type = panel_type;
+ i915->vbt.panel_type = panel_type;
drrs_mode = (lvds_options->dps_panel_type_bits
>> (panel_type * 2)) & MODE_MASK;
@@ -254,17 +254,17 @@ parse_panel_options(struct drm_i915_private *dev_priv,
*/
switch (drrs_mode) {
case 0:
- dev_priv->vbt.drrs_type = STATIC_DRRS_SUPPORT;
- drm_dbg_kms(&dev_priv->drm, "DRRS supported mode is static\n");
+ i915->vbt.drrs_type = STATIC_DRRS_SUPPORT;
+ drm_dbg_kms(&i915->drm, "DRRS supported mode is static\n");
break;
case 2:
- dev_priv->vbt.drrs_type = SEAMLESS_DRRS_SUPPORT;
- drm_dbg_kms(&dev_priv->drm,
+ i915->vbt.drrs_type = SEAMLESS_DRRS_SUPPORT;
+ drm_dbg_kms(&i915->drm,
"DRRS supported mode is seamless\n");
break;
default:
- dev_priv->vbt.drrs_type = DRRS_NOT_SUPPORTED;
- drm_dbg_kms(&dev_priv->drm,
+ i915->vbt.drrs_type = DRRS_NOT_SUPPORTED;
+ drm_dbg_kms(&i915->drm,
"DRRS not supported (VBT input)\n");
break;
}
@@ -272,7 +272,7 @@ parse_panel_options(struct drm_i915_private *dev_priv,
/* Try to find integrated panel timing data */
static void
-parse_lfp_panel_dtd(struct drm_i915_private *dev_priv,
+parse_lfp_panel_dtd(struct drm_i915_private *i915,
const struct bdb_header *bdb)
{
const struct bdb_lvds_lfp_data *lvds_lfp_data;
@@ -280,7 +280,7 @@ parse_lfp_panel_dtd(struct drm_i915_private *dev_priv,
const struct lvds_dvo_timing *panel_dvo_timing;
const struct lvds_fp_timing *fp_timing;
struct drm_display_mode *panel_fixed_mode;
- int panel_type = dev_priv->vbt.panel_type;
+ int panel_type = i915->vbt.panel_type;
lvds_lfp_data = find_section(bdb, BDB_LVDS_LFP_DATA);
if (!lvds_lfp_data)
@@ -300,9 +300,9 @@ parse_lfp_panel_dtd(struct drm_i915_private *dev_priv,
fill_detail_timing_data(panel_fixed_mode, panel_dvo_timing);
- dev_priv->vbt.lfp_lvds_vbt_mode = panel_fixed_mode;
+ i915->vbt.lfp_lvds_vbt_mode = panel_fixed_mode;
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"Found panel mode in BIOS VBT legacy lfp table:\n");
drm_mode_debug_printmodeline(panel_fixed_mode);
@@ -313,16 +313,16 @@ parse_lfp_panel_dtd(struct drm_i915_private *dev_priv,
/* check the resolution, just to be sure */
if (fp_timing->x_res == panel_fixed_mode->hdisplay &&
fp_timing->y_res == panel_fixed_mode->vdisplay) {
- dev_priv->vbt.bios_lvds_val = fp_timing->lvds_reg_val;
- drm_dbg_kms(&dev_priv->drm,
+ i915->vbt.bios_lvds_val = fp_timing->lvds_reg_val;
+ drm_dbg_kms(&i915->drm,
"VBT initial LVDS value %x\n",
- dev_priv->vbt.bios_lvds_val);
+ i915->vbt.bios_lvds_val);
}
}
}
static void
-parse_generic_dtd(struct drm_i915_private *dev_priv,
+parse_generic_dtd(struct drm_i915_private *i915,
const struct bdb_header *bdb)
{
const struct bdb_generic_dtd *generic_dtd;
@@ -335,26 +335,26 @@ parse_generic_dtd(struct drm_i915_private *dev_priv,
return;
if (generic_dtd->gdtd_size < sizeof(struct generic_dtd_entry)) {
- drm_err(&dev_priv->drm, "GDTD size %u is too small.\n",
+ drm_err(&i915->drm, "GDTD size %u is too small.\n",
generic_dtd->gdtd_size);
return;
} else if (generic_dtd->gdtd_size !=
sizeof(struct generic_dtd_entry)) {
- drm_err(&dev_priv->drm, "Unexpected GDTD size %u\n",
+ drm_err(&i915->drm, "Unexpected GDTD size %u\n",
generic_dtd->gdtd_size);
/* DTD has unknown fields, but keep going */
}
num_dtd = (get_blocksize(generic_dtd) -
sizeof(struct bdb_generic_dtd)) / generic_dtd->gdtd_size;
- if (dev_priv->vbt.panel_type >= num_dtd) {
- drm_err(&dev_priv->drm,
+ if (i915->vbt.panel_type >= num_dtd) {
+ drm_err(&i915->drm,
"Panel type %d not found in table of %d DTD's\n",
- dev_priv->vbt.panel_type, num_dtd);
+ i915->vbt.panel_type, num_dtd);
return;
}
- dtd = &generic_dtd->dtd[dev_priv->vbt.panel_type];
+ dtd = &generic_dtd->dtd[i915->vbt.panel_type];
panel_fixed_mode = kzalloc(sizeof(*panel_fixed_mode), GFP_KERNEL);
if (!panel_fixed_mode)
@@ -393,15 +393,15 @@ parse_generic_dtd(struct drm_i915_private *dev_priv,
else
panel_fixed_mode->flags |= DRM_MODE_FLAG_NVSYNC;
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"Found panel mode in BIOS VBT generic dtd table:\n");
drm_mode_debug_printmodeline(panel_fixed_mode);
- dev_priv->vbt.lfp_lvds_vbt_mode = panel_fixed_mode;
+ i915->vbt.lfp_lvds_vbt_mode = panel_fixed_mode;
}
static void
-parse_panel_dtd(struct drm_i915_private *dev_priv,
+parse_panel_dtd(struct drm_i915_private *i915,
const struct bdb_header *bdb)
{
/*
@@ -413,18 +413,18 @@ parse_panel_dtd(struct drm_i915_private *dev_priv,
* back to trying the old LFP block if that fails.
*/
if (bdb->version >= 229)
- parse_generic_dtd(dev_priv, bdb);
- if (!dev_priv->vbt.lfp_lvds_vbt_mode)
- parse_lfp_panel_dtd(dev_priv, bdb);
+ parse_generic_dtd(i915, bdb);
+ if (!i915->vbt.lfp_lvds_vbt_mode)
+ parse_lfp_panel_dtd(i915, bdb);
}
static void
-parse_lfp_backlight(struct drm_i915_private *dev_priv,
+parse_lfp_backlight(struct drm_i915_private *i915,
const struct bdb_header *bdb)
{
const struct bdb_lfp_backlight_data *backlight_data;
const struct lfp_backlight_data_entry *entry;
- int panel_type = dev_priv->vbt.panel_type;
+ int panel_type = i915->vbt.panel_type;
u16 level;
backlight_data = find_section(bdb, BDB_LVDS_BACKLIGHT);
@@ -432,7 +432,7 @@ parse_lfp_backlight(struct drm_i915_private *dev_priv,
return;
if (backlight_data->entry_size != sizeof(backlight_data->data[0])) {
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"Unsupported backlight data entry size %u\n",
backlight_data->entry_size);
return;
@@ -440,26 +440,26 @@ parse_lfp_backlight(struct drm_i915_private *dev_priv,
entry = &backlight_data->data[panel_type];
- dev_priv->vbt.backlight.present = entry->type == BDB_BACKLIGHT_TYPE_PWM;
- if (!dev_priv->vbt.backlight.present) {
- drm_dbg_kms(&dev_priv->drm,
+ i915->vbt.backlight.present = entry->type == BDB_BACKLIGHT_TYPE_PWM;
+ if (!i915->vbt.backlight.present) {
+ drm_dbg_kms(&i915->drm,
"PWM backlight not present in VBT (type %u)\n",
entry->type);
return;
}
- dev_priv->vbt.backlight.type = INTEL_BACKLIGHT_DISPLAY_DDI;
+ i915->vbt.backlight.type = INTEL_BACKLIGHT_DISPLAY_DDI;
if (bdb->version >= 191 &&
get_blocksize(backlight_data) >= sizeof(*backlight_data)) {
const struct lfp_backlight_control_method *method;
method = &backlight_data->backlight_control[panel_type];
- dev_priv->vbt.backlight.type = method->type;
- dev_priv->vbt.backlight.controller = method->controller;
+ i915->vbt.backlight.type = method->type;
+ i915->vbt.backlight.controller = method->controller;
}
- dev_priv->vbt.backlight.pwm_freq_hz = entry->pwm_freq_hz;
- dev_priv->vbt.backlight.active_low_pwm = entry->active_low_pwm;
+ i915->vbt.backlight.pwm_freq_hz = entry->pwm_freq_hz;
+ i915->vbt.backlight.active_low_pwm = entry->active_low_pwm;
if (bdb->version >= 234) {
u16 min_level;
@@ -477,37 +477,37 @@ parse_lfp_backlight(struct drm_i915_private *dev_priv,
min_level = min_level / 255;
if (min_level > 255) {
- drm_warn(&dev_priv->drm, "Brightness min level > 255\n");
+ drm_warn(&i915->drm, "Brightness min level > 255\n");
level = 255;
}
- dev_priv->vbt.backlight.min_brightness = min_level;
+ i915->vbt.backlight.min_brightness = min_level;
} else {
level = backlight_data->level[panel_type];
- dev_priv->vbt.backlight.min_brightness = entry->min_brightness;
+ i915->vbt.backlight.min_brightness = entry->min_brightness;
}
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"VBT backlight PWM modulation frequency %u Hz, "
"active %s, min brightness %u, level %u, controller %u\n",
- dev_priv->vbt.backlight.pwm_freq_hz,
- dev_priv->vbt.backlight.active_low_pwm ? "low" : "high",
- dev_priv->vbt.backlight.min_brightness,
+ i915->vbt.backlight.pwm_freq_hz,
+ i915->vbt.backlight.active_low_pwm ? "low" : "high",
+ i915->vbt.backlight.min_brightness,
level,
- dev_priv->vbt.backlight.controller);
+ i915->vbt.backlight.controller);
}
/* Try to find sdvo panel data */
static void
-parse_sdvo_panel_data(struct drm_i915_private *dev_priv,
+parse_sdvo_panel_data(struct drm_i915_private *i915,
const struct bdb_header *bdb)
{
const struct bdb_sdvo_panel_dtds *dtds;
struct drm_display_mode *panel_fixed_mode;
int index;
- index = dev_priv->params.vbt_sdvo_panel_type;
+ index = i915->params.vbt_sdvo_panel_type;
if (index == -2) {
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"Ignore SDVO panel mode from BIOS VBT tables.\n");
return;
}
@@ -532,17 +532,17 @@ parse_sdvo_panel_data(struct drm_i915_private *dev_priv,
fill_detail_timing_data(panel_fixed_mode, &dtds->dtds[index]);
- dev_priv->vbt.sdvo_lvds_vbt_mode = panel_fixed_mode;
+ i915->vbt.sdvo_lvds_vbt_mode = panel_fixed_mode;
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"Found SDVO panel mode in BIOS VBT tables:\n");
drm_mode_debug_printmodeline(panel_fixed_mode);
}
-static int intel_bios_ssc_frequency(struct drm_i915_private *dev_priv,
+static int intel_bios_ssc_frequency(struct drm_i915_private *i915,
bool alternate)
{
- switch (INTEL_GEN(dev_priv)) {
+ switch (INTEL_GEN(i915)) {
case 2:
return alternate ? 66667 : 48000;
case 3:
@@ -554,7 +554,7 @@ static int intel_bios_ssc_frequency(struct drm_i915_private *dev_priv,
}
static void
-parse_general_features(struct drm_i915_private *dev_priv,
+parse_general_features(struct drm_i915_private *i915,
const struct bdb_header *bdb)
{
const struct bdb_general_features *general;
@@ -563,31 +563,31 @@ parse_general_features(struct drm_i915_private *dev_priv,
if (!general)
return;
- dev_priv->vbt.int_tv_support = general->int_tv_support;
+ i915->vbt.int_tv_support = general->int_tv_support;
/* int_crt_support can't be trusted on earlier platforms */
if (bdb->version >= 155 &&
- (HAS_DDI(dev_priv) || IS_VALLEYVIEW(dev_priv)))
- dev_priv->vbt.int_crt_support = general->int_crt_support;
- dev_priv->vbt.lvds_use_ssc = general->enable_ssc;
- dev_priv->vbt.lvds_ssc_freq =
- intel_bios_ssc_frequency(dev_priv, general->ssc_freq);
- dev_priv->vbt.display_clock_mode = general->display_clock_mode;
- dev_priv->vbt.fdi_rx_polarity_inverted = general->fdi_rx_polarity_inverted;
+ (HAS_DDI(i915) || IS_VALLEYVIEW(i915)))
+ i915->vbt.int_crt_support = general->int_crt_support;
+ i915->vbt.lvds_use_ssc = general->enable_ssc;
+ i915->vbt.lvds_ssc_freq =
+ intel_bios_ssc_frequency(i915, general->ssc_freq);
+ i915->vbt.display_clock_mode = general->display_clock_mode;
+ i915->vbt.fdi_rx_polarity_inverted = general->fdi_rx_polarity_inverted;
if (bdb->version >= 181) {
- dev_priv->vbt.orientation = general->rotate_180 ?
+ i915->vbt.orientation = general->rotate_180 ?
DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP :
DRM_MODE_PANEL_ORIENTATION_NORMAL;
} else {
- dev_priv->vbt.orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN;
+ i915->vbt.orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN;
}
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"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",
- dev_priv->vbt.int_tv_support,
- dev_priv->vbt.int_crt_support,
- dev_priv->vbt.lvds_use_ssc,
- dev_priv->vbt.lvds_ssc_freq,
- dev_priv->vbt.display_clock_mode,
- dev_priv->vbt.fdi_rx_polarity_inverted);
+ i915->vbt.int_tv_support,
+ i915->vbt.int_crt_support,
+ i915->vbt.lvds_use_ssc,
+ i915->vbt.lvds_ssc_freq,
+ i915->vbt.display_clock_mode,
+ i915->vbt.fdi_rx_polarity_inverted);
}
static const struct child_device_config *
@@ -597,7 +597,7 @@ child_device_ptr(const struct bdb_general_definitions *defs, int i)
}
static void
-parse_sdvo_device_mapping(struct drm_i915_private *dev_priv, u8 bdb_version)
+parse_sdvo_device_mapping(struct drm_i915_private *i915, u8 bdb_version)
{
struct sdvo_device_mapping *mapping;
const struct display_device_data *devdata;
@@ -608,12 +608,12 @@ parse_sdvo_device_mapping(struct drm_i915_private *dev_priv, u8 bdb_version)
* Only parse SDVO mappings on gens that could have SDVO. This isn't
* accurate and doesn't have to be, as long as it's not too strict.
*/
- if (!IS_GEN_RANGE(dev_priv, 3, 7)) {
- drm_dbg_kms(&dev_priv->drm, "Skipping SDVO device mapping\n");
+ if (!IS_GEN_RANGE(i915, 3, 7)) {
+ drm_dbg_kms(&i915->drm, "Skipping SDVO device mapping\n");
return;
}
- list_for_each_entry(devdata, &dev_priv->vbt.display_devices, node) {
+ list_for_each_entry(devdata, &i915->vbt.display_devices, node) {
child = &devdata->child;
if (child->slave_addr != SLAVE_ADDR1 &&
@@ -627,17 +627,17 @@ parse_sdvo_device_mapping(struct drm_i915_private *dev_priv, u8 bdb_version)
if (child->dvo_port != DEVICE_PORT_DVOB &&
child->dvo_port != DEVICE_PORT_DVOC) {
/* skip the incorrect SDVO port */
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"Incorrect SDVO port. Skip it\n");
continue;
}
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"the SDVO device with slave addr %2x is found on"
" %s port\n",
child->slave_addr,
(child->dvo_port == DEVICE_PORT_DVOB) ?
"SDVOB" : "SDVOC");
- mapping = &dev_priv->vbt.sdvo_mappings[child->dvo_port - 1];
+ mapping = &i915->vbt.sdvo_mappings[child->dvo_port - 1];
if (!mapping->initialized) {
mapping->dvo_port = child->dvo_port;
mapping->slave_addr = child->slave_addr;
@@ -645,20 +645,20 @@ parse_sdvo_device_mapping(struct drm_i915_private *dev_priv, u8 bdb_version)
mapping->ddc_pin = child->ddc_pin;
mapping->i2c_pin = child->i2c_pin;
mapping->initialized = 1;
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"SDVO device: dvo=%x, addr=%x, wiring=%d, ddc_pin=%d, i2c_pin=%d\n",
mapping->dvo_port, mapping->slave_addr,
mapping->dvo_wiring, mapping->ddc_pin,
mapping->i2c_pin);
} else {
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"Maybe one SDVO port is shared by "
"two SDVO device.\n");
}
if (child->slave2_addr) {
/* Maybe this is a SDVO device with multiple inputs */
/* And the mapping info is not added */
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"there exists the slave2_addr. Maybe this"
" is a SDVO device with multiple inputs.\n");
}
@@ -667,13 +667,13 @@ parse_sdvo_device_mapping(struct drm_i915_private *dev_priv, u8 bdb_version)
if (!count) {
/* No SDVO device info is found */
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"No SDVO device info is found in VBT\n");
}
}
static void
-parse_driver_features(struct drm_i915_private *dev_priv,
+parse_driver_features(struct drm_i915_private *i915,
const struct bdb_header *bdb)
{
const struct bdb_driver_features *driver;
@@ -682,14 +682,14 @@ parse_driver_features(struct drm_i915_private *dev_priv,
if (!driver)
return;
- if (INTEL_GEN(dev_priv) >= 5) {
+ if (INTEL_GEN(i915) >= 5) {
/*
* Note that we consider BDB_DRIVER_FEATURE_INT_SDVO_LVDS
* to mean "eDP". The VBT spec doesn't agree with that
* interpretation, but real world VBTs seem to.
*/
if (driver->lvds_config != BDB_DRIVER_FEATURE_INT_LVDS)
- dev_priv->vbt.int_lvds_support = 0;
+ i915->vbt.int_lvds_support = 0;
} else {
/*
* FIXME it's not clear which BDB version has the LVDS config
@@ -705,11 +705,11 @@ parse_driver_features(struct drm_i915_private *dev_priv,
if (bdb->version >= 134 &&
driver->lvds_config != BDB_DRIVER_FEATURE_INT_LVDS &&
driver->lvds_config != BDB_DRIVER_FEATURE_INT_SDVO_LVDS)
- dev_priv->vbt.int_lvds_support = 0;
+ i915->vbt.int_lvds_support = 0;
}
if (bdb->version < 228) {
- drm_dbg_kms(&dev_priv->drm, "DRRS State Enabled:%d\n",
+ drm_dbg_kms(&i915->drm, "DRRS State Enabled:%d\n",
driver->drrs_enabled);
/*
* If DRRS is not supported, drrs_type has to be set to 0.
@@ -718,18 +718,18 @@ parse_driver_features(struct drm_i915_private *dev_priv,
* driver->drrs_enabled=false
*/
if (!driver->drrs_enabled)
- dev_priv->vbt.drrs_type = DRRS_NOT_SUPPORTED;
+ i915->vbt.drrs_type = DRRS_NOT_SUPPORTED;
- dev_priv->vbt.psr.enable = driver->psr_enabled;
+ i915->vbt.psr.enable = driver->psr_enabled;
}
}
static void
-parse_power_conservation_features(struct drm_i915_private *dev_priv,
+parse_power_conservation_features(struct drm_i915_private *i915,
const struct bdb_header *bdb)
{
const struct bdb_lfp_power *power;
- u8 panel_type = dev_priv->vbt.panel_type;
+ u8 panel_type = i915->vbt.panel_type;
if (bdb->version < 228)
return;
@@ -738,7 +738,7 @@ parse_power_conservation_features(struct drm_i915_private *dev_priv,
if (!power)
return;
- dev_priv->vbt.psr.enable = power->psr & BIT(panel_type);
+ i915->vbt.psr.enable = power->psr & BIT(panel_type);
/*
* If DRRS is not supported, drrs_type has to be set to 0.
@@ -747,19 +747,19 @@ parse_power_conservation_features(struct drm_i915_private *dev_priv,
* power->drrs & BIT(panel_type)=false
*/
if (!(power->drrs & BIT(panel_type)))
- dev_priv->vbt.drrs_type = DRRS_NOT_SUPPORTED;
+ i915->vbt.drrs_type = DRRS_NOT_SUPPORTED;
if (bdb->version >= 232)
- dev_priv->vbt.edp.hobl = power->hobl & BIT(panel_type);
+ i915->vbt.edp.hobl = power->hobl & BIT(panel_type);
}
static void
-parse_edp(struct drm_i915_private *dev_priv, const struct bdb_header *bdb)
+parse_edp(struct drm_i915_private *i915, const struct bdb_header *bdb)
{
const struct bdb_edp *edp;
const struct edp_power_seq *edp_pps;
const struct edp_fast_link_params *edp_link_params;
- int panel_type = dev_priv->vbt.panel_type;
+ int panel_type = i915->vbt.panel_type;
edp = find_section(bdb, BDB_EDP);
if (!edp)
@@ -767,13 +767,13 @@ parse_edp(struct drm_i915_private *dev_priv, const struct bdb_header *bdb)
switch ((edp->color_depth >> (panel_type * 2)) & 3) {
case EDP_18BPP:
- dev_priv->vbt.edp.bpp = 18;
+ i915->vbt.edp.bpp = 18;
break;
case EDP_24BPP:
- dev_priv->vbt.edp.bpp = 24;
+ i915->vbt.edp.bpp = 24;
break;
case EDP_30BPP:
- dev_priv->vbt.edp.bpp = 30;
+ i915->vbt.edp.bpp = 30;
break;
}
@@ -781,17 +781,17 @@ parse_edp(struct drm_i915_private *dev_priv, const struct bdb_header *bdb)
edp_pps = &edp->power_seqs[panel_type];
edp_link_params = &edp->fast_link_params[panel_type];
- dev_priv->vbt.edp.pps = *edp_pps;
+ i915->vbt.edp.pps = *edp_pps;
switch (edp_link_params->rate) {
case EDP_RATE_1_62:
- dev_priv->vbt.edp.rate = DP_LINK_BW_1_62;
+ i915->vbt.edp.rate = DP_LINK_BW_1_62;
break;
case EDP_RATE_2_7:
- dev_priv->vbt.edp.rate = DP_LINK_BW_2_7;
+ i915->vbt.edp.rate = DP_LINK_BW_2_7;
break;
default:
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"VBT has unknown eDP link rate value %u\n",
edp_link_params->rate);
break;
@@ -799,16 +799,16 @@ parse_edp(struct drm_i915_private *dev_priv, const struct bdb_header *bdb)
switch (edp_link_params->lanes) {
case EDP_LANE_1:
- dev_priv->vbt.edp.lanes = 1;
+ i915->vbt.edp.lanes = 1;
break;
case EDP_LANE_2:
- dev_priv->vbt.edp.lanes = 2;
+ i915->vbt.edp.lanes = 2;
break;
case EDP_LANE_4:
- dev_priv->vbt.edp.lanes = 4;
+ i915->vbt.edp.lanes = 4;
break;
default:
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"VBT has unknown eDP lane count value %u\n",
edp_link_params->lanes);
break;
@@ -816,19 +816,19 @@ parse_edp(struct drm_i915_private *dev_priv, const struct bdb_header *bdb)
switch (edp_link_params->preemphasis) {
case EDP_PREEMPHASIS_NONE:
- dev_priv->vbt.edp.preemphasis = DP_TRAIN_PRE_EMPH_LEVEL_0;
+ i915->vbt.edp.preemphasis = DP_TRAIN_PRE_EMPH_LEVEL_0;
break;
case EDP_PREEMPHASIS_3_5dB:
- dev_priv->vbt.edp.preemphasis = DP_TRAIN_PRE_EMPH_LEVEL_1;
+ i915->vbt.edp.preemphasis = DP_TRAIN_PRE_EMPH_LEVEL_1;
break;
case EDP_PREEMPHASIS_6dB:
- dev_priv->vbt.edp.preemphasis = DP_TRAIN_PRE_EMPH_LEVEL_2;
+ i915->vbt.edp.preemphasis = DP_TRAIN_PRE_EMPH_LEVEL_2;
break;
case EDP_PREEMPHASIS_9_5dB:
- dev_priv->vbt.edp.preemphasis = DP_TRAIN_PRE_EMPH_LEVEL_3;
+ i915->vbt.edp.preemphasis = DP_TRAIN_PRE_EMPH_LEVEL_3;
break;
default:
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"VBT has unknown eDP pre-emphasis value %u\n",
edp_link_params->preemphasis);
break;
@@ -836,19 +836,19 @@ parse_edp(struct drm_i915_private *dev_priv, const struct bdb_header *bdb)
switch (edp_link_params->vswing) {
case EDP_VSWING_0_4V:
- dev_priv->vbt.edp.vswing = DP_TRAIN_VOLTAGE_SWING_LEVEL_0;
+ i915->vbt.edp.vswing = DP_TRAIN_VOLTAGE_SWING_LEVEL_0;
break;
case EDP_VSWING_0_6V:
- dev_priv->vbt.edp.vswing = DP_TRAIN_VOLTAGE_SWING_LEVEL_1;
+ i915->vbt.edp.vswing = DP_TRAIN_VOLTAGE_SWING_LEVEL_1;
break;
case EDP_VSWING_0_8V:
- dev_priv->vbt.edp.vswing = DP_TRAIN_VOLTAGE_SWING_LEVEL_2;
+ i915->vbt.edp.vswing = DP_TRAIN_VOLTAGE_SWING_LEVEL_2;
break;
case EDP_VSWING_1_2V:
- dev_priv->vbt.edp.vswing = DP_TRAIN_VOLTAGE_SWING_LEVEL_3;
+ i915->vbt.edp.vswing = DP_TRAIN_VOLTAGE_SWING_LEVEL_3;
break;
default:
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"VBT has unknown eDP voltage swing value %u\n",
edp_link_params->vswing);
break;
@@ -858,53 +858,53 @@ parse_edp(struct drm_i915_private *dev_priv, const struct bdb_header *bdb)
u8 vswing;
/* Don't read from VBT if module parameter has valid value*/
- if (dev_priv->params.edp_vswing) {
- dev_priv->vbt.edp.low_vswing =
- dev_priv->params.edp_vswing == 1;
+ if (i915->params.edp_vswing) {
+ i915->vbt.edp.low_vswing =
+ i915->params.edp_vswing == 1;
} else {
vswing = (edp->edp_vswing_preemph >> (panel_type * 4)) & 0xF;
- dev_priv->vbt.edp.low_vswing = vswing == 0;
+ i915->vbt.edp.low_vswing = vswing == 0;
}
}
}
static void
-parse_psr(struct drm_i915_private *dev_priv, const struct bdb_header *bdb)
+parse_psr(struct drm_i915_private *i915, const struct bdb_header *bdb)
{
const struct bdb_psr *psr;
const struct psr_table *psr_table;
- int panel_type = dev_priv->vbt.panel_type;
+ int panel_type = i915->vbt.panel_type;
psr = find_section(bdb, BDB_PSR);
if (!psr) {
- drm_dbg_kms(&dev_priv->drm, "No PSR BDB found.\n");
+ drm_dbg_kms(&i915->drm, "No PSR BDB found.\n");
return;
}
psr_table = &psr->psr_table[panel_type];
- dev_priv->vbt.psr.full_link = psr_table->full_link;
- dev_priv->vbt.psr.require_aux_wakeup = psr_table->require_aux_to_wakeup;
+ i915->vbt.psr.full_link = psr_table->full_link;
+ i915->vbt.psr.require_aux_wakeup = psr_table->require_aux_to_wakeup;
/* Allowed VBT values goes from 0 to 15 */
- dev_priv->vbt.psr.idle_frames = psr_table->idle_frames < 0 ? 0 :
+ i915->vbt.psr.idle_frames = psr_table->idle_frames < 0 ? 0 :
psr_table->idle_frames > 15 ? 15 : psr_table->idle_frames;
switch (psr_table->lines_to_wait) {
case 0:
- dev_priv->vbt.psr.lines_to_wait = PSR_0_LINES_TO_WAIT;
+ i915->vbt.psr.lines_to_wait = PSR_0_LINES_TO_WAIT;
break;
case 1:
- dev_priv->vbt.psr.lines_to_wait = PSR_1_LINE_TO_WAIT;
+ i915->vbt.psr.lines_to_wait = PSR_1_LINE_TO_WAIT;
break;
case 2:
- dev_priv->vbt.psr.lines_to_wait = PSR_4_LINES_TO_WAIT;
+ i915->vbt.psr.lines_to_wait = PSR_4_LINES_TO_WAIT;
break;
case 3:
- dev_priv->vbt.psr.lines_to_wait = PSR_8_LINES_TO_WAIT;
+ i915->vbt.psr.lines_to_wait = PSR_8_LINES_TO_WAIT;
break;
default:
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"VBT has unknown PSR lines to wait %u\n",
psr_table->lines_to_wait);
break;
@@ -915,50 +915,50 @@ parse_psr(struct drm_i915_private *dev_priv, const struct bdb_header *bdb)
* Old decimal value is wake up time in multiples of 100 us.
*/
if (bdb->version >= 205 &&
- (IS_GEN9_BC(dev_priv) || IS_GEMINILAKE(dev_priv) ||
- INTEL_GEN(dev_priv) >= 10)) {
+ (IS_GEN9_BC(i915) || IS_GEMINILAKE(i915) ||
+ INTEL_GEN(i915) >= 10)) {
switch (psr_table->tp1_wakeup_time) {
case 0:
- dev_priv->vbt.psr.tp1_wakeup_time_us = 500;
+ i915->vbt.psr.tp1_wakeup_time_us = 500;
break;
case 1:
- dev_priv->vbt.psr.tp1_wakeup_time_us = 100;
+ i915->vbt.psr.tp1_wakeup_time_us = 100;
break;
case 3:
- dev_priv->vbt.psr.tp1_wakeup_time_us = 0;
+ i915->vbt.psr.tp1_wakeup_time_us = 0;
break;
default:
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"VBT tp1 wakeup time value %d is outside range[0-3], defaulting to max value 2500us\n",
psr_table->tp1_wakeup_time);
fallthrough;
case 2:
- dev_priv->vbt.psr.tp1_wakeup_time_us = 2500;
+ i915->vbt.psr.tp1_wakeup_time_us = 2500;
break;
}
switch (psr_table->tp2_tp3_wakeup_time) {
case 0:
- dev_priv->vbt.psr.tp2_tp3_wakeup_time_us = 500;
+ i915->vbt.psr.tp2_tp3_wakeup_time_us = 500;
break;
case 1:
- dev_priv->vbt.psr.tp2_tp3_wakeup_time_us = 100;
+ i915->vbt.psr.tp2_tp3_wakeup_time_us = 100;
break;
case 3:
- dev_priv->vbt.psr.tp2_tp3_wakeup_time_us = 0;
+ i915->vbt.psr.tp2_tp3_wakeup_time_us = 0;
break;
default:
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"VBT tp2_tp3 wakeup time value %d is outside range[0-3], defaulting to max value 2500us\n",
psr_table->tp2_tp3_wakeup_time);
fallthrough;
case 2:
- dev_priv->vbt.psr.tp2_tp3_wakeup_time_us = 2500;
+ i915->vbt.psr.tp2_tp3_wakeup_time_us = 2500;
break;
}
} else {
- dev_priv->vbt.psr.tp1_wakeup_time_us = psr_table->tp1_wakeup_time * 100;
- dev_priv->vbt.psr.tp2_tp3_wakeup_time_us = psr_table->tp2_tp3_wakeup_time * 100;
+ i915->vbt.psr.tp1_wakeup_time_us = psr_table->tp1_wakeup_time * 100;
+ i915->vbt.psr.tp2_tp3_wakeup_time_us = psr_table->tp2_tp3_wakeup_time * 100;
}
if (bdb->version >= 226) {
@@ -980,74 +980,74 @@ parse_psr(struct drm_i915_private *dev_priv, const struct bdb_header *bdb)
wakeup_time = 2500;
break;
}
- dev_priv->vbt.psr.psr2_tp2_tp3_wakeup_time_us = wakeup_time;
+ i915->vbt.psr.psr2_tp2_tp3_wakeup_time_us = wakeup_time;
} else {
/* Reusing PSR1 wakeup time for PSR2 in older VBTs */
- dev_priv->vbt.psr.psr2_tp2_tp3_wakeup_time_us = dev_priv->vbt.psr.tp2_tp3_wakeup_time_us;
+ i915->vbt.psr.psr2_tp2_tp3_wakeup_time_us = i915->vbt.psr.tp2_tp3_wakeup_time_us;
}
}
-static void parse_dsi_backlight_ports(struct drm_i915_private *dev_priv,
+static void parse_dsi_backlight_ports(struct drm_i915_private *i915,
u16 version, enum port port)
{
- if (!dev_priv->vbt.dsi.config->dual_link || version < 197) {
- dev_priv->vbt.dsi.bl_ports = BIT(port);
- if (dev_priv->vbt.dsi.config->cabc_supported)
- dev_priv->vbt.dsi.cabc_ports = BIT(port);
+ if (!i915->vbt.dsi.config->dual_link || version < 197) {
+ i915->vbt.dsi.bl_ports = BIT(port);
+ if (i915->vbt.dsi.config->cabc_supported)
+ i915->vbt.dsi.cabc_ports = BIT(port);
return;
}
- switch (dev_priv->vbt.dsi.config->dl_dcs_backlight_ports) {
+ switch (i915->vbt.dsi.config->dl_dcs_backlight_ports) {
case DL_DCS_PORT_A:
- dev_priv->vbt.dsi.bl_ports = BIT(PORT_A);
+ i915->vbt.dsi.bl_ports = BIT(PORT_A);
break;
case DL_DCS_PORT_C:
- dev_priv->vbt.dsi.bl_ports = BIT(PORT_C);
+ i915->vbt.dsi.bl_ports = BIT(PORT_C);
break;
default:
case DL_DCS_PORT_A_AND_C:
- dev_priv->vbt.dsi.bl_ports = BIT(PORT_A) | BIT(PORT_C);
+ i915->vbt.dsi.bl_ports = BIT(PORT_A) | BIT(PORT_C);
break;
}
- if (!dev_priv->vbt.dsi.config->cabc_supported)
+ if (!i915->vbt.dsi.config->cabc_supported)
return;
- switch (dev_priv->vbt.dsi.config->dl_dcs_cabc_ports) {
+ switch (i915->vbt.dsi.config->dl_dcs_cabc_ports) {
case DL_DCS_PORT_A:
- dev_priv->vbt.dsi.cabc_ports = BIT(PORT_A);
+ i915->vbt.dsi.cabc_ports = BIT(PORT_A);
break;
case DL_DCS_PORT_C:
- dev_priv->vbt.dsi.cabc_ports = BIT(PORT_C);
+ i915->vbt.dsi.cabc_ports = BIT(PORT_C);
break;
default:
case DL_DCS_PORT_A_AND_C:
- dev_priv->vbt.dsi.cabc_ports =
+ i915->vbt.dsi.cabc_ports =
BIT(PORT_A) | BIT(PORT_C);
break;
}
}
static void
-parse_mipi_config(struct drm_i915_private *dev_priv,
+parse_mipi_config(struct drm_i915_private *i915,
const struct bdb_header *bdb)
{
const struct bdb_mipi_config *start;
const struct mipi_config *config;
const struct mipi_pps_data *pps;
- int panel_type = dev_priv->vbt.panel_type;
+ int panel_type = i915->vbt.panel_type;
enum port port;
/* parse MIPI blocks only if LFP type is MIPI */
- if (!intel_bios_is_dsi_present(dev_priv, &port))
+ if (!intel_bios_is_dsi_present(i915, &port))
return;
/* Initialize this to undefined indicating no generic MIPI support */
- dev_priv->vbt.dsi.panel_id = MIPI_DSI_UNDEFINED_PANEL_ID;
+ i915->vbt.dsi.panel_id = MIPI_DSI_UNDEFINED_PANEL_ID;
/* Block #40 is already parsed and panel_fixed_mode is
- * stored in dev_priv->lfp_lvds_vbt_mode
+ * stored in i915->lfp_lvds_vbt_mode
* resuse this when needed
*/
@@ -1056,11 +1056,11 @@ parse_mipi_config(struct drm_i915_private *dev_priv,
*/
start = find_section(bdb, BDB_MIPI_CONFIG);
if (!start) {
- drm_dbg_kms(&dev_priv->drm, "No MIPI config BDB found");
+ drm_dbg_kms(&i915->drm, "No MIPI config BDB found");
return;
}
- drm_dbg(&dev_priv->drm, "Found MIPI Config block, panel index = %d\n",
+ drm_dbg(&i915->drm, "Found MIPI Config block, panel index = %d\n",
panel_type);
/*
@@ -1071,17 +1071,17 @@ parse_mipi_config(struct drm_i915_private *dev_priv,
pps = &start->pps[panel_type];
/* store as of now full data. Trim when we realise all is not needed */
- dev_priv->vbt.dsi.config = kmemdup(config, sizeof(struct mipi_config), GFP_KERNEL);
- if (!dev_priv->vbt.dsi.config)
+ i915->vbt.dsi.config = kmemdup(config, sizeof(struct mipi_config), GFP_KERNEL);
+ if (!i915->vbt.dsi.config)
return;
- dev_priv->vbt.dsi.pps = kmemdup(pps, sizeof(struct mipi_pps_data), GFP_KERNEL);
- if (!dev_priv->vbt.dsi.pps) {
- kfree(dev_priv->vbt.dsi.config);
+ i915->vbt.dsi.pps = kmemdup(pps, sizeof(struct mipi_pps_data), GFP_KERNEL);
+ if (!i915->vbt.dsi.pps) {
+ kfree(i915->vbt.dsi.config);
return;
}
- parse_dsi_backlight_ports(dev_priv, bdb->version, port);
+ parse_dsi_backlight_ports(i915, bdb->version, port);
/* FIXME is the 90 vs. 270 correct? */
switch (config->rotation) {
@@ -1090,25 +1090,25 @@ parse_mipi_config(struct drm_i915_private *dev_priv,
* Most (all?) VBTs claim 0 degrees despite having
* an upside down panel, thus we do not trust this.
*/
- dev_priv->vbt.dsi.orientation =
+ i915->vbt.dsi.orientation =
DRM_MODE_PANEL_ORIENTATION_UNKNOWN;
break;
case ENABLE_ROTATION_90:
- dev_priv->vbt.dsi.orientation =
+ i915->vbt.dsi.orientation =
DRM_MODE_PANEL_ORIENTATION_RIGHT_UP;
break;
case ENABLE_ROTATION_180:
- dev_priv->vbt.dsi.orientation =
+ i915->vbt.dsi.orientation =
DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP;
break;
case ENABLE_ROTATION_270:
- dev_priv->vbt.dsi.orientation =
+ i915->vbt.dsi.orientation =
DRM_MODE_PANEL_ORIENTATION_LEFT_UP;
break;
}
/* We have mandatory mipi config blocks. Initialize as generic panel */
- dev_priv->vbt.dsi.panel_id = MIPI_DSI_GENERIC_PANEL_ID;
+ i915->vbt.dsi.panel_id = MIPI_DSI_GENERIC_PANEL_ID;
}
/* Find the sequence block and size for the given panel. */
@@ -1271,13 +1271,13 @@ static int goto_next_sequence_v3(const u8 *data, int index, int total)
* Get len of pre-fixed deassert fragment from a v1 init OTP sequence,
* skip all delay + gpio operands and stop at the first DSI packet op.
*/
-static int get_init_otp_deassert_fragment_len(struct drm_i915_private *dev_priv)
+static int get_init_otp_deassert_fragment_len(struct drm_i915_private *i915)
{
- const u8 *data = dev_priv->vbt.dsi.sequence[MIPI_SEQ_INIT_OTP];
+ const u8 *data = i915->vbt.dsi.sequence[MIPI_SEQ_INIT_OTP];
int index, len;
- if (drm_WARN_ON(&dev_priv->drm,
- !data || dev_priv->vbt.dsi.seq_version != 1))
+ if (drm_WARN_ON(&i915->drm,
+ !data || i915->vbt.dsi.seq_version != 1))
return 0;
/* index = 1 to skip sequence byte */
@@ -1305,55 +1305,55 @@ static int get_init_otp_deassert_fragment_len(struct drm_i915_private *dev_priv)
* these devices we split the init OTP sequence into a deassert sequence and
* the actual init OTP part.
*/
-static void fixup_mipi_sequences(struct drm_i915_private *dev_priv)
+static void fixup_mipi_sequences(struct drm_i915_private *i915)
{
u8 *init_otp;
int len;
/* Limit this to VLV for now. */
- if (!IS_VALLEYVIEW(dev_priv))
+ if (!IS_VALLEYVIEW(i915))
return;
/* Limit this to v1 vid-mode sequences */
- if (dev_priv->vbt.dsi.config->is_cmd_mode ||
- dev_priv->vbt.dsi.seq_version != 1)
+ if (i915->vbt.dsi.config->is_cmd_mode ||
+ i915->vbt.dsi.seq_version != 1)
return;
/* Only do this if there are otp and assert seqs and no deassert seq */
- if (!dev_priv->vbt.dsi.sequence[MIPI_SEQ_INIT_OTP] ||
- !dev_priv->vbt.dsi.sequence[MIPI_SEQ_ASSERT_RESET] ||
- dev_priv->vbt.dsi.sequence[MIPI_SEQ_DEASSERT_RESET])
+ if (!i915->vbt.dsi.sequence[MIPI_SEQ_INIT_OTP] ||
+ !i915->vbt.dsi.sequence[MIPI_SEQ_ASSERT_RESET] ||
+ i915->vbt.dsi.sequence[MIPI_SEQ_DEASSERT_RESET])
return;
/* The deassert-sequence ends at the first DSI packet */
- len = get_init_otp_deassert_fragment_len(dev_priv);
+ len = get_init_otp_deassert_fragment_len(i915);
if (!len)
return;
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"Using init OTP fragment to deassert reset\n");
/* Copy the fragment, update seq byte and terminate it */
- init_otp = (u8 *)dev_priv->vbt.dsi.sequence[MIPI_SEQ_INIT_OTP];
- dev_priv->vbt.dsi.deassert_seq = kmemdup(init_otp, len + 1, GFP_KERNEL);
- if (!dev_priv->vbt.dsi.deassert_seq)
+ init_otp = (u8 *)i915->vbt.dsi.sequence[MIPI_SEQ_INIT_OTP];
+ i915->vbt.dsi.deassert_seq = kmemdup(init_otp, len + 1, GFP_KERNEL);
+ if (!i915->vbt.dsi.deassert_seq)
return;
- dev_priv->vbt.dsi.deassert_seq[0] = MIPI_SEQ_DEASSERT_RESET;
- dev_priv->vbt.dsi.deassert_seq[len] = MIPI_SEQ_ELEM_END;
+ i915->vbt.dsi.deassert_seq[0] = MIPI_SEQ_DEASSERT_RESET;
+ i915->vbt.dsi.deassert_seq[len] = MIPI_SEQ_ELEM_END;
/* Use the copy for deassert */
- dev_priv->vbt.dsi.sequence[MIPI_SEQ_DEASSERT_RESET] =
- dev_priv->vbt.dsi.deassert_seq;
+ i915->vbt.dsi.sequence[MIPI_SEQ_DEASSERT_RESET] =
+ i915->vbt.dsi.deassert_seq;
/* Replace the last byte of the fragment with init OTP seq byte */
init_otp[len - 1] = MIPI_SEQ_INIT_OTP;
/* And make MIPI_MIPI_SEQ_INIT_OTP point to it */
- dev_priv->vbt.dsi.sequence[MIPI_SEQ_INIT_OTP] = init_otp + len - 1;
+ i915->vbt.dsi.sequence[MIPI_SEQ_INIT_OTP] = init_otp + len - 1;
}
static void
-parse_mipi_sequence(struct drm_i915_private *dev_priv,
+parse_mipi_sequence(struct drm_i915_private *i915,
const struct bdb_header *bdb)
{
- int panel_type = dev_priv->vbt.panel_type;
+ int panel_type = i915->vbt.panel_type;
const struct bdb_mipi_sequence *sequence;
const u8 *seq_data;
u32 seq_size;
@@ -1361,25 +1361,25 @@ parse_mipi_sequence(struct drm_i915_private *dev_priv,
int index = 0;
/* Only our generic panel driver uses the sequence block. */
- if (dev_priv->vbt.dsi.panel_id != MIPI_DSI_GENERIC_PANEL_ID)
+ if (i915->vbt.dsi.panel_id != MIPI_DSI_GENERIC_PANEL_ID)
return;
sequence = find_section(bdb, BDB_MIPI_SEQUENCE);
if (!sequence) {
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"No MIPI Sequence found, parsing complete\n");
return;
}
/* Fail gracefully for forward incompatible sequence block. */
if (sequence->version >= 4) {
- drm_err(&dev_priv->drm,
+ drm_err(&i915->drm,
"Unable to parse MIPI Sequence Block v%u\n",
sequence->version);
return;
}
- drm_dbg(&dev_priv->drm, "Found MIPI sequence block v%u\n",
+ drm_dbg(&i915->drm, "Found MIPI sequence block v%u\n",
sequence->version);
seq_data = find_panel_sequence_block(sequence, panel_type, &seq_size);
@@ -1397,41 +1397,41 @@ parse_mipi_sequence(struct drm_i915_private *dev_priv,
break;
if (seq_id >= MIPI_SEQ_MAX) {
- drm_err(&dev_priv->drm, "Unknown sequence %u\n",
+ drm_err(&i915->drm, "Unknown sequence %u\n",
seq_id);
goto err;
}
/* Log about presence of sequences we won't run. */
if (seq_id == MIPI_SEQ_TEAR_ON || seq_id == MIPI_SEQ_TEAR_OFF)
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"Unsupported sequence %u\n", seq_id);
- dev_priv->vbt.dsi.sequence[seq_id] = data + index;
+ i915->vbt.dsi.sequence[seq_id] = data + index;
if (sequence->version >= 3)
index = goto_next_sequence_v3(data, index, seq_size);
else
index = goto_next_sequence(data, index, seq_size);
if (!index) {
- drm_err(&dev_priv->drm, "Invalid sequence %u\n",
+ drm_err(&i915->drm, "Invalid sequence %u\n",
seq_id);
goto err;
}
}
- dev_priv->vbt.dsi.data = data;
- dev_priv->vbt.dsi.size = seq_size;
- dev_priv->vbt.dsi.seq_version = sequence->version;
+ i915->vbt.dsi.data = data;
+ i915->vbt.dsi.size = seq_size;
+ i915->vbt.dsi.seq_version = sequence->version;
- fixup_mipi_sequences(dev_priv);
+ fixup_mipi_sequences(i915);
- drm_dbg(&dev_priv->drm, "MIPI related VBT parsing complete\n");
+ drm_dbg(&i915->drm, "MIPI related VBT parsing complete\n");
return;
err:
kfree(data);
- memset(dev_priv->vbt.dsi.sequence, 0, sizeof(dev_priv->vbt.dsi.sequence));
+ memset(i915->vbt.dsi.sequence, 0, sizeof(i915->vbt.dsi.sequence));
}
static void
@@ -1515,18 +1515,18 @@ static enum port get_port_by_ddc_pin(struct drm_i915_private *i915, u8 ddc_pin)
return PORT_NONE;
}
-static void sanitize_ddc_pin(struct drm_i915_private *dev_priv,
+static void sanitize_ddc_pin(struct drm_i915_private *i915,
enum port port)
{
- struct ddi_vbt_port_info *info = &dev_priv->vbt.ddi_port_info[port];
+ struct ddi_vbt_port_info *info = &i915->vbt.ddi_port_info[port];
enum port p;
if (!info->alternate_ddc_pin)
return;
- p = get_port_by_ddc_pin(dev_priv, info->alternate_ddc_pin);
+ p = get_port_by_ddc_pin(i915, info->alternate_ddc_pin);
if (p != PORT_NONE) {
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"port %c trying to use the same DDC pin (0x%x) as port %c, "
"disabling port %c DVI/HDMI support\n",
port_name(port), info->alternate_ddc_pin,
@@ -1544,7 +1544,7 @@ static void sanitize_ddc_pin(struct drm_i915_private *dev_priv,
* port A and port E with the same AUX ch and
* we must pick port E :(
*/
- info = &dev_priv->vbt.ddi_port_info[p];
+ info = &i915->vbt.ddi_port_info[p];
info->supports_dvi = false;
info->supports_hdmi = false;
@@ -1567,18 +1567,18 @@ static enum port get_port_by_aux_ch(struct drm_i915_private *i915, u8 aux_ch)
return PORT_NONE;
}
-static void sanitize_aux_ch(struct drm_i915_private *dev_priv,
+static void sanitize_aux_ch(struct drm_i915_private *i915,
enum port port)
{
- struct ddi_vbt_port_info *info = &dev_priv->vbt.ddi_port_info[port];
+ struct ddi_vbt_port_info *info = &i915->vbt.ddi_port_info[port];
enum port p;
if (!info->alternate_aux_channel)
return;
- p = get_port_by_aux_ch(dev_priv, info->alternate_aux_channel);
+ p = get_port_by_aux_ch(i915, info->alternate_aux_channel);
if (p != PORT_NONE) {
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"port %c trying to use the same AUX CH (0x%x) as port %c, "
"disabling port %c DP support\n",
port_name(port), info->alternate_aux_channel,
@@ -1596,7 +1596,7 @@ static void sanitize_aux_ch(struct drm_i915_private *dev_priv,
* port A and port E with the same AUX ch and
* we must pick port E :(
*/
- info = &dev_priv->vbt.ddi_port_info[p];
+ info = &i915->vbt.ddi_port_info[p];
info->supports_dp = false;
info->alternate_aux_channel = 0;
@@ -1644,26 +1644,26 @@ static const u8 gen9bc_tgp_ddc_pin_map[] = {
[DDC_BUS_DDI_D] = GMBUS_PIN_10_TC2_ICP,
};
-static u8 map_ddc_pin(struct drm_i915_private *dev_priv, u8 vbt_pin)
+static u8 map_ddc_pin(struct drm_i915_private *i915, u8 vbt_pin)
{
const u8 *ddc_pin_map;
int n_entries;
- if (HAS_PCH_ADP(dev_priv)) {
+ if (HAS_PCH_ADP(i915)) {
ddc_pin_map = adls_ddc_pin_map;
n_entries = ARRAY_SIZE(adls_ddc_pin_map);
- } else if (INTEL_PCH_TYPE(dev_priv) >= PCH_DG1) {
+ } else if (INTEL_PCH_TYPE(i915) >= PCH_DG1) {
return vbt_pin;
- } else if (IS_ROCKETLAKE(dev_priv) && INTEL_PCH_TYPE(dev_priv) == PCH_TGP) {
+ } else if (IS_ROCKETLAKE(i915) && INTEL_PCH_TYPE(i915) == PCH_TGP) {
ddc_pin_map = rkl_pch_tgp_ddc_pin_map;
n_entries = ARRAY_SIZE(rkl_pch_tgp_ddc_pin_map);
- } else if (HAS_PCH_TGP(dev_priv) && IS_GEN9_BC(dev_priv)) {
+ } else if (HAS_PCH_TGP(i915) && IS_GEN9_BC(i915)) {
ddc_pin_map = gen9bc_tgp_ddc_pin_map;
n_entries = ARRAY_SIZE(gen9bc_tgp_ddc_pin_map);
- } else if (INTEL_PCH_TYPE(dev_priv) >= PCH_ICP) {
+ } else if (INTEL_PCH_TYPE(i915) >= PCH_ICP) {
ddc_pin_map = icp_ddc_pin_map;
n_entries = ARRAY_SIZE(icp_ddc_pin_map);
- } else if (HAS_PCH_CNP(dev_priv)) {
+ } else if (HAS_PCH_CNP(i915)) {
ddc_pin_map = cnp_ddc_pin_map;
n_entries = ARRAY_SIZE(cnp_ddc_pin_map);
} else {
@@ -1674,7 +1674,7 @@ static u8 map_ddc_pin(struct drm_i915_private *dev_priv, u8 vbt_pin)
if (vbt_pin < n_entries && ddc_pin_map[vbt_pin] != 0)
return ddc_pin_map[vbt_pin];
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"Ignoring alternate pin: VBT claims DDC pin %d, which is not valid for this platform\n",
vbt_pin);
return 0;
@@ -1699,7 +1699,7 @@ static enum port __dvo_port_to_port(int n_ports, int n_dvo,
return PORT_NONE;
}
-static enum port dvo_port_to_port(struct drm_i915_private *dev_priv,
+static enum port dvo_port_to_port(struct drm_i915_private *i915,
u8 dvo_port)
{
/*
@@ -1742,12 +1742,12 @@ static enum port dvo_port_to_port(struct drm_i915_private *dev_priv,
[PORT_TC4] = { DVO_PORT_HDMIE, DVO_PORT_DPE, -1 },
};
- if (IS_ALDERLAKE_S(dev_priv))
+ if (IS_ALDERLAKE_S(i915))
return __dvo_port_to_port(ARRAY_SIZE(adls_port_mapping),
ARRAY_SIZE(adls_port_mapping[0]),
adls_port_mapping,
dvo_port);
- else if (IS_DG1(dev_priv) || IS_ROCKETLAKE(dev_priv))
+ else if (IS_DG1(i915) || IS_ROCKETLAKE(i915))
return __dvo_port_to_port(ARRAY_SIZE(rkl_port_mapping),
ARRAY_SIZE(rkl_port_mapping[0]),
rkl_port_mapping,
@@ -1759,7 +1759,7 @@ static enum port dvo_port_to_port(struct drm_i915_private *dev_priv,
dvo_port);
}
-static void parse_ddi_port(struct drm_i915_private *dev_priv,
+static void parse_ddi_port(struct drm_i915_private *i915,
struct display_device_data *devdata,
u8 bdb_version)
{
@@ -1768,14 +1768,14 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv,
bool is_dvi, is_hdmi, is_dp, is_edp, is_crt;
enum port port;
- port = dvo_port_to_port(dev_priv, child->dvo_port);
+ port = dvo_port_to_port(i915, child->dvo_port);
if (port == PORT_NONE)
return;
- info = &dev_priv->vbt.ddi_port_info[port];
+ info = &i915->vbt.ddi_port_info[port];
if (info->child) {
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"More than one child device for port %c in VBT, using the first.\n",
port_name(port));
return;
@@ -1787,8 +1787,8 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv,
is_hdmi = is_dvi && (child->device_type & DEVICE_TYPE_NOT_HDMI_OUTPUT) == 0;
is_edp = is_dp && (child->device_type & DEVICE_TYPE_INTERNAL_CONNECTOR);
- if (port == PORT_A && is_dvi && INTEL_GEN(dev_priv) < 12) {
- drm_dbg_kms(&dev_priv->drm,
+ if (port == PORT_A && is_dvi && INTEL_GEN(i915) < 12) {
+ drm_dbg_kms(&i915->drm,
"VBT claims port A supports DVI%s, ignoring\n",
is_hdmi ? "/HDMI" : "");
is_dvi = false;
@@ -1806,22 +1806,22 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv,
if (bdb_version >= 209)
info->supports_tbt = child->tbt;
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"Port %c VBT info: CRT:%d DVI:%d HDMI:%d DP:%d eDP:%d LSPCON:%d USB-Type-C:%d TBT:%d DSC:%d\n",
port_name(port), is_crt, is_dvi, is_hdmi, is_dp, is_edp,
- HAS_LSPCON(dev_priv) && child->lspcon,
+ HAS_LSPCON(i915) && child->lspcon,
info->supports_typec_usb, info->supports_tbt,
devdata->dsc != NULL);
if (is_dvi) {
u8 ddc_pin;
- ddc_pin = map_ddc_pin(dev_priv, child->ddc_pin);
- if (intel_gmbus_is_valid_pin(dev_priv, ddc_pin)) {
+ ddc_pin = map_ddc_pin(i915, child->ddc_pin);
+ if (intel_gmbus_is_valid_pin(i915, ddc_pin)) {
info->alternate_ddc_pin = ddc_pin;
- sanitize_ddc_pin(dev_priv, port);
+ sanitize_ddc_pin(i915, port);
} else {
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"Port %c has invalid DDC pin %d, "
"sticking to defaults\n",
port_name(port), ddc_pin);
@@ -1831,13 +1831,13 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv,
if (is_dp) {
info->alternate_aux_channel = child->aux_channel;
- sanitize_aux_ch(dev_priv, port);
+ sanitize_aux_ch(i915, port);
}
if (bdb_version >= 158) {
/* The VBT HDMI level shift values match the table we have. */
u8 hdmi_level_shift = child->hdmi_level_shifter_value;
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"Port %c VBT HDMI level shift: %d\n",
port_name(port),
hdmi_level_shift);
@@ -1864,7 +1864,7 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv,
}
if (max_tmds_clock)
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"Port %c VBT HDMI max TMDS clock: %d kHz\n",
port_name(port), max_tmds_clock);
info->max_tmds_clock = max_tmds_clock;
@@ -1873,11 +1873,11 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv,
/* Parse the I_boost config for SKL and above */
if (bdb_version >= 196 && child->iboost) {
info->dp_boost_level = translate_iboost(child->dp_iboost_level);
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"Port %c VBT (e)DP boost level: %d\n",
port_name(port), info->dp_boost_level);
info->hdmi_boost_level = translate_iboost(child->hdmi_iboost_level);
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"Port %c VBT HDMI boost level: %d\n",
port_name(port), info->hdmi_boost_level);
}
@@ -1899,7 +1899,7 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv,
info->dp_max_link_rate = 162000;
break;
}
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"Port %c VBT DP max link rate: %d\n",
port_name(port), info->dp_max_link_rate);
}
@@ -1907,22 +1907,22 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv,
info->child = child;
}
-static void parse_ddi_ports(struct drm_i915_private *dev_priv, u8 bdb_version)
+static void parse_ddi_ports(struct drm_i915_private *i915, u8 bdb_version)
{
struct display_device_data *devdata;
- if (!HAS_DDI(dev_priv) && !IS_CHERRYVIEW(dev_priv))
+ if (!HAS_DDI(i915) && !IS_CHERRYVIEW(i915))
return;
if (bdb_version < 155)
return;
- list_for_each_entry(devdata, &dev_priv->vbt.display_devices, node)
- parse_ddi_port(dev_priv, devdata, bdb_version);
+ list_for_each_entry(devdata, &i915->vbt.display_devices, node)
+ parse_ddi_port(i915, devdata, bdb_version);
}
static void
-parse_general_definitions(struct drm_i915_private *dev_priv,
+parse_general_definitions(struct drm_i915_private *i915,
const struct bdb_header *bdb)
{
const struct bdb_general_definitions *defs;
@@ -1935,23 +1935,23 @@ parse_general_definitions(struct drm_i915_private *dev_priv,
defs = find_section(bdb, BDB_GENERAL_DEFINITIONS);
if (!defs) {
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"No general definition block is found, no devices defined.\n");
return;
}
block_size = get_blocksize(defs);
if (block_size < sizeof(*defs)) {
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"General definitions block too small (%u)\n",
block_size);
return;
}
bus_pin = defs->crt_ddc_gmbus_pin;
- drm_dbg_kms(&dev_priv->drm, "crt_ddc_bus_pin: %d\n", bus_pin);
- if (intel_gmbus_is_valid_pin(dev_priv, bus_pin))
- dev_priv->vbt.crt_ddc_pin = bus_pin;
+ drm_dbg_kms(&i915->drm, "crt_ddc_bus_pin: %d\n", bus_pin);
+ if (intel_gmbus_is_valid_pin(i915, bus_pin))
+ i915->vbt.crt_ddc_pin = bus_pin;
if (bdb->version < 106) {
expected_size = 22;
@@ -1968,20 +1968,20 @@ parse_general_definitions(struct drm_i915_private *dev_priv,
} else {
expected_size = sizeof(*child);
BUILD_BUG_ON(sizeof(*child) < 39);
- drm_dbg(&dev_priv->drm,
+ drm_dbg(&i915->drm,
"Expected child device config size for VBT version %u not known; assuming %u\n",
bdb->version, expected_size);
}
/* Flag an error for unexpected size, but continue anyway. */
if (defs->child_dev_size != expected_size)
- drm_err(&dev_priv->drm,
+ drm_err(&i915->drm,
"Unexpected child device config size %u (expected %u for VBT version %u)\n",
defs->child_dev_size, expected_size, bdb->version);
/* The legacy sized child device config is the minimum we need. */
if (defs->child_dev_size < LEGACY_CHILD_DEVICE_CONFIG_SIZE) {
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"Child device config size %u is too small.\n",
defs->child_dev_size);
return;
@@ -1995,7 +1995,7 @@ parse_general_definitions(struct drm_i915_private *dev_priv,
if (!child->device_type)
continue;
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"Found VBT child device with type 0x%x\n",
child->device_type);
@@ -2011,64 +2011,64 @@ parse_general_definitions(struct drm_i915_private *dev_priv,
memcpy(&devdata->child, child,
min_t(size_t, defs->child_dev_size, sizeof(*child)));
- list_add_tail(&devdata->node, &dev_priv->vbt.display_devices);
+ list_add_tail(&devdata->node, &i915->vbt.display_devices);
}
- if (list_empty(&dev_priv->vbt.display_devices))
- drm_dbg_kms(&dev_priv->drm,
+ if (list_empty(&i915->vbt.display_devices))
+ drm_dbg_kms(&i915->drm,
"no child dev is parsed from VBT\n");
}
/* Common defaults which may be overridden by VBT. */
static void
-init_vbt_defaults(struct drm_i915_private *dev_priv)
+init_vbt_defaults(struct drm_i915_private *i915)
{
- dev_priv->vbt.crt_ddc_pin = GMBUS_PIN_VGADDC;
+ i915->vbt.crt_ddc_pin = GMBUS_PIN_VGADDC;
/* Default to having backlight */
- dev_priv->vbt.backlight.present = true;
+ i915->vbt.backlight.present = true;
/* LFP panel data */
- dev_priv->vbt.lvds_dither = 1;
+ i915->vbt.lvds_dither = 1;
/* SDVO panel data */
- dev_priv->vbt.sdvo_lvds_vbt_mode = NULL;
+ i915->vbt.sdvo_lvds_vbt_mode = NULL;
/* general features */
- dev_priv->vbt.int_tv_support = 1;
- dev_priv->vbt.int_crt_support = 1;
+ i915->vbt.int_tv_support = 1;
+ i915->vbt.int_crt_support = 1;
/* driver features */
- dev_priv->vbt.int_lvds_support = 1;
+ i915->vbt.int_lvds_support = 1;
/* Default to using SSC */
- dev_priv->vbt.lvds_use_ssc = 1;
+ i915->vbt.lvds_use_ssc = 1;
/*
* Core/SandyBridge/IvyBridge use alternative (120MHz) reference
* clock for LVDS.
*/
- dev_priv->vbt.lvds_ssc_freq = intel_bios_ssc_frequency(dev_priv,
- !HAS_PCH_SPLIT(dev_priv));
- drm_dbg_kms(&dev_priv->drm, "Set default to SSC at %d kHz\n",
- dev_priv->vbt.lvds_ssc_freq);
+ i915->vbt.lvds_ssc_freq = intel_bios_ssc_frequency(i915,
+ !HAS_PCH_SPLIT(i915));
+ drm_dbg_kms(&i915->drm, "Set default to SSC at %d kHz\n",
+ i915->vbt.lvds_ssc_freq);
}
/* Defaults to initialize only if there is no VBT. */
static void
-init_vbt_missing_defaults(struct drm_i915_private *dev_priv)
+init_vbt_missing_defaults(struct drm_i915_private *i915)
{
enum port port;
for_each_port(port) {
struct ddi_vbt_port_info *info =
- &dev_priv->vbt.ddi_port_info[port];
- enum phy phy = intel_port_to_phy(dev_priv, port);
+ &i915->vbt.ddi_port_info[port];
+ enum phy phy = intel_port_to_phy(i915, port);
/*
* VBT has the TypeC mode (native,TBT/USB) and we don't want
* to detect it.
*/
- if (intel_phy_is_tc(dev_priv, phy))
+ if (intel_phy_is_tc(i915, phy))
continue;
info->supports_dvi = (port != PORT_A && port != PORT_E);
@@ -2134,9 +2134,9 @@ bool intel_bios_is_valid_vbt(const void *buf, size_t size)
return vbt;
}
-static struct vbt_header *oprom_get_vbt(struct drm_i915_private *dev_priv)
+static struct vbt_header *oprom_get_vbt(struct drm_i915_private *i915)
{
- struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
+ struct pci_dev *pdev = to_pci_dev(i915->drm.dev);
void __iomem *p = NULL, *oprom;
struct vbt_header *vbt;
u16 vbt_size;
@@ -2160,13 +2160,13 @@ static struct vbt_header *oprom_get_vbt(struct drm_i915_private *dev_priv)
goto err_unmap_oprom;
if (sizeof(struct vbt_header) > size) {
- drm_dbg(&dev_priv->drm, "VBT header incomplete\n");
+ drm_dbg(&i915->drm, "VBT header incomplete\n");
goto err_unmap_oprom;
}
vbt_size = ioread16(p + offsetof(struct vbt_header, vbt_size));
if (vbt_size > size) {
- drm_dbg(&dev_priv->drm,
+ drm_dbg(&i915->drm,
"VBT incomplete (vbt_size overflows)\n");
goto err_unmap_oprom;
}
@@ -2195,71 +2195,71 @@ static struct vbt_header *oprom_get_vbt(struct drm_i915_private *dev_priv)
/**
* intel_bios_init - find VBT and initialize settings from the BIOS
- * @dev_priv: i915 device instance
+ * @i915: i915 device instance
*
* Parse and initialize settings from the Video BIOS Tables (VBT). If the VBT
* was not found in ACPI OpRegion, try to find it in PCI ROM first. Also
* initialize some defaults if the VBT is not present at all.
*/
-void intel_bios_init(struct drm_i915_private *dev_priv)
+void intel_bios_init(struct drm_i915_private *i915)
{
- const struct vbt_header *vbt = dev_priv->opregion.vbt;
+ const struct vbt_header *vbt = i915->opregion.vbt;
struct vbt_header *oprom_vbt = NULL;
const struct bdb_header *bdb;
- INIT_LIST_HEAD(&dev_priv->vbt.display_devices);
+ INIT_LIST_HEAD(&i915->vbt.display_devices);
- if (!HAS_DISPLAY(dev_priv)) {
- drm_dbg_kms(&dev_priv->drm,
+ if (!HAS_DISPLAY(i915)) {
+ drm_dbg_kms(&i915->drm,
"Skipping VBT init due to disabled display.\n");
return;
}
- init_vbt_defaults(dev_priv);
+ init_vbt_defaults(i915);
/* If the OpRegion does not have VBT, look in PCI ROM. */
if (!vbt) {
- oprom_vbt = oprom_get_vbt(dev_priv);
+ oprom_vbt = oprom_get_vbt(i915);
if (!oprom_vbt)
goto out;
vbt = oprom_vbt;
- drm_dbg_kms(&dev_priv->drm, "Found valid VBT in PCI ROM\n");
+ drm_dbg_kms(&i915->drm, "Found valid VBT in PCI ROM\n");
}
bdb = get_bdb_header(vbt);
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"VBT signature \"%.*s\", BDB version %d\n",
(int)sizeof(vbt->signature), vbt->signature, bdb->version);
/* Grab useful general definitions */
- parse_general_features(dev_priv, bdb);
- parse_general_definitions(dev_priv, bdb);
- parse_panel_options(dev_priv, bdb);
- parse_panel_dtd(dev_priv, bdb);
- parse_lfp_backlight(dev_priv, bdb);
- parse_sdvo_panel_data(dev_priv, bdb);
- parse_driver_features(dev_priv, bdb);
- parse_power_conservation_features(dev_priv, bdb);
- parse_edp(dev_priv, bdb);
- parse_psr(dev_priv, bdb);
- parse_mipi_config(dev_priv, bdb);
- parse_mipi_sequence(dev_priv, bdb);
+ parse_general_features(i915, bdb);
+ parse_general_definitions(i915, bdb);
+ parse_panel_options(i915, bdb);
+ parse_panel_dtd(i915, bdb);
+ parse_lfp_backlight(i915, bdb);
+ parse_sdvo_panel_data(i915, bdb);
+ parse_driver_features(i915, bdb);
+ parse_power_conservation_features(i915, bdb);
+ parse_edp(i915, bdb);
+ parse_psr(i915, bdb);
+ parse_mipi_config(i915, bdb);
+ parse_mipi_sequence(i915, bdb);
/* Depends on child device list */
- parse_compression_parameters(dev_priv, bdb);
+ parse_compression_parameters(i915, bdb);
/* Further processing on pre-parsed data */
- parse_sdvo_device_mapping(dev_priv, bdb->version);
- parse_ddi_ports(dev_priv, bdb->version);
+ parse_sdvo_device_mapping(i915, bdb->version);
+ parse_ddi_ports(i915, bdb->version);
out:
if (!vbt) {
- drm_info(&dev_priv->drm,
+ drm_info(&i915->drm,
"Failed to find VBIOS tables (VBT)\n");
- init_vbt_missing_defaults(dev_priv);
+ init_vbt_missing_defaults(i915);
}
kfree(oprom_vbt);
@@ -2267,51 +2267,51 @@ void intel_bios_init(struct drm_i915_private *dev_priv)
/**
* intel_bios_driver_remove - Free any resources allocated by intel_bios_init()
- * @dev_priv: i915 device instance
+ * @i915: i915 device instance
*/
-void intel_bios_driver_remove(struct drm_i915_private *dev_priv)
+void intel_bios_driver_remove(struct drm_i915_private *i915)
{
struct display_device_data *devdata, *n;
- list_for_each_entry_safe(devdata, n, &dev_priv->vbt.display_devices, node) {
+ list_for_each_entry_safe(devdata, n, &i915->vbt.display_devices, node) {
list_del(&devdata->node);
kfree(devdata->dsc);
kfree(devdata);
}
- kfree(dev_priv->vbt.sdvo_lvds_vbt_mode);
- dev_priv->vbt.sdvo_lvds_vbt_mode = NULL;
- kfree(dev_priv->vbt.lfp_lvds_vbt_mode);
- dev_priv->vbt.lfp_lvds_vbt_mode = NULL;
- kfree(dev_priv->vbt.dsi.data);
- dev_priv->vbt.dsi.data = NULL;
- kfree(dev_priv->vbt.dsi.pps);
- dev_priv->vbt.dsi.pps = NULL;
- kfree(dev_priv->vbt.dsi.config);
- dev_priv->vbt.dsi.config = NULL;
- kfree(dev_priv->vbt.dsi.deassert_seq);
- dev_priv->vbt.dsi.deassert_seq = NULL;
+ kfree(i915->vbt.sdvo_lvds_vbt_mode);
+ i915->vbt.sdvo_lvds_vbt_mode = NULL;
+ kfree(i915->vbt.lfp_lvds_vbt_mode);
+ i915->vbt.lfp_lvds_vbt_mode = NULL;
+ kfree(i915->vbt.dsi.data);
+ i915->vbt.dsi.data = NULL;
+ kfree(i915->vbt.dsi.pps);
+ i915->vbt.dsi.pps = NULL;
+ kfree(i915->vbt.dsi.config);
+ i915->vbt.dsi.config = NULL;
+ kfree(i915->vbt.dsi.deassert_seq);
+ i915->vbt.dsi.deassert_seq = NULL;
}
/**
* intel_bios_is_tv_present - is integrated TV present in VBT
- * @dev_priv: i915 device instance
+ * @i915: i915 device instance
*
* Return true if TV is present. If no child devices were parsed from VBT,
* assume TV is present.
*/
-bool intel_bios_is_tv_present(struct drm_i915_private *dev_priv)
+bool intel_bios_is_tv_present(struct drm_i915_private *i915)
{
const struct display_device_data *devdata;
const struct child_device_config *child;
- if (!dev_priv->vbt.int_tv_support)
+ if (!i915->vbt.int_tv_support)
return false;
- if (list_empty(&dev_priv->vbt.display_devices))
+ if (list_empty(&i915->vbt.display_devices))
return true;
- list_for_each_entry(devdata, &dev_priv->vbt.display_devices, node) {
+ list_for_each_entry(devdata, &i915->vbt.display_devices, node) {
child = &devdata->child;
/*
@@ -2337,21 +2337,21 @@ bool intel_bios_is_tv_present(struct drm_i915_private *dev_priv)
/**
* intel_bios_is_lvds_present - is LVDS present in VBT
- * @dev_priv: i915 device instance
+ * @i915: i915 device instance
* @i2c_pin: i2c pin for LVDS if present
*
* Return true if LVDS is present. If no child devices were parsed from VBT,
* assume LVDS is present.
*/
-bool intel_bios_is_lvds_present(struct drm_i915_private *dev_priv, u8 *i2c_pin)
+bool intel_bios_is_lvds_present(struct drm_i915_private *i915, u8 *i2c_pin)
{
const struct display_device_data *devdata;
const struct child_device_config *child;
- if (list_empty(&dev_priv->vbt.display_devices))
+ if (list_empty(&i915->vbt.display_devices))
return true;
- list_for_each_entry(devdata, &dev_priv->vbt.display_devices, node) {
+ list_for_each_entry(devdata, &i915->vbt.display_devices, node) {
child = &devdata->child;
/* If the device type is not LFP, continue.
@@ -2362,7 +2362,7 @@ bool intel_bios_is_lvds_present(struct drm_i915_private *dev_priv, u8 *i2c_pin)
child->device_type != DEVICE_TYPE_LFP)
continue;
- if (intel_gmbus_is_valid_pin(dev_priv, child->i2c_pin))
+ if (intel_gmbus_is_valid_pin(i915, child->i2c_pin))
*i2c_pin = child->i2c_pin;
/* However, we cannot trust the BIOS writers to populate
@@ -2378,7 +2378,7 @@ bool intel_bios_is_lvds_present(struct drm_i915_private *dev_priv, u8 *i2c_pin)
* additional data. Trust that if the VBT was written into
* the OpRegion then they have validated the LVDS's existence.
*/
- if (dev_priv->opregion.vbt)
+ if (i915->opregion.vbt)
return true;
}
@@ -2387,12 +2387,12 @@ bool intel_bios_is_lvds_present(struct drm_i915_private *dev_priv, u8 *i2c_pin)
/**
* intel_bios_is_port_present - is the specified digital port present
- * @dev_priv: i915 device instance
+ * @i915: i915 device instance
* @port: port to check
*
* Return true if the device in %port is present.
*/
-bool intel_bios_is_port_present(struct drm_i915_private *dev_priv, enum port port)
+bool intel_bios_is_port_present(struct drm_i915_private *i915, enum port port)
{
const struct display_device_data *devdata;
const struct child_device_config *child;
@@ -2406,19 +2406,19 @@ bool intel_bios_is_port_present(struct drm_i915_private *dev_priv, enum port por
[PORT_F] = { DVO_PORT_DPF, DVO_PORT_HDMIF, },
};
- if (HAS_DDI(dev_priv)) {
+ if (HAS_DDI(i915)) {
const struct ddi_vbt_port_info *port_info =
- &dev_priv->vbt.ddi_port_info[port];
+ &i915->vbt.ddi_port_info[port];
return port_info->child;
}
/* FIXME maybe deal with port A as well? */
- if (drm_WARN_ON(&dev_priv->drm,
+ if (drm_WARN_ON(&i915->drm,
port == PORT_A) || port >= ARRAY_SIZE(port_mapping))
return false;
- list_for_each_entry(devdata, &dev_priv->vbt.display_devices, node) {
+ list_for_each_entry(devdata, &i915->vbt.display_devices, node) {
child = &devdata->child;
if ((child->dvo_port == port_mapping[port].dp ||
@@ -2433,12 +2433,12 @@ bool intel_bios_is_port_present(struct drm_i915_private *dev_priv, enum port por
/**
* intel_bios_is_port_edp - is the device in given port eDP
- * @dev_priv: i915 device instance
+ * @i915: i915 device instance
* @port: port to check
*
* Return true if the device in %port is eDP.
*/
-bool intel_bios_is_port_edp(struct drm_i915_private *dev_priv, enum port port)
+bool intel_bios_is_port_edp(struct drm_i915_private *i915, enum port port)
{
const struct display_device_data *devdata;
const struct child_device_config *child;
@@ -2450,10 +2450,10 @@ bool intel_bios_is_port_edp(struct drm_i915_private *dev_priv, enum port port)
[PORT_F] = DVO_PORT_DPF,
};
- if (HAS_DDI(dev_priv))
- return dev_priv->vbt.ddi_port_info[port].supports_edp;
+ if (HAS_DDI(i915))
+ return i915->vbt.ddi_port_info[port].supports_edp;
- list_for_each_entry(devdata, &dev_priv->vbt.display_devices, node) {
+ list_for_each_entry(devdata, &i915->vbt.display_devices, node) {
child = &devdata->child;
if (child->dvo_port == port_mapping[port] &&
@@ -2500,12 +2500,12 @@ static bool child_dev_is_dp_dual_mode(const struct child_device_config *child,
return false;
}
-bool intel_bios_is_port_dp_dual_mode(struct drm_i915_private *dev_priv,
+bool intel_bios_is_port_dp_dual_mode(struct drm_i915_private *i915,
enum port port)
{
const struct display_device_data *devdata;
- list_for_each_entry(devdata, &dev_priv->vbt.display_devices, node) {
+ list_for_each_entry(devdata, &i915->vbt.display_devices, node) {
if (child_dev_is_dp_dual_mode(&devdata->child, port))
return true;
}
@@ -2515,19 +2515,19 @@ bool intel_bios_is_port_dp_dual_mode(struct drm_i915_private *dev_priv,
/**
* intel_bios_is_dsi_present - is DSI present in VBT
- * @dev_priv: i915 device instance
+ * @i915: i915 device instance
* @port: port for DSI if present
*
* Return true if DSI is present, and return the port in %port.
*/
-bool intel_bios_is_dsi_present(struct drm_i915_private *dev_priv,
+bool intel_bios_is_dsi_present(struct drm_i915_private *i915,
enum port *port)
{
const struct display_device_data *devdata;
const struct child_device_config *child;
u8 dvo_port;
- list_for_each_entry(devdata, &dev_priv->vbt.display_devices, node) {
+ list_for_each_entry(devdata, &i915->vbt.display_devices, node) {
child = &devdata->child;
if (!(child->device_type & DEVICE_TYPE_MIPI_OUTPUT))
@@ -2536,15 +2536,15 @@ bool intel_bios_is_dsi_present(struct drm_i915_private *dev_priv,
dvo_port = child->dvo_port;
if (dvo_port == DVO_PORT_MIPIA ||
- (dvo_port == DVO_PORT_MIPIB && INTEL_GEN(dev_priv) >= 11) ||
- (dvo_port == DVO_PORT_MIPIC && INTEL_GEN(dev_priv) < 11)) {
+ (dvo_port == DVO_PORT_MIPIB && INTEL_GEN(i915) >= 11) ||
+ (dvo_port == DVO_PORT_MIPIC && INTEL_GEN(i915) < 11)) {
if (port)
*port = dvo_port - DVO_PORT_MIPIA;
return true;
} else if (dvo_port == DVO_PORT_MIPIB ||
dvo_port == DVO_PORT_MIPIC ||
dvo_port == DVO_PORT_MIPID) {
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"VBT has unsupported DSI port %c\n",
port_name(dvo_port - DVO_PORT_MIPIA));
}
@@ -2700,17 +2700,17 @@ intel_bios_is_lane_reversal_needed(const struct drm_i915_private *i915,
return child && child->lane_reversal;
}
-enum aux_ch intel_bios_port_aux_ch(struct drm_i915_private *dev_priv,
+enum aux_ch intel_bios_port_aux_ch(struct drm_i915_private *i915,
enum port port)
{
const struct ddi_vbt_port_info *info =
- &dev_priv->vbt.ddi_port_info[port];
+ &i915->vbt.ddi_port_info[port];
enum aux_ch aux_ch;
if (!info->alternate_aux_channel) {
aux_ch = (enum aux_ch)port;
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(&i915->drm,
"using AUX %c for port %c (platform default)\n",
aux_ch_name(aux_ch), port_name(port));
return aux_ch;
@@ -2728,29 +2728,29 @@ enum aux_ch intel_bios_port_aux_ch(struct drm_i915_private *dev_priv,
aux_ch = AUX_CH_A;
break;
case DP_AUX_B:
- if (IS_ALDERLAKE_S(dev_priv))
+ if (IS_ALDERLAKE_S(i915))
aux_ch = AUX_CH_USBC1;
else
aux_ch = AUX_CH_B;
break;
case DP_AUX_C:
- if (IS_ALDERLAKE_S(dev_priv))
+ if (IS_ALDERLAKE_S(i915))
aux_ch = AUX_CH_USBC2;
- else if (IS_DG1(dev_priv) || IS_ROCKETLAKE(dev_priv))
+ else if (IS_DG1(i915) || IS_ROCKETLAKE(i915))
aux_ch = AUX_CH_USBC1;
else
aux_ch = AUX_CH_C;
break;
case DP_AUX_D:
- if (IS_ALDERLAKE_S(dev_priv))
+ if (IS_ALDERLAKE_S(i915))
aux_ch = AUX_CH_USBC3;
- else if (IS_DG1(dev_priv) || IS_ROCKETLAKE(dev_priv))
+ else if (IS_DG1(i915) || IS_ROCKETLAKE(i915))
aux_ch = AUX_CH_USBC2;
else
aux_ch = AUX_CH_D;
break;
case DP_AUX_E:
- if (IS_ALDERLAKE_S(dev_priv))
+ if (IS_ALDERLAKE_S(i915))
aux_ch = AUX_CH_USBC4;
else
aux_ch = AUX_CH_E;
@@ -2773,7 +2773,7 @@ enum aux_ch intel_bios_port_aux_ch(struct drm_i915_private *dev_priv,
break;
}
- drm_dbg_kms(&dev_priv->drm, "using AUX %c for port %c (VBT)\n",
+ drm_dbg_kms(&i915->drm, "using AUX %c for port %c (VBT)\n",
aux_ch_name(aux_ch), port_name(port));
return aux_ch;
--
2.20.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [Intel-gfx] [PATCH 02/12] drm/i915/bios: store bdb version in i915
2021-02-17 17:03 [Intel-gfx] [PATCH 00/12] drm/i915/bios: vbt child device rework Jani Nikula
2021-02-17 17:03 ` [Intel-gfx] [PATCH 01/12] drm/i915/bios: mass convert dev_priv to i915 Jani Nikula
@ 2021-02-17 17:03 ` Jani Nikula
2021-02-22 18:14 ` Ville Syrjälä
2021-02-17 17:03 ` [Intel-gfx] [PATCH 03/12] drm/i915/bios: limit default outputs by platform on missing VBT Jani Nikula
` (13 subsequent siblings)
15 siblings, 1 reply; 40+ messages in thread
From: Jani Nikula @ 2021-02-17 17:03 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula, Lucas De Marchi
We'll be needing the version in more places in the future, so avoid the
need to pass it around. No functional changes.
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/display/intel_bios.c | 28 +++++++++++------------
drivers/gpu/drm/i915/i915_drv.h | 3 +++
2 files changed, 17 insertions(+), 14 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
index 802c228b2940..a8712fe8bf3e 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.c
+++ b/drivers/gpu/drm/i915/display/intel_bios.c
@@ -597,7 +597,7 @@ child_device_ptr(const struct bdb_general_definitions *defs, int i)
}
static void
-parse_sdvo_device_mapping(struct drm_i915_private *i915, u8 bdb_version)
+parse_sdvo_device_mapping(struct drm_i915_private *i915)
{
struct sdvo_device_mapping *mapping;
const struct display_device_data *devdata;
@@ -1760,8 +1760,7 @@ static enum port dvo_port_to_port(struct drm_i915_private *i915,
}
static void parse_ddi_port(struct drm_i915_private *i915,
- struct display_device_data *devdata,
- u8 bdb_version)
+ struct display_device_data *devdata)
{
const struct child_device_config *child = &devdata->child;
struct ddi_vbt_port_info *info;
@@ -1800,10 +1799,10 @@ static void parse_ddi_port(struct drm_i915_private *i915,
info->supports_dp = is_dp;
info->supports_edp = is_edp;
- if (bdb_version >= 195)
+ if (i915->vbt.version >= 195)
info->supports_typec_usb = child->dp_usb_type_c;
- if (bdb_version >= 209)
+ if (i915->vbt.version >= 209)
info->supports_tbt = child->tbt;
drm_dbg_kms(&i915->drm,
@@ -1834,7 +1833,7 @@ static void parse_ddi_port(struct drm_i915_private *i915,
sanitize_aux_ch(i915, port);
}
- if (bdb_version >= 158) {
+ if (i915->vbt.version >= 158) {
/* The VBT HDMI level shift values match the table we have. */
u8 hdmi_level_shift = child->hdmi_level_shifter_value;
drm_dbg_kms(&i915->drm,
@@ -1845,7 +1844,7 @@ static void parse_ddi_port(struct drm_i915_private *i915,
info->hdmi_level_shift_set = true;
}
- if (bdb_version >= 204) {
+ if (i915->vbt.version >= 204) {
int max_tmds_clock;
switch (child->hdmi_max_data_rate) {
@@ -1871,7 +1870,7 @@ static void parse_ddi_port(struct drm_i915_private *i915,
}
/* Parse the I_boost config for SKL and above */
- if (bdb_version >= 196 && child->iboost) {
+ if (i915->vbt.version >= 196 && child->iboost) {
info->dp_boost_level = translate_iboost(child->dp_iboost_level);
drm_dbg_kms(&i915->drm,
"Port %c VBT (e)DP boost level: %d\n",
@@ -1883,7 +1882,7 @@ static void parse_ddi_port(struct drm_i915_private *i915,
}
/* DP max link rate for CNL+ */
- if (bdb_version >= 216) {
+ if (i915->vbt.version >= 216) {
switch (child->dp_max_link_rate) {
default:
case VBT_DP_MAX_LINK_RATE_HBR3:
@@ -1907,18 +1906,18 @@ static void parse_ddi_port(struct drm_i915_private *i915,
info->child = child;
}
-static void parse_ddi_ports(struct drm_i915_private *i915, u8 bdb_version)
+static void parse_ddi_ports(struct drm_i915_private *i915)
{
struct display_device_data *devdata;
if (!HAS_DDI(i915) && !IS_CHERRYVIEW(i915))
return;
- if (bdb_version < 155)
+ if (i915->vbt.version < 155)
return;
list_for_each_entry(devdata, &i915->vbt.display_devices, node)
- parse_ddi_port(i915, devdata, bdb_version);
+ parse_ddi_port(i915, devdata);
}
static void
@@ -2229,6 +2228,7 @@ void intel_bios_init(struct drm_i915_private *i915)
}
bdb = get_bdb_header(vbt);
+ i915->vbt.version = bdb->version;
drm_dbg_kms(&i915->drm,
"VBT signature \"%.*s\", BDB version %d\n",
@@ -2252,8 +2252,8 @@ void intel_bios_init(struct drm_i915_private *i915)
parse_compression_parameters(i915, bdb);
/* Further processing on pre-parsed data */
- parse_sdvo_device_mapping(i915, bdb->version);
- parse_ddi_ports(i915, bdb->version);
+ parse_sdvo_device_mapping(i915);
+ parse_ddi_ports(i915);
out:
if (!vbt) {
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index f8413b3b9da8..62be1465f52b 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -615,6 +615,9 @@ enum psr_lines_to_wait {
};
struct intel_vbt_data {
+ /* bdb version */
+ u16 version;
+
struct drm_display_mode *lfp_lvds_vbt_mode; /* if any */
struct drm_display_mode *sdvo_lvds_vbt_mode; /* if any */
--
2.20.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [Intel-gfx] [PATCH 03/12] drm/i915/bios: limit default outputs by platform on missing VBT
2021-02-17 17:03 [Intel-gfx] [PATCH 00/12] drm/i915/bios: vbt child device rework Jani Nikula
2021-02-17 17:03 ` [Intel-gfx] [PATCH 01/12] drm/i915/bios: mass convert dev_priv to i915 Jani Nikula
2021-02-17 17:03 ` [Intel-gfx] [PATCH 02/12] drm/i915/bios: store bdb version in i915 Jani Nikula
@ 2021-02-17 17:03 ` Jani Nikula
2021-02-22 18:16 ` Ville Syrjälä
2021-02-17 17:03 ` [Intel-gfx] [PATCH 04/12] drm/i915/bios: limit default outputs to ports A through F Jani Nikula
` (12 subsequent siblings)
15 siblings, 1 reply; 40+ messages in thread
From: Jani Nikula @ 2021-02-17 17:03 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula, Lucas De Marchi
Pre-DDI and non-CHV aren't using the information created here anyway, so
don't bother setting the defaults for them. This should be a
non-functional change, but is separated here to catch any regressions in
a single commit.
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/display/intel_bios.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
index a8712fe8bf3e..e9cb15aa2f5a 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.c
+++ b/drivers/gpu/drm/i915/display/intel_bios.c
@@ -2058,6 +2058,9 @@ init_vbt_missing_defaults(struct drm_i915_private *i915)
{
enum port port;
+ if (!HAS_DDI(i915) && !IS_CHERRYVIEW(i915))
+ return;
+
for_each_port(port) {
struct ddi_vbt_port_info *info =
&i915->vbt.ddi_port_info[port];
--
2.20.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [Intel-gfx] [PATCH 04/12] drm/i915/bios: limit default outputs to ports A through F
2021-02-17 17:03 [Intel-gfx] [PATCH 00/12] drm/i915/bios: vbt child device rework Jani Nikula
` (2 preceding siblings ...)
2021-02-17 17:03 ` [Intel-gfx] [PATCH 03/12] drm/i915/bios: limit default outputs by platform on missing VBT Jani Nikula
@ 2021-02-17 17:03 ` Jani Nikula
2021-02-17 17:23 ` Lucas De Marchi
2021-02-17 17:03 ` [Intel-gfx] [PATCH 05/12] drm/i915/bios: create fake child devices on missing VBT Jani Nikula
` (11 subsequent siblings)
15 siblings, 1 reply; 40+ messages in thread
From: Jani Nikula @ 2021-02-17 17:03 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula, Lucas De Marchi
With the defaults limited to non-TypeC ports in commit 828ccb31cf41
("drm/i915/icl: Add TypeC ports only if VBT is present"), this should be
a no-op, but clarifies the code and prepares for subsequent changes.
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/display/intel_bios.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
index e9cb15aa2f5a..b9d99324d66d 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.c
+++ b/drivers/gpu/drm/i915/display/intel_bios.c
@@ -2057,11 +2057,12 @@ static void
init_vbt_missing_defaults(struct drm_i915_private *i915)
{
enum port port;
+ int ports = PORT_A | PORT_B | PORT_C | PORT_D | PORT_E | PORT_F;
if (!HAS_DDI(i915) && !IS_CHERRYVIEW(i915))
return;
- for_each_port(port) {
+ for_each_port_masked(port, ports) {
struct ddi_vbt_port_info *info =
&i915->vbt.ddi_port_info[port];
enum phy phy = intel_port_to_phy(i915, port);
--
2.20.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [Intel-gfx] [PATCH 05/12] drm/i915/bios: create fake child devices on missing VBT
2021-02-17 17:03 [Intel-gfx] [PATCH 00/12] drm/i915/bios: vbt child device rework Jani Nikula
` (3 preceding siblings ...)
2021-02-17 17:03 ` [Intel-gfx] [PATCH 04/12] drm/i915/bios: limit default outputs to ports A through F Jani Nikula
@ 2021-02-17 17:03 ` Jani Nikula
2021-03-09 0:51 ` Lucas De Marchi
2021-02-17 17:03 ` [Intel-gfx] [PATCH 06/12] drm/i915/bios: rename display_device_data to intel_bios_encoder_data Jani Nikula
` (10 subsequent siblings)
15 siblings, 1 reply; 40+ messages in thread
From: Jani Nikula @ 2021-02-17 17:03 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula, Lucas De Marchi
Instead of initialing data directly in ddi_port_info array, create fake
child devices for default outputs when the VBT is missing. This makes
further unification of output handling easier.
This will make intel_bios_is_port_present() return true for the fake
child devices. This may cause subtle changes in a handful of places.
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/display/intel_bios.c | 47 ++++++++++++++++++-----
1 file changed, 37 insertions(+), 10 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
index b9d99324d66d..59d315b395c2 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.c
+++ b/drivers/gpu/drm/i915/display/intel_bios.c
@@ -2063,8 +2063,8 @@ init_vbt_missing_defaults(struct drm_i915_private *i915)
return;
for_each_port_masked(port, ports) {
- struct ddi_vbt_port_info *info =
- &i915->vbt.ddi_port_info[port];
+ struct display_device_data *devdata;
+ struct child_device_config *child;
enum phy phy = intel_port_to_phy(i915, port);
/*
@@ -2074,11 +2074,38 @@ init_vbt_missing_defaults(struct drm_i915_private *i915)
if (intel_phy_is_tc(i915, phy))
continue;
- info->supports_dvi = (port != PORT_A && port != PORT_E);
- info->supports_hdmi = info->supports_dvi;
- info->supports_dp = (port != PORT_E);
- info->supports_edp = (port == PORT_A);
+ /* Create fake child device config */
+ devdata = kzalloc(sizeof(*devdata), GFP_KERNEL);
+ if (!devdata)
+ break;
+
+ child = &devdata->child;
+
+ if (port == PORT_F)
+ child->dvo_port = DVO_PORT_HDMIF;
+ else if (port == PORT_E)
+ child->dvo_port = DVO_PORT_HDMIE;
+ else
+ child->dvo_port = DVO_PORT_HDMIA + port;
+
+ if (port != PORT_A && port != PORT_E)
+ child->device_type |= DEVICE_TYPE_TMDS_DVI_SIGNALING;
+
+ if (port != PORT_E)
+ child->device_type |= DEVICE_TYPE_DISPLAYPORT_OUTPUT;
+
+ if (port == PORT_A)
+ child->device_type |= DEVICE_TYPE_INTERNAL_CONNECTOR;
+
+ list_add_tail(&devdata->node, &i915->vbt.display_devices);
+
+ drm_dbg_kms(&i915->drm,
+ "Generating default VBT child device with type 0x04%x on port %c\n",
+ child->device_type, port_name(port));
}
+
+ /* Bypass some minimum baseline VBT version checks */
+ i915->vbt.version = 155;
}
static const struct bdb_header *get_bdb_header(const struct vbt_header *vbt)
@@ -2255,10 +2282,6 @@ void intel_bios_init(struct drm_i915_private *i915)
/* Depends on child device list */
parse_compression_parameters(i915, bdb);
- /* Further processing on pre-parsed data */
- parse_sdvo_device_mapping(i915);
- parse_ddi_ports(i915);
-
out:
if (!vbt) {
drm_info(&i915->drm,
@@ -2266,6 +2289,10 @@ void intel_bios_init(struct drm_i915_private *i915)
init_vbt_missing_defaults(i915);
}
+ /* Further processing on pre-parsed or generated child device data */
+ parse_sdvo_device_mapping(i915);
+ parse_ddi_ports(i915);
+
kfree(oprom_vbt);
}
--
2.20.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [Intel-gfx] [PATCH 06/12] drm/i915/bios: rename display_device_data to intel_bios_encoder_data
2021-02-17 17:03 [Intel-gfx] [PATCH 00/12] drm/i915/bios: vbt child device rework Jani Nikula
` (4 preceding siblings ...)
2021-02-17 17:03 ` [Intel-gfx] [PATCH 05/12] drm/i915/bios: create fake child devices on missing VBT Jani Nikula
@ 2021-02-17 17:03 ` Jani Nikula
2021-02-17 17:44 ` Lucas De Marchi
2021-02-17 17:03 ` [Intel-gfx] [PATCH 07/12] drm/i915/bios: add i915 backpointer " Jani Nikula
` (9 subsequent siblings)
15 siblings, 1 reply; 40+ messages in thread
From: Jani Nikula @ 2021-02-17 17:03 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula, Lucas De Marchi
Make the naming suitable for exposing to the rest of the driver as an
opaque type. No functional changes.
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/display/intel_bios.c | 30 +++++++++++------------
1 file changed, 15 insertions(+), 15 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
index 59d315b395c2..0e882da165be 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.c
+++ b/drivers/gpu/drm/i915/display/intel_bios.c
@@ -59,7 +59,7 @@
*/
/* Wrapper for VBT child device config */
-struct display_device_data {
+struct intel_bios_encoder_data {
struct child_device_config child;
struct dsc_compression_parameters_entry *dsc;
struct list_head node;
@@ -600,7 +600,7 @@ static void
parse_sdvo_device_mapping(struct drm_i915_private *i915)
{
struct sdvo_device_mapping *mapping;
- const struct display_device_data *devdata;
+ const struct intel_bios_encoder_data *devdata;
const struct child_device_config *child;
int count = 0;
@@ -1439,7 +1439,7 @@ parse_compression_parameters(struct drm_i915_private *i915,
const struct bdb_header *bdb)
{
const struct bdb_compression_parameters *params;
- struct display_device_data *devdata;
+ struct intel_bios_encoder_data *devdata;
const struct child_device_config *child;
u16 block_size;
int index;
@@ -1760,7 +1760,7 @@ static enum port dvo_port_to_port(struct drm_i915_private *i915,
}
static void parse_ddi_port(struct drm_i915_private *i915,
- struct display_device_data *devdata)
+ struct intel_bios_encoder_data *devdata)
{
const struct child_device_config *child = &devdata->child;
struct ddi_vbt_port_info *info;
@@ -1908,7 +1908,7 @@ static void parse_ddi_port(struct drm_i915_private *i915,
static void parse_ddi_ports(struct drm_i915_private *i915)
{
- struct display_device_data *devdata;
+ struct intel_bios_encoder_data *devdata;
if (!HAS_DDI(i915) && !IS_CHERRYVIEW(i915))
return;
@@ -1925,7 +1925,7 @@ parse_general_definitions(struct drm_i915_private *i915,
const struct bdb_header *bdb)
{
const struct bdb_general_definitions *defs;
- struct display_device_data *devdata;
+ struct intel_bios_encoder_data *devdata;
const struct child_device_config *child;
int i, child_device_num;
u8 expected_size;
@@ -2063,7 +2063,7 @@ init_vbt_missing_defaults(struct drm_i915_private *i915)
return;
for_each_port_masked(port, ports) {
- struct display_device_data *devdata;
+ struct intel_bios_encoder_data *devdata;
struct child_device_config *child;
enum phy phy = intel_port_to_phy(i915, port);
@@ -2302,7 +2302,7 @@ void intel_bios_init(struct drm_i915_private *i915)
*/
void intel_bios_driver_remove(struct drm_i915_private *i915)
{
- struct display_device_data *devdata, *n;
+ struct intel_bios_encoder_data *devdata, *n;
list_for_each_entry_safe(devdata, n, &i915->vbt.display_devices, node) {
list_del(&devdata->node);
@@ -2333,7 +2333,7 @@ void intel_bios_driver_remove(struct drm_i915_private *i915)
*/
bool intel_bios_is_tv_present(struct drm_i915_private *i915)
{
- const struct display_device_data *devdata;
+ const struct intel_bios_encoder_data *devdata;
const struct child_device_config *child;
if (!i915->vbt.int_tv_support)
@@ -2376,7 +2376,7 @@ bool intel_bios_is_tv_present(struct drm_i915_private *i915)
*/
bool intel_bios_is_lvds_present(struct drm_i915_private *i915, u8 *i2c_pin)
{
- const struct display_device_data *devdata;
+ const struct intel_bios_encoder_data *devdata;
const struct child_device_config *child;
if (list_empty(&i915->vbt.display_devices))
@@ -2425,7 +2425,7 @@ bool intel_bios_is_lvds_present(struct drm_i915_private *i915, u8 *i2c_pin)
*/
bool intel_bios_is_port_present(struct drm_i915_private *i915, enum port port)
{
- const struct display_device_data *devdata;
+ const struct intel_bios_encoder_data *devdata;
const struct child_device_config *child;
static const struct {
u16 dp, hdmi;
@@ -2471,7 +2471,7 @@ bool intel_bios_is_port_present(struct drm_i915_private *i915, enum port port)
*/
bool intel_bios_is_port_edp(struct drm_i915_private *i915, enum port port)
{
- const struct display_device_data *devdata;
+ const struct intel_bios_encoder_data *devdata;
const struct child_device_config *child;
static const short port_mapping[] = {
[PORT_B] = DVO_PORT_DPB,
@@ -2534,7 +2534,7 @@ static bool child_dev_is_dp_dual_mode(const struct child_device_config *child,
bool intel_bios_is_port_dp_dual_mode(struct drm_i915_private *i915,
enum port port)
{
- const struct display_device_data *devdata;
+ const struct intel_bios_encoder_data *devdata;
list_for_each_entry(devdata, &i915->vbt.display_devices, node) {
if (child_dev_is_dp_dual_mode(&devdata->child, port))
@@ -2554,7 +2554,7 @@ bool intel_bios_is_port_dp_dual_mode(struct drm_i915_private *i915,
bool intel_bios_is_dsi_present(struct drm_i915_private *i915,
enum port *port)
{
- const struct display_device_data *devdata;
+ const struct intel_bios_encoder_data *devdata;
const struct child_device_config *child;
u8 dvo_port;
@@ -2654,7 +2654,7 @@ bool intel_bios_get_dsc_params(struct intel_encoder *encoder,
int dsc_max_bpc)
{
struct drm_i915_private *i915 = to_i915(encoder->base.dev);
- const struct display_device_data *devdata;
+ const struct intel_bios_encoder_data *devdata;
const struct child_device_config *child;
list_for_each_entry(devdata, &i915->vbt.display_devices, node) {
--
2.20.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [Intel-gfx] [PATCH 07/12] drm/i915/bios: add i915 backpointer to intel_bios_encoder_data
2021-02-17 17:03 [Intel-gfx] [PATCH 00/12] drm/i915/bios: vbt child device rework Jani Nikula
` (5 preceding siblings ...)
2021-02-17 17:03 ` [Intel-gfx] [PATCH 06/12] drm/i915/bios: rename display_device_data to intel_bios_encoder_data Jani Nikula
@ 2021-02-17 17:03 ` Jani Nikula
2021-02-17 17:03 ` [Intel-gfx] [PATCH 08/12] drm/i915/vbt: add helper functions to check output support Jani Nikula
` (8 subsequent siblings)
15 siblings, 0 replies; 40+ messages in thread
From: Jani Nikula @ 2021-02-17 17:03 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula, Lucas De Marchi
We'll be needing it in the future.
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/display/intel_bios.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
index 0e882da165be..193772f42582 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.c
+++ b/drivers/gpu/drm/i915/display/intel_bios.c
@@ -60,6 +60,8 @@
/* Wrapper for VBT child device config */
struct intel_bios_encoder_data {
+ struct drm_i915_private *i915;
+
struct child_device_config child;
struct dsc_compression_parameters_entry *dsc;
struct list_head node;
@@ -2002,6 +2004,8 @@ parse_general_definitions(struct drm_i915_private *i915,
if (!devdata)
break;
+ devdata->i915 = i915;
+
/*
* Copy as much as we know (sizeof) and is available
* (child_dev_size) of the child device config. Accessing the
@@ -2079,6 +2083,7 @@ init_vbt_missing_defaults(struct drm_i915_private *i915)
if (!devdata)
break;
+ devdata->i915 = i915;
child = &devdata->child;
if (port == PORT_F)
--
2.20.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [Intel-gfx] [PATCH 08/12] drm/i915/vbt: add helper functions to check output support
2021-02-17 17:03 [Intel-gfx] [PATCH 00/12] drm/i915/bios: vbt child device rework Jani Nikula
` (6 preceding siblings ...)
2021-02-17 17:03 ` [Intel-gfx] [PATCH 07/12] drm/i915/bios: add i915 backpointer " Jani Nikula
@ 2021-02-17 17:03 ` Jani Nikula
2021-02-17 17:46 ` Lucas De Marchi
2021-02-17 17:03 ` [Intel-gfx] [PATCH 09/12] drm/i915/bios: save a higher level pointer in ddi_vbt_port_info[] Jani Nikula
` (7 subsequent siblings)
15 siblings, 1 reply; 40+ messages in thread
From: Jani Nikula @ 2021-02-17 17:03 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula, Lucas De Marchi
These will be exposed to the rest of the driver and replace other
functions. Everything will operate on the child devices.
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/display/intel_bios.c | 66 ++++++++++++++++++-----
1 file changed, 54 insertions(+), 12 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
index 193772f42582..739ef5d91907 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.c
+++ b/drivers/gpu/drm/i915/display/intel_bios.c
@@ -64,6 +64,7 @@ struct intel_bios_encoder_data {
struct child_device_config child;
struct dsc_compression_parameters_entry *dsc;
+
struct list_head node;
};
@@ -1761,6 +1762,53 @@ static enum port dvo_port_to_port(struct drm_i915_private *i915,
dvo_port);
}
+static void sanitize_device_type(struct intel_bios_encoder_data *devdata,
+ enum port port)
+{
+ struct drm_i915_private *i915 = devdata->i915;
+ bool is_hdmi;
+
+ if (port != PORT_A || INTEL_GEN(i915) >= 12)
+ return;
+
+ if (!(devdata->child.device_type & DEVICE_TYPE_TMDS_DVI_SIGNALING))
+ return;
+
+ is_hdmi = !(devdata->child.device_type & DEVICE_TYPE_NOT_HDMI_OUTPUT);
+
+ drm_dbg_kms(&i915->drm, "VBT claims port A supports DVI%s, ignoring\n",
+ is_hdmi ? "/HDMI" : "");
+
+ devdata->child.device_type &= ~DEVICE_TYPE_TMDS_DVI_SIGNALING;
+ devdata->child.device_type |= DEVICE_TYPE_NOT_HDMI_OUTPUT;
+}
+
+static bool
+intel_bios_encoder_supports_dvi(const struct intel_bios_encoder_data *devdata)
+{
+ return devdata->child.device_type & DEVICE_TYPE_TMDS_DVI_SIGNALING;
+}
+
+static bool
+intel_bios_encoder_supports_hdmi(const struct intel_bios_encoder_data *devdata)
+{
+ return intel_bios_encoder_supports_dvi(devdata) &&
+ (devdata->child.device_type & DEVICE_TYPE_NOT_HDMI_OUTPUT) == 0;
+}
+
+static bool
+intel_bios_encoder_supports_dp(const struct intel_bios_encoder_data *devdata)
+{
+ return devdata->child.device_type & DEVICE_TYPE_DISPLAYPORT_OUTPUT;
+}
+
+static bool
+intel_bios_encoder_supports_edp(const struct intel_bios_encoder_data *devdata)
+{
+ return intel_bios_encoder_supports_dp(devdata) &&
+ devdata->child.device_type & DEVICE_TYPE_INTERNAL_CONNECTOR;
+}
+
static void parse_ddi_port(struct drm_i915_private *i915,
struct intel_bios_encoder_data *devdata)
{
@@ -1782,19 +1830,13 @@ static void parse_ddi_port(struct drm_i915_private *i915,
return;
}
- is_dvi = child->device_type & DEVICE_TYPE_TMDS_DVI_SIGNALING;
- is_dp = child->device_type & DEVICE_TYPE_DISPLAYPORT_OUTPUT;
- is_crt = child->device_type & DEVICE_TYPE_ANALOG_OUTPUT;
- is_hdmi = is_dvi && (child->device_type & DEVICE_TYPE_NOT_HDMI_OUTPUT) == 0;
- is_edp = is_dp && (child->device_type & DEVICE_TYPE_INTERNAL_CONNECTOR);
+ sanitize_device_type(devdata, port);
- if (port == PORT_A && is_dvi && INTEL_GEN(i915) < 12) {
- drm_dbg_kms(&i915->drm,
- "VBT claims port A supports DVI%s, ignoring\n",
- is_hdmi ? "/HDMI" : "");
- is_dvi = false;
- is_hdmi = false;
- }
+ is_dvi = intel_bios_encoder_supports_dvi(devdata);
+ is_dp = intel_bios_encoder_supports_dp(devdata);
+ is_crt = child->device_type & DEVICE_TYPE_ANALOG_OUTPUT;
+ is_hdmi = intel_bios_encoder_supports_hdmi(devdata);
+ is_edp = intel_bios_encoder_supports_edp(devdata);
info->supports_dvi = is_dvi;
info->supports_hdmi = is_hdmi;
--
2.20.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [Intel-gfx] [PATCH 09/12] drm/i915/bios: save a higher level pointer in ddi_vbt_port_info[]
2021-02-17 17:03 [Intel-gfx] [PATCH 00/12] drm/i915/bios: vbt child device rework Jani Nikula
` (7 preceding siblings ...)
2021-02-17 17:03 ` [Intel-gfx] [PATCH 08/12] drm/i915/vbt: add helper functions to check output support Jani Nikula
@ 2021-02-17 17:03 ` Jani Nikula
2021-03-15 17:36 ` Lucas De Marchi
2021-02-17 17:03 ` [Intel-gfx] [PATCH 10/12] drm/i915/bios: start using the intel_bios_encoder_data directly Jani Nikula
` (6 subsequent siblings)
15 siblings, 1 reply; 40+ messages in thread
From: Jani Nikula @ 2021-02-17 17:03 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula, Lucas De Marchi
We'll be needing the intel_bios_encoder_data pointer going forward, and
it's just easier to store the higher level pointer in the
ddi_vbt_port_info[] array.
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/display/intel_bios.c | 28 +++++++++++------------
drivers/gpu/drm/i915/display/intel_bios.h | 1 +
drivers/gpu/drm/i915/i915_drv.h | 2 +-
3 files changed, 16 insertions(+), 15 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
index 739ef5d91907..47e9c609f82a 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.c
+++ b/drivers/gpu/drm/i915/display/intel_bios.c
@@ -1511,7 +1511,7 @@ static enum port get_port_by_ddc_pin(struct drm_i915_private *i915, u8 ddc_pin)
for_each_port(port) {
info = &i915->vbt.ddi_port_info[port];
- if (info->child && ddc_pin == info->alternate_ddc_pin)
+ if (info->devdata && ddc_pin == info->alternate_ddc_pin)
return port;
}
@@ -1563,7 +1563,7 @@ static enum port get_port_by_aux_ch(struct drm_i915_private *i915, u8 aux_ch)
for_each_port(port) {
info = &i915->vbt.ddi_port_info[port];
- if (info->child && aux_ch == info->alternate_aux_channel)
+ if (info->devdata && aux_ch == info->alternate_aux_channel)
return port;
}
@@ -1823,7 +1823,7 @@ static void parse_ddi_port(struct drm_i915_private *i915,
info = &i915->vbt.ddi_port_info[port];
- if (info->child) {
+ if (info->devdata) {
drm_dbg_kms(&i915->drm,
"More than one child device for port %c in VBT, using the first.\n",
port_name(port));
@@ -1947,7 +1947,7 @@ static void parse_ddi_port(struct drm_i915_private *i915,
port_name(port), info->dp_max_link_rate);
}
- info->child = child;
+ info->devdata = devdata;
}
static void parse_ddi_ports(struct drm_i915_private *i915)
@@ -2488,7 +2488,7 @@ bool intel_bios_is_port_present(struct drm_i915_private *i915, enum port port)
const struct ddi_vbt_port_info *port_info =
&i915->vbt.ddi_port_info[port];
- return port_info->child;
+ return port_info->devdata;
}
/* FIXME maybe deal with port A as well? */
@@ -2735,13 +2735,13 @@ bool
intel_bios_is_port_hpd_inverted(const struct drm_i915_private *i915,
enum port port)
{
- const struct child_device_config *child =
- i915->vbt.ddi_port_info[port].child;
+ const struct intel_bios_encoder_data *devdata =
+ i915->vbt.ddi_port_info[port].devdata;
if (drm_WARN_ON_ONCE(&i915->drm, !IS_GEN9_LP(i915)))
return false;
- return child && child->hpd_invert;
+ return devdata && devdata->child.hpd_invert;
}
/**
@@ -2755,10 +2755,10 @@ bool
intel_bios_is_lspcon_present(const struct drm_i915_private *i915,
enum port port)
{
- const struct child_device_config *child =
- i915->vbt.ddi_port_info[port].child;
+ const struct intel_bios_encoder_data *devdata =
+ i915->vbt.ddi_port_info[port].devdata;
- return HAS_LSPCON(i915) && child && child->lspcon;
+ return HAS_LSPCON(i915) && devdata && devdata->child.lspcon;
}
/**
@@ -2772,10 +2772,10 @@ bool
intel_bios_is_lane_reversal_needed(const struct drm_i915_private *i915,
enum port port)
{
- const struct child_device_config *child =
- i915->vbt.ddi_port_info[port].child;
+ const struct intel_bios_encoder_data *devdata =
+ i915->vbt.ddi_port_info[port].devdata;
- return child && child->lane_reversal;
+ return devdata && devdata->child.lane_reversal;
}
enum aux_ch intel_bios_port_aux_ch(struct drm_i915_private *i915,
diff --git a/drivers/gpu/drm/i915/display/intel_bios.h b/drivers/gpu/drm/i915/display/intel_bios.h
index f25190ecfe97..6591cf7758f2 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.h
+++ b/drivers/gpu/drm/i915/display/intel_bios.h
@@ -33,6 +33,7 @@
#include <linux/types.h>
struct drm_i915_private;
+struct intel_bios_encoder_data;
struct intel_crtc_state;
struct intel_encoder;
enum port;
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 62be1465f52b..e2c5ba61b370 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -584,7 +584,7 @@ i915_fence_timeout(const struct drm_i915_private *i915)
struct ddi_vbt_port_info {
/* Non-NULL if port present. */
- const struct child_device_config *child;
+ const struct intel_bios_encoder_data *devdata;
int max_tmds_clock;
--
2.20.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [Intel-gfx] [PATCH 10/12] drm/i915/bios: start using the intel_bios_encoder_data directly
2021-02-17 17:03 [Intel-gfx] [PATCH 00/12] drm/i915/bios: vbt child device rework Jani Nikula
` (8 preceding siblings ...)
2021-02-17 17:03 ` [Intel-gfx] [PATCH 09/12] drm/i915/bios: save a higher level pointer in ddi_vbt_port_info[] Jani Nikula
@ 2021-02-17 17:03 ` Jani Nikula
2021-03-15 17:41 ` Lucas De Marchi
2021-02-17 17:03 ` [Intel-gfx] [PATCH 11/12] drm/i915/bios: start using intel_bios_encoder_data for Type-C USB and TBT Jani Nikula
` (5 subsequent siblings)
15 siblings, 1 reply; 40+ messages in thread
From: Jani Nikula @ 2021-02-17 17:03 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula, Lucas De Marchi
Start using struct intel_bios_encoder_data directly. We'll start
sanitizing the child device data directly as well, instead of the cached
data in ddi_port_info[]. The one downside here is having to store a
non-const pointer back to intel_bios_encoder_data.
Eventually we'll be able to have a direct pointer from encoder to
intel_bios_encoder_data, removing the need to go through the
ddi_port_info[] array altogether. And we'll be able to remove the cached
data in ddi_port_info[].
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/display/intel_bios.c | 37 +++++++++--------------
drivers/gpu/drm/i915/display/intel_bios.h | 10 ++++--
drivers/gpu/drm/i915/display/intel_ddi.c | 15 +++++++--
drivers/gpu/drm/i915/i915_drv.h | 4 +--
4 files changed, 35 insertions(+), 31 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
index 47e9c609f82a..d26304ebc6b9 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.c
+++ b/drivers/gpu/drm/i915/display/intel_bios.c
@@ -1529,6 +1529,8 @@ static void sanitize_ddc_pin(struct drm_i915_private *i915,
p = get_port_by_ddc_pin(i915, info->alternate_ddc_pin);
if (p != PORT_NONE) {
+ struct child_device_config *child;
+
drm_dbg_kms(&i915->drm,
"port %c trying to use the same DDC pin (0x%x) as port %c, "
"disabling port %c DVI/HDMI support\n",
@@ -1548,9 +1550,11 @@ static void sanitize_ddc_pin(struct drm_i915_private *i915,
* we must pick port E :(
*/
info = &i915->vbt.ddi_port_info[p];
+ child = &info->devdata->child;
+
+ child->device_type &= ~DEVICE_TYPE_TMDS_DVI_SIGNALING;
+ child->device_type |= DEVICE_TYPE_NOT_HDMI_OUTPUT;
- info->supports_dvi = false;
- info->supports_hdmi = false;
info->alternate_ddc_pin = 0;
}
}
@@ -1783,20 +1787,20 @@ static void sanitize_device_type(struct intel_bios_encoder_data *devdata,
devdata->child.device_type |= DEVICE_TYPE_NOT_HDMI_OUTPUT;
}
-static bool
+bool
intel_bios_encoder_supports_dvi(const struct intel_bios_encoder_data *devdata)
{
return devdata->child.device_type & DEVICE_TYPE_TMDS_DVI_SIGNALING;
}
-static bool
+bool
intel_bios_encoder_supports_hdmi(const struct intel_bios_encoder_data *devdata)
{
return intel_bios_encoder_supports_dvi(devdata) &&
(devdata->child.device_type & DEVICE_TYPE_NOT_HDMI_OUTPUT) == 0;
}
-static bool
+bool
intel_bios_encoder_supports_dp(const struct intel_bios_encoder_data *devdata)
{
return devdata->child.device_type & DEVICE_TYPE_DISPLAYPORT_OUTPUT;
@@ -1838,8 +1842,6 @@ static void parse_ddi_port(struct drm_i915_private *i915,
is_hdmi = intel_bios_encoder_supports_hdmi(devdata);
is_edp = intel_bios_encoder_supports_edp(devdata);
- info->supports_dvi = is_dvi;
- info->supports_hdmi = is_hdmi;
info->supports_dp = is_dp;
info->supports_edp = is_edp;
@@ -2901,21 +2903,6 @@ int intel_bios_alternate_ddc_pin(struct intel_encoder *encoder)
return i915->vbt.ddi_port_info[encoder->port].alternate_ddc_pin;
}
-bool intel_bios_port_supports_dvi(struct drm_i915_private *i915, enum port port)
-{
- return i915->vbt.ddi_port_info[port].supports_dvi;
-}
-
-bool intel_bios_port_supports_hdmi(struct drm_i915_private *i915, enum port port)
-{
- return i915->vbt.ddi_port_info[port].supports_hdmi;
-}
-
-bool intel_bios_port_supports_dp(struct drm_i915_private *i915, enum port port)
-{
- return i915->vbt.ddi_port_info[port].supports_dp;
-}
-
bool intel_bios_port_supports_typec_usb(struct drm_i915_private *i915,
enum port port)
{
@@ -2926,3 +2913,9 @@ bool intel_bios_port_supports_tbt(struct drm_i915_private *i915, enum port port)
{
return i915->vbt.ddi_port_info[port].supports_tbt;
}
+
+const struct intel_bios_encoder_data *
+intel_bios_encoder_data_lookup(struct drm_i915_private *i915, enum port port)
+{
+ return i915->vbt.ddi_port_info[port].devdata;
+}
diff --git a/drivers/gpu/drm/i915/display/intel_bios.h b/drivers/gpu/drm/i915/display/intel_bios.h
index 6591cf7758f2..18b5c2976bd4 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.h
+++ b/drivers/gpu/drm/i915/display/intel_bios.h
@@ -254,10 +254,14 @@ int intel_bios_dp_boost_level(struct intel_encoder *encoder);
int intel_bios_hdmi_boost_level(struct intel_encoder *encoder);
int intel_bios_dp_max_link_rate(struct intel_encoder *encoder);
int intel_bios_alternate_ddc_pin(struct intel_encoder *encoder);
-bool intel_bios_port_supports_dvi(struct drm_i915_private *i915, enum port port);
-bool intel_bios_port_supports_hdmi(struct drm_i915_private *i915, enum port port);
-bool intel_bios_port_supports_dp(struct drm_i915_private *i915, enum port port);
bool intel_bios_port_supports_typec_usb(struct drm_i915_private *i915, enum port port);
bool intel_bios_port_supports_tbt(struct drm_i915_private *i915, enum port port);
+const struct intel_bios_encoder_data *
+intel_bios_encoder_data_lookup(struct drm_i915_private *i915, enum port port);
+
+bool intel_bios_encoder_supports_dvi(const struct intel_bios_encoder_data *devdata);
+bool intel_bios_encoder_supports_hdmi(const struct intel_bios_encoder_data *devdata);
+bool intel_bios_encoder_supports_dp(const struct intel_bios_encoder_data *devdata);
+
#endif /* _INTEL_BIOS_H_ */
diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
index eeae78097a20..1a2f7725f8ec 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -3973,6 +3973,7 @@ void intel_ddi_init(struct drm_i915_private *dev_priv, enum port port)
{
struct intel_digital_port *dig_port;
struct intel_encoder *encoder;
+ const struct intel_bios_encoder_data *devdata;
bool init_hdmi, init_dp;
enum phy phy = intel_port_to_phy(dev_priv, port);
@@ -3988,9 +3989,17 @@ void intel_ddi_init(struct drm_i915_private *dev_priv, enum port port)
return;
}
- init_hdmi = intel_bios_port_supports_dvi(dev_priv, port) ||
- intel_bios_port_supports_hdmi(dev_priv, port);
- init_dp = intel_bios_port_supports_dp(dev_priv, port);
+ devdata = intel_bios_encoder_data_lookup(dev_priv, port);
+ if (!devdata) {
+ drm_dbg_kms(&dev_priv->drm,
+ "VBT says port %c is not present\n",
+ port_name(port));
+ return;
+ }
+
+ init_hdmi = intel_bios_encoder_supports_dvi(devdata) ||
+ intel_bios_encoder_supports_hdmi(devdata);
+ init_dp = intel_bios_encoder_supports_dp(devdata);
if (intel_bios_is_lspcon_present(dev_priv, port)) {
/*
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index e2c5ba61b370..57712a617839 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -584,7 +584,7 @@ i915_fence_timeout(const struct drm_i915_private *i915)
struct ddi_vbt_port_info {
/* Non-NULL if port present. */
- const struct intel_bios_encoder_data *devdata;
+ struct intel_bios_encoder_data *devdata;
int max_tmds_clock;
@@ -592,8 +592,6 @@ struct ddi_vbt_port_info {
u8 hdmi_level_shift;
u8 hdmi_level_shift_set:1;
- u8 supports_dvi:1;
- u8 supports_hdmi:1;
u8 supports_dp:1;
u8 supports_edp:1;
u8 supports_typec_usb:1;
--
2.20.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [Intel-gfx] [PATCH 11/12] drm/i915/bios: start using intel_bios_encoder_data for Type-C USB and TBT
2021-02-17 17:03 [Intel-gfx] [PATCH 00/12] drm/i915/bios: vbt child device rework Jani Nikula
` (9 preceding siblings ...)
2021-02-17 17:03 ` [Intel-gfx] [PATCH 10/12] drm/i915/bios: start using the intel_bios_encoder_data directly Jani Nikula
@ 2021-02-17 17:03 ` Jani Nikula
2021-03-15 17:49 ` Lucas De Marchi
2021-02-17 17:03 ` [Intel-gfx] [PATCH 12/12] drm/i915/bios: add intel_bios_encoder_data to encoder, use for iboost Jani Nikula
` (4 subsequent siblings)
15 siblings, 1 reply; 40+ messages in thread
From: Jani Nikula @ 2021-02-17 17:03 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula, Lucas De Marchi
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/display/intel_bios.c | 20 ++++++++------------
drivers/gpu/drm/i915/display/intel_bios.h | 2 ++
drivers/gpu/drm/i915/display/intel_ddi.c | 4 ++--
3 files changed, 12 insertions(+), 14 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
index d26304ebc6b9..13a38cd01692 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.c
+++ b/drivers/gpu/drm/i915/display/intel_bios.c
@@ -1818,7 +1818,7 @@ static void parse_ddi_port(struct drm_i915_private *i915,
{
const struct child_device_config *child = &devdata->child;
struct ddi_vbt_port_info *info;
- bool is_dvi, is_hdmi, is_dp, is_edp, is_crt;
+ bool is_dvi, is_hdmi, is_dp, is_edp, is_crt, supports_typec_usb, supports_tbt;
enum port port;
port = dvo_port_to_port(i915, child->dvo_port);
@@ -1845,17 +1845,14 @@ static void parse_ddi_port(struct drm_i915_private *i915,
info->supports_dp = is_dp;
info->supports_edp = is_edp;
- if (i915->vbt.version >= 195)
- info->supports_typec_usb = child->dp_usb_type_c;
-
- if (i915->vbt.version >= 209)
- info->supports_tbt = child->tbt;
+ supports_typec_usb = intel_bios_encoder_supports_typec_usb(devdata);
+ supports_tbt = intel_bios_encoder_supports_tbt(devdata);
drm_dbg_kms(&i915->drm,
"Port %c VBT info: CRT:%d DVI:%d HDMI:%d DP:%d eDP:%d LSPCON:%d USB-Type-C:%d TBT:%d DSC:%d\n",
port_name(port), is_crt, is_dvi, is_hdmi, is_dp, is_edp,
HAS_LSPCON(i915) && child->lspcon,
- info->supports_typec_usb, info->supports_tbt,
+ supports_typec_usb, supports_tbt,
devdata->dsc != NULL);
if (is_dvi) {
@@ -2903,15 +2900,14 @@ int intel_bios_alternate_ddc_pin(struct intel_encoder *encoder)
return i915->vbt.ddi_port_info[encoder->port].alternate_ddc_pin;
}
-bool intel_bios_port_supports_typec_usb(struct drm_i915_private *i915,
- enum port port)
+bool intel_bios_encoder_supports_typec_usb(const struct intel_bios_encoder_data *devdata)
{
- return i915->vbt.ddi_port_info[port].supports_typec_usb;
+ return devdata->i915->vbt.version >= 195 && devdata->child.dp_usb_type_c;
}
-bool intel_bios_port_supports_tbt(struct drm_i915_private *i915, enum port port)
+bool intel_bios_encoder_supports_tbt(const struct intel_bios_encoder_data *devdata)
{
- return i915->vbt.ddi_port_info[port].supports_tbt;
+ return devdata->i915->vbt.version >= 209 && devdata->child.tbt;
}
const struct intel_bios_encoder_data *
diff --git a/drivers/gpu/drm/i915/display/intel_bios.h b/drivers/gpu/drm/i915/display/intel_bios.h
index 18b5c2976bd4..f82cef29ab5a 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.h
+++ b/drivers/gpu/drm/i915/display/intel_bios.h
@@ -263,5 +263,7 @@ intel_bios_encoder_data_lookup(struct drm_i915_private *i915, enum port port);
bool intel_bios_encoder_supports_dvi(const struct intel_bios_encoder_data *devdata);
bool intel_bios_encoder_supports_hdmi(const struct intel_bios_encoder_data *devdata);
bool intel_bios_encoder_supports_dp(const struct intel_bios_encoder_data *devdata);
+bool intel_bios_encoder_supports_typec_usb(const struct intel_bios_encoder_data *devdata);
+bool intel_bios_encoder_supports_tbt(const struct intel_bios_encoder_data *devdata);
#endif /* _INTEL_BIOS_H_ */
diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
index 1a2f7725f8ec..0bf783f67a59 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -4150,8 +4150,8 @@ void intel_ddi_init(struct drm_i915_private *dev_priv, enum port port)
if (intel_phy_is_tc(dev_priv, phy)) {
bool is_legacy =
- !intel_bios_port_supports_typec_usb(dev_priv, port) &&
- !intel_bios_port_supports_tbt(dev_priv, port);
+ !intel_bios_encoder_supports_typec_usb(devdata) &&
+ !intel_bios_encoder_supports_tbt(devdata);
intel_tc_port_init(dig_port, is_legacy);
--
2.20.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [Intel-gfx] [PATCH 12/12] drm/i915/bios: add intel_bios_encoder_data to encoder, use for iboost
2021-02-17 17:03 [Intel-gfx] [PATCH 00/12] drm/i915/bios: vbt child device rework Jani Nikula
` (10 preceding siblings ...)
2021-02-17 17:03 ` [Intel-gfx] [PATCH 11/12] drm/i915/bios: start using intel_bios_encoder_data for Type-C USB and TBT Jani Nikula
@ 2021-02-17 17:03 ` Jani Nikula
2021-03-15 17:52 ` Lucas De Marchi
2021-02-17 17:20 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for drm/i915/bios: vbt child device rework Patchwork
` (3 subsequent siblings)
15 siblings, 1 reply; 40+ messages in thread
From: Jani Nikula @ 2021-02-17 17:03 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula, Lucas De Marchi
Add intel_bios_encoder_data pointer to encoder, and use it for hdmi and
dp iboost. For starters, we only set the encoder->devdata for DDI
encoders, i.e. we can only use it for data that is used by DDI encoders.
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/display/intel_bios.c | 30 +++++++++++--------
drivers/gpu/drm/i915/display/intel_bios.h | 4 +--
drivers/gpu/drm/i915/display/intel_ddi.c | 9 +++---
.../drm/i915/display/intel_display_types.h | 3 ++
drivers/gpu/drm/i915/i915_drv.h | 2 --
5 files changed, 27 insertions(+), 21 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
index 13a38cd01692..e1fcaf567222 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.c
+++ b/drivers/gpu/drm/i915/display/intel_bios.c
@@ -1819,6 +1819,7 @@ static void parse_ddi_port(struct drm_i915_private *i915,
const struct child_device_config *child = &devdata->child;
struct ddi_vbt_port_info *info;
bool is_dvi, is_hdmi, is_dp, is_edp, is_crt, supports_typec_usb, supports_tbt;
+ int dp_boost_level, hdmi_boost_level;
enum port port;
port = dvo_port_to_port(i915, child->dvo_port);
@@ -1912,17 +1913,18 @@ static void parse_ddi_port(struct drm_i915_private *i915,
info->max_tmds_clock = max_tmds_clock;
}
- /* Parse the I_boost config for SKL and above */
- if (i915->vbt.version >= 196 && child->iboost) {
- info->dp_boost_level = translate_iboost(child->dp_iboost_level);
+ /* I_boost config for SKL and above */
+ dp_boost_level = intel_bios_encoder_dp_boost_level(devdata);
+ if (dp_boost_level)
drm_dbg_kms(&i915->drm,
"Port %c VBT (e)DP boost level: %d\n",
- port_name(port), info->dp_boost_level);
- info->hdmi_boost_level = translate_iboost(child->hdmi_iboost_level);
+ port_name(port), dp_boost_level);
+
+ hdmi_boost_level = intel_bios_encoder_hdmi_boost_level(devdata);
+ if (hdmi_boost_level)
drm_dbg_kms(&i915->drm,
"Port %c VBT HDMI boost level: %d\n",
- port_name(port), info->hdmi_boost_level);
- }
+ port_name(port), hdmi_boost_level);
/* DP max link rate for CNL+ */
if (i915->vbt.version >= 216) {
@@ -2872,18 +2874,20 @@ int intel_bios_hdmi_level_shift(struct intel_encoder *encoder)
return info->hdmi_level_shift_set ? info->hdmi_level_shift : -1;
}
-int intel_bios_dp_boost_level(struct intel_encoder *encoder)
+int intel_bios_encoder_dp_boost_level(const struct intel_bios_encoder_data *devdata)
{
- struct drm_i915_private *i915 = to_i915(encoder->base.dev);
+ if (!devdata || devdata->i915->vbt.version < 196 || !devdata->child.iboost)
+ return 0;
- return i915->vbt.ddi_port_info[encoder->port].dp_boost_level;
+ return translate_iboost(devdata->child.dp_iboost_level);
}
-int intel_bios_hdmi_boost_level(struct intel_encoder *encoder)
+int intel_bios_encoder_hdmi_boost_level(const struct intel_bios_encoder_data *devdata)
{
- struct drm_i915_private *i915 = to_i915(encoder->base.dev);
+ if (!devdata || devdata->i915->vbt.version < 196 || !devdata->child.iboost)
+ return 0;
- return i915->vbt.ddi_port_info[encoder->port].hdmi_boost_level;
+ return translate_iboost(devdata->child.hdmi_iboost_level);
}
int intel_bios_dp_max_link_rate(struct intel_encoder *encoder)
diff --git a/drivers/gpu/drm/i915/display/intel_bios.h b/drivers/gpu/drm/i915/display/intel_bios.h
index f82cef29ab5a..4709c4d29805 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.h
+++ b/drivers/gpu/drm/i915/display/intel_bios.h
@@ -250,8 +250,6 @@ bool intel_bios_get_dsc_params(struct intel_encoder *encoder,
int dsc_max_bpc);
int intel_bios_max_tmds_clock(struct intel_encoder *encoder);
int intel_bios_hdmi_level_shift(struct intel_encoder *encoder);
-int intel_bios_dp_boost_level(struct intel_encoder *encoder);
-int intel_bios_hdmi_boost_level(struct intel_encoder *encoder);
int intel_bios_dp_max_link_rate(struct intel_encoder *encoder);
int intel_bios_alternate_ddc_pin(struct intel_encoder *encoder);
bool intel_bios_port_supports_typec_usb(struct drm_i915_private *i915, enum port port);
@@ -265,5 +263,7 @@ bool intel_bios_encoder_supports_hdmi(const struct intel_bios_encoder_data *devd
bool intel_bios_encoder_supports_dp(const struct intel_bios_encoder_data *devdata);
bool intel_bios_encoder_supports_typec_usb(const struct intel_bios_encoder_data *devdata);
bool intel_bios_encoder_supports_tbt(const struct intel_bios_encoder_data *devdata);
+int intel_bios_encoder_dp_boost_level(const struct intel_bios_encoder_data *devdata);
+int intel_bios_encoder_hdmi_boost_level(const struct intel_bios_encoder_data *devdata);
#endif /* _INTEL_BIOS_H_ */
diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
index 0bf783f67a59..92aad11cc0e7 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -114,7 +114,7 @@ void intel_prepare_dp_ddi_buffers(struct intel_encoder *encoder,
&n_entries);
/* If we're boosting the current, set bit 31 of trans1 */
- if (IS_GEN9_BC(dev_priv) && intel_bios_dp_boost_level(encoder))
+ if (IS_GEN9_BC(dev_priv) && intel_bios_encoder_dp_boost_level(encoder->devdata))
iboost_bit = DDI_BUF_BALANCE_LEG_ENABLE;
for (i = 0; i < n_entries; i++) {
@@ -147,7 +147,7 @@ static void intel_prepare_hdmi_ddi_buffers(struct intel_encoder *encoder,
level = n_entries - 1;
/* If we're boosting the current, set bit 31 of trans1 */
- if (IS_GEN9_BC(dev_priv) && intel_bios_hdmi_boost_level(encoder))
+ if (IS_GEN9_BC(dev_priv) && intel_bios_encoder_hdmi_boost_level(encoder->devdata))
iboost_bit = DDI_BUF_BALANCE_LEG_ENABLE;
/* Entry 9 is for HDMI: */
@@ -925,9 +925,9 @@ static void skl_ddi_set_iboost(struct intel_encoder *encoder,
u8 iboost;
if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI))
- iboost = intel_bios_hdmi_boost_level(encoder);
+ iboost = intel_bios_encoder_hdmi_boost_level(encoder->devdata);
else
- iboost = intel_bios_dp_boost_level(encoder);
+ iboost = intel_bios_encoder_dp_boost_level(encoder->devdata);
if (iboost == 0) {
const struct ddi_buf_trans *ddi_translations;
@@ -4025,6 +4025,7 @@ void intel_ddi_init(struct drm_i915_private *dev_priv, enum port port)
return;
encoder = &dig_port->base;
+ encoder->devdata = devdata;
if (INTEL_GEN(dev_priv) >= 12) {
enum tc_port tc_port = intel_port_to_tc(dev_priv, port);
diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
index 07b7f5eae587..91642b25ebcc 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -230,6 +230,9 @@ struct intel_encoder {
enum intel_display_power_domain power_domain;
/* for communication with audio component; protected by av_mutex */
const struct drm_connector *audio_connector;
+
+ /* VBT information for this encoder (may be NULL for older platforms) */
+ const struct intel_bios_encoder_data *devdata;
};
struct intel_panel_bl_funcs {
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 57712a617839..03a6d9738fee 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -600,8 +600,6 @@ struct ddi_vbt_port_info {
u8 alternate_aux_channel;
u8 alternate_ddc_pin;
- u8 dp_boost_level;
- u8 hdmi_boost_level;
int dp_max_link_rate; /* 0 for not limited by VBT */
};
--
2.20.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for drm/i915/bios: vbt child device rework
2021-02-17 17:03 [Intel-gfx] [PATCH 00/12] drm/i915/bios: vbt child device rework Jani Nikula
` (11 preceding siblings ...)
2021-02-17 17:03 ` [Intel-gfx] [PATCH 12/12] drm/i915/bios: add intel_bios_encoder_data to encoder, use for iboost Jani Nikula
@ 2021-02-17 17:20 ` Patchwork
2021-02-17 17:49 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
` (2 subsequent siblings)
15 siblings, 0 replies; 40+ messages in thread
From: Patchwork @ 2021-02-17 17:20 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
== Series Details ==
Series: drm/i915/bios: vbt child device rework
URL : https://patchwork.freedesktop.org/series/87165/
State : warning
== Summary ==
$ dim checkpatch origin/drm-tip
eb3ee8e4100d drm/i915/bios: mass convert dev_priv to i915
-:1537: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis
#1537: FILE: drivers/gpu/drm/i915/display/intel_bios.c:2051:
+ i915->vbt.lvds_ssc_freq = intel_bios_ssc_frequency(i915,
+ !HAS_PCH_SPLIT(i915));
total: 0 errors, 0 warnings, 1 checks, 1901 lines checked
bec5ef024e83 drm/i915/bios: store bdb version in i915
183a2a92a87d drm/i915/bios: limit default outputs by platform on missing VBT
a26b42827005 drm/i915/bios: limit default outputs to ports A through F
13cc862469fa drm/i915/bios: create fake child devices on missing VBT
28f555702275 drm/i915/bios: rename display_device_data to intel_bios_encoder_data
6f9812af842c drm/i915/bios: add i915 backpointer to intel_bios_encoder_data
8bf02e86eec6 drm/i915/vbt: add helper functions to check output support
a295862116c5 drm/i915/bios: save a higher level pointer in ddi_vbt_port_info[]
5b40fe7ec523 drm/i915/bios: start using the intel_bios_encoder_data directly
e302e102b326 drm/i915/bios: start using intel_bios_encoder_data for Type-C USB and TBT
4f0a5fd1dd23 drm/i915/bios: add intel_bios_encoder_data to encoder, use for iboost
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Intel-gfx] [PATCH 04/12] drm/i915/bios: limit default outputs to ports A through F
2021-02-17 17:03 ` [Intel-gfx] [PATCH 04/12] drm/i915/bios: limit default outputs to ports A through F Jani Nikula
@ 2021-02-17 17:23 ` Lucas De Marchi
2021-02-17 17:28 ` Lucas De Marchi
0 siblings, 1 reply; 40+ messages in thread
From: Lucas De Marchi @ 2021-02-17 17:23 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
On Wed, Feb 17, 2021 at 07:03:34PM +0200, Jani Nikula wrote:
>With the defaults limited to non-TypeC ports in commit 828ccb31cf41
>("drm/i915/icl: Add TypeC ports only if VBT is present"), this should be
>a no-op, but clarifies the code and prepares for subsequent changes.
>
>Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
>Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>---
> drivers/gpu/drm/i915/display/intel_bios.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
>diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
>index e9cb15aa2f5a..b9d99324d66d 100644
>--- a/drivers/gpu/drm/i915/display/intel_bios.c
>+++ b/drivers/gpu/drm/i915/display/intel_bios.c
>@@ -2057,11 +2057,12 @@ static void
> init_vbt_missing_defaults(struct drm_i915_private *i915)
> {
> enum port port;
>+ int ports = PORT_A | PORT_B | PORT_C | PORT_D | PORT_E | PORT_F;
I'd not spread the knowledge of what port uses tc phy like this.
It's painful to maintain.
Lucas De Marchi
>
> if (!HAS_DDI(i915) && !IS_CHERRYVIEW(i915))
> return;
>
>- for_each_port(port) {
>+ for_each_port_masked(port, ports) {
> struct ddi_vbt_port_info *info =
> &i915->vbt.ddi_port_info[port];
> enum phy phy = intel_port_to_phy(i915, port);
>--
>2.20.1
>
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Intel-gfx] [PATCH 04/12] drm/i915/bios: limit default outputs to ports A through F
2021-02-17 17:23 ` Lucas De Marchi
@ 2021-02-17 17:28 ` Lucas De Marchi
2021-02-17 19:49 ` Jani Nikula
0 siblings, 1 reply; 40+ messages in thread
From: Lucas De Marchi @ 2021-02-17 17:28 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
On Wed, Feb 17, 2021 at 09:23:00AM -0800, Lucas De Marchi wrote:
>On Wed, Feb 17, 2021 at 07:03:34PM +0200, Jani Nikula wrote:
>>With the defaults limited to non-TypeC ports in commit 828ccb31cf41
>>("drm/i915/icl: Add TypeC ports only if VBT is present"), this should be
>>a no-op, but clarifies the code and prepares for subsequent changes.
>>
>>Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>>Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
>>Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>>---
>>drivers/gpu/drm/i915/display/intel_bios.c | 3 ++-
>>1 file changed, 2 insertions(+), 1 deletion(-)
>>
>>diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
>>index e9cb15aa2f5a..b9d99324d66d 100644
>>--- a/drivers/gpu/drm/i915/display/intel_bios.c
>>+++ b/drivers/gpu/drm/i915/display/intel_bios.c
>>@@ -2057,11 +2057,12 @@ static void
>>init_vbt_missing_defaults(struct drm_i915_private *i915)
>>{
>> enum port port;
>>+ int ports = PORT_A | PORT_B | PORT_C | PORT_D | PORT_E | PORT_F;
>
>
>I'd not spread the knowledge of what port uses tc phy like this.
>It's painful to maintain.
also, not sure how this clarifies things if PORT_TC1 aliases PORT_D,
so I'd just drop this patch
Lucas De Marchi
>Lucas De Marchi
>
>>
>> if (!HAS_DDI(i915) && !IS_CHERRYVIEW(i915))
>> return;
>>
>>- for_each_port(port) {
>>+ for_each_port_masked(port, ports) {
>> struct ddi_vbt_port_info *info =
>> &i915->vbt.ddi_port_info[port];
>> enum phy phy = intel_port_to_phy(i915, port);
>>--
>>2.20.1
>>
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Intel-gfx] [PATCH 06/12] drm/i915/bios: rename display_device_data to intel_bios_encoder_data
2021-02-17 17:03 ` [Intel-gfx] [PATCH 06/12] drm/i915/bios: rename display_device_data to intel_bios_encoder_data Jani Nikula
@ 2021-02-17 17:44 ` Lucas De Marchi
2021-02-17 19:52 ` Jani Nikula
0 siblings, 1 reply; 40+ messages in thread
From: Lucas De Marchi @ 2021-02-17 17:44 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
On Wed, Feb 17, 2021 at 07:03:36PM +0200, Jani Nikula wrote:
>Make the naming suitable for exposing to the rest of the driver as an
>opaque type. No functional changes.
ack, but..
>
>Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
>Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>---
> drivers/gpu/drm/i915/display/intel_bios.c | 30 +++++++++++------------
> 1 file changed, 15 insertions(+), 15 deletions(-)
>
>diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
>index 59d315b395c2..0e882da165be 100644
>--- a/drivers/gpu/drm/i915/display/intel_bios.c
>+++ b/drivers/gpu/drm/i915/display/intel_bios.c
>@@ -59,7 +59,7 @@
> */
>
> /* Wrapper for VBT child device config */
>-struct display_device_data {
>+struct intel_bios_encoder_data {
> struct child_device_config child;
> struct dsc_compression_parameters_entry *dsc;
> struct list_head node;
>@@ -600,7 +600,7 @@ static void
> parse_sdvo_device_mapping(struct drm_i915_private *i915)
> {
> struct sdvo_device_mapping *mapping;
>- const struct display_device_data *devdata;
>+ const struct intel_bios_encoder_data *devdata;
shouldn't we also replace devdata with a better name?
Lucas De Marchi
> const struct child_device_config *child;
> int count = 0;
>
>@@ -1439,7 +1439,7 @@ parse_compression_parameters(struct drm_i915_private *i915,
> const struct bdb_header *bdb)
> {
> const struct bdb_compression_parameters *params;
>- struct display_device_data *devdata;
>+ struct intel_bios_encoder_data *devdata;
> const struct child_device_config *child;
> u16 block_size;
> int index;
>@@ -1760,7 +1760,7 @@ static enum port dvo_port_to_port(struct drm_i915_private *i915,
> }
>
> static void parse_ddi_port(struct drm_i915_private *i915,
>- struct display_device_data *devdata)
>+ struct intel_bios_encoder_data *devdata)
> {
> const struct child_device_config *child = &devdata->child;
> struct ddi_vbt_port_info *info;
>@@ -1908,7 +1908,7 @@ static void parse_ddi_port(struct drm_i915_private *i915,
>
> static void parse_ddi_ports(struct drm_i915_private *i915)
> {
>- struct display_device_data *devdata;
>+ struct intel_bios_encoder_data *devdata;
>
> if (!HAS_DDI(i915) && !IS_CHERRYVIEW(i915))
> return;
>@@ -1925,7 +1925,7 @@ parse_general_definitions(struct drm_i915_private *i915,
> const struct bdb_header *bdb)
> {
> const struct bdb_general_definitions *defs;
>- struct display_device_data *devdata;
>+ struct intel_bios_encoder_data *devdata;
> const struct child_device_config *child;
> int i, child_device_num;
> u8 expected_size;
>@@ -2063,7 +2063,7 @@ init_vbt_missing_defaults(struct drm_i915_private *i915)
> return;
>
> for_each_port_masked(port, ports) {
>- struct display_device_data *devdata;
>+ struct intel_bios_encoder_data *devdata;
> struct child_device_config *child;
> enum phy phy = intel_port_to_phy(i915, port);
>
>@@ -2302,7 +2302,7 @@ void intel_bios_init(struct drm_i915_private *i915)
> */
> void intel_bios_driver_remove(struct drm_i915_private *i915)
> {
>- struct display_device_data *devdata, *n;
>+ struct intel_bios_encoder_data *devdata, *n;
>
> list_for_each_entry_safe(devdata, n, &i915->vbt.display_devices, node) {
> list_del(&devdata->node);
>@@ -2333,7 +2333,7 @@ void intel_bios_driver_remove(struct drm_i915_private *i915)
> */
> bool intel_bios_is_tv_present(struct drm_i915_private *i915)
> {
>- const struct display_device_data *devdata;
>+ const struct intel_bios_encoder_data *devdata;
> const struct child_device_config *child;
>
> if (!i915->vbt.int_tv_support)
>@@ -2376,7 +2376,7 @@ bool intel_bios_is_tv_present(struct drm_i915_private *i915)
> */
> bool intel_bios_is_lvds_present(struct drm_i915_private *i915, u8 *i2c_pin)
> {
>- const struct display_device_data *devdata;
>+ const struct intel_bios_encoder_data *devdata;
> const struct child_device_config *child;
>
> if (list_empty(&i915->vbt.display_devices))
>@@ -2425,7 +2425,7 @@ bool intel_bios_is_lvds_present(struct drm_i915_private *i915, u8 *i2c_pin)
> */
> bool intel_bios_is_port_present(struct drm_i915_private *i915, enum port port)
> {
>- const struct display_device_data *devdata;
>+ const struct intel_bios_encoder_data *devdata;
> const struct child_device_config *child;
> static const struct {
> u16 dp, hdmi;
>@@ -2471,7 +2471,7 @@ bool intel_bios_is_port_present(struct drm_i915_private *i915, enum port port)
> */
> bool intel_bios_is_port_edp(struct drm_i915_private *i915, enum port port)
> {
>- const struct display_device_data *devdata;
>+ const struct intel_bios_encoder_data *devdata;
> const struct child_device_config *child;
> static const short port_mapping[] = {
> [PORT_B] = DVO_PORT_DPB,
>@@ -2534,7 +2534,7 @@ static bool child_dev_is_dp_dual_mode(const struct child_device_config *child,
> bool intel_bios_is_port_dp_dual_mode(struct drm_i915_private *i915,
> enum port port)
> {
>- const struct display_device_data *devdata;
>+ const struct intel_bios_encoder_data *devdata;
>
> list_for_each_entry(devdata, &i915->vbt.display_devices, node) {
> if (child_dev_is_dp_dual_mode(&devdata->child, port))
>@@ -2554,7 +2554,7 @@ bool intel_bios_is_port_dp_dual_mode(struct drm_i915_private *i915,
> bool intel_bios_is_dsi_present(struct drm_i915_private *i915,
> enum port *port)
> {
>- const struct display_device_data *devdata;
>+ const struct intel_bios_encoder_data *devdata;
> const struct child_device_config *child;
> u8 dvo_port;
>
>@@ -2654,7 +2654,7 @@ bool intel_bios_get_dsc_params(struct intel_encoder *encoder,
> int dsc_max_bpc)
> {
> struct drm_i915_private *i915 = to_i915(encoder->base.dev);
>- const struct display_device_data *devdata;
>+ const struct intel_bios_encoder_data *devdata;
> const struct child_device_config *child;
>
> list_for_each_entry(devdata, &i915->vbt.display_devices, node) {
>--
>2.20.1
>
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Intel-gfx] [PATCH 08/12] drm/i915/vbt: add helper functions to check output support
2021-02-17 17:03 ` [Intel-gfx] [PATCH 08/12] drm/i915/vbt: add helper functions to check output support Jani Nikula
@ 2021-02-17 17:46 ` Lucas De Marchi
2021-02-17 19:55 ` Jani Nikula
0 siblings, 1 reply; 40+ messages in thread
From: Lucas De Marchi @ 2021-02-17 17:46 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
On Wed, Feb 17, 2021 at 07:03:38PM +0200, Jani Nikula wrote:
>These will be exposed to the rest of the driver and replace other
>functions. Everything will operate on the child devices.
>
>Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
>Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>---
> drivers/gpu/drm/i915/display/intel_bios.c | 66 ++++++++++++++++++-----
> 1 file changed, 54 insertions(+), 12 deletions(-)
>
>diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
>index 193772f42582..739ef5d91907 100644
>--- a/drivers/gpu/drm/i915/display/intel_bios.c
>+++ b/drivers/gpu/drm/i915/display/intel_bios.c
>@@ -64,6 +64,7 @@ struct intel_bios_encoder_data {
>
> struct child_device_config child;
> struct dsc_compression_parameters_entry *dsc;
>+
> struct list_head node;
> };
>
>@@ -1761,6 +1762,53 @@ static enum port dvo_port_to_port(struct drm_i915_private *i915,
> dvo_port);
> }
>
>+static void sanitize_device_type(struct intel_bios_encoder_data *devdata,
>+ enum port port)
>+{
>+ struct drm_i915_private *i915 = devdata->i915;
>+ bool is_hdmi;
>+
>+ if (port != PORT_A || INTEL_GEN(i915) >= 12)
>+ return;
>+
>+ if (!(devdata->child.device_type & DEVICE_TYPE_TMDS_DVI_SIGNALING))
>+ return;
>+
>+ is_hdmi = !(devdata->child.device_type & DEVICE_TYPE_NOT_HDMI_OUTPUT);
>+
>+ drm_dbg_kms(&i915->drm, "VBT claims port A supports DVI%s, ignoring\n",
>+ is_hdmi ? "/HDMI" : "");
>+
>+ devdata->child.device_type &= ~DEVICE_TYPE_TMDS_DVI_SIGNALING;
>+ devdata->child.device_type |= DEVICE_TYPE_NOT_HDMI_OUTPUT;
>+}
>+
>+static bool
>+intel_bios_encoder_supports_dvi(const struct intel_bios_encoder_data *devdata)
>+{
>+ return devdata->child.device_type & DEVICE_TYPE_TMDS_DVI_SIGNALING;
>+}
>+
>+static bool
>+intel_bios_encoder_supports_hdmi(const struct intel_bios_encoder_data *devdata)
>+{
>+ return intel_bios_encoder_supports_dvi(devdata) &&
>+ (devdata->child.device_type & DEVICE_TYPE_NOT_HDMI_OUTPUT) == 0;
>+}
>+
>+static bool
>+intel_bios_encoder_supports_dp(const struct intel_bios_encoder_data *devdata)
>+{
>+ return devdata->child.device_type & DEVICE_TYPE_DISPLAYPORT_OUTPUT;
>+}
>+
>+static bool
>+intel_bios_encoder_supports_edp(const struct intel_bios_encoder_data *devdata)
>+{
>+ return intel_bios_encoder_supports_dp(devdata) &&
>+ devdata->child.device_type & DEVICE_TYPE_INTERNAL_CONNECTOR;
>+}
>+
> static void parse_ddi_port(struct drm_i915_private *i915,
> struct intel_bios_encoder_data *devdata)
> {
>@@ -1782,19 +1830,13 @@ static void parse_ddi_port(struct drm_i915_private *i915,
> return;
> }
>
>- is_dvi = child->device_type & DEVICE_TYPE_TMDS_DVI_SIGNALING;
>- is_dp = child->device_type & DEVICE_TYPE_DISPLAYPORT_OUTPUT;
>- is_crt = child->device_type & DEVICE_TYPE_ANALOG_OUTPUT;
>- is_hdmi = is_dvi && (child->device_type & DEVICE_TYPE_NOT_HDMI_OUTPUT) == 0;
>- is_edp = is_dp && (child->device_type & DEVICE_TYPE_INTERNAL_CONNECTOR);
>+ sanitize_device_type(devdata, port);
>
>- if (port == PORT_A && is_dvi && INTEL_GEN(i915) < 12) {
>- drm_dbg_kms(&i915->drm,
>- "VBT claims port A supports DVI%s, ignoring\n",
>- is_hdmi ? "/HDMI" : "");
>- is_dvi = false;
>- is_hdmi = false;
>- }
>+ is_dvi = intel_bios_encoder_supports_dvi(devdata);
>+ is_dp = intel_bios_encoder_supports_dp(devdata);
>+ is_crt = child->device_type & DEVICE_TYPE_ANALOG_OUTPUT;
any reason to leave this behind?
Lucas De Marchi
>+ is_hdmi = intel_bios_encoder_supports_hdmi(devdata);
>+ is_edp = intel_bios_encoder_supports_edp(devdata);
>
> info->supports_dvi = is_dvi;
> info->supports_hdmi = is_hdmi;
>--
>2.20.1
>
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 40+ messages in thread
* [Intel-gfx] ✓ Fi.CI.BAT: success for drm/i915/bios: vbt child device rework
2021-02-17 17:03 [Intel-gfx] [PATCH 00/12] drm/i915/bios: vbt child device rework Jani Nikula
` (12 preceding siblings ...)
2021-02-17 17:20 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for drm/i915/bios: vbt child device rework Patchwork
@ 2021-02-17 17:49 ` Patchwork
2021-02-17 17:54 ` [Intel-gfx] [PATCH 00/12] " Lucas De Marchi
2021-02-17 20:52 ` [Intel-gfx] ✓ Fi.CI.IGT: success for " Patchwork
15 siblings, 0 replies; 40+ messages in thread
From: Patchwork @ 2021-02-17 17:49 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
[-- Attachment #1.1: Type: text/plain, Size: 5478 bytes --]
== Series Details ==
Series: drm/i915/bios: vbt child device rework
URL : https://patchwork.freedesktop.org/series/87165/
State : success
== Summary ==
CI Bug Log - changes from CI_DRM_9782 -> Patchwork_19696
====================================================
Summary
-------
**SUCCESS**
No regressions found.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/index.html
Known issues
------------
Here are the changes found in Patchwork_19696 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@gem_huc_copy@huc-copy:
- fi-byt-j1900: NOTRUN -> [SKIP][1] ([fdo#109271]) +9 similar issues
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/fi-byt-j1900/igt@gem_huc_copy@huc-copy.html
* igt@gem_mmap_gtt@basic:
- fi-tgl-y: [PASS][2] -> [DMESG-WARN][3] ([i915#402]) +1 similar issue
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/fi-tgl-y/igt@gem_mmap_gtt@basic.html
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/fi-tgl-y/igt@gem_mmap_gtt@basic.html
* igt@i915_pm_rpm@module-reload:
- fi-byt-j1900: NOTRUN -> [INCOMPLETE][4] ([i915#142] / [i915#2405])
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/fi-byt-j1900/igt@i915_pm_rpm@module-reload.html
* igt@kms_addfb_basic@addfb25-y-tiled-small-legacy:
- fi-snb-2600: NOTRUN -> [SKIP][5] ([fdo#109271]) +34 similar issues
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/fi-snb-2600/igt@kms_addfb_basic@addfb25-y-tiled-small-legacy.html
* igt@kms_chamelium@hdmi-crc-fast:
- fi-byt-j1900: NOTRUN -> [SKIP][6] ([fdo#109271] / [fdo#111827]) +8 similar issues
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/fi-byt-j1900/igt@kms_chamelium@hdmi-crc-fast.html
- fi-snb-2600: NOTRUN -> [SKIP][7] ([fdo#109271] / [fdo#111827]) +8 similar issues
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/fi-snb-2600/igt@kms_chamelium@hdmi-crc-fast.html
* igt@runner@aborted:
- fi-bdw-5557u: NOTRUN -> [FAIL][8] ([i915#1602] / [i915#2029] / [i915#2369])
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/fi-bdw-5557u/igt@runner@aborted.html
- fi-byt-j1900: NOTRUN -> [FAIL][9] ([i915#1814] / [i915#2505])
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/fi-byt-j1900/igt@runner@aborted.html
#### Possible fixes ####
* igt@gem_exec_suspend@basic-s3:
- fi-tgl-y: [DMESG-WARN][10] ([i915#2411] / [i915#402]) -> [PASS][11]
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/fi-tgl-y/igt@gem_exec_suspend@basic-s3.html
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/fi-tgl-y/igt@gem_exec_suspend@basic-s3.html
* igt@gem_render_tiled_blits@basic:
- fi-tgl-y: [DMESG-WARN][12] ([i915#402]) -> [PASS][13]
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/fi-tgl-y/igt@gem_render_tiled_blits@basic.html
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/fi-tgl-y/igt@gem_render_tiled_blits@basic.html
[fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
[fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827
[i915#142]: https://gitlab.freedesktop.org/drm/intel/issues/142
[i915#1602]: https://gitlab.freedesktop.org/drm/intel/issues/1602
[i915#1814]: https://gitlab.freedesktop.org/drm/intel/issues/1814
[i915#2029]: https://gitlab.freedesktop.org/drm/intel/issues/2029
[i915#2369]: https://gitlab.freedesktop.org/drm/intel/issues/2369
[i915#2405]: https://gitlab.freedesktop.org/drm/intel/issues/2405
[i915#2411]: https://gitlab.freedesktop.org/drm/intel/issues/2411
[i915#2505]: https://gitlab.freedesktop.org/drm/intel/issues/2505
[i915#402]: https://gitlab.freedesktop.org/drm/intel/issues/402
Participating hosts (41 -> 39)
------------------------------
Additional (2): fi-byt-j1900 fi-snb-2600
Missing (4): fi-ilk-m540 fi-bsw-cyan fi-bdw-samus fi-hsw-4200u
Build changes
-------------
* Linux: CI_DRM_9782 -> Patchwork_19696
CI-20190529: 20190529
CI_DRM_9782: 17f0b26dab823740a3ebc413ea6f61a4f2e77971 @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_6005: b69a3c463f0aec46b19c14ac24351d292cb11c08 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
Patchwork_19696: 4f0a5fd1dd2378cbe61c694fe5bd58917970e815 @ git://anongit.freedesktop.org/gfx-ci/linux
== Linux commits ==
4f0a5fd1dd23 drm/i915/bios: add intel_bios_encoder_data to encoder, use for iboost
e302e102b326 drm/i915/bios: start using intel_bios_encoder_data for Type-C USB and TBT
5b40fe7ec523 drm/i915/bios: start using the intel_bios_encoder_data directly
a295862116c5 drm/i915/bios: save a higher level pointer in ddi_vbt_port_info[]
8bf02e86eec6 drm/i915/vbt: add helper functions to check output support
6f9812af842c drm/i915/bios: add i915 backpointer to intel_bios_encoder_data
28f555702275 drm/i915/bios: rename display_device_data to intel_bios_encoder_data
13cc862469fa drm/i915/bios: create fake child devices on missing VBT
a26b42827005 drm/i915/bios: limit default outputs to ports A through F
183a2a92a87d drm/i915/bios: limit default outputs by platform on missing VBT
bec5ef024e83 drm/i915/bios: store bdb version in i915
eb3ee8e4100d drm/i915/bios: mass convert dev_priv to i915
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/index.html
[-- Attachment #1.2: Type: text/html, Size: 6772 bytes --]
[-- Attachment #2: Type: text/plain, Size: 160 bytes --]
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Intel-gfx] [PATCH 00/12] drm/i915/bios: vbt child device rework
2021-02-17 17:03 [Intel-gfx] [PATCH 00/12] drm/i915/bios: vbt child device rework Jani Nikula
` (13 preceding siblings ...)
2021-02-17 17:49 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
@ 2021-02-17 17:54 ` Lucas De Marchi
2021-02-17 19:57 ` Jani Nikula
2021-02-17 20:52 ` [Intel-gfx] ✓ Fi.CI.IGT: success for " Patchwork
15 siblings, 1 reply; 40+ messages in thread
From: Lucas De Marchi @ 2021-02-17 17:54 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
On Wed, Feb 17, 2021 at 07:03:30PM +0200, Jani Nikula wrote:
>I see the parsing and caching of child device data into
>i915->vbt.ddi_port_info[] slightly problematic. We keep adding data to
>it, and it just duplicates information. Start moving towards a single
>point of truth, and getting the information directly from the child
>device data.
>
>One obstacle has been that init_vbt_missing_defaults() only initializes
>ddi_port_info, without child devices. As the same problem arose in a
>patch from Lucas, I thought it was time to start creating fake child
>devices to unify the code.
>
>There are a bunch of cleanups and refactoring here. Patches 1-5 are
>enough to fix Lucas' patch I think. Patch 10 does what Lucas was after,
>just in a different way and as a byproduct of something else. The later
humn... but we'd still need the patches in that series to cleanup
the calls to intel_ddi_init() from intel_display.c. Or did I miss
anything?
I did a quick scan through the patches and left a few comments. Overall
it looks good to me, but I need to dedicate a little more time to give a
proper r-b. I will do soon if no one beats me to it.
thanks
Lucas De Marchi
>patches in the series are more to show the direction, and seek
>validation for that direction.
>
>Naming is also a question mark. All of these are a bit questionable:
>intel_bios_encoder_data, devdata, intel_bios_encoder_supports_*, etc.
>
>BR,
>Jani.
>
>
>[1] http://patchwork.freedesktop.org/patch/msgid/20210213190511.1017088-2-lucas.demarchi@intel.com
>
>
>
>Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
>
>Jani Nikula (12):
> drm/i915/bios: mass convert dev_priv to i915
> drm/i915/bios: store bdb version in i915
> drm/i915/bios: limit default outputs by platform on missing VBT
> drm/i915/bios: limit default outputs to ports A through F
> drm/i915/bios: create fake child devices on missing VBT
> drm/i915/bios: rename display_device_data to intel_bios_encoder_data
> drm/i915/bios: add i915 backpointer to intel_bios_encoder_data
> drm/i915/vbt: add helper functions to check output support
> drm/i915/bios: save a higher level pointer in ddi_vbt_port_info[]
> drm/i915/bios: start using the intel_bios_encoder_data directly
> drm/i915/bios: start using intel_bios_encoder_data for Type-C USB and
> TBT
> drm/i915/bios: add intel_bios_encoder_data to encoder, use for iboost
>
> drivers/gpu/drm/i915/display/intel_bios.c | 1021 +++++++++--------
> drivers/gpu/drm/i915/display/intel_bios.h | 17 +-
> drivers/gpu/drm/i915/display/intel_ddi.c | 28 +-
> .../drm/i915/display/intel_display_types.h | 3 +
> drivers/gpu/drm/i915/i915_drv.h | 9 +-
> 5 files changed, 584 insertions(+), 494 deletions(-)
>
>--
>2.20.1
>
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Intel-gfx] [PATCH 04/12] drm/i915/bios: limit default outputs to ports A through F
2021-02-17 17:28 ` Lucas De Marchi
@ 2021-02-17 19:49 ` Jani Nikula
2021-02-17 19:58 ` Lucas De Marchi
0 siblings, 1 reply; 40+ messages in thread
From: Jani Nikula @ 2021-02-17 19:49 UTC (permalink / raw)
To: Lucas De Marchi; +Cc: intel-gfx
On Wed, 17 Feb 2021, Lucas De Marchi <lucas.demarchi@intel.com> wrote:
> On Wed, Feb 17, 2021 at 09:23:00AM -0800, Lucas De Marchi wrote:
>>On Wed, Feb 17, 2021 at 07:03:34PM +0200, Jani Nikula wrote:
>>>With the defaults limited to non-TypeC ports in commit 828ccb31cf41
>>>("drm/i915/icl: Add TypeC ports only if VBT is present"), this should be
>>>a no-op, but clarifies the code and prepares for subsequent changes.
>>>
>>>Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>>>Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
>>>Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>>>---
>>>drivers/gpu/drm/i915/display/intel_bios.c | 3 ++-
>>>1 file changed, 2 insertions(+), 1 deletion(-)
>>>
>>>diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
>>>index e9cb15aa2f5a..b9d99324d66d 100644
>>>--- a/drivers/gpu/drm/i915/display/intel_bios.c
>>>+++ b/drivers/gpu/drm/i915/display/intel_bios.c
>>>@@ -2057,11 +2057,12 @@ static void
>>>init_vbt_missing_defaults(struct drm_i915_private *i915)
>>>{
>>> enum port port;
>>>+ int ports = PORT_A | PORT_B | PORT_C | PORT_D | PORT_E | PORT_F;
>>
>>
>>I'd not spread the knowledge of what port uses tc phy like this.
>>It's painful to maintain.
Umm, this wasn't meant to have anything to do with tc, really. Granted,
the commit message is misleading.
>
> also, not sure how this clarifies things if PORT_TC1 aliases PORT_D,
> so I'd just drop this patch
The point is that I'd like to reduce the number of ports set up by
default, perhaps even further than this. It's a bit silly to generate 9
dummy child devices on certain platforms when there's no VBT.
BR,
Jani.
>
> Lucas De Marchi
>
>>Lucas De Marchi
>>
>>>
>>> if (!HAS_DDI(i915) && !IS_CHERRYVIEW(i915))
>>> return;
>>>
>>>- for_each_port(port) {
>>>+ for_each_port_masked(port, ports) {
>>> struct ddi_vbt_port_info *info =
>>> &i915->vbt.ddi_port_info[port];
>>> enum phy phy = intel_port_to_phy(i915, port);
>>>--
>>>2.20.1
>>>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Jani Nikula, Intel Open Source Graphics Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Intel-gfx] [PATCH 06/12] drm/i915/bios: rename display_device_data to intel_bios_encoder_data
2021-02-17 17:44 ` Lucas De Marchi
@ 2021-02-17 19:52 ` Jani Nikula
2021-02-23 12:50 ` Jani Nikula
0 siblings, 1 reply; 40+ messages in thread
From: Jani Nikula @ 2021-02-17 19:52 UTC (permalink / raw)
To: Lucas De Marchi; +Cc: intel-gfx
On Wed, 17 Feb 2021, Lucas De Marchi <lucas.demarchi@intel.com> wrote:
> On Wed, Feb 17, 2021 at 07:03:36PM +0200, Jani Nikula wrote:
>>Make the naming suitable for exposing to the rest of the driver as an
>>opaque type. No functional changes.
>
> ack, but..
>
>>
>>Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>>Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
>>Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>>---
>> drivers/gpu/drm/i915/display/intel_bios.c | 30 +++++++++++------------
>> 1 file changed, 15 insertions(+), 15 deletions(-)
>>
>>diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
>>index 59d315b395c2..0e882da165be 100644
>>--- a/drivers/gpu/drm/i915/display/intel_bios.c
>>+++ b/drivers/gpu/drm/i915/display/intel_bios.c
>>@@ -59,7 +59,7 @@
>> */
>>
>> /* Wrapper for VBT child device config */
>>-struct display_device_data {
>>+struct intel_bios_encoder_data {
>> struct child_device_config child;
>> struct dsc_compression_parameters_entry *dsc;
>> struct list_head node;
>>@@ -600,7 +600,7 @@ static void
>> parse_sdvo_device_mapping(struct drm_i915_private *i915)
>> {
>> struct sdvo_device_mapping *mapping;
>>- const struct display_device_data *devdata;
>>+ const struct intel_bios_encoder_data *devdata;
>
> shouldn't we also replace devdata with a better name?
Yes, see cover letter. :)
I've rolled with devdata for now because that's what was there.
BR,
Jani.
>
> Lucas De Marchi
>
>> const struct child_device_config *child;
>> int count = 0;
>>
>>@@ -1439,7 +1439,7 @@ parse_compression_parameters(struct drm_i915_private *i915,
>> const struct bdb_header *bdb)
>> {
>> const struct bdb_compression_parameters *params;
>>- struct display_device_data *devdata;
>>+ struct intel_bios_encoder_data *devdata;
>> const struct child_device_config *child;
>> u16 block_size;
>> int index;
>>@@ -1760,7 +1760,7 @@ static enum port dvo_port_to_port(struct drm_i915_private *i915,
>> }
>>
>> static void parse_ddi_port(struct drm_i915_private *i915,
>>- struct display_device_data *devdata)
>>+ struct intel_bios_encoder_data *devdata)
>> {
>> const struct child_device_config *child = &devdata->child;
>> struct ddi_vbt_port_info *info;
>>@@ -1908,7 +1908,7 @@ static void parse_ddi_port(struct drm_i915_private *i915,
>>
>> static void parse_ddi_ports(struct drm_i915_private *i915)
>> {
>>- struct display_device_data *devdata;
>>+ struct intel_bios_encoder_data *devdata;
>>
>> if (!HAS_DDI(i915) && !IS_CHERRYVIEW(i915))
>> return;
>>@@ -1925,7 +1925,7 @@ parse_general_definitions(struct drm_i915_private *i915,
>> const struct bdb_header *bdb)
>> {
>> const struct bdb_general_definitions *defs;
>>- struct display_device_data *devdata;
>>+ struct intel_bios_encoder_data *devdata;
>> const struct child_device_config *child;
>> int i, child_device_num;
>> u8 expected_size;
>>@@ -2063,7 +2063,7 @@ init_vbt_missing_defaults(struct drm_i915_private *i915)
>> return;
>>
>> for_each_port_masked(port, ports) {
>>- struct display_device_data *devdata;
>>+ struct intel_bios_encoder_data *devdata;
>> struct child_device_config *child;
>> enum phy phy = intel_port_to_phy(i915, port);
>>
>>@@ -2302,7 +2302,7 @@ void intel_bios_init(struct drm_i915_private *i915)
>> */
>> void intel_bios_driver_remove(struct drm_i915_private *i915)
>> {
>>- struct display_device_data *devdata, *n;
>>+ struct intel_bios_encoder_data *devdata, *n;
>>
>> list_for_each_entry_safe(devdata, n, &i915->vbt.display_devices, node) {
>> list_del(&devdata->node);
>>@@ -2333,7 +2333,7 @@ void intel_bios_driver_remove(struct drm_i915_private *i915)
>> */
>> bool intel_bios_is_tv_present(struct drm_i915_private *i915)
>> {
>>- const struct display_device_data *devdata;
>>+ const struct intel_bios_encoder_data *devdata;
>> const struct child_device_config *child;
>>
>> if (!i915->vbt.int_tv_support)
>>@@ -2376,7 +2376,7 @@ bool intel_bios_is_tv_present(struct drm_i915_private *i915)
>> */
>> bool intel_bios_is_lvds_present(struct drm_i915_private *i915, u8 *i2c_pin)
>> {
>>- const struct display_device_data *devdata;
>>+ const struct intel_bios_encoder_data *devdata;
>> const struct child_device_config *child;
>>
>> if (list_empty(&i915->vbt.display_devices))
>>@@ -2425,7 +2425,7 @@ bool intel_bios_is_lvds_present(struct drm_i915_private *i915, u8 *i2c_pin)
>> */
>> bool intel_bios_is_port_present(struct drm_i915_private *i915, enum port port)
>> {
>>- const struct display_device_data *devdata;
>>+ const struct intel_bios_encoder_data *devdata;
>> const struct child_device_config *child;
>> static const struct {
>> u16 dp, hdmi;
>>@@ -2471,7 +2471,7 @@ bool intel_bios_is_port_present(struct drm_i915_private *i915, enum port port)
>> */
>> bool intel_bios_is_port_edp(struct drm_i915_private *i915, enum port port)
>> {
>>- const struct display_device_data *devdata;
>>+ const struct intel_bios_encoder_data *devdata;
>> const struct child_device_config *child;
>> static const short port_mapping[] = {
>> [PORT_B] = DVO_PORT_DPB,
>>@@ -2534,7 +2534,7 @@ static bool child_dev_is_dp_dual_mode(const struct child_device_config *child,
>> bool intel_bios_is_port_dp_dual_mode(struct drm_i915_private *i915,
>> enum port port)
>> {
>>- const struct display_device_data *devdata;
>>+ const struct intel_bios_encoder_data *devdata;
>>
>> list_for_each_entry(devdata, &i915->vbt.display_devices, node) {
>> if (child_dev_is_dp_dual_mode(&devdata->child, port))
>>@@ -2554,7 +2554,7 @@ bool intel_bios_is_port_dp_dual_mode(struct drm_i915_private *i915,
>> bool intel_bios_is_dsi_present(struct drm_i915_private *i915,
>> enum port *port)
>> {
>>- const struct display_device_data *devdata;
>>+ const struct intel_bios_encoder_data *devdata;
>> const struct child_device_config *child;
>> u8 dvo_port;
>>
>>@@ -2654,7 +2654,7 @@ bool intel_bios_get_dsc_params(struct intel_encoder *encoder,
>> int dsc_max_bpc)
>> {
>> struct drm_i915_private *i915 = to_i915(encoder->base.dev);
>>- const struct display_device_data *devdata;
>>+ const struct intel_bios_encoder_data *devdata;
>> const struct child_device_config *child;
>>
>> list_for_each_entry(devdata, &i915->vbt.display_devices, node) {
>>--
>>2.20.1
>>
--
Jani Nikula, Intel Open Source Graphics Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Intel-gfx] [PATCH 08/12] drm/i915/vbt: add helper functions to check output support
2021-02-17 17:46 ` Lucas De Marchi
@ 2021-02-17 19:55 ` Jani Nikula
2021-03-15 17:32 ` Lucas De Marchi
0 siblings, 1 reply; 40+ messages in thread
From: Jani Nikula @ 2021-02-17 19:55 UTC (permalink / raw)
To: Lucas De Marchi; +Cc: intel-gfx
On Wed, 17 Feb 2021, Lucas De Marchi <lucas.demarchi@intel.com> wrote:
> On Wed, Feb 17, 2021 at 07:03:38PM +0200, Jani Nikula wrote:
>>These will be exposed to the rest of the driver and replace other
>>functions. Everything will operate on the child devices.
>>
>>Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>>Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
>>Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>>---
>> drivers/gpu/drm/i915/display/intel_bios.c | 66 ++++++++++++++++++-----
>> 1 file changed, 54 insertions(+), 12 deletions(-)
>>
>>diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
>>index 193772f42582..739ef5d91907 100644
>>--- a/drivers/gpu/drm/i915/display/intel_bios.c
>>+++ b/drivers/gpu/drm/i915/display/intel_bios.c
>>@@ -64,6 +64,7 @@ struct intel_bios_encoder_data {
>>
>> struct child_device_config child;
>> struct dsc_compression_parameters_entry *dsc;
>>+
>> struct list_head node;
>> };
>>
>>@@ -1761,6 +1762,53 @@ static enum port dvo_port_to_port(struct drm_i915_private *i915,
>> dvo_port);
>> }
>>
>>+static void sanitize_device_type(struct intel_bios_encoder_data *devdata,
>>+ enum port port)
>>+{
>>+ struct drm_i915_private *i915 = devdata->i915;
>>+ bool is_hdmi;
>>+
>>+ if (port != PORT_A || INTEL_GEN(i915) >= 12)
>>+ return;
>>+
>>+ if (!(devdata->child.device_type & DEVICE_TYPE_TMDS_DVI_SIGNALING))
>>+ return;
>>+
>>+ is_hdmi = !(devdata->child.device_type & DEVICE_TYPE_NOT_HDMI_OUTPUT);
>>+
>>+ drm_dbg_kms(&i915->drm, "VBT claims port A supports DVI%s, ignoring\n",
>>+ is_hdmi ? "/HDMI" : "");
>>+
>>+ devdata->child.device_type &= ~DEVICE_TYPE_TMDS_DVI_SIGNALING;
>>+ devdata->child.device_type |= DEVICE_TYPE_NOT_HDMI_OUTPUT;
>>+}
>>+
>>+static bool
>>+intel_bios_encoder_supports_dvi(const struct intel_bios_encoder_data *devdata)
>>+{
>>+ return devdata->child.device_type & DEVICE_TYPE_TMDS_DVI_SIGNALING;
>>+}
>>+
>>+static bool
>>+intel_bios_encoder_supports_hdmi(const struct intel_bios_encoder_data *devdata)
>>+{
>>+ return intel_bios_encoder_supports_dvi(devdata) &&
>>+ (devdata->child.device_type & DEVICE_TYPE_NOT_HDMI_OUTPUT) == 0;
>>+}
>>+
>>+static bool
>>+intel_bios_encoder_supports_dp(const struct intel_bios_encoder_data *devdata)
>>+{
>>+ return devdata->child.device_type & DEVICE_TYPE_DISPLAYPORT_OUTPUT;
>>+}
>>+
>>+static bool
>>+intel_bios_encoder_supports_edp(const struct intel_bios_encoder_data *devdata)
>>+{
>>+ return intel_bios_encoder_supports_dp(devdata) &&
>>+ devdata->child.device_type & DEVICE_TYPE_INTERNAL_CONNECTOR;
>>+}
>>+
>> static void parse_ddi_port(struct drm_i915_private *i915,
>> struct intel_bios_encoder_data *devdata)
>> {
>>@@ -1782,19 +1830,13 @@ static void parse_ddi_port(struct drm_i915_private *i915,
>> return;
>> }
>>
>>- is_dvi = child->device_type & DEVICE_TYPE_TMDS_DVI_SIGNALING;
>>- is_dp = child->device_type & DEVICE_TYPE_DISPLAYPORT_OUTPUT;
>>- is_crt = child->device_type & DEVICE_TYPE_ANALOG_OUTPUT;
>>- is_hdmi = is_dvi && (child->device_type & DEVICE_TYPE_NOT_HDMI_OUTPUT) == 0;
>>- is_edp = is_dp && (child->device_type & DEVICE_TYPE_INTERNAL_CONNECTOR);
>>+ sanitize_device_type(devdata, port);
>>
>>- if (port == PORT_A && is_dvi && INTEL_GEN(i915) < 12) {
>>- drm_dbg_kms(&i915->drm,
>>- "VBT claims port A supports DVI%s, ignoring\n",
>>- is_hdmi ? "/HDMI" : "");
>>- is_dvi = false;
>>- is_hdmi = false;
>>- }
>>+ is_dvi = intel_bios_encoder_supports_dvi(devdata);
>>+ is_dp = intel_bios_encoder_supports_dp(devdata);
>>+ is_crt = child->device_type & DEVICE_TYPE_ANALOG_OUTPUT;
>
> any reason to leave this behind?
Just logging, even though that doesn't match what we actually do in
intel_ddi_crt_present(). I expect there to be further cleanup
afterwards.
BR,
Jani.
>
> Lucas De Marchi
>
>>+ is_hdmi = intel_bios_encoder_supports_hdmi(devdata);
>>+ is_edp = intel_bios_encoder_supports_edp(devdata);
>>
>> info->supports_dvi = is_dvi;
>> info->supports_hdmi = is_hdmi;
>>--
>>2.20.1
>>
--
Jani Nikula, Intel Open Source Graphics Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Intel-gfx] [PATCH 00/12] drm/i915/bios: vbt child device rework
2021-02-17 17:54 ` [Intel-gfx] [PATCH 00/12] " Lucas De Marchi
@ 2021-02-17 19:57 ` Jani Nikula
0 siblings, 0 replies; 40+ messages in thread
From: Jani Nikula @ 2021-02-17 19:57 UTC (permalink / raw)
To: Lucas De Marchi; +Cc: intel-gfx
On Wed, 17 Feb 2021, Lucas De Marchi <lucas.demarchi@intel.com> wrote:
> On Wed, Feb 17, 2021 at 07:03:30PM +0200, Jani Nikula wrote:
>>I see the parsing and caching of child device data into
>>i915->vbt.ddi_port_info[] slightly problematic. We keep adding data to
>>it, and it just duplicates information. Start moving towards a single
>>point of truth, and getting the information directly from the child
>>device data.
>>
>>One obstacle has been that init_vbt_missing_defaults() only initializes
>>ddi_port_info, without child devices. As the same problem arose in a
>>patch from Lucas, I thought it was time to start creating fake child
>>devices to unify the code.
>>
>>There are a bunch of cleanups and refactoring here. Patches 1-5 are
>>enough to fix Lucas' patch I think. Patch 10 does what Lucas was after,
>>just in a different way and as a byproduct of something else. The later
>
> humn... but we'd still need the patches in that series to cleanup
> the calls to intel_ddi_init() from intel_display.c. Or did I miss
> anything?
Nah, my bad. This makes it possible to do what you do there.
BR,
Jani.
>
> I did a quick scan through the patches and left a few comments. Overall
> it looks good to me, but I need to dedicate a little more time to give a
> proper r-b. I will do soon if no one beats me to it.
>
>
> thanks
> Lucas De Marchi
>
>>patches in the series are more to show the direction, and seek
>>validation for that direction.
>>
>>Naming is also a question mark. All of these are a bit questionable:
>>intel_bios_encoder_data, devdata, intel_bios_encoder_supports_*, etc.
>>
>>BR,
>>Jani.
>>
>>
>>[1] http://patchwork.freedesktop.org/patch/msgid/20210213190511.1017088-2-lucas.demarchi@intel.com
>>
>>
>>
>>Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>>Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
>>
>>
>>Jani Nikula (12):
>> drm/i915/bios: mass convert dev_priv to i915
>> drm/i915/bios: store bdb version in i915
>> drm/i915/bios: limit default outputs by platform on missing VBT
>> drm/i915/bios: limit default outputs to ports A through F
>> drm/i915/bios: create fake child devices on missing VBT
>> drm/i915/bios: rename display_device_data to intel_bios_encoder_data
>> drm/i915/bios: add i915 backpointer to intel_bios_encoder_data
>> drm/i915/vbt: add helper functions to check output support
>> drm/i915/bios: save a higher level pointer in ddi_vbt_port_info[]
>> drm/i915/bios: start using the intel_bios_encoder_data directly
>> drm/i915/bios: start using intel_bios_encoder_data for Type-C USB and
>> TBT
>> drm/i915/bios: add intel_bios_encoder_data to encoder, use for iboost
>>
>> drivers/gpu/drm/i915/display/intel_bios.c | 1021 +++++++++--------
>> drivers/gpu/drm/i915/display/intel_bios.h | 17 +-
>> drivers/gpu/drm/i915/display/intel_ddi.c | 28 +-
>> .../drm/i915/display/intel_display_types.h | 3 +
>> drivers/gpu/drm/i915/i915_drv.h | 9 +-
>> 5 files changed, 584 insertions(+), 494 deletions(-)
>>
>>--
>>2.20.1
>>
--
Jani Nikula, Intel Open Source Graphics Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Intel-gfx] [PATCH 04/12] drm/i915/bios: limit default outputs to ports A through F
2021-02-17 19:49 ` Jani Nikula
@ 2021-02-17 19:58 ` Lucas De Marchi
2021-02-23 13:34 ` Jani Nikula
0 siblings, 1 reply; 40+ messages in thread
From: Lucas De Marchi @ 2021-02-17 19:58 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
On Wed, Feb 17, 2021 at 09:49:57PM +0200, Jani Nikula wrote:
>On Wed, 17 Feb 2021, Lucas De Marchi <lucas.demarchi@intel.com> wrote:
>> On Wed, Feb 17, 2021 at 09:23:00AM -0800, Lucas De Marchi wrote:
>>>On Wed, Feb 17, 2021 at 07:03:34PM +0200, Jani Nikula wrote:
>>>>With the defaults limited to non-TypeC ports in commit 828ccb31cf41
>>>>("drm/i915/icl: Add TypeC ports only if VBT is present"), this should be
>>>>a no-op, but clarifies the code and prepares for subsequent changes.
>>>>
>>>>Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>>>>Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
>>>>Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>>>>---
>>>>drivers/gpu/drm/i915/display/intel_bios.c | 3 ++-
>>>>1 file changed, 2 insertions(+), 1 deletion(-)
>>>>
>>>>diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
>>>>index e9cb15aa2f5a..b9d99324d66d 100644
>>>>--- a/drivers/gpu/drm/i915/display/intel_bios.c
>>>>+++ b/drivers/gpu/drm/i915/display/intel_bios.c
>>>>@@ -2057,11 +2057,12 @@ static void
>>>>init_vbt_missing_defaults(struct drm_i915_private *i915)
>>>>{
>>>> enum port port;
>>>>+ int ports = PORT_A | PORT_B | PORT_C | PORT_D | PORT_E | PORT_F;
>>>
>>>
>>>I'd not spread the knowledge of what port uses tc phy like this.
>>>It's painful to maintain.
>
>Umm, this wasn't meant to have anything to do with tc, really. Granted,
>the commit message is misleading.
ok, makes more sense now. I don't want us to keep updating this function
when the ports change on new platforms.
>
>>
>> also, not sure how this clarifies things if PORT_TC1 aliases PORT_D,
>> so I'd just drop this patch
>
>The point is that I'd like to reduce the number of ports set up by
>default, perhaps even further than this. It's a bit silly to generate 9
>dummy child devices on certain platforms when there's no VBT.
ok. So what would be the devices without vbt? I remember relying on this
for e.g. dg1 before we could read it.
What other platforms should we care about? And for those, should we
really care about ports E and F or could we reduce it to, say the first
4?
thanks
Lucas De Marchi
>
>
>BR,
>Jani.
>
>>
>> Lucas De Marchi
>>
>>>Lucas De Marchi
>>>
>>>>
>>>> if (!HAS_DDI(i915) && !IS_CHERRYVIEW(i915))
>>>> return;
>>>>
>>>>- for_each_port(port) {
>>>>+ for_each_port_masked(port, ports) {
>>>> struct ddi_vbt_port_info *info =
>>>> &i915->vbt.ddi_port_info[port];
>>>> enum phy phy = intel_port_to_phy(i915, port);
>>>>--
>>>>2.20.1
>>>>
>> _______________________________________________
>> Intel-gfx mailing list
>> Intel-gfx@lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
>--
>Jani Nikula, Intel Open Source Graphics Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 40+ messages in thread
* [Intel-gfx] ✓ Fi.CI.IGT: success for drm/i915/bios: vbt child device rework
2021-02-17 17:03 [Intel-gfx] [PATCH 00/12] drm/i915/bios: vbt child device rework Jani Nikula
` (14 preceding siblings ...)
2021-02-17 17:54 ` [Intel-gfx] [PATCH 00/12] " Lucas De Marchi
@ 2021-02-17 20:52 ` Patchwork
15 siblings, 0 replies; 40+ messages in thread
From: Patchwork @ 2021-02-17 20:52 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
[-- Attachment #1.1: Type: text/plain, Size: 30261 bytes --]
== Series Details ==
Series: drm/i915/bios: vbt child device rework
URL : https://patchwork.freedesktop.org/series/87165/
State : success
== Summary ==
CI Bug Log - changes from CI_DRM_9782_full -> Patchwork_19696_full
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Known issues
------------
Here are the changes found in Patchwork_19696_full that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@gem_ctx_persistence@close-replace-race:
- shard-glk: [PASS][1] -> [TIMEOUT][2] ([i915#2918])
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-glk1/igt@gem_ctx_persistence@close-replace-race.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-glk8/igt@gem_ctx_persistence@close-replace-race.html
* igt@gem_ctx_persistence@smoketest:
- shard-snb: NOTRUN -> [SKIP][3] ([fdo#109271] / [i915#1099]) +4 similar issues
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-snb2/igt@gem_ctx_persistence@smoketest.html
* igt@gem_eio@in-flight-contexts-immediate:
- shard-iclb: [PASS][4] -> [TIMEOUT][5] ([i915#3070])
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-iclb8/igt@gem_eio@in-flight-contexts-immediate.html
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-iclb1/igt@gem_eio@in-flight-contexts-immediate.html
* igt@gem_exec_fair@basic-none@vcs0:
- shard-kbl: [PASS][6] -> [FAIL][7] ([i915#2842]) +1 similar issue
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-kbl6/igt@gem_exec_fair@basic-none@vcs0.html
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-kbl2/igt@gem_exec_fair@basic-none@vcs0.html
* igt@gem_exec_reloc@basic-many-active@vcs0:
- shard-kbl: NOTRUN -> [FAIL][8] ([i915#2389]) +4 similar issues
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-kbl4/igt@gem_exec_reloc@basic-many-active@vcs0.html
* igt@gem_exec_reloc@basic-many-active@vcs1:
- shard-iclb: NOTRUN -> [FAIL][9] ([i915#2389])
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-iclb1/igt@gem_exec_reloc@basic-many-active@vcs1.html
* igt@gem_exec_reloc@basic-parallel:
- shard-apl: NOTRUN -> [TIMEOUT][10] ([i915#1729])
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-apl2/igt@gem_exec_reloc@basic-parallel.html
* igt@gem_exec_schedule@u-fairslice@rcs0:
- shard-iclb: [PASS][11] -> [DMESG-WARN][12] ([i915#2803])
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-iclb2/igt@gem_exec_schedule@u-fairslice@rcs0.html
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-iclb5/igt@gem_exec_schedule@u-fairslice@rcs0.html
* igt@gem_exec_schedule@u-fairslice@vcs1:
- shard-tglb: [PASS][13] -> [DMESG-WARN][14] ([i915#2803])
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-tglb3/igt@gem_exec_schedule@u-fairslice@vcs1.html
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-tglb6/igt@gem_exec_schedule@u-fairslice@vcs1.html
* igt@gem_exec_schedule@u-fairslice@vecs0:
- shard-skl: [PASS][15] -> [DMESG-WARN][16] ([i915#1610] / [i915#2803])
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-skl2/igt@gem_exec_schedule@u-fairslice@vecs0.html
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-skl7/igt@gem_exec_schedule@u-fairslice@vecs0.html
* igt@gem_huc_copy@huc-copy:
- shard-kbl: NOTRUN -> [SKIP][17] ([fdo#109271] / [i915#2190])
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-kbl6/igt@gem_huc_copy@huc-copy.html
* igt@gem_pwrite@basic-exhaustion:
- shard-snb: NOTRUN -> [WARN][18] ([i915#2658])
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-snb2/igt@gem_pwrite@basic-exhaustion.html
* igt@gem_userptr_blits@input-checking:
- shard-apl: NOTRUN -> [DMESG-WARN][19] ([i915#3002])
[19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-apl2/igt@gem_userptr_blits@input-checking.html
* igt@gem_userptr_blits@vma-merge:
- shard-snb: NOTRUN -> [FAIL][20] ([i915#2724])
[20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-snb2/igt@gem_userptr_blits@vma-merge.html
* igt@gen9_exec_parse@allowed-all:
- shard-skl: [PASS][21] -> [DMESG-WARN][22] ([i915#1436] / [i915#716])
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-skl1/igt@gen9_exec_parse@allowed-all.html
[22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-skl7/igt@gen9_exec_parse@allowed-all.html
* igt@i915_pm_dc@dc6-dpms:
- shard-kbl: NOTRUN -> [FAIL][23] ([i915#454])
[23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-kbl4/igt@i915_pm_dc@dc6-dpms.html
* igt@i915_pm_lpsp@kms-lpsp@kms-lpsp-dp:
- shard-kbl: NOTRUN -> [SKIP][24] ([fdo#109271] / [i915#1937])
[24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-kbl4/igt@i915_pm_lpsp@kms-lpsp@kms-lpsp-dp.html
* igt@i915_selftest@live@hangcheck:
- shard-skl: NOTRUN -> [INCOMPLETE][25] ([i915#2782])
[25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-skl6/igt@i915_selftest@live@hangcheck.html
* igt@kms_ccs@pipe-a-ccs-on-another-bo:
- shard-snb: NOTRUN -> [SKIP][26] ([fdo#109271]) +303 similar issues
[26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-snb2/igt@kms_ccs@pipe-a-ccs-on-another-bo.html
* igt@kms_chamelium@dp-mode-timings:
- shard-apl: NOTRUN -> [SKIP][27] ([fdo#109271] / [fdo#111827]) +11 similar issues
[27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-apl1/igt@kms_chamelium@dp-mode-timings.html
* igt@kms_chamelium@hdmi-hpd-storm:
- shard-kbl: NOTRUN -> [SKIP][28] ([fdo#109271] / [fdo#111827]) +21 similar issues
[28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-kbl1/igt@kms_chamelium@hdmi-hpd-storm.html
* igt@kms_chamelium@vga-hpd-without-ddc:
- shard-skl: NOTRUN -> [SKIP][29] ([fdo#109271] / [fdo#111827]) +2 similar issues
[29]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-skl10/igt@kms_chamelium@vga-hpd-without-ddc.html
* igt@kms_color@pipe-d-ctm-0-5:
- shard-skl: NOTRUN -> [SKIP][30] ([fdo#109271]) +42 similar issues
[30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-skl10/igt@kms_color@pipe-d-ctm-0-5.html
* igt@kms_color@pipe-invalid-gamma-lut-sizes:
- shard-kbl: [PASS][31] -> [DMESG-WARN][32] ([i915#165])
[31]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-kbl1/igt@kms_color@pipe-invalid-gamma-lut-sizes.html
[32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-kbl2/igt@kms_color@pipe-invalid-gamma-lut-sizes.html
* igt@kms_color_chamelium@pipe-c-ctm-green-to-red:
- shard-snb: NOTRUN -> [SKIP][33] ([fdo#109271] / [fdo#111827]) +17 similar issues
[33]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-snb2/igt@kms_color_chamelium@pipe-c-ctm-green-to-red.html
* igt@kms_content_protection@atomic-dpms:
- shard-apl: NOTRUN -> [TIMEOUT][34] ([i915#1319])
[34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-apl2/igt@kms_content_protection@atomic-dpms.html
* igt@kms_cursor_crc@pipe-a-cursor-suspend:
- shard-apl: NOTRUN -> [DMESG-WARN][35] ([i915#180])
[35]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-apl1/igt@kms_cursor_crc@pipe-a-cursor-suspend.html
* igt@kms_cursor_crc@pipe-c-cursor-64x64-random:
- shard-skl: [PASS][36] -> [FAIL][37] ([i915#54]) +5 similar issues
[36]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-skl7/igt@kms_cursor_crc@pipe-c-cursor-64x64-random.html
[37]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-skl5/igt@kms_cursor_crc@pipe-c-cursor-64x64-random.html
* igt@kms_cursor_legacy@cursor-vs-flip-toggle:
- shard-hsw: [PASS][38] -> [FAIL][39] ([i915#2370])
[38]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-hsw4/igt@kms_cursor_legacy@cursor-vs-flip-toggle.html
[39]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-hsw1/igt@kms_cursor_legacy@cursor-vs-flip-toggle.html
* igt@kms_cursor_legacy@pipe-d-single-bo:
- shard-kbl: NOTRUN -> [SKIP][40] ([fdo#109271] / [i915#533]) +1 similar issue
[40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-kbl1/igt@kms_cursor_legacy@pipe-d-single-bo.html
* igt@kms_flip@flip-vs-expired-vblank-interruptible@a-edp1:
- shard-tglb: [PASS][41] -> [FAIL][42] ([i915#2598])
[41]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-tglb2/igt@kms_flip@flip-vs-expired-vblank-interruptible@a-edp1.html
[42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-tglb8/igt@kms_flip@flip-vs-expired-vblank-interruptible@a-edp1.html
* igt@kms_flip@flip-vs-expired-vblank@b-edp1:
- shard-skl: NOTRUN -> [FAIL][43] ([i915#79])
[43]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-skl1/igt@kms_flip@flip-vs-expired-vblank@b-edp1.html
* igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs:
- shard-kbl: NOTRUN -> [FAIL][44] ([i915#2641])
[44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-kbl4/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs.html
* igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs:
- shard-apl: NOTRUN -> [SKIP][45] ([fdo#109271] / [i915#2672])
[45]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-apl6/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs.html
* igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile:
- shard-kbl: NOTRUN -> [SKIP][46] ([fdo#109271] / [i915#2642]) +1 similar issue
[46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-kbl4/igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile.html
* igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-blt:
- shard-hsw: NOTRUN -> [SKIP][47] ([fdo#109271])
[47]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-hsw8/igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-blt.html
* igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-draw-mmap-cpu:
- shard-kbl: NOTRUN -> [SKIP][48] ([fdo#109271]) +166 similar issues
[48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-kbl4/igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-draw-mmap-cpu.html
* igt@kms_pipe_crc_basic@disable-crc-after-crtc-pipe-d:
- shard-apl: NOTRUN -> [SKIP][49] ([fdo#109271] / [i915#533]) +2 similar issues
[49]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-apl1/igt@kms_pipe_crc_basic@disable-crc-after-crtc-pipe-d.html
* igt@kms_plane_alpha_blend@pipe-a-alpha-transparent-fb:
- shard-kbl: NOTRUN -> [FAIL][50] ([i915#265])
[50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-kbl4/igt@kms_plane_alpha_blend@pipe-a-alpha-transparent-fb.html
* igt@kms_plane_alpha_blend@pipe-b-constant-alpha-max:
- shard-kbl: NOTRUN -> [FAIL][51] ([fdo#108145] / [i915#265])
[51]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-kbl4/igt@kms_plane_alpha_blend@pipe-b-constant-alpha-max.html
* igt@kms_plane_alpha_blend@pipe-c-alpha-basic:
- shard-apl: NOTRUN -> [FAIL][52] ([fdo#108145] / [i915#265])
[52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-apl6/igt@kms_plane_alpha_blend@pipe-c-alpha-basic.html
- shard-skl: NOTRUN -> [FAIL][53] ([fdo#108145] / [i915#265])
[53]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-skl1/igt@kms_plane_alpha_blend@pipe-c-alpha-basic.html
* igt@kms_plane_alpha_blend@pipe-c-coverage-7efc:
- shard-skl: [PASS][54] -> [FAIL][55] ([fdo#108145] / [i915#265]) +1 similar issue
[54]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-skl3/igt@kms_plane_alpha_blend@pipe-c-coverage-7efc.html
[55]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-skl6/igt@kms_plane_alpha_blend@pipe-c-coverage-7efc.html
* igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area-2:
- shard-apl: NOTRUN -> [SKIP][56] ([fdo#109271] / [i915#658]) +3 similar issues
[56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-apl6/igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area-2.html
- shard-skl: NOTRUN -> [SKIP][57] ([fdo#109271] / [i915#658])
[57]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-skl1/igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area-2.html
* igt@kms_psr2_sf@overlay-primary-update-sf-dmg-area-3:
- shard-kbl: NOTRUN -> [SKIP][58] ([fdo#109271] / [i915#658]) +4 similar issues
[58]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-kbl4/igt@kms_psr2_sf@overlay-primary-update-sf-dmg-area-3.html
* igt@kms_psr@psr2_cursor_plane_move:
- shard-iclb: [PASS][59] -> [SKIP][60] ([fdo#109441]) +1 similar issue
[59]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-iclb2/igt@kms_psr@psr2_cursor_plane_move.html
[60]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-iclb4/igt@kms_psr@psr2_cursor_plane_move.html
* igt@kms_pwrite_crc:
- shard-kbl: [PASS][61] -> [DMESG-WARN][62] ([i915#180] / [i915#78])
[61]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-kbl1/igt@kms_pwrite_crc.html
[62]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-kbl2/igt@kms_pwrite_crc.html
* igt@kms_writeback@writeback-fb-id:
- shard-apl: NOTRUN -> [SKIP][63] ([fdo#109271] / [i915#2437])
[63]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-apl6/igt@kms_writeback@writeback-fb-id.html
* igt@nouveau_crc@pipe-b-ctx-flip-skip-current-frame:
- shard-apl: NOTRUN -> [SKIP][64] ([fdo#109271]) +94 similar issues
[64]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-apl6/igt@nouveau_crc@pipe-b-ctx-flip-skip-current-frame.html
* igt@sysfs_clients@recycle:
- shard-hsw: [PASS][65] -> [FAIL][66] ([i915#3028]) +1 similar issue
[65]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-hsw1/igt@sysfs_clients@recycle.html
[66]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-hsw1/igt@sysfs_clients@recycle.html
* igt@sysfs_clients@recycle-many:
- shard-apl: [PASS][67] -> [FAIL][68] ([i915#3028])
[67]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-apl8/igt@sysfs_clients@recycle-many.html
[68]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-apl3/igt@sysfs_clients@recycle-many.html
* igt@sysfs_clients@sema-10@vcs0:
- shard-kbl: [PASS][69] -> [SKIP][70] ([fdo#109271] / [i915#3026])
[69]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-kbl4/igt@sysfs_clients@sema-10@vcs0.html
[70]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-kbl6/igt@sysfs_clients@sema-10@vcs0.html
* igt@sysfs_clients@split-10@bcs0:
- shard-apl: [PASS][71] -> [SKIP][72] ([fdo#109271] / [i915#3026])
[71]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-apl8/igt@sysfs_clients@split-10@bcs0.html
[72]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-apl3/igt@sysfs_clients@split-10@bcs0.html
- shard-kbl: NOTRUN -> [SKIP][73] ([fdo#109271] / [i915#3026])
[73]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-kbl4/igt@sysfs_clients@split-10@bcs0.html
* igt@testdisplay:
- shard-kbl: [PASS][74] -> [DMESG-WARN][75] ([i915#165] / [i915#180] / [i915#78])
[74]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-kbl6/igt@testdisplay.html
[75]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-kbl2/igt@testdisplay.html
#### Possible fixes ####
* igt@gem_ctx_clone@flags:
- shard-skl: [DMESG-WARN][76] ([i915#1982]) -> [PASS][77] +1 similar issue
[76]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-skl7/igt@gem_ctx_clone@flags.html
[77]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-skl5/igt@gem_ctx_clone@flags.html
* igt@gem_eio@unwedge-stress:
- shard-tglb: [TIMEOUT][78] ([i915#1037] / [i915#3063]) -> [PASS][79]
[78]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-tglb3/igt@gem_eio@unwedge-stress.html
[79]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-tglb7/igt@gem_eio@unwedge-stress.html
* igt@gem_exec_create@legacy:
- shard-glk: [DMESG-WARN][80] ([i915#118] / [i915#95]) -> [PASS][81]
[80]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-glk4/igt@gem_exec_create@legacy.html
[81]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-glk6/igt@gem_exec_create@legacy.html
* igt@gem_exec_fair@basic-flow@rcs0:
- shard-tglb: [FAIL][82] ([i915#2842]) -> [PASS][83] +4 similar issues
[82]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-tglb2/igt@gem_exec_fair@basic-flow@rcs0.html
[83]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-tglb2/igt@gem_exec_fair@basic-flow@rcs0.html
* igt@gem_exec_fair@basic-none@rcs0:
- shard-kbl: [FAIL][84] ([i915#2842]) -> [PASS][85]
[84]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-kbl6/igt@gem_exec_fair@basic-none@rcs0.html
[85]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-kbl2/igt@gem_exec_fair@basic-none@rcs0.html
* igt@gen9_exec_parse@allowed-single:
- shard-skl: [DMESG-WARN][86] ([i915#1436] / [i915#716]) -> [PASS][87]
[86]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-skl10/igt@gen9_exec_parse@allowed-single.html
[87]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-skl1/igt@gen9_exec_parse@allowed-single.html
* igt@i915_selftest@live@gem_contexts:
- shard-skl: [INCOMPLETE][88] ([i915#198] / [i915#2782]) -> [PASS][89]
[88]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-skl4/igt@i915_selftest@live@gem_contexts.html
[89]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-skl6/igt@i915_selftest@live@gem_contexts.html
* igt@i915_selftest@live@hangcheck:
- shard-hsw: [INCOMPLETE][90] ([i915#2782]) -> [PASS][91]
[90]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-hsw7/igt@i915_selftest@live@hangcheck.html
[91]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-hsw8/igt@i915_selftest@live@hangcheck.html
* igt@kms_async_flips@test-time-stamp:
- shard-tglb: [FAIL][92] ([i915#2597]) -> [PASS][93]
[92]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-tglb5/igt@kms_async_flips@test-time-stamp.html
[93]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-tglb3/igt@kms_async_flips@test-time-stamp.html
* igt@kms_cursor_crc@pipe-b-cursor-128x128-random:
- shard-skl: [FAIL][94] ([i915#54]) -> [PASS][95] +8 similar issues
[94]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-skl4/igt@kms_cursor_crc@pipe-b-cursor-128x128-random.html
[95]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-skl4/igt@kms_cursor_crc@pipe-b-cursor-128x128-random.html
* igt@kms_flip@flip-vs-expired-vblank-interruptible@a-dp1:
- shard-apl: [FAIL][96] ([i915#79]) -> [PASS][97]
[96]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-apl8/igt@kms_flip@flip-vs-expired-vblank-interruptible@a-dp1.html
[97]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-apl3/igt@kms_flip@flip-vs-expired-vblank-interruptible@a-dp1.html
* igt@kms_hdr@bpc-switch:
- shard-skl: [FAIL][98] ([i915#1188]) -> [PASS][99]
[98]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-skl8/igt@kms_hdr@bpc-switch.html
[99]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-skl9/igt@kms_hdr@bpc-switch.html
* igt@kms_plane_alpha_blend@pipe-b-constant-alpha-min:
- shard-skl: [FAIL][100] ([fdo#108145] / [i915#265]) -> [PASS][101]
[100]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-skl2/igt@kms_plane_alpha_blend@pipe-b-constant-alpha-min.html
[101]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-skl10/igt@kms_plane_alpha_blend@pipe-b-constant-alpha-min.html
* igt@kms_psr@psr2_sprite_plane_move:
- shard-iclb: [SKIP][102] ([fdo#109441]) -> [PASS][103] +2 similar issues
[102]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-iclb5/igt@kms_psr@psr2_sprite_plane_move.html
[103]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-iclb2/igt@kms_psr@psr2_sprite_plane_move.html
* igt@sysfs_clients@busy@bcs0:
- shard-skl: [FAIL][104] ([i915#3019]) -> [PASS][105]
[104]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-skl7/igt@sysfs_clients@busy@bcs0.html
[105]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-skl5/igt@sysfs_clients@busy@bcs0.html
* igt@sysfs_clients@recycle-many:
- shard-iclb: [FAIL][106] ([i915#3028]) -> [PASS][107] +1 similar issue
[106]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-iclb1/igt@sysfs_clients@recycle-many.html
[107]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-iclb7/igt@sysfs_clients@recycle-many.html
- shard-kbl: [FAIL][108] ([i915#3028]) -> [PASS][109]
[108]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-kbl6/igt@sysfs_clients@recycle-many.html
[109]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-kbl4/igt@sysfs_clients@recycle-many.html
* igt@sysfs_clients@split-25@vecs0:
- shard-skl: [SKIP][110] ([fdo#109271]) -> [PASS][111]
[110]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-skl8/igt@sysfs_clients@split-25@vecs0.html
[111]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-skl9/igt@sysfs_clients@split-25@vecs0.html
#### Warnings ####
* igt@gem_exec_fair@basic-throttle@rcs0:
- shard-iclb: [FAIL][112] ([i915#2849]) -> [FAIL][113] ([i915#2842])
[112]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-iclb7/igt@gem_exec_fair@basic-throttle@rcs0.html
[113]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-iclb6/igt@gem_exec_fair@basic-throttle@rcs0.html
* igt@i915_pm_rc6_residency@rc6-idle:
- shard-iclb: [WARN][114] ([i915#1804] / [i915#2684]) -> [WARN][115] ([i915#2684])
[114]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-iclb4/igt@i915_pm_rc6_residency@rc6-idle.html
[115]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-iclb2/igt@i915_pm_rc6_residency@rc6-idle.html
* igt@kms_psr2_sf@cursor-plane-update-sf:
- shard-iclb: [SKIP][116] ([i915#658]) -> [SKIP][117] ([i915#2920]) +2 similar issues
[116]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-iclb5/igt@kms_psr2_sf@cursor-plane-update-sf.html
[117]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-iclb2/igt@kms_psr2_sf@cursor-plane-update-sf.html
* igt@kms_psr2_sf@plane-move-sf-dmg-area-3:
- shard-iclb: [SKIP][118] ([i915#2920]) -> [SKIP][119] ([i915#658]) +1 similar issue
[118]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-iclb2/igt@kms_psr2_sf@plane-move-sf-dmg-area-3.html
[119]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-iclb6/igt@kms_psr2_sf@plane-move-sf-dmg-area-3.html
* igt@runner@aborted:
- shard-iclb: ([FAIL][120], [FAIL][121], [FAIL][122]) ([i915#2295] / [i915#2724] / [i915#3002]) -> ([FAIL][123], [FAIL][124], [FAIL][125]) ([i915#2295] / [i915#2426] / [i915#2724] / [i915#3002])
[120]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-iclb8/igt@runner@aborted.html
[121]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-iclb4/igt@runner@aborted.html
[122]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-iclb2/igt@runner@aborted.html
[123]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-iclb2/igt@runner@aborted.html
[124]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-iclb8/igt@runner@aborted.html
[125]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-iclb5/igt@runner@aborted.html
- shard-apl: ([FAIL][126], [FAIL][127], [FAIL][128]) ([i915#2295] / [i915#3002]) -> ([FAIL][129], [FAIL][130], [FAIL][131], [FAIL][132]) ([i915#1814] / [i915#2295] / [i915#3002])
[126]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-apl6/igt@runner@aborted.html
[127]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-apl1/igt@runner@aborted.html
[128]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-apl1/igt@runner@aborted.html
[129]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-apl8/igt@runner@aborted.html
[130]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-apl1/igt@runner@aborted.html
[131]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-apl2/igt@runner@aborted.html
[132]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-apl2/igt@runner@aborted.html
- shard-tglb: ([FAIL][133], [FAIL][134], [FAIL][135]) ([i915#2295] / [i915#2667] / [i915#3002]) -> ([FAIL][136], [FAIL][137], [FAIL][138]) ([i915#2295] / [i915#2426] / [i915#2667] / [i915#2803] / [i915#3002])
[133]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-tglb8/igt@runner@aborted.html
[134]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-tglb7/igt@runner@aborted.html
[135]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-tglb3/igt@runner@aborted.html
[136]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-tglb6/igt@runner@aborted.html
[137]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-tglb8/igt@runner@aborted.html
[138]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-tglb6/igt@runner@aborted.html
- shard-skl: ([FAIL][139], [FAIL][140], [FAIL][141], [FAIL][142]) ([i915#1436] / [i915#2295] / [i915#3002]) -> ([FAIL][143], [FAIL][144], [FAIL][145]) ([i915#1436] / [i915#2295] / [i915#2426] / [i915#3002])
[139]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-skl3/igt@runner@aborted.html
[140]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-skl1/igt@runner@aborted.html
[141]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-skl10/igt@runner@aborted.html
[142]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9782/shard-skl2/igt@runner@aborted.html
[143]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-skl7/igt@runner@aborted.html
[144]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-skl7/igt@runner@aborted.html
[145]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/shard-skl2/igt@runner@aborted.html
[fdo#108145]: https://bugs.freedesktop.org/show_bug.cgi?id=108145
[fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
[fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441
[fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827
[i915#1037]: https://gitlab.freedesktop.org/drm/intel/issues/1037
[i915#1099]: https://gitlab.freedesktop.org/drm/intel/issues/1099
[i915#118]: https://gitlab.freedesktop.org/drm/intel/issues/118
[i915#1188]: https://gitlab.freedesktop.org/drm/intel/issues/1188
[i915#1319]: https://gitlab.freedesktop.org/drm/intel/issues/1319
[i915#1436]: https://gitlab.freedesktop.org/drm/intel/issues/1436
[i915#1610]: https://gitlab.freedesktop.org/drm/intel/issues/1610
[i915#165]: https://gitlab.freedesktop.org/drm/intel/issues/165
[i915#1729]: https://gitlab.freedesktop.org/drm/intel/issues/1729
[i915#180]: https://gitlab.freedesktop.org/drm/intel/issues/180
[i915#1804]: https://gitlab.freedesktop.org/drm/intel/issues/1804
[i915#1814]: https://gitlab.freedesktop.org/drm/intel/issues/1814
[i915#1937]: https://gitlab.freedesktop.org/drm/intel/issues/1937
[i915#198]: https://gitlab.freedesktop.org/drm/intel/issues/198
[i915#1982]: https://gitlab.freedesktop.org/drm/intel/issues/1982
[i915#2190]: https://gitlab.freedesktop.org/drm/intel/issues/2190
[i915#2295]: https://gitlab.freedesktop.org/drm/intel/issues/2295
[i915#2370]: https://gitlab.freedesktop.org/drm/intel/issues/2370
[i915#2389]: https://gitlab.freedesktop.org/drm/intel/issues/2389
[i915#2426]: https://gitlab.freedesktop.org/drm/intel/issues/2426
[i915#2437]: https://gitlab.freedesktop.org/drm/intel/issues/2437
[i915#2597]: https://gitlab.freedesktop.org/drm/intel/issues/2597
[i915#2598]: https://gitlab.freedesktop.org/drm/intel/issues/2598
[i915#2641]: https://gitlab.freedesktop.org/drm/intel/issues/2641
[i915#2642]: https://gitlab.freedesktop.org/drm/intel/issues/2642
[i915#265]: https://gitlab.freedesktop.org/drm/intel/issues/265
[i915#2658]: https://gitlab.freedesktop.org/drm/intel/issues/2658
[i915#2667]: https://gitlab.freedesktop.org/drm/intel/issues/2667
[i915#2672]: https://gitlab.freedesktop.org/drm/intel/issues/2672
[i915#2684]: https://gitlab.freedesktop.org/drm/intel/issues/2684
[i915#2724]: https://gitlab.freedesktop.org/drm/intel/issues/2724
[i915#2782]: https://gitlab.freedesktop.org/drm/intel/issues/2782
[i915#2803]: https://gitlab.freedesktop.org/drm/intel/issues/2803
[i915#2842]: https://gitlab.freedesktop.org/drm/intel/issues/2842
[i915#2849]:
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19696/index.html
[-- Attachment #1.2: Type: text/html, Size: 37521 bytes --]
[-- Attachment #2: Type: text/plain, Size: 160 bytes --]
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Intel-gfx] [PATCH 01/12] drm/i915/bios: mass convert dev_priv to i915
2021-02-17 17:03 ` [Intel-gfx] [PATCH 01/12] drm/i915/bios: mass convert dev_priv to i915 Jani Nikula
@ 2021-02-22 18:14 ` Ville Syrjälä
0 siblings, 0 replies; 40+ messages in thread
From: Ville Syrjälä @ 2021-02-22 18:14 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx, Lucas De Marchi
On Wed, Feb 17, 2021 at 07:03:31PM +0200, Jani Nikula wrote:
> Time to just yank out the bandage. No functional changes.
>
> Cc: Lucas De Marchi <lucas.demarchi@intel.com>
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_bios.c | 766 +++++++++++-----------
> 1 file changed, 383 insertions(+), 383 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
> index 7902d4c2673e..802c228b2940 100644
> --- a/drivers/gpu/drm/i915/display/intel_bios.c
> +++ b/drivers/gpu/drm/i915/display/intel_bios.c
> @@ -211,7 +211,7 @@ get_lvds_fp_timing(const struct bdb_header *bdb,
>
> /* Parse general panel options */
> static void
> -parse_panel_options(struct drm_i915_private *dev_priv,
> +parse_panel_options(struct drm_i915_private *i915,
> const struct bdb_header *bdb)
> {
> const struct bdb_lvds_options *lvds_options;
> @@ -223,27 +223,27 @@ parse_panel_options(struct drm_i915_private *dev_priv,
> if (!lvds_options)
> return;
>
> - dev_priv->vbt.lvds_dither = lvds_options->pixel_dither;
> + i915->vbt.lvds_dither = lvds_options->pixel_dither;
>
> - ret = intel_opregion_get_panel_type(dev_priv);
> + ret = intel_opregion_get_panel_type(i915);
> if (ret >= 0) {
> - drm_WARN_ON(&dev_priv->drm, ret > 0xf);
> + drm_WARN_ON(&i915->drm, ret > 0xf);
> panel_type = ret;
> - drm_dbg_kms(&dev_priv->drm, "Panel type: %d (OpRegion)\n",
> + drm_dbg_kms(&i915->drm, "Panel type: %d (OpRegion)\n",
> panel_type);
> } else {
> if (lvds_options->panel_type > 0xf) {
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "Invalid VBT panel type 0x%x\n",
> lvds_options->panel_type);
> return;
> }
> panel_type = lvds_options->panel_type;
> - drm_dbg_kms(&dev_priv->drm, "Panel type: %d (VBT)\n",
> + drm_dbg_kms(&i915->drm, "Panel type: %d (VBT)\n",
> panel_type);
> }
>
> - dev_priv->vbt.panel_type = panel_type;
> + i915->vbt.panel_type = panel_type;
>
> drrs_mode = (lvds_options->dps_panel_type_bits
> >> (panel_type * 2)) & MODE_MASK;
> @@ -254,17 +254,17 @@ parse_panel_options(struct drm_i915_private *dev_priv,
> */
> switch (drrs_mode) {
> case 0:
> - dev_priv->vbt.drrs_type = STATIC_DRRS_SUPPORT;
> - drm_dbg_kms(&dev_priv->drm, "DRRS supported mode is static\n");
> + i915->vbt.drrs_type = STATIC_DRRS_SUPPORT;
> + drm_dbg_kms(&i915->drm, "DRRS supported mode is static\n");
> break;
> case 2:
> - dev_priv->vbt.drrs_type = SEAMLESS_DRRS_SUPPORT;
> - drm_dbg_kms(&dev_priv->drm,
> + i915->vbt.drrs_type = SEAMLESS_DRRS_SUPPORT;
> + drm_dbg_kms(&i915->drm,
> "DRRS supported mode is seamless\n");
> break;
> default:
> - dev_priv->vbt.drrs_type = DRRS_NOT_SUPPORTED;
> - drm_dbg_kms(&dev_priv->drm,
> + i915->vbt.drrs_type = DRRS_NOT_SUPPORTED;
> + drm_dbg_kms(&i915->drm,
> "DRRS not supported (VBT input)\n");
> break;
> }
> @@ -272,7 +272,7 @@ parse_panel_options(struct drm_i915_private *dev_priv,
>
> /* Try to find integrated panel timing data */
> static void
> -parse_lfp_panel_dtd(struct drm_i915_private *dev_priv,
> +parse_lfp_panel_dtd(struct drm_i915_private *i915,
> const struct bdb_header *bdb)
> {
> const struct bdb_lvds_lfp_data *lvds_lfp_data;
> @@ -280,7 +280,7 @@ parse_lfp_panel_dtd(struct drm_i915_private *dev_priv,
> const struct lvds_dvo_timing *panel_dvo_timing;
> const struct lvds_fp_timing *fp_timing;
> struct drm_display_mode *panel_fixed_mode;
> - int panel_type = dev_priv->vbt.panel_type;
> + int panel_type = i915->vbt.panel_type;
>
> lvds_lfp_data = find_section(bdb, BDB_LVDS_LFP_DATA);
> if (!lvds_lfp_data)
> @@ -300,9 +300,9 @@ parse_lfp_panel_dtd(struct drm_i915_private *dev_priv,
>
> fill_detail_timing_data(panel_fixed_mode, panel_dvo_timing);
>
> - dev_priv->vbt.lfp_lvds_vbt_mode = panel_fixed_mode;
> + i915->vbt.lfp_lvds_vbt_mode = panel_fixed_mode;
>
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "Found panel mode in BIOS VBT legacy lfp table:\n");
> drm_mode_debug_printmodeline(panel_fixed_mode);
>
> @@ -313,16 +313,16 @@ parse_lfp_panel_dtd(struct drm_i915_private *dev_priv,
> /* check the resolution, just to be sure */
> if (fp_timing->x_res == panel_fixed_mode->hdisplay &&
> fp_timing->y_res == panel_fixed_mode->vdisplay) {
> - dev_priv->vbt.bios_lvds_val = fp_timing->lvds_reg_val;
> - drm_dbg_kms(&dev_priv->drm,
> + i915->vbt.bios_lvds_val = fp_timing->lvds_reg_val;
> + drm_dbg_kms(&i915->drm,
> "VBT initial LVDS value %x\n",
> - dev_priv->vbt.bios_lvds_val);
> + i915->vbt.bios_lvds_val);
> }
> }
> }
>
> static void
> -parse_generic_dtd(struct drm_i915_private *dev_priv,
> +parse_generic_dtd(struct drm_i915_private *i915,
> const struct bdb_header *bdb)
> {
> const struct bdb_generic_dtd *generic_dtd;
> @@ -335,26 +335,26 @@ parse_generic_dtd(struct drm_i915_private *dev_priv,
> return;
>
> if (generic_dtd->gdtd_size < sizeof(struct generic_dtd_entry)) {
> - drm_err(&dev_priv->drm, "GDTD size %u is too small.\n",
> + drm_err(&i915->drm, "GDTD size %u is too small.\n",
> generic_dtd->gdtd_size);
> return;
> } else if (generic_dtd->gdtd_size !=
> sizeof(struct generic_dtd_entry)) {
> - drm_err(&dev_priv->drm, "Unexpected GDTD size %u\n",
> + drm_err(&i915->drm, "Unexpected GDTD size %u\n",
> generic_dtd->gdtd_size);
> /* DTD has unknown fields, but keep going */
> }
>
> num_dtd = (get_blocksize(generic_dtd) -
> sizeof(struct bdb_generic_dtd)) / generic_dtd->gdtd_size;
> - if (dev_priv->vbt.panel_type >= num_dtd) {
> - drm_err(&dev_priv->drm,
> + if (i915->vbt.panel_type >= num_dtd) {
> + drm_err(&i915->drm,
> "Panel type %d not found in table of %d DTD's\n",
> - dev_priv->vbt.panel_type, num_dtd);
> + i915->vbt.panel_type, num_dtd);
> return;
> }
>
> - dtd = &generic_dtd->dtd[dev_priv->vbt.panel_type];
> + dtd = &generic_dtd->dtd[i915->vbt.panel_type];
>
> panel_fixed_mode = kzalloc(sizeof(*panel_fixed_mode), GFP_KERNEL);
> if (!panel_fixed_mode)
> @@ -393,15 +393,15 @@ parse_generic_dtd(struct drm_i915_private *dev_priv,
> else
> panel_fixed_mode->flags |= DRM_MODE_FLAG_NVSYNC;
>
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "Found panel mode in BIOS VBT generic dtd table:\n");
> drm_mode_debug_printmodeline(panel_fixed_mode);
>
> - dev_priv->vbt.lfp_lvds_vbt_mode = panel_fixed_mode;
> + i915->vbt.lfp_lvds_vbt_mode = panel_fixed_mode;
> }
>
> static void
> -parse_panel_dtd(struct drm_i915_private *dev_priv,
> +parse_panel_dtd(struct drm_i915_private *i915,
> const struct bdb_header *bdb)
> {
> /*
> @@ -413,18 +413,18 @@ parse_panel_dtd(struct drm_i915_private *dev_priv,
> * back to trying the old LFP block if that fails.
> */
> if (bdb->version >= 229)
> - parse_generic_dtd(dev_priv, bdb);
> - if (!dev_priv->vbt.lfp_lvds_vbt_mode)
> - parse_lfp_panel_dtd(dev_priv, bdb);
> + parse_generic_dtd(i915, bdb);
> + if (!i915->vbt.lfp_lvds_vbt_mode)
> + parse_lfp_panel_dtd(i915, bdb);
> }
>
> static void
> -parse_lfp_backlight(struct drm_i915_private *dev_priv,
> +parse_lfp_backlight(struct drm_i915_private *i915,
> const struct bdb_header *bdb)
> {
> const struct bdb_lfp_backlight_data *backlight_data;
> const struct lfp_backlight_data_entry *entry;
> - int panel_type = dev_priv->vbt.panel_type;
> + int panel_type = i915->vbt.panel_type;
> u16 level;
>
> backlight_data = find_section(bdb, BDB_LVDS_BACKLIGHT);
> @@ -432,7 +432,7 @@ parse_lfp_backlight(struct drm_i915_private *dev_priv,
> return;
>
> if (backlight_data->entry_size != sizeof(backlight_data->data[0])) {
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "Unsupported backlight data entry size %u\n",
> backlight_data->entry_size);
> return;
> @@ -440,26 +440,26 @@ parse_lfp_backlight(struct drm_i915_private *dev_priv,
>
> entry = &backlight_data->data[panel_type];
>
> - dev_priv->vbt.backlight.present = entry->type == BDB_BACKLIGHT_TYPE_PWM;
> - if (!dev_priv->vbt.backlight.present) {
> - drm_dbg_kms(&dev_priv->drm,
> + i915->vbt.backlight.present = entry->type == BDB_BACKLIGHT_TYPE_PWM;
> + if (!i915->vbt.backlight.present) {
> + drm_dbg_kms(&i915->drm,
> "PWM backlight not present in VBT (type %u)\n",
> entry->type);
> return;
> }
>
> - dev_priv->vbt.backlight.type = INTEL_BACKLIGHT_DISPLAY_DDI;
> + i915->vbt.backlight.type = INTEL_BACKLIGHT_DISPLAY_DDI;
> if (bdb->version >= 191 &&
> get_blocksize(backlight_data) >= sizeof(*backlight_data)) {
> const struct lfp_backlight_control_method *method;
>
> method = &backlight_data->backlight_control[panel_type];
> - dev_priv->vbt.backlight.type = method->type;
> - dev_priv->vbt.backlight.controller = method->controller;
> + i915->vbt.backlight.type = method->type;
> + i915->vbt.backlight.controller = method->controller;
> }
>
> - dev_priv->vbt.backlight.pwm_freq_hz = entry->pwm_freq_hz;
> - dev_priv->vbt.backlight.active_low_pwm = entry->active_low_pwm;
> + i915->vbt.backlight.pwm_freq_hz = entry->pwm_freq_hz;
> + i915->vbt.backlight.active_low_pwm = entry->active_low_pwm;
>
> if (bdb->version >= 234) {
> u16 min_level;
> @@ -477,37 +477,37 @@ parse_lfp_backlight(struct drm_i915_private *dev_priv,
> min_level = min_level / 255;
>
> if (min_level > 255) {
> - drm_warn(&dev_priv->drm, "Brightness min level > 255\n");
> + drm_warn(&i915->drm, "Brightness min level > 255\n");
> level = 255;
> }
> - dev_priv->vbt.backlight.min_brightness = min_level;
> + i915->vbt.backlight.min_brightness = min_level;
> } else {
> level = backlight_data->level[panel_type];
> - dev_priv->vbt.backlight.min_brightness = entry->min_brightness;
> + i915->vbt.backlight.min_brightness = entry->min_brightness;
> }
>
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "VBT backlight PWM modulation frequency %u Hz, "
> "active %s, min brightness %u, level %u, controller %u\n",
> - dev_priv->vbt.backlight.pwm_freq_hz,
> - dev_priv->vbt.backlight.active_low_pwm ? "low" : "high",
> - dev_priv->vbt.backlight.min_brightness,
> + i915->vbt.backlight.pwm_freq_hz,
> + i915->vbt.backlight.active_low_pwm ? "low" : "high",
> + i915->vbt.backlight.min_brightness,
> level,
> - dev_priv->vbt.backlight.controller);
> + i915->vbt.backlight.controller);
> }
>
> /* Try to find sdvo panel data */
> static void
> -parse_sdvo_panel_data(struct drm_i915_private *dev_priv,
> +parse_sdvo_panel_data(struct drm_i915_private *i915,
> const struct bdb_header *bdb)
> {
> const struct bdb_sdvo_panel_dtds *dtds;
> struct drm_display_mode *panel_fixed_mode;
> int index;
>
> - index = dev_priv->params.vbt_sdvo_panel_type;
> + index = i915->params.vbt_sdvo_panel_type;
> if (index == -2) {
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "Ignore SDVO panel mode from BIOS VBT tables.\n");
> return;
> }
> @@ -532,17 +532,17 @@ parse_sdvo_panel_data(struct drm_i915_private *dev_priv,
>
> fill_detail_timing_data(panel_fixed_mode, &dtds->dtds[index]);
>
> - dev_priv->vbt.sdvo_lvds_vbt_mode = panel_fixed_mode;
> + i915->vbt.sdvo_lvds_vbt_mode = panel_fixed_mode;
>
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "Found SDVO panel mode in BIOS VBT tables:\n");
> drm_mode_debug_printmodeline(panel_fixed_mode);
> }
>
> -static int intel_bios_ssc_frequency(struct drm_i915_private *dev_priv,
> +static int intel_bios_ssc_frequency(struct drm_i915_private *i915,
> bool alternate)
> {
> - switch (INTEL_GEN(dev_priv)) {
> + switch (INTEL_GEN(i915)) {
> case 2:
> return alternate ? 66667 : 48000;
> case 3:
> @@ -554,7 +554,7 @@ static int intel_bios_ssc_frequency(struct drm_i915_private *dev_priv,
> }
>
> static void
> -parse_general_features(struct drm_i915_private *dev_priv,
> +parse_general_features(struct drm_i915_private *i915,
> const struct bdb_header *bdb)
> {
> const struct bdb_general_features *general;
> @@ -563,31 +563,31 @@ parse_general_features(struct drm_i915_private *dev_priv,
> if (!general)
> return;
>
> - dev_priv->vbt.int_tv_support = general->int_tv_support;
> + i915->vbt.int_tv_support = general->int_tv_support;
> /* int_crt_support can't be trusted on earlier platforms */
> if (bdb->version >= 155 &&
> - (HAS_DDI(dev_priv) || IS_VALLEYVIEW(dev_priv)))
> - dev_priv->vbt.int_crt_support = general->int_crt_support;
> - dev_priv->vbt.lvds_use_ssc = general->enable_ssc;
> - dev_priv->vbt.lvds_ssc_freq =
> - intel_bios_ssc_frequency(dev_priv, general->ssc_freq);
> - dev_priv->vbt.display_clock_mode = general->display_clock_mode;
> - dev_priv->vbt.fdi_rx_polarity_inverted = general->fdi_rx_polarity_inverted;
> + (HAS_DDI(i915) || IS_VALLEYVIEW(i915)))
> + i915->vbt.int_crt_support = general->int_crt_support;
> + i915->vbt.lvds_use_ssc = general->enable_ssc;
> + i915->vbt.lvds_ssc_freq =
> + intel_bios_ssc_frequency(i915, general->ssc_freq);
> + i915->vbt.display_clock_mode = general->display_clock_mode;
> + i915->vbt.fdi_rx_polarity_inverted = general->fdi_rx_polarity_inverted;
> if (bdb->version >= 181) {
> - dev_priv->vbt.orientation = general->rotate_180 ?
> + i915->vbt.orientation = general->rotate_180 ?
> DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP :
> DRM_MODE_PANEL_ORIENTATION_NORMAL;
> } else {
> - dev_priv->vbt.orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN;
> + i915->vbt.orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN;
> }
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "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",
> - dev_priv->vbt.int_tv_support,
> - dev_priv->vbt.int_crt_support,
> - dev_priv->vbt.lvds_use_ssc,
> - dev_priv->vbt.lvds_ssc_freq,
> - dev_priv->vbt.display_clock_mode,
> - dev_priv->vbt.fdi_rx_polarity_inverted);
> + i915->vbt.int_tv_support,
> + i915->vbt.int_crt_support,
> + i915->vbt.lvds_use_ssc,
> + i915->vbt.lvds_ssc_freq,
> + i915->vbt.display_clock_mode,
> + i915->vbt.fdi_rx_polarity_inverted);
> }
>
> static const struct child_device_config *
> @@ -597,7 +597,7 @@ child_device_ptr(const struct bdb_general_definitions *defs, int i)
> }
>
> static void
> -parse_sdvo_device_mapping(struct drm_i915_private *dev_priv, u8 bdb_version)
> +parse_sdvo_device_mapping(struct drm_i915_private *i915, u8 bdb_version)
> {
> struct sdvo_device_mapping *mapping;
> const struct display_device_data *devdata;
> @@ -608,12 +608,12 @@ parse_sdvo_device_mapping(struct drm_i915_private *dev_priv, u8 bdb_version)
> * Only parse SDVO mappings on gens that could have SDVO. This isn't
> * accurate and doesn't have to be, as long as it's not too strict.
> */
> - if (!IS_GEN_RANGE(dev_priv, 3, 7)) {
> - drm_dbg_kms(&dev_priv->drm, "Skipping SDVO device mapping\n");
> + if (!IS_GEN_RANGE(i915, 3, 7)) {
> + drm_dbg_kms(&i915->drm, "Skipping SDVO device mapping\n");
> return;
> }
>
> - list_for_each_entry(devdata, &dev_priv->vbt.display_devices, node) {
> + list_for_each_entry(devdata, &i915->vbt.display_devices, node) {
> child = &devdata->child;
>
> if (child->slave_addr != SLAVE_ADDR1 &&
> @@ -627,17 +627,17 @@ parse_sdvo_device_mapping(struct drm_i915_private *dev_priv, u8 bdb_version)
> if (child->dvo_port != DEVICE_PORT_DVOB &&
> child->dvo_port != DEVICE_PORT_DVOC) {
> /* skip the incorrect SDVO port */
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "Incorrect SDVO port. Skip it\n");
> continue;
> }
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "the SDVO device with slave addr %2x is found on"
> " %s port\n",
> child->slave_addr,
> (child->dvo_port == DEVICE_PORT_DVOB) ?
> "SDVOB" : "SDVOC");
> - mapping = &dev_priv->vbt.sdvo_mappings[child->dvo_port - 1];
> + mapping = &i915->vbt.sdvo_mappings[child->dvo_port - 1];
> if (!mapping->initialized) {
> mapping->dvo_port = child->dvo_port;
> mapping->slave_addr = child->slave_addr;
> @@ -645,20 +645,20 @@ parse_sdvo_device_mapping(struct drm_i915_private *dev_priv, u8 bdb_version)
> mapping->ddc_pin = child->ddc_pin;
> mapping->i2c_pin = child->i2c_pin;
> mapping->initialized = 1;
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "SDVO device: dvo=%x, addr=%x, wiring=%d, ddc_pin=%d, i2c_pin=%d\n",
> mapping->dvo_port, mapping->slave_addr,
> mapping->dvo_wiring, mapping->ddc_pin,
> mapping->i2c_pin);
> } else {
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "Maybe one SDVO port is shared by "
> "two SDVO device.\n");
> }
> if (child->slave2_addr) {
> /* Maybe this is a SDVO device with multiple inputs */
> /* And the mapping info is not added */
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "there exists the slave2_addr. Maybe this"
> " is a SDVO device with multiple inputs.\n");
> }
> @@ -667,13 +667,13 @@ parse_sdvo_device_mapping(struct drm_i915_private *dev_priv, u8 bdb_version)
>
> if (!count) {
> /* No SDVO device info is found */
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "No SDVO device info is found in VBT\n");
> }
> }
>
> static void
> -parse_driver_features(struct drm_i915_private *dev_priv,
> +parse_driver_features(struct drm_i915_private *i915,
> const struct bdb_header *bdb)
> {
> const struct bdb_driver_features *driver;
> @@ -682,14 +682,14 @@ parse_driver_features(struct drm_i915_private *dev_priv,
> if (!driver)
> return;
>
> - if (INTEL_GEN(dev_priv) >= 5) {
> + if (INTEL_GEN(i915) >= 5) {
> /*
> * Note that we consider BDB_DRIVER_FEATURE_INT_SDVO_LVDS
> * to mean "eDP". The VBT spec doesn't agree with that
> * interpretation, but real world VBTs seem to.
> */
> if (driver->lvds_config != BDB_DRIVER_FEATURE_INT_LVDS)
> - dev_priv->vbt.int_lvds_support = 0;
> + i915->vbt.int_lvds_support = 0;
> } else {
> /*
> * FIXME it's not clear which BDB version has the LVDS config
> @@ -705,11 +705,11 @@ parse_driver_features(struct drm_i915_private *dev_priv,
> if (bdb->version >= 134 &&
> driver->lvds_config != BDB_DRIVER_FEATURE_INT_LVDS &&
> driver->lvds_config != BDB_DRIVER_FEATURE_INT_SDVO_LVDS)
> - dev_priv->vbt.int_lvds_support = 0;
> + i915->vbt.int_lvds_support = 0;
> }
>
> if (bdb->version < 228) {
> - drm_dbg_kms(&dev_priv->drm, "DRRS State Enabled:%d\n",
> + drm_dbg_kms(&i915->drm, "DRRS State Enabled:%d\n",
> driver->drrs_enabled);
> /*
> * If DRRS is not supported, drrs_type has to be set to 0.
> @@ -718,18 +718,18 @@ parse_driver_features(struct drm_i915_private *dev_priv,
> * driver->drrs_enabled=false
> */
> if (!driver->drrs_enabled)
> - dev_priv->vbt.drrs_type = DRRS_NOT_SUPPORTED;
> + i915->vbt.drrs_type = DRRS_NOT_SUPPORTED;
>
> - dev_priv->vbt.psr.enable = driver->psr_enabled;
> + i915->vbt.psr.enable = driver->psr_enabled;
> }
> }
>
> static void
> -parse_power_conservation_features(struct drm_i915_private *dev_priv,
> +parse_power_conservation_features(struct drm_i915_private *i915,
> const struct bdb_header *bdb)
> {
> const struct bdb_lfp_power *power;
> - u8 panel_type = dev_priv->vbt.panel_type;
> + u8 panel_type = i915->vbt.panel_type;
>
> if (bdb->version < 228)
> return;
> @@ -738,7 +738,7 @@ parse_power_conservation_features(struct drm_i915_private *dev_priv,
> if (!power)
> return;
>
> - dev_priv->vbt.psr.enable = power->psr & BIT(panel_type);
> + i915->vbt.psr.enable = power->psr & BIT(panel_type);
>
> /*
> * If DRRS is not supported, drrs_type has to be set to 0.
> @@ -747,19 +747,19 @@ parse_power_conservation_features(struct drm_i915_private *dev_priv,
> * power->drrs & BIT(panel_type)=false
> */
> if (!(power->drrs & BIT(panel_type)))
> - dev_priv->vbt.drrs_type = DRRS_NOT_SUPPORTED;
> + i915->vbt.drrs_type = DRRS_NOT_SUPPORTED;
>
> if (bdb->version >= 232)
> - dev_priv->vbt.edp.hobl = power->hobl & BIT(panel_type);
> + i915->vbt.edp.hobl = power->hobl & BIT(panel_type);
> }
>
> static void
> -parse_edp(struct drm_i915_private *dev_priv, const struct bdb_header *bdb)
> +parse_edp(struct drm_i915_private *i915, const struct bdb_header *bdb)
> {
> const struct bdb_edp *edp;
> const struct edp_power_seq *edp_pps;
> const struct edp_fast_link_params *edp_link_params;
> - int panel_type = dev_priv->vbt.panel_type;
> + int panel_type = i915->vbt.panel_type;
>
> edp = find_section(bdb, BDB_EDP);
> if (!edp)
> @@ -767,13 +767,13 @@ parse_edp(struct drm_i915_private *dev_priv, const struct bdb_header *bdb)
>
> switch ((edp->color_depth >> (panel_type * 2)) & 3) {
> case EDP_18BPP:
> - dev_priv->vbt.edp.bpp = 18;
> + i915->vbt.edp.bpp = 18;
> break;
> case EDP_24BPP:
> - dev_priv->vbt.edp.bpp = 24;
> + i915->vbt.edp.bpp = 24;
> break;
> case EDP_30BPP:
> - dev_priv->vbt.edp.bpp = 30;
> + i915->vbt.edp.bpp = 30;
> break;
> }
>
> @@ -781,17 +781,17 @@ parse_edp(struct drm_i915_private *dev_priv, const struct bdb_header *bdb)
> edp_pps = &edp->power_seqs[panel_type];
> edp_link_params = &edp->fast_link_params[panel_type];
>
> - dev_priv->vbt.edp.pps = *edp_pps;
> + i915->vbt.edp.pps = *edp_pps;
>
> switch (edp_link_params->rate) {
> case EDP_RATE_1_62:
> - dev_priv->vbt.edp.rate = DP_LINK_BW_1_62;
> + i915->vbt.edp.rate = DP_LINK_BW_1_62;
> break;
> case EDP_RATE_2_7:
> - dev_priv->vbt.edp.rate = DP_LINK_BW_2_7;
> + i915->vbt.edp.rate = DP_LINK_BW_2_7;
> break;
> default:
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "VBT has unknown eDP link rate value %u\n",
> edp_link_params->rate);
> break;
> @@ -799,16 +799,16 @@ parse_edp(struct drm_i915_private *dev_priv, const struct bdb_header *bdb)
>
> switch (edp_link_params->lanes) {
> case EDP_LANE_1:
> - dev_priv->vbt.edp.lanes = 1;
> + i915->vbt.edp.lanes = 1;
> break;
> case EDP_LANE_2:
> - dev_priv->vbt.edp.lanes = 2;
> + i915->vbt.edp.lanes = 2;
> break;
> case EDP_LANE_4:
> - dev_priv->vbt.edp.lanes = 4;
> + i915->vbt.edp.lanes = 4;
> break;
> default:
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "VBT has unknown eDP lane count value %u\n",
> edp_link_params->lanes);
> break;
> @@ -816,19 +816,19 @@ parse_edp(struct drm_i915_private *dev_priv, const struct bdb_header *bdb)
>
> switch (edp_link_params->preemphasis) {
> case EDP_PREEMPHASIS_NONE:
> - dev_priv->vbt.edp.preemphasis = DP_TRAIN_PRE_EMPH_LEVEL_0;
> + i915->vbt.edp.preemphasis = DP_TRAIN_PRE_EMPH_LEVEL_0;
> break;
> case EDP_PREEMPHASIS_3_5dB:
> - dev_priv->vbt.edp.preemphasis = DP_TRAIN_PRE_EMPH_LEVEL_1;
> + i915->vbt.edp.preemphasis = DP_TRAIN_PRE_EMPH_LEVEL_1;
> break;
> case EDP_PREEMPHASIS_6dB:
> - dev_priv->vbt.edp.preemphasis = DP_TRAIN_PRE_EMPH_LEVEL_2;
> + i915->vbt.edp.preemphasis = DP_TRAIN_PRE_EMPH_LEVEL_2;
> break;
> case EDP_PREEMPHASIS_9_5dB:
> - dev_priv->vbt.edp.preemphasis = DP_TRAIN_PRE_EMPH_LEVEL_3;
> + i915->vbt.edp.preemphasis = DP_TRAIN_PRE_EMPH_LEVEL_3;
> break;
> default:
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "VBT has unknown eDP pre-emphasis value %u\n",
> edp_link_params->preemphasis);
> break;
> @@ -836,19 +836,19 @@ parse_edp(struct drm_i915_private *dev_priv, const struct bdb_header *bdb)
>
> switch (edp_link_params->vswing) {
> case EDP_VSWING_0_4V:
> - dev_priv->vbt.edp.vswing = DP_TRAIN_VOLTAGE_SWING_LEVEL_0;
> + i915->vbt.edp.vswing = DP_TRAIN_VOLTAGE_SWING_LEVEL_0;
> break;
> case EDP_VSWING_0_6V:
> - dev_priv->vbt.edp.vswing = DP_TRAIN_VOLTAGE_SWING_LEVEL_1;
> + i915->vbt.edp.vswing = DP_TRAIN_VOLTAGE_SWING_LEVEL_1;
> break;
> case EDP_VSWING_0_8V:
> - dev_priv->vbt.edp.vswing = DP_TRAIN_VOLTAGE_SWING_LEVEL_2;
> + i915->vbt.edp.vswing = DP_TRAIN_VOLTAGE_SWING_LEVEL_2;
> break;
> case EDP_VSWING_1_2V:
> - dev_priv->vbt.edp.vswing = DP_TRAIN_VOLTAGE_SWING_LEVEL_3;
> + i915->vbt.edp.vswing = DP_TRAIN_VOLTAGE_SWING_LEVEL_3;
> break;
> default:
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "VBT has unknown eDP voltage swing value %u\n",
> edp_link_params->vswing);
> break;
> @@ -858,53 +858,53 @@ parse_edp(struct drm_i915_private *dev_priv, const struct bdb_header *bdb)
> u8 vswing;
>
> /* Don't read from VBT if module parameter has valid value*/
> - if (dev_priv->params.edp_vswing) {
> - dev_priv->vbt.edp.low_vswing =
> - dev_priv->params.edp_vswing == 1;
> + if (i915->params.edp_vswing) {
> + i915->vbt.edp.low_vswing =
> + i915->params.edp_vswing == 1;
> } else {
> vswing = (edp->edp_vswing_preemph >> (panel_type * 4)) & 0xF;
> - dev_priv->vbt.edp.low_vswing = vswing == 0;
> + i915->vbt.edp.low_vswing = vswing == 0;
> }
> }
> }
>
> static void
> -parse_psr(struct drm_i915_private *dev_priv, const struct bdb_header *bdb)
> +parse_psr(struct drm_i915_private *i915, const struct bdb_header *bdb)
> {
> const struct bdb_psr *psr;
> const struct psr_table *psr_table;
> - int panel_type = dev_priv->vbt.panel_type;
> + int panel_type = i915->vbt.panel_type;
>
> psr = find_section(bdb, BDB_PSR);
> if (!psr) {
> - drm_dbg_kms(&dev_priv->drm, "No PSR BDB found.\n");
> + drm_dbg_kms(&i915->drm, "No PSR BDB found.\n");
> return;
> }
>
> psr_table = &psr->psr_table[panel_type];
>
> - dev_priv->vbt.psr.full_link = psr_table->full_link;
> - dev_priv->vbt.psr.require_aux_wakeup = psr_table->require_aux_to_wakeup;
> + i915->vbt.psr.full_link = psr_table->full_link;
> + i915->vbt.psr.require_aux_wakeup = psr_table->require_aux_to_wakeup;
>
> /* Allowed VBT values goes from 0 to 15 */
> - dev_priv->vbt.psr.idle_frames = psr_table->idle_frames < 0 ? 0 :
> + i915->vbt.psr.idle_frames = psr_table->idle_frames < 0 ? 0 :
> psr_table->idle_frames > 15 ? 15 : psr_table->idle_frames;
>
> switch (psr_table->lines_to_wait) {
> case 0:
> - dev_priv->vbt.psr.lines_to_wait = PSR_0_LINES_TO_WAIT;
> + i915->vbt.psr.lines_to_wait = PSR_0_LINES_TO_WAIT;
> break;
> case 1:
> - dev_priv->vbt.psr.lines_to_wait = PSR_1_LINE_TO_WAIT;
> + i915->vbt.psr.lines_to_wait = PSR_1_LINE_TO_WAIT;
> break;
> case 2:
> - dev_priv->vbt.psr.lines_to_wait = PSR_4_LINES_TO_WAIT;
> + i915->vbt.psr.lines_to_wait = PSR_4_LINES_TO_WAIT;
> break;
> case 3:
> - dev_priv->vbt.psr.lines_to_wait = PSR_8_LINES_TO_WAIT;
> + i915->vbt.psr.lines_to_wait = PSR_8_LINES_TO_WAIT;
> break;
> default:
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "VBT has unknown PSR lines to wait %u\n",
> psr_table->lines_to_wait);
> break;
> @@ -915,50 +915,50 @@ parse_psr(struct drm_i915_private *dev_priv, const struct bdb_header *bdb)
> * Old decimal value is wake up time in multiples of 100 us.
> */
> if (bdb->version >= 205 &&
> - (IS_GEN9_BC(dev_priv) || IS_GEMINILAKE(dev_priv) ||
> - INTEL_GEN(dev_priv) >= 10)) {
> + (IS_GEN9_BC(i915) || IS_GEMINILAKE(i915) ||
> + INTEL_GEN(i915) >= 10)) {
> switch (psr_table->tp1_wakeup_time) {
> case 0:
> - dev_priv->vbt.psr.tp1_wakeup_time_us = 500;
> + i915->vbt.psr.tp1_wakeup_time_us = 500;
> break;
> case 1:
> - dev_priv->vbt.psr.tp1_wakeup_time_us = 100;
> + i915->vbt.psr.tp1_wakeup_time_us = 100;
> break;
> case 3:
> - dev_priv->vbt.psr.tp1_wakeup_time_us = 0;
> + i915->vbt.psr.tp1_wakeup_time_us = 0;
> break;
> default:
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "VBT tp1 wakeup time value %d is outside range[0-3], defaulting to max value 2500us\n",
> psr_table->tp1_wakeup_time);
> fallthrough;
> case 2:
> - dev_priv->vbt.psr.tp1_wakeup_time_us = 2500;
> + i915->vbt.psr.tp1_wakeup_time_us = 2500;
> break;
> }
>
> switch (psr_table->tp2_tp3_wakeup_time) {
> case 0:
> - dev_priv->vbt.psr.tp2_tp3_wakeup_time_us = 500;
> + i915->vbt.psr.tp2_tp3_wakeup_time_us = 500;
> break;
> case 1:
> - dev_priv->vbt.psr.tp2_tp3_wakeup_time_us = 100;
> + i915->vbt.psr.tp2_tp3_wakeup_time_us = 100;
> break;
> case 3:
> - dev_priv->vbt.psr.tp2_tp3_wakeup_time_us = 0;
> + i915->vbt.psr.tp2_tp3_wakeup_time_us = 0;
> break;
> default:
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "VBT tp2_tp3 wakeup time value %d is outside range[0-3], defaulting to max value 2500us\n",
> psr_table->tp2_tp3_wakeup_time);
> fallthrough;
> case 2:
> - dev_priv->vbt.psr.tp2_tp3_wakeup_time_us = 2500;
> + i915->vbt.psr.tp2_tp3_wakeup_time_us = 2500;
> break;
> }
> } else {
> - dev_priv->vbt.psr.tp1_wakeup_time_us = psr_table->tp1_wakeup_time * 100;
> - dev_priv->vbt.psr.tp2_tp3_wakeup_time_us = psr_table->tp2_tp3_wakeup_time * 100;
> + i915->vbt.psr.tp1_wakeup_time_us = psr_table->tp1_wakeup_time * 100;
> + i915->vbt.psr.tp2_tp3_wakeup_time_us = psr_table->tp2_tp3_wakeup_time * 100;
> }
>
> if (bdb->version >= 226) {
> @@ -980,74 +980,74 @@ parse_psr(struct drm_i915_private *dev_priv, const struct bdb_header *bdb)
> wakeup_time = 2500;
> break;
> }
> - dev_priv->vbt.psr.psr2_tp2_tp3_wakeup_time_us = wakeup_time;
> + i915->vbt.psr.psr2_tp2_tp3_wakeup_time_us = wakeup_time;
> } else {
> /* Reusing PSR1 wakeup time for PSR2 in older VBTs */
> - dev_priv->vbt.psr.psr2_tp2_tp3_wakeup_time_us = dev_priv->vbt.psr.tp2_tp3_wakeup_time_us;
> + i915->vbt.psr.psr2_tp2_tp3_wakeup_time_us = i915->vbt.psr.tp2_tp3_wakeup_time_us;
> }
> }
>
> -static void parse_dsi_backlight_ports(struct drm_i915_private *dev_priv,
> +static void parse_dsi_backlight_ports(struct drm_i915_private *i915,
> u16 version, enum port port)
> {
> - if (!dev_priv->vbt.dsi.config->dual_link || version < 197) {
> - dev_priv->vbt.dsi.bl_ports = BIT(port);
> - if (dev_priv->vbt.dsi.config->cabc_supported)
> - dev_priv->vbt.dsi.cabc_ports = BIT(port);
> + if (!i915->vbt.dsi.config->dual_link || version < 197) {
> + i915->vbt.dsi.bl_ports = BIT(port);
> + if (i915->vbt.dsi.config->cabc_supported)
> + i915->vbt.dsi.cabc_ports = BIT(port);
>
> return;
> }
>
> - switch (dev_priv->vbt.dsi.config->dl_dcs_backlight_ports) {
> + switch (i915->vbt.dsi.config->dl_dcs_backlight_ports) {
> case DL_DCS_PORT_A:
> - dev_priv->vbt.dsi.bl_ports = BIT(PORT_A);
> + i915->vbt.dsi.bl_ports = BIT(PORT_A);
> break;
> case DL_DCS_PORT_C:
> - dev_priv->vbt.dsi.bl_ports = BIT(PORT_C);
> + i915->vbt.dsi.bl_ports = BIT(PORT_C);
> break;
> default:
> case DL_DCS_PORT_A_AND_C:
> - dev_priv->vbt.dsi.bl_ports = BIT(PORT_A) | BIT(PORT_C);
> + i915->vbt.dsi.bl_ports = BIT(PORT_A) | BIT(PORT_C);
> break;
> }
>
> - if (!dev_priv->vbt.dsi.config->cabc_supported)
> + if (!i915->vbt.dsi.config->cabc_supported)
> return;
>
> - switch (dev_priv->vbt.dsi.config->dl_dcs_cabc_ports) {
> + switch (i915->vbt.dsi.config->dl_dcs_cabc_ports) {
> case DL_DCS_PORT_A:
> - dev_priv->vbt.dsi.cabc_ports = BIT(PORT_A);
> + i915->vbt.dsi.cabc_ports = BIT(PORT_A);
> break;
> case DL_DCS_PORT_C:
> - dev_priv->vbt.dsi.cabc_ports = BIT(PORT_C);
> + i915->vbt.dsi.cabc_ports = BIT(PORT_C);
> break;
> default:
> case DL_DCS_PORT_A_AND_C:
> - dev_priv->vbt.dsi.cabc_ports =
> + i915->vbt.dsi.cabc_ports =
> BIT(PORT_A) | BIT(PORT_C);
> break;
> }
> }
>
> static void
> -parse_mipi_config(struct drm_i915_private *dev_priv,
> +parse_mipi_config(struct drm_i915_private *i915,
> const struct bdb_header *bdb)
> {
> const struct bdb_mipi_config *start;
> const struct mipi_config *config;
> const struct mipi_pps_data *pps;
> - int panel_type = dev_priv->vbt.panel_type;
> + int panel_type = i915->vbt.panel_type;
> enum port port;
>
> /* parse MIPI blocks only if LFP type is MIPI */
> - if (!intel_bios_is_dsi_present(dev_priv, &port))
> + if (!intel_bios_is_dsi_present(i915, &port))
> return;
>
> /* Initialize this to undefined indicating no generic MIPI support */
> - dev_priv->vbt.dsi.panel_id = MIPI_DSI_UNDEFINED_PANEL_ID;
> + i915->vbt.dsi.panel_id = MIPI_DSI_UNDEFINED_PANEL_ID;
>
> /* Block #40 is already parsed and panel_fixed_mode is
> - * stored in dev_priv->lfp_lvds_vbt_mode
> + * stored in i915->lfp_lvds_vbt_mode
> * resuse this when needed
> */
>
> @@ -1056,11 +1056,11 @@ parse_mipi_config(struct drm_i915_private *dev_priv,
> */
> start = find_section(bdb, BDB_MIPI_CONFIG);
> if (!start) {
> - drm_dbg_kms(&dev_priv->drm, "No MIPI config BDB found");
> + drm_dbg_kms(&i915->drm, "No MIPI config BDB found");
> return;
> }
>
> - drm_dbg(&dev_priv->drm, "Found MIPI Config block, panel index = %d\n",
> + drm_dbg(&i915->drm, "Found MIPI Config block, panel index = %d\n",
> panel_type);
>
> /*
> @@ -1071,17 +1071,17 @@ parse_mipi_config(struct drm_i915_private *dev_priv,
> pps = &start->pps[panel_type];
>
> /* store as of now full data. Trim when we realise all is not needed */
> - dev_priv->vbt.dsi.config = kmemdup(config, sizeof(struct mipi_config), GFP_KERNEL);
> - if (!dev_priv->vbt.dsi.config)
> + i915->vbt.dsi.config = kmemdup(config, sizeof(struct mipi_config), GFP_KERNEL);
> + if (!i915->vbt.dsi.config)
> return;
>
> - dev_priv->vbt.dsi.pps = kmemdup(pps, sizeof(struct mipi_pps_data), GFP_KERNEL);
> - if (!dev_priv->vbt.dsi.pps) {
> - kfree(dev_priv->vbt.dsi.config);
> + i915->vbt.dsi.pps = kmemdup(pps, sizeof(struct mipi_pps_data), GFP_KERNEL);
> + if (!i915->vbt.dsi.pps) {
> + kfree(i915->vbt.dsi.config);
> return;
> }
>
> - parse_dsi_backlight_ports(dev_priv, bdb->version, port);
> + parse_dsi_backlight_ports(i915, bdb->version, port);
>
> /* FIXME is the 90 vs. 270 correct? */
> switch (config->rotation) {
> @@ -1090,25 +1090,25 @@ parse_mipi_config(struct drm_i915_private *dev_priv,
> * Most (all?) VBTs claim 0 degrees despite having
> * an upside down panel, thus we do not trust this.
> */
> - dev_priv->vbt.dsi.orientation =
> + i915->vbt.dsi.orientation =
> DRM_MODE_PANEL_ORIENTATION_UNKNOWN;
> break;
> case ENABLE_ROTATION_90:
> - dev_priv->vbt.dsi.orientation =
> + i915->vbt.dsi.orientation =
> DRM_MODE_PANEL_ORIENTATION_RIGHT_UP;
> break;
> case ENABLE_ROTATION_180:
> - dev_priv->vbt.dsi.orientation =
> + i915->vbt.dsi.orientation =
> DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP;
> break;
> case ENABLE_ROTATION_270:
> - dev_priv->vbt.dsi.orientation =
> + i915->vbt.dsi.orientation =
> DRM_MODE_PANEL_ORIENTATION_LEFT_UP;
> break;
> }
>
> /* We have mandatory mipi config blocks. Initialize as generic panel */
> - dev_priv->vbt.dsi.panel_id = MIPI_DSI_GENERIC_PANEL_ID;
> + i915->vbt.dsi.panel_id = MIPI_DSI_GENERIC_PANEL_ID;
> }
>
> /* Find the sequence block and size for the given panel. */
> @@ -1271,13 +1271,13 @@ static int goto_next_sequence_v3(const u8 *data, int index, int total)
> * Get len of pre-fixed deassert fragment from a v1 init OTP sequence,
> * skip all delay + gpio operands and stop at the first DSI packet op.
> */
> -static int get_init_otp_deassert_fragment_len(struct drm_i915_private *dev_priv)
> +static int get_init_otp_deassert_fragment_len(struct drm_i915_private *i915)
> {
> - const u8 *data = dev_priv->vbt.dsi.sequence[MIPI_SEQ_INIT_OTP];
> + const u8 *data = i915->vbt.dsi.sequence[MIPI_SEQ_INIT_OTP];
> int index, len;
>
> - if (drm_WARN_ON(&dev_priv->drm,
> - !data || dev_priv->vbt.dsi.seq_version != 1))
> + if (drm_WARN_ON(&i915->drm,
> + !data || i915->vbt.dsi.seq_version != 1))
> return 0;
>
> /* index = 1 to skip sequence byte */
> @@ -1305,55 +1305,55 @@ static int get_init_otp_deassert_fragment_len(struct drm_i915_private *dev_priv)
> * these devices we split the init OTP sequence into a deassert sequence and
> * the actual init OTP part.
> */
> -static void fixup_mipi_sequences(struct drm_i915_private *dev_priv)
> +static void fixup_mipi_sequences(struct drm_i915_private *i915)
> {
> u8 *init_otp;
> int len;
>
> /* Limit this to VLV for now. */
> - if (!IS_VALLEYVIEW(dev_priv))
> + if (!IS_VALLEYVIEW(i915))
> return;
>
> /* Limit this to v1 vid-mode sequences */
> - if (dev_priv->vbt.dsi.config->is_cmd_mode ||
> - dev_priv->vbt.dsi.seq_version != 1)
> + if (i915->vbt.dsi.config->is_cmd_mode ||
> + i915->vbt.dsi.seq_version != 1)
> return;
>
> /* Only do this if there are otp and assert seqs and no deassert seq */
> - if (!dev_priv->vbt.dsi.sequence[MIPI_SEQ_INIT_OTP] ||
> - !dev_priv->vbt.dsi.sequence[MIPI_SEQ_ASSERT_RESET] ||
> - dev_priv->vbt.dsi.sequence[MIPI_SEQ_DEASSERT_RESET])
> + if (!i915->vbt.dsi.sequence[MIPI_SEQ_INIT_OTP] ||
> + !i915->vbt.dsi.sequence[MIPI_SEQ_ASSERT_RESET] ||
> + i915->vbt.dsi.sequence[MIPI_SEQ_DEASSERT_RESET])
> return;
>
> /* The deassert-sequence ends at the first DSI packet */
> - len = get_init_otp_deassert_fragment_len(dev_priv);
> + len = get_init_otp_deassert_fragment_len(i915);
> if (!len)
> return;
>
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "Using init OTP fragment to deassert reset\n");
>
> /* Copy the fragment, update seq byte and terminate it */
> - init_otp = (u8 *)dev_priv->vbt.dsi.sequence[MIPI_SEQ_INIT_OTP];
> - dev_priv->vbt.dsi.deassert_seq = kmemdup(init_otp, len + 1, GFP_KERNEL);
> - if (!dev_priv->vbt.dsi.deassert_seq)
> + init_otp = (u8 *)i915->vbt.dsi.sequence[MIPI_SEQ_INIT_OTP];
> + i915->vbt.dsi.deassert_seq = kmemdup(init_otp, len + 1, GFP_KERNEL);
> + if (!i915->vbt.dsi.deassert_seq)
> return;
> - dev_priv->vbt.dsi.deassert_seq[0] = MIPI_SEQ_DEASSERT_RESET;
> - dev_priv->vbt.dsi.deassert_seq[len] = MIPI_SEQ_ELEM_END;
> + i915->vbt.dsi.deassert_seq[0] = MIPI_SEQ_DEASSERT_RESET;
> + i915->vbt.dsi.deassert_seq[len] = MIPI_SEQ_ELEM_END;
> /* Use the copy for deassert */
> - dev_priv->vbt.dsi.sequence[MIPI_SEQ_DEASSERT_RESET] =
> - dev_priv->vbt.dsi.deassert_seq;
> + i915->vbt.dsi.sequence[MIPI_SEQ_DEASSERT_RESET] =
> + i915->vbt.dsi.deassert_seq;
> /* Replace the last byte of the fragment with init OTP seq byte */
> init_otp[len - 1] = MIPI_SEQ_INIT_OTP;
> /* And make MIPI_MIPI_SEQ_INIT_OTP point to it */
> - dev_priv->vbt.dsi.sequence[MIPI_SEQ_INIT_OTP] = init_otp + len - 1;
> + i915->vbt.dsi.sequence[MIPI_SEQ_INIT_OTP] = init_otp + len - 1;
> }
>
> static void
> -parse_mipi_sequence(struct drm_i915_private *dev_priv,
> +parse_mipi_sequence(struct drm_i915_private *i915,
> const struct bdb_header *bdb)
> {
> - int panel_type = dev_priv->vbt.panel_type;
> + int panel_type = i915->vbt.panel_type;
> const struct bdb_mipi_sequence *sequence;
> const u8 *seq_data;
> u32 seq_size;
> @@ -1361,25 +1361,25 @@ parse_mipi_sequence(struct drm_i915_private *dev_priv,
> int index = 0;
>
> /* Only our generic panel driver uses the sequence block. */
> - if (dev_priv->vbt.dsi.panel_id != MIPI_DSI_GENERIC_PANEL_ID)
> + if (i915->vbt.dsi.panel_id != MIPI_DSI_GENERIC_PANEL_ID)
> return;
>
> sequence = find_section(bdb, BDB_MIPI_SEQUENCE);
> if (!sequence) {
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "No MIPI Sequence found, parsing complete\n");
> return;
> }
>
> /* Fail gracefully for forward incompatible sequence block. */
> if (sequence->version >= 4) {
> - drm_err(&dev_priv->drm,
> + drm_err(&i915->drm,
> "Unable to parse MIPI Sequence Block v%u\n",
> sequence->version);
> return;
> }
>
> - drm_dbg(&dev_priv->drm, "Found MIPI sequence block v%u\n",
> + drm_dbg(&i915->drm, "Found MIPI sequence block v%u\n",
> sequence->version);
>
> seq_data = find_panel_sequence_block(sequence, panel_type, &seq_size);
> @@ -1397,41 +1397,41 @@ parse_mipi_sequence(struct drm_i915_private *dev_priv,
> break;
>
> if (seq_id >= MIPI_SEQ_MAX) {
> - drm_err(&dev_priv->drm, "Unknown sequence %u\n",
> + drm_err(&i915->drm, "Unknown sequence %u\n",
> seq_id);
> goto err;
> }
>
> /* Log about presence of sequences we won't run. */
> if (seq_id == MIPI_SEQ_TEAR_ON || seq_id == MIPI_SEQ_TEAR_OFF)
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "Unsupported sequence %u\n", seq_id);
>
> - dev_priv->vbt.dsi.sequence[seq_id] = data + index;
> + i915->vbt.dsi.sequence[seq_id] = data + index;
>
> if (sequence->version >= 3)
> index = goto_next_sequence_v3(data, index, seq_size);
> else
> index = goto_next_sequence(data, index, seq_size);
> if (!index) {
> - drm_err(&dev_priv->drm, "Invalid sequence %u\n",
> + drm_err(&i915->drm, "Invalid sequence %u\n",
> seq_id);
> goto err;
> }
> }
>
> - dev_priv->vbt.dsi.data = data;
> - dev_priv->vbt.dsi.size = seq_size;
> - dev_priv->vbt.dsi.seq_version = sequence->version;
> + i915->vbt.dsi.data = data;
> + i915->vbt.dsi.size = seq_size;
> + i915->vbt.dsi.seq_version = sequence->version;
>
> - fixup_mipi_sequences(dev_priv);
> + fixup_mipi_sequences(i915);
>
> - drm_dbg(&dev_priv->drm, "MIPI related VBT parsing complete\n");
> + drm_dbg(&i915->drm, "MIPI related VBT parsing complete\n");
> return;
>
> err:
> kfree(data);
> - memset(dev_priv->vbt.dsi.sequence, 0, sizeof(dev_priv->vbt.dsi.sequence));
> + memset(i915->vbt.dsi.sequence, 0, sizeof(i915->vbt.dsi.sequence));
> }
>
> static void
> @@ -1515,18 +1515,18 @@ static enum port get_port_by_ddc_pin(struct drm_i915_private *i915, u8 ddc_pin)
> return PORT_NONE;
> }
>
> -static void sanitize_ddc_pin(struct drm_i915_private *dev_priv,
> +static void sanitize_ddc_pin(struct drm_i915_private *i915,
> enum port port)
> {
> - struct ddi_vbt_port_info *info = &dev_priv->vbt.ddi_port_info[port];
> + struct ddi_vbt_port_info *info = &i915->vbt.ddi_port_info[port];
> enum port p;
>
> if (!info->alternate_ddc_pin)
> return;
>
> - p = get_port_by_ddc_pin(dev_priv, info->alternate_ddc_pin);
> + p = get_port_by_ddc_pin(i915, info->alternate_ddc_pin);
> if (p != PORT_NONE) {
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "port %c trying to use the same DDC pin (0x%x) as port %c, "
> "disabling port %c DVI/HDMI support\n",
> port_name(port), info->alternate_ddc_pin,
> @@ -1544,7 +1544,7 @@ static void sanitize_ddc_pin(struct drm_i915_private *dev_priv,
> * port A and port E with the same AUX ch and
> * we must pick port E :(
> */
> - info = &dev_priv->vbt.ddi_port_info[p];
> + info = &i915->vbt.ddi_port_info[p];
>
> info->supports_dvi = false;
> info->supports_hdmi = false;
> @@ -1567,18 +1567,18 @@ static enum port get_port_by_aux_ch(struct drm_i915_private *i915, u8 aux_ch)
> return PORT_NONE;
> }
>
> -static void sanitize_aux_ch(struct drm_i915_private *dev_priv,
> +static void sanitize_aux_ch(struct drm_i915_private *i915,
> enum port port)
> {
> - struct ddi_vbt_port_info *info = &dev_priv->vbt.ddi_port_info[port];
> + struct ddi_vbt_port_info *info = &i915->vbt.ddi_port_info[port];
> enum port p;
>
> if (!info->alternate_aux_channel)
> return;
>
> - p = get_port_by_aux_ch(dev_priv, info->alternate_aux_channel);
> + p = get_port_by_aux_ch(i915, info->alternate_aux_channel);
> if (p != PORT_NONE) {
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "port %c trying to use the same AUX CH (0x%x) as port %c, "
> "disabling port %c DP support\n",
> port_name(port), info->alternate_aux_channel,
> @@ -1596,7 +1596,7 @@ static void sanitize_aux_ch(struct drm_i915_private *dev_priv,
> * port A and port E with the same AUX ch and
> * we must pick port E :(
> */
> - info = &dev_priv->vbt.ddi_port_info[p];
> + info = &i915->vbt.ddi_port_info[p];
>
> info->supports_dp = false;
> info->alternate_aux_channel = 0;
> @@ -1644,26 +1644,26 @@ static const u8 gen9bc_tgp_ddc_pin_map[] = {
> [DDC_BUS_DDI_D] = GMBUS_PIN_10_TC2_ICP,
> };
>
> -static u8 map_ddc_pin(struct drm_i915_private *dev_priv, u8 vbt_pin)
> +static u8 map_ddc_pin(struct drm_i915_private *i915, u8 vbt_pin)
> {
> const u8 *ddc_pin_map;
> int n_entries;
>
> - if (HAS_PCH_ADP(dev_priv)) {
> + if (HAS_PCH_ADP(i915)) {
> ddc_pin_map = adls_ddc_pin_map;
> n_entries = ARRAY_SIZE(adls_ddc_pin_map);
> - } else if (INTEL_PCH_TYPE(dev_priv) >= PCH_DG1) {
> + } else if (INTEL_PCH_TYPE(i915) >= PCH_DG1) {
> return vbt_pin;
> - } else if (IS_ROCKETLAKE(dev_priv) && INTEL_PCH_TYPE(dev_priv) == PCH_TGP) {
> + } else if (IS_ROCKETLAKE(i915) && INTEL_PCH_TYPE(i915) == PCH_TGP) {
> ddc_pin_map = rkl_pch_tgp_ddc_pin_map;
> n_entries = ARRAY_SIZE(rkl_pch_tgp_ddc_pin_map);
> - } else if (HAS_PCH_TGP(dev_priv) && IS_GEN9_BC(dev_priv)) {
> + } else if (HAS_PCH_TGP(i915) && IS_GEN9_BC(i915)) {
> ddc_pin_map = gen9bc_tgp_ddc_pin_map;
> n_entries = ARRAY_SIZE(gen9bc_tgp_ddc_pin_map);
> - } else if (INTEL_PCH_TYPE(dev_priv) >= PCH_ICP) {
> + } else if (INTEL_PCH_TYPE(i915) >= PCH_ICP) {
> ddc_pin_map = icp_ddc_pin_map;
> n_entries = ARRAY_SIZE(icp_ddc_pin_map);
> - } else if (HAS_PCH_CNP(dev_priv)) {
> + } else if (HAS_PCH_CNP(i915)) {
> ddc_pin_map = cnp_ddc_pin_map;
> n_entries = ARRAY_SIZE(cnp_ddc_pin_map);
> } else {
> @@ -1674,7 +1674,7 @@ static u8 map_ddc_pin(struct drm_i915_private *dev_priv, u8 vbt_pin)
> if (vbt_pin < n_entries && ddc_pin_map[vbt_pin] != 0)
> return ddc_pin_map[vbt_pin];
>
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "Ignoring alternate pin: VBT claims DDC pin %d, which is not valid for this platform\n",
> vbt_pin);
> return 0;
> @@ -1699,7 +1699,7 @@ static enum port __dvo_port_to_port(int n_ports, int n_dvo,
> return PORT_NONE;
> }
>
> -static enum port dvo_port_to_port(struct drm_i915_private *dev_priv,
> +static enum port dvo_port_to_port(struct drm_i915_private *i915,
> u8 dvo_port)
> {
> /*
> @@ -1742,12 +1742,12 @@ static enum port dvo_port_to_port(struct drm_i915_private *dev_priv,
> [PORT_TC4] = { DVO_PORT_HDMIE, DVO_PORT_DPE, -1 },
> };
>
> - if (IS_ALDERLAKE_S(dev_priv))
> + if (IS_ALDERLAKE_S(i915))
> return __dvo_port_to_port(ARRAY_SIZE(adls_port_mapping),
> ARRAY_SIZE(adls_port_mapping[0]),
> adls_port_mapping,
> dvo_port);
> - else if (IS_DG1(dev_priv) || IS_ROCKETLAKE(dev_priv))
> + else if (IS_DG1(i915) || IS_ROCKETLAKE(i915))
> return __dvo_port_to_port(ARRAY_SIZE(rkl_port_mapping),
> ARRAY_SIZE(rkl_port_mapping[0]),
> rkl_port_mapping,
> @@ -1759,7 +1759,7 @@ static enum port dvo_port_to_port(struct drm_i915_private *dev_priv,
> dvo_port);
> }
>
> -static void parse_ddi_port(struct drm_i915_private *dev_priv,
> +static void parse_ddi_port(struct drm_i915_private *i915,
> struct display_device_data *devdata,
> u8 bdb_version)
> {
> @@ -1768,14 +1768,14 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv,
> bool is_dvi, is_hdmi, is_dp, is_edp, is_crt;
> enum port port;
>
> - port = dvo_port_to_port(dev_priv, child->dvo_port);
> + port = dvo_port_to_port(i915, child->dvo_port);
> if (port == PORT_NONE)
> return;
>
> - info = &dev_priv->vbt.ddi_port_info[port];
> + info = &i915->vbt.ddi_port_info[port];
>
> if (info->child) {
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "More than one child device for port %c in VBT, using the first.\n",
> port_name(port));
> return;
> @@ -1787,8 +1787,8 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv,
> is_hdmi = is_dvi && (child->device_type & DEVICE_TYPE_NOT_HDMI_OUTPUT) == 0;
> is_edp = is_dp && (child->device_type & DEVICE_TYPE_INTERNAL_CONNECTOR);
>
> - if (port == PORT_A && is_dvi && INTEL_GEN(dev_priv) < 12) {
> - drm_dbg_kms(&dev_priv->drm,
> + if (port == PORT_A && is_dvi && INTEL_GEN(i915) < 12) {
> + drm_dbg_kms(&i915->drm,
> "VBT claims port A supports DVI%s, ignoring\n",
> is_hdmi ? "/HDMI" : "");
> is_dvi = false;
> @@ -1806,22 +1806,22 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv,
> if (bdb_version >= 209)
> info->supports_tbt = child->tbt;
>
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "Port %c VBT info: CRT:%d DVI:%d HDMI:%d DP:%d eDP:%d LSPCON:%d USB-Type-C:%d TBT:%d DSC:%d\n",
> port_name(port), is_crt, is_dvi, is_hdmi, is_dp, is_edp,
> - HAS_LSPCON(dev_priv) && child->lspcon,
> + HAS_LSPCON(i915) && child->lspcon,
> info->supports_typec_usb, info->supports_tbt,
> devdata->dsc != NULL);
>
> if (is_dvi) {
> u8 ddc_pin;
>
> - ddc_pin = map_ddc_pin(dev_priv, child->ddc_pin);
> - if (intel_gmbus_is_valid_pin(dev_priv, ddc_pin)) {
> + ddc_pin = map_ddc_pin(i915, child->ddc_pin);
> + if (intel_gmbus_is_valid_pin(i915, ddc_pin)) {
> info->alternate_ddc_pin = ddc_pin;
> - sanitize_ddc_pin(dev_priv, port);
> + sanitize_ddc_pin(i915, port);
> } else {
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "Port %c has invalid DDC pin %d, "
> "sticking to defaults\n",
> port_name(port), ddc_pin);
> @@ -1831,13 +1831,13 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv,
> if (is_dp) {
> info->alternate_aux_channel = child->aux_channel;
>
> - sanitize_aux_ch(dev_priv, port);
> + sanitize_aux_ch(i915, port);
> }
>
> if (bdb_version >= 158) {
> /* The VBT HDMI level shift values match the table we have. */
> u8 hdmi_level_shift = child->hdmi_level_shifter_value;
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "Port %c VBT HDMI level shift: %d\n",
> port_name(port),
> hdmi_level_shift);
> @@ -1864,7 +1864,7 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv,
> }
>
> if (max_tmds_clock)
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "Port %c VBT HDMI max TMDS clock: %d kHz\n",
> port_name(port), max_tmds_clock);
> info->max_tmds_clock = max_tmds_clock;
> @@ -1873,11 +1873,11 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv,
> /* Parse the I_boost config for SKL and above */
> if (bdb_version >= 196 && child->iboost) {
> info->dp_boost_level = translate_iboost(child->dp_iboost_level);
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "Port %c VBT (e)DP boost level: %d\n",
> port_name(port), info->dp_boost_level);
> info->hdmi_boost_level = translate_iboost(child->hdmi_iboost_level);
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "Port %c VBT HDMI boost level: %d\n",
> port_name(port), info->hdmi_boost_level);
> }
> @@ -1899,7 +1899,7 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv,
> info->dp_max_link_rate = 162000;
> break;
> }
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "Port %c VBT DP max link rate: %d\n",
> port_name(port), info->dp_max_link_rate);
> }
> @@ -1907,22 +1907,22 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv,
> info->child = child;
> }
>
> -static void parse_ddi_ports(struct drm_i915_private *dev_priv, u8 bdb_version)
> +static void parse_ddi_ports(struct drm_i915_private *i915, u8 bdb_version)
> {
> struct display_device_data *devdata;
>
> - if (!HAS_DDI(dev_priv) && !IS_CHERRYVIEW(dev_priv))
> + if (!HAS_DDI(i915) && !IS_CHERRYVIEW(i915))
> return;
>
> if (bdb_version < 155)
> return;
>
> - list_for_each_entry(devdata, &dev_priv->vbt.display_devices, node)
> - parse_ddi_port(dev_priv, devdata, bdb_version);
> + list_for_each_entry(devdata, &i915->vbt.display_devices, node)
> + parse_ddi_port(i915, devdata, bdb_version);
> }
>
> static void
> -parse_general_definitions(struct drm_i915_private *dev_priv,
> +parse_general_definitions(struct drm_i915_private *i915,
> const struct bdb_header *bdb)
> {
> const struct bdb_general_definitions *defs;
> @@ -1935,23 +1935,23 @@ parse_general_definitions(struct drm_i915_private *dev_priv,
>
> defs = find_section(bdb, BDB_GENERAL_DEFINITIONS);
> if (!defs) {
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "No general definition block is found, no devices defined.\n");
> return;
> }
>
> block_size = get_blocksize(defs);
> if (block_size < sizeof(*defs)) {
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "General definitions block too small (%u)\n",
> block_size);
> return;
> }
>
> bus_pin = defs->crt_ddc_gmbus_pin;
> - drm_dbg_kms(&dev_priv->drm, "crt_ddc_bus_pin: %d\n", bus_pin);
> - if (intel_gmbus_is_valid_pin(dev_priv, bus_pin))
> - dev_priv->vbt.crt_ddc_pin = bus_pin;
> + drm_dbg_kms(&i915->drm, "crt_ddc_bus_pin: %d\n", bus_pin);
> + if (intel_gmbus_is_valid_pin(i915, bus_pin))
> + i915->vbt.crt_ddc_pin = bus_pin;
>
> if (bdb->version < 106) {
> expected_size = 22;
> @@ -1968,20 +1968,20 @@ parse_general_definitions(struct drm_i915_private *dev_priv,
> } else {
> expected_size = sizeof(*child);
> BUILD_BUG_ON(sizeof(*child) < 39);
> - drm_dbg(&dev_priv->drm,
> + drm_dbg(&i915->drm,
> "Expected child device config size for VBT version %u not known; assuming %u\n",
> bdb->version, expected_size);
> }
>
> /* Flag an error for unexpected size, but continue anyway. */
> if (defs->child_dev_size != expected_size)
> - drm_err(&dev_priv->drm,
> + drm_err(&i915->drm,
> "Unexpected child device config size %u (expected %u for VBT version %u)\n",
> defs->child_dev_size, expected_size, bdb->version);
>
> /* The legacy sized child device config is the minimum we need. */
> if (defs->child_dev_size < LEGACY_CHILD_DEVICE_CONFIG_SIZE) {
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "Child device config size %u is too small.\n",
> defs->child_dev_size);
> return;
> @@ -1995,7 +1995,7 @@ parse_general_definitions(struct drm_i915_private *dev_priv,
> if (!child->device_type)
> continue;
>
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "Found VBT child device with type 0x%x\n",
> child->device_type);
>
> @@ -2011,64 +2011,64 @@ parse_general_definitions(struct drm_i915_private *dev_priv,
> memcpy(&devdata->child, child,
> min_t(size_t, defs->child_dev_size, sizeof(*child)));
>
> - list_add_tail(&devdata->node, &dev_priv->vbt.display_devices);
> + list_add_tail(&devdata->node, &i915->vbt.display_devices);
> }
>
> - if (list_empty(&dev_priv->vbt.display_devices))
> - drm_dbg_kms(&dev_priv->drm,
> + if (list_empty(&i915->vbt.display_devices))
> + drm_dbg_kms(&i915->drm,
> "no child dev is parsed from VBT\n");
> }
>
> /* Common defaults which may be overridden by VBT. */
> static void
> -init_vbt_defaults(struct drm_i915_private *dev_priv)
> +init_vbt_defaults(struct drm_i915_private *i915)
> {
> - dev_priv->vbt.crt_ddc_pin = GMBUS_PIN_VGADDC;
> + i915->vbt.crt_ddc_pin = GMBUS_PIN_VGADDC;
>
> /* Default to having backlight */
> - dev_priv->vbt.backlight.present = true;
> + i915->vbt.backlight.present = true;
>
> /* LFP panel data */
> - dev_priv->vbt.lvds_dither = 1;
> + i915->vbt.lvds_dither = 1;
>
> /* SDVO panel data */
> - dev_priv->vbt.sdvo_lvds_vbt_mode = NULL;
> + i915->vbt.sdvo_lvds_vbt_mode = NULL;
>
> /* general features */
> - dev_priv->vbt.int_tv_support = 1;
> - dev_priv->vbt.int_crt_support = 1;
> + i915->vbt.int_tv_support = 1;
> + i915->vbt.int_crt_support = 1;
>
> /* driver features */
> - dev_priv->vbt.int_lvds_support = 1;
> + i915->vbt.int_lvds_support = 1;
>
> /* Default to using SSC */
> - dev_priv->vbt.lvds_use_ssc = 1;
> + i915->vbt.lvds_use_ssc = 1;
> /*
> * Core/SandyBridge/IvyBridge use alternative (120MHz) reference
> * clock for LVDS.
> */
> - dev_priv->vbt.lvds_ssc_freq = intel_bios_ssc_frequency(dev_priv,
> - !HAS_PCH_SPLIT(dev_priv));
> - drm_dbg_kms(&dev_priv->drm, "Set default to SSC at %d kHz\n",
> - dev_priv->vbt.lvds_ssc_freq);
> + i915->vbt.lvds_ssc_freq = intel_bios_ssc_frequency(i915,
> + !HAS_PCH_SPLIT(i915));
> + drm_dbg_kms(&i915->drm, "Set default to SSC at %d kHz\n",
> + i915->vbt.lvds_ssc_freq);
> }
>
> /* Defaults to initialize only if there is no VBT. */
> static void
> -init_vbt_missing_defaults(struct drm_i915_private *dev_priv)
> +init_vbt_missing_defaults(struct drm_i915_private *i915)
> {
> enum port port;
>
> for_each_port(port) {
> struct ddi_vbt_port_info *info =
> - &dev_priv->vbt.ddi_port_info[port];
> - enum phy phy = intel_port_to_phy(dev_priv, port);
> + &i915->vbt.ddi_port_info[port];
> + enum phy phy = intel_port_to_phy(i915, port);
>
> /*
> * VBT has the TypeC mode (native,TBT/USB) and we don't want
> * to detect it.
> */
> - if (intel_phy_is_tc(dev_priv, phy))
> + if (intel_phy_is_tc(i915, phy))
> continue;
>
> info->supports_dvi = (port != PORT_A && port != PORT_E);
> @@ -2134,9 +2134,9 @@ bool intel_bios_is_valid_vbt(const void *buf, size_t size)
> return vbt;
> }
>
> -static struct vbt_header *oprom_get_vbt(struct drm_i915_private *dev_priv)
> +static struct vbt_header *oprom_get_vbt(struct drm_i915_private *i915)
> {
> - struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
> + struct pci_dev *pdev = to_pci_dev(i915->drm.dev);
> void __iomem *p = NULL, *oprom;
> struct vbt_header *vbt;
> u16 vbt_size;
> @@ -2160,13 +2160,13 @@ static struct vbt_header *oprom_get_vbt(struct drm_i915_private *dev_priv)
> goto err_unmap_oprom;
>
> if (sizeof(struct vbt_header) > size) {
> - drm_dbg(&dev_priv->drm, "VBT header incomplete\n");
> + drm_dbg(&i915->drm, "VBT header incomplete\n");
> goto err_unmap_oprom;
> }
>
> vbt_size = ioread16(p + offsetof(struct vbt_header, vbt_size));
> if (vbt_size > size) {
> - drm_dbg(&dev_priv->drm,
> + drm_dbg(&i915->drm,
> "VBT incomplete (vbt_size overflows)\n");
> goto err_unmap_oprom;
> }
> @@ -2195,71 +2195,71 @@ static struct vbt_header *oprom_get_vbt(struct drm_i915_private *dev_priv)
>
> /**
> * intel_bios_init - find VBT and initialize settings from the BIOS
> - * @dev_priv: i915 device instance
> + * @i915: i915 device instance
> *
> * Parse and initialize settings from the Video BIOS Tables (VBT). If the VBT
> * was not found in ACPI OpRegion, try to find it in PCI ROM first. Also
> * initialize some defaults if the VBT is not present at all.
> */
> -void intel_bios_init(struct drm_i915_private *dev_priv)
> +void intel_bios_init(struct drm_i915_private *i915)
> {
> - const struct vbt_header *vbt = dev_priv->opregion.vbt;
> + const struct vbt_header *vbt = i915->opregion.vbt;
> struct vbt_header *oprom_vbt = NULL;
> const struct bdb_header *bdb;
>
> - INIT_LIST_HEAD(&dev_priv->vbt.display_devices);
> + INIT_LIST_HEAD(&i915->vbt.display_devices);
>
> - if (!HAS_DISPLAY(dev_priv)) {
> - drm_dbg_kms(&dev_priv->drm,
> + if (!HAS_DISPLAY(i915)) {
> + drm_dbg_kms(&i915->drm,
> "Skipping VBT init due to disabled display.\n");
> return;
> }
>
> - init_vbt_defaults(dev_priv);
> + init_vbt_defaults(i915);
>
> /* If the OpRegion does not have VBT, look in PCI ROM. */
> if (!vbt) {
> - oprom_vbt = oprom_get_vbt(dev_priv);
> + oprom_vbt = oprom_get_vbt(i915);
> if (!oprom_vbt)
> goto out;
>
> vbt = oprom_vbt;
>
> - drm_dbg_kms(&dev_priv->drm, "Found valid VBT in PCI ROM\n");
> + drm_dbg_kms(&i915->drm, "Found valid VBT in PCI ROM\n");
> }
>
> bdb = get_bdb_header(vbt);
>
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "VBT signature \"%.*s\", BDB version %d\n",
> (int)sizeof(vbt->signature), vbt->signature, bdb->version);
>
> /* Grab useful general definitions */
> - parse_general_features(dev_priv, bdb);
> - parse_general_definitions(dev_priv, bdb);
> - parse_panel_options(dev_priv, bdb);
> - parse_panel_dtd(dev_priv, bdb);
> - parse_lfp_backlight(dev_priv, bdb);
> - parse_sdvo_panel_data(dev_priv, bdb);
> - parse_driver_features(dev_priv, bdb);
> - parse_power_conservation_features(dev_priv, bdb);
> - parse_edp(dev_priv, bdb);
> - parse_psr(dev_priv, bdb);
> - parse_mipi_config(dev_priv, bdb);
> - parse_mipi_sequence(dev_priv, bdb);
> + parse_general_features(i915, bdb);
> + parse_general_definitions(i915, bdb);
> + parse_panel_options(i915, bdb);
> + parse_panel_dtd(i915, bdb);
> + parse_lfp_backlight(i915, bdb);
> + parse_sdvo_panel_data(i915, bdb);
> + parse_driver_features(i915, bdb);
> + parse_power_conservation_features(i915, bdb);
> + parse_edp(i915, bdb);
> + parse_psr(i915, bdb);
> + parse_mipi_config(i915, bdb);
> + parse_mipi_sequence(i915, bdb);
>
> /* Depends on child device list */
> - parse_compression_parameters(dev_priv, bdb);
> + parse_compression_parameters(i915, bdb);
>
> /* Further processing on pre-parsed data */
> - parse_sdvo_device_mapping(dev_priv, bdb->version);
> - parse_ddi_ports(dev_priv, bdb->version);
> + parse_sdvo_device_mapping(i915, bdb->version);
> + parse_ddi_ports(i915, bdb->version);
>
> out:
> if (!vbt) {
> - drm_info(&dev_priv->drm,
> + drm_info(&i915->drm,
> "Failed to find VBIOS tables (VBT)\n");
> - init_vbt_missing_defaults(dev_priv);
> + init_vbt_missing_defaults(i915);
> }
>
> kfree(oprom_vbt);
> @@ -2267,51 +2267,51 @@ void intel_bios_init(struct drm_i915_private *dev_priv)
>
> /**
> * intel_bios_driver_remove - Free any resources allocated by intel_bios_init()
> - * @dev_priv: i915 device instance
> + * @i915: i915 device instance
> */
> -void intel_bios_driver_remove(struct drm_i915_private *dev_priv)
> +void intel_bios_driver_remove(struct drm_i915_private *i915)
> {
> struct display_device_data *devdata, *n;
>
> - list_for_each_entry_safe(devdata, n, &dev_priv->vbt.display_devices, node) {
> + list_for_each_entry_safe(devdata, n, &i915->vbt.display_devices, node) {
> list_del(&devdata->node);
> kfree(devdata->dsc);
> kfree(devdata);
> }
>
> - kfree(dev_priv->vbt.sdvo_lvds_vbt_mode);
> - dev_priv->vbt.sdvo_lvds_vbt_mode = NULL;
> - kfree(dev_priv->vbt.lfp_lvds_vbt_mode);
> - dev_priv->vbt.lfp_lvds_vbt_mode = NULL;
> - kfree(dev_priv->vbt.dsi.data);
> - dev_priv->vbt.dsi.data = NULL;
> - kfree(dev_priv->vbt.dsi.pps);
> - dev_priv->vbt.dsi.pps = NULL;
> - kfree(dev_priv->vbt.dsi.config);
> - dev_priv->vbt.dsi.config = NULL;
> - kfree(dev_priv->vbt.dsi.deassert_seq);
> - dev_priv->vbt.dsi.deassert_seq = NULL;
> + kfree(i915->vbt.sdvo_lvds_vbt_mode);
> + i915->vbt.sdvo_lvds_vbt_mode = NULL;
> + kfree(i915->vbt.lfp_lvds_vbt_mode);
> + i915->vbt.lfp_lvds_vbt_mode = NULL;
> + kfree(i915->vbt.dsi.data);
> + i915->vbt.dsi.data = NULL;
> + kfree(i915->vbt.dsi.pps);
> + i915->vbt.dsi.pps = NULL;
> + kfree(i915->vbt.dsi.config);
> + i915->vbt.dsi.config = NULL;
> + kfree(i915->vbt.dsi.deassert_seq);
> + i915->vbt.dsi.deassert_seq = NULL;
> }
>
> /**
> * intel_bios_is_tv_present - is integrated TV present in VBT
> - * @dev_priv: i915 device instance
> + * @i915: i915 device instance
> *
> * Return true if TV is present. If no child devices were parsed from VBT,
> * assume TV is present.
> */
> -bool intel_bios_is_tv_present(struct drm_i915_private *dev_priv)
> +bool intel_bios_is_tv_present(struct drm_i915_private *i915)
> {
> const struct display_device_data *devdata;
> const struct child_device_config *child;
>
> - if (!dev_priv->vbt.int_tv_support)
> + if (!i915->vbt.int_tv_support)
> return false;
>
> - if (list_empty(&dev_priv->vbt.display_devices))
> + if (list_empty(&i915->vbt.display_devices))
> return true;
>
> - list_for_each_entry(devdata, &dev_priv->vbt.display_devices, node) {
> + list_for_each_entry(devdata, &i915->vbt.display_devices, node) {
> child = &devdata->child;
>
> /*
> @@ -2337,21 +2337,21 @@ bool intel_bios_is_tv_present(struct drm_i915_private *dev_priv)
>
> /**
> * intel_bios_is_lvds_present - is LVDS present in VBT
> - * @dev_priv: i915 device instance
> + * @i915: i915 device instance
> * @i2c_pin: i2c pin for LVDS if present
> *
> * Return true if LVDS is present. If no child devices were parsed from VBT,
> * assume LVDS is present.
> */
> -bool intel_bios_is_lvds_present(struct drm_i915_private *dev_priv, u8 *i2c_pin)
> +bool intel_bios_is_lvds_present(struct drm_i915_private *i915, u8 *i2c_pin)
> {
> const struct display_device_data *devdata;
> const struct child_device_config *child;
>
> - if (list_empty(&dev_priv->vbt.display_devices))
> + if (list_empty(&i915->vbt.display_devices))
> return true;
>
> - list_for_each_entry(devdata, &dev_priv->vbt.display_devices, node) {
> + list_for_each_entry(devdata, &i915->vbt.display_devices, node) {
> child = &devdata->child;
>
> /* If the device type is not LFP, continue.
> @@ -2362,7 +2362,7 @@ bool intel_bios_is_lvds_present(struct drm_i915_private *dev_priv, u8 *i2c_pin)
> child->device_type != DEVICE_TYPE_LFP)
> continue;
>
> - if (intel_gmbus_is_valid_pin(dev_priv, child->i2c_pin))
> + if (intel_gmbus_is_valid_pin(i915, child->i2c_pin))
> *i2c_pin = child->i2c_pin;
>
> /* However, we cannot trust the BIOS writers to populate
> @@ -2378,7 +2378,7 @@ bool intel_bios_is_lvds_present(struct drm_i915_private *dev_priv, u8 *i2c_pin)
> * additional data. Trust that if the VBT was written into
> * the OpRegion then they have validated the LVDS's existence.
> */
> - if (dev_priv->opregion.vbt)
> + if (i915->opregion.vbt)
> return true;
> }
>
> @@ -2387,12 +2387,12 @@ bool intel_bios_is_lvds_present(struct drm_i915_private *dev_priv, u8 *i2c_pin)
>
> /**
> * intel_bios_is_port_present - is the specified digital port present
> - * @dev_priv: i915 device instance
> + * @i915: i915 device instance
> * @port: port to check
> *
> * Return true if the device in %port is present.
> */
> -bool intel_bios_is_port_present(struct drm_i915_private *dev_priv, enum port port)
> +bool intel_bios_is_port_present(struct drm_i915_private *i915, enum port port)
> {
> const struct display_device_data *devdata;
> const struct child_device_config *child;
> @@ -2406,19 +2406,19 @@ bool intel_bios_is_port_present(struct drm_i915_private *dev_priv, enum port por
> [PORT_F] = { DVO_PORT_DPF, DVO_PORT_HDMIF, },
> };
>
> - if (HAS_DDI(dev_priv)) {
> + if (HAS_DDI(i915)) {
> const struct ddi_vbt_port_info *port_info =
> - &dev_priv->vbt.ddi_port_info[port];
> + &i915->vbt.ddi_port_info[port];
>
> return port_info->child;
> }
>
> /* FIXME maybe deal with port A as well? */
> - if (drm_WARN_ON(&dev_priv->drm,
> + if (drm_WARN_ON(&i915->drm,
> port == PORT_A) || port >= ARRAY_SIZE(port_mapping))
> return false;
>
> - list_for_each_entry(devdata, &dev_priv->vbt.display_devices, node) {
> + list_for_each_entry(devdata, &i915->vbt.display_devices, node) {
> child = &devdata->child;
>
> if ((child->dvo_port == port_mapping[port].dp ||
> @@ -2433,12 +2433,12 @@ bool intel_bios_is_port_present(struct drm_i915_private *dev_priv, enum port por
>
> /**
> * intel_bios_is_port_edp - is the device in given port eDP
> - * @dev_priv: i915 device instance
> + * @i915: i915 device instance
> * @port: port to check
> *
> * Return true if the device in %port is eDP.
> */
> -bool intel_bios_is_port_edp(struct drm_i915_private *dev_priv, enum port port)
> +bool intel_bios_is_port_edp(struct drm_i915_private *i915, enum port port)
> {
> const struct display_device_data *devdata;
> const struct child_device_config *child;
> @@ -2450,10 +2450,10 @@ bool intel_bios_is_port_edp(struct drm_i915_private *dev_priv, enum port port)
> [PORT_F] = DVO_PORT_DPF,
> };
>
> - if (HAS_DDI(dev_priv))
> - return dev_priv->vbt.ddi_port_info[port].supports_edp;
> + if (HAS_DDI(i915))
> + return i915->vbt.ddi_port_info[port].supports_edp;
>
> - list_for_each_entry(devdata, &dev_priv->vbt.display_devices, node) {
> + list_for_each_entry(devdata, &i915->vbt.display_devices, node) {
> child = &devdata->child;
>
> if (child->dvo_port == port_mapping[port] &&
> @@ -2500,12 +2500,12 @@ static bool child_dev_is_dp_dual_mode(const struct child_device_config *child,
> return false;
> }
>
> -bool intel_bios_is_port_dp_dual_mode(struct drm_i915_private *dev_priv,
> +bool intel_bios_is_port_dp_dual_mode(struct drm_i915_private *i915,
> enum port port)
> {
> const struct display_device_data *devdata;
>
> - list_for_each_entry(devdata, &dev_priv->vbt.display_devices, node) {
> + list_for_each_entry(devdata, &i915->vbt.display_devices, node) {
> if (child_dev_is_dp_dual_mode(&devdata->child, port))
> return true;
> }
> @@ -2515,19 +2515,19 @@ bool intel_bios_is_port_dp_dual_mode(struct drm_i915_private *dev_priv,
>
> /**
> * intel_bios_is_dsi_present - is DSI present in VBT
> - * @dev_priv: i915 device instance
> + * @i915: i915 device instance
> * @port: port for DSI if present
> *
> * Return true if DSI is present, and return the port in %port.
> */
> -bool intel_bios_is_dsi_present(struct drm_i915_private *dev_priv,
> +bool intel_bios_is_dsi_present(struct drm_i915_private *i915,
> enum port *port)
> {
> const struct display_device_data *devdata;
> const struct child_device_config *child;
> u8 dvo_port;
>
> - list_for_each_entry(devdata, &dev_priv->vbt.display_devices, node) {
> + list_for_each_entry(devdata, &i915->vbt.display_devices, node) {
> child = &devdata->child;
>
> if (!(child->device_type & DEVICE_TYPE_MIPI_OUTPUT))
> @@ -2536,15 +2536,15 @@ bool intel_bios_is_dsi_present(struct drm_i915_private *dev_priv,
> dvo_port = child->dvo_port;
>
> if (dvo_port == DVO_PORT_MIPIA ||
> - (dvo_port == DVO_PORT_MIPIB && INTEL_GEN(dev_priv) >= 11) ||
> - (dvo_port == DVO_PORT_MIPIC && INTEL_GEN(dev_priv) < 11)) {
> + (dvo_port == DVO_PORT_MIPIB && INTEL_GEN(i915) >= 11) ||
> + (dvo_port == DVO_PORT_MIPIC && INTEL_GEN(i915) < 11)) {
> if (port)
> *port = dvo_port - DVO_PORT_MIPIA;
> return true;
> } else if (dvo_port == DVO_PORT_MIPIB ||
> dvo_port == DVO_PORT_MIPIC ||
> dvo_port == DVO_PORT_MIPID) {
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "VBT has unsupported DSI port %c\n",
> port_name(dvo_port - DVO_PORT_MIPIA));
> }
> @@ -2700,17 +2700,17 @@ intel_bios_is_lane_reversal_needed(const struct drm_i915_private *i915,
> return child && child->lane_reversal;
> }
>
> -enum aux_ch intel_bios_port_aux_ch(struct drm_i915_private *dev_priv,
> +enum aux_ch intel_bios_port_aux_ch(struct drm_i915_private *i915,
> enum port port)
> {
> const struct ddi_vbt_port_info *info =
> - &dev_priv->vbt.ddi_port_info[port];
> + &i915->vbt.ddi_port_info[port];
> enum aux_ch aux_ch;
>
> if (!info->alternate_aux_channel) {
> aux_ch = (enum aux_ch)port;
>
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(&i915->drm,
> "using AUX %c for port %c (platform default)\n",
> aux_ch_name(aux_ch), port_name(port));
> return aux_ch;
> @@ -2728,29 +2728,29 @@ enum aux_ch intel_bios_port_aux_ch(struct drm_i915_private *dev_priv,
> aux_ch = AUX_CH_A;
> break;
> case DP_AUX_B:
> - if (IS_ALDERLAKE_S(dev_priv))
> + if (IS_ALDERLAKE_S(i915))
> aux_ch = AUX_CH_USBC1;
> else
> aux_ch = AUX_CH_B;
> break;
> case DP_AUX_C:
> - if (IS_ALDERLAKE_S(dev_priv))
> + if (IS_ALDERLAKE_S(i915))
> aux_ch = AUX_CH_USBC2;
> - else if (IS_DG1(dev_priv) || IS_ROCKETLAKE(dev_priv))
> + else if (IS_DG1(i915) || IS_ROCKETLAKE(i915))
> aux_ch = AUX_CH_USBC1;
> else
> aux_ch = AUX_CH_C;
> break;
> case DP_AUX_D:
> - if (IS_ALDERLAKE_S(dev_priv))
> + if (IS_ALDERLAKE_S(i915))
> aux_ch = AUX_CH_USBC3;
> - else if (IS_DG1(dev_priv) || IS_ROCKETLAKE(dev_priv))
> + else if (IS_DG1(i915) || IS_ROCKETLAKE(i915))
> aux_ch = AUX_CH_USBC2;
> else
> aux_ch = AUX_CH_D;
> break;
> case DP_AUX_E:
> - if (IS_ALDERLAKE_S(dev_priv))
> + if (IS_ALDERLAKE_S(i915))
> aux_ch = AUX_CH_USBC4;
> else
> aux_ch = AUX_CH_E;
> @@ -2773,7 +2773,7 @@ enum aux_ch intel_bios_port_aux_ch(struct drm_i915_private *dev_priv,
> break;
> }
>
> - drm_dbg_kms(&dev_priv->drm, "using AUX %c for port %c (VBT)\n",
> + drm_dbg_kms(&i915->drm, "using AUX %c for port %c (VBT)\n",
> aux_ch_name(aux_ch), port_name(port));
>
> return aux_ch;
> --
> 2.20.1
--
Ville Syrjälä
Intel
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Intel-gfx] [PATCH 02/12] drm/i915/bios: store bdb version in i915
2021-02-17 17:03 ` [Intel-gfx] [PATCH 02/12] drm/i915/bios: store bdb version in i915 Jani Nikula
@ 2021-02-22 18:14 ` Ville Syrjälä
0 siblings, 0 replies; 40+ messages in thread
From: Ville Syrjälä @ 2021-02-22 18:14 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx, Lucas De Marchi
On Wed, Feb 17, 2021 at 07:03:32PM +0200, Jani Nikula wrote:
> We'll be needing the version in more places in the future, so avoid the
> need to pass it around. No functional changes.
>
> Cc: Lucas De Marchi <lucas.demarchi@intel.com>
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_bios.c | 28 +++++++++++------------
> drivers/gpu/drm/i915/i915_drv.h | 3 +++
> 2 files changed, 17 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
> index 802c228b2940..a8712fe8bf3e 100644
> --- a/drivers/gpu/drm/i915/display/intel_bios.c
> +++ b/drivers/gpu/drm/i915/display/intel_bios.c
> @@ -597,7 +597,7 @@ child_device_ptr(const struct bdb_general_definitions *defs, int i)
> }
>
> static void
> -parse_sdvo_device_mapping(struct drm_i915_private *i915, u8 bdb_version)
> +parse_sdvo_device_mapping(struct drm_i915_private *i915)
> {
> struct sdvo_device_mapping *mapping;
> const struct display_device_data *devdata;
> @@ -1760,8 +1760,7 @@ static enum port dvo_port_to_port(struct drm_i915_private *i915,
> }
>
> static void parse_ddi_port(struct drm_i915_private *i915,
> - struct display_device_data *devdata,
> - u8 bdb_version)
> + struct display_device_data *devdata)
> {
> const struct child_device_config *child = &devdata->child;
> struct ddi_vbt_port_info *info;
> @@ -1800,10 +1799,10 @@ static void parse_ddi_port(struct drm_i915_private *i915,
> info->supports_dp = is_dp;
> info->supports_edp = is_edp;
>
> - if (bdb_version >= 195)
> + if (i915->vbt.version >= 195)
> info->supports_typec_usb = child->dp_usb_type_c;
>
> - if (bdb_version >= 209)
> + if (i915->vbt.version >= 209)
> info->supports_tbt = child->tbt;
>
> drm_dbg_kms(&i915->drm,
> @@ -1834,7 +1833,7 @@ static void parse_ddi_port(struct drm_i915_private *i915,
> sanitize_aux_ch(i915, port);
> }
>
> - if (bdb_version >= 158) {
> + if (i915->vbt.version >= 158) {
> /* The VBT HDMI level shift values match the table we have. */
> u8 hdmi_level_shift = child->hdmi_level_shifter_value;
> drm_dbg_kms(&i915->drm,
> @@ -1845,7 +1844,7 @@ static void parse_ddi_port(struct drm_i915_private *i915,
> info->hdmi_level_shift_set = true;
> }
>
> - if (bdb_version >= 204) {
> + if (i915->vbt.version >= 204) {
> int max_tmds_clock;
>
> switch (child->hdmi_max_data_rate) {
> @@ -1871,7 +1870,7 @@ static void parse_ddi_port(struct drm_i915_private *i915,
> }
>
> /* Parse the I_boost config for SKL and above */
> - if (bdb_version >= 196 && child->iboost) {
> + if (i915->vbt.version >= 196 && child->iboost) {
> info->dp_boost_level = translate_iboost(child->dp_iboost_level);
> drm_dbg_kms(&i915->drm,
> "Port %c VBT (e)DP boost level: %d\n",
> @@ -1883,7 +1882,7 @@ static void parse_ddi_port(struct drm_i915_private *i915,
> }
>
> /* DP max link rate for CNL+ */
> - if (bdb_version >= 216) {
> + if (i915->vbt.version >= 216) {
> switch (child->dp_max_link_rate) {
> default:
> case VBT_DP_MAX_LINK_RATE_HBR3:
> @@ -1907,18 +1906,18 @@ static void parse_ddi_port(struct drm_i915_private *i915,
> info->child = child;
> }
>
> -static void parse_ddi_ports(struct drm_i915_private *i915, u8 bdb_version)
> +static void parse_ddi_ports(struct drm_i915_private *i915)
> {
> struct display_device_data *devdata;
>
> if (!HAS_DDI(i915) && !IS_CHERRYVIEW(i915))
> return;
>
> - if (bdb_version < 155)
> + if (i915->vbt.version < 155)
> return;
>
> list_for_each_entry(devdata, &i915->vbt.display_devices, node)
> - parse_ddi_port(i915, devdata, bdb_version);
> + parse_ddi_port(i915, devdata);
> }
>
> static void
> @@ -2229,6 +2228,7 @@ void intel_bios_init(struct drm_i915_private *i915)
> }
>
> bdb = get_bdb_header(vbt);
> + i915->vbt.version = bdb->version;
>
> drm_dbg_kms(&i915->drm,
> "VBT signature \"%.*s\", BDB version %d\n",
> @@ -2252,8 +2252,8 @@ void intel_bios_init(struct drm_i915_private *i915)
> parse_compression_parameters(i915, bdb);
>
> /* Further processing on pre-parsed data */
> - parse_sdvo_device_mapping(i915, bdb->version);
> - parse_ddi_ports(i915, bdb->version);
> + parse_sdvo_device_mapping(i915);
> + parse_ddi_ports(i915);
>
> out:
> if (!vbt) {
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index f8413b3b9da8..62be1465f52b 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -615,6 +615,9 @@ enum psr_lines_to_wait {
> };
>
> struct intel_vbt_data {
> + /* bdb version */
> + u16 version;
> +
> struct drm_display_mode *lfp_lvds_vbt_mode; /* if any */
> struct drm_display_mode *sdvo_lvds_vbt_mode; /* if any */
>
> --
> 2.20.1
--
Ville Syrjälä
Intel
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Intel-gfx] [PATCH 03/12] drm/i915/bios: limit default outputs by platform on missing VBT
2021-02-17 17:03 ` [Intel-gfx] [PATCH 03/12] drm/i915/bios: limit default outputs by platform on missing VBT Jani Nikula
@ 2021-02-22 18:16 ` Ville Syrjälä
0 siblings, 0 replies; 40+ messages in thread
From: Ville Syrjälä @ 2021-02-22 18:16 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx, Lucas De Marchi
On Wed, Feb 17, 2021 at 07:03:33PM +0200, Jani Nikula wrote:
> Pre-DDI and non-CHV aren't using the information created here anyway, so
> don't bother setting the defaults for them. This should be a
> non-functional change, but is separated here to catch any regressions in
> a single commit.
>
> Cc: Lucas De Marchi <lucas.demarchi@intel.com>
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_bios.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
> index a8712fe8bf3e..e9cb15aa2f5a 100644
> --- a/drivers/gpu/drm/i915/display/intel_bios.c
> +++ b/drivers/gpu/drm/i915/display/intel_bios.c
> @@ -2058,6 +2058,9 @@ init_vbt_missing_defaults(struct drm_i915_private *i915)
> {
> enum port port;
>
> + if (!HAS_DDI(i915) && !IS_CHERRYVIEW(i915))
> + return;
> +
> for_each_port(port) {
> struct ddi_vbt_port_info *info =
> &i915->vbt.ddi_port_info[port];
> --
> 2.20.1
--
Ville Syrjälä
Intel
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Intel-gfx] [PATCH 06/12] drm/i915/bios: rename display_device_data to intel_bios_encoder_data
2021-02-17 19:52 ` Jani Nikula
@ 2021-02-23 12:50 ` Jani Nikula
2021-02-24 0:37 ` Lucas De Marchi
0 siblings, 1 reply; 40+ messages in thread
From: Jani Nikula @ 2021-02-23 12:50 UTC (permalink / raw)
To: Lucas De Marchi; +Cc: intel-gfx
On Wed, 17 Feb 2021, Jani Nikula <jani.nikula@intel.com> wrote:
> On Wed, 17 Feb 2021, Lucas De Marchi <lucas.demarchi@intel.com> wrote:
>> On Wed, Feb 17, 2021 at 07:03:36PM +0200, Jani Nikula wrote:
>>>Make the naming suitable for exposing to the rest of the driver as an
>>>opaque type. No functional changes.
>>
>> ack, but..
>>
>>>
>>>Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>>>Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
>>>Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>>>---
>>> drivers/gpu/drm/i915/display/intel_bios.c | 30 +++++++++++------------
>>> 1 file changed, 15 insertions(+), 15 deletions(-)
>>>
>>>diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
>>>index 59d315b395c2..0e882da165be 100644
>>>--- a/drivers/gpu/drm/i915/display/intel_bios.c
>>>+++ b/drivers/gpu/drm/i915/display/intel_bios.c
>>>@@ -59,7 +59,7 @@
>>> */
>>>
>>> /* Wrapper for VBT child device config */
>>>-struct display_device_data {
>>>+struct intel_bios_encoder_data {
>>> struct child_device_config child;
>>> struct dsc_compression_parameters_entry *dsc;
>>> struct list_head node;
>>>@@ -600,7 +600,7 @@ static void
>>> parse_sdvo_device_mapping(struct drm_i915_private *i915)
>>> {
>>> struct sdvo_device_mapping *mapping;
>>>- const struct display_device_data *devdata;
>>>+ const struct intel_bios_encoder_data *devdata;
>>
>> shouldn't we also replace devdata with a better name?
>
> Yes, see cover letter. :)
>
> I've rolled with devdata for now because that's what was there.
So. Does "intel_bios_encoder_data" make sense as a name, or do we have
better ideas? It's basically just a wrapper to VBT child device config.
The name "devdata" depends on the struct name too I guess. Within
intel_bios.c, s/devdata/whatever/g isn't a big deal. The real question
is what to call the pointer within struct intel_encoder.
I'm really not hung up on the names I used, but I'd only like to do the
rename+rebase of this series once and be done with it.
BR,
Jani.
>
> BR,
> Jani.
>
>
>>
>> Lucas De Marchi
>>
>>> const struct child_device_config *child;
>>> int count = 0;
>>>
>>>@@ -1439,7 +1439,7 @@ parse_compression_parameters(struct drm_i915_private *i915,
>>> const struct bdb_header *bdb)
>>> {
>>> const struct bdb_compression_parameters *params;
>>>- struct display_device_data *devdata;
>>>+ struct intel_bios_encoder_data *devdata;
>>> const struct child_device_config *child;
>>> u16 block_size;
>>> int index;
>>>@@ -1760,7 +1760,7 @@ static enum port dvo_port_to_port(struct drm_i915_private *i915,
>>> }
>>>
>>> static void parse_ddi_port(struct drm_i915_private *i915,
>>>- struct display_device_data *devdata)
>>>+ struct intel_bios_encoder_data *devdata)
>>> {
>>> const struct child_device_config *child = &devdata->child;
>>> struct ddi_vbt_port_info *info;
>>>@@ -1908,7 +1908,7 @@ static void parse_ddi_port(struct drm_i915_private *i915,
>>>
>>> static void parse_ddi_ports(struct drm_i915_private *i915)
>>> {
>>>- struct display_device_data *devdata;
>>>+ struct intel_bios_encoder_data *devdata;
>>>
>>> if (!HAS_DDI(i915) && !IS_CHERRYVIEW(i915))
>>> return;
>>>@@ -1925,7 +1925,7 @@ parse_general_definitions(struct drm_i915_private *i915,
>>> const struct bdb_header *bdb)
>>> {
>>> const struct bdb_general_definitions *defs;
>>>- struct display_device_data *devdata;
>>>+ struct intel_bios_encoder_data *devdata;
>>> const struct child_device_config *child;
>>> int i, child_device_num;
>>> u8 expected_size;
>>>@@ -2063,7 +2063,7 @@ init_vbt_missing_defaults(struct drm_i915_private *i915)
>>> return;
>>>
>>> for_each_port_masked(port, ports) {
>>>- struct display_device_data *devdata;
>>>+ struct intel_bios_encoder_data *devdata;
>>> struct child_device_config *child;
>>> enum phy phy = intel_port_to_phy(i915, port);
>>>
>>>@@ -2302,7 +2302,7 @@ void intel_bios_init(struct drm_i915_private *i915)
>>> */
>>> void intel_bios_driver_remove(struct drm_i915_private *i915)
>>> {
>>>- struct display_device_data *devdata, *n;
>>>+ struct intel_bios_encoder_data *devdata, *n;
>>>
>>> list_for_each_entry_safe(devdata, n, &i915->vbt.display_devices, node) {
>>> list_del(&devdata->node);
>>>@@ -2333,7 +2333,7 @@ void intel_bios_driver_remove(struct drm_i915_private *i915)
>>> */
>>> bool intel_bios_is_tv_present(struct drm_i915_private *i915)
>>> {
>>>- const struct display_device_data *devdata;
>>>+ const struct intel_bios_encoder_data *devdata;
>>> const struct child_device_config *child;
>>>
>>> if (!i915->vbt.int_tv_support)
>>>@@ -2376,7 +2376,7 @@ bool intel_bios_is_tv_present(struct drm_i915_private *i915)
>>> */
>>> bool intel_bios_is_lvds_present(struct drm_i915_private *i915, u8 *i2c_pin)
>>> {
>>>- const struct display_device_data *devdata;
>>>+ const struct intel_bios_encoder_data *devdata;
>>> const struct child_device_config *child;
>>>
>>> if (list_empty(&i915->vbt.display_devices))
>>>@@ -2425,7 +2425,7 @@ bool intel_bios_is_lvds_present(struct drm_i915_private *i915, u8 *i2c_pin)
>>> */
>>> bool intel_bios_is_port_present(struct drm_i915_private *i915, enum port port)
>>> {
>>>- const struct display_device_data *devdata;
>>>+ const struct intel_bios_encoder_data *devdata;
>>> const struct child_device_config *child;
>>> static const struct {
>>> u16 dp, hdmi;
>>>@@ -2471,7 +2471,7 @@ bool intel_bios_is_port_present(struct drm_i915_private *i915, enum port port)
>>> */
>>> bool intel_bios_is_port_edp(struct drm_i915_private *i915, enum port port)
>>> {
>>>- const struct display_device_data *devdata;
>>>+ const struct intel_bios_encoder_data *devdata;
>>> const struct child_device_config *child;
>>> static const short port_mapping[] = {
>>> [PORT_B] = DVO_PORT_DPB,
>>>@@ -2534,7 +2534,7 @@ static bool child_dev_is_dp_dual_mode(const struct child_device_config *child,
>>> bool intel_bios_is_port_dp_dual_mode(struct drm_i915_private *i915,
>>> enum port port)
>>> {
>>>- const struct display_device_data *devdata;
>>>+ const struct intel_bios_encoder_data *devdata;
>>>
>>> list_for_each_entry(devdata, &i915->vbt.display_devices, node) {
>>> if (child_dev_is_dp_dual_mode(&devdata->child, port))
>>>@@ -2554,7 +2554,7 @@ bool intel_bios_is_port_dp_dual_mode(struct drm_i915_private *i915,
>>> bool intel_bios_is_dsi_present(struct drm_i915_private *i915,
>>> enum port *port)
>>> {
>>>- const struct display_device_data *devdata;
>>>+ const struct intel_bios_encoder_data *devdata;
>>> const struct child_device_config *child;
>>> u8 dvo_port;
>>>
>>>@@ -2654,7 +2654,7 @@ bool intel_bios_get_dsc_params(struct intel_encoder *encoder,
>>> int dsc_max_bpc)
>>> {
>>> struct drm_i915_private *i915 = to_i915(encoder->base.dev);
>>>- const struct display_device_data *devdata;
>>>+ const struct intel_bios_encoder_data *devdata;
>>> const struct child_device_config *child;
>>>
>>> list_for_each_entry(devdata, &i915->vbt.display_devices, node) {
>>>--
>>>2.20.1
>>>
--
Jani Nikula, Intel Open Source Graphics Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Intel-gfx] [PATCH 04/12] drm/i915/bios: limit default outputs to ports A through F
2021-02-17 19:58 ` Lucas De Marchi
@ 2021-02-23 13:34 ` Jani Nikula
2021-02-24 0:34 ` Lucas De Marchi
0 siblings, 1 reply; 40+ messages in thread
From: Jani Nikula @ 2021-02-23 13:34 UTC (permalink / raw)
To: Lucas De Marchi; +Cc: intel-gfx
On Wed, 17 Feb 2021, Lucas De Marchi <lucas.demarchi@intel.com> wrote:
> On Wed, Feb 17, 2021 at 09:49:57PM +0200, Jani Nikula wrote:
>>On Wed, 17 Feb 2021, Lucas De Marchi <lucas.demarchi@intel.com> wrote:
>>> On Wed, Feb 17, 2021 at 09:23:00AM -0800, Lucas De Marchi wrote:
>>>>On Wed, Feb 17, 2021 at 07:03:34PM +0200, Jani Nikula wrote:
>>>>>With the defaults limited to non-TypeC ports in commit 828ccb31cf41
>>>>>("drm/i915/icl: Add TypeC ports only if VBT is present"), this should be
>>>>>a no-op, but clarifies the code and prepares for subsequent changes.
>>>>>
>>>>>Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>>>>>Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
>>>>>Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>>>>>---
>>>>>drivers/gpu/drm/i915/display/intel_bios.c | 3 ++-
>>>>>1 file changed, 2 insertions(+), 1 deletion(-)
>>>>>
>>>>>diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
>>>>>index e9cb15aa2f5a..b9d99324d66d 100644
>>>>>--- a/drivers/gpu/drm/i915/display/intel_bios.c
>>>>>+++ b/drivers/gpu/drm/i915/display/intel_bios.c
>>>>>@@ -2057,11 +2057,12 @@ static void
>>>>>init_vbt_missing_defaults(struct drm_i915_private *i915)
>>>>>{
>>>>> enum port port;
>>>>>+ int ports = PORT_A | PORT_B | PORT_C | PORT_D | PORT_E | PORT_F;
>>>>
>>>>
>>>>I'd not spread the knowledge of what port uses tc phy like this.
>>>>It's painful to maintain.
>>
>>Umm, this wasn't meant to have anything to do with tc, really. Granted,
>>the commit message is misleading.
>
> ok, makes more sense now. I don't want us to keep updating this function
> when the ports change on new platforms.
Agreed.
>
>>
>>>
>>> also, not sure how this clarifies things if PORT_TC1 aliases PORT_D,
>>> so I'd just drop this patch
>>
>>The point is that I'd like to reduce the number of ports set up by
>>default, perhaps even further than this. It's a bit silly to generate 9
>>dummy child devices on certain platforms when there's no VBT.
>
> ok. So what would be the devices without vbt? I remember relying on this
> for e.g. dg1 before we could read it.
If it were just for enabling, I'd start some igt tool to generate a
basic VBT to use with i915.vbt_firmware and the firmware loader. It's
the existing products that ended up depending on the defaults that are
the real issue I think.
> What other platforms should we care about? And for those, should we
> really care about ports E and F or could we reduce it to, say the first
> 4?
IIRC they were some Haswell or Broadwell era Chromebooks. They probably
don't use very many ports, but in theory it could be A-D,F on DDI
platforms (E requires VBT child device). On gen 11 it could be A-E, with
F requiring VBT child device.
A-F covers all cases, but does not try to create G-I or any further
future ports.
BR,
Jani.
>
> thanks
> Lucas De Marchi
>
>>
>>
>>BR,
>>Jani.
>>
>>>
>>> Lucas De Marchi
>>>
>>>>Lucas De Marchi
>>>>
>>>>>
>>>>> if (!HAS_DDI(i915) && !IS_CHERRYVIEW(i915))
>>>>> return;
>>>>>
>>>>>- for_each_port(port) {
>>>>>+ for_each_port_masked(port, ports) {
>>>>> struct ddi_vbt_port_info *info =
>>>>> &i915->vbt.ddi_port_info[port];
>>>>> enum phy phy = intel_port_to_phy(i915, port);
>>>>>--
>>>>>2.20.1
>>>>>
>>> _______________________________________________
>>> Intel-gfx mailing list
>>> Intel-gfx@lists.freedesktop.org
>>> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
>>
>>--
>>Jani Nikula, Intel Open Source Graphics Center
--
Jani Nikula, Intel Open Source Graphics Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Intel-gfx] [PATCH 04/12] drm/i915/bios: limit default outputs to ports A through F
2021-02-23 13:34 ` Jani Nikula
@ 2021-02-24 0:34 ` Lucas De Marchi
0 siblings, 0 replies; 40+ messages in thread
From: Lucas De Marchi @ 2021-02-24 0:34 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
On Tue, Feb 23, 2021 at 03:34:51PM +0200, Jani Nikula wrote:
>On Wed, 17 Feb 2021, Lucas De Marchi <lucas.demarchi@intel.com> wrote:
>> On Wed, Feb 17, 2021 at 09:49:57PM +0200, Jani Nikula wrote:
>>>On Wed, 17 Feb 2021, Lucas De Marchi <lucas.demarchi@intel.com> wrote:
>>>> On Wed, Feb 17, 2021 at 09:23:00AM -0800, Lucas De Marchi wrote:
>>>>>On Wed, Feb 17, 2021 at 07:03:34PM +0200, Jani Nikula wrote:
>>>>>>With the defaults limited to non-TypeC ports in commit 828ccb31cf41
>>>>>>("drm/i915/icl: Add TypeC ports only if VBT is present"), this should be
>>>>>>a no-op, but clarifies the code and prepares for subsequent changes.
>>>>>>
>>>>>>Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>>>>>>Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
>>>>>>Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>>>>>>---
>>>>>>drivers/gpu/drm/i915/display/intel_bios.c | 3 ++-
>>>>>>1 file changed, 2 insertions(+), 1 deletion(-)
>>>>>>
>>>>>>diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
>>>>>>index e9cb15aa2f5a..b9d99324d66d 100644
>>>>>>--- a/drivers/gpu/drm/i915/display/intel_bios.c
>>>>>>+++ b/drivers/gpu/drm/i915/display/intel_bios.c
>>>>>>@@ -2057,11 +2057,12 @@ static void
>>>>>>init_vbt_missing_defaults(struct drm_i915_private *i915)
>>>>>>{
>>>>>> enum port port;
>>>>>>+ int ports = PORT_A | PORT_B | PORT_C | PORT_D | PORT_E | PORT_F;
>>>>>
>>>>>
>>>>>I'd not spread the knowledge of what port uses tc phy like this.
>>>>>It's painful to maintain.
>>>
>>>Umm, this wasn't meant to have anything to do with tc, really. Granted,
>>>the commit message is misleading.
>>
>> ok, makes more sense now. I don't want us to keep updating this function
>> when the ports change on new platforms.
>
>Agreed.
>
>>
>>>
>>>>
>>>> also, not sure how this clarifies things if PORT_TC1 aliases PORT_D,
>>>> so I'd just drop this patch
>>>
>>>The point is that I'd like to reduce the number of ports set up by
>>>default, perhaps even further than this. It's a bit silly to generate 9
>>>dummy child devices on certain platforms when there's no VBT.
>>
>> ok. So what would be the devices without vbt? I remember relying on this
>> for e.g. dg1 before we could read it.
>
>If it were just for enabling, I'd start some igt tool to generate a
>basic VBT to use with i915.vbt_firmware and the firmware loader. It's
>the existing products that ended up depending on the defaults that are
>the real issue I think.
>
>> What other platforms should we care about? And for those, should we
>> really care about ports E and F or could we reduce it to, say the first
>> 4?
>
>IIRC they were some Haswell or Broadwell era Chromebooks. They probably
>don't use very many ports, but in theory it could be A-D,F on DDI
>platforms (E requires VBT child device). On gen 11 it could be A-E, with
>F requiring VBT child device.
>
>A-F covers all cases, but does not try to create G-I or any further
>future ports.
ok, thanks for confirming.
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Lucas De Marchi
>
>
>BR,
>Jani.
>
>
>>
>> thanks
>> Lucas De Marchi
>>
>>>
>>>
>>>BR,
>>>Jani.
>>>
>>>>
>>>> Lucas De Marchi
>>>>
>>>>>Lucas De Marchi
>>>>>
>>>>>>
>>>>>> if (!HAS_DDI(i915) && !IS_CHERRYVIEW(i915))
>>>>>> return;
>>>>>>
>>>>>>- for_each_port(port) {
>>>>>>+ for_each_port_masked(port, ports) {
>>>>>> struct ddi_vbt_port_info *info =
>>>>>> &i915->vbt.ddi_port_info[port];
>>>>>> enum phy phy = intel_port_to_phy(i915, port);
>>>>>>--
>>>>>>2.20.1
>>>>>>
>>>> _______________________________________________
>>>> Intel-gfx mailing list
>>>> Intel-gfx@lists.freedesktop.org
>>>> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
>>>
>>>--
>>>Jani Nikula, Intel Open Source Graphics Center
>
>--
>Jani Nikula, Intel Open Source Graphics Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Intel-gfx] [PATCH 06/12] drm/i915/bios: rename display_device_data to intel_bios_encoder_data
2021-02-23 12:50 ` Jani Nikula
@ 2021-02-24 0:37 ` Lucas De Marchi
0 siblings, 0 replies; 40+ messages in thread
From: Lucas De Marchi @ 2021-02-24 0:37 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
On Tue, Feb 23, 2021 at 02:50:30PM +0200, Jani Nikula wrote:
>On Wed, 17 Feb 2021, Jani Nikula <jani.nikula@intel.com> wrote:
>> On Wed, 17 Feb 2021, Lucas De Marchi <lucas.demarchi@intel.com> wrote:
>>> On Wed, Feb 17, 2021 at 07:03:36PM +0200, Jani Nikula wrote:
>>>>Make the naming suitable for exposing to the rest of the driver as an
>>>>opaque type. No functional changes.
>>>
>>> ack, but..
>>>
>>>>
>>>>Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>>>>Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
>>>>Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>>>>---
>>>> drivers/gpu/drm/i915/display/intel_bios.c | 30 +++++++++++------------
>>>> 1 file changed, 15 insertions(+), 15 deletions(-)
>>>>
>>>>diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
>>>>index 59d315b395c2..0e882da165be 100644
>>>>--- a/drivers/gpu/drm/i915/display/intel_bios.c
>>>>+++ b/drivers/gpu/drm/i915/display/intel_bios.c
>>>>@@ -59,7 +59,7 @@
>>>> */
>>>>
>>>> /* Wrapper for VBT child device config */
>>>>-struct display_device_data {
>>>>+struct intel_bios_encoder_data {
>>>> struct child_device_config child;
>>>> struct dsc_compression_parameters_entry *dsc;
>>>> struct list_head node;
>>>>@@ -600,7 +600,7 @@ static void
>>>> parse_sdvo_device_mapping(struct drm_i915_private *i915)
>>>> {
>>>> struct sdvo_device_mapping *mapping;
>>>>- const struct display_device_data *devdata;
>>>>+ const struct intel_bios_encoder_data *devdata;
>>>
>>> shouldn't we also replace devdata with a better name?
>>
>> Yes, see cover letter. :)
>>
>> I've rolled with devdata for now because that's what was there.
>
>So. Does "intel_bios_encoder_data" make sense as a name, or do we have
>better ideas? It's basically just a wrapper to VBT child device config.
>
>The name "devdata" depends on the struct name too I guess. Within
>intel_bios.c, s/devdata/whatever/g isn't a big deal. The real question
>is what to call the pointer within struct intel_encoder.
>
>I'm really not hung up on the names I used, but I'd only like to do the
>rename+rebase of this series once and be done with it.
On that lack of a better suggestion for the name, I'm convinced we can
actually leave this for later
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Lucas De Marchi
>
>
>BR,
>Jani.
>
>
>
>>
>> BR,
>> Jani.
>>
>>
>>>
>>> Lucas De Marchi
>>>
>>>> const struct child_device_config *child;
>>>> int count = 0;
>>>>
>>>>@@ -1439,7 +1439,7 @@ parse_compression_parameters(struct drm_i915_private *i915,
>>>> const struct bdb_header *bdb)
>>>> {
>>>> const struct bdb_compression_parameters *params;
>>>>- struct display_device_data *devdata;
>>>>+ struct intel_bios_encoder_data *devdata;
>>>> const struct child_device_config *child;
>>>> u16 block_size;
>>>> int index;
>>>>@@ -1760,7 +1760,7 @@ static enum port dvo_port_to_port(struct drm_i915_private *i915,
>>>> }
>>>>
>>>> static void parse_ddi_port(struct drm_i915_private *i915,
>>>>- struct display_device_data *devdata)
>>>>+ struct intel_bios_encoder_data *devdata)
>>>> {
>>>> const struct child_device_config *child = &devdata->child;
>>>> struct ddi_vbt_port_info *info;
>>>>@@ -1908,7 +1908,7 @@ static void parse_ddi_port(struct drm_i915_private *i915,
>>>>
>>>> static void parse_ddi_ports(struct drm_i915_private *i915)
>>>> {
>>>>- struct display_device_data *devdata;
>>>>+ struct intel_bios_encoder_data *devdata;
>>>>
>>>> if (!HAS_DDI(i915) && !IS_CHERRYVIEW(i915))
>>>> return;
>>>>@@ -1925,7 +1925,7 @@ parse_general_definitions(struct drm_i915_private *i915,
>>>> const struct bdb_header *bdb)
>>>> {
>>>> const struct bdb_general_definitions *defs;
>>>>- struct display_device_data *devdata;
>>>>+ struct intel_bios_encoder_data *devdata;
>>>> const struct child_device_config *child;
>>>> int i, child_device_num;
>>>> u8 expected_size;
>>>>@@ -2063,7 +2063,7 @@ init_vbt_missing_defaults(struct drm_i915_private *i915)
>>>> return;
>>>>
>>>> for_each_port_masked(port, ports) {
>>>>- struct display_device_data *devdata;
>>>>+ struct intel_bios_encoder_data *devdata;
>>>> struct child_device_config *child;
>>>> enum phy phy = intel_port_to_phy(i915, port);
>>>>
>>>>@@ -2302,7 +2302,7 @@ void intel_bios_init(struct drm_i915_private *i915)
>>>> */
>>>> void intel_bios_driver_remove(struct drm_i915_private *i915)
>>>> {
>>>>- struct display_device_data *devdata, *n;
>>>>+ struct intel_bios_encoder_data *devdata, *n;
>>>>
>>>> list_for_each_entry_safe(devdata, n, &i915->vbt.display_devices, node) {
>>>> list_del(&devdata->node);
>>>>@@ -2333,7 +2333,7 @@ void intel_bios_driver_remove(struct drm_i915_private *i915)
>>>> */
>>>> bool intel_bios_is_tv_present(struct drm_i915_private *i915)
>>>> {
>>>>- const struct display_device_data *devdata;
>>>>+ const struct intel_bios_encoder_data *devdata;
>>>> const struct child_device_config *child;
>>>>
>>>> if (!i915->vbt.int_tv_support)
>>>>@@ -2376,7 +2376,7 @@ bool intel_bios_is_tv_present(struct drm_i915_private *i915)
>>>> */
>>>> bool intel_bios_is_lvds_present(struct drm_i915_private *i915, u8 *i2c_pin)
>>>> {
>>>>- const struct display_device_data *devdata;
>>>>+ const struct intel_bios_encoder_data *devdata;
>>>> const struct child_device_config *child;
>>>>
>>>> if (list_empty(&i915->vbt.display_devices))
>>>>@@ -2425,7 +2425,7 @@ bool intel_bios_is_lvds_present(struct drm_i915_private *i915, u8 *i2c_pin)
>>>> */
>>>> bool intel_bios_is_port_present(struct drm_i915_private *i915, enum port port)
>>>> {
>>>>- const struct display_device_data *devdata;
>>>>+ const struct intel_bios_encoder_data *devdata;
>>>> const struct child_device_config *child;
>>>> static const struct {
>>>> u16 dp, hdmi;
>>>>@@ -2471,7 +2471,7 @@ bool intel_bios_is_port_present(struct drm_i915_private *i915, enum port port)
>>>> */
>>>> bool intel_bios_is_port_edp(struct drm_i915_private *i915, enum port port)
>>>> {
>>>>- const struct display_device_data *devdata;
>>>>+ const struct intel_bios_encoder_data *devdata;
>>>> const struct child_device_config *child;
>>>> static const short port_mapping[] = {
>>>> [PORT_B] = DVO_PORT_DPB,
>>>>@@ -2534,7 +2534,7 @@ static bool child_dev_is_dp_dual_mode(const struct child_device_config *child,
>>>> bool intel_bios_is_port_dp_dual_mode(struct drm_i915_private *i915,
>>>> enum port port)
>>>> {
>>>>- const struct display_device_data *devdata;
>>>>+ const struct intel_bios_encoder_data *devdata;
>>>>
>>>> list_for_each_entry(devdata, &i915->vbt.display_devices, node) {
>>>> if (child_dev_is_dp_dual_mode(&devdata->child, port))
>>>>@@ -2554,7 +2554,7 @@ bool intel_bios_is_port_dp_dual_mode(struct drm_i915_private *i915,
>>>> bool intel_bios_is_dsi_present(struct drm_i915_private *i915,
>>>> enum port *port)
>>>> {
>>>>- const struct display_device_data *devdata;
>>>>+ const struct intel_bios_encoder_data *devdata;
>>>> const struct child_device_config *child;
>>>> u8 dvo_port;
>>>>
>>>>@@ -2654,7 +2654,7 @@ bool intel_bios_get_dsc_params(struct intel_encoder *encoder,
>>>> int dsc_max_bpc)
>>>> {
>>>> struct drm_i915_private *i915 = to_i915(encoder->base.dev);
>>>>- const struct display_device_data *devdata;
>>>>+ const struct intel_bios_encoder_data *devdata;
>>>> const struct child_device_config *child;
>>>>
>>>> list_for_each_entry(devdata, &i915->vbt.display_devices, node) {
>>>>--
>>>>2.20.1
>>>>
>
>--
>Jani Nikula, Intel Open Source Graphics Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Intel-gfx] [PATCH 05/12] drm/i915/bios: create fake child devices on missing VBT
2021-02-17 17:03 ` [Intel-gfx] [PATCH 05/12] drm/i915/bios: create fake child devices on missing VBT Jani Nikula
@ 2021-03-09 0:51 ` Lucas De Marchi
0 siblings, 0 replies; 40+ messages in thread
From: Lucas De Marchi @ 2021-03-09 0:51 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
On Wed, Feb 17, 2021 at 07:03:35PM +0200, Jani Nikula wrote:
>Instead of initialing data directly in ddi_port_info array, create fake
>child devices for default outputs when the VBT is missing. This makes
>further unification of output handling easier.
>
>This will make intel_bios_is_port_present() return true for the fake
>child devices. This may cause subtle changes in a handful of places.
>
>Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
>Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>---
> drivers/gpu/drm/i915/display/intel_bios.c | 47 ++++++++++++++++++-----
> 1 file changed, 37 insertions(+), 10 deletions(-)
>
>diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
>index b9d99324d66d..59d315b395c2 100644
>--- a/drivers/gpu/drm/i915/display/intel_bios.c
>+++ b/drivers/gpu/drm/i915/display/intel_bios.c
>@@ -2063,8 +2063,8 @@ init_vbt_missing_defaults(struct drm_i915_private *i915)
> return;
>
> for_each_port_masked(port, ports) {
>- struct ddi_vbt_port_info *info =
>- &i915->vbt.ddi_port_info[port];
>+ struct display_device_data *devdata;
>+ struct child_device_config *child;
> enum phy phy = intel_port_to_phy(i915, port);
>
> /*
>@@ -2074,11 +2074,38 @@ init_vbt_missing_defaults(struct drm_i915_private *i915)
> if (intel_phy_is_tc(i915, phy))
> continue;
>
>- info->supports_dvi = (port != PORT_A && port != PORT_E);
>- info->supports_hdmi = info->supports_dvi;
>- info->supports_dp = (port != PORT_E);
>- info->supports_edp = (port == PORT_A);
>+ /* Create fake child device config */
>+ devdata = kzalloc(sizeof(*devdata), GFP_KERNEL);
>+ if (!devdata)
>+ break;
>+
>+ child = &devdata->child;
>+
>+ if (port == PORT_F)
>+ child->dvo_port = DVO_PORT_HDMIF;
>+ else if (port == PORT_E)
>+ child->dvo_port = DVO_PORT_HDMIE;
>+ else
>+ child->dvo_port = DVO_PORT_HDMIA + port;
initially I was confused here, but after checking I understoo why you're
doing this, since DVO_PORT_HDMIE/DVO_PORT_HDMIF doesn't follow
DVO_PORT_HDMID
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Lucas De Marchi
>+
>+ if (port != PORT_A && port != PORT_E)
>+ child->device_type |= DEVICE_TYPE_TMDS_DVI_SIGNALING;
>+
>+ if (port != PORT_E)
>+ child->device_type |= DEVICE_TYPE_DISPLAYPORT_OUTPUT;
>+
>+ if (port == PORT_A)
>+ child->device_type |= DEVICE_TYPE_INTERNAL_CONNECTOR;
>+
>+ list_add_tail(&devdata->node, &i915->vbt.display_devices);
>+
>+ drm_dbg_kms(&i915->drm,
>+ "Generating default VBT child device with type 0x04%x on port %c\n",
>+ child->device_type, port_name(port));
> }
>+
>+ /* Bypass some minimum baseline VBT version checks */
>+ i915->vbt.version = 155;
> }
>
> static const struct bdb_header *get_bdb_header(const struct vbt_header *vbt)
>@@ -2255,10 +2282,6 @@ void intel_bios_init(struct drm_i915_private *i915)
> /* Depends on child device list */
> parse_compression_parameters(i915, bdb);
>
>- /* Further processing on pre-parsed data */
>- parse_sdvo_device_mapping(i915);
>- parse_ddi_ports(i915);
>-
> out:
> if (!vbt) {
> drm_info(&i915->drm,
>@@ -2266,6 +2289,10 @@ void intel_bios_init(struct drm_i915_private *i915)
> init_vbt_missing_defaults(i915);
> }
>
>+ /* Further processing on pre-parsed or generated child device data */
>+ parse_sdvo_device_mapping(i915);
>+ parse_ddi_ports(i915);
>+
> kfree(oprom_vbt);
> }
>
>--
>2.20.1
>
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Intel-gfx] [PATCH 08/12] drm/i915/vbt: add helper functions to check output support
2021-02-17 19:55 ` Jani Nikula
@ 2021-03-15 17:32 ` Lucas De Marchi
2021-03-16 9:18 ` Jani Nikula
0 siblings, 1 reply; 40+ messages in thread
From: Lucas De Marchi @ 2021-03-15 17:32 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
On Wed, Feb 17, 2021 at 09:55:53PM +0200, Jani Nikula wrote:
>On Wed, 17 Feb 2021, Lucas De Marchi <lucas.demarchi@intel.com> wrote:
>> On Wed, Feb 17, 2021 at 07:03:38PM +0200, Jani Nikula wrote:
>>>These will be exposed to the rest of the driver and replace other
>>>functions. Everything will operate on the child devices.
>>>
>>>Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>>>Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
>>>Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>>>---
>>> drivers/gpu/drm/i915/display/intel_bios.c | 66 ++++++++++++++++++-----
>>> 1 file changed, 54 insertions(+), 12 deletions(-)
>>>
>>>diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
>>>index 193772f42582..739ef5d91907 100644
>>>--- a/drivers/gpu/drm/i915/display/intel_bios.c
>>>+++ b/drivers/gpu/drm/i915/display/intel_bios.c
>>>@@ -64,6 +64,7 @@ struct intel_bios_encoder_data {
>>>
>>> struct child_device_config child;
>>> struct dsc_compression_parameters_entry *dsc;
>>>+
>>> struct list_head node;
>>> };
>>>
>>>@@ -1761,6 +1762,53 @@ static enum port dvo_port_to_port(struct drm_i915_private *i915,
>>> dvo_port);
>>> }
>>>
>>>+static void sanitize_device_type(struct intel_bios_encoder_data *devdata,
>>>+ enum port port)
>>>+{
>>>+ struct drm_i915_private *i915 = devdata->i915;
>>>+ bool is_hdmi;
>>>+
>>>+ if (port != PORT_A || INTEL_GEN(i915) >= 12)
>>>+ return;
>>>+
>>>+ if (!(devdata->child.device_type & DEVICE_TYPE_TMDS_DVI_SIGNALING))
>>>+ return;
>>>+
>>>+ is_hdmi = !(devdata->child.device_type & DEVICE_TYPE_NOT_HDMI_OUTPUT);
>>>+
>>>+ drm_dbg_kms(&i915->drm, "VBT claims port A supports DVI%s, ignoring\n",
>>>+ is_hdmi ? "/HDMI" : "");
>>>+
>>>+ devdata->child.device_type &= ~DEVICE_TYPE_TMDS_DVI_SIGNALING;
>>>+ devdata->child.device_type |= DEVICE_TYPE_NOT_HDMI_OUTPUT;
>>>+}
>>>+
>>>+static bool
>>>+intel_bios_encoder_supports_dvi(const struct intel_bios_encoder_data *devdata)
>>>+{
>>>+ return devdata->child.device_type & DEVICE_TYPE_TMDS_DVI_SIGNALING;
>>>+}
>>>+
>>>+static bool
>>>+intel_bios_encoder_supports_hdmi(const struct intel_bios_encoder_data *devdata)
>>>+{
>>>+ return intel_bios_encoder_supports_dvi(devdata) &&
>>>+ (devdata->child.device_type & DEVICE_TYPE_NOT_HDMI_OUTPUT) == 0;
>>>+}
>>>+
>>>+static bool
>>>+intel_bios_encoder_supports_dp(const struct intel_bios_encoder_data *devdata)
>>>+{
>>>+ return devdata->child.device_type & DEVICE_TYPE_DISPLAYPORT_OUTPUT;
>>>+}
>>>+
>>>+static bool
>>>+intel_bios_encoder_supports_edp(const struct intel_bios_encoder_data *devdata)
>>>+{
>>>+ return intel_bios_encoder_supports_dp(devdata) &&
>>>+ devdata->child.device_type & DEVICE_TYPE_INTERNAL_CONNECTOR;
>>>+}
>>>+
>>> static void parse_ddi_port(struct drm_i915_private *i915,
>>> struct intel_bios_encoder_data *devdata)
>>> {
>>>@@ -1782,19 +1830,13 @@ static void parse_ddi_port(struct drm_i915_private *i915,
>>> return;
>>> }
>>>
>>>- is_dvi = child->device_type & DEVICE_TYPE_TMDS_DVI_SIGNALING;
>>>- is_dp = child->device_type & DEVICE_TYPE_DISPLAYPORT_OUTPUT;
>>>- is_crt = child->device_type & DEVICE_TYPE_ANALOG_OUTPUT;
>>>- is_hdmi = is_dvi && (child->device_type & DEVICE_TYPE_NOT_HDMI_OUTPUT) == 0;
>>>- is_edp = is_dp && (child->device_type & DEVICE_TYPE_INTERNAL_CONNECTOR);
>>>+ sanitize_device_type(devdata, port);
>>>
>>>- if (port == PORT_A && is_dvi && INTEL_GEN(i915) < 12) {
>>>- drm_dbg_kms(&i915->drm,
>>>- "VBT claims port A supports DVI%s, ignoring\n",
>>>- is_hdmi ? "/HDMI" : "");
>>>- is_dvi = false;
>>>- is_hdmi = false;
>>>- }
>>>+ is_dvi = intel_bios_encoder_supports_dvi(devdata);
>>>+ is_dp = intel_bios_encoder_supports_dp(devdata);
>>>+ is_crt = child->device_type & DEVICE_TYPE_ANALOG_OUTPUT;
>>
>> any reason to leave this behind?
>
>Just logging, even though that doesn't match what we actually do in
>intel_ddi_crt_present(). I expect there to be further cleanup
>afterwards.
I mean: you added a intel_bios_encoder_supports_*() for everything else.
Why not for crt?
Lucas De Marchi
>
>BR,
>Jani.
>
>>
>> Lucas De Marchi
>>
>>>+ is_hdmi = intel_bios_encoder_supports_hdmi(devdata);
>>>+ is_edp = intel_bios_encoder_supports_edp(devdata);
>>>
>>> info->supports_dvi = is_dvi;
>>> info->supports_hdmi = is_hdmi;
>>>--
>>>2.20.1
>>>
>
>--
>Jani Nikula, Intel Open Source Graphics Center
>_______________________________________________
>Intel-gfx mailing list
>Intel-gfx@lists.freedesktop.org
>https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Intel-gfx] [PATCH 09/12] drm/i915/bios: save a higher level pointer in ddi_vbt_port_info[]
2021-02-17 17:03 ` [Intel-gfx] [PATCH 09/12] drm/i915/bios: save a higher level pointer in ddi_vbt_port_info[] Jani Nikula
@ 2021-03-15 17:36 ` Lucas De Marchi
0 siblings, 0 replies; 40+ messages in thread
From: Lucas De Marchi @ 2021-03-15 17:36 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
On Wed, Feb 17, 2021 at 07:03:39PM +0200, Jani Nikula wrote:
>We'll be needing the intel_bios_encoder_data pointer going forward, and
>it's just easier to store the higher level pointer in the
>ddi_vbt_port_info[] array.
>
>Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
>Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Lucas De Marchi
>---
> drivers/gpu/drm/i915/display/intel_bios.c | 28 +++++++++++------------
> drivers/gpu/drm/i915/display/intel_bios.h | 1 +
> drivers/gpu/drm/i915/i915_drv.h | 2 +-
> 3 files changed, 16 insertions(+), 15 deletions(-)
>
>diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
>index 739ef5d91907..47e9c609f82a 100644
>--- a/drivers/gpu/drm/i915/display/intel_bios.c
>+++ b/drivers/gpu/drm/i915/display/intel_bios.c
>@@ -1511,7 +1511,7 @@ static enum port get_port_by_ddc_pin(struct drm_i915_private *i915, u8 ddc_pin)
> for_each_port(port) {
> info = &i915->vbt.ddi_port_info[port];
>
>- if (info->child && ddc_pin == info->alternate_ddc_pin)
>+ if (info->devdata && ddc_pin == info->alternate_ddc_pin)
> return port;
> }
>
>@@ -1563,7 +1563,7 @@ static enum port get_port_by_aux_ch(struct drm_i915_private *i915, u8 aux_ch)
> for_each_port(port) {
> info = &i915->vbt.ddi_port_info[port];
>
>- if (info->child && aux_ch == info->alternate_aux_channel)
>+ if (info->devdata && aux_ch == info->alternate_aux_channel)
> return port;
> }
>
>@@ -1823,7 +1823,7 @@ static void parse_ddi_port(struct drm_i915_private *i915,
>
> info = &i915->vbt.ddi_port_info[port];
>
>- if (info->child) {
>+ if (info->devdata) {
> drm_dbg_kms(&i915->drm,
> "More than one child device for port %c in VBT, using the first.\n",
> port_name(port));
>@@ -1947,7 +1947,7 @@ static void parse_ddi_port(struct drm_i915_private *i915,
> port_name(port), info->dp_max_link_rate);
> }
>
>- info->child = child;
>+ info->devdata = devdata;
> }
>
> static void parse_ddi_ports(struct drm_i915_private *i915)
>@@ -2488,7 +2488,7 @@ bool intel_bios_is_port_present(struct drm_i915_private *i915, enum port port)
> const struct ddi_vbt_port_info *port_info =
> &i915->vbt.ddi_port_info[port];
>
>- return port_info->child;
>+ return port_info->devdata;
> }
>
> /* FIXME maybe deal with port A as well? */
>@@ -2735,13 +2735,13 @@ bool
> intel_bios_is_port_hpd_inverted(const struct drm_i915_private *i915,
> enum port port)
> {
>- const struct child_device_config *child =
>- i915->vbt.ddi_port_info[port].child;
>+ const struct intel_bios_encoder_data *devdata =
>+ i915->vbt.ddi_port_info[port].devdata;
>
> if (drm_WARN_ON_ONCE(&i915->drm, !IS_GEN9_LP(i915)))
> return false;
>
>- return child && child->hpd_invert;
>+ return devdata && devdata->child.hpd_invert;
> }
>
> /**
>@@ -2755,10 +2755,10 @@ bool
> intel_bios_is_lspcon_present(const struct drm_i915_private *i915,
> enum port port)
> {
>- const struct child_device_config *child =
>- i915->vbt.ddi_port_info[port].child;
>+ const struct intel_bios_encoder_data *devdata =
>+ i915->vbt.ddi_port_info[port].devdata;
>
>- return HAS_LSPCON(i915) && child && child->lspcon;
>+ return HAS_LSPCON(i915) && devdata && devdata->child.lspcon;
> }
>
> /**
>@@ -2772,10 +2772,10 @@ bool
> intel_bios_is_lane_reversal_needed(const struct drm_i915_private *i915,
> enum port port)
> {
>- const struct child_device_config *child =
>- i915->vbt.ddi_port_info[port].child;
>+ const struct intel_bios_encoder_data *devdata =
>+ i915->vbt.ddi_port_info[port].devdata;
>
>- return child && child->lane_reversal;
>+ return devdata && devdata->child.lane_reversal;
> }
>
> enum aux_ch intel_bios_port_aux_ch(struct drm_i915_private *i915,
>diff --git a/drivers/gpu/drm/i915/display/intel_bios.h b/drivers/gpu/drm/i915/display/intel_bios.h
>index f25190ecfe97..6591cf7758f2 100644
>--- a/drivers/gpu/drm/i915/display/intel_bios.h
>+++ b/drivers/gpu/drm/i915/display/intel_bios.h
>@@ -33,6 +33,7 @@
> #include <linux/types.h>
>
> struct drm_i915_private;
>+struct intel_bios_encoder_data;
> struct intel_crtc_state;
> struct intel_encoder;
> enum port;
>diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
>index 62be1465f52b..e2c5ba61b370 100644
>--- a/drivers/gpu/drm/i915/i915_drv.h
>+++ b/drivers/gpu/drm/i915/i915_drv.h
>@@ -584,7 +584,7 @@ i915_fence_timeout(const struct drm_i915_private *i915)
>
> struct ddi_vbt_port_info {
> /* Non-NULL if port present. */
>- const struct child_device_config *child;
>+ const struct intel_bios_encoder_data *devdata;
>
> int max_tmds_clock;
>
>--
>2.20.1
>
>_______________________________________________
>Intel-gfx mailing list
>Intel-gfx@lists.freedesktop.org
>https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Intel-gfx] [PATCH 10/12] drm/i915/bios: start using the intel_bios_encoder_data directly
2021-02-17 17:03 ` [Intel-gfx] [PATCH 10/12] drm/i915/bios: start using the intel_bios_encoder_data directly Jani Nikula
@ 2021-03-15 17:41 ` Lucas De Marchi
0 siblings, 0 replies; 40+ messages in thread
From: Lucas De Marchi @ 2021-03-15 17:41 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
On Wed, Feb 17, 2021 at 07:03:40PM +0200, Jani Nikula wrote:
>Start using struct intel_bios_encoder_data directly. We'll start
>sanitizing the child device data directly as well, instead of the cached
>data in ddi_port_info[]. The one downside here is having to store a
>non-const pointer back to intel_bios_encoder_data.
>
>Eventually we'll be able to have a direct pointer from encoder to
>intel_bios_encoder_data, removing the need to go through the
>ddi_port_info[] array altogether. And we'll be able to remove the cached
>data in ddi_port_info[].
>
>Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
>Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Lucas De Marchi
>---
> drivers/gpu/drm/i915/display/intel_bios.c | 37 +++++++++--------------
> drivers/gpu/drm/i915/display/intel_bios.h | 10 ++++--
> drivers/gpu/drm/i915/display/intel_ddi.c | 15 +++++++--
> drivers/gpu/drm/i915/i915_drv.h | 4 +--
> 4 files changed, 35 insertions(+), 31 deletions(-)
>
>diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
>index 47e9c609f82a..d26304ebc6b9 100644
>--- a/drivers/gpu/drm/i915/display/intel_bios.c
>+++ b/drivers/gpu/drm/i915/display/intel_bios.c
>@@ -1529,6 +1529,8 @@ static void sanitize_ddc_pin(struct drm_i915_private *i915,
>
> p = get_port_by_ddc_pin(i915, info->alternate_ddc_pin);
> if (p != PORT_NONE) {
>+ struct child_device_config *child;
>+
> drm_dbg_kms(&i915->drm,
> "port %c trying to use the same DDC pin (0x%x) as port %c, "
> "disabling port %c DVI/HDMI support\n",
>@@ -1548,9 +1550,11 @@ static void sanitize_ddc_pin(struct drm_i915_private *i915,
> * we must pick port E :(
> */
> info = &i915->vbt.ddi_port_info[p];
>+ child = &info->devdata->child;
>+
>+ child->device_type &= ~DEVICE_TYPE_TMDS_DVI_SIGNALING;
>+ child->device_type |= DEVICE_TYPE_NOT_HDMI_OUTPUT;
>
>- info->supports_dvi = false;
>- info->supports_hdmi = false;
> info->alternate_ddc_pin = 0;
> }
> }
>@@ -1783,20 +1787,20 @@ static void sanitize_device_type(struct intel_bios_encoder_data *devdata,
> devdata->child.device_type |= DEVICE_TYPE_NOT_HDMI_OUTPUT;
> }
>
>-static bool
>+bool
> intel_bios_encoder_supports_dvi(const struct intel_bios_encoder_data *devdata)
> {
> return devdata->child.device_type & DEVICE_TYPE_TMDS_DVI_SIGNALING;
> }
>
>-static bool
>+bool
> intel_bios_encoder_supports_hdmi(const struct intel_bios_encoder_data *devdata)
> {
> return intel_bios_encoder_supports_dvi(devdata) &&
> (devdata->child.device_type & DEVICE_TYPE_NOT_HDMI_OUTPUT) == 0;
> }
>
>-static bool
>+bool
> intel_bios_encoder_supports_dp(const struct intel_bios_encoder_data *devdata)
> {
> return devdata->child.device_type & DEVICE_TYPE_DISPLAYPORT_OUTPUT;
>@@ -1838,8 +1842,6 @@ static void parse_ddi_port(struct drm_i915_private *i915,
> is_hdmi = intel_bios_encoder_supports_hdmi(devdata);
> is_edp = intel_bios_encoder_supports_edp(devdata);
>
>- info->supports_dvi = is_dvi;
>- info->supports_hdmi = is_hdmi;
> info->supports_dp = is_dp;
> info->supports_edp = is_edp;
>
>@@ -2901,21 +2903,6 @@ int intel_bios_alternate_ddc_pin(struct intel_encoder *encoder)
> return i915->vbt.ddi_port_info[encoder->port].alternate_ddc_pin;
> }
>
>-bool intel_bios_port_supports_dvi(struct drm_i915_private *i915, enum port port)
>-{
>- return i915->vbt.ddi_port_info[port].supports_dvi;
>-}
>-
>-bool intel_bios_port_supports_hdmi(struct drm_i915_private *i915, enum port port)
>-{
>- return i915->vbt.ddi_port_info[port].supports_hdmi;
>-}
>-
>-bool intel_bios_port_supports_dp(struct drm_i915_private *i915, enum port port)
>-{
>- return i915->vbt.ddi_port_info[port].supports_dp;
>-}
>-
> bool intel_bios_port_supports_typec_usb(struct drm_i915_private *i915,
> enum port port)
> {
>@@ -2926,3 +2913,9 @@ bool intel_bios_port_supports_tbt(struct drm_i915_private *i915, enum port port)
> {
> return i915->vbt.ddi_port_info[port].supports_tbt;
> }
>+
>+const struct intel_bios_encoder_data *
>+intel_bios_encoder_data_lookup(struct drm_i915_private *i915, enum port port)
>+{
>+ return i915->vbt.ddi_port_info[port].devdata;
>+}
>diff --git a/drivers/gpu/drm/i915/display/intel_bios.h b/drivers/gpu/drm/i915/display/intel_bios.h
>index 6591cf7758f2..18b5c2976bd4 100644
>--- a/drivers/gpu/drm/i915/display/intel_bios.h
>+++ b/drivers/gpu/drm/i915/display/intel_bios.h
>@@ -254,10 +254,14 @@ int intel_bios_dp_boost_level(struct intel_encoder *encoder);
> int intel_bios_hdmi_boost_level(struct intel_encoder *encoder);
> int intel_bios_dp_max_link_rate(struct intel_encoder *encoder);
> int intel_bios_alternate_ddc_pin(struct intel_encoder *encoder);
>-bool intel_bios_port_supports_dvi(struct drm_i915_private *i915, enum port port);
>-bool intel_bios_port_supports_hdmi(struct drm_i915_private *i915, enum port port);
>-bool intel_bios_port_supports_dp(struct drm_i915_private *i915, enum port port);
> bool intel_bios_port_supports_typec_usb(struct drm_i915_private *i915, enum port port);
> bool intel_bios_port_supports_tbt(struct drm_i915_private *i915, enum port port);
>
>+const struct intel_bios_encoder_data *
>+intel_bios_encoder_data_lookup(struct drm_i915_private *i915, enum port port);
>+
>+bool intel_bios_encoder_supports_dvi(const struct intel_bios_encoder_data *devdata);
>+bool intel_bios_encoder_supports_hdmi(const struct intel_bios_encoder_data *devdata);
>+bool intel_bios_encoder_supports_dp(const struct intel_bios_encoder_data *devdata);
>+
> #endif /* _INTEL_BIOS_H_ */
>diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
>index eeae78097a20..1a2f7725f8ec 100644
>--- a/drivers/gpu/drm/i915/display/intel_ddi.c
>+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
>@@ -3973,6 +3973,7 @@ void intel_ddi_init(struct drm_i915_private *dev_priv, enum port port)
> {
> struct intel_digital_port *dig_port;
> struct intel_encoder *encoder;
>+ const struct intel_bios_encoder_data *devdata;
> bool init_hdmi, init_dp;
> enum phy phy = intel_port_to_phy(dev_priv, port);
>
>@@ -3988,9 +3989,17 @@ void intel_ddi_init(struct drm_i915_private *dev_priv, enum port port)
> return;
> }
>
>- init_hdmi = intel_bios_port_supports_dvi(dev_priv, port) ||
>- intel_bios_port_supports_hdmi(dev_priv, port);
>- init_dp = intel_bios_port_supports_dp(dev_priv, port);
>+ devdata = intel_bios_encoder_data_lookup(dev_priv, port);
>+ if (!devdata) {
>+ drm_dbg_kms(&dev_priv->drm,
>+ "VBT says port %c is not present\n",
>+ port_name(port));
>+ return;
>+ }
>+
>+ init_hdmi = intel_bios_encoder_supports_dvi(devdata) ||
>+ intel_bios_encoder_supports_hdmi(devdata);
>+ init_dp = intel_bios_encoder_supports_dp(devdata);
>
> if (intel_bios_is_lspcon_present(dev_priv, port)) {
> /*
>diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
>index e2c5ba61b370..57712a617839 100644
>--- a/drivers/gpu/drm/i915/i915_drv.h
>+++ b/drivers/gpu/drm/i915/i915_drv.h
>@@ -584,7 +584,7 @@ i915_fence_timeout(const struct drm_i915_private *i915)
>
> struct ddi_vbt_port_info {
> /* Non-NULL if port present. */
>- const struct intel_bios_encoder_data *devdata;
>+ struct intel_bios_encoder_data *devdata;
>
> int max_tmds_clock;
>
>@@ -592,8 +592,6 @@ struct ddi_vbt_port_info {
> u8 hdmi_level_shift;
> u8 hdmi_level_shift_set:1;
>
>- u8 supports_dvi:1;
>- u8 supports_hdmi:1;
> u8 supports_dp:1;
> u8 supports_edp:1;
> u8 supports_typec_usb:1;
>--
>2.20.1
>
>_______________________________________________
>Intel-gfx mailing list
>Intel-gfx@lists.freedesktop.org
>https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Intel-gfx] [PATCH 11/12] drm/i915/bios: start using intel_bios_encoder_data for Type-C USB and TBT
2021-02-17 17:03 ` [Intel-gfx] [PATCH 11/12] drm/i915/bios: start using intel_bios_encoder_data for Type-C USB and TBT Jani Nikula
@ 2021-03-15 17:49 ` Lucas De Marchi
0 siblings, 0 replies; 40+ messages in thread
From: Lucas De Marchi @ 2021-03-15 17:49 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
On Wed, Feb 17, 2021 at 07:03:41PM +0200, Jani Nikula wrote:
>Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
>Signed-off-by: Jani Nikula <jani.nikula@intel.com>
minor: the commit message could add something saying we are phasing out
ddi_port_info and everyone should use the helper functions that are
using the raw data from vbt, replaced with a fake one when that is
missing.
This is missing the removal of supports_typec_usb and supports_tbt from
ddi_vbt_port_info.
with that,
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Lucas De Marchi
>---
> drivers/gpu/drm/i915/display/intel_bios.c | 20 ++++++++------------
> drivers/gpu/drm/i915/display/intel_bios.h | 2 ++
> drivers/gpu/drm/i915/display/intel_ddi.c | 4 ++--
> 3 files changed, 12 insertions(+), 14 deletions(-)
>
>diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
>index d26304ebc6b9..13a38cd01692 100644
>--- a/drivers/gpu/drm/i915/display/intel_bios.c
>+++ b/drivers/gpu/drm/i915/display/intel_bios.c
>@@ -1818,7 +1818,7 @@ static void parse_ddi_port(struct drm_i915_private *i915,
> {
> const struct child_device_config *child = &devdata->child;
> struct ddi_vbt_port_info *info;
>- bool is_dvi, is_hdmi, is_dp, is_edp, is_crt;
>+ bool is_dvi, is_hdmi, is_dp, is_edp, is_crt, supports_typec_usb, supports_tbt;
> enum port port;
>
> port = dvo_port_to_port(i915, child->dvo_port);
>@@ -1845,17 +1845,14 @@ static void parse_ddi_port(struct drm_i915_private *i915,
> info->supports_dp = is_dp;
> info->supports_edp = is_edp;
>
>- if (i915->vbt.version >= 195)
>- info->supports_typec_usb = child->dp_usb_type_c;
>-
>- if (i915->vbt.version >= 209)
>- info->supports_tbt = child->tbt;
>+ supports_typec_usb = intel_bios_encoder_supports_typec_usb(devdata);
>+ supports_tbt = intel_bios_encoder_supports_tbt(devdata);
>
> drm_dbg_kms(&i915->drm,
> "Port %c VBT info: CRT:%d DVI:%d HDMI:%d DP:%d eDP:%d LSPCON:%d USB-Type-C:%d TBT:%d DSC:%d\n",
> port_name(port), is_crt, is_dvi, is_hdmi, is_dp, is_edp,
> HAS_LSPCON(i915) && child->lspcon,
>- info->supports_typec_usb, info->supports_tbt,
>+ supports_typec_usb, supports_tbt,
> devdata->dsc != NULL);
>
> if (is_dvi) {
>@@ -2903,15 +2900,14 @@ int intel_bios_alternate_ddc_pin(struct intel_encoder *encoder)
> return i915->vbt.ddi_port_info[encoder->port].alternate_ddc_pin;
> }
>
>-bool intel_bios_port_supports_typec_usb(struct drm_i915_private *i915,
>- enum port port)
>+bool intel_bios_encoder_supports_typec_usb(const struct intel_bios_encoder_data *devdata)
> {
>- return i915->vbt.ddi_port_info[port].supports_typec_usb;
>+ return devdata->i915->vbt.version >= 195 && devdata->child.dp_usb_type_c;
> }
>
>-bool intel_bios_port_supports_tbt(struct drm_i915_private *i915, enum port port)
>+bool intel_bios_encoder_supports_tbt(const struct intel_bios_encoder_data *devdata)
> {
>- return i915->vbt.ddi_port_info[port].supports_tbt;
>+ return devdata->i915->vbt.version >= 209 && devdata->child.tbt;
> }
>
> const struct intel_bios_encoder_data *
>diff --git a/drivers/gpu/drm/i915/display/intel_bios.h b/drivers/gpu/drm/i915/display/intel_bios.h
>index 18b5c2976bd4..f82cef29ab5a 100644
>--- a/drivers/gpu/drm/i915/display/intel_bios.h
>+++ b/drivers/gpu/drm/i915/display/intel_bios.h
>@@ -263,5 +263,7 @@ intel_bios_encoder_data_lookup(struct drm_i915_private *i915, enum port port);
> bool intel_bios_encoder_supports_dvi(const struct intel_bios_encoder_data *devdata);
> bool intel_bios_encoder_supports_hdmi(const struct intel_bios_encoder_data *devdata);
> bool intel_bios_encoder_supports_dp(const struct intel_bios_encoder_data *devdata);
>+bool intel_bios_encoder_supports_typec_usb(const struct intel_bios_encoder_data *devdata);
>+bool intel_bios_encoder_supports_tbt(const struct intel_bios_encoder_data *devdata);
>
> #endif /* _INTEL_BIOS_H_ */
>diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
>index 1a2f7725f8ec..0bf783f67a59 100644
>--- a/drivers/gpu/drm/i915/display/intel_ddi.c
>+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
>@@ -4150,8 +4150,8 @@ void intel_ddi_init(struct drm_i915_private *dev_priv, enum port port)
>
> if (intel_phy_is_tc(dev_priv, phy)) {
> bool is_legacy =
>- !intel_bios_port_supports_typec_usb(dev_priv, port) &&
>- !intel_bios_port_supports_tbt(dev_priv, port);
>+ !intel_bios_encoder_supports_typec_usb(devdata) &&
>+ !intel_bios_encoder_supports_tbt(devdata);
>
> intel_tc_port_init(dig_port, is_legacy);
>
>--
>2.20.1
>
>_______________________________________________
>Intel-gfx mailing list
>Intel-gfx@lists.freedesktop.org
>https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Intel-gfx] [PATCH 12/12] drm/i915/bios: add intel_bios_encoder_data to encoder, use for iboost
2021-02-17 17:03 ` [Intel-gfx] [PATCH 12/12] drm/i915/bios: add intel_bios_encoder_data to encoder, use for iboost Jani Nikula
@ 2021-03-15 17:52 ` Lucas De Marchi
0 siblings, 0 replies; 40+ messages in thread
From: Lucas De Marchi @ 2021-03-15 17:52 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
On Wed, Feb 17, 2021 at 07:03:42PM +0200, Jani Nikula wrote:
>Add intel_bios_encoder_data pointer to encoder, and use it for hdmi and
>dp iboost. For starters, we only set the encoder->devdata for DDI
>encoders, i.e. we can only use it for data that is used by DDI encoders.
>
>Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
>Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Lucas De Marchi
>---
> drivers/gpu/drm/i915/display/intel_bios.c | 30 +++++++++++--------
> drivers/gpu/drm/i915/display/intel_bios.h | 4 +--
> drivers/gpu/drm/i915/display/intel_ddi.c | 9 +++---
> .../drm/i915/display/intel_display_types.h | 3 ++
> drivers/gpu/drm/i915/i915_drv.h | 2 --
> 5 files changed, 27 insertions(+), 21 deletions(-)
>
>diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
>index 13a38cd01692..e1fcaf567222 100644
>--- a/drivers/gpu/drm/i915/display/intel_bios.c
>+++ b/drivers/gpu/drm/i915/display/intel_bios.c
>@@ -1819,6 +1819,7 @@ static void parse_ddi_port(struct drm_i915_private *i915,
> const struct child_device_config *child = &devdata->child;
> struct ddi_vbt_port_info *info;
> bool is_dvi, is_hdmi, is_dp, is_edp, is_crt, supports_typec_usb, supports_tbt;
>+ int dp_boost_level, hdmi_boost_level;
> enum port port;
>
> port = dvo_port_to_port(i915, child->dvo_port);
>@@ -1912,17 +1913,18 @@ static void parse_ddi_port(struct drm_i915_private *i915,
> info->max_tmds_clock = max_tmds_clock;
> }
>
>- /* Parse the I_boost config for SKL and above */
>- if (i915->vbt.version >= 196 && child->iboost) {
>- info->dp_boost_level = translate_iboost(child->dp_iboost_level);
>+ /* I_boost config for SKL and above */
>+ dp_boost_level = intel_bios_encoder_dp_boost_level(devdata);
>+ if (dp_boost_level)
> drm_dbg_kms(&i915->drm,
> "Port %c VBT (e)DP boost level: %d\n",
>- port_name(port), info->dp_boost_level);
>- info->hdmi_boost_level = translate_iboost(child->hdmi_iboost_level);
>+ port_name(port), dp_boost_level);
>+
>+ hdmi_boost_level = intel_bios_encoder_hdmi_boost_level(devdata);
>+ if (hdmi_boost_level)
> drm_dbg_kms(&i915->drm,
> "Port %c VBT HDMI boost level: %d\n",
>- port_name(port), info->hdmi_boost_level);
>- }
>+ port_name(port), hdmi_boost_level);
>
> /* DP max link rate for CNL+ */
> if (i915->vbt.version >= 216) {
>@@ -2872,18 +2874,20 @@ int intel_bios_hdmi_level_shift(struct intel_encoder *encoder)
> return info->hdmi_level_shift_set ? info->hdmi_level_shift : -1;
> }
>
>-int intel_bios_dp_boost_level(struct intel_encoder *encoder)
>+int intel_bios_encoder_dp_boost_level(const struct intel_bios_encoder_data *devdata)
> {
>- struct drm_i915_private *i915 = to_i915(encoder->base.dev);
>+ if (!devdata || devdata->i915->vbt.version < 196 || !devdata->child.iboost)
>+ return 0;
>
>- return i915->vbt.ddi_port_info[encoder->port].dp_boost_level;
>+ return translate_iboost(devdata->child.dp_iboost_level);
> }
>
>-int intel_bios_hdmi_boost_level(struct intel_encoder *encoder)
>+int intel_bios_encoder_hdmi_boost_level(const struct intel_bios_encoder_data *devdata)
> {
>- struct drm_i915_private *i915 = to_i915(encoder->base.dev);
>+ if (!devdata || devdata->i915->vbt.version < 196 || !devdata->child.iboost)
>+ return 0;
>
>- return i915->vbt.ddi_port_info[encoder->port].hdmi_boost_level;
>+ return translate_iboost(devdata->child.hdmi_iboost_level);
> }
>
> int intel_bios_dp_max_link_rate(struct intel_encoder *encoder)
>diff --git a/drivers/gpu/drm/i915/display/intel_bios.h b/drivers/gpu/drm/i915/display/intel_bios.h
>index f82cef29ab5a..4709c4d29805 100644
>--- a/drivers/gpu/drm/i915/display/intel_bios.h
>+++ b/drivers/gpu/drm/i915/display/intel_bios.h
>@@ -250,8 +250,6 @@ bool intel_bios_get_dsc_params(struct intel_encoder *encoder,
> int dsc_max_bpc);
> int intel_bios_max_tmds_clock(struct intel_encoder *encoder);
> int intel_bios_hdmi_level_shift(struct intel_encoder *encoder);
>-int intel_bios_dp_boost_level(struct intel_encoder *encoder);
>-int intel_bios_hdmi_boost_level(struct intel_encoder *encoder);
> int intel_bios_dp_max_link_rate(struct intel_encoder *encoder);
> int intel_bios_alternate_ddc_pin(struct intel_encoder *encoder);
> bool intel_bios_port_supports_typec_usb(struct drm_i915_private *i915, enum port port);
>@@ -265,5 +263,7 @@ bool intel_bios_encoder_supports_hdmi(const struct intel_bios_encoder_data *devd
> bool intel_bios_encoder_supports_dp(const struct intel_bios_encoder_data *devdata);
> bool intel_bios_encoder_supports_typec_usb(const struct intel_bios_encoder_data *devdata);
> bool intel_bios_encoder_supports_tbt(const struct intel_bios_encoder_data *devdata);
>+int intel_bios_encoder_dp_boost_level(const struct intel_bios_encoder_data *devdata);
>+int intel_bios_encoder_hdmi_boost_level(const struct intel_bios_encoder_data *devdata);
>
> #endif /* _INTEL_BIOS_H_ */
>diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
>index 0bf783f67a59..92aad11cc0e7 100644
>--- a/drivers/gpu/drm/i915/display/intel_ddi.c
>+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
>@@ -114,7 +114,7 @@ void intel_prepare_dp_ddi_buffers(struct intel_encoder *encoder,
> &n_entries);
>
> /* If we're boosting the current, set bit 31 of trans1 */
>- if (IS_GEN9_BC(dev_priv) && intel_bios_dp_boost_level(encoder))
>+ if (IS_GEN9_BC(dev_priv) && intel_bios_encoder_dp_boost_level(encoder->devdata))
> iboost_bit = DDI_BUF_BALANCE_LEG_ENABLE;
>
> for (i = 0; i < n_entries; i++) {
>@@ -147,7 +147,7 @@ static void intel_prepare_hdmi_ddi_buffers(struct intel_encoder *encoder,
> level = n_entries - 1;
>
> /* If we're boosting the current, set bit 31 of trans1 */
>- if (IS_GEN9_BC(dev_priv) && intel_bios_hdmi_boost_level(encoder))
>+ if (IS_GEN9_BC(dev_priv) && intel_bios_encoder_hdmi_boost_level(encoder->devdata))
> iboost_bit = DDI_BUF_BALANCE_LEG_ENABLE;
>
> /* Entry 9 is for HDMI: */
>@@ -925,9 +925,9 @@ static void skl_ddi_set_iboost(struct intel_encoder *encoder,
> u8 iboost;
>
> if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI))
>- iboost = intel_bios_hdmi_boost_level(encoder);
>+ iboost = intel_bios_encoder_hdmi_boost_level(encoder->devdata);
> else
>- iboost = intel_bios_dp_boost_level(encoder);
>+ iboost = intel_bios_encoder_dp_boost_level(encoder->devdata);
>
> if (iboost == 0) {
> const struct ddi_buf_trans *ddi_translations;
>@@ -4025,6 +4025,7 @@ void intel_ddi_init(struct drm_i915_private *dev_priv, enum port port)
> return;
>
> encoder = &dig_port->base;
>+ encoder->devdata = devdata;
>
> if (INTEL_GEN(dev_priv) >= 12) {
> enum tc_port tc_port = intel_port_to_tc(dev_priv, port);
>diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
>index 07b7f5eae587..91642b25ebcc 100644
>--- a/drivers/gpu/drm/i915/display/intel_display_types.h
>+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
>@@ -230,6 +230,9 @@ struct intel_encoder {
> enum intel_display_power_domain power_domain;
> /* for communication with audio component; protected by av_mutex */
> const struct drm_connector *audio_connector;
>+
>+ /* VBT information for this encoder (may be NULL for older platforms) */
>+ const struct intel_bios_encoder_data *devdata;
> };
>
> struct intel_panel_bl_funcs {
>diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
>index 57712a617839..03a6d9738fee 100644
>--- a/drivers/gpu/drm/i915/i915_drv.h
>+++ b/drivers/gpu/drm/i915/i915_drv.h
>@@ -600,8 +600,6 @@ struct ddi_vbt_port_info {
> u8 alternate_aux_channel;
> u8 alternate_ddc_pin;
>
>- u8 dp_boost_level;
>- u8 hdmi_boost_level;
> int dp_max_link_rate; /* 0 for not limited by VBT */
> };
>
>--
>2.20.1
>
>_______________________________________________
>Intel-gfx mailing list
>Intel-gfx@lists.freedesktop.org
>https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Intel-gfx] [PATCH 08/12] drm/i915/vbt: add helper functions to check output support
2021-03-15 17:32 ` Lucas De Marchi
@ 2021-03-16 9:18 ` Jani Nikula
0 siblings, 0 replies; 40+ messages in thread
From: Jani Nikula @ 2021-03-16 9:18 UTC (permalink / raw)
To: Lucas De Marchi; +Cc: intel-gfx
On Mon, 15 Mar 2021, Lucas De Marchi <lucas.demarchi@intel.com> wrote:
> On Wed, Feb 17, 2021 at 09:55:53PM +0200, Jani Nikula wrote:
>>On Wed, 17 Feb 2021, Lucas De Marchi <lucas.demarchi@intel.com> wrote:
>>> On Wed, Feb 17, 2021 at 07:03:38PM +0200, Jani Nikula wrote:
>>>>These will be exposed to the rest of the driver and replace other
>>>>functions. Everything will operate on the child devices.
>>>>
>>>>Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>>>>Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
>>>>Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>>>>---
>>>> drivers/gpu/drm/i915/display/intel_bios.c | 66 ++++++++++++++++++-----
>>>> 1 file changed, 54 insertions(+), 12 deletions(-)
>>>>
>>>>diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
>>>>index 193772f42582..739ef5d91907 100644
>>>>--- a/drivers/gpu/drm/i915/display/intel_bios.c
>>>>+++ b/drivers/gpu/drm/i915/display/intel_bios.c
>>>>@@ -64,6 +64,7 @@ struct intel_bios_encoder_data {
>>>>
>>>> struct child_device_config child;
>>>> struct dsc_compression_parameters_entry *dsc;
>>>>+
>>>> struct list_head node;
>>>> };
>>>>
>>>>@@ -1761,6 +1762,53 @@ static enum port dvo_port_to_port(struct drm_i915_private *i915,
>>>> dvo_port);
>>>> }
>>>>
>>>>+static void sanitize_device_type(struct intel_bios_encoder_data *devdata,
>>>>+ enum port port)
>>>>+{
>>>>+ struct drm_i915_private *i915 = devdata->i915;
>>>>+ bool is_hdmi;
>>>>+
>>>>+ if (port != PORT_A || INTEL_GEN(i915) >= 12)
>>>>+ return;
>>>>+
>>>>+ if (!(devdata->child.device_type & DEVICE_TYPE_TMDS_DVI_SIGNALING))
>>>>+ return;
>>>>+
>>>>+ is_hdmi = !(devdata->child.device_type & DEVICE_TYPE_NOT_HDMI_OUTPUT);
>>>>+
>>>>+ drm_dbg_kms(&i915->drm, "VBT claims port A supports DVI%s, ignoring\n",
>>>>+ is_hdmi ? "/HDMI" : "");
>>>>+
>>>>+ devdata->child.device_type &= ~DEVICE_TYPE_TMDS_DVI_SIGNALING;
>>>>+ devdata->child.device_type |= DEVICE_TYPE_NOT_HDMI_OUTPUT;
>>>>+}
>>>>+
>>>>+static bool
>>>>+intel_bios_encoder_supports_dvi(const struct intel_bios_encoder_data *devdata)
>>>>+{
>>>>+ return devdata->child.device_type & DEVICE_TYPE_TMDS_DVI_SIGNALING;
>>>>+}
>>>>+
>>>>+static bool
>>>>+intel_bios_encoder_supports_hdmi(const struct intel_bios_encoder_data *devdata)
>>>>+{
>>>>+ return intel_bios_encoder_supports_dvi(devdata) &&
>>>>+ (devdata->child.device_type & DEVICE_TYPE_NOT_HDMI_OUTPUT) == 0;
>>>>+}
>>>>+
>>>>+static bool
>>>>+intel_bios_encoder_supports_dp(const struct intel_bios_encoder_data *devdata)
>>>>+{
>>>>+ return devdata->child.device_type & DEVICE_TYPE_DISPLAYPORT_OUTPUT;
>>>>+}
>>>>+
>>>>+static bool
>>>>+intel_bios_encoder_supports_edp(const struct intel_bios_encoder_data *devdata)
>>>>+{
>>>>+ return intel_bios_encoder_supports_dp(devdata) &&
>>>>+ devdata->child.device_type & DEVICE_TYPE_INTERNAL_CONNECTOR;
>>>>+}
>>>>+
>>>> static void parse_ddi_port(struct drm_i915_private *i915,
>>>> struct intel_bios_encoder_data *devdata)
>>>> {
>>>>@@ -1782,19 +1830,13 @@ static void parse_ddi_port(struct drm_i915_private *i915,
>>>> return;
>>>> }
>>>>
>>>>- is_dvi = child->device_type & DEVICE_TYPE_TMDS_DVI_SIGNALING;
>>>>- is_dp = child->device_type & DEVICE_TYPE_DISPLAYPORT_OUTPUT;
>>>>- is_crt = child->device_type & DEVICE_TYPE_ANALOG_OUTPUT;
>>>>- is_hdmi = is_dvi && (child->device_type & DEVICE_TYPE_NOT_HDMI_OUTPUT) == 0;
>>>>- is_edp = is_dp && (child->device_type & DEVICE_TYPE_INTERNAL_CONNECTOR);
>>>>+ sanitize_device_type(devdata, port);
>>>>
>>>>- if (port == PORT_A && is_dvi && INTEL_GEN(i915) < 12) {
>>>>- drm_dbg_kms(&i915->drm,
>>>>- "VBT claims port A supports DVI%s, ignoring\n",
>>>>- is_hdmi ? "/HDMI" : "");
>>>>- is_dvi = false;
>>>>- is_hdmi = false;
>>>>- }
>>>>+ is_dvi = intel_bios_encoder_supports_dvi(devdata);
>>>>+ is_dp = intel_bios_encoder_supports_dp(devdata);
>>>>+ is_crt = child->device_type & DEVICE_TYPE_ANALOG_OUTPUT;
>>>
>>> any reason to leave this behind?
>>
>>Just logging, even though that doesn't match what we actually do in
>>intel_ddi_crt_present(). I expect there to be further cleanup
>>afterwards.
>
> I mean: you added a intel_bios_encoder_supports_*() for everything else.
> Why not for crt?
I've added it for everything that needs to be made non-static and
available to the rest of the driver. I can add it for completeness if
you like.
BR,
Jani.
>
> Lucas De Marchi
>
>>
>>BR,
>>Jani.
>>
>>>
>>> Lucas De Marchi
>>>
>>>>+ is_hdmi = intel_bios_encoder_supports_hdmi(devdata);
>>>>+ is_edp = intel_bios_encoder_supports_edp(devdata);
>>>>
>>>> info->supports_dvi = is_dvi;
>>>> info->supports_hdmi = is_hdmi;
>>>>--
>>>>2.20.1
>>>>
>>
>>--
>>Jani Nikula, Intel Open Source Graphics Center
>>_______________________________________________
>>Intel-gfx mailing list
>>Intel-gfx@lists.freedesktop.org
>>https://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Jani Nikula, Intel Open Source Graphics Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 40+ messages in thread
end of thread, other threads:[~2021-03-16 9:18 UTC | newest]
Thread overview: 40+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-17 17:03 [Intel-gfx] [PATCH 00/12] drm/i915/bios: vbt child device rework Jani Nikula
2021-02-17 17:03 ` [Intel-gfx] [PATCH 01/12] drm/i915/bios: mass convert dev_priv to i915 Jani Nikula
2021-02-22 18:14 ` Ville Syrjälä
2021-02-17 17:03 ` [Intel-gfx] [PATCH 02/12] drm/i915/bios: store bdb version in i915 Jani Nikula
2021-02-22 18:14 ` Ville Syrjälä
2021-02-17 17:03 ` [Intel-gfx] [PATCH 03/12] drm/i915/bios: limit default outputs by platform on missing VBT Jani Nikula
2021-02-22 18:16 ` Ville Syrjälä
2021-02-17 17:03 ` [Intel-gfx] [PATCH 04/12] drm/i915/bios: limit default outputs to ports A through F Jani Nikula
2021-02-17 17:23 ` Lucas De Marchi
2021-02-17 17:28 ` Lucas De Marchi
2021-02-17 19:49 ` Jani Nikula
2021-02-17 19:58 ` Lucas De Marchi
2021-02-23 13:34 ` Jani Nikula
2021-02-24 0:34 ` Lucas De Marchi
2021-02-17 17:03 ` [Intel-gfx] [PATCH 05/12] drm/i915/bios: create fake child devices on missing VBT Jani Nikula
2021-03-09 0:51 ` Lucas De Marchi
2021-02-17 17:03 ` [Intel-gfx] [PATCH 06/12] drm/i915/bios: rename display_device_data to intel_bios_encoder_data Jani Nikula
2021-02-17 17:44 ` Lucas De Marchi
2021-02-17 19:52 ` Jani Nikula
2021-02-23 12:50 ` Jani Nikula
2021-02-24 0:37 ` Lucas De Marchi
2021-02-17 17:03 ` [Intel-gfx] [PATCH 07/12] drm/i915/bios: add i915 backpointer " Jani Nikula
2021-02-17 17:03 ` [Intel-gfx] [PATCH 08/12] drm/i915/vbt: add helper functions to check output support Jani Nikula
2021-02-17 17:46 ` Lucas De Marchi
2021-02-17 19:55 ` Jani Nikula
2021-03-15 17:32 ` Lucas De Marchi
2021-03-16 9:18 ` Jani Nikula
2021-02-17 17:03 ` [Intel-gfx] [PATCH 09/12] drm/i915/bios: save a higher level pointer in ddi_vbt_port_info[] Jani Nikula
2021-03-15 17:36 ` Lucas De Marchi
2021-02-17 17:03 ` [Intel-gfx] [PATCH 10/12] drm/i915/bios: start using the intel_bios_encoder_data directly Jani Nikula
2021-03-15 17:41 ` Lucas De Marchi
2021-02-17 17:03 ` [Intel-gfx] [PATCH 11/12] drm/i915/bios: start using intel_bios_encoder_data for Type-C USB and TBT Jani Nikula
2021-03-15 17:49 ` Lucas De Marchi
2021-02-17 17:03 ` [Intel-gfx] [PATCH 12/12] drm/i915/bios: add intel_bios_encoder_data to encoder, use for iboost Jani Nikula
2021-03-15 17:52 ` Lucas De Marchi
2021-02-17 17:20 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for drm/i915/bios: vbt child device rework Patchwork
2021-02-17 17:49 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2021-02-17 17:54 ` [Intel-gfx] [PATCH 00/12] " Lucas De Marchi
2021-02-17 19:57 ` Jani Nikula
2021-02-17 20:52 ` [Intel-gfx] ✓ Fi.CI.IGT: success for " Patchwork
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.