Skip to content

Commit

Permalink
arm/score and shared: define ARM hypervisor mode and alternate vector…
Browse files Browse the repository at this point in the history
… table base access.

The main reason for inclusion of minimum hypervisor related defines
is that current ARM boards firmware and loaders (U-boot for example)
start loaded operating system kernel in HYP mode to allow it take
control of virtualization (Linux/KVM for example).
  • Loading branch information
ppisa committed Jul 4, 2016
1 parent 2e3ba71 commit 8d93438
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 0 deletions.
30 changes: 30 additions & 0 deletions c/src/lib/libcpu/arm/shared/include/arm-cp15.h
Original file line number Diff line number Diff line change
Expand Up @@ -1324,6 +1324,36 @@ arm_cp15_set_vector_base_address(void *base)
);
}

ARM_CP15_TEXT_SECTION static inline void
*arm_cp15_get_hyp_vector_base_address(void)
{
ARM_SWITCH_REGISTERS;
void *base;

__asm__ volatile (
ARM_SWITCH_TO_ARM
"mrc p15, 4, %[base], c12, c0, 0\n"
ARM_SWITCH_BACK
: [base] "=&r" (base) ARM_SWITCH_ADDITIONAL_OUTPUT
);

return base;
}

ARM_CP15_TEXT_SECTION static inline void
arm_cp15_set_hyp_vector_base_address(void *base)
{
ARM_SWITCH_REGISTERS;

__asm__ volatile (
ARM_SWITCH_TO_ARM
"mcr p15, 4, %[base], c12, c0, 0\n"
ARM_SWITCH_BACK
: ARM_SWITCH_OUTPUT
: [base] "r" (base)
);
}

/**
* @brief Sets the @a section_flags for the address range [@a begin, @a end).
*
Expand Down
1 change: 1 addition & 0 deletions cpukit/score/cpu/arm/rtems/score/cpu.h
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@
#define ARM_PSR_M_IRQ 0x12
#define ARM_PSR_M_SVC 0x13
#define ARM_PSR_M_ABT 0x17
#define ARM_PSR_M_HYP 0x1a
#define ARM_PSR_M_UND 0x1b
#define ARM_PSR_M_SYS 0x1f

Expand Down

0 comments on commit 8d93438

Please sign in to comment.