summaryrefslogtreecommitdiffstats
path: root/arch/arm/boards
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2019-03-06 14:34:52 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2019-05-13 13:58:06 +0200
commitab06d72a6ef8939831b8c0b1c412d9a11fc06889 (patch)
treeb015e4c8254ba8896be207947a55decf766daaf7 /arch/arm/boards
parented251dc493215e1fa14e610b208059cdcb95e52e (diff)
downloadbarebox-ab06d72a6ef8939831b8c0b1c412d9a11fc06889.tar.gz
barebox-ab06d72a6ef8939831b8c0b1c412d9a11fc06889.tar.xz
ARM: Layerscape: Add PPA firmware support
The "Primary Protected Application" (PPA) is a PSCI compliant firmware distributed by NXP. It is needed to start the secondary cores on Layerscape SoCs. Without it Linux will be started in EL3 and doesn't work properly. The precompiled firmware images can be found on https://github.com/NXP/qoriq-ppa-binary and are not included in barebox. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch/arm/boards')
-rw-r--r--arch/arm/boards/ls1046ardb/board.c7
-rw-r--r--arch/arm/boards/ls1046ardb/lowlevel.c2
-rw-r--r--arch/arm/boards/tqmls1046a/board.c6
-rw-r--r--arch/arm/boards/tqmls1046a/lowlevel.c2
4 files changed, 14 insertions, 3 deletions
diff --git a/arch/arm/boards/ls1046ardb/board.c b/arch/arm/boards/ls1046ardb/board.c
index 483040957e..0846df9fad 100644
--- a/arch/arm/boards/ls1046ardb/board.c
+++ b/arch/arm/boards/ls1046ardb/board.c
@@ -8,16 +8,21 @@
#include <linux/clk.h>
#include <linux/clkdev.h>
#include <asm/system.h>
+#include <mach/layerscape.h>
static int rdb_mem_init(void)
{
+ int ret;
+
if (!of_machine_is_compatible("fsl,ls1046a-rdb"))
return 0;
arm_add_mem_device("ram0", 0x80000000, 0x80000000);
arm_add_mem_device("ram1", 0x880000000, 3ULL * SZ_2G);
- printf("Current EL: %d\n", current_el());
+ ret = ls1046a_ppa_init(0x100000000 - SZ_64M, SZ_64M);
+ if (ret)
+ pr_err("Failed to initialize PPA firmware: %s\n", strerror(-ret));
return 0;
}
diff --git a/arch/arm/boards/ls1046ardb/lowlevel.c b/arch/arm/boards/ls1046ardb/lowlevel.c
index 0c95fbb035..0a30f05aa2 100644
--- a/arch/arm/boards/ls1046ardb/lowlevel.c
+++ b/arch/arm/boards/ls1046ardb/lowlevel.c
@@ -194,7 +194,7 @@ static noinline __noreturn void ls1046ardb_r_entry(unsigned long memsize)
if (memsize + membase >= 0x100000000)
memsize = 0x100000000 - membase;
- barebox_arm_entry(membase, 0x80000000 - SZ_1M * 67,
+ barebox_arm_entry(membase, 0x80000000 - SZ_64M,
__dtb_fsl_ls1046a_rdb_start);
}
diff --git a/arch/arm/boards/tqmls1046a/board.c b/arch/arm/boards/tqmls1046a/board.c
index 8cc4d73de5..028be890e0 100644
--- a/arch/arm/boards/tqmls1046a/board.c
+++ b/arch/arm/boards/tqmls1046a/board.c
@@ -15,11 +15,17 @@
static int tqmls1046a_mem_init(void)
{
+ int ret;
+
if (!of_machine_is_compatible("tqc,tqmls1046a"))
return 0;
arm_add_mem_device("ram0", 0x80000000, SZ_2G);
+ ret = ls1046a_ppa_init(0x100000000 - SZ_64M, SZ_64M);
+ if (ret)
+ pr_err("Failed to initialize PPA firmware: %s\n", strerror(-ret));
+
return 0;
}
mem_initcall(tqmls1046a_mem_init);
diff --git a/arch/arm/boards/tqmls1046a/lowlevel.c b/arch/arm/boards/tqmls1046a/lowlevel.c
index dc0e179694..f79f491ecc 100644
--- a/arch/arm/boards/tqmls1046a/lowlevel.c
+++ b/arch/arm/boards/tqmls1046a/lowlevel.c
@@ -243,7 +243,7 @@ static noinline __noreturn void tqmls1046a_r_entry(void)
unsigned long membase = LS1046A_DDR_SDRAM_BASE;
if (get_pc() >= membase)
- barebox_arm_entry(membase, 0x80000000,
+ barebox_arm_entry(membase, 0x80000000 - SZ_64M,
__dtb_fsl_tqmls1046a_mbls10xxa_start);
arm_cpu_lowlevel_init();