Thanks Ben! Some Replies and doubts inlined. Regards, Shaveta
-----Original Message----- From: Benjamin Herrenschmidt [mailto:b...@kernel.crashing.org] Sent: Sunday, September 13, 2015 4:39 AM To: Leekha Shaveta-B20052 <shav...@freescale.com>; Andrew Fish <af...@apple.com>; edk2-devel@lists.01.org <edk2-de...@ml01.01.org>; Tian, Feng <feng.t...@intel.com> Subject: Re: PCI and non-1:1 mapping of MMIO space (Doubt o PCI Root bridge IOMap and IoAllocateBuffer) On Sat, 2015-09-12 at 18:04 +0000, Leekha Shaveta wrote: > Hi > > I was implementing PCI RootBridgeIo protocol and have some doubts in > "IoMap" and "AllocateBuffer" functions of this protocol. > > In our platform, PCI space is starting form address 0x50_0000_0000 > (40 bit addressable) > And its mapping on PCI bus is like: > 50_0000_0000 => 0000_0000 (32 bit) Is the above the mapping of MMIO or DMA ? Because AllocateBuffer/IoMap are all about DMA, not MMIO [Shaveta] It is MMIO mapping ... Note that regarding the issue of non-1:1 mappings vs. GetBarAttributes(), I have patches to fix that in the core by enabling us to use the mTranslationOffset field of the ACPI descriptor. I will be able to post these some time next week. [Shaveta] What does those patches does? As I my case also, CPU address 50_4000_0000 is being translated to PCI bus address 0x4000_0000 For memory transactions. So its also a case of non- 1:1 mapping For Mem.Read/Mem.Write I have added a translation offset. For BARs programming also, do we need to handle it? How have you handled it? > > From where the "AllocateBuffer" function should allocate memory when > > asked by any PCI device? > What is the meaning of "Allocates pages that are suitable for an > EfiPciOperationBusMasterCommonBuffer or > EfiPciOperationBusMasterCommonBuffer64 mapping" > > How to manage mapping in "RootBridgeIoMap" function? Well, it depends if the mapping you provided above is an MMIO mapping or a DMA mapping ... I to looks like MMIO to me in which case it has strictly nothing to do with IoMap/AllocateBuffer [Shaveta] then what kind of mapping IoMap function should do when PCI NIC card ask for this IoMap during its "ping" operation ?? Cheers, Ben > Thanks and Regards, > Shaveta > > -----Original Message----- > From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of > Tian, Feng > Sent: Wednesday, August 26, 2015 7:24 AM > To: Benjamin Herrenschmidt <b...@kernel.crashing.org>; Andrew Fish < > af...@apple.com> > Cc: edk2-devel@lists.01.org <edk2-de...@ml01.01.org>; Tian, Feng < > feng.t...@intel.com> > Subject: Re: [edk2] PCI and non-1:1 mapping of MMIO space > > Hi, Ben & Andrew > > The GetBarAttributes() returns a set of ACPI 2.0 resource descriptors > that describe the current configuration of the BARs of the PCI > controller. > > What I understood is the returned value of GetBarAttributes() is a CPU > address rather than a PCI address. From the view of PciIo, nobody > needs to know/use Bar's PCI address. > > Thanks > Feng > > -----Original Message----- > From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of > Benjamin Herrenschmidt > Sent: Wednesday, August 26, 2015 07:54 > To: Andrew Fish > Cc: edk2-devel@lists.01.org > Subject: Re: [edk2] PCI and non-1:1 mapping of MMIO space > > (Argh, I keep sending these from my IBM address which isn't the one on > the list. Sorry Andrew for the duplicates). > > On Tue, 2015-08-25 at 14:48 -0700, Andrew Fish wrote: > > > > > > So if we stick to the definition of GetBarAttributes() only > > > returning a BAR value, then it's impossible to implement a PCI GOP > > > driver by following the spec. > > > > > I came to that conclusion too. > > :( > > > > Now, there's one thing that might work, which would be to exploit > > > the "AddressTranslationOffset" field of the ACPI resource > > > descriptor. > > > > > How do you represent a system like this in ACPI? It might be a good > > idea to solve it in a similar way. > > Unfortunately, I am not familiar with the details of ACPI, I only have > a high level understanding of it. Our platforms have been Open > Firmware based for as far as I've been involved with them and lately, > we use C -generated flat device-tree along with a custom runtime > firmwarealled a OPAL). > > At this point I'm not (yet) considering a move to ACPI. I'm doing a > proof of concept ppc64 UEFI port to get a feel of the water > temperature more than anything else (though I'll be happy to > contribute things back once I get the appropriate legalese sorted > internally to IBM). > > > The PCI IO was designed to not required the 1:1 mapping. The direct > > access to the Framebuffer came along later, as was mostly a fallback > > for the OS on a safe mode boot kind of thing. I think we missed > > passing the frame buffer out on a system that was not 1:1. > > Ok. Well, it will be needed even on non-1:1 systems, we will have > similar requirements of the OS needing an early boot framebuffer > etc... > and I suspect the desire to directly access BARs (at least > prefetchable > ones) from the CPU isn't going away in other areas either. > > So maybe we should try to address this. I'm trying to figure out how > to join the appropriate working groups etc... so I can participate in > the spec side discussion as well (which I'll need to do for other > reasons anyway if we are ever going to officially defining the ppc64 > ABI in the spec). > > Cheers, > Ben. > > > Thanks, > > > > Andrew Fish > > > > > Cheers, > > > Ben. > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel