
Hi Laurentiu,
-----Original Message----- From: u-boot-bounces@linux.nxdi.nxp.com [mailto:u-boot- bounces@linux.nxdi.nxp.com] On Behalf Of laurentiu.tudor@nxp.com Sent: Wednesday, 30 January, 2019 05:31 PM To: u-boot@lists.denx.de; Prabhakar Kushwaha prabhakar.kushwaha@nxp.com; York Sun york.sun@nxp.com Subject: [u-boot] [PATCH] pci: layerscape: add option to statically allocate PCI StreamIDs
From: Laurentiu Tudor laurentiu.tudor@nxp.com
Certain PCI scenarios have more dynamic requirements, e.g. endpoints are "hot- plugged" later in the system lifetime. Add a Kconfig option that allows specifying a maximum number of end-points, per PCI controller and allocate a StreamID for each one.
Signed-off-by: Laurentiu Tudor laurentiu.tudor@nxp.com
arch/arm/cpu/armv8/fsl-layerscape/Kconfig | 28 +++++++++++++++++ drivers/pci/pcie_layerscape_fixup.c | 38 +++++++++++++++++++++++ 2 files changed, 66 insertions(+)
diff --git a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig index 2b086da79b..1d633d71a8 100644 --- a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig +++ b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig @@ -571,3 +571,31 @@ config TFABOOT help Enabling this will make a U-Boot binary that is capable of being booted via TFA.
+menuconfig FSL_PCIE_STATIC_STREAM_IDS
- bool "Allocate PCI streamIDs statically"
- default n
- depends on PCIE_LAYERSCAPE
- help
Statically allocate a certain number of StreamIDs for each PCI
controller, instead of enumerating the connected endpoints and
allocate a StreamID for each one. This allocation method can
be used in more dynamic PCI scenarios, e.g. where endpoints are
"hot-plugged" later in the system bringup, by statically specifying
a maximum number of StreamIDs expected for each PCI controller.
+if FSL_PCIE_STATIC_STREAM_IDS
+config FSL_PCIE1_STREAM_IDS_COUNT
- default 3
- int "Maximum number of streamIDs to allocate for PCI1 controller"
+config FSL_PCIE2_STREAM_IDS_COUNT
- default 3
- int "Maximum number of streamIDs to allocate for PCI2 controller"
+config FSL_PCIE3_STREAM_IDS_COUNT
- default 3
- int "Maximum number of streamIDs to allocate for PCI3 controller"
+endif diff --git a/drivers/pci/pcie_layerscape_fixup.c b/drivers/pci/pcie_layerscape_fixup.c index 1a17bd98aa..32355cbf2e 100644 --- a/drivers/pci/pcie_layerscape_fixup.c +++ b/drivers/pci/pcie_layerscape_fixup.c @@ -177,6 +177,7 @@ static void fdt_pcie_set_iommu_map_entry(void *blob, struct ls_pcie *pcie,
static void fdt_fixup_pcie(void *blob) { +#if !CONFIG_FSL_PCIE_STATIC_STREAM_IDS struct udevice *dev, *bus; struct ls_pcie *pcie; int streamid; @@ -215,6 +216,43 @@ static void fdt_fixup_pcie(void *blob) fdt_pcie_set_iommu_map_entry(blob, pcie, bdf >> 8, streamid); } +#else
- static const int streamid_cnt[] = {
CONFIG_FSL_PCIE1_STREAM_IDS_COUNT,
CONFIG_FSL_PCIE2_STREAM_IDS_COUNT,
CONFIG_FSL_PCIE3_STREAM_IDS_COUNT
- };
- struct ls_pcie *pcie;
- int i, streamid, index;
- pci_dev_t bdf;
- list_for_each_entry(pcie, &ls_pcie_list, list) {
for (i = 0; i < streamid_cnt[pcie->idx]; i++) {
streamid = ls_pcie_next_streamid();
if (streamid < 0) {
debug("ERROR: no stream ids free\n");
continue;
}
index = ls_pcie_next_lut_index(pcie);
if (index < 0) {
debug("ERROR: no LUT indexes free\n");
continue;
}
bdf = PCI_BDF(i, 0, 0);
As per my understanding, the BUS number in our SOCs would always be 0 for each PCIE controller. Only the device number and function number would change depending on the device(s) attached to PCIE controller.
/* map PCI b.d.f to streamID in LUT */
ls_pcie_lut_set_mapping(pcie, index, bdf >> 8,
streamid);
/* update msi-map in device tree */
fdt_pcie_set_msi_map_entry(blob, pcie, bdf >> 8,
streamid);
/* update iommu-map in device tree */
fdt_pcie_set_iommu_map_entry(blob, pcie, bdf >> 8,
streamid);
}
- }
+#endif /* !CONFIG_FSL_PCIE_STATIC_STREAM_IDS */ } #endif
Wouldn't the better alternative is to fix some stream IDs against BDF in device tree itself for all the PCIE devices that we know for sure would be attached to board. And limit the available streamIDs to be used by bootloader for dynamically discovered PCIE devices.
-- 2.17.1
u-boot mailing list u-boot@linux.nxdi.nxp.com https://emea01.safelinks.protection.outlook.com/?url=https%3A%2F%2Flinux.n xdi.nxp.com%2Fmailman%2Flistinfo%2Fu- boot&data=02%7C01%7Cpankaj.bansal%40nxp.com%7C8f02f086ad484f22 ec9608d686aaa058%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7C63 6844464748371835&sdata=1ls1cXUJ0AmJfqDgVxKM3FX6kpep%2F1Pvx1M ByOKl0Qc%3D&reserved=0