From: Alex Coplan <alex.coplan@arm.com>
To: "Richard Earnshaw (lists)" <Richard.Earnshaw@arm.com>
Cc: newlib@sourceware.org
Subject: Re: [PATCH] libgloss/aarch64: Add support for Armv8-R AArch64
Date: Tue, 29 Sep 2020 17:27:18 +0100 [thread overview]
Message-ID: <20200929162718.x2s3w2pfnelxkzkr@arm.com> (raw)
In-Reply-To: <0bdab8d7-67ee-0d61-3e80-1b8365c41204@arm.com>
[-- Attachment #1: Type: text/plain, Size: 1638 bytes --]
Hi Richard,
On 29/09/2020 15:06, Richard Earnshaw (lists) wrote:
> On 18/09/2020 15:43, Alex Coplan wrote:
> > Hello,
> >
> > This patch adds support for Armv8-R AArch64. We update the AArch64 CPU
> > boot code to work on Armv8-R if __ARM_ARCH_PROFILE is set to 'R'.
> > Armv8-R AArch64 has no EL3, so we don't set vbar_el3, and adjust the
> > code to set up the MPU for Armv8-R.
> >
> > We also add a specs file for use with Armv8-R AArch64 models.
> >
> > Testing:
> > * Ran AArch64 GCC testsuite using --with-arch=armv8-r together with the
> > new specs file and boot code in an Armv8-R AArch64 model.
> > * Ran newlib testsuite, no regressions.
> >
> > OK for master?
> >
> > Thanks,
> > Alex
> >
> > ---
> >
> > 2020-09-18 Alex Coplan <alex.coplan@arm.com>
> >
> > libgloss/ChangeLog:
> >
> > * aarch64/Makefile.in: Install new specs file.
> > * aarch64/cpu-init/Makefile.in: Also build boot code for Armv8-R.
> > * aarch64/cpu-init/rdimon-aem-el3.S: Add support for Armv8-R.
> > * aarch64/elf-aem-v8-r.specs: New.
> >
>
> The main problem I see with this is that it assumes that the compiler
> being used is *not* configured for a default CPU architecture of
> ARMv8-r. If it is, then the normal rdimon-aem-el3.o file will in fact
> become the same as the v8-r version, which is not really what we want.
Good catch. Thanks for the review.
>
> Perhaps, rather than hacking around the __ARM_ARCH_PROFILE setting you
> should just set things up to build the file twice, but with a different
> conventional pre-define set each time.
>
> R.
Sounds sensible. Is the revised patch (attached) OK?
Thanks,
Alex
[-- Attachment #2: v2.diff --]
[-- Type: text/x-diff, Size: 3052 bytes --]
diff --git a/libgloss/aarch64/Makefile.in b/libgloss/aarch64/Makefile.in
index 546557e3c..b8c2ca43c 100644
--- a/libgloss/aarch64/Makefile.in
+++ b/libgloss/aarch64/Makefile.in
@@ -85,7 +85,8 @@ RDIMON_BSP = librdimon${${MULTILIBNAME}}.a
RDIMON_OBJS = $(patsubst %,rdimon-%,$(OBJS))
RDIMON_SCRIPTS = rdimon${${MULTILIBNAME}}.specs \
aem-ve${${MULTILIBNAME}}.specs \
- aem-validation${${MULTILIBNAME}}.specs
+ aem-validation${${MULTILIBNAME}}.specs \
+ aem-v8-r${${MULTILIBNAME}}.specs
RDIMON_INSTALL = install-rdimon
CFLAGS = -g
diff --git a/libgloss/aarch64/cpu-init/Makefile.in b/libgloss/aarch64/cpu-init/Makefile.in
index 08aa1760f..c96f4ee0e 100644
--- a/libgloss/aarch64/cpu-init/Makefile.in
+++ b/libgloss/aarch64/cpu-init/Makefile.in
@@ -62,7 +62,7 @@ AR = @AR@
LD = @LD@
RANLIB = @RANLIB@
-CPU_INIT_OBJS = rdimon-aem-el3.o
+CPU_INIT_OBJS = rdimon-aem-el3.o rdimon-aem-v8-r.o
CPU_INIT_INSTALL = install-cpu-init
CFLAGS = -g
@@ -79,10 +79,12 @@ all: ${CPU_INIT_OBJS}
.PHONY: test
test:
-# Static pattern rule for assembling cpu init files to object files.
-${CPU_INIT_OBJS}: %.o: %.S
+rdimon-aem-el3.o : rdimon-aem-el3.S
$(CC) $(CFLAGS_FOR_TARGET) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $<
+rdimon-aem-v8-r.o : rdimon-aem-el3.S
+ $(CC) $(CFLAGS_FOR_TARGET) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -DBUILD_FOR_R_PROFILE -o $@ -c $<
+
clean mostlyclean:
rm -f a.out core *.i *.o *-test *.srec *.dis *.x
diff --git a/libgloss/aarch64/cpu-init/rdimon-aem-el3.S b/libgloss/aarch64/cpu-init/rdimon-aem-el3.S
index e00f0b2c8..0296a8054 100644
--- a/libgloss/aarch64/cpu-init/rdimon-aem-el3.S
+++ b/libgloss/aarch64/cpu-init/rdimon-aem-el3.S
@@ -43,7 +43,9 @@ _init_vectors:
/* Installs a table of exception vectors to catch and handle all
exceptions by terminating the process with a diagnostic. */
adr x0, vectors
+#ifndef BUILD_FOR_R_PROFILE
msr vbar_el3, x0
+#endif
msr vbar_el2, x0
msr vbar_el1, x0
ret
@@ -110,6 +112,14 @@ vectors:
.text
.align 2
_flat_map:
+#ifdef BUILD_FOR_R_PROFILE
+ mrs x0, sctlr_el2
+ orr x0, x0, #1 // SCTLR_EL2.M (enable MPU)
+ orr x0, x0, #(1 << 17) // SCTLR_EL2.BR (background regions)
+ msr sctlr_el2, x0
+ isb
+ ret
+#else
/* Page table setup (identity mapping). */
adrp x0, ttb
add x0, x0, :lo12:ttb
@@ -173,6 +183,7 @@ _flat_map:
isb
.Lnosve:
ret
+#endif
.data
.align 12
diff --git a/libgloss/aarch64/elf-aem-v8-r.specs b/libgloss/aarch64/elf-aem-v8-r.specs
new file mode 100644
index 000000000..4daeffd11
--- /dev/null
+++ b/libgloss/aarch64/elf-aem-v8-r.specs
@@ -0,0 +1,20 @@
+# elf-aem-v8-r.specs
+#
+# Spec file for AArch64 baremetal newlib, libgloss on Armv8-R with version 2 of
+# AngelAPI semi-hosting.
+
+%rename link old_link
+
+*link:
+-Ttext-segment 0x10000 %(old_link)
+
+%rename lib libc
+
+*libgloss:
+-lrdimon
+
+*lib:
+cpu-init/rdimon-aem-v8-r.o%s --start-group %(libc) %(libgloss) --end-group
+
+*startfile:
+crti%O%s crtbegin%O%s %{!pg:rdimon-crt0%O%s} %{pg:rdimon-crt0%O%s}
next prev parent reply other threads:[~2020-09-29 16:27 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-18 14:43 Alex Coplan
2020-09-22 12:42 ` Kyrylo Tkachov
2020-09-29 14:06 ` Richard Earnshaw (lists)
2020-09-29 16:27 ` Alex Coplan [this message]
2020-09-30 10:25 ` Richard Earnshaw (lists)
2020-09-30 13:25 ` UNSUBSCRIBE Brian Hawley
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200929162718.x2s3w2pfnelxkzkr@arm.com \
--to=alex.coplan@arm.com \
--cc=Richard.Earnshaw@arm.com \
--cc=newlib@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).