Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 28 Mar 2019 06:46:16 +0000
From:      bugzilla-noreply@freebsd.org
To:        bugs@FreeBSD.org
Subject:   [Bug 236513] HP Thin clients T620/T730 ACPI:  Only CPU core 0 detects C2 state
Message-ID:  <bug-236513-227-TDlegGMLJv@https.bugs.freebsd.org/bugzilla/>
In-Reply-To: <bug-236513-227@https.bugs.freebsd.org/bugzilla/>
References:  <bug-236513-227@https.bugs.freebsd.org/bugzilla/>

next in thread | previous in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D236513

--- Comment #32 from stockhausen@collogia.de ---
Thanks for the helpful discussion. I think I'm getting a better knowledge a=
bout
it all. Reading across the AMD documents I think everything works as expect=
ed.
Or at least quite close.

Comparing the T620 plus and the T730 I noticed that the C2 state port is
different. 0x1771 and not 0x414. Reason is simple - this port is arbitrary =
set
by BIOS. Explanation comes from the AMD family 0x15 models 0x30-0x03F devel=
oper
guide 2.5.3.2.7 BIOS Requirements for Initialization:

1. Initialize MSRC001_0073[CstateAddr] with an available IO address. See
2.5.3.2.6.3 [_CRS].

-> HP chose port 0x1770 for the T730 and 0x413 for the T620 as can be seen =
from
cpucontrol output
root@freebsd:~ # cpucontrol -m 0xC0010073 /dev/cpuctl0
MSR 0xc0010073: 0x00000000 0x00001770

2. Initialize D18F4x11[C:8].

-> I don't know how to read that indexed register

3. Generate ACPI objects as follows
3.a The _CST object should be generated for each core as follows:
- Count =3D 1.
- Register =3D MSRC001_0073[CstateAddr] + 1.
- Type =3D 2.
- Latency =3D 400.=20
- Power =3D 0.

-> We can see that in the decoded ACPI dump
   ResourceTemplate ()
   {
     Register (SystemIO,
               0x08,               // Bit Width
               0x00,               // Bit Offset
               0x0000000000001771, // Address
               0x01,               // Access Size
              )
   },


3.b The _CSD object should be generated for each core as follows:
- NumberOfEntries =3D 6.
- Revision =3D 0.
- Domain =3D CPUID Fn0000_0001_EBX[LocalApicId[7:1]].
- CoordType =3D FEh. (HW_ALL)
- NumProcessors =3D 2.
- Index =3D 0.

-> Also inside the ACPI dump
   Name (_CSD, Package (0x01)  // _CSD: C-State Dependencies
   {
     Package (0x06)
     {
       0x06,
       0x00,
       0x00000000,
       0x000000FE,
       0x00000002,
       0x00000000
     }
   })

3.b BIOS must declare in the root host bridge _CRS object that the IO addre=
ss
range from MSRC001_0073[CstateAddr] to MSRC001_0073[CstateAddr]+7 is consum=
ed
by the host bridge.

-> This is missing in the ACPI tables. We need an entry for 8 ports starting
from 0x1770.=20

4. Fixed ACPI Description Table (FADT) Entries

-> Should not bee neded as FreeBSD is hopefully ACPI 2.0 aware and can read=
 the
_CST object from above.

So two question remain

A. Is the current ACPI code able to compensate for the missing port allocat=
ion
ranges in BIOS? If you say yes we have found an error.

B. My stupid fix may be totally wrong. Where should I place the port
registration in the ACPI tables?

--=20
You are receiving this mail because:
You are the assignee for the bug.=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-236513-227-TDlegGMLJv>