From patchwork Tue Nov 30 10:40:43 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gaurav Jain X-Patchwork-Id: 1561518 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=VtYvnz3d; 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 4J3Jjs2Ghfz9sWJ for ; Tue, 30 Nov 2021 21:44:01 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 410D9830CE; Tue, 30 Nov 2021 11:42:38 +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="VtYvnz3d"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 3E2E9830B3; Tue, 30 Nov 2021 11:42:28 +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 EUR04-HE1-obe.outbound.protection.outlook.com (mail-he1eur04on0611.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe0d::611]) (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 F0A87830B9 for ; Tue, 30 Nov 2021 11:42:22 +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=X8zy+cnhaJK0k3XfKrVVuwJoOMuKXuckVeGpK3DPjf2OipF2fWdFROqCeTrxBtoMA5gozMcUndjgFSqfWz2cK4DvJ5LqCxFfU8QwfhGx8DNn/E7PqXyrVxErH+DRSkLxuavYxy3Mk+Sag+KXtHpBoePD49WyHR3GYTz96J2onpkdK0yA0xf5kma8wB3Oaz4c1eK7sI1Gsb9Gk5aPUmGkDQ6pRd2bgrSIptDBvBPLz4ov1x/VXvSfOU3cp3I4xLyb3aFgfLsSsci2ZvlLsA063n8g9C4NKf17lwgsq1KqbWhDx2D1fa9GxDJ+5B6DavhhNhBvt+TIR5AMswW3hji4QA== 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=Bl/Rf/sxyGEPjci2xPi2MIKYt/v/xCDfuUslgsVvhqY=; b=Nu8gLXubvYMGG6/pcuO31eqGTwke/dt+C7lw08rTtLs1HKrnA7N30v/Upgd5MM2FyywL2a2EJcsFlhOl/Ko+3sf8gz6xuj3qBDuE+dtt22OjFpBzpesV420hkRus7N2/Hb93aI7jBNPKbHtmCzgAaqhJSjSUeluCsVa4HJmh827iBKJzat9pCOfDLHA/to5ifGkLYjyyLmQoBYd4iOOHaQIyg5reQ+lxjxHAxiXm+WKFFIjDw0swqtn/vNv9JMnWu88b40VhBUr4FHRA2m67iOeBjMuD7VypfLhTj+TAG8rnxEYxmUEGToUk6b4jBMt6OxZIHkyXTcecgoncRyG1og== 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=Bl/Rf/sxyGEPjci2xPi2MIKYt/v/xCDfuUslgsVvhqY=; b=VtYvnz3dIvDItESauqHrjyRiNRgYUxeefKDqiisih91D+K2S8RwbDLAoAQoCjHWv7EnOuSjlpEC93ML4DoNO66xCki9Qs39x0vGOKwwgHt6o136OcvtmHPiCqxttDWpD6ABl9Vub7Fs/FjfaJ6AfbwF4085B66qsfhi0dI+Q5Ys= 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 VI1PR0402MB3709.eurprd04.prod.outlook.com (2603:10a6:803:1e::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4734.23; Tue, 30 Nov 2021 10:42:21 +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.4734.024; Tue, 30 Nov 2021 10:42:21 +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 v6 10/15] crypto/fsl: Improve hwrng performance in kernel Date: Tue, 30 Nov 2021 16:10:43 +0530 Message-Id: <20211130104048.6207-11-gaurav.jain@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20211130104048.6207-1-gaurav.jain@nxp.com> References: <20211130104048.6207-1-gaurav.jain@nxp.com> X-ClientProxiedBy: SG2P153CA0054.APCP153.PROD.OUTLOOK.COM (2603:1096:4:c6::23) 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 SG2P153CA0054.APCP153.PROD.OUTLOOK.COM (2603:1096:4:c6::23) with Microsoft SMTP Server (version=TLS1_2, cipher=) via Frontend Transport; Tue, 30 Nov 2021 10:42:15 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3a88c4dd-fd17-468d-0445-08d9b3ee1698 X-MS-TrafficTypeDiagnostic: VI1PR0402MB3709: 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: asdujSGGxkUZ6pwb/SHe8U3yuYqNl2nfUhx7w7F31LvDqwgFFP18T8UpEixQZAYQV9TU9sIPKCRjAwDH/VBsVFRTRcK9LYnfcBpUItiSpkwFOYxztzZaf5XWhXZkCMhPGtyUvuGfJQFAkj70szyNw3miPk4g6FqfA+dOUo6ECMjGgTq/wlLgVlcM3UFpsecG1yO1YxbQqO43Xl29+piZ3qFnLfP4A13fGFp3WHv2+E9AL/T1OgUMxNOsLkoeKN7lKGkTMR6nbg3AxS5fo7iQalsdPGOT92kTfccX5/Sln4lbbvPtZAKynam9lGGqfHRZrFVs17qm+82Kjovu81MwKG4s8IbqmvfbhFw6QiHBFQIBKvwaQKlF8bbU24rasMoFidwtJ48xTacXSw5FFnnN0nw58ZhVz7ldh1voMFaxEyrokPFExp+zeluMceGJGevblUYtDN7jkvoftnmbBIZU9JJKOklHVIt5S3Qp5tvG/0lNNe0BSFcE0qnt9oKvRBJGP/W7Ii46htVB17yU1RtKYmw6YRi3RKI4AMsjylGPfDcdXdvyWO+RMEV0jDOFuWLb3c9Xbo0pynZ9pAZ/qfpOkRMX/mgIOUlQ3WBEls7bQt+CtjZeCB2HU9Scmrf+72QDpFShizK/TMdTVlQuwTKR//3LeSnZU3pl2nHisbIzKYZWJZfJSz2I6SQKbLiua5QQk3pYSDuqMhxCtL7EYyu1kqZVKU2dVHgfOhjnODsizi8= 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)(55236004)(52116002)(83380400001)(54906003)(7696005)(4326008)(38350700002)(6486002)(66556008)(5660300002)(8936002)(44832011)(38100700002)(66946007)(186003)(8676002)(6666004)(956004)(36756003)(6916009)(26005)(2906002)(316002)(508600001)(86362001)(1076003)(66476007)(1006002)(2616005)(110426009); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: cBfgHpEbExkcT2Tp/b+kDKCPWvnjcKyWwnolBFlmCLbNihebfRTlu2zosKhUOlQwzp3ONSswfS7f5w4t9azEQ/MAjt2s9n6gH0vPc4P3lKuRUAjbMKhOrGAibm+lP+RPK1iYjXRLyPeaJfUQ/dde+i8c9mqo1/QLGRNswZeelxC2QcL2Z7Gk0q3JIo6rwm4Zlza1+vvPJMKVLay+r8z2SM3bpQK+voFTzRjDC4BjTny2XBl8KpGoeBAopmifjvIYFLsYzH67PJ3uSuNS0OHLHjKPkO8asz41HJdgYrt4kqdADJNBNEGYcT9XIKFM2DRNvjyOzpiYiTrwR5b81Picauo96swqQdduJsanBZQaZXauznofIHzlayc5f9pqfOanp+qMjeKT4/xNiDnQyEbVVhgCis1xKoBTtyt6AUGPBIC/Ug+2jE6Em9NEoh1+jhfFGUVZTKAWIigESqb+RO77DVgmfIV2gP5tYRBZ1Qqs1G1beEWj3+mfGDHrt6eTQeryhkd0dgkUzlxyKY/2KFZ5w6/qgFozM4N86m99mSs/9lCL3W89AruUbCipyC91MfYy+9IgWmKj5s77HcVO3aFPpgHf7icEHwPWMTauSB/C/JQntYG/aTO4Q7M1h17DRVtcgPsjYQUYfpcbIeq7QRf+fRxw0g9N8zPKX6x6nPalvtxY7elDgbd2Wny/zdyhJMuxlp6CPUG0ibbGrFgNKbnF5T8Kj5teEum1ow4+CEiW/c3MhFWSqeKezlwq0rIRC/cJwEOqK7nH3akI7Be3Ah0jf3nSqV80JATDuutTosdcDLwU+8S7oioNwRkSDKYLjs7b/JSjF0vyUcNPX3EpVDoI4QwVQp/Ws3gxNJygsbJPeRsJkuloNhV3ANDbXwTyD07chLa/KK9orm+qxezGKQAhxdBgP5f6y+L3T9ICdbXSe3TM/nr1b1xTgqlNX2smSy7ECEJdmMtxz55Cy1Hzrj+HnO11KtH+LzeVxvGla4oLTxB4FkoQ2hfPw1fLo1C7W8Qd7UifTM/F9PEd8rsYnWOJQJ4xvkuz8a8HMY4UooaNYOC/bqqQktlIJ9/H/jrRWuiKxJJio/9jacmU/NIMW3au3KZ0nJ0fGiE3TXpZjYc2tmiQPJI58mlZhk/9s8V5nuM7YBPJa3QyrD+URR30tI953ujZZWDmEkWPpIGbhTkkdXatdP7m2JbYNtZUxrnXUh0Toa7voOHLW7G93Yan64Q7ay7IwAgVoDW7fsq+PhsFYGTX40aWGwRVmEDSjoHlLJpQXSKX4Q8eoxL4WCbs91xM3bddgtJ286R/kBo9z8ORlaH7SMY4RW6lav/pzcAyC7CplR5wPRYDXrvg+8pB0qUSqr83wTZMGw1Vb8ZvpAvWXUJ85qfXFcuvPh2T8rm+bnjPglclyuoKGu5Luq+mUlprjpCNfNeNImv9zQN5Jbl9jmpKyztiLENBiNyxGAVH5agpuaf7zoWHVJJIgMQptfVYAMHCRpncrzCbmVc24HVaCsfzW43KBOIvO8xHT0t0OSi94U0zNbMOfqFM1yZvX5nHlERiD1k4EnB0OoJEXRrDSj19x8xEWbYaZ7WUGqyxfxq1OnPBEsoJy7V5u4S6HZKWAhHtnCJugMZttwLcoF5LjV4= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3a88c4dd-fd17-468d-0445-08d9b3ee1698 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5342.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Nov 2021 10:42:21.5013 (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: LUlQuCKvEs0m3AU+fN2pXE8hmHQV+dcE5e9HVckXHxWVjKlwjNu94iqAdInSg72BmUBzituRKUcEqcSKA38fnA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB3709 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.37 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 9b751aca9b..eb3275ba91 100644 --- a/drivers/crypto/fsl/jr.c +++ b/drivers/crypto/fsl/jr.c @@ -602,30 +602,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