more avr32 work
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright (c) 2009 Travis Geiselbrecht
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files
|
||||
* (the "Software"), to deal in the Software without restriction,
|
||||
* including without limitation the rights to use, copy, modify, merge,
|
||||
* publish, distribute, sublicense, and/or sell copies of the Software,
|
||||
* and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
.section ".text.boot"
|
||||
.globl _start
|
||||
_start:
|
||||
|
||||
|
||||
196
arch/avr32/ops.S
Normal file
196
arch/avr32/ops.S
Normal file
@@ -0,0 +1,196 @@
|
||||
/*
|
||||
* Copyright (c) 2009 Travis Geiselbrecht
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files
|
||||
* (the "Software"), to deal in the Software without restriction,
|
||||
* including without limitation the rights to use, copy, modify, merge,
|
||||
* publish, distribute, sublicense, and/or sell copies of the Software,
|
||||
* and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
#include <asm.h>
|
||||
|
||||
.text
|
||||
|
||||
/* void arch_enable_ints(void); */
|
||||
FUNCTION(arch_enable_ints)
|
||||
#if 0
|
||||
mrs r0, cpsr
|
||||
bic r0, r0, #(1<<7) /* clear the I bit */
|
||||
msr cpsr_c, r0
|
||||
bx lr
|
||||
#endif
|
||||
|
||||
/* void arch_disable_ints(void); */
|
||||
FUNCTION(arch_disable_ints)
|
||||
#if 0
|
||||
mrs r0, cpsr
|
||||
orr r0, r0, #(1<<7)
|
||||
msr cpsr_c, r0
|
||||
bx lr
|
||||
#endif
|
||||
|
||||
/* int atomic_swap(int *ptr, int val); */
|
||||
FUNCTION(atomic_swap)
|
||||
#if 0
|
||||
swp r2, r1, [r0]
|
||||
mov r0, r2
|
||||
bx lr
|
||||
#endif
|
||||
|
||||
/* int atomic_add(int *ptr, int val); */
|
||||
FUNCTION(atomic_add)
|
||||
#if 0
|
||||
#if ARM_ISA_ARMV6 || ARM_ISA_ARMV7
|
||||
/* use load/store exclusive */
|
||||
.L_loop_add:
|
||||
ldrex r12, [r0]
|
||||
add r2, r12, r1
|
||||
strex r3, r2, [r0]
|
||||
cmp r3, #0
|
||||
bne .L_loop_add
|
||||
|
||||
/* save old value */
|
||||
mov r0, r12
|
||||
bx lr
|
||||
#else
|
||||
/* disable interrupts, do the add, and reenable */
|
||||
mrs r2, cpsr
|
||||
mov r12, r2
|
||||
orr r2, r2, #(3<<6)
|
||||
msr cpsr_c, r2
|
||||
|
||||
/* ints disabled, old cpsr state in r12 */
|
||||
|
||||
/* do the add, leave the previous value in r0 */
|
||||
mov r3, r0
|
||||
ldr r0, [r3]
|
||||
add r2, r0, r1
|
||||
str r2, [r3]
|
||||
|
||||
/* restore interrupts and exit */
|
||||
msr cpsr_c, r12
|
||||
bx lr
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* int atomic_and(int *ptr, int val); */
|
||||
FUNCTION(atomic_and)
|
||||
#if 0
|
||||
#if ARM_ISA_ARMV6 || ARM_ISA_ARMV7
|
||||
/* use load/store exclusive */
|
||||
.L_loop_and:
|
||||
ldrex r12, [r0]
|
||||
and r2, r12, r1
|
||||
strex r3, r2, [r0]
|
||||
cmp r3, #0
|
||||
bne .L_loop_and
|
||||
|
||||
/* save old value */
|
||||
mov r0, r12
|
||||
bx lr
|
||||
#else
|
||||
/* disable interrupts, do the and, and reenable */
|
||||
mrs r2, cpsr
|
||||
mov r12, r2
|
||||
orr r2, r2, #(3<<6)
|
||||
msr cpsr_c, r2
|
||||
|
||||
/* ints disabled, old cpsr state in r12 */
|
||||
|
||||
/* do the and, leave the previous value in r0 */
|
||||
mov r3, r0
|
||||
ldr r0, [r3]
|
||||
and r2, r0, r1
|
||||
str r2, [r3]
|
||||
|
||||
/* restore interrupts and exit */
|
||||
msr cpsr_c, r12
|
||||
bx lr
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* int atomic_or(int *ptr, int val); */
|
||||
FUNCTION(atomic_or)
|
||||
#if 0
|
||||
#if ARM_ISA_ARMV6 || ARM_ISA_ARMV7
|
||||
/* use load/store exclusive */
|
||||
.L_loop_or:
|
||||
ldrex r12, [r0]
|
||||
orr r2, r12, r1
|
||||
strex r3, r2, [r0]
|
||||
cmp r3, #0
|
||||
bne .L_loop_or
|
||||
|
||||
/* save old value */
|
||||
mov r0, r12
|
||||
bx lr
|
||||
#else
|
||||
/* disable interrupts, do the or, and reenable */
|
||||
mrs r2, cpsr
|
||||
mov r12, r2
|
||||
orr r2, r2, #(3<<6)
|
||||
msr cpsr_c, r2
|
||||
|
||||
/* ints disabled, old cpsr state in r12 */
|
||||
|
||||
/* do the or, leave the previous value in r0 */
|
||||
mov r3, r0
|
||||
ldr r0, [r3]
|
||||
orr r2, r0, r1
|
||||
str r2, [r3]
|
||||
|
||||
/* restore interrupts and exit */
|
||||
msr cpsr_c, r12
|
||||
bx lr
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* void arch_idle(); */
|
||||
FUNCTION(arch_idle)
|
||||
#if 0
|
||||
#if ARM_CPU_CORTEX_A8
|
||||
wfi
|
||||
#elif PLATFORM_MSM7K
|
||||
/* TODO: safely handle wfi */
|
||||
#elif ARM_CPU_ARM1136 || ARM_CPU_ARM926
|
||||
mov r0, #0
|
||||
mcr p15, 0, r0, c7, c0, #4
|
||||
#elif ARM_CPU_ARM7
|
||||
/* nothing to do here */
|
||||
#else
|
||||
#error unknown cpu
|
||||
#endif
|
||||
bx lr
|
||||
#endif
|
||||
|
||||
/* void arch_switch_stacks_and_call(addr_t call, addr_t stack) */
|
||||
FUNCTION(arch_switch_stacks_and_call)
|
||||
#if 0
|
||||
mov sp, r1
|
||||
bx r0
|
||||
#endif
|
||||
|
||||
/* uint32_t arch_cycle_count(void); */
|
||||
FUNCTION(arch_cycle_count)
|
||||
#if 0
|
||||
#if ARM_CPU_CORTEX_A8
|
||||
mrc p15, 0, r0, c9, c13, 0
|
||||
#else
|
||||
mov r0, #0
|
||||
#endif
|
||||
bx lr
|
||||
#endif
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
LOCAL_DIR := $(GET_LOCAL_DIR)
|
||||
|
||||
# can override this in local.mk
|
||||
ENABLE_THUMB?=true
|
||||
|
||||
DEFINES += \
|
||||
AVR32_CPU_$(AVR32_CPU)=1
|
||||
|
||||
@@ -13,20 +10,20 @@ BOOTOBJS += \
|
||||
$(LOCAL_DIR)/crt0.o
|
||||
|
||||
OBJS += \
|
||||
$(LOCAL_DIR)/ops.o \
|
||||
|
||||
# $(LOCAL_DIR)/arch.Ao \
|
||||
$(LOCAL_DIR)/asm.o \
|
||||
$(LOCAL_DIR)/cache.o \
|
||||
$(LOCAL_DIR)/cache-ops.o \
|
||||
$(LOCAL_DIR)/ops.o \
|
||||
$(LOCAL_DIR)/exceptions.o \
|
||||
$(LOCAL_DIR)/faults.o \
|
||||
$(LOCAL_DIR)/mmu.o \
|
||||
$(LOCAL_DIR)/thread.o \
|
||||
$(LOCAL_DIR)/dcc.o
|
||||
|
||||
# set the default toolchain to arm elf and set a #define
|
||||
TOOLCHAIN_PREFIX ?= avr32-elf-
|
||||
# set the default toolchain and set a #define
|
||||
TOOLCHAIN_PREFIX ?= avr32-
|
||||
|
||||
# make sure some bits were set up
|
||||
MEMVARS_SET := 0
|
||||
@@ -40,7 +37,7 @@ ifeq ($(MEMVARS_SET),0)
|
||||
$(error missing MEMBASE or MEMSIZE variable, please set in target rules.mk)
|
||||
endif
|
||||
|
||||
LIBGCC := $(shell $(TOOLCHAIN_PREFIX)gcc $(CFLAGS) $(THUMBCFLAGS) -print-libgcc-file-name)
|
||||
LIBGCC := $(shell $(TOOLCHAIN_PREFIX)gcc $(CFLAGS) -print-libgcc-file-name)
|
||||
#$(info LIBGCC = $(LIBGCC))
|
||||
|
||||
# potentially generated files that should be cleaned out with clean make rule
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
|
||||
OUTPUT_ARCH(arm)
|
||||
OUTPUT_FORMAT("elf32-avr32", "elf32-avr32", "elf32-avr32")
|
||||
OUTPUT_ARCH(avr32)
|
||||
|
||||
ENTRY(_start)
|
||||
SECTIONS
|
||||
|
||||
@@ -5,6 +5,5 @@ LOCAL_DIR := $(GET_LOCAL_DIR)
|
||||
TARGET := ngw100
|
||||
MODULES += \
|
||||
app/tests \
|
||||
app/stringtests \
|
||||
app/shell
|
||||
|
||||
|
||||
Reference in New Issue
Block a user