Messages in this thread Patch in this message | | | From | Leonard Crestez <> | Subject | Re: [PATCH] clk: imx: imx8qxp-lpcg: use devm_platform_ioremap_resource | Date | Wed, 4 Dec 2019 14:24:19 +0000 |
| |
On 2019-12-04 12:14 PM, Peng Fan wrote: > From: Peng Fan <peng.fan@nxp.com> > > devm_platform_ioremap_resource() wraps platform_get_resource() and > devm_ioremap_resource(), we could use this API to simplify the code. > > Signed-off-by: Peng Fan <peng.fan@nxp.com>
This patch has been posted before and it breaks uart on imx8qxp-mek and possibly other things.
The old and new paths are not equivalent: devm_platform_ioremap_resource calls devm_ioremap_resource differs from devm_ioremap by also calling devm_request_mem_region.
This prevents other mappings in the area; this is not an issue for most drivers but imx8qxp-lpcg maps whole subsystems. For example:
adma_lpcg: clock-controller@59000000 { compatible = "fsl,imx8qxp-lpcg-adma"; reg = <0x59000000 0x2000000>; #clock-cells = <1>; };
adma_lpuart0: serial@5a060000 { reg = <0x5a060000 0x1000>; ... };
Previously: https://patchwork.kernel.org/patch/10908807/
> --- > drivers/clk/imx/clk-imx8qxp-lpcg.c | 8 ++------ > 1 file changed, 2 insertions(+), 6 deletions(-) > > diff --git a/drivers/clk/imx/clk-imx8qxp-lpcg.c b/drivers/clk/imx/clk-imx8qxp-lpcg.c > index c0aff7ca6374..3f2c2b068c73 100644 > --- a/drivers/clk/imx/clk-imx8qxp-lpcg.c > +++ b/drivers/clk/imx/clk-imx8qxp-lpcg.c > @@ -164,7 +164,6 @@ static int imx8qxp_lpcg_clk_probe(struct platform_device *pdev) > struct clk_hw_onecell_data *clk_data; > const struct imx8qxp_ss_lpcg *ss_lpcg; > const struct imx8qxp_lpcg_data *lpcg; > - struct resource *res; > struct clk_hw **clks; > void __iomem *base; > int i; > @@ -173,12 +172,9 @@ static int imx8qxp_lpcg_clk_probe(struct platform_device *pdev) > if (!ss_lpcg) > return -ENODEV; > > - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); > - if (!res) > - return -EINVAL; > - base = devm_ioremap(dev, res->start, resource_size(res)); > + base = devm_platform_ioremap_resource(pdev, 0); > if (!base) > - return -ENOMEM; > + return PTR_ERR(base); > > clk_data = devm_kzalloc(&pdev->dev, struct_size(clk_data, hws, > ss_lpcg->num_max), GFP_KERNEL); >
| |