Message ID | 20230614214405.1038301-1-bigunclemax@gmail.com |
---|---|
State | Superseded |
Delegated to: | Andre Przywara |
Headers | show |
Series | [v1] net: sun8i-emac: Add support for fixed-link phy | expand |
On Thu, Jun 15, 2023 at 12:51 AM Maxim Kiselev <bigunclemax@gmail.com> wrote: > > From: Maksim Kiselev <bigunclemax@gmail.com> > > Based on dt-specs fixed-link doesn't require phy-handle to be used. > Fix driver to only read phy related setting when phy-handle is found. > > Signed-off-by: Maksim Kiselev <bigunclemax@gmail.com> > --- > drivers/net/sun8i_emac.c | 7 ++----- > 1 file changed, 2 insertions(+), 5 deletions(-) > > diff --git a/drivers/net/sun8i_emac.c b/drivers/net/sun8i_emac.c > index 04c3274fbe..0e339d69e0 100644 > --- a/drivers/net/sun8i_emac.c > +++ b/drivers/net/sun8i_emac.c > @@ -834,11 +834,8 @@ static int sun8i_emac_eth_of_to_plat(struct udevice *dev) > priv->use_internal_phy = false; > > offset = fdtdec_lookup_phandle(gd->fdt_blob, node, "phy-handle"); > - if (offset < 0) { > - debug("%s: Cannot find PHY address\n", __func__); > - return -EINVAL; > - } > - priv->phyaddr = fdtdec_get_int(gd->fdt_blob, offset, "reg", -1); > + if (offset >= 0) > + priv->phyaddr = fdtdec_get_int(gd->fdt_blob, offset, "reg", -1); > > pdata->phy_interface = dev_read_phy_mode(dev); > debug("phy interface %d\n", pdata->phy_interface); > -- > 2.39.2 > Reviewed-by: Ramon Fried <rfried.dev@gmail.com>
On Thu, 15 Jun 2023 00:44:06 +0300 Maxim Kiselev <bigunclemax@gmail.com> wrote: Hi Maxim, > From: Maksim Kiselev <bigunclemax@gmail.com> > > Based on dt-specs fixed-link doesn't require phy-handle to be used. Do you have such a board? And where is that written down? I don't see it explicitly mentioned as optional in ethernet-controller.yaml or in the DT spec PDF. The sun8i EMAC binding lists phy-handle as required, so that would need to be relaxed there then. > Fix driver to only read phy related setting when phy-handle is found. The patch itself looks fine, we already specify -1 as the default when the PHY DT node does not contain a reg property, so that looks like it would work. Cheers, Andre > Signed-off-by: Maksim Kiselev <bigunclemax@gmail.com> > --- > drivers/net/sun8i_emac.c | 7 ++----- > 1 file changed, 2 insertions(+), 5 deletions(-) > > diff --git a/drivers/net/sun8i_emac.c b/drivers/net/sun8i_emac.c > index 04c3274fbe..0e339d69e0 100644 > --- a/drivers/net/sun8i_emac.c > +++ b/drivers/net/sun8i_emac.c > @@ -834,11 +834,8 @@ static int sun8i_emac_eth_of_to_plat(struct udevice *dev) > priv->use_internal_phy = false; > > offset = fdtdec_lookup_phandle(gd->fdt_blob, node, "phy-handle"); > - if (offset < 0) { > - debug("%s: Cannot find PHY address\n", __func__); > - return -EINVAL; > - } > - priv->phyaddr = fdtdec_get_int(gd->fdt_blob, offset, "reg", -1); > + if (offset >= 0) > + priv->phyaddr = fdtdec_get_int(gd->fdt_blob, offset, "reg", -1); > > pdata->phy_interface = dev_read_phy_mode(dev); > debug("phy interface %d\n", pdata->phy_interface);
вт, 16 янв. 2024 г. в 03:18, Andre Przywara <andre.przywara@arm.com>: > > On Thu, 15 Jun 2023 00:44:06 +0300 > Maxim Kiselev <bigunclemax@gmail.com> wrote: > > Hi Maxim, > > > From: Maksim Kiselev <bigunclemax@gmail.com> > > > > Based on dt-specs fixed-link doesn't require phy-handle to be used. > > Do you have such a board? Yes, I had a custom board with T113 SoC which has fixed phy eth. > And where is that written down? I don't see > it explicitly mentioned as optional in ethernet-controller.yaml or in > the DT spec PDF. Sorry for that commit description. I just found the similar commit, that fixes the same problem for zynq_gem 3888c8d1979289efe685fe29276aed4d4b685975 ("net: zynq_gem: Add support for fixed-link phy") and copied the description from there. > The sun8i EMAC binding lists phy-handle as required, > so that would need to be relaxed there then. Oh, indeed. So it will require to send dt-binding changes to Linux first... Therefore, I think we can live without fixed-phy support for sun8i EMAC. At least until some device with such a configuration appears on the market :) > > Fix driver to only read phy related setting when phy-handle is found. > > The patch itself looks fine, we already specify -1 as the default when > the PHY DT node does not contain a reg property, so that looks like it > would work. > > Cheers, > Andre > > > Signed-off-by: Maksim Kiselev <bigunclemax@gmail.com> > > --- > > drivers/net/sun8i_emac.c | 7 ++----- > > 1 file changed, 2 insertions(+), 5 deletions(-) > > > > diff --git a/drivers/net/sun8i_emac.c b/drivers/net/sun8i_emac.c > > index 04c3274fbe..0e339d69e0 100644 > > --- a/drivers/net/sun8i_emac.c > > +++ b/drivers/net/sun8i_emac.c > > @@ -834,11 +834,8 @@ static int sun8i_emac_eth_of_to_plat(struct udevice *dev) > > priv->use_internal_phy = false; > > > > offset = fdtdec_lookup_phandle(gd->fdt_blob, node, "phy-handle"); > > - if (offset < 0) { > > - debug("%s: Cannot find PHY address\n", __func__); > > - return -EINVAL; > > - } > > - priv->phyaddr = fdtdec_get_int(gd->fdt_blob, offset, "reg", -1); > > + if (offset >= 0) > > + priv->phyaddr = fdtdec_get_int(gd->fdt_blob, offset, "reg", -1); > > > > pdata->phy_interface = dev_read_phy_mode(dev); > > debug("phy interface %d\n", pdata->phy_interface); > Best wishes, Maksim
On Tue, 16 Jan 2024 19:58:56 +0300 Maxim Kiselev <bigunclemax@gmail.com> wrote: Hi Maxim, > вт, 16 янв. 2024 г. в 03:18, Andre Przywara <andre.przywara@arm.com>: > > > > On Thu, 15 Jun 2023 00:44:06 +0300 > > Maxim Kiselev <bigunclemax@gmail.com> wrote: > > > > Hi Maxim, > > > > > From: Maksim Kiselev <bigunclemax@gmail.com> > > > > > > Based on dt-specs fixed-link doesn't require phy-handle to be used. > > > > Do you have such a board? > > Yes, I had a custom board with T113 SoC which has fixed phy eth. > > > And where is that written down? I don't see > > it explicitly mentioned as optional in ethernet-controller.yaml or in > > the DT spec PDF. > > Sorry for that commit description. I just found the similar commit, that > fixes the same problem for zynq_gem > 3888c8d1979289efe685fe29276aed4d4b685975 ("net: zynq_gem: Add support for > fixed-link phy") and copied the description from there. > > > The sun8i EMAC binding lists phy-handle as required, > > so that would need to be relaxed there then. > > Oh, indeed. So it will require to send dt-binding changes to Linux first... Well, in the long run yes, but this doesn't mean that this patch needs to wait - if that fixes a problem for you. I think in general that rationale is probably true and phy-handle should be optional, especially since the code can already cope with it. I would just like to have this documented in the commit message. Cheers, Andre > Therefore, I think we can live without fixed-phy support for sun8i EMAC. > At least until some device with such a configuration appears on the > market :) > > > > Fix driver to only read phy related setting when phy-handle is found. > > > > The patch itself looks fine, we already specify -1 as the default when > > the PHY DT node does not contain a reg property, so that looks like it > > would work. > > > > Cheers, > > Andre > > > > > Signed-off-by: Maksim Kiselev <bigunclemax@gmail.com> > > > --- > > > drivers/net/sun8i_emac.c | 7 ++----- > > > 1 file changed, 2 insertions(+), 5 deletions(-) > > > > > > diff --git a/drivers/net/sun8i_emac.c b/drivers/net/sun8i_emac.c > > > index 04c3274fbe..0e339d69e0 100644 > > > --- a/drivers/net/sun8i_emac.c > > > +++ b/drivers/net/sun8i_emac.c > > > @@ -834,11 +834,8 @@ static int sun8i_emac_eth_of_to_plat(struct udevice *dev) > > > priv->use_internal_phy = false; > > > > > > offset = fdtdec_lookup_phandle(gd->fdt_blob, node, "phy-handle"); > > > - if (offset < 0) { > > > - debug("%s: Cannot find PHY address\n", __func__); > > > - return -EINVAL; > > > - } > > > - priv->phyaddr = fdtdec_get_int(gd->fdt_blob, offset, "reg", -1); > > > + if (offset >= 0) > > > + priv->phyaddr = fdtdec_get_int(gd->fdt_blob, offset, "reg", -1); > > > > > > pdata->phy_interface = dev_read_phy_mode(dev); > > > debug("phy interface %d\n", pdata->phy_interface); > > > > Best wishes, > Maksim
On Tue, 16 Jan 2024 19:58:56 +0300 Maxim Kiselev <bigunclemax@gmail.com> wrote: Hi Maxim, > вт, 16 янв. 2024 г. в 03:18, Andre Przywara <andre.przywara@arm.com>: > > > > On Thu, 15 Jun 2023 00:44:06 +0300 > > Maxim Kiselev <bigunclemax@gmail.com> wrote: > > > > Hi Maxim, > > > > > From: Maksim Kiselev <bigunclemax@gmail.com> > > > > > > Based on dt-specs fixed-link doesn't require phy-handle to be used. > > > > Do you have such a board? > > Yes, I had a custom board with T113 SoC which has fixed phy eth. So just to clarify: this board connected something like a switch directly to the MAC, just using RMII/RGMII? And then you have a fixed-phy node in the DT, detailing the speed and duplex parameters? Matching the fixed-phy node description in ethernet-controller.yaml? And drivers/net/phy/fixed.c takes care of parsing that? > > And where is that written down? I don't see > > it explicitly mentioned as optional in ethernet-controller.yaml or in > > the DT spec PDF. > > Sorry for that commit description. I just found the similar commit, that > fixes the same problem for zynq_gem > 3888c8d1979289efe685fe29276aed4d4b685975 ("net: zynq_gem: Add support for > fixed-link phy") and copied the description from there. > > > The sun8i EMAC binding lists phy-handle as required, > > so that would need to be relaxed there then. > > Oh, indeed. So it will require to send dt-binding changes to Linux first... > > Therefore, I think we can live without fixed-phy support for sun8i EMAC. > At least until some device with such a configuration appears on the > market :) Well, I am fine with that patch if it fixes a problem for you. It looks like requiring the phy-handle property is too strict, and just needs to be relaxed in the binding. If I see this correctly, the driver would still accept every valid DT, by today's and future bindings? If you could just confirm my above assumptions, and maybe send a v2 with an amended commit message, I would be happy to merge that patch. Cheers, Andre > > > Fix driver to only read phy related setting when phy-handle is found. > > > > The patch itself looks fine, we already specify -1 as the default when > > the PHY DT node does not contain a reg property, so that looks like it > > would work. > > > > Cheers, > > Andre > > > > > Signed-off-by: Maksim Kiselev <bigunclemax@gmail.com> > > > --- > > > drivers/net/sun8i_emac.c | 7 ++----- > > > 1 file changed, 2 insertions(+), 5 deletions(-) > > > > > > diff --git a/drivers/net/sun8i_emac.c b/drivers/net/sun8i_emac.c > > > index 04c3274fbe..0e339d69e0 100644 > > > --- a/drivers/net/sun8i_emac.c > > > +++ b/drivers/net/sun8i_emac.c > > > @@ -834,11 +834,8 @@ static int sun8i_emac_eth_of_to_plat(struct udevice *dev) > > > priv->use_internal_phy = false; > > > > > > offset = fdtdec_lookup_phandle(gd->fdt_blob, node, "phy-handle"); > > > - if (offset < 0) { > > > - debug("%s: Cannot find PHY address\n", __func__); > > > - return -EINVAL; > > > - } > > > - priv->phyaddr = fdtdec_get_int(gd->fdt_blob, offset, "reg", -1); > > > + if (offset >= 0) > > > + priv->phyaddr = fdtdec_get_int(gd->fdt_blob, offset, "reg", -1); > > > > > > pdata->phy_interface = dev_read_phy_mode(dev); > > > debug("phy interface %d\n", pdata->phy_interface); > > > > Best wishes, > Maksim
Hi Andre, пт, 19 янв. 2024 г. в 20:35, Andre Przywara <andre.przywara@arm.com>: > > On Tue, 16 Jan 2024 19:58:56 +0300 > Maxim Kiselev <bigunclemax@gmail.com> wrote: > > Hi Maxim, > > > вт, 16 янв. 2024 г. в 03:18, Andre Przywara <andre.przywara@arm.com>: > > > > > > On Thu, 15 Jun 2023 00:44:06 +0300 > > > Maxim Kiselev <bigunclemax@gmail.com> wrote: > > > > > > Hi Maxim, > > > > > > > From: Maksim Kiselev <bigunclemax@gmail.com> > > > > > > > > Based on dt-specs fixed-link doesn't require phy-handle to be used. > > > > > > Do you have such a board? > > > > Yes, I had a custom board with T113 SoC which has fixed phy eth. > > So just to clarify: this board connected something like a switch directly > to the MAC, just using RMII/RGMII? And then you have a fixed-phy node in > the DT, detailing the speed and duplex parameters? Matching the fixed-phy > node description in ethernet-controller.yaml? And drivers/net/phy/fixed.c > takes care of parsing that? Yes, you are absolutely right. The T113s connected directly to the switch port via RMII interface. Here is the part of DT, that describes that configuration &emac { pinctrl-names = "default"; pinctrl-0 = <&rmii_pg_pins>; phy-mode = "rmii"; snps,reset-gpio = <&pio 4 12 GPIO_ACTIVE_LOW>; /* PE12 */ allwinner,tx-delay-ps = <700>; allwinner,rx-delay-ps = <3100>; fixed-link { speed = <100>; full-duplex; }; }; > > > > And where is that written down? I don't see > > > it explicitly mentioned as optional in ethernet-controller.yaml or in > > > the DT spec PDF. > > > > Sorry for that commit description. I just found the similar commit, that > > fixes the same problem for zynq_gem > > 3888c8d1979289efe685fe29276aed4d4b685975 ("net: zynq_gem: Add support for > > fixed-link phy") and copied the description from there. > > > > > The sun8i EMAC binding lists phy-handle as required, > > > so that would need to be relaxed there then. > > > > Oh, indeed. So it will require to send dt-binding changes to Linux first... > > > > Therefore, I think we can live without fixed-phy support for sun8i EMAC. > > At least until some device with such a configuration appears on the > > market :) > > Well, I am fine with that patch if it fixes a problem for you. It looks > like requiring the phy-handle property is too strict, and just needs to be > relaxed in the binding. If I see this correctly, the driver would still > accept every valid DT, by today's and future bindings? > > If you could just confirm my above assumptions, and maybe send a v2 with an > amended commit message, I would be happy to merge that patch. Sure, I'll fix the commit description and send v2 asap. > Cheers, > Andre > > > > > Fix driver to only read phy related setting when phy-handle is found. > > > > > > The patch itself looks fine, we already specify -1 as the default when > > > the PHY DT node does not contain a reg property, so that looks like it > > > would work. > > > > > > Cheers, > > > Andre > > > > > > > Signed-off-by: Maksim Kiselev <bigunclemax@gmail.com> > > > > --- > > > > drivers/net/sun8i_emac.c | 7 ++----- > > > > 1 file changed, 2 insertions(+), 5 deletions(-) > > > > > > > > diff --git a/drivers/net/sun8i_emac.c b/drivers/net/sun8i_emac.c > > > > index 04c3274fbe..0e339d69e0 100644 > > > > --- a/drivers/net/sun8i_emac.c > > > > +++ b/drivers/net/sun8i_emac.c > > > > @@ -834,11 +834,8 @@ static int sun8i_emac_eth_of_to_plat(struct udevice *dev) > > > > priv->use_internal_phy = false; > > > > > > > > offset = fdtdec_lookup_phandle(gd->fdt_blob, node, "phy-handle"); > > > > - if (offset < 0) { > > > > - debug("%s: Cannot find PHY address\n", __func__); > > > > - return -EINVAL; > > > > - } > > > > - priv->phyaddr = fdtdec_get_int(gd->fdt_blob, offset, "reg", -1); > > > > + if (offset >= 0) > > > > + priv->phyaddr = fdtdec_get_int(gd->fdt_blob, offset, "reg", -1); > > > > > > > > pdata->phy_interface = dev_read_phy_mode(dev); > > > > debug("phy interface %d\n", pdata->phy_interface); > > > > > > > Best wishes, > > Maksim > Best wishes, Maksim
On Fri, 19 Jan 2024 21:11:07 +0300 Maxim Kiselev <bigunclemax@gmail.com> wrote: Hi Maxim, > пт, 19 янв. 2024 г. в 20:35, Andre Przywara <andre.przywara@arm.com>: > > > > On Tue, 16 Jan 2024 19:58:56 +0300 > > Maxim Kiselev <bigunclemax@gmail.com> wrote: > > > > Hi Maxim, > > > > > вт, 16 янв. 2024 г. в 03:18, Andre Przywara <andre.przywara@arm.com>: > > > > > > > > On Thu, 15 Jun 2023 00:44:06 +0300 > > > > Maxim Kiselev <bigunclemax@gmail.com> wrote: > > > > > > > > Hi Maxim, > > > > > > > > > From: Maksim Kiselev <bigunclemax@gmail.com> > > > > > > > > > > Based on dt-specs fixed-link doesn't require phy-handle to be used. > > > > > > > > Do you have such a board? > > > > > > Yes, I had a custom board with T113 SoC which has fixed phy eth. > > > > So just to clarify: this board connected something like a switch directly > > to the MAC, just using RMII/RGMII? And then you have a fixed-phy node in > > the DT, detailing the speed and duplex parameters? Matching the fixed-phy > > node description in ethernet-controller.yaml? And drivers/net/phy/fixed.c > > takes care of parsing that? > > Yes, you are absolutely right. The T113s connected directly to the switch port > via RMII interface. Here is the part of DT, that describes that configuration Excellent, thanks for the confirmation! Looking forward to v2! Cheers, Andre > &emac { > pinctrl-names = "default"; > pinctrl-0 = <&rmii_pg_pins>; > phy-mode = "rmii"; > snps,reset-gpio = <&pio 4 12 GPIO_ACTIVE_LOW>; /* PE12 */ > allwinner,tx-delay-ps = <700>; > allwinner,rx-delay-ps = <3100>; > > fixed-link { > speed = <100>; > full-duplex; > }; > }; > > > > > > > And where is that written down? I don't see > > > > it explicitly mentioned as optional in ethernet-controller.yaml or in > > > > the DT spec PDF. > > > > > > Sorry for that commit description. I just found the similar commit, that > > > fixes the same problem for zynq_gem > > > 3888c8d1979289efe685fe29276aed4d4b685975 ("net: zynq_gem: Add support for > > > fixed-link phy") and copied the description from there. > > > > > > > The sun8i EMAC binding lists phy-handle as required, > > > > so that would need to be relaxed there then. > > > > > > Oh, indeed. So it will require to send dt-binding changes to Linux first... > > > > > > Therefore, I think we can live without fixed-phy support for sun8i EMAC. > > > At least until some device with such a configuration appears on the > > > market :) > > > > Well, I am fine with that patch if it fixes a problem for you. It looks > > like requiring the phy-handle property is too strict, and just needs to be > > relaxed in the binding. If I see this correctly, the driver would still > > accept every valid DT, by today's and future bindings? > > > > If you could just confirm my above assumptions, and maybe send a v2 with an > > amended commit message, I would be happy to merge that patch. > > Sure, I'll fix the commit description and send v2 asap. > > > Cheers, > > Andre > > > > > > > Fix driver to only read phy related setting when phy-handle is found. > > > > > > > > The patch itself looks fine, we already specify -1 as the default when > > > > the PHY DT node does not contain a reg property, so that looks like it > > > > would work. > > > > > > > > Cheers, > > > > Andre > > > > > > > > > Signed-off-by: Maksim Kiselev <bigunclemax@gmail.com> > > > > > --- > > > > > drivers/net/sun8i_emac.c | 7 ++----- > > > > > 1 file changed, 2 insertions(+), 5 deletions(-) > > > > > > > > > > diff --git a/drivers/net/sun8i_emac.c b/drivers/net/sun8i_emac.c > > > > > index 04c3274fbe..0e339d69e0 100644 > > > > > --- a/drivers/net/sun8i_emac.c > > > > > +++ b/drivers/net/sun8i_emac.c > > > > > @@ -834,11 +834,8 @@ static int sun8i_emac_eth_of_to_plat(struct udevice *dev) > > > > > priv->use_internal_phy = false; > > > > > > > > > > offset = fdtdec_lookup_phandle(gd->fdt_blob, node, "phy-handle"); > > > > > - if (offset < 0) { > > > > > - debug("%s: Cannot find PHY address\n", __func__); > > > > > - return -EINVAL; > > > > > - } > > > > > - priv->phyaddr = fdtdec_get_int(gd->fdt_blob, offset, "reg", -1); > > > > > + if (offset >= 0) > > > > > + priv->phyaddr = fdtdec_get_int(gd->fdt_blob, offset, "reg", -1); > > > > > > > > > > pdata->phy_interface = dev_read_phy_mode(dev); > > > > > debug("phy interface %d\n", pdata->phy_interface); > > > > > > > > > > Best wishes, > > > Maksim > > > > Best wishes, > Maksim
diff --git a/drivers/net/sun8i_emac.c b/drivers/net/sun8i_emac.c index 04c3274fbe..0e339d69e0 100644 --- a/drivers/net/sun8i_emac.c +++ b/drivers/net/sun8i_emac.c @@ -834,11 +834,8 @@ static int sun8i_emac_eth_of_to_plat(struct udevice *dev) priv->use_internal_phy = false; offset = fdtdec_lookup_phandle(gd->fdt_blob, node, "phy-handle"); - if (offset < 0) { - debug("%s: Cannot find PHY address\n", __func__); - return -EINVAL; - } - priv->phyaddr = fdtdec_get_int(gd->fdt_blob, offset, "reg", -1); + if (offset >= 0) + priv->phyaddr = fdtdec_get_int(gd->fdt_blob, offset, "reg", -1); pdata->phy_interface = dev_read_phy_mode(dev); debug("phy interface %d\n", pdata->phy_interface);