@@ -662,10 +662,24 @@ static const struct intel_display_device_info xe_lpdp_display = {
662
662
BIT (TRANSCODER_C ) | BIT (TRANSCODER_D ),
663
663
};
664
664
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
+
665
681
#undef INTEL_VGA_DEVICE
666
- #undef INTEL_QUANTA_VGA_DEVICE
667
682
#define INTEL_VGA_DEVICE (id , info ) { id, info }
668
- #define INTEL_QUANTA_VGA_DEVICE (info ) { 0x16a, info }
669
683
670
684
static const struct {
671
685
u32 devid ;
@@ -690,7 +704,6 @@ static const struct {
690
704
INTEL_IRONLAKE_M_IDS (& ilk_m_display ),
691
705
INTEL_SNB_D_IDS (& snb_display ),
692
706
INTEL_SNB_M_IDS (& snb_display ),
693
- INTEL_IVB_Q_IDS (NULL ), /* must be first IVB in list */
694
707
INTEL_IVB_M_IDS (& ivb_display ),
695
708
INTEL_IVB_D_IDS (& ivb_display ),
696
709
INTEL_HSW_IDS (& hsw_display ),
@@ -775,6 +788,11 @@ intel_display_device_probe(struct drm_i915_private *i915, bool has_gmdid,
775
788
if (has_gmdid )
776
789
return probe_gmdid_display (i915 , gmdid_ver , gmdid_rel , gmdid_step );
777
790
791
+ if (has_no_display (pdev )) {
792
+ drm_dbg_kms (& i915 -> drm , "Device doesn't have display\n" );
793
+ return & no_display ;
794
+ }
795
+
778
796
for (i = 0 ; i < ARRAY_SIZE (intel_display_ids ); i ++ ) {
779
797
if (intel_display_ids [i ].devid == pdev -> device )
780
798
return intel_display_ids [i ].info ;
0 commit comments