From nobody Sun Sep 28 17:04:05 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1756380935; cv=none; d=zohomail.com; s=zohoarc; b=EBfFDsnLm63JjkDjTWcTWi1rXBeRKKpu/pnCOoy5DbOMo0ehHxKVN15WLja5Dr0hWuELMntdb2O5eZkbrrwl0B1jbbJThhtlO+8I2KUUdvpRmE1sj98QT0cWdxwztdLZsnYY11cUqnNimk58BT+Sj1+PPry4GOgFepqmkVUe9Rc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1756380935; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=iam1hDuVEJ4IEWHLRQN0p7qFdPnVJgerGQJU7wZLLt8=; b=Jwgi/Y/AKD9YzgMCVU2RVME5HzLnQ3i8LL/noLvRtqi5MxG0E+L7/997E/rSZp0SfqSA0qmKLSW45eT5Z1bFrBR9doZT9UWBX0L6aCE/6xO+YgiTTg80/ECaFueueUDJ1BbtmKhX08mwr08PRp7mLLcrtz0XZVa6fDOOfrlSBEg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1756380935574704.1324299913394; Thu, 28 Aug 2025 04:35:35 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1urau9-0003QV-UY; Thu, 28 Aug 2025 07:34:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1urau4-0003Lz-Li for qemu-devel@nongnu.org; Thu, 28 Aug 2025 07:34:52 -0400 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1urau2-0005lX-R2 for qemu-devel@nongnu.org; Thu, 28 Aug 2025 07:34:52 -0400 Received: by mail-wr1-x429.google.com with SMTP id ffacd0b85a97d-3c6743a10e3so419586f8f.0 for ; Thu, 28 Aug 2025 04:34:50 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b79799c33sm28691015e9.5.2025.08.28.04.34.47 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Aug 2025 04:34:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1756380889; x=1756985689; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=iam1hDuVEJ4IEWHLRQN0p7qFdPnVJgerGQJU7wZLLt8=; b=IIyJ8wGuotb0l+sdSf9Cj6iOlzc4rNsEMugoAwmP7QFiQFUFRujBq3ZOvR1+MH6iyC 9uN0Kj9rXku0aWQhxHAiHj+/Y49qUFxgU0eFmNOKWZ/e9CthTzLdzkio2q93DQYjGTX4 xuL4z50YihRialZ80mopWxkCkPGFb1TlIZP0B+CjEEQ973fwVanANMJy57qWk6sLqWqv 9IpwUIqLlp2PwiAQN9x1kn/ay+4SByWoOSGdlC/n0MeSkTRnDm3s35dfipP5nYME+TJT 00/rOZlwzSbEDW8YxSIODyyRBmNEa31RbsQAw/8wBUVBhrJDOUrylt9btjK2vquBtcek EWTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756380889; x=1756985689; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=iam1hDuVEJ4IEWHLRQN0p7qFdPnVJgerGQJU7wZLLt8=; b=LD73U4QxblA7f2cdPOrpUdwezXQOrStvvrKpzl7a3YBl+lltQAKkYl5y304bI02T9O fREEXDri93FJXLtyzCJ1T83maeT9KeKxwom6T62osGWLvCKTUDkDYwtZf+F0jxmXWasB MrIT6PWDUDYMKJQo6smLdjZxQr1SAsIlfhcpQJcsbYWo29zPrgKU4gKmlSNkgbcvtKSC jjigPNwnmli6Wyl4CrrYDw109mo4gBvNaGQxmIm3AVMbhx5Wd1IyoDFHuNcVjn1S4pHr jL7HpNblTIb4yjlQmz9VJ0f9AyT05V08JU6G0dni14p8xkE9tCvZeCVWdsnsra8+aBkm shMg== X-Gm-Message-State: AOJu0YxQyXeOw+Nl4Mrp67CtHZaLqLLL6c80BGSqIEkGHVP7LH+xJub8 //U6HoUnC6wnj2qCuzvggsAnv7tdjO5UG9DQxkw7RVxu1383q1VpkhXvSMhv2Scrg3xDCkdHkcF /X92o X-Gm-Gg: ASbGncsp0cmGzbOv6OybOtlwtHf9LiiwlbpXul0KihHyFwWOJnRewaoQKgouKblGEKL oV4z+wS6pFfSJFVhrVF0omsFbLRr8xEN63Kb8O6bvUL8zy5MrbTS+UFW2tXGFS/O5PW6s6No8bf 6dCwYYFMK5gDtXkM9H9BpThmIQMz0OJfSgjTRDyjOaCt4f9/Sqz64chGOQLHiS1hifo7s7dWdGk anUUwyI7VTngpElDzV2GOMCQ1k/t1l7OfpYBJ7pX4yU5sElEV0wnJ19dyelykUWcAvAL7imFNzp FD+6QzQw3bWeIrNofqxixyY7SS7jNyJNJpxfmaaATa18vzLqBU5SWcrVePWhajJiw2wxGpEpCrT X6uiWIvzhjFguLggLIQVG4zcLKkYg X-Google-Smtp-Source: AGHT+IFss20RtRhdpwVp4fhbVZimEoadZXjKPdC6oLoKnl5A/duv7BW4/sKyi/MOKw20BMPXgMm0gA== X-Received: by 2002:a5d:64e7:0:b0:3ca:6584:be0b with SMTP id ffacd0b85a97d-3ca6584c142mr10246675f8f.20.1756380888653; Thu, 28 Aug 2025 04:34:48 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 14/32] hw/arm: add static NVDIMMs in device tree Date: Thu, 28 Aug 2025 12:34:11 +0100 Message-ID: <20250828113430.3214314-15-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250828113430.3214314-1-peter.maydell@linaro.org> References: <20250828113430.3214314-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::429; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x429.google.com 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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1756380937960116600 Content-Type: text/plain; charset="utf-8" From: Manos Pitsidianakis NVDIMM is used for fast rootfs with EROFS, for example by kata containers. To allow booting with static NVDIMM memory, add them to the device tree in arm virt machine. This allows users to boot directly with nvdimm memory devices without having to rely on ACPI and hotplug. Verified to work with command invocation: ./qemu-system-aarch64 \ -M virt,nvdimm=3Don \ -cpu cortex-a57 \ -m 4G,slots=3D2,maxmem=3D8G \ -object memory-backend-file,id=3Dmem1,share=3Don,mem-path=3D/tmp/nvdimm,s= ize=3D4G,readonly=3Doff \ -device nvdimm,id=3Dnvdimm1,memdev=3Dmem1,unarmed=3Doff \ -drive file=3D./debian-12-nocloud-arm64-commited.qcow2,format=3Dqcow2 \ -kernel ./vmlinuz-6.1.0-13-arm64 \ -append "root=3D/dev/vda1 console=3DttyAMA0,115200 acpi=3Doff" -initrd ./initrd.img-6.1.0-13-arm64 \ -nographic \ -serial mon:stdio Signed-off-by: Manos Pitsidianakis Message-id: 20250807-nvdimm_arm64_virt-v2-1-b8054578bea8@linaro.org Reviewed-by: Peter Maydell Signed-off-by: Peter Maydell --- hw/arm/boot.c | 42 ++++++++++++++++++++++++++++++++++++++++++ hw/arm/virt.c | 8 +++++--- 2 files changed, 47 insertions(+), 3 deletions(-) diff --git a/hw/arm/boot.c b/hw/arm/boot.c index d391cd01bb1..1e57c4ab9ee 100644 --- a/hw/arm/boot.c +++ b/hw/arm/boot.c @@ -25,6 +25,7 @@ #include "hw/boards.h" #include "system/reset.h" #include "hw/loader.h" +#include "hw/mem/memory-device.h" #include "elf.h" #include "system/device_tree.h" #include "qemu/config-file.h" @@ -515,6 +516,29 @@ static void fdt_add_psci_node(void *fdt, ARMCPU *armcp= u) qemu_fdt_setprop_cell(fdt, "/psci", "migrate", migrate_fn); } =20 +static int fdt_add_pmem_node(void *fdt, uint32_t acells, uint32_t scells, + int64_t mem_base, int64_t size, int64_t node) +{ + int ret; + + g_autofree char *nodename =3D g_strdup_printf("/pmem@%" PRIx64, mem_ba= se); + + qemu_fdt_add_subnode(fdt, nodename); + qemu_fdt_setprop_string(fdt, nodename, "compatible", "pmem-region"); + ret =3D qemu_fdt_setprop_sized_cells(fdt, nodename, "reg", acells, + mem_base, scells, size); + if (ret) { + return ret; + } + + if (node >=3D 0) { + return qemu_fdt_setprop_cell(fdt, nodename, "numa-node-id", + node); + } + + return 0; +} + int arm_load_dtb(hwaddr addr, const struct arm_boot_info *binfo, hwaddr addr_limit, AddressSpace *as, MachineState *ms, ARMCPU *cpu) @@ -525,6 +549,7 @@ int arm_load_dtb(hwaddr addr, const struct arm_boot_inf= o *binfo, unsigned int i; hwaddr mem_base, mem_len; char **node_path; + g_autofree MemoryDeviceInfoList *md_list =3D NULL; Error *err =3D NULL; =20 if (binfo->dtb_filename) { @@ -628,6 +653,23 @@ int arm_load_dtb(hwaddr addr, const struct arm_boot_in= fo *binfo, } } =20 + md_list =3D qmp_memory_device_list(); + for (MemoryDeviceInfoList *m =3D md_list; m !=3D NULL; m =3D m->next) { + MemoryDeviceInfo *mi =3D m->value; + + if (mi->type =3D=3D MEMORY_DEVICE_INFO_KIND_NVDIMM) { + PCDIMMDeviceInfo *di =3D mi->u.nvdimm.data; + + rc =3D fdt_add_pmem_node(fdt, acells, scells, + di->addr, di->size, di->node); + if (rc < 0) { + fprintf(stderr, "couldn't add NVDIMM /pmem@%"PRIx64" node\= n", + di->addr); + goto fail; + } + } + } + rc =3D fdt_path_offset(fdt, "/chosen"); if (rc < 0) { qemu_fdt_add_subnode(fdt, "/chosen"); diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 9326cfc895f..1e63f40fbec 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -2917,7 +2917,7 @@ static void virt_memory_pre_plug(HotplugHandler *hotp= lug_dev, DeviceState *dev, const MachineState *ms =3D MACHINE(hotplug_dev); const bool is_nvdimm =3D object_dynamic_cast(OBJECT(dev), TYPE_NVDIMM); =20 - if (!vms->acpi_dev) { + if (!vms->acpi_dev && !(is_nvdimm && !dev->hotplugged)) { error_setg(errp, "memory hotplug is not enabled: missing acpi-ged device= "); return; @@ -2949,8 +2949,10 @@ static void virt_memory_plug(HotplugHandler *hotplug= _dev, nvdimm_plug(ms->nvdimms_state); } =20 - hotplug_handler_plug(HOTPLUG_HANDLER(vms->acpi_dev), - dev, &error_abort); + if (vms->acpi_dev) { + hotplug_handler_plug(HOTPLUG_HANDLER(vms->acpi_dev), + dev, &error_abort); + } } =20 static void virt_machine_device_pre_plug_cb(HotplugHandler *hotplug_dev, --=20 2.43.0