- Display SDVO fixes (Juha-Pekka, Jani)
- Taking Stolen handling out of FBC code (Jouni) - Replace acronym with full platform name in defines (Dnyaneshwar, A\ nusha) - Display IRQ cleanups (Jani) - Initialize display version numbers (Luca) -----BEGIN PGP SIGNATURE----- iQEzBAABCAAdFiEEbSBwaO7dZQkcLOKj+mJfZA7rE8oFAmTVQBgACgkQ+mJfZA7r E8q5GAgAiQEK+1neVQu63PlVh1+efNaf9IqeMDFq81sEqOVtoL2D9g3gtD1/8F79 wp07gs39YQh8StwX4i6/fyGpcZ36Lxr7+1t9iZgESQI2L/qpfwgcyMqr1vNhlgVB TSjvHxL8X9RqqCALElKSNBXAsYYLlJkCdpUQA/6+7zpv1WlNTQMaciNtVKbpWgDD /qfll6ZfnqbC+wZCWyKV2dQQJ9UooFj5YJro/mZM/RfFyhYTb/7/MA5GUBAs+Du9 +19LjTrcdXpD3lgieIGtLS2NBcWYiHktyn9teLb8bwpxCVsNv6p47YKaQJq93Viv xu7k0z3sc2FSaeUELG6lGD9jwDCi5g== =yfW9 -----END PGP SIGNATURE----- Merge tag 'drm-intel-next-2023-08-10' of git://anongit.freedesktop.org/drm/drm-intel into drm-next - Display SDVO fixes (Juha-Pekka, Jani) - Taking Stolen handling out of FBC code (Jouni) - Replace acronym with full platform name in defines (Dnyaneshwar, A\ nusha) - Display IRQ cleanups (Jani) - Initialize display version numbers (Luca) Signed-off-by: Dave Airlie <airlied@redhat.com> From: Rodrigo Vivi <rodrigo.vivi@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/ZNVAR53jmvA1p6D5@intel.com
This commit is contained in:
commit
2b9d7b6515
@ -444,7 +444,8 @@ static void gen11_dsi_config_phy_lanes_sequence(struct intel_encoder *encoder)
|
||||
intel_de_write(dev_priv, ICL_PORT_TX_DW2_GRP(phy), tmp);
|
||||
|
||||
/* For EHL, TGL, set latency optimization for PCS_DW1 lanes */
|
||||
if (IS_JSL_EHL(dev_priv) || (DISPLAY_VER(dev_priv) >= 12)) {
|
||||
if (IS_JASPERLAKE(dev_priv) || IS_ELKHARTLAKE(dev_priv) ||
|
||||
(DISPLAY_VER(dev_priv) >= 12)) {
|
||||
intel_de_rmw(dev_priv, ICL_PORT_PCS_DW1_AUX(phy),
|
||||
LATENCY_OPTIM_MASK, LATENCY_OPTIM_VAL(0));
|
||||
|
||||
@ -553,7 +554,7 @@ gen11_dsi_setup_dphy_timings(struct intel_encoder *encoder,
|
||||
}
|
||||
}
|
||||
|
||||
if (IS_JSL_EHL(dev_priv)) {
|
||||
if (IS_JASPERLAKE(dev_priv) || IS_ELKHARTLAKE(dev_priv)) {
|
||||
for_each_dsi_phy(phy, intel_dsi->phys)
|
||||
intel_de_rmw(dev_priv, ICL_DPHY_CHKN(phy),
|
||||
0, ICL_DPHY_CHKN_AFE_OVER_PPI_STRAP);
|
||||
|
@ -470,7 +470,7 @@ static void hsw_get_cdclk(struct drm_i915_private *dev_priv,
|
||||
cdclk_config->cdclk = 450000;
|
||||
else if (freq == LCPLL_CLK_FREQ_450)
|
||||
cdclk_config->cdclk = 450000;
|
||||
else if (IS_HSW_ULT(dev_priv))
|
||||
else if (IS_HASWELL_ULT(dev_priv))
|
||||
cdclk_config->cdclk = 337500;
|
||||
else
|
||||
cdclk_config->cdclk = 540000;
|
||||
@ -3155,7 +3155,7 @@ static int intel_compute_max_dotclk(struct drm_i915_private *dev_priv)
|
||||
*/
|
||||
void intel_update_max_cdclk(struct drm_i915_private *dev_priv)
|
||||
{
|
||||
if (IS_JSL_EHL(dev_priv)) {
|
||||
if (IS_JASPERLAKE(dev_priv) || IS_ELKHARTLAKE(dev_priv)) {
|
||||
if (dev_priv->display.cdclk.hw.ref == 24000)
|
||||
dev_priv->display.cdclk.max_cdclk_freq = 552000;
|
||||
else
|
||||
@ -3200,9 +3200,9 @@ void intel_update_max_cdclk(struct drm_i915_private *dev_priv)
|
||||
*/
|
||||
if (intel_de_read(dev_priv, FUSE_STRAP) & HSW_CDCLK_LIMIT)
|
||||
dev_priv->display.cdclk.max_cdclk_freq = 450000;
|
||||
else if (IS_BDW_ULX(dev_priv))
|
||||
else if (IS_BROADWELL_ULX(dev_priv))
|
||||
dev_priv->display.cdclk.max_cdclk_freq = 450000;
|
||||
else if (IS_BDW_ULT(dev_priv))
|
||||
else if (IS_BROADWELL_ULT(dev_priv))
|
||||
dev_priv->display.cdclk.max_cdclk_freq = 540000;
|
||||
else
|
||||
dev_priv->display.cdclk.max_cdclk_freq = 675000;
|
||||
@ -3567,10 +3567,10 @@ void intel_init_cdclk_hooks(struct drm_i915_private *dev_priv)
|
||||
dev_priv->display.cdclk.table = dg2_cdclk_table;
|
||||
} else if (IS_ALDERLAKE_P(dev_priv)) {
|
||||
/* Wa_22011320316:adl-p[a0] */
|
||||
if (IS_ADLP_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0)) {
|
||||
if (IS_ALDERLAKE_P(dev_priv) && IS_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0)) {
|
||||
dev_priv->display.cdclk.table = adlp_a_step_cdclk_table;
|
||||
dev_priv->display.funcs.cdclk = &tgl_cdclk_funcs;
|
||||
} else if (IS_ADLP_RPLU(dev_priv)) {
|
||||
} else if (IS_RAPTORLAKE_U(dev_priv)) {
|
||||
dev_priv->display.cdclk.table = rplu_cdclk_table;
|
||||
dev_priv->display.funcs.cdclk = &rplu_cdclk_funcs;
|
||||
} else {
|
||||
@ -3583,7 +3583,7 @@ void intel_init_cdclk_hooks(struct drm_i915_private *dev_priv)
|
||||
} else if (DISPLAY_VER(dev_priv) >= 12) {
|
||||
dev_priv->display.funcs.cdclk = &tgl_cdclk_funcs;
|
||||
dev_priv->display.cdclk.table = icl_cdclk_table;
|
||||
} else if (IS_JSL_EHL(dev_priv)) {
|
||||
} else if (IS_JASPERLAKE(dev_priv) || IS_ELKHARTLAKE(dev_priv)) {
|
||||
dev_priv->display.funcs.cdclk = &ehl_cdclk_funcs;
|
||||
dev_priv->display.cdclk.table = icl_cdclk_table;
|
||||
} else if (DISPLAY_VER(dev_priv) >= 11) {
|
||||
|
@ -141,7 +141,7 @@ static bool has_phy_misc(struct drm_i915_private *i915, enum phy phy)
|
||||
|
||||
if (IS_ALDERLAKE_S(i915))
|
||||
return phy == PHY_A;
|
||||
else if (IS_JSL_EHL(i915) ||
|
||||
else if ((IS_JASPERLAKE(i915) || IS_ELKHARTLAKE(i915)) ||
|
||||
IS_ROCKETLAKE(i915) ||
|
||||
IS_DG1(i915))
|
||||
return phy < PHY_C;
|
||||
@ -242,7 +242,7 @@ static bool icl_combo_phy_verify_state(struct drm_i915_private *dev_priv,
|
||||
ret &= check_phy_reg(dev_priv, phy, ICL_PORT_COMP_DW8(phy),
|
||||
IREFGEN, IREFGEN);
|
||||
|
||||
if (IS_JSL_EHL(dev_priv)) {
|
||||
if (IS_JASPERLAKE(dev_priv) || IS_ELKHARTLAKE(dev_priv)) {
|
||||
if (ehl_vbt_ddi_d_present(dev_priv))
|
||||
expected_val = ICL_PHY_MISC_MUX_DDID;
|
||||
|
||||
@ -333,7 +333,8 @@ static void icl_combo_phys_init(struct drm_i915_private *dev_priv)
|
||||
* "internal" child devices.
|
||||
*/
|
||||
val = intel_de_read(dev_priv, ICL_PHY_MISC(phy));
|
||||
if (IS_JSL_EHL(dev_priv) && phy == PHY_A) {
|
||||
if ((IS_JASPERLAKE(dev_priv) || IS_ELKHARTLAKE(dev_priv)) &&
|
||||
phy == PHY_A) {
|
||||
val &= ~ICL_PHY_MISC_MUX_DDID;
|
||||
|
||||
if (ehl_vbt_ddi_d_present(dev_priv))
|
||||
|
@ -3583,7 +3583,8 @@ void intel_ddi_compute_min_voltage_level(struct drm_i915_private *dev_priv,
|
||||
{
|
||||
if (DISPLAY_VER(dev_priv) >= 12 && crtc_state->port_clock > 594000)
|
||||
crtc_state->min_voltage_level = 2;
|
||||
else if (IS_JSL_EHL(dev_priv) && crtc_state->port_clock > 594000)
|
||||
else if ((IS_JASPERLAKE(dev_priv) || IS_ELKHARTLAKE(dev_priv)) &&
|
||||
crtc_state->port_clock > 594000)
|
||||
crtc_state->min_voltage_level = 3;
|
||||
else if (DISPLAY_VER(dev_priv) >= 11 && crtc_state->port_clock > 594000)
|
||||
crtc_state->min_voltage_level = 1;
|
||||
@ -4878,7 +4879,7 @@ void intel_ddi_init(struct drm_i915_private *dev_priv,
|
||||
encoder->disable_clock = dg1_ddi_disable_clock;
|
||||
encoder->is_clock_enabled = dg1_ddi_is_clock_enabled;
|
||||
encoder->get_config = dg1_ddi_get_config;
|
||||
} else if (IS_JSL_EHL(dev_priv)) {
|
||||
} else if (IS_JASPERLAKE(dev_priv) || IS_ELKHARTLAKE(dev_priv)) {
|
||||
if (intel_ddi_is_tc(dev_priv, port)) {
|
||||
encoder->enable_clock = jsl_ddi_tc_enable_clock;
|
||||
encoder->disable_clock = jsl_ddi_tc_disable_clock;
|
||||
@ -4949,7 +4950,7 @@ void intel_ddi_init(struct drm_i915_private *dev_priv,
|
||||
encoder->hpd_pin = rkl_hpd_pin(dev_priv, port);
|
||||
else if (DISPLAY_VER(dev_priv) >= 12)
|
||||
encoder->hpd_pin = tgl_hpd_pin(dev_priv, port);
|
||||
else if (IS_JSL_EHL(dev_priv))
|
||||
else if (IS_JASPERLAKE(dev_priv) || IS_ELKHARTLAKE(dev_priv))
|
||||
encoder->hpd_pin = ehl_hpd_pin(dev_priv, port);
|
||||
else if (DISPLAY_VER(dev_priv) == 11)
|
||||
encoder->hpd_pin = icl_hpd_pin(dev_priv, port);
|
||||
|
@ -1410,7 +1410,7 @@ tgl_get_combo_buf_trans_dp(struct intel_encoder *encoder,
|
||||
struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
|
||||
|
||||
if (crtc_state->port_clock > 270000) {
|
||||
if (IS_TGL_UY(dev_priv)) {
|
||||
if (IS_TIGERLAKE_UY(dev_priv)) {
|
||||
return intel_get_buf_trans(&tgl_uy_combo_phy_trans_dp_hbr2,
|
||||
n_entries);
|
||||
} else {
|
||||
@ -1740,15 +1740,15 @@ void intel_ddi_buf_trans_init(struct intel_encoder *encoder)
|
||||
encoder->get_buf_trans = icl_get_mg_buf_trans;
|
||||
} else if (IS_GEMINILAKE(i915) || IS_BROXTON(i915)) {
|
||||
encoder->get_buf_trans = bxt_get_buf_trans;
|
||||
} else if (IS_CML_ULX(i915) || IS_CFL_ULX(i915) || IS_KBL_ULX(i915)) {
|
||||
} else if (IS_COMETLAKE_ULX(i915) || IS_COFFEELAKE_ULX(i915) || IS_KABYLAKE_ULX(i915)) {
|
||||
encoder->get_buf_trans = kbl_y_get_buf_trans;
|
||||
} else if (IS_CML_ULT(i915) || IS_CFL_ULT(i915) || IS_KBL_ULT(i915)) {
|
||||
} else if (IS_COMETLAKE_ULT(i915) || IS_COFFEELAKE_ULT(i915) || IS_KABYLAKE_ULT(i915)) {
|
||||
encoder->get_buf_trans = kbl_u_get_buf_trans;
|
||||
} else if (IS_COMETLAKE(i915) || IS_COFFEELAKE(i915) || IS_KABYLAKE(i915)) {
|
||||
encoder->get_buf_trans = kbl_get_buf_trans;
|
||||
} else if (IS_SKL_ULX(i915)) {
|
||||
} else if (IS_SKYLAKE_ULX(i915)) {
|
||||
encoder->get_buf_trans = skl_y_get_buf_trans;
|
||||
} else if (IS_SKL_ULT(i915)) {
|
||||
} else if (IS_SKYLAKE_ULT(i915)) {
|
||||
encoder->get_buf_trans = skl_u_get_buf_trans;
|
||||
} else if (IS_SKYLAKE(i915)) {
|
||||
encoder->get_buf_trans = skl_get_buf_trans;
|
||||
|
@ -1749,7 +1749,7 @@ bool intel_phy_is_combo(struct drm_i915_private *dev_priv, enum phy phy)
|
||||
return phy <= PHY_E;
|
||||
else if (IS_DG1(dev_priv) || IS_ROCKETLAKE(dev_priv))
|
||||
return phy <= PHY_D;
|
||||
else if (IS_JSL_EHL(dev_priv))
|
||||
else if (IS_JASPERLAKE(dev_priv) || IS_ELKHARTLAKE(dev_priv))
|
||||
return phy <= PHY_C;
|
||||
else if (IS_ALDERLAKE_P(dev_priv) || IS_DISPLAY_VER(dev_priv, 11, 12))
|
||||
return phy <= PHY_B;
|
||||
@ -1801,7 +1801,8 @@ enum phy intel_port_to_phy(struct drm_i915_private *i915, enum port port)
|
||||
return PHY_B + port - PORT_TC1;
|
||||
else if ((IS_DG1(i915) || IS_ROCKETLAKE(i915)) && port >= PORT_TC1)
|
||||
return PHY_C + port - PORT_TC1;
|
||||
else if (IS_JSL_EHL(i915) && port == PORT_D)
|
||||
else if ((IS_JASPERLAKE(i915) || IS_ELKHARTLAKE(i915)) &&
|
||||
port == PORT_D)
|
||||
return PHY_A;
|
||||
|
||||
return PHY_A + port - PORT_A;
|
||||
@ -7377,7 +7378,7 @@ static bool intel_ddi_crt_present(struct drm_i915_private *dev_priv)
|
||||
if (DISPLAY_VER(dev_priv) >= 9)
|
||||
return false;
|
||||
|
||||
if (IS_HSW_ULT(dev_priv) || IS_BDW_ULT(dev_priv))
|
||||
if (IS_HASWELL_ULT(dev_priv) || IS_BROADWELL_ULT(dev_priv))
|
||||
return false;
|
||||
|
||||
if (HAS_PCH_LPT_H(dev_priv) &&
|
||||
|
@ -724,10 +724,24 @@ static const struct intel_display_device_info xe_lpdp_display = {
|
||||
BIT(PORT_TC1) | BIT(PORT_TC2) | BIT(PORT_TC3) | BIT(PORT_TC4),
|
||||
};
|
||||
|
||||
/*
|
||||
* Separate detection for no display cases to keep the display id array simple.
|
||||
*
|
||||
* IVB Q requires subvendor and subdevice matching to differentiate from IVB D
|
||||
* GT2 server.
|
||||
*/
|
||||
static bool has_no_display(struct pci_dev *pdev)
|
||||
{
|
||||
static const struct pci_device_id ids[] = {
|
||||
INTEL_IVB_Q_IDS(0),
|
||||
{}
|
||||
};
|
||||
|
||||
return pci_match_id(ids, pdev);
|
||||
}
|
||||
|
||||
#undef INTEL_VGA_DEVICE
|
||||
#undef INTEL_QUANTA_VGA_DEVICE
|
||||
#define INTEL_VGA_DEVICE(id, info) { id, info }
|
||||
#define INTEL_QUANTA_VGA_DEVICE(info) { 0x16a, info }
|
||||
|
||||
static const struct {
|
||||
u32 devid;
|
||||
@ -752,7 +766,6 @@ static const struct {
|
||||
INTEL_IRONLAKE_M_IDS(&ilk_m_display),
|
||||
INTEL_SNB_D_IDS(&snb_display),
|
||||
INTEL_SNB_M_IDS(&snb_display),
|
||||
INTEL_IVB_Q_IDS(NULL), /* must be first IVB in list */
|
||||
INTEL_IVB_M_IDS(&ivb_display),
|
||||
INTEL_IVB_D_IDS(&ivb_display),
|
||||
INTEL_HSW_IDS(&hsw_display),
|
||||
@ -800,6 +813,15 @@ probe_gmdid_display(struct drm_i915_private *i915, u16 *ver, u16 *rel, u16 *step
|
||||
u32 val;
|
||||
int i;
|
||||
|
||||
/* The caller expects to ver, rel and step to be initialized
|
||||
* here, and there's no good way to check when there was a
|
||||
* failure and no_display was returned. So initialize all these
|
||||
* values here zero, to be sure.
|
||||
*/
|
||||
*ver = 0;
|
||||
*rel = 0;
|
||||
*step = 0;
|
||||
|
||||
addr = pci_iomap_range(pdev, 0, i915_mmio_reg_offset(GMD_ID_DISPLAY), sizeof(u32));
|
||||
if (!addr) {
|
||||
drm_err(&i915->drm, "Cannot map MMIO BAR to read display GMD_ID\n");
|
||||
@ -809,9 +831,10 @@ probe_gmdid_display(struct drm_i915_private *i915, u16 *ver, u16 *rel, u16 *step
|
||||
val = ioread32(addr);
|
||||
pci_iounmap(pdev, addr);
|
||||
|
||||
if (val == 0)
|
||||
/* Platform doesn't have display */
|
||||
if (val == 0) {
|
||||
drm_dbg_kms(&i915->drm, "Device doesn't have display\n");
|
||||
return &no_display;
|
||||
}
|
||||
|
||||
*ver = REG_FIELD_GET(GMD_ID_ARCH_MASK, val);
|
||||
*rel = REG_FIELD_GET(GMD_ID_RELEASE_MASK, val);
|
||||
@ -837,6 +860,11 @@ intel_display_device_probe(struct drm_i915_private *i915, bool has_gmdid,
|
||||
if (has_gmdid)
|
||||
return probe_gmdid_display(i915, gmdid_ver, gmdid_rel, gmdid_step);
|
||||
|
||||
if (has_no_display(pdev)) {
|
||||
drm_dbg_kms(&i915->drm, "Device doesn't have display\n");
|
||||
return &no_display;
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(intel_display_ids); i++) {
|
||||
if (intel_display_ids[i].devid == pdev->device)
|
||||
return intel_display_ids[i].info;
|
||||
@ -858,7 +886,7 @@ void intel_display_device_info_runtime_init(struct drm_i915_private *i915)
|
||||
BUILD_BUG_ON(BITS_PER_TYPE(display_runtime->port_mask) < I915_MAX_PORTS);
|
||||
|
||||
/* Wa_14011765242: adl-s A0,A1 */
|
||||
if (IS_ADLS_DISPLAY_STEP(i915, STEP_A0, STEP_A2))
|
||||
if (IS_ALDERLAKE_S(i915) && IS_DISPLAY_STEP(i915, STEP_A0, STEP_A2))
|
||||
for_each_pipe(i915, pipe)
|
||||
display_runtime->num_scalers[pipe] = 0;
|
||||
else if (DISPLAY_VER(i915) >= 11) {
|
||||
|
@ -54,7 +54,7 @@ struct drm_printer;
|
||||
#define HAS_GMCH(i915) (DISPLAY_INFO(i915)->has_gmch)
|
||||
#define HAS_HW_SAGV_WM(i915) (DISPLAY_VER(i915) >= 13 && !IS_DGFX(i915))
|
||||
#define HAS_IPC(i915) (DISPLAY_INFO(i915)->has_ipc)
|
||||
#define HAS_IPS(i915) (IS_HSW_ULT(i915) || IS_BROADWELL(i915))
|
||||
#define HAS_IPS(i915) (IS_HASWELL_ULT(i915) || IS_BROADWELL(i915))
|
||||
#define HAS_LSPCON(i915) (IS_DISPLAY_VER(i915, 9, 10))
|
||||
#define HAS_MBUS_JOINING(i915) (IS_ALDERLAKE_P(i915) || DISPLAY_VER(i915) >= 14)
|
||||
#define HAS_MSO(i915) (DISPLAY_VER(i915) >= 12)
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include "intel_crtc.h"
|
||||
#include "intel_display_debugfs.h"
|
||||
#include "intel_display_driver.h"
|
||||
#include "intel_display_irq.h"
|
||||
#include "intel_display_power.h"
|
||||
#include "intel_display_types.h"
|
||||
#include "intel_dkl_phy.h"
|
||||
@ -177,6 +178,7 @@ void intel_display_driver_early_probe(struct drm_i915_private *i915)
|
||||
if (!HAS_DISPLAY(i915))
|
||||
return;
|
||||
|
||||
intel_display_irq_init(i915);
|
||||
intel_dkl_phy_init(i915);
|
||||
intel_color_init_hooks(i915);
|
||||
intel_init_cdclk_hooks(i915);
|
||||
|
@ -1537,7 +1537,7 @@ void gen8_irq_power_well_pre_disable(struct drm_i915_private *dev_priv,
|
||||
* to avoid races with the irq handler, assuming we have MSI. Shared legacy
|
||||
* interrupts could still race.
|
||||
*/
|
||||
void ibx_irq_postinstall(struct drm_i915_private *dev_priv)
|
||||
static void ibx_irq_postinstall(struct drm_i915_private *dev_priv)
|
||||
{
|
||||
struct intel_uncore *uncore = &dev_priv->uncore;
|
||||
u32 mask;
|
||||
@ -1583,6 +1583,50 @@ void valleyview_disable_display_irqs(struct drm_i915_private *dev_priv)
|
||||
vlv_display_irq_reset(dev_priv);
|
||||
}
|
||||
|
||||
void ilk_de_irq_postinstall(struct drm_i915_private *i915)
|
||||
{
|
||||
struct intel_uncore *uncore = &i915->uncore;
|
||||
u32 display_mask, extra_mask;
|
||||
|
||||
if (GRAPHICS_VER(i915) >= 7) {
|
||||
display_mask = (DE_MASTER_IRQ_CONTROL | DE_GSE_IVB |
|
||||
DE_PCH_EVENT_IVB | DE_AUX_CHANNEL_A_IVB);
|
||||
extra_mask = (DE_PIPEC_VBLANK_IVB | DE_PIPEB_VBLANK_IVB |
|
||||
DE_PIPEA_VBLANK_IVB | DE_ERR_INT_IVB |
|
||||
DE_PLANE_FLIP_DONE_IVB(PLANE_C) |
|
||||
DE_PLANE_FLIP_DONE_IVB(PLANE_B) |
|
||||
DE_PLANE_FLIP_DONE_IVB(PLANE_A) |
|
||||
DE_DP_A_HOTPLUG_IVB);
|
||||
} else {
|
||||
display_mask = (DE_MASTER_IRQ_CONTROL | DE_GSE | DE_PCH_EVENT |
|
||||
DE_AUX_CHANNEL_A | DE_PIPEB_CRC_DONE |
|
||||
DE_PIPEA_CRC_DONE | DE_POISON);
|
||||
extra_mask = (DE_PIPEA_VBLANK | DE_PIPEB_VBLANK |
|
||||
DE_PIPEB_FIFO_UNDERRUN | DE_PIPEA_FIFO_UNDERRUN |
|
||||
DE_PLANE_FLIP_DONE(PLANE_A) |
|
||||
DE_PLANE_FLIP_DONE(PLANE_B) |
|
||||
DE_DP_A_HOTPLUG);
|
||||
}
|
||||
|
||||
if (IS_HASWELL(i915)) {
|
||||
gen3_assert_iir_is_zero(uncore, EDP_PSR_IIR);
|
||||
display_mask |= DE_EDP_PSR_INT_HSW;
|
||||
}
|
||||
|
||||
if (IS_IRONLAKE_M(i915))
|
||||
extra_mask |= DE_PCU_EVENT;
|
||||
|
||||
i915->irq_mask = ~display_mask;
|
||||
|
||||
ibx_irq_postinstall(i915);
|
||||
|
||||
GEN3_IRQ_INIT(uncore, DE, i915->irq_mask,
|
||||
display_mask | extra_mask);
|
||||
}
|
||||
|
||||
static void mtp_irq_postinstall(struct drm_i915_private *i915);
|
||||
static void icp_irq_postinstall(struct drm_i915_private *i915);
|
||||
|
||||
void gen8_de_irq_postinstall(struct drm_i915_private *dev_priv)
|
||||
{
|
||||
struct intel_uncore *uncore = &dev_priv->uncore;
|
||||
@ -1600,6 +1644,13 @@ void gen8_de_irq_postinstall(struct drm_i915_private *dev_priv)
|
||||
if (!HAS_DISPLAY(dev_priv))
|
||||
return;
|
||||
|
||||
if (DISPLAY_VER(dev_priv) >= 14)
|
||||
mtp_irq_postinstall(dev_priv);
|
||||
else if (INTEL_PCH_TYPE(dev_priv) >= PCH_ICP)
|
||||
icp_irq_postinstall(dev_priv);
|
||||
else if (HAS_PCH_SPLIT(dev_priv))
|
||||
ibx_irq_postinstall(dev_priv);
|
||||
|
||||
if (DISPLAY_VER(dev_priv) <= 10)
|
||||
de_misc_masked |= GEN8_DE_MISC_GSE;
|
||||
|
||||
@ -1666,7 +1717,7 @@ void gen8_de_irq_postinstall(struct drm_i915_private *dev_priv)
|
||||
}
|
||||
}
|
||||
|
||||
void mtp_irq_postinstall(struct drm_i915_private *i915)
|
||||
static void mtp_irq_postinstall(struct drm_i915_private *i915)
|
||||
{
|
||||
struct intel_uncore *uncore = &i915->uncore;
|
||||
u32 sde_mask = SDE_GMBUS_ICP | SDE_PICAINTERRUPT;
|
||||
@ -1680,7 +1731,7 @@ void mtp_irq_postinstall(struct drm_i915_private *i915)
|
||||
GEN3_IRQ_INIT(uncore, SDE, ~sde_mask, 0xffffffff);
|
||||
}
|
||||
|
||||
void icp_irq_postinstall(struct drm_i915_private *dev_priv)
|
||||
static void icp_irq_postinstall(struct drm_i915_private *dev_priv)
|
||||
{
|
||||
struct intel_uncore *uncore = &dev_priv->uncore;
|
||||
u32 mask = SDE_GMBUS_ICP;
|
||||
@ -1699,3 +1750,30 @@ void gen11_de_irq_postinstall(struct drm_i915_private *dev_priv)
|
||||
GEN11_DISPLAY_IRQ_ENABLE);
|
||||
}
|
||||
|
||||
void dg1_de_irq_postinstall(struct drm_i915_private *i915)
|
||||
{
|
||||
if (!HAS_DISPLAY(i915))
|
||||
return;
|
||||
|
||||
gen8_de_irq_postinstall(i915);
|
||||
intel_uncore_write(&i915->uncore, GEN11_DISPLAY_INT_CTL,
|
||||
GEN11_DISPLAY_IRQ_ENABLE);
|
||||
}
|
||||
|
||||
void intel_display_irq_init(struct drm_i915_private *i915)
|
||||
{
|
||||
i915->drm.vblank_disable_immediate = true;
|
||||
|
||||
/*
|
||||
* Most platforms treat the display irq block as an always-on power
|
||||
* domain. vlv/chv can disable it at runtime and need special care to
|
||||
* avoid writing any of the display block registers outside of the power
|
||||
* domain. We defer setting up the display irqs in this case to the
|
||||
* runtime pm.
|
||||
*/
|
||||
i915->display_irqs_enabled = true;
|
||||
if (IS_VALLEYVIEW(i915) || IS_CHERRYVIEW(i915))
|
||||
i915->display_irqs_enabled = false;
|
||||
|
||||
intel_hotplug_irq_init(i915);
|
||||
}
|
||||
|
@ -58,12 +58,11 @@ void vlv_display_irq_reset(struct drm_i915_private *i915);
|
||||
void gen8_display_irq_reset(struct drm_i915_private *i915);
|
||||
void gen11_display_irq_reset(struct drm_i915_private *i915);
|
||||
|
||||
void ibx_irq_postinstall(struct drm_i915_private *i915);
|
||||
void vlv_display_irq_postinstall(struct drm_i915_private *i915);
|
||||
void icp_irq_postinstall(struct drm_i915_private *i915);
|
||||
void ilk_de_irq_postinstall(struct drm_i915_private *i915);
|
||||
void gen8_de_irq_postinstall(struct drm_i915_private *i915);
|
||||
void mtp_irq_postinstall(struct drm_i915_private *i915);
|
||||
void gen11_de_irq_postinstall(struct drm_i915_private *i915);
|
||||
void dg1_de_irq_postinstall(struct drm_i915_private *i915);
|
||||
|
||||
u32 i915_pipestat_enable_mask(struct drm_i915_private *i915, enum pipe pipe);
|
||||
void i915_enable_pipestat(struct drm_i915_private *i915, enum pipe pipe, u32 status_mask);
|
||||
@ -78,4 +77,6 @@ void i965_pipestat_irq_handler(struct drm_i915_private *i915, u32 iir, u32 pipe_
|
||||
void valleyview_pipestat_irq_handler(struct drm_i915_private *i915, u32 pipe_stats[I915_MAX_PIPES]);
|
||||
void i8xx_pipestat_irq_handler(struct drm_i915_private *i915, u16 iir, u32 pipe_stats[I915_MAX_PIPES]);
|
||||
|
||||
void intel_display_irq_init(struct drm_i915_private *i915);
|
||||
|
||||
#endif /* __INTEL_DISPLAY_IRQ_H__ */
|
||||
|
@ -1609,7 +1609,7 @@ static void tgl_bw_buddy_init(struct drm_i915_private *dev_priv)
|
||||
return;
|
||||
|
||||
if (IS_ALDERLAKE_S(dev_priv) ||
|
||||
IS_RKL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0))
|
||||
(IS_ROCKETLAKE(dev_priv) && IS_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0)))
|
||||
/* Wa_1409767108 */
|
||||
table = wa_1409767108_buddy_page_masks;
|
||||
else
|
||||
|
@ -500,7 +500,7 @@ intel_dp_set_source_rates(struct intel_dp *intel_dp)
|
||||
else if (IS_ALDERLAKE_P(dev_priv) || IS_ALDERLAKE_S(dev_priv) ||
|
||||
IS_DG1(dev_priv) || IS_ROCKETLAKE(dev_priv))
|
||||
max_rate = 810000;
|
||||
else if (IS_JSL_EHL(dev_priv))
|
||||
else if (IS_JASPERLAKE(dev_priv) || IS_ELKHARTLAKE(dev_priv))
|
||||
max_rate = ehl_max_source_rate(intel_dp);
|
||||
else
|
||||
max_rate = icl_max_source_rate(intel_dp);
|
||||
@ -510,7 +510,7 @@ intel_dp_set_source_rates(struct intel_dp *intel_dp)
|
||||
} else if (DISPLAY_VER(dev_priv) == 9) {
|
||||
source_rates = skl_rates;
|
||||
size = ARRAY_SIZE(skl_rates);
|
||||
} else if ((IS_HASWELL(dev_priv) && !IS_HSW_ULX(dev_priv)) ||
|
||||
} else if ((IS_HASWELL(dev_priv) && !IS_HASWELL_ULX(dev_priv)) ||
|
||||
IS_BROADWELL(dev_priv)) {
|
||||
source_rates = hsw_rates;
|
||||
size = ARRAY_SIZE(hsw_rates);
|
||||
|
@ -191,7 +191,8 @@ intel_combo_pll_enable_reg(struct drm_i915_private *i915,
|
||||
{
|
||||
if (IS_DG1(i915))
|
||||
return DG1_DPLL_ENABLE(pll->info->id);
|
||||
else if (IS_JSL_EHL(i915) && (pll->info->id == DPLL_ID_EHL_DPLL4))
|
||||
else if ((IS_JASPERLAKE(i915) || IS_ELKHARTLAKE(i915)) &&
|
||||
(pll->info->id == DPLL_ID_EHL_DPLL4))
|
||||
return MG_PLL_ENABLE(0);
|
||||
|
||||
return ICL_DPLL_ENABLE(pll->info->id);
|
||||
@ -927,7 +928,7 @@ static int hsw_ddi_wrpll_get_freq(struct drm_i915_private *dev_priv,
|
||||
switch (wrpll & WRPLL_REF_MASK) {
|
||||
case WRPLL_REF_SPECIAL_HSW:
|
||||
/* Muxed-SSC for BDW, non-SSC for non-ULT HSW. */
|
||||
if (IS_HASWELL(dev_priv) && !IS_HSW_ULT(dev_priv)) {
|
||||
if (IS_HASWELL(dev_priv) && !IS_HASWELL_ULT(dev_priv)) {
|
||||
refclk = dev_priv->display.dpll.ref_clks.nssc;
|
||||
break;
|
||||
}
|
||||
@ -2460,8 +2461,8 @@ static void icl_wrpll_params_populate(struct skl_wrpll_params *params,
|
||||
static bool
|
||||
ehl_combo_pll_div_frac_wa_needed(struct drm_i915_private *i915)
|
||||
{
|
||||
return ((IS_PLATFORM(i915, INTEL_ELKHARTLAKE) &&
|
||||
IS_JSL_EHL_DISPLAY_STEP(i915, STEP_B0, STEP_FOREVER)) ||
|
||||
return (((IS_ELKHARTLAKE(i915) || IS_JASPERLAKE(i915)) &&
|
||||
IS_DISPLAY_STEP(i915, STEP_B0, STEP_FOREVER)) ||
|
||||
IS_TIGERLAKE(i915) || IS_ALDERLAKE_S(i915) || IS_ALDERLAKE_P(i915)) &&
|
||||
i915->display.dpll.ref_clks.nssc == 38400;
|
||||
}
|
||||
@ -3226,7 +3227,8 @@ static int icl_get_combo_phy_dpll(struct intel_atomic_state *state,
|
||||
BIT(DPLL_ID_EHL_DPLL4) |
|
||||
BIT(DPLL_ID_ICL_DPLL1) |
|
||||
BIT(DPLL_ID_ICL_DPLL0);
|
||||
} else if (IS_JSL_EHL(dev_priv) && port != PORT_A) {
|
||||
} else if ((IS_JASPERLAKE(dev_priv) || IS_ELKHARTLAKE(dev_priv)) &&
|
||||
port != PORT_A) {
|
||||
dpll_mask =
|
||||
BIT(DPLL_ID_EHL_DPLL4) |
|
||||
BIT(DPLL_ID_ICL_DPLL1) |
|
||||
@ -3567,7 +3569,8 @@ static bool icl_pll_get_hw_state(struct drm_i915_private *dev_priv,
|
||||
hw_state->div0 &= TGL_DPLL0_DIV0_AFC_STARTUP_MASK;
|
||||
}
|
||||
} else {
|
||||
if (IS_JSL_EHL(dev_priv) && id == DPLL_ID_EHL_DPLL4) {
|
||||
if ((IS_JASPERLAKE(dev_priv) || IS_ELKHARTLAKE(dev_priv)) &&
|
||||
id == DPLL_ID_EHL_DPLL4) {
|
||||
hw_state->cfgcr0 = intel_de_read(dev_priv,
|
||||
ICL_DPLL_CFGCR0(4));
|
||||
hw_state->cfgcr1 = intel_de_read(dev_priv,
|
||||
@ -3623,7 +3626,8 @@ static void icl_dpll_write(struct drm_i915_private *dev_priv,
|
||||
cfgcr1_reg = TGL_DPLL_CFGCR1(id);
|
||||
div0_reg = TGL_DPLL0_DIV0(id);
|
||||
} else {
|
||||
if (IS_JSL_EHL(dev_priv) && id == DPLL_ID_EHL_DPLL4) {
|
||||
if ((IS_JASPERLAKE(dev_priv) || IS_ELKHARTLAKE(dev_priv)) &&
|
||||
id == DPLL_ID_EHL_DPLL4) {
|
||||
cfgcr0_reg = ICL_DPLL_CFGCR0(4);
|
||||
cfgcr1_reg = ICL_DPLL_CFGCR1(4);
|
||||
} else {
|
||||
@ -3781,7 +3785,7 @@ static void adlp_cmtg_clock_gating_wa(struct drm_i915_private *i915, struct inte
|
||||
{
|
||||
u32 val;
|
||||
|
||||
if (!IS_ADLP_DISPLAY_STEP(i915, STEP_A0, STEP_B0) ||
|
||||
if (!(IS_ALDERLAKE_P(i915) && IS_DISPLAY_STEP(i915, STEP_A0, STEP_B0)) ||
|
||||
pll->info->id != DPLL_ID_ICL_DPLL0)
|
||||
return;
|
||||
/*
|
||||
@ -3806,7 +3810,7 @@ static void combo_pll_enable(struct drm_i915_private *dev_priv,
|
||||
{
|
||||
i915_reg_t enable_reg = intel_combo_pll_enable_reg(dev_priv, pll);
|
||||
|
||||
if (IS_JSL_EHL(dev_priv) &&
|
||||
if ((IS_JASPERLAKE(dev_priv) || IS_ELKHARTLAKE(dev_priv)) &&
|
||||
pll->info->id == DPLL_ID_EHL_DPLL4) {
|
||||
|
||||
/*
|
||||
@ -3914,7 +3918,7 @@ static void combo_pll_disable(struct drm_i915_private *dev_priv,
|
||||
|
||||
icl_pll_disable(dev_priv, pll, enable_reg);
|
||||
|
||||
if (IS_JSL_EHL(dev_priv) &&
|
||||
if ((IS_JASPERLAKE(dev_priv) || IS_ELKHARTLAKE(dev_priv)) &&
|
||||
pll->info->id == DPLL_ID_EHL_DPLL4)
|
||||
intel_display_power_put(dev_priv, POWER_DOMAIN_DC_OFF,
|
||||
pll->wakeref);
|
||||
@ -4150,7 +4154,7 @@ void intel_shared_dpll_init(struct drm_i915_private *dev_priv)
|
||||
dpll_mgr = &rkl_pll_mgr;
|
||||
else if (DISPLAY_VER(dev_priv) >= 12)
|
||||
dpll_mgr = &tgl_pll_mgr;
|
||||
else if (IS_JSL_EHL(dev_priv))
|
||||
else if (IS_JASPERLAKE(dev_priv) || IS_ELKHARTLAKE(dev_priv))
|
||||
dpll_mgr = &ehl_pll_mgr;
|
||||
else if (DISPLAY_VER(dev_priv) >= 11)
|
||||
dpll_mgr = &icl_pll_mgr;
|
||||
@ -4335,7 +4339,8 @@ static void readout_dpll_hw_state(struct drm_i915_private *i915,
|
||||
|
||||
pll->on = intel_dpll_get_hw_state(i915, pll, &pll->state.hw_state);
|
||||
|
||||
if (IS_JSL_EHL(i915) && pll->on &&
|
||||
if ((IS_JASPERLAKE(i915) || IS_ELKHARTLAKE(i915)) &&
|
||||
pll->on &&
|
||||
pll->info->id == DPLL_ID_EHL_DPLL4) {
|
||||
pll->wakeref = intel_display_power_get(i915,
|
||||
POWER_DOMAIN_DC_OFF);
|
||||
|
@ -47,6 +47,7 @@
|
||||
#include "i915_reg.h"
|
||||
#include "i915_utils.h"
|
||||
#include "i915_vgpu.h"
|
||||
#include "i915_vma.h"
|
||||
#include "intel_cdclk.h"
|
||||
#include "intel_de.h"
|
||||
#include "intel_display_trace.h"
|
||||
@ -94,8 +95,7 @@ struct intel_fbc {
|
||||
struct mutex lock;
|
||||
unsigned int busy_bits;
|
||||
|
||||
struct drm_mm_node compressed_fb;
|
||||
struct drm_mm_node compressed_llb;
|
||||
struct i915_stolen_fb compressed_fb, compressed_llb;
|
||||
|
||||
enum intel_fbc_id id;
|
||||
|
||||
@ -332,15 +332,16 @@ static void i8xx_fbc_program_cfb(struct intel_fbc *fbc)
|
||||
{
|
||||
struct drm_i915_private *i915 = fbc->i915;
|
||||
|
||||
GEM_BUG_ON(range_overflows_end_t(u64, i915->dsm.stolen.start,
|
||||
fbc->compressed_fb.start, U32_MAX));
|
||||
GEM_BUG_ON(range_overflows_end_t(u64, i915->dsm.stolen.start,
|
||||
fbc->compressed_llb.start, U32_MAX));
|
||||
|
||||
GEM_BUG_ON(range_overflows_end_t(u64, i915_gem_stolen_area_address(i915),
|
||||
i915_gem_stolen_node_offset(&fbc->compressed_fb),
|
||||
U32_MAX));
|
||||
GEM_BUG_ON(range_overflows_end_t(u64, i915_gem_stolen_area_address(i915),
|
||||
i915_gem_stolen_node_offset(&fbc->compressed_llb),
|
||||
U32_MAX));
|
||||
intel_de_write(i915, FBC_CFB_BASE,
|
||||
i915->dsm.stolen.start + fbc->compressed_fb.start);
|
||||
i915_gem_stolen_node_address(i915, &fbc->compressed_fb));
|
||||
intel_de_write(i915, FBC_LL_BASE,
|
||||
i915->dsm.stolen.start + fbc->compressed_llb.start);
|
||||
i915_gem_stolen_node_address(i915, &fbc->compressed_llb));
|
||||
}
|
||||
|
||||
static const struct intel_fbc_funcs i8xx_fbc_funcs = {
|
||||
@ -447,7 +448,8 @@ static void g4x_fbc_program_cfb(struct intel_fbc *fbc)
|
||||
{
|
||||
struct drm_i915_private *i915 = fbc->i915;
|
||||
|
||||
intel_de_write(i915, DPFC_CB_BASE, fbc->compressed_fb.start);
|
||||
intel_de_write(i915, DPFC_CB_BASE,
|
||||
i915_gem_stolen_node_offset(&fbc->compressed_fb));
|
||||
}
|
||||
|
||||
static const struct intel_fbc_funcs g4x_fbc_funcs = {
|
||||
@ -498,7 +500,8 @@ static void ilk_fbc_program_cfb(struct intel_fbc *fbc)
|
||||
{
|
||||
struct drm_i915_private *i915 = fbc->i915;
|
||||
|
||||
intel_de_write(i915, ILK_DPFC_CB_BASE(fbc->id), fbc->compressed_fb.start);
|
||||
intel_de_write(i915, ILK_DPFC_CB_BASE(fbc->id),
|
||||
i915_gem_stolen_node_offset(&fbc->compressed_fb));
|
||||
}
|
||||
|
||||
static const struct intel_fbc_funcs ilk_fbc_funcs = {
|
||||
@ -605,7 +608,7 @@ static void ivb_fbc_activate(struct intel_fbc *fbc)
|
||||
else if (DISPLAY_VER(i915) == 9)
|
||||
skl_fbc_program_cfb_stride(fbc);
|
||||
|
||||
if (to_gt(i915)->ggtt->num_fences)
|
||||
if (intel_gt_support_legacy_fencing(to_gt(i915)))
|
||||
snb_fbc_program_fence(fbc);
|
||||
|
||||
intel_de_write(i915, ILK_DPFC_CONTROL(fbc->id),
|
||||
@ -713,7 +716,7 @@ static u64 intel_fbc_stolen_end(struct drm_i915_private *i915)
|
||||
* underruns, even if that range is not reserved by the BIOS. */
|
||||
if (IS_BROADWELL(i915) ||
|
||||
(DISPLAY_VER(i915) == 9 && !IS_BROXTON(i915)))
|
||||
end = resource_size(&i915->dsm.stolen) - 8 * 1024 * 1024;
|
||||
end = i915_gem_stolen_area_size(i915) - 8 * 1024 * 1024;
|
||||
else
|
||||
end = U64_MAX;
|
||||
|
||||
@ -770,9 +773,9 @@ static int intel_fbc_alloc_cfb(struct intel_fbc *fbc,
|
||||
int ret;
|
||||
|
||||
drm_WARN_ON(&i915->drm,
|
||||
drm_mm_node_allocated(&fbc->compressed_fb));
|
||||
i915_gem_stolen_node_allocated(&fbc->compressed_fb));
|
||||
drm_WARN_ON(&i915->drm,
|
||||
drm_mm_node_allocated(&fbc->compressed_llb));
|
||||
i915_gem_stolen_node_allocated(&fbc->compressed_llb));
|
||||
|
||||
if (DISPLAY_VER(i915) < 5 && !IS_G4X(i915)) {
|
||||
ret = i915_gem_stolen_insert_node(i915, &fbc->compressed_llb,
|
||||
@ -792,15 +795,14 @@ static int intel_fbc_alloc_cfb(struct intel_fbc *fbc,
|
||||
|
||||
drm_dbg_kms(&i915->drm,
|
||||
"reserved %llu bytes of contiguous stolen space for FBC, limit: %d\n",
|
||||
fbc->compressed_fb.size, fbc->limit);
|
||||
|
||||
i915_gem_stolen_node_size(&fbc->compressed_fb), fbc->limit);
|
||||
return 0;
|
||||
|
||||
err_llb:
|
||||
if (drm_mm_node_allocated(&fbc->compressed_llb))
|
||||
if (i915_gem_stolen_node_allocated(&fbc->compressed_llb))
|
||||
i915_gem_stolen_remove_node(i915, &fbc->compressed_llb);
|
||||
err:
|
||||
if (drm_mm_initialized(&i915->mm.stolen))
|
||||
if (i915_gem_stolen_initialized(i915))
|
||||
drm_info_once(&i915->drm, "not enough stolen space for compressed buffer (need %d more bytes), disabling. Hint: you may be able to increase stolen memory size in the BIOS to avoid this.\n", size);
|
||||
return -ENOSPC;
|
||||
}
|
||||
@ -825,9 +827,9 @@ static void __intel_fbc_cleanup_cfb(struct intel_fbc *fbc)
|
||||
if (WARN_ON(intel_fbc_hw_is_active(fbc)))
|
||||
return;
|
||||
|
||||
if (drm_mm_node_allocated(&fbc->compressed_llb))
|
||||
if (i915_gem_stolen_node_allocated(&fbc->compressed_llb))
|
||||
i915_gem_stolen_remove_node(i915, &fbc->compressed_llb);
|
||||
if (drm_mm_node_allocated(&fbc->compressed_fb))
|
||||
if (i915_gem_stolen_node_allocated(&fbc->compressed_fb))
|
||||
i915_gem_stolen_remove_node(i915, &fbc->compressed_fb);
|
||||
}
|
||||
|
||||
@ -990,11 +992,10 @@ static void intel_fbc_update_state(struct intel_atomic_state *state,
|
||||
fbc_state->fence_y_offset = intel_plane_fence_y_offset(plane_state);
|
||||
|
||||
drm_WARN_ON(&i915->drm, plane_state->flags & PLANE_HAS_FENCE &&
|
||||
!plane_state->ggtt_vma->fence);
|
||||
!intel_gt_support_legacy_fencing(to_gt(i915)));
|
||||
|
||||
if (plane_state->flags & PLANE_HAS_FENCE &&
|
||||
plane_state->ggtt_vma->fence)
|
||||
fbc_state->fence_id = plane_state->ggtt_vma->fence->id;
|
||||
if (plane_state->flags & PLANE_HAS_FENCE)
|
||||
fbc_state->fence_id = i915_vma_fence_id(plane_state->ggtt_vma);
|
||||
else
|
||||
fbc_state->fence_id = -1;
|
||||
|
||||
@ -1021,7 +1022,7 @@ static bool intel_fbc_is_fence_ok(const struct intel_plane_state *plane_state)
|
||||
*/
|
||||
return DISPLAY_VER(i915) >= 9 ||
|
||||
(plane_state->flags & PLANE_HAS_FENCE &&
|
||||
plane_state->ggtt_vma->fence);
|
||||
i915_vma_fence_id(plane_state->ggtt_vma) != -1);
|
||||
}
|
||||
|
||||
static bool intel_fbc_is_cfb_ok(const struct intel_plane_state *plane_state)
|
||||
@ -1030,7 +1031,8 @@ static bool intel_fbc_is_cfb_ok(const struct intel_plane_state *plane_state)
|
||||
struct intel_fbc *fbc = plane->fbc;
|
||||
|
||||
return intel_fbc_min_limit(plane_state) <= fbc->limit &&
|
||||
intel_fbc_cfb_size(plane_state) <= fbc->compressed_fb.size * fbc->limit;
|
||||
intel_fbc_cfb_size(plane_state) <= fbc->limit *
|
||||
i915_gem_stolen_node_size(&fbc->compressed_fb);
|
||||
}
|
||||
|
||||
static bool intel_fbc_is_ok(const struct intel_plane_state *plane_state)
|
||||
@ -1054,6 +1056,11 @@ static int intel_fbc_check_plane(struct intel_atomic_state *state,
|
||||
if (!fbc)
|
||||
return 0;
|
||||
|
||||
if (!i915_gem_stolen_initialized(i915)) {
|
||||
plane_state->no_fbc_reason = "stolen memory not initialised";
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (intel_vgpu_active(i915)) {
|
||||
plane_state->no_fbc_reason = "VGPU active";
|
||||
return 0;
|
||||
@ -1707,9 +1714,6 @@ void intel_fbc_init(struct drm_i915_private *i915)
|
||||
{
|
||||
enum intel_fbc_id fbc_id;
|
||||
|
||||
if (!drm_mm_initialized(&i915->mm.stolen))
|
||||
DISPLAY_RUNTIME_INFO(i915)->fbc_mask = 0;
|
||||
|
||||
if (need_fbc_vtd_wa(i915))
|
||||
DISPLAY_RUNTIME_INFO(i915)->fbc_mask = 0;
|
||||
|
||||
|
@ -2894,7 +2894,8 @@ static u8 intel_hdmi_default_ddc_pin(struct intel_encoder *encoder)
|
||||
ddc_pin = rkl_port_to_ddc_pin(dev_priv, port);
|
||||
else if (DISPLAY_VER(dev_priv) == 9 && HAS_PCH_TGP(dev_priv))
|
||||
ddc_pin = gen9bc_tgp_port_to_ddc_pin(dev_priv, port);
|
||||
else if (IS_JSL_EHL(dev_priv) && HAS_PCH_TGP(dev_priv))
|
||||
else if ((IS_JASPERLAKE(dev_priv) || IS_ELKHARTLAKE(dev_priv)) &&
|
||||
HAS_PCH_TGP(dev_priv))
|
||||
ddc_pin = mcc_port_to_ddc_pin(dev_priv, port);
|
||||
else if (INTEL_PCH_TYPE(dev_priv) >= PCH_ICP)
|
||||
ddc_pin = icl_port_to_ddc_pin(dev_priv, port);
|
||||
|
@ -423,7 +423,7 @@ static bool wrpll_uses_pch_ssc(struct drm_i915_private *dev_priv,
|
||||
if ((ctl & WRPLL_REF_MASK) == WRPLL_REF_PCH_SSC)
|
||||
return true;
|
||||
|
||||
if ((IS_BROADWELL(dev_priv) || IS_HSW_ULT(dev_priv)) &&
|
||||
if ((IS_BROADWELL(dev_priv) || IS_HASWELL_ULT(dev_priv)) &&
|
||||
(ctl & WRPLL_REF_MASK) == WRPLL_REF_MUXED_SSC_BDW &&
|
||||
(fuse_strap & HSW_CPU_SSC_ENABLE) == 0)
|
||||
return true;
|
||||
|
@ -748,7 +748,7 @@ static void hsw_activate_psr2(struct intel_dp *intel_dp)
|
||||
}
|
||||
|
||||
/* Wa_22012278275:adl-p */
|
||||
if (IS_ADLP_DISPLAY_STEP(dev_priv, STEP_A0, STEP_E0)) {
|
||||
if (IS_ALDERLAKE_P(dev_priv) && IS_DISPLAY_STEP(dev_priv, STEP_A0, STEP_E0)) {
|
||||
static const u8 map[] = {
|
||||
2, /* 5 lines */
|
||||
1, /* 6 lines */
|
||||
@ -918,7 +918,7 @@ tgl_dc3co_exitline_compute_config(struct intel_dp *intel_dp,
|
||||
return;
|
||||
|
||||
/* Wa_16011303918:adl-p */
|
||||
if (IS_ADLP_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0))
|
||||
if (IS_ALDERLAKE_P(dev_priv) && IS_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0))
|
||||
return;
|
||||
|
||||
/*
|
||||
@ -1074,7 +1074,7 @@ static bool intel_psr2_config_valid(struct intel_dp *intel_dp,
|
||||
return false;
|
||||
|
||||
/* JSL and EHL only supports eDP 1.3 */
|
||||
if (IS_JSL_EHL(dev_priv)) {
|
||||
if (IS_JASPERLAKE(dev_priv) || IS_ELKHARTLAKE(dev_priv)) {
|
||||
drm_dbg_kms(&dev_priv->drm, "PSR2 not supported by phy\n");
|
||||
return false;
|
||||
}
|
||||
@ -1086,7 +1086,7 @@ static bool intel_psr2_config_valid(struct intel_dp *intel_dp,
|
||||
return false;
|
||||
}
|
||||
|
||||
if (IS_ADLP_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0)) {
|
||||
if (IS_ALDERLAKE_P(dev_priv) && IS_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0)) {
|
||||
drm_dbg_kms(&dev_priv->drm, "PSR2 not completely functional in this stepping\n");
|
||||
return false;
|
||||
}
|
||||
@ -1144,7 +1144,7 @@ static bool intel_psr2_config_valid(struct intel_dp *intel_dp,
|
||||
|
||||
/* Wa_16011303918:adl-p */
|
||||
if (crtc_state->vrr.enable &&
|
||||
IS_ADLP_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0)) {
|
||||
IS_ALDERLAKE_P(dev_priv) && IS_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0)) {
|
||||
drm_dbg_kms(&dev_priv->drm,
|
||||
"PSR2 not enabled, not compatible with HW stepping + VRR\n");
|
||||
return false;
|
||||
|
@ -2097,7 +2097,7 @@ intel_sdvo_tmds_sink_detect(struct drm_connector *connector)
|
||||
const struct edid *edid = drm_edid_raw(drm_edid);
|
||||
|
||||
/* DDC bus is shared, match EDID to connector type */
|
||||
if (edid->input & DRM_EDID_INPUT_DIGITAL)
|
||||
if (edid && edid->input & DRM_EDID_INPUT_DIGITAL)
|
||||
status = connector_status_connected;
|
||||
else
|
||||
status = connector_status_disconnected;
|
||||
@ -2752,7 +2752,7 @@ static struct intel_sdvo_connector *intel_sdvo_connector_alloc(void)
|
||||
__drm_atomic_helper_connector_reset(&sdvo_connector->base.base,
|
||||
&conn_state->base.base);
|
||||
|
||||
INIT_LIST_HEAD(&sdvo_connector->base.panel.fixed_modes);
|
||||
intel_panel_init_alloc(&sdvo_connector->base);
|
||||
|
||||
return sdvo_connector;
|
||||
}
|
||||
|
@ -2174,7 +2174,7 @@ static bool skl_plane_has_rc_ccs(struct drm_i915_private *i915,
|
||||
return false;
|
||||
|
||||
/* Wa_22011186057 */
|
||||
if (IS_ADLP_DISPLAY_STEP(i915, STEP_A0, STEP_B0))
|
||||
if (IS_ALDERLAKE_P(i915) && IS_DISPLAY_STEP(i915, STEP_A0, STEP_B0))
|
||||
return false;
|
||||
|
||||
if (DISPLAY_VER(i915) >= 11)
|
||||
@ -2196,11 +2196,11 @@ static bool gen12_plane_has_mc_ccs(struct drm_i915_private *i915,
|
||||
|
||||
/* Wa_14010477008 */
|
||||
if (IS_DG1(i915) || IS_ROCKETLAKE(i915) ||
|
||||
IS_TGL_DISPLAY_STEP(i915, STEP_A0, STEP_D0))
|
||||
(IS_TIGERLAKE(i915) && IS_DISPLAY_STEP(i915, STEP_A0, STEP_D0)))
|
||||
return false;
|
||||
|
||||
/* Wa_22011186057 */
|
||||
if (IS_ADLP_DISPLAY_STEP(i915, STEP_A0, STEP_B0))
|
||||
if (IS_ALDERLAKE_P(i915) && IS_DISPLAY_STEP(i915, STEP_A0, STEP_B0))
|
||||
return false;
|
||||
|
||||
/* Wa_14013215631 */
|
||||
|
@ -226,7 +226,7 @@ bool i915_gem_object_can_bypass_llc(struct drm_i915_gem_object *obj)
|
||||
* it, but since i915 takes the stance of always zeroing memory before
|
||||
* handing it to userspace, we need to prevent this.
|
||||
*/
|
||||
return IS_JSL_EHL(i915);
|
||||
return (IS_JASPERLAKE(i915) || IS_ELKHARTLAKE(i915));
|
||||
}
|
||||
|
||||
static void i915_gem_close_object(struct drm_gem_object *gem, struct drm_file *file)
|
||||
|
@ -974,3 +974,39 @@ bool i915_gem_object_is_stolen(const struct drm_i915_gem_object *obj)
|
||||
{
|
||||
return obj->ops == &i915_gem_object_stolen_ops;
|
||||
}
|
||||
|
||||
bool i915_gem_stolen_initialized(const struct drm_i915_private *i915)
|
||||
{
|
||||
return drm_mm_initialized(&i915->mm.stolen);
|
||||
}
|
||||
|
||||
u64 i915_gem_stolen_area_address(const struct drm_i915_private *i915)
|
||||
{
|
||||
return i915->dsm.stolen.start;
|
||||
}
|
||||
|
||||
u64 i915_gem_stolen_area_size(const struct drm_i915_private *i915)
|
||||
{
|
||||
return resource_size(&i915->dsm.stolen);
|
||||
}
|
||||
|
||||
u64 i915_gem_stolen_node_address(const struct drm_i915_private *i915,
|
||||
const struct drm_mm_node *node)
|
||||
{
|
||||
return i915->dsm.stolen.start + i915_gem_stolen_node_offset(node);
|
||||
}
|
||||
|
||||
bool i915_gem_stolen_node_allocated(const struct drm_mm_node *node)
|
||||
{
|
||||
return drm_mm_node_allocated(node);
|
||||
}
|
||||
|
||||
u64 i915_gem_stolen_node_offset(const struct drm_mm_node *node)
|
||||
{
|
||||
return node->start;
|
||||
}
|
||||
|
||||
u64 i915_gem_stolen_node_size(const struct drm_mm_node *node)
|
||||
{
|
||||
return node->size;
|
||||
}
|
||||
|
@ -12,6 +12,8 @@ struct drm_i915_private;
|
||||
struct drm_mm_node;
|
||||
struct drm_i915_gem_object;
|
||||
|
||||
#define i915_stolen_fb drm_mm_node
|
||||
|
||||
int i915_gem_stolen_insert_node(struct drm_i915_private *dev_priv,
|
||||
struct drm_mm_node *node, u64 size,
|
||||
unsigned alignment);
|
||||
@ -36,4 +38,15 @@ bool i915_gem_object_is_stolen(const struct drm_i915_gem_object *obj);
|
||||
|
||||
#define I915_GEM_STOLEN_BIAS SZ_128K
|
||||
|
||||
bool i915_gem_stolen_initialized(const struct drm_i915_private *i915);
|
||||
u64 i915_gem_stolen_area_address(const struct drm_i915_private *i915);
|
||||
u64 i915_gem_stolen_area_size(const struct drm_i915_private *i915);
|
||||
|
||||
u64 i915_gem_stolen_node_address(const struct drm_i915_private *i915,
|
||||
const struct drm_mm_node *node);
|
||||
|
||||
bool i915_gem_stolen_node_allocated(const struct drm_mm_node *node);
|
||||
u64 i915_gem_stolen_node_offset(const struct drm_mm_node *node);
|
||||
u64 i915_gem_stolen_node_size(const struct drm_mm_node *node);
|
||||
|
||||
#endif /* __I915_GEM_STOLEN_H__ */
|
||||
|
@ -43,7 +43,7 @@ int gen8_emit_flush_rcs(struct i915_request *rq, u32 mode)
|
||||
vf_flush_wa = true;
|
||||
|
||||
/* WaForGAMHang:kbl */
|
||||
if (IS_KBL_GRAPHICS_STEP(rq->i915, 0, STEP_C0))
|
||||
if (IS_KABYLAKE(rq->i915) && IS_GRAPHICS_STEP(rq->i915, 0, STEP_C0))
|
||||
dc_flush_wa = true;
|
||||
}
|
||||
|
||||
|
@ -179,7 +179,7 @@ int intel_gt_init_hw(struct intel_gt *gt)
|
||||
if (IS_HASWELL(i915))
|
||||
intel_uncore_write(uncore,
|
||||
HSW_MI_PREDICATE_RESULT_2,
|
||||
IS_HSW_GT3(i915) ?
|
||||
IS_HASWELL_GT3(i915) ?
|
||||
LOWER_SLICE_ENABLED : LOWER_SLICE_DISABLED);
|
||||
|
||||
/* Apply the GT workarounds... */
|
||||
|
@ -309,4 +309,6 @@ enum intel_gt_scratch_field {
|
||||
INTEL_GT_SCRATCH_FIELD_COHERENTL3_WA = 256,
|
||||
};
|
||||
|
||||
#define intel_gt_support_legacy_fencing(gt) ((gt)->ggtt->num_fences > 0)
|
||||
|
||||
#endif /* __INTEL_GT_TYPES_H__ */
|
||||
|
@ -302,7 +302,7 @@ static void gen11_sseu_info_init(struct intel_gt *gt)
|
||||
u8 eu_en;
|
||||
u8 s_en;
|
||||
|
||||
if (IS_JSL_EHL(gt->i915))
|
||||
if (IS_JASPERLAKE(gt->i915) || IS_ELKHARTLAKE(gt->i915))
|
||||
intel_sseu_set_info(sseu, 1, 4, 8);
|
||||
else
|
||||
intel_sseu_set_info(sseu, 1, 8, 8);
|
||||
|
@ -420,7 +420,7 @@ static void bdw_ctx_workarounds_init(struct intel_engine_cs *engine,
|
||||
/* WaForceContextSaveRestoreNonCoherent:bdw */
|
||||
HDC_FORCE_CONTEXT_SAVE_RESTORE_NON_COHERENT |
|
||||
/* WaDisableFenceDestinationToSLM:bdw (pre-prod) */
|
||||
(IS_BDW_GT3(i915) ? HDC_FENCE_DEST_SLM_DISABLE : 0));
|
||||
(IS_BROADWELL_GT3(i915) ? HDC_FENCE_DEST_SLM_DISABLE : 0));
|
||||
}
|
||||
|
||||
static void chv_ctx_workarounds_init(struct intel_engine_cs *engine,
|
||||
@ -600,7 +600,7 @@ static void kbl_ctx_workarounds_init(struct intel_engine_cs *engine,
|
||||
gen9_ctx_workarounds_init(engine, wal);
|
||||
|
||||
/* WaToEnableHwFixForPushConstHWBug:kbl */
|
||||
if (IS_KBL_GRAPHICS_STEP(i915, STEP_C0, STEP_FOREVER))
|
||||
if (IS_KABYLAKE(i915) && IS_GRAPHICS_STEP(i915, STEP_C0, STEP_FOREVER))
|
||||
wa_masked_en(wal, COMMON_SLICE_CHICKEN2,
|
||||
GEN8_SBE_DISABLE_REPLAY_BUF_OPTIMIZATION);
|
||||
|
||||
@ -1192,7 +1192,7 @@ skl_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list *wal)
|
||||
GEN8_EU_GAUNIT_CLOCK_GATE_DISABLE);
|
||||
|
||||
/* WaInPlaceDecompressionHang:skl */
|
||||
if (IS_SKL_GRAPHICS_STEP(gt->i915, STEP_A0, STEP_H0))
|
||||
if (IS_SKYLAKE(gt->i915) && IS_GRAPHICS_STEP(gt->i915, STEP_A0, STEP_H0))
|
||||
wa_write_or(wal,
|
||||
GEN9_GAMT_ECO_REG_RW_IA,
|
||||
GAMT_ECO_ENABLE_IN_PLACE_DECOMPRESS);
|
||||
@ -1204,7 +1204,7 @@ kbl_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list *wal)
|
||||
gen9_gt_workarounds_init(gt, wal);
|
||||
|
||||
/* WaDisableDynamicCreditSharing:kbl */
|
||||
if (IS_KBL_GRAPHICS_STEP(gt->i915, 0, STEP_C0))
|
||||
if (IS_KABYLAKE(gt->i915) && IS_GRAPHICS_STEP(gt->i915, 0, STEP_C0))
|
||||
wa_write_or(wal,
|
||||
GAMT_CHKN_BIT_REG,
|
||||
GAMT_CHKN_DISABLE_DYNAMIC_CREDIT_SHARING);
|
||||
@ -1460,7 +1460,8 @@ icl_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list *wal)
|
||||
|
||||
/* Wa_1607087056:icl,ehl,jsl */
|
||||
if (IS_ICELAKE(i915) ||
|
||||
IS_JSL_EHL_GRAPHICS_STEP(i915, STEP_A0, STEP_B0))
|
||||
((IS_JASPERLAKE(i915) || IS_ELKHARTLAKE(i915)) &&
|
||||
IS_GRAPHICS_STEP(i915, STEP_A0, STEP_B0)))
|
||||
wa_write_or(wal,
|
||||
GEN11_SLICE_UNIT_LEVEL_CLKGATE,
|
||||
L3_CLKGATE_DIS | L3_CR2X_CLKGATE_DIS);
|
||||
@ -2945,7 +2946,7 @@ xcs_engine_wa_init(struct intel_engine_cs *engine, struct i915_wa_list *wal)
|
||||
struct drm_i915_private *i915 = engine->i915;
|
||||
|
||||
/* WaKBLVECSSemaphoreWaitPoll:kbl */
|
||||
if (IS_KBL_GRAPHICS_STEP(i915, STEP_A0, STEP_F0)) {
|
||||
if (IS_KABYLAKE(i915) && IS_GRAPHICS_STEP(i915, STEP_A0, STEP_F0)) {
|
||||
wa_write(wal,
|
||||
RING_SEMA_WAIT_POLL(engine->mmio_base),
|
||||
1);
|
||||
|
@ -94,7 +94,7 @@ static int guc_hwconfig_fill_buffer(struct intel_guc *guc, struct intel_hwconfig
|
||||
|
||||
static bool has_table(struct drm_i915_private *i915)
|
||||
{
|
||||
if (IS_ALDERLAKE_P(i915) && !IS_ADLP_N(i915))
|
||||
if (IS_ALDERLAKE_P(i915) && !IS_ALDERLAKE_P_N(i915))
|
||||
return true;
|
||||
if (GRAPHICS_VER_FULL(i915) >= IP_VER(12, 55))
|
||||
return true;
|
||||
|
@ -43,7 +43,7 @@ static void uc_expand_default_options(struct intel_uc *uc)
|
||||
}
|
||||
|
||||
/* Intermediate platforms are HuC authentication only */
|
||||
if (IS_ALDERLAKE_S(i915) && !IS_ADLS_RPLS(i915)) {
|
||||
if (IS_ALDERLAKE_S(i915) && !IS_RAPTORLAKE_S(i915)) {
|
||||
i915->params.enable_guc = ENABLE_GUC_LOAD_HUC;
|
||||
return;
|
||||
}
|
||||
|
@ -279,7 +279,7 @@ __uc_fw_auto_select(struct drm_i915_private *i915, struct intel_uc_fw *uc_fw)
|
||||
* ADL-S, otherwise the GuC might attempt to fetch a config table that
|
||||
* does not exist.
|
||||
*/
|
||||
if (IS_ADLP_N(i915))
|
||||
if (IS_ALDERLAKE_P_N(i915))
|
||||
p = INTEL_ALDERLAKE_S;
|
||||
|
||||
GEM_BUG_ON(uc_fw->type >= ARRAY_SIZE(blobs_all));
|
||||
|
@ -175,7 +175,7 @@ static void intel_detect_preproduction_hw(struct drm_i915_private *dev_priv)
|
||||
{
|
||||
bool pre = false;
|
||||
|
||||
pre |= IS_HSW_EARLY_SDV(dev_priv);
|
||||
pre |= IS_HASWELL_EARLY_SDV(dev_priv);
|
||||
pre |= IS_SKYLAKE(dev_priv) && INTEL_REVID(dev_priv) < 0x6;
|
||||
pre |= IS_BROXTON(dev_priv) && INTEL_REVID(dev_priv) < 0xA;
|
||||
pre |= IS_KABYLAKE(dev_priv) && INTEL_REVID(dev_priv) < 0x1;
|
||||
|
@ -561,8 +561,8 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915,
|
||||
#define IS_COFFEELAKE(i915) IS_PLATFORM(i915, INTEL_COFFEELAKE)
|
||||
#define IS_COMETLAKE(i915) IS_PLATFORM(i915, INTEL_COMETLAKE)
|
||||
#define IS_ICELAKE(i915) IS_PLATFORM(i915, INTEL_ICELAKE)
|
||||
#define IS_JSL_EHL(i915) (IS_PLATFORM(i915, INTEL_JASPERLAKE) || \
|
||||
IS_PLATFORM(i915, INTEL_ELKHARTLAKE))
|
||||
#define IS_JASPERLAKE(i915) IS_PLATFORM(i915, INTEL_JASPERLAKE)
|
||||
#define IS_ELKHARTLAKE(i915) IS_PLATFORM(i915, INTEL_ELKHARTLAKE)
|
||||
#define IS_TIGERLAKE(i915) IS_PLATFORM(i915, INTEL_TIGERLAKE)
|
||||
#define IS_ROCKETLAKE(i915) IS_PLATFORM(i915, INTEL_ROCKETLAKE)
|
||||
#define IS_DG1(i915) IS_PLATFORM(i915, INTEL_DG1)
|
||||
@ -583,105 +583,77 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915,
|
||||
IS_SUBPLATFORM(i915, INTEL_DG2, INTEL_SUBPLATFORM_G11)
|
||||
#define IS_DG2_G12(i915) \
|
||||
IS_SUBPLATFORM(i915, INTEL_DG2, INTEL_SUBPLATFORM_G12)
|
||||
#define IS_ADLS_RPLS(i915) \
|
||||
#define IS_RAPTORLAKE_S(i915) \
|
||||
IS_SUBPLATFORM(i915, INTEL_ALDERLAKE_S, INTEL_SUBPLATFORM_RPL)
|
||||
#define IS_ADLP_N(i915) \
|
||||
#define IS_ALDERLAKE_P_N(i915) \
|
||||
IS_SUBPLATFORM(i915, INTEL_ALDERLAKE_P, INTEL_SUBPLATFORM_N)
|
||||
#define IS_ADLP_RPLP(i915) \
|
||||
#define IS_RAPTORLAKE_P(i915) \
|
||||
IS_SUBPLATFORM(i915, INTEL_ALDERLAKE_P, INTEL_SUBPLATFORM_RPL)
|
||||
#define IS_ADLP_RPLU(i915) \
|
||||
#define IS_RAPTORLAKE_U(i915) \
|
||||
IS_SUBPLATFORM(i915, INTEL_ALDERLAKE_P, INTEL_SUBPLATFORM_RPLU)
|
||||
#define IS_HSW_EARLY_SDV(i915) (IS_HASWELL(i915) && \
|
||||
#define IS_HASWELL_EARLY_SDV(i915) (IS_HASWELL(i915) && \
|
||||
(INTEL_DEVID(i915) & 0xFF00) == 0x0C00)
|
||||
#define IS_BDW_ULT(i915) \
|
||||
#define IS_BROADWELL_ULT(i915) \
|
||||
IS_SUBPLATFORM(i915, INTEL_BROADWELL, INTEL_SUBPLATFORM_ULT)
|
||||
#define IS_BDW_ULX(i915) \
|
||||
#define IS_BROADWELL_ULX(i915) \
|
||||
IS_SUBPLATFORM(i915, INTEL_BROADWELL, INTEL_SUBPLATFORM_ULX)
|
||||
#define IS_BDW_GT3(i915) (IS_BROADWELL(i915) && \
|
||||
#define IS_BROADWELL_GT3(i915) (IS_BROADWELL(i915) && \
|
||||
INTEL_INFO(i915)->gt == 3)
|
||||
#define IS_HSW_ULT(i915) \
|
||||
#define IS_HASWELL_ULT(i915) \
|
||||
IS_SUBPLATFORM(i915, INTEL_HASWELL, INTEL_SUBPLATFORM_ULT)
|
||||
#define IS_HSW_GT3(i915) (IS_HASWELL(i915) && \
|
||||
#define IS_HASWELL_GT3(i915) (IS_HASWELL(i915) && \
|
||||
INTEL_INFO(i915)->gt == 3)
|
||||
#define IS_HSW_GT1(i915) (IS_HASWELL(i915) && \
|
||||
#define IS_HASWELL_GT1(i915) (IS_HASWELL(i915) && \
|
||||
INTEL_INFO(i915)->gt == 1)
|
||||
/* ULX machines are also considered ULT. */
|
||||
#define IS_HSW_ULX(i915) \
|
||||
#define IS_HASWELL_ULX(i915) \
|
||||
IS_SUBPLATFORM(i915, INTEL_HASWELL, INTEL_SUBPLATFORM_ULX)
|
||||
#define IS_SKL_ULT(i915) \
|
||||
#define IS_SKYLAKE_ULT(i915) \
|
||||
IS_SUBPLATFORM(i915, INTEL_SKYLAKE, INTEL_SUBPLATFORM_ULT)
|
||||
#define IS_SKL_ULX(i915) \
|
||||
#define IS_SKYLAKE_ULX(i915) \
|
||||
IS_SUBPLATFORM(i915, INTEL_SKYLAKE, INTEL_SUBPLATFORM_ULX)
|
||||
#define IS_KBL_ULT(i915) \
|
||||
#define IS_KABYLAKE_ULT(i915) \
|
||||
IS_SUBPLATFORM(i915, INTEL_KABYLAKE, INTEL_SUBPLATFORM_ULT)
|
||||
#define IS_KBL_ULX(i915) \
|
||||
#define IS_KABYLAKE_ULX(i915) \
|
||||
IS_SUBPLATFORM(i915, INTEL_KABYLAKE, INTEL_SUBPLATFORM_ULX)
|
||||
#define IS_SKL_GT2(i915) (IS_SKYLAKE(i915) && \
|
||||
#define IS_SKYLAKE_GT2(i915) (IS_SKYLAKE(i915) && \
|
||||
INTEL_INFO(i915)->gt == 2)
|
||||
#define IS_SKL_GT3(i915) (IS_SKYLAKE(i915) && \
|
||||
#define IS_SKYLAKE_GT3(i915) (IS_SKYLAKE(i915) && \
|
||||
INTEL_INFO(i915)->gt == 3)
|
||||
#define IS_SKL_GT4(i915) (IS_SKYLAKE(i915) && \
|
||||
#define IS_SKYLAKE_GT4(i915) (IS_SKYLAKE(i915) && \
|
||||
INTEL_INFO(i915)->gt == 4)
|
||||
#define IS_KBL_GT2(i915) (IS_KABYLAKE(i915) && \
|
||||
#define IS_KABYLAKE_GT2(i915) (IS_KABYLAKE(i915) && \
|
||||
INTEL_INFO(i915)->gt == 2)
|
||||
#define IS_KBL_GT3(i915) (IS_KABYLAKE(i915) && \
|
||||
#define IS_KABYLAKE_GT3(i915) (IS_KABYLAKE(i915) && \
|
||||
INTEL_INFO(i915)->gt == 3)
|
||||
#define IS_CFL_ULT(i915) \
|
||||
#define IS_COFFEELAKE_ULT(i915) \
|
||||
IS_SUBPLATFORM(i915, INTEL_COFFEELAKE, INTEL_SUBPLATFORM_ULT)
|
||||
#define IS_CFL_ULX(i915) \
|
||||
#define IS_COFFEELAKE_ULX(i915) \
|
||||
IS_SUBPLATFORM(i915, INTEL_COFFEELAKE, INTEL_SUBPLATFORM_ULX)
|
||||
#define IS_CFL_GT2(i915) (IS_COFFEELAKE(i915) && \
|
||||
#define IS_COFFEELAKE_GT2(i915) (IS_COFFEELAKE(i915) && \
|
||||
INTEL_INFO(i915)->gt == 2)
|
||||
#define IS_CFL_GT3(i915) (IS_COFFEELAKE(i915) && \
|
||||
#define IS_COFFEELAKE_GT3(i915) (IS_COFFEELAKE(i915) && \
|
||||
INTEL_INFO(i915)->gt == 3)
|
||||
|
||||
#define IS_CML_ULT(i915) \
|
||||
#define IS_COMETLAKE_ULT(i915) \
|
||||
IS_SUBPLATFORM(i915, INTEL_COMETLAKE, INTEL_SUBPLATFORM_ULT)
|
||||
#define IS_CML_ULX(i915) \
|
||||
#define IS_COMETLAKE_ULX(i915) \
|
||||
IS_SUBPLATFORM(i915, INTEL_COMETLAKE, INTEL_SUBPLATFORM_ULX)
|
||||
#define IS_CML_GT2(i915) (IS_COMETLAKE(i915) && \
|
||||
#define IS_COMETLAKE_GT2(i915) (IS_COMETLAKE(i915) && \
|
||||
INTEL_INFO(i915)->gt == 2)
|
||||
|
||||
#define IS_ICL_WITH_PORT_F(i915) \
|
||||
IS_SUBPLATFORM(i915, INTEL_ICELAKE, INTEL_SUBPLATFORM_PORTF)
|
||||
|
||||
#define IS_TGL_UY(i915) \
|
||||
#define IS_TIGERLAKE_UY(i915) \
|
||||
IS_SUBPLATFORM(i915, INTEL_TIGERLAKE, INTEL_SUBPLATFORM_UY)
|
||||
|
||||
#define IS_SKL_GRAPHICS_STEP(p, since, until) (IS_SKYLAKE(p) && IS_GRAPHICS_STEP(p, since, until))
|
||||
|
||||
#define IS_KBL_GRAPHICS_STEP(i915, since, until) \
|
||||
(IS_KABYLAKE(i915) && IS_GRAPHICS_STEP(i915, since, until))
|
||||
#define IS_KBL_DISPLAY_STEP(i915, since, until) \
|
||||
(IS_KABYLAKE(i915) && IS_DISPLAY_STEP(i915, since, until))
|
||||
|
||||
#define IS_JSL_EHL_GRAPHICS_STEP(p, since, until) \
|
||||
(IS_JSL_EHL(p) && IS_GRAPHICS_STEP(p, since, until))
|
||||
#define IS_JSL_EHL_DISPLAY_STEP(p, since, until) \
|
||||
(IS_JSL_EHL(p) && IS_DISPLAY_STEP(p, since, until))
|
||||
|
||||
#define IS_TGL_DISPLAY_STEP(__i915, since, until) \
|
||||
(IS_TIGERLAKE(__i915) && \
|
||||
IS_DISPLAY_STEP(__i915, since, until))
|
||||
|
||||
#define IS_RKL_DISPLAY_STEP(p, since, until) \
|
||||
(IS_ROCKETLAKE(p) && IS_DISPLAY_STEP(p, since, until))
|
||||
|
||||
#define IS_ADLS_DISPLAY_STEP(__i915, since, until) \
|
||||
(IS_ALDERLAKE_S(__i915) && \
|
||||
IS_DISPLAY_STEP(__i915, since, until))
|
||||
|
||||
#define IS_ADLS_GRAPHICS_STEP(__i915, since, until) \
|
||||
(IS_ALDERLAKE_S(__i915) && \
|
||||
IS_GRAPHICS_STEP(__i915, since, until))
|
||||
|
||||
#define IS_ADLP_DISPLAY_STEP(__i915, since, until) \
|
||||
(IS_ALDERLAKE_P(__i915) && \
|
||||
IS_DISPLAY_STEP(__i915, since, until))
|
||||
|
||||
#define IS_ADLP_GRAPHICS_STEP(__i915, since, until) \
|
||||
(IS_ALDERLAKE_P(__i915) && \
|
||||
IS_GRAPHICS_STEP(__i915, since, until))
|
||||
|
||||
#define IS_XEHPSDV_GRAPHICS_STEP(__i915, since, until) \
|
||||
(IS_XEHPSDV(__i915) && IS_GRAPHICS_STEP(__i915, since, until))
|
||||
@ -799,7 +771,7 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915,
|
||||
|
||||
/* WaRsDisableCoarsePowerGating:skl,cnl */
|
||||
#define NEEDS_WaRsDisableCoarsePowerGating(i915) \
|
||||
(IS_SKL_GT3(i915) || IS_SKL_GT4(i915))
|
||||
(IS_SKYLAKE_GT3(i915) || IS_SKYLAKE_GT4(i915))
|
||||
|
||||
/* With the 945 and later, Y tiling got adjusted so that it was 32 128-byte
|
||||
* rows, which changed the alignment requirements and fence programming.
|
||||
@ -860,7 +832,7 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915,
|
||||
|
||||
/* DPF == dynamic parity feature */
|
||||
#define HAS_L3_DPF(i915) (INTEL_INFO(i915)->has_l3_dpf)
|
||||
#define NUM_L3_SLICES(i915) (IS_HSW_GT3(i915) ? \
|
||||
#define NUM_L3_SLICES(i915) (IS_HASWELL_GT3(i915) ? \
|
||||
2 : HAS_L3_DPF(i915))
|
||||
|
||||
/* Only valid when HAS_DISPLAY() is true */
|
||||
|
@ -772,45 +772,9 @@ static void cherryview_irq_reset(struct drm_i915_private *dev_priv)
|
||||
|
||||
static void ilk_irq_postinstall(struct drm_i915_private *dev_priv)
|
||||
{
|
||||
struct intel_uncore *uncore = &dev_priv->uncore;
|
||||
u32 display_mask, extra_mask;
|
||||
|
||||
if (GRAPHICS_VER(dev_priv) >= 7) {
|
||||
display_mask = (DE_MASTER_IRQ_CONTROL | DE_GSE_IVB |
|
||||
DE_PCH_EVENT_IVB | DE_AUX_CHANNEL_A_IVB);
|
||||
extra_mask = (DE_PIPEC_VBLANK_IVB | DE_PIPEB_VBLANK_IVB |
|
||||
DE_PIPEA_VBLANK_IVB | DE_ERR_INT_IVB |
|
||||
DE_PLANE_FLIP_DONE_IVB(PLANE_C) |
|
||||
DE_PLANE_FLIP_DONE_IVB(PLANE_B) |
|
||||
DE_PLANE_FLIP_DONE_IVB(PLANE_A) |
|
||||
DE_DP_A_HOTPLUG_IVB);
|
||||
} else {
|
||||
display_mask = (DE_MASTER_IRQ_CONTROL | DE_GSE | DE_PCH_EVENT |
|
||||
DE_AUX_CHANNEL_A | DE_PIPEB_CRC_DONE |
|
||||
DE_PIPEA_CRC_DONE | DE_POISON);
|
||||
extra_mask = (DE_PIPEA_VBLANK | DE_PIPEB_VBLANK |
|
||||
DE_PIPEB_FIFO_UNDERRUN | DE_PIPEA_FIFO_UNDERRUN |
|
||||
DE_PLANE_FLIP_DONE(PLANE_A) |
|
||||
DE_PLANE_FLIP_DONE(PLANE_B) |
|
||||
DE_DP_A_HOTPLUG);
|
||||
}
|
||||
|
||||
if (IS_HASWELL(dev_priv)) {
|
||||
gen3_assert_iir_is_zero(uncore, EDP_PSR_IIR);
|
||||
display_mask |= DE_EDP_PSR_INT_HSW;
|
||||
}
|
||||
|
||||
if (IS_IRONLAKE_M(dev_priv))
|
||||
extra_mask |= DE_PCU_EVENT;
|
||||
|
||||
dev_priv->irq_mask = ~display_mask;
|
||||
|
||||
ibx_irq_postinstall(dev_priv);
|
||||
|
||||
gen5_gt_irq_postinstall(to_gt(dev_priv));
|
||||
|
||||
GEN3_IRQ_INIT(uncore, DE, dev_priv->irq_mask,
|
||||
display_mask | extra_mask);
|
||||
ilk_de_irq_postinstall(dev_priv);
|
||||
}
|
||||
|
||||
static void valleyview_irq_postinstall(struct drm_i915_private *dev_priv)
|
||||
@ -828,11 +792,6 @@ static void valleyview_irq_postinstall(struct drm_i915_private *dev_priv)
|
||||
|
||||
static void gen8_irq_postinstall(struct drm_i915_private *dev_priv)
|
||||
{
|
||||
if (INTEL_PCH_TYPE(dev_priv) >= PCH_ICP)
|
||||
icp_irq_postinstall(dev_priv);
|
||||
else if (HAS_PCH_SPLIT(dev_priv))
|
||||
ibx_irq_postinstall(dev_priv);
|
||||
|
||||
gen8_gt_irq_postinstall(to_gt(dev_priv));
|
||||
gen8_de_irq_postinstall(dev_priv);
|
||||
|
||||
@ -845,9 +804,6 @@ static void gen11_irq_postinstall(struct drm_i915_private *dev_priv)
|
||||
struct intel_uncore *uncore = gt->uncore;
|
||||
u32 gu_misc_masked = GEN11_GU_MISC_GSE;
|
||||
|
||||
if (INTEL_PCH_TYPE(dev_priv) >= PCH_ICP)
|
||||
icp_irq_postinstall(dev_priv);
|
||||
|
||||
gen11_gt_irq_postinstall(gt);
|
||||
gen11_de_irq_postinstall(dev_priv);
|
||||
|
||||
@ -869,16 +825,7 @@ static void dg1_irq_postinstall(struct drm_i915_private *dev_priv)
|
||||
|
||||
GEN3_IRQ_INIT(uncore, GEN11_GU_MISC_, ~gu_misc_masked, gu_misc_masked);
|
||||
|
||||
if (HAS_DISPLAY(dev_priv)) {
|
||||
if (DISPLAY_VER(dev_priv) >= 14)
|
||||
mtp_irq_postinstall(dev_priv);
|
||||
else
|
||||
icp_irq_postinstall(dev_priv);
|
||||
|
||||
gen8_de_irq_postinstall(dev_priv);
|
||||
intel_uncore_write(&dev_priv->uncore, GEN11_DISPLAY_INT_CTL,
|
||||
GEN11_DISPLAY_IRQ_ENABLE);
|
||||
}
|
||||
dg1_de_irq_postinstall(dev_priv);
|
||||
|
||||
dg1_master_intr_enable(intel_uncore_regs(uncore));
|
||||
intel_uncore_posting_read(uncore, DG1_MSTR_TILE_INTR);
|
||||
@ -1343,23 +1290,6 @@ void intel_irq_init(struct drm_i915_private *dev_priv)
|
||||
/* pre-gen11 the guc irqs bits are in the upper 16 bits of the pm reg */
|
||||
if (HAS_GT_UC(dev_priv) && GRAPHICS_VER(dev_priv) < 11)
|
||||
to_gt(dev_priv)->pm_guc_events = GUC_INTR_GUC2HOST << 16;
|
||||
|
||||
if (!HAS_DISPLAY(dev_priv))
|
||||
return;
|
||||
|
||||
dev_priv->drm.vblank_disable_immediate = true;
|
||||
|
||||
/* Most platforms treat the display irq block as an always-on
|
||||
* power domain. vlv/chv can disable it at runtime and need
|
||||
* special care to avoid writing any of the display block registers
|
||||
* outside of the power domain. We defer setting up the display irqs
|
||||
* in this case to the runtime pm.
|
||||
*/
|
||||
dev_priv->display_irqs_enabled = true;
|
||||
if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
|
||||
dev_priv->display_irqs_enabled = false;
|
||||
|
||||
intel_hotplug_irq_init(dev_priv);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -418,6 +418,11 @@ i915_vma_unpin_fence(struct i915_vma *vma)
|
||||
__i915_vma_unpin_fence(vma);
|
||||
}
|
||||
|
||||
static inline int i915_vma_fence_id(const struct i915_vma *vma)
|
||||
{
|
||||
return vma->fence ? vma->fence->id : -1;
|
||||
}
|
||||
|
||||
void i915_vma_parked(struct intel_gt *gt);
|
||||
|
||||
static inline bool i915_vma_is_scanout(const struct i915_vma *vma)
|
||||
|
@ -456,12 +456,12 @@ static void kbl_init_clock_gating(struct drm_i915_private *i915)
|
||||
intel_uncore_rmw(&i915->uncore, FBC_LLC_READ_CTRL, 0, FBC_LLC_FULLY_OPEN);
|
||||
|
||||
/* WaDisableSDEUnitClockGating:kbl */
|
||||
if (IS_KBL_GRAPHICS_STEP(i915, 0, STEP_C0))
|
||||
if (IS_KABYLAKE(i915) && IS_GRAPHICS_STEP(i915, 0, STEP_C0))
|
||||
intel_uncore_rmw(&i915->uncore, GEN8_UCGCTL6,
|
||||
0, GEN8_SDEUNIT_CLOCK_GATE_DISABLE);
|
||||
|
||||
/* WaDisableGamClockGating:kbl */
|
||||
if (IS_KBL_GRAPHICS_STEP(i915, 0, STEP_C0))
|
||||
if (IS_KABYLAKE(i915) && IS_GRAPHICS_STEP(i915, 0, STEP_C0))
|
||||
intel_uncore_rmw(&i915->uncore, GEN6_UCGCTL1,
|
||||
0, GEN6_GAMUNIT_CLOCK_GATE_DISABLE);
|
||||
|
||||
|
@ -192,16 +192,16 @@ void intel_step_init(struct drm_i915_private *i915)
|
||||
} else if (IS_XEHPSDV(i915)) {
|
||||
revids = xehpsdv_revids;
|
||||
size = ARRAY_SIZE(xehpsdv_revids);
|
||||
} else if (IS_ADLP_N(i915)) {
|
||||
} else if (IS_ALDERLAKE_P_N(i915)) {
|
||||
revids = adlp_n_revids;
|
||||
size = ARRAY_SIZE(adlp_n_revids);
|
||||
} else if (IS_ADLP_RPLP(i915)) {
|
||||
} else if (IS_RAPTORLAKE_P(i915)) {
|
||||
revids = adlp_rplp_revids;
|
||||
size = ARRAY_SIZE(adlp_rplp_revids);
|
||||
} else if (IS_ALDERLAKE_P(i915)) {
|
||||
revids = adlp_revids;
|
||||
size = ARRAY_SIZE(adlp_revids);
|
||||
} else if (IS_ADLS_RPLS(i915)) {
|
||||
} else if (IS_RAPTORLAKE_S(i915)) {
|
||||
revids = adls_rpls_revids;
|
||||
size = ARRAY_SIZE(adls_rpls_revids);
|
||||
} else if (IS_ALDERLAKE_S(i915)) {
|
||||
@ -213,13 +213,13 @@ void intel_step_init(struct drm_i915_private *i915)
|
||||
} else if (IS_ROCKETLAKE(i915)) {
|
||||
revids = rkl_revids;
|
||||
size = ARRAY_SIZE(rkl_revids);
|
||||
} else if (IS_TGL_UY(i915)) {
|
||||
} else if (IS_TIGERLAKE_UY(i915)) {
|
||||
revids = tgl_uy_revids;
|
||||
size = ARRAY_SIZE(tgl_uy_revids);
|
||||
} else if (IS_TIGERLAKE(i915)) {
|
||||
revids = tgl_revids;
|
||||
size = ARRAY_SIZE(tgl_revids);
|
||||
} else if (IS_JSL_EHL(i915)) {
|
||||
} else if (IS_JASPERLAKE(i915) || IS_ELKHARTLAKE(i915)) {
|
||||
revids = jsl_ehl_revids;
|
||||
size = ARRAY_SIZE(jsl_ehl_revids);
|
||||
} else if (IS_ICELAKE(i915)) {
|
||||
|
@ -32,21 +32,21 @@ intel_pch_type(const struct drm_i915_private *dev_priv, unsigned short id)
|
||||
drm_WARN_ON(&dev_priv->drm,
|
||||
!IS_HASWELL(dev_priv) && !IS_BROADWELL(dev_priv));
|
||||
drm_WARN_ON(&dev_priv->drm,
|
||||
IS_HSW_ULT(dev_priv) || IS_BDW_ULT(dev_priv));
|
||||
IS_HASWELL_ULT(dev_priv) || IS_BROADWELL_ULT(dev_priv));
|
||||
return PCH_LPT;
|
||||
case INTEL_PCH_LPT_LP_DEVICE_ID_TYPE:
|
||||
drm_dbg_kms(&dev_priv->drm, "Found LynxPoint LP PCH\n");
|
||||
drm_WARN_ON(&dev_priv->drm,
|
||||
!IS_HASWELL(dev_priv) && !IS_BROADWELL(dev_priv));
|
||||
drm_WARN_ON(&dev_priv->drm,
|
||||
!IS_HSW_ULT(dev_priv) && !IS_BDW_ULT(dev_priv));
|
||||
!IS_HASWELL_ULT(dev_priv) && !IS_BROADWELL_ULT(dev_priv));
|
||||
return PCH_LPT;
|
||||
case INTEL_PCH_WPT_DEVICE_ID_TYPE:
|
||||
drm_dbg_kms(&dev_priv->drm, "Found WildcatPoint PCH\n");
|
||||
drm_WARN_ON(&dev_priv->drm,
|
||||
!IS_HASWELL(dev_priv) && !IS_BROADWELL(dev_priv));
|
||||
drm_WARN_ON(&dev_priv->drm,
|
||||
IS_HSW_ULT(dev_priv) || IS_BDW_ULT(dev_priv));
|
||||
IS_HASWELL_ULT(dev_priv) || IS_BROADWELL_ULT(dev_priv));
|
||||
/* WPT is LPT compatible */
|
||||
return PCH_LPT;
|
||||
case INTEL_PCH_WPT_LP_DEVICE_ID_TYPE:
|
||||
@ -54,7 +54,7 @@ intel_pch_type(const struct drm_i915_private *dev_priv, unsigned short id)
|
||||
drm_WARN_ON(&dev_priv->drm,
|
||||
!IS_HASWELL(dev_priv) && !IS_BROADWELL(dev_priv));
|
||||
drm_WARN_ON(&dev_priv->drm,
|
||||
!IS_HSW_ULT(dev_priv) && !IS_BDW_ULT(dev_priv));
|
||||
!IS_HASWELL_ULT(dev_priv) && !IS_BROADWELL_ULT(dev_priv));
|
||||
/* WPT is LPT compatible */
|
||||
return PCH_LPT;
|
||||
case INTEL_PCH_SPT_DEVICE_ID_TYPE:
|
||||
@ -115,7 +115,8 @@ intel_pch_type(const struct drm_i915_private *dev_priv, unsigned short id)
|
||||
return PCH_ICP;
|
||||
case INTEL_PCH_MCC_DEVICE_ID_TYPE:
|
||||
drm_dbg_kms(&dev_priv->drm, "Found Mule Creek Canyon PCH\n");
|
||||
drm_WARN_ON(&dev_priv->drm, !IS_JSL_EHL(dev_priv));
|
||||
drm_WARN_ON(&dev_priv->drm, !(IS_JASPERLAKE(dev_priv) ||
|
||||
IS_ELKHARTLAKE(dev_priv)));
|
||||
/* MCC is TGP compatible */
|
||||
return PCH_TGP;
|
||||
case INTEL_PCH_TGP_DEVICE_ID_TYPE:
|
||||
@ -127,7 +128,8 @@ intel_pch_type(const struct drm_i915_private *dev_priv, unsigned short id)
|
||||
return PCH_TGP;
|
||||
case INTEL_PCH_JSP_DEVICE_ID_TYPE:
|
||||
drm_dbg_kms(&dev_priv->drm, "Found Jasper Lake PCH\n");
|
||||
drm_WARN_ON(&dev_priv->drm, !IS_JSL_EHL(dev_priv));
|
||||
drm_WARN_ON(&dev_priv->drm, !(IS_JASPERLAKE(dev_priv) ||
|
||||
IS_ELKHARTLAKE(dev_priv)));
|
||||
/* JSP is ICP compatible */
|
||||
return PCH_ICP;
|
||||
case INTEL_PCH_ADP_DEVICE_ID_TYPE:
|
||||
@ -177,7 +179,7 @@ intel_virt_detect_pch(const struct drm_i915_private *dev_priv,
|
||||
id = INTEL_PCH_ADP_DEVICE_ID_TYPE;
|
||||
else if (IS_TIGERLAKE(dev_priv) || IS_ROCKETLAKE(dev_priv))
|
||||
id = INTEL_PCH_TGP_DEVICE_ID_TYPE;
|
||||
else if (IS_JSL_EHL(dev_priv))
|
||||
else if (IS_JASPERLAKE(dev_priv) || IS_ELKHARTLAKE(dev_priv))
|
||||
id = INTEL_PCH_MCC_DEVICE_ID_TYPE;
|
||||
else if (IS_ICELAKE(dev_priv))
|
||||
id = INTEL_PCH_ICP_DEVICE_ID_TYPE;
|
||||
@ -186,7 +188,7 @@ intel_virt_detect_pch(const struct drm_i915_private *dev_priv,
|
||||
id = INTEL_PCH_CNP_DEVICE_ID_TYPE;
|
||||
else if (IS_KABYLAKE(dev_priv) || IS_SKYLAKE(dev_priv))
|
||||
id = INTEL_PCH_SPT_DEVICE_ID_TYPE;
|
||||
else if (IS_HSW_ULT(dev_priv) || IS_BDW_ULT(dev_priv))
|
||||
else if (IS_HASWELL_ULT(dev_priv) || IS_BROADWELL_ULT(dev_priv))
|
||||
id = INTEL_PCH_LPT_LP_DEVICE_ID_TYPE;
|
||||
else if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv))
|
||||
id = INTEL_PCH_LPT_DEVICE_ID_TYPE;
|
||||
|
Loading…
x
Reference in New Issue
Block a user