Patch "sh_eth: fix TSU resource handling" has been added to the 4.9-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
sh_eth: fix TSU resource handling
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
sh_eth-fix-tsu-resource-handling.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Sat Jan 13 10:51:19 CET 2018
From: Sergei Shtylyov <[email protected]>
Date: Wed, 3 Jan 2018 20:09:49 +0300
Subject: sh_eth: fix TSU resource handling
From: Sergei Shtylyov <[email protected]>
[ Upstream commit dfe8266b8dd10e12a731c985b725fcf7f0e537f0 ]
When switching the driver to the managed device API, I managed to break the case of a dual Ether devices sharing a single TSU: the 2nd Ether port wouldn't probe. Iwamatsu-san has tried to fix this but his patch was buggy and he then dropped the ball...
The solution is to limit calling devm_request_mem_region() to the first of the two ports sharing the same TSU, so devm_ioremap_resource() can't be used anymore for the TSU resource...
--- drivers/net/ethernet/renesas/sh_eth.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-)
drivers/net/ethernet/renesas/sh_eth.c +22 -3
@@ -3087,10 +3087,29 @@ static int sh_eth_drv_probe(struct platf/* ioremap the TSU registers */ if (mdp->cd->tsu) {struct resource *rtsu; + rtsu =platform_get_resource (pdev,IORESOURCE_MEM ,1 ); - mdp->tsu_addr =devm_ioremap_resource (&pdev->dev, rtsu); -if (IS_ERR (mdp->tsu_addr)) { - ret =PTR_ERR (mdp->tsu_addr); +if (!rtsu) { +dev_err (&pdev->dev,"no TSU resource\n" ); + ret = -ENODEV ; + goto out_release; + } +/* We can only request the TSU region for the first port +* of the two sharing this TSU for the probe to succeed... +*/ +if (devno %2 ==0 && + !devm_request_mem_region (&pdev->dev, rtsu->start, +resource_size (rtsu), +dev_name (&pdev->dev))) { +dev_err (&pdev->dev,"can't request TSU resource.\n" ); + ret = -EBUSY ; + goto out_release; + } + mdp->tsu_addr =devm_ioremap (&pdev->dev, rtsu->start, +resource_size (rtsu)); +if (!mdp->tsu_addr) { +dev_err (&pdev->dev,"TSU region ioremap() failed.\n" ); + ret = -ENOMEM ; goto out_release; } mdp->port = devno %2 ;
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/sh_eth-fix-sh7757-gether-initialization.patch queue-4.9/sh_eth-fix-tsu-resource-handling.patch