Re: [PATCH] ACPI: processor_core: LoongArch: Get physical id from MADT table

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Jul 10, 2023 at 8:33 AM Bibo Mao <maobibo@xxxxxxxxxxx> wrote:
>
> With ACPI Spec 6.5 physical id can be parsed from MADT table for
> LoongArch system, also it can be used in MAT table for cpu hotplug
> stage. This patch adds physical id parsing for LoongArch system.
>
> Signed-off-by: Bibo Mao <maobibo@xxxxxxxxxxx>
> ---
>  drivers/acpi/processor_core.c | 25 +++++++++++++++++++++++++
>  1 file changed, 25 insertions(+)
>
> diff --git a/drivers/acpi/processor_core.c b/drivers/acpi/processor_core.c
> index d6606a9f2da6..51239cd2a485 100644
> --- a/drivers/acpi/processor_core.c
> +++ b/drivers/acpi/processor_core.c
> @@ -132,6 +132,26 @@ static int map_rintc_hartid(struct acpi_subtable_header *entry,
>         return -EINVAL;
>  }
>
> +/*
> + * Retrieve LoongArch CPU physical id
> + */
> +static int map_core_pic_id(struct acpi_subtable_header *entry,
> +               int device_declaration, u32 acpi_id, phys_cpuid_t *apic_id)
> +{
> +       struct acpi_madt_core_pic *core_pic =
> +               container_of(entry, struct acpi_madt_core_pic, header);
> +
> +       if (!(core_pic->flags & ACPI_MADT_ENABLED))
> +               return -ENODEV;
> +
> +       if (device_declaration && (core_pic->processor_id == acpi_id)) {
> +               *apic_id = core_pic->core_id;
> +               return 0;
> +       }
> +
> +       return -EINVAL;
> +}
> +
>  static phys_cpuid_t map_madt_entry(struct acpi_table_madt *madt,
>                                    int type, u32 acpi_id)
>  {
> @@ -165,6 +185,9 @@ static phys_cpuid_t map_madt_entry(struct acpi_table_madt *madt,
>                 } else if (header->type == ACPI_MADT_TYPE_RINTC) {
>                         if (!map_rintc_hartid(header, type, acpi_id, &phys_id))
>                                 break;
> +               } else if (header->type == ACPI_MADT_TYPE_CORE_PIC) {
> +                       if (!map_core_pic_id(header, type, acpi_id, &phys_id))

Is ACPI_MADT_TYPE_CORE_PIC specific to LoongArch?  The changelog
should mention it if that's the case.

> +                               break;
>                 }
>                 entry += header->length;
>         }
> @@ -216,6 +239,8 @@ static phys_cpuid_t map_mat_entry(acpi_handle handle, int type, u32 acpi_id)
>                 map_x2apic_id(header, type, acpi_id, &phys_id);
>         else if (header->type == ACPI_MADT_TYPE_GENERIC_INTERRUPT)
>                 map_gicc_mpidr(header, type, acpi_id, &phys_id);
> +       else if (header->type == ACPI_MADT_TYPE_CORE_PIC)
> +               map_core_pic_id(header, type, acpi_id, &phys_id);
>
>  exit:
>         kfree(buffer.pointer);
> --
> 2.27.0
>



[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]
  Powered by Linux