ACPICA: Add support for PCC Opregion special context data
authorSudeep Holla <sudeep.holla@arm.com>
Wed, 22 Dec 2021 16:32:54 +0000 (17:32 +0100)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Mon, 27 Dec 2021 16:01:28 +0000 (17:01 +0100)
ACPICA commit 55526e8a6133cbf5a9cc0fb75a95dbbac6eb98e6

PCC Opregion added in ACPIC 6.3 requires special context data similar
to GPIO and Generic Serial Bus as it needs to know the internal PCC
buffer and its length as well as the PCC channel index when the opregion
handler is being executed by the OSPM.

Lets add support for the special context data needed by PCC Opregion.

Link: https://github.com/acpica/acpica/commit/55526e8a
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/acpica/evregion.c
include/acpi/actypes.h

index 4ef43c8ef5e78a0cc1fb8ba16745dba86dbbd9c0..80b68f216b4613116c79fcb7f14452b955a99ec7 100644 (file)
@@ -162,6 +162,16 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj,
                        return_ACPI_STATUS(AE_NOT_EXIST);
                }
 
+               if (region_obj->region.space_id == ACPI_ADR_SPACE_PLATFORM_COMM) {
+                       struct acpi_pcc_info *ctx =
+                           handler_desc->address_space.context;
+
+                       ctx->internal_buffer =
+                           field_obj->field.internal_pcc_buffer;
+                       ctx->length = region_obj->region.length;
+                       ctx->subspace_id = region_obj->region.address;
+               }
+
                /*
                 * We must exit the interpreter because the region setup will
                 * potentially execute control methods (for example, the _REG method
index 83a7ee1fbd7c6fd55929902959f833b10c7c3243..69e89d572b9e3077f9e4d79dcfdcd05fa09a522d 100644 (file)
@@ -1103,6 +1103,14 @@ struct acpi_connection_info {
        u8 access_length;
 };
 
+/* Special Context data for PCC Opregion (ACPI 6.3) */
+
+struct acpi_pcc_info {
+       u8 subspace_id;
+       u16 length;
+       u8 *internal_buffer;
+};
+
 typedef
 acpi_status (*acpi_adr_space_setup) (acpi_handle region_handle,
                                     u32 function,