Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 47f8bcf3 authored by Matthew Garrett's avatar Matthew Garrett Committed by Dave Jones
Browse files

[CPUFREQ] pcc driver should check for pcch method before calling _OSC



The pcc specification documents an _OSC method that's incompatible with the
one defined as part of the ACPI spec. This shouldn't be a problem as both
are supposed to be guarded with a UUID. Unfortunately approximately nobody
(including HP, who wrote this spec) properly check the UUID on entry to the
_OSC call. Right now this could result in surprising behaviour if the pcc
driver performs an _OSC call on a machine that doesn't implement the pcc
specification. Check whether the PCCH method exists first in order to reduce
this probability.

Signed-off-by: default avatarMatthew Garrett <mjg@redhat.com>
Cc: Naga Chumbalkar <nagananda.chumbalkar@hp.com>
Signed-off-by: default avatarDave Jones <davej@redhat.com>
parent 6f90388a
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -397,13 +397,17 @@ static int __init pcc_cpufreq_probe(void)
	struct pcc_memory_resource *mem_resource;
	struct pcc_register_resource *reg_resource;
	union acpi_object *out_obj, *member;
	acpi_handle handle, osc_handle;
	acpi_handle handle, osc_handle, pcch_handle;
	int ret = 0;

	status = acpi_get_handle(NULL, "\\_SB", &handle);
	if (ACPI_FAILURE(status))
		return -ENODEV;

	status = acpi_get_handle(handle, "PCCH", &pcch_handle);
	if (ACPI_FAILURE(status))
		return -ENODEV;

	status = acpi_get_handle(handle, "_OSC", &osc_handle);
	if (ACPI_SUCCESS(status)) {
		ret = pcc_cpufreq_do_osc(&osc_handle);