From patchwork Fri Oct 19 13:37:30 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sunil Kovvuri X-Patchwork-Id: 986792 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="mRPJi2Bh"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 42c6SR5KH1z9sBn for ; Sat, 20 Oct 2018 00:38:31 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727646AbeJSVoj (ORCPT ); Fri, 19 Oct 2018 17:44:39 -0400 Received: from mail-pf1-f194.google.com ([209.85.210.194]:40375 "EHLO mail-pf1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727382AbeJSVoj (ORCPT ); Fri, 19 Oct 2018 17:44:39 -0400 Received: by mail-pf1-f194.google.com with SMTP id g21-v6so9496647pfi.7; Fri, 19 Oct 2018 06:38:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=OBakq8rPGnDwMxr8qM9ViO4oxnqTPcwe5TirsLCL3SY=; b=mRPJi2BhC9o5vNcDYWxqA3rcQYr0VuCveFB6CUEmfZW09yb6KGWyOfL6KtrBq3gLX1 MB/LlFGXcGCaQsYuPvFXubR3KXdPpmnoFFbq62acJK9BReEXgafVh3DbjwFeSmc7+ewt kDTdC/HXF0nKiWFmriwsKau9udevoUg9v81d+m0+cJcYo1VwckPXhiK8QeWUhOs3deXC LiIlwtXUECdpRpmSnjPsOu5KQ0i24qQh+QM8fulcD3Q1NioL6FWlhHeADWMAak2S+AoA GuXpNOyIMMO+Dpg4eNqVpHM4KxHCaR0kRTkRbWgFOhxV9uLITLl3U1uzhXn5OxyBv/ha 2URw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=OBakq8rPGnDwMxr8qM9ViO4oxnqTPcwe5TirsLCL3SY=; b=KYcqhRd+H3Hr0SZHNOBM4aNOrWiw8KNDHO5LRhR1GwHgVQgQY1+vTalJMO+QIdIPyt lri9wa/b32+nAYrc08vEu6VcC1GpEdNktJo0JD0X0y0GwsM7EYZTwrGLG0+fndXVKAnT YcAm71avA5GsSz1ITjkOzzNwXkMg6B0tiLDVJZe47cuYEJ2F0WSDpU2X8NgDWtvtfvfl YOeqyFXJUHRYs8k+AgI83rTGVcVxI1zkS65ZRK5IJHjTc45nMzM3DB+FlhCf6guc3cID v9CwGVEETPHooMhWi3pwbzCIUWF9gcdoUgiPf0kLQuG6gvQ1lIu+bjDc6GoYWweeRcHe lMBg== X-Gm-Message-State: ABuFfogM0dvgqekOmnlSHplluy/8wqMj72c6WhvntPnCh2cvmLYgONRT gKIN6H1gUw/c5GefMW1oEmszzQ3+ X-Google-Smtp-Source: ACcGV63bUDD0uDQHvI9NMGIEcBIThrkJjglw4l+UhprOPwU248W1WDfbxF9+HJgdQ0Ao1vP7JNtCfA== X-Received: by 2002:a62:4681:: with SMTP id o1-v6mr34426402pfi.108.1539956308899; Fri, 19 Oct 2018 06:38:28 -0700 (PDT) Received: from machine421.caveonetworks.com ([115.113.156.2]) by smtp.googlemail.com with ESMTPSA id p82-v6sm46097709pfa.47.2018.10.19.06.38.25 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 19 Oct 2018 06:38:27 -0700 (PDT) From: sunil.kovvuri@gmail.com To: netdev@vger.kernel.org, davem@davemloft.net Cc: arnd@arndb.de, linux-soc@vger.kernel.org, Vamsi Attunuru , Sunil Goutham Subject: [PATCH 09/17] octeontx2-af: Support for VTAG strip and capture Date: Fri, 19 Oct 2018 19:07:30 +0530 Message-Id: <1539956258-29377-10-git-send-email-sunil.kovvuri@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1539956258-29377-1-git-send-email-sunil.kovvuri@gmail.com> References: <1539956258-29377-1-git-send-email-sunil.kovvuri@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Vamsi Attunuru Added support for PF/VF drivers to configure NIX to capture and/or strip VLAN tag from ingress packets. Signed-off-by: Vamsi Attunuru Signed-off-by: Sunil Goutham --- drivers/net/ethernet/marvell/octeontx2/af/mbox.h | 35 ++++++++++++- drivers/net/ethernet/marvell/octeontx2/af/rvu.h | 3 ++ .../net/ethernet/marvell/octeontx2/af/rvu_nix.c | 59 ++++++++++++++++++++++ .../net/ethernet/marvell/octeontx2/af/rvu_struct.h | 5 ++ 4 files changed, 101 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/marvell/octeontx2/af/mbox.h b/drivers/net/ethernet/marvell/octeontx2/af/mbox.h index f8efeaa..b60ac9d 100644 --- a/drivers/net/ethernet/marvell/octeontx2/af/mbox.h +++ b/drivers/net/ethernet/marvell/octeontx2/af/mbox.h @@ -156,7 +156,8 @@ M(NIX_HWCTX_DISABLE, 0x8003, hwctx_disable_req, msg_rsp) \ M(NIX_TXSCH_ALLOC, 0x8004, nix_txsch_alloc_req, nix_txsch_alloc_rsp) \ M(NIX_TXSCH_FREE, 0x8005, nix_txsch_free_req, msg_rsp) \ M(NIX_TXSCHQ_CFG, 0x8006, nix_txschq_config, msg_rsp) \ -M(NIX_STATS_RST, 0x8007, msg_req, msg_rsp) +M(NIX_STATS_RST, 0x8007, msg_req, msg_rsp) \ +M(NIX_VTAG_CFG, 0x8008, nix_vtag_config, msg_rsp) /* Messages initiated by AF (range 0xC00 - 0xDFF) */ #define MBOX_UP_CGX_MESSAGES \ @@ -462,4 +463,36 @@ struct nix_txschq_config { u64 regval[MAX_REGS_PER_MBOX_MSG]; }; +struct nix_vtag_config { + struct mbox_msghdr hdr; + u8 vtag_size; + /* cfg_type is '0' for tx vlan cfg + * cfg_type is '1' for rx vlan cfg + */ + u8 cfg_type; + union { + /* valid when cfg_type is '0' */ + struct { + /* tx vlan0 tag(C-VLAN) */ + u64 vlan0; + /* tx vlan1 tag(S-VLAN) */ + u64 vlan1; + /* insert tx vlan tag */ + u8 insert_vlan :1; + /* insert tx double vlan tag */ + u8 double_vlan :1; + } tx; + + /* valid when cfg_type is '1' */ + struct { + /* rx vtag type index */ + u8 vtag_type; + /* rx vtag strip */ + u8 strip_vtag :1; + /* rx vtag capture */ + u8 capture_vtag :1; + } rx; + }; +}; + #endif /* MBOX_H */ diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu.h b/drivers/net/ethernet/marvell/octeontx2/af/rvu.h index b39400d..1e85e80 100644 --- a/drivers/net/ethernet/marvell/octeontx2/af/rvu.h +++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu.h @@ -319,6 +319,9 @@ int rvu_mbox_handler_NIX_TXSCHQ_CFG(struct rvu *rvu, struct msg_rsp *rsp); int rvu_mbox_handler_NIX_STATS_RST(struct rvu *rvu, struct msg_req *req, struct msg_rsp *rsp); +int rvu_mbox_handler_NIX_VTAG_CFG(struct rvu *rvu, + struct nix_vtag_config *req, + struct msg_rsp *rsp); /* NPC APIs */ int rvu_npc_init(struct rvu *rvu); diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c b/drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c index 8333283..7de5417 100644 --- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c +++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c @@ -1143,6 +1143,65 @@ int rvu_mbox_handler_NIX_TXSCHQ_CFG(struct rvu *rvu, return 0; } +static int nix_rx_vtag_cfg(struct rvu *rvu, int nixlf, int blkaddr, + struct nix_vtag_config *req) +{ + u64 regval = 0; + +#define NIX_VTAGTYPE_MAX 0x8ull +#define NIX_VTAGSIZE_MASK 0x7ull +#define NIX_VTAGSTRIP_CAP_MASK 0x30ull + + if (req->rx.vtag_type >= NIX_VTAGTYPE_MAX || + req->vtag_size > VTAGSIZE_T8) + return -EINVAL; + + regval = rvu_read64(rvu, blkaddr, + NIX_AF_LFX_RX_VTAG_TYPEX(nixlf, req->rx.vtag_type)); + + if (req->rx.strip_vtag && req->rx.capture_vtag) + regval |= BIT_ULL(4) | BIT_ULL(5); + else if (req->rx.strip_vtag) + regval |= BIT_ULL(4); + else + regval &= ~(BIT_ULL(4) | BIT_ULL(5)); + + regval &= ~NIX_VTAGSIZE_MASK; + regval |= req->vtag_size & NIX_VTAGSIZE_MASK; + + rvu_write64(rvu, blkaddr, + NIX_AF_LFX_RX_VTAG_TYPEX(nixlf, req->rx.vtag_type), regval); + return 0; +} + +int rvu_mbox_handler_NIX_VTAG_CFG(struct rvu *rvu, + struct nix_vtag_config *req, + struct msg_rsp *rsp) +{ + struct rvu_hwinfo *hw = rvu->hw; + u16 pcifunc = req->hdr.pcifunc; + int blkaddr, nixlf, err; + + blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NIX, pcifunc); + if (blkaddr < 0) + return NIX_AF_ERR_AF_LF_INVALID; + + nixlf = rvu_get_lf(rvu, &hw->block[blkaddr], pcifunc, 0); + if (nixlf < 0) + return NIX_AF_ERR_AF_LF_INVALID; + + if (req->cfg_type) { + err = nix_rx_vtag_cfg(rvu, nixlf, blkaddr, req); + if (err) + return NIX_AF_ERR_PARAM; + } else { + /* TODO: handle tx vtag configuration */ + return 0; + } + + return 0; +} + static int nix_setup_mce(struct rvu *rvu, int mce, u8 op, u16 pcifunc, int next, bool eol) { diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_struct.h b/drivers/net/ethernet/marvell/octeontx2/af/rvu_struct.h index c331b237..bb2836e 100644 --- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_struct.h +++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_struct.h @@ -879,4 +879,9 @@ struct nix_lso_format { #endif }; +/* NIX VTAG size */ +enum nix_vtag_size { + VTAGSIZE_T4 = 0x0, + VTAGSIZE_T8 = 0x1, +}; #endif /* RVU_STRUCT_H */