diff options
author | Luca Boccassi <luca.boccassi@gmail.com> | 2017-11-08 14:15:11 +0000 |
---|---|---|
committer | Luca Boccassi <luca.boccassi@gmail.com> | 2017-11-08 14:45:54 +0000 |
commit | 055c52583a2794da8ba1e85a48cce3832372b12f (patch) | |
tree | 8ceb1cb78fbb46a0f341f8ee24feb3c6b5540013 /drivers/net/ark | |
parent | f239aed5e674965691846e8ce3f187dd47523689 (diff) |
New upstream version 17.11-rc3
Change-Id: I6a5baa40612fe0c20f30b5fa773a6cbbac63a685
Signed-off-by: Luca Boccassi <luca.boccassi@gmail.com>
Diffstat (limited to 'drivers/net/ark')
-rw-r--r-- | drivers/net/ark/Makefile | 3 | ||||
-rw-r--r-- | drivers/net/ark/ark_ddm.c | 2 | ||||
-rw-r--r-- | drivers/net/ark/ark_ddm.h | 4 | ||||
-rw-r--r-- | drivers/net/ark/ark_ethdev.c | 22 | ||||
-rw-r--r-- | drivers/net/ark/ark_ethdev.h | 37 | ||||
-rw-r--r-- | drivers/net/ark/ark_ethdev_rx.c | 25 | ||||
-rw-r--r-- | drivers/net/ark/ark_ethdev_tx.c | 9 | ||||
-rw-r--r-- | drivers/net/ark/ark_ext.h | 2 | ||||
-rw-r--r-- | drivers/net/ark/ark_global.h | 2 | ||||
-rw-r--r-- | drivers/net/ark/ark_mpu.c | 2 | ||||
-rw-r--r-- | drivers/net/ark/ark_mpu.h | 4 | ||||
-rw-r--r-- | drivers/net/ark/ark_pktchkr.c | 4 | ||||
-rw-r--r-- | drivers/net/ark/ark_pktdir.c | 5 | ||||
-rw-r--r-- | drivers/net/ark/ark_pktgen.c | 4 | ||||
-rw-r--r-- | drivers/net/ark/ark_udm.c | 2 | ||||
-rw-r--r-- | drivers/net/ark/ark_udm.h | 4 |
16 files changed, 57 insertions, 74 deletions
diff --git a/drivers/net/ark/Makefile b/drivers/net/ark/Makefile index ca64b195..f1433bd2 100644 --- a/drivers/net/ark/Makefile +++ b/drivers/net/ark/Makefile @@ -62,5 +62,8 @@ LDLIBS += -lpthread ifdef CONFIG_RTE_EXEC_ENV_LINUXAPP LDLIBS += -ldl endif +LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool -lrte_ring +LDLIBS += -lrte_ethdev -lrte_net -lrte_kvargs +LDLIBS += -lrte_bus_pci include $(RTE_SDK)/mk/rte.lib.mk diff --git a/drivers/net/ark/ark_ddm.c b/drivers/net/ark/ark_ddm.c index 221460c7..929dc7d1 100644 --- a/drivers/net/ark/ark_ddm.c +++ b/drivers/net/ark/ark_ddm.c @@ -93,7 +93,7 @@ ark_ddm_reset(struct ark_ddm_t *ddm) } void -ark_ddm_setup(struct ark_ddm_t *ddm, phys_addr_t cons_addr, uint32_t interval) +ark_ddm_setup(struct ark_ddm_t *ddm, rte_iova_t cons_addr, uint32_t interval) { ddm->setup.cons_write_index_addr = cons_addr; ddm->setup.write_index_interval = interval / 4; /* 4 ns period */ diff --git a/drivers/net/ark/ark_ddm.h b/drivers/net/ark/ark_ddm.h index de61926c..f67ad012 100644 --- a/drivers/net/ark/ark_ddm.h +++ b/drivers/net/ark/ark_ddm.h @@ -127,7 +127,7 @@ struct ark_ddm_cpld_ps_t { #define ARK_DDM_SETUP 0x00e0 struct ark_ddm_setup_t { - phys_addr_t cons_write_index_addr; + rte_iova_t cons_write_index_addr; uint32_t write_index_interval; /* 4ns each */ volatile uint32_t cons_index; }; @@ -165,7 +165,7 @@ void ark_ddm_start(struct ark_ddm_t *ddm); int ark_ddm_stop(struct ark_ddm_t *ddm, const int wait); void ark_ddm_reset(struct ark_ddm_t *ddm); void ark_ddm_stats_reset(struct ark_ddm_t *ddm); -void ark_ddm_setup(struct ark_ddm_t *ddm, phys_addr_t cons_addr, +void ark_ddm_setup(struct ark_ddm_t *ddm, rte_iova_t cons_addr, uint32_t interval); void ark_ddm_dump_stats(struct ark_ddm_t *ddm, const char *msg); void ark_ddm_dump(struct ark_ddm_t *ddm, const char *msg); diff --git a/drivers/net/ark/ark_ethdev.c b/drivers/net/ark/ark_ethdev.c index 6db362b0..ff87c20e 100644 --- a/drivers/net/ark/ark_ethdev.c +++ b/drivers/net/ark/ark_ethdev.c @@ -35,12 +35,12 @@ #include <sys/stat.h> #include <dlfcn.h> +#include <rte_bus_pci.h> #include <rte_ethdev_pci.h> #include <rte_kvargs.h> #include "ark_global.h" #include "ark_logs.h" -#include "ark_ethdev.h" #include "ark_ethdev_tx.h" #include "ark_ethdev_rx.h" #include "ark_mpu.h" @@ -66,7 +66,7 @@ static int eth_ark_dev_link_update(struct rte_eth_dev *dev, int wait_to_complete); static int eth_ark_dev_set_link_up(struct rte_eth_dev *dev); static int eth_ark_dev_set_link_down(struct rte_eth_dev *dev); -static void eth_ark_dev_stats_get(struct rte_eth_dev *dev, +static int eth_ark_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats); static void eth_ark_dev_stats_reset(struct rte_eth_dev *dev); static void eth_ark_set_default_mac_addr(struct rte_eth_dev *dev, @@ -242,7 +242,7 @@ check_for_ext(struct ark_adapter *ark) (int (*)(struct rte_eth_dev *, void *)) dlsym(ark->d_handle, "dev_set_link_down"); ark->user_ext.stats_get = - (void (*)(struct rte_eth_dev *, struct rte_eth_stats *, + (int (*)(struct rte_eth_dev *, struct rte_eth_stats *, void *)) dlsym(ark->d_handle, "stats_get"); ark->user_ext.stats_reset = @@ -343,7 +343,6 @@ eth_ark_dev_init(struct rte_eth_dev *dev) /* We are a single function multi-port device. */ ret = ark_config_device(dev); dev->dev_ops = &ark_eth_dev_ops; - dev->data->dev_flags |= RTE_ETH_DEV_DETACHABLE; dev->data->mac_addrs = rte_zmalloc("ark", ETHER_ADDR_LEN, 0); if (!dev->data->mac_addrs) { @@ -452,10 +451,16 @@ ark_config_device(struct rte_eth_dev *dev) */ ark->start_pg = 0; ark->pg = ark_pktgen_init(ark->pktgen.v, 0, 1); + if (ark->pg == NULL) + return -1; ark_pktgen_reset(ark->pg); ark->pc = ark_pktchkr_init(ark->pktchkr.v, 0, 1); + if (ark->pc == NULL) + return -1; ark_pktchkr_stop(ark->pc); ark->pd = ark_pktdir_init(ark->pktdir.v); + if (ark->pd == NULL) + return -1; /* Verify HW */ if (ark_udm_verify(ark->udm.v)) @@ -641,7 +646,7 @@ eth_ark_dev_stop(struct rte_eth_dev *dev) for (i = 0; i < dev->data->nb_tx_queues; i++) { status = eth_ark_tx_queue_stop(dev, i); if (status != 0) { - uint8_t port = dev->data->port_id; + uint16_t port = dev->data->port_id; PMD_DRV_LOG(ERR, "tx_queue stop anomaly" " port %u, queue %u\n", @@ -693,7 +698,7 @@ eth_ark_dev_stop(struct rte_eth_dev *dev) ark_udm_dump_stats(ark->udm.v, "Post stop"); ark_udm_dump_perf(ark->udm.v, "Post stop"); - for (i = 0; i < dev->data->nb_tx_queues; i++) + for (i = 0; i < dev->data->nb_rx_queues; i++) eth_ark_rx_dump_queue(dev, i, __func__); /* Stop the packet checker if it is running */ @@ -811,7 +816,7 @@ eth_ark_dev_set_link_down(struct rte_eth_dev *dev) return 0; } -static void +static int eth_ark_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats) { uint16_t i; @@ -830,8 +835,9 @@ eth_ark_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats) for (i = 0; i < dev->data->nb_rx_queues; i++) eth_rx_queue_stats_get(dev->data->rx_queues[i], stats); if (ark->user_ext.stats_get) - ark->user_ext.stats_get(dev, stats, + return ark->user_ext.stats_get(dev, stats, ark->user_data[dev->data->port_id]); + return 0; } static void diff --git a/drivers/net/ark/ark_ethdev.h b/drivers/net/ark/ark_ethdev.h deleted file mode 100644 index df5547bf..00000000 --- a/drivers/net/ark/ark_ethdev.h +++ /dev/null @@ -1,37 +0,0 @@ -/*- - * BSD LICENSE - * - * Copyright (c) 2015-2017 Atomic Rules LLC - * All rights reserved. - * - * 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 copyright holder 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 _ARK_ETHDEV_H_ -#define _ARK_ETHDEV_H_ - -#endif diff --git a/drivers/net/ark/ark_ethdev_rx.c b/drivers/net/ark/ark_ethdev_rx.c index f39e6f68..a3c0377c 100644 --- a/drivers/net/ark/ark_ethdev_rx.c +++ b/drivers/net/ark/ark_ethdev_rx.c @@ -36,7 +36,6 @@ #include "ark_ethdev_rx.h" #include "ark_global.h" #include "ark_logs.h" -#include "ark_ethdev.h" #include "ark_mpu.h" #include "ark_udm.h" @@ -62,7 +61,7 @@ struct ark_rx_queue { struct rte_mbuf **reserve_q; /* array of physical addresses of the mbuf data pointer */ /* This point is a virtual address */ - phys_addr_t *paddress_q; + rte_iova_t *paddress_q; struct rte_mempool *mb_pool; struct ark_udm_t *udm; @@ -96,18 +95,18 @@ eth_ark_rx_hw_setup(struct rte_eth_dev *dev, struct ark_rx_queue *queue, uint16_t rx_queue_id __rte_unused, uint16_t rx_queue_idx) { - phys_addr_t queue_base; - phys_addr_t phys_addr_q_base; - phys_addr_t phys_addr_prod_index; + rte_iova_t queue_base; + rte_iova_t phys_addr_q_base; + rte_iova_t phys_addr_prod_index; - queue_base = rte_malloc_virt2phy(queue); + queue_base = rte_malloc_virt2iova(queue); phys_addr_prod_index = queue_base + offsetof(struct ark_rx_queue, prod_index); - phys_addr_q_base = rte_malloc_virt2phy(queue->paddress_q); + phys_addr_q_base = rte_malloc_virt2iova(queue->paddress_q); /* Verify HW */ - if (ark_mpu_verify(queue->mpu, sizeof(phys_addr_t))) { + if (ark_mpu_verify(queue->mpu, sizeof(rte_iova_t))) { PMD_DRV_LOG(ERR, "Illegal configuration rx queue\n"); return -1; } @@ -205,7 +204,7 @@ eth_ark_dev_rx_queue_setup(struct rte_eth_dev *dev, socket_id); queue->paddress_q = rte_zmalloc_socket("Ark_rx_queue paddr", - nb_desc * sizeof(phys_addr_t), + nb_desc * sizeof(rte_iova_t), 64, socket_id); @@ -500,22 +499,22 @@ eth_ark_rx_seed_mbufs(struct ark_rx_queue *queue) case 0: while (count != nb) { queue->paddress_q[seed_m++] = - (*mbufs++)->buf_physaddr; + (*mbufs++)->buf_iova; count++; /* FALLTHROUGH */ case 3: queue->paddress_q[seed_m++] = - (*mbufs++)->buf_physaddr; + (*mbufs++)->buf_iova; count++; /* FALLTHROUGH */ case 2: queue->paddress_q[seed_m++] = - (*mbufs++)->buf_physaddr; + (*mbufs++)->buf_iova; count++; /* FALLTHROUGH */ case 1: queue->paddress_q[seed_m++] = - (*mbufs++)->buf_physaddr; + (*mbufs++)->buf_iova; count++; /* FALLTHROUGH */ diff --git a/drivers/net/ark/ark_ethdev_tx.c b/drivers/net/ark/ark_ethdev_tx.c index 9ae7ae0e..4ef55d10 100644 --- a/drivers/net/ark/ark_ethdev_tx.c +++ b/drivers/net/ark/ark_ethdev_tx.c @@ -37,7 +37,6 @@ #include "ark_global.h" #include "ark_mpu.h" #include "ark_ddm.h" -#include "ark_ethdev.h" #include "ark_logs.h" #define ARK_TX_META_SIZE 32 @@ -94,7 +93,7 @@ eth_ark_tx_meta_from_mbuf(struct ark_tx_meta *meta, const struct rte_mbuf *mbuf, uint8_t flags) { - meta->physaddr = rte_mbuf_data_dma_addr(mbuf); + meta->physaddr = rte_mbuf_data_iova(mbuf); meta->delta_ns = 0; meta->data_len = rte_pktmbuf_data_len(mbuf); meta->flags = flags; @@ -311,15 +310,15 @@ eth_ark_tx_queue_setup(struct rte_eth_dev *dev, static int eth_ark_tx_hw_queue_config(struct ark_tx_queue *queue) { - phys_addr_t queue_base, ring_base, cons_index_addr; + rte_iova_t queue_base, ring_base, cons_index_addr; uint32_t write_interval_ns; /* Verify HW -- MPU */ if (ark_mpu_verify(queue->mpu, sizeof(struct ark_tx_meta))) return -1; - queue_base = rte_malloc_virt2phy(queue); - ring_base = rte_malloc_virt2phy(queue->meta_q); + queue_base = rte_malloc_virt2iova(queue); + ring_base = rte_malloc_virt2iova(queue->meta_q); cons_index_addr = queue_base + offsetof(struct ark_tx_queue, cons_index); diff --git a/drivers/net/ark/ark_ext.h b/drivers/net/ark/ark_ext.h index 63b7a261..d26c8198 100644 --- a/drivers/net/ark/ark_ext.h +++ b/drivers/net/ark/ark_ext.h @@ -91,7 +91,7 @@ int dev_set_link_up(struct rte_eth_dev *dev, int dev_set_link_down(struct rte_eth_dev *dev, void *user_data); -void stats_get(struct rte_eth_dev *dev, +int stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats, void *user_data); diff --git a/drivers/net/ark/ark_global.h b/drivers/net/ark/ark_global.h index 2a6375fe..aef2cf73 100644 --- a/drivers/net/ark/ark_global.h +++ b/drivers/net/ark/ark_global.h @@ -97,7 +97,7 @@ struct ark_user_ext { int (*link_update)(struct rte_eth_dev *, int wait_to_complete, void *); int (*dev_set_link_up)(struct rte_eth_dev *, void *); int (*dev_set_link_down)(struct rte_eth_dev *, void *); - void (*stats_get)(struct rte_eth_dev *, struct rte_eth_stats *, void *); + int (*stats_get)(struct rte_eth_dev *, struct rte_eth_stats *, void *); void (*stats_reset)(struct rte_eth_dev *, void *); void (*mac_addr_add)(struct rte_eth_dev *, struct ether_addr *, diff --git a/drivers/net/ark/ark_mpu.c b/drivers/net/ark/ark_mpu.c index cd2c0788..d4ba6dc7 100644 --- a/drivers/net/ark/ark_mpu.c +++ b/drivers/net/ark/ark_mpu.c @@ -118,7 +118,7 @@ ark_mpu_reset_stats(struct ark_mpu_t *mpu) } int -ark_mpu_configure(struct ark_mpu_t *mpu, phys_addr_t ring, uint32_t ring_size, +ark_mpu_configure(struct ark_mpu_t *mpu, rte_iova_t ring, uint32_t ring_size, int is_tx) { ark_mpu_reset(mpu); diff --git a/drivers/net/ark/ark_mpu.h b/drivers/net/ark/ark_mpu.h index a0171dbd..f6f6c808 100644 --- a/drivers/net/ark/ark_mpu.h +++ b/drivers/net/ark/ark_mpu.h @@ -75,7 +75,7 @@ struct ark_mpu_hw_t { #define ARK_MPU_CFG 0x040 struct ark_mpu_cfg_t { - phys_addr_t ring_base; /* phys_addr_t is a uint64_t */ + rte_iova_t ring_base; /* rte_iova_t is a uint64_t */ uint32_t ring_size; uint32_t ring_mask; uint32_t min_host_move; @@ -137,7 +137,7 @@ int ark_mpu_verify(struct ark_mpu_t *mpu, uint32_t obj_size); void ark_mpu_stop(struct ark_mpu_t *mpu); void ark_mpu_start(struct ark_mpu_t *mpu); int ark_mpu_reset(struct ark_mpu_t *mpu); -int ark_mpu_configure(struct ark_mpu_t *mpu, phys_addr_t ring, +int ark_mpu_configure(struct ark_mpu_t *mpu, rte_iova_t ring, uint32_t ring_size, int is_tx); void ark_mpu_dump(struct ark_mpu_t *mpu, const char *msg, uint16_t idx); diff --git a/drivers/net/ark/ark_pktchkr.c b/drivers/net/ark/ark_pktchkr.c index c3040af3..202a1d9b 100644 --- a/drivers/net/ark/ark_pktchkr.c +++ b/drivers/net/ark/ark_pktchkr.c @@ -112,6 +112,10 @@ ark_pktchkr_init(void *addr, int ord, int l2_mode) struct ark_pkt_chkr_inst *inst = rte_malloc("ark_pkt_chkr_inst", sizeof(struct ark_pkt_chkr_inst), 0); + if (inst == NULL) { + PMD_DRV_LOG(ERR, "Failed to malloc ark_pkt_chkr_inst.\n"); + return inst; + } inst->sregs = (struct ark_pkt_chkr_stat_regs *)addr; inst->cregs = (struct ark_pkt_chkr_ctl_regs *)(((uint8_t *)addr) + 0x100); diff --git a/drivers/net/ark/ark_pktdir.c b/drivers/net/ark/ark_pktdir.c index 66e5ce24..eb47dedb 100644 --- a/drivers/net/ark/ark_pktdir.c +++ b/drivers/net/ark/ark_pktdir.c @@ -36,6 +36,7 @@ #include "ark_pktdir.h" #include "ark_global.h" +#include "ark_logs.h" ark_pkt_dir_t @@ -45,6 +46,10 @@ ark_pktdir_init(void *base) rte_malloc("ark_pkt_dir_inst", sizeof(struct ark_pkt_dir_inst), 0); + if (inst == NULL) { + PMD_DRV_LOG(ERR, "Failed to malloc ark_pkt_dir_inst.\n"); + return inst; + } inst->regs = (struct ark_pkt_dir_regs *)base; inst->regs->ctrl = 0x00110110; /* POR state */ return inst; diff --git a/drivers/net/ark/ark_pktgen.c b/drivers/net/ark/ark_pktgen.c index 8c7a8a2d..018f37b6 100644 --- a/drivers/net/ark/ark_pktgen.c +++ b/drivers/net/ark/ark_pktgen.c @@ -110,6 +110,10 @@ ark_pktgen_init(void *adr, int ord, int l2_mode) struct ark_pkt_gen_inst *inst = rte_malloc("ark_pkt_gen_inst_pmd", sizeof(struct ark_pkt_gen_inst), 0); + if (inst == NULL) { + PMD_DRV_LOG(ERR, "Failed to malloc ark_pkt_gen_inst.\n"); + return inst; + } inst->regs = (struct ark_pkt_gen_regs *)adr; inst->ordinal = ord; inst->l2_mode = l2_mode; diff --git a/drivers/net/ark/ark_udm.c b/drivers/net/ark/ark_udm.c index 1ba7d26d..7a429ac7 100644 --- a/drivers/net/ark/ark_udm.c +++ b/drivers/net/ark/ark_udm.c @@ -122,7 +122,7 @@ ark_udm_configure(struct ark_udm_t *udm, } void -ark_udm_write_addr(struct ark_udm_t *udm, phys_addr_t addr) +ark_udm_write_addr(struct ark_udm_t *udm, rte_iova_t addr) { udm->rt_cfg.hw_prod_addr = addr; } diff --git a/drivers/net/ark/ark_udm.h b/drivers/net/ark/ark_udm.h index 29bf1e8f..915343fe 100644 --- a/drivers/net/ark/ark_udm.h +++ b/drivers/net/ark/ark_udm.h @@ -137,7 +137,7 @@ struct ark_udm_tlp_ps_t { #define ARK_UDM_RT_CFG 0x00e0 struct ark_udm_rt_cfg_t { - phys_addr_t hw_prod_addr; + rte_iova_t hw_prod_addr; uint32_t write_interval; /* 4ns cycles */ volatile uint32_t prod_idx; /* RO */ }; @@ -171,7 +171,7 @@ void ark_udm_configure(struct ark_udm_t *udm, uint32_t headroom, uint32_t dataroom, uint32_t write_interval_ns); -void ark_udm_write_addr(struct ark_udm_t *udm, phys_addr_t addr); +void ark_udm_write_addr(struct ark_udm_t *udm, rte_iova_t addr); void ark_udm_stats_reset(struct ark_udm_t *udm); void ark_udm_dump_stats(struct ark_udm_t *udm, const char *msg); void ark_udm_dump_queue_stats(struct ark_udm_t *udm, const char *msg, |