[PATCH 0/3] clk: spacemit: k3: fix i2s clock topology and divider rates
From: Troy Mitchell
Date: Fri Jul 17 2026 - 03:32:02 EST
The K3 i2s clock tree was modelled on the K1 layout but does not match
the actual K3 hardware topology, leading to incorrect clock rates being
reported and programmed.
Three fixes are provided in dependency order:
First, the MPMU_ISCCR syscon register is renamed to MPMU_ISCCR1 to
match the hardware register name, and MPMU_ISCCR0 (offset 0x0040) is
added. This prepares the header for the clock topology corrections that
follow.
Second, the clock topology is reworked to reflect the real hardware:
the common i2s_sysclk DDN at MPMU_ISCCR1 is renamed from "i2s1_sysclk",
an implicit 1/2 factor (i2s_bclk_factor) is introduced before i2s_bclk,
and the dedicated i2s1 clock path (i2s1_sysclk_src MUX + i2s1_sysclk
DDN backed by MPMU_ISCCR0) is added. CLK_MPMU_I2S1_SYSCLK keeps its
existing ID but now refers to the real per-instance i2s1 clock; no
in-tree user references this ID so the semantic change is contained.
Third, the per-instance i2s sysclk DDNs (i2s{0,2,3,4,5}_sysclk_div)
are corrected to account for the hardware-internal 1/2 factor by setting
pre_div to 2 instead of 1, so clk_get_rate() and clk_set_rate() report
and program the real hardware rate.
---
Troy Mitchell (3):
dt-bindings: soc: spacemit: k3: add i2s_sysclk, i2s_bclk_factor and i2s1_sysclk_src IDs
clk: spacemit: k3: fix i2s clock topology
clk: spacemit: k3: fix missing /2 factor in i2s sysclk dividers
drivers/clk/spacemit/ccu-k3.c | 31 +++++++++++++++++---------
include/dt-bindings/clock/spacemit,k3-clocks.h | 3 +++
include/soc/spacemit/k3-syscon.h | 3 ++-
3 files changed, 26 insertions(+), 11 deletions(-)
---
base-commit: c425609d6ac4012c8bbf01ec2e10e801b1923a7b
change-id: 20260615-k3-clk-fix-i2s-5e278a472061
Best regards,
--
Troy Mitchell <troy.mitchell@xxxxxxxxxxxxxxxxxx>