mirror of
https://github.com/freebsd/freebsd-src
synced 2024-07-21 10:19:04 +00:00
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
This commit is contained in:
parent
3cf553288b
commit
a82470212b
|
@ -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_ */
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue