From: Yixun Lan <dlan@kernel.org>
To: u-boot@lists.u-boot-project.org
Cc: spacemit@lists.linux.dev, u-boot-spacemit@groups.io,
Lukasz Majewski <lukma@denx.de>, Tom Rini <trini@konsulko.com>,
Junhui Liu <junhui.liu@pigmoral.tech>,
Raymond Mao <raymond.mao@riscstar.com>,
Guodong Xu <guodong.xu@oss.qualcomm.com>,
Peng Fan <peng.fan@nxp.com>, Torsten Duwe <duwe@suse.de>,
Ryan Chen <ryan_chen@aspeedtech.com>,
Jonas Karlman <jonas@kwiboo.se>,
Alexey Charkov <alchark@flipper.net>,
Yixun Lan <dlan@kernel.org>
Subject: [PATCH 2/8] clk: spacemit: ccu_mix: add inverted enable gate clock
Date: Tue, 25 Aug 2026 04:24:12 +0000 [thread overview]
Message-ID: <20260825-01-k3-clock-reset-support-v1-2-c430253e759c@kernel.org> (raw)
In-Reply-To: <20260825-01-k3-clock-reset-support-v1-0-c430253e759c@kernel.org>
Based on upstream linux:
ace73b7e2763 ("clk: spacemit: ccu_mix: add inverted enable gate clock")
K3 SoC has the clock IP which support to write value 0 for enabling the
clock, while write 1 for disabling it, thus the enable BIT is inverted.
So, introduce a flag to support the inverted gate clock.
Signed-off-by: Yixun Lan <dlan@kernel.org>
---
drivers/clk/spacemit/clk_mix.c | 7 +++++--
drivers/clk/spacemit/clk_mix.h | 17 +++++++++++++----
2 files changed, 18 insertions(+), 6 deletions(-)
diff --git a/drivers/clk/spacemit/clk_mix.c b/drivers/clk/spacemit/clk_mix.c
index 45bf2c72375..b0d1a506851 100644
--- a/drivers/clk/spacemit/clk_mix.c
+++ b/drivers/clk/spacemit/clk_mix.c
@@ -33,8 +33,10 @@
int ccu_gate_disable(struct clk *clk)
{
struct ccu_mix *mix = clk_to_ccu_mix(clk);
+ struct ccu_gate_config *gate = &mix->gate;
+ u32 val = gate->inverted ? gate->mask : 0;
- ccu_update(&mix->common, ctrl, mix->gate.mask, 0);
+ ccu_update(&mix->common, ctrl, gate->mask, val);
return 0;
}
@@ -43,8 +45,9 @@ int ccu_gate_enable(struct clk *clk)
{
struct ccu_mix *mix = clk_to_ccu_mix(clk);
struct ccu_gate_config *gate = &mix->gate;
+ u32 val = gate->inverted ? 0 : gate->mask;
- ccu_update(&mix->common, ctrl, gate->mask, gate->mask);
+ ccu_update(&mix->common, ctrl, gate->mask, val);
return 0;
}
diff --git a/drivers/clk/spacemit/clk_mix.h b/drivers/clk/spacemit/clk_mix.h
index 26a12cedd0d..4ac61b55546 100644
--- a/drivers/clk/spacemit/clk_mix.h
+++ b/drivers/clk/spacemit/clk_mix.h
@@ -20,9 +20,11 @@
*
* @mask: Mask to enable the gate. Some clocks may have more than one bit
* set in this field.
+ * @inverted: Enable bit is inverted, 1 - disable clock, 0 - enable clock
*/
struct ccu_gate_config {
u32 mask;
+ bool inverted;
};
struct ccu_factor_config {
@@ -48,15 +50,17 @@ struct ccu_mix {
struct ccu_common common;
};
-#define CCU_GATE_INIT(_mask) { .mask = _mask }
+#define CCU_GATE_INIT(_mask) { .mask = _mask, .inverted = false }
+#define CCU_GATE_FLAGS_INIT(_mask, _inverted) \
+ { .mask = _mask, .inverted = _inverted }
#define CCU_FACTOR_INIT(_div, _mul) { .div = _div, .mul = _mul }
#define CCU_MUX_INIT(_shift, _width) { .shift = _shift, .width = _width }
#define CCU_DIV_INIT(_shift, _width) { .shift = _shift, .width = _width }
-#define CCU_GATE_DEFINE(_id, _var, _name, _parent, _reg_ctrl, \
- _mask_gate, _flags) \
+#define CCU_GATE_FLAGS_DEFINE(_id, _var, _name, _parent, _reg_ctrl, \
+ _mask_gate, _inverted, _flags) \
static struct ccu_mix _var = { \
- .gate = CCU_GATE_INIT(_mask_gate), \
+ .gate = CCU_GATE_FLAGS_INIT(_mask_gate, _inverted), \
.common = { \
.reg_ctrl = _reg_ctrl, \
CCU_COMMON(_id, _name, _parent, spacemit_gate_init, \
@@ -64,6 +68,11 @@ static struct ccu_mix _var = { \
} \
}
+#define CCU_GATE_DEFINE(_id, _var, _name, _parent, _reg_ctrl, \
+ _mask_gate, _flags) \
+ CCU_GATE_FLAGS_DEFINE(_id, _var, _name, _parent, _reg_ctrl, \
+ _mask_gate, false, _flags)
+
#define CCU_FACTOR_DEFINE(_id, _var, _name, _parent, _div, _mul) \
static struct ccu_mix _var = { \
.factor = CCU_FACTOR_INIT(_div, _mul), \
--
2.55.0
next prev parent reply other threads:[~2026-08-25 4:25 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-25 4:24 [PATCH 0/8] spacemit: k3: add clock and reset support Yixun Lan
2026-08-25 4:24 ` [PATCH 1/8] clk: spacemit: ccu_mix: fix inverted condition in ccu_mix_trigger_fc() Yixun Lan
2026-08-25 4:24 ` Yixun Lan [this message]
2026-08-25 4:24 ` [PATCH 3/8] clk: spacemit: ccu_pll: add plla type clock Yixun Lan
2026-08-25 4:24 ` [PATCH 4/8] clk: spacemit: k3: extract common header Yixun Lan
2026-08-25 4:24 ` [PATCH 5/8] clk: spacemit: k3: add the clock tree Yixun Lan
2026-08-25 4:24 ` [PATCH 6/8] clk: spacemit: k3: reduce clock tree for SPL build Yixun Lan
2026-09-02 9:55 ` Tim Ouyang
2026-09-04 20:52 ` Yixun Lan
2026-08-25 4:24 ` [PATCH 7/8] reset: spacemit: Extract common K1 reset code Yixun Lan
2026-08-25 4:24 ` [PATCH 8/8] reset: spacemit: Add SpacemiT K3 reset driver Yixun Lan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260825-01-k3-clock-reset-support-v1-2-c430253e759c@kernel.org \
--to=dlan@kernel.org \
--cc=alchark@flipper.net \
--cc=duwe@suse.de \
--cc=guodong.xu@oss.qualcomm.com \
--cc=jonas@kwiboo.se \
--cc=junhui.liu@pigmoral.tech \
--cc=lukma@denx.de \
--cc=peng.fan@nxp.com \
--cc=raymond.mao@riscstar.com \
--cc=ryan_chen@aspeedtech.com \
--cc=spacemit@lists.linux.dev \
--cc=trini@konsulko.com \
--cc=u-boot-spacemit@groups.io \
--cc=u-boot@lists.u-boot-project.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox