* [PATCH v1] MdeModulePkg/Bus: Enable ascending resource list
@ 2018-04-28 18:53 Roman Bacik
2018-04-30 15:48 ` Roman Bacik
0 siblings, 1 reply; 2+ messages in thread
From: Roman Bacik @ 2018-04-28 18:53 UTC (permalink / raw)
To: edk2-devel; +Cc: Ruiyu Ni, Vladimir Olovyannikov
Enable resource list sorted in ascending order required by some SoCs.
Cc: Vladimir Olovyannikov <vladimir.olovyannikov@broadcom.com>
Cc: Ruiyu Ni <ruiyu.ni@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Roman Bacik <roman.bacik@broadcom.com>
---
MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf | 1 +
.../Bus/Pci/PciBusDxe/PciResourceSupport.c | 43
++++++++++++++++++----
MdeModulePkg/MdeModulePkg.dec | 3 ++
MdeModulePkg/MdeModulePkg.dsc | 1 +
4 files changed, 41 insertions(+), 7 deletions(-)
diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
b/MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
index 97608bf..5cb3761 100644
--- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
+++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
@@ -110,6 +110,7 @@
gEfiMdeModulePkgTokenSpaceGuid.PcdAriSupport ## CONSUMES
gEfiMdeModulePkgTokenSpaceGuid.PcdMrIovSupport ## CONSUMES
gEfiMdeModulePkgTokenSpaceGuid.PcdPciDisableBusEnumeration ##
SOMETIMES_CONSUMES
+ gEfiMdeModulePkgTokenSpaceGuid.PcdListAscending ## CONSUMES
[UserExtensions.TianoCore."ExtraFiles"]
PciBusDxeExtra.uni
diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciResourceSupport.c
b/MdeModulePkg/Bus/Pci/PciBusDxe/PciResourceSupport.c
index 2f713fc..45575fa 100644
--- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciResourceSupport.c
+++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciResourceSupport.c
@@ -106,19 +106,30 @@ InsertResourceNode (
PCI_RESOURCE_NODE *Temp;
UINT64 ResNodeAlignRest;
UINT64 TempAlignRest;
+ BOOLEAN Ascending;
ASSERT (Bridge != NULL);
ASSERT (ResNode != NULL);
- InsertHeadList (&Bridge->ChildList, &ResNode->Link);
+ Ascending = FeaturePcdGet (PcdListAscending);
+
+ if (Ascending) {
+ InsertHeadList (&Bridge->ChildList, &ResNode->Link);
+ CurrentLink = Bridge->ChildList.ForwardLink->ForwardLink;
+ } else {
+ CurrentLink = Bridge->ChildList.BackLink;
+ InsertTailList (&Bridge->ChildList, &ResNode->Link);
+ }
- CurrentLink = Bridge->ChildList.ForwardLink->ForwardLink;
while (CurrentLink != &Bridge->ChildList) {
Temp = RESOURCE_NODE_FROM_LINK (CurrentLink);
- if (ResNode->Alignment > Temp->Alignment) {
+ if ((Ascending && Temp->Alignment >= ResNode->Alignment) ||
+ (!Ascending && ResNode->Alignment > Temp->Alignment)) {
break;
- } else if (ResNode->Alignment == Temp->Alignment) {
+ }
+
+ if (!Ascending && ResNode->Alignment == Temp->Alignment) {
ResNodeAlignRest = ResNode->Length & ResNode->Alignment;
TempAlignRest = Temp->Length & Temp->Alignment;
if ((ResNodeAlignRest == 0) || (ResNodeAlignRest >= TempAlignRest)) {
@@ -128,7 +139,11 @@ InsertResourceNode (
SwapListEntries (&ResNode->Link, CurrentLink);
- CurrentLink = ResNode->Link.ForwardLink;
+ if (Ascending) {
+ CurrentLink = ResNode->Link.BackLink;
+ } else {
+ CurrentLink = ResNode->Link.ForwardLink;
+ }
}
}
@@ -1269,6 +1284,7 @@ ProgramBar (
EFI_PCI_IO_PROTOCOL *PciIo;
UINT64 Address;
UINT32 Address32;
+ BOOLEAN Ascending;
ASSERT (Node->Bar < PCI_MAX_BAR);
@@ -1282,6 +1298,7 @@ ProgramBar (
Address = 0;
PciIo = &(Node->PciDev->PciIo);
+ Ascending = FeaturePcdGet (PcdListAscending);
Address = Base + Node->Offset;
@@ -1300,6 +1317,10 @@ ProgramBar (
case PciBarTypeMem32:
case PciBarTypePMem32:
+ if (Ascending) {
+ Node->PciDev->PciBar[Node->Bar].BaseAddress = Address;
+ Address %= Base;
+ }
PciIo->Pci.Write (
PciIo,
EfiPciIoWidthUint32,
@@ -1308,13 +1329,19 @@ ProgramBar (
&Address
);
- Node->PciDev->PciBar[Node->Bar].BaseAddress = Address;
+ if (!Ascending) {
+ Node->PciDev->PciBar[Node->Bar].BaseAddress = Address;
+ }
break;
case PciBarTypeMem64:
case PciBarTypePMem64:
+ if (Ascending) {
+ Node->PciDev->PciBar[Node->Bar].BaseAddress = Address;
+ Address %= Base;
+ }
Address32 = (UINT32) (Address & 0x00000000FFFFFFFF);
PciIo->Pci.Write (
@@ -1335,7 +1362,9 @@ ProgramBar (
&Address32
);
- Node->PciDev->PciBar[Node->Bar].BaseAddress = Address;
+ if (!Ascending) {
+ Node->PciDev->PciBar[Node->Bar].BaseAddress = Address;
+ }
break;
diff --git a/MdeModulePkg/MdeModulePkg.dec b/MdeModulePkg/MdeModulePkg.dec
index cc39718..911f33a 100644
--- a/MdeModulePkg/MdeModulePkg.dec
+++ b/MdeModulePkg/MdeModulePkg.dec
@@ -1005,6 +1005,9 @@
# @Prompt Enable UEFI Stack Guard.
gEfiMdeModulePkgTokenSpaceGuid.PcdCpuStackGuard|FALSE|BOOLEAN|0x30001055
+ ## Indicates if the resource list is sorted in ascending order
+ gEfiMdeModulePkgTokenSpaceGuid.PcdListAscending|FALSE|BOOLEAN|0x30001056
+
[PcdsFixedAtBuild, PcdsPatchableInModule]
## Dynamic type PCD can be registered callback function for Pcd setting
action.
# PcdMaxPeiPcdCallBackNumberPerPcdEntry indicates the maximum number of
callback function
diff --git a/MdeModulePkg/MdeModulePkg.dsc b/MdeModulePkg/MdeModulePkg.dsc
index ec24a50..2dee860 100644
--- a/MdeModulePkg/MdeModulePkg.dsc
+++ b/MdeModulePkg/MdeModulePkg.dsc
@@ -200,6 +200,7 @@
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxSizeNonPopulateCapsule|0x0
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxSizePopulateCapsule|0x0
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxPeiPerformanceLogEntries|28
+ gEfiMdeModulePkgTokenSpaceGuid.PcdListAscending|FALSE
[PcdsFixedAtBuild.IPF]
gEfiMdePkgTokenSpaceGuid.PcdIoBlockBaseAddressForIpf|0x0ffffc000000
--
2.7.4
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH v1] MdeModulePkg/Bus: Enable ascending resource list
2018-04-28 18:53 [PATCH v1] MdeModulePkg/Bus: Enable ascending resource list Roman Bacik
@ 2018-04-30 15:48 ` Roman Bacik
0 siblings, 0 replies; 2+ messages in thread
From: Roman Bacik @ 2018-04-30 15:48 UTC (permalink / raw)
To: edk2-devel; +Cc: Ruiyu Ni, Vladimir Olovyannikov
On Sat, Apr 28, 2018 at 11:53 AM, Roman Bacik <roman.bacik@broadcom.com>
wrote:
> Enable resource list sorted in ascending order required by some SoCs.
>
> Cc: Vladimir Olovyannikov <vladimir.olovyannikov@broadcom.com>
> Cc: Ruiyu Ni <ruiyu.ni@intel.com>
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Roman Bacik <roman.bacik@broadcom.com>
> ---
> MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf | 1 +
> .../Bus/Pci/PciBusDxe/PciResourceSupport.c | 43
> ++++++++++++++++++----
> MdeModulePkg/MdeModulePkg.dec | 3 ++
> MdeModulePkg/MdeModulePkg.dsc | 1 +
> 4 files changed, 41 insertions(+), 7 deletions(-)
>
> diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
> b/MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
> index 97608bf..5cb3761 100644
> --- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
> +++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
> @@ -110,6 +110,7 @@
> gEfiMdeModulePkgTokenSpaceGuid.PcdAriSupport ##
> CONSUMES
> gEfiMdeModulePkgTokenSpaceGuid.PcdMrIovSupport ##
> CONSUMES
> gEfiMdeModulePkgTokenSpaceGuid.PcdPciDisableBusEnumeration ##
> SOMETIMES_CONSUMES
> + gEfiMdeModulePkgTokenSpaceGuid.PcdListAscending ##
> CONSUMES
>
> [UserExtensions.TianoCore."ExtraFiles"]
> PciBusDxeExtra.uni
> diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciResourceSupport.c
> b/MdeModulePkg/Bus/Pci/PciBusDxe/PciResourceSupport.c
> index 2f713fc..45575fa 100644
> --- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciResourceSupport.c
> +++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciResourceSupport.c
> @@ -106,19 +106,30 @@ InsertResourceNode (
> PCI_RESOURCE_NODE *Temp;
> UINT64 ResNodeAlignRest;
> UINT64 TempAlignRest;
> + BOOLEAN Ascending;
>
> ASSERT (Bridge != NULL);
> ASSERT (ResNode != NULL);
>
> - InsertHeadList (&Bridge->ChildList, &ResNode->Link);
> + Ascending = FeaturePcdGet (PcdListAscending);
> +
> + if (Ascending) {
>
The line above should be:
if (!Ascending) {
+ InsertHeadList (&Bridge->ChildList, &ResNode->Link);
> + CurrentLink = Bridge->ChildList.ForwardLink->ForwardLink;
> + } else {
> + CurrentLink = Bridge->ChildList.BackLink;
> + InsertTailList (&Bridge->ChildList, &ResNode->Link);
> + }
>
> - CurrentLink = Bridge->ChildList.ForwardLink->ForwardLink;
> while (CurrentLink != &Bridge->ChildList) {
> Temp = RESOURCE_NODE_FROM_LINK (CurrentLink);
>
> - if (ResNode->Alignment > Temp->Alignment) {
> + if ((Ascending && Temp->Alignment >= ResNode->Alignment) ||
> + (!Ascending && ResNode->Alignment > Temp->Alignment)) {
> break;
> - } else if (ResNode->Alignment == Temp->Alignment) {
> + }
> +
> + if (!Ascending && ResNode->Alignment == Temp->Alignment) {
> ResNodeAlignRest = ResNode->Length & ResNode->Alignment;
> TempAlignRest = Temp->Length & Temp->Alignment;
> if ((ResNodeAlignRest == 0) || (ResNodeAlignRest >= TempAlignRest))
> {
> @@ -128,7 +139,11 @@ InsertResourceNode (
>
> SwapListEntries (&ResNode->Link, CurrentLink);
>
> - CurrentLink = ResNode->Link.ForwardLink;
> + if (Ascending) {
> + CurrentLink = ResNode->Link.BackLink;
> + } else {
> + CurrentLink = ResNode->Link.ForwardLink;
> + }
> }
> }
>
> @@ -1269,6 +1284,7 @@ ProgramBar (
> EFI_PCI_IO_PROTOCOL *PciIo;
> UINT64 Address;
> UINT32 Address32;
> + BOOLEAN Ascending;
>
> ASSERT (Node->Bar < PCI_MAX_BAR);
>
> @@ -1282,6 +1298,7 @@ ProgramBar (
>
> Address = 0;
> PciIo = &(Node->PciDev->PciIo);
> + Ascending = FeaturePcdGet (PcdListAscending);
>
> Address = Base + Node->Offset;
>
> @@ -1300,6 +1317,10 @@ ProgramBar (
> case PciBarTypeMem32:
> case PciBarTypePMem32:
>
> + if (Ascending) {
> + Node->PciDev->PciBar[Node->Bar].BaseAddress = Address;
> + Address %= Base;
> + }
> PciIo->Pci.Write (
> PciIo,
> EfiPciIoWidthUint32,
> @@ -1308,13 +1329,19 @@ ProgramBar (
> &Address
> );
>
> - Node->PciDev->PciBar[Node->Bar].BaseAddress = Address;
> + if (!Ascending) {
> + Node->PciDev->PciBar[Node->Bar].BaseAddress = Address;
> + }
>
> break;
>
> case PciBarTypeMem64:
> case PciBarTypePMem64:
>
> + if (Ascending) {
> + Node->PciDev->PciBar[Node->Bar].BaseAddress = Address;
> + Address %= Base;
> + }
> Address32 = (UINT32) (Address & 0x00000000FFFFFFFF);
>
> PciIo->Pci.Write (
> @@ -1335,7 +1362,9 @@ ProgramBar (
> &Address32
> );
>
> - Node->PciDev->PciBar[Node->Bar].BaseAddress = Address;
> + if (!Ascending) {
> + Node->PciDev->PciBar[Node->Bar].BaseAddress = Address;
> + }
>
> break;
>
> diff --git a/MdeModulePkg/MdeModulePkg.dec b/MdeModulePkg/MdeModulePkg.dec
> index cc39718..911f33a 100644
> --- a/MdeModulePkg/MdeModulePkg.dec
> +++ b/MdeModulePkg/MdeModulePkg.dec
> @@ -1005,6 +1005,9 @@
> # @Prompt Enable UEFI Stack Guard.
> gEfiMdeModulePkgTokenSpaceGuid.PcdCpuStackGuard|FALSE|
> BOOLEAN|0x30001055
>
> + ## Indicates if the resource list is sorted in ascending order
> + gEfiMdeModulePkgTokenSpaceGuid.PcdListAscending|FALSE|
> BOOLEAN|0x30001056
> +
> [PcdsFixedAtBuild, PcdsPatchableInModule]
> ## Dynamic type PCD can be registered callback function for Pcd setting
> action.
> # PcdMaxPeiPcdCallBackNumberPerPcdEntry indicates the maximum number
> of callback function
> diff --git a/MdeModulePkg/MdeModulePkg.dsc b/MdeModulePkg/MdeModulePkg.dsc
> index ec24a50..2dee860 100644
> --- a/MdeModulePkg/MdeModulePkg.dsc
> +++ b/MdeModulePkg/MdeModulePkg.dsc
> @@ -200,6 +200,7 @@
> gEfiMdeModulePkgTokenSpaceGuid.PcdMaxSizeNonPopulateCapsule|0x0
> gEfiMdeModulePkgTokenSpaceGuid.PcdMaxSizePopulateCapsule|0x0
> gEfiMdeModulePkgTokenSpaceGuid.PcdMaxPeiPerformanceLogEntries|28
> + gEfiMdeModulePkgTokenSpaceGuid.PcdListAscending|FALSE
>
> [PcdsFixedAtBuild.IPF]
> gEfiMdePkgTokenSpaceGuid.PcdIoBlockBaseAddressForIpf|0x0ffffc000000
> --
> 2.7.4
>
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2018-04-30 15:49 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-04-28 18:53 [PATCH v1] MdeModulePkg/Bus: Enable ascending resource list Roman Bacik
2018-04-30 15:48 ` Roman Bacik
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox