Merge branch 'sfc-3.9' of git://git.kernel.org/pub/scm/linux/kernel/git/bwh/sfc
[firefly-linux-kernel-4.4.55.git] / arch / arm / mach-ks8695 / board-sg.c
1 /*
2  * board-sg.c -- support for the SnapGear KS8695 based boards
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation.
7  */
8
9 #include <linux/kernel.h>
10 #include <linux/types.h>
11 #include <linux/init.h>
12 #include <linux/platform_device.h>
13 #include <linux/mtd/mtd.h>
14 #include <linux/mtd/map.h>
15 #include <linux/mtd/physmap.h>
16 #include <linux/mtd/partitions.h>
17 #include <asm/mach-types.h>
18 #include <asm/mach/arch.h>
19 #include <mach/devices.h>
20 #include "generic.h"
21
22 /*
23  * The SG310 machine type is fitted with a conventional 8MB Strataflash
24  * device. Define its partitioning.
25  */
26 #define FL_BASE         0x02000000
27 #define FL_SIZE         SZ_8M
28
29 static struct mtd_partition sg_mtd_partitions[] = {
30         [0] = {
31                 .name   = "SnapGear Boot Loader",
32                 .size   = SZ_128K,
33         },
34         [1] = {
35                 .name   = "SnapGear non-volatile configuration",
36                 .size   = SZ_512K,
37                 .offset = SZ_256K,
38         },
39         [2] = {
40                 .name   = "SnapGear image",
41                 .offset = SZ_512K + SZ_256K,
42         },
43         [3] = {
44                 .name   = "SnapGear StrataFlash",
45         },
46         [4] = {
47                 .name   = "SnapGear Boot Tags",
48                 .size   = SZ_128K,
49                 .offset = SZ_128K,
50         },
51 };
52
53 static struct physmap_flash_data sg_mtd_pdata = {
54         .width          = 1,
55         .nr_parts       = ARRAY_SIZE(sg_mtd_partitions),
56         .parts          = sg_mtd_partitions,
57 };
58
59
60 static struct resource sg_mtd_resource[] = {
61         [0] = {
62                 .start = FL_BASE,
63                 .end   = FL_BASE + FL_SIZE - 1,
64                 .flags = IORESOURCE_MEM,
65         },
66 };
67
68 static struct platform_device sg_mtd_device = {
69         .name           = "physmap-flash",
70         .id             = 0,
71         .num_resources  = ARRAY_SIZE(sg_mtd_resource),
72         .resource       = sg_mtd_resource,
73         .dev            = {
74                 .platform_data = &sg_mtd_pdata,
75         },
76 };
77
78 static void __init sg_init(void)
79 {
80         ks8695_add_device_lan();
81         ks8695_add_device_wan();
82
83         if (machine_is_sg310())
84                 platform_device_register(&sg_mtd_device);
85 }
86
87 #ifdef CONFIG_MACH_LITE300
88 MACHINE_START(LITE300, "SecureComputing/SG300")
89         /* SnapGear */
90         .atag_offset    = 0x100,
91         .map_io         = ks8695_map_io,
92         .init_irq       = ks8695_init_irq,
93         .init_machine   = sg_init,
94         .init_time      = ks8695_timer_init,
95         .restart        = ks8695_restart,
96 MACHINE_END
97 #endif
98
99 #ifdef CONFIG_MACH_SG310
100 MACHINE_START(SG310, "McAfee/SG310")
101         /* SnapGear */
102         .atag_offset    = 0x100,
103         .map_io         = ks8695_map_io,
104         .init_irq       = ks8695_init_irq,
105         .init_machine   = sg_init,
106         .init_time      = ks8695_timer_init,
107         .restart        = ks8695_restart,
108 MACHINE_END
109 #endif
110
111 #ifdef CONFIG_MACH_SE4200
112 MACHINE_START(SE4200, "SecureComputing/SE4200")
113         /* SnapGear */
114         .atag_offset    = 0x100,
115         .map_io         = ks8695_map_io,
116         .init_irq       = ks8695_init_irq,
117         .init_machine   = sg_init,
118         .init_time      = ks8695_timer_init,
119         .restart        = ks8695_restart,
120 MACHINE_END
121 #endif