Re: [PATCH 1/3] ACPI: utils: introduce acpi_get_local_u64_address()
From: Rafael J. Wysocki
Date: Fri Jun 07 2024 - 14:51:36 EST
On Tue, May 28, 2024 at 9:29 PM Pierre-Louis Bossart
<pierre-louis.bossart@xxxxxxxxxxxxxxx> wrote:
>
> The ACPI _ADR is a 64-bit value. We changed the definitions in commit
> ca6f998cf9a2 ("ACPI: bus: change _ADR representation to 64 bits") but
> some helpers still assume the value is a 32-bit value.
>
> This patch adds a new helper to extract the full 64-bits. The existing
> 32-bit helper is kept for backwards-compatibility and cases where the
> _ADR is known to fit in a 32-bit value.
>
> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@xxxxxxxxxxxxxxx>
> Reviewed-by: Péter Ujfalusi <peter.ujfalusi@xxxxxxxxxxxxxxx>
> Reviewed-by: Bard Liao <yung-chuan.liao@xxxxxxxxxxxxxxx>
Do you want me to apply this or do you want me to route it along with
the rest of the series?
In the latter case feel free to add
Acked-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>
to it.
Thanks!
> ---
> drivers/acpi/utils.c | 22 ++++++++++++++++------
> include/linux/acpi.h | 1 +
> 2 files changed, 17 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/acpi/utils.c b/drivers/acpi/utils.c
> index 202234ba54bd..ae9384282273 100644
> --- a/drivers/acpi/utils.c
> +++ b/drivers/acpi/utils.c
> @@ -277,15 +277,25 @@ acpi_evaluate_integer(acpi_handle handle,
>
> EXPORT_SYMBOL(acpi_evaluate_integer);
>
> +int acpi_get_local_u64_address(acpi_handle handle, u64 *addr)
> +{
> + acpi_status status;
> +
> + status = acpi_evaluate_integer(handle, METHOD_NAME__ADR, NULL, addr);
> + if (ACPI_FAILURE(status))
> + return -ENODATA;
> + return 0;
> +}
> +EXPORT_SYMBOL(acpi_get_local_u64_address);
I'd prefer EXPORT_SYMBOL_GPL() here unless you absolutely cannot live with it.
> +
> int acpi_get_local_address(acpi_handle handle, u32 *addr)
> {
> - unsigned long long adr;
> - acpi_status status;
> -
> - status = acpi_evaluate_integer(handle, METHOD_NAME__ADR, NULL, &adr);
> - if (ACPI_FAILURE(status))
> - return -ENODATA;
> + u64 adr;
> + int ret;
>
> + ret = acpi_get_local_u64_address(handle, &adr);
> + if (ret < 0)
> + return ret;
> *addr = (u32)adr;
> return 0;
> }
> diff --git a/include/linux/acpi.h b/include/linux/acpi.h
> index 28c3fb2bef0d..65e7177bcb02 100644
> --- a/include/linux/acpi.h
> +++ b/include/linux/acpi.h
> @@ -761,6 +761,7 @@ static inline u64 acpi_arch_get_root_pointer(void)
> }
> #endif
>
> +int acpi_get_local_u64_address(acpi_handle handle, u64 *addr);
> int acpi_get_local_address(acpi_handle handle, u32 *addr);
> const char *acpi_get_subsystem_id(acpi_handle handle);
>
> --