From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Wu Date: Mon, 15 Jun 2020 11:55:15 +0800 Subject: [RESEND PATCH v2 02/11] net: dwc_eth_qos: Add option "snps,reset-gpio" phy-rst gpio for stm32 In-Reply-To: References: <20200512095603.29126-1-david.wu@rock-chips.com> <20200512095603.29126-3-david.wu@rock-chips.com> Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi Patrick, Yes, this is the case, it should be add at PHY node, and I also used the original writing "snps,reset*" at MAC node. Anyway, I will try to put the reset gpio in the PHY node. ? 2020/5/13 ??8:55, Patrick DELAUNAY ??: > Hi David > >> From: David Wu >> Sent: mardi 12 mai 2020 11:56 >> >> It can be seen that most of the Socs using STM mac, "snps,reset-gpio" >> gpio is used, adding this option makes reset function more general. >> >> Signed-off-by: David Wu >> --- >> >> Changes in v2: >> - Remove the code is not related (Patrice) >> >> drivers/net/dwc_eth_qos.c | 32 +++++++++++++++++++++++++++++++- >> 1 file changed, 31 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/net/dwc_eth_qos.c b/drivers/net/dwc_eth_qos.c index >> 66a02aa80b..92dab678c7 100644 >> --- a/drivers/net/dwc_eth_qos.c >> +++ b/drivers/net/dwc_eth_qos.c >> @@ -314,6 +314,7 @@ struct eqos_priv { >> struct eqos_tegra186_regs *tegra186_regs; >> struct reset_ctl reset_ctl; >> struct gpio_desc phy_reset_gpio; >> + u32 reset_delays[3]; >> struct clk clk_master_bus; >> struct clk clk_rx; >> struct clk clk_ptp_ref; >> @@ -739,6 +740,15 @@ static int eqos_start_resets_stm32(struct udevice *dev) >> >> debug("%s(dev=%p):\n", __func__, dev); >> if (dm_gpio_is_valid(&eqos->phy_reset_gpio)) { >> + ret = dm_gpio_set_value(&eqos->phy_reset_gpio, 0); >> + if (ret < 0) { >> + pr_err("dm_gpio_set_value(phy_reset, deassert) failed: >> %d", >> + ret); >> + return ret; >> + } >> + >> + udelay(eqos->reset_delays[0]); >> + >> ret = dm_gpio_set_value(&eqos->phy_reset_gpio, 1); >> if (ret < 0) { >> pr_err("dm_gpio_set_value(phy_reset, assert) failed: %d", >> @@ -746,7 +756,7 @@ static int eqos_start_resets_stm32(struct udevice *dev) >> return ret; >> } >> >> - udelay(2); >> + udelay(eqos->reset_delays[1]); >> >> ret = dm_gpio_set_value(&eqos->phy_reset_gpio, 0); >> if (ret < 0) { >> @@ -754,6 +764,8 @@ static int eqos_start_resets_stm32(struct udevice *dev) >> ret); >> return ret; >> } >> + >> + udelay(eqos->reset_delays[2]); >> } >> debug("%s: OK\n", __func__); >> >> @@ -1864,11 +1876,29 @@ static int eqos_probe_resources_stm32(struct >> udevice *dev) >> if (ret) >> pr_warn("gpio_request_by_name(phy reset) not provided >> %d", >> ret); >> + else >> + eqos->reset_delays[1] = 2; >> >> eqos->phyaddr = ofnode_read_u32_default(phandle_args.node, >> "reg", -1); >> } >> >> + if (!dm_gpio_is_valid(&eqos->phy_reset_gpio)) { >> + int reset_flags = GPIOD_IS_OUT; >> + >> + if (dev_read_bool(dev, "snps,reset-active-low")) >> + reset_flags |= GPIOD_ACTIVE_LOW; >> + >> + ret = gpio_request_by_name(dev, "snps,reset-gpio", 0, >> + &eqos->phy_reset_gpio, reset_flags); >> + if (ret == 0) >> + ret = dev_read_u32_array(dev, "snps,reset-delays-us", >> + eqos->reset_delays, 3); >> + else >> + pr_warn("gpio_request_by_name(snps,reset-gpio) failed: >> %d", >> + ret); >> + } >> + >> debug("%s: OK\n", __func__); >> return 0; >> >> -- >> 2.19.1 >> >> > > This obsolete binding isn't expected to be supported in stm32 glue for dwmac > (and it tis the purpose of eqos_stm32_config) > > Reference in linux binding > ./Documentation/devicetree/bindings/net/stm32-dwmac.txt (the glue) > ./Documentation/devicetree/bindings/net/snps,dwmac.yaml > > snps,reset-gpio: > deprecated: true > > snps,reset-active-low: > deprecated: true > > snps,reset-delays-us: > deprecated: true > > I expected that gpio reset in future device tree should be managed by only by PHY generic binding > (upstream in progress on Linux side for STM32MP15x), as described in: > > Documentation/devicetree/bindings/net/ethernet-phy.yaml > > reset-gpios: > maxItems: 1 > description: > The GPIO phandle and specifier for the PHY reset signal. > > reset-assert-us: > description: > Delay after the reset was asserted in microseconds. If this > property is missing the delay will be skipped. > > reset-deassert-us: > description: > Delay after the reset was deasserted in microseconds. If > this property is missing the delay will be skipped. > > See alsoU-Boot: doc/device-tree-bindings/net/phy.txt > > Something as > > &mac { > status = "okay"; > pinctrl-0 = <ðernet_mii>; > pinctrl-names = "default"; > phy-mode = "mii"; > phy-handle = <&phy1>; > mdio0 { > #address-cells = <1>; > #size-cells = <0>; > compatible = "snps,dwmac-mdio"; > phy1: ethernet-phy at 1 { > reg = <1>; > + reset-assert-us = <10000>; > + reset-deassert-us = <30000>; > + reset-gpios = <&gpioh 15 GPIO_ACTIVE_LOW>; > }; > }; > }; > > And this binding "reset-gpios" is supported since the commit 5177b31ba6aa > ("net: dwc_eth_qos: implement reset-gpios for stm32") > > "reset-assert-us" and "reset-deassert-us" can be added if needed. > > For witch product / compatible do you want add the support of this obsolete binding ? > > Regards > > Patrick > > >