All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jakub Kicinski <kuba@kernel.org>
To: Hariprasad Kelam <hkelam@marvell.com>
Cc: <netdev@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
	<davem@davemloft.net>, <willemdebruijn.kernel@gmail.com>,
	<andrew@lunn.ch>, <sgoutham@marvell.com>, <lcherian@marvell.com>,
	<gakula@marvell.com>, <jerinj@marvell.com>, <sbhatta@marvell.com>
Subject: Re: [Patch v3 net-next 7/7] octeontx2-pf: ethtool physical link configuration
Date: Tue, 2 Feb 2021 17:29:19 -0800	[thread overview]
Message-ID: <20210202172919.466bddcc@kicinski-fedora-pc1c0hjn.dhcp.thefacebook.com> (raw)
In-Reply-To: <1612098665-187767-8-git-send-email-hkelam@marvell.com>

On Sun, 31 Jan 2021 18:41:05 +0530 Hariprasad Kelam wrote:
> From: Christina Jacob <cjacob@marvell.com>
> 
> Register set_link_ksetting callback with driver such that
> link configurations parameters like advertised mode,speed, duplex
> and autoneg can be configured.
> 
> below command
> ethtool -s eth0 advertise 0x1 speed 10 duplex full autoneg on
> 
> Signed-off-by: Christina Jacob <cjacob@marvell.com>
> Signed-off-by: Sunil Goutham <sgoutham@marvell.com>
> Signed-off-by: Hariprasad Kelam <hkelam@marvell.com>
> ---
>  .../ethernet/marvell/octeontx2/nic/otx2_ethtool.c  | 67 ++++++++++++++++++++++
>  1 file changed, 67 insertions(+)
> 
> diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_ethtool.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_ethtool.c
> index d637815..74a62de 100644
> --- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_ethtool.c
> +++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_ethtool.c
> @@ -1170,6 +1170,72 @@ static int otx2_get_link_ksettings(struct net_device *netdev,
>  	return 0;
>  }
>  
> +static void otx2_get_advertised_mode(const struct ethtool_link_ksettings *cmd,
> +				     u64 *mode)
> +{
> +	u32 bit_pos;
> +
> +	/* Firmware does not support requesting multiple advertised modes
> +	 * return first set bit
> +	 */
> +	bit_pos = find_first_bit(cmd->link_modes.advertising,
> +				 __ETHTOOL_LINK_MODE_MASK_NBITS);
> +	if (bit_pos != __ETHTOOL_LINK_MODE_MASK_NBITS)
> +		*mode = bit_pos;
> +}
> +
> +static int otx2_set_link_ksettings(struct net_device *netdev,
> +				   const struct ethtool_link_ksettings *cmd)
> +{
> +	struct otx2_nic *pf = netdev_priv(netdev);
> +	struct ethtool_link_ksettings req_ks;
> +	struct ethtool_link_ksettings cur_ks;
> +	struct cgx_set_link_mode_req *req;
> +	struct mbox *mbox = &pf->mbox;
> +	int err = 0;
> +
> +	/* save requested link settings */
> +	memcpy(&req_ks, cmd, sizeof(struct ethtool_link_ksettings));

Why do you make this copy? The comment above does not help at all.

> +	memset(&cur_ks, 0, sizeof(struct ethtool_link_ksettings));
> +
> +	if (!ethtool_validate_speed(cmd->base.speed) ||
> +	    !ethtool_validate_duplex(cmd->base.duplex))
> +		return -EINVAL;
> +
> +	if (cmd->base.autoneg != AUTONEG_ENABLE &&
> +	    cmd->base.autoneg != AUTONEG_DISABLE)
> +		return -EINVAL;
> +
> +	otx2_get_link_ksettings(netdev, &cur_ks);
> +
> +	/* Check requested modes against supported modes by hardware */
> +	if (!bitmap_subset(req_ks.link_modes.advertising,
> +			   cur_ks.link_modes.supported,
> +			   __ETHTOOL_LINK_MODE_MASK_NBITS))
> +		return -EINVAL;
> +
> +	mutex_lock(&mbox->lock);
> +	req = otx2_mbox_alloc_msg_cgx_set_link_mode(&pf->mbox);
> +	if (!req) {
> +		err = -ENOMEM;
> +		goto end;
> +	}
> +
> +	req->args.speed = req_ks.base.speed;
> +	/* firmware expects 1 for half duplex and 0 for full duplex
> +	 * hence inverting
> +	 */
> +	req->args.duplex = req_ks.base.duplex ^ 0x1;
> +	req->args.an = req_ks.base.autoneg;
> +	otx2_get_advertised_mode(&req_ks, &req->args.mode);

But that only returns the first bit set. What does the device actually
do? What if the user cleared a middle bit?

> +	err = otx2_sync_mbox_msg(&pf->mbox);
> +end:
> +	mutex_unlock(&mbox->lock);
> +	return err;
> +}
> +
>  static const struct ethtool_ops otx2_ethtool_ops = {
>  	.supported_coalesce_params = ETHTOOL_COALESCE_USECS |
>  				     ETHTOOL_COALESCE_MAX_FRAMES,
> @@ -1200,6 +1266,7 @@ static const struct ethtool_ops otx2_ethtool_ops = {
>  	.get_fecparam		= otx2_get_fecparam,
>  	.set_fecparam		= otx2_set_fecparam,
>  	.get_link_ksettings     = otx2_get_link_ksettings,
> +	.set_link_ksettings     = otx2_set_link_ksettings,
>  };
>  
>  void otx2_set_ethtool_ops(struct net_device *netdev)


  parent reply	other threads:[~2021-02-03  1:30 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1612098665-187767-1-git-send-email-hkelam@marvell.com>
2021-01-31 13:11 ` [Patch v3 net-next 5/7] octeontx2-af: advertised link modes support on cgx Hariprasad Kelam
2021-01-31 13:11 ` [Patch v3 net-next 6/7] octeontx2-pf: ethtool physical link status Hariprasad Kelam
2021-02-03  1:23   ` Jakub Kicinski
2021-02-01  0:54 ` [Patch v3 net-next 0/7] ethtool support for fec and link configuration Willem de Bruijn
     [not found] ` <1612098665-187767-8-git-send-email-hkelam@marvell.com>
2021-02-03  1:29   ` Jakub Kicinski [this message]
2021-02-01  5:24 Hariprasad Kelam
2021-02-01  5:24 ` [Patch v3 net-next 7/7] octeontx2-pf: ethtool physical " Hariprasad Kelam
2021-02-03  0:48   ` Jesse Brandeburg
2021-02-04 17:37 Hariprasad Kelam
2021-02-04 18:50 ` Jakub Kicinski
2021-02-05 14:15 Hariprasad Kelam
2021-02-05 19:25 ` Jakub Kicinski
2021-02-07 15:22 Hariprasad Kelam

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=20210202172919.466bddcc@kicinski-fedora-pc1c0hjn.dhcp.thefacebook.com \
    --to=kuba@kernel.org \
    --cc=andrew@lunn.ch \
    --cc=davem@davemloft.net \
    --cc=gakula@marvell.com \
    --cc=hkelam@marvell.com \
    --cc=jerinj@marvell.com \
    --cc=lcherian@marvell.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=sbhatta@marvell.com \
    --cc=sgoutham@marvell.com \
    --cc=willemdebruijn.kernel@gmail.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.