mbox series

[v5,0/3] arm64: add ethernet to orange pi 3 & one plus

Message ID 20231220203537.83479-1-jernej.skrabec@gmail.com
Headers show
Series arm64: add ethernet to orange pi 3 & one plus | expand

Message

Jernej Škrabec Dec. 20, 2023, 8:35 p.m. UTC
This is continuation of the work done by Corentin:
https://lore.kernel.org/linux-sunxi/20221115073603.3425396-1-clabbe@baylibre.com/

In short, Orange Pi 3 and Orange Pi One Plus boards have ethernet PHYs
which are powered by two voltage regulators. They have to be powered on in
correct order or otherwise they are not functional. Please see link above
for previous discussion on how to achieve that.

Best regards,
Jernej

changes since v1:
- Add regulator_bulk_get_all for ease handling of PHY regulators
- Removed all conversion patches to keep DT compatibility.

Changes since v2:
- removed use of regulator-names and regulators list.

Changes since v3:
- fixes kbuild robot report

Changes since v4:
- dropped merged patches
- reworked PHY powering on/off patch
- added Orange Pi One Plus patch, since it has same issue

Corentin Labbe (1):
  phy: handle optional regulator for PHY

Jernej Skrabec (1):
  arm64: dts: allwinner: orange-pi-one-plus: Fix ethernet

Ondrej Jirman (1):
  arm64: dts: allwinner: orange-pi-3: Enable ethernet

 .../dts/allwinner/sun50i-h6-orangepi-3.dts    | 40 ++++++++++++++
 .../allwinner/sun50i-h6-orangepi-one-plus.dts | 29 +++++++---
 drivers/net/mdio/fwnode_mdio.c                | 53 ++++++++++++++++++-
 drivers/net/phy/phy_device.c                  |  6 +++
 include/linux/phy.h                           |  3 ++
 5 files changed, 122 insertions(+), 9 deletions(-)

Comments

Simon Horman Dec. 22, 2023, 12:52 p.m. UTC | #1
On Wed, Dec 20, 2023 at 09:35:35PM +0100, Jernej Skrabec wrote:
> From: Corentin Labbe <clabbe.montjoie@gmail.com>
> 
> Add handling of optional regulators for PHY.
> 
> Regulators need to be enabled before PHY scanning, so MDIO bus
> initiate this task.
> 
> Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
> Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com>

Hi Jernej,

> diff --git a/include/linux/phy.h b/include/linux/phy.h
> index 3cc52826f18e..832cb2d4f76a 100644
> --- a/include/linux/phy.h
> +++ b/include/linux/phy.h
> @@ -757,6 +757,9 @@ struct phy_device {
>  	void (*phy_link_change)(struct phy_device *phydev, bool up);
>  	void (*adjust_link)(struct net_device *dev);
>  
> +	int regulator_cnt;
> +	struct regulator_bulk_data *consumers;

Please add these two new fields to the kernel doc
for struct phy_device which appears a above this hunk in phy.h.

> +
>  #if IS_ENABLED(CONFIG_MACSEC)
>  	/* MACsec management functions */
>  	const struct macsec_ops *macsec_ops;
Russell King (Oracle) Jan. 2, 2024, 11:30 a.m. UTC | #2
On Wed, Dec 20, 2023 at 09:35:35PM +0100, Jernej Skrabec wrote:
> From: Corentin Labbe <clabbe.montjoie@gmail.com>
> 
> Add handling of optional regulators for PHY.
> 
> Regulators need to be enabled before PHY scanning, so MDIO bus
> initiate this task.
> 
> Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
> Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com>
> ---
>  drivers/net/mdio/fwnode_mdio.c | 53 ++++++++++++++++++++++++++++++++--
>  drivers/net/phy/phy_device.c   |  6 ++++
>  include/linux/phy.h            |  3 ++
>  3 files changed, 60 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/net/mdio/fwnode_mdio.c b/drivers/net/mdio/fwnode_mdio.c
> index fd02f5cbc853..bd5a27eaf40c 100644
> --- a/drivers/net/mdio/fwnode_mdio.c
> +++ b/drivers/net/mdio/fwnode_mdio.c
> @@ -11,6 +11,7 @@
>  #include <linux/of.h>
>  #include <linux/phy.h>
>  #include <linux/pse-pd/pse.h>
> +#include <linux/regulator/consumer.h>
>  
>  MODULE_AUTHOR("Calvin Johnson <calvin.johnson@oss.nxp.com>");
>  MODULE_LICENSE("GPL");
> @@ -58,6 +59,40 @@ fwnode_find_mii_timestamper(struct fwnode_handle *fwnode)
>  	return register_mii_timestamper(arg.np, arg.args[0]);
>  }
>  
> +static int
> +fwnode_regulator_get_bulk_enabled(struct device *dev,
> +				  struct fwnode_handle *fwnode,
> +				  struct regulator_bulk_data **consumers)

This seems to be a bad name for something living in fwnode_mdio.c - it
looks like something the regulator core should be providing.

> +clean_regulators:
> +	if (reg_cnt > 0)
> +		regulator_bulk_disable(reg_cnt, consumers);
> +	kfree(consumers);

and there really should be a function that undoes the effects of
fwnode_regulator_get_bulk_enabled() rather than having it open-coded,
especially as:

> @@ -3400,6 +3401,11 @@ static int phy_remove(struct device *dev)
>  
>  	phydev->drv = NULL;
>  
> +	if (phydev->regulator_cnt > 0)
> +		regulator_bulk_disable(phydev->regulator_cnt, phydev->consumers);
> +
> +	kfree(phydev->consumers);
> +

it also appears here.