{"id":2198218,"url":"http://patchwork.ozlabs.org/api/1.0/patches/2198218/?format=json","project":{"id":14,"url":"http://patchwork.ozlabs.org/api/1.0/projects/14/?format=json","name":"QEMU Development","link_name":"qemu-devel","list_id":"qemu-devel.nongnu.org","list_email":"qemu-devel@nongnu.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20260219144901.3317747-8-ruslichenko.r@gmail.com>","date":"2026-02-19T14:48:54","name":"[v2,26/33] system/memory: implement FDT_GENERIC_MMAP interface","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"345cd28c4febd874b14ee3cca201e4a30b53786d","submitter":{"id":92275,"url":"http://patchwork.ozlabs.org/api/1.0/people/92275/?format=json","name":"Ruslan Ruslichenko","email":"ruslichenko.r@gmail.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20260219144901.3317747-8-ruslichenko.r@gmail.com/mbox/","series":[{"id":492690,"url":"http://patchwork.ozlabs.org/api/1.0/series/492690/?format=json","date":"2026-02-19T14:33:04","name":"hw/arm: Introduce generic FDT-driven machine","version":2,"mbox":"http://patchwork.ozlabs.org/series/492690/mbox/"}],"check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2198218/checks/","tags":{},"headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256\n header.s=20230601 header.b=SNO87mJr;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from lists.gnu.org (lists.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fGxDQ2cszz1xpl\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 20 Feb 2026 01:52:06 +1100 (AEDT)","from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1vt5MM-00043H-EF; Thu, 19 Feb 2026 09:50:30 -0500","from eggs.gnu.org ([2001:470:142:3::10])\n by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <ruslichenko.r@gmail.com>)\n id 1vt5M6-0003mV-Lx\n for qemu-devel@nongnu.org; Thu, 19 Feb 2026 09:50:19 -0500","from mail-wr1-x42b.google.com ([2a00:1450:4864:20::42b])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <ruslichenko.r@gmail.com>)\n id 1vt5M1-00084a-Ip\n for qemu-devel@nongnu.org; Thu, 19 Feb 2026 09:50:13 -0500","by mail-wr1-x42b.google.com with SMTP id\n ffacd0b85a97d-4362d4050c1so1024455f8f.2\n for <qemu-devel@nongnu.org>; Thu, 19 Feb 2026 06:49:51 -0800 (PST)","from thinkpad-t470s.. (93-143-129-182.adsl.net.t-com.hr.\n [93.143.129.182]) by smtp.googlemail.com with ESMTPSA id\n ffacd0b85a97d-43796ac8d82sm50163087f8f.31.2026.02.19.06.49.48\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Thu, 19 Feb 2026 06:49:49 -0800 (PST)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=gmail.com; s=20230601; t=1771512590; x=1772117390; darn=nongnu.org;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:from:to:cc:subject:date\n :message-id:reply-to;\n bh=4pZISeQmIvegKoRTYoESdyMYYIAKgWJJGLkjR5mmgVc=;\n b=SNO87mJr2PCx+2yplju7dFPeoYf92wV+JZsETzLoLiTWHnGMz1VdxXH4aQGG2qOYHe\n me8q0ym0JLwwNOfWVyOwmrO54/hckLY06BOahST9CegrOpNbECfuEHes93Qy6h+fesgu\n dFBzowT6oFH45aQPw0adcowvWJf5EL8lohpexzGE4QK7vwenNcofmEPe1PSsA27ONdlZ\n dP5jERflBzw2CSt4rCI2YyOs0ExvskIHFhNqC/v8hf5IrI9WiPHdWAaq1CAeUCJQ3HQz\n rxxI01eiLRH6zBGUNQbkLkIgCa7pDL3bASRJKYEAggmhunyJYWXa1slXOmqLh35YK3os\n Qu+Q==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20230601; t=1771512590; x=1772117390;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from\n :to:cc:subject:date:message-id:reply-to;\n bh=4pZISeQmIvegKoRTYoESdyMYYIAKgWJJGLkjR5mmgVc=;\n b=oj6K+DFDETq86MF/KbQZ8AKpMxvbmSquoulUm/+KnCyePXiDXk7aQ3owr8O3S5YWzI\n aYnqdKU2mcaJ5i8O/6/YJOuxOwqS4rcshQS10oDIPC1luSCp7w8uDGpUcLhGoKV6dLGr\n 8kzHAWjQx7KklT3cu+/ODML2j/+TfrNItIIW71XbVTNhAnLeLm5MJnvRYDhd2Vp8/v0e\n /LeaPEwndMA9rsg1c3itfTx5QFkCDeihZVbuK4PUdFXadHCP3SAQz4Ep3vzbgmfi+pw8\n u1ClCVKK9E9p4sOP9bCKUT19CWP8a0+hkUmc3zFlS19BEdCDcct7M+pJJa4fYCMnTMIo\n rBKA==","X-Gm-Message-State":"AOJu0YyE1q/NRR+kttohrBd+TO8rClUtvy8csC3kLyANtOVkZj+M48J2\n vkeD216Bf1Yw+GR517C2DHzkso+YxPBGaJzYgxaKUVQHFjAJaHzuF3U1aFjL0Ha8","X-Gm-Gg":"AZuq6aKfHgYYoytJ5zct1sQdd56apP6C/Zq25cu9+XpANomIjs9Few6yjvUZMTrFSJ2\n rn8QiJ1k0WCNy/3/NhJ96R4U7AIjGPq+8UAG27jBLtKB8Lh+Rhl/Q210qu0FqSSwvVaZV+XkUMh\n gWg/m8khT6IeVq6L6VGyN4IOsLaknPK51kLeauVm2IjktaI7SWvet78oJurEnSq5OqkdmgbCB1o\n HB4GAVoz7f7d7NfiVnAGb4ykxVLYmw2eDKboapW20h8Eok+OzccxEvxgmaQdPRTCxTDi+BuzWQq\n RGrgn83y7eQTsBpYCe2dnzguE8FrKjZg0g5YLMPfWbtL41Wxu34q0q6yg3/22u/OdnD0o4I6oGz\n oxP9unZNlD0VBFUHK6iDZi66pZLPYEhjCTWQc9393hlVEgTAGESpXpfn0jvchIkV3SNUDSnS+bJ\n rUDT2Vg8xxZM5vJjliRx9PUhw2hYUbC7c5NH4ztVx6QJg6XtQmP2pilbdmrXP0fuleuelX","X-Received":"by 2002:a05:6000:1aca:b0:437:7221:67fd with SMTP id\n ffacd0b85a97d-437978c99f0mr40731455f8f.11.1771512590068;\n Thu, 19 Feb 2026 06:49:50 -0800 (PST)","From":"Ruslan Ruslichenko <ruslichenko.r@gmail.com>","To":"qemu-devel@nongnu.org","Cc":"qemu-arm@nongnu.org, alex.bennee@linaro.org, peter.maydell@linaro.org,\n artem_mygaiev@epam.com, volodymyr_babchuk@epam.com,\n takahiro.nakata.wr@renesas.com,\n \"Edgar E . Iglesias\" <edgar.iglesias@gmail.com>, Ruslan_Ruslichenko@epam.com,\n balaton@eik.bme.hu,\n =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= <philmd@linaro.org>","Subject":"[PATCH v2 26/33] system/memory: implement FDT_GENERIC_MMAP interface","Date":"Thu, 19 Feb 2026 15:48:54 +0100","Message-ID":"<20260219144901.3317747-8-ruslichenko.r@gmail.com>","X-Mailer":"git-send-email 2.43.0","In-Reply-To":"<20260219144901.3317747-1-ruslichenko.r@gmail.com>","References":"<20260219143332.3316679-1-ruslichenko.r@gmail.com>\n <20260219144901.3317747-1-ruslichenko.r@gmail.com>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","Received-SPF":"pass client-ip=2a00:1450:4864:20::42b;\n 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,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001,\n RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,\n 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 <qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<https://lists.nongnu.org/archive/html/qemu-devel>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"},"content":"From: Ruslan Ruslichenko <Ruslan_Ruslichenko@epam.com>\n\nThe patch implements TYPE_FDT_GENERIC_MMAP interface\nfor the MemoryRegion class.\n\nThis enables memory region objects to be automatically\nconstructed by FDT parser based on the 'reg' property\nin the Device tree. The implementation parses register\ntuples and set base address, size and priority properties.\n\nOptionally parent container can be set of newly created\nmemory region.\n\nSigned-off-by: Ruslan Ruslichenko <Ruslan_Ruslichenko@epam.com>\n---\n system/memory.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++\n 1 file changed, 58 insertions(+)","diff":"diff --git a/system/memory.c b/system/memory.c\nindex fc1f6cff0c..81e6846c60 100644\n--- a/system/memory.c\n+++ b/system/memory.c\n@@ -38,6 +38,8 @@\n \n #include \"memory-internal.h\"\n \n+#include \"hw/core/fdt_generic_util.h\"\n+\n //#define DEBUG_UNASSIGNED\n \n static unsigned memory_region_transaction_depth;\n@@ -3783,6 +3785,57 @@ static gboolean mtree_info_flatview_free(gpointer key, gpointer value,\n     return true;\n }\n \n+static bool memory_region_parse_reg(FDTGenericMMap *obj,\n+    FDTGenericRegPropInfo reg, Error **errp)\n+{\n+    MemoryRegion *mr = MEMORY_REGION(obj);\n+    uint64_t base_addr = ~0ull;\n+    uint64_t total_size = 0;\n+    uint64_t max_addr = 0;\n+    int i;\n+\n+    if (!reg.n) {\n+        return false;\n+    }\n+\n+    for (i = 0; i < reg.n; ++i) {\n+        base_addr = MIN(base_addr, reg.a[i]);\n+        max_addr = MAX(max_addr, reg.a[i] + reg.s[i]);\n+        total_size += reg.s[i];\n+        if (reg.p[i] != reg.p[0]) {\n+            error_setg(errp, \"FDT generic memory parser does not support\"\n+                       \"mixed priorities\");\n+            return false;\n+        }\n+    }\n+\n+    if (total_size != max_addr - base_addr) {\n+        error_setg(errp, \"FDT generic memory parse does not \"\n+        \"spport discontiguous or overlapping memory regions\");\n+        return false;\n+    }\n+\n+    /*\n+     * FIXME: parent should not be optional but we need to implement\n+     * reg-extended in kernel before we can do things properly\n+     */\n+    if (reg.parents[0]) {\n+        object_property_set_link(OBJECT(mr), \"container\", reg.parents[0],\n+                                 &error_abort);\n+    }\n+    object_property_set_int(OBJECT(mr), \"size\", total_size, &error_abort);\n+    object_property_set_int(OBJECT(mr), \"addr\", base_addr, &error_abort);\n+    object_property_set_int(OBJECT(mr), \"priority\", reg.p[0], &error_abort);\n+    return false;\n+}\n+\n+static void memory_region_class_init(ObjectClass *oc, const void *data)\n+{\n+    FDTGenericMMapClass *fmc = FDT_GENERIC_MMAP_CLASS(oc);\n+\n+    fmc->parse_reg = memory_region_parse_reg;\n+}\n+\n static void mtree_info_flatview(bool dispatch_tree, bool owner)\n {\n     struct FlatViewInfo fvi = {\n@@ -4037,6 +4090,11 @@ static const TypeInfo memory_region_info = {\n     .instance_size      = sizeof(MemoryRegion),\n     .instance_init      = memory_region_initfn,\n     .instance_finalize  = memory_region_finalize,\n+    .class_init         = memory_region_class_init,\n+    .interfaces         = (InterfaceInfo[]) {\n+        { TYPE_FDT_GENERIC_MMAP },\n+        { },\n+    },\n };\n \n static const TypeInfo iommu_memory_region_info = {\n","prefixes":["v2","26/33"]}