]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ARM: mach-shmobile: kzm9g: Reference DT implementation
authorSimon Horman <horms+renesas@verge.net.au>
Wed, 21 Nov 2012 15:34:25 +0000 (00:34 +0900)
committerSimon Horman <horms+renesas@verge.net.au>
Wed, 6 Feb 2013 01:38:16 +0000 (10:38 +0900)
Provide alternate board code for the kzm9g to demonstrate
how DT may be used given the current state of driver
device tree support. This is intended to act as a reference
for mach-shmobile developers.

Some notes:

* Brings up the GIC interrupt handler using device tree
* Brings up the following device using device tree:
  - MMCIF (MMC)
* Does not bring up the INTC interrupt controller at all,
  thus external devices may not be used. In particular,
  the SMSC ethernet device may not be used and thus
  NFS root may not be used.
* Uses existing C code and not device tree to initialise the following,
  which are needed for a working board:
  - SCIF (Serial)
  - CMT (Clock)
  - PFC (GPIO)

To use this alternate board code instead of the normal board code,
CONFIG_MACH_KZM9G_REFERENCE should be selected in the kernel config.
And the sh73a0-kzm9g-reference.dtb flattened device tree blob should be used.

*** Please note that the clock initialisation scheme used
    does not currently work with SMP as there is a yet to be resolved
    lock-up in workqueue initialisation.

    CONFIG_SMP must be disabled when using this code. ***

Includes fix by Thierry Reding to no longer use gic_handle_irq()

Cc: Thierry Reding <thierry.reding@avionic-design.de>
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
arch/arm/boot/dts/Makefile
arch/arm/boot/dts/sh73a0-kzm9g-reference.dts [new file with mode: 0644]
arch/arm/mach-shmobile/Kconfig
arch/arm/mach-shmobile/Makefile
arch/arm/mach-shmobile/board-kzm9g-reference.c [new file with mode: 0644]

index e44da40d984f7faa18bb8a32f51f5f1fe233f20a..c41121338e4ca030e891be2e92c60a415e9aa50d 100644 (file)
@@ -123,6 +123,7 @@ dtb-$(CONFIG_ARCH_U8500) += snowball.dtb \
 dtb-$(CONFIG_ARCH_SHMOBILE) += emev2-kzm9d.dtb \
        r8a7740-armadillo800eva.dtb \
        sh73a0-kzm9g.dtb \
+       sh73a0-kzm9g-reference.dtb \
        sh7372-mackerel.dtb
 dtb-$(CONFIG_ARCH_SPEAR13XX) += spear1310-evb.dtb \
        spear1340-evb.dtb
diff --git a/arch/arm/boot/dts/sh73a0-kzm9g-reference.dts b/arch/arm/boot/dts/sh73a0-kzm9g-reference.dts
new file mode 100644 (file)
index 0000000..06f52f9
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Device Tree Source for the KZM-A9-GT board
+ *
+ * Copyright (C) 2012 Horms Solutions Ltd.
+ *
+ * Based on sh73a0-kzm9g.dts
+ * Copyright (C) 2012 Renesas Solutions Corp.
+ *
+ * This file is licensed under the terms of the GNU General Public License
+ * version 2.  This program is licensed "as is" without any warranty of any
+ * kind, whether express or implied.
+ */
+
+/dts-v1/;
+/include/ "sh73a0-reference.dtsi"
+
+/ {
+       model = "KZM-A9-GT";
+       compatible = "renesas,kzm9g-reference", "renesas,sh73a0";
+
+       chosen {
+               bootargs = "console=tty0 console=ttySC4,115200 root=/dev/nfs ip=dhcp ignore_loglevel earlyprintk=sh-sci.4,115200";
+       };
+
+       memory {
+               device_type = "memory";
+               reg = <0x41000000 0x1e800000>;
+       };
+
+       fixedregulator1v8: fixedregulator@0 {
+               compatible = "regulator-fixed";
+               regulator-name = "fixed-1.8V";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+       };
+};
+
+&mmcif {
+       vmmc-supply = <&fixedregulator1v8>;
+       vqmmc-supply = <&fixedregulator1v8>;
+};
index 9255546e7bf64fb98fce8bbfb3bb7830ce51f2cd..59edd6ed18d3f7d944db867966e7555294393e3c 100644 (file)
@@ -116,6 +116,16 @@ config MACH_KZM9G
        select SND_SOC_AK4642 if SND_SIMPLE_CARD
        select USE_OF
 
+config MACH_KZM9G_REFERENCE
+       bool "KZM-A9-GT board - Reference Device Tree Implementation"
+       depends on MACH_KZM9G
+       ---help---
+          Use reference implementation of KZM-A9-GT board support
+          which makes as greater use of device tree at the expense
+          of not supporting a number of devices.
+
+          This is intended to aid developers
+
 comment "SH-Mobile System Configuration"
 
 config CPU_HAS_INTEVT
index 700e6623aa86169a315871be1d9e6a432a31f42f..bcf675941b3976036acd02eca0c4018f4b4ad8e3 100644 (file)
@@ -49,6 +49,7 @@ obj-$(CONFIG_MACH_MARZEN)     += board-marzen.o
 obj-$(CONFIG_MACH_ARMADILLO800EVA)     += board-armadillo800eva.o
 obj-$(CONFIG_MACH_KZM9D)       += board-kzm9d.o
 obj-$(CONFIG_MACH_KZM9G)       += board-kzm9g.o
+obj-$(CONFIG_MACH_KZM9G_REFERENCE)     += board-kzm9g-reference.o
 
 # Framework support
 obj-$(CONFIG_SMP)              += $(smp-y)
diff --git a/arch/arm/mach-shmobile/board-kzm9g-reference.c b/arch/arm/mach-shmobile/board-kzm9g-reference.c
new file mode 100644 (file)
index 0000000..6a1222e
--- /dev/null
@@ -0,0 +1,97 @@
+/*
+ * KZM-A9-GT board support - Reference Device Tree Implementation
+ *
+ * Copyright (C) 2012  Horms Solutions Ltd.
+ *
+ * Based on board-kzm9g.c
+ * Copyright (C) 2012  Kuninori Morimoto <kuninori.morimoto.gx@renesas.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; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#include <linux/delay.h>
+#include <linux/gpio.h>
+#include <linux/io.h>
+#include <linux/irq.h>
+#include <linux/input.h>
+#include <linux/of_platform.h>
+#include <mach/sh73a0.h>
+#include <mach/common.h>
+#include <asm/hardware/cache-l2x0.h>
+#include <asm/mach-types.h>
+#include <asm/mach/arch.h>
+
+static void __init kzm_init(void)
+{
+       /* enable SCIFA4 */
+       gpio_request(GPIO_FN_SCIFA4_TXD, NULL);
+       gpio_request(GPIO_FN_SCIFA4_RXD, NULL);
+       gpio_request(GPIO_FN_SCIFA4_RTS_, NULL);
+       gpio_request(GPIO_FN_SCIFA4_CTS_, NULL);
+
+       /* enable MMCIF */
+       gpio_request(GPIO_FN_MMCCLK0,           NULL);
+       gpio_request(GPIO_FN_MMCCMD0_PU,        NULL);
+       gpio_request(GPIO_FN_MMCD0_0_PU,        NULL);
+       gpio_request(GPIO_FN_MMCD0_1_PU,        NULL);
+       gpio_request(GPIO_FN_MMCD0_2_PU,        NULL);
+       gpio_request(GPIO_FN_MMCD0_3_PU,        NULL);
+       gpio_request(GPIO_FN_MMCD0_4_PU,        NULL);
+       gpio_request(GPIO_FN_MMCD0_5_PU,        NULL);
+       gpio_request(GPIO_FN_MMCD0_6_PU,        NULL);
+       gpio_request(GPIO_FN_MMCD0_7_PU,        NULL);
+
+       /* I2C 3 */
+       gpio_request(GPIO_FN_PORT27_I2C_SCL3, NULL);
+       gpio_request(GPIO_FN_PORT28_I2C_SDA3, NULL);
+
+#ifdef CONFIG_CACHE_L2X0
+       /* Early BRESP enable, Shared attribute override enable, 64K*8way */
+       l2x0_init(IOMEM(0xf0100000), 0x40460000, 0x82000fff);
+#endif
+
+       sh73a0_add_standard_devices_dt();
+}
+
+static void kzm9g_restart(char mode, const char *cmd)
+{
+#define RESCNT2 IOMEM(0xe6188020)
+       /* Do soft power on reset */
+       writel((1 << 31), RESCNT2);
+}
+
+static const char *kzm9g_boards_compat_dt[] __initdata = {
+       "renesas,kzm9g-reference",
+       NULL,
+};
+
+/* Please note that the clock initialisation shcheme used in
+ * sh73a0_add_early_devices_dt() and sh73a0_add_standard_devices_dt()
+ * does not work with SMP as there is a yet to be resolved lock-up in
+ * workqueue initialisation.
+ *
+ * CONFIG_SMP should be disabled when using this code.
+ */
+DT_MACHINE_START(KZM9G_DT, "kzm9g-reference")
+       .smp            = smp_ops(sh73a0_smp_ops),
+       .map_io         = sh73a0_map_io,
+       .init_early     = sh73a0_add_early_devices_dt,
+       .nr_irqs        = NR_IRQS_LEGACY,
+       .init_irq       = sh73a0_init_irq_dt,
+       .init_machine   = kzm_init,
+       .init_late      = shmobile_init_late,
+       .init_time      = shmobile_timer_init,
+       .restart        = kzm9g_restart,
+       .dt_compat      = kzm9g_boards_compat_dt,
+MACHINE_END