• Matthew Garrett's avatar
    tpm_crb: Add support for CRB devices based on Pluton · 4d273288
    Matthew Garrett authored
    Pluton is an integrated security processor present in some recent Ryzen
    parts. If it's enabled, it presents two devices - an MSFT0101 ACPI device
    that's broadly an implementation of a Command Response Buffer TPM2, and an
    MSFT0200 ACPI device whose functionality I haven't examined in detail yet.
    This patch only attempts to add support for the TPM device.
    
    There's a few things that need to be handled here. The first is that the
    TPM2 ACPI table uses a previously undefined start method identifier. The
    table format appears to include 16 bytes of startup data, which corresponds
    to one 64-bit address for a start message and one 64-bit address for a
    completion response. The second is that the ACPI tables on the Thinkpad Z13
    I'm testing this on don't define any memory windows in _CRS (or, more
    accurately, there are two empty memory windows). This check doesn't seem
    strictly necessary, so I've skipped that.
    
    Finally, it seems like chip needs to be explicitly asked to transition into
    ready status on every command. Failing to do this means that if two
    commands are sent in succession without an idle/ready transition in
    between, everything will appear to work fine but the response is simply the
    original command. I'm working without any docs here, so I'm not sure if
    this is actually the required behaviour or if I'm missing something
    somewhere else, but doing this results in the chip working reliably.
    Reviewed-by: default avatarJarkko Sakkinen <jarkko@kernel.org>
    Signed-off-by: default avatarMatthew Garrett <mjg59@srcf.ucam.org>
    Signed-off-by: default avatarJarkko Sakkinen <jarkko@kernel.org>
    4d273288
tpm_crb.c 20.3 KB