From patchwork Mon Jan 10 12:27:09 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gaurav Jain X-Patchwork-Id: 1577875 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.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=aI/WPT/v; dkim-atps=neutral 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=) 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 bilbo.ozlabs.org (Postfix) with ESMTPS id 4JXY6n73fNz9s9c for ; Mon, 10 Jan 2022 23:29:37 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 5BADF831EA; Mon, 10 Jan 2022 13:29:00 +0100 (CET) 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="aI/WPT/v"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 8B0CB831E0; Mon, 10 Jan 2022 13:28:58 +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=-0.7 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FORGED_SPF_HELO,SPF_HELO_PASS, T_SPF_PERMERROR autolearn=no autolearn_force=no version=3.4.2 Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on2060e.outbound.protection.outlook.com [IPv6:2a01:111:f400:7e1a::60e]) (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 B431C831EA for ; Mon, 10 Jan 2022 13:28:54 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=gaurav.jain@nxp.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Pw57JJrXHJKMbYmrps48Mbr8nCGFREUG6LFC1WQzvJQm4EqF/flMr9zq12ob7omcydilua/kKV1L8iZF9RCRrztaYqiUymGFXtXptWZPMTpwslFVPpR8mmgSJRoJhLc1kjCo7YDXEDrZ+ncnAeK6yOVcm3SRJHZYaA3Bj86P8C/3yjBz69EBxS99yXsUaWUwTZHDQcwh8T0uQCqUkoBOx47Your9ItWpXTIOBvhfi3Fn75Pk5ErD/LExLvrZE1w/H+c3p8WJiLs9WHGPUcN4Y940ESHzc9TXMwwx8JvkBNYWdKH/+v1RudxPQtqWgDGeV5wfmJmBOC0QdsSfywbDyw== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=kZsMACTj7vp65MJtm3Xoogepyh6RcD/bi/ermLwHnc4=; b=Mnekh508WtpWojUPhbJQwD2Wq8FZlcOG/7bez2ceNYmV8rBXJoEfkNicKY13T5eEk2QSm+uYceYOTv1P6a+p1DCRxtzXCOVCvvti8GVhnriHVzS1feU6qIrVEbBR75/uAUn2E9hqW5zHpqEsvcjINvddRAkJfTt2GUo3cDvIPhaqV+38UTMkZkBR+LeId1wI+BYrfyKm/S8RABIluYgdH26kt3hrcThQYBytH58McyDjMb8czKvKV9N2C4Mix2KOWWsD/xybDyodj11GWkAJU8dRuuM2dEAm2JQQJTuLj2japsDWk7Al9Qphckvt6XdFBCtmL42CyM4LLBQVWeFuQQ== 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=kZsMACTj7vp65MJtm3Xoogepyh6RcD/bi/ermLwHnc4=; b=aI/WPT/vYB2IjWFHDkume8AQ+bfHoLTtEf6P0RghMB+znmkdDi99wpVWkq54g0PZN/h+fIjwoY34EhLb1QOBf6qgZu9Hyl2Ww6Vi6nOBBgN87xalOlQfZvpdZC0n+mDQxRuUr0D+WceHz4N1y+LNj7JSGgo82d9wra6z2GskdVQ= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from VI1PR04MB5342.eurprd04.prod.outlook.com (2603:10a6:803:46::16) by VI1PR04MB4221.eurprd04.prod.outlook.com (2603:10a6:803:3e::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4867.11; Mon, 10 Jan 2022 12:28:53 +0000 Received: from VI1PR04MB5342.eurprd04.prod.outlook.com ([fe80::ceb:f79:2700:ba2a]) by VI1PR04MB5342.eurprd04.prod.outlook.com ([fe80::ceb:f79:2700:ba2a%3]) with mapi id 15.20.4867.011; Mon, 10 Jan 2022 12:28:52 +0000 From: Gaurav Jain To: u-boot@lists.denx.de Cc: Stefano Babic , Fabio Estevam , Peng Fan , Simon Glass , Priyanka Jain , Ye Li , Horia Geanta , Ji Luo , Franck Lenormand , Silvano Di Ninno , Sahil malhotra , Pankaj Gupta , Varun Sethi , "NXP i . MX U-Boot Team" , Shengzhou Liu , Mingkai Hu , Rajesh Bhagat , Meenakshi Aggarwal , Wasim Khan , Alison Wang , Pramod Kumar , Tang Yuantian , Adrian Alonso , Vladimir Oltean Subject: [PATCH v8 10/15] crypto/fsl: Improve hwrng performance in kernel Date: Mon, 10 Jan 2022 17:57:09 +0530 Message-Id: <20220110122714.20744-11-gaurav.jain@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220110122714.20744-1-gaurav.jain@nxp.com> References: <20220110122714.20744-1-gaurav.jain@nxp.com> X-ClientProxiedBy: SG2PR06CA0104.apcprd06.prod.outlook.com (2603:1096:3:14::30) To VI1PR04MB5342.eurprd04.prod.outlook.com (2603:10a6:803:46::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: caa0f814-b1f4-4c04-fe39-08d9d434c307 X-MS-TrafficTypeDiagnostic: VI1PR04MB4221:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1284; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: STityjKt4jDeolW3VujPu7N0Ut86v7JvMyIAaab//aiQiY02y+eu4URF3FnGGx+FMyn7oBMTOIjIGwZzrpYGFWqnnTc/+S/cWp+B+l4MqI07DaU176WS7B2WhG8rdKshHE2UonHPYYCkDR0PrQnaaAyt2N5N1tRRbiHVAr0MeKoqPcFigRsdojDjPZ4YuIUxZ0J4yyAHA9en4S8rGc4GmIN+0khAGngo9eYbiqY+hUk/1zULanwgYJTAknfKbhEJJvEqYiZX//LuXWVdZ6lWl6e1CarpLQiUA+CYSWT+ZM7OPlGgf4S6KwYgcOqsotERb7FDDIWnSQLuWn5Cnij6LC4PcpkfDDNxUrlLnNJQ8jf/NUoKWdocShYCfAfbUwMA0nRayNXyIdOXXYqdpYGsXrgiUphKa7PVWFcdZuWqelJj5y5WX5uUkSFnh5vuDo+rnaIOUWOSb/2LmK68NrzeKXyE/NII30GWrg5mOFaNnEAoW9Wf/JsucXd5N6VP266xs5ZiOn/4JW6RvOq7Dz2Xk14q+iqFxTwMAL0f1OofqwbJLPs6iX4bZ78NM9rarzVu4IhL0EjElR+R6CFfcsLHvbyObEkwsufEmPdzKUvvM0u/EaV5saBBM3qwHEBuZ4CIfdFQPYzNvFXoeizOTsHxlbSyOrKJ2zGHMP9pmJXnnG/z5t+ankNtoZakylDfy4r0HdW2m5eqAxUaez9/IVyEaA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VI1PR04MB5342.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(54906003)(6486002)(66946007)(83380400001)(55236004)(2616005)(508600001)(6512007)(2906002)(8676002)(1076003)(66556008)(316002)(86362001)(5660300002)(4326008)(6506007)(66476007)(36756003)(44832011)(8936002)(52116002)(38350700002)(186003)(38100700002)(6666004)(26005)(6916009); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 8w8GFaAlR18WKP1myMnfyMozvA/yadYRghz3cHDWAw4svYNIxuvfCPzvh7fFEeiBNjFoxdAIXK+rbco2yDw3LLFixMDeWeWclBsETjLrwSS5vv/r226kGHMXul5jKtzIeg2DwwbAXtZKzMMLnoGmllIOqcv+Bb9w3fDOfJboOM3q2U4OvEFLCZsFkL8OxDGn+W5t4q3faDcJZ4xUL5mAthg8T/SH1q+B9PHEAhVJz07VT1uSR1wCgBk1dmPVj/di4d3QqmM/7ezu3rBcAiN356O1Hp64bJYBMUYjNKpPmDNZYh/x/QUz4o7UEkVwbEWY49jDF1wJmNR/YoyfKpXak3e9/JV07rf2oKkSph0DyMhFOpL6PcOnxRicmetTLJNEyyd3VfQ1CpEEiXb3515T14DD1Yd8aeqkim/rgp9bZIT/x/MZ0gymvoF0//8wJEf6qKIWZzlb08sa7Slc/TtZnoTt3kbZ42SSCELQohnMtxvG7e0CtG9VVss6ApZcVFxpnZtCdGSsEbK+C7EtIMY5yZb1YBIWMzxjrAYZhhcm4eshNZqBi06hRpqgQLMLUhXs8bIcpd827G8rZjuoT5HkegglUNNMkzl2xTAN0SaqBF5Rd8vcJMf0NhycXYfB3/gxFNjbxDNNjvkzRPj14ompDgQHQQYaXkodcxpiy0t6YrnFV4DCw10fIDR+fwsX2N5CILj4ozBWIxEb3NcMF9ChMLpyCCPphwq3ZJtj/ex/1MgfkDhyve4C83Ap7rX1xEipu7ZE//7i9uiTcAYJS4iljQJaOk/qHUIc7Zqp4/BvD71VDIysuL4PQGwC7GcC5vetCNVKnUZtFKQ3pAEoyp4G6nRxu0Tq/1n5maHazk88SG14JNlrFaXtbz8J+hyY+oU2p042ujAsjb0ywY0D4Os6WlXofGP+mqH5dgwWkeajQNe47rUCQgscrDvsFQ4pK4kXs13sm5u5EN5PQpKlbLtrCzLjzYhsjUidI2C0msBisWrsmDMSAGkB5YvXF7yJy8TYHKvpWykJm8xeQBT1eUHD8uDEAg/W8x6Xu6c+PXQi5OymXQJeitolYMN02BUMK5QyOGF/h+CH1BKdaN5XoJiZ41oxazobB5pKB6rNi7Ujh4elQQ+0kVKKq3rumO2VcGFii3c5wAuYrkknadn1s6wIFg0Eownu/TWlSzbI83z4Fu7AOBrIRppGyqSMwCO7bVEwWUVtosFp0lMhKxW4yecev6StRfwL0IJRzZ6OYYHtHzWuHGIV/3iY3oOqtYTHtVtylYe45ui/ebXI7ZoakFno4JzoFR80ZETLh/QJMrB78F+EW1D58XmnqitkcbHS1Fdrp3e60KcQznX3LmZkE9L8mAhHQ5gjA+YeViYT63vO8PlXyyoBN0/rugLJ88SrOUeXoq+vUXbqGBDxJ0v8+7XNYyI3feaGMFtA3TeqYzKhwxsrb4w8yHTR9bvC93rxt+rWKr9Muuoq/3Z/L8PuldMjyB+bNp5MOEdF4Qx4fHX4wnLT5cL0PTlZyvQZgGGb3DlpL4cvanJSNfUFcFUw+1JRA6xzcZWcmlHLmr+I3WY/ZzM5TyTpar3kJ47gD9DbT3xUzaFW+rMyszPZtRaOa11d5qGnsfXEujqW64nALtSWZvI= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: caa0f814-b1f4-4c04-fe39-08d9d434c307 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5342.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jan 2022 12:28:52.8698 (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: SphROeF7QLG6EObOh6b3zzASC+2U61YlQMtKylDHMfUotgf3v3Q8/02AJaGGUiK90TL5ZYEuMJImDBZjQyFPyw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4221 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 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.103.2 at phobos.denx.de X-Virus-Status: Clean From: Ye Li RNG parameters are reconfigured. - For TRNG to generate 256 bits of entropy, RNG TRNG Seed Control register is configured to have reduced SAMP_SIZE from default 2500 to 512. it is number of entropy samples that will be taken during Entropy generation. - self-test registers(Monobit Limit, Poker Range, Run Length Limit) are synchronized with new RTSDCTL[SAMP_SIZE] of 512. TRNG time is caluculated based on sample size. time required to generate entropy is reduced and hwrng performance improved from 0.3 kB/s to 1.3 kB/s. Signed-off-by: Ye Li Acked-by: Gaurav Jain > --- drivers/crypto/fsl/jr.c | 102 +++++++++++++++++++++++++++++++++------- include/fsl_sec.h | 1 + 2 files changed, 87 insertions(+), 16 deletions(-) diff --git a/drivers/crypto/fsl/jr.c b/drivers/crypto/fsl/jr.c index a84440ab10..e5346a84a4 100644 --- a/drivers/crypto/fsl/jr.c +++ b/drivers/crypto/fsl/jr.c @@ -603,30 +603,100 @@ static u8 get_rng_vid(ccsr_sec_t *sec) */ static void kick_trng(int ent_delay, ccsr_sec_t *sec) { + u32 samples = 512; /* number of bits to generate and test */ + u32 mono_min = 195; + u32 mono_max = 317; + u32 mono_range = mono_max - mono_min; + u32 poker_min = 1031; + u32 poker_max = 1600; + u32 poker_range = poker_max - poker_min + 1; + u32 retries = 2; + u32 lrun_max = 32; + s32 run_1_min = 27; + s32 run_1_max = 107; + s32 run_1_range = run_1_max - run_1_min; + s32 run_2_min = 7; + s32 run_2_max = 62; + s32 run_2_range = run_2_max - run_2_min; + s32 run_3_min = 0; + s32 run_3_max = 39; + s32 run_3_range = run_3_max - run_3_min; + s32 run_4_min = -1; + s32 run_4_max = 26; + s32 run_4_range = run_4_max - run_4_min; + s32 run_5_min = -1; + s32 run_5_max = 18; + s32 run_5_range = run_5_max - run_5_min; + s32 run_6_min = -1; + s32 run_6_max = 17; + s32 run_6_range = run_6_max - run_6_min; + u32 val; + struct rng4tst __iomem *rng = (struct rng4tst __iomem *)&sec->rng; - u32 val; - /* put RNG4 into program mode */ - sec_setbits32(&rng->rtmctl, RTMCTL_PRGM); - /* rtsdctl bits 0-15 contain "Entropy Delay, which defines the - * length (in system clocks) of each Entropy sample taken - * */ + /* Put RNG in program mode */ + /* Setting both RTMCTL:PRGM and RTMCTL:TRNG_ACC causes TRNG to + * properly invalidate the entropy in the entropy register and + * force re-generation. + */ + sec_setbits32(&rng->rtmctl, RTMCTL_PRGM | RTMCTL_ACC); + + /* Configure the RNG Entropy Delay + * Performance-wise, it does not make sense to + * set the delay to a value that is lower + * than the last one that worked (i.e. the state handles + * were instantiated properly. Thus, instead of wasting + * time trying to set the values controlling the sample + * frequency, the function simply returns. + */ val = sec_in32(&rng->rtsdctl); - val = (val & ~RTSDCTL_ENT_DLY_MASK) | - (ent_delay << RTSDCTL_ENT_DLY_SHIFT); + val &= RTSDCTL_ENT_DLY_MASK; + val >>= RTSDCTL_ENT_DLY_SHIFT; + if (ent_delay < val) { + /* Put RNG4 into run mode */ + sec_clrbits32(&rng->rtmctl, RTMCTL_PRGM | RTMCTL_ACC); + return; + } + + val = (ent_delay << RTSDCTL_ENT_DLY_SHIFT) | samples; sec_out32(&rng->rtsdctl, val); - /* min. freq. count, equal to 1/4 of the entropy sample length */ - sec_out32(&rng->rtfreqmin, ent_delay >> 2); - /* disable maximum frequency count */ - sec_out32(&rng->rtfreqmax, RTFRQMAX_DISABLE); + + /* + * Recommended margins (min,max) for freq. count: + * freq_mul = RO_freq / TRNG_clk_freq + * rtfrqmin = (ent_delay x freq_mul) >> 1; + * rtfrqmax = (ent_delay x freq_mul) << 3; + * Given current deployments of CAAM in i.MX SoCs, and to simplify + * the configuration, we consider [1,16] to be a safe interval + * for the freq_mul and the limits of the interval are used to compute + * rtfrqmin, rtfrqmax + */ + sec_out32(&rng->rtfreqmin, ent_delay >> 1); + sec_out32(&rng->rtfreqmax, ent_delay << 7); + + sec_out32(&rng->rtscmisc, (retries << 16) | lrun_max); + sec_out32(&rng->rtpkrmax, poker_max); + sec_out32(&rng->rtpkrrng, poker_range); + sec_out32(&rng->rsvd1[0], (mono_range << 16) | mono_max); + sec_out32(&rng->rsvd1[1], (run_1_range << 16) | run_1_max); + sec_out32(&rng->rsvd1[2], (run_2_range << 16) | run_2_max); + sec_out32(&rng->rsvd1[3], (run_3_range << 16) | run_3_max); + sec_out32(&rng->rsvd1[4], (run_4_range << 16) | run_4_max); + sec_out32(&rng->rsvd1[5], (run_5_range << 16) | run_5_max); + sec_out32(&rng->rsvd1[6], (run_6_range << 16) | run_6_max); + + val = sec_in32(&rng->rtmctl); /* - * select raw sampling in both entropy shifter + * Select raw sampling in both entropy shifter * and statistical checker */ - sec_setbits32(&rng->rtmctl, RTMCTL_SAMP_MODE_RAW_ES_SC); - /* put RNG4 into run mode */ - sec_clrbits32(&rng->rtmctl, RTMCTL_PRGM); + val &= ~RTMCTL_SAMP_MODE_INVALID; + val |= RTMCTL_SAMP_MODE_RAW_ES_SC; + /* Put RNG4 into run mode */ + val &= ~(RTMCTL_PRGM | RTMCTL_ACC); + /*test with sample mode only */ + sec_out32(&rng->rtmctl, val); } static int rng_init(uint8_t sec_idx, ccsr_sec_t *sec) diff --git a/include/fsl_sec.h b/include/fsl_sec.h index 7b6e3e2c20..2b3239414a 100644 --- a/include/fsl_sec.h +++ b/include/fsl_sec.h @@ -34,6 +34,7 @@ #if CONFIG_SYS_FSL_SEC_COMPAT >= 4 /* RNG4 TRNG test registers */ struct rng4tst { +#define RTMCTL_ACC 0x20 #define RTMCTL_PRGM 0x00010000 /* 1 -> program mode, 0 -> run mode */ #define RTMCTL_SAMP_MODE_VON_NEUMANN_ES_SC 0 /* use von Neumann data in both entropy shifter and