david/ipxe
david
/
ipxe
Archived
1
0
Fork 0

[arm] Split out 32-bit-specific code to arch/arm32

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown 2016-05-08 00:18:35 +01:00
parent 2a187f480e
commit edea3a434c
20 changed files with 54 additions and 38 deletions

View File

@ -3,23 +3,10 @@
ASM_TCHAR := %
ASM_TCHAR_OPS := %%
# Include common ARM headers
#
INCDIRS += arch/arm/include
# ARM-specific directories containing source files
#
SRCDIRS += arch/arm/core
SRCDIRS += arch/arm/libgcc
SRCDIRS += arch/arm/interface/efi
# ARM-specific flags
#
CFLAGS += -mthumb -mcpu=cortex-a15 -mabi=aapcs -mfloat-abi=soft
CFLAGS += -mword-relocations
ASFLAGS += -mthumb -mcpu=cortex-a15
# EFI requires -fshort-wchar, and nothing else currently uses wchar_t
#
CFLAGS += -fshort-wchar
# Include platform-specific Makefile
#
MAKEDEPS += arch/arm/Makefile.$(PLATFORM)
include arch/arm/Makefile.$(PLATFORM)

View File

@ -1,13 +1,5 @@
# -*- makefile -*- : Force emacs to use Makefile mode
# Specify EFI image builder
#
ELF2EFI = $(ELF2EFI32)
# Specify EFI boot file
#
EFI_BOOT_FILE = bootarm.efi
# Include generic EFI Makefile
#
MAKEDEPS += Makefile.efi

View File

@ -33,7 +33,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
*/
/** An ARM I/O qword */
union arm_io_qword {
union arm32_io_qword {
uint64_t qword;
uint32_t dword[2];
};
@ -44,12 +44,12 @@ union arm_io_qword {
* @v io_addr I/O address
* @ret data Value read
*
* This is not atomic for ARM.
* This is not atomic for ARM32.
*/
static uint64_t arm_readq ( volatile uint64_t *io_addr ) {
volatile union arm_io_qword *ptr =
container_of ( io_addr, union arm_io_qword, qword );
union arm_io_qword tmp;
static uint64_t arm32_readq ( volatile uint64_t *io_addr ) {
volatile union arm32_io_qword *ptr =
container_of ( io_addr, union arm32_io_qword, qword );
union arm32_io_qword tmp;
tmp.dword[0] = readl ( &ptr->dword[0] );
tmp.dword[1] = readl ( &ptr->dword[1] );
@ -62,12 +62,12 @@ static uint64_t arm_readq ( volatile uint64_t *io_addr ) {
* @v data Value to write
* @v io_addr I/O address
*
* This is not atomic for ARM.
* This is not atomic for ARM32.
*/
static void arm_writeq ( uint64_t data, volatile uint64_t *io_addr ) {
volatile union arm_io_qword *ptr =
container_of ( io_addr, union arm_io_qword, qword );
union arm_io_qword tmp;
static void arm32_writeq ( uint64_t data, volatile uint64_t *io_addr ) {
volatile union arm32_io_qword *ptr =
container_of ( io_addr, union arm32_io_qword, qword );
union arm32_io_qword tmp;
tmp.qword = data;
writel ( tmp.dword[0], &ptr->dword[0] );
@ -84,5 +84,5 @@ PROVIDE_IOAPI_INLINE ( arm, writew );
PROVIDE_IOAPI_INLINE ( arm, writel );
PROVIDE_IOAPI_INLINE ( arm, iodelay );
PROVIDE_IOAPI_INLINE ( arm, mb );
PROVIDE_IOAPI ( arm, readq, arm_readq );
PROVIDE_IOAPI ( arm, writeq, arm_writeq );
PROVIDE_IOAPI ( arm, readq, arm32_readq );
PROVIDE_IOAPI ( arm, writeq, arm32_writeq );

23
src/arch/arm32/Makefile Normal file
View File

@ -0,0 +1,23 @@
# ARM32-specific directories containing source files
#
SRCDIRS += arch/arm32/core
SRCDIRS += arch/arm32/libgcc
# ARM32-specific flags
#
CFLAGS += -mthumb -mcpu=cortex-a15 -mabi=aapcs -mfloat-abi=soft
CFLAGS += -mword-relocations
ASFLAGS += -mthumb -mcpu=cortex-a15
# EFI requires -fshort-wchar, and nothing else currently uses wchar_t
#
CFLAGS += -fshort-wchar
# Include common ARM Makefile
MAKEDEPS += arch/arm/Makefile
include arch/arm/Makefile
# Include platform-specific Makefile
#
MAKEDEPS += arch/arm32/Makefile.$(PLATFORM)
include arch/arm32/Makefile.$(PLATFORM)

View File

@ -0,0 +1,14 @@
# -*- makefile -*- : Force emacs to use Makefile mode
# Specify EFI image builder
#
ELF2EFI = $(ELF2EFI32)
# Specify EFI boot file
#
EFI_BOOT_FILE = bootarm.efi
# Include generic EFI Makefile
#
MAKEDEPS += arch/arm/Makefile.efi
include arch/arm/Makefile.efi