aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinaro CI <ci_notify@linaro.org>2019-01-17 15:55:43 +0000
committerLinaro CI <ci_notify@linaro.org>2019-01-17 15:55:43 +0000
commitb4e5ac76512dacbffe9a7ed7f124e83ad55c20db (patch)
tree4e446b1b4f845c8ee8d1b331a38ae42ed47db483
parentc04d703a4de3fc36fdc3539039bc6f3b5a4b2f9d (diff)
parentb9289d06e75a9cb17a53deec7a2fc10c0be39ba7 (diff)
Merge remote-tracking branch 'qcs404-cpufreq/qcomlt/qcs404-cpufreq' into integration-linux-qcomltintegration-linux-qcomlt-20190117-181721-v5.0-rc2-193-gb4e5ac76512d
-rw-r--r--drivers/clk/qcom/apcs-msm8916.c33
-rw-r--r--drivers/clk/qcom/gcc-qcs404.c6
-rw-r--r--drivers/clk/qcom/hfpll.c19
-rw-r--r--drivers/mailbox/qcom-apcs-ipc-mailbox.c21
4 files changed, 61 insertions, 18 deletions
diff --git a/drivers/clk/qcom/apcs-msm8916.c b/drivers/clk/qcom/apcs-msm8916.c
index a6c89a310b18..2453242b9dc1 100644
--- a/drivers/clk/qcom/apcs-msm8916.c
+++ b/drivers/clk/qcom/apcs-msm8916.c
@@ -19,7 +19,7 @@
static const u32 gpll0_a53cc_map[] = { 4, 5 };
-static const char * const gpll0_a53cc[] = {
+static const char *gpll0_a53cc[] = {
"gpll0_vote",
"a53pll",
};
@@ -50,17 +50,39 @@ static int qcom_apcs_msm8916_clk_probe(struct platform_device *pdev)
struct regmap *regmap;
struct clk_init_data init = { };
int ret = -ENODEV;
+ struct clk_bulk_data pclks[] = {
+ [0] = { .id = "aux", .clk = NULL },
+ [1] = { .id = "pll", .clk = NULL },
+ };
regmap = dev_get_regmap(parent, NULL);
if (!regmap) {
dev_err(dev, "failed to get regmap: %d\n", ret);
return ret;
}
-
a53cc = devm_kzalloc(dev, sizeof(*a53cc), GFP_KERNEL);
if (!a53cc)
return -ENOMEM;
+ /* check if the parent names are present in the device tree */
+ ret = devm_clk_bulk_get(parent, ARRAY_SIZE(pclks), pclks);
+ if (ret == -EPROBE_DEFER)
+ return ret;
+
+ if (!ret) {
+ gpll0_a53cc[0] = __clk_get_name(pclks[0].clk);
+ gpll0_a53cc[1] = __clk_get_name(pclks[1].clk);
+ a53cc->pclk = pclks[1].clk;
+ } else {
+ /* support old binding where only pll was explicitily defined */
+ a53cc->pclk = devm_clk_get(parent, NULL);
+ if (IS_ERR(a53cc->pclk)) {
+ ret = PTR_ERR(a53cc->pclk);
+ dev_err(dev, "failed to get clk: %d\n", ret);
+ return ret;
+ }
+ }
+
init.name = "a53mux";
init.parent_names = gpll0_a53cc;
init.num_parents = ARRAY_SIZE(gpll0_a53cc);
@@ -76,13 +98,6 @@ static int qcom_apcs_msm8916_clk_probe(struct platform_device *pdev)
a53cc->src_shift = 8;
a53cc->parent_map = gpll0_a53cc_map;
- a53cc->pclk = devm_clk_get(parent, NULL);
- if (IS_ERR(a53cc->pclk)) {
- ret = PTR_ERR(a53cc->pclk);
- dev_err(dev, "failed to get clk: %d\n", ret);
- return ret;
- }
-
a53cc->clk_nb.notifier_call = a53cc_notifier_cb;
ret = clk_notifier_register(a53cc->pclk, &a53cc->clk_nb);
if (ret) {
diff --git a/drivers/clk/qcom/gcc-qcs404.c b/drivers/clk/qcom/gcc-qcs404.c
index 64da032bb9ed..833436acf886 100644
--- a/drivers/clk/qcom/gcc-qcs404.c
+++ b/drivers/clk/qcom/gcc-qcs404.c
@@ -304,10 +304,16 @@ static struct clk_alpha_pll gpll0_out_main = {
},
};
+static const struct pll_vco gpll0_ao_out_vco[] = {
+ { 800000000, 800000000, 0 },
+};
+
static struct clk_alpha_pll gpll0_ao_out_main = {
.offset = 0x21000,
.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
.flags = SUPPORTS_FSM_MODE,
+ .vco_table = gpll0_ao_out_vco,
+ .num_vco = ARRAY_SIZE(gpll0_ao_out_vco),
.clkr = {
.enable_reg = 0x45000,
.enable_mask = BIT(0),
diff --git a/drivers/clk/qcom/hfpll.c b/drivers/clk/qcom/hfpll.c
index a6de7101430c..9d92f5df695b 100644
--- a/drivers/clk/qcom/hfpll.c
+++ b/drivers/clk/qcom/hfpll.c
@@ -52,10 +52,13 @@ static int qcom_hfpll_probe(struct platform_device *pdev)
void __iomem *base;
struct regmap *regmap;
struct clk_hfpll *h;
+ struct clk *pclk;
+ int ret;
struct clk_init_data init = {
.parent_names = (const char *[]){ "xo" },
.num_parents = 1,
.ops = &clk_ops_hfpll,
+ .flags = CLK_IGNORE_UNUSED,
};
h = devm_kzalloc(dev, sizeof(*h), GFP_KERNEL);
@@ -75,11 +78,25 @@ static int qcom_hfpll_probe(struct platform_device *pdev)
0, &init.name))
return -ENODEV;
+ /* get parent clock from device tree (optional) */
+ pclk = devm_clk_get(dev, "xo");
+ if (!IS_ERR(pclk))
+ init.parent_names = (const char *[]){ __clk_get_name(pclk) };
+ else if (PTR_ERR(pclk) == -EPROBE_DEFER)
+ return -EPROBE_DEFER;
+
h->d = &hdata;
h->clkr.hw.init = &init;
spin_lock_init(&h->lock);
- return devm_clk_register_regmap(&pdev->dev, &h->clkr);
+ ret = devm_clk_register_regmap(dev, &h->clkr);
+ if (ret) {
+ dev_err(dev, "failed to register regmap clock: %d\n", ret);
+ return ret;
+ }
+
+ return devm_of_clk_add_hw_provider(dev, of_clk_hw_simple_get,
+ &h->clkr.hw);
}
static struct platform_driver qcom_hfpll_driver = {
diff --git a/drivers/mailbox/qcom-apcs-ipc-mailbox.c b/drivers/mailbox/qcom-apcs-ipc-mailbox.c
index 3cf2937be149..7a1b4ff9c86d 100644
--- a/drivers/mailbox/qcom-apcs-ipc-mailbox.c
+++ b/drivers/mailbox/qcom-apcs-ipc-mailbox.c
@@ -97,16 +97,21 @@ static int qcom_apcs_ipc_probe(struct platform_device *pdev)
return ret;
}
- if (of_device_is_compatible(np, "qcom,msm8916-apcs-kpss-global")) {
- apcs->clk = platform_device_register_data(&pdev->dev,
- "qcom-apcs-msm8916-clk",
- -1, NULL, 0);
- if (IS_ERR(apcs->clk))
- dev_err(&pdev->dev, "failed to register APCS clk\n");
- }
-
platform_set_drvdata(pdev, apcs);
+ if (of_device_is_compatible(np, "qcom,msm8916-apcs-kpss-global") ||
+ of_device_is_compatible(np, "qcom,qcs404-apcs-apps-global"))
+ goto register_clk;
+
+ return 0;
+
+register_clk:
+ apcs->clk = platform_device_register_data(&pdev->dev,
+ "qcom-apcs-msm8916-clk",
+ PLATFORM_DEVID_NONE, NULL, 0);
+ if (IS_ERR(apcs->clk))
+ dev_err(&pdev->dev, "failed to register APCS clk\n");
+
return 0;
}