From: "Marek Behún" <marek.behun@nic.cz>
To: "Pali Rohár" <pali@kernel.org>
Cc: "Russell King - ARM Linux admin" <linux@armlinux.org.uk>,
"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 12:42:35 +0100 [thread overview]
Message-ID: <20210118124235.467f047e@dellmb.labs.office.nic.cz> (raw)
In-Reply-To: <20210118093832.kcbciojnjlcuetb2@pali>
On Mon, 18 Jan 2021 10:38:32 +0100
Pali Rohár <pali@kernel.org> wrote:
> 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.
I shall respin this series with this modified, then.
Marek
next prev parent reply other threads:[~2021-01-18 14:51 UTC|newest]
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
2021-01-18 11:42 ` Marek Behún [this message]
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=20210118124235.467f047e@dellmb.labs.office.nic.cz \
--to=marek.behun@nic.cz \
--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 \
--cc=pali@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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).