Amlogic clock changes for v7.3

* Fix the incorrect parent number of the 32k clock on GXBB
 * Add the AO and peripheral clock controllers for the new A9 chip
 -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEE9OFZrhjz9W1fG7cb5vwPHDfy2oUFAmpspMEACgkQ5vwPHDfy
 2oUc2BAAr4p6ygDoxRof6N/NjNlJebaYWviWhwaKDdM9a8UaKKtYeqQP1ye/1Nzv
 qIUcLCMDqQP1UU4xsErIDcuOLBEZ9l9WWUvL8aMJwNWyZ+l1BFdxROhnHTqfUj+i
 j636C+7/t9/c7PVu5C+v7i7cAMPCQQx48p1KQskmWiEJBfOt8fgIbfpdIpy9HM4V
 FprCnyMZdqx9DjUB1n9LWFwAN2skEwplZp3Vg0UZCtKLxdW6RGJ9ALYlknrWTkKL
 hqWMMQFofNBlBlMaXKrNKAlZfaegn/0pNrAeIpX3rSk8a/bdjQ7FVPtFfSfIHcw+
 Z8uoxef3yuLI+c8x/SrRCPSLe83ZalOGtontmuWGT6prE7E89HqS1IqUbVoiMlDD
 EwbPUEGxLMMJUa3IP5WMGOCqTtnbiI/8gQVC4EgxPxWHiMr8qYHNRwVCfZhzZIic
 iinEU4UqehOoySapEZum/neBCbl9eJbr5bxxt2aKl60fQcXBJDEDUcju5JG56zuT
 m3OQAcAcKQoPcA4Fggdvyzc1eZMiEGjdYepT1WFNFq8aAA/qct0nse5GWyvZ9ZU8
 tWDFKGwBfI1BfvGnFV7r1CN+wwF77I8d0Yf/6tx64iLYG+OVoGT1764fq+xOp/wu
 33BNxGNfW6+tPrHrQp6QHPaC/lTAGVKimGe7usDSomLjDpyZBfU=
 =pzDk
 -----END PGP SIGNATURE-----
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQJIBAABCAAyFiEE9L57QeeUxqYDyoaDrQKIl8bklSUFAmp7/0AUHHN3Ym95ZEBj
 aHJvbWl1bS5vcmcACgkQrQKIl8bklSU0QhAAhtpaF2R3Dnp2+rNaCBEnqmdEqU8f
 LgK48CXz/a97wJi1QIXfVihajkEBrxi1+j01TJNzEQcFuW2UkXoRbn97ZaPathd+
 GoOv+da5IU6e1FwctdHCWXff8Y6tkdkYTP7bAC6/n7m146muNt99MSO1Htkb3x5i
 0klXsu+fHQQ+EYcUo31secuMJbC1R94JhF1Oz+MOsSygNbe64e6aJJS3XkZ1x1py
 2TeP+/AF53AwYtUx1z0zdHP/xLsyIJnsPmt5Jfzbt3UtKTBOP/IAoyvDSjGRa9kb
 E7wWnJ7z5GRwZAk4L7kbtrs7nruNSQT8QbHERw87b1uFA2N+gl5k7M+j3pEXdQgo
 K63uzCoNPyoIsghgg0f5fXBz28eE2UsG9W4JkNfEGcjJK7cSAX7/68dsY4is/tJs
 Rjy+uLRcBCLtcHOgMZQNTSISAqWt1RBdU6AElKviFNR1nw05xCN9jDRB9xEwYNo/
 ZEW9hwjAVfjeD/Yrzs8vqBRYZqyD6lgZkGcM5cNUGTClPbrK+QmVQZXhuDH1HT4o
 aw1mwFX6FFUrfYKm5nHUWIelh6hETFt2T6L8L3edxRAzC/NYVcrx7KFzTq5387eV
 HXy/Y4xSimaaCR32tgkeUyv6ZRd8M/m7G4BW6q4ObJq/mKFYsv5VcQYgpAXHRxa8
 mW1136cLsgBTRpk=
 =Dxt8
 -----END PGP SIGNATURE-----

Merge tag 'clk-meson-v7.3-1' of ssh://github.com/BayLibre/clk-meson into clk-amlogic

Pull Amlogic clk driver updates from Jerome Brunet:

 - Fix the incorrect parent number of the 32k clock on Amlogic GXBB
 - Add the AO and peripheral clock controllers for the new Amlogic A9 chip

* tag 'clk-meson-v7.3-1' of ssh://github.com/BayLibre/clk-meson:
  clk: amlogic: Add A9 peripherals clock controller driver
  dt-bindings: clock: Add Amlogic A9 peripherals clock controller
  clk: amlogic: Add A9 AO clock controller driver
  dt-bindings: clock: Add Amlogic A9 AO clock controller
  clk: meson: align gxbb_32k_clk_sel number of parents with actual count
This commit is contained in:
Stephen Boyd 2026-08-11 22:05:41 -07:00
commit 3990334628
9 changed files with 3275 additions and 1 deletions

View File

@ -0,0 +1,76 @@
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
# Copyright (C) 2026 Amlogic, Inc. All rights reserved
%YAML 1.2
---
$id: http://devicetree.org/schemas/clock/amlogic,a9-aoclkc.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: Amlogic A9 Series Always-On Clock Controller
maintainers:
- Neil Armstrong <neil.armstrong@linaro.org>
- Jerome Brunet <jbrunet@baylibre.com>
- Jian Hu <jian.hu@amlogic.com>
- Xianwei Zhao <xianwei.zhao@amlogic.com>
properties:
compatible:
const: amlogic,a9-aoclkc
reg:
maxItems: 1
'#clock-cells':
const: 1
clocks:
minItems: 5
items:
- description: input oscillator
- description: input fclk div 3
- description: input fclk div 4
- description: input fclk div 5
- description: input sys clk
- description: external fixed 32k (optional)
clock-names:
minItems: 5
items:
- const: xtal
- const: fdiv3
- const: fdiv4
- const: fdiv5
- const: sys
- const: ext_32k
required:
- compatible
- reg
- '#clock-cells'
- clocks
- clock-names
additionalProperties: false
examples:
- |
soc {
#address-cells = <2>;
#size-cells = <2>;
clock-controller@0 {
compatible = "amlogic,a9-aoclkc";
reg = <0x0 0x0 0x0 0x58>;
#clock-cells = <1>;
clocks = <&xtal>,
<&scmi_clk 14>,
<&scmi_clk 16>,
<&scmi_clk 18>,
<&scmi_clk 21>;
clock-names = "xtal",
"fdiv3",
"fdiv4",
"fdiv5",
"sys";
};
};

View File

@ -0,0 +1,164 @@
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
# Copyright (C) 2026 Amlogic, Inc. All rights reserved
%YAML 1.2
---
$id: http://devicetree.org/schemas/clock/amlogic,a9-peripherals-clkc.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: Amlogic A9 Series Peripherals Clock Controller
maintainers:
- Neil Armstrong <neil.armstrong@linaro.org>
- Jerome Brunet <jbrunet@baylibre.com>
- Jian Hu <jian.hu@amlogic.com>
- Xianwei Zhao <xianwei.zhao@amlogic.com>
properties:
compatible:
const: amlogic,a9-peripherals-clkc
reg:
maxItems: 1
'#clock-cells':
const: 1
clocks:
minItems: 27
items:
- description: input oscillator
- description: input fclk div 2
- description: input fclk div 3
- description: input fclk div 4
- description: input fclk div 5
- description: input fclk div 7
- description: input fclk div 2p5
- description: input sys clk
- description: input gp1 pll
- description: input gp2 pll
- description: input sys pll div 16
- description: input cpu clk div 16
- description: input a78 clk div 16
- description: input dsu clk div 16
- description: input rtc clk
- description: input gp0 pll
- description: input hifi0 pll
- description: input hifi1 pll
- description: input mclk0 pll
- description: input mclk1 pll
- description: input video1 pll
- description: input video2 pll
- description: input hdmi out2 clk
- description: input hdmi pixel clk
- description: input pixel0 pll
- description: input pixel1 pll
- description: input ddr pll test clk
- description: external input rmii oscillator (optional)
clock-names:
minItems: 27
items:
- const: xtal
- const: fdiv2
- const: fdiv3
- const: fdiv4
- const: fdiv5
- const: fdiv7
- const: fdiv2p5
- const: sys
- const: gp1
- const: gp2
- const: sysplldiv16
- const: cpudiv16
- const: a78div16
- const: dsudiv16
- const: rtc
- const: gp0
- const: hifi0
- const: hifi1
- const: mclk0
- const: mclk1
- const: vid1
- const: vid2
- const: hdmiout2
- const: hdmipix
- const: pix0
- const: pix1
- const: ddr_test
- const: ext_rmii
required:
- compatible
- reg
- '#clock-cells'
- clocks
- clock-names
additionalProperties: false
examples:
- |
soc {
#address-cells = <2>;
#size-cells = <2>;
clock-controller@200 {
compatible = "amlogic,a9-peripherals-clkc";
reg = <0x0 0x200 0x0 0x2f8>;
#clock-cells = <1>;
clocks = <&xtal>,
<&scmi_clk 10>,
<&scmi_clk 12>,
<&scmi_clk 14>,
<&scmi_clk 16>,
<&scmi_clk 18>,
<&scmi_clk 20>,
<&scmi_clk 21>,
<&scmi_clk 33>,
<&scmi_clk 34>,
<&scmi_clk 35>,
<&scmi_clk 36>,
<&scmi_clk 37>,
<&scmi_clk 38>,
<&scmi_clk 40>,
<&gp0 3>,
<&hifi0 3>,
<&hifi1 3>,
<&mclk0 3>,
<&mclk1 3>,
<&vid1>,
<&vid2>,
<&hdmitx 10>,
<&hdmitx 11>,
<&pix0>,
<&pix1>,
<&ddr 3>;
clock-names = "xtal",
"fdiv2",
"fdiv3",
"fdiv4",
"fdiv5",
"fdiv7",
"fdiv2p5",
"sys",
"gp1",
"gp2",
"sysplldiv16",
"cpudiv16",
"a78div16",
"dsudiv16",
"rtc",
"gp0",
"hifi0",
"hifi1",
"mclk0",
"mclk1",
"vid1",
"vid2",
"hdmiout2",
"hdmipix",
"pix0",
"pix1",
"ddr_test";
};
};

View File

@ -132,6 +132,33 @@ config COMMON_CLK_A1_PERIPHERALS
device, A1 SoC Family. Say Y if you want A1 Peripherals clock
controller to work.
config COMMON_CLK_A9_PERIPHERALS
tristate "Amlogic A9 SoC peripherals clock controller support"
depends on ARM64 || COMPILE_TEST
default ARCH_MESON
select COMMON_CLK_MESON_REGMAP
select COMMON_CLK_MESON_CLKC_UTILS
select COMMON_CLK_MESON_DUALDIV
select COMMON_CLK_MESON_VID_PLL_DIV
imply COMMON_CLK_SCMI
help
Support for the peripherals clock controller on Amlogic A311Y3 based
device, AKA A9. Peripherals are required by most peripheral to operate.
Say Y if you want A9 peripherals clock controller to work.
config COMMON_CLK_A9_AO
tristate "Amlogic A9 SoC AO clock controller support"
depends on ARM64 || COMPILE_TEST
default ARCH_MESON
select COMMON_CLK_MESON_REGMAP
select COMMON_CLK_MESON_CLKC_UTILS
select COMMON_CLK_MESON_DUALDIV
imply COMMON_CLK_SCMI
help
Support for the AO clock controller on Amlogic A311Y3 based
device, AKA A9.
Say Y if you want A9 AO clock controller to work.
config COMMON_CLK_C3_PLL
tristate "Amlogic C3 PLL clock controller"
depends on ARM64

View File

@ -19,6 +19,8 @@ obj-$(CONFIG_COMMON_CLK_AXG) += axg.o axg-aoclk.o
obj-$(CONFIG_COMMON_CLK_AXG_AUDIO) += axg-audio.o
obj-$(CONFIG_COMMON_CLK_A1_PLL) += a1-pll.o
obj-$(CONFIG_COMMON_CLK_A1_PERIPHERALS) += a1-peripherals.o
obj-$(CONFIG_COMMON_CLK_A9_PERIPHERALS) += a9-peripherals.o
obj-$(CONFIG_COMMON_CLK_A9_AO) += a9-aoclk.o
obj-$(CONFIG_COMMON_CLK_C3_PLL) += c3-pll.o
obj-$(CONFIG_COMMON_CLK_C3_PERIPHERALS) += c3-peripherals.o
obj-$(CONFIG_COMMON_CLK_GXBB) += gxbb.o gxbb-aoclk.o

View File

@ -0,0 +1,489 @@
// SPDX-License-Identifier: (GPL-2.0-only OR MIT)
/*
* Copyright (C) 2026 Amlogic, Inc. All rights reserved
*/
#include <dt-bindings/clock/amlogic,a9-aoclkc.h>
#include <linux/clk-provider.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include "clk-regmap.h"
#include "clk-dualdiv.h"
#include "meson-clkc-utils.h"
#define AO_OSCIN_CTRL 0x00
#define AO_SYS_CLK0 0x04
#define AO_PWM_CLK_A_CTRL 0x1c
#define AO_PWM_CLK_B_CTRL 0x20
#define AO_PWM_CLK_C_CTRL 0x24
#define AO_PWM_CLK_D_CTRL 0x28
#define AO_PWM_CLK_E_CTRL 0x2c
#define AO_PWM_CLK_F_CTRL 0x30
#define AO_PWM_CLK_G_CTRL 0x34
#define AO_CEC_CTRL0 0x38
#define AO_CEC_CTRL1 0x3c
#define AO_RTC_BY_OSCIN_CTRL0 0x50
#define AO_RTC_BY_OSCIN_CTRL1 0x54
#define A9_COMP_SEL(_name, _reg, _shift, _mask, _pdata) \
MESON_COMP_SEL(a9_ao_, _name, _reg, _shift, _mask, _pdata, NULL, 0, 0)
#define A9_COMP_DIV(_name, _reg, _shift, _width) \
MESON_COMP_DIV(a9_ao_, _name, _reg, _shift, _width, 0, CLK_SET_RATE_PARENT)
#define A9_COMP_GATE(_name, _reg, _bit) \
MESON_COMP_GATE(a9_ao_, _name, _reg, _bit, CLK_SET_RATE_PARENT)
static struct clk_regmap a9_ao_xtal_in = {
.data = &(struct clk_regmap_gate_data){
.offset = AO_OSCIN_CTRL,
.bit_idx = 3,
},
.hw.init = &(struct clk_init_data) {
.name = "ao_xtal_in",
.ops = &clk_regmap_gate_ops,
.parent_data = &(const struct clk_parent_data) {
.fw_name = "xtal",
},
.num_parents = 1,
},
};
static struct clk_regmap a9_ao_xtal = {
.data = &(struct clk_regmap_mux_data) {
.offset = AO_OSCIN_CTRL,
.mask = 0x1,
.shift = 0,
},
.hw.init = &(struct clk_init_data){
.name = "ao_xtal",
.ops = &clk_regmap_mux_ops,
/* ext_32k is from external PAD, do not automatically reparent */
.parent_data = (const struct clk_parent_data []) {
{ .hw = &a9_ao_xtal_in.hw },
{ .fw_name = "ext_32k", },
},
.num_parents = 2,
.flags = CLK_SET_RATE_NO_REPARENT,
},
};
static struct clk_regmap a9_ao_sys = {
.data = &(struct clk_regmap_mux_data) {
.offset = AO_OSCIN_CTRL,
.mask = 0x1,
.shift = 1,
},
.hw.init = &(struct clk_init_data){
.name = "ao_sys",
.ops = &clk_regmap_mux_ops,
.parent_data = (const struct clk_parent_data []) {
{ .hw = &a9_ao_xtal.hw },
{ .fw_name = "sys", },
},
.num_parents = 2,
},
};
static const struct clk_parent_data a9_ao_pclk_parents = { .hw = &a9_ao_sys.hw };
#define A9_AO_PCLK(_name, _bit, _flags) \
MESON_PCLK(a9_ao_sys_##_name, AO_SYS_CLK0, _bit, \
&a9_ao_pclk_parents, _flags)
/*
* A9 integrates a low-power microprocessor (Always-on CPU: AOCPU). Some AO sys
* clocks control the AOCPU modules. Mark the AOCPU-related clocks with
* CLK_IS_CRITICAL to avoid them being disabled and impacting AOCPU functionality.
* AOCPU-related clocks list:
* - clktree
* - rst_ctrl
* - pad
* - irq
* - pwrctrl
* - aocpu
* - sram
*/
static A9_AO_PCLK(i3c, 0, 0);
static A9_AO_PCLK(rtc_reg, 1, 0);
static A9_AO_PCLK(clktree, 2, CLK_IS_CRITICAL);
static A9_AO_PCLK(rst_ctrl, 3, CLK_IS_CRITICAL);
static A9_AO_PCLK(pad, 4, CLK_IS_CRITICAL);
static A9_AO_PCLK(rtc_dig, 5, 0);
static A9_AO_PCLK(irq, 6, CLK_IS_CRITICAL);
static A9_AO_PCLK(pwrctrl, 7, CLK_IS_CRITICAL);
static A9_AO_PCLK(pwm_a, 8, 0);
static A9_AO_PCLK(pwm_b, 9, 0);
static A9_AO_PCLK(pwm_c, 10, 0);
static A9_AO_PCLK(pwm_d, 11, 0);
static A9_AO_PCLK(pwm_e, 12, 0);
static A9_AO_PCLK(pwm_f, 13, 0);
static A9_AO_PCLK(pwm_g, 14, 0);
static A9_AO_PCLK(i2c_a, 15, 0);
static A9_AO_PCLK(i2c_b, 16, 0);
static A9_AO_PCLK(i2c_c, 17, 0);
static A9_AO_PCLK(i2c_d, 18, 0);
static A9_AO_PCLK(sed, 19, 0);
static A9_AO_PCLK(ir_ctrl, 20, 0);
static A9_AO_PCLK(uart_b, 21, 0);
static A9_AO_PCLK(uart_c, 22, 0);
static A9_AO_PCLK(uart_d, 23, 0);
static A9_AO_PCLK(uart_e, 24, 0);
static A9_AO_PCLK(spisg_0, 25, 0);
static A9_AO_PCLK(rtc_secure, 26, 0);
static A9_AO_PCLK(cec, 27, 0);
static A9_AO_PCLK(aocpu, 28, CLK_IS_CRITICAL);
static A9_AO_PCLK(sram, 29, CLK_IS_CRITICAL);
static A9_AO_PCLK(spisg_1, 30, 0);
static A9_AO_PCLK(spisg_2, 31, 0);
static const struct clk_parent_data a9_ao_pwm_parents[] = {
{ .hw = &a9_ao_xtal.hw },
{ .fw_name = "fdiv5", },
{ .fw_name = "fdiv4", },
{ .fw_name = "fdiv3", }
};
static A9_COMP_SEL(pwm_a, AO_PWM_CLK_A_CTRL, 9, 0x7, a9_ao_pwm_parents);
static A9_COMP_DIV(pwm_a, AO_PWM_CLK_A_CTRL, 0, 8);
static A9_COMP_GATE(pwm_a, AO_PWM_CLK_A_CTRL, 8);
static A9_COMP_SEL(pwm_b, AO_PWM_CLK_B_CTRL, 9, 0x7, a9_ao_pwm_parents);
static A9_COMP_DIV(pwm_b, AO_PWM_CLK_B_CTRL, 0, 8);
static A9_COMP_GATE(pwm_b, AO_PWM_CLK_B_CTRL, 8);
static A9_COMP_SEL(pwm_c, AO_PWM_CLK_C_CTRL, 9, 0x7, a9_ao_pwm_parents);
static A9_COMP_DIV(pwm_c, AO_PWM_CLK_C_CTRL, 0, 8);
static A9_COMP_GATE(pwm_c, AO_PWM_CLK_C_CTRL, 8);
static A9_COMP_SEL(pwm_d, AO_PWM_CLK_D_CTRL, 9, 0x7, a9_ao_pwm_parents);
static A9_COMP_DIV(pwm_d, AO_PWM_CLK_D_CTRL, 0, 8);
static A9_COMP_GATE(pwm_d, AO_PWM_CLK_D_CTRL, 8);
static A9_COMP_SEL(pwm_e, AO_PWM_CLK_E_CTRL, 9, 0x7, a9_ao_pwm_parents);
static A9_COMP_DIV(pwm_e, AO_PWM_CLK_E_CTRL, 0, 8);
static A9_COMP_GATE(pwm_e, AO_PWM_CLK_E_CTRL, 8);
static A9_COMP_SEL(pwm_f, AO_PWM_CLK_F_CTRL, 9, 0x7, a9_ao_pwm_parents);
static A9_COMP_DIV(pwm_f, AO_PWM_CLK_F_CTRL, 0, 8);
static A9_COMP_GATE(pwm_f, AO_PWM_CLK_F_CTRL, 8);
static A9_COMP_SEL(pwm_g, AO_PWM_CLK_G_CTRL, 9, 0x7, a9_ao_pwm_parents);
static A9_COMP_DIV(pwm_g, AO_PWM_CLK_G_CTRL, 0, 8);
static A9_COMP_GATE(pwm_g, AO_PWM_CLK_G_CTRL, 8);
static struct clk_regmap a9_ao_rtc_dualdiv_in = {
.data = &(struct clk_regmap_gate_data){
.offset = AO_RTC_BY_OSCIN_CTRL0,
.bit_idx = 31,
},
.hw.init = &(struct clk_init_data) {
.name = "ao_rtc_dualdiv_in",
.ops = &clk_regmap_gate_ops,
.parent_hws = (const struct clk_hw *[]) {
&a9_ao_xtal.hw
},
.num_parents = 1,
},
};
static const struct meson_clk_dualdiv_param a9_ao_dualdiv_table[] = {
{ 733, 732, 8, 11, 1 },
{ /* sentinel */ }
};
static struct clk_regmap a9_ao_rtc_dualdiv_div = {
.data = &(struct meson_clk_dualdiv_data){
.n1 = {
.reg_off = AO_RTC_BY_OSCIN_CTRL0,
.shift = 0,
.width = 12,
},
.n2 = {
.reg_off = AO_RTC_BY_OSCIN_CTRL0,
.shift = 12,
.width = 12,
},
.m1 = {
.reg_off = AO_RTC_BY_OSCIN_CTRL1,
.shift = 0,
.width = 12,
},
.m2 = {
.reg_off = AO_RTC_BY_OSCIN_CTRL1,
.shift = 12,
.width = 12,
},
.dual = {
.reg_off = AO_RTC_BY_OSCIN_CTRL0,
.shift = 28,
.width = 1,
},
.table = a9_ao_dualdiv_table,
},
.hw.init = &(struct clk_init_data){
.name = "a9_ao_rtc_dualdiv_div",
.ops = &meson_clk_dualdiv_ops,
.parent_hws = (const struct clk_hw *[]) {
&a9_ao_rtc_dualdiv_in.hw
},
.num_parents = 1,
},
};
static struct clk_regmap a9_ao_rtc_dualdiv_sel = {
.data = &(struct clk_regmap_mux_data) {
.offset = AO_RTC_BY_OSCIN_CTRL1,
.mask = 0x1,
.shift = 24,
},
.hw.init = &(struct clk_init_data){
.name = "ao_rtc_dualdiv_sel",
.ops = &clk_regmap_mux_ops,
.parent_hws = (const struct clk_hw *[]) {
&a9_ao_rtc_dualdiv_div.hw,
&a9_ao_rtc_dualdiv_in.hw,
},
.num_parents = 2,
.flags = CLK_SET_RATE_PARENT,
},
};
static struct clk_regmap a9_ao_rtc_dualdiv = {
.data = &(struct clk_regmap_gate_data){
.offset = AO_RTC_BY_OSCIN_CTRL0,
.bit_idx = 30,
},
.hw.init = &(struct clk_init_data) {
.name = "ao_rtc_dualdiv",
.ops = &clk_regmap_gate_ops,
.parent_hws = (const struct clk_hw *[]) {
&a9_ao_rtc_dualdiv_sel.hw
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
},
};
static struct clk_regmap a9_ao_rtc = {
.data = &(struct clk_regmap_mux_data) {
.offset = AO_RTC_BY_OSCIN_CTRL1,
.mask = 0x1,
.shift = 30,
},
.hw.init = &(struct clk_init_data){
.name = "ao_rtc",
.ops = &clk_regmap_mux_ops,
.parent_hws = (const struct clk_hw *[]) {
&a9_ao_xtal.hw,
&a9_ao_rtc_dualdiv.hw,
},
.num_parents = 2,
.flags = CLK_SET_RATE_PARENT,
},
};
static struct clk_regmap a9_ao_cec_dualdiv_in = {
.data = &(struct clk_regmap_gate_data){
.offset = AO_CEC_CTRL0,
.bit_idx = 31,
},
.hw.init = &(struct clk_init_data) {
.name = "ao_cec_dualdiv_in",
.ops = &clk_regmap_gate_ops,
.parent_hws = (const struct clk_hw *[]) {
&a9_ao_xtal.hw
},
.num_parents = 1,
},
};
static struct clk_regmap a9_ao_cec_dualdiv_div = {
.data = &(struct meson_clk_dualdiv_data){
.n1 = {
.reg_off = AO_CEC_CTRL0,
.shift = 0,
.width = 12,
},
.n2 = {
.reg_off = AO_CEC_CTRL0,
.shift = 12,
.width = 12,
},
.m1 = {
.reg_off = AO_CEC_CTRL1,
.shift = 0,
.width = 12,
},
.m2 = {
.reg_off = AO_CEC_CTRL1,
.shift = 12,
.width = 12,
},
.dual = {
.reg_off = AO_CEC_CTRL0,
.shift = 28,
.width = 1,
},
.table = a9_ao_dualdiv_table,
},
.hw.init = &(struct clk_init_data){
.name = "ao_cec_dualdiv_div",
.ops = &meson_clk_dualdiv_ops,
.parent_hws = (const struct clk_hw *[]) {
&a9_ao_cec_dualdiv_in.hw
},
.num_parents = 1,
},
};
static struct clk_regmap a9_ao_cec_dualdiv_sel = {
.data = &(struct clk_regmap_mux_data) {
.offset = AO_CEC_CTRL1,
.mask = 0x1,
.shift = 24,
},
.hw.init = &(struct clk_init_data){
.name = "ao_cec_dualdiv_sel",
.ops = &clk_regmap_mux_ops,
.parent_hws = (const struct clk_hw *[]) {
&a9_ao_cec_dualdiv_div.hw,
&a9_ao_cec_dualdiv_in.hw,
},
.num_parents = 2,
.flags = CLK_SET_RATE_PARENT,
},
};
static struct clk_regmap a9_ao_cec_dualdiv = {
.data = &(struct clk_regmap_gate_data){
.offset = AO_CEC_CTRL0,
.bit_idx = 30,
},
.hw.init = &(struct clk_init_data){
.name = "ao_cec_dualdiv",
.ops = &clk_regmap_gate_ops,
.parent_hws = (const struct clk_hw *[]) {
&a9_ao_cec_dualdiv_sel.hw
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
},
};
static struct clk_regmap a9_ao_cec = {
.data = &(struct clk_regmap_mux_data) {
.offset = AO_CEC_CTRL1,
.mask = 0x1,
.shift = 30,
},
.hw.init = &(struct clk_init_data){
.name = "ao_cec",
.ops = &clk_regmap_mux_ops,
.parent_hws = (const struct clk_hw *[]) {
&a9_ao_cec_dualdiv.hw,
&a9_ao_rtc.hw,
},
.num_parents = 2,
.flags = CLK_SET_RATE_PARENT,
},
};
static struct clk_hw *a9_ao_hw_clks[] = {
[CLKID_AO_XTAL_IN] = &a9_ao_xtal_in.hw,
[CLKID_AO_XTAL] = &a9_ao_xtal.hw,
[CLKID_AO_SYS] = &a9_ao_sys.hw,
[CLKID_AO_SYS_I3C] = &a9_ao_sys_i3c.hw,
[CLKID_AO_SYS_RTC_REG] = &a9_ao_sys_rtc_reg.hw,
[CLKID_AO_SYS_CLKTREE] = &a9_ao_sys_clktree.hw,
[CLKID_AO_SYS_RST_CTRL] = &a9_ao_sys_rst_ctrl.hw,
[CLKID_AO_SYS_PAD] = &a9_ao_sys_pad.hw,
[CLKID_AO_SYS_RTC_DIG] = &a9_ao_sys_rtc_dig.hw,
[CLKID_AO_SYS_IRQ] = &a9_ao_sys_irq.hw,
[CLKID_AO_SYS_PWRCTRL] = &a9_ao_sys_pwrctrl.hw,
[CLKID_AO_SYS_PWM_A] = &a9_ao_sys_pwm_a.hw,
[CLKID_AO_SYS_PWM_B] = &a9_ao_sys_pwm_b.hw,
[CLKID_AO_SYS_PWM_C] = &a9_ao_sys_pwm_c.hw,
[CLKID_AO_SYS_PWM_D] = &a9_ao_sys_pwm_d.hw,
[CLKID_AO_SYS_PWM_E] = &a9_ao_sys_pwm_e.hw,
[CLKID_AO_SYS_PWM_F] = &a9_ao_sys_pwm_f.hw,
[CLKID_AO_SYS_PWM_G] = &a9_ao_sys_pwm_g.hw,
[CLKID_AO_SYS_I2C_A] = &a9_ao_sys_i2c_a.hw,
[CLKID_AO_SYS_I2C_B] = &a9_ao_sys_i2c_b.hw,
[CLKID_AO_SYS_I2C_C] = &a9_ao_sys_i2c_c.hw,
[CLKID_AO_SYS_I2C_D] = &a9_ao_sys_i2c_d.hw,
[CLKID_AO_SYS_SED] = &a9_ao_sys_sed.hw,
[CLKID_AO_SYS_IR_CTRL] = &a9_ao_sys_ir_ctrl.hw,
[CLKID_AO_SYS_UART_B] = &a9_ao_sys_uart_b.hw,
[CLKID_AO_SYS_UART_C] = &a9_ao_sys_uart_c.hw,
[CLKID_AO_SYS_UART_D] = &a9_ao_sys_uart_d.hw,
[CLKID_AO_SYS_UART_E] = &a9_ao_sys_uart_e.hw,
[CLKID_AO_SYS_SPISG_0] = &a9_ao_sys_spisg_0.hw,
[CLKID_AO_SYS_RTC_SECURE] = &a9_ao_sys_rtc_secure.hw,
[CLKID_AO_SYS_CEC] = &a9_ao_sys_cec.hw,
[CLKID_AO_SYS_AOCPU] = &a9_ao_sys_aocpu.hw,
[CLKID_AO_SYS_SRAM] = &a9_ao_sys_sram.hw,
[CLKID_AO_SYS_SPISG_1] = &a9_ao_sys_spisg_1.hw,
[CLKID_AO_SYS_SPISG_2] = &a9_ao_sys_spisg_2.hw,
[CLKID_AO_PWM_A_SEL] = &a9_ao_pwm_a_sel.hw,
[CLKID_AO_PWM_A_DIV] = &a9_ao_pwm_a_div.hw,
[CLKID_AO_PWM_A] = &a9_ao_pwm_a.hw,
[CLKID_AO_PWM_B_SEL] = &a9_ao_pwm_b_sel.hw,
[CLKID_AO_PWM_B_DIV] = &a9_ao_pwm_b_div.hw,
[CLKID_AO_PWM_B] = &a9_ao_pwm_b.hw,
[CLKID_AO_PWM_C_SEL] = &a9_ao_pwm_c_sel.hw,
[CLKID_AO_PWM_C_DIV] = &a9_ao_pwm_c_div.hw,
[CLKID_AO_PWM_C] = &a9_ao_pwm_c.hw,
[CLKID_AO_PWM_D_SEL] = &a9_ao_pwm_d_sel.hw,
[CLKID_AO_PWM_D_DIV] = &a9_ao_pwm_d_div.hw,
[CLKID_AO_PWM_D] = &a9_ao_pwm_d.hw,
[CLKID_AO_PWM_E_SEL] = &a9_ao_pwm_e_sel.hw,
[CLKID_AO_PWM_E_DIV] = &a9_ao_pwm_e_div.hw,
[CLKID_AO_PWM_E] = &a9_ao_pwm_e.hw,
[CLKID_AO_PWM_F_SEL] = &a9_ao_pwm_f_sel.hw,
[CLKID_AO_PWM_F_DIV] = &a9_ao_pwm_f_div.hw,
[CLKID_AO_PWM_F] = &a9_ao_pwm_f.hw,
[CLKID_AO_PWM_G_SEL] = &a9_ao_pwm_g_sel.hw,
[CLKID_AO_PWM_G_DIV] = &a9_ao_pwm_g_div.hw,
[CLKID_AO_PWM_G] = &a9_ao_pwm_g.hw,
[CLKID_AO_RTC_DUALDIV_IN] = &a9_ao_rtc_dualdiv_in.hw,
[CLKID_AO_RTC_DUALDIV_DIV] = &a9_ao_rtc_dualdiv_div.hw,
[CLKID_AO_RTC_DUALDIV_SEL] = &a9_ao_rtc_dualdiv_sel.hw,
[CLKID_AO_RTC_DUALDIV] = &a9_ao_rtc_dualdiv.hw,
[CLKID_AO_RTC] = &a9_ao_rtc.hw,
[CLKID_AO_CEC_DUALDIV_IN] = &a9_ao_cec_dualdiv_in.hw,
[CLKID_AO_CEC_DUALDIV_DIV] = &a9_ao_cec_dualdiv_div.hw,
[CLKID_AO_CEC_DUALDIV_SEL] = &a9_ao_cec_dualdiv_sel.hw,
[CLKID_AO_CEC_DUALDIV] = &a9_ao_cec_dualdiv.hw,
[CLKID_AO_CEC] = &a9_ao_cec.hw,
};
static const struct meson_clkc_data a9_ao_clkc_data = {
.hw_clks = {
.hws = a9_ao_hw_clks,
.num = ARRAY_SIZE(a9_ao_hw_clks),
},
};
static const struct of_device_id a9_ao_clkc_match_table[] = {
{
.compatible = "amlogic,a9-aoclkc",
.data = &a9_ao_clkc_data,
},
{ }
};
MODULE_DEVICE_TABLE(of, a9_ao_clkc_match_table);
static struct platform_driver a9_ao_clkc_driver = {
.probe = meson_clkc_mmio_probe,
.driver = {
.name = "a9-aoclkc",
.of_match_table = a9_ao_clkc_match_table,
},
};
module_platform_driver(a9_ao_clkc_driver);
MODULE_DESCRIPTION("Amlogic A9 Always-ON Clock Controller driver");
MODULE_AUTHOR("Jian Hu <jian.hu@amlogic.com>");
MODULE_LICENSE("GPL");
MODULE_IMPORT_NS("CLK_MESON");

File diff suppressed because it is too large Load Diff

View File

@ -1393,7 +1393,7 @@ static struct clk_regmap gxbb_32k_clk_sel = {
.name = "32k_clk_sel",
.ops = &clk_regmap_mux_ops,
.parent_data = gxbb_32k_clk_parents,
.num_parents = 4,
.num_parents = ARRAY_SIZE(gxbb_32k_clk_parents),
.flags = CLK_SET_RATE_PARENT,
},
};

View File

@ -0,0 +1,76 @@
/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
/*
* Copyright (C) 2026 Amlogic, Inc. All rights reserved.
*/
#ifndef __AMLOGIC_A9_AO_CLKC_H
#define __AMLOGIC_A9_AO_CLKC_H
#define CLKID_AO_XTAL_IN 0
#define CLKID_AO_XTAL 1
#define CLKID_AO_SYS 2
#define CLKID_AO_SYS_I3C 3
#define CLKID_AO_SYS_RTC_REG 4
#define CLKID_AO_SYS_CLKTREE 5
#define CLKID_AO_SYS_RST_CTRL 6
#define CLKID_AO_SYS_PAD 7
#define CLKID_AO_SYS_RTC_DIG 8
#define CLKID_AO_SYS_IRQ 9
#define CLKID_AO_SYS_PWRCTRL 10
#define CLKID_AO_SYS_PWM_A 11
#define CLKID_AO_SYS_PWM_B 12
#define CLKID_AO_SYS_PWM_C 13
#define CLKID_AO_SYS_PWM_D 14
#define CLKID_AO_SYS_PWM_E 15
#define CLKID_AO_SYS_PWM_F 16
#define CLKID_AO_SYS_PWM_G 17
#define CLKID_AO_SYS_I2C_A 18
#define CLKID_AO_SYS_I2C_B 19
#define CLKID_AO_SYS_I2C_C 20
#define CLKID_AO_SYS_I2C_D 21
#define CLKID_AO_SYS_SED 22
#define CLKID_AO_SYS_IR_CTRL 23
#define CLKID_AO_SYS_UART_B 24
#define CLKID_AO_SYS_UART_C 25
#define CLKID_AO_SYS_UART_D 26
#define CLKID_AO_SYS_UART_E 27
#define CLKID_AO_SYS_SPISG_0 28
#define CLKID_AO_SYS_RTC_SECURE 29
#define CLKID_AO_SYS_CEC 30
#define CLKID_AO_SYS_AOCPU 31
#define CLKID_AO_SYS_SRAM 32
#define CLKID_AO_SYS_SPISG_1 33
#define CLKID_AO_SYS_SPISG_2 34
#define CLKID_AO_PWM_A_SEL 35
#define CLKID_AO_PWM_A_DIV 36
#define CLKID_AO_PWM_A 37
#define CLKID_AO_PWM_B_SEL 38
#define CLKID_AO_PWM_B_DIV 39
#define CLKID_AO_PWM_B 40
#define CLKID_AO_PWM_C_SEL 41
#define CLKID_AO_PWM_C_DIV 42
#define CLKID_AO_PWM_C 43
#define CLKID_AO_PWM_D_SEL 44
#define CLKID_AO_PWM_D_DIV 45
#define CLKID_AO_PWM_D 46
#define CLKID_AO_PWM_E_SEL 47
#define CLKID_AO_PWM_E_DIV 48
#define CLKID_AO_PWM_E 49
#define CLKID_AO_PWM_F_SEL 50
#define CLKID_AO_PWM_F_DIV 51
#define CLKID_AO_PWM_F 52
#define CLKID_AO_PWM_G_SEL 53
#define CLKID_AO_PWM_G_DIV 54
#define CLKID_AO_PWM_G 55
#define CLKID_AO_RTC_DUALDIV_IN 56
#define CLKID_AO_RTC_DUALDIV_DIV 57
#define CLKID_AO_RTC_DUALDIV_SEL 58
#define CLKID_AO_RTC_DUALDIV 59
#define CLKID_AO_RTC 60
#define CLKID_AO_CEC_DUALDIV_IN 61
#define CLKID_AO_CEC_DUALDIV_DIV 62
#define CLKID_AO_CEC_DUALDIV_SEL 63
#define CLKID_AO_CEC_DUALDIV 64
#define CLKID_AO_CEC 65
#endif /* __AMLOGIC_A9_AO_CLKC_H */

View File

@ -0,0 +1,351 @@
/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
/*
* Copyright (C) 2026 Amlogic, Inc. All rights reserved.
*/
#ifndef __AMLOGIC_A9_PERIPHERALS_CLKC_H
#define __AMLOGIC_A9_PERIPHERALS_CLKC_H
#define CLKID_SYS_AM_AXI 0
#define CLKID_SYS_DOS 1
#define CLKID_SYS_MIPI_DSI0 2
#define CLKID_SYS_ETH_PHY 3
#define CLKID_SYS_AMFC 4
#define CLKID_SYS_MALI 5
#define CLKID_SYS_NNA 6
#define CLKID_SYS_ETH_AXI 7
#define CLKID_SYS_DP_APB 8
#define CLKID_SYS_EDPTX_APB 9
#define CLKID_SYS_U3HSG 10
#define CLKID_SYS_AUCPU 11
#define CLKID_SYS_GLB 12
#define CLKID_SYS_COMBO_DPHY_APB 13
#define CLKID_SYS_HDMIRX_APB 14
#define CLKID_SYS_HDMIRX_PCLK 15
#define CLKID_SYS_MIPI_DSI0_PHY 16
#define CLKID_SYS_CAN0 17
#define CLKID_SYS_CAN1 18
#define CLKID_SYS_SD_EMMC_A 19
#define CLKID_SYS_SD_EMMC_B 20
#define CLKID_SYS_SD_EMMC_C 21
#define CLKID_SYS_SC 22
#define CLKID_SYS_ACODEC 23
#define CLKID_SYS_MIPI_ISP 24
#define CLKID_SYS_MSR 25
#define CLKID_SYS_AUDIO 26
#define CLKID_SYS_MIPI_DSI1 27
#define CLKID_SYS_MIPI_DSI1_PHY 28
#define CLKID_SYS_ETH 29
#define CLKID_SYS_ETH_1G_MAC 30
#define CLKID_SYS_UART_A 31
#define CLKID_SYS_UART_F 32
#define CLKID_SYS_TS_A55 33
#define CLKID_SYS_ETH_1G_AXI 34
#define CLKID_SYS_TS_DOS 35
#define CLKID_SYS_U3DRD_B 36
#define CLKID_SYS_TS_CORE 37
#define CLKID_SYS_TS_PLL 38
#define CLKID_SYS_CSI_DIG_CLKIN 39
#define CLKID_SYS_CVE 40
#define CLKID_SYS_GE2D 41
#define CLKID_SYS_SPISG 42
#define CLKID_SYS_U2H 43
#define CLKID_SYS_PCIE_MAC_A 44
#define CLKID_SYS_U3DRD_A 45
#define CLKID_SYS_U2DRD 46
#define CLKID_SYS_PCIE_PHY 47
#define CLKID_SYS_PCIE_MAC_B 48
#define CLKID_SYS_PERIPH 49
#define CLKID_SYS_PIO 50
#define CLKID_SYS_I3C 51
#define CLKID_SYS_I2C_M_E 52
#define CLKID_SYS_I2C_M_F 53
#define CLKID_SYS_HDMITX_APB 54
#define CLKID_SYS_I2C_M_I 55
#define CLKID_SYS_I2C_M_G 56
#define CLKID_SYS_I2C_M_H 57
#define CLKID_SYS_HDMI20_AES 58
#define CLKID_SYS_CSI2_HOST 59
#define CLKID_SYS_CSI2_ADAPT 60
#define CLKID_SYS_DSPA 61
#define CLKID_SYS_PP_DMA 62
#define CLKID_SYS_PP_WRAPPER 63
#define CLKID_SYS_VPU_INTR 64
#define CLKID_SYS_CSI2_PHY 65
#define CLKID_SYS_SARADC 66
#define CLKID_SYS_PWM_J 67
#define CLKID_SYS_PWM_I 68
#define CLKID_SYS_PWM_H 69
#define CLKID_SYS_PWM_N 70
#define CLKID_SYS_PWM_M 71
#define CLKID_SYS_PWM_L 72
#define CLKID_SYS_PWM_K 73
#define CLKID_SD_EMMC_A_SEL 74
#define CLKID_SD_EMMC_A_DIV 75
#define CLKID_SD_EMMC_A 76
#define CLKID_SD_EMMC_B_SEL 77
#define CLKID_SD_EMMC_B_DIV 78
#define CLKID_SD_EMMC_B 79
#define CLKID_SD_EMMC_C_SEL 80
#define CLKID_SD_EMMC_C_DIV 81
#define CLKID_SD_EMMC_C 82
#define CLKID_PWM_H_SEL 83
#define CLKID_PWM_H_DIV 84
#define CLKID_PWM_H 85
#define CLKID_PWM_I_SEL 86
#define CLKID_PWM_I_DIV 87
#define CLKID_PWM_I 88
#define CLKID_PWM_J_SEL 89
#define CLKID_PWM_J_DIV 90
#define CLKID_PWM_J 91
#define CLKID_PWM_K_SEL 92
#define CLKID_PWM_K_DIV 93
#define CLKID_PWM_K 94
#define CLKID_PWM_L_SEL 95
#define CLKID_PWM_L_DIV 96
#define CLKID_PWM_L 97
#define CLKID_PWM_M_SEL 98
#define CLKID_PWM_M_DIV 99
#define CLKID_PWM_M 100
#define CLKID_PWM_N_SEL 101
#define CLKID_PWM_N_DIV 102
#define CLKID_PWM_N 103
#define CLKID_SPISG0_SEL 104
#define CLKID_SPISG0_DIV 105
#define CLKID_SPISG0 106
#define CLKID_SPISG1_SEL 107
#define CLKID_SPISG1_DIV 108
#define CLKID_SPISG1 109
#define CLKID_SPISG2_SEL 110
#define CLKID_SPISG2_DIV 111
#define CLKID_SPISG2 112
#define CLKID_SARADC_SEL 113
#define CLKID_SARADC_DIV 114
#define CLKID_SARADC 115
#define CLKID_AMFC_SEL 116
#define CLKID_AMFC_DIV 117
#define CLKID_AMFC 118
#define CLKID_NNA_SEL 119
#define CLKID_NNA_DIV 120
#define CLKID_NNA 121
#define CLKID_USB_250M_SEL 122
#define CLKID_USB_250M_DIV 123
#define CLKID_USB_250M 124
#define CLKID_USB_48M_PRE_SEL 125
#define CLKID_USB_48M_PRE_DIV 126
#define CLKID_USB_48M_PRE 127
#define CLKID_PCIE0_TL_SEL 128
#define CLKID_PCIE0_TL_DIV 129
#define CLKID_PCIE0_TL 130
#define CLKID_PCIE1_TL_SEL 131
#define CLKID_PCIE1_TL_DIV 132
#define CLKID_PCIE1_TL 133
#define CLKID_CMPR_SEL 134
#define CLKID_CMPR_DIV 135
#define CLKID_CMPR 136
#define CLKID_DEWARPA_SEL 137
#define CLKID_DEWARPA_DIV 138
#define CLKID_DEWARPA 139
#define CLKID_SC_PRE_SEL 140
#define CLKID_SC_PRE_DIV 141
#define CLKID_SC_PRE 142
#define CLKID_SC 143
#define CLKID_DPTX_APB2_SEL 144
#define CLKID_DPTX_APB2_DIV 145
#define CLKID_DPTX_APB2 146
#define CLKID_DPTX_AUD_SEL 147
#define CLKID_DPTX_AUD_DIV 148
#define CLKID_DPTX_AUD 149
#define CLKID_ISP_SEL 150
#define CLKID_ISP_DIV 151
#define CLKID_ISP 152
#define CLKID_CVE_SEL 153
#define CLKID_CVE_DIV 154
#define CLKID_CVE 155
#define CLKID_VGE_SEL 156
#define CLKID_VGE_DIV 157
#define CLKID_VGE 158
#define CLKID_PP_SEL 159
#define CLKID_PP_DIV 160
#define CLKID_PP 161
#define CLKID_GLB_SEL 162
#define CLKID_GLB_DIV 163
#define CLKID_GLB 164
#define CLKID_USB_48M_DUALDIV_IN 165
#define CLKID_USB_48M_DUALDIV_DIV 166
#define CLKID_USB_48M_DUALDIV_SEL 167
#define CLKID_USB_48M_DUALDIV 168
#define CLKID_USB_48M 169
#define CLKID_CAN0_PE_SEL 170
#define CLKID_CAN0_PE_DIV 171
#define CLKID_CAN0_PE 172
#define CLKID_CAN1_PE_SEL 173
#define CLKID_CAN1_PE_DIV 174
#define CLKID_CAN1_PE 175
#define CLKID_CAN0_FILTER_SEL 176
#define CLKID_CAN0_FILTER_DIV 177
#define CLKID_CAN0_FILTER 178
#define CLKID_CAN1_FILTER_SEL 179
#define CLKID_CAN1_FILTER_DIV 180
#define CLKID_CAN1_FILTER 181
#define CLKID_I3C_SEL 182
#define CLKID_I3C_DIV 183
#define CLKID_I3C 184
#define CLKID_TS_DIV 185
#define CLKID_TS 186
#define CLKID_ETH_125M_DIV 187
#define CLKID_ETH_125M 188
#define CLKID_ETH_RMII_SEL 189
#define CLKID_ETH_RMII_DIV 190
#define CLKID_ETH_RMII 191
#define CLKID_GEN_SEL 192
#define CLKID_GEN_DIV 193
#define CLKID_GEN 194
#define CLKID_CLK24M_IN 195
#define CLKID_CLK12_24M 196
#define CLKID_MALI_0_SEL 197
#define CLKID_MALI_0_DIV 198
#define CLKID_MALI_0 199
#define CLKID_MALI_1_SEL 200
#define CLKID_MALI_1_DIV 201
#define CLKID_MALI_1 202
#define CLKID_MALI 203
#define CLKID_MALI_STACK_0_SEL 204
#define CLKID_MALI_STACK_0_DIV 205
#define CLKID_MALI_STACK_0 206
#define CLKID_MALI_STACK_1_SEL 207
#define CLKID_MALI_STACK_1_DIV 208
#define CLKID_MALI_STACK_1 209
#define CLKID_MALI_STACK 210
#define CLKID_DSPA_0_SEL 211
#define CLKID_DSPA_0_DIV 212
#define CLKID_DSPA_0 213
#define CLKID_DSPA_1_SEL 214
#define CLKID_DSPA_1_DIV 215
#define CLKID_DSPA_1 216
#define CLKID_DSPA 217
#define CLKID_HEVCF_0_SEL 218
#define CLKID_HEVCF_0_DIV 219
#define CLKID_HEVCF_0 220
#define CLKID_HEVCF_1_SEL 221
#define CLKID_HEVCF_1_DIV 222
#define CLKID_HEVCF_1 223
#define CLKID_HEVCF 224
#define CLKID_HCODEC_0_SEL 225
#define CLKID_HCODEC_0_DIV 226
#define CLKID_HCODEC_0 227
#define CLKID_HCODEC_1_SEL 228
#define CLKID_HCODEC_1_DIV 229
#define CLKID_HCODEC_1 230
#define CLKID_HCODEC 231
#define CLKID_VPU_0_SEL 232
#define CLKID_VPU_0_DIV 233
#define CLKID_VPU_0 234
#define CLKID_VPU_1_SEL 235
#define CLKID_VPU_1_DIV 236
#define CLKID_VPU_1 237
#define CLKID_VPU 238
#define CLKID_VAPB_0_SEL 239
#define CLKID_VAPB_0_DIV 240
#define CLKID_VAPB_0 241
#define CLKID_VAPB_1_SEL 242
#define CLKID_VAPB_1_DIV 243
#define CLKID_VAPB_1 244
#define CLKID_VAPB 245
#define CLKID_GE2D 246
#define CLKID_VPU_CLKB_TMP_SEL 247
#define CLKID_VPU_CLKB_TMP_DIV 248
#define CLKID_VPU_CLKB_TMP 249
#define CLKID_VPU_CLKB_DIV 250
#define CLKID_VPU_CLKB 251
#define CLKID_HDMITX_SYS_SEL 252
#define CLKID_HDMITX_SYS_DIV 253
#define CLKID_HDMITX_SYS 254
#define CLKID_HDMITX_PRIF_SEL 255
#define CLKID_HDMITX_PRIF_DIV 256
#define CLKID_HDMITX_PRIF 257
#define CLKID_HDMITX_200M_SEL 258
#define CLKID_HDMITX_200M_DIV 259
#define CLKID_HDMITX_200M 260
#define CLKID_HDMITX_AUD_SEL 261
#define CLKID_HDMITX_AUD_DIV 262
#define CLKID_HDMITX_AUD 263
#define CLKID_HDMIRX_5M_SEL 264
#define CLKID_HDMIRX_5M_DIV 265
#define CLKID_HDMIRX_5M 266
#define CLKID_HDMIRX_2M_SEL 267
#define CLKID_HDMIRX_2M_DIV 268
#define CLKID_HDMIRX_2M 269
#define CLKID_HDMIRX_CFG_SEL 270
#define CLKID_HDMIRX_CFG_DIV 271
#define CLKID_HDMIRX_CFG 272
#define CLKID_HDMIRX_HDCP2X_SEL 273
#define CLKID_HDMIRX_HDCP2X_DIV 274
#define CLKID_HDMIRX_HDCP2X 275
#define CLKID_HDMIRX_ACR_REF_SEL 276
#define CLKID_HDMIRX_ACR_REF_DIV 277
#define CLKID_HDMIRX_ACR_REF 278
#define CLKID_HDMIRX_METER_SEL 279
#define CLKID_HDMIRX_METER_DIV 280
#define CLKID_HDMIRX_METER 281
#define CLKID_VID_LOCK_SEL 282
#define CLKID_VID_LOCK_DIV 283
#define CLKID_VID_LOCK 284
#define CLKID_VDIN_MEAS_SEL 285
#define CLKID_VDIN_MEAS_DIV 286
#define CLKID_VDIN_MEAS 287
#define CLKID_VID_PLL_DIV 288
#define CLKID_VID_PLL_SEL 289
#define CLKID_VID_PLL 290
#define CLKID_VID_PLL_VCLK 291
#define CLKID_VCLK0_SEL 292
#define CLKID_VCLK0_IN 293
#define CLKID_VCLK0_DIV 294
#define CLKID_VCLK0 295
#define CLKID_VCLK0_DIV1_EN 296
#define CLKID_VCLK0_DIV2_EN 297
#define CLKID_VCLK0_DIV2 298
#define CLKID_VCLK0_DIV4_EN 299
#define CLKID_VCLK0_DIV4 300
#define CLKID_VCLK0_DIV6_EN 301
#define CLKID_VCLK0_DIV6 302
#define CLKID_VCLK0_DIV12_EN 303
#define CLKID_VCLK0_DIV12 304
#define CLKID_VCLK1_SEL 305
#define CLKID_VCLK1_IN 306
#define CLKID_VCLK1_DIV 307
#define CLKID_VCLK1 308
#define CLKID_VCLK1_DIV1_EN 309
#define CLKID_VCLK1_DIV2_EN 310
#define CLKID_VCLK1_DIV2 311
#define CLKID_VCLK1_DIV4_EN 312
#define CLKID_VCLK1_DIV4 313
#define CLKID_VCLK1_DIV6_EN 314
#define CLKID_VCLK1_DIV6 315
#define CLKID_VCLK1_DIV12_EN 316
#define CLKID_VCLK1_DIV12 317
#define CLKID_VDAC_SEL 318
#define CLKID_VDAC 319
#define CLKID_ENCODER0_SEL 320
#define CLKID_ENCODER0 321
#define CLKID_ENCODER1_SEL 322
#define CLKID_ENCODER1 323
#define CLKID_HDMITX0_PIXEL_SEL 324
#define CLKID_HDMITX0_PIXEL 325
#define CLKID_HDMITX0_FE_SEL 326
#define CLKID_HDMITX0_FE 327
#define CLKID_HDMITX1_PIXEL_SEL 328
#define CLKID_HDMITX1_PIXEL 329
#define CLKID_HDMITX1_FE_SEL 330
#define CLKID_HDMITX1_FE 331
#define CLKID_CSI_PHY_SEL 332
#define CLKID_CSI_PHY_DIV 333
#define CLKID_CSI_PHY 334
#define CLKID_DSI0_MEAS_SEL 335
#define CLKID_DSI0_MEAS_DIV 336
#define CLKID_DSI0_MEAS 337
#define CLKID_DSI1_MEAS_SEL 338
#define CLKID_DSI1_MEAS_DIV 339
#define CLKID_DSI1_MEAS 340
#endif /* __AMLOGIC_A9_PERIPHERALS_CLKC_H */