[PATCH 1/3] ACPICA: Add support for FFH Opregion special context data
Rafael J. Wysocki
rafael at kernel.org
Wed Jun 22 05:50:08 PDT 2022
On Thu, Jun 16, 2022 at 11:01 AM Sudeep Holla <sudeep.holla at arm.com> wrote:
>
> FFH(Fixed Function Hardware) Opregion is approved to be added in ACPIC 6.5 via
s/ACPIC/ACPI/
> code first approach[1]. It requires special context data similar to GPIO and
> Generic Serial Bus as it needs to know platform specific offset and length.
>
> Add support for the special context data needed by FFH Opregion.
>
> FFH OpRegion enables advanced use of FFH on some architectures. For example,
> it could be used to easily proxy AML code to architecture-specific behavior
> (to ensure it is OS initiated)
>
> Actual behavior of FFH is ofcourse architecture specific and depends on
> the FFH bindings. The offset and length could have arch specific meaning
> or usage.
>
> [1] https://bugzilla.tianocore.org/show_bug.cgi?id=3598
>
> Signed-off-by: Sudeep Holla <sudeep.holla at arm.com>
This looks reasonable to me and I see that you've already submitted a
pull request to the upstream ACPICA.
> ---
> drivers/acpi/acpica/evregion.c | 8 ++++++++
> drivers/acpi/acpica/exfield.c | 8 ++++++--
> drivers/acpi/acpica/exserial.c | 6 ++++++
> include/acpi/acconfig.h | 2 ++
> include/acpi/actypes.h | 7 +++++++
> 5 files changed, 29 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/acpi/acpica/evregion.c b/drivers/acpi/acpica/evregion.c
> index b96b3a7e78e5..d5aed3249630 100644
> --- a/drivers/acpi/acpica/evregion.c
> +++ b/drivers/acpi/acpica/evregion.c
> @@ -172,6 +172,14 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj,
> ctx->subspace_id = (u8)region_obj->region.address;
> }
>
> + if (region_obj->region.space_id ==
> + ACPI_ADR_SPACE_FIXED_HARDWARE) {
> + struct acpi_ffh_info *ctx =
> + handler_desc->address_space.context;
> +
> + ctx->offset = region_obj->region.address;
> + ctx->length = region_obj->region.length;
> + }
> /*
> * We must exit the interpreter because the region setup will
> * potentially execute control methods (for example, the _REG method
> diff --git a/drivers/acpi/acpica/exfield.c b/drivers/acpi/acpica/exfield.c
> index 2b89a496de65..657f4002f9dc 100644
> --- a/drivers/acpi/acpica/exfield.c
> +++ b/drivers/acpi/acpica/exfield.c
> @@ -141,7 +141,9 @@ acpi_ex_read_data_from_field(struct acpi_walk_state *walk_state,
> || obj_desc->field.region_obj->region.space_id ==
> ACPI_ADR_SPACE_IPMI
> || obj_desc->field.region_obj->region.space_id ==
> - ACPI_ADR_SPACE_PLATFORM_RT)) {
> + ACPI_ADR_SPACE_PLATFORM_RT
> + || obj_desc->field.region_obj->region.space_id ==
> + ACPI_ADR_SPACE_FIXED_HARDWARE)) {
>
> /* SMBus, GSBus, IPMI serial */
>
> @@ -305,7 +307,9 @@ acpi_ex_write_data_to_field(union acpi_operand_object *source_desc,
> || obj_desc->field.region_obj->region.space_id ==
> ACPI_ADR_SPACE_IPMI
> || obj_desc->field.region_obj->region.space_id ==
> - ACPI_ADR_SPACE_PLATFORM_RT)) {
> + ACPI_ADR_SPACE_PLATFORM_RT
> + || obj_desc->field.region_obj->region.space_id ==
> + ACPI_ADR_SPACE_FIXED_HARDWARE)) {
>
> /* SMBus, GSBus, IPMI serial */
>
> diff --git a/drivers/acpi/acpica/exserial.c b/drivers/acpi/acpica/exserial.c
> index 4da20d7845df..fd63f2042514 100644
> --- a/drivers/acpi/acpica/exserial.c
> +++ b/drivers/acpi/acpica/exserial.c
> @@ -323,6 +323,12 @@ acpi_ex_write_serial_bus(union acpi_operand_object *source_desc,
> function = ACPI_WRITE;
> break;
>
> + case ACPI_ADR_SPACE_FIXED_HARDWARE:
> +
> + buffer_length = ACPI_FFH_INPUT_BUFFER_SIZE;
> + function = ACPI_WRITE;
> + break;
> +
> default:
> return_ACPI_STATUS(AE_AML_INVALID_SPACE_ID);
> }
> diff --git a/include/acpi/acconfig.h b/include/acpi/acconfig.h
> index c3ae3ea88e17..02e57191c1fd 100644
> --- a/include/acpi/acconfig.h
> +++ b/include/acpi/acconfig.h
> @@ -190,6 +190,8 @@
>
> #define ACPI_PRM_INPUT_BUFFER_SIZE 26
>
> +#define ACPI_FFH_INPUT_BUFFER_SIZE 144
> +
> /* _sx_d and _sx_w control methods */
>
> #define ACPI_NUM_sx_d_METHODS 4
> diff --git a/include/acpi/actypes.h b/include/acpi/actypes.h
> index 3491e454b2ab..1b4f81f1ac5d 100644
> --- a/include/acpi/actypes.h
> +++ b/include/acpi/actypes.h
> @@ -1115,6 +1115,13 @@ struct acpi_pcc_info {
> u8 *internal_buffer;
> };
>
> +/* Special Context data for FFH Opregion (ACPI 6.5) */
> +
> +struct acpi_ffh_info {
> + u64 offset;
> + u64 length;
> +};
> +
> typedef
> acpi_status (*acpi_adr_space_setup) (acpi_handle region_handle,
> u32 function,
> --
> 2.36.1
>
More information about the linux-arm-kernel
mailing list