[tpm2] Re: Installing on FreeBSD?
John Connett <jrc at skylon.me.uk> Tue, 05 Apr 2022 19:50:02 +0100
| Newsgroups | dev.linux.lists.tpm2 |
|---|---|
| Message-ID | <[email protected]> |
On 05/04/2022 19:20, Tadeusz Struk wrote:
> On 4/5/22 10:03, John Connett wrote:
>> It's ths one! I added a printf to output the value of "timeout" at:
>> https://github.com/freebsd/freebsd-src/blob/main/sys/dev/tpm/tpm_crb.c#L259
>>
>>
>> It counts down until timeout <= 0 (in steps of 10000) then ENXIO is
>> returned.
>>
>> I've had a quick look at:
>> https://trustedcomputinggroup.org/wp-content/uploads/Mobile-Command-Response-Buffer-Interface-v2-r12-Specification_FINAL2.pdf
>>
>>
>> If polling isn't working perhaps interrupt control or some other form
>> of notification is required?
>
> I don't think CRB interface requires irq, in my case no interrupt is
> registered:
Similar here:
# vmstat -i
interrupt total rate
cpu0:timer 103066 13
cpu1:timer 72551 9
cpu0:hyperv 19225 3
cpu1:hyperv 1850 0
Total 196692 26
> Is there anything I could dig out of the control structures that would
> help identify the problem?
>
> Not sure, must be something specific to the windows hyper-V TPM.
> I'm running freeBSD13.0 on top of Linux KVM and crb-tpm2.0 and it's
> working fine.
> You may want to compare the ACPI tables to see what's missing. Here
> what I have:
I have:
...
/*
TPM2: Length=52, Revision=3, Checksum=236,
OEMID=VRTUAL, OEM Table ID=VTPM, OEM Revision=0x1,
Creator ID=MSFT, Creator Revision=0x1
ControlArea=fed40000
StartMethod=7
*/
...
/*
* Intel ACPI Component Architecture
* AML/ASL+ Disassembler version 20210930 (64-bit version)
* Copyright (c) 2000 - 2021 Intel Corporation
*
* Disassembling to symbolic ASL+ operators
*
* Disassembly of /tmp/acpidump.61CEQi/acpdump.din, Tue Apr 5 19:23:27
2022
*
* Original Table Header:
* Signature "DSDT"
* Length 0x0001E184 (123268)
* Revision 0x02
* Checksum 0x3A
* OEM ID "MSFTVM"
* OEM Table ID "DSDT01"
* OEM Revision 0x00000001 (1)
* Compiler ID "MSFT"
* Compiler Version 0x05000000 (83886080)
*/
DefinitionBlock ("", "DSDT", 2, "MSFTVM", "DSDT01", 0x00000001)
{
OperationRegion (BIOS, SystemMemory, 0xF7FD9000, 0xFF)
Field (BIOS, ByteAcc, NoLock, Preserve)
{
MG2B, 32,
MG2L, 32,
HMIB, 32,
HMIL, 32,
GCAL, 32,
GCAH, 32,
PCNT, 32,
NVDA, 32,
SCFG, 8,
TCFG, 8,
PCFG, 8,
HCFG, 8,
NCFG, 8,
BCFG, 8,
SGXE, 8,
PADE, 8,
NCNT, 16
}
...
If ((TCFG > Zero))
{
Device (\_SB.VMOD.TPM2)
{
Name (_ADR, Zero) // _ADR: Address
Name (_HID, "VTPM0101") // _HID: Hardware ID
Name (_CID, "MSFT0101" /* TPM 2.0 Security Device */) //
_CID: Compatible ID
Name (_UID, One) // _UID: Unique ID
Name (_DDN, "Microsoft Virtual TPM 2.0") // _DDN: DOS
Device Name
Name (_STR, Unicode ("Microsoft Virtual TPM 2.0")) //
_STR: Description String
Name (_CRS, ResourceTemplate () // _CRS: Current Resource
Settings
{
Memory32Fixed (ReadWrite,
0xFED40000, // Address Base
0x00001000, // Address Length
)
})
Method (_STA, 0, NotSerialized) // _STA: Status
{
Return (0x0F)
}
OperationRegion (GIO, SystemIO, 0x1040, 0x08)
Field (GIO, DWordAcc, NoLock, Preserve)
{
CTLP, 32,
DATP, 32
}
Method (TPPI, 2, Serialized)
{
Name (PKG2, Package (0x02)
{
Zero,
Zero
})
Name (PKG3, Package (0x03)
{
Zero,
Zero,
Zero
})
While (One)
{
Name (_T_0, 0x00) // _T_x: Emitted by ASL
Compiler, x=0-9, A-Z
_T_0 = ToInteger (Arg0)
If ((_T_0 == Zero))
{
Return (Buffer (0x02)
{
0xFF,
0x01 // ..
})
}
ElseIf ((_T_0 == One))
{
Return ("1.3")
}
ElseIf ((_T_0 == 0x02))
{
Return (0x03)
}
ElseIf ((_T_0 == 0x03))
{
CTLP = 0x03
PKG2 [Zero] = Zero
PKG2 [One] = DATP /* \_SB_.VMOD.TPM2.DATP */
Return (PKG2) /* \_SB_.VMOD.TPM2.TPPI.PKG2 */
}
ElseIf ((_T_0 == 0x04))
{
Return (0x02)
}
ElseIf ((_T_0 == 0x05))
{
CTLP = 0x05
PKG3 [One] = DATP /* \_SB_.VMOD.TPM2.DATP */
CTLP = 0x06
PKG3 [0x02] = DATP /* \_SB_.VMOD.TPM2.DATP */
PKG3 [Zero] = Zero
Return (PKG3) /* \_SB_.VMOD.TPM2.TPPI.PKG3 */
}
ElseIf ((_T_0 == 0x06))
{
Return (0x03)
}
ElseIf ((_T_0 == 0x07))
{
CTLP = 0x07
DATP = DerefOf (Arg1 [Zero])
Return (DATP) /* \_SB_.VMOD.TPM2.DATP */
}
ElseIf ((_T_0 == 0x08))
{
CTLP = 0x08
DATP = DerefOf (Arg1 [Zero])
Return (DATP) /* \_SB_.VMOD.TPM2.DATP */
}
Break
}
Return (One)
}
Method (TMCI, 2, Serialized)
{
While (One)
{
Name (_T_0, 0x00) // _T_x: Emitted by ASL
Compiler, x=0-9, A-Z
_T_0 = ToInteger (Arg0)
If ((_T_0 == Zero))
{
Return (Buffer (One)
{
0x03 // .
})
}
ElseIf ((_T_0 == One))
{
BADR = 0x31
BDAT = DerefOf (Arg1 [Zero])
Return (BDAT) /* \_SB_.BDAT */
}
Break
}
Return (One)
}
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
If ((Arg0 == ToUUID
("3dddfaa6-361b-4eb4-a424-8d10089d1653") /* Physical Presence Interface */))
{
Return (TPPI (Arg2, Arg3))
}
If ((Arg0 == ToUUID
("376054ed-cc13-4675-901c-4756d7f2d45d") /* Unknown UUID */))
{
Return (TMCI (Arg2, Arg3))
}
Return (Buffer (One)
{
0x00 // .
})
}
}
}
...
OpenPGP_0x8F3115112EB8DB54.asc
(application/pgp-keys, 2.1 KB)
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 rA== =DCrz -----END PGP PUBLIC KEY BLOCK-----
OpenPGP_signature.sig
(application/pgp-signature, 495 B) - not displayed