From patchwork Tue Aug 27 07:07:05 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sachin Saxena X-Patchwork-Id: 172253 Delivered-To: patch@linaro.org Received: by 2002:a92:d204:0:0:0:0:0 with SMTP id y4csp5396730ily; Tue, 27 Aug 2019 00:10:00 -0700 (PDT) X-Google-Smtp-Source: APXvYqwnGOff6MRWn2gKxNUBj6pqtcMDv1S49oj47BHPMMHfxi4Gi2cq5YaRhicsV53GGn4l+Nic X-Received: by 2002:aa7:d397:: with SMTP id x23mr22103088edq.11.1566889800509; Tue, 27 Aug 2019 00:10:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1566889800; cv=none; d=google.com; s=arc-20160816; b=j3JdKZNSNFAL0ADnN9a4H+oPcChc1y7kSKHyob5zzMSgZtwBNhcleuCVMJaNd373sm 7jARsaWbKL1Q4iiGM6+cKi6lVXxXB/Xl/YLzj5GA3RggzHh2PoN/yRg3y8PpIW+lJr7x S0NeXtwedadNBQb40c4Wq+Yq8wtUMJ34LE9ebjTla+jXSHpJNknwDFG4E2VJTEY149w2 x+Wo6FtRaIFHKHhOCTO4UpohvhHZDd/t3dk01qdTIfRlYx3AVrUlW+DHftT6Z39UCahb JyMC474E2qyEkejSu7rI3KFyH29xLad+wh0hj4X0K76NwtTbisD9U87ov2h1GhjsYPbV zRzQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject:references:in-reply-to :message-id:date:cc:to:from; bh=YGOEtEg0vvPkN8F5KCCW9mzfFqF0wwZFF9JwSyaQK2A=; b=vJhBMR1MC0zhh41CJc/1e+rX0vNAnbGS24PK82V/yippXPaJRiR+RNVNL0x1mFZNer a5NG53gkKM6hE/AIw3g5AOLP+Onu7Tfxy+dZQTXrki18I1s/qRB6zopzCi9UbhYpMkD0 MHQf/xI13xLJDN5S+NYyCW3Sh93JGqcSouPuNsmVMsCUeTzaLBhOuqtf9BpfGcEHX7gB xS8ZkMmtre5MASzHdB/fMJvZAVeclTl0lYMey25ORrJLteI5FtTh8UGIL8K5Z37pDx53 CU+U14VPq5LoOXYHQCAeN/Sx5qugf10cjSSBwMyjA6pXqKwZCmueneYif1O7fkPQmXqY enPw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of dev-bounces@dpdk.org designates 92.243.14.124 as permitted sender) smtp.mailfrom=dev-bounces@dpdk.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=nxp.com Return-Path: Received: from dpdk.org (dpdk.org. [92.243.14.124]) by mx.google.com with ESMTP id t49si8364806edb.429.2019.08.27.00.10.00; Tue, 27 Aug 2019 00:10:00 -0700 (PDT) Received-SPF: pass (google.com: domain of dev-bounces@dpdk.org designates 92.243.14.124 as permitted sender) client-ip=92.243.14.124; Authentication-Results: mx.google.com; spf=pass (google.com: domain of dev-bounces@dpdk.org designates 92.243.14.124 as permitted sender) smtp.mailfrom=dev-bounces@dpdk.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id DF3971BFFC; Tue, 27 Aug 2019 09:09:28 +0200 (CEST) Received: from inva021.nxp.com (inva021.nxp.com [92.121.34.21]) by dpdk.org (Postfix) with ESMTP id 8906B1BF9A for ; Tue, 27 Aug 2019 09:09:17 +0200 (CEST) Received: from inva021.nxp.com (localhost [127.0.0.1]) by inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id 63E522001BC; Tue, 27 Aug 2019 09:09:17 +0200 (CEST) Received: from invc005.ap-rdc01.nxp.com (invc005.ap-rdc01.nxp.com [165.114.16.14]) by inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id 283122005C9; Tue, 27 Aug 2019 09:09:15 +0200 (CEST) Received: from bf-netperf1.ap.freescale.net (bf-netperf1.ap.freescale.net [10.232.133.63]) by invc005.ap-rdc01.nxp.com (Postfix) with ESMTP id 9EB3C4031D; Tue, 27 Aug 2019 15:09:11 +0800 (SGT) From: Sachin Saxena To: dev@dpdk.org Cc: thomas@monjalon.net, Nipun Gupta Date: Tue, 27 Aug 2019 12:37:05 +0530 Message-Id: <20190827070730.11206-6-sachin.saxena@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190827070730.11206-1-sachin.saxena@nxp.com> References: <20190827070730.11206-1-sachin.saxena@nxp.com> X-Virus-Scanned: ClamAV using ClamSMTP Subject: [dpdk-dev] [PATCH v1 05/30] net/dpaa: support Rx interrupt handler 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" From: Nipun Gupta This patch adds interrupt handler support for the ethernet devices which are configured with a dedicated portal for packet Rx (i.e. for FQ's in push mode). Signed-off-by: Nipun Gupta --- drivers/bus/dpaa/base/qbman/qman_driver.c | 3 ++- drivers/bus/dpaa/include/fsl_qman.h | 18 +++++++++++++- drivers/bus/dpaa/include/fsl_usd.h | 2 +- drivers/bus/dpaa/rte_dpaa_bus.h | 1 + drivers/net/dpaa/dpaa_ethdev.c | 29 +++++++++++++++++++++-- 5 files changed, 48 insertions(+), 5 deletions(-) -- 2.17.1 diff --git a/drivers/bus/dpaa/base/qbman/qman_driver.c b/drivers/bus/dpaa/base/qbman/qman_driver.c index 06ed814e1..acd003143 100644 --- a/drivers/bus/dpaa/base/qbman/qman_driver.c +++ b/drivers/bus/dpaa/base/qbman/qman_driver.c @@ -121,7 +121,7 @@ void qman_thread_irq(void) out_be32(qpcfg.addr_virt[DPAA_PORTAL_CI] + 0x36C0, 0); } -struct qman_portal *fsl_qman_fq_portal_create(void) +struct qman_portal *fsl_qman_fq_portal_create(int *fd) { struct qman_portal *portal = NULL; struct qm_portal_config *q_pcfg; @@ -171,6 +171,7 @@ struct qman_portal *fsl_qman_fq_portal_create(void) irq_map.portal_cinh = q_map.addr.cinh; process_portal_irq_map(q_fd, &irq_map); + *fd = q_fd; return portal; err: if (portal) diff --git a/drivers/bus/dpaa/include/fsl_qman.h b/drivers/bus/dpaa/include/fsl_qman.h index 5f13a5544..064b65aed 100644 --- a/drivers/bus/dpaa/include/fsl_qman.h +++ b/drivers/bus/dpaa/include/fsl_qman.h @@ -1215,6 +1215,9 @@ struct qman_fq { struct qman_fq_cb cb; u32 fqid_le; + u32 fqid; + + int q_fd; u16 ch_id; u8 cgr_groupid; u8 is_static:4; @@ -1231,7 +1234,6 @@ struct qman_fq { volatile unsigned long flags; enum qman_fq_state state; - u32 fqid; spinlock_t fqlock; struct rb_node node; @@ -1333,6 +1335,13 @@ u32 qman_portal_dequeue(struct rte_event ev[], unsigned int poll_limit, */ int qman_irqsource_add(u32 bits); +/** + * qman_fq_portal_irqsource_add - samilar to qman_irqsource_add, but it + * takes portal (fq specific) as input rather than using the thread affined + * portal. + */ +int qman_fq_portal_irqsource_add(struct qman_portal *p, u32 bits); + /** * qman_irqsource_remove - remove processing sources from being interrupt-driven * @bits: bitmask of QM_PIRQ_**I processing sources @@ -1343,6 +1352,13 @@ int qman_irqsource_add(u32 bits); */ int qman_irqsource_remove(u32 bits); +/** + * qman_fq_portal_irqsource_remove - similar to qman_irqsource_remove, but it + * takes portal (fq specific) as input rather than using the thread affined + * portal. + */ +int qman_fq_portal_irqsource_remove(struct qman_portal *p, u32 bits); + /** * qman_affine_channel - return the channel ID of an portal * @cpu: the cpu whose affine portal is the subject of the query diff --git a/drivers/bus/dpaa/include/fsl_usd.h b/drivers/bus/dpaa/include/fsl_usd.h index ea7be38af..a407e2b22 100644 --- a/drivers/bus/dpaa/include/fsl_usd.h +++ b/drivers/bus/dpaa/include/fsl_usd.h @@ -75,7 +75,7 @@ int qman_global_init(void); int bman_global_init(void); /* Direct portal create and destroy */ -struct qman_portal *fsl_qman_fq_portal_create(void); +struct qman_portal *fsl_qman_fq_portal_create(int *fd); int fsl_qman_fq_portal_destroy(struct qman_portal *qp); int fsl_qman_fq_portal_init(struct qman_portal *qp); diff --git a/drivers/bus/dpaa/rte_dpaa_bus.h b/drivers/bus/dpaa/rte_dpaa_bus.h index 554a56f2e..9601aebdd 100644 --- a/drivers/bus/dpaa/rte_dpaa_bus.h +++ b/drivers/bus/dpaa/rte_dpaa_bus.h @@ -75,6 +75,7 @@ struct rte_dpaa_device { }; struct rte_dpaa_driver *driver; struct dpaa_device_id id; + struct rte_intr_handle intr_handle; enum rte_dpaa_type device_type; /**< Ethernet or crypto type device */ char name[RTE_ETH_NAME_MAX_LEN]; }; diff --git a/drivers/net/dpaa/dpaa_ethdev.c b/drivers/net/dpaa/dpaa_ethdev.c index 4e2c9471e..1934f85ae 100644 --- a/drivers/net/dpaa/dpaa_ethdev.c +++ b/drivers/net/dpaa/dpaa_ethdev.c @@ -628,8 +628,10 @@ int dpaa_eth_rx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx, fman_if_get_sg_enable(dpaa_intf->fif), dev->data->dev_conf.rxmode.max_rx_pkt_len); /* checking if push mode only, no error check for now */ - if (dpaa_push_mode_max_queue > dpaa_push_queue_idx) { + if (!rxq->is_static && + dpaa_push_mode_max_queue > dpaa_push_queue_idx) { struct qman_portal *qp; + int q_fd; dpaa_push_queue_idx++; opts.we_mask = QM_INITFQ_WE_FQCTRL | QM_INITFQ_WE_CONTEXTA; @@ -676,12 +678,35 @@ int dpaa_eth_rx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx, rxq->is_static = true; /* Allocate qman specific portals */ - qp = fsl_qman_fq_portal_create(); + qp = fsl_qman_fq_portal_create(&q_fd); if (!qp) { DPAA_PMD_ERR("Unable to alloc fq portal"); return -1; } rxq->qp = qp; + + /* Set up the device interrupt handler */ + if (!dev->intr_handle) { + struct rte_dpaa_device *dpaa_dev; + struct rte_device *rdev = dev->device; + + dpaa_dev = container_of(rdev, struct rte_dpaa_device, + device); + dev->intr_handle = &dpaa_dev->intr_handle; + dev->intr_handle->intr_vec = rte_zmalloc(NULL, + dpaa_push_mode_max_queue, 0); + if (!dev->intr_handle->intr_vec) { + DPAA_PMD_ERR("intr_vec alloc failed"); + return -ENOMEM; + } + dev->intr_handle->nb_efd = dpaa_push_mode_max_queue; + dev->intr_handle->max_intr = dpaa_push_mode_max_queue; + } + + dev->intr_handle->type = RTE_INTR_HANDLE_EXT; + dev->intr_handle->intr_vec[queue_idx] = queue_idx + 1; + dev->intr_handle->efds[queue_idx] = q_fd; + rxq->q_fd = q_fd; } rxq->bp_array = rte_dpaa_bpid_info; dev->data->rx_queues[queue_idx] = rxq;