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_recv() - retrieve fTPM response.
41 * On failure, -errno.
45 struct ftpm_tee_private *pvt_data = dev_get_drvdata(chip->dev.parent); in ftpm_tee_tpm_op_recv()
48 len = pvt_data->resp_len; in ftpm_tee_tpm_op_recv()
50 dev_err(&chip->dev, in ftpm_tee_tpm_op_recv()
53 return -EIO; in ftpm_tee_tpm_op_recv()
56 memcpy(buf, pvt_data->resp_buf, len); in ftpm_tee_tpm_op_recv()
57 pvt_data->resp_len = 0; in ftpm_tee_tpm_op_recv()
63 * ftpm_tee_tpm_op_send() - send TPM commands through the TEE shared memory.
70 * On failure, -errno
74 struct ftpm_tee_private *pvt_data = dev_get_drvdata(chip->dev.parent); in ftpm_tee_tpm_op_send()
81 struct tee_shm *shm = pvt_data->shm; in ftpm_tee_tpm_op_send()
84 dev_err(&chip->dev, in ftpm_tee_tpm_op_send()
87 return -EIO; in ftpm_tee_tpm_op_send()
92 pvt_data->resp_len = 0; in ftpm_tee_tpm_op_send()
97 .session = pvt_data->session, in ftpm_tee_tpm_op_send()
113 dev_err(&chip->dev, "%s: tee_shm_get_va failed for transmit\n", in ftpm_tee_tpm_op_send()
129 rc = tee_client_invoke_func(pvt_data->ctx, &transceive_args, in ftpm_tee_tpm_op_send()
132 dev_err(&chip->dev, "%s: SUBMIT_COMMAND invoke error: 0x%x\n", in ftpm_tee_tpm_op_send()
139 dev_err(&chip->dev, "%s: tee_shm_get_va failed for receive\n", in ftpm_tee_tpm_op_send()
145 resp_len = be32_to_cpu(resp_header->length); in ftpm_tee_tpm_op_send()
149 dev_err(&chip->dev, "%s: tpm response header too small\n", in ftpm_tee_tpm_op_send()
151 return -EIO; in ftpm_tee_tpm_op_send()
154 dev_err(&chip->dev, in ftpm_tee_tpm_op_send()
157 return -EIO; in ftpm_tee_tpm_op_send()
161 memcpy(pvt_data->resp_buf, temp_buf, resp_len); in ftpm_tee_tpm_op_send()
162 pvt_data->resp_len = resp_len; in ftpm_tee_tpm_op_send()
202 if ((ver->impl_id == TEE_IMPL_ID_OPTEE) && in ftpm_tee_match()
203 (ver->gen_caps & TEE_GEN_CAP_GP)) in ftpm_tee_match()
210 * ftpm_tee_probe() - initialize the fTPM
214 * On success, 0. On failure, -errno.
226 return -ENOMEM; in ftpm_tee_probe()
231 pvt_data->ctx = tee_client_open_context(NULL, ftpm_tee_match, NULL, in ftpm_tee_probe()
233 if (IS_ERR(pvt_data->ctx)) { in ftpm_tee_probe()
234 if (PTR_ERR(pvt_data->ctx) == -ENOENT) in ftpm_tee_probe()
235 return -EPROBE_DEFER; in ftpm_tee_probe()
237 return PTR_ERR(pvt_data->ctx); in ftpm_tee_probe()
246 rc = tee_client_open_session(pvt_data->ctx, &sess_arg, NULL); in ftpm_tee_probe()
250 rc = -EINVAL; in ftpm_tee_probe()
253 pvt_data->session = sess_arg.session; in ftpm_tee_probe()
256 pvt_data->shm = tee_shm_alloc_kernel_buf(pvt_data->ctx, in ftpm_tee_probe()
259 if (IS_ERR(pvt_data->shm)) { in ftpm_tee_probe()
261 rc = -ENOMEM; in ftpm_tee_probe()
273 pvt_data->chip = chip; in ftpm_tee_probe()
274 pvt_data->chip->flags |= TPM_CHIP_FLAG_TPM2; in ftpm_tee_probe()
277 rc = tpm_chip_register(pvt_data->chip); in ftpm_tee_probe()
287 put_device(&pvt_data->chip->dev); in ftpm_tee_probe()
289 tee_shm_free(pvt_data->shm); in ftpm_tee_probe()
291 tee_client_close_session(pvt_data->ctx, pvt_data->session); in ftpm_tee_probe()
293 tee_client_close_context(pvt_data->ctx); in ftpm_tee_probe()
300 struct device *dev = &pdev->dev; in ftpm_plat_tee_probe()
306 * ftpm_tee_remove() - remove the TPM device
317 tpm_chip_unregister(pvt_data->chip); in ftpm_tee_remove()
320 put_device(&pvt_data->chip->dev); in ftpm_tee_remove()
323 tee_shm_free(pvt_data->shm); in ftpm_tee_remove()
326 tee_client_close_session(pvt_data->ctx, pvt_data->session); in ftpm_tee_remove()
329 tee_client_close_context(pvt_data->ctx); in ftpm_tee_remove()
338 struct device *dev = &pdev->dev; in ftpm_plat_tee_remove()
344 * ftpm_plat_tee_shutdown() - shutdown the TPM device
349 struct ftpm_tee_private *pvt_data = dev_get_drvdata(&pdev->dev); in ftpm_plat_tee_shutdown()
351 tee_shm_free(pvt_data->shm); in ftpm_plat_tee_shutdown()
352 tee_client_close_session(pvt_data->ctx, pvt_data->session); in ftpm_plat_tee_shutdown()
353 tee_client_close_context(pvt_data->ctx); in ftpm_plat_tee_shutdown()
364 .name = "ftpm-tee",
384 .name = "optee-ftpm",