[Freedreno] [PATCH v2 1/4] drm/msm: unify MDSS drivers
Stephen Boyd
swboyd at chromium.org
Thu Mar 3 22:50:49 UTC 2022
Quoting Dmitry Baryshkov (2022-01-19 14:40:02)
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c b/drivers/gpu/drm/msm/msm_mdss.c
> similarity index 58%
> rename from drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c
> rename to drivers/gpu/drm/msm/msm_mdss.c
> index 9f5cc7f9e9a9..f5429eb0ae52 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c
> +++ b/drivers/gpu/drm/msm/msm_mdss.c
> @@ -188,22 +182,64 @@ static void dpu_mdss_destroy(struct msm_mdss *mdss)
>
> pm_runtime_suspend(mdss->dev);
> pm_runtime_disable(mdss->dev);
> - _dpu_mdss_irq_domain_fini(dpu_mdss);
> + irq_domain_remove(dpu_mdss->irq_controller.domain);
> + dpu_mdss->irq_controller.domain = NULL;
> irq = platform_get_irq(pdev, 0);
> irq_set_chained_handler_and_data(irq, NULL, NULL);
> -
> - if (dpu_mdss->mmio)
> - devm_iounmap(&pdev->dev, dpu_mdss->mmio);
> - dpu_mdss->mmio = NULL;
> }
>
> static const struct msm_mdss_funcs mdss_funcs = {
> - .enable = dpu_mdss_enable,
> - .disable = dpu_mdss_disable,
> - .destroy = dpu_mdss_destroy,
> + .enable = msm_mdss_enable,
> + .disable = msm_mdss_disable,
> + .destroy = msm_mdss_destroy,
> };
>
> -int dpu_mdss_init(struct platform_device *pdev)
> +/*
> + * MDP5 MDSS uses at most three specified clocks.
> + */
> +#define MDP5_MDSS_NUM_CLOCKS 3
> +int mdp5_mdss_parse_clock(struct platform_device *pdev, struct clk_bulk_data **clocks)
static?
> +{
> + struct clk_bulk_data *bulk;
> + struct clk *clk;
> + int num_clocks = 0;
> +
> + if (!pdev)
> + return -EINVAL;
> +
> + bulk = devm_kcalloc(&pdev->dev, MDP5_MDSS_NUM_CLOCKS, sizeof(struct clk_bulk_data), GFP_KERNEL);
> + if (!bulk)
> + return -ENOMEM;
> +
> + /* We ignore all the errors except deferral: typically they mean that the clock is not provided in the dts. */
> + clk = msm_clk_get(pdev, "iface");
> + if (!IS_ERR(clk)) {
> + bulk[num_clocks].id = "iface";
> + bulk[num_clocks].clk = clk;
> + num_clocks++;
> + } else if (clk == ERR_PTR(-EPROBE_DEFER))
> + return -EPROBE_DEFER;
> +
> + clk = msm_clk_get(pdev, "bus");
> + if (!IS_ERR(clk)) {
> + bulk[num_clocks].id = "bus";
> + bulk[num_clocks].clk = clk;
> + num_clocks++;
> + } else if (clk == ERR_PTR(-EPROBE_DEFER))
> + return -EPROBE_DEFER;
> +
> + clk = msm_clk_get(pdev, "vsync");
> + if (!IS_ERR(clk)) {
> + bulk[num_clocks].id = "vsync";
> + bulk[num_clocks].clk = clk;
> + num_clocks++;
> + } else if (clk == ERR_PTR(-EPROBE_DEFER))
> + return -EPROBE_DEFER;
> +
> + return num_clocks;
> +}
> +
> +int msm_mdss_init(struct platform_device *pdev, bool mdp5)
Maybe is_mdp5 so the if reads simpler.
> {
> struct msm_drm_private *priv = platform_get_drvdata(pdev);
> struct dpu_mdss *dpu_mdss;
> @@ -220,27 +256,28 @@ int dpu_mdss_init(struct platform_device *pdev)
>
> DRM_DEBUG("mapped mdss address space @%pK\n", dpu_mdss->mmio);
>
> - ret = msm_parse_clock(pdev, &dpu_mdss->clocks);
> + if (mdp5)
> + ret = mdp5_mdss_parse_clock(pdev, &dpu_mdss->clocks);
> + else
> + ret = msm_parse_clock(pdev, &dpu_mdss->clocks);
> if (ret < 0) {
> - DPU_ERROR("failed to parse clocks, ret=%d\n", ret);
> - goto clk_parse_err;
> + DRM_ERROR("failed to parse clocks, ret=%d\n", ret);
> + return ret;
> }
> dpu_mdss->num_clocks = ret;
More information about the Freedreno
mailing list