On Thu, Aug 10, 2023 at 03:37:56PM +0800, Evan Quan wrote:
AMD has introduced an ACPI based mechanism to support WBRF for some
platforms with AMD dGPU + WLAN. This needs support from BIOS equipped
with necessary AML implementations and dGPU firmwares.
For those systems without the ACPI mechanism and developing solutions,
user can use/fall-back the generic WBRF solution for diagnosing potential
interference issues.
And for the platform which does not equip with the necessary AMD ACPI
implementations but with CONFIG_WBRF_AMD_ACPI built as 'y', it will
fall back to generic WBRF solution if the `wbrf` is set as "on".
Co-developed-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Co-developed-by: Evan Quan <redacted>
Signed-off-by: Evan Quan <redacted>
...
quoted hunk ↗ jump to hunk
diff --git a/drivers/acpi/amd_wbrf.c b/drivers/acpi/amd_wbrf.c
...
+static bool check_acpi_wbrf(acpi_handle handle, u64 rev, u64 funcs)
+{
+ int i;
+ u64 mask = 0;
+ union acpi_object *obj;
+
+ if (funcs == 0)
+ return false;
+
+ obj = acpi_evaluate_wbrf(handle, rev, 0);
+ if (!obj)
+ return false;
+
+ if (obj->type != ACPI_TYPE_BUFFER)
+ return false;
+
+ /*
+ * Bit vector providing supported functions information.
+ * Each bit marks support for one specific function of the WBRF method.
+ */
+ for (i = 0; i < obj->buffer.length && i < 8; i++)
+ mask |= (((u64)obj->buffer.pointer[i]) << (i * 8));
+
+ ACPI_FREE(obj);
+
+ if ((mask & BIT(WBRF_ENABLED)) &&
+ (mask & funcs) == funcs)
Hi Evan,
a minor nit from my side: the indentation of the line above seems odd.
if ((mask & BIT(WBRF_ENABLED)) &&
(mask & funcs) == funcs)
+ return true;
+
+ return false;
+}
...