Message ID | 1454957594-30601-9-git-send-email-drjones@redhat.com |
---|---|
State | Superseded |
Headers | show |
On 08.02.2016 19:53, Andrew Jones wrote: > Add the hvcall for putchar and use it in puts. That, along with a > couple more lines in start to prepare for C code, and a branch to > main(), gets us "hello world". Run with > > qemu-system-ppc64 -M pseries \ > -bios powerpc/boot_rom.bin \ > -display none -serial stdio \ > -kernel powerpc/selftest.elf > > (We're still not relocating yet, that comes in a later patch. Thus, > testing hello-world at this point requires a hacked QEMU and linking > the unit test at QEMU's kernel load address.) Is that comment still valid? I thought that's what the boot_rom.bin was good for? Apart from that, this patch looks fine to me. Thomas -- To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 12.02.2016 18:08, Thomas Huth wrote: > On 08.02.2016 19:53, Andrew Jones wrote: >> Add the hvcall for putchar and use it in puts. That, along with a >> couple more lines in start to prepare for C code, and a branch to >> main(), gets us "hello world". Run with >> >> qemu-system-ppc64 -M pseries \ >> -bios powerpc/boot_rom.bin \ >> -display none -serial stdio \ >> -kernel powerpc/selftest.elf >> >> (We're still not relocating yet, that comes in a later patch. Thus, >> testing hello-world at this point requires a hacked QEMU and linking >> the unit test at QEMU's kernel load address.) > > Is that comment still valid? I thought that's what the boot_rom.bin was > good for? Never mind, after reading patch 10/14, it's now clear to me what you mean here. Thomas -- To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/lib/powerpc/io.c b/lib/powerpc/io.c index 0af45742fc900..5e1fa8dd96ab6 100644 --- a/lib/powerpc/io.c +++ b/lib/powerpc/io.c @@ -6,15 +6,26 @@ * This work is licensed under the terms of the GNU LGPL, version 2. */ #include <libcflat.h> +#include <asm/spinlock.h> + +extern void halt(int code); +extern void putchar(int c); + +static struct spinlock uart_lock; void io_init(void) { } -void puts(const char *s __unused) +void puts(const char *s) { + spin_lock(&uart_lock); + while (*s) + putchar(*s++); + spin_unlock(&uart_lock); } -void exit(int code __unused) +void exit(int code) { + halt(code); } diff --git a/powerpc/Makefile.common b/powerpc/Makefile.common index cc1a521f1a269..89ad7a1907ac9 100644 --- a/powerpc/Makefile.common +++ b/powerpc/Makefile.common @@ -21,6 +21,7 @@ CFLAGS += -ffreestanding CFLAGS += -Wextra CFLAGS += -O2 CFLAGS += -I lib -I lib/libfdt +CFLAGS += -Wa,-mregnames asm-offsets = lib/$(ARCH)/asm-offsets.h include scripts/asm-offsets.mak diff --git a/powerpc/cstart64.S b/powerpc/cstart64.S index 4692f2d9d057e..466ec800313b3 100644 --- a/powerpc/cstart64.S +++ b/powerpc/cstart64.S @@ -6,14 +6,40 @@ * This work is licensed under the terms of the GNU LGPL, version 2. */ +#define H_PUT_TERM_CHAR 0x58 + +#define LOAD_REG_IMMEDIATE(reg,expr) \ + lis reg,(expr)@highest; \ + ori reg,reg,(expr)@higher; \ + rldicr reg,reg,32,31; \ + oris reg,reg,(expr)@h; \ + ori reg,reg,(expr)@l; + +#define LOAD_REG_ADDR(reg,name) \ + ld reg,name@got(r2) + .section .init .globl start start: + LOAD_REG_IMMEDIATE(r1, stackptr) + LOAD_REG_IMMEDIATE(r2, tocptr) + bl main + bl exit b halt .text +.align 3 .globl halt halt: 1: b 1b + +.globl putchar +putchar: + sldi r6, r3, 56 + li r3, H_PUT_TERM_CHAR + li r4, 0 /* vty-reg 0 means to use the default vty */ + li r5, 1 /* sending just 1 byte */ + sc 1 + blr
Add the hvcall for putchar and use it in puts. That, along with a couple more lines in start to prepare for C code, and a branch to main(), gets us "hello world". Run with qemu-system-ppc64 -M pseries \ -bios powerpc/boot_rom.bin \ -display none -serial stdio \ -kernel powerpc/selftest.elf (We're still not relocating yet, that comes in a later patch. Thus, testing hello-world at this point requires a hacked QEMU and linking the unit test at QEMU's kernel load address.) Signed-off-by: Andrew Jones <drjones@redhat.com> --- lib/powerpc/io.c | 15 +++++++++++++-- powerpc/Makefile.common | 1 + powerpc/cstart64.S | 26 ++++++++++++++++++++++++++ 3 files changed, 40 insertions(+), 2 deletions(-)