diff options
author | Martyn Welch <martyn.welch@ge.com> | 2012-03-12 13:13:00 -0400 |
---|---|---|
committer | Kumar Gala <galak@kernel.crashing.org> | 2012-03-16 12:15:48 -0400 |
commit | e041013ac0df7fc7dea73c9ca73a33ab5b48d155 (patch) | |
tree | 223d3cc0558010519456af6caffa0df1fd4cf03f | |
parent | 44b24b74abc37e3c0f28c8288178056f10074863 (diff) |
powerpc/85xx: Board support for GE IMP3A
Initial board support for the GE IMP3A, a 3U compactPCI card with a p2020
processor.
Signed-off-by: Martyn Welch <martyn.welch@ge.com>
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
-rw-r--r-- | arch/powerpc/boot/dts/ge_imp3a.dts | 255 | ||||
-rw-r--r-- | arch/powerpc/configs/85xx/ge_imp3a_defconfig | 257 | ||||
-rw-r--r-- | arch/powerpc/platforms/85xx/Kconfig | 15 | ||||
-rw-r--r-- | arch/powerpc/platforms/85xx/Makefile | 1 | ||||
-rw-r--r-- | arch/powerpc/platforms/85xx/ge_imp3a.c | 246 | ||||
-rw-r--r-- | drivers/gpio/gpio-ge.c | 28 |
6 files changed, 802 insertions, 0 deletions
diff --git a/arch/powerpc/boot/dts/ge_imp3a.dts b/arch/powerpc/boot/dts/ge_imp3a.dts new file mode 100644 index 000000000000..fefae416a097 --- /dev/null +++ b/arch/powerpc/boot/dts/ge_imp3a.dts | |||
@@ -0,0 +1,255 @@ | |||
1 | /* | ||
2 | * GE IMP3A Device Tree Source | ||
3 | * | ||
4 | * Copyright 2010-2011 GE Intelligent Platforms Embedded Systems, Inc. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify it | ||
7 | * under the terms of the GNU General Public License as published by the | ||
8 | * Free Software Foundation; either version 2 of the License, or (at your | ||
9 | * option) any later version. | ||
10 | * | ||
11 | * Based on: P2020 DS Device Tree Source | ||
12 | * Copyright 2009 Freescale Semiconductor Inc. | ||
13 | */ | ||
14 | |||
15 | /include/ "fsl/p2020si-pre.dtsi" | ||
16 | |||
17 | / { | ||
18 | model = "GE_IMP3A"; | ||
19 | compatible = "ge,imp3a"; | ||
20 | |||
21 | memory { | ||
22 | device_type = "memory"; | ||
23 | }; | ||
24 | |||
25 | lbc: localbus@fef05000 { | ||
26 | reg = <0 0xfef05000 0 0x1000>; | ||
27 | |||
28 | ranges = <0x0 0x0 0x0 0xff000000 0x01000000 | ||
29 | 0x1 0x0 0x0 0xe0000000 0x08000000 | ||
30 | 0x2 0x0 0x0 0xe8000000 0x08000000 | ||
31 | 0x3 0x0 0x0 0xfc100000 0x00020000 | ||
32 | 0x4 0x0 0x0 0xfc000000 0x00008000 | ||
33 | 0x5 0x0 0x0 0xfc008000 0x00008000 | ||
34 | 0x6 0x0 0x0 0xfee00000 0x00040000 | ||
35 | 0x7 0x0 0x0 0xfee80000 0x00040000>; | ||
36 | |||
37 | /* nor@0,0 is a mirror of part of the memory in nor@1,0 | ||
38 | nor@0,0 { | ||
39 | #address-cells = <1>; | ||
40 | #size-cells = <1>; | ||
41 | compatible = "ge,imp3a-firmware-mirror", "cfi-flash"; | ||
42 | reg = <0x0 0x0 0x1000000>; | ||
43 | bank-width = <2>; | ||
44 | device-width = <1>; | ||
45 | |||
46 | partition@0 { | ||
47 | label = "firmware"; | ||
48 | reg = <0x0 0x1000000>; | ||
49 | read-only; | ||
50 | }; | ||
51 | }; | ||
52 | */ | ||
53 | |||
54 | nor@1,0 { | ||
55 | #address-cells = <1>; | ||
56 | #size-cells = <1>; | ||
57 | compatible = "ge,imp3a-paged-flash", "cfi-flash"; | ||
58 | reg = <0x1 0x0 0x8000000>; | ||
59 | bank-width = <2>; | ||
60 | device-width = <1>; | ||
61 | |||
62 | partition@0 { | ||
63 | label = "user"; | ||
64 | reg = <0x0 0x7800000>; | ||
65 | }; | ||
66 | |||
67 | partition@7800000 { | ||
68 | label = "firmware"; | ||
69 | reg = <0x7800000 0x800000>; | ||
70 | read-only; | ||
71 | }; | ||
72 | }; | ||
73 | |||
74 | nvram@3,0 { | ||
75 | device_type = "nvram"; | ||
76 | compatible = "simtek,stk14ca8"; | ||
77 | reg = <0x3 0x0 0x20000>; | ||
78 | }; | ||
79 | |||
80 | fpga@4,0 { | ||
81 | compatible = "ge,imp3a-fpga-regs"; | ||
82 | reg = <0x4 0x0 0x20>; | ||
83 | }; | ||
84 | |||
85 | gef_pic: pic@4,20 { | ||
86 | #interrupt-cells = <1>; | ||
87 | interrupt-controller; | ||
88 | device_type = "interrupt-controller"; | ||
89 | compatible = "ge,imp3a-fpga-pic", "gef,fpga-pic-1.00"; | ||
90 | reg = <0x4 0x20 0x20>; | ||
91 | interrupts = <6 7 0 0>; | ||
92 | }; | ||
93 | |||
94 | gef_gpio: gpio@4,400 { | ||
95 | #gpio-cells = <2>; | ||
96 | compatible = "ge,imp3a-gpio"; | ||
97 | reg = <0x4 0x400 0x24>; | ||
98 | gpio-controller; | ||
99 | }; | ||
100 | |||
101 | wdt@4,800 { | ||
102 | compatible = "ge,imp3a-fpga-wdt", "gef,fpga-wdt-1.00", | ||
103 | "gef,fpga-wdt"; | ||
104 | reg = <0x4 0x800 0x8>; | ||
105 | interrupts = <10 4>; | ||
106 | interrupt-parent = <&gef_pic>; | ||
107 | }; | ||
108 | |||
109 | /* Second watchdog available, driver currently supports one. | ||
110 | wdt@4,808 { | ||
111 | compatible = "gef,imp3a-fpga-wdt", "gef,fpga-wdt-1.00", | ||
112 | "gef,fpga-wdt"; | ||
113 | reg = <0x4 0x808 0x8>; | ||
114 | interrupts = <9 4>; | ||
115 | interrupt-parent = <&gef_pic>; | ||
116 | }; | ||
117 | */ | ||
118 | |||
119 | nand@6,0 { | ||
120 | compatible = "fsl,elbc-fcm-nand"; | ||
121 | reg = <0x6 0x0 0x40000>; | ||
122 | }; | ||
123 | |||
124 | nand@7,0 { | ||
125 | compatible = "fsl,elbc-fcm-nand"; | ||
126 | reg = <0x7 0x0 0x40000>; | ||
127 | }; | ||
128 | }; | ||
129 | |||
130 | soc: soc@fef00000 { | ||
131 | ranges = <0x0 0 0xfef00000 0x100000>; | ||
132 | |||
133 | i2c@3000 { | ||
134 | hwmon@48 { | ||
135 | compatible = "national,lm92"; | ||
136 | reg = <0x48>; | ||
137 | }; | ||
138 | |||
139 | hwmon@4c { | ||
140 | compatible = "adi,adt7461"; | ||
141 | reg = <0x4c>; | ||
142 | }; | ||
143 | |||
144 | rtc@51 { | ||
145 | compatible = "epson,rx8581"; | ||
146 | reg = <0x51>; | ||
147 | }; | ||
148 | |||
149 | eti@6b { | ||
150 | compatible = "dallas,ds1682"; | ||
151 | reg = <0x6b>; | ||
152 | }; | ||
153 | }; | ||
154 | |||
155 | usb@22000 { | ||
156 | phy_type = "ulpi"; | ||
157 | dr_mode = "host"; | ||
158 | }; | ||
159 | |||
160 | mdio@24520 { | ||
161 | phy0: ethernet-phy@0 { | ||
162 | interrupt-parent = <&gef_pic>; | ||
163 | interrupts = <0xc 0x4>; | ||
164 | reg = <0x1>; | ||
165 | }; | ||
166 | phy1: ethernet-phy@1 { | ||
167 | interrupt-parent = <&gef_pic>; | ||
168 | interrupts = <0xb 0x4>; | ||
169 | reg = <0x2>; | ||
170 | }; | ||
171 | tbi0: tbi-phy@11 { | ||
172 | reg = <0x11>; | ||
173 | device_type = "tbi-phy"; | ||
174 | }; | ||
175 | }; | ||
176 | |||
177 | mdio@25520 { | ||
178 | tbi1: tbi-phy@11 { | ||
179 | reg = <0x11>; | ||
180 | device_type = "tbi-phy"; | ||
181 | }; | ||
182 | }; | ||
183 | |||
184 | mdio@26520 { | ||
185 | status = "disabled"; | ||
186 | }; | ||
187 | |||
188 | enet0: ethernet@24000 { | ||
189 | tbi-handle = <&tbi0>; | ||
190 | phy-handle = <&phy0>; | ||
191 | phy-connection-type = "gmii"; | ||
192 | }; | ||
193 | |||
194 | enet1: ethernet@25000 { | ||
195 | tbi-handle = <&tbi1>; | ||
196 | phy-handle = <&phy1>; | ||
197 | phy-connection-type = "gmii"; | ||
198 | }; | ||
199 | |||
200 | enet2: ethernet@26000 { | ||
201 | status = "disabled"; | ||
202 | }; | ||
203 | }; | ||
204 | |||
205 | pci0: pcie@fef08000 { | ||
206 | ranges = <0x2000000 0x0 0xc0000000 0 0xc0000000 0x0 0x20000000 | ||
207 | 0x1000000 0x0 0x00000000 0 0xfe020000 0x0 0x10000>; | ||
208 | reg = <0 0xfef08000 0 0x1000>; | ||
209 | |||
210 | pcie@0 { | ||
211 | ranges = <0x2000000 0x0 0xc0000000 | ||
212 | 0x2000000 0x0 0xc0000000 | ||
213 | 0x0 0x20000000 | ||
214 | |||
215 | 0x1000000 0x0 0x0 | ||
216 | 0x1000000 0x0 0x0 | ||
217 | 0x0 0x10000>; | ||
218 | }; | ||
219 | }; | ||
220 | |||
221 | pci1: pcie@fef09000 { | ||
222 | reg = <0 0xfef09000 0 0x1000>; | ||
223 | ranges = <0x2000000 0x0 0xa0000000 0 0xa0000000 0x0 0x20000000 | ||
224 | 0x1000000 0x0 0x00000000 0 0xfe010000 0x0 0x10000>; | ||
225 | |||
226 | pcie@0 { | ||
227 | ranges = <0x2000000 0x0 0xa0000000 | ||
228 | 0x2000000 0x0 0xa0000000 | ||
229 | 0x0 0x20000000 | ||
230 | |||
231 | 0x1000000 0x0 0x0 | ||
232 | 0x1000000 0x0 0x0 | ||
233 | 0x0 0x10000>; | ||
234 | }; | ||
235 | |||
236 | }; | ||
237 | |||
238 | pci2: pcie@fef0a000 { | ||
239 | reg = <0 0xfef0a000 0 0x1000>; | ||
240 | ranges = <0x2000000 0x0 0x80000000 0 0x80000000 0x0 0x20000000 | ||
241 | 0x1000000 0x0 0x00000000 0 0xfe000000 0x0 0x10000>; | ||
242 | |||
243 | pcie@0 { | ||
244 | ranges = <0x2000000 0x0 0x80000000 | ||
245 | 0x2000000 0x0 0x80000000 | ||
246 | 0x0 0x20000000 | ||
247 | |||
248 | 0x1000000 0x0 0x0 | ||
249 | 0x1000000 0x0 0x0 | ||
250 | 0x0 0x10000>; | ||
251 | }; | ||
252 | }; | ||
253 | }; | ||
254 | |||
255 | /include/ "fsl/p2020si-post.dtsi" | ||
diff --git a/arch/powerpc/configs/85xx/ge_imp3a_defconfig b/arch/powerpc/configs/85xx/ge_imp3a_defconfig new file mode 100644 index 000000000000..f8c51a4ab995 --- /dev/null +++ b/arch/powerpc/configs/85xx/ge_imp3a_defconfig | |||
@@ -0,0 +1,257 @@ | |||
1 | CONFIG_PPC_85xx=y | ||
2 | CONFIG_SMP=y | ||
3 | CONFIG_NR_CPUS=2 | ||
4 | CONFIG_EXPERIMENTAL=y | ||
5 | CONFIG_SYSVIPC=y | ||
6 | CONFIG_POSIX_MQUEUE=y | ||
7 | CONFIG_BSD_PROCESS_ACCT=y | ||
8 | CONFIG_BSD_PROCESS_ACCT_V3=y | ||
9 | CONFIG_SPARSE_IRQ=y | ||
10 | CONFIG_IKCONFIG=y | ||
11 | CONFIG_IKCONFIG_PROC=y | ||
12 | # CONFIG_UTS_NS is not set | ||
13 | # CONFIG_IPC_NS is not set | ||
14 | # CONFIG_USER_NS is not set | ||
15 | # CONFIG_PID_NS is not set | ||
16 | # CONFIG_NET_NS is not set | ||
17 | CONFIG_SYSFS_DEPRECATED=y | ||
18 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
19 | CONFIG_RELAY=y | ||
20 | CONFIG_BLK_DEV_INITRD=y | ||
21 | CONFIG_PERF_EVENTS=y | ||
22 | CONFIG_SLAB=y | ||
23 | CONFIG_MODULES=y | ||
24 | CONFIG_MODULE_UNLOAD=y | ||
25 | # CONFIG_BLK_DEV_BSG is not set | ||
26 | CONFIG_GE_IMP3A=y | ||
27 | CONFIG_QUICC_ENGINE=y | ||
28 | CONFIG_QE_GPIO=y | ||
29 | CONFIG_CPM2=y | ||
30 | CONFIG_HIGHMEM=y | ||
31 | CONFIG_HIGH_RES_TIMERS=y | ||
32 | CONFIG_HZ_1000=y | ||
33 | CONFIG_PREEMPT=y | ||
34 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
35 | CONFIG_BINFMT_MISC=m | ||
36 | CONFIG_MATH_EMULATION=y | ||
37 | CONFIG_IRQ_ALL_CPUS=y | ||
38 | CONFIG_FORCE_MAX_ZONEORDER=17 | ||
39 | CONFIG_PCI=y | ||
40 | CONFIG_PCIEPORTBUS=y | ||
41 | CONFIG_PCI_MSI=y | ||
42 | CONFIG_PCCARD=y | ||
43 | # CONFIG_PCMCIA_LOAD_CIS is not set | ||
44 | CONFIG_YENTA=y | ||
45 | CONFIG_NET=y | ||
46 | CONFIG_PACKET=y | ||
47 | CONFIG_UNIX=y | ||
48 | CONFIG_XFRM_USER=m | ||
49 | CONFIG_NET_KEY=y | ||
50 | CONFIG_INET=y | ||
51 | CONFIG_IP_MULTICAST=y | ||
52 | CONFIG_IP_ADVANCED_ROUTER=y | ||
53 | CONFIG_IP_MULTIPLE_TABLES=y | ||
54 | CONFIG_IP_ROUTE_MULTIPATH=y | ||
55 | CONFIG_IP_ROUTE_VERBOSE=y | ||
56 | CONFIG_IP_PNP=y | ||
57 | CONFIG_IP_PNP_DHCP=y | ||
58 | CONFIG_IP_PNP_BOOTP=y | ||
59 | CONFIG_IP_PNP_RARP=y | ||
60 | CONFIG_NET_IPIP=m | ||
61 | CONFIG_IP_MROUTE=y | ||
62 | CONFIG_IP_PIMSM_V1=y | ||
63 | CONFIG_IP_PIMSM_V2=y | ||
64 | CONFIG_SYN_COOKIES=y | ||
65 | CONFIG_INET_AH=m | ||
66 | CONFIG_INET_ESP=m | ||
67 | CONFIG_INET_IPCOMP=m | ||
68 | # CONFIG_INET_XFRM_MODE_BEET is not set | ||
69 | CONFIG_INET6_AH=m | ||
70 | CONFIG_INET6_IPCOMP=m | ||
71 | CONFIG_IPV6_TUNNEL=m | ||
72 | CONFIG_NET_PKTGEN=m | ||
73 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
74 | CONFIG_MTD=y | ||
75 | CONFIG_MTD_OF_PARTS=y | ||
76 | CONFIG_MTD_CHAR=y | ||
77 | CONFIG_MTD_BLOCK=y | ||
78 | CONFIG_MTD_CFI=y | ||
79 | CONFIG_MTD_JEDECPROBE=y | ||
80 | CONFIG_MTD_CFI_INTELEXT=y | ||
81 | CONFIG_MTD_CFI_AMDSTD=y | ||
82 | CONFIG_MTD_PHYSMAP_OF=y | ||
83 | CONFIG_MTD_NAND=y | ||
84 | CONFIG_MTD_NAND_FSL_ELBC=y | ||
85 | CONFIG_PROC_DEVICETREE=y | ||
86 | CONFIG_BLK_DEV_LOOP=m | ||
87 | CONFIG_BLK_DEV_CRYPTOLOOP=m | ||
88 | CONFIG_BLK_DEV_NBD=m | ||
89 | CONFIG_BLK_DEV_RAM=y | ||
90 | CONFIG_BLK_DEV_RAM_SIZE=131072 | ||
91 | CONFIG_MISC_DEVICES=y | ||
92 | CONFIG_DS1682=y | ||
93 | CONFIG_BLK_DEV_SD=y | ||
94 | CONFIG_CHR_DEV_ST=y | ||
95 | CONFIG_BLK_DEV_SR=y | ||
96 | CONFIG_ATA=y | ||
97 | CONFIG_SATA_AHCI=y | ||
98 | CONFIG_SATA_SIL24=y | ||
99 | # CONFIG_ATA_SFF is not set | ||
100 | CONFIG_NETDEVICES=y | ||
101 | CONFIG_BONDING=m | ||
102 | CONFIG_DUMMY=m | ||
103 | CONFIG_NETCONSOLE=y | ||
104 | CONFIG_NETPOLL_TRAP=y | ||
105 | CONFIG_TUN=m | ||
106 | # CONFIG_NET_VENDOR_3COM is not set | ||
107 | CONFIG_FS_ENET=y | ||
108 | CONFIG_UCC_GETH=y | ||
109 | CONFIG_GIANFAR=y | ||
110 | CONFIG_PPP=m | ||
111 | CONFIG_PPP_BSDCOMP=m | ||
112 | CONFIG_PPP_DEFLATE=m | ||
113 | CONFIG_PPP_FILTER=y | ||
114 | CONFIG_PPP_MULTILINK=y | ||
115 | CONFIG_PPPOE=m | ||
116 | CONFIG_PPP_ASYNC=m | ||
117 | CONFIG_PPP_SYNC_TTY=m | ||
118 | CONFIG_SLIP=m | ||
119 | CONFIG_SLIP_COMPRESSED=y | ||
120 | CONFIG_SLIP_SMART=y | ||
121 | CONFIG_SLIP_MODE_SLIP6=y | ||
122 | # CONFIG_INPUT_KEYBOARD is not set | ||
123 | # CONFIG_INPUT_MOUSE is not set | ||
124 | # CONFIG_SERIO is not set | ||
125 | # CONFIG_LEGACY_PTYS is not set | ||
126 | CONFIG_SERIAL_8250=y | ||
127 | CONFIG_SERIAL_8250_CONSOLE=y | ||
128 | CONFIG_SERIAL_8250_NR_UARTS=2 | ||
129 | CONFIG_SERIAL_8250_RUNTIME_UARTS=2 | ||
130 | CONFIG_SERIAL_8250_EXTENDED=y | ||
131 | CONFIG_SERIAL_8250_MANY_PORTS=y | ||
132 | CONFIG_SERIAL_8250_DETECT_IRQ=y | ||
133 | CONFIG_SERIAL_8250_RSA=y | ||
134 | CONFIG_SERIAL_QE=m | ||
135 | CONFIG_NVRAM=y | ||
136 | CONFIG_I2C=y | ||
137 | CONFIG_I2C_CHARDEV=y | ||
138 | CONFIG_I2C_CPM=m | ||
139 | CONFIG_I2C_MPC=y | ||
140 | CONFIG_GPIO_SYSFS=y | ||
141 | CONFIG_GPIO_GE_FPGA=y | ||
142 | CONFIG_SENSORS_LM90=y | ||
143 | CONFIG_SENSORS_LM92=y | ||
144 | CONFIG_WATCHDOG=y | ||
145 | CONFIG_GEF_WDT=y | ||
146 | CONFIG_VIDEO_OUTPUT_CONTROL=m | ||
147 | CONFIG_HID_DRAGONRISE=y | ||
148 | CONFIG_HID_GYRATION=y | ||
149 | CONFIG_HID_TWINHAN=y | ||
150 | CONFIG_HID_ORTEK=y | ||
151 | CONFIG_HID_PANTHERLORD=y | ||
152 | CONFIG_HID_PETALYNX=y | ||
153 | CONFIG_HID_SAMSUNG=y | ||
154 | CONFIG_HID_SONY=y | ||
155 | CONFIG_HID_SUNPLUS=y | ||
156 | CONFIG_HID_GREENASIA=y | ||
157 | CONFIG_HID_SMARTJOYPLUS=y | ||
158 | CONFIG_HID_TOPSEED=y | ||
159 | CONFIG_HID_THRUSTMASTER=y | ||
160 | CONFIG_HID_ZEROPLUS=y | ||
161 | CONFIG_USB=y | ||
162 | CONFIG_USB_DEVICEFS=y | ||
163 | CONFIG_USB_EHCI_HCD=y | ||
164 | # CONFIG_USB_EHCI_TT_NEWSCHED is not set | ||
165 | CONFIG_USB_EHCI_FSL=y | ||
166 | CONFIG_USB_OHCI_HCD=y | ||
167 | CONFIG_USB_OHCI_HCD_PPC_OF_BE=y | ||
168 | CONFIG_USB_OHCI_HCD_PPC_OF_LE=y | ||
169 | CONFIG_USB_STORAGE=y | ||
170 | CONFIG_EDAC=y | ||
171 | CONFIG_EDAC_MM_EDAC=y | ||
172 | CONFIG_EDAC_MPC85XX=y | ||
173 | CONFIG_RTC_CLASS=y | ||
174 | # CONFIG_RTC_INTF_PROC is not set | ||
175 | CONFIG_RTC_DRV_RX8581=y | ||
176 | CONFIG_DMADEVICES=y | ||
177 | CONFIG_FSL_DMA=y | ||
178 | # CONFIG_NET_DMA is not set | ||
179 | CONFIG_EXT2_FS=y | ||
180 | CONFIG_EXT2_FS_XATTR=y | ||
181 | CONFIG_EXT2_FS_POSIX_ACL=y | ||
182 | CONFIG_EXT3_FS=y | ||
183 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | ||
184 | CONFIG_EXT3_FS_POSIX_ACL=y | ||
185 | CONFIG_EXT4_FS=y | ||
186 | CONFIG_FUSE_FS=y | ||
187 | CONFIG_ISO9660_FS=y | ||
188 | CONFIG_JOLIET=y | ||
189 | CONFIG_ZISOFS=y | ||
190 | CONFIG_UDF_FS=y | ||
191 | CONFIG_MSDOS_FS=y | ||
192 | CONFIG_VFAT_FS=y | ||
193 | CONFIG_FAT_DEFAULT_CODEPAGE=850 | ||
194 | CONFIG_FAT_DEFAULT_IOCHARSET="ascii" | ||
195 | CONFIG_NTFS_FS=y | ||
196 | CONFIG_PROC_KCORE=y | ||
197 | CONFIG_TMPFS=y | ||
198 | CONFIG_JFFS2_FS=y | ||
199 | CONFIG_NFS_FS=y | ||
200 | CONFIG_NFS_V3=y | ||
201 | CONFIG_NFS_V4=y | ||
202 | CONFIG_ROOT_NFS=y | ||
203 | CONFIG_NFSD=y | ||
204 | CONFIG_NFSD_V4=y | ||
205 | CONFIG_CIFS=m | ||
206 | CONFIG_CIFS_XATTR=y | ||
207 | CONFIG_CIFS_POSIX=y | ||
208 | CONFIG_NLS_CODEPAGE_437=y | ||
209 | CONFIG_NLS_CODEPAGE_737=m | ||
210 | CONFIG_NLS_CODEPAGE_775=m | ||
211 | CONFIG_NLS_CODEPAGE_850=y | ||
212 | CONFIG_NLS_CODEPAGE_852=m | ||
213 | CONFIG_NLS_CODEPAGE_855=m | ||
214 | CONFIG_NLS_CODEPAGE_857=m | ||
215 | CONFIG_NLS_CODEPAGE_860=m | ||
216 | CONFIG_NLS_CODEPAGE_861=m | ||
217 | CONFIG_NLS_CODEPAGE_862=m | ||
218 | CONFIG_NLS_CODEPAGE_863=m | ||
219 | CONFIG_NLS_CODEPAGE_864=m | ||
220 | CONFIG_NLS_CODEPAGE_865=m | ||
221 | CONFIG_NLS_CODEPAGE_866=m | ||
222 | CONFIG_NLS_CODEPAGE_869=m | ||
223 | CONFIG_NLS_CODEPAGE_936=m | ||
224 | CONFIG_NLS_CODEPAGE_950=m | ||
225 | CONFIG_NLS_CODEPAGE_932=m | ||
226 | CONFIG_NLS_CODEPAGE_949=m | ||
227 | CONFIG_NLS_CODEPAGE_874=m | ||
228 | CONFIG_NLS_ISO8859_8=m | ||
229 | CONFIG_NLS_CODEPAGE_1250=m | ||
230 | CONFIG_NLS_CODEPAGE_1251=m | ||
231 | CONFIG_NLS_ASCII=y | ||
232 | CONFIG_NLS_ISO8859_1=y | ||
233 | CONFIG_NLS_ISO8859_2=m | ||
234 | CONFIG_NLS_ISO8859_3=m | ||
235 | CONFIG_NLS_ISO8859_4=m | ||
236 | CONFIG_NLS_ISO8859_5=m | ||
237 | CONFIG_NLS_ISO8859_6=m | ||
238 | CONFIG_NLS_ISO8859_7=m | ||
239 | CONFIG_NLS_ISO8859_9=m | ||
240 | CONFIG_NLS_ISO8859_13=m | ||
241 | CONFIG_NLS_ISO8859_14=m | ||
242 | CONFIG_NLS_ISO8859_15=y | ||
243 | CONFIG_NLS_KOI8_R=m | ||
244 | CONFIG_NLS_KOI8_U=m | ||
245 | CONFIG_NLS_UTF8=y | ||
246 | CONFIG_CRC_CCITT=y | ||
247 | CONFIG_CRC_T10DIF=y | ||
248 | CONFIG_LIBCRC32C=y | ||
249 | CONFIG_MAGIC_SYSRQ=y | ||
250 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
251 | CONFIG_CRYPTO_CBC=y | ||
252 | CONFIG_CRYPTO_MD5=y | ||
253 | CONFIG_CRYPTO_SHA256=m | ||
254 | CONFIG_CRYPTO_SHA512=m | ||
255 | CONFIG_CRYPTO_DES=y | ||
256 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | ||
257 | CONFIG_CRYPTO_DEV_TALITOS=y | ||
diff --git a/arch/powerpc/platforms/85xx/Kconfig b/arch/powerpc/platforms/85xx/Kconfig index b221236aade8..4c91ea97d885 100644 --- a/arch/powerpc/platforms/85xx/Kconfig +++ b/arch/powerpc/platforms/85xx/Kconfig | |||
@@ -172,6 +172,21 @@ config SBC8560 | |||
172 | help | 172 | help |
173 | This option enables support for the Wind River SBC8560 board | 173 | This option enables support for the Wind River SBC8560 board |
174 | 174 | ||
175 | config GE_IMP3A | ||
176 | bool "GE Intelligent Platforms IMP3A" | ||
177 | select DEFAULT_UIMAGE | ||
178 | select SWIOTLB | ||
179 | select MMIO_NVRAM | ||
180 | select GENERIC_GPIO | ||
181 | select ARCH_REQUIRE_GPIOLIB | ||
182 | select GE_FPGA | ||
183 | help | ||
184 | This option enables support for the GE Intelligent Platforms IMP3A | ||
185 | board. | ||
186 | |||
187 | This board is a 3U CompactPCI Single Board Computer with a Freescale | ||
188 | P2020 processor. | ||
189 | |||
175 | config P2041_RDB | 190 | config P2041_RDB |
176 | bool "Freescale P2041 RDB" | 191 | bool "Freescale P2041 RDB" |
177 | select DEFAULT_UIMAGE | 192 | select DEFAULT_UIMAGE |
diff --git a/arch/powerpc/platforms/85xx/Makefile b/arch/powerpc/platforms/85xx/Makefile index 9cb2d4320dcc..2125d4ca068a 100644 --- a/arch/powerpc/platforms/85xx/Makefile +++ b/arch/powerpc/platforms/85xx/Makefile | |||
@@ -27,3 +27,4 @@ obj-$(CONFIG_SBC8548) += sbc8548.o | |||
27 | obj-$(CONFIG_SOCRATES) += socrates.o socrates_fpga_pic.o | 27 | obj-$(CONFIG_SOCRATES) += socrates.o socrates_fpga_pic.o |
28 | obj-$(CONFIG_KSI8560) += ksi8560.o | 28 | obj-$(CONFIG_KSI8560) += ksi8560.o |
29 | obj-$(CONFIG_XES_MPC85xx) += xes_mpc85xx.o | 29 | obj-$(CONFIG_XES_MPC85xx) += xes_mpc85xx.o |
30 | obj-$(CONFIG_GE_IMP3A) += ge_imp3a.o | ||
diff --git a/arch/powerpc/platforms/85xx/ge_imp3a.c b/arch/powerpc/platforms/85xx/ge_imp3a.c new file mode 100644 index 000000000000..d50056f424f6 --- /dev/null +++ b/arch/powerpc/platforms/85xx/ge_imp3a.c | |||
@@ -0,0 +1,246 @@ | |||
1 | /* | ||
2 | * GE IMP3A Board Setup | ||
3 | * | ||
4 | * Author Martyn Welch <martyn.welch@ge.com> | ||
5 | * | ||
6 | * Copyright 2010 GE Intelligent Platforms Embedded Systems, Inc. | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify it | ||
9 | * under the terms of the GNU General Public License as published by the | ||
10 | * Free Software Foundation; either version 2 of the License, or (at your | ||
11 | * option) any later version. | ||
12 | * | ||
13 | * Based on: mpc85xx_ds.c (MPC85xx DS Board Setup) | ||
14 | * Copyright 2007 Freescale Semiconductor Inc. | ||
15 | */ | ||
16 | |||
17 | #include <linux/stddef.h> | ||
18 | #include <linux/kernel.h> | ||
19 | #include <linux/pci.h> | ||
20 | #include <linux/kdev_t.h> | ||
21 | #include <linux/delay.h> | ||
22 | #include <linux/seq_file.h> | ||
23 | #include <linux/interrupt.h> | ||
24 | #include <linux/of_platform.h> | ||
25 | #include <linux/memblock.h> | ||
26 | |||
27 | #include <asm/system.h> | ||
28 | #include <asm/time.h> | ||
29 | #include <asm/machdep.h> | ||
30 | #include <asm/pci-bridge.h> | ||
31 | #include <mm/mmu_decl.h> | ||
32 | #include <asm/prom.h> | ||
33 | #include <asm/udbg.h> | ||
34 | #include <asm/mpic.h> | ||
35 | #include <asm/swiotlb.h> | ||
36 | #include <asm/nvram.h> | ||
37 | |||
38 | #include <sysdev/fsl_soc.h> | ||
39 | #include <sysdev/fsl_pci.h> | ||
40 | #include "smp.h" | ||
41 | |||
42 | #include "mpc85xx.h" | ||
43 | #include <sysdev/ge/ge_pic.h> | ||
44 | |||
45 | void __iomem *imp3a_regs; | ||
46 | |||
47 | void __init ge_imp3a_pic_init(void) | ||
48 | { | ||
49 | struct mpic *mpic; | ||
50 | struct device_node *np; | ||
51 | struct device_node *cascade_node = NULL; | ||
52 | unsigned long root = of_get_flat_dt_root(); | ||
53 | |||
54 | if (of_flat_dt_is_compatible(root, "fsl,MPC8572DS-CAMP")) { | ||
55 | mpic = mpic_alloc(NULL, 0, | ||
56 | MPIC_NO_RESET | | ||
57 | MPIC_BIG_ENDIAN | | ||
58 | MPIC_SINGLE_DEST_CPU, | ||
59 | 0, 256, " OpenPIC "); | ||
60 | } else { | ||
61 | mpic = mpic_alloc(NULL, 0, | ||
62 | MPIC_BIG_ENDIAN | | ||
63 | MPIC_SINGLE_DEST_CPU, | ||
64 | 0, 256, " OpenPIC "); | ||
65 | } | ||
66 | |||
67 | BUG_ON(mpic == NULL); | ||
68 | mpic_init(mpic); | ||
69 | /* | ||
70 | * There is a simple interrupt handler in the main FPGA, this needs | ||
71 | * to be cascaded into the MPIC | ||
72 | */ | ||
73 | for_each_node_by_type(np, "interrupt-controller") | ||
74 | if (of_device_is_compatible(np, "gef,fpga-pic-1.00")) { | ||
75 | cascade_node = np; | ||
76 | break; | ||
77 | } | ||
78 | |||
79 | if (cascade_node == NULL) { | ||
80 | printk(KERN_WARNING "IMP3A: No FPGA PIC\n"); | ||
81 | return; | ||
82 | } | ||
83 | |||
84 | gef_pic_init(cascade_node); | ||
85 | of_node_put(cascade_node); | ||
86 | } | ||
87 | |||
88 | #ifdef CONFIG_PCI | ||
89 | static int primary_phb_addr; | ||
90 | #endif /* CONFIG_PCI */ | ||
91 | |||
92 | /* | ||
93 | * Setup the architecture | ||
94 | */ | ||
95 | static void __init ge_imp3a_setup_arch(void) | ||
96 | { | ||
97 | struct device_node *regs; | ||
98 | #ifdef CONFIG_PCI | ||
99 | struct device_node *np; | ||
100 | struct pci_controller *hose; | ||
101 | #endif | ||
102 | dma_addr_t max = 0xffffffff; | ||
103 | |||
104 | if (ppc_md.progress) | ||
105 | ppc_md.progress("ge_imp3a_setup_arch()", 0); | ||
106 | |||
107 | #ifdef CONFIG_PCI | ||
108 | for_each_node_by_type(np, "pci") { | ||
109 | if (of_device_is_compatible(np, "fsl,mpc8540-pci") || | ||
110 | of_device_is_compatible(np, "fsl,mpc8548-pcie") || | ||
111 | of_device_is_compatible(np, "fsl,p2020-pcie")) { | ||
112 | struct resource rsrc; | ||
113 | of_address_to_resource(np, 0, &rsrc); | ||
114 | if ((rsrc.start & 0xfffff) == primary_phb_addr) | ||
115 | fsl_add_bridge(np, 1); | ||
116 | else | ||
117 | fsl_add_bridge(np, 0); | ||
118 | |||
119 | hose = pci_find_hose_for_OF_device(np); | ||
120 | max = min(max, hose->dma_window_base_cur + | ||
121 | hose->dma_window_size); | ||
122 | } | ||
123 | } | ||
124 | #endif | ||
125 | |||
126 | mpc85xx_smp_init(); | ||
127 | |||
128 | #ifdef CONFIG_SWIOTLB | ||
129 | if (memblock_end_of_DRAM() > max) { | ||
130 | ppc_swiotlb_enable = 1; | ||
131 | set_pci_dma_ops(&swiotlb_dma_ops); | ||
132 | ppc_md.pci_dma_dev_setup = pci_dma_dev_setup_swiotlb; | ||
133 | } | ||
134 | #endif | ||
135 | |||
136 | /* Remap basic board registers */ | ||
137 | regs = of_find_compatible_node(NULL, NULL, "ge,imp3a-fpga-regs"); | ||
138 | if (regs) { | ||
139 | imp3a_regs = of_iomap(regs, 0); | ||
140 | if (imp3a_regs == NULL) | ||
141 | printk(KERN_WARNING "Unable to map board registers\n"); | ||
142 | of_node_put(regs); | ||
143 | } | ||
144 | |||
145 | #if defined(CONFIG_MMIO_NVRAM) | ||
146 | mmio_nvram_init(); | ||
147 | #endif | ||
148 | |||
149 | printk(KERN_INFO "GE Intelligent Platforms IMP3A 3U cPCI SBC\n"); | ||
150 | } | ||
151 | |||
152 | /* Return the PCB revision */ | ||
153 | static unsigned int ge_imp3a_get_pcb_rev(void) | ||
154 | { | ||
155 | unsigned int reg; | ||
156 | |||
157 | reg = ioread16(imp3a_regs); | ||
158 | return (reg >> 8) & 0xff; | ||
159 | } | ||
160 | |||
161 | /* Return the board (software) revision */ | ||
162 | static unsigned int ge_imp3a_get_board_rev(void) | ||
163 | { | ||
164 | unsigned int reg; | ||
165 | |||
166 | reg = ioread16(imp3a_regs + 0x2); | ||
167 | return reg & 0xff; | ||
168 | } | ||
169 | |||
170 | /* Return the FPGA revision */ | ||
171 | static unsigned int ge_imp3a_get_fpga_rev(void) | ||
172 | { | ||
173 | unsigned int reg; | ||
174 | |||
175 | reg = ioread16(imp3a_regs + 0x2); | ||
176 | return (reg >> 8) & 0xff; | ||
177 | } | ||
178 | |||
179 | /* Return compactPCI Geographical Address */ | ||
180 | static unsigned int ge_imp3a_get_cpci_geo_addr(void) | ||
181 | { | ||
182 | unsigned int reg; | ||
183 | |||
184 | reg = ioread16(imp3a_regs + 0x6); | ||
185 | return (reg & 0x0f00) >> 8; | ||
186 | } | ||
187 | |||
188 | /* Return compactPCI System Controller Status */ | ||
189 | static unsigned int ge_imp3a_get_cpci_is_syscon(void) | ||
190 | { | ||
191 | unsigned int reg; | ||
192 | |||
193 | reg = ioread16(imp3a_regs + 0x6); | ||
194 | return reg & (1 << 12); | ||
195 | } | ||
196 | |||
197 | static void ge_imp3a_show_cpuinfo(struct seq_file *m) | ||
198 | { | ||
199 | seq_printf(m, "Vendor\t\t: GE Intelligent Platforms\n"); | ||
200 | |||
201 | seq_printf(m, "Revision\t: %u%c\n", ge_imp3a_get_pcb_rev(), | ||
202 | ('A' + ge_imp3a_get_board_rev() - 1)); | ||
203 | |||
204 | seq_printf(m, "FPGA Revision\t: %u\n", ge_imp3a_get_fpga_rev()); | ||
205 | |||
206 | seq_printf(m, "cPCI geo. addr\t: %u\n", ge_imp3a_get_cpci_geo_addr()); | ||
207 | |||
208 | seq_printf(m, "cPCI syscon\t: %s\n", | ||
209 | ge_imp3a_get_cpci_is_syscon() ? "yes" : "no"); | ||
210 | } | ||
211 | |||
212 | /* | ||
213 | * Called very early, device-tree isn't unflattened | ||
214 | */ | ||
215 | static int __init ge_imp3a_probe(void) | ||
216 | { | ||
217 | unsigned long root = of_get_flat_dt_root(); | ||
218 | |||
219 | if (of_flat_dt_is_compatible(root, "ge,IMP3A")) { | ||
220 | #ifdef CONFIG_PCI | ||
221 | primary_phb_addr = 0x9000; | ||
222 | #endif | ||
223 | return 1; | ||
224 | } | ||
225 | |||
226 | return 0; | ||
227 | } | ||
228 | |||
229 | machine_device_initcall(ge_imp3a, mpc85xx_common_publish_devices); | ||
230 | |||
231 | machine_arch_initcall(ge_imp3a, swiotlb_setup_bus_notifier); | ||
232 | |||
233 | define_machine(ge_imp3a) { | ||
234 | .name = "GE_IMP3A", | ||
235 | .probe = ge_imp3a_probe, | ||
236 | .setup_arch = ge_imp3a_setup_arch, | ||
237 | .init_IRQ = ge_imp3a_pic_init, | ||
238 | .show_cpuinfo = ge_imp3a_show_cpuinfo, | ||
239 | #ifdef CONFIG_PCI | ||
240 | .pcibios_fixup_bus = fsl_pcibios_fixup_bus, | ||
241 | #endif | ||
242 | .get_irq = mpic_get_irq, | ||
243 | .restart = fsl_rstcr_restart, | ||
244 | .calibrate_decr = generic_calibrate_decr, | ||
245 | .progress = udbg_progress, | ||
246 | }; | ||
diff --git a/drivers/gpio/gpio-ge.c b/drivers/gpio/gpio-ge.c index f8e628952921..7b95a4a8318c 100644 --- a/drivers/gpio/gpio-ge.c +++ b/drivers/gpio/gpio-ge.c | |||
@@ -162,6 +162,34 @@ static int __init gef_gpio_init(void) | |||
162 | } | 162 | } |
163 | } | 163 | } |
164 | 164 | ||
165 | for_each_compatible_node(np, NULL, "ge,imp3a-gpio") { | ||
166 | |||
167 | pr_debug("%s: Initialising GE GPIO\n", np->full_name); | ||
168 | |||
169 | /* Allocate chip structure */ | ||
170 | gef_gpio_chip = kzalloc(sizeof(*gef_gpio_chip), GFP_KERNEL); | ||
171 | if (!gef_gpio_chip) { | ||
172 | pr_err("%s: Unable to allocate structure\n", | ||
173 | np->full_name); | ||
174 | continue; | ||
175 | } | ||
176 | |||
177 | /* Setup pointers to chip functions */ | ||
178 | gef_gpio_chip->gc.of_gpio_n_cells = 2; | ||
179 | gef_gpio_chip->gc.ngpio = 16; | ||
180 | gef_gpio_chip->gc.direction_input = gef_gpio_dir_in; | ||
181 | gef_gpio_chip->gc.direction_output = gef_gpio_dir_out; | ||
182 | gef_gpio_chip->gc.get = gef_gpio_get; | ||
183 | gef_gpio_chip->gc.set = gef_gpio_set; | ||
184 | |||
185 | /* This function adds a memory mapped GPIO chip */ | ||
186 | retval = of_mm_gpiochip_add(np, gef_gpio_chip); | ||
187 | if (retval) { | ||
188 | kfree(gef_gpio_chip); | ||
189 | pr_err("%s: Unable to add GPIO\n", np->full_name); | ||
190 | } | ||
191 | } | ||
192 | |||
165 | return 0; | 193 | return 0; |
166 | }; | 194 | }; |
167 | arch_initcall(gef_gpio_init); | 195 | arch_initcall(gef_gpio_init); |