Yes I am using V4.4, that's why its different. I'll try it with V4.14. Thanks, Samer
On Fri, Aug 10, 2018 at 1:08 PM Frank Hunleth <fhunl...@troodon-software.com> wrote: > On Fri, Aug 10, 2018 at 2:51 PM <sam.abb...@gmail.com> wrote: > > > > 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. > > Maybe we're using different Linux versions? I'm using Linux 4.14. This > is what I see: > > > https://elixir.bootlin.com/linux/v4.14.62/source/drivers/net/phy/mdio_bus.c#L357 > > Then lines 365 and 367 for the actual toggling of the GPIO. > > -Frank > > > > > 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 <sam.a...@gmail.com> 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 <sam.a...@gmail.com> 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 beagleboard+unsubscr...@googlegroups.com. > > 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. > > > > -- > Frank Hunleth > Troodon Software LLC > Embedded Software Development > http://troodon-software.com/ > > -- > For more options, visit http://beagleboard.org/discuss > --- > You received this message because you are subscribed to a topic in the > Google Groups "BeagleBoard" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/beagleboard/inwiKW0_8eg/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > beagleboard+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/beagleboard/CA%2B-urNTBQu1YheR-dpEFt1p2QvHkip0fV%2BcxaZuknED2M3opJw%40mail.gmail.com > . > For more options, visit https://groups.google.com/d/optout. > -- 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 beagleboard+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/beagleboard/CALHpcyc-M9vndMvCi8K0TgZ0%3DxvKu9V29pO6dbcv%2B1hteDT9WA%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.