From nobody Sat Apr 11 21:30:05 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1773016628; cv=none; d=zohomail.com; s=zohoarc; b=Iav3c7Il5Cx7nwxKDab19jQ8sAs0Sk4rZ5HQLIgG6UXAsV53+w8yyCe4JM37oZaATiRhupk8lZl0zYvJCanhPLLCWRqbZ5/7V3knSWMV+TpVSKzTH/WvivR+7bVvvFIrsEykRn6Daqv4SSIZmK0n9DNqz6BO+zbvfofa5MBbI20= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773016628; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=JcclZk37WuGb3QtwMeyrB8lSeuhdys3LQmg5oj2Y5QM=; b=NfBWTW3E1DTq8pOT0e/OzHPqjeq7cnUmGeLOOkvIusN57MtOpOBzRNG5dnvuGfV0SZq98rCB+oPCqBVZ5S8AQF6zZaVv4ybWyfXjnlNEuSjrFl9v0zX2TWUMAjhXVNMfY936tBQxCXuZUX2rj3egsjQQ0/exOOeAXQtcHSAC9Pg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1773016628389407.750476876672; Sun, 8 Mar 2026 17:37:08 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vzObY-0006Hk-2J; Sun, 08 Mar 2026 20:36:16 -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 1vzObV-0006G7-9m; Sun, 08 Mar 2026 20:36:13 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vzObT-0001dU-GA; Sun, 08 Mar 2026 20:36:13 -0400 Received: from pps.filterd (m0360072.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 628MKqjs1553765; Mon, 9 Mar 2026 00:36:09 GMT Received: from ppma21.wdc07v.mail.ibm.com (5b.69.3da9.ip4.static.sl-reverse.com [169.61.105.91]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4crcvr4em5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 09 Mar 2026 00:36:08 +0000 (GMT) Received: from pps.filterd (ppma21.wdc07v.mail.ibm.com [127.0.0.1]) by ppma21.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 628LeewZ015652; Mon, 9 Mar 2026 00:36:08 GMT Received: from smtprelay04.wdc07v.mail.ibm.com ([172.16.1.71]) by ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4crybn2yug-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 09 Mar 2026 00:36:08 +0000 Received: from smtpav04.wdc07v.mail.ibm.com (smtpav04.wdc07v.mail.ibm.com [10.39.53.231]) by smtprelay04.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 6290a6Ch41419286 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 9 Mar 2026 00:36:06 GMT Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C2D1D58054; Mon, 9 Mar 2026 00:36:06 +0000 (GMT) Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id ABA1F58052; Mon, 9 Mar 2026 00:36:05 +0000 (GMT) Received: from t15.ibmuc.com (unknown [9.61.180.105]) by smtpav04.wdc07v.mail.ibm.com (Postfix) with ESMTP; Mon, 9 Mar 2026 00:36:05 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=JcclZk37WuGb3QtwM eyrB8lSeuhdys3LQmg5oj2Y5QM=; b=oSguednjBcyMPGTADAgkh3HCDrk982KeA gl/2eWqaSBpwG3gK/y4l4o5B8aVbWU/Qpjm/vWoNUviCwRBOTDuMS6XlVpZcp+h/ OkGojk2q6+eVpGdg9sGB0Bm/atiBhQjeGJlDMI+DdEeRYHJLVUc7tgg22rqhMhRb HG/Jd8p3uWqkTo4zrTZTR/fie2rq0+YnF+4UaOk5nxlgS2p7OuqVE2JVoeJ/Xgg4 C+Xj13zIokjlruCaAVV8XHG+I7IWn8yMHmJVks4KbN/CPTjTh90jqnon41WImxhg QxyqvLLtFR6NtHx5mTyEQXJZnfz6So4wl3RR2KQNoF6S1CdyuRytQ== From: jrossi@linux.ibm.com To: qemu-devel@nongnu.org, qemu-s390x@nongnu.org, thuth@redhat.com, mst@redhat.com Cc: jjherne@linux.ibm.com, alifm@linux.ibm.com, farman@linux.ibm.com, mjrosato@linux.ibm.com, jrossi@linux.ibm.com, zycai@linux.ibm.com Subject: [PATCH v5 01/15] pc-bios/s390-ccw: Fix misattributed function prototypes Date: Sun, 8 Mar 2026 20:35:47 -0400 Message-ID: <20260309003601.242634-2-jrossi@linux.ibm.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260309003601.242634-1-jrossi@linux.ibm.com> References: <20260309003601.242634-1-jrossi@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA5MDAwMyBTYWx0ZWRfX9TRWo6l3UWHW FqY8ji77Qw2QwZodOhQuS4Gdc1xjG0Cc7Out5soxGZjqxvE8qNOullgF4pXzc+C1PLB3w8Qtxpp CG+Qz/mjeT3lCncqUVs4R/PRQUrnNsJ3UjdNScaZ00GQb0zQ9OAELgOom5sRe8JxXwWmSjKJ62z RKRdXiHc6/tT/Jme/Ku9TfPj4A0PB4NZxAGyVFRjdJsquFN6MMYuZL6AIObvrR+jtFii1YuaRa+ jT91QVG2JXreta06ql2yUSi5veXWBF/WuggowAiynPt77iNzHLbDK/2Lx1aNbOjftq6oaKuhvBQ lfnf/H1TMH5Ycahg602B9m+burmF1VMC+PBd2F7PywAF0cj2tgIkp8nPxcWGLPqaPhsW1YhPL3u hc6ni3qLFt7DaOY+1bwWOwzsvh4p2AqPA08DI9f5J/P/fzDv8jOWa9jxlKEzJmbJ8Btjt3OxcEC ebQ6Rp1wLAhkwQCZ+yA== X-Proofpoint-GUID: yVJwr4SQkNFBbDtRkfya00YnuLknc54F X-Proofpoint-ORIG-GUID: yVJwr4SQkNFBbDtRkfya00YnuLknc54F X-Authority-Analysis: v=2.4 cv=QoFTHFyd c=1 sm=1 tr=0 ts=69ae15f8 cx=c_pps a=GFwsV6G8L6GxiO2Y/PsHdQ==:117 a=GFwsV6G8L6GxiO2Y/PsHdQ==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=RzCfie-kr_QcCd8fBx8p:22 a=VnNF1IyMAAAA:8 a=20KFwNOVAAAA:8 a=HoESQQHAtyuLEXRXYhEA:9 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-08_07,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 spamscore=0 priorityscore=1501 phishscore=0 lowpriorityscore=0 adultscore=0 clxscore=1015 malwarescore=0 suspectscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603090003 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=148.163.158.5; envelope-from=jrossi@linux.ibm.com; helo=mx0b-001b2d01.pphosted.com X-Spam_score_int: -9 X-Spam_score: -1.0 X-Spam_bar: - X-Spam_report: (-1.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1773016629002158500 Content-Type: text/plain; charset="utf-8" From: Jared Rossi The virtio-blkdev functions are incorrectly listed in s390-ccw.h as belongi= ng to virtio.c. Additionally, virtio_load_direct() has an unused subchan_id argu= ment. Remove the unused argument and move the prototypes to virtio.h so that they= are independent from the CCW bus. Reviewed-by: Thomas Huth Reviewed-by: Eric Farman Reviewed-by: Farhan Ali Signed-off-by: Jared Rossi --- pc-bios/s390-ccw/bootmap.c | 2 +- pc-bios/s390-ccw/s390-ccw.h | 4 ---- pc-bios/s390-ccw/virtio-blkdev.c | 2 +- pc-bios/s390-ccw/virtio.h | 7 +++++++ 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/pc-bios/s390-ccw/bootmap.c b/pc-bios/s390-ccw/bootmap.c index 0f8baa0198..420ee32eff 100644 --- a/pc-bios/s390-ccw/bootmap.c +++ b/pc-bios/s390-ccw/bootmap.c @@ -662,7 +662,7 @@ static int zipl_load_segment(ComponentEntry *entry) */ break; } - address =3D virtio_load_direct(cur_desc[0], cur_desc[1], 0, + address =3D virtio_load_direct(cur_desc[0], cur_desc[1], (void *)address); if (!address) { puts("zIPL load segment failed"); diff --git a/pc-bios/s390-ccw/s390-ccw.h b/pc-bios/s390-ccw/s390-ccw.h index b1dc35cded..47ea66bd4d 100644 --- a/pc-bios/s390-ccw/s390-ccw.h +++ b/pc-bios/s390-ccw/s390-ccw.h @@ -67,11 +67,7 @@ void sclp_get_loadparm_ascii(char *loadparm); int sclp_read(char *str, size_t count); =20 /* virtio.c */ -unsigned long virtio_load_direct(unsigned long rec_list1, unsigned long re= c_list2, - unsigned long subchan_id, void *load_addr= ); bool virtio_is_supported(SubChannelId schid); -int virtio_blk_setup_device(SubChannelId schid); -int virtio_read(unsigned long sector, void *load_addr); =20 /* bootmap.c */ void zipl_load(void); diff --git a/pc-bios/s390-ccw/virtio-blkdev.c b/pc-bios/s390-ccw/virtio-blk= dev.c index 7b2d1e20f4..4b819dd80f 100644 --- a/pc-bios/s390-ccw/virtio-blkdev.c +++ b/pc-bios/s390-ccw/virtio-blkdev.c @@ -64,7 +64,7 @@ int virtio_read_many(unsigned long sector, void *load_add= r, int sec_num) } =20 unsigned long virtio_load_direct(unsigned long rec_list1, unsigned long re= c_list2, - unsigned long subchan_id, void *load_addr) + void *load_addr) { u8 status; int sec =3D rec_list1; diff --git a/pc-bios/s390-ccw/virtio.h b/pc-bios/s390-ccw/virtio.h index 5c5e808a50..597bd42358 100644 --- a/pc-bios/s390-ccw/virtio.h +++ b/pc-bios/s390-ccw/virtio.h @@ -277,7 +277,14 @@ int virtio_run(VDev *vdev, int vqid, VirtioCmd *cmd); int virtio_reset(VDev *vdev); int virtio_setup_ccw(VDev *vdev); =20 +/* virtio-net.c */ int virtio_net_init(void *mac_addr); void virtio_net_deinit(void); =20 +/* virtio-blkdev.c */ +int virtio_blk_setup_device(SubChannelId schid); +int virtio_read(unsigned long sector, void *load_addr); +unsigned long virtio_load_direct(unsigned long rec_list1, unsigned long re= c_list2, + void *load_addr); + #endif /* VIRTIO_H */ --=20 2.52.0 From nobody Sat Apr 11 21:30:05 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1773016614; cv=none; d=zohomail.com; s=zohoarc; b=Tc5VVmsR5lAv7D3FW1Iq6prJT8EeFm4J4Jg86Cz2ufaS4isNq4I1yi+ao76y3yCrSo8XobEnNKrxC3qaO+kHw7tQULq58WkBmRPhu54/f908Wacr1O9eod6BXViUa7nm2WlnuSkhLmP5yMei5gdATtHxqUjXad5xMXS9MtqAcxg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773016614; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Z/WZ4Ued9sMaAzGDaMk8e5bEKDML/ZEaTDWfLPabYF4=; b=UB0viyvrHulUzrxKRu7mMIDyBLRrV2nznpIJGC1Q/dR2BDCyS4VtlcgndxwPHZ4CGYI4Jv6CPnrKkGRdytDVNs1K2j42LTexiORKotABL2YxTy0f5MghPbjzvJJCUhfWWMFAXWQqbHDMWoZH6c0xBGpWsYSm6+WYbPIfpPWCXwo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1773016614396481.76734100137674; Sun, 8 Mar 2026 17:36:54 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vzObZ-0006IF-9k; Sun, 08 Mar 2026 20:36:17 -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 1vzObW-0006Gd-6l; Sun, 08 Mar 2026 20:36:14 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vzObT-0001de-Rl; Sun, 08 Mar 2026 20:36:13 -0400 Received: from pps.filterd (m0360072.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 628LdMvT1478497; Mon, 9 Mar 2026 00:36:10 GMT Received: from ppma23.wdc07v.mail.ibm.com (5d.69.3da9.ip4.static.sl-reverse.com [169.61.105.93]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4crcvr4em6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 09 Mar 2026 00:36:10 +0000 (GMT) Received: from pps.filterd (ppma23.wdc07v.mail.ibm.com [127.0.0.1]) by ppma23.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 628MAAJD023349; Mon, 9 Mar 2026 00:36:10 GMT Received: from smtprelay06.wdc07v.mail.ibm.com ([172.16.1.73]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4cryukaweu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 09 Mar 2026 00:36:10 +0000 Received: from smtpav04.wdc07v.mail.ibm.com (smtpav04.wdc07v.mail.ibm.com [10.39.53.231]) by smtprelay06.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 6290a8rw28312284 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 9 Mar 2026 00:36:08 GMT Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id BDF5D58052; Mon, 9 Mar 2026 00:36:08 +0000 (GMT) Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id A19E058050; Mon, 9 Mar 2026 00:36:07 +0000 (GMT) Received: from t15.ibmuc.com (unknown [9.61.180.105]) by smtpav04.wdc07v.mail.ibm.com (Postfix) with ESMTP; Mon, 9 Mar 2026 00:36:07 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=Z/WZ4Ued9sMaAzGDa Mk8e5bEKDML/ZEaTDWfLPabYF4=; b=XiugEWeKl1DB0vsWi/7+Sx01fZ6yLSy/P i6KpZ1rbVZ+go+ywOOeLWMsgA6sn21fSb9yD4wgHNdIebwlGeRmCWiZeicIU+QOn w36Ul4aAAGEWKzxdD9Md2G/7zYde0MXUbvjoM6yiwylJ9ootr2f10pWGwQAFit3D NqCL0R44NsSkvmqv3Cy8Cdbf5wtz0mrKcEtcOJUakBjjnwMfLDNCy1eayr2UZbWA T9118yyhOh+Bvct2ZYga5U3dJP46Fe5TUxwOJv5M5nMF8mVWr3t8jXk6rpzlSvV0 iDUfGHl8AqnbNNO12GULs/GimatgFlCAqhMBeLxexxlvJYlgTBjGw== From: jrossi@linux.ibm.com To: qemu-devel@nongnu.org, qemu-s390x@nongnu.org, thuth@redhat.com, mst@redhat.com Cc: jjherne@linux.ibm.com, alifm@linux.ibm.com, farman@linux.ibm.com, mjrosato@linux.ibm.com, jrossi@linux.ibm.com, zycai@linux.ibm.com Subject: [PATCH v5 02/15] pc-bios/s390-ccw: Remove redundant vring schid attribute Date: Sun, 8 Mar 2026 20:35:48 -0400 Message-ID: <20260309003601.242634-3-jrossi@linux.ibm.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260309003601.242634-1-jrossi@linux.ibm.com> References: <20260309003601.242634-1-jrossi@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA5MDAwMyBTYWx0ZWRfX6R4pDImVsxUv uCA5TbcUSgxBT7k0WuzIMHKXO8BZns02TgqKlKotRD+U8Z104xTQVAUVl1SoaiWElCXf/5056rs mEmHRgJ6TyGUgDUWYS8PBN8txyGDWdJPeF29y5/cjs0O2Ckvih+Miw8ASFHFjxRzJ0lASjiacZd hu69JxFDFFcDsb4Ag5oo62M3tXqmksP3cFuqUNzWJ3PiTgVdBDWbKbSbO6N/EM+Zc4zO1sFEOEC gWVuk+xGfwaofwOhMoJ4oYcs5ecAP2ckh0mLXiP+FOaf6e7Sz5fZSVH1dzXzR4d4VttPsPrzYCz ub7IL5DZq1w5A2vrpkI2Op8ZoCBkJw4nvwTshIO+JSU1j3FgJVz5FY1LL7atjTqD/LWiC2TwjT+ 3m12fqkNS1JbxiMYCJXwR/+UXYw2lzcpXOWt4zadvnvPHiV7vMh9mjkR3CC2THhXfQVHA6ak6Rb 7thIw45xy6/AnGow9tQ== X-Proofpoint-GUID: s4u3GrDxVFtgEsVLwiTob9NJ8IxQ1gMc X-Proofpoint-ORIG-GUID: s4u3GrDxVFtgEsVLwiTob9NJ8IxQ1gMc X-Authority-Analysis: v=2.4 cv=QoFTHFyd c=1 sm=1 tr=0 ts=69ae15fa cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=RzCfie-kr_QcCd8fBx8p:22 a=VnNF1IyMAAAA:8 a=20KFwNOVAAAA:8 a=IrE9pShrE_OzcS6fqDcA:9 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-08_07,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 spamscore=0 priorityscore=1501 phishscore=0 lowpriorityscore=0 adultscore=0 clxscore=1015 malwarescore=0 suspectscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603090003 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=148.163.158.5; envelope-from=jrossi@linux.ibm.com; helo=mx0b-001b2d01.pphosted.com X-Spam_score_int: -9 X-Spam_score: -1.0 X-Spam_bar: - X-Spam_report: (-1.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1773016615972154100 Content-Type: text/plain; charset="utf-8" From: Jared Rossi The schid is already stored as an attribute of the VDev itself and any other instances are copies of this same value. To avoid CCW specific attributes = in the VRing let's just access the existing VDev schid attribute as needed. Reviewed-by: Thomas Huth Reviewed-by: Eric Farman Reviewed-by: Farhan Ali Signed-off-by: Jared Rossi --- pc-bios/s390-ccw/virtio-blkdev.c | 2 +- pc-bios/s390-ccw/virtio-net.c | 2 +- pc-bios/s390-ccw/virtio.c | 9 ++++----- pc-bios/s390-ccw/virtio.h | 3 +-- 4 files changed, 7 insertions(+), 9 deletions(-) diff --git a/pc-bios/s390-ccw/virtio-blkdev.c b/pc-bios/s390-ccw/virtio-blk= dev.c index 4b819dd80f..019c2718b1 100644 --- a/pc-bios/s390-ccw/virtio-blkdev.c +++ b/pc-bios/s390-ccw/virtio-blkdev.c @@ -42,7 +42,7 @@ static int virtio_blk_read_many(VDev *vdev, unsigned long= sector, void *load_add /* Now we can tell the host to read */ vring_wait_reply(); =20 - if (drain_irqs(vr->schid)) { + if (drain_irqs()) { /* Well, whatever status is supposed to contain... */ status =3D 1; } diff --git a/pc-bios/s390-ccw/virtio-net.c b/pc-bios/s390-ccw/virtio-net.c index 301445bf97..7eb0850069 100644 --- a/pc-bios/s390-ccw/virtio-net.c +++ b/pc-bios/s390-ccw/virtio-net.c @@ -88,7 +88,7 @@ int send(int fd, const void *buf, int len, int flags) while (!vr_poll(txvq)) { yield(); } - if (drain_irqs(txvq->schid)) { + if (drain_irqs()) { puts("send: drain irqs failed"); return -1; } diff --git a/pc-bios/s390-ccw/virtio.c b/pc-bios/s390-ccw/virtio.c index cd6c99c7e3..f384a990dc 100644 --- a/pc-bios/s390-ccw/virtio.c +++ b/pc-bios/s390-ccw/virtio.c @@ -72,14 +72,14 @@ static long virtio_notify(SubChannelId schid, int vq_id= x, long cookie) * Virtio functions * ***********************************************/ =20 -int drain_irqs(SubChannelId schid) +int drain_irqs(void) { Irb irb =3D {}; int r =3D 0; =20 while (1) { /* FIXME: make use of TPI, for that enable subchannel and isc */ - if (tsch(schid, &irb)) { + if (tsch(vdev.schid, &irb)) { /* Might want to differentiate error codes later on. */ if (irb.scsw.cstat) { r =3D -EIO; @@ -134,7 +134,7 @@ static void vring_init(VRing *vr, VqInfo *info) =20 bool vring_notify(VRing *vr) { - vr->cookie =3D virtio_notify(vr->schid, vr->id, vr->cookie); + vr->cookie =3D virtio_notify(vdev.schid, vr->id, vr->cookie); return vr->cookie >=3D 0; } =20 @@ -211,7 +211,7 @@ int virtio_run(VDev *vdev, int vqid, VirtioCmd *cmd) } while (cmd[i++].flags & VRING_DESC_F_NEXT); =20 vring_wait_reply(); - if (drain_irqs(vr->schid)) { + if (drain_irqs()) { return -1; } return 0; @@ -316,7 +316,6 @@ int virtio_setup_ccw(VDev *vdev) } info.num =3D config.num; vring_init(&vdev->vrings[i], &info); - vdev->vrings[i].schid =3D vdev->schid; if (run_ccw(vdev, CCW_CMD_SET_VQ, &info, sizeof(info), false)) { puts("Cannot set VQ info"); return -EIO; diff --git a/pc-bios/s390-ccw/virtio.h b/pc-bios/s390-ccw/virtio.h index 597bd42358..06ba4e45ac 100644 --- a/pc-bios/s390-ccw/virtio.h +++ b/pc-bios/s390-ccw/virtio.h @@ -103,7 +103,6 @@ struct VRing { VRingDesc *desc; VRingAvail *avail; VRingUsed *used; - SubChannelId schid; long cookie; int id; }; @@ -269,7 +268,7 @@ struct VirtioCmd { typedef struct VirtioCmd VirtioCmd; =20 bool vring_notify(VRing *vr); -int drain_irqs(SubChannelId schid); +int drain_irqs(void); void vring_send_buf(VRing *vr, void *p, int len, int flags); int vr_poll(VRing *vr); int vring_wait_reply(void); --=20 2.52.0 From nobody Sat Apr 11 21:30:05 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1773016683; cv=none; d=zohomail.com; s=zohoarc; b=Cg5YEaMghChisDyM+GvdaZkEnfWY7wxzro9fbjl7Gf0fOfpaWO0QwspQMRyYUOEmYyGNqfnCE88y9GtFLs+9RcZi+MYSLxWpc+NHzxZz/DOOhxkpV3Uc87mQwaL73f3qglhT3C62+adU8LDvj6hw7RoK+EpoS8F6dhShnZQGwII= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773016683; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=hT+WaPK/l/KVraVn/hFNJ7cPBQ52onrJsY+ruj1S6IA=; b=nzU3zIVo3UFT3rTaMfryPVwlNzUfrcGYTJ7fzp0ZY+j+LdibGgGb92dDJksq5kVWfX+hzxkIsqMlZfSSdm0EXVWb5/tT38lAf//R1Qg07ySCui2yXqHXymebH9tm371rVsPp4YNJtgi4a/X0YabnZMlKFpEL8Vj/Sb52LHtdoRk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 177301668335057.52833174790317; Sun, 8 Mar 2026 17:38:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vzOba-0006Iq-3E; Sun, 08 Mar 2026 20:36: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 1vzObY-0006Hz-PL; Sun, 08 Mar 2026 20:36:16 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vzObX-0001e4-AW; Sun, 08 Mar 2026 20:36:16 -0400 Received: from pps.filterd (m0356517.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 628MpRP11545664; Mon, 9 Mar 2026 00:36:13 GMT Received: from ppma21.wdc07v.mail.ibm.com (5b.69.3da9.ip4.static.sl-reverse.com [169.61.105.91]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4crcyw4ker-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 09 Mar 2026 00:36:13 +0000 (GMT) Received: from pps.filterd (ppma21.wdc07v.mail.ibm.com [127.0.0.1]) by ppma21.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 628LjP3f015638; Mon, 9 Mar 2026 00:36:12 GMT Received: from smtprelay02.dal12v.mail.ibm.com ([172.16.1.4]) by ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4crybn2yuk-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 09 Mar 2026 00:36:12 +0000 Received: from smtpav04.wdc07v.mail.ibm.com (smtpav04.wdc07v.mail.ibm.com [10.39.53.231]) by smtprelay02.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 6290aAnt32637522 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 9 Mar 2026 00:36:11 GMT Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id BF61358056; Mon, 9 Mar 2026 00:36:10 +0000 (GMT) Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id A059258050; Mon, 9 Mar 2026 00:36:09 +0000 (GMT) Received: from t15.ibmuc.com (unknown [9.61.180.105]) by smtpav04.wdc07v.mail.ibm.com (Postfix) with ESMTP; Mon, 9 Mar 2026 00:36:09 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=hT+WaPK/l/KVraVn/ hFNJ7cPBQ52onrJsY+ruj1S6IA=; b=NTSXksgE58aLd4abfj/3nnDNupXuxgatM I2nwDArSbPmD+8s1+kKs4QKFzSbB2nCvniRVKZ4Nt+hP5u+4lEH+h7SrwEcAyVvS JWQoNAhk28+5FSSS1UZUv0U0E+SilzgmFJ4M6OIORnIgpXR9aDdyJG8cz8QlOaB8 TKURr2NGza/7cBpxWiVHAp6ZOg+e7SCcRm+Iivn4yacrMLBBm5EnBWnz9GMTxcrW xPAB+YVEF8+jZJaa4ErlEHYkaYQ1wBcUcAh8Pf/W3cBdHe3bpI7exJn6oT3+IFXC wwjCU9E0o8uvLao1eRNUTN26tfTC9tFLDSOQFx9k3hSyXTXwZXXFg== From: jrossi@linux.ibm.com To: qemu-devel@nongnu.org, qemu-s390x@nongnu.org, thuth@redhat.com, mst@redhat.com Cc: jjherne@linux.ibm.com, alifm@linux.ibm.com, farman@linux.ibm.com, mjrosato@linux.ibm.com, jrossi@linux.ibm.com, zycai@linux.ibm.com Subject: [PATCH v5 03/15] pc-bios/s390-ccw: Always reset virtio device on failed boot attempt Date: Sun, 8 Mar 2026 20:35:49 -0400 Message-ID: <20260309003601.242634-4-jrossi@linux.ibm.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260309003601.242634-1-jrossi@linux.ibm.com> References: <20260309003601.242634-1-jrossi@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA5MDAwMyBTYWx0ZWRfX5mQPBjW2W3dM VSSHWp5BUd8E7UuL1bBneZxM0pkHVJhTSCVlI84GYGeuuE3dWxRvxyrLkqYY0ADM4NhFOk/CokW rioFpfPE6th19yqEw4zY5Qg+ucO4lZOat4mvIk9co87vP01T3h9GgtR/3bRyz+u+bZBNsjKdVvD 3jnt0uRKGxoi95Wnd2tbX5zxGsGHb8054eMR1xgsCA4RzwFbkdwGqPiO/TZVnj7IHCQum3ZLTwd flp/11aWcnbDc0wPairt1DWvdJOvZ5lkTycaQctrUTJ3xiIW3SY9sEBlpXO8M/UTPdmk8TzNPVu P/kuLs0L8u7gcxFncm4uk02q0Gq5FIcVV/r5Ml4+LFVfLyd/ozBhIntZPLUuYfT10leqqDK0fCB MZIkJbIk4xsIiKy9REdrPDQFYMYX5+u+XK9UOW6/lSxHzMGp/PPWITZfZ+aQALrw3tiqu96vusi vLD0epUcvlYCND5IYDA== X-Authority-Analysis: v=2.4 cv=QaVrf8bv c=1 sm=1 tr=0 ts=69ae15fd cx=c_pps a=GFwsV6G8L6GxiO2Y/PsHdQ==:117 a=GFwsV6G8L6GxiO2Y/PsHdQ==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=U7nrCbtTmkRpXpFmAIza:22 a=VnNF1IyMAAAA:8 a=20KFwNOVAAAA:8 a=YW-40rnn-hUE6FG0_2oA:9 a=NqO74GWdXPXpGKcKHaDJD/ajO6k=:19 a=ZXulRonScM0A:10 a=zZCYzV9kfG8A:10 X-Proofpoint-GUID: 4V1tYfZqINr0Z6dicb4LLhGgkf2a1c9T X-Proofpoint-ORIG-GUID: 4V1tYfZqINr0Z6dicb4LLhGgkf2a1c9T X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-08_07,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 spamscore=0 impostorscore=0 clxscore=1015 adultscore=0 bulkscore=0 lowpriorityscore=0 priorityscore=1501 suspectscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603090003 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=148.163.156.1; envelope-from=jrossi@linux.ibm.com; helo=mx0a-001b2d01.pphosted.com X-Spam_score_int: -9 X-Spam_score: -1.0 X-Spam_bar: - X-Spam_report: (-1.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1773016684556154100 Content-Type: text/plain; charset="utf-8" From: Jared Rossi The virtio spec necessitates that live virtqueues must not be altered. Res= et the failed device so that the queues are not live before we attempt to boot= any fallback devices. Reviewed-by: Thomas Huth Reviewed-by: Eric Farman Signed-off-by: Jared Rossi --- pc-bios/s390-ccw/main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c index 76bf743900..8e2c99bee1 100644 --- a/pc-bios/s390-ccw/main.c +++ b/pc-bios/s390-ccw/main.c @@ -277,7 +277,8 @@ static void ipl_boot_device(void) break; case CU_TYPE_VIRTIO: if (virtio_setup() =3D=3D 0) { - zipl_load(); + zipl_load(); /* only return on error */ + virtio_reset(virtio_get_device()); } break; default: --=20 2.52.0 From nobody Sat Apr 11 21:30:05 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1773016614; cv=none; d=zohomail.com; s=zohoarc; b=FvmgCOq6HnZ7k8HnOa6Z9VWy1c8VSVMNlz5MCBS7sgY4e4mYJCu2AldmTifew2fUX12fp7+wyjWQlI0tBdrabMqwDfgF1IJIjQak3fjjHh6ZluIJdiB/YnHhRZBlu/KFo0Knrxnl/yloyPfl3z4BptcHJdTiHFLt9fW1plI7vzU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773016614; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=BhdJhlYa3DDQsC77rSkdST00mb5d/j7+VpRBoa3woZM=; b=i7/rOwVQz68rV7tXMliUYjvmo1US9t9ytWwI0M83HAvyfm+ktuBjHCcyTANRNmuPfkxaIN8JvixwShz0LVJ6VeT/KGcjehYtspQLqg41gMFXrz6TmH89/VVl78unauQk1KYv3QCcFVhjaQMU/OMfTMi3sBMJXaUoaHFCXzawY3Y= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1773016614392817.4272441375457; Sun, 8 Mar 2026 17:36:54 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vzObc-0006KG-UL; Sun, 08 Mar 2026 20:36:20 -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 1vzObZ-0006Ik-MN; Sun, 08 Mar 2026 20:36:17 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vzObY-0001eG-3p; Sun, 08 Mar 2026 20:36:17 -0400 Received: from pps.filterd (m0360072.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6288fWlR056775; Mon, 9 Mar 2026 00:36:15 GMT Received: from ppma23.wdc07v.mail.ibm.com (5d.69.3da9.ip4.static.sl-reverse.com [169.61.105.93]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4crcvr4ema-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 09 Mar 2026 00:36:14 +0000 (GMT) Received: from pps.filterd (ppma23.wdc07v.mail.ibm.com [127.0.0.1]) by ppma23.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 628M6D5P023239; Mon, 9 Mar 2026 00:36:14 GMT Received: from smtprelay04.dal12v.mail.ibm.com ([172.16.1.6]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4cryukawex-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 09 Mar 2026 00:36:14 +0000 Received: from smtpav04.wdc07v.mail.ibm.com (smtpav04.wdc07v.mail.ibm.com [10.39.53.231]) by smtprelay04.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 6290aC5Q64225740 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 9 Mar 2026 00:36:13 GMT Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id A11D058054; Mon, 9 Mar 2026 00:36:12 +0000 (GMT) Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 8B46C58052; Mon, 9 Mar 2026 00:36:11 +0000 (GMT) Received: from t15.ibmuc.com (unknown [9.61.180.105]) by smtpav04.wdc07v.mail.ibm.com (Postfix) with ESMTP; Mon, 9 Mar 2026 00:36:11 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=BhdJhlYa3DDQsC77r SkdST00mb5d/j7+VpRBoa3woZM=; b=F0XxjmdN3ET6u2wTQaEiF5zZ4TTnFatCQ l5TT2bVAEltea/N33yRlytpXQ72nfUuoqLZKzeYvLHESgB6m+Uep5X6LlDHXkimy PszhD4evexEEr00IIZlA80ep6qMmq69c12i7R1e7ilct/3S0aK/tBly0bCT+ksdF 2/jHn6Xg7StUFfjqh6B/0G5N7a9AgHr3wcTjgtxmyCHH53PLpATrmMFbA2HBD2Mx lsM66jmeaN/Y80M7psARZHArEyMX76D+mVDO7qv0/qwjVgrqxYiNSJktSfoNAHrv h+9KuUGDXYZk0dcRdD4/SFeD4j6U8iBmgyDei1tkUQc4cy0rQfzvw== From: jrossi@linux.ibm.com To: qemu-devel@nongnu.org, qemu-s390x@nongnu.org, thuth@redhat.com, mst@redhat.com Cc: jjherne@linux.ibm.com, alifm@linux.ibm.com, farman@linux.ibm.com, mjrosato@linux.ibm.com, jrossi@linux.ibm.com, zycai@linux.ibm.com Subject: [PATCH v5 04/15] s390x: Remove duplicate definitions of IPL types Date: Sun, 8 Mar 2026 20:35:50 -0400 Message-ID: <20260309003601.242634-5-jrossi@linux.ibm.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260309003601.242634-1-jrossi@linux.ibm.com> References: <20260309003601.242634-1-jrossi@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA5MDAwMyBTYWx0ZWRfX81X1AbvDxAAb MS/0tYEPIPvydroq0DQlkP9CK81ZCuiPehS7XtWNoB8g/7aytcfpcW5mSJAPjUZpxRHlX9pEDSS IbiHS2dTdZknaQ5VSNWlxYxITFCMyohHabYPNvVcT21ETBTcgJ62tvEO2vNiCF7BzRAs/LVzvk/ VH+tVm+5QHgko0wIFD9px7YxX8pwFUGpTyh7RcSLT/+nbPoW5t0c0V0vPVxynNPar4cXLO0bN/3 TTo7NkqpzYy7iXVuaVo2bpy2Gtu6uHGQptYdFLjoDbq6qTU9SWPgXBUiCzYeP2CuP3yJelXB/CK aZJcPfr1cUlBRdfDmMIPm+SMhtpELSa3c55VNiNXlhPzLqKi9xb+HTNBvGqi9GsF9XJznKRD5+k PTFCy9OLKkkFmml9f/ZDddeYRGj5D21RkAXdG1OLnO3Y+21L4fsLkhByxctfcHoUyWO4pPZXUun CVGWYok3mIDnAoakFEg== X-Proofpoint-GUID: 2q7tF9r-JU_0ggz-bIU9MrWxfepLIQNE X-Proofpoint-ORIG-GUID: 2q7tF9r-JU_0ggz-bIU9MrWxfepLIQNE X-Authority-Analysis: v=2.4 cv=QoFTHFyd c=1 sm=1 tr=0 ts=69ae15fe cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=RzCfie-kr_QcCd8fBx8p:22 a=VnNF1IyMAAAA:8 a=20KFwNOVAAAA:8 a=IO535qWdJy4Oo3HXDe8A:9 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-08_07,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 spamscore=0 priorityscore=1501 phishscore=0 lowpriorityscore=0 adultscore=0 clxscore=1015 malwarescore=0 suspectscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603090003 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=148.163.158.5; envelope-from=jrossi@linux.ibm.com; helo=mx0b-001b2d01.pphosted.com X-Spam_score_int: -9 X-Spam_score: -1.0 X-Spam_bar: - X-Spam_report: (-1.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1773016615982154100 Content-Type: text/plain; charset="utf-8" From: Jared Rossi Remove the duplicate definitions from hw/s390x/ipl.h and pc-bios/s390-ccw/i= plb.h and add a shared definition. The new definition is an enum to enforce defa= ult handling in switches. Because the IPL type is determined by the IPLB, and because an IPLB is not strictly necessary, the IPL type is set to a default value if not otherwise specified. A default IPL type is required so future functionality may add IPL new bus and/or device types that dictate specific behavior during IPL. Reviewed-by: Thomas Huth Signed-off-by: Jared Rossi --- hw/s390x/ipl.h | 5 ----- include/hw/s390x/ipl/qipl.h | 10 ++++++++++ pc-bios/s390-ccw/iplb.h | 4 ---- pc-bios/s390-ccw/main.c | 14 ++++++++++---- pc-bios/s390-ccw/virtio.h | 1 + 5 files changed, 21 insertions(+), 13 deletions(-) diff --git a/hw/s390x/ipl.h b/hw/s390x/ipl.h index 086e57681c..c542d30ce2 100644 --- a/hw/s390x/ipl.h +++ b/hw/s390x/ipl.h @@ -103,11 +103,6 @@ QEMU_BUILD_BUG_MSG(offsetof(S390IPLState, iplb) & 3, "= alignment of iplb wrong"); #define DIAG308_PV_STORE 9 #define DIAG308_PV_START 10 =20 -#define S390_IPL_TYPE_FCP 0x00 -#define S390_IPL_TYPE_CCW 0x02 -#define S390_IPL_TYPE_PV 0x05 -#define S390_IPL_TYPE_QEMU_SCSI 0xff - #define S390_IPLB_HEADER_LEN 8 #define S390_IPLB_MIN_PV_LEN 148 #define S390_IPLB_MIN_CCW_LEN 200 diff --git a/include/hw/s390x/ipl/qipl.h b/include/hw/s390x/ipl/qipl.h index 6824391111..6dc12dd859 100644 --- a/include/hw/s390x/ipl/qipl.h +++ b/include/hw/s390x/ipl/qipl.h @@ -20,6 +20,16 @@ #define LOADPARM_LEN 8 #define NO_LOADPARM "\0\0\0\0\0\0\0\0" =20 +enum S390IplType { + S390_IPL_TYPE_FCP =3D 0x00, + S390_IPL_TYPE_CCW =3D 0x02, + S390_IPL_TYPE_PV =3D 0x05, + S390_IPL_TYPE_QEMU_SCSI =3D 0xff +}; +typedef enum S390IplType S390IplType; + +#define QEMU_DEFAULT_IPL S390_IPL_TYPE_CCW + /* * The QEMU IPL Parameters will be stored at absolute address * 204 (0xcc) which means it is 32-bit word aligned but not diff --git a/pc-bios/s390-ccw/iplb.h b/pc-bios/s390-ccw/iplb.h index 08f259ff31..926e8eed5d 100644 --- a/pc-bios/s390-ccw/iplb.h +++ b/pc-bios/s390-ccw/iplb.h @@ -23,10 +23,6 @@ extern QemuIplParameters qipl; extern IplParameterBlock iplb __attribute__((__aligned__(PAGE_SIZE))); extern bool have_iplb; =20 -#define S390_IPL_TYPE_FCP 0x00 -#define S390_IPL_TYPE_CCW 0x02 -#define S390_IPL_TYPE_QEMU_SCSI 0xff - static inline bool manage_iplb(IplParameterBlock *iplb, bool store) { register unsigned long addr asm("0") =3D (unsigned long) iplb; diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c index 8e2c99bee1..2e9261904f 100644 --- a/pc-bios/s390-ccw/main.c +++ b/pc-bios/s390-ccw/main.c @@ -149,7 +149,7 @@ static bool find_subch(int dev_no) return false; } =20 -static void menu_setup(void) +static void menu_setup(VDev *vdev) { if (memcmp(loadparm_str, LOADPARM_PROMPT, LOADPARM_LEN) =3D=3D 0) { menu_set_parms(QIPL_FLAG_BM_OPTS_CMD, 0); @@ -162,11 +162,13 @@ static void menu_setup(void) return; } =20 - switch (iplb.pbt) { + switch (vdev->ipl_type) { case S390_IPL_TYPE_CCW: case S390_IPL_TYPE_QEMU_SCSI: menu_set_parms(qipl.qipl_flags & BOOT_MENU_FLAG_MASK, qipl.boot_menu_timeout); + /* fall through */ + default: return; } } @@ -190,6 +192,7 @@ static void css_setup(void) static void boot_setup(void) { char lpmsg[] =3D "LOADPARM=3D[________]\n"; + VDev *vdev =3D virtio_get_device(); =20 if (have_iplb && memcmp(iplb.loadparm, NO_LOADPARM, LOADPARM_LEN) !=3D= 0) { ebcdic_to_ascii((char *) iplb.loadparm, loadparm_str, LOADPARM_LEN= ); @@ -198,7 +201,10 @@ static void boot_setup(void) } =20 if (have_iplb) { - menu_setup(); + vdev->ipl_type =3D iplb.pbt; + menu_setup(vdev); + } else { + vdev->ipl_type =3D QEMU_DEFAULT_IPL; } =20 memcpy(lpmsg + 10, loadparm_str, 8); @@ -216,7 +222,7 @@ static bool find_boot_device(void) VDev *vdev =3D virtio_get_device(); bool found =3D false; =20 - switch (iplb.pbt) { + switch (vdev->ipl_type) { case S390_IPL_TYPE_CCW: vdev->scsi_device_selected =3D false; debug_print_int("device no. ", iplb.ccw.devno); diff --git a/pc-bios/s390-ccw/virtio.h b/pc-bios/s390-ccw/virtio.h index 06ba4e45ac..391d6ff2f7 100644 --- a/pc-bios/s390-ccw/virtio.h +++ b/pc-bios/s390-ccw/virtio.h @@ -238,6 +238,7 @@ struct VDev { VirtioGDN guessed_disk_nature; SubChannelId schid; SenseId senseid; + S390IplType ipl_type; union { VirtioBlkConfig blk; VirtioScsiConfig scsi; --=20 2.52.0 From nobody Sat Apr 11 21:30:05 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1773016702; cv=none; d=zohomail.com; s=zohoarc; b=AnlxVj91W+zcCFfsk62yW8k8174yx42XID5RAJJpVn9txs656d/pW3JtBYWkwD6yARcy1XI4Lr4XoaIWDG9aDIi6V/K5N6omv9DvRz/mFj3mKoLnwSwDiWbKVmea/5uXMpa5/eEuc7Yy8XvbipgEsoLsyY43CxTIzlXeE2wvcZY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773016702; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=cftdhsCzw0cW19U7lpVE+LbFTB98oOWTDc111Gdzzhg=; b=XdenJy4uL1oApb6C/aK5ZNBDZPHUEn2YQqslETqsaqrL1vqF+BqvjpM5SmxS5QBno0fc/bhYJTWhixmTOVf3FagRHnQXBaqfRqSv7wz0E9tGChKuoAkjWpQRfo0samjSLi5Vm96yOjA7ht/jmj6fIKO+gBalUIC6NaJ4FOvTv5c= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1773016702054769.8887428642753; Sun, 8 Mar 2026 17:38:22 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vzObd-0006KY-If; Sun, 08 Mar 2026 20:36:21 -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 1vzObb-0006JO-MG; Sun, 08 Mar 2026 20:36:19 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vzOba-0001ed-2Y; Sun, 08 Mar 2026 20:36:19 -0400 Received: from pps.filterd (m0353725.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6289wVNl083367; Mon, 9 Mar 2026 00:36:17 GMT Received: from ppma11.dal12v.mail.ibm.com (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4crd1mcd8b-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 09 Mar 2026 00:36:16 +0000 (GMT) Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1]) by ppma11.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 628NZYNw015706; Mon, 9 Mar 2026 00:36:16 GMT Received: from smtprelay06.dal12v.mail.ibm.com ([172.16.1.8]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 4cs121tqmy-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 09 Mar 2026 00:36:16 +0000 Received: from smtpav04.wdc07v.mail.ibm.com (smtpav04.wdc07v.mail.ibm.com [10.39.53.231]) by smtprelay06.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 6290aEMK4391566 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 9 Mar 2026 00:36:15 GMT Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C954358052; Mon, 9 Mar 2026 00:36:14 +0000 (GMT) Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 6D73558050; Mon, 9 Mar 2026 00:36:13 +0000 (GMT) Received: from t15.ibmuc.com (unknown [9.61.180.105]) by smtpav04.wdc07v.mail.ibm.com (Postfix) with ESMTP; Mon, 9 Mar 2026 00:36:13 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=cftdhsCzw0cW19U7l pVE+LbFTB98oOWTDc111Gdzzhg=; b=NGW9cHPnwhpV+qvMZa4kfj26FC2QKgbMW K9GbZGDk7acW4Ce4F1dRYZrQF/YWszmjZXandS+2I6Xop3m5iDQTqvrNnRYLLB+z T0urGRl2STctWhi1W0ooKFum6r5x87aBuk0kNlMogNRQoHJtxmsqP3WjAKLP247I vLPO2WalZqc8PnKvw9F5Yf7qlt3vEPgV8O8yJsoHR78NRJQ20rgjSj0TkanWg893 iq1QYi/uwUZ80FQ57Cn5njCWQNmKAKJ6yS+MPgLgXWAFLAqa1tA631wgcQUGc/2h e5Sq1EHrZd2DKZ72ETF4SQUslXQw0HX+anS1ZjEXHaaLvD7elsorA== From: jrossi@linux.ibm.com To: qemu-devel@nongnu.org, qemu-s390x@nongnu.org, thuth@redhat.com, mst@redhat.com Cc: jjherne@linux.ibm.com, alifm@linux.ibm.com, farman@linux.ibm.com, mjrosato@linux.ibm.com, jrossi@linux.ibm.com, zycai@linux.ibm.com Subject: [PATCH v5 05/15] pc-bios/s390-ccw: Store device type independent of sense data Date: Sun, 8 Mar 2026 20:35:51 -0400 Message-ID: <20260309003601.242634-6-jrossi@linux.ibm.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260309003601.242634-1-jrossi@linux.ibm.com> References: <20260309003601.242634-1-jrossi@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Authority-Analysis: v=2.4 cv=ds3Wylg4 c=1 sm=1 tr=0 ts=69ae1600 cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=V8glGbnc2Ofi9Qvn3v5h:22 a=VnNF1IyMAAAA:8 a=20KFwNOVAAAA:8 a=qVW2lH4TfVjATuXUM1kA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA5MDAwMyBTYWx0ZWRfX7xnECozngYbl oanCmIKWZ/5M8TvUaxkIcHa3oeP0DExepsY8BMKEc6HFJe1EwPcbY/Czxhp38xA/whgTeyeZjf4 DLZYfV1qti/jLUZP0uIw3xkMZMhDBTUng++Fz+6l4zUiiqcYgosxoreADzKIbmBEr61dS7g8tdR AJEPD9kaKzrGtzqwxXz0lExMUa3ZaQP1A7H+vlAQarNP2gRpApa82tsKYMNMnZ8z9YCa7kCtm9N 09kSar4Z4RscMR2MAVwihT/GAveQShxFZjCyixuE0zLQtMvBiFYlqQgPQZhL1GECUBM02L/seOW 5aUT1ERnvxNQnXGmWOV0ooMKIvvocPJmhZNdRME5FOTsYhGiaR7yqqShC/Z7kwLn+j+HM5DBOkC 51vuq1tS9+Ppic/zdbog+Xcwz79k57U0novwVXdhk32PG5RjrkKPpKyalaTFt1zdpekpR6B6o5Z kYuwzIXMe69ih+YXryA== X-Proofpoint-GUID: 7WqTk9UOygpYX9mTvtQ8C8AfgORgkv8b X-Proofpoint-ORIG-GUID: 7WqTk9UOygpYX9mTvtQ8C8AfgORgkv8b X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-08_07,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 phishscore=0 clxscore=1015 impostorscore=0 suspectscore=0 priorityscore=1501 lowpriorityscore=0 malwarescore=0 adultscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603090003 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=148.163.158.5; envelope-from=jrossi@linux.ibm.com; helo=mx0b-001b2d01.pphosted.com X-Spam_score_int: -9 X-Spam_score: -1.0 X-Spam_bar: - X-Spam_report: (-1.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1773016703011154100 Content-Type: text/plain; charset="utf-8" From: Jared Rossi Store the device type (e.g. block) directly as an attribute of the VDev rat= her than assume all devices can be identified by accessing CCW specific sense d= ata. Reviewed-by: Thomas Huth Reviewed-by: Farhan Ali Signed-off-by: Jared Rossi --- pc-bios/s390-ccw/main.c | 2 +- pc-bios/s390-ccw/virtio-blkdev.c | 39 +++++++++++++++++++------------- pc-bios/s390-ccw/virtio.c | 11 ++++++--- pc-bios/s390-ccw/virtio.h | 1 + 4 files changed, 33 insertions(+), 20 deletions(-) diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c index 2e9261904f..64bde49710 100644 --- a/pc-bios/s390-ccw/main.c +++ b/pc-bios/s390-ccw/main.c @@ -251,7 +251,7 @@ static int virtio_setup(void) vdev->is_cdrom =3D false; int ret; =20 - switch (vdev->senseid.cu_model) { + switch (vdev->dev_type) { case VIRTIO_ID_NET: puts("Network boot device detected"); return 0; diff --git a/pc-bios/s390-ccw/virtio-blkdev.c b/pc-bios/s390-ccw/virtio-blk= dev.c index 019c2718b1..9cc40e9108 100644 --- a/pc-bios/s390-ccw/virtio-blkdev.c +++ b/pc-bios/s390-ccw/virtio-blkdev.c @@ -53,14 +53,14 @@ int virtio_read_many(unsigned long sector, void *load_a= ddr, int sec_num) { VDev *vdev =3D virtio_get_device(); =20 - switch (vdev->senseid.cu_model) { + switch (vdev->dev_type) { case VIRTIO_ID_BLOCK: return virtio_blk_read_many(vdev, sector, load_addr, sec_num); case VIRTIO_ID_SCSI: return virtio_scsi_read_many(vdev, sector, load_addr, sec_num); + default: + return -1; } - - return -1; } =20 unsigned long virtio_load_direct(unsigned long rec_list1, unsigned long re= c_list2, @@ -119,7 +119,7 @@ void virtio_assume_iso9660(void) { VDev *vdev =3D virtio_get_device(); =20 - switch (vdev->senseid.cu_model) { + switch (vdev->dev_type) { case VIRTIO_ID_BLOCK: vdev->guessed_disk_nature =3D VIRTIO_GDN_SCSI; vdev->config.blk.blk_size =3D VIRTIO_ISO_BLOCK_SIZE; @@ -129,6 +129,8 @@ void virtio_assume_iso9660(void) case VIRTIO_ID_SCSI: vdev->scsi_block_size =3D VIRTIO_ISO_BLOCK_SIZE; break; + default: + return; } } =20 @@ -139,13 +141,15 @@ void virtio_assume_eckd(void) vdev->guessed_disk_nature =3D VIRTIO_GDN_DASD; vdev->blk_factor =3D 1; vdev->config.blk.physical_block_exp =3D 0; - switch (vdev->senseid.cu_model) { + switch (vdev->dev_type) { case VIRTIO_ID_BLOCK: vdev->config.blk.blk_size =3D VIRTIO_DASD_DEFAULT_BLOCK_SIZE; break; case VIRTIO_ID_SCSI: vdev->config.blk.blk_size =3D vdev->scsi_block_size; break; + default: + break; } vdev->config.blk.geometry.heads =3D 15; vdev->config.blk.geometry.sectors =3D @@ -162,50 +166,52 @@ bool virtio_ipl_disk_is_valid(void) return true; } =20 - return (vdev->senseid.cu_model =3D=3D VIRTIO_ID_BLOCK || - vdev->senseid.cu_model =3D=3D VIRTIO_ID_SCSI) && - blksize >=3D 512 && blksize <=3D 4096; + return (vdev->dev_type =3D=3D VIRTIO_ID_BLOCK || vdev->dev_type =3D=3D= VIRTIO_ID_SCSI) + && blksize >=3D 512 && blksize <=3D 4096; } =20 int virtio_get_block_size(void) { VDev *vdev =3D virtio_get_device(); =20 - switch (vdev->senseid.cu_model) { + switch (vdev->dev_type) { case VIRTIO_ID_BLOCK: return vdev->config.blk.blk_size; case VIRTIO_ID_SCSI: return vdev->scsi_block_size; + default: + return 0; } - return 0; } =20 uint8_t virtio_get_heads(void) { VDev *vdev =3D virtio_get_device(); =20 - switch (vdev->senseid.cu_model) { + switch (vdev->dev_type) { case VIRTIO_ID_BLOCK: return vdev->config.blk.geometry.heads; case VIRTIO_ID_SCSI: return vdev->guessed_disk_nature =3D=3D VIRTIO_GDN_DASD ? vdev->config.blk.geometry.heads : 255; + default: + return 0; } - return 0; } =20 uint8_t virtio_get_sectors(void) { VDev *vdev =3D virtio_get_device(); =20 - switch (vdev->senseid.cu_model) { + switch (vdev->dev_type) { case VIRTIO_ID_BLOCK: return vdev->config.blk.geometry.sectors; case VIRTIO_ID_SCSI: return vdev->guessed_disk_nature =3D=3D VIRTIO_GDN_DASD ? vdev->config.blk.geometry.sectors : 63; + default: + return 0; } - return 0; } =20 uint64_t virtio_get_blocks(void) @@ -213,13 +219,14 @@ uint64_t virtio_get_blocks(void) VDev *vdev =3D virtio_get_device(); const uint64_t factor =3D virtio_get_block_size() / VIRTIO_SECTOR_SIZE; =20 - switch (vdev->senseid.cu_model) { + switch (vdev->dev_type) { case VIRTIO_ID_BLOCK: return vdev->config.blk.capacity / factor; case VIRTIO_ID_SCSI: return vdev->scsi_last_block / factor; + default: + return 0; } - return 0; } =20 int virtio_blk_setup_device(SubChannelId schid) diff --git a/pc-bios/s390-ccw/virtio.c b/pc-bios/s390-ccw/virtio.c index f384a990dc..5dd407d5c9 100644 --- a/pc-bios/s390-ccw/virtio.c +++ b/pc-bios/s390-ccw/virtio.c @@ -41,7 +41,7 @@ VDev *virtio_get_device(void) =20 VirtioDevType virtio_get_device_type(void) { - return vdev.senseid.cu_model; + return vdev.dev_type; } =20 /* virtio spec v1.0 para 4.3.3.2 */ @@ -248,7 +248,7 @@ int virtio_setup_ccw(VDev *vdev) return -EIO; } =20 - switch (vdev->senseid.cu_model) { + switch (vdev->dev_type) { case VIRTIO_ID_NET: vdev->nr_vqs =3D 2; vdev->cmd_vr_idx =3D 0; @@ -346,12 +346,17 @@ bool virtio_is_supported(SubChannelId schid) true)) { return false; } + + vdev.dev_type =3D vdev.senseid.cu_model; + if (vdev.senseid.cu_type =3D=3D 0x3832) { - switch (vdev.senseid.cu_model) { + switch (vdev.dev_type) { case VIRTIO_ID_BLOCK: case VIRTIO_ID_SCSI: case VIRTIO_ID_NET: return true; + default: + return false; } } return false; diff --git a/pc-bios/s390-ccw/virtio.h b/pc-bios/s390-ccw/virtio.h index 391d6ff2f7..39b507b221 100644 --- a/pc-bios/s390-ccw/virtio.h +++ b/pc-bios/s390-ccw/virtio.h @@ -239,6 +239,7 @@ struct VDev { SubChannelId schid; SenseId senseid; S390IplType ipl_type; + VirtioDevType dev_type; union { VirtioBlkConfig blk; VirtioScsiConfig scsi; --=20 2.52.0 From nobody Sat Apr 11 21:30:05 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1773016614; cv=none; d=zohomail.com; s=zohoarc; b=RIjswNZSgCOwtiFdDL4QjhIM/JsY/KeMPVprtqs42T8LcyXqkzKGt3GY44I917/CTv2r9ISGro8c/CgVY1Uh1H3/EfVdPeiFaynlBHJ4WEWuUi/644wPYg9jJQWjHHJy6gxLkc791BzQ2a4HNDGPfekwg8dIaqjqW+BxNQmWOEo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773016614; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=rpM3S6ALV1pTB4OpUh1Pk8KVbC/X/Cukw5yHare37nA=; b=lmq39w/jqsRNeUa4kY0gG56UsVAEp3+Uvyf/FUYY9s9w23o4L/XeRrj+NwJ8GH6g0Q4+bKyCsdXXkcx5eIPaT0gkQXMmmXgyqhIe/7DYUpsBIJmr9pkXCac/Vp95FM4FeP0trmEeQwg+4rJ+nNEz6OZqajrJUl+RncqIh7UV3Qk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1773016614718826.3979379275471; Sun, 8 Mar 2026 17:36:54 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vzObm-0006NP-Gh; Sun, 08 Mar 2026 20:36:30 -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 1vzObe-0006Kp-SM; Sun, 08 Mar 2026 20:36:23 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vzObc-0001ew-8q; Sun, 08 Mar 2026 20:36:22 -0400 Received: from pps.filterd (m0353725.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 628Dt6YB512979; Mon, 9 Mar 2026 00:36:19 GMT Received: from ppma23.wdc07v.mail.ibm.com (5d.69.3da9.ip4.static.sl-reverse.com [169.61.105.93]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4crd1mcd8d-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 09 Mar 2026 00:36:18 +0000 (GMT) Received: from pps.filterd (ppma23.wdc07v.mail.ibm.com [127.0.0.1]) by ppma23.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 628MV9Nc023327; Mon, 9 Mar 2026 00:36:18 GMT Received: from smtprelay01.wdc07v.mail.ibm.com ([172.16.1.68]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4cryukawf1-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 09 Mar 2026 00:36:18 +0000 Received: from smtpav04.wdc07v.mail.ibm.com (smtpav04.wdc07v.mail.ibm.com [10.39.53.231]) by smtprelay01.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 6290aG0p3605310 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 9 Mar 2026 00:36:17 GMT Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id D0ABB58050; Mon, 9 Mar 2026 00:36:16 +0000 (GMT) Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id A438A58045; Mon, 9 Mar 2026 00:36:15 +0000 (GMT) Received: from t15.ibmuc.com (unknown [9.61.180.105]) by smtpav04.wdc07v.mail.ibm.com (Postfix) with ESMTP; Mon, 9 Mar 2026 00:36:15 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=rpM3S6ALV1pTB4OpU h1Pk8KVbC/X/Cukw5yHare37nA=; b=DcX4NbLvd+EnzAZSzZLTsAG6YUOBQRvd6 rgzQNp1Vec6k6RURhdIuSBOtwawASmPgJih/kfw+5z1AaJGVbJf1yUPGZN0B3Gqd aYc04Ss2BQpvYcB3V9/KR5bumKbfcBHfLyrOZaOCOsr2hB2LwWOdi+CIvQY6ICff 486SJnpvxG2orOFe3BkiTyb1W7eTEqNduEci2GcUsH57AGxmHJiBwv7faNfu5FyY DUpUbcOkp/oC2vfjTBTGlX7MFiyH2x7AuRGQfYU8QyoJILy4qwAgo+biag3sWguV OpPzBuJV0i8pbgkrGF05ZHA3KNhQK2ViSxV8z0DBDTygLt6JoWDPA== From: jrossi@linux.ibm.com To: qemu-devel@nongnu.org, qemu-s390x@nongnu.org, thuth@redhat.com, mst@redhat.com Cc: jjherne@linux.ibm.com, alifm@linux.ibm.com, farman@linux.ibm.com, mjrosato@linux.ibm.com, jrossi@linux.ibm.com, zycai@linux.ibm.com Subject: [PATCH v5 06/15] pc-bios/s390-ccw: Split virtio-ccw and generic virtio Date: Sun, 8 Mar 2026 20:35:52 -0400 Message-ID: <20260309003601.242634-7-jrossi@linux.ibm.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260309003601.242634-1-jrossi@linux.ibm.com> References: <20260309003601.242634-1-jrossi@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Authority-Analysis: v=2.4 cv=ds3Wylg4 c=1 sm=1 tr=0 ts=69ae1602 cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=V8glGbnc2Ofi9Qvn3v5h:22 a=VnNF1IyMAAAA:8 a=20KFwNOVAAAA:8 a=ctsVLiZ_AAAA:8 a=J5HRprwtwPFiPHPCACwA:9 a=3VCIHQLkQthbvTRuo98s:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA5MDAwMyBTYWx0ZWRfX7FOEgkulLRqS JltfB1kc9j2A0qdoChlqr3lGUSOz5TCmViGcdn36FRoTkPoabdA4A2Ctr9FMkuJ8+DW+fhnxT/c /Nq1lR7D8qCpWqXSeuEcVcJ1CLVpNZVs1tGjjWMT/RwxmaR30YG+l0Tw7Hd7D/eBcNHyJNbnaTE QBg+KomCOw6mei/o4y/ZYr1+f+MOMBABDUD5gIMklh1dkfUU2kzTFacTxsQuIwEtRL/MR9u++0J t9RMqt+4E+7KdscPX08qe3yoqI8CN7wKMQFe/ngp5nPKdI83fuCvu86yyXLCy2mFtodsi6mSwKB RM+UxY9oJpJGSSUbPCNSak21W8gF9U2MZLo6FE/3sKKIR7hD3jsigo6Nrws4OtbEiTP9Up0LFxL sDQrXj9xHWR2xfhIrZDsE65VUz4CmRbgZ28/EJMnrC7jm4wJIY4SSdScAePkhFk/Ccjg8GDenh1 C8AC/coBdTmUSydHFrg== X-Proofpoint-GUID: zGJGS4AUPqdsO_7Ok6_5efvNo1stvPcE X-Proofpoint-ORIG-GUID: zGJGS4AUPqdsO_7Ok6_5efvNo1stvPcE X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-08_07,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 phishscore=0 clxscore=1015 impostorscore=0 suspectscore=0 priorityscore=1501 lowpriorityscore=0 malwarescore=0 adultscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603090003 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=148.163.158.5; envelope-from=jrossi@linux.ibm.com; helo=mx0b-001b2d01.pphosted.com X-Spam_score_int: -9 X-Spam_score: -1.0 X-Spam_bar: - X-Spam_report: (-1.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1773016617010158500 Content-Type: text/plain; charset="utf-8" From: Jared Rossi Separate the CCW specific virtio routines and create generic wrappers for e= asier reuse of existing virtio functions with non-CCW devices. Reviewed-by: Thomas Huth Reviewed-by: Eric Farman Signed-off-by: Jared Rossi --- pc-bios/s390-ccw/Makefile | 3 +- pc-bios/s390-ccw/main.c | 8 +- pc-bios/s390-ccw/netmain.c | 2 +- pc-bios/s390-ccw/s390-ccw.h | 3 - pc-bios/s390-ccw/virtio-blkdev.c | 15 +- pc-bios/s390-ccw/virtio-ccw.c | 241 +++++++++++++++++++++++++++++++ pc-bios/s390-ccw/virtio-ccw.h | 24 +++ pc-bios/s390-ccw/virtio-net.c | 3 +- pc-bios/s390-ccw/virtio-scsi.c | 8 +- pc-bios/s390-ccw/virtio-scsi.h | 2 +- pc-bios/s390-ccw/virtio.c | 239 +++++------------------------- pc-bios/s390-ccw/virtio.h | 5 +- 12 files changed, 332 insertions(+), 221 deletions(-) create mode 100644 pc-bios/s390-ccw/virtio-ccw.c create mode 100644 pc-bios/s390-ccw/virtio-ccw.h diff --git a/pc-bios/s390-ccw/Makefile b/pc-bios/s390-ccw/Makefile index a0f24c94a8..259cff09db 100644 --- a/pc-bios/s390-ccw/Makefile +++ b/pc-bios/s390-ccw/Makefile @@ -34,7 +34,8 @@ QEMU_DGFLAGS =3D -MMD -MP -MT $@ -MF $(@D)/$(*F).d .PHONY : all clean build-all distclean =20 OBJECTS =3D 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 + virtio.o virtio-net.o virtio-scsi.o virtio-blkdev.o cio.o dasd-ipl.o \ + virtio-ccw.o =20 SLOF_DIR :=3D $(SRC_PATH)/../../roms/SLOF =20 diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c index 64bde49710..32154c5db8 100644 --- a/pc-bios/s390-ccw/main.c +++ b/pc-bios/s390-ccw/main.c @@ -71,6 +71,7 @@ static int is_dev_possibly_bootable(int dev_no, int sch_n= o) bool is_virtio; Schib schib; int r; + VDev *vdev =3D virtio_get_device(); =20 blk_schid.sch_no =3D sch_no; r =3D stsch_err(blk_schid, &schib); @@ -91,7 +92,8 @@ static int is_dev_possibly_bootable(int dev_no, int sch_n= o) * Note: we always have to run virtio_is_supported() here to make * sure that the vdev.senseid data gets pre-initialized correctly */ - is_virtio =3D virtio_is_supported(blk_schid); + vdev->schid =3D blk_schid; + is_virtio =3D virtio_is_supported(vdev); =20 /* No specific devno given, just return whether the device is possibly= bootable */ if (dev_no < 0) { @@ -256,10 +258,10 @@ static int virtio_setup(void) puts("Network boot device detected"); return 0; case VIRTIO_ID_BLOCK: - ret =3D virtio_blk_setup_device(blk_schid); + ret =3D virtio_blk_setup_device(vdev); break; case VIRTIO_ID_SCSI: - ret =3D virtio_scsi_setup_device(blk_schid); + ret =3D virtio_scsi_setup_device(vdev); break; default: puts("\n! No IPL device available !\n"); diff --git a/pc-bios/s390-ccw/netmain.c b/pc-bios/s390-ccw/netmain.c index a9521dff41..651cedf6ef 100644 --- a/pc-bios/s390-ccw/netmain.c +++ b/pc-bios/s390-ccw/netmain.c @@ -500,7 +500,7 @@ static bool find_net_dev(Schib *schib, int dev_no) continue; } enable_subchannel(net_schid); - if (!virtio_is_supported(net_schid)) { + if (!virtio_is_supported(virtio_get_device())) { continue; } if (virtio_get_device_type() !=3D VIRTIO_ID_NET) { diff --git a/pc-bios/s390-ccw/s390-ccw.h b/pc-bios/s390-ccw/s390-ccw.h index 47ea66bd4d..ccd68ff0a4 100644 --- a/pc-bios/s390-ccw/s390-ccw.h +++ b/pc-bios/s390-ccw/s390-ccw.h @@ -66,9 +66,6 @@ void sclp_setup(void); void sclp_get_loadparm_ascii(char *loadparm); int sclp_read(char *str, size_t count); =20 -/* virtio.c */ -bool virtio_is_supported(SubChannelId schid); - /* bootmap.c */ void zipl_load(void); =20 diff --git a/pc-bios/s390-ccw/virtio-blkdev.c b/pc-bios/s390-ccw/virtio-blk= dev.c index 9cc40e9108..9722b6970f 100644 --- a/pc-bios/s390-ccw/virtio-blkdev.c +++ b/pc-bios/s390-ccw/virtio-blkdev.c @@ -12,6 +12,7 @@ #include "s390-ccw.h" #include "virtio.h" #include "virtio-scsi.h" +#include "virtio-ccw.h" =20 #define VIRTIO_BLK_F_GEOMETRY (1 << 4) #define VIRTIO_BLK_F_BLK_SIZE (1 << 6) @@ -229,15 +230,17 @@ uint64_t virtio_get_blocks(void) } } =20 -int virtio_blk_setup_device(SubChannelId schid) +int virtio_blk_setup_device(VDev *vdev) { - VDev *vdev =3D virtio_get_device(); - vdev->guest_features[0] =3D VIRTIO_BLK_F_GEOMETRY | VIRTIO_BLK_F_BLK_S= IZE; - vdev->schid =3D schid; - virtio_setup_ccw(vdev); =20 puts("Using virtio-blk."); =20 - return 0; + switch (vdev->ipl_type) { + case S390_IPL_TYPE_QEMU_SCSI: + case S390_IPL_TYPE_CCW: + return virtio_ccw_setup(vdev); + default: + return 1; + } } diff --git a/pc-bios/s390-ccw/virtio-ccw.c b/pc-bios/s390-ccw/virtio-ccw.c new file mode 100644 index 0000000000..ab98da90c3 --- /dev/null +++ b/pc-bios/s390-ccw/virtio-ccw.c @@ -0,0 +1,241 @@ +/* + * Virtio functionality for CCW devices + * + * Copyright (c) 2013 Alexander Graf + * Copyright 2025 IBM Corp. + * + * Author(s): Jared Rossi + * + * This work is licensed under the terms of the GNU GPL, version 2 or (at + * your option) any later version. See the COPYING file in the top-level + * directory. + */ + +#include +#include "s390-ccw.h" +#include "cio.h" +#include "virtio.h" +#include "virtio-ccw.h" +#include "virtio-scsi.h" +#include "bswap.h" +#include "helper.h" +#include "s390-time.h" + +/* virtio spec v1.0 para 4.3.3.2 */ +static long kvm_hypercall(unsigned long nr, unsigned long param1, + unsigned long param2, unsigned long param3) +{ + register unsigned long r_nr asm("1") =3D nr; + register unsigned long r_param1 asm("2") =3D param1; + register unsigned long r_param2 asm("3") =3D param2; + register unsigned long r_param3 asm("4") =3D param3; + register long retval asm("2"); + + asm volatile ("diag %%r2,%%r4,0x500" + : "=3Dd" (retval) + : "d" (r_nr), "0" (r_param1), "r"(r_param2), "d"(r_param= 3) + : "memory", "cc"); + + return retval; +} + +static int run_ccw(VDev *vdev, int cmd, void *ptr, int len, bool sli) +{ + Ccw1 ccw =3D {}; + + ccw.cmd_code =3D cmd; + ccw.cda =3D (long)ptr; + ccw.count =3D len; + + if (sli) { + ccw.flags |=3D CCW_FLAG_SLI; + } + + return do_cio(vdev->schid, vdev->senseid.cu_type, ptr2u32(&ccw), CCW_F= MT1); +} + +bool virtio_ccw_is_supported(VDev *vdev) +{ + memset(&vdev->senseid, 0, sizeof(vdev->senseid)); + + /* + * Run sense id command. + * The size of the senseid data differs between devices (notably, + * between virtio devices and dasds), so specify the largest possible + * size and suppress the incorrect length indication for smaller sizes. + */ + if (run_ccw(vdev, CCW_CMD_SENSE_ID, &vdev->senseid, sizeof(vdev->sense= id), + true)) { + return false; + } + + vdev->dev_type =3D vdev->senseid.cu_model; + + if (vdev->senseid.cu_type =3D=3D 0x3832) { + switch (vdev->dev_type) { + case VIRTIO_ID_BLOCK: + case VIRTIO_ID_SCSI: + case VIRTIO_ID_NET: + return true; + default: + return false; + } + } + return false; +} + +int drain_irqs_ccw(SubChannelId schid) +{ + Irb irb =3D {}; + int r =3D 0; + + while (1) { + /* FIXME: make use of TPI, for that enable subchannel and isc */ + if (tsch(schid, &irb)) { + /* Might want to differentiate error codes later on. */ + if (irb.scsw.cstat) { + r =3D -EIO; + } else if (irb.scsw.dstat !=3D 0xc) { + r =3D -EIO; + } + return r; + } + } +} + +long virtio_ccw_notify(SubChannelId schid, int vq_idx, long cookie) +{ + return kvm_hypercall(KVM_S390_VIRTIO_CCW_NOTIFY, *(u32 *)&schid, + vq_idx, cookie); +} + +int virtio_ccw_run(VDev *vdev, int vqid, VirtioCmd *cmd) +{ + VRing *vr =3D &vdev->vrings[vqid]; + int i =3D 0; + + do { + vring_send_buf(vr, cmd[i].data, cmd[i].size, + cmd[i].flags | (i ? VRING_HIDDEN_IS_CHAIN : 0)); + } while (cmd[i++].flags & VRING_DESC_F_NEXT); + + vring_wait_reply(); + if (drain_irqs()) { + return -1; + } + return 0; +} + +int virtio_ccw_reset(VDev *vdev) +{ + return run_ccw(vdev, CCW_CMD_VDEV_RESET, NULL, 0, false); +} + +int virtio_ccw_setup(VDev *vdev) +{ + int i, cfg_size =3D 0; + uint8_t status; + struct VirtioFeatureDesc { + uint32_t features; + uint8_t index; + } __attribute__((packed)) feats; + + if (!virtio_ccw_is_supported(vdev)) { + puts("Virtio unsupported for this device ID"); + return -ENODEV; + } + /* device ID has been established now */ + + vdev->config.blk.blk_size =3D 0; /* mark "illegal" - setup started... = */ + vdev->guessed_disk_nature =3D VIRTIO_GDN_NONE; + + virtio_reset(vdev); + + status =3D VIRTIO_CONFIG_S_ACKNOWLEDGE; + if (run_ccw(vdev, CCW_CMD_WRITE_STATUS, &status, sizeof(status), false= )) { + puts("Could not write ACKNOWLEDGE status to host"); + return -EIO; + } + + switch (vdev->dev_type) { + case VIRTIO_ID_NET: + vdev->nr_vqs =3D 2; + vdev->cmd_vr_idx =3D 0; + cfg_size =3D sizeof(vdev->config.net); + break; + case VIRTIO_ID_BLOCK: + vdev->nr_vqs =3D 1; + vdev->cmd_vr_idx =3D 0; + cfg_size =3D sizeof(vdev->config.blk); + break; + case VIRTIO_ID_SCSI: + vdev->nr_vqs =3D 3; + vdev->cmd_vr_idx =3D VR_REQUEST; + cfg_size =3D sizeof(vdev->config.scsi); + break; + default: + puts("Unsupported virtio device"); + return -ENODEV; + } + + status |=3D VIRTIO_CONFIG_S_DRIVER; + if (run_ccw(vdev, CCW_CMD_WRITE_STATUS, &status, sizeof(status), false= )) { + puts("Could not write DRIVER status to host"); + return -EIO; + } + + /* Feature negotiation */ + for (i =3D 0; i < ARRAY_SIZE(vdev->guest_features); i++) { + feats.features =3D 0; + feats.index =3D i; + if (run_ccw(vdev, CCW_CMD_READ_FEAT, &feats, sizeof(feats), false)= ) { + puts("Could not get features bits"); + return -EIO; + } + + vdev->guest_features[i] &=3D bswap32(feats.features); + feats.features =3D bswap32(vdev->guest_features[i]); + if (run_ccw(vdev, CCW_CMD_WRITE_FEAT, &feats, sizeof(feats), false= )) { + puts("Could not set features bits"); + return -EIO; + } + } + + if (run_ccw(vdev, CCW_CMD_READ_CONF, &vdev->config, cfg_size, false)) { + puts("Could not get virtio device configuration"); + return -EIO; + } + + for (i =3D 0; i < vdev->nr_vqs; i++) { + VqInfo info =3D { + .queue =3D (unsigned long long) virtio_get_ring_area(i), + .align =3D KVM_S390_VIRTIO_RING_ALIGN, + .index =3D i, + .num =3D 0, + }; + VqConfig config =3D { + .index =3D i, + .num =3D 0, + }; + + if (run_ccw(vdev, CCW_CMD_READ_VQ_CONF, &config, sizeof(config), + false)) { + puts("Could not get virtio device VQ config"); + return -EIO; + } + info.num =3D config.num; + vring_init(&vdev->vrings[i], &info); + if (run_ccw(vdev, CCW_CMD_SET_VQ, &info, sizeof(info), false)) { + puts("Cannot set VQ info"); + return -EIO; + } + } + + status |=3D VIRTIO_CONFIG_S_DRIVER_OK; + if (run_ccw(vdev, CCW_CMD_WRITE_STATUS, &status, sizeof(status), false= )) { + puts("Could not write DRIVER_OK status to host"); + return -EIO; + } + + return 0; +} diff --git a/pc-bios/s390-ccw/virtio-ccw.h b/pc-bios/s390-ccw/virtio-ccw.h new file mode 100644 index 0000000000..a506767eaa --- /dev/null +++ b/pc-bios/s390-ccw/virtio-ccw.h @@ -0,0 +1,24 @@ +/* + * Virtio definitions for CCW devices + * + * Copyright 2025 IBM Corp. + * Author(s): Jared Rossi + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef VIRTIO_CCW_H +#define VIRTIO_CCW_H + +/* main.c */ +extern SubChannelId blk_schid; + +/* virtio-ccw.c */ +int drain_irqs_ccw(SubChannelId schid); +bool virtio_ccw_is_supported(VDev *vdev); +int virtio_ccw_run(VDev *vdev, int vqid, VirtioCmd *cmd); +long virtio_ccw_notify(SubChannelId schid, int vq_idx, long cookie); +int virtio_ccw_setup(VDev *vdev); +int virtio_ccw_reset(VDev *vdev); + +#endif diff --git a/pc-bios/s390-ccw/virtio-net.c b/pc-bios/s390-ccw/virtio-net.c index 7eb0850069..f58f7ffc55 100644 --- a/pc-bios/s390-ccw/virtio-net.c +++ b/pc-bios/s390-ccw/virtio-net.c @@ -19,6 +19,7 @@ #include #include "s390-ccw.h" #include "virtio.h" +#include "virtio-ccw.h" #include "s390-time.h" #include "helper.h" =20 @@ -54,7 +55,7 @@ int virtio_net_init(void *mac_addr) rx_last_idx =3D 0; =20 vdev->guest_features[0] =3D VIRTIO_NET_F_MAC_BIT; - virtio_setup_ccw(vdev); + virtio_ccw_setup(vdev); =20 if (!(vdev->guest_features[0] & VIRTIO_NET_F_MAC_BIT)) { puts("virtio-net device does not support the MAC address feature"); diff --git a/pc-bios/s390-ccw/virtio-scsi.c b/pc-bios/s390-ccw/virtio-scsi.c index 71db75ce7b..9ea00c6fe6 100644 --- a/pc-bios/s390-ccw/virtio-scsi.c +++ b/pc-bios/s390-ccw/virtio-scsi.c @@ -15,6 +15,7 @@ #include "virtio.h" #include "scsi.h" #include "virtio-scsi.h" +#include "virtio-ccw.h" #include "s390-time.h" #include "helper.h" =20 @@ -476,12 +477,9 @@ static int virtio_scsi_setup(VDev *vdev) return 0; } =20 -int virtio_scsi_setup_device(SubChannelId schid) +int virtio_scsi_setup_device(VDev *vdev) { - VDev *vdev =3D virtio_get_device(); - - vdev->schid =3D schid; - virtio_setup_ccw(vdev); + virtio_ccw_setup(vdev); =20 if (vdev->config.scsi.sense_size !=3D VIRTIO_SCSI_SENSE_SIZE) { puts("Config: sense size mismatch"); diff --git a/pc-bios/s390-ccw/virtio-scsi.h b/pc-bios/s390-ccw/virtio-scsi.h index c5612e16a2..070f24b7e5 100644 --- a/pc-bios/s390-ccw/virtio-scsi.h +++ b/pc-bios/s390-ccw/virtio-scsi.h @@ -69,6 +69,6 @@ static inline bool virtio_scsi_response_ok(const VirtioSc= siCmdResp *r) =20 int virtio_scsi_read_many(VDev *vdev, unsigned long sector, void *load_addr, int sec_n= um); -int virtio_scsi_setup_device(SubChannelId schid); +int virtio_scsi_setup_device(VDev *vdev); =20 #endif /* VIRTIO_SCSI_H */ diff --git a/pc-bios/s390-ccw/virtio.c b/pc-bios/s390-ccw/virtio.c index 5dd407d5c9..956b34ff33 100644 --- a/pc-bios/s390-ccw/virtio.c +++ b/pc-bios/s390-ccw/virtio.c @@ -2,6 +2,9 @@ * Virtio driver bits * * Copyright (c) 2013 Alexander Graf + * Copyright 2025 IBM Corp. + * + * Author(s): Jared Rossi * * This work is licensed under the terms of the GNU GPL, version 2 or (at * your option) any later version. See the COPYING file in the top-level @@ -13,6 +16,7 @@ #include "cio.h" #include "virtio.h" #include "virtio-scsi.h" +#include "virtio-ccw.h" #include "bswap.h" #include "helper.h" #include "s390-time.h" @@ -44,28 +48,9 @@ VirtioDevType virtio_get_device_type(void) return vdev.dev_type; } =20 -/* virtio spec v1.0 para 4.3.3.2 */ -static long kvm_hypercall(unsigned long nr, unsigned long param1, - unsigned long param2, unsigned long param3) +char *virtio_get_ring_area(int ring_num) { - register unsigned long r_nr asm("1") =3D nr; - register unsigned long r_param1 asm("2") =3D param1; - register unsigned long r_param2 asm("3") =3D param2; - register unsigned long r_param3 asm("4") =3D param3; - register long retval asm("2"); - - asm volatile ("diag %%r2,%%r4,0x500" - : "=3Dd" (retval) - : "d" (r_nr), "0" (r_param1), "r"(r_param2), "d"(r_param= 3) - : "memory", "cc"); - - return retval; -} - -static long virtio_notify(SubChannelId schid, int vq_idx, long cookie) -{ - return kvm_hypercall(KVM_S390_VIRTIO_CCW_NOTIFY, *(u32 *)&schid, - vq_idx, cookie); + return ring_area + ring_num * VIRTIO_RING_SIZE; } =20 /*********************************************** @@ -74,39 +59,27 @@ static long virtio_notify(SubChannelId schid, int vq_id= x, long cookie) =20 int drain_irqs(void) { - Irb irb =3D {}; - int r =3D 0; - - while (1) { - /* FIXME: make use of TPI, for that enable subchannel and isc */ - if (tsch(vdev.schid, &irb)) { - /* Might want to differentiate error codes later on. */ - if (irb.scsw.cstat) { - r =3D -EIO; - } else if (irb.scsw.dstat !=3D 0xc) { - r =3D -EIO; - } - return r; - } + switch (vdev.ipl_type) { + case S390_IPL_TYPE_QEMU_SCSI: + case S390_IPL_TYPE_CCW: + return drain_irqs_ccw(vdev.schid); + default: + return 0; } } =20 -static int run_ccw(VDev *vdev, int cmd, void *ptr, int len, bool sli) +int virtio_run(VDev *vdev, int vqid, VirtioCmd *cmd) { - Ccw1 ccw =3D {}; - - ccw.cmd_code =3D cmd; - ccw.cda =3D (long)ptr; - ccw.count =3D len; - - if (sli) { - ccw.flags |=3D CCW_FLAG_SLI; + switch (vdev->ipl_type) { + case S390_IPL_TYPE_QEMU_SCSI: + case S390_IPL_TYPE_CCW: + return virtio_ccw_run(vdev, vqid, cmd); + default: + return -1; } - - return do_cio(vdev->schid, vdev->senseid.cu_type, ptr2u32(&ccw), CCW_F= MT1); } =20 -static void vring_init(VRing *vr, VqInfo *info) +void vring_init(VRing *vr, VqInfo *info) { void *p =3D (void *) info->queue; =20 @@ -134,7 +107,15 @@ static void vring_init(VRing *vr, VqInfo *info) =20 bool vring_notify(VRing *vr) { - vr->cookie =3D virtio_notify(vdev.schid, vr->id, vr->cookie); + switch (vdev.ipl_type) { + case S390_IPL_TYPE_QEMU_SCSI: + case S390_IPL_TYPE_CCW: + vr->cookie =3D virtio_ccw_notify(vdev.schid, vr->id, vr->cookie); + break; + default: + return 1; + } + return vr->cookie >=3D 0; } =20 @@ -200,164 +181,24 @@ int vring_wait_reply(void) return 1; } =20 -int virtio_run(VDev *vdev, int vqid, VirtioCmd *cmd) -{ - VRing *vr =3D &vdev->vrings[vqid]; - int i =3D 0; - - do { - vring_send_buf(vr, cmd[i].data, cmd[i].size, - cmd[i].flags | (i ? VRING_HIDDEN_IS_CHAIN : 0)); - } while (cmd[i++].flags & VRING_DESC_F_NEXT); - - vring_wait_reply(); - if (drain_irqs()) { - return -1; - } - return 0; -} - int virtio_reset(VDev *vdev) { - return run_ccw(vdev, CCW_CMD_VDEV_RESET, NULL, 0, false); -} - -int virtio_setup_ccw(VDev *vdev) -{ - int i, cfg_size =3D 0; - uint8_t status; - struct VirtioFeatureDesc { - uint32_t features; - uint8_t index; - } __attribute__((packed)) feats; - - if (!virtio_is_supported(vdev->schid)) { - puts("Virtio unsupported for this device ID"); - return -ENODEV; - } - /* device ID has been established now */ - - vdev->config.blk.blk_size =3D 0; /* mark "illegal" - setup started... = */ - vdev->guessed_disk_nature =3D VIRTIO_GDN_NONE; - - virtio_reset(vdev); - - status =3D VIRTIO_CONFIG_S_ACKNOWLEDGE; - if (run_ccw(vdev, CCW_CMD_WRITE_STATUS, &status, sizeof(status), false= )) { - puts("Could not write ACKNOWLEDGE status to host"); - return -EIO; - } - - switch (vdev->dev_type) { - case VIRTIO_ID_NET: - vdev->nr_vqs =3D 2; - vdev->cmd_vr_idx =3D 0; - cfg_size =3D sizeof(vdev->config.net); - break; - case VIRTIO_ID_BLOCK: - vdev->nr_vqs =3D 1; - vdev->cmd_vr_idx =3D 0; - cfg_size =3D sizeof(vdev->config.blk); - break; - case VIRTIO_ID_SCSI: - vdev->nr_vqs =3D 3; - vdev->cmd_vr_idx =3D VR_REQUEST; - cfg_size =3D sizeof(vdev->config.scsi); - break; + switch (vdev->ipl_type) { + case S390_IPL_TYPE_QEMU_SCSI: + case S390_IPL_TYPE_CCW: + return virtio_ccw_reset(vdev); default: - puts("Unsupported virtio device"); - return -ENODEV; - } - - status |=3D VIRTIO_CONFIG_S_DRIVER; - if (run_ccw(vdev, CCW_CMD_WRITE_STATUS, &status, sizeof(status), false= )) { - puts("Could not write DRIVER status to host"); - return -EIO; - } - - /* Feature negotiation */ - for (i =3D 0; i < ARRAY_SIZE(vdev->guest_features); i++) { - feats.features =3D 0; - feats.index =3D i; - if (run_ccw(vdev, CCW_CMD_READ_FEAT, &feats, sizeof(feats), false)= ) { - puts("Could not get features bits"); - return -EIO; - } - - vdev->guest_features[i] &=3D bswap32(feats.features); - feats.features =3D bswap32(vdev->guest_features[i]); - if (run_ccw(vdev, CCW_CMD_WRITE_FEAT, &feats, sizeof(feats), false= )) { - puts("Could not set features bits"); - return -EIO; - } - } - - if (run_ccw(vdev, CCW_CMD_READ_CONF, &vdev->config, cfg_size, false)) { - puts("Could not get virtio device configuration"); - return -EIO; - } - - for (i =3D 0; i < vdev->nr_vqs; i++) { - VqInfo info =3D { - .queue =3D (unsigned long long) ring_area + (i * VIRTIO_RING_S= IZE), - .align =3D KVM_S390_VIRTIO_RING_ALIGN, - .index =3D i, - .num =3D 0, - }; - VqConfig config =3D { - .index =3D i, - .num =3D 0, - }; - - if (run_ccw(vdev, CCW_CMD_READ_VQ_CONF, &config, sizeof(config), - false)) { - puts("Could not get virtio device VQ config"); - return -EIO; - } - info.num =3D config.num; - vring_init(&vdev->vrings[i], &info); - if (run_ccw(vdev, CCW_CMD_SET_VQ, &info, sizeof(info), false)) { - puts("Cannot set VQ info"); - return -EIO; - } - } - - status |=3D VIRTIO_CONFIG_S_DRIVER_OK; - if (run_ccw(vdev, CCW_CMD_WRITE_STATUS, &status, sizeof(status), false= )) { - puts("Could not write DRIVER_OK status to host"); - return -EIO; + return -1; } - - return 0; } =20 -bool virtio_is_supported(SubChannelId schid) +bool virtio_is_supported(VDev *vdev) { - vdev.schid =3D schid; - memset(&vdev.senseid, 0, sizeof(vdev.senseid)); - - /* - * Run sense id command. - * The size of the senseid data differs between devices (notably, - * between virtio devices and dasds), so specify the largest possible - * size and suppress the incorrect length indication for smaller sizes. - */ - if (run_ccw(&vdev, CCW_CMD_SENSE_ID, &vdev.senseid, sizeof(vdev.sensei= d), - true)) { + switch (vdev->ipl_type) { + case S390_IPL_TYPE_QEMU_SCSI: + case S390_IPL_TYPE_CCW: + return virtio_ccw_is_supported(vdev); + default: return false; } - - vdev.dev_type =3D vdev.senseid.cu_model; - - if (vdev.senseid.cu_type =3D=3D 0x3832) { - switch (vdev.dev_type) { - case VIRTIO_ID_BLOCK: - case VIRTIO_ID_SCSI: - case VIRTIO_ID_NET: - return true; - default: - return false; - } - } - return false; } diff --git a/pc-bios/s390-ccw/virtio.h b/pc-bios/s390-ccw/virtio.h index 39b507b221..c3cb5a6ee3 100644 --- a/pc-bios/s390-ccw/virtio.h +++ b/pc-bios/s390-ccw/virtio.h @@ -108,6 +108,7 @@ struct VRing { }; typedef struct VRing VRing; =20 +char *virtio_get_ring_area(int ring_num); =20 /*********************************************** * Virtio block * @@ -269,6 +270,8 @@ struct VirtioCmd { }; typedef struct VirtioCmd VirtioCmd; =20 +void vring_init(VRing *vr, VqInfo *info); +bool virtio_is_supported(VDev *vdev); bool vring_notify(VRing *vr); int drain_irqs(void); void vring_send_buf(VRing *vr, void *p, int len, int flags); @@ -283,7 +286,7 @@ int virtio_net_init(void *mac_addr); void virtio_net_deinit(void); =20 /* virtio-blkdev.c */ -int virtio_blk_setup_device(SubChannelId schid); +int virtio_blk_setup_device(VDev *vdev); int virtio_read(unsigned long sector, void *load_addr); unsigned long virtio_load_direct(unsigned long rec_list1, unsigned long re= c_list2, void *load_addr); --=20 2.52.0 From nobody Sat Apr 11 21:30:05 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1773016689; cv=none; d=zohomail.com; s=zohoarc; b=mEjf3Bi6ueDKS50ZePBDOGexMo8npGBVdrEqJ0SXfP8mxJLnVLaBskJXbAG9cZziK1L0Z+7qFUdmZGOfdWrUpe7jlkbM8P+uRi3tIk3tlnSDHWcgqphe1/2FXp5vjkgzrys05oM9eXhn+iJZ1mkhHDA0hcWTcN9OhOAUmFWBZZc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773016689; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=HLx3Mu+NgaVHppksomvj1s6zgG4sLA3O4PUaVqcKOxA=; b=L1IWmkY3q9eNhhHpJCSBrSrE878nGQ2aMtzTmWv1e3mlR6g3oGSlgIPvAkObOJdGt9Q2lseB3Kfgh2uQOEbPQzRysLn0phRVEdW+6b8Zp0so2Rp6itpkEczx9yvOUg/TCqwmgPQ8x0wjyjOVpUBfEdKvAirCbIBE/30x56v4W14= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1773016689051946.1348624216494; Sun, 8 Mar 2026 17:38:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vzObm-0006NZ-H1; Sun, 08 Mar 2026 20:36:30 -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 1vzObg-0006L0-JU; Sun, 08 Mar 2026 20:36:24 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vzObf-0001fB-4X; Sun, 08 Mar 2026 20:36:24 -0400 Received: from pps.filterd (m0356517.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 628Ni7el1643088; Mon, 9 Mar 2026 00:36:21 GMT Received: from ppma13.dal12v.mail.ibm.com (dd.9e.1632.ip4.static.sl-reverse.com [50.22.158.221]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4crcyw4kf0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 09 Mar 2026 00:36:21 +0000 (GMT) Received: from pps.filterd (ppma13.dal12v.mail.ibm.com [127.0.0.1]) by ppma13.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 628N3hPJ025041; Mon, 9 Mar 2026 00:36:20 GMT Received: from smtprelay04.wdc07v.mail.ibm.com ([172.16.1.71]) by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 4cs0jjtt9g-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 09 Mar 2026 00:36:20 +0000 Received: from smtpav04.wdc07v.mail.ibm.com (smtpav04.wdc07v.mail.ibm.com [10.39.53.231]) by smtprelay04.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 6290aJuZ33555122 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 9 Mar 2026 00:36:19 GMT Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id F14FF58050; Mon, 9 Mar 2026 00:36:18 +0000 (GMT) Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id D912058045; Mon, 9 Mar 2026 00:36:17 +0000 (GMT) Received: from t15.ibmuc.com (unknown [9.61.180.105]) by smtpav04.wdc07v.mail.ibm.com (Postfix) with ESMTP; Mon, 9 Mar 2026 00:36:17 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=HLx3Mu+NgaVHppkso mvj1s6zgG4sLA3O4PUaVqcKOxA=; b=X6q+M3aY9CloHbVXBu7oEJC6uUTw7t8TH YWe6hhv3zYya4hMBs1fKcEP7Tq6FVre/QVYHvLGIV0AURAQpcYTz8J3gBGyEe6Rz 9EDyKwghLb+6rzySPYwk5W31V3T5OswXfwEAjciH24Gxi5vFbapsAmba9eSlHpnY BCPYfdl0I7uMxak1FB9sHdjcWZ4hz3nSyYJKaWUV28NSbAqDY0CYxTYMBPqY2l7B oknZFzjxmm73Ah87LmmySoBiJBN4+FfJcR/43lU7w3JoUY4wAOvBzQB42n7JXVe4 Ts/WeKcTPbwFY+gO3d7a82iSVBbzYlIBonmchM0xt72SWE3CueqJQ== From: jrossi@linux.ibm.com To: qemu-devel@nongnu.org, qemu-s390x@nongnu.org, thuth@redhat.com, mst@redhat.com Cc: jjherne@linux.ibm.com, alifm@linux.ibm.com, farman@linux.ibm.com, mjrosato@linux.ibm.com, jrossi@linux.ibm.com, zycai@linux.ibm.com Subject: [PATCH v5 07/15] include/hw/s390x: Move CLP definitions for easier BIOS access Date: Sun, 8 Mar 2026 20:35:53 -0400 Message-ID: <20260309003601.242634-8-jrossi@linux.ibm.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260309003601.242634-1-jrossi@linux.ibm.com> References: <20260309003601.242634-1-jrossi@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA5MDAwMyBTYWx0ZWRfX2i3O5yMl+6p/ Xb2kHTt4AnnGiXXApboji9/U4OiK7+RZF4yCs9gMlbdMHqno/u15Z07ATDdTlai/3aKnLbrkYM7 ZJCN41X7L3BfW2Xo1F338DTFQIGEX99J4IqzeCk3/PbFUI0W48VDBj6dvr1TND3dOlNiZTF2mmW QFrplIwMyKoE/nErmThRLzpfRIOwhbrqwynNHLV+myL8LlNfhuxKBOjzInb95zq8jQlSTO1dI6e lTPPSfep3XLwhMUQcjx2I80k3rU7+qPZkrhBS6ZagTJZucxrPHyHngL8rFNAffjI3cjB86QsQtu rsZWVAtyvTnbfACLHjKQAs6nJ0AO+I+C5MOWu7EJzjmQKqZNvVeDyCNMRGEQIYZfzgyXFMyZ4E5 LZsvP3EIlFb8D4tmVidhJmR+J49E1oEnmUZ3hD6pQHjUaUwJdITeepajcRPGfdQUnX+xwOzI4JS ADebi3yr/U1VrBvUyoA== X-Authority-Analysis: v=2.4 cv=QaVrf8bv c=1 sm=1 tr=0 ts=69ae1605 cx=c_pps a=AfN7/Ok6k8XGzOShvHwTGQ==:117 a=AfN7/Ok6k8XGzOShvHwTGQ==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=U7nrCbtTmkRpXpFmAIza:22 a=VnNF1IyMAAAA:8 a=20KFwNOVAAAA:8 a=69wJf7TsAAAA:8 a=tAEn9mKmgxsDd59HE_0A:9 a=NqO74GWdXPXpGKcKHaDJD/ajO6k=:19 a=Fg1AiH1G6rFz08G2ETeA:22 X-Proofpoint-GUID: oIwZTwf4TedneHWi2_JcvQudLSQQREjW X-Proofpoint-ORIG-GUID: oIwZTwf4TedneHWi2_JcvQudLSQQREjW X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-08_07,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 spamscore=0 impostorscore=0 clxscore=1015 adultscore=0 bulkscore=0 lowpriorityscore=0 priorityscore=1501 suspectscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603090003 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=148.163.156.1; envelope-from=jrossi@linux.ibm.com; helo=mx0a-001b2d01.pphosted.com X-Spam_score_int: -9 X-Spam_score: -1.0 X-Spam_bar: - X-Spam_report: (-1.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1773016691152158500 Content-Type: text/plain; charset="utf-8" From: Jared Rossi Move the s390-pci-clp definitions into the "ipl" sub-directory, which is vi= sible to the s390-bios. This allows the bios to reuse the architected definition= s and prevents code duplication. Reviewed-by: Thomas Huth Reviewed-by: Eric Farman Reviewed-by: Matthew Rosato Signed-off-by: Jared Rossi --- MAINTAINERS | 1 + hw/s390x/s390-pci-vfio.c | 2 +- include/hw/s390x/{ =3D> ipl}/s390-pci-clp.h | 0 include/hw/s390x/s390-pci-bus.h | 2 +- 4 files changed, 3 insertions(+), 2 deletions(-) rename include/hw/s390x/{ =3D> ipl}/s390-pci-clp.h (100%) diff --git a/MAINTAINERS b/MAINTAINERS index 6730cee490..80e10e43b5 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1882,6 +1882,7 @@ R: Eric Farman S: Supported F: hw/s390x/s390-pci* F: include/hw/s390x/s390-pci* +F: include/hw/s390x/ipl/s390-pci* F: util/s390x_pci_mmio.c L: qemu-s390x@nongnu.org =20 diff --git a/hw/s390x/s390-pci-vfio.c b/hw/s390x/s390-pci-vfio.c index 9e31029d7a..8ce44dbecc 100644 --- a/hw/s390x/s390-pci-vfio.c +++ b/hw/s390x/s390-pci-vfio.c @@ -17,7 +17,7 @@ =20 #include "trace.h" #include "hw/s390x/s390-pci-bus.h" -#include "hw/s390x/s390-pci-clp.h" +#include "hw/s390x/ipl/s390-pci-clp.h" #include "hw/s390x/s390-pci-vfio.h" #include "hw/vfio/pci.h" #include "hw/vfio/vfio-container-legacy.h" diff --git a/include/hw/s390x/s390-pci-clp.h b/include/hw/s390x/ipl/s390-pc= i-clp.h similarity index 100% rename from include/hw/s390x/s390-pci-clp.h rename to include/hw/s390x/ipl/s390-pci-clp.h diff --git a/include/hw/s390x/s390-pci-bus.h b/include/hw/s390x/s390-pci-bu= s.h index 04944d4fed..f643e13057 100644 --- a/include/hw/s390x/s390-pci-bus.h +++ b/include/hw/s390x/s390-pci-bus.h @@ -19,7 +19,7 @@ #include "hw/s390x/sclp.h" #include "hw/s390x/s390_flic.h" #include "hw/s390x/css.h" -#include "hw/s390x/s390-pci-clp.h" +#include "hw/s390x/ipl/s390-pci-clp.h" #include "qom/object.h" =20 #define TYPE_S390_PCI_HOST_BRIDGE "s390-pcihost" --=20 2.52.0 From nobody Sat Apr 11 21:30:06 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1773016712; cv=none; d=zohomail.com; s=zohoarc; b=YWNCSzqXyuNTCwepX5td4TQrI9JZMVgor55xmX5aKgjDni8kG7Z21r5tnXgA4bDAEWHDvO/+aSzkqd/djPmauCZtW6JszmzGxb4gJo/mYFBjY0GcmWRjAw5i6nzoDHTEJz44xm59ohhCaI3dYOiNR+5SnjTp7ycGnCQppz8svEA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773016712; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=vTcQyrK4A0BQD9du/yxFLwGAxMaqMxDm7ekoHg6vzdQ=; b=BDZcx4Zsx3r9opP85Z1Y7KNtEVUTmSaQpgBrSHuQSQpSSeYLpMJjQJEY808yEB8G2Id4AKG7iqp51l7hDWon5vf8qoJcNW2t0UU2Jy4Nxvx2aqkt56CleunbntoR6NHGN/8eF0zEMCrnbNEsY3IJuThtICYMe8luYCLGSwNEpko= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1773016712858702.6767474820433; Sun, 8 Mar 2026 17:38:32 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vzObo-0006Ny-08; Sun, 08 Mar 2026 20:36:32 -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 1vzObi-0006Lw-FA; Sun, 08 Mar 2026 20:36:27 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vzObg-0001fU-Nq; Sun, 08 Mar 2026 20:36:26 -0400 Received: from pps.filterd (m0360072.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 628LdMvU1478497; Mon, 9 Mar 2026 00:36:23 GMT Received: from ppma11.dal12v.mail.ibm.com (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4crcvr4emh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 09 Mar 2026 00:36:23 +0000 (GMT) Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1]) by ppma11.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 628Nu1LD015750; Mon, 9 Mar 2026 00:36:22 GMT Received: from smtprelay05.wdc07v.mail.ibm.com ([172.16.1.72]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 4cs121tqn5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 09 Mar 2026 00:36:22 +0000 Received: from smtpav04.wdc07v.mail.ibm.com (smtpav04.wdc07v.mail.ibm.com [10.39.53.231]) by smtprelay05.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 6290aKLv33620592 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 9 Mar 2026 00:36:21 GMT Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id DC38858054; Mon, 9 Mar 2026 00:36:20 +0000 (GMT) Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C08BE58045; Mon, 9 Mar 2026 00:36:19 +0000 (GMT) Received: from t15.ibmuc.com (unknown [9.61.180.105]) by smtpav04.wdc07v.mail.ibm.com (Postfix) with ESMTP; Mon, 9 Mar 2026 00:36:19 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=vTcQyrK4A0BQD9du/ yxFLwGAxMaqMxDm7ekoHg6vzdQ=; b=mmESlSCyfFnj1mm0EcKkYe+trcwVgyjXc lg28l3/tmvNHJ2Z0BwByXV8GyzaTwrY/MLcFjb0r2MgKDZM3drkbWUEjfIPUz/cY xYtCEMVoFmfXHlnQ+eJCb6ha1c+Bi8nmiw4djSFDmppwT/up2kMaisOkv1/OS6mf Yd06VDPzFfGDxysBDvtd5bSVEfX5hI2ZFwD5Se7II4z8mBhzOQt9JJ8Xck76H5wJ wPTR0syKbgeQ0XY2oKoTDy2ruU20697z4Yzn08+0RJAnDsMDqCt1Khdbtfq+NCf+ jaB+Q/mxh28tfyYJ9EFqajMy5iWngHO7HlY6RSLumy1itQo02BiRw== From: jrossi@linux.ibm.com To: qemu-devel@nongnu.org, qemu-s390x@nongnu.org, thuth@redhat.com, mst@redhat.com Cc: jjherne@linux.ibm.com, alifm@linux.ibm.com, farman@linux.ibm.com, mjrosato@linux.ibm.com, jrossi@linux.ibm.com, zycai@linux.ibm.com Subject: [PATCH v5 08/15] pc-bios/s390-ccw: Introduce CLP Architecture Date: Sun, 8 Mar 2026 20:35:54 -0400 Message-ID: <20260309003601.242634-9-jrossi@linux.ibm.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260309003601.242634-1-jrossi@linux.ibm.com> References: <20260309003601.242634-1-jrossi@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA5MDAwMyBTYWx0ZWRfX04I/X5doFwrk V6/EjF17mjAXVmB5RPRbU/do+H0LjHSE7ctF5NN4TpYJU6GuLk1Od+A4D3PQ1Za6Wt8hCpvD49c UnWwLEQ0WcnyTj9aXluw/F0w3WVlmORo6iHYS3ZohGVrvTtC5+Au8jREqSySX7EAYIdX7FN+c1i eMwgQKG/Gl0FbTANmASkZW7VAZflpSEHB3LHnND9q2Ry6gL2utw6fPl1Pjq0F+x5EqzUPYZuxIT BFAuRJiKzG751aGUftJfbLFG31h/szHXK4Svnl4egQwMaoekYFMT92WvnNP4NPNiH1y1MDdTvLt FG0blgIDC1lG9ww7gDdPn1zDBcqbp5BBgcNmybCpe9L1XzOP+mfCk1uX4URU9JOMF08wkD0dTxY nCt0ctLj0zkYnPuRCGhdEalsYmxa3jYAWSCxyH+vJDq9EtenEcIOrYAMOlLwsZgIKkOXbsO5WZi cqTWIpiLPTIQg4b8GNg== X-Proofpoint-GUID: RtBUVb-Ls84SgKJDHxnaXERub6ujXnDB X-Proofpoint-ORIG-GUID: RtBUVb-Ls84SgKJDHxnaXERub6ujXnDB X-Authority-Analysis: v=2.4 cv=QoFTHFyd c=1 sm=1 tr=0 ts=69ae1607 cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=RzCfie-kr_QcCd8fBx8p:22 a=VnNF1IyMAAAA:8 a=20KFwNOVAAAA:8 a=B6FfjjnMrpp8agTJrekA:9 a=O8hF6Hzn-FEA:10 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-08_07,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 spamscore=0 priorityscore=1501 phishscore=0 lowpriorityscore=0 adultscore=0 clxscore=1015 malwarescore=0 suspectscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603090003 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=148.163.158.5; envelope-from=jrossi@linux.ibm.com; helo=mx0b-001b2d01.pphosted.com X-Spam_score_int: -9 X-Spam_score: -1.0 X-Spam_bar: - X-Spam_report: (-1.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1773016715077154100 Content-Type: text/plain; charset="utf-8" From: Jared Rossi Call Logical Processor (CLP) Architecture is used for managing PCI function= s on s390x. Define and include the structures and routines needed to interact wi= th PCI devices during IPL. Acked-by: Thomas Huth Reviewed-by: Eric Farman Signed-off-by: Jared Rossi Reviewed-by: Farhan Ali Reviewed-by: Matthew Rosato --- pc-bios/s390-ccw/Makefile | 2 +- pc-bios/s390-ccw/clp.c | 99 +++++++++++++++++++++++++++++++++++++++ pc-bios/s390-ccw/clp.h | 24 ++++++++++ 3 files changed, 124 insertions(+), 1 deletion(-) create mode 100644 pc-bios/s390-ccw/clp.c create mode 100644 pc-bios/s390-ccw/clp.h diff --git a/pc-bios/s390-ccw/Makefile b/pc-bios/s390-ccw/Makefile index 259cff09db..9c29548f84 100644 --- a/pc-bios/s390-ccw/Makefile +++ b/pc-bios/s390-ccw/Makefile @@ -35,7 +35,7 @@ QEMU_DGFLAGS =3D -MMD -MP -MT $@ -MF $(@D)/$(*F).d =20 OBJECTS =3D 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 \ - virtio-ccw.o + virtio-ccw.o clp.o =20 SLOF_DIR :=3D $(SRC_PATH)/../../roms/SLOF =20 diff --git a/pc-bios/s390-ccw/clp.c b/pc-bios/s390-ccw/clp.c new file mode 100644 index 0000000000..8c04738bbf --- /dev/null +++ b/pc-bios/s390-ccw/clp.c @@ -0,0 +1,99 @@ +/* + * Call Logical Processor (CLP) architecture + * + * Copyright 2025 IBM Corp. + * Author(s): Jared Rossi + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "clp.h" +#include +#include + +int clp_pci(void *data) +{ + struct { uint8_t _[CLP_BLK_SIZE]; } *req =3D data; + int cc =3D 3; + + asm volatile ( + " .insn rrf,0xb9a00000,0,%[req],0,2\n" + " ipm %[cc]\n" + " srl %[cc],28\n" + : [cc] "+d" (cc), "+m" (*req) + : [req] "a" (req) + : "cc"); + if (cc) { + printf("CLP returned with non-zero condition code %d\n", cc); + } + return cc; +} + +/* + * Get the PCI function entry for a given function ID + * Return 0 on success, 1 if the FID is not found, or a negative RC on err= or + */ +int find_pci_function(uint32_t fid, ClpFhListEntry *entry) +{ + int count =3D 0; + int limit =3D PCI_MAX_FUNCTIONS; + ClpReqRspListPci rrb; + + rrb.request.hdr.len =3D sizeof(ClpReqListPci); + rrb.request.hdr.cmd =3D 0x02; + rrb.request.resume_token =3D 0; + rrb.response.hdr.len =3D sizeof(ClpRspListPci); + + do { + if (clp_pci(&rrb) || rrb.response.hdr.rsp !=3D 0x0010) { + puts("Failed to list PCI functions"); + return -1; + } + + /* Resume token set when max enteries are returned */ + if (rrb.response.resume_token) { + count =3D CLP_FH_LIST_NR_ENTRIES; + rrb.request.resume_token =3D rrb.response.resume_token; + } else { + count =3D (rrb.response.hdr.len - 32) / sizeof(ClpFhListEntry); + } + + limit -=3D count; + + for (int i =3D 0; i < count; i++) { + if (rrb.response.fh_list[i].fid =3D=3D fid) { + memcpy(entry, &rrb.response.fh_list[i], sizeof(ClpFhListEn= try)); + return 0; + } + } + + } while (rrb.request.resume_token && limit > 0); + + puts("No function entry found for FID!"); + + return 1; +} + +/* + * Enable the PCI function associated with a given handle + * Return 0 on success or a negative RC on error + */ +int enable_pci_function(uint32_t *fhandle) +{ + ClpReqRspSetPci rrb; + + rrb.request.hdr.len =3D sizeof(ClpReqSetPci); + rrb.request.hdr.cmd =3D 0x05; + rrb.request.fh =3D *fhandle; + rrb.request.oc =3D 0; + rrb.request.ndas =3D 1; + rrb.response.hdr.len =3D sizeof(ClpRspSetPci); + + if (clp_pci(&rrb) || rrb.response.hdr.rsp !=3D 0x0010) { + puts("Failed to enable PCI function"); + return -1; + } + + *fhandle =3D rrb.response.fh; + return 0; +} diff --git a/pc-bios/s390-ccw/clp.h b/pc-bios/s390-ccw/clp.h new file mode 100644 index 0000000000..1ac2f8c177 --- /dev/null +++ b/pc-bios/s390-ccw/clp.h @@ -0,0 +1,24 @@ +/* + * Call Logical Processor (CLP) architecture definitions + * + * Copyright 2025 IBM Corp. + * Author(s): Jared Rossi + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef CLP_H +#define CLP_H + +#ifndef QEMU_PACKED +#define QEMU_PACKED __attribute__((packed)) +#endif + +#include +#include + +int clp_pci(void *data); +int find_pci_function(uint32_t fid, ClpFhListEntry *entry); +int enable_pci_function(uint32_t *fhandle); + +#endif --=20 2.52.0 From nobody Sat Apr 11 21:30:06 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1773016618; cv=none; d=zohomail.com; s=zohoarc; b=YfONIrKYOClI/5v9NMsyzjbWgOFtK3PtJm9AJL39FoxfWf0J63B3hG4H9l4MLfF97H78EOp1vHXElGS7fZ3OOkLF0tihYhumcOXdo5QLdi5YFfLLEkOf5D8r12iv1p0y+eP9jD/xGPO6uW+kir/BaO8fMX6p6DzbxzwvzrftC3k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773016618; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=b/aS1tLVCDH4kLdLB0fV8bpzAvHDnUaWyiKJHZQap4c=; b=ROvlBvWvlnpsmSeyHKwLREhHvihQLeHE0mNPN7wG5BirXY2uBqnJSPCh++ojLX0C/juSLBqb6jnUCEF+aCKdbVI8N1PQ7GbMQgx9Uu4tqChDRIV5/WPXYGDLBrRoo2YGzw7xDxKHwdD9Ody8CHJ+4IHKRAPg2Q9CsftIiz/pISc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1773016618274206.3319824618643; Sun, 8 Mar 2026 17:36:58 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vzObs-0006QF-W9; Sun, 08 Mar 2026 20:36:37 -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 1vzObk-0006Ml-7H; Sun, 08 Mar 2026 20:36:30 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vzObi-0001fh-Oi; Sun, 08 Mar 2026 20:36:27 -0400 Received: from pps.filterd (m0356517.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 628M04g51454323; Mon, 9 Mar 2026 00:36:25 GMT Received: from ppma23.wdc07v.mail.ibm.com (5d.69.3da9.ip4.static.sl-reverse.com [169.61.105.93]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4crcyw4kf1-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 09 Mar 2026 00:36:25 +0000 (GMT) Received: from pps.filterd (ppma23.wdc07v.mail.ibm.com [127.0.0.1]) by ppma23.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 628MFI8t023341; Mon, 9 Mar 2026 00:36:24 GMT Received: from smtprelay07.wdc07v.mail.ibm.com ([172.16.1.74]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4cryukawfa-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 09 Mar 2026 00:36:24 +0000 Received: from smtpav04.wdc07v.mail.ibm.com (smtpav04.wdc07v.mail.ibm.com [10.39.53.231]) by smtprelay07.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 6290aMgD33292882 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 9 Mar 2026 00:36:22 GMT Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id BB33858045; Mon, 9 Mar 2026 00:36:22 +0000 (GMT) Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id A498558054; Mon, 9 Mar 2026 00:36:21 +0000 (GMT) Received: from t15.ibmuc.com (unknown [9.61.180.105]) by smtpav04.wdc07v.mail.ibm.com (Postfix) with ESMTP; Mon, 9 Mar 2026 00:36:21 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=b/aS1tLVCDH4kLdLB 0fV8bpzAvHDnUaWyiKJHZQap4c=; b=rF98g+gJkDSjZvaUPQs5NeM8ffuLDwYLN E1iP8ncWYCoVrSsudcEEAyLjvPLJVikpSvqD9QGORgoYQ3A4CzYo9EKxkns+jxkm I8+8kJ9A48GzVlerc9qSRqPvtNiXQ8NwwzoKUJN/Z/TgaNug4SFNygcaK7hKvrsC hfxAKh3EMmT1onlTgTyFCD2gQNiqrxLzod5SPrqkeht+r/MKHU7cTerlN8MXX780 SSEY1GSKDF9+8hxZI/juA+mX7cu3jsoZpvieXzGRVl2CA00ZlXiJuBcU2xZdkYaP sUIIlp1PZdzuxpZDHEZjYFmAvrif3mqaFNl2xOqCXL6RXHHcNTqGg== From: jrossi@linux.ibm.com To: qemu-devel@nongnu.org, qemu-s390x@nongnu.org, thuth@redhat.com, mst@redhat.com Cc: jjherne@linux.ibm.com, alifm@linux.ibm.com, farman@linux.ibm.com, mjrosato@linux.ibm.com, jrossi@linux.ibm.com, zycai@linux.ibm.com Subject: [PATCH v5 09/15] s390x: Add definitions for PCI IPL type Date: Sun, 8 Mar 2026 20:35:55 -0400 Message-ID: <20260309003601.242634-10-jrossi@linux.ibm.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260309003601.242634-1-jrossi@linux.ibm.com> References: <20260309003601.242634-1-jrossi@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA5MDAwMyBTYWx0ZWRfX0hmpKeqt3tmi WgL9bRZoEkVlUlmsct65vCotcLEU+cLIJwufBFmHjpuXTLPXWFGigCAsB7I+Pss6bkV8T7bjK1p ZcpJqbKv5HinbqLrJjAkeCEDCAFOX6jSBMCbmtU2wswPId1Cpq9h72VWZCcLDCD9TSg0iHWjp7P eMXXdF1lB2JcL1OKqXiVAcou7xdf4iQj0OQ5IfKH3iKH0bMg3hGL/bcs0IQXnt8jzh2Hkr3uAPs tMzwm8Tr/IMZq3teR02SzG1b5XLMftOse7wuyqh5c+zYvwKrfJ0BO1F6y9JaKqPIBWlXTxbxWZD 62Jb4oSK+UUH8VU3uhsQlXW/9UcCxATTHicUS9DRw/fiXBHHIBZDk9Cs1YZgUcX57q9GxYykS0X v5dRX3Mef/fPZzLz2YgkBOSY1IjGok/2oaeS3cv2CniGPTe+D+nfhFLCjqBZ82ZeXVaWStRGRYG 1w8/wm/8zQtp/feSO2g== X-Authority-Analysis: v=2.4 cv=QaVrf8bv c=1 sm=1 tr=0 ts=69ae1609 cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=U7nrCbtTmkRpXpFmAIza:22 a=VnNF1IyMAAAA:8 a=20KFwNOVAAAA:8 a=XaWLD1doWqTlIUYI0tEA:9 a=NqO74GWdXPXpGKcKHaDJD/ajO6k=:19 X-Proofpoint-GUID: 5KJBIT6nJXWT-xiz_cDRIZMB7dp3K_sM X-Proofpoint-ORIG-GUID: 5KJBIT6nJXWT-xiz_cDRIZMB7dp3K_sM X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-08_07,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 spamscore=0 impostorscore=0 clxscore=1015 adultscore=0 bulkscore=0 lowpriorityscore=0 priorityscore=1501 suspectscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603090003 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=148.163.156.1; envelope-from=jrossi@linux.ibm.com; helo=mx0a-001b2d01.pphosted.com X-Spam_score_int: -9 X-Spam_score: -1.0 X-Spam_bar: - X-Spam_report: (-1.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1773016618904158500 Content-Type: text/plain; charset="utf-8" From: Jared Rossi Define a new PBT code and IPLB layout in preparation for supporting PCI dev= ice IPL on s390x. Reviewed-by: Thomas Huth Reviewed-by: Eric Farman Signed-off-by: Jared Rossi --- include/hw/s390x/ipl/qipl.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/include/hw/s390x/ipl/qipl.h b/include/hw/s390x/ipl/qipl.h index 6dc12dd859..8d3c83a80b 100644 --- a/include/hw/s390x/ipl/qipl.h +++ b/include/hw/s390x/ipl/qipl.h @@ -23,6 +23,7 @@ enum S390IplType { S390_IPL_TYPE_FCP =3D 0x00, S390_IPL_TYPE_CCW =3D 0x02, + S390_IPL_TYPE_PCI =3D 0x04, S390_IPL_TYPE_PV =3D 0x05, S390_IPL_TYPE_QEMU_SCSI =3D 0xff }; @@ -108,6 +109,14 @@ struct IplBlockQemuScsi { } QEMU_PACKED; typedef struct IplBlockQemuScsi IplBlockQemuScsi; =20 +struct IplBlockPci { + uint32_t reserved0[76]; + uint8_t opt; + uint8_t reserved1[3]; + uint32_t fid; +} QEMU_PACKED; +typedef struct IplBlockPci IplBlockPci; + union IplParameterBlock { struct { uint32_t len; @@ -123,6 +132,7 @@ union IplParameterBlock { IplBlockFcp fcp; IPLBlockPV pv; IplBlockQemuScsi scsi; + IplBlockPci pci; }; } QEMU_PACKED; struct { --=20 2.52.0 From nobody Sat Apr 11 21:30:06 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1773016697; cv=none; d=zohomail.com; s=zohoarc; b=LIJMEWzd5yijx3US412Jwrz5ISm02XtLYv7dd12PBwDwrs75aocofEPAShJNeuRanU6TXyxviOsvw4r1SWjzS8/MudhhZQ3FeMw14XRWVKj9DTsJjr3qc6Ccyz5YRjrRgqMMVrz/e+2tI0jVnzVaubpboIv6H8bKSzvt5LLo1S8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773016697; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=YXYdv5k7wNRj1Ka9yslxKPKoDmRI9L+iSIxT2osA1Dc=; b=Nib0x1xntQw48weXDONIJltSqhyA09dDi0xSTnzExWCVVPisnbqd4VVNyeoaeXsQgu5kpjb0Xy8VwAaLTl/dUDBDN3YKGMY2peq1VPo3Sp0htsBke1cpKMIJh08Fpk9RFnvKY3YaR/lGIqT0LSYxeWoM0tFF5+DFlKrgjrpB1kI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1773016697363850.3188154403126; Sun, 8 Mar 2026 17:38:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vzObp-0006Oo-Kf; Sun, 08 Mar 2026 20:36:33 -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 1vzObm-0006Nn-Sm; Sun, 08 Mar 2026 20:36:30 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vzObl-0001fy-20; Sun, 08 Mar 2026 20:36:30 -0400 Received: from pps.filterd (m0353729.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 628504Ij3809069; Mon, 9 Mar 2026 00:36:27 GMT Received: from ppma23.wdc07v.mail.ibm.com (5d.69.3da9.ip4.static.sl-reverse.com [169.61.105.93]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4crcuy4kdb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 09 Mar 2026 00:36:27 +0000 (GMT) Received: from pps.filterd (ppma23.wdc07v.mail.ibm.com [127.0.0.1]) by ppma23.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 628LiijO023337; Mon, 9 Mar 2026 00:36:26 GMT Received: from smtprelay03.dal12v.mail.ibm.com ([172.16.1.5]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4cryukawfd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 09 Mar 2026 00:36:26 +0000 Received: from smtpav04.wdc07v.mail.ibm.com (smtpav04.wdc07v.mail.ibm.com [10.39.53.231]) by smtprelay03.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 6290aOjC16450152 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 9 Mar 2026 00:36:25 GMT Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 965CB58045; Mon, 9 Mar 2026 00:36:24 +0000 (GMT) Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 8099E58052; Mon, 9 Mar 2026 00:36:23 +0000 (GMT) Received: from t15.ibmuc.com (unknown [9.61.180.105]) by smtpav04.wdc07v.mail.ibm.com (Postfix) with ESMTP; Mon, 9 Mar 2026 00:36:23 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=YXYdv5k7wNRj1Ka9y slxKPKoDmRI9L+iSIxT2osA1Dc=; b=ppWVkgO5By8vkTqlwAHWm8TSyffzSlauS 73kHDUMwL97ndaxD0EpbM8nd0EuAsSj+NMqQG0Bk0fS4wVpwE4V605BAEJ1ia0q8 G3bairYnQWmSzMrq+vj35iheiRSMveG9UK2eXdWtdsQaaBl0BPU/Wub+c3cJI61p 0MO+AexRDAN4u8d7Rg3ZaZmwmQRx0BUS7tUB7bOWwNUDwGwOGa368VOAqtTqdDmN A3uo2yJVvr1efJheUBAZpzjJGLOrur5L6GLyANuUtibQk/qNp80K8w0VG8/B/OSO Uu5kqAqlHrUH/W1C9ck+q5TREqhCSNivGYWi8g4/NuU/zSLs/fcaQ== From: jrossi@linux.ibm.com To: qemu-devel@nongnu.org, qemu-s390x@nongnu.org, thuth@redhat.com, mst@redhat.com Cc: jjherne@linux.ibm.com, alifm@linux.ibm.com, farman@linux.ibm.com, mjrosato@linux.ibm.com, jrossi@linux.ibm.com, zycai@linux.ibm.com Subject: [PATCH v5 10/15] pc-bios/s390-ccw: Introduce PCI device Date: Sun, 8 Mar 2026 20:35:56 -0400 Message-ID: <20260309003601.242634-11-jrossi@linux.ibm.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260309003601.242634-1-jrossi@linux.ibm.com> References: <20260309003601.242634-1-jrossi@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Authority-Analysis: v=2.4 cv=EK4LElZC c=1 sm=1 tr=0 ts=69ae160b cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=uAbxVGIbfxUO_5tXvNgY:22 a=VnNF1IyMAAAA:8 a=p5Q4SJhZOU-7DgXL5goA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA5MDAwMyBTYWx0ZWRfX5NSt2mYq4KcE OOL1t/r5QLznkdprW5Ir2YbLY7ae9PayZkVd/3xo3vHRHksmPEKwq1DDOthOHJSp/oH0eRkTHia dXDSPfnvbQ5tMDM1obOvl40yquhBNiWaY+JJlIZQyTUxM389pFH+zgbJxahJNpyFEnZsHblneoD uP6RPt4J4voLPF28/RF9EFQuPti8LeQ9Dk1ullQwcusBqKTtWduBQfbmpCjV4+PVmIqZ+MJhcSw S1r5A9nMvkMabryvmfJxeo9GxHPUGEIRGIZSrpeZEL2cpGgRJESMgvKNivAmPiDNAzwyN+fhg98 07/IISMT15i1raLyyxHPy+/d0aKzT1hjQXK6MSQfM04/J/V9qQXSQCrPuit/qFn3c8GdAd2mqMH MJJQSIlojBruqWbitrl/pzI321dqFlJ5AYrwJlVTSHW7Aixbf8SMKsiDy+I+iWL6z6xJvit8MsG Hfh40P06KGgER2b2BpA== X-Proofpoint-GUID: P-61P7K82MmanN8WpJ9FJSS9E478M8JR X-Proofpoint-ORIG-GUID: P-61P7K82MmanN8WpJ9FJSS9E478M8JR X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-08_07,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 lowpriorityscore=0 spamscore=0 suspectscore=0 clxscore=1015 bulkscore=0 impostorscore=0 priorityscore=1501 malwarescore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603090003 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=148.163.156.1; envelope-from=jrossi@linux.ibm.com; helo=mx0a-001b2d01.pphosted.com X-Spam_score_int: -9 X-Spam_score: -1.0 X-Spam_bar: - X-Spam_report: (-1.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1773016699259158500 Content-Type: text/plain; charset="utf-8" From: Jared Rossi Define selected s390x PCI instructions. Signed-off-by: Jared Rossi Acked-by: Thomas Huth Reviewed-by: Farhan Ali Reviewed-by: Matthew Rosato --- pc-bios/s390-ccw/Makefile | 2 +- pc-bios/s390-ccw/pci.c | 118 ++++++++++++++++++++++++++++++++++++++ pc-bios/s390-ccw/pci.h | 39 +++++++++++++ 3 files changed, 158 insertions(+), 1 deletion(-) create mode 100644 pc-bios/s390-ccw/pci.c create mode 100644 pc-bios/s390-ccw/pci.h diff --git a/pc-bios/s390-ccw/Makefile b/pc-bios/s390-ccw/Makefile index 9c29548f84..a62fc9d766 100644 --- a/pc-bios/s390-ccw/Makefile +++ b/pc-bios/s390-ccw/Makefile @@ -35,7 +35,7 @@ QEMU_DGFLAGS =3D -MMD -MP -MT $@ -MF $(@D)/$(*F).d =20 OBJECTS =3D 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 \ - virtio-ccw.o clp.o + virtio-ccw.o clp.o pci.o =20 SLOF_DIR :=3D $(SRC_PATH)/../../roms/SLOF =20 diff --git a/pc-bios/s390-ccw/pci.c b/pc-bios/s390-ccw/pci.c new file mode 100644 index 0000000000..247070e5f0 --- /dev/null +++ b/pc-bios/s390-ccw/pci.c @@ -0,0 +1,118 @@ +/* + * s390x PCI functionality + * + * Copyright 2025 IBM Corp. + * Author(s): Jared Rossi + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "clp.h" +#include "pci.h" +#include "bswap.h" +#include +#include + +/* PCI load */ +static inline int pcilg(uint64_t *data, uint64_t req, uint64_t offset, + uint8_t *status) +{ + union register_pair req_off =3D {.even =3D req, .odd =3D offset}; + int cc =3D -1; + uint64_t __data; + + asm volatile ( + " .insn rre,0xb9d20000,%[data],%[req_off]\n" + " ipm %[cc]\n" + " srl %[cc],28\n" + : [cc] "+d" (cc), [data] "=3Dd" (__data), + [req_off] "+d" (req_off.pair) :: "cc"); + *status =3D req_off.even >> 24 & 0xff; + *data =3D __data; + return cc; +} + +/* PCI store */ +static inline int pcistg(uint64_t data, uint64_t req, uint64_t offset, + uint8_t *status) +{ + union register_pair req_off =3D {.even =3D req, .odd =3D offset}; + int cc =3D -1; + + asm volatile ( + " .insn rre,0xb9d00000,%[data],%[req_off]\n" + " ipm %[cc]\n" + " srl %[cc],28\n" + : [cc] "+d" (cc), [req_off] "+d" (req_off.pair) + : [data] "d" (data) + : "cc"); + *status =3D req_off.even >> 24 & 0xff; + return cc; +} + +int pci_write(uint32_t fhandle, uint64_t offset, uint8_t pcias, uint64_t d= ata, + uint8_t len) +{ + + uint64_t req =3D ZPCI_CREATE_REQ(fhandle, pcias, len); + uint8_t status; + int rc; + + /* len must be non-zero power of 2 with a maximum of 8 bytes per write= */ + switch (len) { + case 1: + case 2: + case 4: + case 8: + rc =3D pcistg(data, req, offset, &status); + break; + default: + return -1; + } + + /* Error condition detected */ + if (rc !=3D 0) { + printf("PCI store failed with status condition %d, return code %d\= n", + status, rc); + return -1; + } + + return 0; +} + +int pci_read(uint32_t fhandle, uint64_t offset, uint8_t pcias, void *buf, + uint8_t len) +{ + uint64_t req, data; + uint8_t status; + int rc; + + req =3D ZPCI_CREATE_REQ(fhandle, pcias, len); + rc =3D pcilg(&data, req, offset, &status); + + /* Error condition detected */ + if (rc !=3D 0) { + printf("PCI load failed with status condition %d, return code %d\n= ", + status, rc); + return -1; + } + + switch (len) { + case 1: + *(uint8_t *)buf =3D data; + break; + case 2: + *(uint16_t *)buf =3D data; + break; + case 4: + *(uint32_t *)buf =3D data; + break; + case 8: + *(uint64_t *)buf =3D data; + break; + default: + return -1; + } + + return 0; +} diff --git a/pc-bios/s390-ccw/pci.h b/pc-bios/s390-ccw/pci.h new file mode 100644 index 0000000000..40a0bf9dcb --- /dev/null +++ b/pc-bios/s390-ccw/pci.h @@ -0,0 +1,39 @@ +/* + * s390x PCI definitions + * + * Copyright 2025 IBM Corp. + * Author(s): Jared Rossi + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef PCI_H +#define PCI_H + +#include +#include +#include "clp.h" + +#define ZPCI_CREATE_REQ(handle, space, len) \ + ((uint64_t) handle << 32 | space << 16 | len) + +union register_pair { + unsigned __int128 pair; + struct { + unsigned long even; + unsigned long odd; + }; +}; + +#define PCIST_DISABLED 0x0 +#define PCIST_ENABLED 0x1 + +#define PCI_CFGBAR 0xF /* Base Address Register for config sp= ace */ +#define PCI_CAPABILITY_LIST 0x34 /* Offset of first capability list ent= ry */ + +int pci_write(uint32_t fhandle, uint64_t offset, uint8_t pcias, uint64_t d= ata, + uint8_t len); +int pci_read(uint32_t fhandle, uint64_t offset, uint8_t pcias, void *buf, + uint8_t len); + +#endif --=20 2.52.0 From nobody Sat Apr 11 21:30:06 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1773016639; cv=none; d=zohomail.com; s=zohoarc; b=RyQyjRSAs4V40wBi2qd9HViAmsnoFFeQHpghSsQ7wtEyxQgPukbGcFx0Enbj1wl4z3bJumsgH5bE0zZyk63opwXK/sL0NNIo9egiSZEW3IUQK+NPWYB7N6luHc4kOIGyq1+GV9LJ2IaAHARz8IUEUd0Xpjqv1Rq0B0VZnG59btk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773016639; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=CzvGb6GS2vPoidwzCzGXELT63Hr7SucPd0x7GmsxkIs=; b=D69pnpcbGIc4t//WSxg4mJxihdBGPXh+ewIXWUChPUceVJgmBb4tV/HOT8XHwIOGZ0xXqpCt9ttt9bquqC12k276Ac6VmuaoUS2pyqfMMZhM4OsQsMPo0AabPoERJS54lERMl0yYhA/FBZlplfAyRwmwB7MnRQpKT3GiI8W8Cbc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1773016639099741.7195176626251; Sun, 8 Mar 2026 17:37:19 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vzObs-0006R8-Vt; Sun, 08 Mar 2026 20:36:37 -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 1vzObo-0006OF-7O; Sun, 08 Mar 2026 20:36:32 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vzObm-0001g8-DV; Sun, 08 Mar 2026 20:36:31 -0400 Received: from pps.filterd (m0353725.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 628DjaTQ496716; Mon, 9 Mar 2026 00:36:29 GMT Received: from ppma22.wdc07v.mail.ibm.com (5c.69.3da9.ip4.static.sl-reverse.com [169.61.105.92]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4crd1mcd8m-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 09 Mar 2026 00:36:28 +0000 (GMT) Received: from pps.filterd (ppma22.wdc07v.mail.ibm.com [127.0.0.1]) by ppma22.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 628KPQLe009467; Mon, 9 Mar 2026 00:36:28 GMT Received: from smtprelay05.dal12v.mail.ibm.com ([172.16.1.7]) by ppma22.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4crxqy32xa-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 09 Mar 2026 00:36:28 +0000 Received: from smtpav04.wdc07v.mail.ibm.com (smtpav04.wdc07v.mail.ibm.com [10.39.53.231]) by smtprelay05.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 6290aQkf20120078 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 9 Mar 2026 00:36:27 GMT Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id AD04958052; Mon, 9 Mar 2026 00:36:26 +0000 (GMT) Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 4D42358050; Mon, 9 Mar 2026 00:36:25 +0000 (GMT) Received: from t15.ibmuc.com (unknown [9.61.180.105]) by smtpav04.wdc07v.mail.ibm.com (Postfix) with ESMTP; Mon, 9 Mar 2026 00:36:25 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=CzvGb6GS2vPoidwzC zGXELT63Hr7SucPd0x7GmsxkIs=; b=Nm9/mFVhkXanp/egtajUtXwwcCCdAme4U 7KT9qqQPeU3I9HaCJp7Y/qGTuyQ5wRFPJvdTRP+BsI/zmv4Y3N+UOxKrEXG+valf h1EXbTxN+5lnUiI+ktd2a1vcMDhGIyekakkfQZhFKsPwCFwDEANbRDgCJGNaqsy4 JRJBxhBC++KXO5yX5Edvgupcs122UIim9IfzhuzE6YFjvodVDTE40655HvkazjWE lFwRHoRFhCKFwPNyy6E7fqoA2G3GqArmLhpuzIXYkgD1OXiAezxvXID/UeyzLpdI RtrJXwBEjkVsP1Qx/o/oxrab+Z4267auA0bMOSYyBrlMFhpbVq5dg== From: jrossi@linux.ibm.com To: qemu-devel@nongnu.org, qemu-s390x@nongnu.org, thuth@redhat.com, mst@redhat.com Cc: jjherne@linux.ibm.com, alifm@linux.ibm.com, farman@linux.ibm.com, mjrosato@linux.ibm.com, jrossi@linux.ibm.com, zycai@linux.ibm.com Subject: [PATCH v5 11/15] pc-bios/s390-ccw: Introduce virtio-pci functions Date: Sun, 8 Mar 2026 20:35:57 -0400 Message-ID: <20260309003601.242634-12-jrossi@linux.ibm.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260309003601.242634-1-jrossi@linux.ibm.com> References: <20260309003601.242634-1-jrossi@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Authority-Analysis: v=2.4 cv=ds3Wylg4 c=1 sm=1 tr=0 ts=69ae160c cx=c_pps a=5BHTudwdYE3Te8bg5FgnPg==:117 a=5BHTudwdYE3Te8bg5FgnPg==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=V8glGbnc2Ofi9Qvn3v5h:22 a=VnNF1IyMAAAA:8 a=lM7CEYtdp-gwZ96l5QAA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA5MDAwMyBTYWx0ZWRfX17u5d+9lXlDY bxStoRj8mFFndeP91RS0dQEPhyllZacxvmBvDXFK2Giqp9uW/oTGvQV0Cb/zAqTkEKCtV6FoDEr pHMGLlA0Ri67LJ57NbaFq0pWVvlTPSvKrKeBQntBL2nlhYpdYdSVELRWdVf+eFAwdXTtJyNqB89 55/3ocSWOTP8KD8vRO4aQSVmP72Iahmv00V12Tz0W5UxIDNOYuzXyNOVST9EJKPKsVWKGGGXvCH oeyA1hAEBFROnUtauoSAvoolhBUK5dLMEkSXfJb0FJ/I3jBsGisQkZybZyhHB26j1BR3Koe44EI aTU6eqVuuoWy/T7ESgfVfpJXxhcvuWnaF0FhY8RAkhN6uLYQH1MiOYG3BRU5QHpbtuIHQClwXPH aIwBAeb2U5y5PzpESMxthpnNMVwfmlUpyAoVpe5YQJexP7pX+DDbcd5ZjDXGy9iJzKmG0KN5/Yp y3sPajlD+c3DkzcGy4Q== X-Proofpoint-GUID: uQWJte5cD3yaRHzn4JXFKKjaHl2ZahOs X-Proofpoint-ORIG-GUID: uQWJte5cD3yaRHzn4JXFKKjaHl2ZahOs X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-08_07,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 phishscore=0 clxscore=1015 impostorscore=0 suspectscore=0 priorityscore=1501 lowpriorityscore=0 malwarescore=0 adultscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603090003 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=148.163.158.5; envelope-from=jrossi@linux.ibm.com; helo=mx0b-001b2d01.pphosted.com X-Spam_score_int: -9 X-Spam_score: -1.0 X-Spam_bar: - X-Spam_report: (-1.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1773016642133154100 Content-Type: text/plain; charset="utf-8" From: Jared Rossi Define common functionality for interacting with virtio-pci devices. Signed-off-by: Jared Rossi Acked-by: Matthew Rosato Reviewed-by: Eric Farman Reviewed-by: Thomas Huth --- pc-bios/s390-ccw/Makefile | 2 +- pc-bios/s390-ccw/virtio-pci.c | 167 ++++++++++++++++++++++++++++++++++ pc-bios/s390-ccw/virtio-pci.h | 80 ++++++++++++++++ pc-bios/s390-ccw/virtio.h | 3 + 4 files changed, 251 insertions(+), 1 deletion(-) create mode 100644 pc-bios/s390-ccw/virtio-pci.c create mode 100644 pc-bios/s390-ccw/virtio-pci.h diff --git a/pc-bios/s390-ccw/Makefile b/pc-bios/s390-ccw/Makefile index a62fc9d766..3e5dfb64d5 100644 --- a/pc-bios/s390-ccw/Makefile +++ b/pc-bios/s390-ccw/Makefile @@ -35,7 +35,7 @@ QEMU_DGFLAGS =3D -MMD -MP -MT $@ -MF $(@D)/$(*F).d =20 OBJECTS =3D 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 \ - virtio-ccw.o clp.o pci.o + virtio-ccw.o clp.o pci.o virtio-pci.o =20 SLOF_DIR :=3D $(SRC_PATH)/../../roms/SLOF =20 diff --git a/pc-bios/s390-ccw/virtio-pci.c b/pc-bios/s390-ccw/virtio-pci.c new file mode 100644 index 0000000000..f6ce7ec766 --- /dev/null +++ b/pc-bios/s390-ccw/virtio-pci.c @@ -0,0 +1,167 @@ +/* + * Functionality for virtio-pci + * + * Copyright 2025 IBM Corp. + * Author(s): Jared Rossi + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "clp.h" +#include "pci.h" +#include "helper.h" +#include "virtio.h" +#include "bswap.h" +#include "virtio-pci.h" +#include "s390-time.h" +#include + +/* Variable offsets used for reads/writes to modern memory regions */ +VirtioPciCap c_cap; /* Common capabilities */ +VirtioPciCap d_cap; /* Device capabilities */ +VirtioPciCap n_cap; /* Notify capabilities */ +uint32_t notify_mult; +uint16_t q_notify_offset; + +static int virtio_pci_set_status(uint8_t status) +{ + int rc =3D vpci_write_byte(c_cap.off + VPCI_C_OFFSET_STATUS, c_cap.bar= , status); + if (rc) { + puts("Failed to write virtio-pci status"); + return -EIO; + } + + return 0; +} + +static int virtio_pci_get_status(uint8_t *status) +{ + int rc =3D vpci_read_byte(c_cap.off + VPCI_C_OFFSET_STATUS, c_cap.bar,= status); + if (rc) { + puts("Failed to read virtio-pci status"); + return -EIO; + } + + return 0; +} + +/* virtio spec v1.3 section 4.1.2.1 */ +void virtio_pci_id2type(VDev *vdev, uint16_t device_id) +{ + switch (device_id) { + case 0x1042: + case 0x1001: + vdev->dev_type =3D VIRTIO_ID_BLOCK; + break; + default: + vdev->dev_type =3D 0; + } +} + +int virtio_pci_reset(VDev *vdev) +{ + int rc; + uint8_t status =3D 0; + + rc =3D virtio_pci_set_status(status); + rc |=3D virtio_pci_get_status(&status); + + if (rc || status) { + puts("Failed to reset virtio-pci device"); + return 1; + } + + return 0; +} + +long virtio_pci_notify(int vq_id) +{ + uint32_t offset =3D n_cap.off + notify_mult * q_notify_offset; + return vpci_bswap16_write(offset, n_cap.bar, (uint16_t) vq_id); +} + +/* + * Wrappers to byte swap common data sizes then write + */ +int vpci_write_byte(uint64_t offset, uint8_t pcias, uint8_t data) +{ + return pci_write(virtio_get_device()->pci_fh, offset, pcias, (uint64_t= ) data, 1); +} + +int vpci_bswap16_write(uint64_t offset, uint8_t pcias, uint16_t data) +{ + uint64_t le_data =3D bswap16(data); + return pci_write(virtio_get_device()->pci_fh, offset, pcias, le_data, = 2); +} + +int vpci_bswap32_write(uint64_t offset, uint8_t pcias, uint32_t data) +{ + uint64_t le_data =3D bswap32(data); + return pci_write(virtio_get_device()->pci_fh, offset, pcias, le_data, = 4); +} + +int vpci_bswap64_write(uint64_t offset, uint8_t pcias, uint64_t data) +{ + uint64_t le_data =3D bswap64(data); + return pci_write(virtio_get_device()->pci_fh, offset, pcias, le_data, = 8); +} + +/* + * Wrappers to read common data sizes then byte swap + */ +int vpci_read_byte(uint64_t offset, uint8_t pcias, uint8_t *buf) +{ + return pci_read(virtio_get_device()->pci_fh, offset, pcias, buf, 1); +} + +int vpci_read_bswap16(uint64_t offset, uint8_t pcias, uint16_t *buf) +{ + int rc =3D pci_read(virtio_get_device()->pci_fh, offset, pcias, buf, 2= ); + *buf =3D bswap16(*buf); + return rc; +} + +int vpci_read_bswap32(uint64_t offset, uint8_t pcias, uint32_t *buf) +{ + int rc =3D pci_read(virtio_get_device()->pci_fh, offset, pcias, buf, 4= ); + *buf =3D bswap32(*buf); + return rc; +} + +int vpci_read_bswap64(uint64_t offset, uint8_t pcias, uint64_t *buf) +{ + int rc =3D pci_read(virtio_get_device()->pci_fh, offset, pcias, buf, 8= ); + *buf =3D bswap64(*buf); + return rc; +} + +/* + * Read to an arbitrary length buffer without byte swapping + */ +int vpci_read_flex(uint64_t offset, uint8_t pcias, void *buf, int len) +{ + uint8_t readlen; + int rc; + int remaining =3D len; + + /* Read bytes in powers of 2, up to a maximum of 8 bytes per read */ + while (remaining) { + for (int i =3D 3; i >=3D 0; i--) { + readlen =3D 1 << i; + if (remaining >=3D readlen) { + break; + } + } + + rc =3D pci_read(virtio_get_device()->pci_fh, offset, pcias, buf, r= eadlen); + if (rc) { + return -1; + } + + remaining -=3D readlen; + buf +=3D readlen; + offset +=3D readlen; + } + + return 0; +} diff --git a/pc-bios/s390-ccw/virtio-pci.h b/pc-bios/s390-ccw/virtio-pci.h new file mode 100644 index 0000000000..54c524f698 --- /dev/null +++ b/pc-bios/s390-ccw/virtio-pci.h @@ -0,0 +1,80 @@ +/* + * Definitions for virtio-pci + * + * Copyright 2025 IBM Corp. + * Author(s): Jared Rossi + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef VIRTIO_PCI_H +#define VIRTIO_PCI_H + +/* Common configuration */ +#define VPCI_CAP_COMMON_CFG 1 +/* Notifications */ +#define VPCI_CAP_NOTIFY_CFG 2 +/* ISR access */ +#define VPCI_CAP_ISR_CFG 3 +/* Device specific configuration */ +#define VPCI_CAP_DEVICE_CFG 4 +/* PCI configuration access */ +#define VPCI_CAP_PCI_CFG 5 +/* Additional shared memory capability */ +#define VPCI_CAP_SHARED_MEMORY_CFG 8 +/* PCI vendor data configuration */ +#define VPCI_CAP_VENDOR_CFG 9 + +/* Offsets within capability header */ +#define VPCI_CAP_VNDR 0 +#define VPCI_CAP_NEXT 1 +#define VPCI_CAP_LEN 2 +#define VPCI_CAP_CFG_TYPE 3 +#define VPCI_CAP_BAR 4 +#define VPCI_CAP_OFFSET 8 +#define VPCI_CAP_LENGTH 12 + +#define VPCI_N_CAP_MULT 16 /* Notify multiplier, VPCI_CAP_NOTIFY_CFG only = */ + +/* Common Area Offsets for virtio-pci queue */ +#define VPCI_C_OFFSET_DFSELECT 0 +#define VPCI_C_OFFSET_DF 4 +#define VPCI_C_OFFSET_GFSELECT 8 +#define VPCI_C_OFFSET_GF 12 +#define VPCI_C_COMMON_NUMQ 18 +#define VPCI_C_OFFSET_STATUS 20 +#define VPCI_C_OFFSET_Q_SELECT 22 +#define VPCI_C_OFFSET_Q_SIZE 24 +#define VPCI_C_OFFSET_Q_ENABLE 28 +#define VPCI_C_OFFSET_Q_NOFF 30 +#define VPCI_C_OFFSET_Q_DESCLO 32 +#define VPCI_C_OFFSET_Q_DESCHI 36 +#define VPCI_C_OFFSET_Q_AVAILLO 40 +#define VPCI_C_OFFSET_Q_AVAILHI 44 +#define VPCI_C_OFFSET_Q_USEDLO 48 +#define VPCI_C_OFFSET_Q_USEDHI 52 + +#define VIRTIO_F_VERSION_1 1 /* Feature bit 32 */ + +struct VirtioPciCap { + uint8_t bar; /* Which PCIAS it's in */ + uint32_t off; /* Offset within bar */ +}; +typedef struct VirtioPciCap VirtioPciCap; + +void virtio_pci_id2type(VDev *vdev, uint16_t device_id); +int virtio_pci_reset(VDev *vdev); +long virtio_pci_notify(int vq_id); + +int vpci_read_flex(uint64_t offset, uint8_t pcias, void *buf, int len); +int vpci_read_bswap64(uint64_t offset, uint8_t pcias, uint64_t *buf); +int vpci_read_bswap32(uint64_t offset, uint8_t pcias, uint32_t *buf); +int vpci_read_bswap16(uint64_t offset, uint8_t pcias, uint16_t *buf); +int vpci_read_byte(uint64_t offset, uint8_t pcias, uint8_t *buf); + +int vpci_bswap64_write(uint64_t offset, uint8_t pcias, uint64_t data); +int vpci_bswap32_write(uint64_t offset, uint8_t pcias, uint32_t data); +int vpci_bswap16_write(uint64_t offset, uint8_t pcias, uint16_t data); +int vpci_write_byte(uint64_t offset, uint8_t pcias, uint8_t data); + +#endif diff --git a/pc-bios/s390-ccw/virtio.h b/pc-bios/s390-ccw/virtio.h index c3cb5a6ee3..1ef64675f4 100644 --- a/pc-bios/s390-ccw/virtio.h +++ b/pc-bios/s390-ccw/virtio.h @@ -18,6 +18,8 @@ #define VIRTIO_CONFIG_S_DRIVER 2 /* Driver has used its parts of the config, and is happy */ #define VIRTIO_CONFIG_S_DRIVER_OK 4 +/* Feature negotiation complete */ +#define VIRTIO_CONFIG_S_FEATURES_OK 8 /* We've given up on this device. */ #define VIRTIO_CONFIG_S_FAILED 0x80 =20 @@ -255,6 +257,7 @@ struct VDev { uint8_t scsi_dev_heads; bool scsi_device_selected; ScsiDevice selected_scsi_device; + uint32_t pci_fh; uint32_t max_transfer; uint32_t guest_features[2]; }; --=20 2.52.0 From nobody Sat Apr 11 21:30:06 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1773016661; cv=none; d=zohomail.com; s=zohoarc; b=OUpGQ3LKPMSPrRpkHNZ/GJeWWggt/Ay1QhKruo0+K2n6U7gmMG3qrf6INjW+ylF8RfpAayZCibaBSGz1W5JFi0V6nrv4yhF9LhVzXozHVyfeI+tYu0eDSl7wvFLZWqsEiOM2IOOwZ82WT+pxzRJTZxtsz2IqDTuvMhfsy4K7dX8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773016661; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Tt860g4vwSH2tC13Nf/qvxSF1eTCcQuOcKOEoiz9YoQ=; b=njgyDHCucrB+1GXWncBiDrGOOgY0eAmRHDX3xRxgxVWPKobjaIqXr2NIpbhezf9A2EsHBjeuZQQzaXBxgSDQBJOIjgFDmup7XJLCL7K6KM43i/qi7BcK+m0G1LjJX72+yptN7IeNtgJCb+gw30VYlfrs9y+t55hT9ZmCQKtDLeY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1773016661461480.67490922397815; Sun, 8 Mar 2026 17:37:41 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vzObx-0006TP-EU; Sun, 08 Mar 2026 20:36:41 -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 1vzObr-0006Pd-As; Sun, 08 Mar 2026 20:36:35 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vzObo-0001gU-Vd; Sun, 08 Mar 2026 20:36:35 -0400 Received: from pps.filterd (m0353729.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 628Ns1kn1681720; Mon, 9 Mar 2026 00:36:31 GMT Received: from ppma21.wdc07v.mail.ibm.com (5b.69.3da9.ip4.static.sl-reverse.com [169.61.105.91]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4crcuy4kdf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 09 Mar 2026 00:36:31 +0000 (GMT) Received: from pps.filterd (ppma21.wdc07v.mail.ibm.com [127.0.0.1]) by ppma21.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 628LjP3g015638; Mon, 9 Mar 2026 00:36:30 GMT Received: from smtprelay07.dal12v.mail.ibm.com ([172.16.1.9]) by ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4crybn2yv3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 09 Mar 2026 00:36:30 +0000 Received: from smtpav04.wdc07v.mail.ibm.com (smtpav04.wdc07v.mail.ibm.com [10.39.53.231]) by smtprelay07.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 6290aS7X23200350 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 9 Mar 2026 00:36:29 GMT Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 8B83758052; Mon, 9 Mar 2026 00:36:28 +0000 (GMT) Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 6D6ED58050; Mon, 9 Mar 2026 00:36:27 +0000 (GMT) Received: from t15.ibmuc.com (unknown [9.61.180.105]) by smtpav04.wdc07v.mail.ibm.com (Postfix) with ESMTP; Mon, 9 Mar 2026 00:36:27 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=Tt860g4vwSH2tC13N f/qvxSF1eTCcQuOcKOEoiz9YoQ=; b=KzcBDgMVMI+shAE7uUn7oo3TZzSzG4+QB HzhkQhRF7FpLgahbKu/nkGTubOfcq61WTv5lSA07gNDVustfxj+ZrIfbHlMGarUe qXAEBqt4EOoy9wbKUxV6L7iSF5j9TnXTDMhEjgUtrAytOUWkznqJhRvzayM3ItgW LhrJFowZRbkCBUK0l4rjWqtLlYQdlLdsrNfg014JHroZmW2YnMWc6urzMJ/5vbPU tWI9mXacFVoJiMuMu+W0tNIVOFJy6bP9Yhb3DmpUdpG8n+sEOoTiaazXHHHL8b/t hWA/hb5zS2h7zXkXllanYjcAbLq1GWZ8+AI7MfbWlhGqjFmsK8ohQ== From: jrossi@linux.ibm.com To: qemu-devel@nongnu.org, qemu-s390x@nongnu.org, thuth@redhat.com, mst@redhat.com Cc: jjherne@linux.ibm.com, alifm@linux.ibm.com, farman@linux.ibm.com, mjrosato@linux.ibm.com, jrossi@linux.ibm.com, zycai@linux.ibm.com Subject: [PATCH v5 12/15] pc-bios/s390-ccw: Add support for virtio-blk-pci IPL Date: Sun, 8 Mar 2026 20:35:58 -0400 Message-ID: <20260309003601.242634-13-jrossi@linux.ibm.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260309003601.242634-1-jrossi@linux.ibm.com> References: <20260309003601.242634-1-jrossi@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Authority-Analysis: v=2.4 cv=EK4LElZC c=1 sm=1 tr=0 ts=69ae160f cx=c_pps a=GFwsV6G8L6GxiO2Y/PsHdQ==:117 a=GFwsV6G8L6GxiO2Y/PsHdQ==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=uAbxVGIbfxUO_5tXvNgY:22 a=VnNF1IyMAAAA:8 a=t5V1psBHqKC9bszW1LEA:9 a=O8hF6Hzn-FEA:10 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA5MDAwMyBTYWx0ZWRfX0V4IEiiPAtnY BvQTkdwCh4h/3CsL7jNJ+9NxVOpbslEqLyNbYOse2N1d1wSpQS3zrDf+bIWQw8h+Q+pnYWmhfs2 Hmgz6TtE+xaFnfMSQe82Eq5BdXz2j9JKA7fPqiCxeM8mGBYb6SsuN5reFCnOrzqIOxrLc6MURmH Q7KSFDP0QJGWQLxuOoiSeY129hYGb103ADF0P7Q58Khad7gnMTUWsn3xAOR2P7H2LtJPEoidTbE QlDDCdCbsrSzvt0oifih1UNGb6nSRACCPKtvQzTM+DhwgFZDeJ84ZlQG6m0EJ2gEfp+Q+ZaSvKD P97lBjBA/20J9tmZnPxU5dOHB1aQGRJ/2YNMIESgWglmVdGCcy9qfrKCV33ebN6vFjxbTYUlA9K rYxJgmwn0CeV3T4s7Hq4csOxqPbEyLLgvoX9kNTJiRe0z36d+DY+dXRkN8Vmg9VO9/N5Oqso4iF N1GN17cVDlg1Q6GNnNg== X-Proofpoint-GUID: rT_aoT-9SVOY12xcvsMAI-hW_mEXxFa0 X-Proofpoint-ORIG-GUID: rT_aoT-9SVOY12xcvsMAI-hW_mEXxFa0 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-08_07,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 lowpriorityscore=0 spamscore=0 suspectscore=0 clxscore=1015 bulkscore=0 impostorscore=0 priorityscore=1501 malwarescore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603090003 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=148.163.156.1; envelope-from=jrossi@linux.ibm.com; helo=mx0a-001b2d01.pphosted.com X-Spam_score_int: -9 X-Spam_score: -1.0 X-Spam_bar: - X-Spam_report: (-1.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1773016662506154100 Content-Type: text/plain; charset="utf-8" From: Jared Rossi Add little-endian virt-queue configuration and support for virtio-blk-pci I= PL devices. Reviewed-by: Eric Farman Signed-off-by: Jared Rossi --- pc-bios/s390-ccw/main.c | 61 ++++++- pc-bios/s390-ccw/pci.h | 3 + pc-bios/s390-ccw/virtio-blkdev.c | 18 +++ pc-bios/s390-ccw/virtio-pci.c | 265 +++++++++++++++++++++++++++++++ pc-bios/s390-ccw/virtio-pci.h | 2 + pc-bios/s390-ccw/virtio.c | 54 ++++++- pc-bios/s390-ccw/virtio.h | 1 + 7 files changed, 399 insertions(+), 5 deletions(-) diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c index 32154c5db8..26287cfd81 100644 --- a/pc-bios/s390-ccw/main.c +++ b/pc-bios/s390-ccw/main.c @@ -18,6 +18,8 @@ #include "virtio.h" #include "virtio-scsi.h" #include "dasd-ipl.h" +#include "clp.h" +#include "virtio-pci.h" =20 static SubChannelId blk_schid =3D { .one =3D 1 }; static char loadparm_str[LOADPARM_LEN + 1]; @@ -151,6 +153,21 @@ static bool find_subch(int dev_no) return false; } =20 +static bool find_fid(uint32_t fid) +{ + ClpFhListEntry entry; + VDev *vdev =3D virtio_get_device(); + + if (find_pci_function(fid, &entry)) { + return false; + } + + vdev->pci_fh =3D entry.fh; + virtio_pci_id2type(vdev, entry.device_id); + + return vdev->dev_type !=3D 0; +} + static void menu_setup(VDev *vdev) { if (memcmp(loadparm_str, LOADPARM_PROMPT, LOADPARM_LEN) =3D=3D 0) { @@ -240,6 +257,9 @@ static bool find_boot_device(void) blk_schid.ssid =3D iplb.scsi.ssid & 0x3; found =3D find_subch(iplb.scsi.devno); break; + case S390_IPL_TYPE_PCI: + found =3D find_fid(iplb.pci.fid); + break; default: puts("Unsupported IPLB"); } @@ -276,7 +296,7 @@ static int virtio_setup(void) return ret; } =20 -static void ipl_boot_device(void) +static void ipl_ccw_device(void) { switch (cutype) { case CU_TYPE_DASD_3990: @@ -290,7 +310,44 @@ static void ipl_boot_device(void) } break; default: - printf("Attempting to boot from unexpected device type 0x%X\n", cu= type); + printf("Cannot boot CCW device with cu type 0x%X\n", cutype); + } +} + +static void ipl_pci_device(void) +{ + VDev *vdev =3D virtio_get_device(); + vdev->is_cdrom =3D false; + vdev->scsi_device_selected =3D false; + + if (virtio_pci_setup_device()) { + return; + } + + switch (vdev->dev_type) { + case VIRTIO_ID_BLOCK: + if (virtio_setup() =3D=3D 0) { + zipl_load(); /* only return on error */ + virtio_reset(virtio_get_device()); + } + break; + default: + printf("Cannot boot PCI device type 0x%X\n", vdev->dev_type); + } +} + +static void ipl_boot_device(void) +{ + switch (virtio_get_device()->ipl_type) { + case S390_IPL_TYPE_QEMU_SCSI: + case S390_IPL_TYPE_CCW: + ipl_ccw_device(); + break; + case S390_IPL_TYPE_PCI: + ipl_pci_device(); + break; + default: + puts("Unrecognized IPL type!"); } } =20 diff --git a/pc-bios/s390-ccw/pci.h b/pc-bios/s390-ccw/pci.h index 40a0bf9dcb..63825dd21c 100644 --- a/pc-bios/s390-ccw/pci.h +++ b/pc-bios/s390-ccw/pci.h @@ -29,8 +29,11 @@ union register_pair { #define PCIST_ENABLED 0x1 =20 #define PCI_CFGBAR 0xF /* Base Address Register for config sp= ace */ +#define PCI_CMD_REG 0x4 /* Offset of command register */ #define PCI_CAPABILITY_LIST 0x34 /* Offset of first capability list ent= ry */ =20 +#define PCI_BUS_MASTER_MASK 0x0020 /* LE bit 3 of 16 bit register */ + int pci_write(uint32_t fhandle, uint64_t offset, uint8_t pcias, uint64_t d= ata, uint8_t len); int pci_read(uint32_t fhandle, uint64_t offset, uint8_t pcias, void *buf, diff --git a/pc-bios/s390-ccw/virtio-blkdev.c b/pc-bios/s390-ccw/virtio-blk= dev.c index 9722b6970f..98b6cec3a0 100644 --- a/pc-bios/s390-ccw/virtio-blkdev.c +++ b/pc-bios/s390-ccw/virtio-blkdev.c @@ -13,10 +13,22 @@ #include "virtio.h" #include "virtio-scsi.h" #include "virtio-ccw.h" +#include "virtio-pci.h" +#include "bswap.h" =20 #define VIRTIO_BLK_F_GEOMETRY (1 << 4) #define VIRTIO_BLK_F_BLK_SIZE (1 << 6) =20 +/* + * Format header for little endian IPL + */ +static void fmt_blk_hdr_le(VirtioBlkOuthdr *hdr) +{ + hdr->type =3D bswap32(hdr->type); + hdr->ioprio =3D bswap32(hdr->ioprio); + hdr->sector =3D bswap64(hdr->sector); +} + static int virtio_blk_read_many(VDev *vdev, unsigned long sector, void *lo= ad_addr, int sec_num) { @@ -29,6 +41,10 @@ static int virtio_blk_read_many(VDev *vdev, unsigned lon= g sector, void *load_add out_hdr.ioprio =3D 99; out_hdr.sector =3D virtio_sector_adjust(sector); =20 + if (!be_ipl()) { + fmt_blk_hdr_le(&out_hdr); + } + vring_send_buf(vr, &out_hdr, sizeof(out_hdr), VRING_DESC_F_NEXT); =20 /* This is where we want to receive data */ @@ -240,6 +256,8 @@ int virtio_blk_setup_device(VDev *vdev) case S390_IPL_TYPE_QEMU_SCSI: case S390_IPL_TYPE_CCW: return virtio_ccw_setup(vdev); + case S390_IPL_TYPE_PCI: + return virtio_pci_setup(vdev); default: return 1; } diff --git a/pc-bios/s390-ccw/virtio-pci.c b/pc-bios/s390-ccw/virtio-pci.c index f6ce7ec766..bdb7eca0b7 100644 --- a/pc-bios/s390-ccw/virtio-pci.c +++ b/pc-bios/s390-ccw/virtio-pci.c @@ -165,3 +165,268 @@ int vpci_read_flex(uint64_t offset, uint8_t pcias, vo= id *buf, int len) =20 return 0; } + +static int vpci_set_selected_vq(uint16_t queue_num) +{ + return vpci_bswap16_write(c_cap.off + VPCI_C_OFFSET_Q_SELECT, c_cap.ba= r, queue_num); +} + +static int vpci_set_queue_enable(uint16_t enabled) +{ + return vpci_bswap16_write(c_cap.off + VPCI_C_OFFSET_Q_ENABLE, c_cap.ba= r, enabled); +} + +static int set_pci_vq_addr(uint64_t config_off, void *addr) +{ + return vpci_bswap64_write(c_cap.off + config_off, c_cap.bar, (uint64_t= ) addr); +} + +static int virtio_pci_get_blk_config(void) +{ + VirtioBlkConfig *cfg =3D &virtio_get_device()->config.blk; + int rc =3D vpci_read_flex(d_cap.off, d_cap.bar, cfg, sizeof(VirtioBlkC= onfig)); + + /* single byte fields are not touched */ + cfg->capacity =3D bswap64(cfg->capacity); + cfg->size_max =3D bswap32(cfg->size_max); + cfg->seg_max =3D bswap32(cfg->seg_max); + + cfg->geometry.cylinders =3D bswap16(cfg->geometry.cylinders); + + cfg->blk_size =3D bswap32(cfg->blk_size); + cfg->min_io_size =3D bswap16(cfg->min_io_size); + cfg->opt_io_size =3D bswap32(cfg->opt_io_size); + + return rc; +} + +static int virtio_pci_negotiate(void) +{ + int i, rc; + VDev *vdev =3D virtio_get_device(); + struct VirtioFeatureDesc { + uint32_t features; + uint8_t index; + } __attribute__((packed)) feats; + + for (i =3D 0; i < ARRAY_SIZE(vdev->guest_features); i++) { + feats.features =3D 0; + feats.index =3D i; + + rc =3D vpci_bswap32_write(c_cap.off + VPCI_C_OFFSET_DFSELECT, c_ca= p.bar, + feats.index); + rc |=3D vpci_read_flex(c_cap.off + VPCI_C_OFFSET_DF, c_cap.bar, &f= eats, 4); + + vdev->guest_features[i] &=3D bswap32(feats.features); + feats.features =3D vdev->guest_features[i]; + + + rc |=3D vpci_bswap32_write(c_cap.off + VPCI_C_OFFSET_GFSELECT, c_c= ap.bar, + feats.index); + rc |=3D vpci_bswap32_write(c_cap.off + VPCI_C_OFFSET_GF, c_cap.bar, + feats.features); + } + + return rc; +} + +/* + * Find the position of the capability config within PCI configuration + * space for a given cfg type. Return the position if found, otherwise 0. + */ +static uint8_t virtio_pci_find_cap_pos(uint8_t cfg_type) +{ + uint8_t next, cfg; + int rc; + + rc =3D vpci_read_byte(PCI_CAPABILITY_LIST, PCI_CFGBAR, &next); + rc |=3D vpci_read_byte(next + 3, PCI_CFGBAR, &cfg); + + while (!rc && (cfg !=3D cfg_type) && next) { + rc =3D vpci_read_byte(next + 1, PCI_CFGBAR, &next); + rc |=3D vpci_read_byte(next + 3, PCI_CFGBAR, &cfg); + } + + return rc ? 0 : next; +} + +/* + * Read PCI configuration space to find the offset of the Common, Device, = and + * Notification memory regions within the modern memory space. + * Returns 0 if success, 1 if a capability could not be located, or a + * negative RC if the configuration read failed. + */ +static int virtio_pci_read_pci_cap_config(void) +{ + uint8_t pos; + int rc; + + /* Common capabilities */ + pos =3D virtio_pci_find_cap_pos(VPCI_CAP_COMMON_CFG); + if (!pos) { + puts("Failed to locate PCI common configuration"); + return 1; + } + + rc =3D vpci_read_byte(pos + VPCI_CAP_BAR, PCI_CFGBAR, &c_cap.bar); + if (rc || vpci_read_bswap32(pos + VPCI_CAP_OFFSET, PCI_CFGBAR, &c_cap.= off)) { + puts("Failed to read PCI common configuration"); + return -EIO; + } + + /* Device capabilities */ + pos =3D virtio_pci_find_cap_pos(VPCI_CAP_DEVICE_CFG); + if (!pos) { + puts("Failed to locate PCI device configuration"); + return 1; + } + + rc =3D vpci_read_byte(pos + VPCI_CAP_BAR, PCI_CFGBAR, &d_cap.bar); + if (rc || vpci_read_bswap32(pos + VPCI_CAP_OFFSET, PCI_CFGBAR, &d_cap.= off)) { + puts("Failed to read PCI device configuration"); + return -EIO; + } + + /* Notification capabilities */ + pos =3D virtio_pci_find_cap_pos(VPCI_CAP_NOTIFY_CFG); + if (!pos) { + puts("Failed to locate PCI notification configuration"); + return 1; + } + + rc =3D vpci_read_byte(pos + VPCI_CAP_BAR, PCI_CFGBAR, &n_cap.bar); + if (rc || vpci_read_bswap32(pos + VPCI_CAP_OFFSET, PCI_CFGBAR, &n_cap.= off)) { + puts("Failed to read PCI notification configuration"); + return -EIO; + } + + rc =3D vpci_read_bswap32(pos + VPCI_N_CAP_MULT, PCI_CFGBAR, ¬ify_mu= lt); + if (rc || vpci_read_bswap16(c_cap.off + VPCI_C_OFFSET_Q_NOFF, c_cap.ba= r, + &q_notify_offset)) { + puts("Failed to read notification queue configuration"); + return -EIO; + } + + return 0; +} + +static int enable_pci_bus_master(void) { + uint16_t cmd_reg; + + if (vpci_read_bswap16(PCI_CMD_REG, PCI_CFGBAR, &cmd_reg)) { + puts("Failed to read PCI command register"); + return -EIO; + } + + if (vpci_bswap16_write(PCI_CMD_REG, PCI_CFGBAR, cmd_reg | PCI_BUS_MAST= ER_MASK)) { + puts("Failed to enable PCI bus mastering"); + return -EIO; + } + + return 0; +} + +int virtio_pci_setup(VDev *vdev) +{ + VRing *vr; + int rc; + uint8_t status; + uint16_t vq_size; + int i =3D 0; + + vdev->guessed_disk_nature =3D VIRTIO_GDN_NONE; + vdev->cmd_vr_idx =3D 0; + + if (virtio_pci_read_pci_cap_config()) { + puts("Invalid virtio PCI capabilities"); + return -EIO; + } + + if (enable_pci_bus_master()) { + return -EIO; + } + + if (virtio_reset(vdev)) { + return -EIO; + } + + status =3D VIRTIO_CONFIG_S_ACKNOWLEDGE; + if (virtio_pci_set_status(status)) { + puts("Virtio-pci device Failed to ACKNOWLEDGE"); + return -EIO; + } + + vdev->guest_features[1] =3D VIRTIO_F_VERSION_1; + if (virtio_pci_negotiate()) { + panic("Virtio feature negotation failed!"); + } + + switch (vdev->dev_type) { + case VIRTIO_ID_BLOCK: + vdev->nr_vqs =3D 1; + vdev->cmd_vr_idx =3D 0; + virtio_pci_get_blk_config(); + break; + default: + puts("Unsupported virtio device"); + return -ENODEV; + } + + status |=3D VIRTIO_CONFIG_S_DRIVER; + rc =3D virtio_pci_set_status(status); + if (rc) { + puts("Set status failed"); + return -EIO; + } + + if (vpci_read_bswap16(VPCI_C_OFFSET_Q_SIZE, c_cap.bar, &vq_size)) { + puts("Failed to read virt-queue configuration"); + return -EIO; + } + + /* Configure virt-queues for pci */ + for (i =3D 0; i < vdev->nr_vqs; i++) { + VqInfo info =3D { + .queue =3D (unsigned long long) virtio_get_ring_area(i), + .align =3D KVM_S390_VIRTIO_RING_ALIGN, + .index =3D i, + .num =3D vq_size, + }; + + vr =3D &vdev->vrings[i]; + vring_init(vr, &info); + + if (vpci_set_selected_vq(vr->id)) { + puts("Failed to set selected virt-queue"); + return -EIO; + } + + rc =3D set_pci_vq_addr(VPCI_C_OFFSET_Q_DESCLO, vr->desc); + rc |=3D set_pci_vq_addr(VPCI_C_OFFSET_Q_AVAILLO, vr->avail); + rc |=3D set_pci_vq_addr(VPCI_C_OFFSET_Q_USEDLO, vr->used); + if (rc) { + puts("Failed to configure virt-queue address"); + return -EIO; + } + + if (vpci_set_queue_enable(true)) { + puts("Failed to set virt-queue enabled"); + return -EIO; + } + } + + status |=3D VIRTIO_CONFIG_S_FEATURES_OK | VIRTIO_CONFIG_S_DRIVER_OK; + return virtio_pci_set_status(status); +} + +int virtio_pci_setup_device(void) +{ + VDev *vdev =3D virtio_get_device(); + + if (enable_pci_function(&vdev->pci_fh)) { + puts("Failed to enable PCI function"); + return -ENODEV; + } + + return 0; +} diff --git a/pc-bios/s390-ccw/virtio-pci.h b/pc-bios/s390-ccw/virtio-pci.h index 54c524f698..90d07cb9a7 100644 --- a/pc-bios/s390-ccw/virtio-pci.h +++ b/pc-bios/s390-ccw/virtio-pci.h @@ -65,6 +65,8 @@ typedef struct VirtioPciCap VirtioPciCap; void virtio_pci_id2type(VDev *vdev, uint16_t device_id); int virtio_pci_reset(VDev *vdev); long virtio_pci_notify(int vq_id); +int virtio_pci_setup(VDev *vdev); +int virtio_pci_setup_device(void); =20 int vpci_read_flex(uint64_t offset, uint8_t pcias, void *buf, int len); int vpci_read_bswap64(uint64_t offset, uint8_t pcias, uint64_t *buf); diff --git a/pc-bios/s390-ccw/virtio.c b/pc-bios/s390-ccw/virtio.c index 956b34ff33..390b55c7b9 100644 --- a/pc-bios/s390-ccw/virtio.c +++ b/pc-bios/s390-ccw/virtio.c @@ -17,6 +17,7 @@ #include "virtio.h" #include "virtio-scsi.h" #include "virtio-ccw.h" +#include "virtio-pci.h" #include "bswap.h" #include "helper.h" #include "s390-time.h" @@ -96,7 +97,7 @@ void vring_init(VRing *vr, VqInfo *info) vr->avail->idx =3D 0; =20 /* We're running with interrupts off anyways, so don't bother */ - vr->used->flags =3D VRING_USED_F_NO_NOTIFY; + vr->used->flags =3D be_ipl() ? VRING_USED_F_NO_NOTIFY : bswap16(VRING_= USED_F_NO_NOTIFY); vr->used->idx =3D 0; vr->used_idx =3D 0; vr->next_idx =3D 0; @@ -112,6 +113,8 @@ bool vring_notify(VRing *vr) case S390_IPL_TYPE_CCW: vr->cookie =3D virtio_ccw_notify(vdev.schid, vr->id, vr->cookie); break; + case S390_IPL_TYPE_PCI: + vr->cookie =3D virtio_pci_notify(vr->id); default: return 1; } @@ -119,11 +122,45 @@ bool vring_notify(VRing *vr) return vr->cookie >=3D 0; } =20 +/* + * Get endienness of the IPL type + * Return true for s390x native big-endian + */ +bool be_ipl(void) +{ + switch (virtio_get_device()->ipl_type) { + case S390_IPL_TYPE_QEMU_SCSI: + case S390_IPL_TYPE_CCW: + return true; + case S390_IPL_TYPE_PCI: + return false; + default: + return true; + } +} + +/* + * Format the virtio ring descriptor endianness + * Return the available index increment in the appropriate endianness + */ +static void vr_bswap_descriptor(VRingDesc *desc) +{ + desc->addr =3D bswap64(desc->addr); + desc->len =3D bswap32(desc->len); + desc->flags =3D bswap16(desc->flags); + desc->next =3D bswap16(desc->next); +} + void vring_send_buf(VRing *vr, void *p, int len, int flags) { + if (!be_ipl()) { + vr->avail->idx =3D bswap16(vr->avail->idx); + } + /* For follow-up chains we need to keep the first entry point */ if (!(flags & VRING_HIDDEN_IS_CHAIN)) { - vr->avail->ring[vr->avail->idx % vr->num] =3D vr->next_idx; + vr->avail->ring[vr->avail->idx % vr->num] =3D be_ipl() ? vr->next_= idx : + bswap16(vr-= >next_idx); } =20 vr->desc[vr->next_idx].addr =3D (unsigned long)p; @@ -131,12 +168,21 @@ void vring_send_buf(VRing *vr, void *p, int len, int = flags) vr->desc[vr->next_idx].flags =3D flags & ~VRING_HIDDEN_IS_CHAIN; vr->desc[vr->next_idx].next =3D vr->next_idx; vr->desc[vr->next_idx].next++; + + if (!be_ipl()) { + vr_bswap_descriptor(&vr->desc[vr->next_idx]); + } + vr->next_idx++; =20 /* Chains only have a single ID */ if (!(flags & VRING_DESC_F_NEXT)) { vr->avail->idx++; } + + if (!be_ipl()) { + vr->avail->idx =3D bswap16(vr->avail->idx); + } } =20 int vr_poll(VRing *vr) @@ -147,7 +193,7 @@ int vr_poll(VRing *vr) return 0; } =20 - vr->used_idx =3D vr->used->idx; + vr->used_idx =3D vr->used->idx; /* Endianness is preserved */ vr->next_idx =3D 0; vr->desc[0].len =3D 0; vr->desc[0].flags =3D 0; @@ -187,6 +233,8 @@ int virtio_reset(VDev *vdev) case S390_IPL_TYPE_QEMU_SCSI: case S390_IPL_TYPE_CCW: return virtio_ccw_reset(vdev); + case S390_IPL_TYPE_PCI: + return virtio_pci_reset(vdev); default: return -1; } diff --git a/pc-bios/s390-ccw/virtio.h b/pc-bios/s390-ccw/virtio.h index 1ef64675f4..d32a4830ca 100644 --- a/pc-bios/s390-ccw/virtio.h +++ b/pc-bios/s390-ccw/virtio.h @@ -273,6 +273,7 @@ struct VirtioCmd { }; typedef struct VirtioCmd VirtioCmd; =20 +bool be_ipl(void); void vring_init(VRing *vr, VqInfo *info); bool virtio_is_supported(VDev *vdev); bool vring_notify(VRing *vr); --=20 2.52.0 From nobody Sat Apr 11 21:30:06 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1773016636; cv=none; d=zohomail.com; s=zohoarc; b=jO+pKFWocRvFq5FrTLLrBQdlEQ9MsZ5+RqoNnaSMiJ8cNBEg59iZy0I2gjLoj+y55cE8KSP+YHlSQY6TuyLPHPKXmO2CUKryv3gXbu3Vzxhn4mbnXgPMQmyKoQcuzvc4bsnjQSSnYYEQrmsAlZTI2HMOn0BTkvQD3oxfzp5/Ro8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773016636; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=tYT647uJjQj0loqeIMFQbMYPLziwk199+/Z7uRcbt+g=; b=TpRbM4BlUsxAQz1kT3tJFqmwEua2yRi5TKc33ADV2HT/8lCsIcipfNdG2eyRZ2r3N1Pl9SbFfIIPGYuW90/IE7lUCGj7vwe+bdCICg6mrcW/hhN0+4Ga0con4t2MZUC5u88gCkY1CN0P6PDFgxY3kR/KhBBQqD/qXrPYs2R0/P8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1773016636306820.7603717320274; Sun, 8 Mar 2026 17:37:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vzObx-0006TU-VR; Sun, 08 Mar 2026 20:36:41 -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 1vzObr-0006Pc-8A; Sun, 08 Mar 2026 20:36:35 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vzObp-0001gg-KM; Sun, 08 Mar 2026 20:36:34 -0400 Received: from pps.filterd (m0360072.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 628IqplV1177331; Mon, 9 Mar 2026 00:36:32 GMT Received: from ppma22.wdc07v.mail.ibm.com (5c.69.3da9.ip4.static.sl-reverse.com [169.61.105.92]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4crcvr4emt-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 09 Mar 2026 00:36:32 +0000 (GMT) Received: from pps.filterd (ppma22.wdc07v.mail.ibm.com [127.0.0.1]) by ppma22.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 628Kt5I5009091; Mon, 9 Mar 2026 00:36:31 GMT Received: from smtprelay02.wdc07v.mail.ibm.com ([172.16.1.69]) by ppma22.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4crxqy32xm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 09 Mar 2026 00:36:31 +0000 Received: from smtpav04.wdc07v.mail.ibm.com (smtpav04.wdc07v.mail.ibm.com [10.39.53.231]) by smtprelay02.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 6290aUll24249010 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 9 Mar 2026 00:36:30 GMT Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 6E7565805E; Mon, 9 Mar 2026 00:36:30 +0000 (GMT) Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 5061858045; Mon, 9 Mar 2026 00:36:29 +0000 (GMT) Received: from t15.ibmuc.com (unknown [9.61.180.105]) by smtpav04.wdc07v.mail.ibm.com (Postfix) with ESMTP; Mon, 9 Mar 2026 00:36:29 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=tYT647uJjQj0loqeI MFQbMYPLziwk199+/Z7uRcbt+g=; b=hELw8pnIZWHgH59fM13QDMyPmlv7EJ1m+ KNmagKG4efnl9317gucZ3l9LeptJlRzg3fLPXd6IVIRntHcbg0wmeWfbJPg1hn4k PK820q75XDx01XSL4+0mNLlUp4W7/edSZRXAJ5/HXKfzvsIvvQb6YoL334VwbrCI FJRbu7qQW6b+7WhRZdObOGBq9bUS+EDCJusfvYcVKIn5ZoGsb+05+gMoMTDKhEK0 m9vb7A91jAkCDWa69YzUuNi2R8x4k2ynE8Nl7d+c12vhs6nTyuLvcZATR8RjdhkY G3DKxpvECp5tCGDYO+S/fPrcZzUy8N2Y+VxyVCzSkrKlqph2ZE62w== From: jrossi@linux.ibm.com To: qemu-devel@nongnu.org, qemu-s390x@nongnu.org, thuth@redhat.com, mst@redhat.com Cc: jjherne@linux.ibm.com, alifm@linux.ibm.com, farman@linux.ibm.com, mjrosato@linux.ibm.com, jrossi@linux.ibm.com, zycai@linux.ibm.com Subject: [PATCH v5 13/15] s390x: Build IPLB for virtio-pci devices Date: Sun, 8 Mar 2026 20:35:59 -0400 Message-ID: <20260309003601.242634-14-jrossi@linux.ibm.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260309003601.242634-1-jrossi@linux.ibm.com> References: <20260309003601.242634-1-jrossi@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA5MDAwMyBTYWx0ZWRfX8ZaJwFejQ6Rb wHlh6/LKU3vTOT/Un+N2Yphc+u2TLApHn4y4ank5INDldE0nZh81CC4EZDKFGnagSKCYkFxfTnI cSN9zdJrFw+UTik8hfE6oJbl2Jn90aQj1anEqi7yxgoi28rVao/PRwGC1sarYtsDTYiHwK1tRHE KEbNHCt/WVaTL73H4nLUpmIC79bUiWT7NC0EpVDLmIOSuoJYid9Oti4awIZpuyqAQLoMR4hkLue bWTUwsofuaaa/snM7pCqj0BF130Kjhj3dW/KGNvSE+ntnFnO4ZJeSksYtu5C63jx4UK3HP9SFmz cybsR0W/OdJM/yHf5FHKD0+HdlkllkGW71EddDHpZLPDKHFPFrpGPkdTcDcL48g3Cd9g+pny7/z CZ9LFFO26F8KKqAz013CNk8D20FwqTxCHRIueAYIEY1DmwZ31kRfPjA1IJh4Wuq/Cu9lYm7NoVg hen1S1KvnHLOf9J8oXw== X-Proofpoint-GUID: 07vTK0OqLy82wKIBZFF7-p9iAUWK2oQN X-Proofpoint-ORIG-GUID: 07vTK0OqLy82wKIBZFF7-p9iAUWK2oQN X-Authority-Analysis: v=2.4 cv=QoFTHFyd c=1 sm=1 tr=0 ts=69ae1610 cx=c_pps a=5BHTudwdYE3Te8bg5FgnPg==:117 a=5BHTudwdYE3Te8bg5FgnPg==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=RzCfie-kr_QcCd8fBx8p:22 a=VnNF1IyMAAAA:8 a=20KFwNOVAAAA:8 a=2vq5nSo2ypbVcaHj6lgA:9 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-08_07,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 spamscore=0 priorityscore=1501 phishscore=0 lowpriorityscore=0 adultscore=0 clxscore=1015 malwarescore=0 suspectscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603090003 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=148.163.158.5; envelope-from=jrossi@linux.ibm.com; helo=mx0b-001b2d01.pphosted.com X-Spam_score_int: -9 X-Spam_score: -1.0 X-Spam_bar: - X-Spam_report: (-1.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1773016638132154100 Content-Type: text/plain; charset="utf-8" From: Jared Rossi Search for a corresponding S390PCIBusDevice and build an IPLB if a device h= as been indexed for boot but does not identify as a CCW device, PCI devices are not yet included in boot probing (they must have a boot ind= ex). Reviewed-by: Thomas Huth Reviewed-by: Eric Farman Signed-off-by: Jared Rossi --- hw/s390x/ipl.c | 56 ++++++++++++++++++++++++++++++--- hw/s390x/ipl.h | 3 ++ hw/s390x/s390-pci-bus.c | 3 +- include/hw/s390x/s390-pci-bus.h | 2 ++ 4 files changed, 57 insertions(+), 7 deletions(-) diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c index d34adb5522..53dd3deafa 100644 --- a/hw/s390x/ipl.c +++ b/hw/s390x/ipl.c @@ -28,6 +28,8 @@ #include "hw/s390x/ebcdic.h" #include "hw/scsi/scsi.h" #include "hw/virtio/virtio-net.h" +#include "hw/virtio/virtio-pci.h" +#include "hw/s390x/s390-pci-bus.h" #include "exec/cpu-common.h" #include "ipl.h" #include "qemu/error-report.h" @@ -340,7 +342,8 @@ static void s390_ipl_set_boot_menu(S390IPLState *ipl) ipl->qipl.boot_menu_timeout =3D cpu_to_be32(splash_time); } =20 -#define CCW_DEVTYPE_NONE 0x00 +#define S390_DEVTYPE_NONE 0x00 + #define CCW_DEVTYPE_VIRTIO 0x01 #define CCW_DEVTYPE_VIRTIO_NET 0x02 #define CCW_DEVTYPE_SCSI 0x03 @@ -349,7 +352,7 @@ static void s390_ipl_set_boot_menu(S390IPLState *ipl) static CcwDevice *s390_get_ccw_device(DeviceState *dev_st, int *devtype) { CcwDevice *ccw_dev =3D NULL; - int tmp_dt =3D CCW_DEVTYPE_NONE; + int tmp_dt =3D S390_DEVTYPE_NONE; =20 if (dev_st) { VirtIONet *virtio_net_dev =3D (VirtIONet *) @@ -396,6 +399,31 @@ static CcwDevice *s390_get_ccw_device(DeviceState *dev= _st, int *devtype) return ccw_dev; } =20 +#define PCI_DEVTYPE_VIRTIO 0x05 + +static S390PCIBusDevice *s390_get_pci_device(DeviceState *dev_st, int *dev= type) +{ + S390PCIBusDevice *pbdev =3D NULL; + int tmp_dt =3D S390_DEVTYPE_NONE; + + if (dev_st) { + PCIDevice *pci_dev =3D (PCIDevice *) + object_dynamic_cast(OBJECT(qdev_get_parent_bus(dev_st)->parent= ), + TYPE_VIRTIO_PCI); + if (pci_dev) { + pbdev =3D s390_pci_find_dev_by_pci(s390_get_phb(), pci_dev); + if (pbdev) { + tmp_dt =3D PCI_DEVTYPE_VIRTIO; + } + } + } + if (devtype) { + *devtype =3D tmp_dt; + } + + return pbdev; +} + static uint64_t s390_ipl_map_iplb_chain(IplParameterBlock *iplb_chain) { S390IPLState *ipl =3D get_ipl_device(); @@ -428,14 +456,12 @@ void s390_ipl_convert_loadparm(char *ascii_lp, uint8_= t *ebcdic_lp) static bool s390_build_iplb(DeviceState *dev_st, IplParameterBlock *iplb) { CcwDevice *ccw_dev =3D NULL; + S390PCIBusDevice *pbdev =3D NULL; SCSIDevice *sd; int devtype; uint8_t *lp; g_autofree void *scsi_lp =3D NULL; =20 - /* - * Currently allow IPL only from CCW devices. - */ ccw_dev =3D s390_get_ccw_device(dev_st, &devtype); if (ccw_dev) { lp =3D ccw_dev->loadparm; @@ -485,6 +511,26 @@ static bool s390_build_iplb(DeviceState *dev_st, IplPa= rameterBlock *iplb) return true; } =20 + pbdev =3D s390_get_pci_device(dev_st, &devtype); + if (pbdev) { + switch (devtype) { + case PCI_DEVTYPE_VIRTIO: + iplb->len =3D S390_IPLB_MIN_PCI_LEN; + iplb->pbt =3D S390_IPL_TYPE_PCI; + iplb->pci.fid =3D pbdev->fid; + break; + default: + return false; + } + + /* Per-device loadparm not yet supported for non-ccw IPL */ + lp =3D S390_CCW_MACHINE(qdev_get_machine())->loadparm; + s390_ipl_convert_loadparm((char *)lp, iplb->loadparm); + iplb->flags |=3D DIAG308_FLAGS_LP_VALID; + + return true; + } + return false; } =20 diff --git a/hw/s390x/ipl.h b/hw/s390x/ipl.h index c542d30ce2..403cd08450 100644 --- a/hw/s390x/ipl.h +++ b/hw/s390x/ipl.h @@ -107,6 +107,7 @@ QEMU_BUILD_BUG_MSG(offsetof(S390IPLState, iplb) & 3, "a= lignment of iplb wrong"); #define S390_IPLB_MIN_PV_LEN 148 #define S390_IPLB_MIN_CCW_LEN 200 #define S390_IPLB_MIN_FCP_LEN 384 +#define S390_IPLB_MIN_PCI_LEN 376 #define S390_IPLB_MIN_QEMU_SCSI_LEN 200 =20 static inline bool iplb_valid_len(IplParameterBlock *iplb) @@ -179,6 +180,8 @@ static inline bool iplb_valid(IplParameterBlock *iplb) return len >=3D S390_IPLB_MIN_FCP_LEN; case S390_IPL_TYPE_CCW: return len >=3D S390_IPLB_MIN_CCW_LEN; + case S390_IPL_TYPE_PCI: + return len >=3D S390_IPLB_MIN_PCI_LEN; case S390_IPL_TYPE_QEMU_SCSI: default: return false; diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c index 3166b91c46..4de7b587e8 100644 --- a/hw/s390x/s390-pci-bus.c +++ b/hw/s390x/s390-pci-bus.c @@ -250,8 +250,7 @@ S390PCIBusDevice *s390_pci_find_dev_by_target(S390pciSt= ate *s, return NULL; } =20 -static S390PCIBusDevice *s390_pci_find_dev_by_pci(S390pciState *s, - PCIDevice *pci_dev) +S390PCIBusDevice *s390_pci_find_dev_by_pci(S390pciState *s, PCIDevice *pci= _dev) { S390PCIBusDevice *pbdev; =20 diff --git a/include/hw/s390x/s390-pci-bus.h b/include/hw/s390x/s390-pci-bu= s.h index f643e13057..9228523ce8 100644 --- a/include/hw/s390x/s390-pci-bus.h +++ b/include/hw/s390x/s390-pci-bus.h @@ -402,6 +402,8 @@ S390PCIBusDevice *s390_pci_find_dev_by_fh(S390pciState = *s, uint32_t fh); S390PCIBusDevice *s390_pci_find_dev_by_fid(S390pciState *s, uint32_t fid); S390PCIBusDevice *s390_pci_find_dev_by_target(S390pciState *s, const char *target); +S390PCIBusDevice *s390_pci_find_dev_by_pci(S390pciState *s, + PCIDevice *pci_dev); S390PCIBusDevice *s390_pci_find_next_avail_dev(S390pciState *s, S390PCIBusDevice *pbdev); void s390_pci_ism_reset(void); --=20 2.52.0 From nobody Sat Apr 11 21:30:06 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1773016698; cv=none; d=zohomail.com; s=zohoarc; b=a6jJYubLv9Oo5GmZVS8UVIICH0FNXH64fUgrX0ssOI0AQzlT4DpIa5MNOPC7JlGAMlSbzIhV9Zpjum0ePUwOOL1d8D3UCcsnKR0TXv2xQ20fLs4/Ch9olm2opcWmbgpqn2uMqpc2vFjf4ET0cKlB3TpQkDnvfe42mqP8PhdeJzM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773016698; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=2SID591dKD6r59nTB4EY6gwXeAW8y05Ol0a4hhnvmSs=; b=asyV3ovjRklBFxM4qPFEP8zaA6k5yVKAhCdeqRyDqNjWzv1Tg/hZZA2KLvljGutwumMTPFMkWnaz0Yq4TbLiHUqF8ZI1rIIIuhyIKVIF03Z9RgUNCB/lGtl8LDRmAYTOcvjblGT4WgcNv/awpuUkPIWMlVMbnsfH6KW2/GebTtI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1773016698548570.6878648142253; Sun, 8 Mar 2026 17:38:18 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vzObx-0006TS-Ue; Sun, 08 Mar 2026 20:36:41 -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 1vzObt-0006SD-Ki; Sun, 08 Mar 2026 20:36:37 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vzObs-0001gx-09; Sun, 08 Mar 2026 20:36:37 -0400 Received: from pps.filterd (m0356516.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 628NdiGS1679369; Mon, 9 Mar 2026 00:36:34 GMT Received: from ppma11.dal12v.mail.ibm.com (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4crcun4ebh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 09 Mar 2026 00:36:34 +0000 (GMT) Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1]) by ppma11.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 628NZYO0015706; Mon, 9 Mar 2026 00:36:34 GMT Received: from smtprelay04.wdc07v.mail.ibm.com ([172.16.1.71]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 4cs121tqng-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 09 Mar 2026 00:36:33 +0000 Received: from smtpav04.wdc07v.mail.ibm.com (smtpav04.wdc07v.mail.ibm.com [10.39.53.231]) by smtprelay04.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 6290aWbh64225702 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 9 Mar 2026 00:36:32 GMT Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 3B78958052; Mon, 9 Mar 2026 00:36:32 +0000 (GMT) Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 2500258045; Mon, 9 Mar 2026 00:36:31 +0000 (GMT) Received: from t15.ibmuc.com (unknown [9.61.180.105]) by smtpav04.wdc07v.mail.ibm.com (Postfix) with ESMTP; Mon, 9 Mar 2026 00:36:31 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=2SID591dKD6r59nTB 4EY6gwXeAW8y05Ol0a4hhnvmSs=; b=B/W6YiswBIB6DM54909UrO8tOdvy4Z7NB Go1aSGcFaDva+y4Oi4/IRmGCR34ZsgOq0PPt6mA515LQfo00591WSom8tAJrGjQG MwS7lLw9xLqW2zSx4VwluXYAW3HuEIdP0tefM53/lQR49lRNhaylw2jaX0XfJ/Ic I0A2KH20KHOZftFE6cO65XGQ+tu125BWXZiouffTo/eujyN59pba3VsB5Z/1kOJZ o2tgDuttKJLy7jj9r0Rrf8ri+VMdat89cfnjkgTybw7Y+NJ81JUjJ7sfssvn+245 K8zuAfh4gKaB0raxAQSr0Vm/eMKvWbw3ksxpcYfXImdfO9IINF4Bg== From: jrossi@linux.ibm.com To: qemu-devel@nongnu.org, qemu-s390x@nongnu.org, thuth@redhat.com, mst@redhat.com Cc: jjherne@linux.ibm.com, alifm@linux.ibm.com, farman@linux.ibm.com, mjrosato@linux.ibm.com, jrossi@linux.ibm.com, zycai@linux.ibm.com Subject: [PATCH v5 14/15] hw: Add "loadparm" property to virtio block PCI devices booting on s390x Date: Sun, 8 Mar 2026 20:36:00 -0400 Message-ID: <20260309003601.242634-15-jrossi@linux.ibm.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260309003601.242634-1-jrossi@linux.ibm.com> References: <20260309003601.242634-1-jrossi@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-GUID: UWp7TpX7tci833EL9P-hsjpIew4a1ogX X-Authority-Analysis: v=2.4 cv=Hp172kTS c=1 sm=1 tr=0 ts=69ae1612 cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=Y2IxJ9c9Rs8Kov3niI8_:22 a=VnNF1IyMAAAA:8 a=20KFwNOVAAAA:8 a=F4WGF4pRLNDXqq0IcGUA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA5MDAwMyBTYWx0ZWRfXylGuPQuTphXR XPbB6zvGfdoai6XQFW3haiKNc9UHYMwEd8aJnwmoBzE1LgUERtL7P3FvYl7HUOIiGh0UNPP8PPu C2Q/jHiv0sqoiDDApRBK8VuNjYJn/jLgVmg2O9G5dP8pBIz+dTmQqdD0IqyaWnactuBqhjJ6vvo PDlIYfKU4FNjZeyaGJw/yNs/HTTVtB3mDTKOhkZ+E0DdYCRaVm7o8FNFNqJg8A+0+2HaiR0f2O1 x1TCz0ooVtNEF73xK/KQywVzNKOSHIlSmHwbXe55ONROl1u2/nEZgqSALXlfAl3q9hanX5iJ2O/ 8ty6URb6f5bKns8ybWi32jAn1CyBvw4k37zSE7Ou1RxYJ49Ni8q53p7tug6RX0zB/7WIVIgq536 yI298W+4OWQvH8ED4oKKwB3E6IMLF0fK4AzaBkdQatvmWJt2lYzs6VnuGZxmfIKsA6qTFbeXU5p RzXmROqp4GP0WSglrqg== X-Proofpoint-ORIG-GUID: UWp7TpX7tci833EL9P-hsjpIew4a1ogX X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-08_07,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 adultscore=0 malwarescore=0 impostorscore=0 suspectscore=0 spamscore=0 phishscore=0 clxscore=1015 priorityscore=1501 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603090003 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=148.163.158.5; envelope-from=jrossi@linux.ibm.com; helo=mx0b-001b2d01.pphosted.com X-Spam_score_int: -9 X-Spam_score: -1.0 X-Spam_bar: - X-Spam_report: (-1.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1773016699266158500 Content-Type: text/plain; charset="utf-8" From: Jared Rossi The loadparm is required on s390x to pass the information to the boot loader such as which kernel should be started or whether the boot menu should be s= hown. Because PCI devices do not naturally allocate space for this, the property = is added on an architecture specific basis for supported device types. Reviewed-by: Thomas Huth Signed-off-by: Jared Rossi --- hw/pci/pci.c | 38 +++++++++++++++++++++++++++++++++++++ hw/s390x/ipl.c | 11 +++++++++-- hw/virtio/virtio-blk-pci.c | 1 + include/hw/pci/pci.h | 1 + include/hw/pci/pci_device.h | 3 +++ 5 files changed, 52 insertions(+), 2 deletions(-) diff --git a/hw/pci/pci.c b/hw/pci/pci.c index 6399ebd41c..2c3657d00d 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -36,6 +36,7 @@ #include "migration/qemu-file-types.h" #include "migration/vmstate.h" #include "net/net.h" +#include "system/arch_init.h" #include "system/numa.h" #include "system/runstate.h" #include "system/system.h" @@ -2843,6 +2844,43 @@ int pci_qdev_find_device(const char *id, PCIDevice *= *pdev) return rc; } =20 +static char *pci_qdev_property_get_loadparm(Object *obj, Error **errp) +{ + return g_strdup(PCI_DEVICE(obj)->loadparm); +} + +static void pci_qdev_property_set_loadparm(Object *obj, const char *value, + Error **errp) +{ + void *lp_str; + + if (object_property_get_int(obj, "bootindex", NULL) < 0) { + error_setg(errp, "'loadparm' is only valid for boot devices"); + return; + } + + lp_str =3D g_malloc0(strlen(value) + 1); + if (!qdev_prop_sanitize_s390x_loadparm(lp_str, value, errp)) { + g_free(lp_str); + return; + } + PCI_DEVICE(obj)->loadparm =3D lp_str; +} + +void pci_qdev_property_add_specifics(DeviceClass *dc) +{ + ObjectClass *oc =3D OBJECT_CLASS(dc); + + /* The loadparm property is only supported on s390x */ + if (target_s390x()) { + object_class_property_add_str(oc, "loadparm", + pci_qdev_property_get_loadparm, + pci_qdev_property_set_loadparm); + object_class_property_set_description(oc, "loadparm", + "load parameter (s390x only)= "); + } +} + MemoryRegion *pci_address_space(PCIDevice *dev) { return pci_get_bus(dev)->address_space_mem; diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c index 53dd3deafa..c231084c18 100644 --- a/hw/s390x/ipl.c +++ b/hw/s390x/ipl.c @@ -461,6 +461,7 @@ static bool s390_build_iplb(DeviceState *dev_st, IplPar= ameterBlock *iplb) int devtype; uint8_t *lp; g_autofree void *scsi_lp =3D NULL; + g_autofree void *pci_lp =3D NULL; =20 ccw_dev =3D s390_get_ccw_device(dev_st, &devtype); if (ccw_dev) { @@ -513,6 +514,14 @@ static bool s390_build_iplb(DeviceState *dev_st, IplPa= rameterBlock *iplb) =20 pbdev =3D s390_get_pci_device(dev_st, &devtype); if (pbdev) { + pci_lp =3D object_property_get_str(OBJECT(pbdev->pdev), "loadparm"= , NULL); + if (pci_lp && strlen(pci_lp) > 0) { + lp =3D pci_lp; + } else { + /* Use machine loadparm as a place holder if PCI LP is unset */ + lp =3D S390_CCW_MACHINE(qdev_get_machine())->loadparm; + } + switch (devtype) { case PCI_DEVTYPE_VIRTIO: iplb->len =3D S390_IPLB_MIN_PCI_LEN; @@ -523,8 +532,6 @@ static bool s390_build_iplb(DeviceState *dev_st, IplPar= ameterBlock *iplb) return false; } =20 - /* Per-device loadparm not yet supported for non-ccw IPL */ - lp =3D S390_CCW_MACHINE(qdev_get_machine())->loadparm; s390_ipl_convert_loadparm((char *)lp, iplb->loadparm); iplb->flags |=3D DIAG308_FLAGS_LP_VALID; =20 diff --git a/hw/virtio/virtio-blk-pci.c b/hw/virtio/virtio-blk-pci.c index 64a434c81b..3eecc23a65 100644 --- a/hw/virtio/virtio-blk-pci.c +++ b/hw/virtio/virtio-blk-pci.c @@ -71,6 +71,7 @@ static void virtio_blk_pci_class_init(ObjectClass *klass,= const void *data) =20 set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); device_class_set_props(dc, virtio_blk_pci_properties); + pci_qdev_property_add_specifics(dc); k->realize =3D virtio_blk_pci_realize; pcidev_k->vendor_id =3D PCI_VENDOR_ID_REDHAT_QUMRANET; pcidev_k->device_id =3D PCI_DEVICE_ID_VIRTIO_BLOCK; diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h index 64141e92fe..5b179091de 100644 --- a/include/hw/pci/pci.h +++ b/include/hw/pci/pci.h @@ -380,6 +380,7 @@ const char *pci_root_bus_path(PCIDevice *dev); bool pci_bus_bypass_iommu(PCIBus *bus); PCIDevice *pci_find_device(PCIBus *bus, int bus_num, uint8_t devfn); int pci_qdev_find_device(const char *id, PCIDevice **pdev); +void pci_qdev_property_add_specifics(DeviceClass *dc); void pci_bus_get_w64_range(PCIBus *bus, Range *range); =20 void pci_device_deassert_intx(PCIDevice *dev); diff --git a/include/hw/pci/pci_device.h b/include/hw/pci/pci_device.h index 88ccea5011..5cac6e1688 100644 --- a/include/hw/pci/pci_device.h +++ b/include/hw/pci/pci_device.h @@ -62,6 +62,9 @@ struct PCIDevice { bool partially_hotplugged; bool enabled; =20 + /* only for s390x */ + char *loadparm; + /* PCI config space */ uint8_t *config; =20 --=20 2.52.0 From nobody Sat Apr 11 21:30:06 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1773016614; cv=none; d=zohomail.com; s=zohoarc; b=n/Hd7UGKpYlyVRUOzuyB6u5hNpjCN+c7AagZx9xXS005EBFDh+JNL9b9sseBk7dRHn5F4cwOSy+rpF0ACsTUU2n7d7KPEiDEo7KoAOCUEUo4QEAgnZIVHmi2agYzvbBPgdejoPlFsfmhW9y13Vnv6JEv8rmqyL6v3gzu+OpY5mY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773016614; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Ikc7gr/1TvctqRb1Abu2usSH6QtlZ1QDD3Uc1w7K/Lw=; b=gCsMxWcIFJK1v4i6zY1o9G9lT88GDwn88oE4gSYzHvh+paclEWATfV/trETloaDRTiArADKPWYprctwpUOE6rQOI+O6B1nbcGrj0H35gjr7mWQtdX3gTk4pEijk5lOgU0BFm14Xgvu3JKqFhJCQwvkUX/WAeh3mYu6SaWcDDOs0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1773016614452775.5435654709775; Sun, 8 Mar 2026 17:36:54 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vzObz-0006Tt-Ju; Sun, 08 Mar 2026 20:36:43 -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 1vzObu-0006Sn-JX; Sun, 08 Mar 2026 20:36:39 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vzObt-0001hC-8F; Sun, 08 Mar 2026 20:36:38 -0400 Received: from pps.filterd (m0356516.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 628MtleT1599036; Mon, 9 Mar 2026 00:36:36 GMT Received: from ppma23.wdc07v.mail.ibm.com (5d.69.3da9.ip4.static.sl-reverse.com [169.61.105.93]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4crcun4ebj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 09 Mar 2026 00:36:35 +0000 (GMT) Received: from pps.filterd (ppma23.wdc07v.mail.ibm.com [127.0.0.1]) by ppma23.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 628MY5qt023217; Mon, 9 Mar 2026 00:36:35 GMT Received: from smtprelay06.wdc07v.mail.ibm.com ([172.16.1.73]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4cryukawfx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 09 Mar 2026 00:36:35 +0000 Received: from smtpav04.wdc07v.mail.ibm.com (smtpav04.wdc07v.mail.ibm.com [10.39.53.231]) by smtprelay06.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 6290aYfS19858172 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 9 Mar 2026 00:36:34 GMT Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 1ACB358050; Mon, 9 Mar 2026 00:36:34 +0000 (GMT) Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id EEB2D58052; Mon, 9 Mar 2026 00:36:32 +0000 (GMT) Received: from t15.ibmuc.com (unknown [9.61.180.105]) by smtpav04.wdc07v.mail.ibm.com (Postfix) with ESMTP; Mon, 9 Mar 2026 00:36:32 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=Ikc7gr/1TvctqRb1A bu2usSH6QtlZ1QDD3Uc1w7K/Lw=; b=qL8kRLB5ZSRWz65Rl0ed2X2Sj+jnFDrye 0baaWGLxychPqYatH3FtfHaIYBRx6avPiGtJsxGmmPgxqmWnTG598i5y2DFPN+RO sfy/63RZefeYpaDQYOXZDww+c6TWspe61SFHlL931j+2kANr/Mj76yeeD33b7oEl Mf4bvJjtfKLwzY8Mk+ivc9fuCKRLm3xTqM8cJrWVTeSj4rwJySVPNCrsCKDNsWul qbU/2o6RL/NQjW+Ohu13Ru01I9DMoaFsg7lyjeAB6gsUBF6dXahx81rBxfvO+38B LcDZd0JTPrkM/V+7KI2e9jedfK0NIcKTdNjSMcu8gfeZlZiEc6/rQ== From: jrossi@linux.ibm.com To: qemu-devel@nongnu.org, qemu-s390x@nongnu.org, thuth@redhat.com, mst@redhat.com Cc: jjherne@linux.ibm.com, alifm@linux.ibm.com, farman@linux.ibm.com, mjrosato@linux.ibm.com, jrossi@linux.ibm.com, zycai@linux.ibm.com Subject: [PATCH v5 15/15] tests/qtest: Add s390x PCI boot test to cdrom-test.c Date: Sun, 8 Mar 2026 20:36:01 -0400 Message-ID: <20260309003601.242634-16-jrossi@linux.ibm.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260309003601.242634-1-jrossi@linux.ibm.com> References: <20260309003601.242634-1-jrossi@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-GUID: mTTdHyOiVaS1RRQsKLii2_h7C5vJwyoZ X-Authority-Analysis: v=2.4 cv=Hp172kTS c=1 sm=1 tr=0 ts=69ae1614 cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=Y2IxJ9c9Rs8Kov3niI8_:22 a=VnNF1IyMAAAA:8 a=20KFwNOVAAAA:8 a=nJdWAAiftWQBe2TG7ssA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA5MDAwMyBTYWx0ZWRfX2RjkgsEfqHlu shU6YTqXJruNFHRmTilxLNrZ0gHYSl7GMMUZlTyHCrk/BsUCh45hksz3OgKge1O8Zb5uLSA7JQU jjkvUk7ZvIxJKg8XmsV4JnkneDG6XyZ5fji4P9tWv7m044i/xgk1Z8Kt3SQ/dwGC5NED1d4dk+6 PTIZ6vdTp7nMxSG014sd7MU3/1rpMWXJl683Wwaw0oln1AecRwwUYavuehiJt0eq1tFBrcwp8Ii mvnNTuAiHkpbPeTz50YUPUSheyb1sHh2Fv+twwbejR0jsvY7iOQMDFeEu2kifsbBett8Ab3nFK+ LOfo2Cul4QtxXf5/HJ5MDJ8LSBSw5jSKvV475jGty3ZAu5QHlYZoMyJ3y/i8tpQPL3SJs1CuvEg JvbpMrkI2llFfM80jO7wLEza/zDrawuL803Bqdf+pj4LDP9h3TdY9EuB4Smrl7BOpXnVq4gq3Cq l1B6SpZCINZSW4uXZzQ== X-Proofpoint-ORIG-GUID: mTTdHyOiVaS1RRQsKLii2_h7C5vJwyoZ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-08_07,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 adultscore=0 malwarescore=0 impostorscore=0 suspectscore=0 spamscore=0 phishscore=0 clxscore=1015 priorityscore=1501 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603090003 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=148.163.158.5; envelope-from=jrossi@linux.ibm.com; helo=mx0b-001b2d01.pphosted.com X-Spam_score_int: -9 X-Spam_score: -1.0 X-Spam_bar: - X-Spam_report: (-1.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1773016615341158500 Content-Type: text/plain; charset="utf-8" From: Jared Rossi Add a rudimentary test for s390x IPL to verify that a guest may boot using virtio-blk-pci device. Reviewed-by: Thomas Huth Signed-off-by: Jared Rossi --- tests/qtest/cdrom-test.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/qtest/cdrom-test.c b/tests/qtest/cdrom-test.c index 56e2d283a9..a65854d2bc 100644 --- a/tests/qtest/cdrom-test.c +++ b/tests/qtest/cdrom-test.c @@ -246,6 +246,13 @@ static void add_s390x_tests(void) "-drive if=3Dnone,id=3Dd2,media=3Dcdrom,file= =3D", test_cdboot); } + if (qtest_has_device("virtio-blk-pci")) { + qtest_add_data_func("cdrom/boot/pci-bus-with-bootindex", + "-device virtio-scsi -device virtio-serial " + "-device virtio-blk-pci,drive=3Dd1,bootindex= =3D1 " + "-drive if=3Dnone,id=3Dd1,media=3Dcdrom,file= =3D", + test_cdboot); + } } =20 int main(int argc, char **argv) --=20 2.52.0