From patchwork Sun Jan 24 09:39:45 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Opaniuk X-Patchwork-Id: 1430886 X-Patchwork-Delegate: van.freenix@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=foundries.io header.i=@foundries.io header.a=rsa-sha256 header.s=google header.b=PLtR+NS7; dkim-atps=neutral Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4DNnzG2tsqz9sVS for ; Sun, 24 Jan 2021 20:40:10 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id C8D44826D4; Sun, 24 Jan 2021 10:40:04 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=foundries.io Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=foundries.io header.i=@foundries.io header.b="PLtR+NS7"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 6562A82702; Sun, 24 Jan 2021 10:40:01 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-lf1-x133.google.com (mail-lf1-x133.google.com [IPv6:2a00:1450:4864:20::133]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 4059F826D1 for ; Sun, 24 Jan 2021 10:39:58 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=foundries.io Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=igor.opaniuk@foundries.io Received: by mail-lf1-x133.google.com with SMTP id a8so13596407lfi.8 for ; Sun, 24 Jan 2021 01:39:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foundries.io; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=HH1mEi4uSHUcMHDPTovb6kHyWquLmX4wiOXE5ovJ3hU=; b=PLtR+NS7Jgv50PXmaJ66Z4vAXu/RGkVWKUw/sGrXGedx28+a3sJoDP8ISLKHNogZIB Lllikn9ii5rGOifXQZNlYQ1NGOPGea/eVtboHSTPUPI7zm6SAj/ViKc7TerWc06i3v+y veyHZhCCMk1CuLeZ43zM8PNqopUrnaP3t3Ulq6tDO0+2mL3TU1f4NjM3UPhw+zyjJQNx ipVA2bB/t4oMdl0ufLGLQL71JNhUcjfOMAUE13aFP/2xAexXmo+g2dmnmJo4JyaIlils J7G4o7SaOpxgc+Jje+8vVB/11yHwNyuiKlWoMFRxpgxX5q+rIBi6Dd0faPwvrZ3D93eb sCYw== 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:mime-version :content-transfer-encoding; bh=HH1mEi4uSHUcMHDPTovb6kHyWquLmX4wiOXE5ovJ3hU=; b=MzXZheNF88SQLNOEgAbGA88zb4nkVg6e392AbmMspt1Fsj6psNGjBxTNBIked51gMB MdR37gH8Qb0aG2iMiMex3RZiiYn5nDWI5H46jrdZrjX5egLn8AMozE51X+YBo2Zu543Y 3SuL+1hBEY5RZK+v8bAJuQUMRehfmH8gtRnsIB0kIINRLSU7+057onqYlxVQ7Ab3yB53 B3jZjDM4ypVmNYgnR0Zu2lHjHbJiXrcSYjIhgGCmFglq2G3S8tHaGZ2DJhzYrjRY02bV nynC+Clav9BZ3+XblwIE+f1ngqH+78YreechM8pMwAq7GEuPqRcaTipUsegkVZiGfYZG SCHg== X-Gm-Message-State: AOAM533bcpttU7wWHpxveLrPVv3V5mvOritpYpO84rcNZJG8zNQAlgXy QZyjpBvCqEp+ZfUImU2ndwu0Gai+jBFI88HR X-Google-Smtp-Source: ABdhPJwteyd+mzcPHUjvkYgXd3G/Pe55YvW4JYyg/s+cbsChIA0d+RWk8Frm9kpRsYLxUltbt5fPlA== X-Received: by 2002:ac2:569e:: with SMTP id 30mr3855509lfr.297.1611481197443; Sun, 24 Jan 2021 01:39:57 -0800 (PST) Received: from localhost ([109.108.76.111]) by smtp.gmail.com with ESMTPSA id f21sm1419125lfe.6.2021.01.24.01.39.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Jan 2021 01:39:56 -0800 (PST) From: Igor Opaniuk X-Google-Original-From: Igor Opaniuk To: u-boot@lists.denx.de Cc: jens.wiklander@linaro.org, jorge@foundries.io, ricardo@foundries.io, etienne.carriere@linaro.org, mike@foundries.io, Igor Opaniuk , Anatolij Gustschin , Patrick Delaunay , Sean Anderson , Simon Glass Subject: [RFC PATCH v2 1/2] optee: obtain emmc rpmb info from dt Date: Sun, 24 Jan 2021 11:39:45 +0200 Message-Id: <20210124093946.103018-1-igor.opaniuk@gmail.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.102.3 at phobos.denx.de X-Virus-Status: Clean From: Igor Opaniuk Add support for rpmb-dev property in optee node. Prioritize that provided eMMC info from DT for RPMB operations over the one provided by OP-TEE OS core in RPC calls. Signed-off-by: Igor Opaniuk --- Changes in v2: - Return NULL instead of ERR_PTR(-ENXIO) in get_rpmb_dev in case there is no rpmb-dev property or somemithing went wrong drivers/tee/optee/core.c | 33 +++++++++++++++++ drivers/tee/optee/optee_private.h | 2 +- drivers/tee/optee/rpmb.c | 60 ++++++++++++++++++------------- 3 files changed, 70 insertions(+), 25 deletions(-) diff --git a/drivers/tee/optee/core.c b/drivers/tee/optee/core.c index b898c32edc..828ab9b00a 100644 --- a/drivers/tee/optee/core.c +++ b/drivers/tee/optee/core.c @@ -12,6 +12,7 @@ #include #include #include +#include #include "optee_smc.h" #include "optee_msg.h" @@ -607,14 +608,46 @@ static optee_invoke_fn *get_invoke_func(struct udevice *dev) return ERR_PTR(-EINVAL); } +static struct mmc *get_rpmb_dev(struct udevice *dev) +{ + struct udevice *mmc_dev; + const fdt32_t *phandle_p; + u32 phandle; + int ret = 0; + + debug("optee: looking for rpmb device in DT.\n"); + + phandle_p = ofnode_get_property(dev_ofnode(dev), + "rpmb-dev", NULL); + if (!phandle_p) { + debug("optee: missing \"rpmb-dev\" property\n"); + return NULL; + } + + phandle = fdt32_to_cpu(*phandle_p); + + ret = uclass_get_device_by_phandle_id(UCLASS_MMC, phandle, &mmc_dev); + if (ret) { + printf("optee: invalid phandle value in \"rpmb-dev\".\n"); + return NULL; + } + + debug("optee: using phandle %d from \"rpmd-dev\" property.\n", + phandle); + return mmc_get_mmc_dev(mmc_dev); +} + static int optee_of_to_plat(struct udevice *dev) { struct optee_pdata *pdata = dev_get_plat(dev); + struct optee_private *priv = dev_get_priv(dev); pdata->invoke_fn = get_invoke_func(dev); if (IS_ERR(pdata->invoke_fn)) return PTR_ERR(pdata->invoke_fn); + priv->rpmb_mmc = get_rpmb_dev(dev); + return 0; } diff --git a/drivers/tee/optee/optee_private.h b/drivers/tee/optee/optee_private.h index 1f07a27ee4..8e5a280622 100644 --- a/drivers/tee/optee/optee_private.h +++ b/drivers/tee/optee/optee_private.h @@ -19,8 +19,8 @@ */ struct optee_private { struct mmc *rpmb_mmc; - int rpmb_dev_id; int rpmb_original_part; + bool rpmb_inited; }; struct optee_msg_arg; diff --git a/drivers/tee/optee/rpmb.c b/drivers/tee/optee/rpmb.c index 0804fc963c..0137c44be1 100644 --- a/drivers/tee/optee/rpmb.c +++ b/drivers/tee/optee/rpmb.c @@ -45,55 +45,67 @@ static void release_mmc(struct optee_private *priv) { int rc; - if (!priv->rpmb_mmc) + if (!priv->rpmb_mmc || !priv->rpmb_inited) return; - rc = blk_select_hwpart_devnum(IF_TYPE_MMC, priv->rpmb_dev_id, - priv->rpmb_original_part); + rc = mmc_switch_part(priv->rpmb_mmc, priv->rpmb_original_part); if (rc) debug("%s: blk_select_hwpart_devnum() failed: %d\n", __func__, rc); - priv->rpmb_mmc = NULL; + priv->rpmb_inited = false; +} + +static int check_mmc(struct mmc *mmc) +{ + if (!mmc) { + debug("Cannot find RPMB device\n"); + return -ENODEV; + } + if (!(mmc->version & MMC_VERSION_MMC)) { + debug("Device id is not an eMMC device\n"); + return -ENODEV; + } + if (mmc->version < MMC_VERSION_4_41) { + debug("RPMB is not supported before version 4.41\n"); + return -ENODEV; + } + + return 0; } static struct mmc *get_mmc(struct optee_private *priv, int dev_id) { - struct mmc *mmc; int rc; - if (priv->rpmb_mmc && priv->rpmb_dev_id == dev_id) + if (priv->rpmb_mmc && priv->rpmb_inited) return priv->rpmb_mmc; release_mmc(priv); - mmc = find_mmc_device(dev_id); - if (!mmc) { - debug("Cannot find RPMB device\n"); - return NULL; - } - if (!(mmc->version & MMC_VERSION_MMC)) { - debug("Device id %d is not an eMMC device\n", dev_id); - return NULL; - } - if (mmc->version < MMC_VERSION_4_41) { - debug("Device id %d: RPMB not supported before version 4.41\n", - dev_id); + /* + * Check if priv->rpmb_mmc was already set from DT node, + * otherwise use dev_id provided by OP-TEE OS + * and find mmc device by its dev_id + */ + if (!priv->rpmb_mmc) + priv->rpmb_mmc = find_mmc_device(dev_id); + + rc = check_mmc(priv->rpmb_mmc); + if (rc) return NULL; - } - priv->rpmb_original_part = mmc_get_blk_desc(mmc)->hwpart; + priv->rpmb_original_part = mmc_get_blk_desc(priv->rpmb_mmc)->hwpart; - rc = blk_select_hwpart_devnum(IF_TYPE_MMC, dev_id, MMC_PART_RPMB); + rc = mmc_switch_part(priv->rpmb_mmc, MMC_PART_RPMB); if (rc) { debug("Device id %d: cannot select RPMB partition: %d\n", dev_id, rc); return NULL; } - priv->rpmb_mmc = mmc; - priv->rpmb_dev_id = dev_id; - return mmc; + priv->rpmb_inited = true; + return priv->rpmb_mmc; } static u32 rpmb_get_dev_info(u16 dev_id, struct rpmb_dev_info *info) From patchwork Sun Jan 24 09:39:46 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Opaniuk X-Patchwork-Id: 1430887 X-Patchwork-Delegate: van.freenix@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=foundries.io header.i=@foundries.io header.a=rsa-sha256 header.s=google header.b=hOuuFFYc; dkim-atps=neutral Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4DNnzT2822z9sVS for ; Sun, 24 Jan 2021 20:40:21 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id A650482717; Sun, 24 Jan 2021 10:40:09 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=foundries.io Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=foundries.io header.i=@foundries.io header.b="hOuuFFYc"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 61858826F3; Sun, 24 Jan 2021 10:40:03 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-lj1-x229.google.com (mail-lj1-x229.google.com [IPv6:2a00:1450:4864:20::229]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id E081A826D4 for ; Sun, 24 Jan 2021 10:39:59 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=foundries.io Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=igor.opaniuk@foundries.io Received: by mail-lj1-x229.google.com with SMTP id f2so6398892ljp.11 for ; Sun, 24 Jan 2021 01:39:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foundries.io; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=IdYXcBpsElZthrJPQoTwr3wQk8ZdQQiA+/TqivYKCqs=; b=hOuuFFYcOEGwPJqRbhxTNFBG3sZ8Zk2mTDfpXGduVy6lNclsLWPp+PUzBfP1Gnm9zN IwjOds0rEWUVdqCBbzLOoxecKY89QqB3jjBcw2SRHULt6bAZNGi3V9y3qbVP+a6NPTOC awTGSs1+xrp6uCcophQXO4NeaPlFiEh5WwTy3swANjFyzOXJDOg1QKJip0VWlEev2ayJ NNx0KZPVvgsyBC6BmEYTOUn5djHg7ybkHsllGobG9QoyFdQqc6sznHwTshyofsSdcluT prbG/F6oa6YKyQsF8QbPKBxuXnvyWqQ1k7Ms5K6KuXlAtdtrhLztaSuJCwZY22qwTt8U tPwA== 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:mime-version:content-transfer-encoding; bh=IdYXcBpsElZthrJPQoTwr3wQk8ZdQQiA+/TqivYKCqs=; b=lRFHKntPTm/ShberYK1El0f1nS68D+EPJtJwXlhdsahvXmMLP9ZFVlsNjZ7CjcjIWq IIaH8jD4zUJAOAeV98UccduHdFOoR1yCDn6Awku7G1uqE9ZGMESgZBsM8UFFGIJtmKkC i7mxL5FX3mk5lPHEKyNU9TwuOrzhuPVmAv2VzAbHU/mTvLp3WIleBwAl8WBTR8kRWpb5 s/0BRQ+ThUKkkoXFJQoaUmY6HB/zz14bYrMbYFrPlJzLR51VaX5rW2i6CKsDZXpDY0Bk qb5JpQMiZXU6xGYUBp7g8CbjZJsl7HWahglmS2/J6X1lRwMFPtr/3QazT61OGIe8CN8r vWYA== X-Gm-Message-State: AOAM530klF5kTlkdslq21GfyJQJ4N7TNbYcPrRq8bRm90kZoStL0dDx9 M39TmItBOUYaxeZOk9SyrVav36aBDaCFY/bK X-Google-Smtp-Source: ABdhPJz0HUvxWNOyXqGlNaMh65tognzLt+N6W/Mt67CWN//8BkDS12wAl/fVU/9Mbqj7i9riGje7rQ== X-Received: by 2002:a2e:87cb:: with SMTP id v11mr334760ljj.218.1611481199174; Sun, 24 Jan 2021 01:39:59 -0800 (PST) Received: from localhost ([109.108.76.111]) by smtp.gmail.com with ESMTPSA id x17sm1440737lfg.0.2021.01.24.01.39.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Jan 2021 01:39:58 -0800 (PST) From: Igor Opaniuk X-Google-Original-From: Igor Opaniuk To: u-boot@lists.denx.de Cc: jens.wiklander@linaro.org, jorge@foundries.io, ricardo@foundries.io, etienne.carriere@linaro.org, mike@foundries.io, Igor Opaniuk Subject: [RFC PATCH v2 2/2] doc: device-tree-bindings: optee: support rpmb-dev property Date: Sun, 24 Jan 2021 11:39:46 +0200 Message-Id: <20210124093946.103018-2-igor.opaniuk@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210124093946.103018-1-igor.opaniuk@gmail.com> References: <20210124093946.103018-1-igor.opaniuk@gmail.com> MIME-Version: 1.0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.102.3 at phobos.denx.de X-Virus-Status: Clean From: Igor Opaniuk Add support for "rpmb-dev" property which provides eMMC phandle for RPMB-related operations. This commit is created only to show DT node updates for RFC patch, obviously that node should be updated in device-tree-bindings in Linux first, that pulled here. Signed-off-by: Igor Opaniuk --- Changes v2: - Add ";" after phandle doc/device-tree-bindings/firmware/linaro,optee-tz.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/device-tree-bindings/firmware/linaro,optee-tz.txt b/doc/device-tree-bindings/firmware/linaro,optee-tz.txt index d38834c67d..1776dd9606 100644 --- a/doc/device-tree-bindings/firmware/linaro,optee-tz.txt +++ b/doc/device-tree-bindings/firmware/linaro,optee-tz.txt @@ -20,6 +20,8 @@ the reference implementation maintained by Linaro. "hvc" : HVC #0, with the register assignments specified in drivers/tee/optee/optee_smc.h +- rpmb-dev : contains phandle to the eMMC device, whose RPMB partition + is used for secure storage. Example: @@ -27,5 +29,6 @@ Example: optee { compatible = "linaro,optee-tz"; method = "smc"; + rpmb-dev = <&mmc0>; }; };