/ 详情

[openEuler 21.03]在arm64服务器上无法识别TPM设备

Done
Bug
Opened this issue  
2021-05-11 11:38

【标题描述】在20.03LTS和20.09都能正确识别TPM设备的环境下,安装21.03后无法识别TPM设备。
【环境信息】
硬件信息:
1) taishan 2280, NTZ SPI TPM
软件信息:
1) OS版本:21.03
2) 内核版本:5.10.0-4.17.0.28
如果有特殊组网,请提供网络拓扑图
【问题复现步骤】
系统启动后执行:ls /dev/tpm*
未发现任何TPM设备
出现概率:必现
【预期结果】
ls /dev/tpm*
输出 /dev/tpm0 /dev/tpmrm0
【实际结果】
无输出
【附件信息】

Attachments

Comments (3)

gwei3 created缺陷
gwei3 set milestone to openEuler-21.03
gwei3 set priority to Main
gwei3 set related repository to openEuler/kernel
gwei3 set assignee to zhengzengkai
展开全部操作日志

提供一些额外的信息如下:

  1. 通过添加一些打印输出,可以发现tpm_tis_spi_probe函数根本没调用到。增加如下所示补丁后该函数可以被调用到。
diff --git a/drivers/char/tpm/tpm_tis_spi_main.c b/drivers/char/tpm/tpm_tis_spi_main.c
index 3856f6ebcb34..8d9972407e6b 100644
--- a/drivers/char/tpm/tpm_tis_spi_main.c
+++ b/drivers/char/tpm/tpm_tis_spi_main.c
@@ -261,6 +273,7 @@ static int tpm_tis_spi_remove(struct spi_device *dev)
 
 static const struct spi_device_id tpm_tis_spi_id[] = {
 	{ "tpm_tis_spi", (unsigned long)tpm_tis_spi_probe },
+	{ "SMO0768", (unsigned long)tpm_tis_spi_probe },
 	{ "cr50", (unsigned long)cr50_spi_probe },
 	{}
 };
  1. 之后碰到的问题就是会在如下流程中出错:
tpm_tis_spi_driver_probe
->tpm_tis_spi_probe (这一步需要在tpm_tis_spi_id数组中添加“{ "SMO0768", (unsigned 
long)tpm_tis_spi_probe },”以后才能触发。)
->tpm_tis_spi_init
->tpm_tis_core_init
->wait_startup
->tpm_tis_read8
->tpm_tis_spi_read_bytes
->tpm_tis_spi_transfer
->tpm_tis_spi_flow_control
	return -ETIMEDOUT
  1. 通过添加一些打印语句可以发现在SPI-master与spi tpm的通信过程中,tpm侧应该是没响应。对比openEuler4.19内核中的spi_set_cs片选相关代码,可以识别到通过ACPI发现的SPI子系统片选信号使用了gpio。
    在4.19中spi.c:spi_set_cs()使用gpio_set_value()直接对gpio管脚进行操作;
    但在openEuler5.10内核中改为使用gpiod_set_value_cansleep()对gpio_desc结构进行操作。
  2. 通过调试代码在5.10的spi.c:spi_set_cs()中改为使用gpio_set_value()对硬编码的gpio片选管脚进行操作后,能够在启动后看到预期的/dev/tpm*设备。
  3. 以上调测仅证明了5.10中spi子系统中与tpm相关的片选功能存在问题。尚需进一步调查找到最终的问题点后再来制定实用的解决方案。

21.03分支合入如下补丁解决:
4d9ba48afe4653 spi: Assume GPIO CS active high in ACPI case

zhengzengkai changed issue state from 待办的 to 已完成

注意:如使用NTZ SPI TPM, BIOS需在ACPI表中的Device (TPM)中的_CID节点中上报对应Compatible Device ID,如SMO0768,并在_DSD节点中上报"tpm_tis_spi"字段

Sign in to comment

Status
Assignees
Projects
Milestones
Pull Requests
Successfully merging a pull request will close this issue.
Branches
Planed to start   -   Planed to end
-
Top level
Priority
Duration (hours)
Confirm
参与者(2)