Commit c7be6435 authored by Hans de Goede's avatar Hans de Goede Committed by Rafael J. Wysocki

ACPI: scan: Ignore camera graph port nodes on all Dell Tiger, Alder and Raptor Lake models

Dell laptops with IPU6 camera (the Tiger Lake, Alder Lake and Raptor
Lake generations) have broken ACPI MIPI DISCO information (this results
from an OEM attempt to make Linux work by supplying it with custom data
in the ACPI tables which has never been supported in the mainline).

Instead of adding a lot of DMI quirks for this, check for Dell platforms
based on the processor generations in question and drop the ACPI graph
port nodes, likely to be created with the help of invalid data, on all
of them.

Fixes: bd721b93 ("ACPI: scan: Extract CSI-2 connection graph from _CRS")
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
[ rjw: Changelog edits ]
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 6ba59ff4
...@@ -302,6 +302,10 @@ void acpi_mipi_check_crs_csi2(acpi_handle handle); ...@@ -302,6 +302,10 @@ void acpi_mipi_check_crs_csi2(acpi_handle handle);
void acpi_mipi_scan_crs_csi2(void); void acpi_mipi_scan_crs_csi2(void);
void acpi_mipi_init_crs_csi2_swnodes(void); void acpi_mipi_init_crs_csi2_swnodes(void);
void acpi_mipi_crs_csi2_cleanup(void); void acpi_mipi_crs_csi2_cleanup(void);
#ifdef CONFIG_X86
bool acpi_graph_ignore_port(acpi_handle handle); bool acpi_graph_ignore_port(acpi_handle handle);
#else
static inline bool acpi_graph_ignore_port(acpi_handle handle) { return false; }
#endif
#endif /* _ACPI_INTERNAL_H_ */ #endif /* _ACPI_INTERNAL_H_ */
...@@ -725,14 +725,20 @@ void acpi_mipi_crs_csi2_cleanup(void) ...@@ -725,14 +725,20 @@ void acpi_mipi_crs_csi2_cleanup(void)
acpi_mipi_del_crs_csi2(csi2); acpi_mipi_del_crs_csi2(csi2);
} }
static const struct dmi_system_id dmi_ignore_port_nodes[] = { #ifdef CONFIG_X86
{ #include <asm/cpu_device_id.h>
.matches = { #include <asm/intel-family.h>
DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "XPS 9315"), /* CPU matches for Dell generations with broken ACPI MIPI DISCO info */
}, static const struct x86_cpu_id dell_broken_mipi_disco_cpu_gens[] = {
}, X86_MATCH_INTEL_FAM6_MODEL(TIGERLAKE, NULL),
{ } X86_MATCH_INTEL_FAM6_MODEL(TIGERLAKE_L, NULL),
X86_MATCH_INTEL_FAM6_MODEL(ALDERLAKE, NULL),
X86_MATCH_INTEL_FAM6_MODEL(ALDERLAKE_L, NULL),
X86_MATCH_INTEL_FAM6_MODEL(RAPTORLAKE, NULL),
X86_MATCH_INTEL_FAM6_MODEL(RAPTORLAKE_P, NULL),
X86_MATCH_INTEL_FAM6_MODEL(RAPTORLAKE_S, NULL),
{}
}; };
static const char *strnext(const char *s1, const char *s2) static const char *strnext(const char *s1, const char *s2)
...@@ -761,7 +767,10 @@ bool acpi_graph_ignore_port(acpi_handle handle) ...@@ -761,7 +767,10 @@ bool acpi_graph_ignore_port(acpi_handle handle)
static bool dmi_tested, ignore_port; static bool dmi_tested, ignore_port;
if (!dmi_tested) { if (!dmi_tested) {
ignore_port = dmi_first_match(dmi_ignore_port_nodes); if (dmi_name_in_vendors("Dell Inc.") &&
x86_match_cpu(dell_broken_mipi_disco_cpu_gens))
ignore_port = true;
dmi_tested = true; dmi_tested = true;
} }
...@@ -794,3 +803,4 @@ bool acpi_graph_ignore_port(acpi_handle handle) ...@@ -794,3 +803,4 @@ bool acpi_graph_ignore_port(acpi_handle handle)
kfree(orig_path); kfree(orig_path);
return false; return false;
} }
#endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment