Commit 72ceafb5 authored by Md Sadre Alam's avatar Md Sadre Alam Committed by Bjorn Andersson

clk: qcom: gcc-ipq9574: Add BRANCH_HALT_VOTED flag

The crypto_ahb and crypto_axi clks are hardware voteable.
This means that the halt bit isn't reliable because some
other voter in the system, e.g. TrustZone, could be keeping
the clk enabled when the kernel turns it off from clk_disable().
Make these clks use voting mode by changing the halt check to
BRANCH_HALT_VOTED and toggle the voting bit in the voting register
instead of directly controlling the branch by writing to the branch
register. This fixes stuck clk warnings seen on ipq9574 and saves
power by actually turning the clk off.

Also changes the CRYPTO_AHB_CLK_ENA & CRYPTO_AXI_CLK_ENA
offset to 0xb004 from 0x16014.

Cc: stable@vger.kernel.org
Fixes: f6b2bd9c ("clk: qcom: gcc-ipq9574: Enable crypto clocks")
Signed-off-by: default avatarMd Sadre Alam <quic_mdalam@quicinc.com>
Link: https://lore.kernel.org/r/20240509105405.1262369-1-quic_mdalam@quicinc.comSigned-off-by: default avatarBjorn Andersson <andersson@kernel.org>
parent 2ba84256
...@@ -2140,9 +2140,10 @@ static struct clk_rcg2 pcnoc_bfdcd_clk_src = { ...@@ -2140,9 +2140,10 @@ static struct clk_rcg2 pcnoc_bfdcd_clk_src = {
static struct clk_branch gcc_crypto_axi_clk = { static struct clk_branch gcc_crypto_axi_clk = {
.halt_reg = 0x16010, .halt_reg = 0x16010,
.halt_check = BRANCH_HALT_VOTED,
.clkr = { .clkr = {
.enable_reg = 0x16010, .enable_reg = 0xb004,
.enable_mask = BIT(0), .enable_mask = BIT(15),
.hw.init = &(const struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "gcc_crypto_axi_clk", .name = "gcc_crypto_axi_clk",
.parent_hws = (const struct clk_hw *[]) { .parent_hws = (const struct clk_hw *[]) {
...@@ -2156,9 +2157,10 @@ static struct clk_branch gcc_crypto_axi_clk = { ...@@ -2156,9 +2157,10 @@ static struct clk_branch gcc_crypto_axi_clk = {
static struct clk_branch gcc_crypto_ahb_clk = { static struct clk_branch gcc_crypto_ahb_clk = {
.halt_reg = 0x16014, .halt_reg = 0x16014,
.halt_check = BRANCH_HALT_VOTED,
.clkr = { .clkr = {
.enable_reg = 0x16014, .enable_reg = 0xb004,
.enable_mask = BIT(0), .enable_mask = BIT(16),
.hw.init = &(const struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "gcc_crypto_ahb_clk", .name = "gcc_crypto_ahb_clk",
.parent_hws = (const struct clk_hw *[]) { .parent_hws = (const struct clk_hw *[]) {
......
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