Re: [edk2] [PATCH] MdeModulePkg/PciBus: Fix system hang when no PCI Option ROM exists
On 12/12/18 4:10 PM, Ruiyu Ni wrote: > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1394 > > When there is no PCI option ROM exists, today's logic still creates > virtual BAR for option ROM using Length = 0, Alignment = (-1). > It causes the final MEM32 alignment requirement is as big as > 0x_. > > The patch fixes this issue by only creating virtual BAR for option > ROM when there is PCI option ROM. > > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Ruiyu Ni > Cc: Chiu Chasel > Cc: Hao A Wu > Cc: Jian J Wang > --- > MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c | 10 ++ > 1 file changed, 6 insertions(+), 4 deletions(-) > > diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c > b/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c > index 7255bcfbbc..ee5c77147e 100644 > --- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c > +++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c > @@ -515,10 +515,12 @@ PciHostBridgeResourceAllocator ( >// All devices' Option ROM share the same MEM32 resource. >// >MaxOptionRomSize = GetMaxOptionRomSize (RootBridgeDev); > - RootBridgeDev->PciBar[0].BarType = PciBarTypeOpRom; > - RootBridgeDev->PciBar[0].Length= MaxOptionRomSize; > - RootBridgeDev->PciBar[0].Alignment = MaxOptionRomSize - 1; > - GetResourceFromDevice (RootBridgeDev, IoBridge, Mem32Bridge, > PMem32Bridge, Mem64Bridge, PMem64Bridge); > + if (MaxOptionRomSize != 0) { > +RootBridgeDev->PciBar[0].BarType = PciBarTypeOpRom; > +RootBridgeDev->PciBar[0].Length= MaxOptionRomSize; > +RootBridgeDev->PciBar[0].Alignment = MaxOptionRomSize - 1; > +GetResourceFromDevice (RootBridgeDev, IoBridge, Mem32Bridge, > PMem32Bridge, Mem64Bridge, PMem64Bridge); > + } > >// >// Create resourcemap by going through all the devices subject to this > root bridge > Reviewed-by: Philippe Mathieu-Daudé ___ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
Re: [edk2] [PATCH] MdeModulePkg/PciBus: Fix system hang when no PCI Option ROM exists
> -Original Message- > From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of > Ruiyu Ni > Sent: Wednesday, December 12, 2018 11:10 PM > To: edk2-devel@lists.01.org > Cc: Wu, Hao A > Subject: [edk2] [PATCH] MdeModulePkg/PciBus: Fix system hang when no > PCI Option ROM exists > > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1394 > > When there is no PCI option ROM exists, today's logic still creates > virtual BAR for option ROM using Length = 0, Alignment = (-1). > It causes the final MEM32 alignment requirement is as big as > 0x_. > > The patch fixes this issue by only creating virtual BAR for option > ROM when there is PCI option ROM. > > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Ruiyu Ni > Cc: Chiu Chasel > Cc: Hao A Wu > Cc: Jian J Wang > --- > MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c | 10 ++ > 1 file changed, 6 insertions(+), 4 deletions(-) > > diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c > b/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c > index 7255bcfbbc..ee5c77147e 100644 > --- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c > +++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c > @@ -515,10 +515,12 @@ PciHostBridgeResourceAllocator ( >// All devices' Option ROM share the same MEM32 resource. >// >MaxOptionRomSize = GetMaxOptionRomSize (RootBridgeDev); > - RootBridgeDev->PciBar[0].BarType = PciBarTypeOpRom; > - RootBridgeDev->PciBar[0].Length= MaxOptionRomSize; > - RootBridgeDev->PciBar[0].Alignment = MaxOptionRomSize - 1; > - GetResourceFromDevice (RootBridgeDev, IoBridge, Mem32Bridge, > PMem32Bridge, Mem64Bridge, PMem64Bridge); > + if (MaxOptionRomSize != 0) { > +RootBridgeDev->PciBar[0].BarType = PciBarTypeOpRom; > +RootBridgeDev->PciBar[0].Length= MaxOptionRomSize; > +RootBridgeDev->PciBar[0].Alignment = MaxOptionRomSize - 1; > +GetResourceFromDevice (RootBridgeDev, IoBridge, Mem32Bridge, > PMem32Bridge, Mem64Bridge, PMem64Bridge); > + } Reviewed-by: Hao Wu Best Regards, Hao Wu > >// >// Create resourcemap by going through all the devices subject to this > root bridge > -- > 2.16.1.windows.1 > > ___ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel ___ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
Re: [edk2] [PATCH] MdeModulePkg/PciBus: Fix system hang when no PCI Option ROM exists
Reviewed-by: Jian J Wang > -Original Message- > From: Ni, Ruiyu > Sent: Wednesday, December 12, 2018 11:10 PM > To: edk2-devel@lists.01.org > Cc: Chiu, Chasel ; Wu, Hao A ; > Wang, Jian J > Subject: [PATCH] MdeModulePkg/PciBus: Fix system hang when no PCI Option > ROM exists > > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1394 > > When there is no PCI option ROM exists, today's logic still creates > virtual BAR for option ROM using Length = 0, Alignment = (-1). > It causes the final MEM32 alignment requirement is as big as > 0x_. > > The patch fixes this issue by only creating virtual BAR for option > ROM when there is PCI option ROM. > > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Ruiyu Ni > Cc: Chiu Chasel > Cc: Hao A Wu > Cc: Jian J Wang > --- > MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c | 10 ++ > 1 file changed, 6 insertions(+), 4 deletions(-) > > diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c > b/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c > index 7255bcfbbc..ee5c77147e 100644 > --- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c > +++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c > @@ -515,10 +515,12 @@ PciHostBridgeResourceAllocator ( >// All devices' Option ROM share the same MEM32 resource. >// >MaxOptionRomSize = GetMaxOptionRomSize (RootBridgeDev); > - RootBridgeDev->PciBar[0].BarType = PciBarTypeOpRom; > - RootBridgeDev->PciBar[0].Length= MaxOptionRomSize; > - RootBridgeDev->PciBar[0].Alignment = MaxOptionRomSize - 1; > - GetResourceFromDevice (RootBridgeDev, IoBridge, Mem32Bridge, > PMem32Bridge, Mem64Bridge, PMem64Bridge); > + if (MaxOptionRomSize != 0) { > +RootBridgeDev->PciBar[0].BarType = PciBarTypeOpRom; > +RootBridgeDev->PciBar[0].Length= MaxOptionRomSize; > +RootBridgeDev->PciBar[0].Alignment = MaxOptionRomSize - 1; > +GetResourceFromDevice (RootBridgeDev, IoBridge, Mem32Bridge, > PMem32Bridge, Mem64Bridge, PMem64Bridge); > + } > >// >// Create resourcemap by going through all the devices subject to this > root > bridge > -- > 2.16.1.windows.1 ___ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
Re: [edk2] [PATCH] MdeModulePkg/PciBus: Fix system hang when no PCI Option ROM exists
On Wed, 12 Dec 2018 at 16:08, Ruiyu Ni wrote: > > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1394 > > When there is no PCI option ROM exists, today's logic still creates > virtual BAR for option ROM using Length = 0, Alignment = (-1). > It causes the final MEM32 alignment requirement is as big as > 0x_. > > The patch fixes this issue by only creating virtual BAR for option > ROM when there is PCI option ROM. > > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Ruiyu Ni > Cc: Chiu Chasel > Cc: Hao A Wu > Cc: Jian J Wang Tested-by: Ard Biesheuvel > --- > MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c | 10 ++ > 1 file changed, 6 insertions(+), 4 deletions(-) > > diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c > b/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c > index 7255bcfbbc..ee5c77147e 100644 > --- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c > +++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c > @@ -515,10 +515,12 @@ PciHostBridgeResourceAllocator ( >// All devices' Option ROM share the same MEM32 resource. >// >MaxOptionRomSize = GetMaxOptionRomSize (RootBridgeDev); > - RootBridgeDev->PciBar[0].BarType = PciBarTypeOpRom; > - RootBridgeDev->PciBar[0].Length= MaxOptionRomSize; > - RootBridgeDev->PciBar[0].Alignment = MaxOptionRomSize - 1; > - GetResourceFromDevice (RootBridgeDev, IoBridge, Mem32Bridge, > PMem32Bridge, Mem64Bridge, PMem64Bridge); > + if (MaxOptionRomSize != 0) { > +RootBridgeDev->PciBar[0].BarType = PciBarTypeOpRom; > +RootBridgeDev->PciBar[0].Length= MaxOptionRomSize; > +RootBridgeDev->PciBar[0].Alignment = MaxOptionRomSize - 1; > +GetResourceFromDevice (RootBridgeDev, IoBridge, Mem32Bridge, > PMem32Bridge, Mem64Bridge, PMem64Bridge); > + } > >// >// Create resourcemap by going through all the devices subject to this > root bridge > -- > 2.16.1.windows.1 > > ___ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel ___ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
[edk2] [PATCH] MdeModulePkg/PciBus: Fix system hang when no PCI Option ROM exists
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1394 When there is no PCI option ROM exists, today's logic still creates virtual BAR for option ROM using Length = 0, Alignment = (-1). It causes the final MEM32 alignment requirement is as big as 0x_. The patch fixes this issue by only creating virtual BAR for option ROM when there is PCI option ROM. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Ruiyu Ni Cc: Chiu Chasel Cc: Hao A Wu Cc: Jian J Wang --- MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c | 10 ++ 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c b/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c index 7255bcfbbc..ee5c77147e 100644 --- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c +++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c @@ -515,10 +515,12 @@ PciHostBridgeResourceAllocator ( // All devices' Option ROM share the same MEM32 resource. // MaxOptionRomSize = GetMaxOptionRomSize (RootBridgeDev); - RootBridgeDev->PciBar[0].BarType = PciBarTypeOpRom; - RootBridgeDev->PciBar[0].Length= MaxOptionRomSize; - RootBridgeDev->PciBar[0].Alignment = MaxOptionRomSize - 1; - GetResourceFromDevice (RootBridgeDev, IoBridge, Mem32Bridge, PMem32Bridge, Mem64Bridge, PMem64Bridge); + if (MaxOptionRomSize != 0) { +RootBridgeDev->PciBar[0].BarType = PciBarTypeOpRom; +RootBridgeDev->PciBar[0].Length= MaxOptionRomSize; +RootBridgeDev->PciBar[0].Alignment = MaxOptionRomSize - 1; +GetResourceFromDevice (RootBridgeDev, IoBridge, Mem32Bridge, PMem32Bridge, Mem64Bridge, PMem64Bridge); + } // // Create resourcemap by going through all the devices subject to this root bridge -- 2.16.1.windows.1 ___ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel