Sounds good. Mike
> -----Original Message----- > From: Leif Lindholm [mailto:leif.lindh...@linaro.org] > Sent: Monday, December 4, 2017 7:54 AM > To: Kinney, Michael D <michael.d.kin...@intel.com> > Cc: Udit Kumar <udit.ku...@nxp.com>; Meenakshi Aggarwal > <meenakshi.aggar...@nxp.com>; Varun Sethi > <v.se...@nxp.com>; edk2-devel@lists.01.org; Gao, Liming > <liming....@intel.com>; Ard Biesheuvel > <ard.biesheu...@linaro.org> > Subject: Re: [edk2] [PATCH 1/1] MdePkg/IoLib: Add support > for big-endian MMIO > > Hi Mike, > > This separate library would only be necessary > specifically because > an additional library to the default platform IoLib was > needed. > So while it's another dependency, it would likely reduce > image size. > > Which is why I was leaning towards a wrapper. > > This also means the actual hw-dependent bit gets > abstracted away from > the portable and predictable byteswapping. Which always > makes me > slightly more comfortable. > > If you're OK with the concept, I can throw an RFC > together. > > Best Regards, > > Leif > > On Mon, Dec 04, 2017 at 03:31:10PM +0000, Kinney, Michael > D wrote: > > Leif, > > > > I may make more sense to add to MdePkg as a peer to > IoLib. > > This minimizes the package dependencies for Si modules. > > > > I am ok as a wrapper on top of IoLib. Whatever reduces > > code duplication and reduces maintenance. > > > > Best regards, > > > > Mike > > > > > -----Original Message----- > > > From: Leif Lindholm [mailto:leif.lindh...@linaro.org] > > > Sent: Monday, December 4, 2017 4:36 AM > > > To: Kinney, Michael D <michael.d.kin...@intel.com> > > > Cc: Udit Kumar <udit.ku...@nxp.com>; Meenakshi > Aggarwal > > > <meenakshi.aggar...@nxp.com>; Varun Sethi > > > <v.se...@nxp.com>; edk2-devel@lists.01.org; Gao, > Liming > > > <liming....@intel.com>; Ard Biesheuvel > > > <ard.biesheu...@linaro.org> > > > Subject: Re: [edk2] [PATCH 1/1] MdePkg/IoLib: Add > support > > > for big-endian MMIO > > > > > > Mike, > > > > > > In that case - do you think it should be added to > > > MdeModulePkg? > > > > > > Should it be implemented simply as a wrapper on IoLib > > > (depending on > > > it)? > > > > > > / > > > Leif > > > > > > On Fri, Dec 01, 2017 at 10:41:26PM +0000, Kinney, > Michael > > > D wrote: > > > > Udit, > > > > > > > > I agree with your concern. > > > > > > > > I am in favor of adding new APIs that perform the > > > > byte swap operations. > > > > > > > > Mike > > > > > > > > > -----Original Message----- > > > > > From: Udit Kumar [mailto:udit.ku...@nxp.com] > > > > > Sent: Friday, December 1, 2017 9:58 AM > > > > > To: Leif Lindholm <leif.lindh...@linaro.org>; > > > Meenakshi > > > > > Aggarwal <meenakshi.aggar...@nxp.com>; Varun > Sethi > > > > > <v.se...@nxp.com> > > > > > Cc: Kinney, Michael D > <michael.d.kin...@intel.com>; > > > edk2- > > > > > de...@lists.01.org; Gao, Liming > > > <liming....@intel.com>; > > > > > Ard Biesheuvel <ard.biesheu...@linaro.org> > > > > > Subject: RE: [edk2] [PATCH 1/1] MdePkg/IoLib: Add > > > support > > > > > for big-endian MMIO > > > > > > > > > > Thanks Leif, > > > > > > > > > > > It may require a little bit more of up-front > work, > > > but > > > > > the end result will be a > > > > > > platform port that works with the intended edk2 > > > design > > > > > principles rather than > > > > > > > > > > Yes, this will be re-design/code for us, breaking > all > > > > > software pieces into > > > > > smaller blocks and exposing protocol from the > same. > > > > > This could be managed. > > > > > > > > > > But how do you see, if there is such dependency > oN > > > lib. > > > > > Say a driver which is in BE mode, and is using > > > DebugLib > > > > > (BaseDebugLibSerialPort) > > > > > And DebugLib uses SerialPortLib, which is in LE > mode > > > > > > > > > > Thanks > > > > > Udit > > > > > > > > > > > -----Original Message----- > > > > > > From: edk2-devel [mailto:edk2-devel- > > > > > boun...@lists.01.org] On Behalf Of Leif > > > > > > Lindholm > > > > > > Sent: Friday, December 01, 2017 4:28 PM > > > > > > To: Meenakshi Aggarwal > <meenakshi.aggar...@nxp.com> > > > > > > Cc: Kinney, Michael D > <michael.d.kin...@intel.com>; > > > > > edk2-devel@lists.01.org; > > > > > > Gao, Liming <liming....@intel.com>; Ard > Biesheuvel > > > > > > <ard.biesheu...@linaro.org> > > > > > > Subject: Re: [edk2] [PATCH 1/1] MdePkg/IoLib: > Add > > > > > support for big-endian > > > > > > MMIO > > > > > > > > > > > > On Thu, Nov 30, 2017 at 04:15:38AM +0000, > Meenakshi > > > > > Aggarwal wrote: > > > > > > > Hi Leif, Mike, > > > > > > > > > > > > > > > > > > > > > NXP boards, at present, have few controllers > with > > > big > > > > > endian and other > > > > > > > with little endian memory access. > > > > > > > > > > > > Sure, this is not a problem. > > > > > > > > > > > > > Maximum controllers depend on SocLib library > for > > > > > clock information and > > > > > > > endianness for SocLib and controllers is > > > different. > > > > > > > > > > > > OK, I see in SocLib you have something called a > Gur > > > > > that is read once (and again > > > > > > does a special per-device Pcd dance for runtime > > > > > selection between > > > > > > byteswapping Mmio and plain Mmio). > > > > > > > > > > > > > So this option will not work for us, > > > > > > > You would then just do (in your .dsc): > > > > > > > > Platform/NXP/Drivers/WatchDog/WatchDogDxe.inf { > > > > > > > IoLib|<path to BeIoLib .inf> > > > > > > > } > > > > > > > > > > > > > > Because all libraries included by WatchDog > will > > > then > > > > > access BE mode Mmio > > > > > > APIs. > > > > > > > > > > > > Which libraries performing Mmio accesses are > you > > > > > intending to include in your > > > > > > watchdog driver? You have submitted none as > part of > > > > > this series. > > > > > > > > > > > > > And breaking code into separate modules with > > > > > different access will be > > > > > > > very difficult. > > > > > > > > > > > > It may require a little bit more of up-front > work, > > > but > > > > > the end result will be a > > > > > > platform port that works with the intended edk2 > > > design > > > > > principles rather than > > > > > > against them. And that will reduce the overall > > > effort > > > > > (not to mention code > > > > > > duplication). > > > > > > > > > > > > From the patches you have sent, the only > required > > > > > change I see (if a > > > > > > byteswapping IoLib was added to edk2) would be > to > > > > > create a tiny driver for this > > > > > > "Gur" device that installs a protocol > containing a > > > > > single function for reading > > > > > > from that device's register space. That driver > can > > > be > > > > > built against the swapping > > > > > > or non-swapping IoLib as appropriate. > > > > > > > > > > > > > Watchdog is not the only module which need BE > > > Mmio > > > > > APIs, we have MMC > > > > > > > and other controllers also with same > requirement. > > > > > > > > > > > > And the same solutions are possible everywhere. > > > > > > > > > > > > Best Regards, > > > > > > > > > > > > Leif > > > > > > > > > > > > > We need BE Mmio APIs with a different name. > > > > > > > > > > > > > > Please see the possibility. > > > > > > > > > > > > > > Thanks & Regards, > > > > > > > Meenakshi > > > > > > > > > > > > > > > -----Original Message----- > > > > > > > > From: Leif Lindholm > > > > > [mailto:leif.lindh...@linaro.org] > > > > > > > > Sent: Thursday, November 30, 2017 1:19 AM > > > > > > > > To: Kinney, Michael D > > > <michael.d.kin...@intel.com> > > > > > > > > Cc: Meenakshi Aggarwal > > > > > <meenakshi.aggar...@nxp.com>; Gao, Liming > > > > > > > > <liming....@intel.com>; edk2- > > > de...@lists.01.org; > > > > > Ard Biesheuvel > > > > > > > > <ard.biesheu...@linaro.org> > > > > > > > > Subject: Re: [edk2] [PATCH 1/1] > MdePkg/IoLib: > > > Add > > > > > support for > > > > > > > > big-endian MMIO > > > > > > > > > > > > > > > > I guess there is no strict rule about a > driver > > > only > > > > > directly > > > > > > > > accessing one piece of HW? > > > > > > > > > > > > > > > > Still, that would be one possible solution: > > > > > breaking accesses to a > > > > > > > > separate HW in need of byteswapping out > into > > > its > > > > > own module and > > > > > > > > letting it override IoLib version there. > > > > > > > > > > > > > > > > Regards, > > > > > > > > > > > > > > > > Leif > > > > > > > > > > > > > > > > On Wed, Nov 29, 2017 at 07:25:05PM +0000, > > > Kinney, > > > > > Michael D wrote: > > > > > > > > > Leif, > > > > > > > > > > > > > > > > > > I agree that this should be described as > byte > > > > > swapping. > > > > > > > > > > > > > > > > > > What about a module that needs to access > HW > > > with > > > > > and without the > > > > > > > > > bytes swapped? It gets more complex if a > > > module > > > > > is linked against > > > > > > > > > several libs and some libs access HW with > > > bytes > > > > > swapped and some > > > > > > > > > do not. > > > > > > > > > > > > > > > > > > Thanks, > > > > > > > > > > > > > > > > > > Mike > > > > > > > > > > > > > > > > > > > -----Original Message----- > > > > > > > > > > From: edk2-devel [mailto:edk2-devel- > > > > > boun...@lists.01.org] On > > > > > > > > > > Behalf Of Leif Lindholm > > > > > > > > > > Sent: Wednesday, November 29, 2017 4:51 > AM > > > > > > > > > > To: Meenakshi Aggarwal > > > > > <meenakshi.aggar...@nxp.com>; Gao, Liming > > > > > > > > > > <liming....@intel.com> > > > > > > > > > > Cc: Kinney, Michael D > > > > > <michael.d.kin...@intel.com>; > > > > > > > > > > edk2-devel@lists.01.org; Ard Biesheuvel > > > > > > > > > > <ard.biesheu...@linaro.org> > > > > > > > > > > Subject: Re: [edk2] [PATCH 1/1] > > > MdePkg/IoLib: > > > > > Add support for > > > > > > > > > > big-endian MMIO > > > > > > > > > > > > > > > > > > > > Hi Meenakshi, > > > > > > > > > > > > > > > > > > > > I finally got around to looking at the > > > watchdog > > > > > code (that uses > > > > > > > > > > this library), and that has convinced > me > > > the > > > > > best solution is to > > > > > > > > > > do what Liming proposed. > > > > > > > > > > > > > > > > > > > > Looking at this snippet: > > > > > > > > > > > > > > > > > > > > > +STATIC > > > > > > > > > > > +UINT16 > > > > > > > > > > > +EFIAPI > > > > > > > > > > > +WdogRead ( > > > > > > > > > > > + IN UINTN Address > > > > > > > > > > > + ) > > > > > > > > > > > +{ > > > > > > > > > > > + if (FixedPcdGetBool > > > (PcdWdogBigEndian)) { > > > > > > > > > > > + return BeMmioRead16 (Address); > > > > > > > > > > > + } else { > > > > > > > > > > > + return MmioRead16(Address); > > > > > > > > > > > + } > > > > > > > > > > > > > > > > > > > > This is actually a pretty good > > > demonstration of > > > > > the arguments > > > > > > > > > > that were made with regards to how the > > > BeIoLib > > > > > could be just > > > > > > > > > > another implementation of IoLib. > > > > > > > > > > > > > > > > > > > > You would then just do (in your .dsc): > > > > > > > > > > > > > Platform/NXP/Drivers/WatchDog/WatchDogDxe.inf > > > > > { > > > > > > > > > > IoLib|<path to BeIoLib .inf> > > > > > > > > > > } > > > > > > > > > > > > > > > > > > > > This causes the big-endian version of > the > > > > > library to be used for > > > > > > > > > > this component. This makes these > > > Wdog<access> > > > > > functions and the > > > > > > > > > > Pcd redundant, and the rest of the code > can > > > use > > > > > > > > > > MmioRead16()/MmioWrite16() > > > > > > > > > > directly. > > > > > > > > > > > > > > > > > > > > But then, it is not really a big-endian > or > > > > > litte-endian version > > > > > > > > > > of the library we need. We always know > > > which > > > > > endianness we are > > > > > > > > > > building for. > > > > > > > > > > What we need is a byteswapping flavour > of > > > > > IoLib. > > > > > > > > > > > > > > > > > > > > So Liming, what if we do something like > > > adding > > > > > a > > > > > > > > > > > > > > > > > > > MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSwa > > > > > > > > > > p.inf > > > > > > > > > > --- > > > > > > > > > > [Defines] > > > > > > > > > > INF_VERSION = > > > 0x0001001A > > > > > > > > > > BASE_NAME = > > > > > > > > > > BaseIoLibIntrinsicSwap > > > > > > > > > > MODULE_UNI_FILE = > > > > > > > > > > BaseIoLibIntrinsic.uni > > > > > > > > > > FILE_GUID = > > > d4a60d44- > > > > > 3688-4a50- > > > > > > > > > > b2d0-5c6fc2422523 > > > > > > > > > > MODULE_TYPE = BASE > > > > > > > > > > VERSION_STRING = 1.0 > > > > > > > > > > LIBRARY_CLASS = > IoLib > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > # > > > > > > > > > > # VALID_ARCHITECTURES = IA32 > X64 > > > EBC > > > > > IPF ARM > > > > > > > > > > AARCH64 > > > > > > > > > > # > > > > > > > > > > > > > > > > > > > > [Sources] > > > > > > > > > > BaseIoLibIntrinsicInternal.h > > > > > > > > > > IoHighLevel.c > > > > > > > > > > IoLib.c > > > > > > > > > > IoLibEbc.c # Asserts on all > i/o > > > port > > > > > accesses > > > > > > > > > > IoLibMmioBuffer.c > > > > > > > > > > > > > > > > > > > > [Packages] > > > > > > > > > > MdePkg/MdePkg.dec > > > > > > > > > > > > > > > > > > > > [LibraryClasses] > > > > > > > > > > DebugLib > > > > > > > > > > BaseLib > > > > > > > > > > > > > > > > > > > > [BuildOptions] > > > > > > > > > > GCC:*_*_*_CC_FLAGS = -DSWAP_BYTES > > > > > > > > > > --- > > > > > > > > > > > > > > > > > > > > And then add > > > > > > > > > > > > > > > > > > > > #ifdef SWAP_BYTES > > > > > > > > > > return SwapBytesXX (Value); > > > > > > > > > > #else > > > > > > > > > > return Value; > > > > > > > > > > #fi > > > > > > > > > > > > > > > > > > > > for the read operations and > > > > > > > > > > > > > > > > > > > > #ifdef SWAP_BYTES > > > > > > > > > > *(type)Address = SwapBytesXX (Value); > > > #else > > > > > > > > > > *(type)Address = Value; > > > > > > > > > > #fi > > > > > > > > > > > > > > > > > > > > for the write operations in IoLib.c? > > > > > > > > > > > > > > > > > > > > / > > > > > > > > > > Leif > > > > > > > > > > > > > > > > > > > > On Mon, Nov 27, 2017 at 06:06:33AM > +0000, > > > > > Meenakshi Aggarwal > > > > > > > > > > wrote: > > > > > > > > > > > Hi Leif, > > > > > > > > > > > > > > > > > > > > > > This is regarding Big-Endian Library > > > patch > > > > > ([PATCH v2 > > > > > > > > > > 1/9] > > > > > > > > > > > Platform/NXP: Add support for Big > Endian > > > Mmio > > > > > APIs) > > > > > > > > > > > > > > > > > > > > > > We have started this discussion > before > > > and > > > > > the > > > > > > > > > > suggestion was to > > > > > > > > > > > create a separate .inf file keeping > APIs > > > name > > > > > same e.g. > > > > > > > > > > > MmioRead/MmioWrite in MdePkg. > > > > > > > > > > > > > > > > > > > > > > But we can't go with this approach > > > (reason > > > > > mentioned > > > > > > > > > > by Udit). > > > > > > > > > > > > > > > > > > > > > > So please suggest if we should keep > this > > > > > library > > > > > > > > > > under Platform/NXP > > > > > > > > > > > or I send a new patch moving this > library > > > in > > > > > MdePkg. > > > > > > > > > > > > > > > > > > > > > > But we have to keep a different name > for > > > Big > > > > > Endian > > > > > > > > > > MMIO APIs. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Thanks, > > > > > > > > > > > Meenakshi > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -----Original Message----- > > > > > > > > > > > > From: Udit Kumar > > > > > > > > > > > > Sent: Monday, October 23, 2017 > 12:38 PM > > > > > > > > > > > > To: Gao, Liming > <liming....@intel.com>; > > > > > Meenakshi > > > > > > > > > > Aggarwal > > > > > > > > > > > > <meenakshi.aggar...@nxp.com>; Ard > > > > > Biesheuvel > > > > > > > > > > > > <ard.biesheu...@linaro.org>; > Kinney, > > > > > Michael D > > > > > > > > > > > > <michael.d.kin...@intel.com>; edk2- > > > > > > > > > > de...@lists.01.org > > > > > > > > > > > > Subject: RE: [edk2] [PATCH 1/1] > > > > > MdePkg/IoLib: Add > > > > > > > > > > support for big-endian > > > > > > > > > > > > MMIO > > > > > > > > > > > > > > > > > > > > > > > > Hi Meenakshi/Liming, > > > > > > > > > > > > My 2 cents, around this. > > > > > > > > > > > > > > > > > > > > > > > > 1) > > > > > > > > > > > > Having a new lib for BE read might > not > > > be > > > > > helpful > > > > > > > > > > for us, e.g. a IP which is in > > > > > > > > > > > > BE mode access the UART for print > or > > > system > > > > > > > > > > registers which are in LE, then > > > > > > > > > > > > with new Lib, we will get all > > > read/write in > > > > > BE mode > > > > > > > > > > > > > > > > > > > > > > > > 2) > > > > > > > > > > > > Especially for our IPs, which are > > > changing > > > > > from BE > > > > > > > > > > to LE depending on > > > > > > > > > > > > platform. > > > > > > > > > > > > As said before, having BE read lib > with > > > API > > > > > name of > > > > > > > > > > MmioRead32 etc, will not > > > > > > > > > > > > help (I guess Meenakshi already > seen > > > some > > > > > problems > > > > > > > > > > around this) Adding a > > > > > > > > > > > > new lib with MmioRead32BE API name > > > could > > > > > help, but > > > > > > > > > > IP driver we need to > > > > > > > > > > > > take care of IP mode either by Pcd > or > > > > > #define, to > > > > > > > > > > select MmioRead32 or > > > > > > > > > > > > MmioRead32BE. > > > > > > > > > > > > This conditional compile needs to > be > > > done > > > > > for all > > > > > > > > > > IPs (which works in BE/LE > > > > > > > > > > > > mode on different platforms). > > > > > > > > > > > > > > > > > > > > > > > > My preferred way of implementation > to > > > use > > > > > one > > > > > > > > > > function in IP driver, And > > > > > > > > > > > > based on IP mode, do the switch. > > > > > > > > > > > > > > > > > > > > > > > > New Lib could have function like > below > > > > > > > > > > > > MmioRead32Generic(IN UINTN > > > Address, > > > > > BOOL > > > > > > > > > > IsIPBE) { > > > > > > > > > > > > UINT32 > > > Value; > > > > > > > > > > > > > > > > > > > > > > > > ASSERT ((Address & 3) == 0); > > > > > > > > > > > > Value = *(volatile > UINT32*)Address; > > > > > > > > > > > > If(IsIPBE) > > > > > > > > > > > > Value = SwapBytes32(Value); > > > return > > > > > Value; } > > > > > > > > > > > > > > > > > > > > > > > > And IP driver can use it > > > > > > > > > > > > MmioRead32Generic(ADDR, > > > > > > > > > > > > > > > FixedPcdGet(This_IP_Mode_For_This_platform) > > > > > > > > > > > > > > > > > > > > > > > > Comments are welcome. > > > > > > > > > > > > > > > > > > > > > > > > Regards > > > > > > > > > > > > Udit > > > > > > > > > > > > > > > > > > > > > > > > > -----Original Message----- > > > > > > > > > > > > > From: edk2-devel [mailto:edk2- > devel- > > > > > > > > > > boun...@lists.01.org] On Behalf Of > > > > > > > > > > > > > Gao, Liming > > > > > > > > > > > > > Sent: Monday, October 16, 2017 > 8:48 > > > AM > > > > > > > > > > > > > To: Meenakshi Aggarwal > > > > > > > > > > <meenakshi.aggar...@nxp.com>; Ard > > > Biesheuvel > > > > > > > > > > > > > <ard.biesheu...@linaro.org>; > Kinney, > > > > > Michael D > > > > > > > > > > > > > <michael.d.kin...@intel.com>; > edk2- > > > > > > > > > > de...@lists.01.org > > > > > > > > > > > > > Subject: Re: [edk2] [PATCH 1/1] > > > > > MdePkg/IoLib: Add > > > > > > > > > > support for > > > > > > > > > > > > > big-endian MMIO > > > > > > > > > > > > > > > > > > > > > > > > > > Meenakshi: > > > > > > > > > > > > > I suggest to introduce new > IoLib > > > > > library > > > > > > > > > > instance, not to add new IoLib > > > > > > > > > > > > APIs. > > > > > > > > > > > > > New IoLib library instance will > > > perform > > > > > IO > > > > > > > > > > operation as the big > > > > > > > > > > > > > endian. You can update > > > > > > > > > > MdePkg/Library/BaseIoLibIntrinsic > instance, > > > add > > > > > > > > > > > > > new source file and new INF for > it. > > > > > > > > > > > > > > > > > > > > > > > > > > UINT32 > > > > > > > > > > > > > EFIAPI > > > > > > > > > > > > > MmioRead32 ( > > > > > > > > > > > > > IN UINTN Address > > > > > > > > > > > > > ) > > > > > > > > > > > > > { > > > > > > > > > > > > > UINT32 > > > > > Value; > > > > > > > > > > > > > > > > > > > > > > > > > > ASSERT ((Address & 3) == 0); > > > > > > > > > > > > > Value = *(volatile > UINT32*)Address; > > > > > > > > > > > > > return SwapBytes32(Value); } > > > > > > > > > > > > > > > > > > > > > > > > > > Thanks > > > > > > > > > > > > > Liming > > > > > > > > > > > > > >-----Original Message----- > > > > > > > > > > > > > >From: Meenakshi Aggarwal > > > > > > > > > > [mailto:meenakshi.aggar...@nxp.com] > > > > > > > > > > > > > >Sent: Friday, October 13, 2017 > 2:07 > > > PM > > > > > > > > > > > > > >To: Ard Biesheuvel > > > > > <ard.biesheu...@linaro.org>; > > > > > > > > > > Kinney, Michael D > > > > > > > > > > > > > ><michael.d.kin...@intel.com>; > edk2- > > > > > > > > > > de...@lists.01.org; Gao, Liming > > > > > > > > > > > > > ><liming....@intel.com> > > > > > > > > > > > > > >Subject: RE: [edk2] [PATCH 1/1] > > > > > MdePkg/IoLib: > > > > > > > > > > Add support for > > > > > > > > > > > > > >big-endian MMIO > > > > > > > > > > > > > > > > > > > > > > > > > > > >Hi All, > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >It’s a pretty old discussion, we > > > have > > > > > left the > > > > > > > > > > upstreaming of NXP > > > > > > > > > > > > > >package in between because of > some > > > other > > > > > work, > > > > > > > > > > but have started it > > > > > > > > > > > > > >again > > > > > > > > > > > > > now. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >Issue : Few NXP modules support > Big > > > > > Endian > > > > > > > > > > MMIOs as these are ported > > > > > > > > > > > > > >from PowerPC. > > > > > > > > > > > > > > > > > > > > > > > > > > > >Solution suggested : Create a > > > separate > > > > > library > > > > > > > > > > for BE MMIO APIs. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >So what I have done is, I have > > > created a > > > > > > > > > > separate library to support > > > > > > > > > > > > > >BE MMIO APIs and currently > keeping > > > it to > > > > > my > > > > > > > > > > package. > > > > > > > > > > > > > >This library is basically a > wrapper > > > over > > > > > > > > > > existing MMIO APIs. > > > > > > > > > > > > > > > > > > > > > > > > > > > >UINT32 > > > > > > > > > > > > > >EFIAPI > > > > > > > > > > > > > >BeMmioRead32 ( > > > > > > > > > > > > > > IN UINTN Address > > > > > > > > > > > > > > ) > > > > > > > > > > > > > >{ > > > > > > > > > > > > > > UINT32 Value; > > > > > > > > > > > > > > > > > > > > > > > > > > > > Value = MmioRead32(Address); > > > > > > > > > > > > > > > > > > > > > > > > > > > > return SwapBytes32(Value); } > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >Need your opinion on below > optinos: > > > > > > > > > > > > > > > > > > > > > > > > > > > >1. Will this be a good idea to > make > > > this > > > > > library > > > > > > > > > > a part of MdePkg? OR > > > > > > > > > > > > > > > > > > > > > > > > > > > >2. Add a new file e.g. > IoBeMmio.c > > > like > > > > > > > > > > IoHighLevel.c in > > > > > > > > > > > > > > >MdePkg/Library/BaseIoLibIntrinsic/ > > > > > > > > > > > > > > And made these APIs a part of > IoLib > > > > > itself. OR > > > > > > > > > > > > > > > > > > > > > > > > > > > >3. Keep this library internal to > NXP > > > > > package. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >Please provide your inputs. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >Thanks & Regards, > > > > > > > > > > > > > >Meenakshi > > > > > > > > > > > > > > > > > > > > > > > > > > > >> -----Original Message----- > > > > > > > > > > > > > >> From: Bhupesh Sharma > > > > > > > > > > > > > >> Sent: Monday, October 17, 2016 > > > 3:28 PM > > > > > > > > > > > > > >> To: Ard Biesheuvel > > > > > > > > > > <ard.biesheu...@linaro.org>; Kinney, > > > Michael D > > > > > > > > > > > > > >> <michael.d.kin...@intel.com> > > > > > > > > > > > > > >> Cc: Gao, Liming > > > > > <liming....@intel.com>; edk2- > > > > > > > > > > de...@ml01.01.org; > > > > > > > > > > > > > >> Meenakshi Aggarwal > > > > > > > > > > <meenakshi.aggar...@nxp.com> > > > > > > > > > > > > > >> Subject: RE: [edk2] [PATCH > 1/1] > > > > > MdePkg/IoLib: > > > > > > > > > > Add support for > > > > > > > > > > > > > >> big-endian MMIO > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> Hi Ard, > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> > -----Original Message----- > > > > > > > > > > > > > >> > From: Ard Biesheuvel > > > > > > > > > > [mailto:ard.biesheu...@linaro.org] > > > > > > > > > > > > > >> > Sent: Monday, October 17, > 2016 > > > 1:12 > > > > > PM > > > > > > > > > > > > > >> > To: Kinney, Michael D > > > > > > > > > > <michael.d.kin...@intel.com> > > > > > > > > > > > > > >> > Cc: Gao, Liming > > > > > <liming....@intel.com>; > > > > > > > > > > Bhupesh Sharma > > > > > > > > > > > > > >> > <bhupesh.sha...@nxp.com>; > edk2- > > > > > > > > > > de...@ml01.01.org > > > > > > > > > > > > > >> > Subject: Re: [edk2] [PATCH > 1/1] > > > > > > > > > > MdePkg/IoLib: Add support for > > > > > > > > > > > > > >> > big- endian MMIO > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > On 17 October 2016 at 05:10, > > > Kinney, > > > > > Michael > > > > > > > > > > D > > > > > > > > > > > > > >> > <michael.d.kin...@intel.com> > > > wrote: > > > > > > > > > > > > > >> > > Bhupesh, > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > It is also possible to add > an > > > ARM > > > > > specific > > > > > > > > > > PCD to select > > > > > > > > > > > > > >> > > endianness and update > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > MdePkg/Library/BaseIoLibIntrinsic/IoLibArm.c to > > > > > use that PCD in > > > > > > > > > > > > > >> > > MmioRead/Write() APIs in > that > > > file > > > > > to > > > > > > > > > > support both endian types. > > > > > > > > > > > > > >> > > You can use the > SwapBytesxx() > > > > > functions > > > > > > > > > > from BaseLib(as > > > > > > > > > > > > > >> > Laszlo > > > > > > > > > > > > > >> > > suggested) based on the > > > setting of > > > > > this > > > > > > > > > > ARM specific PCD. > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > Modules that link against > this > > > lib > > > > > can > > > > > > > > > > select endianness by > > > > > > > > > > > > > >> > > setting PCD in the scope > of > > > that > > > > > module. > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > The IPF version of IoLib > uses > > > an > > > > > IPF > > > > > > > > > > specific PCD to translate > > > > > > > > > > > > > >> > > I/O port accesses to MMIO > > > > > accesses. So > > > > > > > > > > there is already an > > > > > > > > > > > > > >> > > example of an arch > specific > > > PCD in > > > > > this > > > > > > > > > > lib instance. > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > This is not a platform wide > > > thing, > > > > > it is a > > > > > > > > > > per-device property > > > > > > > > > > > > > >> > whether the MMIO occurs in > big > > > > > endian or > > > > > > > > > > little endian manner. > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > So I think Liming's > suggestion > > > makes > > > > > sense: > > > > > > > > > > create an IoLib > > > > > > > > > > > > > >> > implementation that performs > the > > > > > byte > > > > > > > > > > swapping, and selectively > > > > > > > > > > > > > >> > incorporate it into drivers > that > > > > > require it > > > > > > > > > > using > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > BeMmioDeviceDxe.inf { > > > > > > > > > > > > > >> > <LibraryClasses> > > > > > > > > > > > > > >> > > > > > > IoLib|SomePkg/Library/BigEndianIoLib.inf > > > > > > > > > > > > > >> > } > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> That's correct. I think > creating a > > > > > separate > > > > > > > > > > IoLib for byte-swapping > > > > > > > > > > > > > >> makes sense. > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> We will rework the patch > > > accordingly. > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> Regards, > > > > > > > > > > > > > >> Bhupesh > > > > > > > > > > > > > > > > > > _______________________________________________ > > > > > > > > > > > > > edk2-devel mailing list > > > > > > > > > > > > > edk2-devel@lists.01.org > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://emea01.safelinks.protection.outlook.com/?url=http > > > > > s%3A%2F%2Fl > > > > > > > > ist > > > > > > > > s.01.org%2Fmailman%2Flistinfo%2Fedk2- > > > > > > > > > > > > > > > > > > > > > > > devel&data=02%7C01%7Cmeenakshi.aggarwal%40nxp.com%7C695e4 > > > > > 3cbb51 > > > > > > > > > > > > > > > > > > > > > > > a471cd44608d5376230b0%7C686ea1d3bc2b4c6fa92cd99c5c301635% > > > > > 7C0%7C0 > > > > > > > > > > > > > > > > > %7C636475817220663612&sdata=hwQh8dfUkVGzm7uQB9%2FirexmYEk > > > > > dEQ > > > > > > > > %2Bu97606L%2FHEfg%3D&reserved=0 > > > > > > > > > > > > > _______________________________________________ > > > > > > > > > > edk2-devel mailing list > > > > > > > > > > edk2-devel@lists.01.org > > > > > > > > > > > > > > > > > > > > > > > > > > > https://emea01.safelinks.protection.outlook.com/?url=http > > > > > s%3A%2F%2Fl > > > > > > > > ist > > > > > > > > s.01.org%2Fmailman%2Flistinfo%2Fedk2- > > > > > > > > > > > > > > > > > > > > > > > devel&data=02%7C01%7Cmeenakshi.aggarwal%40nxp.com%7C695e4 > > > > > 3cbb51 > > > > > > > > > > > > > > > > > > > > > > > a471cd44608d5376230b0%7C686ea1d3bc2b4c6fa92cd99c5c301635% > > > > > 7C0%7C0 > > > > > > > > > > > > > > > > > %7C636475817220663612&sdata=hwQh8dfUkVGzm7uQB9%2FirexmYEk > > > > > dEQ > > > > > > > > %2Bu97606L%2FHEfg%3D&reserved=0 > > > > > > _______________________________________________ > > > > > > edk2-devel mailing list > > > > > > edk2-devel@lists.01.org > > > > > > > > > > > > > > > https://emea01.safelinks.protection.outlook.com/?url=http > > > > > s%3A%2F%2Flists.01 > > > > > > .org%2Fmailman%2Flistinfo%2Fedk2- > > > > > > > > > > > > > > > devel&data=02%7C01%7Cudit.kumar%40nxp.com%7Cd06018336a064 > > > > > 8fa8e440 > > > > > > > > > > > > > > > 8d538aa5f19%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7C > > > > > 6364772 > > > > > > > > > > > > > > > 26761253124&sdata=bAU%2BOidbzbKw76OOq5%2FUplwQbo8iMnE3alH > > > > > Y4ptAX > > > > > > MU%3D&reserved=0 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel