On 08.10.2012, at 23:05, Scott Wood wrote:

> On 10/08/2012 03:48:42 PM, Alexander Graf wrote:
>> On 08.10.2012, at 22:20, Scott Wood wrote:
>> > On 10/08/2012 07:23:52 AM, Alexander Graf wrote:
>> >> On PPC, we don't have PIO. So usually PIO space behind a PCI bridge is
>> >> accessible via MMIO. Do this mapping explicitly by mapping the PIO space
>> >> of our PCI bus into a memory region that lives in memory space.
>> >> Signed-off-by: Alexander Graf <ag...@suse.de>
>> >> ---
>> >> hw/ppc/e500.c    |    3 +--
>> >> hw/ppce500_pci.c |    9 +++++++--
>> >> 2 files changed, 8 insertions(+), 4 deletions(-)
>> >> diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c
>> >> index d23f9b2..857d4dc 100644
>> >> --- a/hw/ppc/e500.c
>> >> +++ b/hw/ppc/e500.c
>> >> @@ -52,7 +52,6 @@
>> >> #define MPC8544_PCI_REGS_BASE      (MPC8544_CCSRBAR_BASE + 0x8000ULL)
>> >> #define MPC8544_PCI_REGS_SIZE      0x1000ULL
>> >> #define MPC8544_PCI_IO             0xE1000000ULL
>> >> -#define MPC8544_PCI_IOLEN          0x10000ULL
>> >> #define MPC8544_UTIL_BASE          (MPC8544_CCSRBAR_BASE + 0xe0000ULL)
>> >> #define MPC8544_SPIN_BASE          0xEF000000ULL
>> >> @@ -511,7 +510,7 @@ void ppce500_init(PPCE500Params *params)
>> >>     if (!pci_bus)
>> >>         printf("couldn't create PCI controller!\n");
>> >> -    isa_mmio_init(MPC8544_PCI_IO, MPC8544_PCI_IOLEN);
>> >> +    sysbus_mmio_map(sysbus_from_qdev(dev), 1, MPC8544_PCI_IO);
>> >>     if (pci_bus) {
>> >>         /* Register network interfaces. */
>> >> diff --git a/hw/ppce500_pci.c b/hw/ppce500_pci.c
>> >> index 92b1dc0..27c6d7d 100644
>> >> --- a/hw/ppce500_pci.c
>> >> +++ b/hw/ppce500_pci.c
>> >> @@ -31,6 +31,8 @@
>> >> #define PCIE500_ALL_SIZE      0x1000
>> >> #define PCIE500_REG_SIZE      (PCIE500_ALL_SIZE - PCIE500_REG_BASE)
>> >> +#define PCIE500_PCI_IOLEN     0x10000ULL
>> >
>> > I don't think this belongs in ppce500_pci.c -- it's board config (or 
>> > rather, a board-related default of something that is supposed to be 
>> > software configurable), just like the base address.
>> Actually this one is fixed in PCI. There are only 64k PIO ports.
> 
> Are you sure about that?  Certainly that's the limit on x86 due to the I/O 
> instructions, and some (buggy?) PCI devices might have trouble with larger 
> I/O addresses, but I didn't think it was actually illegal.  Some mpc85xx 
> boards have default configs with larger I/O windows (though probably not for 
> any good reason).

What sense would it make to model an ioport range that exceeds what x86 can do? 
I'm fairly sure if you'd ever start using that, you'll see a lot of PCI devices 
fail at you anyway.

> 
>> > Any chance of similarly constraining PCI MMIO to its proper window?
>> We can't distinguish between inbound and outbound right now. If we only need 
>> to restrict CPU -> PCI access, then yes.
> 
> Better than nothing. :-)

If you can point me to the part of the spec that specifies how that window 
should look like, I can cook up a patch. Or you can do it of course ;).


Alex


Reply via email to