Date: Tue, 13 May 2025 22:46:28 GMT From: Justin Hibbits <jhibbits@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: git: 86d20eaadfd1 - main - powernv: Add RF_BIGENDIAN resource flag Message-ID: <202505132246.54DMkSkM001602@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch main has been updated by jhibbits: URL: https://cgit.FreeBSD.org/src/commit/?id=86d20eaadfd1a03e19d8bc8333c689b820299d52 commit 86d20eaadfd1a03e19d8bc8333c689b820299d52 Author: Justin Hibbits <jhibbits@FreeBSD.org> AuthorDate: 2025-05-13 22:39:37 +0000 Commit: Justin Hibbits <jhibbits@FreeBSD.org> CommitDate: 2025-05-13 22:44:09 +0000 powernv: Add RF_BIGENDIAN resource flag The big-endian analogue to the RF_LITTLEENDIAN flag, if this flag is set on a memory resource it's always mapped big endian. This is needed by the PowerNV OPAL resources (XIVE and PCI), as these top-level peripherals are always big-endian. Tested by: pkubaj Fixes: c4921a0f("powerpc: Always use BE tag in nexus_map_resource") MFC after: 1 day X-MFC-with: c4921a0f --- sys/powerpc/include/resource.h | 1 + sys/powerpc/powernv/opal_pci.c | 2 +- sys/powerpc/powernv/xive.c | 2 +- sys/powerpc/powerpc/nexus.c | 4 +++- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/sys/powerpc/include/resource.h b/sys/powerpc/include/resource.h index e7e9493569cc..6726104403d0 100644 --- a/sys/powerpc/include/resource.h +++ b/sys/powerpc/include/resource.h @@ -47,5 +47,6 @@ */ #define RF_LITTLEENDIAN RF_SPARE1 +#define RF_BIGENDIAN RF_SPARE2 #endif /* !_MACHINE_RESOURCE_H_ */ diff --git a/sys/powerpc/powernv/opal_pci.c b/sys/powerpc/powernv/opal_pci.c index 8dee2c45c089..622c8c2cc09b 100644 --- a/sys/powerpc/powernv/opal_pci.c +++ b/sys/powerpc/powernv/opal_pci.c @@ -270,7 +270,7 @@ opalpci_attach(device_t dev) rid = 0; sc->r_reg = bus_alloc_resource_any(dev, SYS_RES_MEMORY, - &rid, RF_ACTIVE | RF_SHAREABLE); + &rid, RF_ACTIVE | RF_SHAREABLE | RF_BIGENDIAN); if (sc->r_reg == NULL) { device_printf(dev, "Failed to allocate PHB[%jd] registers\n", (uintmax_t)sc->phb_id); diff --git a/sys/powerpc/powernv/xive.c b/sys/powerpc/powernv/xive.c index 384ff4ef20d2..aaf4953ba8a5 100644 --- a/sys/powerpc/powernv/xive.c +++ b/sys/powerpc/powernv/xive.c @@ -327,7 +327,7 @@ xive_attach(device_t dev) rid = 1; /* Get the Hypervisor-level register set. */ sc->sc_mem = bus_alloc_resource_any(dev, SYS_RES_MEMORY, - &rid, RF_ACTIVE); + &rid, RF_ACTIVE | RF_BIGENDIAN); sc->sc_offset = XIVE_TM_QW3_HV; mtx_init(&sc->sc_mtx, "XIVE", NULL, MTX_DEF); diff --git a/sys/powerpc/powerpc/nexus.c b/sys/powerpc/powerpc/nexus.c index 029b6ef8a479..1dac56a84cf9 100644 --- a/sys/powerpc/powerpc/nexus.c +++ b/sys/powerpc/powerpc/nexus.c @@ -287,8 +287,10 @@ nexus_map_resource(device_t bus, device_t child, struct resource *r, map->r_vaddr = pmap_mapdev_attr(start, length, args.memattr); if ((rman_get_flags(r) & RF_LITTLEENDIAN) != 0) map->r_bustag = &bs_le_tag; - else + else if ((rman_get_flags(r) & RF_BIGENDIAN) != 0) map->r_bustag = &bs_be_tag; + else + map->r_bustag = nexus_get_bus_tag(NULL, NULL); map->r_size = length; map->r_bushandle = (bus_space_handle_t)map->r_vaddr; break;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202505132246.54DMkSkM001602>