aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--MAINTAINERS4
-rw-r--r--arch/powerpc/boot/dts/kilauea.dts252
-rw-r--r--arch/powerpc/boot/uartlite.c4
-rw-r--r--arch/powerpc/configs/kilauea_defconfig768
-rw-r--r--arch/powerpc/kernel/cputable.c11
-rw-r--r--arch/powerpc/platforms/40x/Kconfig7
-rw-r--r--arch/powerpc/platforms/40x/Makefile5
-rw-r--r--arch/powerpc/platforms/40x/kilauea.c58
-rw-r--r--arch/powerpc/platforms/52xx/efika.c19
-rw-r--r--arch/powerpc/platforms/52xx/lite5200.c95
-rw-r--r--arch/powerpc/platforms/52xx/mpc52xx_common.c38
-rw-r--r--arch/powerpc/platforms/52xx/mpc52xx_pic.c11
-rw-r--r--arch/powerpc/sysdev/Makefile2
-rw-r--r--drivers/video/xilinxfb.c279
-rw-r--r--include/asm-powerpc/mpc52xx.h2
15 files changed, 1370 insertions, 185 deletions
diff --git a/MAINTAINERS b/MAINTAINERS
index d47367f68406..559c5fc8645c 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2288,6 +2288,8 @@ S: Maintained
2288LINUX FOR POWERPC EMBEDDED MPC52XX 2288LINUX FOR POWERPC EMBEDDED MPC52XX
2289P: Sylvain Munaut 2289P: Sylvain Munaut
2290M: tnt@246tNt.com 2290M: tnt@246tNt.com
2291P: Grant Likely
2292M: grant.likely@secretlab.ca
2291W: http://www.246tNt.com/mpc52xx/ 2293W: http://www.246tNt.com/mpc52xx/
2292W: http://www.penguinppc.org/ 2294W: http://www.penguinppc.org/
2293L: linuxppc-dev@ozlabs.org 2295L: linuxppc-dev@ozlabs.org
@@ -2306,7 +2308,7 @@ S: Maintained
2306LINUX FOR POWERPC EMBEDDED XILINX VIRTEX 2308LINUX FOR POWERPC EMBEDDED XILINX VIRTEX
2307P: Grant Likely 2309P: Grant Likely
2308M: grant.likely@secretlab.ca 2310M: grant.likely@secretlab.ca
2309W: http://www.secretlab.ca/ 2311W: http://wiki.secretlab.ca/index.php/Linux_on_Xilinx_Virtex
2310L: linuxppc-dev@ozlabs.org 2312L: linuxppc-dev@ozlabs.org
2311S: Maintained 2313S: Maintained
2312 2314
diff --git a/arch/powerpc/boot/dts/kilauea.dts b/arch/powerpc/boot/dts/kilauea.dts
new file mode 100644
index 000000000000..c824e8f06454
--- /dev/null
+++ b/arch/powerpc/boot/dts/kilauea.dts
@@ -0,0 +1,252 @@
1/*
2 * Device Tree Source for AMCC Kilauea (405EX)
3 *
4 * Copyright 2007 DENX Software Engineering, Stefan Roese <sr@denx.de>
5 *
6 * This file is licensed under the terms of the GNU General Public
7 * License version 2. This program is licensed "as is" without
8 * any warranty of any kind, whether express or implied.
9 */
10
11/ {
12 #address-cells = <1>;
13 #size-cells = <1>;
14 model = "amcc,kilauea";
15 compatible = "amcc,kilauea";
16 dcr-parent = <&/cpus/PowerPC,405EX@0>;
17
18 cpus {
19 #address-cells = <1>;
20 #size-cells = <0>;
21
22 PowerPC,405EX@0 {
23 device_type = "cpu";
24 reg = <0>;
25 clock-frequency = <0>; /* Filled in by U-Boot */
26 timebase-frequency = <0>; /* Filled in by U-Boot */
27 i-cache-line-size = <20>;
28 d-cache-line-size = <20>;
29 i-cache-size = <4000>; /* 16 kB */
30 d-cache-size = <4000>; /* 16 kB */
31 dcr-controller;
32 dcr-access-method = "native";
33 };
34 };
35
36 memory {
37 device_type = "memory";
38 reg = <0 0>; /* Filled in by U-Boot */
39 };
40
41 UIC0: interrupt-controller {
42 compatible = "ibm,uic-405ex", "ibm,uic";
43 interrupt-controller;
44 cell-index = <0>;
45 dcr-reg = <0c0 009>;
46 #address-cells = <0>;
47 #size-cells = <0>;
48 #interrupt-cells = <2>;
49 };
50
51 UIC1: interrupt-controller1 {
52 compatible = "ibm,uic-405ex","ibm,uic";
53 interrupt-controller;
54 cell-index = <1>;
55 dcr-reg = <0d0 009>;
56 #address-cells = <0>;
57 #size-cells = <0>;
58 #interrupt-cells = <2>;
59 interrupts = <1e 4 1f 4>; /* cascade */
60 interrupt-parent = <&UIC0>;
61 };
62
63 UIC2: interrupt-controller2 {
64 compatible = "ibm,uic-405ex","ibm,uic";
65 interrupt-controller;
66 cell-index = <2>;
67 dcr-reg = <0e0 009>;
68 #address-cells = <0>;
69 #size-cells = <0>;
70 #interrupt-cells = <2>;
71 interrupts = <1c 4 1d 4>; /* cascade */
72 interrupt-parent = <&UIC0>;
73 };
74
75 plb {
76 compatible = "ibm,plb-405ex", "ibm,plb4";
77 #address-cells = <1>;
78 #size-cells = <1>;
79 ranges;
80 clock-frequency = <0>; /* Filled in by U-Boot */
81
82 SDRAM0: memory-controller {
83 compatible = "ibm,sdram-405ex";
84 dcr-reg = <010 2>;
85 };
86
87 MAL0: mcmal {
88 compatible = "ibm,mcmal-405ex", "ibm,mcmal2";
89 dcr-reg = <180 62>;
90 num-tx-chans = <2>;
91 num-rx-chans = <2>;
92 interrupt-parent = <&MAL0>;
93 interrupts = <0 1 2 3 4>;
94 #interrupt-cells = <1>;
95 #address-cells = <0>;
96 #size-cells = <0>;
97 interrupt-map = </*TXEOB*/ 0 &UIC0 a 4
98 /*RXEOB*/ 1 &UIC0 b 4
99 /*SERR*/ 2 &UIC1 0 4
100 /*TXDE*/ 3 &UIC1 1 4
101 /*RXDE*/ 4 &UIC1 2 4>;
102 interrupt-map-mask = <ffffffff>;
103 };
104
105 POB0: opb {
106 compatible = "ibm,opb-405ex", "ibm,opb";
107 #address-cells = <1>;
108 #size-cells = <1>;
109 ranges = <80000000 80000000 10000000
110 ef600000 ef600000 a00000
111 f0000000 f0000000 10000000>;
112 dcr-reg = <0a0 5>;
113 clock-frequency = <0>; /* Filled in by U-Boot */
114
115 EBC0: ebc {
116 compatible = "ibm,ebc-405ex", "ibm,ebc";
117 dcr-reg = <012 2>;
118 #address-cells = <2>;
119 #size-cells = <1>;
120 clock-frequency = <0>; /* Filled in by U-Boot */
121 /* ranges property is supplied by U-Boot */
122 interrupts = <5 1>;
123 interrupt-parent = <&UIC1>;
124
125 nor_flash@0,0 {
126 compatible = "amd,s29gl512n", "cfi-flash";
127 bank-width = <2>;
128 reg = <0 000000 4000000>;
129 #address-cells = <1>;
130 #size-cells = <1>;
131 partition@0 {
132 label = "kernel";
133 reg = <0 200000>;
134 };
135 partition@200000 {
136 label = "root";
137 reg = <200000 200000>;
138 };
139 partition@400000 {
140 label = "user";
141 reg = <400000 3b60000>;
142 };
143 partition@3f60000 {
144 label = "env";
145 reg = <3f60000 40000>;
146 };
147 partition@3fa0000 {
148 label = "u-boot";
149 reg = <3fa0000 60000>;
150 };
151 };
152 };
153
154 UART0: serial@ef600200 {
155 device_type = "serial";
156 compatible = "ns16550";
157 reg = <ef600200 8>;
158 virtual-reg = <ef600200>;
159 clock-frequency = <0>; /* Filled in by U-Boot */
160 current-speed = <0>;
161 interrupt-parent = <&UIC0>;
162 interrupts = <1a 4>;
163 };
164
165 UART1: serial@ef600300 {
166 device_type = "serial";
167 compatible = "ns16550";
168 reg = <ef600300 8>;
169 virtual-reg = <ef600300>;
170 clock-frequency = <0>; /* Filled in by U-Boot */
171 current-speed = <0>;
172 interrupt-parent = <&UIC0>;
173 interrupts = <1 4>;
174 };
175
176 IIC0: i2c@ef600400 {
177 device_type = "i2c";
178 compatible = "ibm,iic-405ex", "ibm,iic";
179 reg = <ef600400 14>;
180 interrupt-parent = <&UIC0>;
181 interrupts = <2 4>;
182 };
183
184 IIC1: i2c@ef600500 {
185 device_type = "i2c";
186 compatible = "ibm,iic-405ex", "ibm,iic";
187 reg = <ef600500 14>;
188 interrupt-parent = <&UIC0>;
189 interrupts = <7 4>;
190 };
191
192
193 RGMII0: emac-rgmii@ef600b00 {
194 device_type = "rgmii-interface";
195 compatible = "ibm,rgmii-405ex", "ibm,rgmii";
196 reg = <ef600b00 104>;
197 };
198
199 EMAC0: ethernet@ef600900 {
200 linux,network-index = <0>;
201 device_type = "network";
202 compatible = "ibm,emac-405ex", "ibm,emac4";
203 interrupt-parent = <&EMAC0>;
204 interrupts = <0 1>;
205 #interrupt-cells = <1>;
206 #address-cells = <0>;
207 #size-cells = <0>;
208 interrupt-map = </*Status*/ 0 &UIC0 18 4
209 /*Wake*/ 1 &UIC1 1d 4>;
210 reg = <ef600900 70>;
211 local-mac-address = [000000000000]; /* Filled in by U-Boot */
212 mal-device = <&MAL0>;
213 mal-tx-channel = <0>;
214 mal-rx-channel = <0>;
215 cell-index = <0>;
216 max-frame-size = <5dc>;
217 rx-fifo-size = <1000>;
218 tx-fifo-size = <800>;
219 phy-mode = "rgmii";
220 phy-map = <00000000>;
221 rgmii-device = <&RGMII0>;
222 rgmii-channel = <0>;
223 };
224
225 EMAC1: ethernet@ef600a00 {
226 linux,network-index = <1>;
227 device_type = "network";
228 compatible = "ibm,emac-405ex", "ibm,emac4";
229 interrupt-parent = <&EMAC1>;
230 interrupts = <0 1>;
231 #interrupt-cells = <1>;
232 #address-cells = <0>;
233 #size-cells = <0>;
234 interrupt-map = </*Status*/ 0 &UIC0 19 4
235 /*Wake*/ 1 &UIC1 1f 4>;
236 reg = <ef600a00 70>;
237 local-mac-address = [000000000000]; /* Filled in by U-Boot */
238 mal-device = <&MAL0>;
239 mal-tx-channel = <1>;
240 mal-rx-channel = <1>;
241 cell-index = <1>;
242 max-frame-size = <5dc>;
243 rx-fifo-size = <1000>;
244 tx-fifo-size = <800>;
245 phy-mode = "rgmii";
246 phy-map = <00000000>;
247 rgmii-device = <&RGMII0>;
248 rgmii-channel = <1>;
249 };
250 };
251 };
252};
diff --git a/arch/powerpc/boot/uartlite.c b/arch/powerpc/boot/uartlite.c
index 38a470b329e3..46bed69b4169 100644
--- a/arch/powerpc/boot/uartlite.c
+++ b/arch/powerpc/boot/uartlite.c
@@ -45,8 +45,8 @@ static void uartlite_putc(unsigned char c)
45 45
46static unsigned char uartlite_getc(void) 46static unsigned char uartlite_getc(void)
47{ 47{
48 u32 reg = ULITE_STATUS_RXVALID; 48 u32 reg = 0;
49 while (reg & ULITE_STATUS_RXVALID) /* spin on RXVALID bit */ 49 while (!(reg & ULITE_STATUS_RXVALID)) /* spin waiting for RXVALID bit */
50 reg = in_be32(reg_base + ULITE_STATUS); 50 reg = in_be32(reg_base + ULITE_STATUS);
51 return in_be32(reg_base + ULITE_RX); 51 return in_be32(reg_base + ULITE_RX);
52} 52}
diff --git a/arch/powerpc/configs/kilauea_defconfig b/arch/powerpc/configs/kilauea_defconfig
new file mode 100644
index 000000000000..31790d329269
--- /dev/null
+++ b/arch/powerpc/configs/kilauea_defconfig
@@ -0,0 +1,768 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.23-rc9
4# Thu Oct 11 19:05:15 2007
5#
6# CONFIG_PPC64 is not set
7
8#
9# Processor support
10#
11# CONFIG_6xx is not set
12# CONFIG_PPC_85xx is not set
13# CONFIG_PPC_8xx is not set
14CONFIG_40x=y
15# CONFIG_44x is not set
16# CONFIG_E200 is not set
17CONFIG_4xx=y
18# CONFIG_PPC_MM_SLICES is not set
19CONFIG_NOT_COHERENT_CACHE=y
20CONFIG_PPC32=y
21CONFIG_WORD_SIZE=32
22CONFIG_PPC_MERGE=y
23CONFIG_MMU=y
24CONFIG_GENERIC_CMOS_UPDATE=y
25CONFIG_GENERIC_TIME=y
26CONFIG_GENERIC_TIME_VSYSCALL=y
27CONFIG_GENERIC_CLOCKEVENTS=y
28CONFIG_GENERIC_HARDIRQS=y
29CONFIG_IRQ_PER_CPU=y
30CONFIG_RWSEM_XCHGADD_ALGORITHM=y
31CONFIG_ARCH_HAS_ILOG2_U32=y
32CONFIG_GENERIC_HWEIGHT=y
33CONFIG_GENERIC_CALIBRATE_DELAY=y
34CONFIG_GENERIC_FIND_NEXT_BIT=y
35# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
36CONFIG_PPC=y
37CONFIG_EARLY_PRINTK=y
38CONFIG_GENERIC_NVRAM=y
39CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
40CONFIG_ARCH_MAY_HAVE_PC_FDC=y
41CONFIG_PPC_OF=y
42CONFIG_OF=y
43# CONFIG_PPC_UDBG_16550 is not set
44# CONFIG_GENERIC_TBSYNC is not set
45CONFIG_AUDIT_ARCH=y
46CONFIG_GENERIC_BUG=y
47# CONFIG_DEFAULT_UIMAGE is not set
48CONFIG_PPC_DCR_NATIVE=y
49# CONFIG_PPC_DCR_MMIO is not set
50CONFIG_PPC_DCR=y
51CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
52
53#
54# General setup
55#
56CONFIG_EXPERIMENTAL=y
57CONFIG_BROKEN_ON_SMP=y
58CONFIG_INIT_ENV_ARG_LIMIT=32
59CONFIG_LOCALVERSION=""
60CONFIG_LOCALVERSION_AUTO=y
61CONFIG_SWAP=y
62CONFIG_SYSVIPC=y
63CONFIG_SYSVIPC_SYSCTL=y
64CONFIG_POSIX_MQUEUE=y
65# CONFIG_BSD_PROCESS_ACCT is not set
66# CONFIG_TASKSTATS is not set
67# CONFIG_USER_NS is not set
68# CONFIG_AUDIT is not set
69# CONFIG_IKCONFIG is not set
70CONFIG_LOG_BUF_SHIFT=14
71CONFIG_SYSFS_DEPRECATED=y
72# CONFIG_RELAY is not set
73CONFIG_BLK_DEV_INITRD=y
74CONFIG_INITRAMFS_SOURCE=""
75# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
76CONFIG_SYSCTL=y
77CONFIG_EMBEDDED=y
78CONFIG_SYSCTL_SYSCALL=y
79CONFIG_KALLSYMS=y
80CONFIG_KALLSYMS_ALL=y
81CONFIG_KALLSYMS_EXTRA_PASS=y
82CONFIG_HOTPLUG=y
83CONFIG_PRINTK=y
84CONFIG_BUG=y
85CONFIG_ELF_CORE=y
86CONFIG_BASE_FULL=y
87CONFIG_FUTEX=y
88CONFIG_ANON_INODES=y
89CONFIG_EPOLL=y
90CONFIG_SIGNALFD=y
91CONFIG_EVENTFD=y
92CONFIG_SHMEM=y
93CONFIG_VM_EVENT_COUNTERS=y
94CONFIG_SLAB=y
95# CONFIG_SLUB is not set
96# CONFIG_SLOB is not set
97CONFIG_RT_MUTEXES=y
98# CONFIG_TINY_SHMEM is not set
99CONFIG_BASE_SMALL=0
100CONFIG_MODULES=y
101CONFIG_MODULE_UNLOAD=y
102# CONFIG_MODULE_FORCE_UNLOAD is not set
103# CONFIG_MODVERSIONS is not set
104# CONFIG_MODULE_SRCVERSION_ALL is not set
105CONFIG_KMOD=y
106CONFIG_BLOCK=y
107CONFIG_LBD=y
108# CONFIG_BLK_DEV_IO_TRACE is not set
109# CONFIG_LSF is not set
110# CONFIG_BLK_DEV_BSG is not set
111
112#
113# IO Schedulers
114#
115CONFIG_IOSCHED_NOOP=y
116CONFIG_IOSCHED_AS=y
117CONFIG_IOSCHED_DEADLINE=y
118CONFIG_IOSCHED_CFQ=y
119CONFIG_DEFAULT_AS=y
120# CONFIG_DEFAULT_DEADLINE is not set
121# CONFIG_DEFAULT_CFQ is not set
122# CONFIG_DEFAULT_NOOP is not set
123CONFIG_DEFAULT_IOSCHED="anticipatory"
124
125#
126# Platform support
127#
128# CONFIG_PPC_MPC52xx is not set
129# CONFIG_PPC_MPC5200 is not set
130# CONFIG_PPC_CELL is not set
131# CONFIG_PPC_CELL_NATIVE is not set
132# CONFIG_PQ2ADS is not set
133CONFIG_KILAUEA=y
134# CONFIG_WALNUT is not set
135# CONFIG_XILINX_VIRTEX_GENERIC_BOARD is not set
136# CONFIG_MPIC is not set
137# CONFIG_MPIC_WEIRD is not set
138# CONFIG_PPC_I8259 is not set
139# CONFIG_PPC_RTAS is not set
140# CONFIG_MMIO_NVRAM is not set
141# CONFIG_PPC_MPC106 is not set
142# CONFIG_PPC_970_NAP is not set
143# CONFIG_PPC_INDIRECT_IO is not set
144# CONFIG_GENERIC_IOMAP is not set
145# CONFIG_CPU_FREQ is not set
146# CONFIG_CPM2 is not set
147# CONFIG_FSL_ULI1575 is not set
148
149#
150# Kernel options
151#
152# CONFIG_HIGHMEM is not set
153# CONFIG_TICK_ONESHOT is not set
154# CONFIG_NO_HZ is not set
155# CONFIG_HIGH_RES_TIMERS is not set
156# CONFIG_HZ_100 is not set
157CONFIG_HZ_250=y
158# CONFIG_HZ_300 is not set
159# CONFIG_HZ_1000 is not set
160CONFIG_HZ=250
161CONFIG_PREEMPT_NONE=y
162# CONFIG_PREEMPT_VOLUNTARY is not set
163# CONFIG_PREEMPT is not set
164CONFIG_BINFMT_ELF=y
165# CONFIG_BINFMT_MISC is not set
166# CONFIG_MATH_EMULATION is not set
167CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
168CONFIG_ARCH_FLATMEM_ENABLE=y
169CONFIG_ARCH_POPULATES_NODE_MAP=y
170CONFIG_SELECT_MEMORY_MODEL=y
171CONFIG_FLATMEM_MANUAL=y
172# CONFIG_DISCONTIGMEM_MANUAL is not set
173# CONFIG_SPARSEMEM_MANUAL is not set
174CONFIG_FLATMEM=y
175CONFIG_FLAT_NODE_MEM_MAP=y
176# CONFIG_SPARSEMEM_STATIC is not set
177CONFIG_SPLIT_PTLOCK_CPUS=4
178# CONFIG_RESOURCES_64BIT is not set
179CONFIG_ZONE_DMA_FLAG=1
180CONFIG_BOUNCE=y
181CONFIG_VIRT_TO_BUS=y
182CONFIG_PROC_DEVICETREE=y
183# CONFIG_CMDLINE_BOOL is not set
184# CONFIG_PM is not set
185CONFIG_SUSPEND_UP_POSSIBLE=y
186CONFIG_HIBERNATION_UP_POSSIBLE=y
187CONFIG_SECCOMP=y
188CONFIG_WANT_DEVICE_TREE=y
189CONFIG_DEVICE_TREE="kilauea.dts"
190CONFIG_ISA_DMA_API=y
191
192#
193# Bus options
194#
195CONFIG_ZONE_DMA=y
196# CONFIG_PCI is not set
197# CONFIG_PCI_DOMAINS is not set
198# CONFIG_PCI_SYSCALL is not set
199# CONFIG_ARCH_SUPPORTS_MSI is not set
200
201#
202# PCCARD (PCMCIA/CardBus) support
203#
204# CONFIG_PCCARD is not set
205
206#
207# Advanced setup
208#
209# CONFIG_ADVANCED_OPTIONS is not set
210
211#
212# Default settings for advanced configuration options are used
213#
214CONFIG_HIGHMEM_START=0xfe000000
215CONFIG_LOWMEM_SIZE=0x30000000
216CONFIG_KERNEL_START=0xc0000000
217CONFIG_TASK_SIZE=0x80000000
218CONFIG_CONSISTENT_START=0xff100000
219CONFIG_CONSISTENT_SIZE=0x00200000
220CONFIG_BOOT_LOAD=0x00400000
221
222#
223# Networking
224#
225CONFIG_NET=y
226
227#
228# Networking options
229#
230CONFIG_PACKET=y
231# CONFIG_PACKET_MMAP is not set
232CONFIG_UNIX=y
233# CONFIG_NET_KEY is not set
234CONFIG_INET=y
235# CONFIG_IP_MULTICAST is not set
236# CONFIG_IP_ADVANCED_ROUTER is not set
237CONFIG_IP_FIB_HASH=y
238CONFIG_IP_PNP=y
239CONFIG_IP_PNP_DHCP=y
240CONFIG_IP_PNP_BOOTP=y
241# CONFIG_IP_PNP_RARP is not set
242# CONFIG_NET_IPIP is not set
243# CONFIG_NET_IPGRE is not set
244# CONFIG_ARPD is not set
245# CONFIG_SYN_COOKIES is not set
246# CONFIG_INET_AH is not set
247# CONFIG_INET_ESP is not set
248# CONFIG_INET_IPCOMP is not set
249# CONFIG_INET_XFRM_TUNNEL is not set
250# CONFIG_INET_TUNNEL is not set
251# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
252# CONFIG_INET_XFRM_MODE_TUNNEL is not set
253# CONFIG_INET_XFRM_MODE_BEET is not set
254CONFIG_INET_DIAG=y
255CONFIG_INET_TCP_DIAG=y
256# CONFIG_TCP_CONG_ADVANCED is not set
257CONFIG_TCP_CONG_CUBIC=y
258CONFIG_DEFAULT_TCP_CONG="cubic"
259# CONFIG_TCP_MD5SIG is not set
260# CONFIG_IPV6 is not set
261# CONFIG_INET6_XFRM_TUNNEL is not set
262# CONFIG_INET6_TUNNEL is not set
263# CONFIG_NETWORK_SECMARK is not set
264# CONFIG_NETFILTER is not set
265# CONFIG_IP_DCCP is not set
266# CONFIG_IP_SCTP is not set
267# CONFIG_TIPC is not set
268# CONFIG_ATM is not set
269# CONFIG_BRIDGE is not set
270# CONFIG_VLAN_8021Q is not set
271# CONFIG_DECNET is not set
272# CONFIG_LLC2 is not set
273# CONFIG_IPX is not set
274# CONFIG_ATALK is not set
275# CONFIG_X25 is not set
276# CONFIG_LAPB is not set
277# CONFIG_ECONET is not set
278# CONFIG_WAN_ROUTER is not set
279
280#
281# QoS and/or fair queueing
282#
283# CONFIG_NET_SCHED is not set
284
285#
286# Network testing
287#
288# CONFIG_NET_PKTGEN is not set
289# CONFIG_HAMRADIO is not set
290# CONFIG_IRDA is not set
291# CONFIG_BT is not set
292# CONFIG_AF_RXRPC is not set
293
294#
295# Wireless
296#
297# CONFIG_CFG80211 is not set
298# CONFIG_WIRELESS_EXT is not set
299# CONFIG_MAC80211 is not set
300# CONFIG_IEEE80211 is not set
301# CONFIG_RFKILL is not set
302# CONFIG_NET_9P is not set
303
304#
305# Device Drivers
306#
307
308#
309# Generic Driver Options
310#
311CONFIG_STANDALONE=y
312CONFIG_PREVENT_FIRMWARE_BUILD=y
313CONFIG_FW_LOADER=y
314# CONFIG_DEBUG_DRIVER is not set
315# CONFIG_DEBUG_DEVRES is not set
316# CONFIG_SYS_HYPERVISOR is not set
317CONFIG_CONNECTOR=y
318CONFIG_PROC_EVENTS=y
319CONFIG_MTD=y
320# CONFIG_MTD_DEBUG is not set
321# CONFIG_MTD_CONCAT is not set
322CONFIG_MTD_PARTITIONS=y
323# CONFIG_MTD_REDBOOT_PARTS is not set
324CONFIG_MTD_CMDLINE_PARTS=y
325
326#
327# User Modules And Translation Layers
328#
329CONFIG_MTD_CHAR=y
330CONFIG_MTD_BLKDEVS=m
331CONFIG_MTD_BLOCK=m
332# CONFIG_MTD_BLOCK_RO is not set
333# CONFIG_FTL is not set
334# CONFIG_NFTL is not set
335# CONFIG_INFTL is not set
336# CONFIG_RFD_FTL is not set
337# CONFIG_SSFDC is not set
338
339#
340# RAM/ROM/Flash chip drivers
341#
342CONFIG_MTD_CFI=y
343CONFIG_MTD_JEDECPROBE=y
344CONFIG_MTD_GEN_PROBE=y
345# CONFIG_MTD_CFI_ADV_OPTIONS is not set
346CONFIG_MTD_MAP_BANK_WIDTH_1=y
347CONFIG_MTD_MAP_BANK_WIDTH_2=y
348CONFIG_MTD_MAP_BANK_WIDTH_4=y
349# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
350# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
351# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
352CONFIG_MTD_CFI_I1=y
353CONFIG_MTD_CFI_I2=y
354# CONFIG_MTD_CFI_I4 is not set
355# CONFIG_MTD_CFI_I8 is not set
356# CONFIG_MTD_CFI_INTELEXT is not set
357CONFIG_MTD_CFI_AMDSTD=y
358# CONFIG_MTD_CFI_STAA is not set
359CONFIG_MTD_CFI_UTIL=y
360# CONFIG_MTD_RAM is not set
361# CONFIG_MTD_ROM is not set
362# CONFIG_MTD_ABSENT is not set
363
364#
365# Mapping drivers for chip access
366#
367# CONFIG_MTD_COMPLEX_MAPPINGS is not set
368# CONFIG_MTD_PHYSMAP is not set
369CONFIG_MTD_PHYSMAP_OF=y
370# CONFIG_MTD_PLATRAM is not set
371
372#
373# Self-contained MTD device drivers
374#
375# CONFIG_MTD_SLRAM is not set
376# CONFIG_MTD_PHRAM is not set
377# CONFIG_MTD_MTDRAM is not set
378# CONFIG_MTD_BLOCK2MTD is not set
379
380#
381# Disk-On-Chip Device Drivers
382#
383# CONFIG_MTD_DOC2000 is not set
384# CONFIG_MTD_DOC2001 is not set
385# CONFIG_MTD_DOC2001PLUS is not set
386# CONFIG_MTD_NAND is not set
387# CONFIG_MTD_ONENAND is not set
388
389#
390# UBI - Unsorted block images
391#
392# CONFIG_MTD_UBI is not set
393CONFIG_OF_DEVICE=y
394# CONFIG_PARPORT is not set
395CONFIG_BLK_DEV=y
396# CONFIG_BLK_DEV_FD is not set
397# CONFIG_BLK_DEV_COW_COMMON is not set
398# CONFIG_BLK_DEV_LOOP is not set
399# CONFIG_BLK_DEV_NBD is not set
400CONFIG_BLK_DEV_RAM=y
401CONFIG_BLK_DEV_RAM_COUNT=16
402CONFIG_BLK_DEV_RAM_SIZE=35000
403CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
404# CONFIG_CDROM_PKTCDVD is not set
405# CONFIG_ATA_OVER_ETH is not set
406# CONFIG_XILINX_SYSACE is not set
407# CONFIG_MISC_DEVICES is not set
408# CONFIG_IDE is not set
409
410#
411# SCSI device support
412#
413# CONFIG_RAID_ATTRS is not set
414# CONFIG_SCSI is not set
415# CONFIG_SCSI_DMA is not set
416# CONFIG_SCSI_NETLINK is not set
417# CONFIG_ATA is not set
418# CONFIG_MD is not set
419# CONFIG_MACINTOSH_DRIVERS is not set
420CONFIG_NETDEVICES=y
421# CONFIG_NETDEVICES_MULTIQUEUE is not set
422# CONFIG_DUMMY is not set
423# CONFIG_BONDING is not set
424# CONFIG_MACVLAN is not set
425# CONFIG_EQUALIZER is not set
426# CONFIG_TUN is not set
427# CONFIG_NET_ETHERNET is not set
428# CONFIG_NETDEV_1000 is not set
429# CONFIG_NETDEV_10000 is not set
430
431#
432# Wireless LAN
433#
434# CONFIG_WLAN_PRE80211 is not set
435# CONFIG_WLAN_80211 is not set
436# CONFIG_WAN is not set
437# CONFIG_PPP is not set
438# CONFIG_SLIP is not set
439# CONFIG_SHAPER is not set
440# CONFIG_NETCONSOLE is not set
441# CONFIG_NETPOLL is not set
442# CONFIG_NET_POLL_CONTROLLER is not set
443# CONFIG_ISDN is not set
444# CONFIG_PHONE is not set
445
446#
447# Input device support
448#
449# CONFIG_INPUT is not set
450
451#
452# Hardware I/O ports
453#
454# CONFIG_SERIO is not set
455# CONFIG_GAMEPORT is not set
456
457#
458# Character devices
459#
460# CONFIG_VT is not set
461# CONFIG_SERIAL_NONSTANDARD is not set
462
463#
464# Serial drivers
465#
466CONFIG_SERIAL_8250=y
467CONFIG_SERIAL_8250_CONSOLE=y
468CONFIG_SERIAL_8250_NR_UARTS=4
469CONFIG_SERIAL_8250_RUNTIME_UARTS=4
470CONFIG_SERIAL_8250_EXTENDED=y
471# CONFIG_SERIAL_8250_MANY_PORTS is not set
472CONFIG_SERIAL_8250_SHARE_IRQ=y
473# CONFIG_SERIAL_8250_DETECT_IRQ is not set
474# CONFIG_SERIAL_8250_RSA is not set
475
476#
477# Non-8250 serial port support
478#
479# CONFIG_SERIAL_UARTLITE is not set
480CONFIG_SERIAL_CORE=y
481CONFIG_SERIAL_CORE_CONSOLE=y
482CONFIG_SERIAL_OF_PLATFORM=y
483CONFIG_UNIX98_PTYS=y
484CONFIG_LEGACY_PTYS=y
485CONFIG_LEGACY_PTY_COUNT=256
486# CONFIG_IPMI_HANDLER is not set
487# CONFIG_WATCHDOG is not set
488# CONFIG_HW_RANDOM is not set
489# CONFIG_NVRAM is not set
490# CONFIG_GEN_RTC is not set
491# CONFIG_R3964 is not set
492# CONFIG_RAW_DRIVER is not set
493# CONFIG_TCG_TPM is not set
494# CONFIG_I2C is not set
495
496#
497# SPI support
498#
499# CONFIG_SPI is not set
500# CONFIG_SPI_MASTER is not set
501# CONFIG_W1 is not set
502# CONFIG_POWER_SUPPLY is not set
503# CONFIG_HWMON is not set
504
505#
506# Multifunction device drivers
507#
508# CONFIG_MFD_SM501 is not set
509
510#
511# Multimedia devices
512#
513# CONFIG_VIDEO_DEV is not set
514# CONFIG_DVB_CORE is not set
515# CONFIG_DAB is not set
516
517#
518# Graphics support
519#
520# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
521
522#
523# Display device support
524#
525# CONFIG_DISPLAY_SUPPORT is not set
526# CONFIG_VGASTATE is not set
527# CONFIG_VIDEO_OUTPUT_CONTROL is not set
528# CONFIG_FB is not set
529# CONFIG_FB_IBM_GXT4500 is not set
530
531#
532# Sound
533#
534# CONFIG_SOUND is not set
535# CONFIG_USB_SUPPORT is not set
536# CONFIG_MMC is not set
537# CONFIG_NEW_LEDS is not set
538# CONFIG_EDAC is not set
539# CONFIG_RTC_CLASS is not set
540
541#
542# DMA Engine support
543#
544# CONFIG_DMA_ENGINE is not set
545
546#
547# DMA Clients
548#
549
550#
551# DMA Devices
552#
553
554#
555# Userspace I/O
556#
557# CONFIG_UIO is not set
558
559#
560# File systems
561#
562CONFIG_EXT2_FS=y
563# CONFIG_EXT2_FS_XATTR is not set
564# CONFIG_EXT2_FS_XIP is not set
565# CONFIG_EXT3_FS is not set
566# CONFIG_EXT4DEV_FS is not set
567# CONFIG_REISERFS_FS is not set
568# CONFIG_JFS_FS is not set
569# CONFIG_FS_POSIX_ACL is not set
570# CONFIG_XFS_FS is not set
571# CONFIG_GFS2_FS is not set
572# CONFIG_OCFS2_FS is not set
573# CONFIG_MINIX_FS is not set
574# CONFIG_ROMFS_FS is not set
575CONFIG_INOTIFY=y
576CONFIG_INOTIFY_USER=y
577# CONFIG_QUOTA is not set
578CONFIG_DNOTIFY=y
579# CONFIG_AUTOFS_FS is not set
580# CONFIG_AUTOFS4_FS is not set
581# CONFIG_FUSE_FS is not set
582
583#
584# CD-ROM/DVD Filesystems
585#
586# CONFIG_ISO9660_FS is not set
587# CONFIG_UDF_FS is not set
588
589#
590# DOS/FAT/NT Filesystems
591#
592# CONFIG_MSDOS_FS is not set
593# CONFIG_VFAT_FS is not set
594# CONFIG_NTFS_FS is not set
595
596#
597# Pseudo filesystems
598#
599CONFIG_PROC_FS=y
600CONFIG_PROC_KCORE=y
601CONFIG_PROC_SYSCTL=y
602CONFIG_SYSFS=y
603CONFIG_TMPFS=y
604# CONFIG_TMPFS_POSIX_ACL is not set
605# CONFIG_HUGETLB_PAGE is not set
606CONFIG_RAMFS=y
607# CONFIG_CONFIGFS_FS is not set
608
609#
610# Miscellaneous filesystems
611#
612# CONFIG_ADFS_FS is not set
613# CONFIG_AFFS_FS is not set
614# CONFIG_HFS_FS is not set
615# CONFIG_HFSPLUS_FS is not set
616# CONFIG_BEFS_FS is not set
617# CONFIG_BFS_FS is not set
618# CONFIG_EFS_FS is not set
619# CONFIG_JFFS2_FS is not set
620CONFIG_CRAMFS=y
621# CONFIG_VXFS_FS is not set
622# CONFIG_HPFS_FS is not set
623# CONFIG_QNX4FS_FS is not set
624# CONFIG_SYSV_FS is not set
625# CONFIG_UFS_FS is not set
626
627#
628# Network File Systems
629#
630CONFIG_NFS_FS=y
631CONFIG_NFS_V3=y
632# CONFIG_NFS_V3_ACL is not set
633# CONFIG_NFS_V4 is not set
634# CONFIG_NFS_DIRECTIO is not set
635# CONFIG_NFSD is not set
636CONFIG_ROOT_NFS=y
637CONFIG_LOCKD=y
638CONFIG_LOCKD_V4=y
639CONFIG_NFS_COMMON=y
640CONFIG_SUNRPC=y
641# CONFIG_SUNRPC_BIND34 is not set
642# CONFIG_RPCSEC_GSS_KRB5 is not set
643# CONFIG_RPCSEC_GSS_SPKM3 is not set
644# CONFIG_SMB_FS is not set
645# CONFIG_CIFS is not set
646# CONFIG_NCP_FS is not set
647# CONFIG_CODA_FS is not set
648# CONFIG_AFS_FS is not set
649
650#
651# Partition Types
652#
653# CONFIG_PARTITION_ADVANCED is not set
654CONFIG_MSDOS_PARTITION=y
655
656#
657# Native Language Support
658#
659# CONFIG_NLS is not set
660
661#
662# Distributed Lock Manager
663#
664# CONFIG_DLM is not set
665# CONFIG_UCC_SLOW is not set
666
667#
668# Library routines
669#
670CONFIG_BITREVERSE=y
671# CONFIG_CRC_CCITT is not set
672# CONFIG_CRC16 is not set
673# CONFIG_CRC_ITU_T is not set
674CONFIG_CRC32=y
675# CONFIG_CRC7 is not set
676# CONFIG_LIBCRC32C is not set
677CONFIG_ZLIB_INFLATE=y
678CONFIG_PLIST=y
679CONFIG_HAS_IOMEM=y
680CONFIG_HAS_IOPORT=y
681CONFIG_HAS_DMA=y
682
683#
684# Instrumentation Support
685#
686# CONFIG_PROFILING is not set
687
688#
689# Kernel hacking
690#
691# CONFIG_PRINTK_TIME is not set
692CONFIG_ENABLE_MUST_CHECK=y
693CONFIG_MAGIC_SYSRQ=y
694# CONFIG_UNUSED_SYMBOLS is not set
695# CONFIG_DEBUG_FS is not set
696# CONFIG_HEADERS_CHECK is not set
697CONFIG_DEBUG_KERNEL=y
698# CONFIG_DEBUG_SHIRQ is not set
699CONFIG_DETECT_SOFTLOCKUP=y
700CONFIG_SCHED_DEBUG=y
701# CONFIG_SCHEDSTATS is not set
702# CONFIG_TIMER_STATS is not set
703# CONFIG_DEBUG_SLAB is not set
704# CONFIG_DEBUG_RT_MUTEXES is not set
705# CONFIG_RT_MUTEX_TESTER is not set
706# CONFIG_DEBUG_SPINLOCK is not set
707# CONFIG_DEBUG_MUTEXES is not set
708# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
709# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
710# CONFIG_DEBUG_KOBJECT is not set
711CONFIG_DEBUG_BUGVERBOSE=y
712# CONFIG_DEBUG_INFO is not set
713# CONFIG_DEBUG_VM is not set
714# CONFIG_DEBUG_LIST is not set
715CONFIG_FORCED_INLINING=y
716# CONFIG_RCU_TORTURE_TEST is not set
717# CONFIG_FAULT_INJECTION is not set
718# CONFIG_DEBUG_STACKOVERFLOW is not set
719# CONFIG_DEBUG_STACK_USAGE is not set
720# CONFIG_DEBUG_PAGEALLOC is not set
721# CONFIG_DEBUGGER is not set
722# CONFIG_BDI_SWITCH is not set
723# CONFIG_PPC_EARLY_DEBUG is not set
724
725#
726# Security options
727#
728# CONFIG_KEYS is not set
729# CONFIG_SECURITY is not set
730CONFIG_CRYPTO=y
731CONFIG_CRYPTO_ALGAPI=y
732CONFIG_CRYPTO_BLKCIPHER=y
733CONFIG_CRYPTO_MANAGER=y
734# CONFIG_CRYPTO_HMAC is not set
735# CONFIG_CRYPTO_XCBC is not set
736# CONFIG_CRYPTO_NULL is not set
737# CONFIG_CRYPTO_MD4 is not set
738CONFIG_CRYPTO_MD5=y
739# CONFIG_CRYPTO_SHA1 is not set
740# CONFIG_CRYPTO_SHA256 is not set
741# CONFIG_CRYPTO_SHA512 is not set
742# CONFIG_CRYPTO_WP512 is not set
743# CONFIG_CRYPTO_TGR192 is not set
744# CONFIG_CRYPTO_GF128MUL is not set
745CONFIG_CRYPTO_ECB=y
746CONFIG_CRYPTO_CBC=y
747CONFIG_CRYPTO_PCBC=y
748# CONFIG_CRYPTO_LRW is not set
749# CONFIG_CRYPTO_CRYPTD is not set
750CONFIG_CRYPTO_DES=y
751# CONFIG_CRYPTO_FCRYPT is not set
752# CONFIG_CRYPTO_BLOWFISH is not set
753# CONFIG_CRYPTO_TWOFISH is not set
754# CONFIG_CRYPTO_SERPENT is not set
755# CONFIG_CRYPTO_AES is not set
756# CONFIG_CRYPTO_CAST5 is not set
757# CONFIG_CRYPTO_CAST6 is not set
758# CONFIG_CRYPTO_TEA is not set
759# CONFIG_CRYPTO_ARC4 is not set
760# CONFIG_CRYPTO_KHAZAD is not set
761# CONFIG_CRYPTO_ANUBIS is not set
762# CONFIG_CRYPTO_DEFLATE is not set
763# CONFIG_CRYPTO_MICHAEL_MIC is not set
764# CONFIG_CRYPTO_CRC32C is not set
765# CONFIG_CRYPTO_CAMELLIA is not set
766# CONFIG_CRYPTO_TEST is not set
767CONFIG_CRYPTO_HW=y
768# CONFIG_PPC_CLOCK is not set
diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c
index 8662cf053fa0..d3fb7d0c6c1c 100644
--- a/arch/powerpc/kernel/cputable.c
+++ b/arch/powerpc/kernel/cputable.c
@@ -1087,6 +1087,17 @@ static struct cpu_spec __initdata cpu_specs[] = {
1087 .dcache_bsize = 32, 1087 .dcache_bsize = 32,
1088 .platform = "ppc405", 1088 .platform = "ppc405",
1089 }, 1089 },
1090 { /* 405EX */
1091 .pvr_mask = 0xffff0000,
1092 .pvr_value = 0x12910000,
1093 .cpu_name = "405EX",
1094 .cpu_features = CPU_FTRS_40X,
1095 .cpu_user_features = PPC_FEATURE_32 |
1096 PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
1097 .icache_bsize = 32,
1098 .dcache_bsize = 32,
1099 .platform = "ppc405",
1100 },
1090 1101
1091#endif /* CONFIG_40x */ 1102#endif /* CONFIG_40x */
1092#ifdef CONFIG_44x 1103#ifdef CONFIG_44x
diff --git a/arch/powerpc/platforms/40x/Kconfig b/arch/powerpc/platforms/40x/Kconfig
index a0a50b16b8a9..47b3b0a3864a 100644
--- a/arch/powerpc/platforms/40x/Kconfig
+++ b/arch/powerpc/platforms/40x/Kconfig
@@ -29,6 +29,13 @@
29# help 29# help
30# This option enables support for the extra features of the EP405PC board. 30# This option enables support for the extra features of the EP405PC board.
31 31
32config KILAUEA
33 bool "Kilauea"
34 depends on 40x
35 default n
36 help
37 This option enables support for the AMCC PPC405EX evaluation board.
38
32#config REDWOOD_5 39#config REDWOOD_5
33# bool "Redwood-5" 40# bool "Redwood-5"
34# depends on 40x 41# depends on 40x
diff --git a/arch/powerpc/platforms/40x/Makefile b/arch/powerpc/platforms/40x/Makefile
index 0a3cfe99a7ed..51dadeee6fc6 100644
--- a/arch/powerpc/platforms/40x/Makefile
+++ b/arch/powerpc/platforms/40x/Makefile
@@ -1,2 +1,3 @@
1obj-$(CONFIG_WALNUT) += walnut.o 1obj-$(CONFIG_KILAUEA) += kilauea.o
2obj-$(CONFIG_XILINX_VIRTEX_GENERIC_BOARD) += virtex.o 2obj-$(CONFIG_WALNUT) += walnut.o
3obj-$(CONFIG_XILINX_VIRTEX_GENERIC_BOARD) += virtex.o
diff --git a/arch/powerpc/platforms/40x/kilauea.c b/arch/powerpc/platforms/40x/kilauea.c
new file mode 100644
index 000000000000..1bffdbdd21b1
--- /dev/null
+++ b/arch/powerpc/platforms/40x/kilauea.c
@@ -0,0 +1,58 @@
1/*
2 * Kilauea board specific routines
3 *
4 * Copyright 2007 DENX Software Engineering, Stefan Roese <sr@denx.de>
5 *
6 * Based on the Walnut code by
7 * Josh Boyer <jwboyer@linux.vnet.ibm.com>
8 * Copyright 2007 IBM Corporation
9 *
10 * This program is free software; you can redistribute it and/or modify it
11 * under the terms of the GNU General Public License as published by the
12 * Free Software Foundation; either version 2 of the License, or (at your
13 * option) any later version.
14 */
15#include <linux/init.h>
16#include <linux/of_platform.h>
17#include <asm/machdep.h>
18#include <asm/prom.h>
19#include <asm/udbg.h>
20#include <asm/time.h>
21#include <asm/uic.h>
22
23static struct of_device_id kilauea_of_bus[] = {
24 { .compatible = "ibm,plb4", },
25 { .compatible = "ibm,opb", },
26 { .compatible = "ibm,ebc", },
27 {},
28};
29
30static int __init kilauea_device_probe(void)
31{
32 if (!machine_is(kilauea))
33 return 0;
34
35 of_platform_bus_probe(NULL, kilauea_of_bus, NULL);
36
37 return 0;
38}
39device_initcall(kilauea_device_probe);
40
41static int __init kilauea_probe(void)
42{
43 unsigned long root = of_get_flat_dt_root();
44
45 if (!of_flat_dt_is_compatible(root, "amcc,kilauea"))
46 return 0;
47
48 return 1;
49}
50
51define_machine(kilauea) {
52 .name = "Kilauea",
53 .probe = kilauea_probe,
54 .progress = udbg_progress,
55 .init_IRQ = uic_init_tree,
56 .get_irq = uic_get_irq,
57 .calibrate_decr = generic_calibrate_decr,
58};
diff --git a/arch/powerpc/platforms/52xx/efika.c b/arch/powerpc/platforms/52xx/efika.c
index 0b1e60a010ba..a0da70c8b502 100644
--- a/arch/powerpc/platforms/52xx/efika.c
+++ b/arch/powerpc/platforms/52xx/efika.c
@@ -9,33 +9,16 @@
9 * kind, whether express or implied. 9 * kind, whether express or implied.
10 */ 10 */
11 11
12#include <linux/errno.h>
13#include <linux/kernel.h>
14#include <linux/slab.h>
15#include <linux/reboot.h>
16#include <linux/init.h> 12#include <linux/init.h>
17#include <linux/utsrelease.h> 13#include <linux/utsrelease.h>
18#include <linux/seq_file.h>
19#include <linux/string.h>
20#include <linux/root_dev.h>
21#include <linux/initrd.h>
22#include <linux/timer.h>
23#include <linux/pci.h> 14#include <linux/pci.h>
24 15#include <linux/of.h>
25#include <asm/io.h>
26#include <asm/irq.h>
27#include <asm/sections.h>
28#include <asm/pci-bridge.h>
29#include <asm/pgtable.h>
30#include <asm/prom.h> 16#include <asm/prom.h>
31#include <asm/time.h> 17#include <asm/time.h>
32#include <asm/machdep.h> 18#include <asm/machdep.h>
33#include <asm/rtas.h> 19#include <asm/rtas.h>
34#include <asm/of_device.h>
35#include <asm/of_platform.h>
36#include <asm/mpc52xx.h> 20#include <asm/mpc52xx.h>
37 21
38
39#define EFIKA_PLATFORM_NAME "Efika" 22#define EFIKA_PLATFORM_NAME "Efika"
40 23
41 24
diff --git a/arch/powerpc/platforms/52xx/lite5200.c b/arch/powerpc/platforms/52xx/lite5200.c
index e11d27f9c4f0..0caa3d955c3b 100644
--- a/arch/powerpc/platforms/52xx/lite5200.c
+++ b/arch/powerpc/platforms/52xx/lite5200.c
@@ -15,32 +15,13 @@
15 15
16#undef DEBUG 16#undef DEBUG
17 17
18#include <linux/stddef.h>
19#include <linux/kernel.h>
20#include <linux/init.h> 18#include <linux/init.h>
21#include <linux/errno.h>
22#include <linux/reboot.h>
23#include <linux/pci.h> 19#include <linux/pci.h>
24#include <linux/kdev_t.h> 20#include <linux/of.h>
25#include <linux/major.h>
26#include <linux/console.h>
27#include <linux/delay.h>
28#include <linux/seq_file.h>
29#include <linux/root_dev.h>
30#include <linux/initrd.h>
31
32#include <asm/system.h>
33#include <asm/atomic.h>
34#include <asm/time.h> 21#include <asm/time.h>
35#include <asm/io.h> 22#include <asm/io.h>
36#include <asm/machdep.h> 23#include <asm/machdep.h>
37#include <asm/ipic.h>
38#include <asm/irq.h>
39#include <asm/prom.h> 24#include <asm/prom.h>
40#include <asm/udbg.h>
41#include <sysdev/fsl_soc.h>
42#include <asm/of_platform.h>
43
44#include <asm/mpc52xx.h> 25#include <asm/mpc52xx.h>
45 26
46/* ************************************************************************ 27/* ************************************************************************
@@ -49,19 +30,56 @@
49 * 30 *
50 */ 31 */
51 32
33/*
34 * Fix clock configuration.
35 *
36 * Firmware is supposed to be responsible for this. If you are creating a
37 * new board port, do *NOT* duplicate this code. Fix your boot firmware
38 * to set it correctly in the first place
39 */
52static void __init 40static void __init
53lite5200_setup_cpu(void) 41lite5200_fix_clock_config(void)
42{
43 struct mpc52xx_cdm __iomem *cdm;
44
45 /* Map zones */
46 cdm = mpc52xx_find_and_map("mpc5200-cdm");
47 if (!cdm) {
48 printk(KERN_ERR "%s() failed; expect abnormal behaviour\n",
49 __FUNCTION__);
50 return;
51 }
52
53 /* Use internal 48 Mhz */
54 out_8(&cdm->ext_48mhz_en, 0x00);
55 out_8(&cdm->fd_enable, 0x01);
56 if (in_be32(&cdm->rstcfg) & 0x40) /* Assumes 33Mhz clock */
57 out_be16(&cdm->fd_counters, 0x0001);
58 else
59 out_be16(&cdm->fd_counters, 0x5555);
60
61 /* Unmap the regs */
62 iounmap(cdm);
63}
64
65/*
66 * Fix setting of port_config register.
67 *
68 * Firmware is supposed to be responsible for this. If you are creating a
69 * new board port, do *NOT* duplicate this code. Fix your boot firmware
70 * to set it correctly in the first place
71 */
72static void __init
73lite5200_fix_port_config(void)
54{ 74{
55 struct mpc52xx_gpio __iomem *gpio; 75 struct mpc52xx_gpio __iomem *gpio;
56 u32 port_config; 76 u32 port_config;
57 77
58 /* Map zones */
59 gpio = mpc52xx_find_and_map("mpc5200-gpio"); 78 gpio = mpc52xx_find_and_map("mpc5200-gpio");
60 if (!gpio) { 79 if (!gpio) {
61 printk(KERN_ERR __FILE__ ": " 80 printk(KERN_ERR "%s() failed. expect abnormal behavior\n",
62 "Error while mapping GPIO register for port config. " 81 __FUNCTION__);
63 "Expect some abnormal behavior\n"); 82 return;
64 goto error;
65 } 83 }
66 84
67 /* Set port config */ 85 /* Set port config */
@@ -80,7 +98,6 @@ lite5200_setup_cpu(void)
80 out_be32(&gpio->port_config, port_config); 98 out_be32(&gpio->port_config, port_config);
81 99
82 /* Unmap zone */ 100 /* Unmap zone */
83error:
84 iounmap(gpio); 101 iounmap(gpio);
85} 102}
86 103
@@ -119,9 +136,12 @@ static void __init lite5200_setup_arch(void)
119 if (ppc_md.progress) 136 if (ppc_md.progress)
120 ppc_md.progress("lite5200_setup_arch()", 0); 137 ppc_md.progress("lite5200_setup_arch()", 0);
121 138
122 /* CPU & Port mux setup */ 139 /* Fix things that firmware should have done. */
123 mpc52xx_setup_cpu(); /* Generic */ 140 lite5200_fix_clock_config();
124 lite5200_setup_cpu(); /* Platorm specific */ 141 lite5200_fix_port_config();
142
143 /* Some mpc5200 & mpc5200b related configuration */
144 mpc5200_setup_xlb_arbiter();
125 145
126#ifdef CONFIG_PM 146#ifdef CONFIG_PM
127 mpc52xx_suspend.board_suspend_prepare = lite5200_suspend_prepare; 147 mpc52xx_suspend.board_suspend_prepare = lite5200_suspend_prepare;
@@ -150,20 +170,6 @@ static void __init lite5200_setup_arch(void)
150 170
151} 171}
152 172
153static void lite5200_show_cpuinfo(struct seq_file *m)
154{
155 struct device_node* np = of_find_all_nodes(NULL);
156 const char *model = NULL;
157
158 if (np)
159 model = of_get_property(np, "model", NULL);
160
161 seq_printf(m, "vendor\t\t: Freescale Semiconductor\n");
162 seq_printf(m, "machine\t\t: %s\n", model ? model : "unknown");
163
164 of_node_put(np);
165}
166
167/* 173/*
168 * Called very early, MMU is off, device-tree isn't unflattened 174 * Called very early, MMU is off, device-tree isn't unflattened
169 */ 175 */
@@ -187,6 +193,5 @@ define_machine(lite5200) {
187 .init = mpc52xx_declare_of_platform_devices, 193 .init = mpc52xx_declare_of_platform_devices,
188 .init_IRQ = mpc52xx_init_irq, 194 .init_IRQ = mpc52xx_init_irq,
189 .get_irq = mpc52xx_get_irq, 195 .get_irq = mpc52xx_get_irq,
190 .show_cpuinfo = lite5200_show_cpuinfo,
191 .calibrate_decr = generic_calibrate_decr, 196 .calibrate_decr = generic_calibrate_decr,
192}; 197};
diff --git a/arch/powerpc/platforms/52xx/mpc52xx_common.c b/arch/powerpc/platforms/52xx/mpc52xx_common.c
index 2dd415ff55a9..3bc201e07e6b 100644
--- a/arch/powerpc/platforms/52xx/mpc52xx_common.c
+++ b/arch/powerpc/platforms/52xx/mpc52xx_common.c
@@ -13,10 +13,9 @@
13#undef DEBUG 13#undef DEBUG
14 14
15#include <linux/kernel.h> 15#include <linux/kernel.h>
16 16#include <linux/of_platform.h>
17#include <asm/io.h> 17#include <asm/io.h>
18#include <asm/prom.h> 18#include <asm/prom.h>
19#include <asm/of_platform.h>
20#include <asm/mpc52xx.h> 19#include <asm/mpc52xx.h>
21 20
22 21
@@ -76,44 +75,33 @@ mpc52xx_find_ipb_freq(struct device_node *node)
76EXPORT_SYMBOL(mpc52xx_find_ipb_freq); 75EXPORT_SYMBOL(mpc52xx_find_ipb_freq);
77 76
78 77
78/*
79 * Configure the XLB arbiter settings to match what Linux expects.
80 */
79void __init 81void __init
80mpc52xx_setup_cpu(void) 82mpc5200_setup_xlb_arbiter(void)
81{ 83{
82 struct mpc52xx_cdm __iomem *cdm;
83 struct mpc52xx_xlb __iomem *xlb; 84 struct mpc52xx_xlb __iomem *xlb;
84 85
85 /* Map zones */
86 cdm = mpc52xx_find_and_map("mpc5200-cdm");
87 xlb = mpc52xx_find_and_map("mpc5200-xlb"); 86 xlb = mpc52xx_find_and_map("mpc5200-xlb");
88 87 if (!xlb) {
89 if (!cdm || !xlb) {
90 printk(KERN_ERR __FILE__ ": " 88 printk(KERN_ERR __FILE__ ": "
91 "Error while mapping CDM/XLB during mpc52xx_setup_cpu. " 89 "Error mapping XLB in mpc52xx_setup_cpu(). "
92 "Expect some abnormal behavior\n"); 90 "Expect some abnormal behavior\n");
93 goto unmap_regs; 91 return;
94 } 92 }
95 93
96 /* Use internal 48 Mhz */
97 out_8(&cdm->ext_48mhz_en, 0x00);
98 out_8(&cdm->fd_enable, 0x01);
99 if (in_be32(&cdm->rstcfg) & 0x40) /* Assumes 33Mhz clock */
100 out_be16(&cdm->fd_counters, 0x0001);
101 else
102 out_be16(&cdm->fd_counters, 0x5555);
103
104 /* Configure the XLB Arbiter priorities */ 94 /* Configure the XLB Arbiter priorities */
105 out_be32(&xlb->master_pri_enable, 0xff); 95 out_be32(&xlb->master_pri_enable, 0xff);
106 out_be32(&xlb->master_priority, 0x11111111); 96 out_be32(&xlb->master_priority, 0x11111111);
107 97
108 /* Disable XLB pipelining */ 98 /* Disable XLB pipelining
109 /* (cfr errate 292. We could do this only just before ATA PIO 99 * (cfr errate 292. We could do this only just before ATA PIO
110 transaction and re-enable it afterwards ...) */ 100 * transaction and re-enable it afterwards ...)
101 */
111 out_be32(&xlb->config, in_be32(&xlb->config) | MPC52xx_XLB_CFG_PLDIS); 102 out_be32(&xlb->config, in_be32(&xlb->config) | MPC52xx_XLB_CFG_PLDIS);
112 103
113 /* Unmap zones */ 104 iounmap(xlb);
114unmap_regs:
115 if (cdm) iounmap(cdm);
116 if (xlb) iounmap(xlb);
117} 105}
118 106
119void __init 107void __init
diff --git a/arch/powerpc/platforms/52xx/mpc52xx_pic.c b/arch/powerpc/platforms/52xx/mpc52xx_pic.c
index 0f4ca8a2b777..61100f270c68 100644
--- a/arch/powerpc/platforms/52xx/mpc52xx_pic.c
+++ b/arch/powerpc/platforms/52xx/mpc52xx_pic.c
@@ -18,18 +18,9 @@
18 18
19#undef DEBUG 19#undef DEBUG
20 20
21#include <linux/stddef.h>
22#include <linux/init.h>
23#include <linux/sched.h>
24#include <linux/signal.h>
25#include <linux/delay.h>
26#include <linux/irq.h> 21#include <linux/irq.h>
27#include <linux/hardirq.h> 22#include <linux/of.h>
28
29#include <asm/io.h> 23#include <asm/io.h>
30#include <asm/processor.h>
31#include <asm/system.h>
32#include <asm/irq.h>
33#include <asm/prom.h> 24#include <asm/prom.h>
34#include <asm/mpc52xx.h> 25#include <asm/mpc52xx.h>
35#include "mpc52xx_pic.h" 26#include "mpc52xx_pic.h"
diff --git a/arch/powerpc/sysdev/Makefile b/arch/powerpc/sysdev/Makefile
index 52e93bca10ca..1a6f5641ebc8 100644
--- a/arch/powerpc/sysdev/Makefile
+++ b/arch/powerpc/sysdev/Makefile
@@ -6,7 +6,6 @@ mpic-msi-obj-$(CONFIG_PCI_MSI) += mpic_msi.o mpic_u3msi.o
6obj-$(CONFIG_MPIC) += mpic.o $(mpic-msi-obj-y) 6obj-$(CONFIG_MPIC) += mpic.o $(mpic-msi-obj-y)
7 7
8obj-$(CONFIG_PPC_MPC106) += grackle.o 8obj-$(CONFIG_PPC_MPC106) += grackle.o
9obj-$(CONFIG_PPC_DCR) += dcr.o
10obj-$(CONFIG_PPC_DCR_NATIVE) += dcr-low.o 9obj-$(CONFIG_PPC_DCR_NATIVE) += dcr-low.o
11obj-$(CONFIG_PPC_PMI) += pmi.o 10obj-$(CONFIG_PPC_PMI) += pmi.o
12obj-$(CONFIG_U3_DART) += dart_iommu.o 11obj-$(CONFIG_U3_DART) += dart_iommu.o
@@ -33,6 +32,7 @@ endif
33ifeq ($(ARCH),powerpc) 32ifeq ($(ARCH),powerpc)
34obj-$(CONFIG_CPM) += cpm_common.o 33obj-$(CONFIG_CPM) += cpm_common.o
35obj-$(CONFIG_CPM2) += cpm2_common.o cpm2_pic.o 34obj-$(CONFIG_CPM2) += cpm2_common.o cpm2_pic.o
35obj-$(CONFIG_PPC_DCR) += dcr.o
36obj-$(CONFIG_8xx) += mpc8xx_pic.o commproc.o 36obj-$(CONFIG_8xx) += mpc8xx_pic.o commproc.o
37obj-$(CONFIG_UCODE_PATCH) += micropatch.o 37obj-$(CONFIG_UCODE_PATCH) += micropatch.o
38endif 38endif
diff --git a/drivers/video/xilinxfb.c b/drivers/video/xilinxfb.c
index 4bc67ab56afa..dec602c23075 100644
--- a/drivers/video/xilinxfb.c
+++ b/drivers/video/xilinxfb.c
@@ -6,9 +6,12 @@
6 * Author: MontaVista Software, Inc. 6 * Author: MontaVista Software, Inc.
7 * source@mvista.com 7 * source@mvista.com
8 * 8 *
9 * 2002-2007 (c) MontaVista Software, Inc. This file is licensed under the 9 * 2002-2007 (c) MontaVista Software, Inc.
10 * terms of the GNU General Public License version 2. This program is licensed 10 * 2007 (c) Secret Lab Technologies, Ltd.
11 * "as is" without any warranty of any kind, whether express or implied. 11 *
12 * This file is licensed under the terms of the GNU General Public License
13 * version 2. This program is licensed "as is" without any warranty of any
14 * kind, whether express or implied.
12 */ 15 */
13 16
14/* 17/*
@@ -18,6 +21,7 @@
18 * Geert Uytterhoeven. 21 * Geert Uytterhoeven.
19 */ 22 */
20 23
24#include <linux/device.h>
21#include <linux/module.h> 25#include <linux/module.h>
22#include <linux/kernel.h> 26#include <linux/kernel.h>
23#include <linux/version.h> 27#include <linux/version.h>
@@ -28,7 +32,10 @@
28#include <linux/init.h> 32#include <linux/init.h>
29#include <linux/dma-mapping.h> 33#include <linux/dma-mapping.h>
30#include <linux/platform_device.h> 34#include <linux/platform_device.h>
31 35#if defined(CONFIG_OF)
36#include <linux/of_device.h>
37#include <linux/of_platform.h>
38#endif
32#include <asm/io.h> 39#include <asm/io.h>
33#include <linux/xilinxfb.h> 40#include <linux/xilinxfb.h>
34 41
@@ -111,7 +118,7 @@ struct xilinxfb_drvdata {
111 u32 regs_phys; /* phys. address of the control registers */ 118 u32 regs_phys; /* phys. address of the control registers */
112 u32 __iomem *regs; /* virt. address of the control registers */ 119 u32 __iomem *regs; /* virt. address of the control registers */
113 120
114 unsigned char __iomem *fb_virt; /* virt. address of the frame buffer */ 121 void *fb_virt; /* virt. address of the frame buffer */
115 dma_addr_t fb_phys; /* phys. address of the frame buffer */ 122 dma_addr_t fb_phys; /* phys. address of the frame buffer */
116 123
117 u32 reg_ctrl_default; 124 u32 reg_ctrl_default;
@@ -195,130 +202,120 @@ static struct fb_ops xilinxfb_ops =
195 .fb_imageblit = cfb_imageblit, 202 .fb_imageblit = cfb_imageblit,
196}; 203};
197 204
198/* === The device driver === */ 205/* ---------------------------------------------------------------------
206 * Bus independent setup/teardown
207 */
199 208
200static int 209static int xilinxfb_assign(struct device *dev, unsigned long physaddr,
201xilinxfb_drv_probe(struct device *dev) 210 int width_mm, int height_mm, int rotate)
202{ 211{
203 struct platform_device *pdev;
204 struct xilinxfb_platform_data *pdata;
205 struct xilinxfb_drvdata *drvdata; 212 struct xilinxfb_drvdata *drvdata;
206 struct resource *regs_res; 213 int rc;
207 int retval;
208
209 if (!dev)
210 return -EINVAL;
211
212 pdev = to_platform_device(dev);
213 pdata = pdev->dev.platform_data;
214 214
215 /* Allocate the driver data region */
215 drvdata = kzalloc(sizeof(*drvdata), GFP_KERNEL); 216 drvdata = kzalloc(sizeof(*drvdata), GFP_KERNEL);
216 if (!drvdata) { 217 if (!drvdata) {
217 printk(KERN_ERR "Couldn't allocate device private record\n"); 218 dev_err(dev, "Couldn't allocate device private record\n");
218 return -ENOMEM; 219 return -ENOMEM;
219 } 220 }
220 dev_set_drvdata(dev, drvdata); 221 dev_set_drvdata(dev, drvdata);
221 222
222 /* Map the control registers in */ 223 /* Map the control registers in */
223 regs_res = platform_get_resource(pdev, IORESOURCE_IO, 0); 224 if (!request_mem_region(physaddr, 8, DRIVER_NAME)) {
224 if (!regs_res || (regs_res->end - regs_res->start + 1 < 8)) { 225 dev_err(dev, "Couldn't lock memory region at 0x%08lX\n",
225 printk(KERN_ERR "Couldn't get registers resource\n"); 226 physaddr);
226 retval = -EFAULT; 227 rc = -ENODEV;
227 goto failed1; 228 goto err_region;
228 } 229 }
229 230 drvdata->regs_phys = physaddr;
230 if (!request_mem_region(regs_res->start, 8, DRIVER_NAME)) { 231 drvdata->regs = ioremap(physaddr, 8);
231 printk(KERN_ERR 232 if (!drvdata->regs) {
232 "Couldn't lock memory region at 0x%08X\n", 233 dev_err(dev, "Couldn't lock memory region at 0x%08lX\n",
233 regs_res->start); 234 physaddr);
234 retval = -EBUSY; 235 rc = -ENODEV;
235 goto failed1; 236 goto err_map;
236 } 237 }
237 drvdata->regs = (u32 __iomem*) ioremap(regs_res->start, 8);
238 drvdata->regs_phys = regs_res->start;
239 238
240 /* Allocate the framebuffer memory */ 239 /* Allocate the framebuffer memory */
241 drvdata->fb_virt = dma_alloc_coherent(dev, PAGE_ALIGN(FB_SIZE), 240 drvdata->fb_virt = dma_alloc_coherent(dev, PAGE_ALIGN(FB_SIZE),
242 &drvdata->fb_phys, GFP_KERNEL); 241 &drvdata->fb_phys, GFP_KERNEL);
243 if (!drvdata->fb_virt) { 242 if (!drvdata->fb_virt) {
244 printk(KERN_ERR "Could not allocate frame buffer memory\n"); 243 dev_err(dev, "Could not allocate frame buffer memory\n");
245 retval = -ENOMEM; 244 rc = -ENOMEM;
246 goto failed2; 245 goto err_fbmem;
247 } 246 }
248 247
249 /* Clear (turn to black) the framebuffer */ 248 /* Clear (turn to black) the framebuffer */
250 memset_io((void *) drvdata->fb_virt, 0, FB_SIZE); 249 memset_io((void __iomem *)drvdata->fb_virt, 0, FB_SIZE);
251 250
252 /* Tell the hardware where the frame buffer is */ 251 /* Tell the hardware where the frame buffer is */
253 xilinx_fb_out_be32(drvdata, REG_FB_ADDR, drvdata->fb_phys); 252 xilinx_fb_out_be32(drvdata, REG_FB_ADDR, drvdata->fb_phys);
254 253
255 /* Turn on the display */ 254 /* Turn on the display */
256 drvdata->reg_ctrl_default = REG_CTRL_ENABLE; 255 drvdata->reg_ctrl_default = REG_CTRL_ENABLE;
257 if (pdata && pdata->rotate_screen) 256 if (rotate)
258 drvdata->reg_ctrl_default |= REG_CTRL_ROTATE; 257 drvdata->reg_ctrl_default |= REG_CTRL_ROTATE;
259 xilinx_fb_out_be32(drvdata, REG_CTRL, drvdata->reg_ctrl_default); 258 xilinx_fb_out_be32(drvdata, REG_CTRL, drvdata->reg_ctrl_default);
260 259
261 /* Fill struct fb_info */ 260 /* Fill struct fb_info */
262 drvdata->info.device = dev; 261 drvdata->info.device = dev;
263 drvdata->info.screen_base = drvdata->fb_virt; 262 drvdata->info.screen_base = (void __iomem *)drvdata->fb_virt;
264 drvdata->info.fbops = &xilinxfb_ops; 263 drvdata->info.fbops = &xilinxfb_ops;
265 drvdata->info.fix = xilinx_fb_fix; 264 drvdata->info.fix = xilinx_fb_fix;
266 drvdata->info.fix.smem_start = drvdata->fb_phys; 265 drvdata->info.fix.smem_start = drvdata->fb_phys;
267 drvdata->info.pseudo_palette = drvdata->pseudo_palette; 266 drvdata->info.pseudo_palette = drvdata->pseudo_palette;
267 drvdata->info.flags = FBINFO_DEFAULT;
268 drvdata->info.var = xilinx_fb_var;
269
270 xilinx_fb_var.height = height_mm;
271 xilinx_fb_var.width = width_mm;
268 272
269 if (fb_alloc_cmap(&drvdata->info.cmap, PALETTE_ENTRIES_NO, 0) < 0) { 273 /* Allocate a colour map */
270 printk(KERN_ERR "Fail to allocate colormap (%d entries)\n", 274 rc = fb_alloc_cmap(&drvdata->info.cmap, PALETTE_ENTRIES_NO, 0);
275 if (rc) {
276 dev_err(dev, "Fail to allocate colormap (%d entries)\n",
271 PALETTE_ENTRIES_NO); 277 PALETTE_ENTRIES_NO);
272 retval = -EFAULT; 278 goto err_cmap;
273 goto failed3;
274 } 279 }
275 280
276 drvdata->info.flags = FBINFO_DEFAULT;
277 if (pdata) {
278 xilinx_fb_var.height = pdata->screen_height_mm;
279 xilinx_fb_var.width = pdata->screen_width_mm;
280 }
281 drvdata->info.var = xilinx_fb_var;
282
283 /* Register new frame buffer */ 281 /* Register new frame buffer */
284 if (register_framebuffer(&drvdata->info) < 0) { 282 rc = register_framebuffer(&drvdata->info);
285 printk(KERN_ERR "Could not register frame buffer\n"); 283 if (rc) {
286 retval = -EINVAL; 284 dev_err(dev, "Could not register frame buffer\n");
287 goto failed4; 285 goto err_regfb;
288 } 286 }
289 287
288 /* Put a banner in the log (for DEBUG) */
289 dev_dbg(dev, "regs: phys=%lx, virt=%p\n", physaddr, drvdata->regs);
290 dev_dbg(dev, "fb: phys=%p, virt=%p, size=%x\n",
291 (void*)drvdata->fb_phys, drvdata->fb_virt, FB_SIZE);
290 return 0; /* success */ 292 return 0; /* success */
291 293
292failed4: 294err_regfb:
293 fb_dealloc_cmap(&drvdata->info.cmap); 295 fb_dealloc_cmap(&drvdata->info.cmap);
294 296
295failed3: 297err_cmap:
296 dma_free_coherent(dev, PAGE_ALIGN(FB_SIZE), drvdata->fb_virt, 298 dma_free_coherent(dev, PAGE_ALIGN(FB_SIZE), drvdata->fb_virt,
297 drvdata->fb_phys); 299 drvdata->fb_phys);
298
299 /* Turn off the display */ 300 /* Turn off the display */
300 xilinx_fb_out_be32(drvdata, REG_CTRL, 0); 301 xilinx_fb_out_be32(drvdata, REG_CTRL, 0);
302
303err_fbmem:
301 iounmap(drvdata->regs); 304 iounmap(drvdata->regs);
302 305
303failed2: 306err_map:
304 release_mem_region(regs_res->start, 8); 307 release_mem_region(physaddr, 8);
305 308
306failed1: 309err_region:
307 kfree(drvdata); 310 kfree(drvdata);
308 dev_set_drvdata(dev, NULL); 311 dev_set_drvdata(dev, NULL);
309 312
310 return retval; 313 return rc;
311} 314}
312 315
313static int 316static int xilinxfb_release(struct device *dev)
314xilinxfb_drv_remove(struct device *dev)
315{ 317{
316 struct xilinxfb_drvdata *drvdata; 318 struct xilinxfb_drvdata *drvdata = dev_get_drvdata(dev);
317
318 if (!dev)
319 return -ENODEV;
320
321 drvdata = (struct xilinxfb_drvdata *) dev_get_drvdata(dev);
322 319
323#if !defined(CONFIG_FRAMEBUFFER_CONSOLE) && defined(CONFIG_LOGO) 320#if !defined(CONFIG_FRAMEBUFFER_CONSOLE) && defined(CONFIG_LOGO)
324 xilinx_fb_blank(VESA_POWERDOWN, &drvdata->info); 321 xilinx_fb_blank(VESA_POWERDOWN, &drvdata->info);
@@ -343,29 +340,151 @@ xilinxfb_drv_remove(struct device *dev)
343 return 0; 340 return 0;
344} 341}
345 342
343/* ---------------------------------------------------------------------
344 * Platform bus binding
345 */
346
347static int
348xilinxfb_platform_probe(struct platform_device *pdev)
349{
350 struct xilinxfb_platform_data *pdata;
351 struct resource *res;
352 int width_mm = 0;
353 int height_mm = 0;
354 int rotate = 0;
355
356 /* Find the registers address */
357 res = platform_get_resource(pdev, IORESOURCE_IO, 0);
358 if (!res) {
359 dev_err(&pdev->dev, "Couldn't get registers resource\n");
360 return -ENODEV;
361 }
362
363 /* If a pdata structure is provided, then extract the parameters */
364 pdata = pdev->dev.platform_data;
365 if (pdata) {
366 height_mm = pdata->screen_height_mm;
367 width_mm = pdata->screen_width_mm;
368 rotate = pdata->rotate_screen ? 1 : 0;
369 }
370
371 return xilinxfb_assign(&pdev->dev, res->start, width_mm, height_mm,
372 rotate);
373}
374
375static int
376xilinxfb_platform_remove(struct platform_device *pdev)
377{
378 return xilinxfb_release(&pdev->dev);
379}
346 380
347static struct device_driver xilinxfb_driver = {
348 .name = DRIVER_NAME,
349 .bus = &platform_bus_type,
350 381
351 .probe = xilinxfb_drv_probe, 382static struct platform_driver xilinxfb_platform_driver = {
352 .remove = xilinxfb_drv_remove 383 .probe = xilinxfb_platform_probe,
384 .remove = xilinxfb_platform_remove,
385 .driver = {
386 .owner = THIS_MODULE,
387 .name = DRIVER_NAME,
388 },
353}; 389};
354 390
391/* ---------------------------------------------------------------------
392 * OF bus binding
393 */
394
395#if defined(CONFIG_OF)
396static int __devinit
397xilinxfb_of_probe(struct of_device *op, const struct of_device_id *match)
398{
399 struct resource res;
400 const u32 *prop;
401 int width = 0, height = 0, rotate = 0;
402 int size, rc;
403
404 dev_dbg(&op->dev, "xilinxfb_of_probe(%p, %p)\n", op, match);
405
406 rc = of_address_to_resource(op->node, 0, &res);
407 if (rc) {
408 dev_err(&op->dev, "invalid address\n");
409 return rc;
410 }
411
412 prop = of_get_property(op->node, "display-number", &size);
413 if ((prop) && (size >= sizeof(u32)*2)) {
414 width = prop[0];
415 height = prop[1];
416 }
417
418 if (of_find_property(op->node, "rotate-display", NULL))
419 rotate = 1;
420
421 return xilinxfb_assign(&op->dev, res.start, width, height, rotate);
422}
423
424static int __devexit xilinxfb_of_remove(struct of_device *op)
425{
426 return xilinxfb_release(&op->dev);
427}
428
429/* Match table for of_platform binding */
430static struct of_device_id __devinit xilinxfb_of_match[] = {
431 { .compatible = "xilinx,ml300-fb", },
432 {},
433};
434MODULE_DEVICE_TABLE(of, xilinxfb_of_match);
435
436static struct of_platform_driver xilinxfb_of_driver = {
437 .owner = THIS_MODULE,
438 .name = DRIVER_NAME,
439 .match_table = xilinxfb_of_match,
440 .probe = xilinxfb_of_probe,
441 .remove = __devexit_p(xilinxfb_of_remove),
442 .driver = {
443 .name = DRIVER_NAME,
444 },
445};
446
447/* Registration helpers to keep the number of #ifdefs to a minimum */
448static inline int __init xilinxfb_of_register(void)
449{
450 pr_debug("xilinxfb: calling of_register_platform_driver()\n");
451 return of_register_platform_driver(&xilinxfb_of_driver);
452}
453
454static inline void __exit xilinxfb_of_unregister(void)
455{
456 of_unregister_platform_driver(&xilinxfb_of_driver);
457}
458#else /* CONFIG_OF */
459/* CONFIG_OF not enabled; do nothing helpers */
460static inline int __init xilinxfb_of_register(void) { return 0; }
461static inline void __exit xilinxfb_of_unregister(void) { }
462#endif /* CONFIG_OF */
463
464/* ---------------------------------------------------------------------
465 * Module setup and teardown
466 */
467
355static int __init 468static int __init
356xilinxfb_init(void) 469xilinxfb_init(void)
357{ 470{
358 /* 471 int rc;
359 * No kernel boot options used, 472 rc = xilinxfb_of_register();
360 * so we just need to register the driver 473 if (rc)
361 */ 474 return rc;
362 return driver_register(&xilinxfb_driver); 475
476 rc = platform_driver_register(&xilinxfb_platform_driver);
477 if (rc)
478 xilinxfb_of_unregister();
479
480 return rc;
363} 481}
364 482
365static void __exit 483static void __exit
366xilinxfb_cleanup(void) 484xilinxfb_cleanup(void)
367{ 485{
368 driver_unregister(&xilinxfb_driver); 486 platform_driver_unregister(&xilinxfb_platform_driver);
487 xilinxfb_of_unregister();
369} 488}
370 489
371module_init(xilinxfb_init); 490module_init(xilinxfb_init);
diff --git a/include/asm-powerpc/mpc52xx.h b/include/asm-powerpc/mpc52xx.h
index 1a3dbb743a3f..24751df791ac 100644
--- a/include/asm-powerpc/mpc52xx.h
+++ b/include/asm-powerpc/mpc52xx.h
@@ -243,7 +243,7 @@ struct mpc52xx_cdm {
243 243
244extern void __iomem * mpc52xx_find_and_map(const char *); 244extern void __iomem * mpc52xx_find_and_map(const char *);
245extern unsigned int mpc52xx_find_ipb_freq(struct device_node *node); 245extern unsigned int mpc52xx_find_ipb_freq(struct device_node *node);
246extern void mpc52xx_setup_cpu(void); 246extern void mpc5200_setup_xlb_arbiter(void);
247extern void mpc52xx_declare_of_platform_devices(void); 247extern void mpc52xx_declare_of_platform_devices(void);
248 248
249extern void mpc52xx_init_irq(void); 249extern void mpc52xx_init_irq(void);