drm/i915: refine qemu south bridge detection
diff mbox

Message ID 1453708558-24184-1-git-send-email-kraxel@redhat.com
State New
Headers show

Commit Message

Gerd Hoffmann Jan. 25, 2016, 7:55 a.m. UTC
The test for the qemu q35 south bridge added by commit
"39bfcd52 drm/i915: more virtual south bridge detection"
also matches on real hardware.  Having the check for
virtual systems last in the list is not enough to avoid
that ...

Refine the check by additionally verifying the pci
subsystem id to see whenever it *really* is qemu.

Reported-by: Bjørn Mork <bjorn@mork.no>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 drivers/gpu/drm/i915/i915_drv.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Jani Nikula Jan. 25, 2016, 8:32 a.m. UTC | #1
On Mon, 25 Jan 2016, Gerd Hoffmann <kraxel@redhat.com> wrote:
> The test for the qemu q35 south bridge added by commit
> "39bfcd52 drm/i915: more virtual south bridge detection"
> also matches on real hardware.  Having the check for
> virtual systems last in the list is not enough to avoid
> that ...
>
> Refine the check by additionally verifying the pci
> subsystem id to see whenever it *really* is qemu.
>
> Reported-by: Bjørn Mork <bjorn@mork.no>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>

Already sent the revert in [1], but I'm fine with this if it works for
Bjørn.

BR,
Jani.

[1] http://mid.gmane.org/1453710360-30099-1-git-send-email-jani.nikula@intel.com


> ---
>  drivers/gpu/drm/i915/i915_drv.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
> index 3ac616d..9668162 100644
> --- a/drivers/gpu/drm/i915/i915_drv.c
> +++ b/drivers/gpu/drm/i915/i915_drv.c
> @@ -501,7 +501,9 @@ void intel_detect_pch(struct drm_device *dev)
>  				WARN_ON(!IS_SKYLAKE(dev) &&
>  					!IS_KABYLAKE(dev));
>  			} else if ((id == INTEL_PCH_P2X_DEVICE_ID_TYPE) ||
> -				   (id == INTEL_PCH_QEMU_DEVICE_ID_TYPE)) {
> +				   ((id == INTEL_PCH_QEMU_DEVICE_ID_TYPE) &&
> +				    pch->subsystem_vendor == 0x1a4f &&
> +				    pch->subsystem_device == 0x1100)) {
>  				dev_priv->pch_type = intel_virt_detect_pch(dev);
>  			} else
>  				continue;
Bjørn Mork Jan. 25, 2016, 9:11 a.m. UTC | #2
Jani Nikula <jani.nikula@linux.intel.com> writes:

> On Mon, 25 Jan 2016, Gerd Hoffmann <kraxel@redhat.com> wrote:
>> The test for the qemu q35 south bridge added by commit
>> "39bfcd52 drm/i915: more virtual south bridge detection"
>> also matches on real hardware.  Having the check for
>> virtual systems last in the list is not enough to avoid
>> that ...
>>
>> Refine the check by additionally verifying the pci
>> subsystem id to see whenever it *really* is qemu.
>>
>> Reported-by: Bjørn Mork <bjorn@mork.no>
>> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
>
> Already sent the revert in [1], but I'm fine with this if it works for
> Bjørn.

Gerd's fix works fine for me (of course).  Tested it now just to be 100%
sure, although it was pretty obvious from the code that it would have
the same effect as an revert on my system.

But I have a feeling Gerd might want to send you a v2 of it in any
case...  I was curious about this QEMU subsystem vendor ID, so I went
grepping for it - and found nothing!

 |> +				    pch->subsystem_vendor == 0x1a4f &&
 |> +				    pch->subsystem_device == 0x1100)) {

Looks like a typo:

 bjorn@nemi:/usr/local/src/git/qemu$ git grep PCI_SUBVENDOR_ID_REDHAT_QUMRANET
 hw/pci/pci.c:static uint16_t pci_default_sub_vendor_id = PCI_SUBVENDOR_ID_REDHAT_QUMRANET;
 include/hw/pci/pci.h:#define PCI_SUBVENDOR_ID_REDHAT_QUMRANET 0x1af4


0x1af4 != 0x1a4f

Thanks a lot both of you for a really fast fix.  But it seems Gerd was a
little too fast :)



Bjørn
Gerd Hoffmann Jan. 25, 2016, 11:03 a.m. UTC | #3
Hi,

> 0x1af4 != 0x1a4f

Good catch, new patch sent.

thanks,
  Gerd

Patch
diff mbox

diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 3ac616d..9668162 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -501,7 +501,9 @@  void intel_detect_pch(struct drm_device *dev)
 				WARN_ON(!IS_SKYLAKE(dev) &&
 					!IS_KABYLAKE(dev));
 			} else if ((id == INTEL_PCH_P2X_DEVICE_ID_TYPE) ||
-				   (id == INTEL_PCH_QEMU_DEVICE_ID_TYPE)) {
+				   ((id == INTEL_PCH_QEMU_DEVICE_ID_TYPE) &&
+				    pch->subsystem_vendor == 0x1a4f &&
+				    pch->subsystem_device == 0x1100)) {
 				dev_priv->pch_type = intel_virt_detect_pch(dev);
 			} else
 				continue;