Hi Bharat, On 09.07.2018 15:21, Bharat Bhushan wrote: > > >> -----Original Message----- >> From: Laurentiu Tudor [mailto:laurentiu.tu...@nxp.com] >> Sent: Wednesday, July 4, 2018 7:44 PM >> To: York Sun <york....@nxp.com>; Prabhakar Kushwaha >> <prabhakar.kushw...@nxp.com>; u-boot@lists.denx.de >> Cc: Bharat Bhushan <bharat.bhus...@nxp.com>; Laurentiu Tudor >> <laurentiu.tu...@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.tu...@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@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 > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot