From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andes Date: Fri, 22 Dec 2017 15:44:27 +0800 Subject: [U-Boot] [PATCH 10/12] riscv: Support standalone In-Reply-To: <1513928669-9210-1-git-send-email-uboot@andestech.com> References: <1513928669-9210-1-git-send-email-uboot@andestech.com> Message-ID: <1513928669-9210-10-git-send-email-uboot@andestech.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable To: u-boot@lists.denx.de From: Rick Chen Run hello_world successfully. U-Boot 2018.01-rc2-00033-gb265b91-dirty (Dec 22 2017 - 13:54:21 +0800) DRAM: 1 GiB MMC: mmc at f0e00000: 0 SF: Detected mx25u1635e with page size 256 Bytes, erase size 4 KiB, total 2= MiB In: serial at f0300000 Out: serial at f0300000 Err: serial at f0300000 Net: Warning: mac at e0100000 (eth0) using random MAC address - 0a:47:9b:f8:b4:f2 eth0: mac at e0100000 RISC-V # mmc rescan RISC-V # fatls mmc 0:1 318907 u-boot-ae250-64.bin 1252 hello_world_ae250_32.bin 328787 u-boot-ae250-32.bin 3 file(s), 0 dir(s) RISC-V # fatload mmc 0:1 0x600000 hello_world_ae250_32.bin reading hello_world_ae250_32.bin 1252 bytes read in 23 ms (52.7 KiB/s) RISC-V # go 0x600000 Example expects ABI version 9 Actual U-Boot ABI version 9 Hello World argc =3D 1 argv[0] =3D "0x600000" argv[1] =3D "=EF=BF=BD#$B@" Hit any key to exit ... RISC-V # Signed-off-by: Rick Chen Signed-off-by: Rick Chen Signed-off-by: Greentime Hu --- examples/standalone/riscv.lds | 41 +++++++++++++++++++++++++++++++++++++= ++++ examples/standalone/stubs.c | 12 ++++++++++++ 2 files changed, 53 insertions(+), 0 deletions(-) create mode 100644 examples/standalone/riscv.lds diff --git a/examples/standalone/riscv.lds b/examples/standalone/riscv.lds new file mode 100644 index 0000000..7d8c482 --- /dev/null +++ b/examples/standalone/riscv.lds @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2017 Andes Technology Corporation + * Rick Chen, Andes Technology Corporation + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +OUTPUT_ARCH(riscv) +ENTRY(_start) +SECTIONS +{ + . =3D ALIGN(4); + .text : + { + *(.text) + } + + . =3D ALIGN(4); + .data : { + __global_pointer$ =3D . + 0x800; + *(.data) + } + + . =3D ALIGN(4); + + .got : { + __got_start =3D .; + *(.got) + __got_end =3D .; + } + + . =3D ALIGN(4); + __bss_start =3D .; + .bss : { *(.bss) } + __bss_end =3D .; + + . =3D ALIGN(4); + .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } + + _end =3D .; +} diff --git a/examples/standalone/stubs.c b/examples/standalone/stubs.c index 9c7a8c0..fadde66 100644 --- a/examples/standalone/stubs.c +++ b/examples/standalone/stubs.c @@ -172,6 +172,18 @@ gd_t *global_data; " lwi $r16, [$r16 + (%1)]\n" \ " jr $r16\n" \ : : "i"(offsetof(gd_t, jt)), "i"(FO(x)) : "$r16"); +#elif defined(CONFIG_RISCV) +/* + * t7 holds the pointer to the global_data. gp is call clobbered. + */ +#define EXPORT_FUNC(f, a, x, ...) \ + asm volatile ( \ +" .globl " #x "\n" \ +#x ":\n" \ +" lw x19, %0(gp)\n" \ +" lw x19, %1(x19)\n" \ +" jr x19\n" \ + : : "i"(offsetof(gd_t, jt)), "i"(FO(x)) : "x19"); #elif defined(CONFIG_ARC) /* * r25 holds the pointer to the global_data. r10 is call clobbered. --=20 1.7.1