From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 19D01C433FE for ; Thu, 6 Oct 2022 03:45:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:In-Reply-To:References: Message-ID:Date:Subject:CC:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=teObTIheKLpJeEuKGNGYOBEClQxae4yh1t5VCkhPo20=; b=fQgbLHuHMST4po Kqk4vFFGEOZO9My2qiFiu6pcy6W1SlF+2VY9+DribH+L2XbYUecMBN8akorwJBR3CIxZ/ITISZQ+r K9qc3NdOlZfq1UT+yzahdFKhA0EmzvbD7DCC1bHI9AxZRKDa34qXp9q3tlXK2Cb1pX9eW76VpH9cX KqVRygomdKlU37O0nUjgQRTig5VfDs6SgvX83lbNEI8PXz69nQES3VYzl//t/VnMaWCsIGYXD7nuW 59BF5Xgh2OccplXvzrNqCAyryKryT41f6FjBv1F5aqejec5HBm8NXXPFrtmE7iv8hYQFR+KNxRRGg Ro0Gv9BSrpoek/OcuTow==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ogHnV-00HCUf-NQ; Thu, 06 Oct 2022 03:43:45 +0000 Received: from mail-sgaapc01on2103.outbound.protection.outlook.com ([40.107.215.103] helo=APC01-SG2-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1ogHnS-00HCS1-NE for linux-arm-kernel@lists.infradead.org; Thu, 06 Oct 2022 03:43:44 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ZRH9F+HVuUonusY2ZSy62fZcKNOAof7PtGxIwQB+jKtp+RuBfvxnWBNupz9DU1t5oijaaAmnP9NFYV/ZEXbPZFwAEq9aztxfq7f1ml9bcXCxct4DoGq3poL6uvh+5qfPQpVL6IbvN9YNU3uP3LnY7xqAss51rQdv3JtIwqy56C+N6DbRQ56cg3zHtYskzG47m3kzSx4fHTdIrMOSakCXRpWZ3Emsa+WlLE7wG4BpA4Mlepp7xo7YeSSTYYZKRJMUS9LbwUdJRKQjor53Hq36uPeqxpvA7gxSuhHC6A4oR38aDU8GLy+qg9cQ0thKJ04UfcMPTUvh+QfPGH0kNgswrA== 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=vbdezJ/Ux9AUWzE0eThHB07x8j1V6y/BaR2XmUckQNA=; b=IK0gjXYo3OuDemyGGNdfRH1LjDZhoT41yYjXvBJNzm7fa8NkUBccnm+91/tVJD9tHt7gXlORF8rlq3+xbecOTmsJ6SgproyMw15/YXxd+2vY1TDApFptvm+1PxHzHrnav6zjGS/5adirk27p/UgFG/nHV0x1XeJWhipuZVBOYpm0OS/x9gUvUDIm76286UJPwsuAhVEiFO/fRvEA4f3DFZ9SVvSdIgE5NSOpcgQgAXE6uzkwSSmMIN4PLzH9Z8M/Nveq+t4SRUrSCGj7YouEfkBHJHHG60Ya1F+pzjtkE5f7u4oqCjquZCZDqNwY79tfETuUqyEdUQm5+4yocFyQSQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=aspeedtech.com; dmarc=pass action=none header.from=aspeedtech.com; dkim=pass header.d=aspeedtech.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=aspeedtech.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=vbdezJ/Ux9AUWzE0eThHB07x8j1V6y/BaR2XmUckQNA=; b=C33RQ1TLXiunuypcltLVxyP7ltY2ju39qlZin1BsuHG0jJsSOJsC+KdHhy5C21gaQID/6GxdgvEariHxhfmL+zwzx08YSu6LgkSX+UxYKQiiZ/4484jz6/FpsGSmaF2fZcb5IIWwmNB12Tg6VkVhn90/mE5wQkhFKG2sCla4NisPlze6XvpBUpmiwysj9vhuKjbYeem2boUiFsb0XsMuKDhOYDul3xLYvTrfOcOSTNL7pfSdAwTIoQcOj9Cd4NydIP2t/dIDyMsE4AydvfFwcWVzEOS6ZO6Eu41Q8jLOnFNnFBE4kTuS/tno4SnrimylALNWWfOAQNxfK/9c0gDfIg== Received: from HK0PR06MB3202.apcprd06.prod.outlook.com (2603:1096:203:87::17) by TYZPR06MB5417.apcprd06.prod.outlook.com (2603:1096:400:203::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5676.34; Thu, 6 Oct 2022 03:43:30 +0000 Received: from HK0PR06MB3202.apcprd06.prod.outlook.com ([fe80::c94b:7dc7:548:3c18]) by HK0PR06MB3202.apcprd06.prod.outlook.com ([fe80::c94b:7dc7:548:3c18%4]) with mapi id 15.20.5676.033; Thu, 6 Oct 2022 03:43:30 +0000 From: Neal Liu To: Anirudh Venkataramanan , Dhananjay Phadke , Herbert Xu , "David S . Miller" , Joel Stanley , Andrew Jeffery , Rob Herring , Krzysztof Kozlowski CC: "linux-crypto@vger.kernel.org" , "linux-aspeed@lists.ozlabs.org" , "linux-arm-kernel@lists.infradead.org" , "devicetree@vger.kernel.org" , "linux-kernel@vger.kernel.org" , BMC-SW Subject: RE: [PATCH v1 1/4] crypto: aspeed: Add ACRY RSA driver Thread-Topic: [PATCH v1 1/4] crypto: aspeed: Add ACRY RSA driver Thread-Index: AQHYvpFMrKBbnJzDUUCwT0oBN/hz9a4ASeyAgACZLjA= Date: Thu, 6 Oct 2022 03:43:30 +0000 Message-ID: References: <20220902060012.3758637-1-neal_liu@aspeedtech.com> <20220902060012.3758637-2-neal_liu@aspeedtech.com> <1fe9163d-69b5-6520-76d6-05ed0d4a100f@intel.com> In-Reply-To: <1fe9163d-69b5-6520-76d6-05ed0d4a100f@intel.com> Accept-Language: en-US Content-Language: zh-TW X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=aspeedtech.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: HK0PR06MB3202:EE_|TYZPR06MB5417:EE_ x-ms-office365-filtering-correlation-id: 1ccb8c24-32a0-46a4-87db-08daa74cefa4 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: kpHkkqvORq0UFZfJz/x0YC0sCR400ovmshCgXCTTizbING8wN8PwQHd+42T1VBdo+4N70N8lNZME/lvptyh9hNfm6Mmz/56Viu90KWVYU+nQsx7ek2oHDx59E7RdPJUpPUFl0PiyuvpEW9D6FQ5GqfvLB2qcil4b9uty0mXP46ph5ysBNZDVA8Zvb28jhS6bG7xzXIgdzxxgAkRBvOZfQcWghn4eL44Mc1SrLZbKXyC6BPsl2mRy8JrYq4fOuMXGKFgb0ZfgXnPth6+kfPUAdjFFbIOtE7q13MCmPahp/mRAUMn9aS7duKohhGknTxX8bypQPu26Db7LpWBUapY/DwZBVP6v4cCDHHGMsXSkiiHkSxNE8AXCBGXMiMRNP51nZvlPzCnFH+11MKloc8kso1zTjvKE3A8DyQ85i1xtd+cA2SBief42jkaGF2WviBx6fNgBLRbq61fiucJQOnA3Y/CsEhjl53Ie2T3Y63apJKuHnQbJmMIGL+LaAPd+EdyYhEYxEoyNFTSQhK2pWBagAzRZob/hihNKT0uWLCOpCNUVTOIQQAZshXgi6ECScWPtG+YCyHtK1wQrnNJHNjcBaDbvXgN/zpsc+FddWiMH3G93YYV4pINJJgfQJNiStXR0GaqAEaKddJcrPJo9MVcv0Y/xVeMaZRGKIyDMwBAE7lPGkwhyQtkmynByaINj3t48zDis66TpO1sf5WkaCHI22JNgK9lsgzlX/2luhsKtOq6B7giakh9rPXrbFDi19nylEL/NWsPQZoayKQ1ykQcwnw== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:HK0PR06MB3202.apcprd06.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(366004)(136003)(376002)(346002)(39840400004)(396003)(451199015)(478600001)(54906003)(316002)(66476007)(64756008)(66946007)(66446008)(8676002)(4326008)(107886003)(71200400001)(66556008)(76116006)(110136005)(7416002)(9686003)(26005)(41300700001)(8936002)(5660300002)(2906002)(6506007)(186003)(7696005)(83380400001)(86362001)(33656002)(122000001)(38100700002)(55016003)(52536014)(38070700005);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?TThvRzlJMEhhYUZkcHBOc3d3UmF2T0pBb1R1Q2t2UVI1VlMrL3dBT2ZpQ2w3?= =?utf-8?B?cGJVV3o1bWM1dEloZUtKYk1RT1ZsT3ZjWVlSdUZRaGFEWVBpSkZha1NKVjJQ?= =?utf-8?B?b2xsTnkybkRLTjJhRWNubERORGRiUFJ4Ly9VaTFlTzZyWWpHeklzR1RTd3Nj?= =?utf-8?B?YXg4TDFjTGJ4dDNVa3VQNHR1VHRRWSsvdjhDaVpsLzMzM3BFU1UvbTJpdGEy?= =?utf-8?B?U2RZS2NxRERKWUFqRmlRTThSNUFnUTArVWJYajN5Z0tSTmx6ZU9EUFNEbC8w?= =?utf-8?B?MlhrQnFDT09YMGRNak1aNktRc2tFYzkvZTFJNkZyOTlpbkU5NVUxcUtYaEdo?= =?utf-8?B?VklHdUlXV09nUW5Palo5L29Od1ZaMzRuNDdJZTJPbHF2RkJoQkVQV1VHSzR4?= =?utf-8?B?UU9aWnVhY0RmeTl1anJwVW5WVHNOZ0VoY0hBcTI5bURta0tUVXZKN0ZqT3pE?= =?utf-8?B?NmxoaTBranpQK2JVcm9BSUppZjYrTXI1L0pKQ1pIcFBhSGlBaVhoeWFna3hm?= =?utf-8?B?SWM0dmJ4R2hXbmRTbzc1VnRjOEZHUFJHeXVNRm5nQXdMRktuRW1hQnpCRG44?= =?utf-8?B?TVlzbEJUd1NDd2liYnhheDJ0R0xVOXhyR25pZ3pxbjhJNXU3LzhHWHBla1gz?= =?utf-8?B?TlhmQXVndWQzRFFYdm5zZ08xc29CQlBucStTYWs5UXlXZUpWaGZhMVRCMDlO?= =?utf-8?B?YklUMk9jMUlnN05aNFNINXhabHdPWk94SnJNNVFVN3Z0TlhIekh0aU1mSXNz?= =?utf-8?B?d0JXMXJ4MEQvYWVQOEFKWFU0SlF0VzF5d2FoZ0FuT1hLVVVUUUdjdXBCNzVX?= =?utf-8?B?NlF3YjZlbVZGSm5MdGtjdm53TzdhRXZEQWsvODVLNGI1RFcvRGU5LzI4VEZ3?= =?utf-8?B?cUQ1UnEyRkN6ZUUvZEdQS0JobHY3NUxTd2U3c3hCcUNnRnowRjRoODV5UFM4?= =?utf-8?B?aDNNTHhlemU4MjJITTBtTGJnVXprekRWU0dnRHp4OXdod2NLSVpreTg2ZTdZ?= =?utf-8?B?T2pkQm15ci9IVFNWUmxXN3UyNEZITkxadnI1ckpjOXlFMVhSQ1NsREJVYTU3?= =?utf-8?B?N2d0d0d6cktSMjAyUXcvZTZqMG5kQTlwV0RtSUpCNk5YdnBPVkV4aXg2a3BL?= =?utf-8?B?UEFYamI4K21oTE1qTlU5dGFiL0d1UWdnU21jY0ZYaDU0UjVySkZJc1duMjBU?= =?utf-8?B?TnViQ0RPSlhUMCtzOWpSS21lalEzMHIvVnQxL0kreVVEd2w2b29JSy9JYTlC?= =?utf-8?B?eUMwTU5BVmd5dW9GelNuSzFzUXVFcW40RUNPZSt4RHcvTmUwQ3lWS3p6azRi?= =?utf-8?B?bHdqNjg5RGlFWENrUllEUFp4VG9qSERJMFJqM0ZFNW5weDJvRllLS09qQ2lx?= =?utf-8?B?aEVyL0lLS01KT3AzclhqUnlaQ0txSlg2bzVncVc0V3JmbFhwK3RHYU4xSFhS?= =?utf-8?B?YlNHRTlBKys2YkNyaW80WDUwa0EzRTd0MVV0MlpmbDdSWGFBc0pDN3dBTGFp?= =?utf-8?B?TExSWmVxSGZhWXFPMU1WUHZiVnhaeS9OM1k2MTVrUldkZ0VjdWVOLzF2THFp?= =?utf-8?B?Vm9PeE9uYU9LakFqdXUralBpcEhaWXlNOGFhb00yemZCNlBNaDB3UDBJUGxM?= =?utf-8?B?bDBUc09vV0o4QWRuckpWa1BaSW9DS00yNTRBUkdoZDZscWFtRk5uL3pOT0dH?= =?utf-8?B?cE5mclQxQnhxb1FmZDdPbkk5eXlpcFBlL2hMWVdNZjYxRlNaWVpab3p2MzBO?= =?utf-8?B?OC83NFV3a3hMckxpb2Q0aUdvRE93NHdXNlU3UW01VE9TdkJMWFZhSVBsdXVz?= =?utf-8?B?Y1o4dzBIamlHM3doRGorNiswL3JVS3A5TllYcmZkM1dsSmNPNEtLY1FkLytS?= =?utf-8?B?WnNlZnYxTkVxYzRsOUhydXMwNUVaSno3SDFwckQxS1JwNG5ZVXBqbzZBeEdo?= =?utf-8?B?MkJQSS81TGttMWNVZmVsVkpXWFBRbng3dCtKRlRiRktJdmxFOXo2dVRJMnRF?= =?utf-8?B?MFRVV29lNEtTSVkwR0N1NHdDZ09yTHBERnlTdUZxcGZKY3lDRzdHdGY3Q1VR?= =?utf-8?B?UFpBTnNhdkM3NE5OWTZ1Vm9aK3ViczdQODl0a0p6WnloU0hZb29oS3B0TnZL?= =?utf-8?Q?hflMnKoTlob07UgcAp88ZfDIL?= MIME-Version: 1.0 X-OriginatorOrg: aspeedtech.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: HK0PR06MB3202.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1ccb8c24-32a0-46a4-87db-08daa74cefa4 X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Oct 2022 03:43:30.6080 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43d4aa98-e35b-4575-8939-080e90d5a249 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 76Qvp9v2t9691RFNfTT6DHYyUS/SwRREraLUdDJvSEDR5/xZox7NdRbQZUcSZPkwq0C1z4t7YPOFtj0E72cmZA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYZPR06MB5417 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20221005_204342_958301_BF222F47 X-CRM114-Status: GOOD ( 24.49 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org > > ACRY Engine is designed to accelerate the throughput of ECDSA/RSA > > signature and verification. > > > > This patch aims to add ACRY RSA engine driver for hardware > > acceleration. > > > +static bool aspeed_acry_need_fallback(struct akcipher_request *req) { > > + struct crypto_akcipher *cipher = crypto_akcipher_reqtfm(req); > > + struct aspeed_acry_ctx *ctx = akcipher_tfm_ctx(cipher); > > + > > + if (ctx->key.n_sz > ASPEED_ACRY_RSA_MAX_KEY_LEN) > > + return true; > > + > > + return false; > > return ctx->key.n_sz > ASPEED_ACRY_RSA_MAX_KEY_LEN; Thanks for the review. I'll revise it as you suggested. > > > +} > > + > > +static int aspeed_acry_handle_queue(struct aspeed_acry_dev *acry_dev, > > + struct akcipher_request *req) { > > + if (aspeed_acry_need_fallback(req)) { > > + ACRY_DBG(acry_dev, "SW fallback\n"); > > + return aspeed_acry_do_fallback(req); > > + } > > + > > + return crypto_transfer_akcipher_request_to_engine( > > + acry_dev->crypt_engine_rsa, req); > > +} > > + > > +static int aspeed_acry_do_request(struct crypto_engine *engine, void > > +*areq) { > > + struct akcipher_request *req = akcipher_request_cast(areq); > > + struct crypto_akcipher *cipher = crypto_akcipher_reqtfm(req); > > + struct aspeed_acry_ctx *ctx = akcipher_tfm_ctx(cipher); > > + struct aspeed_acry_dev *acry_dev = ctx->acry_dev; > > + int rc; > > + > > + acry_dev->req = req; > > + acry_dev->flags |= CRYPTO_FLAGS_BUSY; > > + rc = ctx->trigger(acry_dev); > > + > > + if (rc != -EINPROGRESS) > > + return -EIO; > > So -EINPROGRESS return is converted to a 0 return, and all other error returns > are converted to -EIO. > > Why not have ctx->trigger() return 0 instead of -EINPROGRESS? Then the code > here can just be: > > return ctx->trigger(acry_dev); Yes, why not. I'll revise it as you suggested. > > > + > > + return 0; > > +} > > + > > > > + > > +static u8 *aspeed_rsa_key_copy(u8 *src, size_t len) { > > + u8 *dst; > > + > > + dst = kmemdup(src, len, GFP_DMA | GFP_KERNEL); > > + return dst; > > return kmemdup(src, len, GFP_DMA | GFP_KERNEL); Same here. > > > +} > > + > > +static int aspeed_rsa_set_n(struct aspeed_acry_ctx *ctx, u8 *value, > > + size_t len) > > +{ > > + ctx->n_sz = len; > > + ctx->n = aspeed_rsa_key_copy(value, len); > > + if (!ctx->n) > > + return -EINVAL; > > aspeed_rsa_key_copy() calls kmemdup(). Feel like -ENOMEM would be a > better code to return here. Same here. > > > + > > + return 0; > > +} > > + > > +static int aspeed_rsa_set_e(struct aspeed_acry_ctx *ctx, u8 *value, > > + size_t len) > > +{ > > + ctx->e_sz = len; > > + ctx->e = aspeed_rsa_key_copy(value, len); > > + if (!ctx->e) > > + return -EINVAL; > > Here as well. Same here. > > > + > > + return 0; > > +} > > + > > +static int aspeed_rsa_set_d(struct aspeed_acry_ctx *ctx, u8 *value, > > + size_t len) > > +{ > > + ctx->d_sz = len; > > + ctx->d = aspeed_rsa_key_copy(value, len); > > + if (!ctx->d) > > + return -EINVAL; > .. and here. Same here. > > > + > > + return 0; > > +} > > > > + > > +static int aspeed_acry_rsa_setkey(struct crypto_akcipher *tfm, const void > *key, > > + unsigned int keylen, int priv) > > +{ > > + struct aspeed_acry_ctx *ctx = akcipher_tfm_ctx(tfm); > > + struct aspeed_acry_dev *acry_dev = ctx->acry_dev; > > + int ret; > > + > > + if (priv) > > + ret = rsa_parse_priv_key(&ctx->key, key, keylen); > > + else > > + ret = rsa_parse_pub_key(&ctx->key, key, keylen); > > + > > + if (ret) { > > + dev_err(acry_dev->dev, "rsa parse key failed, ret:0x%x\n", > > + ret); > > + return ret; > > Do you not have to free ctx in this case? I don't think it needs. > > > + } > > + > > + /* Aspeed engine supports up to 4096 bits, > > + * Use software fallback instead. > > + */ > > + if (ctx->key.n_sz > ASPEED_ACRY_RSA_MAX_KEY_LEN) > > + return 0; > > + > > + ret = aspeed_rsa_set_n(ctx, (u8 *)ctx->key.n, ctx->key.n_sz); > > + if (ret) > > + goto err; > > + > > + ret = aspeed_rsa_set_e(ctx, (u8 *)ctx->key.e, ctx->key.e_sz); > > + if (ret) > > + goto err; > > + > > + if (priv) { > > + ret = aspeed_rsa_set_d(ctx, (u8 *)ctx->key.d, ctx->key.d_sz); > > + if (ret) > > + goto err; > > + } > > + > > + return 0; > > + > > +err: > > + dev_err(acry_dev->dev, "rsa set key failed\n"); > > + aspeed_rsa_key_free(ctx); > > + > > + return ret; > > +} > > > > + > > +/* > > + * ACRY SRAM has its own memory layout. > > + * Set the DRAM to SRAM indexing for future used. > > + */ > > +static void aspeed_acry_sram_mapping(struct aspeed_acry_dev > > +*acry_dev) { > > + int i, j = 0; > > + > > + for (i = 0; i < (ASPEED_ACRY_SRAM_MAX_LEN / BYTES_PER_DWORD); > i++) { > > + acry_dev->exp_dw_mapping[i] = j; > > + acry_dev->mod_dw_mapping[i] = j + 4; > > + acry_dev->data_byte_mapping[(i * 4)] = (j + 8) * 4; > > + acry_dev->data_byte_mapping[(i * 4) + 1] = (j + 8) * 4 + 1; > > + acry_dev->data_byte_mapping[(i * 4) + 2] = (j + 8) * 4 + 2; > > + acry_dev->data_byte_mapping[(i * 4) + 3] = (j + 8) * 4 + 3; > > + j++; > > + j = j % 4 ? j : j + 8; > > + } > > Would help if you explained in some level of detail what you're doing here. This is the index mapping of ACRY SRAM layout. And the exp/mod/data buffer location is mixed with some kinds of rule in ACRY SRAM. The driver should deploy the same layout in DRAM before starting engine, so the engine can directly copy the DRAM data to its SRAM. Here is the example of the SRAM mapping: [exp 4 DW, mod 4 DW, data 4 DW, exp 4 DW, mod 4 DW, data 4 DW, ...] > > > +static int aspeed_acry_probe(struct platform_device *pdev) { > > + struct aspeed_acry_dev *acry_dev; > > + struct device *dev = &pdev->dev; > > + struct resource *res; > > + int rc; > > + > > + acry_dev = devm_kzalloc(dev, sizeof(struct aspeed_acry_dev), > > + GFP_KERNEL); > > + if (!acry_dev) > > + return -ENOMEM; > > + > > + acry_dev->dev = dev; > > + > > + platform_set_drvdata(pdev, acry_dev); > > + > > + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); > > + acry_dev->regs = devm_ioremap_resource(dev, res); > > + if (IS_ERR(acry_dev->regs)) > > + return PTR_ERR(acry_dev->regs); > > + > > + res = platform_get_resource(pdev, IORESOURCE_MEM, 1); > > + acry_dev->acry_sram = devm_ioremap_resource(dev, res); > > + if (IS_ERR(acry_dev->acry_sram)) > > + return PTR_ERR(acry_dev->acry_sram); > > + > > + /* Get irq number and register it */ > > + acry_dev->irq = platform_get_irq(pdev, 0); > > + if (!acry_dev->irq) { > > + dev_err(dev, "Failed to get interrupt\n"); > > + return -ENXIO; > > + } > > + > > + rc = devm_request_irq(dev, acry_dev->irq, aspeed_acry_irq, 0, > > + dev_name(dev), acry_dev); > > + if (rc) { > > + dev_err(dev, "Failed to request irq.\n"); > > + return rc; > > + } > > + > > + acry_dev->clk = devm_clk_get(dev, NULL); > > + if (IS_ERR(acry_dev->clk)) { > > + dev_err(dev, "Failed to get clk\n"); > > + return -ENODEV; > > + } > > + > > + acry_dev->ahbc = syscon_regmap_lookup_by_phandle(dev->of_node, > > + "aspeed,ahbc"); > > + if (IS_ERR(acry_dev->ahbc)) { > > + dev_err(dev, "Failed to get AHBC regmap\n"); > > + return -ENODEV; > > + } > > + > > + rc = clk_prepare_enable(acry_dev->clk); > > + if (rc) { > > + dev_err(dev, "Failed to enable clock 0x%x\n", rc); > > + return rc; > > + } > > See if you can use devm_clk_get_enabled()? It combines devm_clk_get() and > clk_prepare_enable(). Okay, I'll try it. > > > + > > + /* Initialize crypto hardware engine structure for RSA */ > > + acry_dev->crypt_engine_rsa = crypto_engine_alloc_init(dev, true); > > + if (!acry_dev->crypt_engine_rsa) { > > + rc = -ENOMEM; > > + goto clk_exit; > > + } > > + > > + rc = crypto_engine_start(acry_dev->crypt_engine_rsa); > > + if (rc) > > + goto err_engine_rsa_start; > > + > > + tasklet_init(&acry_dev->done_task, aspeed_acry_done_task, > > + (unsigned long)acry_dev); > > + > > + /* Set Data Memory to AHB(CPU) Access Mode */ > > + ast_acry_write(acry_dev, ACRY_CMD_DMEM_AHB, > ASPEED_ACRY_DMA_CMD); > > + > > + /* Initialize ACRY SRAM index */ > > + aspeed_acry_sram_mapping(acry_dev); > > + > > + acry_dev->buf_addr = dmam_alloc_coherent(dev, > ASPEED_ACRY_BUFF_SIZE, > > + &acry_dev->buf_dma_addr, > > + GFP_KERNEL); > > + memzero_explicit(acry_dev->buf_addr, ASPEED_ACRY_BUFF_SIZE); > > + > > + aspeed_acry_register(acry_dev); > > + > > + dev_info(dev, "Aspeed ACRY Accelerator successfully registered\n"); > > + > > + return 0; > > + > > +err_engine_rsa_start: > > + crypto_engine_exit(acry_dev->crypt_engine_rsa); > > +clk_exit: > > + clk_disable_unprepare(acry_dev->clk); > > + > > + return rc; > > +} > > Ani _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel