[coreboot-gerrit] New patch to review for coreboot: b668ae6 arm: Move libgcc assembly macros to arch/asm.h

Isaac Christensen (isaac.christensen@se-eng.com) gerrit at coreboot.org
Wed Sep 17 00:30:54 CEST 2014


Isaac Christensen (isaac.christensen at se-eng.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/6917

-gerrit

commit b668ae6c58bb0f555ed603ad38123273b1b38579
Author: Julius Werner <jwerner at chromium.org>
Date:   Thu Dec 12 20:24:48 2013 -0800

    arm: Move libgcc assembly macros to arch/asm.h
    
    libgcc/macros.h contains some useful assembly macros that are common in
    Linux kernel code and facilitate things such as unified ARM/THUMB
    assembly. This patch moves it to a more general place where it can be
    used by other code as well.
    
    Change-Id: If68e8930aaafa706c54cf9a156fac826b31bb193
    Signed-off-by: Julius Werner <jwerner at chromium.org>
    Reviewed-on: https://chromium-review.googlesource.com/182178
    Reviewed-by: Vincent Palatin <vpalatin at chromium.org>
    (cherry picked from commit a780670def94a969829811fa8cf257f12b88f085)
    Signed-off-by: Isaac Christensen <isaac.christensen at se-eng.com>
---
 payloads/libpayload/arch/arm/head.S        | 20 ++++++-------
 payloads/libpayload/arch/arm/util.S        |  8 ++---
 payloads/libpayload/include/arm/arch/asm.h | 47 ++++++++++++++++++++++++++++++
 src/arch/arm/armv4/Makefile.inc            |  3 +-
 src/arch/arm/armv4/bootblock.S             | 16 +++-------
 src/arch/arm/armv7/Makefile.inc            |  2 +-
 src/arch/arm/armv7/bootblock.S             |  6 ++--
 src/arch/arm/include/arch/asm.h            | 47 ++++++++++++++++++++++++++++++
 src/soc/nvidia/tegra124/bootblock_asm.S    | 16 +++-------
 9 files changed, 122 insertions(+), 43 deletions(-)

diff --git a/payloads/libpayload/arch/arm/head.S b/payloads/libpayload/arch/arm/head.S
index 7a706e3..0d23c72 100644
--- a/payloads/libpayload/arch/arm/head.S
+++ b/payloads/libpayload/arch/arm/head.S
@@ -27,17 +27,16 @@
  * SUCH DAMAGE.
  */
 
-	.global _entry, _leave
-	.text
-	.align 4
+#include <arch/asm.h>
 
 1:
+.align 4
 .word	_stack
 
 /*
  * Our entry point
  */
-_entry:
+ENTRY(_entry)
 
 	/* TODO: disable interrupts */
 
@@ -46,14 +45,15 @@ _entry:
 	/* Setup new stack */
 	ldr sp, 1b
 
-	/* TODO: Save old stack pointer */
+	/* TODO: Save old stack pointer and link register */
 
 	/* Let's rock. */
-	b start_main
+	bl start_main
 
-	/* %eax has the return value - pass it on unmolested */
-_leave:
-	/* TODO: restore old stack pointer. */
+	/* %r0 has the return value - pass it on unmolested */
+
+	/* TODO: restore old stack pointer and link register */
 
 	/* Return to the original context. */
-	mov pc, lr
+	bx lr
+ENDPROC(_entry)
diff --git a/payloads/libpayload/arch/arm/util.S b/payloads/libpayload/arch/arm/util.S
index e3f173e..7c14a39 100644
--- a/payloads/libpayload/arch/arm/util.S
+++ b/payloads/libpayload/arch/arm/util.S
@@ -27,11 +27,9 @@
  * SUCH DAMAGE.
  */
 
-	.global halt
-	.text
-	.align 4
+#include <arch/asm.h>
 
 /* This function puts the system into a halt. */
-	.type halt, function
-halt:
+ENTRY(halt)
 	b halt
+ENDPROC(halt)
diff --git a/payloads/libpayload/include/arm/arch/asm.h b/payloads/libpayload/include/arm/arch/asm.h
new file mode 100644
index 0000000..1c3f7a2
--- /dev/null
+++ b/payloads/libpayload/include/arm/arch/asm.h
@@ -0,0 +1,47 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright 2013 Google Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef __ARM_ASM_H
+#define __ARM_ASM_H
+
+#if defined __arm__
+#  define ARM(x...)	x
+#  define THUMB(x...)
+#elif defined __thumb__
+#  define ARM(x...)
+#  define THUMB(x...)	x
+#else
+#  error Not in ARM or thumb mode!
+#endif
+
+#define ALIGN .align 0
+
+#define ENDPROC(name) \
+	.type name, %function; \
+	END(name)
+
+#define ENTRY(name) \
+	.globl name; \
+	ALIGN; \
+	name:
+
+#define END(name) \
+	.size name, .-name
+
+#endif	/* __ARM_ASM_H */
diff --git a/src/arch/arm/armv4/Makefile.inc b/src/arch/arm/armv4/Makefile.inc
index d054b31..aa78868 100644
--- a/src/arch/arm/armv4/Makefile.inc
+++ b/src/arch/arm/armv4/Makefile.inc
@@ -19,7 +19,8 @@
 ##
 ###############################################################################
 
-armv4_flags = -marm -march=armv4t -I$(src)/arch/arm/include/armv4/
+armv4_flags = -marm -march=armv4t -I$(src)/arch/arm/include/armv4/ \
+	-D__COREBOOT_ARM_ARCH__=4
 
 ###############################################################################
 # bootblock
diff --git a/src/arch/arm/armv4/bootblock.S b/src/arch/arm/armv4/bootblock.S
index 3ba2a88..58a34cf 100644
--- a/src/arch/arm/armv4/bootblock.S
+++ b/src/arch/arm/armv4/bootblock.S
@@ -29,19 +29,10 @@
  * MA 02111-1307 USA
  */
 
-.section ".start", "a", %progbits
-.globl _start
-_start: b	reset
-	.balignl 16,0xdeadbeef
-
-_cbfs_master_header:
-	/* The CBFS master header is inserted by cbfstool at the first
-	 * aligned offset after the above anchor string is found.
-	 * Hence, we leave some space for it.
-	 */
-	.skip 128			@ Assumes 64-byte alignment
+#include <arch/asm.h>
 
-reset:
+.section ".start", "a", %progbits
+ENTRY(_start)
 	/*
 	 * Set the cpu to System mode with IRQ and FIQ disabled. Prefetch/Data
 	 * aborts may happen early and crash before the abort handlers are
@@ -84,6 +75,7 @@ call_bootblock:
 	 * wrapper which is currently broken.
 	 */
 	bl	main
+ENDPROC(_start)
 
 /* we do it this way because it's a 32-bit constant and
  * in some cases too far away to be loaded as just an offset
diff --git a/src/arch/arm/armv7/Makefile.inc b/src/arch/arm/armv7/Makefile.inc
index 2cc42bb..033d498 100644
--- a/src/arch/arm/armv7/Makefile.inc
+++ b/src/arch/arm/armv7/Makefile.inc
@@ -20,7 +20,7 @@
 ###############################################################################
 
 armv7_flags = -march=armv7-a -mthumb -mthumb-interwork \
-	-I$(src)/arch/arm/include/armv7/
+	-I$(src)/arch/arm/include/armv7/ -D__COREBOOT_ARM_ARCH__=7
 
 ###############################################################################
 # bootblock
diff --git a/src/arch/arm/armv7/bootblock.S b/src/arch/arm/armv7/bootblock.S
index cfe65e5..a8d0973 100644
--- a/src/arch/arm/armv7/bootblock.S
+++ b/src/arch/arm/armv7/bootblock.S
@@ -29,9 +29,10 @@
  * MA 02111-1307 USA
  */
 
+#include <arch/asm.h>
+
 .section ".start", "a", %progbits
-.globl _start
-_start:
+ENTRY(_start)
 	/*
 	 * Set the cpu to System mode with IRQ and FIQ disabled. Prefetch/Data
 	 * aborts may happen early and crash before the abort handlers are
@@ -89,6 +90,7 @@ call_bootblock:
 wait_for_interrupt:
 	wfi
 	mov	pc, lr			@ back to my caller
+ENDPROC(_start)
 
 /* we do it this way because it's a 32-bit constant and
  * in some cases too far away to be loaded as just an offset
diff --git a/src/arch/arm/include/arch/asm.h b/src/arch/arm/include/arch/asm.h
new file mode 100644
index 0000000..1c3f7a2
--- /dev/null
+++ b/src/arch/arm/include/arch/asm.h
@@ -0,0 +1,47 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright 2013 Google Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef __ARM_ASM_H
+#define __ARM_ASM_H
+
+#if defined __arm__
+#  define ARM(x...)	x
+#  define THUMB(x...)
+#elif defined __thumb__
+#  define ARM(x...)
+#  define THUMB(x...)	x
+#else
+#  error Not in ARM or thumb mode!
+#endif
+
+#define ALIGN .align 0
+
+#define ENDPROC(name) \
+	.type name, %function; \
+	END(name)
+
+#define ENTRY(name) \
+	.globl name; \
+	ALIGN; \
+	name:
+
+#define END(name) \
+	.size name, .-name
+
+#endif	/* __ARM_ASM_H */
diff --git a/src/soc/nvidia/tegra124/bootblock_asm.S b/src/soc/nvidia/tegra124/bootblock_asm.S
index 3ba2a88..58a34cf 100644
--- a/src/soc/nvidia/tegra124/bootblock_asm.S
+++ b/src/soc/nvidia/tegra124/bootblock_asm.S
@@ -29,19 +29,10 @@
  * MA 02111-1307 USA
  */
 
-.section ".start", "a", %progbits
-.globl _start
-_start: b	reset
-	.balignl 16,0xdeadbeef
-
-_cbfs_master_header:
-	/* The CBFS master header is inserted by cbfstool at the first
-	 * aligned offset after the above anchor string is found.
-	 * Hence, we leave some space for it.
-	 */
-	.skip 128			@ Assumes 64-byte alignment
+#include <arch/asm.h>
 
-reset:
+.section ".start", "a", %progbits
+ENTRY(_start)
 	/*
 	 * Set the cpu to System mode with IRQ and FIQ disabled. Prefetch/Data
 	 * aborts may happen early and crash before the abort handlers are
@@ -84,6 +75,7 @@ call_bootblock:
 	 * wrapper which is currently broken.
 	 */
 	bl	main
+ENDPROC(_start)
 
 /* we do it this way because it's a 32-bit constant and
  * in some cases too far away to be loaded as just an offset



More information about the coreboot-gerrit mailing list