|
|
|
@@ -1,6 +1,6 @@
|
|
|
|
/*
|
|
|
|
/*
|
|
|
|
* Copyright (c) 2018 naehrwert
|
|
|
|
* Copyright (c) 2018 naehrwert
|
|
|
|
* Copyright (c) 2018-2023 CTCaer
|
|
|
|
* Copyright (c) 2018-2024 CTCaer
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
|
|
* under the terms and conditions of the GNU General Public License,
|
|
|
|
* under the terms and conditions of the GNU General Public License,
|
|
|
|
@@ -42,82 +42,82 @@ static const clock_osc_t _clock_osc_cnt[] = {
|
|
|
|
/* clk_rst_t: reset, enable, source, index, clk_src, clk_div */
|
|
|
|
/* clk_rst_t: reset, enable, source, index, clk_src, clk_div */
|
|
|
|
|
|
|
|
|
|
|
|
static const clk_rst_t _clock_uart[] = {
|
|
|
|
static const clk_rst_t _clock_uart[] = {
|
|
|
|
{ CLK_RST_CONTROLLER_RST_DEVICES_L, CLK_RST_CONTROLLER_CLK_OUT_ENB_L, CLK_RST_CONTROLLER_CLK_SOURCE_UARTA, CLK_L_UARTA, 0, 2 },
|
|
|
|
{ CLK_RST_CONTROLLER_RST_DEVICES_L, CLK_RST_CONTROLLER_CLK_OUT_ENB_L, CLK_RST_CONTROLLER_CLK_SOURCE_UARTA, CLK_L_UARTA, 0, CLK_SRC_DIV(2) },
|
|
|
|
{ CLK_RST_CONTROLLER_RST_DEVICES_L, CLK_RST_CONTROLLER_CLK_OUT_ENB_L, CLK_RST_CONTROLLER_CLK_SOURCE_UARTB, CLK_L_UARTB, 0, 2 },
|
|
|
|
{ CLK_RST_CONTROLLER_RST_DEVICES_L, CLK_RST_CONTROLLER_CLK_OUT_ENB_L, CLK_RST_CONTROLLER_CLK_SOURCE_UARTB, CLK_L_UARTB, 0, CLK_SRC_DIV(2) },
|
|
|
|
{ CLK_RST_CONTROLLER_RST_DEVICES_H, CLK_RST_CONTROLLER_CLK_OUT_ENB_H, CLK_RST_CONTROLLER_CLK_SOURCE_UARTC, CLK_H_UARTC, 0, 2 },
|
|
|
|
{ CLK_RST_CONTROLLER_RST_DEVICES_H, CLK_RST_CONTROLLER_CLK_OUT_ENB_H, CLK_RST_CONTROLLER_CLK_SOURCE_UARTC, CLK_H_UARTC, 0, CLK_SRC_DIV(2) },
|
|
|
|
{ CLK_RST_CONTROLLER_RST_DEVICES_U, CLK_RST_CONTROLLER_CLK_OUT_ENB_U, CLK_RST_CONTROLLER_CLK_SOURCE_UARTD, CLK_U_UARTD, 0, 2 },
|
|
|
|
{ CLK_RST_CONTROLLER_RST_DEVICES_U, CLK_RST_CONTROLLER_CLK_OUT_ENB_U, CLK_RST_CONTROLLER_CLK_SOURCE_UARTD, CLK_U_UARTD, 0, CLK_SRC_DIV(2) },
|
|
|
|
{ CLK_RST_CONTROLLER_RST_DEVICES_Y, CLK_RST_CONTROLLER_CLK_OUT_ENB_Y, CLK_RST_CONTROLLER_CLK_SOURCE_UARTAPE, CLK_Y_UARTAPE, 0, 2 }
|
|
|
|
{ CLK_RST_CONTROLLER_RST_DEVICES_Y, CLK_RST_CONTROLLER_CLK_OUT_ENB_Y, CLK_RST_CONTROLLER_CLK_SOURCE_UARTAPE, CLK_Y_UARTAPE, 0, CLK_SRC_DIV(2) }
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
//I2C default parameters - TLOW: 4, THIGH: 2, DEBOUNCE: 0, FM_DIV: 26.
|
|
|
|
//I2C default parameters - TLOW: 4, THIGH: 2, DEBOUNCE: 0, FM_DIV: 26.
|
|
|
|
static const clk_rst_t _clock_i2c[] = {
|
|
|
|
static const clk_rst_t _clock_i2c[] = {
|
|
|
|
{ CLK_RST_CONTROLLER_RST_DEVICES_L, CLK_RST_CONTROLLER_CLK_OUT_ENB_L, CLK_RST_CONTROLLER_CLK_SOURCE_I2C1, CLK_L_I2C1, 0, 19 }, //20.4MHz -> 100KHz
|
|
|
|
{ CLK_RST_CONTROLLER_RST_DEVICES_L, CLK_RST_CONTROLLER_CLK_OUT_ENB_L, CLK_RST_CONTROLLER_CLK_SOURCE_I2C1, CLK_L_I2C1, 0, CLK_SRC_DIV(10.5) }, //20.4MHz -> 100KHz
|
|
|
|
{ CLK_RST_CONTROLLER_RST_DEVICES_H, CLK_RST_CONTROLLER_CLK_OUT_ENB_H, CLK_RST_CONTROLLER_CLK_SOURCE_I2C2, CLK_H_I2C2, 0, 4 }, //81.6MHz -> 400KHz
|
|
|
|
{ CLK_RST_CONTROLLER_RST_DEVICES_H, CLK_RST_CONTROLLER_CLK_OUT_ENB_H, CLK_RST_CONTROLLER_CLK_SOURCE_I2C2, CLK_H_I2C2, 0, CLK_SRC_DIV(3) }, //81.6MHz -> 400KHz
|
|
|
|
{ CLK_RST_CONTROLLER_RST_DEVICES_U, CLK_RST_CONTROLLER_CLK_OUT_ENB_U, CLK_RST_CONTROLLER_CLK_SOURCE_I2C3, CLK_U_I2C3, 0, 4 }, //81.6MHz -> 400KHz
|
|
|
|
{ CLK_RST_CONTROLLER_RST_DEVICES_U, CLK_RST_CONTROLLER_CLK_OUT_ENB_U, CLK_RST_CONTROLLER_CLK_SOURCE_I2C3, CLK_U_I2C3, 0, CLK_SRC_DIV(3) }, //81.6MHz -> 400KHz
|
|
|
|
{ CLK_RST_CONTROLLER_RST_DEVICES_V, CLK_RST_CONTROLLER_CLK_OUT_ENB_V, CLK_RST_CONTROLLER_CLK_SOURCE_I2C4, CLK_V_I2C4, 0, 19 }, //20.4MHz -> 100KHz
|
|
|
|
{ CLK_RST_CONTROLLER_RST_DEVICES_V, CLK_RST_CONTROLLER_CLK_OUT_ENB_V, CLK_RST_CONTROLLER_CLK_SOURCE_I2C4, CLK_V_I2C4, 0, CLK_SRC_DIV(10.5) }, //20.4MHz -> 100KHz
|
|
|
|
{ CLK_RST_CONTROLLER_RST_DEVICES_H, CLK_RST_CONTROLLER_CLK_OUT_ENB_H, CLK_RST_CONTROLLER_CLK_SOURCE_I2C5, CLK_H_I2C5, 0, 4 }, //81.6MHz -> 400KHz
|
|
|
|
{ CLK_RST_CONTROLLER_RST_DEVICES_H, CLK_RST_CONTROLLER_CLK_OUT_ENB_H, CLK_RST_CONTROLLER_CLK_SOURCE_I2C5, CLK_H_I2C5, 0, CLK_SRC_DIV(3) }, //81.6MHz -> 400KHz
|
|
|
|
{ CLK_RST_CONTROLLER_RST_DEVICES_X, CLK_RST_CONTROLLER_CLK_OUT_ENB_X, CLK_RST_CONTROLLER_CLK_SOURCE_I2C6, CLK_X_I2C6, 0, 19 } //20.4MHz -> 100KHz
|
|
|
|
{ CLK_RST_CONTROLLER_RST_DEVICES_X, CLK_RST_CONTROLLER_CLK_OUT_ENB_X, CLK_RST_CONTROLLER_CLK_SOURCE_I2C6, CLK_X_I2C6, 0, CLK_SRC_DIV(10.5) } //20.4MHz -> 100KHz
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
static clk_rst_t _clock_se = {
|
|
|
|
static clk_rst_t _clock_se = {
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_V, CLK_RST_CONTROLLER_CLK_OUT_ENB_V, CLK_RST_CONTROLLER_CLK_SOURCE_SE, CLK_V_SE, 0, 0 // 408MHz. Default: 408MHz. Max: 627.2 MHz.
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_V, CLK_RST_CONTROLLER_CLK_OUT_ENB_V, CLK_RST_CONTROLLER_CLK_SOURCE_SE, CLK_V_SE, 0, CLK_SRC_DIV(1) // 408MHz. Default: 408MHz. Max: 627.2 MHz.
|
|
|
|
};
|
|
|
|
};
|
|
|
|
static clk_rst_t _clock_tzram = {
|
|
|
|
static clk_rst_t _clock_tzram = {
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_V, CLK_RST_CONTROLLER_CLK_OUT_ENB_V, CLK_NO_SOURCE, CLK_V_TZRAM, 0, 0
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_V, CLK_RST_CONTROLLER_CLK_OUT_ENB_V, CLK_NO_SOURCE, CLK_V_TZRAM, 0, CLK_SRC_DIV(1)
|
|
|
|
};
|
|
|
|
};
|
|
|
|
static clk_rst_t _clock_host1x = {
|
|
|
|
static clk_rst_t _clock_host1x = {
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_L, CLK_RST_CONTROLLER_CLK_OUT_ENB_L, CLK_RST_CONTROLLER_CLK_SOURCE_HOST1X, CLK_L_HOST1X, 4, 3 // 163.2MHz. Max: 408MHz.
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_L, CLK_RST_CONTROLLER_CLK_OUT_ENB_L, CLK_RST_CONTROLLER_CLK_SOURCE_HOST1X, CLK_L_HOST1X, 4, CLK_SRC_DIV(2.5) // 163.2MHz. Max: 408MHz.
|
|
|
|
};
|
|
|
|
};
|
|
|
|
static clk_rst_t _clock_tsec = {
|
|
|
|
static clk_rst_t _clock_tsec = {
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_U, CLK_RST_CONTROLLER_CLK_OUT_ENB_U, CLK_RST_CONTROLLER_CLK_SOURCE_TSEC, CLK_U_TSEC, 0, 2 // 204MHz. Max: 408MHz.
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_U, CLK_RST_CONTROLLER_CLK_OUT_ENB_U, CLK_RST_CONTROLLER_CLK_SOURCE_TSEC, CLK_U_TSEC, 0, CLK_SRC_DIV(2) // 204MHz. Max: 408MHz.
|
|
|
|
};
|
|
|
|
};
|
|
|
|
static clk_rst_t _clock_nvdec = {
|
|
|
|
static clk_rst_t _clock_nvdec = {
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_Y, CLK_RST_CONTROLLER_CLK_OUT_ENB_Y, CLK_RST_CONTROLLER_CLK_SOURCE_NVDEC, CLK_Y_NVDEC, 4, 0 // 408 MHz. Max: 716.8/979.2MHz.
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_Y, CLK_RST_CONTROLLER_CLK_OUT_ENB_Y, CLK_RST_CONTROLLER_CLK_SOURCE_NVDEC, CLK_Y_NVDEC, 4, CLK_SRC_DIV(1) // 408 MHz. Max: 716.8/979.2MHz.
|
|
|
|
};
|
|
|
|
};
|
|
|
|
static clk_rst_t _clock_nvjpg = {
|
|
|
|
static clk_rst_t _clock_nvjpg = {
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_Y, CLK_RST_CONTROLLER_CLK_OUT_ENB_Y, CLK_RST_CONTROLLER_CLK_SOURCE_NVJPG, CLK_Y_NVJPG, 4, 0 // 408 MHz. Max: 627.2/652.8MHz.
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_Y, CLK_RST_CONTROLLER_CLK_OUT_ENB_Y, CLK_RST_CONTROLLER_CLK_SOURCE_NVJPG, CLK_Y_NVJPG, 4, CLK_SRC_DIV(1) // 408 MHz. Max: 627.2/652.8MHz.
|
|
|
|
};
|
|
|
|
};
|
|
|
|
static clk_rst_t _clock_vic = {
|
|
|
|
static clk_rst_t _clock_vic = {
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_X, CLK_RST_CONTROLLER_CLK_OUT_ENB_X, CLK_RST_CONTROLLER_CLK_SOURCE_VIC, CLK_X_VIC, 2, 0 // 408 MHz. Max: 627.2/652.8MHz.
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_X, CLK_RST_CONTROLLER_CLK_OUT_ENB_X, CLK_RST_CONTROLLER_CLK_SOURCE_VIC, CLK_X_VIC, 2, CLK_SRC_DIV(1) // 408 MHz. Max: 627.2/652.8MHz.
|
|
|
|
};
|
|
|
|
};
|
|
|
|
static clk_rst_t _clock_sor_safe = {
|
|
|
|
static clk_rst_t _clock_sor_safe = {
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_Y, CLK_RST_CONTROLLER_CLK_OUT_ENB_Y, CLK_NO_SOURCE, CLK_Y_SOR_SAFE, 0, 0
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_Y, CLK_RST_CONTROLLER_CLK_OUT_ENB_Y, CLK_NO_SOURCE, CLK_Y_SOR_SAFE, 0, CLK_SRC_DIV(1)
|
|
|
|
};
|
|
|
|
};
|
|
|
|
static clk_rst_t _clock_sor0 = {
|
|
|
|
static clk_rst_t _clock_sor0 = {
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_X, CLK_RST_CONTROLLER_CLK_OUT_ENB_X, CLK_NOT_USED, CLK_X_SOR0, 0, 0
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_X, CLK_RST_CONTROLLER_CLK_OUT_ENB_X, CLK_NOT_USED, CLK_X_SOR0, 0, CLK_SRC_DIV(1)
|
|
|
|
};
|
|
|
|
};
|
|
|
|
static clk_rst_t _clock_sor1 = {
|
|
|
|
static clk_rst_t _clock_sor1 = {
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_X, CLK_RST_CONTROLLER_CLK_OUT_ENB_X, CLK_RST_CONTROLLER_CLK_SOURCE_SOR1, CLK_X_SOR1, 0, 2 // 204MHz.
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_X, CLK_RST_CONTROLLER_CLK_OUT_ENB_X, CLK_RST_CONTROLLER_CLK_SOURCE_SOR1, CLK_X_SOR1, 0, CLK_SRC_DIV(2) // 204MHz.
|
|
|
|
};
|
|
|
|
};
|
|
|
|
static clk_rst_t _clock_kfuse = {
|
|
|
|
static clk_rst_t _clock_kfuse = {
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_H, CLK_RST_CONTROLLER_CLK_OUT_ENB_H, CLK_NO_SOURCE, CLK_H_KFUSE, 0, 0
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_H, CLK_RST_CONTROLLER_CLK_OUT_ENB_H, CLK_NO_SOURCE, CLK_H_KFUSE, 0, CLK_SRC_DIV(1)
|
|
|
|
};
|
|
|
|
};
|
|
|
|
static clk_rst_t _clock_cl_dvfs = {
|
|
|
|
static clk_rst_t _clock_cl_dvfs = {
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_W, CLK_RST_CONTROLLER_CLK_OUT_ENB_W, CLK_NO_SOURCE, CLK_W_DVFS, 0, 0
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_W, CLK_RST_CONTROLLER_CLK_OUT_ENB_W, CLK_NO_SOURCE, CLK_W_DVFS, 0, CLK_SRC_DIV(1)
|
|
|
|
};
|
|
|
|
};
|
|
|
|
static clk_rst_t _clock_coresight = {
|
|
|
|
static clk_rst_t _clock_coresight = {
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_U, CLK_RST_CONTROLLER_CLK_OUT_ENB_U, CLK_RST_CONTROLLER_CLK_SOURCE_CSITE, CLK_U_CSITE, 0, 4 // 136MHz.
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_U, CLK_RST_CONTROLLER_CLK_OUT_ENB_U, CLK_RST_CONTROLLER_CLK_SOURCE_CSITE, CLK_U_CSITE, 0, CLK_SRC_DIV(3) // 136MHz.
|
|
|
|
};
|
|
|
|
};
|
|
|
|
static clk_rst_t _clock_pwm = {
|
|
|
|
static clk_rst_t _clock_pwm = {
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_L, CLK_RST_CONTROLLER_CLK_OUT_ENB_L, CLK_RST_CONTROLLER_CLK_SOURCE_PWM, CLK_L_PWM, 6, 4 // Fref: 6.4MHz. HOS: PLLP / 54 = 7.55MHz.
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_L, CLK_RST_CONTROLLER_CLK_OUT_ENB_L, CLK_RST_CONTROLLER_CLK_SOURCE_PWM, CLK_L_PWM, 6, CLK_SRC_DIV(3) // Fref: 6.4MHz. HOS: PLLP / 54 = 7.55MHz.
|
|
|
|
};
|
|
|
|
};
|
|
|
|
static clk_rst_t _clock_sdmmc_legacy_tm = {
|
|
|
|
static clk_rst_t _clock_sdmmc_legacy_tm = {
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_Y, CLK_RST_CONTROLLER_CLK_OUT_ENB_Y, CLK_RST_CONTROLLER_CLK_SOURCE_SDMMC_LEGACY_TM, CLK_Y_SDMMC_LEGACY_TM, 4, 66
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_Y, CLK_RST_CONTROLLER_CLK_OUT_ENB_Y, CLK_RST_CONTROLLER_CLK_SOURCE_SDMMC_LEGACY_TM, CLK_Y_SDMMC_LEGACY_TM, 4, CLK_SRC_DIV(34) // 12MHz.
|
|
|
|
};
|
|
|
|
};
|
|
|
|
static clk_rst_t _clock_apbdma = {
|
|
|
|
static clk_rst_t _clock_apbdma = {
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_H, CLK_RST_CONTROLLER_CLK_OUT_ENB_H, CLK_NO_SOURCE, CLK_H_APBDMA, 0, 0 // Max: 204MHz.
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_H, CLK_RST_CONTROLLER_CLK_OUT_ENB_H, CLK_NO_SOURCE, CLK_H_APBDMA, 0, CLK_SRC_DIV(1) // Max: 204MHz.
|
|
|
|
};
|
|
|
|
};
|
|
|
|
static clk_rst_t _clock_ahbdma = {
|
|
|
|
static clk_rst_t _clock_ahbdma = {
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_H, CLK_RST_CONTROLLER_CLK_OUT_ENB_H, CLK_NO_SOURCE, CLK_H_AHBDMA, 0, 0
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_H, CLK_RST_CONTROLLER_CLK_OUT_ENB_H, CLK_NO_SOURCE, CLK_H_AHBDMA, 0, CLK_SRC_DIV(1)
|
|
|
|
};
|
|
|
|
};
|
|
|
|
static clk_rst_t _clock_actmon = {
|
|
|
|
static clk_rst_t _clock_actmon = {
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_V, CLK_RST_CONTROLLER_CLK_OUT_ENB_V, CLK_RST_CONTROLLER_CLK_SOURCE_ACTMON, CLK_V_ACTMON, 6, 0 // 19.2MHz.
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_V, CLK_RST_CONTROLLER_CLK_OUT_ENB_V, CLK_RST_CONTROLLER_CLK_SOURCE_ACTMON, CLK_V_ACTMON, 6, CLK_SRC_DIV(1) // 19.2MHz.
|
|
|
|
};
|
|
|
|
};
|
|
|
|
static clk_rst_t _clock_extperiph1 = {
|
|
|
|
static clk_rst_t _clock_extperiph1 = {
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_V, CLK_RST_CONTROLLER_CLK_OUT_ENB_V, CLK_RST_CONTROLLER_CLK_SOURCE_EXTPERIPH1, CLK_V_EXTPERIPH1, 0, 0
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_V, CLK_RST_CONTROLLER_CLK_OUT_ENB_V, CLK_RST_CONTROLLER_CLK_SOURCE_EXTPERIPH1, CLK_V_EXTPERIPH1, 0, CLK_SRC_DIV(1)
|
|
|
|
};
|
|
|
|
};
|
|
|
|
static clk_rst_t _clock_extperiph2 = {
|
|
|
|
static clk_rst_t _clock_extperiph2 = {
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_V, CLK_RST_CONTROLLER_CLK_OUT_ENB_V, CLK_RST_CONTROLLER_CLK_SOURCE_EXTPERIPH2, CLK_V_EXTPERIPH2, 2, 202 // 4.0MHz
|
|
|
|
CLK_RST_CONTROLLER_RST_DEVICES_V, CLK_RST_CONTROLLER_CLK_OUT_ENB_V, CLK_RST_CONTROLLER_CLK_SOURCE_EXTPERIPH2, CLK_V_EXTPERIPH2, 2, CLK_SRC_DIV(102) // 4.0MHz
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
void clock_enable(const clk_rst_t *clk)
|
|
|
|
void clock_enable(const clk_rst_t *clk)
|
|
|
|
@@ -128,7 +128,7 @@ void clock_enable(const clk_rst_t *clk)
|
|
|
|
CLOCK(clk->enable) &= ~BIT(clk->index);
|
|
|
|
CLOCK(clk->enable) &= ~BIT(clk->index);
|
|
|
|
// Configure clock source if required.
|
|
|
|
// Configure clock source if required.
|
|
|
|
if (clk->source)
|
|
|
|
if (clk->source)
|
|
|
|
CLOCK(clk->source) = clk->clk_div | (clk->clk_src << 29);
|
|
|
|
CLOCK(clk->source) = clk->clk_div | (clk->clk_src << 29u);
|
|
|
|
// Enable.
|
|
|
|
// Enable.
|
|
|
|
CLOCK(clk->enable) = (CLOCK(clk->enable) & ~BIT(clk->index)) | BIT(clk->index);
|
|
|
|
CLOCK(clk->enable) = (CLOCK(clk->enable) & ~BIT(clk->index)) | BIT(clk->index);
|
|
|
|
usleep(2);
|
|
|
|
usleep(2);
|
|
|
|
@@ -168,12 +168,12 @@ int clock_uart_use_src_div(u32 idx, u32 baud)
|
|
|
|
u32 clk_src_div = CLOCK(_clock_uart[idx].source) & 0xE0000000;
|
|
|
|
u32 clk_src_div = CLOCK(_clock_uart[idx].source) & 0xE0000000;
|
|
|
|
|
|
|
|
|
|
|
|
if (baud == 3000000)
|
|
|
|
if (baud == 3000000)
|
|
|
|
CLOCK(_clock_uart[idx].source) = clk_src_div | UART_SRC_CLK_DIV_EN | 15;
|
|
|
|
CLOCK(_clock_uart[idx].source) = clk_src_div | UART_SRC_CLK_DIV_EN | CLK_SRC_DIV(8.5);
|
|
|
|
else if (baud == 1000000)
|
|
|
|
else if (baud == 1000000)
|
|
|
|
CLOCK(_clock_uart[idx].source) = clk_src_div | UART_SRC_CLK_DIV_EN | 49;
|
|
|
|
CLOCK(_clock_uart[idx].source) = clk_src_div | UART_SRC_CLK_DIV_EN | CLK_SRC_DIV(25.5);
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
|
CLOCK(_clock_uart[idx].source) = clk_src_div | 2;
|
|
|
|
CLOCK(_clock_uart[idx].source) = clk_src_div | CLK_SRC_DIV(2);
|
|
|
|
|
|
|
|
|
|
|
|
return 1;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@@ -401,7 +401,7 @@ void clock_enable_plld(u32 divp, u32 divn, bool lowpower, bool tegra_t210)
|
|
|
|
|
|
|
|
|
|
|
|
// Set DISP1 clock source and parent clock.
|
|
|
|
// Set DISP1 clock source and parent clock.
|
|
|
|
if (lowpower)
|
|
|
|
if (lowpower)
|
|
|
|
CLOCK(CLK_RST_CONTROLLER_CLK_SOURCE_DISP1) = 0x40000000; // PLLD_OUT0.
|
|
|
|
CLOCK(CLK_RST_CONTROLLER_CLK_SOURCE_DISP1) = (2 << 29u) | CLK_SRC_DIV(1); // PLLD_OUT0.
|
|
|
|
|
|
|
|
|
|
|
|
// Set dividers and enable PLLD.
|
|
|
|
// Set dividers and enable PLLD.
|
|
|
|
CLOCK(CLK_RST_CONTROLLER_PLLD_BASE) = PLLCX_BASE_ENABLE | PLLCX_BASE_LOCK | plld_div;
|
|
|
|
CLOCK(CLK_RST_CONTROLLER_PLLD_BASE) = PLLCX_BASE_ENABLE | PLLCX_BASE_LOCK | plld_div;
|
|
|
|
@@ -715,38 +715,38 @@ static int _clock_sdmmc_config_clock_host(u32 *pclock, u32 id, u32 val)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
case 25000:
|
|
|
|
case 25000:
|
|
|
|
*pclock = 24728;
|
|
|
|
*pclock = 24728;
|
|
|
|
divisor = 31; // 16.5 div.
|
|
|
|
divisor = CLK_SRC_DIV(16.5);
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case 26000:
|
|
|
|
case 26000:
|
|
|
|
*pclock = 25500;
|
|
|
|
*pclock = 25500;
|
|
|
|
divisor = 30; // 16 div.
|
|
|
|
divisor = CLK_SRC_DIV(16);
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case 50000:
|
|
|
|
case 50000:
|
|
|
|
*pclock = 48000;
|
|
|
|
*pclock = 48000;
|
|
|
|
divisor = 15; // 8.5 div.
|
|
|
|
divisor = CLK_SRC_DIV(8.5);
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case 52000:
|
|
|
|
case 52000:
|
|
|
|
*pclock = 51000;
|
|
|
|
*pclock = 51000;
|
|
|
|
divisor = 14; // 8 div.
|
|
|
|
divisor = CLK_SRC_DIV(8);
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case 82000:
|
|
|
|
case 82000:
|
|
|
|
*pclock = 81600;
|
|
|
|
*pclock = 81600;
|
|
|
|
divisor = 8; // 5 div.
|
|
|
|
divisor = CLK_SRC_DIV(5);
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case 100000:
|
|
|
|
case 100000:
|
|
|
|
source = SDMMC_CLOCK_SRC_PLLC4_OUT2;
|
|
|
|
source = SDMMC_CLOCK_SRC_PLLC4_OUT2;
|
|
|
|
*pclock = 99840;
|
|
|
|
*pclock = 99840;
|
|
|
|
divisor = 2; // 2 div.
|
|
|
|
divisor = CLK_SRC_DIV(2);
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case 164000:
|
|
|
|
case 164000:
|
|
|
|
*pclock = 163200;
|
|
|
|
*pclock = 163200;
|
|
|
|
divisor = 3; // 2.5 div.
|
|
|
|
divisor = CLK_SRC_DIV(2.5);
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case 200000:
|
|
|
|
case 200000:
|
|
|
|
@@ -762,14 +762,14 @@ static int _clock_sdmmc_config_clock_host(u32 *pclock, u32 id, u32 val)
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*pclock = 199680;
|
|
|
|
*pclock = 199680;
|
|
|
|
divisor = 0; // 1 div.
|
|
|
|
divisor = CLK_SRC_DIV(1);
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef BDK_SDMMC_UHS_DDR200_SUPPORT
|
|
|
|
#ifdef BDK_SDMMC_UHS_DDR200_SUPPORT
|
|
|
|
case 400000:
|
|
|
|
case 400000:
|
|
|
|
source = SDMMC_CLOCK_SRC_PLLC4_OUT0;
|
|
|
|
source = SDMMC_CLOCK_SRC_PLLC4_OUT0;
|
|
|
|
*pclock = 399360;
|
|
|
|
*pclock = 399360;
|
|
|
|
divisor = 3; // 2.5 div
|
|
|
|
divisor = CLK_SRC_DIV(2.5);
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@@ -785,7 +785,7 @@ static int _clock_sdmmc_config_clock_host(u32 *pclock, u32 id, u32 val)
|
|
|
|
_clock_sdmmc_config_legacy_tm();
|
|
|
|
_clock_sdmmc_config_legacy_tm();
|
|
|
|
|
|
|
|
|
|
|
|
// Set SDMMC clock.
|
|
|
|
// Set SDMMC clock.
|
|
|
|
u32 src_div = (source << 29) | divisor;
|
|
|
|
u32 src_div = (source << 29u) | divisor;
|
|
|
|
switch (id)
|
|
|
|
switch (id)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
case SDMMC_1:
|
|
|
|
case SDMMC_1:
|
|
|
|
|