[PATCHv2] Initial DT support for SIMpad devices.

Jochen Friedrich jochen at scram.de
Mon Nov 21 15:58:33 EST 2011


Signed-off-by: Jochen Friedrich <jochen at scram.de>
---

V2: 
- make localbus "simple-bus" compatible.
- add soc compatible entry to board.
- add sample partition table to DTS.
- fix flash bus width.
- switch to DT initialization of flash.

 .../devicetree/bindings/vendor-prefixes.txt        |    1 +
 arch/arm/boot/dts/sa1110.dtsi                      |   72 +++++++++++++++++++
 arch/arm/boot/dts/simpad.dts                       |   75 ++++++++++++++++++++
 arch/arm/mach-sa1100/Kconfig                       |   13 ++++
 arch/arm/mach-sa1100/Makefile.boot                 |    1 +
 arch/arm/mach-sa1100/simpad.c                      |   27 +++++++-
 6 files changed, 188 insertions(+), 1 deletions(-)
 create mode 100644 arch/arm/boot/dts/sa1110.dtsi
 create mode 100644 arch/arm/boot/dts/simpad.dts

diff --git a/Documentation/devicetree/bindings/vendor-prefixes.txt b/Documentation/devicetree/bindings/vendor-prefixes.txt
index 5b14518..cbe7046 100644
--- a/Documentation/devicetree/bindings/vendor-prefixes.txt
+++ b/Documentation/devicetree/bindings/vendor-prefixes.txt
@@ -34,6 +34,7 @@ qcom	Qualcomm, Inc.
 ramtron	Ramtron International
 samsung	Samsung Semiconductor
 schindler	Schindler
+siemens	SIEMENS
 simtek
 sirf	SiRF Technology, Inc.
 stericsson	ST-Ericsson
diff --git a/arch/arm/boot/dts/sa1110.dtsi b/arch/arm/boot/dts/sa1110.dtsi
new file mode 100644
index 0000000..af0dc7c
--- /dev/null
+++ b/arch/arm/boot/dts/sa1110.dtsi
@@ -0,0 +1,72 @@
+/*
+ * sa1110.dtsi - Device Tree Include file for Intel SA1110 SoC
+ *
+ *  Copyright (C) 2011 Jochen Friedrich <jochen at scram.de>
+ *
+ * Licensed under GPLv2 or later.
+ */
+
+/include/ "skeleton.dtsi"
+
+/ {
+	model = "Intel SA1110 SoC";
+	compatible = "intel,sa1110";
+	interrupt-parent = <&aic>;
+
+	cpus {
+		cpu at 0 {
+			compatible = "intel,sa1110";
+		};
+	};
+
+	localbus {
+		compatible = "simple-bus";
+		#address-cells = <2>;
+		#size-cells = <1>;
+
+		ranges = <
+			0x0 0x0 0x00000000 0x08000000
+			0x1 0x0 0x08000000 0x08000000
+			0x2 0x0 0x10000000 0x08000000
+			0x3 0x0 0x18000000 0x08000000
+			0x4 0x0 0x40000000 0x08000000
+			0x5 0x0 0x48000000 0x08000000
+		>;
+	};
+
+	soc {
+		compatible = "simple-bus";
+		#address-cells = <1>;
+		#size-cells = <1>;
+		ranges;
+
+		uart0: serial at 0x80010000 {
+			compatible = "intel,sa1100-uart";
+			reg = <0x80010000 0x24>;
+			interrupts = <15>;
+			status = "disabled";
+		};
+
+		uart1: serial at 0x80030000 {
+			compatible = "intel,sa1100-uart";
+			reg = <0x80030000 0x24>;
+			interrupts = <16>;
+			status = "disabled";
+		};
+
+		uart2: serial at 0x80050000 {
+			compatible = "intel,sa1100-uart";
+			reg = <0x80050000 0x24>;
+			interrupts = <17>;
+			status = "disabled";
+		};
+
+		aic: interrupt-controller at 0x90050000 {
+			compatible = "intel,sa1110-icr";
+			reg = <0x90050000 0x24>;
+			#interrupt-cells = <1>;
+			interrupt-controller;
+			interrupt-parent;
+		};
+	};
+};
diff --git a/arch/arm/boot/dts/simpad.dts b/arch/arm/boot/dts/simpad.dts
new file mode 100644
index 0000000..4e5fbde
--- /dev/null
+++ b/arch/arm/boot/dts/simpad.dts
@@ -0,0 +1,75 @@
+/dts-v1/;
+/include/ "sa1110.dtsi"
+
+/ {
+	model = "SIEMENS, SIMpad";
+	compatible = "siemens,simpad", "intel,sa1110";
+
+	aliases {
+		serial0 = &uart2;
+		serial1 = &uart0;
+	};
+
+	memory {
+		device_type = "memory";
+		reg = <0x0 0x08000000>;
+	};
+
+	chosen {
+		bootargs = "console=ttySA0";
+	};
+
+	localbus {
+		flash at 0,0 {
+			compatible = "cfi-flash";
+			reg = <0 0 0x08000000>;
+			bank-width = <2>;
+			#size-cells = <1>;
+			#address-cells = <1>;
+
+			partition at 0 {
+				label = "u-boot";
+				reg = <0x00000000 0x00040000>;
+			};
+			partition at 40000 {
+				label = "u-boot-env";
+				reg = <0x00040000 0x00020000>;
+			};
+			partition at 60000 {
+				label = "dtb";
+				reg = <0x00060000 0x00020000>;
+			};
+			partition at 80000 {
+				label = "kernel";
+				reg = <0x00080000 0x00200000>;
+			};
+			partition at 280000 {
+				label = "rootfs";
+				reg = <0x00280000 0x07d80000>;
+			};
+		};
+
+		flash at 1,0 {
+			compatible = "cfi-flash";
+			reg = <1 0 0x08000000>;
+			bank-width = <2>;
+			#size-cells = <1>;
+			#address-cells = <1>;
+
+			partition at 0 {
+				label = "home";
+				reg = <0x00000000 0x08000000>;
+			};
+		};
+	};
+
+	soc {
+		uart0: serial at 0x80010000 {
+			status = "okay";
+		};
+
+		uart2: serial at 0x80050000 {
+			status = "okay";
+		};
+	};
+};
diff --git a/arch/arm/mach-sa1100/Kconfig b/arch/arm/mach-sa1100/Kconfig
index 42625e4..31238c3 100644
--- a/arch/arm/mach-sa1100/Kconfig
+++ b/arch/arm/mach-sa1100/Kconfig
@@ -157,6 +157,19 @@ config SA1100_SIMPAD
 	  like CL4 in additional it has a PCMCIA-Slot. For more information
 	  visit <http://www.usa.siemens.com/> or <http://www.siemens.ch/>.
 
+config SA1100_SIMPAD_DT
+	bool "Simpad with device tree support"
+	select CPU_FREQ_SA1110
+	select SA1100_SIMPAD
+	select USE_OF
+	help
+	  The SIEMENS webpad SIMpad is based on the StrongARM 1110. There
+	  are two different versions CL4 and SL4. CL4 has 32MB RAM and 16MB
+	  FLASH. The SL4 version got 64 MB RAM and 32 MB FLASH and a
+	  PCMCIA-Slot. The version for the Germany Telecom (DTAG) is the same
+	  like CL4 in additional it has a PCMCIA-Slot. For more information
+	  visit <http://www.usa.siemens.com/> or <http://www.siemens.ch/>.
+
 config SA1100_SSP
 	tristate "Generic PIO SSP"
 	help
diff --git a/arch/arm/mach-sa1100/Makefile.boot b/arch/arm/mach-sa1100/Makefile.boot
index 5a616f6..1d17767 100644
--- a/arch/arm/mach-sa1100/Makefile.boot
+++ b/arch/arm/mach-sa1100/Makefile.boot
@@ -6,3 +6,4 @@ endif
 params_phys-y	:= 0xc0000100
 initrd_phys-y	:= 0xc0800000
 
+dtb-$(CONFIG_SA1100_SIMPAD_DT)		+= simpad.dtb
diff --git a/arch/arm/mach-sa1100/simpad.c b/arch/arm/mach-sa1100/simpad.c
index d3c9d2b..fb8b224 100644
--- a/arch/arm/mach-sa1100/simpad.c
+++ b/arch/arm/mach-sa1100/simpad.c
@@ -10,6 +10,7 @@
 #include <linux/string.h> 
 #include <linux/pm.h>
 #include <linux/platform_device.h>
+#include <linux/of_platform.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
 #include <linux/io.h>
@@ -151,6 +152,7 @@ static struct sa1100_port_fns simpad_port_fns __initdata = {
 };
 
 
+#ifndef CONFIG_OF
 static struct mtd_partition simpad_partitions[] = {
 	{
 		.name       = "SIMpad boot firmware",
@@ -186,6 +188,7 @@ static struct resource simpad_flash_resources [] = {
 		.flags     = IORESOURCE_MEM,
 	}
 };
+#endif
 
 static struct mcp_plat_data simpad_mcp_data = {
 	.mccr0		= MCCR0_ADM,
@@ -211,8 +214,9 @@ static void __init simpad_map_io(void)
 
 	sa1100_register_uart_fns(&simpad_port_fns);
 	sa1100_register_uart(0, 3);  /* serial interface */
+#ifndef CONFIG_OF
 	sa1100_register_uart(1, 1);  /* DECT             */
-
+#endif
 	// Reassign UART 1 pins
 	GAFR |= GPIO_UART_TXD | GPIO_UART_RXD;
 	GPDR |= GPIO_UART_TXD | GPIO_LDD13 | GPIO_LDD15;
@@ -379,8 +383,10 @@ static int __init simpad_init(void)
 
 	pm_power_off = simpad_power_off;
 
+#ifndef CONFIG_OF
 	sa11x0_register_mtd(&simpad_flash_data, simpad_flash_resources,
 			      ARRAY_SIZE(simpad_flash_resources));
+#endif
 	sa11x0_register_mcp(&simpad_mcp_data);
 
 	ret = platform_add_devices(devices, ARRAY_SIZE(devices));
@@ -392,6 +398,25 @@ static int __init simpad_init(void)
 
 arch_initcall(simpad_init);
 
+#ifdef CONFIG_OF
+static void __init simpad_dt_device_init(void)
+{
+	of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
+}
+
+static const char *simpad_dt_board_compat[] __initconst = {
+	"siemens,simpad",
+	NULL
+};
+
+DT_MACHINE_START(simpad_dt, "SIMpad")
+	.timer		= &sa1100_timer,
+	.map_io		= simpad_map_io,
+	.init_irq	= sa1100_init_irq,
+	.init_machine	= simpad_dt_device_init,
+	.dt_compat	= simpad_dt_board_compat,
+MACHINE_END
+#endif
 
 MACHINE_START(SIMPAD, "Simpad")
 	/* Maintainer: Holger Freyther */
-- 
1.7.7.3




More information about the linux-arm-kernel mailing list