From nobody Fri Oct 23 14:18:31 2026 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4jB4r82VvQz6x49Y for ; Fri, 23 Oct 2026 14:18:32 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 4jB4r81YHtz4KdN for ; Fri, 23 Oct 2026 14:18:32 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1792765112; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=jJN2CnwZcgQgPyhxhVoa9UgHuJPce2rpxzxexbFqgOA=; b=gopNiSnsgpxrGM3SXm2chmqIZVXkiZ+UfDHzry30EzVq2gSuskWVGKtTHmMyQEtSw15L+u WzWO98i3/R3ohfcu1T6CHEbLzBKC0usUaDj1NU9TR1/D4aeOY3rXk0CFgB8CMELrj1icp2 Yz/hvAhx+m/YqKSCpYELSokWbOBIo5MQlNFQUHuQHrObylRDYsLnFGhQm1wrS/6NEkinII Ed6Yb0jK7XsXH0HGrBJY0PUZx0GtAkeQ5VwytfiIuU+gMX2JgAiUiQswIMgRfocBg8wdKs VJ52krCujrf+YlTTtpoTkthd7lUEyvPh5XF4H+ZJObar6WuoEAUyzpOZkOT/dg== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1792765112; b=xugLlG+liMnqNZaAPtdKf7XSkU5bhq9hHWDeWkNBEbLU8h3PxaXf2/a7eTrh3viJZ7xBy/ i5Z5F9Wld94S+ZCjh/Iy1AKdLvF+lc4r+ECs9rLA/qXwIO8+vnZD8IW1PO6AXa1mqlDF/w M1jUjPuUrE7GlbmZGqkk4NXo/xCZbvSEldg7eEMqOR8snyGShG01rBEHSgC9LyZ3al7/dA b4cErkItR7uFMAZd5QiOUEUDI8tRJf3pBgCR2UA3TRJC9XvOItcx4eiRqviWtaT26bT+TU DvCV6RCFP5FCk9LVqe8/Llqy32JsHCt3+XIGpJG2dPiuXXdUu7PRoX40c4hTuw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1792765112; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=jJN2CnwZcgQgPyhxhVoa9UgHuJPce2rpxzxexbFqgOA=; b=KVLtom8nYWo7MId6QN3au7xPd0zbMB+9IIP5HxLRvs2HxNsLkeNu6w0WKERaESWRfJmIUJ DSyts11GZOf+iPIt308sN+RpUx9KKLoFd6IrzlCpIlVqU2di6dY0BhATTvo4rF0nM8p9nM pbwDvpNgokExpj+j6uNXq7zjo5FihGm3EKPz41Ly2nEcBxmIu7Ovs7Kn+ftUuY1ic/bWdZ Femm+++JXDREA2OsUuvaG+xipqyqfR4yh7N90+NPy/75clQm+Gj/EJstLZmjL5pWo/wW8i eVWQN07YJy1UJfxITQnB6qNhvSE3vNCnPv4r4oTSsDuQLHM5tTVvsHMeWUtrzA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4jB4r76r2bzYYL for ; Fri, 23 Oct 2026 14:18:31 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 2426b by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 23 Oct 2026 14:18:31 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Michal Meloun Subject: git: ffcd78861eda - main - fdt: Support SCMI shared memory under reserved-memory nodes List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: Commit messages for the main branch of the src repository List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: mmel X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: ffcd78861eda41d5ff00a39120f46dbbe8f814b5 Auto-Submitted: auto-generated Date: Fri, 23 Oct 2026 14:18:31 +0000 Message-Id: <6adb6cb7.2426b.67749d31@gitrepo.freebsd.org> The branch main has been updated by mmel: URL: https://cgit.FreeBSD.org/src/commit/?id=ffcd78861eda41d5ff00a39120f46dbbe8f814b5 commit ffcd78861eda41d5ff00a39120f46dbbe8f814b5 Author: Michal Meloun AuthorDate: 2025-12-06 16:50:36 +0000 Commit: Michal Meloun CommitDate: 2026-10-23 14:08:31 +0000 fdt: Support SCMI shared memory under reserved-memory nodes Add a simplebus-based pseudo-bus that matches the "reserved-memory" node in the device tree. Update the SCMI shared memory driver so that it can attach either as a child of mmio_sram or directly under simplebus (via the new reserved-memory bus). Make the mmio_sram memory resource shareable so both attachment methods can coexist when required. MFC after: 1 week Reviewed by: manu --- sys/conf/files | 1 + sys/dev/fdt/fdt_reserved_memory.c | 80 +++++++++++++++++++++++++++++++++++++++ sys/dev/firmware/arm/scmi_shmem.c | 43 ++++++++------------- sys/dev/sram/mmio_sram.c | 2 +- 4 files changed, 98 insertions(+), 28 deletions(-) diff --git a/sys/conf/files b/sys/conf/files index d74bd0b0f648..c3b8e8288745 100644 --- a/sys/conf/files +++ b/sys/conf/files @@ -1739,6 +1739,7 @@ dev/fdt/fdt_clock_if.m optional fdt fdt_clock dev/fdt/fdt_common.c optional fdt dev/fdt/fdt_pinctrl.c optional fdt fdt_pinctrl dev/fdt/fdt_pinctrl_if.m optional fdt fdt_pinctrl +dev/fdt/fdt_reserved_memory.c optional fdt dev/fdt/fdt_slicer.c optional fdt cfi | fdt mx25l | fdt n25q | fdt at45d dev/fdt/fdt_static_dtb.S optional fdt fdt_dtb_static \ dependency "${FDT_DTS_FILE:T:R}.dtb" diff --git a/sys/dev/fdt/fdt_reserved_memory.c b/sys/dev/fdt/fdt_reserved_memory.c new file mode 100644 index 000000000000..604d536330a2 --- /dev/null +++ b/sys/dev/fdt/fdt_reserved_memory.c @@ -0,0 +1,80 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2018 Rubicon Communications, LLC (Netgate) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ + +#include +#include +#include +#include +#include + +#include + +#include + +static int +fdt_reserved_memory_probe(device_t dev) +{ + char *name; + phandle_t node; + int rv; + + node = ofw_bus_get_node(dev); + if (node == -1) + return (ENXIO); + + if (!OF_hasprop(node, "ranges")) + return (ENXIO); + + rv = OF_getprop_alloc(node, "name", (void **)&name); + if (rv == -1) + return (ENXIO); + + rv = strcmp(name, "reserved-memory"); + free(name, M_OFWPROP); + if (rv != 0) + return (ENXIO); + + device_set_desc(dev, "Reserved memory pseudo-bus"); + + return (BUS_PROBE_GENERIC); +} + +static device_method_t fdt_reserved_memory_methods[] = { + + /* Device interface */ + DEVMETHOD(device_probe, fdt_reserved_memory_probe), + + DEVMETHOD_END +}; + +DEFINE_CLASS_1(fdt_reserved_memory, fdt_reserved_memory_driver, + fdt_reserved_memory_methods, 0, simplebus_driver); + +EARLY_DRIVER_MODULE(fdt_reserved_memory, simplebus, fdt_reserved_memory_driver, + 0, 0, BUS_PASS_BUS); +MODULE_VERSION(fdt_reserved_memory, 1); diff --git a/sys/dev/firmware/arm/scmi_shmem.c b/sys/dev/firmware/arm/scmi_shmem.c index 32c260c8a9ad..c807ec49028f 100644 --- a/sys/dev/firmware/arm/scmi_shmem.c +++ b/sys/dev/firmware/arm/scmi_shmem.c @@ -32,19 +32,17 @@ #include #include #include -#include +#include #include -#include #include #include +#include #include #include #include -#include "mmio_sram_if.h" - #include "scmi_shmem.h" #include "scmi.h" @@ -53,7 +51,7 @@ struct shmem_softc { device_t dev; - device_t parent; + struct resource *res; int reg; int inflight; }; @@ -88,19 +86,16 @@ shmem_attach(device_t dev) { struct shmem_softc *sc; phandle_t node; - int reg; + int rid; + node = ofw_bus_get_node(dev); sc = device_get_softc(dev); sc->dev = dev; - sc->parent = device_get_parent(dev); - node = ofw_bus_get_node(dev); - if (node == -1) - return (ENXIO); + rid = 0; + sc->res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, + RF_ACTIVE | RF_SHAREABLE); - OF_getencprop(node, "reg", ®, sizeof(reg)); - - sc->reg = reg; atomic_store_rel_int(&sc->inflight, INFLIGHT_NONE); OF_device_register_xref(OF_xref_from_node(node), dev); @@ -111,7 +106,10 @@ shmem_attach(device_t dev) static int shmem_detach(device_t dev) { + struct shmem_softc *sc; + sc = device_get_softc(dev); + bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->res); return (0); } @@ -119,15 +117,9 @@ static void scmi_shmem_read(device_t dev, bus_size_t offset, void *buf, bus_size_t len) { struct shmem_softc *sc; - uint8_t *addr; - int i; sc = device_get_softc(dev); - - addr = (uint8_t *)buf; - - for (i = 0; i < len; i++) - addr[i] = MMIO_SRAM_READ_1(sc->parent, sc->reg + offset + i); + bus_read_region_1(sc->res, offset, buf, len); } static void @@ -135,15 +127,10 @@ scmi_shmem_write(device_t dev, bus_size_t offset, const void *buf, bus_size_t len) { struct shmem_softc *sc; - const uint8_t *addr; - int i; sc = device_get_softc(dev); - - addr = (const uint8_t *)buf; - - for (i = 0; i < len; i++) - MMIO_SRAM_WRITE_1(sc->parent, sc->reg + offset + i, addr[i]); + sc = device_get_softc(dev); + bus_write_region_1(sc->res, offset, buf, len); } device_t @@ -322,4 +309,6 @@ DEFINE_CLASS_1(shmem, shmem_driver, shmem_methods, sizeof(struct shmem_softc), EARLY_DRIVER_MODULE(shmem, mmio_sram, shmem_driver, 0, 0, BUS_PASS_INTERRUPT + BUS_PASS_ORDER_MIDDLE); +EARLY_DRIVER_MODULE(shmem, simplebus, shmem_driver, 0, 0, + BUS_PASS_INTERRUPT + BUS_PASS_ORDER_MIDDLE); MODULE_VERSION(scmi_shmem, 1); diff --git a/sys/dev/sram/mmio_sram.c b/sys/dev/sram/mmio_sram.c index bad32d620bb9..b8b205988b61 100644 --- a/sys/dev/sram/mmio_sram.c +++ b/sys/dev/sram/mmio_sram.c @@ -46,7 +46,7 @@ #define dprintf(fmt, ...) static struct resource_spec mmio_sram_spec[] = { - { SYS_RES_MEMORY, 0, RF_ACTIVE }, + { SYS_RES_MEMORY, 0, RF_ACTIVE | RF_SHAREABLE}, { -1, 0 } };