* [PATCH 0/4] drm/i915: struct intel_display conversions
@ 2024-07-31 16:44 Jani Nikula
2024-07-31 16:44 ` [PATCH 1/4] drm/i915/acpi: convert to struct intel_display Jani Nikula
` (5 more replies)
0 siblings, 6 replies; 12+ messages in thread
From: Jani Nikula @ 2024-07-31 16:44 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: jani.nikula
Convert some display files to struct intel_display. Some parts are
scripted, but my cocci is not quite there yet to change interfaces, so a
lot of this is still manual.q
Some stragglers are left behind, but struct intel_display is preferred
and i915 pointers are derived locally as needed.
BR,
Jani.
Jani Nikula (4):
drm/i915/acpi: convert to struct intel_display
drm/i915/opregion: unify intel_encoder/intel_connector naming
drm/i915/opregion: convert to struct intel_display
drm/i915/bios: convert to struct intel_display
drivers/gpu/drm/i915/display/g4x_dp.c | 3 +-
drivers/gpu/drm/i915/display/g4x_hdmi.c | 3 +-
drivers/gpu/drm/i915/display/icl_dsi.c | 3 +-
drivers/gpu/drm/i915/display/intel_acpi.c | 17 +-
drivers/gpu/drm/i915/display/intel_acpi.h | 18 +-
drivers/gpu/drm/i915/display/intel_bios.c | 846 +++++++++---------
drivers/gpu/drm/i915/display/intel_bios.h | 28 +-
.../gpu/drm/i915/display/intel_combo_phy.c | 8 +-
drivers/gpu/drm/i915/display/intel_ddi.c | 3 +-
drivers/gpu/drm/i915/display/intel_ddi.h | 3 +-
drivers/gpu/drm/i915/display/intel_display.c | 9 +-
.../drm/i915/display/intel_display_debugfs.c | 7 +-
.../drm/i915/display/intel_display_device.c | 8 +-
.../drm/i915/display/intel_display_driver.c | 22 +-
.../gpu/drm/i915/display/intel_display_irq.c | 27 +-
drivers/gpu/drm/i915/display/intel_dp.c | 8 +-
drivers/gpu/drm/i915/display/intel_lvds.c | 5 +-
drivers/gpu/drm/i915/display/intel_opregion.c | 320 +++----
drivers/gpu/drm/i915/display/intel_opregion.h | 58 +-
drivers/gpu/drm/i915/display/intel_sdvo.c | 3 +-
drivers/gpu/drm/i915/display/intel_tv.c | 3 +-
drivers/gpu/drm/i915/display/vlv_dsi.c | 5 +-
drivers/gpu/drm/i915/i915_driver.c | 22 +-
drivers/gpu/drm/xe/display/xe_display.c | 19 +-
24 files changed, 763 insertions(+), 685 deletions(-)
--
2.39.2
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 1/4] drm/i915/acpi: convert to struct intel_display
2024-07-31 16:44 [PATCH 0/4] drm/i915: struct intel_display conversions Jani Nikula
@ 2024-07-31 16:44 ` Jani Nikula
2024-08-06 13:51 ` Imre Deak
2024-07-31 16:44 ` [PATCH 2/4] drm/i915/opregion: unify intel_encoder/intel_connector naming Jani Nikula
` (4 subsequent siblings)
5 siblings, 1 reply; 12+ messages in thread
From: Jani Nikula @ 2024-07-31 16:44 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: jani.nikula
Going forward, struct intel_display shall replace struct
drm_i915_private as the main display device data pointer type. Convert
intel_acpi.[ch] to struct intel_display.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/display/intel_acpi.c | 17 ++++++++---------
drivers/gpu/drm/i915/display/intel_acpi.h | 18 +++++++++---------
.../drm/i915/display/intel_display_driver.c | 8 +++++---
drivers/gpu/drm/i915/display/intel_opregion.c | 10 ++++++----
4 files changed, 28 insertions(+), 25 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_acpi.c b/drivers/gpu/drm/i915/display/intel_acpi.c
index 0aa3999374e2..c3b29a331d72 100644
--- a/drivers/gpu/drm/i915/display/intel_acpi.c
+++ b/drivers/gpu/drm/i915/display/intel_acpi.c
@@ -183,9 +183,9 @@ void intel_unregister_dsm_handler(void)
{
}
-void intel_dsm_get_bios_data_funcs_supported(struct drm_i915_private *i915)
+void intel_dsm_get_bios_data_funcs_supported(struct intel_display *display)
{
- struct pci_dev *pdev = to_pci_dev(i915->drm.dev);
+ struct pci_dev *pdev = to_pci_dev(display->drm->dev);
acpi_handle dhandle;
union acpi_object *obj;
@@ -263,15 +263,14 @@ static u32 acpi_display_type(struct intel_connector *connector)
return display_type;
}
-void intel_acpi_device_id_update(struct drm_i915_private *dev_priv)
+void intel_acpi_device_id_update(struct intel_display *display)
{
- struct drm_device *drm_dev = &dev_priv->drm;
struct intel_connector *connector;
struct drm_connector_list_iter conn_iter;
u8 display_index[16] = {};
/* Populate the ACPI IDs for all connectors for a given drm_device */
- drm_connector_list_iter_begin(drm_dev, &conn_iter);
+ drm_connector_list_iter_begin(display->drm, &conn_iter);
for_each_intel_connector_iter(connector, &conn_iter) {
u32 device_id, type;
@@ -288,10 +287,10 @@ void intel_acpi_device_id_update(struct drm_i915_private *dev_priv)
}
/* NOTE: The connector order must be final before this is called. */
-void intel_acpi_assign_connector_fwnodes(struct drm_i915_private *i915)
+void intel_acpi_assign_connector_fwnodes(struct intel_display *display)
{
+ struct drm_device *drm_dev = display->drm;
struct drm_connector_list_iter conn_iter;
- struct drm_device *drm_dev = &i915->drm;
struct fwnode_handle *fwnode = NULL;
struct drm_connector *connector;
struct acpi_device *adev;
@@ -333,7 +332,7 @@ void intel_acpi_assign_connector_fwnodes(struct drm_i915_private *i915)
fwnode_handle_put(fwnode);
}
-void intel_acpi_video_register(struct drm_i915_private *i915)
+void intel_acpi_video_register(struct intel_display *display)
{
struct drm_connector_list_iter conn_iter;
struct drm_connector *connector;
@@ -347,7 +346,7 @@ void intel_acpi_video_register(struct drm_i915_private *i915)
* a native backlight later and acpi_video_register_backlight() should
* only be called after any native backlights have been registered.
*/
- drm_connector_list_iter_begin(&i915->drm, &conn_iter);
+ drm_connector_list_iter_begin(display->drm, &conn_iter);
drm_for_each_connector_iter(connector, &conn_iter) {
struct intel_panel *panel = &to_intel_connector(connector)->panel;
diff --git a/drivers/gpu/drm/i915/display/intel_acpi.h b/drivers/gpu/drm/i915/display/intel_acpi.h
index 6a0007452f95..788a63071661 100644
--- a/drivers/gpu/drm/i915/display/intel_acpi.h
+++ b/drivers/gpu/drm/i915/display/intel_acpi.h
@@ -6,26 +6,26 @@
#ifndef __INTEL_ACPI_H__
#define __INTEL_ACPI_H__
-struct drm_i915_private;
+struct intel_display;
#ifdef CONFIG_ACPI
void intel_register_dsm_handler(void);
void intel_unregister_dsm_handler(void);
-void intel_dsm_get_bios_data_funcs_supported(struct drm_i915_private *i915);
-void intel_acpi_device_id_update(struct drm_i915_private *i915);
-void intel_acpi_assign_connector_fwnodes(struct drm_i915_private *i915);
-void intel_acpi_video_register(struct drm_i915_private *i915);
+void intel_dsm_get_bios_data_funcs_supported(struct intel_display *display);
+void intel_acpi_device_id_update(struct intel_display *display);
+void intel_acpi_assign_connector_fwnodes(struct intel_display *display);
+void intel_acpi_video_register(struct intel_display *display);
#else
static inline void intel_register_dsm_handler(void) { return; }
static inline void intel_unregister_dsm_handler(void) { return; }
static inline
-void intel_dsm_get_bios_data_funcs_supported(struct drm_i915_private *i915) { return; }
+void intel_dsm_get_bios_data_funcs_supported(struct intel_display *display) { return; }
static inline
-void intel_acpi_device_id_update(struct drm_i915_private *i915) { return; }
+void intel_acpi_device_id_update(struct intel_display *display) { return; }
static inline
-void intel_acpi_assign_connector_fwnodes(struct drm_i915_private *i915) { return; }
+void intel_acpi_assign_connector_fwnodes(struct intel_display *display) { return; }
static inline
-void intel_acpi_video_register(struct drm_i915_private *i915) { return; }
+void intel_acpi_video_register(struct intel_display *display) { return; }
#endif /* CONFIG_ACPI */
#endif /* __INTEL_ACPI_H__ */
diff --git a/drivers/gpu/drm/i915/display/intel_display_driver.c b/drivers/gpu/drm/i915/display/intel_display_driver.c
index 13e206ec450f..392c10359a52 100644
--- a/drivers/gpu/drm/i915/display/intel_display_driver.c
+++ b/drivers/gpu/drm/i915/display/intel_display_driver.c
@@ -416,7 +416,8 @@ bool intel_display_driver_check_access(struct drm_i915_private *i915)
/* part #2: call after irq install, but before gem init */
int intel_display_driver_probe_nogem(struct drm_i915_private *i915)
{
- struct drm_device *dev = &i915->drm;
+ struct intel_display *display = &i915->display;
+ struct drm_device *dev = display->drm;
enum pipe pipe;
int ret;
@@ -466,7 +467,7 @@ int intel_display_driver_probe_nogem(struct drm_i915_private *i915)
drm_modeset_lock_all(dev);
intel_modeset_setup_hw_state(i915, dev->mode_config.acquire_ctx);
- intel_acpi_assign_connector_fwnodes(i915);
+ intel_acpi_assign_connector_fwnodes(display);
drm_modeset_unlock_all(dev);
intel_initial_plane_config(i915);
@@ -526,6 +527,7 @@ int intel_display_driver_probe(struct drm_i915_private *i915)
void intel_display_driver_register(struct drm_i915_private *i915)
{
+ struct intel_display *display = &i915->display;
struct drm_printer p = drm_dbg_printer(&i915->drm, DRM_UT_KMS,
"i915 display info:");
@@ -534,7 +536,7 @@ void intel_display_driver_register(struct drm_i915_private *i915)
/* Must be done after probing outputs */
intel_opregion_register(i915);
- intel_acpi_video_register(i915);
+ intel_acpi_video_register(display);
intel_audio_init(i915);
diff --git a/drivers/gpu/drm/i915/display/intel_opregion.c b/drivers/gpu/drm/i915/display/intel_opregion.c
index 68bd5101ec89..4ff646a7f05d 100644
--- a/drivers/gpu/drm/i915/display/intel_opregion.c
+++ b/drivers/gpu/drm/i915/display/intel_opregion.c
@@ -722,7 +722,8 @@ static void set_did(struct intel_opregion *opregion, int i, u32 val)
static void intel_didl_outputs(struct drm_i915_private *dev_priv)
{
- struct intel_opregion *opregion = dev_priv->display.opregion;
+ struct intel_display *display = &dev_priv->display;
+ struct intel_opregion *opregion = display->opregion;
struct intel_connector *connector;
struct drm_connector_list_iter conn_iter;
int i = 0, max_outputs;
@@ -737,7 +738,7 @@ static void intel_didl_outputs(struct drm_i915_private *dev_priv)
max_outputs = ARRAY_SIZE(opregion->acpi->didl) +
ARRAY_SIZE(opregion->acpi->did2);
- intel_acpi_device_id_update(dev_priv);
+ intel_acpi_device_id_update(display);
drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter);
for_each_intel_connector_iter(connector, &conn_iter) {
@@ -1189,7 +1190,8 @@ void intel_opregion_register(struct drm_i915_private *i915)
static void intel_opregion_resume_display(struct drm_i915_private *i915)
{
- struct intel_opregion *opregion = i915->display.opregion;
+ struct intel_display *display = &i915->display;
+ struct intel_opregion *opregion = display->opregion;
if (opregion->acpi) {
intel_didl_outputs(i915);
@@ -1210,7 +1212,7 @@ static void intel_opregion_resume_display(struct drm_i915_private *i915)
}
/* Some platforms abuse the _DSM to enable MUX */
- intel_dsm_get_bios_data_funcs_supported(i915);
+ intel_dsm_get_bios_data_funcs_supported(display);
}
void intel_opregion_resume(struct drm_i915_private *i915)
--
2.39.2
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 2/4] drm/i915/opregion: unify intel_encoder/intel_connector naming
2024-07-31 16:44 [PATCH 0/4] drm/i915: struct intel_display conversions Jani Nikula
2024-07-31 16:44 ` [PATCH 1/4] drm/i915/acpi: convert to struct intel_display Jani Nikula
@ 2024-07-31 16:44 ` Jani Nikula
2024-08-06 13:53 ` Imre Deak
2024-07-31 16:44 ` [PATCH 3/4] drm/i915/opregion: convert to struct intel_display Jani Nikula
` (3 subsequent siblings)
5 siblings, 1 reply; 12+ messages in thread
From: Jani Nikula @ 2024-07-31 16:44 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: jani.nikula
Prefer the short encoder/connector names for struct
intel_encoder/intel_connector variables and parameters.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/display/intel_opregion.c | 23 +++++++++----------
drivers/gpu/drm/i915/display/intel_opregion.h | 4 ++--
2 files changed, 13 insertions(+), 14 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_opregion.c b/drivers/gpu/drm/i915/display/intel_opregion.c
index 4ff646a7f05d..4c9b9e7ebc91 100644
--- a/drivers/gpu/drm/i915/display/intel_opregion.c
+++ b/drivers/gpu/drm/i915/display/intel_opregion.c
@@ -381,10 +381,10 @@ static int swsci(struct drm_i915_private *dev_priv,
#define DISPLAY_TYPE_EXTERNAL_FLAT_PANEL 2
#define DISPLAY_TYPE_INTERNAL_FLAT_PANEL 3
-int intel_opregion_notify_encoder(struct intel_encoder *intel_encoder,
+int intel_opregion_notify_encoder(struct intel_encoder *encoder,
bool enable)
{
- struct drm_i915_private *dev_priv = to_i915(intel_encoder->base.dev);
+ struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
u32 parm = 0;
u32 type = 0;
u32 port;
@@ -399,10 +399,10 @@ int intel_opregion_notify_encoder(struct intel_encoder *intel_encoder,
if (ret)
return ret;
- if (intel_encoder->type == INTEL_OUTPUT_DSI)
+ if (encoder->type == INTEL_OUTPUT_DSI)
port = 0;
else
- port = intel_encoder->port;
+ port = encoder->port;
if (port == PORT_E) {
port = 0;
@@ -421,15 +421,15 @@ int intel_opregion_notify_encoder(struct intel_encoder *intel_encoder,
if (port > 4) {
drm_dbg_kms(&dev_priv->drm,
"[ENCODER:%d:%s] port %c (index %u) out of bounds for display power state notification\n",
- intel_encoder->base.base.id, intel_encoder->base.name,
- port_name(intel_encoder->port), port);
+ encoder->base.base.id, encoder->base.name,
+ port_name(encoder->port), port);
return -EINVAL;
}
if (!enable)
parm |= 4 << 8;
- switch (intel_encoder->type) {
+ switch (encoder->type) {
case INTEL_OUTPUT_ANALOG:
type = DISPLAY_TYPE_CRT;
break;
@@ -446,7 +446,7 @@ int intel_opregion_notify_encoder(struct intel_encoder *intel_encoder,
default:
drm_WARN_ONCE(&dev_priv->drm, 1,
"unsupported intel_encoder type %d\n",
- intel_encoder->type);
+ encoder->type);
return -EINVAL;
}
@@ -1093,7 +1093,7 @@ intel_opregion_get_panel_type(struct drm_i915_private *dev_priv)
/**
* intel_opregion_get_edid - Fetch EDID from ACPI OpRegion mailbox #5
- * @intel_connector: eDP connector
+ * @connector: eDP connector
*
* This reads the ACPI Opregion mailbox #5 to extract the EDID that is passed
* to it.
@@ -1102,10 +1102,9 @@ intel_opregion_get_panel_type(struct drm_i915_private *dev_priv)
* The EDID in the OpRegion, or NULL if there is none or it's invalid.
*
*/
-const struct drm_edid *intel_opregion_get_edid(struct intel_connector *intel_connector)
+const struct drm_edid *intel_opregion_get_edid(struct intel_connector *connector)
{
- struct drm_connector *connector = &intel_connector->base;
- struct drm_i915_private *i915 = to_i915(connector->dev);
+ struct drm_i915_private *i915 = to_i915(connector->base.dev);
struct intel_opregion *opregion = i915->display.opregion;
const struct drm_edid *drm_edid;
const void *edid;
diff --git a/drivers/gpu/drm/i915/display/intel_opregion.h b/drivers/gpu/drm/i915/display/intel_opregion.h
index 4b2b8e752632..4dcd13c672e4 100644
--- a/drivers/gpu/drm/i915/display/intel_opregion.h
+++ b/drivers/gpu/drm/i915/display/intel_opregion.h
@@ -46,7 +46,7 @@ void intel_opregion_suspend(struct drm_i915_private *dev_priv,
bool intel_opregion_asle_present(struct drm_i915_private *i915);
void intel_opregion_asle_intr(struct drm_i915_private *dev_priv);
-int intel_opregion_notify_encoder(struct intel_encoder *intel_encoder,
+int intel_opregion_notify_encoder(struct intel_encoder *encoder,
bool enable);
int intel_opregion_notify_adapter(struct drm_i915_private *dev_priv,
pci_power_t state);
@@ -98,7 +98,7 @@ static inline void intel_opregion_asle_intr(struct drm_i915_private *dev_priv)
}
static inline int
-intel_opregion_notify_encoder(struct intel_encoder *intel_encoder, bool enable)
+intel_opregion_notify_encoder(struct intel_encoder *encoder, bool enable)
{
return 0;
}
--
2.39.2
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 3/4] drm/i915/opregion: convert to struct intel_display
2024-07-31 16:44 [PATCH 0/4] drm/i915: struct intel_display conversions Jani Nikula
2024-07-31 16:44 ` [PATCH 1/4] drm/i915/acpi: convert to struct intel_display Jani Nikula
2024-07-31 16:44 ` [PATCH 2/4] drm/i915/opregion: unify intel_encoder/intel_connector naming Jani Nikula
@ 2024-07-31 16:44 ` Jani Nikula
2024-08-02 10:07 ` kernel test robot
2024-08-06 14:37 ` Imre Deak
2024-07-31 16:44 ` [PATCH 4/4] drm/i915/bios: " Jani Nikula
` (2 subsequent siblings)
5 siblings, 2 replies; 12+ messages in thread
From: Jani Nikula @ 2024-07-31 16:44 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: jani.nikula
Going forward, struct intel_display shall replace struct
drm_i915_private as the main display device data pointer type. Convert
intel_opregion.[ch] to struct intel_display.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/display/intel_bios.c | 10 +-
.../drm/i915/display/intel_display_debugfs.c | 5 +-
.../drm/i915/display/intel_display_device.c | 8 +-
.../drm/i915/display/intel_display_driver.c | 6 +-
.../gpu/drm/i915/display/intel_display_irq.c | 24 +-
drivers/gpu/drm/i915/display/intel_opregion.c | 296 +++++++++---------
drivers/gpu/drm/i915/display/intel_opregion.h | 54 ++--
drivers/gpu/drm/i915/i915_driver.c | 22 +-
drivers/gpu/drm/xe/display/xe_display.c | 19 +-
9 files changed, 238 insertions(+), 206 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
index 460e83f0d5a5..2978b1eea73c 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.c
+++ b/drivers/gpu/drm/i915/display/intel_bios.c
@@ -621,7 +621,9 @@ static int opregion_get_panel_type(struct drm_i915_private *i915,
const struct intel_bios_encoder_data *devdata,
const struct drm_edid *drm_edid, bool use_fallback)
{
- return intel_opregion_get_panel_type(i915);
+ struct intel_display *display = &i915->display;
+
+ return intel_opregion_get_panel_type(display);
}
static int vbt_get_panel_type(struct drm_i915_private *i915,
@@ -3157,13 +3159,14 @@ static struct vbt_header *oprom_get_vbt(struct drm_i915_private *i915,
static const struct vbt_header *intel_bios_get_vbt(struct drm_i915_private *i915,
size_t *sizep)
{
+ struct intel_display *display = &i915->display;
const struct vbt_header *vbt = NULL;
intel_wakeref_t wakeref;
vbt = firmware_get_vbt(i915, sizep);
if (!vbt)
- vbt = intel_opregion_get_vbt(i915, sizep);
+ vbt = intel_opregion_get_vbt(display, sizep);
/*
* If the OpRegion does not have VBT, look in SPI flash
@@ -3377,6 +3380,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)
{
+ struct intel_display *display = &i915->display;
const struct intel_bios_encoder_data *devdata;
if (list_empty(&i915->display.vbt.display_devices))
@@ -3409,7 +3413,7 @@ bool intel_bios_is_lvds_present(struct drm_i915_private *i915, u8 *i2c_pin)
* additional data. Trust that if the VBT was written into
* the OpRegion then they have validated the LVDS's existence.
*/
- return intel_opregion_vbt_present(i915);
+ return intel_opregion_vbt_present(display);
}
return false;
diff --git a/drivers/gpu/drm/i915/display/intel_display_debugfs.c b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
index 5cf9b4af9adf..ac8ad4a40b96 100644
--- a/drivers/gpu/drm/i915/display/intel_display_debugfs.c
+++ b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
@@ -1045,6 +1045,7 @@ static const struct {
void intel_display_debugfs_register(struct drm_i915_private *i915)
{
+ struct intel_display *display = &i915->display;
struct drm_minor *minor = i915->drm.primary;
int i;
@@ -1063,9 +1064,9 @@ void intel_display_debugfs_register(struct drm_i915_private *i915)
intel_bios_debugfs_register(i915);
intel_cdclk_debugfs_register(i915);
intel_dmc_debugfs_register(i915);
- intel_fbc_debugfs_register(&i915->display);
+ intel_fbc_debugfs_register(display);
intel_hpd_debugfs_register(i915);
- intel_opregion_debugfs_register(i915);
+ intel_opregion_debugfs_register(display);
intel_psr_debugfs_register(i915);
intel_wm_debugfs_register(i915);
intel_display_debugfs_params(i915);
diff --git a/drivers/gpu/drm/i915/display/intel_display_device.c b/drivers/gpu/drm/i915/display/intel_display_device.c
index dd7dce4b0e7a..a31f89df2c0a 100644
--- a/drivers/gpu/drm/i915/display/intel_display_device.c
+++ b/drivers/gpu/drm/i915/display/intel_display_device.c
@@ -1529,9 +1529,11 @@ void intel_display_device_info_print(const struct intel_display_device_info *inf
*/
bool intel_display_device_enabled(struct drm_i915_private *i915)
{
+ struct intel_display *display = &i915->display;
+
/* Only valid when HAS_DISPLAY() is true */
- drm_WARN_ON(&i915->drm, !HAS_DISPLAY(i915));
+ drm_WARN_ON(display->drm, !HAS_DISPLAY(display));
- return !i915->display.params.disable_display &&
- !intel_opregion_headless_sku(i915);
+ return !display->params.disable_display &&
+ !intel_opregion_headless_sku(display);
}
diff --git a/drivers/gpu/drm/i915/display/intel_display_driver.c b/drivers/gpu/drm/i915/display/intel_display_driver.c
index 392c10359a52..a2666b69834e 100644
--- a/drivers/gpu/drm/i915/display/intel_display_driver.c
+++ b/drivers/gpu/drm/i915/display/intel_display_driver.c
@@ -535,7 +535,7 @@ void intel_display_driver_register(struct drm_i915_private *i915)
return;
/* Must be done after probing outputs */
- intel_opregion_register(i915);
+ intel_opregion_register(display);
intel_acpi_video_register(display);
intel_audio_init(i915);
@@ -626,6 +626,8 @@ void intel_display_driver_remove_nogem(struct drm_i915_private *i915)
void intel_display_driver_unregister(struct drm_i915_private *i915)
{
+ struct intel_display *display = &i915->display;
+
if (!HAS_DISPLAY(i915))
return;
@@ -645,7 +647,7 @@ void intel_display_driver_unregister(struct drm_i915_private *i915)
drm_atomic_helper_shutdown(&i915->drm);
acpi_video_unregister();
- intel_opregion_unregister(i915);
+ intel_opregion_unregister(display);
}
/*
diff --git a/drivers/gpu/drm/i915/display/intel_display_irq.c b/drivers/gpu/drm/i915/display/intel_display_irq.c
index 5219ba295c74..6cc1cc5e94d5 100644
--- a/drivers/gpu/drm/i915/display/intel_display_irq.c
+++ b/drivers/gpu/drm/i915/display/intel_display_irq.c
@@ -270,10 +270,12 @@ void i915_disable_pipestat(struct drm_i915_private *dev_priv,
static bool i915_has_asle(struct drm_i915_private *i915)
{
+ struct intel_display *display = &i915->display;
+
if (!IS_PINEVIEW(i915) && !IS_MOBILE(i915))
return false;
- return intel_opregion_asle_present(i915);
+ return intel_opregion_asle_present(display);
}
/**
@@ -497,6 +499,8 @@ void i8xx_pipestat_irq_handler(struct drm_i915_private *dev_priv,
void i915_pipestat_irq_handler(struct drm_i915_private *dev_priv,
u32 iir, u32 pipe_stats[I915_MAX_PIPES])
{
+ struct intel_display *display = &dev_priv->display;
+
bool blc_event = false;
enum pipe pipe;
@@ -515,12 +519,13 @@ void i915_pipestat_irq_handler(struct drm_i915_private *dev_priv,
}
if (blc_event || (iir & I915_ASLE_INTERRUPT))
- intel_opregion_asle_intr(dev_priv);
+ intel_opregion_asle_intr(display);
}
void i965_pipestat_irq_handler(struct drm_i915_private *dev_priv,
u32 iir, u32 pipe_stats[I915_MAX_PIPES])
{
+ struct intel_display *display = &dev_priv->display;
bool blc_event = false;
enum pipe pipe;
@@ -539,7 +544,7 @@ void i965_pipestat_irq_handler(struct drm_i915_private *dev_priv,
}
if (blc_event || (iir & I915_ASLE_INTERRUPT))
- intel_opregion_asle_intr(dev_priv);
+ intel_opregion_asle_intr(display);
if (pipe_stats[0] & PIPE_GMBUS_INTERRUPT_STATUS)
intel_gmbus_irq_handler(dev_priv);
@@ -695,6 +700,7 @@ static void cpt_irq_handler(struct drm_i915_private *dev_priv, u32 pch_iir)
void ilk_display_irq_handler(struct drm_i915_private *dev_priv, u32 de_iir)
{
+ struct intel_display *display = &dev_priv->display;
enum pipe pipe;
u32 hotplug_trigger = de_iir & DE_DP_A_HOTPLUG;
@@ -705,7 +711,7 @@ void ilk_display_irq_handler(struct drm_i915_private *dev_priv, u32 de_iir)
intel_dp_aux_irq_handler(dev_priv);
if (de_iir & DE_GSE)
- intel_opregion_asle_intr(dev_priv);
+ intel_opregion_asle_intr(display);
if (de_iir & DE_POISON)
drm_err(&dev_priv->drm, "Poison interrupt\n");
@@ -743,6 +749,7 @@ void ilk_display_irq_handler(struct drm_i915_private *dev_priv, u32 de_iir)
void ivb_display_irq_handler(struct drm_i915_private *dev_priv, u32 de_iir)
{
+ struct intel_display *display = &dev_priv->display;
enum pipe pipe;
u32 hotplug_trigger = de_iir & DE_DP_A_HOTPLUG_IVB;
@@ -770,7 +777,7 @@ void ivb_display_irq_handler(struct drm_i915_private *dev_priv, u32 de_iir)
intel_dp_aux_irq_handler(dev_priv);
if (de_iir & DE_GSE_IVB)
- intel_opregion_asle_intr(dev_priv);
+ intel_opregion_asle_intr(display);
for_each_pipe(dev_priv, pipe) {
if (de_iir & DE_PIPE_VBLANK_IVB(pipe))
@@ -894,6 +901,7 @@ static void intel_pmdemand_irq_handler(struct drm_i915_private *dev_priv)
static void
gen8_de_misc_irq_handler(struct drm_i915_private *dev_priv, u32 iir)
{
+ struct intel_display *display = &dev_priv->display;
bool found = false;
if (DISPLAY_VER(dev_priv) >= 14) {
@@ -907,7 +915,7 @@ gen8_de_misc_irq_handler(struct drm_i915_private *dev_priv, u32 iir)
found = true;
}
} else if (iir & GEN8_DE_MISC_GSE) {
- intel_opregion_asle_intr(dev_priv);
+ intel_opregion_asle_intr(display);
found = true;
}
@@ -1211,8 +1219,10 @@ u32 gen11_gu_misc_irq_ack(struct drm_i915_private *i915, const u32 master_ctl)
void gen11_gu_misc_irq_handler(struct drm_i915_private *i915, const u32 iir)
{
+ struct intel_display *display = &i915->display;
+
if (iir & GEN11_GU_MISC_GSE)
- intel_opregion_asle_intr(i915);
+ intel_opregion_asle_intr(display);
}
void gen11_display_irq_handler(struct drm_i915_private *i915)
diff --git a/drivers/gpu/drm/i915/display/intel_opregion.c b/drivers/gpu/drm/i915/display/intel_opregion.c
index 4c9b9e7ebc91..0cf6c0711dae 100644
--- a/drivers/gpu/drm/i915/display/intel_opregion.c
+++ b/drivers/gpu/drm/i915/display/intel_opregion.c
@@ -252,7 +252,7 @@ struct opregion_asle_ext {
#define OPREGION_SIZE (8 * 1024)
struct intel_opregion {
- struct drm_i915_private *i915;
+ struct intel_display *display;
struct opregion_header *header;
struct opregion_acpi *acpi;
@@ -268,9 +268,9 @@ struct intel_opregion {
struct notifier_block acpi_notifier;
};
-static int check_swsci_function(struct drm_i915_private *i915, u32 function)
+static int check_swsci_function(struct intel_display *display, u32 function)
{
- struct intel_opregion *opregion = i915->display.opregion;
+ struct intel_opregion *opregion = display->opregion;
struct opregion_swsci *swsci;
u32 main_function, sub_function;
@@ -300,20 +300,20 @@ static int check_swsci_function(struct drm_i915_private *i915, u32 function)
return 0;
}
-static int swsci(struct drm_i915_private *dev_priv,
+static int swsci(struct intel_display *display,
u32 function, u32 parm, u32 *parm_out)
{
struct opregion_swsci *swsci;
- struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
+ struct pci_dev *pdev = to_pci_dev(display->drm->dev);
u32 scic, dslp;
u16 swsci_val;
int ret;
- ret = check_swsci_function(dev_priv, function);
+ ret = check_swsci_function(display, function);
if (ret)
return ret;
- swsci = dev_priv->display.opregion->swsci;
+ swsci = display->opregion->swsci;
/* Driver sleep timeout in ms. */
dslp = swsci->dslp;
@@ -331,7 +331,7 @@ static int swsci(struct drm_i915_private *dev_priv,
/* The spec tells us to do this, but we are the only user... */
scic = swsci->scic;
if (scic & SWSCI_SCIC_INDICATOR) {
- drm_dbg(&dev_priv->drm, "SWSCI request already in progress\n");
+ drm_dbg(display->drm, "SWSCI request already in progress\n");
return -EBUSY;
}
@@ -355,7 +355,7 @@ static int swsci(struct drm_i915_private *dev_priv,
/* Poll for the result. */
#define C (((scic = swsci->scic) & SWSCI_SCIC_INDICATOR) == 0)
if (wait_for(C, dslp)) {
- drm_dbg(&dev_priv->drm, "SWSCI request timed out\n");
+ drm_dbg(display->drm, "SWSCI request timed out\n");
return -ETIMEDOUT;
}
@@ -364,7 +364,7 @@ static int swsci(struct drm_i915_private *dev_priv,
/* Note: scic == 0 is an error! */
if (scic != SWSCI_SCIC_EXIT_STATUS_SUCCESS) {
- drm_dbg(&dev_priv->drm, "SWSCI request error %u\n", scic);
+ drm_dbg(display->drm, "SWSCI request error %u\n", scic);
return -EIO;
}
@@ -384,18 +384,18 @@ static int swsci(struct drm_i915_private *dev_priv,
int intel_opregion_notify_encoder(struct intel_encoder *encoder,
bool enable)
{
- struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
+ struct intel_display *display = to_intel_display(encoder->base.dev);
u32 parm = 0;
u32 type = 0;
u32 port;
int ret;
/* don't care about old stuff for now */
- if (!HAS_DDI(dev_priv))
+ if (!HAS_DDI(display))
return 0;
/* Avoid port out of bounds checks if SWSCI isn't there. */
- ret = check_swsci_function(dev_priv, SWSCI_SBCB_DISPLAY_POWER_STATE);
+ ret = check_swsci_function(display, SWSCI_SBCB_DISPLAY_POWER_STATE);
if (ret)
return ret;
@@ -419,7 +419,7 @@ int intel_opregion_notify_encoder(struct intel_encoder *encoder,
* number is out of bounds after mapping.
*/
if (port > 4) {
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(display->drm,
"[ENCODER:%d:%s] port %c (index %u) out of bounds for display power state notification\n",
encoder->base.base.id, encoder->base.name,
port_name(encoder->port), port);
@@ -444,7 +444,7 @@ int intel_opregion_notify_encoder(struct intel_encoder *encoder,
type = DISPLAY_TYPE_INTERNAL_FLAT_PANEL;
break;
default:
- drm_WARN_ONCE(&dev_priv->drm, 1,
+ drm_WARN_ONCE(display->drm, 1,
"unsupported intel_encoder type %d\n",
encoder->type);
return -EINVAL;
@@ -452,7 +452,7 @@ int intel_opregion_notify_encoder(struct intel_encoder *encoder,
parm |= type << (16 + port * 3);
- return swsci(dev_priv, SWSCI_SBCB_DISPLAY_POWER_STATE, parm, NULL);
+ return swsci(display, SWSCI_SBCB_DISPLAY_POWER_STATE, parm, NULL);
}
static const struct {
@@ -466,33 +466,33 @@ static const struct {
{ PCI_D3cold, 0x04 },
};
-int intel_opregion_notify_adapter(struct drm_i915_private *dev_priv,
+int intel_opregion_notify_adapter(struct intel_display *display,
pci_power_t state)
{
int i;
- if (!HAS_DDI(dev_priv))
+ if (!HAS_DDI(display))
return 0;
for (i = 0; i < ARRAY_SIZE(power_state_map); i++) {
if (state == power_state_map[i].pci_power_state)
- return swsci(dev_priv, SWSCI_SBCB_ADAPTER_POWER_STATE,
+ return swsci(display, SWSCI_SBCB_ADAPTER_POWER_STATE,
power_state_map[i].parm, NULL);
}
return -EINVAL;
}
-static u32 asle_set_backlight(struct drm_i915_private *dev_priv, u32 bclp)
+static u32 asle_set_backlight(struct intel_display *display, u32 bclp)
{
struct intel_connector *connector;
struct drm_connector_list_iter conn_iter;
- struct opregion_asle *asle = dev_priv->display.opregion->asle;
+ struct opregion_asle *asle = display->opregion->asle;
- drm_dbg(&dev_priv->drm, "bclp = 0x%08x\n", bclp);
+ drm_dbg(display->drm, "bclp = 0x%08x\n", bclp);
if (acpi_video_get_backlight_type() == acpi_backlight_native) {
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(display->drm,
"opregion backlight request ignored\n");
return 0;
}
@@ -504,104 +504,104 @@ static u32 asle_set_backlight(struct drm_i915_private *dev_priv, u32 bclp)
if (bclp > 255)
return ASLC_BACKLIGHT_FAILED;
- drm_modeset_lock(&dev_priv->drm.mode_config.connection_mutex, NULL);
+ drm_modeset_lock(&display->drm->mode_config.connection_mutex, NULL);
/*
* Update backlight on all connectors that support backlight (usually
* only one).
*/
- drm_dbg_kms(&dev_priv->drm, "updating opregion backlight %d/255\n",
+ drm_dbg_kms(display->drm, "updating opregion backlight %d/255\n",
bclp);
- drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter);
+ drm_connector_list_iter_begin(display->drm, &conn_iter);
for_each_intel_connector_iter(connector, &conn_iter)
intel_backlight_set_acpi(connector->base.state, bclp, 255);
drm_connector_list_iter_end(&conn_iter);
asle->cblv = DIV_ROUND_UP(bclp * 100, 255) | ASLE_CBLV_VALID;
- drm_modeset_unlock(&dev_priv->drm.mode_config.connection_mutex);
+ drm_modeset_unlock(&display->drm->mode_config.connection_mutex);
return 0;
}
-static u32 asle_set_als_illum(struct drm_i915_private *dev_priv, u32 alsi)
+static u32 asle_set_als_illum(struct intel_display *display, u32 alsi)
{
/* alsi is the current ALS reading in lux. 0 indicates below sensor
range, 0xffff indicates above sensor range. 1-0xfffe are valid */
- drm_dbg(&dev_priv->drm, "Illum is not supported\n");
+ drm_dbg(display->drm, "Illum is not supported\n");
return ASLC_ALS_ILLUM_FAILED;
}
-static u32 asle_set_pwm_freq(struct drm_i915_private *dev_priv, u32 pfmb)
+static u32 asle_set_pwm_freq(struct intel_display *display, u32 pfmb)
{
- drm_dbg(&dev_priv->drm, "PWM freq is not supported\n");
+ drm_dbg(display->drm, "PWM freq is not supported\n");
return ASLC_PWM_FREQ_FAILED;
}
-static u32 asle_set_pfit(struct drm_i915_private *dev_priv, u32 pfit)
+static u32 asle_set_pfit(struct intel_display *display, u32 pfit)
{
/* Panel fitting is currently controlled by the X code, so this is a
noop until modesetting support works fully */
- drm_dbg(&dev_priv->drm, "Pfit is not supported\n");
+ drm_dbg(display->drm, "Pfit is not supported\n");
return ASLC_PFIT_FAILED;
}
-static u32 asle_set_supported_rotation_angles(struct drm_i915_private *dev_priv, u32 srot)
+static u32 asle_set_supported_rotation_angles(struct intel_display *display, u32 srot)
{
- drm_dbg(&dev_priv->drm, "SROT is not supported\n");
+ drm_dbg(display->drm, "SROT is not supported\n");
return ASLC_ROTATION_ANGLES_FAILED;
}
-static u32 asle_set_button_array(struct drm_i915_private *dev_priv, u32 iuer)
+static u32 asle_set_button_array(struct intel_display *display, u32 iuer)
{
if (!iuer)
- drm_dbg(&dev_priv->drm,
+ drm_dbg(display->drm,
"Button array event is not supported (nothing)\n");
if (iuer & ASLE_IUER_ROTATION_LOCK_BTN)
- drm_dbg(&dev_priv->drm,
+ drm_dbg(display->drm,
"Button array event is not supported (rotation lock)\n");
if (iuer & ASLE_IUER_VOLUME_DOWN_BTN)
- drm_dbg(&dev_priv->drm,
+ drm_dbg(display->drm,
"Button array event is not supported (volume down)\n");
if (iuer & ASLE_IUER_VOLUME_UP_BTN)
- drm_dbg(&dev_priv->drm,
+ drm_dbg(display->drm,
"Button array event is not supported (volume up)\n");
if (iuer & ASLE_IUER_WINDOWS_BTN)
- drm_dbg(&dev_priv->drm,
+ drm_dbg(display->drm,
"Button array event is not supported (windows)\n");
if (iuer & ASLE_IUER_POWER_BTN)
- drm_dbg(&dev_priv->drm,
+ drm_dbg(display->drm,
"Button array event is not supported (power)\n");
return ASLC_BUTTON_ARRAY_FAILED;
}
-static u32 asle_set_convertible(struct drm_i915_private *dev_priv, u32 iuer)
+static u32 asle_set_convertible(struct intel_display *display, u32 iuer)
{
if (iuer & ASLE_IUER_CONVERTIBLE)
- drm_dbg(&dev_priv->drm,
+ drm_dbg(display->drm,
"Convertible is not supported (clamshell)\n");
else
- drm_dbg(&dev_priv->drm,
+ drm_dbg(display->drm,
"Convertible is not supported (slate)\n");
return ASLC_CONVERTIBLE_FAILED;
}
-static u32 asle_set_docking(struct drm_i915_private *dev_priv, u32 iuer)
+static u32 asle_set_docking(struct intel_display *display, u32 iuer)
{
if (iuer & ASLE_IUER_DOCKING)
- drm_dbg(&dev_priv->drm, "Docking is not supported (docked)\n");
+ drm_dbg(display->drm, "Docking is not supported (docked)\n");
else
- drm_dbg(&dev_priv->drm,
+ drm_dbg(display->drm,
"Docking is not supported (undocked)\n");
return ASLC_DOCKING_FAILED;
}
-static u32 asle_isct_state(struct drm_i915_private *dev_priv)
+static u32 asle_isct_state(struct intel_display *display)
{
- drm_dbg(&dev_priv->drm, "ISCT is not supported\n");
+ drm_dbg(display->drm, "ISCT is not supported\n");
return ASLC_ISCT_STATE_FAILED;
}
@@ -609,7 +609,7 @@ static void asle_work(struct work_struct *work)
{
struct intel_opregion *opregion =
container_of(work, struct intel_opregion, asle_work);
- struct drm_i915_private *dev_priv = opregion->i915;
+ struct intel_display *display = opregion->display;
struct opregion_asle *asle = opregion->asle;
u32 aslc_stat = 0;
u32 aslc_req;
@@ -620,50 +620,51 @@ static void asle_work(struct work_struct *work)
aslc_req = asle->aslc;
if (!(aslc_req & ASLC_REQ_MSK)) {
- drm_dbg(&dev_priv->drm,
+ drm_dbg(display->drm,
"No request on ASLC interrupt 0x%08x\n", aslc_req);
return;
}
if (aslc_req & ASLC_SET_ALS_ILLUM)
- aslc_stat |= asle_set_als_illum(dev_priv, asle->alsi);
+ aslc_stat |= asle_set_als_illum(display, asle->alsi);
if (aslc_req & ASLC_SET_BACKLIGHT)
- aslc_stat |= asle_set_backlight(dev_priv, asle->bclp);
+ aslc_stat |= asle_set_backlight(display, asle->bclp);
if (aslc_req & ASLC_SET_PFIT)
- aslc_stat |= asle_set_pfit(dev_priv, asle->pfit);
+ aslc_stat |= asle_set_pfit(display, asle->pfit);
if (aslc_req & ASLC_SET_PWM_FREQ)
- aslc_stat |= asle_set_pwm_freq(dev_priv, asle->pfmb);
+ aslc_stat |= asle_set_pwm_freq(display, asle->pfmb);
if (aslc_req & ASLC_SUPPORTED_ROTATION_ANGLES)
- aslc_stat |= asle_set_supported_rotation_angles(dev_priv,
+ aslc_stat |= asle_set_supported_rotation_angles(display,
asle->srot);
if (aslc_req & ASLC_BUTTON_ARRAY)
- aslc_stat |= asle_set_button_array(dev_priv, asle->iuer);
+ aslc_stat |= asle_set_button_array(display, asle->iuer);
if (aslc_req & ASLC_CONVERTIBLE_INDICATOR)
- aslc_stat |= asle_set_convertible(dev_priv, asle->iuer);
+ aslc_stat |= asle_set_convertible(display, asle->iuer);
if (aslc_req & ASLC_DOCKING_INDICATOR)
- aslc_stat |= asle_set_docking(dev_priv, asle->iuer);
+ aslc_stat |= asle_set_docking(display, asle->iuer);
if (aslc_req & ASLC_ISCT_STATE_CHANGE)
- aslc_stat |= asle_isct_state(dev_priv);
+ aslc_stat |= asle_isct_state(display);
asle->aslc = aslc_stat;
}
-bool intel_opregion_asle_present(struct drm_i915_private *i915)
+bool intel_opregion_asle_present(struct intel_display *display)
{
- return i915->display.opregion && i915->display.opregion->asle;
+ return display->opregion && display->opregion->asle;
}
-void intel_opregion_asle_intr(struct drm_i915_private *i915)
+void intel_opregion_asle_intr(struct intel_display *display)
{
- struct intel_opregion *opregion = i915->display.opregion;
+ struct drm_i915_private *i915 = to_i915(display->drm);
+ struct intel_opregion *opregion = display->opregion;
if (opregion && opregion->asle)
queue_work(i915->unordered_wq, &opregion->asle_work);
@@ -720,9 +721,8 @@ static void set_did(struct intel_opregion *opregion, int i, u32 val)
}
}
-static void intel_didl_outputs(struct drm_i915_private *dev_priv)
+static void intel_didl_outputs(struct intel_display *display)
{
- struct intel_display *display = &dev_priv->display;
struct intel_opregion *opregion = display->opregion;
struct intel_connector *connector;
struct drm_connector_list_iter conn_iter;
@@ -740,7 +740,7 @@ static void intel_didl_outputs(struct drm_i915_private *dev_priv)
intel_acpi_device_id_update(display);
- drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter);
+ drm_connector_list_iter_begin(display->drm, &conn_iter);
for_each_intel_connector_iter(connector, &conn_iter) {
if (i < max_outputs)
set_did(opregion, i, connector->acpi_device_id);
@@ -748,10 +748,10 @@ static void intel_didl_outputs(struct drm_i915_private *dev_priv)
}
drm_connector_list_iter_end(&conn_iter);
- drm_dbg_kms(&dev_priv->drm, "%d outputs detected\n", i);
+ drm_dbg_kms(display->drm, "%d outputs detected\n", i);
if (i > max_outputs)
- drm_err(&dev_priv->drm,
+ drm_err(display->drm,
"More than %d outputs in connector list\n",
max_outputs);
@@ -760,9 +760,9 @@ static void intel_didl_outputs(struct drm_i915_private *dev_priv)
set_did(opregion, i, 0);
}
-static void intel_setup_cadls(struct drm_i915_private *dev_priv)
+static void intel_setup_cadls(struct intel_display *display)
{
- struct intel_opregion *opregion = dev_priv->display.opregion;
+ struct intel_opregion *opregion = display->opregion;
struct intel_connector *connector;
struct drm_connector_list_iter conn_iter;
int i = 0;
@@ -777,7 +777,7 @@ static void intel_setup_cadls(struct drm_i915_private *dev_priv)
* Note that internal panels should be at the front of the connector
* list already, ensuring they're not left out.
*/
- drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter);
+ drm_connector_list_iter_begin(display->drm, &conn_iter);
for_each_intel_connector_iter(connector, &conn_iter) {
if (i >= ARRAY_SIZE(opregion->acpi->cadl))
break;
@@ -790,9 +790,9 @@ static void intel_setup_cadls(struct drm_i915_private *dev_priv)
opregion->acpi->cadl[i] = 0;
}
-static void swsci_setup(struct drm_i915_private *dev_priv)
+static void swsci_setup(struct intel_display *display)
{
- struct intel_opregion *opregion = dev_priv->display.opregion;
+ struct intel_opregion *opregion = display->opregion;
bool requested_callbacks = false;
u32 tmp;
@@ -801,7 +801,7 @@ static void swsci_setup(struct drm_i915_private *dev_priv)
opregion->swsci_sbcb_sub_functions = 1;
/* We use GBDA to ask for supported GBDA calls. */
- if (swsci(dev_priv, SWSCI_GBDA_SUPPORTED_CALLS, 0, &tmp) == 0) {
+ if (swsci(display, SWSCI_GBDA_SUPPORTED_CALLS, 0, &tmp) == 0) {
/* make the bits match the sub-function codes */
tmp <<= 1;
opregion->swsci_gbda_sub_functions |= tmp;
@@ -812,7 +812,7 @@ static void swsci_setup(struct drm_i915_private *dev_priv)
* must not call interfaces that are not specifically requested by the
* bios.
*/
- if (swsci(dev_priv, SWSCI_GBDA_REQUESTED_CALLBACKS, 0, &tmp) == 0) {
+ if (swsci(display, SWSCI_GBDA_REQUESTED_CALLBACKS, 0, &tmp) == 0) {
/* here, the bits already match sub-function codes */
opregion->swsci_sbcb_sub_functions |= tmp;
requested_callbacks = true;
@@ -823,7 +823,7 @@ static void swsci_setup(struct drm_i915_private *dev_priv)
* the callback is _requested_. But we still can't call interfaces that
* are not requested.
*/
- if (swsci(dev_priv, SWSCI_SBCB_SUPPORTED_CALLBACKS, 0, &tmp) == 0) {
+ if (swsci(display, SWSCI_SBCB_SUPPORTED_CALLBACKS, 0, &tmp) == 0) {
/* make the bits match the sub-function codes */
u32 low = tmp & 0x7ff;
u32 high = tmp & ~0xfff; /* bit 11 is reserved */
@@ -833,7 +833,7 @@ static void swsci_setup(struct drm_i915_private *dev_priv)
if (requested_callbacks) {
u32 req = opregion->swsci_sbcb_sub_functions;
if ((req & tmp) != req)
- drm_dbg(&dev_priv->drm,
+ drm_dbg(display->drm,
"SWSCI BIOS requested (%08x) SBCB callbacks that are not supported (%08x)\n",
req, tmp);
/* XXX: for now, trust the requested callbacks */
@@ -843,7 +843,7 @@ static void swsci_setup(struct drm_i915_private *dev_priv)
}
}
- drm_dbg(&dev_priv->drm,
+ drm_dbg(display->drm,
"SWSCI GBDA callbacks %08x, SBCB callbacks %08x\n",
opregion->swsci_gbda_sub_functions,
opregion->swsci_sbcb_sub_functions);
@@ -868,10 +868,11 @@ static const struct dmi_system_id intel_no_opregion_vbt[] = {
{ }
};
-int intel_opregion_setup(struct drm_i915_private *dev_priv)
+int intel_opregion_setup(struct intel_display *display)
{
+ struct drm_i915_private *i915 = to_i915(display->drm);
struct intel_opregion *opregion;
- struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
+ struct pci_dev *pdev = to_pci_dev(display->drm->dev);
u32 asls, mboxes;
char buf[sizeof(OPREGION_SIGNATURE)];
int err = 0;
@@ -886,10 +887,10 @@ int intel_opregion_setup(struct drm_i915_private *dev_priv)
BUILD_BUG_ON(sizeof(struct opregion_asle_ext) != 0x400);
pci_read_config_dword(pdev, ASLS, &asls);
- drm_dbg(&dev_priv->drm, "graphic opregion physical addr: 0x%x\n",
+ drm_dbg(display->drm, "graphic opregion physical addr: 0x%x\n",
asls);
if (asls == 0) {
- drm_dbg(&dev_priv->drm, "ACPI OpRegion not supported!\n");
+ drm_dbg(display->drm, "ACPI OpRegion not supported!\n");
return -ENOTSUPP;
}
@@ -897,8 +898,8 @@ int intel_opregion_setup(struct drm_i915_private *dev_priv)
if (!opregion)
return -ENOMEM;
- opregion->i915 = dev_priv;
- dev_priv->display.opregion = opregion;
+ opregion->display = display;
+ display->opregion = opregion;
INIT_WORK(&opregion->asle_work, asle_work);
@@ -911,20 +912,20 @@ int intel_opregion_setup(struct drm_i915_private *dev_priv)
memcpy(buf, base, sizeof(buf));
if (memcmp(buf, OPREGION_SIGNATURE, 16)) {
- drm_dbg(&dev_priv->drm, "opregion signature mismatch\n");
+ drm_dbg(display->drm, "opregion signature mismatch\n");
err = -EINVAL;
goto err_out;
}
opregion->header = base;
- drm_dbg(&dev_priv->drm, "ACPI OpRegion version %u.%u.%u\n",
+ drm_dbg(display->drm, "ACPI OpRegion version %u.%u.%u\n",
opregion->header->over.major,
opregion->header->over.minor,
opregion->header->over.revision);
mboxes = opregion->header->mboxes;
if (mboxes & MBOX_ACPI) {
- drm_dbg(&dev_priv->drm, "Public ACPI methods supported\n");
+ drm_dbg(display->drm, "Public ACPI methods supported\n");
opregion->acpi = base + OPREGION_ACPI_OFFSET;
/*
* Indicate we handle monitor hotplug events ourselves so we do
@@ -939,30 +940,30 @@ int intel_opregion_setup(struct drm_i915_private *dev_priv)
u8 major = opregion->header->over.major;
if (major >= 3) {
- drm_err(&dev_priv->drm, "SWSCI Mailbox #2 present for opregion v3.x, ignoring\n");
+ drm_err(display->drm, "SWSCI Mailbox #2 present for opregion v3.x, ignoring\n");
} else {
if (major >= 2)
- drm_dbg(&dev_priv->drm, "SWSCI Mailbox #2 present for opregion v2.x\n");
- drm_dbg(&dev_priv->drm, "SWSCI supported\n");
+ drm_dbg(display->drm, "SWSCI Mailbox #2 present for opregion v2.x\n");
+ drm_dbg(display->drm, "SWSCI supported\n");
opregion->swsci = base + OPREGION_SWSCI_OFFSET;
- swsci_setup(dev_priv);
+ swsci_setup(display);
}
}
if (mboxes & MBOX_ASLE) {
- drm_dbg(&dev_priv->drm, "ASLE supported\n");
+ drm_dbg(display->drm, "ASLE supported\n");
opregion->asle = base + OPREGION_ASLE_OFFSET;
opregion->asle->ardy = ASLE_ARDY_NOT_READY;
}
if (mboxes & MBOX_ASLE_EXT) {
- drm_dbg(&dev_priv->drm, "ASLE extension supported\n");
+ drm_dbg(display->drm, "ASLE extension supported\n");
opregion->asle_ext = base + OPREGION_ASLE_EXT_OFFSET;
}
if (mboxes & MBOX_BACKLIGHT) {
- drm_dbg(&dev_priv->drm, "Mailbox #2 for backlight present\n");
+ drm_dbg(display->drm, "Mailbox #2 for backlight present\n");
}
if (dmi_check_system(intel_no_opregion_vbt))
@@ -980,7 +981,7 @@ int intel_opregion_setup(struct drm_i915_private *dev_priv)
*/
if (opregion->header->over.major > 2 ||
opregion->header->over.minor >= 1) {
- drm_WARN_ON(&dev_priv->drm, rvda < OPREGION_SIZE);
+ drm_WARN_ON(display->drm, rvda < OPREGION_SIZE);
rvda += asls;
}
@@ -990,14 +991,14 @@ int intel_opregion_setup(struct drm_i915_private *dev_priv)
vbt = opregion->rvda;
vbt_size = opregion->asle->rvds;
- if (intel_bios_is_valid_vbt(dev_priv, vbt, vbt_size)) {
- drm_dbg_kms(&dev_priv->drm,
+ if (intel_bios_is_valid_vbt(i915, vbt, vbt_size)) {
+ drm_dbg_kms(display->drm,
"Found valid VBT in ACPI OpRegion (RVDA)\n");
opregion->vbt = vbt;
opregion->vbt_size = vbt_size;
goto out;
} else {
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(display->drm,
"Invalid VBT in ACPI OpRegion (RVDA)\n");
memunmap(opregion->rvda);
opregion->rvda = NULL;
@@ -1015,13 +1016,13 @@ int intel_opregion_setup(struct drm_i915_private *dev_priv)
vbt_size = (mboxes & MBOX_ASLE_EXT) ?
OPREGION_ASLE_EXT_OFFSET : OPREGION_SIZE;
vbt_size -= OPREGION_VBT_OFFSET;
- if (intel_bios_is_valid_vbt(dev_priv, vbt, vbt_size)) {
- drm_dbg_kms(&dev_priv->drm,
+ if (intel_bios_is_valid_vbt(i915, vbt, vbt_size)) {
+ drm_dbg_kms(display->drm,
"Found valid VBT in ACPI OpRegion (Mailbox #4)\n");
opregion->vbt = vbt;
opregion->vbt_size = vbt_size;
} else {
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(display->drm,
"Invalid VBT in ACPI OpRegion (Mailbox #4)\n");
}
@@ -1032,7 +1033,7 @@ int intel_opregion_setup(struct drm_i915_private *dev_priv)
memunmap(base);
err_memremap:
kfree(opregion);
- dev_priv->display.opregion = NULL;
+ display->opregion = NULL;
return err;
}
@@ -1055,25 +1056,25 @@ static const struct dmi_system_id intel_use_opregion_panel_type[] = {
};
int
-intel_opregion_get_panel_type(struct drm_i915_private *dev_priv)
+intel_opregion_get_panel_type(struct intel_display *display)
{
u32 panel_details;
int ret;
- ret = swsci(dev_priv, SWSCI_GBDA_PANEL_DETAILS, 0x0, &panel_details);
+ ret = swsci(display, SWSCI_GBDA_PANEL_DETAILS, 0x0, &panel_details);
if (ret)
return ret;
ret = (panel_details >> 8) & 0xff;
if (ret > 0x10) {
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(display->drm,
"Invalid OpRegion panel type 0x%x\n", ret);
return -EINVAL;
}
/* fall back to VBT panel type? */
if (ret == 0x0) {
- drm_dbg_kms(&dev_priv->drm, "No panel type in OpRegion\n");
+ drm_dbg_kms(display->drm, "No panel type in OpRegion\n");
return -ENODEV;
}
@@ -1083,7 +1084,7 @@ intel_opregion_get_panel_type(struct drm_i915_private *dev_priv)
* via a quirk list :(
*/
if (!dmi_check_system(intel_use_opregion_panel_type)) {
- drm_dbg_kms(&dev_priv->drm,
+ drm_dbg_kms(display->drm,
"Ignoring OpRegion panel type (%d)\n", ret - 1);
return -ENODEV;
}
@@ -1104,8 +1105,8 @@ intel_opregion_get_panel_type(struct drm_i915_private *dev_priv)
*/
const struct drm_edid *intel_opregion_get_edid(struct intel_connector *connector)
{
- struct drm_i915_private *i915 = to_i915(connector->base.dev);
- struct intel_opregion *opregion = i915->display.opregion;
+ struct intel_display *display = to_intel_display(connector->base.dev);
+ struct intel_opregion *opregion = display->opregion;
const struct drm_edid *drm_edid;
const void *edid;
int len;
@@ -1123,7 +1124,7 @@ const struct drm_edid *intel_opregion_get_edid(struct intel_connector *connector
drm_edid = drm_edid_alloc(edid, len);
if (!drm_edid_valid(drm_edid)) {
- drm_dbg_kms(&i915->drm, "Invalid EDID in ACPI OpRegion (Mailbox #5)\n");
+ drm_dbg_kms(display->drm, "Invalid EDID in ACPI OpRegion (Mailbox #5)\n");
drm_edid_free(drm_edid);
drm_edid = NULL;
}
@@ -1131,9 +1132,9 @@ const struct drm_edid *intel_opregion_get_edid(struct intel_connector *connector
return drm_edid;
}
-bool intel_opregion_vbt_present(struct drm_i915_private *i915)
+bool intel_opregion_vbt_present(struct intel_display *display)
{
- struct intel_opregion *opregion = i915->display.opregion;
+ struct intel_opregion *opregion = display->opregion;
if (!opregion || !opregion->vbt)
return false;
@@ -1141,9 +1142,9 @@ bool intel_opregion_vbt_present(struct drm_i915_private *i915)
return true;
}
-const void *intel_opregion_get_vbt(struct drm_i915_private *i915, size_t *size)
+const void *intel_opregion_get_vbt(struct intel_display *display, size_t *size)
{
- struct intel_opregion *opregion = i915->display.opregion;
+ struct intel_opregion *opregion = display->opregion;
if (!opregion || !opregion->vbt)
return NULL;
@@ -1154,9 +1155,9 @@ const void *intel_opregion_get_vbt(struct drm_i915_private *i915, size_t *size)
return kmemdup(opregion->vbt, opregion->vbt_size, GFP_KERNEL);
}
-bool intel_opregion_headless_sku(struct drm_i915_private *i915)
+bool intel_opregion_headless_sku(struct intel_display *display)
{
- struct intel_opregion *opregion = i915->display.opregion;
+ struct intel_opregion *opregion = display->opregion;
struct opregion_header *header;
if (!opregion)
@@ -1171,9 +1172,9 @@ bool intel_opregion_headless_sku(struct drm_i915_private *i915)
return opregion->header->pcon & PCON_HEADLESS_SKU;
}
-void intel_opregion_register(struct drm_i915_private *i915)
+void intel_opregion_register(struct intel_display *display)
{
- struct intel_opregion *opregion = i915->display.opregion;
+ struct intel_opregion *opregion = display->opregion;
if (!opregion)
return;
@@ -1184,17 +1185,16 @@ void intel_opregion_register(struct drm_i915_private *i915)
register_acpi_notifier(&opregion->acpi_notifier);
}
- intel_opregion_resume(i915);
+ intel_opregion_resume(display);
}
-static void intel_opregion_resume_display(struct drm_i915_private *i915)
+static void intel_opregion_resume_display(struct intel_display *display)
{
- struct intel_display *display = &i915->display;
struct intel_opregion *opregion = display->opregion;
if (opregion->acpi) {
- intel_didl_outputs(i915);
- intel_setup_cadls(i915);
+ intel_didl_outputs(display);
+ intel_setup_cadls(display);
/*
* Notify BIOS we are ready to handle ACPI video ext notifs.
@@ -1214,22 +1214,22 @@ static void intel_opregion_resume_display(struct drm_i915_private *i915)
intel_dsm_get_bios_data_funcs_supported(display);
}
-void intel_opregion_resume(struct drm_i915_private *i915)
+void intel_opregion_resume(struct intel_display *display)
{
- struct intel_opregion *opregion = i915->display.opregion;
+ struct intel_opregion *opregion = display->opregion;
if (!opregion)
return;
- if (HAS_DISPLAY(i915))
- intel_opregion_resume_display(i915);
+ if (HAS_DISPLAY(display))
+ intel_opregion_resume_display(display);
- intel_opregion_notify_adapter(i915, PCI_D0);
+ intel_opregion_notify_adapter(display, PCI_D0);
}
-static void intel_opregion_suspend_display(struct drm_i915_private *i915)
+static void intel_opregion_suspend_display(struct intel_display *display)
{
- struct intel_opregion *opregion = i915->display.opregion;
+ struct intel_opregion *opregion = display->opregion;
if (opregion->asle)
opregion->asle->ardy = ASLE_ARDY_NOT_READY;
@@ -1240,24 +1240,24 @@ static void intel_opregion_suspend_display(struct drm_i915_private *i915)
opregion->acpi->drdy = 0;
}
-void intel_opregion_suspend(struct drm_i915_private *i915, pci_power_t state)
+void intel_opregion_suspend(struct intel_display *display, pci_power_t state)
{
- struct intel_opregion *opregion = i915->display.opregion;
+ struct intel_opregion *opregion = display->opregion;
if (!opregion)
return;
- intel_opregion_notify_adapter(i915, state);
+ intel_opregion_notify_adapter(display, state);
- if (HAS_DISPLAY(i915))
- intel_opregion_suspend_display(i915);
+ if (HAS_DISPLAY(display))
+ intel_opregion_suspend_display(display);
}
-void intel_opregion_unregister(struct drm_i915_private *i915)
+void intel_opregion_unregister(struct intel_display *display)
{
- struct intel_opregion *opregion = i915->display.opregion;
+ struct intel_opregion *opregion = display->opregion;
- intel_opregion_suspend(i915, PCI_D1);
+ intel_opregion_suspend(display, PCI_D1);
if (!opregion)
return;
@@ -1268,9 +1268,9 @@ void intel_opregion_unregister(struct drm_i915_private *i915)
}
}
-void intel_opregion_cleanup(struct drm_i915_private *i915)
+void intel_opregion_cleanup(struct intel_display *display)
{
- struct intel_opregion *opregion = i915->display.opregion;
+ struct intel_opregion *opregion = display->opregion;
if (!opregion)
return;
@@ -1279,13 +1279,13 @@ void intel_opregion_cleanup(struct drm_i915_private *i915)
if (opregion->rvda)
memunmap(opregion->rvda);
kfree(opregion);
- i915->display.opregion = NULL;
+ display->opregion = NULL;
}
static int intel_opregion_show(struct seq_file *m, void *unused)
{
- struct drm_i915_private *i915 = m->private;
- struct intel_opregion *opregion = i915->display.opregion;
+ struct intel_display *display = m->private;
+ struct intel_opregion *opregion = display->opregion;
if (opregion)
seq_write(m, opregion->header, OPREGION_SIZE);
@@ -1295,10 +1295,10 @@ static int intel_opregion_show(struct seq_file *m, void *unused)
DEFINE_SHOW_ATTRIBUTE(intel_opregion);
-void intel_opregion_debugfs_register(struct drm_i915_private *i915)
+void intel_opregion_debugfs_register(struct intel_display *display)
{
- struct drm_minor *minor = i915->drm.primary;
+ struct drm_minor *minor = display->drm->primary;
debugfs_create_file("i915_opregion", 0444, minor->debugfs_root,
- i915, &intel_opregion_fops);
+ display, &intel_opregion_fops);
}
diff --git a/drivers/gpu/drm/i915/display/intel_opregion.h b/drivers/gpu/drm/i915/display/intel_opregion.h
index 4dcd13c672e4..528e64b6e5b1 100644
--- a/drivers/gpu/drm/i915/display/intel_opregion.h
+++ b/drivers/gpu/drm/i915/display/intel_opregion.h
@@ -28,72 +28,72 @@
#include <linux/pci.h>
#include <linux/types.h>
-struct drm_i915_private;
struct intel_connector;
+struct intel_display;
struct intel_encoder;
#ifdef CONFIG_ACPI
-int intel_opregion_setup(struct drm_i915_private *dev_priv);
-void intel_opregion_cleanup(struct drm_i915_private *i915);
+int intel_opregion_setup(struct intel_display *display);
+void intel_opregion_cleanup(struct intel_display *display);
-void intel_opregion_register(struct drm_i915_private *dev_priv);
-void intel_opregion_unregister(struct drm_i915_private *dev_priv);
+void intel_opregion_register(struct intel_display *display);
+void intel_opregion_unregister(struct intel_display *display);
-void intel_opregion_resume(struct drm_i915_private *dev_priv);
-void intel_opregion_suspend(struct drm_i915_private *dev_priv,
+void intel_opregion_resume(struct intel_display *display);
+void intel_opregion_suspend(struct intel_display *display,
pci_power_t state);
-bool intel_opregion_asle_present(struct drm_i915_private *i915);
-void intel_opregion_asle_intr(struct drm_i915_private *dev_priv);
+bool intel_opregion_asle_present(struct intel_display *display);
+void intel_opregion_asle_intr(struct intel_display *display);
int intel_opregion_notify_encoder(struct intel_encoder *encoder,
bool enable);
-int intel_opregion_notify_adapter(struct drm_i915_private *dev_priv,
+int intel_opregion_notify_adapter(struct intel_display *display,
pci_power_t state);
-int intel_opregion_get_panel_type(struct drm_i915_private *dev_priv);
+int intel_opregion_get_panel_type(struct intel_display *display);
const struct drm_edid *intel_opregion_get_edid(struct intel_connector *connector);
-bool intel_opregion_vbt_present(struct drm_i915_private *i915);
-const void *intel_opregion_get_vbt(struct drm_i915_private *i915, size_t *size);
+bool intel_opregion_vbt_present(struct intel_display *display);
+const void *intel_opregion_get_vbt(struct intel_display *display, size_t *size);
-bool intel_opregion_headless_sku(struct drm_i915_private *i915);
+bool intel_opregion_headless_sku(struct intel_display *display);
-void intel_opregion_debugfs_register(struct drm_i915_private *i915);
+void intel_opregion_debugfs_register(struct intel_display *display);
#else /* CONFIG_ACPI*/
-static inline int intel_opregion_setup(struct drm_i915_private *dev_priv)
+static inline int intel_opregion_setup(struct intel_display *display)
{
return 0;
}
-static inline void intel_opregion_cleanup(struct drm_i915_private *i915)
+static inline void intel_opregion_cleanup(struct intel_display *display)
{
}
-static inline void intel_opregion_register(struct drm_i915_private *dev_priv)
+static inline void intel_opregion_register(struct intel_display *display)
{
}
-static inline void intel_opregion_unregister(struct drm_i915_private *dev_priv)
+static inline void intel_opregion_unregister(struct intel_display *display)
{
}
-static inline void intel_opregion_resume(struct drm_i915_private *dev_priv)
+static inline void intel_opregion_resume(struct intel_display *display)
{
}
-static inline void intel_opregion_suspend(struct drm_i915_private *dev_priv,
+static inline void intel_opregion_suspend(struct intel_display *display,
pci_power_t state)
{
}
-static inline bool intel_opregion_asle_present(struct drm_i915_private *i915)
+static inline bool intel_opregion_asle_present(struct intel_display *display)
{
return false;
}
-static inline void intel_opregion_asle_intr(struct drm_i915_private *dev_priv)
+static inline void intel_opregion_asle_intr(struct intel_display *display)
{
}
@@ -120,23 +120,23 @@ intel_opregion_get_edid(struct intel_connector *connector)
return NULL;
}
-static inline bool intel_opregion_vbt_present(struct drm_i915_private *i915)
+static inline bool intel_opregion_vbt_present(struct intel_display *display)
{
return false;
}
static inline const void *
-intel_opregion_get_vbt(struct drm_i915_private *i915, size_t *size)
+intel_opregion_get_vbt(struct intel_display *display, size_t *size)
{
return NULL;
}
-static inline bool intel_opregion_headless_sku(struct drm_i915_private *i915)
+static inline bool intel_opregion_headless_sku(struct intel_display *display)
{
return false;
}
-static inline void intel_opregion_debugfs_register(struct drm_i915_private *i915)
+static inline void intel_opregion_debugfs_register(struct intel_display *display)
{
}
diff --git a/drivers/gpu/drm/i915/i915_driver.c b/drivers/gpu/drm/i915/i915_driver.c
index fb8e9c2fcea5..b8fbb428087e 100644
--- a/drivers/gpu/drm/i915/i915_driver.c
+++ b/drivers/gpu/drm/i915/i915_driver.c
@@ -442,6 +442,7 @@ static int i915_pcode_init(struct drm_i915_private *i915)
*/
static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)
{
+ struct intel_display *display = &dev_priv->display;
struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
int ret;
@@ -542,7 +543,7 @@ static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)
if (ret)
goto err_msi;
- intel_opregion_setup(dev_priv);
+ intel_opregion_setup(display);
ret = i915_pcode_init(dev_priv);
if (ret)
@@ -559,7 +560,7 @@ static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)
return 0;
err_opregion:
- intel_opregion_cleanup(dev_priv);
+ intel_opregion_cleanup(display);
err_msi:
if (pdev->msi_enabled)
pci_disable_msi(pdev);
@@ -580,11 +581,12 @@ static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)
*/
static void i915_driver_hw_remove(struct drm_i915_private *dev_priv)
{
+ struct intel_display *display = &dev_priv->display;
struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
i915_perf_fini(dev_priv);
- intel_opregion_cleanup(dev_priv);
+ intel_opregion_cleanup(display);
if (pdev->msi_enabled)
pci_disable_msi(pdev);
@@ -1014,6 +1016,7 @@ static int i915_drm_prepare(struct drm_device *dev)
static int i915_drm_suspend(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = to_i915(dev);
+ struct intel_display *display = &dev_priv->display;
struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
pci_power_t opregion_target_state;
@@ -1049,7 +1052,7 @@ static int i915_drm_suspend(struct drm_device *dev)
i915_save_display(dev_priv);
opregion_target_state = suspend_to_idle(dev_priv) ? PCI_D1 : PCI_D3cold;
- intel_opregion_suspend(dev_priv, opregion_target_state);
+ intel_opregion_suspend(display, opregion_target_state);
dev_priv->suspend_count++;
@@ -1138,6 +1141,7 @@ int i915_driver_suspend_switcheroo(struct drm_i915_private *i915,
static int i915_drm_resume(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = to_i915(dev);
+ struct intel_display *display = &dev_priv->display;
struct intel_gt *gt;
int ret, i;
@@ -1205,7 +1209,7 @@ static int i915_drm_resume(struct drm_device *dev)
}
intel_hpd_poll_disable(dev_priv);
- intel_opregion_resume(dev_priv);
+ intel_opregion_resume(display);
intel_fbdev_set_suspend(dev, FBINFO_STATE_RUNNING, false);
@@ -1454,6 +1458,7 @@ static int i915_pm_restore(struct device *kdev)
static int intel_runtime_suspend(struct device *kdev)
{
struct drm_i915_private *dev_priv = kdev_to_i915(kdev);
+ struct intel_display *display = &dev_priv->display;
struct intel_runtime_pm *rpm = &dev_priv->runtime_pm;
struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
struct pci_dev *root_pdev;
@@ -1528,7 +1533,7 @@ static int intel_runtime_suspend(struct device *kdev)
* won't be able to restore them. Since PCI_D3hot matches the
* actual specification and appears to be working, use it.
*/
- intel_opregion_notify_adapter(dev_priv, PCI_D3hot);
+ intel_opregion_notify_adapter(display, PCI_D3hot);
} else {
/*
* current versions of firmware which depend on this opregion
@@ -1537,7 +1542,7 @@ static int intel_runtime_suspend(struct device *kdev)
* to distinguish it from notifications that might be sent via
* the suspend path.
*/
- intel_opregion_notify_adapter(dev_priv, PCI_D1);
+ intel_opregion_notify_adapter(display, PCI_D1);
}
assert_forcewakes_inactive(&dev_priv->uncore);
@@ -1552,6 +1557,7 @@ static int intel_runtime_suspend(struct device *kdev)
static int intel_runtime_resume(struct device *kdev)
{
struct drm_i915_private *dev_priv = kdev_to_i915(kdev);
+ struct intel_display *display = &dev_priv->display;
struct intel_runtime_pm *rpm = &dev_priv->runtime_pm;
struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
struct pci_dev *root_pdev;
@@ -1566,7 +1572,7 @@ static int intel_runtime_resume(struct device *kdev)
drm_WARN_ON_ONCE(&dev_priv->drm, atomic_read(&rpm->wakeref_count));
disable_rpm_wakeref_asserts(rpm);
- intel_opregion_notify_adapter(dev_priv, PCI_D0);
+ intel_opregion_notify_adapter(display, PCI_D0);
root_pdev = pcie_find_root_port(pdev);
if (root_pdev)
diff --git a/drivers/gpu/drm/xe/display/xe_display.c b/drivers/gpu/drm/xe/display/xe_display.c
index ca4468c82078..0e4adde84cb2 100644
--- a/drivers/gpu/drm/xe/display/xe_display.c
+++ b/drivers/gpu/drm/xe/display/xe_display.c
@@ -127,16 +127,18 @@ int xe_display_init_nommio(struct xe_device *xe)
static void xe_display_fini_noirq(void *arg)
{
struct xe_device *xe = arg;
+ struct intel_display *display = &xe->display;
if (!xe->info.enable_display)
return;
intel_display_driver_remove_noirq(xe);
- intel_opregion_cleanup(xe);
+ intel_opregion_cleanup(display);
}
int xe_display_init_noirq(struct xe_device *xe)
{
+ struct intel_display *display = &xe->display;
int err;
if (!xe->info.enable_display)
@@ -145,7 +147,7 @@ int xe_display_init_noirq(struct xe_device *xe)
intel_display_driver_early_probe(xe);
/* Early display init.. */
- intel_opregion_setup(xe);
+ intel_opregion_setup(display);
/*
* Fill the dram structure to get the system dram info. This will be
@@ -159,7 +161,7 @@ int xe_display_init_noirq(struct xe_device *xe)
err = intel_display_driver_probe_noirq(xe);
if (err) {
- intel_opregion_cleanup(xe);
+ intel_opregion_cleanup(display);
return err;
}
@@ -250,11 +252,13 @@ void xe_display_irq_handler(struct xe_device *xe, u32 master_ctl)
void xe_display_irq_enable(struct xe_device *xe, u32 gu_misc_iir)
{
+ struct intel_display *display = &xe->display;
+
if (!xe->info.enable_display)
return;
if (gu_misc_iir & GU_MISC_GSE)
- intel_opregion_asle_intr(xe);
+ intel_opregion_asle_intr(display);
}
void xe_display_irq_reset(struct xe_device *xe)
@@ -285,6 +289,7 @@ static bool suspend_to_idle(void)
void xe_display_pm_suspend(struct xe_device *xe, bool runtime)
{
+ struct intel_display *display = &xe->display;
bool s2idle = suspend_to_idle();
if (!xe->info.enable_display)
return;
@@ -306,7 +311,7 @@ void xe_display_pm_suspend(struct xe_device *xe, bool runtime)
intel_encoder_suspend_all(&xe->display);
- intel_opregion_suspend(xe, s2idle ? PCI_D1 : PCI_D3cold);
+ intel_opregion_suspend(display, s2idle ? PCI_D1 : PCI_D3cold);
intel_fbdev_set_suspend(&xe->drm, FBINFO_STATE_SUSPENDED, true);
@@ -336,6 +341,8 @@ void xe_display_pm_resume_early(struct xe_device *xe)
void xe_display_pm_resume(struct xe_device *xe, bool runtime)
{
+ struct intel_display *display = &xe->display;
+
if (!xe->info.enable_display)
return;
@@ -356,7 +363,7 @@ void xe_display_pm_resume(struct xe_device *xe, bool runtime)
if (has_display(xe))
drm_kms_helper_poll_enable(&xe->drm);
- intel_opregion_resume(xe);
+ intel_opregion_resume(display);
intel_fbdev_set_suspend(&xe->drm, FBINFO_STATE_RUNNING, false);
--
2.39.2
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 4/4] drm/i915/bios: convert to struct intel_display
2024-07-31 16:44 [PATCH 0/4] drm/i915: struct intel_display conversions Jani Nikula
` (2 preceding siblings ...)
2024-07-31 16:44 ` [PATCH 3/4] drm/i915/opregion: convert to struct intel_display Jani Nikula
@ 2024-07-31 16:44 ` Jani Nikula
2024-08-06 15:23 ` Imre Deak
2024-07-31 17:38 ` ✗ Fi.CI.SPARSE: warning for drm/i915: struct intel_display conversions Patchwork
2024-07-31 17:53 ` ✗ Fi.CI.BAT: failure " Patchwork
5 siblings, 1 reply; 12+ messages in thread
From: Jani Nikula @ 2024-07-31 16:44 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: jani.nikula
Going forward, struct intel_display shall replace struct
drm_i915_private as the main display device data pointer type. Convert
intel_bios.[ch] to struct intel_display.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/display/g4x_dp.c | 3 +-
drivers/gpu/drm/i915/display/g4x_hdmi.c | 3 +-
drivers/gpu/drm/i915/display/icl_dsi.c | 3 +-
drivers/gpu/drm/i915/display/intel_bios.c | 844 +++++++++---------
drivers/gpu/drm/i915/display/intel_bios.h | 28 +-
.../gpu/drm/i915/display/intel_combo_phy.c | 8 +-
drivers/gpu/drm/i915/display/intel_ddi.c | 3 +-
drivers/gpu/drm/i915/display/intel_ddi.h | 3 +-
drivers/gpu/drm/i915/display/intel_display.c | 9 +-
.../drm/i915/display/intel_display_debugfs.c | 2 +-
.../drm/i915/display/intel_display_driver.c | 8 +-
.../gpu/drm/i915/display/intel_display_irq.c | 3 +-
drivers/gpu/drm/i915/display/intel_dp.c | 8 +-
drivers/gpu/drm/i915/display/intel_lvds.c | 5 +-
drivers/gpu/drm/i915/display/intel_opregion.c | 5 +-
drivers/gpu/drm/i915/display/intel_sdvo.c | 3 +-
drivers/gpu/drm/i915/display/intel_tv.c | 3 +-
drivers/gpu/drm/i915/display/vlv_dsi.c | 5 +-
18 files changed, 495 insertions(+), 451 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/g4x_dp.c b/drivers/gpu/drm/i915/display/g4x_dp.c
index a8e746a0f670..c2128b46bdbd 100644
--- a/drivers/gpu/drm/i915/display/g4x_dp.c
+++ b/drivers/gpu/drm/i915/display/g4x_dp.c
@@ -1279,6 +1279,7 @@ static const struct drm_encoder_funcs intel_dp_enc_funcs = {
bool g4x_dp_init(struct drm_i915_private *dev_priv,
i915_reg_t output_reg, enum port port)
{
+ struct intel_display *display = &dev_priv->display;
const struct intel_bios_encoder_data *devdata;
struct intel_digital_port *dig_port;
struct intel_encoder *intel_encoder;
@@ -1288,7 +1289,7 @@ bool g4x_dp_init(struct drm_i915_private *dev_priv,
if (!assert_port_valid(dev_priv, port))
return false;
- devdata = intel_bios_encoder_data_lookup(dev_priv, port);
+ devdata = intel_bios_encoder_data_lookup(display, port);
/* FIXME bail? */
if (!devdata)
diff --git a/drivers/gpu/drm/i915/display/g4x_hdmi.c b/drivers/gpu/drm/i915/display/g4x_hdmi.c
index 8096492b3fad..46f23bdb4c17 100644
--- a/drivers/gpu/drm/i915/display/g4x_hdmi.c
+++ b/drivers/gpu/drm/i915/display/g4x_hdmi.c
@@ -686,6 +686,7 @@ static bool assert_hdmi_port_valid(struct drm_i915_private *i915, enum port port
void g4x_hdmi_init(struct drm_i915_private *dev_priv,
i915_reg_t hdmi_reg, enum port port)
{
+ struct intel_display *display = &dev_priv->display;
const struct intel_bios_encoder_data *devdata;
struct intel_digital_port *dig_port;
struct intel_encoder *intel_encoder;
@@ -697,7 +698,7 @@ void g4x_hdmi_init(struct drm_i915_private *dev_priv,
if (!assert_hdmi_port_valid(dev_priv, port))
return;
- devdata = intel_bios_encoder_data_lookup(dev_priv, port);
+ devdata = intel_bios_encoder_data_lookup(display, port);
/* FIXME bail? */
if (!devdata)
diff --git a/drivers/gpu/drm/i915/display/icl_dsi.c b/drivers/gpu/drm/i915/display/icl_dsi.c
index ae8f6617aa70..382242e3ced4 100644
--- a/drivers/gpu/drm/i915/display/icl_dsi.c
+++ b/drivers/gpu/drm/i915/display/icl_dsi.c
@@ -1944,6 +1944,7 @@ static void icl_dsi_add_properties(struct intel_connector *connector)
void icl_dsi_init(struct drm_i915_private *dev_priv,
const struct intel_bios_encoder_data *devdata)
{
+ struct intel_display *display = &dev_priv->display;
struct intel_dsi *intel_dsi;
struct intel_encoder *encoder;
struct intel_connector *intel_connector;
@@ -2007,7 +2008,7 @@ void icl_dsi_init(struct drm_i915_private *dev_priv,
intel_dsi->panel_power_off_time = ktime_get_boottime();
- intel_bios_init_panel_late(dev_priv, &intel_connector->panel, encoder->devdata, NULL);
+ intel_bios_init_panel_late(display, &intel_connector->panel, encoder->devdata, NULL);
mutex_lock(&dev_priv->drm.mode_config.mutex);
intel_panel_add_vbt_lfp_fixed_mode(intel_connector);
diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
index 2978b1eea73c..7e4006f0b4cb 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.c
+++ b/drivers/gpu/drm/i915/display/intel_bios.c
@@ -65,7 +65,7 @@
/* Wrapper for VBT child device config */
struct intel_bios_encoder_data {
- struct drm_i915_private *i915;
+ struct intel_display *display;
struct child_device_config child;
struct dsc_compression_parameters_entry *dsc;
@@ -144,12 +144,12 @@ struct bdb_block_entry {
};
static const void *
-bdb_find_section(struct drm_i915_private *i915,
+bdb_find_section(struct intel_display *display,
enum bdb_block_id section_id)
{
struct bdb_block_entry *entry;
- list_for_each_entry(entry, &i915->display.vbt.bdb_blocks, node) {
+ list_for_each_entry(entry, &display->vbt.bdb_blocks, node) {
if (entry->section_id == section_id)
return entry->data + 3;
}
@@ -199,12 +199,12 @@ static const struct {
.min_size = sizeof(struct bdb_generic_dtd), },
};
-static size_t lfp_data_min_size(struct drm_i915_private *i915)
+static size_t lfp_data_min_size(struct intel_display *display)
{
const struct bdb_lfp_data_ptrs *ptrs;
size_t size;
- ptrs = bdb_find_section(i915, BDB_LFP_DATA_PTRS);
+ ptrs = bdb_find_section(display, BDB_LFP_DATA_PTRS);
if (!ptrs)
return 0;
@@ -359,7 +359,7 @@ static void next_lfp_data_ptr(struct lfp_data_ptr_table *next,
next->offset = prev->offset + size;
}
-static void *generate_lfp_data_ptrs(struct drm_i915_private *i915,
+static void *generate_lfp_data_ptrs(struct intel_display *display,
const void *bdb)
{
int i, size, table_size, block_size, offset, fp_timing_size;
@@ -373,7 +373,7 @@ static void *generate_lfp_data_ptrs(struct drm_i915_private *i915,
* include block 41 and thus we don't need to
* generate one.
*/
- if (i915->display.vbt.version < 155)
+ if (display->vbt.version < 155)
return NULL;
fp_timing_size = 38;
@@ -382,7 +382,7 @@ static void *generate_lfp_data_ptrs(struct drm_i915_private *i915,
if (!block)
return NULL;
- drm_dbg_kms(&i915->drm, "Generating LFP data table pointers\n");
+ drm_dbg_kms(display->drm, "Generating LFP data table pointers\n");
block_size = get_blocksize(block);
@@ -450,7 +450,7 @@ static void *generate_lfp_data_ptrs(struct drm_i915_private *i915,
}
static void
-init_bdb_block(struct drm_i915_private *i915,
+init_bdb_block(struct intel_display *display,
const void *bdb, enum bdb_block_id section_id,
size_t min_size)
{
@@ -463,14 +463,14 @@ init_bdb_block(struct drm_i915_private *i915,
/* Modern VBTs lack the LFP data table pointers block, make one up */
if (!block && section_id == BDB_LFP_DATA_PTRS) {
- temp_block = generate_lfp_data_ptrs(i915, bdb);
+ temp_block = generate_lfp_data_ptrs(display, bdb);
if (temp_block)
block = temp_block + 3;
}
if (!block)
return;
- drm_WARN(&i915->drm, min_size == 0,
+ drm_WARN(display->drm, min_size == 0,
"Block %d min_size is zero\n", section_id);
block_size = get_blocksize(block);
@@ -494,20 +494,22 @@ init_bdb_block(struct drm_i915_private *i915,
kfree(temp_block);
- drm_dbg_kms(&i915->drm, "Found BDB block %d (size %zu, min size %zu)\n",
+ drm_dbg_kms(display->drm,
+ "Found BDB block %d (size %zu, min size %zu)\n",
section_id, block_size, min_size);
if (section_id == BDB_LFP_DATA_PTRS &&
!fixup_lfp_data_ptrs(bdb, entry->data + 3)) {
- drm_err(&i915->drm, "VBT has malformed LFP data table pointers\n");
+ drm_err(display->drm,
+ "VBT has malformed LFP data table pointers\n");
kfree(entry);
return;
}
- list_add_tail(&entry->node, &i915->display.vbt.bdb_blocks);
+ list_add_tail(&entry->node, &display->vbt.bdb_blocks);
}
-static void init_bdb_blocks(struct drm_i915_private *i915,
+static void init_bdb_blocks(struct intel_display *display,
const void *bdb)
{
int i;
@@ -517,14 +519,14 @@ static void init_bdb_blocks(struct drm_i915_private *i915,
size_t min_size = bdb_blocks[i].min_size;
if (section_id == BDB_LFP_DATA)
- min_size = lfp_data_min_size(i915);
+ min_size = lfp_data_min_size(display);
- init_bdb_block(i915, bdb, section_id, min_size);
+ init_bdb_block(display, bdb, section_id, min_size);
}
}
static void
-fill_detail_timing_data(struct drm_i915_private *i915,
+fill_detail_timing_data(struct intel_display *display,
struct drm_display_mode *panel_fixed_mode,
const struct bdb_edid_dtd *dvo_timing)
{
@@ -567,12 +569,12 @@ fill_detail_timing_data(struct drm_i915_private *i915,
/* Some VBTs have bogus h/vsync_end values */
if (panel_fixed_mode->hsync_end > panel_fixed_mode->htotal) {
- drm_dbg_kms(&i915->drm, "reducing hsync_end %d->%d\n",
+ drm_dbg_kms(display->drm, "reducing hsync_end %d->%d\n",
panel_fixed_mode->hsync_end, panel_fixed_mode->htotal);
panel_fixed_mode->hsync_end = panel_fixed_mode->htotal;
}
if (panel_fixed_mode->vsync_end > panel_fixed_mode->vtotal) {
- drm_dbg_kms(&i915->drm, "reducing vsync_end %d->%d\n",
+ drm_dbg_kms(display->drm, "reducing vsync_end %d->%d\n",
panel_fixed_mode->vsync_end, panel_fixed_mode->vtotal);
panel_fixed_mode->vsync_end = panel_fixed_mode->vtotal;
}
@@ -617,28 +619,26 @@ get_lfp_data_tail(const struct bdb_lfp_data *data,
return NULL;
}
-static int opregion_get_panel_type(struct drm_i915_private *i915,
+static int opregion_get_panel_type(struct intel_display *display,
const struct intel_bios_encoder_data *devdata,
const struct drm_edid *drm_edid, bool use_fallback)
{
- struct intel_display *display = &i915->display;
-
return intel_opregion_get_panel_type(display);
}
-static int vbt_get_panel_type(struct drm_i915_private *i915,
+static int vbt_get_panel_type(struct intel_display *display,
const struct intel_bios_encoder_data *devdata,
const struct drm_edid *drm_edid, bool use_fallback)
{
const struct bdb_lfp_options *lfp_options;
- lfp_options = bdb_find_section(i915, BDB_LFP_OPTIONS);
+ lfp_options = bdb_find_section(display, BDB_LFP_OPTIONS);
if (!lfp_options)
return -1;
if (lfp_options->panel_type > 0xf &&
lfp_options->panel_type != 0xff) {
- drm_dbg_kms(&i915->drm, "Invalid VBT panel type 0x%x\n",
+ drm_dbg_kms(display->drm, "Invalid VBT panel type 0x%x\n",
lfp_options->panel_type);
return -1;
}
@@ -646,12 +646,13 @@ static int vbt_get_panel_type(struct drm_i915_private *i915,
if (devdata && devdata->child.handle == DEVICE_HANDLE_LFP2)
return lfp_options->panel_type2;
- drm_WARN_ON(&i915->drm, devdata && devdata->child.handle != DEVICE_HANDLE_LFP1);
+ drm_WARN_ON(display->drm,
+ devdata && devdata->child.handle != DEVICE_HANDLE_LFP1);
return lfp_options->panel_type;
}
-static int pnpid_get_panel_type(struct drm_i915_private *i915,
+static int pnpid_get_panel_type(struct intel_display *display,
const struct intel_bios_encoder_data *devdata,
const struct drm_edid *drm_edid, bool use_fallback)
{
@@ -670,14 +671,14 @@ static int pnpid_get_panel_type(struct drm_i915_private *i915,
product_id_nodate.week_of_manufacture = 0;
product_id_nodate.year_of_manufacture = 0;
- p = drm_dbg_printer(&i915->drm, DRM_UT_KMS, "EDID");
+ p = drm_dbg_printer(display->drm, DRM_UT_KMS, "EDID");
drm_edid_print_product_id(&p, &product_id, true);
- ptrs = bdb_find_section(i915, BDB_LFP_DATA_PTRS);
+ ptrs = bdb_find_section(display, BDB_LFP_DATA_PTRS);
if (!ptrs)
return -1;
- data = bdb_find_section(i915, BDB_LFP_DATA);
+ data = bdb_find_section(display, BDB_LFP_DATA);
if (!data)
return -1;
@@ -701,7 +702,7 @@ static int pnpid_get_panel_type(struct drm_i915_private *i915,
return best;
}
-static int fallback_get_panel_type(struct drm_i915_private *i915,
+static int fallback_get_panel_type(struct intel_display *display,
const struct intel_bios_encoder_data *devdata,
const struct drm_edid *drm_edid, bool use_fallback)
{
@@ -715,13 +716,13 @@ enum panel_type {
PANEL_TYPE_FALLBACK,
};
-static int get_panel_type(struct drm_i915_private *i915,
+static int get_panel_type(struct intel_display *display,
const struct intel_bios_encoder_data *devdata,
const struct drm_edid *drm_edid, bool use_fallback)
{
struct {
const char *name;
- int (*get_panel_type)(struct drm_i915_private *i915,
+ int (*get_panel_type)(struct intel_display *display,
const struct intel_bios_encoder_data *devdata,
const struct drm_edid *drm_edid, bool use_fallback);
int panel_type;
@@ -746,14 +747,14 @@ static int get_panel_type(struct drm_i915_private *i915,
int i;
for (i = 0; i < ARRAY_SIZE(panel_types); i++) {
- panel_types[i].panel_type = panel_types[i].get_panel_type(i915, devdata,
+ panel_types[i].panel_type = panel_types[i].get_panel_type(display, devdata,
drm_edid, use_fallback);
- drm_WARN_ON(&i915->drm, panel_types[i].panel_type > 0xf &&
+ drm_WARN_ON(display->drm, panel_types[i].panel_type > 0xf &&
panel_types[i].panel_type != 0xff);
if (panel_types[i].panel_type >= 0)
- drm_dbg_kms(&i915->drm, "Panel type (%s): %d\n",
+ drm_dbg_kms(display->drm, "Panel type (%s): %d\n",
panel_types[i].name, panel_types[i].panel_type);
}
@@ -768,7 +769,7 @@ static int get_panel_type(struct drm_i915_private *i915,
else
i = PANEL_TYPE_FALLBACK;
- drm_dbg_kms(&i915->drm, "Selected panel type (%s): %d\n",
+ drm_dbg_kms(display->drm, "Selected panel type (%s): %d\n",
panel_types[i].name, panel_types[i].panel_type);
return panel_types[i].panel_type;
@@ -786,14 +787,14 @@ static bool panel_bool(unsigned int value, int panel_type)
/* Parse general panel options */
static void
-parse_panel_options(struct drm_i915_private *i915,
+parse_panel_options(struct intel_display *display,
struct intel_panel *panel)
{
const struct bdb_lfp_options *lfp_options;
int panel_type = panel->vbt.panel_type;
int drrs_mode;
- lfp_options = bdb_find_section(i915, BDB_LFP_OPTIONS);
+ lfp_options = bdb_find_section(display, BDB_LFP_OPTIONS);
if (!lfp_options)
return;
@@ -817,23 +818,23 @@ parse_panel_options(struct drm_i915_private *i915,
switch (drrs_mode) {
case 0:
panel->vbt.drrs_type = DRRS_TYPE_STATIC;
- drm_dbg_kms(&i915->drm, "DRRS supported mode is static\n");
+ drm_dbg_kms(display->drm, "DRRS supported mode is static\n");
break;
case 2:
panel->vbt.drrs_type = DRRS_TYPE_SEAMLESS;
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"DRRS supported mode is seamless\n");
break;
default:
panel->vbt.drrs_type = DRRS_TYPE_NONE;
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"DRRS not supported (VBT input)\n");
break;
}
}
static void
-parse_lfp_panel_dtd(struct drm_i915_private *i915,
+parse_lfp_panel_dtd(struct intel_display *display,
struct intel_panel *panel,
const struct bdb_lfp_data *lfp_data,
const struct bdb_lfp_data_ptrs *lfp_data_ptrs)
@@ -851,11 +852,11 @@ parse_lfp_panel_dtd(struct drm_i915_private *i915,
if (!panel_fixed_mode)
return;
- fill_detail_timing_data(i915, panel_fixed_mode, panel_dvo_timing);
+ fill_detail_timing_data(display, panel_fixed_mode, panel_dvo_timing);
panel->vbt.lfp_vbt_mode = panel_fixed_mode;
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"Found panel mode in BIOS VBT legacy lfp table: " DRM_MODE_FMT "\n",
DRM_MODE_ARG(panel_fixed_mode));
@@ -867,14 +868,14 @@ parse_lfp_panel_dtd(struct drm_i915_private *i915,
if (fp_timing->x_res == panel_fixed_mode->hdisplay &&
fp_timing->y_res == panel_fixed_mode->vdisplay) {
panel->vbt.bios_lvds_val = fp_timing->lvds_reg_val;
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"VBT initial LVDS value %x\n",
panel->vbt.bios_lvds_val);
}
}
static void
-parse_lfp_data(struct drm_i915_private *i915,
+parse_lfp_data(struct intel_display *display,
struct intel_panel *panel)
{
const struct bdb_lfp_data *data;
@@ -884,41 +885,41 @@ parse_lfp_data(struct drm_i915_private *i915,
struct drm_printer p;
int panel_type = panel->vbt.panel_type;
- ptrs = bdb_find_section(i915, BDB_LFP_DATA_PTRS);
+ ptrs = bdb_find_section(display, BDB_LFP_DATA_PTRS);
if (!ptrs)
return;
- data = bdb_find_section(i915, BDB_LFP_DATA);
+ data = bdb_find_section(display, BDB_LFP_DATA);
if (!data)
return;
if (!panel->vbt.lfp_vbt_mode)
- parse_lfp_panel_dtd(i915, panel, data, ptrs);
+ parse_lfp_panel_dtd(display, panel, data, ptrs);
pnp_id = get_lfp_pnp_id(data, ptrs, panel_type);
- p = drm_dbg_printer(&i915->drm, DRM_UT_KMS, "Panel");
+ p = drm_dbg_printer(display->drm, DRM_UT_KMS, "Panel");
drm_edid_print_product_id(&p, pnp_id, false);
tail = get_lfp_data_tail(data, ptrs);
if (!tail)
return;
- drm_dbg_kms(&i915->drm, "Panel name: %.*s\n",
+ drm_dbg_kms(display->drm, "Panel name: %.*s\n",
(int)sizeof(tail->panel_name[0].name),
tail->panel_name[panel_type].name);
- if (i915->display.vbt.version >= 188) {
+ if (display->vbt.version >= 188) {
panel->vbt.seamless_drrs_min_refresh_rate =
tail->seamless_drrs_min_refresh_rate[panel_type];
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"Seamless DRRS min refresh rate: %d Hz\n",
panel->vbt.seamless_drrs_min_refresh_rate);
}
}
static void
-parse_generic_dtd(struct drm_i915_private *i915,
+parse_generic_dtd(struct intel_display *display,
struct intel_panel *panel)
{
const struct bdb_generic_dtd *generic_dtd;
@@ -934,20 +935,20 @@ parse_generic_dtd(struct drm_i915_private *i915,
* first on VBT >= 229, but still fall back to trying the old LFP
* block if that fails.
*/
- if (i915->display.vbt.version < 229)
+ if (display->vbt.version < 229)
return;
- generic_dtd = bdb_find_section(i915, BDB_GENERIC_DTD);
+ generic_dtd = bdb_find_section(display, BDB_GENERIC_DTD);
if (!generic_dtd)
return;
if (generic_dtd->gdtd_size < sizeof(struct generic_dtd_entry)) {
- drm_err(&i915->drm, "GDTD size %u is too small.\n",
+ drm_err(display->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(&i915->drm, "Unexpected GDTD size %u\n",
+ drm_err(display->drm, "Unexpected GDTD size %u\n",
generic_dtd->gdtd_size);
/* DTD has unknown fields, but keep going */
}
@@ -955,7 +956,7 @@ parse_generic_dtd(struct drm_i915_private *i915,
num_dtd = (get_blocksize(generic_dtd) -
sizeof(struct bdb_generic_dtd)) / generic_dtd->gdtd_size;
if (panel->vbt.panel_type >= num_dtd) {
- drm_err(&i915->drm,
+ drm_err(display->drm,
"Panel type %d not found in table of %d DTD's\n",
panel->vbt.panel_type, num_dtd);
return;
@@ -1000,7 +1001,7 @@ parse_generic_dtd(struct drm_i915_private *i915,
else
panel_fixed_mode->flags |= DRM_MODE_FLAG_NVSYNC;
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"Found panel mode in BIOS VBT generic dtd table: " DRM_MODE_FMT "\n",
DRM_MODE_ARG(panel_fixed_mode));
@@ -1008,7 +1009,7 @@ parse_generic_dtd(struct drm_i915_private *i915,
}
static void
-parse_lfp_backlight(struct drm_i915_private *i915,
+parse_lfp_backlight(struct intel_display *display,
struct intel_panel *panel)
{
const struct bdb_lfp_backlight *backlight_data;
@@ -1016,12 +1017,12 @@ parse_lfp_backlight(struct drm_i915_private *i915,
int panel_type = panel->vbt.panel_type;
u16 level;
- backlight_data = bdb_find_section(i915, BDB_LFP_BACKLIGHT);
+ backlight_data = bdb_find_section(display, BDB_LFP_BACKLIGHT);
if (!backlight_data)
return;
if (backlight_data->entry_size != sizeof(backlight_data->data[0])) {
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"Unsupported backlight data entry size %u\n",
backlight_data->entry_size);
return;
@@ -1031,7 +1032,7 @@ parse_lfp_backlight(struct drm_i915_private *i915,
panel->vbt.backlight.present = entry->type == BDB_BACKLIGHT_TYPE_PWM;
if (!panel->vbt.backlight.present) {
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"PWM backlight not present in VBT (type %u)\n",
entry->type);
return;
@@ -1039,7 +1040,7 @@ parse_lfp_backlight(struct drm_i915_private *i915,
panel->vbt.backlight.type = INTEL_BACKLIGHT_DISPLAY_DDI;
panel->vbt.backlight.controller = 0;
- if (i915->display.vbt.version >= 191) {
+ if (display->vbt.version >= 191) {
const struct lfp_backlight_control_method *method;
method = &backlight_data->backlight_control[panel_type];
@@ -1050,14 +1051,14 @@ parse_lfp_backlight(struct drm_i915_private *i915,
panel->vbt.backlight.pwm_freq_hz = entry->pwm_freq_hz;
panel->vbt.backlight.active_low_pwm = entry->active_low_pwm;
- if (i915->display.vbt.version >= 234) {
+ if (display->vbt.version >= 234) {
u16 min_level;
bool scale;
level = backlight_data->brightness_level[panel_type].level;
min_level = backlight_data->brightness_min_level[panel_type].level;
- if (i915->display.vbt.version >= 236)
+ if (display->vbt.version >= 236)
scale = backlight_data->brightness_precision_bits[panel_type] == 16;
else
scale = level > 255;
@@ -1066,7 +1067,7 @@ parse_lfp_backlight(struct drm_i915_private *i915,
min_level = min_level / 255;
if (min_level > 255) {
- drm_warn(&i915->drm, "Brightness min level > 255\n");
+ drm_warn(display->drm, "Brightness min level > 255\n");
level = 255;
}
panel->vbt.backlight.min_brightness = min_level;
@@ -1078,13 +1079,13 @@ parse_lfp_backlight(struct drm_i915_private *i915,
panel->vbt.backlight.min_brightness = entry->min_brightness;
}
- if (i915->display.vbt.version >= 239)
+ if (display->vbt.version >= 239)
panel->vbt.backlight.hdr_dpcd_refresh_timeout =
DIV_ROUND_UP(backlight_data->hdr_dpcd_refresh_timeout[panel_type], 100);
else
panel->vbt.backlight.hdr_dpcd_refresh_timeout = 30;
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"VBT backlight PWM modulation frequency %u Hz, "
"active %s, min brightness %u, level %u, controller %u\n",
panel->vbt.backlight.pwm_freq_hz,
@@ -1095,16 +1096,16 @@ parse_lfp_backlight(struct drm_i915_private *i915,
}
static void
-parse_sdvo_lvds_data(struct drm_i915_private *i915,
+parse_sdvo_lvds_data(struct intel_display *display,
struct intel_panel *panel)
{
const struct bdb_sdvo_lvds_dtd *dtd;
struct drm_display_mode *panel_fixed_mode;
int index;
- index = i915->display.params.vbt_sdvo_panel_type;
+ index = display->params.vbt_sdvo_panel_type;
if (index == -2) {
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"Ignore SDVO LVDS mode from BIOS VBT tables.\n");
return;
}
@@ -1112,14 +1113,14 @@ parse_sdvo_lvds_data(struct drm_i915_private *i915,
if (index == -1) {
const struct bdb_sdvo_lvds_options *sdvo_lvds_options;
- sdvo_lvds_options = bdb_find_section(i915, BDB_SDVO_LVDS_OPTIONS);
+ sdvo_lvds_options = bdb_find_section(display, BDB_SDVO_LVDS_OPTIONS);
if (!sdvo_lvds_options)
return;
index = sdvo_lvds_options->panel_type;
}
- dtd = bdb_find_section(i915, BDB_SDVO_LVDS_DTD);
+ dtd = bdb_find_section(display, BDB_SDVO_LVDS_DTD);
if (!dtd)
return;
@@ -1130,7 +1131,8 @@ parse_sdvo_lvds_data(struct drm_i915_private *i915,
* it here to be sure.
*/
if (index >= ARRAY_SIZE(dtd->dtd)) {
- drm_err(&i915->drm, "index %d is larger than dtd->dtd[4] array\n",
+ drm_err(display->drm,
+ "index %d is larger than dtd->dtd[4] array\n",
index);
return;
}
@@ -1139,19 +1141,19 @@ parse_sdvo_lvds_data(struct drm_i915_private *i915,
if (!panel_fixed_mode)
return;
- fill_detail_timing_data(i915, panel_fixed_mode, &dtd->dtd[index]);
+ fill_detail_timing_data(display, panel_fixed_mode, &dtd->dtd[index]);
panel->vbt.sdvo_lvds_vbt_mode = panel_fixed_mode;
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"Found SDVO LVDS mode in BIOS VBT tables: " DRM_MODE_FMT "\n",
DRM_MODE_ARG(panel_fixed_mode));
}
-static int intel_bios_ssc_frequency(struct drm_i915_private *i915,
+static int intel_bios_ssc_frequency(struct intel_display *display,
bool alternate)
{
- switch (DISPLAY_VER(i915)) {
+ switch (DISPLAY_VER(display)) {
case 2:
return alternate ? 66667 : 48000;
case 3:
@@ -1163,45 +1165,46 @@ static int intel_bios_ssc_frequency(struct drm_i915_private *i915,
}
static void
-parse_general_features(struct drm_i915_private *i915)
+parse_general_features(struct intel_display *display)
{
+ struct drm_i915_private *i915 = to_i915(display->drm);
const struct bdb_general_features *general;
- general = bdb_find_section(i915, BDB_GENERAL_FEATURES);
+ general = bdb_find_section(display, BDB_GENERAL_FEATURES);
if (!general)
return;
- i915->display.vbt.int_tv_support = general->int_tv_support;
+ display->vbt.int_tv_support = general->int_tv_support;
/* int_crt_support can't be trusted on earlier platforms */
- if (i915->display.vbt.version >= 155 &&
- (HAS_DDI(i915) || IS_VALLEYVIEW(i915)))
- i915->display.vbt.int_crt_support = general->int_crt_support;
- i915->display.vbt.lvds_use_ssc = general->enable_ssc;
- i915->display.vbt.lvds_ssc_freq =
- intel_bios_ssc_frequency(i915, general->ssc_freq);
- i915->display.vbt.display_clock_mode = general->display_clock_mode;
- i915->display.vbt.fdi_rx_polarity_inverted = general->fdi_rx_polarity_inverted;
- if (i915->display.vbt.version >= 181) {
- i915->display.vbt.orientation = general->rotate_180 ?
+ if (display->vbt.version >= 155 &&
+ (HAS_DDI(display) || IS_VALLEYVIEW(i915)))
+ display->vbt.int_crt_support = general->int_crt_support;
+ display->vbt.lvds_use_ssc = general->enable_ssc;
+ display->vbt.lvds_ssc_freq =
+ intel_bios_ssc_frequency(display, general->ssc_freq);
+ display->vbt.display_clock_mode = general->display_clock_mode;
+ display->vbt.fdi_rx_polarity_inverted = general->fdi_rx_polarity_inverted;
+ if (display->vbt.version >= 181) {
+ display->vbt.orientation = general->rotate_180 ?
DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP :
DRM_MODE_PANEL_ORIENTATION_NORMAL;
} else {
- i915->display.vbt.orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN;
+ display->vbt.orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN;
}
- if (i915->display.vbt.version >= 249 && general->afc_startup_config) {
- i915->display.vbt.override_afc_startup = true;
- i915->display.vbt.override_afc_startup_val = general->afc_startup_config == 0x1 ? 0x0 : 0x7;
+ if (display->vbt.version >= 249 && general->afc_startup_config) {
+ display->vbt.override_afc_startup = true;
+ display->vbt.override_afc_startup_val = general->afc_startup_config == 1 ? 0 : 7;
}
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->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",
- i915->display.vbt.int_tv_support,
- i915->display.vbt.int_crt_support,
- i915->display.vbt.lvds_use_ssc,
- i915->display.vbt.lvds_ssc_freq,
- i915->display.vbt.display_clock_mode,
- i915->display.vbt.fdi_rx_polarity_inverted);
+ display->vbt.int_tv_support,
+ display->vbt.int_crt_support,
+ display->vbt.lvds_use_ssc,
+ display->vbt.lvds_ssc_freq,
+ display->vbt.display_clock_mode,
+ display->vbt.fdi_rx_polarity_inverted);
}
static const struct child_device_config *
@@ -1211,7 +1214,7 @@ child_device_ptr(const struct bdb_general_definitions *defs, int i)
}
static void
-parse_sdvo_device_mapping(struct drm_i915_private *i915)
+parse_sdvo_device_mapping(struct intel_display *display)
{
const struct intel_bios_encoder_data *devdata;
int count = 0;
@@ -1220,12 +1223,12 @@ parse_sdvo_device_mapping(struct drm_i915_private *i915)
* 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_DISPLAY_VER(i915, 3, 7)) {
- drm_dbg_kms(&i915->drm, "Skipping SDVO device mapping\n");
+ if (!IS_DISPLAY_VER(display, 3, 7)) {
+ drm_dbg_kms(display->drm, "Skipping SDVO device mapping\n");
return;
}
- list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) {
+ list_for_each_entry(devdata, &display->vbt.display_devices, node) {
const struct child_device_config *child = &devdata->child;
struct sdvo_device_mapping *mapping;
@@ -1240,17 +1243,17 @@ parse_sdvo_device_mapping(struct drm_i915_private *i915)
if (child->dvo_port != DEVICE_PORT_DVOB &&
child->dvo_port != DEVICE_PORT_DVOC) {
/* skip the incorrect SDVO port */
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"Incorrect SDVO port. Skip it\n");
continue;
}
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"the SDVO device with target addr %2x is found on"
" %s port\n",
child->target_addr,
(child->dvo_port == DEVICE_PORT_DVOB) ?
"SDVOB" : "SDVOC");
- mapping = &i915->display.vbt.sdvo_mappings[child->dvo_port - 1];
+ mapping = &display->vbt.sdvo_mappings[child->dvo_port - 1];
if (!mapping->initialized) {
mapping->dvo_port = child->dvo_port;
mapping->target_addr = child->target_addr;
@@ -1258,20 +1261,20 @@ parse_sdvo_device_mapping(struct drm_i915_private *i915)
mapping->ddc_pin = child->ddc_pin;
mapping->i2c_pin = child->i2c_pin;
mapping->initialized = 1;
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"SDVO device: dvo=%x, addr=%x, wiring=%d, ddc_pin=%d, i2c_pin=%d\n",
mapping->dvo_port, mapping->target_addr,
mapping->dvo_wiring, mapping->ddc_pin,
mapping->i2c_pin);
} else {
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"Maybe one SDVO port is shared by "
"two SDVO device.\n");
}
if (child->target2_addr) {
/* Maybe this is a SDVO device with multiple inputs */
/* And the mapping info is not added */
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"there exists the target2_addr. Maybe this"
" is a SDVO device with multiple inputs.\n");
}
@@ -1280,28 +1283,28 @@ parse_sdvo_device_mapping(struct drm_i915_private *i915)
if (!count) {
/* No SDVO device info is found */
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"No SDVO device info is found in VBT\n");
}
}
static void
-parse_driver_features(struct drm_i915_private *i915)
+parse_driver_features(struct intel_display *display)
{
const struct bdb_driver_features *driver;
- driver = bdb_find_section(i915, BDB_DRIVER_FEATURES);
+ driver = bdb_find_section(display, BDB_DRIVER_FEATURES);
if (!driver)
return;
- if (DISPLAY_VER(i915) >= 5) {
+ if (DISPLAY_VER(display) >= 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)
- i915->display.vbt.int_lvds_support = 0;
+ display->vbt.int_lvds_support = 0;
} else {
/*
* FIXME it's not clear which BDB version has the LVDS config
@@ -1314,25 +1317,25 @@ parse_driver_features(struct drm_i915_private *i915)
* in the wild with the bits correctly populated. Version
* 108 (on i85x) does not have the bits correctly populated.
*/
- if (i915->display.vbt.version >= 134 &&
+ if (display->vbt.version >= 134 &&
driver->lvds_config != BDB_DRIVER_FEATURE_INT_LVDS &&
driver->lvds_config != BDB_DRIVER_FEATURE_INT_SDVO_LVDS)
- i915->display.vbt.int_lvds_support = 0;
+ display->vbt.int_lvds_support = 0;
}
}
static void
-parse_panel_driver_features(struct drm_i915_private *i915,
+parse_panel_driver_features(struct intel_display *display,
struct intel_panel *panel)
{
const struct bdb_driver_features *driver;
- driver = bdb_find_section(i915, BDB_DRIVER_FEATURES);
+ driver = bdb_find_section(display, BDB_DRIVER_FEATURES);
if (!driver)
return;
- if (i915->display.vbt.version < 228) {
- drm_dbg_kms(&i915->drm, "DRRS State Enabled:%d\n",
+ if (display->vbt.version < 228) {
+ drm_dbg_kms(display->drm, "DRRS State Enabled:%d\n",
driver->drrs_enabled);
/*
* If DRRS is not supported, drrs_type has to be set to 0.
@@ -1356,7 +1359,7 @@ parse_panel_driver_features(struct drm_i915_private *i915,
}
static void
-parse_power_conservation_features(struct drm_i915_private *i915,
+parse_power_conservation_features(struct intel_display *display,
struct intel_panel *panel)
{
const struct bdb_lfp_power *power;
@@ -1364,10 +1367,10 @@ parse_power_conservation_features(struct drm_i915_private *i915,
panel->vbt.vrr = true; /* matches Windows behaviour */
- if (i915->display.vbt.version < 228)
+ if (display->vbt.version < 228)
return;
- power = bdb_find_section(i915, BDB_LFP_POWER);
+ power = bdb_find_section(display, BDB_LFP_POWER);
if (!power)
return;
@@ -1390,16 +1393,16 @@ parse_power_conservation_features(struct drm_i915_private *i915,
panel->vbt.drrs_type = DRRS_TYPE_NONE;
}
- if (i915->display.vbt.version >= 232)
+ if (display->vbt.version >= 232)
panel->vbt.edp.hobl = panel_bool(power->hobl, panel_type);
- if (i915->display.vbt.version >= 233)
+ if (display->vbt.version >= 233)
panel->vbt.vrr = panel_bool(power->vrr_feature_enabled,
panel_type);
}
static void
-parse_edp(struct drm_i915_private *i915,
+parse_edp(struct intel_display *display,
struct intel_panel *panel)
{
const struct bdb_edp *edp;
@@ -1407,7 +1410,7 @@ parse_edp(struct drm_i915_private *i915,
const struct edp_fast_link_params *edp_link_params;
int panel_type = panel->vbt.panel_type;
- edp = bdb_find_section(i915, BDB_EDP);
+ edp = bdb_find_section(display, BDB_EDP);
if (!edp)
return;
@@ -1429,7 +1432,7 @@ parse_edp(struct drm_i915_private *i915,
panel->vbt.edp.pps = *edp_pps;
- if (i915->display.vbt.version >= 224) {
+ if (display->vbt.version >= 224) {
panel->vbt.edp.rate =
edp->edp_fast_link_training_rate[panel_type] * 20;
} else {
@@ -1444,7 +1447,7 @@ parse_edp(struct drm_i915_private *i915,
panel->vbt.edp.rate = 540000;
break;
default:
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"VBT has unknown eDP link rate value %u\n",
edp_link_params->rate);
break;
@@ -1462,7 +1465,7 @@ parse_edp(struct drm_i915_private *i915,
panel->vbt.edp.lanes = 4;
break;
default:
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"VBT has unknown eDP lane count value %u\n",
edp_link_params->lanes);
break;
@@ -1482,7 +1485,7 @@ parse_edp(struct drm_i915_private *i915,
panel->vbt.edp.preemphasis = DP_TRAIN_PRE_EMPH_LEVEL_3;
break;
default:
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"VBT has unknown eDP pre-emphasis value %u\n",
edp_link_params->preemphasis);
break;
@@ -1502,19 +1505,19 @@ parse_edp(struct drm_i915_private *i915,
panel->vbt.edp.vswing = DP_TRAIN_VOLTAGE_SWING_LEVEL_3;
break;
default:
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"VBT has unknown eDP voltage swing value %u\n",
edp_link_params->vswing);
break;
}
- if (i915->display.vbt.version >= 173) {
+ if (display->vbt.version >= 173) {
u8 vswing;
/* Don't read from VBT if module parameter has valid value*/
- if (i915->display.params.edp_vswing) {
+ if (display->params.edp_vswing) {
panel->vbt.edp.low_vswing =
- i915->display.params.edp_vswing == 1;
+ display->params.edp_vswing == 1;
} else {
vswing = (edp->edp_vswing_preemph >> (panel_type * 4)) & 0xF;
panel->vbt.edp.low_vswing = vswing == 0;
@@ -1524,26 +1527,27 @@ parse_edp(struct drm_i915_private *i915,
panel->vbt.edp.drrs_msa_timing_delay =
panel_bits(edp->sdrrs_msa_timing_delay, panel_type, 2);
- if (i915->display.vbt.version >= 244)
+ if (display->vbt.version >= 244)
panel->vbt.edp.max_link_rate =
edp->edp_max_port_link_rate[panel_type] * 20;
- if (i915->display.vbt.version >= 251)
+ if (display->vbt.version >= 251)
panel->vbt.edp.dsc_disable =
panel_bool(edp->edp_dsc_disable, panel_type);
}
static void
-parse_psr(struct drm_i915_private *i915,
+parse_psr(struct intel_display *display,
struct intel_panel *panel)
{
+ struct drm_i915_private *i915 = to_i915(display->drm);
const struct bdb_psr *psr;
const struct psr_table *psr_table;
int panel_type = panel->vbt.panel_type;
- psr = bdb_find_section(i915, BDB_PSR);
+ psr = bdb_find_section(display, BDB_PSR);
if (!psr) {
- drm_dbg_kms(&i915->drm, "No PSR BDB found.\n");
+ drm_dbg_kms(display->drm, "No PSR BDB found.\n");
return;
}
@@ -1560,8 +1564,8 @@ parse_psr(struct drm_i915_private *i915,
* New psr options 0=500us, 1=100us, 2=2500us, 3=0us
* Old decimal value is wake up time in multiples of 100 us.
*/
- if (i915->display.vbt.version >= 205 &&
- (DISPLAY_VER(i915) >= 9 && !IS_BROXTON(i915))) {
+ if (display->vbt.version >= 205 &&
+ (DISPLAY_VER(display) >= 9 && !IS_BROXTON(i915))) {
switch (psr_table->tp1_wakeup_time) {
case 0:
panel->vbt.psr.tp1_wakeup_time_us = 500;
@@ -1573,7 +1577,7 @@ parse_psr(struct drm_i915_private *i915,
panel->vbt.psr.tp1_wakeup_time_us = 0;
break;
default:
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"VBT tp1 wakeup time value %d is outside range[0-3], defaulting to max value 2500us\n",
psr_table->tp1_wakeup_time);
fallthrough;
@@ -1593,7 +1597,7 @@ parse_psr(struct drm_i915_private *i915,
panel->vbt.psr.tp2_tp3_wakeup_time_us = 0;
break;
default:
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->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;
@@ -1606,7 +1610,7 @@ parse_psr(struct drm_i915_private *i915,
panel->vbt.psr.tp2_tp3_wakeup_time_us = psr_table->tp2_tp3_wakeup_time * 100;
}
- if (i915->display.vbt.version >= 226) {
+ if (display->vbt.version >= 226) {
u32 wakeup_time = psr->psr2_tp2_tp3_wakeup_time;
wakeup_time = panel_bits(wakeup_time, panel_type, 2);
@@ -1632,13 +1636,13 @@ parse_psr(struct drm_i915_private *i915,
}
}
-static void parse_dsi_backlight_ports(struct drm_i915_private *i915,
+static void parse_dsi_backlight_ports(struct intel_display *display,
struct intel_panel *panel,
enum port port)
{
- enum port port_bc = DISPLAY_VER(i915) >= 11 ? PORT_B : PORT_C;
+ enum port port_bc = DISPLAY_VER(display) >= 11 ? PORT_B : PORT_C;
- if (!panel->vbt.dsi.config->dual_link || i915->display.vbt.version < 197) {
+ if (!panel->vbt.dsi.config->dual_link || display->vbt.version < 197) {
panel->vbt.dsi.bl_ports = BIT(port);
if (panel->vbt.dsi.config->cabc_supported)
panel->vbt.dsi.cabc_ports = BIT(port);
@@ -1678,7 +1682,7 @@ static void parse_dsi_backlight_ports(struct drm_i915_private *i915,
}
static void
-parse_mipi_config(struct drm_i915_private *i915,
+parse_mipi_config(struct intel_display *display,
struct intel_panel *panel)
{
const struct bdb_mipi_config *start;
@@ -1688,19 +1692,19 @@ parse_mipi_config(struct drm_i915_private *i915,
enum port port;
/* parse MIPI blocks only if LFP type is MIPI */
- if (!intel_bios_is_dsi_present(i915, &port))
+ if (!intel_bios_is_dsi_present(display, &port))
return;
/* Initialize this to undefined indicating no generic MIPI support */
panel->vbt.dsi.panel_id = MIPI_DSI_UNDEFINED_PANEL_ID;
- start = bdb_find_section(i915, BDB_MIPI_CONFIG);
+ start = bdb_find_section(display, BDB_MIPI_CONFIG);
if (!start) {
- drm_dbg_kms(&i915->drm, "No MIPI config BDB found");
+ drm_dbg_kms(display->drm, "No MIPI config BDB found");
return;
}
- drm_dbg(&i915->drm, "Found MIPI Config block, panel index = %d\n",
+ drm_dbg(display->drm, "Found MIPI Config block, panel index = %d\n",
panel_type);
/*
@@ -1721,7 +1725,7 @@ parse_mipi_config(struct drm_i915_private *i915,
return;
}
- parse_dsi_backlight_ports(i915, panel, port);
+ parse_dsi_backlight_ports(display, panel, port);
/* FIXME is the 90 vs. 270 correct? */
switch (config->rotation) {
@@ -1753,7 +1757,7 @@ parse_mipi_config(struct drm_i915_private *i915,
/* Find the sequence block and size for the given panel. */
static const u8 *
-find_panel_sequence_block(struct drm_i915_private *i915,
+find_panel_sequence_block(struct intel_display *display,
const struct bdb_mipi_sequence *sequence,
u16 panel_id, u32 *seq_size)
{
@@ -1771,7 +1775,8 @@ find_panel_sequence_block(struct drm_i915_private *i915,
for (i = 0; i < MAX_MIPI_CONFIGURATIONS && index < total; i++) {
if (index + header_size > total) {
- drm_err(&i915->drm, "Invalid sequence block (header)\n");
+ drm_err(display->drm,
+ "Invalid sequence block (header)\n");
return NULL;
}
@@ -1784,7 +1789,7 @@ find_panel_sequence_block(struct drm_i915_private *i915,
index += header_size;
if (index + current_size > total) {
- drm_err(&i915->drm, "Invalid sequence block\n");
+ drm_err(display->drm, "Invalid sequence block\n");
return NULL;
}
@@ -1796,12 +1801,13 @@ find_panel_sequence_block(struct drm_i915_private *i915,
index += current_size;
}
- drm_err(&i915->drm, "Sequence block detected but no valid configuration\n");
+ drm_err(display->drm,
+ "Sequence block detected but no valid configuration\n");
return NULL;
}
-static int goto_next_sequence(struct drm_i915_private *i915,
+static int goto_next_sequence(struct intel_display *display,
const u8 *data, int index, int total)
{
u16 len;
@@ -1832,7 +1838,7 @@ static int goto_next_sequence(struct drm_i915_private *i915,
len = *(data + index + 6) + 7;
break;
default:
- drm_err(&i915->drm, "Unknown operation byte\n");
+ drm_err(display->drm, "Unknown operation byte\n");
return 0;
}
}
@@ -1840,7 +1846,7 @@ static int goto_next_sequence(struct drm_i915_private *i915,
return 0;
}
-static int goto_next_sequence_v3(struct drm_i915_private *i915,
+static int goto_next_sequence_v3(struct intel_display *display,
const u8 *data, int index, int total)
{
int seq_end;
@@ -1852,7 +1858,7 @@ static int goto_next_sequence_v3(struct drm_i915_private *i915,
* checking on the structure.
*/
if (total < 5) {
- drm_err(&i915->drm, "Too small sequence size\n");
+ drm_err(display->drm, "Too small sequence size\n");
return 0;
}
@@ -1869,7 +1875,7 @@ static int goto_next_sequence_v3(struct drm_i915_private *i915,
seq_end = index + size_of_sequence;
if (seq_end > total) {
- drm_err(&i915->drm, "Invalid sequence size\n");
+ drm_err(display->drm, "Invalid sequence size\n");
return 0;
}
@@ -1879,7 +1885,8 @@ static int goto_next_sequence_v3(struct drm_i915_private *i915,
if (operation_byte == MIPI_SEQ_ELEM_END) {
if (index != seq_end) {
- drm_err(&i915->drm, "Invalid element structure\n");
+ drm_err(display->drm,
+ "Invalid element structure\n");
return 0;
}
return index;
@@ -1901,7 +1908,7 @@ static int goto_next_sequence_v3(struct drm_i915_private *i915,
case MIPI_SEQ_ELEM_PMIC:
break;
default:
- drm_err(&i915->drm, "Unknown operation byte %u\n",
+ drm_err(display->drm, "Unknown operation byte %u\n",
operation_byte);
break;
}
@@ -1914,13 +1921,13 @@ static int goto_next_sequence_v3(struct drm_i915_private *i915,
* 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 *i915,
+static int get_init_otp_deassert_fragment_len(struct intel_display *display,
struct intel_panel *panel)
{
const u8 *data = panel->vbt.dsi.sequence[MIPI_SEQ_INIT_OTP];
int index, len;
- if (drm_WARN_ON(&i915->drm,
+ if (drm_WARN_ON(display->drm,
!data || panel->vbt.dsi.seq_version != 1))
return 0;
@@ -1949,7 +1956,7 @@ static int get_init_otp_deassert_fragment_len(struct drm_i915_private *i915,
* these devices we split the init OTP sequence into a deassert sequence and
* the actual init OTP part.
*/
-static void vlv_fixup_mipi_sequences(struct drm_i915_private *i915,
+static void vlv_fixup_mipi_sequences(struct intel_display *display,
struct intel_panel *panel)
{
u8 *init_otp;
@@ -1967,11 +1974,11 @@ static void vlv_fixup_mipi_sequences(struct drm_i915_private *i915,
return;
/* The deassert-sequence ends at the first DSI packet */
- len = get_init_otp_deassert_fragment_len(i915, panel);
+ len = get_init_otp_deassert_fragment_len(display, panel);
if (!len)
return;
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"Using init OTP fragment to deassert reset\n");
/* Copy the fragment, update seq byte and terminate it */
@@ -2004,29 +2011,32 @@ static void vlv_fixup_mipi_sequences(struct drm_i915_private *i915,
* or examine the contents of the sequences to
* avoid false positives?
*/
-static void icl_fixup_mipi_sequences(struct drm_i915_private *i915,
+static void icl_fixup_mipi_sequences(struct intel_display *display,
struct intel_panel *panel)
{
if (!panel->vbt.dsi.sequence[MIPI_SEQ_INIT_OTP] &&
panel->vbt.dsi.sequence[MIPI_SEQ_DISPLAY_ON]) {
- drm_dbg_kms(&i915->drm, "Broken VBT: Swapping INIT_OTP and DISPLAY_ON sequences\n");
+ drm_dbg_kms(display->drm,
+ "Broken VBT: Swapping INIT_OTP and DISPLAY_ON sequences\n");
swap(panel->vbt.dsi.sequence[MIPI_SEQ_INIT_OTP],
panel->vbt.dsi.sequence[MIPI_SEQ_DISPLAY_ON]);
}
}
-static void fixup_mipi_sequences(struct drm_i915_private *i915,
+static void fixup_mipi_sequences(struct intel_display *display,
struct intel_panel *panel)
{
- if (DISPLAY_VER(i915) >= 11)
- icl_fixup_mipi_sequences(i915, panel);
+ struct drm_i915_private *i915 = to_i915(display->drm);
+
+ if (DISPLAY_VER(display) >= 11)
+ icl_fixup_mipi_sequences(display, panel);
else if (IS_VALLEYVIEW(i915))
- vlv_fixup_mipi_sequences(i915, panel);
+ vlv_fixup_mipi_sequences(display, panel);
}
static void
-parse_mipi_sequence(struct drm_i915_private *i915,
+parse_mipi_sequence(struct intel_display *display,
struct intel_panel *panel)
{
int panel_type = panel->vbt.panel_type;
@@ -2040,25 +2050,25 @@ parse_mipi_sequence(struct drm_i915_private *i915,
if (panel->vbt.dsi.panel_id != MIPI_DSI_GENERIC_PANEL_ID)
return;
- sequence = bdb_find_section(i915, BDB_MIPI_SEQUENCE);
+ sequence = bdb_find_section(display, BDB_MIPI_SEQUENCE);
if (!sequence) {
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"No MIPI Sequence found, parsing complete\n");
return;
}
/* Fail gracefully for forward incompatible sequence block. */
if (sequence->version >= 4) {
- drm_err(&i915->drm,
+ drm_err(display->drm,
"Unable to parse MIPI Sequence Block v%u\n",
sequence->version);
return;
}
- drm_dbg(&i915->drm, "Found MIPI sequence block v%u\n",
+ drm_dbg(display->drm, "Found MIPI sequence block v%u\n",
sequence->version);
- seq_data = find_panel_sequence_block(i915, sequence, panel_type, &seq_size);
+ seq_data = find_panel_sequence_block(display, sequence, panel_type, &seq_size);
if (!seq_data)
return;
@@ -2073,24 +2083,24 @@ parse_mipi_sequence(struct drm_i915_private *i915,
break;
if (seq_id >= MIPI_SEQ_MAX) {
- drm_err(&i915->drm, "Unknown sequence %u\n",
+ drm_err(display->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(&i915->drm,
+ drm_dbg_kms(display->drm,
"Unsupported sequence %u\n", seq_id);
panel->vbt.dsi.sequence[seq_id] = data + index;
if (sequence->version >= 3)
- index = goto_next_sequence_v3(i915, data, index, seq_size);
+ index = goto_next_sequence_v3(display, data, index, seq_size);
else
- index = goto_next_sequence(i915, data, index, seq_size);
+ index = goto_next_sequence(display, data, index, seq_size);
if (!index) {
- drm_err(&i915->drm, "Invalid sequence %u\n",
+ drm_err(display->drm, "Invalid sequence %u\n",
seq_id);
goto err;
}
@@ -2100,9 +2110,9 @@ parse_mipi_sequence(struct drm_i915_private *i915,
panel->vbt.dsi.size = seq_size;
panel->vbt.dsi.seq_version = sequence->version;
- fixup_mipi_sequences(i915, panel);
+ fixup_mipi_sequences(display, panel);
- drm_dbg(&i915->drm, "MIPI related VBT parsing complete\n");
+ drm_dbg(display->drm, "MIPI related VBT parsing complete\n");
return;
err:
@@ -2111,47 +2121,47 @@ parse_mipi_sequence(struct drm_i915_private *i915,
}
static void
-parse_compression_parameters(struct drm_i915_private *i915)
+parse_compression_parameters(struct intel_display *display)
{
const struct bdb_compression_parameters *params;
struct intel_bios_encoder_data *devdata;
u16 block_size;
int index;
- if (i915->display.vbt.version < 198)
+ if (display->vbt.version < 198)
return;
- params = bdb_find_section(i915, BDB_COMPRESSION_PARAMETERS);
+ params = bdb_find_section(display, BDB_COMPRESSION_PARAMETERS);
if (params) {
/* Sanity checks */
if (params->entry_size != sizeof(params->data[0])) {
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"VBT: unsupported compression param entry size\n");
return;
}
block_size = get_blocksize(params);
if (block_size < sizeof(*params)) {
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"VBT: expected 16 compression param entries\n");
return;
}
}
- list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) {
+ list_for_each_entry(devdata, &display->vbt.display_devices, node) {
const struct child_device_config *child = &devdata->child;
if (!child->compression_enable)
continue;
if (!params) {
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"VBT: compression params not available\n");
continue;
}
if (child->compression_method_cps) {
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"VBT: CPS compression not supported\n");
continue;
}
@@ -2163,12 +2173,12 @@ parse_compression_parameters(struct drm_i915_private *i915)
}
}
-static u8 translate_iboost(struct drm_i915_private *i915, u8 val)
+static u8 translate_iboost(struct intel_display *display, u8 val)
{
static const u8 mapping[] = { 1, 3, 7 }; /* See VBT spec */
if (val >= ARRAY_SIZE(mapping)) {
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"Unsupported I_boost value found in VBT (%d), display may not work properly\n", val);
return 0;
}
@@ -2225,8 +2235,9 @@ static const u8 adlp_ddc_pin_map[] = {
[GMBUS_PIN_12_TC4_ICP] = ADLP_DDC_BUS_PORT_TC4,
};
-static u8 map_ddc_pin(struct drm_i915_private *i915, u8 vbt_pin)
+static u8 map_ddc_pin(struct intel_display *display, u8 vbt_pin)
{
+ struct drm_i915_private *i915 = to_i915(display->drm);
const u8 *ddc_pin_map;
int i, n_entries;
@@ -2241,7 +2252,7 @@ static u8 map_ddc_pin(struct drm_i915_private *i915, u8 vbt_pin)
} 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(i915) && DISPLAY_VER(i915) == 9) {
+ } else if (HAS_PCH_TGP(i915) && DISPLAY_VER(display) == 9) {
ddc_pin_map = gen9bc_tgp_ddc_pin_map;
n_entries = ARRAY_SIZE(gen9bc_tgp_ddc_pin_map);
} else if (INTEL_PCH_TYPE(i915) >= PCH_ICP) {
@@ -2260,7 +2271,7 @@ static u8 map_ddc_pin(struct drm_i915_private *i915, u8 vbt_pin)
return i;
}
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"Ignoring alternate pin: VBT claims DDC pin %d, which is not valid for this platform\n",
vbt_pin);
return 0;
@@ -2318,9 +2329,10 @@ 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 *i915,
+static enum port dvo_port_to_port(struct intel_display *display,
u8 dvo_port)
{
+ struct drm_i915_private *i915 = to_i915(display->drm);
/*
* Each DDI port can have more than one value on the "DVO Port" field,
* so look for all the possible values for each port.
@@ -2372,7 +2384,7 @@ static enum port dvo_port_to_port(struct drm_i915_private *i915,
[PORT_TC4] = { DVO_PORT_HDMII, DVO_PORT_DPI, -1 },
};
- if (DISPLAY_VER(i915) >= 13)
+ if (DISPLAY_VER(display) >= 13)
return __dvo_port_to_port(ARRAY_SIZE(xelpd_port_mapping),
ARRAY_SIZE(xelpd_port_mapping[0]),
xelpd_port_mapping,
@@ -2395,13 +2407,13 @@ static enum port dvo_port_to_port(struct drm_i915_private *i915,
}
static enum port
-dsi_dvo_port_to_port(struct drm_i915_private *i915, u8 dvo_port)
+dsi_dvo_port_to_port(struct intel_display *display, u8 dvo_port)
{
switch (dvo_port) {
case DVO_PORT_MIPIA:
return PORT_A;
case DVO_PORT_MIPIC:
- if (DISPLAY_VER(i915) >= 11)
+ if (DISPLAY_VER(display) >= 11)
return PORT_B;
else
return PORT_C;
@@ -2412,13 +2424,13 @@ dsi_dvo_port_to_port(struct drm_i915_private *i915, u8 dvo_port)
enum port intel_bios_encoder_port(const struct intel_bios_encoder_data *devdata)
{
- struct drm_i915_private *i915 = devdata->i915;
+ struct intel_display *display = devdata->display;
const struct child_device_config *child = &devdata->child;
enum port port;
- port = dvo_port_to_port(i915, child->dvo_port);
- if (port == PORT_NONE && DISPLAY_VER(i915) >= 11)
- port = dsi_dvo_port_to_port(i915, child->dvo_port);
+ port = dvo_port_to_port(display, child->dvo_port);
+ if (port == PORT_NONE && DISPLAY_VER(display) >= 11)
+ port = dsi_dvo_port_to_port(display, child->dvo_port);
return port;
}
@@ -2463,10 +2475,10 @@ static int parse_bdb_216_dp_max_link_rate(const int vbt_max_link_rate)
int intel_bios_dp_max_link_rate(const struct intel_bios_encoder_data *devdata)
{
- if (!devdata || devdata->i915->display.vbt.version < 216)
+ if (!devdata || devdata->display->vbt.version < 216)
return 0;
- if (devdata->i915->display.vbt.version >= 230)
+ if (devdata->display->vbt.version >= 230)
return parse_bdb_230_dp_max_link_rate(devdata->child.dp_max_link_rate);
else
return parse_bdb_216_dp_max_link_rate(devdata->child.dp_max_link_rate);
@@ -2474,7 +2486,7 @@ int intel_bios_dp_max_link_rate(const struct intel_bios_encoder_data *devdata)
int intel_bios_dp_max_lane_count(const struct intel_bios_encoder_data *devdata)
{
- if (!devdata || devdata->i915->display.vbt.version < 244)
+ if (!devdata || devdata->display->vbt.version < 244)
return 0;
return devdata->child.dp_max_lane_count + 1;
@@ -2483,10 +2495,10 @@ int intel_bios_dp_max_lane_count(const struct intel_bios_encoder_data *devdata)
static void sanitize_device_type(struct intel_bios_encoder_data *devdata,
enum port port)
{
- struct drm_i915_private *i915 = devdata->i915;
+ struct intel_display *display = devdata->display;
bool is_hdmi;
- if (port != PORT_A || DISPLAY_VER(i915) >= 12)
+ if (port != PORT_A || DISPLAY_VER(display) >= 12)
return;
if (!intel_bios_encoder_supports_dvi(devdata))
@@ -2494,7 +2506,7 @@ static void sanitize_device_type(struct intel_bios_encoder_data *devdata,
is_hdmi = intel_bios_encoder_supports_hdmi(devdata);
- drm_dbg_kms(&i915->drm, "VBT claims port A supports DVI%s, ignoring\n",
+ drm_dbg_kms(display->drm, "VBT claims port A supports DVI%s, ignoring\n",
is_hdmi ? "/HDMI" : "");
devdata->child.device_type &= ~DEVICE_TYPE_TMDS_DVI_SIGNALING;
@@ -2504,7 +2516,8 @@ static void sanitize_device_type(struct intel_bios_encoder_data *devdata,
static void sanitize_hdmi_level_shift(struct intel_bios_encoder_data *devdata,
enum port port)
{
- struct drm_i915_private *i915 = devdata->i915;
+ struct intel_display *display = devdata->display;
+ struct drm_i915_private *i915 = to_i915(display->drm);
if (!intel_bios_encoder_supports_dvi(devdata))
return;
@@ -2515,7 +2528,8 @@ static void sanitize_hdmi_level_shift(struct intel_bios_encoder_data *devdata,
* up to 11, whereas the BDW max is 9.
*/
if (IS_BROADWELL(i915) && devdata->child.hdmi_level_shifter_value > 9) {
- drm_dbg_kms(&i915->drm, "Bogus port %c VBT HDMI level shift %d, adjusting to %d\n",
+ drm_dbg_kms(display->drm,
+ "Bogus port %c VBT HDMI level shift %d, adjusting to %d\n",
port_name(port), devdata->child.hdmi_level_shifter_value, 9);
devdata->child.hdmi_level_shifter_value = 9;
@@ -2563,14 +2577,14 @@ intel_bios_encoder_supports_dsi(const struct intel_bios_encoder_data *devdata)
bool
intel_bios_encoder_is_lspcon(const struct intel_bios_encoder_data *devdata)
{
- return devdata && HAS_LSPCON(devdata->i915) && devdata->child.lspcon;
+ return devdata && HAS_LSPCON(devdata->display) && devdata->child.lspcon;
}
/* This is an index in the HDMI/DVI DDI buffer translation table, or -1 */
int intel_bios_hdmi_level_shift(const struct intel_bios_encoder_data *devdata)
{
- if (!devdata || devdata->i915->display.vbt.version < 158 ||
- DISPLAY_VER(devdata->i915) >= 14)
+ if (!devdata || devdata->display->vbt.version < 158 ||
+ DISPLAY_VER(devdata->display) >= 14)
return -1;
return devdata->child.hdmi_level_shifter_value;
@@ -2578,7 +2592,7 @@ int intel_bios_hdmi_level_shift(const struct intel_bios_encoder_data *devdata)
int intel_bios_hdmi_max_tmds_clock(const struct intel_bios_encoder_data *devdata)
{
- if (!devdata || devdata->i915->display.vbt.version < 204)
+ if (!devdata || devdata->display->vbt.version < 204)
return 0;
switch (devdata->child.hdmi_max_data_rate) {
@@ -2600,8 +2614,9 @@ int intel_bios_hdmi_max_tmds_clock(const struct intel_bios_encoder_data *devdata
}
}
-static bool is_port_valid(struct drm_i915_private *i915, enum port port)
+static bool is_port_valid(struct intel_display *display, enum port port)
{
+ struct drm_i915_private *i915 = to_i915(display->drm);
/*
* On some ICL SKUs port F is not present, but broken VBTs mark
* the port as present. Only try to initialize port F for the
@@ -2615,7 +2630,7 @@ static bool is_port_valid(struct drm_i915_private *i915, enum port port)
static void print_ddi_port(const struct intel_bios_encoder_data *devdata)
{
- struct drm_i915_private *i915 = devdata->i915;
+ struct intel_display *display = devdata->display;
const struct child_device_config *child = &devdata->child;
bool is_dvi, is_hdmi, is_dp, is_edp, is_dsi, is_crt, supports_typec_usb, supports_tbt;
int dp_boost_level, dp_max_link_rate, hdmi_boost_level, hdmi_level_shift, max_tmds_clock;
@@ -2635,7 +2650,7 @@ static void print_ddi_port(const struct intel_bios_encoder_data *devdata)
supports_typec_usb = intel_bios_encoder_supports_typec_usb(devdata);
supports_tbt = intel_bios_encoder_supports_tbt(devdata);
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"Port %c VBT info: CRT:%d DVI:%d HDMI:%d DP:%d eDP:%d DSI:%d DP++:%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, is_dsi,
intel_bios_encoder_supports_dp_dual_mode(devdata),
@@ -2645,33 +2660,33 @@ static void print_ddi_port(const struct intel_bios_encoder_data *devdata)
hdmi_level_shift = intel_bios_hdmi_level_shift(devdata);
if (hdmi_level_shift >= 0) {
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"Port %c VBT HDMI level shift: %d\n",
port_name(port), hdmi_level_shift);
}
max_tmds_clock = intel_bios_hdmi_max_tmds_clock(devdata);
if (max_tmds_clock)
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"Port %c VBT HDMI max TMDS clock: %d kHz\n",
port_name(port), max_tmds_clock);
/* I_boost config for SKL and above */
dp_boost_level = intel_bios_dp_boost_level(devdata);
if (dp_boost_level)
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"Port %c VBT (e)DP boost level: %d\n",
port_name(port), dp_boost_level);
hdmi_boost_level = intel_bios_hdmi_boost_level(devdata);
if (hdmi_boost_level)
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"Port %c VBT HDMI boost level: %d\n",
port_name(port), hdmi_boost_level);
dp_max_link_rate = intel_bios_dp_max_link_rate(devdata);
if (dp_max_link_rate)
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"Port %c VBT DP max link rate: %d\n",
port_name(port), dp_max_link_rate);
@@ -2679,22 +2694,22 @@ static void print_ddi_port(const struct intel_bios_encoder_data *devdata)
* FIXME need to implement support for VBT
* vswing/preemph tables should this ever trigger.
*/
- drm_WARN(&i915->drm, child->use_vbt_vswing,
+ drm_WARN(display->drm, child->use_vbt_vswing,
"Port %c asks to use VBT vswing/preemph tables\n",
port_name(port));
}
static void parse_ddi_port(struct intel_bios_encoder_data *devdata)
{
- struct drm_i915_private *i915 = devdata->i915;
+ struct intel_display *display = devdata->display;
enum port port;
port = intel_bios_encoder_port(devdata);
if (port == PORT_NONE)
return;
- if (!is_port_valid(i915, port)) {
- drm_dbg_kms(&i915->drm,
+ if (!is_port_valid(display, port)) {
+ drm_dbg_kms(display->drm,
"VBT reports port %c as supported, but that can't be true: skipping\n",
port_name(port));
return;
@@ -2704,22 +2719,24 @@ static void parse_ddi_port(struct intel_bios_encoder_data *devdata)
sanitize_hdmi_level_shift(devdata, port);
}
-static bool has_ddi_port_info(struct drm_i915_private *i915)
+static bool has_ddi_port_info(struct intel_display *display)
{
- return DISPLAY_VER(i915) >= 5 || IS_G4X(i915);
+ struct drm_i915_private *i915 = to_i915(display->drm);
+
+ return DISPLAY_VER(display) >= 5 || IS_G4X(i915);
}
-static void parse_ddi_ports(struct drm_i915_private *i915)
+static void parse_ddi_ports(struct intel_display *display)
{
struct intel_bios_encoder_data *devdata;
- if (!has_ddi_port_info(i915))
+ if (!has_ddi_port_info(display))
return;
- list_for_each_entry(devdata, &i915->display.vbt.display_devices, node)
+ list_for_each_entry(devdata, &display->vbt.display_devices, node)
parse_ddi_port(devdata);
- list_for_each_entry(devdata, &i915->display.vbt.display_devices, node)
+ list_for_each_entry(devdata, &display->vbt.display_devices, node)
print_ddi_port(devdata);
}
@@ -2745,27 +2762,27 @@ static int child_device_expected_size(u16 version)
return 22;
}
-static bool child_device_size_valid(struct drm_i915_private *i915, int size)
+static bool child_device_size_valid(struct intel_display *display, int size)
{
int expected_size;
- expected_size = child_device_expected_size(i915->display.vbt.version);
+ expected_size = child_device_expected_size(display->vbt.version);
if (expected_size < 0) {
expected_size = sizeof(struct child_device_config);
- drm_dbg(&i915->drm,
+ drm_dbg(display->drm,
"Expected child device config size for VBT version %u not known; assuming %d\n",
- i915->display.vbt.version, expected_size);
+ display->vbt.version, expected_size);
}
/* Flag an error for unexpected size, but continue anyway. */
if (size != expected_size)
- drm_err(&i915->drm,
+ drm_err(display->drm,
"Unexpected child device config size %d (expected %d for VBT version %u)\n",
- size, expected_size, i915->display.vbt.version);
+ size, expected_size, display->vbt.version);
/* The legacy sized child device config is the minimum we need. */
if (size < LEGACY_CHILD_DEVICE_CONFIG_SIZE) {
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"Child device config size %d is too small.\n",
size);
return false;
@@ -2775,8 +2792,9 @@ static bool child_device_size_valid(struct drm_i915_private *i915, int size)
}
static void
-parse_general_definitions(struct drm_i915_private *i915)
+parse_general_definitions(struct intel_display *display)
{
+ struct drm_i915_private *i915 = to_i915(display->drm);
const struct bdb_general_definitions *defs;
struct intel_bios_encoder_data *devdata;
const struct child_device_config *child;
@@ -2784,27 +2802,27 @@ parse_general_definitions(struct drm_i915_private *i915)
u16 block_size;
int bus_pin;
- defs = bdb_find_section(i915, BDB_GENERAL_DEFINITIONS);
+ defs = bdb_find_section(display, BDB_GENERAL_DEFINITIONS);
if (!defs) {
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->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(&i915->drm,
+ drm_dbg_kms(display->drm,
"General definitions block too small (%u)\n",
block_size);
return;
}
bus_pin = defs->crt_ddc_gmbus_pin;
- drm_dbg_kms(&i915->drm, "crt_ddc_bus_pin: %d\n", bus_pin);
+ drm_dbg_kms(display->drm, "crt_ddc_bus_pin: %d\n", bus_pin);
if (intel_gmbus_is_valid_pin(i915, bus_pin))
- i915->display.vbt.crt_ddc_pin = bus_pin;
+ display->vbt.crt_ddc_pin = bus_pin;
- if (!child_device_size_valid(i915, defs->child_dev_size))
+ if (!child_device_size_valid(display, defs->child_dev_size))
return;
/* get the number of child device */
@@ -2815,7 +2833,7 @@ parse_general_definitions(struct drm_i915_private *i915)
if (!child->device_type)
continue;
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"Found VBT child device with type 0x%x\n",
child->device_type);
@@ -2823,7 +2841,7 @@ parse_general_definitions(struct drm_i915_private *i915)
if (!devdata)
break;
- devdata->i915 = i915;
+ devdata->display = display;
/*
* Copy as much as we know (sizeof) and is available
@@ -2833,37 +2851,39 @@ parse_general_definitions(struct drm_i915_private *i915)
memcpy(&devdata->child, child,
min_t(size_t, defs->child_dev_size, sizeof(*child)));
- list_add_tail(&devdata->node, &i915->display.vbt.display_devices);
+ list_add_tail(&devdata->node, &display->vbt.display_devices);
}
- if (list_empty(&i915->display.vbt.display_devices))
- drm_dbg_kms(&i915->drm,
+ if (list_empty(&display->vbt.display_devices))
+ drm_dbg_kms(display->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 *i915)
+init_vbt_defaults(struct intel_display *display)
{
- i915->display.vbt.crt_ddc_pin = GMBUS_PIN_VGADDC;
+ struct drm_i915_private *i915 = to_i915(display->drm);
+
+ display->vbt.crt_ddc_pin = GMBUS_PIN_VGADDC;
/* general features */
- i915->display.vbt.int_tv_support = 1;
- i915->display.vbt.int_crt_support = 1;
+ display->vbt.int_tv_support = 1;
+ display->vbt.int_crt_support = 1;
/* driver features */
- i915->display.vbt.int_lvds_support = 1;
+ display->vbt.int_lvds_support = 1;
/* Default to using SSC */
- i915->display.vbt.lvds_use_ssc = 1;
+ display->vbt.lvds_use_ssc = 1;
/*
* Core/SandyBridge/IvyBridge use alternative (120MHz) reference
* clock for LVDS.
*/
- i915->display.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->display.vbt.lvds_ssc_freq);
+ display->vbt.lvds_ssc_freq = intel_bios_ssc_frequency(display,
+ !HAS_PCH_SPLIT(i915));
+ drm_dbg_kms(display->drm, "Set default to SSC at %d kHz\n",
+ display->vbt.lvds_ssc_freq);
}
/* Common defaults which may be overridden by VBT. */
@@ -2879,12 +2899,13 @@ init_vbt_panel_defaults(struct intel_panel *panel)
/* Defaults to initialize only if there is no VBT. */
static void
-init_vbt_missing_defaults(struct drm_i915_private *i915)
+init_vbt_missing_defaults(struct intel_display *display)
{
- unsigned int ports = DISPLAY_RUNTIME_INFO(i915)->port_mask;
+ struct drm_i915_private *i915 = to_i915(display->drm);
+ unsigned int ports = DISPLAY_RUNTIME_INFO(display)->port_mask;
enum port port;
- if (!HAS_DDI(i915) && !IS_CHERRYVIEW(i915))
+ if (!HAS_DDI(display) && !IS_CHERRYVIEW(i915))
return;
for_each_port_masked(port, ports) {
@@ -2904,7 +2925,7 @@ init_vbt_missing_defaults(struct drm_i915_private *i915)
if (!devdata)
break;
- devdata->i915 = i915;
+ devdata->display = display;
child = &devdata->child;
if (port == PORT_F)
@@ -2923,15 +2944,15 @@ init_vbt_missing_defaults(struct drm_i915_private *i915)
if (port == PORT_A)
child->device_type |= DEVICE_TYPE_INTERNAL_CONNECTOR;
- list_add_tail(&devdata->node, &i915->display.vbt.display_devices);
+ list_add_tail(&devdata->node, &display->vbt.display_devices);
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->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->display.vbt.version = 155;
+ display->vbt.version = 155;
}
static const struct bdb_header *get_bdb_header(const struct vbt_header *vbt)
@@ -2943,13 +2964,13 @@ static const struct bdb_header *get_bdb_header(const struct vbt_header *vbt)
/**
* intel_bios_is_valid_vbt - does the given buffer contain a valid VBT
- * @i915: the device
+ * @display: display device
* @buf: pointer to a buffer to validate
* @size: size of the buffer
*
* Returns true on valid VBT.
*/
-bool intel_bios_is_valid_vbt(struct drm_i915_private *i915,
+bool intel_bios_is_valid_vbt(struct intel_display *display,
const void *buf, size_t size)
{
const struct vbt_header *vbt = buf;
@@ -2959,17 +2980,18 @@ bool intel_bios_is_valid_vbt(struct drm_i915_private *i915,
return false;
if (sizeof(struct vbt_header) > size) {
- drm_dbg_kms(&i915->drm, "VBT header incomplete\n");
+ drm_dbg_kms(display->drm, "VBT header incomplete\n");
return false;
}
if (memcmp(vbt->signature, "$VBT", 4)) {
- drm_dbg_kms(&i915->drm, "VBT invalid signature\n");
+ drm_dbg_kms(display->drm, "VBT invalid signature\n");
return false;
}
if (vbt->vbt_size > size) {
- drm_dbg_kms(&i915->drm, "VBT incomplete (vbt_size overflows)\n");
+ drm_dbg_kms(display->drm,
+ "VBT incomplete (vbt_size overflows)\n");
return false;
}
@@ -2979,48 +3001,48 @@ bool intel_bios_is_valid_vbt(struct drm_i915_private *i915,
vbt->bdb_offset,
sizeof(struct bdb_header),
size)) {
- drm_dbg_kms(&i915->drm, "BDB header incomplete\n");
+ drm_dbg_kms(display->drm, "BDB header incomplete\n");
return false;
}
bdb = get_bdb_header(vbt);
if (range_overflows_t(size_t, vbt->bdb_offset, bdb->bdb_size, size)) {
- drm_dbg_kms(&i915->drm, "BDB incomplete\n");
+ drm_dbg_kms(display->drm, "BDB incomplete\n");
return false;
}
return vbt;
}
-static struct vbt_header *firmware_get_vbt(struct drm_i915_private *i915,
+static struct vbt_header *firmware_get_vbt(struct intel_display *display,
size_t *size)
{
struct vbt_header *vbt = NULL;
const struct firmware *fw = NULL;
- const char *name = i915->display.params.vbt_firmware;
+ const char *name = display->params.vbt_firmware;
int ret;
if (!name || !*name)
return NULL;
- ret = request_firmware(&fw, name, i915->drm.dev);
+ ret = request_firmware(&fw, name, display->drm->dev);
if (ret) {
- drm_err(&i915->drm,
+ drm_err(display->drm,
"Requesting VBT firmware \"%s\" failed (%d)\n",
name, ret);
return NULL;
}
- if (intel_bios_is_valid_vbt(i915, fw->data, fw->size)) {
+ if (intel_bios_is_valid_vbt(display, fw->data, fw->size)) {
vbt = kmemdup(fw->data, fw->size, GFP_KERNEL);
if (vbt) {
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"Found valid VBT firmware \"%s\"\n", name);
if (size)
*size = fw->size;
}
} else {
- drm_dbg_kms(&i915->drm, "Invalid VBT firmware \"%s\"\n",
+ drm_dbg_kms(display->drm, "Invalid VBT firmware \"%s\"\n",
name);
}
@@ -3036,9 +3058,10 @@ static u32 intel_spi_read(struct intel_uncore *uncore, u32 offset)
return intel_uncore_read(uncore, PRIMARY_SPI_TRIGGER);
}
-static struct vbt_header *spi_oprom_get_vbt(struct drm_i915_private *i915,
+static struct vbt_header *spi_oprom_get_vbt(struct intel_display *display,
size_t *size)
{
+ struct drm_i915_private *i915 = to_i915(display->drm);
u32 count, data, found, store = 0;
u32 static_region, oprom_offset;
u32 oprom_size = 0x200000;
@@ -3075,10 +3098,10 @@ static struct vbt_header *spi_oprom_get_vbt(struct drm_i915_private *i915,
for (count = 0; count < vbt_size; count += 4)
*(vbt + store++) = intel_spi_read(&i915->uncore, found + count);
- if (!intel_bios_is_valid_vbt(i915, vbt, vbt_size))
+ if (!intel_bios_is_valid_vbt(display, vbt, vbt_size))
goto err_free_vbt;
- drm_dbg_kms(&i915->drm, "Found valid VBT in SPI flash\n");
+ drm_dbg_kms(display->drm, "Found valid VBT in SPI flash\n");
if (size)
*size = vbt_size;
@@ -3091,10 +3114,10 @@ static struct vbt_header *spi_oprom_get_vbt(struct drm_i915_private *i915,
return NULL;
}
-static struct vbt_header *oprom_get_vbt(struct drm_i915_private *i915,
+static struct vbt_header *oprom_get_vbt(struct intel_display *display,
size_t *sizep)
{
- struct pci_dev *pdev = to_pci_dev(i915->drm.dev);
+ struct pci_dev *pdev = to_pci_dev(display->drm->dev);
void __iomem *p = NULL, *oprom;
struct vbt_header *vbt;
u16 vbt_size;
@@ -3118,13 +3141,13 @@ static struct vbt_header *oprom_get_vbt(struct drm_i915_private *i915,
goto err_unmap_oprom;
if (sizeof(struct vbt_header) > size) {
- drm_dbg(&i915->drm, "VBT header incomplete\n");
+ drm_dbg(display->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(&i915->drm,
+ drm_dbg(display->drm,
"VBT incomplete (vbt_size overflows)\n");
goto err_unmap_oprom;
}
@@ -3136,7 +3159,7 @@ static struct vbt_header *oprom_get_vbt(struct drm_i915_private *i915,
memcpy_fromio(vbt, p, vbt_size);
- if (!intel_bios_is_valid_vbt(i915, vbt, vbt_size))
+ if (!intel_bios_is_valid_vbt(display, vbt, vbt_size))
goto err_free_vbt;
pci_unmap_rom(pdev, oprom);
@@ -3144,7 +3167,7 @@ static struct vbt_header *oprom_get_vbt(struct drm_i915_private *i915,
if (sizep)
*sizep = vbt_size;
- drm_dbg_kms(&i915->drm, "Found valid VBT in PCI ROM\n");
+ drm_dbg_kms(display->drm, "Found valid VBT in PCI ROM\n");
return vbt;
@@ -3156,14 +3179,14 @@ static struct vbt_header *oprom_get_vbt(struct drm_i915_private *i915,
return NULL;
}
-static const struct vbt_header *intel_bios_get_vbt(struct drm_i915_private *i915,
+static const struct vbt_header *intel_bios_get_vbt(struct intel_display *display,
size_t *sizep)
{
- struct intel_display *display = &i915->display;
+ struct drm_i915_private *i915 = to_i915(display->drm);
const struct vbt_header *vbt = NULL;
intel_wakeref_t wakeref;
- vbt = firmware_get_vbt(i915, sizep);
+ vbt = firmware_get_vbt(display, sizep);
if (!vbt)
vbt = intel_opregion_get_vbt(display, sizep);
@@ -3174,76 +3197,77 @@ static const struct vbt_header *intel_bios_get_vbt(struct drm_i915_private *i915
*/
if (!vbt && IS_DGFX(i915))
with_intel_runtime_pm(&i915->runtime_pm, wakeref)
- vbt = spi_oprom_get_vbt(i915, sizep);
+ vbt = spi_oprom_get_vbt(display, sizep);
if (!vbt)
with_intel_runtime_pm(&i915->runtime_pm, wakeref)
- vbt = oprom_get_vbt(i915, sizep);
+ vbt = oprom_get_vbt(display, sizep);
return vbt;
}
/**
* intel_bios_init - find VBT and initialize settings from the BIOS
- * @i915: i915 device instance
+ * @display: display 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 *i915)
+void intel_bios_init(struct intel_display *display)
{
const struct vbt_header *vbt;
const struct bdb_header *bdb;
- INIT_LIST_HEAD(&i915->display.vbt.display_devices);
- INIT_LIST_HEAD(&i915->display.vbt.bdb_blocks);
+ INIT_LIST_HEAD(&display->vbt.display_devices);
+ INIT_LIST_HEAD(&display->vbt.bdb_blocks);
- if (!HAS_DISPLAY(i915)) {
- drm_dbg_kms(&i915->drm,
+ if (!HAS_DISPLAY(display)) {
+ drm_dbg_kms(display->drm,
"Skipping VBT init due to disabled display.\n");
return;
}
- init_vbt_defaults(i915);
+ init_vbt_defaults(display);
- vbt = intel_bios_get_vbt(i915, NULL);
+ vbt = intel_bios_get_vbt(display, NULL);
if (!vbt)
goto out;
bdb = get_bdb_header(vbt);
- i915->display.vbt.version = bdb->version;
+ display->vbt.version = bdb->version;
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"VBT signature \"%.*s\", BDB version %d\n",
- (int)sizeof(vbt->signature), vbt->signature, i915->display.vbt.version);
+ (int)sizeof(vbt->signature), vbt->signature,
+ display->vbt.version);
- init_bdb_blocks(i915, bdb);
+ init_bdb_blocks(display, bdb);
/* Grab useful general definitions */
- parse_general_features(i915);
- parse_general_definitions(i915);
- parse_driver_features(i915);
+ parse_general_features(display);
+ parse_general_definitions(display);
+ parse_driver_features(display);
/* Depends on child device list */
- parse_compression_parameters(i915);
+ parse_compression_parameters(display);
out:
if (!vbt) {
- drm_info(&i915->drm,
+ drm_info(display->drm,
"Failed to find VBIOS tables (VBT)\n");
- init_vbt_missing_defaults(i915);
+ init_vbt_missing_defaults(display);
}
/* Further processing on pre-parsed or generated child device data */
- parse_sdvo_device_mapping(i915);
- parse_ddi_ports(i915);
+ parse_sdvo_device_mapping(display);
+ parse_ddi_ports(display);
kfree(vbt);
}
-static void intel_bios_init_panel(struct drm_i915_private *i915,
+static void intel_bios_init_panel(struct intel_display *display,
struct intel_panel *panel,
const struct intel_bios_encoder_data *devdata,
const struct drm_edid *drm_edid,
@@ -3251,63 +3275,64 @@ static void intel_bios_init_panel(struct drm_i915_private *i915,
{
/* already have it? */
if (panel->vbt.panel_type >= 0) {
- drm_WARN_ON(&i915->drm, !use_fallback);
+ drm_WARN_ON(display->drm, !use_fallback);
return;
}
- panel->vbt.panel_type = get_panel_type(i915, devdata,
+ panel->vbt.panel_type = get_panel_type(display, devdata,
drm_edid, use_fallback);
if (panel->vbt.panel_type < 0) {
- drm_WARN_ON(&i915->drm, use_fallback);
+ drm_WARN_ON(display->drm, use_fallback);
return;
}
init_vbt_panel_defaults(panel);
- parse_panel_options(i915, panel);
- parse_generic_dtd(i915, panel);
- parse_lfp_data(i915, panel);
- parse_lfp_backlight(i915, panel);
- parse_sdvo_lvds_data(i915, panel);
- parse_panel_driver_features(i915, panel);
- parse_power_conservation_features(i915, panel);
- parse_edp(i915, panel);
- parse_psr(i915, panel);
- parse_mipi_config(i915, panel);
- parse_mipi_sequence(i915, panel);
+ parse_panel_options(display, panel);
+ parse_generic_dtd(display, panel);
+ parse_lfp_data(display, panel);
+ parse_lfp_backlight(display, panel);
+ parse_sdvo_lvds_data(display, panel);
+ parse_panel_driver_features(display, panel);
+ parse_power_conservation_features(display, panel);
+ parse_edp(display, panel);
+ parse_psr(display, panel);
+ parse_mipi_config(display, panel);
+ parse_mipi_sequence(display, panel);
}
-void intel_bios_init_panel_early(struct drm_i915_private *i915,
+void intel_bios_init_panel_early(struct intel_display *display,
struct intel_panel *panel,
const struct intel_bios_encoder_data *devdata)
{
- intel_bios_init_panel(i915, panel, devdata, NULL, false);
+ intel_bios_init_panel(display, panel, devdata, NULL, false);
}
-void intel_bios_init_panel_late(struct drm_i915_private *i915,
+void intel_bios_init_panel_late(struct intel_display *display,
struct intel_panel *panel,
const struct intel_bios_encoder_data *devdata,
const struct drm_edid *drm_edid)
{
- intel_bios_init_panel(i915, panel, devdata, drm_edid, true);
+ intel_bios_init_panel(display, panel, devdata, drm_edid, true);
}
/**
* intel_bios_driver_remove - Free any resources allocated by intel_bios_init()
- * @i915: i915 device instance
+ * @display: display device instance
*/
-void intel_bios_driver_remove(struct drm_i915_private *i915)
+void intel_bios_driver_remove(struct intel_display *display)
{
struct intel_bios_encoder_data *devdata, *nd;
struct bdb_block_entry *entry, *ne;
- list_for_each_entry_safe(devdata, nd, &i915->display.vbt.display_devices, node) {
+ list_for_each_entry_safe(devdata, nd, &display->vbt.display_devices,
+ node) {
list_del(&devdata->node);
kfree(devdata->dsc);
kfree(devdata);
}
- list_for_each_entry_safe(entry, ne, &i915->display.vbt.bdb_blocks, node) {
+ list_for_each_entry_safe(entry, ne, &display->vbt.bdb_blocks, node) {
list_del(&entry->node);
kfree(entry);
}
@@ -3331,22 +3356,22 @@ void intel_bios_fini_panel(struct intel_panel *panel)
/**
* intel_bios_is_tv_present - is integrated TV present in VBT
- * @i915: i915 device instance
+ * @display: display 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 *i915)
+bool intel_bios_is_tv_present(struct intel_display *display)
{
const struct intel_bios_encoder_data *devdata;
- if (!i915->display.vbt.int_tv_support)
+ if (!display->vbt.int_tv_support)
return false;
- if (list_empty(&i915->display.vbt.display_devices))
+ if (list_empty(&display->vbt.display_devices))
return true;
- list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) {
+ list_for_each_entry(devdata, &display->vbt.display_devices, node) {
const struct child_device_config *child = &devdata->child;
/*
@@ -3372,21 +3397,21 @@ bool intel_bios_is_tv_present(struct drm_i915_private *i915)
/**
* intel_bios_is_lvds_present - is LVDS present in VBT
- * @i915: i915 device instance
+ * @display: display 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 *i915, u8 *i2c_pin)
+bool intel_bios_is_lvds_present(struct intel_display *display, u8 *i2c_pin)
{
- struct intel_display *display = &i915->display;
+ struct drm_i915_private *i915 = to_i915(display->drm);
const struct intel_bios_encoder_data *devdata;
- if (list_empty(&i915->display.vbt.display_devices))
+ if (list_empty(&display->vbt.display_devices))
return true;
- list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) {
+ list_for_each_entry(devdata, &display->vbt.display_devices, node) {
const struct child_device_config *child = &devdata->child;
/* If the device type is not LFP, continue.
@@ -3421,25 +3446,25 @@ bool intel_bios_is_lvds_present(struct drm_i915_private *i915, u8 *i2c_pin)
/**
* intel_bios_is_port_present - is the specified digital port present
- * @i915: i915 device instance
+ * @display: display 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 *i915, enum port port)
+bool intel_bios_is_port_present(struct intel_display *display, enum port port)
{
const struct intel_bios_encoder_data *devdata;
- if (WARN_ON(!has_ddi_port_info(i915)))
+ if (WARN_ON(!has_ddi_port_info(display)))
return true;
- if (!is_port_valid(i915, port))
+ if (!is_port_valid(display, port))
return false;
- list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) {
+ list_for_each_entry(devdata, &display->vbt.display_devices, node) {
const struct child_device_config *child = &devdata->child;
- if (dvo_port_to_port(i915, child->dvo_port) == port)
+ if (dvo_port_to_port(display, child->dvo_port) == port)
return true;
}
@@ -3470,32 +3495,32 @@ bool intel_bios_encoder_supports_dp_dual_mode(const struct intel_bios_encoder_da
/**
* intel_bios_is_dsi_present - is DSI present in VBT
- * @i915: i915 device instance
+ * @display: display 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 *i915,
+bool intel_bios_is_dsi_present(struct intel_display *display,
enum port *port)
{
const struct intel_bios_encoder_data *devdata;
- list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) {
+ list_for_each_entry(devdata, &display->vbt.display_devices, node) {
const struct child_device_config *child = &devdata->child;
u8 dvo_port = child->dvo_port;
if (!(child->device_type & DEVICE_TYPE_MIPI_OUTPUT))
continue;
- if (dsi_dvo_port_to_port(i915, dvo_port) == PORT_NONE) {
- drm_dbg_kms(&i915->drm,
+ if (dsi_dvo_port_to_port(display, dvo_port) == PORT_NONE) {
+ drm_dbg_kms(display->drm,
"VBT has unsupported DSI port %c\n",
port_name(dvo_port - DVO_PORT_MIPIA));
continue;
}
if (port)
- *port = dsi_dvo_port_to_port(i915, dvo_port);
+ *port = dsi_dvo_port_to_port(display, dvo_port);
return true;
}
@@ -3506,7 +3531,7 @@ static void fill_dsc(struct intel_crtc_state *crtc_state,
struct dsc_compression_parameters_entry *dsc,
int dsc_max_bpc)
{
- struct drm_i915_private *i915 = to_i915(crtc_state->uapi.crtc->dev);
+ struct intel_display *display = to_intel_display(crtc_state);
struct drm_dsc_config *vdsc_cfg = &crtc_state->dsc.config;
int bpc = 8;
@@ -3520,7 +3545,7 @@ static void fill_dsc(struct intel_crtc_state *crtc_state,
else if (dsc->support_8bpc && dsc_max_bpc >= 8)
bpc = 8;
else
- drm_dbg_kms(&i915->drm, "VBT: Unsupported BPC %d for DCS\n",
+ drm_dbg_kms(display->drm, "VBT: Unsupported BPC %d for DCS\n",
dsc_max_bpc);
crtc_state->pipe_bpp = bpc * 3;
@@ -3541,14 +3566,16 @@ static void fill_dsc(struct intel_crtc_state *crtc_state,
} else {
/* FIXME */
if (!(dsc->slices_per_line & BIT(0)))
- drm_dbg_kms(&i915->drm, "VBT: Unsupported DSC slice count for DSI\n");
+ drm_dbg_kms(display->drm,
+ "VBT: Unsupported DSC slice count for DSI\n");
crtc_state->dsc.slice_count = 1;
}
if (crtc_state->hw.adjusted_mode.crtc_hdisplay %
crtc_state->dsc.slice_count != 0)
- drm_dbg_kms(&i915->drm, "VBT: DSC hdisplay %d not divisible by slice count %d\n",
+ drm_dbg_kms(display->drm,
+ "VBT: DSC hdisplay %d not divisible by slice count %d\n",
crtc_state->hw.adjusted_mode.crtc_hdisplay,
crtc_state->dsc.slice_count);
@@ -3572,16 +3599,16 @@ bool intel_bios_get_dsc_params(struct intel_encoder *encoder,
struct intel_crtc_state *crtc_state,
int dsc_max_bpc)
{
- struct drm_i915_private *i915 = to_i915(encoder->base.dev);
+ struct intel_display *display = to_intel_display(encoder);
const struct intel_bios_encoder_data *devdata;
- list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) {
+ list_for_each_entry(devdata, &display->vbt.display_devices, node) {
const struct child_device_config *child = &devdata->child;
if (!(child->device_type & DEVICE_TYPE_MIPI_OUTPUT))
continue;
- if (dsi_dvo_port_to_port(i915, child->dvo_port) == encoder->port) {
+ if (dsi_dvo_port_to_port(display, child->dvo_port) == encoder->port) {
if (!devdata->dsc)
return false;
@@ -3641,12 +3668,13 @@ static const u8 direct_aux_ch_map[] = {
[AUX_CH_I] = DP_AUX_I, /* aka AUX_CH_USBC6 */
};
-static enum aux_ch map_aux_ch(struct drm_i915_private *i915, u8 aux_channel)
+static enum aux_ch map_aux_ch(struct intel_display *display, u8 aux_channel)
{
+ struct drm_i915_private *i915 = to_i915(display->drm);
const u8 *aux_ch_map;
int i, n_entries;
- if (DISPLAY_VER(i915) >= 13) {
+ if (DISPLAY_VER(display) >= 13) {
aux_ch_map = adlp_aux_ch_map;
n_entries = ARRAY_SIZE(adlp_aux_ch_map);
} else if (IS_ALDERLAKE_S(i915)) {
@@ -3665,7 +3693,7 @@ static enum aux_ch map_aux_ch(struct drm_i915_private *i915, u8 aux_channel)
return i;
}
- drm_dbg_kms(&i915->drm,
+ drm_dbg_kms(display->drm,
"Ignoring alternate AUX CH: VBT claims AUX 0x%x, which is not valid for this platform\n",
aux_channel);
@@ -3677,22 +3705,22 @@ enum aux_ch intel_bios_dp_aux_ch(const struct intel_bios_encoder_data *devdata)
if (!devdata || !devdata->child.aux_channel)
return AUX_CH_NONE;
- return map_aux_ch(devdata->i915, devdata->child.aux_channel);
+ return map_aux_ch(devdata->display, devdata->child.aux_channel);
}
bool intel_bios_dp_has_shared_aux_ch(const struct intel_bios_encoder_data *devdata)
{
- struct drm_i915_private *i915;
+ struct intel_display *display;
u8 aux_channel;
int count = 0;
if (!devdata || !devdata->child.aux_channel)
return false;
- i915 = devdata->i915;
+ display = devdata->display;
aux_channel = devdata->child.aux_channel;
- list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) {
+ list_for_each_entry(devdata, &display->vbt.display_devices, node) {
if (intel_bios_encoder_supports_dp(devdata) &&
aux_channel == devdata->child.aux_channel)
count++;
@@ -3703,18 +3731,18 @@ bool intel_bios_dp_has_shared_aux_ch(const struct intel_bios_encoder_data *devda
int intel_bios_dp_boost_level(const struct intel_bios_encoder_data *devdata)
{
- if (!devdata || devdata->i915->display.vbt.version < 196 || !devdata->child.iboost)
+ if (!devdata || devdata->display->vbt.version < 196 || !devdata->child.iboost)
return 0;
- return translate_iboost(devdata->i915, devdata->child.dp_iboost_level);
+ return translate_iboost(devdata->display, devdata->child.dp_iboost_level);
}
int intel_bios_hdmi_boost_level(const struct intel_bios_encoder_data *devdata)
{
- if (!devdata || devdata->i915->display.vbt.version < 196 || !devdata->child.iboost)
+ if (!devdata || devdata->display->vbt.version < 196 || !devdata->child.iboost)
return 0;
- return translate_iboost(devdata->i915, devdata->child.hdmi_iboost_level);
+ return translate_iboost(devdata->display, devdata->child.hdmi_iboost_level);
}
int intel_bios_hdmi_ddc_pin(const struct intel_bios_encoder_data *devdata)
@@ -3722,17 +3750,17 @@ int intel_bios_hdmi_ddc_pin(const struct intel_bios_encoder_data *devdata)
if (!devdata || !devdata->child.ddc_pin)
return 0;
- return map_ddc_pin(devdata->i915, devdata->child.ddc_pin);
+ return map_ddc_pin(devdata->display, devdata->child.ddc_pin);
}
bool intel_bios_encoder_supports_typec_usb(const struct intel_bios_encoder_data *devdata)
{
- return devdata->i915->display.vbt.version >= 195 && devdata->child.dp_usb_type_c;
+ return devdata->display->vbt.version >= 195 && devdata->child.dp_usb_type_c;
}
bool intel_bios_encoder_supports_tbt(const struct intel_bios_encoder_data *devdata)
{
- return devdata->i915->display.vbt.version >= 209 && devdata->child.tbt;
+ return devdata->display->vbt.version >= 209 && devdata->child.tbt;
}
bool intel_bios_encoder_lane_reversal(const struct intel_bios_encoder_data *devdata)
@@ -3746,11 +3774,11 @@ bool intel_bios_encoder_hpd_invert(const struct intel_bios_encoder_data *devdata
}
const struct intel_bios_encoder_data *
-intel_bios_encoder_data_lookup(struct drm_i915_private *i915, enum port port)
+intel_bios_encoder_data_lookup(struct intel_display *display, enum port port)
{
struct intel_bios_encoder_data *devdata;
- list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) {
+ list_for_each_entry(devdata, &display->vbt.display_devices, node) {
if (intel_bios_encoder_port(devdata) == port)
return devdata;
}
@@ -3758,23 +3786,23 @@ intel_bios_encoder_data_lookup(struct drm_i915_private *i915, enum port port)
return NULL;
}
-void intel_bios_for_each_encoder(struct drm_i915_private *i915,
- void (*func)(struct drm_i915_private *i915,
+void intel_bios_for_each_encoder(struct intel_display *display,
+ void (*func)(struct intel_display *display,
const struct intel_bios_encoder_data *devdata))
{
struct intel_bios_encoder_data *devdata;
- list_for_each_entry(devdata, &i915->display.vbt.display_devices, node)
- func(i915, devdata);
+ list_for_each_entry(devdata, &display->vbt.display_devices, node)
+ func(display, devdata);
}
static int intel_bios_vbt_show(struct seq_file *m, void *unused)
{
- struct drm_i915_private *i915 = m->private;
+ struct intel_display *display = m->private;
const void *vbt;
size_t vbt_size;
- vbt = intel_bios_get_vbt(i915, &vbt_size);
+ vbt = intel_bios_get_vbt(display, &vbt_size);
if (vbt) {
seq_write(m, vbt, vbt_size);
@@ -3786,10 +3814,10 @@ static int intel_bios_vbt_show(struct seq_file *m, void *unused)
DEFINE_SHOW_ATTRIBUTE(intel_bios_vbt);
-void intel_bios_debugfs_register(struct drm_i915_private *i915)
+void intel_bios_debugfs_register(struct intel_display *display)
{
- struct drm_minor *minor = i915->drm.primary;
+ struct drm_minor *minor = display->drm->primary;
debugfs_create_file("i915_vbt", 0444, minor->debugfs_root,
- i915, &intel_bios_vbt_fops);
+ display, &intel_bios_vbt_fops);
}
diff --git a/drivers/gpu/drm/i915/display/intel_bios.h b/drivers/gpu/drm/i915/display/intel_bios.h
index 06a51be4afd8..8b703f6cfe17 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.h
+++ b/drivers/gpu/drm/i915/display/intel_bios.h
@@ -33,9 +33,9 @@
#include <linux/types.h>
struct drm_edid;
-struct drm_i915_private;
struct intel_bios_encoder_data;
struct intel_crtc_state;
+struct intel_display;
struct intel_encoder;
struct intel_panel;
enum aux_ch;
@@ -232,28 +232,28 @@ struct mipi_pps_data {
u16 panel_power_cycle_delay;
} __packed;
-void intel_bios_init(struct drm_i915_private *dev_priv);
-void intel_bios_init_panel_early(struct drm_i915_private *dev_priv,
+void intel_bios_init(struct intel_display *display);
+void intel_bios_init_panel_early(struct intel_display *display,
struct intel_panel *panel,
const struct intel_bios_encoder_data *devdata);
-void intel_bios_init_panel_late(struct drm_i915_private *dev_priv,
+void intel_bios_init_panel_late(struct intel_display *display,
struct intel_panel *panel,
const struct intel_bios_encoder_data *devdata,
const struct drm_edid *drm_edid);
void intel_bios_fini_panel(struct intel_panel *panel);
-void intel_bios_driver_remove(struct drm_i915_private *dev_priv);
-bool intel_bios_is_valid_vbt(struct drm_i915_private *i915,
+void intel_bios_driver_remove(struct intel_display *display);
+bool intel_bios_is_valid_vbt(struct intel_display *display,
const void *buf, size_t size);
-bool intel_bios_is_tv_present(struct drm_i915_private *dev_priv);
-bool intel_bios_is_lvds_present(struct drm_i915_private *dev_priv, u8 *i2c_pin);
-bool intel_bios_is_port_present(struct drm_i915_private *dev_priv, enum port port);
-bool intel_bios_is_dsi_present(struct drm_i915_private *dev_priv, enum port *port);
+bool intel_bios_is_tv_present(struct intel_display *display);
+bool intel_bios_is_lvds_present(struct intel_display *display, u8 *i2c_pin);
+bool intel_bios_is_port_present(struct intel_display *display, enum port port);
+bool intel_bios_is_dsi_present(struct intel_display *display, enum port *port);
bool intel_bios_get_dsc_params(struct intel_encoder *encoder,
struct intel_crtc_state *crtc_state,
int dsc_max_bpc);
const struct intel_bios_encoder_data *
-intel_bios_encoder_data_lookup(struct drm_i915_private *i915, enum port port);
+intel_bios_encoder_data_lookup(struct intel_display *display, 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);
@@ -277,10 +277,10 @@ int intel_bios_hdmi_ddc_pin(const struct intel_bios_encoder_data *devdata);
int intel_bios_hdmi_level_shift(const struct intel_bios_encoder_data *devdata);
int intel_bios_hdmi_max_tmds_clock(const struct intel_bios_encoder_data *devdata);
-void intel_bios_for_each_encoder(struct drm_i915_private *i915,
- void (*func)(struct drm_i915_private *i915,
+void intel_bios_for_each_encoder(struct intel_display *display,
+ void (*func)(struct intel_display *display,
const struct intel_bios_encoder_data *devdata));
-void intel_bios_debugfs_register(struct drm_i915_private *i915);
+void intel_bios_debugfs_register(struct intel_display *display);
#endif /* _INTEL_BIOS_H_ */
diff --git a/drivers/gpu/drm/i915/display/intel_combo_phy.c b/drivers/gpu/drm/i915/display/intel_combo_phy.c
index 143d66951631..3252dab56430 100644
--- a/drivers/gpu/drm/i915/display/intel_combo_phy.c
+++ b/drivers/gpu/drm/i915/display/intel_combo_phy.c
@@ -159,9 +159,11 @@ static bool icl_combo_phy_enabled(struct drm_i915_private *dev_priv,
static bool ehl_vbt_ddi_d_present(struct drm_i915_private *i915)
{
- bool ddi_a_present = intel_bios_is_port_present(i915, PORT_A);
- bool ddi_d_present = intel_bios_is_port_present(i915, PORT_D);
- bool dsi_present = intel_bios_is_dsi_present(i915, NULL);
+ struct intel_display *display = &i915->display;
+
+ bool ddi_a_present = intel_bios_is_port_present(display, PORT_A);
+ bool ddi_d_present = intel_bios_is_port_present(display, PORT_D);
+ bool dsi_present = intel_bios_is_dsi_present(display, NULL);
/*
* VBT's 'dvo port' field for child devices references the DDI, not
diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
index a07aca96e551..7414d767b8dc 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -4853,9 +4853,10 @@ static bool port_in_use(struct drm_i915_private *i915, enum port port)
return false;
}
-void intel_ddi_init(struct drm_i915_private *dev_priv,
+void intel_ddi_init(struct intel_display *display,
const struct intel_bios_encoder_data *devdata)
{
+ struct drm_i915_private *dev_priv = to_i915(display->drm);
struct intel_digital_port *dig_port;
struct intel_encoder *encoder;
bool init_hdmi, init_dp;
diff --git a/drivers/gpu/drm/i915/display/intel_ddi.h b/drivers/gpu/drm/i915/display/intel_ddi.h
index 434de7196875..6d85422bdefe 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.h
+++ b/drivers/gpu/drm/i915/display/intel_ddi.h
@@ -15,6 +15,7 @@ struct intel_bios_encoder_data;
struct intel_connector;
struct intel_crtc;
struct intel_crtc_state;
+struct intel_display;
struct intel_dp;
struct intel_dpll_hw_state;
struct intel_encoder;
@@ -53,7 +54,7 @@ void hsw_prepare_dp_ddi_buffers(struct intel_encoder *encoder,
const struct intel_crtc_state *crtc_state);
void intel_wait_ddi_buf_idle(struct drm_i915_private *dev_priv,
enum port port);
-void intel_ddi_init(struct drm_i915_private *dev_priv,
+void intel_ddi_init(struct intel_display *display,
const struct intel_bios_encoder_data *devdata);
bool intel_ddi_get_hw_state(struct intel_encoder *encoder, enum pipe *pipe);
void intel_ddi_enable_transcoder_func(struct intel_encoder *encoder,
diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index 01a5faa3fea5..48241075eeba 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -7785,6 +7785,7 @@ bool assert_port_valid(struct drm_i915_private *i915, enum port port)
void intel_setup_outputs(struct drm_i915_private *dev_priv)
{
+ struct intel_display *display = &dev_priv->display;
struct intel_encoder *encoder;
bool dpd_is_edp = false;
@@ -7797,7 +7798,7 @@ void intel_setup_outputs(struct drm_i915_private *dev_priv)
if (intel_ddi_crt_present(dev_priv))
intel_crt_init(dev_priv);
- intel_bios_for_each_encoder(dev_priv, intel_ddi_init);
+ intel_bios_for_each_encoder(display, intel_ddi_init);
if (IS_GEMINILAKE(dev_priv) || IS_BROXTON(dev_priv))
vlv_dsi_init(dev_priv);
@@ -7859,14 +7860,14 @@ void intel_setup_outputs(struct drm_i915_private *dev_priv)
* HDMI ports that the VBT claim are DP or eDP.
*/
has_edp = intel_dp_is_port_edp(dev_priv, PORT_B);
- has_port = intel_bios_is_port_present(dev_priv, PORT_B);
+ has_port = intel_bios_is_port_present(display, PORT_B);
if (intel_de_read(dev_priv, VLV_DP_B) & DP_DETECTED || has_port)
has_edp &= g4x_dp_init(dev_priv, VLV_DP_B, PORT_B);
if ((intel_de_read(dev_priv, VLV_HDMIB) & SDVO_DETECTED || has_port) && !has_edp)
g4x_hdmi_init(dev_priv, VLV_HDMIB, PORT_B);
has_edp = intel_dp_is_port_edp(dev_priv, PORT_C);
- has_port = intel_bios_is_port_present(dev_priv, PORT_C);
+ has_port = intel_bios_is_port_present(display, PORT_C);
if (intel_de_read(dev_priv, VLV_DP_C) & DP_DETECTED || has_port)
has_edp &= g4x_dp_init(dev_priv, VLV_DP_C, PORT_C);
if ((intel_de_read(dev_priv, VLV_HDMIC) & SDVO_DETECTED || has_port) && !has_edp)
@@ -7877,7 +7878,7 @@ void intel_setup_outputs(struct drm_i915_private *dev_priv)
* eDP not supported on port D,
* so no need to worry about it
*/
- has_port = intel_bios_is_port_present(dev_priv, PORT_D);
+ has_port = intel_bios_is_port_present(display, PORT_D);
if (intel_de_read(dev_priv, CHV_DP_D) & DP_DETECTED || has_port)
g4x_dp_init(dev_priv, CHV_DP_D, PORT_D);
if (intel_de_read(dev_priv, CHV_HDMID) & SDVO_DETECTED || has_port)
diff --git a/drivers/gpu/drm/i915/display/intel_display_debugfs.c b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
index ac8ad4a40b96..a55c9fac1ca4 100644
--- a/drivers/gpu/drm/i915/display/intel_display_debugfs.c
+++ b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
@@ -1061,7 +1061,7 @@ void intel_display_debugfs_register(struct drm_i915_private *i915)
ARRAY_SIZE(intel_display_debugfs_list),
minor->debugfs_root, minor);
- intel_bios_debugfs_register(i915);
+ intel_bios_debugfs_register(display);
intel_cdclk_debugfs_register(i915);
intel_dmc_debugfs_register(i915);
intel_fbc_debugfs_register(display);
diff --git a/drivers/gpu/drm/i915/display/intel_display_driver.c b/drivers/gpu/drm/i915/display/intel_display_driver.c
index a2666b69834e..328d8b5a6b66 100644
--- a/drivers/gpu/drm/i915/display/intel_display_driver.c
+++ b/drivers/gpu/drm/i915/display/intel_display_driver.c
@@ -217,7 +217,7 @@ int intel_display_driver_probe_noirq(struct drm_i915_private *i915)
return ret;
}
- intel_bios_init(i915);
+ intel_bios_init(display);
ret = intel_vga_register(i915);
if (ret)
@@ -275,7 +275,7 @@ int intel_display_driver_probe_noirq(struct drm_i915_private *i915)
cleanup_vga:
intel_vga_unregister(i915);
cleanup_bios:
- intel_bios_driver_remove(i915);
+ intel_bios_driver_remove(display);
return ret;
}
@@ -615,13 +615,15 @@ void intel_display_driver_remove_noirq(struct drm_i915_private *i915)
/* part #3: call after gem init */
void intel_display_driver_remove_nogem(struct drm_i915_private *i915)
{
+ struct intel_display *display = &i915->display;
+
intel_dmc_fini(i915);
intel_power_domains_driver_remove(i915);
intel_vga_unregister(i915);
- intel_bios_driver_remove(i915);
+ intel_bios_driver_remove(display);
}
void intel_display_driver_unregister(struct drm_i915_private *i915)
diff --git a/drivers/gpu/drm/i915/display/intel_display_irq.c b/drivers/gpu/drm/i915/display/intel_display_irq.c
index 6cc1cc5e94d5..3f53db68c44c 100644
--- a/drivers/gpu/drm/i915/display/intel_display_irq.c
+++ b/drivers/gpu/drm/i915/display/intel_display_irq.c
@@ -1690,6 +1690,7 @@ static void icp_irq_postinstall(struct drm_i915_private *i915);
void gen8_de_irq_postinstall(struct drm_i915_private *dev_priv)
{
+ struct intel_display *display = &dev_priv->display;
struct intel_uncore *uncore = &dev_priv->uncore;
u32 de_pipe_masked = gen8_de_pipe_fault_mask(dev_priv) |
@@ -1724,7 +1725,7 @@ void gen8_de_irq_postinstall(struct drm_i915_private *dev_priv)
} else if (DISPLAY_VER(dev_priv) >= 11) {
enum port port;
- if (intel_bios_is_dsi_present(dev_priv, &port))
+ if (intel_bios_is_dsi_present(display, &port))
de_port_masked |= DSI0_TE | DSI1_TE;
}
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 86412ae7b48f..2e5a4e2218c2 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -6385,8 +6385,9 @@ static bool _intel_dp_is_port_edp(struct drm_i915_private *dev_priv,
bool intel_dp_is_port_edp(struct drm_i915_private *i915, enum port port)
{
+ struct intel_display *display = &i915->display;
const struct intel_bios_encoder_data *devdata =
- intel_bios_encoder_data_lookup(i915, port);
+ intel_bios_encoder_data_lookup(display, port);
return _intel_dp_is_port_edp(i915, devdata, port);
}
@@ -6489,6 +6490,7 @@ static void intel_edp_backlight_setup(struct intel_dp *intel_dp,
static bool intel_edp_init_connector(struct intel_dp *intel_dp,
struct intel_connector *intel_connector)
{
+ struct intel_display *display = to_intel_display(intel_dp);
struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
struct drm_connector *connector = &intel_connector->base;
struct drm_display_mode *fixed_mode;
@@ -6514,7 +6516,7 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
return false;
}
- intel_bios_init_panel_early(dev_priv, &intel_connector->panel,
+ intel_bios_init_panel_early(display, &intel_connector->panel,
encoder->devdata);
if (!intel_pps_init(intel_dp)) {
@@ -6611,7 +6613,7 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
drm_edid = ERR_PTR(-ENOENT);
}
- intel_bios_init_panel_late(dev_priv, &intel_connector->panel, encoder->devdata,
+ intel_bios_init_panel_late(display, &intel_connector->panel, encoder->devdata,
IS_ERR(drm_edid) ? NULL : drm_edid);
intel_panel_add_edid_fixed_modes(intel_connector, true);
diff --git a/drivers/gpu/drm/i915/display/intel_lvds.c b/drivers/gpu/drm/i915/display/intel_lvds.c
index 9f018503d4fd..fb4ed9f7855b 100644
--- a/drivers/gpu/drm/i915/display/intel_lvds.c
+++ b/drivers/gpu/drm/i915/display/intel_lvds.c
@@ -838,6 +838,7 @@ static void intel_lvds_add_properties(struct drm_connector *connector)
*/
void intel_lvds_init(struct drm_i915_private *i915)
{
+ struct intel_display *display = &i915->display;
struct intel_lvds_encoder *lvds_encoder;
struct intel_connector *connector;
const struct drm_edid *drm_edid;
@@ -872,7 +873,7 @@ void intel_lvds_init(struct drm_i915_private *i915)
}
ddc_pin = GMBUS_PIN_PANEL;
- if (!intel_bios_is_lvds_present(i915, &ddc_pin)) {
+ if (!intel_bios_is_lvds_present(display, &ddc_pin)) {
if ((lvds & LVDS_PORT_EN) == 0) {
drm_dbg_kms(&i915->drm,
"LVDS is not present in VBT\n");
@@ -966,7 +967,7 @@ void intel_lvds_init(struct drm_i915_private *i915)
} else {
drm_edid = ERR_PTR(-ENOENT);
}
- intel_bios_init_panel_late(i915, &connector->panel, NULL,
+ intel_bios_init_panel_late(display, &connector->panel, NULL,
IS_ERR(drm_edid) ? NULL : drm_edid);
/* Try EDID first */
diff --git a/drivers/gpu/drm/i915/display/intel_opregion.c b/drivers/gpu/drm/i915/display/intel_opregion.c
index 0cf6c0711dae..d3d0b4b2e088 100644
--- a/drivers/gpu/drm/i915/display/intel_opregion.c
+++ b/drivers/gpu/drm/i915/display/intel_opregion.c
@@ -870,7 +870,6 @@ static const struct dmi_system_id intel_no_opregion_vbt[] = {
int intel_opregion_setup(struct intel_display *display)
{
- struct drm_i915_private *i915 = to_i915(display->drm);
struct intel_opregion *opregion;
struct pci_dev *pdev = to_pci_dev(display->drm->dev);
u32 asls, mboxes;
@@ -991,7 +990,7 @@ int intel_opregion_setup(struct intel_display *display)
vbt = opregion->rvda;
vbt_size = opregion->asle->rvds;
- if (intel_bios_is_valid_vbt(i915, vbt, vbt_size)) {
+ if (intel_bios_is_valid_vbt(display, vbt, vbt_size)) {
drm_dbg_kms(display->drm,
"Found valid VBT in ACPI OpRegion (RVDA)\n");
opregion->vbt = vbt;
@@ -1016,7 +1015,7 @@ int intel_opregion_setup(struct intel_display *display)
vbt_size = (mboxes & MBOX_ASLE_EXT) ?
OPREGION_ASLE_EXT_OFFSET : OPREGION_SIZE;
vbt_size -= OPREGION_VBT_OFFSET;
- if (intel_bios_is_valid_vbt(i915, vbt, vbt_size)) {
+ if (intel_bios_is_valid_vbt(display, vbt, vbt_size)) {
drm_dbg_kms(display->drm,
"Found valid VBT in ACPI OpRegion (Mailbox #4)\n");
opregion->vbt = vbt;
diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
index 4cfa27ca8c22..7cc519b402e9 100644
--- a/drivers/gpu/drm/i915/display/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
@@ -2919,6 +2919,7 @@ intel_sdvo_analog_init(struct intel_sdvo *intel_sdvo, u16 type)
static bool
intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, u16 type)
{
+ struct intel_display *display = to_intel_display(&intel_sdvo->base);
struct drm_encoder *encoder = &intel_sdvo->base.base;
struct drm_i915_private *i915 = to_i915(encoder->dev);
struct drm_connector *connector;
@@ -2946,7 +2947,7 @@ intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, u16 type)
if (!intel_sdvo_create_enhance_property(intel_sdvo, intel_sdvo_connector))
goto err;
- intel_bios_init_panel_late(i915, &intel_connector->panel, NULL, NULL);
+ intel_bios_init_panel_late(display, &intel_connector->panel, NULL, NULL);
/*
* Fetch modes from VBT. For SDVO prefer the VBT mode since some
diff --git a/drivers/gpu/drm/i915/display/intel_tv.c b/drivers/gpu/drm/i915/display/intel_tv.c
index 9df0f1263913..bfc43bda8532 100644
--- a/drivers/gpu/drm/i915/display/intel_tv.c
+++ b/drivers/gpu/drm/i915/display/intel_tv.c
@@ -1930,6 +1930,7 @@ static void intel_tv_add_properties(struct drm_connector *connector)
void
intel_tv_init(struct drm_i915_private *dev_priv)
{
+ struct intel_display *display = &dev_priv->display;
struct drm_connector *connector;
struct intel_tv *intel_tv;
struct intel_encoder *intel_encoder;
@@ -1939,7 +1940,7 @@ intel_tv_init(struct drm_i915_private *dev_priv)
if ((intel_de_read(dev_priv, TV_CTL) & TV_FUSE_STATE_MASK) == TV_FUSE_STATE_DISABLED)
return;
- if (!intel_bios_is_tv_present(dev_priv)) {
+ if (!intel_bios_is_tv_present(display)) {
drm_dbg_kms(&dev_priv->drm, "Integrated TV is not present.\n");
return;
}
diff --git a/drivers/gpu/drm/i915/display/vlv_dsi.c b/drivers/gpu/drm/i915/display/vlv_dsi.c
index eae5b5e09aa8..248bab691181 100644
--- a/drivers/gpu/drm/i915/display/vlv_dsi.c
+++ b/drivers/gpu/drm/i915/display/vlv_dsi.c
@@ -1880,6 +1880,7 @@ static const struct dmi_system_id vlv_dsi_dmi_quirk_table[] = {
void vlv_dsi_init(struct drm_i915_private *dev_priv)
{
+ struct intel_display *display = &dev_priv->display;
struct intel_dsi *intel_dsi;
struct intel_encoder *encoder;
struct intel_connector *connector;
@@ -1891,7 +1892,7 @@ void vlv_dsi_init(struct drm_i915_private *dev_priv)
drm_dbg_kms(&dev_priv->drm, "\n");
/* There is no detection method for MIPI so rely on VBT */
- if (!intel_bios_is_dsi_present(dev_priv, &port))
+ if (!intel_bios_is_dsi_present(display, &port))
return;
if (IS_GEMINILAKE(dev_priv) || IS_BROXTON(dev_priv))
@@ -1946,7 +1947,7 @@ void vlv_dsi_init(struct drm_i915_private *dev_priv)
intel_dsi->panel_power_off_time = ktime_get_boottime();
- intel_bios_init_panel_late(dev_priv, &connector->panel, NULL, NULL);
+ intel_bios_init_panel_late(display, &connector->panel, NULL, NULL);
if (connector->panel.vbt.dsi.config->dual_link)
intel_dsi->ports = BIT(PORT_A) | BIT(PORT_C);
--
2.39.2
^ permalink raw reply related [flat|nested] 12+ messages in thread
* ✗ Fi.CI.SPARSE: warning for drm/i915: struct intel_display conversions
2024-07-31 16:44 [PATCH 0/4] drm/i915: struct intel_display conversions Jani Nikula
` (3 preceding siblings ...)
2024-07-31 16:44 ` [PATCH 4/4] drm/i915/bios: " Jani Nikula
@ 2024-07-31 17:38 ` Patchwork
2024-07-31 17:53 ` ✗ Fi.CI.BAT: failure " Patchwork
5 siblings, 0 replies; 12+ messages in thread
From: Patchwork @ 2024-07-31 17:38 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
== Series Details ==
Series: drm/i915: struct intel_display conversions
URL : https://patchwork.freedesktop.org/series/136758/
State : warning
== Summary ==
Error: dim sparse failed
Sparse version: v0.6.2
Fast mode used, each commit won't be checked separately.
^ permalink raw reply [flat|nested] 12+ messages in thread
* ✗ Fi.CI.BAT: failure for drm/i915: struct intel_display conversions
2024-07-31 16:44 [PATCH 0/4] drm/i915: struct intel_display conversions Jani Nikula
` (4 preceding siblings ...)
2024-07-31 17:38 ` ✗ Fi.CI.SPARSE: warning for drm/i915: struct intel_display conversions Patchwork
@ 2024-07-31 17:53 ` Patchwork
5 siblings, 0 replies; 12+ messages in thread
From: Patchwork @ 2024-07-31 17:53 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
[-- Attachment #1: Type: text/plain, Size: 5708 bytes --]
== Series Details ==
Series: drm/i915: struct intel_display conversions
URL : https://patchwork.freedesktop.org/series/136758/
State : failure
== Summary ==
CI Bug Log - changes from CI_DRM_15162 -> Patchwork_136758v1
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with Patchwork_136758v1 absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in Patchwork_136758v1, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
to document this new failure mode, which will reduce false positives in CI.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_136758v1/index.html
Participating hosts (37 -> 32)
------------------------------
Additional (1): bat-arlh-3
Missing (6): fi-kbl-7567u fi-bsw-n3050 fi-snb-2520m fi-glk-j4005 fi-kbl-8809g fi-elk-e7500
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in Patchwork_136758v1:
### IGT changes ###
#### Possible regressions ####
* igt@i915_selftest@live@gt_mocs:
- bat-twl-2: [PASS][1] -> [ABORT][2]
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15162/bat-twl-2/igt@i915_selftest@live@gt_mocs.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_136758v1/bat-twl-2/igt@i915_selftest@live@gt_mocs.html
#### Suppressed ####
The following results come from untrusted machines, tests, or statuses.
They do not affect the overall result.
* igt@i915_selftest@live@guc:
- {bat-arlh-3}: NOTRUN -> [INCOMPLETE][3]
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_136758v1/bat-arlh-3/igt@i915_selftest@live@guc.html
Known issues
------------
Here are the changes found in Patchwork_136758v1 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@i915_selftest@live@hangcheck:
- bat-arls-1: [PASS][4] -> [DMESG-WARN][5] ([i915#11349] / [i915#11378])
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15162/bat-arls-1/igt@i915_selftest@live@hangcheck.html
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_136758v1/bat-arls-1/igt@i915_selftest@live@hangcheck.html
* igt@i915_selftest@live@late_gt_pm:
- bat-arls-2: [PASS][6] -> [DMESG-FAIL][7] ([i915#10262]) +4 other tests dmesg-fail
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15162/bat-arls-2/igt@i915_selftest@live@late_gt_pm.html
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_136758v1/bat-arls-2/igt@i915_selftest@live@late_gt_pm.html
* igt@i915_selftest@live@perf:
- bat-arls-2: [PASS][8] -> [DMESG-WARN][9] ([i915#11378])
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15162/bat-arls-2/igt@i915_selftest@live@perf.html
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_136758v1/bat-arls-2/igt@i915_selftest@live@perf.html
#### Possible fixes ####
* igt@i915_selftest@live@gem_migrate:
- bat-arlh-2: [INCOMPLETE][10] ([i915#11598]) -> [PASS][11]
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15162/bat-arlh-2/igt@i915_selftest@live@gem_migrate.html
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_136758v1/bat-arlh-2/igt@i915_selftest@live@gem_migrate.html
* igt@i915_selftest@live@hangcheck:
- bat-arls-2: [DMESG-WARN][12] ([i915#11349] / [i915#11378]) -> [PASS][13]
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15162/bat-arls-2/igt@i915_selftest@live@hangcheck.html
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_136758v1/bat-arls-2/igt@i915_selftest@live@hangcheck.html
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
[i915#10196]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10196
[i915#10262]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10262
[i915#11343]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11343
[i915#11346]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11346
[i915#11349]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11349
[i915#11378]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11378
[i915#11598]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11598
[i915#11666]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11666
[i915#11671]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11671
[i915#11681]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11681
[i915#11723]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11723
[i915#11724]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11724
[i915#11725]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11725
[i915#11726]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11726
[i915#8809]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8809
[i915#9318]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9318
[i915#9886]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9886
Build changes
-------------
* Linux: CI_DRM_15162 -> Patchwork_136758v1
CI-20190529: 20190529
CI_DRM_15162: 91efc68883cbff0e7e453d1828c8e84d9959c458 @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_7947: 6b46cef93ce2c2f821bfcaa3c3a111e1cf5c76fc @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
Patchwork_136758v1: 91efc68883cbff0e7e453d1828c8e84d9959c458 @ git://anongit.freedesktop.org/gfx-ci/linux
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_136758v1/index.html
[-- Attachment #2: Type: text/html, Size: 5725 bytes --]
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 3/4] drm/i915/opregion: convert to struct intel_display
2024-07-31 16:44 ` [PATCH 3/4] drm/i915/opregion: convert to struct intel_display Jani Nikula
@ 2024-08-02 10:07 ` kernel test robot
2024-08-06 14:37 ` Imre Deak
1 sibling, 0 replies; 12+ messages in thread
From: kernel test robot @ 2024-08-02 10:07 UTC (permalink / raw)
To: Jani Nikula, intel-gfx, intel-xe; +Cc: oe-kbuild-all, jani.nikula
Hi Jani,
kernel test robot noticed the following build errors:
[auto build test ERROR on drm-intel/for-linux-next]
[also build test ERROR on drm-tip/drm-tip next-20240802]
[cannot apply to drm-intel/for-linux-next-fixes drm-xe/drm-xe-next linus/master v6.11-rc1]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Jani-Nikula/drm-i915-acpi-convert-to-struct-intel_display/20240802-080825
base: git://anongit.freedesktop.org/drm-intel for-linux-next
patch link: https://lore.kernel.org/r/8a71cea4f260a992200c76480c5358b72a7f9187.1722444150.git.jani.nikula%40intel.com
patch subject: [PATCH 3/4] drm/i915/opregion: convert to struct intel_display
config: i386-buildonly-randconfig-004-20240802 (https://download.01.org/0day-ci/archive/20240802/202408021709.1eljj3eQ-lkp@intel.com/config)
compiler: gcc-13 (Ubuntu 13.2.0-4ubuntu3) 13.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240802/202408021709.1eljj3eQ-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202408021709.1eljj3eQ-lkp@intel.com/
All errors (new ones prefixed by >>):
drivers/gpu/drm/i915/display/intel_bios.c: In function 'opregion_get_panel_type':
>> drivers/gpu/drm/i915/display/intel_bios.c:626:46: error: passing argument 1 of 'intel_opregion_get_panel_type' from incompatible pointer type [-Werror=incompatible-pointer-types]
626 | return intel_opregion_get_panel_type(display);
| ^~~~~~~
| |
| struct intel_display *
In file included from drivers/gpu/drm/i915/display/intel_display_core.h:28,
from drivers/gpu/drm/i915/i915_drv.h:40,
from drivers/gpu/drm/i915/display/intel_bios.c:34:
drivers/gpu/drm/i915/display/intel_opregion.h:112:74: note: expected 'struct drm_i915_private *' but argument is of type 'struct intel_display *'
112 | static inline int intel_opregion_get_panel_type(struct drm_i915_private *dev)
| ~~~~~~~~~~~~~~~~~~~~~~~~~^~~
cc1: some warnings being treated as errors
--
drivers/gpu/drm/i915/i915_driver.c: In function 'intel_runtime_suspend':
>> drivers/gpu/drm/i915/i915_driver.c:1536:47: error: passing argument 1 of 'intel_opregion_notify_adapter' from incompatible pointer type [-Werror=incompatible-pointer-types]
1536 | intel_opregion_notify_adapter(display, PCI_D3hot);
| ^~~~~~~
| |
| struct intel_display *
In file included from drivers/gpu/drm/i915/display/intel_display_core.h:28,
from drivers/gpu/drm/i915/i915_drv.h:40,
from drivers/gpu/drm/i915/gt/intel_context.h:14,
from drivers/gpu/drm/i915/gem/i915_gem_context.h:12,
from drivers/gpu/drm/i915/i915_driver.c:67:
drivers/gpu/drm/i915/display/intel_opregion.h:107:56: note: expected 'struct drm_i915_private *' but argument is of type 'struct intel_display *'
107 | intel_opregion_notify_adapter(struct drm_i915_private *dev, pci_power_t state)
| ~~~~~~~~~~~~~~~~~~~~~~~~~^~~
drivers/gpu/drm/i915/i915_driver.c:1545:47: error: passing argument 1 of 'intel_opregion_notify_adapter' from incompatible pointer type [-Werror=incompatible-pointer-types]
1545 | intel_opregion_notify_adapter(display, PCI_D1);
| ^~~~~~~
| |
| struct intel_display *
drivers/gpu/drm/i915/display/intel_opregion.h:107:56: note: expected 'struct drm_i915_private *' but argument is of type 'struct intel_display *'
107 | intel_opregion_notify_adapter(struct drm_i915_private *dev, pci_power_t state)
| ~~~~~~~~~~~~~~~~~~~~~~~~~^~~
drivers/gpu/drm/i915/i915_driver.c: In function 'intel_runtime_resume':
drivers/gpu/drm/i915/i915_driver.c:1575:39: error: passing argument 1 of 'intel_opregion_notify_adapter' from incompatible pointer type [-Werror=incompatible-pointer-types]
1575 | intel_opregion_notify_adapter(display, PCI_D0);
| ^~~~~~~
| |
| struct intel_display *
drivers/gpu/drm/i915/display/intel_opregion.h:107:56: note: expected 'struct drm_i915_private *' but argument is of type 'struct intel_display *'
107 | intel_opregion_notify_adapter(struct drm_i915_private *dev, pci_power_t state)
| ~~~~~~~~~~~~~~~~~~~~~~~~~^~~
cc1: some warnings being treated as errors
vim +/intel_opregion_get_panel_type +626 drivers/gpu/drm/i915/display/intel_bios.c
619
620 static int opregion_get_panel_type(struct drm_i915_private *i915,
621 const struct intel_bios_encoder_data *devdata,
622 const struct drm_edid *drm_edid, bool use_fallback)
623 {
624 struct intel_display *display = &i915->display;
625
> 626 return intel_opregion_get_panel_type(display);
627 }
628
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 1/4] drm/i915/acpi: convert to struct intel_display
2024-07-31 16:44 ` [PATCH 1/4] drm/i915/acpi: convert to struct intel_display Jani Nikula
@ 2024-08-06 13:51 ` Imre Deak
0 siblings, 0 replies; 12+ messages in thread
From: Imre Deak @ 2024-08-06 13:51 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx, intel-xe
On Wed, Jul 31, 2024 at 07:44:33PM +0300, Jani Nikula wrote:
> Going forward, struct intel_display shall replace struct
> drm_i915_private as the main display device data pointer type. Convert
> intel_acpi.[ch] to struct intel_display.
>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Imre Deak <imre.deak@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_acpi.c | 17 ++++++++---------
> drivers/gpu/drm/i915/display/intel_acpi.h | 18 +++++++++---------
> .../drm/i915/display/intel_display_driver.c | 8 +++++---
> drivers/gpu/drm/i915/display/intel_opregion.c | 10 ++++++----
> 4 files changed, 28 insertions(+), 25 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_acpi.c b/drivers/gpu/drm/i915/display/intel_acpi.c
> index 0aa3999374e2..c3b29a331d72 100644
> --- a/drivers/gpu/drm/i915/display/intel_acpi.c
> +++ b/drivers/gpu/drm/i915/display/intel_acpi.c
> @@ -183,9 +183,9 @@ void intel_unregister_dsm_handler(void)
> {
> }
>
> -void intel_dsm_get_bios_data_funcs_supported(struct drm_i915_private *i915)
> +void intel_dsm_get_bios_data_funcs_supported(struct intel_display *display)
> {
> - struct pci_dev *pdev = to_pci_dev(i915->drm.dev);
> + struct pci_dev *pdev = to_pci_dev(display->drm->dev);
> acpi_handle dhandle;
> union acpi_object *obj;
>
> @@ -263,15 +263,14 @@ static u32 acpi_display_type(struct intel_connector *connector)
> return display_type;
> }
>
> -void intel_acpi_device_id_update(struct drm_i915_private *dev_priv)
> +void intel_acpi_device_id_update(struct intel_display *display)
> {
> - struct drm_device *drm_dev = &dev_priv->drm;
> struct intel_connector *connector;
> struct drm_connector_list_iter conn_iter;
> u8 display_index[16] = {};
>
> /* Populate the ACPI IDs for all connectors for a given drm_device */
> - drm_connector_list_iter_begin(drm_dev, &conn_iter);
> + drm_connector_list_iter_begin(display->drm, &conn_iter);
> for_each_intel_connector_iter(connector, &conn_iter) {
> u32 device_id, type;
>
> @@ -288,10 +287,10 @@ void intel_acpi_device_id_update(struct drm_i915_private *dev_priv)
> }
>
> /* NOTE: The connector order must be final before this is called. */
> -void intel_acpi_assign_connector_fwnodes(struct drm_i915_private *i915)
> +void intel_acpi_assign_connector_fwnodes(struct intel_display *display)
> {
> + struct drm_device *drm_dev = display->drm;
> struct drm_connector_list_iter conn_iter;
> - struct drm_device *drm_dev = &i915->drm;
> struct fwnode_handle *fwnode = NULL;
> struct drm_connector *connector;
> struct acpi_device *adev;
> @@ -333,7 +332,7 @@ void intel_acpi_assign_connector_fwnodes(struct drm_i915_private *i915)
> fwnode_handle_put(fwnode);
> }
>
> -void intel_acpi_video_register(struct drm_i915_private *i915)
> +void intel_acpi_video_register(struct intel_display *display)
> {
> struct drm_connector_list_iter conn_iter;
> struct drm_connector *connector;
> @@ -347,7 +346,7 @@ void intel_acpi_video_register(struct drm_i915_private *i915)
> * a native backlight later and acpi_video_register_backlight() should
> * only be called after any native backlights have been registered.
> */
> - drm_connector_list_iter_begin(&i915->drm, &conn_iter);
> + drm_connector_list_iter_begin(display->drm, &conn_iter);
> drm_for_each_connector_iter(connector, &conn_iter) {
> struct intel_panel *panel = &to_intel_connector(connector)->panel;
>
> diff --git a/drivers/gpu/drm/i915/display/intel_acpi.h b/drivers/gpu/drm/i915/display/intel_acpi.h
> index 6a0007452f95..788a63071661 100644
> --- a/drivers/gpu/drm/i915/display/intel_acpi.h
> +++ b/drivers/gpu/drm/i915/display/intel_acpi.h
> @@ -6,26 +6,26 @@
> #ifndef __INTEL_ACPI_H__
> #define __INTEL_ACPI_H__
>
> -struct drm_i915_private;
> +struct intel_display;
>
> #ifdef CONFIG_ACPI
> void intel_register_dsm_handler(void);
> void intel_unregister_dsm_handler(void);
> -void intel_dsm_get_bios_data_funcs_supported(struct drm_i915_private *i915);
> -void intel_acpi_device_id_update(struct drm_i915_private *i915);
> -void intel_acpi_assign_connector_fwnodes(struct drm_i915_private *i915);
> -void intel_acpi_video_register(struct drm_i915_private *i915);
> +void intel_dsm_get_bios_data_funcs_supported(struct intel_display *display);
> +void intel_acpi_device_id_update(struct intel_display *display);
> +void intel_acpi_assign_connector_fwnodes(struct intel_display *display);
> +void intel_acpi_video_register(struct intel_display *display);
> #else
> static inline void intel_register_dsm_handler(void) { return; }
> static inline void intel_unregister_dsm_handler(void) { return; }
> static inline
> -void intel_dsm_get_bios_data_funcs_supported(struct drm_i915_private *i915) { return; }
> +void intel_dsm_get_bios_data_funcs_supported(struct intel_display *display) { return; }
> static inline
> -void intel_acpi_device_id_update(struct drm_i915_private *i915) { return; }
> +void intel_acpi_device_id_update(struct intel_display *display) { return; }
> static inline
> -void intel_acpi_assign_connector_fwnodes(struct drm_i915_private *i915) { return; }
> +void intel_acpi_assign_connector_fwnodes(struct intel_display *display) { return; }
> static inline
> -void intel_acpi_video_register(struct drm_i915_private *i915) { return; }
> +void intel_acpi_video_register(struct intel_display *display) { return; }
> #endif /* CONFIG_ACPI */
>
> #endif /* __INTEL_ACPI_H__ */
> diff --git a/drivers/gpu/drm/i915/display/intel_display_driver.c b/drivers/gpu/drm/i915/display/intel_display_driver.c
> index 13e206ec450f..392c10359a52 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_driver.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_driver.c
> @@ -416,7 +416,8 @@ bool intel_display_driver_check_access(struct drm_i915_private *i915)
> /* part #2: call after irq install, but before gem init */
> int intel_display_driver_probe_nogem(struct drm_i915_private *i915)
> {
> - struct drm_device *dev = &i915->drm;
> + struct intel_display *display = &i915->display;
> + struct drm_device *dev = display->drm;
> enum pipe pipe;
> int ret;
>
> @@ -466,7 +467,7 @@ int intel_display_driver_probe_nogem(struct drm_i915_private *i915)
>
> drm_modeset_lock_all(dev);
> intel_modeset_setup_hw_state(i915, dev->mode_config.acquire_ctx);
> - intel_acpi_assign_connector_fwnodes(i915);
> + intel_acpi_assign_connector_fwnodes(display);
> drm_modeset_unlock_all(dev);
>
> intel_initial_plane_config(i915);
> @@ -526,6 +527,7 @@ int intel_display_driver_probe(struct drm_i915_private *i915)
>
> void intel_display_driver_register(struct drm_i915_private *i915)
> {
> + struct intel_display *display = &i915->display;
> struct drm_printer p = drm_dbg_printer(&i915->drm, DRM_UT_KMS,
> "i915 display info:");
>
> @@ -534,7 +536,7 @@ void intel_display_driver_register(struct drm_i915_private *i915)
>
> /* Must be done after probing outputs */
> intel_opregion_register(i915);
> - intel_acpi_video_register(i915);
> + intel_acpi_video_register(display);
>
> intel_audio_init(i915);
>
> diff --git a/drivers/gpu/drm/i915/display/intel_opregion.c b/drivers/gpu/drm/i915/display/intel_opregion.c
> index 68bd5101ec89..4ff646a7f05d 100644
> --- a/drivers/gpu/drm/i915/display/intel_opregion.c
> +++ b/drivers/gpu/drm/i915/display/intel_opregion.c
> @@ -722,7 +722,8 @@ static void set_did(struct intel_opregion *opregion, int i, u32 val)
>
> static void intel_didl_outputs(struct drm_i915_private *dev_priv)
> {
> - struct intel_opregion *opregion = dev_priv->display.opregion;
> + struct intel_display *display = &dev_priv->display;
> + struct intel_opregion *opregion = display->opregion;
> struct intel_connector *connector;
> struct drm_connector_list_iter conn_iter;
> int i = 0, max_outputs;
> @@ -737,7 +738,7 @@ static void intel_didl_outputs(struct drm_i915_private *dev_priv)
> max_outputs = ARRAY_SIZE(opregion->acpi->didl) +
> ARRAY_SIZE(opregion->acpi->did2);
>
> - intel_acpi_device_id_update(dev_priv);
> + intel_acpi_device_id_update(display);
>
> drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter);
> for_each_intel_connector_iter(connector, &conn_iter) {
> @@ -1189,7 +1190,8 @@ void intel_opregion_register(struct drm_i915_private *i915)
>
> static void intel_opregion_resume_display(struct drm_i915_private *i915)
> {
> - struct intel_opregion *opregion = i915->display.opregion;
> + struct intel_display *display = &i915->display;
> + struct intel_opregion *opregion = display->opregion;
>
> if (opregion->acpi) {
> intel_didl_outputs(i915);
> @@ -1210,7 +1212,7 @@ static void intel_opregion_resume_display(struct drm_i915_private *i915)
> }
>
> /* Some platforms abuse the _DSM to enable MUX */
> - intel_dsm_get_bios_data_funcs_supported(i915);
> + intel_dsm_get_bios_data_funcs_supported(display);
> }
>
> void intel_opregion_resume(struct drm_i915_private *i915)
> --
> 2.39.2
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 2/4] drm/i915/opregion: unify intel_encoder/intel_connector naming
2024-07-31 16:44 ` [PATCH 2/4] drm/i915/opregion: unify intel_encoder/intel_connector naming Jani Nikula
@ 2024-08-06 13:53 ` Imre Deak
0 siblings, 0 replies; 12+ messages in thread
From: Imre Deak @ 2024-08-06 13:53 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx, intel-xe
On Wed, Jul 31, 2024 at 07:44:34PM +0300, Jani Nikula wrote:
> Prefer the short encoder/connector names for struct
> intel_encoder/intel_connector variables and parameters.
>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Imre Deak <imre.deak@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_opregion.c | 23 +++++++++----------
> drivers/gpu/drm/i915/display/intel_opregion.h | 4 ++--
> 2 files changed, 13 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_opregion.c b/drivers/gpu/drm/i915/display/intel_opregion.c
> index 4ff646a7f05d..4c9b9e7ebc91 100644
> --- a/drivers/gpu/drm/i915/display/intel_opregion.c
> +++ b/drivers/gpu/drm/i915/display/intel_opregion.c
> @@ -381,10 +381,10 @@ static int swsci(struct drm_i915_private *dev_priv,
> #define DISPLAY_TYPE_EXTERNAL_FLAT_PANEL 2
> #define DISPLAY_TYPE_INTERNAL_FLAT_PANEL 3
>
> -int intel_opregion_notify_encoder(struct intel_encoder *intel_encoder,
> +int intel_opregion_notify_encoder(struct intel_encoder *encoder,
> bool enable)
> {
> - struct drm_i915_private *dev_priv = to_i915(intel_encoder->base.dev);
> + struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
> u32 parm = 0;
> u32 type = 0;
> u32 port;
> @@ -399,10 +399,10 @@ int intel_opregion_notify_encoder(struct intel_encoder *intel_encoder,
> if (ret)
> return ret;
>
> - if (intel_encoder->type == INTEL_OUTPUT_DSI)
> + if (encoder->type == INTEL_OUTPUT_DSI)
> port = 0;
> else
> - port = intel_encoder->port;
> + port = encoder->port;
>
> if (port == PORT_E) {
> port = 0;
> @@ -421,15 +421,15 @@ int intel_opregion_notify_encoder(struct intel_encoder *intel_encoder,
> if (port > 4) {
> drm_dbg_kms(&dev_priv->drm,
> "[ENCODER:%d:%s] port %c (index %u) out of bounds for display power state notification\n",
> - intel_encoder->base.base.id, intel_encoder->base.name,
> - port_name(intel_encoder->port), port);
> + encoder->base.base.id, encoder->base.name,
> + port_name(encoder->port), port);
> return -EINVAL;
> }
>
> if (!enable)
> parm |= 4 << 8;
>
> - switch (intel_encoder->type) {
> + switch (encoder->type) {
> case INTEL_OUTPUT_ANALOG:
> type = DISPLAY_TYPE_CRT;
> break;
> @@ -446,7 +446,7 @@ int intel_opregion_notify_encoder(struct intel_encoder *intel_encoder,
> default:
> drm_WARN_ONCE(&dev_priv->drm, 1,
> "unsupported intel_encoder type %d\n",
> - intel_encoder->type);
> + encoder->type);
> return -EINVAL;
> }
>
> @@ -1093,7 +1093,7 @@ intel_opregion_get_panel_type(struct drm_i915_private *dev_priv)
>
> /**
> * intel_opregion_get_edid - Fetch EDID from ACPI OpRegion mailbox #5
> - * @intel_connector: eDP connector
> + * @connector: eDP connector
> *
> * This reads the ACPI Opregion mailbox #5 to extract the EDID that is passed
> * to it.
> @@ -1102,10 +1102,9 @@ intel_opregion_get_panel_type(struct drm_i915_private *dev_priv)
> * The EDID in the OpRegion, or NULL if there is none or it's invalid.
> *
> */
> -const struct drm_edid *intel_opregion_get_edid(struct intel_connector *intel_connector)
> +const struct drm_edid *intel_opregion_get_edid(struct intel_connector *connector)
> {
> - struct drm_connector *connector = &intel_connector->base;
> - struct drm_i915_private *i915 = to_i915(connector->dev);
> + struct drm_i915_private *i915 = to_i915(connector->base.dev);
> struct intel_opregion *opregion = i915->display.opregion;
> const struct drm_edid *drm_edid;
> const void *edid;
> diff --git a/drivers/gpu/drm/i915/display/intel_opregion.h b/drivers/gpu/drm/i915/display/intel_opregion.h
> index 4b2b8e752632..4dcd13c672e4 100644
> --- a/drivers/gpu/drm/i915/display/intel_opregion.h
> +++ b/drivers/gpu/drm/i915/display/intel_opregion.h
> @@ -46,7 +46,7 @@ void intel_opregion_suspend(struct drm_i915_private *dev_priv,
>
> bool intel_opregion_asle_present(struct drm_i915_private *i915);
> void intel_opregion_asle_intr(struct drm_i915_private *dev_priv);
> -int intel_opregion_notify_encoder(struct intel_encoder *intel_encoder,
> +int intel_opregion_notify_encoder(struct intel_encoder *encoder,
> bool enable);
> int intel_opregion_notify_adapter(struct drm_i915_private *dev_priv,
> pci_power_t state);
> @@ -98,7 +98,7 @@ static inline void intel_opregion_asle_intr(struct drm_i915_private *dev_priv)
> }
>
> static inline int
> -intel_opregion_notify_encoder(struct intel_encoder *intel_encoder, bool enable)
> +intel_opregion_notify_encoder(struct intel_encoder *encoder, bool enable)
> {
> return 0;
> }
> --
> 2.39.2
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 3/4] drm/i915/opregion: convert to struct intel_display
2024-07-31 16:44 ` [PATCH 3/4] drm/i915/opregion: convert to struct intel_display Jani Nikula
2024-08-02 10:07 ` kernel test robot
@ 2024-08-06 14:37 ` Imre Deak
1 sibling, 0 replies; 12+ messages in thread
From: Imre Deak @ 2024-08-06 14:37 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx, intel-xe
On Wed, Jul 31, 2024 at 07:44:35PM +0300, Jani Nikula wrote:
> Going forward, struct intel_display shall replace struct
> drm_i915_private as the main display device data pointer type. Convert
> intel_opregion.[ch] to struct intel_display.
>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_bios.c | 10 +-
> .../drm/i915/display/intel_display_debugfs.c | 5 +-
> .../drm/i915/display/intel_display_device.c | 8 +-
> .../drm/i915/display/intel_display_driver.c | 6 +-
> .../gpu/drm/i915/display/intel_display_irq.c | 24 +-
> drivers/gpu/drm/i915/display/intel_opregion.c | 296 +++++++++---------
> drivers/gpu/drm/i915/display/intel_opregion.h | 54 ++--
> drivers/gpu/drm/i915/i915_driver.c | 22 +-
> drivers/gpu/drm/xe/display/xe_display.c | 19 +-
> 9 files changed, 238 insertions(+), 206 deletions(-)
>
> [...]
> diff --git a/drivers/gpu/drm/i915/display/intel_opregion.c b/drivers/gpu/drm/i915/display/intel_opregion.c
> index 4c9b9e7ebc91..0cf6c0711dae 100644
> --- a/drivers/gpu/drm/i915/display/intel_opregion.c
> +++ b/drivers/gpu/drm/i915/display/intel_opregion.c
> [...]
>
> @@ -384,18 +384,18 @@ static int swsci(struct drm_i915_private *dev_priv,
> int intel_opregion_notify_encoder(struct intel_encoder *encoder,
> bool enable)
> {
> - struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
> + struct intel_display *display = to_intel_display(encoder->base.dev);
Nit: AFAICS, this could be just to_intel_display(encoder).
> u32 parm = 0;
> u32 type = 0;
> u32 port;
> int ret;
>
> /* don't care about old stuff for now */
> - if (!HAS_DDI(dev_priv))
> + if (!HAS_DDI(display))
> return 0;
>
> /* Avoid port out of bounds checks if SWSCI isn't there. */
> - ret = check_swsci_function(dev_priv, SWSCI_SBCB_DISPLAY_POWER_STATE);
> + ret = check_swsci_function(display, SWSCI_SBCB_DISPLAY_POWER_STATE);
> if (ret)
> return ret;
>
> @@ -419,7 +419,7 @@ int intel_opregion_notify_encoder(struct intel_encoder *encoder,
> * number is out of bounds after mapping.
> */
> if (port > 4) {
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(display->drm,
> "[ENCODER:%d:%s] port %c (index %u) out of bounds for display power state notification\n",
> encoder->base.base.id, encoder->base.name,
> port_name(encoder->port), port);
> @@ -444,7 +444,7 @@ int intel_opregion_notify_encoder(struct intel_encoder *encoder,
> type = DISPLAY_TYPE_INTERNAL_FLAT_PANEL;
> break;
> default:
> - drm_WARN_ONCE(&dev_priv->drm, 1,
> + drm_WARN_ONCE(display->drm, 1,
> "unsupported intel_encoder type %d\n",
> encoder->type);
> return -EINVAL;
> @@ -452,7 +452,7 @@ int intel_opregion_notify_encoder(struct intel_encoder *encoder,
>
> parm |= type << (16 + port * 3);
>
> - return swsci(dev_priv, SWSCI_SBCB_DISPLAY_POWER_STATE, parm, NULL);
> + return swsci(display, SWSCI_SBCB_DISPLAY_POWER_STATE, parm, NULL);
> }
>
> static const struct {
> @@ -466,33 +466,33 @@ static const struct {
> { PCI_D3cold, 0x04 },
> };
>
> -int intel_opregion_notify_adapter(struct drm_i915_private *dev_priv,
> +int intel_opregion_notify_adapter(struct intel_display *display,
> pci_power_t state)
Missing change in the forward declartion for !CONFIG_ACPI, also reported
by lkp.
> {
> int i;
>
> - if (!HAS_DDI(dev_priv))
> + if (!HAS_DDI(display))
> return 0;
>
> for (i = 0; i < ARRAY_SIZE(power_state_map); i++) {
> if (state == power_state_map[i].pci_power_state)
> - return swsci(dev_priv, SWSCI_SBCB_ADAPTER_POWER_STATE,
> + return swsci(display, SWSCI_SBCB_ADAPTER_POWER_STATE,
> power_state_map[i].parm, NULL);
> }
>
> return -EINVAL;
> }
>
> [...]
> int
> -intel_opregion_get_panel_type(struct drm_i915_private *dev_priv)
> +intel_opregion_get_panel_type(struct intel_display *display)
Same as above.
> {
> u32 panel_details;
> int ret;
>
> - ret = swsci(dev_priv, SWSCI_GBDA_PANEL_DETAILS, 0x0, &panel_details);
> + ret = swsci(display, SWSCI_GBDA_PANEL_DETAILS, 0x0, &panel_details);
> if (ret)
> return ret;
>
> ret = (panel_details >> 8) & 0xff;
> if (ret > 0x10) {
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(display->drm,
> "Invalid OpRegion panel type 0x%x\n", ret);
> return -EINVAL;
> }
>
> /* fall back to VBT panel type? */
> if (ret == 0x0) {
> - drm_dbg_kms(&dev_priv->drm, "No panel type in OpRegion\n");
> + drm_dbg_kms(display->drm, "No panel type in OpRegion\n");
> return -ENODEV;
> }
>
> @@ -1083,7 +1084,7 @@ intel_opregion_get_panel_type(struct drm_i915_private *dev_priv)
> * via a quirk list :(
> */
> if (!dmi_check_system(intel_use_opregion_panel_type)) {
> - drm_dbg_kms(&dev_priv->drm,
> + drm_dbg_kms(display->drm,
> "Ignoring OpRegion panel type (%d)\n", ret - 1);
> return -ENODEV;
> }
> @@ -1104,8 +1105,8 @@ intel_opregion_get_panel_type(struct drm_i915_private *dev_priv)
> */
> const struct drm_edid *intel_opregion_get_edid(struct intel_connector *connector)
> {
> - struct drm_i915_private *i915 = to_i915(connector->base.dev);
> - struct intel_opregion *opregion = i915->display.opregion;
> + struct intel_display *display = to_intel_display(connector->base.dev);
Nit: this could be just to_intel_display(connector).
With the forward declarations fixed looks ok:
Reviewed-by: Imre Deak <imre.deak@intel.com>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 4/4] drm/i915/bios: convert to struct intel_display
2024-07-31 16:44 ` [PATCH 4/4] drm/i915/bios: " Jani Nikula
@ 2024-08-06 15:23 ` Imre Deak
0 siblings, 0 replies; 12+ messages in thread
From: Imre Deak @ 2024-08-06 15:23 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx, intel-xe
On Wed, Jul 31, 2024 at 07:44:36PM +0300, Jani Nikula wrote:
> [...]
> diff --git a/drivers/gpu/drm/i915/display/g4x_dp.c b/drivers/gpu/drm/i915/display/g4x_dp.c
> index a8e746a0f670..c2128b46bdbd 100644
> --- a/drivers/gpu/drm/i915/display/g4x_dp.c
> +++ b/drivers/gpu/drm/i915/display/g4x_dp.c
> @@ -1279,6 +1279,7 @@ static const struct drm_encoder_funcs intel_dp_enc_funcs = {
> [...]
>
> static void
> -parse_general_features(struct drm_i915_private *i915)
> +parse_general_features(struct intel_display *display)
> {
> + struct drm_i915_private *i915 = to_i915(display->drm);
> const struct bdb_general_features *general;
>
> - general = bdb_find_section(i915, BDB_GENERAL_FEATURES);
> + general = bdb_find_section(display, BDB_GENERAL_FEATURES);
> if (!general)
> return;
>
> - i915->display.vbt.int_tv_support = general->int_tv_support;
> + display->vbt.int_tv_support = general->int_tv_support;
> /* int_crt_support can't be trusted on earlier platforms */
> - if (i915->display.vbt.version >= 155 &&
> - (HAS_DDI(i915) || IS_VALLEYVIEW(i915)))
> - i915->display.vbt.int_crt_support = general->int_crt_support;
> - i915->display.vbt.lvds_use_ssc = general->enable_ssc;
> - i915->display.vbt.lvds_ssc_freq =
> - intel_bios_ssc_frequency(i915, general->ssc_freq);
> - i915->display.vbt.display_clock_mode = general->display_clock_mode;
> - i915->display.vbt.fdi_rx_polarity_inverted = general->fdi_rx_polarity_inverted;
> - if (i915->display.vbt.version >= 181) {
> - i915->display.vbt.orientation = general->rotate_180 ?
> + if (display->vbt.version >= 155 &&
> + (HAS_DDI(display) || IS_VALLEYVIEW(i915)))
> + display->vbt.int_crt_support = general->int_crt_support;
> + display->vbt.lvds_use_ssc = general->enable_ssc;
> + display->vbt.lvds_ssc_freq =
> + intel_bios_ssc_frequency(display, general->ssc_freq);
> + display->vbt.display_clock_mode = general->display_clock_mode;
> + display->vbt.fdi_rx_polarity_inverted = general->fdi_rx_polarity_inverted;
> + if (display->vbt.version >= 181) {
> + display->vbt.orientation = general->rotate_180 ?
> DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP :
> DRM_MODE_PANEL_ORIENTATION_NORMAL;
> } else {
> - i915->display.vbt.orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN;
> + display->vbt.orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN;
> }
>
> - if (i915->display.vbt.version >= 249 && general->afc_startup_config) {
> - i915->display.vbt.override_afc_startup = true;
> - i915->display.vbt.override_afc_startup_val = general->afc_startup_config == 0x1 ? 0x0 : 0x7;
> + if (display->vbt.version >= 249 && general->afc_startup_config) {
> + display->vbt.override_afc_startup = true;
> + display->vbt.override_afc_startup_val = general->afc_startup_config == 1 ? 0 : 7;
The hex->dec change doesn't make a difference, but I suppose still good
to know if it's a silent cocci script change. Patch looks ok:
Reviewed-by: Imre Deak <imre.deak@intel.com>
> }
>
> - drm_dbg_kms(&i915->drm,
> + drm_dbg_kms(display->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",
> - i915->display.vbt.int_tv_support,
> - i915->display.vbt.int_crt_support,
> - i915->display.vbt.lvds_use_ssc,
> - i915->display.vbt.lvds_ssc_freq,
> - i915->display.vbt.display_clock_mode,
> - i915->display.vbt.fdi_rx_polarity_inverted);
> + display->vbt.int_tv_support,
> + display->vbt.int_crt_support,
> + display->vbt.lvds_use_ssc,
> + display->vbt.lvds_ssc_freq,
> + display->vbt.display_clock_mode,
> + display->vbt.fdi_rx_polarity_inverted);
> }
>
> static const struct child_device_config *
> @@ -1211,7 +1214,7 @@ child_device_ptr(const struct bdb_general_definitions *defs, int i)
> }
>
> static void
> -parse_sdvo_device_mapping(struct drm_i915_private *i915)
> +parse_sdvo_device_mapping(struct intel_display *display)
> {
> const struct intel_bios_encoder_data *devdata;
> int count = 0;
> @@ -1220,12 +1223,12 @@ parse_sdvo_device_mapping(struct drm_i915_private *i915)
> * 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_DISPLAY_VER(i915, 3, 7)) {
> - drm_dbg_kms(&i915->drm, "Skipping SDVO device mapping\n");
> + if (!IS_DISPLAY_VER(display, 3, 7)) {
> + drm_dbg_kms(display->drm, "Skipping SDVO device mapping\n");
> return;
> }
>
> - list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) {
> + list_for_each_entry(devdata, &display->vbt.display_devices, node) {
> const struct child_device_config *child = &devdata->child;
> struct sdvo_device_mapping *mapping;
>
> @@ -1240,17 +1243,17 @@ parse_sdvo_device_mapping(struct drm_i915_private *i915)
> if (child->dvo_port != DEVICE_PORT_DVOB &&
> child->dvo_port != DEVICE_PORT_DVOC) {
> /* skip the incorrect SDVO port */
> - drm_dbg_kms(&i915->drm,
> + drm_dbg_kms(display->drm,
> "Incorrect SDVO port. Skip it\n");
> continue;
> }
> - drm_dbg_kms(&i915->drm,
> + drm_dbg_kms(display->drm,
> "the SDVO device with target addr %2x is found on"
> " %s port\n",
> child->target_addr,
> (child->dvo_port == DEVICE_PORT_DVOB) ?
> "SDVOB" : "SDVOC");
> - mapping = &i915->display.vbt.sdvo_mappings[child->dvo_port - 1];
> + mapping = &display->vbt.sdvo_mappings[child->dvo_port - 1];
> if (!mapping->initialized) {
> mapping->dvo_port = child->dvo_port;
> mapping->target_addr = child->target_addr;
> @@ -1258,20 +1261,20 @@ parse_sdvo_device_mapping(struct drm_i915_private *i915)
> mapping->ddc_pin = child->ddc_pin;
> mapping->i2c_pin = child->i2c_pin;
> mapping->initialized = 1;
> - drm_dbg_kms(&i915->drm,
> + drm_dbg_kms(display->drm,
> "SDVO device: dvo=%x, addr=%x, wiring=%d, ddc_pin=%d, i2c_pin=%d\n",
> mapping->dvo_port, mapping->target_addr,
> mapping->dvo_wiring, mapping->ddc_pin,
> mapping->i2c_pin);
> } else {
> - drm_dbg_kms(&i915->drm,
> + drm_dbg_kms(display->drm,
> "Maybe one SDVO port is shared by "
> "two SDVO device.\n");
> }
> if (child->target2_addr) {
> /* Maybe this is a SDVO device with multiple inputs */
> /* And the mapping info is not added */
> - drm_dbg_kms(&i915->drm,
> + drm_dbg_kms(display->drm,
> "there exists the target2_addr. Maybe this"
> " is a SDVO device with multiple inputs.\n");
> }
> @@ -1280,28 +1283,28 @@ parse_sdvo_device_mapping(struct drm_i915_private *i915)
>
> if (!count) {
> /* No SDVO device info is found */
> - drm_dbg_kms(&i915->drm,
> + drm_dbg_kms(display->drm,
> "No SDVO device info is found in VBT\n");
> }
> }
>
> static void
> -parse_driver_features(struct drm_i915_private *i915)
> +parse_driver_features(struct intel_display *display)
> {
> const struct bdb_driver_features *driver;
>
> - driver = bdb_find_section(i915, BDB_DRIVER_FEATURES);
> + driver = bdb_find_section(display, BDB_DRIVER_FEATURES);
> if (!driver)
> return;
>
> - if (DISPLAY_VER(i915) >= 5) {
> + if (DISPLAY_VER(display) >= 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)
> - i915->display.vbt.int_lvds_support = 0;
> + display->vbt.int_lvds_support = 0;
> } else {
> /*
> * FIXME it's not clear which BDB version has the LVDS config
> @@ -1314,25 +1317,25 @@ parse_driver_features(struct drm_i915_private *i915)
> * in the wild with the bits correctly populated. Version
> * 108 (on i85x) does not have the bits correctly populated.
> */
> - if (i915->display.vbt.version >= 134 &&
> + if (display->vbt.version >= 134 &&
> driver->lvds_config != BDB_DRIVER_FEATURE_INT_LVDS &&
> driver->lvds_config != BDB_DRIVER_FEATURE_INT_SDVO_LVDS)
> - i915->display.vbt.int_lvds_support = 0;
> + display->vbt.int_lvds_support = 0;
> }
> }
>
> static void
> -parse_panel_driver_features(struct drm_i915_private *i915,
> +parse_panel_driver_features(struct intel_display *display,
> struct intel_panel *panel)
> {
> const struct bdb_driver_features *driver;
>
> - driver = bdb_find_section(i915, BDB_DRIVER_FEATURES);
> + driver = bdb_find_section(display, BDB_DRIVER_FEATURES);
> if (!driver)
> return;
>
> - if (i915->display.vbt.version < 228) {
> - drm_dbg_kms(&i915->drm, "DRRS State Enabled:%d\n",
> + if (display->vbt.version < 228) {
> + drm_dbg_kms(display->drm, "DRRS State Enabled:%d\n",
> driver->drrs_enabled);
> /*
> * If DRRS is not supported, drrs_type has to be set to 0.
> @@ -1356,7 +1359,7 @@ parse_panel_driver_features(struct drm_i915_private *i915,
> }
>
> static void
> -parse_power_conservation_features(struct drm_i915_private *i915,
> +parse_power_conservation_features(struct intel_display *display,
> struct intel_panel *panel)
> {
> const struct bdb_lfp_power *power;
> @@ -1364,10 +1367,10 @@ parse_power_conservation_features(struct drm_i915_private *i915,
>
> panel->vbt.vrr = true; /* matches Windows behaviour */
>
> - if (i915->display.vbt.version < 228)
> + if (display->vbt.version < 228)
> return;
>
> - power = bdb_find_section(i915, BDB_LFP_POWER);
> + power = bdb_find_section(display, BDB_LFP_POWER);
> if (!power)
> return;
>
> @@ -1390,16 +1393,16 @@ parse_power_conservation_features(struct drm_i915_private *i915,
> panel->vbt.drrs_type = DRRS_TYPE_NONE;
> }
>
> - if (i915->display.vbt.version >= 232)
> + if (display->vbt.version >= 232)
> panel->vbt.edp.hobl = panel_bool(power->hobl, panel_type);
>
> - if (i915->display.vbt.version >= 233)
> + if (display->vbt.version >= 233)
> panel->vbt.vrr = panel_bool(power->vrr_feature_enabled,
> panel_type);
> }
>
> static void
> -parse_edp(struct drm_i915_private *i915,
> +parse_edp(struct intel_display *display,
> struct intel_panel *panel)
> {
> const struct bdb_edp *edp;
> @@ -1407,7 +1410,7 @@ parse_edp(struct drm_i915_private *i915,
> const struct edp_fast_link_params *edp_link_params;
> int panel_type = panel->vbt.panel_type;
>
> - edp = bdb_find_section(i915, BDB_EDP);
> + edp = bdb_find_section(display, BDB_EDP);
> if (!edp)
> return;
>
> @@ -1429,7 +1432,7 @@ parse_edp(struct drm_i915_private *i915,
>
> panel->vbt.edp.pps = *edp_pps;
>
> - if (i915->display.vbt.version >= 224) {
> + if (display->vbt.version >= 224) {
> panel->vbt.edp.rate =
> edp->edp_fast_link_training_rate[panel_type] * 20;
> } else {
> @@ -1444,7 +1447,7 @@ parse_edp(struct drm_i915_private *i915,
> panel->vbt.edp.rate = 540000;
> break;
> default:
> - drm_dbg_kms(&i915->drm,
> + drm_dbg_kms(display->drm,
> "VBT has unknown eDP link rate value %u\n",
> edp_link_params->rate);
> break;
> @@ -1462,7 +1465,7 @@ parse_edp(struct drm_i915_private *i915,
> panel->vbt.edp.lanes = 4;
> break;
> default:
> - drm_dbg_kms(&i915->drm,
> + drm_dbg_kms(display->drm,
> "VBT has unknown eDP lane count value %u\n",
> edp_link_params->lanes);
> break;
> @@ -1482,7 +1485,7 @@ parse_edp(struct drm_i915_private *i915,
> panel->vbt.edp.preemphasis = DP_TRAIN_PRE_EMPH_LEVEL_3;
> break;
> default:
> - drm_dbg_kms(&i915->drm,
> + drm_dbg_kms(display->drm,
> "VBT has unknown eDP pre-emphasis value %u\n",
> edp_link_params->preemphasis);
> break;
> @@ -1502,19 +1505,19 @@ parse_edp(struct drm_i915_private *i915,
> panel->vbt.edp.vswing = DP_TRAIN_VOLTAGE_SWING_LEVEL_3;
> break;
> default:
> - drm_dbg_kms(&i915->drm,
> + drm_dbg_kms(display->drm,
> "VBT has unknown eDP voltage swing value %u\n",
> edp_link_params->vswing);
> break;
> }
>
> - if (i915->display.vbt.version >= 173) {
> + if (display->vbt.version >= 173) {
> u8 vswing;
>
> /* Don't read from VBT if module parameter has valid value*/
> - if (i915->display.params.edp_vswing) {
> + if (display->params.edp_vswing) {
> panel->vbt.edp.low_vswing =
> - i915->display.params.edp_vswing == 1;
> + display->params.edp_vswing == 1;
> } else {
> vswing = (edp->edp_vswing_preemph >> (panel_type * 4)) & 0xF;
> panel->vbt.edp.low_vswing = vswing == 0;
> @@ -1524,26 +1527,27 @@ parse_edp(struct drm_i915_private *i915,
> panel->vbt.edp.drrs_msa_timing_delay =
> panel_bits(edp->sdrrs_msa_timing_delay, panel_type, 2);
>
> - if (i915->display.vbt.version >= 244)
> + if (display->vbt.version >= 244)
> panel->vbt.edp.max_link_rate =
> edp->edp_max_port_link_rate[panel_type] * 20;
>
> - if (i915->display.vbt.version >= 251)
> + if (display->vbt.version >= 251)
> panel->vbt.edp.dsc_disable =
> panel_bool(edp->edp_dsc_disable, panel_type);
> }
>
> static void
> -parse_psr(struct drm_i915_private *i915,
> +parse_psr(struct intel_display *display,
> struct intel_panel *panel)
> {
> + struct drm_i915_private *i915 = to_i915(display->drm);
> const struct bdb_psr *psr;
> const struct psr_table *psr_table;
> int panel_type = panel->vbt.panel_type;
>
> - psr = bdb_find_section(i915, BDB_PSR);
> + psr = bdb_find_section(display, BDB_PSR);
> if (!psr) {
> - drm_dbg_kms(&i915->drm, "No PSR BDB found.\n");
> + drm_dbg_kms(display->drm, "No PSR BDB found.\n");
> return;
> }
>
> @@ -1560,8 +1564,8 @@ parse_psr(struct drm_i915_private *i915,
> * New psr options 0=500us, 1=100us, 2=2500us, 3=0us
> * Old decimal value is wake up time in multiples of 100 us.
> */
> - if (i915->display.vbt.version >= 205 &&
> - (DISPLAY_VER(i915) >= 9 && !IS_BROXTON(i915))) {
> + if (display->vbt.version >= 205 &&
> + (DISPLAY_VER(display) >= 9 && !IS_BROXTON(i915))) {
> switch (psr_table->tp1_wakeup_time) {
> case 0:
> panel->vbt.psr.tp1_wakeup_time_us = 500;
> @@ -1573,7 +1577,7 @@ parse_psr(struct drm_i915_private *i915,
> panel->vbt.psr.tp1_wakeup_time_us = 0;
> break;
> default:
> - drm_dbg_kms(&i915->drm,
> + drm_dbg_kms(display->drm,
> "VBT tp1 wakeup time value %d is outside range[0-3], defaulting to max value 2500us\n",
> psr_table->tp1_wakeup_time);
> fallthrough;
> @@ -1593,7 +1597,7 @@ parse_psr(struct drm_i915_private *i915,
> panel->vbt.psr.tp2_tp3_wakeup_time_us = 0;
> break;
> default:
> - drm_dbg_kms(&i915->drm,
> + drm_dbg_kms(display->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;
> @@ -1606,7 +1610,7 @@ parse_psr(struct drm_i915_private *i915,
> panel->vbt.psr.tp2_tp3_wakeup_time_us = psr_table->tp2_tp3_wakeup_time * 100;
> }
>
> - if (i915->display.vbt.version >= 226) {
> + if (display->vbt.version >= 226) {
> u32 wakeup_time = psr->psr2_tp2_tp3_wakeup_time;
>
> wakeup_time = panel_bits(wakeup_time, panel_type, 2);
> @@ -1632,13 +1636,13 @@ parse_psr(struct drm_i915_private *i915,
> }
> }
>
> -static void parse_dsi_backlight_ports(struct drm_i915_private *i915,
> +static void parse_dsi_backlight_ports(struct intel_display *display,
> struct intel_panel *panel,
> enum port port)
> {
> - enum port port_bc = DISPLAY_VER(i915) >= 11 ? PORT_B : PORT_C;
> + enum port port_bc = DISPLAY_VER(display) >= 11 ? PORT_B : PORT_C;
>
> - if (!panel->vbt.dsi.config->dual_link || i915->display.vbt.version < 197) {
> + if (!panel->vbt.dsi.config->dual_link || display->vbt.version < 197) {
> panel->vbt.dsi.bl_ports = BIT(port);
> if (panel->vbt.dsi.config->cabc_supported)
> panel->vbt.dsi.cabc_ports = BIT(port);
> @@ -1678,7 +1682,7 @@ static void parse_dsi_backlight_ports(struct drm_i915_private *i915,
> }
>
> static void
> -parse_mipi_config(struct drm_i915_private *i915,
> +parse_mipi_config(struct intel_display *display,
> struct intel_panel *panel)
> {
> const struct bdb_mipi_config *start;
> @@ -1688,19 +1692,19 @@ parse_mipi_config(struct drm_i915_private *i915,
> enum port port;
>
> /* parse MIPI blocks only if LFP type is MIPI */
> - if (!intel_bios_is_dsi_present(i915, &port))
> + if (!intel_bios_is_dsi_present(display, &port))
> return;
>
> /* Initialize this to undefined indicating no generic MIPI support */
> panel->vbt.dsi.panel_id = MIPI_DSI_UNDEFINED_PANEL_ID;
>
> - start = bdb_find_section(i915, BDB_MIPI_CONFIG);
> + start = bdb_find_section(display, BDB_MIPI_CONFIG);
> if (!start) {
> - drm_dbg_kms(&i915->drm, "No MIPI config BDB found");
> + drm_dbg_kms(display->drm, "No MIPI config BDB found");
> return;
> }
>
> - drm_dbg(&i915->drm, "Found MIPI Config block, panel index = %d\n",
> + drm_dbg(display->drm, "Found MIPI Config block, panel index = %d\n",
> panel_type);
>
> /*
> @@ -1721,7 +1725,7 @@ parse_mipi_config(struct drm_i915_private *i915,
> return;
> }
>
> - parse_dsi_backlight_ports(i915, panel, port);
> + parse_dsi_backlight_ports(display, panel, port);
>
> /* FIXME is the 90 vs. 270 correct? */
> switch (config->rotation) {
> @@ -1753,7 +1757,7 @@ parse_mipi_config(struct drm_i915_private *i915,
>
> /* Find the sequence block and size for the given panel. */
> static const u8 *
> -find_panel_sequence_block(struct drm_i915_private *i915,
> +find_panel_sequence_block(struct intel_display *display,
> const struct bdb_mipi_sequence *sequence,
> u16 panel_id, u32 *seq_size)
> {
> @@ -1771,7 +1775,8 @@ find_panel_sequence_block(struct drm_i915_private *i915,
>
> for (i = 0; i < MAX_MIPI_CONFIGURATIONS && index < total; i++) {
> if (index + header_size > total) {
> - drm_err(&i915->drm, "Invalid sequence block (header)\n");
> + drm_err(display->drm,
> + "Invalid sequence block (header)\n");
> return NULL;
> }
>
> @@ -1784,7 +1789,7 @@ find_panel_sequence_block(struct drm_i915_private *i915,
> index += header_size;
>
> if (index + current_size > total) {
> - drm_err(&i915->drm, "Invalid sequence block\n");
> + drm_err(display->drm, "Invalid sequence block\n");
> return NULL;
> }
>
> @@ -1796,12 +1801,13 @@ find_panel_sequence_block(struct drm_i915_private *i915,
> index += current_size;
> }
>
> - drm_err(&i915->drm, "Sequence block detected but no valid configuration\n");
> + drm_err(display->drm,
> + "Sequence block detected but no valid configuration\n");
>
> return NULL;
> }
>
> -static int goto_next_sequence(struct drm_i915_private *i915,
> +static int goto_next_sequence(struct intel_display *display,
> const u8 *data, int index, int total)
> {
> u16 len;
> @@ -1832,7 +1838,7 @@ static int goto_next_sequence(struct drm_i915_private *i915,
> len = *(data + index + 6) + 7;
> break;
> default:
> - drm_err(&i915->drm, "Unknown operation byte\n");
> + drm_err(display->drm, "Unknown operation byte\n");
> return 0;
> }
> }
> @@ -1840,7 +1846,7 @@ static int goto_next_sequence(struct drm_i915_private *i915,
> return 0;
> }
>
> -static int goto_next_sequence_v3(struct drm_i915_private *i915,
> +static int goto_next_sequence_v3(struct intel_display *display,
> const u8 *data, int index, int total)
> {
> int seq_end;
> @@ -1852,7 +1858,7 @@ static int goto_next_sequence_v3(struct drm_i915_private *i915,
> * checking on the structure.
> */
> if (total < 5) {
> - drm_err(&i915->drm, "Too small sequence size\n");
> + drm_err(display->drm, "Too small sequence size\n");
> return 0;
> }
>
> @@ -1869,7 +1875,7 @@ static int goto_next_sequence_v3(struct drm_i915_private *i915,
>
> seq_end = index + size_of_sequence;
> if (seq_end > total) {
> - drm_err(&i915->drm, "Invalid sequence size\n");
> + drm_err(display->drm, "Invalid sequence size\n");
> return 0;
> }
>
> @@ -1879,7 +1885,8 @@ static int goto_next_sequence_v3(struct drm_i915_private *i915,
>
> if (operation_byte == MIPI_SEQ_ELEM_END) {
> if (index != seq_end) {
> - drm_err(&i915->drm, "Invalid element structure\n");
> + drm_err(display->drm,
> + "Invalid element structure\n");
> return 0;
> }
> return index;
> @@ -1901,7 +1908,7 @@ static int goto_next_sequence_v3(struct drm_i915_private *i915,
> case MIPI_SEQ_ELEM_PMIC:
> break;
> default:
> - drm_err(&i915->drm, "Unknown operation byte %u\n",
> + drm_err(display->drm, "Unknown operation byte %u\n",
> operation_byte);
> break;
> }
> @@ -1914,13 +1921,13 @@ static int goto_next_sequence_v3(struct drm_i915_private *i915,
> * 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 *i915,
> +static int get_init_otp_deassert_fragment_len(struct intel_display *display,
> struct intel_panel *panel)
> {
> const u8 *data = panel->vbt.dsi.sequence[MIPI_SEQ_INIT_OTP];
> int index, len;
>
> - if (drm_WARN_ON(&i915->drm,
> + if (drm_WARN_ON(display->drm,
> !data || panel->vbt.dsi.seq_version != 1))
> return 0;
>
> @@ -1949,7 +1956,7 @@ static int get_init_otp_deassert_fragment_len(struct drm_i915_private *i915,
> * these devices we split the init OTP sequence into a deassert sequence and
> * the actual init OTP part.
> */
> -static void vlv_fixup_mipi_sequences(struct drm_i915_private *i915,
> +static void vlv_fixup_mipi_sequences(struct intel_display *display,
> struct intel_panel *panel)
> {
> u8 *init_otp;
> @@ -1967,11 +1974,11 @@ static void vlv_fixup_mipi_sequences(struct drm_i915_private *i915,
> return;
>
> /* The deassert-sequence ends at the first DSI packet */
> - len = get_init_otp_deassert_fragment_len(i915, panel);
> + len = get_init_otp_deassert_fragment_len(display, panel);
> if (!len)
> return;
>
> - drm_dbg_kms(&i915->drm,
> + drm_dbg_kms(display->drm,
> "Using init OTP fragment to deassert reset\n");
>
> /* Copy the fragment, update seq byte and terminate it */
> @@ -2004,29 +2011,32 @@ static void vlv_fixup_mipi_sequences(struct drm_i915_private *i915,
> * or examine the contents of the sequences to
> * avoid false positives?
> */
> -static void icl_fixup_mipi_sequences(struct drm_i915_private *i915,
> +static void icl_fixup_mipi_sequences(struct intel_display *display,
> struct intel_panel *panel)
> {
> if (!panel->vbt.dsi.sequence[MIPI_SEQ_INIT_OTP] &&
> panel->vbt.dsi.sequence[MIPI_SEQ_DISPLAY_ON]) {
> - drm_dbg_kms(&i915->drm, "Broken VBT: Swapping INIT_OTP and DISPLAY_ON sequences\n");
> + drm_dbg_kms(display->drm,
> + "Broken VBT: Swapping INIT_OTP and DISPLAY_ON sequences\n");
>
> swap(panel->vbt.dsi.sequence[MIPI_SEQ_INIT_OTP],
> panel->vbt.dsi.sequence[MIPI_SEQ_DISPLAY_ON]);
> }
> }
>
> -static void fixup_mipi_sequences(struct drm_i915_private *i915,
> +static void fixup_mipi_sequences(struct intel_display *display,
> struct intel_panel *panel)
> {
> - if (DISPLAY_VER(i915) >= 11)
> - icl_fixup_mipi_sequences(i915, panel);
> + struct drm_i915_private *i915 = to_i915(display->drm);
> +
> + if (DISPLAY_VER(display) >= 11)
> + icl_fixup_mipi_sequences(display, panel);
> else if (IS_VALLEYVIEW(i915))
> - vlv_fixup_mipi_sequences(i915, panel);
> + vlv_fixup_mipi_sequences(display, panel);
> }
>
> static void
> -parse_mipi_sequence(struct drm_i915_private *i915,
> +parse_mipi_sequence(struct intel_display *display,
> struct intel_panel *panel)
> {
> int panel_type = panel->vbt.panel_type;
> @@ -2040,25 +2050,25 @@ parse_mipi_sequence(struct drm_i915_private *i915,
> if (panel->vbt.dsi.panel_id != MIPI_DSI_GENERIC_PANEL_ID)
> return;
>
> - sequence = bdb_find_section(i915, BDB_MIPI_SEQUENCE);
> + sequence = bdb_find_section(display, BDB_MIPI_SEQUENCE);
> if (!sequence) {
> - drm_dbg_kms(&i915->drm,
> + drm_dbg_kms(display->drm,
> "No MIPI Sequence found, parsing complete\n");
> return;
> }
>
> /* Fail gracefully for forward incompatible sequence block. */
> if (sequence->version >= 4) {
> - drm_err(&i915->drm,
> + drm_err(display->drm,
> "Unable to parse MIPI Sequence Block v%u\n",
> sequence->version);
> return;
> }
>
> - drm_dbg(&i915->drm, "Found MIPI sequence block v%u\n",
> + drm_dbg(display->drm, "Found MIPI sequence block v%u\n",
> sequence->version);
>
> - seq_data = find_panel_sequence_block(i915, sequence, panel_type, &seq_size);
> + seq_data = find_panel_sequence_block(display, sequence, panel_type, &seq_size);
> if (!seq_data)
> return;
>
> @@ -2073,24 +2083,24 @@ parse_mipi_sequence(struct drm_i915_private *i915,
> break;
>
> if (seq_id >= MIPI_SEQ_MAX) {
> - drm_err(&i915->drm, "Unknown sequence %u\n",
> + drm_err(display->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(&i915->drm,
> + drm_dbg_kms(display->drm,
> "Unsupported sequence %u\n", seq_id);
>
> panel->vbt.dsi.sequence[seq_id] = data + index;
>
> if (sequence->version >= 3)
> - index = goto_next_sequence_v3(i915, data, index, seq_size);
> + index = goto_next_sequence_v3(display, data, index, seq_size);
> else
> - index = goto_next_sequence(i915, data, index, seq_size);
> + index = goto_next_sequence(display, data, index, seq_size);
> if (!index) {
> - drm_err(&i915->drm, "Invalid sequence %u\n",
> + drm_err(display->drm, "Invalid sequence %u\n",
> seq_id);
> goto err;
> }
> @@ -2100,9 +2110,9 @@ parse_mipi_sequence(struct drm_i915_private *i915,
> panel->vbt.dsi.size = seq_size;
> panel->vbt.dsi.seq_version = sequence->version;
>
> - fixup_mipi_sequences(i915, panel);
> + fixup_mipi_sequences(display, panel);
>
> - drm_dbg(&i915->drm, "MIPI related VBT parsing complete\n");
> + drm_dbg(display->drm, "MIPI related VBT parsing complete\n");
> return;
>
> err:
> @@ -2111,47 +2121,47 @@ parse_mipi_sequence(struct drm_i915_private *i915,
> }
>
> static void
> -parse_compression_parameters(struct drm_i915_private *i915)
> +parse_compression_parameters(struct intel_display *display)
> {
> const struct bdb_compression_parameters *params;
> struct intel_bios_encoder_data *devdata;
> u16 block_size;
> int index;
>
> - if (i915->display.vbt.version < 198)
> + if (display->vbt.version < 198)
> return;
>
> - params = bdb_find_section(i915, BDB_COMPRESSION_PARAMETERS);
> + params = bdb_find_section(display, BDB_COMPRESSION_PARAMETERS);
> if (params) {
> /* Sanity checks */
> if (params->entry_size != sizeof(params->data[0])) {
> - drm_dbg_kms(&i915->drm,
> + drm_dbg_kms(display->drm,
> "VBT: unsupported compression param entry size\n");
> return;
> }
>
> block_size = get_blocksize(params);
> if (block_size < sizeof(*params)) {
> - drm_dbg_kms(&i915->drm,
> + drm_dbg_kms(display->drm,
> "VBT: expected 16 compression param entries\n");
> return;
> }
> }
>
> - list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) {
> + list_for_each_entry(devdata, &display->vbt.display_devices, node) {
> const struct child_device_config *child = &devdata->child;
>
> if (!child->compression_enable)
> continue;
>
> if (!params) {
> - drm_dbg_kms(&i915->drm,
> + drm_dbg_kms(display->drm,
> "VBT: compression params not available\n");
> continue;
> }
>
> if (child->compression_method_cps) {
> - drm_dbg_kms(&i915->drm,
> + drm_dbg_kms(display->drm,
> "VBT: CPS compression not supported\n");
> continue;
> }
> @@ -2163,12 +2173,12 @@ parse_compression_parameters(struct drm_i915_private *i915)
> }
> }
>
> -static u8 translate_iboost(struct drm_i915_private *i915, u8 val)
> +static u8 translate_iboost(struct intel_display *display, u8 val)
> {
> static const u8 mapping[] = { 1, 3, 7 }; /* See VBT spec */
>
> if (val >= ARRAY_SIZE(mapping)) {
> - drm_dbg_kms(&i915->drm,
> + drm_dbg_kms(display->drm,
> "Unsupported I_boost value found in VBT (%d), display may not work properly\n", val);
> return 0;
> }
> @@ -2225,8 +2235,9 @@ static const u8 adlp_ddc_pin_map[] = {
> [GMBUS_PIN_12_TC4_ICP] = ADLP_DDC_BUS_PORT_TC4,
> };
>
> -static u8 map_ddc_pin(struct drm_i915_private *i915, u8 vbt_pin)
> +static u8 map_ddc_pin(struct intel_display *display, u8 vbt_pin)
> {
> + struct drm_i915_private *i915 = to_i915(display->drm);
> const u8 *ddc_pin_map;
> int i, n_entries;
>
> @@ -2241,7 +2252,7 @@ static u8 map_ddc_pin(struct drm_i915_private *i915, u8 vbt_pin)
> } 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(i915) && DISPLAY_VER(i915) == 9) {
> + } else if (HAS_PCH_TGP(i915) && DISPLAY_VER(display) == 9) {
> ddc_pin_map = gen9bc_tgp_ddc_pin_map;
> n_entries = ARRAY_SIZE(gen9bc_tgp_ddc_pin_map);
> } else if (INTEL_PCH_TYPE(i915) >= PCH_ICP) {
> @@ -2260,7 +2271,7 @@ static u8 map_ddc_pin(struct drm_i915_private *i915, u8 vbt_pin)
> return i;
> }
>
> - drm_dbg_kms(&i915->drm,
> + drm_dbg_kms(display->drm,
> "Ignoring alternate pin: VBT claims DDC pin %d, which is not valid for this platform\n",
> vbt_pin);
> return 0;
> @@ -2318,9 +2329,10 @@ 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 *i915,
> +static enum port dvo_port_to_port(struct intel_display *display,
> u8 dvo_port)
> {
> + struct drm_i915_private *i915 = to_i915(display->drm);
> /*
> * Each DDI port can have more than one value on the "DVO Port" field,
> * so look for all the possible values for each port.
> @@ -2372,7 +2384,7 @@ static enum port dvo_port_to_port(struct drm_i915_private *i915,
> [PORT_TC4] = { DVO_PORT_HDMII, DVO_PORT_DPI, -1 },
> };
>
> - if (DISPLAY_VER(i915) >= 13)
> + if (DISPLAY_VER(display) >= 13)
> return __dvo_port_to_port(ARRAY_SIZE(xelpd_port_mapping),
> ARRAY_SIZE(xelpd_port_mapping[0]),
> xelpd_port_mapping,
> @@ -2395,13 +2407,13 @@ static enum port dvo_port_to_port(struct drm_i915_private *i915,
> }
>
> static enum port
> -dsi_dvo_port_to_port(struct drm_i915_private *i915, u8 dvo_port)
> +dsi_dvo_port_to_port(struct intel_display *display, u8 dvo_port)
> {
> switch (dvo_port) {
> case DVO_PORT_MIPIA:
> return PORT_A;
> case DVO_PORT_MIPIC:
> - if (DISPLAY_VER(i915) >= 11)
> + if (DISPLAY_VER(display) >= 11)
> return PORT_B;
> else
> return PORT_C;
> @@ -2412,13 +2424,13 @@ dsi_dvo_port_to_port(struct drm_i915_private *i915, u8 dvo_port)
>
> enum port intel_bios_encoder_port(const struct intel_bios_encoder_data *devdata)
> {
> - struct drm_i915_private *i915 = devdata->i915;
> + struct intel_display *display = devdata->display;
> const struct child_device_config *child = &devdata->child;
> enum port port;
>
> - port = dvo_port_to_port(i915, child->dvo_port);
> - if (port == PORT_NONE && DISPLAY_VER(i915) >= 11)
> - port = dsi_dvo_port_to_port(i915, child->dvo_port);
> + port = dvo_port_to_port(display, child->dvo_port);
> + if (port == PORT_NONE && DISPLAY_VER(display) >= 11)
> + port = dsi_dvo_port_to_port(display, child->dvo_port);
>
> return port;
> }
> @@ -2463,10 +2475,10 @@ static int parse_bdb_216_dp_max_link_rate(const int vbt_max_link_rate)
>
> int intel_bios_dp_max_link_rate(const struct intel_bios_encoder_data *devdata)
> {
> - if (!devdata || devdata->i915->display.vbt.version < 216)
> + if (!devdata || devdata->display->vbt.version < 216)
> return 0;
>
> - if (devdata->i915->display.vbt.version >= 230)
> + if (devdata->display->vbt.version >= 230)
> return parse_bdb_230_dp_max_link_rate(devdata->child.dp_max_link_rate);
> else
> return parse_bdb_216_dp_max_link_rate(devdata->child.dp_max_link_rate);
> @@ -2474,7 +2486,7 @@ int intel_bios_dp_max_link_rate(const struct intel_bios_encoder_data *devdata)
>
> int intel_bios_dp_max_lane_count(const struct intel_bios_encoder_data *devdata)
> {
> - if (!devdata || devdata->i915->display.vbt.version < 244)
> + if (!devdata || devdata->display->vbt.version < 244)
> return 0;
>
> return devdata->child.dp_max_lane_count + 1;
> @@ -2483,10 +2495,10 @@ int intel_bios_dp_max_lane_count(const struct intel_bios_encoder_data *devdata)
> static void sanitize_device_type(struct intel_bios_encoder_data *devdata,
> enum port port)
> {
> - struct drm_i915_private *i915 = devdata->i915;
> + struct intel_display *display = devdata->display;
> bool is_hdmi;
>
> - if (port != PORT_A || DISPLAY_VER(i915) >= 12)
> + if (port != PORT_A || DISPLAY_VER(display) >= 12)
> return;
>
> if (!intel_bios_encoder_supports_dvi(devdata))
> @@ -2494,7 +2506,7 @@ static void sanitize_device_type(struct intel_bios_encoder_data *devdata,
>
> is_hdmi = intel_bios_encoder_supports_hdmi(devdata);
>
> - drm_dbg_kms(&i915->drm, "VBT claims port A supports DVI%s, ignoring\n",
> + drm_dbg_kms(display->drm, "VBT claims port A supports DVI%s, ignoring\n",
> is_hdmi ? "/HDMI" : "");
>
> devdata->child.device_type &= ~DEVICE_TYPE_TMDS_DVI_SIGNALING;
> @@ -2504,7 +2516,8 @@ static void sanitize_device_type(struct intel_bios_encoder_data *devdata,
> static void sanitize_hdmi_level_shift(struct intel_bios_encoder_data *devdata,
> enum port port)
> {
> - struct drm_i915_private *i915 = devdata->i915;
> + struct intel_display *display = devdata->display;
> + struct drm_i915_private *i915 = to_i915(display->drm);
>
> if (!intel_bios_encoder_supports_dvi(devdata))
> return;
> @@ -2515,7 +2528,8 @@ static void sanitize_hdmi_level_shift(struct intel_bios_encoder_data *devdata,
> * up to 11, whereas the BDW max is 9.
> */
> if (IS_BROADWELL(i915) && devdata->child.hdmi_level_shifter_value > 9) {
> - drm_dbg_kms(&i915->drm, "Bogus port %c VBT HDMI level shift %d, adjusting to %d\n",
> + drm_dbg_kms(display->drm,
> + "Bogus port %c VBT HDMI level shift %d, adjusting to %d\n",
> port_name(port), devdata->child.hdmi_level_shifter_value, 9);
>
> devdata->child.hdmi_level_shifter_value = 9;
> @@ -2563,14 +2577,14 @@ intel_bios_encoder_supports_dsi(const struct intel_bios_encoder_data *devdata)
> bool
> intel_bios_encoder_is_lspcon(const struct intel_bios_encoder_data *devdata)
> {
> - return devdata && HAS_LSPCON(devdata->i915) && devdata->child.lspcon;
> + return devdata && HAS_LSPCON(devdata->display) && devdata->child.lspcon;
> }
>
> /* This is an index in the HDMI/DVI DDI buffer translation table, or -1 */
> int intel_bios_hdmi_level_shift(const struct intel_bios_encoder_data *devdata)
> {
> - if (!devdata || devdata->i915->display.vbt.version < 158 ||
> - DISPLAY_VER(devdata->i915) >= 14)
> + if (!devdata || devdata->display->vbt.version < 158 ||
> + DISPLAY_VER(devdata->display) >= 14)
> return -1;
>
> return devdata->child.hdmi_level_shifter_value;
> @@ -2578,7 +2592,7 @@ int intel_bios_hdmi_level_shift(const struct intel_bios_encoder_data *devdata)
>
> int intel_bios_hdmi_max_tmds_clock(const struct intel_bios_encoder_data *devdata)
> {
> - if (!devdata || devdata->i915->display.vbt.version < 204)
> + if (!devdata || devdata->display->vbt.version < 204)
> return 0;
>
> switch (devdata->child.hdmi_max_data_rate) {
> @@ -2600,8 +2614,9 @@ int intel_bios_hdmi_max_tmds_clock(const struct intel_bios_encoder_data *devdata
> }
> }
>
> -static bool is_port_valid(struct drm_i915_private *i915, enum port port)
> +static bool is_port_valid(struct intel_display *display, enum port port)
> {
> + struct drm_i915_private *i915 = to_i915(display->drm);
> /*
> * On some ICL SKUs port F is not present, but broken VBTs mark
> * the port as present. Only try to initialize port F for the
> @@ -2615,7 +2630,7 @@ static bool is_port_valid(struct drm_i915_private *i915, enum port port)
>
> static void print_ddi_port(const struct intel_bios_encoder_data *devdata)
> {
> - struct drm_i915_private *i915 = devdata->i915;
> + struct intel_display *display = devdata->display;
> const struct child_device_config *child = &devdata->child;
> bool is_dvi, is_hdmi, is_dp, is_edp, is_dsi, is_crt, supports_typec_usb, supports_tbt;
> int dp_boost_level, dp_max_link_rate, hdmi_boost_level, hdmi_level_shift, max_tmds_clock;
> @@ -2635,7 +2650,7 @@ static void print_ddi_port(const struct intel_bios_encoder_data *devdata)
> supports_typec_usb = intel_bios_encoder_supports_typec_usb(devdata);
> supports_tbt = intel_bios_encoder_supports_tbt(devdata);
>
> - drm_dbg_kms(&i915->drm,
> + drm_dbg_kms(display->drm,
> "Port %c VBT info: CRT:%d DVI:%d HDMI:%d DP:%d eDP:%d DSI:%d DP++:%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, is_dsi,
> intel_bios_encoder_supports_dp_dual_mode(devdata),
> @@ -2645,33 +2660,33 @@ static void print_ddi_port(const struct intel_bios_encoder_data *devdata)
>
> hdmi_level_shift = intel_bios_hdmi_level_shift(devdata);
> if (hdmi_level_shift >= 0) {
> - drm_dbg_kms(&i915->drm,
> + drm_dbg_kms(display->drm,
> "Port %c VBT HDMI level shift: %d\n",
> port_name(port), hdmi_level_shift);
> }
>
> max_tmds_clock = intel_bios_hdmi_max_tmds_clock(devdata);
> if (max_tmds_clock)
> - drm_dbg_kms(&i915->drm,
> + drm_dbg_kms(display->drm,
> "Port %c VBT HDMI max TMDS clock: %d kHz\n",
> port_name(port), max_tmds_clock);
>
> /* I_boost config for SKL and above */
> dp_boost_level = intel_bios_dp_boost_level(devdata);
> if (dp_boost_level)
> - drm_dbg_kms(&i915->drm,
> + drm_dbg_kms(display->drm,
> "Port %c VBT (e)DP boost level: %d\n",
> port_name(port), dp_boost_level);
>
> hdmi_boost_level = intel_bios_hdmi_boost_level(devdata);
> if (hdmi_boost_level)
> - drm_dbg_kms(&i915->drm,
> + drm_dbg_kms(display->drm,
> "Port %c VBT HDMI boost level: %d\n",
> port_name(port), hdmi_boost_level);
>
> dp_max_link_rate = intel_bios_dp_max_link_rate(devdata);
> if (dp_max_link_rate)
> - drm_dbg_kms(&i915->drm,
> + drm_dbg_kms(display->drm,
> "Port %c VBT DP max link rate: %d\n",
> port_name(port), dp_max_link_rate);
>
> @@ -2679,22 +2694,22 @@ static void print_ddi_port(const struct intel_bios_encoder_data *devdata)
> * FIXME need to implement support for VBT
> * vswing/preemph tables should this ever trigger.
> */
> - drm_WARN(&i915->drm, child->use_vbt_vswing,
> + drm_WARN(display->drm, child->use_vbt_vswing,
> "Port %c asks to use VBT vswing/preemph tables\n",
> port_name(port));
> }
>
> static void parse_ddi_port(struct intel_bios_encoder_data *devdata)
> {
> - struct drm_i915_private *i915 = devdata->i915;
> + struct intel_display *display = devdata->display;
> enum port port;
>
> port = intel_bios_encoder_port(devdata);
> if (port == PORT_NONE)
> return;
>
> - if (!is_port_valid(i915, port)) {
> - drm_dbg_kms(&i915->drm,
> + if (!is_port_valid(display, port)) {
> + drm_dbg_kms(display->drm,
> "VBT reports port %c as supported, but that can't be true: skipping\n",
> port_name(port));
> return;
> @@ -2704,22 +2719,24 @@ static void parse_ddi_port(struct intel_bios_encoder_data *devdata)
> sanitize_hdmi_level_shift(devdata, port);
> }
>
> -static bool has_ddi_port_info(struct drm_i915_private *i915)
> +static bool has_ddi_port_info(struct intel_display *display)
> {
> - return DISPLAY_VER(i915) >= 5 || IS_G4X(i915);
> + struct drm_i915_private *i915 = to_i915(display->drm);
> +
> + return DISPLAY_VER(display) >= 5 || IS_G4X(i915);
> }
>
> -static void parse_ddi_ports(struct drm_i915_private *i915)
> +static void parse_ddi_ports(struct intel_display *display)
> {
> struct intel_bios_encoder_data *devdata;
>
> - if (!has_ddi_port_info(i915))
> + if (!has_ddi_port_info(display))
> return;
>
> - list_for_each_entry(devdata, &i915->display.vbt.display_devices, node)
> + list_for_each_entry(devdata, &display->vbt.display_devices, node)
> parse_ddi_port(devdata);
>
> - list_for_each_entry(devdata, &i915->display.vbt.display_devices, node)
> + list_for_each_entry(devdata, &display->vbt.display_devices, node)
> print_ddi_port(devdata);
> }
>
> @@ -2745,27 +2762,27 @@ static int child_device_expected_size(u16 version)
> return 22;
> }
>
> -static bool child_device_size_valid(struct drm_i915_private *i915, int size)
> +static bool child_device_size_valid(struct intel_display *display, int size)
> {
> int expected_size;
>
> - expected_size = child_device_expected_size(i915->display.vbt.version);
> + expected_size = child_device_expected_size(display->vbt.version);
> if (expected_size < 0) {
> expected_size = sizeof(struct child_device_config);
> - drm_dbg(&i915->drm,
> + drm_dbg(display->drm,
> "Expected child device config size for VBT version %u not known; assuming %d\n",
> - i915->display.vbt.version, expected_size);
> + display->vbt.version, expected_size);
> }
>
> /* Flag an error for unexpected size, but continue anyway. */
> if (size != expected_size)
> - drm_err(&i915->drm,
> + drm_err(display->drm,
> "Unexpected child device config size %d (expected %d for VBT version %u)\n",
> - size, expected_size, i915->display.vbt.version);
> + size, expected_size, display->vbt.version);
>
> /* The legacy sized child device config is the minimum we need. */
> if (size < LEGACY_CHILD_DEVICE_CONFIG_SIZE) {
> - drm_dbg_kms(&i915->drm,
> + drm_dbg_kms(display->drm,
> "Child device config size %d is too small.\n",
> size);
> return false;
> @@ -2775,8 +2792,9 @@ static bool child_device_size_valid(struct drm_i915_private *i915, int size)
> }
>
> static void
> -parse_general_definitions(struct drm_i915_private *i915)
> +parse_general_definitions(struct intel_display *display)
> {
> + struct drm_i915_private *i915 = to_i915(display->drm);
> const struct bdb_general_definitions *defs;
> struct intel_bios_encoder_data *devdata;
> const struct child_device_config *child;
> @@ -2784,27 +2802,27 @@ parse_general_definitions(struct drm_i915_private *i915)
> u16 block_size;
> int bus_pin;
>
> - defs = bdb_find_section(i915, BDB_GENERAL_DEFINITIONS);
> + defs = bdb_find_section(display, BDB_GENERAL_DEFINITIONS);
> if (!defs) {
> - drm_dbg_kms(&i915->drm,
> + drm_dbg_kms(display->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(&i915->drm,
> + drm_dbg_kms(display->drm,
> "General definitions block too small (%u)\n",
> block_size);
> return;
> }
>
> bus_pin = defs->crt_ddc_gmbus_pin;
> - drm_dbg_kms(&i915->drm, "crt_ddc_bus_pin: %d\n", bus_pin);
> + drm_dbg_kms(display->drm, "crt_ddc_bus_pin: %d\n", bus_pin);
> if (intel_gmbus_is_valid_pin(i915, bus_pin))
> - i915->display.vbt.crt_ddc_pin = bus_pin;
> + display->vbt.crt_ddc_pin = bus_pin;
>
> - if (!child_device_size_valid(i915, defs->child_dev_size))
> + if (!child_device_size_valid(display, defs->child_dev_size))
> return;
>
> /* get the number of child device */
> @@ -2815,7 +2833,7 @@ parse_general_definitions(struct drm_i915_private *i915)
> if (!child->device_type)
> continue;
>
> - drm_dbg_kms(&i915->drm,
> + drm_dbg_kms(display->drm,
> "Found VBT child device with type 0x%x\n",
> child->device_type);
>
> @@ -2823,7 +2841,7 @@ parse_general_definitions(struct drm_i915_private *i915)
> if (!devdata)
> break;
>
> - devdata->i915 = i915;
> + devdata->display = display;
>
> /*
> * Copy as much as we know (sizeof) and is available
> @@ -2833,37 +2851,39 @@ parse_general_definitions(struct drm_i915_private *i915)
> memcpy(&devdata->child, child,
> min_t(size_t, defs->child_dev_size, sizeof(*child)));
>
> - list_add_tail(&devdata->node, &i915->display.vbt.display_devices);
> + list_add_tail(&devdata->node, &display->vbt.display_devices);
> }
>
> - if (list_empty(&i915->display.vbt.display_devices))
> - drm_dbg_kms(&i915->drm,
> + if (list_empty(&display->vbt.display_devices))
> + drm_dbg_kms(display->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 *i915)
> +init_vbt_defaults(struct intel_display *display)
> {
> - i915->display.vbt.crt_ddc_pin = GMBUS_PIN_VGADDC;
> + struct drm_i915_private *i915 = to_i915(display->drm);
> +
> + display->vbt.crt_ddc_pin = GMBUS_PIN_VGADDC;
>
> /* general features */
> - i915->display.vbt.int_tv_support = 1;
> - i915->display.vbt.int_crt_support = 1;
> + display->vbt.int_tv_support = 1;
> + display->vbt.int_crt_support = 1;
>
> /* driver features */
> - i915->display.vbt.int_lvds_support = 1;
> + display->vbt.int_lvds_support = 1;
>
> /* Default to using SSC */
> - i915->display.vbt.lvds_use_ssc = 1;
> + display->vbt.lvds_use_ssc = 1;
> /*
> * Core/SandyBridge/IvyBridge use alternative (120MHz) reference
> * clock for LVDS.
> */
> - i915->display.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->display.vbt.lvds_ssc_freq);
> + display->vbt.lvds_ssc_freq = intel_bios_ssc_frequency(display,
> + !HAS_PCH_SPLIT(i915));
> + drm_dbg_kms(display->drm, "Set default to SSC at %d kHz\n",
> + display->vbt.lvds_ssc_freq);
> }
>
> /* Common defaults which may be overridden by VBT. */
> @@ -2879,12 +2899,13 @@ init_vbt_panel_defaults(struct intel_panel *panel)
>
> /* Defaults to initialize only if there is no VBT. */
> static void
> -init_vbt_missing_defaults(struct drm_i915_private *i915)
> +init_vbt_missing_defaults(struct intel_display *display)
> {
> - unsigned int ports = DISPLAY_RUNTIME_INFO(i915)->port_mask;
> + struct drm_i915_private *i915 = to_i915(display->drm);
> + unsigned int ports = DISPLAY_RUNTIME_INFO(display)->port_mask;
> enum port port;
>
> - if (!HAS_DDI(i915) && !IS_CHERRYVIEW(i915))
> + if (!HAS_DDI(display) && !IS_CHERRYVIEW(i915))
> return;
>
> for_each_port_masked(port, ports) {
> @@ -2904,7 +2925,7 @@ init_vbt_missing_defaults(struct drm_i915_private *i915)
> if (!devdata)
> break;
>
> - devdata->i915 = i915;
> + devdata->display = display;
> child = &devdata->child;
>
> if (port == PORT_F)
> @@ -2923,15 +2944,15 @@ init_vbt_missing_defaults(struct drm_i915_private *i915)
> if (port == PORT_A)
> child->device_type |= DEVICE_TYPE_INTERNAL_CONNECTOR;
>
> - list_add_tail(&devdata->node, &i915->display.vbt.display_devices);
> + list_add_tail(&devdata->node, &display->vbt.display_devices);
>
> - drm_dbg_kms(&i915->drm,
> + drm_dbg_kms(display->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->display.vbt.version = 155;
> + display->vbt.version = 155;
> }
>
> static const struct bdb_header *get_bdb_header(const struct vbt_header *vbt)
> @@ -2943,13 +2964,13 @@ static const struct bdb_header *get_bdb_header(const struct vbt_header *vbt)
>
> /**
> * intel_bios_is_valid_vbt - does the given buffer contain a valid VBT
> - * @i915: the device
> + * @display: display device
> * @buf: pointer to a buffer to validate
> * @size: size of the buffer
> *
> * Returns true on valid VBT.
> */
> -bool intel_bios_is_valid_vbt(struct drm_i915_private *i915,
> +bool intel_bios_is_valid_vbt(struct intel_display *display,
> const void *buf, size_t size)
> {
> const struct vbt_header *vbt = buf;
> @@ -2959,17 +2980,18 @@ bool intel_bios_is_valid_vbt(struct drm_i915_private *i915,
> return false;
>
> if (sizeof(struct vbt_header) > size) {
> - drm_dbg_kms(&i915->drm, "VBT header incomplete\n");
> + drm_dbg_kms(display->drm, "VBT header incomplete\n");
> return false;
> }
>
> if (memcmp(vbt->signature, "$VBT", 4)) {
> - drm_dbg_kms(&i915->drm, "VBT invalid signature\n");
> + drm_dbg_kms(display->drm, "VBT invalid signature\n");
> return false;
> }
>
> if (vbt->vbt_size > size) {
> - drm_dbg_kms(&i915->drm, "VBT incomplete (vbt_size overflows)\n");
> + drm_dbg_kms(display->drm,
> + "VBT incomplete (vbt_size overflows)\n");
> return false;
> }
>
> @@ -2979,48 +3001,48 @@ bool intel_bios_is_valid_vbt(struct drm_i915_private *i915,
> vbt->bdb_offset,
> sizeof(struct bdb_header),
> size)) {
> - drm_dbg_kms(&i915->drm, "BDB header incomplete\n");
> + drm_dbg_kms(display->drm, "BDB header incomplete\n");
> return false;
> }
>
> bdb = get_bdb_header(vbt);
> if (range_overflows_t(size_t, vbt->bdb_offset, bdb->bdb_size, size)) {
> - drm_dbg_kms(&i915->drm, "BDB incomplete\n");
> + drm_dbg_kms(display->drm, "BDB incomplete\n");
> return false;
> }
>
> return vbt;
> }
>
> -static struct vbt_header *firmware_get_vbt(struct drm_i915_private *i915,
> +static struct vbt_header *firmware_get_vbt(struct intel_display *display,
> size_t *size)
> {
> struct vbt_header *vbt = NULL;
> const struct firmware *fw = NULL;
> - const char *name = i915->display.params.vbt_firmware;
> + const char *name = display->params.vbt_firmware;
> int ret;
>
> if (!name || !*name)
> return NULL;
>
> - ret = request_firmware(&fw, name, i915->drm.dev);
> + ret = request_firmware(&fw, name, display->drm->dev);
> if (ret) {
> - drm_err(&i915->drm,
> + drm_err(display->drm,
> "Requesting VBT firmware \"%s\" failed (%d)\n",
> name, ret);
> return NULL;
> }
>
> - if (intel_bios_is_valid_vbt(i915, fw->data, fw->size)) {
> + if (intel_bios_is_valid_vbt(display, fw->data, fw->size)) {
> vbt = kmemdup(fw->data, fw->size, GFP_KERNEL);
> if (vbt) {
> - drm_dbg_kms(&i915->drm,
> + drm_dbg_kms(display->drm,
> "Found valid VBT firmware \"%s\"\n", name);
> if (size)
> *size = fw->size;
> }
> } else {
> - drm_dbg_kms(&i915->drm, "Invalid VBT firmware \"%s\"\n",
> + drm_dbg_kms(display->drm, "Invalid VBT firmware \"%s\"\n",
> name);
> }
>
> @@ -3036,9 +3058,10 @@ static u32 intel_spi_read(struct intel_uncore *uncore, u32 offset)
> return intel_uncore_read(uncore, PRIMARY_SPI_TRIGGER);
> }
>
> -static struct vbt_header *spi_oprom_get_vbt(struct drm_i915_private *i915,
> +static struct vbt_header *spi_oprom_get_vbt(struct intel_display *display,
> size_t *size)
> {
> + struct drm_i915_private *i915 = to_i915(display->drm);
> u32 count, data, found, store = 0;
> u32 static_region, oprom_offset;
> u32 oprom_size = 0x200000;
> @@ -3075,10 +3098,10 @@ static struct vbt_header *spi_oprom_get_vbt(struct drm_i915_private *i915,
> for (count = 0; count < vbt_size; count += 4)
> *(vbt + store++) = intel_spi_read(&i915->uncore, found + count);
>
> - if (!intel_bios_is_valid_vbt(i915, vbt, vbt_size))
> + if (!intel_bios_is_valid_vbt(display, vbt, vbt_size))
> goto err_free_vbt;
>
> - drm_dbg_kms(&i915->drm, "Found valid VBT in SPI flash\n");
> + drm_dbg_kms(display->drm, "Found valid VBT in SPI flash\n");
>
> if (size)
> *size = vbt_size;
> @@ -3091,10 +3114,10 @@ static struct vbt_header *spi_oprom_get_vbt(struct drm_i915_private *i915,
> return NULL;
> }
>
> -static struct vbt_header *oprom_get_vbt(struct drm_i915_private *i915,
> +static struct vbt_header *oprom_get_vbt(struct intel_display *display,
> size_t *sizep)
> {
> - struct pci_dev *pdev = to_pci_dev(i915->drm.dev);
> + struct pci_dev *pdev = to_pci_dev(display->drm->dev);
> void __iomem *p = NULL, *oprom;
> struct vbt_header *vbt;
> u16 vbt_size;
> @@ -3118,13 +3141,13 @@ static struct vbt_header *oprom_get_vbt(struct drm_i915_private *i915,
> goto err_unmap_oprom;
>
> if (sizeof(struct vbt_header) > size) {
> - drm_dbg(&i915->drm, "VBT header incomplete\n");
> + drm_dbg(display->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(&i915->drm,
> + drm_dbg(display->drm,
> "VBT incomplete (vbt_size overflows)\n");
> goto err_unmap_oprom;
> }
> @@ -3136,7 +3159,7 @@ static struct vbt_header *oprom_get_vbt(struct drm_i915_private *i915,
>
> memcpy_fromio(vbt, p, vbt_size);
>
> - if (!intel_bios_is_valid_vbt(i915, vbt, vbt_size))
> + if (!intel_bios_is_valid_vbt(display, vbt, vbt_size))
> goto err_free_vbt;
>
> pci_unmap_rom(pdev, oprom);
> @@ -3144,7 +3167,7 @@ static struct vbt_header *oprom_get_vbt(struct drm_i915_private *i915,
> if (sizep)
> *sizep = vbt_size;
>
> - drm_dbg_kms(&i915->drm, "Found valid VBT in PCI ROM\n");
> + drm_dbg_kms(display->drm, "Found valid VBT in PCI ROM\n");
>
> return vbt;
>
> @@ -3156,14 +3179,14 @@ static struct vbt_header *oprom_get_vbt(struct drm_i915_private *i915,
> return NULL;
> }
>
> -static const struct vbt_header *intel_bios_get_vbt(struct drm_i915_private *i915,
> +static const struct vbt_header *intel_bios_get_vbt(struct intel_display *display,
> size_t *sizep)
> {
> - struct intel_display *display = &i915->display;
> + struct drm_i915_private *i915 = to_i915(display->drm);
> const struct vbt_header *vbt = NULL;
> intel_wakeref_t wakeref;
>
> - vbt = firmware_get_vbt(i915, sizep);
> + vbt = firmware_get_vbt(display, sizep);
>
> if (!vbt)
> vbt = intel_opregion_get_vbt(display, sizep);
> @@ -3174,76 +3197,77 @@ static const struct vbt_header *intel_bios_get_vbt(struct drm_i915_private *i915
> */
> if (!vbt && IS_DGFX(i915))
> with_intel_runtime_pm(&i915->runtime_pm, wakeref)
> - vbt = spi_oprom_get_vbt(i915, sizep);
> + vbt = spi_oprom_get_vbt(display, sizep);
>
> if (!vbt)
> with_intel_runtime_pm(&i915->runtime_pm, wakeref)
> - vbt = oprom_get_vbt(i915, sizep);
> + vbt = oprom_get_vbt(display, sizep);
>
> return vbt;
> }
>
> /**
> * intel_bios_init - find VBT and initialize settings from the BIOS
> - * @i915: i915 device instance
> + * @display: display 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 *i915)
> +void intel_bios_init(struct intel_display *display)
> {
> const struct vbt_header *vbt;
> const struct bdb_header *bdb;
>
> - INIT_LIST_HEAD(&i915->display.vbt.display_devices);
> - INIT_LIST_HEAD(&i915->display.vbt.bdb_blocks);
> + INIT_LIST_HEAD(&display->vbt.display_devices);
> + INIT_LIST_HEAD(&display->vbt.bdb_blocks);
>
> - if (!HAS_DISPLAY(i915)) {
> - drm_dbg_kms(&i915->drm,
> + if (!HAS_DISPLAY(display)) {
> + drm_dbg_kms(display->drm,
> "Skipping VBT init due to disabled display.\n");
> return;
> }
>
> - init_vbt_defaults(i915);
> + init_vbt_defaults(display);
>
> - vbt = intel_bios_get_vbt(i915, NULL);
> + vbt = intel_bios_get_vbt(display, NULL);
>
> if (!vbt)
> goto out;
>
> bdb = get_bdb_header(vbt);
> - i915->display.vbt.version = bdb->version;
> + display->vbt.version = bdb->version;
>
> - drm_dbg_kms(&i915->drm,
> + drm_dbg_kms(display->drm,
> "VBT signature \"%.*s\", BDB version %d\n",
> - (int)sizeof(vbt->signature), vbt->signature, i915->display.vbt.version);
> + (int)sizeof(vbt->signature), vbt->signature,
> + display->vbt.version);
>
> - init_bdb_blocks(i915, bdb);
> + init_bdb_blocks(display, bdb);
>
> /* Grab useful general definitions */
> - parse_general_features(i915);
> - parse_general_definitions(i915);
> - parse_driver_features(i915);
> + parse_general_features(display);
> + parse_general_definitions(display);
> + parse_driver_features(display);
>
> /* Depends on child device list */
> - parse_compression_parameters(i915);
> + parse_compression_parameters(display);
>
> out:
> if (!vbt) {
> - drm_info(&i915->drm,
> + drm_info(display->drm,
> "Failed to find VBIOS tables (VBT)\n");
> - init_vbt_missing_defaults(i915);
> + init_vbt_missing_defaults(display);
> }
>
> /* Further processing on pre-parsed or generated child device data */
> - parse_sdvo_device_mapping(i915);
> - parse_ddi_ports(i915);
> + parse_sdvo_device_mapping(display);
> + parse_ddi_ports(display);
>
> kfree(vbt);
> }
>
> -static void intel_bios_init_panel(struct drm_i915_private *i915,
> +static void intel_bios_init_panel(struct intel_display *display,
> struct intel_panel *panel,
> const struct intel_bios_encoder_data *devdata,
> const struct drm_edid *drm_edid,
> @@ -3251,63 +3275,64 @@ static void intel_bios_init_panel(struct drm_i915_private *i915,
> {
> /* already have it? */
> if (panel->vbt.panel_type >= 0) {
> - drm_WARN_ON(&i915->drm, !use_fallback);
> + drm_WARN_ON(display->drm, !use_fallback);
> return;
> }
>
> - panel->vbt.panel_type = get_panel_type(i915, devdata,
> + panel->vbt.panel_type = get_panel_type(display, devdata,
> drm_edid, use_fallback);
> if (panel->vbt.panel_type < 0) {
> - drm_WARN_ON(&i915->drm, use_fallback);
> + drm_WARN_ON(display->drm, use_fallback);
> return;
> }
>
> init_vbt_panel_defaults(panel);
>
> - parse_panel_options(i915, panel);
> - parse_generic_dtd(i915, panel);
> - parse_lfp_data(i915, panel);
> - parse_lfp_backlight(i915, panel);
> - parse_sdvo_lvds_data(i915, panel);
> - parse_panel_driver_features(i915, panel);
> - parse_power_conservation_features(i915, panel);
> - parse_edp(i915, panel);
> - parse_psr(i915, panel);
> - parse_mipi_config(i915, panel);
> - parse_mipi_sequence(i915, panel);
> + parse_panel_options(display, panel);
> + parse_generic_dtd(display, panel);
> + parse_lfp_data(display, panel);
> + parse_lfp_backlight(display, panel);
> + parse_sdvo_lvds_data(display, panel);
> + parse_panel_driver_features(display, panel);
> + parse_power_conservation_features(display, panel);
> + parse_edp(display, panel);
> + parse_psr(display, panel);
> + parse_mipi_config(display, panel);
> + parse_mipi_sequence(display, panel);
> }
>
> -void intel_bios_init_panel_early(struct drm_i915_private *i915,
> +void intel_bios_init_panel_early(struct intel_display *display,
> struct intel_panel *panel,
> const struct intel_bios_encoder_data *devdata)
> {
> - intel_bios_init_panel(i915, panel, devdata, NULL, false);
> + intel_bios_init_panel(display, panel, devdata, NULL, false);
> }
>
> -void intel_bios_init_panel_late(struct drm_i915_private *i915,
> +void intel_bios_init_panel_late(struct intel_display *display,
> struct intel_panel *panel,
> const struct intel_bios_encoder_data *devdata,
> const struct drm_edid *drm_edid)
> {
> - intel_bios_init_panel(i915, panel, devdata, drm_edid, true);
> + intel_bios_init_panel(display, panel, devdata, drm_edid, true);
> }
>
> /**
> * intel_bios_driver_remove - Free any resources allocated by intel_bios_init()
> - * @i915: i915 device instance
> + * @display: display device instance
> */
> -void intel_bios_driver_remove(struct drm_i915_private *i915)
> +void intel_bios_driver_remove(struct intel_display *display)
> {
> struct intel_bios_encoder_data *devdata, *nd;
> struct bdb_block_entry *entry, *ne;
>
> - list_for_each_entry_safe(devdata, nd, &i915->display.vbt.display_devices, node) {
> + list_for_each_entry_safe(devdata, nd, &display->vbt.display_devices,
> + node) {
> list_del(&devdata->node);
> kfree(devdata->dsc);
> kfree(devdata);
> }
>
> - list_for_each_entry_safe(entry, ne, &i915->display.vbt.bdb_blocks, node) {
> + list_for_each_entry_safe(entry, ne, &display->vbt.bdb_blocks, node) {
> list_del(&entry->node);
> kfree(entry);
> }
> @@ -3331,22 +3356,22 @@ void intel_bios_fini_panel(struct intel_panel *panel)
>
> /**
> * intel_bios_is_tv_present - is integrated TV present in VBT
> - * @i915: i915 device instance
> + * @display: display 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 *i915)
> +bool intel_bios_is_tv_present(struct intel_display *display)
> {
> const struct intel_bios_encoder_data *devdata;
>
> - if (!i915->display.vbt.int_tv_support)
> + if (!display->vbt.int_tv_support)
> return false;
>
> - if (list_empty(&i915->display.vbt.display_devices))
> + if (list_empty(&display->vbt.display_devices))
> return true;
>
> - list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) {
> + list_for_each_entry(devdata, &display->vbt.display_devices, node) {
> const struct child_device_config *child = &devdata->child;
>
> /*
> @@ -3372,21 +3397,21 @@ bool intel_bios_is_tv_present(struct drm_i915_private *i915)
>
> /**
> * intel_bios_is_lvds_present - is LVDS present in VBT
> - * @i915: i915 device instance
> + * @display: display 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 *i915, u8 *i2c_pin)
> +bool intel_bios_is_lvds_present(struct intel_display *display, u8 *i2c_pin)
> {
> - struct intel_display *display = &i915->display;
> + struct drm_i915_private *i915 = to_i915(display->drm);
> const struct intel_bios_encoder_data *devdata;
>
> - if (list_empty(&i915->display.vbt.display_devices))
> + if (list_empty(&display->vbt.display_devices))
> return true;
>
> - list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) {
> + list_for_each_entry(devdata, &display->vbt.display_devices, node) {
> const struct child_device_config *child = &devdata->child;
>
> /* If the device type is not LFP, continue.
> @@ -3421,25 +3446,25 @@ bool intel_bios_is_lvds_present(struct drm_i915_private *i915, u8 *i2c_pin)
>
> /**
> * intel_bios_is_port_present - is the specified digital port present
> - * @i915: i915 device instance
> + * @display: display 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 *i915, enum port port)
> +bool intel_bios_is_port_present(struct intel_display *display, enum port port)
> {
> const struct intel_bios_encoder_data *devdata;
>
> - if (WARN_ON(!has_ddi_port_info(i915)))
> + if (WARN_ON(!has_ddi_port_info(display)))
> return true;
>
> - if (!is_port_valid(i915, port))
> + if (!is_port_valid(display, port))
> return false;
>
> - list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) {
> + list_for_each_entry(devdata, &display->vbt.display_devices, node) {
> const struct child_device_config *child = &devdata->child;
>
> - if (dvo_port_to_port(i915, child->dvo_port) == port)
> + if (dvo_port_to_port(display, child->dvo_port) == port)
> return true;
> }
>
> @@ -3470,32 +3495,32 @@ bool intel_bios_encoder_supports_dp_dual_mode(const struct intel_bios_encoder_da
>
> /**
> * intel_bios_is_dsi_present - is DSI present in VBT
> - * @i915: i915 device instance
> + * @display: display 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 *i915,
> +bool intel_bios_is_dsi_present(struct intel_display *display,
> enum port *port)
> {
> const struct intel_bios_encoder_data *devdata;
>
> - list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) {
> + list_for_each_entry(devdata, &display->vbt.display_devices, node) {
> const struct child_device_config *child = &devdata->child;
> u8 dvo_port = child->dvo_port;
>
> if (!(child->device_type & DEVICE_TYPE_MIPI_OUTPUT))
> continue;
>
> - if (dsi_dvo_port_to_port(i915, dvo_port) == PORT_NONE) {
> - drm_dbg_kms(&i915->drm,
> + if (dsi_dvo_port_to_port(display, dvo_port) == PORT_NONE) {
> + drm_dbg_kms(display->drm,
> "VBT has unsupported DSI port %c\n",
> port_name(dvo_port - DVO_PORT_MIPIA));
> continue;
> }
>
> if (port)
> - *port = dsi_dvo_port_to_port(i915, dvo_port);
> + *port = dsi_dvo_port_to_port(display, dvo_port);
> return true;
> }
>
> @@ -3506,7 +3531,7 @@ static void fill_dsc(struct intel_crtc_state *crtc_state,
> struct dsc_compression_parameters_entry *dsc,
> int dsc_max_bpc)
> {
> - struct drm_i915_private *i915 = to_i915(crtc_state->uapi.crtc->dev);
> + struct intel_display *display = to_intel_display(crtc_state);
> struct drm_dsc_config *vdsc_cfg = &crtc_state->dsc.config;
> int bpc = 8;
>
> @@ -3520,7 +3545,7 @@ static void fill_dsc(struct intel_crtc_state *crtc_state,
> else if (dsc->support_8bpc && dsc_max_bpc >= 8)
> bpc = 8;
> else
> - drm_dbg_kms(&i915->drm, "VBT: Unsupported BPC %d for DCS\n",
> + drm_dbg_kms(display->drm, "VBT: Unsupported BPC %d for DCS\n",
> dsc_max_bpc);
>
> crtc_state->pipe_bpp = bpc * 3;
> @@ -3541,14 +3566,16 @@ static void fill_dsc(struct intel_crtc_state *crtc_state,
> } else {
> /* FIXME */
> if (!(dsc->slices_per_line & BIT(0)))
> - drm_dbg_kms(&i915->drm, "VBT: Unsupported DSC slice count for DSI\n");
> + drm_dbg_kms(display->drm,
> + "VBT: Unsupported DSC slice count for DSI\n");
>
> crtc_state->dsc.slice_count = 1;
> }
>
> if (crtc_state->hw.adjusted_mode.crtc_hdisplay %
> crtc_state->dsc.slice_count != 0)
> - drm_dbg_kms(&i915->drm, "VBT: DSC hdisplay %d not divisible by slice count %d\n",
> + drm_dbg_kms(display->drm,
> + "VBT: DSC hdisplay %d not divisible by slice count %d\n",
> crtc_state->hw.adjusted_mode.crtc_hdisplay,
> crtc_state->dsc.slice_count);
>
> @@ -3572,16 +3599,16 @@ bool intel_bios_get_dsc_params(struct intel_encoder *encoder,
> struct intel_crtc_state *crtc_state,
> int dsc_max_bpc)
> {
> - struct drm_i915_private *i915 = to_i915(encoder->base.dev);
> + struct intel_display *display = to_intel_display(encoder);
> const struct intel_bios_encoder_data *devdata;
>
> - list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) {
> + list_for_each_entry(devdata, &display->vbt.display_devices, node) {
> const struct child_device_config *child = &devdata->child;
>
> if (!(child->device_type & DEVICE_TYPE_MIPI_OUTPUT))
> continue;
>
> - if (dsi_dvo_port_to_port(i915, child->dvo_port) == encoder->port) {
> + if (dsi_dvo_port_to_port(display, child->dvo_port) == encoder->port) {
> if (!devdata->dsc)
> return false;
>
> @@ -3641,12 +3668,13 @@ static const u8 direct_aux_ch_map[] = {
> [AUX_CH_I] = DP_AUX_I, /* aka AUX_CH_USBC6 */
> };
>
> -static enum aux_ch map_aux_ch(struct drm_i915_private *i915, u8 aux_channel)
> +static enum aux_ch map_aux_ch(struct intel_display *display, u8 aux_channel)
> {
> + struct drm_i915_private *i915 = to_i915(display->drm);
> const u8 *aux_ch_map;
> int i, n_entries;
>
> - if (DISPLAY_VER(i915) >= 13) {
> + if (DISPLAY_VER(display) >= 13) {
> aux_ch_map = adlp_aux_ch_map;
> n_entries = ARRAY_SIZE(adlp_aux_ch_map);
> } else if (IS_ALDERLAKE_S(i915)) {
> @@ -3665,7 +3693,7 @@ static enum aux_ch map_aux_ch(struct drm_i915_private *i915, u8 aux_channel)
> return i;
> }
>
> - drm_dbg_kms(&i915->drm,
> + drm_dbg_kms(display->drm,
> "Ignoring alternate AUX CH: VBT claims AUX 0x%x, which is not valid for this platform\n",
> aux_channel);
>
> @@ -3677,22 +3705,22 @@ enum aux_ch intel_bios_dp_aux_ch(const struct intel_bios_encoder_data *devdata)
> if (!devdata || !devdata->child.aux_channel)
> return AUX_CH_NONE;
>
> - return map_aux_ch(devdata->i915, devdata->child.aux_channel);
> + return map_aux_ch(devdata->display, devdata->child.aux_channel);
> }
>
> bool intel_bios_dp_has_shared_aux_ch(const struct intel_bios_encoder_data *devdata)
> {
> - struct drm_i915_private *i915;
> + struct intel_display *display;
> u8 aux_channel;
> int count = 0;
>
> if (!devdata || !devdata->child.aux_channel)
> return false;
>
> - i915 = devdata->i915;
> + display = devdata->display;
> aux_channel = devdata->child.aux_channel;
>
> - list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) {
> + list_for_each_entry(devdata, &display->vbt.display_devices, node) {
> if (intel_bios_encoder_supports_dp(devdata) &&
> aux_channel == devdata->child.aux_channel)
> count++;
> @@ -3703,18 +3731,18 @@ bool intel_bios_dp_has_shared_aux_ch(const struct intel_bios_encoder_data *devda
>
> int intel_bios_dp_boost_level(const struct intel_bios_encoder_data *devdata)
> {
> - if (!devdata || devdata->i915->display.vbt.version < 196 || !devdata->child.iboost)
> + if (!devdata || devdata->display->vbt.version < 196 || !devdata->child.iboost)
> return 0;
>
> - return translate_iboost(devdata->i915, devdata->child.dp_iboost_level);
> + return translate_iboost(devdata->display, devdata->child.dp_iboost_level);
> }
>
> int intel_bios_hdmi_boost_level(const struct intel_bios_encoder_data *devdata)
> {
> - if (!devdata || devdata->i915->display.vbt.version < 196 || !devdata->child.iboost)
> + if (!devdata || devdata->display->vbt.version < 196 || !devdata->child.iboost)
> return 0;
>
> - return translate_iboost(devdata->i915, devdata->child.hdmi_iboost_level);
> + return translate_iboost(devdata->display, devdata->child.hdmi_iboost_level);
> }
>
> int intel_bios_hdmi_ddc_pin(const struct intel_bios_encoder_data *devdata)
> @@ -3722,17 +3750,17 @@ int intel_bios_hdmi_ddc_pin(const struct intel_bios_encoder_data *devdata)
> if (!devdata || !devdata->child.ddc_pin)
> return 0;
>
> - return map_ddc_pin(devdata->i915, devdata->child.ddc_pin);
> + return map_ddc_pin(devdata->display, devdata->child.ddc_pin);
> }
>
> bool intel_bios_encoder_supports_typec_usb(const struct intel_bios_encoder_data *devdata)
> {
> - return devdata->i915->display.vbt.version >= 195 && devdata->child.dp_usb_type_c;
> + return devdata->display->vbt.version >= 195 && devdata->child.dp_usb_type_c;
> }
>
> bool intel_bios_encoder_supports_tbt(const struct intel_bios_encoder_data *devdata)
> {
> - return devdata->i915->display.vbt.version >= 209 && devdata->child.tbt;
> + return devdata->display->vbt.version >= 209 && devdata->child.tbt;
> }
>
> bool intel_bios_encoder_lane_reversal(const struct intel_bios_encoder_data *devdata)
> @@ -3746,11 +3774,11 @@ bool intel_bios_encoder_hpd_invert(const struct intel_bios_encoder_data *devdata
> }
>
> const struct intel_bios_encoder_data *
> -intel_bios_encoder_data_lookup(struct drm_i915_private *i915, enum port port)
> +intel_bios_encoder_data_lookup(struct intel_display *display, enum port port)
> {
> struct intel_bios_encoder_data *devdata;
>
> - list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) {
> + list_for_each_entry(devdata, &display->vbt.display_devices, node) {
> if (intel_bios_encoder_port(devdata) == port)
> return devdata;
> }
> @@ -3758,23 +3786,23 @@ intel_bios_encoder_data_lookup(struct drm_i915_private *i915, enum port port)
> return NULL;
> }
>
> -void intel_bios_for_each_encoder(struct drm_i915_private *i915,
> - void (*func)(struct drm_i915_private *i915,
> +void intel_bios_for_each_encoder(struct intel_display *display,
> + void (*func)(struct intel_display *display,
> const struct intel_bios_encoder_data *devdata))
> {
> struct intel_bios_encoder_data *devdata;
>
> - list_for_each_entry(devdata, &i915->display.vbt.display_devices, node)
> - func(i915, devdata);
> + list_for_each_entry(devdata, &display->vbt.display_devices, node)
> + func(display, devdata);
> }
>
> static int intel_bios_vbt_show(struct seq_file *m, void *unused)
> {
> - struct drm_i915_private *i915 = m->private;
> + struct intel_display *display = m->private;
> const void *vbt;
> size_t vbt_size;
>
> - vbt = intel_bios_get_vbt(i915, &vbt_size);
> + vbt = intel_bios_get_vbt(display, &vbt_size);
>
> if (vbt) {
> seq_write(m, vbt, vbt_size);
> @@ -3786,10 +3814,10 @@ static int intel_bios_vbt_show(struct seq_file *m, void *unused)
>
> DEFINE_SHOW_ATTRIBUTE(intel_bios_vbt);
>
> -void intel_bios_debugfs_register(struct drm_i915_private *i915)
> +void intel_bios_debugfs_register(struct intel_display *display)
> {
> - struct drm_minor *minor = i915->drm.primary;
> + struct drm_minor *minor = display->drm->primary;
>
> debugfs_create_file("i915_vbt", 0444, minor->debugfs_root,
> - i915, &intel_bios_vbt_fops);
> + display, &intel_bios_vbt_fops);
> }
> diff --git a/drivers/gpu/drm/i915/display/intel_bios.h b/drivers/gpu/drm/i915/display/intel_bios.h
> index 06a51be4afd8..8b703f6cfe17 100644
> --- a/drivers/gpu/drm/i915/display/intel_bios.h
> +++ b/drivers/gpu/drm/i915/display/intel_bios.h
> @@ -33,9 +33,9 @@
> #include <linux/types.h>
>
> struct drm_edid;
> -struct drm_i915_private;
> struct intel_bios_encoder_data;
> struct intel_crtc_state;
> +struct intel_display;
> struct intel_encoder;
> struct intel_panel;
> enum aux_ch;
> @@ -232,28 +232,28 @@ struct mipi_pps_data {
> u16 panel_power_cycle_delay;
> } __packed;
>
> -void intel_bios_init(struct drm_i915_private *dev_priv);
> -void intel_bios_init_panel_early(struct drm_i915_private *dev_priv,
> +void intel_bios_init(struct intel_display *display);
> +void intel_bios_init_panel_early(struct intel_display *display,
> struct intel_panel *panel,
> const struct intel_bios_encoder_data *devdata);
> -void intel_bios_init_panel_late(struct drm_i915_private *dev_priv,
> +void intel_bios_init_panel_late(struct intel_display *display,
> struct intel_panel *panel,
> const struct intel_bios_encoder_data *devdata,
> const struct drm_edid *drm_edid);
> void intel_bios_fini_panel(struct intel_panel *panel);
> -void intel_bios_driver_remove(struct drm_i915_private *dev_priv);
> -bool intel_bios_is_valid_vbt(struct drm_i915_private *i915,
> +void intel_bios_driver_remove(struct intel_display *display);
> +bool intel_bios_is_valid_vbt(struct intel_display *display,
> const void *buf, size_t size);
> -bool intel_bios_is_tv_present(struct drm_i915_private *dev_priv);
> -bool intel_bios_is_lvds_present(struct drm_i915_private *dev_priv, u8 *i2c_pin);
> -bool intel_bios_is_port_present(struct drm_i915_private *dev_priv, enum port port);
> -bool intel_bios_is_dsi_present(struct drm_i915_private *dev_priv, enum port *port);
> +bool intel_bios_is_tv_present(struct intel_display *display);
> +bool intel_bios_is_lvds_present(struct intel_display *display, u8 *i2c_pin);
> +bool intel_bios_is_port_present(struct intel_display *display, enum port port);
> +bool intel_bios_is_dsi_present(struct intel_display *display, enum port *port);
> bool intel_bios_get_dsc_params(struct intel_encoder *encoder,
> struct intel_crtc_state *crtc_state,
> int dsc_max_bpc);
>
> const struct intel_bios_encoder_data *
> -intel_bios_encoder_data_lookup(struct drm_i915_private *i915, enum port port);
> +intel_bios_encoder_data_lookup(struct intel_display *display, 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);
> @@ -277,10 +277,10 @@ int intel_bios_hdmi_ddc_pin(const struct intel_bios_encoder_data *devdata);
> int intel_bios_hdmi_level_shift(const struct intel_bios_encoder_data *devdata);
> int intel_bios_hdmi_max_tmds_clock(const struct intel_bios_encoder_data *devdata);
>
> -void intel_bios_for_each_encoder(struct drm_i915_private *i915,
> - void (*func)(struct drm_i915_private *i915,
> +void intel_bios_for_each_encoder(struct intel_display *display,
> + void (*func)(struct intel_display *display,
> const struct intel_bios_encoder_data *devdata));
>
> -void intel_bios_debugfs_register(struct drm_i915_private *i915);
> +void intel_bios_debugfs_register(struct intel_display *display);
>
> #endif /* _INTEL_BIOS_H_ */
> diff --git a/drivers/gpu/drm/i915/display/intel_combo_phy.c b/drivers/gpu/drm/i915/display/intel_combo_phy.c
> index 143d66951631..3252dab56430 100644
> --- a/drivers/gpu/drm/i915/display/intel_combo_phy.c
> +++ b/drivers/gpu/drm/i915/display/intel_combo_phy.c
> @@ -159,9 +159,11 @@ static bool icl_combo_phy_enabled(struct drm_i915_private *dev_priv,
>
> static bool ehl_vbt_ddi_d_present(struct drm_i915_private *i915)
> {
> - bool ddi_a_present = intel_bios_is_port_present(i915, PORT_A);
> - bool ddi_d_present = intel_bios_is_port_present(i915, PORT_D);
> - bool dsi_present = intel_bios_is_dsi_present(i915, NULL);
> + struct intel_display *display = &i915->display;
> +
> + bool ddi_a_present = intel_bios_is_port_present(display, PORT_A);
> + bool ddi_d_present = intel_bios_is_port_present(display, PORT_D);
> + bool dsi_present = intel_bios_is_dsi_present(display, NULL);
>
> /*
> * VBT's 'dvo port' field for child devices references the DDI, not
> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
> index a07aca96e551..7414d767b8dc 100644
> --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> @@ -4853,9 +4853,10 @@ static bool port_in_use(struct drm_i915_private *i915, enum port port)
> return false;
> }
>
> -void intel_ddi_init(struct drm_i915_private *dev_priv,
> +void intel_ddi_init(struct intel_display *display,
> const struct intel_bios_encoder_data *devdata)
> {
> + struct drm_i915_private *dev_priv = to_i915(display->drm);
> struct intel_digital_port *dig_port;
> struct intel_encoder *encoder;
> bool init_hdmi, init_dp;
> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.h b/drivers/gpu/drm/i915/display/intel_ddi.h
> index 434de7196875..6d85422bdefe 100644
> --- a/drivers/gpu/drm/i915/display/intel_ddi.h
> +++ b/drivers/gpu/drm/i915/display/intel_ddi.h
> @@ -15,6 +15,7 @@ struct intel_bios_encoder_data;
> struct intel_connector;
> struct intel_crtc;
> struct intel_crtc_state;
> +struct intel_display;
> struct intel_dp;
> struct intel_dpll_hw_state;
> struct intel_encoder;
> @@ -53,7 +54,7 @@ void hsw_prepare_dp_ddi_buffers(struct intel_encoder *encoder,
> const struct intel_crtc_state *crtc_state);
> void intel_wait_ddi_buf_idle(struct drm_i915_private *dev_priv,
> enum port port);
> -void intel_ddi_init(struct drm_i915_private *dev_priv,
> +void intel_ddi_init(struct intel_display *display,
> const struct intel_bios_encoder_data *devdata);
> bool intel_ddi_get_hw_state(struct intel_encoder *encoder, enum pipe *pipe);
> void intel_ddi_enable_transcoder_func(struct intel_encoder *encoder,
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index 01a5faa3fea5..48241075eeba 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -7785,6 +7785,7 @@ bool assert_port_valid(struct drm_i915_private *i915, enum port port)
>
> void intel_setup_outputs(struct drm_i915_private *dev_priv)
> {
> + struct intel_display *display = &dev_priv->display;
> struct intel_encoder *encoder;
> bool dpd_is_edp = false;
>
> @@ -7797,7 +7798,7 @@ void intel_setup_outputs(struct drm_i915_private *dev_priv)
> if (intel_ddi_crt_present(dev_priv))
> intel_crt_init(dev_priv);
>
> - intel_bios_for_each_encoder(dev_priv, intel_ddi_init);
> + intel_bios_for_each_encoder(display, intel_ddi_init);
>
> if (IS_GEMINILAKE(dev_priv) || IS_BROXTON(dev_priv))
> vlv_dsi_init(dev_priv);
> @@ -7859,14 +7860,14 @@ void intel_setup_outputs(struct drm_i915_private *dev_priv)
> * HDMI ports that the VBT claim are DP or eDP.
> */
> has_edp = intel_dp_is_port_edp(dev_priv, PORT_B);
> - has_port = intel_bios_is_port_present(dev_priv, PORT_B);
> + has_port = intel_bios_is_port_present(display, PORT_B);
> if (intel_de_read(dev_priv, VLV_DP_B) & DP_DETECTED || has_port)
> has_edp &= g4x_dp_init(dev_priv, VLV_DP_B, PORT_B);
> if ((intel_de_read(dev_priv, VLV_HDMIB) & SDVO_DETECTED || has_port) && !has_edp)
> g4x_hdmi_init(dev_priv, VLV_HDMIB, PORT_B);
>
> has_edp = intel_dp_is_port_edp(dev_priv, PORT_C);
> - has_port = intel_bios_is_port_present(dev_priv, PORT_C);
> + has_port = intel_bios_is_port_present(display, PORT_C);
> if (intel_de_read(dev_priv, VLV_DP_C) & DP_DETECTED || has_port)
> has_edp &= g4x_dp_init(dev_priv, VLV_DP_C, PORT_C);
> if ((intel_de_read(dev_priv, VLV_HDMIC) & SDVO_DETECTED || has_port) && !has_edp)
> @@ -7877,7 +7878,7 @@ void intel_setup_outputs(struct drm_i915_private *dev_priv)
> * eDP not supported on port D,
> * so no need to worry about it
> */
> - has_port = intel_bios_is_port_present(dev_priv, PORT_D);
> + has_port = intel_bios_is_port_present(display, PORT_D);
> if (intel_de_read(dev_priv, CHV_DP_D) & DP_DETECTED || has_port)
> g4x_dp_init(dev_priv, CHV_DP_D, PORT_D);
> if (intel_de_read(dev_priv, CHV_HDMID) & SDVO_DETECTED || has_port)
> diff --git a/drivers/gpu/drm/i915/display/intel_display_debugfs.c b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> index ac8ad4a40b96..a55c9fac1ca4 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> @@ -1061,7 +1061,7 @@ void intel_display_debugfs_register(struct drm_i915_private *i915)
> ARRAY_SIZE(intel_display_debugfs_list),
> minor->debugfs_root, minor);
>
> - intel_bios_debugfs_register(i915);
> + intel_bios_debugfs_register(display);
> intel_cdclk_debugfs_register(i915);
> intel_dmc_debugfs_register(i915);
> intel_fbc_debugfs_register(display);
> diff --git a/drivers/gpu/drm/i915/display/intel_display_driver.c b/drivers/gpu/drm/i915/display/intel_display_driver.c
> index a2666b69834e..328d8b5a6b66 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_driver.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_driver.c
> @@ -217,7 +217,7 @@ int intel_display_driver_probe_noirq(struct drm_i915_private *i915)
> return ret;
> }
>
> - intel_bios_init(i915);
> + intel_bios_init(display);
>
> ret = intel_vga_register(i915);
> if (ret)
> @@ -275,7 +275,7 @@ int intel_display_driver_probe_noirq(struct drm_i915_private *i915)
> cleanup_vga:
> intel_vga_unregister(i915);
> cleanup_bios:
> - intel_bios_driver_remove(i915);
> + intel_bios_driver_remove(display);
>
> return ret;
> }
> @@ -615,13 +615,15 @@ void intel_display_driver_remove_noirq(struct drm_i915_private *i915)
> /* part #3: call after gem init */
> void intel_display_driver_remove_nogem(struct drm_i915_private *i915)
> {
> + struct intel_display *display = &i915->display;
> +
> intel_dmc_fini(i915);
>
> intel_power_domains_driver_remove(i915);
>
> intel_vga_unregister(i915);
>
> - intel_bios_driver_remove(i915);
> + intel_bios_driver_remove(display);
> }
>
> void intel_display_driver_unregister(struct drm_i915_private *i915)
> diff --git a/drivers/gpu/drm/i915/display/intel_display_irq.c b/drivers/gpu/drm/i915/display/intel_display_irq.c
> index 6cc1cc5e94d5..3f53db68c44c 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_irq.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_irq.c
> @@ -1690,6 +1690,7 @@ static void icp_irq_postinstall(struct drm_i915_private *i915);
>
> void gen8_de_irq_postinstall(struct drm_i915_private *dev_priv)
> {
> + struct intel_display *display = &dev_priv->display;
> struct intel_uncore *uncore = &dev_priv->uncore;
>
> u32 de_pipe_masked = gen8_de_pipe_fault_mask(dev_priv) |
> @@ -1724,7 +1725,7 @@ void gen8_de_irq_postinstall(struct drm_i915_private *dev_priv)
> } else if (DISPLAY_VER(dev_priv) >= 11) {
> enum port port;
>
> - if (intel_bios_is_dsi_present(dev_priv, &port))
> + if (intel_bios_is_dsi_present(display, &port))
> de_port_masked |= DSI0_TE | DSI1_TE;
> }
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
> index 86412ae7b48f..2e5a4e2218c2 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -6385,8 +6385,9 @@ static bool _intel_dp_is_port_edp(struct drm_i915_private *dev_priv,
>
> bool intel_dp_is_port_edp(struct drm_i915_private *i915, enum port port)
> {
> + struct intel_display *display = &i915->display;
> const struct intel_bios_encoder_data *devdata =
> - intel_bios_encoder_data_lookup(i915, port);
> + intel_bios_encoder_data_lookup(display, port);
>
> return _intel_dp_is_port_edp(i915, devdata, port);
> }
> @@ -6489,6 +6490,7 @@ static void intel_edp_backlight_setup(struct intel_dp *intel_dp,
> static bool intel_edp_init_connector(struct intel_dp *intel_dp,
> struct intel_connector *intel_connector)
> {
> + struct intel_display *display = to_intel_display(intel_dp);
> struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
> struct drm_connector *connector = &intel_connector->base;
> struct drm_display_mode *fixed_mode;
> @@ -6514,7 +6516,7 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
> return false;
> }
>
> - intel_bios_init_panel_early(dev_priv, &intel_connector->panel,
> + intel_bios_init_panel_early(display, &intel_connector->panel,
> encoder->devdata);
>
> if (!intel_pps_init(intel_dp)) {
> @@ -6611,7 +6613,7 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
> drm_edid = ERR_PTR(-ENOENT);
> }
>
> - intel_bios_init_panel_late(dev_priv, &intel_connector->panel, encoder->devdata,
> + intel_bios_init_panel_late(display, &intel_connector->panel, encoder->devdata,
> IS_ERR(drm_edid) ? NULL : drm_edid);
>
> intel_panel_add_edid_fixed_modes(intel_connector, true);
> diff --git a/drivers/gpu/drm/i915/display/intel_lvds.c b/drivers/gpu/drm/i915/display/intel_lvds.c
> index 9f018503d4fd..fb4ed9f7855b 100644
> --- a/drivers/gpu/drm/i915/display/intel_lvds.c
> +++ b/drivers/gpu/drm/i915/display/intel_lvds.c
> @@ -838,6 +838,7 @@ static void intel_lvds_add_properties(struct drm_connector *connector)
> */
> void intel_lvds_init(struct drm_i915_private *i915)
> {
> + struct intel_display *display = &i915->display;
> struct intel_lvds_encoder *lvds_encoder;
> struct intel_connector *connector;
> const struct drm_edid *drm_edid;
> @@ -872,7 +873,7 @@ void intel_lvds_init(struct drm_i915_private *i915)
> }
>
> ddc_pin = GMBUS_PIN_PANEL;
> - if (!intel_bios_is_lvds_present(i915, &ddc_pin)) {
> + if (!intel_bios_is_lvds_present(display, &ddc_pin)) {
> if ((lvds & LVDS_PORT_EN) == 0) {
> drm_dbg_kms(&i915->drm,
> "LVDS is not present in VBT\n");
> @@ -966,7 +967,7 @@ void intel_lvds_init(struct drm_i915_private *i915)
> } else {
> drm_edid = ERR_PTR(-ENOENT);
> }
> - intel_bios_init_panel_late(i915, &connector->panel, NULL,
> + intel_bios_init_panel_late(display, &connector->panel, NULL,
> IS_ERR(drm_edid) ? NULL : drm_edid);
>
> /* Try EDID first */
> diff --git a/drivers/gpu/drm/i915/display/intel_opregion.c b/drivers/gpu/drm/i915/display/intel_opregion.c
> index 0cf6c0711dae..d3d0b4b2e088 100644
> --- a/drivers/gpu/drm/i915/display/intel_opregion.c
> +++ b/drivers/gpu/drm/i915/display/intel_opregion.c
> @@ -870,7 +870,6 @@ static const struct dmi_system_id intel_no_opregion_vbt[] = {
>
> int intel_opregion_setup(struct intel_display *display)
> {
> - struct drm_i915_private *i915 = to_i915(display->drm);
> struct intel_opregion *opregion;
> struct pci_dev *pdev = to_pci_dev(display->drm->dev);
> u32 asls, mboxes;
> @@ -991,7 +990,7 @@ int intel_opregion_setup(struct intel_display *display)
>
> vbt = opregion->rvda;
> vbt_size = opregion->asle->rvds;
> - if (intel_bios_is_valid_vbt(i915, vbt, vbt_size)) {
> + if (intel_bios_is_valid_vbt(display, vbt, vbt_size)) {
> drm_dbg_kms(display->drm,
> "Found valid VBT in ACPI OpRegion (RVDA)\n");
> opregion->vbt = vbt;
> @@ -1016,7 +1015,7 @@ int intel_opregion_setup(struct intel_display *display)
> vbt_size = (mboxes & MBOX_ASLE_EXT) ?
> OPREGION_ASLE_EXT_OFFSET : OPREGION_SIZE;
> vbt_size -= OPREGION_VBT_OFFSET;
> - if (intel_bios_is_valid_vbt(i915, vbt, vbt_size)) {
> + if (intel_bios_is_valid_vbt(display, vbt, vbt_size)) {
> drm_dbg_kms(display->drm,
> "Found valid VBT in ACPI OpRegion (Mailbox #4)\n");
> opregion->vbt = vbt;
> diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
> index 4cfa27ca8c22..7cc519b402e9 100644
> --- a/drivers/gpu/drm/i915/display/intel_sdvo.c
> +++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
> @@ -2919,6 +2919,7 @@ intel_sdvo_analog_init(struct intel_sdvo *intel_sdvo, u16 type)
> static bool
> intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, u16 type)
> {
> + struct intel_display *display = to_intel_display(&intel_sdvo->base);
> struct drm_encoder *encoder = &intel_sdvo->base.base;
> struct drm_i915_private *i915 = to_i915(encoder->dev);
> struct drm_connector *connector;
> @@ -2946,7 +2947,7 @@ intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, u16 type)
> if (!intel_sdvo_create_enhance_property(intel_sdvo, intel_sdvo_connector))
> goto err;
>
> - intel_bios_init_panel_late(i915, &intel_connector->panel, NULL, NULL);
> + intel_bios_init_panel_late(display, &intel_connector->panel, NULL, NULL);
>
> /*
> * Fetch modes from VBT. For SDVO prefer the VBT mode since some
> diff --git a/drivers/gpu/drm/i915/display/intel_tv.c b/drivers/gpu/drm/i915/display/intel_tv.c
> index 9df0f1263913..bfc43bda8532 100644
> --- a/drivers/gpu/drm/i915/display/intel_tv.c
> +++ b/drivers/gpu/drm/i915/display/intel_tv.c
> @@ -1930,6 +1930,7 @@ static void intel_tv_add_properties(struct drm_connector *connector)
> void
> intel_tv_init(struct drm_i915_private *dev_priv)
> {
> + struct intel_display *display = &dev_priv->display;
> struct drm_connector *connector;
> struct intel_tv *intel_tv;
> struct intel_encoder *intel_encoder;
> @@ -1939,7 +1940,7 @@ intel_tv_init(struct drm_i915_private *dev_priv)
> if ((intel_de_read(dev_priv, TV_CTL) & TV_FUSE_STATE_MASK) == TV_FUSE_STATE_DISABLED)
> return;
>
> - if (!intel_bios_is_tv_present(dev_priv)) {
> + if (!intel_bios_is_tv_present(display)) {
> drm_dbg_kms(&dev_priv->drm, "Integrated TV is not present.\n");
> return;
> }
> diff --git a/drivers/gpu/drm/i915/display/vlv_dsi.c b/drivers/gpu/drm/i915/display/vlv_dsi.c
> index eae5b5e09aa8..248bab691181 100644
> --- a/drivers/gpu/drm/i915/display/vlv_dsi.c
> +++ b/drivers/gpu/drm/i915/display/vlv_dsi.c
> @@ -1880,6 +1880,7 @@ static const struct dmi_system_id vlv_dsi_dmi_quirk_table[] = {
>
> void vlv_dsi_init(struct drm_i915_private *dev_priv)
> {
> + struct intel_display *display = &dev_priv->display;
> struct intel_dsi *intel_dsi;
> struct intel_encoder *encoder;
> struct intel_connector *connector;
> @@ -1891,7 +1892,7 @@ void vlv_dsi_init(struct drm_i915_private *dev_priv)
> drm_dbg_kms(&dev_priv->drm, "\n");
>
> /* There is no detection method for MIPI so rely on VBT */
> - if (!intel_bios_is_dsi_present(dev_priv, &port))
> + if (!intel_bios_is_dsi_present(display, &port))
> return;
>
> if (IS_GEMINILAKE(dev_priv) || IS_BROXTON(dev_priv))
> @@ -1946,7 +1947,7 @@ void vlv_dsi_init(struct drm_i915_private *dev_priv)
>
> intel_dsi->panel_power_off_time = ktime_get_boottime();
>
> - intel_bios_init_panel_late(dev_priv, &connector->panel, NULL, NULL);
> + intel_bios_init_panel_late(display, &connector->panel, NULL, NULL);
>
> if (connector->panel.vbt.dsi.config->dual_link)
> intel_dsi->ports = BIT(PORT_A) | BIT(PORT_C);
> --
> 2.39.2
>
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2024-08-06 15:23 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-31 16:44 [PATCH 0/4] drm/i915: struct intel_display conversions Jani Nikula
2024-07-31 16:44 ` [PATCH 1/4] drm/i915/acpi: convert to struct intel_display Jani Nikula
2024-08-06 13:51 ` Imre Deak
2024-07-31 16:44 ` [PATCH 2/4] drm/i915/opregion: unify intel_encoder/intel_connector naming Jani Nikula
2024-08-06 13:53 ` Imre Deak
2024-07-31 16:44 ` [PATCH 3/4] drm/i915/opregion: convert to struct intel_display Jani Nikula
2024-08-02 10:07 ` kernel test robot
2024-08-06 14:37 ` Imre Deak
2024-07-31 16:44 ` [PATCH 4/4] drm/i915/bios: " Jani Nikula
2024-08-06 15:23 ` Imre Deak
2024-07-31 17:38 ` ✗ Fi.CI.SPARSE: warning for drm/i915: struct intel_display conversions Patchwork
2024-07-31 17:53 ` ✗ Fi.CI.BAT: failure " Patchwork
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).