nt9856x/BSP/linux-kernel/drivers/clk/novatek/na51068-clk.c
2023-03-28 15:07:53 +08:00

1139 lines
48 KiB
C
Executable File

/**
NVT clock management module for NA51068 SoC
@file na51068-clk.c
Copyright Novatek Microelectronics Corp. 2019. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License version 2 as
published by the Free Software Foundation.
*/
#include <linux/clk-provider.h>
#include <linux/kernel.h>
#include <linux/of.h>
#include <linux/of_address.h>
#include <linux/of_device.h>
#include <linux/platform_device.h>
#include <linux/module.h>
#include <linux/delay.h>
#include <linux/gcd.h>
#include <linux/clkdev.h>
#include "plat/hardware.h"
#include "plat/cg-reg.h"
#include "nvt-im-clk.h"
#define IOADDR_CG_REG_SIZE 0x1A4
#define DEFAULT_OSC_IN_CLK_FREQ 12000000
#define DEFAULT_PLL_DIV_VALUE 131072
#define DEFAULT_PLL0_RATIO 4369066 /* (400MHz for AXI0) */
#define DEFAULT_PLL1_RATIO 4369066 /* (400MHz for AXI1) */
#define DEFAULT_PLL2_RATIO 5461333 /* (500MHz for CNN) */
#define DEFAULT_PLL3_RATIO 2184533 /* (200MHz for DRAM) */
#define DEFAULT_PLL4_RATIO 3276800 /* (300MHz for AHB) */
#define DEFAULT_PLL5_RATIO 1092266 /* (100MHz for SATAPHY) */
#define DEFAULT_PLL6_RATIO 2184533 /* (200MHz for SDC) */
#define DEFAULT_PLL7_RATIO 2730666 /* (250MHz for ETH) */
#define DEFAULT_PLL8_RATIO 2796202 /* (256MHz for UART) */
#define DEFAULT_PLL9_RATIO 3244032 /* (297MHz for DISP0) */
#define DEFAULT_PLL10_RATIO 2730666 /* (250MHz for DISP1) */
#define DEFAULT_PLL11_RATIO 589824 /* (54MHz for DISP2) */
#define DEFAULT_PLL12_RATIO 3758096 /* (344.0640MHz for SSP) */
#define DEFAULT_PLL13_RATIO 3822933 /* (350MHz for AXI2) */
#define DEFAULT_PLL14_RATIO 4150613 /* (380MHz for H264/H265) */
#define DEFAULT_PLL15_RATIO 6553600 /* (600MHz for DSP) */
#define DEFAULT_PLL16_RATIO 1911466 /* (175MHz for CPU) */
static void __iomem *remap_base = NULL;
static spinlock_t cg_lock;
#define CPU_CLK_SEL_CPU_APLL 0x80000000
/**
* Get frequency of peripheral clock
*/
unsigned long get_periph_clk(void)
{
unsigned long long cpu_clk_sel;
u32 cpu_clk;
cpu_clk_sel = readl(remap_base + CG_CPU_CKCTRL_REG_OFFSET) & 0x80000000;
switch (cpu_clk_sel) {
case CPU_CLK_SEL_CPU_APLL: {
struct clk *pll16_clk = clk_get(NULL, "pll16");
cpu_clk = clk_get_rate(pll16_clk) * 8;
break;
}
default:
#ifdef CONFIG_NVT_FPGA_EMULATION
cpu_clk = 24000000;
#else
cpu_clk = 80000000;
#endif
break;
}
return (cpu_clk/8);
}
static void __init nvt_periph_clk_init(struct device_node *node)
{
struct clk *periph_clk;
periph_clk = clk_register_fixed_rate(NULL,
"periph_clk",
NULL,
0,
get_periph_clk());
clk_register_clkdev(periph_clk, NULL, "periph_clk_dev");
of_clk_add_provider(node, of_clk_src_simple_get, periph_clk);
pr_err("***%s\n", __func__);
}
CLK_OF_DECLARE(nvt_periph_clk, "nvt,periph_clk", nvt_periph_clk_init);
static struct nvt_fixed_rate_clk novatek_fixed_rate_clk[] __initdata = {
FIXED_RATE_CONF("osc_in", 12000000),
FIXED_RATE_CONF("osc_rtc", 32768),
#ifdef CONFIG_NVT_FPGA_EMULATION
FIXED_RATE_CONF("fix48m", 48000000),
FIXED_RATE_CONF("fix27m", 27000000),
FIXED_RATE_CONF("fix25m", 25000000),
FIXED_RATE_CONF("fix24m", 24000000),
FIXED_RATE_CONF("fix20m", 20000000),
FIXED_RATE_CONF("fix16m", 16000000),
FIXED_RATE_CONF("fix12m", 12000000),
#else
FIXED_RATE_CONF("fix480m", 480000000),
FIXED_RATE_CONF("fix192m", 192000000),
FIXED_RATE_CONF("fix12m", 12000000),
#endif
};
static struct nvt_pll_clk novatek_pll[] __initdata = {
/*
* The format of PLL_CONF as shown below.
* ( name , pll_ratio, pll_ratio_reg
* pll_en_reg , bit_idx )
*/
PLL_CONF("pll0", DEFAULT_PLL0_RATIO, CG_PLL0_CLK_RATE0_REG_OFFSET,
CG_PLL_EN_REG_OFFSET, BIT0),
PLL_CONF("pll1", DEFAULT_PLL1_RATIO, CG_PLL1_CLK_RATE0_REG_OFFSET,
CG_PLL_EN_REG_OFFSET, BIT1),
PLL_CONF("pll2", DEFAULT_PLL2_RATIO, CG_PLL2_CLK_RATE0_REG_OFFSET,
CG_PLL_EN_REG_OFFSET, BIT2),
PLL_CONF("pll3", DEFAULT_PLL3_RATIO, CG_PLL3_CLK_RATE0_REG_OFFSET,
CG_PLL_EN_REG_OFFSET, BIT3),
PLL_CONF("pll4", DEFAULT_PLL4_RATIO, CG_PLL4_CLK_RATE0_REG_OFFSET,
CG_PLL_EN_REG_OFFSET, BIT4),
PLL_CONF("pll5", DEFAULT_PLL5_RATIO, CG_PLL5_CLK_RATE0_REG_OFFSET,
CG_PLL_EN_REG_OFFSET, BIT5),
PLL_CONF("pll6", DEFAULT_PLL6_RATIO, CG_PLL6_CLK_RATE0_REG_OFFSET,
CG_PLL_EN_REG_OFFSET, BIT6),
PLL_CONF("pll7", DEFAULT_PLL7_RATIO, CG_PLL7_CLK_RATE0_REG_OFFSET,
CG_PLL_EN_REG_OFFSET, BIT7),
PLL_CONF("pll8", DEFAULT_PLL8_RATIO, CG_PLL8_CLK_RATE0_REG_OFFSET,
CG_PLL_EN_REG_OFFSET, BIT8),
PLL_CONF("pll9", DEFAULT_PLL9_RATIO, CG_PLL9_CLK_RATE0_REG_OFFSET,
CG_PLL_EN_REG_OFFSET, BIT9),
PLL_CONF("pll10", DEFAULT_PLL10_RATIO, CG_PLL10_CLK_RATE0_REG_OFFSET,
CG_PLL_EN_REG_OFFSET, BIT10),
PLL_CONF("pll11", DEFAULT_PLL11_RATIO, CG_PLL11_CLK_RATE0_REG_OFFSET,
CG_PLL_EN_REG_OFFSET, BIT11),
PLL_CONF("pll12", DEFAULT_PLL12_RATIO, CG_PLL12_CLK_RATE0_REG_OFFSET,
CG_PLL_EN_REG_OFFSET, BIT12),
PLL_CONF("pll13", DEFAULT_PLL13_RATIO, CG_PLL13_CLK_RATE0_REG_OFFSET,
CG_PLL_EN_REG_OFFSET, BIT13),
PLL_CONF("pll14", DEFAULT_PLL14_RATIO, CG_PLL14_CLK_RATE0_REG_OFFSET,
CG_PLL_EN_REG_OFFSET, BIT14),
PLL_CONF("pll15", DEFAULT_PLL15_RATIO, CG_PLL15_CLK_RATE0_REG_OFFSET,
CG_PLL_EN_REG_OFFSET, BIT15),
PLL_CONF("pll16", DEFAULT_PLL16_RATIO, CG_PLL16_CLK_RATE0_REG_OFFSET,
CG_PLL_EN_REG_OFFSET, BIT16),
};
static const char *root_clk_parent[] __initconst = {
"osc_in",
};
static const char *rtc_clk_parent[] __initconst = {
"osc_rtc",
};
static const char *eth_root_parent[] __initconst = {
"pll7",
};
static const char *eth0_parent[] __initconst = {
"eth0_250m",
};
static const char *eth1_parent[] __initconst = {
"eth1_250m",
};
#ifdef CONFIG_NVT_FPGA_EMULATION
static const char *i2c_clk_parent[] __initconst = {
"osc_in",
};
static const char *uart_clk_parent[] __initconst = {
"fix48m",
};
static const char *mmc_clk_parent[] __initconst = {
"fix24m",
};
static const char *vcap_aclk_m_parent[] __initconst = {
"fix20m",
};
static const char *vcap_aclk_s_parent[] __initconst = {
"fix12m",
};
static const char *vcap_mclk_parent[] __initconst = {
"fix20m", "fix48m"
};
static const char *vcap_patclk_parent[] __initconst = {
"fix24m", "fix48m", "fix48m", "fix16m"
};
static const char *osg_clk_parent[] __initconst = {
"pll0", "pll1",
};
static const char *ext0_clk_parent[] __initconst = {
"fix27m",
};
static const char *ext1_clk_parent[] __initconst = {
"fix27m",
};
static const char *gm2d_clk_parent[] __initconst = {
"fix24m",
};
static const char *ssca_clk_parent[] __initconst = {
"fix24m",
};
static const char *vpe_clk_parent[] __initconst = {
"pll0", "pll1",
};
static const char *dei_aclk_parent[] __initconst = {
"pll0", "pll1",
};
static const char *dei_mclk_parent[] __initconst = {
"pll0", "pll1",
};
static const char *jpg_clk_parent[] __initconst = {
"pll4",
};
static const char *venc_aclk_parent[] __initconst = {
"pll4",
};
static const char *venc_mclk_parent[] __initconst = {
"pll4", "pll14",
};
static const char *venc_pclk_parent[] __initconst = {
"pll4",
};
static const char *sspmain_clk_parent[] __initconst = {
"fix12m",
};
static const char *ssp_clk_parent[] __initconst = {
"ssp_main_clk","fix12m","pll7","pll6"
};
static const char *ssph_clk_parent[] __initconst = {
"ssph_main_clk","fix12m","pll7","pll6"
};
static const char *h264d_mclk_parent[] __initconst = {
"pll0", "pll1",
};
static const char *h265d_mclk_parent[] __initconst = {
"pll13", "pll14",
};
static const char *h26xd_pclk_parent[] __initconst = {
"pll4",
};
static const char *h264d_aclk_parent[] __initconst = {
"pll0",
};
static const char *h265d_aclk_parent[] __initconst = {
"pll13", "pll14",
};
static const char *spi_clk_parent[] __initconst = {
"osc_in",
};
static const char *lcd210_clk_parent[] __initconst = {
"pll9","pll10","pll11",
};
static const char *lcd310_clk_parent[] __initconst = {
"pll9","pll10","pll11",
};
/*static const char *lcd310_mclk_parent[] __initconst = {
"mpll0","mpll1",
};*/
#else
static const char *pll4div2_clk_parent[] __initconst = {
"pll4"
};
static const char *i2c_clk_parent[] __initconst = {
"pll4div2",
};
static const char *uart_clk_parent[] __initconst = {
"fix480m", "osc_in", "ssp_clk_parent", "pll7",
};
static const char *pll6div2_clk_parent[] __initconst = {
"pll6"
};
static const char *mmc_clk_parent[] __initconst = {
"pll6div2",
};
static const char *vcap_aclk_m_parent[] __initconst = {
"pll0",
};
static const char *vcap_aclk_s_parent[] __initconst = {
"pll4",
};
static const char *vcap_mclk_parent[] __initconst = {
"pll0", "pll8"
};
static const char *vcap_patclk_parent[] __initconst = {
"pll9", "pll6", "pll8", "pll13"
};
static const char *osg_clk_parent[] __initconst = {
"pll0", "pll1",
};
static const char *ext0_clk_parent[] __initconst = {
"pll10", "pll7", "pll12", "osc_in"
};
static const char *ext1_clk_parent[] __initconst = {
"pll10", "pll7", "pll12", "osc_in"
};
static const char *gm2d_clk_parent[] __initconst = {
"pll4",
};
static const char *ssca_clk_parent[] __initconst = {
"pll4",
};
static const char *vpe_clk_parent[] __initconst = {
"pll0", "pll1",
};
static const char *dei_aclk_parent[] __initconst = {
"pll0", "pll1",
};
static const char *dei_mclk_parent[] __initconst = {
"pll0", "pll1",
};
static const char *jpg_clk_parent[] __initconst = {
"pll4",
};
static const char *venc_aclk_parent[] __initconst = {
"pll4",
};
static const char *venc_mclk_parent[] __initconst = {
"pll14", "pll4",
};
static const char *venc_pclk_parent[] __initconst = {
"pll4",
};
static const char *sspmain_clk_parent[] __initconst = {
"pll12",
};
static const char *ssp_clk_parent[] __initconst = {
"ssp_main_clk","fix12m","pll7","pll6"
};
static const char *ssph_clk_parent[] __initconst = {
"ssph_main_clk","fix12m","pll7","pll6"
};
static const char *h264d_mclk_parent[] __initconst = {
"pll0", "pll1",
};
static const char *h265d_mclk_parent[] __initconst = {
"pll13", "pll14",
};
static const char *h26xd_pclk_parent[] __initconst = {
"pll4",
};
static const char *h264d_aclk_parent[] __initconst = {
"pll0",
};
static const char *h265d_aclk_parent[] __initconst = {
"pll13", "pll14",
};
static const char *spi_clk_parent[] __initconst = {
"pll4div2", "pll6", "pll8"
};
static const char *lcd210_clk_parent[] __initconst = {
"pll9","pll10","pll11",
};
static const char *lcd310_clk_parent[] __initconst = {
"pll9","pll10","pll11",
};
static const char *sata_aclk_parent[] __initconst = {
"pll4",
};
/*static const char *lcd310_mclk_parent[] __initconst = {
"mpll0","mpll1",
};*/
static const char *sce_clk_parent[] __initconst = {
"pll1", "pll13",
};
#endif
static struct nvt_composite_mux_clk novatek_cmux_clk[] __initdata = {
/*
* If the parent is not assigned, use root_clk_parent as parent_names,
* and fill 0 to parent_idx and mux_reg.
*
* If the divider is not assigned, fill 0 to div_reg.
*
* Fill SWDIVX to correct software value, see pll4div2 and pll6div2.
*
* The format of COMP_MUX_CONF as shown below.
* ( name , parent_names , current_rate , parent_idx
* mux_reg , bit_idx , bit_width
* div_reg , bit_idx , bit_width/SWDIVX
* bus_clk_reg , bit_idx , apb_clk_reg , bit_idx , do_enable
* module_rst_reg , bit_idx , apb_rst_reg , bit_idx , do_reset )
*/
COMP_MUX_CONF("fe6c0000.pwm", root_clk_parent, 12000000, 0,
0, 0, 0,
0, 0, 0,
0, 0, CG_APB_CLK_GATING_REG1_OFFSET, BIT23, NOT_ENABLE,
0, 0, CG_APB_RESET_REG1_OFFSET, BIT29, NOT_RESET),
COMP_MUX_CONF("fca00000.dma030", root_clk_parent, 12000000, 0,
0, 0, 0,
0, 0, 0,
CG_BUS_CLK_GATING_REG0_OFFSET, BIT31, CG_APB_CLK_GATING_REG0_OFFSET, BIT22, NOT_ENABLE,
CG_MODULE_RESET_REG0_OFFSET, BIT16, CG_APB_RESET_REG0_OFFSET, BIT22, DO_RESET),
COMP_MUX_CONF("u2host_phy_clk0", root_clk_parent, 12000000, 0,
0, 0, 0,
0, 0, 0,
0, 0, CG_APB_CLK_GATING_REG0_OFFSET, BIT12, NOT_ENABLE,
0, 0, CG_APB_RESET_REG0_OFFSET, BIT12, DO_RESET),
COMP_MUX_CONF("u2host_phy_clk1", root_clk_parent, 12000000, 0,
0, 0, 0,
0, 0, 0,
0, 0, CG_APB_CLK_GATING_REG0_OFFSET, BIT13, NOT_ENABLE,
0, 0, CG_APB_RESET_REG0_OFFSET, BIT13, DO_RESET),
COMP_MUX_CONF("f9100000.u2host", root_clk_parent, 12000000, 0,
0, 0, 0,
0, 0, 0,
CG_BUS_CLK_GATING_REG2_OFFSET, BIT4, 0, 0, NOT_ENABLE,
CG_MODULE_RESET_REG1_OFFSET, BIT4, 0, 0, DO_RESET),
COMP_MUX_CONF("f9200000.u2host", root_clk_parent, 12000000, 0,
0, 0, 0,
0, 0, 0,
CG_BUS_CLK_GATING_REG2_OFFSET, BIT5, 0, 0, NOT_ENABLE,
CG_MODULE_RESET_REG1_OFFSET, BIT5, 0, 0, DO_RESET),
COMP_MUX_CONF("f9e00000.sata0", sata_aclk_parent, 300000000, 0,
0, 0, 0,
0, 0, 0,
CG_BUS_CLK_GATING_REG2_OFFSET, BIT6, 0, 0, NOT_ENABLE,
CG_MODULE_RESET_REG1_OFFSET, BIT8, 0, 0, DO_RESET),
COMP_MUX_CONF("f9f00000.sata1", sata_aclk_parent, 300000000, 0,
0, 0, 0,
0, 0, 0,
CG_BUS_CLK_GATING_REG2_OFFSET, BIT7, 0, 0, NOT_ENABLE,
CG_MODULE_RESET_REG1_OFFSET, BIT9, 0, 0, DO_RESET),
COMP_MUX_CONF("sata_phy_clk0", root_clk_parent, 12000000, 0,
0, 0, 0,
0, 0, 0,
0, 0, CG_APB_CLK_GATING_REG0_OFFSET, BIT26, NOT_ENABLE,
0, 0, CG_APB_RESET_REG0_OFFSET, BIT20, DO_RESET),
COMP_MUX_CONF("sata_phy_clk1", root_clk_parent, 12000000, 0,
0, 0, 0,
0, 0, 0,
0, 0, CG_APB_CLK_GATING_REG0_OFFSET, BIT27, NOT_ENABLE,
0, 0, CG_APB_RESET_REG0_OFFSET, BIT21, DO_RESET),
COMP_MUX_CONF("fd900000.hdmi20", root_clk_parent, DEFAULT_PLL9_RATIO, 0,
0, 0, 0,
0, 0, 0,
CG_BUS_CLK_GATING_REG3_OFFSET, BIT2, CG_APB_CLK_GATING_REG0_OFFSET, BIT6, NOT_ENABLE,
0, 0, CG_APB_RESET_REG0_OFFSET, BIT30, DO_RESET),
COMP_MUX_CONF("fad00000.tve100", root_clk_parent, DEFAULT_PLL11_RATIO, 0,
0, 0, 0,
0, 0, 0,
CG_BUS_CLK_GATING_REG2_OFFSET, BIT13, 0, 0, NOT_ENABLE,
CG_MODULE_RESET_REG1_OFFSET, BIT13, 0, 0, DO_RESET),
COMP_MUX_CONF("eth0_250m", eth_root_parent, 250000000, 0,
0, 0, 0, // clk mux
0, 0, 0, // clk div
CG_BUS_CLK_GATING_REG3_OFFSET, BIT4, // module clk gating
0, 0, // module apb gating
NOT_ENABLE,
0, 0, // module reset
0, 0, // module apb reset
NOT_RESET),
COMP_MUX_CONF("eth1_250m", eth_root_parent, 250000000, 0,
0, 0, 0, // clk mux
0, 0, 0, // clk div
CG_BUS_CLK_GATING_REG3_OFFSET, BIT5, // module clk gating
0, 0, // module apb gating
NOT_ENABLE,
0, 0, // module reset
0, 0, // module apb reset
NOT_RESET),
COMP_MUX_CONF("fcc00000.eth0", eth0_parent, 250000000, 0,
0, 0, 0, // clk mux
0, 0, 0, // clk div
CG_BUS_CLK_GATING_REG0_OFFSET, BIT16, // module clk gating
CG_APB_CLK_GATING_REG0_OFFSET, BIT9, // module apb gating
NOT_ENABLE,
CG_MODULE_RESET_REG1_OFFSET, BIT1, // module reset
CG_APB_RESET_REG0_OFFSET, BIT9, // module apb reset
NOT_RESET),
COMP_MUX_CONF("rmii0_refclk_i", eth0_parent, 50000000, 0,
0, 0, 0, // clk mux
0, 0, 0, // clk div
CG_MAC_CONFIG_REG_OFFSET, BIT4, // module clk gating
0, 0, // module apb gating
NOT_ENABLE,
0, 0, // module reset
0, 0, // module apb reset
NOT_RESET),
COMP_MUX_CONF("eth0_rxclk_i", eth0_parent, 125000000, 0,
0, 0, 0, // clk mux
0, 0, 0, // clk div
CG_MAC_CONFIG_REG_OFFSET, BIT5, // module clk gating
0, 0, // module apb gating
NOT_ENABLE,
0, 0, // module reset
0, 0, // module apb reset
NOT_RESET),
COMP_MUX_CONF("eth0_txclk_i", eth0_parent, 125000000, 0,
0, 0, 0, // clk mux
0, 0, 0, // clk div
CG_MAC_CONFIG_REG_OFFSET, BIT6, // module clk gating
0, 0, // module apb gating
NOT_ENABLE,
0, 0, // module reset
0, 0, // module apb reset
NOT_RESET),
COMP_MUX_CONF("eth0_extphy_clk", eth0_parent, 25000000, 0,
0, 0, 0, // clk mux
0, 0, 0, // clk div
CG_MAC_CONFIG_REG_OFFSET, BIT7, // module clk gating
0, 0, // module apb gating
NOT_ENABLE,
0, 0, // module reset
0, 0, // module apb reset
NOT_RESET),
COMP_MUX_CONF("fcd00000.eth1", eth1_parent, 250000000, 0,
0, 0, 0, // clk mux
0, 0, 0, // clk div
CG_BUS_CLK_GATING_REG0_OFFSET, BIT17, // module clk gating
CG_APB_CLK_GATING_REG0_OFFSET, BIT10, // module apb gating
NOT_ENABLE,
CG_MODULE_RESET_REG1_OFFSET, BIT2, // module reset
CG_APB_RESET_REG0_OFFSET, BIT10, // module apb reset
NOT_RESET),
COMP_MUX_CONF("rmii1_refclk_i", eth1_parent, 50000000, 0,
0, 0, 0, // clk mux
0, 0, 0, // clk div
CG_MAC_CONFIG_REG_OFFSET, BIT20, // module clk gating
0, 0, // module apb gating
NOT_ENABLE,
0, 0, // module reset
0, 0, // module apb reset
NOT_RESET),
COMP_MUX_CONF("eth1_rxclk_i", eth1_parent, 125000000, 0,
0, 0, 0, // clk mux
0, 0, 0, // clk div
CG_MAC_CONFIG_REG_OFFSET, BIT21, // module clk gating
0, 0, // module apb gating
NOT_ENABLE,
0, 0, // module reset
0, 0, // module apb reset
NOT_RESET),
COMP_MUX_CONF("eth1_txclk_i", eth1_parent, 125000000, 0,
0, 0, 0, // clk mux
0, 0, 0, // clk div
CG_MAC_CONFIG_REG_OFFSET, BIT22, // module clk gating
0, 0, // module apb gating
NOT_ENABLE,
0, 0, // module reset
0, 0, // module apb reset
NOT_RESET),
COMP_MUX_CONF("eth1_extphy_clk", eth1_parent, 25000000, 0,
0, 0, 0, // clk mux
0, 0, 0, // clk div
CG_MAC_CONFIG_REG_OFFSET, BIT23, // module clk gating
0, 0, // module apb gating
NOT_ENABLE,
0, 0, // module reset
0, 0, // module apb reset
NOT_RESET),
COMP_MUX_CONF("fe840000.ahbc", root_clk_parent, 12000000, 0,
0, 0, 0,
0, 0, 0,
0, 0, 0, 0, 0,
CG_MODULE_RESET_REG1_OFFSET, BIT14, 0, 0, NOT_RESET),
COMP_MUX_CONF("fe880000.rtc", rtc_clk_parent, 32768, 0,
0, 0, 0, // clk mux
0, 0, 0, // clk div
0, 0, // module clk gating
CG_APB_CLK_GATING_REG1_OFFSET, BIT19, // module apb gating
NOT_ENABLE,
0, 0, // module reset
CG_APB_RESET_REG1_OFFSET, BIT10, // module apb reset
NOT_RESET),
COMP_MUX_CONF("fe8a0000.wdt", root_clk_parent, 12000000, 0,
0, 0, 0, // clk mux
0, 0, 0, // clk div
0, 0, // module clk gating
CG_APB_CLK_GATING_REG2_OFFSET, BIT15, // module apb gating
NOT_ENABLE,
0, 0, // module reset
CG_APB_RESET_REG1_OFFSET, BIT28, // module apb reset
NOT_RESET),
COMP_MUX_CONF("f8900000.cc", root_clk_parent, 12000000, 0,
0, 0, 0,
0, 0, 0,
0, 0, 0, 0, NOT_ENABLE,
CG_CPU_DSP_RESET_REG_OFFSET, BIT2, 0, 0, NOT_RESET),
COMP_MUX_CONF("ssp_main_clk", sspmain_clk_parent, 12288000, 0,
0, 0, 0,
CG_SDC_UART_SSP_CKCTRL_REG_OFFSET, BIT24, WID6,
0, 0, 0, 0, 0,
0, 0, 0, 0, 0),
COMP_MUX_CONF("ssph_main_clk", sspmain_clk_parent, 12288000, 0,
0, 0, 0,
CG_HDMI_SPI_CKCTRL_REG_OFFSET, BIT0, WID6,
0, 0, 0, 0, 0,
0, 0, 0, 0, 0),
COMP_MUX_CONF("fa300000.ssp0",ssp_clk_parent, 12288000, 0,
CG_SSP_CKCTRL_REG0_OFFSET, BIT0, WID2,
CG_SSP_CKCTRL_REG0_OFFSET, BIT2, WID6,
CG_BUS_CLK_GATING_REG3_OFFSET, BIT8, CG_APB_CLK_GATING_REG2_OFFSET, BIT0, NOT_ENABLE,
0, 0, CG_APB_RESET_REG1_OFFSET, BIT13, DO_RESET),
COMP_MUX_CONF("fa320000.ssp1",ssp_clk_parent, 12288000, 0,
CG_SSP_CKCTRL_REG0_OFFSET, BIT8, WID2,
CG_SSP_CKCTRL_REG0_OFFSET, BIT10, WID6,
CG_BUS_CLK_GATING_REG3_OFFSET, BIT9, CG_APB_CLK_GATING_REG2_OFFSET, BIT1, NOT_ENABLE,
0, 0, CG_APB_RESET_REG1_OFFSET, BIT14, DO_RESET),
COMP_MUX_CONF("fe500000.ssp2",ssp_clk_parent, 12288000, 0,
CG_SSP_CKCTRL_REG1_OFFSET, BIT16, WID2,
CG_SSP_CKCTRL_REG1_OFFSET, BIT18, WID6,
CG_BUS_CLK_GATING_REG3_OFFSET, BIT15, CG_APB_CLK_GATING_REG2_OFFSET, BIT18, NOT_ENABLE,
0, 0, CG_APB_RESET_REG1_OFFSET, BIT11, DO_RESET),
COMP_MUX_CONF("fe4c0000.ssph",ssph_clk_parent, 12288000, 0,
CG_SSP_CKCTRL_REG1_OFFSET, BIT0, WID2,
CG_SSP_CKCTRL_REG1_OFFSET, BIT2, WID6,
CG_BUS_CLK_GATING_REG3_OFFSET, BIT12, CG_APB_CLK_GATING_REG2_OFFSET, BIT4, NOT_ENABLE,
0, 0, CG_APB_RESET_REG1_OFFSET, BIT17, DO_RESET),
COMP_MUX_CONF("fe4c0000.ssphm",ssph_clk_parent, 12288000, 0,
0, 0, 0,
0, 0, 0,
0, 0, 0, 0, 0,
0, 0, 0, 0, 0),
COMP_MUX_CONF("fa100000.dma200", root_clk_parent, 12000000, 0,
0, 0, 0,
0, 0, 0,
CG_BUS_CLK_GATING_REG2_OFFSET, BIT15, 0, 0, NOT_ENABLE,
CG_MODULE_RESET_REG1_OFFSET, BIT15, 0, 0, DO_RESET),
COMP_MUX_CONF("fa200000.dma201", root_clk_parent, 12000000, 0,
0, 0, 0,
0, 0, 0,
CG_BUS_CLK_GATING_REG2_OFFSET, BIT16, 0, 0, NOT_ENABLE,
CG_MODULE_RESET_REG1_OFFSET, BIT16, 0, 0, DO_RESET),
COMP_MUX_CONF("fe540000.irdet", root_clk_parent, 12000000, 0,
0, 0, 0,
0, 0, 0,
0, 0, CG_APB_CLK_GATING_REG1_OFFSET, BIT16, DO_ENABLE,
0, 0, CG_APB_RESET_REG1_OFFSET, BIT8, DO_RESET),
COMP_MUX_CONF("fdb00000.lcd210", lcd210_clk_parent, 27000000, 0,
CG_LCD_CKCTRL_REG_OFFSET, BIT8, WID2,
CG_LCD_CKCTRL_REG_OFFSET, BIT10, WID6,
CG_BUS_CLK_GATING_REG0_OFFSET, BIT14, CG_APB_CLK_GATING_REG0_OFFSET, BIT7, DO_ENABLE,
CG_MODULE_RESET_REG0_OFFSET, BIT5, CG_APB_RESET_REG0_OFFSET, BIT7, NOT_RESET),
COMP_MUX_CONF("fd700000.GPD", root_clk_parent, 12000000, 0,
0, 0, 0,
0, 0, 0,
0, 0, CG_APB_CLK_GATING_REG0_OFFSET, BIT15, DO_ENABLE,
CG_MODULE_RESET_REG0_OFFSET, BIT10, CG_APB_RESET_REG0_OFFSET, BIT15, NOT_RESET),
COMP_MUX_CONF("fda00000.lcd310", lcd310_clk_parent, 148500000, 0,
CG_LCD_CKCTRL_REG_OFFSET, BIT16, WID2,
CG_LCD_CKCTRL_REG_OFFSET, BIT18, WID6,
CG_BUS_CLK_GATING_REG0_OFFSET, BIT15, CG_APB_CLK_GATING_REG0_OFFSET, BIT8, DO_ENABLE,
CG_MODULE_RESET_REG0_OFFSET, BIT6, CG_APB_RESET_REG0_OFFSET, BIT8, NOT_RESET),
#ifdef CONFIG_NVT_FPGA_EMULATION
COMP_MUX_CONF("fe300000.i2c0", i2c_clk_parent, 24000000, 0,
0, 0, 0,
0, 0, 0,
0, 0, CG_APB_CLK_GATING_REG1_OFFSET, BIT8, NOT_ENABLE,
0, 0, CG_APB_RESET_REG1_OFFSET, BIT0, DO_RESET),
COMP_MUX_CONF("fe320000.i2c1", i2c_clk_parent, 24000000, 0,
0, 0, 0,
0, 0, 0,
0, 0, CG_APB_CLK_GATING_REG1_OFFSET, BIT9, NOT_ENABLE,
0, 0, CG_APB_RESET_REG1_OFFSET, BIT1, DO_RESET),
COMP_MUX_CONF("fe340000.i2c2", i2c_clk_parent, 24000000, 0,
0, 0, 0,
0, 0, 0,
0, 0, CG_APB_CLK_GATING_REG1_OFFSET, BIT10, NOT_ENABLE,
0, 0, CG_APB_RESET_REG1_OFFSET, BIT2, DO_RESET),
COMP_MUX_CONF("fe360000.i2c3", i2c_clk_parent, 24000000, 0,
0, 0, 0,
0, 0, 0,
0, 0, CG_APB_CLK_GATING_REG1_OFFSET, BIT11, NOT_ENABLE,
0, 0, CG_APB_RESET_REG1_OFFSET, BIT3, DO_RESET),
COMP_MUX_CONF("fe380000.i2c4", i2c_clk_parent, 24000000, 0,
0, 0, 0,
0, 0, 0,
0, 0, CG_APB_CLK_GATING_REG1_OFFSET, BIT12, NOT_ENABLE,
0, 0, CG_APB_RESET_REG1_OFFSET, BIT4, DO_RESET),
COMP_MUX_CONF("fe3a0000.i2c5", i2c_clk_parent, 24000000, 0,
0, 0, 0,
0, 0, 0,
0, 0, CG_APB_CLK_GATING_REG1_OFFSET, BIT13, NOT_ENABLE,
0, 0, CG_APB_RESET_REG1_OFFSET, BIT5, DO_RESET),
COMP_MUX_CONF("fe200000.uart", uart_clk_parent, 48000000, 0,
CG_SDC_UART_SSP_CKCTRL_REG_OFFSET, BIT6, WID2,
CG_SDC_UART_SSP_CKCTRL_REG_OFFSET, BIT0, WID6,
0, 0, CG_APB_CLK_GATING_REG2_OFFSET, BIT9, DO_ENABLE,
0, 0, CG_APB_RESET_REG1_OFFSET, BIT22, NOT_RESET),
COMP_MUX_CONF("fe220000.uart", uart_clk_parent, 48000000, 0,
CG_SDC_UART_SSP_CKCTRL_REG_OFFSET, BIT6, WID2,
CG_SDC_UART_SSP_CKCTRL_REG_OFFSET, BIT0, WID6,
0, 0, CG_APB_CLK_GATING_REG2_OFFSET, BIT10, DO_ENABLE,
0, 0, CG_APB_RESET_REG1_OFFSET, BIT23, DO_RESET),
COMP_MUX_CONF("fe240000.uart", uart_clk_parent, 48000000, 0,
CG_SDC_UART_SSP_CKCTRL_REG_OFFSET, BIT6, WID2,
CG_SDC_UART_SSP_CKCTRL_REG_OFFSET, BIT0, WID6,
0, 0, CG_APB_CLK_GATING_REG2_OFFSET, BIT11, DO_ENABLE,
0, 0, CG_APB_RESET_REG1_OFFSET, BIT24, DO_RESET),
COMP_MUX_CONF("fe260000.uart", uart_clk_parent, 48000000, 0,
CG_SDC_UART_SSP_CKCTRL_REG_OFFSET, BIT6, WID2,
CG_SDC_UART_SSP_CKCTRL_REG_OFFSET, BIT0, WID6,
0, 0, CG_APB_CLK_GATING_REG2_OFFSET, BIT12, DO_ENABLE,
0, 0, CG_APB_RESET_REG1_OFFSET, BIT25, DO_RESET),
COMP_MUX_CONF("fe400000.gpio", root_clk_parent, 24000000, 0,
0, 0, 0,
0, 0, 0,
0, 0, CG_APB_CLK_GATING_REG1_OFFSET, BIT3, DO_ENABLE,
0, 0, CG_APB_RESET_REG0_OFFSET, BIT27, DO_RESET),
COMP_MUX_CONF("fe420000.gpio", root_clk_parent, 24000000, 0,
0, 0, 0,
0, 0, 0,
0, 0, CG_APB_CLK_GATING_REG1_OFFSET, BIT4, DO_ENABLE,
0, 0, CG_APB_RESET_REG0_OFFSET, BIT28, DO_RESET),
COMP_MUX_CONF("fe440000.gpio", root_clk_parent, 24000000, 0,
0, 0, 0,
0, 0, 0,
0, 0, CG_APB_CLK_GATING_REG1_OFFSET, BIT5, DO_ENABLE,
0, 0, CG_APB_RESET_REG0_OFFSET, BIT29, DO_RESET),
COMP_MUX_CONF("fe640000.gpio", root_clk_parent, 24000000, 0,
0, 0, 0,
0, 0, 0,
0, 0, CG_APB_CLK_GATING_REG1_OFFSET, BIT24, DO_ENABLE,
0, 0, CG_APB_RESET_REG0_OFFSET, BIT31, DO_RESET),
COMP_MUX_CONF("fe8c0000.timer", root_clk_parent, 24000000, 0,
0, 0, 0,
0, 0, 0,
0, 0, CG_APB_CLK_GATING_REG2_OFFSET, BIT7, DO_ENABLE,
0, 0, CG_APB_RESET_REG1_OFFSET, BIT20, DO_RESET),
COMP_MUX_CONF("fa600000.mmc", mmc_clk_parent, 24000000, 0,
0, 0, 0,
CG_SDC_UART_SSP_CKCTRL_REG_OFFSET, BIT8, WID6,
CG_BUS_CLK_GATING_REG2_OFFSET, BIT10, 0, 0, NOT_ENABLE,
CG_MODULE_RESET_REG1_OFFSET, BIT10, CG_APB_RESET_REG1_OFFSET, BIT25, DO_RESET),
COMP_MUX_CONF("fa900000.nand", spi_clk_parent, 12000000, 0,
0, 0, 0,
0, 0, 0,
CG_BUS_CLK_GATING_REG2_OFFSET, BIT9, 0, 0, NOT_ENABLE,
CG_MODULE_RESET_REG1_OFFSET, BIT11, 0, 0, DO_RESET),
COMP_MUX_CONF("vcap_aclk_m0", vcap_aclk_m_parent, 20000000, 0,
0, 0, 0,
0, 0, 0,
CG_BUS_CLK_GATING_REG1_OFFSET, BIT6, 0, 0, NOT_ENABLE,
0, 0, 0, 0, 0),
COMP_MUX_CONF("vcap_aclk_m1", vcap_aclk_m_parent, 20000000, 0,
0, 0, 0,
0, 0, 0,
CG_BUS_CLK_GATING_REG1_OFFSET, BIT7, 0, 0, NOT_ENABLE,
0, 0, 0, 0, 0),
COMP_MUX_CONF("vcap_aclk_m2", vcap_aclk_m_parent, 20000000, 0,
0, 0, 0,
0, 0, 0,
CG_BUS_CLK_GATING_REG1_OFFSET, BIT8, 0, 0, NOT_ENABLE,
0, 0, 0, 0, 0),
COMP_MUX_CONF("vcap_aclk_s", vcap_aclk_s_parent, 12000000, 0,
0, 0, 0,
0, 0, 0,
CG_BUS_CLK_GATING_REG1_OFFSET, BIT10, 0, 0, NOT_ENABLE,
0, 0, 0, 0, 0),
COMP_MUX_CONF("vcap_mclk", vcap_mclk_parent, 20000000, 0,
CG_VCAP_CKCTRL_REG_OFFSET, BIT31, WID1,
0, 0, 0,
CG_BUS_CLK_GATING_REG1_OFFSET, BIT9, 0, 0, NOT_ENABLE,
CG_MODULE_RESET_REG0_OFFSET, BIT26, 0, 0, DO_RESET),
COMP_MUX_CONF("vcap_patclk", vcap_patclk_parent, 24000000, 0,
CG_VCAP_CKCTRL_REG_OFFSET, BIT28, WID2,
CG_VCAP_CKCTRL_REG_OFFSET, BIT20, WID6,
CG_BUS_CLK_GATING_REG1_OFFSET, BIT13, 0, 0, NOT_ENABLE,
0, 0, 0, 0, 0),
COMP_MUX_CONF("fd100000.osg", osg_clk_parent, 16000000, 0, /* mclk default is pll0 with 16M */
CG_OSG_CKCTRL_REG_OFFSET, BIT31, WID1, /* mux_reg */
0, 0, 0, /* div_reg */
CG_BUS_CLK_GATING_REG0_OFFSET/*AXI*/, BIT21, CG_APB_CLK_GATING_REG0_OFFSET/*APB*/, BIT11, NOT_ENABLE, /* bus_clk_regj. AXI + APB */
CG_MODULE_RESET_REG0_OFFSET/*0x50*/, BIT9, CG_APB_RESET_REG0_OFFSET/*0x58*/, BIT11, DO_RESET), /* module_rst_reg */
COMP_MUX_CONF("ext0_clk", ext0_clk_parent, 27000000, 0,
CG_EXT_CKCTRL_REG_OFFSET, BIT1, WID2,
CG_EXT_CKCTRL_REG_OFFSET, BIT3, WID5,
CG_EXT_CKCTRL_REG_OFFSET, BIT0, 0, 0, 0,
0, 0, 0, 0, 0),
COMP_MUX_CONF("ext1_clk", ext1_clk_parent, 27000000, 0,
CG_EXT_CKCTRL_REG_OFFSET, BIT9, WID2,
CG_EXT_CKCTRL_REG_OFFSET, BIT11, WID5,
CG_EXT_CKCTRL_REG_OFFSET, BIT8, 0, 0, 0,
0, 0, 0, 0, 0),
COMP_MUX_CONF("faa00000.gm2d", gm2d_clk_parent, 20000000, 0, /* hclk default is 12MHz */
0, 0, 0, /* mux_reg */
0, 0, 0, /* div_reg */
CG_BUS_CLK_GATING_REG2_OFFSET/*0x68*/, BIT12, 0, 0, NOT_ENABLE, /* bus_clk_reg.*/
CG_MODULE_RESET_REG1_OFFSET /*0x54*/, BIT12, 0, 0, DO_RESET), /* module_rst_reg */
COMP_MUX_CONF("fd500000.ssca", ssca_clk_parent, 20000000, 0, /* hclk default is 12MHz */
CG_SSCA_CKCTRL_REG_OFFSET/*0x160*/, BIT31, WID1, /* mux_reg */
0, 0, 0, /* div_reg */
CG_APB_CLK_GATING_REG0_OFFSET/*0x60*/, BIT27, CG_APB_CLK_GATING_REG0_OFFSET /*0x70*/, BIT16, NOT_ENABLE, /* bus_clk_reg.*/
CG_MODULE_RESET_REG0_OFFSET /*0x50*/, BIT12, CG_APB_RESET_REG0_OFFSET /*0x58*/, BIT16, DO_RESET), /* module_rst_reg */
COMP_MUX_CONF("vpe_clk", vpe_clk_parent, 16000000, 0, /* mclk default is pll0 with 16M */
CG_VPE536_CKCTRL_REG_OFFSET, BIT31, WID1, /* mux_reg */
0, 0, 0,
CG_BUS_CLK_GATING_REG0_OFFSET, BIT30, CG_APB_CLK_GATING_REG2_OFFSET, BIT17, NOT_ENABLE,
CG_MODULE_RESET_REG0_OFFSET, BIT15, CG_APB_RESET_REG0_OFFSET, BIT26, DO_RESET),
COMP_MUX_CONF("dei_aclk", dei_aclk_parent, 16000000, 0, /* mclk default is pll0 with 16M */
0, 0, 0, /* mux_reg */
0, 0, 0,
CG_BUS_CLK_GATING_REG1_OFFSET, BIT11, 0, 0, NOT_ENABLE,
0, 0, 0, 0, 0),
COMP_MUX_CONF("dei_mclk", dei_mclk_parent, 16000000, 0, /* mclk default is pll0 with 16M */
CG_VPE316_CKCTRL_REG_OFFSET, BIT31, WID1, /* mux_reg */
0, 0, 0,
CG_BUS_CLK_GATING_REG1_OFFSET, BIT12, CG_APB_CLK_GATING_REG0_OFFSET, BIT19, NOT_ENABLE,
CG_MODULE_RESET_REG0_OFFSET, BIT28, CG_APB_RESET_REG0_OFFSET, BIT19, DO_RESET),
COMP_MUX_CONF("fac00000.jpg", jpg_clk_parent, 300000000, 0, /* name, parent_names, current_rate, parent_idx */
0, 0, 0, /* mux_reg, bit, bit_width */
0, 0, 0, /* div_reg, bit, bit_width */
CG_BUS_CLK_GATING_REG2_OFFSET, BIT1, 0, 0, NOT_ENABLE, /* bus_clk_reg , bit, apb_clk_reg, bit, do_enable */
CG_MODULE_RESET_REG1_OFFSET, BIT3, 0, 0, DO_RESET),
COMP_MUX_CONF("venc_aclk", venc_aclk_parent, 12000000, 0, /* name, parent_names, current_rate, parent_idx */
0, 0, 0, /* mux_reg, bit, bit_width */
0, 0, 0, /* div_reg, bit, bit_width */
CG_BUS_CLK_GATING_REG1_OFFSET, BIT3, 0, 0, NOT_ENABLE,
CG_MODULE_RESET_REG0_OFFSET, BIT27, 0, 0, DO_RESET),
COMP_MUX_CONF("venc_mclk", venc_mclk_parent, 20000000, 0, /* name, parent_names, current_rate, parent_idx */
CG_VENC_CKCTRL_REG_OFFSET, BIT31, WID1, /* mux_reg, bit, bit_width */
0, 0, 0, /* div_reg, bit, bit_width */
0, 0, 0, 0, 0,
CG_MODULE_RESET_REG1_OFFSET, BIT19, 0, 0, DO_RESET),
COMP_MUX_CONF("venc_pclk", venc_pclk_parent, 12000000, 0, /* name, parent_names, current_rate, parent_idx */
0, 0, 0, /* mux_reg, bit, bit_width */
0, 0, 0, /* div_reg, bit, bit_width */
CG_APB_CLK_GATING_REG0_OFFSET, BIT28, 0, 0, NOT_ENABLE,
CG_APB_RESET_REG0_OFFSET, BIT17, 0, 0, DO_RESET),
COMP_MUX_CONF("h264d_mclk", h264d_mclk_parent, 16000000, 0,
CG_H264D_CKCTRL_REG_OFFSET, BIT31, WID1,
0, 0, 0,
0, 0, 0, 0, 0,
CG_MODULE_RESET_REG0_OFFSET, BIT7, 0, 0, DO_RESET),
COMP_MUX_CONF("h265d_mclk", h265d_mclk_parent, 16000000, 0,
CG_H265D_CKCTRL_REG_OFFSET, BIT30, WID1,
0, 0, 0,
0, 0, 0, 0, 0,
CG_MODULE_RESET_REG0_OFFSET, BIT8, 0, 0, DO_RESET),
COMP_MUX_CONF("h26xd_pclk", h26xd_pclk_parent, 12000000, 0,
0, 0, 0,
0, 0, 0,
CG_APB_CLK_GATING_REG0_OFFSET, BIT18, 0, 0, NOT_ENABLE,
CG_APB_RESET_REG0_OFFSET, BIT18, 0, 0, DO_RESET),
COMP_MUX_CONF("h264d_aclk", h264d_aclk_parent, 16000000, 0,
0, 0, 0,
0, 0, 0,
CG_BUS_CLK_GATING_REG0_OFFSET, BIT20, 0, 0, NOT_ENABLE,
0, 0, 0, 0, 0),
COMP_MUX_CONF("h265d_aclk", h265d_aclk_parent, 16000000, 0,
CG_H265D_CKCTRL_REG_OFFSET, BIT30, WID1,
0, 0, 0,
CG_BUS_CLK_GATING_REG0_OFFSET, BIT29, 0, 0, NOT_ENABLE,
0, 0, 0, 0, 0),
#else
COMP_MUX_CONF("pll4div2", pll4div2_clk_parent, 150000000, 0,
0, 0, 0,
0, 0, SWDIV2,
0, 0, 0, 0, 0,
0, 0, 0, 0, 0),
COMP_MUX_CONF("fe300000.i2c0", i2c_clk_parent, 150000000, 0,
0, 0, 0,
0, 0, 0,
0, 0, CG_APB_CLK_GATING_REG1_OFFSET, BIT8, NOT_ENABLE,
0, 0, CG_APB_RESET_REG1_OFFSET, BIT0, DO_RESET),
COMP_MUX_CONF("fe320000.i2c1", i2c_clk_parent, 150000000, 0,
0, 0, 0,
0, 0, 0,
0, 0, CG_APB_CLK_GATING_REG1_OFFSET, BIT9, NOT_ENABLE,
0, 0, CG_APB_RESET_REG1_OFFSET, BIT1, DO_RESET),
COMP_MUX_CONF("fe340000.i2c2", i2c_clk_parent, 150000000, 0,
0, 0, 0,
0, 0, 0,
0, 0, CG_APB_CLK_GATING_REG1_OFFSET, BIT10, NOT_ENABLE,
0, 0, CG_APB_RESET_REG1_OFFSET, BIT2, DO_RESET),
COMP_MUX_CONF("fe360000.i2c3", i2c_clk_parent, 150000000, 0,
0, 0, 0,
0, 0, 0,
0, 0, CG_APB_CLK_GATING_REG1_OFFSET, BIT11, NOT_ENABLE,
0, 0, CG_APB_RESET_REG1_OFFSET, BIT3, DO_RESET),
COMP_MUX_CONF("fe380000.i2c4", i2c_clk_parent, 150000000, 0,
0, 0, 0,
0, 0, 0,
0, 0, CG_APB_CLK_GATING_REG1_OFFSET, BIT12, NOT_ENABLE,
0, 0, CG_APB_RESET_REG1_OFFSET, BIT4, DO_RESET),
COMP_MUX_CONF("fe3a0000.i2c5", i2c_clk_parent, 150000000, 0,
0, 0, 0,
0, 0, 0,
0, 0, CG_APB_CLK_GATING_REG1_OFFSET, BIT13, NOT_ENABLE,
0, 0, CG_APB_RESET_REG1_OFFSET, BIT5, DO_RESET),
COMP_MUX_CONF("fe200000.uart", uart_clk_parent, 48000000, 0,
CG_SDC_UART_SSP_CKCTRL_REG_OFFSET, BIT6, WID2,
CG_SDC_UART_SSP_CKCTRL_REG_OFFSET, BIT0, WID6,
0, 0, CG_APB_CLK_GATING_REG2_OFFSET, BIT9, DO_ENABLE,
0, 0, CG_APB_RESET_REG1_OFFSET, BIT22, NOT_RESET),
COMP_MUX_CONF("fe220000.uart", uart_clk_parent, 48000000, 0,
CG_SDC_UART_SSP_CKCTRL_REG_OFFSET, BIT6, WID2,
CG_SDC_UART_SSP_CKCTRL_REG_OFFSET, BIT0, WID6,
0, 0, CG_APB_CLK_GATING_REG2_OFFSET, BIT10, DO_ENABLE,
0, 0, CG_APB_RESET_REG1_OFFSET, BIT23, DO_RESET),
COMP_MUX_CONF("fe240000.uart", uart_clk_parent, 48000000, 0,
CG_SDC_UART_SSP_CKCTRL_REG_OFFSET, BIT6, WID2,
CG_SDC_UART_SSP_CKCTRL_REG_OFFSET, BIT0, WID6,
0, 0, CG_APB_CLK_GATING_REG2_OFFSET, BIT11, DO_ENABLE,
0, 0, CG_APB_RESET_REG1_OFFSET, BIT24, DO_RESET),
COMP_MUX_CONF("fe260000.uart", uart_clk_parent, 48000000, 0,
CG_SDC_UART_SSP_CKCTRL_REG_OFFSET, BIT6, WID2,
CG_SDC_UART_SSP_CKCTRL_REG_OFFSET, BIT0, WID6,
0, 0, CG_APB_CLK_GATING_REG2_OFFSET, BIT12, DO_ENABLE,
0, 0, CG_APB_RESET_REG1_OFFSET, BIT25, DO_RESET),
COMP_MUX_CONF("fe400000.gpio", root_clk_parent, 150000000, 0,
0, 0, 0,
0, 0, 0,
0, 0, CG_APB_CLK_GATING_REG1_OFFSET, BIT3, DO_ENABLE,
0, 0, CG_APB_RESET_REG0_OFFSET, BIT27, DO_RESET),
COMP_MUX_CONF("fe420000.gpio", root_clk_parent, 150000000, 0,
0, 0, 0,
0, 0, 0,
0, 0, CG_APB_CLK_GATING_REG1_OFFSET, BIT4, DO_ENABLE,
0, 0, CG_APB_RESET_REG0_OFFSET, BIT28, DO_RESET),
COMP_MUX_CONF("fe440000.gpio", root_clk_parent, 150000000, 0,
0, 0, 0,
0, 0, 0,
0, 0, CG_APB_CLK_GATING_REG1_OFFSET, BIT5, DO_ENABLE,
0, 0, CG_APB_RESET_REG0_OFFSET, BIT29, DO_RESET),
COMP_MUX_CONF("fe640000.gpio", root_clk_parent, 150000000, 0,
0, 0, 0,
0, 0, 0,
0, 0, CG_APB_CLK_GATING_REG1_OFFSET, BIT24, DO_ENABLE,
0, 0, CG_APB_RESET_REG0_OFFSET, BIT31, DO_RESET),
COMP_MUX_CONF("fe8c0000.timer", root_clk_parent, 150000000, 0,
0, 0, 0,
0, 0, 0,
0, 0, CG_APB_CLK_GATING_REG2_OFFSET, BIT7, DO_ENABLE,
0, 0, CG_APB_RESET_REG1_OFFSET, BIT20, DO_RESET),
COMP_MUX_CONF("pll6div2", pll6div2_clk_parent, 100000000, 0,
0, 0, 0,
0, 0, SWDIV2,
0, 0, 0, 0, 0,
0, 0, 0, 0, 0),
COMP_MUX_CONF("fa600000.mmc", mmc_clk_parent, 100000000, 0,
0, 0, 0,
CG_SDC_UART_SSP_CKCTRL_REG_OFFSET, BIT8, WID6,
CG_BUS_CLK_GATING_REG2_OFFSET, BIT10, 0, 0, NOT_ENABLE,
CG_MODULE_RESET_REG1_OFFSET, BIT10, CG_APB_RESET_REG1_OFFSET, BIT25, DO_RESET),
COMP_MUX_CONF("fa900000.nand", spi_clk_parent, 150000000, 0,
CG_HDMI_SPI_CKCTRL_REG_OFFSET, BIT28, WID2,
0, 0, 0,
CG_BUS_CLK_GATING_REG2_OFFSET, BIT9, 0, 0, NOT_ENABLE,
CG_MODULE_RESET_REG1_OFFSET, BIT11, 0, 0, DO_RESET),
COMP_MUX_CONF("vcap_aclk_m0", vcap_aclk_m_parent, 400000000, 0,
0, 0, 0,
0, 0, 0,
CG_BUS_CLK_GATING_REG1_OFFSET, BIT6, 0, 0, NOT_ENABLE,
0, 0, 0, 0, 0),
COMP_MUX_CONF("vcap_aclk_m1", vcap_aclk_m_parent, 400000000, 0,
0, 0, 0,
0, 0, 0,
CG_BUS_CLK_GATING_REG1_OFFSET, BIT7, 0, 0, NOT_ENABLE,
0, 0, 0, 0, 0),
COMP_MUX_CONF("vcap_aclk_m2", vcap_aclk_m_parent, 400000000, 0,
0, 0, 0,
0, 0, 0,
CG_BUS_CLK_GATING_REG1_OFFSET, BIT8, 0, 0, NOT_ENABLE,
0, 0, 0, 0, 0),
COMP_MUX_CONF("vcap_aclk_s", vcap_aclk_s_parent, 300000000, 0,
0, 0, 0,
0, 0, 0,
CG_BUS_CLK_GATING_REG1_OFFSET, BIT10, 0, 0, NOT_ENABLE,
0, 0, 0, 0, 0),
COMP_MUX_CONF("vcap_mclk", vcap_mclk_parent, 400000000, 0,
CG_VCAP_CKCTRL_REG_OFFSET, BIT31, WID1,
0, 0, 0,
CG_BUS_CLK_GATING_REG1_OFFSET, BIT9, 0, 0, NOT_ENABLE,
CG_MODULE_RESET_REG0_OFFSET, BIT26, 0, 0, DO_RESET),
COMP_MUX_CONF("vcap_patclk", vcap_patclk_parent, 74250000, 0,
CG_VCAP_CKCTRL_REG_OFFSET, BIT28, WID2,
CG_VCAP_CKCTRL_REG_OFFSET, BIT20, WID6,
CG_BUS_CLK_GATING_REG1_OFFSET, BIT13, 0, 0, NOT_ENABLE,
0, 0, 0, 0, 0),
COMP_MUX_CONF("fd100000.osg", osg_clk_parent, 40000000, 1, /* mclk default is pll1 with 400M */
CG_OSG_CKCTRL_REG_OFFSET, BIT31, WID1, /* mux_reg */
0, 0, 0, /* div_reg */
CG_BUS_CLK_GATING_REG0_OFFSET/*AXI*/, BIT21, CG_APB_CLK_GATING_REG0_OFFSET/*APB*/, BIT11, NOT_ENABLE, /* bus_clk_regj. AXI + APB */
CG_MODULE_RESET_REG0_OFFSET/*0x50*/, BIT9, CG_APB_RESET_REG0_OFFSET/*0x58*/, BIT11, DO_RESET), /* module_rst_reg */
COMP_MUX_CONF("ext0_clk", ext0_clk_parent, 27000000, 0,
CG_EXT_CKCTRL_REG_OFFSET, BIT1, WID2,
CG_EXT_CKCTRL_REG_OFFSET, BIT3, WID5,
CG_EXT_CKCTRL_REG_OFFSET, BIT0, 0, 0, 0,
0, 0, 0, 0, 0),
COMP_MUX_CONF("ext1_clk", ext1_clk_parent, 27000000, 0,
CG_EXT_CKCTRL_REG_OFFSET, BIT9, WID2,
CG_EXT_CKCTRL_REG_OFFSET, BIT11, WID5,
CG_EXT_CKCTRL_REG_OFFSET, BIT8, 0, 0, 0,
0, 0, 0, 0, 0),
COMP_MUX_CONF("faa00000.gm2d", gm2d_clk_parent, 300000000, 0, /* hclk default is 370MHz */
0, 0, 0, /* mux_reg */
0, 0, 0, /* div_reg */
CG_BUS_CLK_GATING_REG2_OFFSET/*0x68*/, BIT12, 0, 0, NOT_ENABLE, /* bus_clk_reg.*/
CG_MODULE_RESET_REG1_OFFSET /*0x54*/, BIT12, 0, 0, DO_RESET), /* module_rst_reg */
COMP_MUX_CONF("fd500000.ssca", ssca_clk_parent, 40000000, 0, /* hclk default is 12MHz */
CG_SSCA_CKCTRL_REG_OFFSET/*0x160*/, BIT31, WID1, /* mux_reg */
0, 0, 0, /* div_reg */
CG_APB_CLK_GATING_REG0_OFFSET/*0x60*/, BIT27, CG_APB_CLK_GATING_REG0_OFFSET /*0x70*/, BIT16, NOT_ENABLE, /* bus_clk_reg.*/
CG_MODULE_RESET_REG0_OFFSET /*0x50*/, BIT12, CG_APB_RESET_REG0_OFFSET /*0x58*/, BIT16, DO_RESET), /* module_rst_reg */
COMP_MUX_CONF("vpe_clk", vpe_clk_parent, 16000000, 0, /* mclk default is pll0 with 16M */
CG_VPE536_CKCTRL_REG_OFFSET, BIT31, WID1, /* mux_reg */
0, 0, 0,
CG_BUS_CLK_GATING_REG0_OFFSET, BIT30, CG_APB_CLK_GATING_REG2_OFFSET, BIT17, NOT_ENABLE,
CG_MODULE_RESET_REG0_OFFSET, BIT15, CG_APB_RESET_REG0_OFFSET, BIT26, DO_RESET),
COMP_MUX_CONF("dei_aclk", dei_aclk_parent, 16000000, 0, /* mclk default is pll0 with 16M */
0, 0, 0, /* mux_reg */
0, 0, 0,
CG_BUS_CLK_GATING_REG1_OFFSET, BIT11, 0, 0, NOT_ENABLE,
0, 0, 0, 0, 0),
COMP_MUX_CONF("dei_mclk", dei_mclk_parent, 16000000, 0, /* mclk default is pll0 with 16M */
CG_VPE316_CKCTRL_REG_OFFSET, BIT31, WID1, /* mux_reg */
0, 0, 0,
CG_BUS_CLK_GATING_REG1_OFFSET, BIT12, CG_APB_CLK_GATING_REG0_OFFSET, BIT19, NOT_ENABLE,
CG_MODULE_RESET_REG0_OFFSET, BIT28, CG_APB_RESET_REG0_OFFSET, BIT19, DO_RESET),
COMP_MUX_CONF("fac00000.jpg", jpg_clk_parent, 300000000, 0, /* name, parent_names, current rate, parent_idx */
0, 0, 0, /* mux_reg, bit, bit_width */
0, 0, 0, /* div_reg, bit, bit_width */
CG_BUS_CLK_GATING_REG2_OFFSET, BIT1, 0, 0, NOT_ENABLE, /* bus_clk_reg , bit, apb_clk_reg, bit, do_enable */
CG_MODULE_RESET_REG1_OFFSET, BIT3, 0, 0, DO_RESET),
COMP_MUX_CONF("venc_aclk", venc_aclk_parent, 300000000, 0, /* name, parent_names, current_rate, parent_idx */
0, 0, 0, /* mux_reg, bit, bit_width */
0, 0, 0, /* div_reg, bit, bit_width */
CG_BUS_CLK_GATING_REG1_OFFSET, BIT3, 0, 0, NOT_ENABLE,
CG_MODULE_RESET_REG0_OFFSET, BIT27, 0, 0, DO_RESET),
COMP_MUX_CONF("venc_mclk", venc_mclk_parent, 380000000, 0, /* name, parent_names, current_rate, parent_idx */
CG_VENC_CKCTRL_REG_OFFSET, BIT31, WID1, /* mux_reg, bit, bit_width */
0, 0, 0, /* div_reg, bit, bit_width */
0, 0, 0, 0, 0,
CG_MODULE_RESET_REG1_OFFSET, BIT19, 0, 0, DO_RESET),
COMP_MUX_CONF("venc_pclk", venc_pclk_parent, 300000000, 0, /* name, parent_names, current_rate, parent_idx */
0, 0, 0, /* mux_reg, bit, bit_width */
0, 0, 0, /* div_reg, bit, bit_width */
CG_APB_CLK_GATING_REG0_OFFSET, BIT28, 0, 0, NOT_ENABLE,
CG_APB_RESET_REG0_OFFSET, BIT17, 0, 0, DO_RESET),
COMP_MUX_CONF("h264d_mclk", h264d_mclk_parent, 500000000, 0,
CG_H264D_CKCTRL_REG_OFFSET, BIT31, WID1,
0, 0, 0,
0, 0, 0, 0, 0,
CG_MODULE_RESET_REG0_OFFSET, BIT7, 0, 0, DO_RESET),
COMP_MUX_CONF("h265d_mclk", h265d_mclk_parent, 350000000, 0,
CG_H265D_CKCTRL_REG_OFFSET, BIT31, WID1,
0, 0, 0,
0, 0, 0, 0, 0,
CG_MODULE_RESET_REG0_OFFSET, BIT8, 0, 0, DO_RESET),
COMP_MUX_CONF("h26xd_pclk", h26xd_pclk_parent, 150000000, 0,
0, 0, 0,
0, 0, 0,
CG_APB_CLK_GATING_REG0_OFFSET, BIT18, 0, 0, NOT_ENABLE,
CG_APB_RESET_REG0_OFFSET, BIT18, 0, 0, DO_RESET),
COMP_MUX_CONF("h264d_aclk", h264d_aclk_parent, 500000000, 0,
0, 0, 0,
0, 0, 0,
CG_BUS_CLK_GATING_REG0_OFFSET, BIT20, 0, 0, NOT_ENABLE,
0, 0, 0, 0, 0),
COMP_MUX_CONF("h265d_aclk", h265d_aclk_parent, 350000000, 0,
CG_H265D_CKCTRL_REG_OFFSET, BIT30, WID1,
0, 0, 0,
CG_BUS_CLK_GATING_REG0_OFFSET, BIT29, 0, 0, NOT_ENABLE,
0, 0, 0, 0, 0),
COMP_MUX_CONF("sce_aclk", sce_clk_parent, 400000000, 0,
CG_CRYPTO_CKCTRL_REG_OFFSET, BIT31, WID1,
0, 0, 0,
CG_BUS_CLK_GATING_REG2_OFFSET, BIT0, 0, 0, NOT_ENABLE,
CG_MODULE_RESET_REG1_OFFSET, BIT0, 0, 0, NOT_RESET),
COMP_MUX_CONF("fec60000.crypto", sce_clk_parent, 400000000, 0,
0, 0, 0,
0, 0, 0,
CG_BUS_CLK_GATING_REG1_OFFSET, BIT2, CG_APB_CLK_GATING_REG1_OFFSET, BIT21, NOT_ENABLE,
CG_MODULE_RESET_REG0_OFFSET, BIT17, 0, 0, NOT_RESET),
COMP_MUX_CONF("fec80000.hash", sce_clk_parent, 400000000, 0,
0, 0, 0,
0, 0, 0,
CG_BUS_CLK_GATING_REG1_OFFSET, BIT0, CG_APB_CLK_GATING_REG1_OFFSET, BIT2, NOT_ENABLE,
CG_MODULE_RESET_REG0_OFFSET, BIT18, 0, 0, NOT_RESET),
COMP_MUX_CONF("feca0000.rsa", sce_clk_parent, 400000000, 0,
0, 0, 0,
0, 0, 0,
CG_BUS_CLK_GATING_REG1_OFFSET, BIT1, CG_APB_CLK_GATING_REG1_OFFSET, BIT20, NOT_ENABLE,
CG_MODULE_RESET_REG0_OFFSET, BIT19, 0, 0, NOT_RESET),
#endif
};
static void __init novatek_clock_init(struct device_node *node)
{
int ret;
pr_info("novatek_clock_init\n");
spin_lock_init(&cg_lock);
remap_base = of_iomap(node, 0);
if (IS_ERR((void *)remap_base))
pr_err("Failed to remap CKG registers!\n");
else
nvt_cg_base_remap(remap_base);
ret = nvt_fixed_rate_clk_register(novatek_fixed_rate_clk, ARRAY_SIZE(novatek_fixed_rate_clk));
if (ret < 0)
pr_err("Failed to register fixed rate clk!\n");
ret = nvt_pll_clk_register(novatek_pll, ARRAY_SIZE(novatek_pll), DEFAULT_PLL_DIV_VALUE, &cg_lock);
if (ret < 0)
pr_err("Failed to register pll clk!\n");
ret = nvt_composite_mux_clk_register(novatek_cmux_clk, ARRAY_SIZE(novatek_cmux_clk), &cg_lock);
if (ret < 0)
pr_err("Failed to register composite mux clk!\n");
}
CLK_OF_DECLARE(nvt_core_clk, "nvt,core_clk", novatek_clock_init);