-
-
Notifications
You must be signed in to change notification settings - Fork 274
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add NSS Acceleration Support on Qualcomm devices
- Loading branch information
Showing
54 changed files
with
12,395 additions
and
0 deletions.
There are no files selected for viewing
311 changes: 311 additions & 0 deletions
311
...mmax/patches-6.1/0170-clk-qcom-ipq8074-Support-added-for-necessary-clocks-and-reset.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,311 @@ | ||
From 6504bc9edeb1a2a54d813f4bb5d0267e7bf827f9 Mon Sep 17 00:00:00 2001 | ||
From: Praveenkumar I <[email protected]> | ||
Date: Thu, 6 Feb 2020 17:35:42 +0530 | ||
Subject: [PATCH 4/8] clk: ipq8074: Support added for necessary clocks and | ||
reset | ||
|
||
Change-Id: I21a76a44185f766e9b6dcba274392ea8e599718b | ||
Signed-off-by: Praveenkumar I <[email protected]> | ||
Signed-off-by: Rajkumar Ayyasamy <[email protected]> | ||
--- | ||
drivers/clk/qcom/gcc-ipq8074.c | 238 ++++++++++++++++++- | ||
include/dt-bindings/clock/qcom,gcc-ipq8074.h | 35 ++- | ||
2 files changed, 258 insertions(+), 15 deletions(-) | ||
|
||
--- a/drivers/clk/qcom/gcc-ipq8074.c | ||
+++ b/drivers/clk/qcom/gcc-ipq8074.c | ||
@@ -49,6 +49,22 @@ enum { | ||
P_UNIPHY2_TX, | ||
}; | ||
|
||
+static const char * const gcc_xo_gpll4_gpll0_gpll6_gpll0_div2[] = { | ||
+ "xo", | ||
+ "gpll4", | ||
+ "gpll0", | ||
+ "gpll6", | ||
+ "gpll0_out_main_div2", | ||
+}; | ||
+ | ||
+static const struct parent_map gcc_xo_gpll4_gpll0_gpll6_gpll0_div2_map[] = { | ||
+ { P_XO, 0 }, | ||
+ { P_GPLL4, 1 }, | ||
+ { P_GPLL0, 2 }, | ||
+ { P_GPLL6, 3 }, | ||
+ { P_GPLL0_DIV2, 4 }, | ||
+}; | ||
+ | ||
static struct clk_alpha_pll gpll0_main = { | ||
.offset = 0x21000, | ||
.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], | ||
@@ -630,6 +646,12 @@ static const struct freq_tbl ftbl_pcie_a | ||
{ } | ||
}; | ||
|
||
+struct freq_tbl ftbl_pcie_rchng_clk_src[] = { | ||
+ F(19200000, P_XO, 1, 0, 0), | ||
+ F(100000000, P_GPLL0, 8, 0, 0), | ||
+ { } | ||
+}; | ||
+ | ||
static struct clk_rcg2 pcie0_axi_clk_src = { | ||
.cmd_rcgr = 0x75054, | ||
.freq_tbl = ftbl_pcie_axi_clk_src, | ||
@@ -2030,6 +2052,78 @@ static struct clk_rcg2 gp3_clk_src = { | ||
}, | ||
}; | ||
|
||
+struct freq_tbl ftbl_qdss_tsctr_clk_src[] = { | ||
+ F(160000000, P_GPLL0_DIV2, 2.5, 0, 0), | ||
+ F(320000000, P_GPLL0, 2.5, 0, 0), | ||
+ F(600000000, P_GPLL6, 2, 0, 0), | ||
+ { } | ||
+}; | ||
+ | ||
+struct clk_rcg2 qdss_tsctr_clk_src = { | ||
+ .cmd_rcgr = 0x29064, | ||
+ .freq_tbl = ftbl_qdss_tsctr_clk_src, | ||
+ .hid_width = 5, | ||
+ .parent_map = gcc_xo_gpll4_gpll0_gpll6_gpll0_div2_map, | ||
+ .clkr.hw.init = &(struct clk_init_data){ | ||
+ .name = "qdss_tsctr_clk_src", | ||
+ .parent_names = gcc_xo_gpll4_gpll0_gpll6_gpll0_div2, | ||
+ .num_parents = 5, | ||
+ .ops = &clk_rcg2_ops, | ||
+ }, | ||
+}; | ||
+ | ||
+static struct clk_fixed_factor qdss_dap_sync_clk_src = { | ||
+ .mult = 1, | ||
+ .div = 4, | ||
+ .hw.init = &(struct clk_init_data){ | ||
+ .name = "qdss_dap_sync_clk_src", | ||
+ .parent_names = (const char *[]){ | ||
+ "qdss_tsctr_clk_src" | ||
+ }, | ||
+ .num_parents = 1, | ||
+ .ops = &clk_fixed_factor_ops, | ||
+ }, | ||
+}; | ||
+ | ||
+struct freq_tbl ftbl_qdss_at_clk_src[] = { | ||
+ F(66670000, P_GPLL0_DIV2, 6, 0, 0), | ||
+ F(240000000, P_GPLL6, 6, 0, 0), | ||
+ { } | ||
+}; | ||
+ | ||
+struct clk_rcg2 qdss_at_clk_src = { | ||
+ .cmd_rcgr = 0x2900c, | ||
+ .freq_tbl = ftbl_qdss_at_clk_src, | ||
+ .hid_width = 5, | ||
+ .parent_map = gcc_xo_gpll4_gpll0_gpll6_gpll0_div2_map, | ||
+ .clkr.hw.init = &(struct clk_init_data){ | ||
+ .name = "qdss_at_clk_src", | ||
+ .parent_names = gcc_xo_gpll4_gpll0_gpll6_gpll0_div2, | ||
+ .num_parents = 5, | ||
+ .ops = &clk_rcg2_ops, | ||
+ }, | ||
+}; | ||
+ | ||
+ | ||
+struct freq_tbl ftbl_adss_pwm_clk_src[] = { | ||
+ F(19200000, P_XO, 1, 0, 0), | ||
+ F(200000000, P_GPLL0, 4, 0, 0), | ||
+ { } | ||
+}; | ||
+ | ||
+struct clk_rcg2 adss_pwm_clk_src = { | ||
+ .cmd_rcgr = 0x1c008, | ||
+ .freq_tbl = ftbl_adss_pwm_clk_src, | ||
+ .hid_width = 5, | ||
+ .parent_map = gcc_xo_gpll0_map, | ||
+ .clkr.hw.init = &(struct clk_init_data){ | ||
+ .name = "adss_pwm_clk_src", | ||
+ .parent_data = gcc_xo_gpll0, | ||
+ .num_parents = 2, | ||
+ .ops = &clk_rcg2_ops, | ||
+ }, | ||
+}; | ||
+ | ||
static struct clk_branch gcc_blsp1_ahb_clk = { | ||
.halt_reg = 0x01008, | ||
.clkr = { | ||
@@ -4225,13 +4319,7 @@ static struct clk_branch gcc_gp3_clk = { | ||
}, | ||
}; | ||
|
||
-static const struct freq_tbl ftbl_pcie_rchng_clk_src[] = { | ||
- F(19200000, P_XO, 1, 0, 0), | ||
- F(100000000, P_GPLL0, 8, 0, 0), | ||
- { } | ||
-}; | ||
- | ||
-static struct clk_rcg2 pcie0_rchng_clk_src = { | ||
+struct clk_rcg2 pcie0_rchng_clk_src = { | ||
.cmd_rcgr = 0x75070, | ||
.freq_tbl = ftbl_pcie_rchng_clk_src, | ||
.hid_width = 5, | ||
@@ -4323,6 +4411,114 @@ static const struct alpha_pll_config nss | ||
.alpha_en_mask = BIT(24), | ||
}; | ||
|
||
+static struct clk_branch gcc_snoc_bus_timeout2_ahb_clk = { | ||
+ .halt_reg = 0x4700c, | ||
+ .halt_bit = 31, | ||
+ .clkr = { | ||
+ .enable_reg = 0x4700c, | ||
+ .enable_mask = BIT(0), | ||
+ .hw.init = &(struct clk_init_data){ | ||
+ .name = "gcc_snoc_bus_timeout2_ahb_clk", | ||
+ .parent_names = (const char *[]){ | ||
+ "usb0_master_clk_src" | ||
+ }, | ||
+ .num_parents = 1, | ||
+ .flags = CLK_SET_RATE_PARENT, | ||
+ .ops = &clk_branch2_ops, | ||
+ }, | ||
+ }, | ||
+}; | ||
+ | ||
+static struct clk_branch gcc_snoc_bus_timeout3_ahb_clk = { | ||
+ .halt_reg = 0x47014, | ||
+ .halt_bit = 31, | ||
+ .clkr = { | ||
+ .enable_reg = 0x47014, | ||
+ .enable_mask = BIT(0), | ||
+ .hw.init = &(struct clk_init_data){ | ||
+ .name = "gcc_snoc_bus_timeout3_ahb_clk", | ||
+ .parent_names = (const char *[]){ | ||
+ "usb1_master_clk_src" | ||
+ }, | ||
+ .num_parents = 1, | ||
+ .flags = CLK_SET_RATE_PARENT, | ||
+ .ops = &clk_branch2_ops, | ||
+ }, | ||
+ }, | ||
+}; | ||
+ | ||
+static struct clk_branch gcc_dcc_clk = { | ||
+ .halt_reg = 0x77004, | ||
+ .halt_bit = 31, | ||
+ .clkr = { | ||
+ .enable_reg = 0x77004, | ||
+ .enable_mask = BIT(0), | ||
+ .hw.init = &(struct clk_init_data){ | ||
+ .name = "gcc_dcc_clk", | ||
+ .parent_names = (const char *[]){ | ||
+ "pcnoc_clk_src" | ||
+ }, | ||
+ .num_parents = 1, | ||
+ .flags = CLK_SET_RATE_PARENT, | ||
+ .ops = &clk_branch2_ops, | ||
+ }, | ||
+ }, | ||
+}; | ||
+ | ||
+static struct clk_branch gcc_qdss_at_clk = { | ||
+ .halt_reg = 0x29024, | ||
+ .halt_bit = 31, | ||
+ .clkr = { | ||
+ .enable_reg = 0x29024, | ||
+ .enable_mask = BIT(0), | ||
+ .hw.init = &(struct clk_init_data){ | ||
+ .name = "gcc_qdss_at_clk", | ||
+ .parent_names = (const char *[]){ | ||
+ "qdss_at_clk_src" | ||
+ }, | ||
+ .num_parents = 1, | ||
+ .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, | ||
+ .ops = &clk_branch2_ops, | ||
+ }, | ||
+ }, | ||
+}; | ||
+ | ||
+static struct clk_branch gcc_qdss_dap_clk = { | ||
+ .halt_reg = 0x29084, | ||
+ .halt_bit = 31, | ||
+ .clkr = { | ||
+ .enable_reg = 0x29084, | ||
+ .enable_mask = BIT(0), | ||
+ .hw.init = &(struct clk_init_data){ | ||
+ .name = "gcc_qdss_dap_clk", | ||
+ .parent_names = (const char *[]){ | ||
+ "qdss_dap_sync_clk_src" | ||
+ }, | ||
+ .num_parents = 1, | ||
+ .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, | ||
+ .ops = &clk_branch2_ops, | ||
+ }, | ||
+ }, | ||
+}; | ||
+ | ||
+static struct clk_branch gcc_adss_pwm_clk = { | ||
+ .halt_reg = 0x1c020, | ||
+ .halt_bit = 31, | ||
+ .clkr = { | ||
+ .enable_reg = 0x1c020, | ||
+ .enable_mask = BIT(0), | ||
+ .hw.init = &(struct clk_init_data){ | ||
+ .name = "gcc_adss_pwm_clk", | ||
+ .parent_names = (const char *[]){ | ||
+ "adss_pwm_clk_src" | ||
+ }, | ||
+ .num_parents = 1, | ||
+ .flags = CLK_SET_RATE_PARENT, | ||
+ .ops = &clk_branch2_ops, | ||
+ }, | ||
+ }, | ||
+}; | ||
+ | ||
static struct clk_hw *gcc_ipq8074_hws[] = { | ||
&gpll0_out_main_div2.hw, | ||
&gpll6_out_main_div2.hw, | ||
@@ -4331,6 +4527,7 @@ static struct clk_hw *gcc_ipq8074_hws[] | ||
&gcc_xo_div4_clk_src.hw, | ||
&nss_noc_clk_src.hw, | ||
&nss_ppe_cdiv_clk_src.hw, | ||
+ &qdss_dap_sync_clk_src.hw, | ||
}; | ||
|
||
static struct clk_regmap *gcc_ipq8074_clks[] = { | ||
@@ -4562,6 +4759,15 @@ static struct clk_regmap *gcc_ipq8074_cl | ||
[GCC_PCIE0_RCHNG_CLK] = &gcc_pcie0_rchng_clk.clkr, | ||
[GCC_PCIE0_AXI_S_BRIDGE_CLK] = &gcc_pcie0_axi_s_bridge_clk.clkr, | ||
[GCC_CRYPTO_PPE_CLK] = &gcc_crypto_ppe_clk.clkr, | ||
+ [GCC_SNOC_BUS_TIMEOUT2_AHB_CLK] = &gcc_snoc_bus_timeout2_ahb_clk.clkr, | ||
+ [GCC_SNOC_BUS_TIMEOUT3_AHB_CLK] = &gcc_snoc_bus_timeout3_ahb_clk.clkr, | ||
+ [GCC_DCC_CLK] = &gcc_dcc_clk.clkr, | ||
+ [QDSS_TSCTR_CLK_SRC] = &qdss_tsctr_clk_src.clkr, | ||
+ [QDSS_AT_CLK_SRC] = &qdss_at_clk_src.clkr, | ||
+ [GCC_QDSS_AT_CLK] = &gcc_qdss_at_clk.clkr, | ||
+ [GCC_QDSS_DAP_CLK] = &gcc_qdss_dap_clk.clkr, | ||
+ [ADSS_PWM_CLK_SRC] = &adss_pwm_clk_src.clkr, | ||
+ [GCC_ADSS_PWM_CLK] = &gcc_adss_pwm_clk.clkr, | ||
}; | ||
|
||
static const struct qcom_reset_map gcc_ipq8074_resets[] = { | ||
--- a/include/dt-bindings/clock/qcom,gcc-ipq8074.h | ||
+++ b/include/dt-bindings/clock/qcom,gcc-ipq8074.h | ||
@@ -230,10 +230,19 @@ | ||
#define GCC_GP1_CLK 221 | ||
#define GCC_GP2_CLK 222 | ||
#define GCC_GP3_CLK 223 | ||
-#define GCC_PCIE0_AXI_S_BRIDGE_CLK 224 | ||
-#define GCC_PCIE0_RCHNG_CLK_SRC 225 | ||
-#define GCC_PCIE0_RCHNG_CLK 226 | ||
-#define GCC_CRYPTO_PPE_CLK 227 | ||
+#define GCC_CRYPTO_PPE_CLK 224 | ||
+#define GCC_PCIE0_RCHNG_CLK_SRC 225 | ||
+#define GCC_PCIE0_RCHNG_CLK 226 | ||
+#define GCC_PCIE0_AXI_S_BRIDGE_CLK 227 | ||
+#define GCC_SNOC_BUS_TIMEOUT2_AHB_CLK 228 | ||
+#define GCC_SNOC_BUS_TIMEOUT3_AHB_CLK 229 | ||
+#define GCC_DCC_CLK 230 | ||
+#define ADSS_PWM_CLK_SRC 231 | ||
+#define GCC_ADSS_PWM_CLK 232 | ||
+#define QDSS_TSCTR_CLK_SRC 233 | ||
+#define QDSS_AT_CLK_SRC 234 | ||
+#define GCC_QDSS_AT_CLK 235 | ||
+#define GCC_QDSS_DAP_CLK 236 | ||
|
||
#define GCC_BLSP1_BCR 0 | ||
#define GCC_BLSP1_QUP1_BCR 1 |
44 changes: 44 additions & 0 deletions
44
...lcommax/patches-6.1/0171-1-clk-qcom-ipq8074-Fix-gcc_snoc_bus_timeout_ahb_clk-offset.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
From 462aa0c53397ec5bf78e3e7f68aa8a3ca300f4ba Mon Sep 17 00:00:00 2001 | ||
From: Selvam Sathappan Periakaruppan <[email protected]> | ||
Date: Tue, 24 Mar 2020 19:09:38 +0530 | ||
Subject: [PATCH 5/8] clk: qcom: ipq8074: Fix gcc_snoc_bus_timeout_ahb_clk | ||
offset | ||
|
||
By default, the ipq8074 V2 clks are provided in the gcc driver. | ||
Updating the gcc_snoc_bus_timeout_ahb_clk offsets also as needed | ||
in ipq8074 V2. | ||
|
||
Change-Id: I5a6e98d002f5c3354a804e55dd9ebb1f83f7f974 | ||
Signed-off-by: Selvam Sathappan Periakaruppan <[email protected]> | ||
--- | ||
drivers/clk/qcom/gcc-ipq8074.c | 8 ++++---- | ||
1 file changed, 4 insertions(+), 4 deletions(-) | ||
|
||
--- a/drivers/clk/qcom/gcc-ipq8074.c | ||
+++ b/drivers/clk/qcom/gcc-ipq8074.c | ||
@@ -4412,10 +4412,10 @@ static const struct alpha_pll_config nss | ||
}; | ||
|
||
static struct clk_branch gcc_snoc_bus_timeout2_ahb_clk = { | ||
- .halt_reg = 0x4700c, | ||
+ .halt_reg = 0x47014, | ||
.halt_bit = 31, | ||
.clkr = { | ||
- .enable_reg = 0x4700c, | ||
+ .enable_reg = 0x47014, | ||
.enable_mask = BIT(0), | ||
.hw.init = &(struct clk_init_data){ | ||
.name = "gcc_snoc_bus_timeout2_ahb_clk", | ||
@@ -4430,10 +4430,10 @@ static struct clk_branch gcc_snoc_bus_ti | ||
}; | ||
|
||
static struct clk_branch gcc_snoc_bus_timeout3_ahb_clk = { | ||
- .halt_reg = 0x47014, | ||
+ .halt_reg = 0x4701C, | ||
.halt_bit = 31, | ||
.clkr = { | ||
- .enable_reg = 0x47014, | ||
+ .enable_reg = 0x4701C, | ||
.enable_mask = BIT(0), | ||
.hw.init = &(struct clk_init_data){ | ||
.name = "gcc_snoc_bus_timeout3_ahb_clk", |
41 changes: 41 additions & 0 deletions
41
...nux/qualcommax/patches-6.1/0171-2-clk-qcom-ipq8074-Fix-gcc_blsp1_ahb_clk-properties.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
From 52315bec6ed633b6a71f28b746029602f8bd70b9 Mon Sep 17 00:00:00 2001 | ||
From: Balaji Prakash J <[email protected]> | ||
Date: Wed, 22 Apr 2020 20:35:30 +0530 | ||
Subject: [PATCH] clk: ipq8074: fix gcc_blsp1_ahb_clk properties | ||
|
||
All the voting enabled clocks does not support the enable | ||
from CBCR register. So, updated gcc_blsp1_ahb_clk enable | ||
register and mask to enable bit in APCS_CLOCK_BRANCH_ENA_VOTE. | ||
|
||
Also, the voting controlled clocks are shared among multiple | ||
components like APSS, RPM, NSS, TZ, etc. So, turning the | ||
voting off from APSS does not make the clock off if it has | ||
been voted from another component. Added the flag | ||
BRANCH_HALT_VOTED in order to skip checking the clock | ||
disable status. | ||
|
||
This change is referred from the below commits, | ||
1. 246b4fb3af9bd65d8af794aac2f0e7b1ed9cc2dd | ||
2. c8374157d5ae91d3b3e0d513d62808a798b32d3a | ||
|
||
Signed-off-by: Balaji Prakash J <[email protected]> | ||
Change-Id: I505cb560b31ad27a02c165fbe13bb33a2fc7d230 | ||
--- | ||
drivers/clk/qcom/gcc-ipq8074.c | 5 +++-- | ||
1 file changed, 3 insertions(+), 2 deletions(-) | ||
|
||
--- a/drivers/clk/qcom/gcc-ipq8074.c | ||
+++ b/drivers/clk/qcom/gcc-ipq8074.c | ||
@@ -2126,9 +2126,10 @@ struct clk_rcg2 adss_pwm_clk_src = { | ||
|
||
static struct clk_branch gcc_blsp1_ahb_clk = { | ||
.halt_reg = 0x01008, | ||
+ .halt_check = BRANCH_HALT_VOTED, | ||
.clkr = { | ||
- .enable_reg = 0x01008, | ||
- .enable_mask = BIT(0), | ||
+ .enable_reg = 0x0b004, | ||
+ .enable_mask = BIT(10), | ||
.hw.init = &(struct clk_init_data){ | ||
.name = "gcc_blsp1_ahb_clk", | ||
.parent_hws = (const struct clk_hw *[]){ |
Oops, something went wrong.