From b5d514cfac0f1af12f5d2ad2eade0e94f24938c4 Mon Sep 17 00:00:00 2001 From: hydrogenium2020 <107231979+hydrogenium2020-offical@users.noreply.github.com> Date: Sun, 21 Jan 2024 16:39:28 +0800 Subject: [PATCH] refactor:Clean up all code of clocks and registers. We need to rewrite the code from coreboot or uboot's porting for Tegra T124.Instead of simply learning the init process from hekate.(Many heakte codes are only in Tegra T210) --- .gitignore | 2 ++ loader/clock.c | 45 +-------------------------------------------- loader/clock.h | 20 +------------------- loader/gpio.c | 4 +--- loader/main.c | 17 ++++++----------- loader/mc.c | 22 ---------------------- loader/mc.h | 4 +--- loader/pinmux.c | 5 ----- loader/pinmux.h | 4 +--- loader/pmc.h | 6 ------ loader/power.h | 2 -- loader/se.h | 8 -------- 12 files changed, 13 insertions(+), 126 deletions(-) diff --git a/.gitignore b/.gitignore index 34cfdca..dda1adb 100755 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ .vs .vscode build/* +*.bin +prebuilt/* \ No newline at end of file diff --git a/loader/clock.c b/loader/clock.c index 26d9f72..2b6af86 100644 --- a/loader/clock.c +++ b/loader/clock.c @@ -20,19 +20,7 @@ #include "pmc.h" #include "printf.h" #include "util.h" -static clk_rst_t _clock_cl_dvfs = { 0x35C, 0x364, 0, 0x1B, 0, 0 }; - - -//I2C default parameters - TLOW: 4, THIGH: 2, DEBOUNCE: 0, FM_DIV: 26. -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, 12, 0, 19 }, //20.4MHz -> 100KHz - { CLK_RST_CONTROLLER_RST_DEVICES_H, CLK_RST_CONTROLLER_CLK_OUT_ENB_H, CLK_RST_CONTROLLER_CLK_SOURCE_I2C2, 22, 0, 4 }, //81.6MHz -> 400KHz - { 0, 0, 0, 0, 0, 4 }, //81.6MHz -> 400KHz - { 0, 0, 0, 0, 0, 19 }, //20.4MHz -> 100KHz - { CLK_RST_CONTROLLER_RST_DEVICES_H, CLK_RST_CONTROLLER_CLK_OUT_ENB_H, CLK_RST_CONTROLLER_CLK_SOURCE_I2C5, 15, 0, 4 }, //81.6MHz -> 400KHz - { 0, 0, 0, 0, 0, 19 } //20.4MHz -> 100KHz -}; - +#include "types.h" void clock_enable(const clk_rst_t *clk) { @@ -80,36 +68,5 @@ void clock_disable(const clk_rst_t *clk) void config_oscillators() { - CLOCK(CLK_RST_CONTROLLER_SPARE_REG0) = (CLOCK(CLK_RST_CONTROLLER_SPARE_REG0) & 0xFFFFFFF3) | 0; // Clear 3-2bit and set CLK_M_DIVISOR to 1.the 3-2bit is divisor. - SYSCTR0(SYSCTR0_CNTFID0) = 12000000; // Set counter frequency. 12Mhz - //This register is for 1 microsecond. bit7-0->DIVISOR bit15-8->DIVIDEND.So we need 1/12 - TIMER0(TIMERUS_USEC_CFG) = 0x0B; // For 12MHz clk_m. 1/12 -> 0x00/0x0b - - CLOCK(CLK_RST_CONTROLLER_OSC_CTRL) = 0x80000071; // Set OSC to 12MHz and drive strength. - - PMC(APBDEV_PMC_OSC_EDPD_OVER) = (PMC(APBDEV_PMC_OSC_EDPD_OVER) & 0xFFFFFF81) | 0xE; // Set LP0 OSC drive strength. - PMC(APBDEV_PMC_OSC_EDPD_OVER) = (PMC(APBDEV_PMC_OSC_EDPD_OVER) & 0xFFBFFFFF) | PMC_OSC_EDPD_OVER_OSC_CTRL_OVER; - PMC(APBDEV_PMC_CNTRL2) = (PMC(APBDEV_PMC_CNTRL2) & 0xFFFFEFFF) | PMC_CNTRL2_HOLD_CKE_LOW_EN; - - //Not impl in T124?Only in T210 and newer - //PMC(APB_MISC_GP_ASDBGREG) = (PMC(APB_MISC_GP_ASDBGREG) & 0xFCFFFFFF) | (2 << 24); // CFG2TMC_RAM_SVOP_PDP. - - CLOCK(CLK_RST_CONTROLLER_CLK_SYSTEM_RATE) = 0x00; // Set HCLK div to 1 and PCLK div to 1. - //CLOCK(CLK_RST_CONTROLLER_PLLMB_BASE) &= 0xBFFFFFFF; // PLLMB disable. - - PMC(APBDEV_PMC_TSC_MULT) = (PMC(APBDEV_PMC_TSC_MULT) & 0xFFFF0000) | 0x16E0; // 0x249F = 12000000 * (16 / 32.768 kHz). - - CLOCK(CLK_RST_CONTROLLER_CLK_SOURCE_SYS) = 0; // Set BPMP/SCLK div to 1. - CLOCK(CLK_RST_CONTROLLER_SCLK_BURST_POLICY) = 0x20004444; // Set BPMP/SCLK source to Run and PLLP_OUT2 (204MHz). - CLOCK(CLK_RST_CONTROLLER_SUPER_SCLK_DIVIDER) = 0x80000000; // Enable SUPER_SDIV to 1. - CLOCK(CLK_RST_CONTROLLER_CLK_SYSTEM_RATE) = 2; // Set HCLK div to 1 and PCLK div to 3. } - -void clock_enable_cl_dvfs(){ - clock_enable(&_clock_cl_dvfs); -} -void clock_enable_i2c(u32 idx) -{ - clock_enable(&_clock_i2c[idx]); -} \ No newline at end of file diff --git a/loader/clock.h b/loader/clock.h index 597061a..eac32a0 100644 --- a/loader/clock.h +++ b/loader/clock.h @@ -27,26 +27,8 @@ typedef struct _clk_rst_t u8 clk_div; } clk_rst_t; -#define CLK_RST_CONTROLLER_CLK_SOURCE_EMC 0x19c -#define CLK_RST_CONTROLLER_CLK_ENB_H_SET 0x328 -#define CLK_RST_CONTROLLER_CLK_ENB_X_SET 0x284 -#define CLK_RST_CONTROLLER_RST_DEV_H_SET 0x308 -#define CLK_RST_CONTROLLER_SPARE_REG0 0x55c -#define CLK_RST_CONTROLLER_OSC_CTRL 0x50 -#define CLK_RST_CONTROLLER_CLK_SYSTEM_RATE 0x30 -#define CLK_RST_CONTROLLER_CLK_SOURCE_SYS 0x400 -#define CLK_RST_CONTROLLER_SCLK_BURST_POLICY 0x28 -#define CLK_RST_CONTROLLER_SUPER_SCLK_DIVIDER 0x2c -//I2C -#define CLK_RST_CONTROLLER_RST_DEVICES_L 0x4 -#define CLK_RST_CONTROLLER_RST_DEVICES_H 0x8 -#define CLK_RST_CONTROLLER_RST_DEVICES_U 0xC +#define CLK_RST_CONTROLLER_CLK_SOURCE_EMC_0 0x19c -#define CLK_RST_CONTROLLER_CLK_SOURCE_I2C2 0x198 -#define CLK_RST_CONTROLLER_CLK_OUT_ENB_H 0x14 -#define CLK_RST_CONTROLLER_CLK_SOURCE_I2C1 0x124 -#define CLK_RST_CONTROLLER_CLK_SOURCE_I2C5 0x128 -#define CLK_RST_CONTROLLER_CLK_OUT_ENB_L 0x10 void clock_enable(const clk_rst_t *clk); void clock_disable(const clk_rst_t *clk); void clock_enable_cl_dvfs(); diff --git a/loader/gpio.c b/loader/gpio.c index 0a89a0d..a3d0ac2 100644 --- a/loader/gpio.c +++ b/loader/gpio.c @@ -18,7 +18,5 @@ #include "i2c.h" #include "pinmux.h" void config_gpios(){ - APB_MISC(APB_MISC_PP_PINMUX_GLOBAL) = 0; - pinmux_config_i2c(I2C_1); - pinmux_config_i2c(I2C_5); + } \ No newline at end of file diff --git a/loader/main.c b/loader/main.c index 31a2252..2ca9763 100644 --- a/loader/main.c +++ b/loader/main.c @@ -66,23 +66,18 @@ void config_hw(){ fuse_disable_program(); printf_("[x] fuse program disabled\n"); + // Initialize counters, CLKM, BPMP(also called AVP in T124/T132) and other clocks based on 38.4MHz oscillator. + config_oscillators(); + mc_enable(); printf_("[x] mc setup\n"); - // Initialize counters, CLKM, BPMP(also called AVP in T124/T132) and other clocks based on 38.4MHz oscillator. - config_oscillators(); - printf_("[x] Oscillators setup at 12Mhz\n"); - printf_("\tCLK_M:12Mhz\n"); - printf_("\tCLK_S:32.768khz\n"); - printf_("\tSystem CLK:127.5Mhz\n"); - printf_("\tHCLK: 127.5Mhz\n"); - printf_("\tPCLK: 31.875Mhz\n"); - config_gpios(); printf_("[x] GPIO setup\n"); + - clock_enable_cl_dvfs(); - printf_("[x] DVFS setup\n"); + //clock_enable_cl_dvfs(); + //printf_("[x] DVFS setup\n"); //FIXME I2C Doesn't work!!! printf_("Fixme.I2C doesn't work"); diff --git a/loader/mc.c b/loader/mc.c index 172513f..e4c4962 100644 --- a/loader/mc.c +++ b/loader/mc.c @@ -20,29 +20,7 @@ #include "util.h" #include "mc.h" -void mc_disable_ahb_redirect() -{ - MC(MC_IRAM_BOM) = 0xFFFFF000; - MC(MC_IRAM_TOM) = 0; - //Disable IRAM_CFG_WRITE_ACCESS (sticky). - //MC(MC_IRAM_REG_CTRL) = MC(MC_IRAM_REG_CTRL) & 0xFFFFFFFE | 1; - CLOCK(0x3A4) &= 0xFFF7FFFF; -} void mc_enable() { - CLOCK(CLK_RST_CONTROLLER_CLK_SOURCE_EMC) = CLOCK(CLK_RST_CONTROLLER_CLK_SOURCE_EMC) & 0x1FFFFFFF | 0x40000000; - //Enable MIPI CAL clock. - CLOCK(CLK_RST_CONTROLLER_CLK_ENB_H_SET) = CLOCK(CLK_RST_CONTROLLER_CLK_ENB_H_SET) & 0xFDFFFFFF | 0x2000000; - //Enable MC clock. - CLOCK(CLK_RST_CONTROLLER_CLK_ENB_H_SET) = CLOCK(CLK_RST_CONTROLLER_CLK_ENB_H_SET) & 0xFFFFFFFE | 1; - //Enable EMC DLL clock. - CLOCK(CLK_RST_CONTROLLER_CLK_ENB_X_SET) = CLOCK(CLK_RST_CONTROLLER_CLK_ENB_X_SET) & 0xFFFFBFFF | 0x4000; - CLOCK(CLK_RST_CONTROLLER_RST_DEV_H_SET) = 0x2000001; //Clear EMC and MC reset. - //#ifdef CONFIG_ENABLE_AHB_REDIRECT - mc_disable_ahb_redirect(); - - - //mc_enable_ahb_redirect(); - //#endif } \ No newline at end of file diff --git a/loader/mc.h b/loader/mc.h index 5da635c..706f104 100644 --- a/loader/mc.h +++ b/loader/mc.h @@ -14,7 +14,5 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -#define MC_IRAM_BOM 0x65c -#define MC_IRAM_TOM 0x660 -#define MC_LATENCY_ALLOWANCE_A9AVP 0x3a4 + void mc_enable(); \ No newline at end of file diff --git a/loader/pinmux.c b/loader/pinmux.c index d6207e0..90e22f7 100644 --- a/loader/pinmux.c +++ b/loader/pinmux.c @@ -16,8 +16,3 @@ */ #include "t124.h" #include "pinmux.h" -void pinmux_config_i2c(u32 idx) -{ - PINMUX_AUX(PINMUX_AUX_X_I2C_SCL(idx)) = 0x40; - PINMUX_AUX(PINMUX_AUX_X_I2C_SDA(idx)) = 0x40; -} diff --git a/loader/pinmux.h b/loader/pinmux.h index a94d92e..e05311e 100644 --- a/loader/pinmux.h +++ b/loader/pinmux.h @@ -16,6 +16,4 @@ */ void pinmux_config_i2c(u32 idx); -/*! 0:GEN1, 1:GEN2, 2:GEN3, 3:CAM, 4:PWR */ -#define PINMUX_AUX_X_I2C_SCL(x) (0xBC + 8 * (x)) -#define PINMUX_AUX_X_I2C_SDA(x) (0xC0 + 8 * (x)) + diff --git a/loader/pmc.h b/loader/pmc.h index 71ad289..9f3efe4 100644 --- a/loader/pmc.h +++ b/loader/pmc.h @@ -15,9 +15,3 @@ * along with this program. If not, see . */ #include "types.h" -#define APBDEV_PMC_OSC_EDPD_OVER 0x1a4 -#define APBDEV_PMC_CNTRL2 0x440 -#define APBDEV_PMC_TSC_MULT 0x2B4 - -#define PMC_OSC_EDPD_OVER_OSC_CTRL_OVER BIT(22) -#define PMC_CNTRL2_HOLD_CKE_LOW_EN BIT(12) \ No newline at end of file diff --git a/loader/power.h b/loader/power.h index 7fff434..7b16e90 100644 --- a/loader/power.h +++ b/loader/power.h @@ -17,7 +17,5 @@ #ifndef _T124_POWER_H_ #define _T124_POWER_H_ -#define TPS65913_I2C_ADDR 0xB0 -#define PMU_EEPROM_I2C_ADDR 0xAA #endif \ No newline at end of file diff --git a/loader/se.h b/loader/se.h index 9a22357..b912ee3 100644 --- a/loader/se.h +++ b/loader/se.h @@ -18,12 +18,4 @@ #ifndef _T124_SE_H_ #define _T124_SE_H_ -#define SE_KEYTABLE_REG_OFFSET 0x31c -#define SE_KEYTABLE_SLOT_SHIFT 7 -#define SE_KEYTABLE_SLOT(x) (x << SE_KEYTABLE_SLOT_SHIFT) -#define SE_KEYTABLE_QUAD_SHIFT 2 -#define SE_KEY_TABLE_ACCESS_REG_OFFSET 0x284 -#define SE_INT_STATUS_REG_OFFSET 0x010 -#define SE_KEYTABLE_DATA0_REG_OFFSET 0x320 - #endif \ No newline at end of file