{"id":2198215,"url":"http://patchwork.ozlabs.org/api/1.0/patches/2198215/?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-3-ruslichenko.r@gmail.com>","date":"2026-02-19T14:48:49","name":"[v2,21/33] hw/core/sysbus: implement FDT_GENERIC_MMAP_CLASS interface","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"aebb689868f78bded35952815045cb9daca75b3e","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-3-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/2198215/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=K/w290nK;\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 4fGxCT5b64z1xpl\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 20 Feb 2026 01:51:17 +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 1vt5MG-0003xS-B7; Thu, 19 Feb 2026 09:50:24 -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 1vt5Lr-0003l7-1S\n for qemu-devel@nongnu.org; Thu, 19 Feb 2026 09:50:06 -0500","from mail-wr1-x443.google.com ([2a00:1450:4864:20::443])\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 1vt5Lj-000839-1A\n for qemu-devel@nongnu.org; Thu, 19 Feb 2026 09:49:56 -0500","by mail-wr1-x443.google.com with SMTP id\n ffacd0b85a97d-436e8758b91so812340f8f.0\n for <qemu-devel@nongnu.org>; Thu, 19 Feb 2026 06:49:44 -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.41\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Thu, 19 Feb 2026 06:49:42 -0800 (PST)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=gmail.com; s=20230601; t=1771512583; x=1772117383; 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=7XwGSsZ5E+pHUCrk55JcghHWJX/O0i4AExLwj5l49n4=;\n b=K/w290nKKKt1soKtvxdJyH+R6S/vaw/eVDjuDvTc7uPW+NnN1yzP8DK71HipO30dF2\n O+npBL/5VYVv1lt+w6A6MlaxYCY37pTR0ATiYaDWwufS+7fgRVCH0ikOVZKn6PpJe2aK\n wkX5RnyLIaDv+GmlM4c1YrFv8EKOA8y9bKP3+8QsQqO1SlbPZzQke5RnqNkZnfFeTkBo\n dBhUHqwXa3zHKN1pWa7RrXoE2pevIMwSTcYENOMxfrW+A5CxElAdEDMmQsU0vQe2cf+i\n rkWXTZK8jipGStR9y8Wv8PK7LMWGYbWEZssxlzHXAHVTmTd+tKBCxc8fd8VGof4Gnj+8\n TYEw==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20230601; t=1771512583; x=1772117383;\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=7XwGSsZ5E+pHUCrk55JcghHWJX/O0i4AExLwj5l49n4=;\n b=Sq3IcRZCLhIZW1cB9GE/KnxdL57iHBPOUK3Pd0unXUtdJ4eevalPBRNNOpiPumYNYI\n KXM9YX5R+6irtGf7hhRQXkLKziDnHqa4QpSqKmODEKS+Cj00lQlLcRSkAWLv/Kt4c6t1\n ilIDbAH1yIrrLXMCQG9uAOIM7xn6ZTUdkTy9xfbA1oPciwVmiS3qz0B4VMfpb5Oie5G/\n WPwaP2G2/0ugMAnkgymYuzWrr1gSjENK65lSmXbgu4n7xtLsqOQvYFYkA0joUzs047Ku\n nY+9Eh2QIl6z32zSiAZMwdWULZ6K1OlNrHAJ/CuUivFMNdowJWj9F6PgDdV8JShfdxri\n 9PXg==","X-Gm-Message-State":"AOJu0YyJEW52StEgcpUlR+zkOMh/aw7iyOjqMxHgC7PMIgOjZVHK6RHQ\n Wpm0tiMpd9IJTvMQdb0NEYkq/jsOHO1H2x9Zh2Omgi9AXLL3E52i5xu2aCB+qMXN7pE=","X-Gm-Gg":"AZuq6aKxpk4dVFzqYlwEioYdAGTE3BjvIJpPMwPgV+40J721M3dkKF4LxXAw9Wx6lzs\n 4GlkSaGOzNNfUIfJHMRmPvGu+p3iuC+gqMYVJ/tw+/n82YulnkbF+GpC56CqEufBPQIQ3QUhFBm\n WQ6oSWI1oMghXTngWoA2++n+lBQdg1Q+WF+nbr/TFWvgHfGgktM0pGdW5AKroRSsW+sGj5PgSWs\n YB6DlL3dmLqGFc/1jQqCWbxn7ys1PA6n0uQHuk18rEfd8GMkTskmaQ20MObSx5RlLQNJo7kKWT7\n 3aVHWsNG4Gr3Da2kCGaKCeBEzqjBTrlap9AgYDVbBXa+h5q6AFPlICmfbdoUQjPQVAxK+dF8GdV\n XXXDEGLEchxVNuL8NZt6kdYhi5Mez13X2nOkuP87C0RYjOKxLxGvDS9yOiOqMIavRKpLn4K7Vnx\n 1pTG22WXThfZLkTWu4pVUViH+80oK23GuLqxT2RduokHJPr/i+Cjo/69aHZcgRdXPMRbWw","X-Received":"by 2002:a05:6000:178f:b0:435:92d3:d9b4 with SMTP id\n ffacd0b85a97d-4379db6483dmr36012522f8f.26.1771512582570;\n Thu, 19 Feb 2026 06:49:42 -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?Daniel_P=2E_Berrang=C3=A9?= <berrange@redhat.com>,\n Eduardo Habkost <eduardo@habkost.net>","Subject":"[PATCH v2 21/33] hw/core/sysbus: implement FDT_GENERIC_MMAP_CLASS\n interface","Date":"Thu, 19 Feb 2026 15:48:49 +0100","Message-ID":"<20260219144901.3317747-3-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::443;\n envelope-from=ruslichenko.r@gmail.com; helo=mail-wr1-x443.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 FDTGenericMMap interface for sysbus\ndevice class. The implementation maps device's MMIO regions\nbased on 'reg' property in the Device tree.\n\nThis enables automatic memory mapping for the most QEMU\nperipherals without the need of device-specific FDT\nhandling code.\n\nSigned-off-by: Ruslan Ruslichenko <Ruslan_Ruslichenko@epam.com>\n---\n hw/core/sysbus.c | 28 ++++++++++++++++++++++++++++\n 1 file changed, 28 insertions(+)","diff":"diff --git a/hw/core/sysbus.c b/hw/core/sysbus.c\nindex 3adf2f2faf..78b7827708 100644\n--- a/hw/core/sysbus.c\n+++ b/hw/core/sysbus.c\n@@ -23,6 +23,8 @@\n #include \"monitor/monitor.h\"\n #include \"system/address-spaces.h\"\n \n+#include \"hw/core/fdt_generic_util.h\"\n+\n static void sysbus_dev_print(Monitor *mon, DeviceState *dev, int indent);\n static char *sysbus_get_fw_dev_path(DeviceState *dev);\n \n@@ -291,11 +293,32 @@ static char *sysbus_get_fw_dev_path(DeviceState *dev)\n     return g_strdup(qdev_fw_name(dev));\n }\n \n+static bool sysbus_parse_reg(FDTGenericMMap *obj, FDTGenericRegPropInfo reg,\n+                             Error **errp)\n+{\n+    int i;\n+\n+    for (i = 0; i < reg.n; ++i) {\n+        MemoryRegion *mr_parent = (MemoryRegion *)\n+            object_dynamic_cast(reg.parents[i], TYPE_MEMORY_REGION);\n+        if (!mr_parent) {\n+            /* evil */\n+            mr_parent = get_system_memory();\n+        }\n+        memory_region_add_subregion_overlap(mr_parent, reg.a[i],\n+                                 sysbus_mmio_get_region(SYS_BUS_DEVICE(obj), i),\n+                                 reg.p[i]);\n+    }\n+    return false;\n+}\n+\n static void sysbus_device_class_init(ObjectClass *klass, const void *data)\n {\n     DeviceClass *k = DEVICE_CLASS(klass);\n+    FDTGenericMMapClass *fmc = FDT_GENERIC_MMAP_CLASS(klass);\n     k->realize = sysbus_device_realize;\n     k->bus_type = TYPE_SYSTEM_BUS;\n+    fmc->parse_reg = sysbus_parse_reg;\n     /*\n      * device_add plugs devices into a suitable bus.  For \"real\" buses,\n      * that actually connects the device.  For sysbus, the connections\n@@ -354,6 +377,11 @@ static const TypeInfo sysbus_types[] = {\n         .abstract       = true,\n         .class_size     = sizeof(SysBusDeviceClass),\n         .class_init     = sysbus_device_class_init,\n+        .interfaces = (InterfaceInfo[]) {\n+        { TYPE_FDT_GENERIC_MMAP },\n+        { },\n+    },\n+\n     },\n     {\n         .name           = TYPE_DYNAMIC_SYS_BUS_DEVICE,\n","prefixes":["v2","21/33"]}