lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAFXsbZo-pdP+b3iWyQwPe4FA4Pdxr-HO5-4rHB-ZLJApZyJ3DQ@mail.gmail.com>
Date:   Sun, 19 Mar 2023 17:39:51 -0700
From:   Chris Healy <cphealy@...il.com>
To:     Heiner Kallweit <hkallweit1@...il.com>
Cc:     Russell King - ARM Linux <linux@...linux.org.uk>,
        Andrew Lunn <andrew@...n.ch>,
        Neil Armstrong <neil.armstrong@...aro.org>,
        Kevin Hilman <khilman@...libre.com>,
        Jerome Brunet <jbrunet@...libre.com>,
        Martin Blumenstingl <martin.blumenstingl@...glemail.com>,
        David Miller <davem@...emloft.net>,
        Jakub Kicinski <kuba@...nel.org>,
        Paolo Abeni <pabeni@...hat.com>,
        Eric Dumazet <edumazet@...gle.com>,
        "netdev@...r.kernel.org" <netdev@...r.kernel.org>,
        "open list:ARM/Amlogic Meson..." <linux-amlogic@...ts.infradead.org>,
        "linux-arm-kernel@...ts.infradead.org" 
        <linux-arm-kernel@...ts.infradead.org>
Subject: Re: [PATCH net-next 1/2] net: phy: smsc: export functions for use by
 meson-gxl PHY driver

On a dev board with SMSC LAN8720, this change was tested and confirmed
to still operate normally.

Signed-off-by: Chris Healy <healych@...zon.com>

On Sat, Mar 18, 2023 at 1:36 PM Heiner Kallweit <hkallweit1@...il.com> wrote:
>
> The Amlogic Meson internal PHY's have the same register layout as
> certain SMSC PHY's (also for non-c22-standard registers). This seems
> to be more than just coincidence. Apparently they also need the same
> workaround for EDPD mode (energy detect power down). Therefore let's
> export SMSC PHY driver functionality for use by the meson-gxl PHY
> driver.
>
> Signed-off-by: Heiner Kallweit <hkallweit1@...il.com>
> ---
>  drivers/net/phy/smsc.c  | 20 +++++++++++++-------
>  include/linux/smscphy.h |  6 ++++++
>  2 files changed, 19 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/net/phy/smsc.c b/drivers/net/phy/smsc.c
> index 721871184..730964b85 100644
> --- a/drivers/net/phy/smsc.c
> +++ b/drivers/net/phy/smsc.c
> @@ -54,7 +54,7 @@ static int smsc_phy_ack_interrupt(struct phy_device *phydev)
>         return rc < 0 ? rc : 0;
>  }
>
> -static int smsc_phy_config_intr(struct phy_device *phydev)
> +int smsc_phy_config_intr(struct phy_device *phydev)
>  {
>         int rc;
>
> @@ -75,8 +75,9 @@ static int smsc_phy_config_intr(struct phy_device *phydev)
>
>         return rc < 0 ? rc : 0;
>  }
> +EXPORT_SYMBOL_GPL(smsc_phy_config_intr);
>
> -static irqreturn_t smsc_phy_handle_interrupt(struct phy_device *phydev)
> +irqreturn_t smsc_phy_handle_interrupt(struct phy_device *phydev)
>  {
>         int irq_status;
>
> @@ -95,18 +96,20 @@ static irqreturn_t smsc_phy_handle_interrupt(struct phy_device *phydev)
>
>         return IRQ_HANDLED;
>  }
> +EXPORT_SYMBOL_GPL(smsc_phy_handle_interrupt);
>
> -static int smsc_phy_config_init(struct phy_device *phydev)
> +int smsc_phy_config_init(struct phy_device *phydev)
>  {
>         struct smsc_phy_priv *priv = phydev->priv;
>
> -       if (!priv->energy_enable || phydev->irq != PHY_POLL)
> +       if (!priv || !priv->energy_enable || phydev->irq != PHY_POLL)
>                 return 0;
>
>         /* Enable energy detect power down mode */
>         return phy_set_bits(phydev, MII_LAN83C185_CTRL_STATUS,
>                             MII_LAN83C185_EDPWRDOWN);
>  }
> +EXPORT_SYMBOL_GPL(smsc_phy_config_init);
>
>  static int smsc_phy_reset(struct phy_device *phydev)
>  {
> @@ -186,7 +189,7 @@ static int lan95xx_config_aneg_ext(struct phy_device *phydev)
>   * The workaround is only applicable to poll mode. Energy Detect Power-Down may
>   * not be used in interrupt mode lest link change detection becomes unreliable.
>   */
> -static int lan87xx_read_status(struct phy_device *phydev)
> +int lan87xx_read_status(struct phy_device *phydev)
>  {
>         struct smsc_phy_priv *priv = phydev->priv;
>         int err;
> @@ -195,7 +198,8 @@ static int lan87xx_read_status(struct phy_device *phydev)
>         if (err)
>                 return err;
>
> -       if (!phydev->link && priv->energy_enable && phydev->irq == PHY_POLL) {
> +       if (!phydev->link && priv && priv->energy_enable &&
> +           phydev->irq == PHY_POLL) {
>                 /* Disable EDPD to wake up PHY */
>                 int rc = phy_read(phydev, MII_LAN83C185_CTRL_STATUS);
>                 if (rc < 0)
> @@ -229,6 +233,7 @@ static int lan87xx_read_status(struct phy_device *phydev)
>
>         return err;
>  }
> +EXPORT_SYMBOL_GPL(lan87xx_read_status);
>
>  static int smsc_get_sset_count(struct phy_device *phydev)
>  {
> @@ -269,7 +274,7 @@ static void smsc_get_stats(struct phy_device *phydev,
>                 data[i] = smsc_get_stat(phydev, i);
>  }
>
> -static int smsc_phy_probe(struct phy_device *phydev)
> +int smsc_phy_probe(struct phy_device *phydev)
>  {
>         struct device *dev = &phydev->mdio.dev;
>         struct smsc_phy_priv *priv;
> @@ -294,6 +299,7 @@ static int smsc_phy_probe(struct phy_device *phydev)
>
>         return clk_set_rate(refclk, 50 * 1000 * 1000);
>  }
> +EXPORT_SYMBOL_GPL(smsc_phy_probe);
>
>  static struct phy_driver smsc_phy_driver[] = {
>  {
> diff --git a/include/linux/smscphy.h b/include/linux/smscphy.h
> index 1a136271b..80f37c1db 100644
> --- a/include/linux/smscphy.h
> +++ b/include/linux/smscphy.h
> @@ -28,4 +28,10 @@
>  #define MII_LAN83C185_MODE_POWERDOWN 0xC0 /* Power Down mode */
>  #define MII_LAN83C185_MODE_ALL       0xE0 /* All capable mode */
>
> +int smsc_phy_config_intr(struct phy_device *phydev);
> +irqreturn_t smsc_phy_handle_interrupt(struct phy_device *phydev);
> +int smsc_phy_config_init(struct phy_device *phydev);
> +int lan87xx_read_status(struct phy_device *phydev);
> +int smsc_phy_probe(struct phy_device *phydev);
> +
>  #endif /* __LINUX_SMSCPHY_H__ */
> --
> 2.39.2
>
>

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ