On Thu, May 21, 2020 at 09:47:43AM +0300, Maxim Uvarov wrote: > Register driver on TEE bus. module tee registers bus, "on the TEE bus" "The module tee" > and module optee calls optee_enumerate_devices() to scan > all devices on the bus. Trusted Application for this driver Looking at drivers/tee, it shows that tee and optee are in fact the same module as opposed to what your commit message says. > can be Early TA's (can be compiled into optee-os). In that > case it will be on OPTEE bus before linux booting. Also > optee-suplicant application is needed to be loaded between > OPTEE module and ftpm module to maintain functionality > for fTPM driver. Why is this needed and why things worked before having this? > Signed-off-by: Maxim Uvarov <maxim.uvarov@xxxxxxxxxx> > Suggested-by: Sumit Garg <sumit.garg@xxxxxxxxxx> > Suggested-by: Arnd Bergmann <arnd@xxxxxxxxxx> > --- > drivers/char/tpm/tpm_ftpm_tee.c | 69 ++++++++++++++++++++++++++++----- > 1 file changed, 59 insertions(+), 10 deletions(-) > > diff --git a/drivers/char/tpm/tpm_ftpm_tee.c b/drivers/char/tpm/tpm_ftpm_tee.c > index 22bf553ccf9d..7bb4ce281050 100644 > --- a/drivers/char/tpm/tpm_ftpm_tee.c > +++ b/drivers/char/tpm/tpm_ftpm_tee.c > @@ -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 @@ static int ftpm_tee_probe(struct platform_device *pdev) > 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 @@ static int ftpm_tee_probe(struct platform_device *pdev) > * 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,53 @@ 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, > +}; > + > +static const struct tee_client_device_id optee_ftpm_id_table[] = { > + {UUID_INIT(0xbc50d971, 0xd4c9, 0x42c4, > + 0x82, 0xcb, 0x34, 0x3f, 0xb7, 0xf3, 0x78, 0x96)}, > + {} Please put a comment describing what this is. > }; > > -module_platform_driver(ftpm_tee_driver); > +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@xxxxxxxxxxxxx>"); > MODULE_DESCRIPTION("TPM Driver for fTPM TA in TEE"); > -- > 2.17.1 > Wondering if MODULE_AUTHOR() is still equired given that the GIT log has objectively better log of authorship. /Jarkko