Commit a8f57ce4 authored by Sudeep Holla's avatar Sudeep Holla Committed by Zhang Zekun
Browse files

ACPICA: Add support for PCC Opregion special context data

mainline inclusion
from mainline-v5.17-rc1
commit 0acf24ad
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I9VPZ8

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?h=v6.9-rc5&id=0acf24ad7e10f547809faefb8069f8f5482eb4d9

-------------------------------------

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: default avatarSudeep Holla <sudeep.holla@arm.com>
Signed-off-by: default avatarBob Moore <robert.moore@intel.com>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: default avatarZhang Zekun <zhangzekun11@huawei.com>
parent b1800a08
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -161,6 +161,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
+8 −0
Original line number Diff line number Diff line
@@ -1105,6 +1105,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,