From patchwork Tue Dec 14 22:44:04 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Marangi X-Patchwork-Id: 12676837 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B194DC433F5 for ; Tue, 14 Dec 2021 22:44:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234938AbhLNWol (ORCPT ); Tue, 14 Dec 2021 17:44:41 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34478 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234951AbhLNWoe (ORCPT ); Tue, 14 Dec 2021 17:44:34 -0500 Received: from mail-ed1-x52d.google.com (mail-ed1-x52d.google.com [IPv6:2a00:1450:4864:20::52d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 66A97C06175B; Tue, 14 Dec 2021 14:44:33 -0800 (PST) Received: by mail-ed1-x52d.google.com with SMTP id z5so68865956edd.3; Tue, 14 Dec 2021 14:44:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=TUPes/3MtaxDn8kCbGlju4ZLauNKEJ7jIp98yMyyHDo=; b=Qod2HXambTP7Jzfg3EuoLio6ayZeZH0ljF5+RBiSJEKhmsqpDReVM9L4KyGag0rAbp QQcFpq3FTQ+v9Ft0IQgofXbz9LJ/tOlVPzLtFMZRAw4oXqHT/hOI+UhI2mEO1tz/Ny7S 1z4aRmnPIhIlahuNVvAjwz7Nr6Gcxk5GLknt3pNxxF00aPyTkA8TfxWItixj0HBj9aBj zc4caxr+hh0zCSs73ExhiU3Rx3utIjuKO42DQXJnNSjhc5ZMtewHzQpkfsdcUM3083aI gv2TQyHqBER0DtlPcCGuNyz5mcSNTdvznoJs1e2xD2kAzGLoTn81ytACnswOuswcqK96 rGIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=TUPes/3MtaxDn8kCbGlju4ZLauNKEJ7jIp98yMyyHDo=; b=xksi+tsM27mKiKg5NV76o0keaAJza926al72fuToTygGX9Uc4u+1ZnvO2RpPYK8pSS xbciN3ipzmQXbpGO+WjenEQfvnwmIgpKfbxeXiiAvOp110vl9zyx8x4R/drHzN+bVQKx tFB9KTVdG2w0lmowJQ//KgzqyYibDCkhAqKB9u9M85+nYqVONiECmEtNg2aRzjKE7rs+ WJDYKo6MymIK0BfTGvCHmYXvnO3elUsqH1C+AM01cTmsye/Fz0iLw6vZT2X6kyPi5LA+ rnTExsrgIci6HchVfLH7z4BanRS+7ymohwvKeRWr9S0ttjyLxlmvnXILES17fBUFEM2O 1ibg== X-Gm-Message-State: AOAM530LnpAOY0hgXHJGdNn8XsSJop/qzY7l1QZSOFjXUptqaw+ZPHJm ZCahVNgZpTRzwOl8WV/GFvs= X-Google-Smtp-Source: ABdhPJx2g+lD3MVRoyUkom5JHmgoMfziRfnwxGCdZrPgOopgDW87T2i+L3yNGdAv2CKijtM5HfsOOg== X-Received: by 2002:a50:eacb:: with SMTP id u11mr11525380edp.290.1639521871887; Tue, 14 Dec 2021 14:44:31 -0800 (PST) Received: from localhost.localdomain (93-42-71-246.ip85.fastwebnet.it. [93.42.71.246]) by smtp.googlemail.com with ESMTPSA id b19sm39008ejl.152.2021.12.14.14.44.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Dec 2021 14:44:31 -0800 (PST) From: Ansuel Smith To: Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Jakub Kicinski , linux-kernel@vger.kernel.org, netdev@vger.kernel.org Cc: Ansuel Smith Subject: [net-next PATCH RFC v6 11/16] net: dsa: qca8k: add tracking state of master port Date: Tue, 14 Dec 2021 23:44:04 +0100 Message-Id: <20211214224409.5770-12-ansuelsmth@gmail.com> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20211214224409.5770-1-ansuelsmth@gmail.com> References: <20211214224409.5770-1-ansuelsmth@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org X-Patchwork-State: RFC MDIO/MIB Ethernet require the master port and the tagger availabale to correctly work. Use the new api master_state_change to track when master is operational or not and set a bool in qca8k_priv. We cache the first cached master available and we check if other cpu port are operational when the cached one goes down. This cached master will later be used by mdio read/write and mib request to correctly use the working function. qca8k implementation for MDIO/MIB Ethernet is bad. CPU port0 is the only one that answers with the ack packet or sends MIB Ethernet packets. For this reason the master_state_change ignore CPU port6 and checkes only CPU port0 if it's operational and enables this mode. Signed-off-by: Ansuel Smith --- drivers/net/dsa/qca8k.c | 18 ++++++++++++++++++ drivers/net/dsa/qca8k.h | 1 + 2 files changed, 19 insertions(+) diff --git a/drivers/net/dsa/qca8k.c b/drivers/net/dsa/qca8k.c index 039694518788..f317f527dd6d 100644 --- a/drivers/net/dsa/qca8k.c +++ b/drivers/net/dsa/qca8k.c @@ -2383,6 +2383,23 @@ qca8k_port_lag_leave(struct dsa_switch *ds, int port, return qca8k_lag_refresh_portmap(ds, port, lag, true); } +static void +qca8k_master_change(struct dsa_switch *ds, const struct net_device *master, + bool operational) +{ + struct dsa_port *dp = master->dsa_ptr; + struct qca8k_priv *priv = ds->priv; + + /* Ethernet MIB/MDIO is only supported for CPU port 0 */ + if (dp->index != 0) + return; + + if (operational) + priv->master = master; + else + priv->master = NULL; +} + static const struct dsa_switch_ops qca8k_switch_ops = { .get_tag_protocol = qca8k_get_tag_protocol, .setup = qca8k_setup, @@ -2418,6 +2435,7 @@ static const struct dsa_switch_ops qca8k_switch_ops = { .get_phy_flags = qca8k_get_phy_flags, .port_lag_join = qca8k_port_lag_join, .port_lag_leave = qca8k_port_lag_leave, + .master_state_change = qca8k_master_change, }; static int qca8k_read_switch_id(struct qca8k_priv *priv) diff --git a/drivers/net/dsa/qca8k.h b/drivers/net/dsa/qca8k.h index ab4a417b25a9..6edd6adc3063 100644 --- a/drivers/net/dsa/qca8k.h +++ b/drivers/net/dsa/qca8k.h @@ -353,6 +353,7 @@ struct qca8k_priv { struct dsa_switch_ops ops; struct gpio_desc *reset_gpio; unsigned int port_mtu[QCA8K_NUM_PORTS]; + const struct net_device *master; /* Track if mdio/mib Ethernet is available */ }; struct qca8k_mib_desc {