Skip to content

Commit e6bea2f

Browse files
committed
Merge tag 'tee-bus-callback-for-6.20' of git://git.kernel.org/pub/scm/linux/kernel/git/jenswi/linux-tee into soc/drivers
TEE bus callback for 6.20 - Move from generic device_driver to TEE bus-specific callbacks - Add module_tee_client_driver() and registration helpers to reduce boilerplate - Convert several client drivers (TPM, KEYS, firmware, EFI, hwrng, and RTC) - Update documentation and fix kernel-doc warnings * tag 'tee-bus-callback-for-6.20' of git://git.kernel.org/pub/scm/linux/kernel/git/jenswi/linux-tee: tpm/tpm_ftpm_tee: Fix kdoc after function renames tpm/tpm_ftpm_tee: Make use of tee bus methods tpm/tpm_ftpm_tee: Make use of tee specific driver registration KEYS: trusted: Make use of tee bus methods KEYS: trusted: Migrate to use tee specific driver registration function firmware: tee_bnxt: Make use of tee bus methods firmware: tee_bnxt: Make use of module_tee_client_driver() firmware: arm_scmi: Make use of tee bus methods firmware: arm_scmi: optee: Make use of module_tee_client_driver() efi: stmm: Make use of tee bus methods efi: stmm: Make use of module_tee_client_driver() hwrng: optee - Make use of tee bus methods hwrng: optee - Make use of module_tee_client_driver() rtc: optee: Make use of tee bus methods rtc: optee: Migrate to use tee specific driver registration function tee: Adapt documentation to cover recent additions tee: Add probe, remove and shutdown bus callbacks to tee_client_driver tee: Add some helpers to reduce boilerplate for tee client drivers Signed-off-by: Arnd Bergmann <arnd@arndb.de>
2 parents 08b67ff + e82d047 commit e6bea2f

10 files changed

Lines changed: 166 additions & 140 deletions

File tree

Documentation/driver-api/tee.rst

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -43,24 +43,12 @@ snippet would look like::
4343
MODULE_DEVICE_TABLE(tee, client_id_table);
4444

4545
static struct tee_client_driver client_driver = {
46+
.probe = client_probe,
47+
.remove = client_remove,
4648
.id_table = client_id_table,
4749
.driver = {
4850
.name = DRIVER_NAME,
49-
.bus = &tee_bus_type,
50-
.probe = client_probe,
51-
.remove = client_remove,
5251
},
5352
};
5453

55-
static int __init client_init(void)
56-
{
57-
return driver_register(&client_driver.driver);
58-
}
59-
60-
static void __exit client_exit(void)
61-
{
62-
driver_unregister(&client_driver.driver);
63-
}
64-
65-
module_init(client_init);
66-
module_exit(client_exit);
54+
module_tee_client_driver(client_driver);

drivers/char/hw_random/optee-rng.c

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -211,9 +211,9 @@ static int optee_ctx_match(struct tee_ioctl_version_data *ver, const void *data)
211211
return 0;
212212
}
213213

214-
static int optee_rng_probe(struct device *dev)
214+
static int optee_rng_probe(struct tee_client_device *rng_device)
215215
{
216-
struct tee_client_device *rng_device = to_tee_client_device(dev);
216+
struct device *dev = &rng_device->dev;
217217
int ret = 0, err = -ENODEV;
218218
struct tee_ioctl_open_session_arg sess_arg;
219219

@@ -261,12 +261,10 @@ static int optee_rng_probe(struct device *dev)
261261
return err;
262262
}
263263

264-
static int optee_rng_remove(struct device *dev)
264+
static void optee_rng_remove(struct tee_client_device *tee_dev)
265265
{
266266
tee_client_close_session(pvt_data.ctx, pvt_data.session_id);
267267
tee_client_close_context(pvt_data.ctx);
268-
269-
return 0;
270268
}
271269

272270
static const struct tee_client_device_id optee_rng_id_table[] = {
@@ -278,27 +276,15 @@ static const struct tee_client_device_id optee_rng_id_table[] = {
278276
MODULE_DEVICE_TABLE(tee, optee_rng_id_table);
279277

280278
static struct tee_client_driver optee_rng_driver = {
279+
.probe = optee_rng_probe,
280+
.remove = optee_rng_remove,
281281
.id_table = optee_rng_id_table,
282282
.driver = {
283283
.name = DRIVER_NAME,
284-
.bus = &tee_bus_type,
285-
.probe = optee_rng_probe,
286-
.remove = optee_rng_remove,
287284
},
288285
};
289286

290-
static int __init optee_rng_mod_init(void)
291-
{
292-
return driver_register(&optee_rng_driver.driver);
293-
}
294-
295-
static void __exit optee_rng_mod_exit(void)
296-
{
297-
driver_unregister(&optee_rng_driver.driver);
298-
}
299-
300-
module_init(optee_rng_mod_init);
301-
module_exit(optee_rng_mod_exit);
287+
module_tee_client_driver(optee_rng_driver);
302288

303289
MODULE_LICENSE("GPL v2");
304290
MODULE_AUTHOR("Sumit Garg <sumit.garg@linaro.org>");

drivers/char/tpm/tpm_ftpm_tee.c

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -163,13 +163,13 @@ static int ftpm_tee_match(struct tee_ioctl_version_data *ver, const void *data)
163163
}
164164

165165
/**
166-
* ftpm_tee_probe() - initialize the fTPM
166+
* ftpm_tee_probe_generic() - initialize the fTPM
167167
* @dev: the device description.
168168
*
169169
* Return:
170170
* On success, 0. On failure, -errno.
171171
*/
172-
static int ftpm_tee_probe(struct device *dev)
172+
static int ftpm_tee_probe_generic(struct device *dev)
173173
{
174174
int rc;
175175
struct tpm_chip *chip;
@@ -251,21 +251,28 @@ static int ftpm_tee_probe(struct device *dev)
251251
return rc;
252252
}
253253

254+
static int ftpm_tee_probe(struct tee_client_device *tcdev)
255+
{
256+
struct device *dev = &tcdev->dev;
257+
258+
return ftpm_tee_probe_generic(dev);
259+
}
260+
254261
static int ftpm_plat_tee_probe(struct platform_device *pdev)
255262
{
256263
struct device *dev = &pdev->dev;
257264

258-
return ftpm_tee_probe(dev);
265+
return ftpm_tee_probe_generic(dev);
259266
}
260267

261268
/**
262-
* ftpm_tee_remove() - remove the TPM device
269+
* ftpm_tee_remove_generic() - remove the TPM device
263270
* @dev: the device description.
264271
*
265272
* Return:
266273
* 0 always.
267274
*/
268-
static int ftpm_tee_remove(struct device *dev)
275+
static void ftpm_tee_remove_generic(struct device *dev)
269276
{
270277
struct ftpm_tee_private *pvt_data = dev_get_drvdata(dev);
271278

@@ -285,15 +292,20 @@ static int ftpm_tee_remove(struct device *dev)
285292
tee_client_close_context(pvt_data->ctx);
286293

287294
/* memory allocated with devm_kzalloc() is freed automatically */
295+
}
288296

289-
return 0;
297+
static void ftpm_tee_remove(struct tee_client_device *tcdev)
298+
{
299+
struct device *dev = &tcdev->dev;
300+
301+
ftpm_tee_remove_generic(dev);
290302
}
291303

292304
static void ftpm_plat_tee_remove(struct platform_device *pdev)
293305
{
294306
struct device *dev = &pdev->dev;
295307

296-
ftpm_tee_remove(dev);
308+
ftpm_tee_remove_generic(dev);
297309
}
298310

299311
/**
@@ -335,12 +347,11 @@ static const struct tee_client_device_id optee_ftpm_id_table[] = {
335347
MODULE_DEVICE_TABLE(tee, optee_ftpm_id_table);
336348

337349
static struct tee_client_driver ftpm_tee_driver = {
350+
.probe = ftpm_tee_probe,
351+
.remove = ftpm_tee_remove,
338352
.id_table = optee_ftpm_id_table,
339353
.driver = {
340354
.name = "optee-ftpm",
341-
.bus = &tee_bus_type,
342-
.probe = ftpm_tee_probe,
343-
.remove = ftpm_tee_remove,
344355
},
345356
};
346357

@@ -352,7 +363,7 @@ static int __init ftpm_mod_init(void)
352363
if (rc)
353364
return rc;
354365

355-
rc = driver_register(&ftpm_tee_driver.driver);
366+
rc = tee_client_driver_register(&ftpm_tee_driver);
356367
if (rc) {
357368
platform_driver_unregister(&ftpm_tee_plat_driver);
358369
return rc;
@@ -364,7 +375,7 @@ static int __init ftpm_mod_init(void)
364375
static void __exit ftpm_mod_exit(void)
365376
{
366377
platform_driver_unregister(&ftpm_tee_plat_driver);
367-
driver_unregister(&ftpm_tee_driver.driver);
378+
tee_client_driver_unregister(&ftpm_tee_driver);
368379
}
369380

370381
module_init(ftpm_mod_init);

drivers/firmware/arm_scmi/transports/optee.c

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -529,8 +529,9 @@ static const struct of_device_id scmi_of_match[] = {
529529
DEFINE_SCMI_TRANSPORT_DRIVER(scmi_optee, scmi_optee_driver, scmi_optee_desc,
530530
scmi_of_match, core);
531531

532-
static int scmi_optee_service_probe(struct device *dev)
532+
static int scmi_optee_service_probe(struct tee_client_device *scmi_pta)
533533
{
534+
struct device *dev = &scmi_pta->dev;
534535
struct scmi_optee_agent *agent;
535536
struct tee_context *tee_ctx;
536537
int ret;
@@ -578,24 +579,22 @@ static int scmi_optee_service_probe(struct device *dev)
578579
return ret;
579580
}
580581

581-
static int scmi_optee_service_remove(struct device *dev)
582+
static void scmi_optee_service_remove(struct tee_client_device *scmi_pta)
582583
{
583584
struct scmi_optee_agent *agent = scmi_optee_private;
584585

585586
if (!scmi_optee_private)
586-
return -EINVAL;
587+
return;
587588

588589
platform_driver_unregister(&scmi_optee_driver);
589590

590591
if (!list_empty(&scmi_optee_private->channel_list))
591-
return -EBUSY;
592+
return;
592593

593594
/* Ensure cleared reference is visible before resources are released */
594595
smp_store_mb(scmi_optee_private, NULL);
595596

596597
tee_client_close_context(agent->tee_ctx);
597-
598-
return 0;
599598
}
600599

601600
static const struct tee_client_device_id scmi_optee_service_id[] = {
@@ -609,26 +608,15 @@ static const struct tee_client_device_id scmi_optee_service_id[] = {
609608
MODULE_DEVICE_TABLE(tee, scmi_optee_service_id);
610609

611610
static struct tee_client_driver scmi_optee_service_driver = {
612-
.id_table = scmi_optee_service_id,
613-
.driver = {
611+
.probe = scmi_optee_service_probe,
612+
.remove = scmi_optee_service_remove,
613+
.id_table = scmi_optee_service_id,
614+
.driver = {
614615
.name = "scmi-optee",
615-
.bus = &tee_bus_type,
616-
.probe = scmi_optee_service_probe,
617-
.remove = scmi_optee_service_remove,
618616
},
619617
};
620618

621-
static int __init scmi_transport_optee_init(void)
622-
{
623-
return driver_register(&scmi_optee_service_driver.driver);
624-
}
625-
module_init(scmi_transport_optee_init);
626-
627-
static void __exit scmi_transport_optee_exit(void)
628-
{
629-
driver_unregister(&scmi_optee_service_driver.driver);
630-
}
631-
module_exit(scmi_transport_optee_exit);
619+
module_tee_client_driver(scmi_optee_service_driver);
632620

633621
MODULE_AUTHOR("Etienne Carriere <etienne.carriere@foss.st.com>");
634622
MODULE_DESCRIPTION("SCMI OPTEE Transport driver");

drivers/firmware/broadcom/tee_bnxt_fw.c

Lines changed: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -181,9 +181,9 @@ static int optee_ctx_match(struct tee_ioctl_version_data *ver, const void *data)
181181
return (ver->impl_id == TEE_IMPL_ID_OPTEE);
182182
}
183183

184-
static int tee_bnxt_fw_probe(struct device *dev)
184+
static int tee_bnxt_fw_probe(struct tee_client_device *bnxt_device)
185185
{
186-
struct tee_client_device *bnxt_device = to_tee_client_device(dev);
186+
struct device *dev = &bnxt_device->dev;
187187
int ret, err = -ENODEV;
188188
struct tee_ioctl_open_session_arg sess_arg;
189189
struct tee_shm *fw_shm_pool;
@@ -231,17 +231,15 @@ static int tee_bnxt_fw_probe(struct device *dev)
231231
return err;
232232
}
233233

234-
static int tee_bnxt_fw_remove(struct device *dev)
234+
static void tee_bnxt_fw_remove(struct tee_client_device *bnxt_device)
235235
{
236236
tee_shm_free(pvt_data.fw_shm_pool);
237237
tee_client_close_session(pvt_data.ctx, pvt_data.session_id);
238238
tee_client_close_context(pvt_data.ctx);
239239
pvt_data.ctx = NULL;
240-
241-
return 0;
242240
}
243241

244-
static void tee_bnxt_fw_shutdown(struct device *dev)
242+
static void tee_bnxt_fw_shutdown(struct tee_client_device *bnxt_device)
245243
{
246244
tee_shm_free(pvt_data.fw_shm_pool);
247245
tee_client_close_session(pvt_data.ctx, pvt_data.session_id);
@@ -258,28 +256,16 @@ static const struct tee_client_device_id tee_bnxt_fw_id_table[] = {
258256
MODULE_DEVICE_TABLE(tee, tee_bnxt_fw_id_table);
259257

260258
static struct tee_client_driver tee_bnxt_fw_driver = {
259+
.probe = tee_bnxt_fw_probe,
260+
.remove = tee_bnxt_fw_remove,
261+
.shutdown = tee_bnxt_fw_shutdown,
261262
.id_table = tee_bnxt_fw_id_table,
262263
.driver = {
263264
.name = KBUILD_MODNAME,
264-
.bus = &tee_bus_type,
265-
.probe = tee_bnxt_fw_probe,
266-
.remove = tee_bnxt_fw_remove,
267-
.shutdown = tee_bnxt_fw_shutdown,
268265
},
269266
};
270267

271-
static int __init tee_bnxt_fw_mod_init(void)
272-
{
273-
return driver_register(&tee_bnxt_fw_driver.driver);
274-
}
275-
276-
static void __exit tee_bnxt_fw_mod_exit(void)
277-
{
278-
driver_unregister(&tee_bnxt_fw_driver.driver);
279-
}
280-
281-
module_init(tee_bnxt_fw_mod_init);
282-
module_exit(tee_bnxt_fw_mod_exit);
268+
module_tee_client_driver(tee_bnxt_fw_driver);
283269

284270
MODULE_AUTHOR("Vikas Gupta <vikas.gupta@broadcom.com>");
285271
MODULE_DESCRIPTION("Broadcom bnxt firmware manager");

drivers/firmware/efi/stmm/tee_stmm_efi.c

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -520,8 +520,9 @@ static void tee_stmm_restore_efivars_generic_ops(void)
520520
efivars_generic_ops_register();
521521
}
522522

523-
static int tee_stmm_efi_probe(struct device *dev)
523+
static int tee_stmm_efi_probe(struct tee_client_device *tee_dev)
524524
{
525+
struct device *dev = &tee_dev->dev;
525526
struct tee_ioctl_open_session_arg sess_arg;
526527
efi_status_t ret;
527528
int rc;
@@ -571,37 +572,23 @@ static int tee_stmm_efi_probe(struct device *dev)
571572
return 0;
572573
}
573574

574-
static int tee_stmm_efi_remove(struct device *dev)
575+
static void tee_stmm_efi_remove(struct tee_client_device *dev)
575576
{
576577
tee_stmm_restore_efivars_generic_ops();
577-
578-
return 0;
579578
}
580579

581580
MODULE_DEVICE_TABLE(tee, tee_stmm_efi_id_table);
582581

583582
static struct tee_client_driver tee_stmm_efi_driver = {
584583
.id_table = tee_stmm_efi_id_table,
584+
.probe = tee_stmm_efi_probe,
585+
.remove = tee_stmm_efi_remove,
585586
.driver = {
586587
.name = "tee-stmm-efi",
587-
.bus = &tee_bus_type,
588-
.probe = tee_stmm_efi_probe,
589-
.remove = tee_stmm_efi_remove,
590588
},
591589
};
592590

593-
static int __init tee_stmm_efi_mod_init(void)
594-
{
595-
return driver_register(&tee_stmm_efi_driver.driver);
596-
}
597-
598-
static void __exit tee_stmm_efi_mod_exit(void)
599-
{
600-
driver_unregister(&tee_stmm_efi_driver.driver);
601-
}
602-
603-
module_init(tee_stmm_efi_mod_init);
604-
module_exit(tee_stmm_efi_mod_exit);
591+
module_tee_client_driver(tee_stmm_efi_driver);
605592

606593
MODULE_LICENSE("GPL");
607594
MODULE_AUTHOR("Ilias Apalodimas <ilias.apalodimas@linaro.org>");

0 commit comments

Comments
 (0)