From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-it0-x22c.google.com (mail-it0-x22c.google.com [IPv6:2607:f8b0:4001:c0b::22c]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 7FB9181F3B for ; Wed, 16 Nov 2016 20:36:49 -0800 (PST) Received: by mail-it0-x22c.google.com with SMTP id y23so19214907itc.0 for ; Wed, 16 Nov 2016 20:36:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=orgNHlviy9sRu4Faz4shzYym1WfE38PGW98BwJla8OQ=; b=yBdGNsdpFOI9vS7sQLVZ87qaGMuYIqgldPUkqdhWzQ5s4lZj9WiCI2HMsEIBlIgWgO Mwy1biveLl1+sjoMIvpXJK0wG6/GOUQWTDe0fMHPx1+RrgPUyjlH1KXK0Q7H0JdlAdhg 7iEYnO0UokbXoyUve4Z21PteDPhALAMj573DkU7oh5C0PhTh731xH/YXqPbyikFJ9Kk4 ORSRpQlBUZmvw8WXbHP8u3SG05ZU9bE9B1dxaihgjlVbUMjG+b3bGrdSUEkJ5iK6gKMx BLal1YmU2MBJTLTTttjDwqdnmL4uqiItjVi16a2Qm07Dit/G2XRIepJXbrbLH/oT/CGM OiLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=orgNHlviy9sRu4Faz4shzYym1WfE38PGW98BwJla8OQ=; b=dRnS3jymI5D1MmJFhEU7tSCe39p11oE03mzLOYdsFdBDIOf1lG+EdsX9oMA5CDOO5f DjUAc2QDwzXtaXHxp9zqW1TiKRE7DmSEdj7h2dRY5aT/cByK6IojI5mE6D7Z4YotWaUY ZnrV/iFGmvcWg9Agc7Y50HBKwMOVa8hu8YdSSRzr8A/BpaUlVHD2ckk9u/9WOPwOtSb4 HwyadOEzZVtuRB2kGRrMJBf6Eg9B1GT7FvLVgBpPkGGxyxys1aqkRua18gri0VKooPXv 9bFC8xj2yk5RnoSArqF4VfSlD34RfD70KyV3nZtDb9qfCkEUzmf1Bpa654awrrFssge6 tMiw== X-Gm-Message-State: AKaTC02D7d0EJOZOpB9MylYhn/6usbGvOvdrRznTImO59BU/L7ih6jFkB0B9/Wv7tEOB5gJ9mlXsuXHjBqzpFA== X-Received: by 10.107.18.96 with SMTP id a93mr1454388ioj.144.1479357413688; Wed, 16 Nov 2016 20:36:53 -0800 (PST) MIME-Version: 1.0 Received: by 10.107.25.140 with HTTP; Wed, 16 Nov 2016 20:36:53 -0800 (PST) In-Reply-To: <1479315571-14953-1-git-send-email-ard.biesheuvel@linaro.org> References: <1479315571-14953-1-git-send-email-ard.biesheuvel@linaro.org> From: Marcin Wojtas Date: Thu, 17 Nov 2016 05:36:53 +0100 Message-ID: To: Ard Biesheuvel Cc: edk2-devel-01 , "Gao, Liming" , "Ni, Ruiyu" , "Kinney, Michael D" , afish@apple.com, Leif Lindholm Subject: Re: [PATCH v3 0/5] MdeModulePkg: add support for non-discoverable devices X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 17 Nov 2016 04:36:49 -0000 Content-Type: text/plain; charset=UTF-8 Hi Ard, Series tested on Marvell Armada 7040 board (XHCI and SDHCI). You can add: Tested-by: Marcin Wojtas Best regards, Marcin 2016-11-16 17:59 GMT+01:00 Ard Biesheuvel : > The rationale for this series is the fact that many ARM platforms implement > some form of PCI 'emulation', to allow non-discoverable devices that implement > standardized host controller interfaces (i.e., EHCI, AHCI) to be controlled by > the generic EDK2 drivers, which are layered on top of the PCI I/O protocols > (even though the respective host controller specifications don't mandate that) > > There are a couple of problems with that approach: > - Most implementations are based on the original code created for BeagleBoard, > which is a 32-bit platform. Unlike x86, which usually does not perform PCI > DMA above 4 GB, the ARM ecosystem is much more heterogeneous, and platforms > that have memory both above and below the 4 GB mark may ship with, e.g., EHCI > controllers that do not implement 64-bit DMA addressing. > - Implementations depend on the DmaLib library class in EmbeddedPkg, of which > coherent and non-coherent implementations exists. However, both types of > devices may appear on a single platform, requiring several instances of the > same driver. > - Existing implementations do not follow the UEFI driver model, but instantiate > a fixed number of PCI I/O protocol handles, and bring up all the devices when > doing so. However, the UEFI philosophy is to only instantiate (and thus > initialize) devices that are involved in booting. > > So instead, let's define a base protocol that simply asserts the presence of > a certain kind of device at a certain memory offset, allowing platforms to > instantiate any number of these statically, and leave it to post-DXE driver > dispatch to actually bind the drivers as usual. This is implemented in patch #1. > Note that it includes an AMBA device type, which we intend to use in the future > to move ARM AMBA drivers to the UEFI driver model as well (i.e., LCD controller, > SD/MMC controller) > > Patch #2 implements a utility library to register non-discoverable devices. > > Patch #3 implements the UEFI driver that instantiates PCI I/O protocol handles > for non-discoverable devices that we know can be driven by a generic driver in > EDK2. The initial version implements coherent DMA only. > > Patch #4 implements non-coherent DMA for the driver added in patch #3. > > Patch #5 is included for reference. It ports the BeagleBoard platform to the > new driver stack. > > Changes in v3: > - Modified the base protocol to describe any number of resources using ACPI > resource descriptors. The current crop of targeted peripherals does not > require that, but it allows for much more flexibility in the future. This > also means that the MMIO region sizes are no longer hard-coded base on the > controller type (EHCI, AHCI, etc) but need to be declared when the devices > are registered. > - Update the registration library API to allow multiple MMIO regions to be > declared. > - When performing uncached allocations, record the original memory region > attributes so we can restore them correctly on free. > - Some fixes in the 4GB boundary checks for Map/Unmap > - Rename gNonDiscoverableDeviceProtocolGuid to > gEdkiiNonDiscoverableDeviceProtocolGuid > > Ard Biesheuvel (5): > MdeModulePkg: introduce non-discoverable device protocol > MdeModule: introduce helper library to register non-discoverable > devices > MdeModulePkg: implement generic PCI I/O driver for non-discoverable > devices > MdeModulePkg/NonDiscoverablePciDeviceDxe: add support for non-coherent > DMA > Omap35xxPkg/PciEmulation: port to new non-discoverable device > infrastructure > > BeagleBoardPkg/BeagleBoardPkg.dsc | 2 + > BeagleBoardPkg/BeagleBoardPkg.fdf | 1 + > MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/ComponentName.c | 75 ++ > MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciDeviceDxe.c | 226 ++++ > MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciDeviceDxe.inf | 44 + > MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciDeviceIo.c | 1187 ++++++++++++++++++++ > MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciDeviceIo.h | 113 ++ > MdeModulePkg/Include/Library/NonDiscoverableDeviceRegistrationLib.h | 49 + > MdeModulePkg/Include/Protocol/NonDiscoverableDevice.h | 90 ++ > MdeModulePkg/Library/NonDiscoverableDeviceRegistrationLib/NonDiscoverableDeviceRegistrationLib.c | 161 +++ > MdeModulePkg/Library/NonDiscoverableDeviceRegistrationLib/NonDiscoverableDeviceRegistrationLib.inf | 34 + > MdeModulePkg/MdeModulePkg.dec | 7 + > MdeModulePkg/MdeModulePkg.dsc | 3 + > Omap35xxPkg/Omap35xxPkg.dsc | 2 +- > Omap35xxPkg/PciEmulation/PciEmulation.c | 578 +--------- > Omap35xxPkg/PciEmulation/PciEmulation.h | 292 ----- > Omap35xxPkg/PciEmulation/PciEmulation.inf | 16 +- > Omap35xxPkg/PciEmulation/PciRootBridgeIo.c | 306 ----- > 18 files changed, 2025 insertions(+), 1161 deletions(-) > create mode 100644 MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/ComponentName.c > create mode 100644 MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciDeviceDxe.c > create mode 100644 MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciDeviceDxe.inf > create mode 100644 MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciDeviceIo.c > create mode 100644 MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciDeviceIo.h > create mode 100644 MdeModulePkg/Include/Library/NonDiscoverableDeviceRegistrationLib.h > create mode 100644 MdeModulePkg/Include/Protocol/NonDiscoverableDevice.h > create mode 100644 MdeModulePkg/Library/NonDiscoverableDeviceRegistrationLib/NonDiscoverableDeviceRegistrationLib.c > create mode 100644 MdeModulePkg/Library/NonDiscoverableDeviceRegistrationLib/NonDiscoverableDeviceRegistrationLib.inf > delete mode 100644 Omap35xxPkg/PciEmulation/PciEmulation.h > delete mode 100644 Omap35xxPkg/PciEmulation/PciRootBridgeIo.c > > -- > 2.7.4 >