aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Boyd <sboyd@codeaurora.org>2015-08-06 06:37:48 -0400
committerStephen Boyd <sboyd@codeaurora.org>2015-09-16 18:22:44 -0400
commit8108b23ca7270ff2c2b551f447e57436d534d23a (patch)
tree2b945e78666e35370178d65bf5ae4589eb5b5009
parent340029efdc83c7ba682dae731feff0d72a0ffd66 (diff)
clk: qcom: gdsc: Add GDSCs in msm8974 MMCC
Add the GDSC instances that exist as part of msm8974 MMCC block Signed-off-by: Stephen Boyd <sboyd@codeaurora.org> Signed-off-by: Rajendra Nayak <rnayak@codeaurora.org> Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
-rw-r--r--drivers/clk/qcom/Kconfig1
-rw-r--r--drivers/clk/qcom/mmcc-msm8974.c72
-rw-r--r--include/dt-bindings/clock/qcom,mmcc-msm8974.h8
3 files changed, 81 insertions, 0 deletions
diff --git a/drivers/clk/qcom/Kconfig b/drivers/clk/qcom/Kconfig
index a6fcb1ddb567..edab1724537b 100644
--- a/drivers/clk/qcom/Kconfig
+++ b/drivers/clk/qcom/Kconfig
@@ -98,6 +98,7 @@ config MSM_GCC_8974
98config MSM_MMCC_8974 98config MSM_MMCC_8974
99 tristate "MSM8974 Multimedia Clock Controller" 99 tristate "MSM8974 Multimedia Clock Controller"
100 select MSM_GCC_8974 100 select MSM_GCC_8974
101 select QCOM_GDSC
101 depends on COMMON_CLK_QCOM 102 depends on COMMON_CLK_QCOM
102 help 103 help
103 Support for the multimedia clock controller on msm8974 devices. 104 Support for the multimedia clock controller on msm8974 devices.
diff --git a/drivers/clk/qcom/mmcc-msm8974.c b/drivers/clk/qcom/mmcc-msm8974.c
index 197700e3b2c9..fe8320dc41db 100644
--- a/drivers/clk/qcom/mmcc-msm8974.c
+++ b/drivers/clk/qcom/mmcc-msm8974.c
@@ -31,6 +31,7 @@
31#include "clk-rcg.h" 31#include "clk-rcg.h"
32#include "clk-branch.h" 32#include "clk-branch.h"
33#include "reset.h" 33#include "reset.h"
34#include "gdsc.h"
34 35
35enum { 36enum {
36 P_XO, 37 P_XO,
@@ -2342,6 +2343,66 @@ static struct pll_config mmpll3_config = {
2342 .aux_output_mask = BIT(1), 2343 .aux_output_mask = BIT(1),
2343}; 2344};
2344 2345
2346static struct gdsc venus0_gdsc = {
2347 .gdscr = 0x1024,
2348 .cxcs = (unsigned int []){ 0x1028 },
2349 .cxc_count = 1,
2350 .resets = (unsigned int []){ VENUS0_RESET },
2351 .reset_count = 1,
2352 .pd = {
2353 .name = "venus0",
2354 },
2355 .pwrsts = PWRSTS_ON,
2356};
2357
2358static struct gdsc mdss_gdsc = {
2359 .gdscr = 0x2304,
2360 .cxcs = (unsigned int []){ 0x231c, 0x2320 },
2361 .cxc_count = 2,
2362 .pd = {
2363 .name = "mdss",
2364 },
2365 .pwrsts = PWRSTS_RET_ON,
2366};
2367
2368static struct gdsc camss_jpeg_gdsc = {
2369 .gdscr = 0x35a4,
2370 .cxcs = (unsigned int []){ 0x35a8, 0x35ac, 0x35b0 },
2371 .cxc_count = 3,
2372 .pd = {
2373 .name = "camss_jpeg",
2374 },
2375 .pwrsts = PWRSTS_OFF_ON,
2376};
2377
2378static struct gdsc camss_vfe_gdsc = {
2379 .gdscr = 0x36a4,
2380 .cxcs = (unsigned int []){ 0x36a8, 0x36ac, 0x3704, 0x3714, 0x36b0 },
2381 .cxc_count = 5,
2382 .pd = {
2383 .name = "camss_vfe",
2384 },
2385 .pwrsts = PWRSTS_OFF_ON,
2386};
2387
2388static struct gdsc oxili_gdsc = {
2389 .gdscr = 0x4024,
2390 .cxcs = (unsigned int []){ 0x4028 },
2391 .cxc_count = 1,
2392 .pd = {
2393 .name = "oxili",
2394 },
2395 .pwrsts = PWRSTS_OFF_ON,
2396};
2397
2398static struct gdsc oxilicx_gdsc = {
2399 .gdscr = 0x4034,
2400 .pd = {
2401 .name = "oxilicx",
2402 },
2403 .pwrsts = PWRSTS_OFF_ON,
2404};
2405
2345static struct clk_regmap *mmcc_msm8974_clocks[] = { 2406static struct clk_regmap *mmcc_msm8974_clocks[] = {
2346 [MMSS_AHB_CLK_SRC] = &mmss_ahb_clk_src.clkr, 2407 [MMSS_AHB_CLK_SRC] = &mmss_ahb_clk_src.clkr,
2347 [MMSS_AXI_CLK_SRC] = &mmss_axi_clk_src.clkr, 2408 [MMSS_AXI_CLK_SRC] = &mmss_axi_clk_src.clkr,
@@ -2518,6 +2579,15 @@ static const struct qcom_reset_map mmcc_msm8974_resets[] = {
2518 [OCMEMNOC_RESET] = { 0x50b0 }, 2579 [OCMEMNOC_RESET] = { 0x50b0 },
2519}; 2580};
2520 2581
2582static struct gdsc *mmcc_msm8974_gdscs[] = {
2583 [VENUS0_GDSC] = &venus0_gdsc,
2584 [MDSS_GDSC] = &mdss_gdsc,
2585 [CAMSS_JPEG_GDSC] = &camss_jpeg_gdsc,
2586 [CAMSS_VFE_GDSC] = &camss_vfe_gdsc,
2587 [OXILI_GDSC] = &oxili_gdsc,
2588 [OXILICX_GDSC] = &oxilicx_gdsc,
2589};
2590
2521static const struct regmap_config mmcc_msm8974_regmap_config = { 2591static const struct regmap_config mmcc_msm8974_regmap_config = {
2522 .reg_bits = 32, 2592 .reg_bits = 32,
2523 .reg_stride = 4, 2593 .reg_stride = 4,
@@ -2532,6 +2602,8 @@ static const struct qcom_cc_desc mmcc_msm8974_desc = {
2532 .num_clks = ARRAY_SIZE(mmcc_msm8974_clocks), 2602 .num_clks = ARRAY_SIZE(mmcc_msm8974_clocks),
2533 .resets = mmcc_msm8974_resets, 2603 .resets = mmcc_msm8974_resets,
2534 .num_resets = ARRAY_SIZE(mmcc_msm8974_resets), 2604 .num_resets = ARRAY_SIZE(mmcc_msm8974_resets),
2605 .gdscs = mmcc_msm8974_gdscs,
2606 .num_gdscs = ARRAY_SIZE(mmcc_msm8974_gdscs),
2535}; 2607};
2536 2608
2537static const struct of_device_id mmcc_msm8974_match_table[] = { 2609static const struct of_device_id mmcc_msm8974_match_table[] = {
diff --git a/include/dt-bindings/clock/qcom,mmcc-msm8974.h b/include/dt-bindings/clock/qcom,mmcc-msm8974.h
index 032ed87ef0f3..28651e54c9ae 100644
--- a/include/dt-bindings/clock/qcom,mmcc-msm8974.h
+++ b/include/dt-bindings/clock/qcom,mmcc-msm8974.h
@@ -158,4 +158,12 @@
158#define SPDM_RM_AXI 141 158#define SPDM_RM_AXI 141
159#define SPDM_RM_OCMEMNOC 142 159#define SPDM_RM_OCMEMNOC 142
160 160
161/* gdscs */
162#define VENUS0_GDSC 0
163#define MDSS_GDSC 1
164#define CAMSS_JPEG_GDSC 2
165#define CAMSS_VFE_GDSC 3
166#define OXILI_GDSC 4
167#define OXILICX_GDSC 5
168
161#endif 169#endif