[PATCH 3/6] MPC5121 Add generic board support
Grant Likely
grant.likely at secretlab.ca
Sun Jun 29 15:30:35 EST 2008
Mostly looks good, but a few comments below.
On Fri, Jun 20, 2008 at 10:58:36AM -0600, John Rigby wrote:
> Move shared code from mpc5121_ads.c to mpc512x_shared.c.
> Add new generic board setup mpc5121_generic.c
>
> Signed-off-by: John Rigby <jrigby at freescale.com>
> ---
> arch/powerpc/platforms/512x/Kconfig | 15 ++++-
> arch/powerpc/platforms/512x/Makefile | 3 +-
> arch/powerpc/platforms/512x/mpc5121_ads.c | 45 +---------------
> arch/powerpc/platforms/512x/mpc5121_generic.c | 72 +++++++++++++++++++++++++
> arch/powerpc/platforms/512x/mpc512x.h | 14 +++++
> arch/powerpc/platforms/512x/mpc512x_shared.c | 66 ++++++++++++++++++++++
> 6 files changed, 168 insertions(+), 47 deletions(-)
> create mode 100644 arch/powerpc/platforms/512x/mpc5121_generic.c
> create mode 100644 arch/powerpc/platforms/512x/mpc512x.h
> create mode 100644 arch/powerpc/platforms/512x/mpc512x_shared.c
>
> diff --git a/arch/powerpc/platforms/512x/Kconfig b/arch/powerpc/platforms/512x/Kconfig
> index 4c0da0c..f9a04da 100644
> --- a/arch/powerpc/platforms/512x/Kconfig
> +++ b/arch/powerpc/platforms/512x/Kconfig
> @@ -2,12 +2,10 @@ config PPC_MPC512x
> bool
> select FSL_SOC
> select IPIC
> - default n
>
> config PPC_MPC5121
> bool
> select PPC_MPC512x
> - default n
>
> config MPC5121_ADS
> bool "Freescale MPC5121E ADS"
> @@ -16,4 +14,15 @@ config MPC5121_ADS
> select PPC_MPC5121
> help
> This option enables support for the MPC5121E ADS board.
> - default n
> +
> +config MPC5121_GENERIC
> + bool "Generic support for simple MPC5121 based boards"
> + depends on PPC_MULTIPLATFORM && PPC32
> + select DEFAULT_UIMAGE
> + select PPC_MPC5121
> + help
> + This option enables support for simple MPC5121 based boards
> + which do not need custome platform specific setup.
typo
> +
> + Compatible boards include: Protonic LVT base boards (ZANMCU
> + and VICVT2).
> diff --git a/arch/powerpc/platforms/512x/Makefile b/arch/powerpc/platforms/512x/Makefile
> index ef6c925..e6674c8 100644
> --- a/arch/powerpc/platforms/512x/Makefile
> +++ b/arch/powerpc/platforms/512x/Makefile
> @@ -1,5 +1,6 @@
> #
> # Makefile for the Freescale PowerPC 512x linux kernel.
> #
> -obj-y := clock.o
> +obj-y := clock.o mpc512x_shared.o
> obj-$(CONFIG_MPC5121_ADS) += mpc5121_ads.o
> +obj-$(CONFIG_MPC5121_GENERIC) += mpc5121_generic.o
> diff --git a/arch/powerpc/platforms/512x/mpc5121_ads.c b/arch/powerpc/platforms/512x/mpc5121_ads.c
> index 50bd3a3..45bb2ef 100644
> --- a/arch/powerpc/platforms/512x/mpc5121_ads.c
> +++ b/arch/powerpc/platforms/512x/mpc5121_ads.c
> @@ -68,20 +40,7 @@ static void __init mpc5121_ads_declare_of_platform_devices(void)
>
> static void __init mpc5121_ads_init_IRQ(void)
> {
> - struct device_node *np;
> -
> - np = of_find_compatible_node(NULL, NULL, "fsl,ipic");
> - if (!np)
> - return;
> -
> - ipic_init(np, 0);
> - of_node_put(np);
> -
> - /*
> - * Initialize the default interrupt mapping priorities,
> - * in case the boot rom changed something on us.
> - */
> - ipic_set_default_priority();
> + mpc512x_init_IRQ();
> }
Why not just put mpc512x_init_IRQ directly into the machine structure?
>
> /*
> diff --git a/arch/powerpc/platforms/512x/mpc5121_generic.c b/arch/powerpc/platforms/512x/mpc5121_generic.c
> new file mode 100644
> index 0000000..0111a98
> --- /dev/null
> +++ b/arch/powerpc/platforms/512x/mpc5121_generic.c
> @@ -0,0 +1,72 @@
> +/*
> + * Copyright (C) 2007,2008 Freescale Semiconductor, Inc. All rights reserved.
> + *
> + * Author: John Rigby, <jrigby at freescale.com>
> + *
> + * Description:
> + * MPC5121 SoC setup
> + *
> + * This 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_platform.h>
> +
> +#include <asm/machdep.h>
> +#include <asm/ipic.h>
> +#include <asm/prom.h>
> +#include <asm/time.h>
> +
> +#include "mpc512x.h"
> +
> +static struct of_device_id __initdata of_bus_ids[] = {
> + { .name = "soc", },
> + { .name = "localbus", },
Ugh. Not good. Bind against compatible, not name or type.
> + {},
> +};
> +
> +static void __init mpc5121_generic_declare_of_platform_devices(void)
> +{
> + /* Find every child of the SOC node and add it to of_platform */
> + if (of_platform_bus_probe(NULL, of_bus_ids, NULL))
> + printk(KERN_ERR __FILE__ ": "
> + "Error while probing of_platform bus\n");
> +}
> +
> +/*
> + * list of supported boards
> + */
> +static char *board[] __initdata = {
> + "prt,prtlvt",
> + NULL
> +};
> +
> +/*
> + * Called very early, MMU is off, device-tree isn't unflattened
> + */
> +static int __init mpc5121_generic_probe(void)
> +{
> + unsigned long node = of_get_flat_dt_root();
> + int i = 0;
> +
> + while (board[i]) {
> + if (of_flat_dt_is_compatible(node, board[i]))
> + break;
> + i++;
> + }
> +
> + return board[i] != NULL;
> +}
> +
> +define_machine(mpc5121_generic) {
> + .name = "MPC5121 generic",
> + .probe = mpc5121_generic_probe,
> + .init = mpc5121_generic_declare_of_platform_devices,
> + .init_IRQ = mpc512x_init_IRQ,
> + .get_irq = ipic_get_irq,
> + .calibrate_decr = generic_calibrate_decr,
> +};
> diff --git a/arch/powerpc/platforms/512x/mpc512x.h b/arch/powerpc/platforms/512x/mpc512x.h
> new file mode 100644
> index 0000000..789b817
> --- /dev/null
> +++ b/arch/powerpc/platforms/512x/mpc512x.h
> @@ -0,0 +1,14 @@
> +/*
> + * Copyright (C) 2007 Freescale Semiconductor, Inc. All rights reserved.
> + *
> + * 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.
> + */
Should probably state what this file is for in the header block.
> diff --git a/arch/powerpc/platforms/512x/mpc512x_shared.c b/arch/powerpc/platforms/512x/mpc512x_shared.c
> new file mode 100644
> index 0000000..4b8fe6a
> --- /dev/null
> +++ b/arch/powerpc/platforms/512x/mpc512x_shared.c
> @@ -0,0 +1,66 @@
> +/*
> + * Copyright (C) 2007,2008 Freescale Semiconductor, Inc. All rights reserved.
> + *
> + * Author: John Rigby <jrigby at freescale.com>
> + *
> + * Description:
> + * MPC512x Shared code
> + *
> + * This 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/io.h>
> +#include <linux/irq.h>
> +#include <linux/of_platform.h>
> +
> +#include <asm/machdep.h>
> +#include <asm/ipic.h>
> +#include <asm/prom.h>
> +#include <asm/time.h>
> +
> +#include "mpc512x.h"
> +
> +unsigned long
> +mpc512x_find_ips_freq(struct device_node *node)
> +{
> + struct device_node *np;
> + const unsigned int *p_ips_freq = NULL;
> +
> + of_node_get(node);
> + while (node) {
> + p_ips_freq = of_get_property(node, "bus-frequency", NULL);
> + if (p_ips_freq)
> + break;
> +
> + np = of_get_parent(node);
> + of_node_put(node);
> + node = np;
> + }
> + if (node)
> + of_node_put(node);
> +
> + return p_ips_freq ? *p_ips_freq : 0;
> +}
> +EXPORT_SYMBOL(mpc512x_find_ips_freq);
This looks identical to the 52xx version. Perhaps they should be
merged... I wouldn't bother for getting this mainlined, but it is
something to think about for the future.
g.
More information about the Linuxppc-dev
mailing list