/* * Check for platforms where the south display is on the same PCI device or SoC * die as the north display. The PCH (if it even exists) is not involved in * display. Return a fake PCH type for south display handling on these * platforms, without actually detecting the PCH, and PCH_NONE otherwise.
*/ staticenum intel_pch intel_pch_fake_for_south_display(struct intel_display *display)
{ enum intel_pch pch_type = PCH_NONE;
/* * In a virtualized passthrough environment we can be in a * setup where the ISA bridge is not able to be passed through. * In this case, a south bridge can be emulated and we have to * make an educated guess as to which PCH is really there.
*/
if (display->platform.alderlake_s || display->platform.alderlake_p)
id = INTEL_PCH_ADP_DEVICE_ID_TYPE; elseif (display->platform.tigerlake || display->platform.rocketlake)
id = INTEL_PCH_TGP_DEVICE_ID_TYPE; elseif (display->platform.jasperlake || display->platform.elkhartlake)
id = INTEL_PCH_MCC_DEVICE_ID_TYPE; elseif (display->platform.icelake)
id = INTEL_PCH_ICP_DEVICE_ID_TYPE; elseif (display->platform.coffeelake ||
display->platform.cometlake)
id = INTEL_PCH_CNP_DEVICE_ID_TYPE; elseif (display->platform.kabylake || display->platform.skylake)
id = INTEL_PCH_SPT_DEVICE_ID_TYPE; elseif (display->platform.haswell_ult ||
display->platform.broadwell_ult)
id = INTEL_PCH_LPT_LP_DEVICE_ID_TYPE; elseif (display->platform.haswell || display->platform.broadwell)
id = INTEL_PCH_LPT_DEVICE_ID_TYPE; elseif (DISPLAY_VER(display) == 6 || display->platform.ivybridge)
id = INTEL_PCH_CPT_DEVICE_ID_TYPE; elseif (DISPLAY_VER(display) == 5)
id = INTEL_PCH_IBX_DEVICE_ID_TYPE;
if (id)
drm_dbg_kms(display->drm, "Assuming PCH ID %04x\n", id); else
drm_dbg_kms(display->drm, "Assuming no PCH\n");
*pch_type = intel_pch_type(display, id);
/* Sanity check virtual PCH id */ if (drm_WARN_ON(display->drm,
id && *pch_type == PCH_NONE))
id = 0;
pch_type = intel_pch_fake_for_south_display(display); if (pch_type != PCH_NONE) {
display->pch_type = pch_type;
drm_dbg_kms(display->drm, "PCH not involved in display, using fake PCH type %d for south display\n",
pch_type); return;
}
/* * The reason to probe ISA bridge instead of Dev31:Fun0 is to * make graphics device passthrough work easy for VMM, that only * need to expose ISA bridge to let driver know the real hardware * underneath. This is a requirement from virtualization team. * * In some virtualized environments (e.g. XEN), there is irrelevant * ISA bridge in the system. To work reliably, we should scan through * all the ISA bridge devices and check for the first match, instead * of only checking the first one.
*/ while ((pch = pci_get_class(PCI_CLASS_BRIDGE_ISA << 8, pch))) { if (pch->vendor != PCI_VENDOR_ID_INTEL) continue;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.