[U-Boot] [PATCH v3 6/7] armv8: ls1046a: add icid setup for qman portals

Laurentiu Tudor laurentiu.tudor at nxp.com
Mon Jul 9 13:53:21 UTC 2018


Hi Bharat,

On 09.07.2018 15:21, Bharat Bhushan wrote:
> 
> 
>> -----Original Message-----
>> From: Laurentiu Tudor [mailto:laurentiu.tudor at nxp.com]
>> Sent: Wednesday, July 4, 2018 7:44 PM
>> To: York Sun <york.sun at nxp.com>; Prabhakar Kushwaha
>> <prabhakar.kushwaha at nxp.com>; u-boot at lists.denx.de
>> Cc: Bharat Bhushan <bharat.bhushan at nxp.com>; Laurentiu Tudor
>> <laurentiu.tudor at nxp.com>
>> Subject: [PATCH v3 6/7] armv8: ls1046a: add icid setup for qman portals
>>
>> Add support for ICID setting of qman portals and
>> the required device tree fixups.
>> Also fix an endiness issue in portal setup code.
>>
>> Signed-off-by: Laurentiu Tudor <laurentiu.tudor at nxp.com>
>> ---
>>   .../arm/cpu/armv8/fsl-layerscape/ls1046_ids.c | 16 +++++++
>>   .../asm/arch-fsl-layerscape/fsl_portals.h     | 23 ++++++++++
>>   drivers/misc/fsl_portals.c                    | 43 +++++++++++++++----
>>   3 files changed, 74 insertions(+), 8 deletions(-)
>>   create mode 100644 arch/arm/include/asm/arch-fsl-layerscape/fsl_portals.h
>>
>> diff --git a/arch/arm/cpu/armv8/fsl-layerscape/ls1046_ids.c
>> b/arch/arm/cpu/armv8/fsl-layerscape/ls1046_ids.c
>> index 1c528ab751..80e1ceadc0 100644
>> --- a/arch/arm/cpu/armv8/fsl-layerscape/ls1046_ids.c
>> +++ b/arch/arm/cpu/armv8/fsl-layerscape/ls1046_ids.c
>> @@ -6,6 +6,22 @@
>>   #include <common.h>
>>   #include <asm/arch-fsl-layerscape/immap_lsch2.h>
>>   #include <asm/arch-fsl-layerscape/fsl_icid.h>
>> +#include <asm/arch-fsl-layerscape/fsl_portals.h>
>> +
>> +#ifdef CONFIG_SYS_DPAA_QBMAN
>> +struct qportal_info qp_info[CONFIG_SYS_QMAN_NUM_PORTALS] = {
>> +	SET_QP_INFO(FSL_DPAA1_STREAM_ID_END, 0),
>> +	SET_QP_INFO(FSL_DPAA1_STREAM_ID_END, 0),
>> +	SET_QP_INFO(FSL_DPAA1_STREAM_ID_END, 0),
>> +	SET_QP_INFO(FSL_DPAA1_STREAM_ID_END, 0),
>> +	SET_QP_INFO(FSL_DPAA1_STREAM_ID_END, 0),
>> +	SET_QP_INFO(FSL_DPAA1_STREAM_ID_END, 0),
>> +	SET_QP_INFO(FSL_DPAA1_STREAM_ID_END, 0),
>> +	SET_QP_INFO(FSL_DPAA1_STREAM_ID_END, 0),
>> +	SET_QP_INFO(FSL_DPAA1_STREAM_ID_END, 0),
>> +	SET_QP_INFO(FSL_DPAA1_STREAM_ID_END, 0),
> 
> FSL_DPAA1_STREAM_ID_END is "Stream-ID" while SET_QP_INFO is defined as
> 
>   #define SET_QP_INFO(_icid, dest) \
>   	{ .dicid = _icid, .ficid = _icid, .icid = _icid, .sdest = dest }
>   
> It expects "icid"
> 
> Can we use consistent names, either "streamed" or "icid" at both places.

The problem is that the streamid defines where defined some time ago 
(see file ./arch/arm/include/asm/arch-fsl-layerscape/stream_id_lsch2.h).

> In fact this structure is used to finally program the h/w, so we should use same name as in h/w to avoid any confusion.

The RefMan uses the term "icid" so i'd stick with it.

In order to make this consistent I think i should rename the existing 
*_STREAM_ID_* defines to *_ICID_* but also the header that contains them 
from stream_id_lsch2.h to something like icid_lsch2.h. This implies that 
also the PCI related defines would be renamed. Is that ok?
Let me know what you think.

---
Best Regards, Laurentiu

> 
> Thanks
> -Bharat
> 
>> +};
>> +#endif
>>
>>   struct icid_id_table icid_tbl[] = {
>>   #ifdef CONFIG_SYS_DPAA_QBMAN
>> diff --git a/arch/arm/include/asm/arch-fsl-layerscape/fsl_portals.h
>> b/arch/arm/include/asm/arch-fsl-layerscape/fsl_portals.h
>> new file mode 100644
>> index 0000000000..bd8d3fb49a
>> --- /dev/null
>> +++ b/arch/arm/include/asm/arch-fsl-layerscape/fsl_portals.h
>> @@ -0,0 +1,23 @@
>> +/* SPDX-License-Identifier: GPL-2.0+ */
>> +/*
>> + * Copyright 2018 NXP
>> + */
>> +
>> +#ifndef _FSL_PORTALS_H_
>> +#define _FSL_PORTALS_H_
>> +
>> +struct qportal_info {
>> +	u16	dicid;	/* DQRR ICID */
>> +	u16	ficid;	/* frame data ICID */
>> +	u16	icid;
>> +	u8	sdest;
>> +};
>> +
>> +#define SET_QP_INFO(_icid, dest) \
>> +	{ .dicid = _icid, .ficid = _icid, .icid = _icid, .sdest = dest }
>> +
>> +extern struct qportal_info qp_info[];
>> +void fdt_portal(void *blob, const char *compat, const char *container,
>> +		u64 addr, u32 size);
>> +
>> +#endif
>> diff --git a/drivers/misc/fsl_portals.c b/drivers/misc/fsl_portals.c
>> index 22faf16751..a524510707 100644
>> --- a/drivers/misc/fsl_portals.c
>> +++ b/drivers/misc/fsl_portals.c
>> @@ -13,6 +13,9 @@
>>   #ifdef CONFIG_PPC
>>   #include <asm/fsl_portals.h>
>>   #include <asm/fsl_liodn.h>
>> +#else
>> +#include <asm/arch-fsl-layerscape/fsl_portals.h>
>> +#include <asm/arch-fsl-layerscape/fsl_icid.h>
>>   #endif
>>   #include <fsl_qbman.h>
>>
>> @@ -45,6 +48,22 @@ void setup_qbman_portals(void)
>>   		/* set frame liodn */
>>   		out_be32(&qman->qcsp[i].qcsp_io_cfg, (sdest << 16) |
>> fliodn);
>>   	}
>> +#else
>> +#ifdef CONFIG_ARM
>> +	int i;
>> +
>> +	for (i = 0; i < CONFIG_SYS_QMAN_NUM_PORTALS; i++) {
>> +		u8 sdest = qp_info[i].sdest;
>> +		u16 ficid = qp_info[i].ficid;
>> +		u16 dicid = qp_info[i].dicid;
>> +		u16 icid = qp_info[i].icid;
>> +
>> +		out_be32(&qman->qcsp[i].qcsp_lio_cfg, (icid << 16) |
>> +					dicid);
>> +		/* set frame icid */
>> +		out_be32(&qman->qcsp[i].qcsp_io_cfg, (sdest << 16) | ficid);
>> +	}
>> +#endif
>>   #endif
>>
>>   	/* Change default state of BMan ISDR portals to all 1s */
>> @@ -178,6 +197,10 @@ void fdt_fixup_qportals(void *blob)
>>   	char compat[64];
>>   	int compat_len;
>>
>> +#ifndef CONFIG_PPC
>> +	int smmu_ph = fdt_get_smmu_phandle(blob);
>> +#endif
>> +
>>   	maj = (rev_1 >> 8) & 0xff;
>>   	min = rev_1 & 0xff;
>>   	ip_cfg = rev_2 & 0xff;
>> @@ -188,7 +211,6 @@ void fdt_fixup_qportals(void *blob)
>>
>>   	off = fdt_node_offset_by_compatible(blob, -1, "fsl,qman-portal");
>>   	while (off != -FDT_ERR_NOTFOUND) {
>> -#ifdef CONFIG_PPC
>>   #ifdef CONFIG_FSL_CORENET
>>   		u32 liodns[2];
>>   #endif
>> @@ -198,12 +220,7 @@ void fdt_fixup_qportals(void *blob)
>>   		if (!ci)
>>   			goto err;
>>
>> -		i = *ci;
>> -#ifdef CONFIG_SYS_DPAA_FMAN
>> -		int j;
>> -#endif
>> -
>> -#endif /* CONFIG_PPC */
>> +		i = fdt32_to_cpu(*ci);
>>   		err = fdt_setprop(blob, off, "compatible", compat,
>> compat_len);
>>   		if (err < 0)
>>   			goto err;
>> @@ -235,7 +252,7 @@ void fdt_fixup_qportals(void *blob)
>>   #endif
>>
>>   #ifdef CONFIG_SYS_DPAA_FMAN
>> -		for (j = 0; j < CONFIG_SYS_NUM_FMAN; j++) {
>> +		for (int j = 0; j < CONFIG_SYS_NUM_FMAN; j++) {
>>   			char name[] = "fman at 0";
>>
>>   			name[sizeof(name) - 2] = '0' + j;
>> @@ -251,6 +268,16 @@ void fdt_fixup_qportals(void *blob)
>>   		if (err < 0)
>>   			goto err;
>>   #endif
>> +#else
>> +		if (smmu_ph >= 0) {
>> +			u32 icids[3];
>> +
>> +			icids[0] = qp_info[i].icid;
>> +			icids[1] = qp_info[i].dicid;
>> +			icids[2] = qp_info[i].ficid;
>> +
>> +			fdt_set_iommu_prop(blob, off, smmu_ph, icids, 3);
>> +		}
>>   #endif /* CONFIG_PPC */
>>
>>   err:
>> --
>> 2.17.1
> 


More information about the U-Boot mailing list