Created
June 30, 2024 03:42
-
-
Save mfenniak/53a8cae856c66ec1f0a100703aab3690 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/drivers/gpu/drm/i915/display/intel_backlight.c b/drivers/gpu/drm/i915/display/intel_backlight.c | |
index 071668bfe5d1..835aac02ee13 100644 | |
--- a/drivers/gpu/drm/i915/display/intel_backlight.c | |
+++ b/drivers/gpu/drm/i915/display/intel_backlight.c | |
@@ -1465,7 +1465,7 @@ static bool cnp_backlight_controller_is_valid(struct drm_i915_private *i915, int | |
if (controller == 1 && | |
INTEL_PCH_TYPE(i915) >= PCH_ICP && | |
- INTEL_PCH_TYPE(i915) <= PCH_ADP) | |
+ INTEL_PCH_TYPE(i915) < PCH_MTP) | |
return intel_de_read(i915, SOUTH_CHICKEN1) & ICP_SECOND_PPS_IO_SELECT; | |
return true; | |
diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c | |
index 5fb48b6129b6..c40da7d16df8 100644 | |
--- a/drivers/gpu/drm/i915/display/intel_bios.c | |
+++ b/drivers/gpu/drm/i915/display/intel_bios.c | |
@@ -2223,7 +2223,8 @@ static u8 map_ddc_pin(struct drm_i915_private *i915, u8 vbt_pin) | |
if (IS_DGFX(i915)) | |
return vbt_pin; | |
- if (INTEL_PCH_TYPE(i915) >= PCH_MTL || IS_ALDERLAKE_P(i915)) { | |
+ if (INTEL_PCH_TYPE(i915) >= PCH_LNL || HAS_PCH_MTP(i915) || | |
+ IS_ALDERLAKE_P(i915)) { | |
ddc_pin_map = adlp_ddc_pin_map; | |
n_entries = ARRAY_SIZE(adlp_ddc_pin_map); | |
} else if (IS_ALDERLAKE_S(i915)) { | |
diff --git a/drivers/gpu/drm/i915/display/intel_cdclk.c b/drivers/gpu/drm/i915/display/intel_cdclk.c | |
index 7a833b5f2de2..8326cdad2534 100644 | |
--- a/drivers/gpu/drm/i915/display/intel_cdclk.c | |
+++ b/drivers/gpu/drm/i915/display/intel_cdclk.c | |
@@ -3588,15 +3588,15 @@ u32 intel_read_rawclk(struct drm_i915_private *dev_priv) | |
{ | |
u32 freq; | |
- if (INTEL_PCH_TYPE(dev_priv) >= PCH_MTL) | |
+ if (INTEL_PCH_TYPE(dev_priv) >= PCH_DG1) | |
+ freq = dg1_rawclk(dev_priv); | |
+ else if (INTEL_PCH_TYPE(dev_priv) >= PCH_MTP) | |
/* | |
* MTL always uses a 38.4 MHz rawclk. The bspec tells us | |
* "RAWCLK_FREQ defaults to the values for 38.4 and does | |
* not need to be programmed." | |
*/ | |
freq = 38400; | |
- else if (INTEL_PCH_TYPE(dev_priv) >= PCH_DG1) | |
- freq = dg1_rawclk(dev_priv); | |
else if (INTEL_PCH_TYPE(dev_priv) >= PCH_CNP) | |
freq = cnp_rawclk(dev_priv); | |
else if (HAS_PCH_SPLIT(dev_priv)) | |
diff --git a/drivers/gpu/drm/i915/display/intel_display_irq.c b/drivers/gpu/drm/i915/display/intel_display_irq.c | |
index c337e0597541..970dfb761972 100644 | |
--- a/drivers/gpu/drm/i915/display/intel_display_irq.c | |
+++ b/drivers/gpu/drm/i915/display/intel_display_irq.c | |
@@ -987,7 +987,7 @@ static void gen8_read_and_ack_pch_irqs(struct drm_i915_private *i915, u32 *pch_i | |
* their flags both in the PICA and SDE IIR. | |
*/ | |
if (*pch_iir & SDE_PICAINTERRUPT) { | |
- drm_WARN_ON(&i915->drm, INTEL_PCH_TYPE(i915) < PCH_MTL); | |
+ drm_WARN_ON(&i915->drm, INTEL_PCH_TYPE(i915) < PCH_MTP); | |
pica_ier = intel_de_rmw(i915, PICAINTERRUPT_IER, ~0, 0); | |
*pica_iir = intel_de_read(i915, PICAINTERRUPT_IIR); | |
diff --git a/drivers/gpu/drm/i915/display/intel_gmbus.c b/drivers/gpu/drm/i915/display/intel_gmbus.c | |
index 9c8e1e91ff1c..1f403af39684 100644 | |
--- a/drivers/gpu/drm/i915/display/intel_gmbus.c | |
+++ b/drivers/gpu/drm/i915/display/intel_gmbus.c | |
@@ -155,7 +155,7 @@ static const struct gmbus_pin *get_gmbus_pin(struct drm_i915_private *i915, | |
const struct gmbus_pin *pins; | |
size_t size; | |
- if (INTEL_PCH_TYPE(i915) >= PCH_MTL) { | |
+ if (INTEL_PCH_TYPE(i915) >= PCH_LNL) { | |
pins = gmbus_pins_mtp; | |
size = ARRAY_SIZE(gmbus_pins_mtp); | |
} else if (INTEL_PCH_TYPE(i915) >= PCH_DG2) { | |
@@ -164,6 +164,9 @@ static const struct gmbus_pin *get_gmbus_pin(struct drm_i915_private *i915, | |
} else if (INTEL_PCH_TYPE(i915) >= PCH_DG1) { | |
pins = gmbus_pins_dg1; | |
size = ARRAY_SIZE(gmbus_pins_dg1); | |
+ } else if (INTEL_PCH_TYPE(i915) >= PCH_MTP) { | |
+ pins = gmbus_pins_mtp; | |
+ size = ARRAY_SIZE(gmbus_pins_mtp); | |
} else if (INTEL_PCH_TYPE(i915) >= PCH_ICP) { | |
pins = gmbus_pins_icp; | |
size = ARRAY_SIZE(gmbus_pins_icp); | |
diff --git a/drivers/gpu/drm/i915/display/intel_hotplug_irq.c b/drivers/gpu/drm/i915/display/intel_hotplug_irq.c | |
index d270bb7b9462..7f83053501e0 100644 | |
--- a/drivers/gpu/drm/i915/display/intel_hotplug_irq.c | |
+++ b/drivers/gpu/drm/i915/display/intel_hotplug_irq.c | |
@@ -163,10 +163,12 @@ static void intel_hpd_init_pins(struct drm_i915_private *dev_priv) | |
(!HAS_PCH_SPLIT(dev_priv) || HAS_PCH_NOP(dev_priv))) | |
return; | |
- if (INTEL_PCH_TYPE(dev_priv) >= PCH_MTL) | |
+ if (INTEL_PCH_TYPE(dev_priv) >= PCH_LNL) | |
hpd->pch_hpd = hpd_mtp; | |
else if (INTEL_PCH_TYPE(dev_priv) >= PCH_DG1) | |
hpd->pch_hpd = hpd_sde_dg1; | |
+ else if (INTEL_PCH_TYPE(dev_priv) >= PCH_MTP) | |
+ hpd->pch_hpd = hpd_mtp; | |
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)) | |
@@ -1137,7 +1139,7 @@ static void xelpdp_hpd_irq_setup(struct drm_i915_private *i915) | |
if (INTEL_PCH_TYPE(i915) >= PCH_LNL) | |
xe2lpd_sde_hpd_irq_setup(i915); | |
- else if (INTEL_PCH_TYPE(i915) >= PCH_MTL) | |
+ else if (INTEL_PCH_TYPE(i915) >= PCH_MTP) | |
mtp_hpd_irq_setup(i915); | |
} | |
diff --git a/drivers/gpu/drm/i915/display/intel_pps.c b/drivers/gpu/drm/i915/display/intel_pps.c | |
index 0ccbf9a85914..4bcea45ac274 100644 | |
--- a/drivers/gpu/drm/i915/display/intel_pps.c | |
+++ b/drivers/gpu/drm/i915/display/intel_pps.c | |
@@ -366,7 +366,7 @@ static bool intel_pps_is_valid(struct intel_dp *intel_dp) | |
if (intel_dp->pps.pps_idx == 1 && | |
INTEL_PCH_TYPE(i915) >= PCH_ICP && | |
- INTEL_PCH_TYPE(i915) <= PCH_ADP) | |
+ INTEL_PCH_TYPE(i915) < PCH_MTP) | |
return intel_de_read(i915, SOUTH_CHICKEN1) & ICP_SECOND_PPS_IO_SELECT; | |
return true; | |
diff --git a/drivers/gpu/drm/i915/soc/intel_pch.c b/drivers/gpu/drm/i915/soc/intel_pch.c | |
index 3cad6dac06b0..240beafb38ed 100644 | |
--- a/drivers/gpu/drm/i915/soc/intel_pch.c | |
+++ b/drivers/gpu/drm/i915/soc/intel_pch.c | |
@@ -140,6 +140,11 @@ intel_pch_type(const struct drm_i915_private *dev_priv, unsigned short id) | |
drm_WARN_ON(&dev_priv->drm, !IS_ALDERLAKE_S(dev_priv) && | |
!IS_ALDERLAKE_P(dev_priv)); | |
return PCH_ADP; | |
+ case INTEL_PCH_MTP_DEVICE_ID_TYPE: | |
+ case INTEL_PCH_MTP2_DEVICE_ID_TYPE: | |
+ drm_dbg_kms(&dev_priv->drm, "Found Meteor Lake PCH\n"); | |
+ drm_WARN_ON(&dev_priv->drm, !IS_METEORLAKE(dev_priv)); | |
+ return PCH_MTP; | |
default: | |
return PCH_NONE; | |
} | |
@@ -168,7 +173,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_ALDERLAKE_S(dev_priv) || IS_ALDERLAKE_P(dev_priv)) | |
+ if (IS_METEORLAKE(dev_priv)) | |
+ id = INTEL_PCH_MTP_DEVICE_ID_TYPE; | |
+ else if (IS_ALDERLAKE_S(dev_priv) || IS_ALDERLAKE_P(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; | |
@@ -218,13 +225,6 @@ void intel_detect_pch(struct drm_i915_private *dev_priv) | |
if (DISPLAY_VER(dev_priv) >= 20) { | |
dev_priv->pch_type = PCH_LNL; | |
return; | |
- } else if (IS_METEORLAKE(dev_priv)) { | |
- /* | |
- * Both north display and south display are on the SoC die. | |
- * The real PCH is uninvolved in display. | |
- */ | |
- dev_priv->pch_type = PCH_MTL; | |
- return; | |
} else if (IS_DG2(dev_priv)) { | |
dev_priv->pch_type = PCH_DG2; | |
return; | |
diff --git a/drivers/gpu/drm/i915/soc/intel_pch.h b/drivers/gpu/drm/i915/soc/intel_pch.h | |
index 89e89ede265d..1b03ea60a7a8 100644 | |
--- a/drivers/gpu/drm/i915/soc/intel_pch.h | |
+++ b/drivers/gpu/drm/i915/soc/intel_pch.h | |
@@ -25,11 +25,11 @@ enum intel_pch { | |
PCH_ICP, /* Ice Lake/Jasper Lake PCH */ | |
PCH_TGP, /* Tiger Lake/Mule Creek Canyon PCH */ | |
PCH_ADP, /* Alder Lake PCH */ | |
+ PCH_MTP, /* Meteor Lake PCH */ | |
/* Fake PCHs, functionality handled on the same PCI dev */ | |
PCH_DG1 = 1024, | |
PCH_DG2, | |
- PCH_MTL, | |
PCH_LNL, | |
}; | |
@@ -59,12 +59,16 @@ enum intel_pch { | |
#define INTEL_PCH_ADP2_DEVICE_ID_TYPE 0x5180 | |
#define INTEL_PCH_ADP3_DEVICE_ID_TYPE 0x7A00 | |
#define INTEL_PCH_ADP4_DEVICE_ID_TYPE 0x5480 | |
+#define INTEL_PCH_MTP_DEVICE_ID_TYPE 0x7E00 | |
+#define INTEL_PCH_MTP2_DEVICE_ID_TYPE 0xAE00 | |
#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_LNL(dev_priv) (INTEL_PCH_TYPE(dev_priv) == PCH_LNL) | |
+#define HAS_PCH_MTP(dev_priv) (INTEL_PCH_TYPE(dev_priv) == PCH_MTP) | |
#define HAS_PCH_DG2(dev_priv) (INTEL_PCH_TYPE(dev_priv) == PCH_DG2) | |
#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) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment