From: "Jeremy Linton" <jeremy.linton@arm.com>
To: "René Treffer" <treffer@measite.de>, devel@edk2.groups.io
Cc: Pete Batard <pete@akeo.ie>, Leif Lindholm <leif@nuviainc.com>,
Ard Biesheuvel <ardb+tianocore@kernel.org>,
"Andrei Warkentin (awarkentin@vmware.com)"
<awarkentin@vmware.com>,
Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.com>
Subject: Re: [edk2-platforms][PATCH 1/1] Silicon/Broadcom/Bcm27xx: Allow more than one device on pcie busses >1
Date: Fri, 12 Mar 2021 23:08:55 -0600 [thread overview]
Message-ID: <74065f91-c57c-522f-055e-ff0a09463a17@arm.com> (raw)
In-Reply-To: <e6ab946c-7a2d-58a6-0a36-9c339db027c4@measite.de>
Hi,
First, thanks for the patches, this really helps!
On 3/12/21 12:32 PM, René Treffer wrote:
> There is only a single pcie port on the bcm2711 so limiting the number of
> devices to 1 worked as long as there is no way to add a pcie switch.
>
> On the compute module 4 it is possible to add a pcie switch (tested with
> asm1184e) which adds 5 new pcie busses.
>
> In the current state the pci enumeration fails for the pcie switch
> internal bus (bus 2, device 1,3,5,7). The root port gets configured with
> subordniate=0x2, blocking e.g. a booting linux from discovering devices
> behind the switch.
>
> Devices behind the switch work after lifting the device limit on busses
> other than 0 and 1.
>
> Signed-off-by: René Treffer <treffer@measite.de>
> ---
> .../Library/Bcm2711PciSegmentLib/PciSegmentLib.c | 14 +++++++-------
> 1 file changed, 7 insertions(+), 7 deletions(-)
>
> diff --git
> a/Silicon/Broadcom/Bcm27xx/Library/Bcm2711PciSegmentLib/PciSegmentLib.c
> b/Silicon/Broadcom/Bcm27xx/Library/Bcm2711PciSegmentLib/PciSegmentLib.c
> index 44ce3b4b99..4af9374d23 100644
> --- a/Silicon/Broadcom/Bcm27xx/Library/Bcm2711PciSegmentLib/PciSegmentLib.c
> +++ b/Silicon/Broadcom/Bcm27xx/Library/Bcm2711PciSegmentLib/PciSegmentLib.c
> @@ -78,6 +78,7 @@ PciSegmentLibGetConfigBase (
> UINT64 Base;
> UINT64 Offset;
> UINT32 Dev;
> + UINT32 Bus;
>
> Base = PCIE_REG_BASE;
> Offset = Address & 0xFFF; /* Pick off the 4k register offset */
> @@ -89,17 +90,16 @@ 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) could have more.
> */
> - if (Dev < 1) {
> - MmioWrite32 (PCIE_REG_BASE + PCIE_EXT_CFG_INDEX, Address);
> - mPciSegmentLastAccess = Address;
> - } else {
> - mPciSegmentLastAccess = 0;
> + if (Dev > 0 && (Bus == 1 || Bus == 0)) {
Did you try this with another switch plugged in downstream the first one?
This looks right, because presumably the first new switch is sending the
UR's properly for its subordinate buses.
Dumping the segment last access reset is fine too.
Although, this set has unicode whitespace characters, which presumably
Ard fixed up in the previous patch since I see it there too.
> return 0xFFFFFFFF;
> }
> + MmioWrite32 (PCIE_REG_BASE + PCIE_EXT_CFG_INDEX, Address);
> + mPciSegmentLastAccess = Address;
> }
> }
> return Base + Offset;
>
So,
Reviewed-by: Jeremy Linton <jeremy.linton@arm.com>
Thanks again!
next prev parent reply other threads:[~2021-03-13 5:08 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-11 22:56 [edk2-platforms][PATCH 1/1] Silicon/Broadcom/Bcm27xx: Allow more than one device on pcie busses >1 René Treffer
2021-03-12 16:04 ` Ard Biesheuvel
2021-03-12 18:32 ` René Treffer
2021-03-13 5:08 ` Jeremy Linton [this message]
2021-03-13 12:21 ` treffer
2021-03-31 23:20 ` Jeremy Linton
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=74065f91-c57c-522f-055e-ff0a09463a17@arm.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox