mirror of
https://github.com/torvalds/linux.git
synced 2026-05-05 23:05:25 -04:00
Merge tag 'optee-bus-for-v5.9' of git://git.linaro.org/people/jens.wiklander/linux-tee into arm/drivers
Enable multi-stage OP-TEE bus enumeration Probes drivers on the OP-TEE bus in two steps. First for drivers which do not depend on tee-supplicant. After tee-supplicant has been started probe the devices which do depend on tee-supplicant. Also introduces driver which uses an OP-TEE based fTPM Trusted Application depends on tee-supplicant NV RAM implementation based on RPMB secure storage. * tag 'optee-bus-for-v5.9' of git://git.linaro.org/people/jens.wiklander/linux-tee: tpm_ftpm_tee: register driver on TEE bus optee: enable support for multi-stage bus enumeration optee: use uuid for sysfs driver entry Link: https://lore.kernel.org/r/20200710085230.GA1312913@jade Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
@@ -214,11 +214,10 @@ static int ftpm_tee_match(struct tee_ioctl_version_data *ver, const void *data)
|
||||
* Return:
|
||||
* On success, 0. On failure, -errno.
|
||||
*/
|
||||
static int ftpm_tee_probe(struct platform_device *pdev)
|
||||
static int ftpm_tee_probe(struct device *dev)
|
||||
{
|
||||
int rc;
|
||||
struct tpm_chip *chip;
|
||||
struct device *dev = &pdev->dev;
|
||||
struct ftpm_tee_private *pvt_data = NULL;
|
||||
struct tee_ioctl_open_session_arg sess_arg;
|
||||
|
||||
@@ -297,6 +296,13 @@ out_tee_session:
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int ftpm_plat_tee_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct device *dev = &pdev->dev;
|
||||
|
||||
return ftpm_tee_probe(dev);
|
||||
}
|
||||
|
||||
/**
|
||||
* ftpm_tee_remove() - remove the TPM device
|
||||
* @pdev: the platform_device description.
|
||||
@@ -304,9 +310,9 @@ out_tee_session:
|
||||
* Return:
|
||||
* 0 always.
|
||||
*/
|
||||
static int ftpm_tee_remove(struct platform_device *pdev)
|
||||
static int ftpm_tee_remove(struct device *dev)
|
||||
{
|
||||
struct ftpm_tee_private *pvt_data = dev_get_drvdata(&pdev->dev);
|
||||
struct ftpm_tee_private *pvt_data = dev_get_drvdata(dev);
|
||||
|
||||
/* Release the chip */
|
||||
tpm_chip_unregister(pvt_data->chip);
|
||||
@@ -328,11 +334,18 @@ static int ftpm_tee_remove(struct platform_device *pdev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ftpm_plat_tee_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct device *dev = &pdev->dev;
|
||||
|
||||
return ftpm_tee_remove(dev);
|
||||
}
|
||||
|
||||
/**
|
||||
* ftpm_tee_shutdown() - shutdown the TPM device
|
||||
* @pdev: the platform_device description.
|
||||
*/
|
||||
static void ftpm_tee_shutdown(struct platform_device *pdev)
|
||||
static void ftpm_plat_tee_shutdown(struct platform_device *pdev)
|
||||
{
|
||||
struct ftpm_tee_private *pvt_data = dev_get_drvdata(&pdev->dev);
|
||||
|
||||
@@ -347,17 +360,54 @@ static const struct of_device_id of_ftpm_tee_ids[] = {
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, of_ftpm_tee_ids);
|
||||
|
||||
static struct platform_driver ftpm_tee_driver = {
|
||||
static struct platform_driver ftpm_tee_plat_driver = {
|
||||
.driver = {
|
||||
.name = "ftpm-tee",
|
||||
.of_match_table = of_match_ptr(of_ftpm_tee_ids),
|
||||
},
|
||||
.probe = ftpm_tee_probe,
|
||||
.remove = ftpm_tee_remove,
|
||||
.shutdown = ftpm_tee_shutdown,
|
||||
.shutdown = ftpm_plat_tee_shutdown,
|
||||
.probe = ftpm_plat_tee_probe,
|
||||
.remove = ftpm_plat_tee_remove,
|
||||
};
|
||||
|
||||
module_platform_driver(ftpm_tee_driver);
|
||||
/* UUID of the fTPM TA */
|
||||
static const struct tee_client_device_id optee_ftpm_id_table[] = {
|
||||
{UUID_INIT(0xbc50d971, 0xd4c9, 0x42c4,
|
||||
0x82, 0xcb, 0x34, 0x3f, 0xb7, 0xf3, 0x78, 0x96)},
|
||||
{}
|
||||
};
|
||||
|
||||
MODULE_DEVICE_TABLE(tee, optee_ftpm_id_table);
|
||||
|
||||
static struct tee_client_driver ftpm_tee_driver = {
|
||||
.id_table = optee_ftpm_id_table,
|
||||
.driver = {
|
||||
.name = "optee-ftpm",
|
||||
.bus = &tee_bus_type,
|
||||
.probe = ftpm_tee_probe,
|
||||
.remove = ftpm_tee_remove,
|
||||
},
|
||||
};
|
||||
|
||||
static int __init ftpm_mod_init(void)
|
||||
{
|
||||
int rc;
|
||||
|
||||
rc = platform_driver_register(&ftpm_tee_plat_driver);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
return driver_register(&ftpm_tee_driver.driver);
|
||||
}
|
||||
|
||||
static void __exit ftpm_mod_exit(void)
|
||||
{
|
||||
platform_driver_unregister(&ftpm_tee_plat_driver);
|
||||
driver_unregister(&ftpm_tee_driver.driver);
|
||||
}
|
||||
|
||||
module_init(ftpm_mod_init);
|
||||
module_exit(ftpm_mod_exit);
|
||||
|
||||
MODULE_AUTHOR("Thirupathaiah Annapureddy <thiruan@microsoft.com>");
|
||||
MODULE_DESCRIPTION("TPM Driver for fTPM TA in TEE");
|
||||
|
||||
Reference in New Issue
Block a user