aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorPaul Mundt <lethal@linux-sh.org>2009-07-23 05:43:48 -0400
committerPaul Mundt <lethal@linux-sh.org>2009-07-23 05:43:48 -0400
commita3beddd0aa267986de7b13b6d9cd0e1869fcf1fc (patch)
treebfdc42183f5aac21f605a30a4a511298ab91e3c5 /arch
parent955c9863bb5855a994751843e7066017edc00410 (diff)
parent5bdef865eb358b6f3760e25e591ae115e9eeddef (diff)
Merge branch 'sh/kfr2r09'
Diffstat (limited to 'arch')
-rw-r--r--arch/sh/Makefile1
-rw-r--r--arch/sh/boards/Kconfig7
-rw-r--r--arch/sh/boards/mach-kfr2r09/Makefile1
-rw-r--r--arch/sh/boards/mach-kfr2r09/setup.c153
-rw-r--r--arch/sh/configs/kfr2r09_defconfig877
-rw-r--r--arch/sh/tools/mach-types1
-rw-r--r--arch/x86/kernel/cpu/perf_counter.c253
7 files changed, 1273 insertions, 20 deletions
diff --git a/arch/sh/Makefile b/arch/sh/Makefile
index 34ad114279bf..c46b3d508f22 100644
--- a/arch/sh/Makefile
+++ b/arch/sh/Makefile
@@ -136,6 +136,7 @@ machdir-$(CONFIG_SH_7751_SYSTEMH) += mach-systemh
136machdir-$(CONFIG_SH_EDOSK7705) += mach-edosk7705 136machdir-$(CONFIG_SH_EDOSK7705) += mach-edosk7705
137machdir-$(CONFIG_SH_HIGHLANDER) += mach-highlander 137machdir-$(CONFIG_SH_HIGHLANDER) += mach-highlander
138machdir-$(CONFIG_SH_MIGOR) += mach-migor 138machdir-$(CONFIG_SH_MIGOR) += mach-migor
139machdir-$(CONFIG_SH_KFR2R09) += mach-kfr2r09
139machdir-$(CONFIG_SH_SDK7780) += mach-sdk7780 140machdir-$(CONFIG_SH_SDK7780) += mach-sdk7780
140machdir-$(CONFIG_SH_X3PROTO) += mach-x3proto 141machdir-$(CONFIG_SH_X3PROTO) += mach-x3proto
141machdir-$(CONFIG_SH_SH7763RDP) += mach-sh7763rdp 142machdir-$(CONFIG_SH_SH7763RDP) += mach-sh7763rdp
diff --git a/arch/sh/boards/Kconfig b/arch/sh/boards/Kconfig
index 2b1af0eefa6a..db04c85971ad 100644
--- a/arch/sh/boards/Kconfig
+++ b/arch/sh/boards/Kconfig
@@ -193,6 +193,13 @@ config SH_AP325RXA
193 Renesas "AP-325RXA" support. 193 Renesas "AP-325RXA" support.
194 Compatible with ALGO SYSTEM CO.,LTD. "AP-320A" 194 Compatible with ALGO SYSTEM CO.,LTD. "AP-320A"
195 195
196config SH_KFR2R09
197 bool "KFR2R09"
198 depends on CPU_SUBTYPE_SH7724
199 select ARCH_REQUIRE_GPIOLIB
200 help
201 "Kit For R2R for 2009" support.
202
196config SH_SH7763RDP 203config SH_SH7763RDP
197 bool "SH7763RDP" 204 bool "SH7763RDP"
198 depends on CPU_SUBTYPE_SH7763 205 depends on CPU_SUBTYPE_SH7763
diff --git a/arch/sh/boards/mach-kfr2r09/Makefile b/arch/sh/boards/mach-kfr2r09/Makefile
new file mode 100644
index 000000000000..77037567633b
--- /dev/null
+++ b/arch/sh/boards/mach-kfr2r09/Makefile
@@ -0,0 +1 @@
obj-y := setup.o
diff --git a/arch/sh/boards/mach-kfr2r09/setup.c b/arch/sh/boards/mach-kfr2r09/setup.c
new file mode 100644
index 000000000000..bf5f8f8d3b5f
--- /dev/null
+++ b/arch/sh/boards/mach-kfr2r09/setup.c
@@ -0,0 +1,153 @@
1/*
2 * KFR2R09 board support code
3 *
4 * Copyright (C) 2009 Magnus Damm
5 *
6 * This file is subject to the terms and conditions of the GNU General Public
7 * License. See the file "COPYING" in the main directory of this archive
8 * for more details.
9 */
10#include <linux/init.h>
11#include <linux/platform_device.h>
12#include <linux/interrupt.h>
13#include <linux/mtd/physmap.h>
14#include <linux/delay.h>
15#include <linux/clk.h>
16#include <linux/gpio.h>
17#include <linux/input.h>
18#include <asm/clock.h>
19#include <asm/machvec.h>
20#include <asm/io.h>
21#include <asm/sh_keysc.h>
22#include <cpu/sh7724.h>
23
24static struct mtd_partition kfr2r09_nor_flash_partitions[] =
25{
26 {
27 .name = "boot",
28 .offset = 0,
29 .size = (4 * 1024 * 1024),
30 .mask_flags = MTD_WRITEABLE, /* Read-only */
31 },
32 {
33 .name = "other",
34 .offset = MTDPART_OFS_APPEND,
35 .size = MTDPART_SIZ_FULL,
36 },
37};
38
39static struct physmap_flash_data kfr2r09_nor_flash_data = {
40 .width = 2,
41 .parts = kfr2r09_nor_flash_partitions,
42 .nr_parts = ARRAY_SIZE(kfr2r09_nor_flash_partitions),
43};
44
45static struct resource kfr2r09_nor_flash_resources[] = {
46 [0] = {
47 .name = "NOR Flash",
48 .start = 0x00000000,
49 .end = 0x03ffffff,
50 .flags = IORESOURCE_MEM,
51 }
52};
53
54static struct platform_device kfr2r09_nor_flash_device = {
55 .name = "physmap-flash",
56 .resource = kfr2r09_nor_flash_resources,
57 .num_resources = ARRAY_SIZE(kfr2r09_nor_flash_resources),
58 .dev = {
59 .platform_data = &kfr2r09_nor_flash_data,
60 },
61};
62
63static struct sh_keysc_info kfr2r09_sh_keysc_info = {
64 .mode = SH_KEYSC_MODE_1, /* KEYOUT0->4, KEYIN0->4 */
65 .scan_timing = 3,
66 .delay = 10,
67 .keycodes = {
68 KEY_PHONE, KEY_CLEAR, KEY_MAIL, KEY_WWW, KEY_ENTER,
69 KEY_1, KEY_2, KEY_3, 0, KEY_UP,
70 KEY_4, KEY_5, KEY_6, 0, KEY_LEFT,
71 KEY_7, KEY_8, KEY_9, KEY_PROG1, KEY_RIGHT,
72 KEY_S, KEY_0, KEY_P, KEY_PROG2, KEY_DOWN,
73 0, 0, 0, 0, 0
74 },
75};
76
77static struct resource kfr2r09_sh_keysc_resources[] = {
78 [0] = {
79 .name = "KEYSC",
80 .start = 0x044b0000,
81 .end = 0x044b000f,
82 .flags = IORESOURCE_MEM,
83 },
84 [1] = {
85 .start = 79,
86 .flags = IORESOURCE_IRQ,
87 },
88};
89
90static struct platform_device kfr2r09_sh_keysc_device = {
91 .name = "sh_keysc",
92 .id = 0, /* "keysc0" clock */
93 .num_resources = ARRAY_SIZE(kfr2r09_sh_keysc_resources),
94 .resource = kfr2r09_sh_keysc_resources,
95 .dev = {
96 .platform_data = &kfr2r09_sh_keysc_info,
97 },
98};
99
100static struct platform_device *kfr2r09_devices[] __initdata = {
101 &kfr2r09_nor_flash_device,
102 &kfr2r09_sh_keysc_device,
103};
104
105#define BSC_CS0BCR 0xfec10004
106#define BSC_CS0WCR 0xfec10024
107
108static int __init kfr2r09_devices_setup(void)
109{
110 /* enable SCIF1 serial port for YC401 console support */
111 gpio_request(GPIO_FN_SCIF1_RXD, NULL);
112 gpio_request(GPIO_FN_SCIF1_TXD, NULL);
113
114 /* setup NOR flash at CS0 */
115 ctrl_outl(0x36db0400, BSC_CS0BCR);
116 ctrl_outl(0x00000500, BSC_CS0WCR);
117
118 /* setup KEYSC pins */
119 gpio_request(GPIO_FN_KEYOUT0, NULL);
120 gpio_request(GPIO_FN_KEYOUT1, NULL);
121 gpio_request(GPIO_FN_KEYOUT2, NULL);
122 gpio_request(GPIO_FN_KEYOUT3, NULL);
123 gpio_request(GPIO_FN_KEYOUT4_IN6, NULL);
124 gpio_request(GPIO_FN_KEYIN0, NULL);
125 gpio_request(GPIO_FN_KEYIN1, NULL);
126 gpio_request(GPIO_FN_KEYIN2, NULL);
127 gpio_request(GPIO_FN_KEYIN3, NULL);
128 gpio_request(GPIO_FN_KEYIN4, NULL);
129 gpio_request(GPIO_FN_KEYOUT5_IN5, NULL);
130
131 return platform_add_devices(kfr2r09_devices,
132 ARRAY_SIZE(kfr2r09_devices));
133}
134device_initcall(kfr2r09_devices_setup);
135
136/* Return the board specific boot mode pin configuration */
137static int kfr2r09_mode_pins(void)
138{
139 /* MD0=1, MD1=1, MD2=0: Clock Mode 3
140 * MD3=0: 16-bit Area0 Bus Width
141 * MD5=1: Little Endian
142 * MD8=1: Test Mode Disabled
143 */
144 return MODE_PIN0 | MODE_PIN1 | MODE_PIN5 | MODE_PIN8;
145}
146
147/*
148 * The Machine Vector
149 */
150static struct sh_machine_vector mv_kfr2r09 __initmv = {
151 .mv_name = "kfr2r09",
152 .mv_mode_pins = kfr2r09_mode_pins,
153};
diff --git a/arch/sh/configs/kfr2r09_defconfig b/arch/sh/configs/kfr2r09_defconfig
new file mode 100644
index 000000000000..90e575c34d58
--- /dev/null
+++ b/arch/sh/configs/kfr2r09_defconfig
@@ -0,0 +1,877 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.31-rc3
4# Thu Jul 23 17:45:09 2009
5#
6CONFIG_SUPERH=y
7CONFIG_SUPERH32=y
8# CONFIG_SUPERH64 is not set
9CONFIG_ARCH_DEFCONFIG="arch/sh/configs/shx3_defconfig"
10CONFIG_RWSEM_GENERIC_SPINLOCK=y
11CONFIG_GENERIC_BUG=y
12CONFIG_GENERIC_FIND_NEXT_BIT=y
13CONFIG_GENERIC_HWEIGHT=y
14CONFIG_GENERIC_HARDIRQS=y
15CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
16CONFIG_GENERIC_IRQ_PROBE=y
17CONFIG_IRQ_PER_CPU=y
18CONFIG_GENERIC_GPIO=y
19CONFIG_GENERIC_TIME=y
20CONFIG_GENERIC_CLOCKEVENTS=y
21CONFIG_ARCH_SUSPEND_POSSIBLE=y
22CONFIG_ARCH_HIBERNATION_POSSIBLE=y
23CONFIG_SYS_SUPPORTS_CMT=y
24CONFIG_SYS_SUPPORTS_TMU=y
25CONFIG_STACKTRACE_SUPPORT=y
26CONFIG_LOCKDEP_SUPPORT=y
27CONFIG_HAVE_LATENCYTOP_SUPPORT=y
28# CONFIG_ARCH_HAS_ILOG2_U32 is not set
29# CONFIG_ARCH_HAS_ILOG2_U64 is not set
30CONFIG_ARCH_NO_VIRT_TO_BUS=y
31CONFIG_ARCH_HAS_DEFAULT_IDLE=y
32CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
33CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
34CONFIG_CONSTRUCTORS=y
35
36#
37# General setup
38#
39CONFIG_EXPERIMENTAL=y
40CONFIG_BROKEN_ON_SMP=y
41CONFIG_INIT_ENV_ARG_LIMIT=32
42CONFIG_LOCALVERSION=""
43# CONFIG_LOCALVERSION_AUTO is not set
44CONFIG_HAVE_KERNEL_GZIP=y
45CONFIG_HAVE_KERNEL_BZIP2=y
46CONFIG_HAVE_KERNEL_LZMA=y
47CONFIG_KERNEL_GZIP=y
48# CONFIG_KERNEL_BZIP2 is not set
49# CONFIG_KERNEL_LZMA is not set
50CONFIG_SWAP=y
51CONFIG_SYSVIPC=y
52CONFIG_SYSVIPC_SYSCTL=y
53# CONFIG_POSIX_MQUEUE is not set
54CONFIG_BSD_PROCESS_ACCT=y
55# CONFIG_BSD_PROCESS_ACCT_V3 is not set
56# CONFIG_TASKSTATS is not set
57# CONFIG_AUDIT is not set
58
59#
60# RCU Subsystem
61#
62CONFIG_CLASSIC_RCU=y
63# CONFIG_TREE_RCU is not set
64# CONFIG_PREEMPT_RCU is not set
65# CONFIG_TREE_RCU_TRACE is not set
66# CONFIG_PREEMPT_RCU_TRACE is not set
67CONFIG_IKCONFIG=y
68CONFIG_IKCONFIG_PROC=y
69CONFIG_LOG_BUF_SHIFT=14
70CONFIG_GROUP_SCHED=y
71CONFIG_FAIR_GROUP_SCHED=y
72# CONFIG_RT_GROUP_SCHED is not set
73CONFIG_USER_SCHED=y
74# CONFIG_CGROUP_SCHED is not set
75# CONFIG_CGROUPS is not set
76CONFIG_SYSFS_DEPRECATED=y
77CONFIG_SYSFS_DEPRECATED_V2=y
78# CONFIG_RELAY is not set
79# CONFIG_NAMESPACES is not set
80CONFIG_BLK_DEV_INITRD=y
81CONFIG_INITRAMFS_SOURCE=""
82CONFIG_RD_GZIP=y
83# CONFIG_RD_BZIP2 is not set
84# CONFIG_RD_LZMA is not set
85CONFIG_CC_OPTIMIZE_FOR_SIZE=y
86CONFIG_SYSCTL=y
87CONFIG_ANON_INODES=y
88CONFIG_EMBEDDED=y
89CONFIG_UID16=y
90CONFIG_SYSCTL_SYSCALL=y
91# CONFIG_KALLSYMS is not set
92CONFIG_HOTPLUG=y
93CONFIG_PRINTK=y
94CONFIG_BUG=y
95CONFIG_ELF_CORE=y
96CONFIG_BASE_FULL=y
97CONFIG_FUTEX=y
98CONFIG_EPOLL=y
99CONFIG_SIGNALFD=y
100CONFIG_TIMERFD=y
101CONFIG_EVENTFD=y
102CONFIG_SHMEM=y
103CONFIG_AIO=y
104CONFIG_HAVE_PERF_COUNTERS=y
105
106#
107# Performance Counters
108#
109# CONFIG_PERF_COUNTERS is not set
110CONFIG_VM_EVENT_COUNTERS=y
111# CONFIG_STRIP_ASM_SYMS is not set
112CONFIG_COMPAT_BRK=y
113CONFIG_SLAB=y
114# CONFIG_SLUB is not set
115# CONFIG_SLOB is not set
116# CONFIG_PROFILING is not set
117# CONFIG_MARKERS is not set
118CONFIG_HAVE_OPROFILE=y
119CONFIG_HAVE_IOREMAP_PROT=y
120CONFIG_HAVE_KPROBES=y
121CONFIG_HAVE_KRETPROBES=y
122CONFIG_HAVE_ARCH_TRACEHOOK=y
123CONFIG_HAVE_CLK=y
124CONFIG_HAVE_DMA_API_DEBUG=y
125
126#
127# GCOV-based kernel profiling
128#
129# CONFIG_GCOV_KERNEL is not set
130# CONFIG_SLOW_WORK is not set
131CONFIG_HAVE_GENERIC_DMA_COHERENT=y
132CONFIG_SLABINFO=y
133CONFIG_RT_MUTEXES=y
134CONFIG_BASE_SMALL=0
135# CONFIG_MODULES is not set
136CONFIG_BLOCK=y
137CONFIG_LBDAF=y
138# CONFIG_BLK_DEV_BSG is not set
139# CONFIG_BLK_DEV_INTEGRITY is not set
140
141#
142# IO Schedulers
143#
144CONFIG_IOSCHED_NOOP=y
145# CONFIG_IOSCHED_AS is not set
146# CONFIG_IOSCHED_DEADLINE is not set
147# CONFIG_IOSCHED_CFQ is not set
148# CONFIG_DEFAULT_AS is not set
149# CONFIG_DEFAULT_DEADLINE is not set
150# CONFIG_DEFAULT_CFQ is not set
151CONFIG_DEFAULT_NOOP=y
152CONFIG_DEFAULT_IOSCHED="noop"
153# CONFIG_FREEZER is not set
154
155#
156# System type
157#
158CONFIG_CPU_SH4=y
159CONFIG_CPU_SH4A=y
160CONFIG_CPU_SHX2=y
161CONFIG_ARCH_SHMOBILE=y
162# CONFIG_CPU_SUBTYPE_SH7619 is not set
163# CONFIG_CPU_SUBTYPE_SH7201 is not set
164# CONFIG_CPU_SUBTYPE_SH7203 is not set
165# CONFIG_CPU_SUBTYPE_SH7206 is not set
166# CONFIG_CPU_SUBTYPE_SH7263 is not set
167# CONFIG_CPU_SUBTYPE_MXG is not set
168# CONFIG_CPU_SUBTYPE_SH7705 is not set
169# CONFIG_CPU_SUBTYPE_SH7706 is not set
170# CONFIG_CPU_SUBTYPE_SH7707 is not set
171# CONFIG_CPU_SUBTYPE_SH7708 is not set
172# CONFIG_CPU_SUBTYPE_SH7709 is not set
173# CONFIG_CPU_SUBTYPE_SH7710 is not set
174# CONFIG_CPU_SUBTYPE_SH7712 is not set
175# CONFIG_CPU_SUBTYPE_SH7720 is not set
176# CONFIG_CPU_SUBTYPE_SH7721 is not set
177# CONFIG_CPU_SUBTYPE_SH7750 is not set
178# CONFIG_CPU_SUBTYPE_SH7091 is not set
179# CONFIG_CPU_SUBTYPE_SH7750R is not set
180# CONFIG_CPU_SUBTYPE_SH7750S is not set
181# CONFIG_CPU_SUBTYPE_SH7751 is not set
182# CONFIG_CPU_SUBTYPE_SH7751R is not set
183# CONFIG_CPU_SUBTYPE_SH7760 is not set
184# CONFIG_CPU_SUBTYPE_SH4_202 is not set
185# CONFIG_CPU_SUBTYPE_SH7723 is not set
186CONFIG_CPU_SUBTYPE_SH7724=y
187# CONFIG_CPU_SUBTYPE_SH7763 is not set
188# CONFIG_CPU_SUBTYPE_SH7770 is not set
189# CONFIG_CPU_SUBTYPE_SH7780 is not set
190# CONFIG_CPU_SUBTYPE_SH7785 is not set
191# CONFIG_CPU_SUBTYPE_SH7786 is not set
192# CONFIG_CPU_SUBTYPE_SHX3 is not set
193# CONFIG_CPU_SUBTYPE_SH7343 is not set
194# CONFIG_CPU_SUBTYPE_SH7722 is not set
195# CONFIG_CPU_SUBTYPE_SH7366 is not set
196
197#
198# Memory management options
199#
200CONFIG_QUICKLIST=y
201CONFIG_MMU=y
202CONFIG_PAGE_OFFSET=0x80000000
203CONFIG_FORCE_MAX_ZONEORDER=11
204CONFIG_MEMORY_START=0x08000000
205CONFIG_MEMORY_SIZE=0x08000000
206CONFIG_29BIT=y
207# CONFIG_X2TLB is not set
208CONFIG_VSYSCALL=y
209CONFIG_ARCH_FLATMEM_ENABLE=y
210CONFIG_ARCH_SPARSEMEM_ENABLE=y
211CONFIG_ARCH_SPARSEMEM_DEFAULT=y
212CONFIG_MAX_ACTIVE_REGIONS=1
213CONFIG_ARCH_POPULATES_NODE_MAP=y
214CONFIG_ARCH_SELECT_MEMORY_MODEL=y
215CONFIG_PAGE_SIZE_4KB=y
216# CONFIG_PAGE_SIZE_8KB is not set
217# CONFIG_PAGE_SIZE_16KB is not set
218# CONFIG_PAGE_SIZE_64KB is not set
219CONFIG_SELECT_MEMORY_MODEL=y
220CONFIG_FLATMEM_MANUAL=y
221# CONFIG_DISCONTIGMEM_MANUAL is not set
222# CONFIG_SPARSEMEM_MANUAL is not set
223CONFIG_FLATMEM=y
224CONFIG_FLAT_NODE_MEM_MAP=y
225CONFIG_SPARSEMEM_STATIC=y
226CONFIG_PAGEFLAGS_EXTENDED=y
227CONFIG_SPLIT_PTLOCK_CPUS=4
228# CONFIG_PHYS_ADDR_T_64BIT is not set
229CONFIG_ZONE_DMA_FLAG=0
230CONFIG_NR_QUICK=2
231CONFIG_HAVE_MLOCK=y
232CONFIG_HAVE_MLOCKED_PAGE_BIT=y
233CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
234
235#
236# Cache configuration
237#
238CONFIG_CACHE_WRITEBACK=y
239# CONFIG_CACHE_WRITETHROUGH is not set
240# CONFIG_CACHE_OFF is not set
241
242#
243# Processor features
244#
245CONFIG_CPU_LITTLE_ENDIAN=y
246# CONFIG_CPU_BIG_ENDIAN is not set
247CONFIG_SH_FPU=y
248# CONFIG_SH_STORE_QUEUES is not set
249CONFIG_CPU_HAS_INTEVT=y
250CONFIG_CPU_HAS_SR_RB=y
251CONFIG_CPU_HAS_FPU=y
252
253#
254# Board support
255#
256# CONFIG_SH_7724_SOLUTION_ENGINE is not set
257CONFIG_SH_KFR2R09=y
258
259#
260# Timer and clock configuration
261#
262# CONFIG_SH_TIMER_TMU is not set
263CONFIG_SH_TIMER_CMT=y
264CONFIG_SH_PCLK_FREQ=33333333
265CONFIG_SH_CLK_CPG=y
266CONFIG_TICK_ONESHOT=y
267CONFIG_NO_HZ=y
268# CONFIG_HIGH_RES_TIMERS is not set
269CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
270
271#
272# CPU Frequency scaling
273#
274# CONFIG_CPU_FREQ is not set
275
276#
277# DMA support
278#
279# CONFIG_SH_DMA is not set
280
281#
282# Companion Chips
283#
284
285#
286# Additional SuperH Device Drivers
287#
288# CONFIG_HEARTBEAT is not set
289# CONFIG_PUSH_SWITCH is not set
290
291#
292# Kernel features
293#
294# CONFIG_HZ_100 is not set
295# CONFIG_HZ_250 is not set
296# CONFIG_HZ_300 is not set
297CONFIG_HZ_1000=y
298CONFIG_HZ=1000
299# CONFIG_SCHED_HRTICK is not set
300CONFIG_KEXEC=y
301# CONFIG_CRASH_DUMP is not set
302# CONFIG_SECCOMP is not set
303# CONFIG_PREEMPT_NONE is not set
304CONFIG_PREEMPT_VOLUNTARY=y
305# CONFIG_PREEMPT is not set
306CONFIG_GUSA=y
307# CONFIG_SPARSE_IRQ is not set
308
309#
310# Boot options
311#
312CONFIG_ZERO_PAGE_OFFSET=0x00001000
313CONFIG_BOOT_LINK_OFFSET=0x00800000
314CONFIG_ENTRY_OFFSET=0x00001000
315CONFIG_CMDLINE_BOOL=y
316CONFIG_CMDLINE="console=ttySC1,115200"
317
318#
319# Bus options
320#
321# CONFIG_ARCH_SUPPORTS_MSI is not set
322# CONFIG_PCCARD is not set
323
324#
325# Executable file formats
326#
327CONFIG_BINFMT_ELF=y
328# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
329# CONFIG_HAVE_AOUT is not set
330# CONFIG_BINFMT_MISC is not set
331
332#
333# Power management options (EXPERIMENTAL)
334#
335CONFIG_PM=y
336# CONFIG_PM_DEBUG is not set
337# CONFIG_SUSPEND is not set
338# CONFIG_HIBERNATION is not set
339CONFIG_CPU_IDLE=y
340CONFIG_CPU_IDLE_GOV_LADDER=y
341CONFIG_CPU_IDLE_GOV_MENU=y
342CONFIG_NET=y
343
344#
345# Networking options
346#
347CONFIG_PACKET=y
348CONFIG_PACKET_MMAP=y
349CONFIG_UNIX=y
350# CONFIG_NET_KEY is not set
351CONFIG_INET=y
352# CONFIG_IP_MULTICAST is not set
353# CONFIG_IP_ADVANCED_ROUTER is not set
354CONFIG_IP_FIB_HASH=y
355# CONFIG_IP_PNP is not set
356# CONFIG_NET_IPIP is not set
357# CONFIG_NET_IPGRE is not set
358# CONFIG_ARPD is not set
359# CONFIG_SYN_COOKIES is not set
360# CONFIG_INET_AH is not set
361# CONFIG_INET_ESP is not set
362# CONFIG_INET_IPCOMP is not set
363# CONFIG_INET_XFRM_TUNNEL is not set
364# CONFIG_INET_TUNNEL is not set
365# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
366# CONFIG_INET_XFRM_MODE_TUNNEL is not set
367# CONFIG_INET_XFRM_MODE_BEET is not set
368# CONFIG_INET_LRO is not set
369# CONFIG_INET_DIAG is not set
370# CONFIG_TCP_CONG_ADVANCED is not set
371CONFIG_TCP_CONG_CUBIC=y
372CONFIG_DEFAULT_TCP_CONG="cubic"
373# CONFIG_TCP_MD5SIG is not set
374# CONFIG_IPV6 is not set
375# CONFIG_NETWORK_SECMARK is not set
376# CONFIG_NETFILTER is not set
377# CONFIG_IP_DCCP is not set
378# CONFIG_IP_SCTP is not set
379# CONFIG_TIPC is not set
380# CONFIG_ATM is not set
381# CONFIG_BRIDGE is not set
382# CONFIG_NET_DSA is not set
383# CONFIG_VLAN_8021Q is not set
384# CONFIG_DECNET is not set
385# CONFIG_LLC2 is not set
386# CONFIG_IPX is not set
387# CONFIG_ATALK is not set
388# CONFIG_X25 is not set
389# CONFIG_LAPB is not set
390# CONFIG_ECONET is not set
391# CONFIG_WAN_ROUTER is not set
392# CONFIG_PHONET is not set
393# CONFIG_IEEE802154 is not set
394# CONFIG_NET_SCHED is not set
395# CONFIG_DCB is not set
396
397#
398# Network testing
399#
400# CONFIG_NET_PKTGEN is not set
401# CONFIG_HAMRADIO is not set
402# CONFIG_CAN is not set
403# CONFIG_IRDA is not set
404# CONFIG_BT is not set
405# CONFIG_AF_RXRPC is not set
406# CONFIG_WIRELESS is not set
407# CONFIG_WIMAX is not set
408# CONFIG_RFKILL is not set
409# CONFIG_NET_9P is not set
410
411#
412# Device Drivers
413#
414
415#
416# Generic Driver Options
417#
418CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
419CONFIG_STANDALONE=y
420CONFIG_PREVENT_FIRMWARE_BUILD=y
421CONFIG_FW_LOADER=y
422CONFIG_FIRMWARE_IN_KERNEL=y
423CONFIG_EXTRA_FIRMWARE=""
424# CONFIG_SYS_HYPERVISOR is not set
425# CONFIG_CONNECTOR is not set
426CONFIG_MTD=y
427# CONFIG_MTD_DEBUG is not set
428CONFIG_MTD_CONCAT=y
429CONFIG_MTD_PARTITIONS=y
430# CONFIG_MTD_REDBOOT_PARTS is not set
431CONFIG_MTD_CMDLINE_PARTS=y
432# CONFIG_MTD_AR7_PARTS is not set
433
434#
435# User Modules And Translation Layers
436#
437CONFIG_MTD_CHAR=y
438CONFIG_MTD_BLKDEVS=y
439CONFIG_MTD_BLOCK=y
440# CONFIG_FTL is not set
441# CONFIG_NFTL is not set
442# CONFIG_INFTL is not set
443# CONFIG_RFD_FTL is not set
444# CONFIG_SSFDC is not set
445# CONFIG_MTD_OOPS is not set
446
447#
448# RAM/ROM/Flash chip drivers
449#
450CONFIG_MTD_CFI=y
451# CONFIG_MTD_JEDECPROBE is not set
452CONFIG_MTD_GEN_PROBE=y
453# CONFIG_MTD_CFI_ADV_OPTIONS is not set
454CONFIG_MTD_MAP_BANK_WIDTH_1=y
455CONFIG_MTD_MAP_BANK_WIDTH_2=y
456CONFIG_MTD_MAP_BANK_WIDTH_4=y
457# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
458# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
459# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
460CONFIG_MTD_CFI_I1=y
461CONFIG_MTD_CFI_I2=y
462# CONFIG_MTD_CFI_I4 is not set
463# CONFIG_MTD_CFI_I8 is not set
464CONFIG_MTD_CFI_INTELEXT=y
465# CONFIG_MTD_CFI_AMDSTD is not set
466# CONFIG_MTD_CFI_STAA is not set
467CONFIG_MTD_CFI_UTIL=y
468# CONFIG_MTD_RAM is not set
469# CONFIG_MTD_ROM is not set
470# CONFIG_MTD_ABSENT is not set
471
472#
473# Mapping drivers for chip access
474#
475# CONFIG_MTD_COMPLEX_MAPPINGS is not set
476CONFIG_MTD_PHYSMAP=y
477# CONFIG_MTD_PHYSMAP_COMPAT is not set
478# CONFIG_MTD_PLATRAM is not set
479
480#
481# Self-contained MTD device drivers
482#
483# CONFIG_MTD_SLRAM is not set
484# CONFIG_MTD_PHRAM is not set
485# CONFIG_MTD_MTDRAM is not set
486# CONFIG_MTD_BLOCK2MTD is not set
487
488#
489# Disk-On-Chip Device Drivers
490#
491# CONFIG_MTD_DOC2000 is not set
492# CONFIG_MTD_DOC2001 is not set
493# CONFIG_MTD_DOC2001PLUS is not set
494# CONFIG_MTD_NAND is not set
495# CONFIG_MTD_ONENAND is not set
496
497#
498# LPDDR flash memory drivers
499#
500# CONFIG_MTD_LPDDR is not set
501
502#
503# UBI - Unsorted block images
504#
505CONFIG_MTD_UBI=y
506CONFIG_MTD_UBI_WL_THRESHOLD=4096
507CONFIG_MTD_UBI_BEB_RESERVE=1
508# CONFIG_MTD_UBI_GLUEBI is not set
509
510#
511# UBI debugging options
512#
513# CONFIG_MTD_UBI_DEBUG is not set
514# CONFIG_PARPORT is not set
515CONFIG_BLK_DEV=y
516# CONFIG_BLK_DEV_COW_COMMON is not set
517# CONFIG_BLK_DEV_LOOP is not set
518# CONFIG_BLK_DEV_NBD is not set
519# CONFIG_BLK_DEV_RAM is not set
520# CONFIG_CDROM_PKTCDVD is not set
521# CONFIG_ATA_OVER_ETH is not set
522# CONFIG_BLK_DEV_HD is not set
523# CONFIG_MISC_DEVICES is not set
524CONFIG_HAVE_IDE=y
525# CONFIG_IDE is not set
526
527#
528# SCSI device support
529#
530# CONFIG_RAID_ATTRS is not set
531# CONFIG_SCSI is not set
532# CONFIG_SCSI_DMA is not set
533# CONFIG_SCSI_NETLINK is not set
534# CONFIG_ATA is not set
535# CONFIG_MD is not set
536# CONFIG_NETDEVICES is not set
537# CONFIG_ISDN is not set
538# CONFIG_PHONE is not set
539
540#
541# Input device support
542#
543CONFIG_INPUT=y
544# CONFIG_INPUT_FF_MEMLESS is not set
545# CONFIG_INPUT_POLLDEV is not set
546
547#
548# Userland interfaces
549#
550# CONFIG_INPUT_MOUSEDEV is not set
551# CONFIG_INPUT_JOYDEV is not set
552CONFIG_INPUT_EVDEV=y
553# CONFIG_INPUT_EVBUG is not set
554
555#
556# Input Device Drivers
557#
558CONFIG_INPUT_KEYBOARD=y
559# CONFIG_KEYBOARD_ATKBD is not set
560# CONFIG_KEYBOARD_LKKBD is not set
561# CONFIG_KEYBOARD_GPIO is not set
562# CONFIG_KEYBOARD_MATRIX is not set
563# CONFIG_KEYBOARD_NEWTON is not set
564# CONFIG_KEYBOARD_STOWAWAY is not set
565# CONFIG_KEYBOARD_SUNKBD is not set
566CONFIG_KEYBOARD_SH_KEYSC=y
567# CONFIG_KEYBOARD_XTKBD is not set
568# CONFIG_INPUT_MOUSE is not set
569# CONFIG_INPUT_JOYSTICK is not set
570# CONFIG_INPUT_TABLET is not set
571# CONFIG_INPUT_TOUCHSCREEN is not set
572# CONFIG_INPUT_MISC is not set
573
574#
575# Hardware I/O ports
576#
577# CONFIG_SERIO is not set
578# CONFIG_GAMEPORT is not set
579
580#
581# Character devices
582#
583CONFIG_VT=y
584CONFIG_CONSOLE_TRANSLATIONS=y
585CONFIG_VT_CONSOLE=y
586CONFIG_HW_CONSOLE=y
587CONFIG_VT_HW_CONSOLE_BINDING=y
588CONFIG_DEVKMEM=y
589# CONFIG_SERIAL_NONSTANDARD is not set
590
591#
592# Serial drivers
593#
594# CONFIG_SERIAL_8250 is not set
595
596#
597# Non-8250 serial port support
598#
599CONFIG_SERIAL_SH_SCI=y
600CONFIG_SERIAL_SH_SCI_NR_UARTS=6
601CONFIG_SERIAL_SH_SCI_CONSOLE=y
602CONFIG_SERIAL_CORE=y
603CONFIG_SERIAL_CORE_CONSOLE=y
604CONFIG_UNIX98_PTYS=y
605# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
606CONFIG_LEGACY_PTYS=y
607CONFIG_LEGACY_PTY_COUNT=256
608# CONFIG_IPMI_HANDLER is not set
609CONFIG_HW_RANDOM=y
610# CONFIG_HW_RANDOM_TIMERIOMEM is not set
611# CONFIG_R3964 is not set
612# CONFIG_RAW_DRIVER is not set
613# CONFIG_TCG_TPM is not set
614CONFIG_I2C=y
615CONFIG_I2C_BOARDINFO=y
616# CONFIG_I2C_CHARDEV is not set
617CONFIG_I2C_HELPER_AUTO=y
618
619#
620# I2C Hardware Bus support
621#
622
623#
624# I2C system bus drivers (mostly embedded / system-on-chip)
625#
626# CONFIG_I2C_DESIGNWARE is not set
627# CONFIG_I2C_GPIO is not set
628# CONFIG_I2C_OCORES is not set
629CONFIG_I2C_SH_MOBILE=y
630# CONFIG_I2C_SIMTEC is not set
631
632#
633# External I2C/SMBus adapter drivers
634#
635# CONFIG_I2C_PARPORT_LIGHT is not set
636# CONFIG_I2C_TAOS_EVM is not set
637
638#
639# Other I2C/SMBus bus drivers
640#
641# CONFIG_I2C_PCA_PLATFORM is not set
642
643#
644# Miscellaneous I2C Chip support
645#
646# CONFIG_DS1682 is not set
647# CONFIG_SENSORS_PCF8574 is not set
648# CONFIG_PCF8575 is not set
649# CONFIG_SENSORS_PCA9539 is not set
650# CONFIG_SENSORS_TSL2550 is not set
651# CONFIG_I2C_DEBUG_CORE is not set
652# CONFIG_I2C_DEBUG_ALGO is not set
653# CONFIG_I2C_DEBUG_BUS is not set
654# CONFIG_I2C_DEBUG_CHIP is not set
655# CONFIG_SPI is not set
656
657#
658# PPS support
659#
660# CONFIG_PPS is not set
661CONFIG_ARCH_REQUIRE_GPIOLIB=y
662CONFIG_GPIOLIB=y
663CONFIG_GPIO_SYSFS=y
664
665#
666# Memory mapped GPIO expanders:
667#
668
669#
670# I2C GPIO expanders:
671#
672# CONFIG_GPIO_MAX732X is not set
673# CONFIG_GPIO_PCA953X is not set
674# CONFIG_GPIO_PCF857X is not set
675
676#
677# PCI GPIO expanders:
678#
679
680#
681# SPI GPIO expanders:
682#
683# CONFIG_W1 is not set
684# CONFIG_POWER_SUPPLY is not set
685# CONFIG_HWMON is not set
686# CONFIG_THERMAL is not set
687# CONFIG_THERMAL_HWMON is not set
688# CONFIG_WATCHDOG is not set
689CONFIG_SSB_POSSIBLE=y
690
691#
692# Sonics Silicon Backplane
693#
694# CONFIG_SSB is not set
695
696#
697# Multifunction device drivers
698#
699# CONFIG_MFD_CORE is not set
700# CONFIG_MFD_SM501 is not set
701# CONFIG_HTC_PASIC3 is not set
702# CONFIG_TPS65010 is not set
703# CONFIG_TWL4030_CORE is not set
704# CONFIG_MFD_TMIO is not set
705# CONFIG_PMIC_DA903X is not set
706# CONFIG_MFD_WM8400 is not set
707# CONFIG_MFD_WM8350_I2C is not set
708# CONFIG_MFD_PCF50633 is not set
709# CONFIG_AB3100_CORE is not set
710# CONFIG_REGULATOR is not set
711# CONFIG_MEDIA_SUPPORT is not set
712
713#
714# Graphics support
715#
716# CONFIG_VGASTATE is not set
717# CONFIG_VIDEO_OUTPUT_CONTROL is not set
718# CONFIG_FB is not set
719# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
720
721#
722# Display device support
723#
724# CONFIG_DISPLAY_SUPPORT is not set
725
726#
727# Console display driver support
728#
729CONFIG_DUMMY_CONSOLE=y
730# CONFIG_SOUND is not set
731# CONFIG_HID_SUPPORT is not set
732# CONFIG_USB_SUPPORT is not set
733# CONFIG_MMC is not set
734# CONFIG_MEMSTICK is not set
735# CONFIG_NEW_LEDS is not set
736# CONFIG_ACCESSIBILITY is not set
737CONFIG_RTC_LIB=y
738# CONFIG_RTC_CLASS is not set
739# CONFIG_DMADEVICES is not set
740# CONFIG_AUXDISPLAY is not set
741CONFIG_UIO=y
742# CONFIG_UIO_PDRV is not set
743CONFIG_UIO_PDRV_GENIRQ=y
744# CONFIG_UIO_SMX is not set
745# CONFIG_UIO_SERCOS3 is not set
746
747#
748# TI VLYNQ
749#
750# CONFIG_STAGING is not set
751
752#
753# File systems
754#
755# CONFIG_EXT2_FS is not set
756# CONFIG_EXT3_FS is not set
757# CONFIG_EXT4_FS is not set
758# CONFIG_REISERFS_FS is not set
759# CONFIG_JFS_FS is not set
760# CONFIG_FS_POSIX_ACL is not set
761# CONFIG_XFS_FS is not set
762# CONFIG_GFS2_FS is not set
763# CONFIG_OCFS2_FS is not set
764# CONFIG_BTRFS_FS is not set
765CONFIG_FILE_LOCKING=y
766# CONFIG_FSNOTIFY is not set
767# CONFIG_INOTIFY is not set
768# CONFIG_QUOTA is not set
769# CONFIG_AUTOFS_FS is not set
770# CONFIG_AUTOFS4_FS is not set
771# CONFIG_FUSE_FS is not set
772
773#
774# Caches
775#
776# CONFIG_FSCACHE is not set
777
778#
779# CD-ROM/DVD Filesystems
780#
781# CONFIG_ISO9660_FS is not set
782# CONFIG_UDF_FS is not set
783
784#
785# DOS/FAT/NT Filesystems
786#
787# CONFIG_MSDOS_FS is not set
788# CONFIG_VFAT_FS is not set
789# CONFIG_NTFS_FS is not set
790
791#
792# Pseudo filesystems
793#
794CONFIG_PROC_FS=y
795CONFIG_PROC_KCORE=y
796CONFIG_PROC_SYSCTL=y
797CONFIG_PROC_PAGE_MONITOR=y
798CONFIG_SYSFS=y
799CONFIG_TMPFS=y
800# CONFIG_TMPFS_POSIX_ACL is not set
801# CONFIG_HUGETLBFS is not set
802# CONFIG_HUGETLB_PAGE is not set
803# CONFIG_CONFIGFS_FS is not set
804# CONFIG_MISC_FILESYSTEMS is not set
805# CONFIG_NETWORK_FILESYSTEMS is not set
806
807#
808# Partition Types
809#
810# CONFIG_PARTITION_ADVANCED is not set
811CONFIG_MSDOS_PARTITION=y
812# CONFIG_NLS is not set
813# CONFIG_DLM is not set
814
815#
816# Kernel hacking
817#
818CONFIG_TRACE_IRQFLAGS_SUPPORT=y
819# CONFIG_PRINTK_TIME is not set
820CONFIG_ENABLE_WARN_DEPRECATED=y
821# CONFIG_ENABLE_MUST_CHECK is not set
822CONFIG_FRAME_WARN=1024
823# CONFIG_MAGIC_SYSRQ is not set
824# CONFIG_UNUSED_SYMBOLS is not set
825CONFIG_DEBUG_FS=y
826# CONFIG_HEADERS_CHECK is not set
827# CONFIG_DEBUG_KERNEL is not set
828# CONFIG_DEBUG_BUGVERBOSE is not set
829# CONFIG_DEBUG_MEMORY_INIT is not set
830# CONFIG_RCU_CPU_STALL_DETECTOR is not set
831# CONFIG_LATENCYTOP is not set
832CONFIG_SYSCTL_SYSCALL_CHECK=y
833CONFIG_HAVE_FUNCTION_TRACER=y
834CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
835CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
836CONFIG_HAVE_DYNAMIC_FTRACE=y
837CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
838CONFIG_HAVE_FTRACE_SYSCALLS=y
839CONFIG_TRACING_SUPPORT=y
840# CONFIG_FTRACE is not set
841# CONFIG_DYNAMIC_DEBUG is not set
842# CONFIG_DMA_API_DEBUG is not set
843# CONFIG_SAMPLES is not set
844CONFIG_HAVE_ARCH_KGDB=y
845# CONFIG_SH_STANDARD_BIOS is not set
846# CONFIG_EARLY_SCIF_CONSOLE is not set
847
848#
849# Security options
850#
851# CONFIG_KEYS is not set
852# CONFIG_SECURITY is not set
853# CONFIG_SECURITYFS is not set
854# CONFIG_SECURITY_FILE_CAPABILITIES is not set
855# CONFIG_CRYPTO is not set
856# CONFIG_BINARY_PRINTF is not set
857
858#
859# Library routines
860#
861CONFIG_BITREVERSE=y
862CONFIG_GENERIC_FIND_LAST_BIT=y
863# CONFIG_CRC_CCITT is not set
864# CONFIG_CRC16 is not set
865CONFIG_CRC_T10DIF=y
866CONFIG_CRC_ITU_T=y
867CONFIG_CRC32=y
868CONFIG_CRC7=y
869# CONFIG_LIBCRC32C is not set
870CONFIG_ZLIB_INFLATE=y
871CONFIG_DECOMPRESS_GZIP=y
872CONFIG_HAS_IOMEM=y
873CONFIG_HAS_IOPORT=y
874CONFIG_HAS_DMA=y
875CONFIG_HAVE_LMB=y
876CONFIG_NLATTR=y
877CONFIG_GENERIC_ATOMIC64=y
diff --git a/arch/sh/tools/mach-types b/arch/sh/tools/mach-types
index fec3a53b8650..09eef360dde1 100644
--- a/arch/sh/tools/mach-types
+++ b/arch/sh/tools/mach-types
@@ -56,3 +56,4 @@ SH7785LCR SH_SH7785LCR
56URQUELL SH_URQUELL 56URQUELL SH_URQUELL
57ESPT SH_ESPT 57ESPT SH_ESPT
58POLARIS SH_POLARIS 58POLARIS SH_POLARIS
59KFR2R09 SH_KFR2R09
diff --git a/arch/x86/kernel/cpu/perf_counter.c b/arch/x86/kernel/cpu/perf_counter.c
index 36c3dc7b8991..a7aa8f900954 100644
--- a/arch/x86/kernel/cpu/perf_counter.c
+++ b/arch/x86/kernel/cpu/perf_counter.c
@@ -66,6 +66,52 @@ static DEFINE_PER_CPU(struct cpu_hw_counters, cpu_hw_counters) = {
66}; 66};
67 67
68/* 68/*
69 * Not sure about some of these
70 */
71static const u64 p6_perfmon_event_map[] =
72{
73 [PERF_COUNT_HW_CPU_CYCLES] = 0x0079,
74 [PERF_COUNT_HW_INSTRUCTIONS] = 0x00c0,
75 [PERF_COUNT_HW_CACHE_REFERENCES] = 0x0000,
76 [PERF_COUNT_HW_CACHE_MISSES] = 0x0000,
77 [PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = 0x00c4,
78 [PERF_COUNT_HW_BRANCH_MISSES] = 0x00c5,
79 [PERF_COUNT_HW_BUS_CYCLES] = 0x0062,
80};
81
82static u64 p6_pmu_event_map(int event)
83{
84 return p6_perfmon_event_map[event];
85}
86
87/*
88 * Counter setting that is specified not to count anything.
89 * We use this to effectively disable a counter.
90 *
91 * L2_RQSTS with 0 MESI unit mask.
92 */
93#define P6_NOP_COUNTER 0x0000002EULL
94
95static u64 p6_pmu_raw_event(u64 event)
96{
97#define P6_EVNTSEL_EVENT_MASK 0x000000FFULL
98#define P6_EVNTSEL_UNIT_MASK 0x0000FF00ULL
99#define P6_EVNTSEL_EDGE_MASK 0x00040000ULL
100#define P6_EVNTSEL_INV_MASK 0x00800000ULL
101#define P6_EVNTSEL_COUNTER_MASK 0xFF000000ULL
102
103#define P6_EVNTSEL_MASK \
104 (P6_EVNTSEL_EVENT_MASK | \
105 P6_EVNTSEL_UNIT_MASK | \
106 P6_EVNTSEL_EDGE_MASK | \
107 P6_EVNTSEL_INV_MASK | \
108 P6_EVNTSEL_COUNTER_MASK)
109
110 return event & P6_EVNTSEL_MASK;
111}
112
113
114/*
69 * Intel PerfMon v3. Used on Core2 and later. 115 * Intel PerfMon v3. Used on Core2 and later.
70 */ 116 */
71static const u64 intel_perfmon_event_map[] = 117static const u64 intel_perfmon_event_map[] =
@@ -666,6 +712,7 @@ static int __hw_perf_counter_init(struct perf_counter *counter)
666{ 712{
667 struct perf_counter_attr *attr = &counter->attr; 713 struct perf_counter_attr *attr = &counter->attr;
668 struct hw_perf_counter *hwc = &counter->hw; 714 struct hw_perf_counter *hwc = &counter->hw;
715 u64 config;
669 int err; 716 int err;
670 717
671 if (!x86_pmu_initialized()) 718 if (!x86_pmu_initialized())
@@ -718,14 +765,40 @@ static int __hw_perf_counter_init(struct perf_counter *counter)
718 765
719 if (attr->config >= x86_pmu.max_events) 766 if (attr->config >= x86_pmu.max_events)
720 return -EINVAL; 767 return -EINVAL;
768
721 /* 769 /*
722 * The generic map: 770 * The generic map:
723 */ 771 */
724 hwc->config |= x86_pmu.event_map(attr->config); 772 config = x86_pmu.event_map(attr->config);
773
774 if (config == 0)
775 return -ENOENT;
776
777 if (config == -1LL)
778 return -EINVAL;
779
780 hwc->config |= config;
725 781
726 return 0; 782 return 0;
727} 783}
728 784
785static void p6_pmu_disable_all(void)
786{
787 struct cpu_hw_counters *cpuc = &__get_cpu_var(cpu_hw_counters);
788 u64 val;
789
790 if (!cpuc->enabled)
791 return;
792
793 cpuc->enabled = 0;
794 barrier();
795
796 /* p6 only has one enable register */
797 rdmsrl(MSR_P6_EVNTSEL0, val);
798 val &= ~ARCH_PERFMON_EVENTSEL0_ENABLE;
799 wrmsrl(MSR_P6_EVNTSEL0, val);
800}
801
729static void intel_pmu_disable_all(void) 802static void intel_pmu_disable_all(void)
730{ 803{
731 wrmsrl(MSR_CORE_PERF_GLOBAL_CTRL, 0); 804 wrmsrl(MSR_CORE_PERF_GLOBAL_CTRL, 0);
@@ -767,6 +840,23 @@ void hw_perf_disable(void)
767 return x86_pmu.disable_all(); 840 return x86_pmu.disable_all();
768} 841}
769 842
843static void p6_pmu_enable_all(void)
844{
845 struct cpu_hw_counters *cpuc = &__get_cpu_var(cpu_hw_counters);
846 unsigned long val;
847
848 if (cpuc->enabled)
849 return;
850
851 cpuc->enabled = 1;
852 barrier();
853
854 /* p6 only has one enable register */
855 rdmsrl(MSR_P6_EVNTSEL0, val);
856 val |= ARCH_PERFMON_EVENTSEL0_ENABLE;
857 wrmsrl(MSR_P6_EVNTSEL0, val);
858}
859
770static void intel_pmu_enable_all(void) 860static void intel_pmu_enable_all(void)
771{ 861{
772 wrmsrl(MSR_CORE_PERF_GLOBAL_CTRL, x86_pmu.intel_ctrl); 862 wrmsrl(MSR_CORE_PERF_GLOBAL_CTRL, x86_pmu.intel_ctrl);
@@ -784,13 +874,13 @@ static void amd_pmu_enable_all(void)
784 barrier(); 874 barrier();
785 875
786 for (idx = 0; idx < x86_pmu.num_counters; idx++) { 876 for (idx = 0; idx < x86_pmu.num_counters; idx++) {
877 struct perf_counter *counter = cpuc->counters[idx];
787 u64 val; 878 u64 val;
788 879
789 if (!test_bit(idx, cpuc->active_mask)) 880 if (!test_bit(idx, cpuc->active_mask))
790 continue; 881 continue;
791 rdmsrl(MSR_K7_EVNTSEL0 + idx, val); 882
792 if (val & ARCH_PERFMON_EVENTSEL0_ENABLE) 883 val = counter->hw.config;
793 continue;
794 val |= ARCH_PERFMON_EVENTSEL0_ENABLE; 884 val |= ARCH_PERFMON_EVENTSEL0_ENABLE;
795 wrmsrl(MSR_K7_EVNTSEL0 + idx, val); 885 wrmsrl(MSR_K7_EVNTSEL0 + idx, val);
796 } 886 }
@@ -819,16 +909,13 @@ static inline void intel_pmu_ack_status(u64 ack)
819 909
820static inline void x86_pmu_enable_counter(struct hw_perf_counter *hwc, int idx) 910static inline void x86_pmu_enable_counter(struct hw_perf_counter *hwc, int idx)
821{ 911{
822 int err; 912 (void)checking_wrmsrl(hwc->config_base + idx,
823 err = checking_wrmsrl(hwc->config_base + idx,
824 hwc->config | ARCH_PERFMON_EVENTSEL0_ENABLE); 913 hwc->config | ARCH_PERFMON_EVENTSEL0_ENABLE);
825} 914}
826 915
827static inline void x86_pmu_disable_counter(struct hw_perf_counter *hwc, int idx) 916static inline void x86_pmu_disable_counter(struct hw_perf_counter *hwc, int idx)
828{ 917{
829 int err; 918 (void)checking_wrmsrl(hwc->config_base + idx, hwc->config);
830 err = checking_wrmsrl(hwc->config_base + idx,
831 hwc->config);
832} 919}
833 920
834static inline void 921static inline void
@@ -836,13 +923,24 @@ intel_pmu_disable_fixed(struct hw_perf_counter *hwc, int __idx)
836{ 923{
837 int idx = __idx - X86_PMC_IDX_FIXED; 924 int idx = __idx - X86_PMC_IDX_FIXED;
838 u64 ctrl_val, mask; 925 u64 ctrl_val, mask;
839 int err;
840 926
841 mask = 0xfULL << (idx * 4); 927 mask = 0xfULL << (idx * 4);
842 928
843 rdmsrl(hwc->config_base, ctrl_val); 929 rdmsrl(hwc->config_base, ctrl_val);
844 ctrl_val &= ~mask; 930 ctrl_val &= ~mask;
845 err = checking_wrmsrl(hwc->config_base, ctrl_val); 931 (void)checking_wrmsrl(hwc->config_base, ctrl_val);
932}
933
934static inline void
935p6_pmu_disable_counter(struct hw_perf_counter *hwc, int idx)
936{
937 struct cpu_hw_counters *cpuc = &__get_cpu_var(cpu_hw_counters);
938 u64 val = P6_NOP_COUNTER;
939
940 if (cpuc->enabled)
941 val |= ARCH_PERFMON_EVENTSEL0_ENABLE;
942
943 (void)checking_wrmsrl(hwc->config_base + idx, val);
846} 944}
847 945
848static inline void 946static inline void
@@ -943,6 +1041,19 @@ intel_pmu_enable_fixed(struct hw_perf_counter *hwc, int __idx)
943 err = checking_wrmsrl(hwc->config_base, ctrl_val); 1041 err = checking_wrmsrl(hwc->config_base, ctrl_val);
944} 1042}
945 1043
1044static void p6_pmu_enable_counter(struct hw_perf_counter *hwc, int idx)
1045{
1046 struct cpu_hw_counters *cpuc = &__get_cpu_var(cpu_hw_counters);
1047 u64 val;
1048
1049 val = hwc->config;
1050 if (cpuc->enabled)
1051 val |= ARCH_PERFMON_EVENTSEL0_ENABLE;
1052
1053 (void)checking_wrmsrl(hwc->config_base + idx, val);
1054}
1055
1056
946static void intel_pmu_enable_counter(struct hw_perf_counter *hwc, int idx) 1057static void intel_pmu_enable_counter(struct hw_perf_counter *hwc, int idx)
947{ 1058{
948 if (unlikely(hwc->config_base == MSR_ARCH_PERFMON_FIXED_CTR_CTRL)) { 1059 if (unlikely(hwc->config_base == MSR_ARCH_PERFMON_FIXED_CTR_CTRL)) {
@@ -959,8 +1070,6 @@ static void amd_pmu_enable_counter(struct hw_perf_counter *hwc, int idx)
959 1070
960 if (cpuc->enabled) 1071 if (cpuc->enabled)
961 x86_pmu_enable_counter(hwc, idx); 1072 x86_pmu_enable_counter(hwc, idx);
962 else
963 x86_pmu_disable_counter(hwc, idx);
964} 1073}
965 1074
966static int 1075static int
@@ -1176,6 +1285,49 @@ static void intel_pmu_reset(void)
1176 local_irq_restore(flags); 1285 local_irq_restore(flags);
1177} 1286}
1178 1287
1288static int p6_pmu_handle_irq(struct pt_regs *regs)
1289{
1290 struct perf_sample_data data;
1291 struct cpu_hw_counters *cpuc;
1292 struct perf_counter *counter;
1293 struct hw_perf_counter *hwc;
1294 int idx, handled = 0;
1295 u64 val;
1296
1297 data.regs = regs;
1298 data.addr = 0;
1299
1300 cpuc = &__get_cpu_var(cpu_hw_counters);
1301
1302 for (idx = 0; idx < x86_pmu.num_counters; idx++) {
1303 if (!test_bit(idx, cpuc->active_mask))
1304 continue;
1305
1306 counter = cpuc->counters[idx];
1307 hwc = &counter->hw;
1308
1309 val = x86_perf_counter_update(counter, hwc, idx);
1310 if (val & (1ULL << (x86_pmu.counter_bits - 1)))
1311 continue;
1312
1313 /*
1314 * counter overflow
1315 */
1316 handled = 1;
1317 data.period = counter->hw.last_period;
1318
1319 if (!x86_perf_counter_set_period(counter, hwc, idx))
1320 continue;
1321
1322 if (perf_counter_overflow(counter, 1, &data))
1323 p6_pmu_disable_counter(hwc, idx);
1324 }
1325
1326 if (handled)
1327 inc_irq_stat(apic_perf_irqs);
1328
1329 return handled;
1330}
1179 1331
1180/* 1332/*
1181 * This handler is triggered by the local APIC, so the APIC IRQ handling 1333 * This handler is triggered by the local APIC, so the APIC IRQ handling
@@ -1185,14 +1337,13 @@ static int intel_pmu_handle_irq(struct pt_regs *regs)
1185{ 1337{
1186 struct perf_sample_data data; 1338 struct perf_sample_data data;
1187 struct cpu_hw_counters *cpuc; 1339 struct cpu_hw_counters *cpuc;
1188 int bit, cpu, loops; 1340 int bit, loops;
1189 u64 ack, status; 1341 u64 ack, status;
1190 1342
1191 data.regs = regs; 1343 data.regs = regs;
1192 data.addr = 0; 1344 data.addr = 0;
1193 1345
1194 cpu = smp_processor_id(); 1346 cpuc = &__get_cpu_var(cpu_hw_counters);
1195 cpuc = &per_cpu(cpu_hw_counters, cpu);
1196 1347
1197 perf_disable(); 1348 perf_disable();
1198 status = intel_pmu_get_status(); 1349 status = intel_pmu_get_status();
@@ -1249,14 +1400,13 @@ static int amd_pmu_handle_irq(struct pt_regs *regs)
1249 struct cpu_hw_counters *cpuc; 1400 struct cpu_hw_counters *cpuc;
1250 struct perf_counter *counter; 1401 struct perf_counter *counter;
1251 struct hw_perf_counter *hwc; 1402 struct hw_perf_counter *hwc;
1252 int cpu, idx, handled = 0; 1403 int idx, handled = 0;
1253 u64 val; 1404 u64 val;
1254 1405
1255 data.regs = regs; 1406 data.regs = regs;
1256 data.addr = 0; 1407 data.addr = 0;
1257 1408
1258 cpu = smp_processor_id(); 1409 cpuc = &__get_cpu_var(cpu_hw_counters);
1259 cpuc = &per_cpu(cpu_hw_counters, cpu);
1260 1410
1261 for (idx = 0; idx < x86_pmu.num_counters; idx++) { 1411 for (idx = 0; idx < x86_pmu.num_counters; idx++) {
1262 if (!test_bit(idx, cpuc->active_mask)) 1412 if (!test_bit(idx, cpuc->active_mask))
@@ -1353,6 +1503,32 @@ static __read_mostly struct notifier_block perf_counter_nmi_notifier = {
1353 .priority = 1 1503 .priority = 1
1354}; 1504};
1355 1505
1506static struct x86_pmu p6_pmu = {
1507 .name = "p6",
1508 .handle_irq = p6_pmu_handle_irq,
1509 .disable_all = p6_pmu_disable_all,
1510 .enable_all = p6_pmu_enable_all,
1511 .enable = p6_pmu_enable_counter,
1512 .disable = p6_pmu_disable_counter,
1513 .eventsel = MSR_P6_EVNTSEL0,
1514 .perfctr = MSR_P6_PERFCTR0,
1515 .event_map = p6_pmu_event_map,
1516 .raw_event = p6_pmu_raw_event,
1517 .max_events = ARRAY_SIZE(p6_perfmon_event_map),
1518 .max_period = (1ULL << 31) - 1,
1519 .version = 0,
1520 .num_counters = 2,
1521 /*
1522 * Counters have 40 bits implemented. However they are designed such
1523 * that bits [32-39] are sign extensions of bit 31. As such the
1524 * effective width of a counter for P6-like PMU is 32 bits only.
1525 *
1526 * See IA-32 Intel Architecture Software developer manual Vol 3B
1527 */
1528 .counter_bits = 32,
1529 .counter_mask = (1ULL << 32) - 1,
1530};
1531
1356static struct x86_pmu intel_pmu = { 1532static struct x86_pmu intel_pmu = {
1357 .name = "Intel", 1533 .name = "Intel",
1358 .handle_irq = intel_pmu_handle_irq, 1534 .handle_irq = intel_pmu_handle_irq,
@@ -1392,6 +1568,37 @@ static struct x86_pmu amd_pmu = {
1392 .max_period = (1ULL << 47) - 1, 1568 .max_period = (1ULL << 47) - 1,
1393}; 1569};
1394 1570
1571static int p6_pmu_init(void)
1572{
1573 switch (boot_cpu_data.x86_model) {
1574 case 1:
1575 case 3: /* Pentium Pro */
1576 case 5:
1577 case 6: /* Pentium II */
1578 case 7:
1579 case 8:
1580 case 11: /* Pentium III */
1581 break;
1582 case 9:
1583 case 13:
1584 /* Pentium M */
1585 break;
1586 default:
1587 pr_cont("unsupported p6 CPU model %d ",
1588 boot_cpu_data.x86_model);
1589 return -ENODEV;
1590 }
1591
1592 if (!cpu_has_apic) {
1593 pr_info("no Local APIC, try rebooting with lapic");
1594 return -ENODEV;
1595 }
1596
1597 x86_pmu = p6_pmu;
1598
1599 return 0;
1600}
1601
1395static int intel_pmu_init(void) 1602static int intel_pmu_init(void)
1396{ 1603{
1397 union cpuid10_edx edx; 1604 union cpuid10_edx edx;
@@ -1400,8 +1607,14 @@ static int intel_pmu_init(void)
1400 unsigned int ebx; 1607 unsigned int ebx;
1401 int version; 1608 int version;
1402 1609
1403 if (!cpu_has(&boot_cpu_data, X86_FEATURE_ARCH_PERFMON)) 1610 if (!cpu_has(&boot_cpu_data, X86_FEATURE_ARCH_PERFMON)) {
1611 /* check for P6 processor family */
1612 if (boot_cpu_data.x86 == 6) {
1613 return p6_pmu_init();
1614 } else {
1404 return -ENODEV; 1615 return -ENODEV;
1616 }
1617 }
1405 1618
1406 /* 1619 /*
1407 * Check whether the Architectural PerfMon supports 1620 * Check whether the Architectural PerfMon supports