Lines Matching +full:arm32 +full:- +full:firmwaretpm
1 // SPDX-License-Identifier: GPL-2.0
6 * https://www.microsoft.com/en-us/research/publication/ftpm-software-implementation-tpm-chip/
9 * https://github.com/microsoft/ms-tpm-20-ref/tree/master/Samples/ARM32-FirmwareTPM/optee_ta/fTPM
23 * TA_FTPM_UUID: BC50D971-D4C9-42C4-82CB-343FB7F37896
27 …* https://github.com/microsoft/ms-tpm-20-ref/blob/master/Samples/ARM32-FirmwareTPM/optee_ta/fTPM/i…
34 * ftpm_tee_tpm_op_send() - send TPM commands through the TEE shared memory
43 * On failure, -errno
48 struct ftpm_tee_private *pvt_data = dev_get_drvdata(chip->dev.parent); in ftpm_tee_tpm_op_send()
55 struct tee_shm *shm = pvt_data->shm; in ftpm_tee_tpm_op_send()
58 dev_err(&chip->dev, in ftpm_tee_tpm_op_send()
61 return -EIO; in ftpm_tee_tpm_op_send()
70 .session = pvt_data->session, in ftpm_tee_tpm_op_send()
86 dev_err(&chip->dev, "%s: tee_shm_get_va failed for transmit\n", in ftpm_tee_tpm_op_send()
102 rc = tee_client_invoke_func(pvt_data->ctx, &transceive_args, in ftpm_tee_tpm_op_send()
105 dev_err(&chip->dev, "%s: SUBMIT_COMMAND invoke error: 0x%x\n", in ftpm_tee_tpm_op_send()
112 dev_err(&chip->dev, "%s: tee_shm_get_va failed for receive\n", in ftpm_tee_tpm_op_send()
118 resp_len = be32_to_cpu(resp_header->length); in ftpm_tee_tpm_op_send()
122 dev_err(&chip->dev, "%s: tpm response header too small\n", in ftpm_tee_tpm_op_send()
124 return -EIO; in ftpm_tee_tpm_op_send()
127 dev_err(&chip->dev, in ftpm_tee_tpm_op_send()
130 return -EIO; in ftpm_tee_tpm_op_send()
133 dev_err(&chip->dev, in ftpm_tee_tpm_op_send()
136 return -EIO; in ftpm_tee_tpm_op_send()
158 if ((ver->impl_id == TEE_IMPL_ID_OPTEE) && in ftpm_tee_match()
159 (ver->gen_caps & TEE_GEN_CAP_GP)) in ftpm_tee_match()
166 * ftpm_tee_probe() - initialize the fTPM
170 * On success, 0. On failure, -errno.
182 return -ENOMEM; in ftpm_tee_probe()
187 pvt_data->ctx = tee_client_open_context(NULL, ftpm_tee_match, NULL, in ftpm_tee_probe()
189 if (IS_ERR(pvt_data->ctx)) { in ftpm_tee_probe()
190 if (PTR_ERR(pvt_data->ctx) == -ENOENT) in ftpm_tee_probe()
191 return -EPROBE_DEFER; in ftpm_tee_probe()
193 return PTR_ERR(pvt_data->ctx); in ftpm_tee_probe()
202 rc = tee_client_open_session(pvt_data->ctx, &sess_arg, NULL); in ftpm_tee_probe()
206 rc = -EINVAL; in ftpm_tee_probe()
209 pvt_data->session = sess_arg.session; in ftpm_tee_probe()
212 pvt_data->shm = tee_shm_alloc_kernel_buf(pvt_data->ctx, in ftpm_tee_probe()
215 if (IS_ERR(pvt_data->shm)) { in ftpm_tee_probe()
217 rc = -ENOMEM; in ftpm_tee_probe()
229 pvt_data->chip = chip; in ftpm_tee_probe()
230 pvt_data->chip->flags |= TPM_CHIP_FLAG_TPM2 | TPM_CHIP_FLAG_SYNC; in ftpm_tee_probe()
233 rc = tpm_chip_register(pvt_data->chip); in ftpm_tee_probe()
243 put_device(&pvt_data->chip->dev); in ftpm_tee_probe()
245 tee_shm_free(pvt_data->shm); in ftpm_tee_probe()
247 tee_client_close_session(pvt_data->ctx, pvt_data->session); in ftpm_tee_probe()
249 tee_client_close_context(pvt_data->ctx); in ftpm_tee_probe()
256 struct device *dev = &pdev->dev; in ftpm_plat_tee_probe()
262 * ftpm_tee_remove() - remove the TPM device
273 tpm_chip_unregister(pvt_data->chip); in ftpm_tee_remove()
276 put_device(&pvt_data->chip->dev); in ftpm_tee_remove()
279 tee_shm_free(pvt_data->shm); in ftpm_tee_remove()
282 tee_client_close_session(pvt_data->ctx, pvt_data->session); in ftpm_tee_remove()
285 tee_client_close_context(pvt_data->ctx); in ftpm_tee_remove()
294 struct device *dev = &pdev->dev; in ftpm_plat_tee_remove()
300 * ftpm_plat_tee_shutdown() - shutdown the TPM device
305 struct ftpm_tee_private *pvt_data = dev_get_drvdata(&pdev->dev); in ftpm_plat_tee_shutdown()
307 tee_shm_free(pvt_data->shm); in ftpm_plat_tee_shutdown()
308 tee_client_close_session(pvt_data->ctx, pvt_data->session); in ftpm_plat_tee_shutdown()
309 tee_client_close_context(pvt_data->ctx); in ftpm_plat_tee_shutdown()
320 .name = "ftpm-tee",
340 .name = "optee-ftpm",