1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 3 #include <assert.h> 4 #include <arch/exception.h> 5 #include <arch/stages.h> 6 #include <bootblock_common.h> 7 #include <console/console.h> 8 #include <program_loading.h> 9 #include <soc/clock.h> 10 #include <soc/nvidia/tegra/apbmisc.h> 11 #include <soc/pinmux.h> 12 #include <soc/power.h> 13 #include <timestamp.h> 14 #include <vendorcode/google/chromeos/chromeos.h> 15 16 /* called from assembly in bootblock_asm.S */ 17 void tegra124_main(void); 18 run_next_stage(void * entry)19static void run_next_stage(void *entry) 20 { 21 ASSERT(entry); 22 clock_cpu0_config(entry); 23 24 power_enable_and_ungate_cpu(); 25 26 /* Repair RAM on cluster0 and cluster1 after CPU is powered on. */ 27 ram_repair(); 28 29 clock_cpu0_remove_reset(); 30 31 clock_halt_avp(); 32 } 33 tegra124_main(void)34void tegra124_main(void) 35 { 36 // enable pinmux clamp inputs 37 clamp_tristate_inputs(); 38 39 // enable JTAG at the earliest stage 40 enable_jtag(); 41 42 clock_early_uart(); 43 44 // Serial out, tristate off. 45 pinmux_set_config(PINMUX_KB_ROW9_INDEX, PINMUX_KB_ROW9_FUNC_UA3); 46 // Serial in, tristate_on. 47 pinmux_set_config(PINMUX_KB_ROW10_INDEX, PINMUX_KB_ROW10_FUNC_UA3 | 48 PINMUX_PULL_UP | 49 PINMUX_INPUT_ENABLE); 50 // Mux some pins away from uart A. 51 pinmux_set_config(PINMUX_UART2_CTS_N_INDEX, 52 PINMUX_UART2_CTS_N_FUNC_UB3 | 53 PINMUX_INPUT_ENABLE); 54 pinmux_set_config(PINMUX_UART2_RTS_N_INDEX, 55 PINMUX_UART2_RTS_N_FUNC_UB3); 56 57 if (CONFIG(BOOTBLOCK_CONSOLE)) { 58 console_init(); 59 exception_init(); 60 } 61 62 clock_init(); 63 64 bootblock_mainboard_init(); 65 66 pinmux_set_config(PINMUX_CORE_PWR_REQ_INDEX, 67 PINMUX_CORE_PWR_REQ_FUNC_PWRON); 68 pinmux_set_config(PINMUX_CPU_PWR_REQ_INDEX, 69 PINMUX_CPU_PWR_REQ_FUNC_CPU); 70 pinmux_set_config(PINMUX_PWR_INT_N_INDEX, 71 PINMUX_PWR_INT_N_FUNC_PMICINTR | 72 PINMUX_INPUT_ENABLE); 73 74 timestamp_init(0); 75 76 run_romstage(); 77 } 78 platform_prog_run(struct prog * prog)79void platform_prog_run(struct prog *prog) 80 { 81 run_next_stage(prog_entry(prog)); 82 } 83