From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47530) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bKRZ3-0004DO-Uq for qemu-devel@nongnu.org; Tue, 05 Jul 2016 10:43:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bKRZ0-0006xX-On for qemu-devel@nongnu.org; Tue, 05 Jul 2016 10:43:05 -0400 From: Laurent Vivier Date: Tue, 5 Jul 2016 16:42:37 +0200 Message-Id: <1467729757-12441-1-git-send-email-lvivier@redhat.com> Subject: [Qemu-devel] [PATCH RFC] spapr: by-pass SLOF when -kernel is provided List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: David Gibson Cc: qemu-ppc@nongnu.org, qemu-devel@nongnu.org, "Richard W.M. Jones" , Thomas Huth , Andrew Jones , Laurent Vivier As device-tree is now fully built by QEMU, we don't need SLOF anymore if the kernel is provided on the command line. In this case, don't load SLOF and boot directly into the kernel. This saves at least 5 seconds on the boot sequence. Signed-off-by: Laurent Vivier --- hw/ppc/spapr.c | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 7f33a1b..bbdb21d 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -1219,8 +1219,11 @@ static void ppc_spapr_reset(void) first_ppc_cpu->env.gpr[3] = spapr->fdt_addr; first_ppc_cpu->env.gpr[5] = 0; first_cpu->halted = 0; - first_ppc_cpu->env.nip = SPAPR_ENTRY_POINT; - + if (machine->kernel_filename) { + first_ppc_cpu->env.nip = KERNEL_LOAD_ADDR; + } else { + first_ppc_cpu->env.nip = SPAPR_ENTRY_POINT; + } } static void spapr_create_nvram(sPAPRMachineState *spapr) @@ -2023,23 +2026,23 @@ static void ppc_spapr_init(MachineState *machine) initrd_base = 0; initrd_size = 0; } + } else { + if (bios_name == NULL) { + bios_name = FW_FILE_NAME; + } + filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name); + if (!filename) { + error_report("Could not find LPAR firmware '%s'", bios_name); + exit(1); + } + fw_size = load_image_targphys(filename, 0, FW_MAX_SIZE); + if (fw_size <= 0) { + error_report("Could not load LPAR firmware '%s'", filename); + exit(1); + } + g_free(filename); } - if (bios_name == NULL) { - bios_name = FW_FILE_NAME; - } - filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name); - if (!filename) { - error_report("Could not find LPAR firmware '%s'", bios_name); - exit(1); - } - fw_size = load_image_targphys(filename, 0, FW_MAX_SIZE); - if (fw_size <= 0) { - error_report("Could not load LPAR firmware '%s'", filename); - exit(1); - } - g_free(filename); - /* FIXME: Should register things through the MachineState's qdev * interface, this is a legacy from the sPAPREnvironment structure * which predated MachineState but had a similar function */ -- 2.5.5