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

Bharat Bhushan bharat.bhushan at nxp.com
Mon Jul 9 12:21:12 UTC 2018



> -----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. 
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.

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