Re: tpm for AMD Ryzen
- In reply to: Enji Cooper : "Re: tpm for AMD Ryzen"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 28 Jun 2023 12:52:01 UTC
On 19/06/2023 19:57, Enji Cooper wrote:
>
>> On Jun 19, 2023, at 11:09 AM, Johannes Totz <jo@bruelltuete.com> wrote:
>>
>> Hi everyone,
>>
>> I'm trying to get the (f)TPM that comes with AMD's Zen2 to work.
>> BIOS config screen says it's doing CRB mode.
>>
>> So I start poking in tpm_crb.c https://github.com/freebsd/freebsd-src/blob/main/sys/dev/tpm/tpm_crb.c
>>
>> Out of the box, it does not attach. The TPM2 ACPI table says its start method is 2 (aka ACPI). That's easy to hack around, just mess with the if-condition at https://github.com/freebsd/freebsd-src/blob/main/sys/dev/tpm/tpm_crb.c#L115
>>
>> With that adjusted, tpmcrb now probes successfully but does not attach.
>>
>> As far as I can tell the register values it tries to read from the ACPI-provided memory window are just bogus.
>>
>> That makes me suspect that the BIOS has misconfigured it. The TPM2 table has a different address than what's reported at runtime.
>> The table says 0xfd210510 is the (physical) address, but acpi says it's 0xbd13f000.
>>
>> Fiddling about with hint.tpmcrb.0.maddr and friends does not yield anything fruitful: anything I try to override with hints is just ignored.
>> Hacking in a
>> bus_set_resource(dev, SYS_RES_MEMORY, ... 0xfd210510 ...);
>> ends up giving me that override but still no dice re actual tpm functionality.
>>
>> Has anyone gotten the tpm to work on (consumer) Ryzen?
>
> Hi Johannes,
> I just built a Ryzen machine too with an ASUS Motherboard. Could you please post the hack that you did to the if-else statement up on gist so I can take a look at it?
Just chop out the the tbl->StartMethod condition at
https://github.com/freebsd/freebsd-src/blob/main/sys/dev/tpm/tpm_crb.c#L116.
For probing and attach you don't need the start method (as far as I
understand the spec).
You can check with 'acpidump -t | grep -A 5 TPM' what your start method is.
Mine is:
TPM2: Length=76, Revision=4, Checksum=183,
OEMID=ALASKA, OEM Table ID=A M I, OEM Revision=0x1,
Creator ID=AMI, Creator Revision=0x0
ControlArea=fd210510
StartMethod=2
> Also, if you can post "boot -v” and “pciconf -lv” output to separate gists, that would be super helpful :).
verbose boot is inconvenient.
Here's pciconf:
hostb0@pci0:0:0:0: class=0x060000 rev=0x00 hdr=0x00 vendor=0x1022
device=0x1480 subvendor=0x1022 subdevice=0x1480
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = 'Starship/Matisse Root Complex'
class = bridge
subclass = HOST-PCI
hostb1@pci0:0:1:0: class=0x060000 rev=0x00 hdr=0x00 vendor=0x1022
device=0x1482 subvendor=0x0000 subdevice=0x0000
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = 'Starship/Matisse PCIe Dummy Host Bridge'
class = bridge
subclass = HOST-PCI
pcib1@pci0:0:1:1: class=0x060400 rev=0x00 hdr=0x01 vendor=0x1022
device=0x1483 subvendor=0x1022 subdevice=0x1234
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = 'Starship/Matisse GPP Bridge'
class = bridge
subclass = PCI-PCI
hostb2@pci0:0:2:0: class=0x060000 rev=0x00 hdr=0x00 vendor=0x1022
device=0x1482 subvendor=0x0000 subdevice=0x0000
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = 'Starship/Matisse PCIe Dummy Host Bridge'
class = bridge
subclass = HOST-PCI
hostb3@pci0:0:3:0: class=0x060000 rev=0x00 hdr=0x00 vendor=0x1022
device=0x1482 subvendor=0x0000 subdevice=0x0000
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = 'Starship/Matisse PCIe Dummy Host Bridge'
class = bridge
subclass = HOST-PCI
hostb4@pci0:0:4:0: class=0x060000 rev=0x00 hdr=0x00 vendor=0x1022
device=0x1482 subvendor=0x0000 subdevice=0x0000
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = 'Starship/Matisse PCIe Dummy Host Bridge'
class = bridge
subclass = HOST-PCI
hostb5@pci0:0:5:0: class=0x060000 rev=0x00 hdr=0x00 vendor=0x1022
device=0x1482 subvendor=0x0000 subdevice=0x0000
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = 'Starship/Matisse PCIe Dummy Host Bridge'
class = bridge
subclass = HOST-PCI
hostb6@pci0:0:7:0: class=0x060000 rev=0x00 hdr=0x00 vendor=0x1022
device=0x1482 subvendor=0x0000 subdevice=0x0000
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = 'Starship/Matisse PCIe Dummy Host Bridge'
class = bridge
subclass = HOST-PCI
pcib11@pci0:0:7:1: class=0x060400 rev=0x00 hdr=0x01 vendor=0x1022
device=0x1484 subvendor=0x1022 subdevice=0x1484
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = 'Starship/Matisse Internal PCIe GPP Bridge 0 to bus[E:B]'
class = bridge
subclass = PCI-PCI
hostb7@pci0:0:8:0: class=0x060000 rev=0x00 hdr=0x00 vendor=0x1022
device=0x1482 subvendor=0x0000 subdevice=0x0000
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = 'Starship/Matisse PCIe Dummy Host Bridge'
class = bridge
subclass = HOST-PCI
pcib12@pci0:0:8:1: class=0x060400 rev=0x00 hdr=0x01 vendor=0x1022
device=0x1484 subvendor=0x1022 subdevice=0x1484
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = 'Starship/Matisse Internal PCIe GPP Bridge 0 to bus[E:B]'
class = bridge
subclass = PCI-PCI
intsmb0@pci0:0:20:0: class=0x0c0500 rev=0x61 hdr=0x00 vendor=0x1022
device=0x790b subvendor=0x1565 subdevice=0x370b
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = 'FCH SMBus Controller'
class = serial bus
subclass = SMBus
isab0@pci0:0:20:3: class=0x060100 rev=0x51 hdr=0x00 vendor=0x1022
device=0x790e subvendor=0x1565 subdevice=0x370b
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = 'FCH LPC Bridge'
class = bridge
subclass = PCI-ISA
hostb8@pci0:0:24:0: class=0x060000 rev=0x00 hdr=0x00 vendor=0x1022
device=0x1440 subvendor=0x0000 subdevice=0x0000
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = 'Matisse/Vermeer Data Fabric: Device 18h; Function 0'
class = bridge
subclass = HOST-PCI
hostb9@pci0:0:24:1: class=0x060000 rev=0x00 hdr=0x00 vendor=0x1022
device=0x1441 subvendor=0x0000 subdevice=0x0000
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = 'Matisse/Vermeer Data Fabric: Device 18h; Function 1'
class = bridge
subclass = HOST-PCI
hostb10@pci0:0:24:2: class=0x060000 rev=0x00 hdr=0x00 vendor=0x1022
device=0x1442 subvendor=0x0000 subdevice=0x0000
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = 'Matisse/Vermeer Data Fabric: Device 18h; Function 2'
class = bridge
subclass = HOST-PCI
hostb11@pci0:0:24:3: class=0x060000 rev=0x00 hdr=0x00 vendor=0x1022
device=0x1443 subvendor=0x0000 subdevice=0x0000
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = 'Matisse/Vermeer Data Fabric: Device 18h; Function 3'
class = bridge
subclass = HOST-PCI
hostb12@pci0:0:24:4: class=0x060000 rev=0x00 hdr=0x00 vendor=0x1022
device=0x1444 subvendor=0x0000 subdevice=0x0000
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = 'Matisse/Vermeer Data Fabric: Device 18h; Function 4'
class = bridge
subclass = HOST-PCI
hostb13@pci0:0:24:5: class=0x060000 rev=0x00 hdr=0x00 vendor=0x1022
device=0x1445 subvendor=0x0000 subdevice=0x0000
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = 'Matisse/Vermeer Data Fabric: Device 18h; Function 5'
class = bridge
subclass = HOST-PCI
hostb14@pci0:0:24:6: class=0x060000 rev=0x00 hdr=0x00 vendor=0x1022
device=0x1446 subvendor=0x0000 subdevice=0x0000
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = 'Matisse/Vermeer Data Fabric: Device 18h; Function 6'
class = bridge
subclass = HOST-PCI
hostb15@pci0:0:24:7: class=0x060000 rev=0x00 hdr=0x00 vendor=0x1022
device=0x1447 subvendor=0x0000 subdevice=0x0000
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = 'Matisse/Vermeer Data Fabric: Device 18h; Function 7'
class = bridge
subclass = HOST-PCI
none0@pci0:1:0:0: class=0x0c0330 rev=0x01 hdr=0x00 vendor=0x1022
device=0x43d0 subvendor=0x1b21 subdevice=0x1142
vendor = 'Advanced Micro Devices, Inc. [AMD]'
class = serial bus
subclass = USB
ahci0@pci0:1:0:1: class=0x010601 rev=0x01 hdr=0x00 vendor=0x1022
device=0x43c8 subvendor=0x1b21 subdevice=0x1062
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = '400 Series Chipset SATA Controller'
class = mass storage
subclass = SATA
pcib2@pci0:1:0:2: class=0x060400 rev=0x01 hdr=0x01 vendor=0x1022
device=0x43c6 subvendor=0x1b21 subdevice=0x0201
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = '400 Series Chipset PCIe Bridge'
class = bridge
subclass = PCI-PCI
pcib3@pci0:2:0:0: class=0x060400 rev=0x01 hdr=0x01 vendor=0x1022
device=0x43c7 subvendor=0x1b21 subdevice=0x3306
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = '400 Series Chipset PCIe Port'
class = bridge
subclass = PCI-PCI
pcib4@pci0:2:1:0: class=0x060400 rev=0x01 hdr=0x01 vendor=0x1022
device=0x43c7 subvendor=0x1b21 subdevice=0x3306
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = '400 Series Chipset PCIe Port'
class = bridge
subclass = PCI-PCI
pcib5@pci0:2:2:0: class=0x060400 rev=0x01 hdr=0x01 vendor=0x1022
device=0x43c7 subvendor=0x1b21 subdevice=0x3306
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = '400 Series Chipset PCIe Port'
class = bridge
subclass = PCI-PCI
pcib6@pci0:2:3:0: class=0x060400 rev=0x01 hdr=0x01 vendor=0x1022
device=0x43c7 subvendor=0x1b21 subdevice=0x3306
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = '400 Series Chipset PCIe Port'
class = bridge
subclass = PCI-PCI
pcib7@pci0:2:4:0: class=0x060400 rev=0x01 hdr=0x01 vendor=0x1022
device=0x43c7 subvendor=0x1b21 subdevice=0x3306
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = '400 Series Chipset PCIe Port'
class = bridge
subclass = PCI-PCI
pcib8@pci0:2:5:0: class=0x060400 rev=0x01 hdr=0x01 vendor=0x1022
device=0x43c7 subvendor=0x1b21 subdevice=0x3306
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = '400 Series Chipset PCIe Port'
class = bridge
subclass = PCI-PCI
pcib9@pci0:2:6:0: class=0x060400 rev=0x01 hdr=0x01 vendor=0x1022
device=0x43c7 subvendor=0x1b21 subdevice=0x3306
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = '400 Series Chipset PCIe Port'
class = bridge
subclass = PCI-PCI
pcib10@pci0:2:7:0: class=0x060400 rev=0x01 hdr=0x01 vendor=0x1022
device=0x43c7 subvendor=0x1b21 subdevice=0x3306
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = '400 Series Chipset PCIe Port'
class = bridge
subclass = PCI-PCI
re0@pci0:4:0:0: class=0x020000 rev=0x15 hdr=0x00 vendor=0x10ec
device=0x8168 subvendor=0x1565 subdevice=0x2312
vendor = 'Realtek Semiconductor Co., Ltd.'
device = 'RTL8111/8168/8411 PCI Express Gigabit Ethernet
Controller'
class = network
subclass = ethernet
none1@pci0:11:0:0: class=0x130000 rev=0x00 hdr=0x00 vendor=0x1022
device=0x148a subvendor=0x1022 subdevice=0x148a
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = 'Starship/Matisse PCIe Dummy Function'
class = non-essential instrumentation
none2@pci0:12:0:0: class=0x130000 rev=0x00 hdr=0x00 vendor=0x1022
device=0x1485 subvendor=0x1022 subdevice=0x1485
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = 'Starship/Matisse Reserved SPP'
class = non-essential instrumentation
none3@pci0:12:0:1: class=0x108000 rev=0x00 hdr=0x00 vendor=0x1022
device=0x1486 subvendor=0x1022 subdevice=0x1486
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = 'Starship/Matisse Cryptographic Coprocessor PSPCPP'
class = encrypt/decrypt
none4@pci0:12:0:3: class=0x0c0330 rev=0x00 hdr=0x00 vendor=0x1022
device=0x149c subvendor=0x1565 subdevice=0x370b
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = 'Matisse USB 3.0 Host Controller'
class = serial bus
subclass = USB
none5@pci0:12:0:4: class=0x040300 rev=0x00 hdr=0x00 vendor=0x1022
device=0x1487 subvendor=0x1565 subdevice=0x824c
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = 'Starship/Matisse HD Audio Controller'
class = multimedia
subclass = HDA
> Cheers!
> -Enji