aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mn10300
diff options
context:
space:
mode:
Diffstat (limited to 'arch/mn10300')
-rw-r--r--arch/mn10300/Makefile2
-rw-r--r--arch/mn10300/configs/asb2303_defconfig107
-rw-r--r--arch/mn10300/include/asm/asm-offsets.h1
-rw-r--r--arch/mn10300/include/asm/bitops.h4
-rw-r--r--arch/mn10300/include/asm/cacheflush.h1
-rw-r--r--arch/mn10300/include/asm/div64.h2
-rw-r--r--arch/mn10300/include/asm/dma-mapping.h65
-rw-r--r--arch/mn10300/include/asm/elf.h1
-rw-r--r--arch/mn10300/include/asm/mman.h5
-rw-r--r--arch/mn10300/include/asm/pgtable.h2
-rw-r--r--arch/mn10300/include/asm/ptrace.h2
-rw-r--r--arch/mn10300/include/asm/socket.h2
-rw-r--r--arch/mn10300/include/asm/system.h1
-rw-r--r--arch/mn10300/include/asm/tlbflush.h2
-rw-r--r--arch/mn10300/include/asm/uaccess.h4
-rw-r--r--arch/mn10300/include/asm/unistd.h5
-rw-r--r--arch/mn10300/kernel/entry.S5
-rw-r--r--arch/mn10300/kernel/irq.c4
-rw-r--r--arch/mn10300/kernel/kprobes.c61
-rw-r--r--arch/mn10300/kernel/mn10300-serial.c3
-rw-r--r--arch/mn10300/kernel/process.c14
-rw-r--r--arch/mn10300/kernel/setup.c1
-rw-r--r--arch/mn10300/kernel/signal.c2
-rw-r--r--arch/mn10300/kernel/sys_mn10300.c142
-rw-r--r--arch/mn10300/lib/checksum.c1
-rw-r--r--arch/mn10300/lib/delay.c3
-rw-r--r--arch/mn10300/lib/usercopy.c6
-rw-r--r--arch/mn10300/mm/dma-alloc.c18
-rw-r--r--arch/mn10300/mm/init.c5
-rw-r--r--arch/mn10300/mm/misalignment.c4
-rw-r--r--arch/mn10300/mm/mmu-context.c3
-rw-r--r--arch/mn10300/mm/pgtable.c2
-rw-r--r--arch/mn10300/unit-asb2305/include/unit/serial.h2
-rw-r--r--arch/mn10300/unit-asb2305/include/unit/timex.h2
-rw-r--r--arch/mn10300/unit-asb2305/leds.c4
-rw-r--r--arch/mn10300/unit-asb2305/pci-asb2305.c55
-rw-r--r--arch/mn10300/unit-asb2305/pci-asb2305.h1
-rw-r--r--arch/mn10300/unit-asb2305/pci-irq.c1
-rw-r--r--arch/mn10300/unit-asb2305/pci.c68
-rw-r--r--arch/mn10300/unit-asb2305/unit-init.c5
40 files changed, 226 insertions, 392 deletions
diff --git a/arch/mn10300/Makefile b/arch/mn10300/Makefile
index dd0c8ff52a68..ac5c6bdb2f05 100644
--- a/arch/mn10300/Makefile
+++ b/arch/mn10300/Makefile
@@ -19,7 +19,7 @@ CCDIR := $(strip $(patsubst %/specs,%,$(CCSPECS)))
19KBUILD_CPPFLAGS += -nostdinc -I$(CCDIR)/include 19KBUILD_CPPFLAGS += -nostdinc -I$(CCDIR)/include
20 20
21LDFLAGS := 21LDFLAGS :=
22OBJCOPYFLAGS := -O binary -R .note -R .comment -S 22OBJCOPYFLAGS := -O binary -R .note -R .comment -R .GCC-command-line -R .note.gnu.build-id -S
23#LDFLAGS_vmlinux := -Map linkmap.txt 23#LDFLAGS_vmlinux := -Map linkmap.txt
24CHECKFLAGS += 24CHECKFLAGS +=
25 25
diff --git a/arch/mn10300/configs/asb2303_defconfig b/arch/mn10300/configs/asb2303_defconfig
index 3acce23708b0..441920d8ff58 100644
--- a/arch/mn10300/configs/asb2303_defconfig
+++ b/arch/mn10300/configs/asb2303_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.30-rc2 3# Linux kernel version: 2.6.33-rc1
4# Sat Apr 18 11:13:22 2009 4# Tue Dec 22 19:26:25 2009
5# 5#
6CONFIG_MN10300=y 6CONFIG_MN10300=y
7CONFIG_AM33=y 7CONFIG_AM33=y
@@ -22,6 +22,7 @@ CONFIG_GENERIC_HARDIRQS=y
22# CONFIG_HOTPLUG_CPU is not set 22# CONFIG_HOTPLUG_CPU is not set
23CONFIG_HZ=1000 23CONFIG_HZ=1000
24CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" 24CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
25CONFIG_CONSTRUCTORS=y
25 26
26# 27#
27# General setup 28# General setup
@@ -43,11 +44,10 @@ CONFIG_BSD_PROCESS_ACCT=y
43# 44#
44# RCU Subsystem 45# RCU Subsystem
45# 46#
46CONFIG_CLASSIC_RCU=y
47# CONFIG_TREE_RCU is not set 47# CONFIG_TREE_RCU is not set
48# CONFIG_PREEMPT_RCU is not set 48# CONFIG_TREE_PREEMPT_RCU is not set
49CONFIG_TINY_RCU=y
49# CONFIG_TREE_RCU_TRACE is not set 50# CONFIG_TREE_RCU_TRACE is not set
50# CONFIG_PREEMPT_RCU_TRACE is not set
51# CONFIG_IKCONFIG is not set 51# CONFIG_IKCONFIG is not set
52CONFIG_LOG_BUF_SHIFT=14 52CONFIG_LOG_BUF_SHIFT=14
53# CONFIG_GROUP_SCHED is not set 53# CONFIG_GROUP_SCHED is not set
@@ -62,7 +62,6 @@ CONFIG_ANON_INODES=y
62CONFIG_EMBEDDED=y 62CONFIG_EMBEDDED=y
63CONFIG_SYSCTL_SYSCALL=y 63CONFIG_SYSCTL_SYSCALL=y
64# CONFIG_KALLSYMS is not set 64# CONFIG_KALLSYMS is not set
65CONFIG_STRIP_ASM_SYMS=y
66# CONFIG_HOTPLUG is not set 65# CONFIG_HOTPLUG is not set
67CONFIG_PRINTK=y 66CONFIG_PRINTK=y
68CONFIG_BUG=y 67CONFIG_BUG=y
@@ -75,14 +74,22 @@ CONFIG_TIMERFD=y
75CONFIG_EVENTFD=y 74CONFIG_EVENTFD=y
76CONFIG_SHMEM=y 75CONFIG_SHMEM=y
77CONFIG_AIO=y 76CONFIG_AIO=y
77
78#
79# Kernel Performance Events And Counters
80#
78# CONFIG_VM_EVENT_COUNTERS is not set 81# CONFIG_VM_EVENT_COUNTERS is not set
79CONFIG_COMPAT_BRK=y 82CONFIG_COMPAT_BRK=y
80CONFIG_SLAB=y 83CONFIG_SLAB=y
81# CONFIG_SLUB is not set 84# CONFIG_SLUB is not set
82# CONFIG_SLOB is not set 85# CONFIG_SLOB is not set
83CONFIG_PROFILING=y 86CONFIG_PROFILING=y
84# CONFIG_MARKERS is not set
85CONFIG_HAVE_OPROFILE=y 87CONFIG_HAVE_OPROFILE=y
88CONFIG_HAVE_ARCH_TRACEHOOK=y
89
90#
91# GCOV-based kernel profiling
92#
86# CONFIG_SLOW_WORK is not set 93# CONFIG_SLOW_WORK is not set
87# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set 94# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
88CONFIG_SLABINFO=y 95CONFIG_SLABINFO=y
@@ -90,6 +97,35 @@ CONFIG_RT_MUTEXES=y
90CONFIG_BASE_SMALL=0 97CONFIG_BASE_SMALL=0
91# CONFIG_MODULES is not set 98# CONFIG_MODULES is not set
92# CONFIG_BLOCK is not set 99# CONFIG_BLOCK is not set
100# CONFIG_INLINE_SPIN_TRYLOCK is not set
101# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
102# CONFIG_INLINE_SPIN_LOCK is not set
103# CONFIG_INLINE_SPIN_LOCK_BH is not set
104# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
105# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
106# CONFIG_INLINE_SPIN_UNLOCK is not set
107# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
108# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set
109# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
110# CONFIG_INLINE_READ_TRYLOCK is not set
111# CONFIG_INLINE_READ_LOCK is not set
112# CONFIG_INLINE_READ_LOCK_BH is not set
113# CONFIG_INLINE_READ_LOCK_IRQ is not set
114# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
115# CONFIG_INLINE_READ_UNLOCK is not set
116# CONFIG_INLINE_READ_UNLOCK_BH is not set
117# CONFIG_INLINE_READ_UNLOCK_IRQ is not set
118# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
119# CONFIG_INLINE_WRITE_TRYLOCK is not set
120# CONFIG_INLINE_WRITE_LOCK is not set
121# CONFIG_INLINE_WRITE_LOCK_BH is not set
122# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
123# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
124# CONFIG_INLINE_WRITE_UNLOCK is not set
125# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
126# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set
127# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
128# CONFIG_MUTEX_SPIN_ON_OWNER is not set
93# CONFIG_FREEZER is not set 129# CONFIG_FREEZER is not set
94 130
95# 131#
@@ -145,9 +181,8 @@ CONFIG_SPLIT_PTLOCK_CPUS=4
145CONFIG_ZONE_DMA_FLAG=0 181CONFIG_ZONE_DMA_FLAG=0
146CONFIG_NR_QUICK=1 182CONFIG_NR_QUICK=1
147CONFIG_VIRT_TO_BUS=y 183CONFIG_VIRT_TO_BUS=y
148CONFIG_UNEVICTABLE_LRU=y 184# CONFIG_KSM is not set
149CONFIG_HAVE_MLOCK=y 185CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
150CONFIG_HAVE_MLOCKED_PAGE_BIT=y
151 186
152# 187#
153# Power management options 188# Power management options
@@ -202,6 +237,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
202# CONFIG_NETFILTER is not set 237# CONFIG_NETFILTER is not set
203# CONFIG_IP_DCCP is not set 238# CONFIG_IP_DCCP is not set
204# CONFIG_IP_SCTP is not set 239# CONFIG_IP_SCTP is not set
240# CONFIG_RDS is not set
205# CONFIG_TIPC is not set 241# CONFIG_TIPC is not set
206# CONFIG_ATM is not set 242# CONFIG_ATM is not set
207# CONFIG_BRIDGE is not set 243# CONFIG_BRIDGE is not set
@@ -216,6 +252,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
216# CONFIG_ECONET is not set 252# CONFIG_ECONET is not set
217# CONFIG_WAN_ROUTER is not set 253# CONFIG_WAN_ROUTER is not set
218# CONFIG_PHONET is not set 254# CONFIG_PHONET is not set
255# CONFIG_IEEE802154 is not set
219# CONFIG_NET_SCHED is not set 256# CONFIG_NET_SCHED is not set
220# CONFIG_DCB is not set 257# CONFIG_DCB is not set
221 258
@@ -341,7 +378,6 @@ CONFIG_MISC_DEVICES=y
341# CONFIG_SCSI_DMA is not set 378# CONFIG_SCSI_DMA is not set
342# CONFIG_SCSI_NETLINK is not set 379# CONFIG_SCSI_NETLINK is not set
343CONFIG_NETDEVICES=y 380CONFIG_NETDEVICES=y
344CONFIG_COMPAT_NET_DEV_OPS=y
345# CONFIG_DUMMY is not set 381# CONFIG_DUMMY is not set
346# CONFIG_BONDING is not set 382# CONFIG_BONDING is not set
347# CONFIG_MACVLAN is not set 383# CONFIG_MACVLAN is not set
@@ -362,14 +398,11 @@ CONFIG_SMC91X=y
362# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set 398# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
363# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set 399# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
364# CONFIG_B44 is not set 400# CONFIG_B44 is not set
401# CONFIG_KS8842 is not set
402# CONFIG_KS8851_MLL is not set
365# CONFIG_NETDEV_1000 is not set 403# CONFIG_NETDEV_1000 is not set
366# CONFIG_NETDEV_10000 is not set 404# CONFIG_NETDEV_10000 is not set
367 405# CONFIG_WLAN is not set
368#
369# Wireless LAN
370#
371# CONFIG_WLAN_PRE80211 is not set
372# CONFIG_WLAN_80211 is not set
373 406
374# 407#
375# Enable WiMAX (Networking options) to see the WiMAX drivers 408# Enable WiMAX (Networking options) to see the WiMAX drivers
@@ -430,11 +463,15 @@ CONFIG_RTC=y
430# CONFIG_TCG_TPM is not set 463# CONFIG_TCG_TPM is not set
431# CONFIG_I2C is not set 464# CONFIG_I2C is not set
432# CONFIG_SPI is not set 465# CONFIG_SPI is not set
466
467#
468# PPS support
469#
470# CONFIG_PPS is not set
433# CONFIG_W1 is not set 471# CONFIG_W1 is not set
434# CONFIG_POWER_SUPPLY is not set 472# CONFIG_POWER_SUPPLY is not set
435# CONFIG_HWMON is not set 473# CONFIG_HWMON is not set
436# CONFIG_THERMAL is not set 474# CONFIG_THERMAL is not set
437# CONFIG_THERMAL_HWMON is not set
438# CONFIG_WATCHDOG is not set 475# CONFIG_WATCHDOG is not set
439CONFIG_SSB_POSSIBLE=y 476CONFIG_SSB_POSSIBLE=y
440 477
@@ -451,22 +488,7 @@ CONFIG_SSB_POSSIBLE=y
451# CONFIG_HTC_PASIC3 is not set 488# CONFIG_HTC_PASIC3 is not set
452# CONFIG_MFD_TMIO is not set 489# CONFIG_MFD_TMIO is not set
453# CONFIG_REGULATOR is not set 490# CONFIG_REGULATOR is not set
454 491# CONFIG_MEDIA_SUPPORT is not set
455#
456# Multimedia devices
457#
458
459#
460# Multimedia core support
461#
462# CONFIG_VIDEO_DEV is not set
463# CONFIG_DVB_CORE is not set
464# CONFIG_VIDEO_MEDIA is not set
465
466#
467# Multimedia drivers
468#
469# CONFIG_DAB is not set
470 492
471# 493#
472# Graphics support 494# Graphics support
@@ -490,11 +512,17 @@ CONFIG_SSB_POSSIBLE=y
490# CONFIG_DMADEVICES is not set 512# CONFIG_DMADEVICES is not set
491# CONFIG_AUXDISPLAY is not set 513# CONFIG_AUXDISPLAY is not set
492# CONFIG_UIO is not set 514# CONFIG_UIO is not set
515
516#
517# TI VLYNQ
518#
493# CONFIG_STAGING is not set 519# CONFIG_STAGING is not set
494 520
495# 521#
496# File systems 522# File systems
497# 523#
524CONFIG_FILE_LOCKING=y
525CONFIG_FSNOTIFY=y
498CONFIG_DNOTIFY=y 526CONFIG_DNOTIFY=y
499CONFIG_INOTIFY=y 527CONFIG_INOTIFY=y
500CONFIG_INOTIFY_USER=y 528CONFIG_INOTIFY_USER=y
@@ -539,6 +567,7 @@ CONFIG_NFS_V3=y
539# CONFIG_NFS_V3_ACL is not set 567# CONFIG_NFS_V3_ACL is not set
540# CONFIG_NFS_V4 is not set 568# CONFIG_NFS_V4 is not set
541CONFIG_ROOT_NFS=y 569CONFIG_ROOT_NFS=y
570# CONFIG_NFSD is not set
542CONFIG_LOCKD=y 571CONFIG_LOCKD=y
543CONFIG_LOCKD_V4=y 572CONFIG_LOCKD_V4=y
544CONFIG_NFS_COMMON=y 573CONFIG_NFS_COMMON=y
@@ -561,13 +590,13 @@ CONFIG_ENABLE_WARN_DEPRECATED=y
561CONFIG_ENABLE_MUST_CHECK=y 590CONFIG_ENABLE_MUST_CHECK=y
562CONFIG_FRAME_WARN=1024 591CONFIG_FRAME_WARN=1024
563CONFIG_MAGIC_SYSRQ=y 592CONFIG_MAGIC_SYSRQ=y
593CONFIG_STRIP_ASM_SYMS=y
564# CONFIG_UNUSED_SYMBOLS is not set 594# CONFIG_UNUSED_SYMBOLS is not set
565# CONFIG_DEBUG_FS is not set 595# CONFIG_DEBUG_FS is not set
566# CONFIG_HEADERS_CHECK is not set 596# CONFIG_HEADERS_CHECK is not set
567# CONFIG_DEBUG_KERNEL is not set 597# CONFIG_DEBUG_KERNEL is not set
568# CONFIG_DEBUG_BUGVERBOSE is not set 598CONFIG_DEBUG_BUGVERBOSE=y
569# CONFIG_DEBUG_MEMORY_INIT is not set 599# CONFIG_DEBUG_MEMORY_INIT is not set
570# CONFIG_RCU_CPU_STALL_DETECTOR is not set
571# CONFIG_SYSCTL_SYSCALL_CHECK is not set 600# CONFIG_SYSCTL_SYSCALL_CHECK is not set
572# CONFIG_SAMPLES is not set 601# CONFIG_SAMPLES is not set
573 602
@@ -577,7 +606,11 @@ CONFIG_MAGIC_SYSRQ=y
577# CONFIG_KEYS is not set 606# CONFIG_KEYS is not set
578# CONFIG_SECURITY is not set 607# CONFIG_SECURITY is not set
579# CONFIG_SECURITYFS is not set 608# CONFIG_SECURITYFS is not set
580# CONFIG_SECURITY_FILE_CAPABILITIES is not set 609# CONFIG_DEFAULT_SECURITY_SELINUX is not set
610# CONFIG_DEFAULT_SECURITY_SMACK is not set
611# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
612CONFIG_DEFAULT_SECURITY_DAC=y
613CONFIG_DEFAULT_SECURITY=""
581# CONFIG_CRYPTO is not set 614# CONFIG_CRYPTO is not set
582# CONFIG_BINARY_PRINTF is not set 615# CONFIG_BINARY_PRINTF is not set
583 616
diff --git a/arch/mn10300/include/asm/asm-offsets.h b/arch/mn10300/include/asm/asm-offsets.h
new file mode 100644
index 000000000000..d370ee36a182
--- /dev/null
+++ b/arch/mn10300/include/asm/asm-offsets.h
@@ -0,0 +1 @@
#include <generated/asm-offsets.h>
diff --git a/arch/mn10300/include/asm/bitops.h b/arch/mn10300/include/asm/bitops.h
index 0b610f482abb..f49ac49e09ad 100644
--- a/arch/mn10300/include/asm/bitops.h
+++ b/arch/mn10300/include/asm/bitops.h
@@ -165,7 +165,7 @@ static inline __attribute__((const))
165unsigned long __ffs(unsigned long x) 165unsigned long __ffs(unsigned long x)
166{ 166{
167 int bit; 167 int bit;
168 asm("bsch %2,%0" : "=r"(bit) : "0"(0), "r"(x & -x)); 168 asm("bsch %2,%0" : "=r"(bit) : "0"(0), "r"(x & -x) : "cc");
169 return bit; 169 return bit;
170} 170}
171 171
@@ -177,7 +177,7 @@ static inline __attribute__((const))
177int __ilog2_u32(u32 n) 177int __ilog2_u32(u32 n)
178{ 178{
179 int bit; 179 int bit;
180 asm("bsch %2,%0" : "=r"(bit) : "0"(0), "r"(n)); 180 asm("bsch %2,%0" : "=r"(bit) : "0"(0), "r"(n) : "cc");
181 return bit; 181 return bit;
182} 182}
183 183
diff --git a/arch/mn10300/include/asm/cacheflush.h b/arch/mn10300/include/asm/cacheflush.h
index 1a55d61f0d06..29e692f7f030 100644
--- a/arch/mn10300/include/asm/cacheflush.h
+++ b/arch/mn10300/include/asm/cacheflush.h
@@ -26,6 +26,7 @@
26#define flush_cache_page(vma, vmaddr, pfn) do {} while (0) 26#define flush_cache_page(vma, vmaddr, pfn) do {} while (0)
27#define flush_cache_vmap(start, end) do {} while (0) 27#define flush_cache_vmap(start, end) do {} while (0)
28#define flush_cache_vunmap(start, end) do {} while (0) 28#define flush_cache_vunmap(start, end) do {} while (0)
29#define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 0
29#define flush_dcache_page(page) do {} while (0) 30#define flush_dcache_page(page) do {} while (0)
30#define flush_dcache_mmap_lock(mapping) do {} while (0) 31#define flush_dcache_mmap_lock(mapping) do {} while (0)
31#define flush_dcache_mmap_unlock(mapping) do {} while (0) 32#define flush_dcache_mmap_unlock(mapping) do {} while (0)
diff --git a/arch/mn10300/include/asm/div64.h b/arch/mn10300/include/asm/div64.h
index 3a8329b3e869..34dcb8e68309 100644
--- a/arch/mn10300/include/asm/div64.h
+++ b/arch/mn10300/include/asm/div64.h
@@ -72,6 +72,7 @@ unsigned __muldiv64u(unsigned val, unsigned mult, unsigned div)
72 * MDR = MDR:val%div */ 72 * MDR = MDR:val%div */
73 : "=r"(result) 73 : "=r"(result)
74 : "0"(val), "ir"(mult), "r"(div) 74 : "0"(val), "ir"(mult), "r"(div)
75 : "cc"
75 ); 76 );
76 77
77 return result; 78 return result;
@@ -92,6 +93,7 @@ signed __muldiv64s(signed val, signed mult, signed div)
92 * MDR = MDR:val%div */ 93 * MDR = MDR:val%div */
93 : "=r"(result) 94 : "=r"(result)
94 : "0"(val), "ir"(mult), "r"(div) 95 : "0"(val), "ir"(mult), "r"(div)
96 : "cc"
95 ); 97 );
96 98
97 return result; 99 return result;
diff --git a/arch/mn10300/include/asm/dma-mapping.h b/arch/mn10300/include/asm/dma-mapping.h
index ccae8f6c6326..4ed1522b38d2 100644
--- a/arch/mn10300/include/asm/dma-mapping.h
+++ b/arch/mn10300/include/asm/dma-mapping.h
@@ -17,6 +17,11 @@
17#include <asm/cache.h> 17#include <asm/cache.h>
18#include <asm/io.h> 18#include <asm/io.h>
19 19
20/*
21 * See Documentation/DMA-API.txt for the description of how the
22 * following DMA API should work.
23 */
24
20extern void *dma_alloc_coherent(struct device *dev, size_t size, 25extern void *dma_alloc_coherent(struct device *dev, size_t size,
21 dma_addr_t *dma_handle, int flag); 26 dma_addr_t *dma_handle, int flag);
22 27
@@ -26,13 +31,6 @@ extern void dma_free_coherent(struct device *dev, size_t size,
26#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent((d), (s), (h), (f)) 31#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent((d), (s), (h), (f))
27#define dma_free_noncoherent(d, s, v, h) dma_free_coherent((d), (s), (v), (h)) 32#define dma_free_noncoherent(d, s, v, h) dma_free_coherent((d), (s), (v), (h))
28 33
29/*
30 * Map a single buffer of the indicated size for DMA in streaming mode. The
31 * 32-bit bus address to use is returned.
32 *
33 * Once the device is given the dma address, the device owns this memory until
34 * either pci_unmap_single or pci_dma_sync_single is performed.
35 */
36static inline 34static inline
37dma_addr_t dma_map_single(struct device *dev, void *ptr, size_t size, 35dma_addr_t dma_map_single(struct device *dev, void *ptr, size_t size,
38 enum dma_data_direction direction) 36 enum dma_data_direction direction)
@@ -42,14 +40,6 @@ dma_addr_t dma_map_single(struct device *dev, void *ptr, size_t size,
42 return virt_to_bus(ptr); 40 return virt_to_bus(ptr);
43} 41}
44 42
45/*
46 * Unmap a single streaming mode DMA translation. The dma_addr and size must
47 * match what was provided for in a previous pci_map_single call. All other
48 * usages are undefined.
49 *
50 * After this call, reads by the cpu to the buffer are guarenteed to see
51 * whatever the device wrote there.
52 */
53static inline 43static inline
54void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, 44void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size,
55 enum dma_data_direction direction) 45 enum dma_data_direction direction)
@@ -57,20 +47,6 @@ void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size,
57 BUG_ON(direction == DMA_NONE); 47 BUG_ON(direction == DMA_NONE);
58} 48}
59 49
60/*
61 * Map a set of buffers described by scatterlist in streaming mode for DMA.
62 * This is the scather-gather version of the above pci_map_single interface.
63 * Here the scatter gather list elements are each tagged with the appropriate
64 * dma address and length. They are obtained via sg_dma_{address,length}(SG).
65 *
66 * NOTE: An implementation may be able to use a smaller number of DMA
67 * address/length pairs than there are SG table elements. (for example
68 * via virtual mapping capabilities) The routine returns the number of
69 * addr/length pairs actually used, at most nents.
70 *
71 * Device ownership issues as mentioned above for pci_map_single are the same
72 * here.
73 */
74static inline 50static inline
75int dma_map_sg(struct device *dev, struct scatterlist *sglist, int nents, 51int dma_map_sg(struct device *dev, struct scatterlist *sglist, int nents,
76 enum dma_data_direction direction) 52 enum dma_data_direction direction)
@@ -91,11 +67,6 @@ int dma_map_sg(struct device *dev, struct scatterlist *sglist, int nents,
91 return nents; 67 return nents;
92} 68}
93 69
94/*
95 * Unmap a set of streaming mode DMA translations.
96 * Again, cpu read rules concerning calls here are the same as for
97 * pci_unmap_single() above.
98 */
99static inline 70static inline
100void dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries, 71void dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries,
101 enum dma_data_direction direction) 72 enum dma_data_direction direction)
@@ -103,10 +74,6 @@ void dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries,
103 BUG_ON(!valid_dma_direction(direction)); 74 BUG_ON(!valid_dma_direction(direction));
104} 75}
105 76
106/*
107 * pci_{map,unmap}_single_page maps a kernel page to a dma_addr_t. identical
108 * to pci_map_single, but takes a struct page instead of a virtual address
109 */
110static inline 77static inline
111dma_addr_t dma_map_page(struct device *dev, struct page *page, 78dma_addr_t dma_map_page(struct device *dev, struct page *page,
112 unsigned long offset, size_t size, 79 unsigned long offset, size_t size,
@@ -123,15 +90,6 @@ void dma_unmap_page(struct device *dev, dma_addr_t dma_address, size_t size,
123 BUG_ON(direction == DMA_NONE); 90 BUG_ON(direction == DMA_NONE);
124} 91}
125 92
126/*
127 * Make physical memory consistent for a single streaming mode DMA translation
128 * after a transfer.
129 *
130 * If you perform a pci_map_single() but wish to interrogate the buffer using
131 * the cpu, yet do not wish to teardown the PCI dma mapping, you must call this
132 * function before doing so. At the next point you give the PCI dma address
133 * back to the card, the device again owns the buffer.
134 */
135static inline 93static inline
136void dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_handle, 94void dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_handle,
137 size_t size, enum dma_data_direction direction) 95 size_t size, enum dma_data_direction direction)
@@ -161,13 +119,6 @@ dma_sync_single_range_for_device(struct device *dev, dma_addr_t dma_handle,
161} 119}
162 120
163 121
164/*
165 * Make physical memory consistent for a set of streaming mode DMA translations
166 * after a transfer.
167 *
168 * The same as pci_dma_sync_single but for a scatter-gather list, same rules
169 * and usage.
170 */
171static inline 122static inline
172void dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, 123void dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg,
173 int nelems, enum dma_data_direction direction) 124 int nelems, enum dma_data_direction direction)
@@ -187,12 +138,6 @@ int dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
187 return 0; 138 return 0;
188} 139}
189 140
190/*
191 * Return whether the given PCI device DMA address mask can be supported
192 * properly. For example, if your device can only drive the low 24-bits during
193 * PCI bus mastering, then you would pass 0x00ffffff as the mask to this
194 * function.
195 */
196static inline 141static inline
197int dma_supported(struct device *dev, u64 mask) 142int dma_supported(struct device *dev, u64 mask)
198{ 143{
diff --git a/arch/mn10300/include/asm/elf.h b/arch/mn10300/include/asm/elf.h
index 75a70aa9fd6f..e5fa97cd9a14 100644
--- a/arch/mn10300/include/asm/elf.h
+++ b/arch/mn10300/include/asm/elf.h
@@ -77,7 +77,6 @@ do { \
77 _ur->a1 = 0; _ur->a0 = 0; _ur->d1 = 0; _ur->d0 = 0; \ 77 _ur->a1 = 0; _ur->a0 = 0; _ur->d1 = 0; _ur->d0 = 0; \
78} while (0) 78} while (0)
79 79
80#define USE_ELF_CORE_DUMP
81#define CORE_DUMP_USE_REGSET 80#define CORE_DUMP_USE_REGSET
82#define ELF_EXEC_PAGESIZE 4096 81#define ELF_EXEC_PAGESIZE 4096
83 82
diff --git a/arch/mn10300/include/asm/mman.h b/arch/mn10300/include/asm/mman.h
index 8eebf89f5ab1..db5c53da73ce 100644
--- a/arch/mn10300/include/asm/mman.h
+++ b/arch/mn10300/include/asm/mman.h
@@ -1 +1,6 @@
1#include <asm-generic/mman.h> 1#include <asm-generic/mman.h>
2
3#define MIN_MAP_ADDR PAGE_SIZE /* minimum fixed mmap address */
4
5#define arch_mmap_check(addr, len, flags) \
6 (((flags) & MAP_FIXED && (addr) < MIN_MAP_ADDR) ? -EINVAL : 0)
diff --git a/arch/mn10300/include/asm/pgtable.h b/arch/mn10300/include/asm/pgtable.h
index 6dc30fc827c4..16d88577f3e0 100644
--- a/arch/mn10300/include/asm/pgtable.h
+++ b/arch/mn10300/include/asm/pgtable.h
@@ -466,7 +466,7 @@ static inline int set_kernel_exec(unsigned long vaddr, int enable)
466 * the kernel page tables containing the necessary information by tlb-mn10300.S 466 * the kernel page tables containing the necessary information by tlb-mn10300.S
467 */ 467 */
468extern void update_mmu_cache(struct vm_area_struct *vma, 468extern void update_mmu_cache(struct vm_area_struct *vma,
469 unsigned long address, pte_t pte); 469 unsigned long address, pte_t *ptep);
470 470
471#endif /* !__ASSEMBLY__ */ 471#endif /* !__ASSEMBLY__ */
472 472
diff --git a/arch/mn10300/include/asm/ptrace.h b/arch/mn10300/include/asm/ptrace.h
index 1b0ba5e182b0..7c2e911052b6 100644
--- a/arch/mn10300/include/asm/ptrace.h
+++ b/arch/mn10300/include/asm/ptrace.h
@@ -99,8 +99,6 @@ struct task_struct;
99extern void show_regs(struct pt_regs *); 99extern void show_regs(struct pt_regs *);
100 100
101#define arch_has_single_step() (1) 101#define arch_has_single_step() (1)
102extern void user_enable_single_step(struct task_struct *);
103extern void user_disable_single_step(struct task_struct *);
104 102
105#endif /* !__ASSEMBLY */ 103#endif /* !__ASSEMBLY */
106 104
diff --git a/arch/mn10300/include/asm/socket.h b/arch/mn10300/include/asm/socket.h
index 4df75af29d76..4e60c4281288 100644
--- a/arch/mn10300/include/asm/socket.h
+++ b/arch/mn10300/include/asm/socket.h
@@ -60,4 +60,6 @@
60#define SO_PROTOCOL 38 60#define SO_PROTOCOL 38
61#define SO_DOMAIN 39 61#define SO_DOMAIN 39
62 62
63#define SO_RXQ_OVFL 40
64
63#endif /* _ASM_SOCKET_H */ 65#endif /* _ASM_SOCKET_H */
diff --git a/arch/mn10300/include/asm/system.h b/arch/mn10300/include/asm/system.h
index 8214fb7e7fe4..3636c054dcd5 100644
--- a/arch/mn10300/include/asm/system.h
+++ b/arch/mn10300/include/asm/system.h
@@ -143,6 +143,7 @@ do { \
143 " mov %0,epsw \n" \ 143 " mov %0,epsw \n" \
144 : "=&d"(tmp) \ 144 : "=&d"(tmp) \
145 : "i"(~EPSW_IM), "r"(__mn10300_irq_enabled_epsw) \ 145 : "i"(~EPSW_IM), "r"(__mn10300_irq_enabled_epsw) \
146 : "cc" \
146 ); \ 147 ); \
147} while (0) 148} while (0)
148 149
diff --git a/arch/mn10300/include/asm/tlbflush.h b/arch/mn10300/include/asm/tlbflush.h
index e0239865abcb..1a7e29281c5d 100644
--- a/arch/mn10300/include/asm/tlbflush.h
+++ b/arch/mn10300/include/asm/tlbflush.h
@@ -22,7 +22,7 @@ do { \
22 " mov %0,%1 \n" \ 22 " mov %0,%1 \n" \
23 : "=d"(w) \ 23 : "=d"(w) \
24 : "m"(MMUCTR), "i"(MMUCTR_IIV|MMUCTR_DIV) \ 24 : "m"(MMUCTR), "i"(MMUCTR_IIV|MMUCTR_DIV) \
25 : "memory" \ 25 : "cc", "memory" \
26 ); \ 26 ); \
27} while (0) 27} while (0)
28 28
diff --git a/arch/mn10300/include/asm/uaccess.h b/arch/mn10300/include/asm/uaccess.h
index 167e10ff06d9..197a7af3dd8a 100644
--- a/arch/mn10300/include/asm/uaccess.h
+++ b/arch/mn10300/include/asm/uaccess.h
@@ -316,7 +316,7 @@ do { \
316 " .previous\n" \ 316 " .previous\n" \
317 : "=a"(__from), "=a"(__to), "=r"(size), "=&r"(w)\ 317 : "=a"(__from), "=a"(__to), "=r"(size), "=&r"(w)\
318 : "0"(__from), "1"(__to), "2"(size) \ 318 : "0"(__from), "1"(__to), "2"(size) \
319 : "memory"); \ 319 : "cc", "memory"); \
320 } \ 320 } \
321} while (0) 321} while (0)
322 322
@@ -352,7 +352,7 @@ do { \
352 " .previous\n" \ 352 " .previous\n" \
353 : "=a"(__from), "=a"(__to), "=r"(size), "=&r"(w)\ 353 : "=a"(__from), "=a"(__to), "=r"(size), "=&r"(w)\
354 : "0"(__from), "1"(__to), "2"(size) \ 354 : "0"(__from), "1"(__to), "2"(size) \
355 : "memory"); \ 355 : "cc", "memory"); \
356 } \ 356 } \
357} while (0) 357} while (0)
358 358
diff --git a/arch/mn10300/include/asm/unistd.h b/arch/mn10300/include/asm/unistd.h
index 2a983931c11f..9d056f515929 100644
--- a/arch/mn10300/include/asm/unistd.h
+++ b/arch/mn10300/include/asm/unistd.h
@@ -348,10 +348,11 @@
348#define __NR_pwritev 335 348#define __NR_pwritev 335
349#define __NR_rt_tgsigqueueinfo 336 349#define __NR_rt_tgsigqueueinfo 336
350#define __NR_perf_event_open 337 350#define __NR_perf_event_open 337
351#define __NR_recvmmsg 338
351 352
352#ifdef __KERNEL__ 353#ifdef __KERNEL__
353 354
354#define NR_syscalls 338 355#define NR_syscalls 339
355 356
356/* 357/*
357 * specify the deprecated syscalls we want to support on this arch 358 * specify the deprecated syscalls we want to support on this arch
@@ -362,6 +363,7 @@
362#define __ARCH_WANT_STAT64 363#define __ARCH_WANT_STAT64
363#define __ARCH_WANT_SYS_ALARM 364#define __ARCH_WANT_SYS_ALARM
364#define __ARCH_WANT_SYS_GETHOSTNAME 365#define __ARCH_WANT_SYS_GETHOSTNAME
366#define __ARCH_WANT_SYS_IPC
365#define __ARCH_WANT_SYS_PAUSE 367#define __ARCH_WANT_SYS_PAUSE
366#define __ARCH_WANT_SYS_SGETMASK 368#define __ARCH_WANT_SYS_SGETMASK
367#define __ARCH_WANT_SYS_SIGNAL 369#define __ARCH_WANT_SYS_SIGNAL
@@ -374,6 +376,7 @@
374#define __ARCH_WANT_SYS_LLSEEK 376#define __ARCH_WANT_SYS_LLSEEK
375#define __ARCH_WANT_SYS_NICE 377#define __ARCH_WANT_SYS_NICE
376#define __ARCH_WANT_SYS_OLD_GETRLIMIT 378#define __ARCH_WANT_SYS_OLD_GETRLIMIT
379#define __ARCH_WANT_SYS_OLD_SELECT
377#define __ARCH_WANT_SYS_OLDUMOUNT 380#define __ARCH_WANT_SYS_OLDUMOUNT
378#define __ARCH_WANT_SYS_SIGPENDING 381#define __ARCH_WANT_SYS_SIGPENDING
379#define __ARCH_WANT_SYS_SIGPROCMASK 382#define __ARCH_WANT_SYS_SIGPROCMASK
diff --git a/arch/mn10300/kernel/entry.S b/arch/mn10300/kernel/entry.S
index a94e7ea3faa6..d9ed5a15c547 100644
--- a/arch/mn10300/kernel/entry.S
+++ b/arch/mn10300/kernel/entry.S
@@ -468,7 +468,7 @@ ENTRY(sys_call_table)
468 .long sys_settimeofday 468 .long sys_settimeofday
469 .long sys_getgroups16 /* 80 */ 469 .long sys_getgroups16 /* 80 */
470 .long sys_setgroups16 470 .long sys_setgroups16
471 .long old_select 471 .long sys_old_select
472 .long sys_symlink 472 .long sys_symlink
473 .long sys_lstat 473 .long sys_lstat
474 .long sys_readlink /* 85 */ 474 .long sys_readlink /* 85 */
@@ -578,7 +578,7 @@ ENTRY(sys_call_table)
578 .long sys_ni_syscall /* reserved for streams2 */ 578 .long sys_ni_syscall /* reserved for streams2 */
579 .long sys_vfork /* 190 */ 579 .long sys_vfork /* 190 */
580 .long sys_getrlimit 580 .long sys_getrlimit
581 .long sys_mmap2 581 .long sys_mmap_pgoff
582 .long sys_truncate64 582 .long sys_truncate64
583 .long sys_ftruncate64 583 .long sys_ftruncate64
584 .long sys_stat64 /* 195 */ 584 .long sys_stat64 /* 195 */
@@ -724,6 +724,7 @@ ENTRY(sys_call_table)
724 .long sys_pwritev /* 335 */ 724 .long sys_pwritev /* 335 */
725 .long sys_rt_tgsigqueueinfo 725 .long sys_rt_tgsigqueueinfo
726 .long sys_perf_event_open 726 .long sys_perf_event_open
727 .long sys_recvmmsg
727 728
728 729
729nr_syscalls=(.-sys_call_table)/4 730nr_syscalls=(.-sys_call_table)/4
diff --git a/arch/mn10300/kernel/irq.c b/arch/mn10300/kernel/irq.c
index 4c3c58ef5cda..e2d5ed891f37 100644
--- a/arch/mn10300/kernel/irq.c
+++ b/arch/mn10300/kernel/irq.c
@@ -215,7 +215,7 @@ int show_interrupts(struct seq_file *p, void *v)
215 215
216 /* display information rows, one per active CPU */ 216 /* display information rows, one per active CPU */
217 case 1 ... NR_IRQS - 1: 217 case 1 ... NR_IRQS - 1:
218 spin_lock_irqsave(&irq_desc[i].lock, flags); 218 raw_spin_lock_irqsave(&irq_desc[i].lock, flags);
219 219
220 action = irq_desc[i].action; 220 action = irq_desc[i].action;
221 if (action) { 221 if (action) {
@@ -235,7 +235,7 @@ int show_interrupts(struct seq_file *p, void *v)
235 seq_putc(p, '\n'); 235 seq_putc(p, '\n');
236 } 236 }
237 237
238 spin_unlock_irqrestore(&irq_desc[i].lock, flags); 238 raw_spin_unlock_irqrestore(&irq_desc[i].lock, flags);
239 break; 239 break;
240 240
241 /* polish off with NMI and error counters */ 241 /* polish off with NMI and error counters */
diff --git a/arch/mn10300/kernel/kprobes.c b/arch/mn10300/kernel/kprobes.c
index dacafab00eb2..67e6389d625a 100644
--- a/arch/mn10300/kernel/kprobes.c
+++ b/arch/mn10300/kernel/kprobes.c
@@ -31,13 +31,13 @@ const int kretprobe_blacklist_size = ARRAY_SIZE(kretprobe_blacklist);
31#define KPROBE_HIT_ACTIVE 0x00000001 31#define KPROBE_HIT_ACTIVE 0x00000001
32#define KPROBE_HIT_SS 0x00000002 32#define KPROBE_HIT_SS 0x00000002
33 33
34static struct kprobe *current_kprobe; 34static struct kprobe *cur_kprobe;
35static unsigned long current_kprobe_orig_pc; 35static unsigned long cur_kprobe_orig_pc;
36static unsigned long current_kprobe_next_pc; 36static unsigned long cur_kprobe_next_pc;
37static int current_kprobe_ss_flags; 37static int cur_kprobe_ss_flags;
38static unsigned long kprobe_status; 38static unsigned long kprobe_status;
39static kprobe_opcode_t current_kprobe_ss_buf[MAX_INSN_SIZE + 2]; 39static kprobe_opcode_t cur_kprobe_ss_buf[MAX_INSN_SIZE + 2];
40static unsigned long current_kprobe_bp_addr; 40static unsigned long cur_kprobe_bp_addr;
41 41
42DEFINE_PER_CPU(struct kprobe *, current_kprobe) = NULL; 42DEFINE_PER_CPU(struct kprobe *, current_kprobe) = NULL;
43 43
@@ -399,26 +399,25 @@ void __kprobes prepare_singlestep(struct kprobe *p, struct pt_regs *regs)
399{ 399{
400 unsigned long nextpc; 400 unsigned long nextpc;
401 401
402 current_kprobe_orig_pc = regs->pc; 402 cur_kprobe_orig_pc = regs->pc;
403 memcpy(current_kprobe_ss_buf, &p->ainsn.insn[0], MAX_INSN_SIZE); 403 memcpy(cur_kprobe_ss_buf, &p->ainsn.insn[0], MAX_INSN_SIZE);
404 regs->pc = (unsigned long) current_kprobe_ss_buf; 404 regs->pc = (unsigned long) cur_kprobe_ss_buf;
405 405
406 nextpc = find_nextpc(regs, &current_kprobe_ss_flags); 406 nextpc = find_nextpc(regs, &cur_kprobe_ss_flags);
407 if (current_kprobe_ss_flags & SINGLESTEP_PCREL) 407 if (cur_kprobe_ss_flags & SINGLESTEP_PCREL)
408 current_kprobe_next_pc = 408 cur_kprobe_next_pc = cur_kprobe_orig_pc + (nextpc - regs->pc);
409 current_kprobe_orig_pc + (nextpc - regs->pc);
410 else 409 else
411 current_kprobe_next_pc = nextpc; 410 cur_kprobe_next_pc = nextpc;
412 411
413 /* branching instructions need special handling */ 412 /* branching instructions need special handling */
414 if (current_kprobe_ss_flags & SINGLESTEP_BRANCH) 413 if (cur_kprobe_ss_flags & SINGLESTEP_BRANCH)
415 nextpc = singlestep_branch_setup(regs); 414 nextpc = singlestep_branch_setup(regs);
416 415
417 current_kprobe_bp_addr = nextpc; 416 cur_kprobe_bp_addr = nextpc;
418 417
419 *(u8 *) nextpc = BREAKPOINT_INSTRUCTION; 418 *(u8 *) nextpc = BREAKPOINT_INSTRUCTION;
420 mn10300_dcache_flush_range2((unsigned) current_kprobe_ss_buf, 419 mn10300_dcache_flush_range2((unsigned) cur_kprobe_ss_buf,
421 sizeof(current_kprobe_ss_buf)); 420 sizeof(cur_kprobe_ss_buf));
422 mn10300_icache_inv(); 421 mn10300_icache_inv();
423} 422}
424 423
@@ -440,7 +439,7 @@ static inline int __kprobes kprobe_handler(struct pt_regs *regs)
440 disarm_kprobe(p, regs); 439 disarm_kprobe(p, regs);
441 ret = 1; 440 ret = 1;
442 } else { 441 } else {
443 p = current_kprobe; 442 p = cur_kprobe;
444 if (p->break_handler && p->break_handler(p, regs)) 443 if (p->break_handler && p->break_handler(p, regs))
445 goto ss_probe; 444 goto ss_probe;
446 } 445 }
@@ -464,7 +463,7 @@ static inline int __kprobes kprobe_handler(struct pt_regs *regs)
464 } 463 }
465 464
466 kprobe_status = KPROBE_HIT_ACTIVE; 465 kprobe_status = KPROBE_HIT_ACTIVE;
467 current_kprobe = p; 466 cur_kprobe = p;
468 if (p->pre_handler(p, regs)) { 467 if (p->pre_handler(p, regs)) {
469 /* handler has already set things up, so skip ss setup */ 468 /* handler has already set things up, so skip ss setup */
470 return 1; 469 return 1;
@@ -491,8 +490,8 @@ no_kprobe:
491static void __kprobes resume_execution(struct kprobe *p, struct pt_regs *regs) 490static void __kprobes resume_execution(struct kprobe *p, struct pt_regs *regs)
492{ 491{
493 /* we may need to fixup regs/stack after singlestepping a call insn */ 492 /* we may need to fixup regs/stack after singlestepping a call insn */
494 if (current_kprobe_ss_flags & SINGLESTEP_BRANCH) { 493 if (cur_kprobe_ss_flags & SINGLESTEP_BRANCH) {
495 regs->pc = current_kprobe_orig_pc; 494 regs->pc = cur_kprobe_orig_pc;
496 switch (p->ainsn.insn[0]) { 495 switch (p->ainsn.insn[0]) {
497 case 0xcd: /* CALL (d16,PC) */ 496 case 0xcd: /* CALL (d16,PC) */
498 *(unsigned *) regs->sp = regs->mdr = regs->pc + 5; 497 *(unsigned *) regs->sp = regs->mdr = regs->pc + 5;
@@ -523,8 +522,8 @@ static void __kprobes resume_execution(struct kprobe *p, struct pt_regs *regs)
523 } 522 }
524 } 523 }
525 524
526 regs->pc = current_kprobe_next_pc; 525 regs->pc = cur_kprobe_next_pc;
527 current_kprobe_bp_addr = 0; 526 cur_kprobe_bp_addr = 0;
528} 527}
529 528
530static inline int __kprobes post_kprobe_handler(struct pt_regs *regs) 529static inline int __kprobes post_kprobe_handler(struct pt_regs *regs)
@@ -532,10 +531,10 @@ static inline int __kprobes post_kprobe_handler(struct pt_regs *regs)
532 if (!kprobe_running()) 531 if (!kprobe_running())
533 return 0; 532 return 0;
534 533
535 if (current_kprobe->post_handler) 534 if (cur_kprobe->post_handler)
536 current_kprobe->post_handler(current_kprobe, regs, 0); 535 cur_kprobe->post_handler(cur_kprobe, regs, 0);
537 536
538 resume_execution(current_kprobe, regs); 537 resume_execution(cur_kprobe, regs);
539 reset_current_kprobe(); 538 reset_current_kprobe();
540 preempt_enable_no_resched(); 539 preempt_enable_no_resched();
541 return 1; 540 return 1;
@@ -545,12 +544,12 @@ static inline int __kprobes post_kprobe_handler(struct pt_regs *regs)
545static inline 544static inline
546int __kprobes kprobe_fault_handler(struct pt_regs *regs, int trapnr) 545int __kprobes kprobe_fault_handler(struct pt_regs *regs, int trapnr)
547{ 546{
548 if (current_kprobe->fault_handler && 547 if (cur_kprobe->fault_handler &&
549 current_kprobe->fault_handler(current_kprobe, regs, trapnr)) 548 cur_kprobe->fault_handler(cur_kprobe, regs, trapnr))
550 return 1; 549 return 1;
551 550
552 if (kprobe_status & KPROBE_HIT_SS) { 551 if (kprobe_status & KPROBE_HIT_SS) {
553 resume_execution(current_kprobe, regs); 552 resume_execution(cur_kprobe, regs);
554 reset_current_kprobe(); 553 reset_current_kprobe();
555 preempt_enable_no_resched(); 554 preempt_enable_no_resched();
556 } 555 }
@@ -567,7 +566,7 @@ int __kprobes kprobe_exceptions_notify(struct notifier_block *self,
567 566
568 switch (val) { 567 switch (val) {
569 case DIE_BREAKPOINT: 568 case DIE_BREAKPOINT:
570 if (current_kprobe_bp_addr != args->regs->pc) { 569 if (cur_kprobe_bp_addr != args->regs->pc) {
571 if (kprobe_handler(args->regs)) 570 if (kprobe_handler(args->regs))
572 return NOTIFY_STOP; 571 return NOTIFY_STOP;
573 } else { 572 } else {
diff --git a/arch/mn10300/kernel/mn10300-serial.c b/arch/mn10300/kernel/mn10300-serial.c
index 229b710fc5d5..ef34d5a0f8bd 100644
--- a/arch/mn10300/kernel/mn10300-serial.c
+++ b/arch/mn10300/kernel/mn10300-serial.c
@@ -380,7 +380,8 @@ static int mask_test_and_clear(volatile u8 *ptr, u8 mask)
380 u32 epsw; 380 u32 epsw;
381 asm volatile(" bclr %1,(%2) \n" 381 asm volatile(" bclr %1,(%2) \n"
382 " mov epsw,%0 \n" 382 " mov epsw,%0 \n"
383 : "=d"(epsw) : "d"(mask), "a"(ptr)); 383 : "=d"(epsw) : "d"(mask), "a"(ptr)
384 : "cc", "memory");
384 return !(epsw & EPSW_FLAG_Z); 385 return !(epsw & EPSW_FLAG_Z);
385} 386}
386 387
diff --git a/arch/mn10300/kernel/process.c b/arch/mn10300/kernel/process.c
index 892cce82867e..82b817c7f7b6 100644
--- a/arch/mn10300/kernel/process.c
+++ b/arch/mn10300/kernel/process.c
@@ -18,7 +18,6 @@
18#include <linux/stddef.h> 18#include <linux/stddef.h>
19#include <linux/unistd.h> 19#include <linux/unistd.h>
20#include <linux/ptrace.h> 20#include <linux/ptrace.h>
21#include <linux/slab.h>
22#include <linux/user.h> 21#include <linux/user.h>
23#include <linux/interrupt.h> 22#include <linux/interrupt.h>
24#include <linux/delay.h> 23#include <linux/delay.h>
@@ -26,6 +25,7 @@
26#include <linux/percpu.h> 25#include <linux/percpu.h>
27#include <linux/err.h> 26#include <linux/err.h>
28#include <linux/fs.h> 27#include <linux/fs.h>
28#include <linux/slab.h>
29#include <asm/uaccess.h> 29#include <asm/uaccess.h>
30#include <asm/pgtable.h> 30#include <asm/pgtable.h>
31#include <asm/system.h> 31#include <asm/system.h>
@@ -275,16 +275,12 @@ asmlinkage long sys_execve(char __user *name,
275 char *filename; 275 char *filename;
276 int error; 276 int error;
277 277
278 lock_kernel();
279
280 filename = getname(name); 278 filename = getname(name);
281 error = PTR_ERR(filename); 279 error = PTR_ERR(filename);
282 if (!IS_ERR(filename)) { 280 if (IS_ERR(filename))
283 error = do_execve(filename, argv, envp, __frame); 281 return error;
284 putname(filename); 282 error = do_execve(filename, argv, envp, __frame);
285 } 283 putname(filename);
286
287 unlock_kernel();
288 return error; 284 return error;
289} 285}
290 286
diff --git a/arch/mn10300/kernel/setup.c b/arch/mn10300/kernel/setup.c
index 3f24c298a3af..d464affcba0e 100644
--- a/arch/mn10300/kernel/setup.c
+++ b/arch/mn10300/kernel/setup.c
@@ -15,7 +15,6 @@
15#include <linux/stddef.h> 15#include <linux/stddef.h>
16#include <linux/unistd.h> 16#include <linux/unistd.h>
17#include <linux/ptrace.h> 17#include <linux/ptrace.h>
18#include <linux/slab.h>
19#include <linux/user.h> 18#include <linux/user.h>
20#include <linux/tty.h> 19#include <linux/tty.h>
21#include <linux/ioport.h> 20#include <linux/ioport.h>
diff --git a/arch/mn10300/kernel/signal.c b/arch/mn10300/kernel/signal.c
index a21f43bc68e2..717db14c2cc3 100644
--- a/arch/mn10300/kernel/signal.c
+++ b/arch/mn10300/kernel/signal.c
@@ -264,7 +264,7 @@ static inline void __user *get_sigframe(struct k_sigaction *ka,
264 264
265 /* this is the X/Open sanctioned signal stack switching. */ 265 /* this is the X/Open sanctioned signal stack switching. */
266 if (ka->sa.sa_flags & SA_ONSTACK) { 266 if (ka->sa.sa_flags & SA_ONSTACK) {
267 if (!on_sig_stack(sp)) 267 if (sas_ss_flags(sp) == 0)
268 sp = current->sas_ss_sp + current->sas_ss_size; 268 sp = current->sas_ss_sp + current->sas_ss_size;
269 } 269 }
270 270
diff --git a/arch/mn10300/kernel/sys_mn10300.c b/arch/mn10300/kernel/sys_mn10300.c
index 8ca5af00334c..815f1355fad4 100644
--- a/arch/mn10300/kernel/sys_mn10300.c
+++ b/arch/mn10300/kernel/sys_mn10300.c
@@ -23,151 +23,11 @@
23 23
24#include <asm/uaccess.h> 24#include <asm/uaccess.h>
25 25
26#define MIN_MAP_ADDR PAGE_SIZE /* minimum fixed mmap address */
27
28/*
29 * memory mapping syscall
30 */
31asmlinkage long sys_mmap2(unsigned long addr, unsigned long len,
32 unsigned long prot, unsigned long flags,
33 unsigned long fd, unsigned long pgoff)
34{
35 struct file *file = NULL;
36 long error = -EINVAL;
37
38 flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE);
39
40 if (flags & MAP_FIXED && addr < MIN_MAP_ADDR)
41 goto out;
42
43 error = -EBADF;
44 if (!(flags & MAP_ANONYMOUS)) {
45 file = fget(fd);
46 if (!file)
47 goto out;
48 }
49
50 down_write(&current->mm->mmap_sem);
51 error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff);
52 up_write(&current->mm->mmap_sem);
53
54 if (file)
55 fput(file);
56out:
57 return error;
58}
59
60asmlinkage long old_mmap(unsigned long addr, unsigned long len, 26asmlinkage long old_mmap(unsigned long addr, unsigned long len,
61 unsigned long prot, unsigned long flags, 27 unsigned long prot, unsigned long flags,
62 unsigned long fd, unsigned long offset) 28 unsigned long fd, unsigned long offset)
63{ 29{
64 if (offset & ~PAGE_MASK) 30 if (offset & ~PAGE_MASK)
65 return -EINVAL; 31 return -EINVAL;
66 return sys_mmap2(addr, len, prot, flags, fd, offset >> PAGE_SHIFT); 32 return sys_mmap_pgoff(addr, len, prot, flags, fd, offset >> PAGE_SHIFT);
67}
68
69struct sel_arg_struct {
70 unsigned long n;
71 fd_set *inp;
72 fd_set *outp;
73 fd_set *exp;
74 struct timeval *tvp;
75};
76
77asmlinkage int old_select(struct sel_arg_struct __user *arg)
78{
79 struct sel_arg_struct a;
80
81 if (copy_from_user(&a, arg, sizeof(a)))
82 return -EFAULT;
83 /* sys_select() does the appropriate kernel locking */
84 return sys_select(a.n, a.inp, a.outp, a.exp, a.tvp);
85}
86
87/*
88 * sys_ipc() is the de-multiplexer for the SysV IPC calls..
89 *
90 * This is really horribly ugly.
91 */
92asmlinkage long sys_ipc(uint call, int first, int second,
93 int third, void __user *ptr, long fifth)
94{
95 int version, ret;
96
97 version = call >> 16; /* hack for backward compatibility */
98 call &= 0xffff;
99
100 switch (call) {
101 case SEMOP:
102 return sys_semtimedop(first, (struct sembuf __user *)ptr,
103 second, NULL);
104 case SEMTIMEDOP:
105 return sys_semtimedop(first, (struct sembuf __user *)ptr,
106 second,
107 (const struct timespec __user *)fifth);
108 case SEMGET:
109 return sys_semget(first, second, third);
110 case SEMCTL: {
111 union semun fourth;
112 if (!ptr)
113 return -EINVAL;
114 if (get_user(fourth.__pad, (void __user * __user *) ptr))
115 return -EFAULT;
116 return sys_semctl(first, second, third, fourth);
117 }
118
119 case MSGSND:
120 return sys_msgsnd(first, (struct msgbuf __user *) ptr,
121 second, third);
122 case MSGRCV:
123 switch (version) {
124 case 0: {
125 struct ipc_kludge tmp;
126 if (!ptr)
127 return -EINVAL;
128
129 if (copy_from_user(&tmp,
130 (struct ipc_kludge __user *) ptr,
131 sizeof(tmp)))
132 return -EFAULT;
133 return sys_msgrcv(first, tmp.msgp, second,
134 tmp.msgtyp, third);
135 }
136 default:
137 return sys_msgrcv(first,
138 (struct msgbuf __user *) ptr,
139 second, fifth, third);
140 }
141 case MSGGET:
142 return sys_msgget((key_t) first, second);
143 case MSGCTL:
144 return sys_msgctl(first, second,
145 (struct msqid_ds __user *) ptr);
146
147 case SHMAT:
148 switch (version) {
149 default: {
150 ulong raddr;
151 ret = do_shmat(first, (char __user *) ptr, second,
152 &raddr);
153 if (ret)
154 return ret;
155 return put_user(raddr, (ulong *) third);
156 }
157 case 1: /* iBCS2 emulator entry point */
158 if (!segment_eq(get_fs(), get_ds()))
159 return -EINVAL;
160 return do_shmat(first, (char __user *) ptr, second,
161 (ulong *) third);
162 }
163 case SHMDT:
164 return sys_shmdt((char __user *)ptr);
165 case SHMGET:
166 return sys_shmget(first, second, third);
167 case SHMCTL:
168 return sys_shmctl(first, second,
169 (struct shmid_ds __user *) ptr);
170 default:
171 return -EINVAL;
172 }
173} 33}
diff --git a/arch/mn10300/lib/checksum.c b/arch/mn10300/lib/checksum.c
index 274f29ec33c1..b6580f5d89ee 100644
--- a/arch/mn10300/lib/checksum.c
+++ b/arch/mn10300/lib/checksum.c
@@ -22,6 +22,7 @@ static inline unsigned short from32to16(__wsum sum)
22 " addc 0xffff,%0 \n" 22 " addc 0xffff,%0 \n"
23 : "=r" (sum) 23 : "=r" (sum)
24 : "r" (sum << 16), "0" (sum & 0xffff0000) 24 : "r" (sum << 16), "0" (sum & 0xffff0000)
25 : "cc"
25 ); 26 );
26 return sum >> 16; 27 return sum >> 16;
27} 28}
diff --git a/arch/mn10300/lib/delay.c b/arch/mn10300/lib/delay.c
index cce66bc0822d..fdf6f710f94e 100644
--- a/arch/mn10300/lib/delay.c
+++ b/arch/mn10300/lib/delay.c
@@ -28,7 +28,8 @@ void __delay(unsigned long loops)
28 "2: add -1,%0 \n" 28 "2: add -1,%0 \n"
29 " bne 2b \n" 29 " bne 2b \n"
30 : "=&d" (d0) 30 : "=&d" (d0)
31 : "0" (loops)); 31 : "0" (loops)
32 : "cc");
32} 33}
33EXPORT_SYMBOL(__delay); 34EXPORT_SYMBOL(__delay);
34 35
diff --git a/arch/mn10300/lib/usercopy.c b/arch/mn10300/lib/usercopy.c
index a75b203059c1..7826e6c364e7 100644
--- a/arch/mn10300/lib/usercopy.c
+++ b/arch/mn10300/lib/usercopy.c
@@ -62,7 +62,7 @@ do { \
62 " .previous" \ 62 " .previous" \
63 :"=&r"(res), "=r"(count), "=&r"(w) \ 63 :"=&r"(res), "=r"(count), "=&r"(w) \
64 :"i"(-EFAULT), "1"(count), "a"(src), "a"(dst) \ 64 :"i"(-EFAULT), "1"(count), "a"(src), "a"(dst) \
65 :"memory"); \ 65 : "memory", "cc"); \
66} while (0) 66} while (0)
67 67
68long 68long
@@ -109,7 +109,7 @@ do { \
109 ".previous\n" \ 109 ".previous\n" \
110 : "+r"(size), "=&r"(w) \ 110 : "+r"(size), "=&r"(w) \
111 : "a"(addr), "d"(0) \ 111 : "a"(addr), "d"(0) \
112 : "memory"); \ 112 : "memory", "cc"); \
113} while (0) 113} while (0)
114 114
115unsigned long 115unsigned long
@@ -161,6 +161,6 @@ long strnlen_user(const char *s, long n)
161 ".previous\n" 161 ".previous\n"
162 :"=d"(res), "=&r"(w) 162 :"=d"(res), "=&r"(w)
163 :"0"(0), "a"(s), "r"(n) 163 :"0"(0), "a"(s), "r"(n)
164 :"memory"); 164 : "memory", "cc");
165 return res; 165 return res;
166} 166}
diff --git a/arch/mn10300/mm/dma-alloc.c b/arch/mn10300/mm/dma-alloc.c
index f3649d8f50e3..4e34880bea03 100644
--- a/arch/mn10300/mm/dma-alloc.c
+++ b/arch/mn10300/mm/dma-alloc.c
@@ -14,14 +14,27 @@
14#include <linux/mm.h> 14#include <linux/mm.h>
15#include <linux/string.h> 15#include <linux/string.h>
16#include <linux/pci.h> 16#include <linux/pci.h>
17#include <linux/gfp.h>
17#include <asm/io.h> 18#include <asm/io.h>
18 19
20static unsigned long pci_sram_allocated = 0xbc000000;
21
19void *dma_alloc_coherent(struct device *dev, size_t size, 22void *dma_alloc_coherent(struct device *dev, size_t size,
20 dma_addr_t *dma_handle, int gfp) 23 dma_addr_t *dma_handle, int gfp)
21{ 24{
22 unsigned long addr; 25 unsigned long addr;
23 void *ret; 26 void *ret;
24 27
28 printk("dma_alloc_coherent(%s,%zu,,%x)\n", dev_name(dev), size, gfp);
29
30 if (0xbe000000 - pci_sram_allocated >= size) {
31 size = (size + 255) & ~255;
32 addr = pci_sram_allocated;
33 pci_sram_allocated += size;
34 ret = (void *) addr;
35 goto done;
36 }
37
25 /* ignore region specifiers */ 38 /* ignore region specifiers */
26 gfp &= ~(__GFP_DMA | __GFP_HIGHMEM); 39 gfp &= ~(__GFP_DMA | __GFP_HIGHMEM);
27 40
@@ -41,7 +54,9 @@ void *dma_alloc_coherent(struct device *dev, size_t size,
41 /* write back and evict all cache lines covering this region */ 54 /* write back and evict all cache lines covering this region */
42 mn10300_dcache_flush_inv_range2(virt_to_phys((void *) addr), PAGE_SIZE); 55 mn10300_dcache_flush_inv_range2(virt_to_phys((void *) addr), PAGE_SIZE);
43 56
57done:
44 *dma_handle = virt_to_bus((void *) addr); 58 *dma_handle = virt_to_bus((void *) addr);
59 printk("dma_alloc_coherent() = %p [%x]\n", ret, *dma_handle);
45 return ret; 60 return ret;
46} 61}
47EXPORT_SYMBOL(dma_alloc_coherent); 62EXPORT_SYMBOL(dma_alloc_coherent);
@@ -51,6 +66,9 @@ void dma_free_coherent(struct device *dev, size_t size, void *vaddr,
51{ 66{
52 unsigned long addr = (unsigned long) vaddr & ~0x20000000; 67 unsigned long addr = (unsigned long) vaddr & ~0x20000000;
53 68
69 if (addr >= 0x9c000000)
70 return;
71
54 free_pages(addr, get_order(size)); 72 free_pages(addr, get_order(size));
55} 73}
56EXPORT_SYMBOL(dma_free_coherent); 74EXPORT_SYMBOL(dma_free_coherent);
diff --git a/arch/mn10300/mm/init.c b/arch/mn10300/mm/init.c
index ec1420562dc7..6e6bc0e51521 100644
--- a/arch/mn10300/mm/init.c
+++ b/arch/mn10300/mm/init.c
@@ -17,7 +17,6 @@
17#include <linux/types.h> 17#include <linux/types.h>
18#include <linux/ptrace.h> 18#include <linux/ptrace.h>
19#include <linux/mman.h> 19#include <linux/mman.h>
20#include <linux/slab.h>
21#include <linux/fs.h> 20#include <linux/fs.h>
22#include <linux/mm.h> 21#include <linux/mm.h>
23#include <linux/swap.h> 22#include <linux/swap.h>
@@ -27,6 +26,7 @@
27#include <linux/highmem.h> 26#include <linux/highmem.h>
28#include <linux/pagemap.h> 27#include <linux/pagemap.h>
29#include <linux/bootmem.h> 28#include <linux/bootmem.h>
29#include <linux/gfp.h>
30 30
31#include <asm/processor.h> 31#include <asm/processor.h>
32#include <asm/system.h> 32#include <asm/system.h>
@@ -118,8 +118,7 @@ void __init mem_init(void)
118 reservedpages << (PAGE_SHIFT - 10), 118 reservedpages << (PAGE_SHIFT - 10),
119 datasize >> 10, 119 datasize >> 10,
120 initsize >> 10, 120 initsize >> 10,
121 (unsigned long) (totalhigh_pages << (PAGE_SHIFT - 10)) 121 totalhigh_pages << (PAGE_SHIFT - 10));
122 );
123} 122}
124 123
125/* 124/*
diff --git a/arch/mn10300/mm/misalignment.c b/arch/mn10300/mm/misalignment.c
index 30016251f658..6dffbf97ac26 100644
--- a/arch/mn10300/mm/misalignment.c
+++ b/arch/mn10300/mm/misalignment.c
@@ -633,13 +633,13 @@ static int misalignment_addr(unsigned long *registers, unsigned long sp,
633 goto displace_or_inc; 633 goto displace_or_inc;
634 case SD24: 634 case SD24:
635 tmp = disp << 8; 635 tmp = disp << 8;
636 asm("asr 8,%0" : "=r"(tmp) : "0"(tmp)); 636 asm("asr 8,%0" : "=r"(tmp) : "0"(tmp) : "cc");
637 disp = (long) tmp; 637 disp = (long) tmp;
638 goto displace_or_inc; 638 goto displace_or_inc;
639 case SIMM4_2: 639 case SIMM4_2:
640 tmp = opcode >> 4 & 0x0f; 640 tmp = opcode >> 4 & 0x0f;
641 tmp <<= 28; 641 tmp <<= 28;
642 asm("asr 28,%0" : "=r"(tmp) : "0"(tmp)); 642 asm("asr 28,%0" : "=r"(tmp) : "0"(tmp) : "cc");
643 disp = (long) tmp; 643 disp = (long) tmp;
644 goto displace_or_inc; 644 goto displace_or_inc;
645 case IMM8: 645 case IMM8:
diff --git a/arch/mn10300/mm/mmu-context.c b/arch/mn10300/mm/mmu-context.c
index 31c9d27a75ae..36ba02191d40 100644
--- a/arch/mn10300/mm/mmu-context.c
+++ b/arch/mn10300/mm/mmu-context.c
@@ -51,9 +51,10 @@ void flush_tlb_page(struct vm_area_struct *vma, unsigned long addr)
51/* 51/*
52 * preemptively set a TLB entry 52 * preemptively set a TLB entry
53 */ 53 */
54void update_mmu_cache(struct vm_area_struct *vma, unsigned long addr, pte_t pte) 54void update_mmu_cache(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep)
55{ 55{
56 unsigned long pteu, ptel, cnx, flags; 56 unsigned long pteu, ptel, cnx, flags;
57 pte_t pte = *ptep;
57 58
58 addr &= PAGE_MASK; 59 addr &= PAGE_MASK;
59 ptel = pte_val(pte) & ~(xPTEL_UNUSED1 | xPTEL_UNUSED2); 60 ptel = pte_val(pte) & ~(xPTEL_UNUSED1 | xPTEL_UNUSED2);
diff --git a/arch/mn10300/mm/pgtable.c b/arch/mn10300/mm/pgtable.c
index baffc581e031..9c1624c9e4e9 100644
--- a/arch/mn10300/mm/pgtable.c
+++ b/arch/mn10300/mm/pgtable.c
@@ -12,11 +12,11 @@
12#include <linux/sched.h> 12#include <linux/sched.h>
13#include <linux/kernel.h> 13#include <linux/kernel.h>
14#include <linux/errno.h> 14#include <linux/errno.h>
15#include <linux/gfp.h>
15#include <linux/mm.h> 16#include <linux/mm.h>
16#include <linux/swap.h> 17#include <linux/swap.h>
17#include <linux/smp.h> 18#include <linux/smp.h>
18#include <linux/highmem.h> 19#include <linux/highmem.h>
19#include <linux/slab.h>
20#include <linux/pagemap.h> 20#include <linux/pagemap.h>
21#include <linux/spinlock.h> 21#include <linux/spinlock.h>
22#include <linux/quicklist.h> 22#include <linux/quicklist.h>
diff --git a/arch/mn10300/unit-asb2305/include/unit/serial.h b/arch/mn10300/unit-asb2305/include/unit/serial.h
index 3bfc90938787..8086cc092cec 100644
--- a/arch/mn10300/unit-asb2305/include/unit/serial.h
+++ b/arch/mn10300/unit-asb2305/include/unit/serial.h
@@ -11,7 +11,7 @@
11#ifndef _ASM_UNIT_SERIAL_H 11#ifndef _ASM_UNIT_SERIAL_H
12#define _ASM_UNIT_SERIAL_H 12#define _ASM_UNIT_SERIAL_H
13 13
14#include <asm/cpu/cpu-regs.h> 14#include <asm/cpu-regs.h>
15#include <proc/irq.h> 15#include <proc/irq.h>
16#include <linux/serial_reg.h> 16#include <linux/serial_reg.h>
17 17
diff --git a/arch/mn10300/unit-asb2305/include/unit/timex.h b/arch/mn10300/unit-asb2305/include/unit/timex.h
index a71c49aa85eb..d1c72d59fa9f 100644
--- a/arch/mn10300/unit-asb2305/include/unit/timex.h
+++ b/arch/mn10300/unit-asb2305/include/unit/timex.h
@@ -15,7 +15,7 @@
15#include <linux/irq.h> 15#include <linux/irq.h>
16#endif /* __ASSEMBLY__ */ 16#endif /* __ASSEMBLY__ */
17 17
18#include <asm/cpu/timer-regs.h> 18#include <asm/timer-regs.h>
19#include <unit/clock.h> 19#include <unit/clock.h>
20 20
21/* 21/*
diff --git a/arch/mn10300/unit-asb2305/leds.c b/arch/mn10300/unit-asb2305/leds.c
index d345ff9042d5..6f8de9954026 100644
--- a/arch/mn10300/unit-asb2305/leds.c
+++ b/arch/mn10300/unit-asb2305/leds.c
@@ -13,8 +13,8 @@
13#include <linux/init.h> 13#include <linux/init.h>
14#include <asm/io.h> 14#include <asm/io.h>
15#include <asm/processor.h> 15#include <asm/processor.h>
16#include <asm/cpu/intctl-regs.h> 16#include <asm/intctl-regs.h>
17#include <asm/cpu/rtc-regs.h> 17#include <asm/rtc-regs.h>
18#include <unit/leds.h> 18#include <unit/leds.h>
19 19
20static const u8 asb2305_led_hex_tbl[16] = { 20static const u8 asb2305_led_hex_tbl[16] = {
diff --git a/arch/mn10300/unit-asb2305/pci-asb2305.c b/arch/mn10300/unit-asb2305/pci-asb2305.c
index d100ca788468..d6119b879a98 100644
--- a/arch/mn10300/unit-asb2305/pci-asb2305.c
+++ b/arch/mn10300/unit-asb2305/pci-asb2305.c
@@ -31,9 +31,11 @@
31 * but we want to try to avoid allocating at 0x2900-0x2bff 31 * but we want to try to avoid allocating at 0x2900-0x2bff
32 * which might have be mirrored at 0x0100-0x03ff.. 32 * which might have be mirrored at 0x0100-0x03ff..
33 */ 33 */
34void pcibios_align_resource(void *data, struct resource *res, 34resource_size_t pcibios_align_resource(void *data, const struct resource *res,
35 resource_size_t size, resource_size_t align) 35 resource_size_t size, resource_size_t align)
36{ 36{
37 resource_size_t start = res->start;
38
37#if 0 39#if 0
38 struct pci_dev *dev = data; 40 struct pci_dev *dev = data;
39 41
@@ -47,14 +49,10 @@ void pcibios_align_resource(void *data, struct resource *res,
47 ); 49 );
48#endif 50#endif
49 51
50 if (res->flags & IORESOURCE_IO) { 52 if ((res->flags & IORESOURCE_IO) && (start & 0x300))
51 unsigned long start = res->start; 53 start = (start + 0x3ff) & ~0x3ff;
52 54
53 if (start & 0x300) { 55 return start;
54 start = (start + 0x3ff) & ~0x3ff;
55 res->start = start;
56 }
57 }
58} 56}
59 57
60 58
@@ -218,45 +216,6 @@ void __init pcibios_resource_survey(void)
218 pcibios_allocate_resources(1); 216 pcibios_allocate_resources(1);
219} 217}
220 218
221int pcibios_enable_resources(struct pci_dev *dev, int mask)
222{
223 u16 cmd, old_cmd;
224 int idx;
225 struct resource *r;
226
227 pci_read_config_word(dev, PCI_COMMAND, &cmd);
228 old_cmd = cmd;
229
230 for (idx = 0; idx < 6; idx++) {
231 /* Only set up the requested stuff */
232 if (!(mask & (1 << idx)))
233 continue;
234
235 r = &dev->resource[idx];
236
237 if (!r->start && r->end) {
238 printk(KERN_ERR
239 "PCI: Device %s not available because of"
240 " resource collisions\n",
241 pci_name(dev));
242 return -EINVAL;
243 }
244
245 if (r->flags & IORESOURCE_IO)
246 cmd |= PCI_COMMAND_IO;
247 if (r->flags & IORESOURCE_MEM)
248 cmd |= PCI_COMMAND_MEMORY;
249 }
250
251 if (dev->resource[PCI_ROM_RESOURCE].start)
252 cmd |= PCI_COMMAND_MEMORY;
253
254 if (cmd != old_cmd)
255 pci_write_config_word(dev, PCI_COMMAND, cmd);
256
257 return 0;
258}
259
260/* 219/*
261 * If we set up a device for bus mastering, we need to check the latency 220 * If we set up a device for bus mastering, we need to check the latency
262 * timer as certain crappy BIOSes forget to set it properly. 221 * timer as certain crappy BIOSes forget to set it properly.
diff --git a/arch/mn10300/unit-asb2305/pci-asb2305.h b/arch/mn10300/unit-asb2305/pci-asb2305.h
index 9763d1ce343a..c3fa294b6e28 100644
--- a/arch/mn10300/unit-asb2305/pci-asb2305.h
+++ b/arch/mn10300/unit-asb2305/pci-asb2305.h
@@ -34,7 +34,6 @@ extern unsigned int pci_probe;
34extern unsigned int pcibios_max_latency; 34extern unsigned int pcibios_max_latency;
35 35
36extern void pcibios_resource_survey(void); 36extern void pcibios_resource_survey(void);
37extern int pcibios_enable_resources(struct pci_dev *dev, int mask);
38 37
39/* pci.c */ 38/* pci.c */
40 39
diff --git a/arch/mn10300/unit-asb2305/pci-irq.c b/arch/mn10300/unit-asb2305/pci-irq.c
index 58cfb44f0acf..91212ea71e69 100644
--- a/arch/mn10300/unit-asb2305/pci-irq.c
+++ b/arch/mn10300/unit-asb2305/pci-irq.c
@@ -14,7 +14,6 @@
14#include <linux/kernel.h> 14#include <linux/kernel.h>
15#include <linux/pci.h> 15#include <linux/pci.h>
16#include <linux/init.h> 16#include <linux/init.h>
17#include <linux/slab.h>
18#include <linux/interrupt.h> 17#include <linux/interrupt.h>
19#include <linux/irq.h> 18#include <linux/irq.h>
20#include <asm/io.h> 19#include <asm/io.h>
diff --git a/arch/mn10300/unit-asb2305/pci.c b/arch/mn10300/unit-asb2305/pci.c
index 07dbbcda3b2e..6d8720a0a599 100644
--- a/arch/mn10300/unit-asb2305/pci.c
+++ b/arch/mn10300/unit-asb2305/pci.c
@@ -27,6 +27,29 @@ struct pci_bus *pci_root_bus;
27struct pci_ops *pci_root_ops; 27struct pci_ops *pci_root_ops;
28 28
29/* 29/*
30 * The accessible PCI window does not cover the entire CPU address space, but
31 * there are devices we want to access outside of that window, so we need to
32 * insert specific PCI bus resources instead of using the platform-level bus
33 * resources directly for the PCI root bus.
34 *
35 * These are configured and inserted by pcibios_init() and are attached to the
36 * root bus by pcibios_fixup_bus().
37 */
38static struct resource pci_ioport_resource = {
39 .name = "PCI IO",
40 .start = 0xbe000000,
41 .end = 0xbe03ffff,
42 .flags = IORESOURCE_IO,
43};
44
45static struct resource pci_iomem_resource = {
46 .name = "PCI mem",
47 .start = 0xb8000000,
48 .end = 0xbbffffff,
49 .flags = IORESOURCE_MEM,
50};
51
52/*
30 * Functions for accessing PCI configuration space 53 * Functions for accessing PCI configuration space
31 */ 54 */
32 55
@@ -279,7 +302,7 @@ static int __init pci_sanity_check(struct pci_ops *o)
279 (x == PCI_VENDOR_ID_INTEL || x == PCI_VENDOR_ID_COMPAQ))) 302 (x == PCI_VENDOR_ID_INTEL || x == PCI_VENDOR_ID_COMPAQ)))
280 return 1; 303 return 1;
281 304
282 printk(KERN_ERROR "PCI: Sanity check failed\n"); 305 printk(KERN_ERR "PCI: Sanity check failed\n");
283 return 0; 306 return 0;
284} 307}
285 308
@@ -297,6 +320,7 @@ static int __init pci_check_direct(void)
297 printk(KERN_INFO "PCI: Using configuration ampci\n"); 320 printk(KERN_INFO "PCI: Using configuration ampci\n");
298 request_mem_region(0xBE040000, 256, "AMPCI bridge"); 321 request_mem_region(0xBE040000, 256, "AMPCI bridge");
299 request_mem_region(0xBFFFFFF4, 12, "PCI ampci"); 322 request_mem_region(0xBFFFFFF4, 12, "PCI ampci");
323 request_mem_region(0xBC000000, 32 * 1024 * 1024, "PCI SRAM");
300 return 0; 324 return 0;
301 } 325 }
302 326
@@ -307,12 +331,10 @@ static int __init pci_check_direct(void)
307static int __devinit is_valid_resource(struct pci_dev *dev, int idx) 331static int __devinit is_valid_resource(struct pci_dev *dev, int idx)
308{ 332{
309 unsigned int i, type_mask = IORESOURCE_IO | IORESOURCE_MEM; 333 unsigned int i, type_mask = IORESOURCE_IO | IORESOURCE_MEM;
310 struct resource *devr = &dev->resource[idx]; 334 struct resource *devr = &dev->resource[idx], *busr;
311 335
312 if (dev->bus) { 336 if (dev->bus) {
313 for (i = 0; i < PCI_BUS_NUM_RESOURCES; i++) { 337 pci_bus_for_each_resource(dev->bus, busr, i) {
314 struct resource *busr = dev->bus->resource[i];
315
316 if (!busr || (busr->flags ^ devr->flags) & type_mask) 338 if (!busr || (busr->flags ^ devr->flags) & type_mask)
317 continue; 339 continue;
318 340
@@ -358,6 +380,11 @@ void __devinit pcibios_fixup_bus(struct pci_bus *bus)
358{ 380{
359 struct pci_dev *dev; 381 struct pci_dev *dev;
360 382
383 if (bus->number == 0) {
384 bus->resource[0] = &pci_ioport_resource;
385 bus->resource[1] = &pci_iomem_resource;
386 }
387
361 if (bus->self) { 388 if (bus->self) {
362 pci_read_bridge_bases(bus); 389 pci_read_bridge_bases(bus);
363 pcibios_fixup_device_resources(bus->self); 390 pcibios_fixup_device_resources(bus->self);
@@ -380,6 +407,11 @@ static int __init pcibios_init(void)
380 iomem_resource.start = 0xA0000000; 407 iomem_resource.start = 0xA0000000;
381 iomem_resource.end = 0xDFFFFFFF; 408 iomem_resource.end = 0xDFFFFFFF;
382 409
410 if (insert_resource(&iomem_resource, &pci_iomem_resource) < 0)
411 panic("Unable to insert PCI IOMEM resource\n");
412 if (insert_resource(&ioport_resource, &pci_ioport_resource) < 0)
413 panic("Unable to insert PCI IOPORT resource\n");
414
383 if (!pci_probe) 415 if (!pci_probe)
384 return 0; 416 return 0;
385 417
@@ -391,32 +423,11 @@ static int __init pcibios_init(void)
391 printk(KERN_INFO "PCI: Probing PCI hardware [mempage %08x]\n", 423 printk(KERN_INFO "PCI: Probing PCI hardware [mempage %08x]\n",
392 MEM_PAGING_REG); 424 MEM_PAGING_REG);
393 425
394 { 426 pci_root_bus = pci_scan_bus(0, &pci_direct_ampci, NULL);
395#if 0
396 static struct pci_bus am33_root_bus = {
397 .children = LIST_HEAD_INIT(am33_root_bus.children),
398 .devices = LIST_HEAD_INIT(am33_root_bus.devices),
399 .number = 0,
400 .secondary = 0,
401 .resource = { &ioport_resource, &iomem_resource },
402 };
403
404 am33_root_bus.ops = pci_root_ops;
405 list_add_tail(&am33_root_bus.node, &pci_root_buses);
406
407 am33_root_bus.subordinate = pci_do_scan_bus(0);
408
409 pci_root_bus = &am33_root_bus;
410#else
411 pci_root_bus = pci_scan_bus(0, &pci_direct_ampci, NULL);
412#endif
413 }
414 427
415 pcibios_irq_init(); 428 pcibios_irq_init();
416 pcibios_fixup_irqs(); 429 pcibios_fixup_irqs();
417#if 0
418 pcibios_resource_survey(); 430 pcibios_resource_survey();
419#endif
420 return 0; 431 return 0;
421} 432}
422 433
@@ -440,7 +451,7 @@ int pcibios_enable_device(struct pci_dev *dev, int mask)
440{ 451{
441 int err; 452 int err;
442 453
443 err = pcibios_enable_resources(dev, mask); 454 err = pci_enable_resources(dev, mask);
444 if (err == 0) 455 if (err == 0)
445 pcibios_enable_irq(dev); 456 pcibios_enable_irq(dev);
446 return err; 457 return err;
@@ -455,6 +466,7 @@ static void __init unit_disable_pcnet(struct pci_bus *bus, struct pci_ops *o)
455 466
456 bus->number = 0; 467 bus->number = 0;
457 468
469 o->read (bus, PCI_DEVFN(2, 0), PCI_VENDOR_ID, 4, &x);
458 o->read (bus, PCI_DEVFN(2, 0), PCI_COMMAND, 2, &x); 470 o->read (bus, PCI_DEVFN(2, 0), PCI_COMMAND, 2, &x);
459 x |= PCI_COMMAND_MASTER | 471 x |= PCI_COMMAND_MASTER |
460 PCI_COMMAND_IO | PCI_COMMAND_MEMORY | 472 PCI_COMMAND_IO | PCI_COMMAND_MEMORY |
diff --git a/arch/mn10300/unit-asb2305/unit-init.c b/arch/mn10300/unit-asb2305/unit-init.c
index 1c452cc3f6e9..a76c8e0ab90f 100644
--- a/arch/mn10300/unit-asb2305/unit-init.c
+++ b/arch/mn10300/unit-asb2305/unit-init.c
@@ -15,9 +15,8 @@
15#include <asm/io.h> 15#include <asm/io.h>
16#include <asm/setup.h> 16#include <asm/setup.h>
17#include <asm/processor.h> 17#include <asm/processor.h>
18#include <asm/cpu/intctl-regs.h> 18#include <asm/intctl-regs.h>
19#include <asm/cpu/rtc-regs.h> 19#include <asm/serial-regs.h>
20#include <asm/cpu/serial-regs.h>
21#include <unit/serial.h> 20#include <unit/serial.h>
22 21
23/* 22/*