Received: by 2002:a25:683:0:0:0:0:0 with SMTP id 125csp1492728ybg; Thu, 4 Jun 2020 11:04:30 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxyg7lJLqHfxVTgDyDAZK7+d4XVO5yg2Gn2CIkDvdlyE7f0/zWk+q1IEcPlp3wMybqCvyUo X-Received: by 2002:a05:6402:6c6:: with SMTP id n6mr5248268edy.277.1591293870073; Thu, 04 Jun 2020 11:04:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1591293870; cv=none; d=google.com; s=arc-20160816; b=I253ElQvLOX07/J6rI1wy4aBSYv0tX09mu8wy+ktuQRfD1M3dVYjvF/f3Hbt7whcGD QGR0gYt6qT7ojHaK0uP1JqEIjH7CIvKSh0T6Bs9FExEOM/vWmAaE/lMr2itsa7omRTor oFVfanBaWb0kx/8G8VI3tAYp1R77KDD6PVI8wdZfJrnNik0OCxMEQsLC43P4JrXFt636 sP+T7WAXvdnAxVVBr644Lh7VfE2a4rosFrk+vpK125lz9wglhzpdNm6BG5AGXIAqdj+3 OsME7z/xvhUFps1fRa0nEn8/4IAZDPzCK/nvMllx3D9ZCiAo6u9+fHOLSckpR/Bxdg2E wQog== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=Eox8fZ0WSYZz73QuDot1O+nsmoLfoZMQmPTJJxk9miI=; b=w18kR2LD99t+0Of6getXXV6WZH4tca8L74R+p3GlNAX7kMrpQLzgi85NHtJ1MoTH2h NMBc+EibEpTWm7Ni5gSnCIY0JWo13YVtjV4VVGfMZwsjDUyyxFfFfeX0A6Q//HnD/7J5 dtpyzWupA3baVWReSBcsCviBc2g4T4zeGkMc58LYnzuSr3E3F/lSed+s5ZBHx2MCL5mA p9EnuGxDWwum2N8qwxmXQn5BbOtcUPmEi2yCg09L9GNZm+W/LmVq4PtzCf0bN68viqFc SQ6jpXvqWfn/dfGu2GcFrGwGGViukY195UkHKjLNX0tkM0TyuJ5v0kCVfRgrLjXoU48H mQaQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=gEoLIkc1; 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 k7si2115722ejr.30.2020.06.04.11.04.07; Thu, 04 Jun 2020 11:04:30 -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=gEoLIkc1; 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 S1730443AbgFDR7I (ORCPT + 99 others); Thu, 4 Jun 2020 13:59:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57738 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730349AbgFDR7C (ORCPT ); Thu, 4 Jun 2020 13:59:02 -0400 Received: from mail-lj1-x244.google.com (mail-lj1-x244.google.com [IPv6:2a00:1450:4864:20::244]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 55F9DC08C5C2 for ; Thu, 4 Jun 2020 10:59:02 -0700 (PDT) Received: by mail-lj1-x244.google.com with SMTP id n24so8413160lji.10 for ; Thu, 04 Jun 2020 10:59:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Eox8fZ0WSYZz73QuDot1O+nsmoLfoZMQmPTJJxk9miI=; b=gEoLIkc1pocbO4N8OJKp6LfOD8S1cJhZ0LzXzYJix/Dll52mKdTe4lMqmDAR3QXTes Jf7KK9mDdfksqKM8BW51iVka+4MGUGK2pkMEL6N/rTdlh2h9gcgd5pnIagw30A23otV1 Kr7t50eOliuKRvNcTghjf05M0AeCRN9R5+o6nE5wn3Z5sqT3xZsm6SVLezGxalw6NVYn 4tQB25qT1RgQpKd0SeLwmZH6jc+V5xBQcZAlCexGTrgRwezqF7dK1/SZzKNRdW6KK6CM 27qw46aZCa+HBLfnP+OUn2WU0ktDcWNKgLid8SvSSWLF6i+SFzpkCUKh9tGojY8vUOGG j9yA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Eox8fZ0WSYZz73QuDot1O+nsmoLfoZMQmPTJJxk9miI=; b=p/EY9wnlvvnuDLh3HM9JY4k+m6XkRBmEiZv5RlNQxPBX17E01pQakczPmuGgMgPPRl kHytHGlv4mbQnuOJS9yr39zkiOVNm3oqnB+5ivMLpjgpdi79Prfkm0MOKsb0ZyM3FmzK 5H1CoRH5F8gXwwpDL8LGmIlemeMXziX506U6vUOg7XeP/dl/nf6/uaL2Rao5grs7a+yu WFp0o+tbtram336800jSSSGfdclGyC0NTh3W7ELJ0lI+iC3/yq3RVmdLtzB1ELm72Ws7 Yk/06jv+QenwpynukxEqaoG1xUkIZWWiMYuxH7WqlNTZEzoq598QHXlx51ew8fzW7JYr 3fiQ== X-Gm-Message-State: AOAM532WrMT+i3ppYWvaBWlhXaKGv2Y9eV0SIoTfD9v/mAttSNPbTnCh nxLsknm3BCwXoe9NsjF1LeYTFXdKlBI= X-Received: by 2002:a05:651c:1058:: with SMTP id x24mr2622479ljm.34.1591293540445; Thu, 04 Jun 2020 10:59:00 -0700 (PDT) Received: from localhost.localdomain ([176.59.41.83]) by smtp.gmail.com with ESMTPSA id y17sm72404lfa.77.2020.06.04.10.58.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Jun 2020 10:58:59 -0700 (PDT) From: Maxim Uvarov To: linux-kernel@vger.kernel.org, tee-dev@lists.linaro.org Cc: peterhuewe@gmx.de, jarkko.sakkinen@linux.intel.com, jgg@ziepe.ca, gregkh@linuxfoundation.org, jens.wiklander@linaro.org, linux-integrity@vger.kernel.org, arnd@linaro.org, sumit.garg@linaro.org, Maxim Uvarov Subject: [PATCHv8 3/3] tpm_ftpm_tee: register driver on TEE bus Date: Thu, 4 Jun 2020 20:58:51 +0300 Message-Id: <20200604175851.758-4-maxim.uvarov@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200604175851.758-1-maxim.uvarov@linaro.org> References: <20200604175851.758-1-maxim.uvarov@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org OP-TEE based fTPM Trusted Application depends on tee-supplicant to provide NV RAM implementation based on RPMB secure storage. So this dependency can be resolved via TEE bus where we only invoke fTPM driver probe once fTPM device is registered on the bus which is only true after the tee-supplicant is up and running. Additionally, TEE bus provides auto device enumeration. Signed-off-by: Maxim Uvarov Suggested-by: Sumit Garg Suggested-by: Arnd Bergmann Reviewed-by: Sumit Garg --- drivers/char/tpm/tpm_ftpm_tee.c | 70 ++++++++++++++++++++++++++++----- 1 file changed, 60 insertions(+), 10 deletions(-) diff --git a/drivers/char/tpm/tpm_ftpm_tee.c b/drivers/char/tpm/tpm_ftpm_tee.c index 22bf553ccf9d..28da638360d8 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,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, +}; + +/* 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_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