Commit 769b081c authored by Jani Nikula's avatar Jani Nikula

drm/i915/opregion: convert to struct intel_display

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.

v2:
- Fix declarations for !CONFIG_ACPI (Imre, kernel test robot)
- Pass encoder/connector directly to intel_display() (Imre)
Reviewed-by: default avatarImre Deak <imre.deak@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/aef94503909bbbf95f0244dc382a4d4cd050b903.1723213547.git.jani.nikula@intel.comSigned-off-by: default avatarJani Nikula <jani.nikula@intel.com>
parent b7f317e6
...@@ -622,7 +622,9 @@ static int opregion_get_panel_type(struct drm_i915_private *i915, ...@@ -622,7 +622,9 @@ static int opregion_get_panel_type(struct drm_i915_private *i915,
const struct intel_bios_encoder_data *devdata, const struct intel_bios_encoder_data *devdata,
const struct drm_edid *drm_edid, bool use_fallback) 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, static int vbt_get_panel_type(struct drm_i915_private *i915,
...@@ -3158,13 +3160,14 @@ static struct vbt_header *oprom_get_vbt(struct drm_i915_private *i915, ...@@ -3158,13 +3160,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, static const struct vbt_header *intel_bios_get_vbt(struct drm_i915_private *i915,
size_t *sizep) size_t *sizep)
{ {
struct intel_display *display = &i915->display;
const struct vbt_header *vbt = NULL; const struct vbt_header *vbt = NULL;
intel_wakeref_t wakeref; intel_wakeref_t wakeref;
vbt = firmware_get_vbt(i915, sizep); vbt = firmware_get_vbt(i915, sizep);
if (!vbt) 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 * If the OpRegion does not have VBT, look in SPI flash
...@@ -3378,6 +3381,7 @@ bool intel_bios_is_tv_present(struct drm_i915_private *i915) ...@@ -3378,6 +3381,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) 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; const struct intel_bios_encoder_data *devdata;
if (list_empty(&i915->display.vbt.display_devices)) if (list_empty(&i915->display.vbt.display_devices))
...@@ -3410,7 +3414,7 @@ bool intel_bios_is_lvds_present(struct drm_i915_private *i915, u8 *i2c_pin) ...@@ -3410,7 +3414,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 * additional data. Trust that if the VBT was written into
* the OpRegion then they have validated the LVDS's existence. * the OpRegion then they have validated the LVDS's existence.
*/ */
return intel_opregion_vbt_present(i915); return intel_opregion_vbt_present(display);
} }
return false; return false;
......
...@@ -1049,6 +1049,7 @@ static const struct { ...@@ -1049,6 +1049,7 @@ static const struct {
void intel_display_debugfs_register(struct drm_i915_private *i915) void intel_display_debugfs_register(struct drm_i915_private *i915)
{ {
struct intel_display *display = &i915->display;
struct drm_minor *minor = i915->drm.primary; struct drm_minor *minor = i915->drm.primary;
int i; int i;
...@@ -1067,9 +1068,9 @@ void intel_display_debugfs_register(struct drm_i915_private *i915) ...@@ -1067,9 +1068,9 @@ void intel_display_debugfs_register(struct drm_i915_private *i915)
intel_bios_debugfs_register(i915); intel_bios_debugfs_register(i915);
intel_cdclk_debugfs_register(i915); intel_cdclk_debugfs_register(i915);
intel_dmc_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_hpd_debugfs_register(i915);
intel_opregion_debugfs_register(i915); intel_opregion_debugfs_register(display);
intel_psr_debugfs_register(i915); intel_psr_debugfs_register(i915);
intel_wm_debugfs_register(i915); intel_wm_debugfs_register(i915);
intel_display_debugfs_params(i915); intel_display_debugfs_params(i915);
......
...@@ -1529,9 +1529,11 @@ void intel_display_device_info_print(const struct intel_display_device_info *inf ...@@ -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) bool intel_display_device_enabled(struct drm_i915_private *i915)
{ {
struct intel_display *display = &i915->display;
/* Only valid when HAS_DISPLAY() is true */ /* 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 && return !display->params.disable_display &&
!intel_opregion_headless_sku(i915); !intel_opregion_headless_sku(display);
} }
...@@ -535,7 +535,7 @@ void intel_display_driver_register(struct drm_i915_private *i915) ...@@ -535,7 +535,7 @@ void intel_display_driver_register(struct drm_i915_private *i915)
return; return;
/* Must be done after probing outputs */ /* Must be done after probing outputs */
intel_opregion_register(i915); intel_opregion_register(display);
intel_acpi_video_register(display); intel_acpi_video_register(display);
intel_audio_init(i915); intel_audio_init(i915);
...@@ -626,6 +626,8 @@ void intel_display_driver_remove_nogem(struct drm_i915_private *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) void intel_display_driver_unregister(struct drm_i915_private *i915)
{ {
struct intel_display *display = &i915->display;
if (!HAS_DISPLAY(i915)) if (!HAS_DISPLAY(i915))
return; return;
...@@ -645,7 +647,7 @@ void intel_display_driver_unregister(struct drm_i915_private *i915) ...@@ -645,7 +647,7 @@ void intel_display_driver_unregister(struct drm_i915_private *i915)
drm_atomic_helper_shutdown(&i915->drm); drm_atomic_helper_shutdown(&i915->drm);
acpi_video_unregister(); acpi_video_unregister();
intel_opregion_unregister(i915); intel_opregion_unregister(display);
} }
/* /*
......
...@@ -270,10 +270,12 @@ void i915_disable_pipestat(struct drm_i915_private *dev_priv, ...@@ -270,10 +270,12 @@ void i915_disable_pipestat(struct drm_i915_private *dev_priv,
static bool i915_has_asle(struct drm_i915_private *i915) static bool i915_has_asle(struct drm_i915_private *i915)
{ {
struct intel_display *display = &i915->display;
if (!IS_PINEVIEW(i915) && !IS_MOBILE(i915)) if (!IS_PINEVIEW(i915) && !IS_MOBILE(i915))
return false; 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, ...@@ -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, void i915_pipestat_irq_handler(struct drm_i915_private *dev_priv,
u32 iir, u32 pipe_stats[I915_MAX_PIPES]) u32 iir, u32 pipe_stats[I915_MAX_PIPES])
{ {
struct intel_display *display = &dev_priv->display;
bool blc_event = false; bool blc_event = false;
enum pipe pipe; enum pipe pipe;
...@@ -515,12 +519,13 @@ void i915_pipestat_irq_handler(struct drm_i915_private *dev_priv, ...@@ -515,12 +519,13 @@ void i915_pipestat_irq_handler(struct drm_i915_private *dev_priv,
} }
if (blc_event || (iir & I915_ASLE_INTERRUPT)) 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, void i965_pipestat_irq_handler(struct drm_i915_private *dev_priv,
u32 iir, u32 pipe_stats[I915_MAX_PIPES]) u32 iir, u32 pipe_stats[I915_MAX_PIPES])
{ {
struct intel_display *display = &dev_priv->display;
bool blc_event = false; bool blc_event = false;
enum pipe pipe; enum pipe pipe;
...@@ -539,7 +544,7 @@ void i965_pipestat_irq_handler(struct drm_i915_private *dev_priv, ...@@ -539,7 +544,7 @@ void i965_pipestat_irq_handler(struct drm_i915_private *dev_priv,
} }
if (blc_event || (iir & I915_ASLE_INTERRUPT)) 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) if (pipe_stats[0] & PIPE_GMBUS_INTERRUPT_STATUS)
intel_gmbus_irq_handler(dev_priv); intel_gmbus_irq_handler(dev_priv);
...@@ -695,6 +700,7 @@ static void cpt_irq_handler(struct drm_i915_private *dev_priv, u32 pch_iir) ...@@ -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) void ilk_display_irq_handler(struct drm_i915_private *dev_priv, u32 de_iir)
{ {
struct intel_display *display = &dev_priv->display;
enum pipe pipe; enum pipe pipe;
u32 hotplug_trigger = de_iir & DE_DP_A_HOTPLUG; 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) ...@@ -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); intel_dp_aux_irq_handler(dev_priv);
if (de_iir & DE_GSE) if (de_iir & DE_GSE)
intel_opregion_asle_intr(dev_priv); intel_opregion_asle_intr(display);
if (de_iir & DE_POISON) if (de_iir & DE_POISON)
drm_err(&dev_priv->drm, "Poison interrupt\n"); 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) ...@@ -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) void ivb_display_irq_handler(struct drm_i915_private *dev_priv, u32 de_iir)
{ {
struct intel_display *display = &dev_priv->display;
enum pipe pipe; enum pipe pipe;
u32 hotplug_trigger = de_iir & DE_DP_A_HOTPLUG_IVB; 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) ...@@ -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); intel_dp_aux_irq_handler(dev_priv);
if (de_iir & DE_GSE_IVB) if (de_iir & DE_GSE_IVB)
intel_opregion_asle_intr(dev_priv); intel_opregion_asle_intr(display);
for_each_pipe(dev_priv, pipe) { for_each_pipe(dev_priv, pipe) {
if (de_iir & DE_PIPE_VBLANK_IVB(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) ...@@ -894,6 +901,7 @@ static void intel_pmdemand_irq_handler(struct drm_i915_private *dev_priv)
static void static void
gen8_de_misc_irq_handler(struct drm_i915_private *dev_priv, u32 iir) gen8_de_misc_irq_handler(struct drm_i915_private *dev_priv, u32 iir)
{ {
struct intel_display *display = &dev_priv->display;
bool found = false; bool found = false;
if (DISPLAY_VER(dev_priv) >= 14) { if (DISPLAY_VER(dev_priv) >= 14) {
...@@ -914,7 +922,7 @@ gen8_de_misc_irq_handler(struct drm_i915_private *dev_priv, u32 iir) ...@@ -914,7 +922,7 @@ gen8_de_misc_irq_handler(struct drm_i915_private *dev_priv, u32 iir)
found = true; found = true;
} }
} else if (iir & GEN8_DE_MISC_GSE) { } else if (iir & GEN8_DE_MISC_GSE) {
intel_opregion_asle_intr(dev_priv); intel_opregion_asle_intr(display);
found = true; found = true;
} }
...@@ -1218,8 +1226,10 @@ u32 gen11_gu_misc_irq_ack(struct drm_i915_private *i915, const u32 master_ctl) ...@@ -1218,8 +1226,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) 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) 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) void gen11_display_irq_handler(struct drm_i915_private *i915)
......
...@@ -252,7 +252,7 @@ struct opregion_asle_ext { ...@@ -252,7 +252,7 @@ struct opregion_asle_ext {
#define OPREGION_SIZE (8 * 1024) #define OPREGION_SIZE (8 * 1024)
struct intel_opregion { struct intel_opregion {
struct drm_i915_private *i915; struct intel_display *display;
struct opregion_header *header; struct opregion_header *header;
struct opregion_acpi *acpi; struct opregion_acpi *acpi;
...@@ -268,9 +268,9 @@ struct intel_opregion { ...@@ -268,9 +268,9 @@ struct intel_opregion {
struct notifier_block acpi_notifier; 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; struct opregion_swsci *swsci;
u32 main_function, sub_function; u32 main_function, sub_function;
...@@ -300,20 +300,20 @@ static int check_swsci_function(struct drm_i915_private *i915, u32 function) ...@@ -300,20 +300,20 @@ static int check_swsci_function(struct drm_i915_private *i915, u32 function)
return 0; 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) u32 function, u32 parm, u32 *parm_out)
{ {
struct opregion_swsci *swsci; 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; u32 scic, dslp;
u16 swsci_val; u16 swsci_val;
int ret; int ret;
ret = check_swsci_function(dev_priv, function); ret = check_swsci_function(display, function);
if (ret) if (ret)
return ret; return ret;
swsci = dev_priv->display.opregion->swsci; swsci = display->opregion->swsci;
/* Driver sleep timeout in ms. */ /* Driver sleep timeout in ms. */
dslp = swsci->dslp; dslp = swsci->dslp;
...@@ -331,7 +331,7 @@ static int swsci(struct drm_i915_private *dev_priv, ...@@ -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... */ /* The spec tells us to do this, but we are the only user... */
scic = swsci->scic; scic = swsci->scic;
if (scic & SWSCI_SCIC_INDICATOR) { 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; return -EBUSY;
} }
...@@ -355,7 +355,7 @@ static int swsci(struct drm_i915_private *dev_priv, ...@@ -355,7 +355,7 @@ static int swsci(struct drm_i915_private *dev_priv,
/* Poll for the result. */ /* Poll for the result. */
#define C (((scic = swsci->scic) & SWSCI_SCIC_INDICATOR) == 0) #define C (((scic = swsci->scic) & SWSCI_SCIC_INDICATOR) == 0)
if (wait_for(C, dslp)) { 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; return -ETIMEDOUT;
} }
...@@ -364,7 +364,7 @@ static int swsci(struct drm_i915_private *dev_priv, ...@@ -364,7 +364,7 @@ static int swsci(struct drm_i915_private *dev_priv,
/* Note: scic == 0 is an error! */ /* Note: scic == 0 is an error! */
if (scic != SWSCI_SCIC_EXIT_STATUS_SUCCESS) { 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; return -EIO;
} }
...@@ -384,18 +384,18 @@ static int swsci(struct drm_i915_private *dev_priv, ...@@ -384,18 +384,18 @@ static int swsci(struct drm_i915_private *dev_priv,
int intel_opregion_notify_encoder(struct intel_encoder *encoder, int intel_opregion_notify_encoder(struct intel_encoder *encoder,
bool enable) bool enable)
{ {
struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); struct intel_display *display = to_intel_display(encoder);
u32 parm = 0; u32 parm = 0;
u32 type = 0; u32 type = 0;
u32 port; u32 port;
int ret; int ret;
/* don't care about old stuff for now */ /* don't care about old stuff for now */
if (!HAS_DDI(dev_priv)) if (!HAS_DDI(display))
return 0; return 0;
/* Avoid port out of bounds checks if SWSCI isn't there. */ /* 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) if (ret)
return ret; return ret;
...@@ -419,7 +419,7 @@ int intel_opregion_notify_encoder(struct intel_encoder *encoder, ...@@ -419,7 +419,7 @@ int intel_opregion_notify_encoder(struct intel_encoder *encoder,
* number is out of bounds after mapping. * number is out of bounds after mapping.
*/ */
if (port > 4) { 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:%d:%s] port %c (index %u) out of bounds for display power state notification\n",
encoder->base.base.id, encoder->base.name, encoder->base.base.id, encoder->base.name,
port_name(encoder->port), port); port_name(encoder->port), port);
...@@ -444,7 +444,7 @@ int intel_opregion_notify_encoder(struct intel_encoder *encoder, ...@@ -444,7 +444,7 @@ int intel_opregion_notify_encoder(struct intel_encoder *encoder,
type = DISPLAY_TYPE_INTERNAL_FLAT_PANEL; type = DISPLAY_TYPE_INTERNAL_FLAT_PANEL;
break; break;
default: default:
drm_WARN_ONCE(&dev_priv->drm, 1, drm_WARN_ONCE(display->drm, 1,
"unsupported intel_encoder type %d\n", "unsupported intel_encoder type %d\n",
encoder->type); encoder->type);
return -EINVAL; return -EINVAL;
...@@ -452,7 +452,7 @@ int intel_opregion_notify_encoder(struct intel_encoder *encoder, ...@@ -452,7 +452,7 @@ int intel_opregion_notify_encoder(struct intel_encoder *encoder,
parm |= type << (16 + port * 3); 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 { static const struct {
...@@ -466,33 +466,33 @@ static const struct { ...@@ -466,33 +466,33 @@ static const struct {
{ PCI_D3cold, 0x04 }, { 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) pci_power_t state)
{ {
int i; int i;
if (!HAS_DDI(dev_priv)) if (!HAS_DDI(display))
return 0; return 0;
for (i = 0; i < ARRAY_SIZE(power_state_map); i++) { for (i = 0; i < ARRAY_SIZE(power_state_map); i++) {
if (state == power_state_map[i].pci_power_state) 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); power_state_map[i].parm, NULL);
} }
return -EINVAL; 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 intel_connector *connector;
struct drm_connector_list_iter conn_iter; 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) { 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"); "opregion backlight request ignored\n");
return 0; return 0;
} }
...@@ -504,104 +504,104 @@ static u32 asle_set_backlight(struct drm_i915_private *dev_priv, u32 bclp) ...@@ -504,104 +504,104 @@ static u32 asle_set_backlight(struct drm_i915_private *dev_priv, u32 bclp)
if (bclp > 255) if (bclp > 255)
return ASLC_BACKLIGHT_FAILED; 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 * Update backlight on all connectors that support backlight (usually
* only one). * 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); 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) for_each_intel_connector_iter(connector, &conn_iter)
intel_backlight_set_acpi(connector->base.state, bclp, 255); intel_backlight_set_acpi(connector->base.state, bclp, 255);
drm_connector_list_iter_end(&conn_iter); drm_connector_list_iter_end(&conn_iter);
asle->cblv = DIV_ROUND_UP(bclp * 100, 255) | ASLE_CBLV_VALID; 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; 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 /* alsi is the current ALS reading in lux. 0 indicates below sensor
range, 0xffff indicates above sensor range. 1-0xfffe are valid */ 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; 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; 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 /* Panel fitting is currently controlled by the X code, so this is a
noop until modesetting support works fully */ 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; 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; 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) if (!iuer)
drm_dbg(&dev_priv->drm, drm_dbg(display->drm,
"Button array event is not supported (nothing)\n"); "Button array event is not supported (nothing)\n");
if (iuer & ASLE_IUER_ROTATION_LOCK_BTN) 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"); "Button array event is not supported (rotation lock)\n");
if (iuer & ASLE_IUER_VOLUME_DOWN_BTN) 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"); "Button array event is not supported (volume down)\n");
if (iuer & ASLE_IUER_VOLUME_UP_BTN) 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"); "Button array event is not supported (volume up)\n");
if (iuer & ASLE_IUER_WINDOWS_BTN) if (iuer & ASLE_IUER_WINDOWS_BTN)
drm_dbg(&dev_priv->drm, drm_dbg(display->drm,
"Button array event is not supported (windows)\n"); "Button array event is not supported (windows)\n");
if (iuer & ASLE_IUER_POWER_BTN) if (iuer & ASLE_IUER_POWER_BTN)
drm_dbg(&dev_priv->drm, drm_dbg(display->drm,
"Button array event is not supported (power)\n"); "Button array event is not supported (power)\n");
return ASLC_BUTTON_ARRAY_FAILED; 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) if (iuer & ASLE_IUER_CONVERTIBLE)
drm_dbg(&dev_priv->drm, drm_dbg(display->drm,
"Convertible is not supported (clamshell)\n"); "Convertible is not supported (clamshell)\n");
else else
drm_dbg(&dev_priv->drm, drm_dbg(display->drm,
"Convertible is not supported (slate)\n"); "Convertible is not supported (slate)\n");
return ASLC_CONVERTIBLE_FAILED; 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) 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 else
drm_dbg(&dev_priv->drm, drm_dbg(display->drm,
"Docking is not supported (undocked)\n"); "Docking is not supported (undocked)\n");
return ASLC_DOCKING_FAILED; 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; return ASLC_ISCT_STATE_FAILED;
} }
...@@ -609,7 +609,7 @@ static void asle_work(struct work_struct *work) ...@@ -609,7 +609,7 @@ static void asle_work(struct work_struct *work)
{ {
struct intel_opregion *opregion = struct intel_opregion *opregion =
container_of(work, struct intel_opregion, asle_work); 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; struct opregion_asle *asle = opregion->asle;
u32 aslc_stat = 0; u32 aslc_stat = 0;
u32 aslc_req; u32 aslc_req;
...@@ -620,50 +620,51 @@ static void asle_work(struct work_struct *work) ...@@ -620,50 +620,51 @@ static void asle_work(struct work_struct *work)
aslc_req = asle->aslc; aslc_req = asle->aslc;
if (!(aslc_req & ASLC_REQ_MSK)) { 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); "No request on ASLC interrupt 0x%08x\n", aslc_req);
return; return;
} }
if (aslc_req & ASLC_SET_ALS_ILLUM) 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) 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) 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) 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) 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); asle->srot);
if (aslc_req & ASLC_BUTTON_ARRAY) 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) 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) 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) if (aslc_req & ASLC_ISCT_STATE_CHANGE)
aslc_stat |= asle_isct_state(dev_priv); aslc_stat |= asle_isct_state(display);
asle->aslc = aslc_stat; 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) if (opregion && opregion->asle)
queue_work(i915->unordered_wq, &opregion->asle_work); queue_work(i915->unordered_wq, &opregion->asle_work);
...@@ -720,9 +721,8 @@ static void set_did(struct intel_opregion *opregion, int i, u32 val) ...@@ -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_opregion *opregion = display->opregion;
struct intel_connector *connector; struct intel_connector *connector;
struct drm_connector_list_iter conn_iter; struct drm_connector_list_iter conn_iter;
...@@ -740,7 +740,7 @@ static void intel_didl_outputs(struct drm_i915_private *dev_priv) ...@@ -740,7 +740,7 @@ static void intel_didl_outputs(struct drm_i915_private *dev_priv)
intel_acpi_device_id_update(display); 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) { for_each_intel_connector_iter(connector, &conn_iter) {
if (i < max_outputs) if (i < max_outputs)
set_did(opregion, i, connector->acpi_device_id); set_did(opregion, i, connector->acpi_device_id);
...@@ -748,10 +748,10 @@ static void intel_didl_outputs(struct drm_i915_private *dev_priv) ...@@ -748,10 +748,10 @@ static void intel_didl_outputs(struct drm_i915_private *dev_priv)
} }
drm_connector_list_iter_end(&conn_iter); 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) if (i > max_outputs)
drm_err(&dev_priv->drm, drm_err(display->drm,
"More than %d outputs in connector list\n", "More than %d outputs in connector list\n",
max_outputs); max_outputs);
...@@ -760,9 +760,9 @@ static void intel_didl_outputs(struct drm_i915_private *dev_priv) ...@@ -760,9 +760,9 @@ static void intel_didl_outputs(struct drm_i915_private *dev_priv)
set_did(opregion, i, 0); 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 intel_connector *connector;
struct drm_connector_list_iter conn_iter; struct drm_connector_list_iter conn_iter;
int i = 0; int i = 0;
...@@ -777,7 +777,7 @@ static void intel_setup_cadls(struct drm_i915_private *dev_priv) ...@@ -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 * Note that internal panels should be at the front of the connector
* list already, ensuring they're not left out. * 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) { for_each_intel_connector_iter(connector, &conn_iter) {
if (i >= ARRAY_SIZE(opregion->acpi->cadl)) if (i >= ARRAY_SIZE(opregion->acpi->cadl))
break; break;
...@@ -790,9 +790,9 @@ static void intel_setup_cadls(struct drm_i915_private *dev_priv) ...@@ -790,9 +790,9 @@ static void intel_setup_cadls(struct drm_i915_private *dev_priv)
opregion->acpi->cadl[i] = 0; 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; bool requested_callbacks = false;
u32 tmp; u32 tmp;
...@@ -801,7 +801,7 @@ static void swsci_setup(struct drm_i915_private *dev_priv) ...@@ -801,7 +801,7 @@ static void swsci_setup(struct drm_i915_private *dev_priv)
opregion->swsci_sbcb_sub_functions = 1; opregion->swsci_sbcb_sub_functions = 1;
/* We use GBDA to ask for supported GBDA calls. */ /* 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 */ /* make the bits match the sub-function codes */
tmp <<= 1; tmp <<= 1;
opregion->swsci_gbda_sub_functions |= tmp; opregion->swsci_gbda_sub_functions |= tmp;
...@@ -812,7 +812,7 @@ static void swsci_setup(struct drm_i915_private *dev_priv) ...@@ -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 * must not call interfaces that are not specifically requested by the
* bios. * 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 */ /* here, the bits already match sub-function codes */
opregion->swsci_sbcb_sub_functions |= tmp; opregion->swsci_sbcb_sub_functions |= tmp;
requested_callbacks = true; requested_callbacks = true;
...@@ -823,7 +823,7 @@ static void swsci_setup(struct drm_i915_private *dev_priv) ...@@ -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 * the callback is _requested_. But we still can't call interfaces that
* are not requested. * 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 */ /* make the bits match the sub-function codes */
u32 low = tmp & 0x7ff; u32 low = tmp & 0x7ff;
u32 high = tmp & ~0xfff; /* bit 11 is reserved */ u32 high = tmp & ~0xfff; /* bit 11 is reserved */
...@@ -833,7 +833,7 @@ static void swsci_setup(struct drm_i915_private *dev_priv) ...@@ -833,7 +833,7 @@ static void swsci_setup(struct drm_i915_private *dev_priv)
if (requested_callbacks) { if (requested_callbacks) {
u32 req = opregion->swsci_sbcb_sub_functions; u32 req = opregion->swsci_sbcb_sub_functions;
if ((req & tmp) != req) 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", "SWSCI BIOS requested (%08x) SBCB callbacks that are not supported (%08x)\n",
req, tmp); req, tmp);
/* XXX: for now, trust the requested callbacks */ /* XXX: for now, trust the requested callbacks */
...@@ -843,7 +843,7 @@ static void swsci_setup(struct drm_i915_private *dev_priv) ...@@ -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", "SWSCI GBDA callbacks %08x, SBCB callbacks %08x\n",
opregion->swsci_gbda_sub_functions, opregion->swsci_gbda_sub_functions,
opregion->swsci_sbcb_sub_functions); opregion->swsci_sbcb_sub_functions);
...@@ -868,10 +868,11 @@ static const struct dmi_system_id intel_no_opregion_vbt[] = { ...@@ -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 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; u32 asls, mboxes;
char buf[sizeof(OPREGION_SIGNATURE)]; char buf[sizeof(OPREGION_SIGNATURE)];
int err = 0; int err = 0;
...@@ -886,10 +887,10 @@ int intel_opregion_setup(struct drm_i915_private *dev_priv) ...@@ -886,10 +887,10 @@ int intel_opregion_setup(struct drm_i915_private *dev_priv)
BUILD_BUG_ON(sizeof(struct opregion_asle_ext) != 0x400); BUILD_BUG_ON(sizeof(struct opregion_asle_ext) != 0x400);
pci_read_config_dword(pdev, ASLS, &asls); 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); asls);
if (asls == 0) { if (asls == 0) {
drm_dbg(&dev_priv->drm, "ACPI OpRegion not supported!\n"); drm_dbg(display->drm, "ACPI OpRegion not supported!\n");
return -ENOTSUPP; return -ENOTSUPP;
} }
...@@ -897,8 +898,8 @@ int intel_opregion_setup(struct drm_i915_private *dev_priv) ...@@ -897,8 +898,8 @@ int intel_opregion_setup(struct drm_i915_private *dev_priv)
if (!opregion) if (!opregion)
return -ENOMEM; return -ENOMEM;
opregion->i915 = dev_priv; opregion->display = display;
dev_priv->display.opregion = opregion; display->opregion = opregion;
INIT_WORK(&opregion->asle_work, asle_work); INIT_WORK(&opregion->asle_work, asle_work);
...@@ -911,20 +912,20 @@ int intel_opregion_setup(struct drm_i915_private *dev_priv) ...@@ -911,20 +912,20 @@ int intel_opregion_setup(struct drm_i915_private *dev_priv)
memcpy(buf, base, sizeof(buf)); memcpy(buf, base, sizeof(buf));
if (memcmp(buf, OPREGION_SIGNATURE, 16)) { 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; err = -EINVAL;
goto err_out; goto err_out;
} }
opregion->header = base; 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.major,
opregion->header->over.minor, opregion->header->over.minor,
opregion->header->over.revision); opregion->header->over.revision);
mboxes = opregion->header->mboxes; mboxes = opregion->header->mboxes;
if (mboxes & MBOX_ACPI) { 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; opregion->acpi = base + OPREGION_ACPI_OFFSET;
/* /*
* Indicate we handle monitor hotplug events ourselves so we do * Indicate we handle monitor hotplug events ourselves so we do
...@@ -939,30 +940,30 @@ int intel_opregion_setup(struct drm_i915_private *dev_priv) ...@@ -939,30 +940,30 @@ int intel_opregion_setup(struct drm_i915_private *dev_priv)
u8 major = opregion->header->over.major; u8 major = opregion->header->over.major;
if (major >= 3) { 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 { } else {
if (major >= 2) if (major >= 2)
drm_dbg(&dev_priv->drm, "SWSCI Mailbox #2 present for opregion v2.x\n"); drm_dbg(display->drm, "SWSCI Mailbox #2 present for opregion v2.x\n");
drm_dbg(&dev_priv->drm, "SWSCI supported\n"); drm_dbg(display->drm, "SWSCI supported\n");
opregion->swsci = base + OPREGION_SWSCI_OFFSET; opregion->swsci = base + OPREGION_SWSCI_OFFSET;
swsci_setup(dev_priv); swsci_setup(display);
} }
} }
if (mboxes & MBOX_ASLE) { 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 = base + OPREGION_ASLE_OFFSET;
opregion->asle->ardy = ASLE_ARDY_NOT_READY; opregion->asle->ardy = ASLE_ARDY_NOT_READY;
} }
if (mboxes & MBOX_ASLE_EXT) { 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; opregion->asle_ext = base + OPREGION_ASLE_EXT_OFFSET;
} }
if (mboxes & MBOX_BACKLIGHT) { 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)) if (dmi_check_system(intel_no_opregion_vbt))
...@@ -980,7 +981,7 @@ int intel_opregion_setup(struct drm_i915_private *dev_priv) ...@@ -980,7 +981,7 @@ int intel_opregion_setup(struct drm_i915_private *dev_priv)
*/ */
if (opregion->header->over.major > 2 || if (opregion->header->over.major > 2 ||
opregion->header->over.minor >= 1) { opregion->header->over.minor >= 1) {
drm_WARN_ON(&dev_priv->drm, rvda < OPREGION_SIZE); drm_WARN_ON(display->drm, rvda < OPREGION_SIZE);
rvda += asls; rvda += asls;
} }
...@@ -990,14 +991,14 @@ int intel_opregion_setup(struct drm_i915_private *dev_priv) ...@@ -990,14 +991,14 @@ int intel_opregion_setup(struct drm_i915_private *dev_priv)
vbt = opregion->rvda; vbt = opregion->rvda;
vbt_size = opregion->asle->rvds; vbt_size = opregion->asle->rvds;
if (intel_bios_is_valid_vbt(dev_priv, vbt, vbt_size)) { if (intel_bios_is_valid_vbt(i915, vbt, vbt_size)) {
drm_dbg_kms(&dev_priv->drm, drm_dbg_kms(display->drm,
"Found valid VBT in ACPI OpRegion (RVDA)\n"); "Found valid VBT in ACPI OpRegion (RVDA)\n");
opregion->vbt = vbt; opregion->vbt = vbt;
opregion->vbt_size = vbt_size; opregion->vbt_size = vbt_size;
goto out; goto out;
} else { } else {
drm_dbg_kms(&dev_priv->drm, drm_dbg_kms(display->drm,
"Invalid VBT in ACPI OpRegion (RVDA)\n"); "Invalid VBT in ACPI OpRegion (RVDA)\n");
memunmap(opregion->rvda); memunmap(opregion->rvda);
opregion->rvda = NULL; opregion->rvda = NULL;
...@@ -1015,13 +1016,13 @@ int intel_opregion_setup(struct drm_i915_private *dev_priv) ...@@ -1015,13 +1016,13 @@ int intel_opregion_setup(struct drm_i915_private *dev_priv)
vbt_size = (mboxes & MBOX_ASLE_EXT) ? vbt_size = (mboxes & MBOX_ASLE_EXT) ?
OPREGION_ASLE_EXT_OFFSET : OPREGION_SIZE; OPREGION_ASLE_EXT_OFFSET : OPREGION_SIZE;
vbt_size -= OPREGION_VBT_OFFSET; vbt_size -= OPREGION_VBT_OFFSET;
if (intel_bios_is_valid_vbt(dev_priv, vbt, vbt_size)) { if (intel_bios_is_valid_vbt(i915, vbt, vbt_size)) {
drm_dbg_kms(&dev_priv->drm, drm_dbg_kms(display->drm,
"Found valid VBT in ACPI OpRegion (Mailbox #4)\n"); "Found valid VBT in ACPI OpRegion (Mailbox #4)\n");
opregion->vbt = vbt; opregion->vbt = vbt;
opregion->vbt_size = vbt_size; opregion->vbt_size = vbt_size;
} else { } else {
drm_dbg_kms(&dev_priv->drm, drm_dbg_kms(display->drm,
"Invalid VBT in ACPI OpRegion (Mailbox #4)\n"); "Invalid VBT in ACPI OpRegion (Mailbox #4)\n");
} }
...@@ -1032,7 +1033,7 @@ int intel_opregion_setup(struct drm_i915_private *dev_priv) ...@@ -1032,7 +1033,7 @@ int intel_opregion_setup(struct drm_i915_private *dev_priv)
memunmap(base); memunmap(base);
err_memremap: err_memremap:
kfree(opregion); kfree(opregion);
dev_priv->display.opregion = NULL; display->opregion = NULL;
return err; return err;
} }
...@@ -1055,25 +1056,25 @@ static const struct dmi_system_id intel_use_opregion_panel_type[] = { ...@@ -1055,25 +1056,25 @@ static const struct dmi_system_id intel_use_opregion_panel_type[] = {
}; };
int int
intel_opregion_get_panel_type(struct drm_i915_private *dev_priv) intel_opregion_get_panel_type(struct intel_display *display)
{ {
u32 panel_details; u32 panel_details;
int ret; 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) if (ret)
return ret; return ret;
ret = (panel_details >> 8) & 0xff; ret = (panel_details >> 8) & 0xff;
if (ret > 0x10) { if (ret > 0x10) {
drm_dbg_kms(&dev_priv->drm, drm_dbg_kms(display->drm,
"Invalid OpRegion panel type 0x%x\n", ret); "Invalid OpRegion panel type 0x%x\n", ret);
return -EINVAL; return -EINVAL;
} }
/* fall back to VBT panel type? */ /* fall back to VBT panel type? */
if (ret == 0x0) { 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; return -ENODEV;
} }
...@@ -1083,7 +1084,7 @@ intel_opregion_get_panel_type(struct drm_i915_private *dev_priv) ...@@ -1083,7 +1084,7 @@ intel_opregion_get_panel_type(struct drm_i915_private *dev_priv)
* via a quirk list :( * via a quirk list :(
*/ */
if (!dmi_check_system(intel_use_opregion_panel_type)) { 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); "Ignoring OpRegion panel type (%d)\n", ret - 1);
return -ENODEV; return -ENODEV;
} }
...@@ -1104,8 +1105,8 @@ intel_opregion_get_panel_type(struct drm_i915_private *dev_priv) ...@@ -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) const struct drm_edid *intel_opregion_get_edid(struct intel_connector *connector)
{ {
struct drm_i915_private *i915 = to_i915(connector->base.dev); struct intel_display *display = to_intel_display(connector);
struct intel_opregion *opregion = i915->display.opregion; struct intel_opregion *opregion = display->opregion;
const struct drm_edid *drm_edid; const struct drm_edid *drm_edid;
const void *edid; const void *edid;
int len; int len;
...@@ -1123,7 +1124,7 @@ const struct drm_edid *intel_opregion_get_edid(struct intel_connector *connector ...@@ -1123,7 +1124,7 @@ const struct drm_edid *intel_opregion_get_edid(struct intel_connector *connector
drm_edid = drm_edid_alloc(edid, len); drm_edid = drm_edid_alloc(edid, len);
if (!drm_edid_valid(drm_edid)) { 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_free(drm_edid);
drm_edid = NULL; drm_edid = NULL;
} }
...@@ -1131,9 +1132,9 @@ const struct drm_edid *intel_opregion_get_edid(struct intel_connector *connector ...@@ -1131,9 +1132,9 @@ const struct drm_edid *intel_opregion_get_edid(struct intel_connector *connector
return drm_edid; 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) if (!opregion || !opregion->vbt)
return false; return false;
...@@ -1141,9 +1142,9 @@ bool intel_opregion_vbt_present(struct drm_i915_private *i915) ...@@ -1141,9 +1142,9 @@ bool intel_opregion_vbt_present(struct drm_i915_private *i915)
return true; 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) if (!opregion || !opregion->vbt)
return NULL; return NULL;
...@@ -1154,9 +1155,9 @@ const void *intel_opregion_get_vbt(struct drm_i915_private *i915, size_t *size) ...@@ -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); 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; struct opregion_header *header;
if (!opregion) if (!opregion)
...@@ -1171,9 +1172,9 @@ bool intel_opregion_headless_sku(struct drm_i915_private *i915) ...@@ -1171,9 +1172,9 @@ bool intel_opregion_headless_sku(struct drm_i915_private *i915)
return opregion->header->pcon & PCON_HEADLESS_SKU; 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) if (!opregion)
return; return;
...@@ -1184,17 +1185,16 @@ void intel_opregion_register(struct drm_i915_private *i915) ...@@ -1184,17 +1185,16 @@ void intel_opregion_register(struct drm_i915_private *i915)
register_acpi_notifier(&opregion->acpi_notifier); 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; struct intel_opregion *opregion = display->opregion;
if (opregion->acpi) { if (opregion->acpi) {
intel_didl_outputs(i915); intel_didl_outputs(display);
intel_setup_cadls(i915); intel_setup_cadls(display);
/* /*
* Notify BIOS we are ready to handle ACPI video ext notifs. * 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) ...@@ -1214,22 +1214,22 @@ static void intel_opregion_resume_display(struct drm_i915_private *i915)
intel_dsm_get_bios_data_funcs_supported(display); 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) if (!opregion)
return; return;
if (HAS_DISPLAY(i915)) if (HAS_DISPLAY(display))
intel_opregion_resume_display(i915); 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) if (opregion->asle)
opregion->asle->ardy = ASLE_ARDY_NOT_READY; opregion->asle->ardy = ASLE_ARDY_NOT_READY;
...@@ -1240,24 +1240,24 @@ static void intel_opregion_suspend_display(struct drm_i915_private *i915) ...@@ -1240,24 +1240,24 @@ static void intel_opregion_suspend_display(struct drm_i915_private *i915)
opregion->acpi->drdy = 0; 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) if (!opregion)
return; return;
intel_opregion_notify_adapter(i915, state); intel_opregion_notify_adapter(display, state);
if (HAS_DISPLAY(i915)) if (HAS_DISPLAY(display))
intel_opregion_suspend_display(i915); 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) if (!opregion)
return; return;
...@@ -1268,9 +1268,9 @@ void intel_opregion_unregister(struct drm_i915_private *i915) ...@@ -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) if (!opregion)
return; return;
...@@ -1279,13 +1279,13 @@ void intel_opregion_cleanup(struct drm_i915_private *i915) ...@@ -1279,13 +1279,13 @@ void intel_opregion_cleanup(struct drm_i915_private *i915)
if (opregion->rvda) if (opregion->rvda)
memunmap(opregion->rvda); memunmap(opregion->rvda);
kfree(opregion); kfree(opregion);
i915->display.opregion = NULL; display->opregion = NULL;
} }
static int intel_opregion_show(struct seq_file *m, void *unused) static int intel_opregion_show(struct seq_file *m, void *unused)
{ {
struct drm_i915_private *i915 = m->private; struct intel_display *display = m->private;
struct intel_opregion *opregion = i915->display.opregion; struct intel_opregion *opregion = display->opregion;
if (opregion) if (opregion)
seq_write(m, opregion->header, OPREGION_SIZE); seq_write(m, opregion->header, OPREGION_SIZE);
...@@ -1295,10 +1295,10 @@ static int intel_opregion_show(struct seq_file *m, void *unused) ...@@ -1295,10 +1295,10 @@ static int intel_opregion_show(struct seq_file *m, void *unused)
DEFINE_SHOW_ATTRIBUTE(intel_opregion); 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, debugfs_create_file("i915_opregion", 0444, minor->debugfs_root,
i915, &intel_opregion_fops); display, &intel_opregion_fops);
} }
...@@ -28,72 +28,72 @@ ...@@ -28,72 +28,72 @@
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/types.h> #include <linux/types.h>
struct drm_i915_private;
struct intel_connector; struct intel_connector;
struct intel_display;
struct intel_encoder; struct intel_encoder;
#ifdef CONFIG_ACPI #ifdef CONFIG_ACPI
int intel_opregion_setup(struct drm_i915_private *dev_priv); int intel_opregion_setup(struct intel_display *display);
void intel_opregion_cleanup(struct drm_i915_private *i915); void intel_opregion_cleanup(struct intel_display *display);
void intel_opregion_register(struct drm_i915_private *dev_priv); void intel_opregion_register(struct intel_display *display);
void intel_opregion_unregister(struct drm_i915_private *dev_priv); void intel_opregion_unregister(struct intel_display *display);
void intel_opregion_resume(struct drm_i915_private *dev_priv); void intel_opregion_resume(struct intel_display *display);
void intel_opregion_suspend(struct drm_i915_private *dev_priv, void intel_opregion_suspend(struct intel_display *display,
pci_power_t state); pci_power_t state);
bool intel_opregion_asle_present(struct drm_i915_private *i915); bool intel_opregion_asle_present(struct intel_display *display);
void intel_opregion_asle_intr(struct drm_i915_private *dev_priv); void intel_opregion_asle_intr(struct intel_display *display);
int intel_opregion_notify_encoder(struct intel_encoder *encoder, int intel_opregion_notify_encoder(struct intel_encoder *encoder,
bool enable); 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); 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); const struct drm_edid *intel_opregion_get_edid(struct intel_connector *connector);
bool intel_opregion_vbt_present(struct drm_i915_private *i915); bool intel_opregion_vbt_present(struct intel_display *display);
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);
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*/ #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; 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) 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; 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)
{ {
} }
...@@ -104,12 +104,12 @@ intel_opregion_notify_encoder(struct intel_encoder *encoder, bool enable) ...@@ -104,12 +104,12 @@ intel_opregion_notify_encoder(struct intel_encoder *encoder, bool enable)
} }
static inline int static inline int
intel_opregion_notify_adapter(struct drm_i915_private *dev, pci_power_t state) intel_opregion_notify_adapter(struct intel_display *display, pci_power_t state)
{ {
return 0; return 0;
} }
static inline int intel_opregion_get_panel_type(struct drm_i915_private *dev) static inline int intel_opregion_get_panel_type(struct intel_display *display)
{ {
return -ENODEV; return -ENODEV;
} }
...@@ -120,23 +120,23 @@ intel_opregion_get_edid(struct intel_connector *connector) ...@@ -120,23 +120,23 @@ intel_opregion_get_edid(struct intel_connector *connector)
return NULL; 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; return false;
} }
static inline const void * 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; 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; 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)
{ {
} }
......
...@@ -442,6 +442,7 @@ static int i915_pcode_init(struct drm_i915_private *i915) ...@@ -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) 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); struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
int ret; int ret;
...@@ -542,7 +543,7 @@ static int i915_driver_hw_probe(struct drm_i915_private *dev_priv) ...@@ -542,7 +543,7 @@ static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)
if (ret) if (ret)
goto err_msi; goto err_msi;
intel_opregion_setup(dev_priv); intel_opregion_setup(display);
ret = i915_pcode_init(dev_priv); ret = i915_pcode_init(dev_priv);
if (ret) if (ret)
...@@ -559,7 +560,7 @@ static int i915_driver_hw_probe(struct drm_i915_private *dev_priv) ...@@ -559,7 +560,7 @@ static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)
return 0; return 0;
err_opregion: err_opregion:
intel_opregion_cleanup(dev_priv); intel_opregion_cleanup(display);
err_msi: err_msi:
if (pdev->msi_enabled) if (pdev->msi_enabled)
pci_disable_msi(pdev); pci_disable_msi(pdev);
...@@ -580,11 +581,12 @@ static int i915_driver_hw_probe(struct drm_i915_private *dev_priv) ...@@ -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) 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); struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
i915_perf_fini(dev_priv); i915_perf_fini(dev_priv);
intel_opregion_cleanup(dev_priv); intel_opregion_cleanup(display);
if (pdev->msi_enabled) if (pdev->msi_enabled)
pci_disable_msi(pdev); pci_disable_msi(pdev);
...@@ -1014,6 +1016,7 @@ static int i915_drm_prepare(struct drm_device *dev) ...@@ -1014,6 +1016,7 @@ static int i915_drm_prepare(struct drm_device *dev)
static int i915_drm_suspend(struct drm_device *dev) static int i915_drm_suspend(struct drm_device *dev)
{ {
struct drm_i915_private *dev_priv = to_i915(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); struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
pci_power_t opregion_target_state; pci_power_t opregion_target_state;
...@@ -1049,7 +1052,7 @@ static int i915_drm_suspend(struct drm_device *dev) ...@@ -1049,7 +1052,7 @@ static int i915_drm_suspend(struct drm_device *dev)
i915_save_display(dev_priv); i915_save_display(dev_priv);
opregion_target_state = suspend_to_idle(dev_priv) ? PCI_D1 : PCI_D3cold; 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++; dev_priv->suspend_count++;
...@@ -1138,6 +1141,7 @@ int i915_driver_suspend_switcheroo(struct drm_i915_private *i915, ...@@ -1138,6 +1141,7 @@ int i915_driver_suspend_switcheroo(struct drm_i915_private *i915,
static int i915_drm_resume(struct drm_device *dev) static int i915_drm_resume(struct drm_device *dev)
{ {
struct drm_i915_private *dev_priv = to_i915(dev); struct drm_i915_private *dev_priv = to_i915(dev);
struct intel_display *display = &dev_priv->display;
struct intel_gt *gt; struct intel_gt *gt;
int ret, i; int ret, i;
...@@ -1205,7 +1209,7 @@ static int i915_drm_resume(struct drm_device *dev) ...@@ -1205,7 +1209,7 @@ static int i915_drm_resume(struct drm_device *dev)
} }
intel_hpd_poll_disable(dev_priv); intel_hpd_poll_disable(dev_priv);
intel_opregion_resume(dev_priv); intel_opregion_resume(display);
intel_fbdev_set_suspend(dev, FBINFO_STATE_RUNNING, false); intel_fbdev_set_suspend(dev, FBINFO_STATE_RUNNING, false);
...@@ -1454,6 +1458,7 @@ static int i915_pm_restore(struct device *kdev) ...@@ -1454,6 +1458,7 @@ static int i915_pm_restore(struct device *kdev)
static int intel_runtime_suspend(struct device *kdev) static int intel_runtime_suspend(struct device *kdev)
{ {
struct drm_i915_private *dev_priv = kdev_to_i915(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 intel_runtime_pm *rpm = &dev_priv->runtime_pm;
struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev); struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
struct pci_dev *root_pdev; struct pci_dev *root_pdev;
...@@ -1528,7 +1533,7 @@ static int intel_runtime_suspend(struct device *kdev) ...@@ -1528,7 +1533,7 @@ static int intel_runtime_suspend(struct device *kdev)
* won't be able to restore them. Since PCI_D3hot matches the * won't be able to restore them. Since PCI_D3hot matches the
* actual specification and appears to be working, use it. * 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 { } else {
/* /*
* current versions of firmware which depend on this opregion * current versions of firmware which depend on this opregion
...@@ -1537,7 +1542,7 @@ static int intel_runtime_suspend(struct device *kdev) ...@@ -1537,7 +1542,7 @@ static int intel_runtime_suspend(struct device *kdev)
* to distinguish it from notifications that might be sent via * to distinguish it from notifications that might be sent via
* the suspend path. * the suspend path.
*/ */
intel_opregion_notify_adapter(dev_priv, PCI_D1); intel_opregion_notify_adapter(display, PCI_D1);
} }
assert_forcewakes_inactive(&dev_priv->uncore); assert_forcewakes_inactive(&dev_priv->uncore);
...@@ -1552,6 +1557,7 @@ static int intel_runtime_suspend(struct device *kdev) ...@@ -1552,6 +1557,7 @@ static int intel_runtime_suspend(struct device *kdev)
static int intel_runtime_resume(struct device *kdev) static int intel_runtime_resume(struct device *kdev)
{ {
struct drm_i915_private *dev_priv = kdev_to_i915(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 intel_runtime_pm *rpm = &dev_priv->runtime_pm;
struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev); struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
struct pci_dev *root_pdev; struct pci_dev *root_pdev;
...@@ -1566,7 +1572,7 @@ static int intel_runtime_resume(struct device *kdev) ...@@ -1566,7 +1572,7 @@ static int intel_runtime_resume(struct device *kdev)
drm_WARN_ON_ONCE(&dev_priv->drm, atomic_read(&rpm->wakeref_count)); drm_WARN_ON_ONCE(&dev_priv->drm, atomic_read(&rpm->wakeref_count));
disable_rpm_wakeref_asserts(rpm); 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); root_pdev = pcie_find_root_port(pdev);
if (root_pdev) if (root_pdev)
......
...@@ -127,16 +127,18 @@ int xe_display_init_nommio(struct xe_device *xe) ...@@ -127,16 +127,18 @@ int xe_display_init_nommio(struct xe_device *xe)
static void xe_display_fini_noirq(void *arg) static void xe_display_fini_noirq(void *arg)
{ {
struct xe_device *xe = arg; struct xe_device *xe = arg;
struct intel_display *display = &xe->display;
if (!xe->info.enable_display) if (!xe->info.enable_display)
return; return;
intel_display_driver_remove_noirq(xe); intel_display_driver_remove_noirq(xe);
intel_opregion_cleanup(xe); intel_opregion_cleanup(display);
} }
int xe_display_init_noirq(struct xe_device *xe) int xe_display_init_noirq(struct xe_device *xe)
{ {
struct intel_display *display = &xe->display;
int err; int err;
if (!xe->info.enable_display) if (!xe->info.enable_display)
...@@ -145,7 +147,7 @@ int xe_display_init_noirq(struct xe_device *xe) ...@@ -145,7 +147,7 @@ int xe_display_init_noirq(struct xe_device *xe)
intel_display_driver_early_probe(xe); intel_display_driver_early_probe(xe);
/* Early display init.. */ /* Early display init.. */
intel_opregion_setup(xe); intel_opregion_setup(display);
/* /*
* Fill the dram structure to get the system dram info. This will be * 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) ...@@ -159,7 +161,7 @@ int xe_display_init_noirq(struct xe_device *xe)
err = intel_display_driver_probe_noirq(xe); err = intel_display_driver_probe_noirq(xe);
if (err) { if (err) {
intel_opregion_cleanup(xe); intel_opregion_cleanup(display);
return err; return err;
} }
...@@ -250,11 +252,13 @@ void xe_display_irq_handler(struct xe_device *xe, u32 master_ctl) ...@@ -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) void xe_display_irq_enable(struct xe_device *xe, u32 gu_misc_iir)
{ {
struct intel_display *display = &xe->display;
if (!xe->info.enable_display) if (!xe->info.enable_display)
return; return;
if (gu_misc_iir & GU_MISC_GSE) 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) void xe_display_irq_reset(struct xe_device *xe)
...@@ -285,6 +289,7 @@ static bool suspend_to_idle(void) ...@@ -285,6 +289,7 @@ static bool suspend_to_idle(void)
void xe_display_pm_suspend(struct xe_device *xe, bool runtime) void xe_display_pm_suspend(struct xe_device *xe, bool runtime)
{ {
struct intel_display *display = &xe->display;
bool s2idle = suspend_to_idle(); bool s2idle = suspend_to_idle();
if (!xe->info.enable_display) if (!xe->info.enable_display)
return; return;
...@@ -306,7 +311,7 @@ void xe_display_pm_suspend(struct xe_device *xe, bool runtime) ...@@ -306,7 +311,7 @@ void xe_display_pm_suspend(struct xe_device *xe, bool runtime)
intel_encoder_suspend_all(&xe->display); 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); intel_fbdev_set_suspend(&xe->drm, FBINFO_STATE_SUSPENDED, true);
...@@ -336,6 +341,8 @@ void xe_display_pm_resume_early(struct xe_device *xe) ...@@ -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) void xe_display_pm_resume(struct xe_device *xe, bool runtime)
{ {
struct intel_display *display = &xe->display;
if (!xe->info.enable_display) if (!xe->info.enable_display)
return; return;
...@@ -356,7 +363,7 @@ void xe_display_pm_resume(struct xe_device *xe, bool runtime) ...@@ -356,7 +363,7 @@ void xe_display_pm_resume(struct xe_device *xe, bool runtime)
if (has_display(xe)) if (has_display(xe))
drm_kms_helper_poll_enable(&xe->drm); 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); intel_fbdev_set_suspend(&xe->drm, FBINFO_STATE_RUNNING, false);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment