1 INTERFACE [arm && mp && tegra2]:
3 #include "mem_layout.h"
10 Reset_vector_addr = Mem_layout::Devices1_map_base + 0xf100,
11 Clk_rst_ctrl_clk_cpu_cmplx = Mem_layout::Devices1_map_base + 0x604c,
12 Clk_rst_ctrl_rst_cpu_cmplx_clr = Mem_layout::Devices1_map_base + 0x6344,
13 Unhalt_addr = Mem_layout::Devices1_map_base + 0x7014,
16 Mword _orig_reset_vector;
19 IMPLEMENTATION [arm && mp && tegra2]:
25 Boot_mp::start_ap_cpus(Address phys_reset_vector)
27 // remember original reset vector
28 _orig_reset_vector = Io::read<Mword>(Reset_vector_addr);
30 // set (temporary) new reset vector
31 Io::write<Mword>(phys_reset_vector, Reset_vector_addr);
33 // clocks on other cpu
34 Mword r = Io::read<Mword>(Clk_rst_ctrl_clk_cpu_cmplx);
35 Io::write<Mword>(r & ~(1 << 9), Clk_rst_ctrl_clk_cpu_cmplx);
36 Io::write<Mword>((1 << 13) | (1 << 9) | (1 << 5) | (1 << 1),
37 Clk_rst_ctrl_rst_cpu_cmplx_clr);
40 Io::write<Mword>(0, Unhalt_addr);
47 Io::write<Mword>(_orig_reset_vector, Reset_vector_addr);