[PATCH 11/16] acpi: method: add _CBR test (mantis 2045/2077)
Alex Hung
alex.hung at canonical.com
Tue Jan 26 20:30:35 UTC 2021
Signed-off-by: Alex Hung <alex.hung at canonical.com>
---
src/acpi/method/method.c | 61 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 61 insertions(+)
diff --git a/src/acpi/method/method.c b/src/acpi/method/method.c
index 43f697fa..90e03304 100644
--- a/src/acpi/method/method.c
+++ b/src/acpi/method/method.c
@@ -65,6 +65,7 @@
* _BTM Y
* _BTP Y
* _CBA Y
+ * _CBR Y
* _CCA Y
* _CDM Y
* _CID Y
@@ -4607,6 +4608,63 @@ static int method_test_CBA(fwts_framework *fw)
"_CBA", NULL, 0, fwts_method_test_integer_return, NULL);
}
+static void method_test_CBR_return(
+ fwts_framework *fw,
+ char *name,
+ ACPI_BUFFER *buf,
+ ACPI_OBJECT *obj,
+ void *private)
+{
+ uint32_t version, length;
+ bool passed = true;
+
+ static const fwts_package_element elements[] = {
+ { ACPI_TYPE_INTEGER, "Version," },
+ { ACPI_TYPE_INTEGER, "Base" },
+ { ACPI_TYPE_INTEGER, "Length" }
+ };
+
+ FWTS_UNUSED(private);
+
+ if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK)
+ return;
+
+ if (fwts_method_package_elements_type(fw, name, obj, elements) != FWTS_OK)
+ return;
+
+ version = obj->Package.Elements[0].Integer.Value;
+ length = obj->Package.Elements[2].Integer.Value;
+
+ switch (version) {
+ case 0:
+ if (length != 0x2000) /* 8 KB */
+ fwts_failed(fw, LOG_LEVEL_CRITICAL,
+ "Method_CBRLength",
+ "CXL 1.1 expects length of 8KB (0x2000), got 0x%" PRIx32 , length);
+ break;
+ case 1:
+ if (length != 0x10000) /* 64 KB */
+ fwts_failed(fw, LOG_LEVEL_CRITICAL,
+ "Method_CBRLength",
+ "CXL 2.0 expects length of 64KB (0x10000), got 0x%" PRIx32 , length);
+ break;
+ default:
+ fwts_failed(fw, LOG_LEVEL_HIGH,
+ "Method_CBRBadVersion",
+ "Expecting 0 or 1, got 0x%" PRIx8 , version);
+ break;
+ }
+
+ if (passed)
+ fwts_method_passed_sane(fw, name, "package");
+}
+
+static int method_test_CBR(fwts_framework *fw)
+{
+ return method_evaluate_method(fw, METHOD_OPTIONAL,
+ "_CBR", NULL, 0, method_test_CBR_return, NULL);
+}
+
static int method_test_CDM(fwts_framework *fw)
{
return method_evaluate_method(fw, METHOD_OPTIONAL,
@@ -4716,6 +4774,9 @@ static fwts_framework_minor_test method_tests[] = {
/* Section 6.5.10 NVDIMM Label Methods */
{ method_test_LSI, "Test _LSI (Label Storage Information)." },
+ /* Section 6.5.10 CXL Host Bridge Register Info */
+ { method_test_CBR, "Test _CBR (CXL Host Bridge Register)." },
+
/* Section 7.1 Declaring a Power Resource Object */
{ method_test_OFF, "Test _OFF (Set resource off)." },
--
2.25.1
More information about the fwts-devel
mailing list