On Tue, Mar 15, 2011 at 01:03:42AM -0600, Grant Likely wrote:
Hi Jason,
Minor comments below.
On Thu, Mar 10, 2011 at 12:59:41PM +0800, Jason Liu wrote:
Signed-off-by: Jason Liu jason.hui@linaro.org Signed-off-by: Jason Liu r64343@freescale.com
This looks wrong. You should only have one s-o-b line. Use one email addr or the other. Not both.
arch/arm/mach-mx5/Kconfig | 8 ++++ arch/arm/mach-mx5/Makefile | 1 + arch/arm/mach-mx5/board-dt.c | 65 +++++++++++++++++++++++++++++++ arch/arm/mach-mx5/clock-mx51-mx53.c | 43 ++++++++++++++++++++- arch/arm/plat-mxc/include/mach/common.h | 1 + 5 files changed, 117 insertions(+), 1 deletions(-)
diff --git a/arch/arm/mach-mx5/Kconfig b/arch/arm/mach-mx5/Kconfig index de4fa99..6438f87 100644 --- a/arch/arm/mach-mx5/Kconfig +++ b/arch/arm/mach-mx5/Kconfig @@ -47,6 +47,14 @@ config MACH_MX51_BABBAGE u-boot. This includes specific configurations for the board and its peripherals. +config MACH_MX51_DT
- bool "Generic MX51 board (FDT support)"
- select USE_OF
- select SOC_IMX51
- help
Support for generic Freescale i.MX51 boards using Flattened Device
Tree.
config MACH_MX51_3DS bool "Support MX51PDK (3DS)" select SOC_IMX51 diff --git a/arch/arm/mach-mx5/Makefile b/arch/arm/mach-mx5/Makefile index 0d43be9..540697e 100644 --- a/arch/arm/mach-mx5/Makefile +++ b/arch/arm/mach-mx5/Makefile @@ -18,3 +18,4 @@ obj-$(CONFIG_MACH_EUKREA_CPUIMX51SD) += board-cpuimx51sd.o obj-$(CONFIG_MACH_EUKREA_MBIMXSD51_BASEBOARD) += eukrea_mbimxsd-baseboard.o obj-$(CONFIG_MACH_MX51_EFIKAMX) += board-mx51_efikamx.o obj-$(CONFIG_MACH_MX50_RDP) += board-mx50_rdp.o +obj-$(CONFIG_MACH_MX51_DT) += board-dt.o diff --git a/arch/arm/mach-mx5/board-dt.c b/arch/arm/mach-mx5/board-dt.c new file mode 100644 index 0000000..19c60a4 --- /dev/null +++ b/arch/arm/mach-mx5/board-dt.c @@ -0,0 +1,65 @@ +/*
- Copyright 2011 Linaro Ltd.
- Copyright 2011 Freescale Semiconductor, Inc.
- The code contained herein is licensed under the GNU General Public
- License. You may obtain a copy of the GNU General Public License
- Version 2 or later at the following locations:
- */
+#include <linux/err.h> +#include <linux/init.h> +#include <linux/platform_device.h> +#include <linux/dma-mapping.h> +#include <linux/of_platform.h> +#include <linux/of_fdt.h>
+#include <mach/common.h> +#include <mach/hardware.h> +#include <mach/imx-uart.h> +#include <mach/iomux-mx51.h>
+#include <asm/irq.h> +#include <asm/setup.h> +#include <asm/mach-types.h> +#include <asm/mach/arch.h> +#include <asm/mach/time.h>
+#include "devices.h"
+static struct of_device_id mx51_dt_match_table[] __initdata = {
- { .compatible = "simple-bus", },
- {}
+};
+static void __init mx51_dt_board_init(void) +{
- of_platform_bus_probe(NULL, mx51_dt_match_table, NULL);
+}
+static void __init mx51_dt_timer_init(void) +{
- mx51_clocks_init(32768, 24000000, 22579200, 0);
- mx5_clk_dt_init();
+}
+static struct sys_timer mxc_timer = {
- .init = mx51_dt_timer_init,
+};
+static const char *mx51_dt_board_compat[] = {
- "fsl,mx51-babbage",
- NULL
+};
+DT_MACHINE_START(MX51_DT, "Freescale MX51 (Flattened Device Tree)")
- .boot_params = PHYS_OFFSET + 0x100,
You should be able to drop the .boot_params line.
- .map_io = mx51_map_io,
- .init_irq = mx51_init_irq,
- .init_machine = mx51_dt_board_init,
- .dt_compat = mx51_dt_board_compat,
- .timer = &mxc_timer,
+MACHINE_END diff --git a/arch/arm/mach-mx5/clock-mx51-mx53.c b/arch/arm/mach-mx5/clock-mx51-mx53.c index 0a19e75..dedb7f9 100644 --- a/arch/arm/mach-mx5/clock-mx51-mx53.c +++ b/arch/arm/mach-mx5/clock-mx51-mx53.c @@ -15,13 +15,19 @@ #include <linux/clk.h> #include <linux/io.h> #include <linux/clkdev.h>
+#include <linux/err.h> #include <asm/div64.h> #include <mach/hardware.h> #include <mach/common.h> #include <mach/clock.h> +#ifdef CONFIG_OF +#include <linux/of.h> +#include <linux/of_address.h> +#include <linux/of_clk.h> +#endif /* CONFIG_OF */
You can drop the #ifdef CONFIG_OF here. linux/of*.h is safe to include when CONFIG_OF is not selected.
#include "crm_regs.h" /* External clock values passed-in by the board code */ @@ -1432,3 +1438,38 @@ int __init mx53_clocks_init(unsigned long ckil, unsigned long osc, MX53_INT_GPT); return 0; }
+#ifdef CONFIG_OF +static struct clk *mx5_dt_clk_get(struct device_node *np,
const char *output_id, void *data)
+{
- return data;
+}
+static __init void mx5_dt_scan_clks(void) +{
- struct device_node *node;
- struct clk *clk;
- const char *id;
- int rc;
- for_each_compatible_node(node, NULL, "clock") {
id = of_get_property(node, "clock-outputs", NULL);
if (!id)
continue;
clk = clk_get_sys(id, NULL);
if (IS_ERR(clk))
continue;
rc = of_clk_add_provider(node, mx5_dt_clk_get, clk);
if (rc)
pr_err("error adding fixed clk %s\n", node->name);
- }
+}
+void __init mx5_clk_dt_init(void) +{
- mx5_dt_scan_clks();
+} +#endif
Nitpick: Would it make sense for these 3 functions to be in a separate .c file?
Sorry for that I'm late on this. It will not make much sense to do so if considering that dynamic dt clock codes have to be put in clock-mx51-mx53.c anyway, since they are referring to existing enable/disable/get_rate/set_rate/... functions.