From: Andrew Lunn <andrew@lunn.ch>
To: "Allan W. Nielsen" <allan.nielsen@microsemi.com>
Cc: netdev@vger.kernel.org, f.fainelli@gmail.com,
raju.lakkaraju@microsemi.com, cphealy@gmail.com, robh@kernel.org
Subject: Re: [PATCH net-next 5/5] net: phy: Add downshift get/set support in Microsemi PHYs driver
Date: Fri, 4 Nov 2016 13:27:46 +0100 [thread overview]
Message-ID: <20161104122746.GK13959@lunn.ch> (raw)
In-Reply-To: <1478255742-25693-6-git-send-email-allan.nielsen@microsemi.com>
Hi Allan
> +static int vsc85xx_downshift_get(struct phy_device *phydev, u8 *count)
> +{
> + int rc;
> + u16 reg_val;
> +
> + mutex_lock(&phydev->lock);
> + rc = vsc85xx_phy_page_set(phydev, MSCC_PHY_PAGE_EXTENDED);
> + if (rc != 0)
> + goto out_unlock;
> +
> + reg_val = phy_read(phydev, MSCC_PHY_ACTIPHY_CNTL);
> + reg_val &= DOWNSHIFT_CNTL_MASK;
> + if (!(reg_val & DOWNSHIFT_EN))
> + *count = 0;
DOWNSHIFT_DEV_DISABLE
> + else
> + *count = ((reg_val & ~DOWNSHIFT_EN) >> DOWNSHIFT_CNTL_POS) + 2;
>
> + rc = vsc85xx_phy_page_set(phydev, MSCC_PHY_PAGE_STANDARD);
> +
> +out_unlock:
> + mutex_unlock(&phydev->lock);
> +
> + return rc;
> +}
> +
> +static int vsc85xx_downshift_set(struct phy_device *phydev, u8 count)
> +{
> + int rc;
> + u16 reg_val;
> +
> + if (count == DOWNSHIFT_DEV_DEFAULT_COUNT) {
> + /* Default downshift count 3 (i.e. Bit3:2 = 0b01) */
> + count = ((1 << DOWNSHIFT_CNTL_POS) | DOWNSHIFT_EN);
> + } else if (count > DOWNSHIFT_COUNT_MAX || count == 1) {
> + phydev_err(phydev, "Invalid downshift count\n");
Maybe include a hint what is valid?
> + return -EINVAL;
ERANGE? I don't know error codes too well, so this needs verifying.
> + } else if (count) {
> + /* Downshift count is either 2,3,4 or 5 */
> + count = (((count - 2) << DOWNSHIFT_CNTL_POS) | DOWNSHIFT_EN);
Ah, now i see why + 2. But this means it never does what you ask it to
do. It would be better to round up < 2 to 2, and leave all the others
as is.
> +static int vsc85xx_get_tunable(struct phy_device *phydev,
> + struct ethtool_tunable *tuna, void *data)
> +{
> + switch (tuna->id) {
> + case ETHTOOL_PHY_DOWNSHIFT:
> + return vsc85xx_downshift_get(phydev, (u8 *)data);
> + default:
> + phydev_err(phydev, "Unsupported PHY tunable id\n");
> + return -EINVAL;
This is not really a error you should complain about. There could be
many tunables, and some your hardware cannot support. So return
-ENOSUPP and no phydev_err().
> + }
> +}
> +
> +static int vsc85xx_set_tunable(struct phy_device *phydev,
> + struct ethtool_tunable *tuna,
> + const void *data)
> +{
> + switch (tuna->id) {
> + case ETHTOOL_PHY_DOWNSHIFT:
> + return vsc85xx_downshift_set(phydev, *(u8 *)data);
> + default:
> + phydev_err(phydev, "Unsupported PHY tunable id\n");
> + return -EINVAL;
Same as above.
Andrew
next prev parent reply other threads:[~2016-11-04 12:27 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-04 10:35 [PATCH net-next 0/5] Adding PHY-Tunables and downshift support Allan W. Nielsen
2016-11-04 10:35 ` [PATCH net-next 1/5] ethtool: (uapi) Add ETHTOOL_PHY_GTUNABLE and ETHTOOL_PHY_STUNABLE Allan W. Nielsen
2016-11-04 12:03 ` Andrew Lunn
2016-11-04 12:18 ` Allan W. Nielsen
2016-11-04 12:29 ` Andrew Lunn
2016-11-04 10:35 ` [PATCH net-next 2/5] ethtool: Implements ETHTOOL_PHY_GTUNABLE/ETHTOOL_PHY_STUNABLE Allan W. Nielsen
2016-11-04 12:13 ` Andrew Lunn
2016-11-04 13:31 ` Allan W. Nielsen
2016-11-04 10:35 ` [PATCH net-next 3/5] ethtool: (uapi) Add ETHTOOL_PHY_DOWNSHIFT to PHY tunables Allan W. Nielsen
2016-11-04 10:35 ` [PATCH net-next 4/5] ethtool: Core impl for ETHTOOL_PHY_DOWNSHIFT tunable Allan W. Nielsen
2016-11-04 10:35 ` [PATCH net-next 5/5] net: phy: Add downshift get/set support in Microsemi PHYs driver Allan W. Nielsen
2016-11-04 12:27 ` Andrew Lunn [this message]
2016-11-04 13:42 ` Allan W. Nielsen
2016-11-04 13:55 ` Andrew Lunn
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=20161104122746.GK13959@lunn.ch \
--to=andrew@lunn.ch \
--cc=allan.nielsen@microsemi.com \
--cc=cphealy@gmail.com \
--cc=f.fainelli@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=raju.lakkaraju@microsemi.com \
--cc=robh@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 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.