From edea3a434ccae8dc980c715949287c9ba63babf5 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Sun, 8 May 2016 00:18:35 +0100 Subject: [PATCH] [arm] Split out 32-bit-specific code to arch/arm32 Signed-off-by: Michael Brown --- src/arch/arm/Makefile | 21 +++------------ src/arch/arm/Makefile.efi | 8 ------ src/arch/arm/core/arm_io.c | 26 +++++++++---------- src/arch/arm32/Makefile | 23 ++++++++++++++++ src/arch/arm32/Makefile.efi | 14 ++++++++++ .../core/arm32_bigint.c} | 0 src/arch/{arm => arm32}/core/setjmp.S | 0 src/arch/{arm => arm32}/include/bits/bigint.h | 0 src/arch/{arm => arm32}/include/bits/bitops.h | 0 .../{arm => arm32}/include/bits/byteswap.h | 0 .../{arm => arm32}/include/bits/compiler.h | 0 .../{arm => arm32}/include/bits/profile.h | 0 src/arch/{arm => arm32}/include/bits/stdint.h | 0 .../{arm => arm32}/include/bits/strings.h | 0 .../include/efi/ipxe/dhcp_arch.h | 0 src/arch/{arm => arm32}/include/gdbmach.h | 0 src/arch/{arm => arm32}/include/limits.h | 0 src/arch/{arm => arm32}/include/setjmp.h | 0 src/arch/{arm => arm32}/libgcc/lldivmod.S | 0 src/arch/{arm => arm32}/libgcc/llshift.S | 0 20 files changed, 54 insertions(+), 38 deletions(-) create mode 100644 src/arch/arm32/Makefile create mode 100644 src/arch/arm32/Makefile.efi rename src/arch/{arm/core/arm_bigint.c => arm32/core/arm32_bigint.c} (100%) rename src/arch/{arm => arm32}/core/setjmp.S (100%) rename src/arch/{arm => arm32}/include/bits/bigint.h (100%) rename src/arch/{arm => arm32}/include/bits/bitops.h (100%) rename src/arch/{arm => arm32}/include/bits/byteswap.h (100%) rename src/arch/{arm => arm32}/include/bits/compiler.h (100%) rename src/arch/{arm => arm32}/include/bits/profile.h (100%) rename src/arch/{arm => arm32}/include/bits/stdint.h (100%) rename src/arch/{arm => arm32}/include/bits/strings.h (100%) rename src/arch/{arm => arm32}/include/efi/ipxe/dhcp_arch.h (100%) rename src/arch/{arm => arm32}/include/gdbmach.h (100%) rename src/arch/{arm => arm32}/include/limits.h (100%) rename src/arch/{arm => arm32}/include/setjmp.h (100%) rename src/arch/{arm => arm32}/libgcc/lldivmod.S (100%) rename src/arch/{arm => arm32}/libgcc/llshift.S (100%) diff --git a/src/arch/arm/Makefile b/src/arch/arm/Makefile index f883a64d6..3cee5f3ac 100644 --- a/src/arch/arm/Makefile +++ b/src/arch/arm/Makefile @@ -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) diff --git a/src/arch/arm/Makefile.efi b/src/arch/arm/Makefile.efi index 909c8d21b..f04be425b 100644 --- a/src/arch/arm/Makefile.efi +++ b/src/arch/arm/Makefile.efi @@ -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 diff --git a/src/arch/arm/core/arm_io.c b/src/arch/arm/core/arm_io.c index 804014c9a..4bc47a5c6 100644 --- a/src/arch/arm/core/arm_io.c +++ b/src/arch/arm/core/arm_io.c @@ -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 ); diff --git a/src/arch/arm32/Makefile b/src/arch/arm32/Makefile new file mode 100644 index 000000000..3a7c09230 --- /dev/null +++ b/src/arch/arm32/Makefile @@ -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) diff --git a/src/arch/arm32/Makefile.efi b/src/arch/arm32/Makefile.efi new file mode 100644 index 000000000..a06354f1d --- /dev/null +++ b/src/arch/arm32/Makefile.efi @@ -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 diff --git a/src/arch/arm/core/arm_bigint.c b/src/arch/arm32/core/arm32_bigint.c similarity index 100% rename from src/arch/arm/core/arm_bigint.c rename to src/arch/arm32/core/arm32_bigint.c diff --git a/src/arch/arm/core/setjmp.S b/src/arch/arm32/core/setjmp.S similarity index 100% rename from src/arch/arm/core/setjmp.S rename to src/arch/arm32/core/setjmp.S diff --git a/src/arch/arm/include/bits/bigint.h b/src/arch/arm32/include/bits/bigint.h similarity index 100% rename from src/arch/arm/include/bits/bigint.h rename to src/arch/arm32/include/bits/bigint.h diff --git a/src/arch/arm/include/bits/bitops.h b/src/arch/arm32/include/bits/bitops.h similarity index 100% rename from src/arch/arm/include/bits/bitops.h rename to src/arch/arm32/include/bits/bitops.h diff --git a/src/arch/arm/include/bits/byteswap.h b/src/arch/arm32/include/bits/byteswap.h similarity index 100% rename from src/arch/arm/include/bits/byteswap.h rename to src/arch/arm32/include/bits/byteswap.h diff --git a/src/arch/arm/include/bits/compiler.h b/src/arch/arm32/include/bits/compiler.h similarity index 100% rename from src/arch/arm/include/bits/compiler.h rename to src/arch/arm32/include/bits/compiler.h diff --git a/src/arch/arm/include/bits/profile.h b/src/arch/arm32/include/bits/profile.h similarity index 100% rename from src/arch/arm/include/bits/profile.h rename to src/arch/arm32/include/bits/profile.h diff --git a/src/arch/arm/include/bits/stdint.h b/src/arch/arm32/include/bits/stdint.h similarity index 100% rename from src/arch/arm/include/bits/stdint.h rename to src/arch/arm32/include/bits/stdint.h diff --git a/src/arch/arm/include/bits/strings.h b/src/arch/arm32/include/bits/strings.h similarity index 100% rename from src/arch/arm/include/bits/strings.h rename to src/arch/arm32/include/bits/strings.h diff --git a/src/arch/arm/include/efi/ipxe/dhcp_arch.h b/src/arch/arm32/include/efi/ipxe/dhcp_arch.h similarity index 100% rename from src/arch/arm/include/efi/ipxe/dhcp_arch.h rename to src/arch/arm32/include/efi/ipxe/dhcp_arch.h diff --git a/src/arch/arm/include/gdbmach.h b/src/arch/arm32/include/gdbmach.h similarity index 100% rename from src/arch/arm/include/gdbmach.h rename to src/arch/arm32/include/gdbmach.h diff --git a/src/arch/arm/include/limits.h b/src/arch/arm32/include/limits.h similarity index 100% rename from src/arch/arm/include/limits.h rename to src/arch/arm32/include/limits.h diff --git a/src/arch/arm/include/setjmp.h b/src/arch/arm32/include/setjmp.h similarity index 100% rename from src/arch/arm/include/setjmp.h rename to src/arch/arm32/include/setjmp.h diff --git a/src/arch/arm/libgcc/lldivmod.S b/src/arch/arm32/libgcc/lldivmod.S similarity index 100% rename from src/arch/arm/libgcc/lldivmod.S rename to src/arch/arm32/libgcc/lldivmod.S diff --git a/src/arch/arm/libgcc/llshift.S b/src/arch/arm32/libgcc/llshift.S similarity index 100% rename from src/arch/arm/libgcc/llshift.S rename to src/arch/arm32/libgcc/llshift.S