Merge tag 'topic/adl-s-enabling-2021-02-01-1' of git://anongit.freedesktop.org/drm/drm-intel into drm-intel-next
Driver Changes: - Add basic support for Alder Lake S, to be shared between drm-intel-next and drm-intel-gt-next Signed-off-by: Jani Nikula <jani.nikula@intel.com> # Conflicts: # drivers/gpu/drm/i915/i915_drv.h From: Lucas De Marchi <lucas.demarchi@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20210202025620.2212559-1-lucas.demarchi@intel.com
This commit is contained in:
commit
29e9255901
@ -551,6 +551,7 @@ static const struct pci_device_id intel_early_ids[] __initconst = {
|
||||
INTEL_EHL_IDS(&gen11_early_ops),
|
||||
INTEL_TGL_12_IDS(&gen11_early_ops),
|
||||
INTEL_RKL_IDS(&gen11_early_ops),
|
||||
INTEL_ADLS_IDS(&gen11_early_ops),
|
||||
};
|
||||
|
||||
struct resource intel_graphics_stolen_res __ro_after_init = DEFINE_RES_MEM(0, 0);
|
||||
|
@ -1630,12 +1630,23 @@ static const u8 rkl_pch_tgp_ddc_pin_map[] = {
|
||||
[RKL_DDC_BUS_DDI_E] = GMBUS_PIN_10_TC2_ICP,
|
||||
};
|
||||
|
||||
static const u8 adls_ddc_pin_map[] = {
|
||||
[ICL_DDC_BUS_DDI_A] = GMBUS_PIN_1_BXT,
|
||||
[ADLS_DDC_BUS_PORT_TC1] = GMBUS_PIN_9_TC1_ICP,
|
||||
[ADLS_DDC_BUS_PORT_TC2] = GMBUS_PIN_10_TC2_ICP,
|
||||
[ADLS_DDC_BUS_PORT_TC3] = GMBUS_PIN_11_TC3_ICP,
|
||||
[ADLS_DDC_BUS_PORT_TC4] = GMBUS_PIN_12_TC4_ICP,
|
||||
};
|
||||
|
||||
static u8 map_ddc_pin(struct drm_i915_private *dev_priv, u8 vbt_pin)
|
||||
{
|
||||
const u8 *ddc_pin_map;
|
||||
int n_entries;
|
||||
|
||||
if (INTEL_PCH_TYPE(dev_priv) >= PCH_DG1) {
|
||||
if (HAS_PCH_ADP(dev_priv)) {
|
||||
ddc_pin_map = adls_ddc_pin_map;
|
||||
n_entries = ARRAY_SIZE(adls_ddc_pin_map);
|
||||
} else if (INTEL_PCH_TYPE(dev_priv) >= PCH_DG1) {
|
||||
return vbt_pin;
|
||||
} else if (IS_ROCKETLAKE(dev_priv) && INTEL_PCH_TYPE(dev_priv) == PCH_TGP) {
|
||||
ddc_pin_map = rkl_pch_tgp_ddc_pin_map;
|
||||
@ -1708,8 +1719,26 @@ static enum port dvo_port_to_port(struct drm_i915_private *dev_priv,
|
||||
[PORT_TC1] = { DVO_PORT_HDMIC, DVO_PORT_DPC, -1 },
|
||||
[PORT_TC2] = { DVO_PORT_HDMID, DVO_PORT_DPD, -1 },
|
||||
};
|
||||
/*
|
||||
* Alderlake S ports used in the driver are PORT_A, PORT_D, PORT_E,
|
||||
* PORT_F and PORT_G, we need to map that to correct VBT sections.
|
||||
*/
|
||||
static const int adls_port_mapping[][3] = {
|
||||
[PORT_A] = { DVO_PORT_HDMIA, DVO_PORT_DPA, -1 },
|
||||
[PORT_B] = { -1 },
|
||||
[PORT_C] = { -1 },
|
||||
[PORT_TC1] = { DVO_PORT_HDMIB, DVO_PORT_DPB, -1 },
|
||||
[PORT_TC2] = { DVO_PORT_HDMIC, DVO_PORT_DPC, -1 },
|
||||
[PORT_TC3] = { DVO_PORT_HDMID, DVO_PORT_DPD, -1 },
|
||||
[PORT_TC4] = { DVO_PORT_HDMIE, DVO_PORT_DPE, -1 },
|
||||
};
|
||||
|
||||
if (IS_DG1(dev_priv) || IS_ROCKETLAKE(dev_priv))
|
||||
if (IS_ALDERLAKE_S(dev_priv))
|
||||
return __dvo_port_to_port(ARRAY_SIZE(adls_port_mapping),
|
||||
ARRAY_SIZE(adls_port_mapping[0]),
|
||||
adls_port_mapping,
|
||||
dvo_port);
|
||||
else if (IS_DG1(dev_priv) || IS_ROCKETLAKE(dev_priv))
|
||||
return __dvo_port_to_port(ARRAY_SIZE(rkl_port_mapping),
|
||||
ARRAY_SIZE(rkl_port_mapping[0]),
|
||||
rkl_port_mapping,
|
||||
@ -2661,27 +2690,44 @@ enum aux_ch intel_bios_port_aux_ch(struct drm_i915_private *dev_priv,
|
||||
return aux_ch;
|
||||
}
|
||||
|
||||
/*
|
||||
* RKL/DG1 VBT uses PHY based mapping. Combo PHYs A,B,C,D
|
||||
* map to DDI A,B,TC1,TC2 respectively.
|
||||
*
|
||||
* ADL-S VBT uses PHY based mapping. Combo PHYs A,B,C,D,E
|
||||
* map to DDI A,TC1,TC2,TC3,TC4 respectively.
|
||||
*/
|
||||
switch (info->alternate_aux_channel) {
|
||||
case DP_AUX_A:
|
||||
aux_ch = AUX_CH_A;
|
||||
break;
|
||||
case DP_AUX_B:
|
||||
aux_ch = AUX_CH_B;
|
||||
if (IS_ALDERLAKE_S(dev_priv))
|
||||
aux_ch = AUX_CH_USBC1;
|
||||
else
|
||||
aux_ch = AUX_CH_B;
|
||||
break;
|
||||
case DP_AUX_C:
|
||||
/*
|
||||
* RKL/DG1 VBT uses PHY based mapping. Combo PHYs A,B,C,D
|
||||
* map to DDI A,B,TC1,TC2 respectively.
|
||||
*/
|
||||
aux_ch = (IS_DG1(dev_priv) || IS_ROCKETLAKE(dev_priv)) ?
|
||||
AUX_CH_USBC1 : AUX_CH_C;
|
||||
if (IS_ALDERLAKE_S(dev_priv))
|
||||
aux_ch = AUX_CH_USBC2;
|
||||
else if (IS_DG1(dev_priv) || IS_ROCKETLAKE(dev_priv))
|
||||
aux_ch = AUX_CH_USBC1;
|
||||
else
|
||||
aux_ch = AUX_CH_C;
|
||||
break;
|
||||
case DP_AUX_D:
|
||||
aux_ch = (IS_DG1(dev_priv) || IS_ROCKETLAKE(dev_priv)) ?
|
||||
AUX_CH_USBC2 : AUX_CH_D;
|
||||
if (IS_ALDERLAKE_S(dev_priv))
|
||||
aux_ch = AUX_CH_USBC3;
|
||||
else if (IS_DG1(dev_priv) || IS_ROCKETLAKE(dev_priv))
|
||||
aux_ch = AUX_CH_USBC2;
|
||||
else
|
||||
aux_ch = AUX_CH_D;
|
||||
break;
|
||||
case DP_AUX_E:
|
||||
aux_ch = AUX_CH_E;
|
||||
if (IS_ALDERLAKE_S(dev_priv))
|
||||
aux_ch = AUX_CH_USBC4;
|
||||
else
|
||||
aux_ch = AUX_CH_E;
|
||||
break;
|
||||
case DP_AUX_F:
|
||||
aux_ch = AUX_CH_F;
|
||||
|
@ -142,6 +142,12 @@ static const struct intel_sa_info rkl_sa_info = {
|
||||
.displayrtids = 128,
|
||||
};
|
||||
|
||||
static const struct intel_sa_info adls_sa_info = {
|
||||
.deburst = 16,
|
||||
.deprogbwlimit = 38, /* GB/s */
|
||||
.displayrtids = 256,
|
||||
};
|
||||
|
||||
static int icl_get_bw_info(struct drm_i915_private *dev_priv, const struct intel_sa_info *sa)
|
||||
{
|
||||
struct intel_qgv_info qi = {};
|
||||
@ -251,7 +257,9 @@ void intel_bw_init_hw(struct drm_i915_private *dev_priv)
|
||||
if (!HAS_DISPLAY(dev_priv))
|
||||
return;
|
||||
|
||||
if (IS_ROCKETLAKE(dev_priv))
|
||||
if (IS_ALDERLAKE_S(dev_priv))
|
||||
icl_get_bw_info(dev_priv, &adls_sa_info);
|
||||
else if (IS_ROCKETLAKE(dev_priv))
|
||||
icl_get_bw_info(dev_priv, &rkl_sa_info);
|
||||
else if (IS_GEN(dev_priv, 12))
|
||||
icl_get_bw_info(dev_priv, &tgl_sa_info);
|
||||
|
@ -187,10 +187,16 @@ static bool has_phy_misc(struct drm_i915_private *i915, enum phy phy)
|
||||
* Some platforms only expect PHY_MISC to be programmed for PHY-A and
|
||||
* PHY-B and may not even have instances of the register for the
|
||||
* other combo PHY's.
|
||||
*
|
||||
* ADL-S technically has three instances of PHY_MISC, but only requires
|
||||
* that we program it for PHY A.
|
||||
*/
|
||||
if (IS_JSL_EHL(i915) ||
|
||||
IS_ROCKETLAKE(i915) ||
|
||||
IS_DG1(i915))
|
||||
|
||||
if (IS_ALDERLAKE_S(i915))
|
||||
return phy == PHY_A;
|
||||
else if (IS_JSL_EHL(i915) ||
|
||||
IS_ROCKETLAKE(i915) ||
|
||||
IS_DG1(i915))
|
||||
return phy < PHY_C;
|
||||
|
||||
return true;
|
||||
@ -246,14 +252,21 @@ static bool phy_is_master(struct drm_i915_private *dev_priv, enum phy phy)
|
||||
* RKL,DG1:
|
||||
* A(master) -> B(slave)
|
||||
* C(master) -> D(slave)
|
||||
* ADL-S:
|
||||
* A(master) -> B(slave), C(slave)
|
||||
* D(master) -> E(slave)
|
||||
*
|
||||
* We must set the IREFGEN bit for any PHY acting as a master
|
||||
* to another PHY.
|
||||
*/
|
||||
if ((IS_DG1(dev_priv) || IS_ROCKETLAKE(dev_priv)) && phy == PHY_C)
|
||||
if (phy == PHY_A)
|
||||
return true;
|
||||
else if (IS_ALDERLAKE_S(dev_priv))
|
||||
return phy == PHY_D;
|
||||
else if (IS_DG1(dev_priv) || IS_ROCKETLAKE(dev_priv))
|
||||
return phy == PHY_C;
|
||||
|
||||
return phy == PHY_A;
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool icl_combo_phy_verify_state(struct drm_i915_private *dev_priv,
|
||||
|
@ -40,6 +40,10 @@
|
||||
|
||||
#define GEN12_CSR_MAX_FW_SIZE ICL_CSR_MAX_FW_SIZE
|
||||
|
||||
#define ADLS_CSR_PATH "i915/adls_dmc_ver2_01.bin"
|
||||
#define ADLS_CSR_VERSION_REQUIRED CSR_VERSION(2, 1)
|
||||
MODULE_FIRMWARE(ADLS_CSR_PATH);
|
||||
|
||||
#define DG1_CSR_PATH "i915/dg1_dmc_ver2_02.bin"
|
||||
#define DG1_CSR_VERSION_REQUIRED CSR_VERSION(2, 2)
|
||||
MODULE_FIRMWARE(DG1_CSR_PATH);
|
||||
@ -689,7 +693,11 @@ void intel_csr_ucode_init(struct drm_i915_private *dev_priv)
|
||||
*/
|
||||
intel_csr_runtime_pm_get(dev_priv);
|
||||
|
||||
if (IS_DG1(dev_priv)) {
|
||||
if (IS_ALDERLAKE_S(dev_priv)) {
|
||||
csr->fw_path = ADLS_CSR_PATH;
|
||||
csr->required_version = ADLS_CSR_VERSION_REQUIRED;
|
||||
csr->max_fw_size = GEN12_CSR_MAX_FW_SIZE;
|
||||
} else if (IS_DG1(dev_priv)) {
|
||||
csr->fw_path = DG1_CSR_PATH;
|
||||
csr->required_version = DG1_CSR_VERSION_REQUIRED;
|
||||
csr->max_fw_size = GEN12_CSR_MAX_FW_SIZE;
|
||||
|
@ -3167,25 +3167,30 @@ static void icl_map_plls_to_ports(struct intel_encoder *encoder,
|
||||
struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
|
||||
struct intel_shared_dpll *pll = crtc_state->shared_dpll;
|
||||
enum phy phy = intel_port_to_phy(dev_priv, encoder->port);
|
||||
u32 val;
|
||||
u32 val, mask, sel;
|
||||
i915_reg_t reg;
|
||||
|
||||
if (IS_ALDERLAKE_S(dev_priv)) {
|
||||
reg = ADLS_DPCLKA_CFGCR(phy);
|
||||
mask = ADLS_DPCLKA_CFGCR_DDI_CLK_SEL_MASK(phy);
|
||||
sel = ((pll->info->id) << ADLS_DPCLKA_CFGCR_DDI_SHIFT(phy));
|
||||
} else if (IS_ROCKETLAKE(dev_priv)) {
|
||||
reg = ICL_DPCLKA_CFGCR0;
|
||||
mask = RKL_DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(phy);
|
||||
sel = RKL_DPCLKA_CFGCR0_DDI_CLK_SEL(pll->info->id, phy);
|
||||
} else {
|
||||
reg = ICL_DPCLKA_CFGCR0;
|
||||
mask = ICL_DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(phy);
|
||||
sel = ICL_DPCLKA_CFGCR0_DDI_CLK_SEL(pll->info->id, phy);
|
||||
}
|
||||
|
||||
mutex_lock(&dev_priv->dpll.lock);
|
||||
|
||||
val = intel_de_read(dev_priv, ICL_DPCLKA_CFGCR0);
|
||||
val = intel_de_read(dev_priv, reg);
|
||||
drm_WARN_ON(&dev_priv->drm,
|
||||
(val & icl_dpclka_cfgcr0_clk_off(dev_priv, phy)) == 0);
|
||||
|
||||
if (intel_phy_is_combo(dev_priv, phy)) {
|
||||
u32 mask, sel;
|
||||
|
||||
if (IS_ROCKETLAKE(dev_priv)) {
|
||||
mask = RKL_DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(phy);
|
||||
sel = RKL_DPCLKA_CFGCR0_DDI_CLK_SEL(pll->info->id, phy);
|
||||
} else {
|
||||
mask = ICL_DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(phy);
|
||||
sel = ICL_DPCLKA_CFGCR0_DDI_CLK_SEL(pll->info->id, phy);
|
||||
}
|
||||
|
||||
/*
|
||||
* Even though this register references DDIs, note that we
|
||||
* want to pass the PHY rather than the port (DDI). For
|
||||
@ -3198,12 +3203,12 @@ static void icl_map_plls_to_ports(struct intel_encoder *encoder,
|
||||
*/
|
||||
val &= ~mask;
|
||||
val |= sel;
|
||||
intel_de_write(dev_priv, ICL_DPCLKA_CFGCR0, val);
|
||||
intel_de_posting_read(dev_priv, ICL_DPCLKA_CFGCR0);
|
||||
intel_de_write(dev_priv, reg, val);
|
||||
intel_de_posting_read(dev_priv, reg);
|
||||
}
|
||||
|
||||
val &= ~icl_dpclka_cfgcr0_clk_off(dev_priv, phy);
|
||||
intel_de_write(dev_priv, ICL_DPCLKA_CFGCR0, val);
|
||||
intel_de_write(dev_priv, reg, val);
|
||||
|
||||
mutex_unlock(&dev_priv->dpll.lock);
|
||||
}
|
||||
@ -3226,12 +3231,19 @@ static void icl_unmap_plls_to_ports(struct intel_encoder *encoder)
|
||||
struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
|
||||
enum phy phy = intel_port_to_phy(dev_priv, encoder->port);
|
||||
u32 val;
|
||||
i915_reg_t reg;
|
||||
|
||||
mutex_lock(&dev_priv->dpll.lock);
|
||||
|
||||
val = intel_de_read(dev_priv, ICL_DPCLKA_CFGCR0);
|
||||
if (IS_ALDERLAKE_S(dev_priv))
|
||||
reg = ADLS_DPCLKA_CFGCR(phy);
|
||||
else
|
||||
reg = ICL_DPCLKA_CFGCR0;
|
||||
|
||||
val = intel_de_read(dev_priv, reg);
|
||||
val |= icl_dpclka_cfgcr0_clk_off(dev_priv, phy);
|
||||
intel_de_write(dev_priv, ICL_DPCLKA_CFGCR0, val);
|
||||
|
||||
intel_de_write(dev_priv, reg, val);
|
||||
|
||||
mutex_unlock(&dev_priv->dpll.lock);
|
||||
}
|
||||
@ -3271,13 +3283,21 @@ static void icl_sanitize_port_clk_off(struct drm_i915_private *dev_priv,
|
||||
u32 port_mask, bool ddi_clk_needed)
|
||||
{
|
||||
enum port port;
|
||||
bool ddi_clk_off;
|
||||
u32 val;
|
||||
i915_reg_t reg;
|
||||
|
||||
val = intel_de_read(dev_priv, ICL_DPCLKA_CFGCR0);
|
||||
for_each_port_masked(port, port_mask) {
|
||||
enum phy phy = intel_port_to_phy(dev_priv, port);
|
||||
bool ddi_clk_off = val & icl_dpclka_cfgcr0_clk_off(dev_priv,
|
||||
phy);
|
||||
|
||||
if (IS_ALDERLAKE_S(dev_priv))
|
||||
reg = ADLS_DPCLKA_CFGCR(phy);
|
||||
else
|
||||
reg = ICL_DPCLKA_CFGCR0;
|
||||
|
||||
val = intel_de_read(dev_priv, reg);
|
||||
ddi_clk_off = val & icl_dpclka_cfgcr0_clk_off(dev_priv,
|
||||
phy);
|
||||
|
||||
if (ddi_clk_needed == !ddi_clk_off)
|
||||
continue;
|
||||
@ -3293,7 +3313,7 @@ static void icl_sanitize_port_clk_off(struct drm_i915_private *dev_priv,
|
||||
"PHY %c is disabled/in DSI mode with an ungated DDI clock, gate it\n",
|
||||
phy_name(phy));
|
||||
val |= icl_dpclka_cfgcr0_clk_off(dev_priv, phy);
|
||||
intel_de_write(dev_priv, ICL_DPCLKA_CFGCR0, val);
|
||||
intel_de_write(dev_priv, reg, val);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5683,6 +5683,8 @@ bool intel_phy_is_combo(struct drm_i915_private *dev_priv, enum phy phy)
|
||||
{
|
||||
if (phy == PHY_NONE)
|
||||
return false;
|
||||
else if (IS_ALDERLAKE_S(dev_priv))
|
||||
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))
|
||||
@ -5695,11 +5697,9 @@ bool intel_phy_is_combo(struct drm_i915_private *dev_priv, enum phy phy)
|
||||
|
||||
bool intel_phy_is_tc(struct drm_i915_private *dev_priv, enum phy phy)
|
||||
{
|
||||
if (IS_DG1(dev_priv) || IS_ROCKETLAKE(dev_priv))
|
||||
return false;
|
||||
else if (INTEL_GEN(dev_priv) >= 12)
|
||||
if (IS_TIGERLAKE(dev_priv))
|
||||
return phy >= PHY_D && phy <= PHY_I;
|
||||
else if (INTEL_GEN(dev_priv) >= 11 && !IS_JSL_EHL(dev_priv))
|
||||
else if (IS_ICELAKE(dev_priv))
|
||||
return phy >= PHY_C && phy <= PHY_F;
|
||||
else
|
||||
return false;
|
||||
@ -5707,7 +5707,9 @@ bool intel_phy_is_tc(struct drm_i915_private *dev_priv, enum phy phy)
|
||||
|
||||
enum phy intel_port_to_phy(struct drm_i915_private *i915, enum port port)
|
||||
{
|
||||
if ((IS_DG1(i915) || IS_ROCKETLAKE(i915)) && port >= PORT_TC1)
|
||||
if (IS_ALDERLAKE_S(i915) && port >= PORT_TC1)
|
||||
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)
|
||||
return PHY_A;
|
||||
@ -8604,20 +8606,27 @@ static void icl_get_ddi_pll(struct drm_i915_private *dev_priv, enum port port,
|
||||
struct intel_shared_dpll *pll;
|
||||
enum intel_dpll_id id;
|
||||
bool pll_active;
|
||||
i915_reg_t reg;
|
||||
u32 temp;
|
||||
|
||||
if (intel_phy_is_combo(dev_priv, phy)) {
|
||||
u32 mask, shift;
|
||||
|
||||
if (IS_ROCKETLAKE(dev_priv)) {
|
||||
if (IS_ALDERLAKE_S(dev_priv)) {
|
||||
reg = ADLS_DPCLKA_CFGCR(phy);
|
||||
mask = ADLS_DPCLKA_CFGCR_DDI_CLK_SEL_MASK(phy);
|
||||
shift = ADLS_DPCLKA_CFGCR_DDI_SHIFT(phy);
|
||||
} else if (IS_ROCKETLAKE(dev_priv)) {
|
||||
reg = ICL_DPCLKA_CFGCR0;
|
||||
mask = RKL_DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(phy);
|
||||
shift = RKL_DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(phy);
|
||||
} else {
|
||||
reg = ICL_DPCLKA_CFGCR0;
|
||||
mask = ICL_DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(phy);
|
||||
shift = ICL_DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(phy);
|
||||
}
|
||||
|
||||
temp = intel_de_read(dev_priv, ICL_DPCLKA_CFGCR0) & mask;
|
||||
temp = intel_de_read(dev_priv, reg) & mask;
|
||||
id = temp >> shift;
|
||||
port_dpll_id = ICL_PORT_DPLL_DEFAULT;
|
||||
} else if (intel_phy_is_tc(dev_priv, phy)) {
|
||||
@ -13918,7 +13927,13 @@ static void intel_setup_outputs(struct drm_i915_private *dev_priv)
|
||||
if (!HAS_DISPLAY(dev_priv))
|
||||
return;
|
||||
|
||||
if (IS_DG1(dev_priv) || IS_ROCKETLAKE(dev_priv)) {
|
||||
if (IS_ALDERLAKE_S(dev_priv)) {
|
||||
intel_ddi_init(dev_priv, PORT_A);
|
||||
intel_ddi_init(dev_priv, PORT_TC1);
|
||||
intel_ddi_init(dev_priv, PORT_TC2);
|
||||
intel_ddi_init(dev_priv, PORT_TC3);
|
||||
intel_ddi_init(dev_priv, PORT_TC4);
|
||||
} else if (IS_DG1(dev_priv) || IS_ROCKETLAKE(dev_priv)) {
|
||||
intel_ddi_init(dev_priv, PORT_A);
|
||||
intel_ddi_init(dev_priv, PORT_B);
|
||||
intel_ddi_init(dev_priv, PORT_TC1);
|
||||
|
@ -4689,7 +4689,7 @@ int intel_power_domains_init(struct drm_i915_private *dev_priv)
|
||||
* The enabling order will be from lower to higher indexed wells,
|
||||
* the disabling order is reversed.
|
||||
*/
|
||||
if (IS_DG1(dev_priv)) {
|
||||
if (IS_ALDERLAKE_S(dev_priv) || IS_DG1(dev_priv)) {
|
||||
err = set_power_wells_mask(power_domains, tgl_power_wells,
|
||||
BIT_ULL(TGL_DISP_PW_TC_COLD_OFF));
|
||||
} else if (IS_ROCKETLAKE(dev_priv)) {
|
||||
@ -5339,9 +5339,10 @@ static void tgl_bw_buddy_init(struct drm_i915_private *dev_priv)
|
||||
unsigned long abox_mask = INTEL_INFO(dev_priv)->abox_mask;
|
||||
int config, i;
|
||||
|
||||
if (IS_DG1_REVID(dev_priv, DG1_REVID_A0, DG1_REVID_A0) ||
|
||||
IS_TGL_DISP_REVID(dev_priv, TGL_REVID_A0, TGL_REVID_B0))
|
||||
/* Wa_1409767108:tgl,dg1 */
|
||||
if (IS_ALDERLAKE_S(dev_priv) ||
|
||||
IS_DG1_REVID(dev_priv, DG1_REVID_A0, DG1_REVID_A0) ||
|
||||
IS_TGL_DISP_STEPPING(dev_priv, STEP_A0, STEP_B0))
|
||||
/* Wa_1409767108:tgl,dg1,adl-s */
|
||||
table = wa_1409767108_buddy_page_masks;
|
||||
else
|
||||
table = tgl_buddy_page_masks;
|
||||
@ -5379,7 +5380,7 @@ static void icl_display_core_init(struct drm_i915_private *dev_priv,
|
||||
|
||||
gen9_set_dc_state(dev_priv, DC_STATE_DISABLE);
|
||||
|
||||
/* Wa_14011294188:ehl,jsl,tgl,rkl */
|
||||
/* Wa_14011294188:ehl,jsl,tgl,rkl,adl-s */
|
||||
if (INTEL_PCH_TYPE(dev_priv) >= PCH_JSP &&
|
||||
INTEL_PCH_TYPE(dev_priv) < PCH_DG1)
|
||||
intel_de_rmw(dev_priv, SOUTH_DSPCLK_GATE_D, 0,
|
||||
|
@ -3559,7 +3559,13 @@ static bool icl_get_combo_phy_dpll(struct intel_atomic_state *state,
|
||||
|
||||
icl_calc_dpll_state(dev_priv, &pll_params, &port_dpll->hw_state);
|
||||
|
||||
if (IS_DG1(dev_priv)) {
|
||||
if (IS_ALDERLAKE_S(dev_priv)) {
|
||||
dpll_mask =
|
||||
BIT(DPLL_ID_DG1_DPLL3) |
|
||||
BIT(DPLL_ID_DG1_DPLL2) |
|
||||
BIT(DPLL_ID_ICL_DPLL1) |
|
||||
BIT(DPLL_ID_ICL_DPLL0);
|
||||
} else if (IS_DG1(dev_priv)) {
|
||||
if (port == PORT_D || port == PORT_E) {
|
||||
dpll_mask =
|
||||
BIT(DPLL_ID_DG1_DPLL2) |
|
||||
@ -3865,7 +3871,10 @@ static bool icl_pll_get_hw_state(struct drm_i915_private *dev_priv,
|
||||
if (!(val & PLL_ENABLE))
|
||||
goto out;
|
||||
|
||||
if (IS_DG1(dev_priv)) {
|
||||
if (IS_ALDERLAKE_S(dev_priv)) {
|
||||
hw_state->cfgcr0 = intel_de_read(dev_priv, ADLS_DPLL_CFGCR0(id));
|
||||
hw_state->cfgcr1 = intel_de_read(dev_priv, ADLS_DPLL_CFGCR1(id));
|
||||
} else if (IS_DG1(dev_priv)) {
|
||||
hw_state->cfgcr0 = intel_de_read(dev_priv, DG1_DPLL_CFGCR0(id));
|
||||
hw_state->cfgcr1 = intel_de_read(dev_priv, DG1_DPLL_CFGCR1(id));
|
||||
} else if (IS_ROCKETLAKE(dev_priv)) {
|
||||
@ -3921,7 +3930,10 @@ static void icl_dpll_write(struct drm_i915_private *dev_priv,
|
||||
const enum intel_dpll_id id = pll->info->id;
|
||||
i915_reg_t cfgcr0_reg, cfgcr1_reg;
|
||||
|
||||
if (IS_DG1(dev_priv)) {
|
||||
if (IS_ALDERLAKE_S(dev_priv)) {
|
||||
cfgcr0_reg = ADLS_DPLL_CFGCR0(id);
|
||||
cfgcr1_reg = ADLS_DPLL_CFGCR1(id);
|
||||
} else if (IS_DG1(dev_priv)) {
|
||||
cfgcr0_reg = DG1_DPLL_CFGCR0(id);
|
||||
cfgcr1_reg = DG1_DPLL_CFGCR1(id);
|
||||
} else if (IS_ROCKETLAKE(dev_priv)) {
|
||||
@ -4384,6 +4396,22 @@ static const struct intel_dpll_mgr dg1_pll_mgr = {
|
||||
.dump_hw_state = icl_dump_hw_state,
|
||||
};
|
||||
|
||||
static const struct dpll_info adls_plls[] = {
|
||||
{ "DPLL 0", &combo_pll_funcs, DPLL_ID_ICL_DPLL0, 0 },
|
||||
{ "DPLL 1", &combo_pll_funcs, DPLL_ID_ICL_DPLL1, 0 },
|
||||
{ "DPLL 2", &combo_pll_funcs, DPLL_ID_DG1_DPLL2, 0 },
|
||||
{ "DPLL 3", &combo_pll_funcs, DPLL_ID_DG1_DPLL3, 0 },
|
||||
{ },
|
||||
};
|
||||
|
||||
static const struct intel_dpll_mgr adls_pll_mgr = {
|
||||
.dpll_info = adls_plls,
|
||||
.get_dplls = icl_get_dplls,
|
||||
.put_dplls = icl_put_dplls,
|
||||
.update_ref_clks = icl_update_dpll_ref_clks,
|
||||
.dump_hw_state = icl_dump_hw_state,
|
||||
};
|
||||
|
||||
/**
|
||||
* intel_shared_dpll_init - Initialize shared DPLLs
|
||||
* @dev: drm device
|
||||
@ -4397,7 +4425,9 @@ void intel_shared_dpll_init(struct drm_device *dev)
|
||||
const struct dpll_info *dpll_info;
|
||||
int i;
|
||||
|
||||
if (IS_DG1(dev_priv))
|
||||
if (IS_ALDERLAKE_S(dev_priv))
|
||||
dpll_mgr = &adls_pll_mgr;
|
||||
else if (IS_DG1(dev_priv))
|
||||
dpll_mgr = &dg1_pll_mgr;
|
||||
else if (IS_ROCKETLAKE(dev_priv))
|
||||
dpll_mgr = &rkl_pll_mgr;
|
||||
|
@ -3138,6 +3138,22 @@ static u8 dg1_port_to_ddc_pin(struct drm_i915_private *dev_priv, enum port port)
|
||||
return intel_port_to_phy(dev_priv, port) + 1;
|
||||
}
|
||||
|
||||
static u8 adls_port_to_ddc_pin(struct drm_i915_private *dev_priv, enum port port)
|
||||
{
|
||||
enum phy phy = intel_port_to_phy(dev_priv, port);
|
||||
|
||||
WARN_ON(port == PORT_B || port == PORT_C);
|
||||
|
||||
/*
|
||||
* Pin mapping for ADL-S requires TC pins for all combo phy outputs
|
||||
* except first combo output.
|
||||
*/
|
||||
if (phy == PHY_A)
|
||||
return GMBUS_PIN_1_BXT;
|
||||
|
||||
return GMBUS_PIN_9_TC1_ICP + phy - PHY_B;
|
||||
}
|
||||
|
||||
static u8 g4x_port_to_ddc_pin(struct drm_i915_private *dev_priv,
|
||||
enum port port)
|
||||
{
|
||||
@ -3175,7 +3191,9 @@ static u8 intel_hdmi_ddc_pin(struct intel_encoder *encoder)
|
||||
return ddc_pin;
|
||||
}
|
||||
|
||||
if (INTEL_PCH_TYPE(dev_priv) >= PCH_DG1)
|
||||
if (HAS_PCH_ADP(dev_priv))
|
||||
ddc_pin = adls_port_to_ddc_pin(dev_priv, port);
|
||||
else if (INTEL_PCH_TYPE(dev_priv) >= PCH_DG1)
|
||||
ddc_pin = dg1_port_to_ddc_pin(dev_priv, port);
|
||||
else if (IS_ROCKETLAKE(dev_priv))
|
||||
ddc_pin = rkl_port_to_ddc_pin(dev_priv, port);
|
||||
|
@ -551,7 +551,7 @@ static void hsw_activate_psr2(struct intel_dp *intel_dp)
|
||||
|
||||
if (dev_priv->psr.psr2_sel_fetch_enabled) {
|
||||
/* WA 1408330847 */
|
||||
if (IS_TGL_DISP_REVID(dev_priv, TGL_REVID_A0, TGL_REVID_A0) ||
|
||||
if (IS_TGL_DISP_STEPPING(dev_priv, STEP_A0, STEP_A0) ||
|
||||
IS_RKL_REVID(dev_priv, RKL_REVID_A0, RKL_REVID_A0))
|
||||
intel_de_rmw(dev_priv, CHICKEN_PAR1_1,
|
||||
DIS_RAM_BYPASS_PSR2_MAN_TRACK,
|
||||
@ -1110,7 +1110,7 @@ static void intel_psr_disable_locked(struct intel_dp *intel_dp)
|
||||
|
||||
/* WA 1408330847 */
|
||||
if (dev_priv->psr.psr2_sel_fetch_enabled &&
|
||||
(IS_TGL_DISP_REVID(dev_priv, TGL_REVID_A0, TGL_REVID_A0) ||
|
||||
(IS_TGL_DISP_STEPPING(dev_priv, STEP_A0, STEP_A0) ||
|
||||
IS_RKL_REVID(dev_priv, RKL_REVID_A0, RKL_REVID_A0)))
|
||||
intel_de_rmw(dev_priv, CHICKEN_PAR1_1,
|
||||
DIS_RAM_BYPASS_PSR2_MAN_TRACK, 0);
|
||||
|
@ -382,7 +382,7 @@ int intel_plane_check_src_coordinates(struct intel_plane_state *plane_state)
|
||||
|
||||
static u8 icl_nv12_y_plane_mask(struct drm_i915_private *i915)
|
||||
{
|
||||
if (IS_ROCKETLAKE(i915))
|
||||
if (HAS_D12_PLANE_MINIMIZATION(i915))
|
||||
return BIT(PLANE_SPRITE2) | BIT(PLANE_SPRITE3);
|
||||
else
|
||||
return BIT(PLANE_SPRITE4) | BIT(PLANE_SPRITE5);
|
||||
@ -2392,8 +2392,8 @@ static int skl_plane_check_fb(const struct intel_crtc_state *crtc_state,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Wa_1606054188:tgl */
|
||||
if (IS_TIGERLAKE(dev_priv) &&
|
||||
/* Wa_1606054188:tgl,adl-s */
|
||||
if ((IS_ALDERLAKE_S(dev_priv) || IS_TIGERLAKE(dev_priv)) &&
|
||||
plane_state->ckey.flags & I915_SET_COLORKEY_SOURCE &&
|
||||
intel_format_is_p01x(fb->format->format)) {
|
||||
drm_dbg_kms(&dev_priv->drm,
|
||||
@ -3055,7 +3055,7 @@ static bool gen12_plane_supports_mc_ccs(struct drm_i915_private *dev_priv,
|
||||
{
|
||||
/* Wa_14010477008:tgl[a0..c0],rkl[all],dg1[all] */
|
||||
if (IS_DG1(dev_priv) || IS_ROCKETLAKE(dev_priv) ||
|
||||
IS_TGL_DISP_REVID(dev_priv, TGL_REVID_A0, TGL_REVID_C0))
|
||||
IS_TGL_DISP_STEPPING(dev_priv, STEP_A0, STEP_C0))
|
||||
return false;
|
||||
|
||||
return plane_id < PLANE_SPRITE4;
|
||||
|
@ -327,6 +327,10 @@ enum vbt_gmbus_ddi {
|
||||
ICL_DDC_BUS_PORT_4,
|
||||
TGL_DDC_BUS_PORT_5,
|
||||
TGL_DDC_BUS_PORT_6,
|
||||
ADLS_DDC_BUS_PORT_TC1 = 0x2,
|
||||
ADLS_DDC_BUS_PORT_TC2,
|
||||
ADLS_DDC_BUS_PORT_TC3,
|
||||
ADLS_DDC_BUS_PORT_TC4
|
||||
};
|
||||
|
||||
#define DP_AUX_A 0x40
|
||||
|
@ -71,17 +71,25 @@ const struct i915_rev_steppings kbl_revids[] = {
|
||||
[7] = { .gt_stepping = KBL_REVID_G0, .disp_stepping = KBL_REVID_C0 },
|
||||
};
|
||||
|
||||
const struct i915_rev_steppings tgl_uy_revids[] = {
|
||||
[0] = { .gt_stepping = TGL_REVID_A0, .disp_stepping = TGL_REVID_A0 },
|
||||
[1] = { .gt_stepping = TGL_REVID_B0, .disp_stepping = TGL_REVID_C0 },
|
||||
[2] = { .gt_stepping = TGL_REVID_B1, .disp_stepping = TGL_REVID_C0 },
|
||||
[3] = { .gt_stepping = TGL_REVID_C0, .disp_stepping = TGL_REVID_D0 },
|
||||
const struct i915_rev_steppings tgl_uy_revid_step_tbl[] = {
|
||||
[0] = { .gt_stepping = STEP_A0, .disp_stepping = STEP_A0 },
|
||||
[1] = { .gt_stepping = STEP_B0, .disp_stepping = STEP_C0 },
|
||||
[2] = { .gt_stepping = STEP_B1, .disp_stepping = STEP_C0 },
|
||||
[3] = { .gt_stepping = STEP_C0, .disp_stepping = STEP_D0 },
|
||||
};
|
||||
|
||||
/* Same GT stepping between tgl_uy_revids and tgl_revids don't mean the same HW */
|
||||
const struct i915_rev_steppings tgl_revids[] = {
|
||||
[0] = { .gt_stepping = TGL_REVID_A0, .disp_stepping = TGL_REVID_B0 },
|
||||
[1] = { .gt_stepping = TGL_REVID_B0, .disp_stepping = TGL_REVID_D0 },
|
||||
const struct i915_rev_steppings tgl_revid_step_tbl[] = {
|
||||
[0] = { .gt_stepping = STEP_A0, .disp_stepping = STEP_B0 },
|
||||
[1] = { .gt_stepping = STEP_B0, .disp_stepping = STEP_D0 },
|
||||
};
|
||||
|
||||
const struct i915_rev_steppings adls_revid_step_tbl[] = {
|
||||
[0x0] = { .gt_stepping = STEP_A0, .disp_stepping = STEP_A0 },
|
||||
[0x1] = { .gt_stepping = STEP_A0, .disp_stepping = STEP_A2 },
|
||||
[0x4] = { .gt_stepping = STEP_B0, .disp_stepping = STEP_B0 },
|
||||
[0x8] = { .gt_stepping = STEP_C0, .disp_stepping = STEP_B0 },
|
||||
[0xC] = { .gt_stepping = STEP_D0, .disp_stepping = STEP_C0 },
|
||||
};
|
||||
|
||||
static void wa_init_start(struct i915_wa_list *wal, const char *name, const char *engine_name)
|
||||
@ -722,7 +730,8 @@ __intel_engine_init_ctx_wa(struct intel_engine_cs *engine,
|
||||
|
||||
if (IS_DG1(i915))
|
||||
dg1_ctx_workarounds_init(engine, wal);
|
||||
else if (IS_ROCKETLAKE(i915) || IS_TIGERLAKE(i915))
|
||||
else if (IS_ALDERLAKE_S(i915) || IS_ROCKETLAKE(i915) ||
|
||||
IS_TIGERLAKE(i915))
|
||||
tgl_ctx_workarounds_init(engine, wal);
|
||||
else if (IS_GEN(i915, 12))
|
||||
gen12_ctx_workarounds_init(engine, wal);
|
||||
@ -1123,19 +1132,19 @@ tgl_gt_workarounds_init(struct drm_i915_private *i915, struct i915_wa_list *wal)
|
||||
gen12_gt_workarounds_init(i915, wal);
|
||||
|
||||
/* Wa_1409420604:tgl */
|
||||
if (IS_TGL_UY_GT_REVID(i915, TGL_REVID_A0, TGL_REVID_A0))
|
||||
if (IS_TGL_UY_GT_STEPPING(i915, STEP_A0, STEP_A0))
|
||||
wa_write_or(wal,
|
||||
SUBSLICE_UNIT_LEVEL_CLKGATE2,
|
||||
CPSSUNIT_CLKGATE_DIS);
|
||||
|
||||
/* Wa_1607087056:tgl also know as BUG:1409180338 */
|
||||
if (IS_TGL_UY_GT_REVID(i915, TGL_REVID_A0, TGL_REVID_A0))
|
||||
if (IS_TGL_UY_GT_STEPPING(i915, STEP_A0, STEP_A0))
|
||||
wa_write_or(wal,
|
||||
SLICE_UNIT_LEVEL_CLKGATE,
|
||||
L3_CLKGATE_DIS | L3_CR2X_CLKGATE_DIS);
|
||||
|
||||
/* Wa_1408615072:tgl[a0] */
|
||||
if (IS_TGL_UY_GT_REVID(i915, TGL_REVID_A0, TGL_REVID_A0))
|
||||
if (IS_TGL_UY_GT_STEPPING(i915, STEP_A0, STEP_A0))
|
||||
wa_write_or(wal, UNSLICE_UNIT_LEVEL_CLKGATE2,
|
||||
VSUNIT_CLKGATE_DIS_TGL);
|
||||
}
|
||||
@ -1613,7 +1622,7 @@ rcs_engine_wa_init(struct intel_engine_cs *engine, struct i915_wa_list *wal)
|
||||
struct drm_i915_private *i915 = engine->i915;
|
||||
|
||||
if (IS_DG1_REVID(i915, DG1_REVID_A0, DG1_REVID_A0) ||
|
||||
IS_TGL_UY_GT_REVID(i915, TGL_REVID_A0, TGL_REVID_A0)) {
|
||||
IS_TGL_UY_GT_STEPPING(i915, STEP_A0, STEP_A0)) {
|
||||
/*
|
||||
* Wa_1607138336:tgl[a0],dg1[a0]
|
||||
* Wa_1607063988:tgl[a0],dg1[a0]
|
||||
@ -1623,7 +1632,7 @@ rcs_engine_wa_init(struct intel_engine_cs *engine, struct i915_wa_list *wal)
|
||||
GEN12_DISABLE_POSH_BUSY_FF_DOP_CG);
|
||||
}
|
||||
|
||||
if (IS_TGL_UY_GT_REVID(i915, TGL_REVID_A0, TGL_REVID_A0)) {
|
||||
if (IS_TGL_UY_GT_STEPPING(i915, STEP_A0, STEP_A0)) {
|
||||
/*
|
||||
* Wa_1606679103:tgl
|
||||
* (see also Wa_1606682166:icl)
|
||||
@ -1633,45 +1642,45 @@ rcs_engine_wa_init(struct intel_engine_cs *engine, struct i915_wa_list *wal)
|
||||
GEN7_DISABLE_SAMPLER_PREFETCH);
|
||||
}
|
||||
|
||||
if (IS_DG1(i915) || IS_ROCKETLAKE(i915) || IS_TIGERLAKE(i915)) {
|
||||
/* Wa_1606931601:tgl,rkl,dg1 */
|
||||
if (IS_ALDERLAKE_S(i915) || IS_DG1(i915) ||
|
||||
IS_ROCKETLAKE(i915) || IS_TIGERLAKE(i915)) {
|
||||
/* Wa_1606931601:tgl,rkl,dg1,adl-s */
|
||||
wa_masked_en(wal, GEN7_ROW_CHICKEN2, GEN12_DISABLE_EARLY_READ);
|
||||
|
||||
/*
|
||||
* Wa_1407928979:tgl A*
|
||||
* Wa_18011464164:tgl[B0+],dg1[B0+]
|
||||
* Wa_22010931296:tgl[B0+],dg1[B0+]
|
||||
* Wa_14010919138:rkl, dg1
|
||||
* Wa_14010919138:rkl,dg1,adl-s
|
||||
*/
|
||||
wa_write_or(wal, GEN7_FF_THREAD_MODE,
|
||||
GEN12_FF_TESSELATION_DOP_GATE_DISABLE);
|
||||
|
||||
/*
|
||||
* Wa_1606700617:tgl,dg1
|
||||
* Wa_22010271021:tgl,rkl,dg1
|
||||
* Wa_22010271021:tgl,rkl,dg1, adl-s
|
||||
*/
|
||||
wa_masked_en(wal,
|
||||
GEN9_CS_DEBUG_MODE1,
|
||||
FF_DOP_CLOCK_GATE_DISABLE);
|
||||
|
||||
/* Wa_1406941453:tgl,rkl,dg1 */
|
||||
wa_masked_en(wal,
|
||||
GEN10_SAMPLER_MODE,
|
||||
ENABLE_SMALLPL);
|
||||
}
|
||||
|
||||
if (IS_DG1_REVID(i915, DG1_REVID_A0, DG1_REVID_A0) ||
|
||||
if (IS_ALDERLAKE_S(i915) || IS_DG1_REVID(i915, DG1_REVID_A0, DG1_REVID_A0) ||
|
||||
IS_ROCKETLAKE(i915) || IS_TIGERLAKE(i915)) {
|
||||
/* Wa_1409804808:tgl,rkl,dg1[a0] */
|
||||
/* Wa_1409804808:tgl,rkl,dg1[a0],adl-s */
|
||||
wa_masked_en(wal, GEN7_ROW_CHICKEN2,
|
||||
GEN12_PUSH_CONST_DEREF_HOLD_DIS);
|
||||
|
||||
/*
|
||||
* Wa_1409085225:tgl
|
||||
* Wa_14010229206:tgl,rkl,dg1[a0]
|
||||
* Wa_14010229206:tgl,rkl,dg1[a0],adl-s
|
||||
*/
|
||||
wa_masked_en(wal, GEN9_ROW_CHICKEN4, GEN12_DISABLE_TDL_PUSH);
|
||||
}
|
||||
|
||||
|
||||
if (IS_DG1_REVID(i915, DG1_REVID_A0, DG1_REVID_A0) ||
|
||||
IS_ROCKETLAKE(i915) || IS_TIGERLAKE(i915)) {
|
||||
/*
|
||||
* Wa_1607030317:tgl
|
||||
* Wa_1607186500:tgl
|
||||
@ -1688,6 +1697,13 @@ rcs_engine_wa_init(struct intel_engine_cs *engine, struct i915_wa_list *wal)
|
||||
GEN8_RC_SEMA_IDLE_MSG_DISABLE);
|
||||
}
|
||||
|
||||
if (IS_DG1(i915) || IS_ROCKETLAKE(i915) || IS_TIGERLAKE(i915)) {
|
||||
/* Wa_1406941453:tgl,rkl,dg1 */
|
||||
wa_masked_en(wal,
|
||||
GEN10_SAMPLER_MODE,
|
||||
ENABLE_SMALLPL);
|
||||
}
|
||||
|
||||
if (IS_GEN(i915, 11)) {
|
||||
/* This is not an Wa. Enable for better image quality */
|
||||
wa_masked_en(wal,
|
||||
|
@ -44,9 +44,11 @@ void intel_uc_fw_change_status(struct intel_uc_fw *uc_fw,
|
||||
* List of required GuC and HuC binaries per-platform.
|
||||
* Must be ordered based on platform + revid, from newer to older.
|
||||
*
|
||||
* Note that RKL uses the same firmware as TGL.
|
||||
* Note that RKL and ADL-S have the same GuC/HuC device ID's and use the same
|
||||
* firmware as TGL.
|
||||
*/
|
||||
#define INTEL_UC_FIRMWARE_DEFS(fw_def, guc_def, huc_def) \
|
||||
fw_def(ALDERLAKE_S, 0, guc_def(tgl, 49, 0, 1), huc_def(tgl, 7, 5, 0)) \
|
||||
fw_def(ROCKETLAKE, 0, guc_def(tgl, 49, 0, 1), huc_def(tgl, 7, 5, 0)) \
|
||||
fw_def(TIGERLAKE, 0, guc_def(tgl, 49, 0, 1), huc_def(tgl, 7, 5, 0)) \
|
||||
fw_def(JASPERLAKE, 0, guc_def(ehl, 49, 0, 1), huc_def(ehl, 9, 0, 0)) \
|
||||
|
@ -1408,6 +1408,7 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915,
|
||||
#define IS_TIGERLAKE(dev_priv) IS_PLATFORM(dev_priv, INTEL_TIGERLAKE)
|
||||
#define IS_ROCKETLAKE(dev_priv) IS_PLATFORM(dev_priv, INTEL_ROCKETLAKE)
|
||||
#define IS_DG1(dev_priv) IS_PLATFORM(dev_priv, INTEL_DG1)
|
||||
#define IS_ALDERLAKE_S(dev_priv) IS_PLATFORM(dev_priv, INTEL_ALDERLAKE_S)
|
||||
#define IS_HSW_EARLY_SDV(dev_priv) (IS_HASWELL(dev_priv) && \
|
||||
(INTEL_DEVID(dev_priv) & 0xFF00) == 0x0C00)
|
||||
#define IS_BDW_ULT(dev_priv) \
|
||||
@ -1550,54 +1551,60 @@ extern const struct i915_rev_steppings kbl_revids[];
|
||||
(IS_JSL_EHL(p) && IS_REVID(p, since, until))
|
||||
|
||||
enum {
|
||||
TGL_REVID_A0,
|
||||
TGL_REVID_B0,
|
||||
TGL_REVID_B1,
|
||||
TGL_REVID_C0,
|
||||
TGL_REVID_D0,
|
||||
STEP_A0,
|
||||
STEP_A2,
|
||||
STEP_B0,
|
||||
STEP_B1,
|
||||
STEP_C0,
|
||||
STEP_D0,
|
||||
};
|
||||
|
||||
#define TGL_UY_REVIDS_SIZE 4
|
||||
#define TGL_REVIDS_SIZE 2
|
||||
#define TGL_UY_REVID_STEP_TBL_SIZE 4
|
||||
#define TGL_REVID_STEP_TBL_SIZE 2
|
||||
#define ADLS_REVID_STEP_TBL_SIZE 13
|
||||
|
||||
extern const struct i915_rev_steppings tgl_uy_revids[TGL_UY_REVIDS_SIZE];
|
||||
extern const struct i915_rev_steppings tgl_revids[TGL_REVIDS_SIZE];
|
||||
extern const struct i915_rev_steppings tgl_uy_revid_step_tbl[TGL_UY_REVID_STEP_TBL_SIZE];
|
||||
extern const struct i915_rev_steppings tgl_revid_step_tbl[TGL_REVID_STEP_TBL_SIZE];
|
||||
extern const struct i915_rev_steppings adls_revid_step_tbl[ADLS_REVID_STEP_TBL_SIZE];
|
||||
|
||||
static inline const struct i915_rev_steppings *
|
||||
tgl_revids_get(struct drm_i915_private *dev_priv)
|
||||
tgl_stepping_get(struct drm_i915_private *dev_priv)
|
||||
{
|
||||
u8 revid = INTEL_REVID(dev_priv);
|
||||
u8 size;
|
||||
const struct i915_rev_steppings *tgl_revid_tbl;
|
||||
const struct i915_rev_steppings *revid_step_tbl;
|
||||
|
||||
if (IS_TGL_U(dev_priv) || IS_TGL_Y(dev_priv)) {
|
||||
tgl_revid_tbl = tgl_uy_revids;
|
||||
size = ARRAY_SIZE(tgl_uy_revids);
|
||||
if (IS_ALDERLAKE_S(dev_priv)) {
|
||||
revid_step_tbl = adls_revid_step_tbl;
|
||||
size = ARRAY_SIZE(adls_revid_step_tbl);
|
||||
} else if (IS_TGL_U(dev_priv) || IS_TGL_Y(dev_priv)) {
|
||||
revid_step_tbl = tgl_uy_revid_step_tbl;
|
||||
size = ARRAY_SIZE(tgl_uy_revid_step_tbl);
|
||||
} else {
|
||||
tgl_revid_tbl = tgl_revids;
|
||||
size = ARRAY_SIZE(tgl_revids);
|
||||
revid_step_tbl = tgl_revid_step_tbl;
|
||||
size = ARRAY_SIZE(tgl_revid_step_tbl);
|
||||
}
|
||||
|
||||
revid = min_t(u8, revid, size - 1);
|
||||
|
||||
return &tgl_revid_tbl[revid];
|
||||
return &revid_step_tbl[revid];
|
||||
}
|
||||
|
||||
#define IS_TGL_DISP_REVID(p, since, until) \
|
||||
#define IS_TGL_DISP_STEPPING(p, since, until) \
|
||||
(IS_TIGERLAKE(p) && \
|
||||
tgl_revids_get(p)->disp_stepping >= (since) && \
|
||||
tgl_revids_get(p)->disp_stepping <= (until))
|
||||
tgl_stepping_get(p)->disp_stepping >= (since) && \
|
||||
tgl_stepping_get(p)->disp_stepping <= (until))
|
||||
|
||||
#define IS_TGL_UY_GT_REVID(p, since, until) \
|
||||
#define IS_TGL_UY_GT_STEPPING(p, since, until) \
|
||||
((IS_TGL_U(p) || IS_TGL_Y(p)) && \
|
||||
tgl_revids_get(p)->gt_stepping >= (since) && \
|
||||
tgl_revids_get(p)->gt_stepping <= (until))
|
||||
tgl_stepping_get(p)->gt_stepping >= (since) && \
|
||||
tgl_stepping_get(p)->gt_stepping <= (until))
|
||||
|
||||
#define IS_TGL_GT_REVID(p, since, until) \
|
||||
#define IS_TGL_GT_STEPPING(p, since, until) \
|
||||
(IS_TIGERLAKE(p) && \
|
||||
!(IS_TGL_U(p) || IS_TGL_Y(p)) && \
|
||||
tgl_revids_get(p)->gt_stepping >= (since) && \
|
||||
tgl_revids_get(p)->gt_stepping <= (until))
|
||||
tgl_stepping_get(p)->gt_stepping >= (since) && \
|
||||
tgl_stepping_get(p)->gt_stepping <= (until))
|
||||
|
||||
#define RKL_REVID_A0 0x0
|
||||
#define RKL_REVID_B0 0x1
|
||||
@ -1612,6 +1619,22 @@ tgl_revids_get(struct drm_i915_private *dev_priv)
|
||||
#define IS_DG1_REVID(p, since, until) \
|
||||
(IS_DG1(p) && IS_REVID(p, since, until))
|
||||
|
||||
#define ADLS_REVID_A0 0x0
|
||||
#define ADLS_REVID_A2 0x1
|
||||
#define ADLS_REVID_B0 0x4
|
||||
#define ADLS_REVID_G0 0x8
|
||||
#define ADLS_REVID_C0 0xC /*Same as H0 ADLS SOC stepping*/
|
||||
|
||||
#define IS_ADLS_DISP_STEPPING(p, since, until) \
|
||||
(IS_ALDERLAKE_S(p) && \
|
||||
tgl_stepping_get(p)->disp_stepping >= (since) && \
|
||||
tgl_stepping_get(p)->disp_stepping <= (until))
|
||||
|
||||
#define IS_ADLS_GT_STEPPING(p, since, until) \
|
||||
(IS_ALDERLAKE_S(p) && \
|
||||
tgl_stepping_get(p)->gt_stepping >= (since) && \
|
||||
tgl_stepping_get(p)->gt_stepping <= (until))
|
||||
|
||||
#define IS_LP(dev_priv) (INTEL_INFO(dev_priv)->is_lp)
|
||||
#define IS_GEN9_LP(dev_priv) (IS_GEN(dev_priv, 9) && IS_LP(dev_priv))
|
||||
#define IS_GEN9_BC(dev_priv) (IS_GEN(dev_priv, 9) && !IS_LP(dev_priv))
|
||||
@ -1760,6 +1783,9 @@ static inline bool run_as_guest(void)
|
||||
return !hypervisor_is_type(X86_HYPER_NATIVE);
|
||||
}
|
||||
|
||||
#define HAS_D12_PLANE_MINIMIZATION(dev_priv) (IS_ROCKETLAKE(dev_priv) || \
|
||||
IS_ALDERLAKE_S(dev_priv))
|
||||
|
||||
static inline bool intel_vtd_active(void)
|
||||
{
|
||||
#ifdef CONFIG_INTEL_IOMMU
|
||||
|
@ -209,8 +209,7 @@ static void intel_hpd_init_pins(struct drm_i915_private *dev_priv)
|
||||
|
||||
if (HAS_PCH_DG1(dev_priv))
|
||||
hpd->pch_hpd = hpd_sde_dg1;
|
||||
else if (HAS_PCH_TGP(dev_priv) || HAS_PCH_JSP(dev_priv) ||
|
||||
HAS_PCH_ICP(dev_priv) || HAS_PCH_MCC(dev_priv))
|
||||
else if (INTEL_PCH_TYPE(dev_priv) >= PCH_ICP)
|
||||
hpd->pch_hpd = hpd_icp;
|
||||
else if (HAS_PCH_CNP(dev_priv) || HAS_PCH_SPT(dev_priv))
|
||||
hpd->pch_hpd = hpd_spt;
|
||||
@ -2290,7 +2289,7 @@ static u32 gen8_de_port_aux_mask(struct drm_i915_private *dev_priv)
|
||||
|
||||
static u32 gen8_de_pipe_fault_mask(struct drm_i915_private *dev_priv)
|
||||
{
|
||||
if (IS_ROCKETLAKE(dev_priv))
|
||||
if (HAS_D12_PLANE_MINIMIZATION(dev_priv))
|
||||
return RKL_DE_PIPE_IRQ_FAULT_ERRORS;
|
||||
else if (INTEL_GEN(dev_priv) >= 11)
|
||||
return GEN11_DE_PIPE_IRQ_FAULT_ERRORS;
|
||||
|
@ -923,6 +923,18 @@ static const struct intel_device_info dg1_info __maybe_unused = {
|
||||
.ppgtt_size = 47,
|
||||
};
|
||||
|
||||
static const struct intel_device_info adl_s_info = {
|
||||
GEN12_FEATURES,
|
||||
PLATFORM(INTEL_ALDERLAKE_S),
|
||||
.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C) | BIT(PIPE_D),
|
||||
.require_force_probe = 1,
|
||||
.display.has_hti = 1,
|
||||
.display.has_psr_hw_tracking = 0,
|
||||
.platform_engine_mask =
|
||||
BIT(RCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS0) | BIT(VCS2),
|
||||
.dma_mask_size = 46,
|
||||
};
|
||||
|
||||
#undef GEN
|
||||
#undef PLATFORM
|
||||
|
||||
@ -999,6 +1011,7 @@ static const struct pci_device_id pciidlist[] = {
|
||||
INTEL_JSL_IDS(&jsl_info),
|
||||
INTEL_TGL_12_IDS(&tgl_info),
|
||||
INTEL_RKL_IDS(&rkl_info),
|
||||
INTEL_ADLS_IDS(&adl_s_info),
|
||||
{0, 0, 0}
|
||||
};
|
||||
MODULE_DEVICE_TABLE(pci, pciidlist);
|
||||
|
@ -1874,10 +1874,13 @@ static inline bool i915_mmio_reg_valid(i915_reg_t reg)
|
||||
#define _ICL_COMBOPHY_B 0x6C000
|
||||
#define _EHL_COMBOPHY_C 0x160000
|
||||
#define _RKL_COMBOPHY_D 0x161000
|
||||
#define _ADL_COMBOPHY_E 0x16B000
|
||||
|
||||
#define _ICL_COMBOPHY(phy) _PICK(phy, _ICL_COMBOPHY_A, \
|
||||
_ICL_COMBOPHY_B, \
|
||||
_EHL_COMBOPHY_C, \
|
||||
_RKL_COMBOPHY_D)
|
||||
_RKL_COMBOPHY_D, \
|
||||
_ADL_COMBOPHY_E)
|
||||
|
||||
/* CNL/ICL Port CL_DW registers */
|
||||
#define _ICL_PORT_CL_DW(dw, phy) (_ICL_COMBOPHY(phy) + \
|
||||
@ -2927,7 +2930,7 @@ static inline bool i915_mmio_reg_valid(i915_reg_t reg)
|
||||
#define MBUS_BBOX_CTL_S2 _MMIO(0x45044)
|
||||
|
||||
#define HDPORT_STATE _MMIO(0x45050)
|
||||
#define HDPORT_DPLL_USED_MASK REG_GENMASK(14, 12)
|
||||
#define HDPORT_DPLL_USED_MASK REG_GENMASK(15, 12)
|
||||
#define HDPORT_DDI_USED(phy) REG_BIT(2 * (phy) + 1)
|
||||
#define HDPORT_ENABLED REG_BIT(0)
|
||||
|
||||
@ -10356,7 +10359,7 @@ enum skl_power_gate {
|
||||
|
||||
/* ICL Clocks */
|
||||
#define ICL_DPCLKA_CFGCR0 _MMIO(0x164280)
|
||||
#define ICL_DPCLKA_CFGCR0_DDI_CLK_OFF(phy) (1 << _PICK(phy, 10, 11, 24))
|
||||
#define ICL_DPCLKA_CFGCR0_DDI_CLK_OFF(phy) (1 << _PICK(phy, 10, 11, 24, 4, 5))
|
||||
#define RKL_DPCLKA_CFGCR0_DDI_CLK_OFF(phy) REG_BIT((phy) + 10)
|
||||
#define ICL_DPCLKA_CFGCR0_TC_CLK_OFF(tc_port) (1 << ((tc_port) < TC_PORT_4 ? \
|
||||
(tc_port) + 12 : \
|
||||
@ -10391,14 +10394,38 @@ enum skl_power_gate {
|
||||
#define DG1_DPCLKA_CFGCR0_DDI_CLK_SEL_DPLL_MAP(clk_sel, phy) \
|
||||
(((clk_sel) >> DG1_DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(phy)) + _DG1_PHY_DPLL_MAP(phy))
|
||||
|
||||
/* ADLS Clocks */
|
||||
#define _ADLS_DPCLKA_CFGCR0 0x164280
|
||||
#define _ADLS_DPCLKA_CFGCR1 0x1642BC
|
||||
#define ADLS_DPCLKA_CFGCR(phy) _MMIO_PHY((phy) / 3, \
|
||||
_ADLS_DPCLKA_CFGCR0, \
|
||||
_ADLS_DPCLKA_CFGCR1)
|
||||
#define ADLS_DPCLKA_CFGCR_DDI_SHIFT(phy) (((phy) % 3) * 2)
|
||||
/* ADLS DPCLKA_CFGCR0 DDI mask */
|
||||
#define ADLS_DPCLKA_DDII_SEL_MASK REG_GENMASK(5, 4)
|
||||
#define ADLS_DPCLKA_DDIB_SEL_MASK REG_GENMASK(3, 2)
|
||||
#define ADLS_DPCLKA_DDIA_SEL_MASK REG_GENMASK(1, 0)
|
||||
/* ADLS DPCLKA_CFGCR1 DDI mask */
|
||||
#define ADLS_DPCLKA_DDIK_SEL_MASK REG_GENMASK(3, 2)
|
||||
#define ADLS_DPCLKA_DDIJ_SEL_MASK REG_GENMASK(1, 0)
|
||||
#define ADLS_DPCLKA_CFGCR_DDI_CLK_SEL_MASK(phy) _PICK((phy), \
|
||||
ADLS_DPCLKA_DDIA_SEL_MASK, \
|
||||
ADLS_DPCLKA_DDIB_SEL_MASK, \
|
||||
ADLS_DPCLKA_DDII_SEL_MASK, \
|
||||
ADLS_DPCLKA_DDIJ_SEL_MASK, \
|
||||
ADLS_DPCLKA_DDIK_SEL_MASK)
|
||||
|
||||
/* CNL PLL */
|
||||
#define DPLL0_ENABLE 0x46010
|
||||
#define DPLL1_ENABLE 0x46014
|
||||
#define _ADLS_DPLL2_ENABLE 0x46018
|
||||
#define _ADLS_DPLL3_ENABLE 0x46030
|
||||
#define PLL_ENABLE (1 << 31)
|
||||
#define PLL_LOCK (1 << 30)
|
||||
#define PLL_POWER_ENABLE (1 << 27)
|
||||
#define PLL_POWER_STATE (1 << 26)
|
||||
#define CNL_DPLL_ENABLE(pll) _MMIO_PLL(pll, DPLL0_ENABLE, DPLL1_ENABLE)
|
||||
#define CNL_DPLL_ENABLE(pll) _MMIO_PLL3(pll, DPLL0_ENABLE, DPLL1_ENABLE, \
|
||||
_ADLS_DPLL2_ENABLE, _ADLS_DPLL3_ENABLE)
|
||||
|
||||
#define TBT_PLL_ENABLE _MMIO(0x46020)
|
||||
|
||||
@ -10644,6 +10671,21 @@ enum skl_power_gate {
|
||||
_DG1_DPLL2_CFGCR1, \
|
||||
_DG1_DPLL3_CFGCR1)
|
||||
|
||||
/* For ADL-S DPLL4_CFGCR0/1 are used to control DPLL2 */
|
||||
#define _ADLS_DPLL3_CFGCR0 0x1642C0
|
||||
#define _ADLS_DPLL4_CFGCR0 0x164294
|
||||
#define ADLS_DPLL_CFGCR0(pll) _MMIO_PLL3(pll, _TGL_DPLL0_CFGCR0, \
|
||||
_TGL_DPLL1_CFGCR0, \
|
||||
_ADLS_DPLL4_CFGCR0, \
|
||||
_ADLS_DPLL3_CFGCR0)
|
||||
|
||||
#define _ADLS_DPLL3_CFGCR1 0x1642C4
|
||||
#define _ADLS_DPLL4_CFGCR1 0x164298
|
||||
#define ADLS_DPLL_CFGCR1(pll) _MMIO_PLL3(pll, _TGL_DPLL0_CFGCR1, \
|
||||
_TGL_DPLL1_CFGCR1, \
|
||||
_ADLS_DPLL4_CFGCR1, \
|
||||
_ADLS_DPLL3_CFGCR1)
|
||||
|
||||
#define _DKL_PHY1_BASE 0x168000
|
||||
#define _DKL_PHY2_BASE 0x169000
|
||||
#define _DKL_PHY3_BASE 0x16A000
|
||||
|
@ -66,6 +66,7 @@ static const char * const platform_names[] = {
|
||||
PLATFORM_NAME(TIGERLAKE),
|
||||
PLATFORM_NAME(ROCKETLAKE),
|
||||
PLATFORM_NAME(DG1),
|
||||
PLATFORM_NAME(ALDERLAKE_S),
|
||||
};
|
||||
#undef PLATFORM_NAME
|
||||
|
||||
@ -249,7 +250,11 @@ void intel_device_info_runtime_init(struct drm_i915_private *dev_priv)
|
||||
struct intel_runtime_info *runtime = RUNTIME_INFO(dev_priv);
|
||||
enum pipe pipe;
|
||||
|
||||
if (INTEL_GEN(dev_priv) >= 10) {
|
||||
/* Wa_14011765242: adl-s A0 */
|
||||
if (IS_ADLS_DISP_STEPPING(dev_priv, STEP_A0, STEP_A0))
|
||||
for_each_pipe(dev_priv, pipe)
|
||||
runtime->num_scalers[pipe] = 0;
|
||||
else if (INTEL_GEN(dev_priv) >= 10) {
|
||||
for_each_pipe(dev_priv, pipe)
|
||||
runtime->num_scalers[pipe] = 2;
|
||||
} else if (IS_GEN(dev_priv, 9)) {
|
||||
@ -260,7 +265,7 @@ void intel_device_info_runtime_init(struct drm_i915_private *dev_priv)
|
||||
|
||||
BUILD_BUG_ON(BITS_PER_TYPE(intel_engine_mask_t) < I915_NUM_ENGINES);
|
||||
|
||||
if (IS_ROCKETLAKE(dev_priv))
|
||||
if (HAS_D12_PLANE_MINIMIZATION(dev_priv))
|
||||
for_each_pipe(dev_priv, pipe)
|
||||
runtime->num_sprites[pipe] = 4;
|
||||
else if (INTEL_GEN(dev_priv) >= 11)
|
||||
|
@ -84,6 +84,7 @@ enum intel_platform {
|
||||
INTEL_TIGERLAKE,
|
||||
INTEL_ROCKETLAKE,
|
||||
INTEL_DG1,
|
||||
INTEL_ALDERLAKE_S,
|
||||
INTEL_MAX_PLATFORMS
|
||||
};
|
||||
|
||||
|
@ -128,6 +128,10 @@ intel_pch_type(const struct drm_i915_private *dev_priv, unsigned short id)
|
||||
drm_dbg_kms(&dev_priv->drm, "Found Jasper Lake PCH\n");
|
||||
drm_WARN_ON(&dev_priv->drm, !IS_JSL_EHL(dev_priv));
|
||||
return PCH_JSP;
|
||||
case INTEL_PCH_ADP_DEVICE_ID_TYPE:
|
||||
drm_dbg_kms(&dev_priv->drm, "Found Alder Lake PCH\n");
|
||||
drm_WARN_ON(&dev_priv->drm, !IS_ALDERLAKE_S(dev_priv));
|
||||
return PCH_ADP;
|
||||
default:
|
||||
return PCH_NONE;
|
||||
}
|
||||
@ -156,7 +160,9 @@ intel_virt_detect_pch(const struct drm_i915_private *dev_priv,
|
||||
* make an educated guess as to which PCH is really there.
|
||||
*/
|
||||
|
||||
if (IS_TIGERLAKE(dev_priv) || IS_ROCKETLAKE(dev_priv))
|
||||
if (IS_ALDERLAKE_S(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))
|
||||
id = INTEL_PCH_MCC_DEVICE_ID_TYPE;
|
||||
|
@ -26,6 +26,7 @@ enum intel_pch {
|
||||
PCH_JSP, /* Jasper Lake PCH */
|
||||
PCH_MCC, /* Mule Creek Canyon PCH */
|
||||
PCH_TGP, /* Tiger Lake PCH */
|
||||
PCH_ADP, /* Alder Lake PCH */
|
||||
|
||||
/* Fake PCHs, functionality handled on the same PCI dev */
|
||||
PCH_DG1 = 1024,
|
||||
@ -53,12 +54,14 @@ enum intel_pch {
|
||||
#define INTEL_PCH_TGP2_DEVICE_ID_TYPE 0x4380
|
||||
#define INTEL_PCH_JSP_DEVICE_ID_TYPE 0x4D80
|
||||
#define INTEL_PCH_JSP2_DEVICE_ID_TYPE 0x3880
|
||||
#define INTEL_PCH_ADP_DEVICE_ID_TYPE 0x7A80
|
||||
#define INTEL_PCH_P2X_DEVICE_ID_TYPE 0x7100
|
||||
#define INTEL_PCH_P3X_DEVICE_ID_TYPE 0x7000
|
||||
#define INTEL_PCH_QEMU_DEVICE_ID_TYPE 0x2900 /* qemu q35 has 2918 */
|
||||
|
||||
#define INTEL_PCH_TYPE(dev_priv) ((dev_priv)->pch_type)
|
||||
#define INTEL_PCH_ID(dev_priv) ((dev_priv)->pch_id)
|
||||
#define HAS_PCH_ADP(dev_priv) (INTEL_PCH_TYPE(dev_priv) == PCH_ADP)
|
||||
#define HAS_PCH_DG1(dev_priv) (INTEL_PCH_TYPE(dev_priv) == PCH_DG1)
|
||||
#define HAS_PCH_JSP(dev_priv) (INTEL_PCH_TYPE(dev_priv) == PCH_JSP)
|
||||
#define HAS_PCH_MCC(dev_priv) (INTEL_PCH_TYPE(dev_priv) == PCH_MCC)
|
||||
|
@ -7072,7 +7072,7 @@ static void gen12lp_init_clock_gating(struct drm_i915_private *dev_priv)
|
||||
ILK_DPFC_CHICKEN_COMP_DUMMY_PIXEL);
|
||||
|
||||
/* Wa_1409825376:tgl (pre-prod)*/
|
||||
if (IS_TGL_DISP_REVID(dev_priv, TGL_REVID_A0, TGL_REVID_B1))
|
||||
if (IS_TGL_DISP_STEPPING(dev_priv, STEP_A0, STEP_B1))
|
||||
intel_uncore_write(&dev_priv->uncore, GEN9_CLKGATE_DIS_3, intel_uncore_read(&dev_priv->uncore, GEN9_CLKGATE_DIS_3) |
|
||||
TGL_VRH_GATING_DIS);
|
||||
|
||||
|
@ -634,4 +634,15 @@
|
||||
INTEL_VGA_DEVICE(0x4907, info), \
|
||||
INTEL_VGA_DEVICE(0x4908, info)
|
||||
|
||||
/* ADL-S */
|
||||
#define INTEL_ADLS_IDS(info) \
|
||||
INTEL_VGA_DEVICE(0x4680, info), \
|
||||
INTEL_VGA_DEVICE(0x4681, info), \
|
||||
INTEL_VGA_DEVICE(0x4682, info), \
|
||||
INTEL_VGA_DEVICE(0x4683, info), \
|
||||
INTEL_VGA_DEVICE(0x4690, info), \
|
||||
INTEL_VGA_DEVICE(0x4691, info), \
|
||||
INTEL_VGA_DEVICE(0x4692, info), \
|
||||
INTEL_VGA_DEVICE(0x4693, info)
|
||||
|
||||
#endif /* _I915_PCIIDS_H */
|
||||
|
Loading…
Reference in New Issue
Block a user