On 9/16/2026 8:59 PM, Dnyaneshwar Bhadane wrote:
is_arrowlake_s_by_host_bridge() re-assigned pdev in the while()
exited (that's the loop's exit condition). This made
condition itself, so pdev was always NULL by the time the loop
"return pdev && ..." always false, so an Arrow Lake S host bridge
was never detected and intel_c20_hdmi_tmds_tx_cgf_1() always used
the wrong tx_misc value for that platform.

Check the ID as each host bridge is enumerated instead of after the
loop, and drop the reference pci_get_class() took on the matching
device before returning.


The commit message is quite obfuscated. Also needs a cc stable.

Other than that, LGTM.

Reviewed-by: Chaitanya Kumar Borah <[email protected]>


Suggested-by: Jani Nikula <[email protected]>
Fixes: 3630a47b700e ("drm/i915/cx0_phy: Update HDMI TMDS C20 algorithm value")
Signed-off-by: Dnyaneshwar Bhadane <[email protected]>
---
  drivers/gpu/drm/i915/display/intel_cx0_phy.c | 12 +++++++-----
  1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_cx0_phy.c 
b/drivers/gpu/drm/i915/display/intel_cx0_phy.c
index dbebd7210848..de450ebf541f 100644
--- a/drivers/gpu/drm/i915/display/intel_cx0_phy.c
+++ b/drivers/gpu/drm/i915/display/intel_cx0_phy.c
@@ -2342,12 +2342,14 @@ static void intel_c10pll_dump_hw_state(struct 
drm_printer *p,
  static bool is_arrowlake_s_by_host_bridge(void)
  {
        struct pci_dev *pdev = NULL;
-       u16 host_bridge_pci_dev_id;
-
-       while ((pdev = pci_get_class(PCI_CLASS_BRIDGE_HOST << 8, pdev)))
-               host_bridge_pci_dev_id = pdev->device;
+       while ((pdev = pci_get_class(PCI_CLASS_BRIDGE_HOST << 8, pdev))) {
+               if (IS_ARROWLAKE_S_BY_HOST_BRIDGE_ID(pdev->device)) {
+                       pci_dev_put(pdev);
+                       return true;
+               }
+       }
- return pdev && IS_ARROWLAKE_S_BY_HOST_BRIDGE_ID(host_bridge_pci_dev_id);
+       return false;
  }
static u16 intel_c20_hdmi_tmds_tx_cgf_1(struct intel_display *display)

Reply via email to