From patchwork Thu Nov 5 16:38:05 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerin Jacob X-Patchwork-Id: 8712 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 6D9F491AC; Thu, 5 Nov 2015 17:39:23 +0100 (CET) Received: from na01-bn1-obe.outbound.protection.outlook.com (mail-bn1bon0080.outbound.protection.outlook.com [157.56.111.80]) by dpdk.org (Postfix) with ESMTP id 8BC2A9197 for ; Thu, 5 Nov 2015 17:39:21 +0100 (CET) Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Jerin.Jacob@caviumnetworks.com; Received: from jerin.caveonetworks.com (111.93.218.67) by CY1PR0701MB1977.namprd07.prod.outlook.com (10.163.141.19) with Microsoft SMTP Server (TLS) id 15.1.312.18; Thu, 5 Nov 2015 16:39:18 +0000 From: Jerin Jacob To: Date: Thu, 5 Nov 2015 22:08:05 +0530 Message-ID: <1446741498-3096-3-git-send-email-jerin.jacob@caviumnetworks.com> X-Mailer: git-send-email 1.9.3 In-Reply-To: <1446741498-3096-2-git-send-email-jerin.jacob@caviumnetworks.com> References: <1446741498-3096-1-git-send-email-jerin.jacob@caviumnetworks.com> <1446741498-3096-2-git-send-email-jerin.jacob@caviumnetworks.com> MIME-Version: 1.0 X-Originating-IP: [111.93.218.67] X-ClientProxiedBy: MA1PR01CA0067.INDPRD01.PROD.OUTLOOK.COM (25.164.116.167) To CY1PR0701MB1977.namprd07.prod.outlook.com (25.163.141.19) X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1977; 2:tmNmzI/F8dh6HugWbt/I4YW6J5MMOkGc48u4xOEFnaEWUzIjFrF60CTcy20R4MsITzcniZI8+RTA+jIewytWPhW3YKWNOPNGtp6d2WIfhUQ0f02K+9zekh5QQB05xhWfFZijAxJzTFDBLb58uPhmtBmn5WrMzIW9NOJcK+8eeNo=; 3:fjGu6Rcs3o1KW+EkbRi/U1gyUMD+vTrrV3B9XRyUp4iqhnXj7j4m0yfuUGXsYpfBKDUqitnClE4Ce5jq/86sADnZy7kgYIOKYfDqCf8/a/ewzCWgPR50nKP1xPtz0a9CHzgvH4AzrWI20SmUHJYfow==; 25:Izjb26rGbej1K+MvomrZj+EQZVcYG5H8sxuIMEPoHXG7HwS4qBdn17hdDiM/8iSzUK1UQHlpG8ur2EKbcird/mUq1By3XOQnf/UWqxn0CVHDzPHN3EnkvwFnPRKsbb3qGzahfHxHyvOszgmaMCmpzlJ4XgFmOiUX7uHTmo9r2Ja8IAqD7+1m2w58SJ9ruo42qXJaE5j9PsQ9gOlPqam8kAMs/dz1YdXp4Ue8UqgV3zRMJnILQ0m0C7UBd8vw65CoD+plYeF2rGJaoyfzCBzQ2Q== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR0701MB1977; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1977; 20:rVhgLGK7I6emkyunMFssORSpXEjXkd3fJKj8zqgXyVVp7PXufCOy9atlUuIQ8ShDY+tXOkXk2eF5V8Xna/vGaBYNOyXcdq0rNgx04XPxK1L/t/NIhJLPBcwSeZq5ah9y23a5JmWlcRktDpRc5CL8G49VuyjdgTsdr3Cym31rCvgq6MlBDBIq4OgU+ZkpL5cCq3UCMDvR5imv7/wQlOoXeQXAsgX8brQ4ftg8Ks7k35Dw0+JqsD22WE5upzgnUGqOXDGl/iAz1vIZbn+YoXvkegemcj3BH41hQnEZlbNv6PSN0lEtgcxz3x4K7EGd01rWk0t4Tj5+AI/0lXpURikRYwVum0OVzqnOuq9uj12spImXEWwWglhXKXFAA8hgeIMeKtVhk5sl/qsdyqlmbkZijyKZn9IrBL2JOgZafu8/LN82iR0efvlhIiIPgEXFoKPEwQGr8V8jdfqzTFA4eTzjfXsx7talyXvKld6RzcbH1B5tneNOuWhEzZBb/ie30cP/ZI0DwtCrXXckl5p88cKUk5rYALknXA+FmNbh3fxhoNIWoSEeeaLwvUOQ+K9miebslpXCSLsuItIctboR+yqOpXLkmSjX7krR1ln0VvjKKIQ= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(236414709691187); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(520078)(5005006)(8121501046)(3002001)(10201501046); SRVR:CY1PR0701MB1977; BCL:0; PCL:0; RULEID:; SRVR:CY1PR0701MB1977; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1977; 4:9Ot4wgqpnPXJZrjl0bAHJSE7jTjOzpHJvG3eP1YRlDt9mYAbKWUk8w3fIKcmCmP0s+vyUJ4eTWrPhWXiYIY1VAsSA6Bug58FWBxhFdLNtS5Bb4MjagmOF5Kte1OVXVQ4Pa6IatXzQgXs7zr3XsYJsMfXhMLHk+6IhC2cl73bpdEz1U24SOrS2DpW5zqtbmSbCDiJq81RiM528rqE+K09maK/qVsNriHl08LpqNKNrf69MQ2Oi3CG+K1dlWL32T/taWeCF0BlrZIvgT/mANeDU2SJ2bAPytvPRpDDRliEKmlsKM1CDoIIQGW8fvvbUy1Zy2NTB0f6wgTB2Fuo0kyHxHyihk7zgmgxs+xeg+lYz0Q2/u62EhSLZ4oCMQs/tIWR X-Forefront-PRVS: 0751474A44 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(189002)(199003)(2351001)(81156007)(5004730100002)(5003940100001)(50986999)(50226001)(76176999)(19580405001)(106356001)(105586002)(77096005)(50466002)(53416004)(47776003)(229853001)(48376002)(33646002)(19580395003)(69596002)(36756003)(107886002)(189998001)(42186005)(5008740100001)(40100003)(122386002)(5007970100001)(5001920100001)(5001960100002)(86362001)(2950100001)(5009440100003)(92566002)(4001430100002)(110136002)(87976001)(97736004)(101416001)(66066001)(7099028); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR0701MB1977; H:jerin.caveonetworks.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: caviumnetworks.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR0701MB1977; 23:faHipg5nt2vIHQYAT+2cG8/zrKe0wUfNot2ivCX?= =?us-ascii?Q?tJeCSfRfRQfIIWTtaUQQsTaSjqFOtTMaZ9c1MizLHqv3tQIXZpkW+cJVHeg1?= =?us-ascii?Q?Xyr0ylryO/OgCJCQEY5TmRGez9S13qiDS9NAk5VkPYA/6SDSeKbix6g8ZFF0?= =?us-ascii?Q?yqHJ7fITzmhoLKORtZiRyUtlzgeAsJuOqV8yLLRjXNumrtTV/BZDkTmJ+Zmq?= =?us-ascii?Q?r272aKDXB4/nAXfCqX4U9QyB/CD78GP8+3LnK3+wyf9dfIGC1uRNopZht+Wx?= =?us-ascii?Q?b4Hlaxw1eHTo0SSX5gX8BC2JipVE0IV86OfaZ2i4E0LRLA7/wTXS4bUmmEKS?= =?us-ascii?Q?KFYQWjUDAVRs0MG7fjdCJrlgAaxrB8Y+691as6+vPZCnTr8wDEUXFXaNP7oP?= =?us-ascii?Q?EPwzlHpeOJvYLCPdtO3gBEiZeMmBEeUUgQ3OOz4mtY/yo+aaddHjJnqrQRBM?= =?us-ascii?Q?MEf0DyqmUzhp49WcoJgSgw8YgC+RF5wgrQJ5vVtAX4Lt/nXEHvgRfQ71n3hv?= =?us-ascii?Q?RUOYYo9ZFaI+anlwNIKtuhniNwaLOfW2RKuTJqis+NuzbtZjb4TH9/qDMgVE?= =?us-ascii?Q?DoZPx5qgltXEyQWNdrd/QzRVRR8FeNstKtt8/RSZMwMd9WpcWBsKqtYvTaUV?= =?us-ascii?Q?PB9RXyPnT2Uaz9APClvDsfBc8ViyVXSIVig1sqMBH0ehBa0W/kl2i+YaSTCF?= =?us-ascii?Q?v+Zc8B56Ao7NtMJvXIc93o2vEiin1X6TylZXWrsTOKfdVAJXe9t+bqpRQWnP?= =?us-ascii?Q?PATkWDd0lRNjTpl/WIIApCs8/2IbMTsSjqwhFhGZMi6sKRDy4tuRnLDKLhjO?= =?us-ascii?Q?3ZdPiMV9FspIcxkx6nafoUM1GMbgkCJXvKCsxzwXwvXuhhnFNlAwGS9v6XeJ?= =?us-ascii?Q?U7WMFi99047sbvIP1QbyWRDHwXcsSvciq+SPxzrYvw9TU6HKijF9b3q7WF79?= =?us-ascii?Q?+vLHEm7MmP84DUmprb4lCsPEjv3Bl8DqyMcw6tfG39WzczJp9WMKgo6vmWH3?= =?us-ascii?Q?Eiw97WyLXgxmuL9ZnzhaD63jmvesrxUyIe+MmWxGNsyl03beA9jIMPXgsDPd?= =?us-ascii?Q?B7nYCEEy+s8/469VWPbiRYG1j8536GCPgx/oW3szJZE8HxO9B2oEeGX/Z9pr?= =?us-ascii?Q?3ojmDFtTeMWRgZ029Iu36j4/7V8+rdBEIBwPNrNfUmBLq5myRdMZvUmsK+GG?= =?us-ascii?Q?JKsVGjkOf/oqWWLw=3D?= X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1977; 5:qW3YR7JmjgOgbLJgc1pCyphqTDDK/7kHhtmrv3LpCAa3vcTkq/k0zg1o3SkrHUh4mc5xIJISuE5srf+b+oXH/XkRnQB5XEnj1P4Vonf4W+ltyjQVH5pB0EQR9iNNadgyx3LEh7Wj8XzdgJhsFLUxUw==; 24:UyUX2HYsODHC+5/bZAwyWjIniWhJeUuwslRFPbien9kVv0f5xtzfBPsFjcu6DnJPI1MBUfuadCD1ssKJb95nUqfuQPf59PMZszL+3VCX//c=; 20:+XuG9skZw1/4h4KfblmOrO+H4OnTb36RVEPdF6ZETbkgAzhTejAvRbGn5xuKnS8HT5okY1RHD4Zb5eUS65R2VA== SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Nov 2015 16:39:18.3349 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR0701MB1977 Subject: [dpdk-dev] [PATCH 02/15] eal: arm64: add armv8-a version of rte_cpuflags_64.h X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Signed-off-by: Jerin Jacob --- .../common/include/arch/arm/rte_cpuflags.h | 4 + .../common/include/arch/arm/rte_cpuflags_64.h | 152 +++++++++++++++++++++ 2 files changed, 156 insertions(+) create mode 100644 lib/librte_eal/common/include/arch/arm/rte_cpuflags_64.h diff --git a/lib/librte_eal/common/include/arch/arm/rte_cpuflags.h b/lib/librte_eal/common/include/arch/arm/rte_cpuflags.h index 8de78d2..b8f6288 100644 --- a/lib/librte_eal/common/include/arch/arm/rte_cpuflags.h +++ b/lib/librte_eal/common/include/arch/arm/rte_cpuflags.h @@ -33,6 +33,10 @@ #ifndef _RTE_CPUFLAGS_ARM_H_ #define _RTE_CPUFLAGS_ARM_H_ +#ifdef RTE_ARCH_64 +#include +#else #include +#endif #endif /* _RTE_CPUFLAGS_ARM_H_ */ diff --git a/lib/librte_eal/common/include/arch/arm/rte_cpuflags_64.h b/lib/librte_eal/common/include/arch/arm/rte_cpuflags_64.h new file mode 100644 index 0000000..7bcc12f --- /dev/null +++ b/lib/librte_eal/common/include/arch/arm/rte_cpuflags_64.h @@ -0,0 +1,152 @@ +/* + * BSD LICENSE + * + * Copyright (C) Cavium networks Ltd. 2015. + * + * 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_CPUFLAGS_ARM64_H_ +#define _RTE_CPUFLAGS_ARM64_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include +#include +#include + +#include "generic/rte_cpuflags.h" + +#ifndef AT_HWCAP +#define AT_HWCAP 16 +#endif + +#ifndef AT_HWCAP2 +#define AT_HWCAP2 26 +#endif + +#ifndef AT_PLATFORM +#define AT_PLATFORM 15 +#endif + +/* software based registers */ +enum cpu_register_t { + REG_HWCAP = 0, + REG_HWCAP2, + REG_PLATFORM, +}; + +/** + * Enumeration of all CPU features supported + */ +enum rte_cpu_flag_t { + RTE_CPUFLAG_FP = 0, + RTE_CPUFLAG_NEON, + RTE_CPUFLAG_EVTSTRM, + RTE_CPUFLAG_AES, + RTE_CPUFLAG_PMULL, + RTE_CPUFLAG_SHA1, + RTE_CPUFLAG_SHA2, + RTE_CPUFLAG_CRC32, + RTE_CPUFLAG_AARCH64, + /* The last item */ + RTE_CPUFLAG_NUMFLAGS,/**< This should always be the last! */ +}; + +static const struct feature_entry cpu_feature_table[] = { + FEAT_DEF(FP, 0x00000001, 0, REG_HWCAP, 0) + FEAT_DEF(NEON, 0x00000001, 0, REG_HWCAP, 1) + FEAT_DEF(EVTSTRM, 0x00000001, 0, REG_HWCAP, 2) + FEAT_DEF(AES, 0x00000001, 0, REG_HWCAP, 3) + FEAT_DEF(PMULL, 0x00000001, 0, REG_HWCAP, 4) + FEAT_DEF(SHA1, 0x00000001, 0, REG_HWCAP, 5) + FEAT_DEF(SHA2, 0x00000001, 0, REG_HWCAP, 6) + FEAT_DEF(CRC32, 0x00000001, 0, REG_HWCAP, 7) + FEAT_DEF(AARCH64, 0x00000001, 0, REG_PLATFORM, 1) +}; + +/* + * Read AUXV software register and get cpu features for ARM + */ +static inline void +rte_cpu_get_features(__attribute__((unused)) uint32_t leaf, + __attribute__((unused)) uint32_t subleaf, + cpuid_registers_t out) +{ + int auxv_fd; + Elf64_auxv_t auxv; + + auxv_fd = open("/proc/self/auxv", O_RDONLY); + assert(auxv_fd); + while (read(auxv_fd, &auxv, + sizeof(Elf64_auxv_t)) == sizeof(Elf64_auxv_t)) { + if (auxv.a_type == AT_HWCAP) { + out[REG_HWCAP] = auxv.a_un.a_val; + } else if (auxv.a_type == AT_HWCAP2) { + out[REG_HWCAP2] = auxv.a_un.a_val; + } else if (auxv.a_type == AT_PLATFORM) { + if (!strcmp((const char *)auxv.a_un.a_val, "aarch64")) + out[REG_PLATFORM] = 0x0001; + } + } +} + +/* + * Checks if a particular flag is available on current machine. + */ +static inline int +rte_cpu_get_flag_enabled(enum rte_cpu_flag_t feature) +{ + const struct feature_entry *feat; + cpuid_registers_t regs = {0}; + + if (feature >= RTE_CPUFLAG_NUMFLAGS) + /* Flag does not match anything in the feature tables */ + return -ENOENT; + + feat = &cpu_feature_table[feature]; + + if (!feat->leaf) + /* This entry in the table wasn't filled out! */ + return -EFAULT; + + /* get the cpuid leaf containing the desired feature */ + rte_cpu_get_features(feat->leaf, feat->subleaf, regs); + + /* check if the feature is enabled */ + return (regs[feat->reg] >> feat->bit) & 1; +} + +#ifdef __cplusplus +} +#endif + +#endif /* _RTE_CPUFLAGS_ARM64_H_ */