From patchwork Tue Jan 17 07:13:48 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerin Jacob X-Patchwork-Id: 19512 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 2A4B3F976; Tue, 17 Jan 2017 08:15:36 +0100 (CET) Received: from NAM03-CO1-obe.outbound.protection.outlook.com (mail-co1nam03on0084.outbound.protection.outlook.com [104.47.40.84]) by dpdk.org (Postfix) with ESMTP id 22A08F973 for ; Tue, 17 Jan 2017 08:15:32 +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=C5zqg0Ua1zF/eWJw4Ub3Ux08BOJRRp2dYSMIyAbyEOJ8vBguBCWL9SH+veIkh1yXzZWnP58KmkgkARIK1cauY69tkb5AktMW1LQpurqiU5m7s9N+KlaRKLxFhPgK3dfTv4E/pcgmKC17hGAj2/Qljbb3UGCk5jAwhi08sHm7ws4= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Jerin.Jacob@cavium.com; Received: from localhost.caveonetworks.com (111.93.218.67) by BY1PR0701MB1724.namprd07.prod.outlook.com (10.162.111.143) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.845.12; Tue, 17 Jan 2017 07:15:28 +0000 From: Jerin Jacob To: CC: , , , , , , Jerin Jacob Date: Tue, 17 Jan 2017 12:43:48 +0530 Message-ID: <1484637244-7548-14-git-send-email-jerin.jacob@caviumnetworks.com> X-Mailer: git-send-email 2.5.5 In-Reply-To: <1484637244-7548-1-git-send-email-jerin.jacob@caviumnetworks.com> References: <1484212646-10338-1-git-send-email-jerin.jacob@caviumnetworks.com> <1484637244-7548-1-git-send-email-jerin.jacob@caviumnetworks.com> MIME-Version: 1.0 X-Originating-IP: [111.93.218.67] X-ClientProxiedBy: PN1PR01CA0030.INDPRD01.PROD.OUTLOOK.COM (10.164.137.37) To BY1PR0701MB1724.namprd07.prod.outlook.com (10.162.111.143) X-MS-Office365-Filtering-Correlation-Id: 74b28b92-d06d-4ff3-d1ad-08d43ea89f29 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:BY1PR0701MB1724; X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1724; 3:ZqMIozA0BXvyME1i6bspa9542BGhGBRv7wZfSXwYzqAfXXdwLzX2xJE5I1wRd8roNYNI8B6xNtXQeA4d3yLgvNhoPhX9BuCuycC9eVArU+ykMCtADYQMTOmp20u3NZ1c42GlodJ4whmzF2D1ZVipYvp/1dTCTCn1qDECqYM6DzoRC1UDGBtkv+2dDr1+7CD2mHviAZEm+6wotJu7TVzXmTw1vn5y2qXZNTXpnHxNy3XQfR6fYLP7FqVTC/oLpv8+LXHyBJeXLBqb60po901S2w==; 25:cynxzJFOySDT6ooSQU2GI2ewrBNLvLPEkh3ibgULY5aREo1bzxMAdCfI8Tl/nr2ZBwTi0aI2wmN/1CWpBTSJM0Mkkazu1hB0w0RWoR2WvSPDdghQnNDHuKAc55D0WzUbiEDvre/Zdd6h/1BiShc8aAu11BpLgWHiwIyFDhT5Z/MXaVkr5GGPPOae0U1ULksF2dKMEZfQiAn4jU0gGUqOPngGsXXGu0GxSDC+h+TtJKs65cmglfv5SBvo+EqXKRmbWwiVTQpbs3fgExkk9ckUk/abORHauiotTYvFYJXqDGFWgxKRzZ8KYqCOFZJFAbr8HYVhZ5AMdG66m8TaHSF0/rmrVcUyV9HuKpiMACt4G8/HG4G/8HFNLGKw+4ABS6bs1Gvsg2qlUusnjdXSVmi5zhD6l4KTOSnCkpp8NN67ATIaKWorT+UsaRv0os3iMTB1S2fxgd7GQPsH+aO4j2KAuA== X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1724; 31:mT88HHeHCJ6GcwGexS2kXYuxqu9n6EhNFVY7MhSYOv4S+XucO1A42QPyj7fh0VtrVYxnQWySv5Y+JEAGnY6gCZFcygHRc2hr2XQb3ZUbJTukJCUITSS6cMqTzY7Cx1MeaVwoNaZv6INUMmXNkbWjmL9h7rO1UWFgamU27V4qLz0YoMh9HV2g5BrrxZ+wuu7wfjFbAGyXgDB/XGsBzEHYKH+oqtYG3GkryH/e0uSb4TM/DlzwQzRp8GrrvGeIThyE; 20:6gX8234fjqXxqDEUeXqrATQYyJIl1G9EXCyvKsIeFEmawhUOTion9enW9VpU2hBF0t5sLiSvRYKqS1tSUBZ+F1BP+uVSQVUXdxxgVpzFwuv6dr7Sf35OaLd72K6CaBPebwSQ/sA7PmFQytWWShWU9Q69K6aMPFxAs6ASWAiDI1+JoBsBXOQTbJGCyBAkX4s51rbPpJNDpdAGsuAY7a6tBXujzXSZKRhYu3eNqEgclw87MRMZjPE1ArvaCp4qq6ZFux5F948TzBaI7Jcmws51HzKYJb5UAh2La8g6f5uyOp3YuL6Gf6qL9NLrxZTxtpeNtJH1/ntcSFZBRIKRZWahhJYKGt9bPNZAtQxYUjKhiFLCqMBCQ9d3OZ9Wk11MYRYuvNIch9PtamtPdXJUJ6jDtIhQaZWDmRqBHL5aq7hnoU4GjyMJwtXUrAToYgvXvSkyYRvE0FRpBfd0OvrDy/5pw5O4RpMDrvNASV17wdtXGn5c9N0ffTV7ZMiVhZMH3+XklU4QTtjgBy/JuEH6OgrfkBtsU48HIGC+Iu6yu4cnO2E2T0So6fBxPy0VixqdT676hieNFjY8yR0ON+bD63aWcmI9sZ4Y+eQc/DXO2e3gUNg= 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)(20161123562025)(20161123555025)(20161123564025)(20161123560025)(6072148); SRVR:BY1PR0701MB1724; BCL:0; PCL:0; RULEID:; SRVR:BY1PR0701MB1724; X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1724; 4:Nhz0RAsysPykV9YGuY/e8iMxXn9YU0it6jwbATBIYwwgPjkFlyIT7vmQnJ/jn6TTUcWRlVZFJ5FkMKK5PtxgiWjGDfKf7r8MSjNNz/uPZrVZvRPfCzPAMBiamc+B1UBjfEC5AaQjM+Hd575CWq7wdMvxd4+d31PJZWJTaRUguuRebWzCc62T2/YUtC3iaDCFGuPqGFm81Q9IGK/JKKAOGS9bbFdyJh3YUNTjaI3XAKtVSPIqXM2Lsmz1MrO/IUt4dGbWCDPlakwYFnm8N3DHS2yghOlzySW8hpfKujvZBcWh9ptVnyOnA6pPTBUnWtu5OvQIlQYUKzl+WwTGpuPXO1HKxU97/hrKoYnPq7t2cl2xEPCbm9VPTjb3u6qLQaJkdMUOXJ/24OlpeWoxNCa8voV/pBl6tfPBRpARdRNfjcJvMXeJOjCbvgCZlsisMLyuEhN/JUGCM7wLaEfmxFj0Vd6w//j2mRaZFtB3LT58tInq4SG0kcaR+LxKLcNSAnD6arvytSM0j+yaExBfAZ6HgnKMWZfr+xAu9VbF7d62xz2k7a4rWraRR3za4z+8V1u1610tdj8B9R5QlvvkRTSnew== X-Forefront-PRVS: 01901B3451 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6069001)(6009001)(7916002)(39450400003)(199003)(189002)(2906002)(4326007)(76506005)(107886002)(53416004)(189998001)(92566002)(106356001)(38730400001)(47776003)(25786008)(6486002)(54906002)(66066001)(6506006)(305945005)(7736002)(6512007)(5009440100003)(81156014)(3846002)(50226002)(5003940100001)(68736007)(4001430100002)(6116002)(76176999)(50986999)(2351001)(97736004)(81166006)(5660300001)(8676002)(105586002)(69596002)(42186005)(48376002)(6666003)(36756003)(33646002)(101416001)(2950100002)(6916009)(110136003)(50466002)(42882006)(30001)(7099028); DIR:OUT; SFP:1101; SCL:1; SRVR:BY1PR0701MB1724; H:localhost.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; BY1PR0701MB1724; 23:B0gknzz/hgNqePaOAeMbmOl0ED9qJaXB963CYQA?= Si6MXX632F96BuqVxcCg7dsQMM7w2x7cIosY4xq3osQahXbNCnrN/dRIHtmCAlt7Ehv6QsuIYokIYEnSC+jV2ZaQWJFMf7sM1lk64xEY1Zl5wQAr7MMjyC0H0jh6ZJsFSgFtCE48BZD/Dio7byMUFOoRZT/L8dfU714JDYqOan5PyOWcyg+kOY/KwK0LOdgnac+85Gr37QYxCIWzMKStFDFsLMeqw/hk9s5ncjP4qWX9kS5/ZBfvZ+q0HurgaJ+zTLzDZ/t6mSY6vfZiIvSouNmdRLifezcmnvy/l7P6/ihqoRH6/LqoNC4EUzevlpFM07iDQ13uvKpaWA/6hvT8X5XPPuOJZfFnwap2Dde+ivNGNp3bmpbqCoCpMrEeF8vpI0LVu/kMdEQzvg5wTEltjmBtbTawq9dBsRRmhesUFx4Kym+IQAUX1E6PcA/40QVtheVZGPxXXdpEhG3jCa50KQMePgGO9ob4ZDKdjHiykwYzad9NkEtWFqMQcNhDLTZMVsflNC6i6+5QvmBvBMhMzo0+S62B99FpXtWzYOQ5jZ32bHoRcITGTvA9ZebeamEV5IAp+Wz8Xotphe1Tzw6PiyxaKUoAT3xwneVI785OhLr8hW9MeVFI+Plo5dxvrpafI5nHP1/na8RZwaN203BKPmzkYMeRZW4XZhxfSA2ZlL5rRu7dcX+5D/dIjIAnBOywcw1XeEan+hZC8SVIs5eKsB/hRAAMYPStZ8IiT0mBqrP4aN2RpbWOXqpSpjJy3y0/NNZy2tjimHQh1oLKMJnoRrzLtdasLJTW882yhso7elmdH2BXcJS+MAm5V7C1PInghsJPoVZd+bBTQfWfIeDhtL5u8ZVefChMnFjBK+vajOaaJq05ZPi6ZNhuu7zGo9F2Y3mrfrMwODsrucjs/0oB9kxLXPDrMjnL+ie6kwybSMinG55dqwDTN8gC/x6HXtqC5yqcuh0h0NXQJ+Zk3N2ICQgsila8kl9SOy2KjYiaKvfEHHzmlYIGI/RxvmU0VgtpadLvloWxfUJKyZEu8l0i4r3KgvFjqgnVG48FSV/pxy5P1H/g+vTXM4N8GGv8PTifX8vyAiEElxLG3wJGzEw2c+cgstSeU6GQmkjy+tVPjvjy04f1w1towy/V/ZzdDUN+Bkf+q1a2rGbw+vQOENTnynSE3kPnixY1k2p8XoxNgq8Jjw0QzEBqABDcgZfkmjRPGyERtTGJNbnOUYIvZDD3igIYAGX3S6s4oX6MmraDbs5Oprcy/keK5QUlC8G3ztmLrz4Q= X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1724; 6:OdBRWwrOjF/spu/FwyyfhP5AY5ER1Qij6+aKiolVxdx4jrVu+HrOL4s9zVzx5HR4oVr/qMgOwJvsqPEnDfrpl8NbCY17h7+8IuUgvPuBwPi6qQ7d/NwjN9cRK65rv3x5inBCdsQ/rYwZNjrMnZiRnPVfxJ0MKZalnuV6KfnJ83gxabMZcSpO51xohpHHJrhuZEslYeOdAJIlXpK3N0f9fAL2Rf4zvU7ePKs0tvGMkb6E1jswAv42VtjQk8xrBIFYk0uJhwMBwAmXuSFzSG6hspH7qqqAFov8oWSU7PmnmzNslb3Y9pGrBXwW4+Wc9grXjfY3KlKbOBc9dFvItAa2AYKPBj5+DtCXPGihOdICSKpgT07T0UDESS//TzVFt5xcA1qOeEfCfB9ZPQyY+JUg25AbnWGBOqjXuMcyTaCL2Ig=; 5:bozZ0D0BYT+yxka9WsZDcFvQ7oLKravCt6N37Qdk9Jp1ilbxBWTOv0OJRGJjxg9zpH42+6+V2bLJ60pZSu8GFfVTXpz5Pl7nnNbmale/aRF07RbwwQheNKFAo6nAiWdYz+se4FD8VhtRHHp7urWuLw==; 24:NvhgR0BnvYuXYBh98Bn25IoHMJ6BePaMwCy1iDHBunylex3TgkMx0RaAlMVmgb8g1fah+W8eRrQtb9SSA3lrcSJ5Kf4r+dMkoJectEVIm4U= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1724; 7:qzS+YAiir7kMgj/El5BtUYkFT6k0xT91nRRfZo2rbXFsVBUJW78tvsoE0gPgHK8+6oCL4/gOtdKATLP9uOlJYS+QcRgHhTh9Hbj2buKz1VPjwUjjtCeDtduvzzahIb5nEWuJu2eHHD54Cq4w8bfTu40eIzgd4nTDOWQzJ7MfkLCOsyHaExogFUHC9U/nrwH2UL8jZweS8EmhttkpRc/VqYVu+U4MDqepJr4d/tW2a+sXgUt4h2AXsg4On4tTmQ7YjNLqWz6K/v8nZb0ePOzppTmraqPI4vRiWKV7IF/f8emTiK1g33qqGhW7o5B5Ii8Be1qXlPJTWNoV5qd/uxzbxKKu0oAA2toKdvlZXFpmQ+XdmaA+UoQw0XkZjYtP70gsvHHd++ANqGjl6g1rrziAtHLO0dJSGdT/fxTQuN81E9AJ6d3Ukt+fnoezC7iL9jjcVcoIiHq0lMWqrgjKUqmnQg== X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jan 2017 07:15:28.3735 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1724 Subject: [dpdk-dev] [PATCH v4 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_ */