From patchwork Wed Apr 22 13:52:33 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 1275056 X-Patchwork-Delegate: sbabic@denx.de 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; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.a=rsa-sha256 header.s=selector2 header.b=rJyMOr0m; 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 496hLF3QJVz9sSm for ; Wed, 22 Apr 2020 23:36:53 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 2E1DC81CA9; Wed, 22 Apr 2020 15:33:59 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="rJyMOr0m"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 7C94E81C8D; Wed, 22 Apr 2020 15:31:20 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FORGED_SPF_HELO,MSGID_FROM_MTA_HEADER, SPF_HELO_PASS autolearn=no autolearn_force=no version=3.4.2 Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0613.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe1e::613]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 6628681C62 for ; Wed, 22 Apr 2020 15:30:41 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=peng.fan@nxp.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dJBfAsUKPNhLnUKKczWte8TC1AuO5s64yHzXV4/04gGuHx3fKJAx+4bsX+1YQKwP2c4J4G43iqbYHt02sq7KqXQJxoIi4GW1p/MZgn5fo3JAxB4quWrD5Lg3LUwQSuTfBDWL4cmHA2WU8RUSEWlXEa7s33rjeIFitUixMUQuPoEvIUOZeG9x9gyqDevVBAyKNFuG+WloOZHzbf3FjxSWm7ynOMkijKvWI9zd1sijVPCRQ9H9v8H/6YFORUy0hwcNa2Mnh9fzkahaUHxEmvffMT42wOpEula0nzxa15bJZGL5oG9uTZAZTQOkew+ymlemOsky0ingxozy2TK6QJV+bQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rq8jKdddWsl7rX297wJvMwZShqX0z1pgEWsr+5/B7z0=; b=PbeXxM2AdrMB5K/lxyT17M0FK0lstYCoHLObVFBpvgHgSg4kObJE9eCvPHlusnHxZq6YhXQV9CPMe5nyaSkxLNzowkMNZjWIi23fkhCyM3H5e9FEsiMoE2eRYkZwltdFGVi0S1PvAlIujxbPMhVOS3Oy2Du2z13zHCsm1PMK2O9tnc0+VM2n3CG99x3jBnyNsIcMstuqTT1SuBllTj6FOCiHUHPNC5HwIivwMEbzsx00yoC5yvIPHq6vhbbPd0wnqsfmC5F/shuNEjts/DNMoNQ2VxY8F0M3Xv1O0H7hQPG9bmsvJO3dKSG0jPTQAWIedI3N5wWlZr639ZT7O2757w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rq8jKdddWsl7rX297wJvMwZShqX0z1pgEWsr+5/B7z0=; b=rJyMOr0mv1fe8XgkwxWEAUwxwdZBjMpssyHr3afsf+Kn5AG/WQaUajduPlMg+b0iCC71jp82kWTGx1gHWFPJBycDicgvLk8kKuWsg4ea75O8BFCixn4rl8PyIssxdmLBCPaxpqDSOfKk3AxStzoh520Z8IYc7WgTPdpQ+FFMAqQ= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from DB6PR0402MB2760.eurprd04.prod.outlook.com (2603:10a6:4:a1::14) by DB6PR0402MB2773.eurprd04.prod.outlook.com (2603:10a6:4:94::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2921.29; Wed, 22 Apr 2020 13:30:38 +0000 Received: from DB6PR0402MB2760.eurprd04.prod.outlook.com ([fe80::d17b:d767:19c3:b871]) by DB6PR0402MB2760.eurprd04.prod.outlook.com ([fe80::d17b:d767:19c3:b871%6]) with mapi id 15.20.2921.030; Wed, 22 Apr 2020 13:30:38 +0000 From: Peng Fan To: sbabic@denx.de, festevam@gmail.com Cc: u-boot@lists.denx.de Subject: [PATCH 22/24] imx8: scu api: Add support for SECO manufacturing protection APIs Date: Wed, 22 Apr 2020 21:52:33 +0800 Message-Id: <20200422135235.14756-22-peng.fan@nxp.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20200422135235.14756-1-peng.fan@nxp.com> References: <20200422135235.14756-1-peng.fan@nxp.com> X-ClientProxiedBy: SG2PR06CA0190.apcprd06.prod.outlook.com (2603:1096:4:1::22) To DB6PR0402MB2760.eurprd04.prod.outlook.com (2603:10a6:4:a1::14) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from linux-ljuv.ap.freescale.net (119.31.174.71) by SG2PR06CA0190.apcprd06.prod.outlook.com (2603:1096:4:1::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2937.13 via Frontend Transport; Wed, 22 Apr 2020 13:30:37 +0000 X-Mailer: git-send-email 2.16.4 X-Originating-IP: [119.31.174.71] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 4d392ec2-4270-4294-a522-08d7e6c15869 X-MS-TrafficTypeDiagnostic: DB6PR0402MB2773: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8; X-Forefront-PRVS: 03818C953D X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DB6PR0402MB2760.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(10009020)(4636009)(396003)(39860400002)(346002)(366004)(376002)(136003)(16526019)(2616005)(44832011)(52116002)(66946007)(186003)(8676002)(6666004)(956004)(86362001)(1076003)(5660300002)(2906002)(8936002)(36756003)(6486002)(81156014)(478600001)(316002)(6506007)(26005)(6512007)(66476007)(66556008)(4326008); DIR:OUT; SFP:1101; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: u7UqrFbb6V2TMDpzegdTBuYxlWVzQw+ryJixPCKtUoLhcdchp7ydK3gRrFp4Va1Au7Ua1Tl6ddijjqYcpnV6zHV9w0XIhW7yiF4vubxkLsPZnMp3SwTY62ah16eX58qpdmEPp0SNKa36ZzFE+AS/Um/eDLIZNHiuKUhJZQaXOkxIhZg1GNgvetJwNz0Oj0SRpj+DkwQsbsDO74cCysG+YqFllmBVCzLfLpAiT1XPJCAGWNmQQQP1Ju6Qiu+EZ57J+kiDsFHdljqTINN2rzglEsqzw5rJOHoIbYitzsEZVzrpt+/+Cl5X4iTqb4GvTc78V+HVwsNU15QwAWY9IJzZDqe3WZW/5rgtr3LkJ/fbyaYd9Qp8p3kvmVSPvuHSoca2WdjFiz/EAa/lf+nyfnZkhU1z798SEtmnrdTQypTgvk8fdibGNOfp0Qk0z5psiKsS X-MS-Exchange-AntiSpam-MessageData: GZnaaINxRue8VFvopTBLr98HCmskQuLENfC5L3TYhOsHPxjEcNPHpKjLj7Cdu1NNBkzBEx9uBh4T4WPXALmD2bDK6HtfqR3uOT1at6W1kMLCCQTf9Iasmj5cZ91UyCXtweBfelaM+ZRZuwRTCJmzUw== X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4d392ec2-4270-4294-a522-08d7e6c15869 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Apr 2020 13:30:38.5248 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 7Sd56Px7hvPzqESf7mI5v71GLmc/cH2zRLxwJE7u3aycR//PXNWq1VazBAupfYP9yQ/TABQ9fE4lGTD3/+w96g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0402MB2773 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.30rc1 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.2 at phobos.denx.de X-Virus-Status: Clean From: Breno Lima SECO provides APIs to support CAAM manufacturing protection: - sc_seco_get_mp_key() - sc_seco_get_mp_sign() - sc_seco_update_mpmr() Add SCFW APIs support. Signed-off-by: Breno Lima Signed-off-by: Peng Fan --- arch/arm/include/asm/arch-imx8/sci/sci.h | 4 ++ drivers/misc/imx8/scu_api.c | 80 ++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+) diff --git a/arch/arm/include/asm/arch-imx8/sci/sci.h b/arch/arm/include/asm/arch-imx8/sci/sci.h index 14ee6f999b..ac65f199b8 100644 --- a/arch/arm/include/asm/arch-imx8/sci/sci.h +++ b/arch/arm/include/asm/arch-imx8/sci/sci.h @@ -122,5 +122,9 @@ void sc_seco_build_info(sc_ipc_t ipc, u32 *version, u32 *commit); int sc_seco_get_event(sc_ipc_t ipc, u8 idx, u32 *event); int sc_seco_gen_key_blob(sc_ipc_t ipc, u32 id, sc_faddr_t load_addr, sc_faddr_t export_addr, u16 max_size); +int sc_seco_get_mp_key(sc_ipc_t ipc, sc_faddr_t dst_addr, u16 dst_size); +int sc_seco_update_mpmr(sc_ipc_t ipc, sc_faddr_t addr, u8 size, u8 lock); +int sc_seco_get_mp_sign(sc_ipc_t ipc, sc_faddr_t msg_addr, + u16 msg_size, sc_faddr_t dst_addr, u16 dst_size); #endif diff --git a/drivers/misc/imx8/scu_api.c b/drivers/misc/imx8/scu_api.c index 3ad21c1ea0..c1e54fc4bc 100644 --- a/drivers/misc/imx8/scu_api.c +++ b/drivers/misc/imx8/scu_api.c @@ -948,3 +948,83 @@ int sc_seco_gen_key_blob(sc_ipc_t ipc, u32 id, sc_faddr_t load_addr, return ret; } + +int sc_seco_get_mp_key(sc_ipc_t ipc, sc_faddr_t dst_addr, + u16 dst_size) +{ + struct udevice *dev = gd->arch.scu_dev; + struct sc_rpc_msg_s msg; + int size = sizeof(struct sc_rpc_msg_s); + int ret; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SIZE(&msg) = 4U; + RPC_SVC(&msg) = (u8)(SC_RPC_SVC_SECO); + RPC_FUNC(&msg) = (u8)(SECO_FUNC_GET_MP_KEY); + + RPC_U32(&msg, 0U) = (u32)(dst_addr >> 32ULL); + RPC_U32(&msg, 4U) = (u32)(dst_addr); + RPC_U16(&msg, 8U) = (u16)(dst_size); + + ret = misc_call(dev, SC_FALSE, &msg, size, &msg, size); + if (ret) + printf("%s, dst_addr:0x%llx, res:%d\n", + __func__, dst_addr, RPC_R8(&msg)); + + return ret; +} + +int sc_seco_update_mpmr(sc_ipc_t ipc, sc_faddr_t addr, uint8_t size_m, + uint8_t lock) +{ + struct udevice *dev = gd->arch.scu_dev; + struct sc_rpc_msg_s msg; + int size = sizeof(struct sc_rpc_msg_s); + int ret; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SIZE(&msg) = 4U; + RPC_SVC(&msg) = (u8)(SC_RPC_SVC_SECO); + RPC_FUNC(&msg) = (u8)(SECO_FUNC_UPDATE_MPMR); + + RPC_U32(&msg, 0U) = (u32)(addr >> 32ULL); + RPC_U32(&msg, 4U) = (u32)(addr); + RPC_U8(&msg, 8U) = (u8)(size_m); + RPC_U8(&msg, 9U) = (u8)(lock); + + ret = misc_call(dev, SC_FALSE, &msg, size, &msg, size); + if (ret) + printf("%s, addr:0x%llx, size_m:%x, lock:0x%x, res:%d\n", + __func__, addr, size_m, lock, RPC_R8(&msg)); + return ret; +} + +int sc_seco_get_mp_sign(sc_ipc_t ipc, sc_faddr_t msg_addr, + u16 msg_size, sc_faddr_t dst_addr, + u16 dst_size) +{ + struct udevice *dev = gd->arch.scu_dev; + struct sc_rpc_msg_s msg; + int size = sizeof(struct sc_rpc_msg_s); + int ret; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SIZE(&msg) = 6U; + RPC_SVC(&msg) = (u8)(SC_RPC_SVC_SECO); + RPC_FUNC(&msg) = (u8)(SECO_FUNC_GET_MP_SIGN); + + RPC_U32(&msg, 0U) = (u32)(msg_addr >> 32ULL); + RPC_U32(&msg, 4U) = (u32)(msg_addr); + RPC_U32(&msg, 8U) = (u32)(dst_addr >> 32ULL); + RPC_U32(&msg, 12U) = (u32)(dst_addr); + RPC_U16(&msg, 16U) = (u16)(msg_size); + RPC_U16(&msg, 18U) = (u16)(dst_size); + + ret = misc_call(dev, SC_FALSE, &msg, size, &msg, size); + if (ret) + printf("%s, msg_addr:0x%llx, msg_size:%x, dst_addr:0x%llx," + "dst_size:%x, res:%d\n", __func__, msg_addr, msg_size, + dst_addr, dst_size, RPC_R8(&msg)); + + return ret; +}