Re: [PATCH v2 1/5] net: mdio: ipq4019: move eth_ldo_rdy before MDIO bus register

Russell King (Oracle)
2023-12-12T19:11:27Z

On Tue, Dec 12, 2023 at 01:50:01PM +0100, Maxime Chevallier wrote:
> Hello,
>
> On Tue, 12 Dec 2023 19:51:46 +0800
> Luo Jie <quic_luoj@quicinc.com> wrote:
> > @@ -252,11 +244,32 @@ static int ipq4019_mdio_probe(struct platform_device *pdev)
> > if (IS_ERR(priv->mdio_clk))
> > return PTR_ERR(priv->mdio_clk);
> >
> > - /* The platform resource is provided on the chipset IPQ5018 */
> > - /* This resource is optional */
> > - res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
> > - if (res)
> > - priv->eth_ldo_rdy = devm_ioremap_resource(&pdev->dev, res);
> > + /* These platform resources are provided on the chipset IPQ5018 or
> > + * IPQ5332.
> > + */
> > + /* This resource are optional */
> > + for (index = 0; index < ETH_LDO_RDY_CNT; index++) {
> > + res = platform_get_resource(pdev, IORESOURCE_MEM, index + 1);
> > + if (res) {
> > + priv->eth_ldo_rdy[index] = devm_ioremap(&pdev->dev,
> > + res->start,
> > + resource_size(res));
>
> You can simplify that sequence by using
> devm_platform_get_and_ioremap_resource(), which will do both the
> platform_get_resource and the devm_ioremap at once for you.

Sadly it can't if resources are optional. __devm_ioremap_resource()
which will be capped by devm_platform_get_and_ioremap_resource() will
be passed a NULL 'res', which will lead to:

if (!res || resource_type(res) != IORESOURCE_MEM) {
dev_err(dev, "invalid resource %pR\n", res);
return IOMEM_ERR_PTR(-EINVAL);
}

There isn't an "optional" version of
devm_platform_get_and_ioremap_resource().

--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!