index c49b35e30..cdff9cb03 100644
--- a/drivers/acpi/bus.c
+++ b/drivers/acpi/bus.c
@@ -332,39 +332,22 @@ static void acpi_bus_osc_negotiate_platform_control(void)
if (ACPI_FAILURE(acpi_get_handle(NULL, "\\_SB", &handle)))
return;
- if (ACPI_FAILURE(acpi_run_osc(handle, &context)))
- return;
-
- capbuf_ret = context.ret.pointer;
- if (context.ret.length <= OSC_SUPPORT_DWORD) {
+ if (ACPI_SUCCESS(acpi_run_osc(handle, &context))) {
+ capbuf_ret = context.ret.pointer;
+ if (context.ret.length > OSC_SUPPORT_DWORD) {
+ osc_sb_apei_support_acked =
+ capbuf_ret[OSC_SUPPORT_DWORD] & OSC_SB_APEI_SUPPORT;
+ osc_pc_lpi_support_confirmed =
+ capbuf_ret[OSC_SUPPORT_DWORD] & OSC_SB_PCLPI_SUPPORT;
+ osc_sb_native_usb4_support_confirmed =
+ capbuf_ret[OSC_SUPPORT_DWORD] & OSC_SB_NATIVE_USB4_SUPPORT;
+ }
kfree(context.ret.pointer);
- return;
- }
-
- /*
- * Now run _OSC again with query flag clean and with the caps
- * both platform and OS supports.
- */
- capbuf[OSC_QUERY_DWORD] = 0;
- capbuf[OSC_SUPPORT_DWORD] = capbuf_ret[OSC_SUPPORT_DWORD];
- kfree(context.ret.pointer);
-
- if (ACPI_FAILURE(acpi_run_osc(handle, &context)))
- return;
-
- capbuf_ret = context.ret.pointer;
- if (context.ret.length > OSC_SUPPORT_DWORD) {
- osc_sb_apei_support_acked =
- capbuf_ret[OSC_SUPPORT_DWORD] & OSC_SB_APEI_SUPPORT;
- osc_pc_lpi_support_confirmed =
- capbuf_ret[OSC_SUPPORT_DWORD] & OSC_SB_PCLPI_SUPPORT;
- osc_sb_native_usb4_support_confirmed =
- capbuf_ret[OSC_SUPPORT_DWORD] & OSC_SB_NATIVE_USB4_SUPPORT;
}
-
- kfree(context.ret.pointer);
+ /* do we need to check other returned cap? Sounds no */
}
+
/*
* Native control of USB4 capabilities. If any of the tunneling bits is
* set it means OS is in control and we use software based connection
--
2.30.2
My fix working with 5.10 branch:
index c49b35e30. .cdff9cb03 100644 acpi/bus. c acpi/bus. c osc_negotiate_ platform_ control( void) acpi_get_ handle( NULL, "\\_SB", &handle)))
--- a/drivers/
+++ b/drivers/
@@ -332,39 +332,22 @@ static void acpi_bus_
if (ACPI_FAILURE(
return;
- if (ACPI_FAILURE( acpi_run_ osc(handle, &context))) ret.pointer; acpi_run_ osc(handle, &context))) { ret.pointer; apei_support_ acked = ret[OSC_ SUPPORT_ DWORD] & OSC_SB_ APEI_SUPPORT; lpi_support_ confirmed = ret[OSC_ SUPPORT_ DWORD] & OSC_SB_ PCLPI_SUPPORT; native_ usb4_support_ confirmed = ret[OSC_ SUPPORT_ DWORD] & OSC_SB_ NATIVE_ USB4_SUPPORT; context. ret.pointer) ; OSC_QUERY_ DWORD] = 0; OSC_SUPPORT_ DWORD] = capbuf_ ret[OSC_ SUPPORT_ DWORD]; ret.pointer) ; acpi_run_ osc(handle, &context))) ret.pointer; apei_support_ acked = ret[OSC_ SUPPORT_ DWORD] & OSC_SB_ APEI_SUPPORT; lpi_support_ confirmed = ret[OSC_ SUPPORT_ DWORD] & OSC_SB_ PCLPI_SUPPORT; native_ usb4_support_ confirmed = ret[OSC_ SUPPORT_ DWORD] & OSC_SB_ NATIVE_ USB4_SUPPORT; ret.pointer) ;
- return;
-
- capbuf_ret = context.
- if (context.ret.length <= OSC_SUPPORT_DWORD) {
+ if (ACPI_SUCCESS(
+ capbuf_ret = context.
+ if (context.ret.length > OSC_SUPPORT_DWORD) {
+ osc_sb_
+ capbuf_
+ osc_pc_
+ capbuf_
+ osc_sb_
+ capbuf_
+ }
kfree(
- return;
- }
-
- /*
- * Now run _OSC again with query flag clean and with the caps
- * both platform and OS supports.
- */
- capbuf[
- capbuf[
- kfree(context.
-
- if (ACPI_FAILURE(
- return;
-
- capbuf_ret = context.
- if (context.ret.length > OSC_SUPPORT_DWORD) {
- osc_sb_
- capbuf_
- osc_pc_
- capbuf_
- osc_sb_
- capbuf_
}
-
- kfree(context.
+ /* do we need to check other returned cap? Sounds no */
}
+
/*
* Native control of USB4 capabilities. If any of the tunneling bits is
* set it means OS is in control and we use software based connection
--
2.30.2