
Hi, Thomas, Alex and York,
Before there are some discussions about this patch, could we make a solution now? Or else, the patches about [PATCH v8 0/3] armv8: Support loading 32-bit OS in AArch32 execution state can't be merged, as the compiling will fail without this patch.
Thomas, is ARMV8_MULTIENTRY enabled on Exynos7420 now? If not, is there a good way to enable ARMV8_MULTIENTRY on Exynos7420 now?
Thanks.
Best Regards, Alison Wang
-----Original Message----- From: Thomas Abraham [mailto:ta.omasab@gmail.com] Sent: Tuesday, September 20, 2016 4:45 PM To: Alexander Graf agraf@suse.de Cc: Alison Wang b18965@freescale.com; thomas.ab@samsung.com; Minkyu Kang mk7.kang@samsung.com; york sun york.sun@nxp.com; U-Boot Mailing List u-boot@lists.denx.de; Jason Jin jason.jin@nxp.com Subject: Re: [U-Boot] [PATCH] arm: exynos: Use the generic lowlevel_init instead of the specific one
On Tue, Sep 20, 2016 at 12:03 PM, Alexander Graf agraf@suse.de wrote:
On 20.09.16 08:25, Thomas Abraham wrote:
On Tue, Sep 20, 2016 at 11:35 AM, Alexander Graf agraf@suse.de
wrote:
Am 20.09.2016 um 07:51 schrieb Thomas Abraham ta.omasab@gmail.com:
Hi Alison,
On Mon, Sep 19, 2016 at 7:38 PM, Alexander Graf agraf@suse.de
wrote:
On 09.09.16 10:48, Alison Wang wrote:
This patch is to use the the generic lowlevel_init instead of the
specific one.
Signed-off-by: Alison Wang alison.wang@nxp.com
If I had to guess, I'd think they only had their own version
because the
old one required a GIC.
I apologize for the delay.
The reason for using a custom version was to avoid enabling ARMV8_MULTIENTRY config option since the Exynos7 code was ready for it.
Either way, since Samsung doesn't reply, I'm fine potentially
breaking
their boards if that means that we can make progress for actively
maintained ones:
Reviewed-by: Alexander Graf agraf@suse.de
This patch without the ARMV8_MULTIENTRY and ARMV8_SWITCH_TO_EL1
config
options does not switch the boot CPU from EL3 to EL1. So it would
be
preferable to not merge this patch until ARMV8_MULTIENTRY is
enabled
for Exynos7.
Why do you want to switch it to EL1 in the first place? Linux is
very happy
to live in EL2 - which is what we call it in by default.
Okay, there is no particular requirement to be in EL1 for Exynos7.
EL2
would also be fine. But Exynos7 support in u-boot is not yet ready
for
enabling ARMV8_MULTIENTRY config option. Is there anything be
blocked
due to Exynos7 using a custom lowlevel_init function?
Yes, we're changing the semantics of armv8_switch_to_el2 and armv8_switch_to_el1:
http://lists.denx.de/pipermail/u-boot/2016-September/266217.html
which is a prerequisite for AArch32 kernel boot on AArch64 systems.
Okay.
How quickly do you think you could make Exynos7 work with MULTIENTRY?
Exynos7420 uses CPU 0 of Cluster 1 as boot CPU (master CPU). The macro 'branch_if_master' requires all affinity values to be zero for a CPU to be identified as a master CPU. And so the boot CPU is incorrectly detected as a slave CPU. I have tested with the following temporary workaround to enable ARMV8_MULTIENTRY on Exynos7420. If it looks fine, this can be merged along with Alison's patch.
Thomas.
diff --git a/arch/arm/mach-exynos/Kconfig b/arch/arm/mach- exynos/Kconfig index ce2a16f..45c5eeb 100644 --- a/arch/arm/mach-exynos/Kconfig +++ b/arch/arm/mach-exynos/Kconfig @@ -126,6 +126,8 @@ choice config TARGET_ESPRESSO7420 bool "ESPRESSO7420 board" select ARM64
select ARMV8_MULTIENTRY
select ARMV8_SWITCH_TO_EL1 select SUPPORT_SPL select OF_CONTROL select SPL_DISABLE_OF_CONTROL
diff --git a/arch/arm/mach-exynos/soc.c b/arch/arm/mach-exynos/soc.c index f9c7468..6c3ebb0 100644 --- a/arch/arm/mach-exynos/soc.c +++ b/arch/arm/mach-exynos/soc.c @@ -9,6 +9,16 @@ #include <asm/io.h> #include <asm/system.h>
+#ifdef CONFIG_TARGET_ESPRESSO7420 +/*
- Exynos7420 uses CPU0 of Cluster-1 as boot CPU. Due to this
branch_if_master
- fails to identify as the master CPU. As temporary workaround, setup
the
- slave CPU boot address as "_main".
- */
+extern void _main(void); +void *secondary_boot_addr = (void *)_main; +#endif /* CONFIG_TARGET_ESPRESSO7420 */
void reset_cpu(ulong addr) { #ifdef CONFIG_CPU_V7 diff --git a/include/configs/exynos7420-common.h b/include/configs/exynos7420-common.h index 9e03962..6f58aef 100644 --- a/include/configs/exynos7420-common.h +++ b/include/configs/exynos7420-common.h @@ -48,6 +48,7 @@ #define CONFIG_IRAM_BASE 0x02100000 #define CONFIG_IRAM_SIZE 0x58000 #define CONFIG_IRAM_END (CONFIG_IRAM_BASE + CONFIG_IRAM_SIZE) +#define CPU_RELEASE_ADDR secondary_boot_addr
/* Number of CPUs available */ #define CONFIG_CORE_COUNT 0x8
Alex