Received: by 2002:a05:6358:3188:b0:123:57c1:9b43 with SMTP id q8csp4626649rwd; Sun, 4 Jun 2023 09:08:32 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7PAV9bRNlrlj8h5W7VsjdeKsnqekZnRnR26LDlm/zDFhmo+bQKVjSFEoeh9Sx2byWOH/8F X-Received: by 2002:a05:6a00:16c9:b0:64f:835c:a9ff with SMTP id l9-20020a056a0016c900b0064f835ca9ffmr15488604pfc.12.1685894911831; Sun, 04 Jun 2023 09:08:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685894911; cv=none; d=google.com; s=arc-20160816; b=sT9Tby/Fj02sgi6j3IP7bEi+IFYjP5H7DZJdlvNxT4ZUz0GzqKYHrcpoCp50tOYF/r QNJetC71crheUA5pxTYhJxx3h1wSWFiliL+uU9aBc3a9SGZwp3Gu++G8xT/fO/hkEszx M/wG2wkZtGXlua9XyiBu5tv76ZWgoG0NXNh4Ledg/meSGt0TS79QHETsIkDXEtVVds6Z tvkt1Gow5ELfy+kEfMb1f7Kf8gTsy3Uk7FPx++ThB0I9E8OF7biQbtxSWBu7CEZ2eY7Q ODadEyv6VCghf1B41q4P2nOO5PaPhECO3rNzmu32OC4kqioZvsfmVGsNvTPfoPwWt4s0 C9Vw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:in-reply-to:content-transfer-encoding :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature; bh=FW0PNrpZQSnc0V/qoSieuydyaAZiDC60qUhOzf/ID5I=; b=g5yo54J94bnDi+Pczyeq+NqFtNqz2CQkJHOMAxO4mh6hZw6uTe5Hw5BAjm+Z8uUmo3 5q0M2AcdzEJTIdBr5yCfsVuXQy7AgE6xwpbVma+CvnPt9q9jWlKw4+jx0wK4smHLbkRm Rv9QAG43JFutCvrIqx9bS3ZNuO9dSi60yY7EUlwuQtr78H1jz3Oynt4+WvH6LFmk33pl ikWs/VZdP1TUjg54l4N46Qu0fCEq0vKbXOAg0LHqfVKueJffveeX7ZJXqzN7ib0TC6Yj lKskf5sDLm/piSJprf76SqP1p0mQSgXS/ilPEdoF6B4ja4kzFXLLsnbG2cPEqp0ReHFW 60aQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail (test mode) header.i=@armlinux.org.uk header.s=pandora-2019 header.b=Mid5KCuE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=armlinux.org.uk Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id i5-20020a056a00004500b0064f9ce9ed58si3975287pfk.332.2023.06.04.09.08.19; Sun, 04 Jun 2023 09:08:31 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=fail (test mode) header.i=@armlinux.org.uk header.s=pandora-2019 header.b=Mid5KCuE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=armlinux.org.uk Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230153AbjFDQAk (ORCPT + 99 others); Sun, 4 Jun 2023 12:00:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45268 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229578AbjFDQAi (ORCPT ); Sun, 4 Jun 2023 12:00:38 -0400 Received: from pandora.armlinux.org.uk (pandora.armlinux.org.uk [IPv6:2001:4d48:ad52:32c8:5054:ff:fe00:142]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 12FC7BB; Sun, 4 Jun 2023 09:00:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=armlinux.org.uk; s=pandora-2019; h=Sender:In-Reply-To: Content-Transfer-Encoding:Content-Type:MIME-Version:References:Message-ID: Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=FW0PNrpZQSnc0V/qoSieuydyaAZiDC60qUhOzf/ID5I=; b=Mid5KCuEBlMUlRpRlOR3tdZP3l nJv/UCtVBlZz7NDrr9QfEo1yis+07rntRNE4qS2qwDgvSffgn04435A4+dCNAG+2cXkCruwq+flDK HDHMY0g6mzlOjbhi+M7qFWKEun3vikEcuRVPXcjfmO3n4xIhuwyFyJPNswYYhaZh1N59VpZWzwhl9 Mlxygn6J5SMA5l/SEKnZBMcQ1ggwtsLc+9DZ1rkmrQMKrVrgNX5K7E9YduLyao8DBAU8Kf7VzAZH6 ETjsIwOJGqdqBogXLve+tiY7JeE7L2tpjAN7GNyPkwfdLI3BM8Axa/W5pfAcUyVBcHPDKXdHdyP5d KZkK2uUA==; Received: from shell.armlinux.org.uk ([fd8f:7570:feb6:1:5054:ff:fe00:4ec]:46044) by pandora.armlinux.org.uk with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1q5q9R-0002lR-T1; Sun, 04 Jun 2023 17:00:17 +0100 Received: from linux by shell.armlinux.org.uk with local (Exim 4.94.2) (envelope-from ) id 1q5q9L-0005Bb-QY; Sun, 04 Jun 2023 17:00:11 +0100 Date: Sun, 4 Jun 2023 17:00:11 +0100 From: "Russell King (Oracle)" To: =?utf-8?B?QXLEsW7DpyDDnE5BTA==?= Cc: Vladimir Oltean , Sean Wang , Landen Chao , DENG Qingfang , Daniel Golle , Andrew Lunn , Florian Fainelli , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Matthias Brugger , AngeloGioacchino Del Regno , Richard van Schagen , Richard van Schagen , Frank Wunderlich , Bartel Eerdekens , erkin.bozoglu@xeront.com, mithat.guner@xeront.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org Subject: Re: [PATCH net-next 08/30] net: dsa: mt7530: change p{5,6}_interface to p{5,6}_configured Message-ID: References: <576f92b0-1900-f6ff-e92d-4b82e3436ea1@arinc9.com> <20230526130145.7wg75yoe6ut4na7g@skbuf> <7117531f-a9f2-63eb-f69d-23267e5745d0@arinc9.com> <826fd2fc-fbf8-dab7-9c90-b726d15e2983@arinc9.com> <20230604125517.fwqh2uxzvsa7n5hu@skbuf> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: Sender: Russell King (Oracle) X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_NONE,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sun, Jun 04, 2023 at 04:13:39PM +0100, Russell King (Oracle) wrote: > On Sun, Jun 04, 2023 at 04:14:31PM +0300, Arınç ÜNAL wrote: > > On 4.06.2023 16:07, Russell King (Oracle) wrote: > > > On Sun, Jun 04, 2023 at 03:55:17PM +0300, Vladimir Oltean wrote: > > > > On Sun, Jun 04, 2023 at 01:18:04PM +0100, Russell King (Oracle) wrote: > > > > > I don't remember whether Vladimir's firmware validator will fail for > > > > > mt753x if CPU ports are not fully described, but that would be well > > > > > worth checking. If it does, then we can be confident that phylink > > > > > will always be used, and those bypassing calls should not be necessary. > > > > > > > > It does, I've just retested this: > > > > > > > > [ 8.469152] mscc_felix 0000:00:00.5: OF node /soc/pcie@1f0000000/ethernet-switch@0,5/ports/port@4 of CPU port 4 lacks the required "phy-handle", "fixed-link" or "managed" properties > > > > [ 8.494571] mscc_felix 0000:00:00.5: error -EINVAL: Failed to register DSA switch > > > > [ 8.502151] mscc_felix: probe of 0000:00:00.5 failed with error -22 > > > > > > ... which isn't listed in dsa_switches_apply_workarounds[], and > > > neither is mt753x. Thanks. > > > > > > So, that should be sufficient to know that the CPU port will always > > > properly described, and thus bypassing phylink in mt753x for the CPU > > > port should not be necessary. > > > > Perfect! If I understand correctly, there's this code - specific to MT7531 > > and MT7988 ports being used as CPU ports - which runs in addition to what's > > in mt753x_phylink_mac_config(): > > > > mt7530_write(priv, MT7530_PMCR_P(port), > > PMCR_CPU_PORT_SETTING(priv->id)); > > > > This should be put on mt753x_phylink_mac_config(), under priv->id == > > ID_MT7531, priv->id == ID_MT7988, and dsa_is_cpu_port(ds, port) checks? > > Please remember that I have very little knowledge of MT753x, so in > order to answer this question, I've read through the mt7530 driver > code. > > Looking at mt7530.h: > > #define PMCR_CPU_PORT_SETTING(id) (PMCR_FORCE_MODE_ID((id)) | \ > PMCR_IFG_XMIT(1) | PMCR_MAC_MODE | \ > PMCR_BACKOFF_EN | PMCR_BACKPR_EN | \ > PMCR_TX_EN | PMCR_RX_EN | \ > PMCR_TX_FC_EN | PMCR_RX_FC_EN | \ > PMCR_FORCE_SPEED_1000 | \ > PMCR_FORCE_FDX | PMCR_FORCE_LNK) > > This seems to be some kind of port control register that sets amongst > other things parameters such as whether flow control is enabled, the > port speed, the duplex setting, whether link is forced up, etc. > > Looking at what mt753x_phylink_mac_link_up() does: > > 1. it sets PMCR_RX_EN | PMCR_TX_EN | PMCR_FORCE_LNK. > 2. it sets PMCR_FORCE_SPEED_1000 if speed was 1000Mbps, or if using > an internal, TRGMII, 1000base-X or 2500base-X phy interface mode. > 3. it sets PMCR_FORCE_FDX if full duplex was requested. > 4. it sets PMCR_TX_FC_EN if full duplex was requested with tx pause. > 5. it sets PMCR_RX_FC_EN if full duplex was requested with rx pause. > > So, provided this is called with the appropriate parameters, for a > fixed link, that will leave the following: > > PMCR_FORCE_MODE_ID(id) > PMCR_IFG_XMIT(1) > PMCR_MAC_MODE > PMCR_BACKOFF_EN > PMCR_BACKPR_EN > > If we now look at mt753x_phylink_mac_config(), this sets > PMCR_IFG_XMIT(1), PMCR_MAC_MODE, PMCR_BACKOFF_EN, PMCR_BACKPR_EN, > and PMCR_FORCE_MODE_ID(priv->id), which I believe is everything that > PMCR_CPU_PORT_SETTING(priv->id) is doing. > > So, Wouldn't a fixed-link description indicating 1Gbps, full duplex > with pause cause phylink to call both mt753x_phylink_mac_config() and > mt753x_phylink_mac_link_up() with appropriate arguments to set all > of these parameters in PMCR? > > Now, I'm going to analyse something else. mt7531_cpu_port_config() > is called from mt753x_cpu_port_enable(), which is itself called from > mt7531_setup_common(). That is ultimately called from the DSA switch > ops .setup() method. > > This method is called from dsa_switch_setup() for each switch in the > DSA tree. dsa_tree_setup_switches() calls this, and is called from > dsa_tree_setup(). Once dsa_tree_setup_switches() finishes > successfully, dsa_tree_setup_ports() will be called. This will then > setup DSA and CPU ports, which will then setup a phylink instance > for these ports. phylink will parse the firmware description for > the port. DSA will then call dsa_port_enable(). > > dsa_port_enable() will then call any port_enable() method in the > mt7530.c driver, which will be mt7530_port_enable(). This then... > > mt7530_clear(priv, MT7530_PMCR_P(port), PMCR_LINK_SETTINGS_MASK); > > which is: > > #define PMCR_LINK_SETTINGS_MASK (PMCR_TX_EN | PMCR_FORCE_SPEED_1000 | \ > PMCR_RX_EN | PMCR_FORCE_SPEED_100 | \ > PMCR_TX_FC_EN | PMCR_RX_FC_EN | \ > PMCR_FORCE_FDX | PMCR_FORCE_LNK | \ > PMCR_FORCE_EEE1G | PMCR_FORCE_EEE100) > > So it wipes out all the PMCR settings that mt7531_cpu_port_config() > performed - undoing *everything* below that switch() statement in > mt7531_cpu_port_config()! > > Once the port_enable() method returns, DSA will then call > phylink_start(), which will trigger phylink to bring up the link > according to the settings it has, which will mean phylink calls > the mac_config(), pcs_config(), pcs_link_up() and mac_link_up() > with the appropriate parameters for the firmware described link. > > So I think I have the answer to my initial thought: do the calls in > mt7531_cpu_port_config() to the phylink methods have any use what so > ever? The answer is no, they are entirely useless. The same goes for > the other cpu_port_config() methods that do something similar. The > same goes for the PMCR register write that's changing any bits > included in PMCR_LINK_SETTINGS_MASK. > > What that means is that mt7988_cpu_port_config() can be entirely > removed, it serves no useful purpose what so ever. For > mt7531_cpu_port_config(), it only needs to set priv->p[56]_interface > which, as far as I can see, probably only avoids mac_config() doing > any pad setup (that's a guess.) > > At least that's what I gather from reading through the driver and > DSA code. It may be I've missed something, but currently, I think > that these cpu_port_config() functions aren't doing too much that > is actually useful work. Essentially, I think this change will have no effect at all on the driver, because any effect this code has is totally undone when the driver's port_enable() method is called: diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c index 9bc54e1348cb..447e63d74e0c 100644 --- a/drivers/net/dsa/mt7530.c +++ b/drivers/net/dsa/mt7530.c @@ -2859,8 +2859,6 @@ mt7531_cpu_port_config(struct dsa_switch *ds, int port) { struct mt7530_priv *priv = ds->priv; phy_interface_t interface; - int speed; - int ret; switch (port) { case 5: @@ -2880,36 +2878,6 @@ mt7531_cpu_port_config(struct dsa_switch *ds, int port) return -EINVAL; } - if (interface == PHY_INTERFACE_MODE_2500BASEX) - speed = SPEED_2500; - else - speed = SPEED_1000; - - ret = mt7531_mac_config(ds, port, MLO_AN_FIXED, interface); - if (ret) - return ret; - mt7530_write(priv, MT7530_PMCR_P(port), - PMCR_CPU_PORT_SETTING(priv->id)); - mt753x_phylink_pcs_link_up(&priv->pcs[port].pcs, MLO_AN_FIXED, - interface, speed, DUPLEX_FULL); - mt753x_phylink_mac_link_up(ds, port, MLO_AN_FIXED, interface, NULL, - speed, DUPLEX_FULL, true, true); - - return 0; -} - -static int -mt7988_cpu_port_config(struct dsa_switch *ds, int port) -{ - struct mt7530_priv *priv = ds->priv; - - mt7530_write(priv, MT7530_PMCR_P(port), - PMCR_CPU_PORT_SETTING(priv->id)); - - mt753x_phylink_mac_link_up(ds, port, MLO_AN_FIXED, - PHY_INTERFACE_MODE_INTERNAL, NULL, - SPEED_10000, DUPLEX_FULL, true, true); - return 0; } @@ -3165,7 +3133,6 @@ const struct mt753x_info mt753x_table[] = { .phy_read_c45 = mt7531_ind_c45_phy_read, .phy_write_c45 = mt7531_ind_c45_phy_write, .pad_setup = mt7988_pad_setup, - .cpu_port_config = mt7988_cpu_port_config, .mac_port_get_caps = mt7988_mac_port_get_caps, .mac_port_config = mt7988_mac_config, }, -- RMK's Patch system: https://www.armlinux.org.uk/developer/patches/ FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!