From patchwork Wed May 20 13:19:42 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11560413 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D718C90 for ; Wed, 20 May 2020 13:21:33 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id AC2272070A for ; Wed, 20 May 2020 13:21:33 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="c8ueCYF2" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org AC2272070A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:58934 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jbOf6-0004Xy-Sh for patchwork-qemu-devel@patchwork.kernel.org; Wed, 20 May 2020 09:21:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47602) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbOdy-0001dy-O3 for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:22 -0400 Received: from us-smtp-delivery-1.mimecast.com ([205.139.110.120]:52751 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jbOdx-00007w-6F for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:21 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589980819; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=RWN5wmxMnkODqDehtEEUeaEitvVLGrAewLAcbu9aisk=; b=c8ueCYF2XViB0axlI8s48nx56sQHQxDTw5+/7FEBcas5VchVjPx89Xc+taOlnFq95ZSIT2 eJwkjMEfrovrFWfQ1Ttn60+fXE3QYIE7dVoQGPKAF1o+g0JYeE7NlWqgaFqrXrXY2fqLQ1 9dCTJfA5ncsY/srsyys6J9M5OqFSiKY= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-440-_4-0MF52MF2ZbOGiRkED8Q-1; Wed, 20 May 2020 09:20:16 -0400 X-MC-Unique: _4-0MF52MF2ZbOGiRkED8Q-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id D00F41902EA0; Wed, 20 May 2020 13:20:14 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-113-50.ams2.redhat.com [10.36.113.50]) by smtp.corp.redhat.com (Postfix) with ESMTP id E2C705C1BE; Wed, 20 May 2020 13:20:04 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 9422C9DAD; Wed, 20 May 2020 15:20:03 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v3 01/22] microvm: name qboot binary qboot.bin Date: Wed, 20 May 2020 15:19:42 +0200 Message-Id: <20200520132003.9492-2-kraxel@redhat.com> In-Reply-To: <20200520132003.9492-1-kraxel@redhat.com> References: <20200520132003.9492-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=205.139.110.120; envelope-from=kraxel@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/05/19 22:48:02 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" qboot isn't a bios and shouldnt be named that way. Signed-off-by: Gerd Hoffmann Reviewed-by: Philippe Mathieu-Daudé --- hw/i386/microvm.c | 4 ++-- pc-bios/{bios-microvm.bin => qboot.bin} | Bin roms/Makefile | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) rename pc-bios/{bios-microvm.bin => qboot.bin} (100%) diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c index 937db10ae6a5..867d3d652145 100644 --- a/hw/i386/microvm.c +++ b/hw/i386/microvm.c @@ -47,7 +47,7 @@ #include "kvm_i386.h" #include "hw/xen/start_info.h" -#define MICROVM_BIOS_FILENAME "bios-microvm.bin" +#define MICROVM_QBOOT_FILENAME "qboot.bin" static void microvm_set_rtc(MicrovmMachineState *mms, ISADevice *s) { @@ -158,7 +158,7 @@ static void microvm_devices_init(MicrovmMachineState *mms) } if (bios_name == NULL) { - bios_name = MICROVM_BIOS_FILENAME; + bios_name = MICROVM_QBOOT_FILENAME; } x86_bios_rom_init(get_system_memory(), true); } diff --git a/pc-bios/bios-microvm.bin b/pc-bios/qboot.bin similarity index 100% rename from pc-bios/bios-microvm.bin rename to pc-bios/qboot.bin diff --git a/roms/Makefile b/roms/Makefile index f9acf39954dc..d6d4948bfc31 100644 --- a/roms/Makefile +++ b/roms/Makefile @@ -68,7 +68,7 @@ default help: @echo " opensbi64-virt -- update OpenSBI for 64-bit virt machine" @echo " opensbi32-sifive_u -- update OpenSBI for 32-bit sifive_u machine" @echo " opensbi64-sifive_u -- update OpenSBI for 64-bit sifive_u machine" - @echo " bios-microvm -- update bios-microvm.bin (qboot)" + @echo " qboot -- update qboot" @echo " clean -- delete the files generated by the previous" \ "build targets" @@ -194,9 +194,9 @@ opensbi64-sifive_u: PLATFORM="sifive/fu540" cp opensbi/build/platform/sifive/fu540/firmware/fw_jump.bin ../pc-bios/opensbi-riscv64-sifive_u-fw_jump.bin -bios-microvm: +qboot: $(MAKE) -C qboot - cp qboot/bios.bin ../pc-bios/bios-microvm.bin + cp qboot/bios.bin ../pc-bios/qboot.bin clean: rm -rf seabios/.config seabios/out seabios/builds From patchwork Wed May 20 13:19:43 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11560415 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6BE8E13B1 for ; Wed, 20 May 2020 13:21:36 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 425402070A for ; Wed, 20 May 2020 13:21:36 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="A32bLQgc" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 425402070A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:59192 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jbOf9-0004eG-DB for patchwork-qemu-devel@patchwork.kernel.org; Wed, 20 May 2020 09:21:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47622) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbOe1-0001jU-Si for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:25 -0400 Received: from us-smtp-delivery-1.mimecast.com ([207.211.31.120]:23314 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jbOe1-0000CD-6j for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:25 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589980824; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=vZeX+8kRW9FCrYnJbDk7AmYBGJYPTpHVWKR9X+Nk4SU=; b=A32bLQgcyTGSH9zgjgtnhOn5jWyEmYdgVsqP2dTNlghKPkPFw/nhYurljeG82WjS0QfCHh fyvAKA3Dag+XFAH6ZtziZpnOuzptvM064k3elUDF18+rMqwANS27cth+txpO5tyGUhEpN8 32VphBVBwp09hrjuW/5Fp5NlnKtyCcw= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-475-ocikM8gsOiCdm6uDePCEJg-1; Wed, 20 May 2020 09:20:20 -0400 X-MC-Unique: ocikM8gsOiCdm6uDePCEJg-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 08947107ACF2; Wed, 20 May 2020 13:20:19 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-113-50.ams2.redhat.com [10.36.113.50]) by smtp.corp.redhat.com (Postfix) with ESMTP id D266D5D9E2; Wed, 20 May 2020 13:20:04 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 9CDE59DAE; Wed, 20 May 2020 15:20:03 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v3 02/22] [testing] seabios: update submodule to master snapshot Date: Wed, 20 May 2020 15:19:43 +0200 Message-Id: <20200520132003.9492-3-kraxel@redhat.com> In-Reply-To: <20200520132003.9492-1-kraxel@redhat.com> References: <20200520132003.9492-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.120; envelope-from=kraxel@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/05/20 01:34:51 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Gerd Hoffmann --- roms/seabios | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roms/seabios b/roms/seabios index f21b5a4aeb02..b8eda1319544 160000 --- a/roms/seabios +++ b/roms/seabios @@ -1 +1 @@ -Subproject commit f21b5a4aeb020f2a5e2c6503f906a9349dd2f069 +Subproject commit b8eda131954452bb5a236100a6572fe8f27d8021 From patchwork Wed May 20 13:19:44 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11560421 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E024813B1 for ; Wed, 20 May 2020 13:23:23 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id B61012070A for ; Wed, 20 May 2020 13:23:23 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="XHJaghFr" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B61012070A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:39282 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jbOgs-00080t-S7 for patchwork-qemu-devel@patchwork.kernel.org; Wed, 20 May 2020 09:23:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47610) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbOdz-0001fr-Vk for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:23 -0400 Received: from us-smtp-delivery-1.mimecast.com ([205.139.110.120]:22885 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jbOdz-0000AV-5Z for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:23 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589980822; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=MzZODsBz007pRLcd54leFfF+Mh0RbKq9+V9Rg9SxbkY=; b=XHJaghFrTxSsiA37jwlhbp6Cl0xQDQCGQ94zZmGaDjc4F6a7j1mwvrqqV4ixaC92eXKYIF QpLDZCoCKGCFoKfFbUK9S/0owbsQ0SsW07gKAb0B27q2AhPW1aADTEcCa2a4K9NwipeuSB FP8ZSOGt2qRK1ojtLZmbavVlSfoEzdE= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-54-0xj23SLuOHSRLVNCn_danQ-1; Wed, 20 May 2020 09:20:18 -0400 X-MC-Unique: 0xj23SLuOHSRLVNCn_danQ-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 872DA8015D1; Wed, 20 May 2020 13:20:17 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-113-50.ams2.redhat.com [10.36.113.50]) by smtp.corp.redhat.com (Postfix) with ESMTP id E5BDF6AD0F; Wed, 20 May 2020 13:20:09 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id A865E9DAF; Wed, 20 May 2020 15:20:03 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v3 03/22] [testing] seabios: update config & build rules Date: Wed, 20 May 2020 15:19:44 +0200 Message-Id: <20200520132003.9492-4-kraxel@redhat.com> In-Reply-To: <20200520132003.9492-1-kraxel@redhat.com> References: <20200520132003.9492-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=205.139.110.120; envelope-from=kraxel@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/05/19 22:48:02 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Gerd Hoffmann --- roms/Makefile | 5 ++++- roms/config.seabios-128k | 3 +++ roms/config.seabios-microvm | 26 ++++++++++++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 roms/config.seabios-microvm diff --git a/roms/Makefile b/roms/Makefile index d6d4948bfc31..f7cdad027374 100644 --- a/roms/Makefile +++ b/roms/Makefile @@ -72,9 +72,12 @@ default help: @echo " clean -- delete the files generated by the previous" \ "build targets" -bios: build-seabios-config-seabios-128k build-seabios-config-seabios-256k +bios: build-seabios-config-seabios-128k \ + build-seabios-config-seabios-256k \ + build-seabios-config-seabios-microvm cp seabios/builds/seabios-128k/bios.bin ../pc-bios/bios.bin cp seabios/builds/seabios-256k/bios.bin ../pc-bios/bios-256k.bin + cp seabios/builds/seabios-microvm/bios.bin ../pc-bios/bios-microvm.bin vgabios seavgabios: $(patsubst %,seavgabios-%,$(vgabios_variants)) diff --git a/roms/config.seabios-128k b/roms/config.seabios-128k index c43912bf9de4..d18c802c46e9 100644 --- a/roms/config.seabios-128k +++ b/roms/config.seabios-128k @@ -11,8 +11,11 @@ CONFIG_USB_UAS=n CONFIG_SDCARD=n CONFIG_TCGBIOS=n CONFIG_MPT_SCSI=n +CONFIG_ESP_SCSI=n +CONFIG_MEGASAS=n CONFIG_PVSCSI=n CONFIG_NVME=n CONFIG_USE_SMM=n CONFIG_VGAHOOKS=n CONFIG_HOST_BIOS_GEOMETRY=n +CONFIG_ACPI_PARSE=n diff --git a/roms/config.seabios-microvm b/roms/config.seabios-microvm new file mode 100644 index 000000000000..a253e2edc6ec --- /dev/null +++ b/roms/config.seabios-microvm @@ -0,0 +1,26 @@ +CONFIG_QEMU=y +CONFIG_QEMU_HARDWARE=y +CONFIG_PERMIT_UNALIGNED_PCIROM=y +CONFIG_ROM_SIZE=128 +CONFIG_XEN=n +CONFIG_BOOTSPLASH=n +CONFIG_ATA=n +CONFIG_AHCI=n +CONFIG_SDCARD=n +CONFIG_PVSCSI=n +CONFIG_ESP_SCSI=n +CONFIG_LSI_SCSI=n +CONFIG_MEGASAS=n +CONFIG_MPT_SCSI=n +CONFIG_FLOPPY=n +CONFIG_FLASH_FLOPPY=n +CONFIG_NVME=n +CONFIG_PS2PORT=n +CONFIG_USB=n +CONFIG_LPT=n +CONFIG_RTC_TIMER=n +CONFIG_USE_SMM=n +CONFIG_PMTIMER=n +CONFIG_TCGBIOS=n +CONFIG_HARDWARE_IRQ=n +CONFIG_ACPI_PARSE=y From patchwork Wed May 20 13:19:45 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11560441 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 4AB5890 for ; Wed, 20 May 2020 13:28:06 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id B66F620748 for ; Wed, 20 May 2020 13:28:05 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="gyXkiJt3" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B66F620748 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:33204 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jbOlQ-000149-Rj for patchwork-qemu-devel@patchwork.kernel.org; Wed, 20 May 2020 09:28:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47904) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbOeZ-0002xe-4j for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:59 -0400 Received: from us-smtp-delivery-1.mimecast.com ([207.211.31.120]:31035 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jbOe6-0000GW-9C for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:58 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589980829; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=Wg8OCV8T4QOuA37BwXNgZfOlf/YUfN58fJ3ChnWxlp8=; b=gyXkiJt3PUFOgbiWoPJmIEjAqunOs3UdJoJfDIBkCf5ehU297bEArQD2P90UBZ2AOn5a2b x54r9d4zQ9i2TMFMnso84516Jazx+6bK27mZDOYEPQJbTxWv2Jd5Q7cLdaBqICPupZc9dX 2zLVJeIA0fb6c3LZSDz1qQinwGMy/Gc= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-59-AKytteVzOHGgC-cLL_195A-1; Wed, 20 May 2020 09:20:25 -0400 X-MC-Unique: AKytteVzOHGgC-cLL_195A-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 3801DEC1AA; Wed, 20 May 2020 13:20:24 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-113-50.ams2.redhat.com [10.36.113.50]) by smtp.corp.redhat.com (Postfix) with ESMTP id C9B7819C58; Wed, 20 May 2020 13:20:04 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id B779B9DB0; Wed, 20 May 2020 15:20:03 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v3 04/22] [testing] seabios: update binaries to master snapshot Date: Wed, 20 May 2020 15:19:45 +0200 Message-Id: <20200520132003.9492-5-kraxel@redhat.com> In-Reply-To: <20200520132003.9492-1-kraxel@redhat.com> References: <20200520132003.9492-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.120; envelope-from=kraxel@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/05/20 01:34:51 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, LOTS_OF_MONEY=0.001, NORMAL_HTTP_TO_IP=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Gerd Hoffmann --- pc-bios/bios-256k.bin | Bin 262144 -> 262144 bytes pc-bios/bios-microvm.bin | Bin 0 -> 131072 bytes pc-bios/bios.bin | Bin 131072 -> 131072 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 pc-bios/bios-microvm.bin GIT binary patch literal 131072 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 BpOpXr literal 0 HcmV?d00001 diff --git a/pc-bios/bios.bin b/pc-bios/bios.bin index 67874c31b8b0284eb292deb2c9ebc191fa2d73b6..e7ed9c9347333631fb59d125bad3017f5fae4af8 100644 GIT binary patch delta 45947 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 AO8@`> delta 46795 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 R{qVkFJ$r@q>!)eZ{4Zqo(7ONt delta 69079 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 X-Patchwork-Id: 11560431 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1507C13B1 for ; Wed, 20 May 2020 13:25:06 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id DE90B2070A for ; Wed, 20 May 2020 13:25:05 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Pk5W5dqZ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DE90B2070A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:49220 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jbOiX-0004CO-1g for patchwork-qemu-devel@patchwork.kernel.org; Wed, 20 May 2020 09:25:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47730) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbOe8-00020y-Rf for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:32 -0400 Received: from us-smtp-1.mimecast.com ([207.211.31.81]:43176 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jbOe7-0000H1-31 for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:32 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589980830; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=pB5IeYNuFWRx8NQO1DyFF01+N5UZOrGfWLQbEq2lfaY=; b=Pk5W5dqZOn4LOdSPxoI3rMgYVkEvtSd5YHetG9oWKbg0eVnpcw0A0xMfEs9crrwkqUnjfS E3Gh/BbfIT1nsWtvLKzAkgSglhcodKcMw6Hff1K8j+NMxrT63GWX7KfzWhLyHySGYT6L1s w3tko4feXxT8BVWrsv8JmzdsM6E8vw0= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-293-P--15fHJPPafMrBkPsPUyg-1; Wed, 20 May 2020 09:20:28 -0400 X-MC-Unique: P--15fHJPPafMrBkPsPUyg-1 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 18874835B41; Wed, 20 May 2020 13:20:27 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-113-50.ams2.redhat.com [10.36.113.50]) by smtp.corp.redhat.com (Postfix) with ESMTP id 52C1582A35; Wed, 20 May 2020 13:20:18 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id C0B669D54; Wed, 20 May 2020 15:20:03 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v3 05/22] acpi: make build_madt() more generic. Date: Wed, 20 May 2020 15:19:46 +0200 Message-Id: <20200520132003.9492-6-kraxel@redhat.com> In-Reply-To: <20200520132003.9492-1-kraxel@redhat.com> References: <20200520132003.9492-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.81; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/05/20 04:09:34 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Remove PCMachineState dependency from build_madt(). Pass AcpiDeviceIf as separate argument instead of depending on PCMachineState->acpi_dev. Signed-off-by: Gerd Hoffmann Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Igor Mammedov --- hw/i386/acpi-build.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index 1afb47b09ee9..4f6418d60b05 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -366,14 +366,13 @@ void pc_madt_cpu_entry(AcpiDeviceIf *adev, int uid, } static void -build_madt(GArray *table_data, BIOSLinker *linker, PCMachineState *pcms) +build_madt(GArray *table_data, BIOSLinker *linker, + X86MachineState *x86ms, AcpiDeviceIf *adev) { - MachineClass *mc = MACHINE_GET_CLASS(pcms); - X86MachineState *x86ms = X86_MACHINE(pcms); - const CPUArchIdList *apic_ids = mc->possible_cpu_arch_ids(MACHINE(pcms)); + MachineClass *mc = MACHINE_GET_CLASS(x86ms); + const CPUArchIdList *apic_ids = mc->possible_cpu_arch_ids(MACHINE(x86ms)); int madt_start = table_data->len; - AcpiDeviceIfClass *adevc = ACPI_DEVICE_IF_GET_CLASS(pcms->acpi_dev); - AcpiDeviceIf *adev = ACPI_DEVICE_IF(pcms->acpi_dev); + AcpiDeviceIfClass *adevc = ACPI_DEVICE_IF_GET_CLASS(adev); bool x2apic_mode = false; AcpiMultipleApicTable *madt; @@ -2534,7 +2533,8 @@ void acpi_build(AcpiBuildTables *tables, MachineState *machine) aml_len += tables_blob->len - fadt; acpi_add_table(table_offsets, tables_blob); - build_madt(tables_blob, tables->linker, pcms); + build_madt(tables_blob, tables->linker, x86ms, + ACPI_DEVICE_IF(pcms->acpi_dev)); vmgenid_dev = find_vmgenid_dev(); if (vmgenid_dev) { From patchwork Wed May 20 13:19:47 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11560433 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 30C5E90 for ; Wed, 20 May 2020 13:25:51 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id EBA5E207C4 for ; Wed, 20 May 2020 13:25:50 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="WDsA4ib3" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org EBA5E207C4 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:52112 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jbOjG-0005ig-0z for patchwork-qemu-devel@patchwork.kernel.org; Wed, 20 May 2020 09:25:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47718) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbOe7-0001xz-Rw for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:31 -0400 Received: from us-smtp-1.mimecast.com ([207.211.31.81]:29679 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jbOe4-0000Ff-NM for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:31 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589980827; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=7tUcg7e4dkAmmmnxqYqykrpPOiXx7xD2DlTHg0SqWb8=; b=WDsA4ib3ntxhCRrThWbUYGxvOl7pWATxsuJiFAkQ49Vh7WKqH10glQIjBzJWamAV7moXiU 5y0PigeJBNuPvHXiFQNXdnQstC7BKrSffQOqXsY0Te4H6eK69rEV9stRPDfFEGO8OTzsVZ lCcB26MoMyDk/NUX7OqwsNxEp+yFIsM= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-389-xyN4j7dQNiaheTsSgywLSw-1; Wed, 20 May 2020 09:20:22 -0400 X-MC-Unique: xyN4j7dQNiaheTsSgywLSw-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 55CE11902EA8; Wed, 20 May 2020 13:20:21 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-113-50.ams2.redhat.com [10.36.113.50]) by smtp.corp.redhat.com (Postfix) with ESMTP id 71B971943D; Wed, 20 May 2020 13:20:18 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id CEDD79D55; Wed, 20 May 2020 15:20:03 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v3 06/22] acpi: create acpi-common.c and move madt code Date: Wed, 20 May 2020 15:19:47 +0200 Message-Id: <20200520132003.9492-7-kraxel@redhat.com> In-Reply-To: <20200520132003.9492-1-kraxel@redhat.com> References: <20200520132003.9492-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.81; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/05/20 04:09:34 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" We'll need madt support for microvm. Signed-off-by: Gerd Hoffmann Reviewed-by: Igor Mammedov Reviewed-by: Philippe Mathieu-Daudé --- hw/i386/acpi-common.h | 14 ++++ hw/i386/acpi-build.c | 126 +--------------------------------- hw/i386/acpi-common.c | 152 ++++++++++++++++++++++++++++++++++++++++++ hw/i386/Makefile.objs | 1 + 4 files changed, 170 insertions(+), 123 deletions(-) create mode 100644 hw/i386/acpi-common.h create mode 100644 hw/i386/acpi-common.c diff --git a/hw/i386/acpi-common.h b/hw/i386/acpi-common.h new file mode 100644 index 000000000000..c30e461f1854 --- /dev/null +++ b/hw/i386/acpi-common.h @@ -0,0 +1,14 @@ +#ifndef HW_I386_ACPI_COMMON_H +#define HW_I386_ACPI_COMMON_H +#include "include/hw/acpi/acpi_dev_interface.h" + +#include "include/hw/acpi/bios-linker-loader.h" +#include "include/hw/i386/x86.h" + +/* Default IOAPIC ID */ +#define ACPI_BUILD_IOAPIC_ID 0x0 + +void acpi_build_madt(GArray *table_data, BIOSLinker *linker, + X86MachineState *x86ms, AcpiDeviceIf *adev); + +#endif diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index 4f6418d60b05..c0fdd539a640 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -24,6 +24,7 @@ #include "qapi/error.h" #include "qapi/qmp/qnum.h" #include "acpi-build.h" +#include "acpi-common.h" #include "qemu/bitmap.h" #include "qemu/error-report.h" #include "hw/pci/pci.h" @@ -89,9 +90,6 @@ #define ACPI_BUILD_DPRINTF(fmt, ...) #endif -/* Default IOAPIC ID */ -#define ACPI_BUILD_IOAPIC_ID 0x0 - typedef struct AcpiPmInfo { bool s3_disabled; bool s4_disabled; @@ -327,124 +325,6 @@ build_facs(GArray *table_data) facs->length = cpu_to_le32(sizeof(*facs)); } -void pc_madt_cpu_entry(AcpiDeviceIf *adev, int uid, - const CPUArchIdList *apic_ids, GArray *entry) -{ - uint32_t apic_id = apic_ids->cpus[uid].arch_id; - - /* ACPI spec says that LAPIC entry for non present - * CPU may be omitted from MADT or it must be marked - * as disabled. However omitting non present CPU from - * MADT breaks hotplug on linux. So possible CPUs - * should be put in MADT but kept disabled. - */ - if (apic_id < 255) { - AcpiMadtProcessorApic *apic = acpi_data_push(entry, sizeof *apic); - - apic->type = ACPI_APIC_PROCESSOR; - apic->length = sizeof(*apic); - apic->processor_id = uid; - apic->local_apic_id = apic_id; - if (apic_ids->cpus[uid].cpu != NULL) { - apic->flags = cpu_to_le32(1); - } else { - apic->flags = cpu_to_le32(0); - } - } else { - AcpiMadtProcessorX2Apic *apic = acpi_data_push(entry, sizeof *apic); - - apic->type = ACPI_APIC_LOCAL_X2APIC; - apic->length = sizeof(*apic); - apic->uid = cpu_to_le32(uid); - apic->x2apic_id = cpu_to_le32(apic_id); - if (apic_ids->cpus[uid].cpu != NULL) { - apic->flags = cpu_to_le32(1); - } else { - apic->flags = cpu_to_le32(0); - } - } -} - -static void -build_madt(GArray *table_data, BIOSLinker *linker, - X86MachineState *x86ms, AcpiDeviceIf *adev) -{ - MachineClass *mc = MACHINE_GET_CLASS(x86ms); - const CPUArchIdList *apic_ids = mc->possible_cpu_arch_ids(MACHINE(x86ms)); - int madt_start = table_data->len; - AcpiDeviceIfClass *adevc = ACPI_DEVICE_IF_GET_CLASS(adev); - bool x2apic_mode = false; - - AcpiMultipleApicTable *madt; - AcpiMadtIoApic *io_apic; - AcpiMadtIntsrcovr *intsrcovr; - int i; - - madt = acpi_data_push(table_data, sizeof *madt); - madt->local_apic_address = cpu_to_le32(APIC_DEFAULT_ADDRESS); - madt->flags = cpu_to_le32(1); - - for (i = 0; i < apic_ids->len; i++) { - adevc->madt_cpu(adev, i, apic_ids, table_data); - if (apic_ids->cpus[i].arch_id > 254) { - x2apic_mode = true; - } - } - - io_apic = acpi_data_push(table_data, sizeof *io_apic); - io_apic->type = ACPI_APIC_IO; - io_apic->length = sizeof(*io_apic); - io_apic->io_apic_id = ACPI_BUILD_IOAPIC_ID; - io_apic->address = cpu_to_le32(IO_APIC_DEFAULT_ADDRESS); - io_apic->interrupt = cpu_to_le32(0); - - if (x86ms->apic_xrupt_override) { - intsrcovr = acpi_data_push(table_data, sizeof *intsrcovr); - intsrcovr->type = ACPI_APIC_XRUPT_OVERRIDE; - intsrcovr->length = sizeof(*intsrcovr); - intsrcovr->source = 0; - intsrcovr->gsi = cpu_to_le32(2); - intsrcovr->flags = cpu_to_le16(0); /* conforms to bus specifications */ - } - for (i = 1; i < 16; i++) { -#define ACPI_BUILD_PCI_IRQS ((1<<5) | (1<<9) | (1<<10) | (1<<11)) - if (!(ACPI_BUILD_PCI_IRQS & (1 << i))) { - /* No need for a INT source override structure. */ - continue; - } - intsrcovr = acpi_data_push(table_data, sizeof *intsrcovr); - intsrcovr->type = ACPI_APIC_XRUPT_OVERRIDE; - intsrcovr->length = sizeof(*intsrcovr); - intsrcovr->source = i; - intsrcovr->gsi = cpu_to_le32(i); - intsrcovr->flags = cpu_to_le16(0xd); /* active high, level triggered */ - } - - if (x2apic_mode) { - AcpiMadtLocalX2ApicNmi *local_nmi; - - local_nmi = acpi_data_push(table_data, sizeof *local_nmi); - local_nmi->type = ACPI_APIC_LOCAL_X2APIC_NMI; - local_nmi->length = sizeof(*local_nmi); - local_nmi->uid = 0xFFFFFFFF; /* all processors */ - local_nmi->flags = cpu_to_le16(0); - local_nmi->lint = 1; /* ACPI_LINT1 */ - } else { - AcpiMadtLocalNmi *local_nmi; - - local_nmi = acpi_data_push(table_data, sizeof *local_nmi); - local_nmi->type = ACPI_APIC_LOCAL_NMI; - local_nmi->length = sizeof(*local_nmi); - local_nmi->processor_id = 0xff; /* all processors */ - local_nmi->flags = cpu_to_le16(0); - local_nmi->lint = 1; /* ACPI_LINT1 */ - } - - build_header(linker, table_data, - (void *)(table_data->data + madt_start), "APIC", - table_data->len - madt_start, 1, NULL, NULL); -} - static void build_append_pcihp_notify_entry(Aml *method, int slot) { Aml *if_ctx; @@ -2533,8 +2413,8 @@ void acpi_build(AcpiBuildTables *tables, MachineState *machine) aml_len += tables_blob->len - fadt; acpi_add_table(table_offsets, tables_blob); - build_madt(tables_blob, tables->linker, x86ms, - ACPI_DEVICE_IF(pcms->acpi_dev)); + acpi_build_madt(tables_blob, tables->linker, x86ms, + ACPI_DEVICE_IF(pcms->acpi_dev)); vmgenid_dev = find_vmgenid_dev(); if (vmgenid_dev) { diff --git a/hw/i386/acpi-common.c b/hw/i386/acpi-common.c new file mode 100644 index 000000000000..5caca16a0b59 --- /dev/null +++ b/hw/i386/acpi-common.c @@ -0,0 +1,152 @@ +/* Support for generating ACPI tables and passing them to Guests + * + * Copyright (C) 2008-2010 Kevin O'Connor + * Copyright (C) 2006 Fabrice Bellard + * Copyright (C) 2013 Red Hat Inc + * + * Author: Michael S. Tsirkin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License along + * with this program; if not, see . + */ + +#include "qemu/osdep.h" +#include "qapi/error.h" + +#include "exec/memory.h" +#include "hw/acpi/acpi.h" +#include "hw/acpi/aml-build.h" +#include "hw/acpi/utils.h" +#include "hw/i386/pc.h" +#include "target/i386/cpu.h" + +#include "acpi-build.h" +#include "acpi-common.h" + +void pc_madt_cpu_entry(AcpiDeviceIf *adev, int uid, + const CPUArchIdList *apic_ids, GArray *entry) +{ + uint32_t apic_id = apic_ids->cpus[uid].arch_id; + + /* ACPI spec says that LAPIC entry for non present + * CPU may be omitted from MADT or it must be marked + * as disabled. However omitting non present CPU from + * MADT breaks hotplug on linux. So possible CPUs + * should be put in MADT but kept disabled. + */ + if (apic_id < 255) { + AcpiMadtProcessorApic *apic = acpi_data_push(entry, sizeof *apic); + + apic->type = ACPI_APIC_PROCESSOR; + apic->length = sizeof(*apic); + apic->processor_id = uid; + apic->local_apic_id = apic_id; + if (apic_ids->cpus[uid].cpu != NULL) { + apic->flags = cpu_to_le32(1); + } else { + apic->flags = cpu_to_le32(0); + } + } else { + AcpiMadtProcessorX2Apic *apic = acpi_data_push(entry, sizeof *apic); + + apic->type = ACPI_APIC_LOCAL_X2APIC; + apic->length = sizeof(*apic); + apic->uid = cpu_to_le32(uid); + apic->x2apic_id = cpu_to_le32(apic_id); + if (apic_ids->cpus[uid].cpu != NULL) { + apic->flags = cpu_to_le32(1); + } else { + apic->flags = cpu_to_le32(0); + } + } +} + +void acpi_build_madt(GArray *table_data, BIOSLinker *linker, + X86MachineState *x86ms, AcpiDeviceIf *adev) +{ + MachineClass *mc = MACHINE_GET_CLASS(x86ms); + const CPUArchIdList *apic_ids = mc->possible_cpu_arch_ids(MACHINE(x86ms)); + int madt_start = table_data->len; + AcpiDeviceIfClass *adevc = ACPI_DEVICE_IF_GET_CLASS(adev); + bool x2apic_mode = false; + + AcpiMultipleApicTable *madt; + AcpiMadtIoApic *io_apic; + AcpiMadtIntsrcovr *intsrcovr; + int i; + + madt = acpi_data_push(table_data, sizeof *madt); + madt->local_apic_address = cpu_to_le32(APIC_DEFAULT_ADDRESS); + madt->flags = cpu_to_le32(1); + + for (i = 0; i < apic_ids->len; i++) { + adevc->madt_cpu(adev, i, apic_ids, table_data); + if (apic_ids->cpus[i].arch_id > 254) { + x2apic_mode = true; + } + } + + io_apic = acpi_data_push(table_data, sizeof *io_apic); + io_apic->type = ACPI_APIC_IO; + io_apic->length = sizeof(*io_apic); + io_apic->io_apic_id = ACPI_BUILD_IOAPIC_ID; + io_apic->address = cpu_to_le32(IO_APIC_DEFAULT_ADDRESS); + io_apic->interrupt = cpu_to_le32(0); + + if (x86ms->apic_xrupt_override) { + intsrcovr = acpi_data_push(table_data, sizeof *intsrcovr); + intsrcovr->type = ACPI_APIC_XRUPT_OVERRIDE; + intsrcovr->length = sizeof(*intsrcovr); + intsrcovr->source = 0; + intsrcovr->gsi = cpu_to_le32(2); + intsrcovr->flags = cpu_to_le16(0); /* conforms to bus specifications */ + } + for (i = 1; i < 16; i++) { +#define ACPI_BUILD_PCI_IRQS ((1<<5) | (1<<9) | (1<<10) | (1<<11)) + if (!(ACPI_BUILD_PCI_IRQS & (1 << i))) { + /* No need for a INT source override structure. */ + continue; + } + intsrcovr = acpi_data_push(table_data, sizeof *intsrcovr); + intsrcovr->type = ACPI_APIC_XRUPT_OVERRIDE; + intsrcovr->length = sizeof(*intsrcovr); + intsrcovr->source = i; + intsrcovr->gsi = cpu_to_le32(i); + intsrcovr->flags = cpu_to_le16(0xd); /* active high, level triggered */ + } + + if (x2apic_mode) { + AcpiMadtLocalX2ApicNmi *local_nmi; + + local_nmi = acpi_data_push(table_data, sizeof *local_nmi); + local_nmi->type = ACPI_APIC_LOCAL_X2APIC_NMI; + local_nmi->length = sizeof(*local_nmi); + local_nmi->uid = 0xFFFFFFFF; /* all processors */ + local_nmi->flags = cpu_to_le16(0); + local_nmi->lint = 1; /* ACPI_LINT1 */ + } else { + AcpiMadtLocalNmi *local_nmi; + + local_nmi = acpi_data_push(table_data, sizeof *local_nmi); + local_nmi->type = ACPI_APIC_LOCAL_NMI; + local_nmi->length = sizeof(*local_nmi); + local_nmi->processor_id = 0xff; /* all processors */ + local_nmi->flags = cpu_to_le16(0); + local_nmi->lint = 1; /* ACPI_LINT1 */ + } + + build_header(linker, table_data, + (void *)(table_data->data + madt_start), "APIC", + table_data->len - madt_start, 1, NULL, NULL); +} + diff --git a/hw/i386/Makefile.objs b/hw/i386/Makefile.objs index 8ce1b265335b..6abc74551a72 100644 --- a/hw/i386/Makefile.objs +++ b/hw/i386/Makefile.objs @@ -16,4 +16,5 @@ obj-$(CONFIG_VMMOUSE) += vmmouse.o obj-$(CONFIG_PC) += port92.o obj-y += kvmvapic.o +obj-$(CONFIG_ACPI) += acpi-common.o obj-$(CONFIG_PC) += acpi-build.o From patchwork Wed May 20 13:19:48 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11560423 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id BB79690 for ; Wed, 20 May 2020 13:23:25 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 91BF92070A for ; Wed, 20 May 2020 13:23:25 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="PS7fRYxE" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 91BF92070A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:39462 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jbOgu-00087N-K9 for patchwork-qemu-devel@patchwork.kernel.org; Wed, 20 May 2020 09:23:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47654) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbOe4-0001ov-DM for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:28 -0400 Received: from us-smtp-delivery-1.mimecast.com ([207.211.31.120]:42538 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jbOe2-0000EH-TF for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:27 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589980825; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=+LpZn95fCyMj5LlBHQAcVb5mRTpszyydwOnQVComLXw=; b=PS7fRYxEw/ZYsig+oHB1tRlSHe//X9NdqGjyqpX923/oiGESXpOUU9slgClwDQDTU/lhqb g4U3U+8GaT0Y9k7+m8FNi3PUdMCt1N8lMSMkhQO2LMLbCpFOuiettDVdY0uuqHsPQ4OlWj r3BKJj7WgNpbawgEZVC3H2MdIHJ9MPA= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-443-xI7otfMqN4GRE8mHKW9wnQ-1; Wed, 20 May 2020 09:20:24 -0400 X-MC-Unique: xI7otfMqN4GRE8mHKW9wnQ-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id B4B8D8014D7; Wed, 20 May 2020 13:20:22 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-113-50.ams2.redhat.com [10.36.113.50]) by smtp.corp.redhat.com (Postfix) with ESMTP id AFC2E1943D; Wed, 20 May 2020 13:20:21 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id DB0559D56; Wed, 20 May 2020 15:20:03 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v3 07/22] acpi: madt: skip pci override on pci-less systems. Date: Wed, 20 May 2020 15:19:48 +0200 Message-Id: <20200520132003.9492-8-kraxel@redhat.com> In-Reply-To: <20200520132003.9492-1-kraxel@redhat.com> References: <20200520132003.9492-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.120; envelope-from=kraxel@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/05/20 01:34:51 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Needed for microvm. Signed-off-by: Gerd Hoffmann Reviewed-by: Igor Mammedov Reviewed-by: Philippe Mathieu-Daudé --- hw/i386/acpi-common.h | 3 ++- hw/i386/acpi-build.c | 2 +- hw/i386/acpi-common.c | 26 +++++++++++++++----------- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/hw/i386/acpi-common.h b/hw/i386/acpi-common.h index c30e461f1854..9cac18dddf5b 100644 --- a/hw/i386/acpi-common.h +++ b/hw/i386/acpi-common.h @@ -9,6 +9,7 @@ #define ACPI_BUILD_IOAPIC_ID 0x0 void acpi_build_madt(GArray *table_data, BIOSLinker *linker, - X86MachineState *x86ms, AcpiDeviceIf *adev); + X86MachineState *x86ms, AcpiDeviceIf *adev, + bool has_pci); #endif diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index c0fdd539a640..583bb58d6f0c 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -2414,7 +2414,7 @@ void acpi_build(AcpiBuildTables *tables, MachineState *machine) acpi_add_table(table_offsets, tables_blob); acpi_build_madt(tables_blob, tables->linker, x86ms, - ACPI_DEVICE_IF(pcms->acpi_dev)); + ACPI_DEVICE_IF(pcms->acpi_dev), true); vmgenid_dev = find_vmgenid_dev(); if (vmgenid_dev) { diff --git a/hw/i386/acpi-common.c b/hw/i386/acpi-common.c index 5caca16a0b59..ab9b00581a15 100644 --- a/hw/i386/acpi-common.c +++ b/hw/i386/acpi-common.c @@ -72,7 +72,8 @@ void pc_madt_cpu_entry(AcpiDeviceIf *adev, int uid, } void acpi_build_madt(GArray *table_data, BIOSLinker *linker, - X86MachineState *x86ms, AcpiDeviceIf *adev) + X86MachineState *x86ms, AcpiDeviceIf *adev, + bool has_pci) { MachineClass *mc = MACHINE_GET_CLASS(x86ms); const CPUArchIdList *apic_ids = mc->possible_cpu_arch_ids(MACHINE(x86ms)); @@ -111,18 +112,21 @@ void acpi_build_madt(GArray *table_data, BIOSLinker *linker, intsrcovr->gsi = cpu_to_le32(2); intsrcovr->flags = cpu_to_le16(0); /* conforms to bus specifications */ } - for (i = 1; i < 16; i++) { + + if (has_pci) { + for (i = 1; i < 16; i++) { #define ACPI_BUILD_PCI_IRQS ((1<<5) | (1<<9) | (1<<10) | (1<<11)) - if (!(ACPI_BUILD_PCI_IRQS & (1 << i))) { - /* No need for a INT source override structure. */ - continue; + if (!(ACPI_BUILD_PCI_IRQS & (1 << i))) { + /* No need for a INT source override structure. */ + continue; + } + intsrcovr = acpi_data_push(table_data, sizeof *intsrcovr); + intsrcovr->type = ACPI_APIC_XRUPT_OVERRIDE; + intsrcovr->length = sizeof(*intsrcovr); + intsrcovr->source = i; + intsrcovr->gsi = cpu_to_le32(i); + intsrcovr->flags = cpu_to_le16(0xd); /* active high, level triggered */ } - intsrcovr = acpi_data_push(table_data, sizeof *intsrcovr); - intsrcovr->type = ACPI_APIC_XRUPT_OVERRIDE; - intsrcovr->length = sizeof(*intsrcovr); - intsrcovr->source = i; - intsrcovr->gsi = cpu_to_le32(i); - intsrcovr->flags = cpu_to_le16(0xd); /* active high, level triggered */ } if (x2apic_mode) { From patchwork Wed May 20 13:19:49 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11560419 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id DE83A90 for ; Wed, 20 May 2020 13:22:30 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id B4C2D2070A for ; Wed, 20 May 2020 13:22:30 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="GbdwIzR2" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B4C2D2070A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:34384 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jbOg1-00061m-T9 for patchwork-qemu-devel@patchwork.kernel.org; Wed, 20 May 2020 09:22:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47682) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbOe5-0001se-SE for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:29 -0400 Received: from us-smtp-1.mimecast.com ([205.139.110.61]:52067 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jbOe4-0000FX-MP for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:29 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589980827; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=9dP5pJMHATRMU7jZoSy5VOed74vhNKA3Gi6pt3jrRpI=; b=GbdwIzR2OGsL5bsKe/+VSmv9hk1O0Oorj7vYSzBD3xbAIzSUZQGbhh/D+Pq5T3ygOeYLz/ +jBcv5Hn5ytKgGF4aUO0kymp4BDodHv9dj0010WbnGQH3P3AXQ9y/wgS6yu5Q8gLnfYRUt xbfiBvQPbRKGxOYA+oSiWYEGNB8jU7k= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-478-Vn6kj1qfOVOLDr2UmnhKlQ-1; Wed, 20 May 2020 09:20:23 -0400 X-MC-Unique: Vn6kj1qfOVOLDr2UmnhKlQ-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 871631800D42; Wed, 20 May 2020 13:20:22 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-113-50.ams2.redhat.com [10.36.113.50]) by smtp.corp.redhat.com (Postfix) with ESMTP id B5ED32E170; Wed, 20 May 2020 13:20:21 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id E55E19D57; Wed, 20 May 2020 15:20:03 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v3 08/22] acpi: fadt: add hw-reduced sleep register support Date: Wed, 20 May 2020 15:19:49 +0200 Message-Id: <20200520132003.9492-9-kraxel@redhat.com> In-Reply-To: <20200520132003.9492-1-kraxel@redhat.com> References: <20200520132003.9492-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=205.139.110.61; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/05/20 02:22:41 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Add fields to struct AcpiFadtData and update build_fadt() to properly generate sleep register entries. Signed-off-by: Gerd Hoffmann Reviewed-by: Igor Mammedov --- include/hw/acpi/acpi-defs.h | 2 ++ hw/acpi/aml-build.c | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/include/hw/acpi/acpi-defs.h b/include/hw/acpi/acpi-defs.h index c13327fa7867..3be9ab504968 100644 --- a/include/hw/acpi/acpi-defs.h +++ b/include/hw/acpi/acpi-defs.h @@ -88,6 +88,8 @@ typedef struct AcpiFadtData { struct AcpiGenericAddress pm_tmr; /* PM_TMR_BLK */ struct AcpiGenericAddress gpe0_blk; /* GPE0_BLK */ struct AcpiGenericAddress reset_reg; /* RESET_REG */ + struct AcpiGenericAddress sleep_ctl; /* SLEEP_CONTROL_REG */ + struct AcpiGenericAddress sleep_sts; /* SLEEP_STATUS_REG */ uint8_t reset_val; /* RESET_VALUE */ uint8_t rev; /* Revision */ uint32_t flags; /* Flags */ diff --git a/hw/acpi/aml-build.c b/hw/acpi/aml-build.c index 3681ec6e3d88..a894e2581fa2 100644 --- a/hw/acpi/aml-build.c +++ b/hw/acpi/aml-build.c @@ -1865,9 +1865,9 @@ void build_fadt(GArray *tbl, BIOSLinker *linker, const AcpiFadtData *f, } /* SLEEP_CONTROL_REG */ - build_append_gas(tbl, AML_AS_SYSTEM_MEMORY, 0 , 0, 0, 0); + build_append_gas_from_struct(tbl, &f->sleep_ctl); /* SLEEP_STATUS_REG */ - build_append_gas(tbl, AML_AS_SYSTEM_MEMORY, 0 , 0, 0, 0); + build_append_gas_from_struct(tbl, &f->sleep_sts); /* TODO: extra fields need to be added to support revisions above rev5 */ assert(f->rev == 5); From patchwork Wed May 20 13:19:50 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11560459 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 41CC290 for ; Wed, 20 May 2020 13:32:48 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 1778B20748 for ; Wed, 20 May 2020 13:32:48 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="KjMMBQnR" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1778B20748 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:54288 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jbOpy-0002IY-UQ for patchwork-qemu-devel@patchwork.kernel.org; Wed, 20 May 2020 09:32:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47794) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbOeD-0002EW-KS for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:37 -0400 Received: from us-smtp-1.mimecast.com ([207.211.31.81]:37124 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jbOeC-0000J0-AY for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:37 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589980835; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=i1JF1/s5d2KxdED5roCcOah1am+4MqlOUBOB584bBVA=; b=KjMMBQnReK6o3MAORWATidajBw8VRyTCCCOZVMn/Z98Z1fLw7I4Mwndg+HPrfH24Bqb+Pp B4JVe3pw9ZpmwytNI0SqaiiNI4JJw2E/7zOMAWaPSFR7cRHMmOo//E1nTqixtRL1g/UcDj B/QVh8nfORzuuy38vUgwDpj/jw5NScY= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-279-70bRxdEOPKenfAXzdrTccQ-1; Wed, 20 May 2020 09:20:33 -0400 X-MC-Unique: 70bRxdEOPKenfAXzdrTccQ-1 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id A647D835B42; Wed, 20 May 2020 13:20:31 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-113-50.ams2.redhat.com [10.36.113.50]) by smtp.corp.redhat.com (Postfix) with ESMTP id CAA0782A1D; Wed, 20 May 2020 13:20:21 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id EFB3D9D58; Wed, 20 May 2020 15:20:03 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v3 09/22] acpi: ged: rename event memory region Date: Wed, 20 May 2020 15:19:50 +0200 Message-Id: <20200520132003.9492-10-kraxel@redhat.com> In-Reply-To: <20200520132003.9492-1-kraxel@redhat.com> References: <20200520132003.9492-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.81; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/05/20 04:09:34 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Rename memory region and callbacks and ops to carry "evt" in the name because a second region will be added shortly. Signed-off-by: Gerd Hoffmann Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Igor Mammedow --- include/hw/acpi/generic_event_device.h | 2 +- hw/acpi/generic_event_device.c | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/include/hw/acpi/generic_event_device.h b/include/hw/acpi/generic_event_device.h index 83917de02425..90a9180db572 100644 --- a/include/hw/acpi/generic_event_device.h +++ b/include/hw/acpi/generic_event_device.h @@ -86,7 +86,7 @@ #define ACPI_GED_NVDIMM_HOTPLUG_EVT 0x4 typedef struct GEDState { - MemoryRegion io; + MemoryRegion evt; uint32_t sel; } GEDState; diff --git a/hw/acpi/generic_event_device.c b/hw/acpi/generic_event_device.c index b1cbdd86b66c..1cb34111e59a 100644 --- a/hw/acpi/generic_event_device.c +++ b/hw/acpi/generic_event_device.c @@ -142,7 +142,7 @@ void build_ged_aml(Aml *table, const char *name, HotplugHandler *hotplug_dev, } /* Memory read by the GED _EVT AML dynamic method */ -static uint64_t ged_read(void *opaque, hwaddr addr, unsigned size) +static uint64_t ged_evt_read(void *opaque, hwaddr addr, unsigned size) { uint64_t val = 0; GEDState *ged_st = opaque; @@ -161,14 +161,14 @@ static uint64_t ged_read(void *opaque, hwaddr addr, unsigned size) } /* Nothing is expected to be written to the GED memory region */ -static void ged_write(void *opaque, hwaddr addr, uint64_t data, - unsigned int size) +static void ged_evt_write(void *opaque, hwaddr addr, uint64_t data, + unsigned int size) { } -static const MemoryRegionOps ged_ops = { - .read = ged_read, - .write = ged_write, +static const MemoryRegionOps ged_evt_ops = { + .read = ged_evt_read, + .write = ged_evt_write, .endianness = DEVICE_LITTLE_ENDIAN, .valid = { .min_access_size = 4, @@ -287,9 +287,9 @@ static void acpi_ged_initfn(Object *obj) SysBusDevice *sbd = SYS_BUS_DEVICE(obj); GEDState *ged_st = &s->ged_state; - memory_region_init_io(&ged_st->io, obj, &ged_ops, ged_st, + memory_region_init_io(&ged_st->evt, obj, &ged_evt_ops, ged_st, TYPE_ACPI_GED, ACPI_GED_EVT_SEL_LEN); - sysbus_init_mmio(sbd, &ged_st->io); + sysbus_init_mmio(sbd, &ged_st->evt); sysbus_init_irq(sbd, &s->irq); From patchwork Wed May 20 13:19:51 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11560427 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6D97C90 for ; Wed, 20 May 2020 13:24:26 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 449822070A for ; Wed, 20 May 2020 13:24:26 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="grEMs9Wz" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 449822070A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:44726 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jbOht-0001xS-E2 for patchwork-qemu-devel@patchwork.kernel.org; Wed, 20 May 2020 09:24:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47780) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbOeC-0002BI-Fb for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:36 -0400 Received: from us-smtp-delivery-1.mimecast.com ([205.139.110.120]:23785 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jbOe9-0000I9-Vh for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:35 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589980833; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=y4l/wLNM+Ws5zx05lfTKUy0HcJz6AmubwM0kMg2Czgk=; b=grEMs9WzUeLWzbYwL/KOqkHtSCDSRKUp6NxHeQmiQXNtC+nJot88ri6pbXMG9wnms6W6nh TOezBfGFyZu36XLaihrRgaFLkhuZ8xTuzxXH0kT3v59wpIQAyvumrVAi3mvnihAddvbJrR uql2ED9i9W+LAQI9SYxpy65DR5QgCFw= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-302-xEFuaHAUMYKws5UVsgIEeQ-1; Wed, 20 May 2020 09:20:31 -0400 X-MC-Unique: xEFuaHAUMYKws5UVsgIEeQ-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id AE9E31005510; Wed, 20 May 2020 13:20:24 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-113-50.ams2.redhat.com [10.36.113.50]) by smtp.corp.redhat.com (Postfix) with ESMTP id CF3065D9CA; Wed, 20 May 2020 13:20:21 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 060249D59; Wed, 20 May 2020 15:20:04 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v3 10/22] acpi: ged: add control regs Date: Wed, 20 May 2020 15:19:51 +0200 Message-Id: <20200520132003.9492-11-kraxel@redhat.com> In-Reply-To: <20200520132003.9492-1-kraxel@redhat.com> References: <20200520132003.9492-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=205.139.110.120; envelope-from=kraxel@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/05/19 22:48:02 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Add control regs (sleep, reset) for hw-reduced acpi. Signed-off-by: Gerd Hoffmann --- include/hw/acpi/generic_event_device.h | 7 ++++ hw/acpi/generic_event_device.c | 44 ++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/include/hw/acpi/generic_event_device.h b/include/hw/acpi/generic_event_device.h index 90a9180db572..474c92198080 100644 --- a/include/hw/acpi/generic_event_device.h +++ b/include/hw/acpi/generic_event_device.h @@ -72,6 +72,12 @@ #define ACPI_GED_EVT_SEL_OFFSET 0x0 #define ACPI_GED_EVT_SEL_LEN 0x4 +#define ACPI_GED_REG_SLEEP_CTL 0x00 +#define ACPI_GED_REG_SLEEP_STS 0x01 +#define ACPI_GED_REG_RESET 0x02 +#define ACPI_GED_RESET_VALUE 0x42 +#define ACPI_GED_REG_COUNT 0x03 + #define GED_DEVICE "GED" #define AML_GED_EVT_REG "EREG" #define AML_GED_EVT_SEL "ESEL" @@ -87,6 +93,7 @@ typedef struct GEDState { MemoryRegion evt; + MemoryRegion regs; uint32_t sel; } GEDState; diff --git a/hw/acpi/generic_event_device.c b/hw/acpi/generic_event_device.c index 1cb34111e59a..3072fb4ab32b 100644 --- a/hw/acpi/generic_event_device.c +++ b/hw/acpi/generic_event_device.c @@ -20,6 +20,7 @@ #include "hw/qdev-properties.h" #include "migration/vmstate.h" #include "qemu/error-report.h" +#include "sysemu/runstate.h" static const uint32_t ged_supported_events[] = { ACPI_GED_MEM_HOTPLUG_EVT, @@ -176,6 +177,45 @@ static const MemoryRegionOps ged_evt_ops = { }, }; +static uint64_t ged_regs_read(void *opaque, hwaddr addr, unsigned size) +{ + return 0; +} + +static void ged_regs_write(void *opaque, hwaddr addr, uint64_t data, + unsigned int size) +{ + bool slp_en; + int slp_typ; + + switch (addr) { + case ACPI_GED_REG_SLEEP_CTL: + slp_typ = (data >> 2) & 0x07; + slp_en = (data >> 5) & 0x01; + if (slp_en && slp_typ == 5) { + qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN); + } + return; + case ACPI_GED_REG_SLEEP_STS: + return; + case ACPI_GED_REG_RESET: + if (data == ACPI_GED_RESET_VALUE) { + qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN); + } + return; + } +} + +static const MemoryRegionOps ged_regs_ops = { + .read = ged_regs_read, + .write = ged_regs_write, + .endianness = DEVICE_LITTLE_ENDIAN, + .valid = { + .min_access_size = 1, + .max_access_size = 1, + }, +}; + static void acpi_ged_device_plug_cb(HotplugHandler *hotplug_dev, DeviceState *dev, Error **errp) { @@ -305,6 +345,10 @@ static void acpi_ged_initfn(Object *obj) sysbus_init_mmio(sbd, &s->container_memhp); acpi_memory_hotplug_init(&s->container_memhp, OBJECT(dev), &s->memhp_state, 0); + + memory_region_init_io(&ged_st->regs, obj, &ged_regs_ops, ged_st, + TYPE_ACPI_GED "-regs", ACPI_GED_REG_COUNT); + sysbus_init_mmio(sbd, &ged_st->regs); } static void acpi_ged_class_init(ObjectClass *class, void *data) From patchwork Wed May 20 13:19:52 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11560457 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 03E7A159A for ; Wed, 20 May 2020 13:32:09 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id CEF7D20748 for ; Wed, 20 May 2020 13:32:08 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="HT0WOBc9" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CEF7D20748 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:50776 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jbOpL-0000ZN-VV for patchwork-qemu-devel@patchwork.kernel.org; Wed, 20 May 2020 09:32:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47862) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbOeN-0002TZ-72 for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:47 -0400 Received: from us-smtp-delivery-1.mimecast.com ([205.139.110.120]:37686 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jbOeF-0000Ks-A7 for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:46 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589980838; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=yL+6hHgQ5mwgkDZlEEeB9fTkTZmIC02loIxG6Wm0FRc=; b=HT0WOBc9qBgZKok1GJp8OVNwCVWDnyBU490xm84EFJhOJfm29uFWDe88dMRs9iGAMpJxpC u1zPw/N8fTeKDRWEnIQQCCEKaymBAvN4wbgnpkYnEE8TV5zJ2q7GdR9Id9kioVmO7hMvKa NH2Woa9Q0jCSdls5KsScZQCqkvSM78A= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-438-sJeM_RbmM_W2-MXB1-1Nlw-1; Wed, 20 May 2020 09:20:36 -0400 X-MC-Unique: sJeM_RbmM_W2-MXB1-1Nlw-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 20D5C8015D1; Wed, 20 May 2020 13:20:35 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-113-50.ams2.redhat.com [10.36.113.50]) by smtp.corp.redhat.com (Postfix) with ESMTP id E20B960BEC; Wed, 20 May 2020 13:20:23 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 11F6F9D5A; Wed, 20 May 2020 15:20:04 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v3 11/22] acpi: ged: add x86 device variant. Date: Wed, 20 May 2020 15:19:52 +0200 Message-Id: <20200520132003.9492-12-kraxel@redhat.com> In-Reply-To: <20200520132003.9492-1-kraxel@redhat.com> References: <20200520132003.9492-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=205.139.110.120; envelope-from=kraxel@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/05/19 22:48:02 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Set AcpiDeviceIfClass->madt_cpu, otherwise identical to TYPE_ACPI_GED. Signed-off-by: Gerd Hoffmann Reviewed-by: Igor Mammedov --- include/hw/acpi/generic_event_device.h | 4 +++ hw/i386/generic_event_device_x86.c | 36 ++++++++++++++++++++++++++ hw/i386/Makefile.objs | 1 + 3 files changed, 41 insertions(+) create mode 100644 hw/i386/generic_event_device_x86.c diff --git a/include/hw/acpi/generic_event_device.h b/include/hw/acpi/generic_event_device.h index 474c92198080..9687cb524258 100644 --- a/include/hw/acpi/generic_event_device.h +++ b/include/hw/acpi/generic_event_device.h @@ -69,6 +69,10 @@ #define ACPI_GED(obj) \ OBJECT_CHECK(AcpiGedState, (obj), TYPE_ACPI_GED) +#define TYPE_ACPI_GED_X86 "acpi-ged-x86" +#define ACPI_GED_X86(obj) \ + OBJECT_CHECK(AcpiGedX86State, (obj), TYPE_ACPI_GED_X86) + #define ACPI_GED_EVT_SEL_OFFSET 0x0 #define ACPI_GED_EVT_SEL_LEN 0x4 diff --git a/hw/i386/generic_event_device_x86.c b/hw/i386/generic_event_device_x86.c new file mode 100644 index 000000000000..e26fb02a2ef6 --- /dev/null +++ b/hw/i386/generic_event_device_x86.c @@ -0,0 +1,36 @@ +/* + * x86 variant of the generic event device for hw reduced acpi + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2 or later, as published by the Free Software Foundation. + */ + +#include "qemu/osdep.h" +#include "hw/acpi/generic_event_device.h" +#include "hw/i386/pc.h" + +static void acpi_ged_x86_class_init(ObjectClass *class, void *data) +{ + AcpiDeviceIfClass *adevc = ACPI_DEVICE_IF_CLASS(class); + + adevc->madt_cpu = pc_madt_cpu_entry; +} + +static const TypeInfo acpi_ged_x86_info = { + .name = TYPE_ACPI_GED_X86, + .parent = TYPE_ACPI_GED, + .class_init = acpi_ged_x86_class_init, + .interfaces = (InterfaceInfo[]) { + { TYPE_HOTPLUG_HANDLER }, + { TYPE_ACPI_DEVICE_IF }, + { } + } +}; + +static void acpi_ged_x86_register_types(void) +{ + type_register_static(&acpi_ged_x86_info); +} + +type_init(acpi_ged_x86_register_types) diff --git a/hw/i386/Makefile.objs b/hw/i386/Makefile.objs index 6abc74551a72..622739305882 100644 --- a/hw/i386/Makefile.objs +++ b/hw/i386/Makefile.objs @@ -17,4 +17,5 @@ obj-$(CONFIG_PC) += port92.o obj-y += kvmvapic.o obj-$(CONFIG_ACPI) += acpi-common.o +obj-$(CONFIG_ACPI_HW_REDUCED) += generic_event_device_x86.o obj-$(CONFIG_PC) += acpi-build.o From patchwork Wed May 20 13:19:53 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11560429 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 997C913B1 for ; Wed, 20 May 2020 13:24:55 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6ECB82070A for ; Wed, 20 May 2020 13:24:55 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Ufeo10wM" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6ECB82070A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:48028 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jbOiM-0003a1-JQ for patchwork-qemu-devel@patchwork.kernel.org; Wed, 20 May 2020 09:24:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47680) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbOe5-0001sc-U6 for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:29 -0400 Received: from us-smtp-delivery-1.mimecast.com ([205.139.110.120]:32739 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jbOe4-0000FT-AN for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:29 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589980827; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=32ngCCY5XQvXtiBfjV3PXfYOD4t6Ktpz2yP0bM/R6jk=; b=Ufeo10wM1uoffesx9cVHPoKIVoUWakJ0NCqIXKRYCN+DhNt6sWlsap11GzUTC+0HSwx4Sy 0jjtyS3yvWnV3NuMaAyetcwppCex8Bi/4dG8Ahr5syoVb6tvcwJNZxMdkvBBA6cbnzFLI/ Hbwp5WJe0iLzrMerx6ZNk+F3OEgedBs= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-466-IX0FXKg7N7q2837GRwzVaQ-1; Wed, 20 May 2020 09:20:25 -0400 X-MC-Unique: IX0FXKg7N7q2837GRwzVaQ-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 53A371902EA0; Wed, 20 May 2020 13:20:24 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-113-50.ams2.redhat.com [10.36.113.50]) by smtp.corp.redhat.com (Postfix) with ESMTP id E695D5C1BE; Wed, 20 May 2020 13:20:23 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 1DCA99D5B; Wed, 20 May 2020 15:20:04 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v3 12/22] acpi: move acpi_dsdt_add_power_button() to ged Date: Wed, 20 May 2020 15:19:53 +0200 Message-Id: <20200520132003.9492-13-kraxel@redhat.com> In-Reply-To: <20200520132003.9492-1-kraxel@redhat.com> References: <20200520132003.9492-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=205.139.110.120; envelope-from=kraxel@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/05/19 22:48:02 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Allow reuse for microvm. Signed-off-by: Gerd Hoffmann Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Igor Mammedov --- include/hw/acpi/generic_event_device.h | 1 + hw/acpi/generic_event_device.c | 8 ++++++++ hw/arm/virt-acpi-build.c | 8 -------- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/include/hw/acpi/generic_event_device.h b/include/hw/acpi/generic_event_device.h index 9687cb524258..ebed1ffe4231 100644 --- a/include/hw/acpi/generic_event_device.h +++ b/include/hw/acpi/generic_event_device.h @@ -113,5 +113,6 @@ typedef struct AcpiGedState { void build_ged_aml(Aml *table, const char* name, HotplugHandler *hotplug_dev, uint32_t ged_irq, AmlRegionSpace rs, hwaddr ged_base); +void acpi_dsdt_add_power_button(Aml *scope); #endif diff --git a/hw/acpi/generic_event_device.c b/hw/acpi/generic_event_device.c index 3072fb4ab32b..cde50da5b3ca 100644 --- a/hw/acpi/generic_event_device.c +++ b/hw/acpi/generic_event_device.c @@ -142,6 +142,14 @@ void build_ged_aml(Aml *table, const char *name, HotplugHandler *hotplug_dev, aml_append(table, dev); } +void acpi_dsdt_add_power_button(Aml *scope) +{ + Aml *dev = aml_device(ACPI_POWER_BUTTON_DEVICE); + aml_append(dev, aml_name_decl("_HID", aml_string("PNP0C0C"))); + aml_append(dev, aml_name_decl("_UID", aml_int(0))); + aml_append(scope, dev); +} + /* Memory read by the GED _EVT AML dynamic method */ static uint64_t ged_evt_read(void *opaque, hwaddr addr, unsigned size) { diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c index 1b0a584c7b62..49eacc622219 100644 --- a/hw/arm/virt-acpi-build.c +++ b/hw/arm/virt-acpi-build.c @@ -354,14 +354,6 @@ static void acpi_dsdt_add_gpio(Aml *scope, const MemMapEntry *gpio_memmap, aml_append(scope, dev); } -static void acpi_dsdt_add_power_button(Aml *scope) -{ - Aml *dev = aml_device(ACPI_POWER_BUTTON_DEVICE); - aml_append(dev, aml_name_decl("_HID", aml_string("PNP0C0C"))); - aml_append(dev, aml_name_decl("_UID", aml_int(0))); - aml_append(scope, dev); -} - static void build_iort(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms) { From patchwork Wed May 20 13:19:54 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11560449 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 04E74138A for ; Wed, 20 May 2020 13:30:03 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id CE45B20748 for ; Wed, 20 May 2020 13:30:02 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="a8knkYXH" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CE45B20748 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:44194 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jbOnJ-0005V5-TQ for patchwork-qemu-devel@patchwork.kernel.org; Wed, 20 May 2020 09:30:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47866) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbOeN-0002Ta-97 for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:47 -0400 Received: from us-smtp-1.mimecast.com ([205.139.110.61]:25239 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jbOeJ-0000NF-3Z for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:46 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589980841; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=DhTu4SHuEE+qnNe/cas8B3sShJ0o08ypXNC4O0JdhEc=; b=a8knkYXH8WEjgk1RHmXavmagjQ+g2x80EHTucRDTG6YkwfmUw0l4VKrRR3/4KTCiMjsUNx plPvBHSXGH302vDo3kQXYjOiGwD4ogI9SpGWCkjk3TVFF7GH9QJuBjeguKfAAe6D8d0pOY 6aNBpCZOtQyB8PO4wGpugp3uyUU7iFM= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-396-LJnAUd0KMz--apsdEF2McA-1; Wed, 20 May 2020 09:20:37 -0400 X-MC-Unique: LJnAUd0KMz--apsdEF2McA-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 2EC98EC1A7; Wed, 20 May 2020 13:20:36 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-113-50.ams2.redhat.com [10.36.113.50]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3B00A6EA22; Wed, 20 May 2020 13:20:27 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 26D349D60; Wed, 20 May 2020 15:20:04 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v3 13/22] x86: coldplug cpus Date: Wed, 20 May 2020 15:19:54 +0200 Message-Id: <20200520132003.9492-14-kraxel@redhat.com> In-Reply-To: <20200520132003.9492-1-kraxel@redhat.com> References: <20200520132003.9492-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=205.139.110.61; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/05/20 02:22:41 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" microvm needs this, for correct madt creation (make sure enable bit is set). Signed-off-by: Gerd Hoffmann --- hw/i386/x86.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/hw/i386/x86.c b/hw/i386/x86.c index 7a3bc7ab6639..ac7a0a958781 100644 --- a/hw/i386/x86.c +++ b/hw/i386/x86.c @@ -118,6 +118,7 @@ uint32_t x86_cpu_apic_id_from_index(X86MachineState *x86ms, void x86_cpu_new(X86MachineState *x86ms, int64_t apic_id, Error **errp) { + MachineClass *mc = MACHINE_GET_CLASS(x86ms); Object *cpu = NULL; Error *local_err = NULL; @@ -126,6 +127,16 @@ void x86_cpu_new(X86MachineState *x86ms, int64_t apic_id, Error **errp) object_property_set_uint(cpu, apic_id, "apic-id", &local_err); object_property_set_bool(cpu, true, "realized", &local_err); + if (!mc->has_hotpluggable_cpus) { + /* coldplug cpu */ + MachineState *ms = MACHINE(x86ms); + int i = 0; + while (ms->possible_cpus->cpus[i].arch_id != apic_id) { + i++; + } + ms->possible_cpus->cpus[i].cpu = cpu; + } + object_unref(cpu); error_propagate(errp, local_err); } From patchwork Wed May 20 13:19:55 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11560439 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id EA22913B1 for ; Wed, 20 May 2020 13:28:01 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 9FADE20748 for ; Wed, 20 May 2020 13:28:01 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="MJA/PaOu" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9FADE20748 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:32916 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jbOlM-0000x7-Od for patchwork-qemu-devel@patchwork.kernel.org; Wed, 20 May 2020 09:28:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47804) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbOeE-0002Fx-8i for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:38 -0400 Received: from us-smtp-1.mimecast.com ([205.139.110.61]:46066 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jbOeB-0000Im-Ju for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:37 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589980834; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=U3Kp89IQYcNRqAlCdrRlNpaRks/G1xSNRxYkCXPLrAk=; b=MJA/PaOu2XQhrgEnEUuX/Js9lxc+h6kDe77b5aRkVNxEU+1MsHJ/7VLQhjwkCP7jjrzLCa k5UDRzisO1pcbUKS2OSBR7QXMWjzLt+VBq+yCsZozhkAjXxO5/7F1sUMIZgeZyNtnq6GNB Xp/zvKrMlMUMuQD/gqac/wnk6Fpz3tg= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-122-qFKAUKJBPm2ybdlSypxsdg-1; Wed, 20 May 2020 09:20:33 -0400 X-MC-Unique: qFKAUKJBPm2ybdlSypxsdg-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id BA5F5835B45; Wed, 20 May 2020 13:20:31 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-113-50.ams2.redhat.com [10.36.113.50]) by smtp.corp.redhat.com (Postfix) with ESMTP id 52A3A10016E8; Wed, 20 May 2020 13:20:30 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 2FD3C9D61; Wed, 20 May 2020 15:20:04 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v3 14/22] microvm: use 2G split unconditionally Date: Wed, 20 May 2020 15:19:55 +0200 Message-Id: <20200520132003.9492-15-kraxel@redhat.com> In-Reply-To: <20200520132003.9492-1-kraxel@redhat.com> References: <20200520132003.9492-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=205.139.110.61; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/05/20 02:22:41 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Looks like the logiv was copied over from q35. q35 does this for backward compatibility, there is no reason to do this on microvm though. So split @ 2G unconditionally. Signed-off-by: Gerd Hoffmann Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Igor Mammedov --- hw/i386/microvm.c | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c index 867d3d652145..b8f0d3283758 100644 --- a/hw/i386/microvm.c +++ b/hw/i386/microvm.c @@ -170,23 +170,9 @@ static void microvm_memory_init(MicrovmMachineState *mms) MemoryRegion *ram_below_4g, *ram_above_4g; MemoryRegion *system_memory = get_system_memory(); FWCfgState *fw_cfg; - ram_addr_t lowmem; + ram_addr_t lowmem = 0x80000000; /* 2G */ int i; - /* - * Check whether RAM fits below 4G (leaving 1/2 GByte for IO memory - * and 256 Mbytes for PCI Express Enhanced Configuration Access Mapping - * also known as MMCFG). - * If it doesn't, we need to split it in chunks below and above 4G. - * In any case, try to make sure that guest addresses aligned at - * 1G boundaries get mapped to host addresses aligned at 1G boundaries. - */ - if (machine->ram_size >= 0xb0000000) { - lowmem = 0x80000000; - } else { - lowmem = 0xb0000000; - } - /* * Handle the machine opt max-ram-below-4g. It is basically doing * min(qemu limit, user limit). From patchwork Wed May 20 13:19:56 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11560417 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6AA5790 for ; Wed, 20 May 2020 13:21:45 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 417912070A for ; Wed, 20 May 2020 13:21:45 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="JJo2I2fL" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 417912070A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:60314 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jbOfI-00055t-Bs for patchwork-qemu-devel@patchwork.kernel.org; Wed, 20 May 2020 09:21:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47660) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbOe4-0001pl-OY for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:28 -0400 Received: from us-smtp-delivery-1.mimecast.com ([207.211.31.120]:44100 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jbOe3-0000ER-3v for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:28 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589980826; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=ayTOjZA+mWiirp+gT+H+MOdev/oonlWKrbzvptzCSKI=; b=JJo2I2fLa2ps+uBXXz2h/eyQx3nuS/B1m2S83nZI+YBq1rCUCZL690UsN22dpy5nL5gIXd 7zkKVjd1t0obAR5/R4qVo5W87WI6yf5OALzg4ghpYjxnyw98K0WoCL1433N9LtOaC86jmh wcKaeZu6eH5aaMSigh2NhFAUlAwvtso= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-427-_yzXIlu4Mo-gV2jgqL4erQ-1; Wed, 20 May 2020 09:20:24 -0400 X-MC-Unique: _yzXIlu4Mo-gV2jgqL4erQ-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 588028018AD; Wed, 20 May 2020 13:20:23 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-113-50.ams2.redhat.com [10.36.113.50]) by smtp.corp.redhat.com (Postfix) with ESMTP id 009AF2E16D; Wed, 20 May 2020 13:20:22 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 3A4C49D63; Wed, 20 May 2020 15:20:04 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v3 15/22] microvm: make virtio irq base runtime configurable Date: Wed, 20 May 2020 15:19:56 +0200 Message-Id: <20200520132003.9492-16-kraxel@redhat.com> In-Reply-To: <20200520132003.9492-1-kraxel@redhat.com> References: <20200520132003.9492-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.120; envelope-from=kraxel@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/05/20 01:34:51 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Gerd Hoffmann Reviewed-by: Sergio Lopez Reviewed-by: Philippe Mathieu-Daudé --- include/hw/i386/microvm.h | 2 +- hw/i386/microvm.c | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/include/hw/i386/microvm.h b/include/hw/i386/microvm.h index ba68d1f22bb3..2709306c4016 100644 --- a/include/hw/i386/microvm.h +++ b/include/hw/i386/microvm.h @@ -27,7 +27,6 @@ /* Platform virtio definitions */ #define VIRTIO_MMIO_BASE 0xc0000000 -#define VIRTIO_IRQ_BASE 5 #define VIRTIO_NUM_TRANSPORTS 8 #define VIRTIO_CMDLINE_MAXLEN 64 @@ -57,6 +56,7 @@ typedef struct { bool auto_kernel_cmdline; /* Machine state */ + uint32_t virtio_irq_base; bool kernel_cmdline_fixed; } MicrovmMachineState; diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c index b8f0d3283758..ea4460714a99 100644 --- a/hw/i386/microvm.c +++ b/hw/i386/microvm.c @@ -121,10 +121,11 @@ static void microvm_devices_init(MicrovmMachineState *mms) kvmclock_create(); + mms->virtio_irq_base = 8; for (i = 0; i < VIRTIO_NUM_TRANSPORTS; i++) { sysbus_create_simple("virtio-mmio", VIRTIO_MMIO_BASE + i * 512, - x86ms->gsi[VIRTIO_IRQ_BASE + i]); + x86ms->gsi[mms->virtio_irq_base + i]); } /* Optional and legacy devices */ @@ -246,7 +247,7 @@ static void microvm_memory_init(MicrovmMachineState *mms) x86ms->ioapic_as = &address_space_memory; } -static gchar *microvm_get_mmio_cmdline(gchar *name) +static gchar *microvm_get_mmio_cmdline(gchar *name, uint32_t virtio_irq_base) { gchar *cmdline; gchar *separator; @@ -266,7 +267,7 @@ static gchar *microvm_get_mmio_cmdline(gchar *name) ret = g_snprintf(cmdline, VIRTIO_CMDLINE_MAXLEN, " virtio_mmio.device=512@0x%lx:%ld", VIRTIO_MMIO_BASE + index * 512, - VIRTIO_IRQ_BASE + index); + virtio_irq_base + index); if (ret < 0 || ret >= VIRTIO_CMDLINE_MAXLEN) { g_free(cmdline); return NULL; @@ -278,6 +279,7 @@ static gchar *microvm_get_mmio_cmdline(gchar *name) static void microvm_fix_kernel_cmdline(MachineState *machine) { X86MachineState *x86ms = X86_MACHINE(machine); + MicrovmMachineState *mms = MICROVM_MACHINE(machine); BusState *bus; BusChild *kid; char *cmdline; @@ -301,7 +303,8 @@ static void microvm_fix_kernel_cmdline(MachineState *machine) BusState *mmio_bus = &mmio_virtio_bus->parent_obj; if (!QTAILQ_EMPTY(&mmio_bus->children)) { - gchar *mmio_cmdline = microvm_get_mmio_cmdline(mmio_bus->name); + gchar *mmio_cmdline = microvm_get_mmio_cmdline + (mmio_bus->name, mms->virtio_irq_base); if (mmio_cmdline) { char *newcmd = g_strjoin(NULL, cmdline, mmio_cmdline, NULL); g_free(mmio_cmdline); From patchwork Wed May 20 13:19:57 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11560443 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6F20290 for ; Wed, 20 May 2020 13:28:22 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 359A820748 for ; Wed, 20 May 2020 13:28:22 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="PCm2BG8K" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 359A820748 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:34938 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jbOlh-0001ka-EV for patchwork-qemu-devel@patchwork.kernel.org; Wed, 20 May 2020 09:28:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47854) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbOeL-0002Py-14 for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:45 -0400 Received: from us-smtp-2.mimecast.com ([205.139.110.61]:29105 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jbOeD-0000Jg-L9 for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:43 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589980836; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=PBtQLgkYjfF+X6AIUo+9FpfGHUUBSO9SnuABdGvUHRU=; b=PCm2BG8KQiZtK8YobOdktGHcO4/6i8oPQrqgRmMJb1EDvYjHuBo/+fgxChDqnRPurHiMgE 2QK9VG73W+YJQ0+cda1L/2qRFkKZbW9IAIl1v7c5Kzm8F/V9rQ6ROWh6vmJd98hIjGK3C9 mIs1cvj1CEY9I0H6XFivGudC0lbxGMY= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-306-nVqUH29ANB2phOtxPKh7FQ-1; Wed, 20 May 2020 09:20:34 -0400 X-MC-Unique: nVqUH29ANB2phOtxPKh7FQ-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 5AF151800D42; Wed, 20 May 2020 13:20:33 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-113-50.ams2.redhat.com [10.36.113.50]) by smtp.corp.redhat.com (Postfix) with ESMTP id 643071057051; Wed, 20 May 2020 13:20:23 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 4B8739D68; Wed, 20 May 2020 15:20:04 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v3 16/22] microvm/acpi: add minimal acpi support Date: Wed, 20 May 2020 15:19:57 +0200 Message-Id: <20200520132003.9492-17-kraxel@redhat.com> In-Reply-To: <20200520132003.9492-1-kraxel@redhat.com> References: <20200520132003.9492-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=205.139.110.61; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/05/20 02:22:41 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" $subject says all. Can be controlled using -M microvm,acpi=on/off. Signed-off-by: Gerd Hoffmann Reviewed-by: Igor Mammedov --- hw/i386/acpi-microvm.h | 6 ++ include/hw/i386/microvm.h | 9 ++ hw/i386/acpi-microvm.c | 182 ++++++++++++++++++++++++++++++++++++++ hw/i386/microvm.c | 37 ++++++++ hw/i386/Kconfig | 1 + hw/i386/Makefile.objs | 1 + 6 files changed, 236 insertions(+) create mode 100644 hw/i386/acpi-microvm.h create mode 100644 hw/i386/acpi-microvm.c diff --git a/hw/i386/acpi-microvm.h b/hw/i386/acpi-microvm.h new file mode 100644 index 000000000000..6a6c2967102b --- /dev/null +++ b/hw/i386/acpi-microvm.h @@ -0,0 +1,6 @@ +#ifndef HW_I386_ACPI_MICROVM_H +#define HW_I386_ACPI_MICROVM_H + +void acpi_setup_microvm(void); + +#endif diff --git a/include/hw/i386/microvm.h b/include/hw/i386/microvm.h index 2709306c4016..ebd7f49d5de8 100644 --- a/include/hw/i386/microvm.h +++ b/include/hw/i386/microvm.h @@ -24,12 +24,18 @@ #include "hw/boards.h" #include "hw/i386/x86.h" +#include "hw/acpi/acpi_dev_interface.h" /* Platform virtio definitions */ #define VIRTIO_MMIO_BASE 0xc0000000 #define VIRTIO_NUM_TRANSPORTS 8 #define VIRTIO_CMDLINE_MAXLEN 64 +#define GED_MMIO_BASE 0xc1000000 +#define GED_MMIO_BASE_MEMHP (GED_MMIO_BASE + 0x100) +#define GED_MMIO_BASE_REGS (GED_MMIO_BASE + 0x200) +#define GED_MMIO_IRQ 9 + /* Machine type options */ #define MICROVM_MACHINE_PIT "pit" #define MICROVM_MACHINE_PIC "pic" @@ -58,6 +64,9 @@ typedef struct { /* Machine state */ uint32_t virtio_irq_base; bool kernel_cmdline_fixed; + Notifier machine_done; + Notifier powerdown_req; + AcpiDeviceIf *acpi_dev; } MicrovmMachineState; #define TYPE_MICROVM_MACHINE MACHINE_TYPE_NAME("microvm") diff --git a/hw/i386/acpi-microvm.c b/hw/i386/acpi-microvm.c new file mode 100644 index 000000000000..d2dd024909cc --- /dev/null +++ b/hw/i386/acpi-microvm.c @@ -0,0 +1,182 @@ +/* Support for generating ACPI tables and passing them to Guests + * + * Copyright (C) 2008-2010 Kevin O'Connor + * Copyright (C) 2006 Fabrice Bellard + * Copyright (C) 2013 Red Hat Inc + * + * Author: Michael S. Tsirkin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License along + * with this program; if not, see . + */ + +#include "qemu/osdep.h" +#include "qapi/error.h" + +#include "exec/memory.h" +#include "hw/acpi/acpi.h" +#include "hw/acpi/aml-build.h" +#include "hw/acpi/bios-linker-loader.h" +#include "hw/acpi/generic_event_device.h" +#include "hw/acpi/utils.h" +#include "hw/boards.h" +#include "hw/i386/fw_cfg.h" +#include "hw/i386/microvm.h" + +#include "acpi-common.h" +#include "acpi-microvm.h" + +static void +build_dsdt_microvm(GArray *table_data, BIOSLinker *linker, + MicrovmMachineState *mms) +{ + X86MachineState *x86ms = X86_MACHINE(mms); + Aml *dsdt, *sb_scope, *scope, *pkg; + bool ambiguous; + Object *isabus; + + isabus = object_resolve_path_type("", TYPE_ISA_BUS, &ambiguous); + assert(isabus); + assert(!ambiguous); + + dsdt = init_aml_allocator(); + + /* Reserve space for header */ + acpi_data_push(dsdt->buf, sizeof(AcpiTableHeader)); + + sb_scope = aml_scope("_SB"); + fw_cfg_add_acpi_dsdt(sb_scope, x86ms->fw_cfg); + isa_build_aml(ISA_BUS(isabus), sb_scope); + build_ged_aml(sb_scope, GED_DEVICE, HOTPLUG_HANDLER(mms->acpi_dev), + GED_MMIO_IRQ, AML_SYSTEM_MEMORY, GED_MMIO_BASE); + acpi_dsdt_add_power_button(sb_scope); + aml_append(dsdt, sb_scope); + + scope = aml_scope("\\"); + pkg = aml_package(4); + aml_append(pkg, aml_int(5)); /* SLEEP_CONTROL_REG.SLP_TYP */ + aml_append(pkg, aml_int(0)); /* ignored */ + aml_append(pkg, aml_int(0)); /* reserved */ + aml_append(pkg, aml_int(0)); /* reserved */ + aml_append(scope, aml_name_decl("_S5", pkg)); + aml_append(dsdt, scope); + + /* copy AML table into ACPI tables blob and patch header there */ + g_array_append_vals(table_data, dsdt->buf->data, dsdt->buf->len); + build_header(linker, table_data, + (void *)(table_data->data + table_data->len - dsdt->buf->len), + "DSDT", dsdt->buf->len, 5, NULL, NULL); + free_aml_allocator(); +} + +static void acpi_build_microvm(AcpiBuildTables *tables, + MicrovmMachineState *mms) +{ + MachineState *machine = MACHINE(mms); + GArray *table_offsets; + GArray *tables_blob = tables->table_data; + unsigned dsdt, xsdt; + AcpiFadtData pmfadt = { + .rev = 5, + .minor_ver = 1, + .flags = ((1 << ACPI_FADT_F_HW_REDUCED_ACPI) | + (1 << ACPI_FADT_F_RESET_REG_SUP)), + .sleep_ctl = { + .space_id = AML_AS_SYSTEM_MEMORY, + .bit_width = 8, + .address = GED_MMIO_BASE_REGS + ACPI_GED_REG_SLEEP_CTL, + }, + .sleep_sts = { + .space_id = AML_AS_SYSTEM_MEMORY, + .bit_width = 8, + .address = GED_MMIO_BASE_REGS + ACPI_GED_REG_SLEEP_STS, + }, + .reset_reg = { + .space_id = AML_AS_SYSTEM_MEMORY, + .bit_width = 8, + .address = GED_MMIO_BASE_REGS + ACPI_GED_REG_RESET, + }, + .reset_val = ACPI_GED_RESET_VALUE, + }; + + table_offsets = g_array_new(false, true /* clear */, + sizeof(uint32_t)); + bios_linker_loader_alloc(tables->linker, + ACPI_BUILD_TABLE_FILE, tables_blob, + 64 /* Ensure FACS is aligned */, + false /* high memory */); + + dsdt = tables_blob->len; + build_dsdt_microvm(tables_blob, tables->linker, mms); + + pmfadt.dsdt_tbl_offset = &dsdt; + pmfadt.xdsdt_tbl_offset = &dsdt; + acpi_add_table(table_offsets, tables_blob); + build_fadt(tables_blob, tables->linker, &pmfadt, NULL, NULL); + + acpi_add_table(table_offsets, tables_blob); + acpi_build_madt(tables_blob, tables->linker, X86_MACHINE(machine), + mms->acpi_dev, false); + + xsdt = tables_blob->len; + build_xsdt(tables_blob, tables->linker, table_offsets, NULL, NULL); + + /* RSDP is in FSEG memory, so allocate it separately */ + { + AcpiRsdpData rsdp_data = { + .revision = 2, + .oem_id = ACPI_BUILD_APPNAME6, + .xsdt_tbl_offset = &xsdt, + .rsdt_tbl_offset = NULL, + }; + build_rsdp(tables->rsdp, tables->linker, &rsdp_data); + } + + /* Cleanup memory that's no longer used. */ + g_array_free(table_offsets, true); +} + +static void acpi_build_no_update(void *build_opaque) +{ + /* nothing, microvm tables don't change at runtime */ +} + +void acpi_setup_microvm(void) +{ + MicrovmMachineState *mms = MICROVM_MACHINE(qdev_get_machine()); + X86MachineState *x86ms = X86_MACHINE(mms); + AcpiBuildTables tables; + + assert(x86ms->fw_cfg); + + if (!x86_machine_is_acpi_enabled(x86ms)) { + return; + } + + acpi_build_tables_init(&tables); + acpi_build_microvm(&tables, mms); + + /* Now expose it all to Guest */ + acpi_add_rom_blob(acpi_build_no_update, NULL, + tables.table_data, + ACPI_BUILD_TABLE_FILE, + ACPI_BUILD_TABLE_MAX_SIZE); + acpi_add_rom_blob(acpi_build_no_update, NULL, + tables.linker->cmd_blob, + "etc/table-loader", 0); + acpi_add_rom_blob(acpi_build_no_update, NULL, + tables.rsdp, + ACPI_BUILD_RSDP_FILE, 0); + + acpi_build_tables_cleanup(&tables, false); +} diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c index ea4460714a99..b38321112baa 100644 --- a/hw/i386/microvm.c +++ b/hw/i386/microvm.c @@ -26,6 +26,8 @@ #include "sysemu/cpus.h" #include "sysemu/numa.h" #include "sysemu/reset.h" +#include "sysemu/runstate.h" +#include "acpi-microvm.h" #include "hw/loader.h" #include "hw/irq.h" @@ -41,6 +43,8 @@ #include "hw/i386/e820_memory_layout.h" #include "hw/i386/fw_cfg.h" #include "hw/virtio/virtio-mmio.h" +#include "hw/acpi/acpi.h" +#include "hw/acpi/generic_event_device.h" #include "cpu.h" #include "elf.h" @@ -129,6 +133,17 @@ static void microvm_devices_init(MicrovmMachineState *mms) } /* Optional and legacy devices */ + if (x86_machine_is_acpi_enabled(x86ms)) { + DeviceState *dev = qdev_create(NULL, TYPE_ACPI_GED_X86); + qdev_prop_set_uint32(dev, "ged-event", ACPI_GED_PWR_DOWN_EVT); + sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, GED_MMIO_BASE); + /* sysbus_mmio_map(SYS_BUS_DEVICE(dev), 1, GED_MMIO_BASE_MEMHP); */ + sysbus_mmio_map(SYS_BUS_DEVICE(dev), 2, GED_MMIO_BASE_REGS); + sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, + x86ms->gsi[GED_MMIO_IRQ]); + qdev_init_nofail(dev); + mms->acpi_dev = ACPI_DEVICE_IF(dev); + } if (mms->pic == ON_OFF_AUTO_ON || mms->pic == ON_OFF_AUTO_AUTO) { qemu_irq *i8259; @@ -457,6 +472,23 @@ static void microvm_machine_set_auto_kernel_cmdline(Object *obj, bool value, mms->auto_kernel_cmdline = value; } +static void microvm_machine_done(Notifier *notifier, void *data) +{ + acpi_setup_microvm(); +} + +static void microvm_powerdown_req(Notifier *notifier, void *data) +{ + MicrovmMachineState *mms = container_of(notifier, MicrovmMachineState, + powerdown_req); + + if (mms->acpi_dev) { + Object *obj = OBJECT(mms->acpi_dev); + AcpiDeviceIfClass *adevc = ACPI_DEVICE_IF_GET_CLASS(obj); + adevc->send_event(mms->acpi_dev, ACPI_POWER_DOWN_STATUS); + } +} + static void microvm_machine_initfn(Object *obj) { MicrovmMachineState *mms = MICROVM_MACHINE(obj); @@ -471,6 +503,11 @@ static void microvm_machine_initfn(Object *obj) /* State */ mms->kernel_cmdline_fixed = false; + + mms->machine_done.notify = microvm_machine_done; + qemu_add_machine_init_done_notifier(&mms->machine_done); + mms->powerdown_req.notify = microvm_powerdown_req; + qemu_register_powerdown_notifier(&mms->powerdown_req); } static void microvm_class_init(ObjectClass *oc, void *data) diff --git a/hw/i386/Kconfig b/hw/i386/Kconfig index c93f32f6579d..be746bcb49eb 100644 --- a/hw/i386/Kconfig +++ b/hw/i386/Kconfig @@ -102,6 +102,7 @@ config MICROVM select I8259 select MC146818RTC select VIRTIO_MMIO + select ACPI_HW_REDUCED config X86_IOMMU bool diff --git a/hw/i386/Makefile.objs b/hw/i386/Makefile.objs index 622739305882..bbb2fe78f3cd 100644 --- a/hw/i386/Makefile.objs +++ b/hw/i386/Makefile.objs @@ -19,3 +19,4 @@ obj-y += kvmvapic.o obj-$(CONFIG_ACPI) += acpi-common.o obj-$(CONFIG_ACPI_HW_REDUCED) += generic_event_device_x86.o obj-$(CONFIG_PC) += acpi-build.o +obj-$(CONFIG_MICROVM) += acpi-microvm.o From patchwork Wed May 20 13:19:58 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11560445 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 0111813B1 for ; Wed, 20 May 2020 13:28:32 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id CBB8820748 for ; Wed, 20 May 2020 13:28:31 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="aLxAm3S+" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CBB8820748 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:35904 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jbOlr-0002Bb-0Q for patchwork-qemu-devel@patchwork.kernel.org; Wed, 20 May 2020 09:28:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47724) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbOe8-0001zc-CT for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:32 -0400 Received: from us-smtp-delivery-1.mimecast.com ([205.139.110.120]:38188 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jbOe5-0000G0-BU for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:31 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589980828; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=Cs+xA9nlQJb+xFVefGhp9a99zyys5aZQFZRxKPaRqOU=; b=aLxAm3S+HEY9OWWewY9F/EXTUalq8o4t1GFXXDPwpr4igbx/F5qyENeg66Vga89fhJ1KNU baBh2YCrkFa0ajbzMdtjKBQtnmlaRp9q0wAHaoUJrLaBD7uXys3nfiE05yWA7IiXbqaw2Q pCJn8Abq/gVf2gzmI1zcmBDqY3VL0AI= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-346-diUIxhKgPyGNqvQqPfzVsg-1; Wed, 20 May 2020 09:20:26 -0400 X-MC-Unique: diUIxhKgPyGNqvQqPfzVsg-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 82DE6835B40; Wed, 20 May 2020 13:20:25 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-113-50.ams2.redhat.com [10.36.113.50]) by smtp.corp.redhat.com (Postfix) with ESMTP id 32D6D19451; Wed, 20 May 2020 13:20:23 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 549FD9D69; Wed, 20 May 2020 15:20:04 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v3 17/22] microvm/acpi: add acpi_dsdt_add_virtio() for x86 Date: Wed, 20 May 2020 15:19:58 +0200 Message-Id: <20200520132003.9492-18-kraxel@redhat.com> In-Reply-To: <20200520132003.9492-1-kraxel@redhat.com> References: <20200520132003.9492-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=205.139.110.120; envelope-from=kraxel@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/05/19 22:48:02 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Makes x86 linux kernel find virtio-mmio devices automatically. Signed-off-by: Gerd Hoffmann Reviewed-by: Sergio Lopez Reviewed-by: Igor Mammedov --- hw/i386/acpi-microvm.c | 52 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/hw/i386/acpi-microvm.c b/hw/i386/acpi-microvm.c index d2dd024909cc..12060939ff6c 100644 --- a/hw/i386/acpi-microvm.c +++ b/hw/i386/acpi-microvm.c @@ -21,6 +21,7 @@ */ #include "qemu/osdep.h" +#include "qemu/cutils.h" #include "qapi/error.h" #include "exec/memory.h" @@ -32,10 +33,60 @@ #include "hw/boards.h" #include "hw/i386/fw_cfg.h" #include "hw/i386/microvm.h" +#include "hw/virtio/virtio-mmio.h" #include "acpi-common.h" #include "acpi-microvm.h" +static void acpi_dsdt_add_virtio(Aml *scope, + MicrovmMachineState *mms) +{ + gchar *separator; + long int index; + BusState *bus; + BusChild *kid; + + bus = sysbus_get_default(); + QTAILQ_FOREACH(kid, &bus->children, sibling) { + DeviceState *dev = kid->child; + Object *obj = object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MMIO); + + if (obj) { + VirtIOMMIOProxy *mmio = VIRTIO_MMIO(obj); + VirtioBusState *mmio_virtio_bus = &mmio->bus; + BusState *mmio_bus = &mmio_virtio_bus->parent_obj; + + if (QTAILQ_EMPTY(&mmio_bus->children)) { + continue; + } + separator = g_strrstr(mmio_bus->name, "."); + if (!separator) { + continue; + } + if (qemu_strtol(separator + 1, NULL, 10, &index) != 0) { + continue; + } + + uint32_t irq = mms->virtio_irq_base + index; + hwaddr base = VIRTIO_MMIO_BASE + index * 512; + hwaddr size = 512; + + Aml *dev = aml_device("VR%02u", (unsigned)index); + aml_append(dev, aml_name_decl("_HID", aml_string("LNRO0005"))); + aml_append(dev, aml_name_decl("_UID", aml_int(index))); + aml_append(dev, aml_name_decl("_CCA", aml_int(1))); + + Aml *crs = aml_resource_template(); + aml_append(crs, aml_memory32_fixed(base, size, AML_READ_WRITE)); + aml_append(crs, + aml_interrupt(AML_CONSUMER, AML_LEVEL, AML_ACTIVE_HIGH, + AML_EXCLUSIVE, &irq, 1)); + aml_append(dev, aml_name_decl("_CRS", crs)); + aml_append(scope, dev); + } + } +} + static void build_dsdt_microvm(GArray *table_data, BIOSLinker *linker, MicrovmMachineState *mms) @@ -60,6 +111,7 @@ build_dsdt_microvm(GArray *table_data, BIOSLinker *linker, build_ged_aml(sb_scope, GED_DEVICE, HOTPLUG_HANDLER(mms->acpi_dev), GED_MMIO_IRQ, AML_SYSTEM_MEMORY, GED_MMIO_BASE); acpi_dsdt_add_power_button(sb_scope); + acpi_dsdt_add_virtio(sb_scope, mms); aml_append(dsdt, sb_scope); scope = aml_scope("\\"); From patchwork Wed May 20 13:19:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11560451 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9B31890 for ; Wed, 20 May 2020 13:30:13 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 716E120748 for ; Wed, 20 May 2020 13:30:13 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Jxpepg1A" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 716E120748 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:45292 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jbOnU-0005wx-Gz for patchwork-qemu-devel@patchwork.kernel.org; Wed, 20 May 2020 09:30:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47746) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbOeA-000248-2e for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:34 -0400 Received: from us-smtp-1.mimecast.com ([207.211.31.81]:59749 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jbOe8-0000Hj-UA for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:33 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589980832; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=bXE+h2BI+iedXQwFImxfC59sUb0E26EyoIxiNHNhE28=; b=Jxpepg1AsoMMiyagUACedBxrYZziKuYC32ksbIsKL0IRq29OvVMgaGYP0TpuZ4ZWBe5Q2n z/zM1PRmmx5tnr0xbZ0D+B1SDQKoTGX84GQrbulbSMcrKWLr6OHVmnTauCOVzCUu8AIxy2 qFDXP8yQahz+c754svDYOFbpE+RHupU= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-217-oS24YF-UPQamE7gIf4q4rQ-1; Wed, 20 May 2020 09:20:28 -0400 X-MC-Unique: oS24YF-UPQamE7gIf4q4rQ-1 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 2735C1005512; Wed, 20 May 2020 13:20:27 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-113-50.ams2.redhat.com [10.36.113.50]) by smtp.corp.redhat.com (Postfix) with ESMTP id 96E7882E72; Wed, 20 May 2020 13:20:23 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 5D8479D6A; Wed, 20 May 2020 15:20:04 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v3 18/22] microvm/acpi: use GSI 16-23 for virtio Date: Wed, 20 May 2020 15:19:59 +0200 Message-Id: <20200520132003.9492-19-kraxel@redhat.com> In-Reply-To: <20200520132003.9492-1-kraxel@redhat.com> References: <20200520132003.9492-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.81; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/05/20 04:09:34 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" With ACPI enabled and IO-APIC being properly declared in the ACPI tables we can use interrupt lines 16-23 for virtio and avoid shared interrupts. With acpi disabled we continue to use lines 8-15. Signed-off-by: Gerd Hoffmann Reviewed-by: Sergio Lopez Reviewed-by: Igor Mammedov --- hw/i386/microvm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c index b38321112baa..7d8174809ae1 100644 --- a/hw/i386/microvm.c +++ b/hw/i386/microvm.c @@ -125,7 +125,7 @@ static void microvm_devices_init(MicrovmMachineState *mms) kvmclock_create(); - mms->virtio_irq_base = 8; + mms->virtio_irq_base = x86_machine_is_acpi_enabled(x86ms) ? 16 : 8; for (i = 0; i < VIRTIO_NUM_TRANSPORTS; i++) { sysbus_create_simple("virtio-mmio", VIRTIO_MMIO_BASE + i * 512, From patchwork Wed May 20 13:20:00 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11560437 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D9EAB90 for ; Wed, 20 May 2020 13:26:41 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id AF9F1207C4 for ; Wed, 20 May 2020 13:26:41 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="fCY1FjWj" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org AF9F1207C4 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:56420 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jbOk4-0007Ry-SV for patchwork-qemu-devel@patchwork.kernel.org; Wed, 20 May 2020 09:26:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47704) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbOe6-0001v4-Vf for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:31 -0400 Received: from us-smtp-delivery-1.mimecast.com ([207.211.31.120]:27790 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jbOe4-0000FO-42 for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:30 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589980827; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=5/bLq9KGCPysYPYe9QiKsWgS2E2AvDpIpEzAaMPZmiE=; b=fCY1FjWjOy231gNzlCygMRUZ+tA21mUHvMxV/CYnhiKSe11r7dODwZSiPLOXhQjL9DzeYE vZhmwPNae5l5t65nJtMEbEIhQ6tIpk6Cjo47u02WxKbVD58RrHMzcCRt8Rl5xySECdsgbW 4202uriANNaaCJKWlvYuecgdUTlNxL0= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-513-d0NoXSp3PZudtJrC8OAcrg-1; Wed, 20 May 2020 09:20:25 -0400 X-MC-Unique: d0NoXSp3PZudtJrC8OAcrg-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 3390A100CCCB; Wed, 20 May 2020 13:20:24 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-113-50.ams2.redhat.com [10.36.113.50]) by smtp.corp.redhat.com (Postfix) with ESMTP id CD3682E170; Wed, 20 May 2020 13:20:23 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 668A49D71; Wed, 20 May 2020 15:20:04 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v3 19/22] microvm/acpi: use seabios with acpi=on Date: Wed, 20 May 2020 15:20:00 +0200 Message-Id: <20200520132003.9492-20-kraxel@redhat.com> In-Reply-To: <20200520132003.9492-1-kraxel@redhat.com> References: <20200520132003.9492-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.120; envelope-from=kraxel@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/05/20 01:34:51 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" With acpi=off continue to use qboot. Signed-off-by: Gerd Hoffmann Reviewed-by: Igor Mammedov --- hw/i386/microvm.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c index 7d8174809ae1..ddb8570a2915 100644 --- a/hw/i386/microvm.c +++ b/hw/i386/microvm.c @@ -52,6 +52,7 @@ #include "hw/xen/start_info.h" #define MICROVM_QBOOT_FILENAME "qboot.bin" +#define MICROVM_BIOS_FILENAME "bios-microvm.bin" static void microvm_set_rtc(MicrovmMachineState *mms, ISADevice *s) { @@ -174,7 +175,9 @@ static void microvm_devices_init(MicrovmMachineState *mms) } if (bios_name == NULL) { - bios_name = MICROVM_QBOOT_FILENAME; + bios_name = x86_machine_is_acpi_enabled(x86ms) + ? MICROVM_BIOS_FILENAME + : MICROVM_QBOOT_FILENAME; } x86_bios_rom_init(get_system_memory(), true); } From patchwork Wed May 20 13:20:01 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11560463 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 35381138A for ; Wed, 20 May 2020 13:34:15 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 0A406205CB for ; Wed, 20 May 2020 13:34:15 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="W+zvR8f6" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0A406205CB Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:33130 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jbOrO-0005db-7j for patchwork-qemu-devel@patchwork.kernel.org; Wed, 20 May 2020 09:34:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47818) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbOeF-0002Iu-6Z for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:39 -0400 Received: from us-smtp-delivery-1.mimecast.com ([205.139.110.120]:58657 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jbOeC-0000J6-J7 for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:38 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589980835; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=2msO/1+vqpbDkNl4/pvOT0xxBfnL++oCQrrjhXIepns=; b=W+zvR8f6cGCzNTP9FUTnHjrUV4xVQSqjjCO4PsmjJGTT9AEgutDJ2xdfSibO8OOpX1DGFw eyXnqh/OFWspo6EC+HOuItOKOcmmKIPRhk6dkv1kBK7+K5GLKnTZ0Sifuw4P8YhUYDFPJy E4IHhY6eI77S1LN5AsmveOxfnoJlnSk= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-108-tONqx_N0Nry61XJifatxmA-1; Wed, 20 May 2020 09:20:33 -0400 X-MC-Unique: tONqx_N0Nry61XJifatxmA-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 648551902EC6; Wed, 20 May 2020 13:20:32 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-113-50.ams2.redhat.com [10.36.113.50]) by smtp.corp.redhat.com (Postfix) with ESMTP id 57E8C60C84; Wed, 20 May 2020 13:20:24 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 6F9679D72; Wed, 20 May 2020 15:20:04 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v3 20/22] microvm/acpi: disable virtio-mmio cmdline hack Date: Wed, 20 May 2020 15:20:01 +0200 Message-Id: <20200520132003.9492-21-kraxel@redhat.com> In-Reply-To: <20200520132003.9492-1-kraxel@redhat.com> References: <20200520132003.9492-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=205.139.110.120; envelope-from=kraxel@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/05/19 22:48:02 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" ... in case we are using ACPI. Signed-off-by: Gerd Hoffmann Reviewed-by: Igor Mammedov --- hw/i386/microvm.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c index ddb8570a2915..602c6a8f75f3 100644 --- a/hw/i386/microvm.c +++ b/hw/i386/microvm.c @@ -362,7 +362,8 @@ static void microvm_machine_reset(MachineState *machine) CPUState *cs; X86CPU *cpu; - if (machine->kernel_filename != NULL && + if (!x86_machine_is_acpi_enabled(X86_MACHINE(machine)) && + machine->kernel_filename != NULL && mms->auto_kernel_cmdline && !mms->kernel_cmdline_fixed) { microvm_fix_kernel_cmdline(machine); mms->kernel_cmdline_fixed = true; From patchwork Wed May 20 13:20:02 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11560447 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3196213B1 for ; Wed, 20 May 2020 13:29:30 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 0790020748 for ; Wed, 20 May 2020 13:29:30 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="gmBRUY44" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0790020748 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:40676 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jbOmn-00046n-6o for patchwork-qemu-devel@patchwork.kernel.org; Wed, 20 May 2020 09:29:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47828) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbOeH-0002M6-Gj for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:42 -0400 Received: from us-smtp-delivery-1.mimecast.com ([207.211.31.120]:46348 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jbOeD-0000Jx-R8 for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:41 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589980836; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=6OIxpUflKpjw9oFHZKmMc0sFoAZYdcP0pMC2r+iLubc=; b=gmBRUY44K1svrWmqDBViY87OzI28H0rV1130ierxU9wXHbh5MrbmwS2NLRl6i6xzvaQWcz HxiBjCoLEnxk6kzyO0Z9xmPgB9Ma/SOQVPkIUfrdmvwZMmpbh8no+2xMp1DAnIeZY/3KL3 5J5CrUpZdXBjPQpC7V/ekxbf0+9TNTE= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-391-9KxStO4rPR61EXfnfpNnJA-1; Wed, 20 May 2020 09:20:34 -0400 X-MC-Unique: 9KxStO4rPR61EXfnfpNnJA-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 85527464; Wed, 20 May 2020 13:20:33 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-113-50.ams2.redhat.com [10.36.113.50]) by smtp.corp.redhat.com (Postfix) with ESMTP id 125D019C58; Wed, 20 May 2020 13:20:25 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 7A1469D73; Wed, 20 May 2020 15:20:04 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v3 21/22] [RfC] acpi: add per machine type acpi default Date: Wed, 20 May 2020 15:20:02 +0200 Message-Id: <20200520132003.9492-22-kraxel@redhat.com> In-Reply-To: <20200520132003.9492-1-kraxel@redhat.com> References: <20200520132003.9492-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.120; envelope-from=kraxel@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/05/20 01:34:51 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Allow setting acpi default value for each machine type. Signed-off-by: Gerd Hoffmann --- include/hw/i386/x86.h | 1 + hw/i386/x86.c | 21 ++++++++++++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/include/hw/i386/x86.h b/include/hw/i386/x86.h index b52285481687..d2fffa8252ff 100644 --- a/include/hw/i386/x86.h +++ b/include/hw/i386/x86.h @@ -37,6 +37,7 @@ typedef struct { bool save_tsc_khz; /* Enables contiguous-apic-ID mode */ bool compat_apic_id_mode; + bool acpi_default; } X86MachineClass; typedef struct { diff --git a/hw/i386/x86.c b/hw/i386/x86.c index ac7a0a958781..3a56a157c5f0 100644 --- a/hw/i386/x86.c +++ b/hw/i386/x86.c @@ -940,10 +940,22 @@ static void x86_machine_set_smm(Object *obj, Visitor *v, const char *name, bool x86_machine_is_acpi_enabled(X86MachineState *x86ms) { - if (x86ms->acpi == ON_OFF_AUTO_OFF) { - return false; + X86MachineClass *x86mc = X86_MACHINE_GET_CLASS(x86ms); + bool enabled; + + switch (x86ms->acpi) { + case ON_OFF_AUTO_ON: + enabled = true; + break; + case ON_OFF_AUTO_OFF: + enabled = false; + break; + case ON_OFF_AUTO_AUTO: + default: + enabled = x86mc->acpi_default; + break; } - return true; + return enabled; } static void x86_machine_get_acpi(Object *obj, Visitor *v, const char *name, @@ -991,6 +1003,9 @@ static void x86_machine_class_init(ObjectClass *oc, void *data) x86mc->save_tsc_khz = true; nc->nmi_monitor_handler = x86_nmi; + /* acpi is on by default */ + x86mc->acpi_default = true; + object_class_property_add(oc, X86_MACHINE_MAX_RAM_BELOW_4G, "size", x86_machine_get_max_ram_below_4g, x86_machine_set_max_ram_below_4g, NULL, NULL); From patchwork Wed May 20 13:20:03 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 11560435 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6D81E90 for ; Wed, 20 May 2020 13:26:19 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 43B1D20748 for ; Wed, 20 May 2020 13:26:19 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Um/R9trV" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 43B1D20748 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:54274 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jbOji-0006aD-F5 for patchwork-qemu-devel@patchwork.kernel.org; Wed, 20 May 2020 09:26:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47846) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbOeJ-0002NI-Oc for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:44 -0400 Received: from us-smtp-delivery-1.mimecast.com ([207.211.31.120]:36720 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jbOeE-0000KL-E1 for qemu-devel@nongnu.org; Wed, 20 May 2020 09:20:43 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589980837; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type:in-reply-to:in-reply-to: references:references; bh=Sr2/mO9x3+V1w5jPR6muuF5U5yNtB/8Q3ABWiRShk38=; b=Um/R9trVXQC8/tGSG3eJj4hJBMWWhCO+UQyF88kCJ4XBvwZQhjIJNNCJaXNjBlYXHwVYp4 CLCgWSER2/HlUIqAiJ08wOulBxUEqgQEgVsLRNOAXFFuU9ysqIw6oNK6i+hVkizMCaZ4on ZDDwC06dfaM4HT+JcMYd803yIL/EFGs= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-453-J1lfdg2OPbClFeAetMAepg-1; Wed, 20 May 2020 09:20:36 -0400 X-MC-Unique: J1lfdg2OPbClFeAetMAepg-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id C2C33EC1A0; Wed, 20 May 2020 13:20:34 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-113-50.ams2.redhat.com [10.36.113.50]) by smtp.corp.redhat.com (Postfix) with ESMTP id 1AAFC5C1BE; Wed, 20 May 2020 13:20:25 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 82FDE9D74; Wed, 20 May 2020 15:20:04 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PATCH v3 22/22] [RfC] acpi: flip default to off for microvm Date: Wed, 20 May 2020 15:20:03 +0200 Message-Id: <20200520132003.9492-23-kraxel@redhat.com> In-Reply-To: <20200520132003.9492-1-kraxel@redhat.com> References: <20200520132003.9492-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=207.211.31.120; envelope-from=kraxel@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/05/20 01:34:51 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Eduardo Habkost , Sergio Lopez , "Michael S. Tsirkin" , Shannon Zhao , qemu-arm@nongnu.org, Gerd Hoffmann , Paolo Bonzini , Igor Mammedov , Richard Henderson Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Gerd Hoffmann --- hw/i386/microvm.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c index 602c6a8f75f3..b5c445b5403b 100644 --- a/hw/i386/microvm.c +++ b/hw/i386/microvm.c @@ -517,6 +517,7 @@ static void microvm_machine_initfn(Object *obj) static void microvm_class_init(ObjectClass *oc, void *data) { MachineClass *mc = MACHINE_CLASS(oc); + X86MachineClass *x86mc = X86_MACHINE_CLASS(oc); mc->init = microvm_machine_state_init; @@ -537,6 +538,9 @@ static void microvm_class_init(ObjectClass *oc, void *data) /* Machine class handlers */ mc->reset = microvm_machine_reset; + /* acpi is off by default */ + x86mc->acpi_default = false; + object_class_property_add(oc, MICROVM_MACHINE_PIC, "OnOffAuto", microvm_machine_get_pic, microvm_machine_set_pic,