the following patch was just integrated into master:
commit fb9d4caf160436a9f9b16f2103cf635da8460685
Author: Alexandru Gagniuc <mr.nuke.me(a)gmail.com>
Date: Fri Feb 20 12:09:32 2015 -0600
mainboard: Do not redefine DRIVERS_PS2_KEYBOARD Kconfig variable
Change-Id: Icc603dfe92360d978221a25ad28517da43942bea
Signed-off-by: Alexandru Gagniuc <mr.nuke.me(a)gmail.com>
Reviewed-on: http://review.coreboot.org/8498
Tested-by: build bot (Jenkins)
Reviewed-by: Kyösti Mälkki <kyosti.malkki(a)gmail.com>
Reviewed-by: Patrick Georgi <pgeorgi(a)google.com>
See http://review.coreboot.org/8498 for details.
-gerrit
Martin Roth (gaumless(a)gmail.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/8428
-gerrit
commit a9db4f3b2cb50103988695943c5a36a0c1bd2d6d
Author: Martin Roth <gaumless(a)gmail.com>
Date: Thu Feb 12 19:32:41 2015 -0700
Move generation of build.h into a shell script
Moving the routines that create build.h into a script offers
several advantages. We can create more complex functions to
run and we don't have to deal with both bash and Make at the same
time.
This script combines what is currently in Makefile.inc with a
couple of updates.
- Update how it determines whether to use git for the timestamp
- Move the git revision string generation inside the routine
that checks to see if we have git.
- Add a timeout for the domain name check.
Change-Id: I93c131e8d01a0099eb13db720fa865c627985750
Signed-off-by: Martin Roth <gaumless(a)gmail.com>
---
Makefile.inc | 28 ++------------
util/genbuild_h/genbuild_h.sh | 87 +++++++++++++++++++++++++++++++++++++++++++
2 files changed, 90 insertions(+), 25 deletions(-)
diff --git a/Makefile.inc b/Makefile.inc
index b8ab4be..743afe0 100644
--- a/Makefile.inc
+++ b/Makefile.inc
@@ -274,31 +274,9 @@ additional-dirs := $(objutil)/cbfstool $(objutil)/romcc $(objutil)/ifdtool \
$(obj)/build.h: .xcompile
@printf " GEN build.h\n"
rm -f $(obj)/build.h
- printf "/* build system definitions (autogenerated) */\n" > $(obj)/build.ht
- printf "#ifndef __BUILD_H\n" >> $(obj)/build.ht
- printf "#define __BUILD_H\n\n" >> $(obj)/build.ht
- printf "#define COREBOOT_VERSION \"$(KERNELVERSION)\"\n" >> $(obj)/build.ht
- if git update-index -q --refresh >/dev/null; ! git diff-index --quiet HEAD; then \
- printf "/* `LANG= TZ=UTC git log --date=local --pretty=format:%cd -1` UTC */\n" >> $(obj)/build.ht; \
- printf "#define COREBOOT_VERSION_TIMESTAMP `LANG= git log --pretty=format:%ct -1`\n" >> $(obj)/build.ht; \
- else \
- printf "/* `LANG= TZ=UTC date` */\n" >> $(obj)/build.ht; \
- printf "#define COREBOOT_VERSION_TIMESTAMP `LANG= date +%s`\n" >> $(obj)/build.ht; \
- fi
- printf "#define COREBOOT_ORIGIN_GIT_REVISION \"`LANG= git log remotes/origin/master -1 --format=format:%h`\"\n" >> $(obj)/build.ht
- printf "#define COREBOOT_EXTRA_VERSION \"$(COREBOOT_EXTRA_VERSION)\"\n" >> $(obj)/build.ht
- printf "#define COREBOOT_BUILD \"`LANG= date`\"\n" >> $(obj)/build.ht
- printf "#define COREBOOT_BUILD_YEAR_BCD 0x`LANG= date +"%y"`\n" >> $(obj)/build.ht
- printf "#define COREBOOT_BUILD_MONTH_BCD 0x`LANG= date +"%m"`\n" >> $(obj)/build.ht
- printf "#define COREBOOT_BUILD_DAY_BCD 0x`LANG= date +"%d"`\n" >> $(obj)/build.ht
- printf "#define COREBOOT_BUILD_WEEKDAY_BCD 0x`LANG= date +"%w"`\n" >> $(obj)/build.ht
- printf "#define COREBOOT_DMI_DATE \"`LANG= date +"%m/%d/%Y"`\"\n" >> $(obj)/build.ht
- printf "\n" >> $(obj)/build.ht
- printf "#define COREBOOT_COMPILE_TIME \"`LANG= date +%T`\"\n" >> $(obj)/build.ht
- printf "#define COREBOOT_COMPILE_BY \"$(subst \,@,$(shell PATH=$$PATH:/usr/ucb whoami))\"\n" >> $(obj)/build.ht
- printf "#define COREBOOT_COMPILE_HOST \"$(shell hostname -s 2>/dev/null || hostname 2>/dev/null)\"\n" >> $(obj)/build.ht
- printf "#define COREBOOT_COMPILE_DOMAIN \"$(shell test `uname -s` = "Linux" && dnsdomainname || domainname 2>/dev/null)\"\n" >> $(obj)/build.ht
- printf "#endif\n" >> $(obj)/build.ht
+ export KERNELVERSION="$(KERNELVERSION)"
+ export COREBOOT_EXTRA_VERSION="$(COREBOOT_EXTRA_VERSION)"
+ util/genbuild_h/genbuild_h.sh > $(obj)/build.ht
mv $(obj)/build.ht $(obj)/build.h
$(obj)/ldoptions: $(obj)/config.h
diff --git a/util/genbuild_h/genbuild_h.sh b/util/genbuild_h/genbuild_h.sh
new file mode 100755
index 0000000..e79e41b
--- /dev/null
+++ b/util/genbuild_h/genbuild_h.sh
@@ -0,0 +1,87 @@
+#!/bin/sh
+
+# This file is part of the coreboot project.
+#
+# Copyright (C) 2014 Sage Electronic Engineering, LLC.
+#
+# 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
+#
+
+#get the domain name without hanging the build for an extended period if
+#the build system doesn't return a domain name as can happen with the
+#dnsdomainname or domainname commands by themselves.
+get_domainname() {
+ MAX_DELAY=1 #maximum time to wait in seconds
+ TIMEOUT_HOSTNAME_TEXT=unknown.domain #text to return if domain name is not found
+ TEMPFILE_NAME=coreboot_hostname.txt #temp file to put the domain name into
+
+ # Find the domain name
+ if [ "$(uname -s)" = "Linux" ]
+ then
+ dnsdomainname 2>/dev/null > "$TEMPFILE_NAME" &
+ else
+ domainname 2>/dev/null >"$TEMPFILE_NAME" &
+ fi
+
+ # Get ready to kill the process if it's taking too long
+ PID=$!
+ sleep "$MAX_DELAY" && kill "$PID" 2>/dev/null &
+ wait "$PID" 2>/dev/null
+
+ # See what was found, print our timeout text if the process was killed
+ # or the domain name if we found one.
+ HN=$(cat "$TEMPFILE_NAME")
+ if [ "$HN" = "" ]
+ then
+ printf "%s" "$TIMEOUT_HOSTNAME_TEXT"
+ else
+ printf "%s" "$HN"
+ fi
+
+ # Clean up and exit.
+ rm -f "$TEMPFILE_NAME"
+}
+
+#Print out the information that goes into build.h
+printf "/* build system definitions (autogenerated) */\n"
+printf "#ifndef __BUILD_H\n"
+printf "#define __BUILD_H\n\n"
+printf "#define COREBOOT_VERSION %s\n" "\"$KERNELVERSION\""
+
+#See if the build is running in a git repo and the git command is available
+if [ -d "${top}/.git" ] && [ -f "$(command -v git)" ]; then
+ printf "/* %s UTC */\n" "$(LANG= TZ=UTC git log --date=local --pretty=format:%cd -1)"
+ printf "#define COREBOOT_VERSION_TIMESTAMP %s\n" "$(LANG= git log --pretty=format:%ct -1)"
+ printf "#define COREBOOT_ORIGIN_GIT_REVISION \"%s\"\n" "$(LANG= git log remotes/origin/master -1 --format=format:%h)"
+else
+ printf "/* `LANG= TZ=UTC date` */\n"
+ printf "#define COREBOOT_VERSION_TIMESTAMP %s\n" "$(LANG= date +%s)"
+ printf "#define COREBOOT_ORIGIN_GIT_REVISION \"Unknown\"\n"
+fi
+
+printf "#define COREBOOT_EXTRA_VERSION \"%s\"\n" "$COREBOOT_EXTRA_VERSION"
+printf "#define COREBOOT_BUILD \"%s\"\n" "$(date)"
+printf "#define COREBOOT_BUILD_YEAR_BCD 0x%s\n" "$(date +%y)"
+printf "#define COREBOOT_BUILD_MONTH_BCD 0x%s\n" "$(date +%m)"
+printf "#define COREBOOT_BUILD_DAY_BCD 0x%s\n" "$(date +%d)"
+printf "#define COREBOOT_BUILD_WEEKDAY_BCD 0x%s\n" "$(date +%w)"
+printf "#define COREBOOT_DMI_DATE \"%s\"\n" "$(date +%m/%d/%Y)"
+printf "\n"
+printf "#define COREBOOT_COMPILE_TIME \"%s\"\n" "$(date +%T)"
+printf "#define COREBOOT_COMPILE_BY \"%s\"\n" "$(whoami)"
+printf "#define COREBOOT_COMPILE_HOST \"%s\"\n" "$(hostname -s 2>/dev/null)"
+printf "#define COREBOOT_COMPILE_DOMAIN \""
+get_domainname
+printf "\"\n"
+printf "#endif\n"
Marc Jones (marc.jones(a)se-eng.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/8595
-gerrit
commit b1819317e6feb595c8208983b546dad727aa4ce3
Author: Aaron Durbin <adurbin(a)chromium.org>
Date: Tue Jul 15 10:25:48 2014 -0500
arm64: provide early SoC initialization
Some of the SoC's need an early hook to configure
certain registers. One example of this is on t132
where ramstage is the first thing being ran on the
arm64 core and it is the only entity that can configure
certain registers required for the rest of ramstage.
Therefore, provide the opportunity for the SoC to
implement such requirements.
BUG=chrome-os-partner:30572
BRANCH=None
TEST=Built and ran through coreboot.
Original-Change-Id: Ib352f3788872f888581b398c9b394b7c4e54b02a
Original-Signed-off-by: Aaron Durbin <adurbin(a)chromium.org>
Original-Reviewed-on: https://chromium-review.googlesource.com/208061
Original-Reviewed-by: Tom Warren <twarren(a)nvidia.com>
Original-Reviewed-by: Furquan Shaikh <furquan(a)chromium.org>
Original-Commit-Queue: Furquan Shaikh <furquan(a)chromium.org>
(cherry picked from commit 2c50e2b39e75d1383e8e573c576630a5b7313349)
Signed-off-by: Marc Jones <marc.jones(a)se-eng.com>
Change-Id: I38df63e46c5c21b2d319fc9eb42053c3a0d61bc8
---
src/arch/arm64/Makefile.inc | 5 +++++
src/arch/arm64/c_entry.c | 31 +++++++++++++++++++++++++++++++
src/arch/arm64/include/arch/stages.h | 8 ++++++++
src/arch/arm64/stage_entry.S | 2 +-
4 files changed, 45 insertions(+), 1 deletion(-)
diff --git a/src/arch/arm64/Makefile.inc b/src/arch/arm64/Makefile.inc
index 6af675b..64557c1 100644
--- a/src/arch/arm64/Makefile.inc
+++ b/src/arch/arm64/Makefile.inc
@@ -57,6 +57,8 @@ bootblock-y += div0.c
bootblock-y += id.S
$(obj)/arch/arm64/id.bootblock.o: $(obj)/build.h
+bootblock-y += c_entry.c
+bootblock-y += stage_entry.S
bootblock-y += stages.c
bootblock-y += eabi_compat.c
bootblock-y += ../../lib/memset.c
@@ -77,6 +79,8 @@ endif # CONFIG_ARCH_BOOTBLOCK_ARM64
ifeq ($(CONFIG_ARCH_ROMSTAGE_ARM64),y)
+romstage-y += c_entry.c
+romstage-y += stage_entry.S
romstage-y += stages.c
romstage-y += div0.c
romstage-y += eabi_compat.c
@@ -100,6 +104,7 @@ endif # CONFIG_ARCH_ROMSTAGE_ARM64
ifeq ($(CONFIG_ARCH_RAMSTAGE_ARM64),y)
+ramstage-y += c_entry.c
ramstage-y += stages.c
ramstage-y += div0.c
ramstage-y += cpu.c
diff --git a/src/arch/arm64/c_entry.c b/src/arch/arm64/c_entry.c
new file mode 100644
index 0000000..a4d4b0c
--- /dev/null
+++ b/src/arch/arm64/c_entry.c
@@ -0,0 +1,31 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright 2014 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
+ */
+
+#include <arch/stages.h>
+
+void __attribute__((weak)) arm64_soc_init(void)
+{
+ /* Default weak implementation does nothing. */
+}
+
+void arm64_init(void)
+{
+ arm64_soc_init();
+ main();
+}
diff --git a/src/arch/arm64/include/arch/stages.h b/src/arch/arm64/include/arch/stages.h
index 0f82450..9771492 100644
--- a/src/arch/arm64/include/arch/stages.h
+++ b/src/arch/arm64/include/arch/stages.h
@@ -26,4 +26,12 @@ void stage_entry(void);
void stage_exit(void *);
void jmp_to_elf_entry(void *entry, unsigned long buffer, unsigned long size);
+/* C entry point for all arm64 stages. */
+void arm64_init(void);
+
+/* This function is called upon initial entry of each stage. It is called prior
+ * to main(). That means all of the common infrastructure will most likely not
+ * be available to be used (such as console). */
+void arm64_soc_init(void);
+
#endif
diff --git a/src/arch/arm64/stage_entry.S b/src/arch/arm64/stage_entry.S
index 8e57706..0f49c40 100644
--- a/src/arch/arm64/stage_entry.S
+++ b/src/arch/arm64/stage_entry.S
@@ -61,7 +61,7 @@ ENTRY(arm64_el3_startup)
.stack:
.quad _estack
.entry:
- .quad main
+ .quad arm64_init
ENDPROC(arm64_el3_startup)
.global arm64_el3_startup_end
arm64_el3_startup_end:
Marc Jones (marc.jones(a)se-eng.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/8593
-gerrit
commit 66c9a8c5cbe85c1a384ac40db98a40c679407e78
Author: Aaron Durbin <adurbin(a)chromium.org>
Date: Mon Jul 14 15:00:41 2014 -0500
tegra132: add support for TZ carve-out
The TrustZone carve-out needs to be taken into account when
determining the memory layout. However, things are complicated
by the fact that TZ carve-out registers are not accessible by
the AVP.
BUG=chrome-os-partner:30572
BRANCH=None
TEST=Built and booted to end of ramstage. Noted that denver cores
can read TZ registers while AVP doesn't bother.
Original-Change-Id: I2d2d27e33a334bf639af52260b99d8363906c646
Original-Signed-off-by: Aaron Durbin <adurbin(a)chromium.org>
Original-Reviewed-on: https://chromium-review.googlesource.com/207835
Original-Reviewed-by: Furquan Shaikh <furquan(a)chromium.org>
Original-Reviewed-by: Tom Warren <twarren(a)nvidia.com>
(cherry picked from commit a4d792f4ed6a0c39eab09d90f4454d3d5dc3db26)
Signed-off-by: Marc Jones <marc.jones(a)se-eng.com>
Change-Id: I8fbef03d5ac42d300e1e41aeba9b86c929e01494
---
src/soc/nvidia/tegra132/addressmap.c | 8 ++++++++
src/soc/nvidia/tegra132/cbmem.c | 7 +++++++
src/soc/nvidia/tegra132/include/soc/id.h | 35 ++++++++++++++++++++++++++++++++
src/soc/nvidia/tegra132/mc.h | 4 +++-
4 files changed, 53 insertions(+), 1 deletion(-)
diff --git a/src/soc/nvidia/tegra132/addressmap.c b/src/soc/nvidia/tegra132/addressmap.c
index 7620b1f..bb35a87 100644
--- a/src/soc/nvidia/tegra132/addressmap.c
+++ b/src/soc/nvidia/tegra132/addressmap.c
@@ -23,6 +23,7 @@
#include <console/console.h>
#include <soc/addressmap.h>
#include <soc/display.h>
+#include <soc/id.h>
#include "mc.h"
#include "sdram.h"
@@ -70,6 +71,13 @@ void carveout_range(int id, uintptr_t *base_mib, size_t *size_mib)
switch (id) {
case CARVEOUT_TZ:
+ /* AVP does not have access to the TZ carveout registers. */
+ if (context_avp())
+ return;
+ carveout_from_regs(base_mib, size_mib,
+ read32(&mc->security_cfg0),
+ 0,
+ read32(&mc->security_cfg1));
break;
case CARVEOUT_SEC:
carveout_from_regs(base_mib, size_mib,
diff --git a/src/soc/nvidia/tegra132/cbmem.c b/src/soc/nvidia/tegra132/cbmem.c
index ee95ba9..da08520 100644
--- a/src/soc/nvidia/tegra132/cbmem.c
+++ b/src/soc/nvidia/tegra132/cbmem.c
@@ -25,6 +25,13 @@ void *cbmem_top(void)
static uintptr_t addr;
size_t fb_size;
+ /*
+ * FIXME(adurbin): The TZ registers are not accessible to the AVP.
+ * Therefore, if there is a TZ carveout then it needs to be handled
+ * here while executing on the AVP in order to properly place the
+ * CBMEM region.
+ */
+
/* CBMEM starts downwards from the framebuffer. */
if (addr == 0)
addr = framebuffer_attributes(&fb_size);
diff --git a/src/soc/nvidia/tegra132/include/soc/id.h b/src/soc/nvidia/tegra132/include/soc/id.h
new file mode 100644
index 0000000..6ce3df5
--- /dev/null
+++ b/src/soc/nvidia/tegra132/include/soc/id.h
@@ -0,0 +1,35 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright 2014 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 __SOC_NVIDIA_TEGRA132_INCLUDE_SOC_ID_H__
+#define __SOC_NVIDIA_TEGRA132_INCLUDE_SOC_ID_H__
+
+
+#include <arch/io.h>
+#include <soc/addressmap.h>
+
+static inline int context_avp(void)
+{
+ const uint32_t avp_id = 0xaaaaaaaa;
+ void * const uptag = (void *)(uintptr_t)TEGRA_PG_UP_BASE;
+
+ return read32(uptag) == avp_id;
+}
+
+#endif /* define __SOC_NVIDIA_TEGRA132_INCLUDE_SOC_ID_H__ */
diff --git a/src/soc/nvidia/tegra132/mc.h b/src/soc/nvidia/tegra132/mc.h
index a881553..c9faa49 100644
--- a/src/soc/nvidia/tegra132/mc.h
+++ b/src/soc/nvidia/tegra132/mc.h
@@ -42,7 +42,9 @@ struct tegra_mc_regs {
uint32_t emem_adr_cfg_bank_mask_0; /* 0x64 */
uint32_t emem_adr_cfg_bank_mask_1; /* 0x68 */
uint32_t emem_adr_cfg_bank_mask_2; /* 0x6c */
- uint32_t rsvd_0x70[8]; /* 0x70 */
+ uint32_t security_cfg0; /* 0x70 */
+ uint32_t security_cfg1; /* 0x74 */
+ uint32_t rsvd_0x78[6]; /* 0x78 */
uint32_t emem_arb_cfg; /* 0x90 */
uint32_t emem_arb_outstanding_req; /* 0x94 */
uint32_t emem_arb_timing_rcd; /* 0x98 */
Marc Jones (marc.jones(a)se-eng.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/8592
-gerrit
commit 5aa523edb3238a97788b402848b2c885c388ca33
Author: Furquan Shaikh <furquan(a)google.com>
Date: Mon Jul 14 11:50:09 2014 -0700
coreboot arm64: Add proper masks for setting SCTLR and SCR regs to 0 at init
Since RES1 and RES0 bits are marked as SBOP(Should-Be-One-or-Preserved) and
SBZP(Should-Be-Zero-or-Preserved) respectively, resetting the SCTLR and SCR
registers should be done with proper bitmask.
BUG=None
BRANCH=None
TEST=Compiles successfully and verified that the RES bits are preserved across
register writes.
Original-Change-Id: I5094ba7e51e8ea6f7d7612ba4d11b10dcbdb1607
Original-Signed-off-by: Furquan Shaikh <furquan(a)google.com>
Original-Reviewed-on: https://chromium-review.googlesource.com/207815
Original-Tested-by: Furquan Shaikh <furquan(a)chromium.org>
Original-Reviewed-by: Aaron Durbin <adurbin(a)chromium.org>
Original-Commit-Queue: Furquan Shaikh <furquan(a)chromium.org>
(cherry picked from commit dfb196b4063e4f94d1ba9d5e2d19bae624ed46b3)
Signed-off-by: Marc Jones <marc.jones(a)se-eng.com>
Change-Id: I033a68b723fea83817aaa6402b86c78abd3e1da9
---
src/arch/arm64/stage_entry.S | 18 ++++++++++++++++--
1 file changed, 16 insertions(+), 2 deletions(-)
diff --git a/src/arch/arm64/stage_entry.S b/src/arch/arm64/stage_entry.S
index 56eca77..8e57706 100644
--- a/src/arch/arm64/stage_entry.S
+++ b/src/arch/arm64/stage_entry.S
@@ -21,9 +21,17 @@
#include <arch/asm.h>
ENTRY(arm64_el3_startup)
- mov x0, xzr
+ /* Set all bits in SCTLR_EL3 to 0 except RES1 and RES0 */
+ mrs x0, SCTLR_EL3
+ ldr x1, .SCTLR_MASK
+ and x0, x0, x1
msr SCTLR_EL3, x0
- msr SCR_EL3, x0
+ /* Set all bits in SCR_EL3 to 0 except RES1 and RES0 */
+ mrs x0, SCR_EL3
+ ldr x1, .SCR_MASK
+ and x0, x0, x1
+ msr SCR_EL3, x0
+
/* Have stack pointer use SP_EL0. */
msr SPSel, #0
isb
@@ -39,6 +47,12 @@ ENTRY(arm64_el3_startup)
br x1
.align 4
+ .SCTLR_MASK:
+ .quad 0x0FFFFEFF0
+
+ .SCR_MASK:
+ .quad 0x0FFFFC070
+ .align 4
/*
* By default branch to main() and initialize the stack according
* to the Kconfig option for cpu0. However, this code can be relocated