From patchwork Fri Jun 21 08:24:16 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Huth X-Patchwork-Id: 13707089 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 69F34C2BB85 for ; Fri, 21 Jun 2024 08:25:48 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sKZZd-0008OK-GF; Fri, 21 Jun 2024 04:24:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sKZZb-0008Nv-UY for qemu-devel@nongnu.org; Fri, 21 Jun 2024 04:24:43 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sKZZa-0003IK-MH for qemu-devel@nongnu.org; Fri, 21 Jun 2024 04:24:43 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1718958282; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=W55o4SDbJUzpSKUuR14H+OXFuIu/a+8ZtKB6C82JOHc=; b=cjW/OQ+me/R3M60u0vtjpbN6y2n1yKArhFM8GOQ3WXM55bcz+QBqa8gQ+7XUTATnHR8Rhz txPPwvEw3zVCtc5lWueGrHLc7fp69Z7kPHNKNxSiDWULvpmXEMQ6lcdk+tue94imk1nvaM +oi9EahEChPruSdWi9S+JOyJSocRFZI= Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-146-T4sMI9peNZK6WixXvIlrMg-1; Fri, 21 Jun 2024 04:24:37 -0400 X-MC-Unique: T4sMI9peNZK6WixXvIlrMg-1 Received: from mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.15]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id C69CA1956095; Fri, 21 Jun 2024 08:24:35 +0000 (UTC) Received: from thuth-p1g4.redhat.com (unknown [10.39.192.213]) by mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id D7AB31955E83; Fri, 21 Jun 2024 08:24:29 +0000 (UTC) From: Thomas Huth To: qemu-s390x@nongnu.org, Christian Borntraeger , Jared Rossi Cc: qemu-devel@nongnu.org, Eric Farman , Claudio Imbrenda , "Collin L . Walling" , Janosch Frank , "Jason J . Herne" , Marc Hartmayer Subject: [PATCH 1/7] pc-bios/s390-ccw: Remove duplicated LDFLAGS Date: Fri, 21 Jun 2024 10:24:16 +0200 Message-ID: <20240621082422.136217-2-thuth@redhat.com> In-Reply-To: <20240621082422.136217-1-thuth@redhat.com> References: <20240621082422.136217-1-thuth@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.15 Received-SPF: pass client-ip=170.10.133.124; envelope-from=thuth@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 11 X-Spam_score: 1.1 X-Spam_bar: + X-Spam_report: (1.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.152, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org The -Wl,-pie and -nostdlib flags are added to LDFLAGS twice. Merge the two lines to get rid of the duplicates. Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/Makefile | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pc-bios/s390-ccw/Makefile b/pc-bios/s390-ccw/Makefile index acfcd1e71a..6207911b53 100644 --- a/pc-bios/s390-ccw/Makefile +++ b/pc-bios/s390-ccw/Makefile @@ -40,7 +40,7 @@ EXTRA_CFLAGS += -ffreestanding -fno-delete-null-pointer-checks -fno-common -fPIE EXTRA_CFLAGS += -fwrapv -fno-strict-aliasing -fno-asynchronous-unwind-tables EXTRA_CFLAGS += -msoft-float EXTRA_CFLAGS += -std=gnu99 -LDFLAGS += -Wl,-pie -nostdlib +LDFLAGS += -Wl,-pie -nostdlib -z noexecstack cc-test = $(CC) -Werror $1 -c -o /dev/null -xc /dev/null >/dev/null 2>/dev/null cc-option = if $(call cc-test, $1); then \ @@ -55,8 +55,6 @@ config-cc.mak: Makefile $(call cc-option,-march=z900,-march=z10)) 3> config-cc.mak -include config-cc.mak -LDFLAGS += -Wl,-pie -nostdlib -z noexecstack - build-all: s390-ccw.img s390-netboot.img s390-ccw.elf: $(OBJECTS) From patchwork Fri Jun 21 08:24:17 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Huth X-Patchwork-Id: 13707086 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A1335C27C4F for ; Fri, 21 Jun 2024 08:25:36 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sKZZj-0008PS-B2; Fri, 21 Jun 2024 04:24:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sKZZg-0008Ox-LM for qemu-devel@nongnu.org; Fri, 21 Jun 2024 04:24:48 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sKZZf-0003Ix-BH for qemu-devel@nongnu.org; Fri, 21 Jun 2024 04:24:48 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1718958286; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=gJAuN/MJIKkZkJLsxF/L2OIAthjDl8A7pQXerPTdKjA=; b=atlNEupbgrRK1JVC85Y16H2rySjS6Mj8NFbUuBMi0l10O4vfBhOtyljlfHwSFWBQgi6rAa wurTj0IdbXKcl0PVrJYsxZlTnosW37GPlB5w6Bc0wo9CY24XAF3YH1BcTH0UVJt0VHjK88 JH1Vf/bG5a/XvOCtsjiky3vHBZ8rjqA= Received: from mx-prod-mc-02.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-468-cx6WTd_VPQmMKdokVqEBSQ-1; Fri, 21 Jun 2024 04:24:41 -0400 X-MC-Unique: cx6WTd_VPQmMKdokVqEBSQ-1 Received: from mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.15]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 086E61955E87; Fri, 21 Jun 2024 08:24:40 +0000 (UTC) Received: from thuth-p1g4.redhat.com (unknown [10.39.192.213]) by mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 8CF911956087; Fri, 21 Jun 2024 08:24:36 +0000 (UTC) From: Thomas Huth To: qemu-s390x@nongnu.org, Christian Borntraeger , Jared Rossi Cc: qemu-devel@nongnu.org, Eric Farman , Claudio Imbrenda , "Collin L . Walling" , Janosch Frank , "Jason J . Herne" , Marc Hartmayer Subject: [PATCH 2/7] hw/s390x/ipl: Provide more memory to the s390-ccw.img firmware Date: Fri, 21 Jun 2024 10:24:17 +0200 Message-ID: <20240621082422.136217-3-thuth@redhat.com> In-Reply-To: <20240621082422.136217-1-thuth@redhat.com> References: <20240621082422.136217-1-thuth@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.15 Received-SPF: pass client-ip=170.10.133.124; envelope-from=thuth@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 11 X-Spam_score: 1.1 X-Spam_bar: + X-Spam_report: (1.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.152, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org We are going to link the SLOF libc into the s390-ccw.img, and this libc needs more memory for providing space for malloc() and friends. Thus bump the memory size that we reserve for the bios to 3 MiB instead of only 2 MiB. While we're at it, add a proper check that there is really enough memory assigned to the machine before blindly using it. Signed-off-by: Thomas Huth --- hw/s390x/ipl.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c index e934bf89d1..9362de0b6f 100644 --- a/hw/s390x/ipl.c +++ b/hw/s390x/ipl.c @@ -45,6 +45,7 @@ #define INITRD_PARM_START 0x010408UL #define PARMFILE_START 0x001000UL #define ZIPL_IMAGE_START 0x009000UL +#define BIOS_MAX_SIZE 0x300000UL #define IPL_PSW_MASK (PSW_MASK_32 | PSW_MASK_64) static bool iplb_extended_needed(void *opaque) @@ -144,7 +145,14 @@ static void s390_ipl_realize(DeviceState *dev, Error **errp) * even if an external kernel has been defined. */ if (!ipl->kernel || ipl->enforce_bios) { - uint64_t fwbase = (MIN(ms->ram_size, 0x80000000U) - 0x200000) & ~0xffffUL; + uint64_t fwbase; + + if (ms->ram_size < BIOS_MAX_SIZE) { + error_setg(errp, "not enough RAM to load the BIOS file"); + return; + } + + fwbase = (MIN(ms->ram_size, 0x80000000U) - BIOS_MAX_SIZE) & ~0xffffUL; bios_filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, ipl->firmware); if (bios_filename == NULL) { From patchwork Fri Jun 21 08:24:18 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Huth X-Patchwork-Id: 13707091 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A02E9C2BA1A for ; Fri, 21 Jun 2024 08:26:07 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sKZZo-0008Qv-H5; Fri, 21 Jun 2024 04:24:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sKZZm-0008QZ-UH for qemu-devel@nongnu.org; Fri, 21 Jun 2024 04:24:54 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sKZZk-0003LT-SR for qemu-devel@nongnu.org; Fri, 21 Jun 2024 04:24:54 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1718958292; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=t5bGAyhiRsrXgPNb1doMR/Q+cf242OIFPtw4sRJHrvQ=; b=OnY5oxs4s7ePDBl8paI1EaF5gaO3H89d0MDGzy1ByiXKnC8CSQnRzDOQsUtC60MO/ZPcft NWigQpfV8sVtjHYM4LYZ8Idwr5c6gLjsekb/tV9VVUS9+oLbtmdMTzCvRb+I7aQDGikBkL 9gYbEnWeaMuTMQjbBkf7OYPztOgQjSU= Received: from mx-prod-mc-04.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-26-1x_fgTVAM1qlA2DGml31GA-1; Fri, 21 Jun 2024 04:24:46 -0400 X-MC-Unique: 1x_fgTVAM1qlA2DGml31GA-1 Received: from mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.15]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 3D9C719560A2; Fri, 21 Jun 2024 08:24:45 +0000 (UTC) Received: from thuth-p1g4.redhat.com (unknown [10.39.192.213]) by mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id AE9ED1955E80; Fri, 21 Jun 2024 08:24:40 +0000 (UTC) From: Thomas Huth To: qemu-s390x@nongnu.org, Christian Borntraeger , Jared Rossi Cc: qemu-devel@nongnu.org, Eric Farman , Claudio Imbrenda , "Collin L . Walling" , Janosch Frank , "Jason J . Herne" , Marc Hartmayer Subject: [PATCH 3/7] pc-bios/s390-ccw: Use the libc from SLOF for the main s390-ccw.img binary, too Date: Fri, 21 Jun 2024 10:24:18 +0200 Message-ID: <20240621082422.136217-4-thuth@redhat.com> In-Reply-To: <20240621082422.136217-1-thuth@redhat.com> References: <20240621082422.136217-1-thuth@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.15 Received-SPF: pass client-ip=170.10.133.124; envelope-from=thuth@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 11 X-Spam_score: 1.1 X-Spam_bar: + X-Spam_report: (1.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.152, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org We are already using the libc from SLOF for the s390-netboot.img, and this libc implementation is way more complete and accurate than the simple implementation that we currently use for the s390-ccw.img binary. Since we are now always assuming that the SLOF submodule is available when building the s390-ccw bios (see commit bf6903f6944f), we can drop the simple implementation and use the SLOF libc for the s390-ccw.img binary, too. Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/netboot.mak | 3 -- pc-bios/s390-ccw/libc.h | 89 -------------------------------- pc-bios/s390-ccw/s390-ccw.h | 7 +-- pc-bios/s390-ccw/bootmap.c | 2 +- pc-bios/s390-ccw/cio.c | 2 +- pc-bios/s390-ccw/dasd-ipl.c | 2 +- pc-bios/s390-ccw/jump2ipl.c | 2 +- pc-bios/s390-ccw/libc.c | 88 ------------------------------- pc-bios/s390-ccw/main.c | 5 +- pc-bios/s390-ccw/menu.c | 25 ++++----- pc-bios/s390-ccw/sclp.c | 2 +- pc-bios/s390-ccw/virtio-blkdev.c | 1 - pc-bios/s390-ccw/virtio-scsi.c | 2 +- pc-bios/s390-ccw/virtio.c | 2 +- pc-bios/s390-ccw/Makefile | 15 ++++-- 15 files changed, 34 insertions(+), 213 deletions(-) delete mode 100644 pc-bios/s390-ccw/libc.h delete mode 100644 pc-bios/s390-ccw/libc.c diff --git a/pc-bios/s390-ccw/netboot.mak b/pc-bios/s390-ccw/netboot.mak index 046aa35587..d2b3d8ee74 100644 --- a/pc-bios/s390-ccw/netboot.mak +++ b/pc-bios/s390-ccw/netboot.mak @@ -1,9 +1,6 @@ -SLOF_DIR := $(SRC_PATH)/../../roms/SLOF - NETOBJS := start.o sclp.o cio.o virtio.o virtio-net.o jump2ipl.o netmain.o -LIBC_INC := -nostdinc -I$(SLOF_DIR)/lib/libc/include LIBNET_INC := -I$(SLOF_DIR)/lib/libnet NETLDFLAGS := $(LDFLAGS) -Wl,-Ttext=0x7800000 diff --git a/pc-bios/s390-ccw/libc.h b/pc-bios/s390-ccw/libc.h deleted file mode 100644 index bcdc45732d..0000000000 --- a/pc-bios/s390-ccw/libc.h +++ /dev/null @@ -1,89 +0,0 @@ -/* - * libc-style definitions and functions - * - * Copyright (c) 2013 Alexander Graf - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - */ - -#ifndef S390_CCW_LIBC_H -#define S390_CCW_LIBC_H - -typedef unsigned long size_t; -typedef int bool; -typedef unsigned char uint8_t; -typedef unsigned short uint16_t; -typedef unsigned int uint32_t; -typedef unsigned long long uint64_t; - -static inline void *memset(void *s, int c, size_t n) -{ - size_t i; - unsigned char *p = s; - - for (i = 0; i < n; i++) { - p[i] = c; - } - - return s; -} - -static inline void *memcpy(void *s1, const void *s2, size_t n) -{ - uint8_t *dest = s1; - const uint8_t *src = s2; - size_t i; - - for (i = 0; i < n; i++) { - dest[i] = src[i]; - } - - return s1; -} - -static inline int memcmp(const void *s1, const void *s2, size_t n) -{ - size_t i; - const uint8_t *p1 = s1, *p2 = s2; - - for (i = 0; i < n; i++) { - if (p1[i] != p2[i]) { - return p1[i] > p2[i] ? 1 : -1; - } - } - - return 0; -} - -static inline size_t strlen(const char *str) -{ - size_t i; - for (i = 0; *str; i++) { - str++; - } - return i; -} - -static inline char *strcat(char *dest, const char *src) -{ - int i; - char *dest_end = dest + strlen(dest); - - for (i = 0; i <= strlen(src); i++) { - dest_end[i] = src[i]; - } - return dest; -} - -static inline int isdigit(int c) -{ - return (c >= '0') && (c <= '9'); -} - -uint64_t atoui(const char *str); -char *uitoa(uint64_t num, char *str, size_t len); - -#endif diff --git a/pc-bios/s390-ccw/s390-ccw.h b/pc-bios/s390-ccw/s390-ccw.h index c977a52b50..b911ebe6d2 100644 --- a/pc-bios/s390-ccw/s390-ccw.h +++ b/pc-bios/s390-ccw/s390-ccw.h @@ -13,6 +13,10 @@ /* #define DEBUG */ +#include +#include +#include + typedef unsigned char u8; typedef unsigned short u16; typedef unsigned int u32; @@ -26,9 +30,6 @@ typedef unsigned long long u64; #define EBUSY 2 #define ENODEV 3 -#ifndef NULL -#define NULL 0 -#endif #ifndef MIN #define MIN(a, b) (((a) < (b)) ? (a) : (b)) #endif diff --git a/pc-bios/s390-ccw/bootmap.c b/pc-bios/s390-ccw/bootmap.c index a2137449dc..bf85a9c5fe 100644 --- a/pc-bios/s390-ccw/bootmap.c +++ b/pc-bios/s390-ccw/bootmap.c @@ -8,7 +8,7 @@ * directory. */ -#include "libc.h" +#include #include "s390-ccw.h" #include "s390-arch.h" #include "bootmap.h" diff --git a/pc-bios/s390-ccw/cio.c b/pc-bios/s390-ccw/cio.c index 83ca27ab41..11f0387ff4 100644 --- a/pc-bios/s390-ccw/cio.c +++ b/pc-bios/s390-ccw/cio.c @@ -11,7 +11,7 @@ * directory. */ -#include "libc.h" +#include #include "s390-ccw.h" #include "s390-arch.h" #include "helper.h" diff --git a/pc-bios/s390-ccw/dasd-ipl.c b/pc-bios/s390-ccw/dasd-ipl.c index 254bb1a15e..6e895abb44 100644 --- a/pc-bios/s390-ccw/dasd-ipl.c +++ b/pc-bios/s390-ccw/dasd-ipl.c @@ -8,7 +8,7 @@ * directory. */ -#include "libc.h" +#include #include "s390-ccw.h" #include "s390-arch.h" #include "dasd-ipl.h" diff --git a/pc-bios/s390-ccw/jump2ipl.c b/pc-bios/s390-ccw/jump2ipl.c index 78f5f46533..6166061045 100644 --- a/pc-bios/s390-ccw/jump2ipl.c +++ b/pc-bios/s390-ccw/jump2ipl.c @@ -6,7 +6,7 @@ * directory. */ -#include "libc.h" +#include #include "s390-ccw.h" #include "s390-arch.h" diff --git a/pc-bios/s390-ccw/libc.c b/pc-bios/s390-ccw/libc.c deleted file mode 100644 index 3187923950..0000000000 --- a/pc-bios/s390-ccw/libc.c +++ /dev/null @@ -1,88 +0,0 @@ -/* - * libc-style definitions and functions - * - * Copyright 2018 IBM Corp. - * Author(s): Collin L. Walling - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - */ - -#include "libc.h" -#include "s390-ccw.h" - -/** - * atoui: - * @str: the string to be converted. - * - * Given a string @str, convert it to an integer. Leading spaces are - * ignored. Any other non-numerical value will terminate the conversion - * and return 0. This function only handles numbers between 0 and - * UINT64_MAX inclusive. - * - * Returns: an integer converted from the string @str, or the number 0 - * if an error occurred. - */ -uint64_t atoui(const char *str) -{ - int val = 0; - - if (!str || !str[0]) { - return 0; - } - - while (*str == ' ') { - str++; - } - - while (*str) { - if (!isdigit(*(unsigned char *)str)) { - break; - } - val = val * 10 + *str - '0'; - str++; - } - - return val; -} - -/** - * uitoa: - * @num: an integer (base 10) to be converted. - * @str: a pointer to a string to store the conversion. - * @len: the length of the passed string. - * - * Given an integer @num, convert it to a string. The string @str must be - * allocated beforehand. The resulting string will be null terminated and - * returned. This function only handles numbers between 0 and UINT64_MAX - * inclusive. - * - * Returns: the string @str of the converted integer @num - */ -char *uitoa(uint64_t num, char *str, size_t len) -{ - long num_idx = 1; /* account for NUL */ - uint64_t tmp = num; - - IPL_assert(str != NULL, "uitoa: no space allocated to store string"); - - /* Count indices of num */ - while ((tmp /= 10) != 0) { - num_idx++; - } - - /* Check if we have enough space for num and NUL */ - IPL_assert(len > num_idx, "uitoa: array too small for conversion"); - - str[num_idx--] = '\0'; - - /* Convert int to string */ - while (num_idx >= 0) { - str[num_idx--] = num % 10 + '0'; - num /= 10; - } - - return str; -} diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c index 5506798098..b8bf9f5fcc 100644 --- a/pc-bios/s390-ccw/main.c +++ b/pc-bios/s390-ccw/main.c @@ -8,7 +8,8 @@ * directory. */ -#include "libc.h" +#include +#include #include "helper.h" #include "s390-arch.h" #include "s390-ccw.h" @@ -50,7 +51,7 @@ void write_iplb_location(void) unsigned int get_loadparm_index(void) { - return atoui(loadparm_str); + return atoi(loadparm_str); } static int is_dev_possibly_bootable(int dev_no, int sch_no) diff --git a/pc-bios/s390-ccw/menu.c b/pc-bios/s390-ccw/menu.c index d601952d3e..eab64f6357 100644 --- a/pc-bios/s390-ccw/menu.c +++ b/pc-bios/s390-ccw/menu.c @@ -9,7 +9,10 @@ * directory. */ -#include "libc.h" +#include +#include +#include +#include #include "s390-ccw.h" #include "sclp.h" #include "s390-time.h" @@ -140,20 +143,17 @@ static int get_index(void) } } - return atoui(buf); + return atoi(buf); } static void boot_menu_prompt(bool retry) { - char tmp[11]; - if (retry) { sclp_print("\nError: undefined configuration" "\nPlease choose:\n"); } else if (timeout > 0) { - sclp_print("Please choose (default will boot in "); - sclp_print(uitoa(timeout / 1000, tmp, sizeof(tmp))); - sclp_print(" seconds):\n"); + printf("Please choose (default will boot in %d seconds):\n", + (int)(timeout / 1000)); } else { sclp_print("Please choose:\n"); } @@ -163,7 +163,6 @@ static int get_boot_index(bool *valid_entries) { int boot_index; bool retry = false; - char tmp[5]; do { boot_menu_prompt(retry); @@ -172,8 +171,7 @@ static int get_boot_index(bool *valid_entries) } while (boot_index < 0 || boot_index >= MAX_BOOT_ENTRIES || !valid_entries[boot_index]); - sclp_print("\nBooting entry #"); - sclp_print(uitoa(boot_index, tmp, sizeof(tmp))); + printf("\nBooting entry #%d", boot_index); return boot_index; } @@ -189,7 +187,7 @@ static int zipl_print_entry(const char *data, size_t len) sclp_print(buf); - return buf[0] == ' ' ? atoui(buf + 1) : atoui(buf); + return buf[0] == ' ' ? atoi(buf + 1) : atoi(buf); } int menu_get_zipl_boot_index(const char *menu_data) @@ -231,7 +229,6 @@ int menu_get_zipl_boot_index(const char *menu_data) int menu_get_enum_boot_index(bool *valid_entries) { - char tmp[3]; int i; sclp_print("s390-ccw Enumerated Boot Menu.\n\n"); @@ -241,9 +238,7 @@ int menu_get_enum_boot_index(bool *valid_entries) if (i < 10) { sclp_print(" "); } - sclp_print("["); - sclp_print(uitoa(i, tmp, sizeof(tmp))); - sclp_print("]"); + printf("[%d]", i); if (i == 0) { sclp_print(" default\n"); } diff --git a/pc-bios/s390-ccw/sclp.c b/pc-bios/s390-ccw/sclp.c index 7251f9af4d..48b1cc4d16 100644 --- a/pc-bios/s390-ccw/sclp.c +++ b/pc-bios/s390-ccw/sclp.c @@ -8,7 +8,7 @@ * directory. */ -#include "libc.h" +#include #include "s390-ccw.h" #include "sclp.h" diff --git a/pc-bios/s390-ccw/virtio-blkdev.c b/pc-bios/s390-ccw/virtio-blkdev.c index a81207b52e..08bb5c1347 100644 --- a/pc-bios/s390-ccw/virtio-blkdev.c +++ b/pc-bios/s390-ccw/virtio-blkdev.c @@ -8,7 +8,6 @@ * directory. */ -#include "libc.h" #include "s390-ccw.h" #include "virtio.h" #include "virtio-scsi.h" diff --git a/pc-bios/s390-ccw/virtio-scsi.c b/pc-bios/s390-ccw/virtio-scsi.c index d1a84b937c..1f24007ab1 100644 --- a/pc-bios/s390-ccw/virtio-scsi.c +++ b/pc-bios/s390-ccw/virtio-scsi.c @@ -9,7 +9,7 @@ * directory. */ -#include "libc.h" +#include #include "s390-ccw.h" #include "virtio.h" #include "scsi.h" diff --git a/pc-bios/s390-ccw/virtio.c b/pc-bios/s390-ccw/virtio.c index 5edd058d88..8c6b0a8a92 100644 --- a/pc-bios/s390-ccw/virtio.c +++ b/pc-bios/s390-ccw/virtio.c @@ -8,7 +8,7 @@ * directory. */ -#include "libc.h" +#include #include "s390-ccw.h" #include "cio.h" #include "virtio.h" diff --git a/pc-bios/s390-ccw/Makefile b/pc-bios/s390-ccw/Makefile index 6207911b53..3f4232636e 100644 --- a/pc-bios/s390-ccw/Makefile +++ b/pc-bios/s390-ccw/Makefile @@ -33,13 +33,18 @@ QEMU_DGFLAGS = -MMD -MP -MT $@ -MF $(@D)/$(*F).d .PHONY : all clean build-all distclean OBJECTS = start.o main.o bootmap.o jump2ipl.o sclp.o menu.o \ - virtio.o virtio-scsi.o virtio-blkdev.o libc.o cio.o dasd-ipl.o + virtio.o virtio-scsi.o virtio-blkdev.o cio.o dasd-ipl.o + +SLOF_DIR := $(SRC_PATH)/../../roms/SLOF + +LIBC_INC := -nostdinc -I$(SLOF_DIR)/lib/libc/include EXTRA_CFLAGS += -Wall EXTRA_CFLAGS += -ffreestanding -fno-delete-null-pointer-checks -fno-common -fPIE EXTRA_CFLAGS += -fwrapv -fno-strict-aliasing -fno-asynchronous-unwind-tables EXTRA_CFLAGS += -msoft-float EXTRA_CFLAGS += -std=gnu99 +EXTRA_CFLAGS += $(LIBC_INC) LDFLAGS += -Wl,-pie -nostdlib -z noexecstack cc-test = $(CC) -Werror $1 -c -o /dev/null -xc /dev/null >/dev/null 2>/dev/null @@ -55,18 +60,18 @@ config-cc.mak: Makefile $(call cc-option,-march=z900,-march=z10)) 3> config-cc.mak -include config-cc.mak +include $(SRC_PATH)/netboot.mak + build-all: s390-ccw.img s390-netboot.img -s390-ccw.elf: $(OBJECTS) - $(call quiet-command,$(CC) $(LDFLAGS) -o $@ $(OBJECTS),Linking) +s390-ccw.elf: $(OBJECTS) libc.a + $(call quiet-command,$(CC) $(LDFLAGS) -o $@ $^,Linking) s390-ccw.img: s390-ccw.elf $(call quiet-command,$(STRIP) --strip-unneeded $< -o $@,Stripping $< into) $(OBJECTS): Makefile -include $(SRC_PATH)/netboot.mak - ALL_OBJS = $(sort $(OBJECTS) $(NETOBJS) $(LIBCOBJS) $(LIBNETOBJS)) -include $(ALL_OBJS:%.o=%.d) From patchwork Fri Jun 21 08:24:19 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Huth X-Patchwork-Id: 13707087 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id B48FCC2BB85 for ; Fri, 21 Jun 2024 08:25:36 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sKZZs-0008RZ-Ds; Fri, 21 Jun 2024 04:25:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sKZZq-0008RF-Jl for qemu-devel@nongnu.org; Fri, 21 Jun 2024 04:24:58 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sKZZo-0003Lk-Rf for qemu-devel@nongnu.org; Fri, 21 Jun 2024 04:24:58 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1718958296; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=tWrziMf2ceTCKn9MC4baWs15ewcjC8xpFlegXybltDA=; b=B0W3Ruz06iEzhF0IQXZSD1+6I74pi1/hmljF3MtvVTQwy3x0l6rATnVF1LEXQqUcugP3Gk fwJ4twBdfwy3h57i5jnJ+YEqA3wQHm2bzJD87pIKiH2XLvK9wvxPap9DPn6vBjR5pHviN3 TmrNk5BIICKadx0PlbAEP4z/VoB42W8= Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-324-EdEBQ0CnNWKY1AZWFUQYhQ-1; Fri, 21 Jun 2024 04:24:52 -0400 X-MC-Unique: EdEBQ0CnNWKY1AZWFUQYhQ-1 Received: from mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.15]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id E03EF195609E; Fri, 21 Jun 2024 08:24:50 +0000 (UTC) Received: from thuth-p1g4.redhat.com (unknown [10.39.192.213]) by mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id B92DC1955E80; Fri, 21 Jun 2024 08:24:45 +0000 (UTC) From: Thomas Huth To: qemu-s390x@nongnu.org, Christian Borntraeger , Jared Rossi Cc: qemu-devel@nongnu.org, Eric Farman , Claudio Imbrenda , "Collin L . Walling" , Janosch Frank , "Jason J . Herne" , Marc Hartmayer Subject: [PATCH 4/7] pc-bios/s390-ccw: Link the netboot code into the main s390-ccw.img binary Date: Fri, 21 Jun 2024 10:24:19 +0200 Message-ID: <20240621082422.136217-5-thuth@redhat.com> In-Reply-To: <20240621082422.136217-1-thuth@redhat.com> References: <20240621082422.136217-1-thuth@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.15 Received-SPF: pass client-ip=170.10.133.124; envelope-from=thuth@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 11 X-Spam_score: 1.1 X-Spam_bar: + X-Spam_report: (1.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.152, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org We originally built a separate binary for the netboot code since it was considered as experimental and we could not be sure that the necessary SLOF module had been checked out. Time passed, the code proved its usefulness, and the build system nowadays makes sure that the SLOF module is checked out if you have a s390x compiler available for building the s390-ccw bios. So there is no real compelling reason anymore to keep the netboot code in a separate binary. Linking the code together with the main s390-ccw.img will make future enhancements much easier, like supporting more than one boot device. Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/netboot.mak | 14 -------------- pc-bios/s390-ccw/cio.h | 2 ++ pc-bios/s390-ccw/iplb.h | 4 ++-- pc-bios/s390-ccw/s390-ccw.h | 3 +++ pc-bios/s390-ccw/virtio.h | 1 - pc-bios/s390-ccw/bootmap.c | 2 +- pc-bios/s390-ccw/main.c | 10 +++++++--- pc-bios/s390-ccw/netmain.c | 15 ++------------- pc-bios/s390-ccw/Makefile | 13 +++++++------ 9 files changed, 24 insertions(+), 40 deletions(-) diff --git a/pc-bios/s390-ccw/netboot.mak b/pc-bios/s390-ccw/netboot.mak index d2b3d8ee74..0a24257ff4 100644 --- a/pc-bios/s390-ccw/netboot.mak +++ b/pc-bios/s390-ccw/netboot.mak @@ -1,18 +1,4 @@ -NETOBJS := start.o sclp.o cio.o virtio.o virtio-net.o jump2ipl.o netmain.o - -LIBNET_INC := -I$(SLOF_DIR)/lib/libnet - -NETLDFLAGS := $(LDFLAGS) -Wl,-Ttext=0x7800000 - -$(NETOBJS): EXTRA_CFLAGS += $(LIBC_INC) $(LIBNET_INC) - -s390-netboot.elf: $(NETOBJS) libnet.a libc.a - $(call quiet-command,$(CC) $(NETLDFLAGS) -o $@ $^,Linking) - -s390-netboot.img: s390-netboot.elf - $(call quiet-command,$(STRIP) --strip-unneeded $< -o $@,Stripping $< into) - # libc files: LIBC_CFLAGS = $(EXTRA_CFLAGS) $(CFLAGS) $(LIBC_INC) $(LIBNET_INC) \ diff --git a/pc-bios/s390-ccw/cio.h b/pc-bios/s390-ccw/cio.h index 8b18153deb..6a5e86ba01 100644 --- a/pc-bios/s390-ccw/cio.h +++ b/pc-bios/s390-ccw/cio.h @@ -361,6 +361,8 @@ typedef struct CcwSearchIdData { uint8_t record; } __attribute__((packed)) CcwSearchIdData; +extern SubChannelId net_schid; + int enable_mss_facility(void); void enable_subchannel(SubChannelId schid); uint16_t cu_type(SubChannelId schid); diff --git a/pc-bios/s390-ccw/iplb.h b/pc-bios/s390-ccw/iplb.h index cb6ac8a880..3758698468 100644 --- a/pc-bios/s390-ccw/iplb.h +++ b/pc-bios/s390-ccw/iplb.h @@ -87,9 +87,9 @@ extern IplParameterBlock iplb __attribute__((__aligned__(PAGE_SIZE))); struct QemuIplParameters { uint8_t qipl_flags; uint8_t reserved1[3]; - uint64_t netboot_start_addr; + uint64_t reserved2; uint32_t boot_menu_timeout; - uint8_t reserved2[12]; + uint8_t reserved3[12]; } __attribute__ ((packed)); typedef struct QemuIplParameters QemuIplParameters; diff --git a/pc-bios/s390-ccw/s390-ccw.h b/pc-bios/s390-ccw/s390-ccw.h index b911ebe6d2..b960f85b90 100644 --- a/pc-bios/s390-ccw/s390-ccw.h +++ b/pc-bios/s390-ccw/s390-ccw.h @@ -54,6 +54,9 @@ void write_iplb_location(void); unsigned int get_loadparm_index(void); void main(void); +/* netmain.c */ +void netmain(void); + /* sclp.c */ void sclp_print(const char *string); void sclp_set_write_mask(uint32_t receive_mask, uint32_t send_mask); diff --git a/pc-bios/s390-ccw/virtio.h b/pc-bios/s390-ccw/virtio.h index 85bd9d1695..6f9a558ff5 100644 --- a/pc-bios/s390-ccw/virtio.h +++ b/pc-bios/s390-ccw/virtio.h @@ -253,7 +253,6 @@ struct VDev { uint8_t scsi_dev_heads; bool scsi_device_selected; ScsiDevice selected_scsi_device; - uint64_t netboot_start_addr; uint32_t max_transfer; uint32_t guest_features[2]; }; diff --git a/pc-bios/s390-ccw/bootmap.c b/pc-bios/s390-ccw/bootmap.c index bf85a9c5fe..3c56d547ca 100644 --- a/pc-bios/s390-ccw/bootmap.c +++ b/pc-bios/s390-ccw/bootmap.c @@ -928,7 +928,7 @@ void zipl_load(void) } if (virtio_get_device_type() == VIRTIO_ID_NET) { - jump_to_IPL_code(vdev->netboot_start_addr); + netmain(); } ipl_scsi(); diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c index b8bf9f5fcc..558c26c21b 100644 --- a/pc-bios/s390-ccw/main.c +++ b/pc-bios/s390-ccw/main.c @@ -37,8 +37,13 @@ LowCore *lowcore; /* Yes, this *is* a pointer to address 0 */ */ void write_subsystem_identification(void) { - lowcore->subchannel_id = blk_schid.sch_id; - lowcore->subchannel_nr = blk_schid.sch_no; + if (cutype == CU_TYPE_VIRTIO && virtio_get_device_type() == VIRTIO_ID_NET) { + lowcore->subchannel_id = net_schid.sch_id; + lowcore->subchannel_nr = net_schid.sch_no; + } else { + lowcore->subchannel_id = blk_schid.sch_id; + lowcore->subchannel_nr = blk_schid.sch_no; + } lowcore->io_int_parm = 0; } @@ -230,7 +235,6 @@ static int virtio_setup(void) switch (vdev->senseid.cu_model) { case VIRTIO_ID_NET: sclp_print("Network boot device detected\n"); - vdev->netboot_start_addr = qipl.netboot_start_addr; return 0; case VIRTIO_ID_BLOCK: ret = virtio_blk_setup_device(blk_schid); diff --git a/pc-bios/s390-ccw/netmain.c b/pc-bios/s390-ccw/netmain.c index 5cd619b2d6..99b07f72d9 100644 --- a/pc-bios/s390-ccw/netmain.c +++ b/pc-bios/s390-ccw/netmain.c @@ -41,7 +41,6 @@ #define DEFAULT_TFTP_RETRIES 20 extern char _start[]; -void write_iplb_location(void) {} #define KERNEL_ADDR ((void *)0L) #define KERNEL_MAX_SIZE ((long)_start) @@ -50,10 +49,9 @@ void write_iplb_location(void) {} /* STSI 3.2.2 offset of first vmdb + offset of uuid inside vmdb */ #define STSI322_VMDB_UUID_OFFSET ((8 + 12) * 4) -IplParameterBlock iplb __attribute__((aligned(PAGE_SIZE))); static char cfgbuf[2048]; -static SubChannelId net_schid = { .one = 1 }; +SubChannelId net_schid = { .one = 1 }; static uint8_t mac[6]; static uint64_t dest_timer; @@ -438,15 +436,6 @@ static int net_try_direct_tftp_load(filename_ip_t *fn_ip) return rc; } -void write_subsystem_identification(void) -{ - SubChannelId *schid = (SubChannelId *) 184; - uint32_t *zeroes = (uint32_t *) 188; - - *schid = net_schid; - *zeroes = 0; -} - static bool find_net_dev(Schib *schib, int dev_no) { int i, r; @@ -509,7 +498,7 @@ static void virtio_setup(void) IPL_assert(found, "No virtio net device found"); } -void main(void) +void netmain(void) { filename_ip_t fn_ip; int rc, fnlen; diff --git a/pc-bios/s390-ccw/Makefile b/pc-bios/s390-ccw/Makefile index 3f4232636e..cf6859823a 100644 --- a/pc-bios/s390-ccw/Makefile +++ b/pc-bios/s390-ccw/Makefile @@ -32,19 +32,20 @@ QEMU_DGFLAGS = -MMD -MP -MT $@ -MF $(@D)/$(*F).d .PHONY : all clean build-all distclean -OBJECTS = start.o main.o bootmap.o jump2ipl.o sclp.o menu.o \ - virtio.o virtio-scsi.o virtio-blkdev.o cio.o dasd-ipl.o +OBJECTS = start.o main.o bootmap.o jump2ipl.o sclp.o menu.o netmain.o \ + virtio.o virtio-net.o virtio-scsi.o virtio-blkdev.o cio.o dasd-ipl.o SLOF_DIR := $(SRC_PATH)/../../roms/SLOF LIBC_INC := -nostdinc -I$(SLOF_DIR)/lib/libc/include +LIBNET_INC := -I$(SLOF_DIR)/lib/libnet EXTRA_CFLAGS += -Wall EXTRA_CFLAGS += -ffreestanding -fno-delete-null-pointer-checks -fno-common -fPIE EXTRA_CFLAGS += -fwrapv -fno-strict-aliasing -fno-asynchronous-unwind-tables EXTRA_CFLAGS += -msoft-float EXTRA_CFLAGS += -std=gnu99 -EXTRA_CFLAGS += $(LIBC_INC) +EXTRA_CFLAGS += $(LIBC_INC) $(LIBNET_INC) LDFLAGS += -Wl,-pie -nostdlib -z noexecstack cc-test = $(CC) -Werror $1 -c -o /dev/null -xc /dev/null >/dev/null 2>/dev/null @@ -62,9 +63,9 @@ config-cc.mak: Makefile include $(SRC_PATH)/netboot.mak -build-all: s390-ccw.img s390-netboot.img +build-all: s390-ccw.img -s390-ccw.elf: $(OBJECTS) libc.a +s390-ccw.elf: $(OBJECTS) libnet.a libc.a $(call quiet-command,$(CC) $(LDFLAGS) -o $@ $^,Linking) s390-ccw.img: s390-ccw.elf @@ -72,7 +73,7 @@ s390-ccw.img: s390-ccw.elf $(OBJECTS): Makefile -ALL_OBJS = $(sort $(OBJECTS) $(NETOBJS) $(LIBCOBJS) $(LIBNETOBJS)) +ALL_OBJS = $(sort $(OBJECTS) $(LIBCOBJS) $(LIBNETOBJS)) -include $(ALL_OBJS:%.o=%.d) clean: From patchwork Fri Jun 21 08:24:20 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Huth X-Patchwork-Id: 13707088 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id F31D7C2BA1A for ; Fri, 21 Jun 2024 08:25:36 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sKZa0-00004z-Cp; Fri, 21 Jun 2024 04:25:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sKZZy-0008VH-J3 for qemu-devel@nongnu.org; Fri, 21 Jun 2024 04:25:06 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sKZZt-0003Pb-Uz for qemu-devel@nongnu.org; Fri, 21 Jun 2024 04:25:06 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1718958301; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=74icySS9I6QfNrkGL7E2DdR/LO2nW7oeEPODZ+kI2jc=; b=UG2iRs7XANCq2Jz+TxWObakSawdmnJ0/BWBvpAhSjNkz1JTRU2L7HeIDChT8QsLIuD5oI7 lbNy0qBKzBHgIWekmSkt9ms1ROna+5ttjJft4GdsL2c137hbAkv/6acRKmTdajuZ4qCIK/ bBJmAaMi2X2bUzmNNhtORgP9Dg0Rdes= Received: from mx-prod-mc-02.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-180-C5MgzH1IOY-DpgeCwagMUA-1; Fri, 21 Jun 2024 04:24:57 -0400 X-MC-Unique: C5MgzH1IOY-DpgeCwagMUA-1 Received: from mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.15]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 762BF1955BC9; Fri, 21 Jun 2024 08:24:55 +0000 (UTC) Received: from thuth-p1g4.redhat.com (unknown [10.39.192.213]) by mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 743CF1956087; Fri, 21 Jun 2024 08:24:51 +0000 (UTC) From: Thomas Huth To: qemu-s390x@nongnu.org, Christian Borntraeger , Jared Rossi Cc: qemu-devel@nongnu.org, Eric Farman , Claudio Imbrenda , "Collin L . Walling" , Janosch Frank , "Jason J . Herne" , Marc Hartmayer Subject: [PATCH 5/7] hw/s390x: Remove the possibility to load the s390-netboot.img binary Date: Fri, 21 Jun 2024 10:24:20 +0200 Message-ID: <20240621082422.136217-6-thuth@redhat.com> In-Reply-To: <20240621082422.136217-1-thuth@redhat.com> References: <20240621082422.136217-1-thuth@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.15 Received-SPF: pass client-ip=170.10.133.124; envelope-from=thuth@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 11 X-Spam_score: 1.1 X-Spam_bar: + X-Spam_report: (1.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.152, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Since the netboot code has now been merged into the main s390-ccw.img binary, we don't need the separate s390-netboot.img anymore. Remove it and the code that was responsible for loading it. Signed-off-by: Thomas Huth --- hw/s390x/ipl.h | 12 +++----- hw/s390x/ipl.c | 55 ------------------------------------- hw/s390x/s390-virtio-ccw.c | 10 ++----- pc-bios/meson.build | 1 - pc-bios/s390-netboot.img | Bin 67232 -> 0 bytes 5 files changed, 6 insertions(+), 72 deletions(-) delete mode 100644 pc-bios/s390-netboot.img GIT binary patch literal 0 HcmV?d00001 literal 67232 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 ba_Yxv8Q%DF#((bPsWNoHC+0@D`RV@w*b1Nq diff --git a/hw/s390x/ipl.h b/hw/s390x/ipl.h index 57cd125769..b2105b616a 100644 --- a/hw/s390x/ipl.h +++ b/hw/s390x/ipl.h @@ -134,11 +134,8 @@ void s390_ipl_clear_reset_request(void); /* * The QEMU IPL Parameters will be stored at absolute address * 204 (0xcc) which means it is 32-bit word aligned but not - * double-word aligned. - * Placement of data fields in this area must account for - * their alignment needs. E.g., netboot_start_address must - * have an offset of 4 + n * 8 bytes within the struct in order - * to keep it double-word aligned. + * double-word aligned. Placement of 64-bit data fields in this + * area must account for their alignment needs. * The total size of the struct must never exceed 28 bytes. * This definition must be kept in sync with the definition * in pc-bios/s390-ccw/iplb.h. @@ -146,9 +143,9 @@ void s390_ipl_clear_reset_request(void); struct QemuIplParameters { uint8_t qipl_flags; uint8_t reserved1[3]; - uint64_t netboot_start_addr; + uint64_t reserved2; uint32_t boot_menu_timeout; - uint8_t reserved2[12]; + uint8_t reserved3[12]; } QEMU_PACKED; typedef struct QemuIplParameters QemuIplParameters; @@ -178,7 +175,6 @@ struct S390IPLState { char *initrd; char *cmdline; char *firmware; - char *netboot_fw; uint8_t cssid; uint8_t ssid; uint16_t devno; diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c index 9362de0b6f..8a0a3e6961 100644 --- a/hw/s390x/ipl.c +++ b/hw/s390x/ipl.c @@ -288,7 +288,6 @@ static Property s390_ipl_properties[] = { DEFINE_PROP_STRING("initrd", S390IPLState, initrd), DEFINE_PROP_STRING("cmdline", S390IPLState, cmdline), DEFINE_PROP_STRING("firmware", S390IPLState, firmware), - DEFINE_PROP_STRING("netboot_fw", S390IPLState, netboot_fw), DEFINE_PROP_BOOL("enforce_bios", S390IPLState, enforce_bios, false), DEFINE_PROP_BOOL("iplbext_migration", S390IPLState, iplbext_migration, true), @@ -480,56 +479,6 @@ int s390_ipl_set_loadparm(uint8_t *loadparm) return -1; } -static int load_netboot_image(Error **errp) -{ - MachineState *ms = MACHINE(qdev_get_machine()); - S390IPLState *ipl = get_ipl_device(); - char *netboot_filename; - MemoryRegion *sysmem = get_system_memory(); - MemoryRegion *mr = NULL; - void *ram_ptr = NULL; - int img_size = -1; - - mr = memory_region_find(sysmem, 0, 1).mr; - if (!mr) { - error_setg(errp, "Failed to find memory region at address 0"); - return -1; - } - - ram_ptr = memory_region_get_ram_ptr(mr); - if (!ram_ptr) { - error_setg(errp, "No RAM found"); - goto unref_mr; - } - - netboot_filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, ipl->netboot_fw); - if (netboot_filename == NULL) { - error_setg(errp, "Could not find network bootloader '%s'", - ipl->netboot_fw); - goto unref_mr; - } - - img_size = load_elf_ram(netboot_filename, NULL, NULL, NULL, - &ipl->start_addr, - NULL, NULL, NULL, 1, EM_S390, 0, 0, NULL, - false); - - if (img_size < 0) { - img_size = load_image_size(netboot_filename, ram_ptr, ms->ram_size); - ipl->start_addr = KERN_IMAGE_START; - } - - if (img_size < 0) { - error_setg(errp, "Failed to load network bootloader"); - } - - g_free(netboot_filename); - -unref_mr: - memory_region_unref(mr); - return img_size; -} - static bool is_virtio_ccw_device_of_type(IplParameterBlock *iplb, int virtio_id) { @@ -754,10 +703,6 @@ void s390_ipl_prepare_cpu(S390CPU *cpu) ipl->iplb_valid = s390_gen_initial_iplb(ipl); } } - if (ipl->netboot) { - load_netboot_image(&error_fatal); - ipl->qipl.netboot_start_addr = cpu_to_be64(ipl->start_addr); - } s390_ipl_set_boot_menu(ipl); s390_ipl_prepare_qipl(cpu); } diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c index 3d0bc3e7f2..779366d551 100644 --- a/hw/s390x/s390-virtio-ccw.c +++ b/hw/s390x/s390-virtio-ccw.c @@ -186,11 +186,10 @@ static void s390_memory_init(MemoryRegion *ram) static void s390_init_ipl_dev(const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *firmware, - const char *netboot_fw, bool enforce_bios) + bool enforce_bios) { Object *new = object_new(TYPE_S390_IPL); DeviceState *dev = DEVICE(new); - char *netboot_fw_prop; if (kernel_filename) { qdev_prop_set_string(dev, "kernel", kernel_filename); @@ -201,11 +200,6 @@ static void s390_init_ipl_dev(const char *kernel_filename, qdev_prop_set_string(dev, "cmdline", kernel_cmdline); qdev_prop_set_string(dev, "firmware", firmware); qdev_prop_set_bit(dev, "enforce_bios", enforce_bios); - netboot_fw_prop = object_property_get_str(new, "netboot_fw", &error_abort); - if (!strlen(netboot_fw_prop)) { - qdev_prop_set_string(dev, "netboot_fw", netboot_fw); - } - g_free(netboot_fw_prop); object_property_add_child(qdev_get_machine(), TYPE_S390_IPL, new); object_unref(new); @@ -270,7 +264,7 @@ static void ccw_init(MachineState *machine) s390_init_ipl_dev(machine->kernel_filename, machine->kernel_cmdline, machine->initrd_filename, machine->firmware ?: "s390-ccw.img", - "s390-netboot.img", true); + true); dev = qdev_new(TYPE_S390_PCI_HOST_BRIDGE); object_property_add_child(qdev_get_machine(), TYPE_S390_PCI_HOST_BRIDGE, diff --git a/pc-bios/meson.build b/pc-bios/meson.build index 0760612bea..3d2e367d31 100644 --- a/pc-bios/meson.build +++ b/pc-bios/meson.build @@ -64,7 +64,6 @@ blobs = [ 'kvmvapic.bin', 'pvh.bin', 's390-ccw.img', - 's390-netboot.img', 'slof.bin', 'skiboot.lid', 'palcode-clipper', diff --git a/pc-bios/s390-netboot.img b/pc-bios/s390-netboot.img deleted file mode 100644 index 6908e49f06801808b826d3a01f88132cf1b2f57c..0000000000000000000000000000000000000000 From patchwork Fri Jun 21 08:24:21 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Huth X-Patchwork-Id: 13707090 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 219FDC2BA1A for ; Fri, 21 Jun 2024 08:26:02 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sKZa1-00005L-2Y; Fri, 21 Jun 2024 04:25:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sKZZy-0008Vc-U8 for qemu-devel@nongnu.org; Fri, 21 Jun 2024 04:25:06 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sKZZx-0003d2-5E for qemu-devel@nongnu.org; Fri, 21 Jun 2024 04:25:06 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1718958304; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=kBcaqkhQWTPUoy/Zf+eH6/H6gWtsCocB0uG7hIw/Tkg=; b=GLMl5n6w35bvn3WnX3JkyoK2hkuQIalHxzfqt6+41Suo+1iwfAFWhe198qKuekodCCPGNA hI3PEbqgcKNEAWtBGLCsCU2F7JW6arSu+SDgYMjpMQw68Bv7VGNp3hMvGOFYXCEYH124fh 6XTEKL0VgIYB0KZaLfU5xbEG/HdcnAI= Received: from mx-prod-mc-04.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-516-5wyJvmQsOEa70qM8rv0k3A-1; Fri, 21 Jun 2024 04:25:00 -0400 X-MC-Unique: 5wyJvmQsOEa70qM8rv0k3A-1 Received: from mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.15]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 5160719560B2; Fri, 21 Jun 2024 08:24:59 +0000 (UTC) Received: from thuth-p1g4.redhat.com (unknown [10.39.192.213]) by mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id B487C1955E80; Fri, 21 Jun 2024 08:24:55 +0000 (UTC) From: Thomas Huth To: qemu-s390x@nongnu.org, Christian Borntraeger , Jared Rossi Cc: qemu-devel@nongnu.org, Eric Farman , Claudio Imbrenda , "Collin L . Walling" , Janosch Frank , "Jason J . Herne" , Marc Hartmayer Subject: [PATCH 6/7] pc-bios/s390-ccw: Merge netboot.mak into the main Makefile Date: Fri, 21 Jun 2024 10:24:21 +0200 Message-ID: <20240621082422.136217-7-thuth@redhat.com> In-Reply-To: <20240621082422.136217-1-thuth@redhat.com> References: <20240621082422.136217-1-thuth@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.15 Received-SPF: pass client-ip=170.10.133.124; envelope-from=thuth@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 11 X-Spam_score: 1.1 X-Spam_bar: + X-Spam_report: (1.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.152, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Now that the netboot code has been merged into the main s390-ccw.img, it also does not make sense to keep the build rules in a separate file. Thus let's merge netboot.mak into the main Makefile. Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/netboot.mak | 45 ---------------------------------- pc-bios/s390-ccw/Makefile | 47 +++++++++++++++++++++++++++++++++++- 2 files changed, 46 insertions(+), 46 deletions(-) delete mode 100644 pc-bios/s390-ccw/netboot.mak diff --git a/pc-bios/s390-ccw/netboot.mak b/pc-bios/s390-ccw/netboot.mak deleted file mode 100644 index 0a24257ff4..0000000000 --- a/pc-bios/s390-ccw/netboot.mak +++ /dev/null @@ -1,45 +0,0 @@ - -# libc files: - -LIBC_CFLAGS = $(EXTRA_CFLAGS) $(CFLAGS) $(LIBC_INC) $(LIBNET_INC) \ - -MMD -MP -MT $@ -MF $(@:%.o=%.d) - -CTYPE_OBJS = isdigit.o isxdigit.o toupper.o -%.o : $(SLOF_DIR)/lib/libc/ctype/%.c - $(call quiet-command,$(CC) $(LIBC_CFLAGS) -c -o $@ $<,Compiling) - -STRING_OBJS = strcat.o strchr.o strrchr.o strcpy.o strlen.o strncpy.o \ - strcmp.o strncmp.o strcasecmp.o strncasecmp.o strstr.o \ - memset.o memcpy.o memmove.o memcmp.o -%.o : $(SLOF_DIR)/lib/libc/string/%.c - $(call quiet-command,$(CC) $(LIBC_CFLAGS) -c -o $@ $<,Compiling) - -STDLIB_OBJS = atoi.o atol.o strtoul.o strtol.o rand.o malloc.o free.o -%.o : $(SLOF_DIR)/lib/libc/stdlib/%.c - $(call quiet-command,$(CC) $(LIBC_CFLAGS) -c -o $@ $<,Compiling) - -STDIO_OBJS = sprintf.o snprintf.o vfprintf.o vsnprintf.o vsprintf.o fprintf.o \ - printf.o putc.o puts.o putchar.o stdchnls.o fileno.o -%.o : $(SLOF_DIR)/lib/libc/stdio/%.c - $(call quiet-command,$(CC) $(LIBC_CFLAGS) -c -o $@ $<,Compiling) - -sbrk.o: $(SLOF_DIR)/slof/sbrk.c - $(call quiet-command,$(CC) $(LIBC_CFLAGS) -c -o $@ $<,Compiling) - -LIBCOBJS := $(STRING_OBJS) $(CTYPE_OBJS) $(STDLIB_OBJS) $(STDIO_OBJS) sbrk.o - -libc.a: $(LIBCOBJS) - $(call quiet-command,$(AR) -rc $@ $^,Creating static library) - -# libnet files: - -LIBNETOBJS := args.o dhcp.o dns.o icmpv6.o ipv6.o tcp.o udp.o bootp.o \ - dhcpv6.o ethernet.o ipv4.o ndp.o tftp.o pxelinux.o -LIBNETCFLAGS = $(EXTRA_CFLAGS) $(CFLAGS) $(LIBC_INC) $(LIBNET_INC) \ - -DDHCPARCH=0x1F -MMD -MP -MT $@ -MF $(@:%.o=%.d) - -%.o : $(SLOF_DIR)/lib/libnet/%.c - $(call quiet-command,$(CC) $(LIBNETCFLAGS) -c -o $@ $<,Compiling) - -libnet.a: $(LIBNETOBJS) - $(call quiet-command,$(AR) -rc $@ $^,Creating static library) diff --git a/pc-bios/s390-ccw/Makefile b/pc-bios/s390-ccw/Makefile index cf6859823a..27cbb354af 100644 --- a/pc-bios/s390-ccw/Makefile +++ b/pc-bios/s390-ccw/Makefile @@ -61,7 +61,52 @@ config-cc.mak: Makefile $(call cc-option,-march=z900,-march=z10)) 3> config-cc.mak -include config-cc.mak -include $(SRC_PATH)/netboot.mak +# libc files: + +LIBC_CFLAGS = $(EXTRA_CFLAGS) $(CFLAGS) $(LIBC_INC) $(LIBNET_INC) \ + -MMD -MP -MT $@ -MF $(@:%.o=%.d) + +CTYPE_OBJS = isdigit.o isxdigit.o toupper.o +%.o : $(SLOF_DIR)/lib/libc/ctype/%.c + $(call quiet-command,$(CC) $(LIBC_CFLAGS) -c -o $@ $<,Compiling) + +STRING_OBJS = strcat.o strchr.o strrchr.o strcpy.o strlen.o strncpy.o \ + strcmp.o strncmp.o strcasecmp.o strncasecmp.o strstr.o \ + memset.o memcpy.o memmove.o memcmp.o +%.o : $(SLOF_DIR)/lib/libc/string/%.c + $(call quiet-command,$(CC) $(LIBC_CFLAGS) -c -o $@ $<,Compiling) + +STDLIB_OBJS = atoi.o atol.o strtoul.o strtol.o rand.o malloc.o free.o +%.o : $(SLOF_DIR)/lib/libc/stdlib/%.c + $(call quiet-command,$(CC) $(LIBC_CFLAGS) -c -o $@ $<,Compiling) + +STDIO_OBJS = sprintf.o snprintf.o vfprintf.o vsnprintf.o vsprintf.o fprintf.o \ + printf.o putc.o puts.o putchar.o stdchnls.o fileno.o +%.o : $(SLOF_DIR)/lib/libc/stdio/%.c + $(call quiet-command,$(CC) $(LIBC_CFLAGS) -c -o $@ $<,Compiling) + +sbrk.o: $(SLOF_DIR)/slof/sbrk.c + $(call quiet-command,$(CC) $(LIBC_CFLAGS) -c -o $@ $<,Compiling) + +LIBCOBJS := $(STRING_OBJS) $(CTYPE_OBJS) $(STDLIB_OBJS) $(STDIO_OBJS) sbrk.o + +libc.a: $(LIBCOBJS) + $(call quiet-command,$(AR) -rc $@ $^,Creating static library) + +# libnet files: + +LIBNETOBJS := args.o dhcp.o dns.o icmpv6.o ipv6.o tcp.o udp.o bootp.o \ + dhcpv6.o ethernet.o ipv4.o ndp.o tftp.o pxelinux.o +LIBNETCFLAGS = $(EXTRA_CFLAGS) $(CFLAGS) $(LIBC_INC) $(LIBNET_INC) \ + -DDHCPARCH=0x1F -MMD -MP -MT $@ -MF $(@:%.o=%.d) + +%.o : $(SLOF_DIR)/lib/libnet/%.c + $(call quiet-command,$(CC) $(LIBNETCFLAGS) -c -o $@ $<,Compiling) + +libnet.a: $(LIBNETOBJS) + $(call quiet-command,$(AR) -rc $@ $^,Creating static library) + +# Main targets: build-all: s390-ccw.img From patchwork Fri Jun 21 08:24:22 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Huth X-Patchwork-Id: 13707093 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id C5F88C27C4F for ; Fri, 21 Jun 2024 08:26:15 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sKZaA-00008b-AO; Fri, 21 Jun 2024 04:25:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sKZa8-00008B-MQ for qemu-devel@nongnu.org; Fri, 21 Jun 2024 04:25:16 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sKZa6-0003et-W6 for qemu-devel@nongnu.org; Fri, 21 Jun 2024 04:25:16 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1718958314; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=By/4Fe0QePRBexbpUYVqyIgMpSgH1ly61fGWG9VRDIs=; b=LkQxYleDxnIAMLHuAiP+z6RG6QcBMMjt6u549yTOwXxqWvchIkTXkqoTp4AiDYCuwIho0R dW2ClcDMGNPX71/qhQekHPHD9TtaNmXFSXjXiZtQ/Ro7Jo80aA/p4BFif/+hLdvUnujS5o sGoXKZqaWl6qRg2ToA4ado7azeKZYb8= Received: from mx-prod-mc-04.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-489-rbqr-Kh-Ow-JW01ECuMuEQ-1; Fri, 21 Jun 2024 04:25:04 -0400 X-MC-Unique: rbqr-Kh-Ow-JW01ECuMuEQ-1 Received: from mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.15]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 53F4919560BB; Fri, 21 Jun 2024 08:25:03 +0000 (UTC) Received: from thuth-p1g4.redhat.com (unknown [10.39.192.213]) by mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id CB9ED1956087; Fri, 21 Jun 2024 08:24:59 +0000 (UTC) From: Thomas Huth To: qemu-s390x@nongnu.org, Christian Borntraeger , Jared Rossi Cc: qemu-devel@nongnu.org, Eric Farman , Claudio Imbrenda , "Collin L . Walling" , Janosch Frank , "Jason J . Herne" , Marc Hartmayer Subject: [PATCH 7/7] docs/system/s390x/bootdevices: Update the documentation about network booting Date: Fri, 21 Jun 2024 10:24:22 +0200 Message-ID: <20240621082422.136217-8-thuth@redhat.com> In-Reply-To: <20240621082422.136217-1-thuth@redhat.com> References: <20240621082422.136217-1-thuth@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.15 Received-SPF: pass client-ip=170.10.129.124; envelope-from=thuth@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 11 X-Spam_score: 1.1 X-Spam_bar: + X-Spam_report: (1.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.152, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Remove the information about the separate s390-netboot.img from the documentation. Signed-off-by: Thomas Huth --- docs/system/s390x/bootdevices.rst | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/docs/system/s390x/bootdevices.rst b/docs/system/s390x/bootdevices.rst index 1a7a18b43b..c97efb8fc0 100644 --- a/docs/system/s390x/bootdevices.rst +++ b/docs/system/s390x/bootdevices.rst @@ -82,23 +82,17 @@ Note that ``0`` can be used to boot the default entry. Booting from a network device ----------------------------- -Beside the normal guest firmware (which is loaded from the file ``s390-ccw.img`` -in the data directory of QEMU, or via the ``-bios`` option), QEMU ships with -a small TFTP network bootloader firmware for virtio-net-ccw devices, too. This -firmware is loaded from a file called ``s390-netboot.img`` in the QEMU data -directory. In case you want to load it from a different filename instead, -you can specify it via the ``-global s390-ipl.netboot_fw=filename`` -command line option. - -The ``bootindex`` property is especially important for booting via the network. -If you don't specify the ``bootindex`` property here, the network bootloader -firmware code won't get loaded into the guest memory so that the network boot -will fail. For a successful network boot, try something like this:: +The firmware that ships with QEMU includes a small TFTP network bootloader +for virtio-net-ccw devices. The ``bootindex`` property is especially +important for booting via the network. If you don't specify the ``bootindex`` +property here, the network bootloader won't be taken into consideration and +the network boot will fail. For a successful network boot, try something +like this:: qemu-system-s390x -netdev user,id=n1,tftp=...,bootfile=... \ -device virtio-net-ccw,netdev=n1,bootindex=1 -The network bootloader firmware also has basic support for pxelinux.cfg-style +The network bootloader also has basic support for pxelinux.cfg-style configuration files. See the `PXELINUX Configuration page `__ for details how to set up the configuration file on your TFTP server.