From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 192.55.52.43, mailfrom: liming.gao@intel.com) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by groups.io with SMTP; Mon, 13 May 2019 21:59:47 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 13 May 2019 21:59:46 -0700 X-ExtLoop1: 1 Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by fmsmga008.fm.intel.com with ESMTP; 13 May 2019 21:59:46 -0700 Received: from fmsmsx163.amr.corp.intel.com (10.18.125.72) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.408.0; Mon, 13 May 2019 21:59:46 -0700 Received: from shsmsx106.ccr.corp.intel.com (10.239.4.159) by fmsmsx163.amr.corp.intel.com (10.18.125.72) with Microsoft SMTP Server (TLS) id 14.3.408.0; Mon, 13 May 2019 21:59:45 -0700 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.33]) by SHSMSX106.ccr.corp.intel.com ([169.254.10.213]) with mapi id 14.03.0415.000; Tue, 14 May 2019 12:59:43 +0800 From: "Liming Gao" To: "devel@edk2.groups.io" , "Chen, Marc W" CC: "Kubacki, Michael A" , "Chaganty, Rangasai V" Subject: Re: [edk2-devel] [PATCH] MinPlatformPkg: Add multiple segment support for PciHostBridgeLib Thread-Topic: [edk2-devel] [PATCH] MinPlatformPkg: Add multiple segment support for PciHostBridgeLib Thread-Index: AQHVCgOgStpD46VczEiV4ZsaEJYHoaZqDtVg Date: Tue, 14 May 2019 04:59:44 +0000 Message-ID: <4A89E2EF3DFEDB4C8BFDE51014F606A14E44918A@SHSMSX104.ccr.corp.intel.com> References: <20190514031729.25988-1-marc.w.chen@intel.com> In-Reply-To: <20190514031729.25988-1-marc.w.chen@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Return-Path: liming.gao@intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable This patch is for edk2-platform. Please add edk2-platform in the patch titl= e, like [edk2-platforms][Patch].=20 When you generate the patch, you can use the command git format-patch -1 = --subject-prefix=3D"edk2-platform" Thanks Liming >-----Original Message----- >From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf Of >Marc W Chen >Sent: Tuesday, May 14, 2019 11:17 AM >To: devel@edk2.groups.io >Cc: Chen, Marc W ; Kubacki, Michael A >; Chaganty, Rangasai V > >Subject: [edk2-devel] [PATCH] MinPlatformPkg: Add multiple segment >support for PciHostBridgeLib > >https://bugzilla.tianocore.org/show_bug.cgi?id=3D1799 > >1. Add PcdPciSegmentCount PCD in MinPlatformPkg.dec and set default to 1 >2. Base on PciHostBridge related PCDs to Initialize RootBridges. > >Signed-off-by: Marc Chen >Cc: Michael Kubacki >Cc: Sai Chaganty >--- > Platform/Intel/MinPlatformPkg/MinPlatformPkg.dec | 3 +- > .../PciHostBridgeLibSimple.c | 83 ++++++++++++++--= ------ > .../PciHostBridgeLibSimple.inf | 4 +- > 3 files changed, 59 insertions(+), 31 deletions(-) > >diff --git a/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dec >b/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dec >index 3185776ac3..e1ae8004cb 100644 >--- a/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dec >+++ b/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dec >@@ -6,7 +6,7 @@ > # INF files to generate AutoGen.c and AutoGen.h files > # for the build infrastructure. > # >-# Copyright (c) 2017, Intel Corporation. All rights reserved.
>+# Copyright (c) 2017 - 2019, Intel Corporation. All rights reserved.
> # > # This program and the accompanying materials are licensed and made >available under > # the terms and conditions of the BSD License which accompanies this >distribution. >@@ -223,6 +223,7 @@ >gMinPlatformPkgTokenSpaceGuid.PcdPcIoApicEnable|0x0|UINT32|0x900000 >19 > gMinPlatformPkgTokenSpaceGuid.PcdPciDmaAbove4G >|FALSE|BOOLEAN|0x4001004B > gMinPlatformPkgTokenSpaceGuid.PcdPciNoExtendedConfigSpace >|FALSE|BOOLEAN|0x4001004C > gMinPlatformPkgTokenSpaceGuid.PcdPciResourceAssigned >|FALSE|BOOLEAN|0x4001004D >+ gMinPlatformPkgTokenSpaceGuid.PcdPciSegmentCount |0x1 >|UINT8|0x4001004E > > >gMinPlatformPkgTokenSpaceGuid.PcdAcpiPm1AEventBlockAddress|0x1800| >UINT16|0x00010035 > >gMinPlatformPkgTokenSpaceGuid.PcdAcpiPm1BEventBlockAddress|0x0000| >UINT16|0x00010036 >diff --git >a/Platform/Intel/MinPlatformPkg/Pci/Library/PciHostBridgeLibSimple/PciHos= t >BridgeLibSimple.c >b/Platform/Intel/MinPlatformPkg/Pci/Library/PciHostBridgeLibSimple/PciHos= t >BridgeLibSimple.c >index 557ac2a5b3..25259e2f2d 100644 >--- >a/Platform/Intel/MinPlatformPkg/Pci/Library/PciHostBridgeLibSimple/PciHos= t >BridgeLibSimple.c >+++ >b/Platform/Intel/MinPlatformPkg/Pci/Library/PciHostBridgeLibSimple/PciHos= t >BridgeLibSimple.c >@@ -1,7 +1,7 @@ > /** @file >- SA PciHostBridge Library >+ PciHostBridge Library > >-Copyright (c) 2017, Intel Corporation. All rights reserved.
>+Copyright (c) 2017 - 2019, Intel Corporation. All rights reserved.
> This program and the accompanying materials are licensed and made >available under > the terms and conditions of the BSD License that accompanies this >distribution. > The full text of the license may be found at >@@ -15,6 +15,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY >KIND, EITHER EXPRESS OR IMPLIED. > #include > #include > #include >+#include > #include > #include > #include >@@ -28,7 +29,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY >KIND, EITHER EXPRESS OR IMPLIED. > GLOBAL_REMOVE_IF_UNREFERENCED CHAR16 >*mPciHostBridgeLibAcpiAddressSpaceTypeStr[] =3D { > L"Mem", L"I/O", L"Bus" > }; >-ACPI_HID_DEVICE_PATH mRootBridgeDeviceNode =3D { >+ACPI_HID_DEVICE_PATH mRootBridgeDeviceNodeTemplate =3D { > { > ACPI_DEVICE_PATH, > ACPI_DP, >@@ -41,7 +42,7 @@ ACPI_HID_DEVICE_PATH mRootBridgeDeviceNode =3D { > 0 > }; > >-PCI_ROOT_BRIDGE mRootBridge =3D { >+PCI_ROOT_BRIDGE mRootBridgeTemplate =3D { > 0, > EFI_PCI_ATTRIBUTE_ISA_MOTHERBOARD_IO | > EFI_PCI_ATTRIBUTE_IDE_PRIMARY_IO | >@@ -66,41 +67,67 @@ PCI_ROOT_BRIDGE mRootBridge =3D { > NULL // DevicePath; > }; > >+/** >+ Return all the root bridge instances. >+ >+ @param Count Return the count of root bridge instances. >+ >+ @return All the root bridge instances, it will be NULL if system has >insufficient memory >+ resources available and count will be zero. >+**/ >+ > PCI_ROOT_BRIDGE * > EFIAPI > PciHostBridgeGetRootBridges ( > UINTN *Count > ) > { >- mRootBridge.Mem.Base =3D PcdGet32 (PcdPciReservedMemBase); >+ UINT8 Index; >+ PCI_ROOT_BRIDGE *RootBridge; >+ >+ RootBridge =3D AllocateZeroPool (sizeof (PCI_ROOT_BRIDGE) * PcdGet8 >(PcdPciSegmentCount)); >+ if (RootBridge =3D=3D NULL) { >+ DEBUG ((DEBUG_ERROR, "PciHostBridge: Out of resource\n")); >+ *Count =3D 0; >+ return RootBridge; >+ } >+ >+ mRootBridgeTemplate.Mem.Base =3D PcdGet32 (PcdPciReservedMemBase); > if (PcdGet32(PcdPciReservedMemLimit) !=3D 0) { >- mRootBridge.Mem.Limit =3D PcdGet32 (PcdPciReservedMemLimit); >+ mRootBridgeTemplate.Mem.Limit =3D PcdGet32 (PcdPciReservedMemLimit); > } else { >- mRootBridge.Mem.Limit =3D (UINT32)PcdGet64 (PcdPciExpressBaseAddress= ); >+ mRootBridgeTemplate.Mem.Limit =3D (UINT32) PcdGet64 >(PcdPciExpressBaseAddress); > } > >- mRootBridge.MemAbove4G.Base =3D PcdGet64 >(PcdPciReservedMemAbove4GBBase); >- mRootBridge.MemAbove4G.Limit =3D PcdGet64 >(PcdPciReservedMemAbove4GBLimit); >+ mRootBridgeTemplate.MemAbove4G.Base =3D PcdGet64 >(PcdPciReservedMemAbove4GBBase); >+ mRootBridgeTemplate.MemAbove4G.Limit =3D PcdGet64 >(PcdPciReservedMemAbove4GBLimit); > >- mRootBridge.PMem.Base =3D PcdGet32 (PcdPciReservedPMemBase); >- mRootBridge.PMem.Limit =3D PcdGet32 (PcdPciReservedPMemLimit); >- mRootBridge.PMemAbove4G.Base =3D PcdGet64 >(PcdPciReservedPMemAbove4GBBase); >- mRootBridge.PMemAbove4G.Limit =3D PcdGet64 >(PcdPciReservedPMemAbove4GBLimit); >+ mRootBridgeTemplate.PMem.Base =3D PcdGet32 >(PcdPciReservedPMemBase); >+ mRootBridgeTemplate.PMem.Limit =3D PcdGet32 >(PcdPciReservedPMemLimit); >+ mRootBridgeTemplate.PMemAbove4G.Base =3D PcdGet64 >(PcdPciReservedPMemAbove4GBBase); >+ mRootBridgeTemplate.PMemAbove4G.Limit =3D PcdGet64 >(PcdPciReservedPMemAbove4GBLimit); > >- if (mRootBridge.MemAbove4G.Base < mRootBridge.MemAbove4G.Limit) { >- mRootBridge.AllocationAttributes |=3D >EFI_PCI_HOST_BRIDGE_MEM64_DECODE; >+ if (mRootBridgeTemplate.MemAbove4G.Base < >mRootBridgeTemplate.MemAbove4G.Limit) { >+ mRootBridgeTemplate.AllocationAttributes |=3D >EFI_PCI_HOST_BRIDGE_MEM64_DECODE; > } > >- mRootBridge.Io.Base =3D PcdGet16 (PcdPciReservedIobase); >- mRootBridge.Io.Limit =3D PcdGet16 (PcdPciReservedIoLimit); >+ mRootBridgeTemplate.Io.Base =3D PcdGet16 (PcdPciReservedIobase); >+ mRootBridgeTemplate.Io.Limit =3D PcdGet16 (PcdPciReservedIoLimit); > >- mRootBridge.DmaAbove4G =3D PcdGetBool (PcdPciDmaAbove4G); >- mRootBridge.NoExtendedConfigSpace =3D PcdGetBool >(PcdPciNoExtendedConfigSpace); >- mRootBridge.ResourceAssigned =3D PcdGetBool (PcdPciResourceAssigned); >+ mRootBridgeTemplate.DmaAbove4G =3D PcdGetBool (PcdPciDmaAbove4G); >+ mRootBridgeTemplate.NoExtendedConfigSpace =3D PcdGetBool >(PcdPciNoExtendedConfigSpace); >+ mRootBridgeTemplate.ResourceAssigned =3D PcdGetBool >(PcdPciResourceAssigned); >+ >+ for (Index =3D 0; Index < PcdGet8 (PcdPciSegmentCount); Index ++) { >+ mRootBridgeDeviceNodeTemplate.UID =3D Index; >+ mRootBridgeTemplate.Segment =3D Index; >+ mRootBridgeTemplate.DevicePath =3D NULL; >+ mRootBridgeTemplate.DevicePath =3D AppendDevicePathNode (NULL, >&mRootBridgeDeviceNodeTemplate.Header); >+ CopyMem (RootBridge + Index, &mRootBridgeTemplate, sizeof >(PCI_ROOT_BRIDGE)); >+ } > >- mRootBridge.DevicePath =3D AppendDevicePathNode (NULL, >&mRootBridgeDeviceNode.Header); >- *Count =3D 1; >- return &mRootBridge; >+ *Count =3D PcdGet8 (PcdPciSegmentCount); >+ return RootBridge; > } > > VOID >@@ -110,7 +137,7 @@ PciHostBridgeFreeRootBridges ( > UINTN Count > ) > { >- ASSERT (Count =3D=3D 1); >+ ASSERT (Count <=3D PcdGet8 (PcdPciSegmentCount)); > FreePool (Bridges->DevicePath); > } > >@@ -136,20 +163,20 @@ PciHostBridgeResourceConflict ( > { > EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Descriptor; > UINTN RootBridgeIndex; >- DEBUG ((EFI_D_ERROR, "PciHostBridge: Resource conflict happens!\n")); >+ DEBUG ((DEBUG_ERROR, "PciHostBridge: Resource conflict happens!\n")); > > RootBridgeIndex =3D 0; > Descriptor =3D (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *) Configuration; > while (Descriptor->Desc =3D=3D ACPI_ADDRESS_SPACE_DESCRIPTOR) { >- DEBUG ((EFI_D_ERROR, "RootBridge[%d]:\n", RootBridgeIndex++)); >+ DEBUG ((DEBUG_ERROR, "RootBridge[%d]:\n", RootBridgeIndex++)); > for (; Descriptor->Desc =3D=3D ACPI_ADDRESS_SPACE_DESCRIPTOR; >Descriptor++) { > ASSERT (Descriptor->ResType < > sizeof (mPciHostBridgeLibAcpiAddressSpaceTypeStr) / sizeof >(mPciHostBridgeLibAcpiAddressSpaceTypeStr[0]) > ); >- DEBUG ((EFI_D_ERROR, " %s: Length/Alignment =3D 0x%lx / 0x%lx\n", >+ DEBUG ((DEBUG_ERROR, " %s: Length/Alignment =3D 0x%lx / 0x%lx\n", > mPciHostBridgeLibAcpiAddressSpaceTypeStr[Descriptor->ResTy= pe], >Descriptor->AddrLen, Descriptor->AddrRangeMax)); > if (Descriptor->ResType =3D=3D ACPI_ADDRESS_SPACE_TYPE_MEM) { >- DEBUG ((EFI_D_ERROR, " Granularity/SpecificFlag =3D %ld / %0= 2x%s\n", >+ DEBUG ((DEBUG_ERROR, " Granularity/SpecificFlag =3D %ld / %0= 2x%s\n", > Descriptor->AddrSpaceGranularity, Descriptor->SpecificFl= ag, > ((Descriptor->SpecificFlag & >EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_CACHEABLE_PREFETCHABLE >) !=3D 0) ? L" (Prefetchable)" : L"" > )); >diff --git >a/Platform/Intel/MinPlatformPkg/Pci/Library/PciHostBridgeLibSimple/PciHos= t >BridgeLibSimple.inf >b/Platform/Intel/MinPlatformPkg/Pci/Library/PciHostBridgeLibSimple/PciHos= t >BridgeLibSimple.inf >index f9a769155b..b37488e512 100644 >--- >a/Platform/Intel/MinPlatformPkg/Pci/Library/PciHostBridgeLibSimple/PciHos= t >BridgeLibSimple.inf >+++ >b/Platform/Intel/MinPlatformPkg/Pci/Library/PciHostBridgeLibSimple/PciHos= t >BridgeLibSimple.inf >@@ -1,7 +1,7 @@ > ## @file > # Component description file for the SA PciHostBridge library > # >-# Copyright (c) 2017, Intel Corporation. All rights reserved.
>+# Copyright (c) 2017 - 2019, Intel Corporation. All rights reserved.
> # > # This program and the accompanying materials are licensed and made >available under > # the terms and conditions of the BSD License which accompanies this >distribution. >@@ -56,4 +56,4 @@ > gMinPlatformPkgTokenSpaceGuid.PcdPciDmaAbove4G > gMinPlatformPkgTokenSpaceGuid.PcdPciNoExtendedConfigSpace > gMinPlatformPkgTokenSpaceGuid.PcdPciResourceAssigned >- >+ gMinPlatformPkgTokenSpaceGuid.PcdPciSegmentCount >-- >2.16.2.windows.1 > > >