]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
net: fsl_enetc_mdio: Add support for phy-supply property
authorYe Li <ye.li@nxp.com>
Tue, 28 Oct 2025 02:46:30 +0000 (10:46 +0800)
committerFabio Estevam <festevam@nabladev.com>
Tue, 4 Nov 2025 15:39:46 +0000 (12:39 -0300)
Add support for the optional 'phy-supply' property in the ENETC MDIO
driver. This allows the driver to enable and manage the PHY's power
supply via the regulator framework when specified in device tree.

Signed-off-by: Ye Li <ye.li@nxp.com>
Reviewed-by: Peng Fan <peng.fan@nxp.com>
Signed-off-by: Alice Guo <alice.guo@nxp.com>
drivers/net/fsl_enetc_mdio.c

index c1d491f2c5a78287bfb2e9a537b9cd9186d30058..3d76d92a62ad87f5094179620fc929fdb9a4f875 100644 (file)
@@ -11,6 +11,8 @@
 #include <asm/io.h>
 #include <asm/processor.h>
 #include <miiphy.h>
+#include <linux/delay.h>
+#include <power/regulator.h>
 
 #include "fsl_enetc.h"
 
@@ -135,6 +137,8 @@ static int enetc_mdio_probe(struct udevice *dev)
        struct pci_child_plat *pplat = dev_get_parent_plat(dev);
        struct enetc_mdio_priv *priv = dev_get_priv(dev);
        u16 cmd = PCI_COMMAND_MEMORY;
+       int ret;
+       struct udevice *supply = NULL;
 
        priv->regs_base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, 0, 0, PCI_REGION_TYPE, 0);
        if (!priv->regs_base) {
@@ -144,6 +148,27 @@ static int enetc_mdio_probe(struct udevice *dev)
 
        priv->regs_base += ENETC_MDIO_BASE;
 
+       if (CONFIG_IS_ENABLED(DM_REGULATOR)) {
+               ret = device_get_supply_regulator(dev, "phy-supply",
+                                                 &supply);
+               if (ret && ret != -ENOENT) {
+                       printf("%s: device_get_supply_regulator failed: %d\n",
+                              __func__, ret);
+                       return ret;
+               }
+
+               if (supply) {
+                       regulator_set_enable(supply, false);
+                       mdelay(100);
+
+                       ret = regulator_set_enable_if_allowed(supply, true);
+                       if (ret) {
+                               printf("%s: Error enabling phy supply\n", dev->name);
+                               return ret;
+                       }
+               }
+       }
+
        if (pplat->vendor == PCI_VENDOR_ID_PHILIPS)     /* i.MX95 */
                cmd |= PCI_COMMAND_MASTER;