@@ -724,10 +724,24 @@ static const struct intel_display_device_info xe_lpdp_display = {
724724 BIT (PORT_TC1 ) | BIT (PORT_TC2 ) | BIT (PORT_TC3 ) | BIT (PORT_TC4 ),
725725};
726726
727+ /*
728+ * Separate detection for no display cases to keep the display id array simple.
729+ *
730+ * IVB Q requires subvendor and subdevice matching to differentiate from IVB D
731+ * GT2 server.
732+ */
733+ static bool has_no_display (struct pci_dev * pdev )
734+ {
735+ static const struct pci_device_id ids [] = {
736+ INTEL_IVB_Q_IDS (0 ),
737+ {}
738+ };
739+
740+ return pci_match_id (ids , pdev );
741+ }
742+
727743#undef INTEL_VGA_DEVICE
728- #undef INTEL_QUANTA_VGA_DEVICE
729744#define INTEL_VGA_DEVICE (id , info ) { id, info }
730- #define INTEL_QUANTA_VGA_DEVICE (info ) { 0x16a, info }
731745
732746static const struct {
733747 u32 devid ;
@@ -752,7 +766,6 @@ static const struct {
752766 INTEL_IRONLAKE_M_IDS (& ilk_m_display ),
753767 INTEL_SNB_D_IDS (& snb_display ),
754768 INTEL_SNB_M_IDS (& snb_display ),
755- INTEL_IVB_Q_IDS (NULL ), /* must be first IVB in list */
756769 INTEL_IVB_M_IDS (& ivb_display ),
757770 INTEL_IVB_D_IDS (& ivb_display ),
758771 INTEL_HSW_IDS (& hsw_display ),
@@ -846,6 +859,11 @@ intel_display_device_probe(struct drm_i915_private *i915, bool has_gmdid,
846859 if (has_gmdid )
847860 return probe_gmdid_display (i915 , gmdid_ver , gmdid_rel , gmdid_step );
848861
862+ if (has_no_display (pdev )) {
863+ drm_dbg_kms (& i915 -> drm , "Device doesn't have display\n" );
864+ return & no_display ;
865+ }
866+
849867 for (i = 0 ; i < ARRAY_SIZE (intel_display_ids ); i ++ ) {
850868 if (intel_display_ids [i ].devid == pdev -> device )
851869 return intel_display_ids [i ].info ;
0 commit comments