|
@@ -182,100 +182,103 @@ static void intel_detect_pch(struct drm_i915_private *dev_priv)
|
|
|
* of only checking the first one.
|
|
|
*/
|
|
|
while ((pch = pci_get_class(PCI_CLASS_BRIDGE_ISA << 8, pch))) {
|
|
|
- if (pch->vendor == PCI_VENDOR_ID_INTEL) {
|
|
|
- unsigned short id = pch->device & INTEL_PCH_DEVICE_ID_MASK;
|
|
|
-
|
|
|
- dev_priv->pch_id = id;
|
|
|
-
|
|
|
- if (id == INTEL_PCH_IBX_DEVICE_ID_TYPE) {
|
|
|
- dev_priv->pch_type = PCH_IBX;
|
|
|
- DRM_DEBUG_KMS("Found Ibex Peak PCH\n");
|
|
|
- WARN_ON(!IS_GEN5(dev_priv));
|
|
|
- } else if (id == INTEL_PCH_CPT_DEVICE_ID_TYPE) {
|
|
|
- dev_priv->pch_type = PCH_CPT;
|
|
|
- DRM_DEBUG_KMS("Found CougarPoint PCH\n");
|
|
|
- WARN_ON(!IS_GEN6(dev_priv) &&
|
|
|
- !IS_IVYBRIDGE(dev_priv));
|
|
|
- } else if (id == INTEL_PCH_PPT_DEVICE_ID_TYPE) {
|
|
|
- /* PantherPoint is CPT compatible */
|
|
|
- dev_priv->pch_type = PCH_CPT;
|
|
|
- DRM_DEBUG_KMS("Found PantherPoint PCH\n");
|
|
|
- WARN_ON(!IS_GEN6(dev_priv) &&
|
|
|
- !IS_IVYBRIDGE(dev_priv));
|
|
|
- } else if (id == INTEL_PCH_LPT_DEVICE_ID_TYPE) {
|
|
|
- dev_priv->pch_type = PCH_LPT;
|
|
|
- DRM_DEBUG_KMS("Found LynxPoint PCH\n");
|
|
|
- WARN_ON(!IS_HASWELL(dev_priv) &&
|
|
|
- !IS_BROADWELL(dev_priv));
|
|
|
- WARN_ON(IS_HSW_ULT(dev_priv) ||
|
|
|
- IS_BDW_ULT(dev_priv));
|
|
|
- } else if (id == INTEL_PCH_LPT_LP_DEVICE_ID_TYPE) {
|
|
|
- dev_priv->pch_type = PCH_LPT;
|
|
|
- DRM_DEBUG_KMS("Found LynxPoint LP PCH\n");
|
|
|
- WARN_ON(!IS_HASWELL(dev_priv) &&
|
|
|
- !IS_BROADWELL(dev_priv));
|
|
|
- WARN_ON(!IS_HSW_ULT(dev_priv) &&
|
|
|
- !IS_BDW_ULT(dev_priv));
|
|
|
- } else if (id == INTEL_PCH_WPT_DEVICE_ID_TYPE) {
|
|
|
- /* WildcatPoint is LPT compatible */
|
|
|
- dev_priv->pch_type = PCH_LPT;
|
|
|
- DRM_DEBUG_KMS("Found WildcatPoint PCH\n");
|
|
|
- WARN_ON(!IS_HASWELL(dev_priv) &&
|
|
|
- !IS_BROADWELL(dev_priv));
|
|
|
- WARN_ON(IS_HSW_ULT(dev_priv) ||
|
|
|
- IS_BDW_ULT(dev_priv));
|
|
|
- } else if (id == INTEL_PCH_WPT_LP_DEVICE_ID_TYPE) {
|
|
|
- /* WildcatPoint is LPT compatible */
|
|
|
- dev_priv->pch_type = PCH_LPT;
|
|
|
- DRM_DEBUG_KMS("Found WildcatPoint LP PCH\n");
|
|
|
- WARN_ON(!IS_HASWELL(dev_priv) &&
|
|
|
- !IS_BROADWELL(dev_priv));
|
|
|
- WARN_ON(!IS_HSW_ULT(dev_priv) &&
|
|
|
- !IS_BDW_ULT(dev_priv));
|
|
|
- } else if (id == INTEL_PCH_SPT_DEVICE_ID_TYPE) {
|
|
|
- dev_priv->pch_type = PCH_SPT;
|
|
|
- DRM_DEBUG_KMS("Found SunrisePoint PCH\n");
|
|
|
- WARN_ON(!IS_SKYLAKE(dev_priv) &&
|
|
|
- !IS_KABYLAKE(dev_priv));
|
|
|
- } else if (id == INTEL_PCH_SPT_LP_DEVICE_ID_TYPE) {
|
|
|
- dev_priv->pch_type = PCH_SPT;
|
|
|
- DRM_DEBUG_KMS("Found SunrisePoint LP PCH\n");
|
|
|
- WARN_ON(!IS_SKYLAKE(dev_priv) &&
|
|
|
- !IS_KABYLAKE(dev_priv));
|
|
|
- } else if (id == INTEL_PCH_KBP_DEVICE_ID_TYPE) {
|
|
|
- dev_priv->pch_type = PCH_KBP;
|
|
|
- DRM_DEBUG_KMS("Found Kaby Lake PCH (KBP)\n");
|
|
|
- WARN_ON(!IS_SKYLAKE(dev_priv) &&
|
|
|
- !IS_KABYLAKE(dev_priv) &&
|
|
|
- !IS_COFFEELAKE(dev_priv));
|
|
|
- } else if (id == INTEL_PCH_CNP_DEVICE_ID_TYPE) {
|
|
|
- dev_priv->pch_type = PCH_CNP;
|
|
|
- DRM_DEBUG_KMS("Found Cannon Lake PCH (CNP)\n");
|
|
|
- WARN_ON(!IS_CANNONLAKE(dev_priv) &&
|
|
|
- !IS_COFFEELAKE(dev_priv));
|
|
|
- } else if (id == INTEL_PCH_CNP_LP_DEVICE_ID_TYPE) {
|
|
|
- dev_priv->pch_type = PCH_CNP;
|
|
|
- DRM_DEBUG_KMS("Found Cannon Lake LP PCH (CNP-LP)\n");
|
|
|
- WARN_ON(!IS_CANNONLAKE(dev_priv) &&
|
|
|
- !IS_COFFEELAKE(dev_priv));
|
|
|
- } else if (id == INTEL_PCH_ICP_DEVICE_ID_TYPE) {
|
|
|
- dev_priv->pch_type = PCH_ICP;
|
|
|
- DRM_DEBUG_KMS("Found Ice Lake PCH\n");
|
|
|
- WARN_ON(!IS_ICELAKE(dev_priv));
|
|
|
- } else if (id == INTEL_PCH_P2X_DEVICE_ID_TYPE ||
|
|
|
- id == INTEL_PCH_P3X_DEVICE_ID_TYPE ||
|
|
|
- (id == INTEL_PCH_QEMU_DEVICE_ID_TYPE &&
|
|
|
- pch->subsystem_vendor ==
|
|
|
- PCI_SUBVENDOR_ID_REDHAT_QUMRANET &&
|
|
|
- pch->subsystem_device ==
|
|
|
- PCI_SUBDEVICE_ID_QEMU)) {
|
|
|
- dev_priv->pch_type =
|
|
|
- intel_virt_detect_pch(dev_priv);
|
|
|
- } else
|
|
|
- continue;
|
|
|
-
|
|
|
- break;
|
|
|
+ unsigned short id;
|
|
|
+
|
|
|
+ if (pch->vendor != PCI_VENDOR_ID_INTEL)
|
|
|
+ continue;
|
|
|
+
|
|
|
+ id = pch->device & INTEL_PCH_DEVICE_ID_MASK;
|
|
|
+
|
|
|
+ dev_priv->pch_id = id;
|
|
|
+
|
|
|
+ if (id == INTEL_PCH_IBX_DEVICE_ID_TYPE) {
|
|
|
+ dev_priv->pch_type = PCH_IBX;
|
|
|
+ DRM_DEBUG_KMS("Found Ibex Peak PCH\n");
|
|
|
+ WARN_ON(!IS_GEN5(dev_priv));
|
|
|
+ } else if (id == INTEL_PCH_CPT_DEVICE_ID_TYPE) {
|
|
|
+ dev_priv->pch_type = PCH_CPT;
|
|
|
+ DRM_DEBUG_KMS("Found CougarPoint PCH\n");
|
|
|
+ WARN_ON(!IS_GEN6(dev_priv) &&
|
|
|
+ !IS_IVYBRIDGE(dev_priv));
|
|
|
+ } else if (id == INTEL_PCH_PPT_DEVICE_ID_TYPE) {
|
|
|
+ /* PantherPoint is CPT compatible */
|
|
|
+ dev_priv->pch_type = PCH_CPT;
|
|
|
+ DRM_DEBUG_KMS("Found PantherPoint PCH\n");
|
|
|
+ WARN_ON(!IS_GEN6(dev_priv) &&
|
|
|
+ !IS_IVYBRIDGE(dev_priv));
|
|
|
+ } else if (id == INTEL_PCH_LPT_DEVICE_ID_TYPE) {
|
|
|
+ dev_priv->pch_type = PCH_LPT;
|
|
|
+ DRM_DEBUG_KMS("Found LynxPoint PCH\n");
|
|
|
+ WARN_ON(!IS_HASWELL(dev_priv) &&
|
|
|
+ !IS_BROADWELL(dev_priv));
|
|
|
+ WARN_ON(IS_HSW_ULT(dev_priv) ||
|
|
|
+ IS_BDW_ULT(dev_priv));
|
|
|
+ } else if (id == INTEL_PCH_LPT_LP_DEVICE_ID_TYPE) {
|
|
|
+ dev_priv->pch_type = PCH_LPT;
|
|
|
+ DRM_DEBUG_KMS("Found LynxPoint LP PCH\n");
|
|
|
+ WARN_ON(!IS_HASWELL(dev_priv) &&
|
|
|
+ !IS_BROADWELL(dev_priv));
|
|
|
+ WARN_ON(!IS_HSW_ULT(dev_priv) &&
|
|
|
+ !IS_BDW_ULT(dev_priv));
|
|
|
+ } else if (id == INTEL_PCH_WPT_DEVICE_ID_TYPE) {
|
|
|
+ /* WildcatPoint is LPT compatible */
|
|
|
+ dev_priv->pch_type = PCH_LPT;
|
|
|
+ DRM_DEBUG_KMS("Found WildcatPoint PCH\n");
|
|
|
+ WARN_ON(!IS_HASWELL(dev_priv) &&
|
|
|
+ !IS_BROADWELL(dev_priv));
|
|
|
+ WARN_ON(IS_HSW_ULT(dev_priv) ||
|
|
|
+ IS_BDW_ULT(dev_priv));
|
|
|
+ } else if (id == INTEL_PCH_WPT_LP_DEVICE_ID_TYPE) {
|
|
|
+ /* WildcatPoint is LPT compatible */
|
|
|
+ dev_priv->pch_type = PCH_LPT;
|
|
|
+ DRM_DEBUG_KMS("Found WildcatPoint LP PCH\n");
|
|
|
+ WARN_ON(!IS_HASWELL(dev_priv) &&
|
|
|
+ !IS_BROADWELL(dev_priv));
|
|
|
+ WARN_ON(!IS_HSW_ULT(dev_priv) &&
|
|
|
+ !IS_BDW_ULT(dev_priv));
|
|
|
+ } else if (id == INTEL_PCH_SPT_DEVICE_ID_TYPE) {
|
|
|
+ dev_priv->pch_type = PCH_SPT;
|
|
|
+ DRM_DEBUG_KMS("Found SunrisePoint PCH\n");
|
|
|
+ WARN_ON(!IS_SKYLAKE(dev_priv) &&
|
|
|
+ !IS_KABYLAKE(dev_priv));
|
|
|
+ } else if (id == INTEL_PCH_SPT_LP_DEVICE_ID_TYPE) {
|
|
|
+ dev_priv->pch_type = PCH_SPT;
|
|
|
+ DRM_DEBUG_KMS("Found SunrisePoint LP PCH\n");
|
|
|
+ WARN_ON(!IS_SKYLAKE(dev_priv) &&
|
|
|
+ !IS_KABYLAKE(dev_priv));
|
|
|
+ } else if (id == INTEL_PCH_KBP_DEVICE_ID_TYPE) {
|
|
|
+ dev_priv->pch_type = PCH_KBP;
|
|
|
+ DRM_DEBUG_KMS("Found Kaby Lake PCH (KBP)\n");
|
|
|
+ WARN_ON(!IS_SKYLAKE(dev_priv) &&
|
|
|
+ !IS_KABYLAKE(dev_priv) &&
|
|
|
+ !IS_COFFEELAKE(dev_priv));
|
|
|
+ } else if (id == INTEL_PCH_CNP_DEVICE_ID_TYPE) {
|
|
|
+ dev_priv->pch_type = PCH_CNP;
|
|
|
+ DRM_DEBUG_KMS("Found Cannon Lake PCH (CNP)\n");
|
|
|
+ WARN_ON(!IS_CANNONLAKE(dev_priv) &&
|
|
|
+ !IS_COFFEELAKE(dev_priv));
|
|
|
+ } else if (id == INTEL_PCH_CNP_LP_DEVICE_ID_TYPE) {
|
|
|
+ dev_priv->pch_type = PCH_CNP;
|
|
|
+ DRM_DEBUG_KMS("Found Cannon Lake LP PCH (CNP-LP)\n");
|
|
|
+ WARN_ON(!IS_CANNONLAKE(dev_priv) &&
|
|
|
+ !IS_COFFEELAKE(dev_priv));
|
|
|
+ } else if (id == INTEL_PCH_ICP_DEVICE_ID_TYPE) {
|
|
|
+ dev_priv->pch_type = PCH_ICP;
|
|
|
+ DRM_DEBUG_KMS("Found Ice Lake PCH\n");
|
|
|
+ WARN_ON(!IS_ICELAKE(dev_priv));
|
|
|
+ } else if (id == INTEL_PCH_P2X_DEVICE_ID_TYPE ||
|
|
|
+ id == INTEL_PCH_P3X_DEVICE_ID_TYPE ||
|
|
|
+ (id == INTEL_PCH_QEMU_DEVICE_ID_TYPE &&
|
|
|
+ pch->subsystem_vendor ==
|
|
|
+ PCI_SUBVENDOR_ID_REDHAT_QUMRANET &&
|
|
|
+ pch->subsystem_device ==
|
|
|
+ PCI_SUBDEVICE_ID_QEMU)) {
|
|
|
+ dev_priv->pch_type = intel_virt_detect_pch(dev_priv);
|
|
|
+ } else {
|
|
|
+ continue;
|
|
|
}
|
|
|
+
|
|
|
+ break;
|
|
|
}
|
|
|
if (!pch)
|
|
|
DRM_DEBUG_KMS("No PCH found.\n");
|