diff --git a/repos/base-hw/src/core/arm/short_translation_table.h b/repos/base-hw/src/core/arm/short_translation_table.h index 49e0656d1d..64a153b8af 100644 --- a/repos/base-hw/src/core/arm/short_translation_table.h +++ b/repos/base-hw/src/core/arm/short_translation_table.h @@ -22,6 +22,7 @@ /* base-hw includes */ #include #include +#include namespace Arm { @@ -184,7 +185,7 @@ class Arm::Section_table access_t v = access_permission_bits(flags); v |= memory_region_attr(flags); v |= Ng::bits(!flags.global); - v |= S::bits(1); + v |= S::bits(Processor_driver::is_smp()); v |= Pa::masked(pa); Descriptor::type(v, Descriptor::SMALL_PAGE); return v; @@ -447,7 +448,7 @@ class Arm::Section_table access_t v = access_permission_bits
(flags); v |= memory_region_attr
(flags); v |= Domain::bits(DOMAIN); - v |= S::bits(1); + v |= S::bits(Processor_driver::is_smp()); v |= Ng::bits(!flags.global); v |= Pa::masked(pa); Descriptor::type(v, Descriptor::SECTION); diff --git a/repos/base-hw/src/core/processor_driver/arm.h b/repos/base-hw/src/core/processor_driver/arm.h index 2c231a898d..280e363672 100644 --- a/repos/base-hw/src/core/processor_driver/arm.h +++ b/repos/base-hw/src/core/processor_driver/arm.h @@ -699,6 +699,11 @@ namespace Arm base = base & LINE_ALIGNM_MASK; for (; base < top; base += LINE_SIZE) { Icimvau::write(base); } } + + /** + * Return true if the processor support multiple cores + */ + static bool is_smp() { return PROCESSORS > 1; } }; } diff --git a/repos/base-hw/src/core/processor_driver/arm_v6.h b/repos/base-hw/src/core/processor_driver/arm_v6.h index 6a71d44bef..660670e7ee 100644 --- a/repos/base-hw/src/core/processor_driver/arm_v6.h +++ b/repos/base-hw/src/core/processor_driver/arm_v6.h @@ -182,7 +182,7 @@ namespace Arm_v6 static void start_secondary_processors(void * const ip) { - if (PROCESSORS > 1) { PERR("multiprocessing not implemented"); } + if (is_smp()) { PERR("multiprocessing not implemented"); } } /** diff --git a/repos/base-hw/src/core/processor_driver/arm_v7.h b/repos/base-hw/src/core/processor_driver/arm_v7.h index 60778d9b9d..35c3fc7fd7 100644 --- a/repos/base-hw/src/core/processor_driver/arm_v7.h +++ b/repos/base-hw/src/core/processor_driver/arm_v7.h @@ -359,7 +359,7 @@ namespace Arm_v7 */ static void start_secondary_processors(void * const ip) { - if (PROCESSORS > 1) { + if (is_smp()) { Genode::Board::secondary_processors_ip(ip); data_synchronization_barrier(); asm volatile ("sev\n");