ARM: ks8695: add board support for the SnapGear boards based on the KS8695
authorGreg Ungerer <gerg@uclinux.org>
Fri, 7 Sep 2012 05:24:09 +0000 (15:24 +1000)
committerOlof Johansson <olof@lixom.net>
Sat, 8 Sep 2012 03:16:33 +0000 (20:16 -0700)
A number of boards produced by SnapGear are based on the Micrel KS8695 SoC.
Add board support to the KS8695 kernel code to support them.

The following machine type entries will need to be added back into the
mach-types file with these in mainline:

    lite300      MACH_LITE300     LITE300      408
    se4200       MACH_SE4200      SE4200       809
    sg310        MACH_SG310       SG310        1564

Signed-off-by: Greg Ungerer <gerg@uclinux.org>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Olof Johansson <olof@lixom.net>
arch/arm/mach-ks8695/Kconfig
arch/arm/mach-ks8695/Makefile
arch/arm/mach-ks8695/board-sg.c [new file with mode: 0644]

index f5c39a8c2b00f39b683819e2b0c93ab89705b243..f6b737eb79fcfdf25471bef4a87b2395439f615c 100644 (file)
@@ -21,6 +21,28 @@ config MACH_ACS5K
          say 'Y' here if you want your kernel to run on the Brivo
          Systems LLC, ACS-5000 Master board.
 
+config MACH_LITE300
+       bool "SecureComputing SG300"
+       help
+         Say 'Y' here if you want your kernel to support the
+         SecureComputing / SnapGear SG300 VPN Internet Router.
+         See http://www.securecomputing.com for more details.
+
+config MACH_SG310
+       bool "McAfee SG310"
+       help
+         Say 'Y' here if you want your kernel to support the
+         McAfee / SnapGear SG310 VPN Internet Router.
+         See http://www.mcafee.com for more details.
+
+config MACH_SE4200
+       bool "SecureComputing SE4200"
+       help
+         Say 'Y' here if you want your kernel to support the
+         SecureComputing / SnapGear SE4200 Secure Wireless VPN
+         Internet Router.
+         See http://www.securecomputing.com for more details.
+
 endmenu
 
 endif
index 853efd9133c6a8f91ed7e1bef24158f562006942..9673c0ccc5dd68e14eef22473a987f732d3be2ce 100644 (file)
@@ -18,3 +18,6 @@ obj-$(CONFIG_LEDS)            += leds.o
 obj-$(CONFIG_MACH_KS8695)      += board-micrel.o
 obj-$(CONFIG_MACH_DSM320)      += board-dsm320.o
 obj-$(CONFIG_MACH_ACS5K)       += board-acs5k.o
+obj-$(CONFIG_MACH_LITE300)     += board-sg.o
+obj-$(CONFIG_MACH_SG310)       += board-sg.o
+obj-$(CONFIG_MACH_SE4200)      += board-sg.o
diff --git a/arch/arm/mach-ks8695/board-sg.c b/arch/arm/mach-ks8695/board-sg.c
new file mode 100644 (file)
index 0000000..f35b98b
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+ * board-sg.c -- support for the SnapGear KS8695 based boards
+ *
+ * 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/kernel.h>
+#include <linux/types.h>
+#include <linux/init.h>
+#include <linux/platform_device.h>
+#include <linux/mtd/mtd.h>
+#include <linux/mtd/map.h>
+#include <linux/mtd/physmap.h>
+#include <linux/mtd/partitions.h>
+#include <asm/mach-types.h>
+#include <asm/mach/arch.h>
+#include <mach/devices.h>
+#include "generic.h"
+
+/*
+ * The SG310 machine type is fitted with a conventional 8MB Strataflash
+ * device. Define its partitioning.
+ */
+#define        FL_BASE         0x02000000
+#define        FL_SIZE         SZ_8M
+
+static struct mtd_partition sg_mtd_partitions[] = {
+       [0] = {
+               .name   = "SnapGear Boot Loader",
+               .size   = SZ_128K,
+       },
+       [1] = {
+               .name   = "SnapGear non-volatile configuration",
+               .size   = SZ_512K,
+               .offset = SZ_256K,
+       },
+       [2] = {
+               .name   = "SnapGear image",
+               .offset = SZ_512K + SZ_256K,
+       },
+       [3] = {
+               .name   = "SnapGear StrataFlash",
+       },
+       [4] = {
+               .name   = "SnapGear Boot Tags",
+               .size   = SZ_128K,
+               .offset = SZ_128K,
+       },
+};
+
+static struct physmap_flash_data sg_mtd_pdata = {
+       .width          = 1,
+       .nr_parts       = ARRAY_SIZE(sg_mtd_partitions),
+       .parts          = sg_mtd_partitions,
+};
+
+
+static struct resource sg_mtd_resource[] = {
+       [0] = {
+               .start = FL_BASE,
+               .end   = FL_BASE + FL_SIZE - 1,
+               .flags = IORESOURCE_MEM,
+       },
+};
+
+static struct platform_device sg_mtd_device = {
+       .name           = "physmap-flash",
+       .id             = 0,
+       .num_resources  = ARRAY_SIZE(sg_mtd_resource),
+       .resource       = sg_mtd_resource,
+       .dev            = {
+               .platform_data = &sg_mtd_pdata,
+       },
+};
+
+static void __init sg_init(void)
+{
+       ks8695_add_device_lan();
+       ks8695_add_device_wan();
+
+       if (machine_is_sg310())
+               platform_device_register(&sg_mtd_device);
+}
+
+#ifdef CONFIG_MACH_LITE300
+MACHINE_START(LITE300, "SecureComputing/SG300")
+       /* SnapGear */
+       .atag_offset    = 0x100,
+       .map_io         = ks8695_map_io,
+       .init_irq       = ks8695_init_irq,
+       .init_machine   = sg_init,
+       .timer          = &ks8695_timer,
+       .restart        = ks8695_restart,
+MACHINE_END
+#endif
+
+#ifdef CONFIG_MACH_SG310
+MACHINE_START(SG310, "McAfee/SG310")
+       /* SnapGear */
+       .atag_offset    = 0x100,
+       .map_io         = ks8695_map_io,
+       .init_irq       = ks8695_init_irq,
+       .init_machine   = sg_init,
+       .timer          = &ks8695_timer,
+       .restart        = ks8695_restart,
+MACHINE_END
+#endif
+
+#ifdef CONFIG_MACH_SE4200
+MACHINE_START(SE4200, "SecureComputing/SE4200")
+       /* SnapGear */
+       .atag_offset    = 0x100,
+       .map_io         = ks8695_map_io,
+       .init_irq       = ks8695_init_irq,
+       .init_machine   = sg_init,
+       .timer          = &ks8695_timer,
+       .restart        = ks8695_restart,
+MACHINE_END
+#endif