TPM 传输驱动与 RK3588 配置
1. TIS Core
tpm_tis_core.c实现FIFO接口通用逻辑:
- locality request/release;
- status与burst count;
- FIFO send/recv;
- command ready/go;
- interrupt或polling;
- cancel;
- timeout和quirk。
MMIO、SPI、I2C transport提供寄存器read/write。
2. MMIO TIS
tpm_tis.c支持OF/PNP等TIS FIFO MMIO设备。RK3588若外接I2C/SPI TPM,不使用此路径。
3. SPI
tpm_tis_spi_main.c实现标准SPI PTP framing和wait-state。tpm_tis_spi_cr50.c处理Google Cr50特化。
板级需正确配置:
- SPI mode/frequency;
- CS;
- IRQ;
- reset/power GPIO;
- wake和suspend。
4. I2C
本树包括:
- generic PTP I2C;
- Cr50 I2C;
- Atmel;
- Infineon;
- Nuvoton;
- ST33。
这些协议并非完全可互换。Generic TIS I2C不能替代vendor-specific framing。
5. CRB
tpm_crb.c支持ACPI TPM 2.0 Command Response Buffer,主要用于PC/服务器固件平台。依赖ACPI,通常不是RK3588 DT板路径。
6. Virtual/Firmware TPM
tpm_vtpm_proxy.c:/dev/vtpmx创建userspace后端;- Xen/IBM vTPM frontend;
tpm_ftpm_tee.c:通过OP-TEE访问secure-world fTPM。
fTPM安全取决于TEE、secure storage、anti-rollback和TA实现,不因运行在secure world自动等同离散TPM。
7. RK3588 Defconfig
三份主要Rockchip defconfig显式启用:
1 | CONFIG_TCG_TPM=y |
未显式启用generic TIS I2C、SPI、CRB或fTPM TEE。最终.config仍需检查依赖合并结果。
8. DTS核对
SoC级rk3588s.dtsi没有板载TPM节点。是否存在Infineon I2C TPM取决于具体板级DTS/overlay和硬件BOM。
所以:
- TPM Core编进内核不代表
/dev/tpm0存在; - 选中Infineon driver不代表I2C总线上有chip;
- 必须核对运行DTB和I2C探测日志。
9. Board节点示意
1 | &i2cX { |
示意compatible必须以实际芯片和本树driver match表为准。
10. Probe失败
重点检查:
- I2C address和pull-up;
- 电源/reset timing;
- adapter支持的transaction;
- chip ID;
- locality;
- IRQ polarity;
- polling fallback;
- clock stretching;
- secure firmware是否独占I2C。
11. Suspend/Resume
TPM可能参与suspend measurement、sealed key和hibernation。System suspend前Core执行shutdown相关命令;transport恢复后必须保证chip状态和locality有效。
切断TPM电源可能丢失volatile objects和sessions。
12. 运行验证
1 | zcat /proc/config.gz | grep TCG |
进一步使用tpm2_getcap、tpm2_pcrread和event log验证,而不是向device node手工写任意字节。
正在加载留言…