From nobody Sat Apr 11 18:38:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1775167116; cv=none; d=zohomail.com; s=zohoarc; b=kX43RJzSZmVmGBVcowCjM/5goggHlbCtFiMVfKy84pFQNtQ4ujhLJtwQ+tR8UJIaqoyCVieRDBAno8H5O1CWLdljQbxnPj76EWqYMQHLBqypUFp/vjwkFH4JgYyIDqFMsI3uT2M6qRmkMdzbszE2uG68D69OUE3KRfTMP94jh7U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775167116; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=osWMhevUw1N3AseQErboNOG5dweWBMW0zK7zEVOFBV8=; b=ZpyHvAf6Pki6c8r4Fl/b00nnXbKW5csXmkFx4Vr/NKUgRBmZotZhh/Iz8D0ubZJgZglFvvd0nLiWE7d+H29jitea8rqPGxJHJqhRi6WTd+lhQT/OVnL7MIZjLnpcQ9Ik2RNeW6Ecx6uB26MUacWqtvOswE0IfjuB2MpAZmA56aw= 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 1775167116863273.3859605374595; Thu, 2 Apr 2026 14:58:36 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Q1v-0008BH-Sl; Thu, 02 Apr 2026 17:56:47 -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 1w8Q1u-0008AW-9P for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:56:46 -0400 Received: from mail-ej1-x634.google.com ([2a00:1450:4864:20::634]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w8Q1r-000711-PC for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:56:45 -0400 Received: by mail-ej1-x634.google.com with SMTP id a640c23a62f3a-b97f9587e6eso189431166b.3 for ; Thu, 02 Apr 2026 14:56:43 -0700 (PDT) Received: from thinkpad-t470s.. (93-143-182-244.adsl.net.t-com.hr. [93.143.182.244]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b9c3cac0e1asm134009166b.27.2026.04.02.14.56.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 14:56:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775167002; x=1775771802; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=osWMhevUw1N3AseQErboNOG5dweWBMW0zK7zEVOFBV8=; b=YJOr7YX6AYABsdsfH6OwSk8CA7jZH+blEhoGQ/n50u9qmVan71BwhXhkd7kd6ojk9F VnxIwbrLDL4SCTFf3USdyBAAhZ7WhuOfyk3QkW+egZWLIA72cMc4RYWIRbzCq/2SD6bn 1OHtqrgSa4NjQU5xQXQLCUnbxyClYA5K3tTbKpdk9XOI00AndoknbdKez+RWpFGCxfZj f4faqv4ODucChpwWRHseYHDzD9p/gKAY0XgE3Q+JdBZ4fZf5HIMpR8S30Yr1RQWXqRRR 51eOLDSMxD99y9djGCg7/bh9T2X/OcXgRyhyuJjtke06ppjkAUUy4JllDz3FI4C7dnm7 u8Bw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775167002; x=1775771802; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=osWMhevUw1N3AseQErboNOG5dweWBMW0zK7zEVOFBV8=; b=BvWKDruslvrAemUWK4PhyJQ0usojgxyFbCnTT5RqGqyUHvK5S4qA1FU0/6p1WR+Sfc fpPn/+vWIzGZQC90h05wJydxJsoEYdqFG5KPMvXFfAn4reZ/LM8weQ4SpwjkT2qo2Qc9 BFTVgyJRa+adYNNlGzoFIKFXkuXeca8/wjATJSETqCKM9/ps7ICBpnSmfO0+DfX6o8DR CXg78eOxUm5IrIQgnqE+YT7PmWncNBUGTU6HRkg7BZRRa8auay3lkGdsu4xY3WoXnvyF +pKEil8whQMnZ8NFhbfnJD93B6rwRvc7TlZ0/Z6CIRc2ir+9CXQgVTqnKHqz477KAvfW M0XQ== X-Gm-Message-State: AOJu0YyXI1vDhPeCDj9Lc3fY3huiKeQ0sfRkah5gaGZ+gXhoLrZwiiWH 3U16/8MYjZMzAWSf90yt95GW2c4sjAIzyNPIbiCgDPOJgsN4zdxkw/rmLu2YiA72 X-Gm-Gg: ATEYQzzTBMN+DBlwsfdPqv965NL/0zFAYA8c9pOdTLbjnLJWZa/8vSZPvQBLL5o8rHb gOE3WdmRsVhK6EwjVWI1GQFAGzL8jyT9N9r+0qWk/x0yk+D9PQfc9pfwBUlH655pSj6jNWIdpvn aeBgFKczZ3n2kld1CEpUDtx0mxZCgl/wuwavm67AUZ9o4qg2QulWS2ZE+HV5cOSA1eOlOVjXsel X+kmkvbIO1bKZapBh3gA5dgPK61bDL3w4c2L0qobf3iIPUGTXlPj4mEYHhpI91brdLgiOek3DX+ ql2oWI0ep9ltyTjvfCXwb8MRMCgwBUxOT+gF+JExWHm3ayXJYcyZaMkB87l4HpQyz2G28/pRCMw B7XaTvZrw9ti4m77JDEGIuGAOMLyF0Br1xWO9YmxFPvCBPgDr72kC0hpCJJKHegnpx73CBcAxu1 /4a0uFFvT1qXE/9r7Hxc0qwGsYEX8KmmJoA3PeTtLLOsZV+bHWnop2G3ijv53m8YrT8JfGEA== X-Received: by 2002:a17:907:1903:b0:b95:894b:46e4 with SMTP id a640c23a62f3a-b9c679adcccmr27187566b.34.1775167001790; Thu, 02 Apr 2026 14:56:41 -0700 (PDT) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, alex.bennee@linaro.org, peter.maydell@linaro.org, artem_mygaiev@epam.com, volodymyr_babchuk@epam.com, takahiro.nakata.wr@renesas.com, "Edgar E . Iglesias" , Ruslan_Ruslichenko@epam.com, balaton@eik.bme.hu, Alistair Francis , David Gibson Subject: [PATCH v3 01/33] system/device_tree: update qemu_fdt_getprop_cell Date: Thu, 2 Apr 2026 23:55:46 +0200 Message-ID: <20260402215629.745866-2-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260402215629.745866-1-ruslichenko.r@gmail.com> References: <20260402215629.745866-1-ruslichenko.r@gmail.com> 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::634; envelope-from=ruslichenko.r@gmail.com; helo=mail-ej1-x634.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, FREEMAIL_FROM=0.001, 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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775167117234158501 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko Update 'qemu_fdt_getprop_cell' to allow accessing specific cells within multi-cell property array. This will be used by hardware device tree parsing logic. Signed-off-by: Ruslan Ruslichenko --- hw/arm/boot.c | 8 ++++---- hw/arm/raspi4b.c | 8 ++++---- hw/arm/vexpress.c | 4 ++-- include/system/device_tree.h | 5 ++--- system/device_tree.c | 18 ++++++++---------- 5 files changed, 20 insertions(+), 23 deletions(-) diff --git a/hw/arm/boot.c b/hw/arm/boot.c index c97d4c4e11..36fefd06d5 100644 --- a/hw/arm/boot.c +++ b/hw/arm/boot.c @@ -509,10 +509,10 @@ int arm_load_dtb(hwaddr addr, const struct arm_boot_i= nfo *binfo, return 0; } =20 - acells =3D qemu_fdt_getprop_cell(fdt, "/", "#address-cells", - NULL, &error_fatal); - scells =3D qemu_fdt_getprop_cell(fdt, "/", "#size-cells", - NULL, &error_fatal); + acells =3D qemu_fdt_getprop_cell(fdt, "/", "#address-cells", 0, + &error_fatal); + scells =3D qemu_fdt_getprop_cell(fdt, "/", "#size-cells", 0, + &error_fatal); if (acells =3D=3D 0 || scells =3D=3D 0) { fprintf(stderr, "dtb file invalid (#address-cells or #size-cells 0= )\n"); goto fail; diff --git a/hw/arm/raspi4b.c b/hw/arm/raspi4b.c index 3eeb8f447e..58ddd103b7 100644 --- a/hw/arm/raspi4b.c +++ b/hw/arm/raspi4b.c @@ -42,10 +42,10 @@ static void raspi_add_memory_node(void *fdt, hwaddr mem= _base, hwaddr mem_len) uint32_t acells, scells; char *nodename =3D g_strdup_printf("/memory@%" PRIx64, mem_base); =20 - acells =3D qemu_fdt_getprop_cell(fdt, "/", "#address-cells", - NULL, &error_fatal); - scells =3D qemu_fdt_getprop_cell(fdt, "/", "#size-cells", - NULL, &error_fatal); + acells =3D qemu_fdt_getprop_cell(fdt, "/", "#address-cells", 0, + &error_fatal); + scells =3D qemu_fdt_getprop_cell(fdt, "/", "#size-cells", 0, + &error_fatal); /* validated by arm_load_dtb */ g_assert(acells && scells); =20 diff --git a/hw/arm/vexpress.c b/hw/arm/vexpress.c index cc6ae7d4c4..23d2d7deff 100644 --- a/hw/arm/vexpress.c +++ b/hw/arm/vexpress.c @@ -486,9 +486,9 @@ static void vexpress_modify_dtb(const struct arm_boot_i= nfo *info, void *fdt) const VEDBoardInfo *daughterboard =3D (const VEDBoardInfo *)info; =20 acells =3D qemu_fdt_getprop_cell(fdt, "/", "#address-cells", - NULL, &error_fatal); + 0, &error_fatal); scells =3D qemu_fdt_getprop_cell(fdt, "/", "#size-cells", - NULL, &error_fatal); + 0, &error_fatal); intc =3D find_int_controller(fdt); if (!intc) { /* Not fatal, we just won't provide virtio. This will diff --git a/include/system/device_tree.h b/include/system/device_tree.h index 49d8482ed4..5667ff9538 100644 --- a/include/system/device_tree.h +++ b/include/system/device_tree.h @@ -108,14 +108,13 @@ const void *qemu_fdt_getprop(void *fdt, const char *n= ode_path, * @fdt: pointer to the device tree blob * @node_path: node path * @property: name of the property to find - * @lenp: fdt error if any or -EINVAL if the property size is different fr= om - * 4 bytes, or 4 (expected length of the property) upon success. + * @cell_id: the index of 32bit cell to retrive * @errp: handle to an error object * * returns the property value on success */ uint32_t qemu_fdt_getprop_cell(void *fdt, const char *node_path, - const char *property, int *lenp, + const char *property, int cell_id, Error **errp); uint32_t qemu_fdt_get_phandle(void *fdt, const char *path); uint32_t qemu_fdt_alloc_phandle(void *fdt); diff --git a/system/device_tree.c b/system/device_tree.c index 1ea1962984..d2db7bd355 100644 --- a/system/device_tree.c +++ b/system/device_tree.c @@ -446,24 +446,22 @@ const void *qemu_fdt_getprop(void *fdt, const char *n= ode_path, } =20 uint32_t qemu_fdt_getprop_cell(void *fdt, const char *node_path, - const char *property, int *lenp, Error **er= rp) + const char *property, int cell_id, Error **= errp) { int len; const uint32_t *p; =20 - if (!lenp) { - lenp =3D &len; - } - p =3D qemu_fdt_getprop(fdt, node_path, property, lenp, errp); + p =3D qemu_fdt_getprop(fdt, node_path, property, &len, errp); if (!p) { return 0; - } else if (*lenp !=3D 4) { - error_setg(errp, "%s: %s/%s not 4 bytes long (not a cell?)", - __func__, node_path, property); - *lenp =3D -EINVAL; + } + if (len < (cell_id + 1) * 4) { + error_setg(errp, + "%s: %s/%s is too short, need %d bytes for cell ind %d", + __func__, node_path, property, (cell_id + 1) * 4, cell_id); return 0; } - return be32_to_cpu(*p); + return be32_to_cpu(p[cell_id]); } =20 uint32_t qemu_fdt_get_phandle(void *fdt, const char *path) --=20 2.43.0 From nobody Sat Apr 11 18:38:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1775167036; cv=none; d=zohomail.com; s=zohoarc; b=fV3tBYjS4A9Vj/RJKlk9pJVi+rkhIMs3xZpqH53kF843E937ALx5tdXNr71lBpnfXmG4vMQ8Agd1dHv7zwEjS7pBLpRE4E4gZW91pqbuM7CM7QH1wlKuNWw7Ke4TI8JNk59otKZEZTRNZw+piPiTaC6xXCtPBcuo/Oc0eOOFUMo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775167036; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=6OVtHyJEH609H+Jxo+bwaMnaWIVxFgChTmg6HBwKfPs=; b=RBQCqyFGBpdbTgCXYcDVYSofs6pBEMTrixuSr6pWMojYHn7Vbo4X3EY+6YZtY/NCKw4fIWQd3VS1ZaOEbTuGvMU8YRdBXdHYxXcBK5lZyFevgTmTvasNDOOzcjxc9XhCK80p7N0oQ3MKiEnABxBwkshKCU+2c6BDI71hhnhXNFU= 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 1775167036208325.75197305142876; Thu, 2 Apr 2026 14:57:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Q1z-0008Cq-ID; Thu, 02 Apr 2026 17:56:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w8Q1v-0008B4-92 for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:56:47 -0400 Received: from mail-ej1-x62e.google.com ([2a00:1450:4864:20::62e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w8Q1t-00071P-FC for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:56:47 -0400 Received: by mail-ej1-x62e.google.com with SMTP id a640c23a62f3a-b982d56dac4so233976066b.3 for ; Thu, 02 Apr 2026 14:56:45 -0700 (PDT) Received: from thinkpad-t470s.. (93-143-182-244.adsl.net.t-com.hr. [93.143.182.244]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b9c3cac0e1asm134009166b.27.2026.04.02.14.56.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 14:56:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775167003; x=1775771803; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=6OVtHyJEH609H+Jxo+bwaMnaWIVxFgChTmg6HBwKfPs=; b=JQdd2sq2KDVobuGb44+qUyrnZ8lMucOG8B3KLC6ehb+kYRxI6moG7cLEKH3Zxm+Fy5 vdUKM3WxM0mttywtGrO6kTdfIjcwi4QZ8RRPE9pC/0lesK3uVun+ja6wGLiUROQgP9o7 /uBvproqiMRzmSd1Fn9VtHI42tWj5/bjUDo2RJgRpVV0846xb2sMSsG4HKIarvYZwwzc 4It4PeYbxJe0XS3wqsDBGpNK0wIeV9KKdUvGRYi1iLhCTWXA/ytnyWgkEfK8sxANfvWQ Oy236NhjV+aczWQnJZKqBARm0ZDKOM8qE+/JeVaROgh1q1N4ALHXdj0MlKesfrdiiHQG 55jg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775167003; x=1775771803; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=6OVtHyJEH609H+Jxo+bwaMnaWIVxFgChTmg6HBwKfPs=; b=AgnxDPM4vK5NPWjn80nLVCFZXzvV4O7Cp6wPzE5vEA32CcTJXak/nQ5wxyepfx6yGF ltM2PggfvfvkUvB1g8QoeSK+xkYAvio/G6hsk8hI6UJQCxOaxGHVjIy8LBbaqNITC3Cj ccqdUiCktHW/aE/Ii4pwWc+dOsZHh9gF1btfp36wPewXKZNomZaJB/nBG9srRgqxEVdt lWMKDVrVm8DQEeJ9iY2ZrECLVHUp9b9kFA/33KwDYicpbfYcIpNSvTjlGml4AQYzLnW4 ZHDyfHNR868PhmlJjKCABECihijIEgll0oHODVEuP3+o/V69rKVq02l/ukMH43R8DCOL 02Xw== X-Gm-Message-State: AOJu0YxMUnalUfdBeySZeh5/064Y5ch9oPZV5cJxINc4BJjEncT09oyQ x7DJnm67/1YH72hBOqWbc3Cddbnt/sqgyHqFTZ7bf7B/MESlk/MEDUpUAyqrwt8o X-Gm-Gg: ATEYQzyHYNZK/9Y0LBp5AcBWMT9ksq+JEnxCkHllvGlm6/HHs/e+4niOijybhRYlFWZ jd2L/Kdm6wKYwTyfbDSraMpRZyMi1Oao3tb1SSz6stMt9690xvybPYBKLBu1yC1mtIWBnJ1pTwY hKC1MCzebsdSAm6Z6ZFw6lIQ+IM8IE3lwIZznCouYJLhSG+HbShrzTXWdfYoAN2pHwLQuuD5NXC UTvf+LnJs1OYBvARkXAsMixkGXNu/QKNyZrZYa/MzIsFMDo5wGUslIzyo8Hsk8cNIUm64I+bKjV i47LCJE+/1UcAVLa8vTdC8M703jlg+l6zS6wURmiA9lGBYHdgM0Tiphl6TseBQGHJqZQjRaXOFy ZR2t9Zk3mhQ9r3ZhHxrcR3CgZzeKa2m68dOevlJIwQAwEnCcT401LQisltC+Yb+3kHebygXAQDu xyYSd4LR4kwOaxHU5SK+WmgWpaLAqBbEvrneAqElfqHeWr6/UDbR5FEokOg4Yw15gwVggw8w== X-Received: by 2002:a17:907:26c1:b0:b9c:55e8:fba1 with SMTP id a640c23a62f3a-b9c679ba5b3mr24713166b.26.1775167003515; Thu, 02 Apr 2026 14:56:43 -0700 (PDT) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, alex.bennee@linaro.org, peter.maydell@linaro.org, artem_mygaiev@epam.com, volodymyr_babchuk@epam.com, takahiro.nakata.wr@renesas.com, "Edgar E . Iglesias" , Ruslan_Ruslichenko@epam.com, balaton@eik.bme.hu, Alistair Francis , David Gibson Subject: [PATCH v3 02/33] system/device_tree: add few parsing and traversal helpers Date: Thu, 2 Apr 2026 23:55:47 +0200 Message-ID: <20260402215629.745866-3-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260402215629.745866-1-ruslichenko.r@gmail.com> References: <20260402215629.745866-1-ruslichenko.r@gmail.com> 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::62e; envelope-from=ruslichenko.r@gmail.com; helo=mail-ej1-x62e.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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775167039902154100 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko The patch adds few utility functions for parsing FDT nodes. The helpers are required for upcoming Hardware device tree feature. Signed-off-by: Ruslan Ruslichenko --- include/system/device_tree.h | 22 ++++ system/device_tree.c | 194 +++++++++++++++++++++++++++++++++++ 2 files changed, 216 insertions(+) diff --git a/include/system/device_tree.h b/include/system/device_tree.h index 5667ff9538..bc378d38d0 100644 --- a/include/system/device_tree.h +++ b/include/system/device_tree.h @@ -116,6 +116,11 @@ const void *qemu_fdt_getprop(void *fdt, const char *no= de_path, uint32_t qemu_fdt_getprop_cell(void *fdt, const char *node_path, const char *property, int cell_id, Error **errp); + +const void *qemu_fdt_getprop_inherited(void *fdt, const char *node_path, + const char *property, int *lenp, Error **errp= ); +uint32_t qemu_fdt_getprop_cell_inherited(void *fdt, const char *node_path, + const char *property, int cell_id, Error **= errp); uint32_t qemu_fdt_get_phandle(void *fdt, const char *path); uint32_t qemu_fdt_alloc_phandle(void *fdt); int qemu_fdt_nop_node(void *fdt, const char *node_path); @@ -191,6 +196,23 @@ int qemu_fdt_setprop_sized_cells_from_array(void *fdt, qdt_tmp); \ }) =20 +/* node queries */ + +int qemu_devtree_get_num_children(void *fdt, const char *node_path); +int qemu_devtree_get_children(void *fdt, const char *node_path, + int max_paths, char **returned_paths); +int qemu_devtree_num_props(void *fdt, const char *node_path); + +/* node getters */ + +int qemu_devtree_get_node_by_phandle(void *fdt, char *node_path, int phand= le); +char *qemu_devtree_getparent(void *fdt, const char *current); + +/* misc */ + +int devtree_get_num_nodes(void *fdt); + +#define DT_PATH_LENGTH 1024 =20 /** * qemu_fdt_randomize_seeds: diff --git a/system/device_tree.c b/system/device_tree.c index d2db7bd355..1a70223712 100644 --- a/system/device_tree.c +++ b/system/device_tree.c @@ -464,6 +464,96 @@ uint32_t qemu_fdt_getprop_cell(void *fdt, const char *= node_path, return be32_to_cpu(p[cell_id]); } =20 +const void *qemu_fdt_getprop_inherited(void *fdt, const char *node_path, + const char *property, int *lenp, Error **errp) +{ + const void *found_val =3D NULL; + int found_len =3D 0; + int curr_offset =3D 0; + int temp_len; + char **tokens; + char **iter; + + found_val =3D fdt_getprop(fdt, 0, property, &found_len); + + tokens =3D g_strsplit(node_path + 1, "/", -1); + + for (iter =3D tokens; *iter !=3D NULL; iter++) { + if (**iter =3D=3D '\0') { + continue; + } + + curr_offset =3D fdt_subnode_offset(fdt, curr_offset, *iter); + if (curr_offset < 0) { + error_setg(errp, "%s: Path '%s' not found", + __func__, *iter); + g_strfreev(tokens); + return NULL; + } + + const void *val =3D fdt_getprop(fdt, curr_offset, property, &temp_= len); + if (val) { + found_val =3D val; + found_len =3D temp_len; + } + } + g_strfreev(tokens); + + if (!found_val) { + error_setg(errp, "%s: Property '%s' not found", + __func__, property); + return NULL; + } + + if (lenp) { + *lenp =3D found_len; + } + + return found_val; +} + +uint32_t qemu_fdt_getprop_cell_inherited(void *fdt, const char *node_path, + const char *property, int cell_id, Error **= errp) +{ + int len; + const uint32_t *p; + + p =3D qemu_fdt_getprop_inherited(fdt, node_path, property, &len, errp); + if (!p) { + return 0; + } + if (len < (cell_id + 1) * 4) { + error_setg(errp, + "%s: %s/%s is too short, need %d bytes for cell ind %d", + __func__, node_path, property, (cell_id + 1) * 4, cell_= id); + return 0; + } + return be32_to_cpu(p[cell_id]); +} + +char *qemu_devtree_getparent(void *fdt, const char *current) +{ + const char *sep; + int len; + + if (!current || !strcmp(current, "/")) { + return NULL; + } + + sep =3D strrchr(current, '/'); + if (!sep) { + return NULL; + } + + if (sep =3D=3D current) { + len =3D 1; + } else { + len =3D sep - current; + } + + return g_strndup(current, len); +} + uint32_t qemu_fdt_get_phandle(void *fdt, const char *path) { uint32_t r; @@ -631,6 +721,110 @@ out: return ret; } =20 +int qemu_devtree_num_props(void *fdt, const char *node_path) +{ + int offset =3D fdt_path_offset(fdt, node_path); + int ret =3D 0; + + for (offset =3D fdt_first_property_offset(fdt, offset); + offset !=3D -FDT_ERR_NOTFOUND; + offset =3D fdt_next_property_offset(fdt, offset)) { + ret++; + } + return ret; +} + +int qemu_devtree_get_children(void *fdt, const char *node_path, + int max_paths, char **returned_paths) +{ + int count =3D 0; + int subnode; + const char *name; + int offset =3D fdt_path_offset(fdt, node_path); + + if (offset < 0) { + return offset; + } + + bool is_root =3D (strcmp(node_path, "/") =3D=3D 0); + + fdt_for_each_subnode(subnode, fdt, offset) { + if (count >=3D max_paths) { + break; + } + name =3D fdt_get_name(fdt, subnode, NULL); + if (returned_paths) { + returned_paths[count] =3D g_strdup_printf("%s/%s", + is_root ? "" : node_path, = name); + } + + ++count; + } + + return count; +} + +int qemu_devtree_get_num_children(void *fdt, const char *node_path) +{ + int count =3D 0; + int subnode; + int offset =3D fdt_path_offset(fdt, node_path); + + if (offset < 0) { + return offset; + } + + fdt_for_each_subnode(subnode, fdt, offset) { + ++count; + } + + return count; +} + +int qemu_devtree_get_node_by_phandle(void *fdt, char *node_path, int phand= le) +{ + int offset =3D 0, cur_depth =3D 0; + int path_lens[64] =3D { 0 }; + + for (offset =3D 0; offset >=3D 0; offset =3D fdt_next_node(fdt, offset, + &cur_depth)) { + if (cur_depth >=3D 64) { + break; + } + const char *name =3D fdt_get_name(fdt, offset, NULL); + + int parent_len =3D (cur_depth > 0) ? path_lens[cur_depth - 1] : 0; + int len =3D snprintf(node_path + parent_len, + DT_PATH_LENGTH - parent_len, + "%s%s", + (parent_len > 1) ? "/" : "", + (cur_depth =3D=3D 0) ? "/" : name); + + path_lens[cur_depth] =3D parent_len + len; + + if (fdt_get_phandle(fdt, offset) =3D=3D phandle) { + return 0; + } + } + + return -FDT_ERR_NOTFOUND; +} + +int devtree_get_num_nodes(void *fdt) +{ + int num_nodes =3D 0; + int depth =3D 0, offset =3D 0; + + for (;;) { + offset =3D fdt_next_node(fdt, offset, &depth); + num_nodes++; + if (offset <=3D 0 || depth <=3D 0) { + break; + } + } + return num_nodes; +} + void qmp_dumpdtb(const char *filename, Error **errp) { ERRP_GUARD(); --=20 2.43.0 From nobody Sat Apr 11 18:38:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1775167090; cv=none; d=zohomail.com; s=zohoarc; b=Gk5bazvD8L/VDKjOBtzhNexWnEFUa8795N/rLOfNmRQJ3/EzqG7XS/wKG/svLieMJ0RCZa37seFbKgSmZKHZl5LEctS1ZbJwkCJJpL4KUB/S7ag0tGhf0fFycUyBL8XvtsehliXOXK+z+mmGLpN/sWZq2GSAMSX6/neEcSnUmyk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775167090; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=YsiOCFpX98FF4Vw1kJYQcgkoeQF3bMwWWwwrSBOoVn4=; b=i3jYhGZgN0ki7szXgMZhM/eyVkq+LHHFIddubLc31Y+zfoxtdO/MKOl55lFvckT6uXb4lncEDDRARjPtpTSpSnGOfvmSRjqDM1HdPKNHUFwDJFNs/oY8p8Go7BipRuqSeR2zz3Z0jJTnzxyopmP5pHIeW07qCtdUSs1BtwrGPJQ= 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 1775167090129444.70716357823324; Thu, 2 Apr 2026 14:58:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Q20-0008Dc-3H; Thu, 02 Apr 2026 17:56:52 -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 1w8Q1x-0008Cc-P6 for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:56:49 -0400 Received: from mail-ed1-x52d.google.com ([2a00:1450:4864:20::52d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w8Q1w-00072V-DX for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:56:49 -0400 Received: by mail-ed1-x52d.google.com with SMTP id 4fb4d7f45d1cf-65c4152313fso1837829a12.1 for ; Thu, 02 Apr 2026 14:56:47 -0700 (PDT) Received: from thinkpad-t470s.. (93-143-182-244.adsl.net.t-com.hr. [93.143.182.244]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b9c3cac0e1asm134009166b.27.2026.04.02.14.56.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 14:56:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775167006; x=1775771806; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=YsiOCFpX98FF4Vw1kJYQcgkoeQF3bMwWWwwrSBOoVn4=; b=a78sGn8ICd4izn/gMjCWTWiixvCKW2YHcdi1R5IvzyQGA03p5HJJOL3hsalwmRLfaA 2RSEeJAGi/GDd/esgI/1FvQqqGGPyJbZJHQpZlegigI/BIn/k1MzH9B/Ela/21vUXUts fX5Zo8wcMxduf+UJTU2FCezw3eSfJsu6NENyZzxzr7jGe6X1D78/fO2H3cvH2VqlcmG5 +xvTaspeArqD975/eZrP7A4KgytV2docIp8gIDpVV8C2f47796lx7xGeQRkk+JAWy1TK QwGt0CkzQmwC4w8wEc/6IneoUYet6ablHiB/9yugPIH1ppx0hLzqkcgRAsy3kUS9SrPP 8etQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775167006; x=1775771806; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=YsiOCFpX98FF4Vw1kJYQcgkoeQF3bMwWWwwrSBOoVn4=; b=mEYnVlpH00rwNvzjDRl2Xlj/7nFqBFLD6fBeKe29+rSKgOoCRA9HJGWoDKx9R2cuZY efhHe3bYtxjxbZ+V5O9T1+ZTnlmH12gMcaLzoZU6AMEg/wyvZ/4ouvAMlUrgjnhN2D7U ENUNar7bccgs2iy8WHIy3dvs2oYeIh2DZKj4+KxSknWgxUWTPQroYY82kFLCh787zzT/ 5anJ0IdMA8MZ1I7by5pZlDqVtxmN7N5LbYTIOqmMykD8n5FV3G3LQZnDSrbsLj6ZEoH+ Eoz8GIMy0WPXQv4uKNgQLsqEKgFNMa5CLyOBBOOK5VPmDzfVWiRvUfIAoUvvWLhSar/y 12SA== X-Gm-Message-State: AOJu0YxOl4v/uHdmwwzcOowVJ7nG70dKgWINddwF4zOxRxi1w6Ta09wp Rx2I77OIzdGeo8OOKEjMknBXMxGJV7bFDkYoO6yTNriQw6nLNnXnb1BVB73/6u+h X-Gm-Gg: AeBDietcGvwKm4QzofMAx7yFal/e8ccwhcJpw57jQAZrWd0Zudy/uSIGvY/z/EbBSxi l8R7PocTCdAoKmxGr6vsAUkI3XPeKZw0DmrdoAiuOoxoe3X+LPi976bcWG7AGyOu38zYUGlkxhP fHzNFccb2pCXX2X5y0+wncql8YdX4vJYWU7rqiF0/y7KTaBJAMzovXe+WeMnLhJIYksR57Me9fj yDfSGgq/7i0fT9Jx2MQ2BreMxvhXswbfcf7YOzGybRBbnlw+VL6Cx3SA76duy5xOK4Cg3RNKfHC SSf5IQwnQUUQifgTHBzsqOXPY/Q+/ZwhALCTda3dA4HmGZtZbCRLzyE4YLK8+VZN+JaWduwdJyr bvHYDO5YuA5F8P9N8ZEYtoZA4HvjmHSopSBSj45w09nBBJ5rbJ2BYzlQv/Fqd5xSrCrNtM608Fc HhlCDa4j1Wl+I+b/zExv170EeFIdAtHb5wmQbYlZFjbND8ZkDRkqKZLLJvdJW/MSsoITq9gw== X-Received: by 2002:a17:906:9fd0:b0:b97:34e7:ea87 with SMTP id a640c23a62f3a-b9c67454a03mr25355866b.19.1775167005540; Thu, 02 Apr 2026 14:56:45 -0700 (PDT) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, alex.bennee@linaro.org, peter.maydell@linaro.org, artem_mygaiev@epam.com, volodymyr_babchuk@epam.com, takahiro.nakata.wr@renesas.com, "Edgar E . Iglesias" , Ruslan_Ruslichenko@epam.com, balaton@eik.bme.hu, Stefan Hajnoczi , Manos Pitsidianakis , Paolo Bonzini , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Zhao Liu , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v3 03/33] util/log: add log entry for fdt generic utils Date: Thu, 2 Apr 2026 23:55:48 +0200 Message-ID: <20260402215629.745866-4-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260402215629.745866-1-ruslichenko.r@gmail.com> References: <20260402215629.745866-1-ruslichenko.r@gmail.com> 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::52d; envelope-from=ruslichenko.r@gmail.com; helo=mail-ed1-x52d.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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775167090973158500 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko Introduce dedicated log mask for hardware device tree processing, to selectively enable diagnostic for FDT-based machine creation. Signed-off-by: Ruslan Ruslichenko --- include/qemu/log.h | 1 + util/log.c | 1 + 2 files changed, 2 insertions(+) diff --git a/include/qemu/log.h b/include/qemu/log.h index 92956e5d0f..8d48ee332a 100644 --- a/include/qemu/log.h +++ b/include/qemu/log.h @@ -38,6 +38,7 @@ bool qemu_log_separate(void); #define CPU_LOG_TB_VPU (1u << 21) #define LOG_TB_OP_PLUGIN (1u << 22) #define LOG_INVALID_MEM (1u << 23) +#define LOG_FDT (1u << 24) =20 /* Lock/unlock output. */ =20 diff --git a/util/log.c b/util/log.c index 7cffbc1bf8..d88a47394b 100644 --- a/util/log.c +++ b/util/log.c @@ -531,6 +531,7 @@ const QEMULogItem qemu_log_items[] =3D { "include VPU registers in the 'cpu' logging" }, { LOG_INVALID_MEM, "invalid_mem", "log invalid memory accesses" }, + { LOG_FDT, "fdt", "log Device Tree info." }, { 0, NULL, NULL }, }; =20 --=20 2.43.0 From nobody Sat Apr 11 18:38:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1775167338; cv=none; d=zohomail.com; s=zohoarc; b=lJ46UVafKoG7Hrug1sDoON4iXylVS84kKq0Ak07NuaMKCq9oYx0UiHmKc1+oAIY4+7GsV/fJ35x76AfNoTESi6bLeMcmkpZvD+wuY6AifClpZ52EzKhbRJUNTdxLkkq1OJ+WFbapUObr/s/G8jGnjIbjyNimNCLK/uHI13QvMOI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775167338; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=COppB07ZdgBSIiLPYIXUKRW1DDBdEAcH3Z/PWDGJeWs=; b=eqi0L1fUUTtAjHKzZVoD5HgxvwCZKE2adN1nxJnXBvBSUu3H6UqiJP0wF9uieoQ1biJvHcVfosLDHcRU4+XeceNSpWbhdhglmA+a7tUPH/J4qsedRuLF8jmPKYWlin5P4Tmq5ahezO6m4mU/la1j+fD+s7dVgyCShaUZfSc1xcA= 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 177516733831366.08177422139443; Thu, 2 Apr 2026 15:02:18 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Q21-0008Ez-LF; Thu, 02 Apr 2026 17:56:53 -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 1w8Q1z-0008DB-K1 for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:56:51 -0400 Received: from mail-ed1-x533.google.com ([2a00:1450:4864:20::533]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w8Q1x-00073C-Su for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:56:51 -0400 Received: by mail-ed1-x533.google.com with SMTP id 4fb4d7f45d1cf-66c4c7e2bb7so1821927a12.0 for ; Thu, 02 Apr 2026 14:56:49 -0700 (PDT) Received: from thinkpad-t470s.. (93-143-182-244.adsl.net.t-com.hr. [93.143.182.244]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b9c3cac0e1asm134009166b.27.2026.04.02.14.56.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 14:56:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775167008; x=1775771808; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=COppB07ZdgBSIiLPYIXUKRW1DDBdEAcH3Z/PWDGJeWs=; b=XtDluCNb9W+ZBaPdofNm5Z+FphNrnu5bPHBpEorvBXcekKUACZBdVzwkdKdfKpE6sh 76na9LzQDrDE/kNkiC3NhkcvN3olYrzfk7DicvwCEc0Z7UCfo2QN6niCLv94t1iFcdal s1oGfp6TA+TSRoX82NRYrnJc4qw3f/u985MaWrkXJPbrBPuskwTOCP97XItliGINab2y CYYznW3SJ1dLD+5d3fDlXbniFOg0X9sd0Kd8q3CKg1GP08BImpI+CVfBhsheRpz4U5cW zcpascM64CRx/avuTej5Bg3lweSnRPZ/KuOxL59GO23wxlxDe8Mqbb3NGCGQcekxd3XA h+9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775167008; x=1775771808; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=COppB07ZdgBSIiLPYIXUKRW1DDBdEAcH3Z/PWDGJeWs=; b=W7U/Lu72owjpkJFtXwMEAyisrBeyj+yw/suP2qbY259bE3vL68u2DP8501lM8bH1Eh NDqB1i7AqexRB+aQK2xBqqtuRL6NXXO+U5YR0z0cd6vzmyNgWVVEi3HT4u2UI+QtyjVd d6LfH6Pk2dYQYe8VAaWPqvm9z3C+GriAcWQouyFF+Bp5f2Cy3UhcCSLbYIOAIRVUHn6T qQnQoczRxawX2Va/zGaka1LLFV+XeZjsY4jZQlxrnM/aaeYJ4HXr/Zcb6pwauqN/R/r0 0kzD17EzERSKP6sIbXvvHnW2Ye+nHz3CFNZwiNKETQuiU5WS8npTKVQj/Y4P0SRM+mbo Ksiw== X-Gm-Message-State: AOJu0Yz7JjIghenIS28RCOjKSCBfgzqOJpivYU6vIO3IxoF5tnf01b3R xGW1nEh6no+oU7UnbutKATil3qOvRKso4uuVp0hGtyjnVw9d6zMqWqNpIA62PQi0 X-Gm-Gg: AeBDievfOl35QvDVsFajcUnxSKft+4OtEQRSDIWONpa2Uq1CqcrkmAaPcx3upkHHRNY 0ziDhR+Fw0inI0xeyTKzfDD67q+cuWk1cADHLWtHGQwv0RUmbUhAtvP/h8ezb85JdL3P1OIAeVB gof8NsAZaEw0ansZBS3A9LMqiYFCHifFD/8kG3CP/n0y8tkZ6MIqyai8QlR6nazL5z0Gd1XXS25 qD0Sken49NWnMM6nbcbKQD9+LUxNm+ECpkS4utCDtY/VOnD0PUwRcllBQnN3Sw2slioWhXA4Z+a nZrl5NgXxB0HOC1zryIb61YTWXOoIckuqGwDVu70Oy6y7EEVAzAzELXiYgpYHRuJwRoFJEK81SI bheOzDBhQD8Ta0bhR8OMvJoKi7ohzCZxqpA8GovS2q+mjnps5SmCAhOLGWvXTKkTpRAJEDftGwi yILm2qpSwYpnBKcBigexG+nsl1yxw13uRu3dQ39dZFYE60jY4MmOo22VxVt+FufvpUtv2wvl2hi zVlOTe+ X-Received: by 2002:a17:907:808:b0:b9c:3ba2:2da8 with SMTP id a640c23a62f3a-b9c67b83e0amr24481566b.52.1775167007568; Thu, 02 Apr 2026 14:56:47 -0700 (PDT) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, alex.bennee@linaro.org, peter.maydell@linaro.org, artem_mygaiev@epam.com, volodymyr_babchuk@epam.com, takahiro.nakata.wr@renesas.com, "Edgar E . Iglesias" , Ruslan_Ruslichenko@epam.com, balaton@eik.bme.hu Subject: [PATCH v3 04/33] hw/core: introduce generic FDT device model registry Date: Thu, 2 Apr 2026 23:55:49 +0200 Message-ID: <20260402215629.745866-5-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260402215629.745866-1-ruslichenko.r@gmail.com> References: <20260402215629.745866-1-ruslichenko.r@gmail.com> 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::533; envelope-from=ruslichenko.r@gmail.com; helo=mail-ed1-x533.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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775167340978154100 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko Introduce infrastructure to instantiate device models directly from the device tree. This includes the registry of known device models with associated init functions and key API methods to operate it. The MIT license of fdt_generic.c preserved as in original file from https://github.com/Xilinx/qemu.git repo. The license for fdt_generic.h derived from matching fdt_generic.c file. Signed-off-by: Ruslan Ruslichenko --- hw/core/fdt_generic.c | 110 ++++++++++++++++++++++++++++++++++ include/hw/core/fdt_generic.h | 61 +++++++++++++++++++ 2 files changed, 171 insertions(+) create mode 100644 hw/core/fdt_generic.c create mode 100644 include/hw/core/fdt_generic.h diff --git a/hw/core/fdt_generic.c b/hw/core/fdt_generic.c new file mode 100644 index 0000000000..65e3c1efa3 --- /dev/null +++ b/hw/core/fdt_generic.c @@ -0,0 +1,110 @@ +/* + * SPDX-License-Identifier: MIT + * + * Tables of FDT device models and their init functions. Keyed by compatib= ility + * strings, device instance names. + * + * Copyright (c) 2010 PetaLogix Qld Pty Ltd. + * Copyright (c) 2010 Peter A. G. Crosthwaite . + * + * Permission is hereby granted, free of charge, to any person obtaining a= copy + * of this software and associated documentation files (the "Software"), t= o deal + * in the Software without restriction, including without limitation the r= ights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or se= ll + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included= in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS= OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OT= HER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING= FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS = IN + * THE SOFTWARE. + */ + +#include "qemu/osdep.h" +#include "hw/core/fdt_generic.h" +#include "hw/core/qdev-properties.h" +#include "qemu/log.h" + + +#define FDT_GENERIC_MAX_PATTERN_LEN 1024 + +typedef struct TableListNode { + struct TableListNode *next; + char key[FDT_GENERIC_MAX_PATTERN_LEN]; + FDTInitFn fdt_init; + void *opaque; +} TableListNode; + +/* add a node to the table specified by *head_p */ + +static void add_to_table( + FDTInitFn fdt_init, + const char *key, + void *opaque, + TableListNode **head_p) +{ + TableListNode *nn =3D malloc(sizeof(*nn)); + nn->next =3D *head_p; + strcpy(nn->key, key); + nn->fdt_init =3D fdt_init; + nn->opaque =3D opaque; + *head_p =3D nn; +} + +/* FIXME: add return codes that differentiate between not found and error = */ + +/* + * search a table for a key string and call the fdt init function if found. + * Returns 0 if a match is found, 1 otherwise + */ + +static int fdt_init_search_table( + char *node_path, + FDTMachineInfo *fdti, + const char *key, /* string to match */ + TableListNode **head) /* head of the list to search */ +{ + TableListNode *iter; + + for (iter =3D *head; iter !=3D NULL; iter =3D iter->next) { + if (!strcmp(key, iter->key)) { + if (iter->fdt_init) { + return iter->fdt_init(node_path, fdti, iter->opaque); + } + return 0; + } + } + + return 1; +} + +TableListNode *compat_list_head; + +void add_to_compat_table(FDTInitFn fdt_init, const char *compat, void *opa= que) +{ + add_to_table(fdt_init, compat, opaque, &compat_list_head); +} + +int fdt_init_compat(char *node_path, FDTMachineInfo *fdti, const char *com= pat) +{ + return fdt_init_search_table(node_path, fdti, compat, &compat_list_hea= d); +} + +TableListNode *inst_bind_list_head; + +void add_to_inst_bind_table(FDTInitFn fdt_init, const char *name, void *op= aque) +{ + add_to_table(fdt_init, name, opaque, &inst_bind_list_head); +} + +int fdt_init_inst_bind(char *node_path, FDTMachineInfo *fdti, + const char *name) +{ + return fdt_init_search_table(node_path, fdti, name, &inst_bind_list_he= ad); +} diff --git a/include/hw/core/fdt_generic.h b/include/hw/core/fdt_generic.h new file mode 100644 index 0000000000..3d8ec2f7ff --- /dev/null +++ b/include/hw/core/fdt_generic.h @@ -0,0 +1,61 @@ +/* + * SPDX-License-Identifier: MIT + * + * Tables of FDT device models and their init functions. Keyed by compatib= ility + * strings, device instance names. + */ + +#ifndef FDT_GENERIC_H +#define FDT_GENERIC_H + +#include "qemu/help-texts.h" +#include "system/device_tree.h" + +typedef struct FDTMachineInfo FDTMachineInfo; + +typedef int (*FDTInitFn)(char *, FDTMachineInfo *, void *); + +/* associate a FDTInitFn with a FDT compatibility */ + +void add_to_compat_table(FDTInitFn, const char *, void *); + +/* + * try and find a device model for a particular compatibility. If found, + * the FDTInitFn associated with the compat will be called and 0 will + * be returned. Returns non-zero on not found or error + */ + +int fdt_init_compat(char *, FDTMachineInfo *, const char *); + +/* same as above, but associates with a FDT node name (rather than compat)= */ + +void add_to_inst_bind_table(FDTInitFn, const char *, void *); +int fdt_init_inst_bind(char *, FDTMachineInfo *, const char *); + +/* statically register a FDTInitFn as being associate with a compatibility= */ + +#define fdt_register_compatibility_opaque(function, compat, n, opaque) \ +static void __attribute__((constructor)) \ +function ## n ## _register_imp(void) { \ + add_to_compat_table(function, compat, opaque); \ +} + +#define fdt_register_compatibility_n(function, compat, n) \ +fdt_register_compatibility_opaque(function, compat, n, NULL) + +#define fdt_register_compatibility(function, compat) \ +fdt_register_compatibility_n(function, compat, 0) + +#define fdt_register_instance_opaque(function, inst, n, opaque) \ +static void __attribute__((constructor)) \ +function ## n ## _register_imp(void) { \ + add_to_inst_bind_table(function, inst, opaque); \ +} + +#define fdt_register_instance_n(function, inst, n) \ +fdt_register_instance_opaque(function, inst, n, NULL) + +#define fdt_register_instance(function, inst) \ +fdt_register_instance_n(function, inst, 0) + +#endif /* FDT_GENERIC_H */ --=20 2.43.0 From nobody Sat Apr 11 18:38:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1775167216; cv=none; d=zohomail.com; s=zohoarc; b=JQ+jn6TAi3D0lhYIeKSIflNo3PthQFN38iaxFwDW0+KFGFFwMYonK1PNskDnDi4BrDtA4dQCvIBZMcl5ExN6hL4kR4AJGjEpNKwvkNwq02KVCnBm+wW0LtiAs0Y3fcbsxaWrm3Atp2eOPSmXxAsgg71dPp3Zlm5rdy1dDZKIx08= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775167216; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=etfciyFx/DN7OMzbyp+X0A8fa1no60agscIjAwvrx08=; b=OFaSGucRK/Jo3x40L4EgPrHuAQnqCljqKuPhYejR7rMwfxR3nKlPBKsH1Le1t8u3qpx+b0l5eKBtVwG2WQ08ZzvWY2trTmThTSjIjHkNIDbAoZvfBiEz3EAvKZYaGCNACPXbwEpHM5HWJwyMUPCj7wuoUKFZm+mGTgudR0xsjiY= 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 1775167216774992.3420369804196; Thu, 2 Apr 2026 15:00:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Q23-0008GD-Sp; Thu, 02 Apr 2026 17:56:55 -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 1w8Q21-0008Dq-4l for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:56:53 -0400 Received: from mail-ej1-x634.google.com ([2a00:1450:4864:20::634]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w8Q1z-00073l-H1 for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:56:52 -0400 Received: by mail-ej1-x634.google.com with SMTP id a640c23a62f3a-b9825ba7f9dso419697866b.0 for ; Thu, 02 Apr 2026 14:56:51 -0700 (PDT) Received: from thinkpad-t470s.. (93-143-182-244.adsl.net.t-com.hr. [93.143.182.244]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b9c3cac0e1asm134009166b.27.2026.04.02.14.56.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 14:56:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775167010; x=1775771810; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=etfciyFx/DN7OMzbyp+X0A8fa1no60agscIjAwvrx08=; b=dxx55HgPvEnRDTqUZ5mKfQIKV72sExb/WL+0Vm+x9yAIAA3h7fUciYVESp/zt/rToc hifgj8fjU1DGfaPF7QdeD1PlbqZGFrQ/URuPEhqOdolGyLnXgzXLRM/vpMRhaLLOrtIW +3s1lNpe/ESRmqyzANZQacUl1CSQ1yayJaASMOiggSUScf5xIqi6fJBTnurQbOubaM5O y+WkMvQKdXNzo9R6KRwGWL1go+bxIqRetvFtds6iPdnKNNvfK0mjUwerYQ2KQUI4Q/pJ hcBIxENikIwNT3AuN6mNeP/Mui71fehX5ZybTewnE8a8pyJm2GGDY16nOqFX4Yw2cac9 hiHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775167010; x=1775771810; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=etfciyFx/DN7OMzbyp+X0A8fa1no60agscIjAwvrx08=; b=ib8FXlrZpkgDLBGa4ZUAL+lTqVSL8JkXTFvAFVcOCQh2Lp8SpB5Tney8xTi0QIe/1N RxoKgkeiUA6CRXRpJ1UhM3Qw+JPFSrdFyXAe5mc01AGoztbSSgjcTixH9pkzfzbWa94T GT4uD3lUoB9ook3rGxJ30b6eQvrkjcib5T/UIhU6j9sSPEf5K/BKE8+i+TGYlRFvI+aG bt9ExywsXBGf9qgjlHQ+5MiA9uaOjCs88ltOFTIoBvrQCxqMfBcbNraX6hCoGyUZJOXJ WXGqx6XjssuiI0Zlby1ktLMKbIX4TX/f1Y3EGXizwEbpK4Brl2VgkSfaiv7JjdHMGxBR L0dA== X-Gm-Message-State: AOJu0Yxl1QiHypr2xqDOdwpf8mYVRGjecUnAfxGfLh9R11Stb3VDz1gA xcz3iTxdXIvoQKIQqomZOPuFwdAFXKqLqqtOo23MbpNLsz/qvSTHv2VVcHa/vXOv X-Gm-Gg: AeBDievxTIrBudmIKHGQ05kDnEmNs8NiX6lD5ey9hqoyVQrCFy9tenTL8Ds4UMV2xy2 vLmfBcW4QBXubTFSh1T+CPUJbngZ9hQcVhuXhVbE20iwSrRF7gAG6tqdgYW/4GjBUU6g+SITpjd 2RR+UC1KJyS2j7lQaBtQsCKdpHYKGfLKINRwMrxRiGY3dkUAh9tYrag1hnJ49cUSNKotYGur/ob PiFNoU8an+eXxV7Zzr21mD5HXqFgzYp7c/4JXAtVS2TVQc3fobsjl4trg80UXo51qfz4c+5zNjK wH7y1RTVTVM57JTAT2od2wwTmO8mi27QajmuiiUi9Nxwx3WvPhC8Czxdj+zFu5y2kLuhG7liNoV qyTZiqjfpshBKyORi8g8V0NdgoB6joN7UpIW16/Nnrp3mG8TSY/Ly+FjxdHRYuBpS1lL0hvqSKA 4HCqUKqYP/FWi3dbxuPrUy1AQPGvEdFX7ShGPonZlC9+4LdrE0hn48rVbvBZVaOfCp7oTy+w== X-Received: by 2002:a17:907:a0c9:b0:b97:b88c:386b with SMTP id a640c23a62f3a-b9c4713ebbcmr232362766b.29.1775167009646; Thu, 02 Apr 2026 14:56:49 -0700 (PDT) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, alex.bennee@linaro.org, peter.maydell@linaro.org, artem_mygaiev@epam.com, volodymyr_babchuk@epam.com, takahiro.nakata.wr@renesas.com, "Edgar E . Iglesias" , Ruslan_Ruslichenko@epam.com, balaton@eik.bme.hu Subject: [PATCH v3 05/33] hw/core/fdt_generic: implement FDT machine creation helpers Date: Thu, 2 Apr 2026 23:55:50 +0200 Message-ID: <20260402215629.745866-6-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260402215629.745866-1-ruslichenko.r@gmail.com> References: <20260402215629.745866-1-ruslichenko.r@gmail.com> 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::634; envelope-from=ruslichenko.r@gmail.com; helo=mail-ej1-x634.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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775167217505158500 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko The patch adds infrastructure to parse device tree and associate fdt nodes and created objects. This will be used during instantiating machine from the devices tree. Signed-off-by: Ruslan Ruslichenko --- hw/core/fdt_generic.c | 71 +++++++++++++++++++++++++++++++++++ include/hw/core/fdt_generic.h | 42 ++++++++++++++++++++- 2 files changed, 112 insertions(+), 1 deletion(-) diff --git a/hw/core/fdt_generic.c b/hw/core/fdt_generic.c index 65e3c1efa3..da60de7a26 100644 --- a/hw/core/fdt_generic.c +++ b/hw/core/fdt_generic.c @@ -29,7 +29,10 @@ #include "qemu/osdep.h" #include "hw/core/fdt_generic.h" #include "hw/core/qdev-properties.h" +#include "migration/vmstate.h" +#include "qemu/coroutine.h" #include "qemu/log.h" +#include "system/reset.h" =20 =20 #define FDT_GENERIC_MAX_PATTERN_LEN 1024 @@ -108,3 +111,71 @@ int fdt_init_inst_bind(char *node_path, FDTMachineInfo= *fdti, { return fdt_init_search_table(node_path, fdti, name, &inst_bind_list_he= ad); } + +void fdt_init_yield(FDTMachineInfo *fdti) +{ + static int yield_index; + int this_yield =3D yield_index++; + + qemu_log_mask(LOG_FDT, "Yield #%d\n", this_yield); + qemu_co_queue_wait(fdti->cq, NULL); + qemu_log_mask(LOG_FDT, "Unyield #%d\n", this_yield); +} + +void fdt_init_set_opaque(FDTMachineInfo *fdti, const char *node_path, + void *opaque) +{ + FDTDevOpaque *dp; + for (dp =3D fdti->dev_opaques; + dp->node_path && strcmp(dp->node_path, node_path); + dp++) + ; + if (!dp->node_path) { + dp->node_path =3D strdup(node_path); + } + dp->opaque =3D opaque; +} + +int fdt_init_has_opaque(FDTMachineInfo *fdti, const char *node_path) +{ + FDTDevOpaque *dp; + for (dp =3D fdti->dev_opaques; dp->node_path; dp++) { + if (!strcmp(dp->node_path, node_path)) { + return 1; + } + } + return 0; +} + +void *fdt_init_get_opaque(FDTMachineInfo *fdti, const char *node_path) +{ + FDTDevOpaque *dp; + for (dp =3D fdti->dev_opaques; dp->node_path; dp++) { + if (!strcmp(dp->node_path, node_path)) { + return dp->opaque; + } + } + return NULL; +} + +FDTMachineInfo *fdt_init_new_fdti(void *fdt) +{ + FDTMachineInfo *fdti =3D g_malloc0(sizeof(*fdti)); + fdti->fdt =3D fdt; + fdti->cq =3D g_malloc0(sizeof(*(fdti->cq))); + qemu_co_queue_init(fdti->cq); + fdti->dev_opaques =3D g_malloc0(sizeof(*(fdti->dev_opaques)) * + (devtree_get_num_nodes(fdt) + 1)); + return fdti; +} + +void fdt_init_destroy_fdti(FDTMachineInfo *fdti) +{ + FDTDevOpaque *dp; + + for (dp =3D fdti->dev_opaques; dp->node_path; dp++) { + g_free(dp->node_path); + } + g_free(fdti->dev_opaques); + g_free(fdti); +} diff --git a/include/hw/core/fdt_generic.h b/include/hw/core/fdt_generic.h index 3d8ec2f7ff..d204ceda43 100644 --- a/include/hw/core/fdt_generic.h +++ b/include/hw/core/fdt_generic.h @@ -9,9 +9,33 @@ #define FDT_GENERIC_H =20 #include "qemu/help-texts.h" +#include "hw/core/irq.h" #include "system/device_tree.h" +#include "qemu/coroutine.h" + +typedef struct FDTDevOpaque { + char *node_path; + void *opaque; +} FDTDevOpaque; + +typedef struct FDTMachineInfo { + /* the fdt blob */ + void *fdt; + /* irq descriptors for top level int controller */ + qemu_irq *irq_base; + /* per-device specific opaques */ + FDTDevOpaque *dev_opaques; + /* recheck coroutine queue */ + CoQueue *cq; +} FDTMachineInfo; =20 -typedef struct FDTMachineInfo FDTMachineInfo; +/* + * create a new FDTMachineInfo. The client is responsible for setting irq_= base. + * Client must call fdt_init_destroy_fdti to cleanup + */ + +FDTMachineInfo *fdt_init_new_fdti(void *fdt); +void fdt_init_destroy_fdti(FDTMachineInfo *fdti); =20 typedef int (*FDTInitFn)(char *, FDTMachineInfo *, void *); =20 @@ -32,6 +56,22 @@ int fdt_init_compat(char *, FDTMachineInfo *, const char= *); void add_to_inst_bind_table(FDTInitFn, const char *, void *); int fdt_init_inst_bind(char *, FDTMachineInfo *, const char *); =20 +/* + * Called from FDTInitFn's to inform the framework that a dependency is + * unresolved and the calling context needs to wait for another device to + * instantiate first. The calling thread will suspend until a change in st= ate + * in the argument fdt machine is detected. + */ + +void fdt_init_yield(FDTMachineInfo *); + +/* set, check and get per device opaques. Keyed by fdt node_paths */ + +void fdt_init_set_opaque(FDTMachineInfo *fdti, const char *node_path, + void *opaque); +int fdt_init_has_opaque(FDTMachineInfo *fdti, const char *node_path); +void *fdt_init_get_opaque(FDTMachineInfo *fdti, const char *node_path); + /* statically register a FDTInitFn as being associate with a compatibility= */ =20 #define fdt_register_compatibility_opaque(function, compat, n, opaque) \ --=20 2.43.0 From nobody Sat Apr 11 18:38:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1775167077; cv=none; d=zohomail.com; s=zohoarc; b=SQXUKFhMEMVgWvpxA6wj7x+y0eba8xB6UJi2Uf9gHeepQtlop6SbEGcsGr7PHPVGle68+Xnx0YwcUAwaSRCjbUXLebhGNTJr/MYnvBRw/3+0X4IZ8Ym/pqQ+hCp6rqytN3c5gEyNagAo/0mBwv9prqK71nq+9amKMz28W0inx2k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775167077; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=S9c0Pnh/0o6ZwLnjL42VohEGpoZWx1Y/0tXtC4CKsYA=; b=DxgGLsgpLlFNBFFz0LmqXmiTk8YMqM1KhhVEqIJSJ3721LdLzSFyawQUWnVPaXWEpSLs6vq2QUYMy+VIFKI65bYBFl0PaJbpAA8keRW3aJPJvL1hcj2aPrG6l/O180pwm2xf2QO7bdK1YhQ5bj4ZHraV2YHojoWqG77A8NQNNpY= 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 1775167077362403.9152726558192; Thu, 2 Apr 2026 14:57:57 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Q24-0008Gm-P7; Thu, 02 Apr 2026 17:56:57 -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 1w8Q23-0008G6-Fh for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:56:55 -0400 Received: from mail-ej1-x635.google.com ([2a00:1450:4864:20::635]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w8Q21-00074N-Uq for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:56:55 -0400 Received: by mail-ej1-x635.google.com with SMTP id a640c23a62f3a-b982518b73fso207700166b.1 for ; Thu, 02 Apr 2026 14:56:53 -0700 (PDT) Received: from thinkpad-t470s.. (93-143-182-244.adsl.net.t-com.hr. [93.143.182.244]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b9c3cac0e1asm134009166b.27.2026.04.02.14.56.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 14:56:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775167012; x=1775771812; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=S9c0Pnh/0o6ZwLnjL42VohEGpoZWx1Y/0tXtC4CKsYA=; b=Dz32pvxwQNO3chVdb0X4trFzEVoauhIIPZPfFHhLvY+p+k+9mOIlXDovWe/vk3qW2z Jwlg4CJEnPKq+IQZaAs+YH1lpnnlnUUMy7lxxj6b1Msraad/WB+WFXje+QQKUlSrLFol 3jZ3vFHlAYD1piqB2DNucFJkdIxUGoNKwQ8ofb9lXQVygVHHzNsBrYWDX1R9VYogo4C4 Zm+Xu/mY5bd5Cpxi36Q9qyA4hG7iT864BAgWh3oQewQyrEsRgPR4UqY3b4OTNkfGakFA zHenkWStIggLu7K4N3F5GqwOcb+bt6EqNzdCC5UH4DyCw817A0/BFyFvsbnAgNWgLzIp pX7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775167012; x=1775771812; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=S9c0Pnh/0o6ZwLnjL42VohEGpoZWx1Y/0tXtC4CKsYA=; b=geewbZUW6Y9AojGJcWFde6uvlfzaAxS5GhkWDLkJ+uflMWeZvoC63+m+5C//SufZhQ 6qakOh0Iho3NY3vmUgwLaXyfpGoi6AvS2kVWCoVyhSzryjME88BT/IJVmi3/3a5impjb nlM2ZRyxefUHyRQy3GijQRqxGRr602rBy3rwx3v5AnKXhL6z3p5770Ct0Gvs5kmVdwD1 t8d5k49e1tSRxS2zwn56wJ6Km9bG8R5BtMUPQQ30j5XTvVKNyaWIMj/QdGQeEeJEx455 9Pwdr8bzKakgsSoW8dZ9BXnfUpTRMFoDHYxdZU/uRtbMBnuVsHvZQe0KZvXaEQ9Oe+xP uIDQ== X-Gm-Message-State: AOJu0Yxms37cPclVc1Z+7NB5F3U7HEvmOTKAjBITovB+nPv4cSDYCxdN MPOVgEjSa9T2FG5ucGZzNHZlqmji30sl1dwuxaM6m4znG2ot5jVjzMWwW1tCaLtW X-Gm-Gg: ATEYQzx1VSR1r0t4hzusdFTqzsjX2nYpr6wNpNPIEHs7IhJvRTAdz8ztqiAgpx3uBvv G68xNC4LUFxc3h0fuy3v6PPALNMfivI848pysBtGwaHiilgTgnS5ggEe4fm6xRb6AwOfOIzofBe qJBgv2ieST/ZeCvHs2w0wJwVCtLv+UR7ouK+pH9cVjBXAXCZa5hk0L7LACRxz0ZZhEClPYc9iiy tzOXLVnVDv+5Tf1YB4QPVD85P0S4Mxky4A6TQiYjNykYluY8BNCZ314iVUy4HNJoGTIBPbP3tJK 1cNXSfoAOeVXKG1rXst/9vFVzvEMMucntsGzhS6m6HQF0HFX/+dwjXg/qSRbOM4dzz+A14YLPQo 2/sYsdnRSr4yqKdcI2X6EaZTHRvhN8fYk2yRUYppCY14F3LiyN57N5JYvpLj11X83MOoeNLiT/9 AAGb8VWtYDsEL83XmhGS280ZmBfFssaF+8BHVfBhDAGilGG8kDEjEgPlA5VuGrx5jQaziFLA== X-Received: by 2002:a17:907:3e8a:b0:b99:7462:3c57 with SMTP id a640c23a62f3a-b9c6754ad85mr23744666b.14.1775167011775; Thu, 02 Apr 2026 14:56:51 -0700 (PDT) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, alex.bennee@linaro.org, peter.maydell@linaro.org, artem_mygaiev@epam.com, volodymyr_babchuk@epam.com, takahiro.nakata.wr@renesas.com, "Edgar E . Iglesias" , Ruslan_Ruslichenko@epam.com, balaton@eik.bme.hu Subject: [PATCH v3 06/33] hw/core/fdt_generic: add cpu clusters management Date: Thu, 2 Apr 2026 23:55:51 +0200 Message-ID: <20260402215629.745866-7-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260402215629.745866-1-ruslichenko.r@gmail.com> References: <20260402215629.745866-1-ruslichenko.r@gmail.com> 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::635; envelope-from=ruslichenko.r@gmail.com; helo=mail-ej1-x635.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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775167079141158500 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko Add support for grouping CPUs into clusters during FDT machine instantiation. The clusters are automatically created if CPU parent is not already an existing cluster. Signed-off-by: Ruslan Ruslichenko --- hw/core/fdt_generic.c | 78 +++++++++++++++++++++++++++++++++++ include/hw/core/fdt_generic.h | 13 ++++++ 2 files changed, 91 insertions(+) diff --git a/hw/core/fdt_generic.c b/hw/core/fdt_generic.c index da60de7a26..ded11cd6c0 100644 --- a/hw/core/fdt_generic.c +++ b/hw/core/fdt_generic.c @@ -32,6 +32,7 @@ #include "migration/vmstate.h" #include "qemu/coroutine.h" #include "qemu/log.h" +#include "hw/cpu/cluster.h" #include "system/reset.h" =20 =20 @@ -158,6 +159,76 @@ void *fdt_init_get_opaque(FDTMachineInfo *fdti, const = char *node_path) return NULL; } =20 +static int get_next_cpu_cluster_id(void) +{ + static int i; + + return i++; +} + +void fdt_init_register_user_cpu_cluster(FDTMachineInfo *fdti, Object *clus= ter) +{ + int i =3D get_next_cpu_cluster_id(); + DeviceState *dev =3D DEVICE(cluster); + FDTCPUCluster *cl; + + qdev_prop_set_uint32(dev, "cluster-id", i); + + cl =3D g_new0(FDTCPUCluster, 1); + cl->cpu_cluster =3D cluster; + cl->next =3D fdti->clusters; + cl->user =3D true; + + fdti->clusters =3D cl; + + qemu_log_mask(LOG_FDT, + "%s: Registered user-defined cpu cluster with id %d\n", + object_get_canonical_path(cluster), i); +} + +static void *fdt_init_add_cpu_cluster(FDTMachineInfo *fdti, char *compat) +{ + FDTCPUCluster *cl =3D g_malloc0(sizeof(*cl)); + int i =3D get_next_cpu_cluster_id(); + char *name =3D g_strdup_printf("cluster%d", i); + Object *obj; + + obj =3D object_new(TYPE_CPU_CLUSTER); + object_property_add_child(object_get_root(), name, OBJECT(obj)); + qdev_prop_set_uint32(DEVICE(obj), "cluster-id", i); + + cl->cpu_type =3D g_strdup(compat); + cl->cpu_cluster =3D obj; + cl->next =3D fdti->clusters; + + fdti->clusters =3D cl; + + g_free(name); + + return obj; +} + +void *fdt_init_get_cpu_cluster(FDTMachineInfo *fdti, Object *parent, + char *compat) +{ + FDTCPUCluster *cl =3D fdti->clusters; + + if (object_dynamic_cast(parent, TYPE_CPU_CLUSTER)) { + /* The direct parent of this CPU is a CPU cluster. Use it. */ + return parent; + } + + while (cl) { + if (!cl->user && !strcmp(compat, cl->cpu_type)) { + return cl->cpu_cluster; + } + cl =3D cl->next; + } + + /* No cluster found so create and return a new one */ + return fdt_init_add_cpu_cluster(fdti, compat); +} + FDTMachineInfo *fdt_init_new_fdti(void *fdt) { FDTMachineInfo *fdti =3D g_malloc0(sizeof(*fdti)); @@ -171,8 +242,15 @@ FDTMachineInfo *fdt_init_new_fdti(void *fdt) =20 void fdt_init_destroy_fdti(FDTMachineInfo *fdti) { + FDTCPUCluster *cl =3D fdti->clusters; FDTDevOpaque *dp; =20 + while (cl) { + FDTCPUCluster *tmp =3D cl; + cl =3D cl->next; + g_free(tmp->cpu_type); + g_free(tmp); + } for (dp =3D fdti->dev_opaques; dp->node_path; dp++) { g_free(dp->node_path); } diff --git a/include/hw/core/fdt_generic.h b/include/hw/core/fdt_generic.h index d204ceda43..05ab07e08c 100644 --- a/include/hw/core/fdt_generic.h +++ b/include/hw/core/fdt_generic.h @@ -18,6 +18,13 @@ typedef struct FDTDevOpaque { void *opaque; } FDTDevOpaque; =20 +typedef struct FDTCPUCluster { + char *cpu_type; + void *cpu_cluster; + void *next; + bool user; +} FDTCPUCluster; + typedef struct FDTMachineInfo { /* the fdt blob */ void *fdt; @@ -27,6 +34,8 @@ typedef struct FDTMachineInfo { FDTDevOpaque *dev_opaques; /* recheck coroutine queue */ CoQueue *cq; + /* list of all CPU clusters */ + FDTCPUCluster *clusters; } FDTMachineInfo; =20 /* @@ -72,6 +81,10 @@ void fdt_init_set_opaque(FDTMachineInfo *fdti, const cha= r *node_path, int fdt_init_has_opaque(FDTMachineInfo *fdti, const char *node_path); void *fdt_init_get_opaque(FDTMachineInfo *fdti, const char *node_path); =20 +void *fdt_init_get_cpu_cluster(FDTMachineInfo *fdti, Object *parent, + char *compat); +void fdt_init_register_user_cpu_cluster(FDTMachineInfo *fdti, Object *clus= ter); + /* statically register a FDTInitFn as being associate with a compatibility= */ =20 #define fdt_register_compatibility_opaque(function, compat, n, opaque) \ --=20 2.43.0 From nobody Sat Apr 11 18:38:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1775167130; cv=none; d=zohomail.com; s=zohoarc; b=KAtlOa2m3IWcFy7Ao2W04jih88o3zqHpyimXCr0+Px1i9R8G6cmlw8e9kQP2l/rmCajp9cDV/xn8BrOKN0Jw9FrhIxx4Eqm5SiEpLk3TqxdBvvkWACz9KCu/CmXwjbANkMvrf4NPkLWw2Aquqa6tvyxNSBWCe7HVdY7o3Qvs/sI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775167130; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=s2VB2KnW0z4RzTP8lm44NrAlc23AvjlzFHSTzJSgaMs=; b=kQ9W3T1MfLQ83DYG+CAi7VIJZ1YWXEGoM+kqSGhvUmy7ImJ58G6vNQRTEgVCjqUqxjShZcm9BH8jKmUimocTtpSVX3TQiCEXUpBJxRemPwqvgVsY7wtsqVfaYcznsLtNBy279+iP6YZ6xLmN3TXj8LEo2cb0UXeo2eLNIl10pl4= 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 1775167130598542.3548945495561; Thu, 2 Apr 2026 14:58:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Q28-0008IK-OF; Thu, 02 Apr 2026 17:57:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w8Q26-0008HA-2Y for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:56:58 -0400 Received: from mail-ej1-x636.google.com ([2a00:1450:4864:20::636]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w8Q23-00074q-W7 for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:56:57 -0400 Received: by mail-ej1-x636.google.com with SMTP id a640c23a62f3a-b886fc047d5so215721366b.3 for ; Thu, 02 Apr 2026 14:56:55 -0700 (PDT) Received: from thinkpad-t470s.. (93-143-182-244.adsl.net.t-com.hr. [93.143.182.244]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b9c3cac0e1asm134009166b.27.2026.04.02.14.56.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 14:56:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775167014; x=1775771814; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=s2VB2KnW0z4RzTP8lm44NrAlc23AvjlzFHSTzJSgaMs=; b=dT7VhH+maMdQnEJyyjkivkP8ududpkdHYEzmED5jlxC2kFmCxw1NkCgrRY+CxW4oKU jSaSmMAcpAI4p2LfgWUekO2GRcgLZZJ9RpIVXzj1JJ9uJvccuizUcMxke8ZPT/xLMfSJ vWZ3+SbXTk3eEWfH6IXhfMwqfBRh1LqZAoQfUgEuMHv3yugAH0V+vnVITwpnwatD+4Uj lf25Cx5as6tLI1w00VEYFPLurDL9ACz4FcMdGvEzCmxcHXi7R1Q3wqyawixvOtFXV34g GAHIgknnwlrzKjlFWIyJqugDVPiZs29xJkbaz7yUx5gtzyDd0fGCH7TLaTAltVDuSsmz 9Ygw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775167014; x=1775771814; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=s2VB2KnW0z4RzTP8lm44NrAlc23AvjlzFHSTzJSgaMs=; b=J15QlmkZgjwl08cugVtP1JubC9+DlmjG+6YLA1XTKCgyEDW1pFKmrhgi89dLovQqq8 WVphJ18rglsEycWYqIrUwB6kqw3whn1rPZW90tk1JfQPe+AHFl0H9BTgliLGpdCNhovt whj4ZrqfKCcpqb+I7dIGwB1rkDE4u/sroyZ0zMy6xSKihCQcHYsJkIGMSKPFSdQX2QVK 75VH0YJXiwSu0LKRl+GZIkU3MNTGE24UkgHzmbYNeY9vsnbrHfH9S7mXgNupHqM9glW/ fLUzakNhgmm2mYu/i+BVbv12hmC5NwuqaAl8RTjjo+zsUkCKRI5LQK4iL8SjLUKRUK9k +gbw== X-Gm-Message-State: AOJu0YyFvdaGSg32uDOV7ZmT0RuEJWEAHuGfDb8Y4Dd7n+W3N2fbA41v u57ceWHv6jSFPAO7dt55bjQE1K7fPD5YXClYDQLbX0PSOPSTa7VCrUUFDx3Vkxph X-Gm-Gg: ATEYQzwE7DgJCnMObvyiIw+xgxHLRU+Ch+MUW6QIOzoXFGtuDYM7cwUkq6Oul5nS1/K HH5ryWKDgYCj78lNTfpg6AQpnYCJnaBxu0v6dMKPj6QQCVA/iCr5k3y+gSrtbvQ21+G7NlmEe6G rkmC7MozWFcdwx+mgfDxH2ctecRmXeENEJ54Zfrs91gbTzNJy2bOE5S5YqkhWkbqDd3VQukvV4z lB1K69a31yveBsY18kXEYInle8lA/XSBJorhWMJZWqjwgNhvWvy46y3JGAzdnoIwXFigYHBaRSH O5BV6wuyk/1qmOEm9WM3zPSBKYyVBXowbNzSWWFw4uQcTIgyLkwr64WDJmTbvQcWs936OVli0DB Wi/ZUu8PDjPT3xn/Vj85LTo2n5KkD0WbUfiWLROm+jZXDVq1z9KTyouCjPq9sU7sqOVCGJcjhF/ WOusNlxcsAXJ2nzBUnorCSRwkiZMV+rJ+7KLWoG1fVByb9q8zh2SjwKyWcnCgwCidmpvkW0Q== X-Received: by 2002:a17:906:f581:b0:b9b:1b9e:1e99 with SMTP id a640c23a62f3a-b9c679580b6mr27709066b.34.1775167013952; Thu, 02 Apr 2026 14:56:53 -0700 (PDT) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, alex.bennee@linaro.org, peter.maydell@linaro.org, artem_mygaiev@epam.com, volodymyr_babchuk@epam.com, takahiro.nakata.wr@renesas.com, "Edgar E . Iglesias" , Ruslan_Ruslichenko@epam.com, balaton@eik.bme.hu Subject: [PATCH v3 07/33] hw/core/fdt_generic_util: implement main fdt parse routine Date: Thu, 2 Apr 2026 23:55:52 +0200 Message-ID: <20260402215629.745866-8-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260402215629.745866-1-ruslichenko.r@gmail.com> References: <20260402215629.745866-1-ruslichenko.r@gmail.com> 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::636; envelope-from=ruslichenko.r@gmail.com; helo=mail-ej1-x636.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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775167131176158500 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko Implement main fdt_generic_create_machine() routine. As of now do the following: - parse each node and subnode in device tree - check node has correct compatible or device types - call fdt_init_qdev() which will eventually create device object. The MIT license of fdt_generic_util.c preserved as in original file from https://github.com/Xilinx/qemu.git repo. The license for fdt_generic_util.h derived from matching fdt_generic_util.c file. Signed-off-by: Ruslan Ruslichenko --- hw/core/fdt_generic_util.c | 233 +++++++++++++++++++++++++++++ include/hw/core/fdt_generic_util.h | 19 +++ 2 files changed, 252 insertions(+) create mode 100644 hw/core/fdt_generic_util.c create mode 100644 include/hw/core/fdt_generic_util.h diff --git a/hw/core/fdt_generic_util.c b/hw/core/fdt_generic_util.c new file mode 100644 index 0000000000..2f7a3fc3dd --- /dev/null +++ b/hw/core/fdt_generic_util.c @@ -0,0 +1,233 @@ +/* + * SPDX-License-Identifier: MIT + * + * Utility functions for fdt generic framework + * + * Copyright (c) 2009 Edgar E. Iglesias. + * Copyright (c) 2009 Michal Simek. + * Copyright (c) 2011 PetaLogix Qld Pty Ltd. + * Copyright (c) 2011 Peter A. G. Crosthwaite . + * + * Permission is hereby granted, free of charge, to any person obtaining a= copy + * of this software and associated documentation files (the "Software"), t= o deal + * in the Software without restriction, including without limitation the r= ights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or se= ll + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included= in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS= OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OT= HER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING= FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS = IN + * THE SOFTWARE. + */ + +#include "qemu/osdep.h" +#include "hw/core/fdt_generic_util.h" +#include "system/memory.h" +#include "system/address-spaces.h" +#include "hw/core/sysbus.h" +#include "qapi/error.h" +#include "qemu/error-report.h" +#include "system/system.h" +#include "system/reset.h" +#include "qemu/cutils.h" +#include "qemu/log.h" +#include "qemu/config-file.h" +#include "hw/core/boards.h" +#include "qemu/option.h" + +#define fdt_debug(...) do { \ + qemu_log_mask(LOG_FDT, ": %s: ", __func__); \ + qemu_log_mask(LOG_FDT, ## __VA_ARGS__); \ +} while (0) + +#define fdt_debug_np(...) do { \ + qemu_log_mask(LOG_FDT, "%s", node_path); \ + fdt_debug(__VA_ARGS__); \ +} while (0) + +/* FIXME: wrap direct calls into libfdt */ + +#include +#include + +static int fdt_generic_num_cpus; + +static int simple_bus_fdt_init(const char *bus_node_path, FDTMachineInfo *= fdti); + +FDTMachineInfo *fdt_generic_create_machine(void *fdt, qemu_irq *cpu_irq) +{ + FDTMachineInfo *fdti =3D fdt_init_new_fdti(fdt); + + fdti->irq_base =3D cpu_irq; + + /* parse the device tree */ + memory_region_transaction_begin(); + fdt_init_set_opaque(fdti, "/", NULL); + simple_bus_fdt_init("/", fdti); + while (qemu_co_enter_next(fdti->cq, NULL)) { + ; + } + memory_region_transaction_commit(); + + /* FIXME: Populate these from DTS and create CPU clusters. */ + current_machine->smp.cores =3D fdt_generic_num_cpus; + current_machine->smp.cpus =3D fdt_generic_num_cpus; + current_machine->smp.max_cpus =3D fdt_generic_num_cpus; + + fdt_debug("FDT: Device tree scan complete\n"); + return fdti; +} + +struct FDTInitNodeArgs { + char *node_path; + char *parent_path; + FDTMachineInfo *fdti; +}; + +static int fdt_init_qdev(char *node_path, FDTMachineInfo *fdti, char *comp= at); + +static int check_compat(const char *prefix, const char *compat, + char *node_path, FDTMachineInfo *fdti) +{ + char *compat_prefixed =3D g_strconcat(prefix, compat, NULL); + const int done =3D !fdt_init_compat(node_path, fdti, compat_prefixed); + g_free(compat_prefixed); + return done; +} + +static void fdt_init_node(void *args) +{ + struct FDTInitNodeArgs *a =3D args; + char *node_path =3D a->node_path; + FDTMachineInfo *fdti =3D a->fdti; + g_free(a); + + simple_bus_fdt_init(node_path, fdti); + + const char *prop; + char *all_compats =3D NULL, *node_name; + char *device_type =3D NULL; + int prop_len; + + fdt_debug_np("enter\n"); + + /* try instance binding first */ + node_name =3D strrchr(node_path, '/') + 1; + fdt_debug_np("node with name: %s\n", node_name ? node_name : "(none)"); + if (!node_name) { + fdt_debug("FDT: ERROR: nameless node: %s\n", node_path); + } + if (!fdt_init_inst_bind(node_path, fdti, node_name)) { + fdt_debug_np("instance bind successful\n"); + goto exit; + } + + /* fallback to compatibility binding */ + prop =3D qemu_fdt_getprop(fdti->fdt, node_path, "compatible", + &prop_len, NULL); + all_compats =3D g_memdup2(prop, prop_len); + if (all_compats) { + char *compat =3D all_compats; + char * const end =3D &all_compats[prop_len - 1]; /* points to nul = */ + + while (compat < end) { + if (check_compat("compatible:", compat, node_path, fdti)) { + goto exit; + } + + if (!fdt_init_qdev(node_path, fdti, compat)) { + check_compat("postinit:", compat, node_path, fdti); + goto exit; + } + + /* Scan forward to the end of the current compat. */ + while (compat < end && *compat) { + ++compat; + } + + /* Replace nul with space for the debug printf below. */ + if (compat < end) { + *compat++ =3D ' '; + } + }; + } else { + fdt_debug_np("no compatibility found\n"); + } + + /* + * Try to create the device using device_type property + * Not every device tree node has compatible property, so + * try with device_type. + */ + prop =3D qemu_fdt_getprop(fdti->fdt, node_path, + "device_type", &prop_len, NULL); + device_type =3D g_memdup2(prop, prop_len); + if (device_type) { + if (check_compat("device_type:", device_type, node_path, fdti)) { + goto exit; + } + + if (!fdt_init_qdev(node_path, fdti, device_type)) { + goto exit; + } + } + + if (all_compats) { + fdt_debug_np("FDT: Unsupported peripheral invalidated - " + "compatibilities %s\n", all_compats); + qemu_fdt_setprop_string(fdti->fdt, node_path, "compatible", + "invalidated"); + } +exit: + + fdt_debug_np("exit\n"); + + if (!fdt_init_has_opaque(fdti, node_path)) { + fdt_init_set_opaque(fdti, node_path, NULL); + } + g_free(node_path); + g_free(all_compats); + g_free(device_type); + return; +} + +static int simple_bus_fdt_init(const char *node_path, FDTMachineInfo *fdti) +{ + int i; + char **children; + int num_children =3D qemu_devtree_get_num_children(fdti->fdt, node_pat= h); + + if (num_children <=3D 0) { + return 0; + } + + children =3D g_malloc0(sizeof(*children) * num_children); + + num_children =3D qemu_devtree_get_children(fdti->fdt, node_path, num_c= hildren, + children); + + fdt_debug_np("num child devices: %d\n", num_children); + + for (i =3D 0; i < num_children; i++) { + struct FDTInitNodeArgs *init_args =3D g_malloc0(sizeof(*init_args)= ); + init_args->node_path =3D children[i]; + init_args->fdti =3D fdti; + qemu_coroutine_enter(qemu_coroutine_create(fdt_init_node, init_arg= s)); + } + + g_free(children); + return 0; +} + +static int fdt_init_qdev(char *node_path, FDTMachineInfo *fdti, char *comp= at) +{ + return 0; +} + diff --git a/include/hw/core/fdt_generic_util.h b/include/hw/core/fdt_gener= ic_util.h new file mode 100644 index 0000000000..71bedb6631 --- /dev/null +++ b/include/hw/core/fdt_generic_util.h @@ -0,0 +1,19 @@ +/* SPDX-License-Identifier: MIT */ + +#ifndef FDT_GENERIC_UTIL_H +#define FDT_GENERIC_UTIL_H + +#include "qemu/help-texts.h" +#include "fdt_generic.h" +#include "system/memory.h" +#include "qom/object.h" + +/* + * create a fdt_generic machine. the top level cpu irqs are required for + * systems instantiating interrupt devices. The client is responsible for + * destroying the returned FDTMachineInfo (using fdt_init_destroy_fdti) + */ + +FDTMachineInfo *fdt_generic_create_machine(void *fdt, qemu_irq *cpu_irq); + +#endif /* FDT_GENERIC_UTIL_H */ --=20 2.43.0 From nobody Sat Apr 11 18:38:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1775167296; cv=none; d=zohomail.com; s=zohoarc; b=j8GEuJCMeFzRLimFb8wJYw7IrKS1AKKZIx4UmulLoSxu1dclt7RYouqpn2p6+ra0fwqewpLa685qtsFE/393tRDyNT7KlpsDbddJUGOEVqAvjY8aCgn8hfRhOvHJSZOaULlQyixPeW9h67+06uQVyecV1RlRGryTArucE7ARHds= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775167296; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=IY/Psqmc5gYs7mEXOklu9W6iJGvX3f2xns3E+/gt5OY=; b=MrMGr9VnBPujD2V3wJsqBGcFO+4iC7kwpgowKGPAbJRpvPEjz5wlyZidyHtZ+wjlXvQbrWN0SnGC/2/u8By9xIMPKqcULI9QzrEKvSDf4/ZxQJhk8iUrKwm/XjduLMoLhiBekun5OInrj9wZLEui7HT6DgtUjzk2eY0yIVvvMrc= 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 1775167296696610.8872165602745; Thu, 2 Apr 2026 15:01:36 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Q2A-0008Io-E2; Thu, 02 Apr 2026 17:57:02 -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 1w8Q27-0008Hq-Ju for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:56:59 -0400 Received: from mail-ed1-x532.google.com ([2a00:1450:4864:20::532]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w8Q25-00075L-W9 for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:56:59 -0400 Received: by mail-ed1-x532.google.com with SMTP id 4fb4d7f45d1cf-66c05fb27e4so2504490a12.2 for ; Thu, 02 Apr 2026 14:56:57 -0700 (PDT) Received: from thinkpad-t470s.. (93-143-182-244.adsl.net.t-com.hr. [93.143.182.244]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b9c3cac0e1asm134009166b.27.2026.04.02.14.56.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 14:56:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775167016; x=1775771816; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=IY/Psqmc5gYs7mEXOklu9W6iJGvX3f2xns3E+/gt5OY=; b=tJWvlBfgwmrT/6bF9jRxdYwlDOGWKMehNzg7cdihLz0+5X++8cXHU3qKZJ39w0v7kT 6euxrvug/z2vP2v+gD5HXd3CEAovlwlT5z7CwicY7AxjWNKzSLYFSK+qIbymO4/7lGEx HSuekU1ZfqamjAHirI7qgKlmQQTEMbR4zHlZgOWBbeScy0ztG4VvYYm19Nx1d2T6r9xt oqHdnKG86+TyVbkwkVHsfBt2i1w4wAxMPsiMn70N6oAkjYMCtxUqkXT8Kcz+xwQhYEKi 4EVyT/GqX2QHCUYIuHik1SVIbX5wJU3tl08cYYLb/4iUNjtt7MHNFPYkgH10jPVh8DPe 7ZIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775167016; x=1775771816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=IY/Psqmc5gYs7mEXOklu9W6iJGvX3f2xns3E+/gt5OY=; b=Yl9IPqFbhuZ3PAH3ldaMIzIyXVklUEbOax+D22c7BKgwdFa2IE7vKR1/SYCiPu7KRn B4VzOC8Ju8QpVfjuJwBpg0TFsbiqT0PE7uXDUXBa1qbFcSd4qnNnPjyOqOsIpvMuyb+x hiQBKcCN58uQc5geZ925VhaNuj359ZDEdisfXtV6dc527bEZry18Zisn8n/qv/+pibJp NBqNC8swipRt7URHvdxXBgRdc5+qd5mcKmQ7aItR2uw5uL1bTf0VnYJSbFw+WEeJS5WJ vgiyynF9FI2sIhXXbOUWp3r+T69WYRGzEQ1aMG1LFYJl9ueKovxTfJtfKE3WDpnxq1Tj Mmjg== X-Gm-Message-State: AOJu0YyFNSqTwbvHQWWZGKZHr4BMfDugHlI9wfDwJ3ODNE6E2DVAutAT ZiQJ1Bu5dwHx3vpnvupz5ZtzU5xI7vgOmduw19v/tBWP/tT3T/xi88J8ZPdcuhRn X-Gm-Gg: ATEYQzyHjgPBzkApRWzwxBmjNmwBnWRGg+xBjj5QcxlTNjpdDUnXz9bJrKT9HPW0zZ+ jaFPVt6rzR+jIfCnkAG9hfoAopHdaZhjkTGwb2SYb+vHmuBz+uqQmotBgpGlGtPW4JKSe+xy/HV 1mXGj4jU7vUEBzxSPi2vwk+YdPE9Dh2R/Ye9+IwMo/3H368tEzhaSuAgmTCzZdbZsRlOo9o8xy4 sszULJe/FxsW2kwqEysc55jPXTmf/i4AuxGXfGpd+a+zSeVabbdhtKC+K4ySnYjJ2eqDMdy7Itb SQ5ysNpuNxrlWvRMaFg0cxDwtWoPLal8gEHd9ChC75DETJ71Eel0YxqCzuRt99BInAjpTmqIz79 OotTZAw/cz9xa8GdsFWDEAiqXGpllKx0oKxBPGfuxREA+vwHcKPm2NT2b1VvtO+rNGwKzJcaF3O EzCv42l2gb0z1Nv1Pz/BRJ4/d8yEAd9vBakf9bz8aIfzS0VcfSWayT4kyhVXqZCJWmSjI9esBl+ Uk3uTwY X-Received: by 2002:a17:906:bf49:b0:b98:3b5d:e147 with SMTP id a640c23a62f3a-b9c67446620mr30557666b.3.1775167015877; Thu, 02 Apr 2026 14:56:55 -0700 (PDT) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, alex.bennee@linaro.org, peter.maydell@linaro.org, artem_mygaiev@epam.com, volodymyr_babchuk@epam.com, takahiro.nakata.wr@renesas.com, "Edgar E . Iglesias" , Ruslan_Ruslichenko@epam.com, balaton@eik.bme.hu Subject: [PATCH v3 08/33] hw/core/fdt_generic_util: implement fdt_init_qdev Date: Thu, 2 Apr 2026 23:55:53 +0200 Message-ID: <20260402215629.745866-9-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260402215629.745866-1-ruslichenko.r@gmail.com> References: <20260402215629.745866-1-ruslichenko.r@gmail.com> 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::532; envelope-from=ruslichenko.r@gmail.com; helo=mail-ed1-x532.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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775167298676158501 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko Implement main routine to create device object from compat. The following steps implemented: - parse node compatible and device types - try to create object from compat - set correct parent based on device tree. Signed-off-by: Ruslan Ruslichenko --- hw/core/fdt_generic_util.c | 120 +++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) diff --git a/hw/core/fdt_generic_util.c b/hw/core/fdt_generic_util.c index 2f7a3fc3dd..565f577238 100644 --- a/hw/core/fdt_generic_util.c +++ b/hw/core/fdt_generic_util.c @@ -41,6 +41,7 @@ #include "qemu/config-file.h" #include "hw/core/boards.h" #include "qemu/option.h" +#include "hw/cpu/cluster.h" =20 #define fdt_debug(...) do { \ qemu_log_mask(LOG_FDT, ": %s: ", __func__); \ @@ -226,8 +227,127 @@ static int simple_bus_fdt_init(const char *node_path,= FDTMachineInfo *fdti) return 0; } =20 +static inline const char *trim_vendor(const char *s) +{ + /* FIXME: be more intelligent */ + const char *ret =3D memchr(s, ',', strlen(s)); + return ret ? ret + 1 : s; +} + +static Object *fdt_create_from_compat(const char *compat) +{ + Object *ret =3D NULL; + + /* Try to create the object */ + ret =3D object_new(compat); + if (!ret) { + const char *no_vendor =3D trim_vendor(compat); + + if (no_vendor !=3D compat) { + return fdt_create_from_compat(no_vendor); + } + } + return ret; +} + +static void fdt_init_parent_node(Object *dev, Object *parent, char *node_p= ath) +{ + if (dev->parent) { + fdt_debug_np("Node already parented - skipping node\n"); + } else if (parent) { + fdt_debug_np("parenting node\n"); + object_property_add_child(OBJECT(parent), + strdup(strrchr(node_path, '/') + 1), + OBJECT(dev)); + if (object_dynamic_cast(dev, TYPE_DEVICE)) { + Object *parent_bus =3D parent; + unsigned int depth =3D 0; + + fdt_debug_np("bus parenting node\n"); + /* Look for an FDT ancestor that is a Bus. */ + while (parent_bus && !object_dynamic_cast(parent_bus, TYPE_BUS= )) { + /* + * Assert against insanely deep hierarchies which are an + * indication of loops. + */ + assert(depth < 4096); + + parent_bus =3D parent_bus->parent; + depth++; + } + + if (!parent_bus + && object_dynamic_cast(OBJECT(dev), TYPE_SYS_BUS_DEVICE)) { + /* + * Didn't find any bus. Use the default sysbus one. + * This allows ad-hoc busses belonging to sysbus devices t= o be + * visible to -device bus=3Dx. + */ + parent_bus =3D OBJECT(sysbus_get_default()); + } + + if (parent_bus) { + qdev_set_parent_bus(DEVICE(dev), BUS(parent_bus), + &error_abort); + } + } + } else { + fdt_debug_np("orphaning node\n"); + if (object_dynamic_cast(OBJECT(dev), TYPE_SYS_BUS_DEVICE)) { + qdev_set_parent_bus(DEVICE(dev), BUS(sysbus_get_default()), + &error_abort); + } + + /* FIXME: Make this go away (centrally) */ + object_property_add_child( + object_get_root(), + strrchr(node_path, '/') + 1, + OBJECT(dev)); + } +} + static int fdt_init_qdev(char *node_path, FDTMachineInfo *fdti, char *comp= at) { + Object *dev, *parent; + char *parent_node_path; + + if (!compat) { + return 1; + } + dev =3D fdt_create_from_compat(compat); + if (!dev) { + fdt_debug_np("no match found for %s\n", compat); + return 1; + } + fdt_debug_np("matched compat %s\n", compat); + + /* Do this super early so fdt_generic_num_cpus is correct ASAP */ + if (object_dynamic_cast(dev, TYPE_CPU)) { + fdt_generic_num_cpus++; + fdt_debug_np("is a CPU - total so far %d\n", fdt_generic_num_cpus); + } + + parent_node_path =3D qemu_devtree_getparent(fdti->fdt, node_path); + if (!parent_node_path) { + abort(); + } + while (!fdt_init_has_opaque(fdti, parent_node_path) && + !object_dynamic_cast(dev, TYPE_CPU)) { + fdt_init_yield(fdti); + } + + parent =3D fdt_init_get_opaque(fdti, parent_node_path); + + if (object_dynamic_cast(dev, TYPE_CPU)) { + parent =3D fdt_init_get_cpu_cluster(fdti, parent, compat); + } + + fdt_init_parent_node(dev, parent, node_path); + + fdt_init_set_opaque(fdti, node_path, dev); + + g_free(parent_node_path); + return 0; } =20 --=20 2.43.0 From nobody Sat Apr 11 18:38:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1775167189; cv=none; d=zohomail.com; s=zohoarc; b=K8u5cokT5VbKTiBHTzMsNHKNy+1y//hKjtVKFjdaPoN88NOz+DGXe823zlVJr4N4vdHB4WaqbFkgV4fFLCwjNOKQQQVEGCCW86KKcPmbXAA5kuUpIIWtEU6asvUoWO8t2DPovSl0l9VT7Z91CfnSIV236GAa7rhQgZXwoyEgz7U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775167189; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=QX6XlP9jfOn4IIWrQN3XN3SqDJFysVZcAsWU0gp3e3g=; b=LK0F9hc3dx6w/DjSGBg9PUaMo9rw2JSLRqnmPHaXTQMnofRyg8Fb9vu3OGDYwUNiuTD3C7n/KiiUb/NsXHU8G8HudIMl+8G6EAVxkC7aCSEKwsfCteuYMzy3vMw7LUf7oOzISGU6e1gQlKcPXQJpAHKrvjhycTnmG/qVtsTxanQ= 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 1775167189431893.9725363868015; Thu, 2 Apr 2026 14:59:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Q2B-0008Jk-Hu; Thu, 02 Apr 2026 17:57:03 -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 1w8Q28-0008IL-O3 for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:00 -0400 Received: from mail-ej1-x635.google.com ([2a00:1450:4864:20::635]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w8Q27-00075p-C9 for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:00 -0400 Received: by mail-ej1-x635.google.com with SMTP id a640c23a62f3a-b941762394aso180963366b.1 for ; Thu, 02 Apr 2026 14:56:58 -0700 (PDT) Received: from thinkpad-t470s.. (93-143-182-244.adsl.net.t-com.hr. [93.143.182.244]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b9c3cac0e1asm134009166b.27.2026.04.02.14.56.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 14:56:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775167018; x=1775771818; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=QX6XlP9jfOn4IIWrQN3XN3SqDJFysVZcAsWU0gp3e3g=; b=jn8lYkDEGpQVjb4BhDOQk1BEykjYE0b0IpAv2Eb9GfyckDy+EbYGzFUmMEnhgMj+lf Bk3YfQYKd2k7W/QCsg6IxTAVGXE9fsZp1mNk34iG5F/GNvQcdkzPuH1X+4MpZfF9nJd0 HJGjjTnMq3dfP3Jv8P5Q67he/qQThfjFCJG6KeEi/H+rgEmrc1Nim7Ej5Q0kD0UcsVls Z7UAg3S8ZucjfDY+4e0FcKGg8IzqjlAh/k4l29hfeH6MaM3TkNX2rBTRnX/bbHEBtEuS XkgYQNzQQwCaE/VSZOLOa68XG3k37FqNeI+rK53421MLR1rn8WlOFFWnDQE0ciB+39q0 V/FQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775167018; x=1775771818; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=QX6XlP9jfOn4IIWrQN3XN3SqDJFysVZcAsWU0gp3e3g=; b=m9EQ+x/pnDeIy0F0B47UIk/xFG2S2FWs5W6NWJ8tjBt16fKUV5n4zbK3EmNmJf5xvY iJt2s33KTvS19BMIAPFwKO4hZeal2AuLBxlfM0XBgISAhVfKPd4LiWcxsi7zxk3x/egx VNVsOsJY1jwxqjpPZEMKK9bUcasA6ZsQpjuTYKEVTfndBoRAkKakAUiMQKiyhnLvEbjD BMnpxTflkKoDeKgoXEicrAgMmEt4fY9ttOg3ZpWfF57g3FKadfullVqD19c4dDEfSDCU z6NOeA9/qKVXCk0g1y85HL/0EcO3WjvSbCx7eUVMsKDaCYS1NGj0lfShfH6EHG1QTIdy Caxg== X-Gm-Message-State: AOJu0YxPbHd+8TOlxlciRZ96/NC71cCkX9CCi7PFqVP3QUM/vgbJkzXl 5A/N53Jsp6f3J2t11Qbbihzq4ItQK+rdXEJoY8eGFUNB84PU3XReJyLh6cfl7bxz X-Gm-Gg: ATEYQzzfvmrv4A6SX8LFjaZ6nXlfZ+ZEtUmsAAeI8F/xkG33k28RCrQW6kR3GJpjAr1 alIqNQ26gdlBTbGjUgRzEtgKuMqF4v7gAchjUggozDWCLi0oJfCpbAVTDMV3xhtDIQXOxOph9b4 n55B0GrYEHlOsfHeUh2U6xH1RnluAINx03n8Bi4b1V1D3/80f3YxPEUaPSvvgsXnxjLLvc2Ujrd l0tiVZ0x/C28Rn0mmi43fRKdROTXdTLzkaVi0ePntGgu4c/Y4svHjBBeaU4QHHKhjcqIWVGSjJg O4z1y+LVbekiAX5Znw1+/GmDed2zu7b4HegvtmpX8JwVln3k0rr4x3TOWeHM62UuOHzx/nMTDjJ tGKBixPTEi49TwNUBuNJX33WLlCrlCyBp55V2CnUpHZ/xVLDGHHWAovUcVGOmqs73vKpt5DQc2x CiNh39+YDfzf4Jgj7TM8M2M39WMYS/j1iYZFc9pR8cQFBxjMliamIyzvJYjDKMN+6F0ncwzQ== X-Received: by 2002:a17:907:989:b0:b9b:fa57:d5ab with SMTP id a640c23a62f3a-b9c679de26bmr24941666b.43.1775167017509; Thu, 02 Apr 2026 14:56:57 -0700 (PDT) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, alex.bennee@linaro.org, peter.maydell@linaro.org, artem_mygaiev@epam.com, volodymyr_babchuk@epam.com, takahiro.nakata.wr@renesas.com, "Edgar E . Iglesias" , Ruslan_Ruslichenko@epam.com, balaton@eik.bme.hu, Paolo Bonzini , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Subject: [PATCH v3 09/33] qdev: Add qdev_prop_get_array_elem_type() helper Date: Thu, 2 Apr 2026 23:55:54 +0200 Message-ID: <20260402215629.745866-10-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260402215629.745866-1-ruslichenko.r@gmail.com> References: <20260402215629.745866-1-ruslichenko.r@gmail.com> 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::635; envelope-from=ruslichenko.r@gmail.com; helo=mail-ej1-x635.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, FREEMAIL_FROM=0.001, 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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775167191365158501 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko Add a helper function to retrieve the element type of a qdev array property. This is required to initialize objects from a HW device tree, as neither device tree properties nor object's property array reveal underlying property type. Signed-off-by: Ruslan Ruslichenko --- hw/core/qdev-properties.c | 12 ++++++++++++ include/hw/core/qdev-properties.h | 1 + 2 files changed, 13 insertions(+) diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c index ba8461e9a4..f92ccc35d8 100644 --- a/hw/core/qdev-properties.c +++ b/hw/core/qdev-properties.c @@ -950,6 +950,18 @@ void qdev_prop_set_array(DeviceState *dev, const char = *name, QList *values) qobject_unref(values); } =20 +const char *qdev_prop_get_array_elem_type(DeviceState *dev, const char *na= me) +{ + const Property *prop; + + prop =3D qdev_prop_find(dev, name); + if (!prop || prop->info !=3D &qdev_prop_array) { + return NULL; + } + + return prop->arrayinfo->type; +} + static GPtrArray *global_props(void) { static GPtrArray *gp; diff --git a/include/hw/core/qdev-properties.h b/include/hw/core/qdev-prope= rties.h index d8745d4c65..19fed85248 100644 --- a/include/hw/core/qdev-properties.h +++ b/include/hw/core/qdev-properties.h @@ -218,6 +218,7 @@ void qdev_prop_set_enum(DeviceState *dev, const char *n= ame, int value); =20 /* Takes ownership of @values */ void qdev_prop_set_array(DeviceState *dev, const char *name, QList *values= ); +const char *qdev_prop_get_array_elem_type(DeviceState *dev, const char *na= me); =20 void *object_field_prop_ptr(Object *obj, const Property *prop); =20 --=20 2.43.0 From nobody Sat Apr 11 18:38:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1775167310; cv=none; d=zohomail.com; s=zohoarc; b=OlLx5R/YEnzf2/wSpS4HR6LbQSwk00RYvkJnN9QEDfhTRhUXBjgUY6w5N2fVNN8ogiodls+PiJy16fvP/8Mr45echeattmoleL+AB7tZD13FuwKs1N6/g52pCz32xaYNImHW36I9q44Ys3MMbqkdagCkpXWO+Ta8wSZ944RleFE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775167310; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=4XtZvlcq7y9dCibk7QnCziTNJJ4JB6d6R3IFkPvUGo4=; b=MJaHA1ABmFHm/TNa6uF0QFWL1HGEDa7mM/MyPa/Nrviza9rhULk8CeIgvhYYPzBa7FvAA+l8MaIqORCxryr9VTJXcVw3PcWIu8RPMcWs04lJ3Z+UxqjmqFQonqrxSoaFfnOSq3P1CEKF5l0W0HMxLSVwrQ578Hq158XNMq6JJ8o= 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 1775167310699486.1442520822643; Thu, 2 Apr 2026 15:01:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Q2C-0008KK-Kf; Thu, 02 Apr 2026 17:57:05 -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 1w8Q2A-0008JE-Hb for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:02 -0400 Received: from mail-ej1-x62c.google.com ([2a00:1450:4864:20::62c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w8Q29-00076S-2I for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:02 -0400 Received: by mail-ej1-x62c.google.com with SMTP id a640c23a62f3a-b93698bb57aso282214466b.0 for ; Thu, 02 Apr 2026 14:57:00 -0700 (PDT) Received: from thinkpad-t470s.. (93-143-182-244.adsl.net.t-com.hr. [93.143.182.244]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b9c3cac0e1asm134009166b.27.2026.04.02.14.56.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 14:56:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775167019; x=1775771819; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=4XtZvlcq7y9dCibk7QnCziTNJJ4JB6d6R3IFkPvUGo4=; b=NuNwwD3a+iWe6LJPdo8wKTlKLC4oFZjDpC0OGtTGcauGiOv8RWDzFR/rmpUy0OeiYl cI0896e2x+0YjveNcukYU1EpDy0Cze3tjLJDk5vWSZtoMLt+RrxzupAj/sKA5Mq027SH OVwvlJrj7ciKGf3cop8VUZoTzkQX3hymfdtGtyn2XnruvXksYGPbEm1qikBUKsWA17k/ 0Wy3k2rjwV3e/gl5UfAZnuIrcWmibufre/sQJ2plzbs60ocVEUoysrsSbSYqf/OjO5Y3 UcxeovJaY9/qV4XamgfI3WTsqG6C1hobiFWs42q5kSBMD2zGryxTZ8HXEX79POwPcXdf ynIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775167019; x=1775771819; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=4XtZvlcq7y9dCibk7QnCziTNJJ4JB6d6R3IFkPvUGo4=; b=FFyx64Q4gqAdmmfay+NH5tnf9kg4GUBr1UGVtPMVasGUhguP1M/Dlow/UKFZN53Agw +ZWAgDI0QukvERwSdqLnrPhgOgzHhxfgYGK1omkshsKo0pCs0NlLszVvTqvnr+OIJWS9 /uv8MewVCY5UBRheJQzaLHXDgMr7q7Z5cEoqCTn2YsHtgYi2sGynul3Ss/LhRlyeLhv4 38AsaWziAJ27HcuDnahGaRKyI0hCfSQEZgs72ggRTyrSUJPHFPP2EjbwxYh3T7jFC0xf 8Xz5fdOEvEI72TsPiKyIjciaaSP3eA4PZ5XDIIiZaJl0fYiu22Gq4bYGCut9C6Xb55Fa 7KzA== X-Gm-Message-State: AOJu0YzkjrG2UQ4qO7CksYqwV8h3ew23cOvKGyLlzWaFiVWKzo1Uf74A PZlIyqrYVPVw7S6JzR2/HN8TBkPqrlNjlrNJ0MepsrXPtrb//irDBpeRyqIvQmuO X-Gm-Gg: ATEYQzyW6Tb8op78uNkQQcUKDHpd1KpEMCYEqsSUGN56J6WLCf9gN19ROF89hTS5Utn 5RK24AFNjt/8KB0wj42Qbm1g0r7E6xTOwaolqlioA8OABs+I46dr/TlGVTCjERTLPqX4VG8/X7o WL/h3y+epcM2iVEc6fhjZb++tWXfHOiqJjwzE+vlyfztDZ8QOyiduiAMHDYFdX2+P8KYBY1xk2u B+G008pGvSBEaMz8tfM5cU2oG6JMiPt5sNgg9+nmVmEOe6MqtE+2djG1/DuY75TMaB6ko2sNKVa krnr4XNpoaNybgNdawcVWANNhzH2pIYuWGLKDu88UGDMtqKMxllOc+qPrTx9KY5OSUgE22P/AnS FlwP8u9QiJFBOekreiY7SrwH7mJFZ8ajkhn1Y9u1kwWgMPLZmG7Vwzysdq3p/MH9FiI6/6jhi0B nf+vgqsjTMYxamk0dndUnuKUSv1x8wngkkym8pLmTomgwdSfsjS7dFx2vYgtC6XeqYtAdwxX7aF xkTLRrN X-Received: by 2002:a17:906:f5a0:b0:b97:6d1b:4be8 with SMTP id a640c23a62f3a-b9c46e2677fmr199715066b.10.1775167019041; Thu, 02 Apr 2026 14:56:59 -0700 (PDT) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, alex.bennee@linaro.org, peter.maydell@linaro.org, artem_mygaiev@epam.com, volodymyr_babchuk@epam.com, takahiro.nakata.wr@renesas.com, "Edgar E . Iglesias" , Ruslan_Ruslichenko@epam.com, balaton@eik.bme.hu, Paolo Bonzini , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Subject: [PATCH v3 10/33] qom/object: export object_resolve_link() Date: Thu, 2 Apr 2026 23:55:55 +0200 Message-ID: <20260402215629.745866-11-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260402215629.745866-1-ruslichenko.r@gmail.com> References: <20260402215629.745866-1-ruslichenko.r@gmail.com> 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::62c; envelope-from=ruslichenko.r@gmail.com; helo=mail-ej1-x62c.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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775167312391154100 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko Export `object_resovle_link()` for use by other subsystems. This allow callers to resolve object path and verify type contrains of a link property. Signed-off-by: Ruslan Ruslichenko --- include/qom/object.h | 12 ++++++++++++ qom/object.c | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/include/qom/object.h b/include/qom/object.h index 26df6137b9..1573d41d4f 100644 --- a/include/qom/object.h +++ b/include/qom/object.h @@ -2034,6 +2034,18 @@ int object_child_foreach_recursive(Object *obj, */ Object *object_property_add_new_container(Object *obj, const char *name); =20 +/* + * object_resolve_link: + * + * Lookup an object and ensure its type matches the link property type. T= his + * is similar to object_resolve_path() except type verification against the + * link property is performed. + * + * Returns: The matched object or NULL on path lookup failures. + */ +Object *object_resolve_link(Object *obj, const char *name, + const char *path, Error **errp); + /** * object_property_help: * @name: the name of the property diff --git a/qom/object.c b/qom/object.c index ff8ede8a32..7e16765cb4 100644 --- a/qom/object.c +++ b/qom/object.c @@ -1904,7 +1904,7 @@ static void object_get_link_property(Object *obj, Vis= itor *v, * * Returns: The matched object or NULL on path lookup failures. */ -static Object *object_resolve_link(Object *obj, const char *name, +Object *object_resolve_link(Object *obj, const char *name, const char *path, Error **errp) { const char *type; --=20 2.43.0 From nobody Sat Apr 11 18:38:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1775167207; cv=none; d=zohomail.com; s=zohoarc; b=GGrMu8an5Lmu3JgpuywzN/5DBOqM98wpGjFZkzXHzzsEd/HqZn+ndNhNR5rdTRovohGid/bOYap3g0ekbslWU5m0zD/4odtOgO1FQg4P1SsH9dI1Kj5GWwOVT0rN+5k5x5Fhzh6olCpUxUM19cLgZFoUkjT2eaob2VQq05Ei7d8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775167207; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=JvbFky2zZfy6uWbutZgX2420LHSIwSgmweRO7s9n4J0=; b=B2i7r+8L9LDBsO6XDtkgjrW91ysjgMkVgeheJO3Yfd0UdH8Wz3jjEjlpZSe+evRdkCr9RYVDlB4/RoqQp/DBbddSkYQxo2XvV41lMMjQA1X8qXED/jxJSQji61dm9Yuri0QO335E1+yIiELnc+MLNQaHZdATFDL/Ily0o3ylN2Y= 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 1775167207257650.2080512256067; Thu, 2 Apr 2026 15:00:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Q2N-0008MR-2R; Thu, 02 Apr 2026 17:57:15 -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 1w8Q2C-0008KU-TA for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:06 -0400 Received: from mail-ej1-x62a.google.com ([2a00:1450:4864:20::62a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w8Q2A-000775-Tb for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:04 -0400 Received: by mail-ej1-x62a.google.com with SMTP id a640c23a62f3a-b982518b73fso207710766b.1 for ; Thu, 02 Apr 2026 14:57:02 -0700 (PDT) Received: from thinkpad-t470s.. (93-143-182-244.adsl.net.t-com.hr. [93.143.182.244]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b9c3cac0e1asm134009166b.27.2026.04.02.14.56.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 14:57:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775167021; x=1775771821; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=JvbFky2zZfy6uWbutZgX2420LHSIwSgmweRO7s9n4J0=; b=imBtiMBTvEe6pleliwXgPhkyV1IOv/ClelSRewE6e0Qy4szFUBpdES+KYN9gmeaNg6 yY7YbulxREdkD4ObUSeDzP6ABZch50UqbknJmaEZgTSIesZA+Anlmgvv4YWHf1CCliw/ m9Qg9uWjMgG5g5ZqJ1BV/sNTMcGFUvFtnasaesgS+YvLi0h8RE/WPVr0MtnSguqE+CMV yoOsKUOZPU8MAaEsP/4d9vwYXPcD/A8r6b3GcJ/GvfD9C2qdmVUVIyC1KIjiODSbzX3e /WJoShwGu1OdYeO9JKR4goe0xagFWJPmrki6cfJ+kbbSB5PXtrt29/nsvqhkxWNUq5PT vwKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775167021; x=1775771821; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=JvbFky2zZfy6uWbutZgX2420LHSIwSgmweRO7s9n4J0=; b=DPzr1+WbBMpZo+Wgjc7tGJAqWIpp676UDUs3JyHJ5a8pAKMqW8R8UP39WQZQhDZyIr aCsmN8rcEXKMJERpDaWkh/Cl0+prGvYrxHkpvVveDxZ1/DoX2Pd+6QN7npEL5LaNM2sQ Zs54RqfVgbGVwlR3sJziKZHLqTJwAfqk1LS5G9efuUzm/RBaBX3J5MYPbHf6+SDFsAGW EtgauxgKcuScJsYvbRcRANLjtmnZcqDYq45QWDsx+SbK5diE19vu5/OtIqwAPRAvBG3q 4skvuuV+LHK60+YqOH085pH7OEaegXE7xCgYdhTPIvgG9j7NSfA0XOY6BrnH1EQBkas6 wDAQ== X-Gm-Message-State: AOJu0Yzs5J8pLd9Ie5dPmGbQVZLyFFUb4RNNXKYumIepDfeHCgdPmee8 iJpUgTNugfmstjcqwjnAYemD0LcVYazKOYiWix6LpLXzC9PCARzJqNK34J/Dskxo X-Gm-Gg: ATEYQzyxzQpA+jyqWadrzvHGpZNGm1uxVQGUuP2HiqkExaPImKomSesRpHOHgYm20X9 2I5q80h+qLLCfJaDjt0Rz8FX3AkIkXHIfZZUVxEDZpoXkkKj4Q92ufa0M7qzs38QehTN2qflXVs dou+QUPZSRh5cc6L1PiAqoaC9mKmbvbU2m0A5SGPnd6+7as0IoyaCt7EonztDueyAtFKIcGk5cT ggqvj9WJmAtpwd0+cVv0VsH+TmJSoLTZoWKxhJTMTXJnrR+aTC2nSFSXhLYoCvw4Ek5UkhjoEM8 P5/Erxpw6RdWp8gSQ1EZKxwJOSA9JGv5UCuOgZhuBCFbT0Z4dq2eoFKM3kjia/1Jb3ZwBpxzSFH NQ7IgGvgvVZkioV/mVH5JDBsjzTcH8XdydjMaFjgEeM1rInjhRCsK9sRkN9AEhnXa0vXTw3v4JD NqwhxgdzAuVzDGiMdltHBkWP4CBnOr+vtNqVJBDuTAk76bdcWyMcNhehbfEqvdAVZZ+dL+PQ== X-Received: by 2002:a17:907:894f:b0:b98:5648:e68a with SMTP id a640c23a62f3a-b9c679b35d8mr25738366b.36.1775167020939; Thu, 02 Apr 2026 14:57:00 -0700 (PDT) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, alex.bennee@linaro.org, peter.maydell@linaro.org, artem_mygaiev@epam.com, volodymyr_babchuk@epam.com, takahiro.nakata.wr@renesas.com, "Edgar E . Iglesias" , Ruslan_Ruslichenko@epam.com, balaton@eik.bme.hu Subject: [PATCH v3 11/33] hw/core/fdt_generic_util: initilize qdev properties from fdt Date: Thu, 2 Apr 2026 23:55:56 +0200 Message-ID: <20260402215629.745866-12-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260402215629.745866-1-ruslichenko.r@gmail.com> References: <20260402215629.745866-1-ruslichenko.r@gmail.com> 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::62a; envelope-from=ruslichenko.r@gmail.com; helo=mail-ej1-x62a.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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775167209379158500 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko The patch adds possibility to read and parse device tree node properties and set them to newly created object. Signed-off-by: Ruslan Ruslichenko --- hw/core/fdt_generic_util.c | 236 +++++++++++++++++++++++++++++++++++++ 1 file changed, 236 insertions(+) diff --git a/hw/core/fdt_generic_util.c b/hw/core/fdt_generic_util.c index 565f577238..6f0a1e1e4b 100644 --- a/hw/core/fdt_generic_util.c +++ b/hw/core/fdt_generic_util.c @@ -41,7 +41,9 @@ #include "qemu/config-file.h" #include "hw/core/boards.h" #include "qemu/option.h" +#include "hw/core/qdev-properties.h" #include "hw/cpu/cluster.h" +#include "qobject/qlist.h" =20 #define fdt_debug(...) do { \ qemu_log_mask(LOG_FDT, ": %s: ", __func__); \ @@ -250,6 +252,238 @@ static Object *fdt_create_from_compat(const char *com= pat) return ret; } =20 +/*FIXME: roll into device tree functionality */ + +static inline uint64_t get_int_be(const void *p, int len) +{ + switch (len) { + case 1: + return *((uint8_t *)p); + case 2: + return be16_to_cpu(*((uint16_t *)p)); + case 4: + return be32_to_cpu(*((uint32_t *)p)); + case 8: + return be32_to_cpu(*((uint64_t *)p)); + default: + fprintf(stderr, "unsupported integer length\n"); + abort(); + } +} + +static void fdt_init_qdev_link_prop(Object *obj, ObjectProperty *p, + FDTMachineInfo *fdti, + const char *node_path, + const char *propname, const void* val, + int len) +{ + Object *linked_dev; + char target_node_path[DT_PATH_LENGTH]; + Error *errp =3D NULL; + + if (qemu_devtree_get_node_by_phandle(fdti->fdt, target_node_path, + get_int_be(val, len))) { + error_report("FDT: Invalid phandle in property '%s' of node '%s'", + propname, node_path); + return; + } + + while (!fdt_init_has_opaque(fdti, target_node_path)) { + fdt_init_yield(fdti); + } + + linked_dev =3D fdt_init_get_opaque(fdti, target_node_path); + + object_property_set_link(obj, propname, linked_dev, &errp); + if (!errp) { + fdt_debug_np("set link %s\n", propname); + return; + } + + error_free(errp); + errp =3D NULL; + + if (object_dynamic_cast(linked_dev, TYPE_DEVICE)) { + BusState *child_bus; + + /* Check if target has a child bus that satisfies the link type */ + QLIST_FOREACH(child_bus, &DEVICE(linked_dev)->child_bus, sibling) { + object_property_set_link(obj, propname, OBJECT(child_bus), &er= rp); + if (!errp) { + fdt_debug_np("found matching bus link %s\n", + child_bus->name); + return; + } + + error_free(errp); + errp =3D NULL; + } + } + + fdt_debug_np("failed to set link %s\n", propname); +} + +static void fdt_init_qdev_scalar_prop(Object *obj, ObjectProperty *p, + FDTMachineInfo *fdti, + const char *node_path, + const char *propname, const void* va= l, + int len) +{ + + /* FIXME: handle generically using accessors and stuff */ + if (!strncmp(p->type, "link", 4)) { + fdt_init_qdev_link_prop(obj, p, fdti, node_path, propname, val, le= n); + return; + } + + if (!strcmp(p->type, "uint8") || !strcmp(p->type, "uint16") || + !strcmp(p->type, "uint32") || !strcmp(p->type, "uint64") || + !strcmp(p->type, "int8") || !strcmp(p->type, "int16") || + !strcmp(p->type, "int32") || !strcmp(p->type, "int64")) { + object_property_set_int(obj, propname, + get_int_be(val, len), &error_abort); + fdt_debug_np("set property %s to 0x%llx\n", propname, + (unsigned long long)get_int_be(val, len)); + return; + } + + if (!strcmp(p->type, "boolean") || !strcmp(p->type, "bool")) { + object_property_set_bool(obj, propname, + !!get_int_be(val, len), &error_abort); + fdt_debug_np("set property %s to %s\n", propname, + get_int_be(val, len) ? "true" : "false"); + return; + } + + if (!strcmp(p->type, "string") || !strcmp(p->type, "str")) { + object_property_set_str(obj, propname, + (const char *)val, &error_abort); + fdt_debug_np("set property %s to %s\n", propname, (const char *)va= l); + return; + } + + fdt_debug_np("WARNING: property is of unknown type\n"); +} + +static size_t fdt_array_elem_len(FDTMachineInfo *fdti, + const char *node_path, + const char *propname) +{ + g_autofree char *elem_cells_propname =3D NULL; + Error *err =3D NULL; + uint32_t elem_cells; + + /* + * Default element size to 1 uint32_t cell, unless it is explicitly + * given in the same FDT node (not inherited). + */ + elem_cells_propname =3D g_strconcat("#", propname, "-cells", NULL); + elem_cells =3D qemu_fdt_getprop_cell(fdti->fdt, node_path, + elem_cells_propname, 0, &err); + + return (err ? 1 : elem_cells) * 4; +} + +static void fdt_init_qdev_array_prop(Object *obj, + FDTMachineInfo *fdti, + const char *node_path, + const char *propname, + const void *value, + int len) +{ + int nr =3D len; + uint32_t elem_len; + QList *qlist =3D qlist_new(); + const char *prop_type; + const void *prop_value =3D value; + + if (!value || !nr) { + return; + } + + elem_len =3D fdt_array_elem_len(fdti, node_path, propname); + if (nr % elem_len) { + return; + } + + nr /=3D elem_len; + + prop_type =3D qdev_prop_get_array_elem_type(DEVICE(obj), propname); + if (!prop_type) { + fdt_debug_np("fail to get property array elem type\n"); + return; + } + + while (nr--) { + if (!strcmp(prop_type, "uint8") || !strcmp(prop_type, "uint16") || + !strcmp(prop_type, "uint32") || !strcmp(prop_type, "uint64") || + !strcmp(prop_type, "int8") || !strcmp(prop_type, "int16") || + !strcmp(prop_type, "int32") || !strcmp(prop_type, "int64")) { + qlist_append_int(qlist, get_int_be(prop_value, elem_len)); + } else if (!strcmp(prop_type, "boolean") || + !strcmp(prop_type, "bool")) { + qlist_append_bool(qlist, !!get_int_be(prop_value, elem_len)); + } else if (!strcmp(prop_type, "string") || !strcmp(prop_type, "str= ")) { + qlist_append_str(qlist, (const char *)prop_value); + } + + prop_value +=3D elem_len; + + /* TBD: add link type support */ + } + + qdev_prop_set_array(DEVICE(obj), propname, qlist); + fdt_debug_np("set property %s propname to \n", propname); +} + +static void fdt_init_qdev_properties(char *node_path, FDTMachineInfo *fdti, + Object *dev) +{ + int node_offset, prop_offset; + + node_offset =3D fdt_path_offset(fdti->fdt, node_path); + if (node_offset < 0) { + return; + } + + fdt_for_each_property_offset(prop_offset, fdti->fdt, node_offset) { + const char *fdt_propname; + const void *value; + const char *propname; + int len; + ObjectProperty *p =3D NULL; + + value =3D fdt_getprop_by_offset(fdti->fdt, prop_offset, + &fdt_propname, &len); + if (!value) { + continue; + } + + propname =3D trim_vendor(fdt_propname); + + p =3D object_property_find(dev, propname); + if (p) { + fdt_debug_np("matched property: %s of type %s, len %d\n", + propname, p->type, len); + } + if (!p) { + continue; + } + + if (!strcmp(p->type, "list")) { + fdt_init_qdev_array_prop(dev, fdti, node_path, + propname, value, len); + } + + if (!strcmp(propname, "type")) { + continue; + } + + fdt_init_qdev_scalar_prop(dev, p, fdti, node_path, + propname, value, len); + } +} + static void fdt_init_parent_node(Object *dev, Object *parent, char *node_p= ath) { if (dev->parent) { @@ -346,6 +580,8 @@ static int fdt_init_qdev(char *node_path, FDTMachineInf= o *fdti, char *compat) =20 fdt_init_set_opaque(fdti, node_path, dev); =20 + fdt_init_qdev_properties(node_path, fdti, dev); + g_free(parent_node_path); =20 return 0; --=20 2.43.0 From nobody Sat Apr 11 18:38:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1775167304; cv=none; d=zohomail.com; s=zohoarc; b=DYt2wN2a79LJPD0QdhKdbn9LOAvYW2VxTME1/AJL3URghLrsBAW314YTzlzK7zPnqmYLEXf2PcD99TJ5euOC2zChim1mq/ZV/htdWToNkIEbU4PLLxyv071AXPgD5Km+lg+Yin4QHEtCqBz31zBiA60XuUiAdBGfQIG5ZRdXbK0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775167304; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ZnoM34DCC1pHSVw13BegRYuqsTlliloemYTyLqTUADg=; b=MGNGndbqwnzQWKeYuNwtThc3d+slIBcrPPCfneLRRU+UA9D31Rfqe7w6kYN3aNyfarwVoazHVI0JhQyWQg1WrC2omMXXuxFY+G0hjPfokxAl+7eNP/9iEPhKbbX4x12KRzeZZ1vfjP0nSMc6Z7DIapgx71Hd8inCWNB8K0EVEl0= 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 1775167304384702.4416018302084; Thu, 2 Apr 2026 15:01:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Q2O-0008Pe-8x; Thu, 02 Apr 2026 17:57:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w8Q2E-0008Kb-8N for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:06 -0400 Received: from mail-ej1-x62d.google.com ([2a00:1450:4864:20::62d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w8Q2C-00077S-N1 for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:06 -0400 Received: by mail-ej1-x62d.google.com with SMTP id a640c23a62f3a-b8f97c626aaso225585566b.2 for ; Thu, 02 Apr 2026 14:57:04 -0700 (PDT) Received: from thinkpad-t470s.. (93-143-182-244.adsl.net.t-com.hr. [93.143.182.244]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b9c3cac0e1asm134009166b.27.2026.04.02.14.57.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 14:57:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775167023; x=1775771823; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ZnoM34DCC1pHSVw13BegRYuqsTlliloemYTyLqTUADg=; b=aJ9AYo0q56BRZYlAr3yYFj54qEsJw02uRipwbPUQI0nB++rXp5niXpuqPZ0qaU/N3R R+7SY7n7qCsOU3rbzxle2Y/kXyR+B8jKkix3++ijLbpnh4HGq9LIRtkP2upkPFgKHzdF dpFwV7Y4lHVWdDLmnmbhyPUjKxeft6z4n9AUpSavisaFKsmRO35i7BKTrqU+mAO8K1zf JdFXI5Qp+PVxaYBnvsFQwfvpNJiAful62lzz+iUiN54dualxeceYPyAXSMpVxQ5JppuQ VajOcWUuzal/kIJOAMXkfk3esoFTJt441JcKVOQepAuoBMnQSqJ0LCMAd3l3tRg4hL84 2AQA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775167023; x=1775771823; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=ZnoM34DCC1pHSVw13BegRYuqsTlliloemYTyLqTUADg=; b=oxsA4w61f2guGqzK35RfgqgKx7c3bk28cbUfCcLAUmx/ffyS7MYYlTiGAuegffRvzl f2g8QkkyaDUzHU/ok96LTq2GLImqM4oJ/zT7NazGRShf8p0ME9r+tU9uXl4RFp4rw3RL 23xCzMN0jd22FE/GAJEcJqK+Tw6rBjiuohROJOheIESNPwOGdexu7jE5KnPMbd0/XHfd QZCXqiWY+LS8wym6SlNmUUEOZft6oxY31MG9ezo7FcHRTPhSExgpNZsVil4+FNaB56kx 0MmaYb/crqN7zzs/8CyDElzDA+bXECw/cKYhPAf89myfptQKYm7MzXqNTY4+LUOv4LPp 0Kww== X-Gm-Message-State: AOJu0Yy18Vbz4W+3pPW4EzOzOT3u9HE2Uh4y0HTO1qrJ9AWdBbKHVX0C sCZCqOFJ1kNqGgPa2jT3WIaFGg5eul+kK5Dc4bh6t74JPm8PcU4xC+XfVaLoe9zC X-Gm-Gg: ATEYQzzSXzuw5o9A53f00aNlLofkqfSKlhO0rq0oXNNTQUKRxhs7en+kswMW0eYfO/y Jlmk3smQTYN1xnFu5bQoNC7vMHHaB5Qepr1CEhNczXVRrPxV0rIDtETOD+SRC778TUhwIUuPs+s i7C/YtFOqxzMrXELFM3moungrz09txE3EWQKfHrcuOBKNsHABsHIsQ41lzlqoxHQleBpHrWHVMX SCEw44l6uguAgn+CQxnL1Zr0y3qFF45nlv8kwX8oFSNrRbN6awoV3GKGFcNy/1pju38AKzRix/P gGqqTUwbwgGOT3Srg9ClEC2eC7Drk4gInN1T0KGXaoZFjXzDnlf+y7/O2LD7tF5uYHdHtjUMghs bxf9mpIohNG06UMvgXm9pPw/AJ/pSgt/VZyZE8Fxiu23SKGpwuH9c0cCdnmUsxOnW/9euvXUSOf wpEh6Td6T5FvbIYn58iY4r2Vjfjp/YFjDVH2fHAu9i+oe1wIh2OzECzPtHJwFbw8V0kd0USw== X-Received: by 2002:a17:907:a4a:b0:b9c:451b:2348 with SMTP id a640c23a62f3a-b9c672e4cd2mr22057166b.6.1775167022767; Thu, 02 Apr 2026 14:57:02 -0700 (PDT) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, alex.bennee@linaro.org, peter.maydell@linaro.org, artem_mygaiev@epam.com, volodymyr_babchuk@epam.com, takahiro.nakata.wr@renesas.com, "Edgar E . Iglesias" , Ruslan_Ruslichenko@epam.com, balaton@eik.bme.hu Subject: [PATCH v3 12/33] hw/core/fdt_generic_util: actually realize device Date: Thu, 2 Apr 2026 23:55:57 +0200 Message-ID: <20260402215629.745866-13-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260402215629.745866-1-ruslichenko.r@gmail.com> References: <20260402215629.745866-1-ruslichenko.r@gmail.com> 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::62d; envelope-from=ruslichenko.r@gmail.com; helo=mail-ej1-x62d.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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775167306294154100 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko Actually realize objects with TYPE_DEVICE after main allocations done and properties set for qdev. Signed-off-by: Ruslan Ruslichenko --- hw/core/fdt_generic_util.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/hw/core/fdt_generic_util.c b/hw/core/fdt_generic_util.c index 6f0a1e1e4b..8ae9e23073 100644 --- a/hw/core/fdt_generic_util.c +++ b/hw/core/fdt_generic_util.c @@ -540,6 +540,34 @@ static void fdt_init_parent_node(Object *dev, Object *= parent, char *node_path) } } =20 +static void fdt_init_device_realize(FDTMachineInfo *fdti, char *node_path, + Object *dev) +{ + if (object_dynamic_cast(dev, TYPE_DEVICE)) { + DeviceClass *dc =3D DEVICE_GET_CLASS(dev); + const char *short_name =3D strrchr(node_path, '/') + 1; + + /* Regular TYPE_DEVICE houskeeping */ + fdt_debug_np("Short naming node: %s\n", short_name); + (DEVICE(dev))->id =3D g_strdup(short_name); + + if (object_dynamic_cast(dev, TYPE_CPU_CLUSTER)) { + /* + * CPU clusters must be realized at the end to make sure all c= hild + * CPUs are parented. + */ + fdt_init_register_user_cpu_cluster(fdti, OBJECT(dev)); + } else { + object_property_set_bool(OBJECT(dev), "realized", true, + &error_fatal); + if (dc->legacy_reset) { + qemu_register_reset((void (*)(void *))dc->legacy_reset, + dev); + } + } + } +} + static int fdt_init_qdev(char *node_path, FDTMachineInfo *fdti, char *comp= at) { Object *dev, *parent; @@ -582,6 +610,8 @@ static int fdt_init_qdev(char *node_path, FDTMachineInf= o *fdti, char *compat) =20 fdt_init_qdev_properties(node_path, fdti, dev); =20 + fdt_init_device_realize(fdti, node_path, dev); + g_free(parent_node_path); =20 return 0; --=20 2.43.0 From nobody Sat Apr 11 18:38:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1775167338; cv=none; d=zohomail.com; s=zohoarc; b=YLKkzf2cK8AdHB5DbUu9KwOCpxXodK3D+UBCOFtgigFQgopZXu6fYEjNelpz4jIycSXnPfSP+wvp2XAu79CHikaf3zPGqbTneBWuVJnJv8mO4LEvxdksxgcVKtFG0BgyA+42fQCrkp1SVeTJ4DV8v3RpTRS2FtAUusftyGayNVM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775167338; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=LKKPXz0sjji07wp3e+Tjd0az/D2l0r8RdFJziCGOVu0=; b=E+ryET53FZYkQEHJcZ+svRVu0KiUN2yowPvClWJJQttVBkfS9E+LzD7lQ1uD54QXB6unPLIUZPHFWTeMSRG6dIMDDR5V7u9DVZo7SYZE7LzT47vLeJjPwwFVoEmUbCUsQ6U1lncptNExGXPD8RK42KkOUsJGH42m1BxM6n0iwDA= 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 177516733895085.79607109154722; Thu, 2 Apr 2026 15:02:18 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Q2P-0008SE-JI; Thu, 02 Apr 2026 17:57:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w8Q2G-0008LH-No for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:10 -0400 Received: from mail-ed1-x533.google.com ([2a00:1450:4864:20::533]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w8Q2E-000785-JV for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:08 -0400 Received: by mail-ed1-x533.google.com with SMTP id 4fb4d7f45d1cf-66bb66db39dso2177083a12.0 for ; Thu, 02 Apr 2026 14:57:06 -0700 (PDT) Received: from thinkpad-t470s.. (93-143-182-244.adsl.net.t-com.hr. [93.143.182.244]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b9c3cac0e1asm134009166b.27.2026.04.02.14.57.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 14:57:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775167025; x=1775771825; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=LKKPXz0sjji07wp3e+Tjd0az/D2l0r8RdFJziCGOVu0=; b=MKUu0K4UB8wgHdpbx0M5q8i1D0wBINYz3B0/s/P0RG+UMz22FtU2wogRohLRzn8QoN ly8Cdl7vQZJSqtwKEr/CSUhYIRd+ZrhrUw23Jq7cXbRyLW105pmN3oXtH0TOVuLrLm1r b+iHcMXIPLmMFzszluezSxNrqQ71JnIZhluSLDIXYpElUJWACa7WLTEjWyDZ9/2jPqwc 8E16xZvEJrjygTSvuuuRBi4zNMrkyVkE4UwDMyVOFmCPgHf8HqeOq4HSB/qVANRphe9P VAUYkIwxkX/ZrFfDKqMLm84yYqoVZun2gQS+9hCaXnMtu17QQJET7FPZN+9Mle5L2TUx 7glw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775167025; x=1775771825; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=LKKPXz0sjji07wp3e+Tjd0az/D2l0r8RdFJziCGOVu0=; b=tWQP14kOb5WlwrweGao28lJrUz8nlvJydhZHebY6yyxfDTSZv6+H77ucykV3uYQ0Ux kK4gRebLM8NWkle+0+i34yz1g8VBUW5h65hANG3yfCUk3ojvQgGrxcR0dOmRl870vDVw uuFgJHJDA4XwaRwFqrjjHk9AuJnZ8X5c1VK2R+aSpyPWtZs8mKdn2on+zu9DXDNiafHj jAskVYlqh7SVMq3E4OPDHNdZyKZzBdDHS+7YPSH+5c9PM2B/AJVK5jwyqEoxmDsTXA0z nSP6YmxcIpL0NgJxZGUVrWBD/t1tu13Fjdn7gIRX5C2i98fJEaGstx0A6XThM8q0mUhr ZBww== X-Gm-Message-State: AOJu0YwD4zCxslFJ3mXJTUjRVWrXpIK+3PSa52u0pNMfRiHMkEmg/TDs 507zAQiWazXxehyfd54CWcYpKxPZaPjwyYYrpXfSbOrRRAgsA5We0AVyZquiQrg3 X-Gm-Gg: ATEYQzyMbjFSwY5muePHrO/r7W/FL0DzfGxqKIoJ5LOkxZx6ASDEkc/ipyIV1NXwzwr T3jdU92haMChODztWt7FXNtpb7UzzZBeZWXKtMsY2Eyw4RrJEKyLo+n5xT5DpxNmnHzrjpDAwFO yev20q8X7VXiJ/QKK+6ynIX2LC8wAyhyNHq6PmiEo9bg7njw4b5y8v622kNY9xnPYLNdvyMlh2v qWHJrn3x8gKxoFmXS2cV9MB3wsfxyvqq2zmgB497pyfmq1UzL2H+gY+S+tQ0BNLIrstgEPQi352 pPR//3hA+1Pi9/Twe/JE+s3LEAnS5ui/d+EGYBx5ADXUqF4UIOnqf0SsWoeP//G4f3QiQ2aSNqX +Txqh+cTDWzKUb+sydYgcxeCLTOSoDYffmHWUfFqwq0QyCkmPaFWnVkSU/PPZPYkRn45bjiJt84 di8BMjnAbrMhoZ5g5vkmcUkK9TIICq39j6MuCKVS7DG8Yep/yBcVQoltViwEeTNVXLVsPaLw== X-Received: by 2002:a17:906:ba83:b0:b9c:6178:6a77 with SMTP id a640c23a62f3a-b9c67925198mr29744866b.25.1775167024835; Thu, 02 Apr 2026 14:57:04 -0700 (PDT) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, alex.bennee@linaro.org, peter.maydell@linaro.org, artem_mygaiev@epam.com, volodymyr_babchuk@epam.com, takahiro.nakata.wr@renesas.com, "Edgar E . Iglesias" , Ruslan_Ruslichenko@epam.com, balaton@eik.bme.hu Subject: [PATCH v3 13/33] hw/core/fdt_generic_util: add TYPE_FDT_GENERIC_MMAP Date: Thu, 2 Apr 2026 23:55:58 +0200 Message-ID: <20260402215629.745866-14-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260402215629.745866-1-ruslichenko.r@gmail.com> References: <20260402215629.745866-1-ruslichenko.r@gmail.com> 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::533; envelope-from=ruslichenko.r@gmail.com; helo=mail-ed1-x533.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, FREEMAIL_FROM=0.001, 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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775167340871158500 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko Add new FDT_GENERIC_MMAP class and interface to allow devices to register own handlers for mapping memory regions in device tree's 'reg' property. Signed-off-by: Ruslan Ruslichenko --- hw/core/fdt_generic_util.c | 11 ++++++++ include/hw/core/fdt_generic_util.h | 44 ++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/hw/core/fdt_generic_util.c b/hw/core/fdt_generic_util.c index 8ae9e23073..8f91bcb66c 100644 --- a/hw/core/fdt_generic_util.c +++ b/hw/core/fdt_generic_util.c @@ -617,3 +617,14 @@ static int fdt_init_qdev(char *node_path, FDTMachineIn= fo *fdti, char *compat) return 0; } =20 +static const TypeInfo fdt_generic_mmap_info =3D { + .name =3D TYPE_FDT_GENERIC_MMAP, + .parent =3D TYPE_INTERFACE, + .class_size =3D sizeof(FDTGenericMMapClass), +}; + +static void fdt_generic_register_types(void) +{ + type_register_static(&fdt_generic_mmap_info); +} +type_init(fdt_generic_register_types) diff --git a/include/hw/core/fdt_generic_util.h b/include/hw/core/fdt_gener= ic_util.h index 71bedb6631..e3671990ad 100644 --- a/include/hw/core/fdt_generic_util.h +++ b/include/hw/core/fdt_generic_util.h @@ -16,4 +16,48 @@ =20 FDTMachineInfo *fdt_generic_create_machine(void *fdt, qemu_irq *cpu_irq); =20 +#define TYPE_FDT_GENERIC_MMAP "fdt-generic-mmap" + +#define FDT_GENERIC_MMAP_CLASS(klass) \ + OBJECT_CLASS_CHECK(FDTGenericMMapClass, (klass), TYPE_FDT_GENERIC_MMA= P) +#define FDT_GENERIC_MMAP_GET_CLASS(obj) \ + OBJECT_GET_CLASS(FDTGenericMMapClass, (obj), TYPE_FDT_GENERIC_MMAP) +#define FDT_GENERIC_MMAP(obj) \ + INTERFACE_CHECK(FDTGenericMMap, (obj), TYPE_FDT_GENERIC_MMAP) + +typedef struct FDTGenericMMap { + /*< private >*/ + Object parent_obj; +} FDTGenericMMap; + +/* + * The number of "things" in the tuple. Not to be confused with the cell l= ength + * of the tuple (which is variable based on content + */ + +#define FDT_GENERIC_REG_TUPLE_LENGTH 4 + +typedef struct FDTGenericRegPropInfo { + int n; + union { + struct { + uint64_t *a; + uint64_t *s; + uint64_t *b; + uint64_t *p; + }; + uint64_t *x[FDT_GENERIC_REG_TUPLE_LENGTH]; + }; + Object **parents; +} FDTGenericRegPropInfo; + +typedef struct FDTGenericMMapClass { + /*< private >*/ + InterfaceClass parent_class; + + /*< public >*/ + bool (*parse_reg)(FDTGenericMMap *obj, FDTGenericRegPropInfo info, + Error **errp); +} FDTGenericMMapClass; + #endif /* FDT_GENERIC_UTIL_H */ --=20 2.43.0 From nobody Sat Apr 11 18:38:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1775167318; cv=none; d=zohomail.com; s=zohoarc; b=FZbFsPC9Ofm9Ta5G03OAwkzFd0BAoZQw/AhiyQSqDDYrn1BAFtXvIz68nyPru9w3GviqDH46nlEyw11dz4aTTe4/CYXk3kY7z5QTBv+bVoA1kF9Mxsuc+NkaMP9NW2vIbdxvyh1n4045keq3RyMxPMMFDRdOimo+2Yd1s0sKZU8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775167318; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=IEv5arXU/isUBZYgJvgLUA50xxPvAFJsx4xFvYCWEAU=; b=LscXvxa+Kawc8UjWQoBVHVuDrEw1ja1JogNZb9UqXxoJKJbwFnLyd8tGSXmysP6ulA3Irywpnn91zKP4gmMxq2WAhKuvlhmRy3h0KH1bVRC/W4vwJtfpa3bQKKj1tXF/cNmPsRnXKnFJUxcraiJ5+L7c9nlnV7h7rQzeKbRWms4= 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 1775167318540296.99608665960966; Thu, 2 Apr 2026 15:01:58 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Q2O-0008RB-Q9; Thu, 02 Apr 2026 17:57:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w8Q2I-0008LN-HJ for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:12 -0400 Received: from mail-ej1-x633.google.com ([2a00:1450:4864:20::633]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w8Q2G-00078a-SP for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:10 -0400 Received: by mail-ej1-x633.google.com with SMTP id a640c23a62f3a-b97e6e48b24so206763066b.2 for ; Thu, 02 Apr 2026 14:57:08 -0700 (PDT) Received: from thinkpad-t470s.. (93-143-182-244.adsl.net.t-com.hr. [93.143.182.244]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b9c3cac0e1asm134009166b.27.2026.04.02.14.57.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 14:57:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775167027; x=1775771827; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=IEv5arXU/isUBZYgJvgLUA50xxPvAFJsx4xFvYCWEAU=; b=mR21d4FOvID1MUg94nwqPuUyx2BhLE8VdN2kCpHE6bDejwOegxI8jCpUcmSQWfIoJx 7vciB0fXAbJDvVmvA4D2+VpCu8yTYFZVO5GfHhbT1aFmutefqX3r/OoGLKQjGICnfjbc /kv2KUMT4xt023Ztw/5Y6j6bqqOSdlYTgh8ZvfcINoRPkZrwA5z1yQUU/uVncU03J4nl eXT1BSJj5ZrvXswApqXo7IoFHTRbrIL7vZYjkWnaRRQgRaHorTN919Gex971D4GvmOZo +6HEyUNOG9RwUgt0w/iyb6KB1Y+9jhBbYMTc8E7Hu2W1gWlfoziulwhiImD2nLY1rIRS fYSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775167027; x=1775771827; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=IEv5arXU/isUBZYgJvgLUA50xxPvAFJsx4xFvYCWEAU=; b=H2W2GiztKZTJ5LNDZSHMsLSjxIwuugi5j4+t3jIFiW35PDxpyP2W6PIlmNX4K+Pd9j BHT2O7gBOEmi1DUJbX4zLsvnmeiE0mfgE6k69rE3Osx49lgh/O6CWLIYrAHpc/7ucZek hLVRLbY6nJthLg+mKA13NDx6aUVFhmsgW4eDU1gmKbj+h2J5Z/C0jqxeXH3U0Gw5RYBn jj4flr3PXuuKeonFMgikxrfsok4U2sLidkThWurFU/yipd9DQy+JtUWvuLYSU3BNSfAI kq3td0P78nctcGI89kgOZ/R+HBvN2hEyl1HPVqudOortDxt2eBlUvjXov8ASEo++40Li imCw== X-Gm-Message-State: AOJu0YwZoyL+6qwpu2Kc/7FhZHOj5W7haO6Fk7rqlIKfeYtvyCpVaXS+ OK3FiqerDixnuniqCOqalUBXy2noJn6bEHx9ZDrP268JMEwnlC/ru9HkFA52F7Xh X-Gm-Gg: ATEYQzy3i3VXjwlZ9bRGyJ9XWmAyT/26WyXORVHKsqjh0CKGm1GXjZJc8aD3gif6gEA MDPVOhNjYsKbWFfAUqkrowsBf0u73iA895RJ4jChZac+bPH+rJkEvgPpLiaXaQMUtZ6EuyGK7Hb Gmiz/V5ks8oLt5DJ3wATV4/6BZew80NODu3z8PzG806Xz/azSPzgjfU4Oho01utbVjqB7AbY59G F8sLhZjP123TkBAlZt2pC0ohX4/kzCh48rz3/JA8zHFc4PT7DO5dF87CVsEOxy5mtNJao2nVWlu MvNzd0YgixYFV8BUkI6MRt5BlBbboG92xcLJ6DFK7ODzlfSf7rVYxbzRMDjlAQSC9sFe8m+XOju tm9GOrbeddPUYuFwnSFRofuJ3prIpNryEnIVD9gSTE3gUXyTGmYKMU+BKnkSJ9RF+vqAceJsWjd 7G5KUURxJmYIkYD6bUAazeSxMu+Q0zIH7vNH0G2saaDpbUGWuj4ty74XKVFbpZjauFpiuSMA== X-Received: by 2002:a17:907:86ab:b0:b99:1074:74f with SMTP id a640c23a62f3a-b9c67978769mr28859866b.34.1775167026951; Thu, 02 Apr 2026 14:57:06 -0700 (PDT) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, alex.bennee@linaro.org, peter.maydell@linaro.org, artem_mygaiev@epam.com, volodymyr_babchuk@epam.com, takahiro.nakata.wr@renesas.com, "Edgar E . Iglesias" , Ruslan_Ruslichenko@epam.com, balaton@eik.bme.hu Subject: [PATCH v3 14/33] hw/core/fdt_generic_util: add TYPE_FDT_GENERIC_INTC Date: Thu, 2 Apr 2026 23:55:59 +0200 Message-ID: <20260402215629.745866-15-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260402215629.745866-1-ruslichenko.r@gmail.com> References: <20260402215629.745866-1-ruslichenko.r@gmail.com> 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::633; envelope-from=ruslichenko.r@gmail.com; helo=mail-ej1-x633.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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775167320572154100 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko Add TYPE_FDT_GENERIC_INTC class and interface to allow interrupt controllers to register callback which can be used to get IRQ's from this controller. Optionally, interrupt controllers may also provide auto_parent() callabck which can be used to attach it to corresponding CPU's or other interrupt parent. Signed-off-by: Ruslan Ruslichenko --- hw/core/fdt_generic_util.c | 7 ++++ include/hw/core/fdt_generic_util.h | 59 ++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) diff --git a/hw/core/fdt_generic_util.c b/hw/core/fdt_generic_util.c index 8f91bcb66c..d816e395fd 100644 --- a/hw/core/fdt_generic_util.c +++ b/hw/core/fdt_generic_util.c @@ -617,6 +617,12 @@ static int fdt_init_qdev(char *node_path, FDTMachineIn= fo *fdti, char *compat) return 0; } =20 +static const TypeInfo fdt_generic_intc_info =3D { + .name =3D TYPE_FDT_GENERIC_INTC, + .parent =3D TYPE_INTERFACE, + .class_size =3D sizeof(FDTGenericIntcClass), +}; + static const TypeInfo fdt_generic_mmap_info =3D { .name =3D TYPE_FDT_GENERIC_MMAP, .parent =3D TYPE_INTERFACE, @@ -625,6 +631,7 @@ static const TypeInfo fdt_generic_mmap_info =3D { =20 static void fdt_generic_register_types(void) { + type_register_static(&fdt_generic_intc_info); type_register_static(&fdt_generic_mmap_info); } type_init(fdt_generic_register_types) diff --git a/include/hw/core/fdt_generic_util.h b/include/hw/core/fdt_gener= ic_util.h index e3671990ad..c92c79dd12 100644 --- a/include/hw/core/fdt_generic_util.h +++ b/include/hw/core/fdt_generic_util.h @@ -16,6 +16,65 @@ =20 FDTMachineInfo *fdt_generic_create_machine(void *fdt, qemu_irq *cpu_irq); =20 +#define TYPE_FDT_GENERIC_INTC "fdt-generic-intc" + +#define FDT_GENERIC_INTC_CLASS(klass) \ + OBJECT_CLASS_CHECK(FDTGenericIntcClass, (klass), TYPE_FDT_GENERIC_INT= C) +#define FDT_GENERIC_INTC_GET_CLASS(obj) \ + OBJECT_GET_CLASS(FDTGenericIntcClass, (obj), TYPE_FDT_GENERIC_INTC) +#define FDT_GENERIC_INTC(obj) \ + INTERFACE_CHECK(FDTGenericIntc, (obj), TYPE_FDT_GENERIC_INTC) + +typedef struct FDTGenericIntc { + /*< private >*/ + Object parent_obj; +} FDTGenericIntc; + +typedef struct FDTGenericIntcClass { + /*< private >*/ + InterfaceClass parent_class; + + /*< public >*/ + /** + * get irq - Based on the FDT generic interrupt binding for this device + * grab the irq(s) for the given interrupt cells description. In some = device + * tree bindings (E.G. ARM GIC with its PPI) a single interrupt cell-t= uple + * can describe more than one connection. So populates an array with a= ll + * relevant IRQs. + * + * @obj - interrupt controller to get irqs input for ("interrupt-paren= t") + * @irqs - array to populate with irqs (must be >=3D @max length + * @cells - interrupt cells values. Must be >=3D ncells length + * @ncells - number of cells in @cells + * @max - maximum number of irqs to return + * @errp - Error condition + * + * @returns the number of interrupts populated in irqs. Undefined on e= rror + * (use errp for error checking). If it is valid for the interrupt + * controller binding to specify no (or a disabled) connections it may + * return 0 as a non-error. + */ + + int (*get_irq)(FDTGenericIntc *obj, qemu_irq *irqs, uint32_t *cells, + int ncells, int max, Error **errp); + + /** + * auto_parent. An interrupt controller often infers its own interrupt + * parent (usually a CPU or CPU cluster. This function allows an inter= rupt + * controller to implement its own auto-connections. Is called if an + * interrupt controller itself (detected via "interrupt-controller") h= as no + * "interrupt-parent" node. + * + * @obj - Interrupt controller top attempt autoconnection + * @errp - Error condition + * + * FIXME: More arguments need to be added for partial descriptions + */ + + void (*auto_parent)(FDTGenericIntc *obj, Error **errp); + +} FDTGenericIntcClass; + #define TYPE_FDT_GENERIC_MMAP "fdt-generic-mmap" =20 #define FDT_GENERIC_MMAP_CLASS(klass) \ --=20 2.43.0 From nobody Sat Apr 11 18:38:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1775167115; cv=none; d=zohomail.com; s=zohoarc; b=YFPWU9puYm5pPsOvYdwdiPY5lR9LeLyuqNOdSMF7MWfJ4eEoy9nj1kamuOBdhp9odbMKNwAggUBw+AqLJ3DIj7F7lh/VOXF1Ep5EflKzgmrak7a5N851nvd734g6U3tS1ADYyFVE/Nr64TiD3Doukz3Oo2Z1Lq/XxV/vCWYsq+Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775167115; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Ti9TrcfoeyeQNd3Zl+7f/uTE9kKOziltFUJwrjRDreg=; b=f9f1UNLjA3y3rCgaaQhuRvVKnzXoHePTlKLU6FWeNLUnfT7kdx+m2C0Kr+rFRnNSliTNnwoKmU2UzNzT8dmwq/9LgwXjjW3op3fDBxo/17kAMDckYmoRiGu94F7TcqEsnrEEWUMB/Mk08ZDh8whucstkJpsdw5jfuAxHW1AMEaE= 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 1775167115088248.40621200743533; Thu, 2 Apr 2026 14:58:35 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Q2W-0008WJ-GO; Thu, 02 Apr 2026 17:57:24 -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 1w8Q2L-0008Lm-UJ for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:14 -0400 Received: from mail-ej1-x632.google.com ([2a00:1450:4864:20::632]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w8Q2J-00079F-02 for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:13 -0400 Received: by mail-ej1-x632.google.com with SMTP id a640c23a62f3a-b9b1df1a6b3so163801166b.0 for ; Thu, 02 Apr 2026 14:57:10 -0700 (PDT) Received: from thinkpad-t470s.. (93-143-182-244.adsl.net.t-com.hr. [93.143.182.244]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b9c3cac0e1asm134009166b.27.2026.04.02.14.57.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 14:57:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775167029; x=1775771829; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Ti9TrcfoeyeQNd3Zl+7f/uTE9kKOziltFUJwrjRDreg=; b=Fr4iMmC7WwQK5xcFXq3KoWVvYw1sLpScUkAyX2dEBxAnaQ/c+DrWt/EvM7iaH95pVE w8eX89SdjLinq2SNiHTXiuEceo0VdjORF52Ozsj182KKD/fHrQrYCzA/2Mcj8b8LNYUF zks7OwlSXhlbGl3YJ9IsAs41xoPRn6lkIHaEr/+4gxWMhSR2AgXODZNABCqBOWQk7EPv nWmMQECFVAzn0DTo9VonLhxoj4BlYTbR40Nucit3sjvCxWET1RY0nXf7X+RvqF0aF7Y8 yLUXYePTAXB8/NxXQYZO9W2HmRtkEb3mPzGSLXTgVmEMp89TOfiNAcZKNgy4VvtUNHGV EaAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775167029; x=1775771829; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Ti9TrcfoeyeQNd3Zl+7f/uTE9kKOziltFUJwrjRDreg=; b=EASKxNG1Lp3+5S2zgloYtQkqFhBGkR4hcVTsXRCR+WEnT08R8xtSftxetpKRCsg2kr GWQv/jM1Kx+hzunkqFsEJScaQRzMfG9MUiSPUjS7cyuJIuKd/7MgzKkAmBvE/S+faqAa K5PD/KNjYUUCY3jghdMnpAoFRk230KFLSObKZLrvLuJlpP6jgf0/RjNTq6ACt2E4ZUcT eTfjepE2hzAV8Xs3CB5fhYiG7hMQdEPcDs0BnjuMGb/sgMb1CuST6MS/8FT0fmMkJsWJ QetcaL0XeNxC3HCDt7MxAvE/efBEgaX9Z+tWwuvZPxOqV1RarL9iwRmp9+ihXHS08T9x PHfA== X-Gm-Message-State: AOJu0Yx34/sR6sNNPMAija6qmXb0y/ZdAMNTkJOycvTIaif54KLUCKZz u231NWfhFuXpWVIBylNnmguk768pioPbuyXL7PJJ8cOxpMAy8zspbXySp/cb5Nb5 X-Gm-Gg: ATEYQzyJI+R/F1lmriuM69uJnEYemxTr1eucVoBElJr4bItS08AWiOrAAOjFsp2LChj 29txTV6PWCaX5zd6Th+d3bbAf2yPJUM79pjXMt3TrpbQ/z3DcTqOhaH3mgpDN7F6l8JCDRgfb0h y+pV50SLLQ35o4yzMkdf0SHKC1IidzXeOfC5Ix0DxZsQuu84d7yDxdz7ZkI8Zhgq2sRxgEt25rm RiYnMdu+HA7FXljq5P1vGQKtEJcsbuz+Ktt2lt+FAse4OGrqu/3xNQU6wKNK6dy1rtXdGZCgzx9 c94znzMNtUAyDkNPAFdAtq2wdzfhNCITY/1OLNBB7hLsKMTo80KQkPCJ3ye1zYcQBkzG+fW7Gph 6yJYXukpCI08xz9CtO9GT5oIV0aCSvTTEg5H4VGzwLteoBwuSa7tG0ja13McHkDn9zNciSg+9wp +krVBTCYHQ+6EHKsx2wORvEN18Gklxn+rPDLPXNaUHGsBGn5tSHFkbsKEaWiTgmFLrir9JuA== X-Received: by 2002:a17:907:3f90:b0:b98:cb6:e896 with SMTP id a640c23a62f3a-b9c67b77b14mr24507466b.38.1775167028943; Thu, 02 Apr 2026 14:57:08 -0700 (PDT) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, alex.bennee@linaro.org, peter.maydell@linaro.org, artem_mygaiev@epam.com, volodymyr_babchuk@epam.com, takahiro.nakata.wr@renesas.com, "Edgar E . Iglesias" , Ruslan_Ruslichenko@epam.com, balaton@eik.bme.hu Subject: [PATCH v3 15/33] hw/core/fdt_generic_util: implement fdt_get_irq/_info API Date: Thu, 2 Apr 2026 23:56:00 +0200 Message-ID: <20260402215629.745866-16-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260402215629.745866-1-ruslichenko.r@gmail.com> References: <20260402215629.745866-1-ruslichenko.r@gmail.com> 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::632; envelope-from=ruslichenko.r@gmail.com; helo=mail-ej1-x632.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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775167117234158500 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko Both interfaces may be used by devices to get IRQ information based device tree entry. Both methods will identify interrupt parent for a device and retrieve irq entry. Signed-off-by: Ruslan Ruslichenko --- hw/core/fdt_generic_util.c | 132 +++++++++++++++++++++++++++++ include/hw/core/fdt_generic_util.h | 17 ++++ 2 files changed, 149 insertions(+) diff --git a/hw/core/fdt_generic_util.c b/hw/core/fdt_generic_util.c index d816e395fd..51b808d9d0 100644 --- a/hw/core/fdt_generic_util.c +++ b/hw/core/fdt_generic_util.c @@ -64,6 +64,11 @@ static int fdt_generic_num_cpus; =20 static int simple_bus_fdt_init(const char *bus_node_path, FDTMachineInfo *= fdti); =20 +static void fdt_get_irq_info_from_intc(FDTMachineInfo *fdti, qemu_irq *ret, + char *intc_node_path, + uint32_t *cells, uint32_t num_cells, + uint32_t max, Error **errp); + FDTMachineInfo *fdt_generic_create_machine(void *fdt, qemu_irq *cpu_irq) { FDTMachineInfo *fdti =3D fdt_init_new_fdti(fdt); @@ -229,6 +234,133 @@ static int simple_bus_fdt_init(const char *node_path,= FDTMachineInfo *fdti) return 0; } =20 +static void fdt_get_irq_info_from_intc(FDTMachineInfo *fdti, qemu_irq *ret, + char *intc_node_path, + uint32_t *cells, uint32_t num_cells, + uint32_t max, Error **errp) +{ + FDTGenericIntcClass *intc_fdt_class; + DeviceState *intc; + + while (!fdt_init_has_opaque(fdti, intc_node_path) && + qemu_in_coroutine()) { + fdt_init_yield(fdti); + } + intc =3D DEVICE(fdt_init_get_opaque(fdti, intc_node_path)); + + if (!intc) { + goto fail; + } + + while (!intc->realized && qemu_in_coroutine()) { + fdt_init_yield(fdti); + } + + if (!intc->realized) { + goto fail; + } + + intc_fdt_class =3D FDT_GENERIC_INTC_GET_CLASS(intc); + if (!intc_fdt_class) { + goto fail; + } + + intc_fdt_class->get_irq(FDT_GENERIC_INTC(intc), ret, cells, num_cells, + max, errp); + + return; +fail: + error_setg(errp, "%s", __func__); +} + +qemu_irq *fdt_get_irq_info(FDTMachineInfo *fdti, char *node_path, int irq_= idx, + char *info) { + void *fdt =3D fdti->fdt; + uint32_t intc_phandle, intc_cells, cells[32]; + char intc_node_path[DT_PATH_LENGTH]; + qemu_irq *ret =3D NULL; + int i; + Error *errp =3D NULL; + + intc_phandle =3D qemu_fdt_getprop_cell_inherited(fdt, node_path, + "interrupt-parent", + 0, &errp); + if (errp) { + goto fail; + } else { + if (qemu_devtree_get_node_by_phandle(fdt, intc_node_path, + intc_phandle)) { + goto fail; + } + + /* Check if the device is using interrupt-maps */ + qemu_fdt_getprop_cell(fdt, node_path, "interrupt-map-mask", 0, + &errp); + if (!errp) { + error_report( + "'interrupt-map' routing is not yet supported for node %s= ", + node_path); + goto fail; + } else { + error_free(errp); + errp =3D NULL; + intc_cells =3D qemu_fdt_getprop_cell_inherited(fdt, intc_node_= path, + "#interrupt-cells", 0, + &errp); + } + } + + if (errp) { + goto fail; + } + + fdt_debug_np("%s intc_phandle: %d\n", node_path, intc_phandle); + + for (i =3D 0; i < intc_cells; ++i) { + cells[i] =3D qemu_fdt_getprop_cell(fdt, node_path, "interrupts", + intc_cells * irq_idx + i, &errp); + if (errp) { + goto fail; + } + } + + fdt_debug_np("Getting IRQ information: %s -> %s\n", + node_path, intc_node_path); + + ret =3D g_new0(qemu_irq, fdt_generic_num_cpus + 2); + fdt_get_irq_info_from_intc(fdti, ret, intc_node_path, cells, intc_cell= s, + fdt_generic_num_cpus, &errp); + + if (errp) { + goto fail; + } + + /* FIXME: Phase out this info bussiness */ + if (info) { + snprintf(info, DT_PATH_LENGTH, "%s", intc_node_path); + } + + return ret; + +fail: + if (info) { + snprintf(info, DT_PATH_LENGTH, "%s", + errp ? error_get_pretty(errp) : "(none)"); + + } + + if (errp) { + error_free(errp); + } + + return NULL; +} + +qemu_irq *fdt_get_irq(FDTMachineInfo *fdti, char *node_path, int irq_idx) +{ + return fdt_get_irq_info(fdti, node_path, irq_idx, NULL); +} + static inline const char *trim_vendor(const char *s) { /* FIXME: be more intelligent */ diff --git a/include/hw/core/fdt_generic_util.h b/include/hw/core/fdt_gener= ic_util.h index c92c79dd12..6fb0708d7a 100644 --- a/include/hw/core/fdt_generic_util.h +++ b/include/hw/core/fdt_generic_util.h @@ -16,6 +16,23 @@ =20 FDTMachineInfo *fdt_generic_create_machine(void *fdt, qemu_irq *cpu_irq); =20 +/* + * get an irq for a device. The interrupt parent of a device is idenitified + * and the specified irq (by the interrupts device-tree property) is retri= eved + */ + +qemu_irq *fdt_get_irq(FDTMachineInfo *fdti, char *node_path, int irq_idx); + +/* + * same as above, but poulates err with non-zero if something goes wrong, = and + * populates info with a human readable string giving some basic informati= on + * about the interrupt connection found (or not found). Both arguments are + * optional (i.e. can be NULL) + */ + +qemu_irq *fdt_get_irq_info(FDTMachineInfo *fdti, char *node_path, int irq_= idx, + char *info); + #define TYPE_FDT_GENERIC_INTC "fdt-generic-intc" =20 #define FDT_GENERIC_INTC_CLASS(klass) \ --=20 2.43.0 From nobody Sat Apr 11 18:38:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1775167278; cv=none; d=zohomail.com; s=zohoarc; b=ivQTP2Vjjh83QXQFGTWa3433szCOWKYvWo6q/DM3P9/L9I1BFe7vlDK3RdHa59+OobYZg6UGu1Rz54nK3KDgGkoBkbizVOpaNtLE8zHrrw1huMIMlP5VAYBo0cThPEHIe047UtuEWwy/t9CWeNnKwnt6jb73dK1ANBPkoqurahk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775167278; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=5+ZNPSdOIRkRVr+Q/vKL8bV00FekXBJXM/FhoKVAOes=; b=RBRC5CUYX/l8F3BtNL3lssT/PJM0asyyrkVAG0gRhLTXidGAaxVkkd2wxbC+nrzNYudSUHpOyGmSraJBnkN22DLQJy+/8Zn5uS60RmWtDUEN3MBc/oWkBnD8G4O8JyObNWQcrWYKWEo2wejEmiOh0O/zJ9Tla7bcrSoR3hIB5bc= 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 1775167278904389.8468792322225; Thu, 2 Apr 2026 15:01:18 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Q2X-00005m-Au; Thu, 02 Apr 2026 17:57:25 -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 1w8Q2N-0008MW-2s for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:15 -0400 Received: from mail-ej1-x62b.google.com ([2a00:1450:4864:20::62b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w8Q2L-00079c-0p for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:14 -0400 Received: by mail-ej1-x62b.google.com with SMTP id a640c23a62f3a-b9b1ffbb9f5so154422666b.2 for ; Thu, 02 Apr 2026 14:57:12 -0700 (PDT) Received: from thinkpad-t470s.. (93-143-182-244.adsl.net.t-com.hr. [93.143.182.244]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b9c3cac0e1asm134009166b.27.2026.04.02.14.57.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 14:57:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775167031; x=1775771831; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=5+ZNPSdOIRkRVr+Q/vKL8bV00FekXBJXM/FhoKVAOes=; b=CRDjOgcAh58OJ7vin24HmML8Gq+2IYTHWuOSAj2c1I7zq71oJONs358IqTplJBVtV8 aP8b4E+eTNbvn7+9yWHvN1Pp5hrI3Pas8m3J0q+0WgmSBqIwz166SfFZ5ckDCzVyAkvE dbcO+h10dpQHXPUbpOgV9KSk8Hm4LbDDa/wruKjvzcicC/RMKHPO9raQg4qtQeDgAOop 6snYzHoie8MV39Xz13mF976NUQgyokHUXJZVd32Bq1PVseAd9jvbw6DRXYUD9R1/5ozp /91LOVDiYPUkLfkPt3c4eNerog/F5G9gthDYVXAyXB20eLzuE3O6U4qYA3IHQ2/Vl/UI CXZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775167031; x=1775771831; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=5+ZNPSdOIRkRVr+Q/vKL8bV00FekXBJXM/FhoKVAOes=; b=cyP7QXSXI5BjbtDyN6x9oP975A+hYKP1yWBIBnDvaOyPhKw/OsLaL1JBAOL5l4OOLk 2PLSxKRTJXX8kWrLCNyCle0kiub5+Jx0AFFtwvphgbqUMkRcT00JGXOgOqBZfMvyi7Xy xDf6B4C+nr4fGIL5pl8xKt0NEN7JPXIAbwndHPWoQWkXsaV6MYBAChkAK5jv06X1AH23 c6BLaH0BRhkHDQc0r4SMqL17HTEqbXUQmNPwwdKIl3Et/QNDSrauFMyOG6p/u9BKHvq+ k4b9rgE0sdP0pr/7OERnBvQwB85VpsLNN4eahGmfIvar2MgJeowb1RhQN1pyzvwZfYMd xe9g== X-Gm-Message-State: AOJu0YwC5DE97PfqjTMjKj1IOC1xFBn/3XGXrJ3XX4tFH4VLWOzHsWrN mgXmYZwdg/Urv8ilG4EdNAd30sKUrg9qLMazFyNRdxZ4mnNFdx9+1b+UJDnM6Xb2 X-Gm-Gg: AeBDieu0gguWhQ+jgGX54bIdZ+zkQLDkKa1D7F0ISzMGTHbrHMJaMUe3afcpGdwJJfY i8/QtTsaO16Oy0Uiq35aIg1uUE7esJth6qCItozAQoaTcvhhlJVQy1E6LXObbLWLSggdVJsK4nT DzYZQcR/qDe+AGacZ7t1fm/koKWoxr5PX89mosPXM4V+Mf+Mnb69I9/oU9v3Box8O5CeClxGwMc 7c90e+UTpjytJw2WEEO5DY0M+Fyr4YVf6TRxKZ4SU8ILTEnCC/gOtvHPftojN3kuQQUYZMnyaK0 1EAdoqVOPIaF3cMZULOZX8SWhAR+LcPLQgwiWMvQNNLg8CLz/87gaWpDgWGHH3Ug/P4pf/RF913 fc0m+lcJNf6rL4stO8WdXJw93oRpiOwKhQdZpOQGXXfiAzFp5J5Cc1/yJT7fjbKmU4YcIAFsAhn kL4UuFW/oCU5Q+u2nj86aRp+QGW5RhXKg6wYJ0fVqM4wPqWuD1BCrNhqLNTkDhJh6aQQjGbQ== X-Received: by 2002:a17:907:984:b0:b9c:1c26:9eb with SMTP id a640c23a62f3a-b9c672d42afmr26531666b.10.1775167031039; Thu, 02 Apr 2026 14:57:11 -0700 (PDT) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, alex.bennee@linaro.org, peter.maydell@linaro.org, artem_mygaiev@epam.com, volodymyr_babchuk@epam.com, takahiro.nakata.wr@renesas.com, "Edgar E . Iglesias" , Ruslan_Ruslichenko@epam.com, balaton@eik.bme.hu Subject: [PATCH v3 16/33] hw/core/fdt_generic_util: map device memory regions Date: Thu, 2 Apr 2026 23:56:01 +0200 Message-ID: <20260402215629.745866-17-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260402215629.745866-1-ruslichenko.r@gmail.com> References: <20260402215629.745866-1-ruslichenko.r@gmail.com> 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::62b; envelope-from=ruslichenko.r@gmail.com; helo=mail-ej1-x62b.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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775167281999154100 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko Parse device mmio regions provided within standard 'reg' and custom 'reg-extended' device tree properties. For 'reg-extended' properties, the parent phandle is extracted along with the standard io memory region specification, which allows adding these regions to specified parent memory regions. The mapping itself is delegated to the device via the 'TYPE_FDT_GENERIC_MMAP' interface. Signed-off-by: Ruslan Ruslichenko --- hw/core/fdt_generic_util.c | 158 +++++++++++++++++++++++++++++ include/hw/core/fdt_generic_util.h | 6 ++ 2 files changed, 164 insertions(+) diff --git a/hw/core/fdt_generic_util.c b/hw/core/fdt_generic_util.c index 51b808d9d0..0b374b550d 100644 --- a/hw/core/fdt_generic_util.c +++ b/hw/core/fdt_generic_util.c @@ -403,6 +403,22 @@ static inline uint64_t get_int_be(const void *p, int l= en) } } =20 +/* FIXME: use structs instead of parallel arrays */ + +static const char *fdt_generic_reg_size_prop_names[] =3D { + "#address-cells", + "#size-cells", + "#bus-cells", + "#priority-cells", +}; + +static const int fdt_generic_reg_cells_defaults[] =3D { + 1, + 1, + 0, + 0, +}; + static void fdt_init_qdev_link_prop(Object *obj, ObjectProperty *p, FDTMachineInfo *fdti, const char *node_path, @@ -616,6 +632,146 @@ static void fdt_init_qdev_properties(char *node_path,= FDTMachineInfo *fdti, } } =20 +FDTGenericRegPropInfo* +fdt_get_reg_info(FDTMachineInfo *fdti, char *node_path, Object *dev) +{ + FDTGenericRegPropInfo *reg; + Object *parent =3D NULL; + char *parent_path =3D NULL; + int cell_idx =3D 0; + bool extended =3D true; + Error *errp =3D NULL; + int i; + + if (!object_dynamic_cast(dev, TYPE_SYS_BUS_DEVICE) && + !object_dynamic_cast(dev, TYPE_FDT_GENERIC_MMAP)) { + return NULL; + } + + reg =3D g_new0(FDTGenericRegPropInfo, 1); + + qemu_fdt_getprop_cell(fdti->fdt, node_path, "reg-extended", 0, + &errp); + if (errp) { + error_free(errp); + errp =3D NULL; + extended =3D false; + parent_path =3D qemu_devtree_getparent(fdti->fdt, node_path); + } + + if (parent_path) { + parent =3D fdt_init_get_opaque(fdti, parent_path); + } + + for (reg->n =3D 0;; reg->n++) { + char ph_parent[DT_PATH_LENGTH]; + const char *pnp =3D parent_path; + + reg->parents =3D g_renew(Object *, reg->parents, reg->n + 1); + reg->parents[reg->n] =3D parent; + + if (extended) { + int p_ph =3D qemu_fdt_getprop_cell(fdti->fdt, node_path, + "reg-extended", cell_idx++, + &errp); + if (errp) { + error_free(errp); + errp =3D NULL; + goto exit_reg_parse; + } + if (qemu_devtree_get_node_by_phandle(fdti->fdt, ph_parent, + p_ph)) { + goto exit_reg_parse; + } + + while (!fdt_init_has_opaque(fdti, ph_parent) && + qemu_in_coroutine()) { + fdt_init_yield(fdti); + } + + if (!fdt_init_has_opaque(fdti, ph_parent)) { + goto exit_reg_parse; + } + + reg->parents[reg->n] =3D fdt_init_get_opaque(fdti, ph_parent); + pnp =3D ph_parent; + } + + for (i =3D 0; i < FDT_GENERIC_REG_TUPLE_LENGTH; ++i) { + const char *size_prop_name =3D fdt_generic_reg_size_prop_names= [i]; + int nc =3D qemu_fdt_getprop_cell_inherited(fdti->fdt, node_pat= h, + size_prop_name, 0, &errp); + uint64_t val =3D 0; + + if (errp) { + int size_default =3D fdt_generic_reg_cells_defaults[i]; + + fdt_debug_np("WARNING: no %s for %s container, assuming " + "default of %d\n", size_prop_name, pnp, + size_default); + nc =3D size_default; + error_free(errp); + errp =3D NULL; + } + + reg->x[i] =3D g_renew(uint64_t, reg->x[i], reg->n + 1); + for (int j =3D 0; j < nc; ++j) { + val <<=3D 32; + val |=3D qemu_fdt_getprop_cell(fdti->fdt, node_path, + extended ? "reg-extended" + : "reg", + cell_idx + j, &errp); + if (errp) { + val =3D 0; + break; + } + } + reg->x[i][reg->n] =3D val; + cell_idx +=3D nc; + if (errp) { + goto exit_reg_parse; + } + } + } +exit_reg_parse: + if (errp) { + error_free(errp); + } + + g_free(parent_path); + + return reg; +} + +static void fdt_parse_node_reg_prop(FDTMachineInfo *fdti, char *node_path, + Object *dev) +{ + int i; + + FDTGenericRegPropInfo *reg =3D fdt_get_reg_info(fdti, node_path, dev); + if (!reg) { + return; + } + + if (object_dynamic_cast(dev, TYPE_FDT_GENERIC_MMAP)) { + FDTGenericMMapClass *fmc =3D FDT_GENERIC_MMAP_GET_CLASS(dev); + if (fmc->parse_reg) { + while (fmc->parse_reg(FDT_GENERIC_MMAP(dev), *reg, + &error_abort) && qemu_in_coroutine()) { + fdt_init_yield(fdti); + } + } + } + + g_free(reg->parents); + + for (i =3D 0; i < FDT_GENERIC_REG_TUPLE_LENGTH; ++i) { + g_free(reg->x[i]); + } + + g_free(reg); +} + static void fdt_init_parent_node(Object *dev, Object *parent, char *node_p= ath) { if (dev->parent) { @@ -744,6 +900,8 @@ static int fdt_init_qdev(char *node_path, FDTMachineInf= o *fdti, char *compat) =20 fdt_init_device_realize(fdti, node_path, dev); =20 + fdt_parse_node_reg_prop(fdti, node_path, dev); + g_free(parent_node_path); =20 return 0; diff --git a/include/hw/core/fdt_generic_util.h b/include/hw/core/fdt_gener= ic_util.h index 6fb0708d7a..a04ded41ae 100644 --- a/include/hw/core/fdt_generic_util.h +++ b/include/hw/core/fdt_generic_util.h @@ -127,6 +127,12 @@ typedef struct FDTGenericRegPropInfo { Object **parents; } FDTGenericRegPropInfo; =20 +/* + * Get parsed 'reg' or 'reg-extended' properties from dts node + */ +FDTGenericRegPropInfo* +fdt_get_reg_info(FDTMachineInfo *fdti, char *node_path, Object *dev); + typedef struct FDTGenericMMapClass { /*< private >*/ InterfaceClass parent_class; --=20 2.43.0 From nobody Sat Apr 11 18:38:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1775167102; cv=none; d=zohomail.com; s=zohoarc; b=VnxjRIx/w8NWIXXhQU4qWTlVQQMowsyyFB/ulPnns9tF8O5PikygBe9G9OmP/7yN+p0IraDMad2RS1nasSm1DlvN6mc10nc9db5+OZxVuVmxzm6kwh9/7rVEn28vUxAXmEpgFZjs2TlTG3i0zHAI3tzt5OPVasxSskuD3bX4vY4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775167102; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=7wwyEKp+01Czgx6hMOiu7U9RUmG9r7Ino8NfNmLre3Q=; b=CkqYa5YAyqHZ5ywPFnx84ebleYp0XEDoLCgQxm0u5KmTDGQmUEv9l+8/wQ1kDEopjLyJdwUtZ8z44pfREM4ErbBkOH5xt/1VxnDVxy9fZGUU/Opq+9dRyIeeuxKPMTK4Nx2BWA9RyrfJjO3Sb8EOj43x6djZ4VDMm0y92PxjlRw= 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 1775167102707934.588672641755; Thu, 2 Apr 2026 14:58:22 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Q2R-0008UA-VI; Thu, 02 Apr 2026 17:57:19 -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 1w8Q2O-0008RJ-Pj for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:16 -0400 Received: from mail-ej1-x62d.google.com ([2a00:1450:4864:20::62d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w8Q2N-0007AO-2N for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:16 -0400 Received: by mail-ej1-x62d.google.com with SMTP id a640c23a62f3a-b936331786dso140380366b.3 for ; Thu, 02 Apr 2026 14:57:14 -0700 (PDT) Received: from thinkpad-t470s.. (93-143-182-244.adsl.net.t-com.hr. [93.143.182.244]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b9c3cac0e1asm134009166b.27.2026.04.02.14.57.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 14:57:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775167033; x=1775771833; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=7wwyEKp+01Czgx6hMOiu7U9RUmG9r7Ino8NfNmLre3Q=; b=hJTx89Rmc1d/z+24efKjQZwMzn994uitYnp5u7C0clajh5Sq8o1Pb4N1rwutCEByHv TgugYBbk+Llj3F/xd/HGAid9Il0MZg4YvXkE1l4gPS7+S7WK7x9eenIRhf/ME4oB2iwM EgdPd5v+VQUJqQI73Ebl6l4NKC8Ks2vB+HEnihMmcZVGWgh2ZUFYmomoXs3Wom4dkRNk H30JDBxadrlIl4+NkniSVgjc/83JxcOfl1m/KbyUsQQeWw44fKCen3SVqQgGU1impB4I kQtvw+bJUxKDvbkCYT3nSvmxum/ghDCdWtrsQ4imMArDRAq5K1GSQZx4aJS4WtC2EnyI ahIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775167033; x=1775771833; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=7wwyEKp+01Czgx6hMOiu7U9RUmG9r7Ino8NfNmLre3Q=; b=TjRn5HNVzjwMr/WnOtElJegylzaWA0yE8nbebIGImUs0z2dv2tU2kkB7bAde0+gSCX 7znIgeKeO9jv+dLN3zLHm2hSU1XkRFAHTsxi2A26K92fzNcYQb3XVOsKF1Ddd6EAL4uz x45u/NkJh3J3IPQxophqBZKLbNeliYqdpYv5pH5kofdSdjspM7Gi7x6CCqx1TytxYvwY w3NU3xfB9XzvLd/XYgZZG0xcmRYDuO6NDu+tuihTC0JyMKpZqTP8w/BKrVbuVKC1Y9S8 zCShsC4d9HTCwd19X78OLN9ZEyP+sNvHICVq8vfHjzGZeywMMW/rOwU7da8tTNckC/8s LP+Q== X-Gm-Message-State: AOJu0YyO2mD0+gYOaZARL6FWrlR6spyxeyvSUbbzf0wZY7IIaW9xvrjI DC8BMww9mABLySth4MlPMCvECrarwOaiIHXaSlDdlZz4hilHcyz/5TjzpRsapIja X-Gm-Gg: ATEYQzy87wp3LazE828dxV7pHJgCxSPWXFcbc1ZbJ05PyxXcpaMSWUf+JIHvEvTCDJM vgz1Ck/Y+5bhD7/uGKw0tvAwA95S/XKs/TECTXNIibnHRmoDy138QH2069XseeM+EJkPi54xbl3 +W4NqhOPA3McIabW738Drl4H8Dm6e/wHK6NNPT81obHHTOkrovgnn5S8BLFB2H+U4F0Gzv93PKO giaYdhLzITMdmhx5VCyQ5vgg0GIaojC28FvwIrF8IJmR35YFYASOIf5n3UKWe4k51w4zeLd97l2 fxUUjdpcfGgi/d/uPPlUH/HT5hPiGtnpXvljjSnTBiGp6orwdhcEyQxA+eHYuArb9Rz9m09pW5a EY/Ob8WP8JZrNqrnuNA0xULIsVCcQC5HcjR7Fhvnlg1NT3biJ6QSfzVV3Vgl9z6I9Edh9B5SiVn 3tzvn6lSKE6Dw+J4bNQgITF1wyPS2g72IgfBvVWzzWqhVzk9VRaCpBu20P1MwkUAKyNCFyNk84Q Hvw+rcu X-Received: by 2002:a17:907:25c3:b0:b98:8a9c:7059 with SMTP id a640c23a62f3a-b9c6744d8b8mr26019066b.19.1775167033216; Thu, 02 Apr 2026 14:57:13 -0700 (PDT) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, alex.bennee@linaro.org, peter.maydell@linaro.org, artem_mygaiev@epam.com, volodymyr_babchuk@epam.com, takahiro.nakata.wr@renesas.com, "Edgar E . Iglesias" , Ruslan_Ruslichenko@epam.com, balaton@eik.bme.hu Subject: [PATCH v3 17/33] hw/core/fdt_generic_util: Connect device irqs Date: Thu, 2 Apr 2026 23:56:02 +0200 Message-ID: <20260402215629.745866-18-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260402215629.745866-1-ruslichenko.r@gmail.com> References: <20260402215629.745866-1-ruslichenko.r@gmail.com> 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::62d; envelope-from=ruslichenko.r@gmail.com; helo=mail-ej1-x62d.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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775167105298154101 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko The patch implements IRQ wiring logic for fdt created devices. The wiring performed in two stages. As devices are created, their IRQs saved in the list. After all devices processed, fdt_init_all_irqs() goes through all IRQs and does actual wiring. For IRQs which have multiple source, shared IRQ handler allocated. For interrupt controllers with auto_parent callback implemented and their fdt node has 'interrupt' and 'interrupts-extended' properties empty, the auto_parent() will be called to connect them to their interrupt-parent, for example to CPUs. Signed-off-by: Ruslan Ruslichenko --- hw/core/fdt_generic_util.c | 143 ++++++++++++++++++++++++++++++++++ include/hw/core/fdt_generic.h | 12 +++ 2 files changed, 155 insertions(+) diff --git a/hw/core/fdt_generic_util.c b/hw/core/fdt_generic_util.c index 0b374b550d..b0e26e11bc 100644 --- a/hw/core/fdt_generic_util.c +++ b/hw/core/fdt_generic_util.c @@ -69,6 +69,88 @@ static void fdt_get_irq_info_from_intc(FDTMachineInfo *f= dti, qemu_irq *ret, uint32_t *cells, uint32_t num_cells, uint32_t max, Error **errp); =20 +typedef struct QEMUIRQSharedState { + qemu_irq sink; + int num; + bool (*merge_fn)(bool *, int); +/* FIXME: remove artificial limit */ +#define MAX_IRQ_SHARED_INPUTS 256 + bool inputs[MAX_IRQ_SHARED_INPUTS]; +} QEMUIRQSharedState; + +static bool qemu_irq_shared_or_handler(bool *inputs, int n) +{ + int i; + + assert(n < MAX_IRQ_SHARED_INPUTS); + + for (i =3D 0; i < n; ++i) { + if (inputs[i]) { + return true; + } + } + return false; +} + +static void qemu_irq_shared_handler(void *opaque, int n, int level) +{ + QEMUIRQSharedState *s =3D opaque; + + assert(n < MAX_IRQ_SHARED_INPUTS); + s->inputs[n] =3D level; + qemu_set_irq(s->sink, s->merge_fn(s->inputs, s->num)); +} + +static void fdt_init_all_irqs(FDTMachineInfo *fdti) +{ + while (fdti->irqs) { + FDTIRQConnection *first =3D fdti->irqs; + qemu_irq sink =3D first->irq; + bool (*merge_fn)(bool *, int) =3D first->merge_fn; + int num_sources =3D 0; + FDTIRQConnection *irq; + + for (irq =3D first; irq; irq =3D irq->next) { + if (irq->irq =3D=3D sink) { /* Same sink */ + num_sources++; + } + } + if (num_sources > 1) { + QEMUIRQSharedState *s =3D g_malloc0(sizeof *s); + s->sink =3D sink; + s->merge_fn =3D merge_fn; + qemu_irq *sources =3D qemu_allocate_irqs(qemu_irq_shared_handl= er, s, + num_sources); + for (irq =3D first; irq; irq =3D irq->next) { + if (irq->irq =3D=3D sink) { + char *shared_irq_name =3D g_strdup_printf("shared-irq-= %p", + *sources); + + if (irq->merge_fn !=3D merge_fn) { + fprintf(stderr, "ERROR: inconsistent IRQ merge fns= \n"); + exit(1); + } + + object_property_add_child(OBJECT(irq->dev), shared_irq= _name, + OBJECT(*sources)); + g_free(shared_irq_name); + irq->irq =3D *(sources++); + s->num++; + } + } + } + fdt_debug("%s: connected to %s irq line %d (%s)\n", + first->sink_info ? first->sink_info : "", + object_get_canonical_path(OBJECT(first->dev)), + first->i, first->name ? first->name : ""); + + qdev_connect_gpio_out_named(DEVICE(first->dev), first->name, first= ->i, + first->irq); + fdti->irqs =3D first->next; + g_free(first); + } +} + FDTMachineInfo *fdt_generic_create_machine(void *fdt, qemu_irq *cpu_irq) { FDTMachineInfo *fdti =3D fdt_init_new_fdti(fdt); @@ -82,6 +164,7 @@ FDTMachineInfo *fdt_generic_create_machine(void *fdt, qe= mu_irq *cpu_irq) while (qemu_co_enter_next(fdti->cq, NULL)) { ; } + fdt_init_all_irqs(fdti); memory_region_transaction_commit(); =20 /* FIXME: Populate these from DTS and create CPU clusters. */ @@ -772,6 +855,64 @@ static void fdt_parse_node_reg_prop(FDTMachineInfo *fd= ti, char *node_path, g_free(reg); } =20 +static void fdt_parse_node_irq_prop(FDTMachineInfo *fdti, char *node_path, + Object *dev) +{ + int is_intc, len; + int i, j; + + if (!object_dynamic_cast(dev, TYPE_SYS_BUS_DEVICE)) { + return; + } + + fdt_get_property(fdti->fdt, fdt_path_offset(fdti->fdt, node_path), + "interrupt-controller", &len); + is_intc =3D len >=3D 0; + fdt_debug_np("is interrupt controller: %c\n", + is_intc ? 'y' : 'n'); + + /* connect irq */ + j =3D 0; + for (i =3D 0;; i++) { + char irq_info[6 * 1024]; + char *irq_info_p =3D irq_info; + len =3D -1; + qemu_irq *irqs =3D fdt_get_irq_info(fdti, node_path, i, irq_info); + /* INTCs inferr their top level, if no IRQ connection specified */ + fdt_get_property(fdti->fdt, fdt_path_offset(fdti->fdt, node_path), + "interrupts-extended", &len); + if (!irqs && is_intc && i =3D=3D 0 && len <=3D 0) { + FDTGenericIntc *id =3D (FDTGenericIntc *)object_dynamic_cast( + dev, TYPE_FDT_GENERIC_INTC); + FDTGenericIntcClass *idc =3D FDT_GENERIC_INTC_GET_CLASS(id); + if (id && idc->auto_parent) { + Error *err =3D NULL; + idc->auto_parent(id, &err); + } else { + irqs =3D fdti->irq_base; + } + } + if (!irqs) { + break; + } + while (*irqs) { + FDTIRQConnection *irq =3D g_new0(FDTIRQConnection, 1); + *irq =3D (FDTIRQConnection) { + .dev =3D DEVICE(dev), + .name =3D SYSBUS_DEVICE_GPIO_IRQ, + .merge_fn =3D qemu_irq_shared_or_handler, + .i =3D j, + .irq =3D *irqs, + .sink_info =3D g_strdup(irq_info_p), + .next =3D fdti->irqs + }; + j++; + fdti->irqs =3D irq; + irqs++; + } + } +} + static void fdt_init_parent_node(Object *dev, Object *parent, char *node_p= ath) { if (dev->parent) { @@ -902,6 +1043,8 @@ static int fdt_init_qdev(char *node_path, FDTMachineIn= fo *fdti, char *compat) =20 fdt_parse_node_reg_prop(fdti, node_path, dev); =20 + fdt_parse_node_irq_prop(fdti, node_path, dev); + g_free(parent_node_path); =20 return 0; diff --git a/include/hw/core/fdt_generic.h b/include/hw/core/fdt_generic.h index 05ab07e08c..3961615a9c 100644 --- a/include/hw/core/fdt_generic.h +++ b/include/hw/core/fdt_generic.h @@ -25,6 +25,16 @@ typedef struct FDTCPUCluster { bool user; } FDTCPUCluster; =20 +typedef struct FDTIRQConnection { + DeviceState *dev; + const char *name; + int i; + bool (*merge_fn)(bool *, int); + qemu_irq irq; + char *sink_info; /* Debug only */ + void *next; +} FDTIRQConnection; + typedef struct FDTMachineInfo { /* the fdt blob */ void *fdt; @@ -34,6 +44,8 @@ typedef struct FDTMachineInfo { FDTDevOpaque *dev_opaques; /* recheck coroutine queue */ CoQueue *cq; + /* list of all IRQ connections */ + FDTIRQConnection *irqs; /* list of all CPU clusters */ FDTCPUCluster *clusters; } FDTMachineInfo; --=20 2.43.0 From nobody Sat Apr 11 18:38:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1775167139; cv=none; d=zohomail.com; s=zohoarc; b=Z1lFPCZHZh1mWk3ZKQrnNRwOzmxnIj3fK7lDtqzjqPJgtkDQd9G0WZaFy+4bsh/FQv3NmP/uZGniBN08mUXUjIeK/mBI9CGU+kHEjtaenSjRAWl37Iwjcj0SRlQK6W/2XkAOqUoZVRQ92PiEyeFMCg8scUWDML/cGk2U3vapiRo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775167139; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=WLJlPZb4J5z4IvDnwriqBPXyQNO+ITQ2oYN4FJS7gQA=; b=ZlJHvqFxS7txuUhOI1WI7KZ2FTX83plhUaImgwVOapXi8ha+9pJzyYppO2Wt93V/+mMjQfPvISSA9TFHhREluybJtbrb/VlkEs7YIGLFuhc8je09t+O1tA3IP3dGq441cPuIBjhftM6nAouxW9B6K272mHSKrJcbqlpD5Pfqruw= 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 1775167139727492.16495838315916; Thu, 2 Apr 2026 14:58:59 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Q2c-00009s-C5; Thu, 02 Apr 2026 17:57:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w8Q2R-0008UC-Cp for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:19 -0400 Received: from mail-ed1-x52f.google.com ([2a00:1450:4864:20::52f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w8Q2P-0007B2-5F for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:18 -0400 Received: by mail-ed1-x52f.google.com with SMTP id 4fb4d7f45d1cf-6634bb959a2so1886492a12.1 for ; Thu, 02 Apr 2026 14:57:16 -0700 (PDT) Received: from thinkpad-t470s.. (93-143-182-244.adsl.net.t-com.hr. [93.143.182.244]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b9c3cac0e1asm134009166b.27.2026.04.02.14.57.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 14:57:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775167035; x=1775771835; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=WLJlPZb4J5z4IvDnwriqBPXyQNO+ITQ2oYN4FJS7gQA=; b=hof/Qxwtl643jA228xoUw7Y/NCHknBchTrkKyQ4j5+oY7tZx+2XjBtXywQ0idBPPW7 7PWURKxJuz6tA/ZOx4TD4bYBUGZZQ6YNjUElt8nzNXkntHjb7jOHRvnba2HBQAIFBBrD Pb9OWuGr5DdVsFfe5jk2KRl9Cmju8roF6tRzrGJ4ze1KlPzDgx9qe9XTJ2lL6m2I6aqz CxD35M3jxOLia3tVBEfr3OzjqNrFbMRUhU9pILJY6htlHyLwNTBmulvCsbmUXa7mX3gv AmBCaHEcuxMRhSY697psAmNvRxcwPwA58czx/FH41043egO4B+eqkcu5lzLDZB3ybLIV ySAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775167035; x=1775771835; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=WLJlPZb4J5z4IvDnwriqBPXyQNO+ITQ2oYN4FJS7gQA=; b=sfOuEev9jRDWMfzlL8og5vFBpmOcbBDD22SXWH3uvxLquzfxGaKSfnKtmN7BjHX1af f9mbocUIy+JVdo07FbuPjl/ojIsQf5BApQQUpKD9BG4UchOl744Qfx3BTrsa1OeCL/Pg BUJWC8y2FS21tekB22y/ZGlomEjIfWCuEp9K/BYwTdLbgVMuSVtzKGUjXrfguQNujNOa lJD0nDzFyyz+M5MNOcMJslmaJmH8r2nsAkfP842n5LtEC1WeaklASuYxyDUFYH/hNyw+ 9gShY8AtfZdi7B8rGKGHPxddh59rHhYWZtfqZFIUVZ8CxcIz84m6C8Vwf+bka0JU381V vBKQ== X-Gm-Message-State: AOJu0YxdKgEzA6gN9jcdMH/P1KNKeGPW1nDng8Hd+YxIblrZe2K6Qw7G O3Ex8UuqFNMUiBixsVxY9gDRvJwgaB1VfF0zn3lncq2DfrLxirFkM/h3kJw4drTg X-Gm-Gg: ATEYQzy//8eVe4eQbHK5i+IccB+OlCwJM3aTIWvqi0Z8CIATWeIwjuaAyIrcgoHsfhH gHabnZhMX2y2ahEIjAz61Xg24nfyrm36Im4vgOE0CnS/p7eQ5qSyk+mUIekf547SuAdT9PO5bkl rjbGKZz36NDXyEkeM6WoDyygfC6rDUxrZwg9WgQWQvjJaYJtfFd6jEl2iTaT9WZ8E2+5T0jEQXR fp3dC7zr2kOqEWzbcwXdBDYYG27CYyJD2X1Ml2K5UXZl5qZZfYn8w+rVcXV8boLyJcUSn61DGKV FBVXWfrsXACITkYPuH5HSrnccYFQz7jqt/yNyefHpD0KGcazK14kbUK7af/fmEo73Xs3idrcd3R ZOkSw6W0mV9mcpBPXSEOO61rVKfUKUfozZxyZcbDE2DE3rBme4ZSKf4e0qQSg5e5CGznrsF1BMD Q0hq6QKrBOL3iojk2LXWuBpSIS/N5Y8a+NT+nEXKr2i/MFMx/nyMpRAZ6GV19219ALCWszcA== X-Received: by 2002:a17:907:e107:b0:b93:56a4:d6bc with SMTP id a640c23a62f3a-b9c6798d3a2mr16784266b.49.1775167035121; Thu, 02 Apr 2026 14:57:15 -0700 (PDT) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, alex.bennee@linaro.org, peter.maydell@linaro.org, artem_mygaiev@epam.com, volodymyr_babchuk@epam.com, takahiro.nakata.wr@renesas.com, "Edgar E . Iglesias" , Ruslan_Ruslichenko@epam.com, balaton@eik.bme.hu Subject: [PATCH v3 18/33] hw/core/fdt_generic_util: realize cpu clusters Date: Thu, 2 Apr 2026 23:56:03 +0200 Message-ID: <20260402215629.745866-19-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260402215629.745866-1-ruslichenko.r@gmail.com> References: <20260402215629.745866-1-ruslichenko.r@gmail.com> 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::52f; envelope-from=ruslichenko.r@gmail.com; helo=mail-ed1-x52f.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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775167141773154100 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko Realize cpu clusters at the end of fdt machine creation process, as they need to be created after cpu's nodes are realized. Signed-off-by: Ruslan Ruslichenko --- hw/core/fdt_generic_util.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/hw/core/fdt_generic_util.c b/hw/core/fdt_generic_util.c index b0e26e11bc..f3a47cbafe 100644 --- a/hw/core/fdt_generic_util.c +++ b/hw/core/fdt_generic_util.c @@ -151,6 +151,16 @@ static void fdt_init_all_irqs(FDTMachineInfo *fdti) } } =20 +static void fdt_init_cpu_clusters(FDTMachineInfo *fdti) +{ + FDTCPUCluster *cl =3D fdti->clusters; + + while (cl) { + qdev_realize(DEVICE(cl->cpu_cluster), NULL, &error_fatal); + cl =3D cl->next; + } +} + FDTMachineInfo *fdt_generic_create_machine(void *fdt, qemu_irq *cpu_irq) { FDTMachineInfo *fdti =3D fdt_init_new_fdti(fdt); @@ -164,6 +174,7 @@ FDTMachineInfo *fdt_generic_create_machine(void *fdt, q= emu_irq *cpu_irq) while (qemu_co_enter_next(fdti->cq, NULL)) { ; } + fdt_init_cpu_clusters(fdti); fdt_init_all_irqs(fdti); memory_region_transaction_commit(); =20 --=20 2.43.0 From nobody Sat Apr 11 18:38:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1775167050; cv=none; d=zohomail.com; s=zohoarc; b=Tjk+nNhXdpfAwmJMMjRdeULjxylwGUNGmkQpSk7cEjziLopbu2gGtgVMwg2dYxuj9yZAXYlCPhe0AIPsBeidJ8wiXtjhl6tLj2orxV7oX7jKNNGK485qkmx25JiRYrJcfWQGXzgRQK1EZYAIW/XrKlQbKwnFQuPRz0BagX+DYmk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775167050; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=52Rc446xe2dQaFht4UOxDu+6HVWFzHT4d7x+yDo+hRs=; b=cqe/+EVzNB8lEeQMbqE7Btuto80cqv357jVtUf1/5kH8JPNznJq2xZZfFtW43PbMX7zz/6UDPXh/nZ1WfLJBt/ZQQbUnyx8Cz9WHQuxKYMZ9dk6e1+ec6EjBbhSSTqKBfwvQMbk+3874rNkYZqGooi9dFYhIgc/VXj3QrSUMt+U= 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 1775167050254223.04613672690778; Thu, 2 Apr 2026 14:57:30 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Q2Y-00005y-59; Thu, 02 Apr 2026 17:57:26 -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 1w8Q2S-0008V0-SA for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:20 -0400 Received: from mail-ej1-x62e.google.com ([2a00:1450:4864:20::62e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w8Q2R-0007BU-60 for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:20 -0400 Received: by mail-ej1-x62e.google.com with SMTP id a640c23a62f3a-b79f8f7ea43so231480566b.2 for ; Thu, 02 Apr 2026 14:57:18 -0700 (PDT) Received: from thinkpad-t470s.. (93-143-182-244.adsl.net.t-com.hr. [93.143.182.244]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b9c3cac0e1asm134009166b.27.2026.04.02.14.57.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 14:57:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775167037; x=1775771837; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=52Rc446xe2dQaFht4UOxDu+6HVWFzHT4d7x+yDo+hRs=; b=ROkzD9I2olfsjVwIZpqRDwZgui1OjDq/j+qsOYl5PENVBOgndcBPXEgJNPDtaZ9r1G b3++fQ2AYhfbFFsoKVQi0kcugeqRqaFv90GoUs/ycYJ9hQ6/D4K3zwFy+Gk/iv6xEmkh kIjv6oGGwn/dS8zL5pMkyrJy6SP3XcBJIZgAZdY6ZTHC70namrvInW9hDUF0HeL6IU1V xtIYRRweQ0twM83In+lBgkt1I0LdLWxhCAMRKWHNIgTnqK2rtNY59tsZM4DdBOIF6jg1 k545HkYnuxy3UZwV3JXm4pRFNL4+CDs8EoPn93fBcUbdgTefEl3eDOZ7qlWerBAhKFHV XhQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775167037; x=1775771837; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=52Rc446xe2dQaFht4UOxDu+6HVWFzHT4d7x+yDo+hRs=; b=ilZyN0lvSChuUZu+OoX5CqduxFKdFUrl5ZDh3YA1f4o380kqiUx6BA0iTTgSZnh+7V 3t78spXSnLGU9/iI7Gzh//qshswWn0E55AKyYvhOwfgDB+BHt856U5X/rLTKxxANt+b9 N2FjFpIVWrP2wKx+qr9ZFiTEXyj14AlMIDcAf3+73EFFtFWvJHknRNFw2JZqjbK2VdFc jcNSzXfnAFAomV+svmRgVT5VtY58hqWxD/wFhWOokd9tXy/lMiAH0Oo5sbn9W80ba4kG KTTE8Tj8pOC+XOlDWBnGj1WnWZvVoRw8Dxu4M/RGuuUCGfn6ENr1FnncFffUltkCf2zy Zb+w== X-Gm-Message-State: AOJu0YxMIXx/anPcAga1gEIl7kUXZSspVZk0piT8/2ZV3qp/zGTr5/Xu NAddrzZ+lWA6gVvvhbn+LlluKdDuwWUhO3TxaTpJ2mLj5WVNk8jnN7wAsvKXh3hb X-Gm-Gg: ATEYQzy5UqTrjpOKmk8OZ+t3S5aPUqAXNAFvU4K+aJ2/6LVjj9AVpGtpJjMVhd0XDTE q008aaQ4FLlWu5csMTajWdCLmL2ox4o0JR2JoqnOyMeP7mNmYNNX8J9FM5yv6ChVIiBE/cj/LL1 AhaI8hU32ZDjD4YyjYMvnFjJqtUWusuJbU2S0NHqsb6GEwFV1mBScJHujtIbxcAm5aidWYkzVMX cY+FWiIB1D0AxIL3UfqVmEBLKjna/haynpH0fVC+ESwt52CLj0rFaZJcTCI6/0naPPwRpdyzpHb K4ormATVezOlYRqkeU3ZOBjnxa3kJ2fk1E5YUKddVn8CmyAX+yum1Awh1Tm8g00Zpbhu9tP0Fgb uenBvy8qfaRf5SbJuMVhpkLOBSjt3bU9AtJvRrbZkHqCaY4aDtT+W/uCpEyDYDtHarc3n+58pWl Wh7ozhdbCBzwmbIhx20/oszZZcQskLKpRiM5NGZB8FkPoMMN10ze4WHUgwI2jMxDg5coZ9+Q== X-Received: by 2002:a17:907:1807:b0:b98:28d3:7cec with SMTP id a640c23a62f3a-b9c67b47d8amr30530066b.43.1775167036860; Thu, 02 Apr 2026 14:57:16 -0700 (PDT) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, alex.bennee@linaro.org, peter.maydell@linaro.org, artem_mygaiev@epam.com, volodymyr_babchuk@epam.com, takahiro.nakata.wr@renesas.com, "Edgar E . Iglesias" , Ruslan_Ruslichenko@epam.com, balaton@eik.bme.hu, Pierrick Bouvier , Paolo Bonzini , Richard Henderson Subject: [PATCH v3 19/33] hw/core: add fdt_generic to the build Date: Thu, 2 Apr 2026 23:56:04 +0200 Message-ID: <20260402215629.745866-20-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260402215629.745866-1-ruslichenko.r@gmail.com> References: <20260402215629.745866-1-ruslichenko.r@gmail.com> 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::62e; envelope-from=ruslichenko.r@gmail.com; helo=mail-ej1-x62e.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, FREEMAIL_FROM=0.001, 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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775167053264158500 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko Add `fdt_generic.c` and `fdt_generic_util.c` to build by default. Signed-off-by: Ruslan Ruslichenko --- hw/core/meson.build | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hw/core/meson.build b/hw/core/meson.build index 8a96567de8..b5ba8160e6 100644 --- a/hw/core/meson.build +++ b/hw/core/meson.build @@ -29,6 +29,8 @@ system_ss.add(when: 'CONFIG_EIF', if_true: [files('eif.c'= ), zlib, libcbor, gnutl =20 system_ss.add(files( 'cpu-system.c', + 'fdt_generic.c', + 'fdt_generic_util.c', 'fw-path-provider.c', 'hotplug.c', 'loader.c', --=20 2.43.0 From nobody Sat Apr 11 18:38:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1775167106; cv=none; d=zohomail.com; s=zohoarc; b=CZXYGzDiZ9rP61TJfIicFRmYfSz2VltFsTbEn3YkjTBtGCMun2/aSSFZvmKWEXxwvPHBwMAEmayUuWd+HivDLXetwx5uHKBrpAcY5Vt2jLYRLdqxYeLML4zOapEnCeoOBMzEbdOW7VxrUwWd/fE9UxvynfK7Nc5tUngpCGtDeZY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775167106; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=bR48XpEfrTAurqrwxi3w+VRNBBsgCOfbhfQQhlmqcQo=; b=EuFUXimBH+dyJNXxAAeiUx8S7mf5Nn98afrGWwMLnZHwAnjJyH/rs6Tgn5pBvS7zTw9ExS5cQLoId/iPvSykuBnFGaZ6cXgnvuIjI1XlE046TqvaefvVrWMgccPwJyiPYG9dhH7h5UiX6sbLHbAL2MpPrDux0yiFy2G8CzG/W28= 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 1775167106653831.7990367765395; Thu, 2 Apr 2026 14:58:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Q2g-0000BK-5K; Thu, 02 Apr 2026 17:57:34 -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 1w8Q2V-0008WN-Gf for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:24 -0400 Received: from mail-ej1-x62b.google.com ([2a00:1450:4864:20::62b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w8Q2S-0007Bx-L4 for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:22 -0400 Received: by mail-ej1-x62b.google.com with SMTP id a640c23a62f3a-b97e6e48b24so206789366b.2 for ; Thu, 02 Apr 2026 14:57:20 -0700 (PDT) Received: from thinkpad-t470s.. (93-143-182-244.adsl.net.t-com.hr. [93.143.182.244]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b9c3cac0e1asm134009166b.27.2026.04.02.14.57.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 14:57:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775167038; x=1775771838; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=bR48XpEfrTAurqrwxi3w+VRNBBsgCOfbhfQQhlmqcQo=; b=qkQMl+rXJ/i5LPkZjJk83bSwIpCUFnB+a3uJA5sN/1PCu+j8D1tKjaHCGp8L44hgvX mI7x+dFC2/CEDe39ET401qGsdanAhUJKNObnNH43KSTQSWzy1QSiXCHMA/5Jc1xC2BnJ pXO3T+49Fs/P3VhcjnpPrgbvy++YmzQgvmlZEue57nROBuTZsZlwUQ47fom0bN4Uruv4 qjuO/EevcXpqvZ8KGYyhU7zX2cOIbEq5PRK49/2MWyfFfD0BgG5HE3H4t06WBTnXBiK3 x2LFbRsabMdXbc1D/ihoX/wbRIzAXNu9bGAkEHYnBVm2qICXWt3w2HS60pJ6A7MkH4Kl xKwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775167038; x=1775771838; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=bR48XpEfrTAurqrwxi3w+VRNBBsgCOfbhfQQhlmqcQo=; b=QcAcsGU/Ryx4e5jpwrMmk0r1YMmoQqM5IcL3Th9h/4M3lp15UvBuO3dfgU8O6CHcWQ WKp5sftoC/Ajg9xxsa9ZQDEh94QewP1UnYwHdBZ6tX8nkyOO0AJk6KaoZNjROx1CIiJs BBkJ5dbOCoc/W1rd8qz0aE3ufIkoScqc/751evzt+yCrb3cirtnE4AgXGop1AMhf0An2 HOSLlObL2J92K2BUW3TVNyRl80BvkjClFzgiTS7GbGomoBHzR3F6Hdw5+zXGVc7DeHe7 ovUzjG821n9nuvPNQaP6vGAWqG5aBEnUsiQXFV19dJpXfaGEJqcWl4XwaZKC5wUQN1Lt RnIA== X-Gm-Message-State: AOJu0Yy1vENXR1gBkBoFOlLMrSoPQASk+lFFijNIdyQgmNCXFLLMQiAo cZCHhRHI6c/9cB1AgyV598mnSR+umRxwg2k0kdSD9bkElzy53ajfIU2tMkA2tbgm X-Gm-Gg: AeBDiessStP2ImBNBCHOErEESGjmueY/F4FkQPiKN4My/mkoovUvuwLJNEUUvNLw9J0 /+sbKsENZFQSGaGTgl7m+mFeVmsGYtKFxaoTIf4HceDNPsUvzZC9ch5d8qiuL6jBcz05lj3xDM0 +Ab/SC5Mdsueo/Nq3fB1RCXqVyNRr16oEM1kcOz2RhrVRk1XOiJE4YNilmJRyYY6MOXZihLjtIe qPp68FQvk+cBuDLFHPYBIV0f4ITiYDcTRTZHtz3kWczbvQmuWf/JMe85FRYERFOI4iVim0bQJl+ MniRhz/m6YdkBPp6z/vCK2/lTYchi4OPVbqzy1J845rdHg8+zbnxel3gndQAj4MbLmiIBBwpXFT jatJaPrYQkims3yad7je39F1adL5gVljpfc4f4k0AvigrPiu78+W2hvoYf5dom4706qgDPWBEsp ONTnT5O5A+nELXu0Wl0pQ56zqK06R5yBHWt67i6xaqrKIBKERbhQIohhc4JATAzQC8jGaORg== X-Received: by 2002:a17:907:802:b0:b9c:530b:7986 with SMTP id a640c23a62f3a-b9c67422988mr24737266b.6.1775167038411; Thu, 02 Apr 2026 14:57:18 -0700 (PDT) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, alex.bennee@linaro.org, peter.maydell@linaro.org, artem_mygaiev@epam.com, volodymyr_babchuk@epam.com, takahiro.nakata.wr@renesas.com, "Edgar E . Iglesias" , Ruslan_Ruslichenko@epam.com, balaton@eik.bme.hu Subject: [PATCH v3 20/33] hw/arm: add generic ARM machine initialized by FDT Date: Thu, 2 Apr 2026 23:56:05 +0200 Message-ID: <20260402215629.745866-21-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260402215629.745866-1-ruslichenko.r@gmail.com> References: <20260402215629.745866-1-ruslichenko.r@gmail.com> 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::62b; envelope-from=ruslichenko.r@gmail.com; helo=mail-ej1-x62b.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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775167109388154100 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko This patch introduces new ARM machine model, which is fully instantiated from a Device Tree description. This model uses fdt_generic framework to dynamically construct system topology based on provided DTB, instead of standard machines which rely on hardcoded models in C files. This allows to contruct machines with custom memory maps, device structures without the need to modify and re-build QEMU sources each time. Signed-off-by: Ruslan Ruslichenko --- hw/arm/arm_generic_fdt.c | 172 +++++++++++++++++++++++++++++++++++++++ hw/arm/meson.build | 2 + 2 files changed, 174 insertions(+) create mode 100644 hw/arm/arm_generic_fdt.c diff --git a/hw/arm/arm_generic_fdt.c b/hw/arm/arm_generic_fdt.c new file mode 100644 index 0000000000..7b50957a82 --- /dev/null +++ b/hw/arm/arm_generic_fdt.c @@ -0,0 +1,172 @@ +/* + * SPDX-License-Identifier: GPL-2.0-or-later + * + * Copyright (c) 2012 Xilinx. Inc + * Copyright (c) 2012 Peter A.G. Crosthwaite (peter.crosthwaite@xilinx.com) + * + * 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. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, see . + */ + +#include "qemu/osdep.h" +#include "cpu.h" +#include "hw/core/boards.h" +#include "hw/core/hw-error.h" +#include "qapi/error.h" +#include "qemu/error-report.h" +#include "qemu/option.h" +#include "qom/object.h" +#include "system/system.h" +#include "system/qtest.h" +#include "hw/arm/boot.h" +#include "hw/arm/machines-qom.h" + +#include +#include "hw/core/fdt_generic_util.h" + +#define QTEST_RUNNING (qtest_enabled() && qtest_driver()) + +struct ARMGenericFDTState { + MachineState parent; + + struct arm_boot_info bootinfo; + + char *hw_dtb; +}; + +#define TYPE_ARM_GENERIC_FDT_MACHINE MACHINE_TYPE_NAME("arm-generic-fdt") + +OBJECT_DECLARE_SIMPLE_TYPE(ARMGenericFDTState, ARM_GENERIC_FDT_MACHINE) + +static void init_machine(void *fdt, ARMGenericFDTState *s) +{ + FDTMachineInfo *fdti; + MemoryRegion *mem_area; + Error *errp =3D NULL; + char **node_path; + + node_path =3D qemu_fdt_node_unit_path(fdt, "memory", &errp); + if (errp) { + error_report_err(errp); + exit(1); + } + if (!node_path || !g_str_has_prefix(node_path[0], "/memory")) { + error_report("Failed to find /memory node"); + exit(1); + } + + /* Instantiate peripherals from the FDT. */ + fdti =3D fdt_generic_create_machine(fdt, NULL); + + mem_area =3D MEMORY_REGION(object_resolve_path(node_path[0], NULL)); + + s->bootinfo.loader_start =3D object_property_get_int(OBJECT(mem_area), + "addr", NULL); + + s->bootinfo.ram_size =3D object_property_get_int(OBJECT(mem_area), + "size", NULL); + + fdt_init_destroy_fdti(fdti); + g_strfreev(node_path); +} + +static void arm_generic_fdt_init(MachineState *machine) +{ + int fdt_size; + void *hw_fdt =3D NULL; + ARMGenericFDTState *s =3D ARM_GENERIC_FDT_MACHINE(machine); + + if (!s->hw_dtb) { + if (!QTEST_RUNNING) { + /* + * Just return without error if running qtest, as we never hav= e a + * device tree + */ + hw_error("DTB must be specified for %s machine model\n", + MACHINE_GET_CLASS(machine)->name); + } + return; + } + + hw_fdt =3D load_device_tree(s->hw_dtb, &fdt_size); + if (!hw_fdt) { + error_report("Error: Unable to load Device Tree %s", s->hw_dtb); + exit(1); + } + + init_machine(hw_fdt, s); + + s->bootinfo.kernel_filename =3D machine->kernel_filename; + s->bootinfo.kernel_cmdline =3D machine->kernel_cmdline; + s->bootinfo.initrd_filename =3D machine->initrd_filename; + s->bootinfo.board_id =3D -1; + s->bootinfo.psci_conduit =3D QEMU_PSCI_CONDUIT_DISABLED; + + /* + * Expect a direct kernel boot if the '-kernel' option is specified. + * In this case, QEMU provides the PSCI implementation. + */ + if (machine->kernel_filename) { + s->bootinfo.psci_conduit =3D QEMU_PSCI_CONDUIT_SMC; + } + + arm_load_kernel(ARM_CPU(first_cpu), machine, &s->bootinfo); + + return; +} + +static char *arm_generic_fdt_get_hw_dtb(Object *obj, Error **errp) +{ + ARMGenericFDTState *s =3D ARM_GENERIC_FDT_MACHINE(obj); + + return g_strdup(s->hw_dtb); +} + +static void arm_generic_fdt_set_hw_dtb(Object *obj, const char *value, + Error **errp) +{ + ARMGenericFDTState *s =3D ARM_GENERIC_FDT_MACHINE(obj); + + s->hw_dtb =3D g_strdup(value); +} + +static void arm_generic_fdt_class_init(ObjectClass *oc, const void *data) +{ + MachineClass *mc =3D MACHINE_CLASS(oc); + + mc->desc =3D "ARM device tree driven machine model"; + mc->init =3D arm_generic_fdt_init; + mc->max_cpus =3D 64; + mc->default_cpus =3D 4; + + mc->pci_allow_0_address =3D true; + mc->minimum_page_bits =3D 12; + mc->smp_props.clusters_supported =3D true; + + object_class_property_add_str(oc, "hw-dtb", + arm_generic_fdt_get_hw_dtb, + arm_generic_fdt_set_hw_dtb); + object_class_property_set_description(oc, "hw-dtb", + "Hardware device-tree file with description " + "used to create the emulated machine"); +} + +static const TypeInfo arm_generic_fdt_machine_info =3D { + .name =3D TYPE_ARM_GENERIC_FDT_MACHINE, + .parent =3D TYPE_MACHINE, + .instance_size =3D sizeof(ARMGenericFDTState), + .class_init =3D arm_generic_fdt_class_init, + .interfaces =3D arm_machine_interfaces, +}; + +static void arm_generic_fdt_register_type(void) +{ + type_register_static(&arm_generic_fdt_machine_info); +} + +type_init(arm_generic_fdt_register_type) diff --git a/hw/arm/meson.build b/hw/arm/meson.build index b187b946f0..e62fabbb6c 100644 --- a/hw/arm/meson.build +++ b/hw/arm/meson.build @@ -1,4 +1,6 @@ arm_ss =3D ss.source_set() +arm_ss.add(files('arm_generic_fdt.c')) + arm_common_ss =3D ss.source_set() arm_common_ss.add(when: 'CONFIG_ARM_VIRT', if_true: files('virt.c')) arm_common_ss.add(when: 'CONFIG_ACPI', if_true: files('virt-acpi-build.c')) --=20 2.43.0 From nobody Sat Apr 11 18:38:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1775167114; cv=none; d=zohomail.com; s=zohoarc; b=R5j1/7i/U05r5JhDDWdfLiM2Xh+4dxxggFGDk41Mr302CR6dGp/68CvvbzpaAajjiQm77nIZytpL4eyImBPnFmPfenOpBk/QDpGhJWXtmiHec4spZ41Psw/XWrjQYxknv3fv5pldT+BihLpIbCPdV9P3uOteKQaeg8Ec2ATTqYs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775167114; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Iq6P3SESs/IOCtPL61KoE1DsZM3683YfrNg3jTL5uxc=; b=i/jSvUyKTNkKr5s3bsXIyXhNAtOnRXfE85IyyeBwBRREI7OYjUiPuAUulUpeksFhuZdBG3jcOb2equ4Xbux7s8uX9fc2cUGBEzdFCYGTs2u/drz5tuhXo9q3gC6IqaZDMafRarcxka2nyOMWrWuODCRQB3q/VJiC5SlXI1uAIR0= 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 1775167114644752.3263670468571; Thu, 2 Apr 2026 14:58:34 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Q2k-0000GD-K0; Thu, 02 Apr 2026 17:57:39 -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 1w8Q2W-00005L-Pe for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:25 -0400 Received: from mail-ej1-x62b.google.com ([2a00:1450:4864:20::62b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w8Q2T-0007CW-VD for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:23 -0400 Received: by mail-ej1-x62b.google.com with SMTP id a640c23a62f3a-b7cf4a975d2so176158166b.2 for ; Thu, 02 Apr 2026 14:57:21 -0700 (PDT) Received: from thinkpad-t470s.. (93-143-182-244.adsl.net.t-com.hr. [93.143.182.244]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b9c3cac0e1asm134009166b.27.2026.04.02.14.57.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 14:57:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775167040; x=1775771840; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Iq6P3SESs/IOCtPL61KoE1DsZM3683YfrNg3jTL5uxc=; b=N3lcUhX315uXxCps8mesZsW4BlznRcdmf1RaNaShhwHw4NcLcWnZyB8E1nmZTrVpZs 8mEzC3F9hlkz93b/FGEJF1eSOVK/P4AxJb1JPRIuWO6Ig4I2TF8rWpgAXnKSLNWeP2pA xpj2B5BYnBfRAt+8XZkwO9ODjcE6hRW4PnggimQYJmzUvaXHxkToreyQx9n2vBk8d10G CmlmNVFHFGTj0XlwBDE+Y/ZMU5vdxorUiLpvt/vH0UKQ3k6JcAgZt+PIwSpUwFEFkKcY 70i4Q3cGRoJzm5aKi2PryL9FC1+88Fr+PbiOsWRTXQasQdd/bYyIDoft4jWZ5L8KicpI dgbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775167040; x=1775771840; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Iq6P3SESs/IOCtPL61KoE1DsZM3683YfrNg3jTL5uxc=; b=SKfnODClgUPVUSa5KKXrGbiyI7bJAF32C5rQ3axVF6eZaS7nBQooKVPgAh2O5ZoKPr yJN/nBrfNgMgThy9RgWwCXNrG40HQK85yFep07PRY0IkgN6ySYso8+1M4l5l0FRl9mLv rbt9sK5Y9rrOQY4EhrvWi/WL48JE5/eeWoM7LPKOKT1r8bf1PBzjKdLbnZaIIFnzihul VaGmg4RzrllDgzUEcJUv6fVh5IS9PkCHz9SNGjUzPxr+gQSAesGFLQJtXmHzndvr6usN C4Jvchr2jjYBckLfQwHexauuUs989O4GJgZH/CpejKym8U5CKTMtCxd6E7zfcrETW0gq /9Mw== X-Gm-Message-State: AOJu0YxRFHau29qinc+zTjhs/ab8WcLxTVGt/T3tj5UaFe2Xnalq/AVb yQGwh+sXyzO+O6iiOOt5Ys1LXEXg4gguhY/iRd7dgRryR8Sf6jvCkxSBQzUkNEys X-Gm-Gg: AeBDieuBDnaFWNwJF/gCK9mecdQ6AN9PeTuNMMUrKqfCV1i7xfAHXTFXEJawegHLm4w mp0V1nI+ZXxmCIiAlLyHGtTM2eMijCj8+CG7dOPDuor6IGqtaKWMP1lRwe5bNgyDmoyt0EobE90 /HZ9qs/dQLXPy7KrxPJN9aivHS/kQTiMlPPvisa/sOKx55RMDvBb4MyAYCubZPq9nl5IiTTqOLZ e3GMowFUR5++T5UJy0RWE+78ZW9By5HAZernqDPyvbswy8fmHSkvclwSE8QdNd7wcrFRmEfkAim mXBED2+W5/6ZQpCiyM7IqDnQoEm5lpzpbwrjJlILC3vv5wS/r9bmoeZ3Bn4pmP+AYtG3aeusPQM Se5XpN0fvkZ4eZpwSAa6PJ3qEbax4my+FiUbbf8K1q4YXH/TQYAkL0IQEiLXDXGYXqFrei9gD5H Ib64XakjuyLrFtvoVI2pwbX+evwOv2ZwzXgjYA2WJpzIE393uCrbReo444pBexCj/YioK1lkkDd xVYwPG7 X-Received: by 2002:a17:907:a44:b0:b9b:207c:f7b7 with SMTP id a640c23a62f3a-b9c6768d2e2mr27200266b.3.1775167039942; Thu, 02 Apr 2026 14:57:19 -0700 (PDT) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, alex.bennee@linaro.org, peter.maydell@linaro.org, artem_mygaiev@epam.com, volodymyr_babchuk@epam.com, takahiro.nakata.wr@renesas.com, "Edgar E . Iglesias" , Ruslan_Ruslichenko@epam.com, balaton@eik.bme.hu Subject: [PATCH v3 21/33] hw/arm/arm_generic_fdt: Add support for host-backed RAM regions Date: Thu, 2 Apr 2026 23:56:06 +0200 Message-ID: <20260402215629.745866-22-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260402215629.745866-1-ruslichenko.r@gmail.com> References: <20260402215629.745866-1-ruslichenko.r@gmail.com> 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::62b; envelope-from=ruslichenko.r@gmail.com; helo=mail-ej1-x62b.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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775167117543154100 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko Add the ability to dynamically map QEMU host memory backends to guest memory using configuration from the Device Tree. To map a host memory backend, memory region nodes with the 'qemu-memory-region' compatible string and the 'qemu,ram' property must specify a 'qemu,host-id' property containing the memdev name. The corresponding memory backends can be specified via the command line: ... -object memory-backend-file,id=3Dmem0,mem-path=3Dmemory.img,size=3D256M ... If no host backend is found, the initialization will fall back to standard anonymous memory mapping. Signed-off-by: Ruslan Ruslichenko --- hw/arm/arm_generic_fdt.c | 96 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 95 insertions(+), 1 deletion(-) diff --git a/hw/arm/arm_generic_fdt.c b/hw/arm/arm_generic_fdt.c index 7b50957a82..de121820e0 100644 --- a/hw/arm/arm_generic_fdt.c +++ b/hw/arm/arm_generic_fdt.c @@ -43,6 +43,98 @@ struct ARMGenericFDTState { =20 OBJECT_DECLARE_SIMPLE_TYPE(ARMGenericFDTState, ARM_GENERIC_FDT_MACHINE) =20 +static void map_host_memdev_node(FDTMachineInfo *fdti, const char *node_pa= th) +{ + int len; + uint64_t mr_size, backed_size; + Object *mem_obj; + Object *backend_obj; + MemoryRegion *mr; + MemoryRegion *backend_mr; + MemoryRegion *container; + HostMemoryBackend *backend_mem; + + const char *compat =3D qemu_fdt_getprop(fdti->fdt, node_path, + "compatible", &len, NULL); + const char *host_id =3D qemu_fdt_getprop(fdti->fdt, node_path, "qemu,h= ost-id", + &len, NULL); + bool is_qemu_ram =3D (qemu_fdt_getprop(fdti->fdt, node_path, "qemu,ram= ", + &len, NULL) !=3D NULL); + + if (!compat || strcmp(compat, "qemu-memory-region")) { + return; + } + + if (!is_qemu_ram || !host_id) { + return; + } + + mem_obj =3D fdt_init_get_opaque(fdti, node_path); + if (!mem_obj) { + return; + } + + backend_obj =3D object_resolve_path_type(host_id, TYPE_MEMORY_BACKEND, + NULL); + if (!backend_obj) { + warn_report("No mem backend found for FDT requested host-id %s", + host_id); + return; + } + + backend_mem =3D MEMORY_BACKEND(backend_obj); + backend_mr =3D host_memory_backend_get_memory(backend_mem); + + mr =3D MEMORY_REGION(mem_obj); + container =3D mr->container; + if (!container) { + warn_report("No parent found for requested host-id %s", + host_id); + return; + } + + mr_size =3D memory_region_size(mr); + backed_size =3D memory_region_size(backend_mr); + + if (backed_size !=3D mr_size) { + error_report("Unable to map host backed memory: %s, " + "dts size: 0x%" PRIx64 ", but memdev size: 0x%" PR= Ix64, + host_id, mr_size, backed_size); + exit(1); + } + + hwaddr base_addr =3D mr->addr; + + memory_region_del_subregion(container, mr); + memory_region_add_subregion(container, base_addr, backend_mr); + + fdt_init_set_opaque(fdti, node_path, OBJECT(backend_mr)); + object_unparent(mem_obj); +} + +/* Parse device-tree starting from 'node' and attach file-backed RAM's */ +static void map_host_memdevs(FDTMachineInfo *fdti, const char *node_path) +{ + int i; + char **children; + int num_children =3D qemu_devtree_get_num_children(fdti->fdt, node_pat= h); + + if (num_children > 0) { + children =3D g_malloc0(sizeof(*children) * num_children); + + num_children =3D qemu_devtree_get_children(fdti->fdt, node_path, + num_children, children); + for (i =3D 0; i < num_children; ++i) { + map_host_memdevs(fdti, children[i]); + g_free(children[i]); + } + + g_free(children); + } + + map_host_memdev_node(fdti, node_path); +} + static void init_machine(void *fdt, ARMGenericFDTState *s) { FDTMachineInfo *fdti; @@ -63,7 +155,9 @@ static void init_machine(void *fdt, ARMGenericFDTState *= s) /* Instantiate peripherals from the FDT. */ fdti =3D fdt_generic_create_machine(fdt, NULL); =20 - mem_area =3D MEMORY_REGION(object_resolve_path(node_path[0], NULL)); + map_host_memdevs(fdti, "/"); + + mem_area =3D MEMORY_REGION(fdt_init_get_opaque(fdti, node_path[0])); =20 s->bootinfo.loader_start =3D object_property_get_int(OBJECT(mem_area), "addr", NULL); --=20 2.43.0 From nobody Sat Apr 11 18:38:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1775167273; cv=none; d=zohomail.com; s=zohoarc; b=TDHm1CeHRGUQIjd7lKBkZvC56ZokyD6I1oaKmW46rXf3FsdOE1AuTNSkd8C1CG/bH6JzgassdXiHXagK8ue+xjqnnMkDzog7j5iZ06gsTcnPbBJ8igDrZKin0afqcI7kXyp5u3LEYcc/G/YCCJ0eWY/rcXkUWAyhORLMC7itWXw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775167273; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=7XwGSsZ5E+pHUCrk55JcghHWJX/O0i4AExLwj5l49n4=; b=mSpjXjqG4AC1AyihHtxeuoK7UT54fJGnHXQ2X8MY1q4KBd2RI8zX5RAEFsNbP8ftf+cNKjD5lCxlfS0qA7fWNpZdvdhKh0lRfTMsI+3wg0Vnuao/vj/iSAYI8EgS1dj79Ym1Xk6pmIxMGMbQsMMmr3f1fYPcRILMNnL8p5fzfso= 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 1775167273942719.6818926014633; Thu, 2 Apr 2026 15:01:13 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Q2u-0000Ns-3B; Thu, 02 Apr 2026 17:57:48 -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 1w8Q2Y-00006K-Be for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:27 -0400 Received: from mail-ej1-x62e.google.com ([2a00:1450:4864:20::62e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w8Q2V-0007Cs-LT for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:25 -0400 Received: by mail-ej1-x62e.google.com with SMTP id a640c23a62f3a-b9c280322e0so162834766b.0 for ; Thu, 02 Apr 2026 14:57:23 -0700 (PDT) Received: from thinkpad-t470s.. (93-143-182-244.adsl.net.t-com.hr. [93.143.182.244]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b9c3cac0e1asm134009166b.27.2026.04.02.14.57.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 14:57:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775167042; x=1775771842; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=7XwGSsZ5E+pHUCrk55JcghHWJX/O0i4AExLwj5l49n4=; b=ZtoJCD94wsJ26HGPVVGsEid/nGX+btDysjk2W83FLG5DhYOeejn3sIO1frJWgoHvS7 MFJ5I1k+vdYDYZGXBT3RxLwIg1RUROgYe8WYUaxl3oV7rc5vT0ydYzSpR9C1KOF//z7K mjix6TcqMTpdeRFeZbnkYOoCCpxvOhoOfDAW4+dbLgWrKWfV1q0rcTMccSqUm825Ii2H aGt/wDEPw0zlxB6EjXdGrvOWdUU2rx4WoNaktqY6S8TdpKtjapNm7yH+vf6U1UY68tPT MfnGJAmq84s+/BqXMmb8H4JKvxwvNoxXEeqNjQ8SEFFanS9rhOVKZ7TBUOG5mt4VLUfN Ghsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775167042; x=1775771842; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=7XwGSsZ5E+pHUCrk55JcghHWJX/O0i4AExLwj5l49n4=; b=Z5wSbYj2j5U8BBw1JVMsIk46Jm55j2DXJ6Jmr3qL/rrAg4bViJzCHvK3icqEhqQIN2 V7rKfIkyx+/ArD5VUAJ5q57dzVFaHdDoHD3lBzu9Nt3IzJof7UThLkt0MZ6tulo87ELg T0QKB1flkDaog11X4jlTbSInTaviszPaZQYXiX+bU6r1qkrLD0XCV6XqS9HlEtdhOltO pue5YrvssxNCasYBfkVcY5z4pKP6GhLY/89f3rDnOKBv+hycIbXK3VFKALXqfXtOcbO6 Z0ymf5PF0bin88DtzlBbvA0XeH0hWKG19OvbiERAFQ+8a/6Cve98u1M85mIEVOuJodUu Od3g== X-Gm-Message-State: AOJu0Yzk5mqGor6x4GGZ0CkI95ML1lykBjYZnabw3Dc+G7TjSz1/gRN2 iluxlE1R0YtoUlDD2rto75umGLbcuKauJoxTdqTzdB3Bxq6ipisuuMSq+ObilsFq X-Gm-Gg: ATEYQzzgbeyWDUsf6zWNJSxkg7ZAIHqasid0BLt3aYrXcu1bFfAyAwx/eSTVjYrlhmk QUKi/oRAy7NSl71x9vvxQ9H0hiP1cu1ZLu4jbsD/xJP+t2TXkO426w3K5g4lBu+LYCdXLI0Pp0u wodsbU//TgayQSj6gzq6KZIHY42zQsCKl89NSWz7k3hv2Ev7DRL85SPfUGLR6IuxEgYA0yVX0hj JxNE7Siy2NCsTtjEETY1UgQ/PLdBRtNdnn5I5epsReq7F4L1hcDkjzCKgZtgkRwPT/6eTrAuOnn jfDdNJu/N3u+sqa/jcaUnKGao8aGckWW3dZMGq8VCtJLfi+w473AwKK5KrKsAdmJyHlaoxUzm+h +mAXEwo3xxVUrLuwZJRl8nQjR5koO7w9HZZcPDXk2xdB5dl06DXJTOFY2LhWaNqf9gnpbAVDCA3 dTaS6KvVJnGNtnpUgb938JJQef+scYuS3Mb8qnUcmX/7bjjDVNo6TUJ4jrqErGm1og2jg3lvL9f LQbuamP X-Received: by 2002:a17:906:fe0d:b0:b98:8e19:7d64 with SMTP id a640c23a62f3a-b9c677fbe10mr28976766b.26.1775167041480; Thu, 02 Apr 2026 14:57:21 -0700 (PDT) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, alex.bennee@linaro.org, peter.maydell@linaro.org, artem_mygaiev@epam.com, volodymyr_babchuk@epam.com, takahiro.nakata.wr@renesas.com, "Edgar E . Iglesias" , Ruslan_Ruslichenko@epam.com, balaton@eik.bme.hu, Paolo Bonzini , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Subject: [PATCH v3 22/33] hw/core/sysbus: implement FDT_GENERIC_MMAP_CLASS interface Date: Thu, 2 Apr 2026 23:56:07 +0200 Message-ID: <20260402215629.745866-23-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260402215629.745866-1-ruslichenko.r@gmail.com> References: <20260402215629.745866-1-ruslichenko.r@gmail.com> 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::62e; envelope-from=ruslichenko.r@gmail.com; helo=mail-ej1-x62e.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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775167275850154100 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko The patch implements FDTGenericMMap interface for sysbus device class. The implementation maps device's MMIO regions based on 'reg' property in the Device tree. This enables automatic memory mapping for the most QEMU peripherals without the need of device-specific FDT handling code. Signed-off-by: Ruslan Ruslichenko --- hw/core/sysbus.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/hw/core/sysbus.c b/hw/core/sysbus.c index 3adf2f2faf..78b7827708 100644 --- a/hw/core/sysbus.c +++ b/hw/core/sysbus.c @@ -23,6 +23,8 @@ #include "monitor/monitor.h" #include "system/address-spaces.h" =20 +#include "hw/core/fdt_generic_util.h" + static void sysbus_dev_print(Monitor *mon, DeviceState *dev, int indent); static char *sysbus_get_fw_dev_path(DeviceState *dev); =20 @@ -291,11 +293,32 @@ static char *sysbus_get_fw_dev_path(DeviceState *dev) return g_strdup(qdev_fw_name(dev)); } =20 +static bool sysbus_parse_reg(FDTGenericMMap *obj, FDTGenericRegPropInfo re= g, + Error **errp) +{ + int i; + + for (i =3D 0; i < reg.n; ++i) { + MemoryRegion *mr_parent =3D (MemoryRegion *) + object_dynamic_cast(reg.parents[i], TYPE_MEMORY_REGION); + if (!mr_parent) { + /* evil */ + mr_parent =3D get_system_memory(); + } + memory_region_add_subregion_overlap(mr_parent, reg.a[i], + sysbus_mmio_get_region(SYS_BUS_DEVICE(obj= ), i), + reg.p[i]); + } + return false; +} + static void sysbus_device_class_init(ObjectClass *klass, const void *data) { DeviceClass *k =3D DEVICE_CLASS(klass); + FDTGenericMMapClass *fmc =3D FDT_GENERIC_MMAP_CLASS(klass); k->realize =3D sysbus_device_realize; k->bus_type =3D TYPE_SYSTEM_BUS; + fmc->parse_reg =3D sysbus_parse_reg; /* * device_add plugs devices into a suitable bus. For "real" buses, * that actually connects the device. For sysbus, the connections @@ -354,6 +377,11 @@ static const TypeInfo sysbus_types[] =3D { .abstract =3D true, .class_size =3D sizeof(SysBusDeviceClass), .class_init =3D sysbus_device_class_init, + .interfaces =3D (InterfaceInfo[]) { + { TYPE_FDT_GENERIC_MMAP }, + { }, + }, + }, { .name =3D TYPE_DYNAMIC_SYS_BUS_DEVICE, --=20 2.43.0 From nobody Sat Apr 11 18:38:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1775167097; cv=none; d=zohomail.com; s=zohoarc; b=O0hPOe2vUVxX9QVMgklHKFAXB7NkvuBwHIzpRLNICdUXl1edBzwFMKbihsGdrlL+5TAHQ7RCUKPTNPF1FYDfdrPfdhcAqYEh0DKlPKr3fv2v0CannNonPySrJE9chxJv5QvWCcTOSFWE5UiHM5jH4qBX8yxfFVsSNhZvEgBxTWg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775167097; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=OrGB8OQ0EB2XgRXWdV+EvwzSnNtuQZ55Vl1tvmUmW2w=; b=jPoWb+UUGB7NhKsduPTj+ZdlNHm1TQrrZQ8HGfEyLadiJJqI/5f3Hwh5NoaVqr7HxDJ7G9tgmvU6It70VlCT50JhtFFQLK0yIb5aVKIvM/KoTu/ps8LsH4EQO2PBGsmoYSaQzQ9SlJ5EWSaOGc5qew8BEMC5hXEOk2CesvvbePU= 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 1775167097340235.94205917683678; Thu, 2 Apr 2026 14:58:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Q39-0000mP-72; Thu, 02 Apr 2026 17:58:03 -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 1w8Q2Z-00006b-N7 for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:27 -0400 Received: from mail-ej1-x62b.google.com ([2a00:1450:4864:20::62b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w8Q2X-0007DT-5v for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:27 -0400 Received: by mail-ej1-x62b.google.com with SMTP id a640c23a62f3a-b932fe2e1a7so166753666b.1 for ; Thu, 02 Apr 2026 14:57:24 -0700 (PDT) Received: from thinkpad-t470s.. (93-143-182-244.adsl.net.t-com.hr. [93.143.182.244]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b9c3cac0e1asm134009166b.27.2026.04.02.14.57.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 14:57:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775167043; x=1775771843; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=OrGB8OQ0EB2XgRXWdV+EvwzSnNtuQZ55Vl1tvmUmW2w=; b=auKtuA1m89lxeUAXqyr9HRG/sIzSEzahQDBUAIHo8U3dmj3PpMwzs2T9YmSpe2Zllv wpCMyjm5SlNsYs0G4dk+T00oqJ94CnMXqxF3OnL/nBvXMwL0M82/qtmbzKn/23U8WQAp JltBLkVQmhPiu86mfXT7P+vjMNiNqgc1hkaEHBD3LR54z01llZzugTBnNI+wZ7WzLKgy wXapKxXalUI14DuHqm0jZEihwPR/fIbyHYCLOKfz5FYAlDmSOVEmxxMwgWUIgrbWeRyw yeDgn1d1ynUMJlb9hh3sUrLNa0ZQBQLRQEWlPr+9b73ZHS5NgI2zD662Kgt1PbzMOOr7 hvnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775167043; x=1775771843; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=OrGB8OQ0EB2XgRXWdV+EvwzSnNtuQZ55Vl1tvmUmW2w=; b=oBkF3kn2qwgHfjDbgvqiAhub18p/c5+2uGHUBJe/7uKSdR+SyAR56RjZw+1O88GuQu PWA90Wo6svdxzpx07lCtvLKX8NSWZ77Gg2ipWrQR0rZPWXEGWje4EMLs8dZil8y8aLao u+2fnBBNlTNl/4cmAOBX+3AXanUSJzdoy71tkXlSGXEWE5Guz8BsSl+wh9J2OWVgTqF+ F0K7t9S+USP2QDRx/UFvLZK9gd4xSR2IapwIUleVY8If/k0e6hM2DT62Bh562D8G/8Hi qStCV/zUtm4QqgCzPDr6jXtvMCI/lxHfsnsJd4nuzWYqV1yGEMxXe7jsZ2s5bhJN1JwD yZUg== X-Gm-Message-State: AOJu0Ywvo/LkqwpuZxLHuIntW253G9J8Wu5ma/vNqGOHNOHCsmLbTJvF XKn0uVzbeNTxKZAj6mcvEyXPBvhpOOnaPB8harvgffug0X7AfFQnd8ynoqb7t4T7 X-Gm-Gg: ATEYQzw43PfmNOeRcIQrWgbSnaJj2C1WhmIvpRRxx4rrSXI3lDjE8ZXapjHBn3w5/LQ JZpJ9QDgqCzBHeVVyQYJgwJByRKjPvoDCBalWNZIEz3XD4VD+Spq6+8HLL7G1rpsg+i14xioKmj 8gc7pos3elBO6WxrQVd7cMo9fCZJ5Ld9G7vrDxP22YrTaV/mhT1HsMY5hjXD3SBfkQ5pzNLRexY nd9hQvmEs+I4Vlc3z2ivridUQXqsiGmW23NmBnR7fIJUmEO86AoRk5sEDLzfsHLxsDIClxE9v1f 9cYgcaT5QAo9a8+MBiULcioOaln8euO82ZPd/27WA+I8CDsxmPQr5XIg3pXUg96JV+2JVy/d4Db jyqObS9zCRk/GdPos/EyASXC3Kdh+0r6aoRMLuejT3FhgwtaB7GEHhvUkm3HM0jtbzqu3oaFFLE oldDP2oJYI7A930hSaTRzxVUJLisNbshI68L0r/LORTDRvkG9LeKnvgcUCn+5fX+R7PVikHQ== X-Received: by 2002:a17:907:3e9f:b0:b96:e3db:9e04 with SMTP id a640c23a62f3a-b9c67b5fd34mr24482966b.53.1775167042926; Thu, 02 Apr 2026 14:57:22 -0700 (PDT) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, alex.bennee@linaro.org, peter.maydell@linaro.org, artem_mygaiev@epam.com, volodymyr_babchuk@epam.com, takahiro.nakata.wr@renesas.com, "Edgar E . Iglesias" , Ruslan_Ruslichenko@epam.com, balaton@eik.bme.hu Subject: [PATCH v3 23/33] hw/intc/arm_gic: implement FDT_GENERIC_INTC and fdt support Date: Thu, 2 Apr 2026 23:56:08 +0200 Message-ID: <20260402215629.745866-24-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260402215629.745866-1-ruslichenko.r@gmail.com> References: <20260402215629.745866-1-ruslichenko.r@gmail.com> 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::62b; envelope-from=ruslichenko.r@gmail.com; helo=mail-ej1-x62b.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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775167099222158500 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko The patch implements TYPE_FDT_GENERIC_INTC interface, which enables GIC to be instantiated and wired via the device tree description. The implemented interface method are following: 1. 'get_irq': Parses device tree interrupt specifiers and return correct qemu_irq for devices which has IRQ's wired to GIC. 2. 'auto_parent': Automatically connect the GIC's output signals to the CPU's found in current machine configuration. Signed-off-by: Ruslan Ruslichenko --- hw/intc/arm_gic.c | 32 +++++++++++++++++++++++++ hw/intc/arm_gic_common.c | 50 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) diff --git a/hw/intc/arm_gic.c b/hw/intc/arm_gic.c index 4d4b79e6f3..bbe9409ef3 100644 --- a/hw/intc/arm_gic.c +++ b/hw/intc/arm_gic.c @@ -24,12 +24,15 @@ #include "gic_internal.h" #include "qapi/error.h" #include "hw/core/cpu.h" +#include "hw/core/boards.h" #include "qemu/log.h" #include "qemu/module.h" #include "trace.h" #include "system/kvm.h" #include "system/qtest.h" =20 +#include "hw/core/fdt_generic_util.h" + /* #define DEBUG_GIC */ =20 #ifdef DEBUG_GIC @@ -2162,12 +2165,41 @@ static void arm_gic_realize(DeviceState *dev, Error= **errp) =20 } =20 +static void arm_gic_fdt_auto_parent(FDTGenericIntc *obj, Error **errp) +{ + GICState *s =3D ARM_GIC(obj); + SysBusDevice *sbd =3D SYS_BUS_DEVICE(obj); + int num_cpus =3D s->num_cpu; + CPUState *cs; + int i =3D 0; + + for (cs =3D first_cpu; cs; cs =3D CPU_NEXT(cs)) { + if (i >=3D s->num_cpu) { + break; + } + + sysbus_connect_irq(sbd, i, + qdev_get_gpio_in(DEVICE(cs), 0)); + sysbus_connect_irq(sbd, i + num_cpus, + qdev_get_gpio_in(DEVICE(cs), 1)); + sysbus_connect_irq(sbd, i + 2 * num_cpus, + qdev_get_gpio_in(DEVICE(cs), 2)); + sysbus_connect_irq(sbd, i + 3 * num_cpus, + qdev_get_gpio_in(DEVICE(cs), 3)); + i++; + } + + /* FIXME: Add some error checking */ +} + static void arm_gic_class_init(ObjectClass *klass, const void *data) { DeviceClass *dc =3D DEVICE_CLASS(klass); ARMGICClass *agc =3D ARM_GIC_CLASS(klass); + FDTGenericIntcClass *fgic =3D FDT_GENERIC_INTC_CLASS(klass); =20 device_class_set_parent_realize(dc, arm_gic_realize, &agc->parent_real= ize); + fgic->auto_parent =3D arm_gic_fdt_auto_parent; } =20 static const TypeInfo arm_gic_info =3D { diff --git a/hw/intc/arm_gic_common.c b/hw/intc/arm_gic_common.c index 304d89cf56..04787cff79 100644 --- a/hw/intc/arm_gic_common.c +++ b/hw/intc/arm_gic_common.c @@ -28,6 +28,8 @@ #include "migration/vmstate.h" #include "system/kvm.h" =20 +#include "hw/core/fdt_generic_util.h" + static int gic_pre_save(void *opaque) { GICState *s =3D (GICState *)opaque; @@ -348,6 +350,51 @@ static void arm_gic_common_linux_init(ARMLinuxBootIf *= obj, } } =20 +static int arm_gic_common_fdt_get_irq(FDTGenericIntc *obj, qemu_irq *irqs, + uint32_t *cells, int ncells, int max, + Error **errp) +{ + GICState *gs =3D ARM_GIC_COMMON(obj); + int cpu =3D 0; + uint32_t idx; + + if (ncells !=3D 3) { + error_setg(errp, "ARM GIC requires 3 interrupt cells, %d cells giv= en", + ncells); + return 0; + } + idx =3D cells[1]; + + switch (cells[0]) { + case 0: + if (idx >=3D gs->num_irq) { + error_setg(errp, "ARM GIC SPI has maximum index of %" PRId32 "= , " + "index %" PRId32 " given", gs->num_irq - 1, idx); + return 0; + } + (*irqs) =3D qdev_get_gpio_in(DEVICE(obj), cells[1]); + return 1; + case 1: /* PPI */ + if (idx >=3D 16) { + error_setg(errp, "ARM GIC PPI has maximum index of 15, " + "index %" PRId32 " given", idx); + return 0; + } + for (cpu =3D 0; cpu < max && cpu < gs->num_cpu; cpu++) { + if (cells[2] & 1 << (cpu + 8)) { + *irqs =3D qdev_get_gpio_in(DEVICE(obj), + gs->num_irq - 16 + idx + cpu * 32= ); + } + irqs++; + } + return cpu; + default: + error_setg(errp, "Invalid cell 0 value in interrupt binding: %d", + cells[0]); + return 0; + } +} + static const Property arm_gic_common_properties[] =3D { DEFINE_PROP_UINT32("num-cpu", GICState, num_cpu, 1), DEFINE_PROP_UINT32("first-cpu-index", GICState, first_cpu_index, 0), @@ -368,12 +415,14 @@ static void arm_gic_common_class_init(ObjectClass *kl= ass, const void *data) DeviceClass *dc =3D DEVICE_CLASS(klass); ResettableClass *rc =3D RESETTABLE_CLASS(klass); ARMLinuxBootIfClass *albifc =3D ARM_LINUX_BOOT_IF_CLASS(klass); + FDTGenericIntcClass *fgic =3D FDT_GENERIC_INTC_CLASS(klass); =20 rc->phases.hold =3D arm_gic_common_reset_hold; dc->realize =3D arm_gic_common_realize; device_class_set_props(dc, arm_gic_common_properties); dc->vmsd =3D &vmstate_gic; albifc->arm_linux_init =3D arm_gic_common_linux_init; + fgic->get_irq =3D arm_gic_common_fdt_get_irq; } =20 static const TypeInfo arm_gic_common_type =3D { @@ -385,6 +434,7 @@ static const TypeInfo arm_gic_common_type =3D { .abstract =3D true, .interfaces =3D (const InterfaceInfo[]) { { TYPE_ARM_LINUX_BOOT_IF }, + { TYPE_FDT_GENERIC_INTC }, { }, }, }; --=20 2.43.0 From nobody Sat Apr 11 18:38:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1775167077; cv=none; d=zohomail.com; s=zohoarc; b=bekYDbISXTXdKPYlQ4dECkyRG0T1w2lHQs7oUMNKSxRteNY4kcJel08ja+0dPaa0VibMxp9Sb3PYo/RCcA+F532h21IMIlnvJMok+R9stBUnSxNAkKoa0XiQjzMaDFj7UEBMz5YBjssAuydvLlMKeL/WBJMpcfli0OjhDgoBUxo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775167077; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=SZPYiFfpkqs7OEfAorj2jjdtW/THFK7eOizNd6vUIEE=; b=nxlZgjdOqJWbSCA9np9sO90CBOCHH2Cg5CrFNx7GkxnVO6GLUu2uJEuundALWGBj5P5eEbEmc+6O8QiSAUZU3MX+PVivr+gGUqbRSnv4Ixtp9PlEOcSvzyDCZQbS6u8z4rHTT/nQoVRvK+GmA+EHaP7crgPlQshGzxqwqSHadX4= 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 1775167077124994.8729267245374; Thu, 2 Apr 2026 14:57:57 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Q2p-0000Lo-6x; Thu, 02 Apr 2026 17:57:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w8Q2b-00009i-N3 for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:29 -0400 Received: from mail-ej1-x630.google.com ([2a00:1450:4864:20::630]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w8Q2Y-0007E6-BN for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:28 -0400 Received: by mail-ej1-x630.google.com with SMTP id a640c23a62f3a-b982518b73fso207753066b.1 for ; Thu, 02 Apr 2026 14:57:25 -0700 (PDT) Received: from thinkpad-t470s.. (93-143-182-244.adsl.net.t-com.hr. [93.143.182.244]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b9c3cac0e1asm134009166b.27.2026.04.02.14.57.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 14:57:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775167044; x=1775771844; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=SZPYiFfpkqs7OEfAorj2jjdtW/THFK7eOizNd6vUIEE=; b=eAXaA+y1x1p4cfrxlmaz6i95e6k3MJo048D5jJ+roayy68J/NXH7PA2CDk+L8OoGR/ olcgeDL9uGlP+rkRaj5DTQOmWuZPZ1QF++Qr+TSg0sy8pMkJgj8mpi/2Gq/6GAYvFGJL Dqe4lhXuaWGHpfWyQYW6GN7dmk2qKY0Wh+iHA/0Ac1EVP8UQ8TSadoiyhulzVRY/jNf8 gXtLUBHLjPo0EGLW7l8KLle6umH6BQCnPR82ve6ApanGH6NqndKIzLSZpjuSxgmXrp5T BtoEUw093wmarlc4mVdPcuIepcWGnJH6WK0MscxFANnJ25LljoqWQEtvLDGOhn5a8ul5 Si0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775167044; x=1775771844; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=SZPYiFfpkqs7OEfAorj2jjdtW/THFK7eOizNd6vUIEE=; b=so+x3v6rlSpW22rzQt+cNUm6fZRWGMdwjOVeiYVSycJ232qSoC/y/QnPdpx20bQDE5 nku1Yo/zTMLGDsUA9Q41iyAKkrYAyfHiIF0+5fohsJt2H1a6AGICYold+btU11Y2S7lW U3ZMSIy0W+NLYbkTFhJR+5czY/wFuwbpoXfh27ePHIBr3W0G4sZzf+4MYiZFgnFgTAYa UEYhB+M8irPAXex+Kuzni8Y/9DsV+Gy+44CFHLJSVJa1sb0RVyU2H1lmEaWgKR1kGuuM +/pvNJq7Kt09KsZhvX011t/Ty2DmrFPyJLbVAFj5K6q8RfnRqBfopqagGkYoBWRoCWvt Fx/Q== X-Gm-Message-State: AOJu0YxTOpdmAZ+YziDThmUZiw0NdOuJK9hu1RXjKQe36i/6xDs8U4KX QOOi+XR968WcVzJmUGUV0JggyhU8CyihvbR62aBBStNr1aFLwzdofwE7gVsa1r9b X-Gm-Gg: ATEYQzx1ipQZURQwn5FyqKJWvJwj2eLGsZ9NoTnHYgVIKq2XkuW+C/myynhpI4ndQNF 5/YWr0AM1jpat/Eb1lfyCEzYXGFlMW0yRYUYyD6Lz8yMcTEVHARrSEPEx5L3TyaZbvYKLfXuNSW gKkLXNt8TuREPvux4KB2AWd3P14vHxDI+600pkq+TbtrnEbT8W6NDnrc+IoQ4ZcCrE5+K9yLmpf 69X+kN/Ps63QtVI1dUeKPmzi97HwB9UjJ4i2MNMmKzdktFaPg7P6alK7cEMvtt3HmQ91BBkwYmQ LGUy4OKnHsh8rLbJoy5NcJHFUxhVXNcb5pUQYAY5iBTp12ZpdO/xmhxpONura2T9yBwhBsPB2hA aee5/dh+rwDUjHK9H5dlQxo5q8ANozUtPnuveOHu9YTxnybXsPtIHJ4W+HwAI/CB5apUEnvUmCi W56GQPNjviWofkXjRVxiqWxn0ISJqvWGdfWpXvFC97M5VFTAbjXg0b3Gwgngj9fisHjkQB8Q== X-Received: by 2002:a17:907:5c9:b0:b98:3bb8:c10f with SMTP id a640c23a62f3a-b9c67423283mr24107866b.5.1775167044460; Thu, 02 Apr 2026 14:57:24 -0700 (PDT) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, alex.bennee@linaro.org, peter.maydell@linaro.org, artem_mygaiev@epam.com, volodymyr_babchuk@epam.com, takahiro.nakata.wr@renesas.com, "Edgar E . Iglesias" , Ruslan_Ruslichenko@epam.com, balaton@eik.bme.hu Subject: [PATCH v3 24/33] target/arm/cpu: add fdt support for armv8-timer Date: Thu, 2 Apr 2026 23:56:09 +0200 Message-ID: <20260402215629.745866-25-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260402215629.745866-1-ruslichenko.r@gmail.com> References: <20260402215629.745866-1-ruslichenko.r@gmail.com> 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::630; envelope-from=ruslichenko.r@gmail.com; helo=mail-ej1-x630.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, FREEMAIL_FROM=0.001, 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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775167079099158500 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko Implement FDT compatibility, so that timer can initilize and wire irqs based on device tree information. Signed-off-by: Ruslan Ruslichenko --- target/arm/cpu.c | 112 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) diff --git a/target/arm/cpu.c b/target/arm/cpu.c index ccc47c8a9a..35e38f9970 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -54,6 +54,8 @@ #include "target/arm/gtimer.h" =20 #include "trace.h" +#include "hw/core/fdt_generic_util.h" + =20 static void arm_cpu_set_pc(CPUState *cs, vaddr value) { @@ -2447,3 +2449,113 @@ static void arm_cpu_register_types(void) } =20 type_init(arm_cpu_register_types) + +#ifndef CONFIG_USER_ONLY + +static Object *fdt_armv8_timer_get_intc(FDTMachineInfo *fdti, char *node_p= ath) +{ + char intc_node_path[DT_PATH_LENGTH]; + uint32_t intc_phandle; + Error *errp =3D NULL; + DeviceState *intc; + + intc_phandle =3D qemu_fdt_getprop_cell_inherited(fdti->fdt, node_path, + "interrupt-parent", + 0, &errp); + + /* There must be an interrupt-parent */ + if (errp || + qemu_devtree_get_node_by_phandle(fdti->fdt, + intc_node_path, intc_phandle)) { + g_assert_not_reached(); + } + + while (!fdt_init_has_opaque(fdti, intc_node_path)) { + fdt_init_yield(fdti); + } + + intc =3D DEVICE(fdt_init_get_opaque(fdti, intc_node_path)); + + while (!intc->realized) { + fdt_init_yield(fdti); + } + + return OBJECT(intc); +} + +static int armv8_timer_fdt_init(char *node_path, FDTMachineInfo *fdti, + void *priv) +{ + Object *intc =3D fdt_armv8_timer_get_intc(fdti, node_path); + CPUState *cpu; + qemu_irq *sec_irqs =3D NULL; + qemu_irq *ns_irqs; + qemu_irq *v_irqs; + qemu_irq *h_irqs; + uint32_t first_cpu_idx; + uint32_t num_cpu; + bool has_sec_ext; + Error *err =3D NULL; + + first_cpu_idx =3D object_property_get_uint(intc, "first-cpu-idx", &err= ); + if (!err) { + num_cpu =3D object_property_get_uint(intc, "num-cpu", &err); + assert(!err); + has_sec_ext =3D object_property_get_bool(intc, "has-security-exten= sions", + &err); + assert(!err); + } else { + /* + * Connect all CPUs with the ARM_FEATURE_GENERIC_TIMER set for + * backwards compatibility when the 'first-cpu-idx' property does = not + * exist. + */ + num_cpu =3D 0; + has_sec_ext =3D true; + } + + if (has_sec_ext) { + sec_irqs =3D fdt_get_irq(fdti, node_path, 0); + ns_irqs =3D fdt_get_irq(fdti, node_path, 1); + v_irqs =3D fdt_get_irq(fdti, node_path, 2); + h_irqs =3D fdt_get_irq(fdti, node_path, 3); + } else { + ns_irqs =3D fdt_get_irq(fdti, node_path, 0); + v_irqs =3D fdt_get_irq(fdti, node_path, 1); + h_irqs =3D fdt_get_irq(fdti, node_path, 2); + } + + for (cpu =3D first_cpu; cpu; cpu =3D CPU_NEXT(cpu)) { + ARMCPU *acpu =3D ARM_CPU(cpu); + bool is_gic_cpu; + + if (!arm_feature(&acpu->env, ARM_FEATURE_GENERIC_TIMER)) { + continue; + } + + is_gic_cpu =3D cpu->cpu_index >=3D first_cpu_idx && + cpu->cpu_index < (first_cpu_idx + num_cpu); + + if (!num_cpu || is_gic_cpu) { + + assert(*ns_irqs); + assert(*v_irqs); + assert(*h_irqs); + qdev_connect_gpio_out(DEVICE(acpu), 0, *ns_irqs++); + qdev_connect_gpio_out(DEVICE(acpu), 1, *v_irqs++); + qdev_connect_gpio_out(DEVICE(acpu), 2, *h_irqs++); + + if (has_sec_ext) { + assert(*sec_irqs); + qdev_connect_gpio_out(DEVICE(acpu), 3, *sec_irqs++); + } + } + } + + return 0; +} + +fdt_register_compatibility(armv8_timer_fdt_init, + "compatible:arm,armv8-timer"); + +#endif --=20 2.43.0 From nobody Sat Apr 11 18:38:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1775167316; cv=none; d=zohomail.com; s=zohoarc; b=IaGss1B0IYpt9fmxIj1qqhD2W5nZvWc5CgOcWVlLTAoK2pNk0XBcEI/hVGjX38rCXkiX9kwBj7XtFWGBX8WztPHRLKz/iCP1XjyUtPlx+Sdo+LQF3KGiUL9TE8+s+YGMKKnmFR6SGPojo8LbnfSbPjrnPlFqae15SYI2VN58Gwc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775167316; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=x8ZREsUktJ+jWPapDw6PB5NQmm74pQN/VTasE9D0cnk=; b=oCcs8yplJwjoTLIM+ocCJcPAwAlMHFf/ZAX5i7PM+asgDu590HT6w5OqfDflOzJDU1AFUoWwUDRkKT3JAtvlBjLuA+ZIq7oOa7qRQuNSn066VvPUC1yrx6uoUExSX89GoEfLmat63MomHaBnwcswBAy+BVoWb5ReYofUK+2+kn8= 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 1775167316227741.9213524976394; Thu, 2 Apr 2026 15:01:56 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Q3C-0001Iu-3p; Thu, 02 Apr 2026 17:58:06 -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 1w8Q2d-0000BE-GM for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:32 -0400 Received: from mail-ej1-x631.google.com ([2a00:1450:4864:20::631]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w8Q2a-0007Eq-0U for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:30 -0400 Received: by mail-ej1-x631.google.com with SMTP id a640c23a62f3a-b9c1da7ac63so234958366b.0 for ; Thu, 02 Apr 2026 14:57:27 -0700 (PDT) Received: from thinkpad-t470s.. (93-143-182-244.adsl.net.t-com.hr. [93.143.182.244]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b9c3cac0e1asm134009166b.27.2026.04.02.14.57.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 14:57:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775167046; x=1775771846; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=x8ZREsUktJ+jWPapDw6PB5NQmm74pQN/VTasE9D0cnk=; b=Dc0icwgpvpqvvpW3+72803p5YmOe0ooA2lLuA7tRXQDlx2Kj+wotv5Yw6G5+go54bW xThElLEWvWsDwukoJxmafyeDW3tIqTA1g+KxrlwmSJiIzC0l57XTwZDg8zXncVp5hW6s i1ZRRoCmqyBO3aOXj62hjTnQttftiEKeDIq+90DvjwedHnORBii1+m28P0i3mIJC1MT1 1Qz5h09OkllU/iV1zcC+n3E7IBqyE0lUxThLbdslRR/mS0dO9WS4f/FCGA09eO7KrLBW b3hHITOv+G3eypDn+fskzkv8Qp6N/pAyNSM5aXulfN//1tJf0Eom4sO8MNI3+tnK2Jyn TGRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775167046; x=1775771846; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=x8ZREsUktJ+jWPapDw6PB5NQmm74pQN/VTasE9D0cnk=; b=jbmYuMzXeN/FJ5fdK0E0ZZ2DxyI59JaAHVxBpf2De99Aq2AgsHacSbwcIf3bqVF3yR TMh7iUtrnFNiWgFlt9cqKE8HItGa2vXvkj2MTlYienKoYkob1UszfzIKMsFFMI00nl9g dbqFdlXL5WSCeqrCfFa7GBj7ra1caLyzRSKkg6WskzKH9FljJBQ2WWxYXxifbJeIrCZd VlCV1DlaU2oV38MgmApYN6qtImb/5pVC/GXLcDwQoMi8qwGAkCEp88IVsD+Oo9YTOgwl 9vqRC9/ff0UAMazSmkGa48GAaWzeLsDznGUbttK9KNqjq03D700skc/XZpmzS4ZDFVsI 7bPQ== X-Gm-Message-State: AOJu0YwTSG/DF73KBclLdWKU06ZtzmuLU+eBw+wli3g102xKRTdYhvud rVbptcw3IIQcLQHW3Iv5118bmJ4cvMMKj1FWR92WYize3LXH/RUn0KhQnP1Fk9BS X-Gm-Gg: ATEYQzxSfg8xFZjV0FRmVRIeNCYNsRBetOGfhg9pPrdvc5J0C+UbYJ/5E/pqavDiCN6 QWaM9FwA7F9HmuoJ15HUynnyIDkqqtoPweDbbiTZ8Xfl9Hmc7/0mYuMWDEAug3fA4e+71Igyp8i IpFYU5lit2QlInpIruHYNQcVcbrWfkgnonutCEMO1SfB3YtfTfTlI8BEPcW/ENc4L1XRwVwg1OW bTBT2KaYSVopq20BrD4h43OCOc9V5IE5eRpqH+T0LcG5NKntCv/txoWng1OVRpLgxoQROWYWQj2 CnDnt8L+BOJGPPkbKB4X/94cmwj55XFUA7KGxJjHBVxFsr8dRAV45oncxScH5dFrifhPe2vYGOj jAd648q4R1qOudZEbLzv+kwSTTf2IY9m5Lrp2Uo8h/EoL3e59uwLCc9/kOwhEshiYUJbtpsCb+G aFGYIZ0S/aKu7UItZd7Pr4GsvFpprxs0/DQjzCQoAGisFg7FnVR8HCV8pE1AcIBKvdUw58QMCeP 83GiPZQ X-Received: by 2002:a17:907:6093:b0:b94:858:5807 with SMTP id a640c23a62f3a-b9c679adc2fmr25890166b.25.1775167046059; Thu, 02 Apr 2026 14:57:26 -0700 (PDT) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, alex.bennee@linaro.org, peter.maydell@linaro.org, artem_mygaiev@epam.com, volodymyr_babchuk@epam.com, takahiro.nakata.wr@renesas.com, "Edgar E . Iglesias" , Ruslan_Ruslichenko@epam.com, balaton@eik.bme.hu, Paolo Bonzini , Peter Xu , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v3 25/33] system/memory: add setters for MemoryRegion properties Date: Thu, 2 Apr 2026 23:56:10 +0200 Message-ID: <20260402215629.745866-26-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260402215629.745866-1-ruslichenko.r@gmail.com> References: <20260402215629.745866-1-ruslichenko.r@gmail.com> 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::631; envelope-from=ruslichenko.r@gmail.com; helo=mail-ej1-x631.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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775167316706158500 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko Currently, MemoryRegion properties such as addr, size, priority and container are read-only and don't have setters. This patch implements the missing setters function, so that properties can be modified dynamically. The changes allow MemoryRegions objects to be fully configured via properties, which enables them be created from a device tree description. Signed-off-by: Ruslan Ruslichenko --- system/memory.c | 221 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 216 insertions(+), 5 deletions(-) diff --git a/system/memory.c b/system/memory.c index 56f3225b21..cd463a3dde 100644 --- a/system/memory.c +++ b/system/memory.c @@ -55,6 +55,9 @@ static GHashTable *flat_views; =20 typedef struct AddrRange AddrRange; =20 +static void memory_region_update_container_subregions(MemoryRegion *subreg= ion); +static void memory_region_readd_subregion(MemoryRegion *mr); + /* * Note that signed integers are needed for negative offsetting in aliases * (large MemoryRegion::alias_offset). @@ -1251,6 +1254,73 @@ void memory_region_init(MemoryRegion *mr, memory_region_do_init(mr, owner, name, size); } =20 +static void memory_region_get_addr(Object *obj, Visitor *v, const char *na= me, + void *opaque, Error **errp) +{ + MemoryRegion *mr =3D MEMORY_REGION(obj); + uint64_t value =3D mr->addr; + + visit_type_uint64(v, name, &value, errp); +} + +static void memory_region_set_addr(Object *obj, Visitor *v, const char *na= me, + void *opaque, Error **errp) +{ + MemoryRegion *mr =3D MEMORY_REGION(obj); + Error *local_err =3D NULL; + uint64_t value; + + visit_type_uint64(v, name, &value, &local_err); + if (local_err) { + error_propagate(errp, local_err); + return; + } + + memory_region_set_address(mr, value); +} + +static void memory_region_set_container(Object *obj, Visitor *v, + const char *name, void *opaque, + Error **errp) +{ + MemoryRegion *mr =3D MEMORY_REGION(obj); + Error *local_err =3D NULL; + MemoryRegion *old_container =3D mr->container; + MemoryRegion *new_container =3D NULL; + char *path =3D NULL; + + visit_type_str(v, name, &path, &local_err); + + if (!local_err && strcmp(path, "") !=3D 0) { + new_container =3D MEMORY_REGION(object_resolve_link(obj, name, pat= h, + &local_err)); + while (new_container->alias) { + new_container =3D new_container->alias; + } + } + + if (local_err) { + error_propagate(errp, local_err); + return; + } + + object_ref(OBJECT(new_container)); + + memory_region_transaction_begin(); + memory_region_ref(mr); + if (old_container) { + memory_region_del_subregion(old_container, mr); + } + mr->container =3D new_container; + if (new_container) { + memory_region_update_container_subregions(mr); + } + memory_region_unref(mr); + memory_region_transaction_commit(); + + object_unref(OBJECT(old_container)); +} + static void memory_region_get_container(Object *obj, Visitor *v, const char *name, void *opaque, Error **errp) @@ -1275,6 +1345,53 @@ static Object *memory_region_resolve_container(Objec= t *obj, void *opaque, return OBJECT(mr->container); } =20 +static void memory_region_set_alias(const Object *obj, const char *name, + Object *val, Error **errp) +{ + MemoryRegion *mr =3D MEMORY_REGION(obj); + MemoryRegion *subregion, *next; + + /* + * Be conservative and only allow one shotting for the mo + * FIXME: Use a softer error than assert + */ + assert(!mr->alias); + + /* + * FIXME: check we don't already have subregions and + * anything else that might be mutex with aliasing + */ + + memory_region_transaction_begin(); + QTAILQ_FOREACH_SAFE(subregion, &mr->subregions, subregions_link, next)= { + object_property_set_link(OBJECT(subregion), "container", + OBJECT(val), errp); + } + memory_region_ref(mr); + mr->alias =3D MEMORY_REGION(val); + mr->alias->mapped_via_alias++; + memory_region_unref(mr); + memory_region_transaction_commit(); + /* FIXME: add cleanup destructors etc etc */ +} + +static void memory_region_set_alias_offset_prop(Object *obj, Visitor *v, + const char *name, + void *opaque, Error **errp) +{ + MemoryRegion *mr =3D MEMORY_REGION(obj); + Error *local_err =3D NULL; + uint64_t value; + + visit_type_uint64(v, name, &value, &local_err); + if (local_err) { + error_propagate(errp, local_err); + return; + } + + memory_region_set_alias_offset(mr, value); +} + static void memory_region_get_priority(Object *obj, Visitor *v, const char *name, void *opaque, Error **errp) @@ -1285,6 +1402,70 @@ static void memory_region_get_priority(Object *obj, = Visitor *v, visit_type_int32(v, name, &value, errp); } =20 +static void memory_region_set_priority(Object *obj, Visitor *v, + const char *name, void *opaque, + Error **errp) +{ + MemoryRegion *mr =3D MEMORY_REGION(obj); + Error *local_err =3D NULL; + int32_t value; + + visit_type_uint32(v, name, (uint32_t *)&value, &error_abort); + if (local_err) { + error_propagate(errp, local_err); + return; + } + + if (mr->priority !=3D value) { + mr->priority =3D value; + memory_region_readd_subregion(mr); + } +} + +static void memory_region_do_set_ram(MemoryRegion *mr) +{ + if (mr->addr) { + qemu_ram_free(mr->ram_block); + } + if (int128_eq(mr->size, int128_make64(0))) { + return; + } + if (mr->ram) { + mr->ram_block =3D qemu_ram_alloc(int128_get64(mr->size), + RAM_SHARED, mr, &error_abort); + } +} + +static void memory_region_set_ram(Object *obj, Visitor *v, const char *nam= e, + void *opaque, Error **errp) +{ + MemoryRegion *mr =3D MEMORY_REGION(obj); + Error *local_err =3D NULL; + uint8_t value; + + visit_type_uint8(v, name, &value, &error_abort); + if (local_err) { + error_propagate(errp, local_err); + return; + } + + mr->dirty_log_mask |=3D tcg_enabled() ? (1 << DIRTY_MEMORY_CODE) : 0; + /* FIXME: Sanitize error handling */ + /* FIXME: Probably need all that transactions stuff */ + if (mr->ram =3D=3D value) { + return; + } + + mr->ram =3D value; + mr->terminates =3D !!value; /*FIXME: Wrong */ + + if (int128_eq(int128_2_64(), mr->size)) { + return; + } + + memory_region_do_set_ram(mr); +} + static void memory_region_get_size(Object *obj, Visitor *v, const char *na= me, void *opaque, Error **errp) { @@ -1294,6 +1475,19 @@ static void memory_region_get_size(Object *obj, Visi= tor *v, const char *name, visit_type_uint64(v, name, &value, errp); } =20 +static void memory_region_set_object_size(Object *obj, Visitor *v, + const char *name, void *opaque, + Error **errp) +{ + MemoryRegion *mr =3D MEMORY_REGION(obj); + Error *local_err =3D NULL; + uint64_t size; + + visit_type_uint64(v, name, &size, &local_err); + + memory_region_set_size(mr, size); +} + static void memory_region_initfn(Object *obj) { MemoryRegion *mr =3D MEMORY_REGION(obj); @@ -1309,19 +1503,33 @@ static void memory_region_initfn(Object *obj) op =3D object_property_add(OBJECT(mr), "container", "link<" TYPE_MEMORY_REGION ">", memory_region_get_container, - NULL, /* memory_region_set_container */ + memory_region_set_container, NULL, NULL); op->resolve =3D memory_region_resolve_container; =20 - object_property_add_uint64_ptr(OBJECT(mr), "addr", - &mr->addr, OBJ_PROP_FLAG_READ); + object_property_add_link(OBJECT(mr), "alias", TYPE_MEMORY_REGION, + (Object **)&mr->alias, + memory_region_set_alias, + 0); + object_property_add(OBJECT(mr), "alias-offset", "uint64", + NULL, /* FIXME: Add getter */ + memory_region_set_alias_offset_prop, + NULL, NULL); + object_property_add(OBJECT(mr), "addr", "uint64", + memory_region_get_addr, + memory_region_set_addr, + NULL, NULL); object_property_add(OBJECT(mr), "priority", "uint32", memory_region_get_priority, - NULL, /* memory_region_set_priority */ + memory_region_set_priority, + NULL, NULL); + object_property_add(OBJECT(mr), "ram", "uint8", + NULL, /* FIXME: Add getter */ + memory_region_set_ram, NULL, NULL); object_property_add(OBJECT(mr), "size", "uint64", memory_region_get_size, - NULL, /* memory_region_set_size, */ + memory_region_set_object_size, NULL, NULL); } =20 @@ -2666,6 +2874,9 @@ void memory_region_set_size(MemoryRegion *mr, uint64_= t size) } memory_region_transaction_begin(); mr->size =3D s; + if (mr->ram) { + memory_region_do_set_ram(mr); + } memory_region_update_pending =3D true; memory_region_transaction_commit(); } --=20 2.43.0 From nobody Sat Apr 11 18:38:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1775167339; cv=none; d=zohomail.com; s=zohoarc; b=QekOazCcqWm+0PJ2w9fLGCelBgqIdfVAH2AG1X89+ZdgkAJjry5rxLR+WOExQbXMAEFqmzHCOms2BDf+92669jBYQMcWzcpAsTamWqCB0UWv0PLqQ2JBjMyZ7xl16pt7O8VbCkaPJg4BgyHCogs7Mojbu9B5cL0TdKFMpdJNa+4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775167339; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=VUnnhkK/qXiPp936orDPcoBrWF8G/ssU5VMirqtDrGI=; b=N+oUN2JJA3pP/EXDMNIs3iYbLcN3bqG6d78aG9yoYHeY56tbpLL/pofuLNPoMHeNgkPU9U10bgIriozsls4EoJNthAAE3Xep2IvyqSMS1g4dNdl06RR64aQFd7Kp9BJPs2jXERNXyiNjCDP7fOeWUsbvK0lYaELo4XqDLCTKeWc= 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 1775167339082361.0351030295153; Thu, 2 Apr 2026 15:02:19 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Q3A-0000xI-8R; Thu, 02 Apr 2026 17:58:04 -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 1w8Q2e-0000BN-Vf for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:33 -0400 Received: from mail-ed1-x532.google.com ([2a00:1450:4864:20::532]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w8Q2c-0007FL-4W for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:31 -0400 Received: by mail-ed1-x532.google.com with SMTP id 4fb4d7f45d1cf-66e07d6bba5so1939428a12.0 for ; Thu, 02 Apr 2026 14:57:29 -0700 (PDT) Received: from thinkpad-t470s.. (93-143-182-244.adsl.net.t-com.hr. [93.143.182.244]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b9c3cac0e1asm134009166b.27.2026.04.02.14.57.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 14:57:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775167048; x=1775771848; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=VUnnhkK/qXiPp936orDPcoBrWF8G/ssU5VMirqtDrGI=; b=ZnDYAFeA/AWOv6euJNqcBkUNrwjicjQKfKe0FnLm8uWCCrsYgDPNFZezW8WFU2kIPP NVKUrwiHJN/27R65hDfmwPOMK5fykNf2C3j2XS1ocHVaWxrcbev9+7qkdnOSUdo6izdx IWsfZ2QxIhMt5QXhMbWUzjTMKCUWUFnxH8nUQ4MaK5mkbpxOh4XKCEdyyFCdTyFc+orH T8rxCnDxQZ0qXtD4tg07enp2QurOAakNrVPdiB53rkOTC93GI0w5ka7K+QU7Ms472VCr Yf7a3Glf8WNOPix5m44E1d4sshYBjHtdDAsrU0zcsOqcLxU5Xnm2Tuqwy0dxNHPC/RX4 PGjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775167048; x=1775771848; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=VUnnhkK/qXiPp936orDPcoBrWF8G/ssU5VMirqtDrGI=; b=rdCGwrQhWHs9jPlUagF9gamVAWBbo3U18kxNScWrbUWLEnvU0xPRLKUGjxgHJDmi2A 1S2Kvu49q8Ux3aoZbYJR8cl+PYmmiItKXgKTdYOkvg6Q64D6CbGtmj5HXnFwcNwAnsd0 zEQd8AZqkYEC3uiyUWp8U8tTn8CiNEtXUo3aacCSDjxB7Q3sD7nD5mmYKHQos5J5TrhA Nc3tWNngpAPrW5kkug4BFZg4b9iwNEPCx2tkCZwGPx3uKmZ+qTM9ZoUG4cqnUfd0kseM K6WrCMshnGbXrFSrYMh2xqkqv9EhEevqrg3PN3cV5jXya2IUB+BvtiKVazI4KMC/Y37O sCag== X-Gm-Message-State: AOJu0YyMGhbVOKI7+Dd6Sg5rXnPz/K9H9p7wJD+nbbNaxAIli4/Qg9Pi kYoMBXuVICd9vB8jAbdTK5iTFhGD+EpWxq2XNVAVu+gKmXcGKChxl5ApdZtF9ZEs X-Gm-Gg: ATEYQzwaqjTWLsUgot8s76L/WxW6AJ3Q17ejK3f5rIhYkFy4dvF/TBe1+Lp7tvIvLgs FwMFlnFF4iST6+i19Y2KfxT7T7an5IR3uT9jDT6EN2X6CkTyPc7UuAfjSt0gL3jcvvtOlRb9sdZ CYRVxEOp3wwewXGIJqX+vh/yq7ZCI8A4thKOzJMurGBHiYJJZ+RWFaxrGrdvPgzo6jN6z9RjPxq Oogf5JIlDFmFLPjralrHVP1JPkE8C/yD5REaJJUmk4LCMm8cbsoat01p/KMvkMRFIYZk6rynVlp OV59jZjnxjahqLNfUN9KFHwd58FcDuhPxJnMIjRk403Kc7uk+Wd9bMWc4+sXACovRhhHbJTqezZ PH9CQvRD2E260ToZogn7u/9MHnaCesKb75ksHLpMBZrB2S4RStstOgPklgX8DvoDZHDVIXA0TXA luj3YWCEt1WWA0B0PodFlCoVfQHsiuCrsQHSxZJFep6fCIEsV5sw575ybzvzjDLrpY1nhodA== X-Received: by 2002:a17:907:8b93:b0:b9c:ed9:50c8 with SMTP id a640c23a62f3a-b9c67979c9cmr25722466b.26.1775167047654; Thu, 02 Apr 2026 14:57:27 -0700 (PDT) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, alex.bennee@linaro.org, peter.maydell@linaro.org, artem_mygaiev@epam.com, volodymyr_babchuk@epam.com, takahiro.nakata.wr@renesas.com, "Edgar E . Iglesias" , Ruslan_Ruslichenko@epam.com, balaton@eik.bme.hu, Paolo Bonzini , Peter Xu , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v3 26/33] system/memory: implement FDT_GENERIC_MMAP interface Date: Thu, 2 Apr 2026 23:56:11 +0200 Message-ID: <20260402215629.745866-27-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260402215629.745866-1-ruslichenko.r@gmail.com> References: <20260402215629.745866-1-ruslichenko.r@gmail.com> 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::532; envelope-from=ruslichenko.r@gmail.com; helo=mail-ed1-x532.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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775167340839158500 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko The patch implements TYPE_FDT_GENERIC_MMAP interface for the MemoryRegion class. This enables memory region objects to be automatically constructed by FDT parser based on the 'reg' property in the Device tree. The implementation parses register tuples and set base address, size and priority properties. Optionally parent container can be set of newly created memory region. Signed-off-by: Ruslan Ruslichenko --- system/memory.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/system/memory.c b/system/memory.c index cd463a3dde..b3d981dc0c 100644 --- a/system/memory.c +++ b/system/memory.c @@ -38,6 +38,8 @@ =20 #include "memory-internal.h" =20 +#include "hw/core/fdt_generic_util.h" + //#define DEBUG_UNASSIGNED =20 static unsigned memory_region_transaction_depth; @@ -3721,6 +3723,57 @@ static gboolean mtree_info_flatview_free(gpointer ke= y, gpointer value, return true; } =20 +static bool memory_region_parse_reg(FDTGenericMMap *obj, + FDTGenericRegPropInfo reg, Error **errp) +{ + MemoryRegion *mr =3D MEMORY_REGION(obj); + uint64_t base_addr =3D ~0ull; + uint64_t total_size =3D 0; + uint64_t max_addr =3D 0; + int i; + + if (!reg.n) { + return false; + } + + for (i =3D 0; i < reg.n; ++i) { + base_addr =3D MIN(base_addr, reg.a[i]); + max_addr =3D MAX(max_addr, reg.a[i] + reg.s[i]); + total_size +=3D reg.s[i]; + if (reg.p[i] !=3D reg.p[0]) { + error_setg(errp, "FDT generic memory parser does not support" + "mixed priorities"); + return false; + } + } + + if (total_size !=3D max_addr - base_addr) { + error_setg(errp, "FDT generic memory parse does not " + "spport discontiguous or overlapping memory regions"); + return false; + } + + /* + * FIXME: parent should not be optional but we need to implement + * reg-extended in kernel before we can do things properly + */ + if (reg.parents[0]) { + object_property_set_link(OBJECT(mr), "container", reg.parents[0], + &error_abort); + } + object_property_set_int(OBJECT(mr), "size", total_size, &error_abort); + object_property_set_int(OBJECT(mr), "addr", base_addr, &error_abort); + object_property_set_int(OBJECT(mr), "priority", reg.p[0], &error_abort= ); + return false; +} + +static void memory_region_class_init(ObjectClass *oc, const void *data) +{ + FDTGenericMMapClass *fmc =3D FDT_GENERIC_MMAP_CLASS(oc); + + fmc->parse_reg =3D memory_region_parse_reg; +} + static void mtree_info_flatview(bool dispatch_tree, bool owner) { struct FlatViewInfo fvi =3D { @@ -3941,6 +3994,11 @@ static const TypeInfo memory_region_info =3D { .instance_size =3D sizeof(MemoryRegion), .instance_init =3D memory_region_initfn, .instance_finalize =3D memory_region_finalize, + .class_init =3D memory_region_class_init, + .interfaces =3D (InterfaceInfo[]) { + { TYPE_FDT_GENERIC_MMAP }, + { }, + }, }; =20 static const TypeInfo iommu_memory_region_info =3D { --=20 2.43.0 From nobody Sat Apr 11 18:38:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1775167178; cv=none; d=zohomail.com; s=zohoarc; b=TQ4wQbK1UxRP9a+SkBykE0DsF6JLjvryTxvSZexwtkJ6Vg60cfDmkIPRpH4PoaAmhEThXbbxQJf0+7euZhljHZkzacB5xgBnMwKxdbExCXnKgv2mzqfdBq1hdm08pvW6WiKwSRcrwInbRNqEFMJ26lOqR+DnNmQS1uFH6F/0HC0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775167178; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=DyNt2FM/nxiaEh/tMXSTA/gNyXQ+MKhhy7At3qeZl0Y=; b=KSL870rOymc6mjaBvLoe90PY4MnVcZWELnWJpB7vzXDGt+Be0ddi9sgQed0bbs7Swp3v2arrgyB0hQniWRb06grid6reVvJuur8JN1n8VsL/5oCB/u6NhFIGTvHpo1IBbHLwW3ZGWpmITN8Fm2ZM5HdGj6gErTSb+tEd4DRxBxQ= 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 1775167178541860.4996168696495; Thu, 2 Apr 2026 14:59:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Q3B-00019v-1w; Thu, 02 Apr 2026 17:58:05 -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 1w8Q2g-0000CZ-UD for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:35 -0400 Received: from mail-ej1-x631.google.com ([2a00:1450:4864:20::631]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w8Q2d-0007Fq-O9 for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:33 -0400 Received: by mail-ej1-x631.google.com with SMTP id a640c23a62f3a-b9c603ec2dfso58683966b.1 for ; Thu, 02 Apr 2026 14:57:31 -0700 (PDT) Received: from thinkpad-t470s.. (93-143-182-244.adsl.net.t-com.hr. [93.143.182.244]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b9c3cac0e1asm134009166b.27.2026.04.02.14.57.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 14:57:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775167050; x=1775771850; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=DyNt2FM/nxiaEh/tMXSTA/gNyXQ+MKhhy7At3qeZl0Y=; b=M9/eZLPomGtcsugBEFR1+Mu6ESEvHI4fZ71k3pydWdqRHlTM4HdgSl1yDb7cArXMY2 u5QxEGvu9/r45rOxVTbeJ8+UCXsOI6hNM1LT80yEFWwHl6khPzaIl7jDyjO6E3iHn6rg leh6REH2EB8paeQqi9DCxKzlslvpGNE2+qLKw5pRlqNXf1IL5ZweFQyuTFmGXmnL+V5x +paEW+16BLGf5VEkEpDRpQVx/h0yRtnn52w4Y5x8rm6UroMzaOjZRTH++t6xbkGedDG1 YiLheaIdL37hWSV9HwHz7OhPVnYFplcksKEroL0rbO6exIpkxGkWeyXAImp+iym/RurK u5mQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775167050; x=1775771850; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=DyNt2FM/nxiaEh/tMXSTA/gNyXQ+MKhhy7At3qeZl0Y=; b=XVXBV6wh+mYmXdQJt6XiB/OQPjKjEBWZDJr5qN9CJuYfzM9PJBxNf+Cq3mT3f/xAVY 9OUNhSc8r1pWF390/cavNkIsL25SwR41ARgiDHlEcbfisLuxr9FjBDrNDhaYos3KAOvK RsBNR3ardHLqufJoR9guEfHIHikbAb42xBhE0dJVc0gveQWEVRonqoWaIasbXTrxBf2D +ezk0TzurDl1cbSqs7o9LnTVxMRl07Q7koKW3/oPrTXElp+qAPd56H2zc730mezcKtT6 XknrTrPnwNWqxKbExH/lo2OFyT+q2HCZTGhH8ApnItZWEoHwGqjadbFFZAzbJOM2xYOx XMTQ== X-Gm-Message-State: AOJu0Yx/XrBJ5p5AgA4m21ch6TnA6DYqqo+W4m6daUAVcev9sPyS0J8v JSWgllvnYYbIttfVq3xSHFyzQCTYHetOlteF1xpKGypy37nYEmu/uMH17ECIDdWM X-Gm-Gg: AeBDieub1sDtnYBrXh4DdM1VG76we3YBWVykhWwTusNtB0KkMLrywjyJ2ZVDR2a9WWb JX4DOtfiOTgtYZ/xGRDWtrkpG1znJ0Uzz8XCvJWTL+C96BC9m96eTEoYbuEoAyaiTvRFNKi8iD3 vwWftdPbijDqOO0MZ+2wRPfmKIMGLolp3q45ElXNIzomOLz3EdTNjUgBABEzGIdMlu6ZTONwPog eS1c2X63lnYZ6SZybyl2YgIR1ijfeqVJjBEFHBiH2wPj4UO1r1MLG4r8iuSm4nFIa+vCKDvuyy1 zDuhWrhLe4RYWIWBFOG0M3pZyAgVLhe/1AHjT8wh3FmFTrIId3W0SmWnQ7josT34+98IGXmc4Qa a8A3ABEZbUUy+RDS6Knbp3R3n8BtSOngXPUOOZHbsbP7Xj5NjGParbvUntO3kv+cznXo/ACUd+u 0Q1eIx53jKjp1ULp1c7qLruX1hDm35ZJhhrxmKtOA/y+e+MXxQV6Feo+hm9A1wH6P6fPEnOQ== X-Received: by 2002:a17:906:6a1e:b0:b97:feec:5e82 with SMTP id a640c23a62f3a-b9c67b83920mr26615266b.43.1775167049656; Thu, 02 Apr 2026 14:57:29 -0700 (PDT) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, alex.bennee@linaro.org, peter.maydell@linaro.org, artem_mygaiev@epam.com, volodymyr_babchuk@epam.com, takahiro.nakata.wr@renesas.com, "Edgar E . Iglesias" , Ruslan_Ruslichenko@epam.com, balaton@eik.bme.hu Subject: [PATCH v3 27/33] hw/core/fdt_generic_util: initialize serial devices Date: Thu, 2 Apr 2026 23:56:12 +0200 Message-ID: <20260402215629.745866-28-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260402215629.745866-1-ruslichenko.r@gmail.com> References: <20260402215629.745866-1-ruslichenko.r@gmail.com> 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::631; envelope-from=ruslichenko.r@gmail.com; helo=mail-ej1-x631.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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775167179504158501 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko The patch adds proper handling and registration for serial devices instantiated via FDT. The devices with 'chardev' properties are connected to serial backends, if corresponding dts property serial id number is set. Signed-off-by: Ruslan Ruslichenko --- hw/core/fdt_generic_util.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/hw/core/fdt_generic_util.c b/hw/core/fdt_generic_util.c index f3a47cbafe..c92b5c287b 100644 --- a/hw/core/fdt_generic_util.c +++ b/hw/core/fdt_generic_util.c @@ -37,6 +37,7 @@ #include "system/system.h" #include "system/reset.h" #include "qemu/cutils.h" +#include "chardev/char.h" #include "qemu/log.h" #include "qemu/config-file.h" #include "hw/core/boards.h" @@ -721,6 +722,13 @@ static void fdt_init_qdev_properties(char *node_path, = FDTMachineInfo *fdti, continue; } =20 + /* Special case for chardevs. */ + if (!strcmp(propname, "chardev") && !strcmp(p->type, "str")) { + qdev_prop_set_chr(DEVICE(dev), "chardev", + serial_hd(get_int_be(value, len))); + continue; + } + fdt_init_qdev_scalar_prop(dev, p, fdti, node_path, propname, value, len); } --=20 2.43.0 From nobody Sat Apr 11 18:38:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1775167146; cv=none; d=zohomail.com; s=zohoarc; b=JH0EFPvKZ1lBkm9qqhvZC/vw5LMEeMtma3/BW1svCjI+HhngipeMs1+lkYDdt0uMwGr028yWOzScBXDfFob8BUjtju+UdwidraX+7dcFQw2F2Gl+/2WCorq+2yDmlD0WPHlOT/MsxW8QozxK6eeCv26EVT2T5My368QwkYCjyzI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775167146; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Cm4Knrt01+q22g03cv2LHlISpCqmkMA20253kshEnnc=; b=RRBru53fMtq3Qnhekc3KNuBAO4mFQjJFXPB/BsIf4YQKYnDZVYpDMoXLjh7PNgFpZoV+lQvm0F37o8gbewpk1cpzSorXGXW+x4gj5WzQeXaFbi0Cz9MfP4aTOB5RGFNwyB+Zct0sr+D4qenGLhTGXTZNSwZgX5I5A7s0xlZrHXM= 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 1775167146130566.317001667331; Thu, 2 Apr 2026 14:59:06 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Q38-0000bN-WD; Thu, 02 Apr 2026 17:58:03 -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 1w8Q2j-0000H2-2T for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:38 -0400 Received: from mail-ej1-x62c.google.com ([2a00:1450:4864:20::62c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w8Q2g-0007GI-2s for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:36 -0400 Received: by mail-ej1-x62c.google.com with SMTP id a640c23a62f3a-b982518b73fso207763666b.1 for ; Thu, 02 Apr 2026 14:57:32 -0700 (PDT) Received: from thinkpad-t470s.. (93-143-182-244.adsl.net.t-com.hr. [93.143.182.244]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b9c3cac0e1asm134009166b.27.2026.04.02.14.57.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 14:57:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775167051; x=1775771851; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Cm4Knrt01+q22g03cv2LHlISpCqmkMA20253kshEnnc=; b=Ms/btjQpogWBBhSkMEfuT5y12TPi2cVxUJSoyc7Xne2ojCeEovYXz71zyFKTz3uszA tpbDe8JUu7231r3c0fS1Lq7XWkRCEcovfG8A5e7VjjarKVPzPF7fecSY43yYlxQTcwXw XZd+keciCt1y85dLMKXt52uDYRH0Q6887mBmNP4jdDzO0PWboMj4w547lpCEBwYSPnv+ r3u3TKhFGzzCVP7rvKvmREVWfL6L/wWrI1SDavpCLm6qgRhiWh/qQnoFhITM/t6wHZuj r98tY/bAOe7Dzq+5K81jvItKmH8TOWX4+hCU/ZiKfys4ATSeXZOyefQni1+Q0f0yrdDA rjsQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775167051; x=1775771851; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Cm4Knrt01+q22g03cv2LHlISpCqmkMA20253kshEnnc=; b=mZgDBWVZGt1Fo6wU5d0J17ElCAkLKmrS7kLybUXt24X3Q2XdbDaDvD+Fsy/0f+wzKR MfJFQUYksb0ReohVrZwaf8EqFKsP5IkpSYCfiKg7ef+mD+kIrorQKAnHNMOrAL7/R+KM J/kmgW3pFOpLzukKs8qnIMtY+64/js2UZVonTBE9paJxdyI6kPwd4H2DWI7v2shy7upO kMeQXb1dQboQmICjkciFGQhNe+5S7PTbl1DQ4Ikv7y33mw500R3ZyPD7y8HM4aPZDLNr 0Q2Hr36RddkdC5h3c21wWQqrRho0fRjZMK/0M74TisdXtNe3U5zGQxWyGeXiVXPjScs4 QlDQ== X-Gm-Message-State: AOJu0Yy6RH/N4fimIoAOXg8kE0K89ne3hkJzC4EgdEABRiVTaPSCZ3Im l1u2OWnhbqWqaSyj2q3XQpmxALaQviz1hdACBq9wuTZ1eq17wfTPKCGTOavx7PWO X-Gm-Gg: ATEYQzxSigjC60BU9yX/ZeLQJFnguWE2RqmWi3X7pKsIhubC2fawm4DCG4uX6EQ1MTN JOlDmLeuMoub6j831+mPpezJ0n+j7YYPNABLG5FDF3PNKBSf1UfbDeTCD5mJWFg6xN5JuQ89uqM sUEwvp2L2VQL690xsmLLZxn2z1w/uy8NVWsKv6PAlECJ3dAcqDTo/FiiwyHWumJFOM2u5HaW2v1 pzKqZyxK2yi/r/kGd3PKnFVgUGkRUHvLTWBRoBXp/lHjlQdaAQ0+syhbI2lsG5uNqU42TA1xsTm z22EgNM/9zLYq5xgAts+oES2HL4Q8ib0UwmegqdTBYKUbFpq7TK3HUlKQBr8dyLcneSAPlmTS6B FdDdgoARMN4IcQqoFuFqh6HFReU/Glap1Uxa12pfL0QeLdfROcp0GrG4jZmUprUvYC9WSyRtOeq uirXshn94vh4Ly1Cyx4FUKCflj6ozrG/35xkYxpUHP7PxDy+Iz9tjaktEwZbgS/OZbmOfLVw== X-Received: by 2002:a17:907:3e8a:b0:b99:7462:3c57 with SMTP id a640c23a62f3a-b9c6754ad85mr23799266b.14.1775167051283; Thu, 02 Apr 2026 14:57:31 -0700 (PDT) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, alex.bennee@linaro.org, peter.maydell@linaro.org, artem_mygaiev@epam.com, volodymyr_babchuk@epam.com, takahiro.nakata.wr@renesas.com, "Edgar E . Iglesias" , Ruslan_Ruslichenko@epam.com, balaton@eik.bme.hu, Paolo Bonzini , Peter Xu , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v3 28/33] system/memory: add QOM aliases for fdt support Date: Thu, 2 Apr 2026 23:56:13 +0200 Message-ID: <20260402215629.745866-29-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260402215629.745866-1-ruslichenko.r@gmail.com> References: <20260402215629.745866-1-ruslichenko.r@gmail.com> 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::62c; envelope-from=ruslichenko.r@gmail.com; helo=mail-ej1-x62c.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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775167147821154100 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko The patch registers FDT compatibility handlers and QOM aliases of memory subsystem, so that memory regions can be created from a device tree model. The alias 'qemu:system-memory' could be used to attach subregion to root address space. The system memory can also be attached to another container with other priority, which may be used for implementing secure memory structures. Also 'qemu-memory-region' types can be used to create new memory regions. Signed-off-by: Ruslan Ruslichenko --- system/memory.c | 78 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/system/memory.c b/system/memory.c index b3d981dc0c..bd8b6e06ad 100644 --- a/system/memory.c +++ b/system/memory.c @@ -4024,3 +4024,81 @@ static void memory_register_types(void) } =20 type_init(memory_register_types) + +static int sysmem_fdt_init(char *node_path, FDTMachineInfo *fdti, + void *priv) +{ + int i, ret =3D 0, priority =3D 0; + uint32_t container_phandle; + MemoryRegion *container; + char container_node_path[DT_PATH_LENGTH]; + FDTGenericRegPropInfo *reg; + Error *errp =3D NULL; + + fdt_init_set_opaque(fdti, node_path, OBJECT(get_system_memory())); + + /* allow to set system_memory region as subregion */ + container_phandle =3D qemu_fdt_getprop_cell(fdti->fdt, node_path, + "container", + 0, &errp); + if (errp) { + /* container is an optional property */ + error_free(errp); + return 0; + } + + if (qemu_devtree_get_node_by_phandle(fdti->fdt, container_node_path, + container_phandle)) { + error_report("failed to get container node"); + return -1; + } + + while (!fdt_init_has_opaque(fdti, container_node_path)) { + fdt_init_yield(fdti); + } + + container =3D MEMORY_REGION(fdt_init_get_opaque(fdti, + container_node_path)); + reg =3D fdt_get_reg_info(fdti, node_path, OBJECT(get_system_memory())); + if (reg && reg->n > 0) { + if (reg->x[0][0] || reg->x[1][0]) { + error_report("can't change sysmem address or size"); + ret =3D -1; + goto out; + } + priority =3D reg->x[3][0]; + } + + memory_region_add_subregion_overlap(container, 0, + get_system_memory(), priority); + +out: + if (reg) { + g_free(reg->parents); + + for (i =3D 0; i < FDT_GENERIC_REG_TUPLE_LENGTH; ++i) { + g_free(reg->x[i]); + } + + g_free(reg); + } + return ret; +} + +fdt_register_compatibility(sysmem_fdt_init, "compatible:qemu:system-memory= "); + +static const TypeInfo fdt_qom_aliases[] =3D { + { .name =3D "qemu-memory-region", .parent =3D "memory-region" = }, + { .name =3D "simple-bus", .parent =3D "memory-region" = }, +}; + +static void fdt_memory_types(void) +{ + int i; + + for (i =3D 0; i < ARRAY_SIZE(fdt_qom_aliases); ++i) { + type_register_static(&fdt_qom_aliases[i]); + } +} + +type_init(fdt_memory_types) --=20 2.43.0 From nobody Sat Apr 11 18:38:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1775167171; cv=none; d=zohomail.com; s=zohoarc; b=np8GcMceZ+WrUrDYQSfVRWxHxpImPeWSq7wxkdjEo+e0m9n5TctdJsnMO0F3UnsnEiXs/WSmg7hfMcr5HGR2Ca9OKqXs0sHhuxXfCDeboDtgg1JqFD0PLgPSPONXizvNuTeaIJ0BeHXQQ9BxLZePXI0VksA+EbwE+YKwkl+ED9E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775167171; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=S8jISgrMRUU7GJEHRBKA1C6CwoQWVbq4rD3s2gB8p7Y=; b=DjSLROSohri6q46ZH7LcIRT701YofDOaAAlDk8YqB0Q3fTS0ZNMQhp3otMQOBjEZno0CE9pdaw3Xrj5Vczo+bi4sU0RH8LHufAyUd9R7rIKRlT+0NX6mE43bsrfIpdcbJJtfDfahHC0sKcZ+txNoKO/g19A79WdCUkMr0g5jL8A= 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 1775167171449262.9266921236908; Thu, 2 Apr 2026 14:59:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Q3C-0001KX-Ez; Thu, 02 Apr 2026 17:58:06 -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 1w8Q2k-0000Hb-Fr for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:39 -0400 Received: from mail-ej1-x632.google.com ([2a00:1450:4864:20::632]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w8Q2h-0007Gk-0L for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:37 -0400 Received: by mail-ej1-x632.google.com with SMTP id a640c23a62f3a-b9c11eba219so168204466b.2 for ; Thu, 02 Apr 2026 14:57:34 -0700 (PDT) Received: from thinkpad-t470s.. (93-143-182-244.adsl.net.t-com.hr. [93.143.182.244]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b9c3cac0e1asm134009166b.27.2026.04.02.14.57.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 14:57:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775167053; x=1775771853; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=S8jISgrMRUU7GJEHRBKA1C6CwoQWVbq4rD3s2gB8p7Y=; b=rMkHPGi74vNH9MsKPBN68AlX9jzepUuFTYAxC7nfm17aWFxlzjRy4gq+UKIyhqkhP2 AADmEANNjoZEdIYI15GI7L8cBlgdkLvahOE2VFMBfZC6Q+pgqVifetpXXmhNeaSVk5nL qdtYMvnV1miPdPAGxEXZhaPe7ulzNqy7fDU8rW3Gxrmplg1A89v8O/uErVXBidUCg8/J dQclVCILromQCp5g6pVsCp50B3loiJmunt/WjjukaRJ9wKWpbGLzqy3zjbGEv63xVDDe 19xdszxU9T1HctSIoiaBHBf3x7FWJKdzEQsE6Qbv6dp2pXwKVJLtcqgxEcshI04Mhdvl 6SVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775167053; x=1775771853; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=S8jISgrMRUU7GJEHRBKA1C6CwoQWVbq4rD3s2gB8p7Y=; b=gN50qhxEND8yCOe3SWlA4lAPctMJBTPUYQnl1+m8yB6VK3n/MTDQ66RJRYe/lwLCso +AccfAo3yk3X90AWscuoPpRVmc01iY4Pc+HrpKsVzM1YH8xIxh49GNGyCsPvchXBDTtD OPJwqsMpr7A9K+Md1kMl1VuTszfoAknaDpn9W2jVN+g+TNFm15qAqT9pWHnWmecnoAlc 1AJvQNoj9l1HuHPPkYD7GdL3rz/uRdU+tL48jWdQ4szYJT+k5ZP7uL2z1f68GbyZNr+/ vBmMInf2W5K/6ggpCcX07Ivt8xGo2aN7XYiNy/l/XXM8qKwDmA5Sbyb7gSrzzjXuP0gC +Fug== X-Gm-Message-State: AOJu0Ywt92HqGHk6VsewdmCe6L5t8bV1Sxpps8JDVyFK5qAjnvjHGr0r QjEbc9b1EzwnG99S6C/dOXYyC4bNOz4fEDPCt8JCv0CA1CBktN4D5SJ2iENAf5vB X-Gm-Gg: ATEYQzyWNFHM9VIqexspawEw/y47+7FxNRrVwIfLiswUHiE30NZ0MB1iGmUa56yKjTt 1DWj8ZxMaNHsq9/WpJbwlXeqLX4bJ7NpIrmpOlJlE5B6rHqHTKLA2YsFSTrd7spc9JHV0mwybGh nDgP3P5JNJZ1wtlmjzLEGj3GBieXDoIt/paEZc413ZQuT6N8QfkQcHqJ6MsmXNcxP923FzMsUkq vreriyGwvHYUAu5DiRoDd37GzBEgy5Lzx1pmRDJ3492R7ApZXh7p25JEtPbSvGQ4k4kdNfceEqh dDv2fSNyY9SpGu7DSyHrL6ogvkUPVwIpZBA/KvVz/u9sYRdHmK0ggW1ZA5NSOHWCOrQe8KBJLFX sDj6Vlyy3+iJGPJ8PZ78YXdWnR7in5tRSCIAXhWlRVT65cDEL6Ab1P03Y01j6wEoTjaB6UcLrWW 0isiuIuEJoEHtvi9+a05S46Ougr5i+HvQUejzMNrTHoUodb6nqVKQD0UvyHr6MQ/eWeIRIkQ== X-Received: by 2002:a17:907:1c9c:b0:b98:411a:1158 with SMTP id a640c23a62f3a-b9c672ae615mr26790066b.5.1775167052935; Thu, 02 Apr 2026 14:57:32 -0700 (PDT) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, alex.bennee@linaro.org, peter.maydell@linaro.org, artem_mygaiev@epam.com, volodymyr_babchuk@epam.com, takahiro.nakata.wr@renesas.com, "Edgar E . Iglesias" , Ruslan_Ruslichenko@epam.com, balaton@eik.bme.hu Subject: [PATCH v3 29/33] hw/intc/arm_gicv3: Implement FDTGenericIntc interface Date: Thu, 2 Apr 2026 23:56:14 +0200 Message-ID: <20260402215629.745866-30-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260402215629.745866-1-ruslichenko.r@gmail.com> References: <20260402215629.745866-1-ruslichenko.r@gmail.com> 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::632; envelope-from=ruslichenko.r@gmail.com; helo=mail-ej1-x632.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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775167173361158500 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko This patch implements the FDTGenericIntc interface for the ARM GICv3 interrupt controller. This enables the generic FDT machine infrastructure to automatically wire up the GIC and resolve interrupts defined in the Device Tree. Signed-off-by: Ruslan Ruslichenko --- hw/intc/arm_gicv3.c | 45 +++++++++++++++++++++++++ hw/intc/arm_gicv3_common.c | 68 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 113 insertions(+) diff --git a/hw/intc/arm_gicv3.c b/hw/intc/arm_gicv3.c index 542f81ea49..e7e98ef9a5 100644 --- a/hw/intc/arm_gicv3.c +++ b/hw/intc/arm_gicv3.c @@ -18,9 +18,13 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "qemu/module.h" +#include "hw/core/cpu.h" +#include "hw/core/boards.h" #include "hw/intc/arm_gicv3.h" #include "gicv3_internal.h" =20 +#include "hw/core/fdt_generic_util.h" + static bool irqbetter(GICv3CPUState *cs, int irq, uint8_t prio, bool nmi) { /* Return true if this IRQ at this priority should take @@ -452,14 +456,55 @@ static void arm_gic_realize(DeviceState *dev, Error *= *errp) gicv3_init_cpuif(s); } =20 +static void arm_gic_fdt_auto_parent(FDTGenericIntc *obj, Error **errp) +{ + GICv3State *s =3D ARM_GICV3(obj); + SysBusDevice *sbd =3D SYS_BUS_DEVICE(obj); + int num_cpus =3D s->num_cpu; + CPUState *cs; + int i =3D 0; + + for (cs =3D first_cpu; cs; cs =3D CPU_NEXT(cs)) { + if (i >=3D s->num_cpu) { + break; + } + + sysbus_connect_irq(sbd, i, + qdev_get_gpio_in(DEVICE(cs), 0)); + sysbus_connect_irq(sbd, i + num_cpus, + qdev_get_gpio_in(DEVICE(cs), 1)); + sysbus_connect_irq(sbd, i + 2 * num_cpus, + qdev_get_gpio_in(DEVICE(cs), 2)); + sysbus_connect_irq(sbd, i + 3 * num_cpus, + qdev_get_gpio_in(DEVICE(cs), 3)); + sysbus_connect_irq(sbd, i + 4 * num_cpus, + qdev_get_gpio_in(DEVICE(cs), 4)); + sysbus_connect_irq(sbd, i + 5 * num_cpus, + qdev_get_gpio_in(DEVICE(cs), 5)); + + if (s->maint_irq) { + int intbase =3D s->num_irq - GIC_INTERNAL + i * GIC_INTERNAL; + qemu_irq irq =3D qdev_get_gpio_in(DEVICE(sbd), + intbase + s->maint_irq); + qdev_connect_gpio_out_named(DEVICE(cs), + "gicv3-maintenance-interrup= t", + 0, irq); + } + + i++; + } +} + static void arm_gicv3_class_init(ObjectClass *klass, const void *data) { DeviceClass *dc =3D DEVICE_CLASS(klass); ARMGICv3CommonClass *agcc =3D ARM_GICV3_COMMON_CLASS(klass); ARMGICv3Class *agc =3D ARM_GICV3_CLASS(klass); + FDTGenericIntcClass *fgic =3D FDT_GENERIC_INTC_CLASS(klass); =20 agcc->post_load =3D arm_gicv3_post_load; device_class_set_parent_realize(dc, arm_gic_realize, &agc->parent_real= ize); + fgic->auto_parent =3D arm_gic_fdt_auto_parent; } =20 static const TypeInfo arm_gicv3_info =3D { diff --git a/hw/intc/arm_gicv3_common.c b/hw/intc/arm_gicv3_common.c index 9200671c7a..a393540825 100644 --- a/hw/intc/arm_gicv3_common.c +++ b/hw/intc/arm_gicv3_common.c @@ -34,6 +34,7 @@ #include "system/kvm.h" #include "system/whpx.h" =20 +#include "hw/core/fdt_generic_util.h" =20 static void gicv3_gicd_no_migration_shift_bug_post_load(GICv3State *cs) { @@ -367,6 +368,69 @@ void gicv3_init_irqs_and_mmio(GICv3State *s, qemu_irq_= handler handler, } } =20 +#define FDT_GENERIC_GICV3_TYPE_AFFINITY_ALL 0x01000000U +#define FDT_GENERIC_GICV3_TYPE_AFFINITY_IDX 0x02000000U + +static int arm_gicv3_common_fdt_get_irq(FDTGenericIntc *obj, qemu_irq *irq= s, + uint32_t *cells, int ncells, int max, + Error **errp) +{ + GICv3State *gs =3D ARM_GICV3_COMMON(obj); + int cpu =3D 0; + uint32_t qemu_type; + uint32_t cpu_mask; + uint32_t idx; + + if (ncells !=3D 3) { + error_setg(errp, "ARM GIC requires 3 interrupt cells, %d cells giv= en", + ncells); + return 0; + } + idx =3D cells[1]; + qemu_type =3D cells[0] & 0xff000000; + + switch (cells[0] & 0x00ffffff) { + case 0: + if (idx >=3D gs->num_irq) { + error_setg(errp, "ARM GIC SPI has maximum index of %" PRId32 "= , " + "index %" PRId32 " given", gs->num_irq - 1, idx); + return 0; + } + (*irqs) =3D qdev_get_gpio_in(DEVICE(obj), cells[1]); + return 1; + case 1: /* PPI */ + if (idx >=3D 16) { + error_setg(errp, "ARM GIC PPI has maximum index of 15, " + "index %" PRId32 " given", idx); + return 0; + } + if (qemu_type =3D=3D FDT_GENERIC_GICV3_TYPE_AFFINITY_IDX) { + cpu =3D cells[2] >> 8; + *irqs =3D qdev_get_gpio_in(DEVICE(obj), + gs->num_irq - 16 + idx + cpu * 32= ); + return cpu; + } + + cpu_mask =3D cells[2] >> 8; + while ((cpu_mask || qemu_type =3D=3D FDT_GENERIC_GICV3_TYPE_AFFINI= TY_ALL) + && cpu < max && cpu < gs->num_cpu) { + if ((cpu_mask & 1) || + qemu_type =3D=3D FDT_GENERIC_GICV3_TYPE_AFFINITY_ALL) { + *irqs =3D qdev_get_gpio_in(DEVICE(obj), + gs->num_irq - 16 + idx + cpu * 32= ); + irqs++; + } + cpu_mask >>=3D 1; + cpu++; + } + return cpu; + default: + error_setg(errp, "Invalid cell 0 value in interrupt binding: %d", + cells[0]); + return 0; + } +} + static void arm_gicv3_common_realize(DeviceState *dev, Error **errp) { GICv3State *s =3D ARM_GICV3_COMMON(dev); @@ -624,12 +688,15 @@ static void arm_gicv3_common_class_init(ObjectClass *= klass, const void *data) DeviceClass *dc =3D DEVICE_CLASS(klass); ResettableClass *rc =3D RESETTABLE_CLASS(klass); ARMLinuxBootIfClass *albifc =3D ARM_LINUX_BOOT_IF_CLASS(klass); + FDTGenericIntcClass *fgic =3D FDT_GENERIC_INTC_CLASS(klass); + =20 rc->phases.hold =3D arm_gicv3_common_reset_hold; dc->realize =3D arm_gicv3_common_realize; device_class_set_props(dc, arm_gicv3_common_properties); dc->vmsd =3D &vmstate_gicv3; albifc->arm_linux_init =3D arm_gic_common_linux_init; + fgic->get_irq =3D arm_gicv3_common_fdt_get_irq; } =20 static const TypeInfo arm_gicv3_common_type =3D { @@ -641,6 +708,7 @@ static const TypeInfo arm_gicv3_common_type =3D { .abstract =3D true, .interfaces =3D (const InterfaceInfo[]) { { TYPE_ARM_LINUX_BOOT_IF }, + { TYPE_FDT_GENERIC_INTC }, { }, }, }; --=20 2.43.0 From nobody Sat Apr 11 18:38:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1775167318; cv=none; d=zohomail.com; s=zohoarc; b=Q0Mes01p9A03M+mbD/A4APfbMxrfGhgyvFlHI7yiyRWJak4gE8U363aY+ouW6AI0blXZOJQF5N2xCzTmV7gZhQybZ18qc8K0jaKPzby3Njh26+/T3MLzEWUB8xZwgKPk+VibDvW69fpxzV4BNwbRF9FEsYFbED5601T0CJ2R+5s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775167318; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=oujEPxX53I9dv7z2k7DZb4M01rXo06zxwhP7XQBPers=; b=e/VeBvKBn4aLmCFrCN0Ol4TS2iMcuGz8H5tkmhTvJ3NZCQ54lXaTPtb/lSaYcXw37vWAfkIqorYjrcpk2z7+9xn0O9vJHBnv+wllRorMjxB/Ff2INktOe6SbDoejezcceCfq6pDZ09b72FHjFMMLqE2Zm/0JZY3Mx7TQC5dKHGk= 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 1775167318581244.8155669739034; Thu, 2 Apr 2026 15:01:58 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Q3A-000137-Fv; Thu, 02 Apr 2026 17:58:04 -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 1w8Q2m-0000IY-7F for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:40 -0400 Received: from mail-ej1-x632.google.com ([2a00:1450:4864:20::632]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w8Q2j-0007HS-Co for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:38 -0400 Received: by mail-ej1-x632.google.com with SMTP id a640c23a62f3a-b97f9587e6eso189496166b.3 for ; Thu, 02 Apr 2026 14:57:36 -0700 (PDT) Received: from thinkpad-t470s.. (93-143-182-244.adsl.net.t-com.hr. [93.143.182.244]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b9c3cac0e1asm134009166b.27.2026.04.02.14.57.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 14:57:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775167055; x=1775771855; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=oujEPxX53I9dv7z2k7DZb4M01rXo06zxwhP7XQBPers=; b=E3QsiglyqzSGEBIUujyHcbOv9bFMgt/YeONixxn4vJG3m9vPK4FJc4GMFx5AEzaNNk AXHkgx+TZBNSNkdUgoAnfvKZS1uau+sZUK6LBSrIW14a7xwLYdARC3Z4kYq1sZXQSDWz KD7uobaQw0MRltFbEBgC9+d5JH/kZN8j+iQa/Q18UVCTkbX6WfrjN9eODgAXacNmduiQ aVW9atAywUxMEaKzVf6YhRJ+EpXrxVOeGL7x2f0WVwSJd0+IsKpgWn1255H6B0UnZc5j vV4OVSmgaygZShFUL/+nR0z3ynYB6s6gtO1QjZPmZKIYobW9EEH6BqDGyt18kcrf7FCM sDPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775167055; x=1775771855; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=oujEPxX53I9dv7z2k7DZb4M01rXo06zxwhP7XQBPers=; b=sVICDpShMAV4DHDfHB+XYkdP6ljzHePSN+rFfu24U+n0nsqwM/sOhFdupz4CrReQ6I abSL/YGHgAiXbqfcn3f6KYtc4ojhdtdA5ftZYvaEbtR0QME5lvwfuxyScnfDaov8M2b/ UsnqCuEej5eGNG9Azp3pd4T76bTpnCRpV2P92tB/VKvN6ce5BrnvhxgcEXNIrmYnaC8D 62u/U8AsygqejXbnh+sXi0lTxhQbdsRyMHkCdKgKNhvk9IhijNJvoyF8kLKvfn8PLKCs zAk6PsgABjnoY9tiBIj/Wu6K+d5k6br1Xzsk1UINDvqMQU0b6/CMMoZ57S8phVUR1Bt4 h/Jg== X-Gm-Message-State: AOJu0Yz7WQ4zFvIyP2/hE67Xfrd0WndcY5gOIpyDSqxXmMnG70PC5QRJ YvcfaK0O42B9c83CRhmMG7EYz/dc2HtypNomDl8AF/rTMgi2ekldZ7XofsLt11ew X-Gm-Gg: ATEYQzwJDgYogeFwvKwx3hm8YXFQA+tIBsHyPLYjY6tM9faGHk1UNSktJemBDLTLJMz b8YkUkUCXkmBwYwv5D0pNJQOz/MkbnwPRYLe9H5HrrRyde6o563atxeNmQteKPccS3XFjRSG6x2 eCo/FbNHNxcVedKoZIQrkBKVWSVxEq+xGC7bfhGXgKFuoAUl00mjYZKAbYFovSfTO0t9dJCdWsJ FUBoDh9aDbHuXpeNJpXneL8p3oT6lSh0XaKF7pL2neISM2leWywJV9uUHNGEaFlnH0mkH7V6Mwq 2uC0igo4GWwxq/JelpfevhO7hAAonQBpUeuMwjJraDc5fW6orUEfwTvxY4NMGDifbnixXE0z9HA LfsCqwLkPHw7baj+ZFHSN7FH38kZzv8/74pg+3o632uQi+M979I41Wvaj3q878mEnRmBZud9kCS Fng2O0H3ryvKoYROYj392cnhHJhcYi+NZADlRKFN0/HxhqBCFAzhofwDbFQ/BUIJ58XWF0cQ== X-Received: by 2002:a17:907:1c13:b0:b98:4246:8e6e with SMTP id a640c23a62f3a-b9c67b9c30bmr24678366b.53.1775167055104; Thu, 02 Apr 2026 14:57:35 -0700 (PDT) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, alex.bennee@linaro.org, peter.maydell@linaro.org, artem_mygaiev@epam.com, volodymyr_babchuk@epam.com, takahiro.nakata.wr@renesas.com, "Edgar E . Iglesias" , Ruslan_Ruslichenko@epam.com, balaton@eik.bme.hu Subject: [PATCH v3 30/33] hw/core/fdt_generic_util: Add deferred device initialization support Date: Thu, 2 Apr 2026 23:56:15 +0200 Message-ID: <20260402215629.745866-31-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260402215629.745866-1-ruslichenko.r@gmail.com> References: <20260402215629.745866-1-ruslichenko.r@gmail.com> 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::632; envelope-from=ruslichenko.r@gmail.com; helo=mail-ej1-x632.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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775167320576154100 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko Add a mechanism to defer device initialization until after the main FDT traversal. This introduces a deferred queue in FDTMachineInfo. Devices in this queue are processed in fdt_init_deferred(), which handles their realization, reset registration, and resource parsing (interrupts and memory regions). This allows resolving initialization where devices need to be realized on latest stages or outside of co-routine context. Signed-off-by: Ruslan Ruslichenko --- hw/core/fdt_generic_util.c | 28 ++++++++++++++++++++++++++++ include/hw/core/fdt_generic.h | 8 ++++++++ 2 files changed, 36 insertions(+) diff --git a/hw/core/fdt_generic_util.c b/hw/core/fdt_generic_util.c index c92b5c287b..ae54ada11d 100644 --- a/hw/core/fdt_generic_util.c +++ b/hw/core/fdt_generic_util.c @@ -93,6 +93,13 @@ static bool qemu_irq_shared_or_handler(bool *inputs, int= n) return false; } =20 +static void fdt_parse_node_reg_prop(FDTMachineInfo *fdti, char *node_path, + Object *dev); +static void fdt_parse_node_irq_prop(FDTMachineInfo *fdti, char *node_path, + Object *dev); +static void fdt_init_device_realize(FDTMachineInfo *fdti, char *node_path, + Object *dev); + static void qemu_irq_shared_handler(void *opaque, int n, int level) { QEMUIRQSharedState *s =3D opaque; @@ -162,6 +169,26 @@ static void fdt_init_cpu_clusters(FDTMachineInfo *fdti) } } =20 +static void fdt_init_deferred(FDTMachineInfo *fdti) +{ + while (fdti->deferred) { + FDTDeferredNode *dnode =3D fdti->deferred; + + fdt_debug("FDT: Deferred realize node: %s\n", + dnode->node_path); + + fdt_init_device_realize(fdti, dnode->node_path, OBJECT(dnode->dev)= ); + + fdt_parse_node_reg_prop(fdti, dnode->node_path, OBJECT(dnode->dev)= ); + + fdt_parse_node_irq_prop(fdti, dnode->node_path, OBJECT(dnode->dev)= ); + + fdti->deferred =3D dnode->next; + g_free(dnode->node_path); + g_free(dnode); + } +} + FDTMachineInfo *fdt_generic_create_machine(void *fdt, qemu_irq *cpu_irq) { FDTMachineInfo *fdti =3D fdt_init_new_fdti(fdt); @@ -175,6 +202,7 @@ FDTMachineInfo *fdt_generic_create_machine(void *fdt, q= emu_irq *cpu_irq) while (qemu_co_enter_next(fdti->cq, NULL)) { ; } + fdt_init_deferred(fdti); fdt_init_cpu_clusters(fdti); fdt_init_all_irqs(fdti); memory_region_transaction_commit(); diff --git a/include/hw/core/fdt_generic.h b/include/hw/core/fdt_generic.h index 3961615a9c..2d507392fa 100644 --- a/include/hw/core/fdt_generic.h +++ b/include/hw/core/fdt_generic.h @@ -35,6 +35,12 @@ typedef struct FDTIRQConnection { void *next; } FDTIRQConnection; =20 +typedef struct FDTDeferredNode { + DeviceState *dev; + char *node_path; + void *next; +} FDTDeferredNode; + typedef struct FDTMachineInfo { /* the fdt blob */ void *fdt; @@ -48,6 +54,8 @@ typedef struct FDTMachineInfo { FDTIRQConnection *irqs; /* list of all CPU clusters */ FDTCPUCluster *clusters; + /* list of devices for deferred init */ + FDTDeferredNode *deferred; } FDTMachineInfo; =20 /* --=20 2.43.0 From nobody Sat Apr 11 18:38:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1775167268; cv=none; d=zohomail.com; s=zohoarc; b=YWSfEQyS3GzLD8Wy6Iwt/4RSEK/nElLFOBfxD0LsT4HtG8GZkNU+s8XsvoHc9YKyjYZyzfc3dRKbYOidjP+gLvb4q1IPa8zfT7jMxFMFafjev1Jt9nc3hWBlFsbRw65q+CZ7yRajda21UMWrXTWK0sijLjgXfzF94WmxD+iJV1w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775167268; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=n6mkiV7CLVebcyX6UefYuso6mVsuMOpfGW0RofMKUx8=; b=Oka0YG82QVJAApwX1K2JZc+JaEzRAtUEffrYfY74YIJ5cG8YUbqMw1ioB2QgvnR82PyV4IRiOS6YozHDF+C8s+jVdKEzkAANhlvRFfKWL8XzaX3R3LQ9i0bKOkJ9MkC+/t+UNJM3r8IFj/C4HbVSZ2HNFO3tb6L8dHTGtamMrKs= 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 1775167268250938.603951769725; Thu, 2 Apr 2026 15:01:08 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Q3C-0001MB-Sp; Thu, 02 Apr 2026 17:58:06 -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 1w8Q2o-0000Lt-3S for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:42 -0400 Received: from mail-ej1-x62b.google.com ([2a00:1450:4864:20::62b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w8Q2l-0007Hz-Ho for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:41 -0400 Received: by mail-ej1-x62b.google.com with SMTP id a640c23a62f3a-b8d7f22d405so207524266b.0 for ; Thu, 02 Apr 2026 14:57:38 -0700 (PDT) Received: from thinkpad-t470s.. (93-143-182-244.adsl.net.t-com.hr. [93.143.182.244]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b9c3cac0e1asm134009166b.27.2026.04.02.14.57.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 14:57:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775167057; x=1775771857; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=n6mkiV7CLVebcyX6UefYuso6mVsuMOpfGW0RofMKUx8=; b=M34Fax9n9DAJvQgTwhFcpz6CXZ6Ij4HTI+h3dGjFCUi7zowmxjx18Wo9XpdCW0OVAG u4M9THcXZfFHywlQpaTBkTO2F8kyALzpFP6AhGaMWg0gh75t2TATd3oPqqNdFaTauGWA 2PiNC/enjI/D9/6qa9GeZvoZEB98Ezf30FGYniLJGu0+/m8f1+CcExTgNDDlquODGanh MfH6PcUbYnt9K8UX8+7OQdE2r6rBHtd441Ej3RIpAcHUBAKDl252DuszSooxy1neV5RY SeKIY3zpwT0TznN+at+NJuGv8pWzbaHbY9Ohya3zQISBiZKywp78eRzRkX2dUmskS9Nq sV6Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775167057; x=1775771857; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=n6mkiV7CLVebcyX6UefYuso6mVsuMOpfGW0RofMKUx8=; b=hZPKaCZTgt6DeQhTAjMEk0QTlLKgEWpq+lAUOpIMesdC+sR1HQ+LI/VB2cQ6lueXLI WX7OcOll7uA5qYhz9nrWg6PXyxjL2FL6YfXihgNHljrNiBkfeBeA+jstP/L+Ewj/3M7t mwceeRWeoasNOroTSdjipem20ckmkTR1NvHw9vgqg9lDlucvmtIr8o7w8Tv9a31X9RaN H0xKhaC63Ul3qNtRwFl31g/+g3HHC1XcEg+mqD7KghqJCWXA5DDpKC94h/ojfsBzcgNV 1iwCVrH7Tj6KRmS2wifMWlshOHT4OsCyXSviQSefxgKzTwMV9IjYuSxJCEFveV0nC6rc ICUw== X-Gm-Message-State: AOJu0Yyc5HDt/oLupmIOXtKAwVctrxNAKoZP/mT7tQe2LMeeWPLYcc9B 5xi1fyjHctuRV8jNRwNaew2NBxar4ZeLWtipIHOug76AGV3se8qDz7sb7ECxAPx5 X-Gm-Gg: ATEYQzzv4bVWbR87eeXVzD0eKgj7FshpEc5IjxP9rri6nAj6rWjv4Qwi1cTqnsWnwbI HGuMoVTFfqF7IFuo69ITzSKEPjfocZ2HEUoJp4qnEqJNzcRQm5q04fE55iDrMeDBHnVVU46DLjL FZLPVoeuaA1uoBqPNcU1SVXpXk7F4jS/4QVYfw/bFw5iJ8B5NAnSEB0+NraLXG7Iv/Iyw6lg5CT /Kx/kMUO8ZyjBfxfII1QpA3x+AXedymOASo1a+CwC41c85inftRa76oZRnENsOMH+RTE7CXvKss pfiv2Knsfxu1i5d5B8zPyLXwwKsF727jUIp9v/TUzksIRKHgevKQOCMPdsohq2BIPN4k0xU6kOD 2vh2Dm0e3LUesHwCjCm6t5WO3tSz5hF47KiuPjj77p6gSb6zwWCBAGplcDmBEEEFnXTjxRkQKQ3 ZwqCpJfS+qpKwmJMVESEknSSHAXFF0b14MPY77sKoL9Gm/Jurt6xglRHqDpJ4d9/u40KRNNA== X-Received: by 2002:a17:907:c988:b0:b98:32c1:249b with SMTP id a640c23a62f3a-b9c674465ebmr22620466b.8.1775167057079; Thu, 02 Apr 2026 14:57:37 -0700 (PDT) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, alex.bennee@linaro.org, peter.maydell@linaro.org, artem_mygaiev@epam.com, volodymyr_babchuk@epam.com, takahiro.nakata.wr@renesas.com, "Edgar E . Iglesias" , Ruslan_Ruslichenko@epam.com, balaton@eik.bme.hu Subject: [PATCH v3 31/33] hw/core/fdt_generic_util: Add blockdev binding support Date: Thu, 2 Apr 2026 23:56:16 +0200 Message-ID: <20260402215629.745866-32-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260402215629.745866-1-ruslichenko.r@gmail.com> References: <20260402215629.745866-1-ruslichenko.r@gmail.com> 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::62b; envelope-from=ruslichenko.r@gmail.com; helo=mail-ej1-x62b.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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775167268502158500 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko The path add possibility to bind to QEMU block backends via the blockdev-node-name property. This enables support for the modern -blockdev command line option. Since the generic FDT initialization traverses the device tree inside QEMU coroutines, realizing block devices immediately causes conflict: QEMU's block subsystem and AIO (Asynchronous I/O) are not compatible with being invoked from within these setup coroutines. To resolve this block device initialization are moved to the latest stage outside of co-routing context. Signed-off-by: Ruslan Ruslichenko --- hw/core/fdt_generic_util.c | 77 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/hw/core/fdt_generic_util.c b/hw/core/fdt_generic_util.c index ae54ada11d..7d074745b5 100644 --- a/hw/core/fdt_generic_util.c +++ b/hw/core/fdt_generic_util.c @@ -69,6 +69,8 @@ static void fdt_get_irq_info_from_intc(FDTMachineInfo *fd= ti, qemu_irq *ret, char *intc_node_path, uint32_t *cells, uint32_t num_cells, uint32_t max, Error **errp); +static bool fdt_attach_blockdev(FDTMachineInfo *fdti, + const char *node_path, Object *dev); =20 typedef struct QEMUIRQSharedState { qemu_irq sink; @@ -173,6 +175,19 @@ static void fdt_init_deferred(FDTMachineInfo *fdti) { while (fdti->deferred) { FDTDeferredNode *dnode =3D fdti->deferred; + int length =3D 0; + + int offset =3D fdt_path_offset(fdti->fdt, dnode->node_path); + if (offset < 0) { + error_report("%s Couldn't find node %s: %s", __func__, + dnode->node_path, fdt_strerror(offset)); + } + const char *blockdev =3D fdt_stringlist_get(fdti->fdt, offset, + "blockdev-node-name", 0, &le= ngth); + + if (blockdev && object_property_find(OBJECT(dnode->dev), "drive"))= { + fdt_attach_blockdev(fdti, dnode->node_path, OBJECT(dnode->dev)= ); + } =20 fdt_debug("FDT: Deferred realize node: %s\n", dnode->node_path); @@ -212,6 +227,8 @@ FDTMachineInfo *fdt_generic_create_machine(void *fdt, q= emu_irq *cpu_irq) current_machine->smp.cpus =3D fdt_generic_num_cpus; current_machine->smp.max_cpus =3D fdt_generic_num_cpus; =20 + bdrv_drain_all(); + fdt_debug("FDT: Device tree scan complete\n"); return fdti; } @@ -707,6 +724,47 @@ static void fdt_init_qdev_array_prop(Object *obj, fdt_debug_np("set property %s propname to \n", propname); } =20 +/* + * Try to attach by matching drive created by '-blockdev node-name=3DLABEL' + * iff the FDT node contains property 'blockdev-node-name=3DLABEL'. + * + * Return false unless the given node_path has the property. + * + */ +static bool fdt_attach_blockdev(FDTMachineInfo *fdti, + const char *node_path, Object *dev) +{ + static const char propname[] =3D "blockdev-node-name"; + const char *label; + + /* Inspect FDT node for blockdev-only binding */ + label =3D qemu_fdt_getprop(fdti->fdt, node_path, propname, + NULL, NULL); + + /* Skip legacy node */ + if (!label) { + return false; + } + + /* + * Missing matching bdev is not an error: attachment is optional. + * + * error_setg() aborts, never returns: 'return false' is just sanity. + */ + if (!label[0]) { + error_setg(&error_abort, "FDT-node '%s': property '%s' =3D = ", + node_path, propname); + return false; + } + + if (!bdrv_find_node(label)) { + return false; + } + + object_property_set_str(OBJECT(dev), "drive", label, NULL); + return true; +} + static void fdt_init_qdev_properties(char *node_path, FDTMachineInfo *fdti, Object *dev) { @@ -1048,6 +1106,7 @@ static int fdt_init_qdev(char *node_path, FDTMachineI= nfo *fdti, char *compat) { Object *dev, *parent; char *parent_node_path; + ObjectProperty *p; =20 if (!compat) { return 1; @@ -1086,12 +1145,30 @@ static int fdt_init_qdev(char *node_path, FDTMachin= eInfo *fdti, char *compat) =20 fdt_init_qdev_properties(node_path, fdti, dev); =20 + /* + * In case device need to be attached to block backend, + * defer realize to latest stage, outside of co-routines, + * which are not compatible with AIO used by block subsystem + */ + p =3D object_property_find(dev, "drive"); + if (p && !strcmp(p->type, "str")) { + FDTDeferredNode *dnode =3D g_new0(FDTDeferredNode, 1); + *dnode =3D (FDTDeferredNode) { + .dev =3D DEVICE(dev), + .node_path =3D g_strdup(node_path), + .next =3D fdti->deferred + }; + fdti->deferred =3D dnode; + goto exit; + } + fdt_init_device_realize(fdti, node_path, dev); =20 fdt_parse_node_reg_prop(fdti, node_path, dev); =20 fdt_parse_node_irq_prop(fdti, node_path, dev); =20 +exit: g_free(parent_node_path); =20 return 0; --=20 2.43.0 From nobody Sat Apr 11 18:38:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1775167175; cv=none; d=zohomail.com; s=zohoarc; b=R9Gc67ar5xtt6pCbF3rPBXvhKGpD8l3CzTK5VgR5mi0oDL7bZ9w+YxfFij+GXEtl9bWAyJN86r9vUW+1wFWhBy2Su6qVAev1Tcu5SxlhgDkVnxwp6eu5PgU4ke9qt0OJSwbltsT0Euzx3CxmI3rJuq0Imy2sit/7DRlI4YTxxDI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775167175; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=iL3C1pS7IifBgrlCFYdscA+wkLZ194nZOqF5fMNffCY=; b=D/tfL22L0aeR6erFdo72lHhdfl9hg7dkQWkL90PwywZIPIdNbdxqiVgYNUxKLzwriaXg2fNhZOWhI6b28oUVDYGuA5ZXuvkJsQQYhOAjvcVgrEkHz/q8NPqlXIcbbsgfdLtRL0b9gGDMmCAriM3DxH6JidzFVHwc6JlCaA9B2bo= 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 1775167175745399.4775874727121; Thu, 2 Apr 2026 14:59:35 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Q3B-0001Gr-TT; Thu, 02 Apr 2026 17:58:05 -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 1w8Q2p-0000Mz-Ua for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:46 -0400 Received: from mail-ej1-x62a.google.com ([2a00:1450:4864:20::62a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w8Q2n-0007Ij-89 for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:42 -0400 Received: by mail-ej1-x62a.google.com with SMTP id a640c23a62f3a-b9961e4f71bso208944466b.3 for ; Thu, 02 Apr 2026 14:57:40 -0700 (PDT) Received: from thinkpad-t470s.. (93-143-182-244.adsl.net.t-com.hr. [93.143.182.244]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b9c3cac0e1asm134009166b.27.2026.04.02.14.57.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 14:57:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775167059; x=1775771859; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=iL3C1pS7IifBgrlCFYdscA+wkLZ194nZOqF5fMNffCY=; b=e7i3rcM/0HgRHaTVJFv272qgD4rNfsp7KVxhzd53YDbV1pUokSCLCJqnJPOw3bK+Di P2VfdjsKK8GBUoEURZUYcswT0/ZDoqcEwe37JN5Z9B+jmQ57mQj2imTjz8UzvJYA8iPh XsNdUm6zesFTqgZMw6Few0u8EZgb4/u3dQlR77IrVa1Rp9kyl5sVhZNsbPRAe79LJSTq YBydB2T6lHzYkRqz38ULUS/FJdVKEyGlGN78dEO4N38sWw3mNDb64ujhGqffJlqEhkyO yRHcB8wNcXXqRSfr+fZe4LNnwGX/ayeubEo5cfxfbu+XMlTTAQjhYMIU6NKFEwA2m9hz Vkew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775167059; x=1775771859; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=iL3C1pS7IifBgrlCFYdscA+wkLZ194nZOqF5fMNffCY=; b=ekSy3wIzIbir8pIf72Sl1CveKsqCSbl0kEbz2g+/NsilofMkMxqcNBz99Oe2cMCuOI og1J302pnoz/ag3Nnf0GYDkWKIWkglZg/4WCc9BZG07fK0qO8688PgqNUac4kwGPFjNR ofe2YJC/uUrNUsJYMlc9nEzxLz60E4INWbWfxBLg9m3RGfyYuHJegdyViaFvhrRLSLIL yc2i7mhEUZbVUolyOJhvzdlua8zirNHm4ljPP9wMZVIPygaB4QwHSFn0qKB3eozoFJuB 6T9JhR2OwknlKD/YQkXl+9csoaR/vTj2knKjiYNSNSqMDVcUMJl3oZBfEI95C2bSS31U 1TVg== X-Gm-Message-State: AOJu0YzKD2kkZI5HWm7jR1Epp42x76+3WT+IfMY1egL1wmA2g+AtwzQu WKLGzmocNWWg5BzowH3jv4IOViUpUoX8Yz/Sw0mY0pQJxO16F0CdzfMPb+kvGE1U X-Gm-Gg: AeBDiesoWqgkaBCK4OWro7mVxwPbVmHRvZFeQ0dJZ+4VG+lKuDN8lZcpt7e3HmVTe4Q gS0Dq3CND3J/hjmXK5h9u36Myqf3w94ggm9OS/jyhg9Zr/0oorjL8pypkZUiDTY27BQ4qTWHkEC WihC49rup4Qv6hIoEiSfd5mSzKbWPLvixvuTXVW40dWqSBStIkJQGoZYFeyknZJTUHJ3Wq4dqhQ ngNmT2FjyGInB9KggGqbE9Yr10ajtw0FdUyQfP3biO12kAwqCgy4sUrG7JLBCFamB++00qZtGlH eTLiyYFPIc3kOv8PsPsvL8RWsgyPrf72ADxQ6NJwa8AmZ6TdSnePiCR3fzRtxYfZ/X+1tqQRydD fP1fn+MxS4sXCGhaLYgkpxuFSJx08Z0ZTME+cY7kj/xVGP18yYA3w4NQSSrdeDaiFHZbz1VxWm4 N0LiiAJxqcUXO55IHW1/UKhRJLn0SPTXBhF4souGHDiENrtxynGAclOrKB2PC7iOOjya+BNxqVL A0hwQtR X-Received: by 2002:a17:907:a317:b0:b9c:4096:7893 with SMTP id a640c23a62f3a-b9c67308dacmr28594166b.14.1775167059305; Thu, 02 Apr 2026 14:57:39 -0700 (PDT) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, alex.bennee@linaro.org, peter.maydell@linaro.org, artem_mygaiev@epam.com, volodymyr_babchuk@epam.com, takahiro.nakata.wr@renesas.com, "Edgar E . Iglesias" , Ruslan_Ruslichenko@epam.com, balaton@eik.bme.hu, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , "Michael S. Tsirkin" , Richard Henderson , Shameer Kolothum , Jonathan Cameron , Eric Auger Subject: [PATCH v3 32/33] hw/pci-host: add gsi-irqs property array Date: Thu, 2 Apr 2026 23:56:17 +0200 Message-ID: <20260402215629.745866-33-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260402215629.745866-1-ruslichenko.r@gmail.com> References: <20260402215629.745866-1-ruslichenko.r@gmail.com> 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::62a; envelope-from=ruslichenko.r@gmail.com; helo=mail-ej1-x62a.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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775167177284158500 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko Add a new gsi-irqs array property to the GPEX PCI host controller. This enables them to be configured on realize callback. This is required to init GPEX PCI host from a static configuration, such as Hardware device tree. Signed-off-by: Ruslan Ruslichenko --- hw/pci-host/gpex.c | 6 ++++++ include/hw/pci-host/gpex.h | 3 +++ 2 files changed, 9 insertions(+) diff --git a/hw/pci-host/gpex.c b/hw/pci-host/gpex.c index e66784ce51..6125b2c319 100644 --- a/hw/pci-host/gpex.c +++ b/hw/pci-host/gpex.c @@ -148,6 +148,10 @@ static void gpex_host_realize(DeviceState *dev, Error = **errp) s->irq[i].irq_num =3D -1; } =20 + for (i =3D 0; i < s->gsi_irq_num; i++) { + gpex_set_irq_num(s, i, s->gsi_irqs[i]); + } + pci->bus =3D pci_register_root_bus(dev, "pcie.0", gpex_set_irq, gpex_swizzle_map_irq_fn, s, &s->io_mmio, &s->io_ioport, 0, @@ -190,6 +194,8 @@ static const Property gpex_host_properties[] =3D { DEFINE_PROP_SIZE(PCI_HOST_ABOVE_4G_MMIO_SIZE, GPEXHost, gpex_cfg.mmio64.size, 0), DEFINE_PROP_UINT8("num-irqs", GPEXHost, num_irqs, PCI_NUM_PINS), + DEFINE_PROP_ARRAY("gsi-irqs", GPEXHost, gsi_irq_num, + gsi_irqs, qdev_prop_uint32, uint32_t), }; =20 static void gpex_host_class_init(ObjectClass *klass, const void *data) diff --git a/include/hw/pci-host/gpex.h b/include/hw/pci-host/gpex.h index 1da9c85bce..f8e9874756 100644 --- a/include/hw/pci-host/gpex.h +++ b/include/hw/pci-host/gpex.h @@ -64,6 +64,9 @@ struct GPEXHost { GPEXIrq *irq; uint8_t num_irqs; =20 + uint32_t *gsi_irqs; + uint32_t gsi_irq_num; + bool allow_unmapped_accesses; =20 struct GPEXConfig gpex_cfg; --=20 2.43.0 From nobody Sat Apr 11 18:38:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1775167298; cv=none; d=zohomail.com; s=zohoarc; b=cRfaJXQHA2szzOTktV5Q6FB2DTIfN6hxpnOeDiklgWxOPLLeEIT5Wg0fEFJG452yJ/iXWHwhlfEJfiGwNx4E91owvM7NcrGhfu2UsaIhYkcDofQ9LjBRdc+LrPkcSmUrhg/LOqUMLPHbRo0gxABqBZ4cPu/OXkMXoGLrDS1XVDc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775167298; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=3QUCwdkuO2ukE+OVkddbR6FN57t2sGozQkOLPCowkRI=; b=VR6ubvHCwIjverAMPsJQsINbLOLddcYJlJaapQRa/A9jcU8f/ku4ZsUPgYdy0x/rhZpS3LDrS6n7C/vssx5JLP8uXHLN7RT8SOYpIxcB6vQQnaF1RFivfAfvYQt3BVrbh0/rw6GOCLfNhtizY/IwqyGRt/3Nhfzyyp4FFJOSe6o= 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 1775167298103141.21483235314827; Thu, 2 Apr 2026 15:01:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Q3C-0001Ki-Fb; Thu, 02 Apr 2026 17:58:06 -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 1w8Q2t-0000NI-60 for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:47 -0400 Received: from mail-ej1-x630.google.com ([2a00:1450:4864:20::630]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w8Q2p-0007JD-2r for qemu-devel@nongnu.org; Thu, 02 Apr 2026 17:57:45 -0400 Received: by mail-ej1-x630.google.com with SMTP id a640c23a62f3a-b980785a0bfso172392366b.3 for ; Thu, 02 Apr 2026 14:57:42 -0700 (PDT) Received: from thinkpad-t470s.. (93-143-182-244.adsl.net.t-com.hr. [93.143.182.244]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b9c3cac0e1asm134009166b.27.2026.04.02.14.57.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 14:57:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775167061; x=1775771861; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=3QUCwdkuO2ukE+OVkddbR6FN57t2sGozQkOLPCowkRI=; b=Fip32msWJEeslLeHjhrXiw2ps5zxmkBU662j11oRjuPjSRCgz1KT/9ubSKOxRUQh1H 6VTJ7D9D4PSSSTXSr/eOnOJudTo7oNy1yiBeStYtbITIXShko0fWrzgroWElYD/UneRZ zUxEeA27YfsVQ8EJt7tCTAXyZz5t0MxEjWdZ4xab6q4DIHnrwHI/d1OKi1p9FfvIJmLV xxlhZ1lMjXK10Q7uLqzrtsZO8kRf2mJuWIFiOueR+jQi1atuox6Cq0esRP5VOyAUkRlB 1aDcrR0fbMmqRn9iKN21ZJeZgwmKhNGQf5Wx3bRM+j6plaucFgk8Ppr4ttURhL/P1RF3 HNIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775167061; x=1775771861; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=3QUCwdkuO2ukE+OVkddbR6FN57t2sGozQkOLPCowkRI=; b=LeL6K9tseoeV74dPVlMw7GI3gbl5mGInAEj6UKHmgkCDXDd0HdVXlIENd1GKJ74WIC JEihCcYCGrHFdhow+KsFARyxposJtrKljk2fdXDN9Fxv534JzCoSNi49+l6Nvktymw4o FC8OrFsELyvpIbHbEc6v/Po9GkxT8psLY427EHH6KfUCjxzWlYr+Ux1uDzNhr87CeY1D hD0EB9plpgQy5bdGyAVWuGKwsqnFWBmlVkXMNvWebm48iMi7sJ7x3iJmetADpmM1PRWZ UfIRz7biPTiw0FWI2b8gkDPT624/pCxY726CoNDGlaGt2aP9enHSUpwNPwxP239jU26E nMvw== X-Gm-Message-State: AOJu0YyDPDtADNtufpbTrf7bYwiRCtTxNJJTJUM4QmQt6LCprchwVHd1 0cs22uuayZGW97Go2hT0R+vE88S+I9+Lrqwr/gw3dmn+ay17ZEzpR+S3h/Zeldov X-Gm-Gg: ATEYQzw5bh6lm6wLe6UdPOSUjeZ9HpjF6tmDCxPKDApJQ5Jm8QZEurbd6AX6E1+jNjZ guH5w/vlxcvJN2EPUaGjxllLGiMLiv+UP6KVq2NQuj7lWeCDQ+CoyKXTZcHi7AVnenDveaGZC0Q ZNoP0KVFEpC5a5HmgFaLCnoaRrWvLRDMdLMuUfxGtLDQPiRrM/iSDptGjy7Vid17lYdF1P9vDrR LE2+zPov+wmCoyN6HPTTdRsZDadduQ/1L4m45Y7hLZOGkFWrJntddd5xpO8zB2025cmVlwG+uPM yRiExgkBJFUDHhScNDJoodeGnDZlBVqzw2LIZn9rD4H6Zi4FbMbw9nq3kp01Pa5XRj946okkq27 Yc7lQPoPiybjGN9WmjGDPvnYWaYk5I7uqFFdsaIEIfDzNi0zK9vGgHOyQu6AwMGkIAiJJPR+3Fd yEkZdFVipOMJj3LsB80Bzy1+ZcMKr0ijBRTpcIrEADK+qORv6FeTUgHwzF5YFGT4zWH+VFhMFTK FFxgBEG X-Received: by 2002:a17:907:6d18:b0:b97:554:f12e with SMTP id a640c23a62f3a-b9c672ff622mr22578166b.14.1775167060843; Thu, 02 Apr 2026 14:57:40 -0700 (PDT) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, alex.bennee@linaro.org, peter.maydell@linaro.org, artem_mygaiev@epam.com, volodymyr_babchuk@epam.com, takahiro.nakata.wr@renesas.com, "Edgar E . Iglesias" , Ruslan_Ruslichenko@epam.com, balaton@eik.bme.hu Subject: [PATCH v3 33/33] tests/functional: Add functional tests for arm-generic-fdt machine Date: Thu, 2 Apr 2026 23:56:18 +0200 Message-ID: <20260402215629.745866-34-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260402215629.745866-1-ruslichenko.r@gmail.com> References: <20260402215629.745866-1-ruslichenko.r@gmail.com> 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::630; envelope-from=ruslichenko.r@gmail.com; helo=mail-ej1-x630.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, FREEMAIL_FROM=0.001, 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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775167298817158500 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko This patch adds functional tests for the new `arm-generic-fdt` machine type. It introduces two new test suites: 1. test_arm_generic_fdt.py: Validates the firmware boot chain (TF-A and EDK2). It checks the console output for specific patterns indicating successful execution of BL1, BL2, BL31, and UEFI stages. 2. test_arm_generic_fdt_alpine.py: Validates a full OS boot by launching an Alpine Linux ISO and waiting for the welcome message. To support these tests, two pre-compiled Device Tree Blob (DTB) files are added to `tests/data`. The tests reuse the existing firmware assets and Alpine ISO infrastructure from the sbsa-ref tests. Signed-off-by: Ruslan Ruslichenko --- .../arm-generic-fdt/arm64-sbsa-guest.dtb | Bin 0 -> 673 bytes .../aarch64/arm-generic-fdt/arm64-sbsa-hw.dtb | Bin 0 -> 5290 bytes tests/functional/aarch64/meson.build | 2 + .../aarch64/test_arm_generic_fdt.py | 114 ++++++++++++++++++ .../aarch64/test_arm_generic_fdt_alpine.py | 61 ++++++++++ 5 files changed, 177 insertions(+) create mode 100644 tests/data/dtb/aarch64/arm-generic-fdt/arm64-sbsa-guest= .dtb create mode 100644 tests/data/dtb/aarch64/arm-generic-fdt/arm64-sbsa-hw.dtb create mode 100755 tests/functional/aarch64/test_arm_generic_fdt.py create mode 100755 tests/functional/aarch64/test_arm_generic_fdt_alpine.py diff --git a/tests/data/dtb/aarch64/arm-generic-fdt/arm64-sbsa-guest.dtb b/= tests/data/dtb/aarch64/arm-generic-fdt/arm64-sbsa-guest.dtb new file mode 100644 index 0000000000000000000000000000000000000000..5f2a1e9b2826eec45ed97e6dd70= 4649a05d0af4c GIT binary patch literal 673 zcmZuuJx|0i40R8LjsXD+Gtw;#SBZ~>u>%r210zx{4c9=3DLRB?)cf5SiGkFYT#>@=3Dy4 za+VVN*)R69@_F#{1u**nfNSzg@@I68=3D^W8v>j8@IA^dX}3GI;IO)>k7PbPKlJ=3D>_$ zyb&K#d~3ArUzfN-QF`@A85%4bhsws7-xk^i8PPE3l;S(a)gIquNmVr;U=3Dmj7fSh1$ zyjOg4GfyjW=3DRr%HA-g`3DVKL)?Q9um?L}~%Gj9Dhl*jr#VOEm)4-;HZaGP+RU!7Be zjNkJnQ71A{<%{yDoh@5!orix}@kH4L u>UUL2WembX)U{WL2};*?BIuP-;ME#JX9tutJ5}A)Rqs{zbkFQhr~dxU zm~&qnW7ds%^kdwg#dQ|f8C;O1XVAXc=3DnKDrv+lwDUZ=3DB-_H($-zVp_`d!6&|zVYs* z&Sg8YrOje{zH{mFM(6#ctY^`*vk}FUB(u$6jq?P|C0uHEogKu*tZH1_KKfF8Ut*wd ze_6WPzSYJQ`yBLMX7g=3DZRyNF5!>CL{jG>Fhy0p*U@Wzwx2mPi&{fDo8{v%t|z6#yv zQMx|u--Au8^bx!(P$1e*yjsuW;N6dp_%$B!-!WcSP#>@Iy<2!S-d(}F2GS58FLhpb z3$MnzQ@pY!>Lj&XG!Vs1UFVR?`!i>sGUhaMvhNX3f5_7xbUI`4+3sP@U%<7!9=3D4ez zZ)M|IX~Wc}dASQmh>menZp=3DSUT;F53_paG=3D=3D0=3D639VdClp)K|=3DoGv-&JE(RmB=3D= LO? zd!GINFJUNu@?9ki+=3D;Kn@G9cgHuVW;{l0a+Y7-Ojc)SN?l=3DfGb8$s71_YPYi9r?N8>@9XLW>~*e$n3 z&Mvhc2+Vyu99dh=3Dk#Lk;HjdIkG)Ifh9xp3H%`T%3oa&Q-<6 zc~Gn;px?ly3(v=3D^ZG7%1$HH6X@u1mf+8EfYOs`7PVrs)JchdWL#c|(Uk(WM8%Ht@W zK`~ukS?Twdm)H2DwRsYrq_Ez4O^ zhuo6Od^)vdAL|FJ)-74VfwNrB?{J*N+iOJE;OpQnXLO${gyNpoK4%-k;zJyl;BDys zd<v?>CfAH6D z8~cicHN&|xjFUnY5X;}c!kgPVa*L;9=3D*Zh z$7f89-+?Z*+FXopHUr^>Zl7Op)BE0$^~k+sFh*8*LIlIONb>$Gx5U6bKrzfYaQ zuR6I?r|;_k`j^)SwcYnQM#MXZWu`vTw}GQMqVh|eYsJG@T65Wh`Mwt7MP`y$ZV9!% z+zaR{^H8PfY0lUaOH4B^${ zUwRz6;%EG;xHwArl}@KE=3DK}v@Xt1Njagn2_SJZF7 zn)o$)0pE?L`2djLFdvPO+QgHn1UR!b&Eu;ES?jzEr#2hc6O+x-P}(bVJsF~*VG%aQ zRx%E4HcX<-B*SG~E4Ws1tr@(oT*#u-Hc>Gu%uugTno2uNs@i>l<27Q2YL=3D)@#Se03 zM8O>_KW9-G8NJYVA~AuROO(byUkJdMg-`5gEc@aUGT literal 0 HcmV?d00001 diff --git a/tests/functional/aarch64/meson.build b/tests/functional/aarch6= 4/meson.build index 7ea8c22b04..637400496d 100644 --- a/tests/functional/aarch64/meson.build +++ b/tests/functional/aarch64/meson.build @@ -41,6 +41,8 @@ tests_aarch64_system_thorough =3D [ 'sbsaref', 'sbsaref_alpine', 'sbsaref_freebsd', + 'arm_generic_fdt', + 'arm_generic_fdt_alpine', 'smmu', 'tcg_plugins', 'tuxrun', diff --git a/tests/functional/aarch64/test_arm_generic_fdt.py b/tests/funct= ional/aarch64/test_arm_generic_fdt.py new file mode 100755 index 0000000000..061140fa89 --- /dev/null +++ b/tests/functional/aarch64/test_arm_generic_fdt.py @@ -0,0 +1,114 @@ +#!/usr/bin/env python3 +# +# Functional test that boots a kernel and checks the console +# +# Based on test_arm_generic_fdt.py +# +# SPDX-License-Identifier: GPL-2.0-or-later + +from qemu_test import QemuSystemTest, Asset +from qemu_test import wait_for_console_pattern +from qemu_test import interrupt_interactive_console_until_pattern + +from pathlib import Path + +def fetch_firmware(test): + """ + Flash volumes generated using: + + Toolchain from Debian: + aarch64-linux-gnu-gcc (Debian 12.2.0-14) 12.2.0 + + Used components: + + - Trusted Firmware v2.12.0 + - Tianocore EDK2 edk2-stable202411 + - Tianocore EDK2-platforms 4b3530d + + """ + + # Secure BootRom (TF-A code) + fs0_path =3D test.uncompress(Aarch64ArmGenericFdtMachine.ASSET_FLASH0, + format=3D"xz") + + # Non-secure rom (UEFI and EFI variables) + fs1_path =3D test.uncompress(Aarch64ArmGenericFdtMachine.ASSET_FLASH1, + format=3D"xz") + + for path in [fs0_path, fs1_path]: + with open(path, "ab+") as fd: + fd.truncate(256 << 20) # Expand volumes to 256MiB + + test.vm.add_args( + "-blockdev", f"driver=3Dfile,filename=3D{fs0_path},node-name=3Dpfl= ash0", + "-blockdev", f"driver=3Dfile,filename=3D{fs1_path},node-name=3Dpfl= ash1", + ) + + +class Aarch64ArmGenericFdtMachine(QemuSystemTest): + """ + As firmware runs at a higher privilege level than the hypervisor we + can only run these tests under TCG emulation. + """ + + timeout =3D 180 + + # SBSA_FLASH0.fd.xz + ASSET_FLASH0 =3D Asset( + 'https://share.linaro.org/downloadFile?id=3DkyoMLGC9zXa4oA7', + '76eb89d42eebe324e4395329f47447cda9ac920aabcf99aca85424609c338= 4a5') + + # SBSA_FLASH1.fd.xz + ASSET_FLASH1 =3D Asset( + 'https://share.linaro.org/downloadFile?id=3DDj1HRXnDnKtU6Nj', + 'f850f243bd8dbd49c51e061e0f79f1697546938f454aeb59ab7d93e5f0d412fc') + + current_dir =3D Path(__file__).resolve().parent + + hw_dtb_path =3D current_dir.parent.parent/ "data" / "dtb" / "aarch64" = / \ + "arm-generic-fdt" / "arm64-sbsa-hw.dtb" + + dtb_path =3D current_dir.parent.parent/ "data" / "dtb" / "aarch64" / \ + "arm-generic-fdt" / "arm64-sbsa-guest.dtb" + + def test_edk2_firmware(self): + + self.set_machine(f'arm-generic-fdt') + + fetch_firmware(self) + + self.vm.add_args('-machine', f'hw-dtb=3D{self.hw_dtb_path}') + self.vm.add_args('-dtb', str(self.dtb_path)) + + self.vm.add_args('-device', "bochs-display") + self.vm.add_args('-device', "bochs-display") + + self.vm.add_args('-d', 'guest_errors,unimp') + self.vm.set_console() + self.vm.launch() + + # TF-A boot sequence: + # + # https://github.com/ARM-software/arm-trusted-firmware/blob/v2.8.0= /\ + # docs/design/trusted-board-boot.rst#trusted-board-boot-sequen= ce + # https://trustedfirmware-a.readthedocs.io/en/v2.8/\ + # design/firmware-design.html#cold-boot + + # AP Trusted ROM + wait_for_console_pattern(self, "Booting Trusted Firmware") + wait_for_console_pattern(self, "BL1: v2.12.0(release):") + wait_for_console_pattern(self, "BL1: Booting BL2") + + # Trusted Boot Firmware + wait_for_console_pattern(self, "BL2: v2.12.0(release)") + wait_for_console_pattern(self, "Booting BL31") + + # EL3 Runtime Software + wait_for_console_pattern(self, "BL31: v2.12.0(release)") + + # Non-trusted Firmware + wait_for_console_pattern(self, "UEFI firmware (version 1.0") + interrupt_interactive_console_until_pattern(self, "QEMU SBSA-REF M= achine") + +if __name__ =3D=3D '__main__': + QemuSystemTest.main() diff --git a/tests/functional/aarch64/test_arm_generic_fdt_alpine.py b/test= s/functional/aarch64/test_arm_generic_fdt_alpine.py new file mode 100755 index 0000000000..0589f260a4 --- /dev/null +++ b/tests/functional/aarch64/test_arm_generic_fdt_alpine.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python3 +# +# Functional test that boots a kernel and checks the console +# +# Based on test_arm_generic_fdt_alpine.py +# +# SPDX-License-Identifier: GPL-2.0-or-later + +from qemu_test import QemuSystemTest, Asset, skipSlowTest +from qemu_test import wait_for_console_pattern +from test_arm_generic_fdt import fetch_firmware + +from pathlib import Path + +class Aarch64ArmGenericFdtAlpine(QemuSystemTest): + + ASSET_ALPINE_ISO =3D Asset( + ('https://dl-cdn.alpinelinux.org/' + 'alpine/v3.17/releases/aarch64/alpine-standard-3.17.2-aarch64.iso= '), + '5a36304ecf039292082d92b48152a9ec21009d3a62f459de623e19c4bd9dc027') + + current_dir =3D Path(__file__).resolve().parent + + hw_dtb_path =3D current_dir.parent.parent/ "data" / "dtb" / "aarch64" = / \ + "arm-generic-fdt" / "arm64-sbsa-hw.dtb" + + dtb_path =3D current_dir.parent.parent/ "data" / "dtb" / "aarch64" / \ + "arm-generic-fdt" / "arm64-sbsa-guest.dtb" + + + # This tests the whole boot chain from EFI to Userspace + # We only boot a whole OS for the current top level CPU and GIC + # Other test profiles should use more minimal boots + def boot_alpine_linux(self): + self.set_machine('arm-generic-fdt') + + fetch_firmware(self) + iso_path =3D self.ASSET_ALPINE_ISO.fetch() + + self.vm.set_console() + self.vm.add_args('-machine', f'hw-dtb=3D{self.hw_dtb_path}') + self.vm.add_args('-dtb', str(self.dtb_path)) + self.vm.add_args( + "-device", f"ide-cd,bus=3Dahci.0,unit=3D0,drive=3Dcdrom0", + ) + self.vm.add_args( + "-drive", f"file=3D{iso_path},if=3Dnone,id=3Dcdrom0", + ) + self.vm.add_args('-device', "bochs-display") + self.vm.add_args('-netdev', "user,id=3Dnet0") + self.vm.add_args('-device', "e1000e,netdev=3Dnet0") + + self.vm.launch() + wait_for_console_pattern(self, "Welcome to Alpine Linux 3.17") + + def test_alpine_linux(self): + self.boot_alpine_linux() + + +if __name__ =3D=3D '__main__': + QemuSystemTest.main() --=20 2.43.0