13d0407baSopenharmony_ci// SPDX-License-Identifier: GPL-2.0 23d0407baSopenharmony_ci/* 33d0407baSopenharmony_ci * Copyright (c) 2018 Fuzhou Rockchip Electronics Co., Ltd 43d0407baSopenharmony_ci * Author: Elaine Zhang <zhangqing@rock-chips.com> 53d0407baSopenharmony_ci */ 63d0407baSopenharmony_ci#include <linux/clk-provider.h> 73d0407baSopenharmony_ci#include <linux/module.h> 83d0407baSopenharmony_ci#include <linux/of.h> 93d0407baSopenharmony_ci#include <linux/of_address.h> 103d0407baSopenharmony_ci#include <linux/of_device.h> 113d0407baSopenharmony_ci#include <linux/syscore_ops.h> 123d0407baSopenharmony_ci#include <dt-bindings/clock/rk1808-cru.h> 133d0407baSopenharmony_ci#include "clk.h" 143d0407baSopenharmony_ci 153d0407baSopenharmony_ci#define RK1808_GRF_SOC_STATUS0 0x480 163d0407baSopenharmony_ci#define RK1808_PMUGRF_SOC_CON0 0x100 173d0407baSopenharmony_ci#define RK1808_UART_FRAC_MAX_PRATE 800000000 183d0407baSopenharmony_ci#define RK1808_PDM_FRAC_MAX_PRATE 300000000 193d0407baSopenharmony_ci#define RK1808_I2S_FRAC_MAX_PRATE 600000000 203d0407baSopenharmony_ci#define RK1808_VOP_RAW_FRAC_MAX_PRATE 300000000 213d0407baSopenharmony_ci#define RK1808_VOP_LITE_FRAC_MAX_PRATE 400000000 223d0407baSopenharmony_ci 233d0407baSopenharmony_cienum rk1808_plls { 243d0407baSopenharmony_ci apll, 253d0407baSopenharmony_ci dpll, 263d0407baSopenharmony_ci cpll, 273d0407baSopenharmony_ci gpll, 283d0407baSopenharmony_ci npll, 293d0407baSopenharmony_ci ppll, 303d0407baSopenharmony_ci}; 313d0407baSopenharmony_ci 323d0407baSopenharmony_cistatic struct rockchip_pll_rate_table rk1808_pll_rates[] = { 333d0407baSopenharmony_ci /* _mhz, _refdiv, _fbdiv, _postdiv1, _postdiv2, _dsmpd, _frac */ 343d0407baSopenharmony_ci RK3036_PLL_RATE(1608000000, 1, 67, 1, 1, 1, 0), 353d0407baSopenharmony_ci RK3036_PLL_RATE(1584000000, 1, 66, 1, 1, 1, 0), 363d0407baSopenharmony_ci RK3036_PLL_RATE(1560000000, 1, 65, 1, 1, 1, 0), 373d0407baSopenharmony_ci RK3036_PLL_RATE(1536000000, 1, 64, 1, 1, 1, 0), 383d0407baSopenharmony_ci RK3036_PLL_RATE(1512000000, 1, 63, 1, 1, 1, 0), 393d0407baSopenharmony_ci RK3036_PLL_RATE(1488000000, 1, 62, 1, 1, 1, 0), 403d0407baSopenharmony_ci RK3036_PLL_RATE(1464000000, 1, 61, 1, 1, 1, 0), 413d0407baSopenharmony_ci RK3036_PLL_RATE(1440000000, 1, 60, 1, 1, 1, 0), 423d0407baSopenharmony_ci RK3036_PLL_RATE(1416000000, 1, 59, 1, 1, 1, 0), 433d0407baSopenharmony_ci RK3036_PLL_RATE(1392000000, 1, 58, 1, 1, 1, 0), 443d0407baSopenharmony_ci RK3036_PLL_RATE(1368000000, 1, 57, 1, 1, 1, 0), 453d0407baSopenharmony_ci RK3036_PLL_RATE(1344000000, 1, 56, 1, 1, 1, 0), 463d0407baSopenharmony_ci RK3036_PLL_RATE(1320000000, 1, 55, 1, 1, 1, 0), 473d0407baSopenharmony_ci RK3036_PLL_RATE(1296000000, 1, 54, 1, 1, 1, 0), 483d0407baSopenharmony_ci RK3036_PLL_RATE(1272000000, 1, 53, 1, 1, 1, 0), 493d0407baSopenharmony_ci RK3036_PLL_RATE(1248000000, 1, 52, 1, 1, 1, 0), 503d0407baSopenharmony_ci RK3036_PLL_RATE(1200000000, 1, 50, 1, 1, 1, 0), 513d0407baSopenharmony_ci RK3036_PLL_RATE(1188000000, 1, 99, 2, 1, 1, 0), 523d0407baSopenharmony_ci RK3036_PLL_RATE(1104000000, 1, 46, 1, 1, 1, 0), 533d0407baSopenharmony_ci RK3036_PLL_RATE(1100000000, 2, 275, 3, 1, 1, 0), 543d0407baSopenharmony_ci RK3036_PLL_RATE(1008000000, 1, 84, 2, 1, 1, 0), 553d0407baSopenharmony_ci RK3036_PLL_RATE(1000000000, 1, 125, 3, 1, 1, 0), 563d0407baSopenharmony_ci RK3036_PLL_RATE(984000000, 1, 82, 2, 1, 1, 0), 573d0407baSopenharmony_ci RK3036_PLL_RATE(960000000, 1, 80, 2, 1, 1, 0), 583d0407baSopenharmony_ci RK3036_PLL_RATE(936000000, 1, 78, 2, 1, 1, 0), 593d0407baSopenharmony_ci RK3036_PLL_RATE(912000000, 1, 76, 2, 1, 1, 0), 603d0407baSopenharmony_ci RK3036_PLL_RATE(900000000, 1, 75, 2, 1, 1, 0), 613d0407baSopenharmony_ci RK3036_PLL_RATE(888000000, 1, 74, 2, 1, 1, 0), 623d0407baSopenharmony_ci RK3036_PLL_RATE(864000000, 1, 72, 2, 1, 1, 0), 633d0407baSopenharmony_ci RK3036_PLL_RATE(840000000, 1, 70, 2, 1, 1, 0), 643d0407baSopenharmony_ci RK3036_PLL_RATE(816000000, 1, 68, 2, 1, 1, 0), 653d0407baSopenharmony_ci RK3036_PLL_RATE(800000000, 1, 100, 3, 1, 1, 0), 663d0407baSopenharmony_ci RK3036_PLL_RATE(700000000, 1, 175, 2, 1, 1, 0), 673d0407baSopenharmony_ci RK3036_PLL_RATE(696000000, 1, 58, 2, 1, 1, 0), 683d0407baSopenharmony_ci RK3036_PLL_RATE(624000000, 1, 52, 2, 1, 1, 0), 693d0407baSopenharmony_ci RK3036_PLL_RATE(600000000, 1, 75, 3, 1, 1, 0), 703d0407baSopenharmony_ci RK3036_PLL_RATE(594000000, 1, 99, 4, 1, 1, 0), 713d0407baSopenharmony_ci RK3036_PLL_RATE(504000000, 1, 63, 3, 1, 1, 0), 723d0407baSopenharmony_ci RK3036_PLL_RATE(500000000, 1, 125, 6, 1, 1, 0), 733d0407baSopenharmony_ci RK3036_PLL_RATE(416000000, 1, 52, 3, 1, 1, 0), 743d0407baSopenharmony_ci RK3036_PLL_RATE(408000000, 1, 68, 2, 2, 1, 0), 753d0407baSopenharmony_ci RK3036_PLL_RATE(312000000, 1, 52, 2, 2, 1, 0), 763d0407baSopenharmony_ci RK3036_PLL_RATE(216000000, 1, 72, 4, 2, 1, 0), 773d0407baSopenharmony_ci RK3036_PLL_RATE(200000000, 1, 200, 6, 4, 1, 0), 783d0407baSopenharmony_ci RK3036_PLL_RATE(100000000, 1, 150, 6, 6, 1, 0), 793d0407baSopenharmony_ci RK3036_PLL_RATE(96000000, 1, 64, 4, 4, 1, 0), 803d0407baSopenharmony_ci { }, /* sentinel */ 813d0407baSopenharmony_ci}; 823d0407baSopenharmony_ci 833d0407baSopenharmony_ci#define RK1808_DIV_ACLKM_MASK 0x7 843d0407baSopenharmony_ci#define RK1808_DIV_ACLKM_SHIFT 12 853d0407baSopenharmony_ci#define RK1808_DIV_PCLK_DBG_MASK 0xf 863d0407baSopenharmony_ci#define RK1808_DIV_PCLK_DBG_SHIFT 8 873d0407baSopenharmony_ci 883d0407baSopenharmony_ci#define RK1808_CLKSEL0(_aclk_core, _pclk_dbg) \ 893d0407baSopenharmony_ci { \ 903d0407baSopenharmony_ci .reg = RK1808_CLKSEL_CON(0), \ 913d0407baSopenharmony_ci .val = HIWORD_UPDATE(_aclk_core, RK1808_DIV_ACLKM_MASK, RK1808_DIV_ACLKM_SHIFT) | \ 923d0407baSopenharmony_ci HIWORD_UPDATE(_pclk_dbg, RK1808_DIV_PCLK_DBG_MASK, RK1808_DIV_PCLK_DBG_SHIFT), \ 933d0407baSopenharmony_ci } 943d0407baSopenharmony_ci 953d0407baSopenharmony_ci#define RK1808_CPUCLK_RATE(_prate, _aclk_core, _pclk_dbg) \ 963d0407baSopenharmony_ci { \ 973d0407baSopenharmony_ci .prate = (_prate), \ 983d0407baSopenharmony_ci .divs = { \ 993d0407baSopenharmony_ci RK1808_CLKSEL0(_aclk_core, _pclk_dbg), \ 1003d0407baSopenharmony_ci }, \ 1013d0407baSopenharmony_ci } 1023d0407baSopenharmony_ci 1033d0407baSopenharmony_cistatic struct rockchip_cpuclk_rate_table rk1808_cpuclk_rates[] __initdata = { 1043d0407baSopenharmony_ci RK1808_CPUCLK_RATE(1608000000, 1, 7), RK1808_CPUCLK_RATE(1512000000, 1, 7), RK1808_CPUCLK_RATE(1488000000, 1, 5), 1053d0407baSopenharmony_ci RK1808_CPUCLK_RATE(1416000000, 1, 5), RK1808_CPUCLK_RATE(1392000000, 1, 5), RK1808_CPUCLK_RATE(1296000000, 1, 5), 1063d0407baSopenharmony_ci RK1808_CPUCLK_RATE(1200000000, 1, 5), RK1808_CPUCLK_RATE(1104000000, 1, 5), RK1808_CPUCLK_RATE(1008000000, 1, 5), 1073d0407baSopenharmony_ci RK1808_CPUCLK_RATE(912000000, 1, 5), RK1808_CPUCLK_RATE(816000000, 1, 3), RK1808_CPUCLK_RATE(696000000, 1, 3), 1083d0407baSopenharmony_ci RK1808_CPUCLK_RATE(600000000, 1, 3), RK1808_CPUCLK_RATE(408000000, 1, 1), RK1808_CPUCLK_RATE(312000000, 1, 1), 1093d0407baSopenharmony_ci RK1808_CPUCLK_RATE(216000000, 1, 1), RK1808_CPUCLK_RATE(96000000, 1, 1), 1103d0407baSopenharmony_ci}; 1113d0407baSopenharmony_ci 1123d0407baSopenharmony_cistatic const struct rockchip_cpuclk_reg_data rk1808_cpuclk_data = { 1133d0407baSopenharmony_ci .core_reg[0] = RK1808_CLKSEL_CON(0), 1143d0407baSopenharmony_ci .div_core_shift[0] = 0, 1153d0407baSopenharmony_ci .div_core_mask[0] = 0xf, 1163d0407baSopenharmony_ci .num_cores = 1, 1173d0407baSopenharmony_ci .mux_core_alt = 2, 1183d0407baSopenharmony_ci .mux_core_main = 0, 1193d0407baSopenharmony_ci .mux_core_shift = 6, 1203d0407baSopenharmony_ci .mux_core_mask = 0x3, 1213d0407baSopenharmony_ci}; 1223d0407baSopenharmony_ci 1233d0407baSopenharmony_ciPNAME(mux_pll_p) = {"xin24m", "xin32k"}; 1243d0407baSopenharmony_ciPNAME(mux_usb480m_p) = {"xin24m", "usb480m_phy", "xin32k"}; 1253d0407baSopenharmony_ciPNAME(mux_gpll_cpll_p) = {"gpll", "cpll"}; 1263d0407baSopenharmony_ciPNAME(mux_gpll_cpll_apll_p) = {"gpll", "cpll", "apll"}; 1273d0407baSopenharmony_ciPNAME(mux_npu_p) = {"clk_npu_div", "clk_npu_np5"}; 1283d0407baSopenharmony_ciPNAME(mux_ddr_p) = {"dpll_ddr", "gpll_ddr"}; 1293d0407baSopenharmony_ciPNAME(mux_cpll_gpll_npll_p) = {"cpll", "gpll", "npll"}; 1303d0407baSopenharmony_ciPNAME(mux_gpll_cpll_npll_p) = {"gpll", "cpll", "npll"}; 1313d0407baSopenharmony_ciPNAME(mux_dclk_vopraw_p) = {"dclk_vopraw_src", "dclk_vopraw_frac", "xin24m"}; 1323d0407baSopenharmony_ciPNAME(mux_dclk_voplite_p) = {"dclk_voplite_src", "dclk_voplite_frac", "xin24m"}; 1333d0407baSopenharmony_ciPNAME(mux_24m_npll_gpll_usb480m_p) = {"xin24m", "npll", "gpll", "usb480m"}; 1343d0407baSopenharmony_ciPNAME(mux_usb3_otg0_suspend_p) = {"xin32k", "xin24m"}; 1353d0407baSopenharmony_ciPNAME(mux_pcie_aux_p) = {"xin24m", "clk_pcie_src"}; 1363d0407baSopenharmony_ciPNAME(mux_gpll_cpll_npll_24m_p) = {"gpll", "cpll", "npll", "xin24m"}; 1373d0407baSopenharmony_ciPNAME(mux_sdio_p) = {"clk_sdio_div", "clk_sdio_div50"}; 1383d0407baSopenharmony_ciPNAME(mux_sdmmc_p) = {"clk_sdmmc_div", "clk_sdmmc_div50"}; 1393d0407baSopenharmony_ciPNAME(mux_emmc_p) = {"clk_emmc_div", "clk_emmc_div50"}; 1403d0407baSopenharmony_ciPNAME(mux_cpll_npll_ppll_p) = {"cpll", "npll", "ppll"}; 1413d0407baSopenharmony_ciPNAME(mux_gmac_p) = {"clk_gmac_src", "gmac_clkin"}; 1423d0407baSopenharmony_ciPNAME(mux_gmac_rgmii_speed_p) = {"clk_gmac_tx_src", "clk_gmac_tx_src", "clk_gmac_tx_div50", "clk_gmac_tx_div5"}; 1433d0407baSopenharmony_ciPNAME(mux_gmac_rmii_speed_p) = {"clk_gmac_rx_div20", "clk_gmac_rx_div2"}; 1443d0407baSopenharmony_ciPNAME(mux_gmac_rx_tx_p) = {"clk_gmac_rgmii_speed", "clk_gmac_rmii_speed"}; 1453d0407baSopenharmony_ciPNAME(mux_gpll_usb480m_cpll_npll_p) = {"gpll", "usb480m", "cpll", "npll"}; 1463d0407baSopenharmony_ciPNAME(mux_uart1_p) = {"clk_uart1_src", "clk_uart1_np5", "clk_uart1_frac", "xin24m"}; 1473d0407baSopenharmony_ciPNAME(mux_uart2_p) = {"clk_uart2_src", "clk_uart2_np5", "clk_uart2_frac", "xin24m"}; 1483d0407baSopenharmony_ciPNAME(mux_uart3_p) = {"clk_uart3_src", "clk_uart3_np5", "clk_uart3_frac", "xin24m"}; 1493d0407baSopenharmony_ciPNAME(mux_uart4_p) = {"clk_uart4_src", "clk_uart4_np5", "clk_uart4_frac", "xin24m"}; 1503d0407baSopenharmony_ciPNAME(mux_uart5_p) = {"clk_uart5_src", "clk_uart5_np5", "clk_uart5_frac", "xin24m"}; 1513d0407baSopenharmony_ciPNAME(mux_uart6_p) = {"clk_uart6_src", "clk_uart6_np5", "clk_uart6_frac", "xin24m"}; 1523d0407baSopenharmony_ciPNAME(mux_uart7_p) = {"clk_uart7_src", "clk_uart7_np5", "clk_uart7_frac", "xin24m"}; 1533d0407baSopenharmony_ciPNAME(mux_gpll_xin24m_p) = {"gpll", "xin24m"}; 1543d0407baSopenharmony_ciPNAME(mux_gpll_cpll_xin24m_p) = {"gpll", "cpll", "xin24m"}; 1553d0407baSopenharmony_ciPNAME(mux_gpll_xin24m_cpll_npll_p) = {"gpll", "xin24m", "cpll", "npll"}; 1563d0407baSopenharmony_ciPNAME(mux_pdm_p) = {"clk_pdm_src", "clk_pdm_frac"}; 1573d0407baSopenharmony_ciPNAME(mux_i2s0_8ch_tx_p) = {"clk_i2s0_8ch_tx_src", "clk_i2s0_8ch_tx_frac", "mclk_i2s0_8ch_in", "xin12m"}; 1583d0407baSopenharmony_ciPNAME(mux_i2s0_8ch_tx_rx_p) = {"clk_i2s0_8ch_tx_mux", "clk_i2s0_8ch_rx_mux"}; 1593d0407baSopenharmony_ciPNAME(mux_i2s0_8ch_tx_out_p) = {"clk_i2s0_8ch_tx", "xin12m", "clk_i2s0_8ch_rx"}; 1603d0407baSopenharmony_ciPNAME(mux_i2s0_8ch_rx_p) = {"clk_i2s0_8ch_rx_src", "clk_i2s0_8ch_rx_frac", "mclk_i2s0_8ch_in", "xin12m"}; 1613d0407baSopenharmony_ciPNAME(mux_i2s0_8ch_rx_tx_p) = {"clk_i2s0_8ch_rx_mux", "clk_i2s0_8ch_tx_mux"}; 1623d0407baSopenharmony_ciPNAME(mux_i2s0_8ch_rx_out_p) = {"clk_i2s0_8ch_rx", "xin12m", "clk_i2s0_8ch_tx"}; 1633d0407baSopenharmony_ciPNAME(mux_i2s1_2ch_p) = {"clk_i2s1_2ch_src", "clk_i2s1_2ch_frac", "mclk_i2s1_2ch_in", "xin12m"}; 1643d0407baSopenharmony_ciPNAME(mux_i2s1_2ch_out_p) = {"clk_i2s1_2ch", "xin12m"}; 1653d0407baSopenharmony_ciPNAME(mux_rtc32k_pmu_p) = {"xin32k", "pmu_pvtm_32k", "clk_rtc32k_frac"}; 1663d0407baSopenharmony_ciPNAME(mux_wifi_pmu_p) = {"xin24m", "clk_wifi_pmu_src"}; 1673d0407baSopenharmony_ciPNAME(mux_gpll_usb480m_cpll_ppll_p) = {"gpll", "usb480m", "cpll", "ppll"}; 1683d0407baSopenharmony_ciPNAME(mux_uart0_pmu_p) = {"clk_uart0_pmu_src", "clk_uart0_np5", "clk_uart0_frac", "xin24m"}; 1693d0407baSopenharmony_ciPNAME(mux_usbphy_ref_p) = {"xin24m", "clk_ref24m_pmu"}; 1703d0407baSopenharmony_ciPNAME(mux_mipidsiphy_ref_p) = {"xin24m", "clk_ref24m_pmu"}; 1713d0407baSopenharmony_ciPNAME(mux_pciephy_ref_p) = {"xin24m", "clk_pciephy_src"}; 1723d0407baSopenharmony_ciPNAME(mux_ppll_xin24m_p) = {"ppll", "xin24m"}; 1733d0407baSopenharmony_ciPNAME(mux_xin24m_32k_p) = {"xin24m", "xin32k"}; 1743d0407baSopenharmony_ciPNAME(mux_clk_32k_ioe_p) = {"clk_rtc32k_pmu", "xin32k"}; 1753d0407baSopenharmony_ci 1763d0407baSopenharmony_cistatic struct rockchip_pll_clock rk1808_pll_clks[] __initdata = { 1773d0407baSopenharmony_ci [apll] = 1783d0407baSopenharmony_ci PLL(pll_rk3036, PLL_APLL, "apll", mux_pll_p, 0, RK1808_PLL_CON(0), RK1808_MODE_CON, 0, 0, 0, rk1808_pll_rates), 1793d0407baSopenharmony_ci [dpll] = PLL(pll_rk3036, PLL_DPLL, "dpll", mux_pll_p, 0, RK1808_PLL_CON(8), RK1808_MODE_CON, 2, 1, 0, NULL), 1803d0407baSopenharmony_ci [cpll] = 1813d0407baSopenharmony_ci PLL(pll_rk3036, PLL_CPLL, "cpll", mux_pll_p, 0, RK1808_PLL_CON(16), RK1808_MODE_CON, 4, 2, 0, rk1808_pll_rates), 1823d0407baSopenharmony_ci [gpll] = 1833d0407baSopenharmony_ci PLL(pll_rk3036, PLL_GPLL, "gpll", mux_pll_p, 0, RK1808_PLL_CON(24), RK1808_MODE_CON, 6, 3, 0, rk1808_pll_rates), 1843d0407baSopenharmony_ci [npll] = 1853d0407baSopenharmony_ci PLL(pll_rk3036, PLL_NPLL, "npll", mux_pll_p, 0, RK1808_PLL_CON(32), RK1808_MODE_CON, 8, 5, 0, rk1808_pll_rates), 1863d0407baSopenharmony_ci [ppll] = PLL(pll_rk3036, PLL_PPLL, "ppll", mux_pll_p, 0, RK1808_PMU_PLL_CON(0), RK1808_PMU_MODE_CON, 0, 4, 0, 1873d0407baSopenharmony_ci rk1808_pll_rates), 1883d0407baSopenharmony_ci}; 1893d0407baSopenharmony_ci 1903d0407baSopenharmony_ci#define MFLAGS CLK_MUX_HIWORD_MASK 1913d0407baSopenharmony_ci#define DFLAGS CLK_DIVIDER_HIWORD_MASK 1923d0407baSopenharmony_ci#define GFLAGS (CLK_GATE_HIWORD_MASK | CLK_GATE_SET_TO_DISABLE) 1933d0407baSopenharmony_ci 1943d0407baSopenharmony_cistatic struct rockchip_clk_branch rk1808_uart1_fracmux __initdata = 1953d0407baSopenharmony_ci MUX(0, "clk_uart1_mux", mux_uart1_p, CLK_SET_RATE_PARENT, RK1808_CLKSEL_CON(39), 14, 2, MFLAGS); 1963d0407baSopenharmony_ci 1973d0407baSopenharmony_cistatic struct rockchip_clk_branch rk1808_uart2_fracmux __initdata = 1983d0407baSopenharmony_ci MUX(0, "clk_uart2_mux", mux_uart2_p, CLK_SET_RATE_PARENT, RK1808_CLKSEL_CON(42), 14, 2, MFLAGS); 1993d0407baSopenharmony_ci 2003d0407baSopenharmony_cistatic struct rockchip_clk_branch rk1808_uart3_fracmux __initdata = 2013d0407baSopenharmony_ci MUX(0, "clk_uart3_mux", mux_uart3_p, CLK_SET_RATE_PARENT, RK1808_CLKSEL_CON(45), 14, 2, MFLAGS); 2023d0407baSopenharmony_ci 2033d0407baSopenharmony_cistatic struct rockchip_clk_branch rk1808_uart4_fracmux __initdata = 2043d0407baSopenharmony_ci MUX(0, "clk_uart4_mux", mux_uart4_p, CLK_SET_RATE_PARENT, RK1808_CLKSEL_CON(48), 14, 2, MFLAGS); 2053d0407baSopenharmony_ci 2063d0407baSopenharmony_cistatic struct rockchip_clk_branch rk1808_uart5_fracmux __initdata = 2073d0407baSopenharmony_ci MUX(0, "clk_uart5_mux", mux_uart5_p, CLK_SET_RATE_PARENT, RK1808_CLKSEL_CON(51), 14, 2, MFLAGS); 2083d0407baSopenharmony_ci 2093d0407baSopenharmony_cistatic struct rockchip_clk_branch rk1808_uart6_fracmux __initdata = 2103d0407baSopenharmony_ci MUX(0, "clk_uart6_mux", mux_uart6_p, CLK_SET_RATE_PARENT, RK1808_CLKSEL_CON(54), 14, 2, MFLAGS); 2113d0407baSopenharmony_ci 2123d0407baSopenharmony_cistatic struct rockchip_clk_branch rk1808_uart7_fracmux __initdata = 2133d0407baSopenharmony_ci MUX(0, "clk_uart7_mux", mux_uart7_p, CLK_SET_RATE_PARENT, RK1808_CLKSEL_CON(57), 14, 2, MFLAGS); 2143d0407baSopenharmony_ci 2153d0407baSopenharmony_cistatic struct rockchip_clk_branch rk1808_dclk_vopraw_fracmux __initdata = 2163d0407baSopenharmony_ci MUX(0, "dclk_vopraw_mux", mux_dclk_vopraw_p, CLK_SET_RATE_PARENT, RK1808_CLKSEL_CON(5), 14, 2, MFLAGS); 2173d0407baSopenharmony_ci 2183d0407baSopenharmony_cistatic struct rockchip_clk_branch rk1808_dclk_voplite_fracmux __initdata = 2193d0407baSopenharmony_ci MUX(0, "dclk_voplite_mux", mux_dclk_voplite_p, CLK_SET_RATE_PARENT, RK1808_CLKSEL_CON(7), 14, 2, MFLAGS); 2203d0407baSopenharmony_ci 2213d0407baSopenharmony_cistatic struct rockchip_clk_branch rk1808_pdm_fracmux __initdata = 2223d0407baSopenharmony_ci MUX(0, "clk_pdm_mux", mux_pdm_p, CLK_SET_RATE_PARENT, RK1808_CLKSEL_CON(30), 15, 1, MFLAGS); 2233d0407baSopenharmony_ci 2243d0407baSopenharmony_cistatic struct rockchip_clk_branch rk1808_i2s0_8ch_tx_fracmux __initdata = 2253d0407baSopenharmony_ci MUX(SCLK_I2S0_8CH_TX_MUX, "clk_i2s0_8ch_tx_mux", mux_i2s0_8ch_tx_p, CLK_SET_RATE_PARENT, RK1808_CLKSEL_CON(32), 10, 2263d0407baSopenharmony_ci 2, MFLAGS); 2273d0407baSopenharmony_ci 2283d0407baSopenharmony_cistatic struct rockchip_clk_branch rk1808_i2s0_8ch_rx_fracmux __initdata = 2293d0407baSopenharmony_ci MUX(SCLK_I2S0_8CH_RX_MUX, "clk_i2s0_8ch_rx_mux", mux_i2s0_8ch_rx_p, CLK_SET_RATE_PARENT, RK1808_CLKSEL_CON(34), 10, 2303d0407baSopenharmony_ci 2, MFLAGS); 2313d0407baSopenharmony_ci 2323d0407baSopenharmony_cistatic struct rockchip_clk_branch rk1808_i2s1_2ch_fracmux __initdata = 2333d0407baSopenharmony_ci MUX(0, "clk_i2s1_2ch_mux", mux_i2s1_2ch_p, CLK_SET_RATE_PARENT, RK1808_CLKSEL_CON(36), 10, 2, MFLAGS); 2343d0407baSopenharmony_ci 2353d0407baSopenharmony_cistatic struct rockchip_clk_branch rk1808_rtc32k_pmu_fracmux __initdata = MUX( 2363d0407baSopenharmony_ci SCLK_RTC32K_PMU, "clk_rtc32k_pmu", mux_rtc32k_pmu_p, CLK_SET_RATE_PARENT, RK1808_PMU_CLKSEL_CON(0), 14, 2, MFLAGS); 2373d0407baSopenharmony_ci 2383d0407baSopenharmony_cistatic struct rockchip_clk_branch rk1808_uart0_pmu_fracmux __initdata = 2393d0407baSopenharmony_ci MUX(0, "clk_uart0_pmu_mux", mux_uart0_pmu_p, CLK_SET_RATE_PARENT, RK1808_PMU_CLKSEL_CON(4), 14, 2, MFLAGS); 2403d0407baSopenharmony_ci 2413d0407baSopenharmony_cistatic struct rockchip_clk_branch rk1808_clk_branches[] __initdata = { 2423d0407baSopenharmony_ci /* 2433d0407baSopenharmony_ci * Clock-Architecture Diagram 1 2443d0407baSopenharmony_ci */ 2453d0407baSopenharmony_ci 2463d0407baSopenharmony_ci MUX(USB480M, "usb480m", mux_usb480m_p, CLK_SET_RATE_PARENT, RK1808_MODE_CON, 10, 2, MFLAGS), 2473d0407baSopenharmony_ci FACTOR(0, "xin12m", "xin24m", 0, 1, 2), 2483d0407baSopenharmony_ci 2493d0407baSopenharmony_ci /* 2503d0407baSopenharmony_ci * Clock-Architecture Diagram 2 2513d0407baSopenharmony_ci */ 2523d0407baSopenharmony_ci 2533d0407baSopenharmony_ci GATE(0, "apll_core", "apll", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(0), 0, GFLAGS), 2543d0407baSopenharmony_ci GATE(0, "cpll_core", "cpll", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(0), 0, GFLAGS), 2553d0407baSopenharmony_ci GATE(0, "gpll_core", "gpll", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(0), 0, GFLAGS), 2563d0407baSopenharmony_ci COMPOSITE_NOMUX(0, "pclk_core_dbg", "armclk", CLK_IGNORE_UNUSED, RK1808_CLKSEL_CON(0), 8, 4, 2573d0407baSopenharmony_ci DFLAGS | CLK_DIVIDER_READ_ONLY, RK1808_CLKGATE_CON(0), 3, GFLAGS), 2583d0407baSopenharmony_ci COMPOSITE_NOMUX(0, "aclk_core", "armclk", CLK_IGNORE_UNUSED, RK1808_CLKSEL_CON(0), 12, 3, 2593d0407baSopenharmony_ci DFLAGS | CLK_DIVIDER_READ_ONLY, RK1808_CLKGATE_CON(0), 2, GFLAGS), 2603d0407baSopenharmony_ci 2613d0407baSopenharmony_ci GATE(0, "clk_jtag", "jtag_clkin", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(0), 4, GFLAGS), 2623d0407baSopenharmony_ci 2633d0407baSopenharmony_ci GATE(SCLK_PVTM_CORE, "clk_pvtm_core", "xin24m", 0, RK1808_CLKGATE_CON(0), 5, GFLAGS), 2643d0407baSopenharmony_ci 2653d0407baSopenharmony_ci COMPOSITE_NOMUX(MSCLK_CORE_NIU, "msclk_core_niu", "gpll", CLK_IS_CRITICAL, RK1808_CLKSEL_CON(18), 0, 5, DFLAGS, 2663d0407baSopenharmony_ci RK1808_CLKGATE_CON(0), 1, GFLAGS), 2673d0407baSopenharmony_ci 2683d0407baSopenharmony_ci /* 2693d0407baSopenharmony_ci * Clock-Architecture Diagram 3 2703d0407baSopenharmony_ci */ 2713d0407baSopenharmony_ci 2723d0407baSopenharmony_ci COMPOSITE(ACLK_GIC_PRE, "aclk_gic_pre", mux_gpll_cpll_p, CLK_IS_CRITICAL, RK1808_CLKSEL_CON(15), 11, 1, MFLAGS, 12, 2733d0407baSopenharmony_ci 4, DFLAGS, RK1808_CLKGATE_CON(1), 0, GFLAGS), 2743d0407baSopenharmony_ci GATE(0, "aclk_gic_niu", "aclk_gic_pre", CLK_IS_CRITICAL, RK1808_CLKGATE_CON(1), 1, GFLAGS), 2753d0407baSopenharmony_ci GATE(ACLK_GIC, "aclk_gic", "aclk_gic_pre", CLK_IS_CRITICAL, RK1808_CLKGATE_CON(1), 2, GFLAGS), 2763d0407baSopenharmony_ci GATE(0, "aclk_core2gic", "aclk_gic_pre", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(1), 3, GFLAGS), 2773d0407baSopenharmony_ci GATE(0, "aclk_gic2core", "aclk_gic_pre", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(1), 4, GFLAGS), 2783d0407baSopenharmony_ci GATE(0, "aclk_spinlock", "aclk_gic_pre", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(1), 4, GFLAGS), 2793d0407baSopenharmony_ci 2803d0407baSopenharmony_ci COMPOSITE(0, "aclk_vpu_pre", mux_gpll_cpll_p, 0, RK1808_CLKSEL_CON(16), 7, 1, MFLAGS, 0, 5, DFLAGS, 2813d0407baSopenharmony_ci RK1808_CLKGATE_CON(8), 8, GFLAGS), 2823d0407baSopenharmony_ci COMPOSITE_NOMUX(0, "hclk_vpu_pre", "aclk_vpu_pre", 0, RK1808_CLKSEL_CON(16), 8, 4, DFLAGS, RK1808_CLKGATE_CON(8), 9, 2833d0407baSopenharmony_ci GFLAGS), 2843d0407baSopenharmony_ci GATE(ACLK_VPU, "aclk_vpu", "aclk_vpu_pre", 0, RK1808_CLKGATE_CON(8), 12, GFLAGS), 2853d0407baSopenharmony_ci GATE(0, "aclk_vpu_niu", "aclk_vpu_pre", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(8), 10, GFLAGS), 2863d0407baSopenharmony_ci GATE(HCLK_VPU, "hclk_vpu", "hclk_vpu_pre", 0, RK1808_CLKGATE_CON(8), 13, GFLAGS), 2873d0407baSopenharmony_ci GATE(0, "hclk_vpu_niu", "hclk_vpu_pre", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(8), 11, GFLAGS), 2883d0407baSopenharmony_ci 2893d0407baSopenharmony_ci /* 2903d0407baSopenharmony_ci * Clock-Architecture Diagram 4 2913d0407baSopenharmony_ci */ 2923d0407baSopenharmony_ci COMPOSITE_NOGATE(0, "clk_npu_div", mux_gpll_cpll_p, CLK_OPS_PARENT_ENABLE, RK1808_CLKSEL_CON(1), 8, 2, MFLAGS, 0, 4, 2933d0407baSopenharmony_ci DFLAGS), 2943d0407baSopenharmony_ci COMPOSITE_NOGATE_HALFDIV(0, "clk_npu_np5", mux_gpll_cpll_p, CLK_OPS_PARENT_ENABLE, RK1808_CLKSEL_CON(1), 10, 2, 2953d0407baSopenharmony_ci MFLAGS, 4, 4, DFLAGS), 2963d0407baSopenharmony_ci MUX(0, "clk_npu_pre", mux_npu_p, CLK_SET_RATE_PARENT, RK1808_CLKSEL_CON(1), 15, 1, MFLAGS), 2973d0407baSopenharmony_ci FACTOR(0, "clk_npu_scan", "clk_npu_pre", 0, 1, 2), 2983d0407baSopenharmony_ci GATE(SCLK_NPU, "clk_npu", "clk_npu_pre", 0, RK1808_CLKGATE_CON(1), 10, GFLAGS), 2993d0407baSopenharmony_ci 3003d0407baSopenharmony_ci COMPOSITE(0, "aclk_npu_pre", mux_gpll_cpll_p, 0, RK1808_CLKSEL_CON(2), 14, 1, MFLAGS, 0, 4, DFLAGS, 3013d0407baSopenharmony_ci RK1808_CLKGATE_CON(1), 8, GFLAGS), 3023d0407baSopenharmony_ci COMPOSITE(0, "hclk_npu_pre", mux_gpll_cpll_p, 0, RK1808_CLKSEL_CON(2), 15, 1, MFLAGS, 8, 4, DFLAGS, 3033d0407baSopenharmony_ci RK1808_CLKGATE_CON(1), 9, GFLAGS), 3043d0407baSopenharmony_ci GATE(ACLK_NPU, "aclk_npu", "aclk_npu_pre", 0, RK1808_CLKGATE_CON(1), 11, GFLAGS), 3053d0407baSopenharmony_ci GATE(0, "aclk_npu_niu", "aclk_npu_pre", CLK_IS_CRITICAL, RK1808_CLKGATE_CON(1), 13, GFLAGS), 3063d0407baSopenharmony_ci COMPOSITE_NOMUX(0, "aclk_npu2mem", "aclk_npu_pre", CLK_IGNORE_UNUSED, RK1808_CLKSEL_CON(2), 4, 4, DFLAGS, 3073d0407baSopenharmony_ci RK1808_CLKGATE_CON(1), 15, GFLAGS), 3083d0407baSopenharmony_ci GATE(HCLK_NPU, "hclk_npu", "hclk_npu_pre", 0, RK1808_CLKGATE_CON(1), 12, GFLAGS), 3093d0407baSopenharmony_ci GATE(0, "hclk_npu_niu", "hclk_npu_pre", CLK_IS_CRITICAL, RK1808_CLKGATE_CON(1), 14, GFLAGS), 3103d0407baSopenharmony_ci 3113d0407baSopenharmony_ci GATE(SCLK_PVTM_NPU, "clk_pvtm_npu", "xin24m", 0, RK1808_CLKGATE_CON(0), 15, GFLAGS), 3123d0407baSopenharmony_ci 3133d0407baSopenharmony_ci COMPOSITE(ACLK_IMEM_PRE, "aclk_imem_pre", mux_gpll_cpll_p, CLK_IS_CRITICAL, RK1808_CLKSEL_CON(17), 7, 1, MFLAGS, 0, 3143d0407baSopenharmony_ci 5, DFLAGS, RK1808_CLKGATE_CON(7), 0, GFLAGS), 3153d0407baSopenharmony_ci GATE(ACLK_IMEM0, "aclk_imem0", "aclk_imem_pre", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(7), 6, GFLAGS), 3163d0407baSopenharmony_ci GATE(0, "aclk_imem0_niu", "aclk_imem_pre", CLK_IS_CRITICAL, RK1808_CLKGATE_CON(7), 10, GFLAGS), 3173d0407baSopenharmony_ci GATE(ACLK_IMEM1, "aclk_imem1", "aclk_imem_pre", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(7), 7, GFLAGS), 3183d0407baSopenharmony_ci GATE(0, "aclk_imem1_niu", "aclk_imem_pre", CLK_IS_CRITICAL, RK1808_CLKGATE_CON(7), 11, GFLAGS), 3193d0407baSopenharmony_ci GATE(ACLK_IMEM2, "aclk_imem2", "aclk_imem_pre", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(7), 8, GFLAGS), 3203d0407baSopenharmony_ci GATE(0, "aclk_imem2_niu", "aclk_imem_pre", CLK_IS_CRITICAL, RK1808_CLKGATE_CON(7), 12, GFLAGS), 3213d0407baSopenharmony_ci GATE(ACLK_IMEM3, "aclk_imem3", "aclk_imem_pre", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(7), 9, GFLAGS), 3223d0407baSopenharmony_ci GATE(0, "aclk_imem3_niu", "aclk_imem_pre", CLK_IS_CRITICAL, RK1808_CLKGATE_CON(7), 13, GFLAGS), 3233d0407baSopenharmony_ci 3243d0407baSopenharmony_ci COMPOSITE(HSCLK_IMEM, "hsclk_imem", mux_gpll_cpll_p, CLK_IS_CRITICAL, RK1808_CLKSEL_CON(17), 15, 1, MFLAGS, 8, 5, 3253d0407baSopenharmony_ci DFLAGS, RK1808_CLKGATE_CON(7), 5, GFLAGS), 3263d0407baSopenharmony_ci 3273d0407baSopenharmony_ci /* 3283d0407baSopenharmony_ci * Clock-Architecture Diagram 5 3293d0407baSopenharmony_ci */ 3303d0407baSopenharmony_ci GATE(0, "clk_ddr_mon_timer", "xin24m", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(2), 0, GFLAGS), 3313d0407baSopenharmony_ci 3323d0407baSopenharmony_ci GATE(0, "clk_ddr_mon", "clk_ddrphy1x_out", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(2), 11, GFLAGS), 3333d0407baSopenharmony_ci GATE(0, "aclk_split", "clk_ddrphy1x_out", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(2), 15, GFLAGS), 3343d0407baSopenharmony_ci GATE(0, "clk_ddr_msch", "clk_ddrphy1x_out", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(2), 8, GFLAGS), 3353d0407baSopenharmony_ci GATE(0, "clk_ddrdfi_ctl", "clk_ddrphy1x_out", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(2), 3, GFLAGS), 3363d0407baSopenharmony_ci GATE(0, "clk_stdby", "clk_ddrphy1x_out", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(2), 13, GFLAGS), 3373d0407baSopenharmony_ci GATE(0, "aclk_ddrc", "clk_ddrphy1x_out", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(2), 5, GFLAGS), 3383d0407baSopenharmony_ci GATE(0, "clk_core_ddrc", "clk_ddrphy1x_out", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(2), 6, GFLAGS), 3393d0407baSopenharmony_ci 3403d0407baSopenharmony_ci GATE(0, "dpll_ddr", "dpll", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(8), 5, GFLAGS), 3413d0407baSopenharmony_ci GATE(0, "gpll_ddr", "gpll", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(8), 6, GFLAGS), 3423d0407baSopenharmony_ci 3433d0407baSopenharmony_ci COMPOSITE_NOGATE(SCLK_DDRCLK, "sclk_ddrc", mux_ddr_p, CLK_IGNORE_UNUSED, RK1808_CLKSEL_CON(3), 7, 1, MFLAGS, 0, 5, 3443d0407baSopenharmony_ci DFLAGS), 3453d0407baSopenharmony_ci FACTOR(0, "clk_ddrphy1x_out", "sclk_ddrc", CLK_IGNORE_UNUSED, 1, 1), 3463d0407baSopenharmony_ci 3473d0407baSopenharmony_ci COMPOSITE_NOMUX(PCLK_DDR, "pclk_ddr", "gpll", CLK_IS_CRITICAL, RK1808_CLKSEL_CON(3), 8, 5, DFLAGS, 3483d0407baSopenharmony_ci RK1808_CLKGATE_CON(2), 1, GFLAGS), 3493d0407baSopenharmony_ci GATE(PCLK_DDRMON, "pclk_ddrmon", "pclk_ddr", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(2), 10, GFLAGS), 3503d0407baSopenharmony_ci GATE(PCLK_DDRC, "pclk_ddrc", "pclk_ddr", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(2), 7, GFLAGS), 3513d0407baSopenharmony_ci GATE(PCLK_MSCH, "pclk_msch", "pclk_ddr", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(2), 9, GFLAGS), 3523d0407baSopenharmony_ci GATE(PCLK_STDBY, "pclk_stdby", "pclk_ddr", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(2), 12, GFLAGS), 3533d0407baSopenharmony_ci GATE(0, "pclk_ddr_grf", "pclk_ddr", CLK_IS_CRITICAL, RK1808_CLKGATE_CON(2), 14, GFLAGS), 3543d0407baSopenharmony_ci GATE(0, "pclk_ddrdfi_ctl", "pclk_ddr", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(2), 2, GFLAGS), 3553d0407baSopenharmony_ci 3563d0407baSopenharmony_ci /* 3573d0407baSopenharmony_ci * Clock-Architecture Diagram 6 3583d0407baSopenharmony_ci */ 3593d0407baSopenharmony_ci 3603d0407baSopenharmony_ci COMPOSITE(HSCLK_VIO, "hsclk_vio", mux_gpll_cpll_p, 0, RK1808_CLKSEL_CON(4), 7, 1, MFLAGS, 0, 5, DFLAGS, 3613d0407baSopenharmony_ci RK1808_CLKGATE_CON(3), 0, GFLAGS), 3623d0407baSopenharmony_ci COMPOSITE_NOMUX(LSCLK_VIO, "lsclk_vio", "hsclk_vio", 0, RK1808_CLKSEL_CON(4), 8, 4, DFLAGS, RK1808_CLKGATE_CON(3), 3633d0407baSopenharmony_ci 12, GFLAGS), 3643d0407baSopenharmony_ci GATE(0, "hsclk_vio_niu", "hsclk_vio", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(4), 0, GFLAGS), 3653d0407baSopenharmony_ci GATE(0, "lsclk_vio_niu", "lsclk_vio", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(4), 1, GFLAGS), 3663d0407baSopenharmony_ci GATE(ACLK_VOPRAW, "aclk_vopraw", "hsclk_vio", 0, RK1808_CLKGATE_CON(4), 2, GFLAGS), 3673d0407baSopenharmony_ci GATE(HCLK_VOPRAW, "hclk_vopraw", "lsclk_vio", 0, RK1808_CLKGATE_CON(4), 3, GFLAGS), 3683d0407baSopenharmony_ci GATE(ACLK_VOPLITE, "aclk_voplite", "hsclk_vio", 0, RK1808_CLKGATE_CON(4), 4, GFLAGS), 3693d0407baSopenharmony_ci GATE(HCLK_VOPLITE, "hclk_voplite", "lsclk_vio", 0, RK1808_CLKGATE_CON(4), 5, GFLAGS), 3703d0407baSopenharmony_ci GATE(PCLK_DSI_TX, "pclk_dsi_tx", "lsclk_vio", 0, RK1808_CLKGATE_CON(4), 6, GFLAGS), 3713d0407baSopenharmony_ci GATE(PCLK_CSI_TX, "pclk_csi_tx", "lsclk_vio", 0, RK1808_CLKGATE_CON(4), 7, GFLAGS), 3723d0407baSopenharmony_ci GATE(ACLK_RGA, "aclk_rga", "hsclk_vio", 0, RK1808_CLKGATE_CON(4), 8, GFLAGS), 3733d0407baSopenharmony_ci GATE(HCLK_RGA, "hclk_rga", "lsclk_vio", 0, RK1808_CLKGATE_CON(4), 9, GFLAGS), 3743d0407baSopenharmony_ci GATE(ACLK_ISP, "aclk_isp", "hsclk_vio", 0, RK1808_CLKGATE_CON(4), 13, GFLAGS), 3753d0407baSopenharmony_ci GATE(HCLK_ISP, "hclk_isp", "lsclk_vio", 0, RK1808_CLKGATE_CON(4), 14, GFLAGS), 3763d0407baSopenharmony_ci GATE(ACLK_CIF, "aclk_cif", "hsclk_vio", 0, RK1808_CLKGATE_CON(4), 10, GFLAGS), 3773d0407baSopenharmony_ci GATE(HCLK_CIF, "hclk_cif", "lsclk_vio", 0, RK1808_CLKGATE_CON(4), 11, GFLAGS), 3783d0407baSopenharmony_ci GATE(PCLK_CSI2HOST, "pclk_csi2host", "lsclk_vio", 0, RK1808_CLKGATE_CON(4), 12, GFLAGS), 3793d0407baSopenharmony_ci 3803d0407baSopenharmony_ci COMPOSITE(0, "dclk_vopraw_src", mux_cpll_gpll_npll_p, 0, RK1808_CLKSEL_CON(5), 10, 2, MFLAGS, 0, 8, DFLAGS, 3813d0407baSopenharmony_ci RK1808_CLKGATE_CON(3), 1, GFLAGS), 3823d0407baSopenharmony_ci COMPOSITE_FRACMUX(0, "dclk_vopraw_frac", "dclk_vopraw_src", CLK_SET_RATE_PARENT, RK1808_CLKSEL_CON(6), 0, 3833d0407baSopenharmony_ci RK1808_CLKGATE_CON(3), 2, GFLAGS, &rk1808_dclk_vopraw_fracmux, RK1808_VOP_RAW_FRAC_MAX_PRATE), 3843d0407baSopenharmony_ci GATE(DCLK_VOPRAW, "dclk_vopraw", "dclk_vopraw_mux", 0, RK1808_CLKGATE_CON(3), 3, GFLAGS), 3853d0407baSopenharmony_ci 3863d0407baSopenharmony_ci COMPOSITE(0, "dclk_voplite_src", mux_cpll_gpll_npll_p, 0, RK1808_CLKSEL_CON(7), 10, 2, MFLAGS, 0, 8, DFLAGS, 3873d0407baSopenharmony_ci RK1808_CLKGATE_CON(3), 4, GFLAGS), 3883d0407baSopenharmony_ci COMPOSITE_FRACMUX(0, "dclk_voplite_frac", "dclk_voplite_src", CLK_SET_RATE_PARENT, RK1808_CLKSEL_CON(8), 0, 3893d0407baSopenharmony_ci RK1808_CLKGATE_CON(3), 5, GFLAGS, &rk1808_dclk_voplite_fracmux, RK1808_VOP_LITE_FRAC_MAX_PRATE), 3903d0407baSopenharmony_ci GATE(DCLK_VOPLITE, "dclk_voplite", "dclk_voplite_mux", 0, RK1808_CLKGATE_CON(3), 6, GFLAGS), 3913d0407baSopenharmony_ci 3923d0407baSopenharmony_ci COMPOSITE_NOMUX(SCLK_TXESC, "clk_txesc", "gpll", 0, RK1808_CLKSEL_CON(9), 0, 12, DFLAGS, RK1808_CLKGATE_CON(3), 7, 3933d0407baSopenharmony_ci GFLAGS), 3943d0407baSopenharmony_ci 3953d0407baSopenharmony_ci COMPOSITE(SCLK_RGA, "clk_rga", mux_gpll_cpll_npll_p, 0, RK1808_CLKSEL_CON(10), 6, 2, MFLAGS, 0, 5, DFLAGS, 3963d0407baSopenharmony_ci RK1808_CLKGATE_CON(3), 8, GFLAGS), 3973d0407baSopenharmony_ci 3983d0407baSopenharmony_ci COMPOSITE(SCLK_ISP, "clk_isp", mux_gpll_cpll_npll_p, 0, RK1808_CLKSEL_CON(10), 14, 2, MFLAGS, 8, 5, DFLAGS, 3993d0407baSopenharmony_ci RK1808_CLKGATE_CON(3), 10, GFLAGS), 4003d0407baSopenharmony_ci 4013d0407baSopenharmony_ci COMPOSITE(DCLK_CIF, "dclk_cif", mux_cpll_gpll_npll_p, 0, RK1808_CLKSEL_CON(11), 14, 2, MFLAGS, 8, 5, DFLAGS, 4023d0407baSopenharmony_ci RK1808_CLKGATE_CON(3), 11, GFLAGS), 4033d0407baSopenharmony_ci 4043d0407baSopenharmony_ci COMPOSITE(SCLK_CIF_OUT, "clk_cif_out", mux_24m_npll_gpll_usb480m_p, 0, RK1808_CLKSEL_CON(11), 6, 2, MFLAGS, 0, 6, 4053d0407baSopenharmony_ci DFLAGS, RK1808_CLKGATE_CON(3), 9, GFLAGS), 4063d0407baSopenharmony_ci 4073d0407baSopenharmony_ci /* 4083d0407baSopenharmony_ci * Clock-Architecture Diagram 7 4093d0407baSopenharmony_ci */ 4103d0407baSopenharmony_ci 4113d0407baSopenharmony_ci /* PD_PCIE */ 4123d0407baSopenharmony_ci COMPOSITE_NODIV(0, "clk_pcie_src", mux_gpll_cpll_p, 0, RK1808_CLKSEL_CON(12), 15, 1, MFLAGS, RK1808_CLKGATE_CON(5), 4133d0407baSopenharmony_ci 0, GFLAGS), 4143d0407baSopenharmony_ci DIV(HSCLK_PCIE, "hsclk_pcie", "clk_pcie_src", 0, RK1808_CLKSEL_CON(12), 0, 5, DFLAGS), 4153d0407baSopenharmony_ci DIV(LSCLK_PCIE, "lsclk_pcie", "clk_pcie_src", 0, RK1808_CLKSEL_CON(12), 8, 5, DFLAGS), 4163d0407baSopenharmony_ci GATE(0, "hsclk_pcie_niu", "hsclk_pcie", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(6), 0, GFLAGS), 4173d0407baSopenharmony_ci GATE(0, "lsclk_pcie_niu", "lsclk_pcie", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(6), 1, GFLAGS), 4183d0407baSopenharmony_ci GATE(0, "pclk_pcie_grf", "lsclk_pcie", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(6), 5, GFLAGS), 4193d0407baSopenharmony_ci GATE(ACLK_USB3OTG, "aclk_usb3otg", "hsclk_pcie", 0, RK1808_CLKGATE_CON(6), 6, GFLAGS), 4203d0407baSopenharmony_ci GATE(HCLK_HOST, "hclk_host", "lsclk_pcie", 0, RK1808_CLKGATE_CON(6), 7, GFLAGS), 4213d0407baSopenharmony_ci GATE(HCLK_HOST_ARB, "hclk_host_arb", "lsclk_pcie", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(6), 8, GFLAGS), 4223d0407baSopenharmony_ci 4233d0407baSopenharmony_ci COMPOSITE(ACLK_PCIE, "aclk_pcie", mux_gpll_cpll_p, 0, RK1808_CLKSEL_CON(15), 8, 1, MFLAGS, 0, 4, DFLAGS, 4243d0407baSopenharmony_ci RK1808_CLKGATE_CON(5), 5, GFLAGS), 4253d0407baSopenharmony_ci DIV(0, "pclk_pcie_pre", "aclk_pcie", 0, RK1808_CLKSEL_CON(15), 4, 4, DFLAGS), 4263d0407baSopenharmony_ci GATE(0, "aclk_pcie_niu", "aclk_pcie", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(6), 10, GFLAGS), 4273d0407baSopenharmony_ci GATE(ACLK_PCIE_MST, "aclk_pcie_mst", "aclk_pcie", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(6), 2, GFLAGS), 4283d0407baSopenharmony_ci GATE(ACLK_PCIE_SLV, "aclk_pcie_slv", "aclk_pcie", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(6), 3, GFLAGS), 4293d0407baSopenharmony_ci GATE(0, "pclk_pcie_niu", "pclk_pcie_pre", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(6), 11, GFLAGS), 4303d0407baSopenharmony_ci GATE(0, "pclk_pcie_dbi", "pclk_pcie_pre", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(6), 4, GFLAGS), 4313d0407baSopenharmony_ci GATE(PCLK_PCIE, "pclk_pcie", "pclk_pcie_pre", 0, RK1808_CLKGATE_CON(6), 9, GFLAGS), 4323d0407baSopenharmony_ci 4333d0407baSopenharmony_ci COMPOSITE(0, "clk_pcie_aux_src", mux_cpll_gpll_npll_p, 0, RK1808_CLKSEL_CON(14), 8, 2, MFLAGS, 0, 7, DFLAGS, 4343d0407baSopenharmony_ci RK1808_CLKGATE_CON(5), 3, GFLAGS), 4353d0407baSopenharmony_ci COMPOSITE_NODIV(SCLK_PCIE_AUX, "clk_pcie_aux", mux_pcie_aux_p, CLK_SET_RATE_PARENT, RK1808_CLKSEL_CON(14), 12, 1, 4363d0407baSopenharmony_ci MFLAGS, RK1808_CLKGATE_CON(5), 4, GFLAGS), 4373d0407baSopenharmony_ci 4383d0407baSopenharmony_ci GATE(SCLK_USB3_OTG0_REF, "clk_usb3_otg0_ref", "xin24m", 0, RK1808_CLKGATE_CON(5), 1, GFLAGS), 4393d0407baSopenharmony_ci 4403d0407baSopenharmony_ci COMPOSITE(SCLK_USB3_OTG0_SUSPEND, "clk_usb3_otg0_suspend", mux_usb3_otg0_suspend_p, 0, RK1808_CLKSEL_CON(13), 12, 1, 4413d0407baSopenharmony_ci MFLAGS, 0, 10, DFLAGS, RK1808_CLKGATE_CON(5), 2, GFLAGS), 4423d0407baSopenharmony_ci 4433d0407baSopenharmony_ci /* 4443d0407baSopenharmony_ci * Clock-Architecture Diagram 8 4453d0407baSopenharmony_ci */ 4463d0407baSopenharmony_ci 4473d0407baSopenharmony_ci /* PD_PHP */ 4483d0407baSopenharmony_ci 4493d0407baSopenharmony_ci COMPOSITE_NODIV(0, "clk_peri_src", mux_gpll_cpll_p, CLK_IS_CRITICAL, RK1808_CLKSEL_CON(19), 15, 1, MFLAGS, 4503d0407baSopenharmony_ci RK1808_CLKGATE_CON(8), 0, GFLAGS), 4513d0407baSopenharmony_ci COMPOSITE_NOMUX(MSCLK_PERI, "msclk_peri", "clk_peri_src", CLK_IS_CRITICAL, RK1808_CLKSEL_CON(19), 0, 5, DFLAGS, 4523d0407baSopenharmony_ci RK1808_CLKGATE_CON(8), 1, GFLAGS), 4533d0407baSopenharmony_ci COMPOSITE_NOMUX(LSCLK_PERI, "lsclk_peri", "clk_peri_src", CLK_IS_CRITICAL, RK1808_CLKSEL_CON(19), 8, 5, DFLAGS, 4543d0407baSopenharmony_ci RK1808_CLKGATE_CON(8), 2, GFLAGS), 4553d0407baSopenharmony_ci GATE(0, "msclk_peri_niu", "msclk_peri", CLK_IS_CRITICAL, RK1808_CLKGATE_CON(8), 3, GFLAGS), 4563d0407baSopenharmony_ci GATE(0, "lsclk_peri_niu", "lsclk_peri", CLK_IS_CRITICAL, RK1808_CLKGATE_CON(8), 4, GFLAGS), 4573d0407baSopenharmony_ci 4583d0407baSopenharmony_ci /* PD_MMC */ 4593d0407baSopenharmony_ci 4603d0407baSopenharmony_ci GATE(0, "hclk_mmc_sfc", "msclk_peri", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(9), 0, GFLAGS), 4613d0407baSopenharmony_ci GATE(0, "hclk_mmc_sfc_niu", "hclk_mmc_sfc", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(9), 11, GFLAGS), 4623d0407baSopenharmony_ci GATE(HCLK_EMMC, "hclk_emmc", "hclk_mmc_sfc", 0, RK1808_CLKGATE_CON(9), 12, GFLAGS), 4633d0407baSopenharmony_ci GATE(HCLK_SFC, "hclk_sfc", "hclk_mmc_sfc", 0, RK1808_CLKGATE_CON(9), 13, GFLAGS), 4643d0407baSopenharmony_ci 4653d0407baSopenharmony_ci COMPOSITE(SCLK_SDIO_DIV, "clk_sdio_div", mux_gpll_cpll_npll_24m_p, CLK_IGNORE_UNUSED, RK1808_CLKSEL_CON(22), 14, 2, 4663d0407baSopenharmony_ci MFLAGS, 0, 8, DFLAGS, RK1808_CLKGATE_CON(9), 1, GFLAGS), 4673d0407baSopenharmony_ci COMPOSITE_DIV_OFFSET(SCLK_SDIO_DIV50, "clk_sdio_div50", mux_gpll_cpll_npll_24m_p, CLK_IGNORE_UNUSED, 4683d0407baSopenharmony_ci RK1808_CLKSEL_CON(22), 14, 2, MFLAGS, RK1808_CLKSEL_CON(23), 0, 8, DFLAGS, 4693d0407baSopenharmony_ci RK1808_CLKGATE_CON(9), 2, GFLAGS), 4703d0407baSopenharmony_ci COMPOSITE_NODIV(SCLK_SDIO, "clk_sdio", mux_sdio_p, CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 4713d0407baSopenharmony_ci RK1808_CLKSEL_CON(23), 15, 1, MFLAGS, RK1808_CLKGATE_CON(9), 3, GFLAGS), 4723d0407baSopenharmony_ci 4733d0407baSopenharmony_ci MMC(SCLK_SDIO_DRV, "sdio_drv", "clk_sdio", RK1808_SDIO_CON0, 1), 4743d0407baSopenharmony_ci MMC(SCLK_SDIO_SAMPLE, "sdio_sample", "clk_sdio", RK1808_SDIO_CON1, 1), 4753d0407baSopenharmony_ci 4763d0407baSopenharmony_ci COMPOSITE(SCLK_EMMC_DIV, "clk_emmc_div", mux_gpll_cpll_npll_24m_p, CLK_IGNORE_UNUSED, RK1808_CLKSEL_CON(24), 14, 2, 4773d0407baSopenharmony_ci MFLAGS, 0, 8, DFLAGS, RK1808_CLKGATE_CON(9), 4, GFLAGS), 4783d0407baSopenharmony_ci COMPOSITE_DIV_OFFSET(SCLK_EMMC_DIV50, "clk_emmc_div50", mux_gpll_cpll_npll_24m_p, CLK_IGNORE_UNUSED, 4793d0407baSopenharmony_ci RK1808_CLKSEL_CON(24), 14, 2, MFLAGS, RK1808_CLKSEL_CON(25), 0, 8, DFLAGS, 4803d0407baSopenharmony_ci RK1808_CLKGATE_CON(9), 5, GFLAGS), 4813d0407baSopenharmony_ci COMPOSITE_NODIV(SCLK_EMMC, "clk_emmc", mux_emmc_p, CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 4823d0407baSopenharmony_ci RK1808_CLKSEL_CON(25), 15, 1, MFLAGS, RK1808_CLKGATE_CON(9), 6, GFLAGS), 4833d0407baSopenharmony_ci MMC(SCLK_EMMC_DRV, "emmc_drv", "clk_emmc", RK1808_EMMC_CON0, 1), 4843d0407baSopenharmony_ci MMC(SCLK_EMMC_SAMPLE, "emmc_sample", "clk_emmc", RK1808_EMMC_CON1, 1), 4853d0407baSopenharmony_ci 4863d0407baSopenharmony_ci COMPOSITE(SCLK_SDMMC_DIV, "clk_sdmmc_div", mux_gpll_cpll_npll_24m_p, CLK_IGNORE_UNUSED, RK1808_CLKSEL_CON(20), 14, 4873d0407baSopenharmony_ci 2, MFLAGS, 0, 8, DFLAGS, RK1808_CLKGATE_CON(9), 7, GFLAGS), 4883d0407baSopenharmony_ci COMPOSITE_DIV_OFFSET(SCLK_SDMMC_DIV50, "clk_sdmmc_div50", mux_gpll_cpll_npll_24m_p, CLK_IGNORE_UNUSED, 4893d0407baSopenharmony_ci RK1808_CLKSEL_CON(20), 14, 2, MFLAGS, RK1808_CLKSEL_CON(21), 0, 8, DFLAGS, 4903d0407baSopenharmony_ci RK1808_CLKGATE_CON(9), 8, GFLAGS), 4913d0407baSopenharmony_ci COMPOSITE_NODIV(SCLK_SDMMC, "clk_sdmmc", mux_sdmmc_p, CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 4923d0407baSopenharmony_ci RK1808_CLKSEL_CON(21), 15, 1, MFLAGS, RK1808_CLKGATE_CON(9), 9, GFLAGS), 4933d0407baSopenharmony_ci MMC(SCLK_SDMMC_DRV, "sdmmc_drv", "clk_sdmmc", RK1808_SDMMC_CON0, 1), 4943d0407baSopenharmony_ci MMC(SCLK_SDMMC_SAMPLE, "sdmmc_sample", "clk_sdmmc", RK1808_SDMMC_CON1, 1), 4953d0407baSopenharmony_ci 4963d0407baSopenharmony_ci COMPOSITE(SCLK_SFC, "clk_sfc", mux_gpll_cpll_p, 0, RK1808_CLKSEL_CON(26), 7, 1, MFLAGS, 0, 7, DFLAGS, 4973d0407baSopenharmony_ci RK1808_CLKGATE_CON(9), 10, GFLAGS), 4983d0407baSopenharmony_ci 4993d0407baSopenharmony_ci /* PD_MAC */ 5003d0407baSopenharmony_ci 5013d0407baSopenharmony_ci GATE(0, "pclk_sd_gmac", "lsclk_peri", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(10), 2, GFLAGS), 5023d0407baSopenharmony_ci GATE(0, "aclk_sd_gmac", "msclk_peri", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(10), 0, GFLAGS), 5033d0407baSopenharmony_ci GATE(0, "hclk_sd_gmac", "msclk_peri", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(10), 1, GFLAGS), 5043d0407baSopenharmony_ci GATE(0, "pclk_gmac_niu", "pclk_sd_gmac", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(10), 10, GFLAGS), 5053d0407baSopenharmony_ci GATE(PCLK_GMAC, "pclk_gmac", "pclk_sd_gmac", 0, RK1808_CLKGATE_CON(10), 12, GFLAGS), 5063d0407baSopenharmony_ci GATE(0, "aclk_gmac_niu", "aclk_sd_gmac", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(10), 8, GFLAGS), 5073d0407baSopenharmony_ci GATE(ACLK_GMAC, "aclk_gmac", "aclk_sd_gmac", 0, RK1808_CLKGATE_CON(10), 11, GFLAGS), 5083d0407baSopenharmony_ci GATE(0, "hclk_gmac_niu", "hclk_sd_gmac", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(10), 9, GFLAGS), 5093d0407baSopenharmony_ci GATE(HCLK_SDIO, "hclk_sdio", "hclk_sd_gmac", 0, RK1808_CLKGATE_CON(10), 13, GFLAGS), 5103d0407baSopenharmony_ci GATE(HCLK_SDMMC, "hclk_sdmmc", "hclk_sd_gmac", 0, RK1808_CLKGATE_CON(10), 14, GFLAGS), 5113d0407baSopenharmony_ci 5123d0407baSopenharmony_ci COMPOSITE(SCLK_GMAC_OUT, "clk_gmac_out", mux_cpll_npll_ppll_p, 0, RK1808_CLKSEL_CON(18), 14, 2, MFLAGS, 8, 5, 5133d0407baSopenharmony_ci DFLAGS, RK1808_CLKGATE_CON(10), 15, GFLAGS), 5143d0407baSopenharmony_ci 5153d0407baSopenharmony_ci COMPOSITE(SCLK_GMAC_SRC, "clk_gmac_src", mux_cpll_npll_ppll_p, 0, RK1808_CLKSEL_CON(26), 14, 2, MFLAGS, 8, 5, 5163d0407baSopenharmony_ci DFLAGS, RK1808_CLKGATE_CON(10), 3, GFLAGS), 5173d0407baSopenharmony_ci MUX(SCLK_GMAC, "clk_gmac", mux_gmac_p, CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, RK1808_CLKSEL_CON(27), 0, 1, 5183d0407baSopenharmony_ci MFLAGS), 5193d0407baSopenharmony_ci GATE(SCLK_GMAC_REF, "clk_gmac_ref", "clk_gmac", 0, RK1808_CLKGATE_CON(10), 4, GFLAGS), 5203d0407baSopenharmony_ci GATE(0, "clk_gmac_tx_src", "clk_gmac", 0, RK1808_CLKGATE_CON(10), 7, GFLAGS), 5213d0407baSopenharmony_ci GATE(0, "clk_gmac_rx_src", "clk_gmac", 0, RK1808_CLKGATE_CON(10), 6, GFLAGS), 5223d0407baSopenharmony_ci GATE(SCLK_GMAC_REFOUT, "clk_gmac_refout", "clk_gmac", 0, RK1808_CLKGATE_CON(10), 5, GFLAGS), 5233d0407baSopenharmony_ci FACTOR(0, "clk_gmac_tx_div5", "clk_gmac_tx_src", 0, 1, 5), 5243d0407baSopenharmony_ci FACTOR(0, "clk_gmac_tx_div50", "clk_gmac_tx_src", 0, 1, 50), 5253d0407baSopenharmony_ci FACTOR(0, "clk_gmac_rx_div2", "clk_gmac_rx_src", 0, 1, 2), 5263d0407baSopenharmony_ci FACTOR(0, "clk_gmac_rx_div20", "clk_gmac_rx_src", 0, 1, 20), 5273d0407baSopenharmony_ci MUX(SCLK_GMAC_RGMII_SPEED, "clk_gmac_rgmii_speed", mux_gmac_rgmii_speed_p, CLK_SET_RATE_PARENT, 5283d0407baSopenharmony_ci RK1808_CLKSEL_CON(27), 2, 2, MFLAGS), 5293d0407baSopenharmony_ci MUX(SCLK_GMAC_RMII_SPEED, "clk_gmac_rmii_speed", mux_gmac_rmii_speed_p, CLK_SET_RATE_PARENT, RK1808_CLKSEL_CON(27), 5303d0407baSopenharmony_ci 1, 1, MFLAGS), 5313d0407baSopenharmony_ci MUX(SCLK_GMAC_RX_TX, "clk_gmac_rx_tx", mux_gmac_rx_tx_p, CLK_SET_RATE_PARENT, RK1808_CLKSEL_CON(27), 4, 1, MFLAGS), 5323d0407baSopenharmony_ci 5333d0407baSopenharmony_ci /* 5343d0407baSopenharmony_ci * Clock-Architecture Diagram 9 5353d0407baSopenharmony_ci */ 5363d0407baSopenharmony_ci 5373d0407baSopenharmony_ci /* PD_BUS */ 5383d0407baSopenharmony_ci 5393d0407baSopenharmony_ci COMPOSITE_NODIV(0, "clk_bus_src", mux_gpll_cpll_p, CLK_IS_CRITICAL, RK1808_CLKSEL_CON(27), 15, 1, MFLAGS, 5403d0407baSopenharmony_ci RK1808_CLKGATE_CON(11), 0, GFLAGS), 5413d0407baSopenharmony_ci COMPOSITE_NOMUX(HSCLK_BUS_PRE, "hsclk_bus_pre", "clk_bus_src", CLK_IS_CRITICAL, RK1808_CLKSEL_CON(27), 8, 5, DFLAGS, 5423d0407baSopenharmony_ci RK1808_CLKGATE_CON(11), 1, GFLAGS), 5433d0407baSopenharmony_ci COMPOSITE_NOMUX(MSCLK_BUS_PRE, "msclk_bus_pre", "clk_bus_src", CLK_IS_CRITICAL, RK1808_CLKSEL_CON(28), 0, 5, DFLAGS, 5443d0407baSopenharmony_ci RK1808_CLKGATE_CON(11), 2, GFLAGS), 5453d0407baSopenharmony_ci COMPOSITE_NOMUX(LSCLK_BUS_PRE, "lsclk_bus_pre", "clk_bus_src", CLK_IS_CRITICAL, RK1808_CLKSEL_CON(28), 8, 5, DFLAGS, 5463d0407baSopenharmony_ci RK1808_CLKGATE_CON(11), 3, GFLAGS), 5473d0407baSopenharmony_ci GATE(0, "hsclk_bus_niu", "hsclk_bus_pre", CLK_IS_CRITICAL, RK1808_CLKGATE_CON(15), 0, GFLAGS), 5483d0407baSopenharmony_ci GATE(0, "msclk_bus_niu", "msclk_bus_pre", CLK_IS_CRITICAL, RK1808_CLKGATE_CON(15), 1, GFLAGS), 5493d0407baSopenharmony_ci GATE(0, "msclk_sub", "msclk_bus_pre", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(15), 2, GFLAGS), 5503d0407baSopenharmony_ci GATE(ACLK_DMAC, "aclk_dmac", "msclk_bus_pre", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(14), 15, GFLAGS), 5513d0407baSopenharmony_ci GATE(HCLK_ROM, "hclk_rom", "msclk_bus_pre", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(15), 4, GFLAGS), 5523d0407baSopenharmony_ci GATE(ACLK_CRYPTO, "aclk_crypto", "msclk_bus_pre", 0, RK1808_CLKGATE_CON(15), 5, GFLAGS), 5533d0407baSopenharmony_ci GATE(HCLK_CRYPTO, "hclk_crypto", "msclk_bus_pre", 0, RK1808_CLKGATE_CON(15), 6, GFLAGS), 5543d0407baSopenharmony_ci GATE(ACLK_DCF, "aclk_dcf", "msclk_bus_pre", 0, RK1808_CLKGATE_CON(15), 7, GFLAGS), 5553d0407baSopenharmony_ci GATE(0, "lsclk_bus_niu", "lsclk_bus_pre", CLK_IS_CRITICAL, RK1808_CLKGATE_CON(15), 3, GFLAGS), 5563d0407baSopenharmony_ci GATE(PCLK_DCF, "pclk_dcf", "lsclk_bus_pre", 0, RK1808_CLKGATE_CON(15), 8, GFLAGS), 5573d0407baSopenharmony_ci GATE(PCLK_UART1, "pclk_uart1", "lsclk_bus_pre", 0, RK1808_CLKGATE_CON(15), 9, GFLAGS), 5583d0407baSopenharmony_ci GATE(PCLK_UART2, "pclk_uart2", "lsclk_bus_pre", 0, RK1808_CLKGATE_CON(15), 10, GFLAGS), 5593d0407baSopenharmony_ci GATE(PCLK_UART3, "pclk_uart3", "lsclk_bus_pre", 0, RK1808_CLKGATE_CON(15), 11, GFLAGS), 5603d0407baSopenharmony_ci GATE(PCLK_UART4, "pclk_uart4", "lsclk_bus_pre", 0, RK1808_CLKGATE_CON(15), 12, GFLAGS), 5613d0407baSopenharmony_ci GATE(PCLK_UART5, "pclk_uart5", "lsclk_bus_pre", 0, RK1808_CLKGATE_CON(15), 13, GFLAGS), 5623d0407baSopenharmony_ci GATE(PCLK_UART6, "pclk_uart6", "lsclk_bus_pre", 0, RK1808_CLKGATE_CON(15), 14, GFLAGS), 5633d0407baSopenharmony_ci GATE(PCLK_UART7, "pclk_uart7", "lsclk_bus_pre", 0, RK1808_CLKGATE_CON(15), 15, GFLAGS), 5643d0407baSopenharmony_ci GATE(PCLK_I2C1, "pclk_i2c1", "lsclk_bus_pre", 0, RK1808_CLKGATE_CON(16), 0, GFLAGS), 5653d0407baSopenharmony_ci GATE(PCLK_I2C2, "pclk_i2c2", "lsclk_bus_pre", 0, RK1808_CLKGATE_CON(16), 1, GFLAGS), 5663d0407baSopenharmony_ci GATE(PCLK_I2C3, "pclk_i2c3", "lsclk_bus_pre", 0, RK1808_CLKGATE_CON(16), 2, GFLAGS), 5673d0407baSopenharmony_ci GATE(PCLK_I2C4, "pclk_i2c4", "lsclk_bus_pre", 0, RK1808_CLKGATE_CON(17), 4, GFLAGS), 5683d0407baSopenharmony_ci GATE(PCLK_I2C5, "pclk_i2c5", "lsclk_bus_pre", 0, RK1808_CLKGATE_CON(17), 5, GFLAGS), 5693d0407baSopenharmony_ci GATE(PCLK_SPI0, "pclk_spi0", "lsclk_bus_pre", 0, RK1808_CLKGATE_CON(16), 3, GFLAGS), 5703d0407baSopenharmony_ci GATE(PCLK_SPI1, "pclk_spi1", "lsclk_bus_pre", 0, RK1808_CLKGATE_CON(16), 4, GFLAGS), 5713d0407baSopenharmony_ci GATE(PCLK_SPI2, "pclk_spi2", "lsclk_bus_pre", 0, RK1808_CLKGATE_CON(16), 5, GFLAGS), 5723d0407baSopenharmony_ci GATE(PCLK_TSADC, "pclk_tsadc", "lsclk_bus_pre", 0, RK1808_CLKGATE_CON(16), 9, GFLAGS), 5733d0407baSopenharmony_ci GATE(PCLK_SARADC, "pclk_saradc", "lsclk_bus_pre", 0, RK1808_CLKGATE_CON(16), 10, GFLAGS), 5743d0407baSopenharmony_ci GATE(PCLK_EFUSE, "pclk_efuse", "lsclk_bus_pre", 0, RK1808_CLKGATE_CON(16), 11, GFLAGS), 5753d0407baSopenharmony_ci GATE(PCLK_GPIO1, "pclk_gpio1", "lsclk_bus_pre", 0, RK1808_CLKGATE_CON(16), 12, GFLAGS), 5763d0407baSopenharmony_ci GATE(PCLK_GPIO2, "pclk_gpio2", "lsclk_bus_pre", 0, RK1808_CLKGATE_CON(16), 13, GFLAGS), 5773d0407baSopenharmony_ci GATE(PCLK_GPIO3, "pclk_gpio3", "lsclk_bus_pre", 0, RK1808_CLKGATE_CON(16), 14, GFLAGS), 5783d0407baSopenharmony_ci GATE(PCLK_GPIO4, "pclk_gpio4", "lsclk_bus_pre", 0, RK1808_CLKGATE_CON(16), 15, GFLAGS), 5793d0407baSopenharmony_ci GATE(PCLK_PWM0, "pclk_pwm0", "lsclk_bus_pre", 0, RK1808_CLKGATE_CON(16), 6, GFLAGS), 5803d0407baSopenharmony_ci GATE(PCLK_PWM1, "pclk_pwm1", "lsclk_bus_pre", 0, RK1808_CLKGATE_CON(16), 7, GFLAGS), 5813d0407baSopenharmony_ci GATE(PCLK_PWM2, "pclk_pwm2", "lsclk_bus_pre", 0, RK1808_CLKGATE_CON(16), 8, GFLAGS), 5823d0407baSopenharmony_ci GATE(PCLK_TIMER, "pclk_timer", "lsclk_bus_pre", 0, RK1808_CLKGATE_CON(17), 0, GFLAGS), 5833d0407baSopenharmony_ci GATE(PCLK_WDT, "pclk_wdt", "lsclk_bus_pre", 0, RK1808_CLKGATE_CON(17), 1, GFLAGS), 5843d0407baSopenharmony_ci GATE(0, "pclk_grf", "lsclk_bus_pre", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(17), 2, GFLAGS), 5853d0407baSopenharmony_ci GATE(0, "pclk_sgrf", "lsclk_bus_pre", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(17), 3, GFLAGS), 5863d0407baSopenharmony_ci GATE(0, "hclk_audio_pre", "msclk_bus_pre", 0, RK1808_CLKGATE_CON(17), 8, GFLAGS), 5873d0407baSopenharmony_ci GATE(0, "pclk_top_pre", "lsclk_bus_pre", CLK_IS_CRITICAL, RK1808_CLKGATE_CON(11), 4, GFLAGS), 5883d0407baSopenharmony_ci 5893d0407baSopenharmony_ci COMPOSITE(SCLK_CRYPTO, "clk_crypto", mux_gpll_cpll_p, 0, RK1808_CLKSEL_CON(29), 7, 1, MFLAGS, 0, 5, DFLAGS, 5903d0407baSopenharmony_ci RK1808_CLKGATE_CON(11), 5, GFLAGS), 5913d0407baSopenharmony_ci COMPOSITE(SCLK_CRYPTO_APK, "clk_crypto_apk", mux_gpll_cpll_p, 0, RK1808_CLKSEL_CON(29), 15, 1, MFLAGS, 8, 5, DFLAGS, 5923d0407baSopenharmony_ci RK1808_CLKGATE_CON(11), 6, GFLAGS), 5933d0407baSopenharmony_ci 5943d0407baSopenharmony_ci COMPOSITE(0, "clk_uart1_src", mux_gpll_usb480m_cpll_npll_p, 0, RK1808_CLKSEL_CON(38), 14, 2, MFLAGS, 0, 7, DFLAGS, 5953d0407baSopenharmony_ci RK1808_CLKGATE_CON(11), 8, GFLAGS), 5963d0407baSopenharmony_ci COMPOSITE_NOMUX_HALFDIV(0, "clk_uart1_np5", "clk_uart1_src", 0, RK1808_CLKSEL_CON(39), 0, 7, DFLAGS, 5973d0407baSopenharmony_ci RK1808_CLKGATE_CON(11), 9, GFLAGS), 5983d0407baSopenharmony_ci COMPOSITE_FRACMUX(0, "clk_uart1_frac", "clk_uart1_src", CLK_SET_RATE_PARENT, RK1808_CLKSEL_CON(40), 0, 5993d0407baSopenharmony_ci RK1808_CLKGATE_CON(11), 10, GFLAGS, &rk1808_uart1_fracmux, RK1808_UART_FRAC_MAX_PRATE), 6003d0407baSopenharmony_ci GATE(SCLK_UART1, "clk_uart1", "clk_uart1_mux", 0, RK1808_CLKGATE_CON(11), 11, GFLAGS), 6013d0407baSopenharmony_ci 6023d0407baSopenharmony_ci COMPOSITE(0, "clk_uart2_src", mux_gpll_usb480m_cpll_npll_p, 0, RK1808_CLKSEL_CON(41), 14, 2, MFLAGS, 0, 7, DFLAGS, 6033d0407baSopenharmony_ci RK1808_CLKGATE_CON(11), 12, GFLAGS), 6043d0407baSopenharmony_ci COMPOSITE_NOMUX_HALFDIV(0, "clk_uart2_np5", "clk_uart2_src", 0, RK1808_CLKSEL_CON(42), 0, 7, DFLAGS, 6053d0407baSopenharmony_ci RK1808_CLKGATE_CON(11), 13, GFLAGS), 6063d0407baSopenharmony_ci COMPOSITE_FRACMUX(0, "clk_uart2_frac", "clk_uart2_src", CLK_SET_RATE_PARENT, RK1808_CLKSEL_CON(43), 0, 6073d0407baSopenharmony_ci RK1808_CLKGATE_CON(11), 14, GFLAGS, &rk1808_uart2_fracmux, RK1808_UART_FRAC_MAX_PRATE), 6083d0407baSopenharmony_ci GATE(SCLK_UART2, "clk_uart2", "clk_uart2_mux", 0, RK1808_CLKGATE_CON(11), 15, GFLAGS), 6093d0407baSopenharmony_ci 6103d0407baSopenharmony_ci COMPOSITE(0, "clk_uart3_src", mux_gpll_usb480m_cpll_npll_p, 0, RK1808_CLKSEL_CON(44), 14, 2, MFLAGS, 0, 7, DFLAGS, 6113d0407baSopenharmony_ci RK1808_CLKGATE_CON(12), 0, GFLAGS), 6123d0407baSopenharmony_ci COMPOSITE_NOMUX_HALFDIV(0, "clk_uart3_np5", "clk_uart3_src", 0, RK1808_CLKSEL_CON(45), 0, 7, DFLAGS, 6133d0407baSopenharmony_ci RK1808_CLKGATE_CON(12), 1, GFLAGS), 6143d0407baSopenharmony_ci COMPOSITE_FRACMUX(0, "clk_uart3_frac", "clk_uart3_src", CLK_SET_RATE_PARENT, RK1808_CLKSEL_CON(46), 0, 6153d0407baSopenharmony_ci RK1808_CLKGATE_CON(12), 2, GFLAGS, &rk1808_uart3_fracmux, RK1808_UART_FRAC_MAX_PRATE), 6163d0407baSopenharmony_ci GATE(SCLK_UART3, "clk_uart3", "clk_uart3_mux", 0, RK1808_CLKGATE_CON(12), 3, GFLAGS), 6173d0407baSopenharmony_ci 6183d0407baSopenharmony_ci COMPOSITE(0, "clk_uart4_src", mux_gpll_usb480m_cpll_npll_p, 0, RK1808_CLKSEL_CON(47), 14, 2, MFLAGS, 0, 7, DFLAGS, 6193d0407baSopenharmony_ci RK1808_CLKGATE_CON(12), 4, GFLAGS), 6203d0407baSopenharmony_ci COMPOSITE_NOMUX_HALFDIV(0, "clk_uart4_np5", "clk_uart4_src", 0, RK1808_CLKSEL_CON(48), 0, 7, DFLAGS, 6213d0407baSopenharmony_ci RK1808_CLKGATE_CON(12), 5, GFLAGS), 6223d0407baSopenharmony_ci COMPOSITE_FRACMUX(0, "clk_uart4_frac", "clk_uart4_src", CLK_SET_RATE_PARENT, RK1808_CLKSEL_CON(49), 0, 6233d0407baSopenharmony_ci RK1808_CLKGATE_CON(12), 6, GFLAGS, &rk1808_uart4_fracmux, RK1808_UART_FRAC_MAX_PRATE), 6243d0407baSopenharmony_ci GATE(SCLK_UART4, "clk_uart4", "clk_uart4_mux", 0, RK1808_CLKGATE_CON(12), 7, GFLAGS), 6253d0407baSopenharmony_ci 6263d0407baSopenharmony_ci COMPOSITE(0, "clk_uart5_src", mux_gpll_usb480m_cpll_npll_p, 0, RK1808_CLKSEL_CON(50), 14, 2, MFLAGS, 0, 7, DFLAGS, 6273d0407baSopenharmony_ci RK1808_CLKGATE_CON(12), 8, GFLAGS), 6283d0407baSopenharmony_ci COMPOSITE_NOMUX_HALFDIV(0, "clk_uart5_np5", "clk_uart5_src", 0, RK1808_CLKSEL_CON(51), 0, 7, DFLAGS, 6293d0407baSopenharmony_ci RK1808_CLKGATE_CON(12), 9, GFLAGS), 6303d0407baSopenharmony_ci COMPOSITE_FRACMUX(0, "clk_uart5_frac", "clk_uart5_src", CLK_SET_RATE_PARENT, RK1808_CLKSEL_CON(52), 0, 6313d0407baSopenharmony_ci RK1808_CLKGATE_CON(12), 10, GFLAGS, &rk1808_uart5_fracmux, RK1808_UART_FRAC_MAX_PRATE), 6323d0407baSopenharmony_ci GATE(SCLK_UART5, "clk_uart5", "clk_uart5_mux", 0, RK1808_CLKGATE_CON(12), 11, GFLAGS), 6333d0407baSopenharmony_ci 6343d0407baSopenharmony_ci COMPOSITE(0, "clk_uart6_src", mux_gpll_usb480m_cpll_npll_p, 0, RK1808_CLKSEL_CON(53), 14, 2, MFLAGS, 0, 7, DFLAGS, 6353d0407baSopenharmony_ci RK1808_CLKGATE_CON(12), 12, GFLAGS), 6363d0407baSopenharmony_ci COMPOSITE_NOMUX_HALFDIV(0, "clk_uart6_np5", "clk_uart6_src", 0, RK1808_CLKSEL_CON(54), 0, 7, DFLAGS, 6373d0407baSopenharmony_ci RK1808_CLKGATE_CON(12), 13, GFLAGS), 6383d0407baSopenharmony_ci COMPOSITE_FRACMUX(0, "clk_uart6_frac", "clk_uart6_src", CLK_SET_RATE_PARENT, RK1808_CLKSEL_CON(55), 0, 6393d0407baSopenharmony_ci RK1808_CLKGATE_CON(12), 14, GFLAGS, &rk1808_uart6_fracmux, RK1808_UART_FRAC_MAX_PRATE), 6403d0407baSopenharmony_ci GATE(SCLK_UART6, "clk_uart6", "clk_uart6_mux", 0, RK1808_CLKGATE_CON(12), 15, GFLAGS), 6413d0407baSopenharmony_ci 6423d0407baSopenharmony_ci COMPOSITE(0, "clk_uart7_src", mux_gpll_usb480m_cpll_npll_p, 0, RK1808_CLKSEL_CON(56), 14, 2, MFLAGS, 0, 7, DFLAGS, 6433d0407baSopenharmony_ci RK1808_CLKGATE_CON(13), 0, GFLAGS), 6443d0407baSopenharmony_ci COMPOSITE_NOMUX_HALFDIV(0, "clk_uart7_np5", "clk_uart7_src", 0, RK1808_CLKSEL_CON(57), 0, 7, DFLAGS, 6453d0407baSopenharmony_ci RK1808_CLKGATE_CON(13), 1, GFLAGS), 6463d0407baSopenharmony_ci COMPOSITE_FRACMUX(0, "clk_uart7_frac", "clk_uart7_src", CLK_SET_RATE_PARENT, RK1808_CLKSEL_CON(58), 0, 6473d0407baSopenharmony_ci RK1808_CLKGATE_CON(13), 2, GFLAGS, &rk1808_uart7_fracmux, RK1808_UART_FRAC_MAX_PRATE), 6483d0407baSopenharmony_ci GATE(SCLK_UART7, "clk_uart7", "clk_uart7_mux", 0, RK1808_CLKGATE_CON(13), 3, GFLAGS), 6493d0407baSopenharmony_ci 6503d0407baSopenharmony_ci COMPOSITE(SCLK_I2C1, "clk_i2c1", mux_gpll_xin24m_p, 0, RK1808_CLKSEL_CON(59), 7, 1, MFLAGS, 0, 7, DFLAGS, 6513d0407baSopenharmony_ci RK1808_CLKGATE_CON(13), 4, GFLAGS), 6523d0407baSopenharmony_ci COMPOSITE(SCLK_I2C2, "clk_i2c2", mux_gpll_xin24m_p, 0, RK1808_CLKSEL_CON(59), 15, 1, MFLAGS, 8, 7, DFLAGS, 6533d0407baSopenharmony_ci RK1808_CLKGATE_CON(13), 5, GFLAGS), 6543d0407baSopenharmony_ci COMPOSITE(SCLK_I2C3, "clk_i2c3", mux_gpll_xin24m_p, 0, RK1808_CLKSEL_CON(60), 7, 1, MFLAGS, 0, 7, DFLAGS, 6553d0407baSopenharmony_ci RK1808_CLKGATE_CON(13), 6, GFLAGS), 6563d0407baSopenharmony_ci COMPOSITE(SCLK_I2C4, "clk_i2c4", mux_gpll_xin24m_p, 0, RK1808_CLKSEL_CON(71), 7, 1, MFLAGS, 0, 7, DFLAGS, 6573d0407baSopenharmony_ci RK1808_CLKGATE_CON(14), 6, GFLAGS), 6583d0407baSopenharmony_ci COMPOSITE(SCLK_I2C5, "clk_i2c5", mux_gpll_xin24m_p, 0, RK1808_CLKSEL_CON(71), 15, 1, MFLAGS, 8, 7, DFLAGS, 6593d0407baSopenharmony_ci RK1808_CLKGATE_CON(14), 7, GFLAGS), 6603d0407baSopenharmony_ci 6613d0407baSopenharmony_ci COMPOSITE(SCLK_SPI0, "clk_spi0", mux_gpll_xin24m_p, 0, RK1808_CLKSEL_CON(60), 15, 1, MFLAGS, 8, 7, DFLAGS, 6623d0407baSopenharmony_ci RK1808_CLKGATE_CON(13), 7, GFLAGS), 6633d0407baSopenharmony_ci COMPOSITE(SCLK_SPI1, "clk_spi1", mux_gpll_xin24m_p, 0, RK1808_CLKSEL_CON(61), 7, 1, MFLAGS, 0, 7, DFLAGS, 6643d0407baSopenharmony_ci RK1808_CLKGATE_CON(13), 8, GFLAGS), 6653d0407baSopenharmony_ci COMPOSITE(SCLK_SPI2, "clk_spi2", mux_gpll_xin24m_p, 0, RK1808_CLKSEL_CON(61), 15, 1, MFLAGS, 8, 7, DFLAGS, 6663d0407baSopenharmony_ci RK1808_CLKGATE_CON(13), 9, GFLAGS), 6673d0407baSopenharmony_ci 6683d0407baSopenharmony_ci COMPOSITE_NOMUX(SCLK_TSADC, "clk_tsadc", "xin24m", 0, RK1808_CLKSEL_CON(62), 0, 11, DFLAGS, RK1808_CLKGATE_CON(13), 6693d0407baSopenharmony_ci 13, GFLAGS), 6703d0407baSopenharmony_ci COMPOSITE_NOMUX(SCLK_SARADC, "clk_saradc", "xin24m", 0, RK1808_CLKSEL_CON(63), 0, 11, DFLAGS, 6713d0407baSopenharmony_ci RK1808_CLKGATE_CON(13), 14, GFLAGS), 6723d0407baSopenharmony_ci 6733d0407baSopenharmony_ci COMPOSITE(SCLK_EFUSE_S, "clk_efuse_s", mux_gpll_cpll_xin24m_p, 0, RK1808_CLKSEL_CON(64), 6, 2, MFLAGS, 0, 6, DFLAGS, 6743d0407baSopenharmony_ci RK1808_CLKGATE_CON(14), 0, GFLAGS), 6753d0407baSopenharmony_ci COMPOSITE(SCLK_EFUSE_NS, "clk_efuse_ns", mux_gpll_cpll_xin24m_p, 0, RK1808_CLKSEL_CON(64), 14, 2, MFLAGS, 8, 6, 6763d0407baSopenharmony_ci DFLAGS, RK1808_CLKGATE_CON(14), 1, GFLAGS), 6773d0407baSopenharmony_ci 6783d0407baSopenharmony_ci COMPOSITE(DBCLK_GPIO1, "dbclk_gpio1", mux_xin24m_32k_p, 0, RK1808_CLKSEL_CON(65), 15, 1, MFLAGS, 0, 11, DFLAGS, 6793d0407baSopenharmony_ci RK1808_CLKGATE_CON(14), 2, GFLAGS), 6803d0407baSopenharmony_ci COMPOSITE(DBCLK_GPIO2, "dbclk_gpio2", mux_xin24m_32k_p, 0, RK1808_CLKSEL_CON(66), 15, 1, MFLAGS, 0, 11, DFLAGS, 6813d0407baSopenharmony_ci RK1808_CLKGATE_CON(14), 3, GFLAGS), 6823d0407baSopenharmony_ci COMPOSITE(DBCLK_GPIO3, "dbclk_gpio3", mux_xin24m_32k_p, 0, RK1808_CLKSEL_CON(67), 15, 1, MFLAGS, 0, 11, DFLAGS, 6833d0407baSopenharmony_ci RK1808_CLKGATE_CON(14), 4, GFLAGS), 6843d0407baSopenharmony_ci COMPOSITE(DBCLK_GPIO4, "dbclk_gpio4", mux_xin24m_32k_p, 0, RK1808_CLKSEL_CON(68), 15, 1, MFLAGS, 0, 11, DFLAGS, 6853d0407baSopenharmony_ci RK1808_CLKGATE_CON(14), 5, GFLAGS), 6863d0407baSopenharmony_ci 6873d0407baSopenharmony_ci COMPOSITE(SCLK_PWM0, "clk_pwm0", mux_gpll_xin24m_p, 0, RK1808_CLKSEL_CON(69), 7, 1, MFLAGS, 0, 7, DFLAGS, 6883d0407baSopenharmony_ci RK1808_CLKGATE_CON(13), 10, GFLAGS), 6893d0407baSopenharmony_ci COMPOSITE(SCLK_PWM1, "clk_pwm1", mux_gpll_xin24m_p, 0, RK1808_CLKSEL_CON(69), 15, 1, MFLAGS, 8, 7, DFLAGS, 6903d0407baSopenharmony_ci RK1808_CLKGATE_CON(13), 11, GFLAGS), 6913d0407baSopenharmony_ci COMPOSITE(SCLK_PWM2, "clk_pwm2", mux_gpll_xin24m_p, 0, RK1808_CLKSEL_CON(70), 7, 1, MFLAGS, 0, 7, DFLAGS, 6923d0407baSopenharmony_ci RK1808_CLKGATE_CON(13), 12, GFLAGS), 6933d0407baSopenharmony_ci 6943d0407baSopenharmony_ci GATE(SCLK_TIMER0, "sclk_timer0", "xin24m", 0, RK1808_CLKGATE_CON(14), 8, GFLAGS), 6953d0407baSopenharmony_ci GATE(SCLK_TIMER1, "sclk_timer1", "xin24m", 0, RK1808_CLKGATE_CON(14), 9, GFLAGS), 6963d0407baSopenharmony_ci GATE(SCLK_TIMER2, "sclk_timer2", "xin24m", 0, RK1808_CLKGATE_CON(14), 10, GFLAGS), 6973d0407baSopenharmony_ci GATE(SCLK_TIMER3, "sclk_timer3", "xin24m", 0, RK1808_CLKGATE_CON(14), 11, GFLAGS), 6983d0407baSopenharmony_ci GATE(SCLK_TIMER4, "sclk_timer4", "xin24m", 0, RK1808_CLKGATE_CON(14), 12, GFLAGS), 6993d0407baSopenharmony_ci GATE(SCLK_TIMER5, "sclk_timer5", "xin24m", 0, RK1808_CLKGATE_CON(14), 13, GFLAGS), 7003d0407baSopenharmony_ci 7013d0407baSopenharmony_ci /* 7023d0407baSopenharmony_ci * Clock-Architecture Diagram 10 7033d0407baSopenharmony_ci */ 7043d0407baSopenharmony_ci 7053d0407baSopenharmony_ci /* PD_AUDIO */ 7063d0407baSopenharmony_ci 7073d0407baSopenharmony_ci GATE(0, "hclk_audio_niu", "hclk_audio_pre", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(18), 11, GFLAGS), 7083d0407baSopenharmony_ci GATE(HCLK_VAD, "hclk_vad", "hclk_audio_pre", 0, RK1808_CLKGATE_CON(18), 12, GFLAGS), 7093d0407baSopenharmony_ci GATE(HCLK_PDM, "hclk_pdm", "hclk_audio_pre", 0, RK1808_CLKGATE_CON(18), 13, GFLAGS), 7103d0407baSopenharmony_ci GATE(HCLK_I2S0_8CH, "hclk_i2s0_8ch", "hclk_audio_pre", 0, RK1808_CLKGATE_CON(18), 14, GFLAGS), 7113d0407baSopenharmony_ci GATE(HCLK_I2S1_2CH, "hclk_i2s1_2ch", "hclk_audio_pre", 0, RK1808_CLKGATE_CON(18), 15, GFLAGS), 7123d0407baSopenharmony_ci 7133d0407baSopenharmony_ci COMPOSITE(0, "clk_pdm_src", mux_gpll_xin24m_cpll_npll_p, 0, RK1808_CLKSEL_CON(30), 8, 2, MFLAGS, 0, 7, DFLAGS, 7143d0407baSopenharmony_ci RK1808_CLKGATE_CON(17), 9, GFLAGS), 7153d0407baSopenharmony_ci COMPOSITE_FRACMUX(0, "clk_pdm_frac", "clk_pdm_src", CLK_SET_RATE_PARENT, RK1808_CLKSEL_CON(31), 0, 7163d0407baSopenharmony_ci RK1808_CLKGATE_CON(17), 10, GFLAGS, &rk1808_pdm_fracmux, RK1808_PDM_FRAC_MAX_PRATE), 7173d0407baSopenharmony_ci GATE(SCLK_PDM, "clk_pdm", "clk_pdm_mux", 0, RK1808_CLKGATE_CON(17), 11, GFLAGS), 7183d0407baSopenharmony_ci 7193d0407baSopenharmony_ci COMPOSITE(SCLK_I2S0_8CH_TX_SRC, "clk_i2s0_8ch_tx_src", mux_gpll_cpll_npll_p, 0, RK1808_CLKSEL_CON(32), 8, 2, MFLAGS, 7203d0407baSopenharmony_ci 0, 7, DFLAGS, RK1808_CLKGATE_CON(17), 12, GFLAGS), 7213d0407baSopenharmony_ci COMPOSITE_FRACMUX(0, "clk_i2s0_8ch_tx_frac", "clk_i2s0_8ch_tx_src", CLK_SET_RATE_PARENT, RK1808_CLKSEL_CON(33), 0, 7223d0407baSopenharmony_ci RK1808_CLKGATE_CON(17), 13, GFLAGS, &rk1808_i2s0_8ch_tx_fracmux, RK1808_I2S_FRAC_MAX_PRATE), 7233d0407baSopenharmony_ci COMPOSITE_NODIV(SCLK_I2S0_8CH_TX, "clk_i2s0_8ch_tx", mux_i2s0_8ch_tx_rx_p, CLK_SET_RATE_PARENT, 7243d0407baSopenharmony_ci RK1808_CLKSEL_CON(32), 12, 1, MFLAGS, RK1808_CLKGATE_CON(17), 14, GFLAGS), 7253d0407baSopenharmony_ci COMPOSITE_NODIV(SCLK_I2S0_8CH_TX_OUT, "clk_i2s0_8ch_tx_out", mux_i2s0_8ch_tx_out_p, CLK_SET_RATE_PARENT, 7263d0407baSopenharmony_ci RK1808_CLKSEL_CON(32), 14, 2, MFLAGS, RK1808_CLKGATE_CON(17), 15, GFLAGS), 7273d0407baSopenharmony_ci 7283d0407baSopenharmony_ci COMPOSITE(SCLK_I2S0_8CH_RX_SRC, "clk_i2s0_8ch_rx_src", mux_gpll_cpll_npll_p, 0, RK1808_CLKSEL_CON(34), 8, 2, MFLAGS, 7293d0407baSopenharmony_ci 0, 7, DFLAGS, RK1808_CLKGATE_CON(18), 0, GFLAGS), 7303d0407baSopenharmony_ci COMPOSITE_FRACMUX(0, "clk_i2s0_8ch_rx_frac", "clk_i2s0_8ch_rx_src", CLK_SET_RATE_PARENT, RK1808_CLKSEL_CON(35), 0, 7313d0407baSopenharmony_ci RK1808_CLKGATE_CON(18), 1, GFLAGS, &rk1808_i2s0_8ch_rx_fracmux, RK1808_I2S_FRAC_MAX_PRATE), 7323d0407baSopenharmony_ci COMPOSITE_NODIV(SCLK_I2S0_8CH_RX, "clk_i2s0_8ch_rx", mux_i2s0_8ch_rx_tx_p, CLK_SET_RATE_PARENT, 7333d0407baSopenharmony_ci RK1808_CLKSEL_CON(34), 12, 1, MFLAGS, RK1808_CLKGATE_CON(18), 2, GFLAGS), 7343d0407baSopenharmony_ci COMPOSITE_NODIV(SCLK_I2S0_8CH_RX_OUT, "clk_i2s0_8ch_rx_out", mux_i2s0_8ch_rx_out_p, CLK_SET_RATE_PARENT, 7353d0407baSopenharmony_ci RK1808_CLKSEL_CON(34), 14, 2, MFLAGS, RK1808_CLKGATE_CON(18), 3, GFLAGS), 7363d0407baSopenharmony_ci 7373d0407baSopenharmony_ci COMPOSITE(SCLK_I2S1_2CH_SRC, "clk_i2s1_2ch_src", mux_gpll_cpll_npll_p, 0, RK1808_CLKSEL_CON(36), 8, 2, MFLAGS, 0, 7, 7383d0407baSopenharmony_ci DFLAGS, RK1808_CLKGATE_CON(18), 4, GFLAGS), 7393d0407baSopenharmony_ci COMPOSITE_FRACMUX(0, "clk_i2s1_2ch_frac", "clk_i2s1_2ch_src", CLK_SET_RATE_PARENT, RK1808_CLKSEL_CON(37), 0, 7403d0407baSopenharmony_ci RK1808_CLKGATE_CON(18), 5, GFLAGS, &rk1808_i2s1_2ch_fracmux, RK1808_I2S_FRAC_MAX_PRATE), 7413d0407baSopenharmony_ci GATE(SCLK_I2S1_2CH, "clk_i2s1_2ch", "clk_i2s1_2ch_mux", 0, RK1808_CLKGATE_CON(18), 6, GFLAGS), 7423d0407baSopenharmony_ci COMPOSITE_NODIV(SCLK_I2S1_2CH_OUT, "clk_i2s1_2ch_out", mux_i2s1_2ch_out_p, CLK_SET_RATE_PARENT, 7433d0407baSopenharmony_ci RK1808_CLKSEL_CON(36), 15, 1, MFLAGS, RK1808_CLKGATE_CON(18), 7, GFLAGS), 7443d0407baSopenharmony_ci 7453d0407baSopenharmony_ci /* 7463d0407baSopenharmony_ci * Clock-Architecture Diagram 10 7473d0407baSopenharmony_ci */ 7483d0407baSopenharmony_ci 7493d0407baSopenharmony_ci /* PD_BUS */ 7503d0407baSopenharmony_ci 7513d0407baSopenharmony_ci GATE(0, "pclk_top_niu", "pclk_top_pre", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(19), 0, GFLAGS), 7523d0407baSopenharmony_ci GATE(0, "pclk_top_cru", "pclk_top_pre", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(19), 1, GFLAGS), 7533d0407baSopenharmony_ci GATE(0, "pclk_ddrphy", "pclk_top_pre", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(19), 2, GFLAGS), 7543d0407baSopenharmony_ci GATE(PCLK_MIPIDSIPHY, "pclk_mipidsiphy", "pclk_top_pre", 0, RK1808_CLKGATE_CON(19), 3, GFLAGS), 7553d0407baSopenharmony_ci GATE(PCLK_MIPICSIPHY, "pclk_mipicsiphy", "pclk_top_pre", 0, RK1808_CLKGATE_CON(19), 4, GFLAGS), 7563d0407baSopenharmony_ci 7573d0407baSopenharmony_ci GATE(PCLK_USB3PHY_PIPE, "pclk_usb3phy_pipe", "pclk_top_pre", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(19), 6, GFLAGS), 7583d0407baSopenharmony_ci GATE(0, "pclk_usb3_grf", "pclk_top_pre", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(19), 7, GFLAGS), 7593d0407baSopenharmony_ci GATE(0, "pclk_usb_grf", "pclk_top_pre", CLK_IGNORE_UNUSED, RK1808_CLKGATE_CON(19), 8, GFLAGS), 7603d0407baSopenharmony_ci 7613d0407baSopenharmony_ci /* 7623d0407baSopenharmony_ci * Clock-Architecture Diagram 11 7633d0407baSopenharmony_ci */ 7643d0407baSopenharmony_ci 7653d0407baSopenharmony_ci /* PD_PMU */ 7663d0407baSopenharmony_ci 7673d0407baSopenharmony_ci COMPOSITE_FRACMUX(SCLK_RTC32K_FRAC, "clk_rtc32k_frac", "xin24m", CLK_IGNORE_UNUSED, RK1808_PMU_CLKSEL_CON(1), 0, 7683d0407baSopenharmony_ci RK1808_PMU_CLKGATE_CON(0), 13, GFLAGS, &rk1808_rtc32k_pmu_fracmux, 0), 7693d0407baSopenharmony_ci 7703d0407baSopenharmony_ci COMPOSITE_NOMUX(XIN24M_DIV, "xin24m_div", "xin24m", CLK_IGNORE_UNUSED, RK1808_PMU_CLKSEL_CON(0), 8, 5, DFLAGS, 7713d0407baSopenharmony_ci RK1808_PMU_CLKGATE_CON(0), 12, GFLAGS), 7723d0407baSopenharmony_ci 7733d0407baSopenharmony_ci COMPOSITE_NOMUX(0, "clk_wifi_pmu_src", "ppll", 0, RK1808_PMU_CLKSEL_CON(2), 8, 6, DFLAGS, RK1808_PMU_CLKGATE_CON(0), 7743d0407baSopenharmony_ci 14, GFLAGS), 7753d0407baSopenharmony_ci COMPOSITE_NODIV(SCLK_WIFI_PMU, "clk_wifi_pmu", mux_wifi_pmu_p, CLK_SET_RATE_PARENT, RK1808_PMU_CLKSEL_CON(2), 15, 1, 7763d0407baSopenharmony_ci MFLAGS, RK1808_PMU_CLKGATE_CON(0), 15, GFLAGS), 7773d0407baSopenharmony_ci 7783d0407baSopenharmony_ci COMPOSITE(0, "clk_uart0_pmu_src", mux_gpll_usb480m_cpll_ppll_p, 0, RK1808_PMU_CLKSEL_CON(3), 14, 2, MFLAGS, 0, 7, 7793d0407baSopenharmony_ci DFLAGS, RK1808_PMU_CLKGATE_CON(1), 0, GFLAGS), 7803d0407baSopenharmony_ci COMPOSITE_NOMUX_HALFDIV(0, "clk_uart0_np5", "clk_uart0_pmu_src", 0, RK1808_PMU_CLKSEL_CON(4), 0, 7, DFLAGS, 7813d0407baSopenharmony_ci RK1808_PMU_CLKGATE_CON(1), 1, GFLAGS), 7823d0407baSopenharmony_ci COMPOSITE_FRACMUX(0, "clk_uart0_frac", "clk_uart0_pmu_src", CLK_SET_RATE_PARENT, RK1808_PMU_CLKSEL_CON(5), 0, 7833d0407baSopenharmony_ci RK1808_PMU_CLKGATE_CON(1), 2, GFLAGS, &rk1808_uart0_pmu_fracmux, RK1808_UART_FRAC_MAX_PRATE), 7843d0407baSopenharmony_ci GATE(SCLK_UART0_PMU, "clk_uart0_pmu", "clk_uart0_pmu_mux", CLK_SET_RATE_PARENT, RK1808_PMU_CLKGATE_CON(1), 3, 7853d0407baSopenharmony_ci GFLAGS), 7863d0407baSopenharmony_ci 7873d0407baSopenharmony_ci GATE(SCLK_PVTM_PMU, "clk_pvtm_pmu", "xin24m", 0, RK1808_PMU_CLKGATE_CON(1), 4, GFLAGS), 7883d0407baSopenharmony_ci 7893d0407baSopenharmony_ci COMPOSITE(SCLK_PMU_I2C0, "clk_pmu_i2c0", mux_ppll_xin24m_p, 0, RK1808_PMU_CLKSEL_CON(7), 15, 1, MFLAGS, 8, 7, 7903d0407baSopenharmony_ci DFLAGS, RK1808_PMU_CLKGATE_CON(1), 5, GFLAGS), 7913d0407baSopenharmony_ci 7923d0407baSopenharmony_ci COMPOSITE(DBCLK_PMU_GPIO0, "dbclk_gpio0", mux_xin24m_32k_p, 0, RK1808_PMU_CLKSEL_CON(6), 15, 1, MFLAGS, 0, 11, 7933d0407baSopenharmony_ci DFLAGS, RK1808_PMU_CLKGATE_CON(1), 6, GFLAGS), 7943d0407baSopenharmony_ci 7953d0407baSopenharmony_ci COMPOSITE_NOMUX(SCLK_REF24M_PMU, "clk_ref24m_pmu", "ppll", 0, RK1808_PMU_CLKSEL_CON(2), 0, 6, DFLAGS, 7963d0407baSopenharmony_ci RK1808_PMU_CLKGATE_CON(1), 8, GFLAGS), 7973d0407baSopenharmony_ci COMPOSITE_NODIV(SCLK_USBPHY_REF, "clk_usbphy_ref", mux_usbphy_ref_p, CLK_SET_RATE_PARENT, RK1808_PMU_CLKSEL_CON(2), 7983d0407baSopenharmony_ci 6, 1, MFLAGS, RK1808_PMU_CLKGATE_CON(1), 9, GFLAGS), 7993d0407baSopenharmony_ci COMPOSITE_NODIV(SCLK_MIPIDSIPHY_REF, "clk_mipidsiphy_ref", mux_mipidsiphy_ref_p, CLK_SET_RATE_PARENT, 8003d0407baSopenharmony_ci RK1808_PMU_CLKSEL_CON(2), 7, 1, MFLAGS, RK1808_PMU_CLKGATE_CON(1), 10, GFLAGS), 8013d0407baSopenharmony_ci 8023d0407baSopenharmony_ci FACTOR(0, "clk_ppll_ph0", "ppll", 0, 1, 2), 8033d0407baSopenharmony_ci COMPOSITE_NOMUX(0, "clk_pciephy_src", "clk_ppll_ph0", 0, RK1808_PMU_CLKSEL_CON(7), 0, 2, DFLAGS, 8043d0407baSopenharmony_ci RK1808_PMU_CLKGATE_CON(1), 11, GFLAGS), 8053d0407baSopenharmony_ci COMPOSITE_NODIV(SCLK_PCIEPHY_REF, "clk_pciephy_ref", mux_pciephy_ref_p, CLK_SET_RATE_PARENT, 8063d0407baSopenharmony_ci RK1808_PMU_CLKSEL_CON(7), 4, 1, MFLAGS, RK1808_PMU_CLKGATE_CON(1), 12, GFLAGS), 8073d0407baSopenharmony_ci 8083d0407baSopenharmony_ci COMPOSITE_NOMUX(PCLK_PMU_PRE, "pclk_pmu_pre", "ppll", CLK_IS_CRITICAL, RK1808_PMU_CLKSEL_CON(0), 0, 5, DFLAGS, 8093d0407baSopenharmony_ci RK1808_PMU_CLKGATE_CON(0), 0, GFLAGS), 8103d0407baSopenharmony_ci 8113d0407baSopenharmony_ci GATE(0, "pclk_pmu_niu", "pclk_pmu_pre", CLK_IS_CRITICAL, RK1808_PMU_CLKGATE_CON(0), 1, GFLAGS), 8123d0407baSopenharmony_ci GATE(0, "pclk_pmu_sgrf", "pclk_pmu_pre", CLK_IGNORE_UNUSED, RK1808_PMU_CLKGATE_CON(0), 2, GFLAGS), 8133d0407baSopenharmony_ci GATE(0, "pclk_pmu_grf", "pclk_pmu_pre", CLK_IGNORE_UNUSED, RK1808_PMU_CLKGATE_CON(0), 3, GFLAGS), 8143d0407baSopenharmony_ci GATE(0, "pclk_pmu", "pclk_pmu_pre", CLK_IGNORE_UNUSED, RK1808_PMU_CLKGATE_CON(0), 4, GFLAGS), 8153d0407baSopenharmony_ci GATE(0, "pclk_pmu_mem", "pclk_pmu_pre", CLK_IGNORE_UNUSED, RK1808_PMU_CLKGATE_CON(0), 5, GFLAGS), 8163d0407baSopenharmony_ci GATE(PCLK_GPIO0_PMU, "pclk_gpio0_pmu", "pclk_pmu_pre", 0, RK1808_PMU_CLKGATE_CON(0), 6, GFLAGS), 8173d0407baSopenharmony_ci GATE(PCLK_UART0_PMU, "pclk_uart0_pmu", "pclk_pmu_pre", 0, RK1808_PMU_CLKGATE_CON(0), 7, GFLAGS), 8183d0407baSopenharmony_ci GATE(0, "pclk_cru_pmu", "pclk_pmu_pre", CLK_IGNORE_UNUSED, RK1808_PMU_CLKGATE_CON(0), 8, GFLAGS), 8193d0407baSopenharmony_ci GATE(PCLK_I2C0_PMU, "pclk_i2c0_pmu", "pclk_pmu_pre", 0, RK1808_PMU_CLKGATE_CON(0), 9, GFLAGS), 8203d0407baSopenharmony_ci 8213d0407baSopenharmony_ci MUXPMUGRF(SCLK_32K_IOE, "clk_32k_ioe", mux_clk_32k_ioe_p, 0, RK1808_PMUGRF_SOC_CON0, 0, 1, MFLAGS)}; 8223d0407baSopenharmony_ci 8233d0407baSopenharmony_cistatic void __iomem *rk1808_cru_base; 8243d0407baSopenharmony_ci 8253d0407baSopenharmony_civoid rk1808_dump_cru(void) 8263d0407baSopenharmony_ci{ 8273d0407baSopenharmony_ci if (rk1808_cru_base) { 8283d0407baSopenharmony_ci pr_warn("CRU:\n"); 8293d0407baSopenharmony_ci print_hex_dump(KERN_WARNING, "", DUMP_PREFIX_OFFSET, 0x20, 0x4, rk1808_cru_base, 0x500, false); 8303d0407baSopenharmony_ci print_hex_dump(KERN_WARNING, "", DUMP_PREFIX_OFFSET, 0x20, 0x4, rk1808_cru_base + 0x4000, 0x100, false); 8313d0407baSopenharmony_ci } 8323d0407baSopenharmony_ci} 8333d0407baSopenharmony_ciEXPORT_SYMBOL_GPL(rk1808_dump_cru); 8343d0407baSopenharmony_ci 8353d0407baSopenharmony_cistatic int rk1808_clk_panic(struct notifier_block *this, unsigned long ev, void *ptr) 8363d0407baSopenharmony_ci{ 8373d0407baSopenharmony_ci rk1808_dump_cru(); 8383d0407baSopenharmony_ci return NOTIFY_DONE; 8393d0407baSopenharmony_ci} 8403d0407baSopenharmony_ci 8413d0407baSopenharmony_cistatic struct notifier_block rk1808_clk_panic_block = { 8423d0407baSopenharmony_ci .notifier_call = rk1808_clk_panic, 8433d0407baSopenharmony_ci}; 8443d0407baSopenharmony_ci 8453d0407baSopenharmony_cistatic void __init rk1808_clk_init(struct device_node *np) 8463d0407baSopenharmony_ci{ 8473d0407baSopenharmony_ci struct rockchip_clk_provider *ctx; 8483d0407baSopenharmony_ci void __iomem *reg_base; 8493d0407baSopenharmony_ci struct clk **clks; 8503d0407baSopenharmony_ci 8513d0407baSopenharmony_ci reg_base = of_iomap(np, 0); 8523d0407baSopenharmony_ci if (!reg_base) { 8533d0407baSopenharmony_ci pr_err("%s: could not map cru region\n", __func__); 8543d0407baSopenharmony_ci return; 8553d0407baSopenharmony_ci } 8563d0407baSopenharmony_ci 8573d0407baSopenharmony_ci rk1808_cru_base = reg_base; 8583d0407baSopenharmony_ci 8593d0407baSopenharmony_ci ctx = rockchip_clk_init(np, reg_base, CLK_NR_CLKS); 8603d0407baSopenharmony_ci if (IS_ERR(ctx)) { 8613d0407baSopenharmony_ci pr_err("%s: rockchip clk init failed\n", __func__); 8623d0407baSopenharmony_ci iounmap(reg_base); 8633d0407baSopenharmony_ci return; 8643d0407baSopenharmony_ci } 8653d0407baSopenharmony_ci clks = ctx->clk_data.clks; 8663d0407baSopenharmony_ci 8673d0407baSopenharmony_ci rockchip_clk_register_plls(ctx, rk1808_pll_clks, ARRAY_SIZE(rk1808_pll_clks), RK1808_GRF_SOC_STATUS0); 8683d0407baSopenharmony_ci rockchip_clk_register_branches(ctx, rk1808_clk_branches, ARRAY_SIZE(rk1808_clk_branches)); 8693d0407baSopenharmony_ci 8703d0407baSopenharmony_ci rockchip_clk_register_armclk(ctx, ARMCLK, "armclk", 3, clks[PLL_APLL], clks[PLL_GPLL], &rk1808_cpuclk_data, 8713d0407baSopenharmony_ci rk1808_cpuclk_rates, ARRAY_SIZE(rk1808_cpuclk_rates)); 8723d0407baSopenharmony_ci 8733d0407baSopenharmony_ci rockchip_register_softrst(np, 16, reg_base + RK1808_SOFTRST_CON(0), ROCKCHIP_SOFTRST_HIWORD_MASK); 8743d0407baSopenharmony_ci 8753d0407baSopenharmony_ci rockchip_register_restart_notifier(ctx, RK1808_GLB_SRST_FST, NULL); 8763d0407baSopenharmony_ci 8773d0407baSopenharmony_ci rockchip_clk_of_add_provider(np, ctx); 8783d0407baSopenharmony_ci 8793d0407baSopenharmony_ci atomic_notifier_chain_register(&panic_notifier_list, &rk1808_clk_panic_block); 8803d0407baSopenharmony_ci} 8813d0407baSopenharmony_ci 8823d0407baSopenharmony_ciCLK_OF_DECLARE(rk1808_cru, "rockchip,rk1808-cru", rk1808_clk_init); 8833d0407baSopenharmony_ci 8843d0407baSopenharmony_cistatic int __init clk_rk1808_probe(struct platform_device *pdev) 8853d0407baSopenharmony_ci{ 8863d0407baSopenharmony_ci struct device_node *np = pdev->dev.of_node; 8873d0407baSopenharmony_ci 8883d0407baSopenharmony_ci rk1808_clk_init(np); 8893d0407baSopenharmony_ci 8903d0407baSopenharmony_ci return 0; 8913d0407baSopenharmony_ci} 8923d0407baSopenharmony_ci 8933d0407baSopenharmony_cistatic const struct of_device_id clk_rk1808_match_table[] = {{ 8943d0407baSopenharmony_ci .compatible = "rockchip,rk1808-cru", 8953d0407baSopenharmony_ci }, 8963d0407baSopenharmony_ci {}}; 8973d0407baSopenharmony_ciMODULE_DEVICE_TABLE(of, clk_rk1808_match_table); 8983d0407baSopenharmony_ci 8993d0407baSopenharmony_cistatic struct platform_driver clk_rk1808_driver = { 9003d0407baSopenharmony_ci .driver = 9013d0407baSopenharmony_ci { 9023d0407baSopenharmony_ci .name = "clk-rk1808", 9033d0407baSopenharmony_ci .of_match_table = clk_rk1808_match_table, 9043d0407baSopenharmony_ci }, 9053d0407baSopenharmony_ci}; 9063d0407baSopenharmony_cibuiltin_platform_driver_probe(clk_rk1808_driver, clk_rk1808_probe); 9073d0407baSopenharmony_ci 9083d0407baSopenharmony_ciMODULE_DESCRIPTION("Rockchip RK1808 Clock Driver"); 9093d0407baSopenharmony_ciMODULE_LICENSE("GPL"); 910