Hi Frank,
I tried modifying am335x-bone-common.dtsi but it did not toggle the gpio
pin.
I was also not able to find gpiod_set_valud_cansleep, in my mdio_bus.c.
Following is my _mdiobus_register function:
int __mdiobus_register(struct mii_bus *bus, struct module *owner)
{
int i, err;
if (NULL == bus || NULL == bus->name ||
NULL == bus->read || NULL == bus->write)
return -EINVAL;
BUG_ON(bus->state != MDIOBUS_ALLOCATED &&
bus->state != MDIOBUS_UNREGISTERED);
bus->owner = owner;
bus->dev.parent = bus->parent;
bus->dev.class = &mdio_bus_class;
bus->dev.groups = NULL;
dev_set_name(&bus->dev, "%s", bus->id);
err = device_register(&bus->dev);
if (err) {
pr_err("mii_bus %s failed to register\n", bus->id);
put_device(&bus->dev);
return -EINVAL;
}
mutex_init(&bus->mdio_lock);
if (bus->reset)
bus->reset(bus);
for (i = 0; i < PHY_MAX_ADDR; i++) {
if ((bus->phy_mask & (1 << i)) == 0) {
struct phy_device *phydev;
phydev = mdiobus_scan(bus, i);
if (IS_ERR(phydev)) {
err = PTR_ERR(phydev);
goto error;
}
}
}
bus->state = MDIOBUS_REGISTERED;
pr_info("%s: probed\n", bus->name);
return 0;
error:
while (--i >= 0) {
struct phy_device *phydev = bus->phy_map[i];
if (phydev) {
phy_device_remove(phydev);
phy_device_free(phydev);
}
}
device_del(&bus->dev);
return err;
}
EXPORT_SYMBOL(__mdiobus_register);
Thank you,
Samer
On Thursday, August 9, 2018 at 8:28:16 AM UTC-6, Frank Hunleth wrote:
>
> Hi Samer,
>
> On Wed, Aug 8, 2018 at 11:43 AM <[email protected] <javascript:>> wrote:
> > Where exactly do I need to put this code in the device tree?
>
> In my setup, I didn't modify am33xx.dtsi. I modified the main .dts
> file for my board by adding the fragment that I posted. The analogous
> file for the beaglebones is am335x-bone-common.dtsi and if you look
> down in it, you can see the existing reference to davinci_mdio.
>
> I get confused frequently with what is actually in device tree files,
> so I almost always run `dtc -o out.dts am335x-<name>.dtb` to decompile
> the device tree and see what actually got added to it.
>
> My other idea for you is to try adding printk's to
> <kernel>/drivers/net/phy/mdio_bus.c to verify that the phy reset code
> is being called. If you open mdio_bus.c and search for the
> __mdiobus_register function, there's a line about it getting the
> "reset" GPIO from the device tree and then if it's successful, you can
> see calls to gpiod_set_valud_cansleep. I put 'printk(KERN_ERR
> "Resetting phy!!!");` calls throughout this code when I didn't see the
> gpio working. At least this way, you can know whether the GPIO is
> actually being toggled in software.
>
> -Frank
>
> >
> > I tried adding this code in am33xx.dtsi, but my GPIO is not getting
> triggered. It looks like this:
> >
> > mac: ethernet@4a100000 {
> > compatible = "ti,am335x-cpsw","ti,cpsw";
> > ti,hwmods = "cpgmac0";
> > clocks = <&cpsw_125mhz_gclk>, <&cpsw_cpts_rft_clk>;
> > clock-names = "fck", "cpts";
> > cpdma_channels = <8>;
> > ale_entries = <1024>;
> > bd_ram_size = <0x2000>;
> > mac_control = <0x20>;
> > slaves = <2>;
> > active_slave = <0>;
> > cpts_clock_mult = <0x80000000>;
> > cpts_clock_shift = <29>;
> > reg = <0x4a100000 0x800
> > 0x4a101200 0x100>;
> > #address-cells = <1>;
> > #size-cells = <1>;
> > /*
> > * c0_rx_thresh_pend
> > * c0_rx_pend
> > * c0_tx_pend
> > * c0_misc_pend
> > */
> > interrupts = <40 41 42 43>;
> > ranges;
> > syscon = <&scm_conf>;
> > status = "disabled";
> >
> > davinci_mdio: mdio@4a101000 {
> > compatible = "ti,cpsw-mdio","ti,davinci_mdio";
> > #address-cells = <1>;
> > #size-cells = <0>;
> > ti,hwmods = "davinci_mdio";
> > bus_freq = <1000000>;
> > reg = <0x4a101000 0x100>;
> >
> > status = "disabled";
> > };
> > &davinci_mdio {
> > pinctrl-names = "default", "sleep";
> > pinctrl-0 = <&davinci_mdio_default>;
> > pinctrl-1 = <&davinci_mdio_sleep>;
> > status = "okay";
> >
> > reset-gpios = <&gpio1 16 GPIO_ACTIVE_LOW>;
> > reset-delay-us = <100>;
> > ethphy0: @cpsw_emac0 {};
> > };
> >
> > cpsw_emac0: slave@4a100200 {
> > /* Filled in by U-Boot */
> > mac-address = [ 00 00 00 00 00 00 ];
> > };
> >
> > cpsw_emac1: slave@4a100300 {
> > /* Filled in by U-Boot */
> > mac-address = [ 00 00 00 00 00 00 ];
> > };
> >
> > phy_sel: cpsw-phy-sel@44e10650 {
> > compatible = "ti,am3352-cpsw-phy-sel";
> > reg= <0x44e10650 0x4>;
> > reg-names = "gmii-sel";
> > };
> > };
> >
> > Thank you,
> > Samer
> >
> > On Tuesday, August 7, 2018 at 9:28:45 PM UTC-6, Frank Hunleth wrote:
> >>
> >> On Tue, Aug 7, 2018 at 8:29 PM <[email protected]> wrote:
> >> >
> >> > So I cut the trace for reset pin on Lan8710 and jumpered a wire to a
> gpio pin. And I added the reset gpio/reset-delay-us as shown in this link:
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/devicetree/bindings/net/mdio.txt
>
> >> >
> >> > I added following commands in am335x.dtsi on line 1057
> >> >
> >> > reset-gpios = <&gpio1 16 GPIO_ACTIVE_LOW>;
> >> > reset-delay-us = <100>;
> >> >
> >>
> >> I had a similar problem. I believe that you need to specify the phy as
> >> a child node to trigger the reset GPIO logic in the mdio driver.
> >> Here's the relevant section of my device tree:
> >>
> >> &davinci_mdio {
> >> pinctrl-names = "default", "sleep";
> >> pinctrl-0 = <&davinci_mdio_default>;
> >> pinctrl-1 = <&davinci_mdio_sleep>;
> >> status = "okay";
> >>
> >> reset-gpios = <&gpio3 21 GPIO_ACTIVE_LOW>;
> >> reset-delay-us = <100>;
> >> ethphy0: @cpsw_emac0 {};
> >> };
> >>
> >> I've only done some quick tests, but it appears to be working.
> >>
> >> -Frank
> >
>
--
For more options, visit http://beagleboard.org/discuss
---
You received this message because you are subscribed to the Google Groups
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/beagleboard/aa9139f7-3b95-48b9-96c9-380932f0cbe7%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.