* [PATCH V2 0/3] Add UMS9620 clocks driver and bindings
@ 2024-01-04 7:21 Chunyan Zhang
2024-01-04 7:21 ` [PATCH V2 1/3] dt-bindings: clk: sprd: Add UMS9620 support Chunyan Zhang
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Chunyan Zhang @ 2024-01-04 7:21 UTC (permalink / raw)
To: Stephen Boyd, Rob Herring, Krzysztof Kozlowski, Conor Dooley
Cc: linux-clk, devicetree, linux-kernel, Orson Zhai, Baolin Wang,
Chunyan Zhang, Chunyan Zhang
Add UMS9620 clock driver and update clock bindings for UMS9620.
V2:
- Fixed compile warnings reported by kernel test robot <lkp@intel.com>.
Chunyan Zhang (3):
dt-bindings: clk: sprd: Add UMS9620 support
clk: sprd: Add dt-bindings include file for UMS9620
clk: sprd: add support for UMS9620
.../bindings/clock/sprd,ums512-clk.yaml | 79 +-
drivers/clk/sprd/Kconfig | 9 +
drivers/clk/sprd/Makefile | 1 +
drivers/clk/sprd/ums9620-clk.c | 3120 +++++++++++++++++
include/dt-bindings/clock/sprd,ums9620-clk.h | 515 +++
5 files changed, 3713 insertions(+), 11 deletions(-)
create mode 100644 drivers/clk/sprd/ums9620-clk.c
create mode 100644 include/dt-bindings/clock/sprd,ums9620-clk.h
--
2.41.0
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH V2 1/3] dt-bindings: clk: sprd: Add UMS9620 support
2024-01-04 7:21 [PATCH V2 0/3] Add UMS9620 clocks driver and bindings Chunyan Zhang
@ 2024-01-04 7:21 ` Chunyan Zhang
2024-01-04 8:48 ` Krzysztof Kozlowski
2024-01-04 7:21 ` [PATCH V2 2/3] clk: sprd: Add dt-bindings include file for UMS9620 Chunyan Zhang
2024-01-04 7:21 ` [PATCH V2 3/3] clk: sprd: add support " Chunyan Zhang
2 siblings, 1 reply; 6+ messages in thread
From: Chunyan Zhang @ 2024-01-04 7:21 UTC (permalink / raw)
To: Stephen Boyd, Rob Herring, Krzysztof Kozlowski, Conor Dooley
Cc: linux-clk, devicetree, linux-kernel, Orson Zhai, Baolin Wang,
Chunyan Zhang, Chunyan Zhang
Add UMS9620's clock compatible strings and descriptions for clock
and clock-names for UMS9620.
Signed-off-by: Chunyan Zhang <chunyan.zhang@unisoc.com>
---
.../bindings/clock/sprd,ums512-clk.yaml | 79 ++++++++++++++++---
1 file changed, 68 insertions(+), 11 deletions(-)
diff --git a/Documentation/devicetree/bindings/clock/sprd,ums512-clk.yaml b/Documentation/devicetree/bindings/clock/sprd,ums512-clk.yaml
index 43d2b6c31357..dcad41a1fea7 100644
--- a/Documentation/devicetree/bindings/clock/sprd,ums512-clk.yaml
+++ b/Documentation/devicetree/bindings/clock/sprd,ums512-clk.yaml
@@ -30,25 +30,38 @@ properties:
- sprd,ums512-mm-clk
- sprd,ums512-mm-gate-clk
- sprd,ums512-apapb-gate
+ - sprd,ums9620-pmu-gate
+ - sprd,ums9620-g1-pll
+ - sprd,ums9620-g5l-pll
+ - sprd,ums9620-g5r-pll
+ - sprd,ums9620-g8-pll
+ - sprd,ums9620-g9-pll
+ - sprd,ums9620-g10-pll
+ - sprd,ums9620-apapb-gate
+ - sprd,ums9620-ap-clk
+ - sprd,ums9620-apahb-gate
+ - sprd,ums9620-aon-gate
+ - sprd,ums9620-aonapb-clk
+ - sprd,ums9620-topdvfs-clk
+ - sprd,ums9620-ipaapb-gate
+ - sprd,ums9620-ipa-clk
+ - sprd,ums9620-ipaglb-gate
+ - sprd,ums9620-ipadispc-gate
+ - sprd,ums9620-pcieapb-gate
+ - sprd,ums9620-pcie-clk
+ - sprd,ums9620-mm-gate
+ - sprd,ums9620-mm-clk
+ - sprd,ums9620-dpu-vsp-gate
+ - sprd,ums9620-dpu-vsp-clk
"#clock-cells":
const: 1
clocks:
- minItems: 1
- maxItems: 4
description: |
The input parent clock(s) phandle for the clock, only list
fixed clocks which are declared in devicetree.
- clock-names:
- minItems: 1
- items:
- - const: ext-26m
- - const: ext-32k
- - const: ext-4m
- - const: rco-100m
-
reg:
maxItems: 1
@@ -57,7 +70,43 @@ required:
- '#clock-cells'
- reg
-additionalProperties: false
+allOf:
+ - if:
+ properties:
+ compatible:
+ contains:
+ pattern: "^sprd,ums512-.*"
+
+ then:
+ properties:
+ clocks:
+ minItems: 1
+ maxItems: 4
+
+ clock-names:
+ minItems: 1
+ items:
+ - const: ext-26m
+ - const: ext-32k
+ - const: ext-4m
+ - const: rco-100m
+
+ - if:
+ properties:
+ compatible:
+ contains:
+ pattern: "^sprd,ums9620-.*"
+ then:
+ properties:
+ clocks:
+ minItems: 1
+ maxItems: 6
+
+ clock-names:
+ minItems: 1
+ maxItems: 6
+
+unevaluatedProperties: false
examples:
- |
@@ -68,4 +117,12 @@ examples:
clock-names = "ext-26m";
#clock-cells = <1>;
};
+
+ aonapb_gate: clock-controller@0 {
+ compatible = "sprd,ums9620-aon-gate";
+ reg = <0x0 0x3000>;
+ clocks = <&ext_26m>, <&ext_32k>, <&rco_60m>;
+ clock-names = "ext-26m", "ext-32k", "rco-60m";
+ #clock-cells = <1>;
+ };
...
--
2.41.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH V2 2/3] clk: sprd: Add dt-bindings include file for UMS9620
2024-01-04 7:21 [PATCH V2 0/3] Add UMS9620 clocks driver and bindings Chunyan Zhang
2024-01-04 7:21 ` [PATCH V2 1/3] dt-bindings: clk: sprd: Add UMS9620 support Chunyan Zhang
@ 2024-01-04 7:21 ` Chunyan Zhang
2024-01-04 8:49 ` Krzysztof Kozlowski
2024-01-04 7:21 ` [PATCH V2 3/3] clk: sprd: add support " Chunyan Zhang
2 siblings, 1 reply; 6+ messages in thread
From: Chunyan Zhang @ 2024-01-04 7:21 UTC (permalink / raw)
To: Stephen Boyd, Rob Herring, Krzysztof Kozlowski, Conor Dooley
Cc: linux-clk, devicetree, linux-kernel, Orson Zhai, Baolin Wang,
Chunyan Zhang, Chunyan Zhang
This file defines all UMS9620 clock indexes. It should be included in
the DTS file(s) in which there're devices using these clocks.
Signed-off-by: Chunyan Zhang <chunyan.zhang@unisoc.com>
---
include/dt-bindings/clock/sprd,ums9620-clk.h | 515 +++++++++++++++++++
1 file changed, 515 insertions(+)
create mode 100644 include/dt-bindings/clock/sprd,ums9620-clk.h
diff --git a/include/dt-bindings/clock/sprd,ums9620-clk.h b/include/dt-bindings/clock/sprd,ums9620-clk.h
new file mode 100644
index 000000000000..ed566e1208d7
--- /dev/null
+++ b/include/dt-bindings/clock/sprd,ums9620-clk.h
@@ -0,0 +1,515 @@
+/* SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause */
+/*
+ * Unisoc UMS9620 platform clocks
+ *
+ * Copyright (C) 2020-2023, Unisoc Inc.
+ */
+
+#ifndef _DT_BINDINGS_CLK_UMS9620_H_
+#define _DT_BINDINGS_CLK_UMS9620_H_
+
+#define CLK_26M_AUD 0
+#define CLK_13M 1
+#define CLK_6M5 2
+#define CLK_4M3 3
+#define CLK_4M 4
+#define CLK_2M 5
+#define CLK_1M 6
+#define CLK_250K 7
+#define CLK_16K 8
+#define CLK_RCO_100M_25M 9
+#define CLK_RCO_100m_20M 10
+#define CLK_RCO_100m_4M 11
+#define CLK_RCO_100m_2M 12
+#define CLK_RCO_60m_20M 13
+#define CLK_RCO_60m_4M 14
+#define CLK_RCO_60m_2M 15
+#define CLK_PHYR8PLL_GATE 16
+#define CLK_PSR8PLL_GATE 17
+#define CLK_CPLL_GATE 18
+#define CLK_V4NRPLL_GATE 19
+#define CLK_TGPLL_GATE 20
+#define CLK_MPLLL_GATE 21
+#define CLK_MPLLM_GATE 22
+#define CLK_MPLLB_GATE 23
+#define CLK_MPLLS_GATE 24
+#define CLK_DPLL0_GATE 25
+#define CLK_DPLL1_GATE 26
+#define CLK_DPLL2_GATE 27
+#define CLK_GPLL_GATE 28
+#define CLK_AIPLL_GATE 29
+#define CLK_VDSPPLL_GATE 30
+#define CLK_AUDPLL_GATE 31
+#define CLK_PIXELPLL_GATE 32
+#define CLK_PMU_GATE_NUM (CLK_PIXELPLL_GATE + 1)
+
+#define CLK_RPLL 0
+#define CLK_RPLL_390M 1
+#define CLK_RPLL_26M 2
+#define CLK_ANLG_PHY_G1_NUM (CLK_RPLL_26M + 1)
+
+#define CLK_TGPLL 0
+#define CLK_TGPLL_12M 1
+#define CLK_TGPLL_24M 2
+#define CLK_TGPLL_38M4 3
+#define CLK_TGPLL_48M 4
+#define CLK_TGPLL_51M2 5
+#define CLK_TGPLL_64M 6
+#define CLK_TGPLL_76M8 7
+#define CLK_TGPLL_96M 8
+#define CLK_TGPLL_128M 9
+#define CLK_TGPLL_153M6 10
+#define CLK_TGPLL_192M 11
+#define CLK_TGPLL_256M 12
+#define CLK_TGPLL_307M2 13
+#define CLK_TGPLL_384M 14
+#define CLK_TGPLL_512M 15
+#define CLK_TGPLL_614M4 16
+#define CLK_TGPLL_768M 17
+#define CLK_PSR8PLL 18
+#define CLK_V4NRPLL 19
+#define CLK_V4NRPLL_38M4 20
+#define CLK_V4NRPLL_409M6 21
+#define CLK_V4NRPLL_614M4 22
+#define CLK_V4NRPLL_819M2 23
+#define CLK_V4NRPLL_1228M8 24
+#define CLK_ANLG_PHY_G5L_NUM (CLK_V4NRPLL_1228M8 + 1)
+
+#define CLK_GPLL 0
+#define CLK_GPLL_680M 1
+#define CLK_GPLL_850M 2
+#define CLK_AIPLL 3
+#define CLK_VDSPPLL 4
+#define CLK_CPLL 5
+#define CLK_AUDPLL 6
+#define CLK_AUDPLL_38M4 7
+#define CLK_AUDPLL_24M57 8
+#define CLK_AUDPLL_19M2 9
+#define CLK_AUDPLL_12M28 10
+#define CLK_PHYR8PLL 11
+#define CLK_PIXELPLL 12
+#define CLK_PIXELPLL_668M25 13
+#define CLK_PIXELPLL_297M 14
+#define CLK_ANLG_PHY_G5R_NUM (CLK_PIXELPLL_297M + 1)
+
+#define CLK_MPLLB 0
+#define CLK_ANLG_PHY_G8_NUM (CLK_MPLLB + 1)
+
+#define CLK_MPLLM 0
+#define CLK_ANLG_PHY_G9_NUM (CLK_MPLLM + 1)
+
+#define CLK_MPLLL 0
+#define CLK_MPLLS 1
+#define CLK_ANLG_PHY_G10_NUM (CLK_MPLLS + 1)
+
+#define CLK_IIS0_EB 0
+#define CLK_IIS1_EB 1
+#define CLK_IIS2_EB 2
+#define CLK_SPI0_EB 3
+#define CLK_SPI1_EB 4
+#define CLK_SPI2_EB 5
+#define CLK_UART3_EB 6
+#define CLK_UART0_EB 7
+#define CLK_UART1_EB 8
+#define CLK_UART2_EB 9
+#define CLK_SPI0_LFIN_EB 10
+#define CLK_SPI1_LFIN_EB 11
+#define CLK_SPI2_LFIN_EB 12
+#define CLK_SPI3_LFIN_EB 13
+#define CLK_CE_SEC_EB 14
+#define CLK_CE_PUB_EB 15
+#define CLK_AP_APB_GATE_NUM (CLK_CE_PUB_EB + 1)
+
+#define CLK_SDIO0_EB 0
+#define CLK_SDIO1_EB 1
+#define CLK_SDIO2_EB 2
+#define CLK_EMMC_EB 3
+#define CLK_DMA_PUB_EB 4
+#define CLK_UFS_EB 5
+#define CLK_CKG_EB 6
+#define CLK_BUSMON_CLK_EB 7
+#define CLK_AP2EMC_EB 8
+#define CLK_I2C0_EB 9
+#define CLK_I2C1_EB 10
+#define CLK_I2C2_EB 11
+#define CLK_I2C3_EB 12
+#define CLK_I2C4_EB 13
+#define CLK_I2C5_EB 14
+#define CLK_I2C6_EB 15
+#define CLK_I2C7_EB 16
+#define CLK_I2C8_EB 17
+#define CLK_I2C9_EB 18
+#define CLK_UFS_TX_EB 19
+#define CLK_UFS_RX_0_EB 20
+#define CLK_UFS_RX_1_EB 21
+#define CLK_UFS_CFG_EB 22
+#define CLK_AP_AHB_GATE_NUM (CLK_UFS_CFG_EB + 1)
+
+#define CLK_AP_APB 0
+#define CLK_AP_AXI 1
+#define CLK_AP2EMC 2
+#define CLK_AP_UART0 3
+#define CLK_AP_UART1 4
+#define CLK_AP_UART2 5
+#define CLK_AP_UART3 6
+#define CLK_AP_I2C0 7
+#define CLK_AP_I2C1 8
+#define CLK_AP_I2C2 9
+#define CLK_AP_I2C3 10
+#define CLK_AP_I2C4 11
+#define CLK_AP_I2C5 12
+#define CLK_AP_I2C6 13
+#define CLK_AP_I2C7 14
+#define CLK_AP_I2C8 15
+#define CLK_AP_I2C9 16
+#define CLK_AP_IIS0 17
+#define CLK_AP_IIS1 18
+#define CLK_AP_IIS2 19
+#define CLK_AP_CE 20
+#define CLK_EMMC_2X 21
+#define CLK_EMMC_1X 22
+#define CLK_UFS_TX 23
+#define CLK_UFS_RX 24
+#define CLK_UFS_RX_1 25
+#define CLK_UFS_CFG 26
+#define CLK_AP_CLK_NUM (CLK_UFS_CFG + 1)
+
+#define CLK_RC100M_CAL_EB 0
+#define CLK_RFTI_EB 1
+#define CLK_DJTAG_EB 2
+#define CLK_AUX0_EB 3
+#define CLK_AUX1_EB 4
+#define CLK_AUX2_EB 5
+#define CLK_PROBE_EB 6
+#define CLK_MM_EB 7
+#define CLK_GPU_EB 8
+#define CLK_MSPI_EB 9
+#define CLK_AI_EB 10
+#define CLK_APCPU_DAP_EB 11
+#define CLK_AON_CSSYS_EB 12
+#define CLK_CSSYS_APB_EB 13
+#define CLK_CSSYS_PUB_EB 14
+#define CLK_DPU_VSP_EB 15
+#define CLK_DSI_CFG_EB 16
+#define CLK_EFUSE_EB 17
+#define CLK_GPIO_EB 18
+#define CLK_MBOX_EB 19
+#define CLK_KPD_EB 20
+#define CLK_AON_SYST_EB 21
+#define CLK_AP_SYST_EB 22
+#define CLK_AON_TMR_EB 23
+#define CLK_AON_DVFS_TOP_EB 24
+#define CLK_AON_USB2_TOP_EB 25
+#define CLK_OTG_PHY_EB 26
+#define CLK_SPLK_EB 27
+#define CLK_PIN_EB 28
+#define CLK_ANA_EB 29
+#define CLK_APCPU_BUSMON_EB 30
+#define CLK_UFS_AO_EB 31
+#define CLK_ISE_APB_EB 32
+#define CLK_APCPU_TS0_EB 33
+#define CLK_APB_BUSMON_EB 34
+#define CLK_AON_IIS_EB 35
+#define CLK_SCC_EB 36
+#define CLK_SERDES_CTRL1_EB 37
+#define CLK_AUX3_EB 38
+#define CLK_THM0_EB 39
+#define CLK_THM1_EB 40
+#define CLK_THM2_EB 41
+#define CLK_THM3_EB 42
+#define CLK_AUDCP_INTC_EB 43
+#define CLK_PMU_EB 44
+#define CLK_ADI_EB 45
+#define CLK_EIC_EB 46
+#define CLK_AP_INTC0_EB 47
+#define CLK_AP_INTC1_EB 48
+#define CLK_AP_INTC2_EB 49
+#define CLK_AP_INTC3_EB 50
+#define CLK_AP_INTC4_EB 51
+#define CLK_AP_INTC5_EB 52
+#define CLK_AP_INTC6_EB 53
+#define CLK_AP_INTC7_EB 54
+#define CLK_PSCP_INTC_EB 55
+#define CLK_PHYCP_INTC_EB 56
+#define CLK_ISE_INTC_EB 57
+#define CLK_AP_TMR0_EB 58
+#define CLK_AP_TMR1_EB 59
+#define CLK_AP_TMR2_EB 60
+#define CLK_PWM0_EB 61
+#define CLK_PWM1_EB 62
+#define CLK_PWM2_EB 63
+#define CLK_PWM3_EB 64
+#define CLK_AP_WDG_EB 65
+#define CLK_APCPU_WDG_EB 66
+#define CLK_SERDES_CTRL0_EB 67
+#define CLK_ARCH_RTC_EB 68
+#define CLK_KPD_RTC_EB 69
+#define CLK_AON_SYST_RTC_EB 70
+#define CLK_AP_SYST_RTC_EB 71
+#define CLK_AON_TMR_RTC_EB 72
+#define CLK_EIC_RTC_EB 73
+#define CLK_EIC_RTCDV5_EB 74
+#define CLK_AP_WDG_RTC_EB 75
+#define CLK_AC_WDG_RTC_EB 76
+#define CLK_AP_TMR0_RTC_EB 77
+#define CLK_AP_TMR1_RTC_EB 78
+#define CLK_AP_TMR2_RTC_EB 79
+#define CLK_DCXO_LC_RTC_EB 80
+#define CLK_BB_CAL_RTC_EB 81
+#define CLK_DSI_CSI_TEST_EB 82
+#define CLK_DJTAG_TCK_EN 83
+#define CLK_DPHY_REF_EB 84
+#define CLK_DMC_REF_EB 85
+#define CLK_OTG_REF_EB 86
+#define CLK_TSEN_EB 87
+#define CLK_TMR_EB 88
+#define CLK_RC100M_REF_EB 89
+#define CLK_RC100M_FDK_EB 90
+#define CLK_DEBOUNCE_EB 91
+#define CLK_DET_32K_EB 92
+#define CLK_TOP_CSSYS_EB 93
+#define CLK_AP_AXI_EN 94
+#define CLK_SDIO0_2X_EN 95
+#define CLK_SDIO0_1X_EN 96
+#define CLK_SDIO1_2X_EN 97
+#define CLK_SDIO1_1X_EN 98
+#define CLK_SDIO2_2X_EN 99
+#define CLK_SDIO2_1X_EN 100
+#define CLK_EMMC_1X_EN 101
+#define CLK_EMMC_2X_EN 102
+#define CLK_PLL_TEST_EN 103
+#define CLK_CPHY_CFG_EN 104
+#define CLK_DEBUG_TS_EN 105
+#define CLK_ACCESS_AUD_EN 106
+#define CLK_AUX0 107
+#define CLK_AUX1 108
+#define CLK_AUX2 109
+#define CLK_PROBE 110
+#define CLK_AUX3 111
+#define CLK_AON_APB_GATE_NUM (CLK_AUX3 + 1)
+
+#define CLK_AON_APB 0
+#define CLK_ADI 1
+#define CLK_PWM0 2
+#define CLK_PWM1 3
+#define CLK_PWM2 4
+#define CLK_PWM3 5
+#define CLK_EFUSE 6
+#define CLK_UART0 7
+#define CLK_UART1 8
+#define CLK_UART2 9
+#define CLK_THM0 10
+#define CLK_THM1 11
+#define CLK_THM2 12
+#define CLK_THM3 13
+#define CLK_AON_IIS 14
+#define CLK_SCC 15
+#define CLK_APCPU_DAP 16
+#define CLK_APCPU_TS 17
+#define CLK_DEBUG_TS 18
+#define CLK_PRI_SBI 19
+#define CLK_XO_SEL 20
+#define CLK_RFTI_LTH 21
+#define CLK_AFC_LTH 22
+#define CLK_RCO100M_FDK 23
+#define CLK_RCO60M_FDK 24
+#define CLK_RCO6M_REF 25
+#define CLK_RCO6M_FDK 26
+#define CLK_DJTAG_TCK 27
+#define CLK_AON_TMR 28
+#define CLK_AON_PMU 29
+#define CLK_DEBOUNCE 30
+#define CLK_APCPU_PMU 31
+#define CLK_TOP_DVFS 32
+#define CLK_PMU_26M 33
+#define CLK_TZPC 34
+#define CLK_OTG_REF 35
+#define CLK_CSSYS 36
+#define CLK_CSSYS_APB 37
+#define CLK_SDIO0_2X 38
+#define CLK_SDIO0_1X 39
+#define CLK_SDIO1_2X 40
+#define CLK_SDIO1_1X 41
+#define CLK_SDIO2_2X 42
+#define CLK_SDIO2_1X 43
+#define CLK_SPI0 44
+#define CLK_SPI1 45
+#define CLK_SPI2 46
+#define CLK_ANALOG_IO_APB 47
+#define CLK_DMC_REF 48
+#define CLK_USB 49
+#define CLK_USB_SUSPEND 50
+#define CLK_UFS_AON 51
+#define CLK_UFS_PCK 52
+#define CLK_AON_APB_NUM (CLK_UFS_PCK + 1)
+
+#define CLK_CORE0 0
+#define CLK_CORE1 1
+#define CLK_CORE2 2
+#define CLK_CORE3 3
+#define CLK_CORE4 4
+#define CLK_CORE5 5
+#define CLK_CORE6 6
+#define CLK_CORE7 7
+#define CLK_SCU 8
+#define CLK_ACE 9
+#define CLK_ATB 10
+#define CLK_DEBUG_APB 11
+#define CLK_CPS 12
+#define CLK_GIC 13
+#define CLK_PERIPH 14
+#define CLK_TOPDVFS_CLK_NUM (CLK_PERIPH + 1)
+
+#define CLK_USB_EB 0
+#define CLK_USB_SUSPEND_EB 1
+#define CLK_USB_REF_EB 2
+#define CLK_PAM_USB_EB 3
+#define CLK_PAM_WIFI_EB 4
+#define CLK_IPAAPB_GATE_NUM (CLK_PAM_WIFI_EB + 1)
+
+#define CLK_IPA_AXI 0
+#define CLK_IPA_APB 1
+#define CLK_USB_REF 2
+#define CLK_AP_IPA_AXI 3
+#define CLK_AP_IPA_APB 4
+#define CLK_IPA_DPU 5
+#define CLK_IPA_DPI 6
+#define CLK_USB_153M6 7
+#define CLK_IPA_CLK_NUM (CLK_USB_153M6 + 1)
+
+#define CLK_IPA_EB 0
+#define CLK_TFT_EB 1
+#define CLK_IPA_ACCESS_PHYCP_EN 2
+#define CLK_IPA_ACCESS_PSCP_EN 3
+#define CLK_IPAGLB_GATE_NUM (CLK_IPA_ACCESS_PSCP_EN + 1)
+
+#define CLK_IPA_DPU1_EB 0
+#define CLK_IPA_DPTX_EB 1
+#define CLK_IPA_HDCP_EB 2
+#define CLK_IPA_TCA_EB 3
+#define CLK_IPA_USB31PLL_EB 4
+#define CLK_IPA_CKG_EB 5
+#define CLK_IPA_TRNG_EB 6
+#define CLK_IPADISPC_GATE_NUM (CLK_IPA_TRNG_EB + 1)
+
+#define CLK_PCIE3_AUX_EB 0
+#define CLK_PCIE3_EB 1
+#define CLK_NIC400_TRANMON_EB 2
+#define CLK_NIC400_CFG_EB 3
+#define CLK_PCIE3_PHY 4
+#define CLK_PCIEAPB_GATE_NUM (CLK_PCIE3_PHY + 1)
+
+#define CLK_PCIE_AXI 0
+#define CLK_PCIE_APB 1
+#define CLK_PCIE_AUX 2
+#define CLK_PCIE_CLK_NUM (CLK_PCIE_AUX + 1)
+
+#define CLK_JPG_EN 0
+#define CLK_CKG_EN 1
+#define CLK_MAILBOX_EN 2
+#define CLK_DVFS_EN 3
+#define CLK_SYS_MTX_CFG_EN 4
+#define CLK_SYS_CFG_MTX_BUSMON_EN 5
+#define CLK_SYS_MST_BUSMON_EN 6
+#define CLK_SYS_TCK_EN 7
+#define CLK_MM_MTX_DATA_EN 8
+#define CLK_ISP_EN 9
+#define CLK_CPP_EN 10
+#define CLK_DEPTH_EN 11
+#define CLK_FD_EN 12
+#define CLK_DEWARP_EN 13
+#define CLK_ISP_MTX_EN 14
+#define CLK_ISP_BLK_CFG_EN 15
+#define CLK_ISP_BLK_EN 16
+#define CLK_DWP_CLK_GATE_EN 17
+#define CLK_ISP_BLK_MST_BUSMON_EN 18
+#define CLK_ISP_TCK_EN 19
+#define CLK_VDSP_EN 20
+#define CLK_VDSP_M_EN 21
+#define CLK_VDMA_EN 22
+#define CLK_VDSP_TCK_EN 23
+#define CLK_VDSP_MTX_DATA_EN 24
+#define CLK_VDSP_BLK_CFG_EN 25
+#define CLK_MM_UART_EN 26
+#define CLK_VDSP_BLK_EN 27
+#define CLK_VDSP_SLV_BUSMON_EN 28
+#define CLK_VDSP_MST_BUSMON_EN 29
+#define CLK_IDVAU_EN 30
+#define CLK_DVAU_EN 31
+#define CLK_IVAU_EN 32
+#define CLK_DCAM_IF_EN 33
+#define CLK_DCAM_IF_LITE_EN 34
+#define CLK_PHY_CFG_EN 35
+#define CLK_DCAM_MTX_EN 36
+#define CLK_DCAM_LITE_MTX_EN 37
+#define CLK_DCAM_BLK_CFG_EN 38
+#define CLK_SENSOR0_EN 39
+#define CLK_SENSOR1_EN 40
+#define CLK_SENSOR2_EN 41
+#define CLK_SENSOR3_EN 42
+#define CLK_DCAM_BLK_EN 43
+#define CLK_DCAM_TCK_EN 44
+#define CLK_CSI0_EN 45
+#define CLK_CSI1_EN 46
+#define CLK_CSI2_EN 47
+#define CLK_CSI3_EN 48
+#define CLK_IPA_EN 49
+#define CLK_MM_GATE_NUM (CLK_IPA_EN + 1)
+
+#define CLK_VDSP 0
+#define CLK_VDSP_M 1
+#define CLK_VDMA 2
+#define CLK_VDSP_MTX_DATA 3
+#define CLK_VDSP_BLK_CFG 4
+#define CLK_MM_UART 5
+#define CLK_ISP 6
+#define CLK_CPP 7
+#define CLK_DEPTH 8
+#define CLK_FD 9
+#define CLK_DCAM0_1 10
+#define CLK_DCAM0_1_AXI 11
+#define CLK_DCAM2_3 12
+#define CLK_DCAM2_3_AXI 13
+#define CLK_MIPI_CSI0 14
+#define CLK_MIPI_CSI1 15
+#define CLK_MIPI_CSI2_1 16
+#define CLK_MIPI_CSI2_2 17
+#define CLK_MIPI_CSI3_1 18
+#define CLK_MIPI_CSI3_2 19
+#define CLK_DCAM_MTX 20
+#define CLK_DCAM_BLK_CFG 21
+#define CLK_MM_MTX_DATA 22
+#define CLK_JPG 23
+#define CLK_MM_SYS_CFG 24
+#define CLK_SENSOR0 25
+#define CLK_SENSOR1 26
+#define CLK_SENSOR2 27
+#define CLK_SENSOR3 28
+#define CLK_MM_CLK_NUM (CLK_SENSOR3 + 1)
+
+#define CLK_DPU_EB 0
+#define CLK_DSI0_EB 1
+#define CLK_DSI1_EB 2
+#define CLK_VPU_ENC0_EB 3
+#define CLK_VPU_ENC1_EB 4
+#define CLK_VPU_DEC_EB 5
+#define CLK_GSP0_EB 6
+#define CLK_GSP1_EB 7
+#define CLK_DPU_DVFS_EB 8
+#define CLK_DPU_CKG_EB 9
+#define CLK_DPU_BUSMON_EB 10
+#define CLK_M_DIV6CLK_GATE_EN 11
+#define CLK_S_DIV6CLK_GATE_EN 12
+#define CLK_DPU_VSP_GATE_NUM (CLK_S_DIV6CLK_GATE_EN + 1)
+
+#define CLK_DPU_CFG 0
+#define CLK_VPU_MTX 1
+#define CLK_VPU_ENC 2
+#define CLK_VPU_DEC 3
+#define CLK_GSP0 4
+#define CLK_GSP1 5
+#define CLK_DISPC0 6
+#define CLK_DISPC0_DPI 7
+#define CLK_DPU_VSP_CLK_NUM (CLK_DISPC0_DPI + 1)
+
+#endif/* _DT_BINDINGS_CLK_UMS9620_H_ */
--
2.41.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH V2 3/3] clk: sprd: add support for UMS9620
2024-01-04 7:21 [PATCH V2 0/3] Add UMS9620 clocks driver and bindings Chunyan Zhang
2024-01-04 7:21 ` [PATCH V2 1/3] dt-bindings: clk: sprd: Add UMS9620 support Chunyan Zhang
2024-01-04 7:21 ` [PATCH V2 2/3] clk: sprd: Add dt-bindings include file for UMS9620 Chunyan Zhang
@ 2024-01-04 7:21 ` Chunyan Zhang
2 siblings, 0 replies; 6+ messages in thread
From: Chunyan Zhang @ 2024-01-04 7:21 UTC (permalink / raw)
To: Stephen Boyd, Rob Herring, Krzysztof Kozlowski, Conor Dooley
Cc: linux-clk, devicetree, linux-kernel, Orson Zhai, Baolin Wang,
Chunyan Zhang, Chunyan Zhang
Add the list of clocks for Unisoc UMS9620, along with clock
initializations.
Signed-off-by: Chunyan Zhang <chunyan.zhang@unisoc.com>
---
drivers/clk/sprd/Kconfig | 9 +
drivers/clk/sprd/Makefile | 1 +
drivers/clk/sprd/ums9620-clk.c | 3120 ++++++++++++++++++++++++++++++++
3 files changed, 3130 insertions(+)
create mode 100644 drivers/clk/sprd/ums9620-clk.c
diff --git a/drivers/clk/sprd/Kconfig b/drivers/clk/sprd/Kconfig
index 2f19c8d58ff2..2ca7bfb4be1c 100644
--- a/drivers/clk/sprd/Kconfig
+++ b/drivers/clk/sprd/Kconfig
@@ -29,4 +29,13 @@ config SPRD_UMS512_CLK
help
Support for the global clock controller on ums512 devices.
Say Y if you want to use peripheral devices on ums512 SoC.
+
+config SPRD_UMS9620_CLK
+ tristate "Support for the Spreadtrum UMS9620 clocks"
+ depends on (ARM64 && ARCH_SPRD) || COMPILE_TEST
+ default ARM64 && ARCH_SPRD
+ help
+ Support for the global clock controllers on UMS9620 SoC. This
+ provide clock source for all peripheral devices on the SoC.
+ Say Y if you want to use peripheral devices on UMS9620 SoC.
endif
diff --git a/drivers/clk/sprd/Makefile b/drivers/clk/sprd/Makefile
index f25b2c3904fb..93856748d459 100644
--- a/drivers/clk/sprd/Makefile
+++ b/drivers/clk/sprd/Makefile
@@ -12,3 +12,4 @@ clk-sprd-y += pll.o
obj-$(CONFIG_SPRD_SC9860_CLK) += sc9860-clk.o
obj-$(CONFIG_SPRD_SC9863A_CLK) += sc9863a-clk.o
obj-$(CONFIG_SPRD_UMS512_CLK) += ums512-clk.o
+obj-$(CONFIG_SPRD_UMS9620_CLK) += ums9620-clk.o
diff --git a/drivers/clk/sprd/ums9620-clk.c b/drivers/clk/sprd/ums9620-clk.c
new file mode 100644
index 000000000000..4e14df616a20
--- /dev/null
+++ b/drivers/clk/sprd/ums9620-clk.c
@@ -0,0 +1,3120 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Unisoc UMS9620 clock driver
+ *
+ * Copyright (C) 2020-2023 Unisoc, Inc.
+ */
+
+#include <linux/clk-provider.h>
+#include <linux/err.h>
+#include <linux/io.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/slab.h>
+
+#include <dt-bindings/clock/sprd,ums9620-clk.h>
+
+#include "common.h"
+#include "composite.h"
+#include "div.h"
+#include "gate.h"
+#include "mux.h"
+#include "pll.h"
+
+#define UMS9620_MUX_FLAG \
+ (CLK_GET_RATE_NOCACHE | CLK_SET_RATE_NO_REPARENT)
+
+/* pll gate clock */
+static CLK_FIXED_FACTOR_FW_NAME(clk_26m_aud, "clk-26m-aud", "ext-26m", 1, 1, 0);
+static CLK_FIXED_FACTOR_FW_NAME(clk_13m, "clk-13m", "ext-26m", 2, 1, 0);
+static CLK_FIXED_FACTOR_FW_NAME(clk_6m5, "clk-6m5", "ext-26m", 4, 1, 0);
+static CLK_FIXED_FACTOR_FW_NAME(clk_4m3, "clk-4m3", "ext-26m", 6, 1, 0);
+static CLK_FIXED_FACTOR_FW_NAME(clk_4m, "clk-4m", "ext-26m", 13, 2, 0);
+static CLK_FIXED_FACTOR_FW_NAME(clk_2m, "clk-2m", "ext-26m", 13, 1, 0);
+static CLK_FIXED_FACTOR_FW_NAME(clk_1m, "clk-1m", "ext-26m", 26, 1, 0);
+static CLK_FIXED_FACTOR_FW_NAME(clk_250k, "clk-250k", "ext-26m", 104, 1, 0);
+static CLK_FIXED_FACTOR_FW_NAME(clk_16k, "clk-16k", "ext-26m", 1625, 1, 0);
+static CLK_FIXED_FACTOR_FW_NAME(rco_100m_25m, "rco-100m-25m", "rco-100m", 4, 1, 0);
+static CLK_FIXED_FACTOR_FW_NAME(rco_100m_20m, "rco-100m-20m", "rco-100m", 5, 1, 0);
+static CLK_FIXED_FACTOR_FW_NAME(rco_100m_4m, "rco-100m-4m", "rco-100m", 25, 1, 0);
+static CLK_FIXED_FACTOR_FW_NAME(rco_100m_2m, "rco-100m-2m", "rco-100m", 50, 1, 0);
+static CLK_FIXED_FACTOR_FW_NAME(rco_60m_20m, "rco-60m-20m", "rco-60m", 3, 1, 0);
+static CLK_FIXED_FACTOR_FW_NAME(rco_60m_4m, "rco-60m-4m", "rco-60m", 15, 1, 0);
+static CLK_FIXED_FACTOR_FW_NAME(rco_60m_2m, "rco-60m-2m", "rco-60m", 30, 1, 0);
+static SPRD_PLL_SC_GATE_CLK_FW_NAME(phyr8pll_gate, "phyr8pll-gate", "ext-26m", 0xa30,
+ 0x1000, BIT(2), CLK_IGNORE_UNUSED, 0, 240);
+static SPRD_PLL_SC_GATE_CLK_FW_NAME(psr8pll_gate, "psr8pll-gate", "ext-26m", 0xa34,
+ 0x1000, BIT(2), CLK_IGNORE_UNUSED, 0, 240);
+static SPRD_PLL_SC_GATE_CLK_FW_NAME(cpll_gate, "cpll-gate", "ext-26m", 0xa80,
+ 0x1000, BIT(2), CLK_IGNORE_UNUSED, 0, 240);
+static SPRD_PLL_SC_GATE_CLK_FW_NAME(v4nrpll_gate, "v4nrpll-gate", "ext-26m", 0xa44,
+ 0x1000, BIT(2), CLK_IGNORE_UNUSED, 0, 240);
+static SPRD_PLL_SC_GATE_CLK_FW_NAME(rpll_gate, "rpll-gate", "ext-26m", 0xa0c,
+ 0x1000, BIT(2), CLK_IGNORE_UNUSED, 0, 240);
+static SPRD_PLL_SC_GATE_CLK_FW_NAME(tgpll_gate, "tgpll-gate", "ext-26m", 0xa40,
+ 0x1000, BIT(2), CLK_IGNORE_UNUSED, 0, 240);
+static SPRD_PLL_SC_GATE_CLK_FW_NAME(mplll_gate, "mplll-gate", "ext-26m", 0x9f8,
+ 0x1000, BIT(2), CLK_IGNORE_UNUSED, 0, 240);
+static SPRD_PLL_SC_GATE_CLK_FW_NAME(mpllm_gate, "mpllm-gate", "ext-26m", 0x9fc,
+ 0x1000, BIT(2), CLK_IGNORE_UNUSED, 0, 240);
+static SPRD_PLL_SC_GATE_CLK_FW_NAME(mpllb_gate, "mpllb-gate", "ext-26m", 0xa00,
+ 0x1000, BIT(2), CLK_IGNORE_UNUSED, 0, 240);
+static SPRD_PLL_SC_GATE_CLK_FW_NAME(mplls_gate, "mplls-gate", "ext-26m", 0x9f4,
+ 0x1000, BIT(2), CLK_IGNORE_UNUSED, 0, 240);
+static SPRD_PLL_SC_GATE_CLK_FW_NAME(dpll0_gate, "dpll0-gate", "ext-26m", 0xa14,
+ 0x1000, BIT(2), CLK_IGNORE_UNUSED, 0, 240);
+static SPRD_PLL_SC_GATE_CLK_FW_NAME(dpll1_gate, "dpll1-gate", "ext-26m", 0xa18,
+ 0x1000, BIT(2), CLK_IGNORE_UNUSED, 0, 240);
+static SPRD_PLL_SC_GATE_CLK_FW_NAME(dpll2_gate, "dpll2-gate", "ext-26m", 0xa1c,
+ 0x1000, BIT(2), CLK_IGNORE_UNUSED, 0, 240);
+static SPRD_PLL_SC_GATE_CLK_FW_NAME(gpll_gate, "gpll-gate", "ext-26m", 0xa20,
+ 0x1000, BIT(2), CLK_IGNORE_UNUSED, 0, 240);
+static SPRD_PLL_SC_GATE_CLK_FW_NAME(aipll_gate, "aipll-gate", "ext-26m", 0xa24,
+ 0x1000, BIT(2), CLK_IGNORE_UNUSED, 0, 240);
+static SPRD_PLL_SC_GATE_CLK_FW_NAME(vdsppll_gate, "vdsppll-gate", "ext-26m", 0xa2c,
+ 0x1000, BIT(2), CLK_IGNORE_UNUSED, 0, 240);
+static SPRD_PLL_SC_GATE_CLK_FW_NAME(audpll_gate, "audpll-gate", "ext-26m", 0xa48,
+ 0x1000, BIT(2), CLK_IGNORE_UNUSED, 0, 240);
+static SPRD_PLL_SC_GATE_CLK_FW_NAME(pixelpll_gate, "pixelpll-gate", "ext-26m", 0xa5c,
+ 0x1000, BIT(2), CLK_IGNORE_UNUSED, 0, 240);
+
+static struct sprd_clk_common *ums9620_pmu_gate_clks[] = {
+ /* address base is 0x64910000 */
+ &phyr8pll_gate.common,
+ &psr8pll_gate.common,
+ &cpll_gate.common,
+ &v4nrpll_gate.common,
+ &rpll_gate.common,
+ &tgpll_gate.common,
+ &mplll_gate.common,
+ &mpllm_gate.common,
+ &mpllb_gate.common,
+ &mplls_gate.common,
+ &dpll0_gate.common,
+ &dpll1_gate.common,
+ &dpll2_gate.common,
+ &gpll_gate.common,
+ &aipll_gate.common,
+ &vdsppll_gate.common,
+ &audpll_gate.common,
+ &pixelpll_gate.common,
+};
+
+static struct clk_hw_onecell_data ums9620_pmu_gate_hws = {
+ .hws = {
+ [CLK_26M_AUD] = &clk_26m_aud.hw,
+ [CLK_13M] = &clk_13m.hw,
+ [CLK_6M5] = &clk_6m5.hw,
+ [CLK_4M3] = &clk_4m3.hw,
+ [CLK_4M] = &clk_4m.hw,
+ [CLK_2M] = &clk_2m.hw,
+ [CLK_1M] = &clk_1m.hw,
+ [CLK_250K] = &clk_250k.hw,
+ [CLK_16K] = &clk_16k.hw,
+ [CLK_RCO_100M_25M] = &rco_100m_25m.hw,
+ [CLK_RCO_100m_20M] = &rco_100m_20m.hw,
+ [CLK_RCO_100m_4M] = &rco_100m_4m.hw,
+ [CLK_RCO_100m_2M] = &rco_100m_2m.hw,
+ [CLK_RCO_60m_20M] = &rco_60m_20m.hw,
+ [CLK_RCO_60m_4M] = &rco_60m_4m.hw,
+ [CLK_RCO_60m_2M] = &rco_60m_2m.hw,
+ [CLK_PHYR8PLL_GATE] = &phyr8pll_gate.common.hw,
+ [CLK_PSR8PLL_GATE] = &psr8pll_gate.common.hw,
+ [CLK_CPLL_GATE] = &cpll_gate.common.hw,
+ [CLK_V4NRPLL_GATE] = &v4nrpll_gate.common.hw,
+ [CLK_TGPLL_GATE] = &tgpll_gate.common.hw,
+ [CLK_MPLLL_GATE] = &mplll_gate.common.hw,
+ [CLK_MPLLM_GATE] = &mpllm_gate.common.hw,
+ [CLK_MPLLB_GATE] = &mpllb_gate.common.hw,
+ [CLK_MPLLS_GATE] = &mplls_gate.common.hw,
+ [CLK_DPLL0_GATE] = &dpll0_gate.common.hw,
+ [CLK_DPLL1_GATE] = &dpll1_gate.common.hw,
+ [CLK_DPLL2_GATE] = &dpll2_gate.common.hw,
+ [CLK_GPLL_GATE] = &gpll_gate.common.hw,
+ [CLK_AIPLL_GATE] = &aipll_gate.common.hw,
+ [CLK_VDSPPLL_GATE] = &vdsppll_gate.common.hw,
+ [CLK_AUDPLL_GATE] = &audpll_gate.common.hw,
+ [CLK_PIXELPLL_GATE] = &pixelpll_gate.common.hw,
+
+ },
+ .num = CLK_PMU_GATE_NUM,
+};
+
+static struct sprd_clk_desc ums9620_pmu_gate_desc = {
+ .clk_clks = ums9620_pmu_gate_clks,
+ .num_clk_clks = ARRAY_SIZE(ums9620_pmu_gate_clks),
+ .hw_clks = &ums9620_pmu_gate_hws,
+};
+
+/* pll clock at g1 */
+static const u64 itable_rpll[5] = { 4, 0,
+ 2000000000ULL, 2800000000ULL, 3200000000ULL };
+
+static struct clk_bit_field f_rpll[PLL_FACT_MAX] = {
+ { .shift = 18, .width = 1 }, /* lock_done */
+ { .shift = 0, .width = 1 }, /* div_s */
+ { .shift = 1, .width = 1 }, /* mod_en */
+ { .shift = 2, .width = 1 }, /* sdm_en */
+ { .shift = 0, .width = 0 }, /* refin */
+ { .shift = 3, .width = 4 }, /* icp */
+ { .shift = 7, .width = 11 }, /* n */
+ { .shift = 55, .width = 8 }, /* nint */
+ { .shift = 32, .width = 23}, /* kint */
+ { .shift = 0, .width = 0 }, /* prediv */
+ { .shift = 66, .width = 2 }, /* postdiv */
+};
+
+static SPRD_PLL_HW(rpll, "rpll", &clk_26m_aud.hw, 0x10,
+ 3, itable_rpll, f_rpll, 240,
+ 1000, 1000, 1, 1560000000);
+static CLK_FIXED_FACTOR_HW(rpll_390m, "rpll-390m", &rpll.common.hw, 2, 1, 0);
+static CLK_FIXED_FACTOR_HW(rpll_26m, "rpll-26m", &rpll.common.hw, 30, 1, 0);
+
+static struct sprd_clk_common *ums9620_g1_pll_clks[] = {
+ /* address base is 0x64304000 */
+ &rpll.common,
+};
+
+static struct clk_hw_onecell_data ums9620_g1_pll_hws = {
+ .hws = {
+ [CLK_RPLL] = &rpll.common.hw,
+ [CLK_RPLL_390M] = &rpll_390m.hw,
+ [CLK_RPLL_26M] = &rpll_26m.hw,
+ },
+ .num = CLK_ANLG_PHY_G1_NUM,
+};
+
+static struct sprd_clk_desc ums9620_g1_pll_desc = {
+ .clk_clks = ums9620_g1_pll_clks,
+ .num_clk_clks = ARRAY_SIZE(ums9620_g1_pll_clks),
+ .hw_clks = &ums9620_g1_pll_hws,
+};
+
+/* pll at g5l */
+static struct clk_bit_field f_tgpll[PLL_FACT_MAX] = {
+ { .shift = 17, .width = 1 }, /* lock_done */
+ { .shift = 0, .width = 1 }, /* div_s */
+ { .shift = 1, .width = 1 }, /* mod_en */
+ { .shift = 2, .width = 1 }, /* sdm_en */
+ { .shift = 0, .width = 0 }, /* refin */
+ { .shift = 3, .width = 3 }, /* icp */
+ { .shift = 6, .width = 11 }, /* n */
+ { .shift = 32, .width = 7 }, /* nint */
+ { .shift = 39, .width = 23}, /* kint */
+ { .shift = 0, .width = 0 }, /* prediv */
+ { .shift = 68, .width = 1 }, /* postdiv */
+};
+
+static SPRD_PLL_FW_NAME(tgpll, "tgpll", "ext-26m", 0x4,
+ 3, itable_rpll, f_tgpll, 240,
+ 1000, 1000, 1, 1600000000);
+static CLK_FIXED_FACTOR_HW(tgpll_12m, "tgpll-12m", &tgpll.common.hw, 128, 1, 0);
+static CLK_FIXED_FACTOR_HW(tgpll_24m, "tgpll-24m", &tgpll.common.hw, 64, 1, 0);
+static CLK_FIXED_FACTOR_HW(tgpll_38m4, "tgpll-38m4", &tgpll.common.hw, 40, 1, 0);
+static CLK_FIXED_FACTOR_HW(tgpll_48m, "tgpll-48m", &tgpll.common.hw, 32, 1, 0);
+static CLK_FIXED_FACTOR_HW(tgpll_51m2, "tgpll-51m2", &tgpll.common.hw, 30, 1, 0);
+static CLK_FIXED_FACTOR_HW(tgpll_64m, "tgpll-64m", &tgpll.common.hw, 24, 1, 0);
+static CLK_FIXED_FACTOR_HW(tgpll_76m8, "tgpll-76m8", &tgpll.common.hw, 20, 1, 0);
+static CLK_FIXED_FACTOR_HW(tgpll_96m, "tgpll-96m", &tgpll.common.hw, 16, 1, 0);
+static CLK_FIXED_FACTOR_HW(tgpll_128m, "tgpll-128m", &tgpll.common.hw, 12, 1, 0);
+static CLK_FIXED_FACTOR_HW(tgpll_153m6, "tgpll-153m6", &tgpll.common.hw, 10, 1, 0);
+static CLK_FIXED_FACTOR_HW(tgpll_192m, "tgpll-192m", &tgpll.common.hw, 8, 1, 0);
+static CLK_FIXED_FACTOR_HW(tgpll_256m, "tgpll-256m", &tgpll.common.hw, 6, 1, 0);
+static CLK_FIXED_FACTOR_HW(tgpll_307m2, "tgpll-307m2", &tgpll.common.hw, 5, 1, 0);
+static CLK_FIXED_FACTOR_HW(tgpll_384m, "tgpll-384m", &tgpll.common.hw, 4, 1, 0);
+static CLK_FIXED_FACTOR_HW(tgpll_512m, "tgpll-512m", &tgpll.common.hw, 3, 1, 0);
+static CLK_FIXED_FACTOR_HW(tgpll_614m4, "tgpll-614m4", &tgpll.common.hw, 5, 2, 0);
+static CLK_FIXED_FACTOR_HW(tgpll_768m, "tgpll-768m", &tgpll.common.hw, 2, 1, 0);
+
+static struct clk_bit_field f_psr8pll[PLL_FACT_MAX] = {
+ { .shift = 14, .width = 1 }, /* lock_done */
+ { .shift = 0, .width = 0 }, /* div_s */
+ { .shift = 0, .width = 0 }, /* mod_en */
+ { .shift = 0, .width = 0 }, /* sdm_en */
+ { .shift = 0, .width = 0 }, /* refin */
+ { .shift = 0, .width = 3 }, /* icp */
+ { .shift = 3, .width = 11 }, /* n */
+ { .shift = 0, .width = 0 }, /* nint */
+ { .shift = 0, .width = 0 }, /* kint */
+ { .shift = 0, .width = 0 }, /* prediv */
+ { .shift = 35, .width = 1 }, /* postdiv */
+};
+
+static SPRD_PLL_HW(psr8pll, "psr8pll", &psr8pll_gate.common.hw, 0x2c,
+ 3, itable_rpll, f_psr8pll, 240,
+ 1000, 1000, 1, 1600000000);
+
+static struct clk_bit_field f_v4nrpll[PLL_FACT_MAX] = {
+ { .shift = 17, .width = 1 }, /* lock_done */
+ { .shift = 0, .width = 1 }, /* div_s */
+ { .shift = 1, .width = 1 }, /* mod_en */
+ { .shift = 2, .width = 1 }, /* sdm_en */
+ { .shift = 0, .width = 0 }, /* refin */
+ { .shift = 3, .width = 3 }, /* icp */
+ { .shift = 6, .width = 11 }, /* n */
+ { .shift = 55, .width = 7 }, /* nint */
+ { .shift = 32, .width = 23}, /* kint */
+ { .shift = 0, .width = 0 }, /* prediv */
+ { .shift = 81, .width = 1 }, /* postdiv */
+};
+
+static SPRD_PLL_FW_NAME(v4nrpll, "v4nrpll", "ext-26m", 0x3c,
+ 3, itable_rpll, f_v4nrpll, 240,
+ 1000, 1000, 1, 1600000000);
+static CLK_FIXED_FACTOR_HW(v4nrpll_38m4, "v4nrpll-38m4", &v4nrpll.common.hw, 64, 1, 0);
+static CLK_FIXED_FACTOR_HW(v4nrpll_409m6, "v4nrpll-409m6", &v4nrpll.common.hw, 6, 1, 0);
+static CLK_FIXED_FACTOR_HW(v4nrpll_614m4, "v4nrpll-614m4", &v4nrpll.common.hw, 4, 1, 0);
+static CLK_FIXED_FACTOR_HW(v4nrpll_819m2, "v4nrpll-819m2", &v4nrpll.common.hw, 3, 1, 0);
+static CLK_FIXED_FACTOR_HW(v4nrpll_1228m8, "v4nrpll-1228m8", &v4nrpll.common.hw, 2, 1, 0);
+
+static struct sprd_clk_common *ums9620_g5l_pll_clks[] = {
+ /* address base is 0x64324000 */
+ &tgpll.common,
+ &psr8pll.common,
+ &v4nrpll.common,
+};
+
+static struct clk_hw_onecell_data ums9620_g5l_pll_hws = {
+ .hws = {
+ [CLK_TGPLL] = &tgpll.common.hw,
+ [CLK_TGPLL_12M] = &tgpll_12m.hw,
+ [CLK_TGPLL_24M] = &tgpll_24m.hw,
+ [CLK_TGPLL_38M4] = &tgpll_38m4.hw,
+ [CLK_TGPLL_48M] = &tgpll_48m.hw,
+ [CLK_TGPLL_51M2] = &tgpll_51m2.hw,
+ [CLK_TGPLL_64M] = &tgpll_64m.hw,
+ [CLK_TGPLL_76M8] = &tgpll_76m8.hw,
+ [CLK_TGPLL_96M] = &tgpll_96m.hw,
+ [CLK_TGPLL_128M] = &tgpll_128m.hw,
+ [CLK_TGPLL_153M6] = &tgpll_153m6.hw,
+ [CLK_TGPLL_192M] = &tgpll_192m.hw,
+ [CLK_TGPLL_256M] = &tgpll_256m.hw,
+ [CLK_TGPLL_307M2] = &tgpll_307m2.hw,
+ [CLK_TGPLL_384M] = &tgpll_384m.hw,
+ [CLK_TGPLL_512M] = &tgpll_512m.hw,
+ [CLK_TGPLL_614M4] = &tgpll_614m4.hw,
+ [CLK_TGPLL_768M] = &tgpll_768m.hw,
+ [CLK_PSR8PLL] = &psr8pll.common.hw,
+ [CLK_V4NRPLL] = &v4nrpll.common.hw,
+ [CLK_V4NRPLL_38M4] = &v4nrpll_38m4.hw,
+ [CLK_V4NRPLL_409M6] = &v4nrpll_409m6.hw,
+ [CLK_V4NRPLL_614M4] = &v4nrpll_614m4.hw,
+ [CLK_V4NRPLL_819M2] = &v4nrpll_819m2.hw,
+ [CLK_V4NRPLL_1228M8] = &v4nrpll_1228m8.hw,
+ },
+ .num = CLK_ANLG_PHY_G5L_NUM,
+};
+
+static struct sprd_clk_desc ums9620_g5l_pll_desc = {
+ .clk_clks = ums9620_g5l_pll_clks,
+ .num_clk_clks = ARRAY_SIZE(ums9620_g5l_pll_clks),
+ .hw_clks = &ums9620_g5l_pll_hws,
+};
+
+/* pll at g5r */
+static struct clk_bit_field f_gpll[PLL_FACT_MAX] = {
+ { .shift = 14, .width = 1 }, /* lock_done */
+ { .shift = 0, .width = 0 }, /* div_s */
+ { .shift = 0, .width = 0 }, /* mod_en */
+ { .shift = 0, .width = 0 }, /* sdm_en */
+ { .shift = 0, .width = 0 }, /* refin */
+ { .shift = 0, .width = 3 }, /* icp */
+ { .shift = 3, .width = 11 }, /* n */
+ { .shift = 0, .width = 0 }, /* nint */
+ { .shift = 0, .width = 0 }, /* kint */
+ { .shift = 0, .width = 0 }, /* prediv */
+ { .shift = 35, .width = 1 }, /* postdiv */
+};
+
+static SPRD_PLL_FW_NAME(gpll, "gpll", "ext-26m", 0x0,
+ 3, itable_rpll, f_gpll, 240,
+ 1000, 1000, 1, 1600000000);
+static CLK_FIXED_FACTOR_HW(gpll_680m, "gpll-680m", &gpll.common.hw, 5, 2, 0);
+static CLK_FIXED_FACTOR_HW(gpll_850m, "gpll-850m", &gpll.common.hw, 2, 1, 0);
+
+#define f_aipll f_gpll
+static SPRD_PLL_FW_NAME(aipll, "aipll", "ext-26m", 0x18,
+ 3, itable_rpll, f_aipll, 240,
+ 1000, 1000, 1, 1600000000);
+
+#define f_vdsppll f_gpll
+static SPRD_PLL_FW_NAME(vdsppll, "vdsppll", "ext-26m", 0x30,
+ 3, itable_rpll, f_vdsppll, 240,
+ 1000, 1000, 1, 1600000000);
+
+static struct clk_bit_field f_cpll[PLL_FACT_MAX] = {
+ { .shift = 17, .width = 1 }, /* lock_done */
+ { .shift = 0, .width = 1 }, /* div_s */
+ { .shift = 1, .width = 1 }, /* mod_en */
+ { .shift = 2, .width = 1 }, /* sdm_en */
+ { .shift = 0, .width = 0 }, /* refin */
+ { .shift = 3, .width = 3 }, /* icp */
+ { .shift = 6, .width = 11 }, /* n */
+ { .shift = 55, .width = 7 }, /* nint */
+ { .shift = 32, .width = 23}, /* kint */
+ { .shift = 0, .width = 0 }, /* prediv */
+ { .shift = 68, .width = 1 }, /* postdiv */
+};
+
+static SPRD_PLL_FW_NAME(cpll, "cpll", "ext-26m", 0x48,
+ 3, itable_rpll, f_cpll, 240,
+ 1000, 1000, 1, 1600000000);
+
+static struct clk_bit_field f_audpll[PLL_FACT_MAX] = {
+ { .shift = 17, .width = 1 }, /* lock_done */
+ { .shift = 0, .width = 1 }, /* div_s */
+ { .shift = 1, .width = 1 }, /* mod_en */
+ { .shift = 2, .width = 1 }, /* sdm_en */
+ { .shift = 0, .width = 0 }, /* refin */
+ { .shift = 3, .width = 3 }, /* icp */
+ { .shift = 6, .width = 11 }, /* n */
+ { .shift = 55, .width = 7 }, /* nint */
+ { .shift = 32, .width = 23}, /* kint */
+ { .shift = 0, .width = 0 }, /* prediv */
+ { .shift = 67, .width = 1 }, /* postdiv */
+};
+
+static SPRD_PLL_FW_NAME(audpll, "audpll", "ext-26m", 0x68,
+ 3, itable_rpll, f_audpll, 240,
+ 1000, 1000, 1, 1600000000);
+static CLK_FIXED_FACTOR_HW(audpll_38m4, "audpll-38m4", &audpll.common.hw, 32, 1, 0);
+static CLK_FIXED_FACTOR_HW(audpll_24m57, "audpll-24m57", &audpll.common.hw, 50, 1, 0);
+static CLK_FIXED_FACTOR_HW(audpll_19m2, "audpll-19m2", &audpll.common.hw, 64, 1, 0);
+static CLK_FIXED_FACTOR_HW(audpll_12m28, "audpll-12m28", &audpll.common.hw, 100, 1, 0);
+
+#define f_phyr8pll f_gpll
+static SPRD_PLL_HW(phyr8pll, "phyr8pll", &phyr8pll_gate.common.hw, 0x90,
+ 3, itable_rpll, f_phyr8pll, 240,
+ 1000, 1000, 1, 1600000000);
+
+#define f_pixelpll f_audpll
+static SPRD_PLL_FW_NAME(pixelpll, "pixelpll", "ext-26m", 0xa8,
+ 3, itable_rpll, f_pixelpll, 240,
+ 1000, 1000, 1, 1600000000);
+static CLK_FIXED_FACTOR_HW(pixelpll_668m25, "pixelpll-668m25", &pixelpll.common.hw, 4, 1, 0);
+static CLK_FIXED_FACTOR_HW(pixelpll_297m, "pixelpll-297m", &pixelpll.common.hw, 9, 1, 0);
+
+static struct sprd_clk_common *ums9620_g5r_pll_clks[] = {
+ /* address base is 0x64320000 */
+ &gpll.common,
+ &aipll.common,
+ &vdsppll.common,
+ &cpll.common,
+ &audpll.common,
+ &phyr8pll.common,
+ &pixelpll.common,
+};
+
+static struct clk_hw_onecell_data ums9620_g5r_pll_hws = {
+ .hws = {
+ [CLK_GPLL] = &gpll.common.hw,
+ [CLK_GPLL_680M] = &gpll_680m.hw,
+ [CLK_GPLL_850M] = &gpll_850m.hw,
+ [CLK_AIPLL] = &aipll.common.hw,
+ [CLK_VDSPPLL] = &vdsppll.common.hw,
+ [CLK_CPLL] = &cpll.common.hw,
+ [CLK_AUDPLL] = &audpll.common.hw,
+ [CLK_AUDPLL_38M4] = &audpll_38m4.hw,
+ [CLK_AUDPLL_24M57] = &audpll_24m57.hw,
+ [CLK_AUDPLL_19M2] = &audpll_19m2.hw,
+ [CLK_AUDPLL_12M28] = &audpll_12m28.hw,
+ [CLK_PHYR8PLL] = &phyr8pll.common.hw,
+ [CLK_PIXELPLL] = &pixelpll.common.hw,
+ [CLK_PIXELPLL_668M25] = &pixelpll_668m25.hw,
+ [CLK_PIXELPLL_297M] = &pixelpll_297m.hw,
+ },
+ .num = CLK_ANLG_PHY_G5R_NUM,
+};
+
+static struct sprd_clk_desc ums9620_g5r_pll_desc = {
+ .clk_clks = ums9620_g5r_pll_clks,
+ .num_clk_clks = ARRAY_SIZE(ums9620_g5r_pll_clks),
+ .hw_clks = &ums9620_g5r_pll_hws,
+};
+
+/* pll at g8 */
+static const u64 itable_mpllb[] = { 13, 0, 0,
+ 1200000000ULL, 1400000000ULL, 1600000000ULL,
+ 1800000000ULL, 2000000000ULL, 2200000000ULL,
+ 2400000000ULL, 2600000000ULL, 2800000000ULL,
+ 3000000000ULL, 3200000000ULL
+};
+
+static struct clk_bit_field f_mpllb[PLL_FACT_MAX] = {
+ { .shift = 15, .width = 1 }, /* lock_done */
+ { .shift = 0, .width = 0 }, /* div_s */
+ { .shift = 0, .width = 0 }, /* mod_en */
+ { .shift = 0, .width = 0 }, /* sdm_en */
+ { .shift = 0, .width = 0 }, /* refin */
+ { .shift = 0, .width = 4 }, /* icp */
+ { .shift = 4, .width = 11 }, /* n */
+ { .shift = 0, .width = 0 }, /* nint */
+ { .shift = 0, .width = 0}, /* kint */
+ { .shift = 0, .width = 0 }, /* prediv */
+ { .shift = 67, .width = 4 }, /* postdiv */
+};
+
+static SPRD_PLL_FW_NAME(mpllb, "mpllb", "ext-26m", 0x0,
+ 4, itable_mpllb, f_mpllb, 240,
+ 1000, 1000, 1, 1200000000);
+
+static struct sprd_clk_common *ums9620_g8_pll_clks[] = {
+ /* address base is 0x6432c000 */
+ &mpllb.common,
+};
+
+static struct clk_hw_onecell_data ums9620_g8_pll_hws = {
+ .hws = {
+ [CLK_MPLLB] = &mpllb.common.hw,
+ },
+ .num = CLK_ANLG_PHY_G8_NUM,
+};
+
+static struct sprd_clk_desc ums9620_g8_pll_desc = {
+ .clk_clks = ums9620_g8_pll_clks,
+ .num_clk_clks = ARRAY_SIZE(ums9620_g8_pll_clks),
+ .hw_clks = &ums9620_g8_pll_hws,
+};
+
+/* pll at g9 */
+static struct clk_bit_field f_mpllm[PLL_FACT_MAX] = {
+ { .shift = 15, .width = 1 }, /* lock_done */
+ { .shift = 0, .width = 0 }, /* div_s */
+ { .shift = 0, .width = 0 }, /* mod_en */
+ { .shift = 0, .width = 0 }, /* sdm_en */
+ { .shift = 0, .width = 0 }, /* refin */
+ { .shift = 0, .width = 4 }, /* icp */
+ { .shift = 4, .width = 11 }, /* n */
+ { .shift = 0, .width = 0 }, /* nint */
+ { .shift = 0, .width = 0 }, /* kint */
+ { .shift = 0, .width = 0 }, /* prediv */
+ { .shift = 68, .width = 4 }, /* postdiv */
+};
+
+static SPRD_PLL_FW_NAME(mpllm, "mpllm", "ext-26m", 0x0,
+ 4, itable_mpllb, f_mpllm, 240,
+ 1000, 1000, 1, 1200000000);
+
+static struct sprd_clk_common *ums9620_g9_pll_clks[] = {
+ /* address base is 0x64330000 */
+ &mpllm.common,
+};
+
+static struct clk_hw_onecell_data ums9620_g9_pll_hws = {
+ .hws = {
+ [CLK_MPLLM] = &mpllm.common.hw,
+ },
+ .num = CLK_ANLG_PHY_G9_NUM,
+};
+
+static struct sprd_clk_desc ums9620_g9_pll_desc = {
+ .clk_clks = ums9620_g9_pll_clks,
+ .num_clk_clks = ARRAY_SIZE(ums9620_g9_pll_clks),
+ .hw_clks = &ums9620_g9_pll_hws,
+};
+
+/* pll at g10 */
+#define f_mplll f_mpllm
+static SPRD_PLL_FW_NAME(mplll, "mplll", "ext-26m", 0x0,
+ 4, itable_mpllb, f_mplll, 240,
+ 1000, 1000, 1, 1200000000);
+
+static struct clk_bit_field f_mplls[PLL_FACT_MAX] = {
+ { .shift = 15, .width = 1 }, /* lock_done */
+ { .shift = 0, .width = 0 }, /* div_s */
+ { .shift = 0, .width = 0 }, /* mod_en */
+ { .shift = 0, .width = 0 }, /* sdm_en */
+ { .shift = 0, .width = 0 }, /* refin */
+ { .shift = 0, .width = 4 }, /* icp */
+ { .shift = 4, .width = 11 }, /* n */
+ { .shift = 0, .width = 0 }, /* nint */
+ { .shift = 0, .width = 0}, /* kint */
+ { .shift = 0, .width = 0 }, /* prediv */
+ { .shift = 67, .width = 4 }, /* postdiv */
+};
+
+
+static SPRD_PLL_FW_NAME(mplls, "mplls", "ext-26m", 0x20,
+ 4, itable_mpllb, f_mplls, 240,
+ 1000, 1000, 1, 1200000000);
+
+static struct sprd_clk_common *ums9620_g10_pll_clks[] = {
+ /* address base is 0x64334000 */
+ &mplll.common,
+ &mplls.common,
+};
+
+static struct clk_hw_onecell_data ums9620_g10_pll_hws = {
+ .hws = {
+ [CLK_MPLLL] = &mplll.common.hw,
+ [CLK_MPLLS] = &mplls.common.hw,
+ },
+ .num = CLK_ANLG_PHY_G10_NUM,
+};
+
+static struct sprd_clk_desc ums9620_g10_pll_desc = {
+ .clk_clks = ums9620_g10_pll_clks,
+ .num_clk_clks = ARRAY_SIZE(ums9620_g10_pll_clks),
+ .hw_clks = &ums9620_g10_pll_hws,
+};
+
+/* ap apb gates */
+static SPRD_SC_GATE_CLK_FW_NAME(iis0_eb, "iis0-eb", "ext-26m", 0x0,
+ 0x1000, BIT(1), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(iis1_eb, "iis1-eb", "ext-26m", 0x0,
+ 0x1000, BIT(2), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(iis2_eb, "iis2-eb", "ext-26m", 0x0,
+ 0x1000, BIT(3), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(spi0_eb, "spi0-eb", "ext-26m", 0x0,
+ 0x1000, BIT(5), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(spi1_eb, "spi1-eb", "ext-26m", 0x0,
+ 0x1000, BIT(6), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(spi2_eb, "spi2-eb", "ext-26m", 0x0,
+ 0x1000, BIT(7), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(uart3_eb, "uart3-eb", "ext-26m", 0x0,
+ 0x1000, BIT(8), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(uart0_eb, "uart0-eb", "ext-26m", 0x0,
+ 0x1000, BIT(14), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(uart1_eb, "uart1-eb", "ext-26m", 0x0,
+ 0x1000, BIT(15), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(uart2_eb, "uart2-eb", "ext-26m", 0x0,
+ 0x1000, BIT(16), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(spi0_lfin_eb, "spi0-lfin-eb", "ext-26m", 0x0,
+ 0x1000, BIT(18), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(spi1_lfin_eb, "spi1-lfin-eb", "ext-26m", 0x0,
+ 0x1000, BIT(19), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(spi2_lfin_eb, "spi2-lfin-eb", "ext-26m", 0x0,
+ 0x1000, BIT(20), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(spi3_lfin_eb, "spi3-lfin-eb", "ext-26m", 0x0,
+ 0x1000, BIT(21), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ce_sec_eb, "ce-sec-eb", "ext-26m", 0x0,
+ 0x1000, BIT(30), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ce_pub_eb, "ce-pub-eb", "ext-26m", 0x0,
+ 0x1000, BIT(31), 0, 0);
+
+static struct sprd_clk_common *ums9620_apapb_gate[] = {
+ /* address base is 0x20100000 */
+ &iis0_eb.common,
+ &iis1_eb.common,
+ &iis2_eb.common,
+ &spi0_eb.common,
+ &spi1_eb.common,
+ &spi2_eb.common,
+ &uart3_eb.common,
+ &uart0_eb.common,
+ &uart1_eb.common,
+ &uart2_eb.common,
+ &spi0_lfin_eb.common,
+ &spi1_lfin_eb.common,
+ &spi2_lfin_eb.common,
+ &spi3_lfin_eb.common,
+ &ce_sec_eb.common,
+ &ce_pub_eb.common,
+};
+
+static struct clk_hw_onecell_data ums9620_apapb_gate_hws = {
+ .hws = {
+ [CLK_IIS0_EB] = &iis0_eb.common.hw,
+ [CLK_IIS1_EB] = &iis1_eb.common.hw,
+ [CLK_IIS2_EB] = &iis2_eb.common.hw,
+ [CLK_SPI0_EB] = &spi0_eb.common.hw,
+ [CLK_SPI1_EB] = &spi1_eb.common.hw,
+ [CLK_SPI2_EB] = &spi2_eb.common.hw,
+ [CLK_UART3_EB] = &uart3_eb.common.hw,
+ [CLK_UART0_EB] = &uart0_eb.common.hw,
+ [CLK_UART1_EB] = &uart1_eb.common.hw,
+ [CLK_UART2_EB] = &uart2_eb.common.hw,
+ [CLK_SPI0_LFIN_EB] = &spi0_lfin_eb.common.hw,
+ [CLK_SPI1_LFIN_EB] = &spi1_lfin_eb.common.hw,
+ [CLK_SPI2_LFIN_EB] = &spi2_lfin_eb.common.hw,
+ [CLK_SPI3_LFIN_EB] = &spi3_lfin_eb.common.hw,
+ [CLK_CE_SEC_EB] = &ce_sec_eb.common.hw,
+ [CLK_CE_PUB_EB] = &ce_pub_eb.common.hw,
+ },
+ .num = CLK_AP_APB_GATE_NUM,
+};
+
+static struct sprd_clk_desc ums9620_apapb_gate_desc = {
+ .clk_clks = ums9620_apapb_gate,
+ .num_clk_clks = ARRAY_SIZE(ums9620_apapb_gate),
+ .hw_clks = &ums9620_apapb_gate_hws,
+};
+
+/* ap ahb gates */
+/* ap related gate clocks configure CLK_IGNORE_UNUSED because they are
+ * configured as enabled state to support display working during uboot phase.
+ * if their clocks are gated during kernel phase, it will affect the normal
+ * working of display..
+ */
+static SPRD_SC_GATE_CLK_FW_NAME(sdio0_eb, "sdio0-eb", "ext-26m", 0x0,
+ 0x1000, BIT(0), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(sdio1_eb, "sdio1-eb", "ext-26m", 0x0,
+ 0x1000, BIT(1), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(sdio2_eb, "sdio2-eb", "ext-26m", 0x0,
+ 0x1000, BIT(2), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(emmc_eb, "emmc-eb", "ext-26m", 0x0,
+ 0x1000, BIT(3), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(dma_pub_eb, "dma-pub-eb", "ext-26m", 0x0,
+ 0x1000, BIT(4), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ufs_eb, "ufs-eb", "ext-26m", 0x0,
+ 0x1000, BIT(6), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ckg_eb, "ckg-eb", "ext-26m", 0x0,
+ 0x1000, BIT(7), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(busmon_clk_eb, "busmon-clk-eb", "ext-26m", 0x0,
+ 0x1000, BIT(8), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ap2emc_eb, "ap2emc-eb", "ext-26m", 0x0,
+ 0x1000, BIT(9), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(i2c0_eb, "i2c0-eb", "ext-26m", 0x0,
+ 0x1000, BIT(10), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(i2c1_eb, "i2c1-eb", "ext-26m", 0x0,
+ 0x1000, BIT(11), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(i2c2_eb, "i2c2-eb", "ext-26m", 0x0,
+ 0x1000, BIT(12), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(i2c3_eb, "i2c3-eb", "ext-26m", 0x0,
+ 0x1000, BIT(13), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(i2c4_eb, "i2c4-eb", "ext-26m", 0x0,
+ 0x1000, BIT(14), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(i2c5_eb, "i2c5-eb", "ext-26m", 0x0,
+ 0x1000, BIT(15), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(i2c6_eb, "i2c6-eb", "ext-26m", 0x0,
+ 0x1000, BIT(16), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(i2c7_eb, "i2c7-eb", "ext-26m", 0x0,
+ 0x1000, BIT(17), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(i2c8_eb, "i2c8-eb", "ext-26m", 0x0,
+ 0x1000, BIT(18), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(i2c9_eb, "i2c9-eb", "ext-26m", 0x0,
+ 0x1000, BIT(19), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ufs_tx_eb, "ufs-tx-eb", "ext-26m", 0x1c,
+ 0x1000, BIT(0), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ufs_rx_0_eb, "ufs-rx-0-eb", "ext-26m", 0x1c,
+ 0x1000, BIT(1), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ufs_rx_1_eb, "ufs-rx-1-eb", "ext-26m", 0x1c,
+ 0x1000, BIT(2), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ufs_cfg_eb, "ufs-cfg-eb", "ext-26m", 0x1c,
+ 0x1000, BIT(3), 0, 0);
+
+static struct sprd_clk_common *ums9620_apahb_gate[] = {
+ /* address base is 0x20000000 */
+ &sdio0_eb.common,
+ &sdio1_eb.common,
+ &sdio2_eb.common,
+ &emmc_eb.common,
+ &dma_pub_eb.common,
+ &ufs_eb.common,
+ &ckg_eb.common,
+ &busmon_clk_eb.common,
+ &ap2emc_eb.common,
+ &i2c0_eb.common,
+ &i2c1_eb.common,
+ &i2c2_eb.common,
+ &i2c3_eb.common,
+ &i2c4_eb.common,
+ &i2c5_eb.common,
+ &i2c6_eb.common,
+ &i2c7_eb.common,
+ &i2c8_eb.common,
+ &i2c9_eb.common,
+ &ufs_tx_eb.common,
+ &ufs_rx_0_eb.common,
+ &ufs_rx_1_eb.common,
+ &ufs_cfg_eb.common,
+};
+
+static struct clk_hw_onecell_data ums9620_apahb_gate_hws = {
+ .hws = {
+ [CLK_SDIO0_EB] = &sdio0_eb.common.hw,
+ [CLK_SDIO1_EB] = &sdio1_eb.common.hw,
+ [CLK_SDIO2_EB] = &sdio2_eb.common.hw,
+ [CLK_EMMC_EB] = &emmc_eb.common.hw,
+ [CLK_DMA_PUB_EB] = &dma_pub_eb.common.hw,
+ [CLK_UFS_EB] = &ufs_eb.common.hw,
+ [CLK_CKG_EB] = &ckg_eb.common.hw,
+ [CLK_BUSMON_CLK_EB] = &busmon_clk_eb.common.hw,
+ [CLK_AP2EMC_EB] = &ap2emc_eb.common.hw,
+ [CLK_I2C0_EB] = &i2c0_eb.common.hw,
+ [CLK_I2C1_EB] = &i2c1_eb.common.hw,
+ [CLK_I2C2_EB] = &i2c2_eb.common.hw,
+ [CLK_I2C3_EB] = &i2c3_eb.common.hw,
+ [CLK_I2C4_EB] = &i2c4_eb.common.hw,
+ [CLK_I2C5_EB] = &i2c5_eb.common.hw,
+ [CLK_I2C6_EB] = &i2c6_eb.common.hw,
+ [CLK_I2C7_EB] = &i2c7_eb.common.hw,
+ [CLK_I2C8_EB] = &i2c8_eb.common.hw,
+ [CLK_I2C9_EB] = &i2c9_eb.common.hw,
+ [CLK_UFS_TX_EB] = &ufs_tx_eb.common.hw,
+ [CLK_UFS_RX_0_EB] = &ufs_rx_0_eb.common.hw,
+ [CLK_UFS_RX_1_EB] = &ufs_rx_1_eb.common.hw,
+ [CLK_UFS_CFG_EB] = &ufs_cfg_eb.common.hw,
+ },
+ .num = CLK_AP_AHB_GATE_NUM,
+};
+
+static struct sprd_clk_desc ums9620_apahb_gate_desc = {
+ .clk_clks = ums9620_apahb_gate,
+ .num_clk_clks = ARRAY_SIZE(ums9620_apahb_gate),
+ .hw_clks = &ums9620_apahb_gate_hws,
+};
+
+/* ap clks */
+static const struct clk_parent_data ap_apb_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_64m.hw },
+ { .hw = &tgpll_96m.hw },
+ { .hw = &tgpll_128m.hw },
+};
+static SPRD_MUX_CLK_DATA(ap_apb, "ap-apb", ap_apb_parents, 0x28,
+ 0, 2, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data ap_axi_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_76m8.hw },
+ { .hw = &tgpll_128m.hw },
+ { .hw = &tgpll_256m.hw },
+};
+static SPRD_MUX_CLK_DATA(ap_axi, "ap-axi", ap_axi_parents, 0x34,
+ 0, 2, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data ap2emc_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_76m8.hw },
+ { .hw = &tgpll_128m.hw },
+ { .hw = &tgpll_256m.hw },
+ { .hw = &tgpll_512m.hw },
+};
+static SPRD_MUX_CLK_DATA(ap2emc, "ap2emc", ap2emc_parents, 0x40,
+ 0, 3, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data ap_uart_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_48m.hw },
+ { .hw = &tgpll_51m2.hw },
+ { .hw = &tgpll_96m.hw },
+};
+static SPRD_COMP_CLK_DATA_OFFSET(ap_uart0, "ap-uart0", ap_uart_parents,
+ 0x4c, 0, 2, -4, 0, 3, 0);
+static SPRD_COMP_CLK_DATA_OFFSET(ap_uart1, "ap-uart1", ap_uart_parents,
+ 0x58, 0, 2, -4, 0, 3, 0);
+static SPRD_COMP_CLK_DATA_OFFSET(ap_uart2, "ap-uart2", ap_uart_parents,
+ 0x64, 0, 2, -4, 0, 3, 0);
+static SPRD_COMP_CLK_DATA_OFFSET(ap_uart3, "ap-uart3", ap_uart_parents,
+ 0x70, 0, 2, -4, 0, 3, 0);
+
+static const struct clk_parent_data i2c_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_48m.hw },
+ { .hw = &tgpll_51m2.hw },
+ { .hw = &tgpll_153m6.hw },
+};
+static SPRD_COMP_CLK_DATA_OFFSET(ap_i2c0, "ap-i2c0", i2c_parents,
+ 0x7c, 0, 2, -4, 0, 3, 0);
+static SPRD_COMP_CLK_DATA_OFFSET(ap_i2c1, "ap-i2c1", i2c_parents,
+ 0x88, 0, 2, -4, 0, 3, 0);
+static SPRD_COMP_CLK_DATA_OFFSET(ap_i2c2, "ap-i2c2", i2c_parents,
+ 0x94, 0, 2, -4, 0, 3, 0);
+static SPRD_COMP_CLK_DATA_OFFSET(ap_i2c3, "ap-i2c3", i2c_parents,
+ 0xa0, 0, 2, -4, 0, 3, 0);
+static SPRD_COMP_CLK_DATA_OFFSET(ap_i2c4, "ap-i2c4", i2c_parents,
+ 0xac, 0, 2, -4, 0, 3, 0);
+static SPRD_COMP_CLK_DATA_OFFSET(ap_i2c5, "ap-i2c5", i2c_parents,
+ 0xb8, 0, 2, -4, 0, 3, 0);
+static SPRD_COMP_CLK_DATA_OFFSET(ap_i2c6, "ap-i2c6", i2c_parents,
+ 0xc4, 0, 2, -4, 0, 3, 0);
+static SPRD_COMP_CLK_DATA_OFFSET(ap_i2c7, "ap-i2c7", i2c_parents,
+ 0xd0, 0, 2, -4, 0, 3, 0);
+static SPRD_COMP_CLK_DATA_OFFSET(ap_i2c8, "ap-i2c8", i2c_parents,
+ 0xdc, 0, 2, -4, 0, 3, 0);
+static SPRD_COMP_CLK_DATA_OFFSET(ap_i2c9, "ap-i2c9", i2c_parents,
+ 0xe8, 0, 2, -4, 0, 3, 0);
+
+static const struct clk_parent_data iis_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_128m.hw },
+ { .hw = &tgpll_153m6.hw },
+ { .hw = &tgpll_192m.hw },
+ { .hw = &tgpll_256m.hw },
+ { .hw = &tgpll_512m.hw },
+};
+static SPRD_COMP_CLK_DATA_OFFSET(ap_iis0, "ap-iis0", iis_parents,
+ 0xf4, 0, 3, -4, 0, 6, 0);
+static SPRD_COMP_CLK_DATA_OFFSET(ap_iis1, "ap-iis1", iis_parents,
+ 0x100, 0, 3, -4, 0, 6, 0);
+static SPRD_COMP_CLK_DATA_OFFSET(ap_iis2, "ap-iis2", iis_parents,
+ 0x10c, 0, 3, -4, 0, 6, 0);
+
+static const struct clk_parent_data ap_ce_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_96m.hw },
+ { .hw = &tgpll_192m.hw },
+ { .hw = &tgpll_256m.hw },
+};
+static SPRD_MUX_CLK_DATA(ap_ce, "ap-ce", ap_ce_parents, 0x118,
+ 0, 3, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data sdio_parents[] = {
+ { .hw = &clk_1m.hw },
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_307m2.hw },
+ { .hw = &tgpll_384m.hw },
+ { .hw = &rpll_390m.hw },
+ { .hw = &v4nrpll_409m6.hw },
+};
+static SPRD_COMP_CLK_DATA_OFFSET(emmc_2x, "emmc-2x", sdio_parents,
+ 0x124, 0, 3, -4, 0, 11, 0);
+static SPRD_DIV_CLK_HW(emmc_1x, "emmc-1x", &emmc_2x.common.hw, 0x12c,
+ 0, 1, 0);
+static const struct clk_parent_data ufs_tx_rx_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_128m.hw },
+ { .hw = &tgpll_256m.hw },
+ { .hw = &tgpll_307m2.hw },
+};
+static SPRD_COMP_CLK_DATA_OFFSET(ufs_tx, "ufs-tx", ufs_tx_rx_parents,
+ 0x13c, 0, 2, -4, 0, 2, 0);
+static SPRD_COMP_CLK_DATA_OFFSET(ufs_rx, "ufs-rx", ufs_tx_rx_parents,
+ 0x148, 0, 2, -4, 0, 2, 0);
+static SPRD_COMP_CLK_DATA_OFFSET(ufs_rx_1, "ufs-rx-1", ufs_tx_rx_parents,
+ 0x154, 0, 2, -4, 0, 2, 0);
+
+static const struct clk_parent_data ufs_cfg_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_51m2.hw },
+};
+static SPRD_COMP_CLK_DATA_OFFSET(ufs_cfg, "ufs-cfg", ufs_cfg_parents,
+ 0x160, 0, 1, -4, 0, 6, 0);
+
+static struct sprd_clk_common *ums9620_ap_clks[] = {
+ /* address base is 0x20010000 */
+ &ap_apb.common,
+ &ap_axi.common,
+ &ap2emc.common,
+ &ap_uart0.common,
+ &ap_uart1.common,
+ &ap_uart2.common,
+ &ap_uart3.common,
+ &ap_i2c0.common,
+ &ap_i2c1.common,
+ &ap_i2c2.common,
+ &ap_i2c3.common,
+ &ap_i2c4.common,
+ &ap_i2c5.common,
+ &ap_i2c6.common,
+ &ap_i2c7.common,
+ &ap_i2c8.common,
+ &ap_i2c9.common,
+ &ap_iis0.common,
+ &ap_iis1.common,
+ &ap_iis2.common,
+ &ap_ce.common,
+ &emmc_2x.common,
+ &emmc_1x.common,
+ &ufs_tx.common,
+ &ufs_rx.common,
+ &ufs_rx_1.common,
+ &ufs_cfg.common,
+};
+
+static struct clk_hw_onecell_data ums9620_ap_clk_hws = {
+ .hws = {
+ [CLK_AP_APB] = &ap_apb.common.hw,
+ [CLK_AP_AXI] = &ap_axi.common.hw,
+ [CLK_AP2EMC] = &ap2emc.common.hw,
+ [CLK_AP_UART0] = &ap_uart0.common.hw,
+ [CLK_AP_UART1] = &ap_uart1.common.hw,
+ [CLK_AP_UART2] = &ap_uart2.common.hw,
+ [CLK_AP_UART3] = &ap_uart3.common.hw,
+ [CLK_AP_I2C0] = &ap_i2c0.common.hw,
+ [CLK_AP_I2C1] = &ap_i2c1.common.hw,
+ [CLK_AP_I2C2] = &ap_i2c2.common.hw,
+ [CLK_AP_I2C3] = &ap_i2c3.common.hw,
+ [CLK_AP_I2C4] = &ap_i2c4.common.hw,
+ [CLK_AP_I2C5] = &ap_i2c5.common.hw,
+ [CLK_AP_I2C6] = &ap_i2c6.common.hw,
+ [CLK_AP_I2C7] = &ap_i2c7.common.hw,
+ [CLK_AP_I2C8] = &ap_i2c8.common.hw,
+ [CLK_AP_I2C9] = &ap_i2c9.common.hw,
+ [CLK_AP_IIS0] = &ap_iis0.common.hw,
+ [CLK_AP_IIS1] = &ap_iis1.common.hw,
+ [CLK_AP_IIS2] = &ap_iis2.common.hw,
+ [CLK_AP_CE] = &ap_ce.common.hw,
+ [CLK_EMMC_2X] = &emmc_2x.common.hw,
+ [CLK_EMMC_1X] = &emmc_1x.common.hw,
+ [CLK_UFS_TX] = &ufs_tx.common.hw,
+ [CLK_UFS_RX] = &ufs_rx.common.hw,
+ [CLK_UFS_RX_1] = &ufs_rx_1.common.hw,
+ [CLK_UFS_CFG] = &ufs_cfg.common.hw,
+ },
+ .num = CLK_AP_CLK_NUM,
+};
+
+static struct sprd_clk_desc ums9620_ap_clk_desc = {
+ .clk_clks = ums9620_ap_clks,
+ .num_clk_clks = ARRAY_SIZE(ums9620_ap_clks),
+ .hw_clks = &ums9620_ap_clk_hws,
+};
+
+/* aon apb gates */
+static SPRD_SC_GATE_CLK_FW_NAME(rc100m_cal_eb, "rc100m-cal-eb", "ext-26m", 0x0,
+ 0x1000, BIT(0), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(rfti_eb, "rfti-eb", "ext-26m", 0x0,
+ 0x1000, BIT(1), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(djtag_eb, "djtag-eb", "ext-26m", 0x0,
+ 0x1000, BIT(3), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(aux0_eb, "aux0-eb", "ext-26m", 0x0,
+ 0x1000, BIT(4), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(aux1_eb, "aux1-eb", "ext-26m", 0x0,
+ 0x1000, BIT(5), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(aux2_eb, "aux2-eb", "ext-26m", 0x0,
+ 0x1000, BIT(6), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(probe_eb, "probe-eb", "ext-26m", 0x0,
+ 0x1000, BIT(7), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(mm_eb, "mm-eb", "ext-26m", 0x0,
+ 0x1000, BIT(9), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(gpu_eb, "gpu-eb", "ext-26m", 0x0,
+ 0x1000, BIT(11), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(mspi_eb, "mspi-eb", "ext-26m", 0x0,
+ 0x1000, BIT(12), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ai_eb, "ai-eb", "ext-26m", 0x0,
+ 0x1000, BIT(13), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(apcpu_dap_eb, "apcpu-dap-eb", "ext-26m", 0x0,
+ 0x1000, BIT(14), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(aon_cssys_eb, "aon-cssys-eb", "ext-26m", 0x0,
+ 0x1000, BIT(15), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(cssys_apb_eb, "cssys-apb-eb", "ext-26m", 0x0,
+ 0x1000, BIT(16), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(cssys_pub_eb, "cssys-pub-eb", "ext-26m", 0x0,
+ 0x1000, BIT(17), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(dpu_vsp_eb, "dpu-vsp-eb", "ext-26m", 0x0,
+ 0x1000, BIT(21), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(dsi_cfg_eb, "dsi-cfg-eb", "ext-26m", 0x0,
+ 0x1000, BIT(31), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(efuse_eb, "efuse-eb", "ext-26m", 0x4,
+ 0x1000, BIT(0), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(gpio_eb, "gpio-eb", "ext-26m", 0x4,
+ 0x1000, BIT(1), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(mbox_eb, "mbox-eb", "ext-26m", 0x4,
+ 0x1000, BIT(2), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(kpd_eb, "kpd-eb", "ext-26m", 0x4,
+ 0x1000, BIT(3), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(aon_syst_eb, "aon-syst-eb", "ext-26m", 0x4,
+ 0x1000, BIT(4), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ap_syst_eb, "ap-syst-eb", "ext-26m", 0x4,
+ 0x1000, BIT(5), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(aon_tmr_eb, "aon-tmr-eb", "ext-26m", 0x4,
+ 0x1000, BIT(6), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(aon_dvfs_top_eb, "aon-dvfs-top-eb", "ext-26m", 0x4,
+ 0x1000, BIT(7), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(aon_usb2_top_eb, "aon-usb2-top-eb", "ext-26m", 0x4,
+ 0x1000, BIT(8), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(otg_phy_eb, "otg-phy-eb", "ext-26m", 0x4,
+ 0x1000, BIT(9), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(splk_eb, "splk-eb", "ext-26m", 0x4,
+ 0x1000, BIT(10), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(pin_eb, "pin-eb", "ext-26m", 0x4,
+ 0x1000, BIT(11), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ana_eb, "ana-eb", "ext-26m", 0x4,
+ 0x1000, BIT(12), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(apcpu_busmon_eb, "apcpu-busmon-eb", "ext-26m", 0x4,
+ 0x1000, BIT(14), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ufs_ao_eb, "ufs-ao-eb", "ext-26m", 0x4,
+ 0x1000, BIT(15), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ise_apb_eb, "ise-apb-eb", "ext-26m", 0x4,
+ 0x1000, BIT(16), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(apcpu_ts0_eb, "apcpu-ts0-eb", "ext-26m", 0x4,
+ 0x1000, BIT(17), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(apb_busmon_eb, "apb-busmon-eb", "ext-26m", 0x4,
+ 0x1000, BIT(18), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(aon_iis_eb, "aon-iis-eb", "ext-26m", 0x4,
+ 0x1000, BIT(19), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(scc_eb, "scc-eb", "ext-26m", 0x4,
+ 0x1000, BIT(20), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(serdes_ctrl1_eb, "serdes-ctrl1-eb", "ext-26m", 0x4,
+ 0x1000, BIT(22), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(aux3_eb, "aux3-eb", "ext-26m", 0x4,
+ 0x1000, BIT(30), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(thm0_eb, "thm0-eb", "ext-26m", 0x8,
+ 0x1000, BIT(0), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(thm1_eb, "thm1-eb", "ext-26m", 0x8,
+ 0x1000, BIT(1), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(thm2_eb, "thm2-eb", "ext-26m", 0x8,
+ 0x1000, BIT(2), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(thm3_eb, "thm3-eb", "ext-26m", 0x8,
+ 0x1000, BIT(3), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(audcp_intc_eb, "audcp-intc-eb", "ext-26m", 0x8,
+ 0x1000, BIT(7), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(pmu_eb, "pmu-eb", "ext-26m", 0x8,
+ 0x1000, BIT(8), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(adi_eb, "adi-eb", "ext-26m", 0x8,
+ 0x1000, BIT(9), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(eic_eb, "eic-eb", "ext-26m", 0x8,
+ 0x1000, BIT(10), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ap_intc0_eb, "ap-intc0-eb", "ext-26m", 0x8,
+ 0x1000, BIT(11), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ap_intc1_eb, "ap-intc1-eb", "ext-26m", 0x8,
+ 0x1000, BIT(12), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ap_intc2_eb, "ap-intc2-eb", "ext-26m", 0x8,
+ 0x1000, BIT(13), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ap_intc3_eb, "ap-intc3-eb", "ext-26m", 0x8,
+ 0x1000, BIT(14), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ap_intc4_eb, "ap-intc4-eb", "ext-26m", 0x8,
+ 0x1000, BIT(15), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ap_intc5_eb, "ap-intc5-eb", "ext-26m", 0x8,
+ 0x1000, BIT(16), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ap_intc6_eb, "ap-intc6-eb", "ext-26m", 0x8,
+ 0x1000, BIT(17), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ap_intc7_eb, "ap-intc7-eb", "ext-26m", 0x8,
+ 0x1000, BIT(18), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(pscp_intc_eb, "pscp-intc-eb", "ext-26m", 0x8,
+ 0x1000, BIT(19), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(phycp_intc_eb, "phycp-intc-eb", "ext-26m", 0x8,
+ 0x1000, BIT(20), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ise_intc_eb, "ise-intc-eb", "ext-26m", 0x8,
+ 0x1000, BIT(21), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ap_tmr0_eb, "ap-tmr0-eb", "ext-26m", 0x8,
+ 0x1000, BIT(22), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ap_tmr1_eb, "ap-tmr1-eb", "ext-26m", 0x8,
+ 0x1000, BIT(23), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ap_tmr2_eb, "ap-tmr2-eb", "ext-26m", 0x8,
+ 0x1000, BIT(24), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(pwm0_eb, "pwm0-eb", "ext-26m", 0x8,
+ 0x1000, BIT(25), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(pwm1_eb, "pwm1-eb", "ext-26m", 0x8,
+ 0x1000, BIT(26), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(pwm2_eb, "pwm2-eb", "ext-26m", 0x8,
+ 0x1000, BIT(27), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(pwm3_eb, "pwm3-eb", "ext-26m", 0x8,
+ 0x1000, BIT(28), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ap_wdg_eb, "ap-wdg-eb", "ext-26m", 0x8,
+ 0x1000, BIT(29), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(apcpu_wdg_eb, "apcpu-wdg-eb", "ext-26m", 0x8,
+ 0x1000, BIT(30), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(serdes_ctrl0_eb, "serdes-ctrl0-eb", "ext-26m", 0x8,
+ 0x1000, BIT(31), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(arch_rtc_eb, "arch-rtc-eb", "ext-26m", 0x18,
+ 0x1000, BIT(0), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(kpd_rtc_eb, "kpd-rtc-eb", "ext-26m", 0x18,
+ 0x1000, BIT(1), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(aon_syst_rtc_eb, "aon-syst-rtc-eb", "ext-26m", 0x18,
+ 0x1000, BIT(2), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ap_syst_rtc_eb, "ap-syst-rtc-eb", "ext-26m", 0x18,
+ 0x1000, BIT(3), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(aon_tmr_rtc_eb, "aon-tmr-rtc-eb", "ext-26m", 0x18,
+ 0x1000, BIT(4), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(eic_rtc_eb, "eic-rtc-eb", "ext-26m", 0x18,
+ 0x1000, BIT(5), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(eic_rtcdv5_eb, "eic-rtcdv5-eb", "ext-26m", 0x18,
+ 0x1000, BIT(6), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ap_wdg_rtc_eb, "ap-wdg-rtc-eb", "ext-26m", 0x18,
+ 0x1000, BIT(7), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ac_wdg_rtc_eb, "ac-wdg-rtc-eb", "ext-26m", 0x18,
+ 0x1000, BIT(8), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ap_tmr0_rtc_eb, "ap-tmr0-rtc-eb", "ext-26m", 0x18,
+ 0x1000, BIT(9), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ap_tmr1_rtc_eb, "ap-tmr1-rtc-eb", "ext-26m", 0x18,
+ 0x1000, BIT(10), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ap_tmr2_rtc_eb, "ap-tmr2-rtc-eb", "ext-26m", 0x18,
+ 0x1000, BIT(11), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(dcxo_lc_rtc_eb, "dcxo-lc-rtc-eb", "ext-26m", 0x18,
+ 0x1000, BIT(12), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(bb_cal_rtc_eb, "bb-cal-rtc-eb", "ext-26m", 0x18,
+ 0x1000, BIT(13), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(dsi_csi_test_eb, "dsi-csi-test-eb", "ext-26m", 0x138,
+ 0x1000, BIT(8), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(djtag_tck_en, "djtag-tck-en", "ext-26m", 0x138,
+ 0x1000, BIT(9), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(dphy_ref_eb, "dphy-ref-eb", "ext-26m", 0x138,
+ 0x1000, BIT(10), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(dmc_ref_eb, "dmc-ref-eb", "ext-26m", 0x138,
+ 0x1000, BIT(11), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(otg_ref_eb, "otg-ref-eb", "ext-26m", 0x138,
+ 0x1000, BIT(12), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(tsen_eb, "tsen-eb", "ext-26m", 0x138,
+ 0x1000, BIT(13), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(tmr_eb, "tmr-eb", "ext-26m", 0x138,
+ 0x1000, BIT(14), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(rc100m_ref_eb, "rc100m-ref-eb", "ext-26m", 0x138,
+ 0x1000, BIT(15), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(rc100m_fdk_eb, "rc100m-fdk-eb", "ext-26m", 0x138,
+ 0x1000, BIT(16), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(debounce_eb, "debounce-eb", "ext-26m", 0x138,
+ 0x1000, BIT(17), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(det_32k_eb, "det-32k-eb", "ext-26m", 0x138,
+ 0x1000, BIT(18), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(top_cssys_en, "top-cssys-en", "ext-26m", 0x13c,
+ 0x1000, BIT(0), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ap_axi_en, "ap-axi-en", "ext-26m", 0x13c,
+ 0x1000, BIT(1), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(sdio0_2x_en, "sdio0-2x-en", "ext-26m", 0x13c,
+ 0x1000, BIT(2), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(sdio0_1x_en, "sdio0-1x-en", "ext-26m", 0x13c,
+ 0x1000, BIT(3), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(sdio1_2x_en, "sdio1-2x-en", "ext-26m", 0x13c,
+ 0x1000, BIT(4), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(sdio1_1x_en, "sdio1-1x-en", "ext-26m", 0x13c,
+ 0x1000, BIT(5), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(sdio2_2x_en, "sdio2-2x-en", "ext-26m", 0x13c,
+ 0x1000, BIT(6), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(sdio2_1x_en, "sdio2-1x-en", "ext-26m", 0x13c,
+ 0x1000, BIT(7), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(emmc_1x_en, "emmc-1x-en", "ext-26m", 0x13c,
+ 0x1000, BIT(8), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(emmc_2x_en, "emmc-2x-en", "ext-26m", 0x13c,
+ 0x1000, BIT(9), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(pll_test_en, "pll-test-en", "ext-26m", 0x13c,
+ 0x1000, BIT(14), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(cphy_cfg_en, "cphy-cfg-en", "ext-26m", 0x13c,
+ 0x1000, BIT(15), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(debug_ts_en, "debug-ts-en", "ext-26m", 0x13c,
+ 0x1000, BIT(18), 0, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(access_aud_en, "access-aud-en", "ext-26m", 0x14c,
+ 0x1000, BIT(0), 0, 0);
+
+static const struct clk_parent_data aux_parents[] = {
+ { .fw_name = "ext-32k" },
+ { .fw_name = "phyr8pll-38m18" },
+ { .fw_name = "psr8pll-38m18" },
+ { .fw_name = "pixelpll-41m76" },
+ { .fw_name = "cpll-31m94" },
+ { .hw = &v4nrpll_38m4.hw },
+ { .fw_name = "lvdsrfpll-48m" },
+ { .fw_name = "lvdsrf-rx-48m" },
+ { .fw_name = "lvdsrf-tx-48m" },
+ { .hw = &rpll_26m.hw },
+ { .hw = &tgpll_48m.hw },
+ { .fw_name = "mplllit-13m2" },
+ { .fw_name = "mplls-17m26" },
+ { .fw_name = "mpllb-15m64" },
+ { .fw_name = "mpllm-13m3" },
+ { .fw_name = "rco-150m-37m5" },
+ { .hw = &rco_100m_25m.hw },
+ { .fw_name = "rco-60m" },
+ { .fw_name = "rco-6m" },
+ { .fw_name = "clk-52m-a2d" },
+ { .fw_name = "clk-26m-a2d" },
+ { .hw = &clk_26m_aud.hw },
+ { .fw_name = "gpll-53m5" },
+ { .fw_name = "aipll-30m87" },
+ { .fw_name = "pciepll-50m" },
+ { .fw_name = "pciepllv-26m-52m" },
+ { .fw_name = "usb31pllv-26m" },
+ { .fw_name = "vdsppll-31m68" },
+};
+static SPRD_COMP_CLK_DATA(aux0_clk, "aux0-clk", aux_parents, 0x240,
+ 6, 6, 0, 6, 0);
+static SPRD_COMP_CLK_DATA(aux1_clk, "aux1-clk", aux_parents, 0x244,
+ 6, 6, 0, 6, 0);
+static SPRD_COMP_CLK_DATA(aux2_clk, "aux2-clk", aux_parents, 0x248,
+ 6, 6, 0, 6, 0);
+static SPRD_COMP_CLK_DATA(probe_clk, "probe-clk", aux_parents, 0x24c,
+ 6, 6, 0, 6, 0);
+static SPRD_COMP_CLK_DATA(aux3_clk, "aux3-clk", aux_parents, 0xd20,
+ 6, 6, 0, 6, 0);
+
+static struct sprd_clk_common *ums9620_aon_gate[] = {
+ /* address base is 0x64900000 */
+ &rc100m_cal_eb.common,
+ &rfti_eb.common,
+ &djtag_eb.common,
+ &aux0_eb.common,
+ &aux1_eb.common,
+ &aux2_eb.common,
+ &probe_eb.common,
+ &mm_eb.common,
+ &gpu_eb.common,
+ &mspi_eb.common,
+ &ai_eb.common,
+ &apcpu_dap_eb.common,
+ &aon_cssys_eb.common,
+ &cssys_apb_eb.common,
+ &cssys_pub_eb.common,
+ &dpu_vsp_eb.common,
+ &dsi_cfg_eb.common,
+ &efuse_eb.common,
+ &gpio_eb.common,
+ &mbox_eb.common,
+ &kpd_eb.common,
+ &aon_syst_eb.common,
+ &ap_syst_eb.common,
+ &aon_tmr_eb.common,
+ &aon_dvfs_top_eb.common,
+ &aon_usb2_top_eb.common,
+ &otg_phy_eb.common,
+ &splk_eb.common,
+ &pin_eb.common,
+ &ana_eb.common,
+ &apcpu_busmon_eb.common,
+ &ufs_ao_eb.common,
+ &ise_apb_eb.common,
+ &apcpu_ts0_eb.common,
+ &apb_busmon_eb.common,
+ &aon_iis_eb.common,
+ &scc_eb.common,
+ &serdes_ctrl1_eb.common,
+ &aux3_eb.common,
+ &thm0_eb.common,
+ &thm1_eb.common,
+ &thm2_eb.common,
+ &thm3_eb.common,
+ &audcp_intc_eb.common,
+ &pmu_eb.common,
+ &adi_eb.common,
+ &eic_eb.common,
+ &ap_intc0_eb.common,
+ &ap_intc1_eb.common,
+ &ap_intc2_eb.common,
+ &ap_intc3_eb.common,
+ &ap_intc4_eb.common,
+ &ap_intc5_eb.common,
+ &ap_intc6_eb.common,
+ &ap_intc7_eb.common,
+ &pscp_intc_eb.common,
+ &phycp_intc_eb.common,
+ &ise_intc_eb.common,
+ &ap_tmr0_eb.common,
+ &ap_tmr1_eb.common,
+ &ap_tmr2_eb.common,
+ &pwm0_eb.common,
+ &pwm1_eb.common,
+ &pwm2_eb.common,
+ &pwm3_eb.common,
+ &ap_wdg_eb.common,
+ &apcpu_wdg_eb.common,
+ &serdes_ctrl0_eb.common,
+ &arch_rtc_eb.common,
+ &kpd_rtc_eb.common,
+ &aon_syst_rtc_eb.common,
+ &ap_syst_rtc_eb.common,
+ &aon_tmr_rtc_eb.common,
+ &eic_rtc_eb.common,
+ &eic_rtcdv5_eb.common,
+ &ap_wdg_rtc_eb.common,
+ &ac_wdg_rtc_eb.common,
+ &ap_tmr0_rtc_eb.common,
+ &ap_tmr1_rtc_eb.common,
+ &ap_tmr2_rtc_eb.common,
+ &dcxo_lc_rtc_eb.common,
+ &bb_cal_rtc_eb.common,
+ &dsi_csi_test_eb.common,
+ &djtag_tck_en.common,
+ &dphy_ref_eb.common,
+ &dmc_ref_eb.common,
+ &otg_ref_eb.common,
+ &tsen_eb.common,
+ &tmr_eb.common,
+ &rc100m_ref_eb.common,
+ &rc100m_fdk_eb.common,
+ &debounce_eb.common,
+ &det_32k_eb.common,
+ &top_cssys_en.common,
+ &ap_axi_en.common,
+ &sdio0_2x_en.common,
+ &sdio0_1x_en.common,
+ &sdio1_2x_en.common,
+ &sdio1_1x_en.common,
+ &sdio2_2x_en.common,
+ &sdio2_1x_en.common,
+ &emmc_1x_en.common,
+ &emmc_2x_en.common,
+ &pll_test_en.common,
+ &cphy_cfg_en.common,
+ &debug_ts_en.common,
+ &access_aud_en.common,
+ &aux0_clk.common,
+ &aux1_clk.common,
+ &aux2_clk.common,
+ &probe_clk.common,
+ &aux3_clk.common,
+};
+
+static struct clk_hw_onecell_data ums9620_aon_gate_hws = {
+ .hws = {
+ [CLK_RC100M_CAL_EB] = &rc100m_cal_eb.common.hw,
+ [CLK_RFTI_EB] = &rfti_eb.common.hw,
+ [CLK_DJTAG_EB] = &djtag_eb.common.hw,
+ [CLK_AUX0_EB] = &aux0_eb.common.hw,
+ [CLK_AUX1_EB] = &aux1_eb.common.hw,
+ [CLK_AUX2_EB] = &aux2_eb.common.hw,
+ [CLK_PROBE_EB] = &probe_eb.common.hw,
+ [CLK_MM_EB] = &mm_eb.common.hw,
+ [CLK_GPU_EB] = &gpu_eb.common.hw,
+ [CLK_MSPI_EB] = &mspi_eb.common.hw,
+ [CLK_AI_EB] = &ai_eb.common.hw,
+ [CLK_APCPU_DAP_EB] = &apcpu_dap_eb.common.hw,
+ [CLK_AON_CSSYS_EB] = &aon_cssys_eb.common.hw,
+ [CLK_CSSYS_APB_EB] = &cssys_apb_eb.common.hw,
+ [CLK_CSSYS_PUB_EB] = &cssys_pub_eb.common.hw,
+ [CLK_DPU_VSP_EB] = &dpu_vsp_eb.common.hw,
+ [CLK_DSI_CFG_EB] = &dsi_cfg_eb.common.hw,
+ [CLK_EFUSE_EB] = &efuse_eb.common.hw,
+ [CLK_GPIO_EB] = &gpio_eb.common.hw,
+ [CLK_MBOX_EB] = &mbox_eb.common.hw,
+ [CLK_KPD_EB] = &kpd_eb.common.hw,
+ [CLK_AON_SYST_EB] = &aon_syst_eb.common.hw,
+ [CLK_AP_SYST_EB] = &ap_syst_eb.common.hw,
+ [CLK_AON_TMR_EB] = &aon_tmr_eb.common.hw,
+ [CLK_AON_DVFS_TOP_EB] = &aon_dvfs_top_eb.common.hw,
+ [CLK_AON_USB2_TOP_EB] = &aon_usb2_top_eb.common.hw,
+ [CLK_OTG_PHY_EB] = &otg_phy_eb.common.hw,
+ [CLK_SPLK_EB] = &splk_eb.common.hw,
+ [CLK_PIN_EB] = &pin_eb.common.hw,
+ [CLK_ANA_EB] = &ana_eb.common.hw,
+ [CLK_APCPU_BUSMON_EB] = &apcpu_busmon_eb.common.hw,
+ [CLK_UFS_AO_EB] = &ufs_ao_eb.common.hw,
+ [CLK_ISE_APB_EB] = &ise_apb_eb.common.hw,
+ [CLK_APCPU_TS0_EB] = &apcpu_ts0_eb.common.hw,
+ [CLK_APB_BUSMON_EB] = &apb_busmon_eb.common.hw,
+ [CLK_AON_IIS_EB] = &aon_iis_eb.common.hw,
+ [CLK_SCC_EB] = &scc_eb.common.hw,
+ [CLK_SERDES_CTRL1_EB] = &serdes_ctrl1_eb.common.hw,
+ [CLK_AUX3_EB] = &aux3_eb.common.hw,
+ [CLK_THM0_EB] = &thm0_eb.common.hw,
+ [CLK_THM1_EB] = &thm1_eb.common.hw,
+ [CLK_THM2_EB] = &thm2_eb.common.hw,
+ [CLK_THM3_EB] = &thm3_eb.common.hw,
+ [CLK_AUDCP_INTC_EB] = &audcp_intc_eb.common.hw,
+ [CLK_PMU_EB] = &pmu_eb.common.hw,
+ [CLK_ADI_EB] = &adi_eb.common.hw,
+ [CLK_EIC_EB] = &eic_eb.common.hw,
+ [CLK_AP_INTC0_EB] = &ap_intc0_eb.common.hw,
+ [CLK_AP_INTC1_EB] = &ap_intc1_eb.common.hw,
+ [CLK_AP_INTC2_EB] = &ap_intc2_eb.common.hw,
+ [CLK_AP_INTC3_EB] = &ap_intc3_eb.common.hw,
+ [CLK_AP_INTC4_EB] = &ap_intc4_eb.common.hw,
+ [CLK_AP_INTC5_EB] = &ap_intc5_eb.common.hw,
+ [CLK_AP_INTC6_EB] = &ap_intc6_eb.common.hw,
+ [CLK_AP_INTC7_EB] = &ap_intc7_eb.common.hw,
+ [CLK_PSCP_INTC_EB] = &pscp_intc_eb.common.hw,
+ [CLK_PHYCP_INTC_EB] = &phycp_intc_eb.common.hw,
+ [CLK_ISE_INTC_EB] = &ise_intc_eb.common.hw,
+ [CLK_AP_TMR0_EB] = &ap_tmr0_eb.common.hw,
+ [CLK_AP_TMR1_EB] = &ap_tmr1_eb.common.hw,
+ [CLK_AP_TMR2_EB] = &ap_tmr2_eb.common.hw,
+ [CLK_PWM0_EB] = &pwm0_eb.common.hw,
+ [CLK_PWM1_EB] = &pwm1_eb.common.hw,
+ [CLK_PWM2_EB] = &pwm2_eb.common.hw,
+ [CLK_PWM3_EB] = &pwm3_eb.common.hw,
+ [CLK_AP_WDG_EB] = &ap_wdg_eb.common.hw,
+ [CLK_APCPU_WDG_EB] = &apcpu_wdg_eb.common.hw,
+ [CLK_SERDES_CTRL0_EB] = &serdes_ctrl0_eb.common.hw,
+ [CLK_ARCH_RTC_EB] = &arch_rtc_eb.common.hw,
+ [CLK_KPD_RTC_EB] = &kpd_rtc_eb.common.hw,
+ [CLK_AON_SYST_RTC_EB] = &aon_syst_rtc_eb.common.hw,
+ [CLK_AP_SYST_RTC_EB] = &ap_syst_rtc_eb.common.hw,
+ [CLK_AON_TMR_RTC_EB] = &aon_tmr_rtc_eb.common.hw,
+ [CLK_EIC_RTC_EB] = &eic_rtc_eb.common.hw,
+ [CLK_EIC_RTCDV5_EB] = &eic_rtcdv5_eb.common.hw,
+ [CLK_AP_WDG_RTC_EB] = &ap_wdg_rtc_eb.common.hw,
+ [CLK_AC_WDG_RTC_EB] = &ac_wdg_rtc_eb.common.hw,
+ [CLK_AP_TMR0_RTC_EB] = &ap_tmr0_rtc_eb.common.hw,
+ [CLK_AP_TMR1_RTC_EB] = &ap_tmr1_rtc_eb.common.hw,
+ [CLK_AP_TMR2_RTC_EB] = &ap_tmr2_rtc_eb.common.hw,
+ [CLK_DCXO_LC_RTC_EB] = &dcxo_lc_rtc_eb.common.hw,
+ [CLK_BB_CAL_RTC_EB] = &bb_cal_rtc_eb.common.hw,
+ [CLK_DSI_CSI_TEST_EB] = &dsi_csi_test_eb.common.hw,
+ [CLK_DJTAG_TCK_EN] = &djtag_tck_en.common.hw,
+ [CLK_DPHY_REF_EB] = &dphy_ref_eb.common.hw,
+ [CLK_DMC_REF_EB] = &dmc_ref_eb.common.hw,
+ [CLK_OTG_REF_EB] = &otg_ref_eb.common.hw,
+ [CLK_TSEN_EB] = &tsen_eb.common.hw,
+ [CLK_TMR_EB] = &tmr_eb.common.hw,
+ [CLK_RC100M_REF_EB] = &rc100m_ref_eb.common.hw,
+ [CLK_RC100M_FDK_EB] = &rc100m_fdk_eb.common.hw,
+ [CLK_DEBOUNCE_EB] = &debounce_eb.common.hw,
+ [CLK_DET_32K_EB] = &det_32k_eb.common.hw,
+ [CLK_TOP_CSSYS_EB] = &top_cssys_en.common.hw,
+ [CLK_AP_AXI_EN] = &ap_axi_en.common.hw,
+ [CLK_SDIO0_2X_EN] = &sdio0_2x_en.common.hw,
+ [CLK_SDIO0_1X_EN] = &sdio0_1x_en.common.hw,
+ [CLK_SDIO1_2X_EN] = &sdio1_2x_en.common.hw,
+ [CLK_SDIO1_1X_EN] = &sdio1_1x_en.common.hw,
+ [CLK_SDIO2_2X_EN] = &sdio2_2x_en.common.hw,
+ [CLK_SDIO2_1X_EN] = &sdio2_1x_en.common.hw,
+ [CLK_EMMC_1X_EN] = &emmc_1x_en.common.hw,
+ [CLK_EMMC_2X_EN] = &emmc_2x_en.common.hw,
+ [CLK_PLL_TEST_EN] = &pll_test_en.common.hw,
+ [CLK_CPHY_CFG_EN] = &cphy_cfg_en.common.hw,
+ [CLK_DEBUG_TS_EN] = &debug_ts_en.common.hw,
+ [CLK_ACCESS_AUD_EN] = &access_aud_en.common.hw,
+ [CLK_AUX0] = &aux0_clk.common.hw,
+ [CLK_AUX1] = &aux1_clk.common.hw,
+ [CLK_AUX2] = &aux2_clk.common.hw,
+ [CLK_PROBE] = &probe_clk.common.hw,
+ [CLK_AUX3] = &aux3_clk.common.hw,
+ },
+ .num = CLK_AON_APB_GATE_NUM,
+};
+
+static struct sprd_clk_desc ums9620_aon_gate_desc = {
+ .clk_clks = ums9620_aon_gate,
+ .num_clk_clks = ARRAY_SIZE(ums9620_aon_gate),
+ .hw_clks = &ums9620_aon_gate_hws,
+};
+
+/* aon apb clks */
+static const struct clk_parent_data aon_apb_parents[] = {
+ { .hw = &rco_100m_4m.hw },
+ { .hw = &clk_4m3.hw },
+ { .hw = &clk_13m.hw },
+ { .hw = &rco_100m_25m.hw },
+ { .fw_name = "ext-26m" },
+ { .fw_name = "rco-100m" },
+ { .hw = &tgpll_128m.hw },
+ { .hw = &tgpll_153m6.hw },
+};
+static SPRD_COMP_CLK_DATA_OFFSET(aon_apb, "aon-apb", aon_apb_parents, 0x28,
+ 0, 3, -4, 0, 2, 0);
+
+static const struct clk_parent_data adi_parents[] = {
+ { .hw = &rco_100m_4m.hw },
+ { .fw_name = "ext-26m" },
+ { .hw = &rco_100m_25m.hw },
+ { .hw = &tgpll_38m4.hw },
+ { .hw = &tgpll_51m2.hw },
+};
+static SPRD_MUX_CLK_DATA(adi, "adi", adi_parents, 0x34,
+ 0, 3, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data pwm_parents[] = {
+ { .fw_name = "ext-32k" },
+ { .fw_name = "ext-26m" },
+ { .hw = &rco_100m_4m.hw },
+ { .hw = &rco_100m_25m.hw },
+ { .hw = &tgpll_48m.hw },
+};
+static SPRD_MUX_CLK_DATA(pwm0, "pwm0", pwm_parents, 0x40,
+ 0, 3, UMS9620_MUX_FLAG);
+static SPRD_MUX_CLK_DATA(pwm1, "pwm1", pwm_parents, 0x4c,
+ 0, 3, UMS9620_MUX_FLAG);
+static SPRD_MUX_CLK_DATA(pwm2, "pwm2", pwm_parents, 0x58,
+ 0, 3, UMS9620_MUX_FLAG);
+static SPRD_MUX_CLK_DATA(pwm3, "pwm3", pwm_parents, 0x64,
+ 0, 3, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data efuse_parents[] = {
+ { .hw = &rco_100m_25m.hw },
+ { .fw_name = "ext-26m" },
+};
+static SPRD_MUX_CLK_DATA(efuse, "efuse", efuse_parents, 0x70,
+ 0, 1, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data uart_parents[] = {
+ { .hw = &rco_100m_4m.hw },
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_48m.hw },
+ { .hw = &tgpll_51m2.hw },
+ { .hw = &tgpll_96m.hw },
+ { .fw_name = "rco-100m" },
+ { .hw = &tgpll_128m.hw },
+};
+static SPRD_MUX_CLK_DATA(uart0, "uart0", uart_parents, 0x7c,
+ 0, 3, UMS9620_MUX_FLAG);
+static SPRD_MUX_CLK_DATA(uart1, "uart1", uart_parents, 0x88,
+ 0, 3, UMS9620_MUX_FLAG);
+static SPRD_MUX_CLK_DATA(uart2, "uart2", uart_parents, 0x94,
+ 0, 3, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data thm_parents[] = {
+ { .fw_name = "ext-32k" },
+ { .hw = &clk_250k.hw },
+};
+static SPRD_MUX_CLK_DATA(thm0, "thm0", thm_parents, 0xc4,
+ 0, 1, UMS9620_MUX_FLAG);
+static SPRD_MUX_CLK_DATA(thm1, "thm1", thm_parents, 0xd0,
+ 0, 1, UMS9620_MUX_FLAG);
+static SPRD_MUX_CLK_DATA(thm2, "thm2", thm_parents, 0xdc,
+ 0, 1, UMS9620_MUX_FLAG);
+static SPRD_MUX_CLK_DATA(thm3, "thm3", thm_parents, 0xe8,
+ 0, 1, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data aon_iis_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_128m.hw },
+ { .hw = &tgpll_153m6.hw },
+};
+static SPRD_MUX_CLK_DATA(aon_iis, "aon-iis", aon_iis_parents, 0x118,
+ 0, 2, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data scc_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_48m.hw },
+ { .hw = &tgpll_51m2.hw },
+ { .hw = &tgpll_96m.hw },
+};
+static SPRD_MUX_CLK_DATA(scc, "scc", scc_parents, 0x124,
+ 0, 2, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data apcpu_dap_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &rco_100m_4m.hw },
+ { .hw = &tgpll_76m8.hw },
+ { .fw_name = "rco-100m" },
+ { .hw = &tgpll_128m.hw },
+ { .hw = &tgpll_153m6.hw },
+};
+static SPRD_MUX_CLK_DATA(apcpu_dap, "apcpu-dap", apcpu_dap_parents, 0x130,
+ 0, 3, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data apcpu_ts_parents[] = {
+ { .fw_name = "ext-32k" },
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_128m.hw },
+ { .hw = &tgpll_153m6.hw },
+};
+static SPRD_MUX_CLK_DATA(apcpu_ts, "apcpu-ts", apcpu_ts_parents, 0x13c,
+ 0, 2, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data debug_ts_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_76m8.hw },
+ { .hw = &tgpll_128m.hw },
+ { .hw = &tgpll_192m.hw },
+};
+static SPRD_MUX_CLK_DATA(debug_ts, "debug-ts", debug_ts_parents, 0x148,
+ 0, 2, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data pri_sbi_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .fw_name = "ext-52m" },
+ { .hw = &tgpll_96m.hw },
+};
+static SPRD_MUX_CLK_DATA(pri_sbi, "pri-sbi", pri_sbi_parents, 0x154,
+ 0, 2, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data xo_sel_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .fw_name = "ext-52m" },
+};
+static SPRD_MUX_CLK_DATA(xo_sel, "xo-sel", xo_sel_parents, 0x160,
+ 0, 1, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data rfti_lth_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .fw_name = "ext-52m" },
+};
+static SPRD_MUX_CLK_DATA(rfti_lth, "rfti-lth", rfti_lth_parents, 0x16c,
+ 0, 1, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data afc_lth_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .fw_name = "ext-52m" },
+};
+static SPRD_MUX_CLK_DATA(afc_lth, "afc-lth", afc_lth_parents, 0x178,
+ 0, 1, UMS9620_MUX_FLAG);
+
+static SPRD_DIV_CLK_FW_NAME(rco100m_fdk, "rco100m-fdk", "rco-100m", 0x18c,
+ 0, 6, 0);
+
+static SPRD_DIV_CLK_FW_NAME(rco60m_fdk, "rco60m-fdk", "rco-60m", 0x1a4,
+ 0, 5, 0);
+static const struct clk_parent_data rco6m_ref_parents[] = {
+ { .hw = &clk_16k.hw },
+ { .hw = &clk_2m.hw },
+};
+static SPRD_COMP_CLK_DATA_OFFSET(rco6m_ref, "rco6m-ref", rco6m_ref_parents, 0x1b4,
+ 0, 1, -4, 0, 5, 0);
+static SPRD_DIV_CLK_FW_NAME(rco6m_fdk, "rco6m-fdk", "rco-6m", 0x1bc,
+ 0, 9, 0);
+
+static const struct clk_parent_data djtag_tck_parents[] = {
+ { .hw = &rco_100m_4m.hw },
+ { .fw_name = "ext-26m" },
+};
+static SPRD_MUX_CLK_DATA(djtag_tck, "djtag-tck", djtag_tck_parents, 0x1cc,
+ 0, 1, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data aon_tmr_parents[] = {
+ { .hw = &rco_100m_4m.hw },
+ { .hw = &rco_100m_25m.hw },
+ { .fw_name = "ext-26m" },
+};
+static SPRD_MUX_CLK_DATA(aon_tmr, "aon-tmr", aon_tmr_parents, 0x1f0,
+ 0, 2, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data aon_pmu_parents[] = {
+ { .fw_name = "ext-32k" },
+ { .hw = &rco_100m_4m.hw },
+ { .hw = &clk_4m3.hw },
+ { .hw = &rco_60m_4m.hw },
+};
+static SPRD_MUX_CLK_DATA(aon_pmu, "aon-pmu", aon_pmu_parents, 0x208,
+ 0, 2, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data debounce_parents[] = {
+ { .fw_name = "ext-32k" },
+ { .hw = &rco_100m_4m.hw },
+ { .hw = &rco_100m_25m.hw },
+ { .fw_name = "ext-26m" },
+ { .hw = &rco_60m_4m.hw },
+ { .hw = &rco_60m_20m.hw },
+};
+static SPRD_MUX_CLK_DATA(debounce, "debounce", debounce_parents, 0x214,
+ 0, 3, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data apcpu_pmu_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_76m8.hw },
+ { .fw_name = "rco-60m" },
+ { .fw_name = "rco-100m" },
+ { .hw = &tgpll_128m.hw },
+};
+static SPRD_MUX_CLK_DATA(apcpu_pmu, "apcpu-pmu", apcpu_pmu_parents, 0x220,
+ 0, 3, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data top_dvfs_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_96m.hw },
+ { .fw_name = "rco-100m" },
+ { .hw = &tgpll_128m.hw },
+};
+static SPRD_MUX_CLK_DATA(top_dvfs, "top-dvfs", top_dvfs_parents, 0x22c,
+ 0, 2, UMS9620_MUX_FLAG);
+
+static SPRD_MUX_CLK_DATA(pmu_26m, "pmu-26m", aon_pmu_parents, 0x238,
+ 0, 2, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data tzpc_parents[] = {
+ { .hw = &rco_100m_4m.hw },
+ { .hw = &clk_4m3.hw },
+ { .hw = &clk_13m.hw },
+ { .hw = &rco_100m_25m.hw },
+ { .fw_name = "ext-26m" },
+ { .fw_name = "rco-100m" },
+ { .hw = &tgpll_128m.hw },
+};
+static SPRD_COMP_CLK_DATA_OFFSET(tzpc, "tzpc", tzpc_parents, 0x244,
+ 0, 3, -4, 0, 2, 0);
+
+static const struct clk_parent_data otg_ref_parents[] = {
+ { .hw = &tgpll_12m.hw },
+ { .fw_name = "ext-26m" },
+};
+static SPRD_MUX_CLK_DATA(otg_ref, "otg-ref", otg_ref_parents, 0x250,
+ 0, 1, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data cssys_parents[] = {
+ { .hw = &rco_100m_25m.hw },
+ { .fw_name = "ext-26m" },
+ { .fw_name = "rco-100m" },
+ { .hw = &tgpll_153m6.hw },
+ { .hw = &tgpll_384m.hw },
+ { .hw = &tgpll_512m.hw },
+};
+static SPRD_COMP_CLK_DATA_OFFSET(cssys, "cssys", cssys_parents, 0x25c,
+ 0, 3, -4, 0, 2, 0);
+static SPRD_DIV_CLK_HW(cssys_apb, "cssys-apb", &cssys.common.hw, 0x264,
+ 0, 2, 0);
+
+static const struct clk_parent_data sdio_2x_parents[] = {
+ { .hw = &clk_1m.hw },
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_307m2.hw },
+ { .hw = &tgpll_384m.hw },
+ { .hw = &rpll_390m.hw },
+ { .hw = &v4nrpll_409m6.hw },
+};
+static SPRD_COMP_CLK_DATA_OFFSET(sdio0_2x, "sdio0-2x", sdio_2x_parents, 0x274,
+ 0, 3, -4, 0, 11, 0);
+static SPRD_DIV_CLK_HW(sdio0_1x, "sdio0-1x", &sdio0_2x.common.hw, 0x27c,
+ 0, 1, 0);
+
+static SPRD_COMP_CLK_DATA_OFFSET(sdio1_2x, "sdio1-2x", sdio_2x_parents, 0x28c,
+ 0, 3, -4, 0, 11, 0);
+static SPRD_DIV_CLK_HW(sdio1_1x, "sdio1-1x", &sdio1_2x.common.hw, 0x294,
+ 0, 1, 0);
+
+static SPRD_COMP_CLK_DATA_OFFSET(sdio2_2x, "sdio2-2x", sdio_2x_parents, 0x2a4,
+ 0, 3, -4, 0, 11, 0);
+static SPRD_DIV_CLK_HW(sdio2_1x, "sdio2-1x", &sdio2_2x.common.hw, 0x2ac,
+ 0, 1, 0);
+
+static const struct clk_parent_data spi_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_128m.hw },
+ { .hw = &tgpll_153m6.hw },
+ { .hw = &tgpll_192m.hw },
+};
+static SPRD_COMP_CLK_DATA_OFFSET(spi0, "spi0", spi_parents, 0x2bc,
+ 0, 2, -4, 0, 3, 0);
+static SPRD_COMP_CLK_DATA_OFFSET(spi1, "spi1", spi_parents, 0x2c8,
+ 0, 2, -4, 0, 3, 0);
+static SPRD_COMP_CLK_DATA_OFFSET(spi2, "spi2", spi_parents, 0x2d4,
+ 0, 2, -4, 0, 3, 0);
+
+static const struct clk_parent_data analog_io_apb_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_48m.hw },
+};
+static SPRD_COMP_CLK_DATA_OFFSET(analog_io_apb, "analog-io-apb",
+ analog_io_apb_parents, 0x2e0, 0, 1, -4, 0, 2, 0);
+
+static const struct clk_parent_data dmc_ref_parents[] = {
+ { .hw = &clk_6m5.hw },
+ { .hw = &clk_13m.hw },
+ { .fw_name = "ext-26m" },
+};
+static SPRD_MUX_CLK_DATA(dmc_ref, "dmc-ref", dmc_ref_parents, 0x2ec,
+ 0, 2, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data usb_parents[] = {
+ { .hw = &rco_100m_25m.hw },
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_76m8.hw },
+ { .hw = &tgpll_96m.hw },
+ { .fw_name = "rco-100m" },
+ { .hw = &tgpll_128m.hw },
+};
+static SPRD_COMP_CLK_DATA_OFFSET(usb, "usb", usb_parents, 0x2f8,
+ 0, 3, -4, 0, 2, 0);
+
+static const struct clk_parent_data usb_suspend_parents[] = {
+ { .fw_name = "ext-32k" },
+ { .hw = &clk_1m.hw },
+};
+static SPRD_MUX_CLK_DATA(usb_suspend, "usb-suspend", usb_suspend_parents, 0x31c,
+ 0, 1, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data ufs_aon_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_48m.hw },
+ { .fw_name = "rco-100m" },
+ { .hw = &tgpll_128m.hw },
+ { .hw = &tgpll_192m.hw },
+ { .hw = &tgpll_256m.hw },
+};
+static SPRD_MUX_CLK_DATA(ufs_aon, "ufs-aon", ufs_aon_parents, 0x328,
+ 0, 3, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data ufs_pck_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_76m8.hw },
+ { .hw = &tgpll_128m.hw },
+ { .hw = &tgpll_153m6.hw },
+ { .hw = &tgpll_192m.hw },
+ { .hw = &tgpll_256m.hw },
+};
+static SPRD_MUX_CLK_DATA(ufs_pck, "ufs-pck", ufs_pck_parents, 0x334,
+ 0, 3, UMS9620_MUX_FLAG);
+
+static struct sprd_clk_common *ums9620_aonapb_clk[] = {
+ /* address base is 0x64920000 */
+ &aon_apb.common,
+ &adi.common,
+ &pwm0.common,
+ &pwm1.common,
+ &pwm2.common,
+ &pwm3.common,
+ &efuse.common,
+ &uart0.common,
+ &uart1.common,
+ &uart2.common,
+ &thm0.common,
+ &thm1.common,
+ &thm2.common,
+ &thm3.common,
+ &aon_iis.common,
+ &scc.common,
+ &apcpu_dap.common,
+ &apcpu_ts.common,
+ &debug_ts.common,
+ &pri_sbi.common,
+ &xo_sel.common,
+ &rfti_lth.common,
+ &afc_lth.common,
+ &rco100m_fdk.common,
+ &rco60m_fdk.common,
+ &rco6m_ref.common,
+ &rco6m_fdk.common,
+ &djtag_tck.common,
+ &aon_tmr.common,
+ &aon_pmu.common,
+ &debounce.common,
+ &apcpu_pmu.common,
+ &top_dvfs.common,
+ &pmu_26m.common,
+ &tzpc.common,
+ &otg_ref.common,
+ &cssys.common,
+ &cssys_apb.common,
+ &sdio0_2x.common,
+ &sdio0_1x.common,
+ &sdio1_2x.common,
+ &sdio1_1x.common,
+ &sdio2_2x.common,
+ &sdio2_1x.common,
+ &spi0.common,
+ &spi1.common,
+ &spi2.common,
+ &analog_io_apb.common,
+ &dmc_ref.common,
+ &usb.common,
+ &usb_suspend.common,
+ &ufs_aon.common,
+ &ufs_pck.common,
+};
+
+static struct clk_hw_onecell_data ums9620_aonapb_clk_hws = {
+ .hws = {
+ [CLK_AON_APB] = &aon_apb.common.hw,
+ [CLK_ADI] = &adi.common.hw,
+ [CLK_PWM0] = &pwm0.common.hw,
+ [CLK_PWM1] = &pwm1.common.hw,
+ [CLK_PWM2] = &pwm2.common.hw,
+ [CLK_PWM3] = &pwm3.common.hw,
+ [CLK_EFUSE] = &efuse.common.hw,
+ [CLK_UART0] = &uart0.common.hw,
+ [CLK_UART1] = &uart1.common.hw,
+ [CLK_UART2] = &uart2.common.hw,
+ [CLK_THM0] = &thm0.common.hw,
+ [CLK_THM1] = &thm1.common.hw,
+ [CLK_THM2] = &thm2.common.hw,
+ [CLK_THM3] = &thm3.common.hw,
+ [CLK_AON_IIS] = &aon_iis.common.hw,
+ [CLK_SCC] = &scc.common.hw,
+ [CLK_APCPU_DAP] = &apcpu_dap.common.hw,
+ [CLK_APCPU_TS] = &apcpu_ts.common.hw,
+ [CLK_DEBUG_TS] = &debug_ts.common.hw,
+ [CLK_PRI_SBI] = &pri_sbi.common.hw,
+ [CLK_XO_SEL] = &xo_sel.common.hw,
+ [CLK_RFTI_LTH] = &rfti_lth.common.hw,
+ [CLK_AFC_LTH] = &afc_lth.common.hw,
+ [CLK_RCO100M_FDK] = &rco100m_fdk.common.hw,
+ [CLK_RCO60M_FDK] = &rco60m_fdk.common.hw,
+ [CLK_RCO6M_REF] = &rco6m_ref.common.hw,
+ [CLK_RCO6M_FDK] = &rco6m_fdk.common.hw,
+ [CLK_DJTAG_TCK] = &djtag_tck.common.hw,
+ [CLK_AON_TMR] = &aon_tmr.common.hw,
+ [CLK_AON_PMU] = &aon_pmu.common.hw,
+ [CLK_DEBOUNCE] = &debounce.common.hw,
+ [CLK_APCPU_PMU] = &apcpu_pmu.common.hw,
+ [CLK_TOP_DVFS] = &top_dvfs.common.hw,
+ [CLK_PMU_26M] = &pmu_26m.common.hw,
+ [CLK_TZPC] = &tzpc.common.hw,
+ [CLK_OTG_REF] = &otg_ref.common.hw,
+ [CLK_CSSYS] = &cssys.common.hw,
+ [CLK_CSSYS_APB] = &cssys_apb.common.hw,
+ [CLK_SDIO0_2X] = &sdio0_2x.common.hw,
+ [CLK_SDIO0_1X] = &sdio0_1x.common.hw,
+ [CLK_SDIO1_2X] = &sdio1_2x.common.hw,
+ [CLK_SDIO1_1X] = &sdio1_1x.common.hw,
+ [CLK_SDIO2_2X] = &sdio2_2x.common.hw,
+ [CLK_SDIO2_1X] = &sdio2_1x.common.hw,
+ [CLK_SPI0] = &spi0.common.hw,
+ [CLK_SPI1] = &spi1.common.hw,
+ [CLK_SPI2] = &spi2.common.hw,
+ [CLK_ANALOG_IO_APB] = &analog_io_apb.common.hw,
+ [CLK_DMC_REF] = &dmc_ref.common.hw,
+ [CLK_USB] = &usb.common.hw,
+ [CLK_USB_SUSPEND] = &usb_suspend.common.hw,
+ [CLK_UFS_AON] = &ufs_aon.common.hw,
+ [CLK_UFS_PCK] = &ufs_pck.common.hw,
+ },
+ .num = CLK_AON_APB_NUM,
+};
+
+static struct sprd_clk_desc ums9620_aonapb_clk_desc = {
+ .clk_clks = ums9620_aonapb_clk,
+ .num_clk_clks = ARRAY_SIZE(ums9620_aonapb_clk),
+ .hw_clks = &ums9620_aonapb_clk_hws,
+};
+
+/* top dvfs clk */
+static const struct clk_parent_data lit_core_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &v4nrpll_614m4.hw },
+ { .hw = &tgpll_768m.hw },
+ { .hw = &v4nrpll_1228m8.hw },
+ { .hw = &mplll.common.hw },
+};
+static SPRD_COMP_CLK_DATA(core0, "core0", lit_core_parents, 0xe08,
+ 0, 3, 3, 1, 0);
+static SPRD_COMP_CLK_DATA(core1, "core1", lit_core_parents, 0xe08,
+ 4, 3, 7, 1, 0);
+static SPRD_COMP_CLK_DATA(core2, "core2", lit_core_parents, 0xe08,
+ 8, 3, 11, 1, 0);
+static SPRD_COMP_CLK_DATA(core3, "core3", lit_core_parents, 0xe08,
+ 12, 3, 15, 1, 0);
+
+static const struct clk_parent_data mid_core_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_768m.hw },
+ { .hw = &v4nrpll_1228m8.hw },
+ { .hw = &tgpll.common.hw },
+ { .hw = &mpllm.common.hw },
+};
+static SPRD_COMP_CLK_DATA(core4, "core4", mid_core_parents, 0xe08,
+ 16, 3, 19, 1, 0);
+static SPRD_COMP_CLK_DATA(core5, "core5", mid_core_parents, 0xe08,
+ 20, 3, 23, 1, 0);
+static SPRD_COMP_CLK_DATA(core6, "core6", mid_core_parents, 0xe08,
+ 24, 3, 27, 1, 0);
+
+static const struct clk_parent_data big_core_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &v4nrpll_1228m8.hw },
+ { .hw = &tgpll.common.hw },
+ { .hw = &mpllb.common.hw },
+};
+static SPRD_COMP_CLK_DATA(core7, "core7", big_core_parents, 0xe08,
+ 28, 3, 31, 1, 0);
+
+static const struct clk_parent_data scu_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &v4nrpll_614m4.hw },
+ { .hw = &tgpll_768m.hw },
+ { .hw = &v4nrpll_1228m8.hw },
+ { .hw = &mplls.common.hw },
+};
+static SPRD_COMP_CLK_DATA(scu, "scu", scu_parents, 0xe0c,
+ 0, 3, 3, 1, 0);
+static SPRD_DIV_CLK_HW(ace, "ace", &scu.common.hw, 0xe0c,
+ 24, 1, 0);
+
+static const struct clk_parent_data atb_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_153m6.hw },
+ { .hw = &tgpll_512m.hw },
+ { .hw = &tgpll_768m.hw },
+};
+static SPRD_COMP_CLK_DATA(atb, "atb", atb_parents, 0xe0c,
+ 4, 2, 6, 3, 0);
+static SPRD_DIV_CLK_HW(debug_apb, "debug_apb", &atb.common.hw, 0xe0c,
+ 25, 2, 0);
+
+static const struct clk_parent_data cps_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_153m6.hw },
+ { .hw = &tgpll_512m.hw },
+ { .hw = &tgpll_768m.hw },
+};
+static SPRD_COMP_CLK_DATA(cps, "cps", cps_parents, 0xe0c,
+ 9, 2, 11, 3, 0);
+
+static const struct clk_parent_data gic_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_153m6.hw },
+ { .hw = &tgpll_512m.hw },
+ { .hw = &tgpll_768m.hw },
+};
+static SPRD_COMP_CLK_DATA(gic, "gic", gic_parents, 0xe0c,
+ 14, 2, 16, 3, 0);
+
+static const struct clk_parent_data periph_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_153m6.hw },
+ { .hw = &tgpll_512m.hw },
+ { .hw = &tgpll_768m.hw },
+};
+static SPRD_COMP_CLK_DATA(periph, "periph", periph_parents, 0xe0c,
+ 19, 2, 21, 3, 0);
+
+static struct sprd_clk_common *ums9620_topdvfs_clk[] = {
+ /* address base is 0x64940000 */
+ &core0.common,
+ &core1.common,
+ &core2.common,
+ &core3.common,
+ &core4.common,
+ &core5.common,
+ &core6.common,
+ &core7.common,
+ &scu.common,
+ &ace.common,
+ &atb.common,
+ &debug_apb.common,
+ &cps.common,
+ &gic.common,
+ &periph.common,
+};
+
+static struct clk_hw_onecell_data ums9620_topdvfs_clk_hws = {
+ .hws = {
+ [CLK_CORE0] = &core0.common.hw,
+ [CLK_CORE1] = &core1.common.hw,
+ [CLK_CORE2] = &core2.common.hw,
+ [CLK_CORE3] = &core3.common.hw,
+ [CLK_CORE4] = &core4.common.hw,
+ [CLK_CORE5] = &core5.common.hw,
+ [CLK_CORE6] = &core6.common.hw,
+ [CLK_CORE7] = &core7.common.hw,
+ [CLK_SCU] = &scu.common.hw,
+ [CLK_ACE] = &ace.common.hw,
+ [CLK_ATB] = &atb.common.hw,
+ [CLK_DEBUG_APB] = &debug_apb.common.hw,
+ [CLK_CPS] = &cps.common.hw,
+ [CLK_GIC] = &gic.common.hw,
+ [CLK_PERIPH] = &periph.common.hw,
+ },
+ .num = CLK_TOPDVFS_CLK_NUM,
+};
+
+static struct sprd_clk_desc ums9620_topdvfs_clk_desc = {
+ .clk_clks = ums9620_topdvfs_clk,
+ .num_clk_clks = ARRAY_SIZE(ums9620_topdvfs_clk),
+ .hw_clks = &ums9620_topdvfs_clk_hws,
+};
+
+/* ipa apb gate clocks */
+/* ipa apb related gate clocks configure CLK_IGNORE_UNUSED because their
+ * power domain may be shut down, and they are controlled by related module.
+ */
+static SPRD_SC_GATE_CLK_FW_NAME(usb_eb, "usb-eb", "ext-26m", 0x4,
+ 0x1000, BIT(0), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(usb_suspend_eb, "usb-suspend-eb", "ext-26m", 0x4,
+ 0x1000, BIT(1), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(usb_ref_eb, "usb-ref-eb", "ext-26m", 0x4,
+ 0x1000, BIT(2), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(pam_usb_eb, "pam-usb-eb", "ext-26m", 0x4,
+ 0x1000, BIT(4), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(pam_wifi_eb, "pam-wifi-eb", "ext-26m", 0x4,
+ 0x1000, BIT(6), CLK_IGNORE_UNUSED, 0);
+
+static struct sprd_clk_common *ums9620_ipaapb_gate[] = {
+ /* address base is 0x25000000 */
+ &usb_eb.common,
+ &usb_suspend_eb.common,
+ &usb_ref_eb.common,
+ &pam_usb_eb.common,
+ &pam_wifi_eb.common,
+};
+
+static struct clk_hw_onecell_data ums9620_ipaapb_gate_hws = {
+ .hws = {
+ [CLK_USB_EB] = &usb_eb.common.hw,
+ [CLK_USB_SUSPEND_EB] = &usb_suspend_eb.common.hw,
+ [CLK_USB_REF_EB] = &usb_ref_eb.common.hw,
+ [CLK_PAM_USB_EB] = &pam_usb_eb.common.hw,
+ [CLK_PAM_WIFI_EB] = &pam_wifi_eb.common.hw,
+ },
+ .num = CLK_IPAAPB_GATE_NUM,
+};
+
+static struct sprd_clk_desc ums9620_ipaapb_gate_desc = {
+ .clk_clks = ums9620_ipaapb_gate,
+ .num_clk_clks = ARRAY_SIZE(ums9620_ipaapb_gate),
+ .hw_clks = &ums9620_ipaapb_gate_hws,
+};
+
+/* ipa clocks*/
+static const struct clk_parent_data ipa_axi_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_192m.hw },
+ { .hw = &tgpll_384m.hw },
+ { .hw = &v4nrpll_409m6.hw },
+};
+static SPRD_MUX_CLK_DATA(ipa_axi, "ipa-axi", ipa_axi_parents, 0x28,
+ 0, 2, UMS9620_MUX_FLAG);
+static SPRD_DIV_CLK_HW(ipa_apb, "ipa-apb", &ipa_axi.common.hw, 0x30,
+ 0, 2, 0);
+
+static const struct clk_parent_data usb_ref_parents[] = {
+ { .fw_name = "ext-32k" },
+ { .hw = &tgpll_24m.hw },
+};
+static SPRD_MUX_CLK_DATA(usb_ref, "usb-ref", usb_ref_parents, 0x4c,
+ 0, 1, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data ap_ipa_axi_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_512m.hw },
+};
+static SPRD_MUX_CLK_DATA(ap_ipa_axi, "ap-ipa-axi", ap_ipa_axi_parents, 0x64,
+ 0, 1, UMS9620_MUX_FLAG);
+static SPRD_DIV_CLK_HW(ap_ipa_apb, "ap-ipa-apb", &ap_ipa_axi.common.hw, 0x6c,
+ 0, 2, 0);
+
+static const struct clk_parent_data ipa_dpu_parents[] = {
+ { .hw = &tgpll_192m.hw },
+ { .hw = &tgpll_256m.hw },
+ { .hw = &tgpll_384m.hw },
+ { .hw = &tgpll_512m.hw },
+};
+static SPRD_MUX_CLK_DATA(ipa_dpu, "ipa-dpu", ipa_dpu_parents, 0x7c,
+ 0, 2, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data ipa_dpi_parents[] = {
+ { .hw = &tgpll_128m.hw },
+ { .hw = &tgpll_192m.hw },
+ { .hw = &pixelpll.common.hw},
+ { .hw = &tgpll_307m2.hw },
+};
+static SPRD_COMP_CLK_DATA_OFFSET(ipa_dpi, "ipa-dpi", ipa_dpi_parents, 0x88,
+ 0, 2, -4, 0, 4, 0);
+
+static SPRD_DIV_CLK_HW(usb_153m6, "usb-153m6", &tgpll_153m6.hw, 0xb4,
+ 0, 1, 0);
+
+static struct sprd_clk_common *ums9620_ipa_clk[] = {
+ /* address base is 0x25010000 */
+ &ipa_axi.common,
+ &ipa_apb.common,
+ &usb_ref.common,
+ &ap_ipa_axi.common,
+ &ap_ipa_apb.common,
+ &ipa_dpu.common,
+ &ipa_dpi.common,
+ &usb_153m6.common,
+};
+
+static struct clk_hw_onecell_data ums9620_ipa_clk_hws = {
+ .hws = {
+ [CLK_IPA_AXI] = &ipa_axi.common.hw,
+ [CLK_IPA_APB] = &ipa_apb.common.hw,
+ [CLK_USB_REF] = &usb_ref.common.hw,
+ [CLK_AP_IPA_AXI] = &ap_ipa_axi.common.hw,
+ [CLK_AP_IPA_APB] = &ap_ipa_apb.common.hw,
+ [CLK_IPA_DPU] = &ipa_dpu.common.hw,
+ [CLK_IPA_DPI] = &ipa_dpi.common.hw,
+ [CLK_USB_153M6] = &usb_153m6.common.hw,
+ },
+ .num = CLK_IPA_CLK_NUM,
+};
+
+static struct sprd_clk_desc ums9620_ipa_clk_desc = {
+ .clk_clks = ums9620_ipa_clk,
+ .num_clk_clks = ARRAY_SIZE(ums9620_ipa_clk),
+ .hw_clks = &ums9620_ipa_clk_hws,
+};
+
+/* ipa glb gate clocks*/
+/* ipa glb related gate clocks configure CLK_IGNORE_UNUSED because their
+ * power domain may be shut down, and they are controlled by related module.
+ */
+static SPRD_SC_GATE_CLK_FW_NAME(ipa_eb, "ipa-eb", "ext-26m", 0x4,
+ 0x1000, BIT(0), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(tft_eb, "tft-eb", "ext-26m", 0x4,
+ 0x1000, BIT(1), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ipa_access_phycp_en, "ipa-access-phycp-en", "ext-26m",
+ 0x8, 0x1000, BIT(0), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ipa_access_pscp_en, "ipa-access-pscp-en", "ext-26m",
+ 0x8, 0x1000, BIT(1), CLK_IGNORE_UNUSED, 0);
+
+static struct sprd_clk_common *ums9620_ipaglb_gate[] = {
+ /* address base is 0x25240000 */
+ &ipa_eb.common,
+ &tft_eb.common,
+ &ipa_access_phycp_en.common,
+ &ipa_access_pscp_en.common,
+};
+
+static struct clk_hw_onecell_data ums9620_ipaglb_gate_hws = {
+ .hws = {
+ [CLK_IPA_EB] = &ipa_eb.common.hw,
+ [CLK_TFT_EB] = &tft_eb.common.hw,
+ [CLK_IPA_ACCESS_PHYCP_EN] = &ipa_access_phycp_en.common.hw,
+ [CLK_IPA_ACCESS_PSCP_EN] = &ipa_access_pscp_en.common.hw,
+ },
+ .num = CLK_IPAGLB_GATE_NUM,
+};
+
+static struct sprd_clk_desc ums9620_ipaglb_gate_desc = {
+ .clk_clks = ums9620_ipaglb_gate,
+ .num_clk_clks = ARRAY_SIZE(ums9620_ipaglb_gate),
+ .hw_clks = &ums9620_ipaglb_gate_hws,
+};
+
+/* ipa dispc1 glb gate clocks */
+static SPRD_SC_GATE_CLK_FW_NAME(ipa_dpu1_eb, "ipa-dup1-eb", "ext-26m", 0x0,
+ 0x1000, BIT(0), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ipa_dptx_eb, "ipa-dptx-eb", "ext-26m", 0x0,
+ 0x1000, BIT(1), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ipa_hdcp_eb, "ipa-hdcp-eb", "ext-26m", 0x0,
+ 0x1000, BIT(2), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ipa_tca_eb, "ipa-tca-eb", "ext-26m", 0x0,
+ 0x1000, BIT(3), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ipa_usb31pll_eb, "ipa-usb31pll-eb", "ext-26m", 0x0,
+ 0x1000, BIT(4), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ipa_ckg_eb, "ipa-ckg-eb", "ext-26m", 0x0,
+ 0x1000, BIT(5), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(ipa_trng_eb, "ipa-trng-eb", "ext-26m", 0x0,
+ 0x1000, BIT(6), CLK_IGNORE_UNUSED, 0);
+
+static struct sprd_clk_common *ums9620_ipadispcglb_gate[] = {
+ /* address base is 0x31800000 */
+ &ipa_dpu1_eb.common,
+ &ipa_dptx_eb.common,
+ &ipa_hdcp_eb.common,
+ &ipa_tca_eb.common,
+ &ipa_usb31pll_eb.common,
+ &ipa_ckg_eb.common,
+ &ipa_trng_eb.common,
+};
+
+static struct clk_hw_onecell_data ums9620_ipadispcglb_gate_hws = {
+ .hws = {
+ [CLK_IPA_DPU1_EB] = &ipa_dpu1_eb.common.hw,
+ [CLK_IPA_DPTX_EB] = &ipa_dptx_eb.common.hw,
+ [CLK_IPA_HDCP_EB] = &ipa_hdcp_eb.common.hw,
+ [CLK_IPA_TCA_EB] = &ipa_tca_eb.common.hw,
+ [CLK_IPA_USB31PLL_EB] = &ipa_usb31pll_eb.common.hw,
+ [CLK_IPA_CKG_EB] = &ipa_ckg_eb.common.hw,
+ [CLK_IPA_TRNG_EB] = &ipa_trng_eb.common.hw,
+ },
+ .num = CLK_IPADISPC_GATE_NUM,
+};
+
+static struct sprd_clk_desc ums9620_ipadispcglb_gate_desc = {
+ .clk_clks = ums9620_ipadispcglb_gate,
+ .num_clk_clks = ARRAY_SIZE(ums9620_ipadispcglb_gate),
+ .hw_clks = &ums9620_ipadispcglb_gate_hws,
+};
+
+/* pcie apb gate clocks */
+/* pcie related gate clocks configure CLK_IGNORE_UNUSED because their power
+ * domain may be shut down, and they are controlled by related module.
+ */
+static SPRD_SC_GATE_CLK_FW_NAME(pcie3_aux_eb, "pcie3-aux-eb", "ext-26m", 0x4,
+ 0x1000, BIT(6), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(pcie3_eb, "pcie3-eb", "ext-26m", 0x4,
+ 0x1000, BIT(7), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(nic400_tranmon_eb, "nic400-tranmon-eb", "ext-26m",
+ 0x4, 0x1000, BIT(8), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(nic400_cfg_eb, "nic400-cfg-eb", "ext-26m", 0x4,
+ 0x1000, BIT(9), CLK_IGNORE_UNUSED, 0);
+static SPRD_SC_GATE_CLK_FW_NAME(pcie3_phy_eb, "pcie3-phy-eb", "ext-26m", 0x4,
+ 0x1000, BIT(10), CLK_IGNORE_UNUSED, 0);
+
+static struct sprd_clk_common *ums9620_pcieapb_gate[] = {
+ /* address base is 0x26000000 */
+ &pcie3_aux_eb.common,
+ &pcie3_eb.common,
+ &nic400_tranmon_eb.common,
+ &nic400_cfg_eb.common,
+ &pcie3_phy_eb.common,
+};
+
+static struct clk_hw_onecell_data ums9620_pcieapb_gate_hws = {
+ .hws = {
+ [CLK_PCIE3_AUX_EB] = &pcie3_aux_eb.common.hw,
+ [CLK_PCIE3_EB] = &pcie3_eb.common.hw,
+ [CLK_NIC400_TRANMON_EB] = &nic400_tranmon_eb.common.hw,
+ [CLK_NIC400_CFG_EB] = &nic400_cfg_eb.common.hw,
+ [CLK_PCIE3_PHY] = &pcie3_phy_eb.common.hw,
+ },
+ .num = CLK_PCIEAPB_GATE_NUM,
+};
+
+static struct sprd_clk_desc ums9620_pcieapb_gate_desc = {
+ .clk_clks = ums9620_pcieapb_gate,
+ .num_clk_clks = ARRAY_SIZE(ums9620_pcieapb_gate),
+ .hw_clks = &ums9620_pcieapb_gate_hws,
+};
+
+/* pcie clocks*/
+static const struct clk_parent_data pcie_axi_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_192m.hw },
+ { .hw = &tgpll_384m.hw },
+ { .hw = &v4nrpll_409m6.hw },
+};
+static SPRD_MUX_CLK_DATA(pcie_axi, "pcie-axi", pcie_axi_parents, 0x20,
+ 0, 2, CLK_SET_RATE_NO_REPARENT);
+static SPRD_DIV_CLK_HW(pcie_apb, "pcie-apb", &pcie_axi.common.hw, 0x24,
+ 0, 2, 0);
+
+static const struct clk_parent_data pcie_aux_parents[] = {
+ { .hw = &clk_2m.hw },
+ { .hw = &rco_100m_2m.hw },
+};
+static SPRD_MUX_CLK_DATA(pcie_aux, "pcie-aux", pcie_aux_parents, 0x28,
+ 0, 1, UMS9620_MUX_FLAG);
+
+static struct sprd_clk_common *ums9620_pcie_clk[] = {
+ /* address base is 0x26004000 */
+ &pcie_axi.common,
+ &pcie_apb.common,
+ &pcie_aux.common,
+};
+
+static struct clk_hw_onecell_data ums9620_pcie_clk_hws = {
+ .hws = {
+ [CLK_PCIE_AXI] = &pcie_axi.common.hw,
+ [CLK_PCIE_APB] = &pcie_apb.common.hw,
+ [CLK_PCIE_AUX] = &pcie_aux.common.hw,
+ },
+ .num = CLK_PCIE_CLK_NUM,
+};
+
+static struct sprd_clk_desc ums9620_pcie_clk_desc = {
+ .clk_clks = ums9620_pcie_clk,
+ .num_clk_clks = ARRAY_SIZE(ums9620_pcie_clk),
+ .hw_clks = &ums9620_pcie_clk_hws,
+};
+
+/* mm ahb gate clocks */
+/* mm related gate clocks configure CLK_IGNORE_UNUSED because their power
+ * domain may be shut down, and they are controlled by related module.
+ */
+static SPRD_SC_GATE_CLK_HW(jpg_en, "jpg-en", &mm_eb.common.hw, 0x0,
+ 0x1000, BIT(0), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(ckg_en, "ckg-en", &mm_eb.common.hw, 0x0,
+ 0x1000, BIT(1), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(mailbox_en, "mailbox-en", &mm_eb.common.hw, 0x0,
+ 0x1000, BIT(2), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(dvfs_en, "dvfs-en", &mm_eb.common.hw, 0x0,
+ 0x1000, BIT(3), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(sys_mtx_cfg_en, "sys_mtx-cfg-en", &mm_eb.common.hw, 0x0,
+ 0x1000, BIT(4), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(sys_cfg_mtx_busmon_en, "sys-cfg-mtx-busmon-en", &mm_eb.common.hw,
+ 0x0, 0x1000, BIT(5), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(sys_mst_busmon_en, "sys-mst-busmon-en", &mm_eb.common.hw,
+ 0x0, 0x1000, BIT(6), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(sys_tck_en, "sys-tck-en", &mm_eb.common.hw, 0x0,
+ 0x1000, BIT(7), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(mm_mtx_data_en, "mm-mtx-data-en", &mm_eb.common.hw, 0x0,
+ 0x1000, BIT(8), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(isp_en, "isp-en", &mm_eb.common.hw, 0x4,
+ 0x1000, BIT(0), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(cpp_en, "cpp-en", &mm_eb.common.hw, 0x4,
+ 0x1000, BIT(1), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(depth_en, "depth-en", &mm_eb.common.hw, 0x4,
+ 0x1000, BIT(2), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(fd_en, "fd-em", &mm_eb.common.hw, 0x4,
+ 0x1000, BIT(3), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(dewarp_en, "dewarp-en", &mm_eb.common.hw, 0x4,
+ 0x1000, BIT(4), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(isp_mtx_en, "isp-mtx-en", &mm_eb.common.hw, 0x4,
+ 0x1000, BIT(5), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(isp_blk_cfg_en, "isp-blk-cfg-en", &mm_eb.common.hw, 0x4,
+ 0x1000, BIT(6), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(isp_blk_en, "isp-blk-en", &mm_eb.common.hw, 0x4,
+ 0x1000, BIT(7), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(dwp_clk_gate_en, "dwp-clk-gate-en", &mm_eb.common.hw, 0x4,
+ 0x1000, BIT(8), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(isp_blk_mst_busmon_en, "isp-blk-mst-busmon-en", &mm_eb.common.hw,
+ 0x4, 0x1000, BIT(9), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(isp_tck_en, "isp-tck-en", &mm_eb.common.hw, 0x4,
+ 0x1000, BIT(10), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(vdsp_en, "vdsp-en", &mm_eb.common.hw, 0x8,
+ 0x1000, BIT(0), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(vdsp_m_en, "vdsp-m-en", &mm_eb.common.hw, 0x8,
+ 0x1000, BIT(1), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(vdma_en, "vdma-en", &mm_eb.common.hw, 0x8,
+ 0x1000, BIT(2), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(vdsp_tck_en, "vdsp-tck-en", &mm_eb.common.hw, 0x8,
+ 0x1000, BIT(3), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(vdsp_mtx_data_en, "vdsp-mtx-data-en", &mm_eb.common.hw, 0x8,
+ 0x1000, BIT(4), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(vdsp_blk_cfg_en, "vdsp-blk-cfg-en", &mm_eb.common.hw, 0x8,
+ 0x1000, BIT(5), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(mm_uart_en, "mm-uart-en", &mm_eb.common.hw, 0x8,
+ 0x1000, BIT(6), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(vdsp_blk_en, "vdsp-blk-en", &mm_eb.common.hw, 0x8,
+ 0x1000, BIT(7), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(vdsp_slv_busmon_en, "vdsp-slv-busmon-en", &mm_eb.common.hw,
+ 0x8, 0x1000, BIT(8), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(vdsp_mst_busmon_en, "vdsp-mst-busmon-en", &mm_eb.common.hw,
+ 0x8, 0x1000, BIT(9), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(idvau_en, "idvau-en", &mm_eb.common.hw, 0x8,
+ 0x1000, BIT(10), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(dvau_en, "dvau-en", &mm_eb.common.hw, 0x8,
+ 0x1000, BIT(11), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(ivau_en, "ivau-en", &mm_eb.common.hw, 0x8,
+ 0x1000, BIT(12), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(dcam_if_en, "dcam-if-en", &mm_eb.common.hw, 0xc,
+ 0x1000, BIT(0), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(dcam_if_lite_en, "dcam-if-lite-en", &mm_eb.common.hw, 0xc,
+ 0x1000, BIT(1), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(phy_cfg_en, "phy-cfg-en", &mm_eb.common.hw, 0xc,
+ 0x1000, BIT(2), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(dcam_mtx_en, "dcam-mtx-en", &mm_eb.common.hw, 0xc,
+ 0x1000, BIT(3), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(dcam_lite_mtx_en, "dcam-lite-mtx-en", &mm_eb.common.hw, 0xc,
+ 0x1000, BIT(4), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(dcam_blk_cfg_en, "dcam-blk-cfg-en", &mm_eb.common.hw, 0xc,
+ 0x1000, BIT(5), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(sensor0_en, "sensor0-en", &mm_eb.common.hw, 0xc,
+ 0x1000, BIT(6), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(sensor1_en, "sensor1-en", &mm_eb.common.hw, 0xc,
+ 0x1000, BIT(7), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(sensor2_en, "sensor2-en", &mm_eb.common.hw, 0xc,
+ 0x1000, BIT(8), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(sensor3_en, "sensor3-en", &mm_eb.common.hw, 0xc,
+ 0x1000, BIT(9), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(dcam_blk_en, "dcam-blk-en", &mm_eb.common.hw, 0xc,
+ 0x1000, BIT(10), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(dcam_tck_en, "dcam-tck-en", &mm_eb.common.hw, 0xc,
+ 0x1000, BIT(11), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(csi0_en, "csi0-en", &mm_eb.common.hw, 0xc,
+ 0x1000, BIT(12), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(csi1_en, "csi1-en", &mm_eb.common.hw, 0xc,
+ 0x1000, BIT(13), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(csi2_en, "csi2-en", &mm_eb.common.hw, 0xc,
+ 0x1000, BIT(14), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(csi3_en, "csi3-en", &mm_eb.common.hw, 0xc,
+ 0x1000, BIT(15), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(ipa_en, "ipa-en", &mm_eb.common.hw, 0xc,
+ 0x1000, BIT(16), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+
+static struct sprd_clk_common *ums9620_mm_gate[] = {
+ /* address base is 0x30000000 */
+ &jpg_en.common,
+ &ckg_en.common,
+ &mailbox_en.common,
+ &dvfs_en.common,
+ &sys_mtx_cfg_en.common,
+ &sys_cfg_mtx_busmon_en.common,
+ &sys_mst_busmon_en.common,
+ &sys_tck_en.common,
+ &mm_mtx_data_en.common,
+ &isp_en.common,
+ &cpp_en.common,
+ &depth_en.common,
+ &fd_en.common,
+ &dewarp_en.common,
+ &isp_mtx_en.common,
+ &isp_blk_cfg_en.common,
+ &isp_blk_en.common,
+ &dwp_clk_gate_en.common,
+ &isp_blk_mst_busmon_en.common,
+ &isp_tck_en.common,
+ &vdsp_en.common,
+ &vdsp_m_en.common,
+ &vdma_en.common,
+ &vdsp_tck_en.common,
+ &vdsp_mtx_data_en.common,
+ &vdsp_blk_cfg_en.common,
+ &mm_uart_en.common,
+ &vdsp_blk_en.common,
+ &vdsp_slv_busmon_en.common,
+ &vdsp_mst_busmon_en.common,
+ &idvau_en.common,
+ &dvau_en.common,
+ &ivau_en.common,
+ &dcam_if_en.common,
+ &dcam_if_lite_en.common,
+ &phy_cfg_en.common,
+ &dcam_mtx_en.common,
+ &dcam_lite_mtx_en.common,
+ &dcam_blk_cfg_en.common,
+ &sensor0_en.common,
+ &sensor1_en.common,
+ &sensor2_en.common,
+ &sensor3_en.common,
+ &dcam_blk_en.common,
+ &dcam_tck_en.common,
+ &csi0_en.common,
+ &csi1_en.common,
+ &csi2_en.common,
+ &csi3_en.common,
+ &ipa_en.common,
+
+};
+
+static struct clk_hw_onecell_data ums9620_mm_gate_hws = {
+ .hws = {
+ [CLK_JPG_EN] = &jpg_en.common.hw,
+ [CLK_CKG_EN] = &ckg_en.common.hw,
+ [CLK_MAILBOX_EN] = &mailbox_en.common.hw,
+ [CLK_DVFS_EN] = &dvfs_en.common.hw,
+ [CLK_SYS_MTX_CFG_EN] = &sys_mtx_cfg_en.common.hw,
+ [CLK_SYS_CFG_MTX_BUSMON_EN] = &sys_cfg_mtx_busmon_en.common.hw,
+ [CLK_SYS_MST_BUSMON_EN] = &sys_mst_busmon_en.common.hw,
+ [CLK_SYS_TCK_EN] = &sys_tck_en.common.hw,
+ [CLK_MM_MTX_DATA_EN] = &mm_mtx_data_en.common.hw,
+ [CLK_ISP_EN] = &isp_en.common.hw,
+ [CLK_CPP_EN] = &cpp_en.common.hw,
+ [CLK_DEPTH_EN] = &depth_en.common.hw,
+ [CLK_FD_EN] = &fd_en.common.hw,
+ [CLK_DEWARP_EN] = &dewarp_en.common.hw,
+ [CLK_ISP_MTX_EN] = &isp_mtx_en.common.hw,
+ [CLK_ISP_BLK_CFG_EN] = &isp_blk_cfg_en.common.hw,
+ [CLK_ISP_BLK_EN] = &isp_blk_en.common.hw,
+ [CLK_DWP_CLK_GATE_EN] = &dwp_clk_gate_en.common.hw,
+ [CLK_ISP_BLK_MST_BUSMON_EN] = &isp_blk_mst_busmon_en.common.hw,
+ [CLK_ISP_TCK_EN] = &isp_tck_en.common.hw,
+ [CLK_VDSP_EN] = &vdsp_en.common.hw,
+ [CLK_VDSP_M_EN] = &vdsp_m_en.common.hw,
+ [CLK_VDMA_EN] = &vdma_en.common.hw,
+ [CLK_VDSP_TCK_EN] = &vdsp_tck_en.common.hw,
+ [CLK_VDSP_MTX_DATA_EN] = &vdsp_mtx_data_en.common.hw,
+ [CLK_VDSP_BLK_CFG_EN] = &vdsp_blk_cfg_en.common.hw,
+ [CLK_MM_UART_EN] = &mm_uart_en.common.hw,
+ [CLK_VDSP_BLK_EN] = &vdsp_blk_en.common.hw,
+ [CLK_VDSP_SLV_BUSMON_EN] = &vdsp_slv_busmon_en.common.hw,
+ [CLK_VDSP_MST_BUSMON_EN] = &vdsp_mst_busmon_en.common.hw,
+ [CLK_IDVAU_EN] = &idvau_en.common.hw,
+ [CLK_DVAU_EN] = &dvau_en.common.hw,
+ [CLK_IVAU_EN] = &ivau_en.common.hw,
+ [CLK_DCAM_IF_EN] = &dcam_if_en.common.hw,
+ [CLK_DCAM_IF_LITE_EN] = &dcam_if_lite_en.common.hw,
+ [CLK_PHY_CFG_EN] = &phy_cfg_en.common.hw,
+ [CLK_DCAM_MTX_EN] = &dcam_mtx_en.common.hw,
+ [CLK_DCAM_LITE_MTX_EN] = &dcam_lite_mtx_en.common.hw,
+ [CLK_DCAM_BLK_CFG_EN] = &dcam_blk_cfg_en.common.hw,
+ [CLK_SENSOR0_EN] = &sensor0_en.common.hw,
+ [CLK_SENSOR1_EN] = &sensor1_en.common.hw,
+ [CLK_SENSOR2_EN] = &sensor2_en.common.hw,
+ [CLK_SENSOR3_EN] = &sensor3_en.common.hw,
+ [CLK_DCAM_BLK_EN] = &dcam_blk_en.common.hw,
+ [CLK_DCAM_TCK_EN] = &dcam_tck_en.common.hw,
+ [CLK_CSI0_EN] = &csi0_en.common.hw,
+ [CLK_CSI1_EN] = &csi1_en.common.hw,
+ [CLK_CSI2_EN] = &csi2_en.common.hw,
+ [CLK_CSI3_EN] = &csi3_en.common.hw,
+ [CLK_IPA_EN] = &ipa_en.common.hw,
+ },
+ .num = CLK_MM_GATE_NUM,
+};
+
+static struct sprd_clk_desc ums9620_mm_gate_desc = {
+ .clk_clks = ums9620_mm_gate,
+ .num_clk_clks = ARRAY_SIZE(ums9620_mm_gate),
+ .hw_clks = &ums9620_mm_gate_hws,
+};
+
+/* mm clocks */
+static const struct clk_parent_data vdsp_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_307m2.hw },
+ { .hw = &tgpll_512m.hw },
+ { .hw = &tgpll_614m4.hw },
+ { .hw = &v4nrpll_819m2.hw },
+ { .hw = &vdsppll.common.hw }
+};
+static SPRD_MUX_CLK_DATA(vdsp, "vdsp", vdsp_parents, 0x28,
+ 0, 2, CLK_SET_RATE_NO_REPARENT);
+static SPRD_DIV_CLK_HW(vdsp_m, "vdsp-m", &vdsp.common.hw, 0x30,
+ 0, 2, 0);
+
+static const struct clk_parent_data vdma_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_153m6.hw },
+ { .hw = &tgpll_256m.hw },
+ { .hw = &tgpll_307m2.hw },
+ { .hw = &v4nrpll_409m6.hw },
+ { .hw = &tgpll_512m.hw },
+};
+static SPRD_MUX_CLK_DATA(vdma, "vdma", vdma_parents, 0x40,
+ 0, 3, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data vdsp_mtx_data_parents[] = {
+ { .hw = &tgpll_153m6.hw },
+ { .hw = &tgpll_307m2.hw },
+ { .hw = &v4nrpll_409m6.hw },
+ { .hw = &tgpll_512m.hw },
+};
+static SPRD_MUX_CLK_DATA(vdsp_mtx_data, "vdsp-mtx-data", vdsp_mtx_data_parents,
+ 0x58, 0, 2, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data vdsp_blk_cfg_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_48m.hw },
+ { .hw = &tgpll_64m.hw },
+ { .hw = &tgpll_96m.hw },
+ { .hw = &tgpll_128m.hw },
+};
+static SPRD_MUX_CLK_DATA(vdsp_blk_cfg, "vdsp-blk-cfg", vdsp_blk_cfg_parents,
+ 0x64, 0, 3, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data mm_uart_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_48m.hw },
+ { .hw = &tgpll_51m2.hw },
+ { .hw = &tgpll_96m.hw },
+};
+static SPRD_MUX_CLK_DATA(mm_uart, "mm-uart", mm_uart_parents, 0x70,
+ 0, 2, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data isp_parents[] = {
+ { .hw = &tgpll_153m6.hw },
+ { .hw = &tgpll_256m.hw },
+ { .hw = &tgpll_307m2.hw },
+ { .hw = &v4nrpll_409m6.hw },
+ { .hw = &tgpll_512m.hw },
+};
+static SPRD_MUX_CLK_DATA(isp, "isp", isp_parents, 0x7c,
+ 0, 3, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data cpp_parents[] = {
+ { .hw = &tgpll_128m.hw },
+ { .hw = &tgpll_192m.hw },
+ { .hw = &tgpll_256m.hw },
+ { .hw = &tgpll_307m2.hw },
+ { .hw = &tgpll_384m.hw },
+};
+static SPRD_MUX_CLK_DATA(cpp, "cpp", cpp_parents, 0x88,
+ 0, 3, UMS9620_MUX_FLAG);
+
+static SPRD_MUX_CLK_DATA(depth, "depth", cpp_parents, 0xa0,
+ 0, 3, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data fd_parents[] = {
+ { .hw = &tgpll_128m.hw },
+ { .hw = &tgpll_192m.hw },
+ { .hw = &tgpll_256m.hw },
+ { .hw = &tgpll_307m2.hw },
+ { .hw = &tgpll_384m.hw },
+};
+static SPRD_MUX_CLK_DATA(fd, "fd", fd_parents, 0xac,
+ 0, 3, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data dcam0_1_parents[] = {
+ { .hw = &tgpll_153m6.hw },
+ { .hw = &tgpll_256m.hw },
+ { .hw = &tgpll_307m2.hw },
+ { .hw = &v4nrpll_409m6.hw },
+ { .hw = &tgpll_512m.hw },
+};
+static SPRD_MUX_CLK_DATA(dcam0_1, "dcam0-1", dcam0_1_parents, 0xb8,
+ 0, 3, UMS9620_MUX_FLAG);
+static SPRD_MUX_CLK_DATA(dcam0_1_axi, "dcam0-1-axi", dcam0_1_parents, 0xc4,
+ 0, 3, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data dcam2_3_parents[] = {
+ { .hw = &tgpll_96m.hw },
+ { .hw = &tgpll_128m.hw },
+ { .hw = &tgpll_153m6.hw },
+ { .hw = &tgpll_192m.hw },
+ { .hw = &tgpll_256m.hw },
+};
+static SPRD_MUX_CLK_DATA(dcam2_3, "dcam2-3", dcam2_3_parents, 0xdc,
+ 0, 3, UMS9620_MUX_FLAG);
+static SPRD_MUX_CLK_DATA(dcam2_3_axi, "dcam2-3-axi", dcam2_3_parents, 0xe8,
+ 0, 3, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data mipi_csi0_parents[] = {
+ { .hw = &tgpll_256m.hw },
+ { .hw = &tgpll_384m.hw },
+ { .hw = &v4nrpll_409m6.hw },
+ { .hw = &tgpll_614m4.hw },
+ { .hw = &tgpll_768m.hw },
+};
+static SPRD_MUX_CLK_DATA(mipi_csi0, "mipi-csi0", mipi_csi0_parents, 0x100,
+ 0, 3, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data mipi_csi1_parents[] = {
+ { .hw = &tgpll_192m.hw },
+ { .hw = &tgpll_307m2.hw },
+ { .hw = &v4nrpll_409m6.hw },
+ { .hw = &tgpll_512m.hw },
+};
+static SPRD_MUX_CLK_DATA(mipi_csi1, "mipi-csi1", mipi_csi1_parents, 0x10c,
+ 0, 2, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data mipi_csi2_1_parents[] = {
+ { .hw = &tgpll_128m.hw },
+ { .hw = &tgpll_192m.hw },
+ { .hw = &tgpll_256m.hw },
+ { .hw = &tgpll_307m2.hw },
+};
+static SPRD_MUX_CLK_DATA(mipi_csi2_1, "mipi-csi2_1", mipi_csi2_1_parents,
+ 0x118, 0, 2, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data mipi_csi2_2_parents[] = {
+ { .hw = &tgpll_128m.hw },
+ { .hw = &tgpll_192m.hw },
+ { .hw = &tgpll_256m.hw },
+ { .hw = &tgpll_307m2.hw },
+};
+static SPRD_MUX_CLK_DATA(mipi_csi2_2, "mipi-csi2_2", mipi_csi2_2_parents,
+ 0x124, 0, 2, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data mipi_csi3_1_parents[] = {
+ { .hw = &tgpll_128m.hw },
+ { .hw = &tgpll_192m.hw },
+ { .hw = &tgpll_256m.hw },
+ { .hw = &tgpll_307m2.hw },
+};
+static SPRD_MUX_CLK_DATA(mipi_csi3_1, "mipi-csi3_1", mipi_csi3_1_parents,
+ 0x130, 0, 2, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data mipi_csi3_2_parents[] = {
+ { .hw = &tgpll_128m.hw },
+ { .hw = &tgpll_192m.hw },
+ { .hw = &tgpll_256m.hw },
+ { .hw = &tgpll_307m2.hw },
+};
+static SPRD_MUX_CLK_DATA(mipi_csi3_2, "mipi-csi3_2", mipi_csi3_2_parents,
+ 0x13c, 0, 2, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data dcam_mtx_parents[] = {
+ { .hw = &tgpll_153m6.hw },
+ { .hw = &tgpll_307m2.hw },
+ { .hw = &v4nrpll_409m6.hw },
+ { .hw = &tgpll_512m.hw },
+};
+static SPRD_MUX_CLK_DATA(dcam_mtx, "dcam-mtx", dcam_mtx_parents, 0x154,
+ 0, 2, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data dcam_blk_cfg_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_48m.hw },
+ { .hw = &tgpll_64m.hw },
+ { .hw = &tgpll_96m.hw },
+ { .hw = &tgpll_128m.hw },
+};
+static SPRD_MUX_CLK_DATA(dcam_blk_cfg, "dcam-blk-cfg", dcam_blk_cfg_parents,
+ 0x160, 0, 3, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data mm_mtx_data_parents[] = {
+ { .hw = &tgpll_153m6.hw },
+ { .hw = &tgpll_256m.hw },
+ { .hw = &tgpll_307m2.hw },
+ { .hw = &v4nrpll_409m6.hw },
+ { .hw = &tgpll_512m.hw },
+};
+static SPRD_MUX_CLK_DATA(mm_mtx_data, "mm-mtx-data", mm_mtx_data_parents,
+ 0x16c, 0, 3, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data jpg_parents[] = {
+ { .hw = &tgpll_153m6.hw },
+ { .hw = &tgpll_256m.hw },
+ { .hw = &tgpll_307m2.hw },
+ { .hw = &v4nrpll_409m6.hw },
+ { .hw = &tgpll_512m.hw },
+};
+static SPRD_MUX_CLK_DATA(jpg, "jpg", jpg_parents, 0x178,
+ 0, 3, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data mm_sys_cfg_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_48m.hw },
+ { .hw = &tgpll_64m.hw },
+ { .hw = &tgpll_96m.hw },
+ { .hw = &tgpll_128m.hw },
+};
+static SPRD_MUX_CLK_DATA(mm_sys_cfg, "mm-sys-cfg", mm_sys_cfg_parents,
+ 0x190, 0, 3, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data sensor_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_48m.hw },
+ { .hw = &tgpll_51m2.hw },
+ { .hw = &tgpll_64m.hw },
+ { .hw = &tgpll_96m.hw },
+};
+static SPRD_COMP_CLK_DATA_OFFSET(sensor0, "sensor0", sensor_parents, 0x19c,
+ 0, 3, -4, 0, 3, 0);
+static SPRD_COMP_CLK_DATA_OFFSET(sensor1, "sensor1", sensor_parents, 0x1a8,
+ 0, 3, -4, 0, 3, 0);
+static SPRD_COMP_CLK_DATA_OFFSET(sensor2, "sensor2", sensor_parents, 0x1b4,
+ 0, 3, -4, 0, 3, 0);
+static SPRD_COMP_CLK_DATA_OFFSET(sensor3, "sensor3", sensor_parents, 0x1c0,
+ 0, 3, -4, 0, 3, 0);
+
+static struct sprd_clk_common *ums9620_mm_clk[] = {
+ /* address base is 0x30010000 */
+ &vdsp.common,
+ &vdsp_m.common,
+ &vdma.common,
+ &vdsp_mtx_data.common,
+ &vdsp_blk_cfg.common,
+ &mm_uart.common,
+ &isp.common,
+ &cpp.common,
+ &depth.common,
+ &fd.common,
+ &dcam0_1.common,
+ &dcam0_1_axi.common,
+ &dcam2_3.common,
+ &dcam2_3_axi.common,
+ &mipi_csi0.common,
+ &mipi_csi1.common,
+ &mipi_csi2_1.common,
+ &mipi_csi2_2.common,
+ &mipi_csi3_1.common,
+ &mipi_csi3_2.common,
+ &dcam_mtx.common,
+ &dcam_blk_cfg.common,
+ &mm_mtx_data.common,
+ &jpg.common,
+ &mm_sys_cfg.common,
+ &sensor0.common,
+ &sensor1.common,
+ &sensor2.common,
+ &sensor3.common,
+};
+
+static struct clk_hw_onecell_data ums9620_mm_clk_hws = {
+ .hws = {
+ [CLK_VDSP] = &vdsp.common.hw,
+ [CLK_VDSP_M] = &vdsp_m.common.hw,
+ [CLK_VDMA] = &vdma.common.hw,
+ [CLK_VDSP_MTX_DATA] = &vdsp_mtx_data.common.hw,
+ [CLK_VDSP_BLK_CFG] = &vdsp_blk_cfg.common.hw,
+ [CLK_MM_UART] = &mm_uart.common.hw,
+ [CLK_ISP] = &isp.common.hw,
+ [CLK_CPP] = &cpp.common.hw,
+ [CLK_DEPTH] = &depth.common.hw,
+ [CLK_FD] = &fd.common.hw,
+ [CLK_DCAM0_1] = &dcam0_1.common.hw,
+ [CLK_DCAM0_1_AXI] = &dcam0_1_axi.common.hw,
+ [CLK_DCAM2_3] = &dcam2_3.common.hw,
+ [CLK_DCAM2_3_AXI] = &dcam2_3_axi.common.hw,
+ [CLK_MIPI_CSI0] = &mipi_csi0.common.hw,
+ [CLK_MIPI_CSI1] = &mipi_csi1.common.hw,
+ [CLK_MIPI_CSI2_1] = &mipi_csi2_1.common.hw,
+ [CLK_MIPI_CSI2_2] = &mipi_csi2_2.common.hw,
+ [CLK_MIPI_CSI3_1] = &mipi_csi3_1.common.hw,
+ [CLK_MIPI_CSI3_2] = &mipi_csi3_2.common.hw,
+ [CLK_DCAM_MTX] = &dcam_mtx.common.hw,
+ [CLK_DCAM_BLK_CFG] = &dcam_blk_cfg.common.hw,
+ [CLK_MM_MTX_DATA] = &mm_mtx_data.common.hw,
+ [CLK_JPG] = &jpg.common.hw,
+ [CLK_MM_SYS_CFG] = &mm_sys_cfg.common.hw,
+ [CLK_SENSOR0] = &sensor0.common.hw,
+ [CLK_SENSOR1] = &sensor1.common.hw,
+ [CLK_SENSOR2] = &sensor2.common.hw,
+ [CLK_SENSOR3] = &sensor3.common.hw,
+ },
+ .num = CLK_MM_CLK_NUM,
+};
+
+static struct sprd_clk_desc ums9620_mm_clk_desc = {
+ .clk_clks = ums9620_mm_clk,
+ .num_clk_clks = ARRAY_SIZE(ums9620_mm_clk),
+ .hw_clks = &ums9620_mm_clk_hws,
+};
+
+/* dpu vsp apb clock gates */
+/* dpu vsp apb clocks configure CLK_IGNORE_UNUSED because these clocks may be
+ * controlled by dpu sys at the same time. It may be cause an execption if
+ * kernel gates these clock.
+ */
+static SPRD_SC_GATE_CLK_HW(dpu_eb, "dpu-eb", &dpu_vsp_eb.common.hw, 0x0,
+ 0x1000, BIT(0), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(dsi0_eb, "dsi0-eb", &dpu_vsp_eb.common.hw, 0x0,
+ 0x1000, BIT(1), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(dsi1_eb, "dsi1-eb", &dpu_vsp_eb.common.hw, 0x0,
+ 0x1000, BIT(2), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(vpu_enc0_eb, "vpu-enc0-eb", &dpu_vsp_eb.common.hw, 0x0,
+ 0x1000, BIT(3), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(vpu_enc1_eb, "vpu-enc1-eb", &dpu_vsp_eb.common.hw, 0x0,
+ 0x1000, BIT(4), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(vpu_dec_eb, "dpu-dec-eb", &dpu_vsp_eb.common.hw, 0x0,
+ 0x1000, BIT(5), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(gsp0_eb, "gsp0-eb", &dpu_vsp_eb.common.hw, 0x0,
+ 0x1000, BIT(6), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(gsp1_eb, "gsp1-eb", &dpu_vsp_eb.common.hw, 0x0,
+ 0x1000, BIT(7), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(dpu_dvfs_eb, "dpu-dvfs-eb", &dpu_vsp_eb.common.hw, 0x0,
+ 0x1000, BIT(8), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(dpu_ckg_eb, "dpu-ckg-eb", &dpu_vsp_eb.common.hw, 0x0,
+ 0x1000, BIT(9), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_SC_GATE_CLK_HW(dpu_busmon_eb, "dpu-busmon-eb", &dpu_vsp_eb.common.hw, 0x0,
+ 0x1000, BIT(10), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_GATE_CLK_HW(m_div6clk_gate_en, "m-div6clk-gate-en", &dpu_vsp_eb.common.hw,
+ 0xb0, BIT(3), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+static SPRD_GATE_CLK_HW(s_div6clk_gate_en, "s-div6clk-gate-en", &dpu_vsp_eb.common.hw,
+ 0xb0, BIT(4), CLK_IGNORE_UNUSED, SPRD_GATE_NON_AON);
+
+static struct sprd_clk_common *ums9620_dpu_vsp_gate[] = {
+ /* address base is 0x30100000 */
+ &dpu_eb.common,
+ &dsi0_eb.common,
+ &dsi1_eb.common,
+ &vpu_enc0_eb.common,
+ &vpu_enc1_eb.common,
+ &vpu_dec_eb.common,
+ &gsp0_eb.common,
+ &gsp1_eb.common,
+ &dpu_dvfs_eb.common,
+ &dpu_ckg_eb.common,
+ &dpu_busmon_eb.common,
+ &m_div6clk_gate_en.common,
+ &s_div6clk_gate_en.common,
+};
+
+static struct clk_hw_onecell_data ums9620_dpu_vsp_gate_hws = {
+ .hws = {
+ [CLK_DPU_EB] = &dpu_eb.common.hw,
+ [CLK_DSI0_EB] = &dsi0_eb.common.hw,
+ [CLK_DSI1_EB] = &dsi1_eb.common.hw,
+ [CLK_VPU_ENC0_EB] = &vpu_enc0_eb.common.hw,
+ [CLK_VPU_ENC1_EB] = &vpu_enc1_eb.common.hw,
+ [CLK_VPU_DEC_EB] = &vpu_dec_eb.common.hw,
+ [CLK_GSP0_EB] = &gsp0_eb.common.hw,
+ [CLK_GSP1_EB] = &gsp1_eb.common.hw,
+ [CLK_DPU_DVFS_EB] = &dpu_dvfs_eb.common.hw,
+ [CLK_DPU_CKG_EB] = &dpu_ckg_eb.common.hw,
+ [CLK_DPU_BUSMON_EB] = &dpu_busmon_eb.common.hw,
+ [CLK_M_DIV6CLK_GATE_EN] = &m_div6clk_gate_en.common.hw,
+ [CLK_S_DIV6CLK_GATE_EN] = &s_div6clk_gate_en.common.hw,
+ },
+ .num = CLK_DPU_VSP_GATE_NUM,
+};
+
+static struct sprd_clk_desc ums9620_dpu_vsp_gate_desc = {
+ .clk_clks = ums9620_dpu_vsp_gate,
+ .num_clk_clks = ARRAY_SIZE(ums9620_dpu_vsp_gate),
+ .hw_clks = &ums9620_dpu_vsp_gate_hws,
+};
+
+/* dpu vsp clocks */
+static const struct clk_parent_data dpu_cfg_parents[] = {
+ { .fw_name = "ext-26m" },
+ { .hw = &tgpll_128m.hw },
+ { .hw = &tgpll_153m6.hw },
+};
+static SPRD_MUX_CLK_DATA(dpu_cfg, "dpu-cfg", dpu_cfg_parents, 0x28,
+ 0, 2, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data vpu_mtx_parents[] = {
+ { .hw = &tgpll_256m.hw },
+ { .hw = &tgpll_307m2.hw },
+ { .hw = &tgpll_384m.hw },
+ { .hw = &tgpll_512m.hw },
+};
+static SPRD_MUX_CLK_DATA(vpu_mtx, "vpu-mtx", vpu_mtx_parents, 0x34,
+ 0, 2, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data vpu_enc_parents[] = {
+ { .hw = &tgpll_256m.hw },
+ { .hw = &tgpll_307m2.hw },
+ { .hw = &tgpll_384m.hw },
+ { .hw = &tgpll_512m.hw },
+};
+static SPRD_MUX_CLK_DATA(vpu_enc, "vpu-enc", vpu_enc_parents, 0x40,
+ 0, 2, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data vpu_dec_parents[] = {
+ { .hw = &tgpll_256m.hw },
+ { .hw = &tgpll_307m2.hw },
+ { .hw = &tgpll_384m.hw },
+ { .hw = &tgpll_512m.hw },
+ { .hw = &pixelpll_668m25.hw },
+};
+static SPRD_MUX_CLK_DATA(vpu_dec, "vpu-dec", vpu_dec_parents, 0x4c,
+ 0, 3, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data gsp_parents[] = {
+ { .hw = &tgpll_256m.hw },
+ { .hw = &tgpll_307m2.hw },
+ { .hw = &tgpll_384m.hw },
+ { .hw = &tgpll_512m.hw },
+};
+static SPRD_MUX_CLK_DATA(gsp0, "gsp0", gsp_parents, 0x58,
+ 0, 2, UMS9620_MUX_FLAG);
+static SPRD_MUX_CLK_DATA(gsp1, "gsp1", gsp_parents, 0x64,
+ 0, 2, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data dispc0_parents[] = {
+ { .hw = &tgpll_256m.hw },
+ { .hw = &tgpll_307m2.hw },
+ { .hw = &tgpll_384m.hw },
+ { .hw = &v4nrpll_409m6.hw },
+ { .hw = &tgpll_512m.hw },
+ { .hw = &v4nrpll_614m4.hw },
+};
+static SPRD_MUX_CLK_DATA(dispc0, "dispc0", dispc0_parents, 0x70,
+ 0, 3, UMS9620_MUX_FLAG);
+
+static const struct clk_parent_data dispc0_dpi_parents[] = {
+ { .hw = &tgpll_256m.hw },
+ { .hw = &tgpll_307m2.hw },
+ { .fw_name = "dphy-312m5" },
+ { .hw = &tgpll_384m.hw },
+ { .fw_name = "dphy-416m7" },
+};
+static SPRD_COMP_CLK_DATA_OFFSET(dispc0_dpi, "dispc0-dpi", dispc0_dpi_parents, 0x7c,
+ 0, 3, -4, 0, 4, 0);
+
+static struct sprd_clk_common *ums9620_dpu_vsp_clk[] = {
+ /* address base is 0x30110000 */
+ &dpu_cfg.common,
+ &vpu_mtx.common,
+ &vpu_enc.common,
+ &vpu_dec.common,
+ &gsp0.common,
+ &gsp1.common,
+ &dispc0.common,
+ &dispc0_dpi.common,
+};
+
+static struct clk_hw_onecell_data ums9620_dpu_vsp_clk_hws = {
+ .hws = {
+ [CLK_DPU_CFG] = &dpu_cfg.common.hw,
+ [CLK_VPU_MTX] = &vpu_mtx.common.hw,
+ [CLK_VPU_ENC] = &vpu_enc.common.hw,
+ [CLK_VPU_DEC] = &vpu_dec.common.hw,
+ [CLK_GSP0] = &gsp0.common.hw,
+ [CLK_GSP1] = &gsp1.common.hw,
+ [CLK_DISPC0] = &dispc0.common.hw,
+ [CLK_DISPC0_DPI] = &dispc0_dpi.common.hw,
+ },
+ .num = CLK_DPU_VSP_CLK_NUM,
+};
+
+static struct sprd_clk_desc ums9620_dpu_vsp_clk_desc = {
+ .clk_clks = ums9620_dpu_vsp_clk,
+ .num_clk_clks = ARRAY_SIZE(ums9620_dpu_vsp_clk),
+ .hw_clks = &ums9620_dpu_vsp_clk_hws,
+};
+
+static const struct of_device_id sprd_ums9620_clk_ids[] = {
+ { .compatible = "sprd,ums9620-pmu-gate", /* 0x64910000 */
+ .data = &ums9620_pmu_gate_desc },
+ { .compatible = "sprd,ums9620-g1-pll", /* 0x64304000 */
+ .data = &ums9620_g1_pll_desc },
+ { .compatible = "sprd,ums9620-g5l-pll", /* 0x64324000 */
+ .data = &ums9620_g5l_pll_desc },
+ { .compatible = "sprd,ums9620-g5r-pll", /* 0x64320000 */
+ .data = &ums9620_g5r_pll_desc },
+ { .compatible = "sprd,ums9620-g8-pll", /* 0x6432c000 */
+ .data = &ums9620_g8_pll_desc },
+ { .compatible = "sprd,ums9620-g9-pll", /* 0x64330000 */
+ .data = &ums9620_g9_pll_desc },
+ { .compatible = "sprd,ums9620-g10-pll", /* 0x64334000 */
+ .data = &ums9620_g10_pll_desc },
+ { .compatible = "sprd,ums9620-apapb-gate", /* 0x20100000 */
+ .data = &ums9620_apapb_gate_desc },
+ { .compatible = "sprd,ums9620-ap-clk", /* 0x20010000 */
+ .data = &ums9620_ap_clk_desc },
+ { .compatible = "sprd,ums9620-apahb-gate", /* 0x20000000 */
+ .data = &ums9620_apahb_gate_desc },
+ { .compatible = "sprd,ums9620-aon-gate", /* 0x64900000 */
+ .data = &ums9620_aon_gate_desc },
+ { .compatible = "sprd,ums9620-aonapb-clk", /* 0x64920000 */
+ .data = &ums9620_aonapb_clk_desc },
+ { .compatible = "sprd,ums9620-topdvfs-clk", /* 0x64940000 */
+ .data = &ums9620_topdvfs_clk_desc },
+ { .compatible = "sprd,ums9620-ipaapb-gate", /* 0x25000000 */
+ .data = &ums9620_ipaapb_gate_desc },
+ { .compatible = "sprd,ums9620-ipa-clk", /* 0x25010000 */
+ .data = &ums9620_ipa_clk_desc },
+ { .compatible = "sprd,ums9620-ipaglb-gate", /* 0x25240000 */
+ .data = &ums9620_ipaglb_gate_desc },
+ { .compatible = "sprd,ums9620-ipadispc-gate", /* 0x31800000 */
+ .data = &ums9620_ipadispcglb_gate_desc },
+ { .compatible = "sprd,ums9620-pcieapb-gate", /* 0x26000000 */
+ .data = &ums9620_pcieapb_gate_desc },
+ { .compatible = "sprd,ums9620-pcie-clk", /* 0x26004000 */
+ .data = &ums9620_pcie_clk_desc },
+ { .compatible = "sprd,ums9620-mm-gate", /* 0x30000000 */
+ .data = &ums9620_mm_gate_desc },
+ { .compatible = "sprd,ums9620-mm-clk", /* 0x30010000 */
+ .data = &ums9620_mm_clk_desc },
+ { .compatible = "sprd,ums9620-dpu-vsp-gate", /* 0x30100000 */
+ .data = &ums9620_dpu_vsp_gate_desc },
+ { .compatible = "sprd,ums9620-dpu-vsp-clk", /* 0x30110000 */
+ .data = &ums9620_dpu_vsp_clk_desc },
+ { }
+};
+MODULE_DEVICE_TABLE(of, sprd_ums9620_clk_ids);
+
+static int ums9620_clk_probe(struct platform_device *pdev)
+{
+ const struct sprd_clk_desc *desc;
+ int ret;
+
+ desc = device_get_match_data(&pdev->dev);
+ if (!desc)
+ return -ENODEV;
+
+ ret = sprd_clk_regmap_init(pdev, desc);
+ if (ret)
+ return ret;
+
+ return sprd_clk_probe(&pdev->dev, desc->hw_clks);
+}
+
+static struct platform_driver ums9620_clk_driver = {
+ .probe = ums9620_clk_probe,
+ .driver = {
+ .name = "ums9620-clk",
+ .of_match_table = sprd_ums9620_clk_ids,
+ },
+};
+module_platform_driver(ums9620_clk_driver);
+
+MODULE_DESCRIPTION("Unisoc UMS9620 Clock Driver");
+MODULE_LICENSE("GPL");
--
2.41.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH V2 1/3] dt-bindings: clk: sprd: Add UMS9620 support
2024-01-04 7:21 ` [PATCH V2 1/3] dt-bindings: clk: sprd: Add UMS9620 support Chunyan Zhang
@ 2024-01-04 8:48 ` Krzysztof Kozlowski
0 siblings, 0 replies; 6+ messages in thread
From: Krzysztof Kozlowski @ 2024-01-04 8:48 UTC (permalink / raw)
To: Chunyan Zhang, Stephen Boyd, Rob Herring, Krzysztof Kozlowski,
Conor Dooley
Cc: linux-clk, devicetree, linux-kernel, Orson Zhai, Baolin Wang,
Chunyan Zhang
On 04/01/2024 08:21, Chunyan Zhang wrote:
> "#clock-cells":
> const: 1
>
> clocks:
> - minItems: 1
> - maxItems: 4
> description: |
> The input parent clock(s) phandle for the clock, only list
> fixed clocks which are declared in devicetree.
>
> - clock-names:
Implement my comments from v1.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH V2 2/3] clk: sprd: Add dt-bindings include file for UMS9620
2024-01-04 7:21 ` [PATCH V2 2/3] clk: sprd: Add dt-bindings include file for UMS9620 Chunyan Zhang
@ 2024-01-04 8:49 ` Krzysztof Kozlowski
0 siblings, 0 replies; 6+ messages in thread
From: Krzysztof Kozlowski @ 2024-01-04 8:49 UTC (permalink / raw)
To: Chunyan Zhang, Stephen Boyd, Rob Herring, Krzysztof Kozlowski,
Conor Dooley
Cc: linux-clk, devicetree, linux-kernel, Orson Zhai, Baolin Wang,
Chunyan Zhang
On 04/01/2024 08:21, Chunyan Zhang wrote:
> This file defines all UMS9620 clock indexes. It should be included in
> the DTS file(s) in which there're devices using these clocks.
>
> Signed-off-by: Chunyan Zhang <chunyan.zhang@unisoc.com>
> ---
Implement my comments from v1.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-01-04 8:49 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-01-04 7:21 [PATCH V2 0/3] Add UMS9620 clocks driver and bindings Chunyan Zhang
2024-01-04 7:21 ` [PATCH V2 1/3] dt-bindings: clk: sprd: Add UMS9620 support Chunyan Zhang
2024-01-04 8:48 ` Krzysztof Kozlowski
2024-01-04 7:21 ` [PATCH V2 2/3] clk: sprd: Add dt-bindings include file for UMS9620 Chunyan Zhang
2024-01-04 8:49 ` Krzysztof Kozlowski
2024-01-04 7:21 ` [PATCH V2 3/3] clk: sprd: add support " Chunyan Zhang
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).