Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp651600pxj; Fri, 7 May 2021 17:33:13 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz3UtKbhHgQWp07tNqs+CIy/CsBMFNrwjXV+QaXB0FmD4N4cz4sdz+HVJ6SQVqAstUZg8Lt X-Received: by 2002:a17:906:b159:: with SMTP id bt25mr12653165ejb.38.1620433993313; Fri, 07 May 2021 17:33:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620433993; cv=none; d=google.com; s=arc-20160816; b=Aw62GCIAAebDqDrXBLGC7n+rIWCkAPl3FEV0GzKhAu0CunxgEAvr2L5T9mP/F92zKa hAQ2YHGrA1pEHzDxp4PyEhGFAocj4XSss0FEPYIXVmr9o9zrSrHDKvt48qP2JOW4vtEw mEFqjWtxtX1boG5ew7OglayDukzyHPMS99joeA9LPEmEw7JYaFpZPLba9aqb5sSMpTZJ B2TgoanZnoOLx1pM6U6zNzQS00YQSSz6g7Bar08pzkw8P3lsc4w5gL6/XmO5fenfzCuB bK8HFlGty+svSgWIc9pleh+de5r/eVgfvbcr3aMqjq5z56vO/l3LH842uh8PGtc9QlV9 rnlg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=1MDsVjWJ6ZEIkzs2xX7L6tkHclI0+FffWAk7X84jZYU=; b=mxrKnbklkPTAfEp00DGLYLjtrdw1583j0ZG2SB9hsWF61jNanjnk9J+k1DPMoEadHZ EcR3q4YH/KS4KkCpqjKD3xcPeHWQyUNLzL+931KIkaDaSabgfinxX6tNW0x/ToLUX+7e 12kIzrpmSLHjuE7LGBERkJwQL9FQoyL+7g3nYBiRYLi27+r3PX4q6aes9Kg2qPXMiPZY n5tNdNGFjM/F9bpaqGfOG0U21pBkdUeqs8rP+ejeE+0ozpcOxdpNrrCOFYcY+V4vQHaT ZJfNN5u3sY2bqQWKuzpj8HoQwgjIr6dKP4CqaYczObYZJzreS26uAsEQqCT+e3Nqypsf K2TQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=Lb4Z8qaF; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id ay9si6157130edb.462.2021.05.07.17.32.49; Fri, 07 May 2021 17:33:13 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=Lb4Z8qaF; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231401AbhEHAbR (ORCPT + 99 others); Fri, 7 May 2021 20:31:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47710 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230487AbhEHAak (ORCPT ); Fri, 7 May 2021 20:30:40 -0400 Received: from mail-wr1-x42d.google.com (mail-wr1-x42d.google.com [IPv6:2a00:1450:4864:20::42d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 636E1C061763; Fri, 7 May 2021 17:29:35 -0700 (PDT) Received: by mail-wr1-x42d.google.com with SMTP id d4so10847571wru.7; Fri, 07 May 2021 17:29:35 -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 :mime-version:content-transfer-encoding; bh=1MDsVjWJ6ZEIkzs2xX7L6tkHclI0+FffWAk7X84jZYU=; b=Lb4Z8qaFj4jiH5tYze8PuV3T7M/XYRxE+1sPsAodY8WnAsypfQxn2JrUbQwDSHVyiO TmJtrjvN0jXOwY15gi5FES7YGSFEd1+dpwWITHZ9y1jkX4fskj5GWK4crCQ8piMCJ201 Oc7dE2AVpcID5D4AKIjXxtqMIMc2qknFUcQAsFz/4PBzv26C/UHtap59+Xdbj7gTAdu2 zht7SgGDh19ppmzhRvGYUIjrqNP7b8Wmw8WCAe1gBmQMgxdTddG5KAHytSkEMv4W+krK +ubQ0WXsffsQRpahxFEW+HAT9gZ+H7ORKsfHaX0whaJgsuAZtDF4bCufv7WEyZrW+hTU HNBQ== 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:mime-version:content-transfer-encoding; bh=1MDsVjWJ6ZEIkzs2xX7L6tkHclI0+FffWAk7X84jZYU=; b=qPc8IQfvlM5kc3A/zq64xyMv040x5Hrnlne/29jizywGwzxzPlgPEXb5UrlBfzP3Ya UzYIoaXy2drh/s1HaVnMYNk68p72Dh0GMGHWDtzj7fYd4PNckBFE3x9c2cMkMxluV7cc AueM8JwjkEZof/aObUMylSmuW6ozoG5xMrTXYss/09fI/3t7xniKHuqAGxbnzLyyl3dL qvOnv5t3fZ2uRoWuEcsdr9+EmyjxmLXZoz0x5M26p97avg7KzUdF09c7aAwZ29Wt43+7 emVegCXq0lpZ/5YwRebGMpBnLjUoZQvKivjKnqpl+BPkQDi3nasjtcShaGiMbhF6T4d2 xQVw== X-Gm-Message-State: AOAM531jaF5Mb0+zZW7j3wPvFIF8of5WboP8bsNehjhEuCiP7KQ0CHPM 24AuCx5ibXOZAf1DCWbl658= X-Received: by 2002:a5d:610d:: with SMTP id v13mr15718770wrt.173.1620433773975; Fri, 07 May 2021 17:29:33 -0700 (PDT) Received: from Ansuel-xps.localdomain (93-35-189-2.ip56.fastwebnet.it. [93.35.189.2]) by smtp.googlemail.com with ESMTPSA id f4sm10967597wrz.33.2021.05.07.17.29.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 May 2021 17:29:33 -0700 (PDT) From: Ansuel Smith To: Florian Fainelli Cc: Ansuel Smith , Andrew Lunn , Vivien Didelot , Vladimir Oltean , "David S. Miller" , Jakub Kicinski , Russell King , netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH net-next v4 14/28] net: dsa: qca8k: add priority tweak to qca8337 switch Date: Sat, 8 May 2021 02:29:04 +0200 Message-Id: <20210508002920.19945-14-ansuelsmth@gmail.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210508002920.19945-1-ansuelsmth@gmail.com> References: <20210508002920.19945-1-ansuelsmth@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The port 5 of the qca8337 have some problem in flood condition. The original legacy driver had some specific buffer and priority settings for the different port suggested by the QCA switch team. Add this missing settings to improve switch stability under load condition. The packet priority tweak is only needed for the qca8337 switch and other qca8k switch are not affected. Signed-off-by: Ansuel Smith --- drivers/net/dsa/qca8k.c | 47 +++++++++++++++++++++++++++++++++++++++++ drivers/net/dsa/qca8k.h | 25 ++++++++++++++++++++++ 2 files changed, 72 insertions(+) diff --git a/drivers/net/dsa/qca8k.c b/drivers/net/dsa/qca8k.c index 9c2f09e84364..69fd526344cc 100644 --- a/drivers/net/dsa/qca8k.c +++ b/drivers/net/dsa/qca8k.c @@ -791,6 +791,7 @@ qca8k_setup(struct dsa_switch *ds) { struct qca8k_priv *priv = (struct qca8k_priv *)ds->priv; int ret, i; + u32 mask; /* Make sure that port 0 is the cpu port */ if (!dsa_is_cpu_port(ds, 0)) { @@ -896,6 +897,51 @@ qca8k_setup(struct dsa_switch *ds) } } + /* The port 5 of the qca8337 have some problem in flood condition. The + * original legacy driver had some specific buffer and priority settings + * for the different port suggested by the QCA switch team. Add this + * missing settings to improve switch stability under load condition. + * This problem is limited to qca8337 and other qca8k switch are not affected. + */ + if (priv->switch_id == QCA8K_ID_QCA8337) { + for (i = 0; i < QCA8K_NUM_PORTS; i++) { + switch (i) { + /* The 2 CPU port and port 5 requires some different + * priority than any other ports. + */ + case 0: + case 5: + case 6: + mask = QCA8K_PORT_HOL_CTRL0_EG_PRI0(0x3) | + QCA8K_PORT_HOL_CTRL0_EG_PRI1(0x4) | + QCA8K_PORT_HOL_CTRL0_EG_PRI2(0x4) | + QCA8K_PORT_HOL_CTRL0_EG_PRI3(0x4) | + QCA8K_PORT_HOL_CTRL0_EG_PRI4(0x6) | + QCA8K_PORT_HOL_CTRL0_EG_PRI5(0x8) | + QCA8K_PORT_HOL_CTRL0_EG_PORT(0x1e); + break; + default: + mask = QCA8K_PORT_HOL_CTRL0_EG_PRI0(0x3) | + QCA8K_PORT_HOL_CTRL0_EG_PRI1(0x4) | + QCA8K_PORT_HOL_CTRL0_EG_PRI2(0x6) | + QCA8K_PORT_HOL_CTRL0_EG_PRI3(0x8) | + QCA8K_PORT_HOL_CTRL0_EG_PORT(0x19); + } + qca8k_write(priv, QCA8K_REG_PORT_HOL_CTRL0(i), mask); + + mask = QCA8K_PORT_HOL_CTRL1_ING(0x6) | + QCA8K_PORT_HOL_CTRL1_EG_PRI_BUF_EN | + QCA8K_PORT_HOL_CTRL1_EG_PORT_BUF_EN | + QCA8K_PORT_HOL_CTRL1_WRED_EN; + qca8k_rmw(priv, QCA8K_REG_PORT_HOL_CTRL1(i), + QCA8K_PORT_HOL_CTRL1_ING_BUF | + QCA8K_PORT_HOL_CTRL1_EG_PRI_BUF_EN | + QCA8K_PORT_HOL_CTRL1_EG_PORT_BUF_EN | + QCA8K_PORT_HOL_CTRL1_WRED_EN, + mask); + } + } + /* Setup our port MTUs to match power on defaults */ for (i = 0; i < QCA8K_NUM_PORTS; i++) priv->port_mtu[i] = ETH_FRAME_LEN + ETH_FCS_LEN; @@ -1581,6 +1627,7 @@ qca8k_sw_probe(struct mdio_device *mdiodev) return -ENODEV; } + priv->switch_id = id; priv->ds = devm_kzalloc(&mdiodev->dev, sizeof(*priv->ds), GFP_KERNEL); if (!priv->ds) return -ENOMEM; diff --git a/drivers/net/dsa/qca8k.h b/drivers/net/dsa/qca8k.h index 87a8b10459c6..42d90836dffa 100644 --- a/drivers/net/dsa/qca8k.h +++ b/drivers/net/dsa/qca8k.h @@ -168,6 +168,30 @@ #define QCA8K_PORT_LOOKUP_STATE GENMASK(18, 16) #define QCA8K_PORT_LOOKUP_LEARN BIT(20) +#define QCA8K_REG_PORT_HOL_CTRL0(_i) (0x970 + (_i) * 0x8) +#define QCA8K_PORT_HOL_CTRL0_EG_PRI0_BUF GENMASK(3, 0) +#define QCA8K_PORT_HOL_CTRL0_EG_PRI0(x) ((x) << 0) +#define QCA8K_PORT_HOL_CTRL0_EG_PRI1_BUF GENMASK(7, 4) +#define QCA8K_PORT_HOL_CTRL0_EG_PRI1(x) ((x) << 4) +#define QCA8K_PORT_HOL_CTRL0_EG_PRI2_BUF GENMASK(11, 8) +#define QCA8K_PORT_HOL_CTRL0_EG_PRI2(x) ((x) << 8) +#define QCA8K_PORT_HOL_CTRL0_EG_PRI3_BUF GENMASK(15, 12) +#define QCA8K_PORT_HOL_CTRL0_EG_PRI3(x) ((x) << 12) +#define QCA8K_PORT_HOL_CTRL0_EG_PRI4_BUF GENMASK(19, 16) +#define QCA8K_PORT_HOL_CTRL0_EG_PRI4(x) ((x) << 16) +#define QCA8K_PORT_HOL_CTRL0_EG_PRI5_BUF GENMASK(23, 20) +#define QCA8K_PORT_HOL_CTRL0_EG_PRI5(x) ((x) << 20) +#define QCA8K_PORT_HOL_CTRL0_EG_PORT_BUF GENMASK(29, 24) +#define QCA8K_PORT_HOL_CTRL0_EG_PORT(x) ((x) << 24) + +#define QCA8K_REG_PORT_HOL_CTRL1(_i) (0x974 + (_i) * 0x8) +#define QCA8K_PORT_HOL_CTRL1_ING_BUF GENMASK(3, 0) +#define QCA8K_PORT_HOL_CTRL1_ING(x) ((x) << 0) +#define QCA8K_PORT_HOL_CTRL1_EG_PRI_BUF_EN BIT(6) +#define QCA8K_PORT_HOL_CTRL1_EG_PORT_BUF_EN BIT(7) +#define QCA8K_PORT_HOL_CTRL1_WRED_EN BIT(8) +#define QCA8K_PORT_HOL_CTRL1_EG_MIRROR_EN BIT(16) + /* Pkt edit registers */ #define QCA8K_EGRESS_VLAN(x) (0x0c70 + (4 * (x / 2))) @@ -220,6 +244,7 @@ struct qca8k_match_data { }; struct qca8k_priv { + u8 switch_id; struct regmap *regmap; struct mii_bus *bus; struct ar8xxx_port_status port_sts[QCA8K_NUM_PORTS]; -- 2.30.2