From nobody Sat Sep 26 08:30:55 2026 X-Original-To: dev-commits-src-all@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 4hsLPW71hcz6tWpf for ; Sat, 26 Sep 2026 08:30:55 +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 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hsLPW6D0gz4M3h for ; Sat, 26 Sep 2026 08:30:55 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1790411455; 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=JH4oVILnXADFUejwTmJZn+OZNsRhphw8eWoGb+T+Pqs=; b=fSg/HpewMnM4KWMoAclzGMLXS3y3E/Yo69Ookaelq7Nwe+UBFlvHZgftJG+1dovgXi1xDE otioYc18Pndxuoh0ya0zJPa6O0D5s5ycgypeHqImAAL/wv029RDGgyA3fRDb83W59l0F+Y h06kv4ZHxRQGraEMtm9GMA7QK42RqvEA8WhhK5cWHVI3v3h90AX3DcalKe5cV/H3Cw0cJQ 9wYO0wOP39QpulU+G0lnEQQvYM0zC53IYTqJPzKZ7PNeSGqylU4o9Mi+gNPH1s2+KQ6w+Y GY82QHOMIX7qNLyEIpsJeJIIsC2t7VwKfwEXZum2zkv1FcWZkDfwFQqh2bw5IQ== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1790411455; b=wzVBd4Eq2okCyl+E7X9WHl8aHciFZakYn0PQvNjxJVy56DIDCyaGRlpQIJg9za8X8xWwvI k8+h3RF7raE7JC+lJyVtmJWB+t0K39fEWyf9Y3iX2RgtUaIvWcNWEhSKF6c/1VZxVS1m0J TSvgSZt6wdend+knXr1Q2QPmQ6JGgFPmfHkzdKLsk98oasUQ3/F9Ixga8V06hgPF8Vnv5N rlScQnpjU+cKbTyMjAwkZHCEOk2v9HJSADsl8zjEZuahauWXHRiMY8nykTAn3DLNkw8oll 3pvA8x/xuj7AAMMMjzpUYJ0JCD79x83+1V0syEbh+kgxeCKKe/u0Bz6lD4vNWg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1790411455; 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=JH4oVILnXADFUejwTmJZn+OZNsRhphw8eWoGb+T+Pqs=; b=xCF7oELTOJQgRBdwDEpz95wfIvVi4xVLmUEx27rYkYviH3oF2iDuuJ/PbbQrj4ifRGmhTr 2YGDcVmLtES/jpzhdDJI7OEJpOcmOHQFftoh2jw7RdlmrX91VfB9Ko5YDpjmujLXR79yAS U5TWaW7xXoEi0mEYu6FVd6DTTy22uBZTEHYFJdupUY2M6qY0rYMByvZzMDKiIZAdm8YZlT 67uM/flFXFdYCdGh//23NCIsrkAkWgEk/pNyuYlHOPz8miErHTAozcyJw5HCqizmHSdDYN Q0EEUnL9c5Kg68GKiDPZGZJK72bvqqDe+vfD34H+UT7ErdLxQBBnNcp2SHrnZA== 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 4hsLPW5G0yzprw for ; Sat, 26 Sep 2026 08:30:55 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 40735 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 26 Sep 2026 08:30:55 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Michal Meloun Subject: git: e2d42b0e6cc2 - main - ofw: Convert simplebus to device_get_softc_class(). List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: 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: e2d42b0e6cc235c56484e274639b1df00c99760b Auto-Submitted: auto-generated Date: Sat, 26 Sep 2026 08:30:55 +0000 Message-Id: <6ab782bf.40735.527e734a@gitrepo.freebsd.org> The branch main has been updated by mmel: URL: https://cgit.FreeBSD.org/src/commit/?id=e2d42b0e6cc235c56484e274639b1df00c99760b commit e2d42b0e6cc235c56484e274639b1df00c99760b Author: Michal Meloun AuthorDate: 2026-09-26 07:25:59 +0000 Commit: Michal Meloun CommitDate: 2026-09-26 08:30:42 +0000 ofw: Convert simplebus to device_get_softc_class(). Stop embedding struct simplebus_softc as the first member of subclass softcs. Use device_get_softc_class() to locate the simplebus portion of the device softc MFC after: 2 months Differential Revision: https://reviews.freebsd.org/D59837 --- sys/arm/broadcom/bcm2835/bcm2835_firmware.c | 13 ++++++--- sys/arm/nvidia/drm2/tegra_host1x.c | 3 +- sys/arm/ti/am335x/am335x_pwmss.c | 23 +++------------- sys/arm/ti/ti_omap4_cm.c | 17 ++---------- sys/arm/ti/ti_prcm.c | 13 ++++----- sys/arm/ti/ti_scm.c | 17 +++--------- sys/arm/ti/ti_scm_syscon.c | 11 +++----- sys/arm/ti/ti_sysc.c | 1 - sys/arm64/broadcom/brcmmdio/mdio_mux_iproc.c | 5 ++-- sys/arm64/broadcom/brcmmdio/mdio_nexus_iproc.c | 3 +- sys/arm64/rockchip/rk_pinctrl.c | 1 - sys/dev/clk/allwinner/aw_ccu.c | 15 ++-------- sys/dev/clk/clk_bus.c | 20 ++++---------- sys/dev/dialog/da9063/da9063_iic.c | 8 ++++-- sys/dev/dpaa/fman.c | 34 +++++++++++++---------- sys/dev/dpaa/fman.h | 2 +- sys/dev/dpaa/fman_fdt.c | 6 ++-- sys/dev/dpaa/fman_keygen.c | 6 ++-- sys/dev/dpaa2/dpaa2_mc_fdt.c | 4 +-- sys/dev/dpaa2/memac_mdio_fdt.c | 9 ++---- sys/dev/fdt/simple_mfd.c | 38 ++++---------------------- sys/dev/fdt/simple_mfd.h | 1 - sys/dev/fdt/simplebus.c | 25 ++++++++++------- sys/dev/fdt/simplebus.h | 2 +- sys/dev/firmware/arm/scmi.h | 1 - sys/dev/firmware/xilinx/zynqmp_firmware.c | 1 - sys/dev/gpio/dwgpio/dwgpio_bus.c | 17 +++--------- sys/dev/ofw/ofw_firmware.c | 25 +++++++++-------- sys/dev/ofw/ofwbus.c | 3 +- sys/dev/qcom_dwc3/qcom_dwc3.c | 14 ++-------- sys/dev/regulator/regulator_bus.c | 18 ++++-------- sys/dev/sram/mmio_sram.c | 17 +++--------- sys/dev/syscon/syscon_generic.c | 2 +- sys/dev/syscon/syscon_generic.h | 1 - sys/dev/usb/controller/dwc3/aw_dwc3.c | 18 +++--------- sys/dev/usb/controller/dwc3/rk_dwc3.c | 17 +++--------- sys/dev/usb/controller/xlnx_dwc3.c | 17 ++---------- 37 files changed, 139 insertions(+), 289 deletions(-) diff --git a/sys/arm/broadcom/bcm2835/bcm2835_firmware.c b/sys/arm/broadcom/bcm2835/bcm2835_firmware.c index c1d23c0222cd..1da69b32b93f 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_firmware.c +++ b/sys/arm/broadcom/bcm2835/bcm2835_firmware.c @@ -46,7 +46,7 @@ #include struct bcm2835_firmware_softc { - struct simplebus_softc sc; + device_t dev; phandle_t sc_mbox; }; @@ -81,6 +81,7 @@ bcm2835_firmware_attach(device_t dev) int rv; sc = device_get_softc(dev); + sc->dev = dev; node = ofw_bus_get_node(dev); rv = OF_getencprop(node, "mboxes", &mbox, sizeof(mbox)); @@ -101,8 +102,12 @@ bcm2835_firmware_attach(device_t dev) "Firmware revision"); /* The firmwaare doesn't have a ranges property */ - sc->sc.flags |= SB_FLAG_NO_RANGES; - return (simplebus_attach(dev)); + rv = simplebus_attach_impl(dev, SB_FLAG_NO_RANGES, 0); + if (rv != 0) + return (rv); + + bus_attach_children(dev); + return (0); } int @@ -151,7 +156,7 @@ sysctl_bcm2835_firmware_get_revision(SYSCTL_HANDLER_ARGS) uint32_t rev; int err; - if (bcm2835_firmware_property(sc->sc.dev, + if (bcm2835_firmware_property(sc->dev, BCM2835_MBOX_TAG_FIRMWARE_REVISION, &rev, sizeof(rev)) != 0) return (ENXIO); diff --git a/sys/arm/nvidia/drm2/tegra_host1x.c b/sys/arm/nvidia/drm2/tegra_host1x.c index 81f727a83edc..8f09c55e0f4b 100644 --- a/sys/arm/nvidia/drm2/tegra_host1x.c +++ b/sys/arm/nvidia/drm2/tegra_host1x.c @@ -88,7 +88,6 @@ struct client_info { }; struct host1x_softc { - struct simplebus_softc simplebus_sc; /* must be first */ device_t dev; struct sx lock; int attach_done; @@ -514,7 +513,7 @@ host1x_new_pass(device_t dev) goto fail; } - simplebus_init(dev, 0); + simplebus_attach_impl(dev, SB_FLAG_NO_RANGES, 0); for (node = OF_child(node); node > 0; node = OF_peer(node)) simplebus_add_device(dev, node, 0, NULL, -1, NULL); diff --git a/sys/arm/ti/am335x/am335x_pwmss.c b/sys/arm/ti/am335x/am335x_pwmss.c index 039448f9099f..7050501a103d 100644 --- a/sys/arm/ti/am335x/am335x_pwmss.c +++ b/sys/arm/ti/am335x/am335x_pwmss.c @@ -67,7 +67,6 @@ static device_attach_t am335x_pwmss_attach; static device_detach_t am335x_pwmss_detach; struct am335x_pwmss_softc { - struct simplebus_softc sc_simplebus; device_t sc_dev; struct syscon *syscon; }; @@ -101,7 +100,7 @@ am335x_pwmss_attach(device_t dev) struct am335x_pwmss_softc *sc; uint32_t reg, id; uint64_t rev_address; - phandle_t node, opp_table; + phandle_t opp_table; sc = device_get_softc(dev); sc->sc_dev = dev; @@ -140,23 +139,9 @@ am335x_pwmss_attach(device_t dev) reg |= (1 << id); SYSCON_WRITE_4(sc->syscon, SCM_PWMSS_CTRL, reg); - node = ofw_bus_get_node(dev); - - if (node == -1) - return (ENXIO); - - simplebus_init(dev, node); - - /* - * Allow devices to identify. - */ - bus_identify_children(dev); - - /* - * Now walk the OFW tree and attach top-level devices. - */ - for (node = OF_child(node); node > 0; node = OF_peer(node)) - simplebus_add_device(dev, node, 0, NULL, -1, NULL); + error = simplebus_attach_impl(dev, SB_FLAG_NO_RANGES, 0); + if (error != 0) + return (error); bus_attach_children(dev); return (0); diff --git a/sys/arm/ti/ti_omap4_cm.c b/sys/arm/ti/ti_omap4_cm.c index 572bae7173a1..b1208c930a92 100644 --- a/sys/arm/ti/ti_omap4_cm.c +++ b/sys/arm/ti/ti_omap4_cm.c @@ -55,7 +55,6 @@ static struct ofw_compat_data compat_data[] = { }; struct ti_omap4_cm_softc { - struct simplebus_softc sc; device_t dev; }; @@ -101,19 +100,9 @@ ti_omap4_cm_attach(device_t dev) sc->dev = dev; node = ofw_bus_get_node(dev); - simplebus_init(dev, node); - if (simplebus_fill_ranges(node, &sc->sc) < 0) { - device_printf(dev, "could not get ranges\n"); - return (ENXIO); - } - - bus_identify_children(sc->dev); - - for (child = OF_child(node); child > 0; child = OF_peer(child)) { - cdev = simplebus_add_device(dev, child, 0, NULL, -1, NULL); - if (cdev != NULL) - device_probe_and_attach(cdev); - } + rv = simplebus_attach_impl(dev, SB_FLAG_NO_RANGES, node); + if (rv != 0) + return (rv); bus_attach_children(dev); return (0); diff --git a/sys/arm/ti/ti_prcm.c b/sys/arm/ti/ti_prcm.c index 88659ba3ea49..9fc98b76d1b5 100644 --- a/sys/arm/ti/ti_prcm.c +++ b/sys/arm/ti/ti_prcm.c @@ -63,7 +63,6 @@ #endif struct ti_prcm_softc { - struct simplebus_softc sc_simplebus; device_t dev; struct resource * mem_res; bus_space_tag_t bst; @@ -135,6 +134,7 @@ static int ti_prcm_attach(device_t dev) { struct ti_prcm_softc *sc; + struct simplebus__softc *sb_sc; phandle_t node, child; int rid; @@ -144,20 +144,19 @@ ti_prcm_attach(device_t dev) node = ofw_bus_get_node(sc->dev); simplebus_init(sc->dev, node); - if (simplebus_fill_ranges(node, &sc->sc_simplebus) < 0) { + if (simplebus_fill_ranges(node, sb_sc) < 0) { device_printf(sc->dev, "could not get ranges\n"); return (ENXIO); } - if (sc->sc_simplebus.nranges == 0) { + if (sb_sc->nranges == 0) { device_printf(sc->dev, "nranges == 0\n"); return (ENXIO); } sc->mem_res = bus_alloc_resource(sc->dev, SYS_RES_MEMORY, &rid, - sc->sc_simplebus.ranges[0].host, - (sc->sc_simplebus.ranges[0].host + - sc->sc_simplebus.ranges[0].size - 1), - sc->sc_simplebus.ranges[0].size, + sb_sc->ranges[0].host, + (sb_sc->ranges[0].host + sb_sc->ranges[0].size - 1), + sb_sc->ranges[0].size, RF_ACTIVE | RF_SHAREABLE); if (sc->mem_res == NULL) { diff --git a/sys/arm/ti/ti_scm.c b/sys/arm/ti/ti_scm.c index dc687641502c..0495e429f1a4 100644 --- a/sys/arm/ti/ti_scm.c +++ b/sys/arm/ti/ti_scm.c @@ -82,7 +82,6 @@ static struct ofw_compat_data compat_data[] = { }; struct ti_scm_softc { - struct simplebus_softc sc; device_t dev; }; @@ -108,24 +107,16 @@ static int ti_scm_attach(device_t dev) { struct ti_scm_softc *sc; - device_t cdev; phandle_t node, child; + int rv sc = device_get_softc(dev); sc->dev = dev; node = ofw_bus_get_node(dev); - simplebus_init(dev, node); - if (simplebus_fill_ranges(node, &sc->sc) < 0) { - device_printf(dev, "could not get ranges\n"); - return (ENXIO); - } - - for (child = OF_child(node); child > 0; child = OF_peer(child)) { - cdev = simplebus_add_device(dev, child, 0, NULL, -1, NULL); - if (cdev != NULL) - device_probe_and_attach(cdev); - } + rv = simplebus_attach_impl(dev, 0, node); + if (rv != 0) + return (rv); bus_attach_children(dev); return (0); diff --git a/sys/arm/ti/ti_scm_syscon.c b/sys/arm/ti/ti_scm_syscon.c index 37d802d6c5d7..6aa5cf5b0bb4 100644 --- a/sys/arm/ti/ti_scm_syscon.c +++ b/sys/arm/ti/ti_scm_syscon.c @@ -60,7 +60,6 @@ MALLOC_DECLARE(M_SYSCON); struct ti_scm_syscon_softc { - struct simplebus_softc sc_simplebus; device_t dev; struct syscon * syscon; struct resource * res[1]; @@ -160,6 +159,7 @@ ti_scm_syscon_attach(device_t dev) { struct ti_scm_syscon_softc *sc; phandle_t node, child; + int rv; sc = device_get_softc(dev); sc->dev = dev; @@ -183,12 +183,9 @@ ti_scm_syscon_attach(device_t dev) return (ENXIO); } - simplebus_init(sc->dev, node); - - bus_identify_children(sc->dev); - for (child = OF_child(node); child != 0; child = OF_peer(child)) { - simplebus_add_device(sc->dev, child, 0, NULL, -1, NULL); - } + rv = simplebus_attach_impl(sc->dev, SB_FLAG_NO_RANGES, node); + if (rv != 0) + return (rv); bus_attach_children(sc->dev); return (0); diff --git a/sys/arm/ti/ti_sysc.c b/sys/arm/ti/ti_sysc.c index 3b7d0b2b3123..b2be5f2a1431 100644 --- a/sys/arm/ti/ti_sysc.c +++ b/sys/arm/ti/ti_sysc.c @@ -129,7 +129,6 @@ struct clk_list { }; struct ti_sysc_softc { - struct simplebus_softc sc; bool attach_done; device_t dev; diff --git a/sys/arm64/broadcom/brcmmdio/mdio_mux_iproc.c b/sys/arm64/broadcom/brcmmdio/mdio_mux_iproc.c index 81e79a16bf02..34c751154b16 100644 --- a/sys/arm64/broadcom/brcmmdio/mdio_mux_iproc.c +++ b/sys/arm64/broadcom/brcmmdio/mdio_mux_iproc.c @@ -90,7 +90,6 @@ struct brcm_mdio_ofw_devinfo { }; struct brcm_iproc_mdio_softc { - struct simplebus_softc sbus; device_t dev; struct resource * reg_base; uint32_t clock_rate; @@ -300,12 +299,14 @@ static int brcm_iproc_mdio_attach(device_t dev) { struct brcm_iproc_mdio_softc *sc; + struct simplebus_softc *sb_sc; phandle_t node, parent; struct brcm_mdio_ofw_devinfo *di; int rid; device_t child; sc = device_get_softc(dev); + sb_sc = device_get_softc_class(dev, &simplebus_driver); sc->dev = dev; /* Allocate memory resources */ @@ -337,7 +338,7 @@ brcm_iproc_mdio_attach(device_t dev) /* Initialize and populate resource list. */ resource_list_init(&di->di_rl); - ofw_bus_reg_to_rl(dev, node, sc->sbus.acells, sc->sbus.scells, + ofw_bus_reg_to_rl(dev, node, sb_sc->acells, sb_sc->scells, &di->di_rl); ofw_bus_intr_to_rl(dev, node, &di->di_rl, NULL); diff --git a/sys/arm64/broadcom/brcmmdio/mdio_nexus_iproc.c b/sys/arm64/broadcom/brcmmdio/mdio_nexus_iproc.c index 2d3185e22041..be1301b972f4 100644 --- a/sys/arm64/broadcom/brcmmdio/mdio_nexus_iproc.c +++ b/sys/arm64/broadcom/brcmmdio/mdio_nexus_iproc.c @@ -45,7 +45,6 @@ MALLOC_DEFINE(M_BRCM_IPROC_NEXUS, "Broadcom IPROC MDIO NEXUS", "Broadcom IPROC MDIO NEXUS dynamic memory"); struct brcm_mdionexus_softc { - struct simplebus_softc simplebus_sc; uint32_t mux_id; }; @@ -198,7 +197,7 @@ brcm_mdionexus_ofw_bus_attach(device_t dev) parent = ofw_bus_get_node(dev); simplebus_init(dev, parent); - sc = (struct simplebus_softc *)device_get_softc(dev); + sc = device_get_softc_class(dev, &simplebus_driver); /* Iterate through all bus subordinates */ for (node = OF_child(parent); node > 0; node = OF_peer(node)) { diff --git a/sys/arm64/rockchip/rk_pinctrl.c b/sys/arm64/rockchip/rk_pinctrl.c index f38601742142..cbe7f29937cb 100644 --- a/sys/arm64/rockchip/rk_pinctrl.c +++ b/sys/arm64/rockchip/rk_pinctrl.c @@ -103,7 +103,6 @@ struct rk_pinctrl_conf { }; struct rk_pinctrl_softc { - struct simplebus_softc simplebus_sc; device_t dev; struct syscon *grf; struct syscon *pmu; diff --git a/sys/dev/clk/allwinner/aw_ccu.c b/sys/dev/clk/allwinner/aw_ccu.c index b7a088bb68f6..13817873e785 100644 --- a/sys/dev/clk/allwinner/aw_ccu.c +++ b/sys/dev/clk/allwinner/aw_ccu.c @@ -50,7 +50,6 @@ #define CCU_SIZE 0x400 struct aw_ccu_softc { - struct simplebus_softc sc; bus_space_tag_t bst; bus_space_handle_t bsh; struct mtx mtx; @@ -187,14 +186,9 @@ static int aw_ccu_attach(device_t dev) { struct aw_ccu_softc *sc; - phandle_t node, child; - device_t cdev; int error; sc = device_get_softc(dev); - node = ofw_bus_get_node(dev); - - simplebus_init(dev, node); sc->flags = aw_ccu_search_compatible()->ocd_data; @@ -213,12 +207,9 @@ aw_ccu_attach(device_t dev) mtx_init(&sc->mtx, device_get_nameunit(dev), NULL, MTX_DEF); - /* Attach child devices */ - for (child = OF_child(node); child > 0; child = OF_peer(child)) { - cdev = simplebus_add_device(dev, child, 0, NULL, -1, NULL); - if (cdev != NULL) - device_probe_and_attach(cdev); - } + error = simplebus_attach_impl(dev, SB_FLAG_NO_RANGES, 0); + if (error != 0) + return (error); bus_attach_children(dev); return (0); diff --git a/sys/dev/clk/clk_bus.c b/sys/dev/clk/clk_bus.c index 2eb25fff6542..ec0127640f27 100644 --- a/sys/dev/clk/clk_bus.c +++ b/sys/dev/clk/clk_bus.c @@ -35,10 +35,6 @@ #include #include -struct ofw_clkbus_softc { - struct simplebus_softc simplebus_sc; -}; - static int ofw_clkbus_probe(device_t dev) { @@ -57,17 +53,11 @@ ofw_clkbus_probe(device_t dev) static int ofw_clkbus_attach(device_t dev) { - phandle_t node, child; - device_t cdev; - - node = ofw_bus_get_node(dev); - simplebus_init(dev, node); + int rv; - for (child = OF_child(node); child > 0; child = OF_peer(child)) { - cdev = simplebus_add_device(dev, child, 0, NULL, -1, NULL); - if (cdev != NULL) - device_probe_and_attach(cdev); - } + rv = simplebus_attach_impl(dev, SB_FLAG_NO_RANGES, 0); + if (rv != 0) + return (rv); bus_attach_children(dev); return (0); @@ -82,7 +72,7 @@ static device_method_t ofw_clkbus_methods[] = { }; DEFINE_CLASS_1(ofw_clkbus, ofw_clkbus_driver, ofw_clkbus_methods, - sizeof(struct ofw_clkbus_softc), simplebus_driver); + 0, simplebus_driver); EARLY_DRIVER_MODULE(ofw_clkbus, simplebus, ofw_clkbus_driver, 0, 0, BUS_PASS_BUS + BUS_PASS_ORDER_MIDDLE); MODULE_VERSION(ofw_clkbus, 1); diff --git a/sys/dev/dialog/da9063/da9063_iic.c b/sys/dev/dialog/da9063/da9063_iic.c index 517a04540600..bb0d246c5278 100644 --- a/sys/dev/dialog/da9063/da9063_iic.c +++ b/sys/dev/dialog/da9063/da9063_iic.c @@ -54,7 +54,6 @@ #define DA9063_IIC_PAGE_CON_REG_PAGE_SHIFT 1 struct da9063_iic_softc { - struct simplebus_softc simplebus_sc; device_t dev; struct mtx mtx; uint8_t page; @@ -219,9 +218,12 @@ da9063_iic_attach(device_t dev) DA9063_PAGE_CON_REG_PAGE_MASK) >> DA9063_IIC_PAGE_CON_REG_PAGE_SHIFT; mtx_init(&sc->mtx, device_get_nameunit(sc->dev), NULL, MTX_DEF); - sc->simplebus_sc.flags |= SB_FLAG_NO_RANGES; + error = simplebus_attach_impl(dev, SB_FLAG_NO_RANGES, 0); + if (error != 0) + return (error); - return (simplebus_attach(dev)); + bus_attach_children(dev); + return (0); } static int diff --git a/sys/dev/dpaa/fman.c b/sys/dev/dpaa/fman.c index 880f881a33bc..3a7a73b02c6a 100644 --- a/sys/dev/dpaa/fman.c +++ b/sys/dev/dpaa/fman.c @@ -161,13 +161,15 @@ int fman_activate_resource(device_t bus, device_t child, struct resource *res) { struct fman_softc *sc; + struct simplebus_softc *sb_sc; bus_space_tag_t bt; bus_space_handle_t bh; int i, rv; sc = device_get_softc(bus); + sb_sc = device_get_softc_class(bus, &simplebus_driver); if (rman_get_type(res) != SYS_RES_IRQ) { - for (i = 0; i < sc->sc_base.nranges; i++) { + for (i = 0; i < sb_sc->nranges; i++) { if (rman_is_region_manager(res, &sc->rman) != 0) { bt = rman_get_bustag(sc->mem_res); rv = bus_space_subregion(bt, @@ -224,6 +226,7 @@ fman_alloc_resource(device_t bus, device_t child, int type, int rid, rman_res_t start, rman_res_t end, rman_res_t count, u_int flags) { struct fman_softc *sc; + struct simplebus_softc *sb_sc; struct resource_list *rl; struct resource_list_entry *rle = NULL; struct resource *res; @@ -232,6 +235,7 @@ fman_alloc_resource(device_t bus, device_t child, int type, int rid, isdefault = RMAN_IS_DEFAULT_RANGE(start, end); passthrough = (device_get_parent(child) != bus); sc = device_get_softc(bus); + sb_sc = device_get_softc_class(bus, &simplebus_driver); rl = BUS_GET_RESOURCE_LIST(bus, child); switch (type) { case SYS_RES_MEMORY: @@ -252,9 +256,9 @@ fman_alloc_resource(device_t bus, device_t child, int type, int rid, res = NULL; /* Map fman ranges to nexus ranges. */ - for (i = 0; i < sc->sc_base.nranges; i++) { - if (start >= sc->sc_base.ranges[i].bus && end < - sc->sc_base.ranges[i].bus + sc->sc_base.ranges[i].size) { + for (i = 0; i < sb_sc->nranges; i++) { + if (start >= sb_sc->ranges[i].bus && end < + sb_sc->ranges[i].bus + sb_sc->ranges[i].size) { start += rman_get_start(sc->mem_res); end += rman_get_start(sc->mem_res); res = rman_reserve_resource(&sc->rman, start, @@ -366,14 +370,14 @@ fman_fill_soc_params(struct fman_softc *sc) sc->total_fifo_size = 295 * 1024; break; default: - device_printf(sc->sc_base.dev, + device_printf(sc->dev, "Unsupported FManv3 revision: %d\n", sc->sc_revision_minor); break; } break; default: - device_printf(sc->sc_base.dev, + device_printf(sc->dev, "Unsupported FMan version: %d\n", sc->sc_revision_major); break; } @@ -403,12 +407,12 @@ fman_reset(struct fman_softc *sc) #define DEVDISR2_FMAN1 0xfcc00000 #define DEVDISR2_FMAN2 0x000fcc00 - node = ofw_bus_get_node(device_get_parent(sc->sc_base.dev)); + node = ofw_bus_get_node(device_get_parent(sc->dev)); node = fdt_find_compatible(node, "fsl,qoriq-device-config-2.0", false); if (node == 0) { - device_printf(sc->sc_base.dev, + device_printf(sc->dev, "missing device-config node in FDT. Cannot reset FMAN"); return (0); } @@ -487,7 +491,7 @@ fman_dma_init(struct fman_softc *sc) sc->dma_cam_num_entries * DMA_CAM_SIZE, DMA_CAM_ALIGN, 0, 0, VMEM_ADDR_MIN, VMEM_ADDR_MAX, M_BESTFIT | M_WAITOK, &addr); if (err != 0) - device_printf(sc->sc_base.dev, + device_printf(sc->dev, "failed to allocate DMA buffer\n"); reg = addr; bus_write_4(sc->mem_res, FMDM_EBCR, reg); @@ -593,7 +597,7 @@ fman_init(struct fman_softc *sc) sc->sc_revision_minor = fman_get_revision_minor(sc); if (bootverbose) - device_printf(sc->sc_base.dev, "Hardware version: %d.%d.\n", + device_printf(sc->dev, "Hardware version: %d.%d.\n", sc->sc_revision_major, sc->sc_revision_minor); fman_fill_soc_params(sc); @@ -649,7 +653,7 @@ fman_init_muram(struct fman_softc *sc) u_long base, size; phandle_t node; - node = ofw_bus_get_node(sc->sc_base.dev); + node = ofw_bus_get_node(sc->dev); for (node = OF_child(node); node != 0; node = OF_peer(node)) { char compat[255]; @@ -659,11 +663,11 @@ fman_init_muram(struct fman_softc *sc) break; } if (node == 0) { - device_printf(sc->sc_base.dev, "no muram node\n"); + device_printf(sc->dev, "no muram node\n"); return (ENXIO); } if (fdt_regsize(node, &base, &size) != 0) { - device_printf(sc->sc_base.dev, "failed to get muram reg\n"); + device_printf(sc->dev, "failed to get muram reg\n"); return (ENXIO); } sc->muram_vmem = vmem_create("MURAM", @@ -681,7 +685,7 @@ fman_attach(device_t dev) phandle_t node; sc = device_get_softc(dev); - sc->sc_base.dev = dev; + sc->dev = dev; cell = 0; node = ofw_bus_get_node(dev); @@ -729,7 +733,7 @@ fman_attach(device_t dev) sc->rman.rm_type = RMAN_ARRAY; sc->rman.rm_descr = "FMan range"; rman_init_from_resource(&sc->rman, sc->mem_res); - simplebus_attach_impl(sc->sc_base.dev); + simplebus_attach_impl(sc->dev, 0, 0); if (fman_init_muram(sc) != 0) goto err; diff --git a/sys/dev/dpaa/fman.h b/sys/dev/dpaa/fman.h index bc4a5752fbfb..f3e6bfd61bff 100644 --- a/sys/dev/dpaa/fman.h +++ b/sys/dev/dpaa/fman.h @@ -63,7 +63,7 @@ * FMan driver instance data. */ struct fman_softc { - struct simplebus_softc sc_base; + device_t dev; struct resource *mem_res; struct resource *irq_res; struct resource *err_irq_res; diff --git a/sys/dev/dpaa/fman_fdt.c b/sys/dev/dpaa/fman_fdt.c index 88f08269f086..a7ff673938d6 100644 --- a/sys/dev/dpaa/fman_fdt.c +++ b/sys/dev/dpaa/fman_fdt.c @@ -87,16 +87,14 @@ fman_fdt_probe(device_t dev) uint32_t fman_get_clock(struct fman_softc *sc) { - device_t dev; phandle_t node; pcell_t fman_clock; - dev = sc->sc_base.dev; - node = ofw_bus_get_node(dev); + node = ofw_bus_get_node(sc->dev); if ((OF_getprop(node, "clock-frequency", &fman_clock, sizeof(fman_clock)) <= 0) || (fman_clock == 0)) { - device_printf(dev, + device_printf(sc->dev, "could not acquire correct frequency from DTS\n"); return (0); diff --git a/sys/dev/dpaa/fman_keygen.c b/sys/dev/dpaa/fman_keygen.c index b2384721c5b0..d261d8c70f81 100644 --- a/sys/dev/dpaa/fman_keygen.c +++ b/sys/dev/dpaa/fman_keygen.c @@ -145,12 +145,12 @@ kg_ar_write(struct fman_softc *sc, uint32_t ar) DELAY(1); } if ((ar & FMKG_AR_GO) != 0) { - device_printf(sc->sc_base.dev, + device_printf(sc->dev, "fman_kg: AR stuck busy (0x%08x)\n", ar); return (ETIMEDOUT); } if ((ar & FMKG_AR_ERR) != 0) { - device_printf(sc->sc_base.dev, + device_printf(sc->dev, "fman_kg: AR reported error (0x%08x)\n", ar); return (EIO); } @@ -212,7 +212,7 @@ kg_program_scheme(struct fman_softc *sc, uint8_t scheme_id, error = kg_ar_write(sc, FMKG_AR_GO | (scheme_id << FMKG_AR_NUM_SHIFT) | FMKG_AR_SCM_WSEL_UPDCNT); if (error != 0) - device_printf(sc->sc_base.dev, + device_printf(sc->dev, "fman_kg: scheme %u program failed\n", scheme_id); return (error); } diff --git a/sys/dev/dpaa2/dpaa2_mc_fdt.c b/sys/dev/dpaa2/dpaa2_mc_fdt.c index 2a808948306f..f6a2bf955c0e 100644 --- a/sys/dev/dpaa2/dpaa2_mc_fdt.c +++ b/sys/dev/dpaa2/dpaa2_mc_fdt.c @@ -396,7 +396,7 @@ static device_method_t dpaa2_mc_fdt_methods[] = { DEVMETHOD_END }; -DEFINE_CLASS_1(dpaa2_mc, dpaa2_mc_fdt_driver, dpaa2_mc_fdt_methods, - sizeof(struct dpaa2_mc_softc), dpaa2_mc_driver); +DEFINE_CLASS_2(dpaa2_mc, dpaa2_mc_fdt_driver, dpaa2_mc_fdt_methods, + sizeof(struct dpaa2_mc_softc), dpaa2_mc_driver, simplebus_driver); DRIVER_MODULE(dpaa2_mc, simplebus, dpaa2_mc_fdt_driver, 0, 0); diff --git a/sys/dev/dpaa2/memac_mdio_fdt.c b/sys/dev/dpaa2/memac_mdio_fdt.c index 247a70c6545c..374f05004bf3 100644 --- a/sys/dev/dpaa2/memac_mdio_fdt.c +++ b/sys/dev/dpaa2/memac_mdio_fdt.c @@ -160,12 +160,7 @@ MODULE_DEPEND(memacphy_fdt, miibus, 1, 1, 1); /* -------------------------------------------------------------------------- */ -/* - * Order in this softc is important; memac_mdio_fdt_attach() calls - * simplebus_init() which expects sb_sc at the beginning. - */ struct memac_mdio_softc_fdt { - struct simplebus_softc sb_sc; /* Must stay first. */ struct memac_mdio_softc_common scc; }; @@ -294,8 +289,8 @@ static device_method_t memac_mdio_fdt_methods[] = { DEVMETHOD_END }; -DEFINE_CLASS_0(memac_mdio_fdt, memac_mdio_fdt_driver, memac_mdio_fdt_methods, - sizeof(struct memac_mdio_softc_fdt)); +DEFINE_CLASS_1(memac_mdio_fdt, memac_mdio_fdt_driver, memac_mdio_fdt_methods, + sizeof(struct memac_mdio_softc_fdt), simplebus_driver); EARLY_DRIVER_MODULE(memac_mdio_fdt, simplebus, memac_mdio_fdt_driver, 0, 0, BUS_PASS_SUPPORTDEV); diff --git a/sys/dev/fdt/simple_mfd.c b/sys/dev/fdt/simple_mfd.c index 66352e3f9409..fe76d8690843 100644 --- a/sys/dev/fdt/simple_mfd.c +++ b/sys/dev/fdt/simple_mfd.c @@ -152,7 +152,6 @@ simple_mfd_syscon_unlock(device_t dev) static int simple_mfd_probe(device_t dev) { - if (!ofw_bus_status_okay(dev)) return (ENXIO); if (!ofw_bus_is_compatible(dev, "simple-mfd")) @@ -167,43 +166,16 @@ static int simple_mfd_attach(device_t dev) { struct simple_mfd_softc *sc; - phandle_t node, child; - int rid; + int rid, rv; sc = device_get_softc(dev); - node = ofw_bus_get_node(dev); sc->dev = dev; rid = 0; - /* Parse address-cells and size-cells from the parent node as a fallback */ - if (OF_getencprop(node, "#address-cells", &sc->sc.acells, - sizeof(sc->sc.acells)) == -1) { - if (OF_getencprop(OF_parent(node), "#address-cells", &sc->sc.acells, - sizeof(sc->sc.acells)) == -1) { - sc->sc.acells = 2; - } - } - if (OF_getencprop(node, "#size-cells", &sc->sc.scells, - sizeof(sc->sc.scells)) == -1) { - if (OF_getencprop(OF_parent(node), "#size-cells", &sc->sc.scells, - sizeof(sc->sc.scells)) == -1) { - sc->sc.scells = 1; - } - } - - /* If the node has a ranges prop, parse it so children mapping will be done correctly */ - if (OF_hasprop(node, "ranges")) { - if (simplebus_fill_ranges(node, &sc->sc) < 0) { - device_printf(dev, "could not get ranges\n"); - return (ENXIO); - } - } - - /* Attach child devices */ - for (child = OF_child(node); child > 0; child = OF_peer(child)) { - (void)simple_mfd_add_device(dev, child, 0, NULL, -1, NULL); - } + rv = simplebus_attach_impl(dev, SB_FLAG_NO_RANGES, 0); + if (rv != 0) + return (rv); if (ofw_bus_is_compatible(dev, "syscon")) { sc->mem_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, @@ -255,7 +227,7 @@ simple_mfd_setup_dinfo(device_t dev, phandle_t node, struct simplebus_softc *sc; struct simplebus_devinfo *ndi; - sc = device_get_softc(dev); + sc = device_get_softc_class(dev, &simplebus_driver); if (di == NULL) ndi = malloc(sizeof(*ndi), M_DEVBUF, M_WAITOK | M_ZERO); else diff --git a/sys/dev/fdt/simple_mfd.h b/sys/dev/fdt/simple_mfd.h index c210e635bb00..26786daf5723 100644 --- a/sys/dev/fdt/simple_mfd.h +++ b/sys/dev/fdt/simple_mfd.h @@ -30,7 +30,6 @@ #include struct simple_mfd_softc { - struct simplebus_softc sc; device_t dev; struct syscon *syscon; struct resource *mem_res; diff --git a/sys/dev/fdt/simplebus.c b/sys/dev/fdt/simplebus.c index 3ad6515ed3b7..3e78ba8c4789 100644 --- a/sys/dev/fdt/simplebus.c +++ b/sys/dev/fdt/simplebus.c @@ -34,6 +34,8 @@ #include #include +#include + #include #include #include @@ -178,13 +180,16 @@ simplebus_probe(device_t dev) } int -simplebus_attach_impl(device_t dev) +simplebus_attach_impl(device_t dev, int flags, phandle_t node) { struct simplebus_softc *sc; - phandle_t node; - sc = device_get_softc(dev); - simplebus_init(dev, 0); + if (node == 0) + node = ofw_bus_get_node(dev); + sc = device_get_softc_class(dev, &simplebus_driver); + sc->flags |=flags; + + simplebus_init(dev, node); if ((sc->flags & SB_FLAG_NO_RANGES) == 0 && simplebus_fill_ranges(sc->node, sc) < 0) { device_printf(dev, "could not get ranges\n"); @@ -207,7 +212,7 @@ simplebus_attach(device_t dev) { int rv; - rv = simplebus_attach_impl(dev); + rv = simplebus_attach_impl(dev, 0, 0); if (rv != 0) return (rv); @@ -225,7 +230,7 @@ simplebus_detach(device_t dev) if (rv != 0) return (rv); - sc = device_get_softc(dev); + sc = device_get_softc_class(dev, &simplebus_driver); if (sc->ranges != NULL) free(sc->ranges, M_DEVBUF); @@ -236,8 +241,7 @@ void simplebus_init(device_t dev, phandle_t node) { struct simplebus_softc *sc; - - sc = device_get_softc(dev); + sc = device_get_softc_class(dev, &simplebus_driver); if (node == 0) node = ofw_bus_get_node(dev); sc->dev = dev; @@ -250,6 +254,7 @@ simplebus_init(device_t dev, phandle_t node) OF_getencprop(node, "#address-cells", &sc->acells, sizeof(sc->acells)); sc->scells = 1; OF_getencprop(node, "#size-cells", &sc->scells, sizeof(sc->scells)); + } int @@ -308,7 +313,7 @@ simplebus_setup_dinfo(device_t dev, phandle_t node, struct simplebus_softc *sc; struct simplebus_devinfo *ndi; - sc = device_get_softc(dev); + sc = device_get_softc_class(dev, &simplebus_driver); if (di == NULL) ndi = malloc(sizeof(*ndi), M_DEVBUF, M_WAITOK | M_ZERO); else @@ -468,7 +473,7 @@ simplebus_alloc_resource(device_t bus, device_t child, int type, int rid, struct resource_list_entry *rle; int j; - sc = device_get_softc(bus); + sc = device_get_softc_class(bus, &simplebus_driver); /* * Request for the default allocation with a given rid: use resource diff --git a/sys/dev/fdt/simplebus.h b/sys/dev/fdt/simplebus.h index 25f2cb534e0f..2d8aa8d9a1f4 100644 --- a/sys/dev/fdt/simplebus.h +++ b/sys/dev/fdt/simplebus.h @@ -65,7 +65,7 @@ int simplebus_fill_ranges(phandle_t node, struct simplebus_softc *sc); int simplebus_attach(device_t dev); -int simplebus_attach_impl(device_t dev); +int simplebus_attach_impl(device_t dev, int flags, phandle_t node); int simplebus_detach(device_t dev); #endif /* _FDT_SIMPLEBUS_H */ diff --git a/sys/dev/firmware/arm/scmi.h b/sys/dev/firmware/arm/scmi.h index fc52732bd503..e6bfae157544 100644 --- a/sys/dev/firmware/arm/scmi.h +++ b/sys/dev/firmware/arm/scmi.h @@ -61,7 +61,6 @@ struct scmi_transport_desc { struct scmi_transport; struct scmi_softc { - struct simplebus_softc simplebus_sc; device_t dev; struct mtx mtx; struct scmi_transport_desc trs_desc; diff --git a/sys/dev/firmware/xilinx/zynqmp_firmware.c b/sys/dev/firmware/xilinx/zynqmp_firmware.c index dfe41842c40c..b2f507ee69c5 100644 --- a/sys/dev/firmware/xilinx/zynqmp_firmware.c +++ b/sys/dev/firmware/xilinx/zynqmp_firmware.c @@ -88,7 +88,6 @@ enum { typedef int (*zynqmp_callfn_t)(register_t, register_t, register_t, uint32_t *payload); struct zynqmp_firmware_softc { - struct simplebus_softc sc; device_t dev; zynqmp_callfn_t callfn; }; diff --git a/sys/dev/gpio/dwgpio/dwgpio_bus.c b/sys/dev/gpio/dwgpio/dwgpio_bus.c index 7f3fc5b91f69..dc4b05f095c3 100644 --- a/sys/dev/gpio/dwgpio/dwgpio_bus.c +++ b/sys/dev/gpio/dwgpio/dwgpio_bus.c @@ -46,7 +46,6 @@ #include "dwgpio_if.h" *** 380 LINES SKIPPED ***