Re: [PATCH net] net: mdio: mscc-miim: Fix the mdio controller
From: Cai Huoqing
Date: Tue Sep 28 2021 - 04:54:24 EST
On 28 9月 21 09:17:20, Horatiu Vultur wrote:
Hi Horatiu,
Thank for your feedback.
I'm sorry for this commit, my mistake.
After I have checked my recent submission history
the commit-
commit fa14d03e014a130839f9dc1b97ea61fe598d873d
drivers/net/mdio/mdio-ipq4019.c 225 line
has the same issue, an optional phy-regs
Are you willing to fix it at the same time:)
Many thanks.
> According to the documentation the second resource is optional. But the
> blamed commit ignores that and if the resource is not there it just
> fails.
>
> This patch reverts that to still allow the second resource to be
> optional because other SoC have the some MDIO controller and doesn't
> need to second resource.
>
> Fixes: 672a1c394950 ("net: mdio: mscc-miim: Make use of the helper function devm_platform_ioremap_resource()")
> Signed-off-by: Horatiu Vultur <horatiu.vultur@xxxxxxxxxxxxx>
> ---
> drivers/net/mdio/mdio-mscc-miim.c | 15 ++++++++++-----
> 1 file changed, 10 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/net/mdio/mdio-mscc-miim.c b/drivers/net/mdio/mdio-mscc-miim.c
> index 1ee592d3eae4..17f98f609ec8 100644
> --- a/drivers/net/mdio/mdio-mscc-miim.c
> +++ b/drivers/net/mdio/mdio-mscc-miim.c
> @@ -134,8 +134,9 @@ static int mscc_miim_reset(struct mii_bus *bus)
>
> static int mscc_miim_probe(struct platform_device *pdev)
> {
> - struct mii_bus *bus;
> struct mscc_miim_dev *dev;
> + struct resource *res;
> + struct mii_bus *bus;
> int ret;
>
> bus = devm_mdiobus_alloc_size(&pdev->dev, sizeof(*dev));
> @@ -156,10 +157,14 @@ static int mscc_miim_probe(struct platform_device *pdev)
> return PTR_ERR(dev->regs);
> }
>
> - dev->phy_regs = devm_platform_ioremap_resource(pdev, 1);
> - if (IS_ERR(dev->phy_regs)) {
> - dev_err(&pdev->dev, "Unable to map internal phy registers\n");
> - return PTR_ERR(dev->phy_regs);
> + /* This resource is optional */
> + res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
> + if (res) {
> + dev->phy_regs = devm_ioremap_resource(&pdev->dev, res);
> + if (IS_ERR(dev->phy_regs)) {
> + dev_err(&pdev->dev, "Unable to map internal phy registers\n");
> + return PTR_ERR(dev->phy_regs);
> + }
> }
>
> ret = of_mdiobus_register(bus, pdev->dev.of_node);
> --
> 2.33.0
>