aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/mpc85xx/image/spi-loader/head.S
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2022-03-27 20:57:01 +0200
committerDavid Bauer <mail@david-bauer.net>2022-10-14 23:15:12 +0200
commitf7a43e46065609910bdd2fa6f97ffa1deeda222b (patch)
tree33730b5a09fee04e3d66b03917c40c5f2699258c /target/linux/mpc85xx/image/spi-loader/head.S
parentc1fcca50ba924fcb2b51a03a8dbf68c2fe7ae60c (diff)
downloadupstream-f7a43e46065609910bdd2fa6f97ffa1deeda222b.tar.gz
upstream-f7a43e46065609910bdd2fa6f97ffa1deeda222b.tar.bz2
upstream-f7a43e46065609910bdd2fa6f97ffa1deeda222b.zip
mpc85xx: add SPI kernel loader for TP-Link TL-WDR4900 v1
Similar to the lzma-loader on our MIPS targets, the spi-loader acts as a second-stage loader that will then load and start the actual kernel. As the TL-WDR4900 uses SPI-NOR and the P1010 family does not have support for memory mapping of this type of flash, this loader needs to contain a basic driver for the FSL ESPI controller. Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net> (cherry picked from commit a296055b82fbb20457273492069ce9d62009e2a1)
Diffstat (limited to 'target/linux/mpc85xx/image/spi-loader/head.S')
-rw-r--r--target/linux/mpc85xx/image/spi-loader/head.S36
1 files changed, 36 insertions, 0 deletions
diff --git a/target/linux/mpc85xx/image/spi-loader/head.S b/target/linux/mpc85xx/image/spi-loader/head.S
new file mode 100644
index 0000000000..032e914126
--- /dev/null
+++ b/target/linux/mpc85xx/image/spi-loader/head.S
@@ -0,0 +1,36 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * Copyright (C) 2022 Matthias Schiffer <mschiffer@universe-factory.net>
+ *
+ * Based on Linux arch/powerpc/boot/crt0.S, which is:
+ *
+ * Copyright (C) Paul Mackerras 1997.
+ */
+
+#include <ppc_asm.h>
+
+ .text
+ .global _start
+_start:
+ /* Do a cache flush for our text, in case the loader didn't */
+ lis r3,_text_start@ha
+ addi r3,r3,_text_start@l
+ li r4,_text_len
+ bl flush_cache
+
+ /* Clear the BSS */
+ lis r3,_bss_start@ha
+ addi r3,r3,_bss_start@l
+ li r4,0
+ li r5,_bss_len
+ bl memset
+
+ /* Set up stack */
+ lis r1,_stack_top@ha
+ addi r1,r1,_stack_top@l
+ /* Establish a stack frame */
+ li r0,0
+ stwu r0,-16(r1)
+
+ /* Call start */
+ b start