On Tue, May 1, 2012 at 6:48 PM, Mark Cave-Ayland <mark.cave-ayl...@ilande.co.uk> wrote: > On 01/05/12 07:57, Blue Swirl wrote: > >>> Therefore I can't change it to my (modified) sbus_mmio_map() function >>> because it would break other non-SPARC platforms, and AIUI there is >>> nothing >>> in the memory API that allows me to move a subregion to a different >>> MemoryRegion parent, even if I can get a reference to it with >>> sysbus_mmio_get_region() after the sysbus_mmio_map() call - or have I >>> misunderstood something? >> >> >> Sysbus is used as a generic class for motherboard devices, there is an >> assumption that there is no higher level bus. What we need here is a >> full blown bus. The translations and mappigs between bus addresses and >> motherboard addresses should be done in a Sysbus to SBus bridge >> device, just like PCI host bridges do. > > > Since SBus is mapped directly to physical addresses, is this mapping not > just 1:1? Or does it make sense to re-work all the offsets of the various > peripherals to be from the base address of the first slot?
The mapping is not direct, from device point of view there's IOMMU in between and without help from IOMMU (or using the direct mode) the device can't access the full 36 bit address space. The offset should be from the start of the current slot, not first slot. > > > ATB, > > Mark.