blob: 8836ca9f256278943750831098c596617e601c76 [file] [log] [blame]
/*
* Copyright 2017, Data61, CSIRO (ABN 41 687 119 230)
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <stdio.h>
#include <assert.h>
#include <errno.h>
#include <stdlib.h>
#include <utils/util.h>
#include <platsupport/clock.h>
#include <platsupport/plat/clock.h>
#include "../../services.h"
/* Register information sourced from "NVIDIA Tegra K1 Mobile Processor TECHNICAL REFERENCE MANUAL" */
#define CLK_REGISTER_ENTRY(a) {.reg_type = a}
#define CLK_REGISTER_ENTRY_SOURCE(b) {.reg_type = CLK_SOURCE, .st = {.clks = b}}
#define CLK_REGISTER_ENTRY_ENBRST(a,b) {.reg_type = CLK_ENBRST_DEVICES, .eb = {.rb = a, .at = b}}
#define NULL_CLK_REGISTER_ENTRY CLK_REGISTER_ENTRY(CLK_RESERVED)
/* Struct that describes register layout.
this was done for quick lookup from device address to register type and info
An array is used, sizeof(clk_register_t) is about 3 words (3 enums) because
it is easier to declare everything inline using #defines, and the number of
NULL_CLK_REGISTER_ENTRYs is about 30-35% of the array.
*/
const clk_register_t tk1_clk_registers[] = {
// 0x0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_RST_SOURCE_0
CLK_REGISTER_ENTRY_ENBRST(REG_L, RST_VAL), // CLK_RST_CONTROLLER_RST_DEVICES_L_0
CLK_REGISTER_ENTRY_ENBRST(REG_H, RST_VAL), // CLK_RST_CONTROLLER_RST_DEVICES_H_0
CLK_REGISTER_ENTRY_ENBRST(REG_U, RST_VAL), // CLK_RST_CONTROLLER_RST_DEVICES_U_0
// 0x10
CLK_REGISTER_ENTRY_ENBRST(REG_L, ENB_VAL), // CLK_RST_CONTROLLER_CLK_OUT_ENB_L_0
CLK_REGISTER_ENTRY_ENBRST(REG_H, ENB_VAL), // CLK_RST_CONTROLLER_CLK_OUT_ENB_H_0
CLK_REGISTER_ENTRY_ENBRST(REG_U, ENB_VAL), // CLK_RST_CONTROLLER_CLK_OUT_ENB_U_0
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x20
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_CCLK_BURST_POLICY_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_SUPER_CCLK_DIVIDER_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_SCLK_BURST_POLICY_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_SUPER_SCLK_DIVIDER_0
// 0x30
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_CLK_SYSTEM_RATE_0
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x40
NULL_CLK_REGISTER_ENTRY, // Reserved
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_CLK_MASK_ARM_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_MISC_CLK_ENB_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_CLK_CPU_CMPLX_0
// 0x50
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_OSC_CTRL_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_PLL_LFSR_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_OSC_FREQ_DET_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_OSC_FREQ_DET_STATUS_0
// 0x60
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLE_SS_CNTL_0
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x70
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x80
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLC_BASE_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLC_OUT_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLC_MISC2_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLC_MISC_0
// 0x90
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLM_BASE_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLM_OUT_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLM_MISC1_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLM_MISC2_0
// 0xa0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLP_BASE_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLP_OUTA_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLP_OUTB_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLP_MISC_0
// 0xb0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLA_BASE_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLA_OUT_0
NULL_CLK_REGISTER_ENTRY, // Reserved
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLA_MISC_0
// 0xc0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLU_BASE_0
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLU_MISC_0
// 0xd0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLD_BASE_0
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLD_MISC_0
// 0xe0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLX_BASE_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLX_MISC_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLE_BASE_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLE_MISC_0
// 0xf0
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x100
CLK_REGISTER_ENTRY_SOURCE(i2s1_r_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_I2S1_0
CLK_REGISTER_ENTRY_SOURCE(i2s2_r_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_I2S2_0
CLK_REGISTER_ENTRY_SOURCE(spdif_out_r_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_SPDIF_OUT_0
CLK_REGISTER_ENTRY_SOURCE(spdif_in_r_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_SPDIF_IN_0
// 0x110
CLK_REGISTER_ENTRY_SOURCE(pwm_r_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_PWM_0
NULL_CLK_REGISTER_ENTRY, // Reserved
CLK_REGISTER_ENTRY_SOURCE(spi2_clk_t), // CLK_RST_CONTROLLER_CLK_SOURCE_SPI2_0
CLK_REGISTER_ENTRY_SOURCE(spi3_clk_t), // CLK_RST_CONTROLLER_CLK_SOURCE_SPI3_0
// 0x120
NULL_CLK_REGISTER_ENTRY, // Reserved
CLK_REGISTER_ENTRY_SOURCE(i2c1_r_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_I2C1_0
CLK_REGISTER_ENTRY_SOURCE(i2c5_r_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_I2C5_0
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x130
NULL_CLK_REGISTER_ENTRY, // Reserved
CLK_REGISTER_ENTRY_SOURCE(spi1_clk_t), // CLK_RST_CONTROLLER_CLK_SOURCE_SPI1_0
CLK_REGISTER_ENTRY_SOURCE(display_clk_t), // CLK_RST_CONTROLLER_CLK_SOURCE_DISP1_0
CLK_REGISTER_ENTRY_SOURCE(displayb_clk_t), // CLK_RST_CONTROLLER_CLK_SOURCE_DISP2_0
// 0x140
NULL_CLK_REGISTER_ENTRY, // Reserved
CLK_REGISTER_ENTRY_SOURCE(isp_r_clk_t), // CLK_RST_CONTROLLER_CLK_SOURCE_ISP_0
CLK_REGISTER_ENTRY_SOURCE(vi_clk_t), // CLK_RST_CONTROLLER_CLK_SOURCE_VI_0
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x150
CLK_REGISTER_ENTRY_SOURCE(sdmmc1_r_clk_t), // CLK_RST_CONTROLLER_CLK_SOURCE_SDMMC1_0
CLK_REGISTER_ENTRY_SOURCE(sdmmc2_r_clk_t), // CLK_RST_CONTROLLER_CLK_SOURCE_SDMMC2_0
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x160
NULL_CLK_REGISTER_ENTRY, // Reserved
CLK_REGISTER_ENTRY_SOURCE(sdmmc4_r_clk_t), // CLK_RST_CONTROLLER_CLK_SOURCE_SDMMC4_0
CLK_REGISTER_ENTRY_SOURCE(vfir_clk_t), // CLK_RST_CONTROLLER_CLK_SOURCE_VFIR_0
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x170
NULL_CLK_REGISTER_ENTRY, // Reserved
CLK_REGISTER_ENTRY_SOURCE(hsi_clk_t), // CLK_RST_CONTROLLER_CLK_SOURCE_HSI_0
CLK_REGISTER_ENTRY_SOURCE(uarta_r_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_UARTA_0
CLK_REGISTER_ENTRY_SOURCE(uartb_r_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_UARTB_0
// 0x180
CLK_REGISTER_ENTRY_SOURCE(host1x_clk_t), // CLK_RST_CONTROLLER_CLK_SOURCE_HOST1X_0
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
CLK_REGISTER_ENTRY_SOURCE(hdmi_clk_t), // CLK_RST_CONTROLLER_CLK_SOURCE_HDMI_0
// 0x190
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
CLK_REGISTER_ENTRY_SOURCE(i2c2_r_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_I2C2_0
CLK_REGISTER_ENTRY_SOURCE(NUM_OTHER_CLOCKS), // TODO CLK_RST_CONTROLLER_CLK_SOURCE_EMC_0
// 0x1a0
CLK_REGISTER_ENTRY_SOURCE(uartc_r_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_UARTC_0
NULL_CLK_REGISTER_ENTRY, // Reserved
CLK_REGISTER_ENTRY_SOURCE(vi_sensor_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_VI_SENSOR_0
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x1b0
NULL_CLK_REGISTER_ENTRY, // Reserved
CLK_REGISTER_ENTRY_SOURCE(spi4_clk_t), // CLK_RST_CONTROLLER_CLK_SOURCE_SPI4_0
CLK_REGISTER_ENTRY_SOURCE(i2c3_r_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_I2C3_0
CLK_REGISTER_ENTRY_SOURCE(sdmmc3_r_clk_t), // CLK_RST_CONTROLLER_CLK_SOURCE_SDMMC3_0
// 0x1c0
CLK_REGISTER_ENTRY_SOURCE(uartd_r_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_UARTD_0
NULL_CLK_REGISTER_ENTRY, // Reserved
CLK_REGISTER_ENTRY_SOURCE(vde_clk_t), // CLK_RST_CONTROLLER_CLK_SOURCE_VDE_0
CLK_REGISTER_ENTRY_SOURCE(owr_r_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_OWR_0
// 0x1d0
CLK_REGISTER_ENTRY_SOURCE(nor_r_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_NOR_0
CLK_REGISTER_ENTRY_SOURCE(csite_clk_t), // CLK_RST_CONTROLLER_CLK_SOURCE_CSITE_0
CLK_REGISTER_ENTRY_SOURCE(i2s0_r_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_I2S0_0
CLK_REGISTER_ENTRY_SOURCE(NUM_OTHER_CLOCKS), // TODO CLK_RST_CONTROLLER_CLK_SOURCE_DTV_0
// 0x1e0
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x1f0
CLK_REGISTER_ENTRY_SOURCE(msenc_clk_t), // CLK_RST_CONTROLLER_CLK_SOURCE_MSENC_0
CLK_REGISTER_ENTRY_SOURCE(tsec_clk_t), // CLK_RST_CONTROLLER_CLK_SOURCE_TSEC_0
NULL_CLK_REGISTER_ENTRY, // Reserved
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_CLK_SPARE2_0
// 0x200
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x210
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x220
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x230
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x240
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x250
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x260
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x270
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x280
CLK_REGISTER_ENTRY_ENBRST(REG_X, ENB_VAL), // CLK_RST_CONTROLLER_CLK_OUT_ENB_X_0
CLK_REGISTER_ENTRY_ENBRST(REG_X, ENB_SET), // CLK_RST_CONTROLLER_CLK_ENB_X_SET_0
CLK_REGISTER_ENTRY_ENBRST(REG_X, ENB_CLR), // CLK_RST_CONTROLLER_CLK_ENB_X_CLR_0
CLK_REGISTER_ENTRY_ENBRST(REG_X, RST_VAL), // CLK_RST_CONTROLLER_RST_DEVICES_X_0
// 0x290
CLK_REGISTER_ENTRY_ENBRST(REG_X, RST_SET), // CLK_RST_CONTROLLER_RST_DEV_X_SET_0
CLK_REGISTER_ENTRY_ENBRST(REG_X, RST_CLR), // CLK_RST_CONTROLLER_RST_DEV_X_CLR_0
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x2a0
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x2b0
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x2c0
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x2d0
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x2e0
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x2f0
NULL_CLK_REGISTER_ENTRY, // Reserved
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_DFLL_BASE_0
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x300
CLK_REGISTER_ENTRY_ENBRST(REG_L, RST_SET), // CLK_RST_CONTROLLER_RST_DEV_L_SET_0
CLK_REGISTER_ENTRY_ENBRST(REG_L, RST_CLR), // CLK_RST_CONTROLLER_RST_DEV_L_CLR_0
CLK_REGISTER_ENTRY_ENBRST(REG_H, RST_SET), // CLK_RST_CONTROLLER_RST_DEV_H_SET_0
CLK_REGISTER_ENTRY_ENBRST(REG_H, RST_CLR), // CLK_RST_CONTROLLER_RST_DEV_H_CLR_0
// 0x310
CLK_REGISTER_ENTRY_ENBRST(REG_U, RST_SET), // CLK_RST_CONTROLLER_RST_DEV_U_SET_0
CLK_REGISTER_ENTRY_ENBRST(REG_U, RST_CLR), // CLK_RST_CONTROLLER_RST_DEV_U_CLR_0
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x320
CLK_REGISTER_ENTRY_ENBRST(REG_L, ENB_SET), // CLK_RST_CONTROLLER_CLK_ENB_L_SET_0
CLK_REGISTER_ENTRY_ENBRST(REG_L, ENB_CLR), // CLK_RST_CONTROLLER_CLK_ENB_L_CLR_0
CLK_REGISTER_ENTRY_ENBRST(REG_H, ENB_SET), // CLK_RST_CONTROLLER_CLK_ENB_H_SET_0
CLK_REGISTER_ENTRY_ENBRST(REG_H, ENB_CLR), // CLK_RST_CONTROLLER_CLK_ENB_H_CLR_0
// 0x330
CLK_REGISTER_ENTRY_ENBRST(REG_U, ENB_SET), // CLK_RST_CONTROLLER_CLK_ENB_U_SET_0
CLK_REGISTER_ENTRY_ENBRST(REG_U, ENB_CLR), // CLK_RST_CONTROLLER_CLK_ENB_U_CLR_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_CCPLEX_PG_SM_OVRD_0
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x340
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_RST_CPU_CMPLX_SET_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_RST_CPU_CMPLX_CLR_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_CLK_CPU_CMPLX_SET_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_CLK_CPU_CMPLX_CLR_0
// 0x350
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
CLK_REGISTER_ENTRY_ENBRST(REG_V, RST_VAL), // CLK_RST_CONTROLLER_RST_DEVICES_V_0
CLK_REGISTER_ENTRY_ENBRST(REG_W, RST_VAL), // CLK_RST_CONTROLLER_RST_DEVICES_W_0
// 0x360
CLK_REGISTER_ENTRY_ENBRST(REG_V, ENB_VAL), // CLK_RST_CONTROLLER_CLK_OUT_ENB_V_0
CLK_REGISTER_ENTRY_ENBRST(REG_W, ENB_VAL), // CLK_RST_CONTROLLER_CLK_OUT_ENB_W_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_CCLKG_BURST_POLICY_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_SUPER_CCLKG_DIVIDER_0
// 0x370
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_CCLKLP_BURST_POLICY_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_SUPER_CCLKLP_DIVIDER_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_CLK_CPUG_CMPLX_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_CLK_CPULP_CMPLX_0
// 0x380
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_CPU_SOFTRST_CTRL_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_CPU_SOFTRST_CTRL1_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_CPU_SOFTRST_CTRL2_0
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x390
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x3a0
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x3b0
NULL_CLK_REGISTER_ENTRY, // Reserved
CLK_REGISTER_ENTRY_SOURCE(mselect_clk_t), // CLK_RST_CONTROLLER_CLK_SOURCE_MSELECT_0
CLK_REGISTER_ENTRY_SOURCE(tsensor_r_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_TSENSOR_0
CLK_REGISTER_ENTRY_SOURCE(i2s3_r_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_I2S3_0
// 0x3c0
CLK_REGISTER_ENTRY_SOURCE(i2s4_r_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_I2S4_0
CLK_REGISTER_ENTRY_SOURCE(i2c4_r_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_I2C4_0
CLK_REGISTER_ENTRY_SOURCE(spi5_clk_t), // CLK_RST_CONTROLLER_CLK_SOURCE_SPI5_0
CLK_REGISTER_ENTRY_SOURCE(spi6_clk_t), // CLK_RST_CONTROLLER_CLK_SOURCE_SPI6_0
// 0x3d0
CLK_REGISTER_ENTRY_SOURCE(audio_r_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_AUDIO_0
NULL_CLK_REGISTER_ENTRY, // Reserved
CLK_REGISTER_ENTRY_SOURCE(dam0_r_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_DAM0_0
CLK_REGISTER_ENTRY_SOURCE(dam1_r_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_DAM1_0
// 0x3e0
CLK_REGISTER_ENTRY_SOURCE(dam2_r_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_DAM2_0
CLK_REGISTER_ENTRY_SOURCE(NUM_OTHER_CLOCKS), // TODO CLK_RST_CONTROLLER_CLK_SOURCE_HDA2CODEC_2X_0
CLK_REGISTER_ENTRY_SOURCE(actmon_clk_t), // CLK_RST_CONTROLLER_CLK_SOURCE_ACTMON_0
CLK_REGISTER_ENTRY_SOURCE(extperiph1_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_EXTPERIPH1_0
// 0x3f0
CLK_REGISTER_ENTRY_SOURCE(extperiph2_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_EXTPERIPH2_0
CLK_REGISTER_ENTRY_SOURCE(extperiph3_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_EXTPERIPH3_0
NULL_CLK_REGISTER_ENTRY, // Reserved
CLK_REGISTER_ENTRY_SOURCE(i2c_slow_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_I2C_SLOW_0
// 0x400
CLK_REGISTER_ENTRY_SOURCE(NUM_OTHER_CLOCKS), // TODO CLK_RST_CONTROLLER_CLK_SOURCE_SYS_0
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x410
NULL_CLK_REGISTER_ENTRY, // Reserved
CLK_REGISTER_ENTRY_SOURCE(NUM_OTHER_CLOCKS), // TODO CLK_RST_CONTROLLER_CLK_SOURCE_SOR0_0
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x420
CLK_REGISTER_ENTRY_SOURCE(sata_oob_clk_t), // CLK_RST_CONTROLLER_CLK_SOURCE_SATA_OOB_0
CLK_REGISTER_ENTRY_SOURCE(NUM_OTHER_CLOCKS), // TODO CLK_RST_CONTROLLER_CLK_SOURCE_SATA_0
CLK_REGISTER_ENTRY_SOURCE(hda_r_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_HDA_0
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x430
CLK_REGISTER_ENTRY_ENBRST(REG_V, RST_SET), // CLK_RST_CONTROLLER_RST_DEV_V_SET_0
CLK_REGISTER_ENTRY_ENBRST(REG_V, RST_CLR), // CLK_RST_CONTROLLER_RST_DEV_V_CLR_0
CLK_REGISTER_ENTRY_ENBRST(REG_W, RST_SET), // CLK_RST_CONTROLLER_RST_DEV_W_SET_0
CLK_REGISTER_ENTRY_ENBRST(REG_W, RST_CLR), // CLK_RST_CONTROLLER_RST_DEV_W_CLR_0
// 0x440
CLK_REGISTER_ENTRY_ENBRST(REG_V, ENB_SET), // CLK_RST_CONTROLLER_CLK_ENB_V_SET_0
CLK_REGISTER_ENTRY_ENBRST(REG_V, ENB_CLR), // CLK_RST_CONTROLLER_CLK_ENB_V_CLR_0
CLK_REGISTER_ENTRY_ENBRST(REG_W, ENB_SET), // CLK_RST_CONTROLLER_CLK_ENB_W_SET_0
CLK_REGISTER_ENTRY_ENBRST(REG_W, ENB_CLR), // CLK_RST_CONTROLLER_CLK_ENB_W_CLR_0
// 0x450
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_RST_CPUG_CMPLX_SET_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_RST_CPUG_CMPLX_CLR_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_RST_CPULP_CMPLX_SET_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_RST_CPULP_CMPLX_CLR_0
// 0x460
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_CLK_CPUG_CMPLX_SET_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_CLK_CPUG_CMPLX_CLR_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_CLK_CPULP_CMPLX_SET_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_CLK_CPULP_CMPLX_CLR_0
// 0x470
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_CPU_CMPLX_STATUS_0
NULL_CLK_REGISTER_ENTRY, // Reserved
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_INTSTATUS_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_INTMASK_0
// 0x480
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_UTMIP_PLL_CFG0_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_UTMIP_PLL_CFG1_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_UTMIP_PLL_CFG2_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLE_AUX_0
// 0x490
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_SATA_PLL_CFG0_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_SATA_PLL_CFG1_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_PCIE_PLL_CFG_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_PROG_AUDIO_DLY_CLK_0
// 0x4a0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_AUDIO_SYNC_CLK_I2S0_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_AUDIO_SYNC_CLK_I2S1_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_AUDIO_SYNC_CLK_I2S2_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_AUDIO_SYNC_CLK_I2S3_0
// 0x4b0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_AUDIO_SYNC_CLK_I2S4_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_AUDIO_SYNC_CLK_SPDIF_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLD2_BASE_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLD2_MISC_0
// 0x4c0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_UTMIP_PLL_CFG3_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLREFE_BASE_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLREFE_MISC_0
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x4d0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_CPU_FINETRIM_BYP_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_CPU_FINETRIM_SELECT_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_CPU_FINETRIM_DR_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_CPU_FINETRIM_DF_0
// 0x4e0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_CPU_FINETRIM_F_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_CPU_FINETRIM_R_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLC2_BASE_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLC2_MISC_0_0
// 0x4f0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLC2_MISC_1_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLC2_MISC_2_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLC2_MISC_3_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLC3_BASE_0
// 0x500
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLC3_MISC_0_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLC3_MISC_1_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLC3_MISC_2_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLC3_MISC_3_0
// 0x510
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLX_MISC_1_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLX_MISC_2_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLX_MISC_3_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_XUSBIO_PLL_CFG0_0
// 0x520
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_XUSBIO_PLL_CFG1_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLE_AUX1_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLP_RESHIFT_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_UTMIPLL_HW_PWRDN_CFG0_0
// 0x530
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLU_HW_PWRDN_CFG0_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_XUSB_PLL_CFG0_0
NULL_CLK_REGISTER_ENTRY, // Reserved
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_CLK_CPU_MISC_0
// 0x540
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_CLK_CPUG_MISC_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_CLK_CPULP_MISC_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLX_HW_CTRL_CFG_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLX_SW_RAMP_CFG_0
// 0x550
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLX_HW_CTRL_STATUS_0
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_SPARE_REG0_0
// 0x560
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x570
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLD2_SS_CFG_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLD2_SS_CTRL1_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLD2_SS_CTRL2_0
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x580
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x590
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLDP_BASE_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLDP_MISC_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLDP_SS_CFG_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLDP_SS_CTRL1_0
// 0x5a0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLDP_SS_CTRL2_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLC4_BASE_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLC4_MISC_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLC4_SS_CFG_0
// 0x5b0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLC4_SS_CTRL1_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLC4_SS_CTRL2_0
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x5c0
NULL_CLK_REGISTER_ENTRY, // Reserved
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_CLK_SPARE0_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_CLK_SPARE1_0
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_GPU_ISOB_CTRL_0
// 0x5d0
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x5e0
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x5f0
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x600
CLK_REGISTER_ENTRY_SOURCE(xusb_core_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_XUSB_CORE_HOST_0
CLK_REGISTER_ENTRY_SOURCE(xusb_falcon_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_XUSB_FALCON_0
CLK_REGISTER_ENTRY_SOURCE(xusb_fs_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_XUSB_FS_0
CLK_REGISTER_ENTRY_SOURCE(xusb_core_dev_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_XUSB_CORE_DEV_0
// 0x610
CLK_REGISTER_ENTRY_SOURCE(NUM_OTHER_CLOCKS), // TODO CLK_RST_CONTROLLER_CLK_SOURCE_XUSB_SS_0
CLK_REGISTER_ENTRY_SOURCE(cilab_clk_t), // CLK_RST_CONTROLLER_CLK_SOURCE_CILAB_0
CLK_REGISTER_ENTRY_SOURCE(cilcd_clk_t), // CLK_RST_CONTROLLER_CLK_SOURCE_CILCD_0
CLK_REGISTER_ENTRY_SOURCE(cile_clk_t), // CLK_RST_CONTROLLER_CLK_SOURCE_CILE_0
// 0x620
CLK_REGISTER_ENTRY_SOURCE(dsia_lp_clk_t), // CLK_RST_CONTROLLER_CLK_SOURCE_DSIA_LP_0
CLK_REGISTER_ENTRY_SOURCE(dsib_lp_clk_t), // CLK_RST_CONTROLLER_CLK_SOURCE_DSIB_LP_0
CLK_REGISTER_ENTRY_SOURCE(entropy_r_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_ENTROPY_0
CLK_REGISTER_ENTRY_SOURCE(dvfs_ref_r_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_DVFS_REF_0
// 0x630
CLK_REGISTER_ENTRY_SOURCE(dvfs_soc_r_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_DVFS_SOC_0
CLK_REGISTER_ENTRY_SOURCE(traceclkin_clk_t), // CLK_RST_CONTROLLER_CLK_SOURCE_TRACECLKIN_0
CLK_REGISTER_ENTRY_SOURCE(adx0_r_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_ADX0_0
CLK_REGISTER_ENTRY_SOURCE(amx0_r_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_AMX0_0
// 0x640
CLK_REGISTER_ENTRY_SOURCE(emc_latency_clk_t), // CLK_RST_CONTROLLER_CLK_SOURCE_EMC_LATENCY_0
CLK_REGISTER_ENTRY_SOURCE(soc_therm_t), // CLK_RST_CONTROLLER_CLK_SOURCE_SOC_THERM_0
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
// 0x650
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
CLK_REGISTER_ENTRY_SOURCE(vi_sensor2_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_VI_SENSOR2_0
CLK_REGISTER_ENTRY_SOURCE(i2c6_r_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_I2C6_0
// 0x660
NULL_CLK_REGISTER_ENTRY, // Reserved
CLK_REGISTER_ENTRY_SOURCE(emc_dll_clk_t), // CLK_RST_CONTROLLER_CLK_SOURCE_EMC_DLL_0
CLK_REGISTER_ENTRY_SOURCE(hdmi_audio_clk_t), // CLK_RST_CONTROLLER_CLK_SOURCE_HDMI_AUDIO_0
CLK_REGISTER_ENTRY_SOURCE(clk72mhz_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_CLK72MHZ_0
// 0x670
CLK_REGISTER_ENTRY_SOURCE(adx1_r_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_ADX1_0
CLK_REGISTER_ENTRY_SOURCE(amx1_r_clk), // CLK_RST_CONTROLLER_CLK_SOURCE_AMX1_0
CLK_REGISTER_ENTRY_SOURCE(vic_clk_t), // CLK_RST_CONTROLLER_CLK_SOURCE_VIC_0
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLP_OUTC_0
// 0x680
CLK_REGISTER_ENTRY(CLK_PLL), // CLK_RST_CONTROLLER_PLLP_MISC1_0
NULL_CLK_REGISTER_ENTRY, // Reserved
NULL_CLK_REGISTER_ENTRY, // Reserved
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_EMC_DIV_CLK_SHAPER_CTRL_0
// 0x690
CLK_REGISTER_ENTRY(CLK_MISC), // CLK_RST_CONTROLLER_EMC_PLLC_SHAPER_CTRL_0
};
static clk_t *
tk1_car_get_clock(clock_sys_t *cs, enum clk_id id)
{
assert(cs != NULL);
return NULL;
}
static int
tk1_car_gate_enable(clock_sys_t* clock_sys,
enum clock_gate gate, enum clock_gate_mode mode)
{
/* The TK1 CAR controller only supports enabling and disabling the clock
* signal to a device: there are no idle/sleep clock modes, so we ignore
* CLKGATE_IDLE and CLKGATE_SLEEP.
*/
if (clock_sys == NULL) {
ZF_LOGE("Invalid driver instance handle!");
return -EINVAL;
}
if (mode != CLKGATE_ON && mode != CLKGATE_OFF) {
ZF_LOGE("Invalid clock gate mode %d!", mode);
return -EINVAL;
}
return 0;
}
int
tegra_car_init(void *regs_vaddr, clock_sys_t *cs)
{
if (regs_vaddr == NULL) {
ZF_LOGE("MMIO vaddr for CAR regs cannot be NULL!");
return -EINVAL;
}
cs->priv = regs_vaddr;
cs->gate_enable = &tk1_car_gate_enable;
cs->get_clock = &tk1_car_get_clock;
return 0;
}
int
clock_sys_init(ps_io_ops_t* o, clock_sys_t* clock_sys)
{
void *car_vaddr = NULL;
if (o == NULL || clock_sys == NULL) {
ZF_LOGE("Invalid io_ops or driver instance handle!");
return -EINVAL;
}
MAP_IF_NULL(o, TK1_CLKCAR, car_vaddr);
if (car_vaddr == NULL) {
ZF_LOGE("Failed to map TK1 CAR registers into vmem.");
return -1;
}
return tegra_car_init(car_vaddr, clock_sys);
}