[v9,2/3] ACPI: x86: s2idle: Adjust constraints logic building
Commit Message
Constraints are currently only stored when enabled. To enable
the ability to check if constraints are present they need to be
stored even if disabled.
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
---
v8->v9:
* New patch
---
drivers/acpi/x86/s2idle.c | 48 ++++++++++++++++++++-------------------
1 file changed, 25 insertions(+), 23 deletions(-)
Comments
On Thu, Aug 03, 2023 at 08:02:28PM -0500, Mario Limonciello wrote:
> Constraints are currently only stored when enabled. To enable
> the ability to check if constraints are present they need to be
> stored even if disabled.
...
> @@ -120,8 +121,7 @@ static void lpi_device_get_constraints_amd(void)
> if (!lpi_constraints_table)
> goto free_acpi_buffer;
>
> - acpi_handle_debug(lps0_device_handle,
> - "LPI: constraints list begin:\n");
> + acpi_handle_debug(lps0_device_handle, "LPI: constraints list begin:\n");
>
> for (j = 0; j < package->package.count; ++j) {
> union acpi_object *info_obj = &package->package.elements[j];
Unrelated change.
@@ -78,6 +78,7 @@ struct lpi_device_constraint {
struct lpi_constraints {
acpi_handle handle;
int min_dstate;
+ bool enabled;
};
/* AMD Constraint package structure */
@@ -120,8 +121,7 @@ static void lpi_device_get_constraints_amd(void)
if (!lpi_constraints_table)
goto free_acpi_buffer;
- acpi_handle_debug(lps0_device_handle,
- "LPI: constraints list begin:\n");
+ acpi_handle_debug(lps0_device_handle, "LPI: constraints list begin:\n");
for (j = 0; j < package->package.count; ++j) {
union acpi_object *info_obj = &package->package.elements[j];
@@ -129,12 +129,12 @@ static void lpi_device_get_constraints_amd(void)
struct lpi_constraints *list;
acpi_status status;
+ list = &lpi_constraints_table[j];
+ list->min_dstate = -EINVAL;
+
for (k = 0; k < info_obj->package.count; ++k) {
union acpi_object *obj = &info_obj->package.elements[k];
- list = &lpi_constraints_table[lpi_constraints_table_size];
- list->min_dstate = -1;
-
switch (k) {
case 0:
dev_info.enabled = obj->integer.value;
@@ -149,27 +149,29 @@ static void lpi_device_get_constraints_amd(void)
dev_info.min_dstate = obj->integer.value;
break;
}
+ }
- if (!dev_info.enabled || !dev_info.name ||
- !dev_info.min_dstate)
- continue;
+ if (!dev_info.name)
+ continue;
- status = acpi_get_handle(NULL, dev_info.name,
- &list->handle);
- if (ACPI_FAILURE(status))
- continue;
+ status = acpi_get_handle(NULL, dev_info.name, &list->handle);
+ if (ACPI_FAILURE(status))
+ continue;
- acpi_handle_debug(lps0_device_handle,
- "Name:%s\n", dev_info.name);
+ acpi_handle_debug(lps0_device_handle,
+ "Name:%s, Enabled: %d, States: %d, MinDstate: %d\n",
+ dev_info.name,
+ dev_info.enabled,
+ dev_info.function_states,
+ dev_info.min_dstate);
- list->min_dstate = dev_info.min_dstate;
+ list->min_dstate = dev_info.min_dstate;
- if (list->min_dstate < 0) {
- acpi_handle_debug(lps0_device_handle,
- "Incomplete constraint defined\n");
- continue;
- }
+ if (list->min_dstate < 0) {
+ acpi_handle_debug(lps0_device_handle, "Incomplete constraint defined\n");
+ continue;
}
+ list->enabled = dev_info.enabled;
lpi_constraints_table_size++;
}
}
@@ -232,7 +234,7 @@ static void lpi_device_get_constraints(void)
}
}
- if (!info.enabled || !info.package || !info.name)
+ if (!info.package || !info.name)
continue;
constraint = &lpi_constraints_table[lpi_constraints_table_size];
@@ -244,7 +246,7 @@ static void lpi_device_get_constraints(void)
acpi_handle_debug(lps0_device_handle,
"index:%d Name:%s\n", i, info.name);
- constraint->min_dstate = -1;
+ constraint->min_dstate = -EINVAL;
for (j = 0; j < package_count; ++j) {
union acpi_object *info_obj = &info.package[j];
@@ -281,7 +283,7 @@ static void lpi_device_get_constraints(void)
"Incomplete constraint defined\n");
continue;
}
-
+ constraint->enabled = info.enabled;
lpi_constraints_table_size++;
}