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

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

 



On Tue, Jul 25, 2023 at 2:32 AM bibo mao <maobibo@xxxxxxxxxxx> wrote:
>
> slightly ping :)
>
> 在 2023/7/17 10:22, Bibo Mao 写道:
> > With ACPI Spec 6.5 chapter 5.2.12.20, each processor in LoongArch
> > system has a Core Programmable Interrupt Controller in MADT table,
> > value of its type is 0x11 in the spec and defined as enum variable
> > ACPI_MADT_TYPE_CORE_PIC in Linux kernel. Physical id can be parsed
> > from MADT table for LoongArch system, also it can be parsed from
> > MAT table for hotplug cpu. This patch adds physical id parsing for
> > LoongArch system.
> >
> > Signed-off-by: Bibo Mao <maobibo@xxxxxxxxxxx>
> > ---
> > Changes in v2:
> >  Refresh the changelog and add detailed description of acpi spec
> >  about MADT table for LoongArch system.
> >
> >  Add comments in function map_core_pic_id.
> >
> > ---
> >  drivers/acpi/processor_core.c | 29 +++++++++++++++++++++++++++++
> >  1 file changed, 29 insertions(+)
> >
> > diff --git a/drivers/acpi/processor_core.c b/drivers/acpi/processor_core.c
> > index d6606a9f2da6..7dd6dbaa98c3 100644
> > --- a/drivers/acpi/processor_core.c
> > +++ b/drivers/acpi/processor_core.c
> > @@ -132,6 +132,30 @@ 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 *phys_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;
> > +
> > +     /* device_declaration means Device object in DSDT, in LoongArch
> > +      * system, logical processor acpi_id is required in _UID property
> > +      * of DSDT table, so we should check device_declaration here
> > +      */
> > +     if (device_declaration && (core_pic->processor_id == acpi_id)) {
> > +             *phys_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 +189,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))
> > +                             break;
> >               }
> >               entry += header->length;
> >       }
> > @@ -216,6 +243,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);
>

Sorry for the delay.

Applied (under a slightly edited subject) as 6.6 material, thanks!



[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