From patchwork Wed Jan 17 12:03:45 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Breno Matheus Lima X-Patchwork-Id: 862237 X-Patchwork-Delegate: yorksun@freescale.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 3zM5M96Vbrz9s82 for ; Wed, 17 Jan 2018 23:03:00 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id F19E2C21E5A; Wed, 17 Jan 2018 12:02:56 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=BAD_ENC_HEADER, RCVD_IN_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_PASS autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id CA120C21DC5; Wed, 17 Jan 2018 12:02:52 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 9036FC21C34; Wed, 17 Jan 2018 12:02:51 +0000 (UTC) Received: from NAM02-BL2-obe.outbound.protection.outlook.com (mail-bl2nam02on0043.outbound.protection.outlook.com [104.47.38.43]) by lists.denx.de (Postfix) with ESMTPS id A8D79C21C34 for ; Wed, 17 Jan 2018 12:02:50 +0000 (UTC) Received: from CY1PR03CA0042.namprd03.prod.outlook.com (10.174.128.52) by MWHPR03MB2704.namprd03.prod.outlook.com (10.168.207.138) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.407.7; Wed, 17 Jan 2018 12:02:48 +0000 Received: from BN1AFFO11FD021.protection.gbl (2a01:111:f400:7c10::141) by CY1PR03CA0042.outlook.office365.com (2603:10b6:600::52) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.407.7 via Frontend Transport; Wed, 17 Jan 2018 12:02:48 +0000 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=fail action=none header.from=nxp.com; Received-SPF: Fail (protection.outlook.com: domain of nxp.com does not designate 192.88.168.50 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.168.50; helo=tx30smr01.am.freescale.net; Received: from tx30smr01.am.freescale.net (192.88.168.50) by BN1AFFO11FD021.mail.protection.outlook.com (10.58.52.81) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.20.345.12 via Frontend Transport; Wed, 17 Jan 2018 12:02:48 +0000 Received: from b58964-3.am.freescale.net (b58964-3.am.freescale.net [10.29.240.193]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id w0HC2ip9026500; Wed, 17 Jan 2018 05:02:45 -0700 From: Breno Lima To: , Date: Wed, 17 Jan 2018 10:03:45 -0200 Message-ID: <1516190625-3653-1-git-send-email-breno.lima@nxp.com> X-Mailer: git-send-email 2.7.4 X-EOPAttributedMessage: 0 X-Matching-Connectors: 131606641683470180; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(7966004)(346002)(376002)(39380400002)(396003)(39860400002)(2980300002)(1109001)(1110001)(339900001)(199004)(189003)(97736004)(54906003)(4326008)(50466002)(110136005)(106466001)(53936002)(2906002)(356003)(8676002)(68736007)(305945005)(105606002)(508600001)(50226002)(81166006)(81156014)(77096006)(8936002)(86362001)(36756003)(26005)(85426001)(316002)(16586007)(47776003)(5660300001)(51416003)(8656006)(104016004)(48376002); DIR:OUT; SFP:1101; SCL:1; SRVR:MWHPR03MB2704; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11FD021; 1:vRpxUWtjPR3XPP3qYFFIL2faEndZbcod8IeLuu2VyuzGUZ6gQEYMYOMWlEFG6fipm1vH6C9QZto2fS8AYC6MVMXrAbLOIjICqCWrXRnD9Xt+3ZIXNPbRcTp/1bMwgIDE MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 0dbbffe6-814e-4dac-1764-08d55da23a17 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(5600026)(4604075)(2017052603307); SRVR:MWHPR03MB2704; X-Microsoft-Exchange-Diagnostics: 1; MWHPR03MB2704; 3:Wjm4ez1Q+skHy8rQTdd0E8JDusrPGAoBZ/aotmqNgGEmeVpNJ7jmcyK4kieO6IDfxKkIhUHaq8qH+CI8SfQTPBWzweGNBuQdnTc+9fVtFFZVTriVtpJ5GYOXI1R3wkrnTV9MfT4TmWHKncKsowU4foAwiNPsi3i00caeFoR7l5umYtfq4u/lvA3fVgfvB177fxodxNtOUhk3Noo8bEKHNDrS0wc3HprNLrPamHLuhXExUDpIuRHg4FNPt8rc431nTnuqD05+xCSXGxnMvQkkYJqyBnByZBbHGn1szx291jBno+oxHb2sX4F9Tv4V5dFxsJkN0J1iDEEmc9DnnOMYdsxjhWBOjs9uGAfLDjoWq38=; 25:UrVZYKt5Rhp5ZEUgJ8pD9P2Cmwa25e+/V3ES2K1kJsqEkwkhahmdN84QX4l7EEmWwE5O1pPgzgbHio+LW2B/uDCCNpCV8HB4McCQxYTbvWpVpUPcRnLAozR/KlzRFn0ydKRcvQ+qUkNCMFpJ8JCrSPqJxv0fbKvY/RMjlN5S9NcUGs5xTszZb54wHosWGZjSmPE7aGvMQfWddrv2XzNqVnG/ZzedqZHWdquUYJgVJc+LLz5Q+a6Ao8F0TDyAB/TTpKS/8eOEe9y9JK59MQvRvoe/vQs0ZKywOitQ3XP/9TGpI9yo7KAVx0s7CbehhOp3xj2o6HgCahf23RCVFh3Ozw== X-MS-TrafficTypeDiagnostic: MWHPR03MB2704: X-Microsoft-Exchange-Diagnostics: 1; MWHPR03MB2704; 31:fA8oxMbRWx0t/bJmi/ipBzq6pmLwkORcA8+uwIt+kp16z4QQvJOxFyJzvM0Xroi2192p3KaUboCA2+YRdn+hdp3vD4PNfH7+EgNQKX/cxnya8j+TI65vWBPXoVCV0XBfFiQ/YZmtAtkR6Z9qSoRtFVbo40R0xditFPzHacMvM3aWsrRTYJXR6/vUQ/VhftSLpQRhBpvUk01tS+c/9ScuZ+PCAgURRXT16qf8KLdiaBQ=; 4:6dK0QGpGU0o4XHIcJMW+O6nDcSG7xjszYKWkaDsAMvN7yTb1mparNpqJ0NkHr9RUD+2qwzx9cmSD2o+icO5c/lry0tgXQNULPbWBvnsS7tRBJM7YykOtv3ftx5DV/YnbR12+qA1RxvXznjY+5/sHsPgvCwoce9BtVjBguPloNwfBAcjFhozc5NhaV9rNasEDu/hGEhldeOIom8xY5PjESyL8/aP2RzGiQxrOSSBRi1HUyllEqcPFWv4dkRAy6rR0ua4DMZscafkLQLr9H3YwpxMPer8LPQvCsKdGAY0TJccPBQ7KYblyvmiYkkci7I2l X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6095135)(2401047)(8121501046)(5005006)(10201501046)(3002001)(93006095)(93001095)(3231023)(944501161)(6055026)(6096035)(20161123565025)(20161123556025)(20161123561025)(20161123559100)(201703131430075)(201703131441075)(201703131448075)(201703131433075)(20161123563025)(201708071742011); SRVR:MWHPR03MB2704; BCL:0; PCL:0; RULEID:(100000803101)(100110400095)(400006); SRVR:MWHPR03MB2704; X-Forefront-PRVS: 0555EC8317 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; MWHPR03MB2704; 23:/kTlItHCJkPc487fFFEEFB5aUZCPPeWV9XH21FwII?= NU98R9MoKg4dfq0oQQ1rGpzWqYkDVkY3UCDywBP/srCP4SpGpwvzhgXW7unSt4RbBW5AiipQdkQiVswdopOCYiJe+kxzg01Yn1xgp+B/SrSShDT7R05Hx+HfpEGClIOOgwrQo2hEiDGVqpIPqyGtKVKPVdCdGRAvhqHrhNGIPU8h1BOLWzjPS4Hv1N5d2fn5JedhwGuJ8TnQNHbC7pps3Dc6u4TQiNU57EmzfV0ekT+NqMhZ0AHeca3mrJKeKTd/5HTsMJauahgPtOM3b72yR6ise7IXC8RB0xkYVCLR/t7z7u09kDw7+a4fWRsfCIsxx/GQf5UkiyZcxdZxKf/SEiRvCw8AOLzLcQUlC4y8dOoSEMLjILEoVTAMA/p7KmQlVoaCOcO/+LHc42qciIfww0IR/OzmIHJvjyGGokgcBzlBYNSDj0LYGix4uE7iebRVh5mpf6XFvGFFQRK+V6bIqyXiNYopF42H/hbOJ0IaXS3WUJXqZfLO8IoFhah4krLzkQUL1vzQhvTFy7nUYh4Ob9ry1OslDXfRcNBBKNk3vyV1EIQfbyvmckBHNDVN+mq2RClx4ArqDFFMkiQr/esciNvQFKhk8y5XpnXjT/VwoWxOB6lquwSaqKdX9vqTof7Pb8hl6sjN+MQe8YzF7z1/k+RQ86zpI08s1M1/Oh1v0KpMUVtvXq2PVklMgrJscpcauCu30cGzhc+1lqC+NMOMWMRPkDBMTCf/HoP9OkS3AJPDN0DBpvG4gxziyWcEl7g/SwpxGwEXQ7ZwjvZLD7BW0wPBl+LoF9kgHk/w1+vvJN/IGdWpmD4kD8SQmtip1CjIgbXvYq7gqZZewivBw49KHqaizwWiKUlmky7XYMfhkZjYEcdmzfXltMESVbgjYdulZ27XEUXn/ptyudEMIQUkdan9M46OpCZ8nQlgKtgmC0BxK5yhnxQrZt3hExxQ9uGcRIXg7Dlp9oSlK7BG6oy4Ie8 X-Microsoft-Exchange-Diagnostics: 1; MWHPR03MB2704; 6:tUwp/LiemyyR8/Ob4RKT/MXv3BFki0jnQyHPqpY9KxSOuHaberEXfs4xFChPU6x1kcHVfs48IScLjCah3dP2g9dgF857W0VutSgj+EpR5dYKLBmm/ETXwJwqBOGiRoJ9IihPRDIvdoJpEsJ8pTk+Yw+KW6Ct0P2tBLZDVrvHkcE15RbqjqIafNjNvNb8LY8znUtMW7xOUvddUblhkMd1/C8TvCe4oHshKQVWt+lr2sA/xlRE9yGiRS+ChvlJy7jIOTZ3IB5YWEzmkSLfvm4SIJOnI9FT232CrPPdomLCyJpL1ma4F4q/uVwtK46zb5gCmucegLP9HG/3nxzWaGzYcexW/RS3MlR++ILkl8OVDAQ=; 5:F2YZRKGaQ/F7whejoTXdQNgn2ST5AQFvB+Oar0frW1c0F+puhvMAQdlBjeBW79DvkuYlBgX3CwDDRQuVIprkJt7D/eVxfbeNgwF78K9u4ZsNPhP2Mo6VzkHYMsNZjnopukv3rU/gDC8LEJuYLWqMdUPqGJRp+9cJm03IpakAyOk=; 24:8yUI2BoynTALYDFme8MXvaKDL0d5yiwyr6q2wFi/8+ryz7o1EGLKz+MJQmEs55tmSX2481xMfva2T2CwnQcsiD4eW0Y32QCLiQyFWjtYkNY=; 7:pWda0e+5b0y9QI9RWjpariSUSXio/HHlHww0C3xZlyN05+GKA0JNKOcMu2tBwywiQX7s+UpVDoq0Ku2jwQ2kB/mV4FmP5qLp3S/aIJWi5JAY4V+kcpw7MjP5x1VPRJVqd0dhC+5LYjbusHTJ7+uxaQGkHUDhrYNBk7+IWhPecnmdApUMF2d2fTpyWi6sjD5gSwG9bF7FohtfGmjvO1GB1Iifv47gW0zlyu4QY1gLq+QERufpV6ctlrlREUkYdi1P SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jan 2018 12:02:48.1598 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0dbbffe6-814e-4dac-1764-08d55da23a17 X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR03MB2704 Cc: clemens.gruber@pqgruber.com, Breno Lima , u-boot@lists.denx.de Subject: [U-Boot] [PATCH] crypto/fsl: Fix HW accelerated hash commands X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" The hash command function were not flushing the dcache before passing data to CAAM/DMA and not invalidating the dcache when getting data back. Due the data cache incoherency, HW accelerated hash commands used to fail with CAAM errors like "Invalid KEY Command". Check if pbuf and pout buffers are properly aligned to the cache line size and flush/invalidate the memory regions to address this issue. This solution is based in a previous work from Clemens Gruber in commit 598e9dccc75d ("crypto/fsl: fix BLOB encapsulation and decapsulation") Reported-by: Anatolij Gustschin Signed-off-by: Breno Lima --- common/hash.c | 7 ++++++- drivers/crypto/fsl/fsl_hash.c | 20 +++++++++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/common/hash.c b/common/hash.c index cf4d70f..69d53ed 100644 --- a/common/hash.c +++ b/common/hash.c @@ -390,7 +390,7 @@ int hash_command(const char *algo_name, int flags, cmd_tbl_t *cmdtp, int flag, if (multi_hash()) { struct hash_algo *algo; - uint8_t output[HASH_MAX_DIGEST_SIZE]; + u8 *output; uint8_t vsum[HASH_MAX_DIGEST_SIZE]; void *buf; @@ -405,6 +405,9 @@ int hash_command(const char *algo_name, int flags, cmd_tbl_t *cmdtp, int flag, return 1; } + output = memalign(ARCH_DMA_MINALIGN, + sizeof(uint32_t) * HASH_MAX_DIGEST_SIZE); + buf = map_sysmem(addr, len); algo->hash_func_ws(buf, len, output, algo->chunk_size); unmap_sysmem(buf); @@ -440,6 +443,8 @@ int hash_command(const char *algo_name, int flags, cmd_tbl_t *cmdtp, int flag, store_result(algo, output, *argv, flags & HASH_FLAG_ENV); } + unmap_sysmem(output); + } /* Horrible code size hack for boards that just want crc32 */ diff --git a/drivers/crypto/fsl/fsl_hash.c b/drivers/crypto/fsl/fsl_hash.c index a63eba3..9373a39 100644 --- a/drivers/crypto/fsl/fsl_hash.c +++ b/drivers/crypto/fsl/fsl_hash.c @@ -7,6 +7,7 @@ #include #include +#include #include "jobdesc.h" #include "desc.h" #include "jr.h" @@ -163,20 +164,37 @@ int caam_hash(const unsigned char *pbuf, unsigned int buf_len, { int ret = 0; uint32_t *desc; + unsigned int size; - desc = malloc(sizeof(int) * MAX_CAAM_DESCSIZE); + desc = malloc_cache_aligned(sizeof(int) * MAX_CAAM_DESCSIZE); if (!desc) { debug("Not enough memory for descriptor allocation\n"); return -ENOMEM; } + if (!IS_ALIGNED((uintptr_t)pbuf, ARCH_DMA_MINALIGN) || + !IS_ALIGNED((uintptr_t)pout, ARCH_DMA_MINALIGN)) { + puts("Error: Address arguments are not aligned\n"); + return -EINVAL; + } + + size = ALIGN(buf_len, ARCH_DMA_MINALIGN); + flush_dcache_range((unsigned long)pbuf, (unsigned long)pbuf + size); + inline_cnstr_jobdesc_hash(desc, pbuf, buf_len, pout, driver_hash[algo].alg_type, driver_hash[algo].digestsize, 0); + size = ALIGN(sizeof(int) * MAX_CAAM_DESCSIZE, ARCH_DMA_MINALIGN); + flush_dcache_range((unsigned long)desc, (unsigned long)desc + size); + ret = run_descriptor_jr(desc); + size = ALIGN(driver_hash[algo].digestsize, ARCH_DMA_MINALIGN); + invalidate_dcache_range((unsigned long)pout, + (unsigned long)pout + size); + free(desc); return ret; }