ACK: [PATCH 02/10] acpi: method: add SBBR compliance tests
Alex Hung
alex.hung at canonical.com
Thu Aug 3 01:50:05 UTC 2017
On 2017-07-24 11:10 PM, Sakar Arora wrote:
> Server Base Boot Requirements (SBBR) specification is intended for SBSA-
> compliant 64-bit ARMv8 servers.
> It defines the base firmware requirements for out-of-box support of any
> ARM SBSA-compatible Operating System or hypervisor.
> The requirements in this specification are expected to be minimal yet
> complete for booting a multi-core ARMv8 server platform, while leaving
> plenty of room for OEM or ODM innovations and design details.
> For more information, download the SBBR specification here:
> http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.den0044b/index.html
>
> - This changes alters the acpi method tests to conform to SBBR specification.
> - Spelling mistakes corrected and some code cleanup.
>
> Signed-off-by: Supreeth Venkatesh <supreeth.venkatesh at arm.com>
> Signed-off-by: Sakar Arora <Sakar.Arora at arm.com>
> ---
> src/acpi/method/method.c | 117 ++++++++++++++++++++++++++++++++++++-----------
> 1 file changed, 90 insertions(+), 27 deletions(-)
>
> diff --git a/src/acpi/method/method.c b/src/acpi/method/method.c
> index 75aac0a..423c96c 100644
> --- a/src/acpi/method/method.c
> +++ b/src/acpi/method/method.c
> @@ -255,7 +255,7 @@
> */
>
> /* Test types */
> -#define METHOD_MANDITORY 1
> +#define METHOD_MANDATORY 1
> #define METHOD_OPTIONAL 2
> #define METHOD_MOBILE 4
> #define METHOD_SILENT 8
> @@ -547,8 +547,8 @@ static int method_evaluate_method(fwts_framework *fw,
> return FWTS_OK;
> } else {
> if (!(test_type & METHOD_SILENT)) {
> - /* Manditory not-found test are a failure */
> - if (test_type & METHOD_MANDITORY) {
> + /* Mandatory not-found test are a failure */
> + if (test_type & METHOD_MANDATORY) {
> fwts_failed(fw, LOG_LEVEL_MEDIUM, "MethodNotExist",
> "Object %s did not exist.", name);
> }
> @@ -557,11 +557,11 @@ static int method_evaluate_method(fwts_framework *fw,
> if ((test_type & METHOD_MOBILE) && (!fadt_mobile_platform)) {
> fwts_skipped(fw,
> "Machine is not a mobile platform, skipping "
> - "test for non-existant mobile platform "
> + "test for non-existent mobile platform "
> "related object %s.", name);
> } else {
> fwts_skipped(fw,
> - "Skipping test for non-existant object %s.",
> + "Skipping test for non-existent object %s.",
> name);
> }
> }
> @@ -972,8 +972,12 @@ static void method_test_AEI_return(
>
> static int method_test_AEI(fwts_framework *fw)
> {
> - return method_evaluate_method(fw, METHOD_OPTIONAL,
> - "_AEI", NULL, 0, method_test_AEI_return, NULL);
> + if (fw->flags & FWTS_FLAG_TEST_SBBR)
> + return method_evaluate_method(fw, METHOD_MANDATORY,
> + "_AEI", NULL, 0, method_test_AEI_return, NULL);
> + else
> + return method_evaluate_method(fw, METHOD_OPTIONAL,
> + "_AEI", NULL, 0, method_test_AEI_return, NULL);
> }
>
> static void check_evt_event (
> @@ -1057,11 +1061,15 @@ static int method_test_EVT(fwts_framework *fw)
> int ret;
>
> /* Only test the _EVT method with pins defined in AEI. */
> - ret = method_evaluate_method(fw, METHOD_OPTIONAL | METHOD_SILENT,
> - "_AEI", NULL, 0, method_test_EVT_return, NULL);
> + if (fw->flags & FWTS_FLAG_TEST_SBBR)
> + ret = method_evaluate_method(fw, METHOD_MANDATORY | METHOD_SILENT,
> + "_AEI", NULL, 0, method_test_EVT_return, NULL);
> + else
> + ret = method_evaluate_method(fw, METHOD_OPTIONAL | METHOD_SILENT,
> + "_AEI", NULL, 0, method_test_EVT_return, NULL);
>
> if (ret == FWTS_NOT_EXIST)
> - fwts_skipped(fw, "Skipping test for non-existant object _EVT.");
> + fwts_skipped(fw, "Skipping test for non-existent object _EVT.");
>
> return ret;
> }
> @@ -1270,8 +1278,12 @@ static void method_test_HID_return(
>
> static int method_test_HID(fwts_framework *fw)
> {
> - return method_evaluate_method(fw, METHOD_OPTIONAL,
> - "_HID", NULL, 0, method_test_HID_return, NULL);
> + if (fw->flags & FWTS_FLAG_TEST_SBBR)
> + return method_evaluate_method(fw, METHOD_MANDATORY,
> + "_HID", NULL, 0, method_test_HID_return, NULL);
> + else
> + return method_evaluate_method(fw, METHOD_OPTIONAL,
> + "_HID", NULL, 0, method_test_HID_return, NULL);
> }
>
> static void method_valid_CID_Type(
> @@ -1551,8 +1563,12 @@ static void method_test_UID_return(
>
> static int method_test_UID(fwts_framework *fw)
> {
> - return method_evaluate_method(fw, METHOD_OPTIONAL,
> - "_UID", NULL, 0, method_test_UID_return, NULL);
> + if (fw->flags & FWTS_FLAG_TEST_SBBR)
> + return method_evaluate_method(fw, METHOD_MANDATORY,
> + "_UID", NULL, 0, method_test_UID_return, NULL);
> + else
> + return method_evaluate_method(fw, METHOD_OPTIONAL,
> + "_UID", NULL, 0, method_test_UID_return, NULL);
> }
>
> /*
> @@ -2235,7 +2251,7 @@ static void method_test_CRS_return(
>
> static int method_test_CRS(fwts_framework *fw)
> {
> - return method_evaluate_method(fw, METHOD_MANDITORY,
> + return method_evaluate_method(fw, METHOD_MANDATORY,
> "_CRS", NULL, 0, method_test_CRS_return, "_CRS");
> }
>
> @@ -2490,8 +2506,12 @@ static int method_test_PXM(fwts_framework *fw)
> /* Section 6.2.17 _CCA */
> static int method_test_CCA(fwts_framework *fw)
> {
> - return method_evaluate_method(fw, METHOD_OPTIONAL,
> - "_CCA", NULL, 0, method_test_integer_return, NULL);
> + if (fw->flags & FWTS_FLAG_TEST_SBBR)
> + return method_evaluate_method(fw, METHOD_MANDATORY,
> + "_CCA", NULL, 0, method_test_integer_return, NULL);
> + else
> + return method_evaluate_method(fw, METHOD_OPTIONAL,
> + "_CCA", NULL, 0, method_test_integer_return, NULL);
> }
>
> /*
> @@ -2598,8 +2618,12 @@ static void method_test_STA_return(
>
> static int method_test_STA(fwts_framework *fw)
> {
> - return method_evaluate_method(fw, METHOD_OPTIONAL, "_STA",
> - NULL, 0, method_test_STA_return, "_STA");
> + if (fw->flags & FWTS_FLAG_TEST_SBBR)
> + return method_evaluate_method(fw, METHOD_MANDATORY, "_STA",
> + NULL, 0, method_test_STA_return, "_STA");
> + else
> + return method_evaluate_method(fw, METHOD_OPTIONAL, "_STA",
> + NULL, 0, method_test_STA_return, "_STA");
> }
>
>
> @@ -4398,8 +4422,12 @@ static int method_test_SST(fwts_framework *fw)
> arg[0].Type = ACPI_TYPE_INTEGER;
> for (i = 0; i <= 4; i++) {
> arg[0].Integer.Value = i;
> - ret = method_evaluate_method(fw, METHOD_OPTIONAL,
> - "_SST", arg, 1, method_test_NULL_return, NULL);
> + if (fw->flags & FWTS_FLAG_TEST_SBBR)
> + ret = method_evaluate_method(fw, METHOD_MANDATORY,
> + "_SST", arg, 1, method_test_NULL_return, NULL);
> + else
> + ret = method_evaluate_method(fw, METHOD_OPTIONAL,
> + "_SST", arg, 1, method_test_NULL_return, NULL);
>
> if (ret != FWTS_OK)
> break;
> @@ -6428,7 +6456,23 @@ static int method_test_PTS(fwts_framework *fw)
> arg[0].Integer.Value = i;
>
> fwts_log_info(fw, "Test _PTS(%d).", i);
> - method_evaluate_method(fw, METHOD_OPTIONAL, "_PTS", arg, 1, method_test_NULL_return, NULL);
> + if (!(fw->flags & FWTS_FLAG_TEST_SBBR))
> + method_evaluate_method(fw, METHOD_OPTIONAL, "_PTS", arg, 1, method_test_NULL_return, NULL);
> + else
> + if (method_evaluate_method(fw, METHOD_MANDATORY, "_PTS", arg, 1,
> + method_test_NULL_return, NULL) == FWTS_NOT_EXIST) {
> + fwts_advice(fw,
> + "Could not find _PTS. This method provides a "
> + "mechanism to do housekeeping functions, such "
> + "as write sleep state to the embedded "
> + "controller before entering a sleep state. If "
> + "the machine cannot suspend (S3), "
> + "hibernate (S4) or shutdown (S5) then it "
> + "could be because _PTS is missing. Note that "
> + "ACPI 1.0 wants _PTS to be executed before "
> + "suspending devices.");
> + break;
> + }
> fwts_log_nl(fw);
> }
> return FWTS_OK;
> @@ -6448,7 +6492,7 @@ static int method_test_TTS(fwts_framework *fw)
> fwts_log_info(fw,
> "Test _TTS(%d) Transition To State S%d.", i, i);
>
> - if (method_evaluate_method(fw, METHOD_MANDITORY,
> + if (method_evaluate_method(fw, METHOD_MANDATORY,
> "_TTS", arg, 1, method_test_NULL_return,
> NULL) == FWTS_NOT_EXIST) {
> fwts_advice(fw,
> @@ -6506,7 +6550,22 @@ static int method_test_WAK(fwts_framework *fw)
> arg[0].Type = ACPI_TYPE_INTEGER;
> arg[0].Integer.Value = i;
> fwts_log_info(fw, "Test _WAK(%d) System Wake, State S%d.", i, i);
> - method_evaluate_method(fw, METHOD_OPTIONAL, "_WAK", arg, 1, method_test_WAK_return, &i);
> + if (!(fw->flags & FWTS_FLAG_TEST_SBBR))
> + method_evaluate_method(fw, METHOD_OPTIONAL, "_WAK", arg, 1, method_test_WAK_return, &i);
> + else
> + if (method_evaluate_method(fw, METHOD_MANDATORY, "_WAK", arg, 1,
> + method_test_WAK_return, &i) == FWTS_NOT_EXIST) {
> + fwts_advice(fw,
> + "Section 7.3.7 states that a system that wakes "
> + "from a sleeping state will invoke the _WAK "
> + "control to issue device, thermal and other "
> + "notifications to ensure that the operating system "
> + "checks the states of various devices, thermal "
> + "zones, etc. The Linux kernel will report an "
> + "ACPI exception if _WAK is does not exist when "
> + "it returns from a sleep state.");
> + break;
> + }
> fwts_log_nl(fw);
> }
> return FWTS_OK;
> @@ -6660,8 +6719,12 @@ static int method_test_VPO(fwts_framework *fw)
>
> static int method_test_ADR(fwts_framework *fw)
> {
> - return method_evaluate_method(fw, METHOD_OPTIONAL,
> - "_ADR", NULL, 0, method_test_integer_return, NULL);
> + if (fw->flags & FWTS_FLAG_TEST_SBBR)
> + return method_evaluate_method(fw, METHOD_MANDATORY,
> + "_ADR", NULL, 0, method_test_integer_return, NULL);
> + else
> + return method_evaluate_method(fw, METHOD_OPTIONAL,
> + "_ADR", NULL, 0, method_test_integer_return, NULL);
> }
>
> static void method_test_BCL_return(
> @@ -7228,6 +7291,6 @@ static fwts_framework_ops method_ops = {
> .minor_tests = method_tests
> };
>
> -FWTS_REGISTER("method", &method_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_TEST_ACPI)
> +FWTS_REGISTER("method", &method_ops, FWTS_TEST_ANYTIME, FWTS_FLAG_BATCH | FWTS_FLAG_TEST_ACPI | FWTS_FLAG_TEST_SBBR)
>
> #endif
>
Thanks for the new work and catching the mistakes.
Acked-by: Alex Hung <alex.hung at canonical.com>
More information about the fwts-devel
mailing list