Message ID | 20220620213054.1872954-3-dmitry.baryshkov@linaro.org |
---|---|
State | New |
Headers | show |
Series | drm/msm: move resource allocation to the _probe function | expand |
On 6/20/2022 2:30 PM, Dmitry Baryshkov wrote: > To let the probe function bail early if any of the resources is > unavailable, move resource allocattion from kms_init directly to the allocation > probe callback. While we are at it, replace irq_of_parse_and_map() with > platform_get_irq(). Any specific reason to replace this? > > Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> With those two addressed, Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com> > --- > drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 62 +++++++++++++------------ > 1 file changed, 32 insertions(+), 30 deletions(-) > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c > index ae13a3a5d8a5..756be04d804b 100644 > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c > @@ -1206,31 +1206,13 @@ static int dpu_kms_init(struct drm_device *ddev) > struct device *dev = ddev->dev; > struct platform_device *pdev = to_platform_device(dev); > struct dpu_kms *dpu_kms; > - int irq; > struct dev_pm_opp *opp; > int ret = 0; > unsigned long max_freq = ULONG_MAX; > > - dpu_kms = devm_kzalloc(&pdev->dev, sizeof(*dpu_kms), GFP_KERNEL); > + dpu_kms = to_dpu_kms(priv->kms); > if (!dpu_kms) > - return -ENOMEM; > - > - ret = devm_pm_opp_set_clkname(dev, "core"); > - if (ret) > - return ret; > - /* OPP table is optional */ > - ret = devm_pm_opp_of_add_table(dev); > - if (ret && ret != -ENODEV) { > - dev_err(dev, "invalid OPP table in device tree\n"); > - return ret; > - } > - > - ret = devm_clk_bulk_get_all(&pdev->dev, &dpu_kms->clocks); > - if (ret < 0) { > - DPU_ERROR("failed to parse clocks, ret=%d\n", ret); > - return ret; > - } > - dpu_kms->num_clocks = ret; > + return -EINVAL; > > opp = dev_pm_opp_find_freq_floor(dev, &max_freq); > if (!IS_ERR(opp)) > @@ -1249,21 +1231,41 @@ static int dpu_kms_init(struct drm_device *ddev) > pm_runtime_enable(&pdev->dev); > dpu_kms->rpm_enabled = true; > > - priv->kms = &dpu_kms->base; > - > - irq = irq_of_parse_and_map(dpu_kms->pdev->dev.of_node, 0); > - if (!irq) { > - DPU_ERROR("failed to get irq\n"); > - return -EINVAL; > - } > - dpu_kms->base.irq = irq; > - > return 0; > } > > static int dpu_dev_probe(struct platform_device *pdev) > { > - return msm_drv_probe(&pdev->dev, dpu_kms_init, NULL); > + struct device *dev = &pdev->dev; > + struct dpu_kms *dpu_kms; > + int irq; > + int ret = 0; > + > + dpu_kms = devm_kzalloc(dev, sizeof(*dpu_kms), GFP_KERNEL); > + if (!dpu_kms) > + return -ENOMEM; > + > + ret = devm_pm_opp_set_clkname(dev, "core"); > + if (ret) > + return ret; > + /* OPP table is optional */ > + ret = devm_pm_opp_of_add_table(dev); > + if (ret && ret != -ENODEV) > + return dev_err_probe(dev, ret, "invalid OPP table in device tree\n"); > + > + ret = devm_clk_bulk_get_all(&pdev->dev, &dpu_kms->clocks); > + if (ret < 0) > + return dev_err_probe(dev, ret, "failed to parse clocks\n"); > + > + dpu_kms->num_clocks = ret; > + > + irq = platform_get_irq(pdev, 0); > + if (irq < 0) > + return dev_err_probe(dev, irq, "failed to get irq\n"); > + > + dpu_kms->base.irq = irq; > + > + return msm_drv_probe(&pdev->dev, dpu_kms_init, &dpu_kms->base); > } > > static int dpu_dev_remove(struct platform_device *pdev)
On 2 September 2022 00:37:30 GMT+03:00, Abhinav Kumar <quic_abhinavk@quicinc.com> wrote: > > >On 6/20/2022 2:30 PM, Dmitry Baryshkov wrote: >> To let the probe function bail early if any of the resources is >> unavailable, move resource allocattion from kms_init directly to the > allocation Ack >> probe callback. While we are at it, replace irq_of_parse_and_map() with >> platform_get_irq(). >Any specific reason to replace this? Yes. To use generic API rather than the OF-specific unusual function. >> >> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> > >With those two addressed, > >Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com> >> --- >> drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 62 +++++++++++++------------ >> 1 file changed, 32 insertions(+), 30 deletions(-) >> >> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c >> index ae13a3a5d8a5..756be04d804b 100644 >> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c >> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c >> @@ -1206,31 +1206,13 @@ static int dpu_kms_init(struct drm_device *ddev) >> struct device *dev = ddev->dev; >> struct platform_device *pdev = to_platform_device(dev); >> struct dpu_kms *dpu_kms; >> - int irq; >> struct dev_pm_opp *opp; >> int ret = 0; >> unsigned long max_freq = ULONG_MAX; >> - dpu_kms = devm_kzalloc(&pdev->dev, sizeof(*dpu_kms), GFP_KERNEL); >> + dpu_kms = to_dpu_kms(priv->kms); >> if (!dpu_kms) >> - return -ENOMEM; >> - >> - ret = devm_pm_opp_set_clkname(dev, "core"); >> - if (ret) >> - return ret; >> - /* OPP table is optional */ >> - ret = devm_pm_opp_of_add_table(dev); >> - if (ret && ret != -ENODEV) { >> - dev_err(dev, "invalid OPP table in device tree\n"); >> - return ret; >> - } >> - >> - ret = devm_clk_bulk_get_all(&pdev->dev, &dpu_kms->clocks); >> - if (ret < 0) { >> - DPU_ERROR("failed to parse clocks, ret=%d\n", ret); >> - return ret; >> - } >> - dpu_kms->num_clocks = ret; >> + return -EINVAL; >> opp = dev_pm_opp_find_freq_floor(dev, &max_freq); >> if (!IS_ERR(opp)) >> @@ -1249,21 +1231,41 @@ static int dpu_kms_init(struct drm_device *ddev) >> pm_runtime_enable(&pdev->dev); >> dpu_kms->rpm_enabled = true; >> - priv->kms = &dpu_kms->base; >> - >> - irq = irq_of_parse_and_map(dpu_kms->pdev->dev.of_node, 0); >> - if (!irq) { >> - DPU_ERROR("failed to get irq\n"); >> - return -EINVAL; >> - } >> - dpu_kms->base.irq = irq; >> - >> return 0; >> } >> static int dpu_dev_probe(struct platform_device *pdev) >> { >> - return msm_drv_probe(&pdev->dev, dpu_kms_init, NULL); >> + struct device *dev = &pdev->dev; >> + struct dpu_kms *dpu_kms; >> + int irq; >> + int ret = 0; >> + >> + dpu_kms = devm_kzalloc(dev, sizeof(*dpu_kms), GFP_KERNEL); >> + if (!dpu_kms) >> + return -ENOMEM; >> + >> + ret = devm_pm_opp_set_clkname(dev, "core"); >> + if (ret) >> + return ret; >> + /* OPP table is optional */ >> + ret = devm_pm_opp_of_add_table(dev); >> + if (ret && ret != -ENODEV) >> + return dev_err_probe(dev, ret, "invalid OPP table in device tree\n"); >> + >> + ret = devm_clk_bulk_get_all(&pdev->dev, &dpu_kms->clocks); >> + if (ret < 0) >> + return dev_err_probe(dev, ret, "failed to parse clocks\n"); >> + >> + dpu_kms->num_clocks = ret; >> + >> + irq = platform_get_irq(pdev, 0); >> + if (irq < 0) >> + return dev_err_probe(dev, irq, "failed to get irq\n"); >> + >> + dpu_kms->base.irq = irq; >> + >> + return msm_drv_probe(&pdev->dev, dpu_kms_init, &dpu_kms->base); >> } >> static int dpu_dev_remove(struct platform_device *pdev)
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c index ae13a3a5d8a5..756be04d804b 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c @@ -1206,31 +1206,13 @@ static int dpu_kms_init(struct drm_device *ddev) struct device *dev = ddev->dev; struct platform_device *pdev = to_platform_device(dev); struct dpu_kms *dpu_kms; - int irq; struct dev_pm_opp *opp; int ret = 0; unsigned long max_freq = ULONG_MAX; - dpu_kms = devm_kzalloc(&pdev->dev, sizeof(*dpu_kms), GFP_KERNEL); + dpu_kms = to_dpu_kms(priv->kms); if (!dpu_kms) - return -ENOMEM; - - ret = devm_pm_opp_set_clkname(dev, "core"); - if (ret) - return ret; - /* OPP table is optional */ - ret = devm_pm_opp_of_add_table(dev); - if (ret && ret != -ENODEV) { - dev_err(dev, "invalid OPP table in device tree\n"); - return ret; - } - - ret = devm_clk_bulk_get_all(&pdev->dev, &dpu_kms->clocks); - if (ret < 0) { - DPU_ERROR("failed to parse clocks, ret=%d\n", ret); - return ret; - } - dpu_kms->num_clocks = ret; + return -EINVAL; opp = dev_pm_opp_find_freq_floor(dev, &max_freq); if (!IS_ERR(opp)) @@ -1249,21 +1231,41 @@ static int dpu_kms_init(struct drm_device *ddev) pm_runtime_enable(&pdev->dev); dpu_kms->rpm_enabled = true; - priv->kms = &dpu_kms->base; - - irq = irq_of_parse_and_map(dpu_kms->pdev->dev.of_node, 0); - if (!irq) { - DPU_ERROR("failed to get irq\n"); - return -EINVAL; - } - dpu_kms->base.irq = irq; - return 0; } static int dpu_dev_probe(struct platform_device *pdev) { - return msm_drv_probe(&pdev->dev, dpu_kms_init, NULL); + struct device *dev = &pdev->dev; + struct dpu_kms *dpu_kms; + int irq; + int ret = 0; + + dpu_kms = devm_kzalloc(dev, sizeof(*dpu_kms), GFP_KERNEL); + if (!dpu_kms) + return -ENOMEM; + + ret = devm_pm_opp_set_clkname(dev, "core"); + if (ret) + return ret; + /* OPP table is optional */ + ret = devm_pm_opp_of_add_table(dev); + if (ret && ret != -ENODEV) + return dev_err_probe(dev, ret, "invalid OPP table in device tree\n"); + + ret = devm_clk_bulk_get_all(&pdev->dev, &dpu_kms->clocks); + if (ret < 0) + return dev_err_probe(dev, ret, "failed to parse clocks\n"); + + dpu_kms->num_clocks = ret; + + irq = platform_get_irq(pdev, 0); + if (irq < 0) + return dev_err_probe(dev, irq, "failed to get irq\n"); + + dpu_kms->base.irq = irq; + + return msm_drv_probe(&pdev->dev, dpu_kms_init, &dpu_kms->base); } static int dpu_dev_remove(struct platform_device *pdev)
To let the probe function bail early if any of the resources is unavailable, move resource allocattion from kms_init directly to the probe callback. While we are at it, replace irq_of_parse_and_map() with platform_get_irq(). Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> --- drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 62 +++++++++++++------------ 1 file changed, 32 insertions(+), 30 deletions(-)