diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2019-03-06 14:34:52 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2019-05-13 13:58:06 +0200 |
commit | ab06d72a6ef8939831b8c0b1c412d9a11fc06889 (patch) | |
tree | b015e4c8254ba8896be207947a55decf766daaf7 /arch/arm/boards | |
parent | ed251dc493215e1fa14e610b208059cdcb95e52e (diff) | |
download | barebox-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.c | 7 | ||||
-rw-r--r-- | arch/arm/boards/ls1046ardb/lowlevel.c | 2 | ||||
-rw-r--r-- | arch/arm/boards/tqmls1046a/board.c | 6 | ||||
-rw-r--r-- | arch/arm/boards/tqmls1046a/lowlevel.c | 2 |
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(); |