[Bug 236513] HP Thin clients T620/T730 ACPI: Only CPU core 0 detects C2 state

bugzilla-noreply at freebsd.org bugzilla-noreply at freebsd.org
Thu Mar 28 06:46:19 UTC 2019


https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236513

--- Comment #32 from stockhausen at collogia.de ---
Thanks for the helpful discussion. I think I'm getting a better knowledge about
it all. Reading across the AMD documents I think everything works as expected.
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 developer
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 at 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 = 1.
- Register = MSRC001_0073[CstateAddr] + 1.
- Type = 2.
- Latency = 400. 
- Power = 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 = 6.
- Revision = 0.
- Domain = CPUID Fn0000_0001_EBX[LocalApicId[7:1]].
- CoordType = FEh. (HW_ALL)
- NumProcessors = 2.
- Index = 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 address
range from MSRC001_0073[CstateAddr] to MSRC001_0073[CstateAddr]+7 is consumed
by the host bridge.

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

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 allocation
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?

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


More information about the freebsd-bugs mailing list