All of lore.kernel.org
 help / color / mirror / Atom feed
From: Takashi Iwai <tiwai@suse.de>
To: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Cc: alsa-devel@alsa-project.org, Lucas De Marchi <lucas.demarchi@intel.com>
Subject: Re: Intel HDMI probe regression on IVB (and older?)
Date: Mon, 20 Jun 2022 17:03:06 +0200	[thread overview]
Message-ID: <87r13jpec5.wl-tiwai@suse.de> (raw)
In-Reply-To: <alpine.DEB.2.22.394.2206201141320.1532214@eliteleevi.tm.intel.com>

On Mon, 20 Jun 2022 11:26:52 +0200,
Kai Vehmanen wrote:
> 
> Hi,
> 
> On Mon, 20 Jun 2022, Takashi Iwai wrote:
> 
> > we've got a regression report about Intel HDMI.  It seems that the
> > recent change to skip the component binding (commit c9db8a30d9f0)
> > throws away the devices incorrectly on IvyBridge.  I guess the similar
> > issue could happen on older chips.  The bug report is found at
> >   https://bugzilla.opensuse.org/show_bug.cgi?id=1200611
> 
> we'll check. We actually have IVB (and older), in the i915 CI and I can 
> see the binding check working correctly there (with 5.19-rc2). But 
> obviously something goes wrong in the reporter's case, so needs more 
> debug.

So this looks like a bug due to the use of pci_get_class().
Since there is no pci_get_base_class(), we likely need to open-code
the search, e.g. something like below.


Takashi

-- 8< --
From: Takashi Iwai <tiwai@suse.de>
Subject: [PATCH] ALSA: hda: Fix discovery of i915 graphics PCI device

It's been reported that the recent fix for skipping the
component-binding with D-GPU caused a regression on some systems; it
resulted in the completely missing component binding with i915 GPU.

The problem was the use of pci_get_class() function.  It matches with
the full PCI class bits, while we want to match only partially the PCI
base class bits.  So, when a system has an i915 graphics device with
the PCI class 0380, it won't hit because we're looking for only the
PCI class 0300.

This patch fixes i915_gfx_present() to look up each PCI device and
match with PCI base class explicitly instead of pci_get_class().

Fixes: c9db8a30d9f0 ("ALSA: hda/i915 - skip acomp init if no matching display")
Link: https://bugzilla.opensuse.org/show_bug.cgi?id=1200611
Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
 sound/hda/hdac_i915.c | 15 ++++++---------
 1 file changed, 6 insertions(+), 9 deletions(-)

diff --git a/sound/hda/hdac_i915.c b/sound/hda/hdac_i915.c
index 3f35972e1cf7..161a9711cd63 100644
--- a/sound/hda/hdac_i915.c
+++ b/sound/hda/hdac_i915.c
@@ -119,21 +119,18 @@ static int i915_component_master_match(struct device *dev, int subcomponent,
 /* check whether Intel graphics is present and reachable */
 static int i915_gfx_present(struct pci_dev *hdac_pci)
 {
-	unsigned int class = PCI_BASE_CLASS_DISPLAY << 16;
 	struct pci_dev *display_dev = NULL;
-	bool match = false;
 
-	do {
-		display_dev = pci_get_class(class, display_dev);
-
-		if (display_dev && display_dev->vendor == PCI_VENDOR_ID_INTEL &&
+	for_each_pci_dev(display_dev) {
+		if (display_dev->vendor == PCI_VENDOR_ID_INTEL &&
+		    (display_dev->class >> 16) == PCI_BASE_CLASS_DISPLAY &&
 		    connectivity_check(display_dev, hdac_pci)) {
 			pci_dev_put(display_dev);
-			match = true;
+			return true;
 		}
-	} while (!match && display_dev);
+	}
 
-	return match;
+	return false;
 }
 
 /**
-- 
2.35.3


  reply	other threads:[~2022-06-20 15:04 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-20  7:27 Intel HDMI probe regression on IVB (and older?) Takashi Iwai
2022-06-20  9:26 ` Kai Vehmanen
2022-06-20 15:03   ` Takashi Iwai [this message]
2022-06-20 15:31     ` Kai Vehmanen
2022-06-20 15:49       ` Takashi Iwai
2022-06-20 16:18         ` Kai Vehmanen
2022-06-21 11:36           ` Kai Vehmanen
2022-06-21 12:01             ` Takashi Iwai

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87r13jpec5.wl-tiwai@suse.de \
    --to=tiwai@suse.de \
    --cc=alsa-devel@alsa-project.org \
    --cc=kai.vehmanen@linux.intel.com \
    --cc=lucas.demarchi@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.