From patchwork Tue Dec 7 07:41:24 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gaurav Jain X-Patchwork-Id: 1564522 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=htok41Bh; 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 4J7XPJ3M97z9t25 for ; Tue, 7 Dec 2021 18:44:20 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 5ED2683383; Tue, 7 Dec 2021 08:43:14 +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="htok41Bh"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 2E3BE83433; Tue, 7 Dec 2021 08:43:11 +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=-1.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FORGED_SPF_HELO, MSGID_FROM_MTA_HEADER,SPF_HELO_PASS,T_SPF_PERMERROR autolearn=no autolearn_force=no version=3.4.2 Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01on060e.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe02::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 13314833E3 for ; Tue, 7 Dec 2021 08:43:05 +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=QjI3eCwRn4vFYQEabJn1xO3jzEtlNkGjl+INRyPnsj7DmWb3CE8dzYu26ht+l4nSHVHmRmrWA9+9zfwsEGQPB5i179TzVEjuk1jWvpcGClcP4OJFvVL56nTJiw8wWM4/oGtS8U6TVtNV1ymO7udUJMHyQcTbVt6zGJj7QtzjrnHNieXhNydYDgoatWKPeV6FyfUBICl2qVoFdQN/pC6aK26OHD2gBBpRT9x+b5GGPRatyZ192l7U7De/PrhuIPLflz60sqfvu1qUUr9i+hL5NMovXcWohoj5uS1HnUw8Onzd2pDf4lHDiJjd2rYZe+Pg5BT3jK07ZZYjPCtIHkpVbQ== 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=aAA1piab8fNKfnCzH+gXVistrGHRkSnj1x7oZbiz2bw=; b=CvGSfB733Zm2Hti+30CdZDpqOB0GMIxmCUgTvhkkEIROunEjbsM3SFLFa3BvKbdqn8ULCJAJ4q5sqhvla2+Ol26IzrwIegandx91lz7IaXrxUCcEZB3tGDEklyHXfkA/DApjl/DkY3ASSTdHCJfodBTyy+D0OAIFLuRxGgjY2sY+TS3kWIOPZGjnew7fGYLEXTbCC5YOgi5pRJ3Yb8ehXtOfgTvH9kIQfyQ20xk5xHG4GNB57FraEGDi5eeGZQb5CVCcUYGD4OyJ2Bnv5vJu13BJc5sQqS5MXbE7At0/07z58U9UU4MhLjZGsPqTPRhrWAq0S5orObkvKsGY0JBuLg== 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=aAA1piab8fNKfnCzH+gXVistrGHRkSnj1x7oZbiz2bw=; b=htok41Bhx6RlJA75X+WCnF6Z7IpzFG3gLvExWvluqj7Mcr+k1yF4aH0jX/lpR5iBnet8eYYX98+rr/a9CAff5gaRKzgGe6oKLLtlERc5KQcG4Ix2q8IwNp/Inqyuq5NeKwHDSshduA6JKaOCo5kENiF4RTcocQpBe0/z2jz5NgA= 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 VI1PR0402MB2864.eurprd04.prod.outlook.com (2603:10a6:800:b7::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4755.11; Tue, 7 Dec 2021 07:43:03 +0000 Received: from VI1PR04MB5342.eurprd04.prod.outlook.com ([fe80::9c7:29fc:3544:10fb]) by VI1PR04MB5342.eurprd04.prod.outlook.com ([fe80::9c7:29fc:3544:10fb%3]) with mapi id 15.20.4755.022; Tue, 7 Dec 2021 07:43:03 +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 v7 10/15] crypto/fsl: Improve hwrng performance in kernel Date: Tue, 7 Dec 2021 13:11:24 +0530 Message-Id: <20211207074129.10955-11-gaurav.jain@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20211207074129.10955-1-gaurav.jain@nxp.com> References: <20211207074129.10955-1-gaurav.jain@nxp.com> X-ClientProxiedBy: SGXP274CA0016.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:b8::28) To VI1PR04MB5342.eurprd04.prod.outlook.com (2603:10a6:803:46::16) MIME-Version: 1.0 Received: from lsv03326.swis.in-blr01.nxp.com (14.142.151.118) by SGXP274CA0016.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:b8::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4755.16 via Frontend Transport; Tue, 7 Dec 2021 07:42:57 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 037c2fcc-04dc-41a9-2056-08d9b9553335 X-MS-TrafficTypeDiagnostic: VI1PR0402MB2864: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: ADy7BESupQuuW/RfSj2Q/ywHGbCElvYcafAlZeJBuKiA9x1lHSYFr3j1qrYjPS6dr27+0P9PN4MVxRfHare2KyGcDEZPltZdhVtKzMxbhfd/ii8eETV/IrfRawXKJjeRKeHG3gWqjEXLe7Ou7LAUdxgB+5syABDYqMcCCCZpv/cSXpUIR76sW2CkuGfMbqhHnb//bGaDTnHqW6OBX7hL/lQFY5eOjjdYHuwLnCubMLSATt3u79BP4LutQekaBvDJBYyiGg/zhufLSsDIECvFlj6fofr2oBHVoXIMZnaNFPrewngoZ2F2vKTGK6YuMlbYFAln2xsZMLnVselKfu6UExjC8ZvKYYkFXcDen5I/rJKmX3Lt1qemePghuLmi6sNKNr+dSi3jfjkEAzDIAz73nwMKNo7jQFzggKPYaPX+JJWBr8qUhtaF/eVjx/ryINPxa5/BmYaOW1AHZGlE4gGHVW582xTcvI8t4KzQcfltR/CBhjY1k6+gY7G+TwPmtuqQ5LJb4hpqhgtgLn1gpErbbemZpXf2QP/YeCBBhGztAtmYp9YHAFg+5/jRQ93NSDHcXpyokiA8rXCAk1vVxsOgj9GDAbC4DjMdafp1DA8WbxVDkCMoD/6LuE3GzO1us6VeXlEXCyLzTmYHoPz1LxqeY4WRRBQn1qnIJQE8zqEb8XmvubUznG660FpfSIgPrN7ZMV+I/bHuQjwMJKq0xhJafRqkUBfnm1KrNV6Ifg+o8YCOYTRgGmd0tjRk9K1Qw6KI 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)(8936002)(44832011)(66946007)(66556008)(66476007)(6486002)(8676002)(86362001)(508600001)(38100700002)(38350700002)(186003)(1006002)(6666004)(55236004)(2616005)(956004)(83380400001)(5660300002)(4326008)(26005)(52116002)(1076003)(7696005)(36756003)(6916009)(2906002)(54906003)(316002)(110426009); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: vCbvcJPuFcV+jmI+2kpVBfSNvHBQNoZB02/hZ/iy04tcNW2P1YuVjM7Cq0Ww5m82lRhbxeUr3eOXNBIKu91d6zER41TgTAZbC5WmQrpr+b4drgWW4rtxqDTs2d9F0T5rza9dBjI6PLosz+fJwHNugCNdUV0Oje1eDQ/qRtsn7s2hToQ16plYi63A3MdC87o+YRCApT/dFuM1/pfTtmYRIpfcKKdJCWFEMnPfWGBiN2WJIQfdtpa/yOz8eY5zQDYWgvRemwE+CpgygzcfIii+/V8cFxjCmSHsRsCF9q6apz9cUXoE/vTY0m8/TlmD2Z9OOF4dG0ekgjBAhZVotIjGjTk0qjU9/rY56YtyZtjvlCDN1/rUYy2sGyPxYuLu0iuzt6lhcbERtotJQb5esD/CCWuaxvHpznFS5OX20Mzgc9/j4n2KB0WYl7tEZTzYS8GtaZlEl28uhj/qBekUW+/79WBJ8EPgcp49Vh9+FAShHzl9Yu95HxuovnhiYA1JoluuwtyZfACZcQJ4+wercEwbzYBlJ/M27IAIaYcth8HfS+UnyqldQQk6hrJysrvjOFGD8nYY04VYkcSM8UjqN52I0ZT3Ll9aeZUABPIeCmBauq1t7lV+hNVq2Fm6ovCHDcVPLwhMK4wLDyBsc7w3JlpS04tRi420esdtDGyOjVsFiwAKxSQAAXHz6eLIq6QA/TNDDgPZYlaMYxDhISpK+sGL6LrBf2d7ZUFOgv83hTT8yWG5YMvdxaMj+H96ek0rDdcz1n9LcTEcRdpQe4G9c10Es4QO8I/Ovwa2BdYSebjYQ7N6U64BcO8b6aJ72nOS0qI+QrALsqvBMJLbnGAVnYmAg6t1KaPT+bsJf+5ROJnUHQegCmNGSU1xKZO+FG60ZjIYN9x2Txz0kYfNDaW6hAC/44b+BR1mqlZ/c2K+reGOAQ2yc0I4DKzyYWJn9MGvyMD6mE8Tih8z9UG2xok08UgTjzr7Pz6uN+VMiHRnkfrMw+RDeOG92QQ5Wu92BS7kbDSYYoBzIZ2LLEuPI1Atlf1MeQ8AiCQwL7vmuvsrkQ3BLvaGwbfGD9pSE1Z0IdD9Lg/LtRNQZi+LDqQsztXwDouuQWp44QMnOT8fjXoMLG+QbsWHhenA9CYwdteYUJJkdVhlLszv7CiEvJmeFx5MldI18K/WjVr0dbIUgGWIRTnwdVNr4FSLJBwWnPVOgNicMEUHldICpLbAr6jHMNoxXoNesViLlZW5B2HkL1sQ5pAUTeyMFSP9f66R5icBmYu4qKWj0ABNn50LigCah68ywufQwRhcNj8/pcoQkcy3LkXJbULo/OyuqQdMLypfyrOS13TzVvboLYbyQ8sEt3vN3VxPwVB5Ppikdfzm8yhsISqvddI/8rC6aC3o7akl3eYWJCq40U5MuDJ6kI7HXnEDESgD+zp6vtYB0ZjDmlMHWRWzKFgbvRUV84oyX2Um/7s5FKaQVj3dpU3MciqicLET5xxcYdu6M8Xn1gNd6j6E+y539DZeUxRnCLGFlNG/OC68w/Lc6W1WoZbD9J2DBlrTAoh7AN0Ey9XD78CkWYhb+TX7ONi0T6f/rjuYImDNQfRwda9dGm9KInKKT02ndkd6w7tPVlP4AWfK7RhTcPiXT3jr9ac= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 037c2fcc-04dc-41a9-2056-08d9b9553335 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5342.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Dec 2021 07:43:03.4343 (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: tNOD6FI1PCnK/fsaZZu+0kTVpBu64LacCaBqCOAzPDmCeNkRJ02MeCVFVZVA1408nN/mVpkvzOX6vviX7Y2+aw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB2864 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.38 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 084a61c684..15f5fd0d05 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