From nobody Sat Feb 7 05:49:48 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=1769449592; cv=none; d=zohomail.com; s=zohoarc; b=DMBQ5Bt2PhiqWJbYRRJ5js/xZbci16B8t1eyUa/f6owQd4b20v5oQn/o5uRENq9e8/3CHysmFAyvNQwXJu471NRS0aAkumQldFBHbI8vZHswcZKNYDooVhrUwLcKbe+X2FY/nsFg/XaVRA08wGSRLCIshNeiZ5QwxrtW0x0X8QA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769449592; 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=DLzeXSL2t2tbTXzCZtblMBZrbAJVOypOntKEo8XJDH4=; b=LIWTr4ecgDkGN3si6JWCOm0Ksko6sIH9xMPwJfZgJNbsGWkdhPhJXowro3GcSg7xvBOpRgvZCwSbJPWI/uE4es2v4F31XE2W6DSto/KGRAOwKqkuFrWDkfY2QIfg1JkXm6R8NiT5AbbZhXGYtlWI7IBG3AYagwVTl2zsAlJKmhw= 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 1769449592341841.6047250377512; Mon, 26 Jan 2026 09:46:32 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkQcx-0001TJ-PY; Mon, 26 Jan 2026 12:43:51 -0500 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 1vkQce-0001J3-Ca for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:34 -0500 Received: from mail-wm1-x32f.google.com ([2a00:1450:4864:20::32f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkQcZ-0008Th-PY for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:31 -0500 Received: by mail-wm1-x32f.google.com with SMTP id 5b1f17b1804b1-47ee0291921so40893015e9.3 for ; Mon, 26 Jan 2026 09:43:26 -0800 (PST) Received: from thinkpad-t470s.. (93-143-71-105.adsl.net.t-com.hr. [93.143.71.105]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-435b1e71730sm34199603f8f.26.2026.01.26.09.43.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 09:43:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769449405; x=1770054205; 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=DLzeXSL2t2tbTXzCZtblMBZrbAJVOypOntKEo8XJDH4=; b=jmRlJmKMp+42ey7w8C3UleibYyOnxZmlb7VO2sX7lvLPBQPciMOzk2Ksuft/GeSAgU /AALgom5Jo9aFjEy+id3Sp7Sc3HHUD9tu3rs5VlF7RD9uPjlLSzN2UfL7+0orQuniLFp 6n2NhnjYXrsza8QiJYnWubyJ93DcoVaLqqMTMzbbPhaYz0zbSmLDHuK5rxeCqLuqOLJo vlFEGzSPFVBXztdGRHAHTEBOeYqkZndyoRqloU/Y77RZoDDTLXMCflTMKNMAAZ3Dnyev +c9oHighWjuCy1UB7I4xIsQNSr2ATd2XUjoej+EwpJYtlxTwq5g6Blq6pBldfYL3OjmH tX4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769449405; x=1770054205; 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=DLzeXSL2t2tbTXzCZtblMBZrbAJVOypOntKEo8XJDH4=; b=maUgLYlep4tme+6usiqW0lwCBbrWo6woQYKH3h9c43uAabb52OlQyBXvXP7r6xcKJv 2ib0nu3cZizAjZ0u2NhGp8hxLc5DTztPH9pinFCmZlCS1ozMTIvEuVvfBJFkKVoqY+OM pWa+eJfi6920h6BHGGaTAGp2Ca3xjvxESLpPAg4bdmKRDiFoIOE3gclQN2tizRlAj7zC iHcCRp5+uGKBeTcXc0EZwRGr5ahDFVNHYc76cFDed7auZk22UoCN4y07ZPXIj7sSU/pf wVR+2SUY6tafL6uuEqKWfsUsLB7T5TI0UuU8LAqdThxGKn9FfxqaZIucI2f/9S0CmZXF f2vA== X-Gm-Message-State: AOJu0YzSEm5VPO/CWdaFDifaz11zDR7QN5bSPd/1nMJX3I6LKjI/m/m6 BF27y4d7Rjd+C/D/cTB4cjpfQr0f0cB9Asw5aSzQ2NmL7m5djf0BZbyqXWsbjL23 X-Gm-Gg: AZuq6aJuBqf5DqrIV6tiWNu4HV0WWBYi5/9xKGo76MBx6rsnAuW60ZydVqrqCpzjllp FwFB90L96sET0sYgBSxZzYOimyM13fuphEyWKJ/tHbttcJygQ+Mkb+gmDRfAbHsEgBT8OJM9nkm DK7olnvObkiLANtIidccRJ+u1mKx84XkyilYRxl54i8moXuzAjFhkryxiOijVU9ggZjMSE9ACYL P9/UMg9sHU51rLwnaMZJ9089uyE5TVPkJ1W6G3OJcgBkfVzbozY+uLkjkV5WHassqi/zudQgQLb Ubs8djEmAuXpxI69FE1mjCG0cMKB3mEX9Ow8Icse3MhqRsWZHcGmfzJY7JGFEWlzoL5z/LZxydf Z2dnk5rLDbaYMYi6OQbWEtg5hr/a09RBGtE3qAAYQx0rICznjIXmTJKxAh2yLHwceBC5CzGqIxD DhGm0bIXMiAIsu+dW3gb+MGlJDMqWKSc0XdrW7AqeVDAyW4T1wFsOujA== X-Received: by 2002:a05:600c:3b9d:b0:47e:de23:dd6f with SMTP id 5b1f17b1804b1-4805ce42a6dmr88712645e9.12.1769449404881; Mon, 26 Jan 2026 09:43:24 -0800 (PST) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.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, Alistair Francis , David Gibson Subject: [PATCH 01/27] system/device_tree: update qemu_fdt_getprop/_cell Date: Mon, 26 Jan 2026 18:42:47 +0100 Message-ID: <20260126174313.1418150-2-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260126174313.1418150-1-ruslichenko.r@gmail.com> References: <20260126174313.1418150-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::32f; envelope-from=ruslichenko.r@gmail.com; helo=mail-wm1-x32f.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: 1769449595726154100 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko Update 'qemu_fdt_getprop' and 'qemu_fdt_getprop_cell' to support property inheritence from parent node, in case 'inherit' argument is set. Update 'qemu_fdt_getprop_cell' to allow accessing specific cells within multi-cell property array. Introduced 'qemu_devtreedd_getparent' as it is needed by both internal and external users. 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 ++-- hw/arm/xlnx-zcu102.c | 3 ++- include/system/device_tree.h | 32 +++++++++++++++++++------------- system/device_tree.c | 33 ++++++++++++++++++++++++--------- 6 files changed, 55 insertions(+), 33 deletions(-) diff --git a/hw/arm/boot.c b/hw/arm/boot.c index c97d4c4e11..829b8ba12f 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, + false, &error_fatal); + scells =3D qemu_fdt_getprop_cell(fdt, "/", "#size-cells", 0, + false, &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..66eba5d667 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, + false, &error_fatal); + scells =3D qemu_fdt_getprop_cell(fdt, "/", "#size-cells", 0, + false, &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..823e316f91 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, false, &error_fatal); scells =3D qemu_fdt_getprop_cell(fdt, "/", "#size-cells", - NULL, &error_fatal); + 0, false, &error_fatal); intc =3D find_int_controller(fdt); if (!intc) { /* Not fatal, we just won't provide virtio. This will diff --git a/hw/arm/xlnx-zcu102.c b/hw/arm/xlnx-zcu102.c index 3ba2736bab..8f67c8be48 100644 --- a/hw/arm/xlnx-zcu102.c +++ b/hw/arm/xlnx-zcu102.c @@ -88,7 +88,8 @@ static void zcu102_modify_dtb(const struct arm_boot_info = *binfo, void *fdt) &error_fatal); =20 for (i =3D 0; node_path && node_path[i]; i++) { - r =3D qemu_fdt_getprop(fdt, node_path[i], "method", &prop_len,= NULL); + r =3D qemu_fdt_getprop(fdt, node_path[i], "method", &prop_len, + false, NULL); method_is_hvc =3D r && !strcmp("hvc", r); =20 /* Allow HVC based firmware if EL2 is enabled. */ diff --git a/include/system/device_tree.h b/include/system/device_tree.h index 49d8482ed4..f34b8b7ef9 100644 --- a/include/system/device_tree.h +++ b/include/system/device_tree.h @@ -96,27 +96,28 @@ int qemu_fdt_setprop_phandle(void *fdt, const char *nod= e_path, * @node_path: node path * @property: name of the property to find * @lenp: fdt error if any or length of the property on success + * @inherit: if not found in node, look for property in parent * @errp: handle to an error object * * returns a pointer to the property on success and NULL on failure */ const void *qemu_fdt_getprop(void *fdt, const char *node_path, const char *property, int *lenp, - Error **errp); + bool inherit, Error **errp); /** - * qemu_fdt_getprop_cell: retrieve the value of a given 4 byte property - * @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. - * @errp: handle to an error object - * - * returns the property value on success - */ +* qemu_fdt_getprop_cell: retrieve the value of a given 4 byte property +* @fdt: pointer to the device tree blob +* @node_path: node path +* @property: name of the property to find +* @ofset: the index of 32bit cell to retrive +* @inherit: if not found in node, look for property in parent +* @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, - Error **errp); + const char *property, int offset, + bool inherit, 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); @@ -193,6 +194,11 @@ int qemu_fdt_setprop_sized_cells_from_array(void *fdt, }) =20 =20 +int qemu_devtree_getparent(void *fdt, char *node_path, + const char *current); + +#define DT_PATH_LENGTH 1024 + /** * qemu_fdt_randomize_seeds: * @fdt: device tree blob diff --git a/system/device_tree.c b/system/device_tree.c index 1ea1962984..41bde0ba5a 100644 --- a/system/device_tree.c +++ b/system/device_tree.c @@ -429,7 +429,8 @@ int qemu_fdt_setprop_string_array(void *fdt, const char= *node_path, } =20 const void *qemu_fdt_getprop(void *fdt, const char *node_path, - const char *property, int *lenp, Error **errp) + const char *property, int *lenp, + bool inherit, Error **errp) { int len; const void *r; @@ -439,31 +440,35 @@ const void *qemu_fdt_getprop(void *fdt, const char *n= ode_path, } r =3D fdt_getprop(fdt, findnode_nofail(fdt, node_path), property, lenp= ); if (!r) { + char parent[DT_PATH_LENGTH]; + if (inherit && !qemu_devtree_getparent(fdt, parent, node_path)) { + return qemu_fdt_getprop(fdt, parent, property, lenp, true, err= p); + } error_setg(errp, "%s: Couldn't get %s/%s: %s", __func__, node_path, property, fdt_strerror(*lenp)); + return NULL; } return r; } =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 offset, + bool inherit, 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, + inherit, errp); if (!p) { return 0; - } else if (*lenp !=3D 4) { + } + if (len < (offset + 1) * 4) { error_setg(errp, "%s: %s/%s not 4 bytes long (not a cell?)", __func__, node_path, property); - *lenp =3D -EINVAL; return 0; } - return be32_to_cpu(*p); + return be32_to_cpu(p[offset]); } =20 uint32_t qemu_fdt_get_phandle(void *fdt, const char *path) @@ -633,6 +638,16 @@ out: return ret; } =20 +int qemu_devtree_getparent(void *fdt, char *node_path, const char *current) +{ + int offset =3D fdt_path_offset(fdt, current); + int parent_offset =3D fdt_supernode_atdepth_offset(fdt, offset, + fdt_node_depth(fdt, offset) - 1, NULL); + + return parent_offset >=3D 0 ? + fdt_get_path(fdt, parent_offset, node_path, DT_PATH_LENGTH) : 1; +} + void qmp_dumpdtb(const char *filename, Error **errp) { ERRP_GUARD(); --=20 2.43.0 From nobody Sat Feb 7 05:49:48 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=1769449913; cv=none; d=zohomail.com; s=zohoarc; b=VrhODjOedFDNg2UVbR6gyIaGrA2V7l1/BAq4ytzre5ws6GEWQrqLbjzqw3MDHJSpl2YSfX78GRNXZtwaDIusIYxUt3dAo9jR57QyOLx5Pzs7rVX/mwAGstdEG/1b6Nlly6r0q6n14hvmgOClooa1LGIOg0lp+2buIT2HRtDoBq8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769449913; 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=OpWtN94Xa+aWszMSoi6aLvSs25LMajBLRGooOPWDaj8=; b=ZehUXPqZk+6U7YuIf/eTpfOQiRhRch74YrXQxoTC6sILeaDWLczijqAzxtWZTJsEsjtSfQRpFmWSlLMOz+xYA7DlNHReariPA8EyAdSLDYt/eB+q6QTTU+dPoXnKCtVMAyrQxYE7B/zurlXrybzlbF6q8VlqTxXSeTjiKnck8JM= 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 1769449913389690.557840378087; Mon, 26 Jan 2026 09:51:53 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkQd7-0001cQ-5j; Mon, 26 Jan 2026 12:44:01 -0500 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 1vkQcf-0001Jd-EU for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:34 -0500 Received: from mail-wr1-x42f.google.com ([2a00:1450:4864:20::42f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkQca-0008Tt-8E for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:32 -0500 Received: by mail-wr1-x42f.google.com with SMTP id ffacd0b85a97d-4327555464cso3259024f8f.1 for ; Mon, 26 Jan 2026 09:43:27 -0800 (PST) Received: from thinkpad-t470s.. (93-143-71-105.adsl.net.t-com.hr. [93.143.71.105]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-435b1e71730sm34199603f8f.26.2026.01.26.09.43.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 09:43:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769449406; x=1770054206; 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=OpWtN94Xa+aWszMSoi6aLvSs25LMajBLRGooOPWDaj8=; b=QyQK6smXyASpVKovj7huBqIoC3RxawqfVSanRv8SW/vG+G+3uMhXI59gBLcDicBXKe DqBpZ+6hV/vM4jzfplHCNFZxr5BjymADpNEXN46dMDJEx7NDOPXVXVvDB2vKj4yQCLZy qrZyZpA6isIhylL2mRE4ASUHFQZIN0A872xWcbTbf5+HIFHv8RQEFfIp89eyqqTQt9TP 8vfLD6mkNXzSeg6R4UIBAEc0EOHm1G0DBLK5cpFZ4XJbtQkFszCKRtZ8jq9ql4JKrrQp ykYP/I+b3iwfa/frhcOb5bzGDyCQraO0dNOriwCIVygwKW601/Ri6cWmQNbi6yP2cF+H gWGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769449406; x=1770054206; 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=OpWtN94Xa+aWszMSoi6aLvSs25LMajBLRGooOPWDaj8=; b=uOzQO8JQCsfZlzUOM+m9Rn98drjayfcI9/RWJGH2JHMaUpbCajsdf3y6jmekkZGMWw NiLqAcnJTpXNOcQg2co4U++xZ/WOvZ54tTttF/se/hqvI876+iSCM74C6WptS644pvWt 85XnKk8uI9C4392ZnjRbgmOT7Sh0xo7NPIx64ZYMZmvGvcerOjmEEKAU5iYFoEJMD/57 ccxjdM6oZY5Z5OPjn43rlb1JLLGDI/+E4oPo9tn6vYVbxRzIbbt4VkgorrBP2Xe+4I8Q dqHs+CaYbMFV3++cpKr52D3lR5UjkBJlBhE2cxXB5nJZQFTkf0Ht1unwAtYL2C8HzY4a tjNQ== X-Gm-Message-State: AOJu0Yzev/4lb3CtgtavMki+SdianKBl8FmlDCz5tQkCB+ifZDg/KD54 GgF/c/ZSKXtgI+E0+Ymw/ORu48O5o1CnkoeRzNltORyVJCt7tagMTkB4Tk7M/+lL X-Gm-Gg: AZuq6aK9qPaMRhi5Wf1O1WHHlTuXCZllJ+vics16KhZzkArAfEzzrQBE0iAVboFY7Nn tQ5e8aqDB33JNn20+pMv9EJ+8B8y6Tq46bcD5LCeCb6PbjBJ/EIpc0F2Nt4uVhcKNfvOCf6jIRw Rx62WqVbsAq1FvPC5mcOXsCZPLWlm5P2nrpkFNeQ6OnCnsybowVXIri5DmyR4FdpRmsVKtNDbN1 mpA170n8ss1ejXUWd8qKdZXjyVsQ5jQefx16SExXqJ/o8PK/clAQqT8nDdpYOTnwc1x8MyDqjuk jN6AguosaTowsRN9vFa2pgS8Hub/A6qhlE2W5xZ2oYYBJ5Ri1aqFJghSQSHNzt7IkTyQW38zh+L OzBlIYCmg790Kr7MugfRFrQrU8zcMpgnyDOzgh2RgBkSoAOhF1JPqe3VViUQq0B6184v2e8XGUU wF1JQB9yqFcTJxcus8RP1Oj16m8T/UZQ9nOftDlUC46wX5v7RRetTtQg== X-Received: by 2002:a05:6000:2289:b0:430:c76b:fadd with SMTP id ffacd0b85a97d-435ca16783bmr8977031f8f.28.1769449405904; Mon, 26 Jan 2026 09:43:25 -0800 (PST) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.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, Alistair Francis , David Gibson Subject: [PATCH 02/27] system/device_tree: add few parsing and traversal helpers Date: Mon, 26 Jan 2026 18:42:48 +0100 Message-ID: <20260126174313.1418150-3-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260126174313.1418150-1-ruslichenko.r@gmail.com> References: <20260126174313.1418150-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::42f; envelope-from=ruslichenko.r@gmail.com; helo=mail-wr1-x42f.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: 1769449914343158500 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 | 30 ++++++ system/device_tree.c | 203 +++++++++++++++++++++++++++++++++++ 2 files changed, 233 insertions(+) diff --git a/include/system/device_tree.h b/include/system/device_tree.h index f34b8b7ef9..458dbb74b4 100644 --- a/include/system/device_tree.h +++ b/include/system/device_tree.h @@ -90,6 +90,13 @@ int qemu_fdt_setprop_string_array(void *fdt, const char = *node_path, int qemu_fdt_setprop_phandle(void *fdt, const char *node_path, const char *property, const char *target_node_path); + +uint64_t qemu_fdt_getprop_sized_cell(void *fdt, const char *node_path, + const char *property, int offset, + int size, Error **errp); +const char *qemu_fdt_getprop_string(void *fdt, const char*node_path, + const char *property, int cell, + bool inherit, Error **errp); /** * qemu_fdt_getprop: retrieve the value of a given property * @fdt: pointer to the device tree blob @@ -193,9 +200,32 @@ int qemu_fdt_setprop_sized_cells_from_array(void *fdt, qdt_tmp); \ }) =20 +typedef struct QEMUDevtreeProp { + char *name; + int len; + void *value; +} QEMUDevtreeProp; + +/* node queries */ + +char *qemu_devtree_get_node_name(void *fdt, const char *node_path); +int qemu_devtree_get_num_children(void *fdt, const char *node_path, int de= pth); +char **qemu_devtree_get_children(void *fdt, const char *node_path, int dep= th); +int qemu_devtree_num_props(void *fdt, const char *node_path); +QEMUDevtreeProp *qemu_devtree_get_props(void *fdt, const char *node_path); =20 +/* node getters */ + +int qemu_devtree_get_node_by_name(void *fdt, char *node_path, + const char *cmpname); +int qemu_devtree_get_node_by_phandle(void *fdt, char *node_path, int phand= le); int qemu_devtree_getparent(void *fdt, char *node_path, const char *current); +int qemu_devtree_get_root_node(void *fdt, char *node_path); + +/* misc */ + +int devtree_get_num_nodes(void *fdt); =20 #define DT_PATH_LENGTH 1024 =20 diff --git a/system/device_tree.c b/system/device_tree.c index 41bde0ba5a..7091a4928e 100644 --- a/system/device_tree.c +++ b/system/device_tree.c @@ -451,6 +451,50 @@ const void *qemu_fdt_getprop(void *fdt, const char *no= de_path, return r; } =20 +const char *qemu_fdt_getprop_string(void *fdt, const char*node_path, + const char *property, int cell, + bool inherit, Error **errp) +{ + int len; + const void *prop; + Error *err =3D NULL; + + if (!errp) { + errp =3D &err; + } + + prop =3D qemu_fdt_getprop(fdt, node_path, property, &len, inherit, err= p); + if (*errp) { + return NULL; + } + while (cell) { + void *term =3D memchr(prop, '\0', len); + size_t diff; + + if (!term) { + error_setg(errp, "%s: Couldn't get %s/%s: %s", __func__, + node_path, property, fdt_strerror(len)); + return NULL; + } + diff =3D term - prop + 1; + len -=3D diff; + assert(len >=3D 0); + prop +=3D diff; + cell--; + } + + if (!len) { + return NULL; + } + + if (!*(char *)prop) { + error_setg(errp, "%s: Couldn't get %s/%s: %s", __func__, + node_path, property, fdt_strerror(len)); + return NULL; + } + return prop; +} + uint32_t qemu_fdt_getprop_cell(void *fdt, const char *node_path, const char *property, int offset, bool inherit, Error **errp) @@ -471,6 +515,22 @@ uint32_t qemu_fdt_getprop_cell(void *fdt, const char *= node_path, return be32_to_cpu(p[offset]); } =20 +uint64_t qemu_fdt_getprop_sized_cell(void *fdt, const char *node_path, + const char *property, int offset, + int size, Error **errp) +{ + uint64_t ret =3D 0; + for (; size; size--) { + ret <<=3D 32; + ret |=3D qemu_fdt_getprop_cell(fdt, node_path, property, offset++,= false, + errp); + if (errp && *errp) { + return 0; + } + } + return ret; +} + uint32_t qemu_fdt_get_phandle(void *fdt, const char *path) { uint32_t r; @@ -638,6 +698,117 @@ out: return ret; } =20 +char *qemu_devtree_get_node_name(void *fdt, const char *node_path) +{ + const char *ret =3D fdt_get_name(fdt, fdt_path_offset(fdt, node_path),= NULL); + return ret ? strdup(ret) : NULL; +} + +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; +} + +QEMUDevtreeProp *qemu_devtree_get_props(void *fdt, const char *node_path) +{ + QEMUDevtreeProp *ret =3D g_new0(QEMUDevtreeProp, + qemu_devtree_num_props(fdt, node_path)= + 1); + int offset =3D fdt_path_offset(fdt, node_path); + int i =3D 0; + + for (offset =3D fdt_first_property_offset(fdt, offset); + offset !=3D -FDT_ERR_NOTFOUND; + offset =3D fdt_next_property_offset(fdt, offset)) { + const char *propname; + const void *val =3D fdt_getprop_by_offset(fdt, offset, &propname, + &ret[i].len); + + ret[i].name =3D g_strdup(propname); + ret[i].value =3D g_memdup2(val, ret[i].len); + i++; + } + return ret; +} + +static void qemu_devtree_children_info(void *fdt, const char *node_path, + int depth, int *num, char **returned_paths) { + int offset =3D fdt_path_offset(fdt, node_path); + int root_depth =3D fdt_node_depth(fdt, offset); + int cur_depth =3D root_depth; + + if (num) { + *num =3D 0; + } + for (;;) { + offset =3D fdt_next_node(fdt, offset, &cur_depth); + if (cur_depth <=3D root_depth) { + break; + } + if (cur_depth <=3D root_depth + depth || depth =3D=3D 0) { + if (returned_paths) { + returned_paths[*num] =3D g_malloc0(DT_PATH_LENGTH); + fdt_get_path(fdt, offset, returned_paths[*num], DT_PATH_LE= NGTH); + } + if (num) { + (*num)++; + } + } + } +} + +char **qemu_devtree_get_children(void *fdt, const char *node_path, int dep= th) +{ + int num_children =3D qemu_devtree_get_num_children(fdt, node_path, dep= th); + char **ret =3D g_malloc0(sizeof(*ret) * num_children); + + qemu_devtree_children_info(fdt, node_path, depth, &num_children, ret); + return ret; +} + +int qemu_devtree_get_num_children(void *fdt, const char *node_path, int de= pth) +{ + int ret; + + qemu_devtree_children_info(fdt, node_path, depth, &ret, NULL); + return ret; +} + +int qemu_devtree_get_node_by_name(void *fdt, char *node_path, + const char *cmpname) { + int offset =3D 0; + char *name =3D NULL; + + do { + char *at; + + offset =3D fdt_next_node(fdt, offset, NULL); + name =3D (void *)fdt_get_name(fdt, offset, NULL); + if (!name) { + continue; + } + at =3D memchr(name, '@', strlen(name)); + if (!strncmp(name, cmpname, at ? at - name : strlen(name))) { + break; + } + } while (offset > 0); + return offset > 0 ? + fdt_get_path(fdt, offset, node_path, DT_PATH_LENGTH) : 1; +} + +int qemu_devtree_get_node_by_phandle(void *fdt, char *node_path, int phand= le) +{ + return fdt_get_path(fdt, fdt_node_offset_by_phandle(fdt, phandle), + node_path, DT_PATH_LENGTH); +} + int qemu_devtree_getparent(void *fdt, char *node_path, const char *current) { int offset =3D fdt_path_offset(fdt, current); @@ -648,6 +819,38 @@ int qemu_devtree_getparent(void *fdt, char *node_path,= const char *current) fdt_get_path(fdt, parent_offset, node_path, DT_PATH_LENGTH) : 1; } =20 +int qemu_devtree_get_root_node(void *fdt, char *node_path) +{ + return fdt_get_path(fdt, 0, node_path, DT_PATH_LENGTH); +} + +static void devtree_scan(void *fdt, int *num_nodes) +{ + int depth =3D 0, offset =3D 0; + + if (num_nodes) { + *num_nodes =3D 0; + } + for (;;) { + offset =3D fdt_next_node(fdt, offset, &depth); + if (num_nodes) { + (*num_nodes)++; + } + if (offset <=3D 0 || depth <=3D 0) { + break; + } + } +} + +int devtree_get_num_nodes(void *fdt) +{ + int ret; + + devtree_scan(fdt, &ret); + return ret; +} + + void qmp_dumpdtb(const char *filename, Error **errp) { ERRP_GUARD(); --=20 2.43.0 From nobody Sat Feb 7 05:49:48 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=1769449781; cv=none; d=zohomail.com; s=zohoarc; b=nvFDXkJx004Gi4/ZzdErMnkLfNFzDWJpcWMm99NgMlnsfYm5mJp6CHz8t8/VckX9OOCUZTODEycXfpGvcEeRNsXfNkPhb10e1nMEC6TJcPh6MHRoZ6uAg1TspfFXnOM3VBcYJA+xxe1yJskiuk5OJevd+T200j0VJ87+yzEh9uI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769449781; 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=sXP99FUoDu1z98GAyOTe9kejbBFJAL0eQ2bvmghE1tE=; b=SNBrkZSIiGvhfSc4BJdqotR0/BF4P7kG8LU6yrcYTtSXo3cJgDKhH0Rc7i87XfPoxST0nCNbFWnMy+yYDCaSEwoUaE77XoZCQ1IdGjvLsIe0NPQ2hSFwUKJ8nLGOVZg8tYyxV9VIJIMB+RFl6K9GPtNcDvTDAvAT59s6UMlyq+Y= 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 1769449781346422.74977521910375; Mon, 26 Jan 2026 09:49:41 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkQcw-0001Rq-IG; Mon, 26 Jan 2026 12:43:51 -0500 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 1vkQcf-0001Je-Ej for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:34 -0500 Received: from mail-wr1-x436.google.com ([2a00:1450:4864:20::436]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkQcc-0008U3-DJ for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:33 -0500 Received: by mail-wr1-x436.google.com with SMTP id ffacd0b85a97d-430f3ef2d37so4213676f8f.3 for ; Mon, 26 Jan 2026 09:43:28 -0800 (PST) Received: from thinkpad-t470s.. (93-143-71-105.adsl.net.t-com.hr. [93.143.71.105]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-435b1e71730sm34199603f8f.26.2026.01.26.09.43.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 09:43:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769449407; x=1770054207; 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=sXP99FUoDu1z98GAyOTe9kejbBFJAL0eQ2bvmghE1tE=; b=OCL2yfnpl32GOrvPijfGuzw5AC4OO+wvInHhRvPYGxaQh7iZMyf4SsracRrNGO8xK2 gWzRR/fRufhTO8UkzwXe1n0WTMC5A05slFw+Y8Yi8yMvwenCDLpCu3FZr6oATKcbor0G HVSZmPLc4klNa5HjmIdWucz77mmJmYkDq381eFHNqPNYBmXWICCHzJMxNs0ecdAP6N4X CvBy9hA4Acj1r1CvkkL9pHLhdJyC6jV/QIyXXKM/7elGI/mGkMEBGxS0TJbsDOGtvJ8W KZyzfsYNjdhslxORbPczRYZ77P0090IOMcAhfCjqK+/t28ekd1FkuRagOh+A4vnXaEK9 oG+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769449407; x=1770054207; 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=sXP99FUoDu1z98GAyOTe9kejbBFJAL0eQ2bvmghE1tE=; b=Cjc8LsicerWmVyzdDRkm3kzRMBrRTH7DUl+F6iqU6gXsdA2TRguI5RLEQSg7BUVGF0 d42hAm6apRcXoT9AkFO53sknfLTE993YJN8cFoJ3BPoBYEwZDTFcQbtx2GpZ/73WAZOQ dGLf9bNcjFLd055V/K5KZk7NUDIAscmuQYGsKatsPKva6+eX+nBWJ+wcWbAl6/Fj8nwS /VzrWLm8kOTdBQT7ZFR92Zt6ysCspRZv2sJQV4kBVdMWX6dnviOTIzABWWcjXiGTZ4W1 nh4XpClsngyfPJuKEQZzEf2bGOGH3GiqaHy0F7avIu8G7OyWlM528IA2r4MmU1qMptGB aSqw== X-Gm-Message-State: AOJu0YyBn9YdQGDDLw0Gq7vpy+0UmS902c/ZuE+g7Gkpmap8eOinXx3M 2tmT7SEpBF6c8VyeH3RqqLbaphg36jl6W79sO7ymqy93kIpsG94WlFDDL251KY5u X-Gm-Gg: AZuq6aIKoXfIBdZttnwgVjLm6YcQRDTlF0jn8dRlbPiq5qaqbZAd3nevhkcPSm4yFHQ jqm9takLhrVAMFSb7WuUZUo/O7u020PU2O73y2HXoC+iq4oj8tyvOcM7XN91ifcE6pcE8u06bwV HD6vFPtXaPxvYlfd4W94Bew8dlGfivk+FFd7JM1Sg67Sd/LbhcPNKnU70mW/y6LOfIJNzkzMeam zuqBUbP3Je//VnU0I3lGXUGZZAypMw6b33KG66ZD72hTvc72SbEEDE7HGxKEK6t7z6BNP3fMcmN ZAAer1Sk/H+9mrqkYfJBrnyF2bAxrWm3TyJJt3MmOcGNAPBUbTZJA1O6H+ZCw8r8jCCQxoxZq1y oXKWuSF6q9urn1WbYUIZqWbe/GUKYdN86L68rv3dfoSBCrFpBvZPnJ7vRxn9oMMEFXR0H1kSy/I gGfKC+ljKDFWIHxc2Iw3DvdyoysUlVQSMheDrwhk1nMCCzmJWtPQQTE3K46N5KoOez X-Received: by 2002:a5d:5849:0:b0:435:9950:edc with SMTP id ffacd0b85a97d-435ca051d61mr7956562f8f.2.1769449407308; Mon, 26 Jan 2026 09:43:27 -0800 (PST) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.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 Subject: [PATCH 03/27] util/log: add log entry for fdt generic utils Date: Mon, 26 Jan 2026 18:42:49 +0100 Message-ID: <20260126174313.1418150-4-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260126174313.1418150-1-ruslichenko.r@gmail.com> References: <20260126174313.1418150-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::436; envelope-from=ruslichenko.r@gmail.com; helo=mail-wr1-x436.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: 1769449783822154100 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 7effba4da4..984879fbd3 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 c44d66b5ce..c8310ddc58 100644 --- a/util/log.c +++ b/util/log.c @@ -523,6 +523,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 Feb 7 05:49:48 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=1769449673; cv=none; d=zohomail.com; s=zohoarc; b=Lfdwc2Ng0zM6a5hemb3DOj/q9iI9EYcu2kEhsTfobfBzLYtimmuo4CdXi95Ab3zPSce62k/0I+1FsH7f5sb7DW8k+QFyOvuGYqzO/n0EZOfNj+DQN2nZsfBFpb6nkogljl0195WsciEYWT4N3C0rPJKH7H8zcvmPcuR54UlvO/4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769449673; 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=MEJ+cQW0XDvgt8fKdFK82Ac1+oKK3ySwvUaxyxGmSvw=; b=iMfjShkO6b6hpWrqVXtKZ1TAyJshCGrMlUfdcvlusTZVCpGLmUIo8hhbN6ifsODzgXUFn+y1xyTpQU7q3GeEYDDXO12jQkzhn3qwzzG9QdY23wy3jCeNk/Ddhrbx10MNlnd97rvcUVLEp/WolxeRtNiwpVyPx8DZDWkw197vQWg= 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 1769449673846843.0379290152741; Mon, 26 Jan 2026 09:47:53 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkQco-0001PO-GY; Mon, 26 Jan 2026 12:43:42 -0500 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 1vkQch-0001K3-TG for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:36 -0500 Received: from mail-wm1-x336.google.com ([2a00:1450:4864:20::336]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkQcf-0008UH-5m for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:34 -0500 Received: by mail-wm1-x336.google.com with SMTP id 5b1f17b1804b1-47edd6111b4so55278895e9.1 for ; Mon, 26 Jan 2026 09:43:29 -0800 (PST) Received: from thinkpad-t470s.. (93-143-71-105.adsl.net.t-com.hr. [93.143.71.105]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-435b1e71730sm34199603f8f.26.2026.01.26.09.43.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 09:43:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769449408; x=1770054208; 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=MEJ+cQW0XDvgt8fKdFK82Ac1+oKK3ySwvUaxyxGmSvw=; b=Cwl5DC09tNLdo2NzTslCeubd4bfJzL0utdd0OfGSmUkc2jo0JCsrsOyKrB6k/zeyFd WcfleRhMlt2MBJvgTY3cytEnSc2SSYVC5RcgFUkE3T8TKpvdzryPG5/ceug/zT8crWEg 1rXbWRwzqEZEzqCV4smcsWXfs1yFa+vmEnbr2n+Bj6sIsTdwT4FxzIWHCnV3sBH8LyZX lXNqEc82bEezfO4FSxGQ4XyzqbIHY0kLut3FJlOLKJarSvJvTqjRqjBH8p9ZKHG7Ww9d EKBdCAtjALiOPj1lEVQsVV/c5MSRcjowUjWHvEUufWukHlsZUfNIjk9snB35zLMTtMB3 vjlg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769449408; x=1770054208; 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=MEJ+cQW0XDvgt8fKdFK82Ac1+oKK3ySwvUaxyxGmSvw=; b=hlqAgTIznClaH3EyrluOetJrzPhqjQ/FCwdIEMOUaBrerFbwlB0fgT7VbWNMd8+bN1 1uqdpvxuBiRrA5/t3HtE47c6MxAcW6bPsq2VQsb69k3X0ESN5LRK+ToBe8sFbjIQs85A 4uc0NLgSzTf5IxA2Gisu26mmN5vK/05XamTe+3IDUd9OY53kM/jJuDTL4DFaoTFp7Ne/ hXbUuyVkerltS/wFrDCTl2+ssKzDey4l1QA8/rnf/HDGnwIliC0DiIi4P2QqEzH60LF6 c0L/FE0gQd/C6wLI3HNNXvUyr4o/FKjql235uWWrxfIaLSlrWnebN0tv0NAw0n84KMKq MX/w== X-Gm-Message-State: AOJu0YzR7SPkizwawc6IULxwT4KXMXZgDOBshScGOcmPvIeSFLaqAJAQ TTHUTCUzC9dalaDivM44SQB/PMUhuzb9tqMutftavbuDXPfkhSyuZXSjJ4xJaxI8 X-Gm-Gg: AZuq6aKpElCUInQ9R1BMnVWS/g5MnCFPbMXjq42APNj71qs2cT98QneOmxNHtH+zJ96 aeb4I1EWrq6kScSAcFOAipXmdqPIUBOWT/UalGrGSzu7KWvS4uhKaIVad/S7/kg2dwyVz+t0iQl 3pHA3vEIMJt8gOUULXT1+rmV2euCn2A825gfPS7wGyXLqns+XA9Mfwp06PDMA7DvCOIA/WIOXLN FAR1pcvw3214n2zAaYhJ1kH2Sdh5i+XBCDEB+38eL14cQBCF7v1bB4PT3y7UEGwe7kiuUJzl4N4 RgvoVoK2unrqlUz2VKQFbhImZ6YJwIkc4SKTi00kDD19fyaob2gAixK4KrLg7d9tiiYWt6TdOOY LyGbRVAc7vmZrJpnJUrvISiWnAX6gUHUZI1Iqa0QN3dcJ2tgDkiyPw9wcZKY3bvUdO/Cr9/ja05 f8RBLsQhXhXtqyznci3iOVyLBk6d3+8k39OX2Zg7WVToMyyPBPWbMz/A== X-Received: by 2002:a05:600c:444c:b0:46e:35a0:3587 with SMTP id 5b1f17b1804b1-4805cf6762bmr88468335e9.27.1769449408239; Mon, 26 Jan 2026 09:43:28 -0800 (PST) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.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 Subject: [PATCH 04/27] hw/core: introduce generic FDT device model registry Date: Mon, 26 Jan 2026 18:42:50 +0100 Message-ID: <20260126174313.1418150-5-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260126174313.1418150-1-ruslichenko.r@gmail.com> References: <20260126174313.1418150-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::336; envelope-from=ruslichenko.r@gmail.com; helo=mail-wm1-x336.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: 1769449676402154100 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 | 139 ++++++++++++++++++++++++++++++++++ include/hw/core/fdt_generic.h | 78 +++++++++++++++++++ 2 files changed, 217 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..d3ab8f9132 --- /dev/null +++ b/hw/core/fdt_generic.c @@ -0,0 +1,139 @@ +// 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" + +#ifndef FDT_GENERIC_ERR_DEBUG +#define FDT_GENERIC_ERR_DEBUG 0 +#endif +#define DB_PRINT(lvl, ...) do { \ + if (FDT_GENERIC_ERR_DEBUG > (lvl)) { \ + qemu_log_mask(LOG_FDT, ": %s: ", __func__); \ + qemu_log_mask(LOG_FDT, ## __VA_ARGS__); \ + } \ +} while (0) + +#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); +} + +static void dump_table(TableListNode *head) +{ + TableListNode *iter; + + for (iter =3D head; iter !=3D NULL; iter =3D iter->next) { + printf("key : %s, opaque data %p\n", head->key, head->opaque); + } +} + +void dump_compat_table(void) +{ + printf("FDT COMPATIBILITY TABLE:\n"); + dump_table(compat_list_head); +} + +void dump_inst_bind_table(void) +{ + printf("FDT INSTANCE BINDING TABLE:\n"); + dump_table(inst_bind_list_head); +} diff --git a/include/hw/core/fdt_generic.h b/include/hw/core/fdt_generic.h new file mode 100644 index 0000000000..614a234868 --- /dev/null +++ b/include/hw/core/fdt_generic.h @@ -0,0 +1,78 @@ +// 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 *); + +void dump_compat_table(void); +void dump_inst_bind_table(void); + +/* + * 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, char *node_path, void *opaq= ue); +int fdt_init_has_opaque(FDTMachineInfo *fdti, char *node_path); +void *fdt_init_get_opaque(FDTMachineInfo *fdti, char *node_path); + +/* 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 Feb 7 05:49:48 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=1769449893; cv=none; d=zohomail.com; s=zohoarc; b=nQTy+Ft9lV7oR20paLgLNw25/ThHVklNF2LkiNHYiv5Yh/bV4QZH2eomWefw5Bmv+QRBAA+oivyQ1ineBZZujJQHKYgkwI/w7rR65ji3zHD9R9S2q+4V89GMYzYdGh6LfkSdHCxps1e0eXnKD7oXLfVyleDaIVqq3xBTkTWn630= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769449893; 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=a8yNhC/wLEa7fASbIBAu9wYYVDvJXbZkz7Puc+eeldo=; b=HnN6nJNQvwB3nNk8RTKjQPXxrCE2xohXNni2UbzKZNkyNiLQUrPONXZQYRKdp8nJSqy4WCCWsUsoqsegKK5PjEFbT4Oi83w3oI4HAjXwMtZ4QuVTuRB5KO7hmEAy3R/KuCnK92eY5bMWa/CkEzleofQVgc3/aSc6JUavxa4gpPc= 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 1769449893231996.034260567653; Mon, 26 Jan 2026 09:51:33 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkQd7-0001dI-OI; Mon, 26 Jan 2026 12:44:01 -0500 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 1vkQcg-0001Jw-VX for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:36 -0500 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkQce-0008Ub-2v for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:33 -0500 Received: by mail-wr1-x444.google.com with SMTP id ffacd0b85a97d-4359249bbacso3716864f8f.0 for ; Mon, 26 Jan 2026 09:43:30 -0800 (PST) Received: from thinkpad-t470s.. (93-143-71-105.adsl.net.t-com.hr. [93.143.71.105]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-435b1e71730sm34199603f8f.26.2026.01.26.09.43.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 09:43:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769449409; x=1770054209; 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=a8yNhC/wLEa7fASbIBAu9wYYVDvJXbZkz7Puc+eeldo=; b=DRti4nUwdfm6hfILt0DbDlDQ7H9se688vk+JFIh84WTil5eOcOcjQxV/IobyfcsWsv zwHI71bXjX/R0rC7LvAyw8iiUuOiqnMrNGNziZ8hhSjvI/TUlWiTC5K5geeWzz7pBDr/ lQhKtGZUIcXeak+DQ/yjqwE54XhumM6TVK9gvfsZabRPYbhF9pqWuyznHibEDPNKdhDm MbrlCrmNqMKPu8EQvmi4UCYWr/VtYWKlQuDUFHnsUJ9GhiNRfcGbsDfNKKVxorZKV0t6 //2IwHE3Evq0RoOrIbKHEKUwuTzCEBgTcRv76Iky/chwsB3PEPl7r+76NKpOuGVR8OsZ td/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769449409; x=1770054209; 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=a8yNhC/wLEa7fASbIBAu9wYYVDvJXbZkz7Puc+eeldo=; b=XSmUXG9msuUWfg9PPd3wrTr7HswqkJ+IUO7dczWTuvjA/RzH070hWSbZ86watwURFQ YR3wU/1jvJbp4NMzz8MDgbFsi+3QmEmb8BKmrqmw01LxcuWfaknsHfzqffTHMj0sswvY oykRaSiDeYDZpvZPhiQHSZLwUYI5vYXhxakIbjiGSccRNK69B+jEHvj9vAvnpSTgFOE0 jkgRCI96oXtFf4hkwkHrwFXOIB+5BJ5nfbL3R7ZsHAXXqeNxNYMltKS7fFpLngZ0UPDW 9ItQkDgA+SNFQ/qrIxzkzN+uwu0TVrLV5POVt+zpdCNs7tWB7IR7g7D+OBETS3/cOZOk vG1Q== X-Gm-Message-State: AOJu0YxcZ149f9N4SaMtuC/8z9AGEjqssCJsOKuKEpmKtl4CYSoHIEUD KOiPumlwDTLnoaEXYoKCG7yeE3O8/bjNkK5C/8E3IkOUc+8c0v5QXJzLZ4oTHwuzcys= X-Gm-Gg: AZuq6aLHgmHLILQc1S8qi1ZPxHoMOydJBiDlooaPGXqH0LqtjkRt2JJlmVsmpaFavT6 O19RLVAbnRRIgI3g2roFhIjOlYLGaPZ7/8t0VSmCnjJSFzzlOZT4JAPcJR1beO1/HUDwLe+/RRf WuVklF0UN4pnz2qZl6Y65onoPFa4/zw7Z1Kh4NLFxjghnZ//gnOlE1k5bscWKAWjayugQqRfCJL 8G2dUhp2nDRjjadKfwyppKm69M4kR8t8UtoPH/I/RA+znEzNqFYF+6YHd50Qku4zlbU4YYev05g z6byvPrsFGD3OMv1f+EFZBV0lJAXZAA/Gu/MljBvw478sMfCeRS5OHgrQcPVhmrfNJ18QbB0+z7 rgkSedmThvFJe5V8l6vH/UknfYiB949EHLoojiybPcR4dzDiOBaMcpK1SsBDMrYe3kYShPeKq6P wO7p99Ior2zMXumx+q6un3gO87lrrgYkxBCk31KyCbdD3voh/fZUxk3g== X-Received: by 2002:a5d:448e:0:b0:435:96a1:ee4d with SMTP id ffacd0b85a97d-435c9b1af20mr6651340f8f.14.1769449409218; Mon, 26 Jan 2026 09:43:29 -0800 (PST) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.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 Subject: [PATCH 05/27] hw/core/fdt_generic: implement FDT machine creation helpers Date: Mon, 26 Jan 2026 18:42:51 +0100 Message-ID: <20260126174313.1418150-6-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260126174313.1418150-1-ruslichenko.r@gmail.com> References: <20260126174313.1418150-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::444; envelope-from=ruslichenko.r@gmail.com; helo=mail-wr1-x444.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: 1769449893902158500 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 | 70 +++++++++++++++++++++++++++++++++++ include/hw/core/fdt_generic.h | 26 ++++++++++++- 2 files changed, 95 insertions(+), 1 deletion(-) diff --git a/hw/core/fdt_generic.c b/hw/core/fdt_generic.c index d3ab8f9132..b3ef0b7d0a 100644 --- a/hw/core/fdt_generic.c +++ b/hw/core/fdt_generic.c @@ -28,7 +28,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 #ifndef FDT_GENERIC_ERR_DEBUG #define FDT_GENERIC_ERR_DEBUG 0 @@ -137,3 +140,70 @@ void dump_inst_bind_table(void) printf("FDT INSTANCE BINDING TABLE:\n"); dump_table(inst_bind_list_head); } + +void fdt_init_yield(FDTMachineInfo *fdti) +{ + static int yield_index; + int this_yield =3D yield_index++; + + DB_PRINT(1, "Yield #%d\n", this_yield); + qemu_co_queue_wait(fdti->cq, NULL); + DB_PRINT(1, "Unyield #%d\n", this_yield); +} + +void fdt_init_set_opaque(FDTMachineInfo *fdti, char *node_path, void *opaq= ue) +{ + 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, 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, 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 614a234868..a21e3c2440 100644 --- a/include/hw/core/fdt_generic.h +++ b/include/hw/core/fdt_generic.h @@ -8,9 +8,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 --=20 2.43.0 From nobody Sat Feb 7 05:49:48 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=1769449818; cv=none; d=zohomail.com; s=zohoarc; b=mSGcEimA/QBlBfcfHsnrVAeKjZMiv2BPXd0UIf/JL2kQrts+O6do/ai8JXXGHv5fEja/ZJh4dEhPaehsN1pJydo1rAkVVd3jv2aCzrbAIb+lFqPDaPlSZkp03gihbI1mCJccI8tqZM85eO+6NVpp9eEPuHlLuudx7fuDClGggV4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769449818; 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=2pJUy/63qhBUwsqcB6OYBXIeWXNm5psLvRgfscs8p7w=; b=ILjyhNWZ8uJLOHSrPvuXlkHjojUUD6lYyGJWcm0Z/NYvMs2JRYOx+yTNEWksqBF0v6HXqY7V4HiB/6IBel3oWGKpar9lJgBzC7GexBQp7tP+PAB6GEsxV//YgFMIMl+OFmYWCdJCte/812OvbRG974YaD+wB5JIyHrM0Tq74GwI= 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 1769449818320528.4848551560939; Mon, 26 Jan 2026 09:50:18 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkQd0-0001Um-By; Mon, 26 Jan 2026 12:43:54 -0500 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 1vkQch-0001K2-Rg for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:36 -0500 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkQce-0008Ux-Ba for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:34 -0500 Received: by mail-wr1-x441.google.com with SMTP id ffacd0b85a97d-432d28870ddso2489739f8f.3 for ; Mon, 26 Jan 2026 09:43:31 -0800 (PST) Received: from thinkpad-t470s.. (93-143-71-105.adsl.net.t-com.hr. [93.143.71.105]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-435b1e71730sm34199603f8f.26.2026.01.26.09.43.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 09:43:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769449410; x=1770054210; 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=2pJUy/63qhBUwsqcB6OYBXIeWXNm5psLvRgfscs8p7w=; b=HUhyt+4gc53HZU/8gTHzhsSJnsaH+03OJy8kWPg03XyvrH80sgvgKU/EBQPcVyoNyg 1wZ7UHrPula1foCpBxaiEy1Px4xp8QnHLjxGvEZkGpEA0wQSf/qsLdbL44Zmqa1jjPDr qjq76k3vtR0eMrNkYv6eZvAZF/+BWF94qHm6Ve3uY+z0+yR4XLmYIdS5URjtca78VVXD cRHj+hCdytftFzjgQyVNDawNEuPFgCihIuKD9KZXl2mYYekebFDFijzx/ZcVwncilhhe QJguBCUZHuDPUrVnYF6OgEjFWtp+38tA5mj/gGPJg9SOWNi4T+48mOt/bnuJI/0b5i+u xDYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769449410; x=1770054210; 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=2pJUy/63qhBUwsqcB6OYBXIeWXNm5psLvRgfscs8p7w=; b=AtEoLtWVyBiK4ercHV6qlb1MZrzvSnno8bilJZIZGLakQcRLOycl9k3vNIu1oL2KDN +9mtadPurqc9UNm4Le+nDAgCbUNLuXlAIGUmEBgzyDUNMp7E+LDPKj0uVuVtaPnUuPGI VH7wdf7DS6Yf3XXM1G0n+636D2NCLjUjdSNvrVpCZjFhs6K4pseRdHFuVqAYprSnE3bo awNm3+mJ51DuY/mPaH7kbB02i/osjj6r/PBGFyEaDZME1tpuusxNCsezwYDbEA1nCssu gW95dW9wMMqx2uL8fD3JwJ4w6SQ7oBQDPyxMNQII9RpAKe4BHp4XtoWJp3ig/MGk5Ta+ Ff4g== X-Gm-Message-State: AOJu0YxOFvjltFH8w8d9utbKNzo7DFCj+PyWfE5EdfmjGDqRpnjClF36 gKQplX4MkJs0jJgFBAfChqAXK/kJZFB/RczbJUgmf1tHt8nmvMlNVX/sDJg83Jl8NZQ= X-Gm-Gg: AZuq6aIIdMjOcCGL47yTRwNnEq0T6f/GnTXXSiUakWYDOTfSlpziWXdiOfV7DpLAnIY sAT4RsBD8eNyK7DaJLQjZgKC0BLw/WgGByOk4gdzu97Pz8X9FplB5COhUOy6h3SUH28i74jKZku iI4gbZUg59n8RY+oM6EmdozpT2BQOqaqVvG1btb50mrtaVaXuXDaRlwkIYNjZt8V5f0VC2cDU9f 4VoexBqBYhxzEjGwscE9+3CHxPCBvFgbvvmgDpzmd4xNyDcwtorDQgIR/IEL0aL8aqn4WkvCcak twKxhna7S+Tk+gQyW46f90zANA6APJZ5dbSZIxSKqnSa0bL+BAzBcGq3+lhctDc/EBmU9Np9qxa dRAIPBCf54wEwrMi/h3Cq4xi9KgE7xH7g8znoSqt6UuQVrdKVmUaWu+rem5LydM03y96w7vPaGK 5uHD8wuC3Op0WPz4+41rB5DncLxe9hTwwlMkIgEAbdi2T7sqLTh43gwV3f4oh/9Jt6 X-Received: by 2002:a05:6000:1a87:b0:430:96bd:411b with SMTP id ffacd0b85a97d-435ca3a9306mr9195416f8f.58.1769449410136; Mon, 26 Jan 2026 09:43:30 -0800 (PST) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.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 Subject: [PATCH 06/27] hw/core/fdt_generic: add cpu clusters management Date: Mon, 26 Jan 2026 18:42:52 +0100 Message-ID: <20260126174313.1418150-7-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260126174313.1418150-1-ruslichenko.r@gmail.com> References: <20260126174313.1418150-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::441; envelope-from=ruslichenko.r@gmail.com; helo=mail-wr1-x441.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: 1769449819610158500 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 | 77 +++++++++++++++++++++++++++++++++++ include/hw/core/fdt_generic.h | 13 ++++++ 2 files changed, 90 insertions(+) diff --git a/hw/core/fdt_generic.c b/hw/core/fdt_generic.c index b3ef0b7d0a..3c28f42491 100644 --- a/hw/core/fdt_generic.c +++ b/hw/core/fdt_generic.c @@ -31,6 +31,7 @@ #include "migration/vmstate.h" #include "qemu/coroutine.h" #include "qemu/log.h" +#include "hw/cpu/cluster.h" #include "system/reset.h" =20 #ifndef FDT_GENERIC_ERR_DEBUG @@ -175,6 +176,75 @@ int fdt_init_has_opaque(FDTMachineInfo *fdti, char *no= de_path) return 0; } =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; + + DB_PRINT(0, "%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); +} + void *fdt_init_get_opaque(FDTMachineInfo *fdti, char *node_path) { FDTDevOpaque *dp; @@ -199,8 +269,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 a21e3c2440..46b7dc084b 100644 --- a/include/hw/core/fdt_generic.h +++ b/include/hw/core/fdt_generic.h @@ -17,6 +17,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; @@ -26,6 +33,8 @@ typedef struct FDTMachineInfo { FDTDevOpaque *dev_opaques; /* recheck coroutine queue */ CoQueue *cq; + /* list of all CPU clusters */ + FDTCPUCluster *clusters; } FDTMachineInfo; =20 /* @@ -73,6 +82,10 @@ void fdt_init_set_opaque(FDTMachineInfo *fdti, char *nod= e_path, void *opaque); int fdt_init_has_opaque(FDTMachineInfo *fdti, char *node_path); void *fdt_init_get_opaque(FDTMachineInfo *fdti, 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 Feb 7 05:49:48 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=1769449897; cv=none; d=zohomail.com; s=zohoarc; b=JfzQp7ZIBS83hKYSb9V7OacXnIXS+G6amTMbrTsmeAPRecZh8ZhoQmMPayXwi3k3ZF5KKfXtRS3F0e3FIxv5zv8E2ExYzQ/8+q/AYvkYSmjU6/62lgdIEaaC7AnDJnNFHhV1WbX038jC7icwtc8THbrgsFjw0ogUfUHYARbBwuc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769449897; 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=+JVcXy0dwK/92fGA+np6cVxIVwdiBdpVuuBvIqmsfVg=; b=Ie2egp9ity8XAjI3omy31Gz1n7HDZlgIaRQcsdmaIfatjAwBTkHu3k119B8xu0zZ/HiWLATpFf7CWvIn1ZDdpzVfxp8WY0UDns0rz2by2niYUH/xJM0V8CcrCygUmbseA2WaQsp+Vh+dTv96TmJRjp0WA6F1FHw3bg4L3JXeltM= 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 1769449897350117.89205937443262; Mon, 26 Jan 2026 09:51:37 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkQd7-0001cI-2J; Mon, 26 Jan 2026 12:44:01 -0500 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 1vkQch-0001K4-TH for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:36 -0500 Received: from mail-wm1-x32b.google.com ([2a00:1450:4864:20::32b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkQcf-0008V9-71 for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:35 -0500 Received: by mail-wm1-x32b.google.com with SMTP id 5b1f17b1804b1-480142406b3so32372085e9.1 for ; Mon, 26 Jan 2026 09:43:32 -0800 (PST) Received: from thinkpad-t470s.. (93-143-71-105.adsl.net.t-com.hr. [93.143.71.105]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-435b1e71730sm34199603f8f.26.2026.01.26.09.43.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 09:43:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769449411; x=1770054211; 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=+JVcXy0dwK/92fGA+np6cVxIVwdiBdpVuuBvIqmsfVg=; b=LGwrmPOP57ZB4GCtoSDiDT5dfLyiLDq8rHNofyKZCZ1yxWCbP2XKOYfHPs5hzXmB9c tidxZ1F+EQn1FU4p/teVW95USRpxZN9h9NPKErP81UdXqX/vyQ1wV8PoKgisNXkStBH0 Tzm35+MaU6I9cccN8VO3XL5YQliII4FeaiEVR4cGCCGV+67CR75FfAbUVLK9f3QLm/ws DC+Vu+tXzEqA2ItZ57YYh7YAtj0NyYfVY/1pJSZu88l5aGmwkjzRh+/7xnqKKtrwZ6XI g0XzWG8DcHbtL2J6EstYnTq2vrdWU0p3bkWEqBq/IfA7neOTQyU1OvB81ZaD2kBoMWZf 9DUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769449411; x=1770054211; 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=+JVcXy0dwK/92fGA+np6cVxIVwdiBdpVuuBvIqmsfVg=; b=J5MLfWAGrvDUGFaCkt4JkNomD3vfEzhbYIugfQq4D6RiaLMyzF3ddt5li0ZbK2m63h uMH9qsdsh18vNy123k8h+mSGfG9NvdZ4rMa6m5fpeP5sNB+GJgtzHgtl5FH46ICRy/3O bmE5ZxDbF1rdEAbGb3sGAuvQBw27cmD5y71PYBmoBKcsrQj+U5qYOIzOFkS09igU//XY xifH24KiZXCJVq30NKS7r33Eo+/y6uY8DJNcqS6+KdocY96CTt1BxLjaefAFEXWC3MWv dB//u/plaYsv6mRTc4U5xsW7eeDQcLFNiNJLqL4huusGoXE0LBeIg779WO3OLq8HTZgU z5vw== X-Gm-Message-State: AOJu0YwWl0vkQfyQStodMCNLARxd2he6d2WJHtVBTqOSKtoDV1nFjmNc U/HalzWenAZaIqufhc/9LlzTImFqecrEE2/1Q+jfY1L8jgT6hqqRF/P+e1DpzLv4 X-Gm-Gg: AZuq6aKgLNP+bkjjrdoB4qAZId8b+UgTG2Oo/0paNUqr/Y/AYeQqgmCbMwF9PIIBLB2 ZYGfZFFAgkuH/aDmlx1Dw+Se6JGXPYxgjQJmaI8kiiEZTyVd1WsqqvfP2NwhJCsMwkz4TamtL/j XkfrodIxWuTdz1NzM3s05kPvMFuh180zHH5RxpHSwKsl/Uhh+ceXg5bjz3NwsCufcOKPbWAZV68 5TVbwBer/yikenZZ8yBCpUaFQSU62+lmVZKQtqwkO/6GcMha7Am/MLZwuUunJzUNKHvU8qs6bty 8RujrLEqdda289YfoijKhF29QG59/HAxL6ZooyMdreq1zgCmnxWIphGX47JahO2/TL7053U6Jq8 pTWVE+naVVCg1zezvkOZ2RfYGM8PUMUD5kUpF0TxYmzYTV4eLSvxlWh7w/pLsb0uJFpA7LMBwWc yKQCniM59KB6KHswJf96zCH9mR9bozAU/ePuLYA7GCs90zS5Yypk6iRg== X-Received: by 2002:a05:600c:a00f:b0:480:2521:4d92 with SMTP id 5b1f17b1804b1-4805cf6365bmr83782395e9.24.1769449411109; Mon, 26 Jan 2026 09:43:31 -0800 (PST) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.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 Subject: [PATCH 07/27] hw/core/fdt_generic_util: implement main fdt parse routine Date: Mon, 26 Jan 2026 18:42:53 +0100 Message-ID: <20260126174313.1418150-8-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260126174313.1418150-1-ruslichenko.r@gmail.com> References: <20260126174313.1418150-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::32b; envelope-from=ruslichenko.r@gmail.com; helo=mail-wm1-x32b.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: 1769449899701154100 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 | 242 +++++++++++++++++++++++++++++ include/hw/core/fdt_generic_util.h | 19 +++ 2 files changed, 261 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..4338dc956b --- /dev/null +++ b/hw/core/fdt_generic_util.c @@ -0,0 +1,242 @@ +// 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" + +#ifndef FDT_GENERIC_UTIL_ERR_DEBUG +#define FDT_GENERIC_UTIL_ERR_DEBUG 3 +#endif +#define DB_PRINT(lvl, ...) do { \ + if (FDT_GENERIC_UTIL_ERR_DEBUG > (lvl)) { \ + qemu_log_mask(LOG_FDT, ": %s: ", __func__); \ + qemu_log_mask(LOG_FDT, ## __VA_ARGS__); \ + } \ +} while (0) + +#define DB_PRINT_NP(lvl, ...) do { \ + if (FDT_GENERIC_UTIL_ERR_DEBUG > (lvl)) { \ + qemu_log_mask(LOG_FDT, "%s", node_path); \ + DB_PRINT((lvl), ## __VA_ARGS__); \ + } \ +} while (0) + +/* FIXME: wrap direct calls into libfdt */ + +#include +#include + +static int fdt_generic_num_cpus; + +static int simple_bus_fdt_init(char *bus_node_path, FDTMachineInfo *fdti); + +FDTMachineInfo *fdt_generic_create_machine(void *fdt, qemu_irq *cpu_irq) +{ + char node_path[DT_PATH_LENGTH]; + FDTMachineInfo *fdti =3D fdt_init_new_fdti(fdt); + + fdti->irq_base =3D cpu_irq; + + /* parse the device tree */ + if (!qemu_devtree_get_root_node(fdt, node_path)) { + memory_region_transaction_begin(); + fdt_init_set_opaque(fdti, node_path, NULL); + simple_bus_fdt_init(node_path, fdti); + while (qemu_co_enter_next(fdti->cq, NULL)) { + ; + } + memory_region_transaction_commit(); + } else { + fprintf(stderr, "FDT: ERROR: cannot get root node from device tree= %s\n" + , node_path); + } + + /* 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; + + DB_PRINT(0, "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; + + DB_PRINT_NP(1, "enter\n"); + + /* try instance binding first */ + node_name =3D qemu_devtree_get_node_name(fdti->fdt, node_path); + DB_PRINT_NP(1, "node with name: %s\n", node_name ? node_name : "(none)= "); + if (!node_name) { + printf("FDT: ERROR: nameless node: %s\n", node_path); + } + if (!fdt_init_inst_bind(node_path, fdti, node_name)) { + DB_PRINT_NP(0, "instance bind successful\n"); + goto exit; + } + + /* fallback to compatibility binding */ + prop =3D qemu_fdt_getprop(fdti->fdt, node_path, "compatible", + &prop_len, false, 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 { + DB_PRINT_NP(0, "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, false, 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) { + DB_PRINT_NP(0, "FDT: Unsupported peripheral invalidated - " + "compatibilities %s\n", all_compats); + qemu_fdt_setprop_string(fdti->fdt, node_path, "compatible", + "invalidated"); + } +exit: + + DB_PRINT_NP(1, "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(char *node_path, FDTMachineInfo *fdti) +{ + int i; + int num_children =3D qemu_devtree_get_num_children(fdti->fdt, node_pat= h, + 1); + char **children; + + if (num_children =3D=3D 0) { + return 0; + } + children =3D qemu_devtree_get_children(fdti->fdt, node_path, 1); + + DB_PRINT_NP(num_children ? 0 : 1, "num child devices: %d\n", num_child= ren); + + 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..e18c4f9c8b --- /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 Feb 7 05:49:48 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=1769449816; cv=none; d=zohomail.com; s=zohoarc; b=D85ww6AYQlzMHWbylj24mHG/u7MmEEfzGv73ViO1lJpdkWP+mUtIFsN3iApFO3gOoYvCT/89anLyWuRDdKMzyDl/Bmqvhhq9OfGpjy6XgeK+4LF3n0FuSUJWqY66oNlnYHDT4Wh9zBTJdfuPo9Gy78g+Cqma9IjEZkAJt551Xoc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769449816; 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=BlJN0+7cHw6gzdkYqCEdBJkW8sO5/Cp3u22Anlum/aE=; b=l26LcuaLn+KP+a8w/S+ZWBFcTudra/Nrjt/uHedxMbV+k9FWMNWeNxGGHiN23gPBJbZsIUZpL5d7kfebl+xKX78o+WY273By8XnAnMif2+unuFtB+FLBnfPYA1NrXlBjofmskWAUKkpqmLvrTly0CXRHld/g4VqB5mx41LVLNFA= 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 1769449816291850.546797007233; Mon, 26 Jan 2026 09:50:16 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkQd4-0001Ys-2A; Mon, 26 Jan 2026 12:43:58 -0500 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 1vkQcj-0001Lk-7m for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:40 -0500 Received: from mail-wm1-x330.google.com ([2a00:1450:4864:20::330]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkQcg-0008Vr-CH for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:36 -0500 Received: by mail-wm1-x330.google.com with SMTP id 5b1f17b1804b1-47ee0291921so40893925e9.3 for ; Mon, 26 Jan 2026 09:43:33 -0800 (PST) Received: from thinkpad-t470s.. (93-143-71-105.adsl.net.t-com.hr. [93.143.71.105]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-435b1e71730sm34199603f8f.26.2026.01.26.09.43.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 09:43:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769449412; x=1770054212; 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=BlJN0+7cHw6gzdkYqCEdBJkW8sO5/Cp3u22Anlum/aE=; b=Q0DTvAeUbjYRbljlEhRA4E+YWADBpxiA72//BNwDQv1Hjh+87pEtwO02UGTkfV7YA9 xz2Ps/awO13k3jyF5a2Wwfmp4xGuKx53CAQ1IYzpAT7OJ6ThsIttK0pVJ31c3fhFuTxI d3decElPRAcC29OQJNgXhlgVtLcLN1bcCBKvhb7HoRyaho/Q4TNMZ8m8mWJJQ+tMhrX4 jaNJ96cETZ8UQCOXv+92wXtvf6XlX3klI1IG1lxlfXfqKuhGs+qPP/rlsduNjNzaiRpv wbN3nqmQkaVjyL0UhVr6VcrDHy0lwZJ5nNiSJm8NxWoGOFuQkpjJQ3PHbkIA3xTa4C3w xNvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769449412; x=1770054212; 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=BlJN0+7cHw6gzdkYqCEdBJkW8sO5/Cp3u22Anlum/aE=; b=ejG/K0jjC5jFLEOHeKR7NlCSOLRxQUD0Asii1MlNa3zsyQAgXZSnXzBmFOzbyKMsVY mS/YZrBDC8aVxT5t7GbvehEYou3eBnMYRfCCVtvFUJK3uyBkHfwzmHOT9s8AEeymCkFh YYs2nkwmha9RkzTemnaSiKyL1MrzidZgDaIobLaGgVk0d86uquwDoM4qkhemGsDzLruP xNr04X/pJr2sJqpdM6LyPZEte7/zdT58KAv5GK1YtHaREfRcnIaprWo5jBk06Lkc5x3z cU2XR6peTYxXvHufj6xpMZ/oP0Bq3jxYAIXjiC8TepgOUUcSiR1hgTtsf28C2VZHF8iG VelA== X-Gm-Message-State: AOJu0Yxu+YOh6uElJiNITB+f/bffXatPBJ3CESLIjRiljDRCuIAQqjLI FQNevcDUjPbch6pJONwdPaU50nvOlTGNEqmkxdYc9p8iTpp4J/JT6LwzGZNrQ2VX X-Gm-Gg: AZuq6aJN+jP2fqJ9EhQHdH64B3qIhtk7SB3N8NB/Z+7cTIK+b+l7+6VwxQ1RuWr8AP7 wII6Ep3WIi7YHCix+fpfZr2PeOXJD8A14HyUgWcSPBieu1IguO52QM+RMoXTyx+DCFOhlzi0m02 JXDUxKeM4PAU4dZQG1gAEeYnuw9TH1KxBf9ShEBWD6HGNsAymMgpWES+F6TbBgG5JJMe1dg0tz7 /OHgzHWODIk+A/zaUqeW+sl79zeDrMJH5wpsQzpI26MEovxFAjYKp3dWH1H1cfTyItQl3fpxMQP h4LU/+xJUXCOsX0vPg79UzJK0akYYRbMVVEdUEz5I1K317z7ZmFtcnUnIV2HmEwZkYCkrb4OEzS HYEYN9/LXaXhgYniTvwyXoBepyIF1Hpgz+wxng4nZn6ZP2zS2NmX9NRzLLpZnwdZ13gJCLLAVLx qNFCtK+a3eM7AtQR6h7hTYtD1xRoBENWVN7UAY5+rRqE8stX7LeZ3lXg== X-Received: by 2002:a05:600c:4f09:b0:480:4a5a:bd53 with SMTP id 5b1f17b1804b1-4805cf5f8famr77269185e9.21.1769449411982; Mon, 26 Jan 2026 09:43:31 -0800 (PST) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.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 Subject: [PATCH 08/27] hw/core/fdt_generic_util: implement fdt_init_qdev Date: Mon, 26 Jan 2026 18:42:54 +0100 Message-ID: <20260126174313.1418150-9-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260126174313.1418150-1-ruslichenko.r@gmail.com> References: <20260126174313.1418150-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::330; envelope-from=ruslichenko.r@gmail.com; helo=mail-wm1-x330.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: 1769449817471158500 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 | 224 +++++++++++++++++++++++++++++++++++++ 1 file changed, 224 insertions(+) diff --git a/hw/core/fdt_generic_util.c b/hw/core/fdt_generic_util.c index 4338dc956b..74310e9eb3 100644 --- a/hw/core/fdt_generic_util.c +++ b/hw/core/fdt_generic_util.c @@ -40,6 +40,7 @@ #include "qemu/config-file.h" #include "hw/core/boards.h" #include "qemu/option.h" +#include "hw/cpu/cluster.h" =20 #ifndef FDT_GENERIC_UTIL_ERR_DEBUG #define FDT_GENERIC_UTIL_ERR_DEBUG 3 @@ -235,8 +236,231 @@ static int simple_bus_fdt_init(char *node_path, FDTMa= chineInfo *fdti) return 0; } =20 +/* FIXME: figure out a real solution to this */ + +#define DIGIT(a) ((a) >=3D '0' && (a) <=3D '9') +#define LOWER_CASE(a) ((a) >=3D 'a' && (a) <=3D 'z') + +static void trim_version(char *x) +{ + long result; + + for (;;) { + x =3D strchr(x, '-'); + if (!x) { + return; + } + if (DIGIT(x[1])) { + /* Try to trim Xilinx version suffix */ + const char *p; + + qemu_strtol(x + 1, &p, 0, &result); + + if (*p =3D=3D '.') { + *x =3D 0; + return; + } else if (*p =3D=3D 0) { + return; + } + } else if (x[1] =3D=3D 'r' && x[3] =3D=3D 'p') { + /* Try to trim ARM version suffix */ + if (DIGIT(x[2]) && DIGIT(x[4])) { + *x =3D 0; + return; + } + } + x++; + } +} + +static void substitute_char(char *s, char a, char b) +{ + for (;;) { + s =3D strchr(s, a); + if (!s) { + return; + } + *s =3D b; + s++; + } +} + +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, char **dev_type) +{ + Object *ret =3D NULL; + char *c =3D g_strdup(compat); + + /* Try to create the object */ + ret =3D object_new(c); + + if (!ret) { + /* Trim the version off the end and try again */ + trim_version(c); + ret =3D object_new(c); + + if (!ret) { + /* Replace commas with full stops */ + substitute_char(c, ',', '.'); + ret =3D object_new(c); + } + } + + if (!ret) { + /* + * Restart with the orginal string and now replace commas with full + * stops and try again. This means that versions are still include= d. + */ + g_free(c); + c =3D g_strdup(compat); + substitute_char(c, ',', '.'); + ret =3D object_new(c); + } + + if (dev_type) { + *dev_type =3D c; + } else { + g_free(c); + } + + if (!ret) { + const char *no_vendor =3D trim_vendor(compat); + + if (no_vendor !=3D compat) { + return fdt_create_from_compat(no_vendor, dev_type); + } + } + return ret; +} + +/* + * Error handler for device creation failure. + * + * We look for qemu-fdt-abort-on-error properties up the tree. + * If we find one, we abort with the provided error message. + */ +static void fdt_dev_error(FDTMachineInfo *fdti, char *node_path, char *com= pat) +{ + const char *abort_on_error; + const char *warn_on_error; + + warn_on_error =3D qemu_fdt_getprop(fdti->fdt, node_path, + "qemu-fdt-warn-on-error", 0, + true, NULL); + abort_on_error =3D qemu_fdt_getprop(fdti->fdt, node_path, + "qemu-fdt-abort-on-error", 0, + true, NULL); + if (warn_on_error) { + if (strncmp("device_type", compat, strlen("device_type"))) { + warn_report("%s: %s", compat, warn_on_error); + } + } + + if (abort_on_error) { + error_report("Failed to create %s", compat); + error_setg(&error_fatal, "%s", abort_on_error); + } +} + static int fdt_init_qdev(char *node_path, FDTMachineInfo *fdti, char *comp= at) { + Object *dev, *parent; + char *dev_type =3D NULL; + char parent_node_path[DT_PATH_LENGTH]; + + if (!compat) { + return 1; + } + dev =3D fdt_create_from_compat(compat, &dev_type); + if (!dev) { + DB_PRINT_NP(1, "no match found for %s\n", compat); + fdt_dev_error(fdti, node_path, compat); + return 1; + } + DB_PRINT_NP(1, "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++; + DB_PRINT_NP(0, "is a CPU - total so far %d\n", fdt_generic_num_cpu= s); + } + + if (qemu_devtree_getparent(fdti->fdt, parent_node_path, 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); + } + + if (dev->parent) { + DB_PRINT_NP(0, "Node already parented - skipping node\n"); + } else if (parent) { + DB_PRINT_NP(1, "parenting node\n"); + object_property_add_child(OBJECT(parent), + qemu_devtree_get_node_name(fdti->fdt, node_p= ath), + OBJECT(dev)); + if (object_dynamic_cast(dev, TYPE_DEVICE)) { + Object *parent_bus =3D parent; + unsigned int depth =3D 0; + + DB_PRINT_NP(1, "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 { + DB_PRINT_NP(1, "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(), + qemu_devtree_get_node_name(fdti->fdt, node_p= ath), + OBJECT(dev)); + } + fdt_init_set_opaque(fdti, node_path, dev); + + g_free(dev_type); + return 0; } =20 --=20 2.43.0 From nobody Sat Feb 7 05:49:48 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=1769449912; cv=none; d=zohomail.com; s=zohoarc; b=cZ3l4mYFjVjNFfO9fAQSs67YG0quCNmXlprcqOPEnJW3LBqsfQ1cHuWL9MHEYqLeOcNpLOSd4/JLRnikzztu2YSBiDr725FadL0cC6qw/Wn2FLh9MUAfYfG4MNRJDQ/U9/8bEcVGpo07gN3Aqeh4IemY7idbjUyJEiVGF9AMm5k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769449912; 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=9aM6zWLKlmtgCmD6m3GCHJyyGI3WEHXBduIqZsS8oug=; b=AJUcOYTD3D+PyDbTqaTg+B6rUPWgjzNaM464qaKGjAnQIdTR2fRe9BcqTrDmS/A92eU4Qj4RrH/Hn7ofRmn6OQdOmEtR37//jccyROTdygoClGHzoY65/BTtC/zVj8M2voVOSsSR1X+dkk4iEjMSWczd8zy6WzvFHk8GZVD35fk= 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 176944991288030.410532574985837; Mon, 26 Jan 2026 09:51:52 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkQd4-0001Z8-La; Mon, 26 Jan 2026 12:43:58 -0500 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 1vkQck-0001M1-6F for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:40 -0500 Received: from mail-wr1-x42d.google.com ([2a00:1450:4864:20::42d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkQch-0008WD-IC for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:37 -0500 Received: by mail-wr1-x42d.google.com with SMTP id ffacd0b85a97d-42fb2314f52so2766587f8f.0 for ; Mon, 26 Jan 2026 09:43:34 -0800 (PST) Received: from thinkpad-t470s.. (93-143-71-105.adsl.net.t-com.hr. [93.143.71.105]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-435b1e71730sm34199603f8f.26.2026.01.26.09.43.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 09:43:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769449413; x=1770054213; 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=9aM6zWLKlmtgCmD6m3GCHJyyGI3WEHXBduIqZsS8oug=; b=c+0n3tco8qdT95arUobksKieFrqoh74Q8VZBGLeDG3+QcFLUAA1WV4hVz7Xk+KD+Mo wCpBkcJiMflrPpqFIWAMMoglKwaPr/du2L7NE1VzKWqhFD5MgvKy3Si7KkJT14Xxrsr6 0GLnIRiHPIOtr2PPgoCC9ZfDCm1MZa2WNiLHVHfmSx3ZtwqfvWDJLM9WfHGBOdeP/dsY 9ZD54wu0i+5iETvgrPXiSz9cnYh8GwFR2P+4yVSq03n7ZS7ZytuBJG87FY8sEwegKPv7 AlY/2dyi6aErGFFYigkmPjUiGlc1EgDDffobJ3N4Ml/goHcIm+X8u1A/NwyO+gQynEM8 UqFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769449413; x=1770054213; 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=9aM6zWLKlmtgCmD6m3GCHJyyGI3WEHXBduIqZsS8oug=; b=P1qUtuQGfLCskQfuyJAvNVmM8Vb2r6h/wsKjDjmYpchXG4Eu2fO4HvOpI4nIFMzdUS 3PwAFQnTmj5j9M6IYrl2vAhwoNcY0/H0OSZr1iRzJ+AvgjTw5idQ+CxDduZwYxT+OotN 43mD3le1OiLyyGw/ZkBK+zI20ayy10FUgdNSHOtqLtJpvxemeuqhOXYgVWclLtKwrU4X DLWIET1serWkh/4eGFox0uHAt2j6RSak+N/qp5tC0s6sD+e9L7xh0mfsSoCafxf37jiM dloINRgbne/iZVLTHflBInAnFX4N7e3AbV7cho0i0QbIiYzMW02mAgIj4Tto1lVeFRZF dOhw== X-Gm-Message-State: AOJu0Yw63n795NisgXs6fNdGf567mxvEJcL9REP87cMM1hu3YS2VEO1e qx1iBrPB5wrn35ASxDtEGyytdTLBSxOyq/fJWJHDUhLCIhiF2OGGeNWqstVrOJjn X-Gm-Gg: AZuq6aLuWPVp/spgX6xylkPlVLsdZBVEeiGrSG1RZQFfc8fem2gqP6CFiwEoIJbcdep 0CDnRWMDhW+61ugxJZDQHAqyjl25hL0oST8QYsGB7BaKa47MVMLc3dgaQLUZSrNSpipHCuYufAJ 6jlX0DFJZG0aePWe8bmMCioho9qV/If0dxCYjAiWAVk0JOM0uAUARmAAwD8lGc2PjuHHS+4qc2u 5n/+TO25DOmkVIau6tj737wloXb19u6CADHOQ8Vh6KDpnLQcg4KiH35XEDYPiOYdYqJhdb5Xy3T mIYpfHm4fQFTknOtGbzSF16KQbsmtOE1aUw16rOImXdrfDcpJFbyUwR0bQbYQ1/w07Aq4Dqd94W wiEWxNUZSeScQ7dm39o/fIT7JVCq4enZIntvQfI/7oCXbbwbJiGgfHGiFclFD+2GJmgFa4buwDX 7EVAzmCeNgdIJrrNfDqJh5x8A5e7lAy+f9mH/9uA0SSWhK1A08UI4INCkZAigVuvdl X-Received: by 2002:a05:6000:1849:b0:435:8fe2:e690 with SMTP id ffacd0b85a97d-435ca3a8ffdmr9751383f8f.58.1769449413091; Mon, 26 Jan 2026 09:43:33 -0800 (PST) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.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 Subject: [PATCH 09/27] hw/core/fdt_generic_util: initilize qdev properties from fdt Date: Mon, 26 Jan 2026 18:42:55 +0100 Message-ID: <20260126174313.1418150-10-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260126174313.1418150-1-ruslichenko.r@gmail.com> References: <20260126174313.1418150-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::42d; envelope-from=ruslichenko.r@gmail.com; helo=mail-wr1-x42d.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: 1769449914003158500 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 | 282 +++++++++++++++++++++++++++++++++++++ 1 file changed, 282 insertions(+) diff --git a/hw/core/fdt_generic_util.c b/hw/core/fdt_generic_util.c index 74310e9eb3..c1d6ed9105 100644 --- a/hw/core/fdt_generic_util.c +++ b/hw/core/fdt_generic_util.c @@ -40,6 +40,7 @@ #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" =20 #ifndef FDT_GENERIC_UTIL_ERR_DEBUG @@ -59,6 +60,8 @@ } \ } while (0) =20 +#define PROP_ARRAY_LEN_PREFIX "len-" + /* FIXME: wrap direct calls into libfdt */ =20 #include @@ -339,6 +342,25 @@ static Object *fdt_create_from_compat(const char *comp= at, char **dev_type) 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(); + } +} + /* * Error handler for device creation failure. * @@ -368,10 +390,248 @@ static void fdt_dev_error(FDTMachineInfo *fdti, char= *node_path, char *compat) } } =20 +static void fdt_init_qdev_link_prop(Object *obj, ObjectProperty *p, + FDTMachineInfo *fdti, + const char *node_path, + const QEMUDevtreeProp *prop) +{ + int len =3D prop->len; + void *val =3D prop->value; + const char *propname =3D prop->name; + + Object *linked_dev, *proxy; + char target_node_path[DT_PATH_LENGTH]; + g_autofree char *propname_target =3D g_strconcat(propname, "-target", = NULL); + Error *errp =3D NULL; + + if (qemu_devtree_get_node_by_phandle(fdti->fdt, target_node_path, + get_int_be(val, len))) { + abort(); + } + + while (!fdt_init_has_opaque(fdti, target_node_path)) { + fdt_init_yield(fdti); + } + linked_dev =3D fdt_init_get_opaque(fdti, target_node_path); + + proxy =3D linked_dev ? object_property_get_link(linked_dev, + propname_target, + &errp) : NULL; + if (!errp && proxy) { + DB_PRINT_NP(0, "detected proxy object for %s connection\n", propna= me); + linked_dev =3D proxy; + } + + if (!linked_dev) { + return; + } + + errp =3D NULL; + object_property_set_link(obj, propname, linked_dev, &errp); + if (errp) { + /* Unable to set the property, maybe it is a memory alias? */ + MemoryRegion *alias_mr; + int offset =3D len / 2; + int region =3D 0; + + if (len > 4) { + region =3D get_int_be(val + offset, len - offset); + } + + alias_mr =3D sysbus_mmio_get_region(SYS_BUS_DEVICE(linked_dev), re= gion); + + object_property_set_link(obj, propname, OBJECT(alias_mr), &error_a= bort); + + } + + DB_PRINT_NP(0, "set link %s\n", propname); +} + +static void fdt_init_qdev_scalar_prop(Object *obj, ObjectProperty *p, + FDTMachineInfo *fdti, + const char *node_path, + const QEMUDevtreeProp *prop) +{ + const char *propname =3D trim_vendor(prop->name); + void *val =3D prop->value; + int len =3D prop->len; + + /* FIXME: handle generically using accessors and stuff */ + if (!strncmp(p->type, "link", 4)) { + fdt_init_qdev_link_prop(obj, p, fdti, node_path, prop); + 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); + DB_PRINT_NP(0, "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); + DB_PRINT_NP(0, "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); + DB_PRINT_NP(0, "set property %s to %s\n", propname, (const char *)= val); + return; + } + + DB_PRINT_NP(0, "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, false, &err= ); + + return (err ? 1 : elem_cells) * 4; +} + +static ObjectProperty *fdt_array_elem_prop(Object *obj, + const char *propname, int k) +{ + g_autofree char *elem_name =3D g_strdup_printf("%s[%d]", propname, k); + + return object_property_find(obj, elem_name); +} + +static char *fdt_array_elem_type(ObjectProperty *e) +{ + size_t n =3D strlen(e->type); + + if (strncmp(e->type, "link", 4)) { + return NULL; + } + if (n > 6) { + return g_strndup(&e->type[5], (n - 6)); + } + + return g_strdup(TYPE_OBJECT); +} + +static ObjectProperty *fdt_array_link_elem_prop(Object *obj, ObjectPropert= y *e, + const char *elem_link_type) +{ + /* + * Starting QEMU 8.2.0, the array-scheme has changed to be a single + * property of list. See: + * https://mail.gnu.org/archive/html/qemu-devel/2023-09/msg01832.html + * + * Thus, fdt_init_qdev_array_prop() below will have to be changed + * substantially. + * + * So for now, use a temporary hack to work around DEFINE_PROP_ARRAY()= not + * creating the proper elements of type "link" (see set_prop_arraylen(= )). + */ + g_autofree char *elem_name =3D g_strdup(e->name); + void *elem_ptr =3D object_field_prop_ptr(obj, e->opaque); + + object_property_del(obj, elem_name); + e =3D object_property_add_link(obj, elem_name, + elem_link_type, elem_ptr, + qdev_prop_allow_set_link_before_realize, + OBJ_PROP_LINK_STRONG); + + return e; +} + +static void fdt_init_qdev_array_prop(Object *obj, + FDTMachineInfo *fdti, + const char *node_path, + QEMUDevtreeProp *prop) +{ + const char *propname =3D trim_vendor(prop->name); + int nr =3D prop->len; + Error *local_err =3D NULL; + char *len_name; + uint32_t elem_len; + g_autofree char *elem_link_type =3D NULL; + ObjectProperty *e; + + if (!prop->value || !nr) { + return; + } + + elem_len =3D fdt_array_elem_len(fdti, node_path, propname); + if (nr % elem_len) { + return; + } + + nr /=3D elem_len; + + /* + * Fail gracefully on setting the 'len-' property, due to: + * 1. The property does not exist, or + * 2. The property is not integer type, or + * 3. The property has been set, e.g., by the '-global' cmd option + */ + len_name =3D g_strconcat(PROP_ARRAY_LEN_PREFIX, propname, NULL); + object_property_set_int(obj, len_name, nr, &local_err); + g_free(len_name); + + if (local_err) { + error_free(local_err); + return; + } + + e =3D fdt_array_elem_prop(obj, propname, 0); + if (!e) { + return; + } + + elem_link_type =3D fdt_array_elem_type(e); + + while (nr--) { + QEMUDevtreeProp q; + + e =3D fdt_array_elem_prop(obj, propname, nr); + if (!e) { + continue; + } + + q =3D (QEMUDevtreeProp){.name =3D e->name, + .value =3D prop->value + nr * elem_len, + .len =3D elem_len, + }; + + if (elem_link_type) { + e =3D fdt_array_link_elem_prop(obj, e, elem_link_type); + q.name =3D e->name; + fdt_init_qdev_link_prop(obj, e, fdti, node_path, &q); + } else { + fdt_init_qdev_scalar_prop(obj, e, fdti, node_path, &q); + } + } +} + static int fdt_init_qdev(char *node_path, FDTMachineInfo *fdti, char *comp= at) { Object *dev, *parent; char *dev_type =3D NULL; + QEMUDevtreeProp *prop, *props; char parent_node_path[DT_PATH_LENGTH]; =20 if (!compat) { @@ -459,6 +719,28 @@ static int fdt_init_qdev(char *node_path, FDTMachineIn= fo *fdti, char *compat) } fdt_init_set_opaque(fdti, node_path, dev); =20 + props =3D qemu_devtree_get_props(fdti->fdt, node_path); + for (prop =3D props; prop->name; prop++) { + const char *propname =3D trim_vendor(prop->name); + ObjectProperty *p =3D NULL; + + p =3D object_property_find(OBJECT(dev), propname); + if (p) { + DB_PRINT_NP(1, "matched property: %s of type %s, len %d\n", + propname, p->type, prop->len); + } + if (!p) { + fdt_init_qdev_array_prop(dev, fdti, node_path, prop); + continue; + } + + if (!strcmp(propname, "type")) { + continue; + } + + fdt_init_qdev_scalar_prop(OBJECT(dev), p, fdti, node_path, prop); + } + g_free(dev_type); =20 return 0; --=20 2.43.0 From nobody Sat Feb 7 05:49:48 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=1769449777; cv=none; d=zohomail.com; s=zohoarc; b=afSbCNYlHh6hAhXrr+eJeVIdyRjukQz8v9MD93DIIHJbGN8YsCGMpdPxvlvzxnBTNqAcoLpKtdHsG/VJAagjxu/BWERMr4B9YRVXx1br6n7JoPv9jltzNV3Y9kLZ4tJvLGYEOd5NEtAo74vWztswkCXl0KglMfcV0G82996ox9E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769449777; 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=xooLCZtH0ZC3/iJjGv3DYg/vTW0gVjlRUxdeK15JZ+0=; b=nZKfw5qdi9vTSbILj9MzVhRZ/+kwc9UTETg+kLDBO+QCnxIBSedl8YKr0ALLUaX7GOmY4TU963OhPRtwViRjWujo6LDwfSRKyPaaCac1EjyzLjjvW9CWhmDICAX2+YbgvuGsTuEZBxD1U07Ptqq1G1m5lBK1JZWXb9O47mVebkU= 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 1769449777670275.09685661909293; Mon, 26 Jan 2026 09:49:37 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkQd2-0001Xr-Cx; Mon, 26 Jan 2026 12:43:56 -0500 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 1vkQcj-0001Lt-UY for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:40 -0500 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkQch-00004r-Sv for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:37 -0500 Received: by mail-wr1-x42c.google.com with SMTP id ffacd0b85a97d-430f3ef2d37so4213773f8f.3 for ; Mon, 26 Jan 2026 09:43:35 -0800 (PST) Received: from thinkpad-t470s.. (93-143-71-105.adsl.net.t-com.hr. [93.143.71.105]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-435b1e71730sm34199603f8f.26.2026.01.26.09.43.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 09:43:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769449414; x=1770054214; 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=xooLCZtH0ZC3/iJjGv3DYg/vTW0gVjlRUxdeK15JZ+0=; b=cV58PGDpO4wvlGzywNssRzq6xRQ4jTWTXQfAanxzjRO0AP8YxcdCjrsh/QMELiZ9ZJ ZeRwrkcewRV0u0r4KmcfsVVJjxyEiAjsOVaaSt40KCNfLeg1tgF58yIoLtX+1zGdixJe hO5hA5matTA7UUXFEW8P1WK/njddnYHGtHyiTWFCSJ4sEZEO6V4P1b+6qaTyjkFFwtp9 XYYUwGIvyULckfRX6m8qXqTF7SnrZtEHp9g1STQQ/ajaoe9TDfHw1eft3fCX04Q0XeYQ pLuJMxiWA5lB/2LpfLow9jd5daHEJWUTmxwpF2p59hgk1acwayY7Yp5WtYOeaZiQKfQY 7tzA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769449414; x=1770054214; 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=xooLCZtH0ZC3/iJjGv3DYg/vTW0gVjlRUxdeK15JZ+0=; b=dleH31tID5x1sdYzcXN0eHBA3K0TUCTNpMRK+RVUc0YIL3EA+Yq+tkrKMv9AeOk++4 dqr8MHpNZQRDWr3wXxoQVCE3tvjUaNlMH/h2LMK2B2Z1kYnaIGFQueI3eYZ8HXq3rIwX anr0yHzT5winDpAf4DPIG4pKvNH3ZOn5E4kzHHWRvkCzG0U2JWUNGaBfBBJTRpfPuU8z zySTQi+yj0ePTL4BUVZxO67Y5jHnE5gf9BbcSilNvfMxJualFaAy0fSCiGABH14Kvg9l sCmYj9pWEeBqVro8bPYCK1hAtkJ+NsRLxRQmEUJhaJDlxCfFWu3AsL91PytXNEIgopah 9vPw== X-Gm-Message-State: AOJu0YyvbchLdZKdzsxWXRZ+ibsn4hF6uK2C8SXrjAqE9ftXM/VSgrE4 ZH1cNKFaLtkkaQ3esMevYwPwD33p9DDULTWUVhMvFxLHa4Tw4QwonKC0SFL2yw6j X-Gm-Gg: AZuq6aI4kn/Wm/XW6+hjfMLOx40TNawMx6EH4O2bI2HXbLTGCufUq9wd+qcZnJXHKLE SLo++cNxrc9B+VGNxnVt73lUkB1ksev86clnHBg6NZqPpa++lnp61CTAkmoNFvcXC/Hlz5KUkFc KNn8vFqMM6dyzUCTlhkQS+sC7zQ2bQ54tuqGz1dV+bo1kynENb/qsXCEJgZNwyzrvMywlLIBwrq PhAHY+Ke8IOVn3y20WpDwPDAz4GQf5kzP5Y5rBc31ms6scY6zzkOwHmcnr75GVhJ1H0Rz0PM/u2 d3iwSZdfcPcLautcHdGxPopzGLBz4TfMg4I/Q/T35H1//IAxZ6LCcIjBGNTbvAmVRmIuIG9uZ6T VTutowP5BDMYYdEtdQMFyo9oYEbutbwFW4OQw1fEkWhIACjcNj5h857FMQOiItOyMAyEC8S2JkJ 6KE2+EZ6ZDFTanFCXgtEbtfUqFa4wajcnosYr8p6OOw+fskvakGi/jHdfjIfj1dTNH X-Received: by 2002:a5d:64e3:0:b0:430:fdb8:8510 with SMTP id ffacd0b85a97d-435ca071e29mr8186664f8f.24.1769449414157; Mon, 26 Jan 2026 09:43:34 -0800 (PST) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.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 Subject: [PATCH 10/27] hw/core/fdt_generic_util: actually realize device Date: Mon, 26 Jan 2026 18:42:56 +0100 Message-ID: <20260126174313.1418150-11-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260126174313.1418150-1-ruslichenko.r@gmail.com> References: <20260126174313.1418150-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::42c; envelope-from=ruslichenko.r@gmail.com; helo=mail-wr1-x42c.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: 1769449779881154100 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 | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/hw/core/fdt_generic_util.c b/hw/core/fdt_generic_util.c index c1d6ed9105..2c3f4d6b09 100644 --- a/hw/core/fdt_generic_util.c +++ b/hw/core/fdt_generic_util.c @@ -741,6 +741,26 @@ static int fdt_init_qdev(char *node_path, FDTMachineIn= fo *fdti, char *compat) fdt_init_qdev_scalar_prop(OBJECT(dev), p, fdti, node_path, prop); } =20 + if (object_dynamic_cast(dev, TYPE_DEVICE)) { + const char *short_name =3D qemu_devtree_get_node_name(fdti->fdt, + node_path); + + /* Regular TYPE_DEVICE houskeeping */ + DB_PRINT_NP(0, "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); + } + } + g_free(dev_type); =20 return 0; --=20 2.43.0 From nobody Sat Feb 7 05:49:48 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=1769449944; cv=none; d=zohomail.com; s=zohoarc; b=kMJ7vHlnkWyUvpFthtjuxBTUeWkfDVM3kmnI7iElTHYj4ZNgz7QLGyEHF1aCi6YC+bBtfFJ+mJdPCSBuI470O94uq8GYTdgOKnPGinDvYoHbnWT3Yc/fSAq6uJjTT4BW5tmqAT1uUWbFUav8ZLH0gDAQWPsaPmIixvoRI3ySqVg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769449944; 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=2IyBLhmWsQkr927zc3BlL2YflzrPqIWsR6t7Odl+vUc=; b=i+vtxIBOaB56GE4dTOsPo/XHhdq6jBNWl8jIdXw1jSzr0v0w8ETRRKfro2ZBTh375s2JSE8HIyk22i4BDXo1bFeY1Blibs8nYFFoEcd2TPTVDzLqiiDl+sG3OsYgAFlFCribfxJj5+UyCGJVUynh+z5XbjjJNIEQlRmWoioDVxs= 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 1769449944522148.54386168917563; Mon, 26 Jan 2026 09:52:24 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkQd5-0001a6-Gy; Mon, 26 Jan 2026 12:43:59 -0500 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 1vkQcm-0001NN-FQ for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:40 -0500 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkQci-00005O-Ra for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:38 -0500 Received: by mail-wr1-x429.google.com with SMTP id ffacd0b85a97d-42fbc305914so4121789f8f.0 for ; Mon, 26 Jan 2026 09:43:36 -0800 (PST) Received: from thinkpad-t470s.. (93-143-71-105.adsl.net.t-com.hr. [93.143.71.105]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-435b1e71730sm34199603f8f.26.2026.01.26.09.43.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 09:43:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769449415; x=1770054215; 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=2IyBLhmWsQkr927zc3BlL2YflzrPqIWsR6t7Odl+vUc=; b=KJkh4Vr2LNfVgjwvwPcwtdwT2cetO/YFV7kg9EWVE2lJz4hldjoqHA1QoWvUcnIeeO a7UCRpTkGpoI3yd3R0vJO815253q+6P6752tJpkKBmIyRIKNXKgVLhf5ARazVCyGButv 3Sc+F8rwgsFJvMc/6MPjDr/319MGkO3dyBgx0qqQ152wZe0Ux4or1eLlUV46q4NKdljF yTSJOOmZMzoza1z/Tm66+kwkFYeyquPAcIBTTK/ZjGikQkptRZGYLjktzKabYz5OFtNY 7b+zmqQAmlyH3j2lDOWHmgQPHDsp4q8CKQ7kCQxBWym4WPx91D3XFV+2nLMC0Lxp7/H2 AdTA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769449415; x=1770054215; 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=2IyBLhmWsQkr927zc3BlL2YflzrPqIWsR6t7Odl+vUc=; b=ktfao8C0foAIebdKQGuRqKpgmdUxVMWh5sCvpIAK+NFVz1mFscl7b1BKnFGas82ayF hCp+EETjzLGT/RoCBOY5nOsBqU4CN26y0PrygowqKOXDvyjU+aJBl+YhXFgub2uh7gO1 et+9RHQvnwBUlElAZfLGq7FumzT0TSFbgrbbmCUdfCO0Fzh586Bcl1XMkR0mmVk9mak7 BtLMIz51Ds8WaPnUjVwWan4Tzg7PyoNzlltlcJ0o5NojNMVVcLRy1uREz5VuJEhYU+SC 4sAQqGL57Ar/dlmL0e7OTpcZ0sFfHKrZVddc2XrgIf2245sn0CBLNrYUsDxGRieMXmu0 P9WQ== X-Gm-Message-State: AOJu0YxeJDIFqiYy+wW2g/VOIi3IaWbN1U3a07hWUEv21wadj2REiNx2 vQtdiLcAnxLfhBhmj1MVUzLK+PZGdckHjuxkGxagc5EBmarECn0EbOHafxvyTi8P X-Gm-Gg: AZuq6aJg0mg7d3oFIn5Z4be03OImmILhIFY1y0hHMzz1971P/Xie/UjIVJJ/zvxDzX2 E/fsWiFFF66bBRY7V2xfsrTWAynpHieCG815BR1tsMMkag2xxOYCDNLPQn9Ww8ip81h9YXzCc45 TJ+ZEZvp3DVbZCMFQjJiqdxzYBfLLGziaGJAoO2ZxSrCzAMm9JbZegVAUfzOEv/9PUQU+yiVTZA SYM5CEGJD2QZx+lHDmFT25w7AvyF/lH79Gc0X4knPpP8km1caqXxLWIdxhuSX/V+9CI3K1rORZj 5h+aHuohsLwWwIhchg8CJOeV3oB+WQRjRqgwtyN7NQug8VfrxdYmUQSxOdWGXka/kLSTTBzELKm 1cUV7GIKUyxcuJqg36wT7qwRrYLCCexKkqGcwxx9inFYFwploti+f8hyhns4HEmn/X4WCQ34uQr ImBYFeQJXKtBFvI0n4JrZt4Py+7FT+9FVMkQnL8WvGLxQ28tlu7dgRlA== X-Received: by 2002:a05:6000:420e:b0:435:a2f8:1533 with SMTP id ffacd0b85a97d-435ca39918cmr8121216f8f.52.1769449415066; Mon, 26 Jan 2026 09:43:35 -0800 (PST) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.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 Subject: [PATCH 11/27] hw/core/fdt_generic_util: add TYPE_FDT_GENERIC_MMAP Date: Mon, 26 Jan 2026 18:42:57 +0100 Message-ID: <20260126174313.1418150-12-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260126174313.1418150-1-ruslichenko.r@gmail.com> References: <20260126174313.1418150-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::429; envelope-from=ruslichenko.r@gmail.com; helo=mail-wr1-x429.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, 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: 1769449946358154100 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 2c3f4d6b09..c0e974e53a 100644 --- a/hw/core/fdt_generic_util.c +++ b/hw/core/fdt_generic_util.c @@ -766,3 +766,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 e18c4f9c8b..38086ec1e4 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 Feb 7 05:49:48 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=1769449614; cv=none; d=zohomail.com; s=zohoarc; b=GshyW+nNgQS/eIBKyW7rtu45bU3CYNdMuaaDlGacCsP5pU7dpItLFE2JzyWdcqbA1LqvswjgbmMHdYJO2hDRYSXws/BlBBEH+5KXSOguNFwkkr5Fkp7fjSSP03xMoTyDpMpSVObmUGrqEnN+dcHMSdtQnUAYmSHcX27a6QGQJzo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769449614; 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=Nfmi5icMy+Gsd3bejmpv5t5fn/UEcE2B0XY0gkqF90U=; b=Rt8IvCUu9WXW4FKr4R5jm6RJ5Qcq7drH+nMEO7h5swbLgkfiuu4Z/7IiqImvji+2sWCZzgLcrAiuZd3yq8NLJkjC7d80Y5eXz7bokc/pL8/OlpwvV4MGMTJ+gbnBlNHWb3L80kzR05JONlnBr+4WZ2grLrXbHz/TGG5l0RxRXVo= 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 176944961431343.233394701428324; Mon, 26 Jan 2026 09:46:54 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkQd4-0001ZI-UK; Mon, 26 Jan 2026 12:43:58 -0500 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 1vkQcm-0001Ne-Gb for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:40 -0500 Received: from mail-wr1-x434.google.com ([2a00:1450:4864:20::434]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkQcj-00006S-Rx for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:39 -0500 Received: by mail-wr1-x434.google.com with SMTP id ffacd0b85a97d-4358fb60802so2794642f8f.1 for ; Mon, 26 Jan 2026 09:43:37 -0800 (PST) Received: from thinkpad-t470s.. (93-143-71-105.adsl.net.t-com.hr. [93.143.71.105]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-435b1e71730sm34199603f8f.26.2026.01.26.09.43.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 09:43:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769449416; x=1770054216; 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=Nfmi5icMy+Gsd3bejmpv5t5fn/UEcE2B0XY0gkqF90U=; b=c0+MhU8I7E7YKLHx9yRvqvtPLL6NtTN4V+/Lh0xaWLN6ydeCO+sGUyKegkhVAcgmlT SEmbekddJFYHTQy0tjsXJQW7udmXIR5PF9f72JhMvoLa8OVeGWeo0cbWt+TEqZ35JYwN HHUk5sFE+evsjeFjhzoq/dVmUYRCMb7rSPeIbG60yjsf2SIfh1B/bm4SFjVMK1etascP hMb6KCEn4xKhA5fbK2rHBqQ11YIaL+VORZTwtDKIbXCraOamw0PtpMgZWjvkgQWvta1n uDhmmD9JbXzMPQq0Am8jJKaZf7HTl553b5V2HK71vjutXEjXB8wpnQRQ7SE6qczYE6WF 7XYQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769449416; x=1770054216; 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=Nfmi5icMy+Gsd3bejmpv5t5fn/UEcE2B0XY0gkqF90U=; b=vo9AIBc5PKJ2XLgTSnyKcGmwpYfvpbLBTuztfrdCk8AtrLB6449MemQoGSZKPLr/03 nletxAoJWipo1i0OrVMgTB94+JM8C6X3d+19tW3Y1RhnVRHDCpByWNXb52Ndyax6l9b3 MhRzbsS4WyyyfCdamEFwWWCzv4FQRDc6+Ee9mFt4NgJ3bWweaPxncFA0yRP90ZfogVP3 v9iCte+tcOcAghj5pMiSV6aJ6gGxou+fAa1424JJAtSV4S0ZMYc3jkylDUvB52haPwXm HR4exSawySCA3L9EuT9MqVs/c317OZ5PJRIrmxm115YX+jgSjqcprCva72zi6ZH3d4h9 5SeQ== X-Gm-Message-State: AOJu0YxaG8UyryvD7qsd+o+RFCy8AHzdGsmzySkK7S1+SN/OTkh0TBI/ 8WqHQRpgXvD/4kluZ2Q0ww4K2uup5OF0MfNDUa8Gli+KAmwT1pXnED4p1Iv9GC8b X-Gm-Gg: AZuq6aICAVUbCCGuU28SpkBoBnhKd2OoX8AG+kPXfB1DW5oO30vEfgEM5XBwVZFlJZF EclnTv2WEZ/u9hDmdqKqzXKnMukjfrBtJMSP0BjyQJd6Z5vMtCztVfOOGOYHmxH4LeQvwCZhK/j ijxkn+zBtpY4QwoLk+ckMD+b0ozmU8yvboUk3ehCrqXVko35gUjHhb5hEPl83LgGUvyjq0eyKEf hSaYTDotD415tdwJA4DOvNSRX85f08OdDXImwpzMHsfqP595JsH6qq/fmOTG4lKkiinODWTW7Vj GkW6WuUUgUMwajCFwj4dOI+kdb04VzLcyLsUBlSpwD+1jnoSkjzEVXtnCO9V0ThVwQhSpE+Eavm KsXTJsRY2vjDIx+NfO4Hj0uwd/r8oCEuc9ilMP0BUr8k4bmlpXKFzgU03j3AjLy1+nwOWFqTRVV EUUkgQNt4vDKlZRnptsEnlOgxnTn9WAKBGlhxQPBeKIsp+yWlvhppO3g== X-Received: by 2002:a05:6000:2c01:b0:430:fd0e:a502 with SMTP id ffacd0b85a97d-435c9d1bc8fmr8133326f8f.22.1769449415988; Mon, 26 Jan 2026 09:43:35 -0800 (PST) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.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 Subject: [PATCH 12/27] hw/core/fdt_generic_util: add TYPE_FDT_GENERIC_INTC Date: Mon, 26 Jan 2026 18:42:58 +0100 Message-ID: <20260126174313.1418150-13-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260126174313.1418150-1-ruslichenko.r@gmail.com> References: <20260126174313.1418150-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::434; envelope-from=ruslichenko.r@gmail.com; helo=mail-wr1-x434.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: 1769449616462158500 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 c0e974e53a..b22c612e0f 100644 --- a/hw/core/fdt_generic_util.c +++ b/hw/core/fdt_generic_util.c @@ -766,6 +766,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, @@ -774,6 +780,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 38086ec1e4..c5aaa58dd6 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 Feb 7 05:49:48 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=1769449861; cv=none; d=zohomail.com; s=zohoarc; b=I8zKK9OCw3lHP6kI8Csn9oOz4Umj00yYeFJD6bhoaJthnX9LaoZcfAAfuQrxDw0jEKj9X8sNQMgp0tpcdtc02HwEwhh75CkJ7MrQpSzK/nhjhTvHuSdZexBTSXP5hKPHPhemzKsYcIzQYvqPdo+RwHuVAjqrx+54191qmfrmVPo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769449861; 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=FreAIoZdmegYhzwifdB+iPbHtIb82yqlS0xsc8B2PIw=; b=A6+o1v0OcYtVCpHIedCODvaImpxQ/4sOKSs3xclrmXLai7Oq9RhodybPpw3JczjO/7Hi+3njaCxm03p2VLF9pXd0Pe2fyTg07goRnXOutloaTJ/v6bOP0tGmXxhvlYxfmFpGho/UQm+PrZCiW/hAKSziiiHghAQ7z2XN6HSrxn0= 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 1769449861786903.7587757878337; Mon, 26 Jan 2026 09:51:01 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkQdC-0001ht-8R; Mon, 26 Jan 2026 12:44:06 -0500 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 1vkQcp-0001Px-Jg for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:44 -0500 Received: from mail-wr1-x42b.google.com ([2a00:1450:4864:20::42b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkQcm-000070-6e for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:43 -0500 Received: by mail-wr1-x42b.google.com with SMTP id ffacd0b85a97d-4359019da8cso4165832f8f.1 for ; Mon, 26 Jan 2026 09:43:38 -0800 (PST) Received: from thinkpad-t470s.. (93-143-71-105.adsl.net.t-com.hr. [93.143.71.105]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-435b1e71730sm34199603f8f.26.2026.01.26.09.43.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 09:43:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769449417; x=1770054217; 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=FreAIoZdmegYhzwifdB+iPbHtIb82yqlS0xsc8B2PIw=; b=foKSfojT1TRgm7F6iUry8FmDpxc0R+MPFRm/GaRG7oPCKQA5Ia+cDq0DE7f2xvH0+6 2v4h+hNeuQfe4ndF9xZbYKLNo6nOxLpUGqAutxsNxlgwa+za2p4nqKD4gKn7IfpJ5WGW jI6FfgeUGXxzfkdHpWVblOuOGnBVLohmGRvjrk2nQ4USPgdCEgGUzdH1A+TV+ggdUqgC N1thGmfMYyKSlZGGh8vz61CXBHijuWglCIkeOYI8WFJzACfpWlewPMoTw5d0lbbDbI4C XF5U6Qlq/rBg4G222IJ7FuorbD/EIJDSjwYVNrsDbV9VzqOp38AEDbYOAXhXothLpq4/ tYxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769449417; x=1770054217; 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=FreAIoZdmegYhzwifdB+iPbHtIb82yqlS0xsc8B2PIw=; b=j8ZVfjxr1JGMedhk7TSE0uCt/I0l3nKTagIqDaeMPeHg4TIHhbAE+KNfUikQO0pWX+ +/+982N8vhpZjtj72vAsLkxagmypD5phQwy4lrmCq46LmkKFJmLm4Rf4Y/mS/3mDJ+R1 4EZKt/B55K5kaStPmbptR2hiQ0An5kxjDkzrzxUJzY5CakObeqHZeRasvi82rlGtfnB+ 13/N1ALtGO/X+H9eOxMtO7iFG/wJWtyqDtgg9C/QJLTawvO6DkiPgAGCgY7L8o0rX3cj S+sJbIdjT1U4fdcJn0dUxpfljRDPIRTsT35eeuUMvbzJFklZzKpleDsm2MJJAdPSo04Z Tslw== X-Gm-Message-State: AOJu0Yw+M8zZUjzJlaEoO6GEBxiifLKZS8WqD7hCXonbj8J6sO0MJWMY deDHShIs5pDUIu7Xy9BW12blPw2FZSE6Um5nIvypvT5AOJ7B/47+ZqyI6HMapcEz X-Gm-Gg: AZuq6aKEvVOmt5twgFaODvPxuLpKsmiKxyGS/zfcmfgjHO9SZScaaF3EUdVVOh1SsHF au+66MyKIPuJTS+pSBKOziIMyjiWevC6cgDiMH+fqDQksQICwVZBsrpuNufH8AaS43Xq6x8OiIf 30pxeomuSKr+BPen26GppqZlKvW29+UwLNe+ZwvLLiqinnZQaubYfJP+R4gpTZb58wwMYVlPNZI JDojqxxpH6vRVuqaRtO6b8LJMH0LswgoEJLZweBy40UpzOX0N79Qt03RqEyoIm011d8ImcFmyGD 7BsFJ6bJ3cQFn9A4nRbG+otz7yoi6lhKCve81OWTEXJ/ajGCeAVpNdzTBq+V3ZRjRfSngJqpWGx pwSvf9RCihvugcsmeQyhdWFHFV04YaYLEhZselABkDXAQZEWb7A7rn+ukBWNB9ABhQStqaIbJMa tEW9+97Objr40jQb8CjR3jQfdMvHHZp8ZYY0d5vhF+6LPYGzBTs5qQHg== X-Received: by 2002:a05:6000:4210:b0:435:729a:eb6f with SMTP id ffacd0b85a97d-435ca14774emr8946238f8f.19.1769449416887; Mon, 26 Jan 2026 09:43:36 -0800 (PST) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.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 Subject: [PATCH 13/27] hw/core/fdt_generic_util: implement fdt_get_irq/_info API Date: Mon, 26 Jan 2026 18:42:59 +0100 Message-ID: <20260126174313.1418150-14-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260126174313.1418150-1-ruslichenko.r@gmail.com> References: <20260126174313.1418150-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::42b; envelope-from=ruslichenko.r@gmail.com; helo=mail-wr1-x42b.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: 1769449863085154100 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 | 261 +++++++++++++++++++++++++++++ include/hw/core/fdt_generic_util.h | 18 ++ 2 files changed, 279 insertions(+) diff --git a/hw/core/fdt_generic_util.c b/hw/core/fdt_generic_util.c index b22c612e0f..d57d9387a1 100644 --- a/hw/core/fdt_generic_util.c +++ b/hw/core/fdt_generic_util.c @@ -71,6 +71,11 @@ static int fdt_generic_num_cpus; =20 static int simple_bus_fdt_init(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) { char node_path[DT_PATH_LENGTH]; @@ -239,6 +244,262 @@ static int simple_bus_fdt_init(char *node_path, FDTMa= chineInfo *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)) { + fdt_init_yield(fdti); + } + intc =3D DEVICE(fdt_init_get_opaque(fdti, intc_node_path)); + + if (!intc) { + goto fail; + } + + while (!intc->realized) { + fdt_init_yield(fdti); + } + + 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__); +} + +static uint32_t imap_cache[32 * 1024]; +static bool imap_cached; + +qemu_irq *fdt_get_irq_info(FDTMachineInfo *fdti, char *node_path, int irq_= idx, + char *info, bool *map_mode) { + 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(fdt, node_path, "interrupt-pare= nt", + 0, true, &errp); + if (errp) { + errp =3D NULL; + intc_cells =3D qemu_fdt_getprop_cell(fdt, node_path, + "#interrupt-cells", 0, true, &e= rrp); + *map_mode =3D true; + } 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, + false, &errp); + if (!errp) { + errp =3D NULL; + intc_cells =3D qemu_fdt_getprop_cell(fdt, node_path, + "#interrupt-cells", 0, + true, &errp); + *map_mode =3D true; + } else { + errp =3D NULL; + intc_cells =3D qemu_fdt_getprop_cell(fdt, intc_node_path, + "#interrupt-cells", 0, + true, &errp); + *map_mode =3D false; + } + } + + if (errp) { + goto fail; + } + + DB_PRINT_NP(2, "%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, false, &= errp); + if (errp) { + goto fail; + } + } + + if (*map_mode) { + int k; + ret =3D g_new0(qemu_irq, 1); + int num_matches =3D 0; + int len; + g_autofree uint32_t *imap_mask =3D g_new(uint32_t, intc_cells); + const uint32_t *prop; + uint32_t *imap; + bool use_parent =3D false; + + for (k =3D 0; k < intc_cells; ++k) { + imap_mask[k] =3D qemu_fdt_getprop_cell(fdt, node_path, + "interrupt-map-mask", k += 2, + true, &errp); + if (errp) { + goto fail; + } + } + + /* Check if the device has an interrupt-map property */ + prop =3D qemu_fdt_getprop(fdt, node_path, "interrupt-map", &len, + use_parent, &errp); + imap =3D g_memdup2(prop, len); + if (!imap || errp) { + /* + * If the device doesn't have an interrupt-map, try again with + * inheritance. This will return the parents interrupt-map + */ + use_parent =3D true; + errp =3D NULL; + + prop =3D qemu_fdt_getprop(fdt, node_path, "interrupt-map", + &len, use_parent, &errp); + if (!imap_cached) { + memcpy(imap_cache, prop, len); + imap_cached =3D true; + } + imap =3D imap_cache; + + if (errp) { + goto fail; + } + } + + len /=3D sizeof(uint32_t); + + i =3D 0; + assert(imap); + while (i < len) { + if (!use_parent) { + /* + * Only re-sync the interrupt-map when the device has it's + * own map, to save time. + */ + prop =3D qemu_fdt_getprop(fdt, node_path, "interrupt-map",= &len, + use_parent, &errp); + if (imap !=3D imap_cache) { + g_free(imap); + } + imap =3D g_memdup2(prop, len); + if (errp) { + goto fail; + } + + len /=3D sizeof(uint32_t); + } + + bool match =3D true; + uint32_t new_intc_cells, new_cells[32]; + i++; i++; /* FIXME: do address cells properly */ + for (k =3D 0; k < intc_cells; ++k) { + uint32_t map_val =3D be32_to_cpu(imap[i++]); + if ((cells[k] ^ map_val) & imap_mask[k]) { + match =3D false; + } + } + /* + * when caching, we hackishly store the number of cells for + * the parent in the MSB. +1, so zero MSB means non cachd + * and the full lookup is needed. + */ + intc_phandle =3D be32_to_cpu(imap[i++]); + if (intc_phandle & (0xffu << 24)) { + new_intc_cells =3D (intc_phandle >> 24) - 1; + } else { + if (qemu_devtree_get_node_by_phandle(fdt, intc_node_path, + intc_phandle)) { + goto fail; + } + new_intc_cells =3D qemu_fdt_getprop_cell(fdt, intc_node_pa= th, + "#interrupt-cells",= 0, + false, &errp); + imap[i - 1] =3D cpu_to_be32(intc_phandle | + (new_intc_cells + 1) << 24); + if (errp) { + goto fail; + } + } + for (k =3D 0; k < new_intc_cells; ++k) { + new_cells[k] =3D be32_to_cpu(imap[i++]); + } + if (match) { + num_matches++; + ret =3D g_renew(qemu_irq, ret, num_matches + 1); + if (intc_phandle & (0xffu << 24)) { + if (qemu_devtree_get_node_by_phandle(fdt, intc_node_pa= th, + intc_phandle & + ((1 << 24) - 1)))= { + goto fail; + } + } + + DB_PRINT_NP(2, "Getting IRQ information: %s -> 0x%x (%s)\n= ", + node_path, intc_phandle, intc_node_path); + + memset(&ret[num_matches], 0, sizeof(*ret)); + fdt_get_irq_info_from_intc(fdti, &ret[num_matches - 1], + intc_node_path, new_cells, + new_intc_cells, 1, NULL); + if (info) { + sprintf(info, "%s", intc_node_path); + info +=3D strlen(info) + 1; + } + } + } + + if (imap !=3D imap_cache) { + g_free(imap); + } + return ret; + } + + DB_PRINT_NP(2, "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) { + sprintf(info, "%s", intc_node_path); + } + + return ret; + +fail: + if (errp) { + sprintf(info, "%s", error_get_pretty(errp)); + } else { + sprintf(info, "(none)"); + } + return NULL; +} + +qemu_irq *fdt_get_irq(FDTMachineInfo *fdti, char *node_path, int irq_idx, + bool *map_mode) +{ + return fdt_get_irq_info(fdti, node_path, irq_idx, NULL, map_mode); +} + /* FIXME: figure out a real solution to this */ =20 #define DIGIT(a) ((a) >=3D '0' && (a) <=3D '9') diff --git a/include/hw/core/fdt_generic_util.h b/include/hw/core/fdt_gener= ic_util.h index c5aaa58dd6..dfc9fa3632 100644 --- a/include/hw/core/fdt_generic_util.h +++ b/include/hw/core/fdt_generic_util.h @@ -16,6 +16,24 @@ =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, + bool *map_mode); + +/* + * 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, bool *map_mode); + #define TYPE_FDT_GENERIC_INTC "fdt-generic-intc" =20 #define FDT_GENERIC_INTC_CLASS(klass) \ --=20 2.43.0 From nobody Sat Feb 7 05:49:48 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=1769449953; cv=none; d=zohomail.com; s=zohoarc; b=G/3370Lg5jBWyebqZbtTphqOLhWY4u0WSWb5wey9HxxKdVevl4bzzC5B0VqCn0EdVy//sMIKGmE/zzI+B4bJasp3DF2PCM7RPA32nKxNw1pZOEi5HGSAa2ICp7tXVSxQzgdSIHdrTyumjw17RVlijFKmRorrmfq5q6Pdefhb3G4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769449953; 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=p4fgFw+MmsKOfnzb3jQSk/XlDC0OxrRjW4c0oi2lmAo=; b=B4BrDhQVYCa/RfNdxq87r10RmrUbWXW2Bo3A5am3jePnC1bNMw3JBLqREyC+kGLKIxw84qUA7n8FDDao8ny3oQiFS7LeXb7zrQq+cS0NLzE+RopkLapIC3P2CNxkVQElk3uCLP62dGsu3MhIRmCqvOluVbj+UbBne5VsHCQomwU= 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 1769449953173422.7913780998972; Mon, 26 Jan 2026 09:52:33 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkQd5-0001ZM-16; Mon, 26 Jan 2026 12:43:59 -0500 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 1vkQcp-0001Pj-2O for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:44 -0500 Received: from mail-wm1-x32b.google.com ([2a00:1450:4864:20::32b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkQcm-00007S-5Z for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:42 -0500 Received: by mail-wm1-x32b.google.com with SMTP id 5b1f17b1804b1-48049955f7fso41117655e9.0 for ; Mon, 26 Jan 2026 09:43:39 -0800 (PST) Received: from thinkpad-t470s.. (93-143-71-105.adsl.net.t-com.hr. [93.143.71.105]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-435b1e71730sm34199603f8f.26.2026.01.26.09.43.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 09:43:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769449418; x=1770054218; 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=p4fgFw+MmsKOfnzb3jQSk/XlDC0OxrRjW4c0oi2lmAo=; b=B3BV2XQfKxB8RQ3iZwrxHeK0E2UIEO4wUe+srZMZX85yK1mx9UztnFL41vDd8DJa6T Q8JcY9mPe6Tzh/Km2/TPT31tkTMKXpgBWzzjG6fstZY5/hRHV/iCAuaIlbreL3Lsdj90 UsCyoY0LBke1cJUuMrb/RF7DqjtxIpFPxbl5wz77OFRJZkyDIGAok1x6ytPEU8I0vfLC OJzr3kq9nHiSMuXk4k+1yM8/ko2zvI+8mytDAokmYQtuy7DMHhZ5EKxDvZ1k6KG8Hxp1 1OpNORRMuSO7YDDdFutDw6RDJyGbVR4JUL1eRybKvbfvxN93h09p3faVptWWK5IeW3ob uE/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769449418; x=1770054218; 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=p4fgFw+MmsKOfnzb3jQSk/XlDC0OxrRjW4c0oi2lmAo=; b=HCu07+m2jcu/czM2O3ju/Zuv69ZYaGLXBGZ7RdgPAXnf3AWFp6sUyJ3NWI+lA7EgPx ptYyvnwusGjjK3gW/K9ZR2/G9sH1zbeuPh4abDQcE0BW0j/Xg/s9hejADTmrlDrW4LIX EFu4j1NDdkWSJ5vga8sQt418myPr6vEom0Vwh8QQRjgmm99IUnmLJNW2GXNqcylVFCZT x/RDrulVbuA0baqW2MPbLqsmDz3Jha5CJY3DTdnbqotIh/4YsZ0SbjoBjQmFQ2mBlSoO FeNjvBVmLtfuiz4siqOW4w0ze5flTVny2PYwjw/r6foWb7Kmx+E+KtiRyMwS5XdxzUVu yhHQ== X-Gm-Message-State: AOJu0YyDRxaZNYgrOY6XzcA4+ZOc0vlIm+a1sHswtYveGHTxd7ANXmu4 USEH+Wh6UGogVyWQR3RFCW1WkxpIVK3ARkzDTFWPIrerKj1WzMIaD3oHlbjZ0GQ9 X-Gm-Gg: AZuq6aLq1ZdS+zQDB/asuD2A9h0uC8MZ0eVxl1EYAfDaRjJPzaSrMxr+ZL5gxqd2zsL +8VXrKAZYGepcsaVuZHJOPbtBv0v8AaSF4lvTZTchpGnFm3ASNRuNPv/U8Uzx1RI9KyTi0WMWLD d3KEc2V95w0D8JcUrpRV7Q5z0d8CQrMk7SAHnydBFlAOVEEzRKiHAh0k1L3U7Hv1PkTTSARoqF3 C8qVlTxBEllYe//wtg8aHxE/R5Ytv/idkc9f+zCyOhjIZCMA510GL6fbUzxKycnyR7vhIoRURjX SW1ZS3PlC2LDiVK5fRMI+RftyIef9zjmmakJWcES+kHZo2HZn8JT8Z+rPM2vmUOiL5TxqOn3fWZ S7QEYpf8WPW1IXqmOi3o2Bw5Pm2fyuI+2n0DihMETIQdUlNVCE9ZHRwBMSdOAtesT0IU2pNBq20 D0vtfmJAMhceFj27B/C/1KxjuUJcI2+9qetz+NF66qTLY/0PRbPSnfsQ== X-Received: by 2002:a05:6000:2501:b0:431:c60:c5ed with SMTP id ffacd0b85a97d-435ca1258a5mr8598574f8f.13.1769449417839; Mon, 26 Jan 2026 09:43:37 -0800 (PST) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.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 Subject: [PATCH 14/27] hw/core/fdt_generic_util: map device memory Date: Mon, 26 Jan 2026 18:43:00 +0100 Message-ID: <20260126174313.1418150-15-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260126174313.1418150-1-ruslichenko.r@gmail.com> References: <20260126174313.1418150-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::32b; envelope-from=ruslichenko.r@gmail.com; helo=mail-wm1-x32b.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: 1769449978330158500 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko Parse device mmio regions provided within 'reg' and 'reg-extened' device tree properties. Call corresponding device interface class handlers to create memory regions. Signed-off-by: Ruslan Ruslichenko --- hw/core/fdt_generic_util.c | 103 +++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) diff --git a/hw/core/fdt_generic_util.c b/hw/core/fdt_generic_util.c index d57d9387a1..af20ffd9db 100644 --- a/hw/core/fdt_generic_util.c +++ b/hw/core/fdt_generic_util.c @@ -622,6 +622,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, +}; + /* * Error handler for device creation failure. * @@ -892,6 +908,8 @@ static int fdt_init_qdev(char *node_path, FDTMachineInf= o *fdti, char *compat) { Object *dev, *parent; char *dev_type =3D NULL; + Error *errp =3D NULL; + int i; QEMUDevtreeProp *prop, *props; char parent_node_path[DT_PATH_LENGTH]; =20 @@ -1022,6 +1040,91 @@ static int fdt_init_qdev(char *node_path, FDTMachine= Info *fdti, char *compat) } } =20 + if (object_dynamic_cast(dev, TYPE_SYS_BUS_DEVICE) || + object_dynamic_cast(dev, TYPE_FDT_GENERIC_MMAP)) { + FDTGenericRegPropInfo reg =3D {0}; + char parent_path[DT_PATH_LENGTH]; + int cell_idx =3D 0; + bool extended =3D true; + + qemu_fdt_getprop_cell(fdti->fdt, node_path, "reg-extended", 0, fal= se, + &errp); + if (errp) { + error_free(errp); + errp =3D NULL; + extended =3D false; + qemu_devtree_getparent(fdti->fdt, parent_path, node_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+= +, + false, &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)) { + fdt_init_yield(fdti); + } + 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_n= ames[i]; + int nc =3D qemu_fdt_getprop_cell(fdti->fdt, pnp, size_prop= _name, + 0, true, &errp); + + if (errp) { + int size_default =3D fdt_generic_reg_cells_defaults[i]; + + DB_PRINT_NP(0, "WARNING: no %s for %s container, assum= ing " + "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); + reg.x[i][reg.n] =3D nc ? + qemu_fdt_getprop_sized_cell(fdti->fdt, node_path, + extended ? "reg-extended" + : "reg", + cell_idx, nc, &errp) + : 0; + cell_idx +=3D nc; + if (errp) { + goto exit_reg_parse; + } + } + } +exit_reg_parse: + + 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)) { + fdt_init_yield(fdti); + } + } + } + } + g_free(dev_type); =20 return 0; --=20 2.43.0 From nobody Sat Feb 7 05:49:48 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=1769449832; cv=none; d=zohomail.com; s=zohoarc; b=XVwcZj4vWF2rbwCLQq87HRCDDqIneU6QEoL5JgsG07Ep6SGlNDvF3pPjLEiRF2xr0DIYFmj1rGLC9srkv5kxjSiRc+wCduocHgmTqUXvsMzi2Q3msB/I0ieANWouqlqJQ8DGvqB7l6B/r4Kf7QBwo1u5ChtaD66Ji1yUN3/R1Ss= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769449832; 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=8v1gA33hjaYhV55XhXrq0Gi+pAkxwSl9Pre/BV0Vh8U=; b=H4ESlcaRRL2WMO+5uxX7NZh6S1gRRz69PETABu/gC68+nY09hlCvATIpP712kHLOltv8CStZQhJwi9a00SJdRqf3r01G+39qAI3Lj61lKG9RPCslhjEY7VvwjR1tAeqdBxSgmPHD09Hnp3f8cqNv2asMB6nvQfCzjLfmTrJeqVg= 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 1769449832472253.35360796331008; Mon, 26 Jan 2026 09:50:32 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkQd5-0001Zw-FR; Mon, 26 Jan 2026 12:43:59 -0500 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 1vkQcp-0001Pu-HD for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:44 -0500 Received: from mail-wr1-x42a.google.com ([2a00:1450:4864:20::42a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkQcm-00007d-Mh for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:43 -0500 Received: by mail-wr1-x42a.google.com with SMTP id ffacd0b85a97d-43596062728so3569223f8f.1 for ; Mon, 26 Jan 2026 09:43:40 -0800 (PST) Received: from thinkpad-t470s.. (93-143-71-105.adsl.net.t-com.hr. [93.143.71.105]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-435b1e71730sm34199603f8f.26.2026.01.26.09.43.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 09:43:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769449419; x=1770054219; 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=8v1gA33hjaYhV55XhXrq0Gi+pAkxwSl9Pre/BV0Vh8U=; b=ePM+xd18oRM+DGALVxRekZwfc8qIWuzwXEDLyLP/SEclSPvNztKgwaiJPxmnpCsqp7 Jp9ujVzgwIF2X4+ryuYoFGl3QSmM4au4ahGuVQ1cpyOUQCKvL87z8eB9Pb+upfeNzcm9 6SAEzsc41eILZbd9LL0Yspzh9yDpOjonbMcQd7Z1x+b5J4IUGAolY/oKXAGsMfdTRbQt oIhkBE0UVNVOTPi77HZULsnN4q6ENf7sjuKpqztQPHPyHNzcOQAp9QkYKJOB6vGqx4pp eqrprh8sz6+8Vrd7G5zvMwEmPCeyXblB2umUeMn5pGEidqSeEs4xtXZMg6UqppRXHOCL KZuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769449419; x=1770054219; 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=8v1gA33hjaYhV55XhXrq0Gi+pAkxwSl9Pre/BV0Vh8U=; b=jgrm48HcqnN71g73wfLiA/A3Z/cA4G/xEyOM6YH0mt8BhvPu3RTq8PUHTgQ6io4V5u XrfoLvjRpzC3CwcXfkf1cx1UfmwmdIgwZZb7pc7xk19Jr1vaRZ375aZKOd6xbgaPcY0q adeqLSMMjzyd/vfc0k3GcJrdKnyvDuv8FiiUrz9JW9MVtekYuLxd/KS+lWCPDvbFlxic t9IYkqtv2KHfgS7q40LPMqjOl7wVIUWIp7utwZDzEqbExr+ySYI+OSbDePeZ4HylJY7e j5DsyUjjnbkGgTa6Yyc550eJaV9VrZVTZBuQbq4R7+jhfMMtf1WGEYABsFhp75dxz/9T xonw== X-Gm-Message-State: AOJu0YyAFcHz5qxpiOQ8GXSqF4oaXMBu/jo45X/i/3GYXIltOxknRCrT UXEeNKChn3LoXTguIMTLvvaIgAY4ql4co5u99qL5z08/rX4fIPnNbUzech+MAjYS X-Gm-Gg: AZuq6aI1WT16CSQnaYfDnqoIIB2waC3UU8uj+ZlzIMqVcbhvaI0THdnpNiq98f1RiKu 1qQXNGKcm36U7YpDyCiXhBvO8mBOdLd0um09fSLgAVQ97Odmu1g7RIUEUvUySq6M4kAWkQutaU3 yaDLgEd9LS2WRiTxZmRVchYvMhUH9lWr52pLtJLck7JKZkyFQRO9ZAR222Wl6JYJzIoNyFmSoFE jFm0OqJRs1Cj55Avuyec0pp67Ucmoiqb7QyilRQC9WOk+ZDWIuG40w8i9jsLypSDt96XN21CdH9 H7A9aWZN1xzDSj9HmoGgKNbm0w/fjqeFGf9zhoOfKbqQVXcFl9uuu0v3xcVPf2QbTecMF7oHVMA wDhVY6aTOkt5WM9YaNGweB9espbWycvacPH1Uf0QBC3HMTdKHSVTy/1HIsdjAziwDCtMHgbWGnk 7gclJAooh05bvA8PxroUp16NkYJEWxOMZFnaz8DbdTW4VPtvhm+pMO5w== X-Received: by 2002:a05:6000:3110:b0:432:59d4:f54a with SMTP id ffacd0b85a97d-435c9d289c5mr10406397f8f.30.1769449418770; Mon, 26 Jan 2026 09:43:38 -0800 (PST) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.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 Subject: [PATCH 15/27] hw/core/fdt_generic_util: Connect device irqs Date: Mon, 26 Jan 2026 18:43:01 +0100 Message-ID: <20260126174313.1418150-16-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260126174313.1418150-1-ruslichenko.r@gmail.com> References: <20260126174313.1418150-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::42a; envelope-from=ruslichenko.r@gmail.com; helo=mail-wr1-x42a.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: 1769449834594154100 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 | 146 +++++++++++++++++++++++++++++++++- include/hw/core/fdt_generic.h | 12 +++ 2 files changed, 157 insertions(+), 1 deletion(-) diff --git a/hw/core/fdt_generic_util.c b/hw/core/fdt_generic_util.c index af20ffd9db..2f49909a50 100644 --- a/hw/core/fdt_generic_util.c +++ b/hw/core/fdt_generic_util.c @@ -76,6 +76,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++; + } + } + } + DB_PRINT(0, "%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) { char node_path[DT_PATH_LENGTH]; @@ -91,6 +173,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(); } else { fprintf(stderr, "FDT: ERROR: cannot get root node from device tree= %s\n" @@ -908,8 +991,9 @@ static int fdt_init_qdev(char *node_path, FDTMachineInf= o *fdti, char *compat) { Object *dev, *parent; char *dev_type =3D NULL; + int is_intc; Error *errp =3D NULL; - int i; + int i, j; QEMUDevtreeProp *prop, *props; char parent_node_path[DT_PATH_LENGTH]; =20 @@ -1125,6 +1209,66 @@ exit_reg_parse: } } =20 + if (object_dynamic_cast(dev, TYPE_SYS_BUS_DEVICE)) { + { + int len; + fdt_get_property(fdti->fdt, fdt_path_offset(fdti->fdt, node_pa= th), + "interrupt-controller", &len); + is_intc =3D len >=3D 0; + DB_PRINT_NP(is_intc ? 0 : 1, "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; + bool map_mode; + int len =3D -1; + qemu_irq *irqs =3D fdt_get_irq_info(fdti, node_path, i, irq_in= fo, + &map_mode); + /* INTCs inferr their top level, if no IRQ connection specifie= d */ + fdt_get_property(fdti->fdt, fdt_path_offset(fdti->fdt, node_pa= th), + "interrupts-extended", &len); + if (!irqs && is_intc && i =3D=3D 0 && len <=3D 0) { + FDTGenericIntc *id =3D (FDTGenericIntc *)object_dynamic_ca= st( + 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 + }; + if (!map_mode) { + j++; + } else { + irq_info_p +=3D strlen(irq_info_p) + 1; + } + fdti->irqs =3D irq; + irqs++; + } + if (map_mode) { + j++; + } + } + } + g_free(dev_type); =20 return 0; diff --git a/include/hw/core/fdt_generic.h b/include/hw/core/fdt_generic.h index 46b7dc084b..ad9e249156 100644 --- a/include/hw/core/fdt_generic.h +++ b/include/hw/core/fdt_generic.h @@ -24,6 +24,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; @@ -33,6 +43,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 Feb 7 05:49:48 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=1769449778; cv=none; d=zohomail.com; s=zohoarc; b=moASFeUKJUy5zaavNQIN4E9O65rs0WAWdujZpaP1JCC7qOEh8vSOrblcpLR7JwEW7ftDo+GHRl38qKTPS0MYHu3B13g3WrZa/wQzJZ2cpUt9mxOqO+EK0c+3KLhgszdXND934nrqla04WSVW1STLF5XR6nbZGm2e4VT/ZoVGy+U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769449778; 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=Cksv2wEYfI04vz4eUGCQhWPSvdKN8I8JbTsxrif5bM0=; b=K5O+njC3cPpDdHJGsNwPK5qCPqHJpqwGXd7oqRtnvDFUyFuK1x7iJjwZBFZd8200kU9XxWD5oVJAGoXHjbb4r/FyD3Nee0POxH/nRputSvfFnYUq79N66xj+hlO8VEU0nsxkQwqxtjqxM/zOKMrlpJqk+Di1fbyPq3E6nTE4/w0= 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 1769449778604945.642616624492; Mon, 26 Jan 2026 09:49:38 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkQd9-0001ei-07; Mon, 26 Jan 2026 12:44:03 -0500 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 1vkQcq-0001QD-S8 for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:45 -0500 Received: from mail-wr1-x42a.google.com ([2a00:1450:4864:20::42a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkQcn-00008G-GU for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:43 -0500 Received: by mail-wr1-x42a.google.com with SMTP id ffacd0b85a97d-42fbbc3df8fso2932245f8f.2 for ; Mon, 26 Jan 2026 09:43:41 -0800 (PST) Received: from thinkpad-t470s.. (93-143-71-105.adsl.net.t-com.hr. [93.143.71.105]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-435b1e71730sm34199603f8f.26.2026.01.26.09.43.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 09:43:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769449420; x=1770054220; 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=Cksv2wEYfI04vz4eUGCQhWPSvdKN8I8JbTsxrif5bM0=; b=WsPlscQgisxWQBL8IdTosQN6+Avpb6SOSjRIg6a+eSV8T7DiEMD0Xpro89PjGok2zn jxZX+iiXfIpc07rHTAouXLj16O+3nwvu/zNbc7khGntnmaJ2+CMDBUIepq5cLFKW1jFX iOts2BZ+uH0zKT0Qd4PpwcpPz5mC/T2I/Xfwj/jKKH9OB1jyi+5aTMh1LOC7dKz/Ywnl EsG/RSk2zz1TOKc/JC7dYFkopanYMEYfXRCnjSBog9bTC5bu5GXVKYk7XCtiSW3RTNww HHC8kWamRw1KjqRXRQKyG/ct5PDiLOiXE59hFV3S1MiVAe4FdeNYB/kmYHZCRv0JITJ5 kUig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769449420; x=1770054220; 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=Cksv2wEYfI04vz4eUGCQhWPSvdKN8I8JbTsxrif5bM0=; b=PBuGSdJ4O8KLSWBKhSL2uGq7nH8d5245Ei2Imfd7LJz1jUI0a3eal+S3kViCzpG4U6 qaqeoG4edt0wiXpTgL7t99dHOXOqPk0+kATZuUZH/B7E5IIomyZWzs0bJEQ9ST+D2I46 XgRL29r2a1aRIW9xtXet0tmfJBjPkOdqVSt/PrRtHpxSGPfAWd8y/m9MBT2FzwosLKFj 62OtUulUfXO2VfW5EH4PlA1xMHw5oDCWFvsUGdSEGtzxGgyNrUpu/aVB8z8ekY6N+tT0 N6DDAtmk4N/qleUeuGekRfATlzBA+0dY7NrRQ0urP799LYb/Ze4UL/vdI3sbvsnsN/o0 /Ojw== X-Gm-Message-State: AOJu0Yw+Ma9y8BDc2YIjJOooH/WQ+CpC2kpgolaOg7Q9MNJrSeCd8ox6 GJ9OLHvCXSshsmoZl7MJZTx7g4WPN2VgFV3vdZ2y8a9Qyhe40oUySa947Ts2VCPc X-Gm-Gg: AZuq6aIRqKYKR8xfwDt7QbE0LBM/iAzcnbTFVs57TF6EFYWMkempiTizS2e0u/AcwgA /wikdUqQQVbv7aB6eEunS8gLPrMj7Y1AsHDd/G3ALWUFcmPk2Va5gGjXXAGso30tM5dA0iH2dJr sLAc4QR1QkBKvZal6NR7ZXrcPOClwdreMsa57PS8j9Q0/gC6plCTpDE02Zm8bXOeYIV1D9vKsuY d2IP5DVoFgscY4Sj9Aj0xl+UVT0sYqoQP1ysGWfoL0SRl/awyMXUXOUB9vGCHmB0HaipZ17EzwQ v6DM4YltFVpqeQTKYtYxwaOBsoAfZQnF/wITb5FUCxffeJZAITvPYcutEULSJonGkwyQBoCs1Zx t4Y1ezkykuidjWL2ePmsMfdld0OEWuLZ0mfv62lePfjD72PmMW7ExPrT0OMQyysM3n0BLSWZHDe DefDlzqaVbeLxTlTWjXHjNTeD+nSNUetB0lZCIpNW/H6tsHz01qvom6w== X-Received: by 2002:a05:6000:2509:b0:432:5b81:498 with SMTP id ffacd0b85a97d-435ca148113mr8878158f8f.23.1769449419793; Mon, 26 Jan 2026 09:43:39 -0800 (PST) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.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 Subject: [PATCH 16/27] hw/core/fdt_generic_util: realize cpu clusters Date: Mon, 26 Jan 2026 18:43:02 +0100 Message-ID: <20260126174313.1418150-17-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260126174313.1418150-1-ruslichenko.r@gmail.com> References: <20260126174313.1418150-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::42a; envelope-from=ruslichenko.r@gmail.com; helo=mail-wr1-x42a.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: 1769449779683158500 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 2f49909a50..83ce5b3466 100644 --- a/hw/core/fdt_generic_util.c +++ b/hw/core/fdt_generic_util.c @@ -158,6 +158,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) { char node_path[DT_PATH_LENGTH]; @@ -173,6 +183,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(); } else { --=20 2.43.0 From nobody Sat Feb 7 05:49:48 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=1769449844; cv=none; d=zohomail.com; s=zohoarc; b=QP+V1AQUhsgatLlUJSXJMeK+zfeDCc/b8PCR/8+7ttjcvME9Hfjzb5YMmVR3X5P2zRyLZ19379TKKC8zXsAfMLMiQeaSmblnV6frwe73jsR39ZvYaP/tN51a1daBthXjfywboI4ItgTWjeH8DqORZ7bPRmCUUD3euueCaEKo78U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769449844; 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=wFBy+jh5YBiZ6vn3keOL2UaLzu0U6mepC8EFxBaBwtg=; b=HLD6IxAlPhy7+Jr58fHU93G41k19MIuZrwvQSGXUkHA34yIaAExfZAvMGm0yeoFAHd8dtRekp+/ABynMmp1LqRTXwmcEPyy2s3bS9eaI/fBf01zDQx9CM5ZXWlGmP4MThr8r9u2TepJg4u7Hky4u9Qy5B+/JNrVNNKwYEL2YY7g= 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 1769449844020976.5464136261696; Mon, 26 Jan 2026 09:50:44 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkQd8-0001dm-3B; Mon, 26 Jan 2026 12:44:02 -0500 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 1vkQcq-0001QE-Sr for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:46 -0500 Received: from mail-wm1-x32e.google.com ([2a00:1450:4864:20::32e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkQco-00008g-NO for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:44 -0500 Received: by mail-wm1-x32e.google.com with SMTP id 5b1f17b1804b1-47f5c2283b6so36332455e9.1 for ; Mon, 26 Jan 2026 09:43:42 -0800 (PST) Received: from thinkpad-t470s.. (93-143-71-105.adsl.net.t-com.hr. [93.143.71.105]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-435b1e71730sm34199603f8f.26.2026.01.26.09.43.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 09:43:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769449421; x=1770054221; 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=wFBy+jh5YBiZ6vn3keOL2UaLzu0U6mepC8EFxBaBwtg=; b=F9VjDdDtdq2HvE9ucXsvSBNV9dGoIF8X3sJQQ2mu4sLWWGEhtmR4iAOwv3IRd/gw/Y xzQyTUvrxaPK+NpnB295k3KN5+7zgRivD3xupMtqOrQtAd6i2TnG6KIsJV6yKQXAU24P fIHWCChCPmd0Q9VYO8AAgYiZVDaiayxczhVFzzygm9DZZC5IGpgVHLvWjH2rwAZj7HxV PbH2ccJFkcuPSbc39Nq7dLBn1aevG950A5WPxG7JSzconcLMcjN+JkswEB1dEkMDJwP4 h+17iZncfA2ftMHdcnOv5BSI0Ipm1uzzLvV9dSl3uw5HpsVOYWciuVp07S66V+tUVAaG saQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769449421; x=1770054221; 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=wFBy+jh5YBiZ6vn3keOL2UaLzu0U6mepC8EFxBaBwtg=; b=oLd1njmCp7OZk2vVV1EPeI0JPve2VPhEh3MCEgptQmdxCLqz+oShEqP9W0QTyBD/mX HhZvGtfwmIlaUa6KlVugGpmpvMG6DKM9Tg2N28VyVlbWheHlrtJA4aiqTk5PQ0M8fhVq uqnC0YQBNzAHD/DjCfEc41E3MwePK/j605vsYu5US0XHmRsiCXEuEEvdPEnD9XVCsDGK /QOqTBygD4KpB1P3076cMTAwcDwyWWEgiEi2OPeQOsyWxyCbOlETzLcDD4qEXSfYdXDZ q3FwzlZSeQpQuEYNRll9nskBLz2vwJm9mo4Hc1QLTob4p1S92RRSGPTMxHdN40PdfSKt Qzcw== X-Gm-Message-State: AOJu0YzTtHgXjhNJFjLjH+ubwgJZ+gaS77hr+F787BrDIeYRG7m7FDIb ABsWgS57yxK6qaZp4t1ND0QJ/JDTZPPChKHcgLvNuYUMLVw8Wok4qjQx90HeOaJy X-Gm-Gg: AZuq6aJ22Ib05PoLsxryzQLR1uiFsm+j4w60pf3USMzGabbLTixKY2h7fFA4fsPdmYS vKlldSFeHtj0lkSFrryb6Nz+bm1RMHMea/hRiDWuMJmPlJ5DXbKwUd5hyZegOWcKPRr6BYaqxcY BXwOOIayJRepy71ntOu4lE1rBINDEDZZmOtVcMjWUnWWM4tL3VEnyA0TdhFFVzQszJnYY/Pu0jc qswI0ZE5hdZCv5rJPmGwyWR0+ID9CgC8Kd/VpC2decir4Adnid+CTx9JbGuW6ozktZdbNxs3k65 OWBv2ysh1nJxDHxCVaP+1nIxMo71bXNoy/HTCkOYy1gxalpyZGPYes/D+rtBvLqv47NtY9ljFBX WwA64N3vNQS2T+yqgpcF8YtD/s9ZUIwzNZrhFjKqQddiIpMj7yGqvgflVyBr06S+FiUOexRx4A9 /Op55hA47N4kekxLshcO8mhrM8quvicDH/teGpZcbkMDDiiGbDMR/C+A== X-Received: by 2002:a05:6000:2905:b0:435:a48a:123f with SMTP id ffacd0b85a97d-435ca13646bmr8352236f8f.42.1769449420697; Mon, 26 Jan 2026 09:43:40 -0800 (PST) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.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 Subject: [PATCH 17/27] hw/core: add fdt_generic to the build Date: Mon, 26 Jan 2026 18:43:03 +0100 Message-ID: <20260126174313.1418150-18-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260126174313.1418150-1-ruslichenko.r@gmail.com> References: <20260126174313.1418150-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::32e; envelope-from=ruslichenko.r@gmail.com; helo=mail-wm1-x32e.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: 1769449844802154100 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 b5a545a0ed..6d6434b570 100644 --- a/hw/core/meson.build +++ b/hw/core/meson.build @@ -28,6 +28,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', 'gpio.c', 'hotplug.c', --=20 2.43.0 From nobody Sat Feb 7 05:49:48 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=1769449886; cv=none; d=zohomail.com; s=zohoarc; b=kke1WvAhqN6yra8fl0vpy6wpnF3frcDZeuYKuk9+T3MKbl93ThQV38F92zRBrnZ0Dgz96QQ2PMTKBAU8wRmLYtbZPm5sVMwPrZ98TuygxUZA3xBqPCFqSLvGYRcUMmRUnEFuptItSao7EipqWSMcs00eqXzmBUkeLJWOtYwMIzg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769449886; 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=+7ZOgBJTZuLhg69aGiSHD6L4SYNtfGCSvu0hKB10ga8=; b=LAV4tAV1Nqx20Bsksad9qW1QFx6uMoWpub1ePMZoceO7rRP/gL9k8p7ZPcrPOuxKmr7VXNQqH3USg4mIotR5W0aq5uspNI4mKmT7Zifora+Ouw8CTvJg8Dm5V1EJ/DA0d3naf/P7qiK3AYUxB46BHrtn1jRP2naL95WxQCiUdGI= 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 1769449886448358.1644471582663; Mon, 26 Jan 2026 09:51:26 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkQd4-0001Z6-C7; Mon, 26 Jan 2026 12:43:58 -0500 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 1vkQcs-0001Qm-H7 for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:48 -0500 Received: from mail-wr1-x42e.google.com ([2a00:1450:4864:20::42e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkQcq-000094-JY for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:46 -0500 Received: by mail-wr1-x42e.google.com with SMTP id ffacd0b85a97d-4359a302794so2972911f8f.1 for ; Mon, 26 Jan 2026 09:43:43 -0800 (PST) Received: from thinkpad-t470s.. (93-143-71-105.adsl.net.t-com.hr. [93.143.71.105]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-435b1e71730sm34199603f8f.26.2026.01.26.09.43.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 09:43:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769449422; x=1770054222; 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=+7ZOgBJTZuLhg69aGiSHD6L4SYNtfGCSvu0hKB10ga8=; b=En5jYSkOIBIzzY0ICGzVC0BsQMgAgGYo/nNckN+aYaRfAj1T0t7z++K5q2Z7kMGBPA qUBguzqiuzzjrJ/ru2Cn1l7ZyYC4DE04Np40XKOT6h792b2rlA0ZLEd595u67kztufK8 qwJr8irr2HTrrVOiPvK55A/Ar4nmSegsbuBaKLOUAIT6JCVB1uuzDpTXWSb5j2KW4fV8 iS5DbB6q7BducadOOY5QPPmQPgkDQXSvp+UHVvzJDTNg1nmwlUsp/asZtErwtk6RtJoX CfO40tJRiiucz3MN1uVMfT7yiWKUmkS8ghE6JfW/ry2qTN2gDCZANZSqLiXrku6VwjYm bNPw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769449422; x=1770054222; 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=+7ZOgBJTZuLhg69aGiSHD6L4SYNtfGCSvu0hKB10ga8=; b=Km8jNFix6o8VROZBJ+UpdT4qeDN3yrJ88WIFY0vUaRpXfnzndD7JPPwbtSnNknHdTj hE4aSJfhgo4qY1gdquIYddILaedxWLcB90YJ3IVI3h7UqM2BBFJb/4VP9TuRpkzXp26S LSokyIfcMga4SAkCVjMM5j+vduy8DhqJKRV9//uwA8Ib3gzxtNpvNT8i4GdDEHLOY5OX 1oGKODurbL1kNFQsAvQ0rWlN+tZbkAPVHIu3fg94pSEqprpH0yLW5WyV/fB185WDSLqQ 2CZuNqjUV7VNyw+H0XcU6Ebcn3sZ6IYjUGfclypVd5RL34rrrxsdJTR8yQ1ye1uqerfb 5PHg== X-Gm-Message-State: AOJu0YwtzYAeoIr/uuxig7eAML17FsXgGqZ8TDx8rl03cgFndvV0LsrO QrKgNvqPI84EYImX7BPWOVYlMbSwgomgsGBtwCbq5Vq4l2Dv2p4hdzZJ/BPIze8G X-Gm-Gg: AZuq6aJF4GVnOG1Bnqu2YrXvpAFGxRtXeiu4uMheKZt5VqSwayi6GQ9CzP2uxuFOd33 CdmUNZ3je0c6PwhgM/75OQLv/izKvujdW0TNc1UGZW/acMqkEFVmCep5nclyU9BnjqRT/7dnSc0 hliuffJVHx23o2Rb3jNZPkn2XITE5CjEDGNhY9Qdz6lvpw47YY5+9dn9oilfrLO0sucoGKDhYwj L2LX68b4zKLyJzyWdwY0XAhO4vgnfEp6GWH/n/84te8SrnpHbz/bIN9lU2mKRN75Negm9uxk4bJ 276qUVa2wE846AbBadMTe49VLsF6MjYsYdzg3aE+liPqrTWe+vOAtQ4CPToEtRzSKITcqRlhpWt s/JJ3br6mCdHZ2QTsFWiszbTnM2YhLlPHO2pHt6yDtyvXsD/LwgfczEwv2fWnh0opWiBylXGc88 T+4lT6So8sO1fTA1JkOxDSyID0dEaqz6/lRV4IGBE/a4dJrOgU8pU14Q== X-Received: by 2002:a5d:5d13:0:b0:435:7154:2a7 with SMTP id ffacd0b85a97d-435ca0f7b44mr6872588f8f.6.1769449421838; Mon, 26 Jan 2026 09:43:41 -0800 (PST) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.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, Paolo Bonzini , Zhao Liu , Yanan Wang , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH 18/27] hw/core/machine: add '-hw-dtb' option for machine Date: Mon, 26 Jan 2026 18:43:04 +0100 Message-ID: <20260126174313.1418150-19-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260126174313.1418150-1-ruslichenko.r@gmail.com> References: <20260126174313.1418150-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::42e; envelope-from=ruslichenko.r@gmail.com; helo=mail-wr1-x42e.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: 1769449887463154100 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko Add new '-hw-dtb' command-line option and corresponding MachineState property. The 'hw-dtb' option allows to specify a Device tree binary with hardware description which Qemu should emulate. Signed-off-by: Ruslan Ruslichenko --- hw/core/machine.c | 19 +++++++++++++++++++ include/hw/core/boards.h | 1 + qemu-options.hx | 9 +++++++++ system/vl.c | 3 +++ 4 files changed, 32 insertions(+) diff --git a/hw/core/machine.c b/hw/core/machine.c index 6411e68856..fc04cf75c0 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -378,6 +378,20 @@ static void machine_set_dtb(Object *obj, const char *v= alue, Error **errp) ms->dtb =3D g_strdup(value); } =20 +static char *machine_get_hw_dtb(Object *obj, Error **errp) +{ + MachineState *ms =3D MACHINE(obj); + + return g_strdup(ms->hw_dtb); +} + +static void machine_set_hw_dtb(Object *obj, const char *value, Error **err= p) +{ + MachineState *ms =3D MACHINE(obj); + + ms->hw_dtb =3D g_strdup(value); +} + static char *machine_get_dumpdtb(Object *obj, Error **errp) { MachineState *ms =3D MACHINE(obj); @@ -1287,6 +1301,11 @@ static void machine_initfn(Object *obj) ms->ram_size =3D mc->default_ram_size; ms->maxram_size =3D mc->default_ram_size; =20 + object_property_add_str(obj, "hw-dtb", + machine_get_hw_dtb, machine_set_hw_dtb); + object_property_set_description(obj, "hw-dtb", + "A device tree used to describe the hardware to QEMU."= ); + if (mc->nvdimm_supported) { ms->nvdimms_state =3D g_new0(NVDIMMState, 1); object_property_add_bool(obj, "nvdimm", diff --git a/include/hw/core/boards.h b/include/hw/core/boards.h index 07f8938752..c28c505bb6 100644 --- a/include/hw/core/boards.h +++ b/include/hw/core/boards.h @@ -402,6 +402,7 @@ struct MachineState { =20 void *fdt; char *dtb; + char *hw_dtb; char *dumpdtb; int phandle_start; char *dt_compatible; diff --git a/qemu-options.hx b/qemu-options.hx index bd014a3244..6dd3e04e38 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -4492,6 +4492,15 @@ SRST(initrd) =20 ERST =20 +DEF("hw-dtb", HAS_ARG, QEMU_OPTION_hw_dtb, \ + "-hw-dtb file use 'file' as device tree image\n", QEMU_ARCH_ALL) +SRST +``-hw-dtb file`` + Use as a device tree binary (dtb) image used to create the + emulated machine. This dtb will not be passed to the kernel, use -dtb + for that. +ERST + DEF("dtb", HAS_ARG, QEMU_OPTION_dtb, \ "-dtb file use 'file' as device tree image\n", QEMU_ARCH_ALL) SRST diff --git a/system/vl.c b/system/vl.c index aa9a155041..c890da586c 100644 --- a/system/vl.c +++ b/system/vl.c @@ -3020,6 +3020,9 @@ void qemu_init(int argc, char **argv) case QEMU_OPTION_dtb: qdict_put_str(machine_opts_dict, "dtb", optarg); break; + case QEMU_OPTION_hw_dtb: + qdict_put_str(machine_opts_dict, "hw-dtb", optarg); + break; case QEMU_OPTION_cdrom: drive_add(IF_DEFAULT, 2, optarg, CDROM_OPTS); break; --=20 2.43.0 From nobody Sat Feb 7 05:49:48 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=1769449912; cv=none; d=zohomail.com; s=zohoarc; b=fCIFmOpVgOz2f6uw3kdns9gAqevEGbFfQnpJl0mFai4Es46CE3jI33nasghI60y6u6WwvZ5I+qrtbqSiJ7ITol+AGGX2KmO4y7ZNcphat6bkj2ZqcGLIAw6tyjKUZUtIeHcaHfWsS4wOxqOjgxzkl0Ymv2dmDrMRSKi18sEMhxM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769449912; 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=sJSsgywQO/rHQ4WoDlmS1OtrkxPJkG9kKCFHbCDdYFU=; b=SwtH5a6EFzxVX9lt7mC8wPb9d+FKDXl1aCyn6gvJED8nrIovrTgBAIC8oyQBBnulYgkcXfHvmmeiMtNpTQYX+KZFH7CCs6B0E07V/A19IB2tSaokCkcwjh8WHYVWmwE9VTK7E2Ay1rAXKdp0tNcQCet2V4YYMj8Spsk7+xkdzKc= 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 1769449912024429.7235518820837; Mon, 26 Jan 2026 09:51:52 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkQdA-0001fO-1V; Mon, 26 Jan 2026 12:44:04 -0500 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 1vkQcs-0001RG-Sr for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:48 -0500 Received: from mail-wm1-x335.google.com ([2a00:1450:4864:20::335]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkQcq-00009a-SN for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:46 -0500 Received: by mail-wm1-x335.google.com with SMTP id 5b1f17b1804b1-48039fdc8aeso25343765e9.3 for ; Mon, 26 Jan 2026 09:43:44 -0800 (PST) Received: from thinkpad-t470s.. (93-143-71-105.adsl.net.t-com.hr. [93.143.71.105]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-435b1e71730sm34199603f8f.26.2026.01.26.09.43.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 09:43:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769449423; x=1770054223; 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=sJSsgywQO/rHQ4WoDlmS1OtrkxPJkG9kKCFHbCDdYFU=; b=JdicvjEeXkLTOLt80rTcO/X343dVA8IGjHa10nTKkwXsVT4aXiuNsfJ3cy8Uut7ajz po7GMT/00z2kmZxgdtTW+Mu60LoeJI8H4XISoEhBOEbLOGMg8IXmRIY4464jcMk9lN4F 7aW4C2j6+DxZRhhZg1hQp1EtP+O8rev1q51N/YUGLdJgNsS0PlCU3d4gSDTn59bkTj9D 7SHDef/TEt7OKragI5vKF6ZhokdzoolP43fHxe7St6jaTP+geFRPmyKX2U+4zM3yNA1K jsFXycoW+g141cl1GB1Ih7X8v3hDMBzSwrJnL0RUd27ZmRaffuIs6QM0RZcVyGbIAnwG TyRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769449423; x=1770054223; 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=sJSsgywQO/rHQ4WoDlmS1OtrkxPJkG9kKCFHbCDdYFU=; b=lDgKlJMSgHRrhv0Au6yvo9gMyBwL3f4IRVh2Yi3JKUHXR1CQT2eCkZdjSp1Zfg1T/t ux3VTms3Qsswk0MWVj1RxNb4WR53W0v8dHb8Epppu2U3BQQTPrZFSWhbt+qAM02Vpcih K8/H8iKva0ozPuwyewPN7wAOjHb0wev/buX3k9Q1HgoLHV6ycw/1QGVevFjdJgZnqaWe lPAkG2zjJIzCcrMT5wd0Q/+okldGa1t3WxW3wxv5rhiD90XI+jbMe3YzkW2esT3Nu9pf sc19+4nIgOE6GlLApyD8yQorXq25JQQOw6tsHozsi+No+4uNCBBhZh5pNQeIjjkwSh5w 5kkw== X-Gm-Message-State: AOJu0Yw1rOC7YQYIgtzU29pH1KZVm8wkajR2VzlY+ZjtDcmM1prmP/oL yE6GOToF90GkYrCarqVjDUBbhIa1KI+F/ERG/mCfNa47uSFS65tXn8pKV/wdqD78 X-Gm-Gg: AZuq6aJQxTAACOVyAyK4bWm9L0xok4q6534FlMczfDiJ+ZPE+1rrY0wVx8fuxC2m2eW s+KPp99ABVnf51mjKLqPVoc0DGFxoP02qrFGg1w5kkTI64QNyyesNhXywB/NDvlQ3G+ErOuplgk bCD+pYptZgpm2KFQpvdXNWRJtEdHWGD4Sl2sSyh6mGtnL1razqu/WeD/U6mDkE+v9Rc31Cisyz2 E1bsj5bjmri+ZeLO7+FXk3UB1OAyBcgnbIerxdBf0THQqMAqjnZ62Nhmi5nBr/y9r//tXtvdbxU mbcPAbum9UDiP6Tv4ZZmBFTJtGIpQCMMzHb0rBD4xO7Em12rD8PUijTXg+BHvn2O5qpaBlxc4zO j7O4JPG1xF9Gd+tqNv2k/rtG0NcP4ju1TGeDuSnmdoelD4Rfd4ulwnoSCT7eyFl+REztr2PaMH+ tQxYUYHzf5ceRyJnS4b8BLGFzq8KxYz/qQR28ToR1debskT7gbCG6UPTEMWrRTv28S X-Received: by 2002:a05:600c:6217:b0:480:46c6:bf4b with SMTP id 5b1f17b1804b1-4805ce3f9d2mr80383655e9.5.1769449422934; Mon, 26 Jan 2026 09:43:42 -0800 (PST) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.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 Subject: [PATCH 19/27] hw/arm: add generic ARM machine initialized by FDT Date: Mon, 26 Jan 2026 18:43:05 +0100 Message-ID: <20260126174313.1418150-20-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260126174313.1418150-1-ruslichenko.r@gmail.com> References: <20260126174313.1418150-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::335; envelope-from=ruslichenko.r@gmail.com; helo=mail-wm1-x335.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: 1769449913824154100 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 | 166 +++++++++++++++++++++++++++++++++++++++ hw/arm/meson.build | 2 + 2 files changed, 168 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..d3912745c7 --- /dev/null +++ b/hw/arm/arm_generic_fdt.c @@ -0,0 +1,166 @@ +// 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/loader.h" +#include "hw/core/hw-error.h" +#include "qapi/error.h" +#include "hw/block/flash.h" +#include "qemu/error-report.h" +#include "qemu/log.h" +#include "qemu/config-file.h" +#include "qemu/option.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 GENERAL_MACHINE_NAME "arm-generic-fdt" + +#define QTEST_RUNNING (qtest_enabled() && qtest_driver()) + +#define SMP_BOOT_ADDR 0xfffffff0 +/* Meaningless, but keeps arm boot happy */ +#define SMP_BOOTREG_ADDR 0xfffffffc + +static struct arm_boot_info arm_generic_fdt_binfo =3D {}; + +typedef struct { + ram_addr_t ram_kernel_base; + ram_addr_t ram_kernel_size; +} memory_info; + +static memory_info init_memory(void *fdt, ram_addr_t ram_size) +{ + FDTMachineInfo *fdti; + char node_path[DT_PATH_LENGTH]; + MemoryRegion *mem_area; + memory_info kernel_info; + Error *errp =3D NULL; + + /* Find a memory node or add new one if needed */ + while (qemu_devtree_get_node_by_name(fdt, node_path, "memory")) { + qemu_fdt_add_subnode(fdt, "/memory@0"); + qemu_fdt_setprop_cells(fdt, "/memory@0", "reg", 0, ram_size); + } + + if (!qemu_fdt_getprop(fdt, "/memory", "compatible", NULL, 0, NULL)) { + qemu_fdt_setprop_string(fdt, "/memory", "compatible", + "qemu:memory-region"); + qemu_fdt_setprop_cells(fdt, "/memory", "qemu,ram", 1); + } + + /* Instantiate peripherals from the FDT. */ + fdti =3D fdt_generic_create_machine(fdt, NULL); + + mem_area =3D MEMORY_REGION(object_resolve_path(node_path, NULL)); + + /* + * Look for the optional kernel-base prop. If not found fallback to + * start of memory. + */ + kernel_info.ram_kernel_base =3D qemu_fdt_getprop_sized_cell(fdt, "/", + "kernel-base", 0, 2, &errp); + if (errp) { + kernel_info.ram_kernel_base =3D object_property_get_int(OBJECT(mem= _area), + "addr", NULL= ); + } + + kernel_info.ram_kernel_size =3D object_property_get_int(OBJECT(mem_are= a), + "size", NULL); + + if (kernel_info.ram_kernel_size =3D=3D -1) { + kernel_info.ram_kernel_size =3D ram_size; + } + + fdt_init_destroy_fdti(fdti); + + return kernel_info; +} + +static void arm_generic_fdt_init(MachineState *machine) +{ + void *fdt =3D NULL, *sw_fdt =3D NULL; + int fdt_size, sw_fdt_size; + const char *dtb_arg, *hw_dtb_arg; + memory_info kernel_info; + + dtb_arg =3D machine->dtb; + hw_dtb_arg =3D machine->hw_dtb; + if (!dtb_arg && !hw_dtb_arg) { + 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; + } + + /* Software dtb is always the -dtb arg */ + if (dtb_arg) { + sw_fdt =3D load_device_tree(dtb_arg, &sw_fdt_size); + if (!sw_fdt) { + error_report("Error: Unable to load Device Tree %s", dtb_arg); + exit(1); + } + } + + /* If the user provided a -hw-dtb, use it as the hw description. */ + if (hw_dtb_arg) { + fdt =3D load_device_tree(hw_dtb_arg, &fdt_size); + if (!fdt) { + error_report("Error: Unable to load Device Tree %s", hw_dtb_ar= g); + exit(1); + } + } else if (sw_fdt) { + fdt =3D sw_fdt; + fdt_size =3D sw_fdt_size; + } + + kernel_info =3D init_memory(fdt, machine->ram_size); + + arm_generic_fdt_binfo.ram_size =3D kernel_info.ram_kernel_size; + arm_generic_fdt_binfo.kernel_filename =3D machine->kernel_filename; + arm_generic_fdt_binfo.kernel_cmdline =3D machine->kernel_cmdline; + arm_generic_fdt_binfo.initrd_filename =3D machine->initrd_filename; + arm_generic_fdt_binfo.smp_loader_start =3D SMP_BOOT_ADDR; + arm_generic_fdt_binfo.smp_bootreg_addr =3D SMP_BOOTREG_ADDR; + arm_generic_fdt_binfo.board_id =3D 0xd32; + arm_generic_fdt_binfo.loader_start =3D kernel_info.ram_kernel_base; + arm_generic_fdt_binfo.psci_conduit =3D QEMU_PSCI_CONDUIT_SMC; + + if (machine->kernel_filename) { + arm_load_kernel(ARM_CPU(first_cpu), machine, &arm_generic_fdt_binf= o); + } + + return; +} + +static void arm_generic_fdt_machine_init(MachineClass *mc) +{ + 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 64; +} + +DEFINE_MACHINE_ARM("arm-generic-fdt", arm_generic_fdt_machine_init) diff --git a/hw/arm/meson.build b/hw/arm/meson.build index aeaf654790..e606630c86 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 Feb 7 05:49:48 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=1769449787; cv=none; d=zohomail.com; s=zohoarc; b=fa6zzM2dUj3DKLfvt680Vgc4GFTStiWlFrBxXxEV0LbDZTPI3l/rAntIpOBOFcBJaogRhHLZowqfSoRZV5cAIVUeEAu8mPfi07kmKJUwvePxq+96CrUbeY3kxfm8ynVxPGpyZ3uuyEUyWPu4E5wvg1jH9nulhdRtYB00YhSI9gA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769449787; 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=JJEifHHcY6zyIyg63G3jOH9d2RBoIqFqFu3XNC4NaD8SuKYGhlOfioof6mqAQEzxc/BoQSg5wSCTd6/9ZC+bnkOtS3IUQ7pu6gN08+zXzp7X/2A3hW0fOnoAneIEP8Ji+5Zh6P6oiGUezpvsfSkc1AWnuKiYeySLoxxUaT+bQN4= 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 1769449787351174.41516234587107; Mon, 26 Jan 2026 09:49:47 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkQdC-0001iW-Ri; Mon, 26 Jan 2026 12:44:06 -0500 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 1vkQct-0001RL-Oq for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:48 -0500 Received: from mail-wm1-x344.google.com ([2a00:1450:4864:20::344]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkQcs-0000A9-98 for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:47 -0500 Received: by mail-wm1-x344.google.com with SMTP id 5b1f17b1804b1-47ee76e8656so70306045e9.0 for ; Mon, 26 Jan 2026 09:43:45 -0800 (PST) Received: from thinkpad-t470s.. (93-143-71-105.adsl.net.t-com.hr. [93.143.71.105]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-435b1e71730sm34199603f8f.26.2026.01.26.09.43.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 09:43:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769449424; x=1770054224; 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=OMCAOIK0ufcvL1qsQcOmgl56LB+hIrU31dZi+GI0AtMdoK5PdXE9ajnzUwNEtLzTk+ fvgS4QFzkGy/oaBuCbZD8N18WA+BunY6UdEfKkG16wrL2qt6lHEQi1DVdOp03+JMUZlk 0RUQ6z5K8/OH5CeHUcraniaIjxWg4VJBX3YjfZx+QViW+hAyHiGDF7LYfDTYrZMl3jlk XU0ZQ3r5ZjNUCVVMCalZ5FV7uhS0ZdEtvxgB4mPt1gYNqdPXJzM9NQPf7jbU4ziCv2LF gGJNQinqao2itZAdJ5xiapuqE/vwQtWXADSeRf+Wk4enPNvLHDywxPfdyDkpVgnvPLsY GIuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769449424; x=1770054224; 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=o++2dSH2HDTQDyD33BbHIBkVgV/UFP5psTPCaq/vxOHR5bSDMgH8F2K23SMZKZ/BI+ H9+8Mk2vA0BxAaW92dBw3hc2wV5QlIZvrAQsRr5DZKuJnVmj/3We/7fBmUlBZI3NZfoa WmLzIxS04GGPECpJiQIsRhP1LDaVXNJ/0aESrVjtWyqmcW6xonESkJjWrsOeT7dCsZwd FKVIQx5RbeOjhZ/1mq+Dwy+j2QdvUXPpv+uiaJ5ZN9BphbkR7WJfLO3Wdsdid5dSZooj h9lwrIG7hO53KE3/y2pA0EfscWRtFSGwkB/QIkhuO+AQU/9uwwtqIpaQq8OGH9icZbAE iciQ== X-Gm-Message-State: AOJu0YzvLt1RFoQBmVEIvXdngi+kupKpjKxkYoJUx/E68m0ZDYJjr4IJ pSQ9V5phwwb9lD4dYzHKV74cpt2LaDD4IhngHMpFirhbCrJa04Wl7sDs5BqbJSeMORM= X-Gm-Gg: AZuq6aIVKkuq0j9WgbIEtLrxiq88xFjLeQrtbJnKe2GLD8fsaZu8Wp/dZO7iFfs23+g SBx6uLMP8D6JIitPPMisJ9IJdDEUnUIAVNjr+60VkoW09B0N67/w6h72cZTmdV8PfRiTXEead2s BwT3hGTvcNLaJnTp9Qvwy3OE2CX4G9rFW3wUBYjHUOayqdeju+AhQRVxBtQEypITV3FcMPG6xIs d9niv6xcKV0Lh7mByghcYkq+EJWhSvKobX7NZbD5NS3hyFsP3g7E8JlKY/je/iJnWfqPsSO9Js6 15NLgOQoiQazVxe22WpO2jifXcdjtLuN3ZoTX6VRXKSdTimi0ND8GQfRJoHgKkrBoc/aSVnr9IO RUcXXh0rKdLFvSIo9fFMzZN1mJTL98jPH75N9fNUeLjrQUJcMSTCTnNGVG8v7YjyCVI3o0yY8Sl 2kzpPldOsX8G+DKX32+NFylx+nO5no+6st+4IpbHgdxPPcuqFjsT7Zdg== X-Received: by 2002:a05:600c:b86:b0:475:e067:f23d with SMTP id 5b1f17b1804b1-4805d0643d0mr87738005e9.25.1769449423937; Mon, 26 Jan 2026 09:43:43 -0800 (PST) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.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, Eduardo Habkost , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Subject: [PATCH 20/27] hw/core/sysbus: implement FDT_GENERIC_MMAP_CLASS interface Date: Mon, 26 Jan 2026 18:43:06 +0100 Message-ID: <20260126174313.1418150-21-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260126174313.1418150-1-ruslichenko.r@gmail.com> References: <20260126174313.1418150-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::344; envelope-from=ruslichenko.r@gmail.com; helo=mail-wm1-x344.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: 1769449789299158500 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 Feb 7 05:49:48 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=1769449861; cv=none; d=zohomail.com; s=zohoarc; b=Nzl3/QCufzDCduNi0NyLYR9qi2hHkF/4b6y5Nk74Bgk9MMs/ENB4ZEWEwMam950G/rAeSaKvu9N8/a6qx183Md9Y9xrtDi+4E0e6GXsmY/wiNNMxl5sRfA5kzy2cRffCnGBa/mX5nXfuFL4uWn18k8wveSbY9DX1qtNzSgvgRo4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769449861; 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=zaQNJ8ctjloGg8ogNJ9hZj1p+S+3oUkMGg8iiDuQ6N8=; b=Sz/guPpzrJWdT3NKRjvnAlK/3Ad5/GLvtQt3ssPM5jzT5p20on2nUnLVwP3cwbKq2TBgh6hOlGGzt2eT4rAca6LvCJ+GSryvflaPwC9Pw6ra3JwI0KTlByop1lJ/uS1uiLTA2BxI0SSquKOow3eN6PY80Hdr8+pY2KRCtOED55k= 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 1769449861446805.1783302518935; Mon, 26 Jan 2026 09:51:01 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkQdB-0001gh-5C; Mon, 26 Jan 2026 12:44:05 -0500 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 1vkQd6-0001bm-IX for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:44:00 -0500 Received: from mail-lf1-x12e.google.com ([2a00:1450:4864:20::12e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkQd4-0000JS-TS for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:44:00 -0500 Received: by mail-lf1-x12e.google.com with SMTP id 2adb3069b0e04-59dd22b9895so5659522e87.0 for ; Mon, 26 Jan 2026 09:43:58 -0800 (PST) Received: from thinkpad-t470s.. (93-143-71-105.adsl.net.t-com.hr. [93.143.71.105]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-435b1e71730sm34199603f8f.26.2026.01.26.09.43.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 09:43:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769449437; x=1770054237; 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=zaQNJ8ctjloGg8ogNJ9hZj1p+S+3oUkMGg8iiDuQ6N8=; b=T2EYVwtQNlACE2qCoIhUAVnSSfIETnW0nm+m0urTgzTgKWHEMIftsYSF5CYlX/H8iZ TtyYxqoZqtmG0zY/hdwSe/piu6tuBtp7QAE7K6AjcENPD+k/o6yQL7k7QpNPsFCTIz85 eaBvQ0V5J4gET099wgc55fdw2Pb0GMu2c95//QlvK+fL6itMvy8RF1iTCwObsbot5Mj5 LjJdpl39LSOafc4owtMYFbi5EdzOTsQsvB84FQY+mxi0i5XAP3hIkKu4O//1guqMlCfM xRRtzvTigReYex2uKFLCas3oK8ds97r91HMEVsiWMjQXyYw0V8qCbIuA5ns5rxQQIlhr c1lA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769449437; x=1770054237; 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=zaQNJ8ctjloGg8ogNJ9hZj1p+S+3oUkMGg8iiDuQ6N8=; b=FS3QO3KNDbaRSUuChcq8t7U0eMMqIZgkvTxDaJqjGKIIwF8mtYJJKfG+I6717MaL2F MkmPe3dJ5Bl3vnewdJ6INUyun4XNt8HmFa7QT9MQJea8x25QQfBZUIbW4L8Rf0xjgYGu hLJTUPeV88ILkjhhBfgpjCTOMMy5XCivFLluwvO0U2HODtSCwl9hhM5Lma69LnbqwNNh 5UxzLaGgj2n7MysoWmMUimZ2PJ/MZKrVYnckbWINfaDilWekAHYhR7TMDr9SZNVwRO2b xaWY9DMyECFlfVvN3Z9lpJsJgPGA8oEAMhAzY8oUz/Lh3oM2K180DzITqEOGaBoWopLN 87IA== X-Gm-Message-State: AOJu0YyESDGiQMwzm4j9A3DpoVn6suhqwgUfXIcB/TxooCYyb2Ig821l TiuTbCp5lGxceU+mvh43QUfC5DOwzEPnN0kTer81ppqN+Qe7Eks5vvR103cufSY+ X-Gm-Gg: AZuq6aLLg36mUUEKULRpfXLKLr26EQdSHIDYb71RdirOX95U9iSRESOcU0+o40kYAD0 29Q5aiJHXmxfi95N7UJ6d8KZKBn+J9N7TwQF5/+j+MGmso+h+0N/HpCDkf8JI8NP4tUCH0ISD5Y hRp8s0iBm3kZklXBKMSB1ng3+XYkZffRnAWFRqhVMAgf3U/WIXjpJxS41sLOaLYFsB9LYYooO1Y rKGBcRS0mjW80x3brNs3j3DWzthqpi+/+TcQb9cy+paZTBAFS1FVgvTPcl6imRbOrkYdL55do1j Gqkp2wMZNQIVxVetNe2IC3mE/gjVjj+PT/8Zm2ahjbLcqNl92tQYZEcZjnXsT1TsjdzsiX50ckB ih5ZNlM/794JJHaCvLP7Q+7m7MExbEVThsB0q8O3gDl7ZB6WQisVOvDR+NrrFK79nk/dk+iz0QO EtqfOObf48paGWiBLo6KP9oq59NB2h/iQHb+TTD/RF13zGMHYave4SAA== X-Received: by 2002:a05:600c:474e:b0:47d:6c36:a125 with SMTP id 5b1f17b1804b1-4805ce57334mr79494285e9.17.1769449425260; Mon, 26 Jan 2026 09:43:45 -0800 (PST) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.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 Subject: [PATCH 21/27] hw/intc/arm_gic: implement FDT_GENERIC_INTC and fdt support Date: Mon, 26 Jan 2026 18:43:07 +0100 Message-ID: <20260126174313.1418150-22-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260126174313.1418150-1-ruslichenko.r@gmail.com> References: <20260126174313.1418150-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::12e; envelope-from=ruslichenko.r@gmail.com; helo=mail-lf1-x12e.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: 1769449863011154100 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..2be44d8e5b 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 current_machine->smp.cpus; + 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 Feb 7 05:49:48 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=1769449588; cv=none; d=zohomail.com; s=zohoarc; b=bNwXDubc6RiE0Ijg63bJNrzWTxIirPs4jJ6xgA3sFn0wJSJXqTMLm3RBFpeAVBYG9z7zq0Xg3BhTxJOz5bIclaL/LHt93z731ya0XQoREmo7x1nGYsychKgOf/NZ/NF6yCUJDPDkGHZAauRa1dB3BFvqBzGTqc0zEfc9Fz0m51M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769449588; 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=0HThoZ4BzoXW1z+LSYKEUiv5+qqmWVhCSi3lu7EloCo=; b=dWwA+UX6NeCLGWhYXsajiNDkqG78YzU5arQl5/PAGu1S6n2E+ktXXrBaHJX7E3q7R0pGzep39SO64Z8r0ZjA6JA6wcUj1+hpOWtIn/aYXKkSAyG5SwZ7LqGqIjo/tq/6YnagkvmunTsj5ALZ85/isKTzQ7qYMKyhYOTAYCDF3lA= 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 1769449588243547.7099608504295; Mon, 26 Jan 2026 09:46:28 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkQd6-0001bL-70; Mon, 26 Jan 2026 12:44:00 -0500 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 1vkQcv-0001Sv-Mp for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:50 -0500 Received: from mail-wm1-x335.google.com ([2a00:1450:4864:20::335]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkQcu-0000BM-4N for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:49 -0500 Received: by mail-wm1-x335.google.com with SMTP id 5b1f17b1804b1-47f5c2283b6so36332915e9.1 for ; Mon, 26 Jan 2026 09:43:47 -0800 (PST) Received: from thinkpad-t470s.. (93-143-71-105.adsl.net.t-com.hr. [93.143.71.105]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-435b1e71730sm34199603f8f.26.2026.01.26.09.43.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 09:43:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769449426; x=1770054226; 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=0HThoZ4BzoXW1z+LSYKEUiv5+qqmWVhCSi3lu7EloCo=; b=ciG/geELFPSVC+YhrtsHNCbdcFw4XKBqBd1hGHw67vYpo7RbbubdB+GdOU0FKTP0RL 8c0bnApAq+65K9iv+pVW6PY3xvikk5RJQeGl/T8tqxkygzQrSgufFgfxrg8qiOw9k9tK G5wqUK1TSy5v1kM673oeEPq5fvewCL7YlnB1VZGxLhp6Fi1+ro1Xio0sMEilYoeTFe2g egV0Kt5cvMyGSGjTTl01yYUjuzRT0HTskAyeNNgXKSF9ogVGT353DcGLiNmMYpT69qlK jbCt9dAR/O5ljNR+i1QayEPzXvF+5QpLdkBc4d2bSDBASbY/9d0gMkgvftUvIJQmkG0x UhDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769449426; x=1770054226; 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=0HThoZ4BzoXW1z+LSYKEUiv5+qqmWVhCSi3lu7EloCo=; b=W96G8YZF/vAJjqq5DoWdHklpyGzww5Urlk/QapuWAuYBd7VOATeSBcPsfczL+hU/wz WC6imWp8t4Ee6ltcQptazYgdxOtW1n/ksVh3yoKHMwzG1KlYe3xFO2G+wdY5gwcMNV13 bbABoM0mYS1xjT+X8JqSDBqeIwPIZdUqV0tUrKwjUU558ta++BPmS3t9lUxz5tz6ZRaH A1+fI4bCgqQasGO7ecmpXyULJpzLhOnAh3hHGRIyLqiNchqibftn6WzaxrDG++UTuy2i xpN4mJg9HnLl1fWulu2/DFlKTUegA1a5OgSEmIPOASx8iMHMgaupLc12LhMyQuE7RH/S DjFQ== X-Gm-Message-State: AOJu0Yw76I8sJIblOb864495oa7Pbrons3a/8/XLc5U5cbzFqV0nVw/O I9ktiarxierjBYJc3HKdutEKpn01JsFUmCCCd80AjMxwD3BdDCO+EahUNIWVcZZQ X-Gm-Gg: AZuq6aKmrEUt0hUT7iWXOP/c+2cDTeP6eihC0aaNtr56ADweUCg/0eiCfqOlRyQJOhU cY/THohyKH9aq4/ymgyv7PUrLYLQXyuSeIkPANTQXLSHv8lcL4lsFVLUIe7PCUQoHFhboCN2Wct jh0368cEi7sv/kaT9iuwTCur6TAoyDFtPzSiUpEt+UOWdU93pyVDWQJ2Nsxy1LcPBX883XfBoz0 c9RBBTvpo2GJMDQ3bsuX3VxTzfUnTX8HDF2Q4qQ9tVfa8fEtZXH0sd2lxOVzIMZHyP0Gq1TTm28 hhEJgFQeWKk3EPTXWln/eOvi7gy2qctW9QklU7qWBGCGhP92Y55QYo8zkXr9tkQw8hbfVQD7cTa YLPEyOIEpEoEDJ1HDjYfM1BbyLIzVNhKsFVj5CTdMfEQ/6g6nBFwPF0qPxidx4c7ZIHOG3V3EE6 p898o6sNZG9VtHiHIH8ad7Iippyyhsxnl8VxPX+ocYZwzCph9qtVg6jQ== X-Received: by 2002:a05:600c:3b93:b0:477:af8d:203a with SMTP id 5b1f17b1804b1-4805d064549mr82656675e9.27.1769449426465; Mon, 26 Jan 2026 09:43:46 -0800 (PST) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.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 Subject: [PATCH 22/27] target/arm/cpu: add fdt support for armv8-timer Date: Mon, 26 Jan 2026 18:43:08 +0100 Message-ID: <20260126174313.1418150-23-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260126174313.1418150-1-ruslichenko.r@gmail.com> References: <20260126174313.1418150-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::335; envelope-from=ruslichenko.r@gmail.com; helo=mail-wm1-x335.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: 1769449591288154100 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 | 115 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) diff --git a/target/arm/cpu.c b/target/arm/cpu.c index 6e1cbf3d61..96696ed4f1 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -53,6 +53,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) { @@ -2446,3 +2448,116 @@ 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(fdti->fdt, node_path, + "interrupt-parent", + 0, true, &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; + bool map_mode =3D false; + 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, &map_mode); + ns_irqs =3D fdt_get_irq(fdti, node_path, 1, &map_mode); + v_irqs =3D fdt_get_irq(fdti, node_path, 2, &map_mode); + h_irqs =3D fdt_get_irq(fdti, node_path, 3, &map_mode); + } else { + ns_irqs =3D fdt_get_irq(fdti, node_path, 0, &map_mode); + v_irqs =3D fdt_get_irq(fdti, node_path, 1, &map_mode); + h_irqs =3D fdt_get_irq(fdti, node_path, 2, &map_mode); + } + + assert(!map_mode); /* not supported for PPI */ + + 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 Feb 7 05:49:48 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=1769449834; cv=none; d=zohomail.com; s=zohoarc; b=Ryd8JAzrvHM9xR2xBWEJb8tS/0g/JSilTO+cRVZtMGoPIWkYfaHcSQhEYBRDvrOemn2Ke99/zUMuEz2+3bkJpYJ8CyRGDdGllXNbodkjkRhNL0NtokxWvKgMrNNSW5KE0WPi7YneFdrVBK9xamwW63mcAVEN9xCYxIsyGZp830A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769449834; 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=NaDo3A3AFKxg6BGWJ2CCM6OWF3bW/f1H47xuviVGQryfyGFt5VIrt0e89Lp4nKIfCWLLQnE+Wy79I/SXJos6QTnWcskm76APZHNSqN5/YzEfY43/dtUuv8NHbkYOmmJijORfl4/ULai7lsTb2PHKOBzXvCaOkl8j+e+1BN2re7w= 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 1769449834311791.4113716978165; Mon, 26 Jan 2026 09:50:34 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkQd9-0001ek-0l; Mon, 26 Jan 2026 12:44:03 -0500 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 1vkQcw-0001TX-Qs for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:51 -0500 Received: from mail-wr1-x42f.google.com ([2a00:1450:4864:20::42f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkQcv-0000D0-6f for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:50 -0500 Received: by mail-wr1-x42f.google.com with SMTP id ffacd0b85a97d-4359a16a400so4330958f8f.1 for ; Mon, 26 Jan 2026 09:43:48 -0800 (PST) Received: from thinkpad-t470s.. (93-143-71-105.adsl.net.t-com.hr. [93.143.71.105]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-435b1e71730sm34199603f8f.26.2026.01.26.09.43.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 09:43:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769449427; x=1770054227; 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=RD1p7pSQtxsmm05Y5K2AgKi9CFwid6MQa6Bpb18jz9uFTEyRTEF5IfTFv8liezM06X bEBiuIYwqmYbU8ASQESHdL0x3CuaktzQKPzac0QO12eQQBD6QtcxSfufazDz5IZ6jN5p bgCc4nmBttFPsQMhHtn47ftwEz0AHc75NpnnKl4iTAA8BzxsJm6OKBq2qzv4u1STjrek cH95AjwN/snGw64koD+aGMkKom0ImdlPS5ObWhqjGCQuJblkd5pZ/nJDh13QpDUm4iPT jb/jDIZs4InB7n8/dexfE6UNAwcS1xkHxRSzLUlHF6SX+mCVEVQdS1MPiAZ+AnCzrEAR kn8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769449428; x=1770054228; 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=bmPfSmXsdpD2VRvLK7W6m+R/d9h43Y2uPj7uSlJuz6xyYMKGk4XohCyFMdGMVaeiT2 j13h+B9JWK1eHKTWXTJetaOFGWlp8z4atLWIMVUdCsfAEPtCp3MKDVKYrAcbl+GRd0HJ CpyNIiy2KT7SNQ/d8GRHyRO5VxAeq0EYphT3F7LrcvZxWDnvGesp6SjLjHZd6u4ZPzbT Y96CoxAEneX1p6rncXBxhGITS5m7kXjkCu1aT+cBNfoGZr2Uuj/liHyCAjePc/AuY1Ng mnqLpd189huXn4G4YOz+n8HpYkKpWUDZXaImx93ldwOBKM0JWiPJI6aZWAGA57q4mYGE pfcQ== X-Gm-Message-State: AOJu0YxK43aqmJumOosjCzBwX21XviWqkrkFoyLmtnMAfzwktkBR0Zp1 x0doUnrGdLL5ivmlXQXW/aIfJJM+CQwDO0CDzPtfErXQ+rpkV6qjpi6vwokKUzJn X-Gm-Gg: AZuq6aJ+GGEX07EoHelE834DUImFmqQJhwmV2loEYuQYDO2ECQVNdgkdgbdsqIaHHEv xivsxObGj4/euSoNYFkcqZLdngxV6c4S+NUPzBnkC3ulIi+Yh28yAd3N+fB3/3gKjzJ1W9Ue50A ybzvptCpbpOplSp088KOn/hylLGT4USuCZxjRi2JIW3yBqlw9kyfMtESXE4EZ7O9ItchWYmg4ox I7NmSoxiFRTUTsvb0M7vgQHFSCp4Ob7WEqs/GLn5GPxSke6wFLXYu/h/CSIJwRU8z0nJG2hmpMQ zS1rGPkVfgcSr7vvNVA6Cpu/eOau/f+jV3VlTnNN4DZYmBVUlGI+TR3hbf/+v+7Kziyu/ApkMND gkEn8MXTK5d2fFyYfMPV3eOkpJxHZG93Fi8vBbKYH9kiq8fzalRNoY3bQpLvXXhFD9ULOyCg1N9 uvexVTUkZFR9wonHX6zL0gmIQY6/bks1QEiCFghRYmU9danKqNw40lvg== X-Received: by 2002:a05:6000:420e:b0:435:9ee1:f91a with SMTP id ffacd0b85a97d-435ca3a43c4mr9883719f8f.53.1769449427416; Mon, 26 Jan 2026 09:43:47 -0800 (PST) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.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, Eduardo Habkost , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Subject: [PATCH 23/27] qom/object: export object_resolve_link() Date: Mon, 26 Jan 2026 18:43:09 +0100 Message-ID: <20260126174313.1418150-24-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260126174313.1418150-1-ruslichenko.r@gmail.com> References: <20260126174313.1418150-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::42f; envelope-from=ruslichenko.r@gmail.com; helo=mail-wr1-x42f.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: 1769449835672158500 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 Feb 7 05:49:48 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=1769449593; cv=none; d=zohomail.com; s=zohoarc; b=RvfAC1NWnGpVVwC9NldtIj+bUmi2EVwF3pEDsOghsZCaLa2nfReGGP0REB7oS6/8cmydwA9mWdAAVwoMdP3evtGqAXCfuh5ei0lTx7gf8vroIpKlJTnPg9fTiyn+cpgE8yHO+an16HvobxIW5MM1YRWGfP35Lt3PjCPILYjbFVo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769449593; 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=Rs6OZbCjNekEZyKGP1riYjsv7cAl0YSLCjdr3zwLJfM=; b=bD5Ln5dy7jmGTNVmdwyZ54qakQUgCb3eNfsap0wKXAKzRsF3T8rj0ZHgJ9HHJIP5K+GPa3neui38YInmoI0evPpxb2Q5DZwr8ufsiK3HyUeGZvNakQn8uyfXiqV9U/anFhovT9sxV+JCWrAYSykeGdT6e4jDXu3bdquN0Zt9TSY= 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 1769449593882177.75908662899394; Mon, 26 Jan 2026 09:46:33 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkQd9-0001f9-ND; Mon, 26 Jan 2026 12:44:03 -0500 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 1vkQcy-0001UC-Bd for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:52 -0500 Received: from mail-wr1-x433.google.com ([2a00:1450:4864:20::433]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkQcw-0000EN-A7 for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:52 -0500 Received: by mail-wr1-x433.google.com with SMTP id ffacd0b85a97d-435903c4040so2927399f8f.3 for ; Mon, 26 Jan 2026 09:43:49 -0800 (PST) Received: from thinkpad-t470s.. (93-143-71-105.adsl.net.t-com.hr. [93.143.71.105]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-435b1e71730sm34199603f8f.26.2026.01.26.09.43.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 09:43:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769449429; x=1770054229; 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=Rs6OZbCjNekEZyKGP1riYjsv7cAl0YSLCjdr3zwLJfM=; b=SRZBOSfRUfHOwUjz2gGRdbjYqcCWwRXkk9gCzRbRUgrNIZ4waiX6WebLS4hlxeWAH9 /gfFluvLwX3k6bO2emN8Q9CyCHIfuFNNh+o/QTDh1GG1DRGS5TbSrmGAHTh7tGYqZFUv nwNvZIAaDOcPt/WJFCVkPWyUzzsN4PjH3xg7gab/n3NgMzKzPj1HvY0ixxmI2P5GmYp7 Fhfb+zbtMtk0HqWT/bTTGaH4ngiiVelMQ8iM8luVThwCnxdq8K2vMpENI5HbnltugvUs hQn60birWlh9BIrYHnznwfcWV6m5CU1aGRQdLt6HhnzlS//VexDkcrTYXYy1gjO+P+jY 2lcw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769449429; x=1770054229; 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=Rs6OZbCjNekEZyKGP1riYjsv7cAl0YSLCjdr3zwLJfM=; b=AANaTUTM479Z7pSL799G6Dz1J8gRn7Vn+8F/Gxgq7Mrod44SdXhWqrMP/aBYNkEvz5 Vx/LCx+TFG9b3C8nDSWv0ScXsp4Imrp7B9cY+CJ0y4eG5EWR7paDdVBvQ9JnvN6ik3pU 4WVcp7eJzOrqXiGcHiSuYFmSJGVDIKLJhjcyM9YialIA2uY1cEJJwahvQGb399B0y6Zi tpkrb4QxSP5ew0DrqVbVZMeKfYDE8rotXNU6Yi9xZM1lQ+K1lHNzMiEqK4tDfqkpetEK 4mNPIj4C1DCXpJ2EW2K9vimMywKUJwaETavb5zJOuhzSOayaJMLga4RPy6aoO4t2rPJ6 8F6Q== X-Gm-Message-State: AOJu0YxoSxGo4K7SmghQ7xlV738QmvB2Knj7aW6TrodIy2B2UN4EwYEA IP0yfaURJrDI1ekwj0XDX78AMHjqHpo2dDtsmld0g8WQP8xKppdiCIKcraokoFyb X-Gm-Gg: AZuq6aLi+GwZ+vlxD2ozEqF2MGgZU7uaUpJ+JDL9YUu7YAG5a5L/VrorOIeLkoFUNPm 2My8pY0CdZ9wzqpN9aYJsY5PhIeL/RMZTUfcK39qAnsQXhHKlpIotEkp0xD44oED17kyXtUMgPj FEfJkptCUhOFHdSaC2hE4au834O27KvZu3FEaAFRzp3UmQjdMi5wMpLOhBdsIW2JvSZM+/RP1fh y3cmFoKN9YE1i7Ntfh9aunVuYx7R/uIok+1+geDQeZHVng0Tc9cFHarpjGzPB5mc8Fd8wuq2FJk llc/g5QCJcIb+Sylwd3cIToGcqYzt63r9aBOr6nD/KkREIucIPhoCHphKLHOiKFcyguBXpW0nSd JFhsgdElKQ81l0dX1wL6RRYuC7ONiAhkILU216Y74sn4pQFxKulcKsbYW2bahWDeP0tkeymWBuk jQOcgeu9P4LXOkumqpw0tlgBhuxig0xqI9GVCf8FVMcfyp9aHi2E+hpQ== X-Received: by 2002:a05:6000:22c4:b0:430:f463:b6ae with SMTP id ffacd0b85a97d-435ca1ae140mr9940306f8f.53.1769449428436; Mon, 26 Jan 2026 09:43:48 -0800 (PST) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.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, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH 24/27] system/memory: add setters for MemoryRegion properties Date: Mon, 26 Jan 2026 18:43:10 +0100 Message-ID: <20260126174313.1418150-25-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260126174313.1418150-1-ruslichenko.r@gmail.com> References: <20260126174313.1418150-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::433; envelope-from=ruslichenko.r@gmail.com; helo=mail-wr1-x433.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: 1769449594501158500 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 | 166 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 161 insertions(+), 5 deletions(-) diff --git a/system/memory.c b/system/memory.c index 4bf00d82bc..a683af525a 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) @@ -1285,6 +1355,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 +1428,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 +1456,25 @@ 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(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 @@ -2751,6 +2904,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 Feb 7 05:49:48 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=1769449479; cv=none; d=zohomail.com; s=zohoarc; b=M+QZGIaHUo0Cb3RTRM8eNglxGJ0rVKGmopgar6rt89VcF4GEGAF5wtehFIGWojhCRyaML2MeXDWnuPNEwjzCyNKQ8izZc8Uh3OlN3nvp3HG40FUMgkvK8z+n3abdoCJOLUbB0RQLrZMjLmYMk92AFAK1Gu+uXIXNvPWVRTpdL+U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769449479; 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=3f/R3DyEyYJjykoOvhSgMY2C3lcLS3L+Ir44GNyL2FU=; b=k5xboLgP2c/McxNoL8c2DOkaKG94kf1QgxVJTLWXyYD0pcC0f3QyJxzt9Xk3A3jL2kH+jC/G3/w/+lGge1bS0tzKgnh1F5/PojOLK/qx9c1FCOdBeTLkE4kJR+7KY4NLYCmHs/Yvu8j01K4rZ0tVRMyZTXkmCPRFuQDp3DIKlR8= 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 1769449479887832.091306161909; Mon, 26 Jan 2026 09:44:39 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkQdD-0001in-2V; Mon, 26 Jan 2026 12:44:07 -0500 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 1vkQcz-0001Uv-HS for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:54 -0500 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkQcx-0000Et-4Z for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:53 -0500 Received: by mail-wr1-x42c.google.com with SMTP id ffacd0b85a97d-42fb4eeb482so3255273f8f.0 for ; Mon, 26 Jan 2026 09:43:50 -0800 (PST) Received: from thinkpad-t470s.. (93-143-71-105.adsl.net.t-com.hr. [93.143.71.105]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-435b1e71730sm34199603f8f.26.2026.01.26.09.43.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 09:43:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769449429; x=1770054229; 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=3f/R3DyEyYJjykoOvhSgMY2C3lcLS3L+Ir44GNyL2FU=; b=O0W9D5qaTvIYVNOZ1dIXyiXMJ7S+d8VRNyy63Hv5DTrp60vLGcJqHz3a80NbdhCom8 zZNE/UWY58cJB7TDqZ5VPqpnW77sCRqEeAdAhOyLHUuH/48fKrfmBoeWnwF62NGS/nvv ysUl5ejLDyeFn/hLDacbyY2REAg1tNd6BCTl2kdRdGMTeWx1Wn18uEw04LlzSq5Wac4z 7x1u3Vh9pB+wJaS/v7yItTBdh7BR+1mtr5rT5V4/qVkhhhQ6/RJy0jE30XCfZdoekeVG KRg9Hz4s8cBgVl1fj9/8FwKAC3bRHIHodGoMZUFcxsjrs5amXsk3dHsUyVM5mS23XZar 36tQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769449429; x=1770054229; 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=3f/R3DyEyYJjykoOvhSgMY2C3lcLS3L+Ir44GNyL2FU=; b=ptTA17El4/jYdgUvKigvBtdr1bthdPTyFnbf192ON4skHgSFTidFnc9cbc9VMjFhG+ is2Kx7u5QrEp3fKGeRqgT7WET1h1EC2wb6UN9a3EfH3QOggDkJ4Meggawa4Xnx8sbGqw TBuIrAYIqtOoIKYLnDcG7HW5mO+iuvgRXO9XqECQrfciAAXEDzyIrEj3MHMOftiEq6zF 6x0ZX+LEXOcBEBIvzO7qNd52cumB9jXIe4WnTeRslCWkcfvAe2QQ6RL8D1iWYQa3Bl78 aYQdPE4sQ/2EBkArwqYWvvzSfLtVKxRr3qiR7CkQsRdNC+/uKG2oSqppkWeVXQvWpFTZ s/Sw== X-Gm-Message-State: AOJu0Yyw578vFL1fDwhIaaRW9Fa2XfGlQOftqkmn5qjidKm+D4WgU6RY ayq59UU2+sbfiH6/Ehx9SyaD9WEO5eXcOXLEtkC/tKRmOGM70YztL/hVSPqjZihe X-Gm-Gg: AZuq6aJlUyrM5fS1kKMji1GDBpkPg+6W4hjLnzv8kiDdliqIWnwpq7kxZcbzX3pYNV4 E+7f5AyO39OWg8fuQMJL7eHNjZ4+Hu+OIGetucQzuWh8nEQa5RObNms8th9gEc9Vo1vVzCuqcdD VCmeAJo/JeukG8X7jP6oaxJ8cmiqLMY8t+bmOOWf5QA9x1j6VuMpFXGKQ9FZYyTpBc8DyLGr98s byNHuYupMvb6aFZwsNLj+0THbplMMoswLBOrT8dlsUx+NCNg5bTNbTWeNwi1LZiFtkkHwgMgREk xIcTkeLP7GeG3G6AE8DmzKOEl4YjYcVKzhTWQnO1v+iiUcWtsJnrbwwGmpaJucQbUxCeiBNZtv4 IzYV3svx+Ef1YAxkUKfKWU7Q0CHbVTBntbs09CZEPhobvod9DuYnmPrAtJkd77CrGWKNfjkDJEK 3XNtE64JD6Ell7nOnzl8S/CdNYHoBRNPgAIbBQ3xCfHPIsnczwIAuy/2nadzZiwn5T X-Received: by 2002:a05:6000:2212:b0:430:f255:14b2 with SMTP id ffacd0b85a97d-435ca0f7a13mr8286844f8f.13.1769449429479; Mon, 26 Jan 2026 09:43:49 -0800 (PST) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.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, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH 25/27] system/memory: implement FDT_GENERIC_MMAP interface Date: Mon, 26 Jan 2026 18:43:11 +0100 Message-ID: <20260126174313.1418150-26-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260126174313.1418150-1-ruslichenko.r@gmail.com> References: <20260126174313.1418150-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::42c; envelope-from=ruslichenko.r@gmail.com; helo=mail-wr1-x42c.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: 1769449482179158500 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 a683af525a..866c741973 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; @@ -3749,6 +3751,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 { @@ -3994,6 +4047,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 Feb 7 05:49:48 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=1769449572; cv=none; d=zohomail.com; s=zohoarc; b=Lw9dS4fNLKtdYm/yaf9i2Kg8rziMkJ6Q1J3KiFWnb7RQn7UZKs1DCfo9oF8+BtJGYD2XTDm/sH9Pl72uo2Y5gOQ8BguTtOC+HXSBOYO0XovG9cWdGsAmHg2ymLNnypdTpXIDXVFEf5N+aWHKwlDHZrG8+KuCGZ+aRQdp3Fg0duI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769449572; 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=y1/ePB9LfA6lgNwZNwykzC9p7sr9jarFSpmO192awuI=; b=mW1sz4lnK2ydS1tUIPYBGgWxarbZwXHA/OmiNFUWs6yJfBd9pgd6yxR5Irx7ogPFQvbRcK0ZnFfBLz+0BaJ9k6hyQv2UAZ16wx1DG41Q9uKrk0pCR5ZC1vgO7bAkqWpSjh9FkxJVGXhwta1N/ZR6yXexu8qO+uDm1jq+BezV5Rg= 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 1769449572402268.62425072741905; Mon, 26 Jan 2026 09:46:12 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkQdF-0001kw-Fn; Mon, 26 Jan 2026 12:44:09 -0500 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 1vkQcz-0001Ux-R1 for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:54 -0500 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkQcy-0000FP-3w for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:53 -0500 Received: by mail-wr1-x429.google.com with SMTP id ffacd0b85a97d-432d28870ddso2489891f8f.3 for ; Mon, 26 Jan 2026 09:43:51 -0800 (PST) Received: from thinkpad-t470s.. (93-143-71-105.adsl.net.t-com.hr. [93.143.71.105]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-435b1e71730sm34199603f8f.26.2026.01.26.09.43.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 09:43:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769449430; x=1770054230; 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=y1/ePB9LfA6lgNwZNwykzC9p7sr9jarFSpmO192awuI=; b=jWQkI0GPYRAnUm/wX26ExOhLeemRTG3LtltfO+gLJrGOkHLFmdqK8vzZSlkhsyEMOv 3fNzBAdxXrROU2UB+jSy+maek7MTY6+xGaMBGgkagdpjJsh8SH2PPaPbTkEWAZSBPA5Z 8eGBhvFweFaV6ICRxXO2pTEAAAIXWLgg8EBqEUlIQp3ixSLBhO3jf2v7z3VGp+oUgM7E G5HW/Tqv0XIIElJFfoglT/1JWuggHy2PTY+stHJgjfLGLZmE+lh/PSqm0nDScrbDbywp NA8+IQYU06pg/kGzIZmnisuU1ayljmIImyoIBgifQlRbm3CRKygysVWsLlhnu8ZPfpv1 kGuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769449430; x=1770054230; 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=y1/ePB9LfA6lgNwZNwykzC9p7sr9jarFSpmO192awuI=; b=dn3oxPKUJ6tVIe6r2eFsB5pGS9VlqDfkd81WtPSp+FC9eq2InOPmZC1gEvwPt/Ke4i aGildLu8zRheSqBfCPFthypDjhF4Irf0MrJ903fvF07lYyLCiw4gsiDGzMDuauazBeBC V0g+bEf2NtzWra6q9/IEU9w9o9hDxfKN8ABYTa2BEGDrdaoKSpAmWjXnC0VaZdwxy+up 2Fwu/AXZxyb5PA7rC8xNLeb9fseCbofOcmymdBjlewLYc1nAwYbCsRxey8zEfq+GkRJZ LwXv2PZEpBHrMzMm4k2GBjpmv+pAJ9aQyk4sirzfbiG+Tlo7Hgm5vwOzl5klf9fQI1eJ nI0w== X-Gm-Message-State: AOJu0YyepAFHjSZ8ymi4oFSuQztY8klvRTX3np7N5ytBTCi+fOSWV//j WdpJBCkYfUIZtuHEGJJW/3HEb7WBoDxA+JdK1u6l5dPwIFYxrE8FpKtLYZXHk1j9 X-Gm-Gg: AZuq6aJkuUPKPoV85UtYlIfmn4hgPlk2jo3D36tDfNOVZhhARZGJoDhL64pJa24rvmM mTYSX+ICKSENowIgoEoZ1j4B8LvaLGIDfMXxb+udXfjGsbmdCx5jFkL6lnk3+9MZCU3l39iy1yq Mk4iOKQULFOxch74SjLc26lYgEMKe339Zb8EFijq2nnUFuxBAqxYZVGLyug1Z4HoWtIPfXk0sq5 ld5O2tCN9mDaV4OCpIusZxVnU226CVvQskL9+ofSkF4cMDvGLBp4/L6fN0NoVVjHtyT3vUtJgGP 1l5IrO5vA3OBKEGJkdSkzWrs4QT5mvxuh11s5tefpHJGYU46ToHsFh/cHG9OK9YrtJBRAvv9iWI a5kG8EaZit0n1pC11TVtSmC6KKzfSbJ0tWlNlGtSGgWkypKEdiVYp06gIwPa3ctNnECMTdzL3Wq dyHgRGs4+NR6QjpsiT2EkjN3C/fNuI97lOjVqLbDvSg4l7uQKGFGg1931OnhKikp8T X-Received: by 2002:a05:6000:4210:b0:435:9770:9eb6 with SMTP id ffacd0b85a97d-435ca39bf86mr9553465f8f.53.1769449430388; Mon, 26 Jan 2026 09:43:50 -0800 (PST) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.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 Subject: [PATCH 26/27] hw/core/fdt_generic_util: initialize serial devices Date: Mon, 26 Jan 2026 18:43:12 +0100 Message-ID: <20260126174313.1418150-27-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260126174313.1418150-1-ruslichenko.r@gmail.com> References: <20260126174313.1418150-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::429; envelope-from=ruslichenko.r@gmail.com; helo=mail-wr1-x429.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, 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: 1769449574373158500 Content-Type: text/plain; charset="utf-8" From: Ruslan Ruslichenko The patch adds proper handling and registration for serial devices instantiated via FDT. In specific, device's 'chardev' FDT properties are correctly set to their objects. Also devices with 'chardev' properties are connected to serial backends. Signed-off-by: Ruslan Ruslichenko --- hw/core/fdt_generic_util.c | 44 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/hw/core/fdt_generic_util.c b/hw/core/fdt_generic_util.c index 83ce5b3466..d183a44433 100644 --- a/hw/core/fdt_generic_util.c +++ b/hw/core/fdt_generic_util.c @@ -36,6 +36,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" @@ -68,6 +69,7 @@ #include =20 static int fdt_generic_num_cpus; +static int fdt_serial_ports; =20 static int simple_bus_fdt_init(char *bus_node_path, FDTMachineInfo *fdti); =20 @@ -175,6 +177,8 @@ FDTMachineInfo *fdt_generic_create_machine(void *fdt, q= emu_irq *cpu_irq) =20 fdti->irq_base =3D cpu_irq; =20 + fdt_serial_ports =3D 0; + /* parse the device tree */ if (!qemu_devtree_get_root_node(fdt, node_path)) { memory_region_transaction_begin(); @@ -1096,6 +1100,8 @@ static int fdt_init_qdev(char *node_path, FDTMachineI= nfo *fdti, char *compat) props =3D qemu_devtree_get_props(fdti->fdt, node_path); for (prop =3D props; prop->name; prop++) { const char *propname =3D trim_vendor(prop->name); + int len =3D prop->len; + void *val =3D prop->value; ObjectProperty *p =3D NULL; =20 p =3D object_property_find(OBJECT(dev), propname); @@ -1112,6 +1118,27 @@ static int fdt_init_qdev(char *node_path, FDTMachine= Info *fdti, char *compat) continue; } =20 + /* Special case for chardevs. It's an ordered list of strings. */ + if (!strcmp(propname, "chardev") && !strcmp(p->type, "str")) { + const char *chardev =3D val; + const char *chardevs_end =3D chardev + len; + + assert(errp =3D=3D NULL); + while (chardev < chardevs_end) { + object_property_set_str(OBJECT(dev), propname, + (const char *)chardev, &errp); + if (!errp) { + fprintf(stderr, "set property %s to %s\n", propname, + chardev); + break; + } + chardev +=3D strlen(chardev) + 1; + errp =3D NULL; + } + assert(errp =3D=3D NULL); + continue; + } + fdt_init_qdev_scalar_prop(OBJECT(dev), p, fdti, node_path, prop); } =20 @@ -1119,6 +1146,23 @@ static int fdt_init_qdev(char *node_path, FDTMachine= Info *fdti, char *compat) const char *short_name =3D qemu_devtree_get_node_name(fdti->fdt, node_path); =20 + /* Connect chardev if we can */ + if (serial_hd(fdt_serial_ports)) { + Chardev *value =3D (Chardev *) serial_hd(fdt_serial_ports); + char *chardev; + + /* Check if the device already has a chardev. */ + chardev =3D object_property_get_str(dev, "chardev", &errp); + if (!errp && !strcmp(chardev, "")) { + object_property_set_str(dev, "chardev", value->label, &err= p); + if (!errp) { + /* It worked, the device is a charecter device */ + fdt_serial_ports++; + } + } + errp =3D NULL; + } + /* Regular TYPE_DEVICE houskeeping */ DB_PRINT_NP(0, "Short naming node: %s\n", short_name); (DEVICE(dev))->id =3D g_strdup(short_name); --=20 2.43.0 From nobody Sat Feb 7 05:49:48 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=1769449719; cv=none; d=zohomail.com; s=zohoarc; b=OZs7HT6Fp1dujnnUiow2OWLTeWAI83y9hfWwEz0lDjaUseHCciLQJGQd7bmt09lKZdmjpdqm9ZQ88mRGpL7qdt9kF1rNudwUCP+tCOw9Wn4xsiX3F8B9h+b40vazIKnXsV/hwzNdfUVlSf0c4zq3+0ccHJRmfAo79UfQ8KfJurg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769449719; 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=wlscyxPY8xEICFQvh9NAzy5egnUtRHu9+/Su9mVanbI=; b=mefhhkrzC9sMyy8aoHLpmiAaNEgB1k1s7OoyEnQH2OB8kP1+btgCni1/0RiNg1M8l6Jl8FrczcsMmP3MfNdJ+cdrpnp/VWESRyxv59OBguC++flQGJArnC9lfYJbO1mTsqk7xWtJg0F4filM0aM9yao6G5ezh5zEYzcVvYn72dM= 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 1769449719101654.43633184352; Mon, 26 Jan 2026 09:48:39 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vkQdA-0001fr-HA; Mon, 26 Jan 2026 12:44:04 -0500 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 1vkQd0-0001Vr-H2 for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:54 -0500 Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vkQcz-0000Gr-2j for qemu-devel@nongnu.org; Mon, 26 Jan 2026 12:43:54 -0500 Received: by mail-wr1-x431.google.com with SMTP id ffacd0b85a97d-42fb2314f52so2766756f8f.0 for ; Mon, 26 Jan 2026 09:43:52 -0800 (PST) Received: from thinkpad-t470s.. (93-143-71-105.adsl.net.t-com.hr. [93.143.71.105]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-435b1e71730sm34199603f8f.26.2026.01.26.09.43.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 09:43:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769449431; x=1770054231; 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=wlscyxPY8xEICFQvh9NAzy5egnUtRHu9+/Su9mVanbI=; b=TJpz6NMXyAjDxSjdJOZpFlTVhfmvHIFsagDsvI46hDPLvMceA/AZAaRAdQNqSTQeVL 1MRcpUtznLUEuvwQcnceMhoV8jnLCeLEhKhCxf1TZbTqY/V9Xmc0KeBA4Owh73cW0+27 4cZjzZQ6OHzUJjKKkR6lF0H1zOvqJ+458nz8KrMq/Z2vmoLD391sRNhUuS2DLsxwvAwj CN9lj2hqYw0N0jpOxyemGcm7+5fnZEoVaOq8NEI2wzSBDE3wKrIqn2GYe70cGAboq/nY 7CSVX3IC1G9WI23wMA/0G02xxfFc/otZMogNNbJ1ME2UzWuyvGx0oW9QgJZS/Kfik+kU YI4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769449431; x=1770054231; 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=wlscyxPY8xEICFQvh9NAzy5egnUtRHu9+/Su9mVanbI=; b=O0pOSCGxAcQoTVWmzFR27Bnroxg3EKv8gwVha8oZWdP2fZCKYSv/UpAUomA+sQVUSo gJayZiOxlUygcQIH/y2e0A5jqXVdKsv9ikf5Fc01P/YeQHeotW0WrAS9ry7ACa1W6EaV TdMq/S5MYv6XFUbddFU7H/VwZmQyul7JY34hkSxBzB1HgYqYdcHTrG3sfWuH1tgIpMGf KRRE25+YCCkkN3IR5utypEnWtWoMh48j/YBCbmRuTfLPQNk5UfpmGgw8wVtyAamDw4eO wkx4L0qKxRkp/SSACBIZEh+gdRZnR9tUWNaVHWEJdv55TuTG8xxJZ+eyDZnXNQHmVbq3 fl2g== X-Gm-Message-State: AOJu0Yxx00tHGgb5OmbsHQpSfXhhyyQfBPxGzO7riAqAwx8TnI7YhM+E VzCH1WWmFFgW/s55eJplAjDNqhp41B0tUZ4HAeVRLa5LYY6QfglLVZCY3fm0xbz5 X-Gm-Gg: AZuq6aJF3S6HJ2jdwBvP4QCED9lUYhHFfht9kinEsPyco1Qi9+hFe4r+SqRmo3UGd64 4lgoSwbmEtOcMUHGpRgbTX7nWB6AGo6+AKX7U8F3Yf+fSoSdznCN478/6j2PCM8KZixXNX2/StV D4N5Rz59nnOSlCZvsKow2eRupIVF5snm0qExhoZbyIXyxR7DTm0Kg4kwFTLtkBJagjKAdw7Zzhr zjjxq9S6SDd6b8TwWUPrEDQbW4SeXNQ2frw9hTr2RWLR5WBbTVUWqhlFEoLGixjg7RUEX6PXXlD /jZt0QKMH9+F9sBVomSluYCE3FlfC99CfLfofPBY9PXe5gpYHdfZITjkGuVcQeX21TU4FdGJC4D ApTOACG3uE5SoluNN4NZM2OQgabjVDqaY0goUk6zPPl9lDnnB/M8FqwMtsSXS16FccjsRHl5Pi8 rFmvtxm+jiiXTXj/Ios3Tr/Y3vwAWx0ccAX6tnZTjky7HOF+4xhEfmZuc9Ap/k5R4x X-Received: by 2002:a5d:5850:0:b0:435:a258:76e with SMTP id ffacd0b85a97d-435ca3a93d0mr8805063f8f.60.1769449431352; Mon, 26 Jan 2026 09:43:51 -0800 (PST) From: Ruslan Ruslichenko To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.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, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH 27/27] system/memory: add QOM aliases for fdt support Date: Mon, 26 Jan 2026 18:43:13 +0100 Message-ID: <20260126174313.1418150-28-ruslichenko.r@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260126174313.1418150-1-ruslichenko.r@gmail.com> References: <20260126174313.1418150-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::431; envelope-from=ruslichenko.r@gmail.com; helo=mail-wr1-x431.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: 1769449721166154100 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. Also 'qemu-memory-region' types can be used to create new memory regions. Signed-off-by: Ruslan Ruslichenko --- system/memory.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/system/memory.c b/system/memory.c index 866c741973..867228922b 100644 --- a/system/memory.c +++ b/system/memory.c @@ -4077,3 +4077,27 @@ static void memory_register_types(void) } =20 type_init(memory_register_types) + +static int sysmem_fdt_init(char *node_path, FDTMachineInfo *fdti, + void *priv) +{ + fdt_init_set_opaque(fdti, node_path, OBJECT(get_system_memory())); + return 0; +} + +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" = }, +}; + +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