Ok, I think I've found the problem... If I force in 'src/drivers/pc80/tpm/tis.c'
the path value to "\_SB_.PCI0.LIBR" it works!
Now, I'll try to guess from where the "_SB._SB.LIBR" current value comes from... but now it's working.
Thanks!
Changes I've made:
static void lpc_tpm_fill_ssdt(struct device *dev) { const char *path = acpi_device_path(dev->bus->dev); u32 arg; /* if (!path) { path = "\_SB_.PCI0.LPCB"; printk(BIOS_DEBUG, "Using default TPM ACPI path: '%s'\n", path); } */ path = "\_SB_.PCI0.LIBR"; printk(BIOS_DEBUG, "Using TPM ACPI path: '%s'\n", path);
________________________________ De: coreboot coreboot-bounces@coreboot.org en nombre de Jorge Fernandez Monteagudo jorgefm@cirsa.com Enviado: viernes, 29 de junio de 2018 11:37:43 Para: Nico Huber; coreboot@coreboot.org; Zaolin Asunto: Re: [coreboot] RV: Error booting with TPM enabled.
Hi!
Booting with acpi=noirq I can run the kernel and the dmesg show the next errors:
[ 0.040912] ACPI: Added _OSI(Module Device) [ 0.040912] ACPI: Added _OSI(Processor Device) [ 0.040912] ACPI: Added _OSI(3.0 _SCP Extensions) [ 0.040912] ACPI: Added _OSI(Processor Aggregator Device) [ 0.040912] ACPI: Added _OSI(Linux-Dell-Video) [ 0.041885] ACPI BIOS Error (bug): Failure looking up [_SB.*SB.LIBR], AE_NOT_FOUND (20180313/dswload2-160) [ 0.044008] ACPI Error: AE_NOT_FOUND, During name lookup/catalog (20180313/psobject-220) [ 0.044059] ACPI Error: Method parse/execution failed , AE_NOT_FOUND (20180313/psparse-516) [ 0.045344] ACPI Error: Invalid zero thread count in method (20180313/dsmethod-760) [ 0.045395] ACPI Error: Invalid OwnerId: 0x00 (20180313/utownerid-156) [ 0.045448] ACPI Error: AE_NOT_FOUND, (SSDT:COREBOOT) while loading table (20180313/tbxfload-197) [ 0.051635] ACPI Error: 1 table load failures, 3 successful (20180313/tbxfload-215) [ 0.054040] ACPI: Interpreter enabled [ 0.054100] ACPI: (supports S0 S1 S4 S5) [ 0.054144] ACPI: Using PIC for interrupt routing [ 0.054203] HEST: Table parsing has been initialized. [ 0.054249] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug [ 0.054443] ACPI: Enabled 8 GPEs in block 00 to 1F [ 0.054857] ACPI BIOS Error (bug): Failure looking up [_SB.PCI0._CRS.TOM1], AE_NOT_FOUND (20180313/psargs-330) [ 0.054914] ACPI Error: Method parse/execution failed _SB.PCI0._CRS, AE_NOT_FOUND (20180313/psparse-516) [ 0.057653] ACPI BIOS Error (bug): Failure looking up [_SB.PCI0._CRS.TOM1], AE_NOT_FOUND (20180313/psargs-330) [ 0.057711] ACPI Error: Method parse/execution failed _SB.PCI0._CRS, AE_NOT_FOUND (20180313/psparse-516) [ 0.057770] acpi PNP0A08:00: [Firmware Bug]: no secondary bus range in _CRS [ 0.057823] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff]) [ 0.057873] acpi PNP0A08:00: _OSC: OS supports [ExtendedConfig ASPM ClockPM Segments MSI] [ 0.058009] acpi PNP0A08:00: _OSC: OS now controls [PCIeHotplug PME AER PCIeCapability] [ 0.058083] ACPI BIOS Error (bug): Failure looking up [_SB.PCI0._CRS.TOM1], AE_NOT_FOUND (20180313/psargs-330) [ 0.058138] ACPI Error: Method parse/execution failed _SB.PCI0._CRS, AE_NOT_FOUND (20180313/psparse-516) [ 0.058194] acpi PNP0A08:00: failed to parse _CRS method, error code -5 [ 0.058240] acpi PNP0A08:00: Bus 0000:00 not present in PCI namespace [ 0.058329] ACPI: IRQ 3 override to edge, high [ 0.058428] ACPI: IRQ 4 override to edge, high [ 0.058527] PCI: setting IRQ 5 as level-triggered [ 0.058580] ACPI: IRQ 7 override to edge, high [ 0.058675] ACPI: IRQ 11 override to edge, high [ 0.058770] ACPI: IRQ 10 override to edge, high
Now, I'll try to patch the kernel to show all the symbols parsed...
Any hint is welcome!
Regards
________________________________ De: coreboot coreboot-bounces@coreboot.org en nombre de Jorge Fernandez Monteagudo jorgefm@cirsa.com Enviado: jueves, 28 de junio de 2018 9:36:15 Para: Nico Huber; coreboot@coreboot.org; Zaolin Asunto: Re: [coreboot] RV: Error booting with TPM enabled.
Hi!
I'm still trying to boot the linux kernel when the TPM is enabled...
Background: the TPM driver calls acpi_device_path() which walks the devicetree hierarchy up and asks every device for its acpi_name(). If you look at your devicetree, there is above your TPM, the `device pci 14.3` (LIBR), then `device domain 0` (PCI0) and finally an implicit root device (_SB_). The latter is hardcoded for all of coreboot.
Now this acpi_name() has one peculiarity: When one device doesn't have this function, its parent's acpi_name() function is queried. That is why the acpi_name() implementations don't just `return "...";` but check for what device they were called, first.
I can see the TPM is initialized ok
agesawrapper_amdinitenv() returned AGESA_SUCCESS TPM initialization. TPM: Init Found TPM SLB9660 TT 1.2 by Infineon TPM: Open TPM: Startup TPM: command 0x99 returned 0x0 TPM: OK. Timestamp - end of romstage: 7155473845
Lately, when the ACPI table is written I can see:
ACPI: Writing ACPI tables at 8fdc6000. ACPI: * FACS ACPI: * DSDT ACPI: * FADT pm_base: 0x0800 ACPI: added table 1/32, length now 40 ACPI: * SSDT CBFS: 'Master Header Locator' located CBFS at [200:7fffc0) CBFS: Locating 'pci1002,9874.rom' CBFS: Found @ offset b7e00 size fc00 Mapping PCI device 10029874 to 10029870 In CBFS, ROM address for PCI: 00:01.0 = ff8b8048 PCI expansion ROM, signature 0xaa55, INIT size 0xfc00, data ptr 0x01c0 PCI ROM image, vendor ID 1002, device ID 9870, PCI ROM image, Class Code 030000, Code Type 00 PCI: 00:01.0: Missing ACPI scope _SB._SB.LIBR.TPM: LPC TPM PNP: 0c31.0 ACPI: added table 2/32, length now 44 ACPI: * MCFG ACPI: * TCPA TCPA log created at 8fdb6000 ACPI: added table 3/32, length now 48 ACPI: * MADT ACPI: added table 4/32, length now 52 current = 8fdc8050 CBFS: 'Master Header Locator' located CBFS at [200:7fffc0) CBFS: Locating 'pci1002,9874.rom' CBFS: Found @ offset b7e00 size fc00 Mapping PCI device 10029874 to 10029870 In CBFS, ROM address for PCI: 00:01.0 = ff8b8048 PCI expansion ROM, signature 0xaa55, INIT size 0xfc00, data ptr 0x01c0 PCI ROM image, vendor ID 1002, device ID 9870, PCI ROM image, Class Code 030000, Code Type 00 ACPI: * VFCT at 8fdc8050 Copying initialized VBIOS image from 000c0000 ACPI: added table 5/32, length now 56 ACPI: * HPET ACPI: added table 6/32, length now 60 ACPI: added table 7/32, length now 64 ACPI: * IVRS at 8fdd7d28 AGESA IVRS table NULL. Skipping. ACPI: * SRAT at 8fdd7d28 AGESA SRAT table NULL. Skipping. ACPI: * SLIT at 8fdd7d28 AGESA SLIT table NULL. Skipping. ACPI: * AGESA ALIB SSDT at 8fdd7d30 ACPI: added table 8/32, length now 68 ACPI: * SSDT at 8fde0470 ACPI: added table 9/32, length now 72 ACPI: * SSDT for PState at 8fde0cc4 ACPI: done. ACPI tables: 109776 bytes. smbios_write_tables: 8fdb5000
Where the path to TPM is:
_SB._SB.LIBR.TPM: LPC TPM PNP: 0c31.0
It seems all ok for coreboot (device detected, initialized, no error messages, etc) but the linux kernel complains...
Is there some tool to analyze the ACPI table from coreboot to extract paths or anything relevant in order to know
what it's not working?
The names returned have to match the names in the static ACPI tables. See your board's `dsdt.asl` and what it includes.
My board's dsdt.asl is the src/mainboard/amd/bettong/dsdt.asl from repository. I'm using that board to
do my testing, if you should take a look.
Attached is the trace log I get from coreboot.
Thanks for your help!
Jorge
________________________________ De: Nico Huber nico.h@gmx.de Enviado: sábado, 23 de junio de 2018 12:28:05 Para: Jorge Fernandez Monteagudo; coreboot@coreboot.org; Zaolin Asunto: Re: [coreboot] RV: Error booting with TPM enabled.
On 23.06.2018 07:58, Jorge Fernandez Monteagudo wrote:
I guess it's used, but you need an acpi name for all devices along the path. "LIBR" is the name for the LPC device, there should also be one for the PCI bus/domain. I would try `src/northbridge/amd/pi/00660F01/ northbridge.c`.
Could you point me to an example to know what I have to look for, p.e, to a good supported board or something related. I'm still introducing me in the coreboot world :)
Didn't use a TPM with coreboot so far, so I don't know full working examples (but there are some, I'm sure).
Regarding the domain, the code for 00730F01 looks like what I had in mind: `src/northbridge/amd/pi/00730F01/northbridge.c:813`.
Background: the TPM driver calls acpi_device_path() which walks the devicetree hierarchy up and asks every device for its acpi_name(). If you look at your devicetree, there is above your TPM, the `device pci 14.3` (LIBR), then `device domain 0` (PCI0) and finally an implicit root device (_SB_). The latter is hardcoded for all of coreboot.
Now this acpi_name() has one peculiarity: When one device doesn't have this function, its parent's acpi_name() function is queried. That is why the acpi_name() implementations don't just `return "...";` but check for what device they were called, first.
The names returned have to match the names in the static ACPI tables. See your board's `dsdt.asl` and what it includes.
Nico