Netdev Archive on
 help / color / Atom feed
From: Russell King - ARM Linux admin <>
To: "Marek Behún" <>
Cc:, Andrew Lunn <>,
	Jakub Kicinski <>,,
Subject: Re: [PATCH net-next v5 4/5] net: sfp: create/destroy I2C mdiobus before PHY probe/after PHY release
Date: Thu, 14 Jan 2021 16:07:19 +0000
Message-ID: <> (raw)
In-Reply-To: <>

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
- 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 {


	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:

		err = sfp_sm_probe_phy(sfp, SFP_PHY_ADDR, false);

	case MDIO_I2C_C45:
		err = sfp_sm_probe_phy(sfp, SFP_PHY_ADDR, true);

		err = sfp_sm_probe_phy(sfp, SFP_PHY_ADDR_ROLLBALL, true);

	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.


RMK's Patch system:
FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!

  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 [this message]
2021-01-18  9:38     ` Pali Rohár
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:

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

  git send-email \ \ \ \ \ \ \ \ \

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

Netdev Archive on

Archives are clonable:
	git clone --mirror netdev/git/0.git
	git clone --mirror 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/ \
	public-inbox-index netdev

Example config snippet for mirrors

Newsgroup available over NNTP:

AGPL code for this site: git clone