From patchwork Wed Jun 19 00:38:47 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 11003147 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 36DCE6C5 for ; Wed, 19 Jun 2019 00:53:00 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 26D9B28B2C for ; Wed, 19 Jun 2019 00:53:00 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1B36328B30; Wed, 19 Jun 2019 00:53:00 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 3695E28B2C for ; Wed, 19 Jun 2019 00:52:59 +0000 (UTC) Received: from localhost ([::1]:34352 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hdOqQ-0001Ce-JZ for patchwork-qemu-devel@patchwork.kernel.org; Tue, 18 Jun 2019 20:52:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48430) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hdOox-0007iJ-CO for qemu-devel@nongnu.org; Tue, 18 Jun 2019 20:51:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hdOf2-0003ZS-63 for qemu-devel@nongnu.org; Tue, 18 Jun 2019 20:41:14 -0400 Received: from esa4.hgst.iphmx.com ([216.71.154.42]:29342) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hdOf1-0003Y4-S9; Tue, 18 Jun 2019 20:41:12 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1560904872; x=1592440872; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=gPn0VXQeyWsEn1cr/JyvIlrvIC+AFRrBK70ZUfnNR/c=; b=J9pfJe1Ez3FWkac/KE+zOXy14s1I3s709DBBcPC9MhF682tiQPmu9G2t ZOUpGLcIF5S5z6OMWuM9hc7oDrqlQsCtISisKoQub+vDgn89EFjMj3eu8 f9lXpQG04aPXXX5uJ6ODwLrMQhPVWyX476rPGJrW1VVIFsTf1hWQGM0ui DkDosaMELldlq5lJtRFZRRbcsPLTadI3AgXgeqsO37gp0b4I7G8l9od5f UHfGIFLle1xk2YtneMyxN+1NZoR8utfZl+n4jhjwfe1nVoEMlPKJDhFaL RUp5lTnl0KntSlRBiUPe1MBPuC2/3JUK1AOK8aZBzIFiL6Yc629UZgLwu w==; X-IronPort-AV: E=Sophos;i="5.63,390,1557158400"; d="scan'208";a="110901043" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 19 Jun 2019 08:41:09 +0800 IronPort-SDR: Bk5g1UYzk4sZBUn2Ch482QMc4U5CRUZi6T2Su9euv1pGS8STZvjO6TfHa9ir3fj0RRfAcWetId P4zz+jDujiew4z0UI5eUm4AHGBd35mfseCX7DWiAZ8HgDs1ZhQoPFXXq/YLeu6kfGmMsdXuLvZ 0N2hhMb9/riIdqVzBz5DOvXXqreGBhZAnDqFXFkIfkOEirV4TKQBWS04pp0GifWVPeLrpvQHUB kQ2SWdni2RO6sCYDkAxqGa4Ea9F3HCYz8rFuf33YAtZOVjBx1EiIZtoHkD0QyBejhBRVmyNMI7 6dD2UjCHVxk8qNhYVTRL/nSZ Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP; 18 Jun 2019 17:40:37 -0700 IronPort-SDR: yGZZ2XR/DQ9ZtWZppazB6GTTbWanSWsjaQVx/R7onN82PmAemZEFzJmtihaB3rRE5jgGxkajYc d2TKvoaT6dE9xB0kFA366PvxxqydddzGqvoH80oF/kF8iKgMZszeG6rEcvCtgtqTqamx3CC6N6 1ue6OlCEyP9fgZDs4FtN3dkjO28s9DxiJW4YTJwY5l3yjAOXVBgdIgCpxhKt03nCidpIXA9J4t GGhwJ3CxXSEUg22o85FSffheOWaPPpp444W7vy2Ynq1h6tUxMlYFM9CM5JcMSL64k1SUVkuBIO 5v0= Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.140]) by uls-op-cesaip02.wdc.com with ESMTP; 18 Jun 2019 17:41:08 -0700 From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Tue, 18 Jun 2019 17:38:47 -0700 Message-Id: X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 216.71.154.42 Subject: [Qemu-devel] [RFC v1 1/5] hw/riscv: Split out the boot functions X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Split the common RISC-V boot functions into a seperate file. This allows us to share the common code. Signed-off-by: Alistair Francis Reviewed-by: Bin Meng Tested-by: Bin Meng --- hw/riscv/Makefile.objs | 1 + hw/riscv/boot.c | 69 +++++++++++++++++++++++++++++++++++++++++ hw/riscv/sifive_e.c | 17 ++-------- hw/riscv/sifive_u.c | 17 ++-------- hw/riscv/spike.c | 21 +++---------- hw/riscv/virt.c | 51 +++--------------------------- include/hw/riscv/boot.h | 27 ++++++++++++++++ 7 files changed, 110 insertions(+), 93 deletions(-) create mode 100644 hw/riscv/boot.c create mode 100644 include/hw/riscv/boot.h diff --git a/hw/riscv/Makefile.objs b/hw/riscv/Makefile.objs index a65027304a..eb9d4f9ffc 100644 --- a/hw/riscv/Makefile.objs +++ b/hw/riscv/Makefile.objs @@ -1,3 +1,4 @@ +obj-y += boot.o obj-$(CONFIG_SPIKE) += riscv_htif.o obj-$(CONFIG_HART) += riscv_hart.o obj-$(CONFIG_SIFIVE_E) += sifive_e.o diff --git a/hw/riscv/boot.c b/hw/riscv/boot.c new file mode 100644 index 0000000000..62f94aaf8a --- /dev/null +++ b/hw/riscv/boot.c @@ -0,0 +1,69 @@ +/* + * QEMU RISC-V Boot Helper + * + * Copyright (c) 2017 SiFive, Inc. + * Copyright (c) 2019 Alistair Francis + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2 or later, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + */ + +#include "qemu/osdep.h" +#include "qemu/units.h" +#include "qemu/error-report.h" +#include "exec/cpu-defs.h" +#include "hw/loader.h" +#include "hw/riscv/boot.h" +#include "elf.h" + +target_ulong riscv_load_kernel(const char *kernel_filename) +{ + uint64_t kernel_entry, kernel_high; + + if (load_elf(kernel_filename, NULL, NULL, NULL, + &kernel_entry, NULL, &kernel_high, + 0, EM_RISCV, 1, 0) < 0) { + error_report("could not load kernel '%s'", kernel_filename); + exit(1); + } + + return kernel_entry; +} + +hwaddr riscv_load_initrd(const char *filename, uint64_t mem_size, + uint64_t kernel_entry, hwaddr *start) +{ + int size; + + /* We want to put the initrd far enough into RAM that when the + * kernel is uncompressed it will not clobber the initrd. However + * on boards without much RAM we must ensure that we still leave + * enough room for a decent sized initrd, and on boards with large + * amounts of RAM we must avoid the initrd being so far up in RAM + * that it is outside lowmem and inaccessible to the kernel. + * So for boards with less than 256MB of RAM we put the initrd + * halfway into RAM, and for boards with 256MB of RAM or more we put + * the initrd at 128MB. + */ + *start = kernel_entry + MIN(mem_size / 2, 128 * MiB); + + size = load_ramdisk(filename, *start, mem_size - *start); + if (size == -1) { + size = load_image_targphys(filename, *start, mem_size - *start); + if (size == -1) { + error_report("could not load ramdisk '%s'", filename); + exit(1); + } + } + + return *start + size; +} diff --git a/hw/riscv/sifive_e.c b/hw/riscv/sifive_e.c index 80ac56fa7d..9d58ae362b 100644 --- a/hw/riscv/sifive_e.c +++ b/hw/riscv/sifive_e.c @@ -44,10 +44,10 @@ #include "hw/riscv/sifive_prci.h" #include "hw/riscv/sifive_uart.h" #include "hw/riscv/sifive_e.h" +#include "hw/riscv/boot.h" #include "chardev/char.h" #include "sysemu/arch_init.h" #include "exec/address-spaces.h" -#include "elf.h" static const struct MemmapEntry { hwaddr base; @@ -74,19 +74,6 @@ static const struct MemmapEntry { [SIFIVE_E_DTIM] = { 0x80000000, 0x4000 } }; -static target_ulong load_kernel(const char *kernel_filename) -{ - uint64_t kernel_entry, kernel_high; - - if (load_elf(kernel_filename, NULL, NULL, NULL, - &kernel_entry, NULL, &kernel_high, - 0, EM_RISCV, 1, 0) < 0) { - error_report("could not load kernel '%s'", kernel_filename); - exit(1); - } - return kernel_entry; -} - static void sifive_mmio_emulate(MemoryRegion *parent, const char *name, uintptr_t offset, uintptr_t length) { @@ -131,7 +118,7 @@ static void riscv_sifive_e_init(MachineState *machine) memmap[SIFIVE_E_MROM].base, &address_space_memory); if (machine->kernel_filename) { - load_kernel(machine->kernel_filename); + riscv_load_kernel(machine->kernel_filename); } } diff --git a/hw/riscv/sifive_u.c b/hw/riscv/sifive_u.c index 5ecc47cea3..1b9281bd4a 100644 --- a/hw/riscv/sifive_u.c +++ b/hw/riscv/sifive_u.c @@ -41,11 +41,11 @@ #include "hw/riscv/sifive_uart.h" #include "hw/riscv/sifive_prci.h" #include "hw/riscv/sifive_u.h" +#include "hw/riscv/boot.h" #include "chardev/char.h" #include "sysemu/arch_init.h" #include "sysemu/device_tree.h" #include "exec/address-spaces.h" -#include "elf.h" #include @@ -65,19 +65,6 @@ static const struct MemmapEntry { #define GEM_REVISION 0x10070109 -static target_ulong load_kernel(const char *kernel_filename) -{ - uint64_t kernel_entry, kernel_high; - - if (load_elf(kernel_filename, NULL, NULL, NULL, - &kernel_entry, NULL, &kernel_high, - 0, EM_RISCV, 1, 0) < 0) { - error_report("could not load kernel '%s'", kernel_filename); - exit(1); - } - return kernel_entry; -} - static void create_fdt(SiFiveUState *s, const struct MemmapEntry *memmap, uint64_t mem_size, const char *cmdline) { @@ -280,7 +267,7 @@ static void riscv_sifive_u_init(MachineState *machine) create_fdt(s, memmap, machine->ram_size, machine->kernel_cmdline); if (machine->kernel_filename) { - load_kernel(machine->kernel_filename); + riscv_load_kernel(machine->kernel_filename); } /* reset vector */ diff --git a/hw/riscv/spike.c b/hw/riscv/spike.c index 5b33d4be3b..e68be00a5f 100644 --- a/hw/riscv/spike.c +++ b/hw/riscv/spike.c @@ -36,12 +36,12 @@ #include "hw/riscv/riscv_hart.h" #include "hw/riscv/sifive_clint.h" #include "hw/riscv/spike.h" +#include "hw/riscv/boot.h" #include "chardev/char.h" #include "sysemu/arch_init.h" #include "sysemu/device_tree.h" #include "sysemu/qtest.h" #include "exec/address-spaces.h" -#include "elf.h" #include @@ -54,19 +54,6 @@ static const struct MemmapEntry { [SPIKE_DRAM] = { 0x80000000, 0x0 }, }; -static target_ulong load_kernel(const char *kernel_filename) -{ - uint64_t kernel_entry, kernel_high; - - if (load_elf_ram_sym(kernel_filename, NULL, NULL, NULL, - &kernel_entry, NULL, &kernel_high, 0, EM_RISCV, 1, 0, - NULL, true, htif_symbol_callback) < 0) { - error_report("could not load kernel '%s'", kernel_filename); - exit(1); - } - return kernel_entry; -} - static void create_fdt(SpikeState *s, const struct MemmapEntry *memmap, uint64_t mem_size, const char *cmdline) { @@ -199,7 +186,7 @@ static void spike_board_init(MachineState *machine) mask_rom); if (machine->kernel_filename) { - load_kernel(machine->kernel_filename); + riscv_load_kernel(machine->kernel_filename); } /* reset vector */ @@ -287,7 +274,7 @@ static void spike_v1_10_0_board_init(MachineState *machine) mask_rom); if (machine->kernel_filename) { - load_kernel(machine->kernel_filename); + riscv_load_kernel(machine->kernel_filename); } /* reset vector */ @@ -372,7 +359,7 @@ static void spike_v1_09_1_board_init(MachineState *machine) mask_rom); if (machine->kernel_filename) { - load_kernel(machine->kernel_filename); + riscv_load_kernel(machine->kernel_filename); } /* reset vector */ diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index 84d94d0c42..5f8c11471b 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -34,13 +34,13 @@ #include "hw/riscv/sifive_clint.h" #include "hw/riscv/sifive_test.h" #include "hw/riscv/virt.h" +#include "hw/riscv/boot.h" #include "chardev/char.h" #include "sysemu/arch_init.h" #include "sysemu/device_tree.h" #include "exec/address-spaces.h" #include "hw/pci/pci.h" #include "hw/pci-host/gpex.h" -#include "elf.h" #include @@ -61,47 +61,6 @@ static const struct MemmapEntry { [VIRT_PCIE_ECAM] = { 0x30000000, 0x10000000 }, }; -static target_ulong load_kernel(const char *kernel_filename) -{ - uint64_t kernel_entry, kernel_high; - - if (load_elf(kernel_filename, NULL, NULL, NULL, - &kernel_entry, NULL, &kernel_high, - 0, EM_RISCV, 1, 0) < 0) { - error_report("could not load kernel '%s'", kernel_filename); - exit(1); - } - return kernel_entry; -} - -static hwaddr load_initrd(const char *filename, uint64_t mem_size, - uint64_t kernel_entry, hwaddr *start) -{ - int size; - - /* We want to put the initrd far enough into RAM that when the - * kernel is uncompressed it will not clobber the initrd. However - * on boards without much RAM we must ensure that we still leave - * enough room for a decent sized initrd, and on boards with large - * amounts of RAM we must avoid the initrd being so far up in RAM - * that it is outside lowmem and inaccessible to the kernel. - * So for boards with less than 256MB of RAM we put the initrd - * halfway into RAM, and for boards with 256MB of RAM or more we put - * the initrd at 128MB. - */ - *start = kernel_entry + MIN(mem_size / 2, 128 * MiB); - - size = load_ramdisk(filename, *start, mem_size - *start); - if (size == -1) { - size = load_image_targphys(filename, *start, mem_size - *start); - if (size == -1) { - error_report("could not load ramdisk '%s'", filename); - exit(1); - } - } - return *start + size; -} - static void create_pcie_irq_map(void *fdt, char *nodename, uint32_t plic_phandle) { @@ -422,13 +381,13 @@ static void riscv_virt_board_init(MachineState *machine) mask_rom); if (machine->kernel_filename) { - uint64_t kernel_entry = load_kernel(machine->kernel_filename); + uint64_t kernel_entry = riscv_load_kernel(machine->kernel_filename); if (machine->initrd_filename) { hwaddr start; - hwaddr end = load_initrd(machine->initrd_filename, - machine->ram_size, kernel_entry, - &start); + hwaddr end = riscv_load_initrd(machine->initrd_filename, + machine->ram_size, kernel_entry, + &start); qemu_fdt_setprop_cell(fdt, "/chosen", "linux,initrd-start", start); qemu_fdt_setprop_cell(fdt, "/chosen", "linux,initrd-end", diff --git a/include/hw/riscv/boot.h b/include/hw/riscv/boot.h new file mode 100644 index 0000000000..f84fd6c2df --- /dev/null +++ b/include/hw/riscv/boot.h @@ -0,0 +1,27 @@ +/* + * QEMU RISC-V Boot Helper + * + * Copyright (c) 2017 SiFive, Inc. + * Copyright (c) 2019 Alistair Francis + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2 or later, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + */ + +#ifndef RISCV_BOOT_H +#define RISCV_BOOT_H + +target_ulong riscv_load_kernel(const char *kernel_filename); +hwaddr riscv_load_initrd(const char *filename, uint64_t mem_size, + uint64_t kernel_entry, hwaddr *start); + +#endif /* RISCV_BOOT_H */ From patchwork Wed Jun 19 00:38:50 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 11003145 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id F401F14DB for ; Wed, 19 Jun 2019 00:52:43 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E299A28B2C for ; Wed, 19 Jun 2019 00:52:43 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D640728B38; Wed, 19 Jun 2019 00:52:43 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 5BA7B28B2D for ; Wed, 19 Jun 2019 00:52:43 +0000 (UTC) Received: from localhost ([::1]:34350 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hdOqA-00015p-J7 for patchwork-qemu-devel@patchwork.kernel.org; Tue, 18 Jun 2019 20:52:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48401) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hdOp2-0007hu-8y for qemu-devel@nongnu.org; Tue, 18 Jun 2019 20:51:34 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hdOf2-0003Zl-IZ for qemu-devel@nongnu.org; Tue, 18 Jun 2019 20:41:13 -0400 Received: from esa4.hgst.iphmx.com ([216.71.154.42]:29336) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hdOf2-0003VC-Ab; Tue, 18 Jun 2019 20:41:12 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1560904873; x=1592440873; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=3+76QIJxIBVZ79eXeNFTLJr7YxWh/86B8UEl89n99kM=; b=JJeJzzvoWbwfJr/rox++VI6g5GNjYXom/MgoYmf5a+YVTEudOiKEVIYv vPGsruRcE6H2mkNnFC6BqfZRxFSEfhOX3X9FGemFJgJLkoFQgk6ao/Fuf o55un1XCEcDdFOW+7EU9W/We70d8+tZ8P1+6b9JFNdIfTmOAhnvvxs/J0 /edBpTFnInecwwcw0SUcLAxH/gGnA7w+oSrjWqtG51JyuRsi+In4Lb+k/ /D4sp/QkIa7oGheX4+VIJvR5veomjg433xlxEyiKcUt4XRXqAIMDNcZ7F loLI7S9u6a1LgIx+QE4JFjYDAlsovDJBlczpP8sQWV3gDZDB5VmjoLSL1 A==; X-IronPort-AV: E=Sophos;i="5.63,390,1557158400"; d="scan'208";a="110901045" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 19 Jun 2019 08:41:12 +0800 IronPort-SDR: CrHY7J03ZuAdz57Ba4RfqmBLfmAS2sOtPs9KouDHkQSReN1UILi+LqPRGUbvhIi6unpUZJPLfz TWXmZJtIsp668M1ERXD4/IUf1dZgbmmUj6kZ594SMwM+lypwoGsWKf+s2XAA01m7NNrPVTNZcC JF0yXb5/zpfNQpvjSMpV1OX4fPvgDP324V2hWVZeSATyFbTXZGSCzchipIdgARj1uh7Db2/Xoe FRbzWeJVjtaCbGJC2qzJzeEaFuuZcxmaPGZU+34mmuLvw/O3k42ljhAW2WOgPA/b428ltNKN6e iarRFR2jK6PmptYW4+rKbfCa Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP; 18 Jun 2019 17:40:40 -0700 IronPort-SDR: iHlpcmdti7/m/oj585t5FWlJBmB7VSsezxA7e6vEB/5wxrPI15R1hZccRp8QJJ5ucGI0uUVMmP 4sRSI/qNNT/nUaqYSKrGHyIJ05T3qRfHaiRRQMaQsDc0TxA1UeV9VZRA+Y+NcT0xzgvaTkJCPh c06gipyR5P54LgjvrNeRk39MDUvEUJ9DIsm+PnJp7wdh8FeP4ODILYxWz+tJWFWFiTxeCcEhFZ WmyVLpAF6dXuiueDzQi8wH3DU1uA6eFJ1hu0h/a4vBYLL6D5EA71OlxqKBxCSuzLqVkQe/QpMd KC0= Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.140]) by uls-op-cesaip02.wdc.com with ESMTP; 18 Jun 2019 17:41:11 -0700 From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Tue, 18 Jun 2019 17:38:50 -0700 Message-Id: X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 216.71.154.42 Subject: [Qemu-devel] [RFC v1 2/5] hw/riscv: Add support for loading a firmware X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Add support for loading a firmware file for the virt machine and the SiFive U. This can be run with the following command: qemu-system-riscv64 -machine virt -bios fw_jump.elf -kernel vmlinux Signed-off-by: Alistair Francis --- hw/riscv/boot.c | 41 +++++++++++++++++++++++++++++++++++++++-- hw/riscv/sifive_e.c | 2 +- hw/riscv/sifive_u.c | 6 +++++- hw/riscv/spike.c | 6 +++--- hw/riscv/virt.c | 7 ++++++- include/hw/riscv/boot.h | 4 +++- 6 files changed, 57 insertions(+), 9 deletions(-) diff --git a/hw/riscv/boot.c b/hw/riscv/boot.c index 62f94aaf8a..392ca0cb2e 100644 --- a/hw/riscv/boot.c +++ b/hw/riscv/boot.c @@ -23,13 +23,50 @@ #include "exec/cpu-defs.h" #include "hw/loader.h" #include "hw/riscv/boot.h" +#include "hw/boards.h" #include "elf.h" -target_ulong riscv_load_kernel(const char *kernel_filename) +#if defined(TARGET_RISCV32) +# define KERNEL_BOOT_ADDRESS 0x80400000 +#else +# define KERNEL_BOOT_ADDRESS 0x80200000 +#endif + +static uint64_t kernel_translate(void *opaque, uint64_t addr) +{ + MachineState *machine = opaque; + + /* + * If the user specified a firmware move the kernel to the offset + * start address. + */ + if (machine->firmware) { + return (addr & 0x7fffffff) + KERNEL_BOOT_ADDRESS; + } else { + return addr; + } +} + +target_ulong riscv_load_firmware(const char *firmware_filename) +{ + uint64_t firmware_entry, firmware_start, firmware_end; + + if (load_elf(firmware_filename, NULL, NULL, NULL, + &firmware_entry, &firmware_start, &firmware_end, + 0, EM_RISCV, 1, 0) < 0) { + error_report("could not load firmware '%s'", firmware_filename); + exit(1); + } + + return firmware_entry; +} + +target_ulong riscv_load_kernel(MachineState *machine, + const char *kernel_filename) { uint64_t kernel_entry, kernel_high; - if (load_elf(kernel_filename, NULL, NULL, NULL, + if (load_elf(kernel_filename, NULL, kernel_translate, machine, &kernel_entry, NULL, &kernel_high, 0, EM_RISCV, 1, 0) < 0) { error_report("could not load kernel '%s'", kernel_filename); diff --git a/hw/riscv/sifive_e.c b/hw/riscv/sifive_e.c index 9d58ae362b..3695c686be 100644 --- a/hw/riscv/sifive_e.c +++ b/hw/riscv/sifive_e.c @@ -118,7 +118,7 @@ static void riscv_sifive_e_init(MachineState *machine) memmap[SIFIVE_E_MROM].base, &address_space_memory); if (machine->kernel_filename) { - riscv_load_kernel(machine->kernel_filename); + riscv_load_kernel(machine, machine->kernel_filename); } } diff --git a/hw/riscv/sifive_u.c b/hw/riscv/sifive_u.c index 1b9281bd4a..03a6c64d04 100644 --- a/hw/riscv/sifive_u.c +++ b/hw/riscv/sifive_u.c @@ -266,8 +266,12 @@ static void riscv_sifive_u_init(MachineState *machine) /* create device tree */ create_fdt(s, memmap, machine->ram_size, machine->kernel_cmdline); + if (machine->firmware) { + riscv_load_firmware(machine->firmware); + } + if (machine->kernel_filename) { - riscv_load_kernel(machine->kernel_filename); + riscv_load_kernel(machine, machine->kernel_filename); } /* reset vector */ diff --git a/hw/riscv/spike.c b/hw/riscv/spike.c index e68be00a5f..81cef0dcea 100644 --- a/hw/riscv/spike.c +++ b/hw/riscv/spike.c @@ -186,7 +186,7 @@ static void spike_board_init(MachineState *machine) mask_rom); if (machine->kernel_filename) { - riscv_load_kernel(machine->kernel_filename); + riscv_load_kernel(machine, machine->kernel_filename); } /* reset vector */ @@ -274,7 +274,7 @@ static void spike_v1_10_0_board_init(MachineState *machine) mask_rom); if (machine->kernel_filename) { - riscv_load_kernel(machine->kernel_filename); + riscv_load_kernel(machine, machine->kernel_filename); } /* reset vector */ @@ -359,7 +359,7 @@ static void spike_v1_09_1_board_init(MachineState *machine) mask_rom); if (machine->kernel_filename) { - riscv_load_kernel(machine->kernel_filename); + riscv_load_kernel(machine, machine->kernel_filename); } /* reset vector */ diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index 5f8c11471b..d3670b5a7c 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -380,8 +380,13 @@ static void riscv_virt_board_init(MachineState *machine) memory_region_add_subregion(system_memory, memmap[VIRT_MROM].base, mask_rom); + if (machine->firmware) { + riscv_load_firmware(machine->firmware); + } + if (machine->kernel_filename) { - uint64_t kernel_entry = riscv_load_kernel(machine->kernel_filename); + uint64_t kernel_entry = riscv_load_kernel(machine, + machine->kernel_filename); if (machine->initrd_filename) { hwaddr start; diff --git a/include/hw/riscv/boot.h b/include/hw/riscv/boot.h index f84fd6c2df..6f586939c7 100644 --- a/include/hw/riscv/boot.h +++ b/include/hw/riscv/boot.h @@ -20,7 +20,9 @@ #ifndef RISCV_BOOT_H #define RISCV_BOOT_H -target_ulong riscv_load_kernel(const char *kernel_filename); +target_ulong riscv_load_firmware(const char *firmware_filename); +target_ulong riscv_load_kernel(MachineState *machine, + const char *kernel_filename); hwaddr riscv_load_initrd(const char *filename, uint64_t mem_size, uint64_t kernel_entry, hwaddr *start); From patchwork Wed Jun 19 00:38:53 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 11003149 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6344A6C5 for ; Wed, 19 Jun 2019 00:55:30 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5165428936 for ; Wed, 19 Jun 2019 00:55:30 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 427B128987; Wed, 19 Jun 2019 00:55:30 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id E0B4228936 for ; Wed, 19 Jun 2019 00:55:29 +0000 (UTC) Received: from localhost ([::1]:34372 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hdOsr-0003bg-8E for patchwork-qemu-devel@patchwork.kernel.org; Tue, 18 Jun 2019 20:55:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48430) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hdOow-0007iJ-4g for qemu-devel@nongnu.org; Tue, 18 Jun 2019 20:51:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hdOf5-0003cT-Tr for qemu-devel@nongnu.org; Tue, 18 Jun 2019 20:41:16 -0400 Received: from esa4.hgst.iphmx.com ([216.71.154.42]:29347) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hdOf5-0003bv-M3; Tue, 18 Jun 2019 20:41:15 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1560904876; x=1592440876; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=/xJwoyzP22n+j8lVthpDqEtf8rQ3OZ10G8cgFJMoid4=; b=D+/gbWxwP+svDTZ1Jb83Ud0NPuf9GUFtFTQMgFK41Mq3PyDM2tPPNwA5 zG3kLozJYumOeouPDpqlf7ypceosW4jKk2SbsKKf3qOAytUuQdoZpCFL1 J4JaeSs4mWjjMQHO+cVqB/NEUtZprgRGqH5Oz76MtQ8+LgV4u/fJZnhfB NVDAlypTN/sCiiXN+mw0UkYc1oNRJ7vh8ygmc28QZijeBlOwjO5gIU5/n UIGXpupUBEnnRmhZ8CXdU44e8n0J6FX7bHEnavNJkyGzoK988QMrnfygk 8V2eV1eXwHbwmV1AtHHAw5d5d8XijZcCdYpjHxy9prii7Tib4wMxBajDH g==; X-IronPort-AV: E=Sophos;i="5.63,390,1557158400"; d="scan'208";a="110901048" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 19 Jun 2019 08:41:15 +0800 IronPort-SDR: /+4ohsGIH6rvpAkvWDeg1+JiDl+24Gsb1mydKZvDFII2Yz+J0lDfAlZr5o0sLhuidbF6r11LVm 9mZgCJCD+oJaEG22OUuDwGyFq/cLTxvMLwE8hVEpfTqBuAGsrrMLlEMc7Zsr4ttD7mkdTTY9Lm CnN0Yqcvhc37aI9/a1Q9nLR3buUfvQojV/+Sw/BvHmnsoO+4kVo/LR0rsl429Zh5NI3QWG69C6 GIpSBeRIS3d4OEdR6dXfHheLw0gwyOkE90f9lHgkBp8QcQiwkcqY7cgUyTL2LwoYU4sV/kq06K 8Q0QrjOSW/hYpUwj385SXaLy Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP; 18 Jun 2019 17:40:42 -0700 IronPort-SDR: KPjsN3T7iLs+cMKud0MjVFxyxg+IzQ0nqvUk04DaN6hvV0MDhV8bMWoj7HK1jBTJSzaY3ID2LR 5IoOR1LKnU4zAOLRydChv17ByGl+q90j+rcO1aYONAQO8ZelKCKP5/cUshqjU6NLXPDszclIHy 4eFB6TBPaGTQfUBKtbcd/GYF2VuzvaH8LxeKS8qj6QNf+zTpDxEInXP0u7sLuZZqmsw8ZnvymB zbo64a/7QL5BXGdwfvXnNzJ5/S9EOROjN1ZrrTCsV0GB7QwNmtQIFTcnh4wx9ztD8rOW4/DgKR R7k= Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.140]) by uls-op-cesaip02.wdc.com with ESMTP; 18 Jun 2019 17:41:14 -0700 From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Tue, 18 Jun 2019 17:38:53 -0700 Message-Id: <99fc8fe28f2a0493f248d50d32d4b1bc649536ab.1560904640.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 216.71.154.42 Subject: [Qemu-devel] [RFC v1 3/5] hw/riscv: Extend the kernel loading support X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Extend the RISC-V kernel loader to support uImage and Image files. A Linux kernel can now be booted with: qemu-system-riscv64 -machine virt -bios fw_jump.elf -kernel Image Signed-off-by: Alistair Francis --- hw/riscv/boot.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/hw/riscv/boot.c b/hw/riscv/boot.c index 392ca0cb2e..7f68035a3f 100644 --- a/hw/riscv/boot.c +++ b/hw/riscv/boot.c @@ -67,13 +67,22 @@ target_ulong riscv_load_kernel(MachineState *machine, uint64_t kernel_entry, kernel_high; if (load_elf(kernel_filename, NULL, kernel_translate, machine, - &kernel_entry, NULL, &kernel_high, - 0, EM_RISCV, 1, 0) < 0) { - error_report("could not load kernel '%s'", kernel_filename); - exit(1); + &kernel_entry, NULL, &kernel_high, 0, EM_RISCV, 1, 0) > 0) { + return kernel_entry; + } + + if (load_uimage_as(kernel_filename, &kernel_entry, NULL, NULL, + kernel_translate, machine, NULL) > 0) { + return kernel_entry; + } + + if (load_image_targphys_as(kernel_filename, KERNEL_BOOT_ADDRESS, + ram_size, NULL) > 0) { + return kernel_entry; } - return kernel_entry; + error_report("could not load kernel '%s'", kernel_filename); + exit(1); } hwaddr riscv_load_initrd(const char *filename, uint64_t mem_size, From patchwork Wed Jun 19 00:38:55 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 11003151 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 66CF06C5 for ; Wed, 19 Jun 2019 00:56:18 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4529428B2C for ; Wed, 19 Jun 2019 00:56:18 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 318BC28B30; Wed, 19 Jun 2019 00:56:18 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,LOTS_OF_MONEY,MAILING_LIST_MULTI,NORMAL_HTTP_TO_IP, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 5CAFA28B2C for ; Wed, 19 Jun 2019 00:56:02 +0000 (UTC) Received: from localhost ([::1]:34374 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hdOtN-00045M-Kb for patchwork-qemu-devel@patchwork.kernel.org; Tue, 18 Jun 2019 20:56:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48389) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hdOor-0007hj-UK for qemu-devel@nongnu.org; Tue, 18 Jun 2019 20:51:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hdOf9-0003fj-RL for qemu-devel@nongnu.org; Tue, 18 Jun 2019 20:41:38 -0400 Received: from esa4.hgst.iphmx.com ([216.71.154.42]:29347) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hdOf9-0003bv-1C; Tue, 18 Jun 2019 20:41:19 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1560904879; x=1592440879; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=la8oCsHjx/5xmGGU0TboRCtkeYLU5j0PT2/+pTyn4Dk=; b=lpRLltX7A2WIX6DjOrYU9dhybDIdzXKf8/IK3DKmMQq89d0Z2zQQSP3f d8VkOs6/ct23ZWygGTIhvd09XXTZZNJf9K1+Y/wHxzr8YxS/jrS3jvpxq 2m2k+wuYqF/JL2kzARIZ0IYC2F/wap+jtC208GtrDvpSEMXudXxVfOc/I eONKquGAZ300B78rHz5m2kYiJoTGwnR/GskFXFhE2IURladTOkw3AN6+u QZSHQWVwH6iOGFesmqX4XUQsriKu6ldKLrvmfho3APgeBATaPbNOVP3lc stBA7Q39KkeEy/Ec8Ft74G7sduoSAYK8OfeXdxkXfP0F5Nh3w9bJxL5Ql w==; X-IronPort-AV: E=Sophos;i="5.63,390,1557158400"; d="scan'208";a="110901049" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 19 Jun 2019 08:41:18 +0800 IronPort-SDR: xwY1wfLt9roBmfn8o/XKAPCfpMDZsw6excuxBpKcK3oXJggZbz8L1ZFte2dcJy39znO//oO4xz gxLgwkKMikIBFWZzJ+ryUMbXV+DETwqcO2OD/0XwjAng/Mg+9n50Q7zZ7TYdEgSyuPGeLol9Q1 UrMTubUcuCudH9devWeEcCcP5Z6XKs8SZD7scMn2e/WSer3qt/dxpYW+javYrF3C0GPeED44UK IQfRpJiPnGSbGldjnVMorImsrArKOhc/6ZCHprtO3N6dQ8N5ONIcD7Nek1doMvB7tg5dyzO0tZ 9GAYEe/RQvi5kUQMVm6yhN1X Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP; 18 Jun 2019 17:40:46 -0700 IronPort-SDR: 4hAtunDc2lo19/lgiQwTGTv4H9BH4tV570NWdVxsmE96geerrXDp43qzO/iTb0D2sZI7KjHGm6 D+7IprStDx0rM+x/2wToUeOriSsC+fAu8tOz/+GFt+vvZHXdJPr5i3YQXYE/W9pESv7Xkr/9Lj Y5ldkkJ3f6yxYacKL3a8UiLhlVjPnfmRc2L1UqrQDyIyZVweOyVFSYbxOD1WWCM0KwbvALFSVx +vs1gQIrNR4gxqvpG8fQl/GUpLeas/nHK79P/erFc6oUfOZ4hXB/ULRtJwF7RzzPjAG7Gslb3B 1PI= Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.140]) by uls-op-cesaip02.wdc.com with ESMTP; 18 Jun 2019 17:41:17 -0700 From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Tue, 18 Jun 2019 17:38:55 -0700 Message-Id: <2fd2fa66cf561d8041f75351c28ed025828c56ff.1560904640.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 216.71.154.42 Subject: [Qemu-devel] [RFC v1 4/5] roms: Add OpenSBI version 0.3 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Add OpenSBI version 0.3 as a git submodule and as a prebult binary. Signed-off-by: Alistair Francis --- .gitmodules | 3 +++ Makefile | 3 ++- configure | 1 + pc-bios/opensbi-riscv32-fw_jump.elf | Bin 0 -> 197988 bytes pc-bios/opensbi-riscv64-fw_jump.elf | Bin 0 -> 200192 bytes roms/Makefile | 17 +++++++++++++++++ roms/opensbi | 1 + 7 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 pc-bios/opensbi-riscv32-fw_jump.elf create mode 100644 pc-bios/opensbi-riscv64-fw_jump.elf create mode 160000 roms/opensbi diff --git a/.gitmodules b/.gitmodules index 2857eec763..7a10e72e09 100644 --- a/.gitmodules +++ b/.gitmodules @@ -55,3 +55,6 @@ [submodule "slirp"] path = slirp url = https://git.qemu.org/git/libslirp.git +[submodule "roms/opensbi"] + path = roms/opensbi + url = https://github.com/riscv/opensbi.git diff --git a/Makefile b/Makefile index cfb18f1525..fb6638f9ec 100644 --- a/Makefile +++ b/Makefile @@ -761,7 +761,8 @@ palcode-clipper \ u-boot.e500 u-boot-sam460-20100605.bin \ qemu_vga.ndrv \ edk2-licenses.txt \ -hppa-firmware.img +hppa-firmware.img \ +opensbi-riscv32-fw_jump.elf opensbi-riscv64-fw_jump.elf DESCS=50-edk2-i386-secure.json 50-edk2-x86_64-secure.json \ 60-edk2-aarch64.json 60-edk2-arm.json 60-edk2-i386.json 60-edk2-x86_64.json diff --git a/configure b/configure index b091b82cb3..75372a7b4f 100755 --- a/configure +++ b/configure @@ -7936,6 +7936,7 @@ for bios_file in \ $source_path/pc-bios/*.rom \ $source_path/pc-bios/*.dtb \ $source_path/pc-bios/*.img \ + $source_path/pc-bios/*.elf \ $source_path/pc-bios/openbios-* \ $source_path/pc-bios/u-boot.* \ $source_path/pc-bios/edk2-*.fd.bz2 \ diff --git a/pc-bios/opensbi-riscv32-fw_jump.elf b/pc-bios/opensbi-riscv32-fw_jump.elf new file mode 100644 index 0000000000000000000000000000000000000000..e526b03eaad419953831f2114ea3aa0fdcc1924b GIT binary patch literal 197988 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 literal 0 HcmV?d00001 diff --git a/pc-bios/opensbi-riscv64-fw_jump.elf b/pc-bios/opensbi-riscv64-fw_jump.elf new file mode 100644 index 0000000000000000000000000000000000000000..f5926c1d80d8b82be68ac0e194b475e410d8b5ac GIT binary patch literal 200192 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 kg7InoSIz$zolCeM-_}WV(Tp93@Rd4^{h@ X-Patchwork-Id: 11003143 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D90A16C5 for ; Wed, 19 Jun 2019 00:52:43 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C7B4328B30 for ; Wed, 19 Jun 2019 00:52:43 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BBFC528B36; Wed, 19 Jun 2019 00:52:43 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 9932A28B2C for ; Wed, 19 Jun 2019 00:52:42 +0000 (UTC) Received: from localhost ([::1]:34348 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hdOq8-00012W-Fj for patchwork-qemu-devel@patchwork.kernel.org; Tue, 18 Jun 2019 20:52:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48430) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hdOou-0007iJ-NE for qemu-devel@nongnu.org; Tue, 18 Jun 2019 20:51:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hdOfB-0003h2-Ez for qemu-devel@nongnu.org; Tue, 18 Jun 2019 20:41:25 -0400 Received: from esa4.hgst.iphmx.com ([216.71.154.42]:29347) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hdOfB-0003bv-7I; Tue, 18 Jun 2019 20:41:21 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1560904882; x=1592440882; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=g+DlYUF0KXQmOfcWFncWarLKZPO22IikCZf0/MBOpR8=; b=Xq8nULFYlGtalKu92iOn3ts7iLfbwq36cq1z/pTH+in/xySwiUu4/HwG aCG0eUxHVXioDyGgp01/Kt72Ay+wb5B8KU2Gfcuf9RzY7+fcyjYI/sjih bnLExxaJJgfzFvA/TUb8OqteN3T7QfppJNB92b8u+p3Isl9kUsNd8q1Ux X8fj1ynPdMM2cd4HtDFtTaXmVmD1/S2eszrsja1swpPF6PileSil9RE5K Ju8IAYRYOidgNaxqSQq1GWucdcFbYrQh4lGLKCuFRj6EnoNz1DWkRYDrC VwyC6rusBZmr8jarNOndH9AkuHodXHN6TnOe/yBg5nykapDcvpBP0Fobg Q==; X-IronPort-AV: E=Sophos;i="5.63,390,1557158400"; d="scan'208";a="110901050" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 19 Jun 2019 08:41:21 +0800 IronPort-SDR: XGOi74afuiC99Kt4HJOmDP+3XxTzETrdAgC0GtgzgGHLBDXX5K+AVhIEQpTbEXGHtguMUoJyXD N+JOu0yBSdtmuSb0gholp+Eue8YBLj3ixoXptVLkR9I4i1fCSa38/Y0iJ1bvzIZCr9lM+fwmBV ksMUF1ISSZ75QglSD1fY1pK8YLalppLDsP3Z/0TKgcsZ4su++slFKmtzztm2QCMm2W4HI+VWMo dI20YJxq0n7mytKLLfzCy26OS2eM/VWQ8kqTqVYIiAFSRBD4rxSU4ieXP8dUs5aOWNFzXxEthv KrXHMtf5QDn2gjmnber9HCKW Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP; 18 Jun 2019 17:40:48 -0700 IronPort-SDR: Yl4uYO6KobM0PvSMbhx+JP+dRA20CLvDsu3pSUZyX1tsyc50odeXspd790VXFNpx7FcoJMQvVI a5ns4UpcJw8LpsB3YnGsGaQw+i+aE9JrK+kdvQE6F5p7w9eWx/RFMU+UrI9V6BaNVw1PVMqSC/ 2OwRmM2IxV1J45ACxIhCc+xkFPFhMwP9w1fGJx9hyMHIr1yzGEyJlD8Kv5HNbbY2MkAuedONI8 ZcmjN+DUF+0TDgK87OIOFaH+xwOLHmuGdg7wIP/IJmL83p4gHTOFs/pGMGwY2gGGlGhkQWg37O jD4= Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.140]) by uls-op-cesaip02.wdc.com with ESMTP; 18 Jun 2019 17:41:20 -0700 From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Tue, 18 Jun 2019 17:38:58 -0700 Message-Id: <3d7dd8bc94dbfddf0c01cfc7f3bebc937d1e6894.1560904640.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 216.71.154.42 Subject: [Qemu-devel] [RFC v1 5/5] hw/riscv: Load OpenSBI as the default firmware X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP If the user hasn't specified a firmware to load (with -bios) or specified no bios (with -bios none) then load OpenSBI by default. This allows users to boot a RISC-V kernel with just -kernel. Signed-off-by: Alistair Francis --- hw/riscv/boot.c | 28 ++++++++++++++++++++++++++++ hw/riscv/sifive_u.c | 4 +--- hw/riscv/virt.c | 4 +--- include/hw/riscv/boot.h | 1 + 4 files changed, 31 insertions(+), 6 deletions(-) diff --git a/hw/riscv/boot.c b/hw/riscv/boot.c index 7f68035a3f..5f021591ed 100644 --- a/hw/riscv/boot.c +++ b/hw/riscv/boot.c @@ -18,6 +18,7 @@ */ #include "qemu/osdep.h" +#include "qemu-common.h" #include "qemu/units.h" #include "qemu/error-report.h" #include "exec/cpu-defs.h" @@ -32,6 +33,12 @@ # define KERNEL_BOOT_ADDRESS 0x80200000 #endif +#if defined(TARGET_RISCV32) +# define BIOS_FILENAME "opensbi-riscv32-fw_jump.elf" +#else +# define BIOS_FILENAME "opensbi-riscv64-fw_jump.elf" +#endif + static uint64_t kernel_translate(void *opaque, uint64_t addr) { MachineState *machine = opaque; @@ -47,6 +54,27 @@ static uint64_t kernel_translate(void *opaque, uint64_t addr) } } +void riscv_find_and_load_firmware(MachineState *machine) +{ + char *firmware_filename; + + if (!machine->firmware) { + /* The user didn't specify a firmware, default to OpenSBI */ + firmware_filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, BIOS_FILENAME); + } else { + firmware_filename = machine->firmware; + } + + if (strcmp(firmware_filename, "none")) { + /* If not "none" load the firmware */ + riscv_load_firmware(firmware_filename); + } + + if (!machine->firmware) { + g_free(firmware_filename); + } +} + target_ulong riscv_load_firmware(const char *firmware_filename) { uint64_t firmware_entry, firmware_start, firmware_end; diff --git a/hw/riscv/sifive_u.c b/hw/riscv/sifive_u.c index 03a6c64d04..77666d0f4d 100644 --- a/hw/riscv/sifive_u.c +++ b/hw/riscv/sifive_u.c @@ -266,9 +266,7 @@ static void riscv_sifive_u_init(MachineState *machine) /* create device tree */ create_fdt(s, memmap, machine->ram_size, machine->kernel_cmdline); - if (machine->firmware) { - riscv_load_firmware(machine->firmware); - } + riscv_find_and_load_firmware(machine); if (machine->kernel_filename) { riscv_load_kernel(machine, machine->kernel_filename); diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index d3670b5a7c..2a7e850666 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -380,9 +380,7 @@ static void riscv_virt_board_init(MachineState *machine) memory_region_add_subregion(system_memory, memmap[VIRT_MROM].base, mask_rom); - if (machine->firmware) { - riscv_load_firmware(machine->firmware); - } + riscv_find_and_load_firmware(machine); if (machine->kernel_filename) { uint64_t kernel_entry = riscv_load_kernel(machine, diff --git a/include/hw/riscv/boot.h b/include/hw/riscv/boot.h index 6f586939c7..df2e2480e6 100644 --- a/include/hw/riscv/boot.h +++ b/include/hw/riscv/boot.h @@ -20,6 +20,7 @@ #ifndef RISCV_BOOT_H #define RISCV_BOOT_H +void riscv_find_and_load_firmware(MachineState *machine); target_ulong riscv_load_firmware(const char *firmware_filename); target_ulong riscv_load_kernel(MachineState *machine, const char *kernel_filename);