diff options
Diffstat (limited to 'arch/mips')
53 files changed, 3548 insertions, 612 deletions
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index d21df5f1b1f3..b4c4eaa5dd26 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig | |||
@@ -330,6 +330,7 @@ config SGI_IP22 | |||
330 | select SGI_HAS_DS1286 | 330 | select SGI_HAS_DS1286 |
331 | select SGI_HAS_I8042 | 331 | select SGI_HAS_I8042 |
332 | select SGI_HAS_INDYDOG | 332 | select SGI_HAS_INDYDOG |
333 | select SGI_HAS_HAL2 | ||
333 | select SGI_HAS_SEEQ | 334 | select SGI_HAS_SEEQ |
334 | select SGI_HAS_WD93 | 335 | select SGI_HAS_WD93 |
335 | select SGI_HAS_ZILOG | 336 | select SGI_HAS_ZILOG |
@@ -386,7 +387,6 @@ config SGI_IP28 | |||
386 | select SGI_HAS_I8042 | 387 | select SGI_HAS_I8042 |
387 | select SGI_HAS_INDYDOG | 388 | select SGI_HAS_INDYDOG |
388 | select SGI_HAS_HAL2 | 389 | select SGI_HAS_HAL2 |
389 | select SGI_HAS_HAL2 | ||
390 | select SGI_HAS_SEEQ | 390 | select SGI_HAS_SEEQ |
391 | select SGI_HAS_WD93 | 391 | select SGI_HAS_WD93 |
392 | select SGI_HAS_ZILOG | 392 | select SGI_HAS_ZILOG |
@@ -558,6 +558,24 @@ config MACH_TX39XX | |||
558 | config MACH_TX49XX | 558 | config MACH_TX49XX |
559 | bool "Toshiba TX49 series based machines" | 559 | bool "Toshiba TX49 series based machines" |
560 | 560 | ||
561 | config MIKROTIK_RB532 | ||
562 | bool "Mikrotik RB532 boards" | ||
563 | select CEVT_R4K | ||
564 | select CSRC_R4K | ||
565 | select DMA_NONCOHERENT | ||
566 | select GENERIC_HARDIRQS_NO__DO_IRQ | ||
567 | select HW_HAS_PCI | ||
568 | select IRQ_CPU | ||
569 | select SYS_HAS_CPU_MIPS32_R1 | ||
570 | select SYS_SUPPORTS_32BIT_KERNEL | ||
571 | select SYS_SUPPORTS_LITTLE_ENDIAN | ||
572 | select SWAP_IO_SPACE | ||
573 | select BOOT_RAW | ||
574 | select GENERIC_GPIO | ||
575 | help | ||
576 | Support the Mikrotik(tm) RouterBoard 532 series, | ||
577 | based on the IDT RC32434 SoC. | ||
578 | |||
561 | config WR_PPMC | 579 | config WR_PPMC |
562 | bool "Wind River PPMC board" | 580 | bool "Wind River PPMC board" |
563 | select CEVT_R4K | 581 | select CEVT_R4K |
@@ -695,7 +713,7 @@ config CSRC_SB1250 | |||
695 | 713 | ||
696 | config GPIO_TXX9 | 714 | config GPIO_TXX9 |
697 | select GENERIC_GPIO | 715 | select GENERIC_GPIO |
698 | select HAVE_GPIO_LIB | 716 | select ARCH_REQUIRE_GPIOLIB |
699 | bool | 717 | bool |
700 | 718 | ||
701 | config CFE | 719 | config CFE |
@@ -899,7 +917,7 @@ config BOOT_ELF32 | |||
899 | 917 | ||
900 | config MIPS_L1_CACHE_SHIFT | 918 | config MIPS_L1_CACHE_SHIFT |
901 | int | 919 | int |
902 | default "4" if MACH_DECSTATION | 920 | default "4" if MACH_DECSTATION || MIKROTIK_RB532 |
903 | default "7" if SGI_IP22 || SGI_IP27 || SGI_IP28 || SNI_RM | 921 | default "7" if SGI_IP22 || SGI_IP27 || SGI_IP28 || SNI_RM |
904 | default "4" if PMC_MSP4200_EVAL | 922 | default "4" if PMC_MSP4200_EVAL |
905 | default "5" | 923 | default "5" |
diff --git a/arch/mips/Makefile b/arch/mips/Makefile index 356453322b49..9aab51caf16a 100644 --- a/arch/mips/Makefile +++ b/arch/mips/Makefile | |||
@@ -560,6 +560,13 @@ load-$(CONFIG_MACH_TX49XX) += 0xffffffff80100000 | |||
560 | core-$(CONFIG_TOSHIBA_JMR3927) += arch/mips/txx9/jmr3927/ | 560 | core-$(CONFIG_TOSHIBA_JMR3927) += arch/mips/txx9/jmr3927/ |
561 | 561 | ||
562 | # | 562 | # |
563 | # Routerboard 532 board | ||
564 | # | ||
565 | core-$(CONFIG_MIKROTIK_RB532) += arch/mips/rb532/ | ||
566 | cflags-$(CONFIG_MIKROTIK_RB532) += -Iinclude/asm-mips/mach-rc32434 | ||
567 | load-$(CONFIG_MIKROTIK_RB532) += 0xffffffff80101000 | ||
568 | |||
569 | # | ||
563 | # Toshiba RBTX4927 board or | 570 | # Toshiba RBTX4927 board or |
564 | # Toshiba RBTX4937 board | 571 | # Toshiba RBTX4937 board |
565 | # | 572 | # |
diff --git a/arch/mips/au1000/common/power.c b/arch/mips/au1000/common/power.c index 2166b9e1e80c..bd854a6d1d89 100644 --- a/arch/mips/au1000/common/power.c +++ b/arch/mips/au1000/common/power.c | |||
@@ -31,7 +31,6 @@ | |||
31 | 31 | ||
32 | #include <linux/init.h> | 32 | #include <linux/init.h> |
33 | #include <linux/pm.h> | 33 | #include <linux/pm.h> |
34 | #include <linux/pm_legacy.h> | ||
35 | #include <linux/sysctl.h> | 34 | #include <linux/sysctl.h> |
36 | #include <linux/jiffies.h> | 35 | #include <linux/jiffies.h> |
37 | 36 | ||
diff --git a/arch/mips/cobalt/setup.c b/arch/mips/cobalt/setup.c index dd23beb8604f..b51644227241 100644 --- a/arch/mips/cobalt/setup.c +++ b/arch/mips/cobalt/setup.c | |||
@@ -81,8 +81,8 @@ void __init plat_mem_setup(void) | |||
81 | 81 | ||
82 | set_io_port_base(CKSEG1ADDR(GT_DEF_PCI0_IO_BASE)); | 82 | set_io_port_base(CKSEG1ADDR(GT_DEF_PCI0_IO_BASE)); |
83 | 83 | ||
84 | /* I/O port resource must include LCD/buttons */ | 84 | /* I/O port resource */ |
85 | ioport_resource.end = 0x0fffffff; | 85 | ioport_resource.end = 0x01ffffff; |
86 | 86 | ||
87 | /* These resources have been reserved by VIA SuperI/O chip. */ | 87 | /* These resources have been reserved by VIA SuperI/O chip. */ |
88 | for (i = 0; i < ARRAY_SIZE(cobalt_reserved_resources); i++) | 88 | for (i = 0; i < ARRAY_SIZE(cobalt_reserved_resources); i++) |
diff --git a/arch/mips/configs/rb532_defconfig b/arch/mips/configs/rb532_defconfig new file mode 100644 index 000000000000..f28dc32974e5 --- /dev/null +++ b/arch/mips/configs/rb532_defconfig | |||
@@ -0,0 +1,1314 @@ | |||
1 | # | ||
2 | # Automatically generated make config: don't edit | ||
3 | # Linux kernel version: 2.6.25 | ||
4 | # Mon Apr 28 12:24:17 2008 | ||
5 | # | ||
6 | CONFIG_MIPS=y | ||
7 | |||
8 | # | ||
9 | # Machine selection | ||
10 | # | ||
11 | # CONFIG_MACH_ALCHEMY is not set | ||
12 | # CONFIG_BASLER_EXCITE is not set | ||
13 | # CONFIG_BCM47XX is not set | ||
14 | # CONFIG_MIPS_COBALT is not set | ||
15 | # CONFIG_MACH_DECSTATION is not set | ||
16 | # CONFIG_MACH_JAZZ is not set | ||
17 | # CONFIG_LASAT is not set | ||
18 | # CONFIG_LEMOTE_FULONG is not set | ||
19 | # CONFIG_MIPS_ATLAS is not set | ||
20 | # CONFIG_MIPS_MALTA is not set | ||
21 | # CONFIG_MIPS_SEAD is not set | ||
22 | # CONFIG_MIPS_SIM is not set | ||
23 | # CONFIG_MARKEINS is not set | ||
24 | # CONFIG_MACH_VR41XX is not set | ||
25 | # CONFIG_PNX8550_JBS is not set | ||
26 | # CONFIG_PNX8550_STB810 is not set | ||
27 | # CONFIG_PMC_MSP is not set | ||
28 | # CONFIG_PMC_YOSEMITE is not set | ||
29 | # CONFIG_SGI_IP22 is not set | ||
30 | # CONFIG_SGI_IP27 is not set | ||
31 | # CONFIG_SGI_IP28 is not set | ||
32 | # CONFIG_SGI_IP32 is not set | ||
33 | # CONFIG_SIBYTE_CRHINE is not set | ||
34 | # CONFIG_SIBYTE_CARMEL is not set | ||
35 | # CONFIG_SIBYTE_CRHONE is not set | ||
36 | # CONFIG_SIBYTE_RHONE is not set | ||
37 | # CONFIG_SIBYTE_SWARM is not set | ||
38 | # CONFIG_SIBYTE_LITTLESUR is not set | ||
39 | # CONFIG_SIBYTE_SENTOSA is not set | ||
40 | # CONFIG_SIBYTE_BIGSUR is not set | ||
41 | # CONFIG_SNI_RM is not set | ||
42 | # CONFIG_TOSHIBA_JMR3927 is not set | ||
43 | CONFIG_MIKROTIK_RB532=y | ||
44 | # CONFIG_TOSHIBA_RBTX4927 is not set | ||
45 | # CONFIG_TOSHIBA_RBTX4938 is not set | ||
46 | # CONFIG_WR_PPMC is not set | ||
47 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | ||
48 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | ||
49 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | ||
50 | CONFIG_ARCH_SUPPORTS_OPROFILE=y | ||
51 | CONFIG_GENERIC_FIND_NEXT_BIT=y | ||
52 | CONFIG_GENERIC_HWEIGHT=y | ||
53 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
54 | CONFIG_GENERIC_CLOCKEVENTS=y | ||
55 | CONFIG_GENERIC_TIME=y | ||
56 | CONFIG_GENERIC_CMOS_UPDATE=y | ||
57 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | ||
58 | CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y | ||
59 | CONFIG_BOOT_RAW=y | ||
60 | CONFIG_CEVT_R4K=y | ||
61 | CONFIG_CSRC_R4K=y | ||
62 | CONFIG_DMA_NONCOHERENT=y | ||
63 | CONFIG_DMA_NEED_PCI_MAP_STATE=y | ||
64 | # CONFIG_HOTPLUG_CPU is not set | ||
65 | # CONFIG_NO_IOPORT is not set | ||
66 | CONFIG_GENERIC_GPIO=y | ||
67 | # CONFIG_CPU_BIG_ENDIAN is not set | ||
68 | CONFIG_CPU_LITTLE_ENDIAN=y | ||
69 | CONFIG_SYS_SUPPORTS_LITTLE_ENDIAN=y | ||
70 | CONFIG_IRQ_CPU=y | ||
71 | CONFIG_SWAP_IO_SPACE=y | ||
72 | CONFIG_MIPS_L1_CACHE_SHIFT=4 | ||
73 | |||
74 | # | ||
75 | # CPU selection | ||
76 | # | ||
77 | # CONFIG_CPU_LOONGSON2 is not set | ||
78 | CONFIG_CPU_MIPS32_R1=y | ||
79 | # CONFIG_CPU_MIPS32_R2 is not set | ||
80 | # CONFIG_CPU_MIPS64_R1 is not set | ||
81 | # CONFIG_CPU_MIPS64_R2 is not set | ||
82 | # CONFIG_CPU_R3000 is not set | ||
83 | # CONFIG_CPU_TX39XX is not set | ||
84 | # CONFIG_CPU_VR41XX is not set | ||
85 | # CONFIG_CPU_R4300 is not set | ||
86 | # CONFIG_CPU_R4X00 is not set | ||
87 | # CONFIG_CPU_TX49XX is not set | ||
88 | # CONFIG_CPU_R5000 is not set | ||
89 | # CONFIG_CPU_R5432 is not set | ||
90 | # CONFIG_CPU_R6000 is not set | ||
91 | # CONFIG_CPU_NEVADA is not set | ||
92 | # CONFIG_CPU_R8000 is not set | ||
93 | # CONFIG_CPU_R10000 is not set | ||
94 | # CONFIG_CPU_RM7000 is not set | ||
95 | # CONFIG_CPU_RM9000 is not set | ||
96 | # CONFIG_CPU_SB1 is not set | ||
97 | CONFIG_SYS_HAS_CPU_MIPS32_R1=y | ||
98 | CONFIG_CPU_MIPS32=y | ||
99 | CONFIG_CPU_MIPSR1=y | ||
100 | CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y | ||
101 | CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y | ||
102 | |||
103 | # | ||
104 | # Kernel type | ||
105 | # | ||
106 | CONFIG_32BIT=y | ||
107 | # CONFIG_64BIT is not set | ||
108 | CONFIG_PAGE_SIZE_4KB=y | ||
109 | # CONFIG_PAGE_SIZE_8KB is not set | ||
110 | # CONFIG_PAGE_SIZE_16KB is not set | ||
111 | # CONFIG_PAGE_SIZE_64KB is not set | ||
112 | CONFIG_CPU_HAS_PREFETCH=y | ||
113 | CONFIG_MIPS_MT_DISABLED=y | ||
114 | # CONFIG_MIPS_MT_SMP is not set | ||
115 | # CONFIG_MIPS_MT_SMTC is not set | ||
116 | CONFIG_CPU_HAS_LLSC=y | ||
117 | CONFIG_CPU_HAS_SYNC=y | ||
118 | CONFIG_GENERIC_HARDIRQS=y | ||
119 | CONFIG_GENERIC_IRQ_PROBE=y | ||
120 | CONFIG_CPU_SUPPORTS_HIGHMEM=y | ||
121 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
122 | CONFIG_ARCH_POPULATES_NODE_MAP=y | ||
123 | CONFIG_SELECT_MEMORY_MODEL=y | ||
124 | CONFIG_FLATMEM_MANUAL=y | ||
125 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
126 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
127 | CONFIG_FLATMEM=y | ||
128 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
129 | # CONFIG_SPARSEMEM_STATIC is not set | ||
130 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set | ||
131 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
132 | # CONFIG_RESOURCES_64BIT is not set | ||
133 | CONFIG_ZONE_DMA_FLAG=0 | ||
134 | CONFIG_VIRT_TO_BUS=y | ||
135 | CONFIG_TICK_ONESHOT=y | ||
136 | CONFIG_NO_HZ=y | ||
137 | CONFIG_HIGH_RES_TIMERS=y | ||
138 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | ||
139 | # CONFIG_HZ_48 is not set | ||
140 | CONFIG_HZ_100=y | ||
141 | # CONFIG_HZ_128 is not set | ||
142 | # CONFIG_HZ_250 is not set | ||
143 | # CONFIG_HZ_256 is not set | ||
144 | # CONFIG_HZ_1000 is not set | ||
145 | # CONFIG_HZ_1024 is not set | ||
146 | CONFIG_SYS_SUPPORTS_ARBIT_HZ=y | ||
147 | CONFIG_HZ=100 | ||
148 | CONFIG_PREEMPT_NONE=y | ||
149 | # CONFIG_PREEMPT_VOLUNTARY is not set | ||
150 | # CONFIG_PREEMPT is not set | ||
151 | # CONFIG_KEXEC is not set | ||
152 | # CONFIG_SECCOMP is not set | ||
153 | CONFIG_LOCKDEP_SUPPORT=y | ||
154 | CONFIG_STACKTRACE_SUPPORT=y | ||
155 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
156 | |||
157 | # | ||
158 | # General setup | ||
159 | # | ||
160 | CONFIG_EXPERIMENTAL=y | ||
161 | CONFIG_BROKEN_ON_SMP=y | ||
162 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
163 | CONFIG_LOCALVERSION="" | ||
164 | # CONFIG_LOCALVERSION_AUTO is not set | ||
165 | CONFIG_SWAP=y | ||
166 | CONFIG_SYSVIPC=y | ||
167 | CONFIG_SYSVIPC_SYSCTL=y | ||
168 | # CONFIG_POSIX_MQUEUE is not set | ||
169 | CONFIG_BSD_PROCESS_ACCT=y | ||
170 | # CONFIG_BSD_PROCESS_ACCT_V3 is not set | ||
171 | # CONFIG_TASKSTATS is not set | ||
172 | # CONFIG_AUDIT is not set | ||
173 | CONFIG_IKCONFIG=y | ||
174 | CONFIG_IKCONFIG_PROC=y | ||
175 | CONFIG_LOG_BUF_SHIFT=14 | ||
176 | # CONFIG_CGROUPS is not set | ||
177 | CONFIG_GROUP_SCHED=y | ||
178 | CONFIG_FAIR_GROUP_SCHED=y | ||
179 | # CONFIG_RT_GROUP_SCHED is not set | ||
180 | CONFIG_USER_SCHED=y | ||
181 | # CONFIG_CGROUP_SCHED is not set | ||
182 | CONFIG_SYSFS_DEPRECATED=y | ||
183 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
184 | # CONFIG_RELAY is not set | ||
185 | # CONFIG_NAMESPACES is not set | ||
186 | CONFIG_BLK_DEV_INITRD=y | ||
187 | CONFIG_INITRAMFS_SOURCE="" | ||
188 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
189 | CONFIG_SYSCTL=y | ||
190 | CONFIG_EMBEDDED=y | ||
191 | CONFIG_SYSCTL_SYSCALL=y | ||
192 | # CONFIG_KALLSYMS is not set | ||
193 | CONFIG_HOTPLUG=y | ||
194 | CONFIG_PRINTK=y | ||
195 | CONFIG_BUG=y | ||
196 | # CONFIG_ELF_CORE is not set | ||
197 | CONFIG_COMPAT_BRK=y | ||
198 | CONFIG_BASE_FULL=y | ||
199 | CONFIG_FUTEX=y | ||
200 | CONFIG_ANON_INODES=y | ||
201 | CONFIG_EPOLL=y | ||
202 | CONFIG_SIGNALFD=y | ||
203 | CONFIG_TIMERFD=y | ||
204 | CONFIG_EVENTFD=y | ||
205 | CONFIG_SHMEM=y | ||
206 | # CONFIG_VM_EVENT_COUNTERS is not set | ||
207 | CONFIG_SLAB=y | ||
208 | # CONFIG_SLUB is not set | ||
209 | # CONFIG_SLOB is not set | ||
210 | # CONFIG_PROFILING is not set | ||
211 | # CONFIG_MARKERS is not set | ||
212 | CONFIG_HAVE_OPROFILE=y | ||
213 | # CONFIG_HAVE_KPROBES is not set | ||
214 | # CONFIG_HAVE_KRETPROBES is not set | ||
215 | CONFIG_PROC_PAGE_MONITOR=y | ||
216 | CONFIG_SLABINFO=y | ||
217 | CONFIG_RT_MUTEXES=y | ||
218 | # CONFIG_TINY_SHMEM is not set | ||
219 | CONFIG_BASE_SMALL=0 | ||
220 | CONFIG_MODULES=y | ||
221 | CONFIG_MODULE_UNLOAD=y | ||
222 | # CONFIG_MODULE_FORCE_UNLOAD is not set | ||
223 | # CONFIG_MODVERSIONS is not set | ||
224 | # CONFIG_MODULE_SRCVERSION_ALL is not set | ||
225 | # CONFIG_KMOD is not set | ||
226 | CONFIG_BLOCK=y | ||
227 | # CONFIG_LBD is not set | ||
228 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
229 | # CONFIG_LSF is not set | ||
230 | # CONFIG_BLK_DEV_BSG is not set | ||
231 | |||
232 | # | ||
233 | # IO Schedulers | ||
234 | # | ||
235 | CONFIG_IOSCHED_NOOP=y | ||
236 | # CONFIG_IOSCHED_AS is not set | ||
237 | CONFIG_IOSCHED_DEADLINE=y | ||
238 | # CONFIG_IOSCHED_CFQ is not set | ||
239 | # CONFIG_DEFAULT_AS is not set | ||
240 | CONFIG_DEFAULT_DEADLINE=y | ||
241 | # CONFIG_DEFAULT_CFQ is not set | ||
242 | # CONFIG_DEFAULT_NOOP is not set | ||
243 | CONFIG_DEFAULT_IOSCHED="deadline" | ||
244 | CONFIG_CLASSIC_RCU=y | ||
245 | |||
246 | # | ||
247 | # Bus options (PCI, PCMCIA, EISA, ISA, TC) | ||
248 | # | ||
249 | CONFIG_HW_HAS_PCI=y | ||
250 | CONFIG_PCI=y | ||
251 | CONFIG_PCI_DOMAINS=y | ||
252 | # CONFIG_ARCH_SUPPORTS_MSI is not set | ||
253 | CONFIG_PCI_LEGACY=y | ||
254 | CONFIG_MMU=y | ||
255 | # CONFIG_PCCARD is not set | ||
256 | # CONFIG_HOTPLUG_PCI is not set | ||
257 | |||
258 | # | ||
259 | # Executable file formats | ||
260 | # | ||
261 | CONFIG_BINFMT_ELF=y | ||
262 | # CONFIG_BINFMT_MISC is not set | ||
263 | CONFIG_TRAD_SIGNALS=y | ||
264 | |||
265 | # | ||
266 | # Power management options | ||
267 | # | ||
268 | CONFIG_ARCH_SUSPEND_POSSIBLE=y | ||
269 | # CONFIG_PM is not set | ||
270 | |||
271 | # | ||
272 | # Networking | ||
273 | # | ||
274 | CONFIG_NET=y | ||
275 | |||
276 | # | ||
277 | # Networking options | ||
278 | # | ||
279 | CONFIG_PACKET=y | ||
280 | CONFIG_PACKET_MMAP=y | ||
281 | CONFIG_UNIX=y | ||
282 | # CONFIG_NET_KEY is not set | ||
283 | CONFIG_INET=y | ||
284 | CONFIG_IP_MULTICAST=y | ||
285 | CONFIG_IP_ADVANCED_ROUTER=y | ||
286 | CONFIG_ASK_IP_FIB_HASH=y | ||
287 | # CONFIG_IP_FIB_TRIE is not set | ||
288 | CONFIG_IP_FIB_HASH=y | ||
289 | CONFIG_IP_MULTIPLE_TABLES=y | ||
290 | CONFIG_IP_ROUTE_MULTIPATH=y | ||
291 | CONFIG_IP_ROUTE_VERBOSE=y | ||
292 | # CONFIG_IP_PNP is not set | ||
293 | # CONFIG_NET_IPIP is not set | ||
294 | # CONFIG_NET_IPGRE is not set | ||
295 | # CONFIG_IP_MROUTE is not set | ||
296 | CONFIG_ARPD=y | ||
297 | CONFIG_SYN_COOKIES=y | ||
298 | # CONFIG_INET_AH is not set | ||
299 | # CONFIG_INET_ESP is not set | ||
300 | # CONFIG_INET_IPCOMP is not set | ||
301 | # CONFIG_INET_XFRM_TUNNEL is not set | ||
302 | # CONFIG_INET_TUNNEL is not set | ||
303 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set | ||
304 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set | ||
305 | # CONFIG_INET_XFRM_MODE_BEET is not set | ||
306 | # CONFIG_INET_LRO is not set | ||
307 | CONFIG_INET_DIAG=m | ||
308 | CONFIG_INET_TCP_DIAG=m | ||
309 | CONFIG_TCP_CONG_ADVANCED=y | ||
310 | CONFIG_TCP_CONG_BIC=m | ||
311 | CONFIG_TCP_CONG_CUBIC=m | ||
312 | CONFIG_TCP_CONG_WESTWOOD=m | ||
313 | CONFIG_TCP_CONG_HTCP=m | ||
314 | CONFIG_TCP_CONG_HSTCP=m | ||
315 | CONFIG_TCP_CONG_HYBLA=m | ||
316 | CONFIG_TCP_CONG_VEGAS=y | ||
317 | CONFIG_TCP_CONG_SCALABLE=m | ||
318 | CONFIG_TCP_CONG_LP=m | ||
319 | CONFIG_TCP_CONG_VENO=m | ||
320 | CONFIG_TCP_CONG_YEAH=m | ||
321 | CONFIG_TCP_CONG_ILLINOIS=m | ||
322 | # CONFIG_DEFAULT_BIC is not set | ||
323 | # CONFIG_DEFAULT_CUBIC is not set | ||
324 | # CONFIG_DEFAULT_HTCP is not set | ||
325 | CONFIG_DEFAULT_VEGAS=y | ||
326 | # CONFIG_DEFAULT_WESTWOOD is not set | ||
327 | # CONFIG_DEFAULT_RENO is not set | ||
328 | CONFIG_DEFAULT_TCP_CONG="vegas" | ||
329 | # CONFIG_TCP_MD5SIG is not set | ||
330 | # CONFIG_IP_VS is not set | ||
331 | # CONFIG_IPV6 is not set | ||
332 | # CONFIG_NETWORK_SECMARK is not set | ||
333 | CONFIG_NETFILTER=y | ||
334 | # CONFIG_NETFILTER_DEBUG is not set | ||
335 | CONFIG_NETFILTER_ADVANCED=y | ||
336 | # CONFIG_BRIDGE_NETFILTER is not set | ||
337 | |||
338 | # | ||
339 | # Core Netfilter Configuration | ||
340 | # | ||
341 | # CONFIG_NETFILTER_NETLINK_QUEUE is not set | ||
342 | # CONFIG_NETFILTER_NETLINK_LOG is not set | ||
343 | CONFIG_NF_CONNTRACK=y | ||
344 | CONFIG_NF_CT_ACCT=y | ||
345 | CONFIG_NF_CONNTRACK_MARK=y | ||
346 | # CONFIG_NF_CONNTRACK_EVENTS is not set | ||
347 | # CONFIG_NF_CT_PROTO_DCCP is not set | ||
348 | # CONFIG_NF_CT_PROTO_SCTP is not set | ||
349 | # CONFIG_NF_CT_PROTO_UDPLITE is not set | ||
350 | # CONFIG_NF_CONNTRACK_AMANDA is not set | ||
351 | CONFIG_NF_CONNTRACK_FTP=m | ||
352 | # CONFIG_NF_CONNTRACK_H323 is not set | ||
353 | CONFIG_NF_CONNTRACK_IRC=m | ||
354 | # CONFIG_NF_CONNTRACK_NETBIOS_NS is not set | ||
355 | # CONFIG_NF_CONNTRACK_PPTP is not set | ||
356 | # CONFIG_NF_CONNTRACK_SANE is not set | ||
357 | # CONFIG_NF_CONNTRACK_SIP is not set | ||
358 | CONFIG_NF_CONNTRACK_TFTP=m | ||
359 | # CONFIG_NF_CT_NETLINK is not set | ||
360 | CONFIG_NETFILTER_XTABLES=y | ||
361 | # CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set | ||
362 | # CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set | ||
363 | # CONFIG_NETFILTER_XT_TARGET_DSCP is not set | ||
364 | # CONFIG_NETFILTER_XT_TARGET_MARK is not set | ||
365 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | ||
366 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m | ||
367 | # CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set | ||
368 | # CONFIG_NETFILTER_XT_TARGET_RATEEST is not set | ||
369 | CONFIG_NETFILTER_XT_TARGET_TRACE=m | ||
370 | # CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set | ||
371 | # CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set | ||
372 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m | ||
373 | # CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set | ||
374 | CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m | ||
375 | # CONFIG_NETFILTER_XT_MATCH_CONNMARK is not set | ||
376 | # CONFIG_NETFILTER_XT_MATCH_CONNTRACK is not set | ||
377 | CONFIG_NETFILTER_XT_MATCH_DCCP=m | ||
378 | # CONFIG_NETFILTER_XT_MATCH_DSCP is not set | ||
379 | # CONFIG_NETFILTER_XT_MATCH_ESP is not set | ||
380 | # CONFIG_NETFILTER_XT_MATCH_HELPER is not set | ||
381 | # CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set | ||
382 | # CONFIG_NETFILTER_XT_MATCH_LENGTH is not set | ||
383 | CONFIG_NETFILTER_XT_MATCH_LIMIT=y | ||
384 | # CONFIG_NETFILTER_XT_MATCH_MAC is not set | ||
385 | # CONFIG_NETFILTER_XT_MATCH_MARK is not set | ||
386 | # CONFIG_NETFILTER_XT_MATCH_OWNER is not set | ||
387 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=y | ||
388 | # CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set | ||
389 | # CONFIG_NETFILTER_XT_MATCH_QUOTA is not set | ||
390 | # CONFIG_NETFILTER_XT_MATCH_RATEEST is not set | ||
391 | CONFIG_NETFILTER_XT_MATCH_REALM=m | ||
392 | CONFIG_NETFILTER_XT_MATCH_SCTP=m | ||
393 | CONFIG_NETFILTER_XT_MATCH_STATE=y | ||
394 | # CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set | ||
395 | # CONFIG_NETFILTER_XT_MATCH_STRING is not set | ||
396 | # CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set | ||
397 | # CONFIG_NETFILTER_XT_MATCH_TIME is not set | ||
398 | CONFIG_NETFILTER_XT_MATCH_U32=m | ||
399 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | ||
400 | |||
401 | # | ||
402 | # IP: Netfilter Configuration | ||
403 | # | ||
404 | CONFIG_NF_CONNTRACK_IPV4=y | ||
405 | CONFIG_NF_CONNTRACK_PROC_COMPAT=y | ||
406 | # CONFIG_IP_NF_QUEUE is not set | ||
407 | CONFIG_IP_NF_IPTABLES=y | ||
408 | # CONFIG_IP_NF_MATCH_RECENT is not set | ||
409 | # CONFIG_IP_NF_MATCH_ECN is not set | ||
410 | # CONFIG_IP_NF_MATCH_AH is not set | ||
411 | # CONFIG_IP_NF_MATCH_TTL is not set | ||
412 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | ||
413 | CONFIG_IP_NF_FILTER=y | ||
414 | CONFIG_IP_NF_TARGET_REJECT=y | ||
415 | # CONFIG_IP_NF_TARGET_LOG is not set | ||
416 | # CONFIG_IP_NF_TARGET_ULOG is not set | ||
417 | CONFIG_NF_NAT=y | ||
418 | CONFIG_NF_NAT_NEEDED=y | ||
419 | CONFIG_IP_NF_TARGET_MASQUERADE=y | ||
420 | # CONFIG_IP_NF_TARGET_REDIRECT is not set | ||
421 | # CONFIG_IP_NF_TARGET_NETMAP is not set | ||
422 | # CONFIG_NF_NAT_SNMP_BASIC is not set | ||
423 | CONFIG_NF_NAT_FTP=m | ||
424 | CONFIG_NF_NAT_IRC=m | ||
425 | CONFIG_NF_NAT_TFTP=m | ||
426 | # CONFIG_NF_NAT_AMANDA is not set | ||
427 | # CONFIG_NF_NAT_PPTP is not set | ||
428 | # CONFIG_NF_NAT_H323 is not set | ||
429 | # CONFIG_NF_NAT_SIP is not set | ||
430 | CONFIG_IP_NF_MANGLE=y | ||
431 | # CONFIG_IP_NF_TARGET_ECN is not set | ||
432 | # CONFIG_IP_NF_TARGET_TTL is not set | ||
433 | # CONFIG_IP_NF_TARGET_CLUSTERIP is not set | ||
434 | CONFIG_IP_NF_RAW=m | ||
435 | # CONFIG_IP_NF_ARPTABLES is not set | ||
436 | # CONFIG_IP_DCCP is not set | ||
437 | # CONFIG_IP_SCTP is not set | ||
438 | # CONFIG_TIPC is not set | ||
439 | # CONFIG_ATM is not set | ||
440 | CONFIG_BRIDGE=y | ||
441 | CONFIG_VLAN_8021Q=y | ||
442 | # CONFIG_DECNET is not set | ||
443 | CONFIG_LLC=y | ||
444 | CONFIG_LLC2=m | ||
445 | # CONFIG_IPX is not set | ||
446 | # CONFIG_ATALK is not set | ||
447 | # CONFIG_X25 is not set | ||
448 | # CONFIG_LAPB is not set | ||
449 | # CONFIG_ECONET is not set | ||
450 | # CONFIG_WAN_ROUTER is not set | ||
451 | CONFIG_NET_SCHED=y | ||
452 | |||
453 | # | ||
454 | # Queueing/Scheduling | ||
455 | # | ||
456 | CONFIG_NET_SCH_CBQ=m | ||
457 | # CONFIG_NET_SCH_HTB is not set | ||
458 | # CONFIG_NET_SCH_HFSC is not set | ||
459 | CONFIG_NET_SCH_PRIO=m | ||
460 | CONFIG_NET_SCH_RR=m | ||
461 | # CONFIG_NET_SCH_RED is not set | ||
462 | # CONFIG_NET_SCH_SFQ is not set | ||
463 | # CONFIG_NET_SCH_TEQL is not set | ||
464 | # CONFIG_NET_SCH_TBF is not set | ||
465 | # CONFIG_NET_SCH_GRED is not set | ||
466 | # CONFIG_NET_SCH_DSMARK is not set | ||
467 | CONFIG_NET_SCH_NETEM=m | ||
468 | # CONFIG_NET_SCH_INGRESS is not set | ||
469 | |||
470 | # | ||
471 | # Classification | ||
472 | # | ||
473 | CONFIG_NET_CLS=y | ||
474 | CONFIG_NET_CLS_BASIC=m | ||
475 | CONFIG_NET_CLS_TCINDEX=m | ||
476 | CONFIG_NET_CLS_ROUTE4=m | ||
477 | CONFIG_NET_CLS_ROUTE=y | ||
478 | CONFIG_NET_CLS_FW=m | ||
479 | CONFIG_NET_CLS_U32=m | ||
480 | CONFIG_CLS_U32_PERF=y | ||
481 | CONFIG_CLS_U32_MARK=y | ||
482 | CONFIG_NET_CLS_RSVP=m | ||
483 | CONFIG_NET_CLS_RSVP6=m | ||
484 | # CONFIG_NET_CLS_FLOW is not set | ||
485 | CONFIG_NET_EMATCH=y | ||
486 | CONFIG_NET_EMATCH_STACK=32 | ||
487 | CONFIG_NET_EMATCH_CMP=m | ||
488 | CONFIG_NET_EMATCH_NBYTE=m | ||
489 | CONFIG_NET_EMATCH_U32=m | ||
490 | CONFIG_NET_EMATCH_META=m | ||
491 | CONFIG_NET_EMATCH_TEXT=m | ||
492 | CONFIG_NET_CLS_ACT=y | ||
493 | CONFIG_NET_ACT_POLICE=y | ||
494 | CONFIG_NET_ACT_GACT=m | ||
495 | CONFIG_GACT_PROB=y | ||
496 | CONFIG_NET_ACT_MIRRED=m | ||
497 | CONFIG_NET_ACT_IPT=m | ||
498 | # CONFIG_NET_ACT_NAT is not set | ||
499 | CONFIG_NET_ACT_PEDIT=m | ||
500 | # CONFIG_NET_ACT_SIMP is not set | ||
501 | CONFIG_NET_CLS_IND=y | ||
502 | CONFIG_NET_SCH_FIFO=y | ||
503 | |||
504 | # | ||
505 | # Network testing | ||
506 | # | ||
507 | # CONFIG_NET_PKTGEN is not set | ||
508 | CONFIG_HAMRADIO=y | ||
509 | |||
510 | # | ||
511 | # Packet Radio protocols | ||
512 | # | ||
513 | # CONFIG_AX25 is not set | ||
514 | # CONFIG_CAN is not set | ||
515 | # CONFIG_IRDA is not set | ||
516 | # CONFIG_BT is not set | ||
517 | # CONFIG_AF_RXRPC is not set | ||
518 | CONFIG_FIB_RULES=y | ||
519 | |||
520 | # | ||
521 | # Wireless | ||
522 | # | ||
523 | # CONFIG_CFG80211 is not set | ||
524 | CONFIG_WIRELESS_EXT=y | ||
525 | # CONFIG_MAC80211 is not set | ||
526 | # CONFIG_IEEE80211 is not set | ||
527 | # CONFIG_RFKILL is not set | ||
528 | # CONFIG_NET_9P is not set | ||
529 | |||
530 | # | ||
531 | # Device Drivers | ||
532 | # | ||
533 | |||
534 | # | ||
535 | # Generic Driver Options | ||
536 | # | ||
537 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
538 | CONFIG_STANDALONE=y | ||
539 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
540 | CONFIG_FW_LOADER=y | ||
541 | # CONFIG_SYS_HYPERVISOR is not set | ||
542 | # CONFIG_CONNECTOR is not set | ||
543 | CONFIG_MTD=y | ||
544 | # CONFIG_MTD_DEBUG is not set | ||
545 | # CONFIG_MTD_CONCAT is not set | ||
546 | CONFIG_MTD_PARTITIONS=y | ||
547 | # CONFIG_MTD_REDBOOT_PARTS is not set | ||
548 | # CONFIG_MTD_CMDLINE_PARTS is not set | ||
549 | # CONFIG_MTD_AR7_PARTS is not set | ||
550 | |||
551 | # | ||
552 | # User Modules And Translation Layers | ||
553 | # | ||
554 | CONFIG_MTD_CHAR=y | ||
555 | CONFIG_MTD_BLKDEVS=y | ||
556 | CONFIG_MTD_BLOCK=y | ||
557 | # CONFIG_FTL is not set | ||
558 | # CONFIG_NFTL is not set | ||
559 | # CONFIG_INFTL is not set | ||
560 | # CONFIG_RFD_FTL is not set | ||
561 | # CONFIG_SSFDC is not set | ||
562 | # CONFIG_MTD_OOPS is not set | ||
563 | |||
564 | # | ||
565 | # RAM/ROM/Flash chip drivers | ||
566 | # | ||
567 | # CONFIG_MTD_CFI is not set | ||
568 | # CONFIG_MTD_JEDECPROBE is not set | ||
569 | CONFIG_MTD_MAP_BANK_WIDTH_1=y | ||
570 | CONFIG_MTD_MAP_BANK_WIDTH_2=y | ||
571 | CONFIG_MTD_MAP_BANK_WIDTH_4=y | ||
572 | # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set | ||
573 | # CONFIG_MTD_MAP_BANK_WIDTH_16 is not set | ||
574 | # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set | ||
575 | CONFIG_MTD_CFI_I1=y | ||
576 | CONFIG_MTD_CFI_I2=y | ||
577 | # CONFIG_MTD_CFI_I4 is not set | ||
578 | # CONFIG_MTD_CFI_I8 is not set | ||
579 | # CONFIG_MTD_RAM is not set | ||
580 | # CONFIG_MTD_ROM is not set | ||
581 | # CONFIG_MTD_ABSENT is not set | ||
582 | |||
583 | # | ||
584 | # Mapping drivers for chip access | ||
585 | # | ||
586 | # CONFIG_MTD_COMPLEX_MAPPINGS is not set | ||
587 | # CONFIG_MTD_INTEL_VR_NOR is not set | ||
588 | # CONFIG_MTD_PLATRAM is not set | ||
589 | |||
590 | # | ||
591 | # Self-contained MTD device drivers | ||
592 | # | ||
593 | # CONFIG_MTD_PMC551 is not set | ||
594 | # CONFIG_MTD_SLRAM is not set | ||
595 | # CONFIG_MTD_PHRAM is not set | ||
596 | # CONFIG_MTD_MTDRAM is not set | ||
597 | CONFIG_MTD_BLOCK2MTD=y | ||
598 | |||
599 | # | ||
600 | # Disk-On-Chip Device Drivers | ||
601 | # | ||
602 | # CONFIG_MTD_DOC2000 is not set | ||
603 | # CONFIG_MTD_DOC2001 is not set | ||
604 | # CONFIG_MTD_DOC2001PLUS is not set | ||
605 | CONFIG_MTD_NAND=y | ||
606 | CONFIG_MTD_NAND_VERIFY_WRITE=y | ||
607 | # CONFIG_MTD_NAND_ECC_SMC is not set | ||
608 | # CONFIG_MTD_NAND_MUSEUM_IDS is not set | ||
609 | CONFIG_MTD_NAND_IDS=y | ||
610 | # CONFIG_MTD_NAND_DISKONCHIP is not set | ||
611 | # CONFIG_MTD_NAND_CAFE is not set | ||
612 | # CONFIG_MTD_NAND_NANDSIM is not set | ||
613 | CONFIG_MTD_NAND_PLATFORM=y | ||
614 | # CONFIG_MTD_ONENAND is not set | ||
615 | |||
616 | # | ||
617 | # UBI - Unsorted block images | ||
618 | # | ||
619 | # CONFIG_MTD_UBI is not set | ||
620 | # CONFIG_PARPORT is not set | ||
621 | CONFIG_BLK_DEV=y | ||
622 | # CONFIG_BLK_CPQ_DA is not set | ||
623 | # CONFIG_BLK_CPQ_CISS_DA is not set | ||
624 | # CONFIG_BLK_DEV_DAC960 is not set | ||
625 | # CONFIG_BLK_DEV_UMEM is not set | ||
626 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
627 | # CONFIG_BLK_DEV_LOOP is not set | ||
628 | # CONFIG_BLK_DEV_NBD is not set | ||
629 | # CONFIG_BLK_DEV_SX8 is not set | ||
630 | # CONFIG_BLK_DEV_RAM is not set | ||
631 | # CONFIG_CDROM_PKTCDVD is not set | ||
632 | # CONFIG_ATA_OVER_ETH is not set | ||
633 | CONFIG_MISC_DEVICES=y | ||
634 | # CONFIG_PHANTOM is not set | ||
635 | # CONFIG_EEPROM_93CX6 is not set | ||
636 | # CONFIG_SGI_IOC4 is not set | ||
637 | # CONFIG_TIFM_CORE is not set | ||
638 | # CONFIG_ENCLOSURE_SERVICES is not set | ||
639 | CONFIG_HAVE_IDE=y | ||
640 | # CONFIG_IDE is not set | ||
641 | |||
642 | # | ||
643 | # SCSI device support | ||
644 | # | ||
645 | # CONFIG_RAID_ATTRS is not set | ||
646 | CONFIG_SCSI=y | ||
647 | CONFIG_SCSI_DMA=y | ||
648 | # CONFIG_SCSI_TGT is not set | ||
649 | # CONFIG_SCSI_NETLINK is not set | ||
650 | CONFIG_SCSI_PROC_FS=y | ||
651 | |||
652 | # | ||
653 | # SCSI support type (disk, tape, CD-ROM) | ||
654 | # | ||
655 | # CONFIG_BLK_DEV_SD is not set | ||
656 | # CONFIG_CHR_DEV_ST is not set | ||
657 | # CONFIG_CHR_DEV_OSST is not set | ||
658 | # CONFIG_BLK_DEV_SR is not set | ||
659 | # CONFIG_CHR_DEV_SG is not set | ||
660 | # CONFIG_CHR_DEV_SCH is not set | ||
661 | |||
662 | # | ||
663 | # Some SCSI devices (e.g. CD jukebox) support multiple LUNs | ||
664 | # | ||
665 | # CONFIG_SCSI_MULTI_LUN is not set | ||
666 | # CONFIG_SCSI_CONSTANTS is not set | ||
667 | # CONFIG_SCSI_LOGGING is not set | ||
668 | # CONFIG_SCSI_SCAN_ASYNC is not set | ||
669 | CONFIG_SCSI_WAIT_SCAN=m | ||
670 | |||
671 | # | ||
672 | # SCSI Transports | ||
673 | # | ||
674 | # CONFIG_SCSI_SPI_ATTRS is not set | ||
675 | # CONFIG_SCSI_FC_ATTRS is not set | ||
676 | # CONFIG_SCSI_ISCSI_ATTRS is not set | ||
677 | # CONFIG_SCSI_SAS_LIBSAS is not set | ||
678 | # CONFIG_SCSI_SRP_ATTRS is not set | ||
679 | CONFIG_SCSI_LOWLEVEL=y | ||
680 | # CONFIG_ISCSI_TCP is not set | ||
681 | # CONFIG_BLK_DEV_3W_XXXX_RAID is not set | ||
682 | # CONFIG_SCSI_3W_9XXX is not set | ||
683 | # CONFIG_SCSI_ACARD is not set | ||
684 | # CONFIG_SCSI_AACRAID is not set | ||
685 | # CONFIG_SCSI_AIC7XXX is not set | ||
686 | # CONFIG_SCSI_AIC7XXX_OLD is not set | ||
687 | # CONFIG_SCSI_AIC79XX is not set | ||
688 | # CONFIG_SCSI_AIC94XX is not set | ||
689 | # CONFIG_SCSI_DPT_I2O is not set | ||
690 | # CONFIG_SCSI_ADVANSYS is not set | ||
691 | # CONFIG_SCSI_ARCMSR is not set | ||
692 | # CONFIG_MEGARAID_NEWGEN is not set | ||
693 | # CONFIG_MEGARAID_LEGACY is not set | ||
694 | # CONFIG_MEGARAID_SAS is not set | ||
695 | # CONFIG_SCSI_HPTIOP is not set | ||
696 | # CONFIG_SCSI_DMX3191D is not set | ||
697 | # CONFIG_SCSI_FUTURE_DOMAIN is not set | ||
698 | # CONFIG_SCSI_IPS is not set | ||
699 | # CONFIG_SCSI_INITIO is not set | ||
700 | # CONFIG_SCSI_INIA100 is not set | ||
701 | # CONFIG_SCSI_MVSAS is not set | ||
702 | # CONFIG_SCSI_STEX is not set | ||
703 | # CONFIG_SCSI_SYM53C8XX_2 is not set | ||
704 | # CONFIG_SCSI_IPR is not set | ||
705 | # CONFIG_SCSI_QLOGIC_1280 is not set | ||
706 | # CONFIG_SCSI_QLA_FC is not set | ||
707 | # CONFIG_SCSI_QLA_ISCSI is not set | ||
708 | # CONFIG_SCSI_LPFC is not set | ||
709 | # CONFIG_SCSI_DC395x is not set | ||
710 | # CONFIG_SCSI_DC390T is not set | ||
711 | # CONFIG_SCSI_NSP32 is not set | ||
712 | # CONFIG_SCSI_DEBUG is not set | ||
713 | # CONFIG_SCSI_SRP is not set | ||
714 | CONFIG_ATA=y | ||
715 | # CONFIG_ATA_NONSTANDARD is not set | ||
716 | # CONFIG_SATA_PMP is not set | ||
717 | # CONFIG_SATA_AHCI is not set | ||
718 | # CONFIG_SATA_SIL24 is not set | ||
719 | CONFIG_ATA_SFF=y | ||
720 | # CONFIG_SATA_SVW is not set | ||
721 | # CONFIG_ATA_PIIX is not set | ||
722 | # CONFIG_SATA_MV is not set | ||
723 | # CONFIG_SATA_NV is not set | ||
724 | # CONFIG_PDC_ADMA is not set | ||
725 | # CONFIG_SATA_QSTOR is not set | ||
726 | # CONFIG_SATA_PROMISE is not set | ||
727 | # CONFIG_SATA_SX4 is not set | ||
728 | # CONFIG_SATA_SIL is not set | ||
729 | # CONFIG_SATA_SIS is not set | ||
730 | # CONFIG_SATA_ULI is not set | ||
731 | # CONFIG_SATA_VIA is not set | ||
732 | # CONFIG_SATA_VITESSE is not set | ||
733 | # CONFIG_SATA_INIC162X is not set | ||
734 | # CONFIG_PATA_ALI is not set | ||
735 | # CONFIG_PATA_AMD is not set | ||
736 | # CONFIG_PATA_ARTOP is not set | ||
737 | # CONFIG_PATA_ATIIXP is not set | ||
738 | # CONFIG_PATA_CMD640_PCI is not set | ||
739 | # CONFIG_PATA_CMD64X is not set | ||
740 | # CONFIG_PATA_CS5520 is not set | ||
741 | # CONFIG_PATA_CS5530 is not set | ||
742 | # CONFIG_PATA_CYPRESS is not set | ||
743 | # CONFIG_PATA_EFAR is not set | ||
744 | # CONFIG_ATA_GENERIC is not set | ||
745 | # CONFIG_PATA_HPT366 is not set | ||
746 | # CONFIG_PATA_HPT37X is not set | ||
747 | # CONFIG_PATA_HPT3X2N is not set | ||
748 | # CONFIG_PATA_HPT3X3 is not set | ||
749 | # CONFIG_PATA_IT821X is not set | ||
750 | # CONFIG_PATA_IT8213 is not set | ||
751 | # CONFIG_PATA_JMICRON is not set | ||
752 | # CONFIG_PATA_TRIFLEX is not set | ||
753 | # CONFIG_PATA_MARVELL is not set | ||
754 | # CONFIG_PATA_MPIIX is not set | ||
755 | # CONFIG_PATA_OLDPIIX is not set | ||
756 | # CONFIG_PATA_NETCELL is not set | ||
757 | # CONFIG_PATA_NINJA32 is not set | ||
758 | # CONFIG_PATA_NS87410 is not set | ||
759 | # CONFIG_PATA_NS87415 is not set | ||
760 | # CONFIG_PATA_OPTI is not set | ||
761 | # CONFIG_PATA_OPTIDMA is not set | ||
762 | # CONFIG_PATA_PDC_OLD is not set | ||
763 | # CONFIG_PATA_RADISYS is not set | ||
764 | CONFIG_PATA_RB532=y | ||
765 | # CONFIG_PATA_RZ1000 is not set | ||
766 | # CONFIG_PATA_SC1200 is not set | ||
767 | # CONFIG_PATA_SERVERWORKS is not set | ||
768 | # CONFIG_PATA_PDC2027X is not set | ||
769 | # CONFIG_PATA_SIL680 is not set | ||
770 | # CONFIG_PATA_SIS is not set | ||
771 | # CONFIG_PATA_VIA is not set | ||
772 | # CONFIG_PATA_WINBOND is not set | ||
773 | # CONFIG_PATA_PLATFORM is not set | ||
774 | # CONFIG_MD is not set | ||
775 | # CONFIG_FUSION is not set | ||
776 | |||
777 | # | ||
778 | # IEEE 1394 (FireWire) support | ||
779 | # | ||
780 | # CONFIG_FIREWIRE is not set | ||
781 | # CONFIG_IEEE1394 is not set | ||
782 | # CONFIG_I2O is not set | ||
783 | CONFIG_NETDEVICES=y | ||
784 | # CONFIG_NETDEVICES_MULTIQUEUE is not set | ||
785 | CONFIG_IFB=m | ||
786 | # CONFIG_DUMMY is not set | ||
787 | # CONFIG_BONDING is not set | ||
788 | # CONFIG_MACVLAN is not set | ||
789 | # CONFIG_EQUALIZER is not set | ||
790 | # CONFIG_TUN is not set | ||
791 | # CONFIG_VETH is not set | ||
792 | # CONFIG_ARCNET is not set | ||
793 | # CONFIG_PHYLIB is not set | ||
794 | CONFIG_NET_ETHERNET=y | ||
795 | CONFIG_MII=y | ||
796 | # CONFIG_AX88796 is not set | ||
797 | CONFIG_KORINA=y | ||
798 | # CONFIG_HAPPYMEAL is not set | ||
799 | # CONFIG_SUNGEM is not set | ||
800 | # CONFIG_CASSINI is not set | ||
801 | # CONFIG_NET_VENDOR_3COM is not set | ||
802 | # CONFIG_DM9000 is not set | ||
803 | # CONFIG_NET_TULIP is not set | ||
804 | # CONFIG_HP100 is not set | ||
805 | # CONFIG_IBM_NEW_EMAC_ZMII is not set | ||
806 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | ||
807 | # CONFIG_IBM_NEW_EMAC_TAH is not set | ||
808 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | ||
809 | CONFIG_NET_PCI=y | ||
810 | # CONFIG_PCNET32 is not set | ||
811 | # CONFIG_AMD8111_ETH is not set | ||
812 | # CONFIG_ADAPTEC_STARFIRE is not set | ||
813 | # CONFIG_B44 is not set | ||
814 | # CONFIG_FORCEDETH is not set | ||
815 | # CONFIG_TC35815 is not set | ||
816 | # CONFIG_EEPRO100 is not set | ||
817 | # CONFIG_E100 is not set | ||
818 | # CONFIG_FEALNX is not set | ||
819 | # CONFIG_NATSEMI is not set | ||
820 | # CONFIG_NE2K_PCI is not set | ||
821 | # CONFIG_8139CP is not set | ||
822 | # CONFIG_8139TOO is not set | ||
823 | # CONFIG_R6040 is not set | ||
824 | # CONFIG_SIS900 is not set | ||
825 | # CONFIG_EPIC100 is not set | ||
826 | # CONFIG_SUNDANCE is not set | ||
827 | # CONFIG_TLAN is not set | ||
828 | CONFIG_VIA_RHINE=y | ||
829 | # CONFIG_VIA_RHINE_MMIO is not set | ||
830 | CONFIG_VIA_RHINE_NAPI=y | ||
831 | # CONFIG_SC92031 is not set | ||
832 | # CONFIG_NETDEV_1000 is not set | ||
833 | # CONFIG_NETDEV_10000 is not set | ||
834 | # CONFIG_TR is not set | ||
835 | |||
836 | # | ||
837 | # Wireless LAN | ||
838 | # | ||
839 | # CONFIG_WLAN_PRE80211 is not set | ||
840 | CONFIG_WLAN_80211=y | ||
841 | # CONFIG_IPW2100 is not set | ||
842 | # CONFIG_IPW2200 is not set | ||
843 | # CONFIG_LIBERTAS is not set | ||
844 | # CONFIG_HERMES is not set | ||
845 | CONFIG_ATMEL=m | ||
846 | # CONFIG_PCI_ATMEL is not set | ||
847 | # CONFIG_PRISM54 is not set | ||
848 | # CONFIG_IWLWIFI_LEDS is not set | ||
849 | # CONFIG_HOSTAP is not set | ||
850 | # CONFIG_WAN is not set | ||
851 | # CONFIG_FDDI is not set | ||
852 | # CONFIG_HIPPI is not set | ||
853 | CONFIG_PPP=m | ||
854 | CONFIG_PPP_MULTILINK=y | ||
855 | CONFIG_PPP_FILTER=y | ||
856 | CONFIG_PPP_ASYNC=m | ||
857 | # CONFIG_PPP_SYNC_TTY is not set | ||
858 | CONFIG_PPP_DEFLATE=m | ||
859 | CONFIG_PPP_BSDCOMP=m | ||
860 | # CONFIG_PPP_MPPE is not set | ||
861 | CONFIG_PPPOE=m | ||
862 | CONFIG_PPPOL2TP=m | ||
863 | # CONFIG_SLIP is not set | ||
864 | CONFIG_SLHC=m | ||
865 | # CONFIG_NET_FC is not set | ||
866 | # CONFIG_NETCONSOLE is not set | ||
867 | # CONFIG_NETPOLL is not set | ||
868 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
869 | # CONFIG_ISDN is not set | ||
870 | # CONFIG_PHONE is not set | ||
871 | |||
872 | # | ||
873 | # Input device support | ||
874 | # | ||
875 | CONFIG_INPUT=y | ||
876 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
877 | # CONFIG_INPUT_POLLDEV is not set | ||
878 | |||
879 | # | ||
880 | # Userland interfaces | ||
881 | # | ||
882 | # CONFIG_INPUT_MOUSEDEV is not set | ||
883 | # CONFIG_INPUT_JOYDEV is not set | ||
884 | # CONFIG_INPUT_EVDEV is not set | ||
885 | # CONFIG_INPUT_EVBUG is not set | ||
886 | |||
887 | # | ||
888 | # Input Device Drivers | ||
889 | # | ||
890 | CONFIG_INPUT_KEYBOARD=y | ||
891 | # CONFIG_KEYBOARD_ATKBD is not set | ||
892 | # CONFIG_KEYBOARD_SUNKBD is not set | ||
893 | # CONFIG_KEYBOARD_LKKBD is not set | ||
894 | # CONFIG_KEYBOARD_XTKBD is not set | ||
895 | # CONFIG_KEYBOARD_NEWTON is not set | ||
896 | # CONFIG_KEYBOARD_STOWAWAY is not set | ||
897 | # CONFIG_KEYBOARD_GPIO is not set | ||
898 | # CONFIG_INPUT_MOUSE is not set | ||
899 | # CONFIG_INPUT_JOYSTICK is not set | ||
900 | # CONFIG_INPUT_TABLET is not set | ||
901 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
902 | # CONFIG_INPUT_MISC is not set | ||
903 | |||
904 | # | ||
905 | # Hardware I/O ports | ||
906 | # | ||
907 | # CONFIG_SERIO is not set | ||
908 | # CONFIG_GAMEPORT is not set | ||
909 | |||
910 | # | ||
911 | # Character devices | ||
912 | # | ||
913 | # CONFIG_VT is not set | ||
914 | # CONFIG_SERIAL_NONSTANDARD is not set | ||
915 | # CONFIG_NOZOMI is not set | ||
916 | |||
917 | # | ||
918 | # Serial drivers | ||
919 | # | ||
920 | CONFIG_SERIAL_8250=y | ||
921 | CONFIG_SERIAL_8250_CONSOLE=y | ||
922 | # CONFIG_SERIAL_8250_PCI is not set | ||
923 | CONFIG_SERIAL_8250_NR_UARTS=2 | ||
924 | CONFIG_SERIAL_8250_RUNTIME_UARTS=2 | ||
925 | # CONFIG_SERIAL_8250_EXTENDED is not set | ||
926 | |||
927 | # | ||
928 | # Non-8250 serial port support | ||
929 | # | ||
930 | CONFIG_SERIAL_CORE=y | ||
931 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
932 | # CONFIG_SERIAL_JSM is not set | ||
933 | CONFIG_UNIX98_PTYS=y | ||
934 | # CONFIG_LEGACY_PTYS is not set | ||
935 | # CONFIG_IPMI_HANDLER is not set | ||
936 | CONFIG_HW_RANDOM=y | ||
937 | # CONFIG_RTC is not set | ||
938 | # CONFIG_R3964 is not set | ||
939 | # CONFIG_APPLICOM is not set | ||
940 | # CONFIG_RAW_DRIVER is not set | ||
941 | # CONFIG_TCG_TPM is not set | ||
942 | CONFIG_DEVPORT=y | ||
943 | # CONFIG_I2C is not set | ||
944 | |||
945 | # | ||
946 | # SPI support | ||
947 | # | ||
948 | # CONFIG_SPI is not set | ||
949 | # CONFIG_SPI_MASTER is not set | ||
950 | # CONFIG_W1 is not set | ||
951 | # CONFIG_POWER_SUPPLY is not set | ||
952 | # CONFIG_HWMON is not set | ||
953 | # CONFIG_THERMAL is not set | ||
954 | CONFIG_WATCHDOG=y | ||
955 | # CONFIG_WATCHDOG_NOWAYOUT is not set | ||
956 | |||
957 | # | ||
958 | # Watchdog Device Drivers | ||
959 | # | ||
960 | # CONFIG_SOFT_WATCHDOG is not set | ||
961 | |||
962 | # | ||
963 | # PCI-based Watchdog Cards | ||
964 | # | ||
965 | # CONFIG_PCIPCWATCHDOG is not set | ||
966 | # CONFIG_WDTPCI is not set | ||
967 | |||
968 | # | ||
969 | # Sonics Silicon Backplane | ||
970 | # | ||
971 | CONFIG_SSB_POSSIBLE=y | ||
972 | # CONFIG_SSB is not set | ||
973 | |||
974 | # | ||
975 | # Multifunction device drivers | ||
976 | # | ||
977 | # CONFIG_MFD_SM501 is not set | ||
978 | # CONFIG_HTC_PASIC3 is not set | ||
979 | |||
980 | # | ||
981 | # Multimedia devices | ||
982 | # | ||
983 | CONFIG_VIDEO_DEV=m | ||
984 | CONFIG_VIDEO_V4L2_COMMON=m | ||
985 | CONFIG_VIDEO_ALLOW_V4L1=y | ||
986 | CONFIG_VIDEO_V4L1_COMPAT=y | ||
987 | CONFIG_VIDEO_V4L2=m | ||
988 | CONFIG_VIDEO_V4L1=m | ||
989 | CONFIG_VIDEO_CAPTURE_DRIVERS=y | ||
990 | # CONFIG_VIDEO_ADV_DEBUG is not set | ||
991 | # CONFIG_VIDEO_HELPER_CHIPS_AUTO is not set | ||
992 | |||
993 | # | ||
994 | # Encoders/decoders and other helper chips | ||
995 | # | ||
996 | |||
997 | # | ||
998 | # Audio decoders | ||
999 | # | ||
1000 | |||
1001 | # | ||
1002 | # Video decoders | ||
1003 | # | ||
1004 | |||
1005 | # | ||
1006 | # Video and audio decoders | ||
1007 | # | ||
1008 | |||
1009 | # | ||
1010 | # MPEG video encoders | ||
1011 | # | ||
1012 | # CONFIG_VIDEO_CX2341X is not set | ||
1013 | |||
1014 | # | ||
1015 | # Video encoders | ||
1016 | # | ||
1017 | |||
1018 | # | ||
1019 | # Video improvement chips | ||
1020 | # | ||
1021 | # CONFIG_VIDEO_VIVI is not set | ||
1022 | # CONFIG_VIDEO_CPIA is not set | ||
1023 | # CONFIG_VIDEO_STRADIS is not set | ||
1024 | # CONFIG_SOC_CAMERA is not set | ||
1025 | # CONFIG_RADIO_ADAPTERS is not set | ||
1026 | # CONFIG_DVB_CORE is not set | ||
1027 | # CONFIG_DAB is not set | ||
1028 | |||
1029 | # | ||
1030 | # Graphics support | ||
1031 | # | ||
1032 | # CONFIG_DRM is not set | ||
1033 | # CONFIG_VGASTATE is not set | ||
1034 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set | ||
1035 | # CONFIG_FB is not set | ||
1036 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
1037 | |||
1038 | # | ||
1039 | # Display device support | ||
1040 | # | ||
1041 | # CONFIG_DISPLAY_SUPPORT is not set | ||
1042 | |||
1043 | # | ||
1044 | # Sound | ||
1045 | # | ||
1046 | # CONFIG_SOUND is not set | ||
1047 | CONFIG_HID_SUPPORT=y | ||
1048 | # CONFIG_HID is not set | ||
1049 | CONFIG_USB_SUPPORT=y | ||
1050 | CONFIG_USB_ARCH_HAS_HCD=y | ||
1051 | CONFIG_USB_ARCH_HAS_OHCI=y | ||
1052 | CONFIG_USB_ARCH_HAS_EHCI=y | ||
1053 | # CONFIG_USB is not set | ||
1054 | # CONFIG_USB_OTG_WHITELIST is not set | ||
1055 | # CONFIG_USB_OTG_BLACKLIST_HUB is not set | ||
1056 | |||
1057 | # | ||
1058 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | ||
1059 | # | ||
1060 | # CONFIG_USB_GADGET is not set | ||
1061 | # CONFIG_MMC is not set | ||
1062 | # CONFIG_MEMSTICK is not set | ||
1063 | CONFIG_NEW_LEDS=y | ||
1064 | CONFIG_LEDS_CLASS=y | ||
1065 | |||
1066 | # | ||
1067 | # LED drivers | ||
1068 | # | ||
1069 | # CONFIG_LEDS_GPIO is not set | ||
1070 | |||
1071 | # | ||
1072 | # LED Triggers | ||
1073 | # | ||
1074 | CONFIG_LEDS_TRIGGERS=y | ||
1075 | CONFIG_LEDS_TRIGGER_TIMER=y | ||
1076 | CONFIG_LEDS_TRIGGER_HEARTBEAT=y | ||
1077 | # CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set | ||
1078 | # CONFIG_INFINIBAND is not set | ||
1079 | CONFIG_RTC_LIB=y | ||
1080 | # CONFIG_RTC_CLASS is not set | ||
1081 | # CONFIG_UIO is not set | ||
1082 | |||
1083 | # | ||
1084 | # File systems | ||
1085 | # | ||
1086 | CONFIG_EXT2_FS=y | ||
1087 | # CONFIG_EXT2_FS_XATTR is not set | ||
1088 | # CONFIG_EXT2_FS_XIP is not set | ||
1089 | # CONFIG_EXT3_FS is not set | ||
1090 | # CONFIG_EXT4DEV_FS is not set | ||
1091 | # CONFIG_REISERFS_FS is not set | ||
1092 | # CONFIG_JFS_FS is not set | ||
1093 | # CONFIG_FS_POSIX_ACL is not set | ||
1094 | # CONFIG_XFS_FS is not set | ||
1095 | # CONFIG_OCFS2_FS is not set | ||
1096 | # CONFIG_DNOTIFY is not set | ||
1097 | # CONFIG_INOTIFY is not set | ||
1098 | # CONFIG_QUOTA is not set | ||
1099 | # CONFIG_AUTOFS_FS is not set | ||
1100 | # CONFIG_AUTOFS4_FS is not set | ||
1101 | # CONFIG_FUSE_FS is not set | ||
1102 | |||
1103 | # | ||
1104 | # CD-ROM/DVD Filesystems | ||
1105 | # | ||
1106 | # CONFIG_ISO9660_FS is not set | ||
1107 | # CONFIG_UDF_FS is not set | ||
1108 | |||
1109 | # | ||
1110 | # DOS/FAT/NT Filesystems | ||
1111 | # | ||
1112 | # CONFIG_MSDOS_FS is not set | ||
1113 | # CONFIG_VFAT_FS is not set | ||
1114 | # CONFIG_NTFS_FS is not set | ||
1115 | |||
1116 | # | ||
1117 | # Pseudo filesystems | ||
1118 | # | ||
1119 | CONFIG_PROC_FS=y | ||
1120 | CONFIG_PROC_KCORE=y | ||
1121 | CONFIG_PROC_SYSCTL=y | ||
1122 | CONFIG_SYSFS=y | ||
1123 | CONFIG_TMPFS=y | ||
1124 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
1125 | # CONFIG_HUGETLB_PAGE is not set | ||
1126 | CONFIG_CONFIGFS_FS=y | ||
1127 | |||
1128 | # | ||
1129 | # Miscellaneous filesystems | ||
1130 | # | ||
1131 | # CONFIG_ADFS_FS is not set | ||
1132 | # CONFIG_AFFS_FS is not set | ||
1133 | # CONFIG_HFS_FS is not set | ||
1134 | # CONFIG_HFSPLUS_FS is not set | ||
1135 | # CONFIG_BEFS_FS is not set | ||
1136 | # CONFIG_BFS_FS is not set | ||
1137 | # CONFIG_EFS_FS is not set | ||
1138 | CONFIG_JFFS2_FS=y | ||
1139 | CONFIG_JFFS2_FS_DEBUG=0 | ||
1140 | CONFIG_JFFS2_FS_WRITEBUFFER=y | ||
1141 | # CONFIG_JFFS2_FS_WBUF_VERIFY is not set | ||
1142 | CONFIG_JFFS2_SUMMARY=y | ||
1143 | # CONFIG_JFFS2_FS_XATTR is not set | ||
1144 | CONFIG_JFFS2_COMPRESSION_OPTIONS=y | ||
1145 | CONFIG_JFFS2_ZLIB=y | ||
1146 | # CONFIG_JFFS2_LZO is not set | ||
1147 | CONFIG_JFFS2_RTIME=y | ||
1148 | # CONFIG_JFFS2_RUBIN is not set | ||
1149 | # CONFIG_JFFS2_CMODE_NONE is not set | ||
1150 | CONFIG_JFFS2_CMODE_PRIORITY=y | ||
1151 | # CONFIG_JFFS2_CMODE_SIZE is not set | ||
1152 | # CONFIG_JFFS2_CMODE_FAVOURLZO is not set | ||
1153 | # CONFIG_CRAMFS is not set | ||
1154 | # CONFIG_VXFS_FS is not set | ||
1155 | # CONFIG_MINIX_FS is not set | ||
1156 | # CONFIG_HPFS_FS is not set | ||
1157 | # CONFIG_QNX4FS_FS is not set | ||
1158 | # CONFIG_ROMFS_FS is not set | ||
1159 | # CONFIG_SYSV_FS is not set | ||
1160 | # CONFIG_UFS_FS is not set | ||
1161 | CONFIG_NETWORK_FILESYSTEMS=y | ||
1162 | # CONFIG_NFS_FS is not set | ||
1163 | # CONFIG_NFSD is not set | ||
1164 | # CONFIG_SMB_FS is not set | ||
1165 | # CONFIG_CIFS is not set | ||
1166 | # CONFIG_NCP_FS is not set | ||
1167 | # CONFIG_CODA_FS is not set | ||
1168 | # CONFIG_AFS_FS is not set | ||
1169 | |||
1170 | # | ||
1171 | # Partition Types | ||
1172 | # | ||
1173 | CONFIG_PARTITION_ADVANCED=y | ||
1174 | # CONFIG_ACORN_PARTITION is not set | ||
1175 | # CONFIG_OSF_PARTITION is not set | ||
1176 | # CONFIG_AMIGA_PARTITION is not set | ||
1177 | # CONFIG_ATARI_PARTITION is not set | ||
1178 | CONFIG_MAC_PARTITION=y | ||
1179 | CONFIG_MSDOS_PARTITION=y | ||
1180 | CONFIG_BSD_DISKLABEL=y | ||
1181 | # CONFIG_MINIX_SUBPARTITION is not set | ||
1182 | # CONFIG_SOLARIS_X86_PARTITION is not set | ||
1183 | # CONFIG_UNIXWARE_DISKLABEL is not set | ||
1184 | # CONFIG_LDM_PARTITION is not set | ||
1185 | # CONFIG_SGI_PARTITION is not set | ||
1186 | # CONFIG_ULTRIX_PARTITION is not set | ||
1187 | # CONFIG_SUN_PARTITION is not set | ||
1188 | # CONFIG_KARMA_PARTITION is not set | ||
1189 | # CONFIG_EFI_PARTITION is not set | ||
1190 | # CONFIG_SYSV68_PARTITION is not set | ||
1191 | # CONFIG_NLS is not set | ||
1192 | # CONFIG_DLM is not set | ||
1193 | |||
1194 | # | ||
1195 | # Kernel hacking | ||
1196 | # | ||
1197 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | ||
1198 | # CONFIG_PRINTK_TIME is not set | ||
1199 | CONFIG_ENABLE_WARN_DEPRECATED=y | ||
1200 | # CONFIG_ENABLE_MUST_CHECK is not set | ||
1201 | CONFIG_FRAME_WARN=1024 | ||
1202 | # CONFIG_MAGIC_SYSRQ is not set | ||
1203 | # CONFIG_UNUSED_SYMBOLS is not set | ||
1204 | # CONFIG_DEBUG_FS is not set | ||
1205 | # CONFIG_HEADERS_CHECK is not set | ||
1206 | # CONFIG_DEBUG_KERNEL is not set | ||
1207 | # CONFIG_SAMPLES is not set | ||
1208 | CONFIG_CMDLINE="" | ||
1209 | |||
1210 | # | ||
1211 | # Security options | ||
1212 | # | ||
1213 | # CONFIG_KEYS is not set | ||
1214 | # CONFIG_SECURITY is not set | ||
1215 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | ||
1216 | CONFIG_CRYPTO=y | ||
1217 | |||
1218 | # | ||
1219 | # Crypto core or helper | ||
1220 | # | ||
1221 | CONFIG_CRYPTO_ALGAPI=m | ||
1222 | CONFIG_CRYPTO_AEAD=m | ||
1223 | CONFIG_CRYPTO_BLKCIPHER=m | ||
1224 | # CONFIG_CRYPTO_MANAGER is not set | ||
1225 | # CONFIG_CRYPTO_GF128MUL is not set | ||
1226 | # CONFIG_CRYPTO_NULL is not set | ||
1227 | # CONFIG_CRYPTO_CRYPTD is not set | ||
1228 | # CONFIG_CRYPTO_AUTHENC is not set | ||
1229 | CONFIG_CRYPTO_TEST=m | ||
1230 | |||
1231 | # | ||
1232 | # Authenticated Encryption with Associated Data | ||
1233 | # | ||
1234 | # CONFIG_CRYPTO_CCM is not set | ||
1235 | # CONFIG_CRYPTO_GCM is not set | ||
1236 | # CONFIG_CRYPTO_SEQIV is not set | ||
1237 | |||
1238 | # | ||
1239 | # Block modes | ||
1240 | # | ||
1241 | # CONFIG_CRYPTO_CBC is not set | ||
1242 | # CONFIG_CRYPTO_CTR is not set | ||
1243 | # CONFIG_CRYPTO_CTS is not set | ||
1244 | # CONFIG_CRYPTO_ECB is not set | ||
1245 | # CONFIG_CRYPTO_LRW is not set | ||
1246 | # CONFIG_CRYPTO_PCBC is not set | ||
1247 | # CONFIG_CRYPTO_XTS is not set | ||
1248 | |||
1249 | # | ||
1250 | # Hash modes | ||
1251 | # | ||
1252 | # CONFIG_CRYPTO_HMAC is not set | ||
1253 | # CONFIG_CRYPTO_XCBC is not set | ||
1254 | |||
1255 | # | ||
1256 | # Digest | ||
1257 | # | ||
1258 | # CONFIG_CRYPTO_CRC32C is not set | ||
1259 | # CONFIG_CRYPTO_MD4 is not set | ||
1260 | # CONFIG_CRYPTO_MD5 is not set | ||
1261 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
1262 | # CONFIG_CRYPTO_SHA1 is not set | ||
1263 | # CONFIG_CRYPTO_SHA256 is not set | ||
1264 | # CONFIG_CRYPTO_SHA512 is not set | ||
1265 | # CONFIG_CRYPTO_TGR192 is not set | ||
1266 | # CONFIG_CRYPTO_WP512 is not set | ||
1267 | |||
1268 | # | ||
1269 | # Ciphers | ||
1270 | # | ||
1271 | # CONFIG_CRYPTO_AES is not set | ||
1272 | # CONFIG_CRYPTO_ANUBIS is not set | ||
1273 | # CONFIG_CRYPTO_ARC4 is not set | ||
1274 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
1275 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
1276 | # CONFIG_CRYPTO_CAST5 is not set | ||
1277 | # CONFIG_CRYPTO_CAST6 is not set | ||
1278 | # CONFIG_CRYPTO_DES is not set | ||
1279 | # CONFIG_CRYPTO_FCRYPT is not set | ||
1280 | # CONFIG_CRYPTO_KHAZAD is not set | ||
1281 | # CONFIG_CRYPTO_SALSA20 is not set | ||
1282 | # CONFIG_CRYPTO_SEED is not set | ||
1283 | # CONFIG_CRYPTO_SERPENT is not set | ||
1284 | # CONFIG_CRYPTO_TEA is not set | ||
1285 | # CONFIG_CRYPTO_TWOFISH is not set | ||
1286 | |||
1287 | # | ||
1288 | # Compression | ||
1289 | # | ||
1290 | # CONFIG_CRYPTO_DEFLATE is not set | ||
1291 | # CONFIG_CRYPTO_LZO is not set | ||
1292 | # CONFIG_CRYPTO_HW is not set | ||
1293 | |||
1294 | # | ||
1295 | # Library routines | ||
1296 | # | ||
1297 | CONFIG_BITREVERSE=y | ||
1298 | # CONFIG_GENERIC_FIND_FIRST_BIT is not set | ||
1299 | CONFIG_CRC_CCITT=m | ||
1300 | CONFIG_CRC16=m | ||
1301 | # CONFIG_CRC_ITU_T is not set | ||
1302 | CONFIG_CRC32=y | ||
1303 | # CONFIG_CRC7 is not set | ||
1304 | CONFIG_LIBCRC32C=m | ||
1305 | CONFIG_ZLIB_INFLATE=y | ||
1306 | CONFIG_ZLIB_DEFLATE=y | ||
1307 | CONFIG_TEXTSEARCH=y | ||
1308 | CONFIG_TEXTSEARCH_KMP=m | ||
1309 | CONFIG_TEXTSEARCH_BM=m | ||
1310 | CONFIG_TEXTSEARCH_FSM=m | ||
1311 | CONFIG_PLIST=y | ||
1312 | CONFIG_HAS_IOMEM=y | ||
1313 | CONFIG_HAS_IOPORT=y | ||
1314 | CONFIG_HAS_DMA=y | ||
diff --git a/arch/mips/kernel/linux32.c b/arch/mips/kernel/linux32.c index 65af3cc90abb..2fefb14414b7 100644 --- a/arch/mips/kernel/linux32.c +++ b/arch/mips/kernel/linux32.c | |||
@@ -11,7 +11,6 @@ | |||
11 | #include <linux/file.h> | 11 | #include <linux/file.h> |
12 | #include <linux/smp_lock.h> | 12 | #include <linux/smp_lock.h> |
13 | #include <linux/highuid.h> | 13 | #include <linux/highuid.h> |
14 | #include <linux/dirent.h> | ||
15 | #include <linux/resource.h> | 14 | #include <linux/resource.h> |
16 | #include <linux/highmem.h> | 15 | #include <linux/highmem.h> |
17 | #include <linux/time.h> | 16 | #include <linux/time.h> |
@@ -129,23 +128,6 @@ out: | |||
129 | return error; | 128 | return error; |
130 | } | 129 | } |
131 | 130 | ||
132 | |||
133 | asmlinkage int sys_truncate64(const char __user *path, unsigned int high, | ||
134 | unsigned int low) | ||
135 | { | ||
136 | if ((int)high < 0) | ||
137 | return -EINVAL; | ||
138 | return sys_truncate(path, ((long) high << 32) | low); | ||
139 | } | ||
140 | |||
141 | asmlinkage int sys_ftruncate64(unsigned int fd, unsigned int high, | ||
142 | unsigned int low) | ||
143 | { | ||
144 | if ((int)high < 0) | ||
145 | return -EINVAL; | ||
146 | return sys_ftruncate(fd, ((long) high << 32) | low); | ||
147 | } | ||
148 | |||
149 | /* | 131 | /* |
150 | * sys_execve() executes a new program. | 132 | * sys_execve() executes a new program. |
151 | */ | 133 | */ |
diff --git a/arch/mips/kernel/module.c b/arch/mips/kernel/module.c index e7ed0ac48537..1f60e27523d9 100644 --- a/arch/mips/kernel/module.c +++ b/arch/mips/kernel/module.c | |||
@@ -22,6 +22,7 @@ | |||
22 | 22 | ||
23 | #include <linux/moduleloader.h> | 23 | #include <linux/moduleloader.h> |
24 | #include <linux/elf.h> | 24 | #include <linux/elf.h> |
25 | #include <linux/mm.h> | ||
25 | #include <linux/vmalloc.h> | 26 | #include <linux/vmalloc.h> |
26 | #include <linux/slab.h> | 27 | #include <linux/slab.h> |
27 | #include <linux/fs.h> | 28 | #include <linux/fs.h> |
diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c index c06f5b5d764c..b16facd9ea8e 100644 --- a/arch/mips/kernel/process.c +++ b/arch/mips/kernel/process.c | |||
@@ -53,7 +53,7 @@ void __noreturn cpu_idle(void) | |||
53 | { | 53 | { |
54 | /* endless idle loop with no priority at all */ | 54 | /* endless idle loop with no priority at all */ |
55 | while (1) { | 55 | while (1) { |
56 | tick_nohz_stop_sched_tick(); | 56 | tick_nohz_stop_sched_tick(1); |
57 | while (!need_resched()) { | 57 | while (!need_resched()) { |
58 | #ifdef CONFIG_SMTC_IDLE_HOOK_DEBUG | 58 | #ifdef CONFIG_SMTC_IDLE_HOOK_DEBUG |
59 | extern void smtc_idle_loop_hook(void); | 59 | extern void smtc_idle_loop_hook(void); |
diff --git a/arch/mips/kernel/rtlx.c b/arch/mips/kernel/rtlx.c index b55641961232..dfd868b68364 100644 --- a/arch/mips/kernel/rtlx.c +++ b/arch/mips/kernel/rtlx.c | |||
@@ -522,8 +522,8 @@ static int __init rtlx_module_init(void) | |||
522 | atomic_set(&channel_wqs[i].in_open, 0); | 522 | atomic_set(&channel_wqs[i].in_open, 0); |
523 | mutex_init(&channel_wqs[i].mutex); | 523 | mutex_init(&channel_wqs[i].mutex); |
524 | 524 | ||
525 | dev = device_create(mt_class, NULL, MKDEV(major, i), | 525 | dev = device_create_drvdata(mt_class, NULL, MKDEV(major, i), |
526 | "%s%d", module_name, i); | 526 | NULL, "%s%d", module_name, i); |
527 | if (IS_ERR(dev)) { | 527 | if (IS_ERR(dev)) { |
528 | err = PTR_ERR(dev); | 528 | err = PTR_ERR(dev); |
529 | goto out_chrdev; | 529 | goto out_chrdev; |
diff --git a/arch/mips/kernel/scall32-o32.S b/arch/mips/kernel/scall32-o32.S index c058c0b61a2a..fc4fd4d705e2 100644 --- a/arch/mips/kernel/scall32-o32.S +++ b/arch/mips/kernel/scall32-o32.S | |||
@@ -354,7 +354,7 @@ einval: li v0, -EINVAL | |||
354 | sys sys_mkdir 2 | 354 | sys sys_mkdir 2 |
355 | sys sys_rmdir 1 /* 4040 */ | 355 | sys sys_rmdir 1 /* 4040 */ |
356 | sys sys_dup 1 | 356 | sys sys_dup 1 |
357 | sys sys_pipe 0 | 357 | sys sysm_pipe 0 |
358 | sys sys_times 1 | 358 | sys sys_times 1 |
359 | sys sys_ni_syscall 0 | 359 | sys sys_ni_syscall 0 |
360 | sys sys_brk 1 /* 4045 */ | 360 | sys sys_brk 1 /* 4045 */ |
diff --git a/arch/mips/kernel/scall64-64.S b/arch/mips/kernel/scall64-64.S index dc597b600c68..2b73fd1e4528 100644 --- a/arch/mips/kernel/scall64-64.S +++ b/arch/mips/kernel/scall64-64.S | |||
@@ -219,7 +219,7 @@ sys_call_table: | |||
219 | PTR sys_readv | 219 | PTR sys_readv |
220 | PTR sys_writev | 220 | PTR sys_writev |
221 | PTR sys_access /* 5020 */ | 221 | PTR sys_access /* 5020 */ |
222 | PTR sys_pipe | 222 | PTR sysm_pipe |
223 | PTR sys_select | 223 | PTR sys_select |
224 | PTR sys_sched_yield | 224 | PTR sys_sched_yield |
225 | PTR sys_mremap | 225 | PTR sys_mremap |
diff --git a/arch/mips/kernel/scall64-n32.S b/arch/mips/kernel/scall64-n32.S index 12940eca7893..2654e75d2fef 100644 --- a/arch/mips/kernel/scall64-n32.S +++ b/arch/mips/kernel/scall64-n32.S | |||
@@ -141,7 +141,7 @@ EXPORT(sysn32_call_table) | |||
141 | PTR compat_sys_readv | 141 | PTR compat_sys_readv |
142 | PTR compat_sys_writev | 142 | PTR compat_sys_writev |
143 | PTR sys_access /* 6020 */ | 143 | PTR sys_access /* 6020 */ |
144 | PTR sys_pipe | 144 | PTR sysm_pipe |
145 | PTR compat_sys_select | 145 | PTR compat_sys_select |
146 | PTR sys_sched_yield | 146 | PTR sys_sched_yield |
147 | PTR sys_mremap | 147 | PTR sys_mremap |
diff --git a/arch/mips/kernel/scall64-o32.S b/arch/mips/kernel/scall64-o32.S index 9a275efb4f04..76167bea5a70 100644 --- a/arch/mips/kernel/scall64-o32.S +++ b/arch/mips/kernel/scall64-o32.S | |||
@@ -247,7 +247,7 @@ sys_call_table: | |||
247 | PTR sys_mkdir | 247 | PTR sys_mkdir |
248 | PTR sys_rmdir /* 4040 */ | 248 | PTR sys_rmdir /* 4040 */ |
249 | PTR sys_dup | 249 | PTR sys_dup |
250 | PTR sys_pipe | 250 | PTR sysm_pipe |
251 | PTR compat_sys_times | 251 | PTR compat_sys_times |
252 | PTR sys_ni_syscall | 252 | PTR sys_ni_syscall |
253 | PTR sys_brk /* 4045 */ | 253 | PTR sys_brk /* 4045 */ |
diff --git a/arch/mips/kernel/stacktrace.c b/arch/mips/kernel/stacktrace.c index 5eb4681a73d2..0632e2a849c0 100644 --- a/arch/mips/kernel/stacktrace.c +++ b/arch/mips/kernel/stacktrace.c | |||
@@ -7,6 +7,7 @@ | |||
7 | */ | 7 | */ |
8 | #include <linux/sched.h> | 8 | #include <linux/sched.h> |
9 | #include <linux/stacktrace.h> | 9 | #include <linux/stacktrace.h> |
10 | #include <linux/module.h> | ||
10 | #include <asm/stacktrace.h> | 11 | #include <asm/stacktrace.h> |
11 | 12 | ||
12 | /* | 13 | /* |
diff --git a/arch/mips/kernel/syscall.c b/arch/mips/kernel/syscall.c index af1bdc897488..343015a2f418 100644 --- a/arch/mips/kernel/syscall.c +++ b/arch/mips/kernel/syscall.c | |||
@@ -40,12 +40,19 @@ | |||
40 | #include <asm/sysmips.h> | 40 | #include <asm/sysmips.h> |
41 | #include <asm/uaccess.h> | 41 | #include <asm/uaccess.h> |
42 | 42 | ||
43 | asmlinkage int sys_pipe(nabi_no_regargs volatile struct pt_regs regs) | 43 | /* |
44 | * For historic reasons the pipe(2) syscall on MIPS has an unusual calling | ||
45 | * convention. It returns results in registers $v0 / $v1 which means there | ||
46 | * is no need for it to do verify the validity of a userspace pointer | ||
47 | * argument. Historically that used to be expensive in Linux. These days | ||
48 | * the performance advantage is negligible. | ||
49 | */ | ||
50 | asmlinkage int sysm_pipe(nabi_no_regargs volatile struct pt_regs regs) | ||
44 | { | 51 | { |
45 | int fd[2]; | 52 | int fd[2]; |
46 | int error, res; | 53 | int error, res; |
47 | 54 | ||
48 | error = do_pipe(fd); | 55 | error = do_pipe_flags(fd, 0); |
49 | if (error) { | 56 | if (error) { |
50 | res = error; | 57 | res = error; |
51 | goto out; | 58 | goto out; |
diff --git a/arch/mips/math-emu/kernel_linkage.c b/arch/mips/math-emu/kernel_linkage.c index ed49ef01ac53..52e6c58c8de1 100644 --- a/arch/mips/math-emu/kernel_linkage.c +++ b/arch/mips/math-emu/kernel_linkage.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <asm/signal.h> | 24 | #include <asm/signal.h> |
25 | #include <asm/uaccess.h> | 25 | #include <asm/uaccess.h> |
26 | 26 | ||
27 | #include <asm/fpu.h> | ||
27 | #include <asm/fpu_emulator.h> | 28 | #include <asm/fpu_emulator.h> |
28 | 29 | ||
29 | #define SIGNALLING_NAN 0x7ff800007ff80000LL | 30 | #define SIGNALLING_NAN 0x7ff800007ff80000LL |
diff --git a/arch/mips/mm/Makefile b/arch/mips/mm/Makefile index 48731020ca0e..44e8dd8106bf 100644 --- a/arch/mips/mm/Makefile +++ b/arch/mips/mm/Makefile | |||
@@ -3,8 +3,7 @@ | |||
3 | # | 3 | # |
4 | 4 | ||
5 | obj-y += cache.o dma-default.o extable.o fault.o \ | 5 | obj-y += cache.o dma-default.o extable.o fault.o \ |
6 | init.o pgtable.o tlbex.o tlbex-fault.o \ | 6 | init.o tlbex.o tlbex-fault.o uasm.o page.o |
7 | uasm.o page.o | ||
8 | 7 | ||
9 | obj-$(CONFIG_32BIT) += ioremap.o pgtable-32.o | 8 | obj-$(CONFIG_32BIT) += ioremap.o pgtable-32.o |
10 | obj-$(CONFIG_64BIT) += pgtable-64.o | 9 | obj-$(CONFIG_64BIT) += pgtable-64.o |
diff --git a/arch/mips/mm/dma-default.c b/arch/mips/mm/dma-default.c index ae39dd88b9aa..891312f8e5a6 100644 --- a/arch/mips/mm/dma-default.c +++ b/arch/mips/mm/dma-default.c | |||
@@ -348,7 +348,7 @@ void dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, int nele | |||
348 | 348 | ||
349 | EXPORT_SYMBOL(dma_sync_sg_for_device); | 349 | EXPORT_SYMBOL(dma_sync_sg_for_device); |
350 | 350 | ||
351 | int dma_mapping_error(dma_addr_t dma_addr) | 351 | int dma_mapping_error(struct device *dev, dma_addr_t dma_addr) |
352 | { | 352 | { |
353 | return 0; | 353 | return 0; |
354 | } | 354 | } |
diff --git a/arch/mips/mm/pgtable.c b/arch/mips/mm/pgtable.c deleted file mode 100644 index 7dfa579ab24c..000000000000 --- a/arch/mips/mm/pgtable.c +++ /dev/null | |||
@@ -1,36 +0,0 @@ | |||
1 | #include <linux/kernel.h> | ||
2 | #include <linux/mm.h> | ||
3 | #include <linux/swap.h> | ||
4 | |||
5 | void show_mem(void) | ||
6 | { | ||
7 | #ifndef CONFIG_NEED_MULTIPLE_NODES /* XXX(hch): later.. */ | ||
8 | int pfn, total = 0, reserved = 0; | ||
9 | int shared = 0, cached = 0; | ||
10 | int highmem = 0; | ||
11 | struct page *page; | ||
12 | |||
13 | printk("Mem-info:\n"); | ||
14 | show_free_areas(); | ||
15 | pfn = max_mapnr; | ||
16 | while (pfn-- > 0) { | ||
17 | if (!pfn_valid(pfn)) | ||
18 | continue; | ||
19 | page = pfn_to_page(pfn); | ||
20 | total++; | ||
21 | if (PageHighMem(page)) | ||
22 | highmem++; | ||
23 | if (PageReserved(page)) | ||
24 | reserved++; | ||
25 | else if (PageSwapCache(page)) | ||
26 | cached++; | ||
27 | else if (page_count(page)) | ||
28 | shared += page_count(page) - 1; | ||
29 | } | ||
30 | printk("%d pages of RAM\n", total); | ||
31 | printk("%d pages of HIGHMEM\n", highmem); | ||
32 | printk("%d reserved pages\n", reserved); | ||
33 | printk("%d pages shared\n", shared); | ||
34 | printk("%d pages swap cached\n", cached); | ||
35 | #endif | ||
36 | } | ||
diff --git a/arch/mips/pci/Makefile b/arch/mips/pci/Makefile index 57e34cafa497..15e01aec37fd 100644 --- a/arch/mips/pci/Makefile +++ b/arch/mips/pci/Makefile | |||
@@ -49,3 +49,4 @@ obj-$(CONFIG_TOSHIBA_RBTX4938) += fixup-rbtx4938.o | |||
49 | obj-$(CONFIG_VICTOR_MPC30X) += fixup-mpc30x.o | 49 | obj-$(CONFIG_VICTOR_MPC30X) += fixup-mpc30x.o |
50 | obj-$(CONFIG_ZAO_CAPCELLA) += fixup-capcella.o | 50 | obj-$(CONFIG_ZAO_CAPCELLA) += fixup-capcella.o |
51 | obj-$(CONFIG_WR_PPMC) += fixup-wrppmc.o | 51 | obj-$(CONFIG_WR_PPMC) += fixup-wrppmc.o |
52 | obj-$(CONFIG_MIKROTIK_RB532) += pci-rc32434.o ops-rc32434.o fixup-rc32434.o | ||
diff --git a/arch/mips/pci/fixup-rc32434.c b/arch/mips/pci/fixup-rc32434.c new file mode 100644 index 000000000000..75b90dcb7a09 --- /dev/null +++ b/arch/mips/pci/fixup-rc32434.c | |||
@@ -0,0 +1,69 @@ | |||
1 | /* | ||
2 | * Copyright 2001 MontaVista Software Inc. | ||
3 | * Author: MontaVista Software, Inc. | ||
4 | * stevel@mvista.com or source@mvista.com | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify it | ||
7 | * under the terms of the GNU General Public License as published by the | ||
8 | * Free Software Foundation; either version 2 of the License, or (at your | ||
9 | * option) any later version. | ||
10 | * | ||
11 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
12 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
13 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
14 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
15 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
16 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
17 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
18 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
19 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
20 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
21 | * | ||
22 | * You should have received a copy of the GNU General Public License along | ||
23 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
24 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
25 | */ | ||
26 | |||
27 | #include <linux/types.h> | ||
28 | #include <linux/pci.h> | ||
29 | #include <linux/kernel.h> | ||
30 | #include <linux/init.h> | ||
31 | |||
32 | #include <asm/mach-rc32434/rc32434.h> | ||
33 | |||
34 | static int __devinitdata irq_map[2][12] = { | ||
35 | {0, 0, 2, 3, 2, 3, 0, 0, 0, 0, 0, 1}, | ||
36 | {0, 0, 1, 3, 0, 2, 1, 3, 0, 2, 1, 3} | ||
37 | }; | ||
38 | |||
39 | int __devinit pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) | ||
40 | { | ||
41 | int irq = 0; | ||
42 | |||
43 | if (dev->bus->number < 2 && PCI_SLOT(dev->devfn) < 12) | ||
44 | irq = irq_map[dev->bus->number][PCI_SLOT(dev->devfn)]; | ||
45 | |||
46 | return irq + GROUP4_IRQ_BASE + 4; | ||
47 | } | ||
48 | |||
49 | static void rc32434_pci_early_fixup(struct pci_dev *dev) | ||
50 | { | ||
51 | if (PCI_SLOT(dev->devfn) == 6 && dev->bus->number == 0) { | ||
52 | /* disable prefetched memory range */ | ||
53 | pci_write_config_word(dev, PCI_PREF_MEMORY_LIMIT, 0); | ||
54 | pci_write_config_word(dev, PCI_PREF_MEMORY_BASE, 0x10); | ||
55 | |||
56 | pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, 4); | ||
57 | } | ||
58 | } | ||
59 | |||
60 | /* | ||
61 | * The fixup applies to both the IDT and VIA devices present on the board | ||
62 | */ | ||
63 | DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, rc32434_pci_early_fixup); | ||
64 | |||
65 | /* Do platform specific device initialization at pci_enable_device() time */ | ||
66 | int pcibios_plat_dev_init(struct pci_dev *dev) | ||
67 | { | ||
68 | return 0; | ||
69 | } | ||
diff --git a/arch/mips/pci/ops-rc32434.c b/arch/mips/pci/ops-rc32434.c new file mode 100644 index 000000000000..d1f8fa210ca1 --- /dev/null +++ b/arch/mips/pci/ops-rc32434.c | |||
@@ -0,0 +1,207 @@ | |||
1 | /* | ||
2 | * BRIEF MODULE DESCRIPTION | ||
3 | * pci_ops for IDT EB434 board | ||
4 | * | ||
5 | * Copyright 2004 IDT Inc. (rischelp@idt.com) | ||
6 | * Copyright 2006 Felix Fietkau <nbd@openwrt.org> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify it | ||
9 | * under the terms of the GNU General Public License as published by the | ||
10 | * Free Software Foundation; either version 2 of the License, or (at your | ||
11 | * option) any later version. | ||
12 | * | ||
13 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
14 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
15 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
16 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
17 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
18 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
19 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
20 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
21 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
22 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
23 | * | ||
24 | * You should have received a copy of the GNU General Public License along | ||
25 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
26 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
27 | */ | ||
28 | #include <linux/delay.h> | ||
29 | #include <linux/init.h> | ||
30 | #include <linux/io.h> | ||
31 | #include <linux/pci.h> | ||
32 | #include <linux/types.h> | ||
33 | |||
34 | #include <asm/cpu.h> | ||
35 | #include <asm/mach-rc32434/rc32434.h> | ||
36 | #include <asm/mach-rc32434/pci.h> | ||
37 | |||
38 | #define PCI_ACCESS_READ 0 | ||
39 | #define PCI_ACCESS_WRITE 1 | ||
40 | |||
41 | |||
42 | #define PCI_CFG_SET(bus, slot, func, off) \ | ||
43 | (rc32434_pci->pcicfga = (0x80000000 | \ | ||
44 | ((bus) << 16) | ((slot)<<11) | \ | ||
45 | ((func)<<8) | (off))) | ||
46 | |||
47 | static inline int config_access(unsigned char access_type, | ||
48 | struct pci_bus *bus, unsigned int devfn, | ||
49 | unsigned char where, u32 *data) | ||
50 | { | ||
51 | unsigned int slot = PCI_SLOT(devfn); | ||
52 | u8 func = PCI_FUNC(devfn); | ||
53 | |||
54 | /* Setup address */ | ||
55 | PCI_CFG_SET(bus->number, slot, func, where); | ||
56 | rc32434_sync(); | ||
57 | |||
58 | if (access_type == PCI_ACCESS_WRITE) | ||
59 | rc32434_pci->pcicfgd = *data; | ||
60 | else | ||
61 | *data = rc32434_pci->pcicfgd; | ||
62 | |||
63 | rc32434_sync(); | ||
64 | |||
65 | return 0; | ||
66 | } | ||
67 | |||
68 | |||
69 | /* | ||
70 | * We can't address 8 and 16 bit words directly. Instead we have to | ||
71 | * read/write a 32bit word and mask/modify the data we actually want. | ||
72 | */ | ||
73 | static int read_config_byte(struct pci_bus *bus, unsigned int devfn, | ||
74 | int where, u8 *val) | ||
75 | { | ||
76 | u32 data; | ||
77 | int ret; | ||
78 | |||
79 | ret = config_access(PCI_ACCESS_READ, bus, devfn, where, &data); | ||
80 | *val = (data >> ((where & 3) << 3)) & 0xff; | ||
81 | return ret; | ||
82 | } | ||
83 | |||
84 | static int read_config_word(struct pci_bus *bus, unsigned int devfn, | ||
85 | int where, u16 *val) | ||
86 | { | ||
87 | u32 data; | ||
88 | int ret; | ||
89 | |||
90 | ret = config_access(PCI_ACCESS_READ, bus, devfn, where, &data); | ||
91 | *val = (data >> ((where & 3) << 3)) & 0xffff; | ||
92 | return ret; | ||
93 | } | ||
94 | |||
95 | static int read_config_dword(struct pci_bus *bus, unsigned int devfn, | ||
96 | int where, u32 *val) | ||
97 | { | ||
98 | int ret; | ||
99 | int delay = 1; | ||
100 | |||
101 | /* | ||
102 | * Don't scan too far, else there will be errors with plugged in | ||
103 | * daughterboard (rb564). | ||
104 | */ | ||
105 | if (bus->number == 0 && PCI_SLOT(devfn) > 21) | ||
106 | return 0; | ||
107 | |||
108 | retry: | ||
109 | ret = config_access(PCI_ACCESS_READ, bus, devfn, where, val); | ||
110 | |||
111 | /* | ||
112 | * Certain devices react delayed at device scan time, this | ||
113 | * gives them time to settle | ||
114 | */ | ||
115 | if (where == PCI_VENDOR_ID) { | ||
116 | if (ret == 0xffffffff || ret == 0x00000000 || | ||
117 | ret == 0x0000ffff || ret == 0xffff0000) { | ||
118 | if (delay > 4) | ||
119 | return 0; | ||
120 | delay *= 2; | ||
121 | msleep(delay); | ||
122 | goto retry; | ||
123 | } | ||
124 | } | ||
125 | |||
126 | return ret; | ||
127 | } | ||
128 | |||
129 | static int | ||
130 | write_config_byte(struct pci_bus *bus, unsigned int devfn, int where, | ||
131 | u8 val) | ||
132 | { | ||
133 | u32 data = 0; | ||
134 | |||
135 | if (config_access(PCI_ACCESS_READ, bus, devfn, where, &data)) | ||
136 | return -1; | ||
137 | |||
138 | data = (data & ~(0xff << ((where & 3) << 3))) | | ||
139 | (val << ((where & 3) << 3)); | ||
140 | |||
141 | if (config_access(PCI_ACCESS_WRITE, bus, devfn, where, &data)) | ||
142 | return -1; | ||
143 | |||
144 | return PCIBIOS_SUCCESSFUL; | ||
145 | } | ||
146 | |||
147 | |||
148 | static int | ||
149 | write_config_word(struct pci_bus *bus, unsigned int devfn, int where, | ||
150 | u16 val) | ||
151 | { | ||
152 | u32 data = 0; | ||
153 | |||
154 | if (config_access(PCI_ACCESS_READ, bus, devfn, where, &data)) | ||
155 | return -1; | ||
156 | |||
157 | data = (data & ~(0xffff << ((where & 3) << 3))) | | ||
158 | (val << ((where & 3) << 3)); | ||
159 | |||
160 | if (config_access(PCI_ACCESS_WRITE, bus, devfn, where, &data)) | ||
161 | return -1; | ||
162 | |||
163 | |||
164 | return PCIBIOS_SUCCESSFUL; | ||
165 | } | ||
166 | |||
167 | |||
168 | static int | ||
169 | write_config_dword(struct pci_bus *bus, unsigned int devfn, int where, | ||
170 | u32 val) | ||
171 | { | ||
172 | if (config_access(PCI_ACCESS_WRITE, bus, devfn, where, &val)) | ||
173 | return -1; | ||
174 | |||
175 | return PCIBIOS_SUCCESSFUL; | ||
176 | } | ||
177 | |||
178 | static int pci_config_read(struct pci_bus *bus, unsigned int devfn, | ||
179 | int where, int size, u32 *val) | ||
180 | { | ||
181 | switch (size) { | ||
182 | case 1: | ||
183 | return read_config_byte(bus, devfn, where, (u8 *) val); | ||
184 | case 2: | ||
185 | return read_config_word(bus, devfn, where, (u16 *) val); | ||
186 | default: | ||
187 | return read_config_dword(bus, devfn, where, val); | ||
188 | } | ||
189 | } | ||
190 | |||
191 | static int pci_config_write(struct pci_bus *bus, unsigned int devfn, | ||
192 | int where, int size, u32 val) | ||
193 | { | ||
194 | switch (size) { | ||
195 | case 1: | ||
196 | return write_config_byte(bus, devfn, where, (u8) val); | ||
197 | case 2: | ||
198 | return write_config_word(bus, devfn, where, (u16) val); | ||
199 | default: | ||
200 | return write_config_dword(bus, devfn, where, val); | ||
201 | } | ||
202 | } | ||
203 | |||
204 | struct pci_ops rc32434_pci_ops = { | ||
205 | .read = pci_config_read, | ||
206 | .write = pci_config_write, | ||
207 | }; | ||
diff --git a/arch/mips/pci/pci-rc32434.c b/arch/mips/pci/pci-rc32434.c new file mode 100644 index 000000000000..1c2821e2f494 --- /dev/null +++ b/arch/mips/pci/pci-rc32434.c | |||
@@ -0,0 +1,221 @@ | |||
1 | /* | ||
2 | * BRIEF MODULE DESCRIPTION | ||
3 | * PCI initialization for IDT EB434 board | ||
4 | * | ||
5 | * Copyright 2004 IDT Inc. (rischelp@idt.com) | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms of the GNU General Public License as published by the | ||
9 | * Free Software Foundation; either version 2 of the License, or (at your | ||
10 | * option) any later version. | ||
11 | * | ||
12 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
13 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
14 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
15 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
16 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
17 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
18 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
19 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
20 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
21 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
22 | * | ||
23 | * You should have received a copy of the GNU General Public License along | ||
24 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
25 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
26 | */ | ||
27 | |||
28 | #include <linux/types.h> | ||
29 | #include <linux/pci.h> | ||
30 | #include <linux/kernel.h> | ||
31 | #include <linux/init.h> | ||
32 | |||
33 | #include <asm/mach-rc32434/rc32434.h> | ||
34 | #include <asm/mach-rc32434/pci.h> | ||
35 | |||
36 | #define PCI_ACCESS_READ 0 | ||
37 | #define PCI_ACCESS_WRITE 1 | ||
38 | |||
39 | /* define an unsigned array for the PCI registers */ | ||
40 | static unsigned int korina_cnfg_regs[25] = { | ||
41 | KORINA_CNFG1, KORINA_CNFG2, KORINA_CNFG3, KORINA_CNFG4, | ||
42 | KORINA_CNFG5, KORINA_CNFG6, KORINA_CNFG7, KORINA_CNFG8, | ||
43 | KORINA_CNFG9, KORINA_CNFG10, KORINA_CNFG11, KORINA_CNFG12, | ||
44 | KORINA_CNFG13, KORINA_CNFG14, KORINA_CNFG15, KORINA_CNFG16, | ||
45 | KORINA_CNFG17, KORINA_CNFG18, KORINA_CNFG19, KORINA_CNFG20, | ||
46 | KORINA_CNFG21, KORINA_CNFG22, KORINA_CNFG23, KORINA_CNFG24 | ||
47 | }; | ||
48 | static struct resource rc32434_res_pci_mem1; | ||
49 | static struct resource rc32434_res_pci_mem2; | ||
50 | |||
51 | static struct resource rc32434_res_pci_mem1 = { | ||
52 | .name = "PCI MEM1", | ||
53 | .start = 0x50000000, | ||
54 | .end = 0x5FFFFFFF, | ||
55 | .flags = IORESOURCE_MEM, | ||
56 | .parent = &rc32434_res_pci_mem1, | ||
57 | .sibling = NULL, | ||
58 | .child = &rc32434_res_pci_mem2 | ||
59 | }; | ||
60 | |||
61 | static struct resource rc32434_res_pci_mem2 = { | ||
62 | .name = "PCI Mem2", | ||
63 | .start = 0x60000000, | ||
64 | .end = 0x6FFFFFFF, | ||
65 | .flags = IORESOURCE_MEM, | ||
66 | .parent = &rc32434_res_pci_mem1, | ||
67 | .sibling = NULL, | ||
68 | .child = NULL | ||
69 | }; | ||
70 | |||
71 | static struct resource rc32434_res_pci_io1 = { | ||
72 | .name = "PCI I/O1", | ||
73 | .start = 0x18800000, | ||
74 | .end = 0x188FFFFF, | ||
75 | .flags = IORESOURCE_IO, | ||
76 | }; | ||
77 | |||
78 | extern struct pci_ops rc32434_pci_ops; | ||
79 | |||
80 | #define PCI_MEM1_START PCI_ADDR_START | ||
81 | #define PCI_MEM1_END (PCI_ADDR_START + CPUTOPCI_MEM_WIN - 1) | ||
82 | #define PCI_MEM2_START (PCI_ADDR_START + CPUTOPCI_MEM_WIN) | ||
83 | #define PCI_MEM2_END (PCI_ADDR_START + (2 * CPUTOPCI_MEM_WIN) - 1) | ||
84 | #define PCI_IO1_START (PCI_ADDR_START + (2 * CPUTOPCI_MEM_WIN)) | ||
85 | #define PCI_IO1_END \ | ||
86 | (PCI_ADDR_START + (2 * CPUTOPCI_MEM_WIN) + CPUTOPCI_IO_WIN - 1) | ||
87 | #define PCI_IO2_START \ | ||
88 | (PCI_ADDR_START + (2 * CPUTOPCI_MEM_WIN) + CPUTOPCI_IO_WIN) | ||
89 | #define PCI_IO2_END \ | ||
90 | (PCI_ADDR_START + (2 * CPUTOPCI_MEM_WIN) + (2 * CPUTOPCI_IO_WIN) - 1) | ||
91 | |||
92 | struct pci_controller rc32434_controller2; | ||
93 | |||
94 | struct pci_controller rc32434_controller = { | ||
95 | .pci_ops = &rc32434_pci_ops, | ||
96 | .mem_resource = &rc32434_res_pci_mem1, | ||
97 | .io_resource = &rc32434_res_pci_io1, | ||
98 | .mem_offset = 0, | ||
99 | .io_offset = 0, | ||
100 | |||
101 | }; | ||
102 | |||
103 | #ifdef __MIPSEB__ | ||
104 | #define PCI_ENDIAN_FLAG PCILBAC_sb_m | ||
105 | #else | ||
106 | #define PCI_ENDIAN_FLAG 0 | ||
107 | #endif | ||
108 | |||
109 | static int __init rc32434_pcibridge_init(void) | ||
110 | { | ||
111 | unsigned int pcicvalue, pcicdata = 0; | ||
112 | unsigned int dummyread, pcicntlval; | ||
113 | int loopCount; | ||
114 | unsigned int pci_config_addr; | ||
115 | |||
116 | pcicvalue = rc32434_pci->pcic; | ||
117 | pcicvalue = (pcicvalue >> PCIM_SHFT) & PCIM_BIT_LEN; | ||
118 | if (!((pcicvalue == PCIM_H_EA) || | ||
119 | (pcicvalue == PCIM_H_IA_FIX) || | ||
120 | (pcicvalue == PCIM_H_IA_RR))) { | ||
121 | pr_err(KERN_ERR "PCI init error!!!\n"); | ||
122 | /* Not in Host Mode, return ERROR */ | ||
123 | return -1; | ||
124 | } | ||
125 | /* Enables the Idle Grant mode, Arbiter Parking */ | ||
126 | pcicdata |= (PCI_CTL_IGM | PCI_CTL_EAP | PCI_CTL_EN); | ||
127 | rc32434_pci->pcic = pcicdata; /* Enable the PCI bus Interface */ | ||
128 | /* Zero out the PCI status & PCI Status Mask */ | ||
129 | for (;;) { | ||
130 | pcicdata = rc32434_pci->pcis; | ||
131 | if (!(pcicdata & PCI_STAT_RIP)) | ||
132 | break; | ||
133 | } | ||
134 | |||
135 | rc32434_pci->pcis = 0; | ||
136 | rc32434_pci->pcism = 0xFFFFFFFF; | ||
137 | /* Zero out the PCI decoupled registers */ | ||
138 | rc32434_pci->pcidac = 0; /* | ||
139 | * disable PCI decoupled accesses at | ||
140 | * initialization | ||
141 | */ | ||
142 | rc32434_pci->pcidas = 0; /* clear the status */ | ||
143 | rc32434_pci->pcidasm = 0x0000007F; /* Mask all the interrupts */ | ||
144 | /* Mask PCI Messaging Interrupts */ | ||
145 | rc32434_pci_msg->pciiic = 0; | ||
146 | rc32434_pci_msg->pciiim = 0xFFFFFFFF; | ||
147 | rc32434_pci_msg->pciioic = 0; | ||
148 | rc32434_pci_msg->pciioim = 0; | ||
149 | |||
150 | |||
151 | /* Setup PCILB0 as Memory Window */ | ||
152 | rc32434_pci->pcilba[0].address = (unsigned int) (PCI_ADDR_START); | ||
153 | |||
154 | /* setup the PCI map address as same as the local address */ | ||
155 | |||
156 | rc32434_pci->pcilba[0].mapping = (unsigned int) (PCI_ADDR_START); | ||
157 | |||
158 | |||
159 | /* Setup PCILBA1 as MEM */ | ||
160 | rc32434_pci->pcilba[0].control = | ||
161 | (((SIZE_256MB & 0x1f) << PCI_LBAC_SIZE_BIT) | PCI_ENDIAN_FLAG); | ||
162 | dummyread = rc32434_pci->pcilba[0].control; /* flush the CPU write Buffers */ | ||
163 | rc32434_pci->pcilba[1].address = 0x60000000; | ||
164 | rc32434_pci->pcilba[1].mapping = 0x60000000; | ||
165 | |||
166 | /* setup PCILBA2 as IO Window */ | ||
167 | rc32434_pci->pcilba[1].control = | ||
168 | (((SIZE_256MB & 0x1f) << PCI_LBAC_SIZE_BIT) | PCI_ENDIAN_FLAG); | ||
169 | dummyread = rc32434_pci->pcilba[1].control; /* flush the CPU write Buffers */ | ||
170 | rc32434_pci->pcilba[2].address = 0x18C00000; | ||
171 | rc32434_pci->pcilba[2].mapping = 0x18FFFFFF; | ||
172 | |||
173 | /* setup PCILBA2 as IO Window */ | ||
174 | rc32434_pci->pcilba[2].control = | ||
175 | (((SIZE_4MB & 0x1f) << PCI_LBAC_SIZE_BIT) | PCI_ENDIAN_FLAG); | ||
176 | dummyread = rc32434_pci->pcilba[2].control; /* flush the CPU write Buffers */ | ||
177 | |||
178 | /* Setup PCILBA3 as IO Window */ | ||
179 | rc32434_pci->pcilba[3].address = 0x18800000; | ||
180 | rc32434_pci->pcilba[3].mapping = 0x18800000; | ||
181 | rc32434_pci->pcilba[3].control = | ||
182 | ((((SIZE_1MB & 0x1ff) << PCI_LBAC_SIZE_BIT) | PCI_LBAC_MSI) | | ||
183 | PCI_ENDIAN_FLAG); | ||
184 | dummyread = rc32434_pci->pcilba[3].control; /* flush the CPU write Buffers */ | ||
185 | |||
186 | pci_config_addr = (unsigned int) (0x80000004); | ||
187 | for (loopCount = 0; loopCount < 24; loopCount++) { | ||
188 | rc32434_pci->pcicfga = pci_config_addr; | ||
189 | dummyread = rc32434_pci->pcicfga; | ||
190 | rc32434_pci->pcicfgd = korina_cnfg_regs[loopCount]; | ||
191 | dummyread = rc32434_pci->pcicfgd; | ||
192 | pci_config_addr += 4; | ||
193 | } | ||
194 | rc32434_pci->pcitc = | ||
195 | (unsigned int) ((PCITC_RTIMER_VAL & 0xff) << PCI_TC_RTIMER_BIT) | | ||
196 | ((PCITC_DTIMER_VAL & 0xff) << PCI_TC_DTIMER_BIT); | ||
197 | |||
198 | pcicntlval = rc32434_pci->pcic; | ||
199 | pcicntlval &= ~PCI_CTL_TNR; | ||
200 | rc32434_pci->pcic = pcicntlval; | ||
201 | pcicntlval = rc32434_pci->pcic; | ||
202 | |||
203 | return 0; | ||
204 | } | ||
205 | |||
206 | static int __init rc32434_pci_init(void) | ||
207 | { | ||
208 | pr_info("PCI: Initializing PCI\n"); | ||
209 | |||
210 | ioport_resource.start = rc32434_res_pci_io1.start; | ||
211 | ioport_resource.end = rc32434_res_pci_io1.end; | ||
212 | |||
213 | rc32434_pcibridge_init(); | ||
214 | |||
215 | register_pci_controller(&rc32434_controller); | ||
216 | rc32434_sync(); | ||
217 | |||
218 | return 0; | ||
219 | } | ||
220 | |||
221 | arch_initcall(rc32434_pci_init); | ||
diff --git a/arch/mips/pci/pci.c b/arch/mips/pci/pci.c index d7d6cb063d26..77bd5b68dc43 100644 --- a/arch/mips/pci/pci.c +++ b/arch/mips/pci/pci.c | |||
@@ -204,7 +204,7 @@ static int pcibios_enable_resources(struct pci_dev *dev, int mask) | |||
204 | * If we set up a device for bus mastering, we need to check the latency | 204 | * If we set up a device for bus mastering, we need to check the latency |
205 | * timer as certain crappy BIOSes forget to set it properly. | 205 | * timer as certain crappy BIOSes forget to set it properly. |
206 | */ | 206 | */ |
207 | unsigned int pcibios_max_latency = 255; | 207 | static unsigned int pcibios_max_latency = 255; |
208 | 208 | ||
209 | void pcibios_set_master(struct pci_dev *dev) | 209 | void pcibios_set_master(struct pci_dev *dev) |
210 | { | 210 | { |
diff --git a/arch/mips/rb532/Makefile b/arch/mips/rb532/Makefile new file mode 100644 index 000000000000..8f0b6b6a1625 --- /dev/null +++ b/arch/mips/rb532/Makefile | |||
@@ -0,0 +1,7 @@ | |||
1 | # | ||
2 | # Makefile for the RB532 board specific parts of the kernel | ||
3 | # | ||
4 | |||
5 | obj-y += irq.o time.o setup.o serial.o prom.o gpio.o devices.o | ||
6 | |||
7 | EXTRA_CFLAGS += -Werror | ||
diff --git a/arch/mips/rb532/devices.c b/arch/mips/rb532/devices.c new file mode 100644 index 000000000000..44fb0a62877f --- /dev/null +++ b/arch/mips/rb532/devices.c | |||
@@ -0,0 +1,331 @@ | |||
1 | /* | ||
2 | * RouterBoard 500 Platform devices | ||
3 | * | ||
4 | * Copyright (C) 2006 Felix Fietkau <nbd@openwrt.org> | ||
5 | * Copyright (C) 2007 Florian Fainelli <florian@openwrt.org> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License as published by | ||
9 | * the Free Software Foundation; either version 2 of the License, or | ||
10 | * (at your option) any later version. | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, | ||
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
15 | * GNU General Public License for more details. | ||
16 | */ | ||
17 | #include <linux/kernel.h> | ||
18 | #include <linux/init.h> | ||
19 | #include <linux/ctype.h> | ||
20 | #include <linux/string.h> | ||
21 | #include <linux/platform_device.h> | ||
22 | #include <linux/mtd/nand.h> | ||
23 | #include <linux/mtd/mtd.h> | ||
24 | #include <linux/mtd/partitions.h> | ||
25 | #include <linux/gpio_keys.h> | ||
26 | #include <linux/input.h> | ||
27 | |||
28 | #include <asm/bootinfo.h> | ||
29 | |||
30 | #include <asm/mach-rc32434/rc32434.h> | ||
31 | #include <asm/mach-rc32434/dma.h> | ||
32 | #include <asm/mach-rc32434/dma_v.h> | ||
33 | #include <asm/mach-rc32434/eth.h> | ||
34 | #include <asm/mach-rc32434/rb.h> | ||
35 | #include <asm/mach-rc32434/integ.h> | ||
36 | #include <asm/mach-rc32434/gpio.h> | ||
37 | |||
38 | #define ETH0_DMA_RX_IRQ (GROUP1_IRQ_BASE + 0) | ||
39 | #define ETH0_DMA_TX_IRQ (GROUP1_IRQ_BASE + 1) | ||
40 | #define ETH0_RX_OVR_IRQ (GROUP3_IRQ_BASE + 9) | ||
41 | #define ETH0_TX_UND_IRQ (GROUP3_IRQ_BASE + 10) | ||
42 | |||
43 | #define ETH0_RX_DMA_ADDR (DMA0_BASE_ADDR + 0 * DMA_CHAN_OFFSET) | ||
44 | #define ETH0_TX_DMA_ADDR (DMA0_BASE_ADDR + 1 * DMA_CHAN_OFFSET) | ||
45 | |||
46 | /* NAND definitions */ | ||
47 | #define GPIO_RDY (1 << 0x08) | ||
48 | #define GPIO_WPX (1 << 0x09) | ||
49 | #define GPIO_ALE (1 << 0x0a) | ||
50 | #define GPIO_CLE (1 << 0x0b) | ||
51 | |||
52 | extern char *board_type; | ||
53 | |||
54 | static struct resource korina_dev0_res[] = { | ||
55 | { | ||
56 | .name = "korina_regs", | ||
57 | .start = ETH0_BASE_ADDR, | ||
58 | .end = ETH0_BASE_ADDR + sizeof(struct eth_regs), | ||
59 | .flags = IORESOURCE_MEM, | ||
60 | }, { | ||
61 | .name = "korina_rx", | ||
62 | .start = ETH0_DMA_RX_IRQ, | ||
63 | .end = ETH0_DMA_RX_IRQ, | ||
64 | .flags = IORESOURCE_IRQ | ||
65 | }, { | ||
66 | .name = "korina_tx", | ||
67 | .start = ETH0_DMA_TX_IRQ, | ||
68 | .end = ETH0_DMA_TX_IRQ, | ||
69 | .flags = IORESOURCE_IRQ | ||
70 | }, { | ||
71 | .name = "korina_ovr", | ||
72 | .start = ETH0_RX_OVR_IRQ, | ||
73 | .end = ETH0_RX_OVR_IRQ, | ||
74 | .flags = IORESOURCE_IRQ | ||
75 | }, { | ||
76 | .name = "korina_und", | ||
77 | .start = ETH0_TX_UND_IRQ, | ||
78 | .end = ETH0_TX_UND_IRQ, | ||
79 | .flags = IORESOURCE_IRQ | ||
80 | }, { | ||
81 | .name = "korina_dma_rx", | ||
82 | .start = ETH0_RX_DMA_ADDR, | ||
83 | .end = ETH0_RX_DMA_ADDR + DMA_CHAN_OFFSET - 1, | ||
84 | .flags = IORESOURCE_MEM, | ||
85 | }, { | ||
86 | .name = "korina_dma_tx", | ||
87 | .start = ETH0_TX_DMA_ADDR, | ||
88 | .end = ETH0_TX_DMA_ADDR + DMA_CHAN_OFFSET - 1, | ||
89 | .flags = IORESOURCE_MEM, | ||
90 | } | ||
91 | }; | ||
92 | |||
93 | static struct korina_device korina_dev0_data = { | ||
94 | .name = "korina0", | ||
95 | .mac = {0xde, 0xca, 0xff, 0xc0, 0xff, 0xee} | ||
96 | }; | ||
97 | |||
98 | static struct platform_device korina_dev0 = { | ||
99 | .id = 0, | ||
100 | .name = "korina", | ||
101 | .dev.platform_data = &korina_dev0_data, | ||
102 | .resource = korina_dev0_res, | ||
103 | .num_resources = ARRAY_SIZE(korina_dev0_res), | ||
104 | }; | ||
105 | |||
106 | #define CF_GPIO_NUM 13 | ||
107 | |||
108 | static struct resource cf_slot0_res[] = { | ||
109 | { | ||
110 | .name = "cf_membase", | ||
111 | .flags = IORESOURCE_MEM | ||
112 | }, { | ||
113 | .name = "cf_irq", | ||
114 | .start = (8 + 4 * 32 + CF_GPIO_NUM), /* 149 */ | ||
115 | .end = (8 + 4 * 32 + CF_GPIO_NUM), | ||
116 | .flags = IORESOURCE_IRQ | ||
117 | } | ||
118 | }; | ||
119 | |||
120 | static struct cf_device cf_slot0_data = { | ||
121 | .gpio_pin = 13 | ||
122 | }; | ||
123 | |||
124 | static struct platform_device cf_slot0 = { | ||
125 | .id = 0, | ||
126 | .name = "pata-rb532-cf", | ||
127 | .dev.platform_data = &cf_slot0_data, | ||
128 | .resource = cf_slot0_res, | ||
129 | .num_resources = ARRAY_SIZE(cf_slot0_res), | ||
130 | }; | ||
131 | |||
132 | /* Resources and device for NAND */ | ||
133 | static int rb532_dev_ready(struct mtd_info *mtd) | ||
134 | { | ||
135 | return readl(IDT434_REG_BASE + GPIOD) & GPIO_RDY; | ||
136 | } | ||
137 | |||
138 | static void rb532_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl) | ||
139 | { | ||
140 | struct nand_chip *chip = mtd->priv; | ||
141 | unsigned char orbits, nandbits; | ||
142 | |||
143 | if (ctrl & NAND_CTRL_CHANGE) { | ||
144 | orbits = (ctrl & NAND_CLE) << 1; | ||
145 | orbits |= (ctrl & NAND_ALE) >> 1; | ||
146 | |||
147 | nandbits = (~ctrl & NAND_CLE) << 1; | ||
148 | nandbits |= (~ctrl & NAND_ALE) >> 1; | ||
149 | |||
150 | set_latch_u5(orbits, nandbits); | ||
151 | } | ||
152 | if (cmd != NAND_CMD_NONE) | ||
153 | writeb(cmd, chip->IO_ADDR_W); | ||
154 | } | ||
155 | |||
156 | static struct resource nand_slot0_res[] = { | ||
157 | [0] = { | ||
158 | .name = "nand_membase", | ||
159 | .flags = IORESOURCE_MEM | ||
160 | } | ||
161 | }; | ||
162 | |||
163 | static struct platform_nand_data rb532_nand_data = { | ||
164 | .ctrl.dev_ready = rb532_dev_ready, | ||
165 | .ctrl.cmd_ctrl = rb532_cmd_ctrl, | ||
166 | }; | ||
167 | |||
168 | static struct platform_device nand_slot0 = { | ||
169 | .name = "gen_nand", | ||
170 | .id = -1, | ||
171 | .resource = nand_slot0_res, | ||
172 | .num_resources = ARRAY_SIZE(nand_slot0_res), | ||
173 | .dev.platform_data = &rb532_nand_data, | ||
174 | }; | ||
175 | |||
176 | static struct mtd_partition rb532_partition_info[] = { | ||
177 | { | ||
178 | .name = "Routerboard NAND boot", | ||
179 | .offset = 0, | ||
180 | .size = 4 * 1024 * 1024, | ||
181 | }, { | ||
182 | .name = "rootfs", | ||
183 | .offset = MTDPART_OFS_NXTBLK, | ||
184 | .size = MTDPART_SIZ_FULL, | ||
185 | } | ||
186 | }; | ||
187 | |||
188 | static struct platform_device rb532_led = { | ||
189 | .name = "rb532-led", | ||
190 | .id = 0, | ||
191 | }; | ||
192 | |||
193 | static struct gpio_keys_button rb532_gpio_btn[] = { | ||
194 | { | ||
195 | .gpio = 1, | ||
196 | .code = BTN_0, | ||
197 | .desc = "S1", | ||
198 | .active_low = 1, | ||
199 | } | ||
200 | }; | ||
201 | |||
202 | static struct gpio_keys_platform_data rb532_gpio_btn_data = { | ||
203 | .buttons = rb532_gpio_btn, | ||
204 | .nbuttons = ARRAY_SIZE(rb532_gpio_btn), | ||
205 | }; | ||
206 | |||
207 | static struct platform_device rb532_button = { | ||
208 | .name = "gpio-keys", | ||
209 | .id = -1, | ||
210 | .dev = { | ||
211 | .platform_data = &rb532_gpio_btn_data, | ||
212 | } | ||
213 | }; | ||
214 | |||
215 | static struct resource rb532_wdt_res[] = { | ||
216 | { | ||
217 | .name = "rb532_wdt_res", | ||
218 | .start = INTEG0_BASE_ADDR, | ||
219 | .end = INTEG0_BASE_ADDR + sizeof(struct integ), | ||
220 | .flags = IORESOURCE_MEM, | ||
221 | } | ||
222 | }; | ||
223 | |||
224 | static struct platform_device rb532_wdt = { | ||
225 | .name = "rc32434_wdt", | ||
226 | .id = -1, | ||
227 | .resource = rb532_wdt_res, | ||
228 | .num_resources = ARRAY_SIZE(rb532_wdt_res), | ||
229 | }; | ||
230 | |||
231 | static struct platform_device *rb532_devs[] = { | ||
232 | &korina_dev0, | ||
233 | &nand_slot0, | ||
234 | &cf_slot0, | ||
235 | &rb532_led, | ||
236 | &rb532_button, | ||
237 | &rb532_wdt | ||
238 | }; | ||
239 | |||
240 | static void __init parse_mac_addr(char *macstr) | ||
241 | { | ||
242 | int i, j; | ||
243 | unsigned char result, value; | ||
244 | |||
245 | for (i = 0; i < 6; i++) { | ||
246 | result = 0; | ||
247 | |||
248 | if (i != 5 && *(macstr + 2) != ':') | ||
249 | return; | ||
250 | |||
251 | for (j = 0; j < 2; j++) { | ||
252 | if (isxdigit(*macstr) | ||
253 | && (value = | ||
254 | isdigit(*macstr) ? *macstr - | ||
255 | '0' : toupper(*macstr) - 'A' + 10) < 16) { | ||
256 | result = result * 16 + value; | ||
257 | macstr++; | ||
258 | } else | ||
259 | return; | ||
260 | } | ||
261 | |||
262 | macstr++; | ||
263 | korina_dev0_data.mac[i] = result; | ||
264 | } | ||
265 | } | ||
266 | |||
267 | |||
268 | /* DEVICE CONTROLLER 1 */ | ||
269 | #define CFG_DC_DEV1 ((void *)0xb8010010) | ||
270 | #define CFG_DC_DEV2 ((void *)0xb8010020) | ||
271 | #define CFG_DC_DEVBASE 0x0 | ||
272 | #define CFG_DC_DEVMASK 0x4 | ||
273 | #define CFG_DC_DEVC 0x8 | ||
274 | #define CFG_DC_DEVTC 0xC | ||
275 | |||
276 | /* NAND definitions */ | ||
277 | #define NAND_CHIP_DELAY 25 | ||
278 | |||
279 | static void __init rb532_nand_setup(void) | ||
280 | { | ||
281 | switch (mips_machtype) { | ||
282 | case MACH_MIKROTIK_RB532A: | ||
283 | set_latch_u5(LO_FOFF | LO_CEX, | ||
284 | LO_ULED | LO_ALE | LO_CLE | LO_WPX); | ||
285 | break; | ||
286 | default: | ||
287 | set_latch_u5(LO_WPX | LO_FOFF | LO_CEX, | ||
288 | LO_ULED | LO_ALE | LO_CLE); | ||
289 | break; | ||
290 | } | ||
291 | |||
292 | /* Setup NAND specific settings */ | ||
293 | rb532_nand_data.chip.nr_chips = 1; | ||
294 | rb532_nand_data.chip.nr_partitions = ARRAY_SIZE(rb532_partition_info); | ||
295 | rb532_nand_data.chip.partitions = rb532_partition_info; | ||
296 | rb532_nand_data.chip.chip_delay = NAND_CHIP_DELAY; | ||
297 | rb532_nand_data.chip.options = NAND_NO_AUTOINCR; | ||
298 | } | ||
299 | |||
300 | |||
301 | static int __init plat_setup_devices(void) | ||
302 | { | ||
303 | /* Look for the CF card reader */ | ||
304 | if (!readl(CFG_DC_DEV1 + CFG_DC_DEVMASK)) | ||
305 | rb532_devs[1] = NULL; | ||
306 | else { | ||
307 | cf_slot0_res[0].start = | ||
308 | readl(CFG_DC_DEV1 + CFG_DC_DEVBASE); | ||
309 | cf_slot0_res[0].end = cf_slot0_res[0].start + 0x1000; | ||
310 | } | ||
311 | |||
312 | /* Read the NAND resources from the device controller */ | ||
313 | nand_slot0_res[0].start = readl(CFG_DC_DEV2 + CFG_DC_DEVBASE); | ||
314 | nand_slot0_res[0].end = nand_slot0_res[0].start + 0x1000; | ||
315 | |||
316 | /* Initialise the NAND device */ | ||
317 | rb532_nand_setup(); | ||
318 | |||
319 | return platform_add_devices(rb532_devs, ARRAY_SIZE(rb532_devs)); | ||
320 | } | ||
321 | |||
322 | static int __init setup_kmac(char *s) | ||
323 | { | ||
324 | printk(KERN_INFO "korina mac = %s\n", s); | ||
325 | parse_mac_addr(s); | ||
326 | return 0; | ||
327 | } | ||
328 | |||
329 | __setup("kmac=", setup_kmac); | ||
330 | |||
331 | arch_initcall(plat_setup_devices); | ||
diff --git a/arch/mips/rb532/gpio.c b/arch/mips/rb532/gpio.c new file mode 100644 index 000000000000..b2fe82dba0a5 --- /dev/null +++ b/arch/mips/rb532/gpio.c | |||
@@ -0,0 +1,220 @@ | |||
1 | /* | ||
2 | * Miscellaneous functions for IDT EB434 board | ||
3 | * | ||
4 | * Copyright 2004 IDT Inc. (rischelp@idt.com) | ||
5 | * Copyright 2006 Phil Sutter <n0-1@freewrt.org> | ||
6 | * Copyright 2007 Florian Fainelli <florian@openwrt.org> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify it | ||
9 | * under the terms of the GNU General Public License as published by the | ||
10 | * Free Software Foundation; either version 2 of the License, or (at your | ||
11 | * option) any later version. | ||
12 | * | ||
13 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
14 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
15 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
16 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
17 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
18 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
19 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
20 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
21 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
22 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
23 | * | ||
24 | * You should have received a copy of the GNU General Public License along | ||
25 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
26 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
27 | */ | ||
28 | |||
29 | #include <linux/kernel.h> | ||
30 | #include <linux/gpio.h> | ||
31 | #include <linux/init.h> | ||
32 | #include <linux/types.h> | ||
33 | #include <linux/pci.h> | ||
34 | #include <linux/spinlock.h> | ||
35 | #include <linux/io.h> | ||
36 | #include <linux/platform_device.h> | ||
37 | |||
38 | #include <asm/addrspace.h> | ||
39 | |||
40 | #include <asm/mach-rc32434/rb.h> | ||
41 | |||
42 | struct rb532_gpio_reg __iomem *rb532_gpio_reg0; | ||
43 | EXPORT_SYMBOL(rb532_gpio_reg0); | ||
44 | |||
45 | struct mpmc_device dev3; | ||
46 | |||
47 | static struct resource rb532_gpio_reg0_res[] = { | ||
48 | { | ||
49 | .name = "gpio_reg0", | ||
50 | .start = (u32)(IDT434_REG_BASE + GPIOBASE), | ||
51 | .end = (u32)(IDT434_REG_BASE + GPIOBASE + sizeof(struct rb532_gpio_reg)), | ||
52 | .flags = IORESOURCE_MEM, | ||
53 | } | ||
54 | }; | ||
55 | |||
56 | static struct resource rb532_dev3_ctl_res[] = { | ||
57 | { | ||
58 | .name = "dev3_ctl", | ||
59 | .start = (u32)(IDT434_REG_BASE + DEV3BASE), | ||
60 | .end = (u32)(IDT434_REG_BASE + DEV3BASE + sizeof(struct dev_reg)), | ||
61 | .flags = IORESOURCE_MEM, | ||
62 | } | ||
63 | }; | ||
64 | |||
65 | void set_434_reg(unsigned reg_offs, unsigned bit, unsigned len, unsigned val) | ||
66 | { | ||
67 | unsigned flags, data; | ||
68 | unsigned i = 0; | ||
69 | |||
70 | spin_lock_irqsave(&dev3.lock, flags); | ||
71 | |||
72 | data = *(volatile unsigned *) (IDT434_REG_BASE + reg_offs); | ||
73 | for (i = 0; i != len; ++i) { | ||
74 | if (val & (1 << i)) | ||
75 | data |= (1 << (i + bit)); | ||
76 | else | ||
77 | data &= ~(1 << (i + bit)); | ||
78 | } | ||
79 | writel(data, (IDT434_REG_BASE + reg_offs)); | ||
80 | |||
81 | spin_unlock_irqrestore(&dev3.lock, flags); | ||
82 | } | ||
83 | EXPORT_SYMBOL(set_434_reg); | ||
84 | |||
85 | unsigned get_434_reg(unsigned reg_offs) | ||
86 | { | ||
87 | return readl(IDT434_REG_BASE + reg_offs); | ||
88 | } | ||
89 | EXPORT_SYMBOL(get_434_reg); | ||
90 | |||
91 | void set_latch_u5(unsigned char or_mask, unsigned char nand_mask) | ||
92 | { | ||
93 | unsigned flags; | ||
94 | |||
95 | spin_lock_irqsave(&dev3.lock, flags); | ||
96 | |||
97 | dev3.state = (dev3.state | or_mask) & ~nand_mask; | ||
98 | writel(dev3.state, &dev3.base); | ||
99 | |||
100 | spin_unlock_irqrestore(&dev3.lock, flags); | ||
101 | } | ||
102 | EXPORT_SYMBOL(set_latch_u5); | ||
103 | |||
104 | unsigned char get_latch_u5(void) | ||
105 | { | ||
106 | return dev3.state; | ||
107 | } | ||
108 | EXPORT_SYMBOL(get_latch_u5); | ||
109 | |||
110 | int rb532_gpio_get_value(unsigned gpio) | ||
111 | { | ||
112 | return readl(&rb532_gpio_reg0->gpiod) & (1 << gpio); | ||
113 | } | ||
114 | EXPORT_SYMBOL(rb532_gpio_get_value); | ||
115 | |||
116 | void rb532_gpio_set_value(unsigned gpio, int value) | ||
117 | { | ||
118 | unsigned tmp; | ||
119 | |||
120 | tmp = readl(&rb532_gpio_reg0->gpiod) & ~(1 << gpio); | ||
121 | if (value) | ||
122 | tmp |= 1 << gpio; | ||
123 | |||
124 | writel(tmp, (void *)&rb532_gpio_reg0->gpiod); | ||
125 | } | ||
126 | EXPORT_SYMBOL(rb532_gpio_set_value); | ||
127 | |||
128 | int rb532_gpio_direction_input(unsigned gpio) | ||
129 | { | ||
130 | writel(readl(&rb532_gpio_reg0->gpiocfg) & ~(1 << gpio), | ||
131 | (void *)&rb532_gpio_reg0->gpiocfg); | ||
132 | |||
133 | return 0; | ||
134 | } | ||
135 | EXPORT_SYMBOL(rb532_gpio_direction_input); | ||
136 | |||
137 | int rb532_gpio_direction_output(unsigned gpio, int value) | ||
138 | { | ||
139 | gpio_set_value(gpio, value); | ||
140 | writel(readl(&rb532_gpio_reg0->gpiocfg) | (1 << gpio), | ||
141 | (void *)&rb532_gpio_reg0->gpiocfg); | ||
142 | |||
143 | return 0; | ||
144 | } | ||
145 | EXPORT_SYMBOL(rb532_gpio_direction_output); | ||
146 | |||
147 | void rb532_gpio_set_int_level(unsigned gpio, int value) | ||
148 | { | ||
149 | unsigned tmp; | ||
150 | |||
151 | tmp = readl(&rb532_gpio_reg0->gpioilevel) & ~(1 << gpio); | ||
152 | if (value) | ||
153 | tmp |= 1 << gpio; | ||
154 | writel(tmp, (void *)&rb532_gpio_reg0->gpioilevel); | ||
155 | } | ||
156 | EXPORT_SYMBOL(rb532_gpio_set_int_level); | ||
157 | |||
158 | int rb532_gpio_get_int_level(unsigned gpio) | ||
159 | { | ||
160 | return readl(&rb532_gpio_reg0->gpioilevel) & (1 << gpio); | ||
161 | } | ||
162 | EXPORT_SYMBOL(rb532_gpio_get_int_level); | ||
163 | |||
164 | void rb532_gpio_set_int_status(unsigned gpio, int value) | ||
165 | { | ||
166 | unsigned tmp; | ||
167 | |||
168 | tmp = readl(&rb532_gpio_reg0->gpioistat); | ||
169 | if (value) | ||
170 | tmp |= 1 << gpio; | ||
171 | writel(tmp, (void *)&rb532_gpio_reg0->gpioistat); | ||
172 | } | ||
173 | EXPORT_SYMBOL(rb532_gpio_set_int_status); | ||
174 | |||
175 | int rb532_gpio_get_int_status(unsigned gpio) | ||
176 | { | ||
177 | return readl(&rb532_gpio_reg0->gpioistat) & (1 << gpio); | ||
178 | } | ||
179 | EXPORT_SYMBOL(rb532_gpio_get_int_status); | ||
180 | |||
181 | void rb532_gpio_set_func(unsigned gpio, int value) | ||
182 | { | ||
183 | unsigned tmp; | ||
184 | |||
185 | tmp = readl(&rb532_gpio_reg0->gpiofunc); | ||
186 | if (value) | ||
187 | tmp |= 1 << gpio; | ||
188 | writel(tmp, (void *)&rb532_gpio_reg0->gpiofunc); | ||
189 | } | ||
190 | EXPORT_SYMBOL(rb532_gpio_set_func); | ||
191 | |||
192 | int rb532_gpio_get_func(unsigned gpio) | ||
193 | { | ||
194 | return readl(&rb532_gpio_reg0->gpiofunc) & (1 << gpio); | ||
195 | } | ||
196 | EXPORT_SYMBOL(rb532_gpio_get_func); | ||
197 | |||
198 | int __init rb532_gpio_init(void) | ||
199 | { | ||
200 | rb532_gpio_reg0 = ioremap_nocache(rb532_gpio_reg0_res[0].start, | ||
201 | rb532_gpio_reg0_res[0].end - | ||
202 | rb532_gpio_reg0_res[0].start); | ||
203 | |||
204 | if (!rb532_gpio_reg0) { | ||
205 | printk(KERN_ERR "rb532: cannot remap GPIO register 0\n"); | ||
206 | return -ENXIO; | ||
207 | } | ||
208 | |||
209 | dev3.base = ioremap_nocache(rb532_dev3_ctl_res[0].start, | ||
210 | rb532_dev3_ctl_res[0].end - | ||
211 | rb532_dev3_ctl_res[0].start); | ||
212 | |||
213 | if (!dev3.base) { | ||
214 | printk(KERN_ERR "rb532: cannot remap device controller 3\n"); | ||
215 | return -ENXIO; | ||
216 | } | ||
217 | |||
218 | return 0; | ||
219 | } | ||
220 | arch_initcall(rb532_gpio_init); | ||
diff --git a/arch/mips/rb532/irq.c b/arch/mips/rb532/irq.c new file mode 100644 index 000000000000..c0d0f950caf2 --- /dev/null +++ b/arch/mips/rb532/irq.c | |||
@@ -0,0 +1,209 @@ | |||
1 | /* | ||
2 | * This program is free software; you can redistribute it and/or modify it | ||
3 | * under the terms of the GNU General Public License as published by the | ||
4 | * Free Software Foundation; either version 2 of the License, or (at your | ||
5 | * option) any later version. | ||
6 | * | ||
7 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
8 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
9 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
10 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
11 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
12 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
13 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
14 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
15 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
16 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License along | ||
19 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
20 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
21 | * | ||
22 | * Copyright 2002 MontaVista Software Inc. | ||
23 | * Author: MontaVista Software, Inc. | ||
24 | * stevel@mvista.com or source@mvista.com | ||
25 | */ | ||
26 | |||
27 | #include <linux/bitops.h> | ||
28 | #include <linux/errno.h> | ||
29 | #include <linux/init.h> | ||
30 | #include <linux/io.h> | ||
31 | #include <linux/kernel_stat.h> | ||
32 | #include <linux/module.h> | ||
33 | #include <linux/signal.h> | ||
34 | #include <linux/sched.h> | ||
35 | #include <linux/types.h> | ||
36 | #include <linux/interrupt.h> | ||
37 | #include <linux/ioport.h> | ||
38 | #include <linux/timex.h> | ||
39 | #include <linux/slab.h> | ||
40 | #include <linux/random.h> | ||
41 | #include <linux/delay.h> | ||
42 | |||
43 | #include <asm/bootinfo.h> | ||
44 | #include <asm/time.h> | ||
45 | #include <asm/mipsregs.h> | ||
46 | #include <asm/system.h> | ||
47 | |||
48 | #include <asm/mach-rc32434/rc32434.h> | ||
49 | |||
50 | struct intr_group { | ||
51 | u32 mask; /* mask of valid bits in pending/mask registers */ | ||
52 | volatile u32 *base_addr; | ||
53 | }; | ||
54 | |||
55 | #define RC32434_NR_IRQS (GROUP4_IRQ_BASE + 32) | ||
56 | |||
57 | #if (NR_IRQS < RC32434_NR_IRQS) | ||
58 | #error Too little irqs defined. Did you override <asm/irq.h> ? | ||
59 | #endif | ||
60 | |||
61 | static const struct intr_group intr_group[NUM_INTR_GROUPS] = { | ||
62 | { | ||
63 | .mask = 0x0000efff, | ||
64 | .base_addr = (u32 *) KSEG1ADDR(IC_GROUP0_PEND + 0 * IC_GROUP_OFFSET)}, | ||
65 | { | ||
66 | .mask = 0x00001fff, | ||
67 | .base_addr = (u32 *) KSEG1ADDR(IC_GROUP0_PEND + 1 * IC_GROUP_OFFSET)}, | ||
68 | { | ||
69 | .mask = 0x00000007, | ||
70 | .base_addr = (u32 *) KSEG1ADDR(IC_GROUP0_PEND + 2 * IC_GROUP_OFFSET)}, | ||
71 | { | ||
72 | .mask = 0x0003ffff, | ||
73 | .base_addr = (u32 *) KSEG1ADDR(IC_GROUP0_PEND + 3 * IC_GROUP_OFFSET)}, | ||
74 | { | ||
75 | .mask = 0xffffffff, | ||
76 | .base_addr = (u32 *) KSEG1ADDR(IC_GROUP0_PEND + 4 * IC_GROUP_OFFSET)} | ||
77 | }; | ||
78 | |||
79 | #define READ_PEND(base) (*(base)) | ||
80 | #define READ_MASK(base) (*(base + 2)) | ||
81 | #define WRITE_MASK(base, val) (*(base + 2) = (val)) | ||
82 | |||
83 | static inline int irq_to_group(unsigned int irq_nr) | ||
84 | { | ||
85 | return (irq_nr - GROUP0_IRQ_BASE) >> 5; | ||
86 | } | ||
87 | |||
88 | static inline int group_to_ip(unsigned int group) | ||
89 | { | ||
90 | return group + 2; | ||
91 | } | ||
92 | |||
93 | static inline void enable_local_irq(unsigned int ip) | ||
94 | { | ||
95 | int ipnum = 0x100 << ip; | ||
96 | |||
97 | set_c0_status(ipnum); | ||
98 | } | ||
99 | |||
100 | static inline void disable_local_irq(unsigned int ip) | ||
101 | { | ||
102 | int ipnum = 0x100 << ip; | ||
103 | |||
104 | clear_c0_status(ipnum); | ||
105 | } | ||
106 | |||
107 | static inline void ack_local_irq(unsigned int ip) | ||
108 | { | ||
109 | int ipnum = 0x100 << ip; | ||
110 | |||
111 | clear_c0_cause(ipnum); | ||
112 | } | ||
113 | |||
114 | static void rb532_enable_irq(unsigned int irq_nr) | ||
115 | { | ||
116 | int ip = irq_nr - GROUP0_IRQ_BASE; | ||
117 | unsigned int group, intr_bit; | ||
118 | volatile unsigned int *addr; | ||
119 | |||
120 | if (ip < 0) | ||
121 | enable_local_irq(irq_nr); | ||
122 | else { | ||
123 | group = ip >> 5; | ||
124 | |||
125 | ip &= (1 << 5) - 1; | ||
126 | intr_bit = 1 << ip; | ||
127 | |||
128 | enable_local_irq(group_to_ip(group)); | ||
129 | |||
130 | addr = intr_group[group].base_addr; | ||
131 | WRITE_MASK(addr, READ_MASK(addr) & ~intr_bit); | ||
132 | } | ||
133 | } | ||
134 | |||
135 | static void rb532_disable_irq(unsigned int irq_nr) | ||
136 | { | ||
137 | int ip = irq_nr - GROUP0_IRQ_BASE; | ||
138 | unsigned int group, intr_bit, mask; | ||
139 | volatile unsigned int *addr; | ||
140 | |||
141 | if (ip < 0) { | ||
142 | disable_local_irq(irq_nr); | ||
143 | } else { | ||
144 | group = ip >> 5; | ||
145 | |||
146 | ip &= (1 << 5) - 1; | ||
147 | intr_bit = 1 << ip; | ||
148 | addr = intr_group[group].base_addr; | ||
149 | mask = READ_MASK(addr); | ||
150 | mask |= intr_bit; | ||
151 | WRITE_MASK(addr, mask); | ||
152 | |||
153 | /* | ||
154 | * if there are no more interrupts enabled in this | ||
155 | * group, disable corresponding IP | ||
156 | */ | ||
157 | if (mask == intr_group[group].mask) | ||
158 | disable_local_irq(group_to_ip(group)); | ||
159 | } | ||
160 | } | ||
161 | |||
162 | static void rb532_mask_and_ack_irq(unsigned int irq_nr) | ||
163 | { | ||
164 | rb532_disable_irq(irq_nr); | ||
165 | ack_local_irq(group_to_ip(irq_to_group(irq_nr))); | ||
166 | } | ||
167 | |||
168 | static struct irq_chip rc32434_irq_type = { | ||
169 | .name = "RB532", | ||
170 | .ack = rb532_disable_irq, | ||
171 | .mask = rb532_disable_irq, | ||
172 | .mask_ack = rb532_mask_and_ack_irq, | ||
173 | .unmask = rb532_enable_irq, | ||
174 | }; | ||
175 | |||
176 | void __init arch_init_irq(void) | ||
177 | { | ||
178 | int i; | ||
179 | |||
180 | pr_info("Initializing IRQ's: %d out of %d\n", RC32434_NR_IRQS, NR_IRQS); | ||
181 | |||
182 | for (i = 0; i < RC32434_NR_IRQS; i++) | ||
183 | set_irq_chip_and_handler(i, &rc32434_irq_type, | ||
184 | handle_level_irq); | ||
185 | } | ||
186 | |||
187 | /* Main Interrupt dispatcher */ | ||
188 | asmlinkage void plat_irq_dispatch(void) | ||
189 | { | ||
190 | unsigned int ip, pend, group; | ||
191 | volatile unsigned int *addr; | ||
192 | unsigned int cp0_cause = read_c0_cause() & read_c0_status(); | ||
193 | |||
194 | if (cp0_cause & CAUSEF_IP7) { | ||
195 | do_IRQ(7); | ||
196 | } else { | ||
197 | ip = (cp0_cause & 0x7c00); | ||
198 | if (ip) { | ||
199 | group = 21 + (fls(ip) - 32); | ||
200 | |||
201 | addr = intr_group[group].base_addr; | ||
202 | |||
203 | pend = READ_PEND(addr); | ||
204 | pend &= ~READ_MASK(addr); /* only unmasked interrupts */ | ||
205 | pend = 39 + (fls(pend) - 32); | ||
206 | do_IRQ((group << 5) + pend); | ||
207 | } | ||
208 | } | ||
209 | } | ||
diff --git a/arch/mips/rb532/prom.c b/arch/mips/rb532/prom.c new file mode 100644 index 000000000000..1bc0af8febf4 --- /dev/null +++ b/arch/mips/rb532/prom.c | |||
@@ -0,0 +1,158 @@ | |||
1 | /* | ||
2 | * RouterBoard 500 specific prom routines | ||
3 | * | ||
4 | * Copyright (C) 2003, Peter Sadik <peter.sadik@idt.com> | ||
5 | * Copyright (C) 2005-2006, P.Christeas <p_christ@hol.gr> | ||
6 | * Copyright (C) 2007, Gabor Juhos <juhosg@openwrt.org> | ||
7 | * Felix Fietkau <nbd@openwrt.org> | ||
8 | * Florian Fainelli <florian@openwrt.org> | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or | ||
11 | * modify it under the terms of the GNU General Public License | ||
12 | * as published by the Free Software Foundation; either version 2 | ||
13 | * of the License, or (at your option) any later version. | ||
14 | * | ||
15 | * This program is distributed in the hope that it will be useful, | ||
16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
18 | * GNU General Public License for more details. | ||
19 | * | ||
20 | * You should have received a copy of the GNU General Public License | ||
21 | * along with this program; if not, write to the | ||
22 | * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | ||
23 | * Boston, MA 02110-1301, USA. | ||
24 | * | ||
25 | */ | ||
26 | |||
27 | #include <linux/init.h> | ||
28 | #include <linux/mm.h> | ||
29 | #include <linux/module.h> | ||
30 | #include <linux/string.h> | ||
31 | #include <linux/console.h> | ||
32 | #include <linux/bootmem.h> | ||
33 | #include <linux/ioport.h> | ||
34 | #include <linux/blkdev.h> | ||
35 | |||
36 | #include <asm/bootinfo.h> | ||
37 | #include <asm/mach-rc32434/ddr.h> | ||
38 | #include <asm/mach-rc32434/prom.h> | ||
39 | |||
40 | extern void __init setup_serial_port(void); | ||
41 | |||
42 | unsigned int idt_cpu_freq = 132000000; | ||
43 | EXPORT_SYMBOL(idt_cpu_freq); | ||
44 | unsigned int gpio_bootup_state; | ||
45 | EXPORT_SYMBOL(gpio_bootup_state); | ||
46 | |||
47 | static struct resource ddr_reg[] = { | ||
48 | { | ||
49 | .name = "ddr-reg", | ||
50 | .start = DDR0_PHYS_ADDR, | ||
51 | .end = DDR0_PHYS_ADDR + sizeof(struct ddr_ram), | ||
52 | .flags = IORESOURCE_MEM, | ||
53 | } | ||
54 | }; | ||
55 | |||
56 | void __init prom_free_prom_memory(void) | ||
57 | { | ||
58 | /* No prom memory to free */ | ||
59 | } | ||
60 | |||
61 | static inline int match_tag(char *arg, const char *tag) | ||
62 | { | ||
63 | return strncmp(arg, tag, strlen(tag)) == 0; | ||
64 | } | ||
65 | |||
66 | static inline unsigned long tag2ul(char *arg, const char *tag) | ||
67 | { | ||
68 | char *num; | ||
69 | |||
70 | num = arg + strlen(tag); | ||
71 | return simple_strtoul(num, 0, 10); | ||
72 | } | ||
73 | |||
74 | void __init prom_setup_cmdline(void) | ||
75 | { | ||
76 | char cmd_line[CL_SIZE]; | ||
77 | char *cp, *board; | ||
78 | int prom_argc; | ||
79 | char **prom_argv, **prom_envp; | ||
80 | int i; | ||
81 | |||
82 | prom_argc = fw_arg0; | ||
83 | prom_argv = (char **) fw_arg1; | ||
84 | prom_envp = (char **) fw_arg2; | ||
85 | |||
86 | cp = cmd_line; | ||
87 | /* Note: it is common that parameters start | ||
88 | * at argv[1] and not argv[0], | ||
89 | * however, our elf loader starts at [0] */ | ||
90 | for (i = 0; i < prom_argc; i++) { | ||
91 | if (match_tag(prom_argv[i], FREQ_TAG)) { | ||
92 | idt_cpu_freq = tag2ul(prom_argv[i], FREQ_TAG); | ||
93 | continue; | ||
94 | } | ||
95 | #ifdef IGNORE_CMDLINE_MEM | ||
96 | /* parses out the "mem=xx" arg */ | ||
97 | if (match_tag(prom_argv[i], MEM_TAG)) | ||
98 | continue; | ||
99 | #endif | ||
100 | if (i > 0) | ||
101 | *(cp++) = ' '; | ||
102 | if (match_tag(prom_argv[i], BOARD_TAG)) { | ||
103 | board = prom_argv[i] + strlen(BOARD_TAG); | ||
104 | |||
105 | if (match_tag(board, BOARD_RB532A)) | ||
106 | mips_machtype = MACH_MIKROTIK_RB532A; | ||
107 | else | ||
108 | mips_machtype = MACH_MIKROTIK_RB532; | ||
109 | } | ||
110 | |||
111 | if (match_tag(prom_argv[i], GPIO_TAG)) | ||
112 | gpio_bootup_state = tag2ul(prom_argv[i], GPIO_TAG); | ||
113 | |||
114 | strcpy(cp, prom_argv[i]); | ||
115 | cp += strlen(prom_argv[i]); | ||
116 | } | ||
117 | *(cp++) = ' '; | ||
118 | |||
119 | i = strlen(arcs_cmdline); | ||
120 | if (i > 0) { | ||
121 | *(cp++) = ' '; | ||
122 | strcpy(cp, arcs_cmdline); | ||
123 | cp += strlen(arcs_cmdline); | ||
124 | } | ||
125 | if (gpio_bootup_state & 0x02) | ||
126 | strcpy(cp, GPIO_INIT_NOBUTTON); | ||
127 | else | ||
128 | strcpy(cp, GPIO_INIT_BUTTON); | ||
129 | |||
130 | cmd_line[CL_SIZE-1] = '\0'; | ||
131 | |||
132 | strcpy(arcs_cmdline, cmd_line); | ||
133 | } | ||
134 | |||
135 | void __init prom_init(void) | ||
136 | { | ||
137 | struct ddr_ram __iomem *ddr; | ||
138 | phys_t memsize; | ||
139 | phys_t ddrbase; | ||
140 | |||
141 | ddr = ioremap_nocache(ddr_reg[0].start, | ||
142 | ddr_reg[0].end - ddr_reg[0].start); | ||
143 | |||
144 | if (!ddr) { | ||
145 | printk(KERN_ERR "Unable to remap DDR register\n"); | ||
146 | return; | ||
147 | } | ||
148 | |||
149 | ddrbase = (phys_t)&ddr->ddrbase; | ||
150 | memsize = (phys_t)&ddr->ddrmask; | ||
151 | memsize = 0 - memsize; | ||
152 | |||
153 | prom_setup_cmdline(); | ||
154 | |||
155 | /* give all RAM to boot allocator, | ||
156 | * except for the first 0x400 and the last 0x200 bytes */ | ||
157 | add_memory_region(ddrbase + 0x400, memsize - 0x600, BOOT_MEM_RAM); | ||
158 | } | ||
diff --git a/arch/mips/rb532/serial.c b/arch/mips/rb532/serial.c new file mode 100644 index 000000000000..1a05b5ddee09 --- /dev/null +++ b/arch/mips/rb532/serial.c | |||
@@ -0,0 +1,53 @@ | |||
1 | /* | ||
2 | * BRIEF MODULE DESCRIPTION | ||
3 | * Serial port initialisation. | ||
4 | * | ||
5 | * Copyright 2004 IDT Inc. (rischelp@idt.com) | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms of the GNU General Public License as published by the | ||
9 | * Free Software Foundation; either version 2 of the License, or (at your | ||
10 | * option) any later version. | ||
11 | * | ||
12 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
13 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
14 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
15 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
16 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
17 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
18 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
19 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
20 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
21 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
22 | * | ||
23 | * You should have received a copy of the GNU General Public License along | ||
24 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
25 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
26 | */ | ||
27 | |||
28 | #include <linux/init.h> | ||
29 | #include <linux/tty.h> | ||
30 | #include <linux/serial_core.h> | ||
31 | #include <linux/serial_8250.h> | ||
32 | |||
33 | #include <asm/serial.h> | ||
34 | #include <asm/mach-rc32434/rc32434.h> | ||
35 | |||
36 | extern unsigned int idt_cpu_freq; | ||
37 | |||
38 | static struct uart_port rb532_uart = { | ||
39 | .type = PORT_16550A, | ||
40 | .line = 0, | ||
41 | .irq = RC32434_UART0_IRQ, | ||
42 | .iotype = UPIO_MEM, | ||
43 | .membase = (char *)KSEG1ADDR(RC32434_UART0_BASE), | ||
44 | .regshift = 2 | ||
45 | }; | ||
46 | |||
47 | int __init setup_serial_port(void) | ||
48 | { | ||
49 | rb532_uart.uartclk = idt_cpu_freq; | ||
50 | |||
51 | return early_serial_setup(&rb532_uart); | ||
52 | } | ||
53 | arch_initcall(setup_serial_port); | ||
diff --git a/arch/mips/rb532/setup.c b/arch/mips/rb532/setup.c new file mode 100644 index 000000000000..7aafa95ac20b --- /dev/null +++ b/arch/mips/rb532/setup.c | |||
@@ -0,0 +1,79 @@ | |||
1 | /* | ||
2 | * setup.c - boot time setup code | ||
3 | */ | ||
4 | |||
5 | #include <linux/init.h> | ||
6 | |||
7 | #include <asm/bootinfo.h> | ||
8 | #include <asm/reboot.h> | ||
9 | #include <asm/time.h> | ||
10 | #include <linux/ioport.h> | ||
11 | |||
12 | #include <asm/mach-rc32434/rc32434.h> | ||
13 | #include <asm/mach-rc32434/pci.h> | ||
14 | |||
15 | struct pci_reg __iomem *pci_reg; | ||
16 | EXPORT_SYMBOL(pci_reg); | ||
17 | |||
18 | static struct resource pci0_res[] = { | ||
19 | { | ||
20 | .name = "pci_reg0", | ||
21 | .start = PCI0_BASE_ADDR, | ||
22 | .end = PCI0_BASE_ADDR + sizeof(struct pci_reg), | ||
23 | .flags = IORESOURCE_MEM, | ||
24 | } | ||
25 | }; | ||
26 | |||
27 | static void rb_machine_restart(char *command) | ||
28 | { | ||
29 | /* just jump to the reset vector */ | ||
30 | writel(0x80000001, (void *)KSEG1ADDR(RC32434_REG_BASE + RC32434_RST)); | ||
31 | ((void (*)(void)) KSEG1ADDR(0x1FC00000u))(); | ||
32 | } | ||
33 | |||
34 | static void rb_machine_halt(void) | ||
35 | { | ||
36 | for (;;) | ||
37 | continue; | ||
38 | } | ||
39 | |||
40 | void __init plat_mem_setup(void) | ||
41 | { | ||
42 | u32 val; | ||
43 | |||
44 | _machine_restart = rb_machine_restart; | ||
45 | _machine_halt = rb_machine_halt; | ||
46 | pm_power_off = rb_machine_halt; | ||
47 | |||
48 | set_io_port_base(KSEG1); | ||
49 | |||
50 | pci_reg = ioremap_nocache(pci0_res[0].start, | ||
51 | pci0_res[0].end - pci0_res[0].start); | ||
52 | if (!pci_reg) { | ||
53 | printk(KERN_ERR "Could not remap PCI registers\n"); | ||
54 | return; | ||
55 | } | ||
56 | |||
57 | val = __raw_readl(&pci_reg->pcic); | ||
58 | val &= 0xFFFFFF7; | ||
59 | __raw_writel(val, (void *)&pci_reg->pcic); | ||
60 | |||
61 | #ifdef CONFIG_PCI | ||
62 | /* Enable PCI interrupts in EPLD Mask register */ | ||
63 | *epld_mask = 0x0; | ||
64 | *(epld_mask + 1) = 0x0; | ||
65 | #endif | ||
66 | write_c0_wired(0); | ||
67 | } | ||
68 | |||
69 | const char *get_system_type(void) | ||
70 | { | ||
71 | switch (mips_machtype) { | ||
72 | case MACH_MIKROTIK_RB532A: | ||
73 | return "Mikrotik RB532A"; | ||
74 | break; | ||
75 | default: | ||
76 | return "Mikrotik RB532"; | ||
77 | break; | ||
78 | } | ||
79 | } | ||
diff --git a/arch/mips/rb532/time.c b/arch/mips/rb532/time.c new file mode 100644 index 000000000000..db74edf8cefb --- /dev/null +++ b/arch/mips/rb532/time.c | |||
@@ -0,0 +1,67 @@ | |||
1 | /* | ||
2 | * Carsten Langgaard, carstenl@mips.com | ||
3 | * Copyright (C) 1999,2000 MIPS Technologies, Inc. All rights reserved. | ||
4 | * | ||
5 | * This program is free software; you can distribute it and/or modify it | ||
6 | * under the terms of the GNU General Public License (Version 2) as | ||
7 | * published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
12 | * for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License along | ||
15 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
16 | * 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. | ||
17 | * | ||
18 | * Setting up the clock on the MIPS boards. | ||
19 | */ | ||
20 | |||
21 | #include <linux/init.h> | ||
22 | #include <linux/kernel_stat.h> | ||
23 | #include <linux/ptrace.h> | ||
24 | #include <linux/sched.h> | ||
25 | #include <linux/spinlock.h> | ||
26 | #include <linux/mc146818rtc.h> | ||
27 | #include <linux/irq.h> | ||
28 | #include <linux/timex.h> | ||
29 | |||
30 | #include <asm/mipsregs.h> | ||
31 | #include <asm/debug.h> | ||
32 | #include <asm/time.h> | ||
33 | #include <asm/mach-rc32434/rc32434.h> | ||
34 | |||
35 | extern unsigned int idt_cpu_freq; | ||
36 | |||
37 | /* | ||
38 | * Figure out the r4k offset, the amount to increment the compare | ||
39 | * register for each time tick. There is no RTC available. | ||
40 | * | ||
41 | * The RC32434 counts at half the CPU *core* speed. | ||
42 | */ | ||
43 | static unsigned long __init cal_r4koff(void) | ||
44 | { | ||
45 | mips_hpt_frequency = idt_cpu_freq * IDT_CLOCK_MULT / 2; | ||
46 | |||
47 | return mips_hpt_frequency / HZ; | ||
48 | } | ||
49 | |||
50 | void __init plat_time_init(void) | ||
51 | { | ||
52 | unsigned int est_freq, flags; | ||
53 | unsigned long r4k_offset; | ||
54 | |||
55 | local_irq_save(flags); | ||
56 | |||
57 | printk(KERN_INFO "calculating r4koff... "); | ||
58 | r4k_offset = cal_r4koff(); | ||
59 | printk("%08lx(%d)\n", r4k_offset, (int) r4k_offset); | ||
60 | |||
61 | est_freq = 2 * r4k_offset * HZ; | ||
62 | est_freq += 5000; /* round */ | ||
63 | est_freq -= est_freq % 10000; | ||
64 | printk(KERN_INFO "CPU frequency %d.%02d MHz\n", est_freq / 1000000, | ||
65 | (est_freq % 1000000) * 100 / 1000000); | ||
66 | local_irq_restore(flags); | ||
67 | } | ||
diff --git a/arch/mips/sgi-ip22/ip22-platform.c b/arch/mips/sgi-ip22/ip22-platform.c index fc6df96305ed..60141235ec40 100644 --- a/arch/mips/sgi-ip22/ip22-platform.c +++ b/arch/mips/sgi-ip22/ip22-platform.c | |||
@@ -188,8 +188,7 @@ static int __init sgi_button_devinit(void) | |||
188 | if (ip22_is_fullhouse()) | 188 | if (ip22_is_fullhouse()) |
189 | return 0; /* full house has no volume buttons */ | 189 | return 0; /* full house has no volume buttons */ |
190 | 190 | ||
191 | return IS_ERR(platform_device_register_simple("sgiindybtns", | 191 | return IS_ERR(platform_device_register_simple("sgibtns", -1, NULL, 0)); |
192 | -1, NULL, 0)); | ||
193 | } | 192 | } |
194 | 193 | ||
195 | device_initcall(sgi_button_devinit); | 194 | device_initcall(sgi_button_devinit); |
diff --git a/arch/mips/sgi-ip22/ip28-berr.c b/arch/mips/sgi-ip22/ip28-berr.c index fee7a2e0e538..30e12e2ec4b5 100644 --- a/arch/mips/sgi-ip22/ip28-berr.c +++ b/arch/mips/sgi-ip22/ip28-berr.c | |||
@@ -412,7 +412,7 @@ static int ip28_be_interrupt(const struct pt_regs *regs) | |||
412 | * Now we have an asynchronous bus error, speculatively or DMA caused. | 412 | * Now we have an asynchronous bus error, speculatively or DMA caused. |
413 | * Need to search all DMA descriptors for the error address. | 413 | * Need to search all DMA descriptors for the error address. |
414 | */ | 414 | */ |
415 | for (i = 0; i < ARRAY_SIZE(hpc3); ++i) { | 415 | for (i = 0; i < sizeof(hpc3)/sizeof(struct hpc3_stat); ++i) { |
416 | struct hpc3_stat *hp = (struct hpc3_stat *)&hpc3 + i; | 416 | struct hpc3_stat *hp = (struct hpc3_stat *)&hpc3 + i; |
417 | if ((cpu_err_stat & CPU_ERRMASK) && | 417 | if ((cpu_err_stat & CPU_ERRMASK) && |
418 | (cpu_err_addr == hp->ndptr || cpu_err_addr == hp->cbp)) | 418 | (cpu_err_addr == hp->ndptr || cpu_err_addr == hp->cbp)) |
@@ -421,7 +421,7 @@ static int ip28_be_interrupt(const struct pt_regs *regs) | |||
421 | (gio_err_addr == hp->ndptr || gio_err_addr == hp->cbp)) | 421 | (gio_err_addr == hp->ndptr || gio_err_addr == hp->cbp)) |
422 | break; | 422 | break; |
423 | } | 423 | } |
424 | if (i < ARRAY_SIZE(hpc3)) { | 424 | if (i < sizeof(hpc3)/sizeof(struct hpc3_stat)) { |
425 | struct hpc3_stat *hp = (struct hpc3_stat *)&hpc3 + i; | 425 | struct hpc3_stat *hp = (struct hpc3_stat *)&hpc3 + i; |
426 | printk(KERN_ERR "at DMA addresses: HPC3 @ %08lx:" | 426 | printk(KERN_ERR "at DMA addresses: HPC3 @ %08lx:" |
427 | " ctl %08x, ndp %08x, cbp %08x\n", | 427 | " ctl %08x, ndp %08x, cbp %08x\n", |
diff --git a/arch/mips/sgi-ip27/ip27-klnuma.c b/arch/mips/sgi-ip27/ip27-klnuma.c index 48932ce1d730..d9c79d8be81d 100644 --- a/arch/mips/sgi-ip27/ip27-klnuma.c +++ b/arch/mips/sgi-ip27/ip27-klnuma.c | |||
@@ -4,6 +4,7 @@ | |||
4 | * Copyright 2000 - 2001 Kanoj Sarcar (kanoj@sgi.com) | 4 | * Copyright 2000 - 2001 Kanoj Sarcar (kanoj@sgi.com) |
5 | */ | 5 | */ |
6 | #include <linux/init.h> | 6 | #include <linux/init.h> |
7 | #include <linux/mm.h> | ||
7 | #include <linux/mmzone.h> | 8 | #include <linux/mmzone.h> |
8 | #include <linux/kernel.h> | 9 | #include <linux/kernel.h> |
9 | #include <linux/nodemask.h> | 10 | #include <linux/nodemask.h> |
diff --git a/arch/mips/sgi-ip27/ip27-memory.c b/arch/mips/sgi-ip27/ip27-memory.c index 42cd10956306..060d853d7b35 100644 --- a/arch/mips/sgi-ip27/ip27-memory.c +++ b/arch/mips/sgi-ip27/ip27-memory.c | |||
@@ -33,8 +33,6 @@ | |||
33 | #define SLOT_PFNSHIFT (SLOT_SHIFT - PAGE_SHIFT) | 33 | #define SLOT_PFNSHIFT (SLOT_SHIFT - PAGE_SHIFT) |
34 | #define PFN_NASIDSHFT (NASID_SHFT - PAGE_SHIFT) | 34 | #define PFN_NASIDSHFT (NASID_SHFT - PAGE_SHIFT) |
35 | 35 | ||
36 | static struct bootmem_data __initdata plat_node_bdata[MAX_COMPACT_NODES]; | ||
37 | |||
38 | struct node_data *__node_data[MAX_COMPACT_NODES]; | 36 | struct node_data *__node_data[MAX_COMPACT_NODES]; |
39 | 37 | ||
40 | EXPORT_SYMBOL(__node_data); | 38 | EXPORT_SYMBOL(__node_data); |
@@ -403,7 +401,7 @@ static void __init node_mem_init(cnodeid_t node) | |||
403 | */ | 401 | */ |
404 | __node_data[node] = __va(slot_freepfn << PAGE_SHIFT); | 402 | __node_data[node] = __va(slot_freepfn << PAGE_SHIFT); |
405 | 403 | ||
406 | NODE_DATA(node)->bdata = &plat_node_bdata[node]; | 404 | NODE_DATA(node)->bdata = &bootmem_node_data[node]; |
407 | NODE_DATA(node)->node_start_pfn = start_pfn; | 405 | NODE_DATA(node)->node_start_pfn = start_pfn; |
408 | NODE_DATA(node)->node_spanned_pages = end_pfn - start_pfn; | 406 | NODE_DATA(node)->node_spanned_pages = end_pfn - start_pfn; |
409 | 407 | ||
diff --git a/arch/mips/sgi-ip32/ip32-platform.c b/arch/mips/sgi-ip32/ip32-platform.c index 2ee401ba0b25..3d63721e0e80 100644 --- a/arch/mips/sgi-ip32/ip32-platform.c +++ b/arch/mips/sgi-ip32/ip32-platform.c | |||
@@ -85,18 +85,7 @@ device_initcall(sgio2audio_devinit); | |||
85 | 85 | ||
86 | static __init int sgio2btns_devinit(void) | 86 | static __init int sgio2btns_devinit(void) |
87 | { | 87 | { |
88 | struct platform_device *pd; | 88 | return IS_ERR(platform_device_register_simple("sgibtns", -1, NULL, 0)); |
89 | int ret; | ||
90 | |||
91 | pd = platform_device_alloc("sgio2btns", -1); | ||
92 | if (!pd) | ||
93 | return -ENOMEM; | ||
94 | |||
95 | ret = platform_device_add(pd); | ||
96 | if (ret) | ||
97 | platform_device_put(pd); | ||
98 | |||
99 | return ret; | ||
100 | } | 89 | } |
101 | 90 | ||
102 | device_initcall(sgio2btns_devinit); | 91 | device_initcall(sgio2btns_devinit); |
diff --git a/arch/mips/sibyte/common/sb_tbprof.c b/arch/mips/sibyte/common/sb_tbprof.c index 28b012ab8dcb..66e3e3fb311f 100644 --- a/arch/mips/sibyte/common/sb_tbprof.c +++ b/arch/mips/sibyte/common/sb_tbprof.c | |||
@@ -576,7 +576,8 @@ static int __init sbprof_tb_init(void) | |||
576 | 576 | ||
577 | tb_class = tbc; | 577 | tb_class = tbc; |
578 | 578 | ||
579 | dev = device_create(tbc, NULL, MKDEV(SBPROF_TB_MAJOR, 0), "tb"); | 579 | dev = device_create_drvdata(tbc, NULL, MKDEV(SBPROF_TB_MAJOR, 0), |
580 | NULL, "tb"); | ||
580 | if (IS_ERR(dev)) { | 581 | if (IS_ERR(dev)) { |
581 | err = PTR_ERR(dev); | 582 | err = PTR_ERR(dev); |
582 | goto out_class; | 583 | goto out_class; |
diff --git a/arch/mips/txx9/Kconfig b/arch/mips/txx9/Kconfig index b92a134ef124..6de4c5aa92be 100644 --- a/arch/mips/txx9/Kconfig +++ b/arch/mips/txx9/Kconfig | |||
@@ -7,6 +7,8 @@ config TOSHIBA_RBTX4927 | |||
7 | bool "Toshiba RBTX49[23]7 board" | 7 | bool "Toshiba RBTX49[23]7 board" |
8 | depends on MACH_TX49XX | 8 | depends on MACH_TX49XX |
9 | select SOC_TX4927 | 9 | select SOC_TX4927 |
10 | # TX4937 is subset of TX4938 | ||
11 | select SOC_TX4938 | ||
10 | help | 12 | help |
11 | This Toshiba board is based on the TX4927 processor. Say Y here to | 13 | This Toshiba board is based on the TX4927 processor. Say Y here to |
12 | support this machine type | 14 | support this machine type |
diff --git a/arch/mips/txx9/generic/Makefile b/arch/mips/txx9/generic/Makefile index 668fdaad6448..9c120771e65f 100644 --- a/arch/mips/txx9/generic/Makefile +++ b/arch/mips/txx9/generic/Makefile | |||
@@ -4,8 +4,8 @@ | |||
4 | 4 | ||
5 | obj-y += setup.o | 5 | obj-y += setup.o |
6 | obj-$(CONFIG_PCI) += pci.o | 6 | obj-$(CONFIG_PCI) += pci.o |
7 | obj-$(CONFIG_SOC_TX4927) += mem_tx4927.o irq_tx4927.o | 7 | obj-$(CONFIG_SOC_TX4927) += mem_tx4927.o setup_tx4927.o irq_tx4927.o |
8 | obj-$(CONFIG_SOC_TX4938) += mem_tx4938.o irq_tx4938.o | 8 | obj-$(CONFIG_SOC_TX4938) += mem_tx4927.o setup_tx4938.o irq_tx4938.o |
9 | obj-$(CONFIG_TOSHIBA_FPCIB0) += smsc_fdc37m81x.o | 9 | obj-$(CONFIG_TOSHIBA_FPCIB0) += smsc_fdc37m81x.o |
10 | obj-$(CONFIG_KGDB) += dbgio.o | 10 | obj-$(CONFIG_KGDB) += dbgio.o |
11 | 11 | ||
diff --git a/arch/mips/txx9/generic/irq_tx4927.c b/arch/mips/txx9/generic/irq_tx4927.c index 6377bd8a9050..cbea1fdde82b 100644 --- a/arch/mips/txx9/generic/irq_tx4927.c +++ b/arch/mips/txx9/generic/irq_tx4927.c | |||
@@ -31,7 +31,7 @@ | |||
31 | void __init tx4927_irq_init(void) | 31 | void __init tx4927_irq_init(void) |
32 | { | 32 | { |
33 | mips_cpu_irq_init(); | 33 | mips_cpu_irq_init(); |
34 | txx9_irq_init(TX4927_IRC_REG); | 34 | txx9_irq_init(TX4927_IRC_REG & 0xfffffffffULL); |
35 | set_irq_chained_handler(MIPS_CPU_IRQ_BASE + TX4927_IRC_INT, | 35 | set_irq_chained_handler(MIPS_CPU_IRQ_BASE + TX4927_IRC_INT, |
36 | handle_simple_irq); | 36 | handle_simple_irq); |
37 | } | 37 | } |
diff --git a/arch/mips/txx9/generic/irq_tx4938.c b/arch/mips/txx9/generic/irq_tx4938.c index 5fc86c9c9d2f..6eac684bf190 100644 --- a/arch/mips/txx9/generic/irq_tx4938.c +++ b/arch/mips/txx9/generic/irq_tx4938.c | |||
@@ -19,7 +19,7 @@ | |||
19 | void __init tx4938_irq_init(void) | 19 | void __init tx4938_irq_init(void) |
20 | { | 20 | { |
21 | mips_cpu_irq_init(); | 21 | mips_cpu_irq_init(); |
22 | txx9_irq_init(TX4938_IRC_REG); | 22 | txx9_irq_init(TX4938_IRC_REG & 0xfffffffffULL); |
23 | set_irq_chained_handler(MIPS_CPU_IRQ_BASE + TX4938_IRC_INT, | 23 | set_irq_chained_handler(MIPS_CPU_IRQ_BASE + TX4938_IRC_INT, |
24 | handle_simple_irq); | 24 | handle_simple_irq); |
25 | } | 25 | } |
diff --git a/arch/mips/txx9/generic/mem_tx4927.c b/arch/mips/txx9/generic/mem_tx4927.c index 12dfc377bf2f..ef6ea6e97873 100644 --- a/arch/mips/txx9/generic/mem_tx4927.c +++ b/arch/mips/txx9/generic/mem_tx4927.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * linux/arch/mips/tx4927/common/tx4927_prom.c | 2 | * linux/arch/mips/txx9/generic/mem_tx4927.c |
3 | * | 3 | * |
4 | * common tx4927 memory interface | 4 | * common tx4927 memory interface |
5 | * | 5 | * |
@@ -32,8 +32,9 @@ | |||
32 | #include <linux/init.h> | 32 | #include <linux/init.h> |
33 | #include <linux/types.h> | 33 | #include <linux/types.h> |
34 | #include <linux/io.h> | 34 | #include <linux/io.h> |
35 | #include <asm/txx9/tx4927.h> | ||
35 | 36 | ||
36 | static unsigned int __init tx4927_process_sdccr(unsigned long addr) | 37 | static unsigned int __init tx4927_process_sdccr(u64 __iomem *addr) |
37 | { | 38 | { |
38 | u64 val; | 39 | u64 val; |
39 | unsigned int sdccr_ce; | 40 | unsigned int sdccr_ce; |
@@ -45,97 +46,32 @@ static unsigned int __init tx4927_process_sdccr(unsigned long addr) | |||
45 | unsigned int rs = 0; | 46 | unsigned int rs = 0; |
46 | unsigned int cs = 0; | 47 | unsigned int cs = 0; |
47 | unsigned int mw = 0; | 48 | unsigned int mw = 0; |
48 | unsigned int msize = 0; | ||
49 | 49 | ||
50 | val = __raw_readq((void __iomem *)addr); | 50 | val = __raw_readq(addr); |
51 | 51 | ||
52 | /* MVMCP -- need #defs for these bits masks */ | 52 | /* MVMCP -- need #defs for these bits masks */ |
53 | sdccr_ce = ((val & (1 << 10)) >> 10); | 53 | sdccr_ce = ((val & (1 << 10)) >> 10); |
54 | sdccr_bs = ((val & (1 << 8)) >> 8); | 54 | sdccr_bs = ((val & (1 << 8)) >> 8); |
55 | sdccr_rs = ((val & (3 << 5)) >> 5); | 55 | sdccr_rs = ((val & (3 << 5)) >> 5); |
56 | sdccr_cs = ((val & (3 << 2)) >> 2); | 56 | sdccr_cs = ((val & (7 << 2)) >> 2); |
57 | sdccr_mw = ((val & (1 << 0)) >> 0); | 57 | sdccr_mw = ((val & (1 << 0)) >> 0); |
58 | 58 | ||
59 | if (sdccr_ce) { | 59 | if (sdccr_ce) { |
60 | switch (sdccr_bs) { | 60 | bs = 2 << sdccr_bs; |
61 | case 0:{ | 61 | rs = 2048 << sdccr_rs; |
62 | bs = 2; | 62 | cs = 256 << sdccr_cs; |
63 | break; | 63 | mw = 8 >> sdccr_mw; |
64 | } | ||
65 | case 1:{ | ||
66 | bs = 4; | ||
67 | break; | ||
68 | } | ||
69 | } | ||
70 | switch (sdccr_rs) { | ||
71 | case 0:{ | ||
72 | rs = 2048; | ||
73 | break; | ||
74 | } | ||
75 | case 1:{ | ||
76 | rs = 4096; | ||
77 | break; | ||
78 | } | ||
79 | case 2:{ | ||
80 | rs = 8192; | ||
81 | break; | ||
82 | } | ||
83 | case 3:{ | ||
84 | rs = 0; | ||
85 | break; | ||
86 | } | ||
87 | } | ||
88 | switch (sdccr_cs) { | ||
89 | case 0:{ | ||
90 | cs = 256; | ||
91 | break; | ||
92 | } | ||
93 | case 1:{ | ||
94 | cs = 512; | ||
95 | break; | ||
96 | } | ||
97 | case 2:{ | ||
98 | cs = 1024; | ||
99 | break; | ||
100 | } | ||
101 | case 3:{ | ||
102 | cs = 2048; | ||
103 | break; | ||
104 | } | ||
105 | } | ||
106 | switch (sdccr_mw) { | ||
107 | case 0:{ | ||
108 | mw = 8; | ||
109 | break; | ||
110 | } /* 8 bytes = 64 bits */ | ||
111 | case 1:{ | ||
112 | mw = 4; | ||
113 | break; | ||
114 | } /* 4 bytes = 32 bits */ | ||
115 | } | ||
116 | } | 64 | } |
117 | 65 | ||
118 | /* bytes per chip MB per chip num chips */ | 66 | return rs * cs * mw * bs; |
119 | msize = (((rs * cs * mw) / (1024 * 1024)) * bs); | ||
120 | |||
121 | return (msize); | ||
122 | } | 67 | } |
123 | 68 | ||
124 | |||
125 | unsigned int __init tx4927_get_mem_size(void) | 69 | unsigned int __init tx4927_get_mem_size(void) |
126 | { | 70 | { |
127 | unsigned int c0; | 71 | unsigned int total = 0; |
128 | unsigned int c1; | 72 | int i; |
129 | unsigned int c2; | ||
130 | unsigned int c3; | ||
131 | unsigned int total; | ||
132 | |||
133 | /* MVMCP -- need #defs for these registers */ | ||
134 | c0 = tx4927_process_sdccr(0xff1f8000); | ||
135 | c1 = tx4927_process_sdccr(0xff1f8008); | ||
136 | c2 = tx4927_process_sdccr(0xff1f8010); | ||
137 | c3 = tx4927_process_sdccr(0xff1f8018); | ||
138 | total = c0 + c1 + c2 + c3; | ||
139 | 73 | ||
140 | return (total); | 74 | for (i = 0; i < ARRAY_SIZE(tx4927_sdramcptr->cr); i++) |
75 | total += tx4927_process_sdccr(&tx4927_sdramcptr->cr[i]); | ||
76 | return total; | ||
141 | } | 77 | } |
diff --git a/arch/mips/txx9/generic/mem_tx4938.c b/arch/mips/txx9/generic/mem_tx4938.c deleted file mode 100644 index 20baeaeba4cd..000000000000 --- a/arch/mips/txx9/generic/mem_tx4938.c +++ /dev/null | |||
@@ -1,124 +0,0 @@ | |||
1 | /* | ||
2 | * linux/arch/mips/tx4938/common/prom.c | ||
3 | * | ||
4 | * common tx4938 memory interface | ||
5 | * Copyright (C) 2000-2001 Toshiba Corporation | ||
6 | * | ||
7 | * 2003-2005 (c) MontaVista Software, Inc. This file is licensed under the | ||
8 | * terms of the GNU General Public License version 2. This program is | ||
9 | * licensed "as is" without any warranty of any kind, whether express | ||
10 | * or implied. | ||
11 | * | ||
12 | * Support for TX4938 in 2.6 - Manish Lachwani (mlachwani@mvista.com) | ||
13 | */ | ||
14 | |||
15 | #include <linux/init.h> | ||
16 | #include <linux/types.h> | ||
17 | #include <linux/io.h> | ||
18 | |||
19 | static unsigned int __init | ||
20 | tx4938_process_sdccr(u64 * addr) | ||
21 | { | ||
22 | u64 val; | ||
23 | unsigned int sdccr_ce; | ||
24 | unsigned int sdccr_rs; | ||
25 | unsigned int sdccr_cs; | ||
26 | unsigned int sdccr_mw; | ||
27 | unsigned int rs = 0; | ||
28 | unsigned int cs = 0; | ||
29 | unsigned int mw = 0; | ||
30 | unsigned int bc = 4; | ||
31 | unsigned int msize = 0; | ||
32 | |||
33 | val = ____raw_readq((void __iomem *)addr); | ||
34 | |||
35 | /* MVMCP -- need #defs for these bits masks */ | ||
36 | sdccr_ce = ((val & (1 << 10)) >> 10); | ||
37 | sdccr_rs = ((val & (3 << 5)) >> 5); | ||
38 | sdccr_cs = ((val & (7 << 2)) >> 2); | ||
39 | sdccr_mw = ((val & (1 << 0)) >> 0); | ||
40 | |||
41 | if (sdccr_ce) { | ||
42 | switch (sdccr_rs) { | ||
43 | case 0:{ | ||
44 | rs = 2048; | ||
45 | break; | ||
46 | } | ||
47 | case 1:{ | ||
48 | rs = 4096; | ||
49 | break; | ||
50 | } | ||
51 | case 2:{ | ||
52 | rs = 8192; | ||
53 | break; | ||
54 | } | ||
55 | default:{ | ||
56 | rs = 0; | ||
57 | break; | ||
58 | } | ||
59 | } | ||
60 | switch (sdccr_cs) { | ||
61 | case 0:{ | ||
62 | cs = 256; | ||
63 | break; | ||
64 | } | ||
65 | case 1:{ | ||
66 | cs = 512; | ||
67 | break; | ||
68 | } | ||
69 | case 2:{ | ||
70 | cs = 1024; | ||
71 | break; | ||
72 | } | ||
73 | case 3:{ | ||
74 | cs = 2048; | ||
75 | break; | ||
76 | } | ||
77 | case 4:{ | ||
78 | cs = 4096; | ||
79 | break; | ||
80 | } | ||
81 | default:{ | ||
82 | cs = 0; | ||
83 | break; | ||
84 | } | ||
85 | } | ||
86 | switch (sdccr_mw) { | ||
87 | case 0:{ | ||
88 | mw = 8; | ||
89 | break; | ||
90 | } /* 8 bytes = 64 bits */ | ||
91 | case 1:{ | ||
92 | mw = 4; | ||
93 | break; | ||
94 | } /* 4 bytes = 32 bits */ | ||
95 | } | ||
96 | } | ||
97 | |||
98 | /* bytes per chip MB per chip bank count */ | ||
99 | msize = (((rs * cs * mw) / (1024 * 1024)) * (bc)); | ||
100 | |||
101 | /* MVMCP -- bc hard coded to 4 from table 9.3.1 */ | ||
102 | /* boad supports bc=2 but no way to detect */ | ||
103 | |||
104 | return (msize); | ||
105 | } | ||
106 | |||
107 | unsigned int __init | ||
108 | tx4938_get_mem_size(void) | ||
109 | { | ||
110 | unsigned int c0; | ||
111 | unsigned int c1; | ||
112 | unsigned int c2; | ||
113 | unsigned int c3; | ||
114 | unsigned int total; | ||
115 | |||
116 | /* MVMCP -- need #defs for these registers */ | ||
117 | c0 = tx4938_process_sdccr((u64 *) 0xff1f8000); | ||
118 | c1 = tx4938_process_sdccr((u64 *) 0xff1f8008); | ||
119 | c2 = tx4938_process_sdccr((u64 *) 0xff1f8010); | ||
120 | c3 = tx4938_process_sdccr((u64 *) 0xff1f8018); | ||
121 | total = c0 + c1 + c2 + c3; | ||
122 | |||
123 | return (total); | ||
124 | } | ||
diff --git a/arch/mips/txx9/generic/setup.c b/arch/mips/txx9/generic/setup.c index 5afc5d5cab03..8c60c78b9a9e 100644 --- a/arch/mips/txx9/generic/setup.c +++ b/arch/mips/txx9/generic/setup.c | |||
@@ -19,7 +19,9 @@ | |||
19 | #include <linux/module.h> | 19 | #include <linux/module.h> |
20 | #include <linux/clk.h> | 20 | #include <linux/clk.h> |
21 | #include <linux/err.h> | 21 | #include <linux/err.h> |
22 | #include <linux/gpio.h> | ||
22 | #include <asm/bootinfo.h> | 23 | #include <asm/bootinfo.h> |
24 | #include <asm/time.h> | ||
23 | #include <asm/txx9/generic.h> | 25 | #include <asm/txx9/generic.h> |
24 | #ifdef CONFIG_CPU_TX49XX | 26 | #ifdef CONFIG_CPU_TX49XX |
25 | #include <asm/txx9/tx4938.h> | 27 | #include <asm/txx9/tx4938.h> |
@@ -30,6 +32,7 @@ struct resource txx9_ce_res[8]; | |||
30 | static char txx9_ce_res_name[8][4]; /* "CEn" */ | 32 | static char txx9_ce_res_name[8][4]; /* "CEn" */ |
31 | 33 | ||
32 | /* pcode, internal register */ | 34 | /* pcode, internal register */ |
35 | unsigned int txx9_pcode; | ||
33 | char txx9_pcode_str[8]; | 36 | char txx9_pcode_str[8]; |
34 | static struct resource txx9_reg_res = { | 37 | static struct resource txx9_reg_res = { |
35 | .name = txx9_pcode_str, | 38 | .name = txx9_pcode_str, |
@@ -59,15 +62,16 @@ unsigned int txx9_master_clock; | |||
59 | unsigned int txx9_cpu_clock; | 62 | unsigned int txx9_cpu_clock; |
60 | unsigned int txx9_gbus_clock; | 63 | unsigned int txx9_gbus_clock; |
61 | 64 | ||
65 | int txx9_ccfg_toeon __initdata = 1; | ||
62 | 66 | ||
63 | /* Minimum CLK support */ | 67 | /* Minimum CLK support */ |
64 | 68 | ||
65 | struct clk *clk_get(struct device *dev, const char *id) | 69 | struct clk *clk_get(struct device *dev, const char *id) |
66 | { | 70 | { |
67 | if (!strcmp(id, "spi-baseclk")) | 71 | if (!strcmp(id, "spi-baseclk")) |
68 | return (struct clk *)(txx9_gbus_clock / 2 / 4); | 72 | return (struct clk *)((unsigned long)txx9_gbus_clock / 2 / 4); |
69 | if (!strcmp(id, "imbus_clk")) | 73 | if (!strcmp(id, "imbus_clk")) |
70 | return (struct clk *)(txx9_gbus_clock / 2); | 74 | return (struct clk *)((unsigned long)txx9_gbus_clock / 2); |
71 | return ERR_PTR(-ENOENT); | 75 | return ERR_PTR(-ENOENT); |
72 | } | 76 | } |
73 | EXPORT_SYMBOL(clk_get); | 77 | EXPORT_SYMBOL(clk_get); |
@@ -94,6 +98,22 @@ void clk_put(struct clk *clk) | |||
94 | } | 98 | } |
95 | EXPORT_SYMBOL(clk_put); | 99 | EXPORT_SYMBOL(clk_put); |
96 | 100 | ||
101 | /* GPIO support */ | ||
102 | |||
103 | #ifdef CONFIG_GENERIC_GPIO | ||
104 | int gpio_to_irq(unsigned gpio) | ||
105 | { | ||
106 | return -EINVAL; | ||
107 | } | ||
108 | EXPORT_SYMBOL(gpio_to_irq); | ||
109 | |||
110 | int irq_to_gpio(unsigned irq) | ||
111 | { | ||
112 | return -EINVAL; | ||
113 | } | ||
114 | EXPORT_SYMBOL(irq_to_gpio); | ||
115 | #endif | ||
116 | |||
97 | extern struct txx9_board_vec jmr3927_vec; | 117 | extern struct txx9_board_vec jmr3927_vec; |
98 | extern struct txx9_board_vec rbtx4927_vec; | 118 | extern struct txx9_board_vec rbtx4927_vec; |
99 | extern struct txx9_board_vec rbtx4937_vec; | 119 | extern struct txx9_board_vec rbtx4937_vec; |
@@ -107,6 +127,12 @@ void __init prom_init_cmdline(void) | |||
107 | int argc = (int)fw_arg0; | 127 | int argc = (int)fw_arg0; |
108 | char **argv = (char **)fw_arg1; | 128 | char **argv = (char **)fw_arg1; |
109 | int i; /* Always ignore the "-c" at argv[0] */ | 129 | int i; /* Always ignore the "-c" at argv[0] */ |
130 | #ifdef CONFIG_64BIT | ||
131 | char *fixed_argv[32]; | ||
132 | for (i = 0; i < argc; i++) | ||
133 | fixed_argv[i] = (char *)(long)(*((__s32 *)argv + i)); | ||
134 | argv = fixed_argv; | ||
135 | #endif | ||
110 | 136 | ||
111 | /* ignore all built-in args if any f/w args given */ | 137 | /* ignore all built-in args if any f/w args given */ |
112 | if (argc > 1) | 138 | if (argc > 1) |
@@ -126,15 +152,19 @@ void __init prom_init(void) | |||
126 | #endif | 152 | #endif |
127 | #ifdef CONFIG_CPU_TX49XX | 153 | #ifdef CONFIG_CPU_TX49XX |
128 | switch (TX4938_REV_PCODE()) { | 154 | switch (TX4938_REV_PCODE()) { |
155 | #ifdef CONFIG_TOSHIBA_RBTX4927 | ||
129 | case 0x4927: | 156 | case 0x4927: |
130 | txx9_board_vec = &rbtx4927_vec; | 157 | txx9_board_vec = &rbtx4927_vec; |
131 | break; | 158 | break; |
132 | case 0x4937: | 159 | case 0x4937: |
133 | txx9_board_vec = &rbtx4937_vec; | 160 | txx9_board_vec = &rbtx4937_vec; |
134 | break; | 161 | break; |
162 | #endif | ||
163 | #ifdef CONFIG_TOSHIBA_RBTX4938 | ||
135 | case 0x4938: | 164 | case 0x4938: |
136 | txx9_board_vec = &rbtx4938_vec; | 165 | txx9_board_vec = &rbtx4938_vec; |
137 | break; | 166 | break; |
167 | #endif | ||
138 | } | 168 | } |
139 | #endif | 169 | #endif |
140 | 170 | ||
@@ -160,6 +190,10 @@ char * __init prom_getcmdline(void) | |||
160 | /* wrappers */ | 190 | /* wrappers */ |
161 | void __init plat_mem_setup(void) | 191 | void __init plat_mem_setup(void) |
162 | { | 192 | { |
193 | ioport_resource.start = 0; | ||
194 | ioport_resource.end = ~0UL; /* no limit */ | ||
195 | iomem_resource.start = 0; | ||
196 | iomem_resource.end = ~0UL; /* no limit */ | ||
163 | txx9_board_vec->mem_setup(); | 197 | txx9_board_vec->mem_setup(); |
164 | } | 198 | } |
165 | 199 | ||
diff --git a/arch/mips/txx9/generic/setup_tx4927.c b/arch/mips/txx9/generic/setup_tx4927.c new file mode 100644 index 000000000000..89d6e28add93 --- /dev/null +++ b/arch/mips/txx9/generic/setup_tx4927.c | |||
@@ -0,0 +1,194 @@ | |||
1 | /* | ||
2 | * TX4927 setup routines | ||
3 | * Based on linux/arch/mips/txx9/rbtx4938/setup.c, | ||
4 | * and RBTX49xx patch from CELF patch archive. | ||
5 | * | ||
6 | * 2003-2005 (c) MontaVista Software, Inc. | ||
7 | * (C) Copyright TOSHIBA CORPORATION 2000-2001, 2004-2007 | ||
8 | * | ||
9 | * This file is subject to the terms and conditions of the GNU General Public | ||
10 | * License. See the file "COPYING" in the main directory of this archive | ||
11 | * for more details. | ||
12 | */ | ||
13 | #include <linux/init.h> | ||
14 | #include <linux/ioport.h> | ||
15 | #include <linux/delay.h> | ||
16 | #include <linux/serial_core.h> | ||
17 | #include <linux/param.h> | ||
18 | #include <asm/txx9irq.h> | ||
19 | #include <asm/txx9tmr.h> | ||
20 | #include <asm/txx9pio.h> | ||
21 | #include <asm/txx9/generic.h> | ||
22 | #include <asm/txx9/tx4927.h> | ||
23 | |||
24 | void __init tx4927_wdr_init(void) | ||
25 | { | ||
26 | /* clear WatchDogReset (W1C) */ | ||
27 | tx4927_ccfg_set(TX4927_CCFG_WDRST); | ||
28 | /* do reset on watchdog */ | ||
29 | tx4927_ccfg_set(TX4927_CCFG_WR); | ||
30 | } | ||
31 | |||
32 | static struct resource tx4927_sdram_resource[4]; | ||
33 | |||
34 | void __init tx4927_setup(void) | ||
35 | { | ||
36 | int i; | ||
37 | __u32 divmode; | ||
38 | int cpuclk = 0; | ||
39 | u64 ccfg; | ||
40 | |||
41 | txx9_reg_res_init(TX4927_REV_PCODE(), TX4927_REG_BASE, | ||
42 | TX4927_REG_SIZE); | ||
43 | |||
44 | /* SDRAMC,EBUSC are configured by PROM */ | ||
45 | for (i = 0; i < 8; i++) { | ||
46 | if (!(TX4927_EBUSC_CR(i) & 0x8)) | ||
47 | continue; /* disabled */ | ||
48 | txx9_ce_res[i].start = (unsigned long)TX4927_EBUSC_BA(i); | ||
49 | txx9_ce_res[i].end = | ||
50 | txx9_ce_res[i].start + TX4927_EBUSC_SIZE(i) - 1; | ||
51 | request_resource(&iomem_resource, &txx9_ce_res[i]); | ||
52 | } | ||
53 | |||
54 | /* clocks */ | ||
55 | ccfg = ____raw_readq(&tx4927_ccfgptr->ccfg); | ||
56 | if (txx9_master_clock) { | ||
57 | /* calculate gbus_clock and cpu_clock from master_clock */ | ||
58 | divmode = (__u32)ccfg & TX4927_CCFG_DIVMODE_MASK; | ||
59 | switch (divmode) { | ||
60 | case TX4927_CCFG_DIVMODE_8: | ||
61 | case TX4927_CCFG_DIVMODE_10: | ||
62 | case TX4927_CCFG_DIVMODE_12: | ||
63 | case TX4927_CCFG_DIVMODE_16: | ||
64 | txx9_gbus_clock = txx9_master_clock * 4; break; | ||
65 | default: | ||
66 | txx9_gbus_clock = txx9_master_clock; | ||
67 | } | ||
68 | switch (divmode) { | ||
69 | case TX4927_CCFG_DIVMODE_2: | ||
70 | case TX4927_CCFG_DIVMODE_8: | ||
71 | cpuclk = txx9_gbus_clock * 2; break; | ||
72 | case TX4927_CCFG_DIVMODE_2_5: | ||
73 | case TX4927_CCFG_DIVMODE_10: | ||
74 | cpuclk = txx9_gbus_clock * 5 / 2; break; | ||
75 | case TX4927_CCFG_DIVMODE_3: | ||
76 | case TX4927_CCFG_DIVMODE_12: | ||
77 | cpuclk = txx9_gbus_clock * 3; break; | ||
78 | case TX4927_CCFG_DIVMODE_4: | ||
79 | case TX4927_CCFG_DIVMODE_16: | ||
80 | cpuclk = txx9_gbus_clock * 4; break; | ||
81 | } | ||
82 | txx9_cpu_clock = cpuclk; | ||
83 | } else { | ||
84 | if (txx9_cpu_clock == 0) | ||
85 | txx9_cpu_clock = 200000000; /* 200MHz */ | ||
86 | /* calculate gbus_clock and master_clock from cpu_clock */ | ||
87 | cpuclk = txx9_cpu_clock; | ||
88 | divmode = (__u32)ccfg & TX4927_CCFG_DIVMODE_MASK; | ||
89 | switch (divmode) { | ||
90 | case TX4927_CCFG_DIVMODE_2: | ||
91 | case TX4927_CCFG_DIVMODE_8: | ||
92 | txx9_gbus_clock = cpuclk / 2; break; | ||
93 | case TX4927_CCFG_DIVMODE_2_5: | ||
94 | case TX4927_CCFG_DIVMODE_10: | ||
95 | txx9_gbus_clock = cpuclk * 2 / 5; break; | ||
96 | case TX4927_CCFG_DIVMODE_3: | ||
97 | case TX4927_CCFG_DIVMODE_12: | ||
98 | txx9_gbus_clock = cpuclk / 3; break; | ||
99 | case TX4927_CCFG_DIVMODE_4: | ||
100 | case TX4927_CCFG_DIVMODE_16: | ||
101 | txx9_gbus_clock = cpuclk / 4; break; | ||
102 | } | ||
103 | switch (divmode) { | ||
104 | case TX4927_CCFG_DIVMODE_8: | ||
105 | case TX4927_CCFG_DIVMODE_10: | ||
106 | case TX4927_CCFG_DIVMODE_12: | ||
107 | case TX4927_CCFG_DIVMODE_16: | ||
108 | txx9_master_clock = txx9_gbus_clock / 4; break; | ||
109 | default: | ||
110 | txx9_master_clock = txx9_gbus_clock; | ||
111 | } | ||
112 | } | ||
113 | /* change default value to udelay/mdelay take reasonable time */ | ||
114 | loops_per_jiffy = txx9_cpu_clock / HZ / 2; | ||
115 | |||
116 | /* CCFG */ | ||
117 | tx4927_wdr_init(); | ||
118 | /* clear BusErrorOnWrite flag (W1C) */ | ||
119 | tx4927_ccfg_set(TX4927_CCFG_BEOW); | ||
120 | /* enable Timeout BusError */ | ||
121 | if (txx9_ccfg_toeon) | ||
122 | tx4927_ccfg_set(TX4927_CCFG_TOE); | ||
123 | |||
124 | /* DMA selection */ | ||
125 | txx9_clear64(&tx4927_ccfgptr->pcfg, TX4927_PCFG_DMASEL_ALL); | ||
126 | |||
127 | /* Use external clock for external arbiter */ | ||
128 | if (!(____raw_readq(&tx4927_ccfgptr->ccfg) & TX4927_CCFG_PCIARB)) | ||
129 | txx9_clear64(&tx4927_ccfgptr->pcfg, TX4927_PCFG_PCICLKEN_ALL); | ||
130 | |||
131 | printk(KERN_INFO "%s -- %dMHz(M%dMHz) CRIR:%08x CCFG:%llx PCFG:%llx\n", | ||
132 | txx9_pcode_str, | ||
133 | (cpuclk + 500000) / 1000000, | ||
134 | (txx9_master_clock + 500000) / 1000000, | ||
135 | (__u32)____raw_readq(&tx4927_ccfgptr->crir), | ||
136 | (unsigned long long)____raw_readq(&tx4927_ccfgptr->ccfg), | ||
137 | (unsigned long long)____raw_readq(&tx4927_ccfgptr->pcfg)); | ||
138 | |||
139 | printk(KERN_INFO "%s SDRAMC --", txx9_pcode_str); | ||
140 | for (i = 0; i < 4; i++) { | ||
141 | __u64 cr = TX4927_SDRAMC_CR(i); | ||
142 | unsigned long base, size; | ||
143 | if (!((__u32)cr & 0x00000400)) | ||
144 | continue; /* disabled */ | ||
145 | base = (unsigned long)(cr >> 49) << 21; | ||
146 | size = (((unsigned long)(cr >> 33) & 0x7fff) + 1) << 21; | ||
147 | printk(" CR%d:%016llx", i, (unsigned long long)cr); | ||
148 | tx4927_sdram_resource[i].name = "SDRAM"; | ||
149 | tx4927_sdram_resource[i].start = base; | ||
150 | tx4927_sdram_resource[i].end = base + size - 1; | ||
151 | tx4927_sdram_resource[i].flags = IORESOURCE_MEM; | ||
152 | request_resource(&iomem_resource, &tx4927_sdram_resource[i]); | ||
153 | } | ||
154 | printk(" TR:%09llx\n", | ||
155 | (unsigned long long)____raw_readq(&tx4927_sdramcptr->tr)); | ||
156 | |||
157 | /* TMR */ | ||
158 | /* disable all timers */ | ||
159 | for (i = 0; i < TX4927_NR_TMR; i++) | ||
160 | txx9_tmr_init(TX4927_TMR_REG(i) & 0xfffffffffULL); | ||
161 | |||
162 | /* PIO */ | ||
163 | txx9_gpio_init(TX4927_PIO_REG & 0xfffffffffULL, 0, TX4927_NUM_PIO); | ||
164 | __raw_writel(0, &tx4927_pioptr->maskcpu); | ||
165 | __raw_writel(0, &tx4927_pioptr->maskext); | ||
166 | } | ||
167 | |||
168 | void __init tx4927_time_init(unsigned int tmrnr) | ||
169 | { | ||
170 | if (____raw_readq(&tx4927_ccfgptr->ccfg) & TX4927_CCFG_TINTDIS) | ||
171 | txx9_clockevent_init(TX4927_TMR_REG(tmrnr) & 0xfffffffffULL, | ||
172 | TXX9_IRQ_BASE + TX4927_IR_TMR(tmrnr), | ||
173 | TXX9_IMCLK); | ||
174 | } | ||
175 | |||
176 | void __init tx4927_setup_serial(void) | ||
177 | { | ||
178 | #ifdef CONFIG_SERIAL_TXX9 | ||
179 | int i; | ||
180 | struct uart_port req; | ||
181 | |||
182 | for (i = 0; i < 2; i++) { | ||
183 | memset(&req, 0, sizeof(req)); | ||
184 | req.line = i; | ||
185 | req.iotype = UPIO_MEM; | ||
186 | req.membase = (unsigned char __iomem *)TX4927_SIO_REG(i); | ||
187 | req.mapbase = TX4927_SIO_REG(i) & 0xfffffffffULL; | ||
188 | req.irq = TXX9_IRQ_BASE + TX4927_IR_SIO(i); | ||
189 | req.flags |= UPF_BUGGY_UART /*HAVE_CTS_LINE*/; | ||
190 | req.uartclk = TXX9_IMCLK; | ||
191 | early_serial_txx9_setup(&req); | ||
192 | } | ||
193 | #endif /* CONFIG_SERIAL_TXX9 */ | ||
194 | } | ||
diff --git a/arch/mips/txx9/generic/setup_tx4938.c b/arch/mips/txx9/generic/setup_tx4938.c new file mode 100644 index 000000000000..317378d8579d --- /dev/null +++ b/arch/mips/txx9/generic/setup_tx4938.c | |||
@@ -0,0 +1,259 @@ | |||
1 | /* | ||
2 | * TX4938/4937 setup routines | ||
3 | * Based on linux/arch/mips/txx9/rbtx4938/setup.c, | ||
4 | * and RBTX49xx patch from CELF patch archive. | ||
5 | * | ||
6 | * 2003-2005 (c) MontaVista Software, Inc. | ||
7 | * (C) Copyright TOSHIBA CORPORATION 2000-2001, 2004-2007 | ||
8 | * | ||
9 | * This file is subject to the terms and conditions of the GNU General Public | ||
10 | * License. See the file "COPYING" in the main directory of this archive | ||
11 | * for more details. | ||
12 | */ | ||
13 | #include <linux/init.h> | ||
14 | #include <linux/ioport.h> | ||
15 | #include <linux/delay.h> | ||
16 | #include <linux/serial_core.h> | ||
17 | #include <linux/param.h> | ||
18 | #include <asm/txx9irq.h> | ||
19 | #include <asm/txx9tmr.h> | ||
20 | #include <asm/txx9pio.h> | ||
21 | #include <asm/txx9/generic.h> | ||
22 | #include <asm/txx9/tx4938.h> | ||
23 | |||
24 | void __init tx4938_wdr_init(void) | ||
25 | { | ||
26 | /* clear WatchDogReset (W1C) */ | ||
27 | tx4938_ccfg_set(TX4938_CCFG_WDRST); | ||
28 | /* do reset on watchdog */ | ||
29 | tx4938_ccfg_set(TX4938_CCFG_WR); | ||
30 | } | ||
31 | |||
32 | static struct resource tx4938_sdram_resource[4]; | ||
33 | static struct resource tx4938_sram_resource; | ||
34 | |||
35 | #define TX4938_SRAM_SIZE 0x800 | ||
36 | |||
37 | void __init tx4938_setup(void) | ||
38 | { | ||
39 | int i; | ||
40 | __u32 divmode; | ||
41 | int cpuclk = 0; | ||
42 | u64 ccfg; | ||
43 | |||
44 | txx9_reg_res_init(TX4938_REV_PCODE(), TX4938_REG_BASE, | ||
45 | TX4938_REG_SIZE); | ||
46 | |||
47 | /* SDRAMC,EBUSC are configured by PROM */ | ||
48 | for (i = 0; i < 8; i++) { | ||
49 | if (!(TX4938_EBUSC_CR(i) & 0x8)) | ||
50 | continue; /* disabled */ | ||
51 | txx9_ce_res[i].start = (unsigned long)TX4938_EBUSC_BA(i); | ||
52 | txx9_ce_res[i].end = | ||
53 | txx9_ce_res[i].start + TX4938_EBUSC_SIZE(i) - 1; | ||
54 | request_resource(&iomem_resource, &txx9_ce_res[i]); | ||
55 | } | ||
56 | |||
57 | /* clocks */ | ||
58 | ccfg = ____raw_readq(&tx4938_ccfgptr->ccfg); | ||
59 | if (txx9_master_clock) { | ||
60 | /* calculate gbus_clock and cpu_clock from master_clock */ | ||
61 | divmode = (__u32)ccfg & TX4938_CCFG_DIVMODE_MASK; | ||
62 | switch (divmode) { | ||
63 | case TX4938_CCFG_DIVMODE_8: | ||
64 | case TX4938_CCFG_DIVMODE_10: | ||
65 | case TX4938_CCFG_DIVMODE_12: | ||
66 | case TX4938_CCFG_DIVMODE_16: | ||
67 | case TX4938_CCFG_DIVMODE_18: | ||
68 | txx9_gbus_clock = txx9_master_clock * 4; break; | ||
69 | default: | ||
70 | txx9_gbus_clock = txx9_master_clock; | ||
71 | } | ||
72 | switch (divmode) { | ||
73 | case TX4938_CCFG_DIVMODE_2: | ||
74 | case TX4938_CCFG_DIVMODE_8: | ||
75 | cpuclk = txx9_gbus_clock * 2; break; | ||
76 | case TX4938_CCFG_DIVMODE_2_5: | ||
77 | case TX4938_CCFG_DIVMODE_10: | ||
78 | cpuclk = txx9_gbus_clock * 5 / 2; break; | ||
79 | case TX4938_CCFG_DIVMODE_3: | ||
80 | case TX4938_CCFG_DIVMODE_12: | ||
81 | cpuclk = txx9_gbus_clock * 3; break; | ||
82 | case TX4938_CCFG_DIVMODE_4: | ||
83 | case TX4938_CCFG_DIVMODE_16: | ||
84 | cpuclk = txx9_gbus_clock * 4; break; | ||
85 | case TX4938_CCFG_DIVMODE_4_5: | ||
86 | case TX4938_CCFG_DIVMODE_18: | ||
87 | cpuclk = txx9_gbus_clock * 9 / 2; break; | ||
88 | } | ||
89 | txx9_cpu_clock = cpuclk; | ||
90 | } else { | ||
91 | if (txx9_cpu_clock == 0) | ||
92 | txx9_cpu_clock = 300000000; /* 300MHz */ | ||
93 | /* calculate gbus_clock and master_clock from cpu_clock */ | ||
94 | cpuclk = txx9_cpu_clock; | ||
95 | divmode = (__u32)ccfg & TX4938_CCFG_DIVMODE_MASK; | ||
96 | switch (divmode) { | ||
97 | case TX4938_CCFG_DIVMODE_2: | ||
98 | case TX4938_CCFG_DIVMODE_8: | ||
99 | txx9_gbus_clock = cpuclk / 2; break; | ||
100 | case TX4938_CCFG_DIVMODE_2_5: | ||
101 | case TX4938_CCFG_DIVMODE_10: | ||
102 | txx9_gbus_clock = cpuclk * 2 / 5; break; | ||
103 | case TX4938_CCFG_DIVMODE_3: | ||
104 | case TX4938_CCFG_DIVMODE_12: | ||
105 | txx9_gbus_clock = cpuclk / 3; break; | ||
106 | case TX4938_CCFG_DIVMODE_4: | ||
107 | case TX4938_CCFG_DIVMODE_16: | ||
108 | txx9_gbus_clock = cpuclk / 4; break; | ||
109 | case TX4938_CCFG_DIVMODE_4_5: | ||
110 | case TX4938_CCFG_DIVMODE_18: | ||
111 | txx9_gbus_clock = cpuclk * 2 / 9; break; | ||
112 | } | ||
113 | switch (divmode) { | ||
114 | case TX4938_CCFG_DIVMODE_8: | ||
115 | case TX4938_CCFG_DIVMODE_10: | ||
116 | case TX4938_CCFG_DIVMODE_12: | ||
117 | case TX4938_CCFG_DIVMODE_16: | ||
118 | case TX4938_CCFG_DIVMODE_18: | ||
119 | txx9_master_clock = txx9_gbus_clock / 4; break; | ||
120 | default: | ||
121 | txx9_master_clock = txx9_gbus_clock; | ||
122 | } | ||
123 | } | ||
124 | /* change default value to udelay/mdelay take reasonable time */ | ||
125 | loops_per_jiffy = txx9_cpu_clock / HZ / 2; | ||
126 | |||
127 | /* CCFG */ | ||
128 | tx4938_wdr_init(); | ||
129 | /* clear BusErrorOnWrite flag (W1C) */ | ||
130 | tx4938_ccfg_set(TX4938_CCFG_BEOW); | ||
131 | /* enable Timeout BusError */ | ||
132 | if (txx9_ccfg_toeon) | ||
133 | tx4938_ccfg_set(TX4938_CCFG_TOE); | ||
134 | |||
135 | /* DMA selection */ | ||
136 | txx9_clear64(&tx4938_ccfgptr->pcfg, TX4938_PCFG_DMASEL_ALL); | ||
137 | |||
138 | /* Use external clock for external arbiter */ | ||
139 | if (!(____raw_readq(&tx4938_ccfgptr->ccfg) & TX4938_CCFG_PCIARB)) | ||
140 | txx9_clear64(&tx4938_ccfgptr->pcfg, TX4938_PCFG_PCICLKEN_ALL); | ||
141 | |||
142 | printk(KERN_INFO "%s -- %dMHz(M%dMHz) CRIR:%08x CCFG:%llx PCFG:%llx\n", | ||
143 | txx9_pcode_str, | ||
144 | (cpuclk + 500000) / 1000000, | ||
145 | (txx9_master_clock + 500000) / 1000000, | ||
146 | (__u32)____raw_readq(&tx4938_ccfgptr->crir), | ||
147 | (unsigned long long)____raw_readq(&tx4938_ccfgptr->ccfg), | ||
148 | (unsigned long long)____raw_readq(&tx4938_ccfgptr->pcfg)); | ||
149 | |||
150 | printk(KERN_INFO "%s SDRAMC --", txx9_pcode_str); | ||
151 | for (i = 0; i < 4; i++) { | ||
152 | __u64 cr = TX4938_SDRAMC_CR(i); | ||
153 | unsigned long base, size; | ||
154 | if (!((__u32)cr & 0x00000400)) | ||
155 | continue; /* disabled */ | ||
156 | base = (unsigned long)(cr >> 49) << 21; | ||
157 | size = (((unsigned long)(cr >> 33) & 0x7fff) + 1) << 21; | ||
158 | printk(" CR%d:%016llx", i, (unsigned long long)cr); | ||
159 | tx4938_sdram_resource[i].name = "SDRAM"; | ||
160 | tx4938_sdram_resource[i].start = base; | ||
161 | tx4938_sdram_resource[i].end = base + size - 1; | ||
162 | tx4938_sdram_resource[i].flags = IORESOURCE_MEM; | ||
163 | request_resource(&iomem_resource, &tx4938_sdram_resource[i]); | ||
164 | } | ||
165 | printk(" TR:%09llx\n", | ||
166 | (unsigned long long)____raw_readq(&tx4938_sdramcptr->tr)); | ||
167 | |||
168 | /* SRAM */ | ||
169 | if (txx9_pcode == 0x4938 && ____raw_readq(&tx4938_sramcptr->cr) & 1) { | ||
170 | unsigned int size = TX4938_SRAM_SIZE; | ||
171 | tx4938_sram_resource.name = "SRAM"; | ||
172 | tx4938_sram_resource.start = | ||
173 | (____raw_readq(&tx4938_sramcptr->cr) >> (39-11)) | ||
174 | & ~(size - 1); | ||
175 | tx4938_sram_resource.end = | ||
176 | tx4938_sram_resource.start + TX4938_SRAM_SIZE - 1; | ||
177 | tx4938_sram_resource.flags = IORESOURCE_MEM; | ||
178 | request_resource(&iomem_resource, &tx4938_sram_resource); | ||
179 | } | ||
180 | |||
181 | /* TMR */ | ||
182 | /* disable all timers */ | ||
183 | for (i = 0; i < TX4938_NR_TMR; i++) | ||
184 | txx9_tmr_init(TX4938_TMR_REG(i) & 0xfffffffffULL); | ||
185 | |||
186 | /* DMA */ | ||
187 | for (i = 0; i < 2; i++) | ||
188 | ____raw_writeq(TX4938_DMA_MCR_MSTEN, | ||
189 | (void __iomem *)(TX4938_DMA_REG(i) + 0x50)); | ||
190 | |||
191 | /* PIO */ | ||
192 | txx9_gpio_init(TX4938_PIO_REG & 0xfffffffffULL, 0, TX4938_NUM_PIO); | ||
193 | __raw_writel(0, &tx4938_pioptr->maskcpu); | ||
194 | __raw_writel(0, &tx4938_pioptr->maskext); | ||
195 | |||
196 | if (txx9_pcode == 0x4938) { | ||
197 | __u64 pcfg = ____raw_readq(&tx4938_ccfgptr->pcfg); | ||
198 | /* set PCIC1 reset */ | ||
199 | txx9_set64(&tx4938_ccfgptr->clkctr, TX4938_CLKCTR_PCIC1RST); | ||
200 | if (pcfg & (TX4938_PCFG_ETH0_SEL | TX4938_PCFG_ETH1_SEL)) { | ||
201 | mdelay(1); /* at least 128 cpu clock */ | ||
202 | /* clear PCIC1 reset */ | ||
203 | txx9_clear64(&tx4938_ccfgptr->clkctr, | ||
204 | TX4938_CLKCTR_PCIC1RST); | ||
205 | } else { | ||
206 | printk(KERN_INFO "%s: stop PCIC1\n", txx9_pcode_str); | ||
207 | /* stop PCIC1 */ | ||
208 | txx9_set64(&tx4938_ccfgptr->clkctr, | ||
209 | TX4938_CLKCTR_PCIC1CKD); | ||
210 | } | ||
211 | if (!(pcfg & TX4938_PCFG_ETH0_SEL)) { | ||
212 | printk(KERN_INFO "%s: stop ETH0\n", txx9_pcode_str); | ||
213 | txx9_set64(&tx4938_ccfgptr->clkctr, | ||
214 | TX4938_CLKCTR_ETH0RST); | ||
215 | txx9_set64(&tx4938_ccfgptr->clkctr, | ||
216 | TX4938_CLKCTR_ETH0CKD); | ||
217 | } | ||
218 | if (!(pcfg & TX4938_PCFG_ETH1_SEL)) { | ||
219 | printk(KERN_INFO "%s: stop ETH1\n", txx9_pcode_str); | ||
220 | txx9_set64(&tx4938_ccfgptr->clkctr, | ||
221 | TX4938_CLKCTR_ETH1RST); | ||
222 | txx9_set64(&tx4938_ccfgptr->clkctr, | ||
223 | TX4938_CLKCTR_ETH1CKD); | ||
224 | } | ||
225 | } | ||
226 | } | ||
227 | |||
228 | void __init tx4938_time_init(unsigned int tmrnr) | ||
229 | { | ||
230 | if (____raw_readq(&tx4938_ccfgptr->ccfg) & TX4938_CCFG_TINTDIS) | ||
231 | txx9_clockevent_init(TX4938_TMR_REG(tmrnr) & 0xfffffffffULL, | ||
232 | TXX9_IRQ_BASE + TX4938_IR_TMR(tmrnr), | ||
233 | TXX9_IMCLK); | ||
234 | } | ||
235 | |||
236 | void __init tx4938_setup_serial(void) | ||
237 | { | ||
238 | #ifdef CONFIG_SERIAL_TXX9 | ||
239 | int i; | ||
240 | struct uart_port req; | ||
241 | unsigned int ch_mask = 0; | ||
242 | |||
243 | if (__raw_readq(&tx4938_ccfgptr->pcfg) & TX4938_PCFG_ETH0_SEL) | ||
244 | ch_mask |= 1 << 1; /* disable SIO1 by PCFG setting */ | ||
245 | for (i = 0; i < 2; i++) { | ||
246 | if ((1 << i) & ch_mask) | ||
247 | continue; | ||
248 | memset(&req, 0, sizeof(req)); | ||
249 | req.line = i; | ||
250 | req.iotype = UPIO_MEM; | ||
251 | req.membase = (unsigned char __iomem *)TX4938_SIO_REG(i); | ||
252 | req.mapbase = TX4938_SIO_REG(i) & 0xfffffffffULL; | ||
253 | req.irq = TXX9_IRQ_BASE + TX4938_IR_SIO(i); | ||
254 | req.flags |= UPF_BUGGY_UART /*HAVE_CTS_LINE*/; | ||
255 | req.uartclk = TXX9_IMCLK; | ||
256 | early_serial_txx9_setup(&req); | ||
257 | } | ||
258 | #endif /* CONFIG_SERIAL_TXX9 */ | ||
259 | } | ||
diff --git a/arch/mips/txx9/jmr3927/setup.c b/arch/mips/txx9/jmr3927/setup.c index 5e35ef73c5a5..03647ebe4130 100644 --- a/arch/mips/txx9/jmr3927/setup.c +++ b/arch/mips/txx9/jmr3927/setup.c | |||
@@ -105,14 +105,6 @@ static void __init jmr3927_mem_setup(void) | |||
105 | _machine_halt = jmr3927_machine_halt; | 105 | _machine_halt = jmr3927_machine_halt; |
106 | pm_power_off = jmr3927_machine_power_off; | 106 | pm_power_off = jmr3927_machine_power_off; |
107 | 107 | ||
108 | /* | ||
109 | * IO/MEM resources. | ||
110 | */ | ||
111 | ioport_resource.start = 0; | ||
112 | ioport_resource.end = 0xffffffff; | ||
113 | iomem_resource.start = 0; | ||
114 | iomem_resource.end = 0xffffffff; | ||
115 | |||
116 | /* Reboot on panic */ | 108 | /* Reboot on panic */ |
117 | panic_timeout = 180; | 109 | panic_timeout = 180; |
118 | 110 | ||
diff --git a/arch/mips/txx9/rbtx4927/irq.c b/arch/mips/txx9/rbtx4927/irq.c index 70f13211bc2a..cd748a930328 100644 --- a/arch/mips/txx9/rbtx4927/irq.c +++ b/arch/mips/txx9/rbtx4927/irq.c | |||
@@ -126,14 +126,12 @@ static struct irq_chip toshiba_rbtx4927_irq_ioc_type = { | |||
126 | .mask_ack = toshiba_rbtx4927_irq_ioc_disable, | 126 | .mask_ack = toshiba_rbtx4927_irq_ioc_disable, |
127 | .unmask = toshiba_rbtx4927_irq_ioc_enable, | 127 | .unmask = toshiba_rbtx4927_irq_ioc_enable, |
128 | }; | 128 | }; |
129 | #define TOSHIBA_RBTX4927_IOC_INTR_ENAB (void __iomem *)0xbc002000UL | ||
130 | #define TOSHIBA_RBTX4927_IOC_INTR_STAT (void __iomem *)0xbc002006UL | ||
131 | 129 | ||
132 | static int toshiba_rbtx4927_irq_nested(int sw_irq) | 130 | static int toshiba_rbtx4927_irq_nested(int sw_irq) |
133 | { | 131 | { |
134 | u8 level3; | 132 | u8 level3; |
135 | 133 | ||
136 | level3 = readb(TOSHIBA_RBTX4927_IOC_INTR_STAT) & 0x1f; | 134 | level3 = readb(rbtx4927_imstat_addr) & 0x1f; |
137 | if (level3) | 135 | if (level3) |
138 | sw_irq = RBTX4927_IRQ_IOC + fls(level3) - 1; | 136 | sw_irq = RBTX4927_IRQ_IOC + fls(level3) - 1; |
139 | return (sw_irq); | 137 | return (sw_irq); |
@@ -154,18 +152,18 @@ static void toshiba_rbtx4927_irq_ioc_enable(unsigned int irq) | |||
154 | { | 152 | { |
155 | unsigned char v; | 153 | unsigned char v; |
156 | 154 | ||
157 | v = readb(TOSHIBA_RBTX4927_IOC_INTR_ENAB); | 155 | v = readb(rbtx4927_imask_addr); |
158 | v |= (1 << (irq - RBTX4927_IRQ_IOC)); | 156 | v |= (1 << (irq - RBTX4927_IRQ_IOC)); |
159 | writeb(v, TOSHIBA_RBTX4927_IOC_INTR_ENAB); | 157 | writeb(v, rbtx4927_imask_addr); |
160 | } | 158 | } |
161 | 159 | ||
162 | static void toshiba_rbtx4927_irq_ioc_disable(unsigned int irq) | 160 | static void toshiba_rbtx4927_irq_ioc_disable(unsigned int irq) |
163 | { | 161 | { |
164 | unsigned char v; | 162 | unsigned char v; |
165 | 163 | ||
166 | v = readb(TOSHIBA_RBTX4927_IOC_INTR_ENAB); | 164 | v = readb(rbtx4927_imask_addr); |
167 | v &= ~(1 << (irq - RBTX4927_IRQ_IOC)); | 165 | v &= ~(1 << (irq - RBTX4927_IRQ_IOC)); |
168 | writeb(v, TOSHIBA_RBTX4927_IOC_INTR_ENAB); | 166 | writeb(v, rbtx4927_imask_addr); |
169 | mmiowb(); | 167 | mmiowb(); |
170 | } | 168 | } |
171 | 169 | ||
diff --git a/arch/mips/txx9/rbtx4927/prom.c b/arch/mips/txx9/rbtx4927/prom.c index 942e627d2dc1..5c0de54ebdd2 100644 --- a/arch/mips/txx9/rbtx4927/prom.c +++ b/arch/mips/txx9/rbtx4927/prom.c | |||
@@ -36,10 +36,6 @@ | |||
36 | 36 | ||
37 | void __init rbtx4927_prom_init(void) | 37 | void __init rbtx4927_prom_init(void) |
38 | { | 38 | { |
39 | extern int tx4927_get_mem_size(void); | ||
40 | int msize; | ||
41 | |||
42 | prom_init_cmdline(); | 39 | prom_init_cmdline(); |
43 | msize = tx4927_get_mem_size(); | 40 | add_memory_region(0, tx4927_get_mem_size(), BOOT_MEM_RAM); |
44 | add_memory_region(0, msize << 20, BOOT_MEM_RAM); | ||
45 | } | 41 | } |
diff --git a/arch/mips/txx9/rbtx4927/setup.c b/arch/mips/txx9/rbtx4927/setup.c index 1657fd935da8..3da20ea3e55c 100644 --- a/arch/mips/txx9/rbtx4927/setup.c +++ b/arch/mips/txx9/rbtx4927/setup.c | |||
@@ -53,17 +53,10 @@ | |||
53 | #include <asm/io.h> | 53 | #include <asm/io.h> |
54 | #include <asm/processor.h> | 54 | #include <asm/processor.h> |
55 | #include <asm/reboot.h> | 55 | #include <asm/reboot.h> |
56 | #include <asm/time.h> | ||
57 | #include <asm/txx9tmr.h> | ||
58 | #include <asm/txx9/generic.h> | 56 | #include <asm/txx9/generic.h> |
59 | #include <asm/txx9/pci.h> | 57 | #include <asm/txx9/pci.h> |
60 | #include <asm/txx9/rbtx4927.h> | 58 | #include <asm/txx9/rbtx4927.h> |
61 | #include <asm/txx9/tx4938.h> /* for TX4937 */ | 59 | #include <asm/txx9/tx4938.h> /* for TX4937 */ |
62 | #ifdef CONFIG_SERIAL_TXX9 | ||
63 | #include <linux/serial_core.h> | ||
64 | #endif | ||
65 | |||
66 | static int tx4927_ccfg_toeon = 1; | ||
67 | 60 | ||
68 | #ifdef CONFIG_PCI | 61 | #ifdef CONFIG_PCI |
69 | static void __init tx4927_pci_setup(void) | 62 | static void __init tx4927_pci_setup(void) |
@@ -184,14 +177,14 @@ static void toshiba_rbtx4927_restart(char *command) | |||
184 | printk(KERN_NOTICE "System Rebooting...\n"); | 177 | printk(KERN_NOTICE "System Rebooting...\n"); |
185 | 178 | ||
186 | /* enable the s/w reset register */ | 179 | /* enable the s/w reset register */ |
187 | writeb(RBTX4927_SW_RESET_ENABLE_SET, RBTX4927_SW_RESET_ENABLE); | 180 | writeb(1, rbtx4927_softresetlock_addr); |
188 | 181 | ||
189 | /* wait for enable to be seen */ | 182 | /* wait for enable to be seen */ |
190 | while ((readb(RBTX4927_SW_RESET_ENABLE) & | 183 | while (!(readb(rbtx4927_softresetlock_addr) & 1)) |
191 | RBTX4927_SW_RESET_ENABLE_SET) == 0x00); | 184 | ; |
192 | 185 | ||
193 | /* do a s/w reset */ | 186 | /* do a s/w reset */ |
194 | writeb(RBTX4927_SW_RESET_DO_SET, RBTX4927_SW_RESET_DO); | 187 | writeb(1, rbtx4927_softreset_addr); |
195 | 188 | ||
196 | /* do something passive while waiting for reset */ | 189 | /* do something passive while waiting for reset */ |
197 | local_irq_disable(); | 190 | local_irq_disable(); |
@@ -213,9 +206,11 @@ static void toshiba_rbtx4927_power_off(void) | |||
213 | /* no return */ | 206 | /* no return */ |
214 | } | 207 | } |
215 | 208 | ||
209 | static void __init rbtx4927_clock_init(void); | ||
210 | static void __init rbtx4937_clock_init(void); | ||
211 | |||
216 | static void __init rbtx4927_mem_setup(void) | 212 | static void __init rbtx4927_mem_setup(void) |
217 | { | 213 | { |
218 | int i; | ||
219 | u32 cp0_config; | 214 | u32 cp0_config; |
220 | char *argptr; | 215 | char *argptr; |
221 | 216 | ||
@@ -227,16 +222,18 @@ static void __init rbtx4927_mem_setup(void) | |||
227 | cp0_config = cp0_config & ~(TX49_CONF_IC | TX49_CONF_DC); | 222 | cp0_config = cp0_config & ~(TX49_CONF_IC | TX49_CONF_DC); |
228 | write_c0_config(cp0_config); | 223 | write_c0_config(cp0_config); |
229 | 224 | ||
230 | ioport_resource.end = 0xffffffff; | 225 | if (TX4927_REV_PCODE() == 0x4927) { |
231 | iomem_resource.end = 0xffffffff; | 226 | rbtx4927_clock_init(); |
227 | tx4927_setup(); | ||
228 | } else { | ||
229 | rbtx4937_clock_init(); | ||
230 | tx4938_setup(); | ||
231 | } | ||
232 | 232 | ||
233 | _machine_restart = toshiba_rbtx4927_restart; | 233 | _machine_restart = toshiba_rbtx4927_restart; |
234 | _machine_halt = toshiba_rbtx4927_halt; | 234 | _machine_halt = toshiba_rbtx4927_halt; |
235 | pm_power_off = toshiba_rbtx4927_power_off; | 235 | pm_power_off = toshiba_rbtx4927_power_off; |
236 | 236 | ||
237 | for (i = 0; i < TX4927_NR_TMR; i++) | ||
238 | txx9_tmr_init(TX4927_TMR_REG(0) & 0xfffffffffULL); | ||
239 | |||
240 | #ifdef CONFIG_PCI | 237 | #ifdef CONFIG_PCI |
241 | txx9_alloc_pci_controller(&txx9_primary_pcic, | 238 | txx9_alloc_pci_controller(&txx9_primary_pcic, |
242 | RBTX4927_PCIMEM, RBTX4927_PCIMEM_SIZE, | 239 | RBTX4927_PCIMEM, RBTX4927_PCIMEM_SIZE, |
@@ -245,36 +242,13 @@ static void __init rbtx4927_mem_setup(void) | |||
245 | set_io_port_base(KSEG1 + RBTX4927_ISA_IO_OFFSET); | 242 | set_io_port_base(KSEG1 + RBTX4927_ISA_IO_OFFSET); |
246 | #endif | 243 | #endif |
247 | 244 | ||
248 | /* CCFG */ | 245 | tx4927_setup_serial(); |
249 | /* do reset on watchdog */ | ||
250 | tx4927_ccfg_set(TX4927_CCFG_WR); | ||
251 | /* enable Timeout BusError */ | ||
252 | if (tx4927_ccfg_toeon) | ||
253 | tx4927_ccfg_set(TX4927_CCFG_TOE); | ||
254 | |||
255 | #ifdef CONFIG_SERIAL_TXX9 | ||
256 | { | ||
257 | extern int early_serial_txx9_setup(struct uart_port *port); | ||
258 | struct uart_port req; | ||
259 | for(i = 0; i < 2; i++) { | ||
260 | memset(&req, 0, sizeof(req)); | ||
261 | req.line = i; | ||
262 | req.iotype = UPIO_MEM; | ||
263 | req.membase = (char *)(0xff1ff300 + i * 0x100); | ||
264 | req.mapbase = 0xff1ff300 + i * 0x100; | ||
265 | req.irq = TXX9_IRQ_BASE + TX4927_IR_SIO(i); | ||
266 | req.flags |= UPF_BUGGY_UART /*HAVE_CTS_LINE*/; | ||
267 | req.uartclk = 50000000; | ||
268 | early_serial_txx9_setup(&req); | ||
269 | } | ||
270 | } | ||
271 | #ifdef CONFIG_SERIAL_TXX9_CONSOLE | 246 | #ifdef CONFIG_SERIAL_TXX9_CONSOLE |
272 | argptr = prom_getcmdline(); | 247 | argptr = prom_getcmdline(); |
273 | if (strstr(argptr, "console=") == NULL) { | 248 | if (strstr(argptr, "console=") == NULL) { |
274 | strcat(argptr, " console=ttyS0,38400"); | 249 | strcat(argptr, " console=ttyS0,38400"); |
275 | } | 250 | } |
276 | #endif | 251 | #endif |
277 | #endif | ||
278 | 252 | ||
279 | #ifdef CONFIG_ROOT_NFS | 253 | #ifdef CONFIG_ROOT_NFS |
280 | argptr = prom_getcmdline(); | 254 | argptr = prom_getcmdline(); |
@@ -291,19 +265,7 @@ static void __init rbtx4927_mem_setup(void) | |||
291 | #endif | 265 | #endif |
292 | } | 266 | } |
293 | 267 | ||
294 | static void __init rbtx49x7_common_time_init(void) | 268 | static void __init rbtx4927_clock_init(void) |
295 | { | ||
296 | /* change default value to udelay/mdelay take reasonable time */ | ||
297 | loops_per_jiffy = txx9_cpu_clock / HZ / 2; | ||
298 | |||
299 | mips_hpt_frequency = txx9_cpu_clock / 2; | ||
300 | if (____raw_readq(&tx4927_ccfgptr->ccfg) & TX4927_CCFG_TINTDIS) | ||
301 | txx9_clockevent_init(TX4927_TMR_REG(0) & 0xfffffffffULL, | ||
302 | TXX9_IRQ_BASE + 17, | ||
303 | 50000000); | ||
304 | } | ||
305 | |||
306 | static void __init rbtx4927_time_init(void) | ||
307 | { | 269 | { |
308 | /* | 270 | /* |
309 | * ASSUMPTION: PCIDIVMODE is configured for PCI 33MHz or 66MHz. | 271 | * ASSUMPTION: PCIDIVMODE is configured for PCI 33MHz or 66MHz. |
@@ -325,11 +287,9 @@ static void __init rbtx4927_time_init(void) | |||
325 | default: | 287 | default: |
326 | txx9_cpu_clock = 200000000; /* 200MHz */ | 288 | txx9_cpu_clock = 200000000; /* 200MHz */ |
327 | } | 289 | } |
328 | |||
329 | rbtx49x7_common_time_init(); | ||
330 | } | 290 | } |
331 | 291 | ||
332 | static void __init rbtx4937_time_init(void) | 292 | static void __init rbtx4937_clock_init(void) |
333 | { | 293 | { |
334 | /* | 294 | /* |
335 | * ASSUMPTION: PCIDIVMODE is configured for PCI 33MHz or 66MHz. | 295 | * ASSUMPTION: PCIDIVMODE is configured for PCI 33MHz or 66MHz. |
@@ -357,15 +317,18 @@ static void __init rbtx4937_time_init(void) | |||
357 | default: | 317 | default: |
358 | txx9_cpu_clock = 333333333; /* 333MHz */ | 318 | txx9_cpu_clock = 333333333; /* 333MHz */ |
359 | } | 319 | } |
320 | } | ||
360 | 321 | ||
361 | rbtx49x7_common_time_init(); | 322 | static void __init rbtx4927_time_init(void) |
323 | { | ||
324 | tx4927_time_init(0); | ||
362 | } | 325 | } |
363 | 326 | ||
364 | static int __init toshiba_rbtx4927_rtc_init(void) | 327 | static int __init toshiba_rbtx4927_rtc_init(void) |
365 | { | 328 | { |
366 | static struct resource __initdata res = { | 329 | struct resource res = { |
367 | .start = 0x1c010000, | 330 | .start = RBTX4927_BRAMRTC_BASE - IO_BASE, |
368 | .end = 0x1c010000 + 0x800 - 1, | 331 | .end = RBTX4927_BRAMRTC_BASE - IO_BASE + 0x800 - 1, |
369 | .flags = IORESOURCE_MEM, | 332 | .flags = IORESOURCE_MEM, |
370 | }; | 333 | }; |
371 | struct platform_device *dev = | 334 | struct platform_device *dev = |
@@ -375,7 +338,7 @@ static int __init toshiba_rbtx4927_rtc_init(void) | |||
375 | 338 | ||
376 | static int __init rbtx4927_ne_init(void) | 339 | static int __init rbtx4927_ne_init(void) |
377 | { | 340 | { |
378 | static struct resource __initdata res[] = { | 341 | struct resource res[] = { |
379 | { | 342 | { |
380 | .start = RBTX4927_RTL_8019_BASE, | 343 | .start = RBTX4927_RTL_8019_BASE, |
381 | .end = RBTX4927_RTL_8019_BASE + 0x20 - 1, | 344 | .end = RBTX4927_RTL_8019_BASE + 0x20 - 1, |
@@ -434,7 +397,7 @@ struct txx9_board_vec rbtx4937_vec __initdata = { | |||
434 | .prom_init = rbtx4927_prom_init, | 397 | .prom_init = rbtx4927_prom_init, |
435 | .mem_setup = rbtx4927_mem_setup, | 398 | .mem_setup = rbtx4927_mem_setup, |
436 | .irq_setup = rbtx4927_irq_setup, | 399 | .irq_setup = rbtx4927_irq_setup, |
437 | .time_init = rbtx4937_time_init, | 400 | .time_init = rbtx4927_time_init, |
438 | .device_init = rbtx4927_device_init, | 401 | .device_init = rbtx4927_device_init, |
439 | .arch_init = rbtx4937_arch_init, | 402 | .arch_init = rbtx4937_arch_init, |
440 | #ifdef CONFIG_PCI | 403 | #ifdef CONFIG_PCI |
diff --git a/arch/mips/txx9/rbtx4938/prom.c b/arch/mips/txx9/rbtx4938/prom.c index fbb37458ddb2..ee189519ce5a 100644 --- a/arch/mips/txx9/rbtx4938/prom.c +++ b/arch/mips/txx9/rbtx4938/prom.c | |||
@@ -18,12 +18,8 @@ | |||
18 | 18 | ||
19 | void __init rbtx4938_prom_init(void) | 19 | void __init rbtx4938_prom_init(void) |
20 | { | 20 | { |
21 | extern int tx4938_get_mem_size(void); | ||
22 | int msize; | ||
23 | #ifndef CONFIG_TX4938_NAND_BOOT | 21 | #ifndef CONFIG_TX4938_NAND_BOOT |
24 | prom_init_cmdline(); | 22 | prom_init_cmdline(); |
25 | #endif | 23 | #endif |
26 | 24 | add_memory_region(0, tx4938_get_mem_size(), BOOT_MEM_RAM); | |
27 | msize = tx4938_get_mem_size(); | ||
28 | add_memory_region(0, msize << 20, BOOT_MEM_RAM); | ||
29 | } | 25 | } |
diff --git a/arch/mips/txx9/rbtx4938/setup.c b/arch/mips/txx9/rbtx4938/setup.c index aaa987ae0f83..6c2b99bb8af6 100644 --- a/arch/mips/txx9/rbtx4938/setup.c +++ b/arch/mips/txx9/rbtx4938/setup.c | |||
@@ -20,21 +20,14 @@ | |||
20 | #include <linux/gpio.h> | 20 | #include <linux/gpio.h> |
21 | 21 | ||
22 | #include <asm/reboot.h> | 22 | #include <asm/reboot.h> |
23 | #include <asm/time.h> | ||
24 | #include <asm/txx9tmr.h> | ||
25 | #include <asm/io.h> | 23 | #include <asm/io.h> |
26 | #include <asm/txx9/generic.h> | 24 | #include <asm/txx9/generic.h> |
27 | #include <asm/txx9/pci.h> | 25 | #include <asm/txx9/pci.h> |
28 | #include <asm/txx9/rbtx4938.h> | 26 | #include <asm/txx9/rbtx4938.h> |
29 | #ifdef CONFIG_SERIAL_TXX9 | ||
30 | #include <linux/serial_core.h> | ||
31 | #endif | ||
32 | #include <linux/spi/spi.h> | 27 | #include <linux/spi/spi.h> |
33 | #include <asm/txx9/spi.h> | 28 | #include <asm/txx9/spi.h> |
34 | #include <asm/txx9pio.h> | 29 | #include <asm/txx9pio.h> |
35 | 30 | ||
36 | static int tx4938_ccfg_toeon = 1; | ||
37 | |||
38 | static void rbtx4938_machine_halt(void) | 31 | static void rbtx4938_machine_halt(void) |
39 | { | 32 | { |
40 | printk(KERN_NOTICE "System Halted\n"); | 33 | printk(KERN_NOTICE "System Halted\n"); |
@@ -182,188 +175,10 @@ static void __init rbtx4938_spi_setup(void) | |||
182 | } | 175 | } |
183 | 176 | ||
184 | static struct resource rbtx4938_fpga_resource; | 177 | static struct resource rbtx4938_fpga_resource; |
185 | static struct resource tx4938_sdram_resource[4]; | ||
186 | static struct resource tx4938_sram_resource; | ||
187 | |||
188 | void __init tx4938_board_setup(void) | ||
189 | { | ||
190 | int i; | ||
191 | unsigned long divmode; | ||
192 | int cpuclk = 0; | ||
193 | unsigned long pcode = TX4938_REV_PCODE(); | ||
194 | |||
195 | ioport_resource.start = 0; | ||
196 | ioport_resource.end = 0xffffffff; | ||
197 | iomem_resource.start = 0; | ||
198 | iomem_resource.end = 0xffffffff; /* expand to 4GB */ | ||
199 | |||
200 | txx9_reg_res_init(pcode, TX4938_REG_BASE, | ||
201 | TX4938_REG_SIZE); | ||
202 | /* SDRAMC,EBUSC are configured by PROM */ | ||
203 | for (i = 0; i < 8; i++) { | ||
204 | if (!(TX4938_EBUSC_CR(i) & 0x8)) | ||
205 | continue; /* disabled */ | ||
206 | txx9_ce_res[i].start = (unsigned long)TX4938_EBUSC_BA(i); | ||
207 | txx9_ce_res[i].end = | ||
208 | txx9_ce_res[i].start + TX4938_EBUSC_SIZE(i) - 1; | ||
209 | request_resource(&iomem_resource, &txx9_ce_res[i]); | ||
210 | } | ||
211 | |||
212 | /* clocks */ | ||
213 | if (txx9_master_clock) { | ||
214 | u64 ccfg = ____raw_readq(&tx4938_ccfgptr->ccfg); | ||
215 | /* calculate gbus_clock and cpu_clock_freq from master_clock */ | ||
216 | divmode = (__u32)ccfg & TX4938_CCFG_DIVMODE_MASK; | ||
217 | switch (divmode) { | ||
218 | case TX4938_CCFG_DIVMODE_8: | ||
219 | case TX4938_CCFG_DIVMODE_10: | ||
220 | case TX4938_CCFG_DIVMODE_12: | ||
221 | case TX4938_CCFG_DIVMODE_16: | ||
222 | case TX4938_CCFG_DIVMODE_18: | ||
223 | txx9_gbus_clock = txx9_master_clock * 4; break; | ||
224 | default: | ||
225 | txx9_gbus_clock = txx9_master_clock; | ||
226 | } | ||
227 | switch (divmode) { | ||
228 | case TX4938_CCFG_DIVMODE_2: | ||
229 | case TX4938_CCFG_DIVMODE_8: | ||
230 | cpuclk = txx9_gbus_clock * 2; break; | ||
231 | case TX4938_CCFG_DIVMODE_2_5: | ||
232 | case TX4938_CCFG_DIVMODE_10: | ||
233 | cpuclk = txx9_gbus_clock * 5 / 2; break; | ||
234 | case TX4938_CCFG_DIVMODE_3: | ||
235 | case TX4938_CCFG_DIVMODE_12: | ||
236 | cpuclk = txx9_gbus_clock * 3; break; | ||
237 | case TX4938_CCFG_DIVMODE_4: | ||
238 | case TX4938_CCFG_DIVMODE_16: | ||
239 | cpuclk = txx9_gbus_clock * 4; break; | ||
240 | case TX4938_CCFG_DIVMODE_4_5: | ||
241 | case TX4938_CCFG_DIVMODE_18: | ||
242 | cpuclk = txx9_gbus_clock * 9 / 2; break; | ||
243 | } | ||
244 | txx9_cpu_clock = cpuclk; | ||
245 | } else { | ||
246 | u64 ccfg = ____raw_readq(&tx4938_ccfgptr->ccfg); | ||
247 | if (txx9_cpu_clock == 0) { | ||
248 | txx9_cpu_clock = 300000000; /* 300MHz */ | ||
249 | } | ||
250 | /* calculate gbus_clock and master_clock from cpu_clock_freq */ | ||
251 | cpuclk = txx9_cpu_clock; | ||
252 | divmode = (__u32)ccfg & TX4938_CCFG_DIVMODE_MASK; | ||
253 | switch (divmode) { | ||
254 | case TX4938_CCFG_DIVMODE_2: | ||
255 | case TX4938_CCFG_DIVMODE_8: | ||
256 | txx9_gbus_clock = cpuclk / 2; break; | ||
257 | case TX4938_CCFG_DIVMODE_2_5: | ||
258 | case TX4938_CCFG_DIVMODE_10: | ||
259 | txx9_gbus_clock = cpuclk * 2 / 5; break; | ||
260 | case TX4938_CCFG_DIVMODE_3: | ||
261 | case TX4938_CCFG_DIVMODE_12: | ||
262 | txx9_gbus_clock = cpuclk / 3; break; | ||
263 | case TX4938_CCFG_DIVMODE_4: | ||
264 | case TX4938_CCFG_DIVMODE_16: | ||
265 | txx9_gbus_clock = cpuclk / 4; break; | ||
266 | case TX4938_CCFG_DIVMODE_4_5: | ||
267 | case TX4938_CCFG_DIVMODE_18: | ||
268 | txx9_gbus_clock = cpuclk * 2 / 9; break; | ||
269 | } | ||
270 | switch (divmode) { | ||
271 | case TX4938_CCFG_DIVMODE_8: | ||
272 | case TX4938_CCFG_DIVMODE_10: | ||
273 | case TX4938_CCFG_DIVMODE_12: | ||
274 | case TX4938_CCFG_DIVMODE_16: | ||
275 | case TX4938_CCFG_DIVMODE_18: | ||
276 | txx9_master_clock = txx9_gbus_clock / 4; break; | ||
277 | default: | ||
278 | txx9_master_clock = txx9_gbus_clock; | ||
279 | } | ||
280 | } | ||
281 | /* change default value to udelay/mdelay take reasonable time */ | ||
282 | loops_per_jiffy = txx9_cpu_clock / HZ / 2; | ||
283 | |||
284 | /* CCFG */ | ||
285 | /* clear WatchDogReset,BusErrorOnWrite flag (W1C) */ | ||
286 | tx4938_ccfg_set(TX4938_CCFG_WDRST | TX4938_CCFG_BEOW); | ||
287 | /* do reset on watchdog */ | ||
288 | tx4938_ccfg_set(TX4938_CCFG_WR); | ||
289 | /* clear PCIC1 reset */ | ||
290 | txx9_clear64(&tx4938_ccfgptr->clkctr, TX4938_CLKCTR_PCIC1RST); | ||
291 | |||
292 | /* enable Timeout BusError */ | ||
293 | if (tx4938_ccfg_toeon) | ||
294 | tx4938_ccfg_set(TX4938_CCFG_TOE); | ||
295 | |||
296 | /* DMA selection */ | ||
297 | txx9_clear64(&tx4938_ccfgptr->pcfg, TX4938_PCFG_DMASEL_ALL); | ||
298 | |||
299 | /* Use external clock for external arbiter */ | ||
300 | if (!(____raw_readq(&tx4938_ccfgptr->ccfg) & TX4938_CCFG_PCIARB)) | ||
301 | txx9_clear64(&tx4938_ccfgptr->pcfg, TX4938_PCFG_PCICLKEN_ALL); | ||
302 | |||
303 | printk(KERN_INFO "%s -- %dMHz(M%dMHz) CRIR:%08x CCFG:%llx PCFG:%llx\n", | ||
304 | txx9_pcode_str, | ||
305 | (cpuclk + 500000) / 1000000, | ||
306 | (txx9_master_clock + 500000) / 1000000, | ||
307 | (__u32)____raw_readq(&tx4938_ccfgptr->crir), | ||
308 | (unsigned long long)____raw_readq(&tx4938_ccfgptr->ccfg), | ||
309 | (unsigned long long)____raw_readq(&tx4938_ccfgptr->pcfg)); | ||
310 | |||
311 | printk(KERN_INFO "%s SDRAMC --", txx9_pcode_str); | ||
312 | for (i = 0; i < 4; i++) { | ||
313 | unsigned long long cr = tx4938_sdramcptr->cr[i]; | ||
314 | unsigned long ram_base, ram_size; | ||
315 | if (!((unsigned long)cr & 0x00000400)) | ||
316 | continue; /* disabled */ | ||
317 | ram_base = (unsigned long)(cr >> 49) << 21; | ||
318 | ram_size = ((unsigned long)(cr >> 33) + 1) << 21; | ||
319 | if (ram_base >= 0x20000000) | ||
320 | continue; /* high memory (ignore) */ | ||
321 | printk(" CR%d:%016Lx", i, cr); | ||
322 | tx4938_sdram_resource[i].name = "SDRAM"; | ||
323 | tx4938_sdram_resource[i].start = ram_base; | ||
324 | tx4938_sdram_resource[i].end = ram_base + ram_size - 1; | ||
325 | tx4938_sdram_resource[i].flags = IORESOURCE_MEM; | ||
326 | request_resource(&iomem_resource, &tx4938_sdram_resource[i]); | ||
327 | } | ||
328 | printk(" TR:%09Lx\n", tx4938_sdramcptr->tr); | ||
329 | |||
330 | /* SRAM */ | ||
331 | if (tx4938_sramcptr->cr & 1) { | ||
332 | unsigned int size = 0x800; | ||
333 | unsigned long base = | ||
334 | (tx4938_sramcptr->cr >> (39-11)) & ~(size - 1); | ||
335 | tx4938_sram_resource.name = "SRAM"; | ||
336 | tx4938_sram_resource.start = base; | ||
337 | tx4938_sram_resource.end = base + size - 1; | ||
338 | tx4938_sram_resource.flags = IORESOURCE_MEM; | ||
339 | request_resource(&iomem_resource, &tx4938_sram_resource); | ||
340 | } | ||
341 | |||
342 | /* TMR */ | ||
343 | for (i = 0; i < TX4938_NR_TMR; i++) | ||
344 | txx9_tmr_init(TX4938_TMR_REG(i) & 0xfffffffffULL); | ||
345 | |||
346 | /* enable DMA */ | ||
347 | for (i = 0; i < 2; i++) | ||
348 | ____raw_writeq(TX4938_DMA_MCR_MSTEN, | ||
349 | (void __iomem *)(TX4938_DMA_REG(i) + 0x50)); | ||
350 | |||
351 | /* PIO */ | ||
352 | __raw_writel(0, &tx4938_pioptr->maskcpu); | ||
353 | __raw_writel(0, &tx4938_pioptr->maskext); | ||
354 | |||
355 | #ifdef CONFIG_PCI | ||
356 | txx9_alloc_pci_controller(&txx9_primary_pcic, 0, 0, 0, 0); | ||
357 | #endif | ||
358 | } | ||
359 | 178 | ||
360 | static void __init rbtx4938_time_init(void) | 179 | static void __init rbtx4938_time_init(void) |
361 | { | 180 | { |
362 | mips_hpt_frequency = txx9_cpu_clock / 2; | 181 | tx4938_time_init(0); |
363 | if (____raw_readq(&tx4938_ccfgptr->ccfg) & TX4938_CCFG_TINTDIS) | ||
364 | txx9_clockevent_init(TX4938_TMR_REG(0) & 0xfffffffffULL, | ||
365 | TXX9_IRQ_BASE + TX4938_IR_TMR(0), | ||
366 | txx9_gbus_clock / 2); | ||
367 | } | 182 | } |
368 | 183 | ||
369 | static void __init rbtx4938_mem_setup(void) | 184 | static void __init rbtx4938_mem_setup(void) |
@@ -371,39 +186,24 @@ static void __init rbtx4938_mem_setup(void) | |||
371 | unsigned long long pcfg; | 186 | unsigned long long pcfg; |
372 | char *argptr; | 187 | char *argptr; |
373 | 188 | ||
374 | iomem_resource.end = 0xffffffff; /* 4GB */ | ||
375 | |||
376 | if (txx9_master_clock == 0) | 189 | if (txx9_master_clock == 0) |
377 | txx9_master_clock = 25000000; /* 25MHz */ | 190 | txx9_master_clock = 25000000; /* 25MHz */ |
378 | tx4938_board_setup(); | 191 | |
379 | #ifndef CONFIG_PCI | 192 | tx4938_setup(); |
193 | |||
194 | #ifdef CONFIG_PCI | ||
195 | txx9_alloc_pci_controller(&txx9_primary_pcic, 0, 0, 0, 0); | ||
196 | #else | ||
380 | set_io_port_base(RBTX4938_ETHER_BASE); | 197 | set_io_port_base(RBTX4938_ETHER_BASE); |
381 | #endif | 198 | #endif |
382 | 199 | ||
383 | #ifdef CONFIG_SERIAL_TXX9 | 200 | tx4938_setup_serial(); |
384 | { | ||
385 | extern int early_serial_txx9_setup(struct uart_port *port); | ||
386 | int i; | ||
387 | struct uart_port req; | ||
388 | for(i = 0; i < 2; i++) { | ||
389 | memset(&req, 0, sizeof(req)); | ||
390 | req.line = i; | ||
391 | req.iotype = UPIO_MEM; | ||
392 | req.membase = (char *)(0xff1ff300 + i * 0x100); | ||
393 | req.mapbase = 0xff1ff300 + i * 0x100; | ||
394 | req.irq = RBTX4938_IRQ_IRC_SIO(i); | ||
395 | req.flags |= UPF_BUGGY_UART /*HAVE_CTS_LINE*/; | ||
396 | req.uartclk = 50000000; | ||
397 | early_serial_txx9_setup(&req); | ||
398 | } | ||
399 | } | ||
400 | #ifdef CONFIG_SERIAL_TXX9_CONSOLE | 201 | #ifdef CONFIG_SERIAL_TXX9_CONSOLE |
401 | argptr = prom_getcmdline(); | 202 | argptr = prom_getcmdline(); |
402 | if (strstr(argptr, "console=") == NULL) { | 203 | if (strstr(argptr, "console=") == NULL) { |
403 | strcat(argptr, " console=ttyS0,38400"); | 204 | strcat(argptr, " console=ttyS0,38400"); |
404 | } | 205 | } |
405 | #endif | 206 | #endif |
406 | #endif | ||
407 | 207 | ||
408 | #ifdef CONFIG_TOSHIBA_RBTX4938_MPLEX_PIO58_61 | 208 | #ifdef CONFIG_TOSHIBA_RBTX4938_MPLEX_PIO58_61 |
409 | printk("PIOSEL: disabling both ata and nand selection\n"); | 209 | printk("PIOSEL: disabling both ata and nand selection\n"); |
@@ -457,7 +257,7 @@ static void __init rbtx4938_mem_setup(void) | |||
457 | rbtx4938_fpga_resource.start = CPHYSADDR(RBTX4938_FPGA_REG_ADDR); | 257 | rbtx4938_fpga_resource.start = CPHYSADDR(RBTX4938_FPGA_REG_ADDR); |
458 | rbtx4938_fpga_resource.end = CPHYSADDR(RBTX4938_FPGA_REG_ADDR) + 0xffff; | 258 | rbtx4938_fpga_resource.end = CPHYSADDR(RBTX4938_FPGA_REG_ADDR) + 0xffff; |
459 | rbtx4938_fpga_resource.flags = IORESOURCE_MEM | IORESOURCE_BUSY; | 259 | rbtx4938_fpga_resource.flags = IORESOURCE_MEM | IORESOURCE_BUSY; |
460 | if (request_resource(&iomem_resource, &rbtx4938_fpga_resource)) | 260 | if (request_resource(&txx9_ce_res[2], &rbtx4938_fpga_resource)) |
461 | printk("request resource for fpga failed\n"); | 261 | printk("request resource for fpga failed\n"); |
462 | 262 | ||
463 | _machine_restart = rbtx4938_machine_restart; | 263 | _machine_restart = rbtx4938_machine_restart; |
@@ -488,18 +288,6 @@ static int __init rbtx4938_ne_init(void) | |||
488 | return IS_ERR(dev) ? PTR_ERR(dev) : 0; | 288 | return IS_ERR(dev) ? PTR_ERR(dev) : 0; |
489 | } | 289 | } |
490 | 290 | ||
491 | /* GPIO support */ | ||
492 | |||
493 | int gpio_to_irq(unsigned gpio) | ||
494 | { | ||
495 | return -EINVAL; | ||
496 | } | ||
497 | |||
498 | int irq_to_gpio(unsigned irq) | ||
499 | { | ||
500 | return -EINVAL; | ||
501 | } | ||
502 | |||
503 | static DEFINE_SPINLOCK(rbtx4938_spi_gpio_lock); | 291 | static DEFINE_SPINLOCK(rbtx4938_spi_gpio_lock); |
504 | 292 | ||
505 | static void rbtx4938_spi_gpio_set(struct gpio_chip *chip, unsigned int offset, | 293 | static void rbtx4938_spi_gpio_set(struct gpio_chip *chip, unsigned int offset, |
@@ -579,7 +367,6 @@ static int __init rbtx4938_spi_init(void) | |||
579 | 367 | ||
580 | static void __init rbtx4938_arch_init(void) | 368 | static void __init rbtx4938_arch_init(void) |
581 | { | 369 | { |
582 | txx9_gpio_init(TX4938_PIO_REG & 0xfffffffffULL, 0, 16); | ||
583 | gpiochip_add(&rbtx4938_spi_gpio_chip); | 370 | gpiochip_add(&rbtx4938_spi_gpio_chip); |
584 | rbtx4938_pci_setup(); | 371 | rbtx4938_pci_setup(); |
585 | rbtx4938_spi_init(); | 372 | rbtx4938_spi_init(); |