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)