Patch "ACPI: CPPC: Only probe for _CPC if CPPC v2 is acked" has been added to the 5.18-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    ACPI: CPPC: Only probe for _CPC if CPPC v2 is acked

to the 5.18-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     acpi-cppc-only-probe-for-_cpc-if-cppc-v2-is-acked.patch
and it can be found in the queue-5.18 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit e1deee68220ac234447843ead4de8f7f8dd0c605
Author: Mario Limonciello <mario.limonciello@xxxxxxx>
Date:   Tue Jul 5 13:29:14 2022 -0500

    ACPI: CPPC: Only probe for _CPC if CPPC v2 is acked
    
    [ Upstream commit 7feec7430edddb87c24b0a86b08a03d0b496a755 ]
    
    Previously the kernel used to ignore whether the firmware masked CPPC
    or CPPCv2 and would just pretend that it worked.
    
    When support for the USB4 bit in _OSC was introduced from commit
    9e1f561afb ("ACPI: Execute platform _OSC also with query bit clear")
    the kernel began to look at the return when the query bit was clear.
    
    This caused regressions that were misdiagnosed and attempted to be solved
    as part of commit 2ca8e6285250 ("Revert "ACPI: Pass the same capabilities
    to the _OSC regardless of the query flag""). This caused a different
    regression where non-Intel systems weren't able to negotiate _OSC
    properly.
    
    This was reverted in commit 2ca8e6285250 ("Revert "ACPI: Pass the same
    capabilities to the _OSC regardless of the query flag"") and attempted to
    be fixed by commit c42fa24b4475 ("ACPI: bus: Avoid using CPPC if not
    supported by firmware") but the regression still returned.
    
    These systems with the regression only load support for CPPC from an SSDT
    dynamically when _OSC reports CPPC v2.  Avoid the problem by not letting
    CPPC satisfy the requirement in `acpi_cppc_processor_probe`.
    
    Reported-by: CUI Hao <cuihao.leo@xxxxxxxxx>
    Reported-by: maxim.novozhilov@xxxxxxxxx
    Reported-by: lethe.tree@xxxxxxxxxxxxxx
    Reported-by: garystephenwright@xxxxxxxxx
    Reported-by: galaxyking0419@xxxxxxxxx
    Fixes: c42fa24b4475 ("ACPI: bus: Avoid using CPPC if not supported by firmware")
    Fixes: 2ca8e6285250 ("Revert "ACPI Pass the same capabilities to the _OSC regardless of the query flag"")
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=213023
    Link: https://bugzilla.redhat.com/show_bug.cgi?id=2075387
    Reviewed-by: Mika Westerberg <mika.westerberg@xxxxxxxxxxxxxxx>
    Tested-by: CUI Hao <cuihao.leo@xxxxxxxxx>
    Signed-off-by: Mario Limonciello <mario.limonciello@xxxxxxx>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
index 1fc24f4fbcb4..6c735cfa7d43 100644
--- a/drivers/acpi/bus.c
+++ b/drivers/acpi/bus.c
@@ -298,7 +298,7 @@ EXPORT_SYMBOL_GPL(osc_cpc_flexible_adr_space_confirmed);
 bool osc_sb_native_usb4_support_confirmed;
 EXPORT_SYMBOL_GPL(osc_sb_native_usb4_support_confirmed);
 
-bool osc_sb_cppc_not_supported;
+bool osc_sb_cppc2_support_acked;
 
 static u8 sb_uuid_str[] = "0811B06E-4A27-44F9-8D60-3CBBC22E7B48";
 static void acpi_bus_osc_negotiate_platform_control(void)
@@ -358,11 +358,6 @@ static void acpi_bus_osc_negotiate_platform_control(void)
 		return;
 	}
 
-#ifdef CONFIG_ACPI_CPPC_LIB
-	osc_sb_cppc_not_supported = !(capbuf_ret[OSC_SUPPORT_DWORD] &
-			(OSC_SB_CPC_SUPPORT | OSC_SB_CPCV2_SUPPORT));
-#endif
-
 	/*
 	 * Now run _OSC again with query flag clear and with the caps
 	 * supported by both the OS and the platform.
@@ -376,6 +371,10 @@ static void acpi_bus_osc_negotiate_platform_control(void)
 
 	capbuf_ret = context.ret.pointer;
 	if (context.ret.length > OSC_SUPPORT_DWORD) {
+#ifdef CONFIG_ACPI_CPPC_LIB
+		osc_sb_cppc2_support_acked = capbuf_ret[OSC_SUPPORT_DWORD] & OSC_SB_CPCV2_SUPPORT;
+#endif
+
 		osc_sb_apei_support_acked =
 			capbuf_ret[OSC_SUPPORT_DWORD] & OSC_SB_APEI_SUPPORT;
 		osc_pc_lpi_support_confirmed =
diff --git a/drivers/acpi/cppc_acpi.c b/drivers/acpi/cppc_acpi.c
index 840223c12540..6aff8019047b 100644
--- a/drivers/acpi/cppc_acpi.c
+++ b/drivers/acpi/cppc_acpi.c
@@ -666,8 +666,10 @@ int acpi_cppc_processor_probe(struct acpi_processor *pr)
 	acpi_status status;
 	int ret = -ENODATA;
 
-	if (osc_sb_cppc_not_supported)
+	if (!osc_sb_cppc2_support_acked) {
+		pr_debug("CPPC v2 _OSC not acked\n");
 		return -ENODEV;
+	}
 
 	/* Parse the ACPI _CPC table for this CPU. */
 	status = acpi_evaluate_object_typed(handle, "_CPC", NULL, &output,
diff --git a/include/linux/acpi.h b/include/linux/acpi.h
index 03465db16b68..cf1f770208da 100644
--- a/include/linux/acpi.h
+++ b/include/linux/acpi.h
@@ -581,7 +581,7 @@ acpi_status acpi_run_osc(acpi_handle handle, struct acpi_osc_context *context);
 extern bool osc_sb_apei_support_acked;
 extern bool osc_pc_lpi_support_confirmed;
 extern bool osc_sb_native_usb4_support_confirmed;
-extern bool osc_sb_cppc_not_supported;
+extern bool osc_sb_cppc2_support_acked;
 extern bool osc_cpc_flexible_adr_space_confirmed;
 
 /* USB4 Capabilities */



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux