On Mon, Feb 05, 2018 at 05:31:38PM +0000, Jani Nikula wrote: > Simplify intel_virt_detect_pch() by making it return a PCH id rather > than returning the PCH type and setting PCH id for some PCHs. Map the > PCH id to PCH type using the shared routine. This gives us sanity check > on the supported combinations also in the virtualized setting. > > Signed-off-by: Jani Nikula <jani.nikula@xxxxxxxxx> Reviewed-by: Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx> > --- > drivers/gpu/drm/i915/i915_drv.c | 66 ++++++++++++++++++++++------------------- > 1 file changed, 35 insertions(+), 31 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c > index 52666c6cbbcc..f675fc41a1c8 100644 > --- a/drivers/gpu/drm/i915/i915_drv.c > +++ b/drivers/gpu/drm/i915/i915_drv.c > @@ -202,9 +202,10 @@ static bool intel_is_virt_pch(unsigned short id, > sdevice == PCI_SUBDEVICE_ID_QEMU)); > } > > -static enum intel_pch intel_virt_detect_pch(struct drm_i915_private *dev_priv) > +static unsigned short > +intel_virt_detect_pch(const struct drm_i915_private *dev_priv) > { > - enum intel_pch ret = PCH_NOP; > + unsigned short id = 0; > > /* > * In a virtualized passthrough environment we can be in a > @@ -213,28 +214,25 @@ static enum intel_pch intel_virt_detect_pch(struct drm_i915_private *dev_priv) > * make an educated guess as to which PCH is really there. > */ > > - if (IS_GEN5(dev_priv)) { > - ret = PCH_IBX; > - DRM_DEBUG_KMS("Assuming Ibex Peak PCH\n"); > - } else if (IS_GEN6(dev_priv) || IS_IVYBRIDGE(dev_priv)) { > - ret = PCH_CPT; > - DRM_DEBUG_KMS("Assuming CougarPoint PCH\n"); > - } else if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv)) { > - ret = PCH_LPT; > - if (IS_HSW_ULT(dev_priv) || IS_BDW_ULT(dev_priv)) > - dev_priv->pch_id = INTEL_PCH_LPT_LP_DEVICE_ID_TYPE; > - else > - dev_priv->pch_id = INTEL_PCH_LPT_DEVICE_ID_TYPE; > - DRM_DEBUG_KMS("Assuming LynxPoint PCH\n"); > - } else if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) { > - ret = PCH_SPT; > - DRM_DEBUG_KMS("Assuming SunrisePoint PCH\n"); > - } else if (IS_COFFEELAKE(dev_priv) || IS_CANNONLAKE(dev_priv)) { > - ret = PCH_CNP; > - DRM_DEBUG_KMS("Assuming CannonPoint PCH\n"); > - } > + if (IS_GEN5(dev_priv)) > + id = INTEL_PCH_IBX_DEVICE_ID_TYPE; > + else if (IS_GEN6(dev_priv) || IS_IVYBRIDGE(dev_priv)) > + id = INTEL_PCH_CPT_DEVICE_ID_TYPE; > + else if (IS_HSW_ULT(dev_priv) || IS_BDW_ULT(dev_priv)) > + id = INTEL_PCH_LPT_LP_DEVICE_ID_TYPE; > + else if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv)) > + id = INTEL_PCH_LPT_DEVICE_ID_TYPE; > + else if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) > + id = INTEL_PCH_SPT_DEVICE_ID_TYPE; > + else if (IS_COFFEELAKE(dev_priv) || IS_CANNONLAKE(dev_priv)) > + id = INTEL_PCH_CNP_DEVICE_ID_TYPE; > + > + if (id) > + DRM_DEBUG_KMS("Assuming PCH ID %04x\n", id); > + else > + DRM_DEBUG_KMS("Assuming no PCH\n"); > > - return ret; > + return id; > } > > static void intel_detect_pch(struct drm_i915_private *dev_priv) > @@ -269,19 +267,25 @@ static void intel_detect_pch(struct drm_i915_private *dev_priv) > > id = pch->device & INTEL_PCH_DEVICE_ID_MASK; > > - dev_priv->pch_id = id; > - > pch_type = intel_pch_type(dev_priv, id); > if (pch_type != PCH_NONE) { > dev_priv->pch_type = pch_type; > + dev_priv->pch_id = id; > + break; > } else if (intel_is_virt_pch(id, pch->subsystem_vendor, > - pch->subsystem_device)) { > - dev_priv->pch_type = intel_virt_detect_pch(dev_priv); > - } else { > - continue; > + pch->subsystem_device)) { > + id = intel_virt_detect_pch(dev_priv); > + if (id) { > + pch_type = intel_pch_type(dev_priv, id); > + if (WARN_ON(pch_type == PCH_NONE)) > + pch_type = PCH_NOP; > + } else { > + pch_type = PCH_NOP; > + } > + dev_priv->pch_type = pch_type; > + dev_priv->pch_id = id; > + break; > } > - > - break; > } > if (!pch) > DRM_DEBUG_KMS("No PCH found.\n"); > -- > 2.11.0 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/intel-gfx _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx