From 4bade47a7e8cf80e441342bcb0135eafe1bd0062 Mon Sep 17 00:00:00 2001 From: Travis Geiselbrecht Date: Fri, 28 Aug 2015 16:34:08 -0700 Subject: [PATCH] [platform][armemu] add support for a fake armemu cpu For the moment fix it as a armv7-a cpu with no mmu and no thumb. --- arch/arm/include/arch/defines.h | 2 ++ arch/arm/rules.mk | 10 ++++++++++ arch/arm/toolchain.mk | 3 +++ platform/armemu/interrupts.c | 12 ------------ platform/armemu/rules.mk | 5 ++--- platform/armemu/timer.c | 4 ---- project/armemu-test.mk | 7 +++---- 7 files changed, 20 insertions(+), 23 deletions(-) diff --git a/arch/arm/include/arch/defines.h b/arch/arm/include/arch/defines.h index ad138914..053b8c57 100644 --- a/arch/arm/include/arch/defines.h +++ b/arch/arm/include/arch/defines.h @@ -34,6 +34,8 @@ #define CACHE_LINE 32 #elif ARM_CPU_ARM1136 #define CACHE_LINE 32 +#elif ARM_CPU_ARMEMU +#define CACHE_LINE 32 #elif ARM_CPU_CORTEX_A7 #define CACHE_LINE 64 /* XXX L1 icache is 32 bytes */ #elif ARM_CPU_CORTEX_A8 diff --git a/arch/arm/rules.mk b/arch/arm/rules.mk index 2b285499..985aaf78 100644 --- a/arch/arm/rules.mk +++ b/arch/arm/rules.mk @@ -151,6 +151,16 @@ GLOBAL_DEFINES += \ ARM_CPU_ARM1136=1 HANDLED_CORE := true endif +ifeq ($(ARM_CPU),armemu) +# flavor of emulated cpu by the armemu project +GLOBAL_DEFINES += \ + ARM_WITH_CP15=1 \ + ARM_ISA_ARMv7=1 \ + ARM_ISA_ARMv7A=1 \ + ARM_WITH_CACHE=1 +HANDLED_CORE := true +ENABLE_THUMB := false # armemu doesn't currently support thumb properly +endif ifneq ($(HANDLED_CORE),true) $(error $(LOCAL_DIR)/rules.mk doesnt have logic for arm core $(ARM_CPU)) diff --git a/arch/arm/toolchain.mk b/arch/arm/toolchain.mk index 2d80b7a7..4e1e4265 100644 --- a/arch/arm/toolchain.mk +++ b/arch/arm/toolchain.mk @@ -90,5 +90,8 @@ endif ifeq ($(ARM_CPU),arm1176jzf-s) ARCH_arm_COMPILEFLAGS += -mcpu=$(ARM_CPU) endif +ifeq ($(ARM_CPU),armemu) +ARCH_arm_COMPILEFLAGS += -march=armv7-a +endif endif diff --git a/platform/armemu/interrupts.c b/platform/armemu/interrupts.c index fdca80c0..df6480f8 100644 --- a/platform/armemu/interrupts.c +++ b/platform/armemu/interrupts.c @@ -52,12 +52,8 @@ status_t mask_interrupt(unsigned int vector) // dprintf("%s: vector %d\n", __PRETTY_FUNCTION__, vector); - enter_critical_section(); - *REG32(PIC_MASK_LATCH) = 1 << vector; - exit_critical_section(); - return NO_ERROR; } @@ -68,12 +64,8 @@ status_t unmask_interrupt(unsigned int vector) // dprintf("%s: vector %d\n", __PRETTY_FUNCTION__, vector); - enter_critical_section(); - *REG32(PIC_UNMASK_LATCH) = 1 << vector; - exit_critical_section(); - return NO_ERROR; } @@ -113,11 +105,7 @@ void register_int_handler(unsigned int vector, int_handler handler, void *arg) if (vector >= PIC_MAX_INT) panic("register_int_handler: vector out of range %d\n", vector); - enter_critical_section(); - int_handler_table[vector].handler = handler; int_handler_table[vector].arg = arg; - - exit_critical_section(); } diff --git a/platform/armemu/rules.mk b/platform/armemu/rules.mk index f4d8050c..b9a58e39 100644 --- a/platform/armemu/rules.mk +++ b/platform/armemu/rules.mk @@ -3,11 +3,10 @@ LOCAL_DIR := $(GET_LOCAL_DIR) MODULE := $(LOCAL_DIR) ARCH := arm -ARM_CPU := arm1136j-s +ARM_CPU := armemu CPU := generic -# emulater doesn't support thumb properly -ENABLE_THUMB := false +WITH_KERNEL_VM := 0 GLOBAL_INCLUDES += \ $(LOCAL_DIR)/include diff --git a/platform/armemu/timer.c b/platform/armemu/timer.c index 2d5f9db7..3f7f135c 100644 --- a/platform/armemu/timer.c +++ b/platform/armemu/timer.c @@ -33,8 +33,6 @@ static platform_timer_callback t_callback; status_t platform_set_periodic_timer(platform_timer_callback callback, void *arg, lk_time_t interval) { - enter_critical_section(); - t_callback = callback; *REG(PIT_CLEAR) = 1; @@ -43,8 +41,6 @@ status_t platform_set_periodic_timer(platform_timer_callback callback, void *arg unmask_interrupt(INT_PIT); - exit_critical_section(); - return NO_ERROR; } diff --git a/project/armemu-test.mk b/project/armemu-test.mk index cb23048c..c7993634 100644 --- a/project/armemu-test.mk +++ b/project/armemu-test.mk @@ -13,10 +13,7 @@ MODULES += \ lib/gfxconsole \ lib/text \ lib/tga \ - lib/evlog \ - lib/debugcommands \ - app/tests \ - app/shell + lib/evlog GLOBAL_DEFINES += \ WITH_KERNEL_EVLOG=1 @@ -28,3 +25,5 @@ GLOBAL_DEFINES += \ #EXTRA_BUILDDEPS += $(BUILDDIR)/armemu.conf #GENERATED += $(BUILDDIR)/armemu.conf + +include project/virtual/test.mk