[edk2-devel] [PATCH 4/5] Silicon/Broadcom/Bcm27xx: Tweak PCIe for CM4

Jeremy Linton jeremy.linton at arm.com
Fri Aug 6 14:06:14 UTC 2021


Hi,

On 8/6/21 8:42 AM, Ard Biesheuvel wrote:
> On Thu, 5 Aug 2021 at 18:36, Jeremy Linton <jeremy.linton at arm.com> wrote:
>>
>> The CM4 has an actual pcie slot, so we need to move the linkup
>> check to the configuration probe logic. Further the device
>> restriction logic needs to be relaxed to support downstream
>> PCIe switches.
>>
>> Suggested-by: René Treffer <treffer+groups.io at measite.de>
>> Signed-off-by: Jeremy Linton <jeremy.linton at arm.com>
> 
> Please split this into two patches.

Your talking about the linkup move, vs expanding the dev<0 check?

Ok.


> 
>> ---
>>   .../Bcm2711PciHostBridgeLibConstructor.c           |  5 -----
>>   .../Library/Bcm2711PciSegmentLib/PciSegmentLib.c   | 24 +++++++++++++++-------
>>   2 files changed, 17 insertions(+), 12 deletions(-)
>>
>> diff --git a/Silicon/Broadcom/Bcm27xx/Library/Bcm2711PciHostBridgeLib/Bcm2711PciHostBridgeLibConstructor.c b/Silicon/Broadcom/Bcm27xx/Library/Bcm2711PciHostBridgeLib/Bcm2711PciHostBridgeLibConstructor.c
>> index 8587d2d36d..4d4c584726 100644
>> --- a/Silicon/Broadcom/Bcm27xx/Library/Bcm2711PciHostBridgeLib/Bcm2711PciHostBridgeLibConstructor.c
>> +++ b/Silicon/Broadcom/Bcm27xx/Library/Bcm2711PciHostBridgeLib/Bcm2711PciHostBridgeLibConstructor.c
>> @@ -204,11 +204,6 @@ Bcm2711PciHostBridgeLibConstructor (
>>     } while (((Data & 0x30) != 0x030) && (Timeout));
>>     DEBUG ((DEBUG_VERBOSE, "PCIe link ready (status=%x) Timeout=%d\n", Data, Timeout));
>>
>> -  if ((Data & 0x30) != 0x30) {
>> -    DEBUG ((DEBUG_ERROR, "PCIe link not ready (status=%x)\n", Data));
>> -    return EFI_DEVICE_ERROR;
>> -  }
>> -
>>     if ((Data & 0x80) != 0x80) {
>>       DEBUG ((DEBUG_ERROR, "PCIe link not in RC mode (status=%x)\n", Data));
>>       return EFI_UNSUPPORTED;
>> diff --git a/Silicon/Broadcom/Bcm27xx/Library/Bcm2711PciSegmentLib/PciSegmentLib.c b/Silicon/Broadcom/Bcm27xx/Library/Bcm2711PciSegmentLib/PciSegmentLib.c
>> index 44ce3b4b99..3ccc131eab 100644
>> --- a/Silicon/Broadcom/Bcm27xx/Library/Bcm2711PciSegmentLib/PciSegmentLib.c
>> +++ b/Silicon/Broadcom/Bcm27xx/Library/Bcm2711PciSegmentLib/PciSegmentLib.c
>> @@ -78,6 +78,8 @@ PciSegmentLibGetConfigBase (
>>     UINT64        Base;
>>     UINT64        Offset;
>>     UINT32        Dev;
>> +  UINT32        Bus;
>> +  UINT32        Data;
>>
>>     Base = PCIE_REG_BASE;
>>     Offset = Address & 0xFFF;         /* Pick off the 4k register offset */
>> @@ -89,17 +91,25 @@ PciSegmentLibGetConfigBase (
>>       Base += PCIE_EXT_CFG_DATA;
>>       if (mPciSegmentLastAccess != Address) {
>>         Dev = EFI_PCI_ADDR_DEV (Address);
>> +      Bus = EFI_PCI_ADDR_BUS (Address);
>> +
>>         /*
>> -       * Scan things out directly rather than translating the "bus" to a device, etc..
>> -       * only we need to limit each bus to a single device.
>> +       * There can only be a single device on bus 1 (downstream of root).
>> +       * Subsequent busses (behind a PCIe switch) can have more.
>>          */
>> -      if (Dev < 1) {
>> -          MmioWrite32 (PCIE_REG_BASE + PCIE_EXT_CFG_INDEX, Address);
>> -          mPciSegmentLastAccess = Address;
>> -      } else {
>> -          mPciSegmentLastAccess = 0;
>> +      if (Dev > 0 && (Bus < 2)) {
>>             return 0xFFFFFFFF;
>>         }
>> +
>> +      /* Don't probe slots if the link is down */
>> +      Data = MmioRead32 (PCIE_REG_BASE + PCIE_MISC_PCIE_STATUS);
>> +      if ((Data & 0x30) != 0x30) {
>> +          DEBUG ((DEBUG_ERROR, "PCIe link not ready (status=%x)\n", Data));
>> +          return 0xFFFFFFFF;
>> +      }
>> +
>> +      MmioWrite32 (PCIE_REG_BASE + PCIE_EXT_CFG_INDEX, Address);
>> +      mPciSegmentLastAccess = Address;
>>       }
>>     }
>>     return Base + Offset;
>> --
>> 2.13.7
>>



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#78808): https://edk2.groups.io/g/devel/message/78808
Mute This Topic: https://groups.io/mt/84688700/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-






More information about the edk2-devel-archive mailing list