Commit 73b65b19 authored by Archit Taneja's avatar Archit Taneja Committed by Rob Clark

drm/msm: Set CLK_IGNORE_UNUSED flag for PLL clocks

The DSI/HDMI PLLs in MSM require resources like interface clocks, power
domains to be enabled before we can access their registers.

The clock framework doesn't have a mechanism at the moment where we can
tie such resources to a clock, so we make sure that the KMS driver enables
these resources whenever a PLL is expected to be in use.

One place where we can't ensure the resource dependencies are met is when
the clock framework tries to disable unused clocks. The KMS driver doesn't
know when the clock framework calls the is_enabled clk_op, and hence can't
enable interface clocks/power domains beforehand.

We set the CLK_IGNORE_UNUSED flag for PLL clocks for now. This needs to be
revisited, since bootloaders can enable display, and we would want to
disable the PLL clocks if there isn't a display driver using them.

Cc: Stephen Boyd <sboyd@codeaurora.org>
Signed-off-by: default avatarArchit Taneja <architt@codeaurora.org>
Acked-by: default avatarStephen Boyd <sboyd@codeaurora.org>
Signed-off-by: default avatarRob Clark <robdclark@gmail.com>
parent 8d23ea40
...@@ -521,6 +521,7 @@ static int pll_28nm_register(struct dsi_pll_28nm *pll_28nm) ...@@ -521,6 +521,7 @@ static int pll_28nm_register(struct dsi_pll_28nm *pll_28nm)
.parent_names = (const char *[]){ "xo" }, .parent_names = (const char *[]){ "xo" },
.num_parents = 1, .num_parents = 1,
.name = vco_name, .name = vco_name,
.flags = CLK_IGNORE_UNUSED,
.ops = &clk_ops_dsi_pll_28nm_vco, .ops = &clk_ops_dsi_pll_28nm_vco,
}; };
struct device *dev = &pll_28nm->pdev->dev; struct device *dev = &pll_28nm->pdev->dev;
......
...@@ -412,6 +412,7 @@ static int pll_28nm_register(struct dsi_pll_28nm *pll_28nm) ...@@ -412,6 +412,7 @@ static int pll_28nm_register(struct dsi_pll_28nm *pll_28nm)
struct clk_init_data vco_init = { struct clk_init_data vco_init = {
.parent_names = (const char *[]){ "pxo" }, .parent_names = (const char *[]){ "pxo" },
.num_parents = 1, .num_parents = 1,
.flags = CLK_IGNORE_UNUSED,
.ops = &clk_ops_dsi_pll_28nm_vco, .ops = &clk_ops_dsi_pll_28nm_vco,
}; };
struct device *dev = &pll_28nm->pdev->dev; struct device *dev = &pll_28nm->pdev->dev;
......
...@@ -702,6 +702,7 @@ static struct clk_init_data pll_init = { ...@@ -702,6 +702,7 @@ static struct clk_init_data pll_init = {
.ops = &hdmi_8996_pll_ops, .ops = &hdmi_8996_pll_ops,
.parent_names = hdmi_pll_parents, .parent_names = hdmi_pll_parents,
.num_parents = ARRAY_SIZE(hdmi_pll_parents), .num_parents = ARRAY_SIZE(hdmi_pll_parents),
.flags = CLK_IGNORE_UNUSED,
}; };
int msm_hdmi_pll_8996_init(struct platform_device *pdev) int msm_hdmi_pll_8996_init(struct platform_device *pdev)
......
...@@ -424,6 +424,7 @@ static struct clk_init_data pll_init = { ...@@ -424,6 +424,7 @@ static struct clk_init_data pll_init = {
.ops = &hdmi_pll_ops, .ops = &hdmi_pll_ops,
.parent_names = hdmi_pll_parents, .parent_names = hdmi_pll_parents,
.num_parents = ARRAY_SIZE(hdmi_pll_parents), .num_parents = ARRAY_SIZE(hdmi_pll_parents),
.flags = CLK_IGNORE_UNUSED,
}; };
int msm_hdmi_pll_8960_init(struct platform_device *pdev) int msm_hdmi_pll_8960_init(struct platform_device *pdev)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment