git: a82470212b76 - main - powerpc: Add RF_LITTLEENDIAN resource flag
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 23 Jan 2024 17:46:06 UTC
The branch main has been updated by jhb:
URL: https://cgit.FreeBSD.org/src/commit/?id=a82470212b7659afb7d3287e2ccae72d5e496b71
commit a82470212b7659afb7d3287e2ccae72d5e496b71
Author: John Baldwin <jhb@FreeBSD.org>
AuthorDate: 2024-01-23 17:38:36 +0000
Commit: John Baldwin <jhb@FreeBSD.org>
CommitDate: 2024-01-23 17:38:36 +0000
powerpc: Add RF_LITTLEENDIAN resource flag
If this powerpc-specific flag is set on a resource, then the
little-endian bus tag is always used when mapping that resource.
Make use of this flag in the mpc85xx/fsl_sata driver to avoid setting
the SATA BAR's bus tag after bus_alloc_resource.
Reviewed by: jhibbits
Differential Revision: https://reviews.freebsd.org/D43553
---
sys/powerpc/include/resource.h | 7 +++++++
sys/powerpc/mpc85xx/fsl_sata.c | 3 +--
sys/powerpc/powerpc/nexus.c | 10 ++++++++--
3 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/sys/powerpc/include/resource.h b/sys/powerpc/include/resource.h
index 9477572176e0..e7e9493569cc 100644
--- a/sys/powerpc/include/resource.h
+++ b/sys/powerpc/include/resource.h
@@ -41,4 +41,11 @@
#define SYS_RES_IOPORT 4 /* i/o ports */
#define PCI_RES_BUS 5 /* PCI bus numbers */
+/*
+ * A powerpc-specific resource flag to request little-endian bus tags
+ * for a resource.
+ */
+
+#define RF_LITTLEENDIAN RF_SPARE1
+
#endif /* !_MACHINE_RESOURCE_H_ */
diff --git a/sys/powerpc/mpc85xx/fsl_sata.c b/sys/powerpc/mpc85xx/fsl_sata.c
index 861aaba530e3..74fc40053fdc 100644
--- a/sys/powerpc/mpc85xx/fsl_sata.c
+++ b/sys/powerpc/mpc85xx/fsl_sata.c
@@ -352,9 +352,8 @@ fsl_sata_attach(device_t dev)
}
ch->r_mid = 0;
if (!(ch->r_mem = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
- &ch->r_mid, RF_ACTIVE)))
+ &ch->r_mid, RF_ACTIVE | RF_LITTLEENDIAN)))
return (ENXIO);
- rman_set_bustag(ch->r_mem, &bs_le_tag);
fsl_sata_dmainit(dev);
fsl_sata_slotsalloc(dev);
fsl_sata_init(dev);
diff --git a/sys/powerpc/powerpc/nexus.c b/sys/powerpc/powerpc/nexus.c
index 3c71e1e79e3b..55afadcb4e20 100644
--- a/sys/powerpc/powerpc/nexus.c
+++ b/sys/powerpc/powerpc/nexus.c
@@ -275,14 +275,20 @@ nexus_map_resource(device_t bus, device_t child, int type, struct resource *r,
panic("%s:%d SYS_RES_IOPORT handling not implemented", __func__, __LINE__);
/* XXX: untested
map->r_bushandle = start;
- map->r_bustag = nexus_get_bus_tag(NULL, NULL);
+ if ((rman_get_flags(r) & RF_LITTLEENDIAN) != 0)
+ map->r_bustag = &bs_le_tag;
+ else
+ map->r_bustag = nexus_get_bus_tag(NULL, NULL);
map->r_size = length;
map->r_vaddr = NULL;
*/
break;
case SYS_RES_MEMORY:
map->r_vaddr = pmap_mapdev_attr(start, length, args.memattr);
- map->r_bustag = nexus_get_bus_tag(NULL, NULL);
+ if ((rman_get_flags(r) & RF_LITTLEENDIAN) != 0)
+ map->r_bustag = &bs_le_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;