TPM 传输驱动与 RK3588 配置

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
2
CONFIG_TCG_TPM=y
CONFIG_TCG_TIS_I2C_INFINEON=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
2
3
4
5
6
7
8
9
&i2cX {
status = "okay";

tpm@2e {
compatible = "infineon,slb9645tt";
reg = <0x2e>;
/* interrupts/reset/power按芯片binding */
};
};

示意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
2
3
4
5
zcat /proc/config.gz | grep TCG
ls -l /dev/tpm*
dmesg | grep -i tpm
cat /sys/class/tpm/tpm0/tpm_version_major
ls /sys/kernel/security/tpm0 2>/dev/null

进一步使用tpm2_getcaptpm2_pcrread和event log验证,而不是向device node手工写任意字节。

文章互动

阅读 --

留言

0 条留言

正在加载留言…