From patchwork Fri Oct 16 11:32:04 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aneesh Bansal X-Patchwork-Id: 531036 X-Patchwork-Delegate: yorksun@freescale.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id A58221402B9 for ; Fri, 16 Oct 2015 17:19:16 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id A3BC54B622; Fri, 16 Oct 2015 08:19:14 +0200 (CEST) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id myePGehezJSl; Fri, 16 Oct 2015 08:19:14 +0200 (CEST) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id E51DD4A03A; Fri, 16 Oct 2015 08:19:13 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 414C74A03A for ; Fri, 16 Oct 2015 08:19:10 +0200 (CEST) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id woIOzXMB2XSp for ; Fri, 16 Oct 2015 08:19:10 +0200 (CEST) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from na01-bl2-obe.outbound.protection.outlook.com (mail-bl2on0102.outbound.protection.outlook.com [65.55.169.102]) by theia.denx.de (Postfix) with ESMTPS id 7C62D4A033 for ; Fri, 16 Oct 2015 08:19:05 +0200 (CEST) Received: from CH1PR03CA008.namprd03.prod.outlook.com (10.255.156.153) by BY2PR0301MB1573.namprd03.prod.outlook.com (10.163.28.15) with Microsoft SMTP Server (TLS) id 15.1.300.14; Fri, 16 Oct 2015 06:19:02 +0000 Received: from BL2FFO11FD056.protection.gbl (10.255.156.132) by CH1PR03CA008.outlook.office365.com (10.255.156.153) with Microsoft SMTP Server (TLS) id 15.1.300.14 via Frontend Transport; Fri, 16 Oct 2015 06:19:01 +0000 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=freescale.com; freescale.mail.onmicrosoft.com; dkim=none (message not signed) header.d=none; freescale.mail.onmicrosoft.com; dmarc=none action=none header.from=freescale.com; Received-SPF: Fail (protection.outlook.com: domain of freescale.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 BL2FFO11FD056.mail.protection.outlook.com (10.173.161.184) with Microsoft SMTP Server (TLS) id 15.1.293.9 via Frontend Transport; Fri, 16 Oct 2015 06:19:01 +0000 Received: from perf-idc04.ap.freescale.net (perf-idc04.ap.freescale.net [10.232.14.49]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id t9G6Iui6025400; Thu, 15 Oct 2015 23:18:58 -0700 From: Aneesh Bansal To: Date: Fri, 16 Oct 2015 17:02:04 +0530 Message-ID: <1444995124-5509-1-git-send-email-aneesh.bansal@freescale.com> X-Mailer: git-send-email 1.8.1.4 X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11FD056; 1:Fpl8k7+8LSPzqTW3xdAs5WhE+ONYyeJlwdVtdcgr7yh85zhqg03jsqlQMTfj30AwcynznFJFs5BgmxhgfzAdvDEOfAOuP69ZYjPIqcpTj0eP/n9j1I11LC+MLMtSjhugtbJKGTusgU0Rm/LwUvXuFlR5kuyffqvg9KnNGGuMZ9rMc2BgUEDqq+0nsGOBQuECLAfg3dSQYH6xAES9BhK2NaaIJuzMJjP6lHwI7k5y1CblKlaNZSxEcBt8N/ZiAE87RZT9GkCTF/G3cWoiNreKKJm9byK101fl7+D+anZUaOLEgJY//vnJvRtvo3MRgHFd30O2OWoT7KAIkJyNOfDLWTPUO0zFnVFJi3+OdX5vOez4P0cnCd2GrEtSzwCJZ4JwFrSGJzhg2u855jkQyuqjzw== X-Forefront-Antispam-Report: CIP:192.88.168.50; CTRY:US; IPV:NLI; EFV:NLI; SFV:NSPM; SFS:(10019020)(6009001)(2980300002)(1110001)(1109001)(339900001)(189002)(199003)(450100001)(106466001)(2351001)(50226001)(46102003)(5001960100002)(107886002)(50466002)(105606002)(19580405001)(5007970100001)(19580395003)(110136002)(48376002)(229853001)(87936001)(5003940100001)(189998001)(11100500001)(97736004)(47776003)(50986999)(77096005)(85426001)(92566002)(36756003)(64706001)(104016004)(86362001)(6806005)(33646002)(81156007)(5008740100001)(4001430100001); DIR:OUT; SFP:1102; SCL:1; SRVR:BY2PR0301MB1573; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; MIME-Version: 1.0 X-Microsoft-Exchange-Diagnostics: 1; BY2PR0301MB1573; 2:fuD1Jh2Ehvgt8i1sRHwXs8Lty1RNij3oboyubhdXO0bjVsgtnSpHXBYzvsCydI2bz+pvUbjuN5sY+3L/A3LgFvunTJtPFQ19YoKvSa/6VCwNkwLIcvm1oLo+6fnjRwSlpsf0GNE/Ccju4dJpIOVpDjAYh3/6dmPQj1LFMvxGmP0=; 3:LSpj2B4faAPADWBOSbRMcUfkWu2nHHcmOaDaqdpt2jqkozQ/yUrL03Rte50A0PDOHa+Lf1ReraruLWW9HqxFeOuzjdq09tFwwAC3WEKa+FU01DXXe7usy412DglRNtRLj3qUNGMj433tM9o+UjMSpyte+gi5RT3G1XJRX7AWMIEotMmdMvgLxYZvjsK8F2gF9+CWGe0DE6RSrVd5sLS9p9MFWmn9AArj1ABChYaAcIk=; 25:9uCaXjj3NwAPxnpj3s+H3lC5MXJzZgVJ895obxrq3XT4qw72KPXYA28s6K3KCVKlVEJwgVPRlqeXmSWypGvJ329/K9VxrZQS9rZEzgujrLsRMEkwgYnzUePC38DQzYswXeJkKzfaftRR162UejuCpBm6oMZLbT0/pGi+htUEfi8XwP1K6F4MfZxw2D0sfEUYJVQeiKT6RFGVzgQpZWtbs6wrRqOxEth4BysT1Vnk3fEF+vRvRwDu67mIrp066y+hQRS76dHC2XFzTedbOR3ZIA== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BY2PR0301MB1573; X-Microsoft-Exchange-Diagnostics: 1; BY2PR0301MB1573; 20:FG7MveyrD2I+3O1GlvVQj2VEtV5s6ToZBxag7xQr7+Fu6neAq+XtylFJtFTHtbyOdH1sjlXTLW4WHoCfDG2tpeaeUpex5M4C/+4JmfC3inhouKc1XfmwKXtCuaR/ApNHfgi8ODwQ2tS0sj/3IoU+kfqw1MUDbmsG5akE5en32BG7cQOSXHzZ+peGEmls8t0y+CqsYmdjDWYqQ/6b1m/Y+kDxwhU4A5A0B7HsxMNAZWvX4U3unBqadLJIdYrCcwWaSdQg06FCsTWltMJz7t20Hx7EeDkKVVAnLvyDabnf1pcauXFi44E1Jee0fQL+ZjLMLCy3WXrP9Ao9FQ2OTqP6fTHNMALlmvhs8FfV4dKT63s=; 4:v8avrZxavW4vr3mD1L9WeKISQVwNh6dbSnliir7LdezYUn0p0PsWf3rWoLZ+FUHU5yJodjxKPU/sE6cGTD2Ary+FI/5gDjBpBRvoDRKUyDVJVbqUp6NQgH6QhB7/V9VTtvoxUocAEBPMC7I3CO+JHjp/9K1rMDXJXVqc/ueFE2Fz5LMK0ibHHS+J3EOh5SdfMJGWoAWIyd4Er5cqhzeULpdEeOOXOWxaDPTBtVqVHVqvLeMwM4RaBVcRLbHJzWgbu9Ik1cfb20/PhoDHa9xtMuUInwqKRZIbl/tvqGzeGa6pbeb4Uyzz9XXIVV49FdxUKlHtsQw0YPFOIkVi78yTLdJCsU+M4GwH2NofRmgOdKY= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(101931422205132); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(5005006)(520078)(8121501046)(3002001); SRVR:BY2PR0301MB1573; BCL:0; PCL:0; RULEID:; SRVR:BY2PR0301MB1573; X-Forefront-PRVS: 0731AA2DE6 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BY2PR0301MB1573; 23:9ld7z5CdQIL2U73OLXEOYNhfjrUYL332gZ2QYak?= =?us-ascii?Q?T1cMG5uje+P4CBEJEV2mddymKUbVBBU1ffPWz9LUroCsIRk+Isc98TXwmBQ5?= =?us-ascii?Q?Rs3mAr6xDUPnor6T+bazfOqPlfSnnBkJGAwYGNVgBS6LT1XfwrWREevw35Td?= =?us-ascii?Q?vFnlLZ9ftweoF/K9NBBJJJbifey50cqh7AZr4QDQLqI0MXifizV04F3AzwAA?= =?us-ascii?Q?YZosOg7ZWL4m6xZi9iDXl258nP1oBvc2Nb0IGMIN93lvAzZL4w7YV2QKxK6l?= =?us-ascii?Q?voGz4Op9nzqVU+N8OospnQ6dIz+gFF8X7Kx0na5blSCpZMKpvK4XaV25St5R?= =?us-ascii?Q?pz9qXpwl0/z5fh0RAIxral9GfX3vmxSX+yRwTuT1eShWBgmL40YnvKKhChYP?= =?us-ascii?Q?0vI+eQlOd7vqSKGBjGskteylyTCh/2mVPSmrTigG/mY0hwauD89JFVzL5+TZ?= =?us-ascii?Q?6UCuBfOEAA30aAdCFmLaG2afQD7mmEXP9vilD+CVXshHXeoVJyobLxbv7Ql9?= =?us-ascii?Q?+4OAf4h12rtUEkySoclFqYDB/NBHBFdENfKU0teoo056YzCdSdThOYOSdQs5?= =?us-ascii?Q?znd3WbkiCdEso8RWb82CCwFL4B8eVIXy0GnSkEhOwA5cSeo0ZGxeczBXf5vg?= =?us-ascii?Q?YJSYpYcvdIBHgtlTGFIrrY6LbiJEpNPd6cablzPxDvJRkWqIizUGRK/DM2R9?= =?us-ascii?Q?yJwo+rcL3kKqJmPk7LZ3VHCPdKymp5bu22MyUB2MjFYyH9HHjoAV4YKWVZQw?= =?us-ascii?Q?6mT8rHkowyAf16zQfC68NmE3BZQNjTxxVVbvkFRmCXXGtmxntc5OOSZv0vay?= =?us-ascii?Q?oJeOubyV/dzTouLE8wxGE/M3LyqMRZi3pEsWad88Rfzc5AdFWb3GZaM9YQ3M?= =?us-ascii?Q?JIPdVPxSHJR398+7ODAbzBMOdbADgzBnlIRo2tBFm/x+CvpsHLO5DpBD86F2?= =?us-ascii?Q?vP6FaSIIqMXi1TLVYrGDX+3683VQ6cRoEue2/rgsC5l0vsm1dkI7cdGhjm9g?= =?us-ascii?Q?J0i1Ed+sqx08iKAnaGsTh/MrebTHdowRg4dDf64iAp8TtnYuyXVTWgTOLdgv?= =?us-ascii?Q?AAmJlNeyszw27c4xlFxOeYkuV8oH/Vgu01/IjLZqIQuO7/LvEKMcmNw5eeF4?= =?us-ascii?Q?7LR4T3QZGI9k=3D?= X-Microsoft-Exchange-Diagnostics: 1; BY2PR0301MB1573; 5:SFSQZqbBVaEi6ZMklwXw89cZ2lcyo46gKoWS5ZzRO5NRWgzkHS7ty2dxHDVmQfgN+RihI4rco35tKvc8u2+yRWy4Kngq/DAm9uNyitBLgjLXMZhLekaJGdbYcwxNudkZx6cKjBCsAJZQJtuRHGy05Q==; 24:wY/ItnWkFcgQZEL3B5oQfcwx2rCyDZwlu+TAEGROnj1DOtWPTdaWuNWXt7O0njamJ7OSk4gr98cDeXQYwsds1sHqkYCXKfjdTuwyVne/dlc=; 20:ff/YxZnR9Y+hKUM5rsaoyAtiKfvDbBMnVBy+Ehbem6vkUTRxAaFjl+fr47Bf/u8yVtVV1Ycz9ZAkXQ1KYlyZTw== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Oct 2015 06:19:01.6210 (UTC) X-MS-Exchange-CrossTenant-Id: 710a03f5-10f6-4d38-9ff4-a80b81da590d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=710a03f5-10f6-4d38-9ff4-a80b81da590d; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR0301MB1573 Cc: scottwood@freescale.com, yorksun@freescale.com, ruchika.gupta@freescale.com Subject: [U-Boot] [PATCH 3/3][v4] crypto/fsl: SEC driver cleanup for 64 bit and endianness X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.15 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 SEC driver code has been cleaned up to work for 64 bit physical addresses and systems where endianess of SEC block is different from the Core. Changes: 1. Descriptor created on Core is modified as per SEC block endianness before the job is submitted. 2. The read/write of physical addresses to Job Rings will be depend on endianness of SEC block as 32 bit low and high part of the 64 bit address will vary. 3. The 32 bit low and high part of the 64 bit address in descriptor will vary depending on endianness of SEC. Signed-off-by: Aneesh Bansal --- Changes in v4: Removed compile time warnings when compiling for ls1021a drivers/crypto/fsl/desc_constr.h | 26 ++++++++++++ drivers/crypto/fsl/fsl_hash.c | 8 ++-- drivers/crypto/fsl/jr.c | 85 ++++++++++++++++++++++++++++++++++------ drivers/crypto/fsl/jr.h | 7 ++-- include/fsl_sec.h | 6 +-- 5 files changed, 108 insertions(+), 24 deletions(-) diff --git a/drivers/crypto/fsl/desc_constr.h b/drivers/crypto/fsl/desc_constr.h index f9cae91..2559ccd 100644 --- a/drivers/crypto/fsl/desc_constr.h +++ b/drivers/crypto/fsl/desc_constr.h @@ -36,6 +36,23 @@ LDST_SRCDST_WORD_DECOCTRL | \ (LDOFF_ENABLE_AUTO_NFIFO << LDST_OFFSET_SHIFT)) +#ifdef CONFIG_PHYS_64BIT +union ptr_addr_t { + u64 m_whole; + struct { +#ifdef CONFIG_SYS_FSL_SEC_LE + u32 low; + u32 high; +#elif defined(CONFIG_SYS_FSL_SEC_BE) + u32 high; + u32 low; +#else +#error Neither CONFIG_SYS_FSL_SEC_LE nor CONFIG_SYS_FSL_SEC_BE is defined +#endif + } m_halfs; +}; +#endif + static inline int desc_len(u32 *desc) { return *desc & HDR_DESCLEN_MASK; @@ -65,7 +82,16 @@ static inline void append_ptr(u32 *desc, dma_addr_t ptr) { dma_addr_t *offset = (dma_addr_t *)desc_end(desc); +#ifdef CONFIG_PHYS_64BIT + /* The Position of low and high part of 64 bit address + * will depend on the endianness of CAAM Block */ + union ptr_addr_t ptr_addr; + ptr_addr.m_halfs.high = (u32)(ptr >> 32); + ptr_addr.m_halfs.low = (u32)ptr; + *offset = ptr_addr.m_whole; +#else *offset = ptr; +#endif (*desc) += CAAM_PTR_SZ / CAAM_CMD_SZ; } diff --git a/drivers/crypto/fsl/fsl_hash.c b/drivers/crypto/fsl/fsl_hash.c index c298404..887e88c 100644 --- a/drivers/crypto/fsl/fsl_hash.c +++ b/drivers/crypto/fsl/fsl_hash.c @@ -84,7 +84,7 @@ static int caam_hash_update(void *hash_ctx, const void *buf, enum caam_hash_algos caam_algo) { uint32_t final = 0; - dma_addr_t addr = virt_to_phys((void *)buf); + phys_addr_t addr = virt_to_phys((void *)buf); struct sha_ctx *ctx = hash_ctx; if (ctx->sg_num >= MAX_SG_32) { @@ -93,11 +93,11 @@ static int caam_hash_update(void *hash_ctx, const void *buf, } #ifdef CONFIG_PHYS_64BIT - ctx->sg_tbl[ctx->sg_num].addr_hi = addr >> 32; + sec_out32(&ctx->sg_tbl[ctx->sg_num].addr_hi, (uint32_t)(addr >> 32)); #else - ctx->sg_tbl[ctx->sg_num].addr_hi = 0x0; + sec_out32(&ctx->sg_tbl[ctx->sg_num].addr_hi, 0x0); #endif - ctx->sg_tbl[ctx->sg_num].addr_lo = addr; + sec_out32(&ctx->sg_tbl[ctx->sg_num].addr_lo, (uint32_t)addr); sec_out32(&ctx->sg_tbl[ctx->sg_num].len_flag, (size & SG_ENTRY_LENGTH_MASK)); diff --git a/drivers/crypto/fsl/jr.c b/drivers/crypto/fsl/jr.c index 17392c9..f344908 100644 --- a/drivers/crypto/fsl/jr.c +++ b/drivers/crypto/fsl/jr.c @@ -11,6 +11,7 @@ #include "fsl_sec.h" #include "jr.h" #include "jobdesc.h" +#include "desc_constr.h" #define CIRC_CNT(head, tail, size) (((head) - (tail)) & (size - 1)) #define CIRC_SPACE(head, tail, size) CIRC_CNT((tail), (head) + 1, (size)) @@ -154,19 +155,35 @@ static int jr_hw_reset(void) /* -1 --- error, can't enqueue -- no space available */ static int jr_enqueue(uint32_t *desc_addr, - void (*callback)(uint32_t desc, uint32_t status, void *arg), + void (*callback)(uint32_t status, void *arg), void *arg) { struct jr_regs *regs = (struct jr_regs *)CONFIG_SYS_FSL_JR0_ADDR; int head = jr.head; - dma_addr_t desc_phys_addr = virt_to_phys(desc_addr); + uint32_t desc_word; + int length = desc_len(desc_addr); + int i; +#ifdef CONFIG_PHYS_64BIT + uint32_t *addr_hi, *addr_lo; +#endif + + /* The descriptor must be submitted to SEC block as per endianness + * of the SEC Block. + * So, if the endianness of Core and SEC block is different, each word + * of the descriptor will be byte-swapped. + */ + for (i = 0; i < length; i++) { + desc_word = desc_addr[i]; + sec_out32((uint32_t *)&desc_addr[i], desc_word); + } + + phys_addr_t desc_phys_addr = virt_to_phys(desc_addr); if (sec_in32(®s->irsa) == 0 || CIRC_SPACE(jr.head, jr.tail, jr.size) <= 0) return -1; jr.info[head].desc_phys_addr = desc_phys_addr; - jr.info[head].desc_addr = (uint32_t)desc_addr; jr.info[head].callback = (void *)callback; jr.info[head].arg = arg; jr.info[head].op_done = 0; @@ -177,9 +194,29 @@ static int jr_enqueue(uint32_t *desc_addr, ARCH_DMA_MINALIGN); flush_dcache_range(start, end); - jr.input_ring[head] = desc_phys_addr; +#ifdef CONFIG_PHYS_64BIT + /* Write the 64 bit Descriptor address on Input Ring. + * The 32 bit hign and low part of the address will + * depend on endianness of SEC block. + */ +#ifdef CONFIG_SYS_FSL_SEC_LE + addr_lo = (uint32_t *)(&jr.input_ring[head]); + addr_hi = (uint32_t *)(&jr.input_ring[head]) + 1; +#elif defined(CONFIG_SYS_FSL_SEC_BE) + addr_hi = (uint32_t *)(&jr.input_ring[head]); + addr_lo = (uint32_t *)(&jr.input_ring[head]) + 1; +#endif /* ifdef CONFIG_SYS_FSL_SEC_LE */ + + sec_out32(addr_hi, (uint32_t)(desc_phys_addr >> 32)); + sec_out32(addr_lo, (uint32_t)(desc_phys_addr)); + +#else + /* Write the 32 bit Descriptor address on Input Ring. */ + sec_out32(&jr.input_ring[head], desc_phys_addr); +#endif /* ifdef CONFIG_PHYS_64BIT */ + start = (unsigned long)&jr.input_ring[head] & ~(ARCH_DMA_MINALIGN - 1); - end = ALIGN(start + sizeof(dma_addr_t), ARCH_DMA_MINALIGN); + end = ALIGN(start + sizeof(phys_addr_t), ARCH_DMA_MINALIGN); flush_dcache_range(start, end); jr.head = (head + 1) & (jr.size - 1); @@ -195,8 +232,12 @@ static int jr_dequeue(void) int head = jr.head; int tail = jr.tail; int idx, i, found; - void (*callback)(uint32_t desc, uint32_t status, void *arg); + void (*callback)(uint32_t status, void *arg); void *arg = NULL; + uint32_t *addr; +#ifdef CONFIG_PHYS_64BIT + uint32_t *addr_hi, *addr_lo; +#endif while (sec_in32(®s->orsf) && CIRC_CNT(jr.head, jr.tail, jr.size)) { unsigned long start = (unsigned long)jr.output_ring & @@ -208,14 +249,34 @@ static int jr_dequeue(void) found = 0; - dma_addr_t op_desc = jr.output_ring[jr.tail].desc; - uint32_t status = jr.output_ring[jr.tail].status; - uint32_t desc_virt; + phys_addr_t op_desc; + #ifdef CONFIG_PHYS_64BIT + /* Read the 64 bit Descriptor address from Output Ring. + * The 32 bit hign and low part of the address will + * depend on endianness of SEC block. + */ + #ifdef CONFIG_SYS_FSL_SEC_LE + addr_lo = (uint32_t *)(&jr.output_ring[jr.tail].desc); + addr_hi = (uint32_t *)(&jr.output_ring[jr.tail].desc) + 1; + #elif defined(CONFIG_SYS_FSL_SEC_BE) + addr_hi = (uint32_t *)(&jr.output_ring[jr.tail].desc); + addr_lo = (uint32_t *)(&jr.output_ring[jr.tail].desc) + 1; + #endif /* ifdef CONFIG_SYS_FSL_SEC_LE */ + + op_desc = ((u64)sec_in32(addr_hi) << 32) | + ((u64)sec_in32(addr_lo)); + + #else + /* Read the 32 bit Descriptor address from Output Ring. */ + addr = (uint32_t *)&jr.output_ring[jr.tail].desc; + op_desc = sec_in32(addr); + #endif /* ifdef CONFIG_PHYS_64BIT */ + + uint32_t status = sec_in32(&jr.output_ring[jr.tail].status); for (i = 0; CIRC_CNT(head, tail + i, jr.size) >= 1; i++) { idx = (tail + i) & (jr.size - 1); if (op_desc == jr.info[idx].desc_phys_addr) { - desc_virt = jr.info[idx].desc_addr; found = 1; break; } @@ -244,13 +305,13 @@ static int jr_dequeue(void) sec_out32(®s->orjr, 1); jr.info[idx].op_done = 0; - callback(desc_virt, status, arg); + callback(status, arg); } return 0; } -static void desc_done(uint32_t desc, uint32_t status, void *arg) +static void desc_done(uint32_t status, void *arg) { struct result *x = arg; x->status = status; diff --git a/drivers/crypto/fsl/jr.h b/drivers/crypto/fsl/jr.h index 1526060..5899696 100644 --- a/drivers/crypto/fsl/jr.h +++ b/drivers/crypto/fsl/jr.h @@ -37,14 +37,13 @@ #define JQ_ENQ_ERR -3 struct op_ring { - dma_addr_t desc; + phys_addr_t desc; uint32_t status; } __packed; struct jr_info { - void (*callback)(dma_addr_t desc, uint32_t status, void *arg); - dma_addr_t desc_phys_addr; - uint32_t desc_addr; + void (*callback)(uint32_t status, void *arg); + phys_addr_t desc_phys_addr; uint32_t desc_len; uint32_t op_done; void *arg; diff --git a/include/fsl_sec.h b/include/fsl_sec.h index abc62da..2ddced3 100644 --- a/include/fsl_sec.h +++ b/include/fsl_sec.h @@ -194,11 +194,9 @@ struct jr_regs { struct sg_entry { #if defined(CONFIG_SYS_FSL_SEC_LE) && !defined(CONFIG_MX6) uint32_t addr_lo; /* Memory Address - lo */ - uint16_t addr_hi; /* Memory Address of start of buffer - hi */ - uint16_t reserved_zero; + uint32_t addr_hi; /* Memory Address of start of buffer - hi */ #else - uint16_t reserved_zero; - uint16_t addr_hi; /* Memory Address of start of buffer - hi */ + uint32_t addr_hi; /* Memory Address of start of buffer - hi */ uint32_t addr_lo; /* Memory Address - lo */ #endif