On Mon, Jul 27, 2020 at 05:16:47PM +0200, Mark Kettenis wrote:
> > Date: Mon, 27 Jul 2020 17:02:41 +0200 (CEST)
> > From: Mark Kettenis <mark.kette...@xs4all.nl>
> > 
> > Recent ACPI versions have deprecated "Processor()" nodes in favout of
> > "Device()" nodes with a _HID() method that returns "ACPI0007".  This
> > diff tries to support machines with firmware that implements this.  If
> > you see something like:
> > 
> >   "ACPI0007" at acpi0 not configured
> > 
> > please try the following diff and report back with an updated dmesg.
> > 
> > Cheers,
> > 
> > Mark
> 
> And now with the right diff...

On a dell r6415, it looks like this:

acpicpu0 at acpi0copyvalue: 6: C1(@1 halt!)
all the way up to
acpicpu127 at acpi0copyvalue: 6: no cpu matching ACPI ID 127

which I guess means aml_copyvalue() needs to learn how to copy 
AML_OBJTYPE_DEVICE.

> 
> 
> Index: dev/acpi/acpicpu.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/acpi/acpicpu.c,v
> retrieving revision 1.85
> diff -u -p -r1.85 acpicpu.c
> --- dev/acpi/acpicpu.c        27 May 2020 05:02:21 -0000      1.85
> +++ dev/acpi/acpicpu.c        27 Jul 2020 14:58:38 -0000
> @@ -186,6 +186,11 @@ struct cfdriver acpicpu_cd = {
>       NULL, "acpicpu", DV_DULL
>  };
>  
> +const char *acpicpu_hids[] = {
> +     "ACPI0007",
> +     NULL
> +};
> +
>  extern int setperf_prio;
>  
>  struct acpicpu_softc *acpicpu_sc[MAXCPUS];
> @@ -650,6 +655,9 @@ acpicpu_match(struct device *parent, voi
>       struct acpi_attach_args *aa = aux;
>       struct cfdata           *cf = match;
>  
> +     if (acpi_matchhids(aa, acpicpu_hids, cf->cf_driver->cd_name))
> +             return (1);
> +
>       /* sanity */
>       if (aa->aaa_name == NULL ||
>           strcmp(aa->aaa_name, cf->cf_driver->cd_name) != 0 ||
> @@ -665,6 +673,7 @@ acpicpu_attach(struct device *parent, st
>       struct acpicpu_softc    *sc = (struct acpicpu_softc *)self;
>       struct acpi_attach_args *aa = aux;
>       struct aml_value        res;
> +     int64_t                 uid;
>       int                     i;
>       uint32_t                status = 0;
>       CPU_INFO_ITERATOR       cii;
> @@ -675,6 +684,10 @@ acpicpu_attach(struct device *parent, st
>       acpicpu_sc[sc->sc_dev.dv_unit] = sc;
>  
>       SLIST_INIT(&sc->sc_cstates);
> +
> +     if (aml_evalinteger(sc->sc_acpi, sc->sc_devnode,
> +         "_UID", 0, NULL, &uid) == 0)
> +             sc->sc_cpu = uid;
>  
>       if (aml_evalnode(sc->sc_acpi, sc->sc_devnode, 0, NULL, &res) == 0) {
>               if (res.type == AML_OBJTYPE_PROCESSOR) {
> 

Reply via email to