diff mbox

[1/4] ARM: DT: Add SMDKV310 machine with device tree support.

Message ID 1296998250-21856-2-git-send-email-thomas.abraham@linaro.org
State New
Headers show

Commit Message

thomas.abraham@linaro.org Feb. 6, 2011, 1:17 p.m. UTC
This patch adds a new SMDKV310 machine that boots with a minimal
device tree support. The bootargs and memory information is obtained
from the device tree during boot.

Signed-off-by: Thomas Abraham <thomas.abraham@linaro.org>
---
 arch/arm/mach-s5pv310/Kconfig            |    7 ++
 arch/arm/mach-s5pv310/Makefile           |    1 +
 arch/arm/mach-s5pv310/mach-smdkv310-dt.c |  101 ++++++++++++++++++++++++++++++
 3 files changed, 109 insertions(+), 0 deletions(-)
 create mode 100644 arch/arm/mach-s5pv310/mach-smdkv310-dt.c

Comments

Grant Likely Feb. 7, 2011, 6:41 a.m. UTC | #1
On Sun, Feb 06, 2011 at 06:47:27PM +0530, Thomas Abraham wrote:
> This patch adds a new SMDKV310 machine that boots with a minimal
> device tree support. The bootargs and memory information is obtained
> from the device tree during boot.
> 
> Signed-off-by: Thomas Abraham <thomas.abraham@linaro.org>
> ---
>  arch/arm/mach-s5pv310/Kconfig            |    7 ++
>  arch/arm/mach-s5pv310/Makefile           |    1 +
>  arch/arm/mach-s5pv310/mach-smdkv310-dt.c |  101 ++++++++++++++++++++++++++++++
>  3 files changed, 109 insertions(+), 0 deletions(-)
>  create mode 100644 arch/arm/mach-s5pv310/mach-smdkv310-dt.c
> 
> diff --git a/arch/arm/mach-s5pv310/Kconfig b/arch/arm/mach-s5pv310/Kconfig
> index 09c4c21..6c5f0bf 100644
> --- a/arch/arm/mach-s5pv310/Kconfig
> +++ b/arch/arm/mach-s5pv310/Kconfig
> @@ -127,6 +127,13 @@ config MACH_SMDKV310
>  	help
>  	  Machine support for Samsung SMDKV310
>  
> +config MACH_SMDKV310_DT
> +	bool "SMDKV310 with device tree support"

SMDKV310 is the board designation, not the SoC, correct?  Considering
that the point of this is to allow a single machine description to
support many boards, you should consider naming this MACH_S5PV310_DT.
Otherwise, you may as well just add a dt_compat table to the existing
mach-smdkv310.c board support file.

> +	select CPU_S5PV310
> +	select USE_OF
> +	help
> +	  Machine support for Samsung SMDKV310 with device tree based initialization.
> +
>  endmenu
>  
>  comment "Configuration for HSMMC bus width"
> diff --git a/arch/arm/mach-s5pv310/Makefile b/arch/arm/mach-s5pv310/Makefile
> index 036fb38..59545aa 100644
> --- a/arch/arm/mach-s5pv310/Makefile
> +++ b/arch/arm/mach-s5pv310/Makefile
> @@ -24,6 +24,7 @@ obj-$(CONFIG_HOTPLUG_CPU)	+= hotplug.o
>  
>  obj-$(CONFIG_MACH_SMDKC210)	+= mach-smdkc210.o
>  obj-$(CONFIG_MACH_SMDKV310)	+= mach-smdkv310.o
> +obj-$(CONFIG_MACH_SMDKV310_DT)	+= mach-smdkv310-dt.o
>  obj-$(CONFIG_MACH_UNIVERSAL_C210)	+= mach-universal_c210.o
>  
>  # device support
> diff --git a/arch/arm/mach-s5pv310/mach-smdkv310-dt.c b/arch/arm/mach-s5pv310/mach-smdkv310-dt.c
> new file mode 100644
> index 0000000..367fdb1
> --- /dev/null
> +++ b/arch/arm/mach-s5pv310/mach-smdkv310-dt.c
> @@ -0,0 +1,101 @@
> +/* linux/arch/arm/mach-s5pv310/mach-smdkv310.c
> + *
> + * Copyright (c) 2010 Samsung Electronics Co., Ltd.
> + *		http://www.samsung.com/
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> +*/
> +
> +#include <linux/serial_core.h>
> +#include <linux/gpio.h>
> +#include <linux/platform_device.h>
> +#include <linux/io.h>
> +#include <linux/of_platform.h>
> +
> +#include <asm/mach/arch.h>
> +#include <asm/mach-types.h>
> +
> +#include <plat/regs-serial.h>
> +#include <plat/s5pv310.h>
> +#include <plat/cpu.h>
> +#include <plat/devs.h>
> +
> +#include <mach/map.h>
> +
> +/* Following are default values for UCON, ULCON and UFCON UART registers */
> +#define SMDKV310_UCON_DEFAULT	(S3C2410_UCON_TXILEVEL |	\
> +				 S3C2410_UCON_RXILEVEL |	\
> +				 S3C2410_UCON_TXIRQMODE |	\
> +				 S3C2410_UCON_RXIRQMODE |	\
> +				 S3C2410_UCON_RXFIFO_TOI |	\
> +				 S3C2443_UCON_RXERR_IRQEN)
> +
> +#define SMDKV310_ULCON_DEFAULT	S3C2410_LCON_CS8
> +
> +#define SMDKV310_UFCON_DEFAULT	(S3C2410_UFCON_FIFOMODE |	\
> +				 S5PV210_UFCON_TXTRIG4 |	\
> +				 S5PV210_UFCON_RXTRIG4)
> +
> +static struct s3c2410_uartcfg smdkv310_uartcfgs[] __initdata = {
> +	[0] = {
> +		.hwport		= 0,
> +		.flags		= 0,

'0' initial values don't need to be specified.  .flags could be
dropped from each of these entries.

> +		.ucon		= SMDKV310_UCON_DEFAULT,
> +		.ulcon		= SMDKV310_ULCON_DEFAULT,
> +		.ufcon		= SMDKV310_UFCON_DEFAULT,
> +	},
> +	[1] = {
> +		.hwport		= 1,
> +		.flags		= 0,
> +		.ucon		= SMDKV310_UCON_DEFAULT,
> +		.ulcon		= SMDKV310_ULCON_DEFAULT,
> +		.ufcon		= SMDKV310_UFCON_DEFAULT,
> +	},
> +	[2] = {
> +		.hwport		= 2,
> +		.flags		= 0,
> +		.ucon		= SMDKV310_UCON_DEFAULT,
> +		.ulcon		= SMDKV310_ULCON_DEFAULT,
> +		.ufcon		= SMDKV310_UFCON_DEFAULT,
> +	},
> +	[3] = {
> +		.hwport		= 3,
> +		.flags		= 0,
> +		.ucon		= SMDKV310_UCON_DEFAULT,
> +		.ulcon		= SMDKV310_ULCON_DEFAULT,
> +		.ufcon		= SMDKV310_UFCON_DEFAULT,
> +	},
> +};
> +
> +static struct platform_device *smdkv310_devices[] __initdata = {
> +};

Since this list is empty, it can be removed, and so can the call to
platform_add_devices() below.

> +
> +static void __init smdkv310_map_io(void)
> +{
> +	s5p_init_io(NULL, 0, S5P_VA_CHIPID);
> +	s3c24xx_init_clocks(24000000);
> +	s3c24xx_init_uarts(smdkv310_uartcfgs, ARRAY_SIZE(smdkv310_uartcfgs));
> +}
> +
> +static void __init smdkv310_machine_init(void)
> +{
> +	platform_add_devices(smdkv310_devices, ARRAY_SIZE(smdkv310_devices));
> +}
> +
> +static char const *smdkv310_dt_compat[] = {
> +	"samsung,smdkv310",
> +	NULL
> +};
> +
> +DT_MACHINE_START(SMDKV310, "Samsung's SMDKV310 with flattened device tree")
> +	/* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */
> +	/* Maintainer: Changhwan Youn <chaos.youn@samsung.com> */
> +	.boot_params	= S5P_PA_SDRAM + 0x100,

.boot_params can be dropped.

> +	.init_irq	= s5pv310_init_irq,
> +	.map_io		= smdkv310_map_io,
> +	.init_machine	= smdkv310_machine_init,
> +	.timer		= &s5pv310_timer,
> +	.dt_compat	= smdkv310_dt_compat,
> +MACHINE_END
> -- 
> 1.6.6.rc2
> 
> 
> _______________________________________________
> linaro-dev mailing list
> linaro-dev@lists.linaro.org
> http://lists.linaro.org/mailman/listinfo/linaro-dev
Arnd Bergmann Feb. 7, 2011, 3:15 p.m. UTC | #2
On Sunday 06 February 2011, Thomas Abraham wrote:

> diff --git a/arch/arm/mach-s5pv310/mach-smdkv310-dt.c b/arch/arm/mach-s5pv310/mach-smdkv310-dt.c
> new file mode 100644
> index 0000000..367fdb1
> --- /dev/null
> +++ b/arch/arm/mach-s5pv310/mach-smdkv310-dt.c
> @@ -0,0 +1,101 @@
> +/* linux/arch/arm/mach-s5pv310/mach-smdkv310.c

The file name in the comment doesn't match. I normally recommend not putting
it in the comment at all so you don't need to change it when moving or
copying the file.

A comment along the lines of "s5pv310 platform with device tree enabled" is
more helpful to the reader anyway.

> +static void __init smdkv310_map_io(void)
> +{
> +	s5p_init_io(NULL, 0, S5P_VA_CHIPID);
> +	s3c24xx_init_clocks(24000000);
> +	s3c24xx_init_uarts(smdkv310_uartcfgs, ARRAY_SIZE(smdkv310_uartcfgs));
> +}

There is very little here that is really platform specific, right?

Is this going to increase? If not, it might be good to read out the
data (S5P_VA_CHIPID, 24000000, smdkv310_uartcfgs) from the device tree
as well before passing them down. No need to do it right away, but it
would be good to know the direction in which we're heading.

Maybe add a comment like /* TODO: read these from the device tree */
or similar.

	Arnd
diff mbox

Patch

diff --git a/arch/arm/mach-s5pv310/Kconfig b/arch/arm/mach-s5pv310/Kconfig
index 09c4c21..6c5f0bf 100644
--- a/arch/arm/mach-s5pv310/Kconfig
+++ b/arch/arm/mach-s5pv310/Kconfig
@@ -127,6 +127,13 @@  config MACH_SMDKV310
 	help
 	  Machine support for Samsung SMDKV310
 
+config MACH_SMDKV310_DT
+	bool "SMDKV310 with device tree support"
+	select CPU_S5PV310
+	select USE_OF
+	help
+	  Machine support for Samsung SMDKV310 with device tree based initialization.
+
 endmenu
 
 comment "Configuration for HSMMC bus width"
diff --git a/arch/arm/mach-s5pv310/Makefile b/arch/arm/mach-s5pv310/Makefile
index 036fb38..59545aa 100644
--- a/arch/arm/mach-s5pv310/Makefile
+++ b/arch/arm/mach-s5pv310/Makefile
@@ -24,6 +24,7 @@  obj-$(CONFIG_HOTPLUG_CPU)	+= hotplug.o
 
 obj-$(CONFIG_MACH_SMDKC210)	+= mach-smdkc210.o
 obj-$(CONFIG_MACH_SMDKV310)	+= mach-smdkv310.o
+obj-$(CONFIG_MACH_SMDKV310_DT)	+= mach-smdkv310-dt.o
 obj-$(CONFIG_MACH_UNIVERSAL_C210)	+= mach-universal_c210.o
 
 # device support
diff --git a/arch/arm/mach-s5pv310/mach-smdkv310-dt.c b/arch/arm/mach-s5pv310/mach-smdkv310-dt.c
new file mode 100644
index 0000000..367fdb1
--- /dev/null
+++ b/arch/arm/mach-s5pv310/mach-smdkv310-dt.c
@@ -0,0 +1,101 @@ 
+/* linux/arch/arm/mach-s5pv310/mach-smdkv310.c
+ *
+ * Copyright (c) 2010 Samsung Electronics Co., Ltd.
+ *		http://www.samsung.com/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+*/
+
+#include <linux/serial_core.h>
+#include <linux/gpio.h>
+#include <linux/platform_device.h>
+#include <linux/io.h>
+#include <linux/of_platform.h>
+
+#include <asm/mach/arch.h>
+#include <asm/mach-types.h>
+
+#include <plat/regs-serial.h>
+#include <plat/s5pv310.h>
+#include <plat/cpu.h>
+#include <plat/devs.h>
+
+#include <mach/map.h>
+
+/* Following are default values for UCON, ULCON and UFCON UART registers */
+#define SMDKV310_UCON_DEFAULT	(S3C2410_UCON_TXILEVEL |	\
+				 S3C2410_UCON_RXILEVEL |	\
+				 S3C2410_UCON_TXIRQMODE |	\
+				 S3C2410_UCON_RXIRQMODE |	\
+				 S3C2410_UCON_RXFIFO_TOI |	\
+				 S3C2443_UCON_RXERR_IRQEN)
+
+#define SMDKV310_ULCON_DEFAULT	S3C2410_LCON_CS8
+
+#define SMDKV310_UFCON_DEFAULT	(S3C2410_UFCON_FIFOMODE |	\
+				 S5PV210_UFCON_TXTRIG4 |	\
+				 S5PV210_UFCON_RXTRIG4)
+
+static struct s3c2410_uartcfg smdkv310_uartcfgs[] __initdata = {
+	[0] = {
+		.hwport		= 0,
+		.flags		= 0,
+		.ucon		= SMDKV310_UCON_DEFAULT,
+		.ulcon		= SMDKV310_ULCON_DEFAULT,
+		.ufcon		= SMDKV310_UFCON_DEFAULT,
+	},
+	[1] = {
+		.hwport		= 1,
+		.flags		= 0,
+		.ucon		= SMDKV310_UCON_DEFAULT,
+		.ulcon		= SMDKV310_ULCON_DEFAULT,
+		.ufcon		= SMDKV310_UFCON_DEFAULT,
+	},
+	[2] = {
+		.hwport		= 2,
+		.flags		= 0,
+		.ucon		= SMDKV310_UCON_DEFAULT,
+		.ulcon		= SMDKV310_ULCON_DEFAULT,
+		.ufcon		= SMDKV310_UFCON_DEFAULT,
+	},
+	[3] = {
+		.hwport		= 3,
+		.flags		= 0,
+		.ucon		= SMDKV310_UCON_DEFAULT,
+		.ulcon		= SMDKV310_ULCON_DEFAULT,
+		.ufcon		= SMDKV310_UFCON_DEFAULT,
+	},
+};
+
+static struct platform_device *smdkv310_devices[] __initdata = {
+};
+
+static void __init smdkv310_map_io(void)
+{
+	s5p_init_io(NULL, 0, S5P_VA_CHIPID);
+	s3c24xx_init_clocks(24000000);
+	s3c24xx_init_uarts(smdkv310_uartcfgs, ARRAY_SIZE(smdkv310_uartcfgs));
+}
+
+static void __init smdkv310_machine_init(void)
+{
+	platform_add_devices(smdkv310_devices, ARRAY_SIZE(smdkv310_devices));
+}
+
+static char const *smdkv310_dt_compat[] = {
+	"samsung,smdkv310",
+	NULL
+};
+
+DT_MACHINE_START(SMDKV310, "Samsung's SMDKV310 with flattened device tree")
+	/* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */
+	/* Maintainer: Changhwan Youn <chaos.youn@samsung.com> */
+	.boot_params	= S5P_PA_SDRAM + 0x100,
+	.init_irq	= s5pv310_init_irq,
+	.map_io		= smdkv310_map_io,
+	.init_machine	= smdkv310_machine_init,
+	.timer		= &s5pv310_timer,
+	.dt_compat	= smdkv310_dt_compat,
+MACHINE_END