Message ID | 20201015093221.720980174@rtp-net.org (mailing list archive) |
---|---|
State | Not Applicable |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [1/1] drivers/net/ethernet/marvell/mvmdio.c: Fix non OF case | expand |
On Thu, Oct 15, 2020 at 11:32:15AM +0200, Arnaud Patard wrote: > commit d934423ac26ed373dfe089734d505dca5ff679b6 upstream. > > Orion5.x systems are still using machine files and not device-tree. > Commit 96cb4342382290c9 ("net: mvmdio: allow up to three clocks to be > specified for orion-mdio") has replaced devm_clk_get() with of_clk_get(), > leading to a oops at boot and not working network, as reported in > https://lists.debian.org/debian-arm/2019/07/msg00088.html and possibly in > https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=908712. > > Link: https://lists.debian.org/debian-arm/2019/07/msg00088.html > Fixes: 96cb4342382290c9 ("net: mvmdio: allow up to three clocks to be specified for orion-mdio") > Signed-off-by: Arnaud Patard <arnaud.patard@rtp-net.org> > Reviewed-by: Andrew Lunn <andrew@lunn.ch> > Signed-off-by: David S. Miller <davem@davemloft.net> > What stable tree(s) are you asking for this to be backported to? thanks, greg k-h
Greg KH <gregkh@linuxfoundation.org> writes: > On Thu, Oct 15, 2020 at 11:32:15AM +0200, Arnaud Patard wrote: >> commit d934423ac26ed373dfe089734d505dca5ff679b6 upstream. >> >> Orion5.x systems are still using machine files and not device-tree. >> Commit 96cb4342382290c9 ("net: mvmdio: allow up to three clocks to be >> specified for orion-mdio") has replaced devm_clk_get() with of_clk_get(), >> leading to a oops at boot and not working network, as reported in >> https://lists.debian.org/debian-arm/2019/07/msg00088.html and possibly in >> https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=908712. >> >> Link: https://lists.debian.org/debian-arm/2019/07/msg00088.html >> Fixes: 96cb4342382290c9 ("net: mvmdio: allow up to three clocks to be specified for orion-mdio") >> Signed-off-by: Arnaud Patard <arnaud.patard@rtp-net.org> >> Reviewed-by: Andrew Lunn <andrew@lunn.ch> >> Signed-off-by: David S. Miller <davem@davemloft.net> >> > > What stable tree(s) are you asking for this to be backported to? oops, forgot to put it in the mail subject. It's for 4.19.X, which is used in Debian stable. Arnaud
On Thu, Oct 15, 2020 at 12:08:00PM +0200, Arnaud Patard wrote: > Greg KH <gregkh@linuxfoundation.org> writes: > > > On Thu, Oct 15, 2020 at 11:32:15AM +0200, Arnaud Patard wrote: > >> commit d934423ac26ed373dfe089734d505dca5ff679b6 upstream. > >> > >> Orion5.x systems are still using machine files and not device-tree. > >> Commit 96cb4342382290c9 ("net: mvmdio: allow up to three clocks to be > >> specified for orion-mdio") has replaced devm_clk_get() with of_clk_get(), > >> leading to a oops at boot and not working network, as reported in > >> https://lists.debian.org/debian-arm/2019/07/msg00088.html and possibly in > >> https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=908712. > >> > >> Link: https://lists.debian.org/debian-arm/2019/07/msg00088.html > >> Fixes: 96cb4342382290c9 ("net: mvmdio: allow up to three clocks to be specified for orion-mdio") > >> Signed-off-by: Arnaud Patard <arnaud.patard@rtp-net.org> > >> Reviewed-by: Andrew Lunn <andrew@lunn.ch> > >> Signed-off-by: David S. Miller <davem@davemloft.net> > >> > > > > What stable tree(s) are you asking for this to be backported to? > > oops, forgot to put it in the mail subject. It's for 4.19.X, which is > used in Debian stable. Also works on 4.14.y, so I've put it there as well. thanks, greg k-h
Index: linux/drivers/net/ethernet/marvell/mvmdio.c =================================================================== --- linux.orig/drivers/net/ethernet/marvell/mvmdio.c +++ linux/drivers/net/ethernet/marvell/mvmdio.c @@ -319,15 +319,25 @@ static int orion_mdio_probe(struct platf init_waitqueue_head(&dev->smi_busy_wait); - for (i = 0; i < ARRAY_SIZE(dev->clk); i++) { - dev->clk[i] = of_clk_get(pdev->dev.of_node, i); - if (PTR_ERR(dev->clk[i]) == -EPROBE_DEFER) { + if (pdev->dev.of_node) { + for (i = 0; i < ARRAY_SIZE(dev->clk); i++) { + dev->clk[i] = of_clk_get(pdev->dev.of_node, i); + if (PTR_ERR(dev->clk[i]) == -EPROBE_DEFER) { + ret = -EPROBE_DEFER; + goto out_clk; + } + if (IS_ERR(dev->clk[i])) + break; + clk_prepare_enable(dev->clk[i]); + } + } else { + dev->clk[0] = clk_get(&pdev->dev, NULL); + if (PTR_ERR(dev->clk[0]) == -EPROBE_DEFER) { ret = -EPROBE_DEFER; goto out_clk; } - if (IS_ERR(dev->clk[i])) - break; - clk_prepare_enable(dev->clk[i]); + if (!IS_ERR(dev->clk[0])) + clk_prepare_enable(dev->clk[0]); } dev->err_interrupt = platform_get_irq(pdev, 0);