From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Gibson Subject: Re: [kvm-unit-tests PATCH 08/14] powerpc/ppc64: add HV putchar Date: Tue, 4 Aug 2015 13:50:39 +1000 Message-ID: <20150804035039.GB3080@voom.redhat.com> References: <1438612891-3718-1-git-send-email-drjones@redhat.com> <1438612891-3718-9-git-send-email-drjones@redhat.com> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="MnLPg7ZWsaic7Fhd" Cc: kvm@vger.kernel.org, kvm-ppc@vger.kernel.org, dgibson@redhat.com, agraf@suse.de, thuth@redhat.com, lvivier@redhat.com, pbonzini@redhat.com To: Andrew Jones Return-path: Received: from ozlabs.org ([103.22.144.67]:43606 "EHLO ozlabs.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750709AbbHDEUq (ORCPT ); Tue, 4 Aug 2015 00:20:46 -0400 Content-Disposition: inline In-Reply-To: <1438612891-3718-9-git-send-email-drjones@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: --MnLPg7ZWsaic7Fhd Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Mon, Aug 03, 2015 at 04:41:25PM +0200, 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 >=20 > qemu-system-ppc64 -M pseries \ > -bios powerpc/boot_rom.bin \ > -display none -serial stdio \ > -kernel powerpc/selftest.elf >=20 > (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.) >=20 > Signed-off-by: Andrew Jones > --- > lib/powerpc/io.c | 15 +++++++++++++-- > powerpc/Makefile.common | 1 + > powerpc/cstart64.S | 27 +++++++++++++++++++++++++++ > 3 files changed, 41 insertions(+), 2 deletions(-) >=20 > diff --git a/lib/powerpc/io.c b/lib/powerpc/io.c > index cf3b6347e1e46..a7eaafeca9205 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 > +#include > + > +extern void halt(int code); > +extern void putchar(int c); > + > +static struct spinlock uart_lock; > =20 > void io_init(void) > { > } > =20 > -void puts(const char *s __unused) > +void puts(const char *s) > { > + spin_lock(&uart_lock); > + while (*s) > + putchar(*s++); > + spin_unlock(&uart_lock); > } > =20 > -void exit(int code __unused) > +void exit(int code) > { > + halt(code); > } > diff --git a/powerpc/Makefile.common b/powerpc/Makefile.common > index 5cd3ea8085038..d6356540918a5 100644 > --- a/powerpc/Makefile.common > +++ b/powerpc/Makefile.common > @@ -26,6 +26,7 @@ CFLAGS +=3D -ffreestanding > CFLAGS +=3D -Wextra > CFLAGS +=3D -O2 > CFLAGS +=3D -I lib -I lib/libfdt > +CFLAGS +=3D -Wa,-mregnames > =20 > asm-offsets =3D lib/$(ARCH)/asm-offsets.h > include scripts/asm-offsets.mak > diff --git a/powerpc/cstart64.S b/powerpc/cstart64.S > index d9b77f44f9e0e..d7c51cd352ee4 100644 > --- a/powerpc/cstart64.S > +++ b/powerpc/cstart64.S > @@ -6,14 +6,41 @@ > * This work is licensed under the terms of the GNU LGPL, version 2. > */ > =20 > +#define HVSC .long 0x44000022 Unless your assembler is really old, you could probably use "sc 1" inline, instead of this macro. Not that it really matters. > +#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 > =20 > .globl start > start: > + LOAD_REG_IMMEDIATE(r1, stackptr) > + LOAD_REG_IMMEDIATE(r2, tocptr) > + bl .main > + bl .exit Is this built for ppc64 or ppc64le? IIUC under the new ABI version usually used on ppc64le, function descriptors are no longer used. And even under the old ABI, I think the assembler now has the smarts to avoid explicitly referencing the .-symbols. > b halt > =20 > .text > +.align 3 > =20 > .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 */ > + HVSC > + blr --=20 David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson --MnLPg7ZWsaic7Fhd Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAEBAgAGBQJVwDaPAAoJEGw4ysog2bOS5yIP/1uoCdmkNiSMSCq7XcJW97hq 1+L2d7DM8Rn9/Na8c7Czsn17PhZTyYdU3ilqGsK6wz1H2CY7prycBN9t/Qt6ssWp MZd9ubII6i8qoel3ixSvPNDYRHThysrf9oYtfsMGkPJ3FQ2GdWlUiCltb7d5alAW 1cut9xEaQW3TBoGZdCTa3Jw6zykT1NSbH4HvlnrswyhZ+ud1S1D5L++b9BLkiprP QA/uE6wRzDJe64v5Gksj/uZ3MnuZZEclzxDX1168P+I9SPCq8kK74o+NgLS2ESJq PUW4Zf0R0sgVqXa5XT6gViLckS9m11O1vv1h7aU0H2RPyLwvaM/xRl9mIUuULKP9 v16FDgWkw3NrIUNta8tQwd64CkL681m+nmPmb/ZSds72YUkKjDT6puyBUy3/QAn+ hi7Ix+l5AtiOGtWpTRc+OLSjHy59iJcIYH+1Ud1qbcYDn8gbcWI+FHtJrCzA5HLZ lhhBXPbGC+yV9TIDhX/7VPbNCa1ilJB8x/m3/N6AJt/Z0kU/yM6Aya9fZJ1QqrF9 fwNGgvT6Lavj8m0022heAWVrTiLCutn6J2oe4KN5Qrlvq5P6ah9U4y8VBE8/ZVRS H2DerHqSBkO00sqia4Ab0tIgRbfDc9gPhZjAhtKOjmr+MJW4Mqp8Ew8X8F6QpI5F Wtf05FXFB7FXJad0crOp =LPLy -----END PGP SIGNATURE----- --MnLPg7ZWsaic7Fhd--