[PATCH 2/8] [POWERPC] fsl_lbc: implement few routines to manage FSL UPMs

Kumar Gala galak at kernel.crashing.org
Sat Apr 12 00:09:57 EST 2008


On Mar 11, 2008, at 12:24 PM, Anton Vorontsov wrote:
> These will be used by the FSL UPM NAND driver.

can this be a bit more descriptive.  What exactly are these functions  
trying to accomplish.

>
>
> Signed-off-by: Anton Vorontsov <avorontsov at ru.mvista.com>
> ---
> arch/powerpc/Kconfig          |    5 ++
> arch/powerpc/sysdev/Makefile  |    1 +
> arch/powerpc/sysdev/fsl_lbc.c |   99 ++++++++++++++++++++++++++++++++ 
> +++++++++
> include/asm-powerpc/fsl_lbc.h |   63 ++++++++++++++++++++++++++
> 4 files changed, 168 insertions(+), 0 deletions(-)
> create mode 100644 arch/powerpc/sysdev/fsl_lbc.c
>
> diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
> index ef12db0..9c68592 100644
> --- a/arch/powerpc/Kconfig
> +++ b/arch/powerpc/Kconfig
> @@ -491,6 +491,11 @@ config FSL_PCI
>  	bool
> 	select PPC_INDIRECT_PCI
>
> +config FSL_LBC
> +	bool
> +	help
> +	  Freescale Localbus support
> +
> # Yes MCA RS/6000s exist but Linux-PPC does not currently support any
> config MCA
> 	bool
> diff --git a/arch/powerpc/sysdev/Makefile b/arch/powerpc/sysdev/ 
> Makefile
> index 15f3e85..62b6ef0 100644
> --- a/arch/powerpc/sysdev/Makefile
> +++ b/arch/powerpc/sysdev/Makefile
> @@ -12,6 +12,7 @@ obj-$(CONFIG_U3_DART)		+= dart_iommu.o
> obj-$(CONFIG_MMIO_NVRAM)	+= mmio_nvram.o
> obj-$(CONFIG_FSL_SOC)		+= fsl_soc.o
> obj-$(CONFIG_FSL_PCI)		+= fsl_pci.o
> +obj-$(CONFIG_FSL_LBC)		+= fsl_lbc.o
> obj-$(CONFIG_RAPIDIO)		+= fsl_rio.o
> obj-$(CONFIG_TSI108_BRIDGE)	+= tsi108_pci.o tsi108_dev.o
> obj-$(CONFIG_QUICC_ENGINE)	+= qe_lib/
> diff --git a/arch/powerpc/sysdev/fsl_lbc.c b/arch/powerpc/sysdev/ 
> fsl_lbc.c
> new file mode 100644
> index 0000000..b59f2f4
> --- /dev/null
> +++ b/arch/powerpc/sysdev/fsl_lbc.c
> @@ -0,0 +1,99 @@
> +/*
> + * Freescale UPM routines.
> + *
> + * Copyright (c) 2007-2008  MontaVista Software, Inc.
> + *
> + * Author: Anton Vorontsov <avorontsov at ru.mvista.com>
> + *
> + * This program is free software; you can redistribute it and/or  
> modify
> + * it under the terms of the GNU General Public License as  
> published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + */
> +
> +#include <linux/kernel.h>
> +#include <linux/of.h>
> +#include <asm/fsl_lbc.h>
> +
> +spinlock_t fsl_lbc_lock = __SPIN_LOCK_UNLOCKED(fsl_lbc_lock);
> +
> +struct fsl_lbc_regs __iomem *fsl_lbc_regs;
> +EXPORT_SYMBOL(fsl_lbc_regs);
> +
> +static char __initdata *compat_lbc[] = {
> +	"fsl,pq2-localbus",
> +	"fsl,pq2pro-localbus",
> +	"fsl,pq3-localbus",
> +	"fsl,elbc",
> +};
> +
> +static int __init fsl_lbc_init(void)
> +{
> +	struct device_node *lbus;
> +	int i;
> +
> +	for (i = 0; i < ARRAY_SIZE(compat_lbc); i++) {
> +		lbus = of_find_compatible_node(NULL, NULL, compat_lbc[i]);
> +		if (lbus)
> +			goto found;
> +	}
> +	return -ENODEV;
> +
> +found:
> +	fsl_lbc_regs = of_iomap(lbus, 0);
> +	of_node_put(lbus);
> +	if (!fsl_lbc_regs)
> +		return -ENOMEM;
> +	return 0;
> +}
> +arch_initcall(fsl_lbc_init);
> +
> +int fsl_upm_find(u32 base, struct fsl_upm *upm)

what is base?

>
> +{
> +	int i;
> +	__be32 br;
> +	__be32 or;
> +
> +	if (!fsl_lbc_regs)
> +		return -ENODEV;
> +
> +	for (i = 0; i < ARRAY_SIZE(fsl_lbc_regs->bank); i++) {
> +		br = in_be32(&fsl_lbc_regs->bank[i].br);
> +		or = in_be32(&fsl_lbc_regs->bank[i].or);
> +
> +		if (br & BR_V && (br & or & BR_BA) == base)
> +			goto found;
> +	}
> +
> +	return -ENOENT;
> +found:
> +	switch (br & BR_MSEL) {
> +	case BR_MS_UPMA:
> +		upm->mxmr = &fsl_lbc_regs->mamr;
> +		break;
> +	case BR_MS_UPMB:
> +		upm->mxmr = &fsl_lbc_regs->mbmr;
> +		break;
> +	case BR_MS_UPMC:
> +		upm->mxmr = &fsl_lbc_regs->mcmr;
> +		break;
> +	default:
> +		return -EINVAL;
> +	}
> +
> +	switch (br & BR_PS) {
> +	case BR_PS_8:
> +		upm->width = 8;
> +		break;
> +	case BR_PS_16:
> +		upm->width = 16;
> +		break;
> +	case BR_PS_32:
> +		upm->width = 32;
> +		break;
> +	default:
> +		return -EINVAL;
> +	}
> +
> +	return 0;
> +}




More information about the Linuxppc-dev mailing list