drm/msm/mdp5: Add optional TBU and TBU_RT clocks
authorAngeloGioacchino Del Regno <kholk11@gmail.com>
Thu, 31 Oct 2019 10:43:56 +0000 (11:43 +0100)
committerRob Clark <robdclark@chromium.org>
Sat, 2 Nov 2019 17:20:41 +0000 (10:20 -0700)
Some SoCs, like MSM8956/8976 (and APQ variants), do feature these
clocks and we need to enable them in order to get both of the
hw (mdp5/rot) Translation Buffer Units (TBUs) to properly work.

Signed-off-by: AngeloGioacchino Del Regno <kholk11@gmail.com>
Signed-off-by: Rob Clark <robdclark@chromium.org>
drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.h

index 5476892..e43ecd4 100644 (file)
@@ -309,6 +309,10 @@ int mdp5_disable(struct mdp5_kms *mdp5_kms)
        mdp5_kms->enable_count--;
        WARN_ON(mdp5_kms->enable_count < 0);
 
+       if (mdp5_kms->tbu_rt_clk)
+               clk_disable_unprepare(mdp5_kms->tbu_rt_clk);
+       if (mdp5_kms->tbu_clk)
+               clk_disable_unprepare(mdp5_kms->tbu_clk);
        clk_disable_unprepare(mdp5_kms->ahb_clk);
        clk_disable_unprepare(mdp5_kms->axi_clk);
        clk_disable_unprepare(mdp5_kms->core_clk);
@@ -329,6 +333,10 @@ int mdp5_enable(struct mdp5_kms *mdp5_kms)
        clk_prepare_enable(mdp5_kms->core_clk);
        if (mdp5_kms->lut_clk)
                clk_prepare_enable(mdp5_kms->lut_clk);
+       if (mdp5_kms->tbu_clk)
+               clk_prepare_enable(mdp5_kms->tbu_clk);
+       if (mdp5_kms->tbu_rt_clk)
+               clk_prepare_enable(mdp5_kms->tbu_rt_clk);
 
        return 0;
 }
@@ -965,6 +973,8 @@ static int mdp5_init(struct platform_device *pdev, struct drm_device *dev)
 
        /* optional clocks: */
        get_clk(pdev, &mdp5_kms->lut_clk, "lut", false);
+       get_clk(pdev, &mdp5_kms->tbu_clk, "tbu", false);
+       get_clk(pdev, &mdp5_kms->tbu_rt_clk, "tbu_rt", false);
 
        /* we need to set a default rate before enabling.  Set a safe
         * rate first, then figure out hw revision, and then set a
index d1bf4fd..1288667 100644 (file)
@@ -53,6 +53,8 @@ struct mdp5_kms {
        struct clk *ahb_clk;
        struct clk *core_clk;
        struct clk *lut_clk;
+       struct clk *tbu_clk;
+       struct clk *tbu_rt_clk;
        struct clk *vsync_clk;
 
        /*