aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2008-10-06 20:15:07 -0400
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2008-10-06 20:15:07 -0400
commitfa6428ebfa2197841902b89cbc25334707e2f6eb (patch)
treed139b822bc5447198528defb29f0c0e90d89651c
parentc9b59da130b4430910e02a80816f317534cd5e53 (diff)
parent3d5fa877bdf65451c78c3b3d581355deea403b80 (diff)
Merge commit 'jwb/jwb-next'
-rw-r--r--arch/powerpc/boot/dts/arches.dts293
-rw-r--r--arch/powerpc/configs/44x/arches_defconfig767
-rw-r--r--arch/powerpc/include/asm/dcr-regs.h11
-rw-r--r--arch/powerpc/platforms/44x/Kconfig17
-rw-r--r--arch/powerpc/platforms/44x/ppc44x_simple.c3
-rw-r--r--arch/powerpc/sysdev/ppc4xx_pci.c9
-rw-r--r--drivers/net/ibm_newemac/Kconfig12
-rw-r--r--drivers/net/ibm_newemac/core.c60
-rw-r--r--drivers/net/ibm_newemac/core.h11
-rw-r--r--drivers/net/ibm_newemac/mal.c60
-rw-r--r--drivers/net/ibm_newemac/mal.h34
-rw-r--r--drivers/net/ibm_newemac/phy.c84
-rw-r--r--drivers/net/ibm_newemac/phy.h2
13 files changed, 1345 insertions, 18 deletions
diff --git a/arch/powerpc/boot/dts/arches.dts b/arch/powerpc/boot/dts/arches.dts
new file mode 100644
index 000000000000..d9113b1e8c1d
--- /dev/null
+++ b/arch/powerpc/boot/dts/arches.dts
@@ -0,0 +1,293 @@
1/*
2 * Device Tree Source for AMCC Arches (dual 460GT board)
3 *
4 * (C) Copyright 2008 Applied Micro Circuits Corporation
5 * Victor Gallardo <vgallardo@amcc.com>
6 * Adam Graham <agraham@amcc.com>
7 *
8 * Based on the glacier.dts file
9 * Stefan Roese <sr@denx.de>
10 * Copyright 2008 DENX Software Engineering
11 *
12 * See file CREDITS for list of people who contributed to this
13 * project.
14 *
15 * This program is free software; you can redistribute it and/or
16 * modify it under the terms of the GNU General Public License as
17 * published by the Free Software Foundation; either version 2 of
18 * the License, or (at your option) any later version.
19 *
20 * This program is distributed in the hope that it will be useful,
21 * but WITHOUT ANY WARRANTY; without even the implied warranty of
22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 * GNU General Public License for more details.
24 *
25 * You should have received a copy of the GNU General Public License
26 * along with this program; if not, write to the Free Software
27 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
28 * MA 02111-1307 USA
29 */
30
31/dts-v1/;
32
33/ {
34 #address-cells = <2>;
35 #size-cells = <1>;
36 model = "amcc,arches";
37 compatible = "amcc,arches";
38 dcr-parent = <&{/cpus/cpu@0}>;
39
40 aliases {
41 ethernet0 = &EMAC0;
42 ethernet1 = &EMAC1;
43 ethernet2 = &EMAC2;
44 serial0 = &UART0;
45 };
46
47 cpus {
48 #address-cells = <1>;
49 #size-cells = <0>;
50
51 cpu@0 {
52 device_type = "cpu";
53 model = "PowerPC,460GT";
54 reg = <0x00000000>;
55 clock-frequency = <0>; /* Filled in by U-Boot */
56 timebase-frequency = <0>; /* Filled in by U-Boot */
57 i-cache-line-size = <32>;
58 d-cache-line-size = <32>;
59 i-cache-size = <32768>;
60 d-cache-size = <32768>;
61 dcr-controller;
62 dcr-access-method = "native";
63 };
64 };
65
66 memory {
67 device_type = "memory";
68 reg = <0x00000000 0x00000000 0x00000000>; /* Filled in by U-Boot */
69 };
70
71 UIC0: interrupt-controller0 {
72 compatible = "ibm,uic-460gt","ibm,uic";
73 interrupt-controller;
74 cell-index = <0>;
75 dcr-reg = <0x0c0 0x009>;
76 #address-cells = <0>;
77 #size-cells = <0>;
78 #interrupt-cells = <2>;
79 };
80
81 UIC1: interrupt-controller1 {
82 compatible = "ibm,uic-460gt","ibm,uic";
83 interrupt-controller;
84 cell-index = <1>;
85 dcr-reg = <0x0d0 0x009>;
86 #address-cells = <0>;
87 #size-cells = <0>;
88 #interrupt-cells = <2>;
89 interrupts = <0x1e 0x4 0x1f 0x4>; /* cascade */
90 interrupt-parent = <&UIC0>;
91 };
92
93 UIC2: interrupt-controller2 {
94 compatible = "ibm,uic-460gt","ibm,uic";
95 interrupt-controller;
96 cell-index = <2>;
97 dcr-reg = <0x0e0 0x009>;
98 #address-cells = <0>;
99 #size-cells = <0>;
100 #interrupt-cells = <2>;
101 interrupts = <0xa 0x4 0xb 0x4>; /* cascade */
102 interrupt-parent = <&UIC0>;
103 };
104
105 UIC3: interrupt-controller3 {
106 compatible = "ibm,uic-460gt","ibm,uic";
107 interrupt-controller;
108 cell-index = <3>;
109 dcr-reg = <0x0f0 0x009>;
110 #address-cells = <0>;
111 #size-cells = <0>;
112 #interrupt-cells = <2>;
113 interrupts = <0x10 0x4 0x11 0x4>; /* cascade */
114 interrupt-parent = <&UIC0>;
115 };
116
117 SDR0: sdr {
118 compatible = "ibm,sdr-460gt";
119 dcr-reg = <0x00e 0x002>;
120 };
121
122 CPR0: cpr {
123 compatible = "ibm,cpr-460gt";
124 dcr-reg = <0x00c 0x002>;
125 };
126
127 plb {
128 compatible = "ibm,plb-460gt", "ibm,plb4";
129 #address-cells = <2>;
130 #size-cells = <1>;
131 ranges;
132 clock-frequency = <0>; /* Filled in by U-Boot */
133
134 SDRAM0: sdram {
135 compatible = "ibm,sdram-460gt", "ibm,sdram-405gp";
136 dcr-reg = <0x010 0x002>;
137 };
138
139 MAL0: mcmal {
140 compatible = "ibm,mcmal-460gt", "ibm,mcmal2";
141 dcr-reg = <0x180 0x062>;
142 num-tx-chans = <3>;
143 num-rx-chans = <24>;
144 #address-cells = <0>;
145 #size-cells = <0>;
146 interrupt-parent = <&UIC2>;
147 interrupts = < /*TXEOB*/ 0x6 0x4
148 /*RXEOB*/ 0x7 0x4
149 /*SERR*/ 0x3 0x4
150 /*TXDE*/ 0x4 0x4
151 /*RXDE*/ 0x5 0x4>;
152 desc-base-addr-high = <0x8>;
153 };
154
155 POB0: opb {
156 compatible = "ibm,opb-460gt", "ibm,opb";
157 #address-cells = <1>;
158 #size-cells = <1>;
159 ranges = <0xb0000000 0x00000004 0xb0000000 0x50000000>;
160 clock-frequency = <0>; /* Filled in by U-Boot */
161
162 EBC0: ebc {
163 compatible = "ibm,ebc-460gt", "ibm,ebc";
164 dcr-reg = <0x012 0x002>;
165 #address-cells = <2>;
166 #size-cells = <1>;
167 clock-frequency = <0>; /* Filled in by U-Boot */
168 /* ranges property is supplied by U-Boot */
169 interrupts = <0x6 0x4>;
170 interrupt-parent = <&UIC1>;
171 };
172
173 UART0: serial@ef600300 {
174 device_type = "serial";
175 compatible = "ns16550";
176 reg = <0xef600300 0x00000008>;
177 virtual-reg = <0xef600300>;
178 clock-frequency = <0>; /* Filled in by U-Boot */
179 current-speed = <0>; /* Filled in by U-Boot */
180 interrupt-parent = <&UIC1>;
181 interrupts = <0x1 0x4>;
182 };
183
184 IIC0: i2c@ef600700 {
185 compatible = "ibm,iic-460gt", "ibm,iic";
186 reg = <0xef600700 0x00000014>;
187 interrupt-parent = <&UIC0>;
188 interrupts = <0x2 0x4>;
189 };
190
191 IIC1: i2c@ef600800 {
192 compatible = "ibm,iic-460gt", "ibm,iic";
193 reg = <0xef600800 0x00000014>;
194 interrupt-parent = <&UIC0>;
195 interrupts = <0x3 0x4>;
196 };
197
198 TAH0: emac-tah@ef601350 {
199 compatible = "ibm,tah-460gt", "ibm,tah";
200 reg = <0xef601350 0x00000030>;
201 };
202
203 TAH1: emac-tah@ef601450 {
204 compatible = "ibm,tah-460gt", "ibm,tah";
205 reg = <0xef601450 0x00000030>;
206 };
207
208 EMAC0: ethernet@ef600e00 {
209 device_type = "network";
210 compatible = "ibm,emac-460gt", "ibm,emac4sync";
211 interrupt-parent = <&EMAC0>;
212 interrupts = <0x0 0x1>;
213 #interrupt-cells = <1>;
214 #address-cells = <0>;
215 #size-cells = <0>;
216 interrupt-map = </*Status*/ 0x0 &UIC2 0x10 0x4
217 /*Wake*/ 0x1 &UIC2 0x14 0x4>;
218 reg = <0xef600e00 0x000000c4>;
219 local-mac-address = [000000000000]; /* Filled in by U-Boot */
220 mal-device = <&MAL0>;
221 mal-tx-channel = <0>;
222 mal-rx-channel = <0>;
223 cell-index = <0>;
224 max-frame-size = <9000>;
225 rx-fifo-size = <4096>;
226 tx-fifo-size = <2048>;
227 phy-mode = "sgmii";
228 phy-map = <0xffffffff>;
229 gpcs-address = <0x0000000a>;
230 tah-device = <&TAH0>;
231 tah-channel = <0>;
232 has-inverted-stacr-oc;
233 has-new-stacr-staopc;
234 };
235
236 EMAC1: ethernet@ef600f00 {
237 device_type = "network";
238 compatible = "ibm,emac-460gt", "ibm,emac4sync";
239 interrupt-parent = <&EMAC1>;
240 interrupts = <0x0 0x1>;
241 #interrupt-cells = <1>;
242 #address-cells = <0>;
243 #size-cells = <0>;
244 interrupt-map = </*Status*/ 0x0 &UIC2 0x11 0x4
245 /*Wake*/ 0x1 &UIC2 0x15 0x4>;
246 reg = <0xef600f00 0x000000c4>;
247 local-mac-address = [000000000000]; /* Filled in by U-Boot */
248 mal-device = <&MAL0>;
249 mal-tx-channel = <1>;
250 mal-rx-channel = <8>;
251 cell-index = <1>;
252 max-frame-size = <9000>;
253 rx-fifo-size = <4096>;
254 tx-fifo-size = <2048>;
255 phy-mode = "sgmii";
256 phy-map = <0x00000000>;
257 gpcs-address = <0x0000000b>;
258 tah-device = <&TAH1>;
259 tah-channel = <1>;
260 has-inverted-stacr-oc;
261 has-new-stacr-staopc;
262 mdio-device = <&EMAC0>;
263 };
264
265 EMAC2: ethernet@ef601100 {
266 device_type = "network";
267 compatible = "ibm,emac-460gt", "ibm,emac4sync";
268 interrupt-parent = <&EMAC2>;
269 interrupts = <0x0 0x1>;
270 #interrupt-cells = <1>;
271 #address-cells = <0>;
272 #size-cells = <0>;
273 interrupt-map = </*Status*/ 0x0 &UIC2 0x12 0x4
274 /*Wake*/ 0x1 &UIC2 0x16 0x4>;
275 reg = <0xef601100 0x000000c4>;
276 local-mac-address = [000000000000]; /* Filled in by U-Boot */
277 mal-device = <&MAL0>;
278 mal-tx-channel = <2>;
279 mal-rx-channel = <16>;
280 cell-index = <2>;
281 max-frame-size = <9000>;
282 rx-fifo-size = <4096>;
283 tx-fifo-size = <2048>;
284 phy-mode = "sgmii";
285 phy-map = <0x00000001>;
286 gpcs-address = <0x0000000C>;
287 has-inverted-stacr-oc;
288 has-new-stacr-staopc;
289 mdio-device = <&EMAC0>;
290 };
291 };
292 };
293};
diff --git a/arch/powerpc/configs/44x/arches_defconfig b/arch/powerpc/configs/44x/arches_defconfig
new file mode 100644
index 000000000000..70f46078eb6a
--- /dev/null
+++ b/arch/powerpc/configs/44x/arches_defconfig
@@ -0,0 +1,767 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.27-rc5
4# Wed Oct 1 15:54:57 2008
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
14# CONFIG_40x is not set
15CONFIG_44x=y
16# CONFIG_E200 is not set
17CONFIG_PPC_FPU=y
18CONFIG_4xx=y
19CONFIG_BOOKE=y
20CONFIG_PTE_64BIT=y
21CONFIG_PHYS_64BIT=y
22# CONFIG_PPC_MM_SLICES is not set
23CONFIG_NOT_COHERENT_CACHE=y
24CONFIG_PPC32=y
25CONFIG_WORD_SIZE=32
26CONFIG_PPC_MERGE=y
27CONFIG_MMU=y
28CONFIG_GENERIC_CMOS_UPDATE=y
29CONFIG_GENERIC_TIME=y
30CONFIG_GENERIC_TIME_VSYSCALL=y
31CONFIG_GENERIC_CLOCKEVENTS=y
32CONFIG_GENERIC_HARDIRQS=y
33# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
34CONFIG_IRQ_PER_CPU=y
35CONFIG_STACKTRACE_SUPPORT=y
36CONFIG_HAVE_LATENCYTOP_SUPPORT=y
37CONFIG_LOCKDEP_SUPPORT=y
38CONFIG_RWSEM_XCHGADD_ALGORITHM=y
39CONFIG_ARCH_HAS_ILOG2_U32=y
40CONFIG_GENERIC_HWEIGHT=y
41CONFIG_GENERIC_CALIBRATE_DELAY=y
42CONFIG_GENERIC_FIND_NEXT_BIT=y
43# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
44CONFIG_PPC=y
45CONFIG_EARLY_PRINTK=y
46CONFIG_GENERIC_NVRAM=y
47CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
48CONFIG_ARCH_MAY_HAVE_PC_FDC=y
49CONFIG_PPC_OF=y
50CONFIG_OF=y
51CONFIG_PPC_UDBG_16550=y
52# CONFIG_GENERIC_TBSYNC is not set
53CONFIG_AUDIT_ARCH=y
54CONFIG_GENERIC_BUG=y
55# CONFIG_DEFAULT_UIMAGE is not set
56CONFIG_PPC_DCR_NATIVE=y
57# CONFIG_PPC_DCR_MMIO is not set
58CONFIG_PPC_DCR=y
59CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
60
61#
62# General setup
63#
64CONFIG_EXPERIMENTAL=y
65CONFIG_BROKEN_ON_SMP=y
66CONFIG_INIT_ENV_ARG_LIMIT=32
67CONFIG_LOCALVERSION=""
68CONFIG_LOCALVERSION_AUTO=y
69CONFIG_SWAP=y
70CONFIG_SYSVIPC=y
71CONFIG_SYSVIPC_SYSCTL=y
72CONFIG_POSIX_MQUEUE=y
73# CONFIG_BSD_PROCESS_ACCT is not set
74# CONFIG_TASKSTATS is not set
75# CONFIG_AUDIT is not set
76# CONFIG_IKCONFIG is not set
77CONFIG_LOG_BUF_SHIFT=14
78# CONFIG_CGROUPS is not set
79# CONFIG_GROUP_SCHED is not set
80CONFIG_SYSFS_DEPRECATED=y
81CONFIG_SYSFS_DEPRECATED_V2=y
82# CONFIG_RELAY is not set
83# CONFIG_NAMESPACES is not set
84CONFIG_BLK_DEV_INITRD=y
85CONFIG_INITRAMFS_SOURCE=""
86# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
87CONFIG_SYSCTL=y
88CONFIG_EMBEDDED=y
89CONFIG_SYSCTL_SYSCALL=y
90CONFIG_KALLSYMS=y
91# CONFIG_KALLSYMS_ALL is not set
92# CONFIG_KALLSYMS_EXTRA_PASS is not set
93CONFIG_HOTPLUG=y
94CONFIG_PRINTK=y
95CONFIG_BUG=y
96CONFIG_ELF_CORE=y
97CONFIG_COMPAT_BRK=y
98CONFIG_BASE_FULL=y
99CONFIG_FUTEX=y
100CONFIG_ANON_INODES=y
101CONFIG_EPOLL=y
102CONFIG_SIGNALFD=y
103CONFIG_TIMERFD=y
104CONFIG_EVENTFD=y
105CONFIG_SHMEM=y
106CONFIG_VM_EVENT_COUNTERS=y
107CONFIG_SLUB_DEBUG=y
108# CONFIG_SLAB is not set
109CONFIG_SLUB=y
110# CONFIG_SLOB is not set
111# CONFIG_PROFILING is not set
112# CONFIG_MARKERS is not set
113CONFIG_HAVE_OPROFILE=y
114# CONFIG_KPROBES is not set
115CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
116CONFIG_HAVE_IOREMAP_PROT=y
117CONFIG_HAVE_KPROBES=y
118CONFIG_HAVE_KRETPROBES=y
119CONFIG_HAVE_ARCH_TRACEHOOK=y
120# CONFIG_HAVE_DMA_ATTRS is not set
121# CONFIG_USE_GENERIC_SMP_HELPERS is not set
122# CONFIG_HAVE_CLK is not set
123CONFIG_PROC_PAGE_MONITOR=y
124# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
125CONFIG_SLABINFO=y
126CONFIG_RT_MUTEXES=y
127# CONFIG_TINY_SHMEM is not set
128CONFIG_BASE_SMALL=0
129CONFIG_MODULES=y
130# CONFIG_MODULE_FORCE_LOAD is not set
131CONFIG_MODULE_UNLOAD=y
132# CONFIG_MODULE_FORCE_UNLOAD is not set
133# CONFIG_MODVERSIONS is not set
134# CONFIG_MODULE_SRCVERSION_ALL is not set
135CONFIG_KMOD=y
136CONFIG_BLOCK=y
137CONFIG_LBD=y
138# CONFIG_BLK_DEV_IO_TRACE is not set
139# CONFIG_LSF is not set
140# CONFIG_BLK_DEV_BSG is not set
141# CONFIG_BLK_DEV_INTEGRITY is not set
142
143#
144# IO Schedulers
145#
146CONFIG_IOSCHED_NOOP=y
147CONFIG_IOSCHED_AS=y
148CONFIG_IOSCHED_DEADLINE=y
149CONFIG_IOSCHED_CFQ=y
150CONFIG_DEFAULT_AS=y
151# CONFIG_DEFAULT_DEADLINE is not set
152# CONFIG_DEFAULT_CFQ is not set
153# CONFIG_DEFAULT_NOOP is not set
154CONFIG_DEFAULT_IOSCHED="anticipatory"
155CONFIG_CLASSIC_RCU=y
156CONFIG_PPC4xx_PCI_EXPRESS=y
157
158#
159# Platform support
160#
161# CONFIG_PPC_CELL is not set
162# CONFIG_PPC_CELL_NATIVE is not set
163# CONFIG_PQ2ADS is not set
164# CONFIG_BAMBOO is not set
165# CONFIG_EBONY is not set
166# CONFIG_SAM440EP is not set
167# CONFIG_SEQUOIA is not set
168# CONFIG_TAISHAN is not set
169# CONFIG_KATMAI is not set
170# CONFIG_RAINIER is not set
171# CONFIG_WARP is not set
172CONFIG_ARCHES=y
173# CONFIG_CANYONLANDS is not set
174# CONFIG_GLACIER is not set
175# CONFIG_YOSEMITE is not set
176# CONFIG_XILINX_VIRTEX440_GENERIC_BOARD is not set
177CONFIG_PPC44x_SIMPLE=y
178CONFIG_460EX=y
179# CONFIG_IPIC is not set
180# CONFIG_MPIC is not set
181# CONFIG_MPIC_WEIRD is not set
182# CONFIG_PPC_I8259 is not set
183# CONFIG_PPC_RTAS is not set
184# CONFIG_MMIO_NVRAM is not set
185# CONFIG_PPC_MPC106 is not set
186# CONFIG_PPC_970_NAP is not set
187# CONFIG_PPC_INDIRECT_IO is not set
188# CONFIG_GENERIC_IOMAP is not set
189# CONFIG_CPU_FREQ is not set
190# CONFIG_FSL_ULI1575 is not set
191
192#
193# Kernel options
194#
195# CONFIG_HIGHMEM is not set
196CONFIG_TICK_ONESHOT=y
197CONFIG_NO_HZ=y
198CONFIG_HIGH_RES_TIMERS=y
199CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
200# CONFIG_HZ_100 is not set
201CONFIG_HZ_250=y
202# CONFIG_HZ_300 is not set
203# CONFIG_HZ_1000 is not set
204CONFIG_HZ=250
205CONFIG_SCHED_HRTICK=y
206CONFIG_PREEMPT_NONE=y
207# CONFIG_PREEMPT_VOLUNTARY is not set
208# CONFIG_PREEMPT is not set
209CONFIG_BINFMT_ELF=y
210# CONFIG_BINFMT_MISC is not set
211# CONFIG_MATH_EMULATION is not set
212# CONFIG_IOMMU_HELPER is not set
213CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
214CONFIG_ARCH_HAS_WALK_MEMORY=y
215CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
216CONFIG_ARCH_FLATMEM_ENABLE=y
217CONFIG_ARCH_POPULATES_NODE_MAP=y
218CONFIG_SELECT_MEMORY_MODEL=y
219CONFIG_FLATMEM_MANUAL=y
220# CONFIG_DISCONTIGMEM_MANUAL is not set
221# CONFIG_SPARSEMEM_MANUAL is not set
222CONFIG_FLATMEM=y
223CONFIG_FLAT_NODE_MEM_MAP=y
224# CONFIG_SPARSEMEM_STATIC is not set
225# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
226CONFIG_PAGEFLAGS_EXTENDED=y
227CONFIG_SPLIT_PTLOCK_CPUS=4
228CONFIG_MIGRATION=y
229CONFIG_RESOURCES_64BIT=y
230CONFIG_ZONE_DMA_FLAG=1
231CONFIG_BOUNCE=y
232CONFIG_VIRT_TO_BUS=y
233CONFIG_FORCE_MAX_ZONEORDER=11
234CONFIG_PROC_DEVICETREE=y
235CONFIG_CMDLINE_BOOL=y
236CONFIG_CMDLINE=""
237CONFIG_EXTRA_TARGETS=""
238CONFIG_SECCOMP=y
239CONFIG_ISA_DMA_API=y
240
241#
242# Bus options
243#
244CONFIG_ZONE_DMA=y
245CONFIG_PPC_INDIRECT_PCI=y
246CONFIG_4xx_SOC=y
247CONFIG_PPC_PCI_CHOICE=y
248CONFIG_PCI=y
249CONFIG_PCI_DOMAINS=y
250CONFIG_PCI_SYSCALL=y
251# CONFIG_PCIEPORTBUS is not set
252CONFIG_ARCH_SUPPORTS_MSI=y
253# CONFIG_PCI_MSI is not set
254CONFIG_PCI_LEGACY=y
255# CONFIG_PCI_DEBUG is not set
256# CONFIG_PCCARD is not set
257# CONFIG_HOTPLUG_PCI is not set
258# CONFIG_HAS_RAPIDIO is not set
259
260#
261# Advanced setup
262#
263# CONFIG_ADVANCED_OPTIONS is not set
264
265#
266# Default settings for advanced configuration options are used
267#
268CONFIG_LOWMEM_SIZE=0x30000000
269CONFIG_PAGE_OFFSET=0xc0000000
270CONFIG_KERNEL_START=0xc0000000
271CONFIG_PHYSICAL_START=0x00000000
272CONFIG_TASK_SIZE=0xc0000000
273CONFIG_CONSISTENT_START=0xff100000
274CONFIG_CONSISTENT_SIZE=0x00200000
275CONFIG_NET=y
276
277#
278# Networking options
279#
280CONFIG_PACKET=y
281# CONFIG_PACKET_MMAP is not set
282CONFIG_UNIX=y
283# CONFIG_NET_KEY is not set
284CONFIG_INET=y
285# CONFIG_IP_MULTICAST is not set
286# CONFIG_IP_ADVANCED_ROUTER is not set
287CONFIG_IP_FIB_HASH=y
288CONFIG_IP_PNP=y
289CONFIG_IP_PNP_DHCP=y
290CONFIG_IP_PNP_BOOTP=y
291# CONFIG_IP_PNP_RARP is not set
292# CONFIG_NET_IPIP is not set
293# CONFIG_NET_IPGRE is not set
294# CONFIG_ARPD is not set
295# CONFIG_SYN_COOKIES is not set
296# CONFIG_INET_AH is not set
297# CONFIG_INET_ESP is not set
298# CONFIG_INET_IPCOMP is not set
299# CONFIG_INET_XFRM_TUNNEL is not set
300# CONFIG_INET_TUNNEL is not set
301# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
302# CONFIG_INET_XFRM_MODE_TUNNEL is not set
303# CONFIG_INET_XFRM_MODE_BEET is not set
304# CONFIG_INET_LRO is not set
305CONFIG_INET_DIAG=y
306CONFIG_INET_TCP_DIAG=y
307# CONFIG_TCP_CONG_ADVANCED is not set
308CONFIG_TCP_CONG_CUBIC=y
309CONFIG_DEFAULT_TCP_CONG="cubic"
310# CONFIG_TCP_MD5SIG is not set
311# CONFIG_IPV6 is not set
312# CONFIG_NETWORK_SECMARK is not set
313# CONFIG_NETFILTER is not set
314# CONFIG_IP_DCCP is not set
315# CONFIG_IP_SCTP is not set
316# CONFIG_TIPC is not set
317# CONFIG_ATM is not set
318# CONFIG_BRIDGE is not set
319# CONFIG_VLAN_8021Q is not set
320# CONFIG_DECNET is not set
321# CONFIG_LLC2 is not set
322# CONFIG_IPX is not set
323# CONFIG_ATALK is not set
324# CONFIG_X25 is not set
325# CONFIG_LAPB is not set
326# CONFIG_ECONET is not set
327# CONFIG_WAN_ROUTER is not set
328# CONFIG_NET_SCHED is not set
329
330#
331# Network testing
332#
333# CONFIG_NET_PKTGEN is not set
334# CONFIG_HAMRADIO is not set
335# CONFIG_CAN is not set
336# CONFIG_IRDA is not set
337# CONFIG_BT is not set
338# CONFIG_AF_RXRPC is not set
339
340#
341# Wireless
342#
343# CONFIG_CFG80211 is not set
344# CONFIG_WIRELESS_EXT is not set
345# CONFIG_MAC80211 is not set
346# CONFIG_IEEE80211 is not set
347# CONFIG_RFKILL is not set
348# CONFIG_NET_9P is not set
349
350#
351# Device Drivers
352#
353
354#
355# Generic Driver Options
356#
357CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
358CONFIG_STANDALONE=y
359CONFIG_PREVENT_FIRMWARE_BUILD=y
360CONFIG_FW_LOADER=y
361CONFIG_FIRMWARE_IN_KERNEL=y
362CONFIG_EXTRA_FIRMWARE=""
363# CONFIG_DEBUG_DRIVER is not set
364# CONFIG_DEBUG_DEVRES is not set
365# CONFIG_SYS_HYPERVISOR is not set
366CONFIG_CONNECTOR=y
367CONFIG_PROC_EVENTS=y
368# CONFIG_MTD is not set
369CONFIG_OF_DEVICE=y
370# CONFIG_PARPORT is not set
371CONFIG_BLK_DEV=y
372# CONFIG_BLK_DEV_FD is not set
373# CONFIG_BLK_CPQ_DA is not set
374# CONFIG_BLK_CPQ_CISS_DA is not set
375# CONFIG_BLK_DEV_DAC960 is not set
376# CONFIG_BLK_DEV_UMEM is not set
377# CONFIG_BLK_DEV_COW_COMMON is not set
378# CONFIG_BLK_DEV_LOOP is not set
379# CONFIG_BLK_DEV_NBD is not set
380# CONFIG_BLK_DEV_SX8 is not set
381CONFIG_BLK_DEV_RAM=y
382CONFIG_BLK_DEV_RAM_COUNT=16
383CONFIG_BLK_DEV_RAM_SIZE=35000
384# CONFIG_BLK_DEV_XIP is not set
385# CONFIG_CDROM_PKTCDVD is not set
386# CONFIG_ATA_OVER_ETH is not set
387# CONFIG_XILINX_SYSACE is not set
388# CONFIG_BLK_DEV_HD is not set
389# CONFIG_MISC_DEVICES is not set
390CONFIG_HAVE_IDE=y
391# CONFIG_IDE is not set
392
393#
394# SCSI device support
395#
396# CONFIG_RAID_ATTRS is not set
397# CONFIG_SCSI is not set
398# CONFIG_SCSI_DMA is not set
399# CONFIG_SCSI_NETLINK is not set
400# CONFIG_ATA is not set
401# CONFIG_MD is not set
402# CONFIG_FUSION is not set
403
404#
405# IEEE 1394 (FireWire) support
406#
407
408#
409# Enable only one of the two stacks, unless you know what you are doing
410#
411# CONFIG_FIREWIRE is not set
412# CONFIG_IEEE1394 is not set
413# CONFIG_I2O is not set
414# CONFIG_MACINTOSH_DRIVERS is not set
415CONFIG_NETDEVICES=y
416# CONFIG_DUMMY is not set
417# CONFIG_BONDING is not set
418# CONFIG_MACVLAN is not set
419# CONFIG_EQUALIZER is not set
420# CONFIG_TUN is not set
421# CONFIG_VETH is not set
422# CONFIG_ARCNET is not set
423# CONFIG_PHYLIB is not set
424CONFIG_NET_ETHERNET=y
425# CONFIG_MII is not set
426# CONFIG_HAPPYMEAL is not set
427# CONFIG_SUNGEM is not set
428# CONFIG_CASSINI is not set
429# CONFIG_NET_VENDOR_3COM is not set
430# CONFIG_NET_TULIP is not set
431# CONFIG_HP100 is not set
432CONFIG_IBM_NEW_EMAC=y
433CONFIG_IBM_NEW_EMAC_RXB=256
434CONFIG_IBM_NEW_EMAC_TXB=256
435CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32
436CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256
437CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0
438# CONFIG_IBM_NEW_EMAC_DEBUG is not set
439# CONFIG_IBM_NEW_EMAC_ZMII is not set
440# CONFIG_IBM_NEW_EMAC_RGMII is not set
441CONFIG_IBM_NEW_EMAC_TAH=y
442CONFIG_IBM_NEW_EMAC_EMAC4=y
443# CONFIG_NET_PCI is not set
444# CONFIG_B44 is not set
445# CONFIG_NETDEV_1000 is not set
446# CONFIG_NETDEV_10000 is not set
447# CONFIG_TR is not set
448
449#
450# Wireless LAN
451#
452# CONFIG_WLAN_PRE80211 is not set
453# CONFIG_WLAN_80211 is not set
454# CONFIG_IWLWIFI_LEDS is not set
455# CONFIG_WAN is not set
456# CONFIG_FDDI is not set
457# CONFIG_HIPPI is not set
458# CONFIG_PPP is not set
459# CONFIG_SLIP is not set
460# CONFIG_NETCONSOLE is not set
461# CONFIG_NETPOLL is not set
462# CONFIG_NET_POLL_CONTROLLER is not set
463# CONFIG_ISDN is not set
464# CONFIG_PHONE is not set
465
466#
467# Input device support
468#
469# CONFIG_INPUT is not set
470
471#
472# Hardware I/O ports
473#
474# CONFIG_SERIO is not set
475# CONFIG_GAMEPORT is not set
476
477#
478# Character devices
479#
480# CONFIG_VT is not set
481CONFIG_DEVKMEM=y
482# CONFIG_SERIAL_NONSTANDARD is not set
483# CONFIG_NOZOMI is not set
484
485#
486# Serial drivers
487#
488CONFIG_SERIAL_8250=y
489CONFIG_SERIAL_8250_CONSOLE=y
490# CONFIG_SERIAL_8250_PCI is not set
491CONFIG_SERIAL_8250_NR_UARTS=4
492CONFIG_SERIAL_8250_RUNTIME_UARTS=4
493CONFIG_SERIAL_8250_EXTENDED=y
494# CONFIG_SERIAL_8250_MANY_PORTS is not set
495CONFIG_SERIAL_8250_SHARE_IRQ=y
496# CONFIG_SERIAL_8250_DETECT_IRQ is not set
497# CONFIG_SERIAL_8250_RSA is not set
498
499#
500# Non-8250 serial port support
501#
502# CONFIG_SERIAL_UARTLITE is not set
503CONFIG_SERIAL_CORE=y
504CONFIG_SERIAL_CORE_CONSOLE=y
505# CONFIG_SERIAL_JSM is not set
506CONFIG_SERIAL_OF_PLATFORM=y
507CONFIG_UNIX98_PTYS=y
508CONFIG_LEGACY_PTYS=y
509CONFIG_LEGACY_PTY_COUNT=256
510# CONFIG_IPMI_HANDLER is not set
511# CONFIG_HW_RANDOM is not set
512# CONFIG_NVRAM is not set
513# CONFIG_GEN_RTC is not set
514# CONFIG_R3964 is not set
515# CONFIG_APPLICOM is not set
516# CONFIG_RAW_DRIVER is not set
517# CONFIG_TCG_TPM is not set
518CONFIG_DEVPORT=y
519# CONFIG_I2C is not set
520# CONFIG_SPI is not set
521CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
522# CONFIG_GPIOLIB is not set
523# CONFIG_W1 is not set
524# CONFIG_POWER_SUPPLY is not set
525# CONFIG_HWMON is not set
526# CONFIG_THERMAL is not set
527# CONFIG_THERMAL_HWMON is not set
528# CONFIG_WATCHDOG is not set
529
530#
531# Sonics Silicon Backplane
532#
533CONFIG_SSB_POSSIBLE=y
534# CONFIG_SSB is not set
535
536#
537# Multifunction device drivers
538#
539# CONFIG_MFD_CORE is not set
540# CONFIG_MFD_SM501 is not set
541# CONFIG_HTC_PASIC3 is not set
542# CONFIG_MFD_TMIO is not set
543
544#
545# Multimedia devices
546#
547
548#
549# Multimedia core support
550#
551# CONFIG_VIDEO_DEV is not set
552# CONFIG_DVB_CORE is not set
553# CONFIG_VIDEO_MEDIA is not set
554
555#
556# Multimedia drivers
557#
558CONFIG_DAB=y
559
560#
561# Graphics support
562#
563# CONFIG_AGP is not set
564# CONFIG_DRM is not set
565# CONFIG_VGASTATE is not set
566CONFIG_VIDEO_OUTPUT_CONTROL=m
567# CONFIG_FB is not set
568# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
569
570#
571# Display device support
572#
573# CONFIG_DISPLAY_SUPPORT is not set
574# CONFIG_SOUND is not set
575# CONFIG_USB_SUPPORT is not set
576# CONFIG_MMC is not set
577# CONFIG_MEMSTICK is not set
578# CONFIG_NEW_LEDS is not set
579# CONFIG_ACCESSIBILITY is not set
580# CONFIG_INFINIBAND is not set
581# CONFIG_EDAC is not set
582# CONFIG_RTC_CLASS is not set
583# CONFIG_DMADEVICES is not set
584# CONFIG_UIO is not set
585
586#
587# File systems
588#
589CONFIG_EXT2_FS=y
590# CONFIG_EXT2_FS_XATTR is not set
591# CONFIG_EXT2_FS_XIP is not set
592# CONFIG_EXT3_FS is not set
593# CONFIG_EXT4DEV_FS is not set
594# CONFIG_REISERFS_FS is not set
595# CONFIG_JFS_FS is not set
596# CONFIG_FS_POSIX_ACL is not set
597# CONFIG_XFS_FS is not set
598# CONFIG_OCFS2_FS is not set
599CONFIG_DNOTIFY=y
600CONFIG_INOTIFY=y
601CONFIG_INOTIFY_USER=y
602# CONFIG_QUOTA is not set
603# CONFIG_AUTOFS_FS is not set
604# CONFIG_AUTOFS4_FS is not set
605# CONFIG_FUSE_FS is not set
606
607#
608# CD-ROM/DVD Filesystems
609#
610# CONFIG_ISO9660_FS is not set
611# CONFIG_UDF_FS is not set
612
613#
614# DOS/FAT/NT Filesystems
615#
616# CONFIG_MSDOS_FS is not set
617# CONFIG_VFAT_FS is not set
618# CONFIG_NTFS_FS is not set
619
620#
621# Pseudo filesystems
622#
623CONFIG_PROC_FS=y
624CONFIG_PROC_KCORE=y
625CONFIG_PROC_SYSCTL=y
626CONFIG_SYSFS=y
627CONFIG_TMPFS=y
628# CONFIG_TMPFS_POSIX_ACL is not set
629# CONFIG_HUGETLB_PAGE is not set
630# CONFIG_CONFIGFS_FS is not set
631
632#
633# Miscellaneous filesystems
634#
635# CONFIG_ADFS_FS is not set
636# CONFIG_AFFS_FS is not set
637# CONFIG_HFS_FS is not set
638# CONFIG_HFSPLUS_FS is not set
639# CONFIG_BEFS_FS is not set
640# CONFIG_BFS_FS is not set
641# CONFIG_EFS_FS is not set
642CONFIG_CRAMFS=y
643# CONFIG_VXFS_FS is not set
644# CONFIG_MINIX_FS is not set
645# CONFIG_OMFS_FS is not set
646# CONFIG_HPFS_FS is not set
647# CONFIG_QNX4FS_FS is not set
648# CONFIG_ROMFS_FS is not set
649# CONFIG_SYSV_FS is not set
650# CONFIG_UFS_FS is not set
651CONFIG_NETWORK_FILESYSTEMS=y
652CONFIG_NFS_FS=y
653CONFIG_NFS_V3=y
654# CONFIG_NFS_V3_ACL is not set
655# CONFIG_NFS_V4 is not set
656CONFIG_ROOT_NFS=y
657# CONFIG_NFSD is not set
658CONFIG_LOCKD=y
659CONFIG_LOCKD_V4=y
660CONFIG_NFS_COMMON=y
661CONFIG_SUNRPC=y
662# CONFIG_RPCSEC_GSS_KRB5 is not set
663# CONFIG_RPCSEC_GSS_SPKM3 is not set
664# CONFIG_SMB_FS is not set
665# CONFIG_CIFS is not set
666# CONFIG_NCP_FS is not set
667# CONFIG_CODA_FS is not set
668# CONFIG_AFS_FS is not set
669
670#
671# Partition Types
672#
673# CONFIG_PARTITION_ADVANCED is not set
674CONFIG_MSDOS_PARTITION=y
675# CONFIG_NLS is not set
676# CONFIG_DLM is not set
677
678#
679# Library routines
680#
681CONFIG_BITREVERSE=y
682# CONFIG_GENERIC_FIND_FIRST_BIT is not set
683# CONFIG_CRC_CCITT is not set
684# CONFIG_CRC16 is not set
685# CONFIG_CRC_T10DIF is not set
686# CONFIG_CRC_ITU_T is not set
687CONFIG_CRC32=y
688# CONFIG_CRC7 is not set
689# CONFIG_LIBCRC32C is not set
690CONFIG_ZLIB_INFLATE=y
691CONFIG_PLIST=y
692CONFIG_HAS_IOMEM=y
693CONFIG_HAS_IOPORT=y
694CONFIG_HAS_DMA=y
695CONFIG_HAVE_LMB=y
696
697#
698# Kernel hacking
699#
700# CONFIG_PRINTK_TIME is not set
701CONFIG_ENABLE_WARN_DEPRECATED=y
702CONFIG_ENABLE_MUST_CHECK=y
703CONFIG_FRAME_WARN=1024
704CONFIG_MAGIC_SYSRQ=y
705# CONFIG_UNUSED_SYMBOLS is not set
706CONFIG_DEBUG_FS=y
707# CONFIG_HEADERS_CHECK is not set
708CONFIG_DEBUG_KERNEL=y
709# CONFIG_DEBUG_SHIRQ is not set
710CONFIG_DETECT_SOFTLOCKUP=y
711# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
712CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
713CONFIG_SCHED_DEBUG=y
714# CONFIG_SCHEDSTATS is not set
715# CONFIG_TIMER_STATS is not set
716# CONFIG_DEBUG_OBJECTS is not set
717# CONFIG_SLUB_DEBUG_ON is not set
718# CONFIG_SLUB_STATS is not set
719# CONFIG_DEBUG_RT_MUTEXES is not set
720# CONFIG_RT_MUTEX_TESTER is not set
721# CONFIG_DEBUG_SPINLOCK is not set
722# CONFIG_DEBUG_MUTEXES is not set
723# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
724# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
725# CONFIG_DEBUG_KOBJECT is not set
726# CONFIG_DEBUG_BUGVERBOSE is not set
727# CONFIG_DEBUG_INFO is not set
728# CONFIG_DEBUG_VM is not set
729# CONFIG_DEBUG_WRITECOUNT is not set
730# CONFIG_DEBUG_MEMORY_INIT is not set
731# CONFIG_DEBUG_LIST is not set
732# CONFIG_DEBUG_SG is not set
733# CONFIG_BOOT_PRINTK_DELAY is not set
734# CONFIG_RCU_TORTURE_TEST is not set
735# CONFIG_BACKTRACE_SELF_TEST is not set
736# CONFIG_FAULT_INJECTION is not set
737# CONFIG_LATENCYTOP is not set
738CONFIG_SYSCTL_SYSCALL_CHECK=y
739CONFIG_HAVE_FTRACE=y
740CONFIG_HAVE_DYNAMIC_FTRACE=y
741# CONFIG_FTRACE is not set
742# CONFIG_SCHED_TRACER is not set
743# CONFIG_CONTEXT_SWITCH_TRACER is not set
744# CONFIG_SAMPLES is not set
745CONFIG_HAVE_ARCH_KGDB=y
746# CONFIG_KGDB is not set
747# CONFIG_DEBUG_STACKOVERFLOW is not set
748# CONFIG_DEBUG_STACK_USAGE is not set
749# CONFIG_DEBUG_PAGEALLOC is not set
750# CONFIG_CODE_PATCHING_SELFTEST is not set
751# CONFIG_FTR_FIXUP_SELFTEST is not set
752# CONFIG_MSI_BITMAP_SELFTEST is not set
753# CONFIG_XMON is not set
754# CONFIG_IRQSTACKS is not set
755# CONFIG_VIRQ_DEBUG is not set
756# CONFIG_BDI_SWITCH is not set
757# CONFIG_PPC_EARLY_DEBUG is not set
758
759#
760# Security options
761#
762# CONFIG_KEYS is not set
763# CONFIG_SECURITY is not set
764# CONFIG_SECURITY_FILE_CAPABILITIES is not set
765# CONFIG_CRYPTO is not set
766# CONFIG_PPC_CLOCK is not set
767# CONFIG_VIRTUALIZATION is not set
diff --git a/arch/powerpc/include/asm/dcr-regs.h b/arch/powerpc/include/asm/dcr-regs.h
index 29b0ecef980a..828e3aa1f2fc 100644
--- a/arch/powerpc/include/asm/dcr-regs.h
+++ b/arch/powerpc/include/asm/dcr-regs.h
@@ -68,6 +68,17 @@
68#define SDR0_UART3 0x0123 68#define SDR0_UART3 0x0123
69#define SDR0_CUST0 0x4000 69#define SDR0_CUST0 0x4000
70 70
71/* SDR for 405EZ */
72#define DCRN_SDR_ICINTSTAT 0x4510
73#define ICINTSTAT_ICRX 0x80000000
74#define ICINTSTAT_ICTX0 0x40000000
75#define ICINTSTAT_ICTX1 0x20000000
76#define ICINTSTAT_ICTX 0x60000000
77
78/* SDRs (460EX/460GT) */
79#define SDR0_ETH_CFG 0x4103
80#define SDR0_ETH_CFG_ECS 0x00000100 /* EMAC int clk source */
81
71/* 82/*
72 * All those DCR register addresses are offsets from the base address 83 * All those DCR register addresses are offsets from the base address
73 * for the SRAM0 controller (e.g. 0x20 on 440GX). The base address is 84 * for the SRAM0 controller (e.g. 0x20 on 440GX). The base address is
diff --git a/arch/powerpc/platforms/44x/Kconfig b/arch/powerpc/platforms/44x/Kconfig
index f8ef279f3256..79c1154f88d4 100644
--- a/arch/powerpc/platforms/44x/Kconfig
+++ b/arch/powerpc/platforms/44x/Kconfig
@@ -81,6 +81,17 @@ config WARP
81 See http://www.pikatechnologies.com/ and follow the "PIKA for Computer 81 See http://www.pikatechnologies.com/ and follow the "PIKA for Computer
82 Telephony Developers" link for more information. 82 Telephony Developers" link for more information.
83 83
84config ARCHES
85 bool "Arches"
86 depends on 44x
87 default n
88 select PPC44x_SIMPLE
89 select 460EX # Odd since it uses 460GT but the effects are the same
90 select PCI
91 select PPC4xx_PCI_EXPRESS
92 help
93 This option enables support for the AMCC Dual PPC460GT evaluation board.
94
84config CANYONLANDS 95config CANYONLANDS
85 bool "Canyonlands" 96 bool "Canyonlands"
86 depends on 44x 97 depends on 44x
@@ -89,6 +100,8 @@ config CANYONLANDS
89 select 460EX 100 select 460EX
90 select PCI 101 select PCI
91 select PPC4xx_PCI_EXPRESS 102 select PPC4xx_PCI_EXPRESS
103 select IBM_NEW_EMAC_RGMII
104 select IBM_NEW_EMAC_ZMII
92 help 105 help
93 This option enables support for the AMCC PPC460EX evaluation board. 106 This option enables support for the AMCC PPC460EX evaluation board.
94 107
@@ -100,6 +113,8 @@ config GLACIER
100 select 460EX # Odd since it uses 460GT but the effects are the same 113 select 460EX # Odd since it uses 460GT but the effects are the same
101 select PCI 114 select PCI
102 select PPC4xx_PCI_EXPRESS 115 select PPC4xx_PCI_EXPRESS
116 select IBM_NEW_EMAC_RGMII
117 select IBM_NEW_EMAC_ZMII
103 help 118 help
104 This option enables support for the AMCC PPC460GT evaluation board. 119 This option enables support for the AMCC PPC460GT evaluation board.
105 120
@@ -195,8 +210,6 @@ config 460EX
195 bool 210 bool
196 select PPC_FPU 211 select PPC_FPU
197 select IBM_NEW_EMAC_EMAC4 212 select IBM_NEW_EMAC_EMAC4
198 select IBM_NEW_EMAC_RGMII
199 select IBM_NEW_EMAC_ZMII
200 select IBM_NEW_EMAC_TAH 213 select IBM_NEW_EMAC_TAH
201 214
202# 44x errata/workaround config symbols, selected by the CPU models above 215# 44x errata/workaround config symbols, selected by the CPU models above
diff --git a/arch/powerpc/platforms/44x/ppc44x_simple.c b/arch/powerpc/platforms/44x/ppc44x_simple.c
index 57e71203d0f8..29671262801f 100644
--- a/arch/powerpc/platforms/44x/ppc44x_simple.c
+++ b/arch/powerpc/platforms/44x/ppc44x_simple.c
@@ -50,8 +50,9 @@ machine_device_initcall(ppc44x_simple, ppc44x_device_probe);
50 * board.c file for it rather than adding it to this list. 50 * board.c file for it rather than adding it to this list.
51 */ 51 */
52static char *board[] __initdata = { 52static char *board[] __initdata = {
53 "amcc,arches",
53 "amcc,bamboo", 54 "amcc,bamboo",
54 "amcc,cayonlands", 55 "amcc,canyonlands",
55 "amcc,glacier", 56 "amcc,glacier",
56 "ibm,ebony", 57 "ibm,ebony",
57 "amcc,katmai", 58 "amcc,katmai",
diff --git a/arch/powerpc/sysdev/ppc4xx_pci.c b/arch/powerpc/sysdev/ppc4xx_pci.c
index 5da8a44ea2f6..9f6f73d584d6 100644
--- a/arch/powerpc/sysdev/ppc4xx_pci.c
+++ b/arch/powerpc/sysdev/ppc4xx_pci.c
@@ -276,9 +276,16 @@ static void __init ppc4xx_probe_pci_bridge(struct device_node *np)
276 const int *bus_range; 276 const int *bus_range;
277 int primary = 0; 277 int primary = 0;
278 278
279 /* Check if device is enabled */
280 if (!of_device_is_available(np)) {
281 printk(KERN_INFO "%s: Port disabled via device-tree\n",
282 np->full_name);
283 return;
284 }
285
279 /* Fetch config space registers address */ 286 /* Fetch config space registers address */
280 if (of_address_to_resource(np, 0, &rsrc_cfg)) { 287 if (of_address_to_resource(np, 0, &rsrc_cfg)) {
281 printk(KERN_ERR "%s:Can't get PCI config register base !", 288 printk(KERN_ERR "%s: Can't get PCI config register base !",
282 np->full_name); 289 np->full_name);
283 return; 290 return;
284 } 291 }
diff --git a/drivers/net/ibm_newemac/Kconfig b/drivers/net/ibm_newemac/Kconfig
index 70a3272ee998..44e5a0e9922a 100644
--- a/drivers/net/ibm_newemac/Kconfig
+++ b/drivers/net/ibm_newemac/Kconfig
@@ -62,3 +62,15 @@ config IBM_NEW_EMAC_TAH
62config IBM_NEW_EMAC_EMAC4 62config IBM_NEW_EMAC_EMAC4
63 bool 63 bool
64 default n 64 default n
65
66config IBM_NEW_EMAC_NO_FLOW_CTRL
67 bool
68 default n
69
70config IBM_NEW_EMAC_MAL_CLR_ICINTSTAT
71 bool
72 default n
73
74config IBM_NEW_EMAC_MAL_COMMON_ERR
75 bool
76 default n
diff --git a/drivers/net/ibm_newemac/core.c b/drivers/net/ibm_newemac/core.c
index ccd9d9058f6d..efcf21c9f5c7 100644
--- a/drivers/net/ibm_newemac/core.c
+++ b/drivers/net/ibm_newemac/core.c
@@ -130,6 +130,7 @@ static inline void emac_report_timeout_error(struct emac_instance *dev,
130 const char *error) 130 const char *error)
131{ 131{
132 if (emac_has_feature(dev, EMAC_FTR_440GX_PHY_CLK_FIX | 132 if (emac_has_feature(dev, EMAC_FTR_440GX_PHY_CLK_FIX |
133 EMAC_FTR_460EX_PHY_CLK_FIX |
133 EMAC_FTR_440EP_PHY_CLK_FIX)) 134 EMAC_FTR_440EP_PHY_CLK_FIX))
134 DBG(dev, "%s" NL, error); 135 DBG(dev, "%s" NL, error);
135 else if (net_ratelimit()) 136 else if (net_ratelimit())
@@ -201,13 +202,15 @@ static inline int emac_phy_supports_gige(int phy_mode)
201{ 202{
202 return phy_mode == PHY_MODE_GMII || 203 return phy_mode == PHY_MODE_GMII ||
203 phy_mode == PHY_MODE_RGMII || 204 phy_mode == PHY_MODE_RGMII ||
205 phy_mode == PHY_MODE_SGMII ||
204 phy_mode == PHY_MODE_TBI || 206 phy_mode == PHY_MODE_TBI ||
205 phy_mode == PHY_MODE_RTBI; 207 phy_mode == PHY_MODE_RTBI;
206} 208}
207 209
208static inline int emac_phy_gpcs(int phy_mode) 210static inline int emac_phy_gpcs(int phy_mode)
209{ 211{
210 return phy_mode == PHY_MODE_TBI || 212 return phy_mode == PHY_MODE_SGMII ||
213 phy_mode == PHY_MODE_TBI ||
211 phy_mode == PHY_MODE_RTBI; 214 phy_mode == PHY_MODE_RTBI;
212} 215}
213 216
@@ -351,10 +354,24 @@ static int emac_reset(struct emac_instance *dev)
351 emac_tx_disable(dev); 354 emac_tx_disable(dev);
352 } 355 }
353 356
357#ifdef CONFIG_PPC_DCR_NATIVE
358 /* Enable internal clock source */
359 if (emac_has_feature(dev, EMAC_FTR_460EX_PHY_CLK_FIX))
360 dcri_clrset(SDR0, SDR0_ETH_CFG,
361 0, SDR0_ETH_CFG_ECS << dev->cell_index);
362#endif
363
354 out_be32(&p->mr0, EMAC_MR0_SRST); 364 out_be32(&p->mr0, EMAC_MR0_SRST);
355 while ((in_be32(&p->mr0) & EMAC_MR0_SRST) && n) 365 while ((in_be32(&p->mr0) & EMAC_MR0_SRST) && n)
356 --n; 366 --n;
357 367
368#ifdef CONFIG_PPC_DCR_NATIVE
369 /* Enable external clock source */
370 if (emac_has_feature(dev, EMAC_FTR_460EX_PHY_CLK_FIX))
371 dcri_clrset(SDR0, SDR0_ETH_CFG,
372 SDR0_ETH_CFG_ECS << dev->cell_index, 0);
373#endif
374
358 if (n) { 375 if (n) {
359 dev->reset_failed = 0; 376 dev->reset_failed = 0;
360 return 0; 377 return 0;
@@ -547,8 +564,9 @@ static int emac_configure(struct emac_instance *dev)
547 switch (dev->phy.speed) { 564 switch (dev->phy.speed) {
548 case SPEED_1000: 565 case SPEED_1000:
549 if (emac_phy_gpcs(dev->phy.mode)) { 566 if (emac_phy_gpcs(dev->phy.mode)) {
550 mr1 |= EMAC_MR1_MF_1000GPCS | 567 mr1 |= EMAC_MR1_MF_1000GPCS | EMAC_MR1_MF_IPPA(
551 EMAC_MR1_MF_IPPA(dev->phy.address); 568 (dev->phy.gpcs_address != 0xffffffff) ?
569 dev->phy.gpcs_address : dev->phy.address);
552 570
553 /* Put some arbitrary OUI, Manuf & Rev IDs so we can 571 /* Put some arbitrary OUI, Manuf & Rev IDs so we can
554 * identify this GPCS PHY later. 572 * identify this GPCS PHY later.
@@ -660,8 +678,12 @@ static int emac_configure(struct emac_instance *dev)
660 out_be32(&p->iser, r); 678 out_be32(&p->iser, r);
661 679
662 /* We need to take GPCS PHY out of isolate mode after EMAC reset */ 680 /* We need to take GPCS PHY out of isolate mode after EMAC reset */
663 if (emac_phy_gpcs(dev->phy.mode)) 681 if (emac_phy_gpcs(dev->phy.mode)) {
664 emac_mii_reset_phy(&dev->phy); 682 if (dev->phy.gpcs_address != 0xffffffff)
683 emac_mii_reset_gpcs(&dev->phy);
684 else
685 emac_mii_reset_phy(&dev->phy);
686 }
665 687
666 return 0; 688 return 0;
667} 689}
@@ -866,7 +888,9 @@ static int emac_mdio_read(struct net_device *ndev, int id, int reg)
866 struct emac_instance *dev = netdev_priv(ndev); 888 struct emac_instance *dev = netdev_priv(ndev);
867 int res; 889 int res;
868 890
869 res = __emac_mdio_read(dev->mdio_instance ? dev->mdio_instance : dev, 891 res = __emac_mdio_read((dev->mdio_instance &&
892 dev->phy.gpcs_address != id) ?
893 dev->mdio_instance : dev,
870 (u8) id, (u8) reg); 894 (u8) id, (u8) reg);
871 return res; 895 return res;
872} 896}
@@ -875,7 +899,9 @@ static void emac_mdio_write(struct net_device *ndev, int id, int reg, int val)
875{ 899{
876 struct emac_instance *dev = netdev_priv(ndev); 900 struct emac_instance *dev = netdev_priv(ndev);
877 901
878 __emac_mdio_write(dev->mdio_instance ? dev->mdio_instance : dev, 902 __emac_mdio_write((dev->mdio_instance &&
903 dev->phy.gpcs_address != id) ?
904 dev->mdio_instance : dev,
879 (u8) id, (u8) reg, (u16) val); 905 (u8) id, (u8) reg, (u16) val);
880} 906}
881 907
@@ -2367,7 +2393,11 @@ static int __devinit emac_init_phy(struct emac_instance *dev)
2367 * XXX I probably should move these settings to the dev tree 2393 * XXX I probably should move these settings to the dev tree
2368 */ 2394 */
2369 dev->phy.address = -1; 2395 dev->phy.address = -1;
2370 dev->phy.features = SUPPORTED_100baseT_Full | SUPPORTED_MII; 2396 dev->phy.features = SUPPORTED_MII;
2397 if (emac_phy_supports_gige(dev->phy_mode))
2398 dev->phy.features |= SUPPORTED_1000baseT_Full;
2399 else
2400 dev->phy.features |= SUPPORTED_100baseT_Full;
2371 dev->phy.pause = 1; 2401 dev->phy.pause = 1;
2372 2402
2373 return 0; 2403 return 0;
@@ -2406,7 +2436,9 @@ static int __devinit emac_init_phy(struct emac_instance *dev)
2406 * Note that the busy_phy_map is currently global 2436 * Note that the busy_phy_map is currently global
2407 * while it should probably be per-ASIC... 2437 * while it should probably be per-ASIC...
2408 */ 2438 */
2409 dev->phy.address = dev->cell_index; 2439 dev->phy.gpcs_address = dev->gpcs_address;
2440 if (dev->phy.gpcs_address == 0xffffffff)
2441 dev->phy.address = dev->cell_index;
2410 } 2442 }
2411 2443
2412 emac_configure(dev); 2444 emac_configure(dev);
@@ -2516,6 +2548,8 @@ static int __devinit emac_init_config(struct emac_instance *dev)
2516 dev->phy_address = 0xffffffff; 2548 dev->phy_address = 0xffffffff;
2517 if (emac_read_uint_prop(np, "phy-map", &dev->phy_map, 0)) 2549 if (emac_read_uint_prop(np, "phy-map", &dev->phy_map, 0))
2518 dev->phy_map = 0xffffffff; 2550 dev->phy_map = 0xffffffff;
2551 if (emac_read_uint_prop(np, "gpcs-address", &dev->gpcs_address, 0))
2552 dev->gpcs_address = 0xffffffff;
2519 if (emac_read_uint_prop(np->parent, "clock-frequency", &dev->opb_bus_freq, 1)) 2553 if (emac_read_uint_prop(np->parent, "clock-frequency", &dev->opb_bus_freq, 1))
2520 return -ENXIO; 2554 return -ENXIO;
2521 if (emac_read_uint_prop(np, "tah-device", &dev->tah_ph, 0)) 2555 if (emac_read_uint_prop(np, "tah-device", &dev->tah_ph, 0))
@@ -2559,6 +2593,9 @@ static int __devinit emac_init_config(struct emac_instance *dev)
2559 /* Check EMAC version */ 2593 /* Check EMAC version */
2560 if (of_device_is_compatible(np, "ibm,emac4sync")) { 2594 if (of_device_is_compatible(np, "ibm,emac4sync")) {
2561 dev->features |= (EMAC_FTR_EMAC4 | EMAC_FTR_EMAC4SYNC); 2595 dev->features |= (EMAC_FTR_EMAC4 | EMAC_FTR_EMAC4SYNC);
2596 if (of_device_is_compatible(np, "ibm,emac-460ex") ||
2597 of_device_is_compatible(np, "ibm,emac-460gt"))
2598 dev->features |= EMAC_FTR_460EX_PHY_CLK_FIX;
2562 } else if (of_device_is_compatible(np, "ibm,emac4")) { 2599 } else if (of_device_is_compatible(np, "ibm,emac4")) {
2563 dev->features |= EMAC_FTR_EMAC4; 2600 dev->features |= EMAC_FTR_EMAC4;
2564 if (of_device_is_compatible(np, "ibm,emac-440gx")) 2601 if (of_device_is_compatible(np, "ibm,emac-440gx"))
@@ -2567,6 +2604,8 @@ static int __devinit emac_init_config(struct emac_instance *dev)
2567 if (of_device_is_compatible(np, "ibm,emac-440ep") || 2604 if (of_device_is_compatible(np, "ibm,emac-440ep") ||
2568 of_device_is_compatible(np, "ibm,emac-440gr")) 2605 of_device_is_compatible(np, "ibm,emac-440gr"))
2569 dev->features |= EMAC_FTR_440EP_PHY_CLK_FIX; 2606 dev->features |= EMAC_FTR_440EP_PHY_CLK_FIX;
2607 if (of_device_is_compatible(np, "ibm,emac-405ez"))
2608 dev->features |= EMAC_FTR_NO_FLOW_CONTROL_40x;
2570 } 2609 }
2571 2610
2572 /* Fixup some feature bits based on the device tree */ 2611 /* Fixup some feature bits based on the device tree */
@@ -2824,6 +2863,9 @@ static int __devinit emac_probe(struct of_device *ofdev,
2824 ndev->dev_addr[0], ndev->dev_addr[1], ndev->dev_addr[2], 2863 ndev->dev_addr[0], ndev->dev_addr[1], ndev->dev_addr[2],
2825 ndev->dev_addr[3], ndev->dev_addr[4], ndev->dev_addr[5]); 2864 ndev->dev_addr[3], ndev->dev_addr[4], ndev->dev_addr[5]);
2826 2865
2866 if (dev->phy_mode == PHY_MODE_SGMII)
2867 printk(KERN_NOTICE "%s: in SGMII mode\n", ndev->name);
2868
2827 if (dev->phy.address >= 0) 2869 if (dev->phy.address >= 0)
2828 printk("%s: found %s PHY (0x%02x)\n", ndev->name, 2870 printk("%s: found %s PHY (0x%02x)\n", ndev->name,
2829 dev->phy.def->name, dev->phy.address); 2871 dev->phy.def->name, dev->phy.address);
diff --git a/drivers/net/ibm_newemac/core.h b/drivers/net/ibm_newemac/core.h
index 6545e69d12c3..18d56c6c4238 100644
--- a/drivers/net/ibm_newemac/core.h
+++ b/drivers/net/ibm_newemac/core.h
@@ -190,6 +190,9 @@ struct emac_instance {
190 struct delayed_work link_work; 190 struct delayed_work link_work;
191 int link_polling; 191 int link_polling;
192 192
193 /* GPCS PHY infos */
194 u32 gpcs_address;
195
193 /* Shared MDIO if any */ 196 /* Shared MDIO if any */
194 u32 mdio_ph; 197 u32 mdio_ph;
195 struct of_device *mdio_dev; 198 struct of_device *mdio_dev;
@@ -317,6 +320,10 @@ struct emac_instance {
317 * The 405EX and 460EX contain the EMAC4SYNC core 320 * The 405EX and 460EX contain the EMAC4SYNC core
318 */ 321 */
319#define EMAC_FTR_EMAC4SYNC 0x00000200 322#define EMAC_FTR_EMAC4SYNC 0x00000200
323/*
324 * Set if we need phy clock workaround for 460ex or 460gt
325 */
326#define EMAC_FTR_460EX_PHY_CLK_FIX 0x00000400
320 327
321 328
322/* Right now, we don't quite handle the always/possible masks on the 329/* Right now, we don't quite handle the always/possible masks on the
@@ -341,6 +348,10 @@ enum {
341#ifdef CONFIG_IBM_NEW_EMAC_RGMII 348#ifdef CONFIG_IBM_NEW_EMAC_RGMII
342 EMAC_FTR_HAS_RGMII | 349 EMAC_FTR_HAS_RGMII |
343#endif 350#endif
351#ifdef CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL
352 EMAC_FTR_NO_FLOW_CONTROL_40x |
353#endif
354 EMAC_FTR_460EX_PHY_CLK_FIX |
344 EMAC_FTR_440EP_PHY_CLK_FIX, 355 EMAC_FTR_440EP_PHY_CLK_FIX,
345}; 356};
346 357
diff --git a/drivers/net/ibm_newemac/mal.c b/drivers/net/ibm_newemac/mal.c
index 10c267b2b961..1839d3f154a3 100644
--- a/drivers/net/ibm_newemac/mal.c
+++ b/drivers/net/ibm_newemac/mal.c
@@ -28,6 +28,7 @@
28#include <linux/delay.h> 28#include <linux/delay.h>
29 29
30#include "core.h" 30#include "core.h"
31#include <asm/dcr-regs.h>
31 32
32static int mal_count; 33static int mal_count;
33 34
@@ -279,6 +280,10 @@ static irqreturn_t mal_txeob(int irq, void *dev_instance)
279 mal_schedule_poll(mal); 280 mal_schedule_poll(mal);
280 set_mal_dcrn(mal, MAL_TXEOBISR, r); 281 set_mal_dcrn(mal, MAL_TXEOBISR, r);
281 282
283 if (mal_has_feature(mal, MAL_FTR_CLEAR_ICINTSTAT))
284 mtdcri(SDR0, DCRN_SDR_ICINTSTAT,
285 (mfdcri(SDR0, DCRN_SDR_ICINTSTAT) | ICINTSTAT_ICTX));
286
282 return IRQ_HANDLED; 287 return IRQ_HANDLED;
283} 288}
284 289
@@ -293,6 +298,10 @@ static irqreturn_t mal_rxeob(int irq, void *dev_instance)
293 mal_schedule_poll(mal); 298 mal_schedule_poll(mal);
294 set_mal_dcrn(mal, MAL_RXEOBISR, r); 299 set_mal_dcrn(mal, MAL_RXEOBISR, r);
295 300
301 if (mal_has_feature(mal, MAL_FTR_CLEAR_ICINTSTAT))
302 mtdcri(SDR0, DCRN_SDR_ICINTSTAT,
303 (mfdcri(SDR0, DCRN_SDR_ICINTSTAT) | ICINTSTAT_ICRX));
304
296 return IRQ_HANDLED; 305 return IRQ_HANDLED;
297} 306}
298 307
@@ -336,6 +345,25 @@ static irqreturn_t mal_rxde(int irq, void *dev_instance)
336 return IRQ_HANDLED; 345 return IRQ_HANDLED;
337} 346}
338 347
348static irqreturn_t mal_int(int irq, void *dev_instance)
349{
350 struct mal_instance *mal = dev_instance;
351 u32 esr = get_mal_dcrn(mal, MAL_ESR);
352
353 if (esr & MAL_ESR_EVB) {
354 /* descriptor error */
355 if (esr & MAL_ESR_DE) {
356 if (esr & MAL_ESR_CIDT)
357 return mal_rxde(irq, dev_instance);
358 else
359 return mal_txde(irq, dev_instance);
360 } else { /* SERR */
361 return mal_serr(irq, dev_instance);
362 }
363 }
364 return IRQ_HANDLED;
365}
366
339void mal_poll_disable(struct mal_instance *mal, struct mal_commac *commac) 367void mal_poll_disable(struct mal_instance *mal, struct mal_commac *commac)
340{ 368{
341 /* Spinlock-type semantics: only one caller disable poll at a time */ 369 /* Spinlock-type semantics: only one caller disable poll at a time */
@@ -493,6 +521,8 @@ static int __devinit mal_probe(struct of_device *ofdev,
493 unsigned int dcr_base; 521 unsigned int dcr_base;
494 const u32 *prop; 522 const u32 *prop;
495 u32 cfg; 523 u32 cfg;
524 unsigned long irqflags;
525 irq_handler_t hdlr_serr, hdlr_txde, hdlr_rxde;
496 526
497 mal = kzalloc(sizeof(struct mal_instance), GFP_KERNEL); 527 mal = kzalloc(sizeof(struct mal_instance), GFP_KERNEL);
498 if (!mal) { 528 if (!mal) {
@@ -542,11 +572,21 @@ static int __devinit mal_probe(struct of_device *ofdev,
542 goto fail; 572 goto fail;
543 } 573 }
544 574
575 if (of_device_is_compatible(ofdev->node, "ibm,mcmal-405ez"))
576 mal->features |= (MAL_FTR_CLEAR_ICINTSTAT |
577 MAL_FTR_COMMON_ERR_INT);
578
545 mal->txeob_irq = irq_of_parse_and_map(ofdev->node, 0); 579 mal->txeob_irq = irq_of_parse_and_map(ofdev->node, 0);
546 mal->rxeob_irq = irq_of_parse_and_map(ofdev->node, 1); 580 mal->rxeob_irq = irq_of_parse_and_map(ofdev->node, 1);
547 mal->serr_irq = irq_of_parse_and_map(ofdev->node, 2); 581 mal->serr_irq = irq_of_parse_and_map(ofdev->node, 2);
548 mal->txde_irq = irq_of_parse_and_map(ofdev->node, 3); 582
549 mal->rxde_irq = irq_of_parse_and_map(ofdev->node, 4); 583 if (mal_has_feature(mal, MAL_FTR_COMMON_ERR_INT)) {
584 mal->txde_irq = mal->rxde_irq = mal->serr_irq;
585 } else {
586 mal->txde_irq = irq_of_parse_and_map(ofdev->node, 3);
587 mal->rxde_irq = irq_of_parse_and_map(ofdev->node, 4);
588 }
589
550 if (mal->txeob_irq == NO_IRQ || mal->rxeob_irq == NO_IRQ || 590 if (mal->txeob_irq == NO_IRQ || mal->rxeob_irq == NO_IRQ ||
551 mal->serr_irq == NO_IRQ || mal->txde_irq == NO_IRQ || 591 mal->serr_irq == NO_IRQ || mal->txde_irq == NO_IRQ ||
552 mal->rxde_irq == NO_IRQ) { 592 mal->rxde_irq == NO_IRQ) {
@@ -608,16 +648,26 @@ static int __devinit mal_probe(struct of_device *ofdev,
608 sizeof(struct mal_descriptor) * 648 sizeof(struct mal_descriptor) *
609 mal_rx_bd_offset(mal, i)); 649 mal_rx_bd_offset(mal, i));
610 650
611 err = request_irq(mal->serr_irq, mal_serr, 0, "MAL SERR", mal); 651 if (mal_has_feature(mal, MAL_FTR_COMMON_ERR_INT)) {
652 irqflags = IRQF_SHARED;
653 hdlr_serr = hdlr_txde = hdlr_rxde = mal_int;
654 } else {
655 irqflags = 0;
656 hdlr_serr = mal_serr;
657 hdlr_txde = mal_txde;
658 hdlr_rxde = mal_rxde;
659 }
660
661 err = request_irq(mal->serr_irq, hdlr_serr, irqflags, "MAL SERR", mal);
612 if (err) 662 if (err)
613 goto fail2; 663 goto fail2;
614 err = request_irq(mal->txde_irq, mal_txde, 0, "MAL TX DE", mal); 664 err = request_irq(mal->txde_irq, hdlr_txde, irqflags, "MAL TX DE", mal);
615 if (err) 665 if (err)
616 goto fail3; 666 goto fail3;
617 err = request_irq(mal->txeob_irq, mal_txeob, 0, "MAL TX EOB", mal); 667 err = request_irq(mal->txeob_irq, mal_txeob, 0, "MAL TX EOB", mal);
618 if (err) 668 if (err)
619 goto fail4; 669 goto fail4;
620 err = request_irq(mal->rxde_irq, mal_rxde, 0, "MAL RX DE", mal); 670 err = request_irq(mal->rxde_irq, hdlr_rxde, irqflags, "MAL RX DE", mal);
621 if (err) 671 if (err)
622 goto fail5; 672 goto fail5;
623 err = request_irq(mal->rxeob_irq, mal_rxeob, 0, "MAL RX EOB", mal); 673 err = request_irq(mal->rxeob_irq, mal_rxeob, 0, "MAL RX EOB", mal);
diff --git a/drivers/net/ibm_newemac/mal.h b/drivers/net/ibm_newemac/mal.h
index eaa7262dc079..0b2413839b78 100644
--- a/drivers/net/ibm_newemac/mal.h
+++ b/drivers/net/ibm_newemac/mal.h
@@ -213,6 +213,8 @@ struct mal_instance {
213 struct of_device *ofdev; 213 struct of_device *ofdev;
214 int index; 214 int index;
215 spinlock_t lock; 215 spinlock_t lock;
216
217 unsigned int features;
216}; 218};
217 219
218static inline u32 get_mal_dcrn(struct mal_instance *mal, int reg) 220static inline u32 get_mal_dcrn(struct mal_instance *mal, int reg)
@@ -225,6 +227,38 @@ static inline void set_mal_dcrn(struct mal_instance *mal, int reg, u32 val)
225 dcr_write(mal->dcr_host, reg, val); 227 dcr_write(mal->dcr_host, reg, val);
226} 228}
227 229
230/* Features of various MAL implementations */
231
232/* Set if you have interrupt coalescing and you have to clear the SDR
233 * register for TXEOB and RXEOB interrupts to work
234 */
235#define MAL_FTR_CLEAR_ICINTSTAT 0x00000001
236
237/* Set if your MAL has SERR, TXDE, and RXDE OR'd into a single UIC
238 * interrupt
239 */
240#define MAL_FTR_COMMON_ERR_INT 0x00000002
241
242enum {
243 MAL_FTRS_ALWAYS = 0,
244
245 MAL_FTRS_POSSIBLE =
246#ifdef CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT
247 MAL_FTR_CLEAR_ICINTSTAT |
248#endif
249#ifdef CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR
250 MAL_FTR_COMMON_ERR_INT |
251#endif
252 0,
253};
254
255static inline int mal_has_feature(struct mal_instance *dev,
256 unsigned long feature)
257{
258 return (MAL_FTRS_ALWAYS & feature) ||
259 (MAL_FTRS_POSSIBLE & dev->features & feature);
260}
261
228/* Register MAL devices */ 262/* Register MAL devices */
229int mal_init(void); 263int mal_init(void);
230void mal_exit(void); 264void mal_exit(void);
diff --git a/drivers/net/ibm_newemac/phy.c b/drivers/net/ibm_newemac/phy.c
index 37bfeea8788a..606db53ef78e 100644
--- a/drivers/net/ibm_newemac/phy.c
+++ b/drivers/net/ibm_newemac/phy.c
@@ -38,6 +38,16 @@ static inline void phy_write(struct mii_phy *phy, int reg, int val)
38 phy->mdio_write(phy->dev, phy->address, reg, val); 38 phy->mdio_write(phy->dev, phy->address, reg, val);
39} 39}
40 40
41static inline int gpcs_phy_read(struct mii_phy *phy, int reg)
42{
43 return phy->mdio_read(phy->dev, phy->gpcs_address, reg);
44}
45
46static inline void gpcs_phy_write(struct mii_phy *phy, int reg, int val)
47{
48 phy->mdio_write(phy->dev, phy->gpcs_address, reg, val);
49}
50
41int emac_mii_reset_phy(struct mii_phy *phy) 51int emac_mii_reset_phy(struct mii_phy *phy)
42{ 52{
43 int val; 53 int val;
@@ -62,6 +72,37 @@ int emac_mii_reset_phy(struct mii_phy *phy)
62 return limit <= 0; 72 return limit <= 0;
63} 73}
64 74
75int emac_mii_reset_gpcs(struct mii_phy *phy)
76{
77 int val;
78 int limit = 10000;
79
80 val = gpcs_phy_read(phy, MII_BMCR);
81 val &= ~(BMCR_ISOLATE | BMCR_ANENABLE);
82 val |= BMCR_RESET;
83 gpcs_phy_write(phy, MII_BMCR, val);
84
85 udelay(300);
86
87 while (limit--) {
88 val = gpcs_phy_read(phy, MII_BMCR);
89 if (val >= 0 && (val & BMCR_RESET) == 0)
90 break;
91 udelay(10);
92 }
93 if ((val & BMCR_ISOLATE) && limit > 0)
94 gpcs_phy_write(phy, MII_BMCR, val & ~BMCR_ISOLATE);
95
96 if (limit > 0 && phy->mode == PHY_MODE_SGMII) {
97 /* Configure GPCS interface to recommended setting for SGMII */
98 gpcs_phy_write(phy, 0x04, 0x8120); /* AsymPause, FDX */
99 gpcs_phy_write(phy, 0x07, 0x2801); /* msg_pg, toggle */
100 gpcs_phy_write(phy, 0x00, 0x0140); /* 1Gbps, FDX */
101 }
102
103 return limit <= 0;
104}
105
65static int genmii_setup_aneg(struct mii_phy *phy, u32 advertise) 106static int genmii_setup_aneg(struct mii_phy *phy, u32 advertise)
66{ 107{
67 int ctl, adv; 108 int ctl, adv;
@@ -332,6 +373,33 @@ static int m88e1111_init(struct mii_phy *phy)
332 return 0; 373 return 0;
333} 374}
334 375
376static int m88e1112_init(struct mii_phy *phy)
377{
378 /*
379 * Marvell 88E1112 PHY needs to have the SGMII MAC
380 * interace (page 2) properly configured to
381 * communicate with the 460EX/GT GPCS interface.
382 */
383
384 u16 reg_short;
385
386 pr_debug("%s: Marvell 88E1112 Ethernet\n", __func__);
387
388 /* Set access to Page 2 */
389 phy_write(phy, 0x16, 0x0002);
390
391 phy_write(phy, 0x00, 0x0040); /* 1Gbps */
392 reg_short = (u16)(phy_read(phy, 0x1a));
393 reg_short |= 0x8000; /* bypass Auto-Negotiation */
394 phy_write(phy, 0x1a, reg_short);
395 emac_mii_reset_phy(phy); /* reset MAC interface */
396
397 /* Reset access to Page 0 */
398 phy_write(phy, 0x16, 0x0000);
399
400 return 0;
401}
402
335static int et1011c_init(struct mii_phy *phy) 403static int et1011c_init(struct mii_phy *phy)
336{ 404{
337 u16 reg_short; 405 u16 reg_short;
@@ -384,11 +452,27 @@ static struct mii_phy_def m88e1111_phy_def = {
384 .ops = &m88e1111_phy_ops, 452 .ops = &m88e1111_phy_ops,
385}; 453};
386 454
455static struct mii_phy_ops m88e1112_phy_ops = {
456 .init = m88e1112_init,
457 .setup_aneg = genmii_setup_aneg,
458 .setup_forced = genmii_setup_forced,
459 .poll_link = genmii_poll_link,
460 .read_link = genmii_read_link
461};
462
463static struct mii_phy_def m88e1112_phy_def = {
464 .phy_id = 0x01410C90,
465 .phy_id_mask = 0x0ffffff0,
466 .name = "Marvell 88E1112 Ethernet",
467 .ops = &m88e1112_phy_ops,
468};
469
387static struct mii_phy_def *mii_phy_table[] = { 470static struct mii_phy_def *mii_phy_table[] = {
388 &et1011c_phy_def, 471 &et1011c_phy_def,
389 &cis8201_phy_def, 472 &cis8201_phy_def,
390 &bcm5248_phy_def, 473 &bcm5248_phy_def,
391 &m88e1111_phy_def, 474 &m88e1111_phy_def,
475 &m88e1112_phy_def,
392 &genmii_phy_def, 476 &genmii_phy_def,
393 NULL 477 NULL
394}; 478};
diff --git a/drivers/net/ibm_newemac/phy.h b/drivers/net/ibm_newemac/phy.h
index 1b65c81f6557..5d2bf4cbe50b 100644
--- a/drivers/net/ibm_newemac/phy.h
+++ b/drivers/net/ibm_newemac/phy.h
@@ -57,6 +57,7 @@ struct mii_phy {
57 or determined automaticaly */ 57 or determined automaticaly */
58 int address; /* PHY address */ 58 int address; /* PHY address */
59 int mode; /* PHY mode */ 59 int mode; /* PHY mode */
60 int gpcs_address; /* GPCS PHY address */
60 61
61 /* 1: autoneg enabled, 0: disabled */ 62 /* 1: autoneg enabled, 0: disabled */
62 int autoneg; 63 int autoneg;
@@ -81,5 +82,6 @@ struct mii_phy {
81 */ 82 */
82int emac_mii_phy_probe(struct mii_phy *phy, int address); 83int emac_mii_phy_probe(struct mii_phy *phy, int address);
83int emac_mii_reset_phy(struct mii_phy *phy); 84int emac_mii_reset_phy(struct mii_phy *phy);
85int emac_mii_reset_gpcs(struct mii_phy *phy);
84 86
85#endif /* __IBM_NEWEMAC_PHY_H */ 87#endif /* __IBM_NEWEMAC_PHY_H */