@@ -662,10 +662,24 @@ static const struct intel_display_device_info xe_lpdp_display = {
662662 BIT (TRANSCODER_C ) | BIT (TRANSCODER_D ),
663663};
664664
665+ /*
666+ * Separate detection for no display cases to keep the display id array simple.
667+ *
668+ * IVB Q requires subvendor and subdevice matching to differentiate from IVB D
669+ * GT2 server.
670+ */
671+ static bool has_no_display (struct pci_dev * pdev )
672+ {
673+ static const struct pci_device_id ids [] = {
674+ INTEL_IVB_Q_IDS (0 ),
675+ {}
676+ };
677+
678+ return pci_match_id (ids , pdev );
679+ }
680+
665681#undef INTEL_VGA_DEVICE
666- #undef INTEL_QUANTA_VGA_DEVICE
667682#define INTEL_VGA_DEVICE (id , info ) { id, info }
668- #define INTEL_QUANTA_VGA_DEVICE (info ) { 0x16a, info }
669683
670684static const struct {
671685 u32 devid ;
@@ -690,7 +704,6 @@ static const struct {
690704 INTEL_IRONLAKE_M_IDS (& ilk_m_display ),
691705 INTEL_SNB_D_IDS (& snb_display ),
692706 INTEL_SNB_M_IDS (& snb_display ),
693- INTEL_IVB_Q_IDS (NULL ), /* must be first IVB in list */
694707 INTEL_IVB_M_IDS (& ivb_display ),
695708 INTEL_IVB_D_IDS (& ivb_display ),
696709 INTEL_HSW_IDS (& hsw_display ),
@@ -775,6 +788,11 @@ intel_display_device_probe(struct drm_i915_private *i915, bool has_gmdid,
775788 if (has_gmdid )
776789 return probe_gmdid_display (i915 , gmdid_ver , gmdid_rel , gmdid_step );
777790
791+ if (has_no_display (pdev )) {
792+ drm_dbg_kms (& i915 -> drm , "Device doesn't have display\n" );
793+ return & no_display ;
794+ }
795+
778796 for (i = 0 ; i < ARRAY_SIZE (intel_display_ids ); i ++ ) {
779797 if (intel_display_ids [i ].devid == pdev -> device )
780798 return intel_display_ids [i ].info ;
0 commit comments