From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <Santosh.Shukla@cavium.com>
Received: from NAM03-CO1-obe.outbound.protection.outlook.com
 (mail-co1nam03on0062.outbound.protection.outlook.com [104.47.40.62])
 by dpdk.org (Postfix) with ESMTP id 8AC121B1A0
 for <dev@dpdk.org>; Sun,  8 Oct 2017 14:41:05 +0200 (CEST)
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=Gmbx6nlUwYbzrE8GqmilV6Eg8ZipBLN5G1gRR5ECe0c=;
 b=VWUayeus2PwI9XBGDNkBFcWifOEf/ClOFkz1t4Y3B18m+ShLfw9oPUJd/HLDyNx67R9VMPdvnw903/Czzy65062pdi4T1G3z93AuzU6dqq9LDbcVvOJcwn5MS+BBES3CFd2eR/miQVOTVemMWmMoED0s86eBop+GiIp+Y47C7tU=
Authentication-Results: spf=none (sender IP is )
 smtp.mailfrom=Santosh.Shukla@cavium.com; 
Received: from localhost.localdomain (14.140.2.178) by
 MWHPR07MB3103.namprd07.prod.outlook.com (10.172.95.9) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id
 15.20.77.7; Sun, 8 Oct 2017 12:41:00 +0000
From: Santosh Shukla <santosh.shukla@caviumnetworks.com>
To: olivier.matz@6wind.com,
	dev@dpdk.org
Cc: thomas@monjalon.net, jerin.jacob@caviumnetworks.com,
 hemant.agrawal@nxp.com, Santosh Shukla <santosh.shukla@caviumnetworks.com>
Date: Sun,  8 Oct 2017 18:10:04 +0530
Message-Id: <20171008124011.1577-4-santosh.shukla@caviumnetworks.com>
X-Mailer: git-send-email 2.14.1
In-Reply-To: <20171008124011.1577-1-santosh.shukla@caviumnetworks.com>
References: <20170831063719.19273-1-santosh.shukla@caviumnetworks.com>
 <20171008124011.1577-1-santosh.shukla@caviumnetworks.com>
MIME-Version: 1.0
Content-Type: text/plain
X-Originating-IP: [14.140.2.178]
X-ClientProxiedBy: BMXPR01CA0045.INDPRD01.PROD.OUTLOOK.COM (10.174.214.31) To
 MWHPR07MB3103.namprd07.prod.outlook.com (10.172.95.9)
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 9a90b97c-4a43-4718-9af2-08d50e49d632
X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0;
 RULEID:(22001)(2017030254152)(2017052603199)(201703131423075)(201703031133081)(201702281549075);
 SRVR:MWHPR07MB3103; 
X-Microsoft-Exchange-Diagnostics: 1; MWHPR07MB3103;
 3:9/GVA69RWwDJlYAWYi0FXD2AYTSw5WgaAmK6QCsdlW+I720QfQL5kT1MteDjSrpf5cq/uau1L89cePvInWcF6cyI+sPUfnePc8Sr6X0xbs7UuyKyo7mZUcMYYlm6LmcGX3wdl3gOKfDJFw2oVqH+W3NnuNQ5aD6U3zb8RTg9vhryeUnpPHZl7PB0Jyl2wzMlOLQQSFwRsEOu4TgRpVf6g3JJmrCV30fRneU1FuOPL4krRhv3gVlVBbJ+C2vheFld;
 25:SoUOGagIPhwipKbShU/aOsiOv12TTZc3dxQ/Pv0q0tn6siz83oWfKFf+iCvn9tiosMZbkzcX3Gmcdou9yrpoEp6xN41D7JfTlpGDKo77JyGXTCHoSG0sKQZAviZ2g/K/D8fVB1Kfr5u+6cWsTGGazL0BDsA/+JnepfvVlVBylOIltaS0Mm/B7obwassJhOOfWe6/31xVmv8/R+pwW2MUH3aT2NEbWl5Wnv68tco+y5Q4s5FJ9pULiQ+IIBVrpZVEjgnYpw4Pv2/EMNrF2bfouxekK2lMhwCBmQuQLOyjtsIzdnvwQrhV534LshGbzLglCiMU497li73O7g7+sZtMJA==;
 31:+RwTopl4+CF0Y2StZbSUu+GVCYsdU7sYnpBe0FNRoctI6CyCnvIuRLT7/UFlXsweKGTDIUcjy0RaxHalAVzUsOOoZ0dtHZiyeHVixZ5Dt0w2Cb68oTzV3BsopdTe/jp45w8sOolmUuJkL5tyLZL9IHlnJlCs2ObVuDeLxwRL0/p2mhbQ7KIvk/eVCBs/rc6vInCCjdQHRSPwqGfNzJuEqjGHjrr/eHLKZSghLa1vm6s=
X-MS-TrafficTypeDiagnostic: MWHPR07MB3103:
X-Microsoft-Exchange-Diagnostics: 1; MWHPR07MB3103;
 20:C1ZARIMLNhzH7MzI00SBpPyH6IJv2MfsQ0gqkbiOdFJplawcQ3y5+pTiN8Emj77K2UL7hSW1K5jUE57aHaLjeT1Y0ni1W8BULxH6OCfzcYryJMAh//FHYO/DC2wKxf1usJaKxxy+OFL0xZjFvyw2xrx+VZQCEucbYIlh3s+OwM3wavXCYQGZzmjewDNCjymZ1WmYvxYtMUpuOZTj/GcnbZK41bnsfGKoOAezRTXiIVIvpNO6tT9POygUQI0x8hT7t/Ez7MMyJEPbnThL0sCnwm5Ifp0Cwvx9Z/xImicU4uoV770HDNP6dBuKnlNT8hbxZjCh6Kh42zJ/o45i4lF4tpcCYlHCRRyA32un252xBIwH4VzPfQuJZ+uCY1xGndwtgqvCYPz7wU6d6E8KQemIrIOImL5/Ipg83lXHyWG+HneAkx/IYUQDhEKKzuhItV7rjTrw4O9Fs5ZiEb8Czz2jUHFfI7yvg2Qnyul0kvjhsoKuGX/kbpzJK5XWKkAnikELskhIM+DDQvbgFNBRK3tNiSqZsziAUPPy6HsM7OP7tCiqjEkP7Fn//HxTOC2dTdElIk+ozcVclMaCYmn6YEXrISYo84gnqZxGWv0hTJ1dMI4=;
 4:4850aS/z7BpIfB4DhDkuGDGIgkM+B6XYrkdp7Vl95QEcc1cAUAp1+ryQXDkHysQ53KsWHVEDcw6+NSlHosNxJtdnRTldcU7twJDlImcig3WdJqLVMOSDDjWAyn88Tchqxr2odnJg9iLKdD57+bgAEDxuSaULIV7A6lGv5uU1MhdH1MpHWWZDCvVslX4jw7Cb9aIszFy+e1YGRK5V644NPCsxFb6QZ5JdKk5uMzmtncEkx1mwUnoDEjcXrwqYLiya
X-Exchange-Antispam-Report-Test: UriScan:;
X-Microsoft-Antispam-PRVS: <MWHPR07MB3103CC2AD289FD81677AE9CAEA770@MWHPR07MB3103.namprd07.prod.outlook.com>
X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0;
 RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(5005006)(8121501046)(3002001)(100000703101)(100105400095)(93006095)(10201501046)(6041248)(20161123562025)(20161123560025)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123564025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);
 SRVR:MWHPR07MB3103; BCL:0; PCL:0;
 RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);
 SRVR:MWHPR07MB3103; 
X-Forefront-PRVS: 0454444834
X-Forefront-Antispam-Report: SFV:NSPM;
 SFS:(10009020)(6009001)(6069001)(376002)(346002)(189002)(199003)(3846002)(16526018)(1076002)(6512007)(2950100002)(33646002)(478600001)(97736004)(107886003)(50466002)(25786009)(106356001)(8936002)(48376002)(36756003)(4326008)(5660300001)(50226002)(105586002)(305945005)(5009440100003)(16586007)(189998001)(72206003)(66066001)(76176999)(81156014)(6486002)(5003940100001)(8656003)(68736007)(47776003)(316002)(53936002)(7736002)(81166006)(50986999)(2906002)(42882006)(6116002)(8676002)(101416001)(6506006)(110426004);
 DIR:OUT; SFP:1101; SCL:1; SRVR:MWHPR07MB3103; H:localhost.localdomain; FPR:;
 SPF:None; PTR:InfoNoRecords; MX:1; A: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; MWHPR07MB3103;
 23:Si8xTWmN8bcHiqFmw/VU4ACdn0pdrzeagc/1pnjKP?=
 =?us-ascii?Q?zwcKCcjSccwn0ikiw7dcfoEP9C297LZVdF8mGYXzFMjeINMYQvtjfa0rnDWM?=
 =?us-ascii?Q?rnrk1uC9eBeK0IPFRe0hozf/kdY/m+xZ46ArsU+nVmrqltYxA7d+cFSf7igg?=
 =?us-ascii?Q?YViYO+yRIPvPFH0ps/YWAV6hsgSLm086QlVZyfoxNfKzjINhV953Go3aFLX2?=
 =?us-ascii?Q?b7y5bEtzOkgKDcAIlyy7JQTF15zW76vn2H7a7jKyqXzhfYaYH4siW44lyaNb?=
 =?us-ascii?Q?h2GZ1Ehj81GxcEZXN6+asF7r8GvpxfG9gtvmv3/oXGREvUj+W5jKP3IbQd+j?=
 =?us-ascii?Q?vBbGOmK2X4+hMvqYbkdn/u0CIBNExNzYV92CJMWRBQRMc2MLW2O3zfH+q0+v?=
 =?us-ascii?Q?R1sxO9Hn/Ou4C0bwSSzxzwKRwPYX3zG+0pPYgEp0F7b56KzDNIE/tFi73/p7?=
 =?us-ascii?Q?U+L7ZlS8xlpcn6CFe2ju4YBhbbcQro/8Y2gkOFlF/c8GpxLMsWMFwliwkI2M?=
 =?us-ascii?Q?ayEtl6w7PseDnY2gZ817SGRbD2HML2zJdEidJ1Az+PmqUhoTR96JI9gMloYo?=
 =?us-ascii?Q?wtX5eBgBSROJpPzJ3a23rEbwH30DxoYn44670AfJluZ3PEwFC2MFKgr/WQ02?=
 =?us-ascii?Q?PnTA8TaSdtDnGPIbCw89kNkKzxiTNCYWElIGppA2O13INlSzwhZT5nbEI/FC?=
 =?us-ascii?Q?YkGIGyh4RW9KfwlnWjm7JD2mtlKz/UiOzTAdxqdeJHUQ9xew7ugIubjYvBju?=
 =?us-ascii?Q?ER0jrUMw6eYAO7XstXsNZaamzAU7B8Io2Gl6JmKkM2jpW5iPjAB/eMEiiyNE?=
 =?us-ascii?Q?8HKKJa0Kn2bO3z/Hka0KCnVDcblxtEFo5O92KfgRvCaladWuMCom3XQF0uF3?=
 =?us-ascii?Q?/EOjRTOtaEuXChNffL2ZU0nGi3U/xDbIwIGyb9frGa8zTv3E8MUv+Z7h9CrV?=
 =?us-ascii?Q?tm1JYq7Ecn0iudks/fUd5ngs0GMYvIpZgBhUiTos/ogJZ0keoFAR6oL4d3V+?=
 =?us-ascii?Q?F8uahv36NGJpkK+7S3cLNy2OPb0rszg+Uu3Oos4K08xL9H3lOazdrn9pPDwV?=
 =?us-ascii?Q?MqhzniFPYXwuBpLeoGs3TA3XNgBJq1SWGlFvY4w/craCyAW44Y83CbtoVnNY?=
 =?us-ascii?Q?RIO+D84QWc+YUUQU7vHFte9VZkJq9rRGzkRG8t/ix6tcnFfu9FMD/ZAj1P4a?=
 =?us-ascii?Q?E2Qh366gbGwH9w=3D?=
X-Microsoft-Exchange-Diagnostics: 1; MWHPR07MB3103;
 6:35cxWF/emnFA9TRD6nwXPnkxj1iv57ePwPdA9Y5yY7jeCoaruhI+7xV7RmOXU0G1EWDuYo8ZYGMbbgFvVha+mmLSy63W0PCv74s+mta3ndT9Xi5Mq3EDpovS06xnGdXKmz41ZTdw9GBflhWmJMqrHijRfJGb4H0slTg6X2Y8LW/s+z/2QsinNBlkqHx5IhdkfE4N8eiWphVtYmiUXNfmPudIlkbyO9JKRSMBmRhuLSs29axNlYDKDtERYwDqDs0YWOIogssDdYC4ufqvsoI1rMXag2uv3D1mSiGwRaL0pAsz/JxFRL8LZGwsxf5XkEyP7cZFoCwnmnNifRy8BbEJzA==;
 5:BO6oGTANeLjtJSyL7+Nwa/L5/6Syjiao/bFT1TKeUvnI9ujvqHE7c7jMtuesy6trSOs81g0jnlMVrUSoH6A1shjKSl3v5J8YvgtPRRGi63lRqwvdVV/v3kS/m4tVsGsrTxgYWiIuAmG0oGNEVCidGQ==;
 24:lGlqfLYJ8vxQ3n20beK1/E4YIU8JUHPvn/b1wqviNapFgRYpXxEYyA0G2tB+yalQK07WteAEAFkyJAaMuD8P7O/WZ+5Rxr8JqYsHE9aicSY=;
 7:iMMRijJD2tDWW6x9ICVicNpj2mzRAguVLZKr9bBKeGU6mvBYxaFz4Ms8b2SP8Cvy0Gaw+8vZ4/Hvfothi+6vgMos9k8mX7MEZbNhwcx4Zl5IrgY77562J5TwQMwvEzcxoA1jD6Z73y5cTMb6trkvWzoTfn7aqG9G9zFDslZgIdMRpvkCUyuZ3LjOdh7TDGo6eT2JbkTr9NAZ1pmQf4MKE2LMDshxRffcAc+IYcHjoxU=
SpamDiagnosticOutput: 1:99
SpamDiagnosticMetadata: NSPM
X-OriginatorOrg: caviumnetworks.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Oct 2017 12:41:00.7460 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194
X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR07MB3103
Subject: [dpdk-dev] [PATCH v3 03/10] mempool/octeontx: probe fpavf pcie
	devices
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <http://dpdk.org/ml/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://dpdk.org/ml/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <http://dpdk.org/ml/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
X-List-Received-Date: Sun, 08 Oct 2017 12:41:06 -0000

A mempool device is set of PCIe vfs.
On Octeontx HW, each mempool devices are enumerated as
separate SRIOV VF PCIe device.

In order to expose as a mempool device:
On PCIe probe, the driver stores the information associated with the
PCIe device and later upon application pool request
(e.g. rte_mempool_create_empty), Infrastructure creates a pool device
with earlier probed PCIe VF devices.

Signed-off-by: Santosh Shukla <santosh.shukla@caviumnetworks.com>
Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
---
 drivers/mempool/octeontx/octeontx_fpavf.c | 151 ++++++++++++++++++++++++++++++
 drivers/mempool/octeontx/octeontx_fpavf.h |  39 ++++++++
 2 files changed, 190 insertions(+)

diff --git a/drivers/mempool/octeontx/octeontx_fpavf.c b/drivers/mempool/octeontx/octeontx_fpavf.c
index 9bb7759c0..0b4a9357f 100644
--- a/drivers/mempool/octeontx/octeontx_fpavf.c
+++ b/drivers/mempool/octeontx/octeontx_fpavf.c
@@ -29,3 +29,154 @@
  *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <sys/mman.h>
+
+#include <rte_atomic.h>
+#include <rte_eal.h>
+#include <rte_pci.h>
+#include <rte_errno.h>
+#include <rte_memory.h>
+#include <rte_malloc.h>
+#include <rte_spinlock.h>
+
+#include "octeontx_fpavf.h"
+
+struct fpavf_res {
+	void		*pool_stack_base;
+	void		*bar0;
+	uint64_t	stack_ln_ptr;
+	uint16_t	domain_id;
+	uint16_t	vf_id;	/* gpool_id */
+	uint16_t	sz128;	/* Block size in cache lines */
+	bool		is_inuse;
+};
+
+struct octeontx_fpadev {
+	rte_spinlock_t lock;
+	uint8_t	total_gpool_cnt;
+	struct fpavf_res pool[FPA_VF_MAX];
+};
+
+static struct octeontx_fpadev fpadev;
+
+static void
+octeontx_fpavf_setup(void)
+{
+	uint8_t i;
+	static bool init_once;
+
+	if (!init_once) {
+		rte_spinlock_init(&fpadev.lock);
+		fpadev.total_gpool_cnt = 0;
+
+		for (i = 0; i < FPA_VF_MAX; i++) {
+
+			fpadev.pool[i].domain_id = ~0;
+			fpadev.pool[i].stack_ln_ptr = 0;
+			fpadev.pool[i].sz128 = 0;
+			fpadev.pool[i].bar0 = NULL;
+			fpadev.pool[i].pool_stack_base = NULL;
+			fpadev.pool[i].is_inuse = false;
+		}
+		init_once = 1;
+	}
+}
+
+static int
+octeontx_fpavf_identify(void *bar0)
+{
+	uint64_t val;
+	uint16_t domain_id;
+	uint16_t vf_id;
+	uint64_t stack_ln_ptr;
+
+	val = fpavf_read64((void *)((uintptr_t)bar0 +
+				FPA_VF_VHAURA_CNT_THRESHOLD(0)));
+
+	domain_id = (val >> 8) & 0xffff;
+	vf_id = (val >> 24) & 0xffff;
+
+	stack_ln_ptr = fpavf_read64((void *)((uintptr_t)bar0 +
+					FPA_VF_VHPOOL_THRESHOLD(0)));
+	if (vf_id >= FPA_VF_MAX) {
+		fpavf_log_err("vf_id(%d) greater than max vf (32)\n", vf_id);
+		return -1;
+	}
+
+	if (fpadev.pool[vf_id].is_inuse) {
+		fpavf_log_err("vf_id %d is_inuse\n", vf_id);
+		return -1;
+	}
+
+	fpadev.pool[vf_id].domain_id = domain_id;
+	fpadev.pool[vf_id].vf_id = vf_id;
+	fpadev.pool[vf_id].bar0 = bar0;
+	fpadev.pool[vf_id].stack_ln_ptr = stack_ln_ptr;
+
+	/* SUCCESS */
+	return vf_id;
+}
+
+/* FPAVF pcie device aka mempool probe */
+static int
+fpavf_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev)
+{
+	uint8_t *idreg;
+	int res;
+	struct fpavf_res *fpa;
+
+	RTE_SET_USED(pci_drv);
+	RTE_SET_USED(fpa);
+
+	/* For secondary processes, the primary has done all the work */
+	if (rte_eal_process_type() != RTE_PROC_PRIMARY)
+		return 0;
+
+	if (pci_dev->mem_resource[0].addr == NULL) {
+		fpavf_log_err("Empty bars %p ", pci_dev->mem_resource[0].addr);
+		return -ENODEV;
+	}
+	idreg = pci_dev->mem_resource[0].addr;
+
+	octeontx_fpavf_setup();
+
+	res = octeontx_fpavf_identify(idreg);
+	if (res < 0)
+		return -1;
+
+	fpa = &fpadev.pool[res];
+	fpadev.total_gpool_cnt++;
+	rte_wmb();
+
+	fpavf_log_dbg("total_fpavfs %d bar0 %p domain %d vf %d stk_ln_ptr 0x%x",
+		       fpadev.total_gpool_cnt, fpa->bar0, fpa->domain_id,
+		       fpa->vf_id, (unsigned int)fpa->stack_ln_ptr);
+
+	return 0;
+}
+
+static const struct rte_pci_id pci_fpavf_map[] = {
+	{
+		RTE_PCI_DEVICE(PCI_VENDOR_ID_CAVIUM,
+				PCI_DEVICE_ID_OCTEONTX_FPA_VF)
+	},
+	{
+		.vendor_id = 0,
+	},
+};
+
+static struct rte_pci_driver pci_fpavf = {
+	.id_table = pci_fpavf_map,
+	.drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_IOVA_AS_VA,
+	.probe = fpavf_probe,
+};
+
+RTE_PMD_REGISTER_PCI(octeontx_fpavf, pci_fpavf);
diff --git a/drivers/mempool/octeontx/octeontx_fpavf.h b/drivers/mempool/octeontx/octeontx_fpavf.h
index 1c703725c..c43b1a7d2 100644
--- a/drivers/mempool/octeontx/octeontx_fpavf.h
+++ b/drivers/mempool/octeontx/octeontx_fpavf.h
@@ -34,6 +34,7 @@
 #define	__OCTEONTX_FPAVF_H__
 
 #include <rte_debug.h>
+#include <rte_io.h>
 
 #ifdef RTE_LIBRTE_OCTEONTX_MEMPOOL_DEBUG
 #define fpavf_log_info(fmt, args...) \
@@ -87,4 +88,42 @@
 #define	FPA_VF0_APERTURE_SHIFT		22
 #define FPA_AURA_SET_SIZE		16
 
+
+/*
+ * In Cavium OcteonTX SoC, all accesses to the device registers are
+ * implictly strongly ordered. So, The relaxed version of IO operation is
+ * safe to use with out any IO memory barriers.
+ */
+#define fpavf_read64 rte_read64_relaxed
+#define fpavf_write64 rte_write64_relaxed
+
+/* ARM64 specific functions */
+#if defined(RTE_ARCH_ARM64)
+#define fpavf_load_pair(val0, val1, addr) ({		\
+			asm volatile(			\
+			"ldp %x[x0], %x[x1], [%x[p1]]"	\
+			:[x0]"=r"(val0), [x1]"=r"(val1) \
+			:[p1]"r"(addr)			\
+			); })
+
+#define fpavf_store_pair(val0, val1, addr) ({		\
+			asm volatile(			\
+			"stp %x[x0], %x[x1], [%x[p1]]"	\
+			::[x0]"r"(val0), [x1]"r"(val1), [p1]"r"(addr) \
+			); })
+#else /* Un optimized functions for building on non arm64 arch */
+
+#define fpavf_load_pair(val0, val1, addr)		\
+do {							\
+	val0 = rte_read64(addr);			\
+	val1 = rte_read64(((uint8_t *)addr) + 8);	\
+} while (0)
+
+#define fpavf_store_pair(val0, val1, addr)		\
+do {							\
+	rte_write64(val0, addr);			\
+	rte_write64(val1, (((uint8_t *)addr) + 8));	\
+} while (0)
+#endif
+
 #endif	/* __OCTEONTX_FPAVF_H__ */
-- 
2.14.1