> 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...


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