Netdev Archive on lore.kernel.org
 help / color / Atom feed
From: "Pali Rohár" <pali@kernel.org>
To: Russell King - ARM Linux admin <linux@armlinux.org.uk>
Cc: "Marek Behún" <kabel@kernel.org>,
	netdev@vger.kernel.org, "Andrew Lunn" <andrew@lunn.ch>,
	"Jakub Kicinski" <kuba@kernel.org>,
	davem@davemloft.net
Subject: Re: [PATCH net-next v5 4/5] net: sfp: create/destroy I2C mdiobus before PHY probe/after PHY release
Date: Mon, 18 Jan 2021 10:38:32 +0100
Message-ID: <20210118093832.kcbciojnjlcuetb2@pali> (raw)
In-Reply-To: <20210114160719.GV1551@shell.armlinux.org.uk>

On Thursday 14 January 2021 16:07:19 Russell King - ARM Linux admin wrote:
> On Thu, Jan 14, 2021 at 05:43:30AM +0100, Marek Behún wrote:
> > Instead of configuring the I2C mdiobus when SFP driver is probed,
> > create/destroy the mdiobus before the PHY is probed for/after it is
> > released.
> > 
> > This way we can tell the mdio-i2c code which protocol to use for each
> > SFP transceiver.
> 
> I've been thinking a bit more about this. It looks like it will
> allocate and free the MDIO bus each time any module is inserted or
> removed, even a fiber module that wouldn't ever have a PHY. This adds
> unnecessary noise to the kernel message log.
> 
> We only probe for a PHY if one of:
> 
> - id.base.extended_cc is SFF8024_ECC_10GBASE_T_SFI,
>   SFF8024_ECC_10GBASE_T_SR, SFF8024_ECC_5GBASE_T, or
>   SFF8024_ECC_2_5GBASE_T.
> - id.base.e1000_base_t is set.
> 
> So, we only need the MDIO bus to be registered if one of those is true.
> 
> As you are introducing "enum mdio_i2c_proto", I'm wondering whether
> that should include "MDIO_I2C_NONE", and we should only register the
> bus and probe for a PHY if it is not MDIO_I2C_NONE.
> 
> Maybe we should have:
> 
> enum mdio_i2c_proto {
> 	MDIO_I2C_NONE,
> 	MDIO_I2C_MARVELL_C22,
> 	MDIO_I2C_C45,
> 	MDIO_I2C_ROLLBALL,
> 	...
> };
> 
> with:
> 
> 	sfp->mdio_protocol = MDIO_I2C_NONE;
> 	if (((!memcmp(id.base.vendor_name, "OEM             ", 16) ||
> 	      !memcmp(id.base.vendor_name, "Turris          ", 16)) &&
> 	     (!memcmp(id.base.vendor_pn, "SFP-10G-T       ", 16) ||
> 	      !memcmp(id.base.vendor_pn, "RTSFP-10", 8)))) {
> 		sfp->mdio_protocol = MDIO_I2C_ROLLBALL;
> 		sfp->module_t_wait = T_WAIT_ROLLBALL;
> 	} else {
> 		switch (id.base.extended_cc) {
> 		...
> 		}
> 	}
> 
> static int sfp_sm_add_mdio_bus(struct sfp *sfp)
> {
> 	int err = 0;
> 
> 	if (sfp->mdio_protocol != MDIO_I2C_NONE)
> 		err = sfp_i2c_mdiobus_create(sfp);
> 
> 	return err;
> }
> 
> called from the place you call sfp_i2c_mdiobus_create(), and
> sfp_sm_probe_for_phy() becomes:
> 
> static int sfp_sm_probe_for_phy(struct sfp *sfp)
> {
> 	int err = 0;
> 
> 	switch (sfp->mdio_protocol) {
> 	case MDIO_I2C_NONE:
> 		break;
> 
> 	case MDIO_I2C_MARVELL_C22:
> 		err = sfp_sm_probe_phy(sfp, SFP_PHY_ADDR, false);
> 		break;
> 
> 	case MDIO_I2C_C45:
> 		err = sfp_sm_probe_phy(sfp, SFP_PHY_ADDR, true);
> 		break;
> 
> 	case MDIO_I2C_ROLLBALL:
> 		err = sfp_sm_probe_phy(sfp, SFP_PHY_ADDR_ROLLBALL, true);
> 		break;
> 	}
> 
> 	return err;
> }
> 
> This avoids having to add the PHY address, as well as fudge around with
> id.base.extended_cc to get the PHY probed.
> 
> Thoughts?

Hello Russell! For me this solution looks more cleaner. As all those
MDIO access protocols are vendor dependent, kernel code should not
detect them only from the standard (non-vendor) extended_cc property.

  reply index

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-14  4:43 [PATCH net-next v5 0/5] Support for RollBall 10G copper SFP modules Marek Behún
2021-01-14  4:43 ` [PATCH net-next v5 1/5] net: sfp: add SFP_PASSWORD address Marek Behún
2021-01-14 14:59   ` Russell King - ARM Linux admin
2021-01-14  4:43 ` [PATCH net-next v5 2/5] net: phy: mdio-i2c: support I2C MDIO protocol for RollBall SFP modules Marek Behún
2021-01-14  4:43 ` [PATCH net-next v5 3/5] net: phylink: allow attaching phy for SFP modules on 802.3z mode Marek Behún
2021-01-14  4:43 ` [PATCH net-next v5 4/5] net: sfp: create/destroy I2C mdiobus before PHY probe/after PHY release Marek Behún
2021-01-14 16:07   ` Russell King - ARM Linux admin
2021-01-18  9:38     ` Pali Rohár [this message]
2021-01-18 11:42       ` Marek Behún
2021-01-14  4:43 ` [PATCH net-next v5 5/5] net: sfp: add support for multigig RollBall transceivers Marek Behún

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210118093832.kcbciojnjlcuetb2@pali \
    --to=pali@kernel.org \
    --cc=andrew@lunn.ch \
    --cc=davem@davemloft.net \
    --cc=kabel@kernel.org \
    --cc=kuba@kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Netdev Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/netdev/0 netdev/git/0.git
	git clone --mirror https://lore.kernel.org/netdev/1 netdev/git/1.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 netdev netdev/ https://lore.kernel.org/netdev \
		netdev@vger.kernel.org
	public-inbox-index netdev

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.netdev


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git