On Sun, Dec 03, 2017 at 10:28:02PM +1100, Jonathan Gray wrote:
> On Wed, Nov 29, 2017 at 11:32:24AM +0200, Artturi Alm wrote:
> > On Wed, Nov 29, 2017 at 12:37:23AM +1100, Jonathan Gray wrote:
> > > On Sun, Nov 26, 2017 at 06:52:42PM +0200, Artturi Alm wrote:
> > > > Hi,
> > > >
> > > > unless i failed w/grep, only 4 boards with dts in u-boot/linux need
> > > > this,
> > > > but i've got one of those, so this would be much appreciated:)
> > > >
> > > > -Artturi
> > >
> > > This seems reasonable and there is no non-panic error path
> > > there currently to add a regulator_disable() call to.
> > >
> > > Changing the variable name to phy_supply would match the existing
> > > code in sys/dev/fdt.
> > >
> >
> > Like this?
> >
> > -Artturi
>
> Yes, but I don't see how this can work with the current dtbs.
>
right, sorry for posting w/o testing properly..
> sxie only matches "allwinner,sun4i-a10-emac" so you have one
> of the following?
>
yep, Miniand Hackberry, for which i've used my own x_defconfig, as it
doesn't exist on mainline u-boot for some reason despite .dts being there.
I just fixed my setup to allow turning it back on(did lack uart for console,
and port in switch etc.).. so before, i just tested that it didn't cause
regression on others.
i changed my current branch to have phy lookup before phy powerup,
which has OF_getparent() for the phynode while looking for phy-supply,
will test asap..
-Artturi
> sun4i-a10-a1000.dtb "Mele A1000"
> sun4i-a10-hackberry.dtb "Miniand Hackberry"
> sun4i-a10-jesurun-q5.dtb "Jesurun Q5"
>
> ethernet@1c0b000 {
> compatible = "allwinner,sun4i-a10-emac";
> reg = <0x01c0b000 0x00001000>;
> interrupts = <0x00000037>;
> clocks = <0x00000002 0x0000002a>;
> allwinner,sram = <0x0000000b 0x00000001>;
> pinctrl-names = "default";
> pinctrl-0 = <0x0000000c>;
> status = "okay";
> phy = <0x0000000d>;
> };
> mdio@1c0b080 {
> compatible = "allwinner,sun4i-a10-mdio";
> reg = <0x01c0b080 0x00000014>;
> status = "okay";
> #address-cells = <0x00000001>;
> #size-cells = <0x00000000>;
> phy-supply = <0x0000000e>;
> ethernet-phy@0 {
> reg = <0x00000000>;
> linux,phandle = <0x0000000d>;
> phandle = <0x0000000d>;
> };
> };
>
> compared to the a20 gmac dwge(4) use
>
> ethernet@1c50000 {
> compatible = "allwinner,sun7i-a20-gmac";
> reg = <0x01c50000 0x00010000>;
> interrupts = <0x00000000 0x00000055 0x00000004>;
> interrupt-names = "macirq";
> clocks = <0x00000002 0x00000042 0x00000026>;
> clock-names = "stmmaceth", "allwinner_gmac_tx";
> snps,pbl = <0x00000002>;
> snps,fixed-burst;
> snps,force_sf_dma_mode;
> status = "okay";
> #address-cells = <0x00000001>;
> #size-cells = <0x00000000>;
> pinctrl-names = "default";
> pinctrl-0 = <0x00000027>;
> phy = <0x00000028>;
> phy-mode = "rgmii";
> phy-supply = <0x00000029>;
> ethernet-phy@1 {
> reg = <0x00000001>;
> linux,phandle = <0x00000028>;
> phandle = <0x00000028>;
> };
> };
>
> >
> >
> > diff --git a/sys/arch/armv7/sunxi/sxie.c b/sys/arch/armv7/sunxi/sxie.c
> > index 116fda5f8d7..41c378a7ef7 100644
> > --- a/sys/arch/armv7/sunxi/sxie.c
> > +++ b/sys/arch/armv7/sunxi/sxie.c
> > @@ -51,6 +51,7 @@
> > #include <dev/ofw/openfirm.h>
> > #include <dev/ofw/ofw_clock.h>
> > #include <dev/ofw/ofw_pinctrl.h>
> > +#include <dev/ofw/ofw_regulator.h>
> > #include <dev/ofw/fdt.h>
> >
> > /* configuration registers */
> > @@ -212,6 +213,7 @@ sxie_attach(struct device *parent, struct device *self,
> > void *aux)
> > struct fdt_attach_args *faa = aux;
> > struct mii_data *mii;
> > struct ifnet *ifp;
> > + int phy_supply;
> > int s;
> >
> > if (faa->fa_nreg < 1)
> > @@ -230,6 +232,11 @@ sxie_attach(struct device *parent, struct device
> > *self, void *aux)
> >
> > clock_enable_all(faa->fa_node);
> >
> > + /* Power up PHY. */
> > + phy_supply = OF_getpropint(faa->fa_node, "phy-supply", 0);
> > + if (phy_supply)
> > + regulator_enable(phy_supply);
> > +
> > sxie_socware_init(sc);
> > sc->txf_inuse = 0;
> >
> >