ACK: [PATCH 1/7] acpi: method: refine _PSS and _TSS method tests

ivanhu ivan.hu at canonical.com
Mon Jan 25 03:17:10 UTC 2021



On 1/23/21 10:12 AM, Alex Hung wrote:
> Signed-off-by: Alex Hung <alex.hung at canonical.com>
> ---
>  src/acpi/method/method.c | 98 ++++++++++++----------------------------
>  1 file changed, 30 insertions(+), 68 deletions(-)
> 
> diff --git a/src/acpi/method/method.c b/src/acpi/method/method.c
> index 9372623f..8ee03b1e 100644
> --- a/src/acpi/method/method.c
> +++ b/src/acpi/method/method.c
> @@ -2144,6 +2144,15 @@ static void method_test_PSS_return(
>  	bool dump_elements = false;
>  	bool *element_ok;
>  
> +	static const fwts_package_element elements[] = {
> +		{ ACPI_TYPE_INTEGER,	"CoreFrequency" },
> +		{ ACPI_TYPE_INTEGER,	"Power" },
> +		{ ACPI_TYPE_INTEGER,	"Latency" },
> +		{ ACPI_TYPE_INTEGER,	"BusMasterLatency" },
> +		{ ACPI_TYPE_INTEGER,	"Control" },
> +		{ ACPI_TYPE_INTEGER,	"Status" },
> +	};
> +
>  	FWTS_UNUSED(private);
>  
>  	if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK)
> @@ -2159,49 +2168,21 @@ static void method_test_PSS_return(
>  		return;
>  	}
>  
> +	if (fwts_method_package_elements_all_type(fw, name, obj, ACPI_TYPE_PACKAGE) != FWTS_OK)
> +		return;
> +
>  	for (i = 0; i < obj->Package.Count; i++) {
>  		ACPI_OBJECT *pstate;
>  
> -		if (obj->Package.Elements[i].Type != ACPI_TYPE_PACKAGE) {
> -			fwts_failed(fw, LOG_LEVEL_MEDIUM,
> -				"Method_PSSElementType",
> -				"%s package element %" PRIu32
> -				" was not a package.", name, i);
> -			failed = true;
> -			continue;	/* Skip processing sub-package */
> -		}
> -
> +		element_ok[i] = true;
>  		pstate = &obj->Package.Elements[i];
> -		if (pstate->Package.Count != 6) {
> -			fwts_failed(fw, LOG_LEVEL_MEDIUM,
> -				"Method_PSSSubPackageElementCount",
> -				"%s P-State sub-package %" PRIu32
> -				" was expected to "
> -				"have 6 elements, got %" PRIu32 " elements instead.",
> -				name, i, obj->Package.Count);
> -			failed = true;
> -			continue;	/* Skip processing sub-package */
> -		}
> -
> -		/* Elements need to be all ACPI integer types */
> -		if ((pstate->Package.Elements[0].Type != ACPI_TYPE_INTEGER) ||
> -		    (pstate->Package.Elements[1].Type != ACPI_TYPE_INTEGER) ||
> -		    (pstate->Package.Elements[2].Type != ACPI_TYPE_INTEGER) ||
> -		    (pstate->Package.Elements[3].Type != ACPI_TYPE_INTEGER) ||
> -		    (pstate->Package.Elements[4].Type != ACPI_TYPE_INTEGER) ||
> -		    (pstate->Package.Elements[5].Type != ACPI_TYPE_INTEGER)) {
> -			fwts_failed(fw, LOG_LEVEL_MEDIUM,
> -				"Method_PSSSubPackageElementType",
> -				"%s P-State sub-package %" PRIu32 " was expected to "
> -				"have 6 Integer elements but didn't", name, i);
> +		if (fwts_method_package_elements_type(fw, name, pstate, elements) != FWTS_OK) {
> +			element_ok[i] = false;
>  			failed = true;
>  			continue;
>  		}
>  
> -		/*
> -	 	 *  Parses OK, so this element can be dumped out
> -		 */
> -		element_ok[i] = true;
> +		/* At least one element is OK, so the element can be dumped out */
>  		dump_elements = true;
>  
>  		/*
> @@ -2407,6 +2388,14 @@ static void method_test_TSS_return(
>  	bool *tss_elements_ok;
>  	bool an_element_ok = false;
>  
> +	static const fwts_package_element elements[] = {
> +		{ ACPI_TYPE_INTEGER,	"Percent" },
> +		{ ACPI_TYPE_INTEGER,	"Power" },
> +		{ ACPI_TYPE_INTEGER,	"Latency" },
> +		{ ACPI_TYPE_INTEGER,	"CoordType" },
> +		{ ACPI_TYPE_INTEGER,	"Status" },
> +	};
> +
>  	FWTS_UNUSED(private);
>  
>  	if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE) != FWTS_OK)
> @@ -2422,56 +2411,29 @@ static void method_test_TSS_return(
>  		return;
>  	}
>  
> +	if (fwts_method_package_elements_all_type(fw, name, obj, ACPI_TYPE_PACKAGE) != FWTS_OK)
> +		return;
> +
>  	/* Could be one or more packages */
>  	for (i = 0; i < obj->Package.Count; i++) {
>  		ACPI_OBJECT *pkg;
> -		uint32_t j;
>  
>  		tss_elements_ok[i] = true;
> -
> -		if (obj->Package.Elements[i].Type != ACPI_TYPE_PACKAGE) {
> -			fwts_failed(fw, LOG_LEVEL_MEDIUM,
> -				"Method_TSSElementType",
> -				"%s package element %" PRIu32
> -				" was not a package.", name, i);
> -			tss_elements_ok[i] = false;
> -			failed = true;
> -			continue;	/* Skip processing sub-package */
> -		}
> -
>  		pkg = &obj->Package.Elements[i];
> -		/*
> -		 *  We expect a package of 5 integers.
> -		 */
> -		if (fwts_method_subpackage_count_equal(fw, name, pkg, i, 5) != FWTS_OK) {
> +		if (fwts_method_package_elements_type(fw, name, pkg, elements) != FWTS_OK) {
>  			tss_elements_ok[i] = false;
> -			failed = true;
> -			continue;	/* Skip processing sub-package */
> -		}
> -
> -		for (j = 0; j < 5; j++) {
> -			if (pkg->Package.Elements[j].Type != ACPI_TYPE_INTEGER) {
> -				fwts_failed(fw, LOG_LEVEL_MEDIUM,
> -					"Method_TSSSubPackageElementCount",
> -					"%s sub-package %" PRIu32
> -					" element %" PRIu32 " is not "
> -					"an integer.", name, i, j);
> -				tss_elements_ok[i] = false;
> -			}
> -		}
> -		if (!tss_elements_ok[i]) {
>  			failed = true;
>  			continue;
>  		}
>  
> -		/* At least one element is OK, so remember that */
> +		/* At least one element is OK, so the element can be dumped out */
>  		an_element_ok = true;
>  
>  		/* Element 0 must be 1..100 */
>  		if ((pkg->Package.Elements[0].Integer.Value < 1) ||
>  		    (pkg->Package.Elements[0].Integer.Value > 100)) {
>  			fwts_failed(fw, LOG_LEVEL_MEDIUM,
> -				"Method_TSDSubPackageElement0",
> +				"Method_TSDSubPackageElement",
>  				"%s sub-package %" PRIu32 " element 0 "
>  				"was expected to have value 1..100, instead "
>  				"was %" PRIu64 ".",
> 


Acked-by: Ivan Hu <ivan.hu at canonical.com>



More information about the fwts-devel mailing list