* [PATCH 0/4] Fix hang of Armada 8040 SoC in orion-mdio
@ 2019-07-06 15:18 josua
2019-07-06 15:18 ` [PATCH 1/4] dt-bindings: allow up to four clocks for orion-mdio josua
` (4 more replies)
0 siblings, 5 replies; 25+ messages in thread
From: josua @ 2019-07-06 15:18 UTC (permalink / raw)
To: netdev; +Cc: Josua Mayer
From: Josua Mayer <josua@solid-run.com>
With a modular kernel as configured by Debian a hang was observed with
the Armada 8040 SoC in the Clearfog GT and Macchiatobin boards.
The 8040 SoC actually requires four clocks to be enabled for the mdio
interface to function. All 4 clocks are already specified in
armada-cp110.dtsi. It has however been missed that the orion-mdio driver
only supports enabling up to three clocks.
This patch-set allows the orion-mdio driver to handle four clocks and
adds a warning when more clocks are specified to prevent this particular
oversight in the future.
Josua Mayer (4):
dt-bindings: allow up to four clocks for orion-mdio
net: mvmdio: allow up to four clocks to be specified for orion-mdio
net: mvmdio: print warning when orion-mdio has too many clocks
net: mvmdio: defer probe of orion-mdio if a clock is not ready
Documentation/devicetree/bindings/net/marvell-orion-mdio.txt | 2 +-
drivers/net/ethernet/marvell/mvmdio.c | 11 ++++++++++-
2 files changed, 11 insertions(+), 2 deletions(-)
--
2.16.4
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 1/4] dt-bindings: allow up to four clocks for orion-mdio
2019-07-06 15:18 [PATCH 0/4] Fix hang of Armada 8040 SoC in orion-mdio josua
@ 2019-07-06 15:18 ` josua
2019-07-06 15:47 ` Andrew Lunn
2019-07-09 1:32 ` Rob Herring
2019-07-06 15:18 ` [PATCH 2/4] net: mvmdio: allow up to four clocks to be specified " josua
` (3 subsequent siblings)
4 siblings, 2 replies; 25+ messages in thread
From: josua @ 2019-07-06 15:18 UTC (permalink / raw)
To: netdev; +Cc: Josua Mayer, stable, David S. Miller, Rob Herring, Mark Rutland
From: Josua Mayer <josua@solid-run.com>
Armada 8040 needs four clocks to be enabled for MDIO accesses to work.
Update the binding to allow the extra clock to be specified.
Cc: stable@vger.kernel.org
Fixes: 6d6a331f44a1 ("dt-bindings: allow up to three clocks for orion-mdio")
Signed-off-by: Josua Mayer <josua@solid-run.com>
---
Documentation/devicetree/bindings/net/marvell-orion-mdio.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/net/marvell-orion-mdio.txt b/Documentation/devicetree/bindings/net/marvell-orion-mdio.txt
index 42cd81090a2c..3f3cfc1d8d4d 100644
--- a/Documentation/devicetree/bindings/net/marvell-orion-mdio.txt
+++ b/Documentation/devicetree/bindings/net/marvell-orion-mdio.txt
@@ -16,7 +16,7 @@ Required properties:
Optional properties:
- interrupts: interrupt line number for the SMI error/done interrupt
-- clocks: phandle for up to three required clocks for the MDIO instance
+- clocks: phandle for up to four required clocks for the MDIO instance
The child nodes of the MDIO driver are the individual PHY devices
connected to this MDIO bus. They must have a "reg" property given the
--
2.16.4
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 2/4] net: mvmdio: allow up to four clocks to be specified for orion-mdio
2019-07-06 15:18 [PATCH 0/4] Fix hang of Armada 8040 SoC in orion-mdio josua
2019-07-06 15:18 ` [PATCH 1/4] dt-bindings: allow up to four clocks for orion-mdio josua
@ 2019-07-06 15:18 ` josua
2019-07-06 15:47 ` Andrew Lunn
2019-07-06 15:18 ` [PATCH 3/4] net: mvmdio: print warning when orion-mdio has too many clocks josua
` (2 subsequent siblings)
4 siblings, 1 reply; 25+ messages in thread
From: josua @ 2019-07-06 15:18 UTC (permalink / raw)
To: netdev; +Cc: Josua Mayer, stable, David S. Miller
From: Josua Mayer <josua@solid-run.com>
Allow up to four clocks to be specified and enabled for the orion-mdio
interface, which are required by the Armada 8k and defined in
armada-cp110.dtsi.
Fixes a hang in probing the mvmdio driver that was encountered on the
Clearfog GT 8K with all drivers built as modules, but also affects other
boards such as the MacchiatoBIN.
Cc: stable@vger.kernel.org
Fixes: 96cb43423822 ("net: mvmdio: allow up to three clocks to be specified for orion-mdio")
Signed-off-by: Josua Mayer <josua@solid-run.com>
---
drivers/net/ethernet/marvell/mvmdio.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/marvell/mvmdio.c b/drivers/net/ethernet/marvell/mvmdio.c
index c5dac6bd2be4..e17d563e97a6 100644
--- a/drivers/net/ethernet/marvell/mvmdio.c
+++ b/drivers/net/ethernet/marvell/mvmdio.c
@@ -64,7 +64,7 @@
struct orion_mdio_dev {
void __iomem *regs;
- struct clk *clk[3];
+ struct clk *clk[4];
/*
* If we have access to the error interrupt pin (which is
* somewhat misnamed as it not only reflects internal errors
--
2.16.4
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 3/4] net: mvmdio: print warning when orion-mdio has too many clocks
2019-07-06 15:18 [PATCH 0/4] Fix hang of Armada 8040 SoC in orion-mdio josua
2019-07-06 15:18 ` [PATCH 1/4] dt-bindings: allow up to four clocks for orion-mdio josua
2019-07-06 15:18 ` [PATCH 2/4] net: mvmdio: allow up to four clocks to be specified " josua
@ 2019-07-06 15:18 ` josua
2019-07-06 16:09 ` Andrew Lunn
2019-07-07 5:04 ` kbuild test robot
2019-07-06 15:19 ` [PATCH 4/4] net: mvmdio: defer probe of orion-mdio if a clock is not ready josua
2019-07-09 13:00 ` [PATCH v2 0/4] Fix hang of Armada 8040 SoC in orion-mdio josua
4 siblings, 2 replies; 25+ messages in thread
From: josua @ 2019-07-06 15:18 UTC (permalink / raw)
To: netdev; +Cc: Josua Mayer, David S. Miller
From: Josua Mayer <josua@solid-run.com>
Print a warning when device tree specifies more than the maximum of four
clocks supported by orion-mdio. Because reading from mdio can lock up
the Armada 8k when a required clock is not initialized, it is important
to notify the user when a specified clock is ignored.
Signed-off-by: Josua Mayer <josua@solid-run.com>
---
drivers/net/ethernet/marvell/mvmdio.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/net/ethernet/marvell/mvmdio.c b/drivers/net/ethernet/marvell/mvmdio.c
index e17d563e97a6..89a99bf8e87b 100644
--- a/drivers/net/ethernet/marvell/mvmdio.c
+++ b/drivers/net/ethernet/marvell/mvmdio.c
@@ -326,6 +326,10 @@ static int orion_mdio_probe(struct platform_device *pdev)
clk_prepare_enable(dev->clk[i]);
}
+ if (!IS_ERR(of_clk_get(pdev->dev.of_node, i)))
+ dev_warn(dev, "unsupported number of clocks, limiting to the first "
+ __stringify(ARRAY_SIZE(dev->clk)) "\n");
+
dev->err_interrupt = platform_get_irq(pdev, 0);
if (dev->err_interrupt > 0 &&
resource_size(r) < MVMDIO_ERR_INT_MASK + 4) {
--
2.16.4
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 4/4] net: mvmdio: defer probe of orion-mdio if a clock is not ready
2019-07-06 15:18 [PATCH 0/4] Fix hang of Armada 8040 SoC in orion-mdio josua
` (2 preceding siblings ...)
2019-07-06 15:18 ` [PATCH 3/4] net: mvmdio: print warning when orion-mdio has too many clocks josua
@ 2019-07-06 15:19 ` josua
2019-07-06 15:54 ` Andrew Lunn
2019-07-07 5:21 ` kbuild test robot
2019-07-09 13:00 ` [PATCH v2 0/4] Fix hang of Armada 8040 SoC in orion-mdio josua
4 siblings, 2 replies; 25+ messages in thread
From: josua @ 2019-07-06 15:19 UTC (permalink / raw)
To: netdev; +Cc: Josua Mayer, David S. Miller
From: Josua Mayer <josua@solid-run.com>
Defer probing of the orion-mdio interface when enabling of either of the
clocks defer probing. This avoids locking up the Armada 8k SoC when mdio
is used before all clocks have been enabled.
Signed-off-by: Josua Mayer <josua@solid-run.com>
---
drivers/net/ethernet/marvell/mvmdio.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/net/ethernet/marvell/mvmdio.c b/drivers/net/ethernet/marvell/mvmdio.c
index 89a99bf8e87b..1034013426ad 100644
--- a/drivers/net/ethernet/marvell/mvmdio.c
+++ b/drivers/net/ethernet/marvell/mvmdio.c
@@ -321,6 +321,10 @@ static int orion_mdio_probe(struct platform_device *pdev)
for (i = 0; i < ARRAY_SIZE(dev->clk); i++) {
dev->clk[i] = of_clk_get(pdev->dev.of_node, i);
+ if (dev->clk[i] == PTR_ERR(-EPROBE_DEFER)) {
+ ret = -EPROBE_DEFER;
+ goto out_clk;
+ }
if (IS_ERR(dev->clk[i]))
break;
clk_prepare_enable(dev->clk[i]);
@@ -366,6 +370,7 @@ static int orion_mdio_probe(struct platform_device *pdev)
if (dev->err_interrupt > 0)
writel(0, dev->regs + MVMDIO_ERR_INT_MASK);
+out_clk:
for (i = 0; i < ARRAY_SIZE(dev->clk); i++) {
if (IS_ERR(dev->clk[i]))
break;
--
2.16.4
^ permalink raw reply related [flat|nested] 25+ messages in thread
* Re: [PATCH 1/4] dt-bindings: allow up to four clocks for orion-mdio
2019-07-06 15:18 ` [PATCH 1/4] dt-bindings: allow up to four clocks for orion-mdio josua
@ 2019-07-06 15:47 ` Andrew Lunn
2019-07-09 1:32 ` Rob Herring
1 sibling, 0 replies; 25+ messages in thread
From: Andrew Lunn @ 2019-07-06 15:47 UTC (permalink / raw)
To: josua; +Cc: netdev, stable, David S. Miller, Rob Herring, Mark Rutland
On Sat, Jul 06, 2019 at 05:18:57PM +0200, josua@solid-run.com wrote:
> From: Josua Mayer <josua@solid-run.com>
>
> Armada 8040 needs four clocks to be enabled for MDIO accesses to work.
> Update the binding to allow the extra clock to be specified.
>
> Cc: stable@vger.kernel.org
> Fixes: 6d6a331f44a1 ("dt-bindings: allow up to three clocks for orion-mdio")
> Signed-off-by: Josua Mayer <josua@solid-run.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Andrew
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 2/4] net: mvmdio: allow up to four clocks to be specified for orion-mdio
2019-07-06 15:18 ` [PATCH 2/4] net: mvmdio: allow up to four clocks to be specified " josua
@ 2019-07-06 15:47 ` Andrew Lunn
0 siblings, 0 replies; 25+ messages in thread
From: Andrew Lunn @ 2019-07-06 15:47 UTC (permalink / raw)
To: josua; +Cc: netdev, stable, David S. Miller
On Sat, Jul 06, 2019 at 05:18:58PM +0200, josua@solid-run.com wrote:
> From: Josua Mayer <josua@solid-run.com>
>
> Allow up to four clocks to be specified and enabled for the orion-mdio
> interface, which are required by the Armada 8k and defined in
> armada-cp110.dtsi.
>
> Fixes a hang in probing the mvmdio driver that was encountered on the
> Clearfog GT 8K with all drivers built as modules, but also affects other
> boards such as the MacchiatoBIN.
>
> Cc: stable@vger.kernel.org
> Fixes: 96cb43423822 ("net: mvmdio: allow up to three clocks to be specified for orion-mdio")
> Signed-off-by: Josua Mayer <josua@solid-run.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Andrew
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 4/4] net: mvmdio: defer probe of orion-mdio if a clock is not ready
2019-07-06 15:19 ` [PATCH 4/4] net: mvmdio: defer probe of orion-mdio if a clock is not ready josua
@ 2019-07-06 15:54 ` Andrew Lunn
2019-07-07 5:21 ` kbuild test robot
1 sibling, 0 replies; 25+ messages in thread
From: Andrew Lunn @ 2019-07-06 15:54 UTC (permalink / raw)
To: josua; +Cc: netdev, David S. Miller
On Sat, Jul 06, 2019 at 05:19:00PM +0200, josua@solid-run.com wrote:
> From: Josua Mayer <josua@solid-run.com>
>
> Defer probing of the orion-mdio interface when enabling of either of the
> clocks defer probing.
Hi Josua
I'm having trouble parsing that sentence.
How about:
Defer probing of the orion-mdio interface when getting a clock returns
EPROBE_DEFER.
Otherwise:
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Andrew
This avoids locking up the Armada 8k SoC when mdio
> is used before all clocks have been enabled.
>
> Signed-off-by: Josua Mayer <josua@solid-run.com>
> ---
> drivers/net/ethernet/marvell/mvmdio.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/drivers/net/ethernet/marvell/mvmdio.c b/drivers/net/ethernet/marvell/mvmdio.c
> index 89a99bf8e87b..1034013426ad 100644
> --- a/drivers/net/ethernet/marvell/mvmdio.c
> +++ b/drivers/net/ethernet/marvell/mvmdio.c
> @@ -321,6 +321,10 @@ static int orion_mdio_probe(struct platform_device *pdev)
>
> for (i = 0; i < ARRAY_SIZE(dev->clk); i++) {
> dev->clk[i] = of_clk_get(pdev->dev.of_node, i);
> + if (dev->clk[i] == PTR_ERR(-EPROBE_DEFER)) {
> + ret = -EPROBE_DEFER;
> + goto out_clk;
> + }
> if (IS_ERR(dev->clk[i]))
> break;
> clk_prepare_enable(dev->clk[i]);
> @@ -366,6 +370,7 @@ static int orion_mdio_probe(struct platform_device *pdev)
> if (dev->err_interrupt > 0)
> writel(0, dev->regs + MVMDIO_ERR_INT_MASK);
>
> +out_clk:
> for (i = 0; i < ARRAY_SIZE(dev->clk); i++) {
> if (IS_ERR(dev->clk[i]))
> break;
> --
> 2.16.4
>
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 3/4] net: mvmdio: print warning when orion-mdio has too many clocks
2019-07-06 15:18 ` [PATCH 3/4] net: mvmdio: print warning when orion-mdio has too many clocks josua
@ 2019-07-06 16:09 ` Andrew Lunn
2019-07-06 16:21 ` Josua Mayer
2019-07-07 5:04 ` kbuild test robot
1 sibling, 1 reply; 25+ messages in thread
From: Andrew Lunn @ 2019-07-06 16:09 UTC (permalink / raw)
To: josua; +Cc: netdev, David S. Miller
On Sat, Jul 06, 2019 at 05:18:59PM +0200, josua@solid-run.com wrote:
> From: Josua Mayer <josua@solid-run.com>
>
> Print a warning when device tree specifies more than the maximum of four
> clocks supported by orion-mdio. Because reading from mdio can lock up
> the Armada 8k when a required clock is not initialized, it is important
> to notify the user when a specified clock is ignored.
>
> Signed-off-by: Josua Mayer <josua@solid-run.com>
> ---
> drivers/net/ethernet/marvell/mvmdio.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/drivers/net/ethernet/marvell/mvmdio.c b/drivers/net/ethernet/marvell/mvmdio.c
> index e17d563e97a6..89a99bf8e87b 100644
> --- a/drivers/net/ethernet/marvell/mvmdio.c
> +++ b/drivers/net/ethernet/marvell/mvmdio.c
> @@ -326,6 +326,10 @@ static int orion_mdio_probe(struct platform_device *pdev)
> clk_prepare_enable(dev->clk[i]);
> }
>
> + if (!IS_ERR(of_clk_get(pdev->dev.of_node, i)))
> + dev_warn(dev, "unsupported number of clocks, limiting to the first "
> + __stringify(ARRAY_SIZE(dev->clk)) "\n");
> +
Hi Josua
Humm. Say getting clock 0 returned -EINVAL, or some other error code.
We break out of the loop, since such errors are being ignored. We then
hit this new code. Getting clock 1 works, and then we incorrectly
print this message.
Rather than getting the i'th clock, get ARRAY_SIZE(dev->clk)'th clock.
Andrew
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 3/4] net: mvmdio: print warning when orion-mdio has too many clocks
2019-07-06 16:09 ` Andrew Lunn
@ 2019-07-06 16:21 ` Josua Mayer
0 siblings, 0 replies; 25+ messages in thread
From: Josua Mayer @ 2019-07-06 16:21 UTC (permalink / raw)
To: Andrew Lunn; +Cc: netdev, David S. Miller
Hi Andrew,
Am 06.07.19 um 18:09 schrieb Andrew Lunn:
> On Sat, Jul 06, 2019 at 05:18:59PM +0200, josua@solid-run.com wrote:
>> From: Josua Mayer <josua@solid-run.com>
>>
>> Print a warning when device tree specifies more than the maximum of four
>> clocks supported by orion-mdio. Because reading from mdio can lock up
>> the Armada 8k when a required clock is not initialized, it is important
>> to notify the user when a specified clock is ignored.
>>
>> Signed-off-by: Josua Mayer <josua@solid-run.com>
>> ---
>> drivers/net/ethernet/marvell/mvmdio.c | 4 ++++
>> 1 file changed, 4 insertions(+)
>>
>> diff --git a/drivers/net/ethernet/marvell/mvmdio.c b/drivers/net/ethernet/marvell/mvmdio.c
>> index e17d563e97a6..89a99bf8e87b 100644
>> --- a/drivers/net/ethernet/marvell/mvmdio.c
>> +++ b/drivers/net/ethernet/marvell/mvmdio.c
>> @@ -326,6 +326,10 @@ static int orion_mdio_probe(struct platform_device *pdev)
>> clk_prepare_enable(dev->clk[i]);
>> }
>>
>> + if (!IS_ERR(of_clk_get(pdev->dev.of_node, i)))
>> + dev_warn(dev, "unsupported number of clocks, limiting to the first "
>> + __stringify(ARRAY_SIZE(dev->clk)) "\n");
>> +
> Hi Josua
>
> Humm. Say getting clock 0 returned -EINVAL, or some other error code.
> We break out of the loop, since such errors are being ignored. We then
> hit this new code. Getting clock 1 works, and then we incorrectly
> print this message.
Good point about breaking out of the loop! I did indeed not take the
break condition of the loop into account.
I can not exactly follow your example though. The first failure of
of_clk_get will trigger break and exit the loop,
and then we would indeed print the wrong message ... .
>
> Rather than getting the i'th clock, get ARRAY_SIZE(dev->clk)'th clock.
I will gladly make the change in a v2.
> Andrew
-
Josua
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 3/4] net: mvmdio: print warning when orion-mdio has too many clocks
2019-07-06 15:18 ` [PATCH 3/4] net: mvmdio: print warning when orion-mdio has too many clocks josua
2019-07-06 16:09 ` Andrew Lunn
@ 2019-07-07 5:04 ` kbuild test robot
1 sibling, 0 replies; 25+ messages in thread
From: kbuild test robot @ 2019-07-07 5:04 UTC (permalink / raw)
To: josua; +Cc: kbuild-all, netdev, Josua Mayer, David S. Miller
[-- Attachment #1: Type: text/plain, Size: 5216 bytes --]
Hi,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on linus/master]
[also build test ERROR on v5.2-rc7 next-20190705]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/josua-solid-run-com/Fix-hang-of-Armada-8040-SoC-in-orion-mdio/20190707-111919
config: arm-allmodconfig (attached as .config)
compiler: arm-linux-gnueabi-gcc (GCC) 7.4.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
GCC_VERSION=7.4.0 make.cross ARCH=arm
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
In file included from include/linux/node.h:18:0,
from include/linux/cpu.h:17,
from include/linux/of_device.h:5,
from drivers/net/ethernet/marvell/mvmdio.c:26:
drivers/net/ethernet/marvell/mvmdio.c: In function 'orion_mdio_probe':
>> drivers/net/ethernet/marvell/mvmdio.c:330:12: error: passing argument 1 of '_dev_warn' from incompatible pointer type [-Werror=incompatible-pointer-types]
dev_warn(dev, "unsupported number of clocks, limiting to the first "
^
include/linux/device.h:1487:12: note: in definition of macro 'dev_warn'
_dev_warn(dev, dev_fmt(fmt), ##__VA_ARGS__)
^~~
include/linux/device.h:1425:6: note: expected 'const struct device *' but argument is of type 'struct orion_mdio_dev *'
void _dev_warn(const struct device *dev, const char *fmt, ...);
^~~~~~~~~
cc1: some warnings being treated as errors
vim +/_dev_warn +330 drivers/net/ethernet/marvell/mvmdio.c
275
276 static int orion_mdio_probe(struct platform_device *pdev)
277 {
278 enum orion_mdio_bus_type type;
279 struct resource *r;
280 struct mii_bus *bus;
281 struct orion_mdio_dev *dev;
282 int i, ret;
283
284 type = (enum orion_mdio_bus_type)of_device_get_match_data(&pdev->dev);
285
286 r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
287 if (!r) {
288 dev_err(&pdev->dev, "No SMI register address given\n");
289 return -ENODEV;
290 }
291
292 bus = devm_mdiobus_alloc_size(&pdev->dev,
293 sizeof(struct orion_mdio_dev));
294 if (!bus)
295 return -ENOMEM;
296
297 switch (type) {
298 case BUS_TYPE_SMI:
299 bus->read = orion_mdio_smi_read;
300 bus->write = orion_mdio_smi_write;
301 break;
302 case BUS_TYPE_XSMI:
303 bus->read = orion_mdio_xsmi_read;
304 bus->write = orion_mdio_xsmi_write;
305 break;
306 }
307
308 bus->name = "orion_mdio_bus";
309 snprintf(bus->id, MII_BUS_ID_SIZE, "%s-mii",
310 dev_name(&pdev->dev));
311 bus->parent = &pdev->dev;
312
313 dev = bus->priv;
314 dev->regs = devm_ioremap(&pdev->dev, r->start, resource_size(r));
315 if (!dev->regs) {
316 dev_err(&pdev->dev, "Unable to remap SMI register\n");
317 return -ENODEV;
318 }
319
320 init_waitqueue_head(&dev->smi_busy_wait);
321
322 for (i = 0; i < ARRAY_SIZE(dev->clk); i++) {
323 dev->clk[i] = of_clk_get(pdev->dev.of_node, i);
324 if (IS_ERR(dev->clk[i]))
325 break;
326 clk_prepare_enable(dev->clk[i]);
327 }
328
329 if (!IS_ERR(of_clk_get(pdev->dev.of_node, i)))
> 330 dev_warn(dev, "unsupported number of clocks, limiting to the first "
331 __stringify(ARRAY_SIZE(dev->clk)) "\n");
332
333 dev->err_interrupt = platform_get_irq(pdev, 0);
334 if (dev->err_interrupt > 0 &&
335 resource_size(r) < MVMDIO_ERR_INT_MASK + 4) {
336 dev_err(&pdev->dev,
337 "disabling interrupt, resource size is too small\n");
338 dev->err_interrupt = 0;
339 }
340 if (dev->err_interrupt > 0) {
341 ret = devm_request_irq(&pdev->dev, dev->err_interrupt,
342 orion_mdio_err_irq,
343 IRQF_SHARED, pdev->name, dev);
344 if (ret)
345 goto out_mdio;
346
347 writel(MVMDIO_ERR_INT_SMI_DONE,
348 dev->regs + MVMDIO_ERR_INT_MASK);
349
350 } else if (dev->err_interrupt == -EPROBE_DEFER) {
351 ret = -EPROBE_DEFER;
352 goto out_mdio;
353 }
354
355 ret = of_mdiobus_register(bus, pdev->dev.of_node);
356 if (ret < 0) {
357 dev_err(&pdev->dev, "Cannot register MDIO bus (%d)\n", ret);
358 goto out_mdio;
359 }
360
361 platform_set_drvdata(pdev, bus);
362
363 return 0;
364
365 out_mdio:
366 if (dev->err_interrupt > 0)
367 writel(0, dev->regs + MVMDIO_ERR_INT_MASK);
368
369 for (i = 0; i < ARRAY_SIZE(dev->clk); i++) {
370 if (IS_ERR(dev->clk[i]))
371 break;
372 clk_disable_unprepare(dev->clk[i]);
373 clk_put(dev->clk[i]);
374 }
375
376 return ret;
377 }
378
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 70930 bytes --]
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 4/4] net: mvmdio: defer probe of orion-mdio if a clock is not ready
2019-07-06 15:19 ` [PATCH 4/4] net: mvmdio: defer probe of orion-mdio if a clock is not ready josua
2019-07-06 15:54 ` Andrew Lunn
@ 2019-07-07 5:21 ` kbuild test robot
1 sibling, 0 replies; 25+ messages in thread
From: kbuild test robot @ 2019-07-07 5:21 UTC (permalink / raw)
To: josua; +Cc: kbuild-all, netdev, Josua Mayer, David S. Miller
[-- Attachment #1: Type: text/plain, Size: 6091 bytes --]
Hi,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on linus/master]
[also build test WARNING on v5.2-rc7 next-20190705]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/josua-solid-run-com/Fix-hang-of-Armada-8040-SoC-in-orion-mdio/20190707-111919
config: arm-allmodconfig (attached as .config)
compiler: arm-linux-gnueabi-gcc (GCC) 7.4.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
GCC_VERSION=7.4.0 make.cross ARCH=arm
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
drivers/net/ethernet/marvell/mvmdio.c: In function 'orion_mdio_probe':
>> drivers/net/ethernet/marvell/mvmdio.c:324:30: warning: passing argument 1 of 'PTR_ERR' makes pointer from integer without a cast [-Wint-conversion]
if (dev->clk[i] == PTR_ERR(-EPROBE_DEFER)) {
^
In file included from include/linux/clk.h:12:0,
from drivers/net/ethernet/marvell/mvmdio.c:20:
include/linux/err.h:29:33: note: expected 'const void *' but argument is of type 'int'
static inline long __must_check PTR_ERR(__force const void *ptr)
^~~~~~~
>> drivers/net/ethernet/marvell/mvmdio.c:324:19: warning: comparison between pointer and integer
if (dev->clk[i] == PTR_ERR(-EPROBE_DEFER)) {
^~
In file included from include/linux/node.h:18:0,
from include/linux/cpu.h:17,
from include/linux/of_device.h:5,
from drivers/net/ethernet/marvell/mvmdio.c:26:
drivers/net/ethernet/marvell/mvmdio.c:334:12: error: passing argument 1 of '_dev_warn' from incompatible pointer type [-Werror=incompatible-pointer-types]
dev_warn(dev, "unsupported number of clocks, limiting to the first "
^
include/linux/device.h:1487:12: note: in definition of macro 'dev_warn'
_dev_warn(dev, dev_fmt(fmt), ##__VA_ARGS__)
^~~
include/linux/device.h:1425:6: note: expected 'const struct device *' but argument is of type 'struct orion_mdio_dev *'
void _dev_warn(const struct device *dev, const char *fmt, ...);
^~~~~~~~~
cc1: some warnings being treated as errors
vim +/PTR_ERR +324 drivers/net/ethernet/marvell/mvmdio.c
275
276 static int orion_mdio_probe(struct platform_device *pdev)
277 {
278 enum orion_mdio_bus_type type;
279 struct resource *r;
280 struct mii_bus *bus;
281 struct orion_mdio_dev *dev;
282 int i, ret;
283
284 type = (enum orion_mdio_bus_type)of_device_get_match_data(&pdev->dev);
285
286 r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
287 if (!r) {
288 dev_err(&pdev->dev, "No SMI register address given\n");
289 return -ENODEV;
290 }
291
292 bus = devm_mdiobus_alloc_size(&pdev->dev,
293 sizeof(struct orion_mdio_dev));
294 if (!bus)
295 return -ENOMEM;
296
297 switch (type) {
298 case BUS_TYPE_SMI:
299 bus->read = orion_mdio_smi_read;
300 bus->write = orion_mdio_smi_write;
301 break;
302 case BUS_TYPE_XSMI:
303 bus->read = orion_mdio_xsmi_read;
304 bus->write = orion_mdio_xsmi_write;
305 break;
306 }
307
308 bus->name = "orion_mdio_bus";
309 snprintf(bus->id, MII_BUS_ID_SIZE, "%s-mii",
310 dev_name(&pdev->dev));
311 bus->parent = &pdev->dev;
312
313 dev = bus->priv;
314 dev->regs = devm_ioremap(&pdev->dev, r->start, resource_size(r));
315 if (!dev->regs) {
316 dev_err(&pdev->dev, "Unable to remap SMI register\n");
317 return -ENODEV;
318 }
319
320 init_waitqueue_head(&dev->smi_busy_wait);
321
322 for (i = 0; i < ARRAY_SIZE(dev->clk); i++) {
323 dev->clk[i] = of_clk_get(pdev->dev.of_node, i);
> 324 if (dev->clk[i] == PTR_ERR(-EPROBE_DEFER)) {
325 ret = -EPROBE_DEFER;
326 goto out_clk;
327 }
328 if (IS_ERR(dev->clk[i]))
329 break;
330 clk_prepare_enable(dev->clk[i]);
331 }
332
333 if (!IS_ERR(of_clk_get(pdev->dev.of_node, i)))
334 dev_warn(dev, "unsupported number of clocks, limiting to the first "
335 __stringify(ARRAY_SIZE(dev->clk)) "\n");
336
337 dev->err_interrupt = platform_get_irq(pdev, 0);
338 if (dev->err_interrupt > 0 &&
339 resource_size(r) < MVMDIO_ERR_INT_MASK + 4) {
340 dev_err(&pdev->dev,
341 "disabling interrupt, resource size is too small\n");
342 dev->err_interrupt = 0;
343 }
344 if (dev->err_interrupt > 0) {
345 ret = devm_request_irq(&pdev->dev, dev->err_interrupt,
346 orion_mdio_err_irq,
347 IRQF_SHARED, pdev->name, dev);
348 if (ret)
349 goto out_mdio;
350
351 writel(MVMDIO_ERR_INT_SMI_DONE,
352 dev->regs + MVMDIO_ERR_INT_MASK);
353
354 } else if (dev->err_interrupt == -EPROBE_DEFER) {
355 ret = -EPROBE_DEFER;
356 goto out_mdio;
357 }
358
359 ret = of_mdiobus_register(bus, pdev->dev.of_node);
360 if (ret < 0) {
361 dev_err(&pdev->dev, "Cannot register MDIO bus (%d)\n", ret);
362 goto out_mdio;
363 }
364
365 platform_set_drvdata(pdev, bus);
366
367 return 0;
368
369 out_mdio:
370 if (dev->err_interrupt > 0)
371 writel(0, dev->regs + MVMDIO_ERR_INT_MASK);
372
373 out_clk:
374 for (i = 0; i < ARRAY_SIZE(dev->clk); i++) {
375 if (IS_ERR(dev->clk[i]))
376 break;
377 clk_disable_unprepare(dev->clk[i]);
378 clk_put(dev->clk[i]);
379 }
380
381 return ret;
382 }
383
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 70930 bytes --]
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 1/4] dt-bindings: allow up to four clocks for orion-mdio
2019-07-06 15:18 ` [PATCH 1/4] dt-bindings: allow up to four clocks for orion-mdio josua
2019-07-06 15:47 ` Andrew Lunn
@ 2019-07-09 1:32 ` Rob Herring
2019-07-09 2:41 ` Andrew Lunn
1 sibling, 1 reply; 25+ messages in thread
From: Rob Herring @ 2019-07-09 1:32 UTC (permalink / raw)
To: josua; +Cc: netdev, stable, David S. Miller, Mark Rutland
On Sat, Jul 6, 2019 at 9:31 AM <josua@solid-run.com> wrote:
>
> From: Josua Mayer <josua@solid-run.com>
>
> Armada 8040 needs four clocks to be enabled for MDIO accesses to work.
> Update the binding to allow the extra clock to be specified.
>
> Cc: stable@vger.kernel.org
> Fixes: 6d6a331f44a1 ("dt-bindings: allow up to three clocks for orion-mdio")
> Signed-off-by: Josua Mayer <josua@solid-run.com>
> ---
> Documentation/devicetree/bindings/net/marvell-orion-mdio.txt | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/Documentation/devicetree/bindings/net/marvell-orion-mdio.txt b/Documentation/devicetree/bindings/net/marvell-orion-mdio.txt
> index 42cd81090a2c..3f3cfc1d8d4d 100644
> --- a/Documentation/devicetree/bindings/net/marvell-orion-mdio.txt
> +++ b/Documentation/devicetree/bindings/net/marvell-orion-mdio.txt
> @@ -16,7 +16,7 @@ Required properties:
>
> Optional properties:
> - interrupts: interrupt line number for the SMI error/done interrupt
> -- clocks: phandle for up to three required clocks for the MDIO instance
> +- clocks: phandle for up to four required clocks for the MDIO instance
This needs to enumerate exactly what the clocks are. Shouldn't there
be an additional clock-names value too?
Rob
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 1/4] dt-bindings: allow up to four clocks for orion-mdio
2019-07-09 1:32 ` Rob Herring
@ 2019-07-09 2:41 ` Andrew Lunn
2019-07-09 22:03 ` Rob Herring
0 siblings, 1 reply; 25+ messages in thread
From: Andrew Lunn @ 2019-07-09 2:41 UTC (permalink / raw)
To: Rob Herring; +Cc: josua, netdev, stable, David S. Miller, Mark Rutland
> > Optional properties:
> > - interrupts: interrupt line number for the SMI error/done interrupt
> > -- clocks: phandle for up to three required clocks for the MDIO instance
> > +- clocks: phandle for up to four required clocks for the MDIO instance
>
> This needs to enumerate exactly what the clocks are. Shouldn't there
> be an additional clock-names value too?
Hi Rob
The driver does not care what they are called. It just turns them all
on, and turns them off again when removed.
Andrew
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH v2 0/4] Fix hang of Armada 8040 SoC in orion-mdio
2019-07-06 15:18 [PATCH 0/4] Fix hang of Armada 8040 SoC in orion-mdio josua
` (3 preceding siblings ...)
2019-07-06 15:19 ` [PATCH 4/4] net: mvmdio: defer probe of orion-mdio if a clock is not ready josua
@ 2019-07-09 13:00 ` josua
2019-07-09 13:00 ` [PATCH v2 1/4] dt-bindings: allow up to four clocks for orion-mdio josua
` (4 more replies)
4 siblings, 5 replies; 25+ messages in thread
From: josua @ 2019-07-09 13:00 UTC (permalink / raw)
To: netdev; +Cc: Josua Mayer
From: Josua Mayer <josua.mayer@jm0.eu>
With a modular kernel as configured by Debian a hang was observed with
the Armada 8040 SoC in the Clearfog GT and Macchiatobin boards.
The 8040 SoC actually requires four clocks to be enabled for the mdio
interface to function. All 4 clocks are already specified in
armada-cp110.dtsi. It has however been missed that the orion-mdio driver
only supports enabling up to three clocks.
This patch-set allows the orion-mdio driver to handle four clocks and
adds a warning when more clocks are specified to prevent this particular
oversight in the future.
Changes since v1:
- fixed condition for priting the warning (Andrew Lunn)
- rephrased commit description for deferred probing (Andrew Lunn)
- fixed compiler warnings (kbuild test robot)
Josua Mayer (4):
dt-bindings: allow up to four clocks for orion-mdio
net: mvmdio: allow up to four clocks to be specified for orion-mdio
net: mvmdio: print warning when orion-mdio has too many clocks
net: mvmdio: defer probe of orion-mdio if a clock is not ready
Documentation/devicetree/bindings/net/marvell-orion-mdio.txt | 2 +-
drivers/net/ethernet/marvell/mvmdio.c | 11 ++++++++++-
2 files changed, 11 insertions(+), 2 deletions(-)
--
2.16.4
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH v2 1/4] dt-bindings: allow up to four clocks for orion-mdio
2019-07-09 13:00 ` [PATCH v2 0/4] Fix hang of Armada 8040 SoC in orion-mdio josua
@ 2019-07-09 13:00 ` josua
2019-07-09 22:07 ` Rob Herring
2019-07-09 13:00 ` [PATCH v2 2/4] net: mvmdio: allow up to four clocks to be specified " josua
` (3 subsequent siblings)
4 siblings, 1 reply; 25+ messages in thread
From: josua @ 2019-07-09 13:00 UTC (permalink / raw)
To: netdev
Cc: Josua Mayer, stable, David S. Miller, Rob Herring, Mark Rutland,
Andrew Lunn
From: Josua Mayer <josua@solid-run.com>
Armada 8040 needs four clocks to be enabled for MDIO accesses to work.
Update the binding to allow the extra clock to be specified.
Cc: stable@vger.kernel.org
Fixes: 6d6a331f44a1 ("dt-bindings: allow up to three clocks for orion-mdio")
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Josua Mayer <josua@solid-run.com>
---
Documentation/devicetree/bindings/net/marvell-orion-mdio.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/net/marvell-orion-mdio.txt b/Documentation/devicetree/bindings/net/marvell-orion-mdio.txt
index 42cd81090a2c..3f3cfc1d8d4d 100644
--- a/Documentation/devicetree/bindings/net/marvell-orion-mdio.txt
+++ b/Documentation/devicetree/bindings/net/marvell-orion-mdio.txt
@@ -16,7 +16,7 @@ Required properties:
Optional properties:
- interrupts: interrupt line number for the SMI error/done interrupt
-- clocks: phandle for up to three required clocks for the MDIO instance
+- clocks: phandle for up to four required clocks for the MDIO instance
The child nodes of the MDIO driver are the individual PHY devices
connected to this MDIO bus. They must have a "reg" property given the
--
2.16.4
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH v2 2/4] net: mvmdio: allow up to four clocks to be specified for orion-mdio
2019-07-09 13:00 ` [PATCH v2 0/4] Fix hang of Armada 8040 SoC in orion-mdio josua
2019-07-09 13:00 ` [PATCH v2 1/4] dt-bindings: allow up to four clocks for orion-mdio josua
@ 2019-07-09 13:00 ` josua
2019-07-09 13:01 ` [PATCH v2 3/4] net: mvmdio: print warning when orion-mdio has too many clocks josua
` (2 subsequent siblings)
4 siblings, 0 replies; 25+ messages in thread
From: josua @ 2019-07-09 13:00 UTC (permalink / raw)
To: netdev; +Cc: Josua Mayer, stable, David S. Miller, Andrew Lunn
From: Josua Mayer <josua@solid-run.com>
Allow up to four clocks to be specified and enabled for the orion-mdio
interface, which are required by the Armada 8k and defined in
armada-cp110.dtsi.
Fixes a hang in probing the mvmdio driver that was encountered on the
Clearfog GT 8K with all drivers built as modules, but also affects other
boards such as the MacchiatoBIN.
Cc: stable@vger.kernel.org
Fixes: 96cb43423822 ("net: mvmdio: allow up to three clocks to be specified for orion-mdio")
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Josua Mayer <josua@solid-run.com>
---
drivers/net/ethernet/marvell/mvmdio.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/marvell/mvmdio.c b/drivers/net/ethernet/marvell/mvmdio.c
index c5dac6bd2be4..e17d563e97a6 100644
--- a/drivers/net/ethernet/marvell/mvmdio.c
+++ b/drivers/net/ethernet/marvell/mvmdio.c
@@ -64,7 +64,7 @@
struct orion_mdio_dev {
void __iomem *regs;
- struct clk *clk[3];
+ struct clk *clk[4];
/*
* If we have access to the error interrupt pin (which is
* somewhat misnamed as it not only reflects internal errors
--
2.16.4
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH v2 3/4] net: mvmdio: print warning when orion-mdio has too many clocks
2019-07-09 13:00 ` [PATCH v2 0/4] Fix hang of Armada 8040 SoC in orion-mdio josua
2019-07-09 13:00 ` [PATCH v2 1/4] dt-bindings: allow up to four clocks for orion-mdio josua
2019-07-09 13:00 ` [PATCH v2 2/4] net: mvmdio: allow up to four clocks to be specified " josua
@ 2019-07-09 13:01 ` josua
2019-07-09 13:14 ` Andrew Lunn
2019-07-09 13:01 ` [PATCH v2 4/4] net: mvmdio: defer probe of orion-mdio if a clock is not ready josua
2019-07-09 20:03 ` [PATCH v2 0/4] Fix hang of Armada 8040 SoC in orion-mdio David Miller
4 siblings, 1 reply; 25+ messages in thread
From: josua @ 2019-07-09 13:01 UTC (permalink / raw)
To: netdev; +Cc: Josua Mayer, David S. Miller, Andrew Lunn
From: Josua Mayer <josua@solid-run.com>
Print a warning when device tree specifies more than the maximum of four
clocks supported by orion-mdio. Because reading from mdio can lock up
the Armada 8k when a required clock is not initialized, it is important
to notify the user when a specified clock is ignored.
Signed-off-by: Josua Mayer <josua@solid-run.com>
---
drivers/net/ethernet/marvell/mvmdio.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/net/ethernet/marvell/mvmdio.c b/drivers/net/ethernet/marvell/mvmdio.c
index e17d563e97a6..eba18065a4da 100644
--- a/drivers/net/ethernet/marvell/mvmdio.c
+++ b/drivers/net/ethernet/marvell/mvmdio.c
@@ -326,6 +326,10 @@ static int orion_mdio_probe(struct platform_device *pdev)
clk_prepare_enable(dev->clk[i]);
}
+ if (!IS_ERR(of_clk_get(pdev->dev.of_node, ARRAY_SIZE(dev->clk))))
+ dev_warn(&pdev->dev, "unsupported number of clocks, limiting to the first "
+ __stringify(ARRAY_SIZE(dev->clk)) "\n");
+
dev->err_interrupt = platform_get_irq(pdev, 0);
if (dev->err_interrupt > 0 &&
resource_size(r) < MVMDIO_ERR_INT_MASK + 4) {
--
2.16.4
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH v2 4/4] net: mvmdio: defer probe of orion-mdio if a clock is not ready
2019-07-09 13:00 ` [PATCH v2 0/4] Fix hang of Armada 8040 SoC in orion-mdio josua
` (2 preceding siblings ...)
2019-07-09 13:01 ` [PATCH v2 3/4] net: mvmdio: print warning when orion-mdio has too many clocks josua
@ 2019-07-09 13:01 ` josua
2019-07-09 13:15 ` Andrew Lunn
2019-07-09 20:03 ` [PATCH v2 0/4] Fix hang of Armada 8040 SoC in orion-mdio David Miller
4 siblings, 1 reply; 25+ messages in thread
From: josua @ 2019-07-09 13:01 UTC (permalink / raw)
To: netdev; +Cc: Josua Mayer, David S. Miller, Andrew Lunn
From: Josua Mayer <josua@solid-run.com>
Defer probing of the orion-mdio interface when getting a clock returns
EPROBE_DEFER. This avoids locking up the Armada 8k SoC when mdio is used
before all clocks have been enabled.
Signed-off-by: Josua Mayer <josua@solid-run.com>
---
drivers/net/ethernet/marvell/mvmdio.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/net/ethernet/marvell/mvmdio.c b/drivers/net/ethernet/marvell/mvmdio.c
index eba18065a4da..f660cc2b8258 100644
--- a/drivers/net/ethernet/marvell/mvmdio.c
+++ b/drivers/net/ethernet/marvell/mvmdio.c
@@ -321,6 +321,10 @@ static int orion_mdio_probe(struct platform_device *pdev)
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]);
@@ -366,6 +370,7 @@ static int orion_mdio_probe(struct platform_device *pdev)
if (dev->err_interrupt > 0)
writel(0, dev->regs + MVMDIO_ERR_INT_MASK);
+out_clk:
for (i = 0; i < ARRAY_SIZE(dev->clk); i++) {
if (IS_ERR(dev->clk[i]))
break;
--
2.16.4
^ permalink raw reply related [flat|nested] 25+ messages in thread
* Re: [PATCH v2 3/4] net: mvmdio: print warning when orion-mdio has too many clocks
2019-07-09 13:01 ` [PATCH v2 3/4] net: mvmdio: print warning when orion-mdio has too many clocks josua
@ 2019-07-09 13:14 ` Andrew Lunn
0 siblings, 0 replies; 25+ messages in thread
From: Andrew Lunn @ 2019-07-09 13:14 UTC (permalink / raw)
To: josua; +Cc: netdev, David S. Miller
On Tue, Jul 09, 2019 at 03:01:00PM +0200, josua@solid-run.com wrote:
> From: Josua Mayer <josua@solid-run.com>
>
> Print a warning when device tree specifies more than the maximum of four
> clocks supported by orion-mdio. Because reading from mdio can lock up
> the Armada 8k when a required clock is not initialized, it is important
> to notify the user when a specified clock is ignored.
>
> Signed-off-by: Josua Mayer <josua@solid-run.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Andrew
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v2 4/4] net: mvmdio: defer probe of orion-mdio if a clock is not ready
2019-07-09 13:01 ` [PATCH v2 4/4] net: mvmdio: defer probe of orion-mdio if a clock is not ready josua
@ 2019-07-09 13:15 ` Andrew Lunn
0 siblings, 0 replies; 25+ messages in thread
From: Andrew Lunn @ 2019-07-09 13:15 UTC (permalink / raw)
To: josua; +Cc: netdev, David S. Miller
On Tue, Jul 09, 2019 at 03:01:01PM +0200, josua@solid-run.com wrote:
> From: Josua Mayer <josua@solid-run.com>
>
> Defer probing of the orion-mdio interface when getting a clock returns
> EPROBE_DEFER. This avoids locking up the Armada 8k SoC when mdio is used
> before all clocks have been enabled.
>
> Signed-off-by: Josua Mayer <josua@solid-run.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Andrew
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v2 0/4] Fix hang of Armada 8040 SoC in orion-mdio
2019-07-09 13:00 ` [PATCH v2 0/4] Fix hang of Armada 8040 SoC in orion-mdio josua
` (3 preceding siblings ...)
2019-07-09 13:01 ` [PATCH v2 4/4] net: mvmdio: defer probe of orion-mdio if a clock is not ready josua
@ 2019-07-09 20:03 ` David Miller
4 siblings, 0 replies; 25+ messages in thread
From: David Miller @ 2019-07-09 20:03 UTC (permalink / raw)
To: josua; +Cc: netdev, josua.mayer
From: josua@solid-run.com
Date: Tue, 9 Jul 2019 15:00:57 +0200
> From: Josua Mayer <josua.mayer@jm0.eu>
>
> With a modular kernel as configured by Debian a hang was observed with
> the Armada 8040 SoC in the Clearfog GT and Macchiatobin boards.
>
> The 8040 SoC actually requires four clocks to be enabled for the mdio
> interface to function. All 4 clocks are already specified in
> armada-cp110.dtsi. It has however been missed that the orion-mdio driver
> only supports enabling up to three clocks.
>
> This patch-set allows the orion-mdio driver to handle four clocks and
> adds a warning when more clocks are specified to prevent this particular
> oversight in the future.
>
> Changes since v1:
> - fixed condition for priting the warning (Andrew Lunn)
> - rephrased commit description for deferred probing (Andrew Lunn)
> - fixed compiler warnings (kbuild test robot)
Series applied, thanks Josua.
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 1/4] dt-bindings: allow up to four clocks for orion-mdio
2019-07-09 2:41 ` Andrew Lunn
@ 2019-07-09 22:03 ` Rob Herring
2019-07-18 1:31 ` Andrew Lunn
0 siblings, 1 reply; 25+ messages in thread
From: Rob Herring @ 2019-07-09 22:03 UTC (permalink / raw)
To: Andrew Lunn; +Cc: josua, netdev, stable, David S. Miller, Mark Rutland
On Mon, Jul 8, 2019 at 8:41 PM Andrew Lunn <andrew@lunn.ch> wrote:
>
> > > Optional properties:
> > > - interrupts: interrupt line number for the SMI error/done interrupt
> > > -- clocks: phandle for up to three required clocks for the MDIO instance
> > > +- clocks: phandle for up to four required clocks for the MDIO instance
> >
> > This needs to enumerate exactly what the clocks are. Shouldn't there
> > be an additional clock-names value too?
>
> Hi Rob
>
> The driver does not care what they are called. It just turns them all
> on, and turns them off again when removed.
That's fine for the driver to do, but this is the hardware description.
It's not just what they are called, but how many too. Is 1 clock in
the DT valid? 0? It would be unusual for a given piece of h/w to
function with a variable number of clocks.
Rob
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v2 1/4] dt-bindings: allow up to four clocks for orion-mdio
2019-07-09 13:00 ` [PATCH v2 1/4] dt-bindings: allow up to four clocks for orion-mdio josua
@ 2019-07-09 22:07 ` Rob Herring
0 siblings, 0 replies; 25+ messages in thread
From: Rob Herring @ 2019-07-09 22:07 UTC (permalink / raw)
To: josua; +Cc: netdev, stable, David S. Miller, Mark Rutland, Andrew Lunn
On Tue, Jul 9, 2019 at 7:13 AM <josua@solid-run.com> wrote:
>
> From: Josua Mayer <josua@solid-run.com>
>
> Armada 8040 needs four clocks to be enabled for MDIO accesses to work.
> Update the binding to allow the extra clock to be specified.
>
> Cc: stable@vger.kernel.org
> Fixes: 6d6a331f44a1 ("dt-bindings: allow up to three clocks for orion-mdio")
> Reviewed-by: Andrew Lunn <andrew@lunn.ch>
> Signed-off-by: Josua Mayer <josua@solid-run.com>
> ---
> Documentation/devicetree/bindings/net/marvell-orion-mdio.txt | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
Please don't resend patches when the last one is still under discussion.
Rob
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 1/4] dt-bindings: allow up to four clocks for orion-mdio
2019-07-09 22:03 ` Rob Herring
@ 2019-07-18 1:31 ` Andrew Lunn
0 siblings, 0 replies; 25+ messages in thread
From: Andrew Lunn @ 2019-07-18 1:31 UTC (permalink / raw)
To: Rob Herring; +Cc: josua, netdev, stable, David S. Miller, Mark Rutland
On Tue, Jul 09, 2019 at 04:03:28PM -0600, Rob Herring wrote:
> On Mon, Jul 8, 2019 at 8:41 PM Andrew Lunn <andrew@lunn.ch> wrote:
> >
> > > > Optional properties:
> > > > - interrupts: interrupt line number for the SMI error/done interrupt
> > > > -- clocks: phandle for up to three required clocks for the MDIO instance
> > > > +- clocks: phandle for up to four required clocks for the MDIO instance
> > >
> > > This needs to enumerate exactly what the clocks are. Shouldn't there
> > > be an additional clock-names value too?
> >
> > Hi Rob
> >
> > The driver does not care what they are called. It just turns them all
> > on, and turns them off again when removed.
>
> That's fine for the driver to do, but this is the hardware description.
>
> It's not just what they are called, but how many too. Is 1 clock in
> the DT valid? 0? It would be unusual for a given piece of h/w to
> function with a variable number of clocks.
Hi Rob
The orion5x has 0 clocks. kirkwood, dove, Armada XP, 370 375, 380
has 1 clock. Armada 37xx has 4.
So yes, 1 clock is valid. 0 clocks is also valid. The piece of
hardware itself does not care how many clocks are feeding it, so long
as they are all turned on.
Andrew
^ permalink raw reply [flat|nested] 25+ messages in thread
end of thread, other threads:[~2019-07-18 1:31 UTC | newest]
Thread overview: 25+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-07-06 15:18 [PATCH 0/4] Fix hang of Armada 8040 SoC in orion-mdio josua
2019-07-06 15:18 ` [PATCH 1/4] dt-bindings: allow up to four clocks for orion-mdio josua
2019-07-06 15:47 ` Andrew Lunn
2019-07-09 1:32 ` Rob Herring
2019-07-09 2:41 ` Andrew Lunn
2019-07-09 22:03 ` Rob Herring
2019-07-18 1:31 ` Andrew Lunn
2019-07-06 15:18 ` [PATCH 2/4] net: mvmdio: allow up to four clocks to be specified " josua
2019-07-06 15:47 ` Andrew Lunn
2019-07-06 15:18 ` [PATCH 3/4] net: mvmdio: print warning when orion-mdio has too many clocks josua
2019-07-06 16:09 ` Andrew Lunn
2019-07-06 16:21 ` Josua Mayer
2019-07-07 5:04 ` kbuild test robot
2019-07-06 15:19 ` [PATCH 4/4] net: mvmdio: defer probe of orion-mdio if a clock is not ready josua
2019-07-06 15:54 ` Andrew Lunn
2019-07-07 5:21 ` kbuild test robot
2019-07-09 13:00 ` [PATCH v2 0/4] Fix hang of Armada 8040 SoC in orion-mdio josua
2019-07-09 13:00 ` [PATCH v2 1/4] dt-bindings: allow up to four clocks for orion-mdio josua
2019-07-09 22:07 ` Rob Herring
2019-07-09 13:00 ` [PATCH v2 2/4] net: mvmdio: allow up to four clocks to be specified " josua
2019-07-09 13:01 ` [PATCH v2 3/4] net: mvmdio: print warning when orion-mdio has too many clocks josua
2019-07-09 13:14 ` Andrew Lunn
2019-07-09 13:01 ` [PATCH v2 4/4] net: mvmdio: defer probe of orion-mdio if a clock is not ready josua
2019-07-09 13:15 ` Andrew Lunn
2019-07-09 20:03 ` [PATCH v2 0/4] Fix hang of Armada 8040 SoC in orion-mdio David Miller
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.