On Mar 11, 2015, at 12:04 AM, Igal.Liberman <igal.liber...@freescale.com> wrote:
> From: Igal Liberman <igal.liber...@freescale.com> commit message? > > Signed-off-by: Igal Liberman <igal.liber...@freescale.com> > --- > drivers/soc/fsl/fman/Kconfig | 10 + > drivers/soc/fsl/fman/Makefile | 2 + > drivers/soc/fsl/fman/port/Makefile | 3 + > drivers/soc/fsl/fman/port/fman_port.c | 1535 +++++++++++++++++++++++++++++++++ > 4 files changed, 1550 insertions(+) > create mode 100644 drivers/soc/fsl/fman/port/Makefile > create mode 100644 drivers/soc/fsl/fman/port/fman_port.c Should merge this with the header patch 3/11. Docs for the “public” functions would be good. - k > > diff --git a/drivers/soc/fsl/fman/Kconfig b/drivers/soc/fsl/fman/Kconfig > index 6e8b0a6..b4c98ef 100644 > --- a/drivers/soc/fsl/fman/Kconfig > +++ b/drivers/soc/fsl/fman/Kconfig > @@ -5,3 +5,13 @@ menuconfig FSL_FMAN > help > Freescale Data-Path Acceleration Architecture Frame Manager > (FMan) support > + > +if FSL_FMAN > + > +config FSL_FMAN_PORT > + bool "FMan port" > + default n > + help > + Freescale DPAA FMan port support > + > +endif # FSL_FMAN > diff --git a/drivers/soc/fsl/fman/Makefile b/drivers/soc/fsl/fman/Makefile > index e7a0575..437a325 100644 > --- a/drivers/soc/fsl/fman/Makefile > +++ b/drivers/soc/fsl/fman/Makefile > @@ -3,3 +3,5 @@ subdir-ccflags-$(CONFIG_FSL_FMAN) += > -I$(srctree)/drivers/soc/fsl/fman/flib > obj-$(CONFIG_FSL_FMAN) += fsl_fman.o > > fsl_fman-objs := fman.o > + > +obj-$(CONFIG_FSL_FMAN_PORT) += port/ > diff --git a/drivers/soc/fsl/fman/port/Makefile > b/drivers/soc/fsl/fman/port/Makefile > new file mode 100644 > index 0000000..0062fed > --- /dev/null > +++ b/drivers/soc/fsl/fman/port/Makefile > @@ -0,0 +1,3 @@ > +obj-$(CONFIG_FSL_FMAN_PORT) += fsl_fman_port.o > + > +fsl_fman_port-objs := fman_port.o > diff --git a/drivers/soc/fsl/fman/port/fman_port.c > b/drivers/soc/fsl/fman/port/fman_port.c > new file mode 100644 > index 0000000..cc05dc0 > --- /dev/null > +++ b/drivers/soc/fsl/fman/port/fman_port.c > @@ -0,0 +1,1535 @@ > +/* > + * Copyright 2008 - 2015 Freescale Semiconductor Inc. > + * > + * Redistribution and use in source and binary forms, with or without > + * modification, are permitted provided that the following conditions are > met: > + * * Redistributions of source code must retain the above copyright > + * notice, this list of conditions and the following disclaimer. > + * * Redistributions in binary form must reproduce the above copyright > + * notice, this list of conditions and the following disclaimer in the > + * documentation and/or other materials provided with the distribution. > + * * Neither the name of Freescale Semiconductor nor the > + * names of its contributors may be used to endorse or promote products > + * derived from this software without specific prior written permission. > + * > + * ALTERNATIVELY, this software may be distributed under the terms of the > + * GNU General Public License ("GPL") as published by the Free Software > + * Foundation, either version 2 of that License or (at your option) any > + * later version. > + * > + * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY > + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED > + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE > + * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY > + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES > + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR > SERVICES; > + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED > AND > + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > THIS > + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > + */ > + > +#include "common/general.h" > + > +#include "fman_common.h" > +#include "fsl_fman_port.h" > + > +/* problem Eyal: the following should not be here*/ ??? Eyal ??? > +#define NIA_FM_CTL_AC_NO_IPACC_PRE_BMI_ENQ_FRAME 0x00000028 > + > +static uint32_t get_no_pcd_nia_bmi_ac_enc_frame(struct fman_port_cfg *cfg) > +{ > + if (cfg->errata_A006675) > + return NIA_ENG_FM_CTL | > + NIA_FM_CTL_AC_NO_IPACC_PRE_BMI_ENQ_FRAME; > + else > + return NIA_ENG_BMI | NIA_BMI_AC_ENQ_FRAME; > +} > + > [snip] > +int fman_port_add_congestion_grps(struct fman_port *port, > + uint32_t grps_map[FMAN_PORT_CG_MAP_NUM]) Passing an array this way is usually bad form. > +{ > + int i; > + uint32_t __iomem *grp_map_reg; > + uint32_t tmp; > + uint8_t max_grp_map_num; > + > + switch (port->type) { > + case E_FMAN_PORT_TYPE_RX: > + case E_FMAN_PORT_TYPE_RX_10G: > + if (port->fm_rev_maj == 4) > + max_grp_map_num = 1; > + else > + max_grp_map_num = FMAN_PORT_CG_MAP_NUM; > + grp_map_reg = port->bmi_regs->rx.fmbm_rcgm; > + break; > + case E_FMAN_PORT_TYPE_OP: > + max_grp_map_num = 1; > + if (port->fm_rev_maj != 4) > + return -EINVAL; > + grp_map_reg = &port->bmi_regs->oh.fmbm_ocgm; > + break; > + default: > + return -EINVAL; > + } > + > + for (i = (max_grp_map_num - 1); i >= 0; i--) { > + if (grps_map[i] == 0) > + continue; > + tmp = ioread32be(&grp_map_reg[i]); > + tmp |= grps_map[i]; > + iowrite32be(tmp, &grp_map_reg[i]); > + } > + > + return 0; > +} > + > +int fman_port_remove_congestion_grps(struct fman_port *port, > + uint32_t grps_map[FMAN_PORT_CG_MAP_NUM]) > +{ > + int i; > + uint32_t __iomem *grp_map_reg; > + uint32_t tmp; > + uint8_t max_grp_map_num; > + > + switch (port->type) { > + case E_FMAN_PORT_TYPE_RX: > + case E_FMAN_PORT_TYPE_RX_10G: > + if (port->fm_rev_maj == 4) > + max_grp_map_num = 1; > + else > + max_grp_map_num = FMAN_PORT_CG_MAP_NUM; > + grp_map_reg = port->bmi_regs->rx.fmbm_rcgm; > + break; > + case E_FMAN_PORT_TYPE_OP: > + max_grp_map_num = 1; > + if (port->fm_rev_maj != 4) > + return -EINVAL; > + grp_map_reg = &port->bmi_regs->oh.fmbm_ocgm; > + break; > + default: > + return -EINVAL; > + } > + > + for (i = (max_grp_map_num - 1); i >= 0; i--) { > + if (grps_map[i] == 0) > + continue; > + tmp = ioread32be(&grp_map_reg[i]); > + tmp &= ~grps_map[i]; > + iowrite32be(tmp, &grp_map_reg[i]); > + } > + return 0; > +} > -- > 1.7.9.5 > > _______________________________________________ > Linuxppc-dev mailing list > Linuxppc-dev@lists.ozlabs.org > https://lists.ozlabs.org/listinfo/linuxppc-dev _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev