Received: by 2002:a25:1104:0:0:0:0:0 with SMTP id 4csp535204ybr; Fri, 22 May 2020 12:32:40 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyXGVsNtP3Y5KYgV8rvKL//LiXIYmZ9Ln+/5IG1tUF5im2g5QuCuC2wQezP3JckSpssL/pP X-Received: by 2002:a17:906:705:: with SMTP id y5mr4426883ejb.118.1590175960684; Fri, 22 May 2020 12:32:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1590175960; cv=none; d=google.com; s=arc-20160816; b=xgWMV5eLWhNHPj1EAbMI9qSAgrt74DYrESnC3uWxQ51zQdaqrriVJ+1zniof+NW/Kp znR7jwNpZZADEoz+crxsDW6o5wrQ5iQVVsNLSfRWMVlec3GxZt2fOuENpF4rkhxE/UCb oNm8rEovZsyn2woHDJPGgiChniq5vU6Gjzk01XDud1nYXLwTBAob6+qUQQUjRpLSkL3o JtB49UaDtalD8awgiFj+uAU5e5n+qglHbsicm0R0kPjdYIiKU5tJ0mAgKEURBZN87an/ TImHsyQiPK/Fw1+STZrxsWAMHsxcYNEOnBAjSlzxPz9r5IGECuipsBftvRdkQNisP4Vq ppTA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=JxyDI4KhsqdDlPkuSmkhUHOJKiG6K9Cqyhd9HAyDtUY=; b=EMuZPtP1EiXn82d/JFr0TzzCCHi8X2arxH67QPelqr0iXaTFYQV9g1vloD2W5CNGp9 vH8rFfIhKQniazfwS/9ysOK/rVixJ3Ykq5HS32cMa2au9i0JV2+acepDfiwWmPQgU1jI 6URjW8+/GmuRowHVt5c+slFt4WDOn1UzoTBsg1WzClE6JBMDl4lYPZUJKnGuo8O4xUg5 fvXhtuWyTQdkWmwVSHAM+w3b4lgDUBnaSprGDIM2aKRLNXobX2ZUQgrUKC8keokTjHIW 8zv8LLfCN+R4aqUnq35piz0GofWIfrzRJN2n3jUOkv78Umz7G3ayfYo1zQ+OzYaG6vEi nZug== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=Ai7DHhpi; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id r7si5471206ejr.96.2020.05.22.12.32.16; Fri, 22 May 2020 12:32:40 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=Ai7DHhpi; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730959AbgEVT35 (ORCPT + 99 others); Fri, 22 May 2020 15:29:57 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44280 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730866AbgEVT34 (ORCPT ); Fri, 22 May 2020 15:29:56 -0400 Received: from mail-yb1-xb41.google.com (mail-yb1-xb41.google.com [IPv6:2607:f8b0:4864:20::b41]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 67E97C061A0E for ; Fri, 22 May 2020 12:29:56 -0700 (PDT) Received: by mail-yb1-xb41.google.com with SMTP id a10so5160787ybc.3 for ; Fri, 22 May 2020 12:29:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=JxyDI4KhsqdDlPkuSmkhUHOJKiG6K9Cqyhd9HAyDtUY=; b=Ai7DHhpie7RQugUd57wRx/wM4CE24dLCXDX6vSinkbgPGRZ1iRkg56WJ59+7Lf5q7s 47+7CVGsUoJrwJYBHC2UkcGz2VXmUYNCU59OYg4HdWifIyLSZ1YIrq5io/DJjv0S0JO/ O3tq3pcFLg42X8AXWbpA8Dz5qfsJbADa/XlCzTCbeQ+hw7srne74lQyUu4N7ruEGemMg i1er2cLnV76zGpQD2X/cXN9zerh2Ow4ojTl4GdFWnnawqREKt4aeSihpE/dgqtQ8OJQQ Ywr5qWk7bgML66b2EnxJi7Zt9KHzga1thrw2ghVl+ctb6ngtEAjys97At035Vyh/OM8I +wwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=JxyDI4KhsqdDlPkuSmkhUHOJKiG6K9Cqyhd9HAyDtUY=; b=QRiSmbgFYtn2T/FZ693R+T22DrqJ63C0BTbOhM4D7vORBTxH0fhe92G1ycFgYKdeoG 71t2OrZKF1W14hNzqp/mX+xW5p+UbFfaKzV+8mVYZiAzTDfB8we1XclWdYrjhvY250ug 3VZVS0RvgZCBH2SHeN7+J5wNq6JwC+dCCttLhxWNRD4xWu0tQb8JR+xnghDwJeyQxXwu FDw3lsYOwurC8bp56E7SptB9n2lbHUus4Vyw8Nr/a1y1k+XKcU9aXjGt3hPIS/bsCFi+ QKIa3P9awcE1IazLzDIzCjkvQ+GepK+mh4KiyaHp22VWeHLt2+W0RzoFLwob2Dbxj6M9 yPAQ== X-Gm-Message-State: AOAM532gtE4MTVxpc6CkRP0D+KE7/nSn12WfxDX9MpQXL+f6Cvj9xs/b nPhaeCmJIwVzCU5/lJKUidrYMPwq2kjUmLl3p9BWhQ== X-Received: by 2002:a5b:345:: with SMTP id q5mr25316283ybp.494.1590175795569; Fri, 22 May 2020 12:29:55 -0700 (PDT) MIME-Version: 1.0 References: <20200521064743.4769-1-maxim.uvarov@linaro.org> <20200521064743.4769-4-maxim.uvarov@linaro.org> <20200522171451.GD10319@linux.intel.com> In-Reply-To: <20200522171451.GD10319@linux.intel.com> From: Maxim Uvarov Date: Fri, 22 May 2020 22:29:44 +0300 Message-ID: Subject: Re: [PATCHv2 2/2] tpm_ftpm_tee: register driver on TEE bus To: Jarkko Sakkinen Cc: Linux Kernel Mailing List , "tee-dev @ lists . linaro . org" , peterhuewe@gmx.de, jgg@ziepe.ca, Greg Kroah-Hartman , Jens Wiklander , linux-integrity@vger.kernel.org, Arnd Bergmann , Sumit Garg Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, 22 May 2020 at 20:15, Jarkko Sakkinen wrote: > > 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. > In the current kernel it's 2 different modules. > > 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? > Before these changes user space has to drive boot sequence. I.e. tee and optee modules loads, then application tee-supplicant has to start and only then module ftpm can be loaded. The reason for that is storage services are implemented in userspace and driver needs them. To make it work needed some tricky systemd scenario with black list driver mode. That really did not look well. From the over side ftpm might be used by uboot so it can be compiled inside firmware (bl32/optee-os). On the other hand there are drivers like tee-rng which do not need tee-supplicant and can run immediately after tee and optee modules. So the solution as I described in the commit is to make tee bus work for both types of drivers. Also in this driver I specially did not remove the old way of registration using DT entry. To not break existence things. And added new registration from the platform driver. > > Signed-off-by: Maxim Uvarov > > Suggested-by: Sumit Garg > > Suggested-by: Arnd Bergmann > > --- > > 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 "); > > 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 Yea, but I prefer to not touch such lines. It's up to maintainers how they support the driver. Best regards, Maxim.