On 2 September 2022 00:37:30 GMT+03:00, Abhinav Kumar <quic_abhinavk@xxxxxxxxxxx> 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@xxxxxxxxxx> > >With those two addressed, > >Reviewed-by: Abhinav Kumar <quic_abhinavk@xxxxxxxxxxx> >> --- >> 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) -- With best wishes Dmitry