All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andy Shevchenko <andy.shevchenko@gmail.com>
To: Calvin Johnson <calvin.johnson@oss.nxp.com>
Cc: Grant Likely <grant.likely@arm.com>,
	"Rafael J . Wysocki" <rafael@kernel.org>,
	Jeremy Linton <jeremy.linton@arm.com>,
	Andrew Lunn <andrew@lunn.ch>,
	Florian Fainelli <f.fainelli@gmail.com>,
	Russell King - ARM Linux admin <linux@armlinux.org.uk>,
	Cristi Sovaiala <cristian.sovaiala@nxp.com>,
	Florin Laurentiu Chiculita <florinlaurentiu.chiculita@nxp.com>,
	Ioana Ciornei <ioana.ciornei@nxp.com>,
	Madalin Bucur <madalin.bucur@oss.nxp.com>,
	Heikki Krogerus <heikki.krogerus@linux.intel.com>,
	Marcin Wojtas <mw@semihalf.com>,
	Pieter Jansen Van Vuuren <pieter.jansenvv@bamboosystems.io>,
	Jon <jon@solid-run.com>, "linux.cj" <linux.cj@gmail.com>,
	Laurentiu Tudor <laurentiu.tudor@nxp.com>,
	Diana Madalina Craciun <diana.craciun@nxp.com>,
	ACPI Devel Maling List <linux-acpi@vger.kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	linux-arm Mailing List <linux-arm-kernel@lists.infradead.org>,
	netdev <netdev@vger.kernel.org>,
	"David S. Miller" <davem@davemloft.net>,
	Heiner Kallweit <hkallweit1@gmail.com>,
	Jakub Kicinski <kuba@kernel.org>
Subject: Re: [net-next PATCH v2 06/14] net: mdiobus: Introduce fwnode_mdiobus_register_phy()
Date: Tue, 15 Dec 2020 19:33:40 +0200	[thread overview]
Message-ID: <CAHp75VcY2uOirAXGv5kFvHbNfHcZ6-gPsUMTB-_5AuBkHdu-0A@mail.gmail.com> (raw)
In-Reply-To: <20201215164315.3666-7-calvin.johnson@oss.nxp.com>

On Tue, Dec 15, 2020 at 6:44 PM Calvin Johnson
<calvin.johnson@oss.nxp.com> wrote:
>
> Introduce fwnode_mdiobus_register_phy() to register PHYs on the
> mdiobus. From the compatible string, identify whether the PHY is
> c45 and based on this create a PHY device instance which is
> registered on the mdiobus.

...

> +int fwnode_mdiobus_register_phy(struct mii_bus *bus,
> +                               struct fwnode_handle *child, u32 addr)
> +{
> +       struct mii_timestamper *mii_ts;
> +       struct phy_device *phy;
> +       const char *cp;
> +       bool is_c45;
> +       u32 phy_id;
> +       int rc;

> +       if (is_of_node(child)) {
> +               mii_ts = of_find_mii_timestamper(to_of_node(child));
> +               if (IS_ERR(mii_ts))
> +                       return PTR_ERR(mii_ts);
> +       }

Perhaps

               mii_ts = of_find_mii_timestamper(to_of_node(child));

> +
> +       rc = fwnode_property_read_string(child, "compatible", &cp);
> +       is_c45 = !(rc || strcmp(cp, "ethernet-phy-ieee802.3-c45"));
> +
> +       if (is_c45 || fwnode_get_phy_id(child, &phy_id))
> +               phy = get_phy_device(bus, addr, is_c45);
> +       else
> +               phy = phy_device_create(bus, addr, phy_id, 0, NULL);
> +       if (IS_ERR(phy)) {

> +               if (mii_ts && is_of_node(child))
> +                       unregister_mii_timestamper(mii_ts);

if (!IS_ERR_OR_NULL(mii_ts))
 ...

However it points to the question why unregister() doesn't handle the
above cases.
I would expect unconditional call to unregister() here.

> +               return PTR_ERR(phy);
> +       }
> +
> +       if (is_acpi_node(child)) {
> +               phy->irq = bus->irq[addr];
> +
> +               /* Associate the fwnode with the device structure so it
> +                * can be looked up later.
> +                */
> +               phy->mdio.dev.fwnode = child;
> +
> +               /* All data is now stored in the phy struct, so register it */
> +               rc = phy_device_register(phy);
> +               if (rc) {
> +                       phy_device_free(phy);
> +                       fwnode_handle_put(phy->mdio.dev.fwnode);
> +                       return rc;
> +               }
> +
> +               dev_dbg(&bus->dev, "registered phy at address %i\n", addr);
> +       } else if (is_of_node(child)) {
> +               rc = of_mdiobus_phy_device_register(bus, phy, to_of_node(child), addr);
> +               if (rc) {

> +                       if (mii_ts)
> +                               unregister_mii_timestamper(mii_ts);

Ditto.

> +                       phy_device_free(phy);
> +                       return rc;
> +               }
> +
> +               /* phy->mii_ts may already be defined by the PHY driver. A
> +                * mii_timestamper probed via the device tree will still have
> +                * precedence.
> +                */

> +               if (mii_ts)
> +                       phy->mii_ts = mii_ts;

How is that defined? Do you need to do something with an old pointer?

> +       }
> +       return 0;
> +}

-- 
With Best Regards,
Andy Shevchenko

WARNING: multiple messages have this Message-ID (diff)
From: Andy Shevchenko <andy.shevchenko@gmail.com>
To: Calvin Johnson <calvin.johnson@oss.nxp.com>
Cc: Andrew Lunn <andrew@lunn.ch>,
	Heikki Krogerus <heikki.krogerus@linux.intel.com>,
	"Rafael J . Wysocki" <rafael@kernel.org>,
	Grant Likely <grant.likely@arm.com>,
	Ioana Ciornei <ioana.ciornei@nxp.com>,
	Florian Fainelli <f.fainelli@gmail.com>, Jon <jon@solid-run.com>,
	Russell King - ARM Linux admin <linux@armlinux.org.uk>,
	Diana Madalina Craciun <diana.craciun@nxp.com>,
	ACPI Devel Maling List <linux-acpi@vger.kernel.org>,
	Jakub Kicinski <kuba@kernel.org>,
	Florin Laurentiu Chiculita <florinlaurentiu.chiculita@nxp.com>,
	Madalin Bucur <madalin.bucur@oss.nxp.com>,
	Pieter Jansen Van Vuuren <pieter.jansenvv@bamboosystems.io>,
	Marcin Wojtas <mw@semihalf.com>,
	linux-arm Mailing List <linux-arm-kernel@lists.infradead.org>,
	Laurentiu Tudor <laurentiu.tudor@nxp.com>,
	netdev <netdev@vger.kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Jeremy Linton <jeremy.linton@arm.com>,
	Cristi Sovaiala <cristian.sovaiala@nxp.com>,
	"linux.cj" <linux.cj@gmail.com>,
	"David S. Miller" <davem@davemloft.net>,
	Heiner Kallweit <hkallweit1@gmail.com>
Subject: Re: [net-next PATCH v2 06/14] net: mdiobus: Introduce fwnode_mdiobus_register_phy()
Date: Tue, 15 Dec 2020 19:33:40 +0200	[thread overview]
Message-ID: <CAHp75VcY2uOirAXGv5kFvHbNfHcZ6-gPsUMTB-_5AuBkHdu-0A@mail.gmail.com> (raw)
In-Reply-To: <20201215164315.3666-7-calvin.johnson@oss.nxp.com>

On Tue, Dec 15, 2020 at 6:44 PM Calvin Johnson
<calvin.johnson@oss.nxp.com> wrote:
>
> Introduce fwnode_mdiobus_register_phy() to register PHYs on the
> mdiobus. From the compatible string, identify whether the PHY is
> c45 and based on this create a PHY device instance which is
> registered on the mdiobus.

...

> +int fwnode_mdiobus_register_phy(struct mii_bus *bus,
> +                               struct fwnode_handle *child, u32 addr)
> +{
> +       struct mii_timestamper *mii_ts;
> +       struct phy_device *phy;
> +       const char *cp;
> +       bool is_c45;
> +       u32 phy_id;
> +       int rc;

> +       if (is_of_node(child)) {
> +               mii_ts = of_find_mii_timestamper(to_of_node(child));
> +               if (IS_ERR(mii_ts))
> +                       return PTR_ERR(mii_ts);
> +       }

Perhaps

               mii_ts = of_find_mii_timestamper(to_of_node(child));

> +
> +       rc = fwnode_property_read_string(child, "compatible", &cp);
> +       is_c45 = !(rc || strcmp(cp, "ethernet-phy-ieee802.3-c45"));
> +
> +       if (is_c45 || fwnode_get_phy_id(child, &phy_id))
> +               phy = get_phy_device(bus, addr, is_c45);
> +       else
> +               phy = phy_device_create(bus, addr, phy_id, 0, NULL);
> +       if (IS_ERR(phy)) {

> +               if (mii_ts && is_of_node(child))
> +                       unregister_mii_timestamper(mii_ts);

if (!IS_ERR_OR_NULL(mii_ts))
 ...

However it points to the question why unregister() doesn't handle the
above cases.
I would expect unconditional call to unregister() here.

> +               return PTR_ERR(phy);
> +       }
> +
> +       if (is_acpi_node(child)) {
> +               phy->irq = bus->irq[addr];
> +
> +               /* Associate the fwnode with the device structure so it
> +                * can be looked up later.
> +                */
> +               phy->mdio.dev.fwnode = child;
> +
> +               /* All data is now stored in the phy struct, so register it */
> +               rc = phy_device_register(phy);
> +               if (rc) {
> +                       phy_device_free(phy);
> +                       fwnode_handle_put(phy->mdio.dev.fwnode);
> +                       return rc;
> +               }
> +
> +               dev_dbg(&bus->dev, "registered phy at address %i\n", addr);
> +       } else if (is_of_node(child)) {
> +               rc = of_mdiobus_phy_device_register(bus, phy, to_of_node(child), addr);
> +               if (rc) {

> +                       if (mii_ts)
> +                               unregister_mii_timestamper(mii_ts);

Ditto.

> +                       phy_device_free(phy);
> +                       return rc;
> +               }
> +
> +               /* phy->mii_ts may already be defined by the PHY driver. A
> +                * mii_timestamper probed via the device tree will still have
> +                * precedence.
> +                */

> +               if (mii_ts)
> +                       phy->mii_ts = mii_ts;

How is that defined? Do you need to do something with an old pointer?

> +       }
> +       return 0;
> +}

-- 
With Best Regards,
Andy Shevchenko

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2020-12-15 17:36 UTC|newest]

Thread overview: 68+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-15 16:43 [net-next PATCH v2 00/14] ACPI support for dpaa2 driver Calvin Johnson
2020-12-15 16:43 ` Calvin Johnson
2020-12-15 16:43 ` [net-next PATCH v2 01/14] Documentation: ACPI: DSD: Document MDIO PHY Calvin Johnson
2020-12-15 16:43   ` Calvin Johnson
2020-12-15 16:43 ` [net-next PATCH v2 02/14] net: phy: Introduce phy related fwnode functions Calvin Johnson
2020-12-15 16:43   ` Calvin Johnson
2020-12-15 17:23   ` Andy Shevchenko
2020-12-15 17:23     ` Andy Shevchenko
2020-12-17  7:32     ` Calvin Johnson
2020-12-17  7:32       ` Calvin Johnson
2020-12-15 16:43 ` [net-next PATCH v2 03/14] of: mdio: Refactor of_phy_find_device() Calvin Johnson
2020-12-15 16:43   ` Calvin Johnson
2020-12-15 16:43 ` [net-next PATCH v2 04/14] net: phy: Introduce fwnode_get_phy_id() Calvin Johnson
2020-12-15 16:43   ` Calvin Johnson
2020-12-15 17:28   ` Andy Shevchenko
2020-12-15 17:28     ` Andy Shevchenko
2020-12-17  8:28     ` Calvin Johnson
2020-12-17  8:28       ` Calvin Johnson
2020-12-17  9:44       ` Andy Shevchenko
2020-12-17  9:44         ` Andy Shevchenko
2020-12-15 16:43 ` [net-next PATCH v2 05/14] of: mdio: Refactor of_get_phy_id() Calvin Johnson
2020-12-15 16:43   ` Calvin Johnson
2020-12-15 16:43 ` [net-next PATCH v2 06/14] net: mdiobus: Introduce fwnode_mdiobus_register_phy() Calvin Johnson
2020-12-15 16:43   ` Calvin Johnson
2020-12-15 17:33   ` Andy Shevchenko [this message]
2020-12-15 17:33     ` Andy Shevchenko
2020-12-18  5:34     ` Calvin Johnson
2020-12-18  5:34       ` Calvin Johnson
2020-12-18 15:35       ` Andy Shevchenko
2020-12-18 15:35         ` Andy Shevchenko
2020-12-15 16:43 ` [net-next PATCH v2 07/14] of: mdio: Refactor of_mdiobus_register_phy() Calvin Johnson
2020-12-15 16:43   ` Calvin Johnson
2020-12-15 16:43 ` [net-next PATCH v2 08/14] net: mdiobus: Introduce fwnode_mdiobus_register() Calvin Johnson
2020-12-15 16:43   ` Calvin Johnson
2020-12-15 17:53   ` Andy Shevchenko
2020-12-15 17:53     ` Andy Shevchenko
2020-12-18  5:40     ` Calvin Johnson
2020-12-18  5:40       ` Calvin Johnson
2020-12-18 15:36       ` Andy Shevchenko
2020-12-18 15:36         ` Andy Shevchenko
2020-12-15 19:26   ` kernel test robot
2020-12-15 16:43 ` [net-next PATCH v2 09/14] net/fsl: Use fwnode_mdiobus_register() Calvin Johnson
2020-12-15 16:43   ` Calvin Johnson
2020-12-15 17:55   ` Andy Shevchenko
2020-12-15 17:55     ` Andy Shevchenko
2020-12-18  5:48     ` Calvin Johnson
2020-12-18  5:48       ` Calvin Johnson
2020-12-15 16:43 ` [net-next PATCH v2 10/14] device property: Introduce fwnode_get_id() Calvin Johnson
2020-12-15 16:43   ` Calvin Johnson
2020-12-15 17:00   ` Laurent Pinchart
2020-12-15 17:00     ` Laurent Pinchart
2020-12-15 17:49     ` Andy Shevchenko
2020-12-15 17:49       ` Andy Shevchenko
2020-12-18  6:09     ` Calvin Johnson
2020-12-18  6:09       ` Calvin Johnson
2020-12-15 17:45   ` Andy Shevchenko
2020-12-15 17:45     ` Andy Shevchenko
2020-12-18  6:12     ` Calvin Johnson
2020-12-18  6:12       ` Calvin Johnson
2020-12-15 19:26   ` kernel test robot
2020-12-15 16:43 ` [net-next PATCH v2 11/14] phylink: introduce phylink_fwnode_phy_connect() Calvin Johnson
2020-12-15 16:43   ` Calvin Johnson
2020-12-15 16:43 ` [net-next PATCH v2 12/14] net: phylink: Refactor phylink_of_phy_connect() Calvin Johnson
2020-12-15 16:43   ` Calvin Johnson
2020-12-15 16:43 ` [net-next PATCH v2 13/14] net: phy: Introduce fwnode_mdio_find_device() Calvin Johnson
2020-12-15 16:43   ` Calvin Johnson
2020-12-15 16:43 ` [net-next PATCH v2 14/14] net: dpaa2-mac: Add ACPI support for DPAA2 MAC driver Calvin Johnson
2020-12-15 16:43   ` Calvin Johnson

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=CAHp75VcY2uOirAXGv5kFvHbNfHcZ6-gPsUMTB-_5AuBkHdu-0A@mail.gmail.com \
    --to=andy.shevchenko@gmail.com \
    --cc=andrew@lunn.ch \
    --cc=calvin.johnson@oss.nxp.com \
    --cc=cristian.sovaiala@nxp.com \
    --cc=davem@davemloft.net \
    --cc=diana.craciun@nxp.com \
    --cc=f.fainelli@gmail.com \
    --cc=florinlaurentiu.chiculita@nxp.com \
    --cc=grant.likely@arm.com \
    --cc=heikki.krogerus@linux.intel.com \
    --cc=hkallweit1@gmail.com \
    --cc=ioana.ciornei@nxp.com \
    --cc=jeremy.linton@arm.com \
    --cc=jon@solid-run.com \
    --cc=kuba@kernel.org \
    --cc=laurentiu.tudor@nxp.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux.cj@gmail.com \
    --cc=linux@armlinux.org.uk \
    --cc=madalin.bucur@oss.nxp.com \
    --cc=mw@semihalf.com \
    --cc=netdev@vger.kernel.org \
    --cc=pieter.jansenvv@bamboosystems.io \
    --cc=rafael@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.