From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 66A8D21A04822 for ; Sat, 29 Apr 2017 06:48:23 -0700 (PDT) Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga105.fm.intel.com with ESMTP; 29 Apr 2017 06:48:22 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.37,391,1488873600"; d="scan'208";a="80504349" Received: from jyao1-mobl.ccr.corp.intel.com ([10.254.212.148]) by orsmga002.jf.intel.com with ESMTP; 29 Apr 2017 06:48:21 -0700 From: Jiewen Yao To: edk2-devel@lists.01.org Cc: Ruiyu Ni , Leo Duran , Brijesh Singh , Ard Biesheuvel Date: Sat, 29 Apr 2017 21:48:11 +0800 Message-Id: <1493473694-5064-1-git-send-email-jiewen.yao@intel.com> X-Mailer: git-send-email 2.7.4.windows.1 Subject: [RFC] [PATCH V4 0/3] Add IOMMU support. X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 29 Apr 2017 13:48:23 -0000 ================ V4 ============== Refine the EDKII_IOMMU_PROTOCOL. 1) Add AllocateBuffer/FreeBuffer/Map/Unmap() API. They are similar to DmaLib in EmbeddedPkg and similar to the previous BmDmaLib (by leo.duran@amd.com). These APIs are invoked by PciHostBridge driver to allocate DMA memory. The PciHostBridge driver (IOMMU consumer) is simplified: It uses IOMMU, if IOMMU protocol is present. Else it uses original logic. 2) Add SetMappingAttribute() API. It is similar to SetAttribute() API in V1. This API is invoked by PciBus driver to set DMA access attribute (read/write) for device. The PciBus driver (IOMMU consumer) is simplified: It sets access attribute in Map/Unmap, if IOMMU protocol is present. 3) Remove SetRemapAddress/GetRemapAddress() API. Because PciHostBridge/PciBus can call the APIs defined above, there is no need to provide remap capability. -- Sample producer drivers: 1) The sample VTd driver (IOMMU producer) is at https://github.com/jyao1/edk2/tree/dma_v4/IntelSiliconPkg/IntelVTdDxe It is added to show the concept. It is not fully implemented yet. It will not be checked in in this patch. 2) The sample AMD SEV driver (IOMMU producer) is at https://github.com/jyao1/edk2/tree/dma_v4/IntelSiliconPkg/SampleAmdSevDxe (code is borrowed from leo.duran@amd.com and brijesh.singh@amd.com) This is not a right place to put this driver. It is added to show the concept. It is not fully implemented. It will not be checked in. Please do not use it directly. 3) The sample STYX driver (IOMMU producer) is at https://github.com/jyao1/edk2/tree/dma_v4/IntelSiliconPkg/SampleStyxDxe (code is borrowed from ard.biesheuvel@linaro.org) This is not a right place to put this driver. It is added to show the concept. It is not fully implemented. It will not be checked in. Please do not use it directly. ================ V3 ============== 1) Add Remap capability (from Ard Biesheuvel) Add EDKII_IOMMU_REMAP_ADDRESS API in IOMMU_PROTOCOL. NOTE: The code is not fully validated yet. The purpose is to collect feedback to decide the next step. ================ V2 ============== 1) Enhance Unmap() in PciIo (From Ruiyu Ni) Maintain a local list of MapInfo and match it in Unmap. 2) CopyMem for ReadOperation in PciIo after SetAttribute (Leo Duran) Fix a bug in V1 that copy mem for read happen before SetAttribute, which will break AMD SEV solution. ================ V1 ============== This patch series adds IOMMU protocol and updates the consumer to support IOMMU based DMA access in UEFI. This patch series can support the BmDmaLib request for AMD SEV. submitted by Duran, Leo and Brijesh Singh . https://lists.01.org/pipermail/edk2-devel/2017-March/008109.html, and https://lists.01.org/pipermail/edk2-devel/2017-March/008820.html. We can have an AMD SEV specific IOMMU driver to produce IOMMU protocol, and clear SEV in IOMMU->SetAttribute(). This patch series can also support Intel VTd based DMA protection, requested by Jiewen Yao , discussed in https://lists.01.org/pipermail/edk2-devel/2017-March/008157.html. We can have an Intel VTd specific IOMMU driver to produce IOMMU protocol, and update VTd engine to grant or deny access in IOMMU->SetAttribute(). This patch series does not provide a full Intel VTd driver, which will be provide in other patch in the future. The purpose of this patch series to review if this IOMMU protocol design can meet all DMA access and management requirement. Cc: Ruiyu Ni Cc: Leo Duran Cc: Brijesh Singh Cc: Ard Biesheuvel Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jiewen Yao Jiewen Yao (3): MdeModulePkg/Include: Add IOMMU protocol definition. MdeModulePkg/PciHostBridge: Add IOMMU support. MdeModulePkg/PciBus: Add IOMMU support. MdeModulePkg/Bus/Pci/PciBusDxe/PciBus.c | 9 + MdeModulePkg/Bus/Pci/PciBusDxe/PciBus.h | 1 + MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf | 1 + MdeModulePkg/Bus/Pci/PciBusDxe/PciIo.c | 37 +++ MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciHostBridge.c | 37 +++ MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciHostBridgeDxe.inf | 2 + MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciRootBridge.h | 2 + MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciRootBridgeIo.c | 61 ++++ MdeModulePkg/Include/Protocol/IoMmu.h | 310 ++++++++++++++++++++ MdeModulePkg/MdeModulePkg.dec | 3 + 10 files changed, 463 insertions(+) create mode 100644 MdeModulePkg/Include/Protocol/IoMmu.h -- 2.7.4.windows.1