diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-07-26 14:10:25 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-07-30 09:53:23 +0200 |
commit | fe52e7c07cc330e98484fd4acc38586722b93132 (patch) | |
tree | 3fb3e92e5174a2c2e636eb53efd9cacf36ab58c4 /c/src/lib/libbsp/powerpc | |
parent | smp: Use Thread_Control.is_executing (diff) | |
download | rtems-fe52e7c07cc330e98484fd4acc38586722b93132.tar.bz2 |
smp: Add and use _Per_CPU_Get()
Add and use _Per_CPU_Get_by_index() and _Per_CPU_Get_index(). Add
_Per_CPU_Send_interrupt(). This avoids direct access of
_Per_CPU_Information.
Diffstat (limited to 'c/src/lib/libbsp/powerpc')
-rw-r--r-- | c/src/lib/libbsp/powerpc/qoriq/startup/smp.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/c/src/lib/libbsp/powerpc/qoriq/startup/smp.c b/c/src/lib/libbsp/powerpc/qoriq/startup/smp.c index 30bcb7bc28..9caaa99a01 100644 --- a/c/src/lib/libbsp/powerpc/qoriq/startup/smp.c +++ b/c/src/lib/libbsp/powerpc/qoriq/startup/smp.c @@ -87,6 +87,7 @@ static void mmu_config_undo(void) static void release_core_1(void) { + const Per_CPU_Control *second_cpu = _Per_CPU_Get_by_index(1); uboot_spin_table *spin_table = (uboot_spin_table *) SPIN_TABLE; qoriq_mmu_context mmu_context; @@ -96,7 +97,7 @@ static void release_core_1(void) qoriq_mmu_write_to_tlb1(&mmu_context, TLB_BEGIN); spin_table->pir = 1; - spin_table->r3_lower = (uint32_t) _Per_CPU_Information[1].interrupt_stack_high; + spin_table->r3_lower = (uint32_t) second_cpu->interrupt_stack_high; spin_table->addr_upper = 0; rtems_cache_flush_multiple_data_lines(spin_table, sizeof(*spin_table)); ppc_synchronize_data(); @@ -108,13 +109,15 @@ static void release_core_1(void) void qoriq_secondary_cpu_initialize(void) { + const Per_CPU_Control *second_cpu = _Per_CPU_Get_by_index(1); + /* Disable decrementer */ PPC_CLEAR_SPECIAL_PURPOSE_REGISTER_BITS(BOOKE_TCR, BOOKE_TCR_DIE); /* Initialize exception handler */ ppc_exc_initialize_with_vector_base( PPC_INTERRUPT_DISABLE_MASK_DEFAULT, - (uintptr_t) _Per_CPU_Information[1].interrupt_stack_low, + (uintptr_t) second_cpu->interrupt_stack_low, rtems_configuration_get_interrupt_stack_size(), bsp_exc_vector_base ); |