From: Marc Kleine-Budde <mkl@pengutronix.de>
To: Woojung.Huh@microchip.com
Cc: netdev@vger.kernel.org, UNGLinuxDriver@microchip.com,
kernel@pengutronix.de
Subject: Re: [PATCH 2/2 net] lan78xx: workaround of forced 100 Full/Half duplex mode error
Date: Fri, 22 Jan 2021 15:19:46 +0100 [thread overview]
Message-ID: <20210122141946.3bta67avfu4xmuv4@hardanger.blackshift.org> (raw)
In-Reply-To: <9235D6609DB808459E95D78E17F2E43D408987FF@CHN-SV-EXMX02.mchp-main.com>
[-- Attachment #1: Type: text/plain, Size: 2688 bytes --]
On Mon, Apr 25, 2016 at 10:22:36PM +0000, Woojung.Huh@microchip.com wrote:
> From: Woojung Huh <woojung.huh@microchip.com>
>
> At forced 100 Full & Half duplex mode, chip may fail to set mode correctly
> when cable is switched between long(~50+m) and short one.
> As workaround, set to 10 before setting to 100 at forced 100 F/H mode.
Sorry to picking up this old patch. We're using a LAN7801T, with an
external TI dp83tc811 PHY...
> Signed-off-by: Woojung Huh <woojung.huh@microchip.com>
> ---
> drivers/net/usb/lan78xx.c | 29 ++++++++++++++++++++++++++++-
> 1 file changed, 28 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
> index 0460b81..f64778a 100644
> --- a/drivers/net/usb/lan78xx.c
> +++ b/drivers/net/usb/lan78xx.c
> @@ -1804,7 +1804,34 @@ static void lan78xx_remove_mdio(struct lan78xx_net *dev)
>
> static void lan78xx_link_status_change(struct net_device *net)
> {
> - /* nothing to do */
> + struct phy_device *phydev = net->phydev;
> + int ret, temp;
> +
> + /* At forced 100 F/H mode, chip may fail to set mode correctly
> + * when cable is switched between long(~50+m) and short one.
> + * As workaround, set to 10 before setting to 100
> + * at forced 100 F/H mode.
> + */
> + if (!phydev->autoneg && (phydev->speed == 100)) {
> + /* disable phy interrupt */
> + temp = phy_read(phydev, LAN88XX_INT_MASK);
> + temp &= ~LAN88XX_INT_MASK_MDINTPIN_EN_;
> + ret = phy_write(phydev, LAN88XX_INT_MASK, temp);
It seems here you are assuming a microchip PHY attached, where the
INT_MASK register is at 0x19. In think 0x19 is a reserved
register. You better not write to it.
Are there some microchips components where the MAC and the PHY are in
one chip? Is that combination identifiable by the USB-ID?
> + temp = phy_read(phydev, MII_BMCR);
> + temp &= ~(BMCR_SPEED100 | BMCR_SPEED1000);
> + phy_write(phydev, MII_BMCR, temp); /* set to 10 first */
> + temp |= BMCR_SPEED100;
> + phy_write(phydev, MII_BMCR, temp); /* set to 100 later */
> +
> + /* clear pending interrupt generated while workaround */
> + temp = phy_read(phydev, LAN88XX_INT_STS);
> +
> + /* enable phy interrupt back */
> + temp = phy_read(phydev, LAN88XX_INT_MASK);
> + temp |= LAN88XX_INT_MASK_MDINTPIN_EN_;
> + ret = phy_write(phydev, LAN88XX_INT_MASK, temp);
> + }
> }
regards,
Marc
--
Pengutronix e.K. | Marc Kleine-Budde |
Embedded Linux | https://www.pengutronix.de |
Vertretung West/Dortmund | Phone: +49-231-2826-924 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
next prev parent reply other threads:[~2021-01-22 18:38 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-25 22:22 [PATCH 2/2 net] lan78xx: workaround of forced 100 Full/Half duplex mode error Woojung.Huh
2016-04-28 20:36 ` David Miller
2021-01-22 14:19 ` Marc Kleine-Budde [this message]
2022-12-16 14:49 ` [PATCH] net: lan78xx: isolate LAN88XX specific operations Enguerrand de Ribaucourt
2022-12-20 9:40 ` Paolo Abeni
2022-12-20 11:37 ` [PATCH v2] net: lan78xx: prevent " Enguerrand de Ribaucourt
2022-12-20 12:41 ` Paolo Abeni
2022-12-20 12:47 ` Enguerrand de Ribaucourt
2022-12-20 12:45 ` Paolo Abeni
2022-12-20 13:10 ` Enguerrand de Ribaucourt
2022-12-21 16:40 ` kernel test robot
2022-12-20 13:19 ` [PATCH v3 0/3] " Enguerrand de Ribaucourt
2022-12-20 13:19 ` [PATCH v3 1/3] net: phy: add EXPORT_SYMBOL to phy_disable_interrupts() Enguerrand de Ribaucourt
2022-12-20 14:40 ` Heiner Kallweit
2022-12-20 15:02 ` Enguerrand de Ribaucourt
2022-12-20 15:17 ` Andrew Lunn
2022-12-20 15:19 ` Heiner Kallweit
2022-12-20 15:48 ` Enguerrand de Ribaucourt
2022-12-20 16:55 ` Andrew Lunn
2022-12-20 19:43 ` Woojung.Huh
2022-12-21 18:03 ` Yuiko.Oshino
2022-12-20 16:13 ` Russell King (Oracle)
2022-12-20 16:22 ` Enguerrand de Ribaucourt
2022-12-20 16:47 ` AW: " Sven Schuchmann
2022-12-20 13:19 ` [PATCH v3 2/3] net: phy: make phy_enable_interrupts() non-static Enguerrand de Ribaucourt
2022-12-20 13:19 ` [PATCH v3 3/3] net: lan78xx: prevent LAN88XX specific operations Enguerrand de Ribaucourt
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=20210122141946.3bta67avfu4xmuv4@hardanger.blackshift.org \
--to=mkl@pengutronix.de \
--cc=UNGLinuxDriver@microchip.com \
--cc=Woojung.Huh@microchip.com \
--cc=kernel@pengutronix.de \
--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
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).