Index | Thread | Search

From:
Peter Toth <peter.toth198@gmail.com>
Subject:
Re: acpibat remaining capacity is 0
To:
tech@openbsd.org
Date:
Tue, 18 Mar 2025 08:49:25 +0100

Download raw body.

Thread
Patch updated against current.

Index: sys/dev/acpi/dsdt.c
===================================================================
RCS file: /cvs/src/sys/dev/acpi/dsdt.c,v
diff -u -p -u -p -r1.273 dsdt.c
--- sys/dev/acpi/dsdt.c    23 Jan 2025 13:40:26 -0000    1.273
+++ sys/dev/acpi/dsdt.c    18 Mar 2025 07:43:40 -0000
@@ -4037,12 +4037,12 @@ aml_parse(struct aml_scope *scope, int r
             break;
         }
         ival = aml_evalexpr(opargs[0]->v_integer,
-            opargs[1]->v_integer, AMLOP_MOD);
-        aml_store(scope, opargs[2], ival, NULL);
-
-        ival = aml_evalexpr(opargs[0]->v_integer,
             opargs[1]->v_integer, AMLOP_DIVIDE);
         aml_store(scope, opargs[3], ival, NULL);
+
+        ival = aml_evalexpr(opargs[0]->v_integer,
+            opargs[1]->v_integer, AMLOP_MOD);
+        aml_store(scope, opargs[2], ival, NULL);
         break;
     case AMLOP_NOT:
     case AMLOP_TOBCD:

On Sun, Mar 16, 2025 at 3:04 PM Peter Toth <peter.toth198@gmail.com> wrote:
>
> Hi all,
>
> Performed a bit more testing and I believe the root cause is in dsdt.c
> AMLOP_MOD and AMLOP_DIVIDE ordering. The patch below is reversing the
> order and this fixed the issues on both devices I've tested so far.
> Additionally also tested with a Thinkpad T490, no negative impact.
> Included additional details further down. Would be good to hear some
> feedback and if OK apply upstream. If required I can include all the
> logs and AML.
>
> Index: sys/dev/acpi/dsdt.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/acpi/dsdt.c,v
> diff -u -p -u -r1.271 dsdt.c
> --- sys/dev/acpi/dsdt.c    20 Sep 2024 02:00:46 -0000    1.271
> +++ sys/dev/acpi/dsdt.c    16 Mar 2025 13:06:30 -0000
> @@ -4026,12 +4026,12 @@ aml_parse(struct aml_scope *scope, int r
>              break;
>          }
>          ival = aml_evalexpr(opargs[0]->v_integer,
> -            opargs[1]->v_integer, AMLOP_MOD);
> -        aml_store(scope, opargs[2], ival, NULL);
> -
> -        ival = aml_evalexpr(opargs[0]->v_integer,
>              opargs[1]->v_integer, AMLOP_DIVIDE);
>          aml_store(scope, opargs[3], ival, NULL);
> +
> +        ival = aml_evalexpr(opargs[0]->v_integer,
> +            opargs[1]->v_integer, AMLOP_MOD);
> +        aml_store(scope, opargs[2], ival, NULL);
>          break;
>      case AMLOP_NOT:
>      case AMLOP_TOBCD:
>
> A bit more on this below...
>
> AML snippet for _BST calculation, with comments for relevant lines:
>
>                     Method (_BST, 0, Serialized)  // _BST: Battery Status
>                     {
>                         BST1 ()
>                         Return (BSV0) /* \_SB_.BSV0 */
>                     }
>
>                     Method (BST1, 0, Serialized)
>                     {
>                         If (^^PCI0.LPCB.EC0.ECAV ())
>                         {
>                             If (^^PCI0.LPCB.EC0.BAT)
>                             {
>                                 BSV0 [0x03] = ^^PCI0.LPCB.EC0.BPV0 /*
> \_SB_.PCI0.LPCB.EC0_.BPV0 */
>                                 If (^^PCI0.LPCB.EC0.BFC0)
>                                 {
>                                     Local3 = (^^PCI0.LPCB.EC0.BRC0 * 0x64)
>                                     Divide (Local3,
> ^^PCI0.LPCB.EC0.BFC0, Local3, Local0)
>                                     If ((RBF0 == Zero))
>                                     {
>                                         Local3 = (^^PCI0.LPCB.EC0.BFC0
> * Local0)
>                                     }
>                                     Else
>                                     {
>                                         Local3 = (RBF0 * Local0)
>                                     }
>
>                                     Divide (Local3, 0x64, Local3,
> Local0) <--- fails with current AMLOP_MOD/DIVIDE ordering and always
> results in 0.
>                                     Local0++ <--- increments to value 1
>                                     BSV0 [0x02] = Local0 <--- value 1
> is assigned as remaining charge and lands in
> hw.sensors.acpibat[0-1].amphour3 eventually
>                                 }
>
> ACPI debug log snippet confirming this issue:
> aml_evalexpr: Multiply 80a 0 = 0
> aml_evalexpr: Mod 0 64 = 0 <--- AMLOP_MOD
> aml_evalexpr: Divide 0 64 = 0 <--- AMLOP_DIVIDE
> aml_evalexpr: Increment 0 1 = 1 <--- invalid final result (always 1)
>
> After patching the debug log shows:
> aml_evalexpr: Multiply fc5 64 = 628f4
> aml_evalexpr: Divide 628f4 64 = fc5 <--- AMLOP_DIVIDE first
> aml_evalexpr: Mod 628f4 64 = 0 <--- AMLOP_MOD second
> aml_evalexpr: Increment fc5 1 = fc6 <--- valid result
>
> sysctl with patch shows:
> $ sysctl hw|grep remain
> hw.sensors.acpibat0.amphour3=1.95 Ah (remaining capacity), OK
> hw.sensors.acpibat1.amphour3=1.99 Ah (remaining capacity), OK
>
> There is obviously more to this issue, but I wanted to keep this short.
>
> PT
>
>
> On Wed, Mar 12, 2025 at 5:04 PM Peter Toth <peter.toth198@gmail.com> wrote:
> >
> > Some progress on this, the remaining capacity is reported fine in
> > _SB_.BAT1.BST1 (0x558, 1368mAh) and changes to 1 by the time it
> > returns from _SB_.BAT1._BST.
> >
> > Snippet from debug log:
> > parsename: \\_SB_.BSV1 4
> >
> > --==Finished evaluating method: \\_SB_.BAT1.BST1 T
> > ===== Stack \\_SB_.BAT1.BST1:Method
> >  Local0:  0xffff8000022b7c88 cnt:01 stk:60 integer: 0
> >  Local1:  0xffff8000022b7208 cnt:01 stk:61 integer: 1
> >  Local3:  0xffff8000022b7408 cnt:01 stk:63 integer: 558 <-- remaining
> >  Local4:  0xffff80000232f708 cnt:01 stk:64 integer: 0
> > parsename: \\_SB_.BSV1 4
> >
> > --==Finished evaluating method: \\_SB_.BAT1._BST t
> >  0xffff80000232ff08 cnt:01 stk:00 package: 04
> >  0xffff80000232f108 cnt:01 stk:00 integer: 1
> >  0xffff80000232fc08 cnt:01 stk:00 integer: 16f
> >  0xffff80000232f388 cnt:01 stk:00 integer: 1 <-- remaining
> >  0xffff8000022ec608 cnt:01 stk:00 integer: 2d2d
> > ===== Stack \\_SB_.BAT1._BST:Method
> > acpiac_notify: 80 acpiac0
> > EVALNODE: \\_SB_.AC__._PSR 123848
> >
> > I was able to get the battery remaining capacity with a test
> > workaround overriding in acpibat.c after some trial and error with EC
> > offsets.
> > This testing only patch is working:
> >
> > Index: src/sys/dev/acpi/acpibat.c
> > ===================================================================
> > RCS file: /cvs/src/sys/dev/acpi/acpibat.c,v
> > diff -u -p -u -r1.72 acpibat.c
> > --- src/sys/dev/acpi/acpibat.c  5 Aug 2024 18:37:29 -0000       1.72
> > +++ src/sys/dev/acpi/acpibat.c  12 Mar 2025 15:39:38 -0000
> > @@ -458,6 +458,8 @@ acpibat_getbst(struct acpibat_softc *sc)
> >  {
> >         struct aml_value        res;
> >         int                     rv = EINVAL;
> > +    int64_t bst_capacity;
> > +    uint16_t ec_capacity;
> >
> >         if (!sc->sc_bat_present) {
> >                 memset(&sc->sc_bst, 0, sizeof(sc->sc_bst));
> > @@ -475,9 +477,29 @@ acpibat_getbst(struct acpibat_softc *sc)
> >                 goto out;
> >         }
> >
> > +bst_capacity = 0;
> > +if (bst_capacity >= 0 && bst_capacity < 10 && sc->sc_acpi->sc_ec != NULL) {
> > +    ec_capacity = 0;
> > +    if (sc->sc_dev.dv_unit == 0) {
> > +        acpiec_read(sc->sc_acpi->sc_ec, 0x0A, 2, (u_char *)&ec_capacity);
> > +        if (ec_capacity != 0 && ec_capacity != 0xFFFF) {
> > +            bst_capacity = ec_capacity;
> > +        }
> > +    } else if (sc->sc_dev.dv_unit == 1) {
> > +        acpiec_read(sc->sc_acpi->sc_ec, 0x2A, 2, (u_char *)&ec_capacity);
> > +        if (ec_capacity != 0 && ec_capacity != 0xFFFF) {
> > +            bst_capacity = ec_capacity;
> > +        }
> > +    }
> > +    if (ec_capacity == 0 || ec_capacity == 0xFFFF) {
> > +        printf("%s: EC read invalid (capacity = %u), using _BST
> > capacity %lld mAh\n",
> > +               DEVNAME(sc), ec_capacity, bst_capacity);
> > +    }
> > +}
> >         sc->sc_bst.bst_state = aml_val2int(res.v_package[0]);
> >         sc->sc_bst.bst_rate = aml_val2int(res.v_package[1]);
> > -       sc->sc_bst.bst_capacity = aml_val2int(res.v_package[2]);
> > +       //sc->sc_bst.bst_capacity = aml_val2int(res.v_package[2]);
> > +       sc->sc_bst.bst_capacity = bst_capacity;
> >         sc->sc_bst.bst_voltage = aml_val2int(res.v_package[3]);
> >
> >         dnprintf(60, "state: %u rate: %u cap: %u volt: %u ",
> >
> > sysctl is showing correct values now:
> > hw.sensors.acpibat0.volt0=11.10 VDC (voltage)
> > hw.sensors.acpibat0.volt1=12.50 VDC (current voltage)
> > hw.sensors.acpibat0.current0=0.00 A (rate)
> > hw.sensors.acpibat0.amphour0=2.04 Ah (last full capacity)
> > hw.sensors.acpibat0.amphour1=0.00 Ah (warning capacity)
> > hw.sensors.acpibat0.amphour2=0.00 Ah (low capacity)
> > hw.sensors.acpibat0.amphour3=2.02 Ah (remaining capacity), OK
> > hw.sensors.acpibat0.amphour4=2.10 Ah (design capacity)
> > hw.sensors.acpibat0.raw0=1 (battery discharging), OK
> > hw.sensors.acpibat1.volt0=11.10 VDC (voltage)
> > hw.sensors.acpibat1.volt1=12.48 VDC (current voltage)
> > hw.sensors.acpibat1.current0=0.00 A (rate)
> > hw.sensors.acpibat1.amphour0=2.00 Ah (last full capacity)
> > hw.sensors.acpibat1.amphour1=0.00 Ah (warning capacity)
> > hw.sensors.acpibat1.amphour2=0.00 Ah (low capacity)
> > hw.sensors.acpibat1.amphour3=1.98 Ah (remaining capacity), OK
> > hw.sensors.acpibat1.amphour4=2.10 Ah (design capacity)
> > hw.sensors.acpibat1.raw0=1 (battery discharging), OK
> >
> > And apm is also correctly calculating charging and remaining times.
> >
> > Also tested some changes in dsdt.c, aml_parse to see where or how the
> > value is changed.
> > This yielded nothing new, same info as the debug log.
> >
> > On Tue, Feb 25, 2025 at 9:08 AM Peter Toth <peter.toth198@gmail.com> wrote:
> > >
> > > Performed a bit more testing with ACPI_DEBUG enabled and that produced
> > > the same result for _BST method, remaining capacity returns 1 (output
> > > below).
> > > The other _BST fields are working as expected and refreshing values
> > > correctly. Checked sys/dev/acpi/dsdt.c and the ACPI spec for the
> > > battery state method and all those values are parsed through the same
> > > functions and should be the same type according the spec:
> > >
> > > Package {
> > >    Battery State               // Integer (DWORD)
> > >    Battery Present Rate        // Integer (DWORD)
> > >    Battery Remaining Capacity  // Integer (DWORD)
> > >    Battery Present Voltage     // Integer (DWORD)
> > > }
> > >
> > > ACPI_DEBUG:
> > > --==Finished evaluating method: \\_SB_.BAT0._BST t
> > >  0xffff800002212888 cnt:01 stk:00 package: 04
> > >  0xffff800002216f08 cnt:01 stk:00 integer: 1
> > >  0xffff800002212788 cnt:01 stk:00 integer: 1ac
> > >  0xffff800002214888 cnt:01 stk:00 integer: 1        <--- remaining capacity
> > >  0xffff800002213788 cnt:01 stk:00 integer: 2d1d
> > > ===== Stack \\_SB_.BAT0._BST:Method
> > >
> > > I will test a bit more as time permits.
> > >
> > > PT
> > >
> > > On Fri, Feb 21, 2025 at 7:24 PM Peter Toth <peter.toth198@gmail.com> wrote:
> > > >
> > > > Hi all,
> > > >
> > > > Tested a couple of Getac laptops recently with latest amd64 snapshots.
> > > > Both have dual batteries attached to acpibat(4) and both show 0
> > > > remaining battery capacity.
> > > > Apart from that most other battery properties are OK and sysctl reports:
> > > > hw.sensors.acpibat0.volt0=11.10 VDC (voltage)
> > > > hw.sensors.acpibat0.volt1=11.63 VDC (current voltage)
> > > > hw.sensors.acpibat0.current0=0.39 A (rate)
> > > > hw.sensors.acpibat0.amphour0=2.01 Ah (last full capacity)
> > > > hw.sensors.acpibat0.amphour1=0.00 Ah (warning capacity)
> > > > hw.sensors.acpibat0.amphour2=0.00 Ah (low capacity)
> > > > hw.sensors.acpibat0.amphour3=0.00 Ah (remaining capacity), OK
> > > > hw.sensors.acpibat0.amphour4=2.10 Ah (design capacity)
> > > > hw.sensors.acpibat0.raw0=1 (battery discharging), OK
> > > > hw.sensors.acpibat1.volt0=11.10 VDC (voltage)
> > > > hw.sensors.acpibat1.volt1=11.63 VDC (current voltage)
> > > > hw.sensors.acpibat1.current0=0.40 A (rate)
> > > > hw.sensors.acpibat1.amphour0=2.04 Ah (last full capacity)
> > > > hw.sensors.acpibat1.amphour1=0.00 Ah (warning capacity)
> > > > hw.sensors.acpibat1.amphour2=0.00 Ah (low capacity)
> > > > hw.sensors.acpibat1.amphour3=0.00 Ah (remaining capacity), OK
> > > > hw.sensors.acpibat1.amphour4=2.10 Ah (design capacity)
> > > > hw.sensors.acpibat1.raw0=1 (battery discharging), OK
> > > >
> > > > Inserted a couple of printf lines in sys/dev/acpi/acpibat.c to see
> > > > what could be happening. The battery state for capacity in
> > > > acpibat_getbst, line sc->sc_bst.bst_capacity =
> > > > aml_val2int(res.v_package[2]); always reports a value of "1". The
> > > > other 3 bst properties for voltage, rate and state are correct.
> > > >
> > > > Perhaps the AML parsing is breaking on some unexpected DSDT _BST
> > > > values. If anyone is interested, I've uploaded the gzipped DSDT.dsl
> > > > to:
> > > > https://limewire.com/d/10e22f54-79da-456b-b492-c67e5cd40f81#EQDxKXdMDt05voTVeono-cfx3tgF3MJP9RdUhiEPEKg
> > > >
> > > > Perhaps someone has already seen this issue before, I would appreciate
> > > > any help or pointers.
> > > >
> > > > As a side note, also tested with FreeBSD live usb boot and the
> > > > remaining capacity showed up OK (same in Linux).
> > > >
> > > > dmesg below:
> > > > OpenBSD 7.6 (GENERIC.MP) #10: Fri Feb 21 17:00:04 CET 2025
> > > >     p@b360.my.domain:/usr/src/sys/arch/amd64/compile/GENERIC.MP
> > > > real mem = 68532105216 (65357MB)
> > > > avail mem = 66431197184 (63353MB)
> > > > random: good seed from bootblocks
> > > > mpath0 at root
> > > > scsibus0 at mpath0: 256 targets
> > > > mainbus0 at root
> > > > bios0 at mainbus0: SMBIOS rev. 3.2 @ 0x9a263000 (38 entries)
> > > > bios0: vendor INSYDE Corp. version "R1.35.070520" date 05/29/2024
> > > > bios0: GETAC B360
> > > > efi0 at bios0: UEFI 2.7
> > > > efi0: INSYDE Corp. rev 0x1350000
> > > > acpi0 at bios0: ACPI 5.1
> > > > acpi0: sleep states S0 S3 S4 S5
> > > > acpi0: tables DSDT FACP UEFI SSDT SSDT SSDT TPM2 MSDM LPIT WSMT SSDT
> > > > SSDT DBGP DBG2 SSDT SSDT SSDT SSDT NHLT ECDT HPET APIC MCFG SSDT DMAR
> > > > SSDT FPDT ASF! BGRT
> > > > acpi0: wakeup devices UAR1(S3) GLAN(S4) XHC_(S3) XDCI(S4) HDAS(S4)
> > > > RP01(S4) RP02(S4) RP03(S4) RP04(S4) RP05(S4) RP06(S4) RP07(S4)
> > > > RP08(S4) RP09(S4) PEGP(S4) RP10(S4) [...]
> > > > acpitimer0 at acpi0: 3579545 Hz, 24 bits
> > > > acpiec0 at acpi0
> > > > acpihpet0 at acpi0: 23999999 Hz
> > > > acpimadt0 at acpi0 addr 0xfee00000: PC-AT compat
> > > > cpu0 at mainbus0: apid 0 (boot processor)
> > > > cpu0: Intel(R) Core(TM) i5-10210U CPU @ 1.60GHz, 1547.73 MHz,
> > > > 06-8e-0c, patch 000000fc
> > > > cpu0: cpuid 1 edx=bfebfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE>
> > > > ecx=77fafbbf<SSE3,PCLMUL,DTES64,MWAIT,DS-CPL,VMX,EST,TM2,SSSE3,SDBG,FMA3,CX16,xTPR,PDCM,PCID,SSE4.1,SSE4.2,x2APIC,MOVBE,POPCNT,DEADLINE,AES,XSAVE,AVX,F16C,RDRAND>
> > > > cpu0: cpuid 6 eax=27f7<SENSOR,ARAT> ecx=9<EFFFREQ>
> > > > cpu0: cpuid 7.0
> > > > ebx=29c67af<FSGSBASE,TSC_ADJUST,SGX,BMI1,AVX2,SMEP,BMI2,ERMS,INVPCID,MPX,RDSEED,ADX,SMAP,CLFLUSHOPT,PT>
> > > > edx=bc000600<SRBDS_CTRL,MD_CLEAR,IBRS,IBPB,STIBP,L1DF,SSBD>
> > > > cpu0: cpuid a vers=4, gp=4, gpwidth=48, ff=3, ffwidth=48
> > > > cpu0: cpuid d.1 eax=f<XSAVEOPT,XSAVEC,XGETBV1,XSAVES>
> > > > cpu0: cpuid 80000001 edx=2c100800<NXE,PAGE1GB,RDTSCP,LONG>
> > > > ecx=121<LAHF,ABM,3DNOWP>
> > > > cpu0: cpuid 80000007 edx=100<ITSC>
> > > > cpu0: msr 10a=a0a0c2b<IBRS_ALL,SKIP_L1DFL,MDS_NO,MISC_PKG_CT,ENERGY_FILT,FB_CLEAR,RRSBA,GDS_CTRL,RFDS_NO>
> > > > cpu0: 32KB 64b/line 8-way D-cache, 32KB 64b/line 8-way I-cache, 256KB
> > > > 64b/line 4-way L2 cache, 6MB 64b/line 12-way L3 cache
> > > > cpu0: smt 0, core 0, package 0
> > > > mtrr: Pentium Pro MTRR support, 10 var ranges, 88 fixed ranges
> > > > cpu0: apic clock running at 24MHz
> > > > cpu0: mwait min=64, max=64, C-substates=0.2.1.2.4.1.1.1, IBE
> > > > cpu1 at mainbus0: apid 2 (application processor)
> > > > cpu1: Intel(R) Core(TM) i5-10210U CPU @ 1.60GHz, 1513.41 MHz,
> > > > 06-8e-0c, patch 000000fc
> > > > cpu1: smt 0, core 1, package 0
> > > > cpu2 at mainbus0: apid 4 (application processor)
> > > > cpu2: Intel(R) Core(TM) i5-10210U CPU @ 1.60GHz, 1496.52 MHz,
> > > > 06-8e-0c, patch 000000fc
> > > > cpu2: smt 0, core 2, package 0
> > > > cpu3 at mainbus0: apid 6 (application processor)
> > > > cpu3: Intel(R) Core(TM) i5-10210U CPU @ 1.60GHz, 1496.52 MHz,
> > > > 06-8e-0c, patch 000000fc
> > > > cpu3: smt 0, core 3, package 0
> > > > cpu4 at mainbus0: apid 1 (application processor)
> > > > cpu4: Intel(R) Core(TM) i5-10210U CPU @ 1.60GHz, 1496.51 MHz,
> > > > 06-8e-0c, patch 000000fc
> > > > cpu4: smt 1, core 0, package 0
> > > > cpu5 at mainbus0: apid 3 (application processor)
> > > > cpu5: Intel(R) Core(TM) i5-10210U CPU @ 1.60GHz, 1496.52 MHz,
> > > > 06-8e-0c, patch 000000fc
> > > > cpu5: smt 1, core 1, package 0
> > > > cpu6 at mainbus0: apid 5 (application processor)
> > > > cpu6: Intel(R) Core(TM) i5-10210U CPU @ 1.60GHz, 1496.51 MHz,
> > > > 06-8e-0c, patch 000000fc
> > > > cpu6: smt 1, core 2, package 0
> > > > cpu7 at mainbus0: apid 7 (application processor)
> > > > cpu7: Intel(R) Core(TM) i5-10210U CPU @ 1.60GHz, 1496.52 MHz,
> > > > 06-8e-0c, patch 000000fc
> > > > cpu7: smt 1, core 3, package 0
> > > > ioapic0 at mainbus0: apid 2 pa 0xfec00000, version 20, 120 pins
> > > > acpimcfg0 at acpi0
> > > > acpimcfg0: addr 0xe0000000, bus 0-255
> > > > acpiprt0 at acpi0: bus 0 (PCI0)
> > > > acpiprt1 at acpi0: bus -1 (RP01)
> > > > acpiprt2 at acpi0: bus -1 (RP02)
> > > > acpiprt3 at acpi0: bus -1 (RP03)
> > > > acpiprt4 at acpi0: bus -1 (RP04)
> > > > acpiprt5 at acpi0: bus -1 (RP05)
> > > > acpiprt6 at acpi0: bus -1 (RP06)
> > > > acpiprt7 at acpi0: bus -1 (RP07)
> > > > acpiprt8 at acpi0: bus 1 (RP08)
> > > > acpiprt9 at acpi0: bus -1 (RP09)
> > > > acpiprt10 at acpi0: bus 2 (RP10)
> > > > acpiprt11 at acpi0: bus -1 (RP11)
> > > > acpiprt12 at acpi0: bus -1 (RP12)
> > > > acpiprt13 at acpi0: bus 7 (RP13)
> > > > acpiprt14 at acpi0: bus -1 (RP14)
> > > > acpiprt15 at acpi0: bus -1 (RP15)
> > > > acpiprt16 at acpi0: bus -1 (RP16)
> > > > acpiprt17 at acpi0: bus -1 (RP17)
> > > > acpiprt18 at acpi0: bus -1 (RP18)
> > > > acpiprt19 at acpi0: bus -1 (RP19)
> > > > acpiprt20 at acpi0: bus -1 (RP20)
> > > > acpiprt21 at acpi0: bus -1 (RP21)
> > > > acpiprt22 at acpi0: bus -1 (RP22)
> > > > acpiprt23 at acpi0: bus -1 (RP23)
> > > > acpiprt24 at acpi0: bus -1 (RP24)
> > > > acpipci0 at acpi0 PCI0: 0x00000010 0x00000011 0x00000000
> > > > "MTC0303" at acpi0 not configured
> > > > "PNP0A05" at acpi0 not configured
> > > > com0 at acpi0 UAR1 addr 0x3f8/0x8 irq 4: ns16550a, 16 byte fifo
> > > > com1 at acpi0 UAR2 addr 0x2f8/0x8 irq 3: ns16550a, 16 byte fifo
> > > > "PNP0A05" at acpi0 not configured
> > > > com3 at acpi0 UAR1 addr 0x2e8/0x8 irq 5: ns16550a, 16 byte fifo
> > > > com3: probed fifo depth: 0 bytes
> > > > "ETD045F" at acpi0 not configured
> > > > "MSFT9001" at acpi0 not configured
> > > > pchgpio0 at acpi0 GPI0 addr 0xfd6e0000/0x10000 0xfd6d0000/0x10000
> > > > 0xfd6a0000/0x10000 irq 14, 320 pins
> > > > "CUST0000" at acpi0 not configured
> > > > "INT3515" at acpi0 not configured
> > > > "ACPI000E" at acpi0 not configured
> > > > "PNP0C14" at acpi0 not configured
> > > > acpiac0 at acpi0: AC unit offline
> > > > acpibat0 at acpi0: BAT0 model "Internal Battery" type Lion oem
> > > > "Generic Charger "
> > > > acpibat1 at acpi0: BAT1 model "Internal Battery" type Lion oem
> > > > "Generic Charger "
> > > > acpibtn0 at acpi0: LID0
> > > > "PNP0C14" at acpi0 not configured
> > > > acpibtn1 at acpi0: SLPB
> > > > "PNP0C14" at acpi0 not configured
> > > > "PNP0C14" at acpi0 not configured
> > > > intelpmc0 at acpi0: PEPD
> > > > state 0: 0x7f:1:2:0x00:0x0000000000000060
> > > > counter: 0x7f:64:0:0x00:0x0000000000000632
> > > > frequency: 0
> > > > state 1: 0x7f:1:2:0x00:0x0000000000000060
> > > > counter: 0x00:32:0:0x03:0x00000000fe00193c
> > > > frequency: 9580
> > > > tpm0 at acpi0 TPM_ 2.0 (TIS) addr 0xfed40000/0x5000, device 0x001b15d1 rev 0x16
> > > > "PNP0C14" at acpi0 not configured
> > > > acpipwrres0 at acpi0: USBC, resource for XDCI
> > > > acpipwrres1 at acpi0: PC05, resource for RP09
> > > > acpipwrres2 at acpi0: V0PR
> > > > acpipwrres3 at acpi0: V1PR
> > > > acpipwrres4 at acpi0: V2PR
> > > > acpipwrres5 at acpi0: WRST
> > > > acpicpu0 at acpi0: C3(200@1034 mwait.1@0x60), C2(200@151
> > > > mwait.1@0x33), C1(1000@1 mwait.1), PSS
> > > > acpicpu1 at acpi0: C3(200@1034 mwait.1@0x60), C2(200@151
> > > > mwait.1@0x33), C1(1000@1 mwait.1), PSS
> > > > acpicpu2 at acpi0: C3(200@1034 mwait.1@0x60), C2(200@151
> > > > mwait.1@0x33), C1(1000@1 mwait.1), PSS
> > > > acpicpu3 at acpi0: C3(200@1034 mwait.1@0x60), C2(200@151
> > > > mwait.1@0x33), C1(1000@1 mwait.1), PSS
> > > > acpicpu4 at acpi0: C3(200@1034 mwait.1@0x60), C2(200@151
> > > > mwait.1@0x33), C1(1000@1 mwait.1), PSS
> > > > acpicpu5 at acpi0: C3(200@1034 mwait.1@0x60), C2(200@151
> > > > mwait.1@0x33), C1(1000@1 mwait.1), PSS
> > > > acpicpu6 at acpi0: C3(200@1034 mwait.1@0x60), C2(200@151
> > > > mwait.1@0x33), C1(1000@1 mwait.1), PSS
> > > > acpicpu7 at acpi0: C3(200@1034 mwait.1@0x60), C2(200@151
> > > > mwait.1@0x33), C1(1000@1 mwait.1), PSS
> > > > acpitz0 at acpi0: critical temperature is 99 degC
> > > > acpipwrres6 at acpi0: PIN_
> > > > acpivideo0 at acpi0: GFX0
> > > > acpivout0 at acpivideo0: DD1F
> > > > cpu0: Enhanced SpeedStep 1547 MHz: speeds: 2101, 2100, 2000, 1900,
> > > > 1700, 1600, 1500, 1400, 1200, 1100, 1000, 800, 700, 600, 500, 400 MHz
> > > > pci0 at mainbus0 bus 0
> > > > pchb0 at pci0 dev 0 function 0 "Intel Core 10G Host" rev 0x0c
> > > > inteldrm0 at pci0 dev 2 function 0 "Intel UHD Graphics" rev 0x02
> > > > drm0 at inteldrm0
> > > > inteldrm0: msi, COMETLAKE, gen 9
> > > > pchtemp0 at pci0 dev 18 function 0 "Intel 400 Series Thermal" rev 0x00
> > > > "Intel 400 Series ISH" rev 0x00 at pci0 dev 19 function 0 not configured
> > > > xhci0 at pci0 dev 20 function 0 "Intel 400 Series xHCI" rev 0x00: msi, xHCI 1.10
> > > > usb0 at xhci0: USB revision 3.0
> > > > uhub0 at usb0 configuration 1 interface 0 "Intel xHCI root hub" rev
> > > > 3.00/1.00 addr 1
> > > > "Intel 400 Series Shared SRAM" rev 0x00 at pci0 dev 20 function 2 not configured
> > > > dwiic0 at pci0 dev 21 function 0 "Intel 400 Series I2C" rev 0x00: apic 2 int 16
> > > > iic0 at dwiic0
> > > > dwiic1 at pci0 dev 21 function 1 "Intel 400 Series I2C" rev 0x00: apic 2 int 17
> > > > iic1 at dwiic1
> > > > ihidev0 at iic1 addr 0x2a gpio 103, vendor 0xeef product 0xc002, CUST0000
> > > > ihidev0: 24 report ids
> > > > ims0 at ihidev0 reportid 1: 3 buttons
> > > > wsmouse0 at ims0 mux 0
> > > > hid at ihidev0 reportid 3 not configured
> > > > hid at ihidev0 reportid 5 not configured
> > > > hid at ihidev0 reportid 7 not configured
> > > > ims1 at ihidev0 reportid 24: 1 button, tip
> > > > wsmouse1 at ims1 mux 0
> > > > dwiic2 at pci0 dev 21 function 2 "Intel 400 Series I2C" rev 0x00: apic 2 int 18
> > > > iic2 at dwiic2
> > > > "INT3515" at iic2 addr 0x23 not configured
> > > > "Intel 400 Series MEI" rev 0x00 at pci0 dev 22 function 0 not configured
> > > > ahci0 at pci0 dev 23 function 0 "Intel 400 Series AHCI" rev 0x00: msi,
> > > > AHCI 1.3.1
> > > > ahci0: PHY offline on port 0
> > > > ahci0: PHY offline on port 1
> > > > scsibus1 at ahci0: 32 targets
> > > > ppb0 at pci0 dev 28 function 0 "Intel 400 Series PCIE" rev 0xf0: msi
> > > > pci1 at ppb0 bus 1
> > > > iwx0 at pci1 dev 0 function 0 "Intel Wi-Fi 6 AX200" rev 0x1a, msix
> > > > ppb1 at pci0 dev 29 function 0 "Intel 400 Series PCIE" rev 0xf0: msi
> > > > pci2 at ppb1 bus 2
> > > > ppb2 at pci0 dev 29 function 4 "Intel 400 Series PCIE" rev 0xf0: msi
> > > > pci3 at ppb2 bus 7
> > > > nvme0 at pci3 dev 0 function 0 "Samsung PM9C1 NVMe" rev 0x00: msix, NVMe 2.0
> > > > nvme0: Samsung SSD 990 PRO 1TB, firmware 4B2QJXD7, serial S6Z2NU0X554555D
> > > > scsibus2 at nvme0: 2 targets, initiator 0
> > > > sd0 at scsibus2 targ 1 lun 0: <NVMe, Samsung SSD 990, 4B2Q>
> > > > sd0: 953869MB, 512 bytes/sector, 1953525168 sectors
> > > > pcib0 at pci0 dev 31 function 0 "Intel 400 Series LPC" rev 0x00
> > > > azalia0 at pci0 dev 31 function 3 "Intel 400 Series HD Audio" rev 0x00: msi
> > > > azalia0: codecs: Realtek ALC268, Intel/0x280b, using Realtek ALC268
> > > > audio0 at azalia0
> > > > ichiic0 at pci0 dev 31 function 4 "Intel 400 Series SMBus" rev 0x00:
> > > > apic 2 int 16
> > > > iic3 at ichiic0
> > > > spdmem0 at iic3 addr 0x50: 32GB DDR4 SDRAM PC4-25600 SO-DIMM
> > > > spdmem1 at iic3 addr 0x52: 32GB DDR4 SDRAM PC4-25600 SO-DIMM
> > > > "Intel 400 Series SPI" rev 0x00 at pci0 dev 31 function 5 not configured
> > > > em0 at pci0 dev 31 function 6 "Intel I219-LM" rev 0x00: msi, address
> > > > 00:22:20:3e:a3:52
> > > > isa0 at pcib0
> > > > isadma0 at isa0
> > > > pckbc0 at isa0 port 0x60/5 irq 1 irq 12
> > > > pckbd0 at pckbc0 (kbd slot)
> > > > wskbd0 at pckbd0: console keyboard
> > > > pms0 at pckbc0 (aux slot)
> > > > wsmouse2 at pms0 mux 0
> > > > pms0: Elantech Touchpad, version 4, firmware 0x5e0f01
> > > > pcppi0 at isa0 port 0x61
> > > > spkr0 at pcppi0
> > > > vmm0 at mainbus0: VMX/EPT
> > > > efifb at mainbus0 not configured
> > > > uhub1 at uhub0 port 8 configuration 1 interface 0 "Genesys Logic
> > > > USB2.0 Hub" rev 2.00/60.90 addr 2
> > > > ugen0 at uhub1 port 1 "Generic EMV Smartcard Reader" rev 2.01/1.20 addr 3
> > > > uvideo0 at uhub0 port 9 configuration 1 interface 0 "SunplusIT Inc
> > > > Full HD Camera" rev 2.01/1.10 addr 4
> > > > video0 at uvideo0
> > > > vscsi0 at root
> > > > scsibus3 at vscsi0: 256 targets
> > > > softraid0 at root
> > > > scsibus4 at softraid0: 256 targets
> > > > sd1 at scsibus4 targ 1 lun 0: <OPENBSD, SR CRYPTO, 006>
> > > > sd1: 953609MB, 512 bytes/sector, 1952992063 sectors
> > > > root on sd1a (81e11568a3f5b815.a) swap on sd1b dump on sd1b
> > > > inteldrm0: 1920x1080, 32bpp
> > > > wsdisplay0 at inteldrm0 mux 1: console (std, vt100 emulation), using wskbd0
> > > > wsdisplay0: screen 1-5 added (std, vt100 emulation)
> > > > iwx0: hw rev 0x340, fw 77.a20fb07d.0, address e0:2e:0b:92:0b:08