@@ -724,10 +724,24 @@ static const struct intel_display_device_info xe_lpdp_display = {
724
724
BIT (PORT_TC1 ) | BIT (PORT_TC2 ) | BIT (PORT_TC3 ) | BIT (PORT_TC4 ),
725
725
};
726
726
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
+
727
743
#undef INTEL_VGA_DEVICE
728
- #undef INTEL_QUANTA_VGA_DEVICE
729
744
#define INTEL_VGA_DEVICE (id , info ) { id, info }
730
- #define INTEL_QUANTA_VGA_DEVICE (info ) { 0x16a, info }
731
745
732
746
static const struct {
733
747
u32 devid ;
@@ -752,7 +766,6 @@ static const struct {
752
766
INTEL_IRONLAKE_M_IDS (& ilk_m_display ),
753
767
INTEL_SNB_D_IDS (& snb_display ),
754
768
INTEL_SNB_M_IDS (& snb_display ),
755
- INTEL_IVB_Q_IDS (NULL ), /* must be first IVB in list */
756
769
INTEL_IVB_M_IDS (& ivb_display ),
757
770
INTEL_IVB_D_IDS (& ivb_display ),
758
771
INTEL_HSW_IDS (& hsw_display ),
@@ -846,6 +859,11 @@ intel_display_device_probe(struct drm_i915_private *i915, bool has_gmdid,
846
859
if (has_gmdid )
847
860
return probe_gmdid_display (i915 , gmdid_ver , gmdid_rel , gmdid_step );
848
861
862
+ if (has_no_display (pdev )) {
863
+ drm_dbg_kms (& i915 -> drm , "Device doesn't have display\n" );
864
+ return & no_display ;
865
+ }
866
+
849
867
for (i = 0 ; i < ARRAY_SIZE (intel_display_ids ); i ++ ) {
850
868
if (intel_display_ids [i ].devid == pdev -> device )
851
869
return intel_display_ids [i ].info ;
0 commit comments