4 #include <soc/addressmap.h>
34 #define CLK_SET_REGS(x) \
36 CLK_RST_REG(clk_enb_##x##_set), \
37 CLK_RST_REG(rst_dev_##x##_clr), \
50 #define FUNIT_DATA(funit_, loname_, clk_set_) \
51 [FUNIT_INDEX(funit_)] = { \
52 .name = STRINGIFY(loname_), \
53 .ctlr_base = (void *)(uintptr_t)TEGRA_##funit_##_BASE, \
54 .clk_src_reg = CLK_RST_REG(clk_src_##loname_), \
55 .dev_control = &clk_data_arr[CLK_##clk_set_##_SET], \
56 .clk_enb_val = CLK_##clk_set_##_##funit_, \
59 #define FUNIT_DATA_USB(funit_, clk_set_) \
60 [FUNIT_INDEX(funit_)] = { \
61 .name = STRINGIFY(funit_), \
62 .ctlr_base = (void *)(uintptr_t)TEGRA_##funit_##_BASE, \
63 .dev_control = &clk_data_arr[CLK_##clk_set_##_SET], \
64 .clk_enb_val = CLK_##clk_set_##_##funit_, \
81 "funit_cfg_data array not filled out!");
87 switch (clk_src_freq_id) {
96 __func__, clk_src_freq_id);
105 const char *funit_i2c =
"i2c";
129 return (idx == FUNIT_USBD || idx == FUNIT_USB2);
136 for (i = 0; i < num; i++) {
137 const struct funit_cfg *
const entry = &entries[i];
168 printk(
BIOS_ERR,
"USB setup is not supported in current stage\n");
#define printk(level,...)
static uint32_t get_clk_src_freq(uint32_t clk_src_freq_id)
#define FUNIT_DATA(funit_, loname_, clk_set_)
static const struct funit_cfg_data funit_data[]
void soc_configure_funits(const struct funit_cfg *const entries, size_t num)
#define FUNIT_DATA_USB(funit_, clk_set_)
static void configure_clock(const struct funit_cfg *const entry, const struct funit_cfg_data *const funit)
_Static_assert(ARRAY_SIZE(funit_data)==FUNIT_INDEX_MAX, "funit_cfg_data array not filled out!")
static const struct clk_dev_control clk_data_arr[]
void __weak usb_setup_utmip(void *usb_base)
static int is_usb(uint32_t idx)
#define BIOS_ERR
BIOS_ERR - System in incomplete state.
#define BIOS_SPEW
BIOS_SPEW - Excessively verbose output.
void soc_configure_pads(const struct pad_config *const entries, size_t num)
const struct smm_save_state_ops *legacy_ops __weak
static void _clock_set_div(u32 *reg, const char *name, u32 div, u32 div_mask, u32 src)
void clock_grp_enable_clear_reset(u32 val, u32 *clk_enb_set_reg, u32 *rst_dev_clr_reg)
#define get_i2c_clk_div(src, freq)
#define get_clk_div(src, freq)
int strncmp(const char *s1, const char *s2, int maxlen)
size_t strlen(const char *src)
const struct clk_dev_control *const dev_control
uint32_t clk_dev_freq_khz
struct pad_config const * pad_cfg