From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42321) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bD1ey-00065U-71 for qemu-devel@nongnu.org; Tue, 14 Jun 2016 23:38:33 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bD1eu-0002pI-W6 for qemu-devel@nongnu.org; Tue, 14 Jun 2016 23:38:32 -0400 Date: Wed, 15 Jun 2016 13:10:18 +1000 From: David Gibson Message-ID: <20160615031018.GD4882@voom.fritz.box> References: <1465912676-6089-1-git-send-email-thuth@redhat.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="AouxlZHmRoNegvUM" Content-Disposition: inline In-Reply-To: <1465912676-6089-1-git-send-email-thuth@redhat.com> Subject: Re: [Qemu-devel] [PATCH v2] ppc / sparc: Add a tester for checking whether OpenBIOS runs successfully List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Thomas Huth Cc: qemu-ppc@nongnu.org, qemu-devel@nongnu.org, Mark Cave-Ayland , agraf@suse.de, Eric Blake , Markus Armbruster , blauwirbel@gmail.com, Artyom Tarasenko --AouxlZHmRoNegvUM Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Tue, Jun 14, 2016 at 03:57:56PM +0200, Thomas Huth wrote: > Since the mac99 and g3beige PowerPC machines recently broke without > being noticed, it would be good to have a tester for "make check" > that detects such issues immediately. A simple way to test the firmware > of these machines is to use the "-prom-env" parameter of QEMU. This > parameter can be used to put some Forth code into the 'boot-command' > firmware variable which then can signal success to the tester by > writing a magic value to a known memory location. And since some of the > Sparc machines are also using OpenBIOS, they are now tested with this > prom-env-tester, too. >=20 > Reviewed-by: Markus Armbruster > Signed-off-by: Thomas Huth > --- > v2: Removed unnecessary include statements (as suggested by Markus) Beautiful, I've applied this to ppc-for-2.7, assuming I don't get an objection to taking this through my tree. >=20 > tests/Makefile.include | 5 +++ > tests/prom-env-test.c | 90 ++++++++++++++++++++++++++++++++++++++++++++= ++++++ > 2 files changed, 95 insertions(+) > create mode 100644 tests/prom-env-test.c >=20 > diff --git a/tests/Makefile.include b/tests/Makefile.include > index 7d63d16..f95a3ca 100644 > --- a/tests/Makefile.include > +++ b/tests/Makefile.include > @@ -258,6 +258,10 @@ check-qtest-ppc-y +=3D tests/boot-order-test$(EXESUF) > check-qtest-ppc64-y +=3D tests/boot-order-test$(EXESUF) > check-qtest-ppc64-y +=3D tests/spapr-phb-test$(EXESUF) > gcov-files-ppc64-y +=3D ppc64-softmmu/hw/ppc/spapr_pci.c > +check-qtest-ppc-y =3D tests/prom-env-test$(EXESUF) > +check-qtest-ppc64-y =3D tests/prom-env-test$(EXESUF) > +check-qtest-sparc-y =3D tests/prom-env-test$(EXESUF) > +check-qtest-sparc64-y =3D tests/prom-env-test$(EXESUF) > check-qtest-microblazeel-y =3D $(check-qtest-microblaze-y) > check-qtest-xtensaeb-y =3D $(check-qtest-xtensa-y) > =20 > @@ -549,6 +553,7 @@ tests/rtc-test$(EXESUF): tests/rtc-test.o > tests/m48t59-test$(EXESUF): tests/m48t59-test.o > tests/endianness-test$(EXESUF): tests/endianness-test.o > tests/spapr-phb-test$(EXESUF): tests/spapr-phb-test.o $(libqos-obj-y) > +tests/prom-env-test$(EXESUF): tests/prom-env-test.o $(libqos-obj-y) > tests/fdc-test$(EXESUF): tests/fdc-test.o > tests/ide-test$(EXESUF): tests/ide-test.o $(libqos-pc-obj-y) > tests/ahci-test$(EXESUF): tests/ahci-test.o $(libqos-pc-obj-y) > diff --git a/tests/prom-env-test.c b/tests/prom-env-test.c > new file mode 100644 > index 0000000..6df57d2 > --- /dev/null > +++ b/tests/prom-env-test.c > @@ -0,0 +1,90 @@ > +/* > + * Test OpenBIOS-based machines. > + * > + * Copyright (c) 2016 Red Hat Inc. > + * > + * Author: > + * Thomas Huth > + * > + * This work is licensed under the terms of the GNU GPL, version 2 > + * or later. See the COPYING file in the top-level directory. > + * > + * This test is used to check that some OpenBIOS machines can be started > + * successfully in TCG mode. To do this, we first put some Forth code in= to > + * the "boot-command" Open Firmware environment variable. This Forth code > + * writes a well-known magic value to a known location in memory. Then we > + * start the guest so that OpenBIOS can boot and finally run the Forth c= ode. > + * The testing code here then can finally check whether the value has be= en > + * successfully written into the guest memory. > + */ > + > +#include "qemu/osdep.h" > +#include "libqtest.h" > + > +#define MAGIC 0xcafec0de > +#define ADDRESS 0x4000 > + > +static void check_guest_memory(void) > +{ > + uint32_t signature; > + int i; > + > + /* Poll until code has run and modified memory. Wait at most 30 seco= nds */ > + for (i =3D 0; i < 3000; ++i) { > + signature =3D readl(ADDRESS); > + if (signature =3D=3D MAGIC) { > + break; > + } > + g_usleep(10000); > + } > + > + g_assert_cmphex(signature, =3D=3D, MAGIC); > +} > + > +static void test_machine(const void *machine) > +{ > + char *args; > + > + args =3D g_strdup_printf("-M %s,accel=3Dtcg -prom-env 'boot-command= =3D%x %x l!'", > + (const char *)machine, MAGIC, ADDRESS); > + > + qtest_start(args); > + check_guest_memory(); > + qtest_quit(global_qtest); > + > + g_free(args); > +} > + > +static void add_tests(const char *machines[]) > +{ > + int i; > + char *name; > + > + for (i =3D 0; machines[i] !=3D NULL; i++) { > + name =3D g_strdup_printf("prom-env/%s", machines[i]); > + qtest_add_data_func(name, machines[i], test_machine); > + g_free(name); > + } > +} > + > +int main(int argc, char *argv[]) > +{ > + const char *sparc_machines[] =3D { "SPARCbook", "Voyager", "SS-20", = NULL }; > + const char *sparc64_machines[] =3D { "sun4u", "sun4v", NULL }; > + const char *mac_machines[] =3D { "mac99", "g3beige", NULL }; > + const char *arch =3D qtest_get_arch(); > + > + g_test_init(&argc, &argv, NULL); > + > + if (!strcmp(arch, "ppc") || !strcmp(arch, "ppc64")) { > + add_tests(mac_machines); > + } else if (!strcmp(arch, "sparc")) { > + add_tests(sparc_machines); > + } else if (!strcmp(arch, "sparc64")) { > + add_tests(sparc64_machines); > + } else { > + g_assert_not_reached(); > + } > + > + return g_test_run(); > +} --=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 --AouxlZHmRoNegvUM Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAEBAgAGBQJXYMcaAAoJEGw4ysog2bOS9vMQAKHjgeGUyeq6yXkZu4cqFdJm PtVx4LhgyC0WlWtAl8ArIoTDz4JOJ1tDkRZNsPxEUcJS6epelbzMhOrJx5Q6oT0x LGPouzZ5xeFVgPOgFuE9vUpYTWxIsN1keCeiuy02QMKeKLWXxd1Az6Q3hzjewYMU fbV3NN2z4cKtPRlbq4jtjHsw0LTZPstSSiG3LeM580iNtZE6f0eRp1oaaeQCMBe8 osjTFX4bQz78dc47qpxfcupsGnxvU4b1jdBvZ542k1DNcSCcx4oVXvkYVMQxAyrr bXxl4h+DWWSmHq92Bi6H6wqvdlSqljSMNEwbu9jLuD/TTL6Hhweq+PPWC3Mdf3Wm neOpbhZkQeV6bIVt3f4tGVpVJLbHQc6MASRm/S9YkhmDWvuZm9UoPwtGADSlTADQ auh42qumi1KiziVZZKxlJBtY34aPNrqHDfr5aDLLM+7Jd8Pkx+sKfnT1fxPOQOYA jNhIk1OOwSioEjGrqXXwGutJXM+EjCxk/TZAQM3wWnwgtDvMAOcyMcJ0QhUQRNHd mgShdkvwY11100fDoR+gQTTXwgoV5tBb41I73lOsmbwEl4xFuB5RJFCJyz4beCoJ 3qtZp6B+VPVJRqheu6r+DN6Dk6W83sqjKi9Gpc69Ux70CP8JAqw/nUQZgMDc2cK6 tojKxwE1OFxp4/BaokmJ =DZLm -----END PGP SIGNATURE----- --AouxlZHmRoNegvUM--