Hi Nico!


I'll give a try to your suggestion!


In 00730F01/northbridge.c I can see:


static const char *domain_acpi_name(const struct device *dev)
{
    if (dev->path.type == DEVICE_PATH_DOMAIN)
        return "PCI0";

    return NULL;
}

static struct device_operations pci_domain_ops = {
    .read_resources      = domain_read_resources,
    .set_resources      = domain_set_resources,
    .enable_resources = domain_enable_resources,
    .init          = NULL,
    .scan_bus      = pci_domain_scan_bus,
    .acpi_name        = domain_acpi_name,
};

and in 00660F01/northbridge.c there is no acpi_name! The most related to the previous one is:


static void northbridge_fill_ssdt_generator(device_t device)
{
    msr_t msr;
    char pscope[] = "\\_SB.PCI0";

    acpigen_write_scope(pscope);
    msr = rdmsr(TOP_MEM);
    acpigen_write_name_dword("TOM1", msr.lo);
    msr = rdmsr(TOP_MEM2);
    /*
     * Since XP only implements parts of ACPI 2.0, we can't use a qword
     * here.
     * See http://www.acpi.info/presentations/S01USMOBS169_OS%2520new.ppt
     * slide 22ff.
     * Shift value right by 20 bit to make it fit into 32bit,
     * giving us 1MB granularity and a limit of almost 4Exabyte of memory.
     */
    acpigen_write_name_dword("TOM2", (msr.hi << 12) | msr.lo >> 20);
    acpigen_pop_len();
}


static struct device_operations northbridge_operations = {
    .read_resources      = read_resources,
    .set_resources      = set_resources,
    .enable_resources = pci_dev_enable_resources,
    .init          = northbridge_init,
    .acpi_fill_ssdt_generator = northbridge_fill_ssdt_generator,
    .write_acpi_tables = agesa_write_acpi_tables,
    .enable          = 0,
    .ops_pci      = 0,
};

On monday I'll try to add the method to 00660F01 code!

Regards!

Jorge


De: Nico Huber <nico.h@gmx.de>
Enviado: viernes, 29 de junio de 2018 15:47:09
Para: Jorge Fernandez Monteagudo; coreboot@coreboot.org; Zaolin
Asunto: Re: [coreboot] RV: Error booting with TPM enabled.
 
On 29.06.2018 12:48, Jorge Fernandez Monteagudo wrote:
> 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.

This is expected if you still haven't implemented `.acpi_name` for
your northbridge device. In case you haven't tried it yet: Just copy
what `nb/amd/pi/00730F01/northbridge.c` does about `.acpi_name` to
`nb/amd/pi/00660F01/northbridge.c`.

Again, if the domain device doesn't implement `.acpi_name`, its parent
device will be asked. And in this case the parent, the root device,
always returns `\_SB`.

Nico