drm/i915/adl_p: Add PCH support
authorClinton Taylor <Clinton.A.Taylor@intel.com>
Wed, 12 May 2021 04:21:43 +0000 (21:21 -0700)
committerMatt Roper <matthew.d.roper@intel.com>
Wed, 12 May 2021 23:56:56 +0000 (16:56 -0700)
Add ADP-P PCH device ID and assign as ADL PCH if found. Previously we
would assign the DDC pin map based on the PCH, but it can also change
based on the CPU. From Bspec 20124: "The physical port to pin pair
mapping are defined in the Bspec per PCH. Mapping can further change
based on CPU Si used as CPU and PCH can be mixed and matched".

Bspec: 20124
Cc: Matt Atwood <matthew.s.atwood@intel.com>
Cc: Matt Roper <matthew.d.roper@intel.com>
Signed-off-by: Clinton Taylor <Clinton.A.Taylor@intel.com>
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Reviewed-by: Anusha Srivatsa <anusha.srivatsa@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210512042144.2089071-7-matthew.d.roper@intel.com
drivers/gpu/drm/i915/display/intel_bios.c
drivers/gpu/drm/i915/display/intel_hdmi.c
drivers/gpu/drm/i915/intel_pch.c
drivers/gpu/drm/i915/intel_pch.h

index a783c5a409347fddd7adad7542c3d91ca05cb832..9785dfc2de0baa5955f47f439469ca574676a5de 100644 (file)
@@ -1651,7 +1651,7 @@ static u8 map_ddc_pin(struct drm_i915_private *i915, u8 vbt_pin)
        const u8 *ddc_pin_map;
        int n_entries;
 
-       if (HAS_PCH_ADP(i915)) {
+       if (IS_ALDERLAKE_S(i915)) {
                ddc_pin_map = adls_ddc_pin_map;
                n_entries = ARRAY_SIZE(adls_ddc_pin_map);
        } else if (INTEL_PCH_TYPE(i915) >= PCH_DG1) {
index c03a4603e213c5e163bd79504e95472d5ef074db..c7d51766aae7a2f9563d5fc2aa8cb945615b4f54 100644 (file)
@@ -2748,7 +2748,7 @@ static u8 intel_hdmi_ddc_pin(struct intel_encoder *encoder)
                return ddc_pin;
        }
 
-       if (HAS_PCH_ADP(dev_priv))
+       if (IS_ALDERLAKE_S(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);
index 7476f0e063c6ced292fcfcc17a9d1f705c489666..98a17dd1bda451193123475614aa2901b048fef1 100644 (file)
@@ -130,8 +130,10 @@ intel_pch_type(const struct drm_i915_private *dev_priv, unsigned short id)
                drm_WARN_ON(&dev_priv->drm, !IS_JSL_EHL(dev_priv));
                return PCH_JSP;
        case INTEL_PCH_ADP_DEVICE_ID_TYPE:
+       case INTEL_PCH_ADP2_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));
+               drm_WARN_ON(&dev_priv->drm, !IS_ALDERLAKE_S(dev_priv) &&
+                           !IS_ALDERLAKE_P(dev_priv));
                return PCH_ADP;
        default:
                return PCH_NONE;
@@ -161,7 +163,7 @@ 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))
+       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;
index 7318377503b00234629bff2a4c8fdb5332741c03..e2f3f30c644591be1205d22bbb0dd32c090d4091 100644 (file)
@@ -55,6 +55,7 @@ enum intel_pch {
 #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_ADP2_DEVICE_ID_TYPE          0x5180
 #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 */