[U-Boot] [upstream-release] [PATCH] pci: layerscape: add option to statically allocate PCI StreamIDs

Laurentiu Tudor laurentiu.tudor at nxp.com
Thu Jan 31 08:56:33 UTC 2019


Hi Bharat,

Actually I've sent this patch by mistake, sorry for that.
I'll drop it and resend the patch series.

---
Best Regards, Laurentiu

On 30.01.2019 16:41, Bharat Bhushan wrote:
> 
> 
>> -----Original Message-----
>> From: upstream-release-bounces at linux.nxdi.nxp.com <upstream-release-
>> bounces at linux.nxdi.nxp.com> On Behalf Of laurentiu.tudor at nxp.com
>> Sent: Wednesday, January 30, 2019 5:31 PM
>> To: u-boot at lists.denx.de; Prabhakar Kushwaha
>> <prabhakar.kushwaha at nxp.com>; York Sun <york.sun at nxp.com>
>> Cc: Laurentiu Tudor <laurentiu.tudor at nxp.com>
>> Subject: [upstream-release] [PATCH] pci: layerscape: add option to statically
>> allocate PCI StreamIDs
>>
>> From: Laurentiu Tudor <laurentiu.tudor at 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 at 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
> 
> Why 3 controllers?
> 
>> +	};
>> +	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;
> 
> Why to continue if we are out of stream-ids?
> 
>> +			}
>> +
>> +			index = ls_pcie_next_lut_index(pcie);
>> +			if (index < 0) {
>> +				debug("ERROR: no LUT indexes free\n");
>> +				continue;
> 
> We can error out when out of LUT entry
> 
>> +			}
>> +
>> +			bdf = PCI_BDF(i, 0, 0);
>> +			/* 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
>>
>> --
>> 2.17.1
>>
>> _______________________________________________
>> upstream-release mailing list
>> upstream-release at linux.nxdi.nxp.com
>> https://emea01.safelinks.protection.outlook.com/?url=https%3A%2F%2Flin
>> ux.nxdi.nxp.com%2Fmailman%2Flistinfo%2Fupstream-
>> release&data=02%7C01%7Cbharat.bhushan%40nxp.com%7C58a43424e
>> 5724733c5f908d686aa9f3f%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0
>> %7C636844464703698542&sdata=TZpx5GzIpO%2FUoGWMzDNPIy5SpH
>> UZFkSIDQLkZn%2FZMJE%3D&reserved=0


More information about the U-Boot mailing list