Support smp for imx6q-sabrelite.

This commit is contained in:
TXuian
2024-03-21 14:54:52 +08:00
parent 620965dc2c
commit 0f5527d73a
21 changed files with 257 additions and 57 deletions
@@ -109,7 +109,7 @@ void dabort_handler(struct trapframe* r)
LOG("data abort at 0x%x, status 0x%x\n", dfa, dfs);
_abort_reason(dfs);
dump_tf(r);
sys_exit();
sys_exit(cur_cpu()->task);
context_switch(&cur_cpu()->task->main_thread.context, cur_cpu()->scheduler);
} else { // Exception occured in Kernel space: panic
LOG("program counter: 0x%x caused\n", r->pc);
@@ -136,7 +136,7 @@ void iabort_handler(struct trapframe* r)
LOG("prefetch abort at 0x%x, status 0x%x\n", ifa, ifs);
_abort_reason(ifs);
dump_tf(r);
sys_exit();
sys_exit(cur_cpu()->task);
context_switch(&cur_cpu()->task->main_thread.context, cur_cpu()->scheduler);
} else { // Exception occured in Kernel space: panic
LOG("program counter: 0x%x(%s) caused\n", r->pc, cur_cpu()->task);
@@ -87,6 +87,8 @@ void handle_fiq(void)
static void _sys_irq_init(int cpu_id)
{
init_cpu_mode_stacks(cpu_id);
if (cpu_id == 0) {
/* load exception vectors */
volatile uint32_t* vector_base = &_vector_start;
@@ -101,8 +103,6 @@ static void _sys_irq_init(int cpu_id)
vector_base[7] = (uint32_t)handle_fiq; // FIQ
}
init_cpu_mode_stacks(cpu_id);
/* active hardware irq responser */
XScuGic_Config* gic_config = XScuGic_LookupConfig(XPAR_PS7_SCUGIC_0_DEVICE_ID);
if (NULL == gic_config) {
@@ -244,7 +244,7 @@ static struct XiziTrapDriver xizi_trap_driver = {
struct XiziTrapDriver* hardkernel_intr_init(struct TraceTag* hardkernel_tag)
{
xizi_trap_driver.sys_irq_init();
xizi_trap_driver.sys_irq_init(0);
xizi_trap_driver.cpu_irq_enable();
return &xizi_trap_driver;
}