On Tue, Sep 20, 2016 at 12:03 PM, Alexander Graf <ag...@suse.de> wrote:
> On 20.09.16 08:25, Thomas Abraham wrote:
>> On Tue, Sep 20, 2016 at 11:35 AM, Alexander Graf <ag...@suse.de> wrote:
>>> Am 20.09.2016 um 07:51 schrieb Thomas Abraham <ta.oma...@gmail.com>:
>>> Hi Alison,
>>> On Mon, Sep 19, 2016 at 7:38 PM, Alexander Graf <ag...@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.w...@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
>>> 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 <ag...@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
> which is a prerequisite for AArch32 kernel boot on AArch64 systems.
> 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.
diff --git a/arch/arm/mach-exynos/Kconfig b/arch/arm/mach-exynos/Kconfig
index ce2a16f..45c5eeb 100644
@@ -126,6 +126,8 @@ choice
bool "ESPRESSO7420 board"
+ select ARMV8_MULTIENTRY
+ select ARMV8_SWITCH_TO_EL1
diff --git a/arch/arm/mach-exynos/soc.c b/arch/arm/mach-exynos/soc.c
index f9c7468..6c3ebb0 100644
@@ -9,6 +9,16 @@
+ * 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)
diff --git a/include/configs/exynos7420-common.h
index 9e03962..6f58aef 100644
@@ -48,6 +48,7 @@
#define CONFIG_IRAM_BASE 0x02100000
#define CONFIG_IRAM_SIZE 0x58000
#define CONFIG_IRAM_END (CONFIG_IRAM_BASE +
+#define CPU_RELEASE_ADDR secondary_boot_addr
/* Number of CPUs available */
#define CONFIG_CORE_COUNT 0x8
U-Boot mailing list