From patchwork Wed Jan 18 01:21:26 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerin Jacob X-Patchwork-Id: 19670 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 55C165323; Wed, 18 Jan 2017 02:23:19 +0100 (CET) Received: from NAM01-BN3-obe.outbound.protection.outlook.com (mail-bn3nam01on0061.outbound.protection.outlook.com [104.47.33.61]) by dpdk.org (Postfix) with ESMTP id 784D6F949 for ; Wed, 18 Jan 2017 02:23:03 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=N7wzqRapikHXOKIhBLX1+1uEjuoOfTuSjYFUOgpMp7E=; b=g00pzj70xrLKPkaBTfePCBlrTrcECK2FFdz45wx3+q/da1Qp4kgZPys+cAVP/78oMNFUCBWuRDqyPMzkcUWw3j4MkSMzMQ4Z+uOCqR79f2RRkxCk3VDIdRWwRj6+o2QeeiBTHWGkLC2Yw93idouypoEOnDbSDMM+z/TGfzpt2OA= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Jerin.Jacob@cavium.com; Received: from jerin.caveonetworks.com (111.93.218.67) by BY1PR0701MB1721.namprd07.prod.outlook.com (10.162.111.140) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.845.12; Wed, 18 Jan 2017 01:22:59 +0000 From: Jerin Jacob To: CC: , , , , , , Jerin Jacob Date: Wed, 18 Jan 2017 06:51:26 +0530 Message-ID: <1484702502-25451-14-git-send-email-jerin.jacob@caviumnetworks.com> X-Mailer: git-send-email 1.9.3 In-Reply-To: <1484702502-25451-1-git-send-email-jerin.jacob@caviumnetworks.com> References: <1484637244-7548-1-git-send-email-jerin.jacob@caviumnetworks.com> <1484702502-25451-1-git-send-email-jerin.jacob@caviumnetworks.com> MIME-Version: 1.0 X-Originating-IP: [111.93.218.67] X-ClientProxiedBy: MA1PR01CA0115.INDPRD01.PROD.OUTLOOK.COM (10.174.56.159) To BY1PR0701MB1721.namprd07.prod.outlook.com (10.162.111.140) X-MS-Office365-Filtering-Correlation-Id: fdbb258b-4589-40ed-4e9c-08d43f408ba2 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:BY1PR0701MB1721; X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1721; 3:2KE89qpYeqDzcdLj9BOOa0vgFyNj43C1TPtn4lcXYZsfsNZZXSpumJaecgv5YyjFTIV3vD3fgkg58VmreKY/ql8NKGYBZ5XSYwe5hhtzO9t9XQ7oEa8kufiOtFpZSczSbxsRNJjfG59IkqW0ZGueGAolhiDh9iKQN30LqEkes2POxXxiXXOxCarwKX/W42zlDUgqbR+AWkPxbWhpAvPhg3/BwEcvlGcyDK7SgFxKrWmJ0KOG+2bQF4dqH9fUYFjFg76zGFzBysNkyRPFMwUdjw== X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1721; 25:UrYzBiIawqgVTEYzHB9m4NYXeeVcxFNY/LhopT/SpcyFKER8GtTq1JLV5dC5ReL5/1xKE0jWKNZm3zAYtBx0gIOLUHMNeN+TiTZldgTeMqzDlVrmbzScLRhxPgVeUAGUZ/Es8cINy2WFH5mZLbHIBzlOBGphrc+4UOsyeJevOUVM/iuLV6fUl476jQtZfg65dJK3ypekeCy9b+rCf9PCuxeJqD21zjfzZX9jygekZiKH0yVuYda0Zpgntr5HsZ2mXgAiAsjMUZwkCtVuIqBIHwYXVdwAGtws3/9RsSHcFwssZoPEbya3l8guaeESdM0dRV9ydxjPm9gwPPqIl02mHOCisGMmlsmFY3NZJrGcS/51LPxKWBxDD/ZjEd1l82xy4yMvOwbjC3qHLaiA5NxYestC3P3qgeWKvEHTmk+j9ur3VxXSOfdsMnFJPfUhjeOcGA1NkUEhWbYCwx+4Z4D/j3x184FVtOs3qETQxtXMQGMQ0Ga3106NEt4L08mjEFI52pBfLKtN1yDcEdLrCb9XFGJlQs6cd6OZCdTb+7E5w7CL5MhFuDrR1kBs6sMdXtmhJglyzmUFdrcxDl4LAAhr3ywewIwUvQ1XNrkozftzVeyRNXic3jBZthDgOstnCawJTKRb9vf09AHnZQ4aHmLRBOqykK8oyTMzcoc/QL9rPKnxoO8iye2nAjS/pEDv5zIkouTebFITCOVE3LJ01aDLHvHdCJmcprkcupxjW7bKjh9/QS22hDjCVIcnI7wQz0oolbpGgO2iDJ2JikfhYEaT3DJBfNcL/qTK7qVBPsKVyEk= X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1721; 31:1OJ4Z5ztrVgXxUNJEh7c78DtG/Og1kQ3VPCNwsI3ogDafumLdzviWiTOrgcrXUdZd6hp269+LF+sXad52KVCc7Gt1AGFUx6p2Hcaw7326uS7vb/2yifE/PkbqOP5LoXlVsEAj+UBHw8luifP4wARzSMjdiAFUdwYSIrWjl7XHZGk3xSLsocRaFg6W1DN1SeY1x5M24Rj6+85z1EO9R/vTa9V5E3ghLMe5pOR339r3xPfW5rXl92SMkcmnSYjHX+mfTtbbGyjreHm0yYdeBQNIQ==; 20:/vIrMqzbVchMqOY0oBK+2fekc1wu0Sq222OY3IPiiyvEyCC+HOFNmEeqMhxXQhvozkSOG/gqakikB9D0NHk930iv+v4zJrVM1Fic4doiUnLosUS9RmSn65O0JXregj93upuvAidvoityOTrO0pkDstbUf3awZJwjyEXkq92qSNHdBVYf1jZYmFzikfU8pZScDFsfJLGv/hacJBUpst91MdoE6sOcvAjaaXZTg1unzN0YhQ3Y1SxYvnjQpkS3WvoONuZLTZVlslaaON9Y3s+TMmmE3DDcdNRV0BGLMXfX9tjsT/p0u2tj0+7/SdXNUh9CEOFSF0BPzG+JOHjukEXnM2+KQjVHBpL6ogubTZoofCp+QIYlLHAOthK7nj1sVCXBcWimUT2OHfnMiTb3NDfBg6WifHM+fnASBpvmKA3LqzF/WYuaE3T3RIFkUvk6NlfsTsB8s8XzQgU63O/GMwEPXubfztsPVpkXu4I95nndJD8eTJLlk7jSxqJojGDWwUu97egRqgVQezhIEj8HzjOMotGUVbaRtyDip53hUv3+6KZtGglXfQ/s/Q1lDo/uj5E06Hj+7AgwKgH8Hu4OoQYgDzU57cuXbmhE7jrjNVlmVEE= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(6041248)(20161123560025)(20161123564025)(20161123555025)(20161123562025)(6072148); SRVR:BY1PR0701MB1721; BCL:0; PCL:0; RULEID:; SRVR:BY1PR0701MB1721; X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1721; 4:UzwjTagIDyIvh24Q3AGCBDAtcPuXx/LTnHD1cvXi96jYvjmUQyQaHh2i9w72daZtiWxC/n75HWEGNT6iOf+MwTqZu6vBYGc0qqiJ+ngtY7hIXfH7CgLqYL/wy+cCdVXrNfIpRW3GK6ISSaFiqljzIHETJgse4Bdt3grdlA9HtodC67D7G6CCRUUw/4bScOWosx0OFk7cqRVihwcVIAAdT0uZ9ugB1Ei/3XgJLt0VEqPZESX49majMj0r6XEBbddWa9gOSlOUKiSWGQT+5wCVlBCmHoaV22qxk6S2y0VWLPhw9EdRXUPKqYn0yRyceiIUQY5N+Toc36Hr45WpBA4buB0RE56ugVHH0ahY/zRayRK6WG9yinbqeejqoUeoppkOjS+nXouPKLNzb0oMcaeMxdGl1+xN7RGdUritC6A62Y1LS2ZmZwGq/5L55LBiITAp+Kz5xVB3uHf1yCGNCdlwzqLpMeaOalrDrUQ46S/ruDQlsvy6RTy0uRkuo0VEE9BaFnOs6YW6GCKU9gzwDbWFsztSPNrhpuXAK7YDem0Xy0gcEqzosdguGpvOZqbxlX5o4HsY5c4sCdA5m5V05bhJVQ== X-Forefront-PRVS: 01917B1794 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(7916002)(39450400003)(199003)(189002)(4326007)(6506006)(50986999)(97736004)(47776003)(107886002)(25786008)(189998001)(54906002)(66066001)(92566002)(101416001)(38730400001)(81156014)(81166006)(6486002)(2906002)(42186005)(53936002)(50226002)(8676002)(2351001)(68736007)(305945005)(53416004)(3846002)(50466002)(6666003)(105586002)(33646002)(6116002)(4001430100002)(5660300001)(6512007)(48376002)(69596002)(76176999)(42882006)(5003940100001)(5009440100003)(36756003)(7736002)(110136003)(6916009)(106356001)(2950100002)(7099028); DIR:OUT; SFP:1101; SCL:1; SRVR:BY1PR0701MB1721; H:jerin.caveonetworks.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BY1PR0701MB1721; 23:I6Rjkt2A0RseV9nSSkNjHwyG8FlPutMt3R5BjUx?= kth59Z6bsjwqLM0UP4L5ZClOywjrUHqrhjIr/EumSJwLHRRHLoBvgV+AhfMWecMrr8AIqxF5FYshc7Qnu+onrCzoESmW0YodkLTZJEwcyLQ95siT9m0nwz3ZM4YHQsqjpnYYHo0VilQrkwPr02cqcD07sP2npffVsPFqvSWQL3sKguwurYAiMiK2raQQqo4rOgajYGeVNe7RhST/wae0q0IHobGFG14Hv0YlNA+RJDMwnKPgWasffNT8XQWu0Z/FJj7JqiyNACa4Wct0pspwu9k1uMf7Q5qrVua7rxKzkyT9JblesX1koTlgjNzGYrHP4e2OK+aXlTc78NWVBXaonSqMbYlocUXf41v8DOpDeFdRsIOUEv+OOVl3OLp/kUtScIos52bWchKCR8vMnF/6qy9h3N8sDRSGX2Y2rNqo+4VTDIhuW4QrFvHBv7fDePJrvvmAegN/MnVS3QMolW61HJXy5l52b++fnE9GSNQfqT5RHW8jieEP2AEatVyLTKKgB2Bv0pP3umYE57rr4SD9HvzK7GJu1MUx8FWfoaahSiAXTzI27Pv0ZroIZs1BXVQYq3QoTVc/E+dMpi/QXrdu3ziH+01jZhg/4b1/5PULSQkSD2d9nNl8EQbItoHgAC/vUuSr9K3sWDdGYc2Ygq9gL2d3AARb/MU++xmIVPzIkyoFOPzknaFKpJi5Gb4YSie98DaitC2poDpGPEM3WWhaZt2SLHcFy+8Wm/AdIqLKDY+od1AXq7KG2cbX6YGs3dUYixT+6QpJWT9DmR/uZdthHfl0f2o0eswrOuP5cn1yt1TTnrh4bOsbQ+P49YGghWQvNgbqRhkA9gQ0wgLy0n2cgHJdM5I+k1qPryoBaczhoFr30OzfI13GC0Y9pQwpLjRi9h6gZcY9EQRkNPzHolAgWGnSbyXdbzkFqRalgaddYaKSwo2lxlR5mdhg41mIKVQ7147GySbg8v2TLh3iEnf89Mviqxa94pWDzEeWpXWFb6F71xvIUdL6GAiT0vD1Hk8D3u6feI+y+NGEDcu/Rlyzi8s8a4kvCZfGxslRQqg5SlS4ONX+Wx6qHoPnCcWwezVx24+79JpI6ZaiVEmH5AgNvKjzEZSyTn/z2bb4DtN6FnOYFJzhU6/sU8A3pGbZ1bPrLEgQF1mutT9Aoq2tYj/YWUwZmnaePCOluDJqtiHg8dnIt7wr/qUkNY3viXHstVk/vfscwP27dEHhkaSPhYLhyfAClrqw7dGcnYAhppU7NFHt14Q== X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1721; 6:GK5vdBE2hgPbW3qgQTVutwqfGN1627msb3L+MYgbfFZva+EK4rr/zQLWKBhqHmpNpY6Rc8auR2QYRHEHeopRjUcTvPOaUp0BE0ZVSpzfp555tfPaBdYieuca1Uwd1Cgs3Vajazg51Z4QQjgNw3I7dozKAPCcUfMwsIUkb1WXzJQrcnmcuwdxYC8DlHBrWI9stSSgPETG7eWguzTGSxa8x7QkrvFWRAK41rYFA1qZUeyymBseZOtw2xIjpiKnlY2zBvc/kVaefVj4ZvSwmAI9MzLnehQ5IBum9lJ+jEe8KR6vF2OtoUbtFaCrnN0J3X3pRUNNMAUKhz2jOpBsIPPL8ITQXP4y4Ajbjs3lM4PBhCLxeTxp7F6fIMNNUtC8pplX7ceim3mTryUl4P/uMPPPAWEaF16ok+SljZ2Ed872G7Y=; 5:dA7WhbfXdwEAfbSgmnus5dQ5fJB8hj6HnUtkAiIw1LwoVfWQBlsLXXTuNzVQJJKQGCSneII7coTtMtT8GjbqpdxKtfQ+Ke27KbewsZfnwvBBwU7nNjn2nkqATGb7ee6UMj2YeXShtx8atAQ0BwpWX+6M6A6VrWSxGp7sOaWGCSA=; 24:0yT4X2njaEQ5XijwdeF9/CmPm/4zgx0n+vL8OKBLvajJBGcXDuUOyH7PPq5h8xJ3nqMVYIGi6oEbB86oNKcceRSgAlbLyZE9W42mGFU5Fdw= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1721; 7:SGdAOJ0iikNRmc+r+VeVFdfnwNF7WNjvmriFdjEYK4RbOqhXx6p52zwckCW3lgovMHqOvjMWowbD4BgebSX+PZ0s+ONPEBf4swgBMCl6mbYkpiFpKySqtfbXb1/Sqe2sD4odJbnL5Wvi6yYx5bJl6Kkh/80KJOcTl+Ut6JYnbGWGj8UcSd7u27b1TvcQwuKhCuxhzQ4aeefaUYlh8hoS4Z1yTTnXANRPmJcS3n1mspIixUB+VdoRswm3oCVMZ2mQH7CSvQ6F1CtQQ7LhgiZid0Q4Cl00y7f0j0eIqGG/7jqqa1b0rZ2rZyoLgd+cDoeWYcdcmn/BKyQrKQ+JC/LokBKCQ0UB32wZFyiQK3TEVSd36T9VUozMa5XyhYnX4huBKdaJ1x3oTjFMJD8XItw1tSBnmVNJkppuJG27l3Jmp9+rH0BbcPVmsjlagrw+gpwUq3/Vk14D268V00HuKeUAJw== X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Jan 2017 01:22:59.1816 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1721 Subject: [dpdk-dev] [PATCH v5 13/29] eal/arm64: override I/O device read/write access for arm64 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Override the generic I/O device memory read/write access and implement it using armv8 instructions for arm64. Signed-off-by: Jerin Jacob --- lib/librte_eal/common/include/arch/arm/rte_io.h | 4 + lib/librte_eal/common/include/arch/arm/rte_io_64.h | 199 +++++++++++++++++++++ 2 files changed, 203 insertions(+) create mode 100644 lib/librte_eal/common/include/arch/arm/rte_io_64.h diff --git a/lib/librte_eal/common/include/arch/arm/rte_io.h b/lib/librte_eal/common/include/arch/arm/rte_io.h index 74c1f2c..9593b42 100644 --- a/lib/librte_eal/common/include/arch/arm/rte_io.h +++ b/lib/librte_eal/common/include/arch/arm/rte_io.h @@ -38,7 +38,11 @@ extern "C" { #endif +#ifdef RTE_ARCH_64 +#include "rte_io_64.h" +#else #include "generic/rte_io.h" +#endif #ifdef __cplusplus } diff --git a/lib/librte_eal/common/include/arch/arm/rte_io_64.h b/lib/librte_eal/common/include/arch/arm/rte_io_64.h new file mode 100644 index 0000000..0402125 --- /dev/null +++ b/lib/librte_eal/common/include/arch/arm/rte_io_64.h @@ -0,0 +1,199 @@ +/* + * BSD LICENSE + * + * Copyright (C) Cavium networks Ltd. 2016. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Cavium networks nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _RTE_IO_ARM64_H_ +#define _RTE_IO_ARM64_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define RTE_OVERRIDE_IO_H + +#include "generic/rte_io.h" +#include "rte_atomic_64.h" + +static inline uint8_t __attribute__((always_inline)) +rte_read8_relaxed(const volatile void *addr) +{ + uint8_t val; + + asm volatile( + "ldrb %w[val], [%x[addr]]" + : [val] "=r" (val) + : [addr] "r" (addr)); + return val; +} + +static inline uint16_t __attribute__((always_inline)) +rte_read16_relaxed(const volatile void *addr) +{ + uint16_t val; + + asm volatile( + "ldrh %w[val], [%x[addr]]" + : [val] "=r" (val) + : [addr] "r" (addr)); + return val; +} + +static inline uint32_t __attribute__((always_inline)) +rte_read32_relaxed(const volatile void *addr) +{ + uint32_t val; + + asm volatile( + "ldr %w[val], [%x[addr]]" + : [val] "=r" (val) + : [addr] "r" (addr)); + return val; +} + +static inline uint64_t __attribute__((always_inline)) +rte_read64_relaxed(const volatile void *addr) +{ + uint64_t val; + + asm volatile( + "ldr %x[val], [%x[addr]]" + : [val] "=r" (val) + : [addr] "r" (addr)); + return val; +} + +static inline void __attribute__((always_inline)) +rte_write8_relaxed(uint8_t val, volatile void *addr) +{ + asm volatile( + "strb %w[val], [%x[addr]]" + : + : [val] "r" (val), [addr] "r" (addr)); +} + +static inline void __attribute__((always_inline)) +rte_write16_relaxed(uint16_t val, volatile void *addr) +{ + asm volatile( + "strh %w[val], [%x[addr]]" + : + : [val] "r" (val), [addr] "r" (addr)); +} + +static inline void __attribute__((always_inline)) +rte_write32_relaxed(uint32_t val, volatile void *addr) +{ + asm volatile( + "str %w[val], [%x[addr]]" + : + : [val] "r" (val), [addr] "r" (addr)); +} + +static inline void __attribute__((always_inline)) +rte_write64_relaxed(uint64_t val, volatile void *addr) +{ + asm volatile( + "str %x[val], [%x[addr]]" + : + : [val] "r" (val), [addr] "r" (addr)); +} + +static inline uint8_t __attribute__((always_inline)) +rte_read8(const volatile void *addr) +{ + uint8_t val; + val = rte_read8_relaxed(addr); + rte_io_rmb(); + return val; +} + +static inline uint16_t __attribute__((always_inline)) +rte_read16(const volatile void *addr) +{ + uint16_t val; + val = rte_read16_relaxed(addr); + rte_io_rmb(); + return val; +} + +static inline uint32_t __attribute__((always_inline)) +rte_read32(const volatile void *addr) +{ + uint32_t val; + val = rte_read32_relaxed(addr); + rte_io_rmb(); + return val; +} + +static inline uint64_t __attribute__((always_inline)) +rte_read64(const volatile void *addr) +{ + uint64_t val; + val = rte_read64_relaxed(addr); + rte_io_rmb(); + return val; +} + +static inline void __attribute__((always_inline)) +rte_write8(uint8_t value, volatile void *addr) +{ + rte_io_wmb(); + rte_write8_relaxed(value, addr); +} + +static inline void __attribute__((always_inline)) +rte_write16(uint16_t value, volatile void *addr) +{ + rte_io_wmb(); + rte_write16_relaxed(value, addr); +} + +static inline void __attribute__((always_inline)) +rte_write32(uint32_t value, volatile void *addr) +{ + rte_io_wmb(); + rte_write32_relaxed(value, addr); +} + +static inline void __attribute__((always_inline)) +rte_write64(uint64_t value, volatile void *addr) +{ + rte_io_wmb(); + rte_write64_relaxed(value, addr); +} + +#ifdef __cplusplus +} +#endif + +#endif /* _RTE_IO_ARM64_H_ */