> From: Laszlo Ersek [mailto:[email protected]]
> Sent: Monday, February 08, 2016 1:20 PM
> 
> On 02/06/16 09:38, Bhupesh Sharma wrote:
> >> From: Laszlo Ersek
> >> Sent: Friday, February 05, 2016 2:27 AM
> >>
> >> On 02/03/16 22:39, Leif Lindholm wrote:
> >>> Hi Shaveta,
> >>>
> >>> On Tue, Feb 02, 2016 at 07:05:03AM +0000, Shaveta Leekha wrote:
> >>>> Is there some SATA 3.0 AHCI driver implementation in UEFI / EDK
> code?
> >>>> The one I need to write for our platform is not PCI based.
> >>>>
> >>>> I have seen few implementations in EDK2:
> >>>> DuetPkg/SataControllerDxe/SataController.c
> >>>> OvmfPkg/SataControllerDxe/SataController.c
> >>>> But in all of them SATA connectivity is via PCI Express switch.
> >>>>
> >>>> Kindly point me to some non-PCI based "SATA 3.0 AHCI driver code"
> >>>> for UEFI, if there is any such code.
> >>>
> >>> I have seen several such platforms implementing a "dummy" PCI
> >>> Express driver, simply translating PCI accesses to memory mapped
> >>> ones, and still making use of the MdeModulePkg/Bus/Ata/ libraries.
> >>>
> >>> You can see examples of PCI emulation in
> >>> Omap35xxPkg/PciEmulation/PciEmulation.c
> >>> and
> >>> ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/PciEmulation.c
> >>>
> >>> As a side note, we really should have a common mmio-PCI emulation
> >>> library in core EDK2.
> >>
> >> Actually the driver stack rests upon the platform-specific PCI host
> >> bridge/root bridge driver (a DXE_DRIVER, i.e., one that doesn't bind
> >> other handles according to the UEFI Driver Model, but produces the
> >> Root Bridge IO protocols, and the Host Bridge Resource Allocation
> >> protocol(s), out of "thin air", in its entry point function).
> >>
> >> The PCI Bus driver (producing PciIo protocol instances) is platform-
> >> independent, and needs the previously mentioned driver. From PciIo
> >> upwards, it's all generic. (Well, I'll mention that there is no
> >> platform- independent SataControllerDxe in edk2. I don't recall the
> >> reason -- apologies --, but a reason *was* given for it.)
> >>
> >> Ray recently implemented a generic PCI host bridge / root bridge
> >> driver, in "MdeModulePkg/Bus/Pci/PciHostBridgeDxe". That driver
> delegates:
> >>
> >> - some of the platform specifics to the (also new) PciHostBridgeLib
> >>   class,
> >> - PCI config space access to the PciSegmentLib class (there are, or
> can
> >>   be made, library instances that provide 0xCF8/0xCFC, or
> MMCONFIG/ECAM
> >>   based config space access),
> >> - IO port access to the CPU driver that provides the
> >>   EFI_CPU_IO2_PROTOCOL.
> >>
> >> I believe that for a "single root bridge" system, this structure is
> >> generic enough.
> >>
> >> (Of course, nothing prevents a system from implementing PciIo
> >> independently, which "ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe"
> >> seems to do.)
> >
> > Thanks Laszlo and Leif.
> >
> > So, AFAIU there are two approaches available on implementing the SATA
> > (AHCI based) host controller on ARM based SoCs:
> >
> > 1. Either, we can use the PCIe emulation layers to emulation a SATA
> > controller sitting as a PciIO device on top of the PCIe emulation
> > layer. So, eventually we will be using the ATA Bus layer inside
> > MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf
> > to get the AHCI-ATA bus services.
> >
> > 2. Or, we can implement the AHCI based SATA controller as a block
> > device (exposing the BLOCK IO protocol) and implemented on the lines
> > of a SD/MMC card like driver. The BLOCK IO protocol can then be used by
> a FatPkg like layer to provide a support for FAT32 filesystem over the
> SATA driver.
> >
> > Both the above approaches have their own merits and demerits. While
> > approach 1 might introduce extra memory allocation/housekeeping
> overheads for PCIe emulation layer, approach 2 might not be compatible to
> all UEFI shell applications that want to use a underlying SATA HDD
> support.
> >
> > So, this brings forward the question, as to which UEFI shell
> applications (e.g. GRUB2) can work with approach 2 and which cannot.
> > Are there any other obvious disadvantages to approach 2?
> >
> > Please share your thoughts.
> 
> I don't know many UEFI applications, but the few I know, should be happy
> with the BlockIo + above protocols. At least I can't name any obvious
> disadvantages.
> 

Thanks Laszlo.

Leif - Do you see any concerns to enable a AHCI based SATA controller as a block
device (exposing the BLOCK IO protocol) and implemented on the lines
of a SD/MMC card like driver - so that it can be reused across ARM SOCs having 
SATA host
controller support (this would mainly be a candidate for OpenPlatform.git 
then). 

I can only think of things like:
- Lack of plug-n-play support that we can probably get with a PCIe emulation 
like layer
- Some UEFI applications not working with the implementation proposed above.

Regards,
Bhupesh
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to