aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--Kbuild3
-rw-r--r--MAINTAINERS89
-rw-r--r--Makefile3
-rw-r--r--arch/blackfin/Kconfig12
-rw-r--r--arch/blackfin/configs/BF527-EZKIT_defconfig348
-rw-r--r--arch/blackfin/configs/BF548-EZKIT_defconfig416
-rw-r--r--arch/blackfin/configs/IP0X_defconfig2
-rw-r--r--arch/blackfin/kernel/bfin_dma_5xx.c11
-rw-r--r--arch/blackfin/kernel/bfin_gpio.c19
-rw-r--r--arch/blackfin/kernel/bfin_ksyms.c2
-rw-r--r--arch/blackfin/kernel/traps.c20
-rw-r--r--arch/blackfin/lib/checksum.c21
-rw-r--r--arch/blackfin/lib/ins.S21
-rw-r--r--arch/blackfin/lib/outs.S16
-rw-r--r--arch/blackfin/mach-bf533/boards/stamp.c24
-rw-r--r--arch/ia64/kvm/Makefile3
-rw-r--r--arch/ia64/kvm/memcpy.S1
-rw-r--r--arch/ia64/kvm/memset.S1
-rw-r--r--arch/sh/kernel/cpu/sh4a/clock-sh7785.c2
-rw-r--r--arch/sh/kernel/entry-common.S12
-rw-r--r--arch/sh/kernel/head_32.S4
-rw-r--r--arch/sh/kernel/kgdb_stub.c11
-rw-r--r--arch/sh/kernel/setup.c11
-rw-r--r--arch/sh/kernel/traps.c10
-rw-r--r--arch/sh/lib/memcpy-sh4.S22
-rw-r--r--arch/x86/kvm/i8254.c2
-rw-r--r--arch/x86/kvm/lapic.c2
-rw-r--r--arch/x86/kvm/x86_emulate.c7
-rw-r--r--drivers/ata/libata-acpi.c75
-rw-r--r--drivers/ata/libata-core.c40
-rw-r--r--drivers/ata/libata-eh.c207
-rw-r--r--drivers/ata/libata-pmp.c44
-rw-r--r--drivers/ata/libata-scsi.c6
-rw-r--r--drivers/ata/pata_ali.c10
-rw-r--r--drivers/ata/pata_amd.c14
-rw-r--r--drivers/ata/pata_at32.c2
-rw-r--r--drivers/ata/pata_bf54x.c5
-rw-r--r--drivers/ata/pata_cypress.c8
-rw-r--r--drivers/ata/pata_legacy.c50
-rw-r--r--drivers/ata/pata_ns87410.c6
-rw-r--r--drivers/ata/pata_ns87415.c4
-rw-r--r--drivers/ata/pata_qdi.c16
-rw-r--r--drivers/ata/pata_sl82c105.c2
-rw-r--r--drivers/ata/pata_via.c14
-rw-r--r--drivers/ata/pata_winbond.c6
-rw-r--r--drivers/ata/sata_mv.c163
-rw-r--r--drivers/ata/sata_promise.c148
-rw-r--r--drivers/ata/sata_sil24.c11
-rw-r--r--drivers/char/drm/drm.h17
-rw-r--r--drivers/char/drm/drmP.h91
-rw-r--r--drivers/char/drm/drm_fops.c7
-rw-r--r--drivers/char/drm/drm_irq.c381
-rw-r--r--drivers/char/drm/drm_lock.c35
-rw-r--r--drivers/char/drm/i915_dma.c160
-rw-r--r--drivers/char/drm/i915_drm.h45
-rw-r--r--drivers/char/drm/i915_drv.c23
-rw-r--r--drivers/char/drm/i915_drv.h115
-rw-r--r--drivers/char/drm/i915_irq.c597
-rw-r--r--drivers/char/drm/mga_drv.c7
-rw-r--r--drivers/char/drm/mga_drv.h6
-rw-r--r--drivers/char/drm/mga_irq.c69
-rw-r--r--drivers/char/drm/r128_drv.c7
-rw-r--r--drivers/char/drm/r128_drv.h9
-rw-r--r--drivers/char/drm/r128_irq.c55
-rw-r--r--drivers/char/drm/radeon_drv.c8
-rw-r--r--drivers/char/drm/radeon_drv.h19
-rw-r--r--drivers/char/drm/radeon_irq.c171
-rw-r--r--drivers/char/drm/via_drv.c6
-rw-r--r--drivers/char/drm/via_drv.h7
-rw-r--r--drivers/char/drm/via_irq.c81
-rw-r--r--drivers/s390/kvm/kvm_virtio.c40
-rw-r--r--drivers/serial/8250.c5
-rw-r--r--drivers/serial/8250.h5
-rw-r--r--drivers/serial/Kconfig2
-rw-r--r--drivers/serial/sh-sci.c8
-rw-r--r--fs/dlm/lowcomms.c27
-rw-r--r--fs/dlm/netlink.c2
-rw-r--r--fs/dlm/plock.c2
-rw-r--r--fs/nfs/callback.c2
-rw-r--r--fs/nfs/callback_proc.c4
-rw-r--r--fs/nfs/callback_xdr.c40
-rw-r--r--fs/nfs/client.c8
-rw-r--r--fs/nfs/delegation.c4
-rw-r--r--fs/nfs/dir.c18
-rw-r--r--fs/nfs/file.c2
-rw-r--r--fs/nfs/inode.c14
-rw-r--r--fs/nfs/namespace.c11
-rw-r--r--fs/nfs/nfs3proc.c6
-rw-r--r--fs/nfs/nfs4_fs.h1
-rw-r--r--fs/nfs/nfs4namespace.c12
-rw-r--r--fs/nfs/nfs4proc.c38
-rw-r--r--fs/nfs/nfs4renewd.c10
-rw-r--r--fs/nfs/nfs4state.c8
-rw-r--r--fs/nfs/nfs4xdr.c100
-rw-r--r--fs/nfs/proc.c8
-rw-r--r--fs/nfs/read.c2
-rw-r--r--fs/nfs/super.c12
-rw-r--r--fs/nfs/write.c2
-rw-r--r--include/asm-blackfin/bfin-global.h4
-rw-r--r--include/asm-blackfin/checksum.h29
-rw-r--r--include/asm-blackfin/gpio.h1
-rw-r--r--include/asm-blackfin/io.h2
-rw-r--r--include/asm-blackfin/mach-bf527/blackfin.h8
-rw-r--r--include/asm-blackfin/mach-bf561/dma.h8
-rw-r--r--include/asm-blackfin/serial.h5
-rw-r--r--include/asm-ia64/kvm.h12
-rw-r--r--include/asm-sh/kgdb.h14
-rw-r--r--include/asm-x86/kvm_x86_emulate.h1
-rw-r--r--include/linux/Kbuild2
-rw-r--r--include/linux/libata.h6
-rw-r--r--net/sunrpc/auth_generic.c8
-rw-r--r--scripts/kallsyms.c3
-rw-r--r--scripts/kconfig/util.c2
-rwxr-xr-xscripts/kernel-doc4
-rw-r--r--scripts/mksysmap3
-rw-r--r--scripts/mod/modpost.c2
-rw-r--r--sound/Kconfig5
-rw-r--r--sound/drivers/Kconfig15
-rw-r--r--sound/drivers/pcsp/pcsp_lib.c23
-rw-r--r--virt/kvm/kvm_main.c29
121 files changed, 1904 insertions, 2518 deletions
diff --git a/.gitignore b/.gitignore
index 090b293b8779..9c0d650385be 100644
--- a/.gitignore
+++ b/.gitignore
@@ -54,6 +54,5 @@ series
54cscope.* 54cscope.*
55 55
56*.orig 56*.orig
57*.rej
58*~ 57*~
59\#*# 58\#*#
diff --git a/Kbuild b/Kbuild
index 32f19c5c9bb0..e750e9c3fe59 100644
--- a/Kbuild
+++ b/Kbuild
@@ -96,5 +96,4 @@ missing-syscalls: scripts/checksyscalls.sh FORCE
96 $(call cmd,syscalls) 96 $(call cmd,syscalls)
97 97
98# Delete all targets during make clean 98# Delete all targets during make clean
99clean-files := $(addprefix $(objtree)/,$(targets)) 99clean-files := $(addprefix $(objtree)/,$(filter-out $(bounds-file) $(offsets-file),$(targets)))
100
diff --git a/MAINTAINERS b/MAINTAINERS
index c68a1189140c..623719c64d87 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2329,7 +2329,8 @@ S: Maintained
2329KERNEL BUILD (kbuild: Makefile, scripts/Makefile.*) 2329KERNEL BUILD (kbuild: Makefile, scripts/Makefile.*)
2330P: Sam Ravnborg 2330P: Sam Ravnborg
2331M: sam@ravnborg.org 2331M: sam@ravnborg.org
2332T: git kernel.org:/pub/scm/linux/kernel/git/sam/kbuild.git 2332T: git kernel.org:/pub/scm/linux/kernel/git/sam/kbuild-next.git
2333T: git kernel.org:/pub/scm/linux/kernel/git/sam/kbuild-fixes.git
2333L: linux-kbuild@vger.kernel.org 2334L: linux-kbuild@vger.kernel.org
2334S: Maintained 2335S: Maintained
2335 2336
@@ -2351,24 +2352,24 @@ S: Supported
2351KERNEL VIRTUAL MACHINE (KVM) 2352KERNEL VIRTUAL MACHINE (KVM)
2352P: Avi Kivity 2353P: Avi Kivity
2353M: avi@qumranet.com 2354M: avi@qumranet.com
2354L: kvm-devel@lists.sourceforge.net 2355L: kvm@vger.kernel.org
2355W: kvm.sourceforge.net 2356W: http://kvm.qumranet.com
2356S: Supported 2357S: Supported
2357 2358
2358KERNEL VIRTUAL MACHINE (KVM) FOR POWERPC 2359KERNEL VIRTUAL MACHINE (KVM) FOR POWERPC
2359P: Hollis Blanchard 2360P: Hollis Blanchard
2360M: hollisb@us.ibm.com 2361M: hollisb@us.ibm.com
2361L: kvm-ppc-devel@lists.sourceforge.net 2362L: kvm-ppc@vger.kernel.org
2362W: kvm.sourceforge.net 2363W: http://kvm.qumranet.com
2363S: Supported 2364S: Supported
2364 2365
2365KERNEL VIRTUAL MACHINE For Itanium(KVM/IA64) 2366KERNEL VIRTUAL MACHINE For Itanium (KVM/IA64)
2366P: Anthony Xu 2367P: Anthony Xu
2367M: anthony.xu@intel.com 2368M: anthony.xu@intel.com
2368P: Xiantao Zhang 2369P: Xiantao Zhang
2369M: xiantao.zhang@intel.com 2370M: xiantao.zhang@intel.com
2370L: kvm-ia64-devel@lists.sourceforge.net 2371L: kvm-ia64@vger.kernel.org
2371W: kvm.sourceforge.net 2372W: http://kvm.qumranet.com
2372S: Supported 2373S: Supported
2373 2374
2374KERNEL VIRTUAL MACHINE for s390 (KVM/s390) 2375KERNEL VIRTUAL MACHINE for s390 (KVM/s390)
@@ -4021,12 +4022,41 @@ M: ballabio_dario@emc.com
4021L: linux-scsi@vger.kernel.org 4022L: linux-scsi@vger.kernel.org
4022S: Maintained 4023S: Maintained
4023 4024
4025UCLINUX (AND M68KNOMMU)
4026P: Greg Ungerer
4027M: gerg@uclinux.org
4028W: http://www.uclinux.org/
4029L: uclinux-dev@uclinux.org (subscribers-only)
4030S: Maintained
4031
4032UCLINUX FOR NEC V850
4033P: Miles Bader
4034
4035UCLINUX FOR RENESAS H8/300
4036P: Yoshinori Sato
4037M: ysato@users.sourceforge.jp
4038W: http://uclinux-h8.sourceforge.jp/
4039S: Supported
4040
4024UDF FILESYSTEM 4041UDF FILESYSTEM
4025P: Jan Kara 4042P: Jan Kara
4026M: jack@suse.cz 4043M: jack@suse.cz
4027W: http://linux-udf.sourceforge.net 4044W: http://linux-udf.sourceforge.net
4028S: Maintained 4045S: Maintained
4029 4046
4047UFS FILESYSTEM
4048P: Evgeniy Dushistov
4049M: dushistov@mail.ru
4050L: linux-kernel@vger.kernel.org
4051S: Maintained
4052
4053UltraSPARC (sparc64):
4054P: David S. Miller
4055M: davem@davemloft.net
4056L: sparclinux@vger.kernel.org
4057T: git kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6.git
4058S: Maintained
4059
4030UNIFORM CDROM DRIVER 4060UNIFORM CDROM DRIVER
4031P: Jens Axboe 4061P: Jens Axboe
4032M: axboe@kernel.dk 4062M: axboe@kernel.dk
@@ -4073,6 +4103,13 @@ L: netdev@vger.kernel.org
4073W: http://www.linux-usb.org/usbnet 4103W: http://www.linux-usb.org/usbnet
4074S: Maintained 4104S: Maintained
4075 4105
4106USB DIAMOND RIO500 DRIVER
4107P: Cesar Miquel
4108M: miquel@df.uba.ar
4109L: rio500-users@lists.sourceforge.net
4110W: http://rio500.sourceforge.net
4111S: Maintained
4112
4076USB EHCI DRIVER 4113USB EHCI DRIVER
4077P: David Brownell 4114P: David Brownell
4078M: dbrownell@users.sourceforge.net 4115M: dbrownell@users.sourceforge.net
@@ -4327,42 +4364,6 @@ M: romieu@fr.zoreil.com
4327L: netdev@vger.kernel.org 4364L: netdev@vger.kernel.org
4328S: Maintained 4365S: Maintained
4329 4366
4330UCLINUX (AND M68KNOMMU)
4331P: Greg Ungerer
4332M: gerg@uclinux.org
4333W: http://www.uclinux.org/
4334L: uclinux-dev@uclinux.org (subscribers-only)
4335S: Maintained
4336
4337UCLINUX FOR NEC V850
4338P: Miles Bader
4339
4340UCLINUX FOR RENESAS H8/300
4341P: Yoshinori Sato
4342M: ysato@users.sourceforge.jp
4343W: http://uclinux-h8.sourceforge.jp/
4344S: Supported
4345
4346UFS FILESYSTEM
4347P: Evgeniy Dushistov
4348M: dushistov@mail.ru
4349L: linux-kernel@vger.kernel.org
4350S: Maintained
4351
4352UltraSPARC (sparc64):
4353P: David S. Miller
4354M: davem@davemloft.net
4355L: sparclinux@vger.kernel.org
4356T: git kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6.git
4357S: Maintained
4358
4359USB DIAMOND RIO500 DRIVER
4360P: Cesar Miquel
4361M: miquel@df.uba.ar
4362L: rio500-users@lists.sourceforge.net
4363W: http://rio500.sourceforge.net
4364S: Maintained
4365
4366VIDEO FOR LINUX 4367VIDEO FOR LINUX
4367P: Mauro Carvalho Chehab 4368P: Mauro Carvalho Chehab
4368M: mchehab@infradead.org 4369M: mchehab@infradead.org
diff --git a/Makefile b/Makefile
index f63884258ae6..20b32351906b 100644
--- a/Makefile
+++ b/Makefile
@@ -1114,6 +1114,7 @@ MRPROPER_DIRS += include/config include2 usr/include
1114MRPROPER_FILES += .config .config.old include/asm .version .old_version \ 1114MRPROPER_FILES += .config .config.old include/asm .version .old_version \
1115 include/linux/autoconf.h include/linux/version.h \ 1115 include/linux/autoconf.h include/linux/version.h \
1116 include/linux/utsrelease.h \ 1116 include/linux/utsrelease.h \
1117 include/linux/bounds.h include/asm*/asm-offsets.h \
1117 Module.symvers tags TAGS cscope* 1118 Module.symvers tags TAGS cscope*
1118 1119
1119# clean - Delete most, but leave enough to build external modules 1120# clean - Delete most, but leave enough to build external modules
@@ -1431,7 +1432,7 @@ define xtags
1431 elif $1 --version 2>&1 | grep -iq emacs; then \ 1432 elif $1 --version 2>&1 | grep -iq emacs; then \
1432 $(all-sources) | xargs $1 -a; \ 1433 $(all-sources) | xargs $1 -a; \
1433 $(all-kconfigs) | xargs $1 -a \ 1434 $(all-kconfigs) | xargs $1 -a \
1434 --regex='/^[ \t]*(menu|)config[ \t]+\([a-zA-Z0-9_]+\)/\2/'; \ 1435 --regex='/^[ \t]*\(\(menu\)*config\)[ \t]+\([a-zA-Z0-9_]+\)/\3/'; \
1435 $(all-defconfigs) | xargs -r $1 -a \ 1436 $(all-defconfigs) | xargs -r $1 -a \
1436 --regex='/^#?[ \t]?\(CONFIG_[a-zA-Z0-9_]+\)/\1/'; \ 1437 --regex='/^#?[ \t]?\(CONFIG_[a-zA-Z0-9_]+\)/\1/'; \
1437 else \ 1438 else \
diff --git a/arch/blackfin/Kconfig b/arch/blackfin/Kconfig
index fd5708523f2e..b87634e75f20 100644
--- a/arch/blackfin/Kconfig
+++ b/arch/blackfin/Kconfig
@@ -479,16 +479,6 @@ comment "Memory Setup"
479 479
480comment "Misc" 480comment "Misc"
481 481
482config ENET_FLASH_PIN
483 int "PF port/pin used for flash and ethernet sharing"
484 depends on (BFIN533_STAMP)
485 default 0
486 help
487 PF port/pin used for flash and ethernet sharing to allow other PF
488 pins to be used on other platforms without having to touch common
489 code.
490 For example: PF0 --> 0,PF1 --> 1,PF2 --> 2, etc.
491
492choice 482choice
493 prompt "Blackfin Exception Scratch Register" 483 prompt "Blackfin Exception Scratch Register"
494 default BFIN_SCRATCH_REG_RETN 484 default BFIN_SCRATCH_REG_RETN
@@ -695,6 +685,8 @@ choice
695 prompt "Uncached SDRAM region" 685 prompt "Uncached SDRAM region"
696 default DMA_UNCACHED_1M 686 default DMA_UNCACHED_1M
697 depends on BFIN_DMA_5XX 687 depends on BFIN_DMA_5XX
688config DMA_UNCACHED_4M
689 bool "Enable 4M DMA region"
698config DMA_UNCACHED_2M 690config DMA_UNCACHED_2M
699 bool "Enable 2M DMA region" 691 bool "Enable 2M DMA region"
700config DMA_UNCACHED_1M 692config DMA_UNCACHED_1M
diff --git a/arch/blackfin/configs/BF527-EZKIT_defconfig b/arch/blackfin/configs/BF527-EZKIT_defconfig
index 64876dfc2e55..5e6fb9d8e50f 100644
--- a/arch/blackfin/configs/BF527-EZKIT_defconfig
+++ b/arch/blackfin/configs/BF527-EZKIT_defconfig
@@ -1,6 +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.22.16 3# Linux kernel version: 2.6.24.7
4# Fri May 16 10:02:29 2008
4# 5#
5# CONFIG_MMU is not set 6# CONFIG_MMU is not set
6# CONFIG_FPU is not set 7# CONFIG_FPU is not set
@@ -13,35 +14,34 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y
13CONFIG_GENERIC_HWEIGHT=y 14CONFIG_GENERIC_HWEIGHT=y
14CONFIG_GENERIC_HARDIRQS=y 15CONFIG_GENERIC_HARDIRQS=y
15CONFIG_GENERIC_IRQ_PROBE=y 16CONFIG_GENERIC_IRQ_PROBE=y
16CONFIG_GENERIC_TIME=y
17CONFIG_GENERIC_GPIO=y 17CONFIG_GENERIC_GPIO=y
18CONFIG_FORCE_MAX_ZONEORDER=14 18CONFIG_FORCE_MAX_ZONEORDER=14
19CONFIG_GENERIC_CALIBRATE_DELAY=y 19CONFIG_GENERIC_CALIBRATE_DELAY=y
20CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" 20CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
21 21
22# 22#
23# Code maturity level options 23# General setup
24# 24#
25CONFIG_EXPERIMENTAL=y 25CONFIG_EXPERIMENTAL=y
26CONFIG_BROKEN_ON_SMP=y 26CONFIG_BROKEN_ON_SMP=y
27CONFIG_INIT_ENV_ARG_LIMIT=32 27CONFIG_INIT_ENV_ARG_LIMIT=32
28
29#
30# General setup
31#
32CONFIG_LOCALVERSION="" 28CONFIG_LOCALVERSION=""
33CONFIG_LOCALVERSION_AUTO=y 29CONFIG_LOCALVERSION_AUTO=y
34CONFIG_SYSVIPC=y 30CONFIG_SYSVIPC=y
35# CONFIG_IPC_NS is not set
36CONFIG_SYSVIPC_SYSCTL=y 31CONFIG_SYSVIPC_SYSCTL=y
37# CONFIG_POSIX_MQUEUE is not set 32# CONFIG_POSIX_MQUEUE is not set
38# CONFIG_BSD_PROCESS_ACCT is not set 33# CONFIG_BSD_PROCESS_ACCT is not set
39# CONFIG_TASKSTATS is not set 34# CONFIG_TASKSTATS is not set
40# CONFIG_UTS_NS is not set 35# CONFIG_USER_NS is not set
36# CONFIG_PID_NS is not set
41# CONFIG_AUDIT is not set 37# CONFIG_AUDIT is not set
42CONFIG_IKCONFIG=y 38CONFIG_IKCONFIG=y
43CONFIG_IKCONFIG_PROC=y 39CONFIG_IKCONFIG_PROC=y
44CONFIG_LOG_BUF_SHIFT=14 40CONFIG_LOG_BUF_SHIFT=14
41# CONFIG_CGROUPS is not set
42CONFIG_FAIR_GROUP_SCHED=y
43CONFIG_FAIR_USER_SCHED=y
44# CONFIG_FAIR_CGROUP_SCHED is not set
45CONFIG_SYSFS_DEPRECATED=y 45CONFIG_SYSFS_DEPRECATED=y
46# CONFIG_RELAY is not set 46# CONFIG_RELAY is not set
47CONFIG_BLK_DEV_INITRD=y 47CONFIG_BLK_DEV_INITRD=y
@@ -64,32 +64,24 @@ CONFIG_EPOLL=y
64CONFIG_SIGNALFD=y 64CONFIG_SIGNALFD=y
65CONFIG_EVENTFD=y 65CONFIG_EVENTFD=y
66CONFIG_VM_EVENT_COUNTERS=y 66CONFIG_VM_EVENT_COUNTERS=y
67CONFIG_BIG_ORDER_ALLOC_NOFAIL_MAGIC=3
68# CONFIG_NP2 is not set
69CONFIG_SLAB=y 67CONFIG_SLAB=y
70# CONFIG_SLUB is not set 68# CONFIG_SLUB is not set
71# CONFIG_SLOB is not set 69# CONFIG_SLOB is not set
70CONFIG_SLABINFO=y
72CONFIG_RT_MUTEXES=y 71CONFIG_RT_MUTEXES=y
73CONFIG_TINY_SHMEM=y 72CONFIG_TINY_SHMEM=y
74CONFIG_BASE_SMALL=0 73CONFIG_BASE_SMALL=0
75
76#
77# Loadable module support
78#
79CONFIG_MODULES=y 74CONFIG_MODULES=y
80CONFIG_MODULE_UNLOAD=y 75CONFIG_MODULE_UNLOAD=y
81# CONFIG_MODULE_FORCE_UNLOAD is not set 76# CONFIG_MODULE_FORCE_UNLOAD is not set
82# CONFIG_MODVERSIONS is not set 77# CONFIG_MODVERSIONS is not set
83# CONFIG_MODULE_SRCVERSION_ALL is not set 78# CONFIG_MODULE_SRCVERSION_ALL is not set
84CONFIG_KMOD=y 79CONFIG_KMOD=y
85
86#
87# Block layer
88#
89CONFIG_BLOCK=y 80CONFIG_BLOCK=y
90# CONFIG_LBD is not set 81# CONFIG_LBD is not set
91# CONFIG_BLK_DEV_IO_TRACE is not set 82# CONFIG_BLK_DEV_IO_TRACE is not set
92# CONFIG_LSF is not set 83# CONFIG_LSF is not set
84# CONFIG_BLK_DEV_BSG is not set
93 85
94# 86#
95# IO Schedulers 87# IO Schedulers
@@ -141,7 +133,6 @@ CONFIG_BF_REV_0_0=y
141# CONFIG_BF_REV_ANY is not set 133# CONFIG_BF_REV_ANY is not set
142# CONFIG_BF_REV_NONE is not set 134# CONFIG_BF_REV_NONE is not set
143CONFIG_BF52x=y 135CONFIG_BF52x=y
144CONFIG_BFIN_SINGLE_CORE=y
145CONFIG_MEM_MT48LC32M16A2TG_75=y 136CONFIG_MEM_MT48LC32M16A2TG_75=y
146CONFIG_BFIN527_EZKIT=y 137CONFIG_BFIN527_EZKIT=y
147 138
@@ -227,12 +218,14 @@ CONFIG_IRQ_USB_DMA=11
227# Board customizations 218# Board customizations
228# 219#
229# CONFIG_CMDLINE_BOOL is not set 220# CONFIG_CMDLINE_BOOL is not set
221CONFIG_BOOT_LOAD=0x1000
230 222
231# 223#
232# Clock/PLL Setup 224# Clock/PLL Setup
233# 225#
234CONFIG_CLKIN_HZ=25000000 226CONFIG_CLKIN_HZ=25000000
235# CONFIG_BFIN_KERNEL_CLOCK is not set 227# CONFIG_BFIN_KERNEL_CLOCK is not set
228CONFIG_MAX_MEM_SIZE=512
236CONFIG_MAX_VCO_HZ=600000000 229CONFIG_MAX_VCO_HZ=600000000
237CONFIG_MIN_VCO_HZ=50000000 230CONFIG_MIN_VCO_HZ=50000000
238CONFIG_MAX_SCLK_HZ=133333333 231CONFIG_MAX_SCLK_HZ=133333333
@@ -246,13 +239,17 @@ CONFIG_HZ_250=y
246# CONFIG_HZ_300 is not set 239# CONFIG_HZ_300 is not set
247# CONFIG_HZ_1000 is not set 240# CONFIG_HZ_1000 is not set
248CONFIG_HZ=250 241CONFIG_HZ=250
242CONFIG_GENERIC_TIME=y
243CONFIG_GENERIC_CLOCKEVENTS=y
244# CONFIG_CYCLES_CLOCKSOURCE is not set
245# CONFIG_TICK_ONESHOT is not set
246# CONFIG_NO_HZ is not set
247# CONFIG_HIGH_RES_TIMERS is not set
248CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
249 249
250# 250#
251# Memory Setup 251# Misc
252# 252#
253CONFIG_MAX_MEM_SIZE=512
254CONFIG_MEM_ADD_WIDTH=10
255CONFIG_BOOT_LOAD=0x1000
256CONFIG_BFIN_SCRATCH_REG_RETN=y 253CONFIG_BFIN_SCRATCH_REG_RETN=y
257# CONFIG_BFIN_SCRATCH_REG_RETE is not set 254# CONFIG_BFIN_SCRATCH_REG_RETE is not set
258# CONFIG_BFIN_SCRATCH_REG_CYCLES is not set 255# CONFIG_BFIN_SCRATCH_REG_CYCLES is not set
@@ -288,12 +285,14 @@ CONFIG_FLATMEM_MANUAL=y
288CONFIG_FLATMEM=y 285CONFIG_FLATMEM=y
289CONFIG_FLAT_NODE_MEM_MAP=y 286CONFIG_FLAT_NODE_MEM_MAP=y
290# CONFIG_SPARSEMEM_STATIC is not set 287# CONFIG_SPARSEMEM_STATIC is not set
288# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
291CONFIG_SPLIT_PTLOCK_CPUS=4 289CONFIG_SPLIT_PTLOCK_CPUS=4
292# CONFIG_RESOURCES_64BIT is not set 290# CONFIG_RESOURCES_64BIT is not set
293CONFIG_ZONE_DMA_FLAG=1 291CONFIG_ZONE_DMA_FLAG=1
294CONFIG_LARGE_ALLOCS=y 292CONFIG_VIRT_TO_BUS=y
295# CONFIG_BFIN_GPTIMERS is not set 293# CONFIG_BFIN_GPTIMERS is not set
296CONFIG_BFIN_DMA_5XX=y 294CONFIG_BFIN_DMA_5XX=y
295# CONFIG_DMA_UNCACHED_4M is not set
297# CONFIG_DMA_UNCACHED_2M is not set 296# CONFIG_DMA_UNCACHED_2M is not set
298CONFIG_DMA_UNCACHED_1M=y 297CONFIG_DMA_UNCACHED_1M=y
299# CONFIG_DMA_UNCACHED_NONE is not set 298# CONFIG_DMA_UNCACHED_NONE is not set
@@ -338,10 +337,6 @@ CONFIG_BANK_3=0xFFC0
338# 337#
339# CONFIG_PCI is not set 338# CONFIG_PCI is not set
340# CONFIG_ARCH_SUPPORTS_MSI is not set 339# CONFIG_ARCH_SUPPORTS_MSI is not set
341
342#
343# PCCARD (PCMCIA/CardBus) support
344#
345# CONFIG_PCCARD is not set 340# CONFIG_PCCARD is not set
346 341
347# 342#
@@ -357,9 +352,15 @@ CONFIG_BINFMT_ZFLAT=y
357# Power management options 352# Power management options
358# 353#
359# CONFIG_PM is not set 354# CONFIG_PM is not set
355CONFIG_SUSPEND_UP_POSSIBLE=y
360# CONFIG_PM_WAKEUP_BY_GPIO is not set 356# CONFIG_PM_WAKEUP_BY_GPIO is not set
361 357
362# 358#
359# CPU Frequency scaling
360#
361# CONFIG_CPU_FREQ is not set
362
363#
363# Networking 364# Networking
364# 365#
365CONFIG_NET=y 366CONFIG_NET=y
@@ -395,6 +396,7 @@ CONFIG_SYN_COOKIES=y
395CONFIG_INET_XFRM_MODE_TRANSPORT=y 396CONFIG_INET_XFRM_MODE_TRANSPORT=y
396CONFIG_INET_XFRM_MODE_TUNNEL=y 397CONFIG_INET_XFRM_MODE_TUNNEL=y
397CONFIG_INET_XFRM_MODE_BEET=y 398CONFIG_INET_XFRM_MODE_BEET=y
399# CONFIG_INET_LRO is not set
398CONFIG_INET_DIAG=y 400CONFIG_INET_DIAG=y
399CONFIG_INET_TCP_DIAG=y 401CONFIG_INET_TCP_DIAG=y
400# CONFIG_TCP_CONG_ADVANCED is not set 402# CONFIG_TCP_CONG_ADVANCED is not set
@@ -421,10 +423,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
421# CONFIG_LAPB is not set 423# CONFIG_LAPB is not set
422# CONFIG_ECONET is not set 424# CONFIG_ECONET is not set
423# CONFIG_WAN_ROUTER is not set 425# CONFIG_WAN_ROUTER is not set
424
425#
426# QoS and/or fair queueing
427#
428# CONFIG_NET_SCHED is not set 426# CONFIG_NET_SCHED is not set
429 427
430# 428#
@@ -444,6 +442,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
444# CONFIG_MAC80211 is not set 442# CONFIG_MAC80211 is not set
445# CONFIG_IEEE80211 is not set 443# CONFIG_IEEE80211 is not set
446# CONFIG_RFKILL is not set 444# CONFIG_RFKILL is not set
445# CONFIG_NET_9P is not set
447 446
448# 447#
449# Device Drivers 448# Device Drivers
@@ -452,14 +451,11 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
452# 451#
453# Generic Driver Options 452# Generic Driver Options
454# 453#
454CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
455CONFIG_STANDALONE=y 455CONFIG_STANDALONE=y
456CONFIG_PREVENT_FIRMWARE_BUILD=y 456CONFIG_PREVENT_FIRMWARE_BUILD=y
457# CONFIG_FW_LOADER is not set 457# CONFIG_FW_LOADER is not set
458# CONFIG_SYS_HYPERVISOR is not set 458# CONFIG_SYS_HYPERVISOR is not set
459
460#
461# Connector - unified userspace <-> kernelspace linker
462#
463# CONFIG_CONNECTOR is not set 459# CONFIG_CONNECTOR is not set
464CONFIG_MTD=y 460CONFIG_MTD=y
465# CONFIG_MTD_DEBUG is not set 461# CONFIG_MTD_DEBUG is not set
@@ -479,6 +475,7 @@ CONFIG_MTD_BLOCK=y
479# CONFIG_INFTL is not set 475# CONFIG_INFTL is not set
480# CONFIG_RFD_FTL is not set 476# CONFIG_RFD_FTL is not set
481# CONFIG_SSFDC is not set 477# CONFIG_SSFDC is not set
478# CONFIG_MTD_OOPS is not set
482 479
483# 480#
484# RAM/ROM/Flash chip drivers 481# RAM/ROM/Flash chip drivers
@@ -542,39 +539,27 @@ CONFIG_MTD_NAND_IDS=m
542# CONFIG_MTD_NAND_DISKONCHIP is not set 539# CONFIG_MTD_NAND_DISKONCHIP is not set
543# CONFIG_MTD_NAND_NANDSIM is not set 540# CONFIG_MTD_NAND_NANDSIM is not set
544# CONFIG_MTD_NAND_PLATFORM is not set 541# CONFIG_MTD_NAND_PLATFORM is not set
542# CONFIG_MTD_ALAUDA is not set
545# CONFIG_MTD_ONENAND is not set 543# CONFIG_MTD_ONENAND is not set
546 544
547# 545#
548# UBI - Unsorted block images 546# UBI - Unsorted block images
549# 547#
550# CONFIG_MTD_UBI is not set 548# CONFIG_MTD_UBI is not set
551
552#
553# Parallel port support
554#
555# CONFIG_PARPORT is not set 549# CONFIG_PARPORT is not set
556 550CONFIG_BLK_DEV=y
557#
558# Plug and Play support
559#
560# CONFIG_PNPACPI is not set
561
562#
563# Block devices
564#
565# CONFIG_BLK_DEV_COW_COMMON is not set 551# CONFIG_BLK_DEV_COW_COMMON is not set
566# CONFIG_BLK_DEV_LOOP is not set 552# CONFIG_BLK_DEV_LOOP is not set
567# CONFIG_BLK_DEV_NBD is not set 553# CONFIG_BLK_DEV_NBD is not set
554# CONFIG_BLK_DEV_UB is not set
568CONFIG_BLK_DEV_RAM=y 555CONFIG_BLK_DEV_RAM=y
569CONFIG_BLK_DEV_RAM_COUNT=16 556CONFIG_BLK_DEV_RAM_COUNT=16
570CONFIG_BLK_DEV_RAM_SIZE=4096 557CONFIG_BLK_DEV_RAM_SIZE=4096
571CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 558CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
572# CONFIG_CDROM_PKTCDVD is not set 559# CONFIG_CDROM_PKTCDVD is not set
573# CONFIG_ATA_OVER_ETH is not set 560# CONFIG_ATA_OVER_ETH is not set
574 561CONFIG_MISC_DEVICES=y
575# 562# CONFIG_EEPROM_93CX6 is not set
576# Misc devices
577#
578# CONFIG_IDE is not set 563# CONFIG_IDE is not set
579 564
580# 565#
@@ -582,22 +567,18 @@ CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
582# 567#
583# CONFIG_RAID_ATTRS is not set 568# CONFIG_RAID_ATTRS is not set
584# CONFIG_SCSI is not set 569# CONFIG_SCSI is not set
570# CONFIG_SCSI_DMA is not set
585# CONFIG_SCSI_NETLINK is not set 571# CONFIG_SCSI_NETLINK is not set
586# CONFIG_ATA is not set 572# CONFIG_ATA is not set
587
588#
589# Multi-device support (RAID and LVM)
590#
591# CONFIG_MD is not set 573# CONFIG_MD is not set
592
593#
594# Network device support
595#
596CONFIG_NETDEVICES=y 574CONFIG_NETDEVICES=y
575# CONFIG_NETDEVICES_MULTIQUEUE is not set
597# CONFIG_DUMMY is not set 576# CONFIG_DUMMY is not set
598# CONFIG_BONDING is not set 577# CONFIG_BONDING is not set
578# CONFIG_MACVLAN is not set
599# CONFIG_EQUALIZER is not set 579# CONFIG_EQUALIZER is not set
600# CONFIG_TUN is not set 580# CONFIG_TUN is not set
581# CONFIG_VETH is not set
601CONFIG_PHYLIB=y 582CONFIG_PHYLIB=y
602 583
603# 584#
@@ -611,21 +592,24 @@ CONFIG_PHYLIB=y
611# CONFIG_VITESSE_PHY is not set 592# CONFIG_VITESSE_PHY is not set
612# CONFIG_SMSC_PHY is not set 593# CONFIG_SMSC_PHY is not set
613# CONFIG_BROADCOM_PHY is not set 594# CONFIG_BROADCOM_PHY is not set
595# CONFIG_ICPLUS_PHY is not set
614# CONFIG_FIXED_PHY is not set 596# CONFIG_FIXED_PHY is not set
615 597# CONFIG_MDIO_BITBANG is not set
616#
617# Ethernet (10 or 100Mbit)
618#
619CONFIG_NET_ETHERNET=y 598CONFIG_NET_ETHERNET=y
620CONFIG_MII=y 599CONFIG_MII=y
621# CONFIG_SMC91X is not set
622CONFIG_BFIN_MAC=y 600CONFIG_BFIN_MAC=y
623CONFIG_BFIN_MAC_USE_L1=y 601CONFIG_BFIN_MAC_USE_L1=y
624CONFIG_BFIN_TX_DESC_NUM=10 602CONFIG_BFIN_TX_DESC_NUM=10
625CONFIG_BFIN_RX_DESC_NUM=20 603CONFIG_BFIN_RX_DESC_NUM=20
626CONFIG_BFIN_MAC_RMII=y 604CONFIG_BFIN_MAC_RMII=y
605# CONFIG_SMC91X is not set
627# CONFIG_SMSC911X is not set 606# CONFIG_SMSC911X is not set
628# CONFIG_DM9000 is not set 607# CONFIG_DM9000 is not set
608# CONFIG_IBM_NEW_EMAC_ZMII is not set
609# CONFIG_IBM_NEW_EMAC_RGMII is not set
610# CONFIG_IBM_NEW_EMAC_TAH is not set
611# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
612# CONFIG_B44 is not set
629CONFIG_NETDEV_1000=y 613CONFIG_NETDEV_1000=y
630# CONFIG_AX88180 is not set 614# CONFIG_AX88180 is not set
631CONFIG_NETDEV_10000=y 615CONFIG_NETDEV_10000=y
@@ -635,6 +619,15 @@ CONFIG_NETDEV_10000=y
635# 619#
636# CONFIG_WLAN_PRE80211 is not set 620# CONFIG_WLAN_PRE80211 is not set
637# CONFIG_WLAN_80211 is not set 621# CONFIG_WLAN_80211 is not set
622
623#
624# USB Network Adapters
625#
626# CONFIG_USB_CATC is not set
627# CONFIG_USB_KAWETH is not set
628# CONFIG_USB_PEGASUS is not set
629# CONFIG_USB_RTL8150 is not set
630# CONFIG_USB_USBNET is not set
638# CONFIG_WAN is not set 631# CONFIG_WAN is not set
639# CONFIG_PPP is not set 632# CONFIG_PPP is not set
640# CONFIG_SLIP is not set 633# CONFIG_SLIP is not set
@@ -642,15 +635,7 @@ CONFIG_NETDEV_10000=y
642# CONFIG_NETCONSOLE is not set 635# CONFIG_NETCONSOLE is not set
643# CONFIG_NETPOLL is not set 636# CONFIG_NETPOLL is not set
644# CONFIG_NET_POLL_CONTROLLER is not set 637# CONFIG_NET_POLL_CONTROLLER is not set
645
646#
647# ISDN subsystem
648#
649# CONFIG_ISDN is not set 638# CONFIG_ISDN is not set
650
651#
652# Telephony Support
653#
654# CONFIG_PHONE is not set 639# CONFIG_PHONE is not set
655 640
656# 641#
@@ -665,7 +650,6 @@ CONFIG_INPUT=y
665# 650#
666# CONFIG_INPUT_MOUSEDEV is not set 651# CONFIG_INPUT_MOUSEDEV is not set
667# CONFIG_INPUT_JOYDEV is not set 652# CONFIG_INPUT_JOYDEV is not set
668# CONFIG_INPUT_TSDEV is not set
669# CONFIG_INPUT_EVDEV is not set 653# CONFIG_INPUT_EVDEV is not set
670# CONFIG_INPUT_EVBUG is not set 654# CONFIG_INPUT_EVBUG is not set
671 655
@@ -697,7 +681,6 @@ CONFIG_INPUT_MISC=y
697# 681#
698# CONFIG_AD9960 is not set 682# CONFIG_AD9960 is not set
699# CONFIG_SPI_ADC_BF533 is not set 683# CONFIG_SPI_ADC_BF533 is not set
700# CONFIG_BF5xx_PFLAGS is not set
701# CONFIG_BF5xx_PPIFCD is not set 684# CONFIG_BF5xx_PPIFCD is not set
702# CONFIG_BFIN_SIMPLE_TIMER is not set 685# CONFIG_BFIN_SIMPLE_TIMER is not set
703# CONFIG_BF5xx_PPI is not set 686# CONFIG_BF5xx_PPI is not set
@@ -706,7 +689,7 @@ CONFIG_BFIN_OTP=y
706# CONFIG_BFIN_SPORT is not set 689# CONFIG_BFIN_SPORT is not set
707# CONFIG_BFIN_TIMER_LATENCY is not set 690# CONFIG_BFIN_TIMER_LATENCY is not set
708# CONFIG_TWI_LCD is not set 691# CONFIG_TWI_LCD is not set
709# CONFIG_AD5304 is not set 692# CONFIG_SIMPLE_GPIO is not set
710# CONFIG_VT is not set 693# CONFIG_VT is not set
711# CONFIG_SERIAL_NONSTANDARD is not set 694# CONFIG_SERIAL_NONSTANDARD is not set
712 695
@@ -735,27 +718,11 @@ CONFIG_UNIX98_PTYS=y
735# CAN, the car bus and industrial fieldbus 718# CAN, the car bus and industrial fieldbus
736# 719#
737# CONFIG_CAN4LINUX is not set 720# CONFIG_CAN4LINUX is not set
738
739#
740# IPMI
741#
742# CONFIG_IPMI_HANDLER is not set 721# CONFIG_IPMI_HANDLER is not set
743CONFIG_WATCHDOG=y
744# CONFIG_WATCHDOG_NOWAYOUT is not set
745
746#
747# Watchdog Device Drivers
748#
749# CONFIG_SOFT_WATCHDOG is not set
750CONFIG_BFIN_WDT=y
751CONFIG_HW_RANDOM=y 722CONFIG_HW_RANDOM=y
752# CONFIG_GEN_RTC is not set 723# CONFIG_GEN_RTC is not set
753# CONFIG_R3964 is not set 724# CONFIG_R3964 is not set
754# CONFIG_RAW_DRIVER is not set 725# CONFIG_RAW_DRIVER is not set
755
756#
757# TPM devices
758#
759# CONFIG_TCG_TPM is not set 726# CONFIG_TCG_TPM is not set
760CONFIG_I2C=y 727CONFIG_I2C=y
761CONFIG_I2C_BOARDINFO=y 728CONFIG_I2C_BOARDINFO=y
@@ -777,21 +744,24 @@ CONFIG_I2C_BLACKFIN_TWI_CLK_KHZ=50
777# CONFIG_I2C_OCORES is not set 744# CONFIG_I2C_OCORES is not set
778# CONFIG_I2C_PARPORT_LIGHT is not set 745# CONFIG_I2C_PARPORT_LIGHT is not set
779# CONFIG_I2C_SIMTEC is not set 746# CONFIG_I2C_SIMTEC is not set
747# CONFIG_I2C_TAOS_EVM is not set
780# CONFIG_I2C_STUB is not set 748# CONFIG_I2C_STUB is not set
749# CONFIG_I2C_TINY_USB is not set
781 750
782# 751#
783# Miscellaneous I2C Chip support 752# Miscellaneous I2C Chip support
784# 753#
785# CONFIG_SENSORS_DS1337 is not set 754# CONFIG_SENSORS_DS1337 is not set
786# CONFIG_SENSORS_DS1374 is not set 755# CONFIG_SENSORS_DS1374 is not set
756# CONFIG_DS1682 is not set
787# CONFIG_SENSORS_AD5252 is not set 757# CONFIG_SENSORS_AD5252 is not set
788# CONFIG_SENSORS_EEPROM is not set 758# CONFIG_SENSORS_EEPROM is not set
789# CONFIG_SENSORS_PCF8574 is not set 759# CONFIG_SENSORS_PCF8574 is not set
790# CONFIG_SENSORS_PCF8575 is not set 760# CONFIG_SENSORS_PCF8575 is not set
791# CONFIG_SENSORS_PCA9543 is not set
792# CONFIG_SENSORS_PCA9539 is not set 761# CONFIG_SENSORS_PCA9539 is not set
793# CONFIG_SENSORS_PCF8591 is not set 762# CONFIG_SENSORS_PCF8591 is not set
794# CONFIG_SENSORS_MAX6875 is not set 763# CONFIG_SENSORS_MAX6875 is not set
764# CONFIG_SENSORS_TSL2550 is not set
795# CONFIG_I2C_DEBUG_CORE is not set 765# CONFIG_I2C_DEBUG_CORE is not set
796# CONFIG_I2C_DEBUG_ALGO is not set 766# CONFIG_I2C_DEBUG_ALGO is not set
797# CONFIG_I2C_DEBUG_BUS is not set 767# CONFIG_I2C_DEBUG_BUS is not set
@@ -814,14 +784,11 @@ CONFIG_SPI_BFIN=y
814# 784#
815# CONFIG_SPI_AT25 is not set 785# CONFIG_SPI_AT25 is not set
816# CONFIG_SPI_SPIDEV is not set 786# CONFIG_SPI_SPIDEV is not set
817 787# CONFIG_SPI_TLE62X0 is not set
818#
819# Dallas's 1-wire bus
820#
821# CONFIG_W1 is not set 788# CONFIG_W1 is not set
789# CONFIG_POWER_SUPPLY is not set
822CONFIG_HWMON=y 790CONFIG_HWMON=y
823# CONFIG_HWMON_VID is not set 791# CONFIG_HWMON_VID is not set
824# CONFIG_SENSORS_ABITUGURU is not set
825# CONFIG_SENSORS_AD7418 is not set 792# CONFIG_SENSORS_AD7418 is not set
826# CONFIG_SENSORS_ADM1021 is not set 793# CONFIG_SENSORS_ADM1021 is not set
827# CONFIG_SENSORS_ADM1025 is not set 794# CONFIG_SENSORS_ADM1025 is not set
@@ -829,12 +796,12 @@ CONFIG_HWMON=y
829# CONFIG_SENSORS_ADM1029 is not set 796# CONFIG_SENSORS_ADM1029 is not set
830# CONFIG_SENSORS_ADM1031 is not set 797# CONFIG_SENSORS_ADM1031 is not set
831# CONFIG_SENSORS_ADM9240 is not set 798# CONFIG_SENSORS_ADM9240 is not set
832# CONFIG_SENSORS_ASB100 is not set 799# CONFIG_SENSORS_ADT7470 is not set
833# CONFIG_SENSORS_ATXP1 is not set 800# CONFIG_SENSORS_ATXP1 is not set
834# CONFIG_SENSORS_DS1621 is not set 801# CONFIG_SENSORS_DS1621 is not set
835# CONFIG_SENSORS_F71805F is not set 802# CONFIG_SENSORS_F71805F is not set
836# CONFIG_SENSORS_FSCHER is not set 803# CONFIG_SENSORS_F71882FG is not set
837# CONFIG_SENSORS_FSCPOS is not set 804# CONFIG_SENSORS_F75375S is not set
838# CONFIG_SENSORS_GL518SM is not set 805# CONFIG_SENSORS_GL518SM is not set
839# CONFIG_SENSORS_GL520SM is not set 806# CONFIG_SENSORS_GL520SM is not set
840# CONFIG_SENSORS_IT87 is not set 807# CONFIG_SENSORS_IT87 is not set
@@ -849,13 +816,16 @@ CONFIG_HWMON=y
849# CONFIG_SENSORS_LM87 is not set 816# CONFIG_SENSORS_LM87 is not set
850# CONFIG_SENSORS_LM90 is not set 817# CONFIG_SENSORS_LM90 is not set
851# CONFIG_SENSORS_LM92 is not set 818# CONFIG_SENSORS_LM92 is not set
819# CONFIG_SENSORS_LM93 is not set
852# CONFIG_SENSORS_MAX1619 is not set 820# CONFIG_SENSORS_MAX1619 is not set
853# CONFIG_SENSORS_MAX6650 is not set 821# CONFIG_SENSORS_MAX6650 is not set
854# CONFIG_SENSORS_PC87360 is not set 822# CONFIG_SENSORS_PC87360 is not set
855# CONFIG_SENSORS_PC87427 is not set 823# CONFIG_SENSORS_PC87427 is not set
824# CONFIG_SENSORS_DME1737 is not set
856# CONFIG_SENSORS_SMSC47M1 is not set 825# CONFIG_SENSORS_SMSC47M1 is not set
857# CONFIG_SENSORS_SMSC47M192 is not set 826# CONFIG_SENSORS_SMSC47M192 is not set
858# CONFIG_SENSORS_SMSC47B397 is not set 827# CONFIG_SENSORS_SMSC47B397 is not set
828# CONFIG_SENSORS_THMC50 is not set
859# CONFIG_SENSORS_VT1211 is not set 829# CONFIG_SENSORS_VT1211 is not set
860# CONFIG_SENSORS_W83781D is not set 830# CONFIG_SENSORS_W83781D is not set
861# CONFIG_SENSORS_W83791D is not set 831# CONFIG_SENSORS_W83791D is not set
@@ -865,6 +835,25 @@ CONFIG_HWMON=y
865# CONFIG_SENSORS_W83627HF is not set 835# CONFIG_SENSORS_W83627HF is not set
866# CONFIG_SENSORS_W83627EHF is not set 836# CONFIG_SENSORS_W83627EHF is not set
867# CONFIG_HWMON_DEBUG_CHIP is not set 837# CONFIG_HWMON_DEBUG_CHIP is not set
838CONFIG_WATCHDOG=y
839# CONFIG_WATCHDOG_NOWAYOUT is not set
840
841#
842# Watchdog Device Drivers
843#
844# CONFIG_SOFT_WATCHDOG is not set
845CONFIG_BFIN_WDT=y
846
847#
848# USB-based Watchdog Cards
849#
850# CONFIG_USBPCWATCHDOG is not set
851
852#
853# Sonics Silicon Backplane
854#
855CONFIG_SSB_POSSIBLE=y
856# CONFIG_SSB is not set
868 857
869# 858#
870# Multifunction device drivers 859# Multifunction device drivers
@@ -881,72 +870,133 @@ CONFIG_HWMON=y
881# 870#
882# Graphics support 871# Graphics support
883# 872#
873# CONFIG_VGASTATE is not set
874# CONFIG_VIDEO_OUTPUT_CONTROL is not set
875# CONFIG_FB is not set
884# CONFIG_BACKLIGHT_LCD_SUPPORT is not set 876# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
885 877
886# 878#
887# Display device support 879# Display device support
888# 880#
889# CONFIG_DISPLAY_SUPPORT is not set 881# CONFIG_DISPLAY_SUPPORT is not set
890# CONFIG_VGASTATE is not set
891# CONFIG_FB is not set
892 882
893# 883#
894# Sound 884# Sound
895# 885#
896# CONFIG_SOUND is not set 886# CONFIG_SOUND is not set
897 887CONFIG_HID_SUPPORT=y
898#
899# HID Devices
900#
901CONFIG_HID=y 888CONFIG_HID=y
902# CONFIG_HID_DEBUG is not set 889# CONFIG_HID_DEBUG is not set
890# CONFIG_HIDRAW is not set
903 891
904# 892#
905# USB support 893# USB Input Devices
906# 894#
895CONFIG_USB_HID=y
896# CONFIG_USB_HIDINPUT_POWERBOOK is not set
897# CONFIG_HID_FF is not set
898# CONFIG_USB_HIDDEV is not set
899CONFIG_USB_SUPPORT=y
907CONFIG_USB_ARCH_HAS_HCD=y 900CONFIG_USB_ARCH_HAS_HCD=y
908# CONFIG_USB_ARCH_HAS_OHCI is not set 901# CONFIG_USB_ARCH_HAS_OHCI is not set
909# CONFIG_USB_ARCH_HAS_EHCI is not set 902# CONFIG_USB_ARCH_HAS_EHCI is not set
910# CONFIG_USB is not set 903CONFIG_USB=y
904# CONFIG_USB_DEBUG is not set
905
906#
907# Miscellaneous USB options
908#
909# CONFIG_USB_DEVICEFS is not set
910CONFIG_USB_DEVICE_CLASS=y
911# CONFIG_USB_DYNAMIC_MINORS is not set
912# CONFIG_USB_OTG is not set
913# CONFIG_USB_OTG_WHITELIST is not set
914CONFIG_USB_OTG_BLACKLIST_HUB=y
915
916#
917# USB Host Controller Drivers
918#
919# CONFIG_USB_ISP116X_HCD is not set
920# CONFIG_USB_ISP1362_HCD is not set
921# CONFIG_USB_ISP1760_HCD is not set
922# CONFIG_USB_SL811_HCD is not set
923# CONFIG_USB_R8A66597_HCD is not set
924CONFIG_USB_MUSB_HDRC=y
925CONFIG_USB_MUSB_SOC=y
911 926
912# 927#
913# Enable Host or Gadget support to see Inventra options 928# Blackfin high speed USB support
914# 929#
930CONFIG_USB_MUSB_HOST=y
931# CONFIG_USB_MUSB_PERIPHERAL is not set
932# CONFIG_USB_MUSB_OTG is not set
933CONFIG_USB_MUSB_HDRC_HCD=y
934CONFIG_MUSB_PIO_ONLY=y
935CONFIG_USB_MUSB_LOGLEVEL=0
936
937#
938# USB Device Class drivers
939#
940# CONFIG_USB_ACM is not set
941# CONFIG_USB_PRINTER is not set
915 942
916# 943#
917# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' 944# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
918# 945#
919 946
920# 947#
921# USB Gadget Support 948# may also be needed; see USB_STORAGE Help for more information
922# 949#
923# CONFIG_USB_GADGET is not set 950# CONFIG_USB_LIBUSUAL is not set
924# CONFIG_MMC is not set
925 951
926# 952#
927# LED devices 953# USB Imaging devices
928# 954#
929# CONFIG_NEW_LEDS is not set 955# CONFIG_USB_MDC800 is not set
956CONFIG_USB_MON=y
930 957
931# 958#
932# LED drivers 959# USB port drivers
933# 960#
934 961
935# 962#
936# LED Triggers 963# USB Serial Converter support
937# 964#
965# CONFIG_USB_SERIAL is not set
938 966
939# 967#
940# InfiniBand support 968# USB Miscellaneous drivers
941# 969#
970# CONFIG_USB_EMI62 is not set
971# CONFIG_USB_EMI26 is not set
972# CONFIG_USB_ADUTUX is not set
973# CONFIG_USB_AUERSWALD is not set
974# CONFIG_USB_RIO500 is not set
975# CONFIG_USB_LEGOTOWER is not set
976# CONFIG_USB_LCD is not set
977# CONFIG_USB_BERRY_CHARGE is not set
978# CONFIG_USB_LED is not set
979# CONFIG_USB_CYPRESS_CY7C63 is not set
980# CONFIG_USB_CYTHERM is not set
981# CONFIG_USB_PHIDGET is not set
982# CONFIG_USB_IDMOUSE is not set
983# CONFIG_USB_FTDI_ELAN is not set
984# CONFIG_USB_APPLEDISPLAY is not set
985# CONFIG_USB_SISUSBVGA is not set
986# CONFIG_USB_LD is not set
987# CONFIG_USB_TRANCEVIBRATOR is not set
988# CONFIG_USB_IOWARRIOR is not set
942 989
943# 990#
944# EDAC - error detection and reporting (RAS) (EXPERIMENTAL) 991# USB DSL modem support
945# 992#
946 993
947# 994#
948# Real Time Clock 995# USB Gadget Support
949# 996#
997# CONFIG_USB_GADGET is not set
998# CONFIG_MMC is not set
999# CONFIG_NEW_LEDS is not set
950CONFIG_RTC_LIB=y 1000CONFIG_RTC_LIB=y
951CONFIG_RTC_CLASS=y 1001CONFIG_RTC_CLASS=y
952CONFIG_RTC_HCTOSYS=y 1002CONFIG_RTC_HCTOSYS=y
@@ -966,6 +1016,7 @@ CONFIG_RTC_INTF_DEV=y
966# I2C RTC drivers 1016# I2C RTC drivers
967# 1017#
968# CONFIG_RTC_DRV_DS1307 is not set 1018# CONFIG_RTC_DRV_DS1307 is not set
1019# CONFIG_RTC_DRV_DS1374 is not set
969# CONFIG_RTC_DRV_DS1672 is not set 1020# CONFIG_RTC_DRV_DS1672 is not set
970# CONFIG_RTC_DRV_MAX6900 is not set 1021# CONFIG_RTC_DRV_MAX6900 is not set
971# CONFIG_RTC_DRV_RS5C372 is not set 1022# CONFIG_RTC_DRV_RS5C372 is not set
@@ -973,6 +1024,7 @@ CONFIG_RTC_INTF_DEV=y
973# CONFIG_RTC_DRV_X1205 is not set 1024# CONFIG_RTC_DRV_X1205 is not set
974# CONFIG_RTC_DRV_PCF8563 is not set 1025# CONFIG_RTC_DRV_PCF8563 is not set
975# CONFIG_RTC_DRV_PCF8583 is not set 1026# CONFIG_RTC_DRV_PCF8583 is not set
1027# CONFIG_RTC_DRV_M41T80 is not set
976 1028
977# 1029#
978# SPI RTC drivers 1030# SPI RTC drivers
@@ -984,8 +1036,10 @@ CONFIG_RTC_INTF_DEV=y
984# Platform RTC drivers 1036# Platform RTC drivers
985# 1037#
986# CONFIG_RTC_DRV_DS1553 is not set 1038# CONFIG_RTC_DRV_DS1553 is not set
1039# CONFIG_RTC_DRV_STK17TA8 is not set
987# CONFIG_RTC_DRV_DS1742 is not set 1040# CONFIG_RTC_DRV_DS1742 is not set
988# CONFIG_RTC_DRV_M48T86 is not set 1041# CONFIG_RTC_DRV_M48T86 is not set
1042# CONFIG_RTC_DRV_M48T59 is not set
989# CONFIG_RTC_DRV_V3020 is not set 1043# CONFIG_RTC_DRV_V3020 is not set
990 1044
991# 1045#
@@ -994,22 +1048,9 @@ CONFIG_RTC_INTF_DEV=y
994CONFIG_RTC_DRV_BFIN=y 1048CONFIG_RTC_DRV_BFIN=y
995 1049
996# 1050#
997# DMA Engine support 1051# Userspace I/O
998#
999# CONFIG_DMA_ENGINE is not set
1000
1001#
1002# DMA Clients
1003# 1052#
1004 1053# CONFIG_UIO is not set
1005#
1006# DMA Devices
1007#
1008
1009#
1010# PBX support
1011#
1012# CONFIG_PBX is not set
1013 1054
1014# 1055#
1015# File systems 1056# File systems
@@ -1054,7 +1095,6 @@ CONFIG_PROC_SYSCTL=y
1054CONFIG_SYSFS=y 1095CONFIG_SYSFS=y
1055# CONFIG_TMPFS is not set 1096# CONFIG_TMPFS is not set
1056# CONFIG_HUGETLB_PAGE is not set 1097# CONFIG_HUGETLB_PAGE is not set
1057CONFIG_RAMFS=y
1058# CONFIG_CONFIGFS_FS is not set 1098# CONFIG_CONFIGFS_FS is not set
1059 1099
1060# 1100#
@@ -1080,10 +1120,12 @@ CONFIG_YAFFS_SHORT_NAMES_IN_RAM=y
1080CONFIG_JFFS2_FS=m 1120CONFIG_JFFS2_FS=m
1081CONFIG_JFFS2_FS_DEBUG=0 1121CONFIG_JFFS2_FS_DEBUG=0
1082CONFIG_JFFS2_FS_WRITEBUFFER=y 1122CONFIG_JFFS2_FS_WRITEBUFFER=y
1123# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
1083# CONFIG_JFFS2_SUMMARY is not set 1124# CONFIG_JFFS2_SUMMARY is not set
1084# CONFIG_JFFS2_FS_XATTR is not set 1125# CONFIG_JFFS2_FS_XATTR is not set
1085# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set 1126# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
1086CONFIG_JFFS2_ZLIB=y 1127CONFIG_JFFS2_ZLIB=y
1128# CONFIG_JFFS2_LZO is not set
1087CONFIG_JFFS2_RTIME=y 1129CONFIG_JFFS2_RTIME=y
1088# CONFIG_JFFS2_RUBIN is not set 1130# CONFIG_JFFS2_RUBIN is not set
1089# CONFIG_CRAMFS is not set 1131# CONFIG_CRAMFS is not set
@@ -1092,10 +1134,7 @@ CONFIG_JFFS2_RTIME=y
1092# CONFIG_QNX4FS_FS is not set 1134# CONFIG_QNX4FS_FS is not set
1093# CONFIG_SYSV_FS is not set 1135# CONFIG_SYSV_FS is not set
1094# CONFIG_UFS_FS is not set 1136# CONFIG_UFS_FS is not set
1095 1137CONFIG_NETWORK_FILESYSTEMS=y
1096#
1097# Network File Systems
1098#
1099CONFIG_NFS_FS=m 1138CONFIG_NFS_FS=m
1100CONFIG_NFS_V3=y 1139CONFIG_NFS_V3=y
1101# CONFIG_NFS_V3_ACL is not set 1140# CONFIG_NFS_V3_ACL is not set
@@ -1115,17 +1154,12 @@ CONFIG_SMB_FS=m
1115# CONFIG_NCP_FS is not set 1154# CONFIG_NCP_FS is not set
1116# CONFIG_CODA_FS is not set 1155# CONFIG_CODA_FS is not set
1117# CONFIG_AFS_FS is not set 1156# CONFIG_AFS_FS is not set
1118# CONFIG_9P_FS is not set
1119 1157
1120# 1158#
1121# Partition Types 1159# Partition Types
1122# 1160#
1123# CONFIG_PARTITION_ADVANCED is not set 1161# CONFIG_PARTITION_ADVANCED is not set
1124CONFIG_MSDOS_PARTITION=y 1162CONFIG_MSDOS_PARTITION=y
1125
1126#
1127# Native Language Support
1128#
1129CONFIG_NLS=m 1163CONFIG_NLS=m
1130CONFIG_NLS_DEFAULT="iso8859-1" 1164CONFIG_NLS_DEFAULT="iso8859-1"
1131# CONFIG_NLS_CODEPAGE_437 is not set 1165# CONFIG_NLS_CODEPAGE_437 is not set
@@ -1166,21 +1200,16 @@ CONFIG_NLS_DEFAULT="iso8859-1"
1166# CONFIG_NLS_KOI8_R is not set 1200# CONFIG_NLS_KOI8_R is not set
1167# CONFIG_NLS_KOI8_U is not set 1201# CONFIG_NLS_KOI8_U is not set
1168# CONFIG_NLS_UTF8 is not set 1202# CONFIG_NLS_UTF8 is not set
1169
1170#
1171# Distributed Lock Manager
1172#
1173# CONFIG_DLM is not set 1203# CONFIG_DLM is not set
1174 1204CONFIG_INSTRUMENTATION=y
1175#
1176# Profiling support
1177#
1178# CONFIG_PROFILING is not set 1205# CONFIG_PROFILING is not set
1206# CONFIG_MARKERS is not set
1179 1207
1180# 1208#
1181# Kernel hacking 1209# Kernel hacking
1182# 1210#
1183# CONFIG_PRINTK_TIME is not set 1211# CONFIG_PRINTK_TIME is not set
1212CONFIG_ENABLE_WARN_DEPRECATED=y
1184CONFIG_ENABLE_MUST_CHECK=y 1213CONFIG_ENABLE_MUST_CHECK=y
1185# CONFIG_MAGIC_SYSRQ is not set 1214# CONFIG_MAGIC_SYSRQ is not set
1186# CONFIG_UNUSED_SYMBOLS is not set 1215# CONFIG_UNUSED_SYMBOLS is not set
@@ -1188,6 +1217,7 @@ CONFIG_DEBUG_FS=y
1188# CONFIG_HEADERS_CHECK is not set 1217# CONFIG_HEADERS_CHECK is not set
1189# CONFIG_DEBUG_KERNEL is not set 1218# CONFIG_DEBUG_KERNEL is not set
1190# CONFIG_DEBUG_BUGVERBOSE is not set 1219# CONFIG_DEBUG_BUGVERBOSE is not set
1220# CONFIG_SAMPLES is not set
1191CONFIG_DEBUG_MMRS=y 1221CONFIG_DEBUG_MMRS=y
1192CONFIG_DEBUG_HUNT_FOR_ZERO=y 1222CONFIG_DEBUG_HUNT_FOR_ZERO=y
1193CONFIG_DEBUG_BFIN_HWTRACE_ON=y 1223CONFIG_DEBUG_BFIN_HWTRACE_ON=y
@@ -1207,11 +1237,8 @@ CONFIG_ACCESS_CHECK=y
1207# CONFIG_KEYS is not set 1237# CONFIG_KEYS is not set
1208CONFIG_SECURITY=y 1238CONFIG_SECURITY=y
1209# CONFIG_SECURITY_NETWORK is not set 1239# CONFIG_SECURITY_NETWORK is not set
1210CONFIG_SECURITY_CAPABILITIES=m 1240# CONFIG_SECURITY_CAPABILITIES is not set
1211 1241# CONFIG_SECURITY_ROOTPLUG is not set
1212#
1213# Cryptographic options
1214#
1215# CONFIG_CRYPTO is not set 1242# CONFIG_CRYPTO is not set
1216 1243
1217# 1244#
@@ -1222,6 +1249,7 @@ CONFIG_CRC_CCITT=m
1222# CONFIG_CRC16 is not set 1249# CONFIG_CRC16 is not set
1223# CONFIG_CRC_ITU_T is not set 1250# CONFIG_CRC_ITU_T is not set
1224CONFIG_CRC32=y 1251CONFIG_CRC32=y
1252# CONFIG_CRC7 is not set
1225# CONFIG_LIBCRC32C is not set 1253# CONFIG_LIBCRC32C is not set
1226CONFIG_ZLIB_INFLATE=y 1254CONFIG_ZLIB_INFLATE=y
1227CONFIG_ZLIB_DEFLATE=m 1255CONFIG_ZLIB_DEFLATE=m
diff --git a/arch/blackfin/configs/BF548-EZKIT_defconfig b/arch/blackfin/configs/BF548-EZKIT_defconfig
index 5bfdfb287d13..1ff2ff4b49aa 100644
--- a/arch/blackfin/configs/BF548-EZKIT_defconfig
+++ b/arch/blackfin/configs/BF548-EZKIT_defconfig
@@ -1,6 +1,6 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.22.16 3# Linux kernel version: 2.6.24.7
4# 4#
5# CONFIG_MMU is not set 5# CONFIG_MMU is not set
6# CONFIG_FPU is not set 6# CONFIG_FPU is not set
@@ -13,35 +13,34 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y
13CONFIG_GENERIC_HWEIGHT=y 13CONFIG_GENERIC_HWEIGHT=y
14CONFIG_GENERIC_HARDIRQS=y 14CONFIG_GENERIC_HARDIRQS=y
15CONFIG_GENERIC_IRQ_PROBE=y 15CONFIG_GENERIC_IRQ_PROBE=y
16CONFIG_GENERIC_TIME=y
17CONFIG_GENERIC_GPIO=y 16CONFIG_GENERIC_GPIO=y
18CONFIG_FORCE_MAX_ZONEORDER=14 17CONFIG_FORCE_MAX_ZONEORDER=14
19CONFIG_GENERIC_CALIBRATE_DELAY=y 18CONFIG_GENERIC_CALIBRATE_DELAY=y
20CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" 19CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
21 20
22# 21#
23# Code maturity level options 22# General setup
24# 23#
25CONFIG_EXPERIMENTAL=y 24CONFIG_EXPERIMENTAL=y
26CONFIG_BROKEN_ON_SMP=y 25CONFIG_BROKEN_ON_SMP=y
27CONFIG_INIT_ENV_ARG_LIMIT=32 26CONFIG_INIT_ENV_ARG_LIMIT=32
28
29#
30# General setup
31#
32CONFIG_LOCALVERSION="" 27CONFIG_LOCALVERSION=""
33CONFIG_LOCALVERSION_AUTO=y 28CONFIG_LOCALVERSION_AUTO=y
34CONFIG_SYSVIPC=y 29CONFIG_SYSVIPC=y
35# CONFIG_IPC_NS is not set
36CONFIG_SYSVIPC_SYSCTL=y 30CONFIG_SYSVIPC_SYSCTL=y
37# CONFIG_POSIX_MQUEUE is not set 31# CONFIG_POSIX_MQUEUE is not set
38# CONFIG_BSD_PROCESS_ACCT is not set 32# CONFIG_BSD_PROCESS_ACCT is not set
39# CONFIG_TASKSTATS is not set 33# CONFIG_TASKSTATS is not set
40# CONFIG_UTS_NS is not set 34# CONFIG_USER_NS is not set
35# CONFIG_PID_NS is not set
41# CONFIG_AUDIT is not set 36# CONFIG_AUDIT is not set
42CONFIG_IKCONFIG=y 37CONFIG_IKCONFIG=y
43CONFIG_IKCONFIG_PROC=y 38CONFIG_IKCONFIG_PROC=y
44CONFIG_LOG_BUF_SHIFT=14 39CONFIG_LOG_BUF_SHIFT=14
40# CONFIG_CGROUPS is not set
41CONFIG_FAIR_GROUP_SCHED=y
42CONFIG_FAIR_USER_SCHED=y
43# CONFIG_FAIR_CGROUP_SCHED is not set
45CONFIG_SYSFS_DEPRECATED=y 44CONFIG_SYSFS_DEPRECATED=y
46# CONFIG_RELAY is not set 45# CONFIG_RELAY is not set
47CONFIG_BLK_DEV_INITRD=y 46CONFIG_BLK_DEV_INITRD=y
@@ -64,32 +63,24 @@ CONFIG_EPOLL=y
64CONFIG_SIGNALFD=y 63CONFIG_SIGNALFD=y
65CONFIG_EVENTFD=y 64CONFIG_EVENTFD=y
66CONFIG_VM_EVENT_COUNTERS=y 65CONFIG_VM_EVENT_COUNTERS=y
67CONFIG_BIG_ORDER_ALLOC_NOFAIL_MAGIC=3
68# CONFIG_NP2 is not set
69CONFIG_SLAB=y 66CONFIG_SLAB=y
70# CONFIG_SLUB is not set 67# CONFIG_SLUB is not set
71# CONFIG_SLOB is not set 68# CONFIG_SLOB is not set
69CONFIG_SLABINFO=y
72CONFIG_RT_MUTEXES=y 70CONFIG_RT_MUTEXES=y
73CONFIG_TINY_SHMEM=y 71CONFIG_TINY_SHMEM=y
74CONFIG_BASE_SMALL=0 72CONFIG_BASE_SMALL=0
75
76#
77# Loadable module support
78#
79CONFIG_MODULES=y 73CONFIG_MODULES=y
80CONFIG_MODULE_UNLOAD=y 74CONFIG_MODULE_UNLOAD=y
81# CONFIG_MODULE_FORCE_UNLOAD is not set 75# CONFIG_MODULE_FORCE_UNLOAD is not set
82# CONFIG_MODVERSIONS is not set 76# CONFIG_MODVERSIONS is not set
83# CONFIG_MODULE_SRCVERSION_ALL is not set 77# CONFIG_MODULE_SRCVERSION_ALL is not set
84CONFIG_KMOD=y 78CONFIG_KMOD=y
85
86#
87# Block layer
88#
89CONFIG_BLOCK=y 79CONFIG_BLOCK=y
90# CONFIG_LBD is not set 80# CONFIG_LBD is not set
91# CONFIG_BLK_DEV_IO_TRACE is not set 81# CONFIG_BLK_DEV_IO_TRACE is not set
92# CONFIG_LSF is not set 82# CONFIG_LSF is not set
83# CONFIG_BLK_DEV_BSG is not set
93 84
94# 85#
95# IO Schedulers 86# IO Schedulers
@@ -141,7 +132,6 @@ CONFIG_BF_REV_0_0=y
141# CONFIG_BF_REV_ANY is not set 132# CONFIG_BF_REV_ANY is not set
142# CONFIG_BF_REV_NONE is not set 133# CONFIG_BF_REV_NONE is not set
143CONFIG_BF54x=y 134CONFIG_BF54x=y
144CONFIG_BFIN_SINGLE_CORE=y
145CONFIG_IRQ_PLL_WAKEUP=7 135CONFIG_IRQ_PLL_WAKEUP=7
146CONFIG_IRQ_RTC=8 136CONFIG_IRQ_RTC=8
147CONFIG_IRQ_SPORT0_RX=9 137CONFIG_IRQ_SPORT0_RX=9
@@ -169,6 +159,7 @@ CONFIG_IRQ_TIMER8=11
169CONFIG_IRQ_TIMER9=11 159CONFIG_IRQ_TIMER9=11
170CONFIG_IRQ_TIMER10=11 160CONFIG_IRQ_TIMER10=11
171CONFIG_BFIN548_EZKIT=y 161CONFIG_BFIN548_EZKIT=y
162# CONFIG_BFIN548_BLUETECHNIX_CM is not set
172 163
173# 164#
174# BF548 Specific Configuration 165# BF548 Specific Configuration
@@ -262,12 +253,14 @@ CONFIG_PINT3_ASSIGN=0x02020303
262# Board customizations 253# Board customizations
263# 254#
264# CONFIG_CMDLINE_BOOL is not set 255# CONFIG_CMDLINE_BOOL is not set
256CONFIG_BOOT_LOAD=0x1000
265 257
266# 258#
267# Clock/PLL Setup 259# Clock/PLL Setup
268# 260#
269CONFIG_CLKIN_HZ=25000000 261CONFIG_CLKIN_HZ=25000000
270# CONFIG_BFIN_KERNEL_CLOCK is not set 262# CONFIG_BFIN_KERNEL_CLOCK is not set
263CONFIG_MAX_MEM_SIZE=512
271CONFIG_MAX_VCO_HZ=600000000 264CONFIG_MAX_VCO_HZ=600000000
272CONFIG_MIN_VCO_HZ=50000000 265CONFIG_MIN_VCO_HZ=50000000
273CONFIG_MAX_SCLK_HZ=133333333 266CONFIG_MAX_SCLK_HZ=133333333
@@ -281,14 +274,17 @@ CONFIG_HZ_250=y
281# CONFIG_HZ_300 is not set 274# CONFIG_HZ_300 is not set
282# CONFIG_HZ_1000 is not set 275# CONFIG_HZ_1000 is not set
283CONFIG_HZ=250 276CONFIG_HZ=250
277CONFIG_GENERIC_TIME=y
278CONFIG_GENERIC_CLOCKEVENTS=y
279# CONFIG_CYCLES_CLOCKSOURCE is not set
280# CONFIG_TICK_ONESHOT is not set
281# CONFIG_NO_HZ is not set
282# CONFIG_HIGH_RES_TIMERS is not set
283CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
284 284
285# 285#
286# Memory Setup 286# Misc
287# 287#
288CONFIG_MAX_MEM_SIZE=512
289# CONFIG_MEM_MT46V32M16_6T is not set
290CONFIG_MEM_MT46V32M16_5B=y
291CONFIG_BOOT_LOAD=0x1000
292CONFIG_BFIN_SCRATCH_REG_RETN=y 288CONFIG_BFIN_SCRATCH_REG_RETN=y
293# CONFIG_BFIN_SCRATCH_REG_RETE is not set 289# CONFIG_BFIN_SCRATCH_REG_RETE is not set
294# CONFIG_BFIN_SCRATCH_REG_CYCLES is not set 290# CONFIG_BFIN_SCRATCH_REG_CYCLES is not set
@@ -324,12 +320,14 @@ CONFIG_FLATMEM_MANUAL=y
324CONFIG_FLATMEM=y 320CONFIG_FLATMEM=y
325CONFIG_FLAT_NODE_MEM_MAP=y 321CONFIG_FLAT_NODE_MEM_MAP=y
326# CONFIG_SPARSEMEM_STATIC is not set 322# CONFIG_SPARSEMEM_STATIC is not set
323# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
327CONFIG_SPLIT_PTLOCK_CPUS=4 324CONFIG_SPLIT_PTLOCK_CPUS=4
328# CONFIG_RESOURCES_64BIT is not set 325# CONFIG_RESOURCES_64BIT is not set
329CONFIG_ZONE_DMA_FLAG=1 326CONFIG_ZONE_DMA_FLAG=1
330CONFIG_LARGE_ALLOCS=y 327CONFIG_VIRT_TO_BUS=y
331# CONFIG_BFIN_GPTIMERS is not set 328# CONFIG_BFIN_GPTIMERS is not set
332CONFIG_BFIN_DMA_5XX=y 329CONFIG_BFIN_DMA_5XX=y
330# CONFIG_DMA_UNCACHED_4M is not set
333CONFIG_DMA_UNCACHED_2M=y 331CONFIG_DMA_UNCACHED_2M=y
334# CONFIG_DMA_UNCACHED_1M is not set 332# CONFIG_DMA_UNCACHED_1M is not set
335# CONFIG_DMA_UNCACHED_NONE is not set 333# CONFIG_DMA_UNCACHED_NONE is not set
@@ -377,10 +375,6 @@ CONFIG_EBIU_FCTLVAL=0x6
377# 375#
378# CONFIG_PCI is not set 376# CONFIG_PCI is not set
379# CONFIG_ARCH_SUPPORTS_MSI is not set 377# CONFIG_ARCH_SUPPORTS_MSI is not set
380
381#
382# PCCARD (PCMCIA/CardBus) support
383#
384# CONFIG_PCCARD is not set 378# CONFIG_PCCARD is not set
385 379
386# 380#
@@ -396,6 +390,7 @@ CONFIG_BINFMT_ZFLAT=y
396# Power management options 390# Power management options
397# 391#
398# CONFIG_PM is not set 392# CONFIG_PM is not set
393CONFIG_SUSPEND_UP_POSSIBLE=y
399# CONFIG_PM_WAKEUP_BY_GPIO is not set 394# CONFIG_PM_WAKEUP_BY_GPIO is not set
400 395
401# 396#
@@ -439,6 +434,7 @@ CONFIG_SYN_COOKIES=y
439CONFIG_INET_XFRM_MODE_TRANSPORT=y 434CONFIG_INET_XFRM_MODE_TRANSPORT=y
440CONFIG_INET_XFRM_MODE_TUNNEL=y 435CONFIG_INET_XFRM_MODE_TUNNEL=y
441CONFIG_INET_XFRM_MODE_BEET=y 436CONFIG_INET_XFRM_MODE_BEET=y
437# CONFIG_INET_LRO is not set
442CONFIG_INET_DIAG=y 438CONFIG_INET_DIAG=y
443CONFIG_INET_TCP_DIAG=y 439CONFIG_INET_TCP_DIAG=y
444# CONFIG_TCP_CONG_ADVANCED is not set 440# CONFIG_TCP_CONG_ADVANCED is not set
@@ -465,10 +461,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
465# CONFIG_LAPB is not set 461# CONFIG_LAPB is not set
466# CONFIG_ECONET is not set 462# CONFIG_ECONET is not set
467# CONFIG_WAN_ROUTER is not set 463# CONFIG_WAN_ROUTER is not set
468
469#
470# QoS and/or fair queueing
471#
472# CONFIG_NET_SCHED is not set 464# CONFIG_NET_SCHED is not set
473 465
474# 466#
@@ -488,6 +480,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
488# CONFIG_MAC80211 is not set 480# CONFIG_MAC80211 is not set
489# CONFIG_IEEE80211 is not set 481# CONFIG_IEEE80211 is not set
490# CONFIG_RFKILL is not set 482# CONFIG_RFKILL is not set
483# CONFIG_NET_9P is not set
491 484
492# 485#
493# Device Drivers 486# Device Drivers
@@ -496,14 +489,11 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
496# 489#
497# Generic Driver Options 490# Generic Driver Options
498# 491#
492CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
499CONFIG_STANDALONE=y 493CONFIG_STANDALONE=y
500CONFIG_PREVENT_FIRMWARE_BUILD=y 494CONFIG_PREVENT_FIRMWARE_BUILD=y
501# CONFIG_FW_LOADER is not set 495# CONFIG_FW_LOADER is not set
502# CONFIG_SYS_HYPERVISOR is not set 496# CONFIG_SYS_HYPERVISOR is not set
503
504#
505# Connector - unified userspace <-> kernelspace linker
506#
507# CONFIG_CONNECTOR is not set 497# CONFIG_CONNECTOR is not set
508CONFIG_MTD=y 498CONFIG_MTD=y
509# CONFIG_MTD_DEBUG is not set 499# CONFIG_MTD_DEBUG is not set
@@ -523,6 +513,7 @@ CONFIG_MTD_BLOCK=y
523# CONFIG_INFTL is not set 513# CONFIG_INFTL is not set
524# CONFIG_RFD_FTL is not set 514# CONFIG_RFD_FTL is not set
525# CONFIG_SSFDC is not set 515# CONFIG_SSFDC is not set
516# CONFIG_MTD_OOPS is not set
526 517
527# 518#
528# RAM/ROM/Flash chip drivers 519# RAM/ROM/Flash chip drivers
@@ -587,39 +578,27 @@ CONFIG_MTD_NAND_BF5XX_HWECC=y
587# CONFIG_MTD_NAND_DISKONCHIP is not set 578# CONFIG_MTD_NAND_DISKONCHIP is not set
588# CONFIG_MTD_NAND_NANDSIM is not set 579# CONFIG_MTD_NAND_NANDSIM is not set
589# CONFIG_MTD_NAND_PLATFORM is not set 580# CONFIG_MTD_NAND_PLATFORM is not set
581# CONFIG_MTD_ALAUDA is not set
590# CONFIG_MTD_ONENAND is not set 582# CONFIG_MTD_ONENAND is not set
591 583
592# 584#
593# UBI - Unsorted block images 585# UBI - Unsorted block images
594# 586#
595# CONFIG_MTD_UBI is not set 587# CONFIG_MTD_UBI is not set
596
597#
598# Parallel port support
599#
600# CONFIG_PARPORT is not set 588# CONFIG_PARPORT is not set
601 589CONFIG_BLK_DEV=y
602#
603# Plug and Play support
604#
605# CONFIG_PNPACPI is not set
606
607#
608# Block devices
609#
610# CONFIG_BLK_DEV_COW_COMMON is not set 590# CONFIG_BLK_DEV_COW_COMMON is not set
611# CONFIG_BLK_DEV_LOOP is not set 591# CONFIG_BLK_DEV_LOOP is not set
612# CONFIG_BLK_DEV_NBD is not set 592# CONFIG_BLK_DEV_NBD is not set
593# CONFIG_BLK_DEV_UB is not set
613CONFIG_BLK_DEV_RAM=y 594CONFIG_BLK_DEV_RAM=y
614CONFIG_BLK_DEV_RAM_COUNT=16 595CONFIG_BLK_DEV_RAM_COUNT=16
615CONFIG_BLK_DEV_RAM_SIZE=4096 596CONFIG_BLK_DEV_RAM_SIZE=4096
616CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 597CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
617# CONFIG_CDROM_PKTCDVD is not set 598# CONFIG_CDROM_PKTCDVD is not set
618# CONFIG_ATA_OVER_ETH is not set 599# CONFIG_ATA_OVER_ETH is not set
619 600CONFIG_MISC_DEVICES=y
620# 601# CONFIG_EEPROM_93CX6 is not set
621# Misc devices
622#
623# CONFIG_IDE is not set 602# CONFIG_IDE is not set
624 603
625# 604#
@@ -627,6 +606,7 @@ CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
627# 606#
628# CONFIG_RAID_ATTRS is not set 607# CONFIG_RAID_ATTRS is not set
629CONFIG_SCSI=y 608CONFIG_SCSI=y
609CONFIG_SCSI_DMA=y
630# CONFIG_SCSI_TGT is not set 610# CONFIG_SCSI_TGT is not set
631# CONFIG_SCSI_NETLINK is not set 611# CONFIG_SCSI_NETLINK is not set
632CONFIG_SCSI_PROC_FS=y 612CONFIG_SCSI_PROC_FS=y
@@ -657,43 +637,35 @@ CONFIG_SCSI_WAIT_SCAN=m
657# CONFIG_SCSI_SPI_ATTRS is not set 637# CONFIG_SCSI_SPI_ATTRS is not set
658# CONFIG_SCSI_FC_ATTRS is not set 638# CONFIG_SCSI_FC_ATTRS is not set
659# CONFIG_SCSI_ISCSI_ATTRS is not set 639# CONFIG_SCSI_ISCSI_ATTRS is not set
660# CONFIG_SCSI_SAS_ATTRS is not set
661# CONFIG_SCSI_SAS_LIBSAS is not set 640# CONFIG_SCSI_SAS_LIBSAS is not set
662 641# CONFIG_SCSI_SRP_ATTRS is not set
663# 642CONFIG_SCSI_LOWLEVEL=y
664# SCSI low-level drivers
665#
666# CONFIG_ISCSI_TCP is not set 643# CONFIG_ISCSI_TCP is not set
667# CONFIG_SCSI_DEBUG is not set 644# CONFIG_SCSI_DEBUG is not set
668CONFIG_ATA=y 645CONFIG_ATA=y
669# CONFIG_ATA_NONSTANDARD is not set 646# CONFIG_ATA_NONSTANDARD is not set
670# CONFIG_PATA_PLATFORM is not set 647# CONFIG_PATA_PLATFORM is not set
671CONFIG_PATA_BF54X=y 648CONFIG_PATA_BF54X=y
672CONFIG_PATA_BF54X_DMA=y
673
674#
675# Multi-device support (RAID and LVM)
676#
677# CONFIG_MD is not set 649# CONFIG_MD is not set
678
679#
680# Network device support
681#
682CONFIG_NETDEVICES=y 650CONFIG_NETDEVICES=y
651# CONFIG_NETDEVICES_MULTIQUEUE is not set
683# CONFIG_DUMMY is not set 652# CONFIG_DUMMY is not set
684# CONFIG_BONDING is not set 653# CONFIG_BONDING is not set
654# CONFIG_MACVLAN is not set
685# CONFIG_EQUALIZER is not set 655# CONFIG_EQUALIZER is not set
686# CONFIG_TUN is not set 656# CONFIG_TUN is not set
657# CONFIG_VETH is not set
687# CONFIG_PHYLIB is not set 658# CONFIG_PHYLIB is not set
688
689#
690# Ethernet (10 or 100Mbit)
691#
692CONFIG_NET_ETHERNET=y 659CONFIG_NET_ETHERNET=y
693CONFIG_MII=y 660CONFIG_MII=y
694# CONFIG_SMC91X is not set 661# CONFIG_SMC91X is not set
695CONFIG_SMSC911X=y 662CONFIG_SMSC911X=y
696# CONFIG_DM9000 is not set 663# CONFIG_DM9000 is not set
664# CONFIG_IBM_NEW_EMAC_ZMII is not set
665# CONFIG_IBM_NEW_EMAC_RGMII is not set
666# CONFIG_IBM_NEW_EMAC_TAH is not set
667# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
668# CONFIG_B44 is not set
697CONFIG_NETDEV_1000=y 669CONFIG_NETDEV_1000=y
698# CONFIG_AX88180 is not set 670# CONFIG_AX88180 is not set
699CONFIG_NETDEV_10000=y 671CONFIG_NETDEV_10000=y
@@ -703,6 +675,15 @@ CONFIG_NETDEV_10000=y
703# 675#
704# CONFIG_WLAN_PRE80211 is not set 676# CONFIG_WLAN_PRE80211 is not set
705# CONFIG_WLAN_80211 is not set 677# CONFIG_WLAN_80211 is not set
678
679#
680# USB Network Adapters
681#
682# CONFIG_USB_CATC is not set
683# CONFIG_USB_KAWETH is not set
684# CONFIG_USB_PEGASUS is not set
685# CONFIG_USB_RTL8150 is not set
686# CONFIG_USB_USBNET is not set
706# CONFIG_WAN is not set 687# CONFIG_WAN is not set
707# CONFIG_PPP is not set 688# CONFIG_PPP is not set
708# CONFIG_SLIP is not set 689# CONFIG_SLIP is not set
@@ -710,15 +691,7 @@ CONFIG_NETDEV_10000=y
710# CONFIG_NETCONSOLE is not set 691# CONFIG_NETCONSOLE is not set
711# CONFIG_NETPOLL is not set 692# CONFIG_NETPOLL is not set
712# CONFIG_NET_POLL_CONTROLLER is not set 693# CONFIG_NET_POLL_CONTROLLER is not set
713
714#
715# ISDN subsystem
716#
717# CONFIG_ISDN is not set 694# CONFIG_ISDN is not set
718
719#
720# Telephony Support
721#
722# CONFIG_PHONE is not set 695# CONFIG_PHONE is not set
723 696
724# 697#
@@ -733,9 +706,6 @@ CONFIG_INPUT=y
733# 706#
734# CONFIG_INPUT_MOUSEDEV is not set 707# CONFIG_INPUT_MOUSEDEV is not set
735# CONFIG_INPUT_JOYDEV is not set 708# CONFIG_INPUT_JOYDEV is not set
736CONFIG_INPUT_TSDEV=m
737CONFIG_INPUT_TSDEV_SCREEN_X=240
738CONFIG_INPUT_TSDEV_SCREEN_Y=320
739CONFIG_INPUT_EVDEV=m 709CONFIG_INPUT_EVDEV=m
740CONFIG_INPUT_EVBUG=m 710CONFIG_INPUT_EVBUG=m
741 711
@@ -758,6 +728,7 @@ CONFIG_KEYBOARD_BFIN=y
758CONFIG_INPUT_TOUCHSCREEN=y 728CONFIG_INPUT_TOUCHSCREEN=y
759# CONFIG_TOUCHSCREEN_ADS7846 is not set 729# CONFIG_TOUCHSCREEN_ADS7846 is not set
760CONFIG_TOUCHSCREEN_AD7877=m 730CONFIG_TOUCHSCREEN_AD7877=m
731# CONFIG_TOUCHSCREEN_FUJITSU is not set
761# CONFIG_TOUCHSCREEN_GUNZE is not set 732# CONFIG_TOUCHSCREEN_GUNZE is not set
762# CONFIG_TOUCHSCREEN_ELO is not set 733# CONFIG_TOUCHSCREEN_ELO is not set
763# CONFIG_TOUCHSCREEN_MTOUCH is not set 734# CONFIG_TOUCHSCREEN_MTOUCH is not set
@@ -787,7 +758,6 @@ CONFIG_INPUT_MISC=y
787# 758#
788# CONFIG_AD9960 is not set 759# CONFIG_AD9960 is not set
789# CONFIG_SPI_ADC_BF533 is not set 760# CONFIG_SPI_ADC_BF533 is not set
790# CONFIG_BF5xx_PFLAGS is not set
791# CONFIG_BF5xx_PPIFCD is not set 761# CONFIG_BF5xx_PPIFCD is not set
792# CONFIG_BFIN_SIMPLE_TIMER is not set 762# CONFIG_BFIN_SIMPLE_TIMER is not set
793# CONFIG_BF5xx_PPI is not set 763# CONFIG_BF5xx_PPI is not set
@@ -796,7 +766,7 @@ CONFIG_BFIN_OTP=y
796# CONFIG_BFIN_SPORT is not set 766# CONFIG_BFIN_SPORT is not set
797# CONFIG_BFIN_TIMER_LATENCY is not set 767# CONFIG_BFIN_TIMER_LATENCY is not set
798# CONFIG_TWI_LCD is not set 768# CONFIG_TWI_LCD is not set
799# CONFIG_AD5304 is not set 769# CONFIG_SIMPLE_GPIO is not set
800CONFIG_VT=y 770CONFIG_VT=y
801CONFIG_VT_CONSOLE=y 771CONFIG_VT_CONSOLE=y
802CONFIG_HW_CONSOLE=y 772CONFIG_HW_CONSOLE=y
@@ -830,27 +800,11 @@ CONFIG_UNIX98_PTYS=y
830# CAN, the car bus and industrial fieldbus 800# CAN, the car bus and industrial fieldbus
831# 801#
832# CONFIG_CAN4LINUX is not set 802# CONFIG_CAN4LINUX is not set
833
834#
835# IPMI
836#
837# CONFIG_IPMI_HANDLER is not set 803# CONFIG_IPMI_HANDLER is not set
838CONFIG_WATCHDOG=y
839# CONFIG_WATCHDOG_NOWAYOUT is not set
840
841#
842# Watchdog Device Drivers
843#
844# CONFIG_SOFT_WATCHDOG is not set
845CONFIG_BFIN_WDT=y
846CONFIG_HW_RANDOM=y 804CONFIG_HW_RANDOM=y
847# CONFIG_GEN_RTC is not set 805# CONFIG_GEN_RTC is not set
848# CONFIG_R3964 is not set 806# CONFIG_R3964 is not set
849# CONFIG_RAW_DRIVER is not set 807# CONFIG_RAW_DRIVER is not set
850
851#
852# TPM devices
853#
854# CONFIG_TCG_TPM is not set 808# CONFIG_TCG_TPM is not set
855CONFIG_I2C=y 809CONFIG_I2C=y
856CONFIG_I2C_BOARDINFO=y 810CONFIG_I2C_BOARDINFO=y
@@ -872,21 +826,24 @@ CONFIG_I2C_BLACKFIN_TWI_CLK_KHZ=50
872# CONFIG_I2C_OCORES is not set 826# CONFIG_I2C_OCORES is not set
873# CONFIG_I2C_PARPORT_LIGHT is not set 827# CONFIG_I2C_PARPORT_LIGHT is not set
874# CONFIG_I2C_SIMTEC is not set 828# CONFIG_I2C_SIMTEC is not set
829# CONFIG_I2C_TAOS_EVM is not set
875# CONFIG_I2C_STUB is not set 830# CONFIG_I2C_STUB is not set
831# CONFIG_I2C_TINY_USB is not set
876 832
877# 833#
878# Miscellaneous I2C Chip support 834# Miscellaneous I2C Chip support
879# 835#
880# CONFIG_SENSORS_DS1337 is not set 836# CONFIG_SENSORS_DS1337 is not set
881# CONFIG_SENSORS_DS1374 is not set 837# CONFIG_SENSORS_DS1374 is not set
838# CONFIG_DS1682 is not set
882# CONFIG_SENSORS_AD5252 is not set 839# CONFIG_SENSORS_AD5252 is not set
883# CONFIG_SENSORS_EEPROM is not set 840# CONFIG_SENSORS_EEPROM is not set
884# CONFIG_SENSORS_PCF8574 is not set 841# CONFIG_SENSORS_PCF8574 is not set
885# CONFIG_SENSORS_PCF8575 is not set 842# CONFIG_SENSORS_PCF8575 is not set
886# CONFIG_SENSORS_PCA9543 is not set
887# CONFIG_SENSORS_PCA9539 is not set 843# CONFIG_SENSORS_PCA9539 is not set
888# CONFIG_SENSORS_PCF8591 is not set 844# CONFIG_SENSORS_PCF8591 is not set
889# CONFIG_SENSORS_MAX6875 is not set 845# CONFIG_SENSORS_MAX6875 is not set
846# CONFIG_SENSORS_TSL2550 is not set
890# CONFIG_I2C_DEBUG_CORE is not set 847# CONFIG_I2C_DEBUG_CORE is not set
891# CONFIG_I2C_DEBUG_ALGO is not set 848# CONFIG_I2C_DEBUG_ALGO is not set
892# CONFIG_I2C_DEBUG_BUS is not set 849# CONFIG_I2C_DEBUG_BUS is not set
@@ -909,14 +866,11 @@ CONFIG_SPI_BFIN=y
909# 866#
910# CONFIG_SPI_AT25 is not set 867# CONFIG_SPI_AT25 is not set
911# CONFIG_SPI_SPIDEV is not set 868# CONFIG_SPI_SPIDEV is not set
912 869# CONFIG_SPI_TLE62X0 is not set
913#
914# Dallas's 1-wire bus
915#
916# CONFIG_W1 is not set 870# CONFIG_W1 is not set
871# CONFIG_POWER_SUPPLY is not set
917CONFIG_HWMON=y 872CONFIG_HWMON=y
918# CONFIG_HWMON_VID is not set 873# CONFIG_HWMON_VID is not set
919# CONFIG_SENSORS_ABITUGURU is not set
920# CONFIG_SENSORS_AD7418 is not set 874# CONFIG_SENSORS_AD7418 is not set
921# CONFIG_SENSORS_ADM1021 is not set 875# CONFIG_SENSORS_ADM1021 is not set
922# CONFIG_SENSORS_ADM1025 is not set 876# CONFIG_SENSORS_ADM1025 is not set
@@ -924,12 +878,12 @@ CONFIG_HWMON=y
924# CONFIG_SENSORS_ADM1029 is not set 878# CONFIG_SENSORS_ADM1029 is not set
925# CONFIG_SENSORS_ADM1031 is not set 879# CONFIG_SENSORS_ADM1031 is not set
926# CONFIG_SENSORS_ADM9240 is not set 880# CONFIG_SENSORS_ADM9240 is not set
927# CONFIG_SENSORS_ASB100 is not set 881# CONFIG_SENSORS_ADT7470 is not set
928# CONFIG_SENSORS_ATXP1 is not set 882# CONFIG_SENSORS_ATXP1 is not set
929# CONFIG_SENSORS_DS1621 is not set 883# CONFIG_SENSORS_DS1621 is not set
930# CONFIG_SENSORS_F71805F is not set 884# CONFIG_SENSORS_F71805F is not set
931# CONFIG_SENSORS_FSCHER is not set 885# CONFIG_SENSORS_F71882FG is not set
932# CONFIG_SENSORS_FSCPOS is not set 886# CONFIG_SENSORS_F75375S is not set
933# CONFIG_SENSORS_GL518SM is not set 887# CONFIG_SENSORS_GL518SM is not set
934# CONFIG_SENSORS_GL520SM is not set 888# CONFIG_SENSORS_GL520SM is not set
935# CONFIG_SENSORS_IT87 is not set 889# CONFIG_SENSORS_IT87 is not set
@@ -944,13 +898,16 @@ CONFIG_HWMON=y
944# CONFIG_SENSORS_LM87 is not set 898# CONFIG_SENSORS_LM87 is not set
945# CONFIG_SENSORS_LM90 is not set 899# CONFIG_SENSORS_LM90 is not set
946# CONFIG_SENSORS_LM92 is not set 900# CONFIG_SENSORS_LM92 is not set
901# CONFIG_SENSORS_LM93 is not set
947# CONFIG_SENSORS_MAX1619 is not set 902# CONFIG_SENSORS_MAX1619 is not set
948# CONFIG_SENSORS_MAX6650 is not set 903# CONFIG_SENSORS_MAX6650 is not set
949# CONFIG_SENSORS_PC87360 is not set 904# CONFIG_SENSORS_PC87360 is not set
950# CONFIG_SENSORS_PC87427 is not set 905# CONFIG_SENSORS_PC87427 is not set
906# CONFIG_SENSORS_DME1737 is not set
951# CONFIG_SENSORS_SMSC47M1 is not set 907# CONFIG_SENSORS_SMSC47M1 is not set
952# CONFIG_SENSORS_SMSC47M192 is not set 908# CONFIG_SENSORS_SMSC47M192 is not set
953# CONFIG_SENSORS_SMSC47B397 is not set 909# CONFIG_SENSORS_SMSC47B397 is not set
910# CONFIG_SENSORS_THMC50 is not set
954# CONFIG_SENSORS_VT1211 is not set 911# CONFIG_SENSORS_VT1211 is not set
955# CONFIG_SENSORS_W83781D is not set 912# CONFIG_SENSORS_W83781D is not set
956# CONFIG_SENSORS_W83791D is not set 913# CONFIG_SENSORS_W83791D is not set
@@ -960,6 +917,25 @@ CONFIG_HWMON=y
960# CONFIG_SENSORS_W83627HF is not set 917# CONFIG_SENSORS_W83627HF is not set
961# CONFIG_SENSORS_W83627EHF is not set 918# CONFIG_SENSORS_W83627EHF is not set
962# CONFIG_HWMON_DEBUG_CHIP is not set 919# CONFIG_HWMON_DEBUG_CHIP is not set
920CONFIG_WATCHDOG=y
921# CONFIG_WATCHDOG_NOWAYOUT is not set
922
923#
924# Watchdog Device Drivers
925#
926# CONFIG_SOFT_WATCHDOG is not set
927CONFIG_BFIN_WDT=y
928
929#
930# USB-based Watchdog Cards
931#
932# CONFIG_USBPCWATCHDOG is not set
933
934#
935# Sonics Silicon Backplane
936#
937CONFIG_SSB_POSSIBLE=y
938# CONFIG_SSB is not set
963 939
964# 940#
965# Multifunction device drivers 941# Multifunction device drivers
@@ -972,23 +948,20 @@ CONFIG_HWMON=y
972# CONFIG_VIDEO_DEV is not set 948# CONFIG_VIDEO_DEV is not set
973# CONFIG_DVB_CORE is not set 949# CONFIG_DVB_CORE is not set
974CONFIG_DAB=y 950CONFIG_DAB=y
951# CONFIG_USB_DABUSB is not set
975 952
976# 953#
977# Graphics support 954# Graphics support
978# 955#
979# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
980
981#
982# Display device support
983#
984# CONFIG_DISPLAY_SUPPORT is not set
985# CONFIG_VGASTATE is not set 956# CONFIG_VGASTATE is not set
957# CONFIG_VIDEO_OUTPUT_CONTROL is not set
986CONFIG_FB=y 958CONFIG_FB=y
987CONFIG_FIRMWARE_EDID=y 959CONFIG_FIRMWARE_EDID=y
988# CONFIG_FB_DDC is not set 960# CONFIG_FB_DDC is not set
989CONFIG_FB_CFB_FILLRECT=y 961CONFIG_FB_CFB_FILLRECT=y
990CONFIG_FB_CFB_COPYAREA=y 962CONFIG_FB_CFB_COPYAREA=y
991CONFIG_FB_CFB_IMAGEBLIT=y 963CONFIG_FB_CFB_IMAGEBLIT=y
964# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
992# CONFIG_FB_SYS_FILLRECT is not set 965# CONFIG_FB_SYS_FILLRECT is not set
993# CONFIG_FB_SYS_COPYAREA is not set 966# CONFIG_FB_SYS_COPYAREA is not set
994# CONFIG_FB_SYS_IMAGEBLIT is not set 967# CONFIG_FB_SYS_IMAGEBLIT is not set
@@ -1003,18 +976,24 @@ CONFIG_FB_DEFERRED_IO=y
1003# 976#
1004# Frame buffer hardware drivers 977# Frame buffer hardware drivers
1005# 978#
1006# CONFIG_FB_BFIN_7171 is not set
1007# CONFIG_FB_BFIN_7393 is not set
1008CONFIG_FB_BF54X_LQ043=y 979CONFIG_FB_BF54X_LQ043=y
1009# CONFIG_FB_BFIN_T350MCQB is not set 980# CONFIG_FB_BFIN_T350MCQB is not set
981# CONFIG_FB_BFIN_7393 is not set
1010# CONFIG_FB_S1D13XXX is not set 982# CONFIG_FB_S1D13XXX is not set
1011# CONFIG_FB_VIRTUAL is not set 983# CONFIG_FB_VIRTUAL is not set
984# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
985
986#
987# Display device support
988#
989# CONFIG_DISPLAY_SUPPORT is not set
1012 990
1013# 991#
1014# Console display driver support 992# Console display driver support
1015# 993#
1016CONFIG_DUMMY_CONSOLE=y 994CONFIG_DUMMY_CONSOLE=y
1017CONFIG_FRAMEBUFFER_CONSOLE=y 995CONFIG_FRAMEBUFFER_CONSOLE=y
996# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
1018# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set 997# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
1019CONFIG_FONTS=y 998CONFIG_FONTS=y
1020# CONFIG_FONT_8x8 is not set 999# CONFIG_FONT_8x8 is not set
@@ -1065,10 +1044,21 @@ CONFIG_SND_VERBOSE_PROCFS=y
1065# CONFIG_SND_MPU401 is not set 1044# CONFIG_SND_MPU401 is not set
1066 1045
1067# 1046#
1047# SPI devices
1048#
1049
1050#
1068# ALSA Blackfin devices 1051# ALSA Blackfin devices
1069# 1052#
1070# CONFIG_SND_BLACKFIN_AD1836 is not set 1053# CONFIG_SND_BLACKFIN_AD1836 is not set
1071# CONFIG_SND_BFIN_AD73311 is not set 1054# CONFIG_SND_BFIN_AD73311 is not set
1055# CONFIG_SND_BFIN_AD73322 is not set
1056
1057#
1058# USB devices
1059#
1060# CONFIG_SND_USB_AUDIO is not set
1061# CONFIG_SND_USB_CAIAQ is not set
1072 1062
1073# 1063#
1074# System on Chip audio support 1064# System on Chip audio support
@@ -1084,6 +1074,10 @@ CONFIG_SND_BF5XX_SOC_BF548_EZKIT=y
1084CONFIG_SND_BF5XX_SPORT_NUM=0 1074CONFIG_SND_BF5XX_SPORT_NUM=0
1085CONFIG_SND_BF5XX_HAVE_COLD_RESET=y 1075CONFIG_SND_BF5XX_HAVE_COLD_RESET=y
1086CONFIG_SND_BF5XX_RESET_GPIO_NUM=19 1076CONFIG_SND_BF5XX_RESET_GPIO_NUM=19
1077
1078#
1079# SoC Audio support for SuperH
1080#
1087CONFIG_SND_SOC_AD1980=y 1081CONFIG_SND_SOC_AD1980=y
1088 1082
1089# 1083#
@@ -1091,72 +1085,152 @@ CONFIG_SND_SOC_AD1980=y
1091# 1085#
1092# CONFIG_SOUND_PRIME is not set 1086# CONFIG_SOUND_PRIME is not set
1093CONFIG_AC97_BUS=y 1087CONFIG_AC97_BUS=y
1094 1088CONFIG_HID_SUPPORT=y
1095# 1089CONFIG_HID=y
1096# HID Devices
1097#
1098CONFIG_HID=m
1099# CONFIG_HID_DEBUG is not set 1090# CONFIG_HID_DEBUG is not set
1091# CONFIG_HIDRAW is not set
1100 1092
1101# 1093#
1102# USB support 1094# USB Input Devices
1103# 1095#
1096CONFIG_USB_HID=y
1097# CONFIG_USB_HIDINPUT_POWERBOOK is not set
1098# CONFIG_HID_FF is not set
1099# CONFIG_USB_HIDDEV is not set
1100CONFIG_USB_SUPPORT=y
1104CONFIG_USB_ARCH_HAS_HCD=y 1101CONFIG_USB_ARCH_HAS_HCD=y
1105# CONFIG_USB_ARCH_HAS_OHCI is not set 1102# CONFIG_USB_ARCH_HAS_OHCI is not set
1106# CONFIG_USB_ARCH_HAS_EHCI is not set 1103# CONFIG_USB_ARCH_HAS_EHCI is not set
1107# CONFIG_USB is not set 1104CONFIG_USB=y
1105# CONFIG_USB_DEBUG is not set
1106
1107#
1108# Miscellaneous USB options
1109#
1110# CONFIG_USB_DEVICEFS is not set
1111CONFIG_USB_DEVICE_CLASS=y
1112# CONFIG_USB_DYNAMIC_MINORS is not set
1113# CONFIG_USB_OTG is not set
1114# CONFIG_USB_OTG_WHITELIST is not set
1115CONFIG_USB_OTG_BLACKLIST_HUB=y
1108 1116
1109# 1117#
1110# Enable Host or Gadget support to see Inventra options 1118# USB Host Controller Drivers
1111# 1119#
1120# CONFIG_USB_ISP116X_HCD is not set
1121# CONFIG_USB_ISP1362_HCD is not set
1122# CONFIG_USB_ISP1760_HCD is not set
1123# CONFIG_USB_SL811_HCD is not set
1124# CONFIG_USB_R8A66597_HCD is not set
1125CONFIG_USB_MUSB_HDRC=y
1126CONFIG_USB_MUSB_SOC=y
1127
1128#
1129# Blackfin high speed USB support
1130#
1131CONFIG_USB_MUSB_HOST=y
1132# CONFIG_USB_MUSB_PERIPHERAL is not set
1133# CONFIG_USB_MUSB_OTG is not set
1134CONFIG_USB_MUSB_HDRC_HCD=y
1135# CONFIG_MUSB_PIO_ONLY is not set
1136# CONFIG_USB_INVENTRA_DMA is not set
1137# CONFIG_USB_TI_CPPI_DMA is not set
1138CONFIG_USB_MUSB_LOGLEVEL=0
1139
1140#
1141# USB Device Class drivers
1142#
1143# CONFIG_USB_ACM is not set
1144# CONFIG_USB_PRINTER is not set
1112 1145
1113# 1146#
1114# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' 1147# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
1115# 1148#
1116 1149
1117# 1150#
1118# USB Gadget Support 1151# may also be needed; see USB_STORAGE Help for more information
1119# 1152#
1120# CONFIG_USB_GADGET is not set 1153CONFIG_USB_STORAGE=m
1121CONFIG_MMC=m 1154# CONFIG_USB_STORAGE_DEBUG is not set
1122# CONFIG_MMC_DEBUG is not set 1155# CONFIG_USB_STORAGE_DATAFAB is not set
1123# CONFIG_MMC_UNSAFE_RESUME is not set 1156# CONFIG_USB_STORAGE_FREECOM is not set
1157# CONFIG_USB_STORAGE_ISD200 is not set
1158# CONFIG_USB_STORAGE_DPCM is not set
1159# CONFIG_USB_STORAGE_USBAT is not set
1160# CONFIG_USB_STORAGE_SDDR09 is not set
1161# CONFIG_USB_STORAGE_SDDR55 is not set
1162# CONFIG_USB_STORAGE_JUMPSHOT is not set
1163# CONFIG_USB_STORAGE_ALAUDA is not set
1164# CONFIG_USB_STORAGE_ONETOUCH is not set
1165# CONFIG_USB_STORAGE_KARMA is not set
1166# CONFIG_USB_LIBUSUAL is not set
1124 1167
1125# 1168#
1126# MMC/SD Card Drivers 1169# USB Imaging devices
1127# 1170#
1128CONFIG_MMC_BLOCK=m 1171# CONFIG_USB_MDC800 is not set
1172# CONFIG_USB_MICROTEK is not set
1173CONFIG_USB_MON=y
1129 1174
1130# 1175#
1131# MMC/SD Host Controller Drivers 1176# USB port drivers
1132# 1177#
1133CONFIG_SDH_BFIN=m
1134# CONFIG_SPI_MMC is not set
1135 1178
1136# 1179#
1137# LED devices 1180# USB Serial Converter support
1138# 1181#
1139# CONFIG_NEW_LEDS is not set 1182# CONFIG_USB_SERIAL is not set
1140 1183
1141# 1184#
1142# LED drivers 1185# USB Miscellaneous drivers
1143# 1186#
1187# CONFIG_USB_EMI62 is not set
1188# CONFIG_USB_EMI26 is not set
1189# CONFIG_USB_ADUTUX is not set
1190# CONFIG_USB_AUERSWALD is not set
1191# CONFIG_USB_RIO500 is not set
1192# CONFIG_USB_LEGOTOWER is not set
1193# CONFIG_USB_LCD is not set
1194# CONFIG_USB_BERRY_CHARGE is not set
1195# CONFIG_USB_LED is not set
1196# CONFIG_USB_CYPRESS_CY7C63 is not set
1197# CONFIG_USB_CYTHERM is not set
1198# CONFIG_USB_PHIDGET is not set
1199# CONFIG_USB_IDMOUSE is not set
1200# CONFIG_USB_FTDI_ELAN is not set
1201# CONFIG_USB_APPLEDISPLAY is not set
1202# CONFIG_USB_SISUSBVGA is not set
1203# CONFIG_USB_LD is not set
1204# CONFIG_USB_TRANCEVIBRATOR is not set
1205# CONFIG_USB_IOWARRIOR is not set
1144 1206
1145# 1207#
1146# LED Triggers 1208# USB DSL modem support
1147# 1209#
1148 1210
1149# 1211#
1150# InfiniBand support 1212# USB Gadget Support
1151# 1213#
1214# CONFIG_USB_GADGET is not set
1215CONFIG_MMC=m
1216# CONFIG_MMC_DEBUG is not set
1217# CONFIG_MMC_UNSAFE_RESUME is not set
1152 1218
1153# 1219#
1154# EDAC - error detection and reporting (RAS) (EXPERIMENTAL) 1220# MMC/SD Card Drivers
1155# 1221#
1222CONFIG_MMC_BLOCK=m
1223CONFIG_MMC_BLOCK_BOUNCE=y
1224# CONFIG_SDIO_UART is not set
1156 1225
1157# 1226#
1158# Real Time Clock 1227# MMC/SD Host Controller Drivers
1159# 1228#
1229CONFIG_SDH_BFIN=m
1230# CONFIG_SDH_BFIN_MISSING_CMD_PULLUP_WORKAROUND is not set
1231# CONFIG_MMC_SPI is not set
1232# CONFIG_SPI_MMC is not set
1233# CONFIG_NEW_LEDS is not set
1160CONFIG_RTC_LIB=y 1234CONFIG_RTC_LIB=y
1161CONFIG_RTC_CLASS=y 1235CONFIG_RTC_CLASS=y
1162CONFIG_RTC_HCTOSYS=y 1236CONFIG_RTC_HCTOSYS=y
@@ -1176,6 +1250,7 @@ CONFIG_RTC_INTF_DEV=y
1176# I2C RTC drivers 1250# I2C RTC drivers
1177# 1251#
1178# CONFIG_RTC_DRV_DS1307 is not set 1252# CONFIG_RTC_DRV_DS1307 is not set
1253# CONFIG_RTC_DRV_DS1374 is not set
1179# CONFIG_RTC_DRV_DS1672 is not set 1254# CONFIG_RTC_DRV_DS1672 is not set
1180# CONFIG_RTC_DRV_MAX6900 is not set 1255# CONFIG_RTC_DRV_MAX6900 is not set
1181# CONFIG_RTC_DRV_RS5C372 is not set 1256# CONFIG_RTC_DRV_RS5C372 is not set
@@ -1183,6 +1258,7 @@ CONFIG_RTC_INTF_DEV=y
1183# CONFIG_RTC_DRV_X1205 is not set 1258# CONFIG_RTC_DRV_X1205 is not set
1184# CONFIG_RTC_DRV_PCF8563 is not set 1259# CONFIG_RTC_DRV_PCF8563 is not set
1185# CONFIG_RTC_DRV_PCF8583 is not set 1260# CONFIG_RTC_DRV_PCF8583 is not set
1261# CONFIG_RTC_DRV_M41T80 is not set
1186 1262
1187# 1263#
1188# SPI RTC drivers 1264# SPI RTC drivers
@@ -1194,8 +1270,10 @@ CONFIG_RTC_INTF_DEV=y
1194# Platform RTC drivers 1270# Platform RTC drivers
1195# 1271#
1196# CONFIG_RTC_DRV_DS1553 is not set 1272# CONFIG_RTC_DRV_DS1553 is not set
1273# CONFIG_RTC_DRV_STK17TA8 is not set
1197# CONFIG_RTC_DRV_DS1742 is not set 1274# CONFIG_RTC_DRV_DS1742 is not set
1198# CONFIG_RTC_DRV_M48T86 is not set 1275# CONFIG_RTC_DRV_M48T86 is not set
1276# CONFIG_RTC_DRV_M48T59 is not set
1199# CONFIG_RTC_DRV_V3020 is not set 1277# CONFIG_RTC_DRV_V3020 is not set
1200 1278
1201# 1279#
@@ -1204,22 +1282,9 @@ CONFIG_RTC_INTF_DEV=y
1204CONFIG_RTC_DRV_BFIN=y 1282CONFIG_RTC_DRV_BFIN=y
1205 1283
1206# 1284#
1207# DMA Engine support 1285# Userspace I/O
1208#
1209# CONFIG_DMA_ENGINE is not set
1210
1211#
1212# DMA Clients
1213# 1286#
1214 1287# CONFIG_UIO is not set
1215#
1216# DMA Devices
1217#
1218
1219#
1220# PBX support
1221#
1222# CONFIG_PBX is not set
1223 1288
1224# 1289#
1225# File systems 1290# File systems
@@ -1280,7 +1345,6 @@ CONFIG_PROC_SYSCTL=y
1280CONFIG_SYSFS=y 1345CONFIG_SYSFS=y
1281# CONFIG_TMPFS is not set 1346# CONFIG_TMPFS is not set
1282# CONFIG_HUGETLB_PAGE is not set 1347# CONFIG_HUGETLB_PAGE is not set
1283CONFIG_RAMFS=y
1284# CONFIG_CONFIGFS_FS is not set 1348# CONFIG_CONFIGFS_FS is not set
1285 1349
1286# 1350#
@@ -1306,10 +1370,12 @@ CONFIG_YAFFS_SHORT_NAMES_IN_RAM=y
1306CONFIG_JFFS2_FS=m 1370CONFIG_JFFS2_FS=m
1307CONFIG_JFFS2_FS_DEBUG=0 1371CONFIG_JFFS2_FS_DEBUG=0
1308CONFIG_JFFS2_FS_WRITEBUFFER=y 1372CONFIG_JFFS2_FS_WRITEBUFFER=y
1373# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
1309# CONFIG_JFFS2_SUMMARY is not set 1374# CONFIG_JFFS2_SUMMARY is not set
1310# CONFIG_JFFS2_FS_XATTR is not set 1375# CONFIG_JFFS2_FS_XATTR is not set
1311# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set 1376# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
1312CONFIG_JFFS2_ZLIB=y 1377CONFIG_JFFS2_ZLIB=y
1378# CONFIG_JFFS2_LZO is not set
1313CONFIG_JFFS2_RTIME=y 1379CONFIG_JFFS2_RTIME=y
1314# CONFIG_JFFS2_RUBIN is not set 1380# CONFIG_JFFS2_RUBIN is not set
1315# CONFIG_CRAMFS is not set 1381# CONFIG_CRAMFS is not set
@@ -1318,10 +1384,7 @@ CONFIG_JFFS2_RTIME=y
1318# CONFIG_QNX4FS_FS is not set 1384# CONFIG_QNX4FS_FS is not set
1319# CONFIG_SYSV_FS is not set 1385# CONFIG_SYSV_FS is not set
1320# CONFIG_UFS_FS is not set 1386# CONFIG_UFS_FS is not set
1321 1387CONFIG_NETWORK_FILESYSTEMS=y
1322#
1323# Network File Systems
1324#
1325CONFIG_NFS_FS=m 1388CONFIG_NFS_FS=m
1326CONFIG_NFS_V3=y 1389CONFIG_NFS_V3=y
1327# CONFIG_NFS_V3_ACL is not set 1390# CONFIG_NFS_V3_ACL is not set
@@ -1352,7 +1415,6 @@ CONFIG_CIFS=y
1352# CONFIG_NCP_FS is not set 1415# CONFIG_NCP_FS is not set
1353# CONFIG_CODA_FS is not set 1416# CONFIG_CODA_FS is not set
1354# CONFIG_AFS_FS is not set 1417# CONFIG_AFS_FS is not set
1355# CONFIG_9P_FS is not set
1356 1418
1357# 1419#
1358# Partition Types 1420# Partition Types
@@ -1375,10 +1437,6 @@ CONFIG_MSDOS_PARTITION=y
1375# CONFIG_KARMA_PARTITION is not set 1437# CONFIG_KARMA_PARTITION is not set
1376# CONFIG_EFI_PARTITION is not set 1438# CONFIG_EFI_PARTITION is not set
1377# CONFIG_SYSV68_PARTITION is not set 1439# CONFIG_SYSV68_PARTITION is not set
1378
1379#
1380# Native Language Support
1381#
1382CONFIG_NLS=y 1440CONFIG_NLS=y
1383CONFIG_NLS_DEFAULT="iso8859-1" 1441CONFIG_NLS_DEFAULT="iso8859-1"
1384CONFIG_NLS_CODEPAGE_437=m 1442CONFIG_NLS_CODEPAGE_437=m
@@ -1419,21 +1477,16 @@ CONFIG_NLS_ISO8859_15=m
1419CONFIG_NLS_KOI8_R=m 1477CONFIG_NLS_KOI8_R=m
1420CONFIG_NLS_KOI8_U=m 1478CONFIG_NLS_KOI8_U=m
1421CONFIG_NLS_UTF8=m 1479CONFIG_NLS_UTF8=m
1422
1423#
1424# Distributed Lock Manager
1425#
1426# CONFIG_DLM is not set 1480# CONFIG_DLM is not set
1427 1481CONFIG_INSTRUMENTATION=y
1428#
1429# Profiling support
1430#
1431# CONFIG_PROFILING is not set 1482# CONFIG_PROFILING is not set
1483# CONFIG_MARKERS is not set
1432 1484
1433# 1485#
1434# Kernel hacking 1486# Kernel hacking
1435# 1487#
1436# CONFIG_PRINTK_TIME is not set 1488# CONFIG_PRINTK_TIME is not set
1489CONFIG_ENABLE_WARN_DEPRECATED=y
1437CONFIG_ENABLE_MUST_CHECK=y 1490CONFIG_ENABLE_MUST_CHECK=y
1438# CONFIG_MAGIC_SYSRQ is not set 1491# CONFIG_MAGIC_SYSRQ is not set
1439# CONFIG_UNUSED_SYMBOLS is not set 1492# CONFIG_UNUSED_SYMBOLS is not set
@@ -1441,6 +1494,7 @@ CONFIG_DEBUG_FS=y
1441# CONFIG_HEADERS_CHECK is not set 1494# CONFIG_HEADERS_CHECK is not set
1442# CONFIG_DEBUG_KERNEL is not set 1495# CONFIG_DEBUG_KERNEL is not set
1443# CONFIG_DEBUG_BUGVERBOSE is not set 1496# CONFIG_DEBUG_BUGVERBOSE is not set
1497# CONFIG_SAMPLES is not set
1444CONFIG_DEBUG_MMRS=y 1498CONFIG_DEBUG_MMRS=y
1445CONFIG_DEBUG_HUNT_FOR_ZERO=y 1499CONFIG_DEBUG_HUNT_FOR_ZERO=y
1446CONFIG_DEBUG_BFIN_HWTRACE_ON=y 1500CONFIG_DEBUG_BFIN_HWTRACE_ON=y
@@ -1460,11 +1514,8 @@ CONFIG_ACCESS_CHECK=y
1460# CONFIG_KEYS is not set 1514# CONFIG_KEYS is not set
1461CONFIG_SECURITY=y 1515CONFIG_SECURITY=y
1462# CONFIG_SECURITY_NETWORK is not set 1516# CONFIG_SECURITY_NETWORK is not set
1463CONFIG_SECURITY_CAPABILITIES=m 1517# CONFIG_SECURITY_CAPABILITIES is not set
1464 1518# CONFIG_SECURITY_ROOTPLUG is not set
1465#
1466# Cryptographic options
1467#
1468# CONFIG_CRYPTO is not set 1519# CONFIG_CRYPTO is not set
1469 1520
1470# 1521#
@@ -1475,6 +1526,7 @@ CONFIG_CRC_CCITT=m
1475# CONFIG_CRC16 is not set 1526# CONFIG_CRC16 is not set
1476# CONFIG_CRC_ITU_T is not set 1527# CONFIG_CRC_ITU_T is not set
1477CONFIG_CRC32=y 1528CONFIG_CRC32=y
1529# CONFIG_CRC7 is not set
1478# CONFIG_LIBCRC32C is not set 1530# CONFIG_LIBCRC32C is not set
1479CONFIG_ZLIB_INFLATE=y 1531CONFIG_ZLIB_INFLATE=y
1480CONFIG_ZLIB_DEFLATE=m 1532CONFIG_ZLIB_DEFLATE=m
diff --git a/arch/blackfin/configs/IP0X_defconfig b/arch/blackfin/configs/IP0X_defconfig
index 5f6ff04a86c3..4384a670a8b8 100644
--- a/arch/blackfin/configs/IP0X_defconfig
+++ b/arch/blackfin/configs/IP0X_defconfig
@@ -212,7 +212,7 @@ CONFIG_HZ=250
212# 212#
213# Memory Setup 213# Memory Setup
214# 214#
215CONFIG_MEM_SIZE=64 215CONFIG_MAX_MEM_SIZE=64
216CONFIG_MEM_ADD_WIDTH=10 216CONFIG_MEM_ADD_WIDTH=10
217 217
218# 218#
diff --git a/arch/blackfin/kernel/bfin_dma_5xx.c b/arch/blackfin/kernel/bfin_dma_5xx.c
index fd5448d6107c..d54f19085f37 100644
--- a/arch/blackfin/kernel/bfin_dma_5xx.c
+++ b/arch/blackfin/kernel/bfin_dma_5xx.c
@@ -90,6 +90,17 @@ int request_dma(unsigned int channel, char *device_id)
90{ 90{
91 91
92 pr_debug("request_dma() : BEGIN \n"); 92 pr_debug("request_dma() : BEGIN \n");
93
94#if defined(CONFIG_BF561) && ANOMALY_05000182
95 if (channel >= CH_IMEM_STREAM0_DEST && channel <= CH_IMEM_STREAM1_DEST) {
96 if (get_cclk() > 500000000) {
97 printk(KERN_WARNING
98 "Request IMDMA failed due to ANOMALY 05000182\n");
99 return -EFAULT;
100 }
101 }
102#endif
103
93 mutex_lock(&(dma_ch[channel].dmalock)); 104 mutex_lock(&(dma_ch[channel].dmalock));
94 105
95 if ((dma_ch[channel].chan_status == DMA_CHANNEL_REQUESTED) 106 if ((dma_ch[channel].chan_status == DMA_CHANNEL_REQUESTED)
diff --git a/arch/blackfin/kernel/bfin_gpio.c b/arch/blackfin/kernel/bfin_gpio.c
index 7e8eaf4a31bb..b6d89d1644cc 100644
--- a/arch/blackfin/kernel/bfin_gpio.c
+++ b/arch/blackfin/kernel/bfin_gpio.c
@@ -1130,6 +1130,25 @@ void bfin_gpio_irq_prepare(unsigned gpio)
1130 1130
1131#else 1131#else
1132 1132
1133int gpio_get_value(unsigned gpio)
1134{
1135 unsigned long flags;
1136 int ret;
1137
1138 if (unlikely(get_gpio_edge(gpio))) {
1139 local_irq_save(flags);
1140 set_gpio_edge(gpio, 0);
1141 ret = get_gpio_data(gpio);
1142 set_gpio_edge(gpio, 1);
1143 local_irq_restore(flags);
1144
1145 return ret;
1146 } else
1147 return get_gpio_data(gpio);
1148}
1149EXPORT_SYMBOL(gpio_get_value);
1150
1151
1133int gpio_direction_input(unsigned gpio) 1152int gpio_direction_input(unsigned gpio)
1134{ 1153{
1135 unsigned long flags; 1154 unsigned long flags;
diff --git a/arch/blackfin/kernel/bfin_ksyms.c b/arch/blackfin/kernel/bfin_ksyms.c
index 053edff6c0d8..4367330909b2 100644
--- a/arch/blackfin/kernel/bfin_ksyms.c
+++ b/arch/blackfin/kernel/bfin_ksyms.c
@@ -90,7 +90,9 @@ EXPORT_SYMBOL(__umodsi3);
90EXPORT_SYMBOL(outsb); 90EXPORT_SYMBOL(outsb);
91EXPORT_SYMBOL(insb); 91EXPORT_SYMBOL(insb);
92EXPORT_SYMBOL(outsw); 92EXPORT_SYMBOL(outsw);
93EXPORT_SYMBOL(outsw_8);
93EXPORT_SYMBOL(insw); 94EXPORT_SYMBOL(insw);
95EXPORT_SYMBOL(insw_8);
94EXPORT_SYMBOL(outsl); 96EXPORT_SYMBOL(outsl);
95EXPORT_SYMBOL(insl); 97EXPORT_SYMBOL(insl);
96EXPORT_SYMBOL(insl_16); 98EXPORT_SYMBOL(insl_16);
diff --git a/arch/blackfin/kernel/traps.c b/arch/blackfin/kernel/traps.c
index 5b847070dae5..7bfbd958980c 100644
--- a/arch/blackfin/kernel/traps.c
+++ b/arch/blackfin/kernel/traps.c
@@ -364,13 +364,13 @@ asmlinkage void trap_c(struct pt_regs *fp)
364 /* 0x27 - Data CPLB Multiple Hits - Linux Trap Zero, handled here */ 364 /* 0x27 - Data CPLB Multiple Hits - Linux Trap Zero, handled here */
365 case VEC_CPLB_MHIT: 365 case VEC_CPLB_MHIT:
366 info.si_code = ILL_CPLB_MULHIT; 366 info.si_code = ILL_CPLB_MULHIT;
367#ifdef CONFIG_DEBUG_HUNT_FOR_ZERO
368 sig = SIGSEGV; 367 sig = SIGSEGV;
369 printk(KERN_NOTICE "NULL pointer access (probably)\n"); 368#ifdef CONFIG_DEBUG_HUNT_FOR_ZERO
370#else 369 if (saved_dcplb_fault_addr < (void *)FIXED_CODE_START)
371 sig = SIGILL; 370 printk(KERN_NOTICE "NULL pointer access\n");
372 printk(KERN_NOTICE EXC_0x27(KERN_NOTICE)); 371 else
373#endif 372#endif
373 printk(KERN_NOTICE EXC_0x27(KERN_NOTICE));
374 CHK_DEBUGGER_TRAP(); 374 CHK_DEBUGGER_TRAP();
375 break; 375 break;
376 /* 0x28 - Emulation Watchpoint, handled here */ 376 /* 0x28 - Emulation Watchpoint, handled here */
@@ -419,13 +419,13 @@ asmlinkage void trap_c(struct pt_regs *fp)
419 /* 0x2D - Instruction CPLB Multiple Hits, handled here */ 419 /* 0x2D - Instruction CPLB Multiple Hits, handled here */
420 case VEC_CPLB_I_MHIT: 420 case VEC_CPLB_I_MHIT:
421 info.si_code = ILL_CPLB_MULHIT; 421 info.si_code = ILL_CPLB_MULHIT;
422#ifdef CONFIG_DEBUG_HUNT_FOR_ZERO
423 sig = SIGSEGV; 422 sig = SIGSEGV;
424 printk(KERN_NOTICE "Jump to address 0 - 0x0fff\n"); 423#ifdef CONFIG_DEBUG_HUNT_FOR_ZERO
425#else 424 if (saved_icplb_fault_addr < (void *)FIXED_CODE_START)
426 sig = SIGILL; 425 printk(KERN_NOTICE "Jump to NULL address\n");
427 printk(KERN_NOTICE EXC_0x2D(KERN_NOTICE)); 426 else
428#endif 427#endif
428 printk(KERN_NOTICE EXC_0x2D(KERN_NOTICE));
429 CHK_DEBUGGER_TRAP(); 429 CHK_DEBUGGER_TRAP();
430 break; 430 break;
431 /* 0x2E - Illegal use of Supervisor Resource, handled here */ 431 /* 0x2E - Illegal use of Supervisor Resource, handled here */
diff --git a/arch/blackfin/lib/checksum.c b/arch/blackfin/lib/checksum.c
index 42768e0c80ca..5c87505165d3 100644
--- a/arch/blackfin/lib/checksum.c
+++ b/arch/blackfin/lib/checksum.c
@@ -72,9 +72,9 @@ static unsigned short do_csum(const unsigned char *buff, int len)
72 * This is a version of ip_compute_csum() optimized for IP headers, 72 * This is a version of ip_compute_csum() optimized for IP headers,
73 * which always checksum on 4 octet boundaries. 73 * which always checksum on 4 octet boundaries.
74 */ 74 */
75unsigned short ip_fast_csum(unsigned char *iph, unsigned int ihl) 75__sum16 ip_fast_csum(unsigned char *iph, unsigned int ihl)
76{ 76{
77 return ~do_csum(iph, ihl * 4); 77 return (__force __sum16)~do_csum(iph, ihl * 4);
78} 78}
79 79
80/* 80/*
@@ -89,7 +89,7 @@ unsigned short ip_fast_csum(unsigned char *iph, unsigned int ihl)
89 * 89 *
90 * it's best to have buff aligned on a 32-bit boundary 90 * it's best to have buff aligned on a 32-bit boundary
91 */ 91 */
92unsigned int csum_partial(const unsigned char *buff, int len, unsigned int sum) 92__wsum csum_partial(const void *buff, int len, __wsum sum)
93{ 93{
94 /* 94 /*
95 * Just in case we get nasty checksum data... 95 * Just in case we get nasty checksum data...
@@ -109,22 +109,22 @@ unsigned int csum_partial(const unsigned char *buff, int len, unsigned int sum)
109 * this routine is used for miscellaneous IP-like checksums, mainly 109 * this routine is used for miscellaneous IP-like checksums, mainly
110 * in icmp.c 110 * in icmp.c
111 */ 111 */
112unsigned short ip_compute_csum(const unsigned char *buff, int len) 112__sum16 ip_compute_csum(const void *buff, int len)
113{ 113{
114 return ~do_csum(buff, len); 114 return (__force __sum16)~do_csum(buff, len);
115} 115}
116 116
117/* 117/*
118 * copy from fs while checksumming, otherwise like csum_partial 118 * copy from fs while checksumming, otherwise like csum_partial
119 */ 119 */
120 120
121unsigned int 121__wsum
122csum_partial_copy_from_user(const unsigned char *src, unsigned char *dst, 122csum_partial_copy_from_user(const void __user *src, void *dst,
123 int len, int sum, int *csum_err) 123 int len, __wsum sum, int *csum_err)
124{ 124{
125 if (csum_err) 125 if (csum_err)
126 *csum_err = 0; 126 *csum_err = 0;
127 memcpy(dst, src, len); 127 memcpy(dst, (__force void *)src, len);
128 return csum_partial(dst, len, sum); 128 return csum_partial(dst, len, sum);
129} 129}
130 130
@@ -132,8 +132,7 @@ csum_partial_copy_from_user(const unsigned char *src, unsigned char *dst,
132 * copy from ds while checksumming, otherwise like csum_partial 132 * copy from ds while checksumming, otherwise like csum_partial
133 */ 133 */
134 134
135unsigned int csum_partial_copy(const unsigned char *src, unsigned char *dst, 135__wsum csum_partial_copy(const void *src, void *dst, int len, __wsum sum)
136 int len, int sum)
137{ 136{
138 memcpy(dst, src, len); 137 memcpy(dst, src, len);
139 return csum_partial(dst, len, sum); 138 return csum_partial(dst, len, sum);
diff --git a/arch/blackfin/lib/ins.S b/arch/blackfin/lib/ins.S
index df7b8833a0c5..eba2343b1b59 100644
--- a/arch/blackfin/lib/ins.S
+++ b/arch/blackfin/lib/ins.S
@@ -7,7 +7,7 @@
7 * Description: Implementation of ins{bwl} for BlackFin processors using zero overhead loops. 7 * Description: Implementation of ins{bwl} for BlackFin processors using zero overhead loops.
8 * 8 *
9 * Modified: 9 * Modified:
10 * Copyright 2004-2006 Analog Devices Inc. 10 * Copyright 2004-2008 Analog Devices Inc.
11 * Copyright (C) 2005 Bas Vermeulen, BuyWays BV <bas@buyways.nl> 11 * Copyright (C) 2005 Bas Vermeulen, BuyWays BV <bas@buyways.nl>
12 * 12 *
13 * Bugs: Enter bugs at http://blackfin.uclinux.org/ 13 * Bugs: Enter bugs at http://blackfin.uclinux.org/
@@ -63,6 +63,23 @@ ENTRY(_insw)
63 RTS; 63 RTS;
64ENDPROC(_insw) 64ENDPROC(_insw)
65 65
66ENTRY(_insw_8)
67 P0 = R0; /* P0 = port */
68 cli R3;
69 P1 = R1; /* P1 = address */
70 P2 = R2; /* P2 = count */
71 SSYNC;
72 LSETUP( .Lword8_loop_s, .Lword8_loop_e) LC0 = P2;
73.Lword8_loop_s: R0 = W[P0];
74 B[P1++] = R0;
75 R0 = R0 >> 8;
76 B[P1++] = R0;
77 NOP;
78.Lword8_loop_e: NOP;
79 sti R3;
80 RTS;
81ENDPROC(_insw_8)
82
66ENTRY(_insb) 83ENTRY(_insb)
67 P0 = R0; /* P0 = port */ 84 P0 = R0; /* P0 = port */
68 cli R3; 85 cli R3;
@@ -78,8 +95,6 @@ ENTRY(_insb)
78 RTS; 95 RTS;
79ENDPROC(_insb) 96ENDPROC(_insb)
80 97
81
82
83ENTRY(_insl_16) 98ENTRY(_insl_16)
84 P0 = R0; /* P0 = port */ 99 P0 = R0; /* P0 = port */
85 cli R3; 100 cli R3;
diff --git a/arch/blackfin/lib/outs.S b/arch/blackfin/lib/outs.S
index 4c3da8ae094e..3daf96035bf6 100644
--- a/arch/blackfin/lib/outs.S
+++ b/arch/blackfin/lib/outs.S
@@ -7,7 +7,7 @@
7 * Description: Implementation of outs{bwl} for BlackFin processors using zero overhead loops. 7 * Description: Implementation of outs{bwl} for BlackFin processors using zero overhead loops.
8 * 8 *
9 * Modified: Copyright (C) 2005 Bas Vermeulen, BuyWays BV <bas@buyways.nl> 9 * Modified: Copyright (C) 2005 Bas Vermeulen, BuyWays BV <bas@buyways.nl>
10 * Copyright 2004-2006 Analog Devices Inc. 10 * Copyright 2004-2008 Analog Devices Inc.
11 * 11 *
12 * Bugs: Enter bugs at http://blackfin.uclinux.org/ 12 * Bugs: Enter bugs at http://blackfin.uclinux.org/
13 * 13 *
@@ -63,3 +63,17 @@ ENTRY(_outsb)
63.Lbyte_loop_e: B[P0] = R0; 63.Lbyte_loop_e: B[P0] = R0;
64 RTS; 64 RTS;
65ENDPROC(_outsb) 65ENDPROC(_outsb)
66
67ENTRY(_outsw_8)
68 P0 = R0; /* P0 = port */
69 P1 = R1; /* P1 = address */
70 P2 = R2; /* P2 = count */
71
72 LSETUP( .Lword8_loop_s, .Lword8_loop_e) LC0 = P2;
73.Lword8_loop_s: R1 = B[P1++];
74 R0 = B[P1++];
75 R0 = R0 << 8;
76 R0 = R0 + R1;
77.Lword8_loop_e: W[P0] = R0;
78 RTS;
79ENDPROC(_outsw)
diff --git a/arch/blackfin/mach-bf533/boards/stamp.c b/arch/blackfin/mach-bf533/boards/stamp.c
index 7fd35fb32fd5..ec05b236dc3f 100644
--- a/arch/blackfin/mach-bf533/boards/stamp.c
+++ b/arch/blackfin/mach-bf533/boards/stamp.c
@@ -111,7 +111,7 @@ static struct platform_device net2272_bfin_device = {
111}; 111};
112#endif 112#endif
113 113
114#if defined(CONFIG_MTD_BF5xx) || defined(CONFIG_MTD_BF5xx_MODULE) 114#if defined(CONFIG_MTD_BFIN_ASYNC) || defined(CONFIG_MTD_BFIN_ASYNC_MODULE)
115static struct mtd_partition stamp_partitions[] = { 115static struct mtd_partition stamp_partitions[] = {
116 { 116 {
117 .name = "Bootloader", 117 .name = "Bootloader",
@@ -141,13 +141,17 @@ static struct resource stamp_flash_resource[] = {
141 .end = 0x203fffff, 141 .end = 0x203fffff,
142 .flags = IORESOURCE_MEM, 142 .flags = IORESOURCE_MEM,
143 }, { 143 }, {
144 .start = CONFIG_ENET_FLASH_PIN, 144 .start = 0x7BB07BB0, /* AMBCTL0 setting when accessing flash */
145 .end = 0x7BB07BB0, /* AMBCTL1 setting when accessing flash */
146 .flags = IORESOURCE_MEM,
147 }, {
148 .start = GPIO_PF0,
145 .flags = IORESOURCE_IRQ, 149 .flags = IORESOURCE_IRQ,
146 } 150 }
147}; 151};
148 152
149static struct platform_device stamp_flash_device = { 153static struct platform_device stamp_flash_device = {
150 .name = "BF5xx-Flash", 154 .name = "bfin-async-flash",
151 .id = 0, 155 .id = 0,
152 .dev = { 156 .dev = {
153 .platform_data = &stamp_flash_data, 157 .platform_data = &stamp_flash_data,
@@ -595,7 +599,7 @@ static struct platform_device *stamp_devices[] __initdata = {
595 599
596 &bfin_gpios_device, 600 &bfin_gpios_device,
597 601
598#if defined(CONFIG_MTD_BF5xx) || defined(CONFIG_MTD_BF5xx_MODULE) 602#if defined(CONFIG_MTD_BFIN_ASYNC) || defined(CONFIG_MTD_BFIN_ASYNC_MODULE)
599 &stamp_flash_device, 603 &stamp_flash_device,
600#endif 604#endif
601}; 605};
@@ -617,8 +621,8 @@ static int __init stamp_init(void)
617 621
618#if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE) 622#if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE)
619 /* setup BF533_STAMP CPLD to route AMS3 to Ethernet MAC */ 623 /* setup BF533_STAMP CPLD to route AMS3 to Ethernet MAC */
620 bfin_write_FIO_DIR(bfin_read_FIO_DIR() | (1 << CONFIG_ENET_FLASH_PIN)); 624 bfin_write_FIO_DIR(bfin_read_FIO_DIR() | PF0);
621 bfin_write_FIO_FLAG_S(1 << CONFIG_ENET_FLASH_PIN); 625 bfin_write_FIO_FLAG_S(PF0);
622 SSYNC(); 626 SSYNC();
623#endif 627#endif
624 628
@@ -636,8 +640,8 @@ arch_initcall(stamp_init);
636 640
637void native_machine_restart(char *cmd) 641void native_machine_restart(char *cmd)
638{ 642{
639#define BIT_TO_SET (1 << CONFIG_ENET_FLASH_PIN) 643 /* workaround pull up on cpld / flash pin not being strong enough */
640 bfin_write_FIO_INEN(~BIT_TO_SET); 644 bfin_write_FIO_INEN(~PF0);
641 bfin_write_FIO_DIR(BIT_TO_SET); 645 bfin_write_FIO_DIR(PF0);
642 bfin_write_FIO_FLAG_C(BIT_TO_SET); 646 bfin_write_FIO_FLAG_C(PF0);
643} 647}
diff --git a/arch/ia64/kvm/Makefile b/arch/ia64/kvm/Makefile
index 52353397a1a4..112791dd2542 100644
--- a/arch/ia64/kvm/Makefile
+++ b/arch/ia64/kvm/Makefile
@@ -7,7 +7,6 @@ offsets-file := asm-offsets.h
7always := $(offsets-file) 7always := $(offsets-file)
8targets := $(offsets-file) 8targets := $(offsets-file)
9targets += arch/ia64/kvm/asm-offsets.s 9targets += arch/ia64/kvm/asm-offsets.s
10clean-files := $(addprefix $(objtree)/,$(targets) $(obj)/memcpy.S $(obj)/memset.S)
11 10
12# Default sed regexp - multiline due to syntax constraints 11# Default sed regexp - multiline due to syntax constraints
13define sed-y 12define sed-y
@@ -54,5 +53,5 @@ EXTRA_CFLAGS_vcpu.o += -mfixed-range=f2-f5,f12-f127
54kvm-intel-objs = vmm.o vmm_ivt.o trampoline.o vcpu.o optvfault.o mmio.o \ 53kvm-intel-objs = vmm.o vmm_ivt.o trampoline.o vcpu.o optvfault.o mmio.o \
55 vtlb.o process.o 54 vtlb.o process.o
56#Add link memcpy and memset to avoid possible structure assignment error 55#Add link memcpy and memset to avoid possible structure assignment error
57kvm-intel-objs += ../lib/memset.o ../lib/memcpy.o 56kvm-intel-objs += memcpy.o memset.o
58obj-$(CONFIG_KVM_INTEL) += kvm-intel.o 57obj-$(CONFIG_KVM_INTEL) += kvm-intel.o
diff --git a/arch/ia64/kvm/memcpy.S b/arch/ia64/kvm/memcpy.S
new file mode 100644
index 000000000000..c04cdbe9f80f
--- /dev/null
+++ b/arch/ia64/kvm/memcpy.S
@@ -0,0 +1 @@
#include "../lib/memcpy.S"
diff --git a/arch/ia64/kvm/memset.S b/arch/ia64/kvm/memset.S
new file mode 100644
index 000000000000..83c3066d844a
--- /dev/null
+++ b/arch/ia64/kvm/memset.S
@@ -0,0 +1 @@
#include "../lib/memset.S"
diff --git a/arch/sh/kernel/cpu/sh4a/clock-sh7785.c b/arch/sh/kernel/cpu/sh4a/clock-sh7785.c
index 805535aa505e..27fa81bef6a0 100644
--- a/arch/sh/kernel/cpu/sh4a/clock-sh7785.c
+++ b/arch/sh/kernel/cpu/sh4a/clock-sh7785.c
@@ -26,7 +26,7 @@ static int pfc_divisors[] = { 1, 1, 1, 1, 1, 1, 1, 18,
26 26
27static void master_clk_init(struct clk *clk) 27static void master_clk_init(struct clk *clk)
28{ 28{
29 clk->rate *= 36; 29 clk->rate *= pfc_divisors[ctrl_inl(FRQMR1) & 0x000f];
30} 30}
31 31
32static struct clk_ops sh7785_master_clk_ops = { 32static struct clk_ops sh7785_master_clk_ops = {
diff --git a/arch/sh/kernel/entry-common.S b/arch/sh/kernel/entry-common.S
index 926b2e7b11c1..718bd2356b34 100644
--- a/arch/sh/kernel/entry-common.S
+++ b/arch/sh/kernel/entry-common.S
@@ -1,9 +1,6 @@
1/* $Id: entry.S,v 1.37 2004/06/11 13:02:46 doyu Exp $ 1/*
2 *
3 * linux/arch/sh/entry.S
4 *
5 * Copyright (C) 1999, 2000, 2002 Niibe Yutaka 2 * Copyright (C) 1999, 2000, 2002 Niibe Yutaka
6 * Copyright (C) 2003 Paul Mundt 3 * Copyright (C) 2003 - 2008 Paul Mundt
7 * 4 *
8 * This file is subject to the terms and conditions of the GNU General Public 5 * This file is subject to the terms and conditions of the GNU General Public
9 * License. See the file "COPYING" in the main directory of this archive 6 * License. See the file "COPYING" in the main directory of this archive
@@ -262,6 +259,7 @@ __restore_all:
262 259
263 .align 2 260 .align 2
264syscall_badsys: ! Bad syscall number 261syscall_badsys: ! Bad syscall number
262 get_current_thread_info r8, r0
265 mov #-ENOSYS, r0 263 mov #-ENOSYS, r0
266 bra resume_userspace 264 bra resume_userspace
267 mov.l r0, @(OFF_R0,r15) ! Return value 265 mov.l r0, @(OFF_R0,r15) ! Return value
@@ -281,7 +279,9 @@ debug_trap:
281 mov.l 1f, r8 279 mov.l 1f, r8
282 add r0, r8 280 add r0, r8
283 mov.l @r8, r8 281 mov.l @r8, r8
284 jmp @r8 282 jsr @r8
283 nop
284 bra __restore_all
285 nop 285 nop
286 286
287 .align 2 287 .align 2
diff --git a/arch/sh/kernel/head_32.S b/arch/sh/kernel/head_32.S
index d67d7ed09f22..ae0a382a82eb 100644
--- a/arch/sh/kernel/head_32.S
+++ b/arch/sh/kernel/head_32.S
@@ -30,8 +30,8 @@ ENTRY(empty_zero_page)
30 .long 0 /* RAMDISK_FLAGS */ 30 .long 0 /* RAMDISK_FLAGS */
31 .long 0x0200 /* ORIG_ROOT_DEV */ 31 .long 0x0200 /* ORIG_ROOT_DEV */
32 .long 1 /* LOADER_TYPE */ 32 .long 1 /* LOADER_TYPE */
33 .long 0x00360000 /* INITRD_START */ 33 .long 0x00000000 /* INITRD_START */
34 .long 0x000a0000 /* INITRD_SIZE */ 34 .long 0x00000000 /* INITRD_SIZE */
35#ifdef CONFIG_32BIT 35#ifdef CONFIG_32BIT
36 .long 0x53453f00 + 32 /* "SE?" = 32 bit */ 36 .long 0x53453f00 + 32 /* "SE?" = 32 bit */
37#else 37#else
diff --git a/arch/sh/kernel/kgdb_stub.c b/arch/sh/kernel/kgdb_stub.c
index 832641bbd47d..bf8ac4c71640 100644
--- a/arch/sh/kernel/kgdb_stub.c
+++ b/arch/sh/kernel/kgdb_stub.c
@@ -274,8 +274,7 @@ static char *mem_to_hex(const char *mem, char *buf, const int count)
274 } 274 }
275 for (i = 0; i < count; i++) { 275 for (i = 0; i < count; i++) {
276 ch = *mem++; 276 ch = *mem++;
277 *buf++ = highhex(ch); 277 buf = pack_hex_byte(buf, ch);
278 *buf++ = lowhex(ch);
279 } 278 }
280 *buf = 0; 279 *buf = 0;
281 return (buf); 280 return (buf);
@@ -427,8 +426,8 @@ static void put_packet(char *buffer)
427 426
428 /* '#' Separator, put high and low components of checksum */ 427 /* '#' Separator, put high and low components of checksum */
429 put_debug_char('#'); 428 put_debug_char('#');
430 put_debug_char(highhex(checksum)); 429 put_debug_char(hex_asc_hi(checksum));
431 put_debug_char(lowhex(checksum)); 430 put_debug_char(hex_asc_lo(checksum));
432 } 431 }
433 while ((get_debug_char()) != '+'); /* While no ack */ 432 while ((get_debug_char()) != '+'); /* While no ack */
434} 433}
@@ -650,8 +649,8 @@ static void undo_single_step(void)
650static void send_signal_msg(const int signum) 649static void send_signal_msg(const int signum)
651{ 650{
652 out_buffer[0] = 'S'; 651 out_buffer[0] = 'S';
653 out_buffer[1] = highhex(signum); 652 out_buffer[1] = hex_asc_hi(signum);
654 out_buffer[2] = lowhex(signum); 653 out_buffer[2] = hex_asc_lo(signum);
655 out_buffer[3] = 0; 654 out_buffer[3] = 0;
656 put_packet(out_buffer); 655 put_packet(out_buffer);
657} 656}
diff --git a/arch/sh/kernel/setup.c b/arch/sh/kernel/setup.c
index 516bde9c50fa..bca2bbc575db 100644
--- a/arch/sh/kernel/setup.c
+++ b/arch/sh/kernel/setup.c
@@ -292,6 +292,17 @@ void __init setup_arch(char **cmdline_p)
292 292
293 ROOT_DEV = old_decode_dev(ORIG_ROOT_DEV); 293 ROOT_DEV = old_decode_dev(ORIG_ROOT_DEV);
294 294
295 printk(KERN_NOTICE "Boot params:\n"
296 "... MOUNT_ROOT_RDONLY - %08lx\n"
297 "... RAMDISK_FLAGS - %08lx\n"
298 "... ORIG_ROOT_DEV - %08lx\n"
299 "... LOADER_TYPE - %08lx\n"
300 "... INITRD_START - %08lx\n"
301 "... INITRD_SIZE - %08lx\n",
302 MOUNT_ROOT_RDONLY, RAMDISK_FLAGS,
303 ORIG_ROOT_DEV, LOADER_TYPE,
304 INITRD_START, INITRD_SIZE);
305
295#ifdef CONFIG_BLK_DEV_RAM 306#ifdef CONFIG_BLK_DEV_RAM
296 rd_image_start = RAMDISK_FLAGS & RAMDISK_IMAGE_START_MASK; 307 rd_image_start = RAMDISK_FLAGS & RAMDISK_IMAGE_START_MASK;
297 rd_prompt = ((RAMDISK_FLAGS & RAMDISK_PROMPT_FLAG) != 0); 308 rd_prompt = ((RAMDISK_FLAGS & RAMDISK_PROMPT_FLAG) != 0);
diff --git a/arch/sh/kernel/traps.c b/arch/sh/kernel/traps.c
index a3bdc68ef02c..438f1ebcc453 100644
--- a/arch/sh/kernel/traps.c
+++ b/arch/sh/kernel/traps.c
@@ -4,6 +4,7 @@
4#include <linux/kdebug.h> 4#include <linux/kdebug.h>
5#include <linux/signal.h> 5#include <linux/signal.h>
6#include <linux/sched.h> 6#include <linux/sched.h>
7#include <linux/uaccess.h>
7#include <asm/system.h> 8#include <asm/system.h>
8 9
9#ifdef CONFIG_BUG 10#ifdef CONFIG_BUG
@@ -21,7 +22,14 @@ static void handle_BUG(struct pt_regs *regs)
21 22
22int is_valid_bugaddr(unsigned long addr) 23int is_valid_bugaddr(unsigned long addr)
23{ 24{
24 return addr >= PAGE_OFFSET; 25 unsigned short opcode;
26
27 if (addr < PAGE_OFFSET)
28 return 0;
29 if (probe_kernel_address((u16 *)addr, opcode))
30 return 0;
31
32 return opcode == TRAPA_BUG_OPCODE;
25} 33}
26#endif 34#endif
27 35
diff --git a/arch/sh/lib/memcpy-sh4.S b/arch/sh/lib/memcpy-sh4.S
index 560bc17eebdd..459fa92a7c53 100644
--- a/arch/sh/lib/memcpy-sh4.S
+++ b/arch/sh/lib/memcpy-sh4.S
@@ -126,10 +126,10 @@
126 126
127 mov.l r3,@-r0 ! 30 LS 127 mov.l r3,@-r0 ! 30 LS
128#else 128#else
1293: mov r1,r3 ! OPQR 1293: mov r7,r3 ! OPQR
130 shlr8 r3 ! xOPQ 130 shlr8 r3 ! xOPQ
131 mov.l @(r0,r5),r1 ! KLMN 131 mov.l @(r0,r5),r7 ! KLMN
132 mov r1,r6 132 mov r7,r6
133 shll16 r6 133 shll16 r6
134 shll8 r6 ! Nxxx 134 shll8 r6 ! Nxxx
135 or r6,r3 ! NOPQ 135 or r6,r3 ! NOPQ
@@ -733,24 +733,24 @@ ENTRY(memcpy)
733 movca.l r0,@r1 ! 40 LS (latency=3-7) 733 movca.l r0,@r1 ! 40 LS (latency=3-7)
734 add #-0x1c, r1 ! 50 EX 734 add #-0x1c, r1 ! 50 EX
735 735
736 mov.l r3, @(0x1c,r1) ! 33 LS 736 mov.l r3, @(0x18,r1) ! 33 LS
737 xtrct r11, r10 ! 48 EX 737 xtrct r11, r10 ! 48 EX
738 738
739 mov.l r6, @(0x18,r1) ! 33 LS 739 mov.l r6, @(0x14,r1) ! 33 LS
740 xtrct r12, r11 ! 48 EX 740 xtrct r12, r11 ! 48 EX
741 741
742 mov.l r7, @(0x14,r1) ! 33 LS 742 mov.l r7, @(0x10,r1) ! 33 LS
743 743
744 mov.l r8, @(0x10,r1) ! 33 LS 744 mov.l r8, @(0x0c,r1) ! 33 LS
745 add #-0x3e, r5 ! 50 EX 745 add #-0x1e, r5 ! 50 EX
746 746
747 mov.l r9, @(0x0c,r1) ! 33 LS 747 mov.l r9, @(0x08,r1) ! 33 LS
748 cmp/eq r2,r1 ! 54 MT 748 cmp/eq r2,r1 ! 54 MT
749 749
750 mov.l r10, @(0x08,r1) ! 33 LS 750 mov.l r10, @(0x04,r1) ! 33 LS
751 bf/s 2b ! 109 BR 751 bf/s 2b ! 109 BR
752 752
753 mov.l r11, @(0x04,r1) ! 33 LS 753 mov.l r11, @(0x00,r1) ! 33 LS
754#endif 754#endif
755 755
756 mov.l @r15+, r12 756 mov.l @r15+, r12
diff --git a/arch/x86/kvm/i8254.c b/arch/x86/kvm/i8254.c
index 3324d90038e4..7c077a9d9777 100644
--- a/arch/x86/kvm/i8254.c
+++ b/arch/x86/kvm/i8254.c
@@ -216,7 +216,7 @@ int pit_has_pending_timer(struct kvm_vcpu *vcpu)
216{ 216{
217 struct kvm_pit *pit = vcpu->kvm->arch.vpit; 217 struct kvm_pit *pit = vcpu->kvm->arch.vpit;
218 218
219 if (pit && vcpu->vcpu_id == 0) 219 if (pit && vcpu->vcpu_id == 0 && pit->pit_state.inject_pending)
220 return atomic_read(&pit->pit_state.pit_timer.pending); 220 return atomic_read(&pit->pit_state.pit_timer.pending);
221 221
222 return 0; 222 return 0;
diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c
index 36809d79788b..c297c50eba63 100644
--- a/arch/x86/kvm/lapic.c
+++ b/arch/x86/kvm/lapic.c
@@ -957,7 +957,7 @@ int apic_has_pending_timer(struct kvm_vcpu *vcpu)
957{ 957{
958 struct kvm_lapic *lapic = vcpu->arch.apic; 958 struct kvm_lapic *lapic = vcpu->arch.apic;
959 959
960 if (lapic) 960 if (lapic && apic_enabled(lapic) && apic_lvt_enabled(lapic, APIC_LVTT))
961 return atomic_read(&lapic->timer.pending); 961 return atomic_read(&lapic->timer.pending);
962 962
963 return 0; 963 return 0;
diff --git a/arch/x86/kvm/x86_emulate.c b/arch/x86/kvm/x86_emulate.c
index f2a696d6a243..8a96320ab071 100644
--- a/arch/x86/kvm/x86_emulate.c
+++ b/arch/x86/kvm/x86_emulate.c
@@ -677,8 +677,9 @@ static int decode_modrm(struct x86_emulate_ctxt *ctxt,
677 c->use_modrm_ea = 1; 677 c->use_modrm_ea = 1;
678 678
679 if (c->modrm_mod == 3) { 679 if (c->modrm_mod == 3) {
680 c->modrm_val = *(unsigned long *) 680 c->modrm_ptr = decode_register(c->modrm_rm,
681 decode_register(c->modrm_rm, c->regs, c->d & ByteOp); 681 c->regs, c->d & ByteOp);
682 c->modrm_val = *(unsigned long *)c->modrm_ptr;
682 return rc; 683 return rc;
683 } 684 }
684 685
@@ -1005,6 +1006,7 @@ done_prefixes:
1005 if ((c->d & ModRM) && c->modrm_mod == 3) { 1006 if ((c->d & ModRM) && c->modrm_mod == 3) {
1006 c->src.type = OP_REG; 1007 c->src.type = OP_REG;
1007 c->src.val = c->modrm_val; 1008 c->src.val = c->modrm_val;
1009 c->src.ptr = c->modrm_ptr;
1008 break; 1010 break;
1009 } 1011 }
1010 c->src.type = OP_MEM; 1012 c->src.type = OP_MEM;
@@ -1049,6 +1051,7 @@ done_prefixes:
1049 if ((c->d & ModRM) && c->modrm_mod == 3) { 1051 if ((c->d & ModRM) && c->modrm_mod == 3) {
1050 c->dst.type = OP_REG; 1052 c->dst.type = OP_REG;
1051 c->dst.val = c->dst.orig_val = c->modrm_val; 1053 c->dst.val = c->dst.orig_val = c->modrm_val;
1054 c->dst.ptr = c->modrm_ptr;
1052 break; 1055 break;
1053 } 1056 }
1054 c->dst.type = OP_MEM; 1057 c->dst.type = OP_MEM;
diff --git a/drivers/ata/libata-acpi.c b/drivers/ata/libata-acpi.c
index 70b77e0899a8..dbf6ca781f66 100644
--- a/drivers/ata/libata-acpi.c
+++ b/drivers/ata/libata-acpi.c
@@ -118,8 +118,8 @@ static void ata_acpi_associate_ide_port(struct ata_port *ap)
118 ap->pflags |= ATA_PFLAG_INIT_GTM_VALID; 118 ap->pflags |= ATA_PFLAG_INIT_GTM_VALID;
119} 119}
120 120
121static void ata_acpi_handle_hotplug(struct ata_port *ap, struct ata_device *dev, 121static void ata_acpi_handle_hotplug(struct ata_port *ap, struct ata_device
122 u32 event) 122 *dev, u32 event)
123{ 123{
124 char event_string[12]; 124 char event_string[12];
125 char *envp[] = { event_string, NULL }; 125 char *envp[] = { event_string, NULL };
@@ -127,6 +127,9 @@ static void ata_acpi_handle_hotplug(struct ata_port *ap, struct ata_device *dev,
127 struct kobject *kobj = NULL; 127 struct kobject *kobj = NULL;
128 int wait = 0; 128 int wait = 0;
129 unsigned long flags; 129 unsigned long flags;
130 acpi_handle handle, tmphandle;
131 unsigned long sta;
132 acpi_status status;
130 133
131 if (!ap) 134 if (!ap)
132 ap = dev->link->ap; 135 ap = dev->link->ap;
@@ -134,32 +137,57 @@ static void ata_acpi_handle_hotplug(struct ata_port *ap, struct ata_device *dev,
134 137
135 spin_lock_irqsave(ap->lock, flags); 138 spin_lock_irqsave(ap->lock, flags);
136 139
140 if (dev)
141 handle = dev->acpi_handle;
142 else
143 handle = ap->acpi_handle;
144
145 status = acpi_get_handle(handle, "_EJ0", &tmphandle);
146 if (ACPI_FAILURE(status)) {
147 /* This device is not ejectable */
148 spin_unlock_irqrestore(ap->lock, flags);
149 return;
150 }
151
152 status = acpi_evaluate_integer(handle, "_STA", NULL, &sta);
153 if (ACPI_FAILURE(status)) {
154 printk ("Unable to determine bay status\n");
155 spin_unlock_irqrestore(ap->lock, flags);
156 return;
157 }
158
137 switch (event) { 159 switch (event) {
138 case ACPI_NOTIFY_BUS_CHECK: 160 case ACPI_NOTIFY_BUS_CHECK:
139 case ACPI_NOTIFY_DEVICE_CHECK: 161 case ACPI_NOTIFY_DEVICE_CHECK:
140 ata_ehi_push_desc(ehi, "ACPI event"); 162 ata_ehi_push_desc(ehi, "ACPI event");
141 ata_ehi_hotplugged(ehi); 163 if (!sta) {
142 ata_port_freeze(ap); 164 /* Device has been unplugged */
143 break; 165 if (dev)
144 166 dev->flags |= ATA_DFLAG_DETACH;
145 case ACPI_NOTIFY_EJECT_REQUEST: 167 else {
146 ata_ehi_push_desc(ehi, "ACPI event"); 168 struct ata_link *tlink;
147 if (dev) 169 struct ata_device *tdev;
148 dev->flags |= ATA_DFLAG_DETACH; 170
149 else { 171 ata_port_for_each_link(tlink, ap) {
150 struct ata_link *tlink; 172 ata_link_for_each_dev(tdev, tlink) {
151 struct ata_device *tdev; 173 tdev->flags |=
152 174 ATA_DFLAG_DETACH;
153 ata_port_for_each_link(tlink, ap) 175 }
154 ata_link_for_each_dev(tdev, tlink) 176 }
155 tdev->flags |= ATA_DFLAG_DETACH; 177 }
178 ata_port_schedule_eh(ap);
179 wait = 1;
180 } else {
181 ata_ehi_hotplugged(ehi);
182 ata_port_freeze(ap);
156 } 183 }
157
158 ata_port_schedule_eh(ap);
159 wait = 1;
160 break;
161 } 184 }
162 185
186 spin_unlock_irqrestore(ap->lock, flags);
187
188 if (wait)
189 ata_port_wait_eh(ap);
190
163 if (dev) { 191 if (dev) {
164 if (dev->sdev) 192 if (dev->sdev)
165 kobj = &dev->sdev->sdev_gendev.kobj; 193 kobj = &dev->sdev->sdev_gendev.kobj;
@@ -170,11 +198,6 @@ static void ata_acpi_handle_hotplug(struct ata_port *ap, struct ata_device *dev,
170 sprintf(event_string, "BAY_EVENT=%d", event); 198 sprintf(event_string, "BAY_EVENT=%d", event);
171 kobject_uevent_env(kobj, KOBJ_CHANGE, envp); 199 kobject_uevent_env(kobj, KOBJ_CHANGE, envp);
172 } 200 }
173
174 spin_unlock_irqrestore(ap->lock, flags);
175
176 if (wait)
177 ata_port_wait_eh(ap);
178} 201}
179 202
180static void ata_acpi_dev_notify(acpi_handle handle, u32 event, void *data) 203static void ata_acpi_dev_notify(acpi_handle handle, u32 event, void *data)
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index 927b692d723c..3c89f205c83f 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -2126,6 +2126,13 @@ int ata_dev_configure(struct ata_device *dev)
2126 dev->horkage |= ata_dev_blacklisted(dev); 2126 dev->horkage |= ata_dev_blacklisted(dev);
2127 ata_force_horkage(dev); 2127 ata_force_horkage(dev);
2128 2128
2129 if (dev->horkage & ATA_HORKAGE_DISABLE) {
2130 ata_dev_printk(dev, KERN_INFO,
2131 "unsupported device, disabling\n");
2132 ata_dev_disable(dev);
2133 return 0;
2134 }
2135
2129 /* let ACPI work its magic */ 2136 /* let ACPI work its magic */
2130 rc = ata_acpi_on_devcfg(dev); 2137 rc = ata_acpi_on_devcfg(dev);
2131 if (rc) 2138 if (rc)
@@ -3490,22 +3497,11 @@ int sata_link_resume(struct ata_link *link, const unsigned long *params,
3490 if ((rc = sata_link_debounce(link, params, deadline))) 3497 if ((rc = sata_link_debounce(link, params, deadline)))
3491 return rc; 3498 return rc;
3492 3499
3493 /* Clear SError. PMP and some host PHYs require this to 3500 /* clear SError, some PHYs require this even for SRST to work */
3494 * operate and clearing should be done before checking PHY
3495 * online status to avoid race condition (hotplugging between
3496 * link resume and status check).
3497 */
3498 if (!(rc = sata_scr_read(link, SCR_ERROR, &serror))) 3501 if (!(rc = sata_scr_read(link, SCR_ERROR, &serror)))
3499 rc = sata_scr_write(link, SCR_ERROR, serror); 3502 rc = sata_scr_write(link, SCR_ERROR, serror);
3500 if (rc == 0 || rc == -EINVAL) {
3501 unsigned long flags;
3502 3503
3503 spin_lock_irqsave(link->ap->lock, flags); 3504 return rc != -EINVAL ? rc : 0;
3504 link->eh_info.serror = 0;
3505 spin_unlock_irqrestore(link->ap->lock, flags);
3506 rc = 0;
3507 }
3508 return rc;
3509} 3505}
3510 3506
3511/** 3507/**
@@ -3653,9 +3649,13 @@ int sata_link_hardreset(struct ata_link *link, const unsigned long *timing,
3653 if (check_ready) 3649 if (check_ready)
3654 rc = ata_wait_ready(link, deadline, check_ready); 3650 rc = ata_wait_ready(link, deadline, check_ready);
3655 out: 3651 out:
3656 if (rc && rc != -EAGAIN) 3652 if (rc && rc != -EAGAIN) {
3653 /* online is set iff link is online && reset succeeded */
3654 if (online)
3655 *online = false;
3657 ata_link_printk(link, KERN_ERR, 3656 ata_link_printk(link, KERN_ERR,
3658 "COMRESET failed (errno=%d)\n", rc); 3657 "COMRESET failed (errno=%d)\n", rc);
3658 }
3659 DPRINTK("EXIT, rc=%d\n", rc); 3659 DPRINTK("EXIT, rc=%d\n", rc);
3660 return rc; 3660 return rc;
3661} 3661}
@@ -3700,8 +3700,14 @@ int sata_std_hardreset(struct ata_link *link, unsigned int *class,
3700 */ 3700 */
3701void ata_std_postreset(struct ata_link *link, unsigned int *classes) 3701void ata_std_postreset(struct ata_link *link, unsigned int *classes)
3702{ 3702{
3703 u32 serror;
3704
3703 DPRINTK("ENTER\n"); 3705 DPRINTK("ENTER\n");
3704 3706
3707 /* reset complete, clear SError */
3708 if (!sata_scr_read(link, SCR_ERROR, &serror))
3709 sata_scr_write(link, SCR_ERROR, serror);
3710
3705 /* print link status */ 3711 /* print link status */
3706 sata_print_link_status(link); 3712 sata_print_link_status(link);
3707 3713
@@ -3894,8 +3900,7 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
3894 { "SAMSUNG CD-ROM SN-124", "N001", ATA_HORKAGE_NODMA }, 3900 { "SAMSUNG CD-ROM SN-124", "N001", ATA_HORKAGE_NODMA },
3895 { "Seagate STT20000A", NULL, ATA_HORKAGE_NODMA }, 3901 { "Seagate STT20000A", NULL, ATA_HORKAGE_NODMA },
3896 /* Odd clown on sil3726/4726 PMPs */ 3902 /* Odd clown on sil3726/4726 PMPs */
3897 { "Config Disk", NULL, ATA_HORKAGE_NODMA | 3903 { "Config Disk", NULL, ATA_HORKAGE_DISABLE },
3898 ATA_HORKAGE_SKIP_PM },
3899 3904
3900 /* Weird ATAPI devices */ 3905 /* Weird ATAPI devices */
3901 { "TORiSAN DVD-ROM DRD-N216", NULL, ATA_HORKAGE_MAX_SEC_128 }, 3906 { "TORiSAN DVD-ROM DRD-N216", NULL, ATA_HORKAGE_MAX_SEC_128 },
@@ -5616,7 +5621,7 @@ int ata_host_register(struct ata_host *host, struct scsi_host_template *sht)
5616 spin_lock_irqsave(ap->lock, flags); 5621 spin_lock_irqsave(ap->lock, flags);
5617 5622
5618 ehi->probe_mask |= ATA_ALL_DEVICES; 5623 ehi->probe_mask |= ATA_ALL_DEVICES;
5619 ehi->action |= ATA_EH_RESET; 5624 ehi->action |= ATA_EH_RESET | ATA_EH_LPM;
5620 ehi->flags |= ATA_EHI_NO_AUTOPSY | ATA_EHI_QUIET; 5625 ehi->flags |= ATA_EHI_NO_AUTOPSY | ATA_EHI_QUIET;
5621 5626
5622 ap->pflags &= ~ATA_PFLAG_INITIALIZING; 5627 ap->pflags &= ~ATA_PFLAG_INITIALIZING;
@@ -5649,7 +5654,6 @@ int ata_host_register(struct ata_host *host, struct scsi_host_template *sht)
5649 struct ata_port *ap = host->ports[i]; 5654 struct ata_port *ap = host->ports[i];
5650 5655
5651 ata_scsi_scan_host(ap, 1); 5656 ata_scsi_scan_host(ap, 1);
5652 ata_lpm_schedule(ap, ap->pm_policy);
5653 } 5657 }
5654 5658
5655 return 0; 5659 return 0;
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
index 62e033146bed..7894d83ea1eb 100644
--- a/drivers/ata/libata-eh.c
+++ b/drivers/ata/libata-eh.c
@@ -1308,12 +1308,7 @@ static void ata_eh_analyze_serror(struct ata_link *link)
1308 unsigned int err_mask = 0, action = 0; 1308 unsigned int err_mask = 0, action = 0;
1309 u32 hotplug_mask; 1309 u32 hotplug_mask;
1310 1310
1311 if (serror & SERR_PERSISTENT) { 1311 if (serror & (SERR_PERSISTENT | SERR_DATA)) {
1312 err_mask |= AC_ERR_ATA_BUS;
1313 action |= ATA_EH_RESET;
1314 }
1315 if (serror &
1316 (SERR_DATA_RECOVERED | SERR_COMM_RECOVERED | SERR_DATA)) {
1317 err_mask |= AC_ERR_ATA_BUS; 1312 err_mask |= AC_ERR_ATA_BUS;
1318 action |= ATA_EH_RESET; 1313 action |= ATA_EH_RESET;
1319 } 1314 }
@@ -2047,19 +2042,11 @@ static int ata_do_reset(struct ata_link *link, ata_reset_fn_t reset,
2047 unsigned int *classes, unsigned long deadline) 2042 unsigned int *classes, unsigned long deadline)
2048{ 2043{
2049 struct ata_device *dev; 2044 struct ata_device *dev;
2050 int rc;
2051 2045
2052 ata_link_for_each_dev(dev, link) 2046 ata_link_for_each_dev(dev, link)
2053 classes[dev->devno] = ATA_DEV_UNKNOWN; 2047 classes[dev->devno] = ATA_DEV_UNKNOWN;
2054 2048
2055 rc = reset(link, classes, deadline); 2049 return reset(link, classes, deadline);
2056
2057 /* convert all ATA_DEV_UNKNOWN to ATA_DEV_NONE */
2058 ata_link_for_each_dev(dev, link)
2059 if (classes[dev->devno] == ATA_DEV_UNKNOWN)
2060 classes[dev->devno] = ATA_DEV_NONE;
2061
2062 return rc;
2063} 2050}
2064 2051
2065static int ata_eh_followup_srst_needed(struct ata_link *link, 2052static int ata_eh_followup_srst_needed(struct ata_link *link,
@@ -2096,9 +2083,11 @@ int ata_eh_reset(struct ata_link *link, int classify,
2096 ata_reset_fn_t reset; 2083 ata_reset_fn_t reset;
2097 unsigned long flags; 2084 unsigned long flags;
2098 u32 sstatus; 2085 u32 sstatus;
2099 int rc; 2086 int nr_known, rc;
2100 2087
2101 /* about to reset */ 2088 /*
2089 * Prepare to reset
2090 */
2102 spin_lock_irqsave(ap->lock, flags); 2091 spin_lock_irqsave(ap->lock, flags);
2103 ap->pflags |= ATA_PFLAG_RESETTING; 2092 ap->pflags |= ATA_PFLAG_RESETTING;
2104 spin_unlock_irqrestore(ap->lock, flags); 2093 spin_unlock_irqrestore(ap->lock, flags);
@@ -2124,16 +2113,8 @@ int ata_eh_reset(struct ata_link *link, int classify,
2124 ap->ops->set_piomode(ap, dev); 2113 ap->ops->set_piomode(ap, dev);
2125 } 2114 }
2126 2115
2127 if (!softreset && !hardreset) {
2128 if (verbose)
2129 ata_link_printk(link, KERN_INFO, "no reset method "
2130 "available, skipping reset\n");
2131 if (!(lflags & ATA_LFLAG_ASSUME_CLASS))
2132 lflags |= ATA_LFLAG_ASSUME_ATA;
2133 goto done;
2134 }
2135
2136 /* prefer hardreset */ 2116 /* prefer hardreset */
2117 reset = NULL;
2137 ehc->i.action &= ~ATA_EH_RESET; 2118 ehc->i.action &= ~ATA_EH_RESET;
2138 if (hardreset) { 2119 if (hardreset) {
2139 reset = hardreset; 2120 reset = hardreset;
@@ -2141,11 +2122,6 @@ int ata_eh_reset(struct ata_link *link, int classify,
2141 } else if (softreset) { 2122 } else if (softreset) {
2142 reset = softreset; 2123 reset = softreset;
2143 ehc->i.action = ATA_EH_SOFTRESET; 2124 ehc->i.action = ATA_EH_SOFTRESET;
2144 } else {
2145 ata_link_printk(link, KERN_ERR, "BUG: no reset method, "
2146 "please report to linux-ide@vger.kernel.org\n");
2147 dump_stack();
2148 return -EINVAL;
2149 } 2125 }
2150 2126
2151 if (prereset) { 2127 if (prereset) {
@@ -2165,55 +2141,71 @@ int ata_eh_reset(struct ata_link *link, int classify,
2165 "prereset failed (errno=%d)\n", rc); 2141 "prereset failed (errno=%d)\n", rc);
2166 goto out; 2142 goto out;
2167 } 2143 }
2168 }
2169 2144
2170 /* prereset() might have cleared ATA_EH_RESET */ 2145 /* prereset() might have cleared ATA_EH_RESET. If so,
2171 if (!(ehc->i.action & ATA_EH_RESET)) { 2146 * bang classes and return.
2172 /* prereset told us not to reset, bang classes and return */ 2147 */
2173 ata_link_for_each_dev(dev, link) 2148 if (reset && !(ehc->i.action & ATA_EH_RESET)) {
2174 classes[dev->devno] = ATA_DEV_NONE; 2149 ata_link_for_each_dev(dev, link)
2175 rc = 0; 2150 classes[dev->devno] = ATA_DEV_NONE;
2176 goto out; 2151 rc = 0;
2152 goto out;
2153 }
2177 } 2154 }
2178 2155
2179 retry: 2156 retry:
2157 /*
2158 * Perform reset
2159 */
2160 if (ata_is_host_link(link))
2161 ata_eh_freeze_port(ap);
2162
2180 deadline = jiffies + ata_eh_reset_timeouts[try++]; 2163 deadline = jiffies + ata_eh_reset_timeouts[try++];
2181 2164
2182 /* shut up during boot probing */ 2165 if (reset) {
2183 if (verbose) 2166 if (verbose)
2184 ata_link_printk(link, KERN_INFO, "%s resetting link\n", 2167 ata_link_printk(link, KERN_INFO, "%s resetting link\n",
2185 reset == softreset ? "soft" : "hard"); 2168 reset == softreset ? "soft" : "hard");
2186 2169
2187 /* mark that this EH session started with reset */ 2170 /* mark that this EH session started with reset */
2188 if (reset == hardreset) 2171 if (reset == hardreset)
2189 ehc->i.flags |= ATA_EHI_DID_HARDRESET; 2172 ehc->i.flags |= ATA_EHI_DID_HARDRESET;
2190 else 2173 else
2191 ehc->i.flags |= ATA_EHI_DID_SOFTRESET; 2174 ehc->i.flags |= ATA_EHI_DID_SOFTRESET;
2192 2175
2193 rc = ata_do_reset(link, reset, classes, deadline); 2176 rc = ata_do_reset(link, reset, classes, deadline);
2194 2177
2195 if (reset == hardreset && 2178 if (reset == hardreset &&
2196 ata_eh_followup_srst_needed(link, rc, classify, classes)) { 2179 ata_eh_followup_srst_needed(link, rc, classify, classes)) {
2197 /* okay, let's do follow-up softreset */ 2180 /* okay, let's do follow-up softreset */
2198 reset = softreset; 2181 reset = softreset;
2199 2182
2200 if (!reset) { 2183 if (!reset) {
2201 ata_link_printk(link, KERN_ERR, 2184 ata_link_printk(link, KERN_ERR,
2202 "follow-up softreset required " 2185 "follow-up softreset required "
2203 "but no softreset avaliable\n"); 2186 "but no softreset avaliable\n");
2204 rc = -EINVAL; 2187 rc = -EINVAL;
2205 goto fail; 2188 goto fail;
2189 }
2190
2191 ata_eh_about_to_do(link, NULL, ATA_EH_RESET);
2192 rc = ata_do_reset(link, reset, classes, deadline);
2206 } 2193 }
2207 2194
2208 ata_eh_about_to_do(link, NULL, ATA_EH_RESET); 2195 /* -EAGAIN can happen if we skipped followup SRST */
2209 rc = ata_do_reset(link, reset, classes, deadline); 2196 if (rc && rc != -EAGAIN)
2197 goto fail;
2198 } else {
2199 if (verbose)
2200 ata_link_printk(link, KERN_INFO, "no reset method "
2201 "available, skipping reset\n");
2202 if (!(lflags & ATA_LFLAG_ASSUME_CLASS))
2203 lflags |= ATA_LFLAG_ASSUME_ATA;
2210 } 2204 }
2211 2205
2212 /* -EAGAIN can happen if we skipped followup SRST */ 2206 /*
2213 if (rc && rc != -EAGAIN) 2207 * Post-reset processing
2214 goto fail; 2208 */
2215
2216 done:
2217 ata_link_for_each_dev(dev, link) { 2209 ata_link_for_each_dev(dev, link) {
2218 /* After the reset, the device state is PIO 0 and the 2210 /* After the reset, the device state is PIO 0 and the
2219 * controller state is undefined. Reset also wakes up 2211 * controller state is undefined. Reset also wakes up
@@ -2236,9 +2228,53 @@ int ata_eh_reset(struct ata_link *link, int classify,
2236 if (sata_scr_read(link, SCR_STATUS, &sstatus) == 0) 2228 if (sata_scr_read(link, SCR_STATUS, &sstatus) == 0)
2237 link->sata_spd = (sstatus >> 4) & 0xf; 2229 link->sata_spd = (sstatus >> 4) & 0xf;
2238 2230
2231 /* thaw the port */
2232 if (ata_is_host_link(link))
2233 ata_eh_thaw_port(ap);
2234
2235 /* postreset() should clear hardware SError. Although SError
2236 * is cleared during link resume, clearing SError here is
2237 * necessary as some PHYs raise hotplug events after SRST.
2238 * This introduces race condition where hotplug occurs between
2239 * reset and here. This race is mediated by cross checking
2240 * link onlineness and classification result later.
2241 */
2239 if (postreset) 2242 if (postreset)
2240 postreset(link, classes); 2243 postreset(link, classes);
2241 2244
2245 /* clear cached SError */
2246 spin_lock_irqsave(link->ap->lock, flags);
2247 link->eh_info.serror = 0;
2248 spin_unlock_irqrestore(link->ap->lock, flags);
2249
2250 /* Make sure onlineness and classification result correspond.
2251 * Hotplug could have happened during reset and some
2252 * controllers fail to wait while a drive is spinning up after
2253 * being hotplugged causing misdetection. By cross checking
2254 * link onlineness and classification result, those conditions
2255 * can be reliably detected and retried.
2256 */
2257 nr_known = 0;
2258 ata_link_for_each_dev(dev, link) {
2259 /* convert all ATA_DEV_UNKNOWN to ATA_DEV_NONE */
2260 if (classes[dev->devno] == ATA_DEV_UNKNOWN)
2261 classes[dev->devno] = ATA_DEV_NONE;
2262 else
2263 nr_known++;
2264 }
2265
2266 if (classify && !nr_known && ata_link_online(link)) {
2267 if (try < max_tries) {
2268 ata_link_printk(link, KERN_WARNING, "link online but "
2269 "device misclassified, retrying\n");
2270 rc = -EAGAIN;
2271 goto fail;
2272 }
2273 ata_link_printk(link, KERN_WARNING,
2274 "link online but device misclassified, "
2275 "device detection might fail\n");
2276 }
2277
2242 /* reset successful, schedule revalidation */ 2278 /* reset successful, schedule revalidation */
2243 ata_eh_done(link, NULL, ATA_EH_RESET); 2279 ata_eh_done(link, NULL, ATA_EH_RESET);
2244 ehc->i.action |= ATA_EH_REVALIDATE; 2280 ehc->i.action |= ATA_EH_REVALIDATE;
@@ -2587,7 +2623,7 @@ int ata_eh_recover(struct ata_port *ap, ata_prereset_fn_t prereset,
2587 struct ata_link *link; 2623 struct ata_link *link;
2588 struct ata_device *dev; 2624 struct ata_device *dev;
2589 int nr_failed_devs, nr_disabled_devs; 2625 int nr_failed_devs, nr_disabled_devs;
2590 int reset, rc; 2626 int rc;
2591 unsigned long flags; 2627 unsigned long flags;
2592 2628
2593 DPRINTK("ENTER\n"); 2629 DPRINTK("ENTER\n");
@@ -2630,7 +2666,6 @@ int ata_eh_recover(struct ata_port *ap, ata_prereset_fn_t prereset,
2630 rc = 0; 2666 rc = 0;
2631 nr_failed_devs = 0; 2667 nr_failed_devs = 0;
2632 nr_disabled_devs = 0; 2668 nr_disabled_devs = 0;
2633 reset = 0;
2634 2669
2635 /* if UNLOADING, finish immediately */ 2670 /* if UNLOADING, finish immediately */
2636 if (ap->pflags & ATA_PFLAG_UNLOADING) 2671 if (ap->pflags & ATA_PFLAG_UNLOADING)
@@ -2644,40 +2679,24 @@ int ata_eh_recover(struct ata_port *ap, ata_prereset_fn_t prereset,
2644 if (ata_eh_skip_recovery(link)) 2679 if (ata_eh_skip_recovery(link))
2645 ehc->i.action = 0; 2680 ehc->i.action = 0;
2646 2681
2647 /* do we need to reset? */
2648 if (ehc->i.action & ATA_EH_RESET)
2649 reset = 1;
2650
2651 ata_link_for_each_dev(dev, link) 2682 ata_link_for_each_dev(dev, link)
2652 ehc->classes[dev->devno] = ATA_DEV_UNKNOWN; 2683 ehc->classes[dev->devno] = ATA_DEV_UNKNOWN;
2653 } 2684 }
2654 2685
2655 /* reset */ 2686 /* reset */
2656 if (reset) { 2687 ata_port_for_each_link(link, ap) {
2657 /* if PMP is attached, this function only deals with 2688 struct ata_eh_context *ehc = &link->eh_context;
2658 * downstream links, port should stay thawed.
2659 */
2660 if (!sata_pmp_attached(ap))
2661 ata_eh_freeze_port(ap);
2662
2663 ata_port_for_each_link(link, ap) {
2664 struct ata_eh_context *ehc = &link->eh_context;
2665 2689
2666 if (!(ehc->i.action & ATA_EH_RESET)) 2690 if (!(ehc->i.action & ATA_EH_RESET))
2667 continue; 2691 continue;
2668 2692
2669 rc = ata_eh_reset(link, ata_link_nr_vacant(link), 2693 rc = ata_eh_reset(link, ata_link_nr_vacant(link),
2670 prereset, softreset, hardreset, 2694 prereset, softreset, hardreset, postreset);
2671 postreset); 2695 if (rc) {
2672 if (rc) { 2696 ata_link_printk(link, KERN_ERR,
2673 ata_link_printk(link, KERN_ERR, 2697 "reset failed, giving up\n");
2674 "reset failed, giving up\n"); 2698 goto out;
2675 goto out;
2676 }
2677 } 2699 }
2678
2679 if (!sata_pmp_attached(ap))
2680 ata_eh_thaw_port(ap);
2681 } 2700 }
2682 2701
2683 /* the rest */ 2702 /* the rest */
diff --git a/drivers/ata/libata-pmp.c b/drivers/ata/libata-pmp.c
index ff1822a7da38..0f9386d4a5a0 100644
--- a/drivers/ata/libata-pmp.c
+++ b/drivers/ata/libata-pmp.c
@@ -48,7 +48,7 @@ static unsigned int sata_pmp_read(struct ata_link *link, int reg, u32 *r_val)
48 tf.device = link->pmp; 48 tf.device = link->pmp;
49 49
50 err_mask = ata_exec_internal(pmp_dev, &tf, NULL, DMA_NONE, NULL, 0, 50 err_mask = ata_exec_internal(pmp_dev, &tf, NULL, DMA_NONE, NULL, 0,
51 SATA_PMP_SCR_TIMEOUT); 51 SATA_PMP_RW_TIMEOUT);
52 if (err_mask) 52 if (err_mask)
53 return err_mask; 53 return err_mask;
54 54
@@ -88,7 +88,7 @@ static unsigned int sata_pmp_write(struct ata_link *link, int reg, u32 val)
88 tf.lbah = (val >> 24) & 0xff; 88 tf.lbah = (val >> 24) & 0xff;
89 89
90 return ata_exec_internal(pmp_dev, &tf, NULL, DMA_NONE, NULL, 0, 90 return ata_exec_internal(pmp_dev, &tf, NULL, DMA_NONE, NULL, 0,
91 SATA_PMP_SCR_TIMEOUT); 91 SATA_PMP_RW_TIMEOUT);
92} 92}
93 93
94/** 94/**
@@ -257,19 +257,6 @@ static int sata_pmp_configure(struct ata_device *dev, int print_info)
257 goto fail; 257 goto fail;
258 } 258 }
259 259
260 /* turn off notification till fan-out ports are reset and configured */
261 if (gscr[SATA_PMP_GSCR_FEAT_EN] & SATA_PMP_FEAT_NOTIFY) {
262 gscr[SATA_PMP_GSCR_FEAT_EN] &= ~SATA_PMP_FEAT_NOTIFY;
263
264 err_mask = sata_pmp_write(dev->link, SATA_PMP_GSCR_FEAT_EN,
265 gscr[SATA_PMP_GSCR_FEAT_EN]);
266 if (err_mask) {
267 rc = -EIO;
268 reason = "failed to write GSCR_FEAT_EN";
269 goto fail;
270 }
271 }
272
273 if (print_info) { 260 if (print_info) {
274 ata_dev_printk(dev, KERN_INFO, "Port Multiplier %s, " 261 ata_dev_printk(dev, KERN_INFO, "Port Multiplier %s, "
275 "0x%04x:0x%04x r%d, %d ports, feat 0x%x/0x%x\n", 262 "0x%04x:0x%04x r%d, %d ports, feat 0x%x/0x%x\n",
@@ -700,8 +687,6 @@ static int sata_pmp_eh_recover_pmp(struct ata_port *ap,
700 if (ehc->i.action & ATA_EH_RESET) { 687 if (ehc->i.action & ATA_EH_RESET) {
701 struct ata_link *tlink; 688 struct ata_link *tlink;
702 689
703 ata_eh_freeze_port(ap);
704
705 /* reset */ 690 /* reset */
706 rc = ata_eh_reset(link, 0, prereset, softreset, hardreset, 691 rc = ata_eh_reset(link, 0, prereset, softreset, hardreset,
707 postreset); 692 postreset);
@@ -711,8 +696,6 @@ static int sata_pmp_eh_recover_pmp(struct ata_port *ap,
711 goto fail; 696 goto fail;
712 } 697 }
713 698
714 ata_eh_thaw_port(ap);
715
716 /* PMP is reset, SErrors cannot be trusted, scan all */ 699 /* PMP is reset, SErrors cannot be trusted, scan all */
717 ata_port_for_each_link(tlink, ap) { 700 ata_port_for_each_link(tlink, ap) {
718 struct ata_eh_context *ehc = &tlink->eh_context; 701 struct ata_eh_context *ehc = &tlink->eh_context;
@@ -864,6 +847,7 @@ static int sata_pmp_eh_recover(struct ata_port *ap)
864 struct ata_link *pmp_link = &ap->link; 847 struct ata_link *pmp_link = &ap->link;
865 struct ata_device *pmp_dev = pmp_link->device; 848 struct ata_device *pmp_dev = pmp_link->device;
866 struct ata_eh_context *pmp_ehc = &pmp_link->eh_context; 849 struct ata_eh_context *pmp_ehc = &pmp_link->eh_context;
850 u32 *gscr = pmp_dev->gscr;
867 struct ata_link *link; 851 struct ata_link *link;
868 struct ata_device *dev; 852 struct ata_device *dev;
869 unsigned int err_mask; 853 unsigned int err_mask;
@@ -901,6 +885,22 @@ static int sata_pmp_eh_recover(struct ata_port *ap)
901 if (rc) 885 if (rc)
902 goto pmp_fail; 886 goto pmp_fail;
903 887
888 /* PHY event notification can disturb reset and other recovery
889 * operations. Turn it off.
890 */
891 if (gscr[SATA_PMP_GSCR_FEAT_EN] & SATA_PMP_FEAT_NOTIFY) {
892 gscr[SATA_PMP_GSCR_FEAT_EN] &= ~SATA_PMP_FEAT_NOTIFY;
893
894 err_mask = sata_pmp_write(pmp_link, SATA_PMP_GSCR_FEAT_EN,
895 gscr[SATA_PMP_GSCR_FEAT_EN]);
896 if (err_mask) {
897 ata_link_printk(pmp_link, KERN_WARNING,
898 "failed to disable NOTIFY (err_mask=0x%x)\n",
899 err_mask);
900 goto pmp_fail;
901 }
902 }
903
904 /* handle disabled links */ 904 /* handle disabled links */
905 rc = sata_pmp_eh_handle_disabled_links(ap); 905 rc = sata_pmp_eh_handle_disabled_links(ap);
906 if (rc) 906 if (rc)
@@ -923,10 +923,10 @@ static int sata_pmp_eh_recover(struct ata_port *ap)
923 923
924 /* enable notification */ 924 /* enable notification */
925 if (pmp_dev->flags & ATA_DFLAG_AN) { 925 if (pmp_dev->flags & ATA_DFLAG_AN) {
926 pmp_dev->gscr[SATA_PMP_GSCR_FEAT_EN] |= SATA_PMP_FEAT_NOTIFY; 926 gscr[SATA_PMP_GSCR_FEAT_EN] |= SATA_PMP_FEAT_NOTIFY;
927 927
928 err_mask = sata_pmp_write(pmp_dev->link, SATA_PMP_GSCR_FEAT_EN, 928 err_mask = sata_pmp_write(pmp_link, SATA_PMP_GSCR_FEAT_EN,
929 pmp_dev->gscr[SATA_PMP_GSCR_FEAT_EN]); 929 gscr[SATA_PMP_GSCR_FEAT_EN]);
930 if (err_mask) { 930 if (err_mask) {
931 ata_dev_printk(pmp_dev, KERN_ERR, "failed to write " 931 ata_dev_printk(pmp_dev, KERN_ERR, "failed to write "
932 "PMP_FEAT_EN (Emask=0x%x)\n", err_mask); 932 "PMP_FEAT_EN (Emask=0x%x)\n", err_mask);
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
index 3ce43920e459..aeb6e01d82ce 100644
--- a/drivers/ata/libata-scsi.c
+++ b/drivers/ata/libata-scsi.c
@@ -1082,12 +1082,6 @@ static unsigned int ata_scsi_start_stop_xlat(struct ata_queued_cmd *qc)
1082 if (((cdb[4] >> 4) & 0xf) != 0) 1082 if (((cdb[4] >> 4) & 0xf) != 0)
1083 goto invalid_fld; /* power conditions not supported */ 1083 goto invalid_fld; /* power conditions not supported */
1084 1084
1085 if (qc->dev->horkage & ATA_HORKAGE_SKIP_PM) {
1086 /* the device lacks PM support, finish without doing anything */
1087 scmd->result = SAM_STAT_GOOD;
1088 return 1;
1089 }
1090
1091 if (cdb[4] & 0x1) { 1085 if (cdb[4] & 0x1) {
1092 tf->nsect = 1; /* 1 sector, lba=0 */ 1086 tf->nsect = 1; /* 1 sector, lba=0 */
1093 1087
diff --git a/drivers/ata/pata_ali.c b/drivers/ata/pata_ali.c
index fcabe46f262b..0f3e659db99a 100644
--- a/drivers/ata/pata_ali.c
+++ b/drivers/ata/pata_ali.c
@@ -177,11 +177,11 @@ static void ali_program_modes(struct ata_port *ap, struct ata_device *adev, stru
177 u8 udma; 177 u8 udma;
178 178
179 if (t != NULL) { 179 if (t != NULL) {
180 t->setup = FIT(t->setup, 1, 8) & 7; 180 t->setup = clamp_val(t->setup, 1, 8) & 7;
181 t->act8b = FIT(t->act8b, 1, 8) & 7; 181 t->act8b = clamp_val(t->act8b, 1, 8) & 7;
182 t->rec8b = FIT(t->rec8b, 1, 16) & 15; 182 t->rec8b = clamp_val(t->rec8b, 1, 16) & 15;
183 t->active = FIT(t->active, 1, 8) & 7; 183 t->active = clamp_val(t->active, 1, 8) & 7;
184 t->recover = FIT(t->recover, 1, 16) & 15; 184 t->recover = clamp_val(t->recover, 1, 16) & 15;
185 185
186 pci_write_config_byte(pdev, cas, t->setup); 186 pci_write_config_byte(pdev, cas, t->setup);
187 pci_write_config_byte(pdev, cbt, (t->act8b << 4) | t->rec8b); 187 pci_write_config_byte(pdev, cbt, (t->act8b << 4) | t->rec8b);
diff --git a/drivers/ata/pata_amd.c b/drivers/ata/pata_amd.c
index 26665c396485..57dd00f463d3 100644
--- a/drivers/ata/pata_amd.c
+++ b/drivers/ata/pata_amd.c
@@ -84,32 +84,32 @@ static void timing_setup(struct ata_port *ap, struct ata_device *adev, int offse
84 84
85 /* Configure the address set up timing */ 85 /* Configure the address set up timing */
86 pci_read_config_byte(pdev, offset + 0x0C, &t); 86 pci_read_config_byte(pdev, offset + 0x0C, &t);
87 t = (t & ~(3 << ((3 - dn) << 1))) | ((FIT(at.setup, 1, 4) - 1) << ((3 - dn) << 1)); 87 t = (t & ~(3 << ((3 - dn) << 1))) | ((clamp_val(at.setup, 1, 4) - 1) << ((3 - dn) << 1));
88 pci_write_config_byte(pdev, offset + 0x0C , t); 88 pci_write_config_byte(pdev, offset + 0x0C , t);
89 89
90 /* Configure the 8bit I/O timing */ 90 /* Configure the 8bit I/O timing */
91 pci_write_config_byte(pdev, offset + 0x0E + (1 - (dn >> 1)), 91 pci_write_config_byte(pdev, offset + 0x0E + (1 - (dn >> 1)),
92 ((FIT(at.act8b, 1, 16) - 1) << 4) | (FIT(at.rec8b, 1, 16) - 1)); 92 ((clamp_val(at.act8b, 1, 16) - 1) << 4) | (clamp_val(at.rec8b, 1, 16) - 1));
93 93
94 /* Drive timing */ 94 /* Drive timing */
95 pci_write_config_byte(pdev, offset + 0x08 + (3 - dn), 95 pci_write_config_byte(pdev, offset + 0x08 + (3 - dn),
96 ((FIT(at.active, 1, 16) - 1) << 4) | (FIT(at.recover, 1, 16) - 1)); 96 ((clamp_val(at.active, 1, 16) - 1) << 4) | (clamp_val(at.recover, 1, 16) - 1));
97 97
98 switch (clock) { 98 switch (clock) {
99 case 1: 99 case 1:
100 t = at.udma ? (0xc0 | (FIT(at.udma, 2, 5) - 2)) : 0x03; 100 t = at.udma ? (0xc0 | (clamp_val(at.udma, 2, 5) - 2)) : 0x03;
101 break; 101 break;
102 102
103 case 2: 103 case 2:
104 t = at.udma ? (0xc0 | amd_cyc2udma[FIT(at.udma, 2, 10)]) : 0x03; 104 t = at.udma ? (0xc0 | amd_cyc2udma[clamp_val(at.udma, 2, 10)]) : 0x03;
105 break; 105 break;
106 106
107 case 3: 107 case 3:
108 t = at.udma ? (0xc0 | amd_cyc2udma[FIT(at.udma, 1, 10)]) : 0x03; 108 t = at.udma ? (0xc0 | amd_cyc2udma[clamp_val(at.udma, 1, 10)]) : 0x03;
109 break; 109 break;
110 110
111 case 4: 111 case 4:
112 t = at.udma ? (0xc0 | amd_cyc2udma[FIT(at.udma, 1, 15)]) : 0x03; 112 t = at.udma ? (0xc0 | amd_cyc2udma[clamp_val(at.udma, 1, 15)]) : 0x03;
113 break; 113 break;
114 114
115 default: 115 default:
diff --git a/drivers/ata/pata_at32.c b/drivers/ata/pata_at32.c
index 5e104385d6a3..82fb6e273169 100644
--- a/drivers/ata/pata_at32.c
+++ b/drivers/ata/pata_at32.c
@@ -291,8 +291,6 @@ static int __init pata_at32_probe(struct platform_device *pdev)
291 if (!info) 291 if (!info)
292 return -ENOMEM; 292 return -ENOMEM;
293 293
294 memset(info, 0, sizeof(struct at32_ide_info));
295
296 info->irq = irq; 294 info->irq = irq;
297 info->cs = board->cs; 295 info->cs = board->cs;
298 296
diff --git a/drivers/ata/pata_bf54x.c b/drivers/ata/pata_bf54x.c
index 9ab89732cf94..55516103626a 100644
--- a/drivers/ata/pata_bf54x.c
+++ b/drivers/ata/pata_bf54x.c
@@ -911,7 +911,10 @@ static void bfin_bmdma_start(struct ata_queued_cmd *qc)
911 /* Reset all transfer count */ 911 /* Reset all transfer count */
912 ATAPI_SET_CONTROL(base, ATAPI_GET_CONTROL(base) | TFRCNT_RST); 912 ATAPI_SET_CONTROL(base, ATAPI_GET_CONTROL(base) | TFRCNT_RST);
913 913
914 /* Set transfer length to buffer len */ 914 /* Set ATAPI state machine contorl in terminate sequence */
915 ATAPI_SET_CONTROL(base, ATAPI_GET_CONTROL(base) | END_ON_TERM);
916
917 /* Set transfer length to buffer len */
915 for_each_sg(qc->sg, sg, qc->n_elem, si) { 918 for_each_sg(qc->sg, sg, qc->n_elem, si) {
916 ATAPI_SET_XFER_LEN(base, (sg_dma_len(sg) >> 1)); 919 ATAPI_SET_XFER_LEN(base, (sg_dma_len(sg) >> 1));
917 } 920 }
diff --git a/drivers/ata/pata_cypress.c b/drivers/ata/pata_cypress.c
index a9c3218e22fd..2ff62608ae37 100644
--- a/drivers/ata/pata_cypress.c
+++ b/drivers/ata/pata_cypress.c
@@ -62,14 +62,14 @@ static void cy82c693_set_piomode(struct ata_port *ap, struct ata_device *adev)
62 return; 62 return;
63 } 63 }
64 64
65 time_16 = FIT(t.recover, 0, 15) | (FIT(t.active, 0, 15) << 4); 65 time_16 = clamp_val(t.recover, 0, 15) | (clamp_val(t.active, 0, 15) << 4);
66 time_8 = FIT(t.act8b, 0, 15) | (FIT(t.rec8b, 0, 15) << 4); 66 time_8 = clamp_val(t.act8b, 0, 15) | (clamp_val(t.rec8b, 0, 15) << 4);
67 67
68 if (adev->devno == 0) { 68 if (adev->devno == 0) {
69 pci_read_config_dword(pdev, CY82_IDE_ADDRSETUP, &addr); 69 pci_read_config_dword(pdev, CY82_IDE_ADDRSETUP, &addr);
70 70
71 addr &= ~0x0F; /* Mask bits */ 71 addr &= ~0x0F; /* Mask bits */
72 addr |= FIT(t.setup, 0, 15); 72 addr |= clamp_val(t.setup, 0, 15);
73 73
74 pci_write_config_dword(pdev, CY82_IDE_ADDRSETUP, addr); 74 pci_write_config_dword(pdev, CY82_IDE_ADDRSETUP, addr);
75 pci_write_config_byte(pdev, CY82_IDE_MASTER_IOR, time_16); 75 pci_write_config_byte(pdev, CY82_IDE_MASTER_IOR, time_16);
@@ -79,7 +79,7 @@ static void cy82c693_set_piomode(struct ata_port *ap, struct ata_device *adev)
79 pci_read_config_dword(pdev, CY82_IDE_ADDRSETUP, &addr); 79 pci_read_config_dword(pdev, CY82_IDE_ADDRSETUP, &addr);
80 80
81 addr &= ~0xF0; /* Mask bits */ 81 addr &= ~0xF0; /* Mask bits */
82 addr |= (FIT(t.setup, 0, 15) << 4); 82 addr |= (clamp_val(t.setup, 0, 15) << 4);
83 83
84 pci_write_config_dword(pdev, CY82_IDE_ADDRSETUP, addr); 84 pci_write_config_dword(pdev, CY82_IDE_ADDRSETUP, addr);
85 pci_write_config_byte(pdev, CY82_IDE_SLAVE_IOR, time_16); 85 pci_write_config_byte(pdev, CY82_IDE_SLAVE_IOR, time_16);
diff --git a/drivers/ata/pata_legacy.c b/drivers/ata/pata_legacy.c
index 7af4b29cc422..fe7cc8ed4ea4 100644
--- a/drivers/ata/pata_legacy.c
+++ b/drivers/ata/pata_legacy.c
@@ -343,8 +343,8 @@ static void ht6560a_set_piomode(struct ata_port *ap, struct ata_device *adev)
343 /* Get the timing data in cycles. For now play safe at 50Mhz */ 343 /* Get the timing data in cycles. For now play safe at 50Mhz */
344 ata_timing_compute(adev, adev->pio_mode, &t, 20000, 1000); 344 ata_timing_compute(adev, adev->pio_mode, &t, 20000, 1000);
345 345
346 active = FIT(t.active, 2, 15); 346 active = clamp_val(t.active, 2, 15);
347 recover = FIT(t.recover, 4, 15); 347 recover = clamp_val(t.recover, 4, 15);
348 348
349 inb(0x3E6); 349 inb(0x3E6);
350 inb(0x3E6); 350 inb(0x3E6);
@@ -377,8 +377,8 @@ static void ht6560b_set_piomode(struct ata_port *ap, struct ata_device *adev)
377 /* Get the timing data in cycles. For now play safe at 50Mhz */ 377 /* Get the timing data in cycles. For now play safe at 50Mhz */
378 ata_timing_compute(adev, adev->pio_mode, &t, 20000, 1000); 378 ata_timing_compute(adev, adev->pio_mode, &t, 20000, 1000);
379 379
380 active = FIT(t.active, 2, 15); 380 active = clamp_val(t.active, 2, 15);
381 recover = FIT(t.recover, 2, 16); 381 recover = clamp_val(t.recover, 2, 16);
382 recover &= 0x15; 382 recover &= 0x15;
383 383
384 inb(0x3E6); 384 inb(0x3E6);
@@ -462,9 +462,9 @@ static void opti82c611a_set_piomode(struct ata_port *ap,
462 ata_timing_merge(&t, &tp, &t, ATA_TIMING_SETUP); 462 ata_timing_merge(&t, &tp, &t, ATA_TIMING_SETUP);
463 } 463 }
464 464
465 active = FIT(t.active, 2, 17) - 2; 465 active = clamp_val(t.active, 2, 17) - 2;
466 recover = FIT(t.recover, 1, 16) - 1; 466 recover = clamp_val(t.recover, 1, 16) - 1;
467 setup = FIT(t.setup, 1, 4) - 1; 467 setup = clamp_val(t.setup, 1, 4) - 1;
468 468
469 /* Select the right timing bank for write timing */ 469 /* Select the right timing bank for write timing */
470 rc = ioread8(ap->ioaddr.lbal_addr); 470 rc = ioread8(ap->ioaddr.lbal_addr);
@@ -541,9 +541,9 @@ static void opti82c46x_set_piomode(struct ata_port *ap, struct ata_device *adev)
541 ata_timing_merge(&t, &tp, &t, ATA_TIMING_SETUP); 541 ata_timing_merge(&t, &tp, &t, ATA_TIMING_SETUP);
542 } 542 }
543 543
544 active = FIT(t.active, 2, 17) - 2; 544 active = clamp_val(t.active, 2, 17) - 2;
545 recover = FIT(t.recover, 1, 16) - 1; 545 recover = clamp_val(t.recover, 1, 16) - 1;
546 setup = FIT(t.setup, 1, 4) - 1; 546 setup = clamp_val(t.setup, 1, 4) - 1;
547 547
548 /* Select the right timing bank for write timing */ 548 /* Select the right timing bank for write timing */
549 rc = ioread8(ap->ioaddr.lbal_addr); 549 rc = ioread8(ap->ioaddr.lbal_addr);
@@ -624,11 +624,11 @@ static void qdi6500_set_piomode(struct ata_port *ap, struct ata_device *adev)
624 ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000); 624 ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
625 625
626 if (ld_qdi->fast) { 626 if (ld_qdi->fast) {
627 active = 8 - FIT(t.active, 1, 8); 627 active = 8 - clamp_val(t.active, 1, 8);
628 recovery = 18 - FIT(t.recover, 3, 18); 628 recovery = 18 - clamp_val(t.recover, 3, 18);
629 } else { 629 } else {
630 active = 9 - FIT(t.active, 2, 9); 630 active = 9 - clamp_val(t.active, 2, 9);
631 recovery = 15 - FIT(t.recover, 0, 15); 631 recovery = 15 - clamp_val(t.recover, 0, 15);
632 } 632 }
633 timing = (recovery << 4) | active | 0x08; 633 timing = (recovery << 4) | active | 0x08;
634 634
@@ -658,11 +658,11 @@ static void qdi6580dp_set_piomode(struct ata_port *ap, struct ata_device *adev)
658 ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000); 658 ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
659 659
660 if (ld_qdi->fast) { 660 if (ld_qdi->fast) {
661 active = 8 - FIT(t.active, 1, 8); 661 active = 8 - clamp_val(t.active, 1, 8);
662 recovery = 18 - FIT(t.recover, 3, 18); 662 recovery = 18 - clamp_val(t.recover, 3, 18);
663 } else { 663 } else {
664 active = 9 - FIT(t.active, 2, 9); 664 active = 9 - clamp_val(t.active, 2, 9);
665 recovery = 15 - FIT(t.recover, 0, 15); 665 recovery = 15 - clamp_val(t.recover, 0, 15);
666 } 666 }
667 timing = (recovery << 4) | active | 0x08; 667 timing = (recovery << 4) | active | 0x08;
668 668
@@ -695,11 +695,11 @@ static void qdi6580_set_piomode(struct ata_port *ap, struct ata_device *adev)
695 ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000); 695 ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
696 696
697 if (ld_qdi->fast) { 697 if (ld_qdi->fast) {
698 active = 8 - FIT(t.active, 1, 8); 698 active = 8 - clamp_val(t.active, 1, 8);
699 recovery = 18 - FIT(t.recover, 3, 18); 699 recovery = 18 - clamp_val(t.recover, 3, 18);
700 } else { 700 } else {
701 active = 9 - FIT(t.active, 2, 9); 701 active = 9 - clamp_val(t.active, 2, 9);
702 recovery = 15 - FIT(t.recover, 0, 15); 702 recovery = 15 - clamp_val(t.recover, 0, 15);
703 } 703 }
704 timing = (recovery << 4) | active | 0x08; 704 timing = (recovery << 4) | active | 0x08;
705 ld_qdi->clock[adev->devno] = timing; 705 ld_qdi->clock[adev->devno] = timing;
@@ -830,8 +830,8 @@ static void winbond_set_piomode(struct ata_port *ap, struct ata_device *adev)
830 else 830 else
831 ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000); 831 ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
832 832
833 active = (FIT(t.active, 3, 17) - 1) & 0x0F; 833 active = (clamp_val(t.active, 3, 17) - 1) & 0x0F;
834 recovery = (FIT(t.recover, 1, 15) + 1) & 0x0F; 834 recovery = (clamp_val(t.recover, 1, 15) + 1) & 0x0F;
835 timing = (active << 4) | recovery; 835 timing = (active << 4) | recovery;
836 winbond_writecfg(ld_winbond->timing, timing, reg); 836 winbond_writecfg(ld_winbond->timing, timing, reg);
837 837
@@ -842,7 +842,7 @@ static void winbond_set_piomode(struct ata_port *ap, struct ata_device *adev)
842 reg |= 0x08; /* FIFO off */ 842 reg |= 0x08; /* FIFO off */
843 if (!ata_pio_need_iordy(adev)) 843 if (!ata_pio_need_iordy(adev))
844 reg |= 0x02; /* IORDY off */ 844 reg |= 0x02; /* IORDY off */
845 reg |= (FIT(t.setup, 0, 3) << 6); 845 reg |= (clamp_val(t.setup, 0, 3) << 6);
846 winbond_writecfg(ld_winbond->timing, timing + 1, reg); 846 winbond_writecfg(ld_winbond->timing, timing + 1, reg);
847} 847}
848 848
diff --git a/drivers/ata/pata_ns87410.c b/drivers/ata/pata_ns87410.c
index 76d2455bc453..be756b7ef07e 100644
--- a/drivers/ata/pata_ns87410.c
+++ b/drivers/ata/pata_ns87410.c
@@ -91,9 +91,9 @@ static void ns87410_set_piomode(struct ata_port *ap, struct ata_device *adev)
91 return; 91 return;
92 } 92 }
93 93
94 at.active = FIT(at.active, 2, 16) - 2; 94 at.active = clamp_val(at.active, 2, 16) - 2;
95 at.setup = FIT(at.setup, 1, 4) - 1; 95 at.setup = clamp_val(at.setup, 1, 4) - 1;
96 at.recover = FIT(at.recover, 1, 12) - 1; 96 at.recover = clamp_val(at.recover, 1, 12) - 1;
97 97
98 idetcr = (at.setup << 6) | (recoverbits[at.recover] << 3) | activebits[at.active]; 98 idetcr = (at.setup << 6) | (recoverbits[at.recover] << 3) | activebits[at.active];
99 99
diff --git a/drivers/ata/pata_ns87415.c b/drivers/ata/pata_ns87415.c
index ae92b0049bd5..e0aa7eaaee0a 100644
--- a/drivers/ata/pata_ns87415.c
+++ b/drivers/ata/pata_ns87415.c
@@ -66,8 +66,8 @@ static void ns87415_set_mode(struct ata_port *ap, struct ata_device *adev, u8 mo
66 66
67 ata_timing_compute(adev, adev->pio_mode, &t, T, 0); 67 ata_timing_compute(adev, adev->pio_mode, &t, T, 0);
68 68
69 clocking = 17 - FIT(t.active, 2, 17); 69 clocking = 17 - clamp_val(t.active, 2, 17);
70 clocking |= (16 - FIT(t.recover, 1, 16)) << 4; 70 clocking |= (16 - clamp_val(t.recover, 1, 16)) << 4;
71 /* Use the same timing for read and write bytes */ 71 /* Use the same timing for read and write bytes */
72 clocking |= (clocking << 8); 72 clocking |= (clocking << 8);
73 pci_write_config_word(dev, timing, clocking); 73 pci_write_config_word(dev, timing, clocking);
diff --git a/drivers/ata/pata_qdi.c b/drivers/ata/pata_qdi.c
index bf45cf017753..97e5b090d7c2 100644
--- a/drivers/ata/pata_qdi.c
+++ b/drivers/ata/pata_qdi.c
@@ -60,11 +60,11 @@ static void qdi6500_set_piomode(struct ata_port *ap, struct ata_device *adev)
60 ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000); 60 ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
61 61
62 if (qdi->fast) { 62 if (qdi->fast) {
63 active = 8 - FIT(t.active, 1, 8); 63 active = 8 - clamp_val(t.active, 1, 8);
64 recovery = 18 - FIT(t.recover, 3, 18); 64 recovery = 18 - clamp_val(t.recover, 3, 18);
65 } else { 65 } else {
66 active = 9 - FIT(t.active, 2, 9); 66 active = 9 - clamp_val(t.active, 2, 9);
67 recovery = 15 - FIT(t.recover, 0, 15); 67 recovery = 15 - clamp_val(t.recover, 0, 15);
68 } 68 }
69 timing = (recovery << 4) | active | 0x08; 69 timing = (recovery << 4) | active | 0x08;
70 70
@@ -84,11 +84,11 @@ static void qdi6580_set_piomode(struct ata_port *ap, struct ata_device *adev)
84 ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000); 84 ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
85 85
86 if (qdi->fast) { 86 if (qdi->fast) {
87 active = 8 - FIT(t.active, 1, 8); 87 active = 8 - clamp_val(t.active, 1, 8);
88 recovery = 18 - FIT(t.recover, 3, 18); 88 recovery = 18 - clamp_val(t.recover, 3, 18);
89 } else { 89 } else {
90 active = 9 - FIT(t.active, 2, 9); 90 active = 9 - clamp_val(t.active, 2, 9);
91 recovery = 15 - FIT(t.recover, 0, 15); 91 recovery = 15 - clamp_val(t.recover, 0, 15);
92 } 92 }
93 timing = (recovery << 4) | active | 0x08; 93 timing = (recovery << 4) | active | 0x08;
94 94
diff --git a/drivers/ata/pata_sl82c105.c b/drivers/ata/pata_sl82c105.c
index 70d94fb28a5f..69877bd81815 100644
--- a/drivers/ata/pata_sl82c105.c
+++ b/drivers/ata/pata_sl82c105.c
@@ -216,7 +216,7 @@ static int sl82c105_qc_defer(struct ata_queued_cmd *qc)
216 struct ata_port *alt = host->ports[1 ^ qc->ap->port_no]; 216 struct ata_port *alt = host->ports[1 ^ qc->ap->port_no];
217 int rc; 217 int rc;
218 218
219 /* First apply the usual rules */ 219 /* First apply the usual rules */
220 rc = ata_std_qc_defer(qc); 220 rc = ata_std_qc_defer(qc);
221 if (rc != 0) 221 if (rc != 0)
222 return rc; 222 return rc;
diff --git a/drivers/ata/pata_via.c b/drivers/ata/pata_via.c
index 2fea6cbe7755..708ed144ede9 100644
--- a/drivers/ata/pata_via.c
+++ b/drivers/ata/pata_via.c
@@ -259,15 +259,15 @@ static void via_do_set_mode(struct ata_port *ap, struct ata_device *adev, int mo
259 259
260 pci_read_config_byte(pdev, 0x4C, &setup); 260 pci_read_config_byte(pdev, 0x4C, &setup);
261 setup &= ~(3 << shift); 261 setup &= ~(3 << shift);
262 setup |= FIT(t.setup, 1, 4) << shift; /* 1,4 or 1,4 - 1 FIXME */ 262 setup |= clamp_val(t.setup, 1, 4) << shift; /* 1,4 or 1,4 - 1 FIXME */
263 pci_write_config_byte(pdev, 0x4C, setup); 263 pci_write_config_byte(pdev, 0x4C, setup);
264 } 264 }
265 265
266 /* Load the PIO mode bits */ 266 /* Load the PIO mode bits */
267 pci_write_config_byte(pdev, 0x4F - ap->port_no, 267 pci_write_config_byte(pdev, 0x4F - ap->port_no,
268 ((FIT(t.act8b, 1, 16) - 1) << 4) | (FIT(t.rec8b, 1, 16) - 1)); 268 ((clamp_val(t.act8b, 1, 16) - 1) << 4) | (clamp_val(t.rec8b, 1, 16) - 1));
269 pci_write_config_byte(pdev, 0x48 + offset, 269 pci_write_config_byte(pdev, 0x48 + offset,
270 ((FIT(t.active, 1, 16) - 1) << 4) | (FIT(t.recover, 1, 16) - 1)); 270 ((clamp_val(t.active, 1, 16) - 1) << 4) | (clamp_val(t.recover, 1, 16) - 1));
271 271
272 /* Load the UDMA bits according to type */ 272 /* Load the UDMA bits according to type */
273 switch(udma_type) { 273 switch(udma_type) {
@@ -275,16 +275,16 @@ static void via_do_set_mode(struct ata_port *ap, struct ata_device *adev, int mo
275 /* BUG() ? */ 275 /* BUG() ? */
276 /* fall through */ 276 /* fall through */
277 case 33: 277 case 33:
278 ut = t.udma ? (0xe0 | (FIT(t.udma, 2, 5) - 2)) : 0x03; 278 ut = t.udma ? (0xe0 | (clamp_val(t.udma, 2, 5) - 2)) : 0x03;
279 break; 279 break;
280 case 66: 280 case 66:
281 ut = t.udma ? (0xe8 | (FIT(t.udma, 2, 9) - 2)) : 0x0f; 281 ut = t.udma ? (0xe8 | (clamp_val(t.udma, 2, 9) - 2)) : 0x0f;
282 break; 282 break;
283 case 100: 283 case 100:
284 ut = t.udma ? (0xe0 | (FIT(t.udma, 2, 9) - 2)) : 0x07; 284 ut = t.udma ? (0xe0 | (clamp_val(t.udma, 2, 9) - 2)) : 0x07;
285 break; 285 break;
286 case 133: 286 case 133:
287 ut = t.udma ? (0xe0 | (FIT(t.udma, 2, 9) - 2)) : 0x07; 287 ut = t.udma ? (0xe0 | (clamp_val(t.udma, 2, 9) - 2)) : 0x07;
288 break; 288 break;
289 } 289 }
290 290
diff --git a/drivers/ata/pata_winbond.c b/drivers/ata/pata_winbond.c
index 6e52a3573fbf..474528f8fe3d 100644
--- a/drivers/ata/pata_winbond.c
+++ b/drivers/ata/pata_winbond.c
@@ -75,8 +75,8 @@ static void winbond_set_piomode(struct ata_port *ap, struct ata_device *adev)
75 else 75 else
76 ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000); 76 ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
77 77
78 active = (FIT(t.active, 3, 17) - 1) & 0x0F; 78 active = (clamp_val(t.active, 3, 17) - 1) & 0x0F;
79 recovery = (FIT(t.recover, 1, 15) + 1) & 0x0F; 79 recovery = (clamp_val(t.recover, 1, 15) + 1) & 0x0F;
80 timing = (active << 4) | recovery; 80 timing = (active << 4) | recovery;
81 winbond_writecfg(winbond->config, timing, reg); 81 winbond_writecfg(winbond->config, timing, reg);
82 82
@@ -87,7 +87,7 @@ static void winbond_set_piomode(struct ata_port *ap, struct ata_device *adev)
87 reg |= 0x08; /* FIFO off */ 87 reg |= 0x08; /* FIFO off */
88 if (!ata_pio_need_iordy(adev)) 88 if (!ata_pio_need_iordy(adev))
89 reg |= 0x02; /* IORDY off */ 89 reg |= 0x02; /* IORDY off */
90 reg |= (FIT(t.setup, 0, 3) << 6); 90 reg |= (clamp_val(t.setup, 0, 3) << 6);
91 winbond_writecfg(winbond->config, timing + 1, reg); 91 winbond_writecfg(winbond->config, timing + 1, reg);
92} 92}
93 93
diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c
index bb73b2222627..fb81f0c7a8c2 100644
--- a/drivers/ata/sata_mv.c
+++ b/drivers/ata/sata_mv.c
@@ -72,7 +72,7 @@
72#include <linux/libata.h> 72#include <linux/libata.h>
73 73
74#define DRV_NAME "sata_mv" 74#define DRV_NAME "sata_mv"
75#define DRV_VERSION "1.20" 75#define DRV_VERSION "1.21"
76 76
77enum { 77enum {
78 /* BAR's are enumerated in terms of pci_resource_start() terms */ 78 /* BAR's are enumerated in terms of pci_resource_start() terms */
@@ -128,8 +128,13 @@ enum {
128 MV_COMMON_FLAGS = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | 128 MV_COMMON_FLAGS = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
129 ATA_FLAG_MMIO | ATA_FLAG_NO_ATAPI | 129 ATA_FLAG_MMIO | ATA_FLAG_NO_ATAPI |
130 ATA_FLAG_PIO_POLLING, 130 ATA_FLAG_PIO_POLLING,
131
131 MV_6XXX_FLAGS = MV_FLAG_IRQ_COALESCE, 132 MV_6XXX_FLAGS = MV_FLAG_IRQ_COALESCE,
132 133
134 MV_GENIIE_FLAGS = MV_COMMON_FLAGS | MV_6XXX_FLAGS |
135 ATA_FLAG_PMP | ATA_FLAG_ACPI_SATA |
136 ATA_FLAG_NCQ | ATA_FLAG_AN,
137
133 CRQB_FLAG_READ = (1 << 0), 138 CRQB_FLAG_READ = (1 << 0),
134 CRQB_TAG_SHIFT = 1, 139 CRQB_TAG_SHIFT = 1,
135 CRQB_IOID_SHIFT = 6, /* CRQB Gen-II/IIE IO Id shift */ 140 CRQB_IOID_SHIFT = 6, /* CRQB Gen-II/IIE IO Id shift */
@@ -197,13 +202,6 @@ enum {
197 HC_MAIN_RSVD = (0x7f << 25), /* bits 31-25 */ 202 HC_MAIN_RSVD = (0x7f << 25), /* bits 31-25 */
198 HC_MAIN_RSVD_5 = (0x1fff << 19), /* bits 31-19 */ 203 HC_MAIN_RSVD_5 = (0x1fff << 19), /* bits 31-19 */
199 HC_MAIN_RSVD_SOC = (0x3fffffb << 6), /* bits 31-9, 7-6 */ 204 HC_MAIN_RSVD_SOC = (0x3fffffb << 6), /* bits 31-9, 7-6 */
200 HC_MAIN_MASKED_IRQS = (TRAN_LO_DONE | TRAN_HI_DONE |
201 PORTS_0_3_COAL_DONE | PORTS_4_7_COAL_DONE |
202 PORTS_0_7_COAL_DONE | GPIO_INT | TWSI_INT |
203 HC_MAIN_RSVD),
204 HC_MAIN_MASKED_IRQS_5 = (PORTS_0_3_COAL_DONE | PORTS_4_7_COAL_DONE |
205 HC_MAIN_RSVD_5),
206 HC_MAIN_MASKED_IRQS_SOC = (PORTS_0_3_COAL_DONE | HC_MAIN_RSVD_SOC),
207 205
208 /* SATAHC registers */ 206 /* SATAHC registers */
209 HC_CFG_OFS = 0, 207 HC_CFG_OFS = 0,
@@ -221,6 +219,7 @@ enum {
221 SATA_STATUS_OFS = 0x300, /* ctrl, err regs follow status */ 219 SATA_STATUS_OFS = 0x300, /* ctrl, err regs follow status */
222 SATA_ACTIVE_OFS = 0x350, 220 SATA_ACTIVE_OFS = 0x350,
223 SATA_FIS_IRQ_CAUSE_OFS = 0x364, 221 SATA_FIS_IRQ_CAUSE_OFS = 0x364,
222 SATA_FIS_IRQ_AN = (1 << 9), /* async notification */
224 223
225 LTMODE_OFS = 0x30c, 224 LTMODE_OFS = 0x30c,
226 LTMODE_BIT8 = (1 << 8), /* unknown, but necessary */ 225 LTMODE_BIT8 = (1 << 8), /* unknown, but necessary */
@@ -459,6 +458,7 @@ struct mv_port_signal {
459 458
460struct mv_host_priv { 459struct mv_host_priv {
461 u32 hp_flags; 460 u32 hp_flags;
461 u32 main_irq_mask;
462 struct mv_port_signal signal[8]; 462 struct mv_port_signal signal[8];
463 const struct mv_hw_ops *ops; 463 const struct mv_hw_ops *ops;
464 int n_ports; 464 int n_ports;
@@ -640,25 +640,19 @@ static const struct ata_port_info mv_port_info[] = {
640 .port_ops = &mv6_ops, 640 .port_ops = &mv6_ops,
641 }, 641 },
642 { /* chip_6042 */ 642 { /* chip_6042 */
643 .flags = MV_COMMON_FLAGS | MV_6XXX_FLAGS | 643 .flags = MV_GENIIE_FLAGS,
644 ATA_FLAG_PMP | ATA_FLAG_ACPI_SATA |
645 ATA_FLAG_NCQ,
646 .pio_mask = 0x1f, /* pio0-4 */ 644 .pio_mask = 0x1f, /* pio0-4 */
647 .udma_mask = ATA_UDMA6, 645 .udma_mask = ATA_UDMA6,
648 .port_ops = &mv_iie_ops, 646 .port_ops = &mv_iie_ops,
649 }, 647 },
650 { /* chip_7042 */ 648 { /* chip_7042 */
651 .flags = MV_COMMON_FLAGS | MV_6XXX_FLAGS | 649 .flags = MV_GENIIE_FLAGS,
652 ATA_FLAG_PMP | ATA_FLAG_ACPI_SATA |
653 ATA_FLAG_NCQ,
654 .pio_mask = 0x1f, /* pio0-4 */ 650 .pio_mask = 0x1f, /* pio0-4 */
655 .udma_mask = ATA_UDMA6, 651 .udma_mask = ATA_UDMA6,
656 .port_ops = &mv_iie_ops, 652 .port_ops = &mv_iie_ops,
657 }, 653 },
658 { /* chip_soc */ 654 { /* chip_soc */
659 .flags = MV_COMMON_FLAGS | MV_6XXX_FLAGS | 655 .flags = MV_GENIIE_FLAGS | MV_FLAG_SOC,
660 ATA_FLAG_PMP | ATA_FLAG_ACPI_SATA |
661 ATA_FLAG_NCQ | MV_FLAG_SOC,
662 .pio_mask = 0x1f, /* pio0-4 */ 656 .pio_mask = 0x1f, /* pio0-4 */
663 .udma_mask = ATA_UDMA6, 657 .udma_mask = ATA_UDMA6,
664 .port_ops = &mv_iie_ops, 658 .port_ops = &mv_iie_ops,
@@ -844,6 +838,33 @@ static void mv_set_edma_ptrs(void __iomem *port_mmio,
844 port_mmio + EDMA_RSP_Q_OUT_PTR_OFS); 838 port_mmio + EDMA_RSP_Q_OUT_PTR_OFS);
845} 839}
846 840
841static void mv_set_main_irq_mask(struct ata_host *host,
842 u32 disable_bits, u32 enable_bits)
843{
844 struct mv_host_priv *hpriv = host->private_data;
845 u32 old_mask, new_mask;
846
847 old_mask = hpriv->main_irq_mask;
848 new_mask = (old_mask & ~disable_bits) | enable_bits;
849 if (new_mask != old_mask) {
850 hpriv->main_irq_mask = new_mask;
851 writelfl(new_mask, hpriv->main_irq_mask_addr);
852 }
853}
854
855static void mv_enable_port_irqs(struct ata_port *ap,
856 unsigned int port_bits)
857{
858 unsigned int shift, hardport, port = ap->port_no;
859 u32 disable_bits, enable_bits;
860
861 MV_PORT_TO_SHIFT_AND_HARDPORT(port, shift, hardport);
862
863 disable_bits = (DONE_IRQ | ERR_IRQ) << shift;
864 enable_bits = port_bits << shift;
865 mv_set_main_irq_mask(ap->host, disable_bits, enable_bits);
866}
867
847/** 868/**
848 * mv_start_dma - Enable eDMA engine 869 * mv_start_dma - Enable eDMA engine
849 * @base: port base address 870 * @base: port base address
@@ -886,9 +907,11 @@ static void mv_start_dma(struct ata_port *ap, void __iomem *port_mmio,
886 mv_edma_cfg(ap, want_ncq); 907 mv_edma_cfg(ap, want_ncq);
887 908
888 /* clear FIS IRQ Cause */ 909 /* clear FIS IRQ Cause */
889 writelfl(0, port_mmio + SATA_FIS_IRQ_CAUSE_OFS); 910 if (IS_GEN_IIE(hpriv))
911 writelfl(0, port_mmio + SATA_FIS_IRQ_CAUSE_OFS);
890 912
891 mv_set_edma_ptrs(port_mmio, hpriv, pp); 913 mv_set_edma_ptrs(port_mmio, hpriv, pp);
914 mv_enable_port_irqs(ap, DONE_IRQ|ERR_IRQ);
892 915
893 writelfl(EDMA_EN, port_mmio + EDMA_CMD_OFS); 916 writelfl(EDMA_EN, port_mmio + EDMA_CMD_OFS);
894 pp->pp_flags |= MV_PP_FLAG_EDMA_EN; 917 pp->pp_flags |= MV_PP_FLAG_EDMA_EN;
@@ -1341,6 +1364,7 @@ out_port_free_dma_mem:
1341static void mv_port_stop(struct ata_port *ap) 1364static void mv_port_stop(struct ata_port *ap)
1342{ 1365{
1343 mv_stop_edma(ap); 1366 mv_stop_edma(ap);
1367 mv_enable_port_irqs(ap, 0);
1344 mv_port_free_dma_mem(ap); 1368 mv_port_free_dma_mem(ap);
1345} 1369}
1346 1370
@@ -1582,6 +1606,7 @@ static unsigned int mv_qc_issue(struct ata_queued_cmd *qc)
1582 * shadow block, etc registers. 1606 * shadow block, etc registers.
1583 */ 1607 */
1584 mv_stop_edma(ap); 1608 mv_stop_edma(ap);
1609 mv_enable_port_irqs(ap, ERR_IRQ);
1585 mv_pmp_select(ap, qc->dev->link->pmp); 1610 mv_pmp_select(ap, qc->dev->link->pmp);
1586 return ata_sff_qc_issue(qc); 1611 return ata_sff_qc_issue(qc);
1587 } 1612 }
@@ -1670,6 +1695,18 @@ static void mv_pmp_eh_prep(struct ata_port *ap, unsigned int pmp_map)
1670 } 1695 }
1671} 1696}
1672 1697
1698static int mv_req_q_empty(struct ata_port *ap)
1699{
1700 void __iomem *port_mmio = mv_ap_base(ap);
1701 u32 in_ptr, out_ptr;
1702
1703 in_ptr = (readl(port_mmio + EDMA_REQ_Q_IN_PTR_OFS)
1704 >> EDMA_REQ_Q_PTR_SHIFT) & MV_MAX_Q_DEPTH_MASK;
1705 out_ptr = (readl(port_mmio + EDMA_REQ_Q_OUT_PTR_OFS)
1706 >> EDMA_REQ_Q_PTR_SHIFT) & MV_MAX_Q_DEPTH_MASK;
1707 return (in_ptr == out_ptr); /* 1 == queue_is_empty */
1708}
1709
1673static int mv_handle_fbs_ncq_dev_err(struct ata_port *ap) 1710static int mv_handle_fbs_ncq_dev_err(struct ata_port *ap)
1674{ 1711{
1675 struct mv_port_priv *pp = ap->private_data; 1712 struct mv_port_priv *pp = ap->private_data;
@@ -1703,7 +1740,7 @@ static int mv_handle_fbs_ncq_dev_err(struct ata_port *ap)
1703 ap->qc_active, failed_links, 1740 ap->qc_active, failed_links,
1704 ap->nr_active_links); 1741 ap->nr_active_links);
1705 1742
1706 if (ap->nr_active_links <= failed_links) { 1743 if (ap->nr_active_links <= failed_links && mv_req_q_empty(ap)) {
1707 mv_process_crpb_entries(ap, pp); 1744 mv_process_crpb_entries(ap, pp);
1708 mv_stop_edma(ap); 1745 mv_stop_edma(ap);
1709 mv_eh_freeze(ap); 1746 mv_eh_freeze(ap);
@@ -1812,6 +1849,7 @@ static void mv_err_intr(struct ata_port *ap)
1812{ 1849{
1813 void __iomem *port_mmio = mv_ap_base(ap); 1850 void __iomem *port_mmio = mv_ap_base(ap);
1814 u32 edma_err_cause, eh_freeze_mask, serr = 0; 1851 u32 edma_err_cause, eh_freeze_mask, serr = 0;
1852 u32 fis_cause = 0;
1815 struct mv_port_priv *pp = ap->private_data; 1853 struct mv_port_priv *pp = ap->private_data;
1816 struct mv_host_priv *hpriv = ap->host->private_data; 1854 struct mv_host_priv *hpriv = ap->host->private_data;
1817 unsigned int action = 0, err_mask = 0; 1855 unsigned int action = 0, err_mask = 0;
@@ -1821,16 +1859,19 @@ static void mv_err_intr(struct ata_port *ap)
1821 1859
1822 /* 1860 /*
1823 * Read and clear the SError and err_cause bits. 1861 * Read and clear the SError and err_cause bits.
1862 * For GenIIe, if EDMA_ERR_TRANS_IRQ_7 is set, we also must read/clear
1863 * the FIS_IRQ_CAUSE register before clearing edma_err_cause.
1824 */ 1864 */
1825 sata_scr_read(&ap->link, SCR_ERROR, &serr); 1865 sata_scr_read(&ap->link, SCR_ERROR, &serr);
1826 sata_scr_write_flush(&ap->link, SCR_ERROR, serr); 1866 sata_scr_write_flush(&ap->link, SCR_ERROR, serr);
1827 1867
1828 edma_err_cause = readl(port_mmio + EDMA_ERR_IRQ_CAUSE_OFS); 1868 edma_err_cause = readl(port_mmio + EDMA_ERR_IRQ_CAUSE_OFS);
1869 if (IS_GEN_IIE(hpriv) && (edma_err_cause & EDMA_ERR_TRANS_IRQ_7)) {
1870 fis_cause = readl(port_mmio + SATA_FIS_IRQ_CAUSE_OFS);
1871 writelfl(~fis_cause, port_mmio + SATA_FIS_IRQ_CAUSE_OFS);
1872 }
1829 writelfl(~edma_err_cause, port_mmio + EDMA_ERR_IRQ_CAUSE_OFS); 1873 writelfl(~edma_err_cause, port_mmio + EDMA_ERR_IRQ_CAUSE_OFS);
1830 1874
1831 ata_port_printk(ap, KERN_INFO, "%s: err_cause=%08x pp_flags=0x%x\n",
1832 __func__, edma_err_cause, pp->pp_flags);
1833
1834 if (edma_err_cause & EDMA_ERR_DEV) { 1875 if (edma_err_cause & EDMA_ERR_DEV) {
1835 /* 1876 /*
1836 * Device errors during FIS-based switching operation 1877 * Device errors during FIS-based switching operation
@@ -1844,6 +1885,18 @@ static void mv_err_intr(struct ata_port *ap)
1844 ata_ehi_clear_desc(ehi); 1885 ata_ehi_clear_desc(ehi);
1845 ata_ehi_push_desc(ehi, "edma_err_cause=%08x pp_flags=%08x", 1886 ata_ehi_push_desc(ehi, "edma_err_cause=%08x pp_flags=%08x",
1846 edma_err_cause, pp->pp_flags); 1887 edma_err_cause, pp->pp_flags);
1888
1889 if (IS_GEN_IIE(hpriv) && (edma_err_cause & EDMA_ERR_TRANS_IRQ_7)) {
1890 ata_ehi_push_desc(ehi, "fis_cause=%08x", fis_cause);
1891 if (fis_cause & SATA_FIS_IRQ_AN) {
1892 u32 ec = edma_err_cause &
1893 ~(EDMA_ERR_TRANS_IRQ_7 | EDMA_ERR_IRQ_TRANSIENT);
1894 sata_async_notification(ap);
1895 if (!ec)
1896 return; /* Just an AN; no need for the nukes */
1897 ata_ehi_push_desc(ehi, "SDB notify");
1898 }
1899 }
1847 /* 1900 /*
1848 * All generations share these EDMA error cause bits: 1901 * All generations share these EDMA error cause bits:
1849 */ 1902 */
@@ -2162,20 +2215,20 @@ static irqreturn_t mv_interrupt(int irq, void *dev_instance)
2162 struct ata_host *host = dev_instance; 2215 struct ata_host *host = dev_instance;
2163 struct mv_host_priv *hpriv = host->private_data; 2216 struct mv_host_priv *hpriv = host->private_data;
2164 unsigned int handled = 0; 2217 unsigned int handled = 0;
2165 u32 main_irq_cause, main_irq_mask; 2218 u32 main_irq_cause, pending_irqs;
2166 2219
2167 spin_lock(&host->lock); 2220 spin_lock(&host->lock);
2168 main_irq_cause = readl(hpriv->main_irq_cause_addr); 2221 main_irq_cause = readl(hpriv->main_irq_cause_addr);
2169 main_irq_mask = readl(hpriv->main_irq_mask_addr); 2222 pending_irqs = main_irq_cause & hpriv->main_irq_mask;
2170 /* 2223 /*
2171 * Deal with cases where we either have nothing pending, or have read 2224 * Deal with cases where we either have nothing pending, or have read
2172 * a bogus register value which can indicate HW removal or PCI fault. 2225 * a bogus register value which can indicate HW removal or PCI fault.
2173 */ 2226 */
2174 if ((main_irq_cause & main_irq_mask) && (main_irq_cause != 0xffffffffU)) { 2227 if (pending_irqs && main_irq_cause != 0xffffffffU) {
2175 if (unlikely((main_irq_cause & PCI_ERR) && HAS_PCI(host))) 2228 if (unlikely((pending_irqs & PCI_ERR) && HAS_PCI(host)))
2176 handled = mv_pci_error(host, hpriv->base); 2229 handled = mv_pci_error(host, hpriv->base);
2177 else 2230 else
2178 handled = mv_host_intr(host, main_irq_cause); 2231 handled = mv_host_intr(host, pending_irqs);
2179 } 2232 }
2180 spin_unlock(&host->lock); 2233 spin_unlock(&host->lock);
2181 return IRQ_RETVAL(handled); 2234 return IRQ_RETVAL(handled);
@@ -2373,7 +2426,6 @@ static void mv_reset_pci_bus(struct ata_host *host, void __iomem *mmio)
2373 ZERO(MV_PCI_DISC_TIMER); 2426 ZERO(MV_PCI_DISC_TIMER);
2374 ZERO(MV_PCI_MSI_TRIGGER); 2427 ZERO(MV_PCI_MSI_TRIGGER);
2375 writel(0x000100ff, mmio + MV_PCI_XBAR_TMOUT_OFS); 2428 writel(0x000100ff, mmio + MV_PCI_XBAR_TMOUT_OFS);
2376 ZERO(PCI_HC_MAIN_IRQ_MASK_OFS);
2377 ZERO(MV_PCI_SERR_MASK); 2429 ZERO(MV_PCI_SERR_MASK);
2378 ZERO(hpriv->irq_cause_ofs); 2430 ZERO(hpriv->irq_cause_ofs);
2379 ZERO(hpriv->irq_mask_ofs); 2431 ZERO(hpriv->irq_mask_ofs);
@@ -2728,6 +2780,7 @@ static int mv_hardreset(struct ata_link *link, unsigned int *class,
2728 2780
2729 rc = sata_link_hardreset(link, timing, deadline + extra, 2781 rc = sata_link_hardreset(link, timing, deadline + extra,
2730 &online, NULL); 2782 &online, NULL);
2783 rc = online ? -EAGAIN : rc;
2731 if (rc) 2784 if (rc)
2732 return rc; 2785 return rc;
2733 sata_scr_read(link, SCR_STATUS, &sstatus); 2786 sata_scr_read(link, SCR_STATUS, &sstatus);
@@ -2744,32 +2797,18 @@ static int mv_hardreset(struct ata_link *link, unsigned int *class,
2744 2797
2745static void mv_eh_freeze(struct ata_port *ap) 2798static void mv_eh_freeze(struct ata_port *ap)
2746{ 2799{
2747 struct mv_host_priv *hpriv = ap->host->private_data;
2748 unsigned int shift, hardport, port = ap->port_no;
2749 u32 main_irq_mask;
2750
2751 /* FIXME: handle coalescing completion events properly */
2752
2753 mv_stop_edma(ap); 2800 mv_stop_edma(ap);
2754 MV_PORT_TO_SHIFT_AND_HARDPORT(port, shift, hardport); 2801 mv_enable_port_irqs(ap, 0);
2755
2756 /* disable assertion of portN err, done events */
2757 main_irq_mask = readl(hpriv->main_irq_mask_addr);
2758 main_irq_mask &= ~((DONE_IRQ | ERR_IRQ) << shift);
2759 writelfl(main_irq_mask, hpriv->main_irq_mask_addr);
2760} 2802}
2761 2803
2762static void mv_eh_thaw(struct ata_port *ap) 2804static void mv_eh_thaw(struct ata_port *ap)
2763{ 2805{
2764 struct mv_host_priv *hpriv = ap->host->private_data; 2806 struct mv_host_priv *hpriv = ap->host->private_data;
2765 unsigned int shift, hardport, port = ap->port_no; 2807 unsigned int port = ap->port_no;
2808 unsigned int hardport = mv_hardport_from_port(port);
2766 void __iomem *hc_mmio = mv_hc_base_from_port(hpriv->base, port); 2809 void __iomem *hc_mmio = mv_hc_base_from_port(hpriv->base, port);
2767 void __iomem *port_mmio = mv_ap_base(ap); 2810 void __iomem *port_mmio = mv_ap_base(ap);
2768 u32 main_irq_mask, hc_irq_cause; 2811 u32 hc_irq_cause;
2769
2770 /* FIXME: handle coalescing completion events properly */
2771
2772 MV_PORT_TO_SHIFT_AND_HARDPORT(port, shift, hardport);
2773 2812
2774 /* clear EDMA errors on this port */ 2813 /* clear EDMA errors on this port */
2775 writel(0, port_mmio + EDMA_ERR_IRQ_CAUSE_OFS); 2814 writel(0, port_mmio + EDMA_ERR_IRQ_CAUSE_OFS);
@@ -2779,10 +2818,7 @@ static void mv_eh_thaw(struct ata_port *ap)
2779 hc_irq_cause &= ~((DEV_IRQ | DMA_IRQ) << hardport); 2818 hc_irq_cause &= ~((DEV_IRQ | DMA_IRQ) << hardport);
2780 writelfl(hc_irq_cause, hc_mmio + HC_IRQ_CAUSE_OFS); 2819 writelfl(hc_irq_cause, hc_mmio + HC_IRQ_CAUSE_OFS);
2781 2820
2782 /* enable assertion of portN err, done events */ 2821 mv_enable_port_irqs(ap, ERR_IRQ);
2783 main_irq_mask = readl(hpriv->main_irq_mask_addr);
2784 main_irq_mask |= ((DONE_IRQ | ERR_IRQ) << shift);
2785 writelfl(main_irq_mask, hpriv->main_irq_mask_addr);
2786} 2822}
2787 2823
2788/** 2824/**
@@ -3035,7 +3071,7 @@ static int mv_init_host(struct ata_host *host, unsigned int board_idx)
3035 } 3071 }
3036 3072
3037 /* global interrupt mask: 0 == mask everything */ 3073 /* global interrupt mask: 0 == mask everything */
3038 writel(0, hpriv->main_irq_mask_addr); 3074 mv_set_main_irq_mask(host, ~0, 0);
3039 3075
3040 n_hc = mv_get_hc_count(host->ports[0]->flags); 3076 n_hc = mv_get_hc_count(host->ports[0]->flags);
3041 3077
@@ -3083,25 +3119,12 @@ static int mv_init_host(struct ata_host *host, unsigned int board_idx)
3083 3119
3084 /* and unmask interrupt generation for host regs */ 3120 /* and unmask interrupt generation for host regs */
3085 writelfl(hpriv->unmask_all_irqs, mmio + hpriv->irq_mask_ofs); 3121 writelfl(hpriv->unmask_all_irqs, mmio + hpriv->irq_mask_ofs);
3086 if (IS_GEN_I(hpriv)) 3122
3087 writelfl(~HC_MAIN_MASKED_IRQS_5, 3123 /*
3088 hpriv->main_irq_mask_addr); 3124 * enable only global host interrupts for now.
3089 else 3125 * The per-port interrupts get done later as ports are set up.
3090 writelfl(~HC_MAIN_MASKED_IRQS, 3126 */
3091 hpriv->main_irq_mask_addr); 3127 mv_set_main_irq_mask(host, 0, PCI_ERR);
3092
3093 VPRINTK("HC MAIN IRQ cause/mask=0x%08x/0x%08x "
3094 "PCI int cause/mask=0x%08x/0x%08x\n",
3095 readl(hpriv->main_irq_cause_addr),
3096 readl(hpriv->main_irq_mask_addr),
3097 readl(mmio + hpriv->irq_cause_ofs),
3098 readl(mmio + hpriv->irq_mask_ofs));
3099 } else {
3100 writelfl(~HC_MAIN_MASKED_IRQS_SOC,
3101 hpriv->main_irq_mask_addr);
3102 VPRINTK("HC MAIN IRQ cause/mask=0x%08x/0x%08x\n",
3103 readl(hpriv->main_irq_cause_addr),
3104 readl(hpriv->main_irq_mask_addr));
3105 } 3128 }
3106done: 3129done:
3107 return rc; 3130 return rc;
diff --git a/drivers/ata/sata_promise.c b/drivers/ata/sata_promise.c
index 5a10dc5048ad..030665ba76b7 100644
--- a/drivers/ata/sata_promise.c
+++ b/drivers/ata/sata_promise.c
@@ -53,7 +53,15 @@ enum {
53 PDC_MMIO_BAR = 3, 53 PDC_MMIO_BAR = 3,
54 PDC_MAX_PRD = LIBATA_MAX_PRD - 1, /* -1 for ASIC PRD bug workaround */ 54 PDC_MAX_PRD = LIBATA_MAX_PRD - 1, /* -1 for ASIC PRD bug workaround */
55 55
56 /* register offsets */ 56 /* host register offsets (from host->iomap[PDC_MMIO_BAR]) */
57 PDC_INT_SEQMASK = 0x40, /* Mask of asserted SEQ INTs */
58 PDC_FLASH_CTL = 0x44, /* Flash control register */
59 PDC_SATA_PLUG_CSR = 0x6C, /* SATA Plug control/status reg */
60 PDC2_SATA_PLUG_CSR = 0x60, /* SATAII Plug control/status reg */
61 PDC_TBG_MODE = 0x41C, /* TBG mode (not SATAII) */
62 PDC_SLEW_CTL = 0x470, /* slew rate control reg (not SATAII) */
63
64 /* per-port ATA register offsets (from ap->ioaddr.cmd_addr) */
57 PDC_FEATURE = 0x04, /* Feature/Error reg (per port) */ 65 PDC_FEATURE = 0x04, /* Feature/Error reg (per port) */
58 PDC_SECTOR_COUNT = 0x08, /* Sector count reg (per port) */ 66 PDC_SECTOR_COUNT = 0x08, /* Sector count reg (per port) */
59 PDC_SECTOR_NUMBER = 0x0C, /* Sector number reg (per port) */ 67 PDC_SECTOR_NUMBER = 0x0C, /* Sector number reg (per port) */
@@ -63,14 +71,11 @@ enum {
63 PDC_COMMAND = 0x1C, /* Command/status reg (per port) */ 71 PDC_COMMAND = 0x1C, /* Command/status reg (per port) */
64 PDC_ALTSTATUS = 0x38, /* Alternate-status/device-control reg (per port) */ 72 PDC_ALTSTATUS = 0x38, /* Alternate-status/device-control reg (per port) */
65 PDC_PKT_SUBMIT = 0x40, /* Command packet pointer addr */ 73 PDC_PKT_SUBMIT = 0x40, /* Command packet pointer addr */
66 PDC_INT_SEQMASK = 0x40, /* Mask of asserted SEQ INTs */
67 PDC_FLASH_CTL = 0x44, /* Flash control register */
68 PDC_GLOBAL_CTL = 0x48, /* Global control/status (per port) */ 74 PDC_GLOBAL_CTL = 0x48, /* Global control/status (per port) */
69 PDC_CTLSTAT = 0x60, /* IDE control and status (per port) */ 75 PDC_CTLSTAT = 0x60, /* IDE control and status (per port) */
70 PDC_SATA_PLUG_CSR = 0x6C, /* SATA Plug control/status reg */ 76
71 PDC2_SATA_PLUG_CSR = 0x60, /* SATAII Plug control/status reg */ 77 /* per-port SATA register offsets (from ap->ioaddr.scr_addr) */
72 PDC_TBG_MODE = 0x41C, /* TBG mode (not SATAII) */ 78 PDC_PHYMODE4 = 0x14,
73 PDC_SLEW_CTL = 0x470, /* slew rate control reg (not SATAII) */
74 79
75 /* PDC_GLOBAL_CTL bit definitions */ 80 /* PDC_GLOBAL_CTL bit definitions */
76 PDC_PH_ERR = (1 << 8), /* PCI error while loading packet */ 81 PDC_PH_ERR = (1 << 8), /* PCI error while loading packet */
@@ -134,7 +139,7 @@ struct pdc_port_priv {
134 139
135static int pdc_sata_scr_read(struct ata_port *ap, unsigned int sc_reg, u32 *val); 140static int pdc_sata_scr_read(struct ata_port *ap, unsigned int sc_reg, u32 *val);
136static int pdc_sata_scr_write(struct ata_port *ap, unsigned int sc_reg, u32 val); 141static int pdc_sata_scr_write(struct ata_port *ap, unsigned int sc_reg, u32 val);
137static int pdc_ata_init_one (struct pci_dev *pdev, const struct pci_device_id *ent); 142static int pdc_ata_init_one(struct pci_dev *pdev, const struct pci_device_id *ent);
138static int pdc_common_port_start(struct ata_port *ap); 143static int pdc_common_port_start(struct ata_port *ap);
139static int pdc_sata_port_start(struct ata_port *ap); 144static int pdc_sata_port_start(struct ata_port *ap);
140static void pdc_qc_prep(struct ata_queued_cmd *qc); 145static void pdc_qc_prep(struct ata_queued_cmd *qc);
@@ -332,12 +337,12 @@ static int pdc_sata_port_start(struct ata_port *ap)
332 337
333 /* fix up PHYMODE4 align timing */ 338 /* fix up PHYMODE4 align timing */
334 if (ap->flags & PDC_FLAG_GEN_II) { 339 if (ap->flags & PDC_FLAG_GEN_II) {
335 void __iomem *mmio = ap->ioaddr.scr_addr; 340 void __iomem *sata_mmio = ap->ioaddr.scr_addr;
336 unsigned int tmp; 341 unsigned int tmp;
337 342
338 tmp = readl(mmio + 0x014); 343 tmp = readl(sata_mmio + PDC_PHYMODE4);
339 tmp = (tmp & ~3) | 1; /* set bits 1:0 = 0:1 */ 344 tmp = (tmp & ~3) | 1; /* set bits 1:0 = 0:1 */
340 writel(tmp, mmio + 0x014); 345 writel(tmp, sata_mmio + PDC_PHYMODE4);
341 } 346 }
342 347
343 return 0; 348 return 0;
@@ -345,32 +350,32 @@ static int pdc_sata_port_start(struct ata_port *ap)
345 350
346static void pdc_reset_port(struct ata_port *ap) 351static void pdc_reset_port(struct ata_port *ap)
347{ 352{
348 void __iomem *mmio = ap->ioaddr.cmd_addr + PDC_CTLSTAT; 353 void __iomem *ata_ctlstat_mmio = ap->ioaddr.cmd_addr + PDC_CTLSTAT;
349 unsigned int i; 354 unsigned int i;
350 u32 tmp; 355 u32 tmp;
351 356
352 for (i = 11; i > 0; i--) { 357 for (i = 11; i > 0; i--) {
353 tmp = readl(mmio); 358 tmp = readl(ata_ctlstat_mmio);
354 if (tmp & PDC_RESET) 359 if (tmp & PDC_RESET)
355 break; 360 break;
356 361
357 udelay(100); 362 udelay(100);
358 363
359 tmp |= PDC_RESET; 364 tmp |= PDC_RESET;
360 writel(tmp, mmio); 365 writel(tmp, ata_ctlstat_mmio);
361 } 366 }
362 367
363 tmp &= ~PDC_RESET; 368 tmp &= ~PDC_RESET;
364 writel(tmp, mmio); 369 writel(tmp, ata_ctlstat_mmio);
365 readl(mmio); /* flush */ 370 readl(ata_ctlstat_mmio); /* flush */
366} 371}
367 372
368static int pdc_pata_cable_detect(struct ata_port *ap) 373static int pdc_pata_cable_detect(struct ata_port *ap)
369{ 374{
370 u8 tmp; 375 u8 tmp;
371 void __iomem *mmio = ap->ioaddr.cmd_addr + PDC_CTLSTAT + 0x03; 376 void __iomem *ata_mmio = ap->ioaddr.cmd_addr;
372 377
373 tmp = readb(mmio); 378 tmp = readb(ata_mmio + PDC_CTLSTAT + 3);
374 if (tmp & 0x01) 379 if (tmp & 0x01)
375 return ATA_CBL_PATA40; 380 return ATA_CBL_PATA40;
376 return ATA_CBL_PATA80; 381 return ATA_CBL_PATA80;
@@ -557,31 +562,25 @@ static void pdc_qc_prep(struct ata_queued_cmd *qc)
557 switch (qc->tf.protocol) { 562 switch (qc->tf.protocol) {
558 case ATA_PROT_DMA: 563 case ATA_PROT_DMA:
559 pdc_fill_sg(qc); 564 pdc_fill_sg(qc);
560 /* fall through */ 565 /*FALLTHROUGH*/
561
562 case ATA_PROT_NODATA: 566 case ATA_PROT_NODATA:
563 i = pdc_pkt_header(&qc->tf, qc->ap->prd_dma, 567 i = pdc_pkt_header(&qc->tf, qc->ap->prd_dma,
564 qc->dev->devno, pp->pkt); 568 qc->dev->devno, pp->pkt);
565
566 if (qc->tf.flags & ATA_TFLAG_LBA48) 569 if (qc->tf.flags & ATA_TFLAG_LBA48)
567 i = pdc_prep_lba48(&qc->tf, pp->pkt, i); 570 i = pdc_prep_lba48(&qc->tf, pp->pkt, i);
568 else 571 else
569 i = pdc_prep_lba28(&qc->tf, pp->pkt, i); 572 i = pdc_prep_lba28(&qc->tf, pp->pkt, i);
570
571 pdc_pkt_footer(&qc->tf, pp->pkt, i); 573 pdc_pkt_footer(&qc->tf, pp->pkt, i);
572 break; 574 break;
573
574 case ATAPI_PROT_PIO: 575 case ATAPI_PROT_PIO:
575 pdc_fill_sg(qc); 576 pdc_fill_sg(qc);
576 break; 577 break;
577
578 case ATAPI_PROT_DMA: 578 case ATAPI_PROT_DMA:
579 pdc_fill_sg(qc); 579 pdc_fill_sg(qc);
580 /*FALLTHROUGH*/ 580 /*FALLTHROUGH*/
581 case ATAPI_PROT_NODATA: 581 case ATAPI_PROT_NODATA:
582 pdc_atapi_pkt(qc); 582 pdc_atapi_pkt(qc);
583 break; 583 break;
584
585 default: 584 default:
586 break; 585 break;
587 } 586 }
@@ -611,7 +610,7 @@ static unsigned int pdc_sata_ata_port_to_ata_no(const struct ata_port *ap)
611 unsigned int nr_ports = pdc_sata_nr_ports(ap); 610 unsigned int nr_ports = pdc_sata_nr_ports(ap);
612 unsigned int i; 611 unsigned int i;
613 612
614 for(i = 0; i < nr_ports && host->ports[i] != ap; ++i) 613 for (i = 0; i < nr_ports && host->ports[i] != ap; ++i)
615 ; 614 ;
616 BUG_ON(i >= nr_ports); 615 BUG_ON(i >= nr_ports);
617 return pdc_port_no_to_ata_no(i, pdc_is_sataii_tx4(ap->flags)); 616 return pdc_port_no_to_ata_no(i, pdc_is_sataii_tx4(ap->flags));
@@ -624,14 +623,14 @@ static unsigned int pdc_sata_hotplug_offset(const struct ata_port *ap)
624 623
625static void pdc_freeze(struct ata_port *ap) 624static void pdc_freeze(struct ata_port *ap)
626{ 625{
627 void __iomem *mmio = ap->ioaddr.cmd_addr; 626 void __iomem *ata_mmio = ap->ioaddr.cmd_addr;
628 u32 tmp; 627 u32 tmp;
629 628
630 tmp = readl(mmio + PDC_CTLSTAT); 629 tmp = readl(ata_mmio + PDC_CTLSTAT);
631 tmp |= PDC_IRQ_DISABLE; 630 tmp |= PDC_IRQ_DISABLE;
632 tmp &= ~PDC_DMA_ENABLE; 631 tmp &= ~PDC_DMA_ENABLE;
633 writel(tmp, mmio + PDC_CTLSTAT); 632 writel(tmp, ata_mmio + PDC_CTLSTAT);
634 readl(mmio + PDC_CTLSTAT); /* flush */ 633 readl(ata_mmio + PDC_CTLSTAT); /* flush */
635} 634}
636 635
637static void pdc_sata_freeze(struct ata_port *ap) 636static void pdc_sata_freeze(struct ata_port *ap)
@@ -659,17 +658,17 @@ static void pdc_sata_freeze(struct ata_port *ap)
659 658
660static void pdc_thaw(struct ata_port *ap) 659static void pdc_thaw(struct ata_port *ap)
661{ 660{
662 void __iomem *mmio = ap->ioaddr.cmd_addr; 661 void __iomem *ata_mmio = ap->ioaddr.cmd_addr;
663 u32 tmp; 662 u32 tmp;
664 663
665 /* clear IRQ */ 664 /* clear IRQ */
666 readl(mmio + PDC_INT_SEQMASK); 665 readl(ata_mmio + PDC_COMMAND);
667 666
668 /* turn IRQ back on */ 667 /* turn IRQ back on */
669 tmp = readl(mmio + PDC_CTLSTAT); 668 tmp = readl(ata_mmio + PDC_CTLSTAT);
670 tmp &= ~PDC_IRQ_DISABLE; 669 tmp &= ~PDC_IRQ_DISABLE;
671 writel(tmp, mmio + PDC_CTLSTAT); 670 writel(tmp, ata_mmio + PDC_CTLSTAT);
672 readl(mmio + PDC_CTLSTAT); /* flush */ 671 readl(ata_mmio + PDC_CTLSTAT); /* flush */
673} 672}
674 673
675static void pdc_sata_thaw(struct ata_port *ap) 674static void pdc_sata_thaw(struct ata_port *ap)
@@ -743,11 +742,11 @@ static void pdc_error_intr(struct ata_port *ap, struct ata_queued_cmd *qc,
743 ata_port_abort(ap); 742 ata_port_abort(ap);
744} 743}
745 744
746static inline unsigned int pdc_host_intr(struct ata_port *ap, 745static unsigned int pdc_host_intr(struct ata_port *ap,
747 struct ata_queued_cmd *qc) 746 struct ata_queued_cmd *qc)
748{ 747{
749 unsigned int handled = 0; 748 unsigned int handled = 0;
750 void __iomem *port_mmio = ap->ioaddr.cmd_addr; 749 void __iomem *ata_mmio = ap->ioaddr.cmd_addr;
751 u32 port_status, err_mask; 750 u32 port_status, err_mask;
752 751
753 err_mask = PDC_ERR_MASK; 752 err_mask = PDC_ERR_MASK;
@@ -755,7 +754,7 @@ static inline unsigned int pdc_host_intr(struct ata_port *ap,
755 err_mask &= ~PDC1_ERR_MASK; 754 err_mask &= ~PDC1_ERR_MASK;
756 else 755 else
757 err_mask &= ~PDC2_ERR_MASK; 756 err_mask &= ~PDC2_ERR_MASK;
758 port_status = readl(port_mmio + PDC_GLOBAL_CTL); 757 port_status = readl(ata_mmio + PDC_GLOBAL_CTL);
759 if (unlikely(port_status & err_mask)) { 758 if (unlikely(port_status & err_mask)) {
760 pdc_error_intr(ap, qc, port_status, err_mask); 759 pdc_error_intr(ap, qc, port_status, err_mask);
761 return 1; 760 return 1;
@@ -770,7 +769,6 @@ static inline unsigned int pdc_host_intr(struct ata_port *ap,
770 ata_qc_complete(qc); 769 ata_qc_complete(qc);
771 handled = 1; 770 handled = 1;
772 break; 771 break;
773
774 default: 772 default:
775 ap->stats.idle_irq++; 773 ap->stats.idle_irq++;
776 break; 774 break;
@@ -781,10 +779,9 @@ static inline unsigned int pdc_host_intr(struct ata_port *ap,
781 779
782static void pdc_irq_clear(struct ata_port *ap) 780static void pdc_irq_clear(struct ata_port *ap)
783{ 781{
784 struct ata_host *host = ap->host; 782 void __iomem *ata_mmio = ap->ioaddr.cmd_addr;
785 void __iomem *mmio = host->iomap[PDC_MMIO_BAR];
786 783
787 readl(mmio + PDC_INT_SEQMASK); 784 readl(ata_mmio + PDC_COMMAND);
788} 785}
789 786
790static irqreturn_t pdc_interrupt(int irq, void *dev_instance) 787static irqreturn_t pdc_interrupt(int irq, void *dev_instance)
@@ -794,7 +791,7 @@ static irqreturn_t pdc_interrupt(int irq, void *dev_instance)
794 u32 mask = 0; 791 u32 mask = 0;
795 unsigned int i, tmp; 792 unsigned int i, tmp;
796 unsigned int handled = 0; 793 unsigned int handled = 0;
797 void __iomem *mmio_base; 794 void __iomem *host_mmio;
798 unsigned int hotplug_offset, ata_no; 795 unsigned int hotplug_offset, ata_no;
799 u32 hotplug_status; 796 u32 hotplug_status;
800 int is_sataii_tx4; 797 int is_sataii_tx4;
@@ -806,7 +803,7 @@ static irqreturn_t pdc_interrupt(int irq, void *dev_instance)
806 return IRQ_NONE; 803 return IRQ_NONE;
807 } 804 }
808 805
809 mmio_base = host->iomap[PDC_MMIO_BAR]; 806 host_mmio = host->iomap[PDC_MMIO_BAR];
810 807
811 spin_lock(&host->lock); 808 spin_lock(&host->lock);
812 809
@@ -815,26 +812,26 @@ static irqreturn_t pdc_interrupt(int irq, void *dev_instance)
815 hotplug_offset = PDC2_SATA_PLUG_CSR; 812 hotplug_offset = PDC2_SATA_PLUG_CSR;
816 else 813 else
817 hotplug_offset = PDC_SATA_PLUG_CSR; 814 hotplug_offset = PDC_SATA_PLUG_CSR;
818 hotplug_status = readl(mmio_base + hotplug_offset); 815 hotplug_status = readl(host_mmio + hotplug_offset);
819 if (hotplug_status & 0xff) 816 if (hotplug_status & 0xff)
820 writel(hotplug_status | 0xff, mmio_base + hotplug_offset); 817 writel(hotplug_status | 0xff, host_mmio + hotplug_offset);
821 hotplug_status &= 0xff; /* clear uninteresting bits */ 818 hotplug_status &= 0xff; /* clear uninteresting bits */
822 819
823 /* reading should also clear interrupts */ 820 /* reading should also clear interrupts */
824 mask = readl(mmio_base + PDC_INT_SEQMASK); 821 mask = readl(host_mmio + PDC_INT_SEQMASK);
825 822
826 if (mask == 0xffffffff && hotplug_status == 0) { 823 if (mask == 0xffffffff && hotplug_status == 0) {
827 VPRINTK("QUICK EXIT 2\n"); 824 VPRINTK("QUICK EXIT 2\n");
828 goto done_irq; 825 goto done_irq;
829 } 826 }
830 827
831 mask &= 0xffff; /* only 16 tags possible */ 828 mask &= 0xffff; /* only 16 SEQIDs possible */
832 if (mask == 0 && hotplug_status == 0) { 829 if (mask == 0 && hotplug_status == 0) {
833 VPRINTK("QUICK EXIT 3\n"); 830 VPRINTK("QUICK EXIT 3\n");
834 goto done_irq; 831 goto done_irq;
835 } 832 }
836 833
837 writel(mask, mmio_base + PDC_INT_SEQMASK); 834 writel(mask, host_mmio + PDC_INT_SEQMASK);
838 835
839 is_sataii_tx4 = pdc_is_sataii_tx4(host->ports[0]->flags); 836 is_sataii_tx4 = pdc_is_sataii_tx4(host->ports[0]->flags);
840 837
@@ -875,23 +872,24 @@ done_irq:
875 return IRQ_RETVAL(handled); 872 return IRQ_RETVAL(handled);
876} 873}
877 874
878static inline void pdc_packet_start(struct ata_queued_cmd *qc) 875static void pdc_packet_start(struct ata_queued_cmd *qc)
879{ 876{
880 struct ata_port *ap = qc->ap; 877 struct ata_port *ap = qc->ap;
881 struct pdc_port_priv *pp = ap->private_data; 878 struct pdc_port_priv *pp = ap->private_data;
882 void __iomem *mmio = ap->host->iomap[PDC_MMIO_BAR]; 879 void __iomem *host_mmio = ap->host->iomap[PDC_MMIO_BAR];
880 void __iomem *ata_mmio = ap->ioaddr.cmd_addr;
883 unsigned int port_no = ap->port_no; 881 unsigned int port_no = ap->port_no;
884 u8 seq = (u8) (port_no + 1); 882 u8 seq = (u8) (port_no + 1);
885 883
886 VPRINTK("ENTER, ap %p\n", ap); 884 VPRINTK("ENTER, ap %p\n", ap);
887 885
888 writel(0x00000001, mmio + (seq * 4)); 886 writel(0x00000001, host_mmio + (seq * 4));
889 readl(mmio + (seq * 4)); /* flush */ 887 readl(host_mmio + (seq * 4)); /* flush */
890 888
891 pp->pkt[2] = seq; 889 pp->pkt[2] = seq;
892 wmb(); /* flush PRD, pkt writes */ 890 wmb(); /* flush PRD, pkt writes */
893 writel(pp->pkt_dma, ap->ioaddr.cmd_addr + PDC_PKT_SUBMIT); 891 writel(pp->pkt_dma, ata_mmio + PDC_PKT_SUBMIT);
894 readl(ap->ioaddr.cmd_addr + PDC_PKT_SUBMIT); /* flush */ 892 readl(ata_mmio + PDC_PKT_SUBMIT); /* flush */
895} 893}
896 894
897static unsigned int pdc_qc_issue(struct ata_queued_cmd *qc) 895static unsigned int pdc_qc_issue(struct ata_queued_cmd *qc)
@@ -909,11 +907,9 @@ static unsigned int pdc_qc_issue(struct ata_queued_cmd *qc)
909 case ATA_PROT_DMA: 907 case ATA_PROT_DMA:
910 pdc_packet_start(qc); 908 pdc_packet_start(qc);
911 return 0; 909 return 0;
912
913 default: 910 default:
914 break; 911 break;
915 } 912 }
916
917 return ata_sff_qc_issue(qc); 913 return ata_sff_qc_issue(qc);
918} 914}
919 915
@@ -987,7 +983,7 @@ static void pdc_ata_setup_port(struct ata_port *ap,
987 983
988static void pdc_host_init(struct ata_host *host) 984static void pdc_host_init(struct ata_host *host)
989{ 985{
990 void __iomem *mmio = host->iomap[PDC_MMIO_BAR]; 986 void __iomem *host_mmio = host->iomap[PDC_MMIO_BAR];
991 int is_gen2 = host->ports[0]->flags & PDC_FLAG_GEN_II; 987 int is_gen2 = host->ports[0]->flags & PDC_FLAG_GEN_II;
992 int hotplug_offset; 988 int hotplug_offset;
993 u32 tmp; 989 u32 tmp;
@@ -1004,38 +1000,38 @@ static void pdc_host_init(struct ata_host *host)
1004 */ 1000 */
1005 1001
1006 /* enable BMR_BURST, maybe change FIFO_SHD to 8 dwords */ 1002 /* enable BMR_BURST, maybe change FIFO_SHD to 8 dwords */
1007 tmp = readl(mmio + PDC_FLASH_CTL); 1003 tmp = readl(host_mmio + PDC_FLASH_CTL);
1008 tmp |= 0x02000; /* bit 13 (enable bmr burst) */ 1004 tmp |= 0x02000; /* bit 13 (enable bmr burst) */
1009 if (!is_gen2) 1005 if (!is_gen2)
1010 tmp |= 0x10000; /* bit 16 (fifo threshold at 8 dw) */ 1006 tmp |= 0x10000; /* bit 16 (fifo threshold at 8 dw) */
1011 writel(tmp, mmio + PDC_FLASH_CTL); 1007 writel(tmp, host_mmio + PDC_FLASH_CTL);
1012 1008
1013 /* clear plug/unplug flags for all ports */ 1009 /* clear plug/unplug flags for all ports */
1014 tmp = readl(mmio + hotplug_offset); 1010 tmp = readl(host_mmio + hotplug_offset);
1015 writel(tmp | 0xff, mmio + hotplug_offset); 1011 writel(tmp | 0xff, host_mmio + hotplug_offset);
1016 1012
1017 /* unmask plug/unplug ints */ 1013 /* unmask plug/unplug ints */
1018 tmp = readl(mmio + hotplug_offset); 1014 tmp = readl(host_mmio + hotplug_offset);
1019 writel(tmp & ~0xff0000, mmio + hotplug_offset); 1015 writel(tmp & ~0xff0000, host_mmio + hotplug_offset);
1020 1016
1021 /* don't initialise TBG or SLEW on 2nd generation chips */ 1017 /* don't initialise TBG or SLEW on 2nd generation chips */
1022 if (is_gen2) 1018 if (is_gen2)
1023 return; 1019 return;
1024 1020
1025 /* reduce TBG clock to 133 Mhz. */ 1021 /* reduce TBG clock to 133 Mhz. */
1026 tmp = readl(mmio + PDC_TBG_MODE); 1022 tmp = readl(host_mmio + PDC_TBG_MODE);
1027 tmp &= ~0x30000; /* clear bit 17, 16*/ 1023 tmp &= ~0x30000; /* clear bit 17, 16*/
1028 tmp |= 0x10000; /* set bit 17:16 = 0:1 */ 1024 tmp |= 0x10000; /* set bit 17:16 = 0:1 */
1029 writel(tmp, mmio + PDC_TBG_MODE); 1025 writel(tmp, host_mmio + PDC_TBG_MODE);
1030 1026
1031 readl(mmio + PDC_TBG_MODE); /* flush */ 1027 readl(host_mmio + PDC_TBG_MODE); /* flush */
1032 msleep(10); 1028 msleep(10);
1033 1029
1034 /* adjust slew rate control register. */ 1030 /* adjust slew rate control register. */
1035 tmp = readl(mmio + PDC_SLEW_CTL); 1031 tmp = readl(host_mmio + PDC_SLEW_CTL);
1036 tmp &= 0xFFFFF03F; /* clear bit 11 ~ 6 */ 1032 tmp &= 0xFFFFF03F; /* clear bit 11 ~ 6 */
1037 tmp |= 0x00000900; /* set bit 11-9 = 100b , bit 8-6 = 100 */ 1033 tmp |= 0x00000900; /* set bit 11-9 = 100b , bit 8-6 = 100 */
1038 writel(tmp, mmio + PDC_SLEW_CTL); 1034 writel(tmp, host_mmio + PDC_SLEW_CTL);
1039} 1035}
1040 1036
1041static int pdc_ata_init_one(struct pci_dev *pdev, 1037static int pdc_ata_init_one(struct pci_dev *pdev,
@@ -1045,7 +1041,7 @@ static int pdc_ata_init_one(struct pci_dev *pdev,
1045 const struct ata_port_info *pi = &pdc_port_info[ent->driver_data]; 1041 const struct ata_port_info *pi = &pdc_port_info[ent->driver_data];
1046 const struct ata_port_info *ppi[PDC_MAX_PORTS]; 1042 const struct ata_port_info *ppi[PDC_MAX_PORTS];
1047 struct ata_host *host; 1043 struct ata_host *host;
1048 void __iomem *base; 1044 void __iomem *host_mmio;
1049 int n_ports, i, rc; 1045 int n_ports, i, rc;
1050 int is_sataii_tx4; 1046 int is_sataii_tx4;
1051 1047
@@ -1062,7 +1058,7 @@ static int pdc_ata_init_one(struct pci_dev *pdev,
1062 pcim_pin_device(pdev); 1058 pcim_pin_device(pdev);
1063 if (rc) 1059 if (rc)
1064 return rc; 1060 return rc;
1065 base = pcim_iomap_table(pdev)[PDC_MMIO_BAR]; 1061 host_mmio = pcim_iomap_table(pdev)[PDC_MMIO_BAR];
1066 1062
1067 /* determine port configuration and setup host */ 1063 /* determine port configuration and setup host */
1068 n_ports = 2; 1064 n_ports = 2;
@@ -1072,7 +1068,7 @@ static int pdc_ata_init_one(struct pci_dev *pdev,
1072 ppi[i] = pi; 1068 ppi[i] = pi;
1073 1069
1074 if (pi->flags & PDC_FLAG_SATA_PATA) { 1070 if (pi->flags & PDC_FLAG_SATA_PATA) {
1075 u8 tmp = readb(base + PDC_FLASH_CTL+1); 1071 u8 tmp = readb(host_mmio + PDC_FLASH_CTL + 1);
1076 if (!(tmp & 0x80)) 1072 if (!(tmp & 0x80))
1077 ppi[n_ports++] = pi + 1; 1073 ppi[n_ports++] = pi + 1;
1078 } 1074 }
@@ -1088,13 +1084,13 @@ static int pdc_ata_init_one(struct pci_dev *pdev,
1088 for (i = 0; i < host->n_ports; i++) { 1084 for (i = 0; i < host->n_ports; i++) {
1089 struct ata_port *ap = host->ports[i]; 1085 struct ata_port *ap = host->ports[i];
1090 unsigned int ata_no = pdc_port_no_to_ata_no(i, is_sataii_tx4); 1086 unsigned int ata_no = pdc_port_no_to_ata_no(i, is_sataii_tx4);
1091 unsigned int port_offset = 0x200 + ata_no * 0x80; 1087 unsigned int ata_offset = 0x200 + ata_no * 0x80;
1092 unsigned int scr_offset = 0x400 + ata_no * 0x100; 1088 unsigned int scr_offset = 0x400 + ata_no * 0x100;
1093 1089
1094 pdc_ata_setup_port(ap, base + port_offset, base + scr_offset); 1090 pdc_ata_setup_port(ap, host_mmio + ata_offset, host_mmio + scr_offset);
1095 1091
1096 ata_port_pbar_desc(ap, PDC_MMIO_BAR, -1, "mmio"); 1092 ata_port_pbar_desc(ap, PDC_MMIO_BAR, -1, "mmio");
1097 ata_port_pbar_desc(ap, PDC_MMIO_BAR, port_offset, "port"); 1093 ata_port_pbar_desc(ap, PDC_MMIO_BAR, ata_offset, "ata");
1098 } 1094 }
1099 1095
1100 /* initialize adapter */ 1096 /* initialize adapter */
diff --git a/drivers/ata/sata_sil24.c b/drivers/ata/sata_sil24.c
index 27a110110077..8ee6b5b4ede7 100644
--- a/drivers/ata/sata_sil24.c
+++ b/drivers/ata/sata_sil24.c
@@ -899,14 +899,25 @@ static bool sil24_qc_fill_rtf(struct ata_queued_cmd *qc)
899 899
900static void sil24_pmp_attach(struct ata_port *ap) 900static void sil24_pmp_attach(struct ata_port *ap)
901{ 901{
902 u32 *gscr = ap->link.device->gscr;
903
902 sil24_config_pmp(ap, 1); 904 sil24_config_pmp(ap, 1);
903 sil24_init_port(ap); 905 sil24_init_port(ap);
906
907 if (sata_pmp_gscr_vendor(gscr) == 0x11ab &&
908 sata_pmp_gscr_devid(gscr) == 0x4140) {
909 ata_port_printk(ap, KERN_INFO,
910 "disabling NCQ support due to sil24-mv4140 quirk\n");
911 ap->flags &= ~ATA_FLAG_NCQ;
912 }
904} 913}
905 914
906static void sil24_pmp_detach(struct ata_port *ap) 915static void sil24_pmp_detach(struct ata_port *ap)
907{ 916{
908 sil24_init_port(ap); 917 sil24_init_port(ap);
909 sil24_config_pmp(ap, 0); 918 sil24_config_pmp(ap, 0);
919
920 ap->flags |= ATA_FLAG_NCQ;
910} 921}
911 922
912static int sil24_pmp_hardreset(struct ata_link *link, unsigned int *class, 923static int sil24_pmp_hardreset(struct ata_link *link, unsigned int *class,
diff --git a/drivers/char/drm/drm.h b/drivers/char/drm/drm.h
index 6874f31ca8ca..3a05c6d5ebe1 100644
--- a/drivers/char/drm/drm.h
+++ b/drivers/char/drm/drm.h
@@ -471,7 +471,6 @@ struct drm_irq_busid {
471enum drm_vblank_seq_type { 471enum drm_vblank_seq_type {
472 _DRM_VBLANK_ABSOLUTE = 0x0, /**< Wait for specific vblank sequence number */ 472 _DRM_VBLANK_ABSOLUTE = 0x0, /**< Wait for specific vblank sequence number */
473 _DRM_VBLANK_RELATIVE = 0x1, /**< Wait for given number of vblanks */ 473 _DRM_VBLANK_RELATIVE = 0x1, /**< Wait for given number of vblanks */
474 _DRM_VBLANK_FLIP = 0x8000000, /**< Scheduled buffer swap should flip */
475 _DRM_VBLANK_NEXTONMISS = 0x10000000, /**< If missed, wait for next vblank */ 474 _DRM_VBLANK_NEXTONMISS = 0x10000000, /**< If missed, wait for next vblank */
476 _DRM_VBLANK_SECONDARY = 0x20000000, /**< Secondary display controller */ 475 _DRM_VBLANK_SECONDARY = 0x20000000, /**< Secondary display controller */
477 _DRM_VBLANK_SIGNAL = 0x40000000 /**< Send signal instead of blocking */ 476 _DRM_VBLANK_SIGNAL = 0x40000000 /**< Send signal instead of blocking */
@@ -504,21 +503,6 @@ union drm_wait_vblank {
504 struct drm_wait_vblank_reply reply; 503 struct drm_wait_vblank_reply reply;
505}; 504};
506 505
507enum drm_modeset_ctl_cmd {
508 _DRM_PRE_MODESET = 1,
509 _DRM_POST_MODESET = 2,
510};
511
512/**
513 * DRM_IOCTL_MODESET_CTL ioctl argument type
514 *
515 * \sa drmModesetCtl().
516 */
517struct drm_modeset_ctl {
518 unsigned long arg;
519 enum drm_modeset_ctl_cmd cmd;
520};
521
522/** 506/**
523 * DRM_IOCTL_AGP_ENABLE ioctl argument type. 507 * DRM_IOCTL_AGP_ENABLE ioctl argument type.
524 * 508 *
@@ -603,7 +587,6 @@ struct drm_set_version {
603#define DRM_IOCTL_GET_CLIENT DRM_IOWR(0x05, struct drm_client) 587#define DRM_IOCTL_GET_CLIENT DRM_IOWR(0x05, struct drm_client)
604#define DRM_IOCTL_GET_STATS DRM_IOR( 0x06, struct drm_stats) 588#define DRM_IOCTL_GET_STATS DRM_IOR( 0x06, struct drm_stats)
605#define DRM_IOCTL_SET_VERSION DRM_IOWR(0x07, struct drm_set_version) 589#define DRM_IOCTL_SET_VERSION DRM_IOWR(0x07, struct drm_set_version)
606#define DRM_IOCTL_MODESET_CTL DRM_IOW(0x08, struct drm_modeset_ctl)
607 590
608#define DRM_IOCTL_SET_UNIQUE DRM_IOW( 0x10, struct drm_unique) 591#define DRM_IOCTL_SET_UNIQUE DRM_IOW( 0x10, struct drm_unique)
609#define DRM_IOCTL_AUTH_MAGIC DRM_IOW( 0x11, struct drm_auth) 592#define DRM_IOCTL_AUTH_MAGIC DRM_IOW( 0x11, struct drm_auth)
diff --git a/drivers/char/drm/drmP.h b/drivers/char/drm/drmP.h
index 213b3ca3468e..0764b662b339 100644
--- a/drivers/char/drm/drmP.h
+++ b/drivers/char/drm/drmP.h
@@ -100,8 +100,10 @@ struct drm_device;
100#define DRIVER_HAVE_DMA 0x20 100#define DRIVER_HAVE_DMA 0x20
101#define DRIVER_HAVE_IRQ 0x40 101#define DRIVER_HAVE_IRQ 0x40
102#define DRIVER_IRQ_SHARED 0x80 102#define DRIVER_IRQ_SHARED 0x80
103#define DRIVER_IRQ_VBL 0x100
103#define DRIVER_DMA_QUEUE 0x200 104#define DRIVER_DMA_QUEUE 0x200
104#define DRIVER_FB_DMA 0x400 105#define DRIVER_FB_DMA 0x400
106#define DRIVER_IRQ_VBL2 0x800
105 107
106/***********************************************************************/ 108/***********************************************************************/
107/** \name Begin the DRM... */ 109/** \name Begin the DRM... */
@@ -577,52 +579,10 @@ struct drm_driver {
577 int (*context_dtor) (struct drm_device *dev, int context); 579 int (*context_dtor) (struct drm_device *dev, int context);
578 int (*kernel_context_switch) (struct drm_device *dev, int old, 580 int (*kernel_context_switch) (struct drm_device *dev, int old,
579 int new); 581 int new);
580 void (*kernel_context_switch_unlock) (struct drm_device * dev); 582 void (*kernel_context_switch_unlock) (struct drm_device *dev);
581 /** 583 int (*vblank_wait) (struct drm_device *dev, unsigned int *sequence);
582 * get_vblank_counter - get raw hardware vblank counter 584 int (*vblank_wait2) (struct drm_device *dev, unsigned int *sequence);
583 * @dev: DRM device 585 int (*dri_library_name) (struct drm_device *dev, char *buf);
584 * @crtc: counter to fetch
585 *
586 * Driver callback for fetching a raw hardware vblank counter
587 * for @crtc. If a device doesn't have a hardware counter, the
588 * driver can simply return the value of drm_vblank_count and
589 * make the enable_vblank() and disable_vblank() hooks into no-ops,
590 * leaving interrupts enabled at all times.
591 *
592 * Wraparound handling and loss of events due to modesetting is dealt
593 * with in the DRM core code.
594 *
595 * RETURNS
596 * Raw vblank counter value.
597 */
598 u32 (*get_vblank_counter) (struct drm_device *dev, int crtc);
599
600 /**
601 * enable_vblank - enable vblank interrupt events
602 * @dev: DRM device
603 * @crtc: which irq to enable
604 *
605 * Enable vblank interrupts for @crtc. If the device doesn't have
606 * a hardware vblank counter, this routine should be a no-op, since
607 * interrupts will have to stay on to keep the count accurate.
608 *
609 * RETURNS
610 * Zero on success, appropriate errno if the given @crtc's vblank
611 * interrupt cannot be enabled.
612 */
613 int (*enable_vblank) (struct drm_device *dev, int crtc);
614
615 /**
616 * disable_vblank - disable vblank interrupt events
617 * @dev: DRM device
618 * @crtc: which irq to enable
619 *
620 * Disable vblank interrupts for @crtc. If the device doesn't have
621 * a hardware vblank counter, this routine should be a no-op, since
622 * interrupts will have to stay on to keep the count accurate.
623 */
624 void (*disable_vblank) (struct drm_device *dev, int crtc);
625 int (*dri_library_name) (struct drm_device *dev, char * buf);
626 586
627 /** 587 /**
628 * Called by \c drm_device_is_agp. Typically used to determine if a 588 * Called by \c drm_device_is_agp. Typically used to determine if a
@@ -641,7 +601,7 @@ struct drm_driver {
641 601
642 irqreturn_t(*irq_handler) (DRM_IRQ_ARGS); 602 irqreturn_t(*irq_handler) (DRM_IRQ_ARGS);
643 void (*irq_preinstall) (struct drm_device *dev); 603 void (*irq_preinstall) (struct drm_device *dev);
644 int (*irq_postinstall) (struct drm_device *dev); 604 void (*irq_postinstall) (struct drm_device *dev);
645 void (*irq_uninstall) (struct drm_device *dev); 605 void (*irq_uninstall) (struct drm_device *dev);
646 void (*reclaim_buffers) (struct drm_device *dev, 606 void (*reclaim_buffers) (struct drm_device *dev,
647 struct drm_file * file_priv); 607 struct drm_file * file_priv);
@@ -770,21 +730,13 @@ struct drm_device {
770 /** \name VBLANK IRQ support */ 730 /** \name VBLANK IRQ support */
771 /*@{ */ 731 /*@{ */
772 732
773 wait_queue_head_t *vbl_queue; /**< VBLANK wait queue */ 733 wait_queue_head_t vbl_queue; /**< VBLANK wait queue */
774 atomic_t *_vblank_count; /**< number of VBLANK interrupts (driver must alloc the right number of counters) */ 734 atomic_t vbl_received;
735 atomic_t vbl_received2; /**< number of secondary VBLANK interrupts */
775 spinlock_t vbl_lock; 736 spinlock_t vbl_lock;
776 struct list_head *vbl_sigs; /**< signal list to send on VBLANK */ 737 struct list_head vbl_sigs; /**< signal list to send on VBLANK */
777 atomic_t vbl_signal_pending; /* number of signals pending on all crtcs*/ 738 struct list_head vbl_sigs2; /**< signals to send on secondary VBLANK */
778 atomic_t *vblank_refcount; /* number of users of vblank interrupts per crtc */ 739 unsigned int vbl_pending;
779 u32 *last_vblank; /* protected by dev->vbl_lock, used */
780 /* for wraparound handling */
781 u32 *vblank_offset; /* used to track how many vblanks */
782 int *vblank_enabled; /* so we don't call enable more than
783 once per disable */
784 u32 *vblank_premodeset; /* were lost during modeset */
785 struct timer_list vblank_disable_timer;
786
787 unsigned long max_vblank_count; /**< size of vblank counter register */
788 spinlock_t tasklet_lock; /**< For drm_locked_tasklet */ 740 spinlock_t tasklet_lock; /**< For drm_locked_tasklet */
789 void (*locked_tasklet_func)(struct drm_device *dev); 741 void (*locked_tasklet_func)(struct drm_device *dev);
790 742
@@ -804,7 +756,6 @@ struct drm_device {
804#ifdef __alpha__ 756#ifdef __alpha__
805 struct pci_controller *hose; 757 struct pci_controller *hose;
806#endif 758#endif
807 int num_crtcs; /**< Number of CRTCs on this device */
808 struct drm_sg_mem *sg; /**< Scatter gather memory */ 759 struct drm_sg_mem *sg; /**< Scatter gather memory */
809 void *dev_private; /**< device private data */ 760 void *dev_private; /**< device private data */
810 struct drm_sigdata sigdata; /**< For block_all_signals */ 761 struct drm_sigdata sigdata; /**< For block_all_signals */
@@ -1039,19 +990,11 @@ extern void drm_driver_irq_preinstall(struct drm_device *dev);
1039extern void drm_driver_irq_postinstall(struct drm_device *dev); 990extern void drm_driver_irq_postinstall(struct drm_device *dev);
1040extern void drm_driver_irq_uninstall(struct drm_device *dev); 991extern void drm_driver_irq_uninstall(struct drm_device *dev);
1041 992
1042extern int drm_vblank_init(struct drm_device *dev, int num_crtcs); 993extern int drm_wait_vblank(struct drm_device *dev, void *data,
1043extern int drm_wait_vblank(struct drm_device *dev, void *data, struct drm_file *filp);
1044extern int drm_vblank_wait(struct drm_device * dev, unsigned int *vbl_seq);
1045extern void drm_locked_tasklet(struct drm_device *dev, void(*func)(struct drm_device*));
1046extern u32 drm_vblank_count(struct drm_device *dev, int crtc);
1047extern void drm_update_vblank_count(struct drm_device *dev, int crtc);
1048extern void drm_handle_vblank(struct drm_device *dev, int crtc);
1049extern int drm_vblank_get(struct drm_device *dev, int crtc);
1050extern void drm_vblank_put(struct drm_device *dev, int crtc);
1051
1052 /* Modesetting support */
1053extern int drm_modeset_ctl(struct drm_device *dev, void *data,
1054 struct drm_file *file_priv); 994 struct drm_file *file_priv);
995extern int drm_vblank_wait(struct drm_device *dev, unsigned int *vbl_seq);
996extern void drm_vbl_send_signals(struct drm_device *dev);
997extern void drm_locked_tasklet(struct drm_device *dev, void(*func)(struct drm_device*));
1055 998
1056 /* AGP/GART support (drm_agpsupport.h) */ 999 /* AGP/GART support (drm_agpsupport.h) */
1057extern struct drm_agp_head *drm_agp_init(struct drm_device *dev); 1000extern struct drm_agp_head *drm_agp_init(struct drm_device *dev);
diff --git a/drivers/char/drm/drm_fops.c b/drivers/char/drm/drm_fops.c
index 68f0da801ed8..d2e6da85f58a 100644
--- a/drivers/char/drm/drm_fops.c
+++ b/drivers/char/drm/drm_fops.c
@@ -323,7 +323,6 @@ int drm_release(struct inode *inode, struct file *filp)
323 struct drm_file *file_priv = filp->private_data; 323 struct drm_file *file_priv = filp->private_data;
324 struct drm_device *dev = file_priv->minor->dev; 324 struct drm_device *dev = file_priv->minor->dev;
325 int retcode = 0; 325 int retcode = 0;
326 unsigned long irqflags;
327 326
328 lock_kernel(); 327 lock_kernel();
329 328
@@ -355,11 +354,9 @@ int drm_release(struct inode *inode, struct file *filp)
355 */ 354 */
356 355
357 do{ 356 do{
358 spin_lock_irqsave(&dev->lock.spinlock, 357 spin_lock_bh(&dev->lock.spinlock);
359 irqflags);
360 locked = dev->lock.idle_has_lock; 358 locked = dev->lock.idle_has_lock;
361 spin_unlock_irqrestore(&dev->lock.spinlock, 359 spin_unlock_bh(&dev->lock.spinlock);
362 irqflags);
363 if (locked) 360 if (locked)
364 break; 361 break;
365 schedule(); 362 schedule();
diff --git a/drivers/char/drm/drm_irq.c b/drivers/char/drm/drm_irq.c
index 286f9d61e7d5..089c015c01d1 100644
--- a/drivers/char/drm/drm_irq.c
+++ b/drivers/char/drm/drm_irq.c
@@ -71,117 +71,6 @@ int drm_irq_by_busid(struct drm_device *dev, void *data,
71 return 0; 71 return 0;
72} 72}
73 73
74static void vblank_disable_fn(unsigned long arg)
75{
76 struct drm_device *dev = (struct drm_device *)arg;
77 unsigned long irqflags;
78 int i;
79
80 for (i = 0; i < dev->num_crtcs; i++) {
81 spin_lock_irqsave(&dev->vbl_lock, irqflags);
82 if (atomic_read(&dev->vblank_refcount[i]) == 0 &&
83 dev->vblank_enabled[i]) {
84 dev->driver->disable_vblank(dev, i);
85 dev->vblank_enabled[i] = 0;
86 }
87 spin_unlock_irqrestore(&dev->vbl_lock, irqflags);
88 }
89}
90
91static void drm_vblank_cleanup(struct drm_device *dev)
92{
93 /* Bail if the driver didn't call drm_vblank_init() */
94 if (dev->num_crtcs == 0)
95 return;
96
97 del_timer(&dev->vblank_disable_timer);
98
99 vblank_disable_fn((unsigned long)dev);
100
101 drm_free(dev->vbl_queue, sizeof(*dev->vbl_queue) * dev->num_crtcs,
102 DRM_MEM_DRIVER);
103 drm_free(dev->vbl_sigs, sizeof(*dev->vbl_sigs) * dev->num_crtcs,
104 DRM_MEM_DRIVER);
105 drm_free(dev->_vblank_count, sizeof(*dev->_vblank_count) *
106 dev->num_crtcs, DRM_MEM_DRIVER);
107 drm_free(dev->vblank_refcount, sizeof(*dev->vblank_refcount) *
108 dev->num_crtcs, DRM_MEM_DRIVER);
109 drm_free(dev->vblank_enabled, sizeof(*dev->vblank_enabled) *
110 dev->num_crtcs, DRM_MEM_DRIVER);
111 drm_free(dev->last_vblank, sizeof(*dev->last_vblank) * dev->num_crtcs,
112 DRM_MEM_DRIVER);
113 drm_free(dev->vblank_premodeset, sizeof(*dev->vblank_premodeset) *
114 dev->num_crtcs, DRM_MEM_DRIVER);
115 drm_free(dev->vblank_offset, sizeof(*dev->vblank_offset) * dev->num_crtcs,
116 DRM_MEM_DRIVER);
117
118 dev->num_crtcs = 0;
119}
120
121int drm_vblank_init(struct drm_device *dev, int num_crtcs)
122{
123 int i, ret = -ENOMEM;
124
125 setup_timer(&dev->vblank_disable_timer, vblank_disable_fn,
126 (unsigned long)dev);
127 spin_lock_init(&dev->vbl_lock);
128 atomic_set(&dev->vbl_signal_pending, 0);
129 dev->num_crtcs = num_crtcs;
130
131 dev->vbl_queue = drm_alloc(sizeof(wait_queue_head_t) * num_crtcs,
132 DRM_MEM_DRIVER);
133 if (!dev->vbl_queue)
134 goto err;
135
136 dev->vbl_sigs = drm_alloc(sizeof(struct list_head) * num_crtcs,
137 DRM_MEM_DRIVER);
138 if (!dev->vbl_sigs)
139 goto err;
140
141 dev->_vblank_count = drm_alloc(sizeof(atomic_t) * num_crtcs,
142 DRM_MEM_DRIVER);
143 if (!dev->_vblank_count)
144 goto err;
145
146 dev->vblank_refcount = drm_alloc(sizeof(atomic_t) * num_crtcs,
147 DRM_MEM_DRIVER);
148 if (!dev->vblank_refcount)
149 goto err;
150
151 dev->vblank_enabled = drm_calloc(num_crtcs, sizeof(int),
152 DRM_MEM_DRIVER);
153 if (!dev->vblank_enabled)
154 goto err;
155
156 dev->last_vblank = drm_calloc(num_crtcs, sizeof(u32), DRM_MEM_DRIVER);
157 if (!dev->last_vblank)
158 goto err;
159
160 dev->vblank_premodeset = drm_calloc(num_crtcs, sizeof(u32),
161 DRM_MEM_DRIVER);
162 if (!dev->vblank_premodeset)
163 goto err;
164
165 dev->vblank_offset = drm_calloc(num_crtcs, sizeof(u32), DRM_MEM_DRIVER);
166 if (!dev->vblank_offset)
167 goto err;
168
169 /* Zero per-crtc vblank stuff */
170 for (i = 0; i < num_crtcs; i++) {
171 init_waitqueue_head(&dev->vbl_queue[i]);
172 INIT_LIST_HEAD(&dev->vbl_sigs[i]);
173 atomic_set(&dev->_vblank_count[i], 0);
174 atomic_set(&dev->vblank_refcount[i], 0);
175 }
176
177 return 0;
178
179err:
180 drm_vblank_cleanup(dev);
181 return ret;
182}
183EXPORT_SYMBOL(drm_vblank_init);
184
185/** 74/**
186 * Install IRQ handler. 75 * Install IRQ handler.
187 * 76 *
@@ -220,6 +109,17 @@ static int drm_irq_install(struct drm_device * dev)
220 109
221 DRM_DEBUG("irq=%d\n", dev->irq); 110 DRM_DEBUG("irq=%d\n", dev->irq);
222 111
112 if (drm_core_check_feature(dev, DRIVER_IRQ_VBL)) {
113 init_waitqueue_head(&dev->vbl_queue);
114
115 spin_lock_init(&dev->vbl_lock);
116
117 INIT_LIST_HEAD(&dev->vbl_sigs);
118 INIT_LIST_HEAD(&dev->vbl_sigs2);
119
120 dev->vbl_pending = 0;
121 }
122
223 /* Before installing handler */ 123 /* Before installing handler */
224 dev->driver->irq_preinstall(dev); 124 dev->driver->irq_preinstall(dev);
225 125
@@ -237,14 +137,9 @@ static int drm_irq_install(struct drm_device * dev)
237 } 137 }
238 138
239 /* After installing handler */ 139 /* After installing handler */
240 ret = dev->driver->irq_postinstall(dev); 140 dev->driver->irq_postinstall(dev);
241 if (ret < 0) {
242 mutex_lock(&dev->struct_mutex);
243 dev->irq_enabled = 0;
244 mutex_unlock(&dev->struct_mutex);
245 }
246 141
247 return ret; 142 return 0;
248} 143}
249 144
250/** 145/**
@@ -275,8 +170,6 @@ int drm_irq_uninstall(struct drm_device * dev)
275 170
276 free_irq(dev->irq, dev); 171 free_irq(dev->irq, dev);
277 172
278 drm_vblank_cleanup(dev);
279
280 dev->locked_tasklet_func = NULL; 173 dev->locked_tasklet_func = NULL;
281 174
282 return 0; 175 return 0;
@@ -321,148 +214,6 @@ int drm_control(struct drm_device *dev, void *data,
321} 214}
322 215
323/** 216/**
324 * drm_vblank_count - retrieve "cooked" vblank counter value
325 * @dev: DRM device
326 * @crtc: which counter to retrieve
327 *
328 * Fetches the "cooked" vblank count value that represents the number of
329 * vblank events since the system was booted, including lost events due to
330 * modesetting activity.
331 */
332u32 drm_vblank_count(struct drm_device *dev, int crtc)
333{
334 return atomic_read(&dev->_vblank_count[crtc]) +
335 dev->vblank_offset[crtc];
336}
337EXPORT_SYMBOL(drm_vblank_count);
338
339/**
340 * drm_update_vblank_count - update the master vblank counter
341 * @dev: DRM device
342 * @crtc: counter to update
343 *
344 * Call back into the driver to update the appropriate vblank counter
345 * (specified by @crtc). Deal with wraparound, if it occurred, and
346 * update the last read value so we can deal with wraparound on the next
347 * call if necessary.
348 */
349void drm_update_vblank_count(struct drm_device *dev, int crtc)
350{
351 unsigned long irqflags;
352 u32 cur_vblank, diff;
353
354 /*
355 * Interrupts were disabled prior to this call, so deal with counter
356 * wrap if needed.
357 * NOTE! It's possible we lost a full dev->max_vblank_count events
358 * here if the register is small or we had vblank interrupts off for
359 * a long time.
360 */
361 cur_vblank = dev->driver->get_vblank_counter(dev, crtc);
362 spin_lock_irqsave(&dev->vbl_lock, irqflags);
363 if (cur_vblank < dev->last_vblank[crtc]) {
364 diff = dev->max_vblank_count -
365 dev->last_vblank[crtc];
366 diff += cur_vblank;
367 } else {
368 diff = cur_vblank - dev->last_vblank[crtc];
369 }
370 dev->last_vblank[crtc] = cur_vblank;
371 spin_unlock_irqrestore(&dev->vbl_lock, irqflags);
372
373 atomic_add(diff, &dev->_vblank_count[crtc]);
374}
375EXPORT_SYMBOL(drm_update_vblank_count);
376
377/**
378 * drm_vblank_get - get a reference count on vblank events
379 * @dev: DRM device
380 * @crtc: which CRTC to own
381 *
382 * Acquire a reference count on vblank events to avoid having them disabled
383 * while in use. Note callers will probably want to update the master counter
384 * using drm_update_vblank_count() above before calling this routine so that
385 * wakeups occur on the right vblank event.
386 *
387 * RETURNS
388 * Zero on success, nonzero on failure.
389 */
390int drm_vblank_get(struct drm_device *dev, int crtc)
391{
392 unsigned long irqflags;
393 int ret = 0;
394
395 spin_lock_irqsave(&dev->vbl_lock, irqflags);
396 /* Going from 0->1 means we have to enable interrupts again */
397 if (atomic_add_return(1, &dev->vblank_refcount[crtc]) == 1 &&
398 !dev->vblank_enabled[crtc]) {
399 ret = dev->driver->enable_vblank(dev, crtc);
400 if (ret)
401 atomic_dec(&dev->vblank_refcount[crtc]);
402 else
403 dev->vblank_enabled[crtc] = 1;
404 }
405 spin_unlock_irqrestore(&dev->vbl_lock, irqflags);
406
407 return ret;
408}
409EXPORT_SYMBOL(drm_vblank_get);
410
411/**
412 * drm_vblank_put - give up ownership of vblank events
413 * @dev: DRM device
414 * @crtc: which counter to give up
415 *
416 * Release ownership of a given vblank counter, turning off interrupts
417 * if possible.
418 */
419void drm_vblank_put(struct drm_device *dev, int crtc)
420{
421 /* Last user schedules interrupt disable */
422 if (atomic_dec_and_test(&dev->vblank_refcount[crtc]))
423 mod_timer(&dev->vblank_disable_timer, jiffies + 5*DRM_HZ);
424}
425EXPORT_SYMBOL(drm_vblank_put);
426
427/**
428 * drm_modeset_ctl - handle vblank event counter changes across mode switch
429 * @DRM_IOCTL_ARGS: standard ioctl arguments
430 *
431 * Applications should call the %_DRM_PRE_MODESET and %_DRM_POST_MODESET
432 * ioctls around modesetting so that any lost vblank events are accounted for.
433 */
434int drm_modeset_ctl(struct drm_device *dev, void *data,
435 struct drm_file *file_priv)
436{
437 struct drm_modeset_ctl *modeset = data;
438 int crtc, ret = 0;
439 u32 new;
440
441 crtc = modeset->arg;
442 if (crtc >= dev->num_crtcs) {
443 ret = -EINVAL;
444 goto out;
445 }
446
447 switch (modeset->cmd) {
448 case _DRM_PRE_MODESET:
449 dev->vblank_premodeset[crtc] =
450 dev->driver->get_vblank_counter(dev, crtc);
451 break;
452 case _DRM_POST_MODESET:
453 new = dev->driver->get_vblank_counter(dev, crtc);
454 dev->vblank_offset[crtc] = dev->vblank_premodeset[crtc] - new;
455 break;
456 default:
457 ret = -EINVAL;
458 break;
459 }
460
461out:
462 return ret;
463}
464
465/**
466 * Wait for VBLANK. 217 * Wait for VBLANK.
467 * 218 *
468 * \param inode device inode. 219 * \param inode device inode.
@@ -481,13 +232,12 @@ out:
481 * 232 *
482 * If a signal is not requested, then calls vblank_wait(). 233 * If a signal is not requested, then calls vblank_wait().
483 */ 234 */
484int drm_wait_vblank(struct drm_device *dev, void *data, 235int drm_wait_vblank(struct drm_device *dev, void *data, struct drm_file *file_priv)
485 struct drm_file *file_priv)
486{ 236{
487 union drm_wait_vblank *vblwait = data; 237 union drm_wait_vblank *vblwait = data;
488 struct timeval now; 238 struct timeval now;
489 int ret = 0; 239 int ret = 0;
490 unsigned int flags, seq, crtc; 240 unsigned int flags, seq;
491 241
492 if ((!dev->irq) || (!dev->irq_enabled)) 242 if ((!dev->irq) || (!dev->irq_enabled))
493 return -EINVAL; 243 return -EINVAL;
@@ -501,13 +251,13 @@ int drm_wait_vblank(struct drm_device *dev, void *data,
501 } 251 }
502 252
503 flags = vblwait->request.type & _DRM_VBLANK_FLAGS_MASK; 253 flags = vblwait->request.type & _DRM_VBLANK_FLAGS_MASK;
504 crtc = flags & _DRM_VBLANK_SECONDARY ? 1 : 0;
505 254
506 if (crtc >= dev->num_crtcs) 255 if (!drm_core_check_feature(dev, (flags & _DRM_VBLANK_SECONDARY) ?
256 DRIVER_IRQ_VBL2 : DRIVER_IRQ_VBL))
507 return -EINVAL; 257 return -EINVAL;
508 258
509 drm_update_vblank_count(dev, crtc); 259 seq = atomic_read((flags & _DRM_VBLANK_SECONDARY) ? &dev->vbl_received2
510 seq = drm_vblank_count(dev, crtc); 260 : &dev->vbl_received);
511 261
512 switch (vblwait->request.type & _DRM_VBLANK_TYPES_MASK) { 262 switch (vblwait->request.type & _DRM_VBLANK_TYPES_MASK) {
513 case _DRM_VBLANK_RELATIVE: 263 case _DRM_VBLANK_RELATIVE:
@@ -526,7 +276,8 @@ int drm_wait_vblank(struct drm_device *dev, void *data,
526 276
527 if (flags & _DRM_VBLANK_SIGNAL) { 277 if (flags & _DRM_VBLANK_SIGNAL) {
528 unsigned long irqflags; 278 unsigned long irqflags;
529 struct list_head *vbl_sigs = &dev->vbl_sigs[crtc]; 279 struct list_head *vbl_sigs = (flags & _DRM_VBLANK_SECONDARY)
280 ? &dev->vbl_sigs2 : &dev->vbl_sigs;
530 struct drm_vbl_sig *vbl_sig; 281 struct drm_vbl_sig *vbl_sig;
531 282
532 spin_lock_irqsave(&dev->vbl_lock, irqflags); 283 spin_lock_irqsave(&dev->vbl_lock, irqflags);
@@ -547,26 +298,22 @@ int drm_wait_vblank(struct drm_device *dev, void *data,
547 } 298 }
548 } 299 }
549 300
550 if (atomic_read(&dev->vbl_signal_pending) >= 100) { 301 if (dev->vbl_pending >= 100) {
551 spin_unlock_irqrestore(&dev->vbl_lock, irqflags); 302 spin_unlock_irqrestore(&dev->vbl_lock, irqflags);
552 return -EBUSY; 303 return -EBUSY;
553 } 304 }
554 305
306 dev->vbl_pending++;
307
555 spin_unlock_irqrestore(&dev->vbl_lock, irqflags); 308 spin_unlock_irqrestore(&dev->vbl_lock, irqflags);
556 309
557 vbl_sig = drm_calloc(1, sizeof(struct drm_vbl_sig), 310 if (!
558 DRM_MEM_DRIVER); 311 (vbl_sig =
559 if (!vbl_sig) 312 drm_alloc(sizeof(struct drm_vbl_sig), DRM_MEM_DRIVER))) {
560 return -ENOMEM; 313 return -ENOMEM;
561
562 ret = drm_vblank_get(dev, crtc);
563 if (ret) {
564 drm_free(vbl_sig, sizeof(struct drm_vbl_sig),
565 DRM_MEM_DRIVER);
566 return ret;
567 } 314 }
568 315
569 atomic_inc(&dev->vbl_signal_pending); 316 memset((void *)vbl_sig, 0, sizeof(*vbl_sig));
570 317
571 vbl_sig->sequence = vblwait->request.sequence; 318 vbl_sig->sequence = vblwait->request.sequence;
572 vbl_sig->info.si_signo = vblwait->request.signal; 319 vbl_sig->info.si_signo = vblwait->request.signal;
@@ -580,20 +327,17 @@ int drm_wait_vblank(struct drm_device *dev, void *data,
580 327
581 vblwait->reply.sequence = seq; 328 vblwait->reply.sequence = seq;
582 } else { 329 } else {
583 unsigned long cur_vblank; 330 if (flags & _DRM_VBLANK_SECONDARY) {
584 331 if (dev->driver->vblank_wait2)
585 ret = drm_vblank_get(dev, crtc); 332 ret = dev->driver->vblank_wait2(dev, &vblwait->request.sequence);
586 if (ret) 333 } else if (dev->driver->vblank_wait)
587 return ret; 334 ret =
588 DRM_WAIT_ON(ret, dev->vbl_queue[crtc], 3 * DRM_HZ, 335 dev->driver->vblank_wait(dev,
589 (((cur_vblank = drm_vblank_count(dev, crtc)) 336 &vblwait->request.sequence);
590 - vblwait->request.sequence) <= (1 << 23)));
591 drm_vblank_put(dev, crtc);
592 do_gettimeofday(&now);
593 337
338 do_gettimeofday(&now);
594 vblwait->reply.tval_sec = now.tv_sec; 339 vblwait->reply.tval_sec = now.tv_sec;
595 vblwait->reply.tval_usec = now.tv_usec; 340 vblwait->reply.tval_usec = now.tv_usec;
596 vblwait->reply.sequence = cur_vblank;
597 } 341 }
598 342
599 done: 343 done:
@@ -604,57 +348,44 @@ int drm_wait_vblank(struct drm_device *dev, void *data,
604 * Send the VBLANK signals. 348 * Send the VBLANK signals.
605 * 349 *
606 * \param dev DRM device. 350 * \param dev DRM device.
607 * \param crtc CRTC where the vblank event occurred
608 * 351 *
609 * Sends a signal for each task in drm_device::vbl_sigs and empties the list. 352 * Sends a signal for each task in drm_device::vbl_sigs and empties the list.
610 * 353 *
611 * If a signal is not requested, then calls vblank_wait(). 354 * If a signal is not requested, then calls vblank_wait().
612 */ 355 */
613static void drm_vbl_send_signals(struct drm_device * dev, int crtc) 356void drm_vbl_send_signals(struct drm_device * dev)
614{ 357{
615 struct drm_vbl_sig *vbl_sig, *tmp;
616 struct list_head *vbl_sigs;
617 unsigned int vbl_seq;
618 unsigned long flags; 358 unsigned long flags;
359 int i;
619 360
620 spin_lock_irqsave(&dev->vbl_lock, flags); 361 spin_lock_irqsave(&dev->vbl_lock, flags);
621 362
622 vbl_sigs = &dev->vbl_sigs[crtc]; 363 for (i = 0; i < 2; i++) {
623 vbl_seq = drm_vblank_count(dev, crtc); 364 struct drm_vbl_sig *vbl_sig, *tmp;
365 struct list_head *vbl_sigs = i ? &dev->vbl_sigs2 : &dev->vbl_sigs;
366 unsigned int vbl_seq = atomic_read(i ? &dev->vbl_received2 :
367 &dev->vbl_received);
624 368
625 list_for_each_entry_safe(vbl_sig, tmp, vbl_sigs, head) { 369 list_for_each_entry_safe(vbl_sig, tmp, vbl_sigs, head) {
626 if ((vbl_seq - vbl_sig->sequence) <= (1 << 23)) { 370 if ((vbl_seq - vbl_sig->sequence) <= (1 << 23)) {
627 vbl_sig->info.si_code = vbl_seq; 371 vbl_sig->info.si_code = vbl_seq;
628 send_sig_info(vbl_sig->info.si_signo, 372 send_sig_info(vbl_sig->info.si_signo,
629 &vbl_sig->info, vbl_sig->task); 373 &vbl_sig->info, vbl_sig->task);
630 374
631 list_del(&vbl_sig->head); 375 list_del(&vbl_sig->head);
632 376
633 drm_free(vbl_sig, sizeof(*vbl_sig), 377 drm_free(vbl_sig, sizeof(*vbl_sig),
634 DRM_MEM_DRIVER); 378 DRM_MEM_DRIVER);
635 atomic_dec(&dev->vbl_signal_pending); 379
636 drm_vblank_put(dev, crtc); 380 dev->vbl_pending--;
637 } 381 }
382 }
638 } 383 }
639 384
640 spin_unlock_irqrestore(&dev->vbl_lock, flags); 385 spin_unlock_irqrestore(&dev->vbl_lock, flags);
641} 386}
642 387
643/** 388EXPORT_SYMBOL(drm_vbl_send_signals);
644 * drm_handle_vblank - handle a vblank event
645 * @dev: DRM device
646 * @crtc: where this event occurred
647 *
648 * Drivers should call this routine in their vblank interrupt handlers to
649 * update the vblank counter and send any signals that may be pending.
650 */
651void drm_handle_vblank(struct drm_device *dev, int crtc)
652{
653 drm_update_vblank_count(dev, crtc);
654 DRM_WAKEUP(&dev->vbl_queue[crtc]);
655 drm_vbl_send_signals(dev, crtc);
656}
657EXPORT_SYMBOL(drm_handle_vblank);
658 389
659/** 390/**
660 * Tasklet wrapper function. 391 * Tasklet wrapper function.
diff --git a/drivers/char/drm/drm_lock.c b/drivers/char/drm/drm_lock.c
index 12dcdd1832f0..0998723cde79 100644
--- a/drivers/char/drm/drm_lock.c
+++ b/drivers/char/drm/drm_lock.c
@@ -53,7 +53,6 @@ int drm_lock(struct drm_device *dev, void *data, struct drm_file *file_priv)
53 DECLARE_WAITQUEUE(entry, current); 53 DECLARE_WAITQUEUE(entry, current);
54 struct drm_lock *lock = data; 54 struct drm_lock *lock = data;
55 int ret = 0; 55 int ret = 0;
56 unsigned long irqflags;
57 56
58 ++file_priv->lock_count; 57 ++file_priv->lock_count;
59 58
@@ -72,9 +71,9 @@ int drm_lock(struct drm_device *dev, void *data, struct drm_file *file_priv)
72 return -EINVAL; 71 return -EINVAL;
73 72
74 add_wait_queue(&dev->lock.lock_queue, &entry); 73 add_wait_queue(&dev->lock.lock_queue, &entry);
75 spin_lock_irqsave(&dev->lock.spinlock, irqflags); 74 spin_lock_bh(&dev->lock.spinlock);
76 dev->lock.user_waiters++; 75 dev->lock.user_waiters++;
77 spin_unlock_irqrestore(&dev->lock.spinlock, irqflags); 76 spin_unlock_bh(&dev->lock.spinlock);
78 for (;;) { 77 for (;;) {
79 __set_current_state(TASK_INTERRUPTIBLE); 78 __set_current_state(TASK_INTERRUPTIBLE);
80 if (!dev->lock.hw_lock) { 79 if (!dev->lock.hw_lock) {
@@ -96,9 +95,9 @@ int drm_lock(struct drm_device *dev, void *data, struct drm_file *file_priv)
96 break; 95 break;
97 } 96 }
98 } 97 }
99 spin_lock_irqsave(&dev->lock.spinlock, irqflags); 98 spin_lock_bh(&dev->lock.spinlock);
100 dev->lock.user_waiters--; 99 dev->lock.user_waiters--;
101 spin_unlock_irqrestore(&dev->lock.spinlock, irqflags); 100 spin_unlock_bh(&dev->lock.spinlock);
102 __set_current_state(TASK_RUNNING); 101 __set_current_state(TASK_RUNNING);
103 remove_wait_queue(&dev->lock.lock_queue, &entry); 102 remove_wait_queue(&dev->lock.lock_queue, &entry);
104 103
@@ -199,9 +198,8 @@ int drm_lock_take(struct drm_lock_data *lock_data,
199{ 198{
200 unsigned int old, new, prev; 199 unsigned int old, new, prev;
201 volatile unsigned int *lock = &lock_data->hw_lock->lock; 200 volatile unsigned int *lock = &lock_data->hw_lock->lock;
202 unsigned long irqflags;
203 201
204 spin_lock_irqsave(&lock_data->spinlock, irqflags); 202 spin_lock_bh(&lock_data->spinlock);
205 do { 203 do {
206 old = *lock; 204 old = *lock;
207 if (old & _DRM_LOCK_HELD) 205 if (old & _DRM_LOCK_HELD)
@@ -213,7 +211,7 @@ int drm_lock_take(struct drm_lock_data *lock_data,
213 } 211 }
214 prev = cmpxchg(lock, old, new); 212 prev = cmpxchg(lock, old, new);
215 } while (prev != old); 213 } while (prev != old);
216 spin_unlock_irqrestore(&lock_data->spinlock, irqflags); 214 spin_unlock_bh(&lock_data->spinlock);
217 215
218 if (_DRM_LOCKING_CONTEXT(old) == context) { 216 if (_DRM_LOCKING_CONTEXT(old) == context) {
219 if (old & _DRM_LOCK_HELD) { 217 if (old & _DRM_LOCK_HELD) {
@@ -274,16 +272,15 @@ int drm_lock_free(struct drm_lock_data *lock_data, unsigned int context)
274{ 272{
275 unsigned int old, new, prev; 273 unsigned int old, new, prev;
276 volatile unsigned int *lock = &lock_data->hw_lock->lock; 274 volatile unsigned int *lock = &lock_data->hw_lock->lock;
277 unsigned long irqflags;
278 275
279 spin_lock_irqsave(&lock_data->spinlock, irqflags); 276 spin_lock_bh(&lock_data->spinlock);
280 if (lock_data->kernel_waiters != 0) { 277 if (lock_data->kernel_waiters != 0) {
281 drm_lock_transfer(lock_data, 0); 278 drm_lock_transfer(lock_data, 0);
282 lock_data->idle_has_lock = 1; 279 lock_data->idle_has_lock = 1;
283 spin_unlock_irqrestore(&lock_data->spinlock, irqflags); 280 spin_unlock_bh(&lock_data->spinlock);
284 return 1; 281 return 1;
285 } 282 }
286 spin_unlock_irqrestore(&lock_data->spinlock, irqflags); 283 spin_unlock_bh(&lock_data->spinlock);
287 284
288 do { 285 do {
289 old = *lock; 286 old = *lock;
@@ -347,20 +344,19 @@ static int drm_notifier(void *priv)
347void drm_idlelock_take(struct drm_lock_data *lock_data) 344void drm_idlelock_take(struct drm_lock_data *lock_data)
348{ 345{
349 int ret = 0; 346 int ret = 0;
350 unsigned long irqflags;
351 347
352 spin_lock_irqsave(&lock_data->spinlock, irqflags); 348 spin_lock_bh(&lock_data->spinlock);
353 lock_data->kernel_waiters++; 349 lock_data->kernel_waiters++;
354 if (!lock_data->idle_has_lock) { 350 if (!lock_data->idle_has_lock) {
355 351
356 spin_unlock_irqrestore(&lock_data->spinlock, irqflags); 352 spin_unlock_bh(&lock_data->spinlock);
357 ret = drm_lock_take(lock_data, DRM_KERNEL_CONTEXT); 353 ret = drm_lock_take(lock_data, DRM_KERNEL_CONTEXT);
358 spin_lock_irqsave(&lock_data->spinlock, irqflags); 354 spin_lock_bh(&lock_data->spinlock);
359 355
360 if (ret == 1) 356 if (ret == 1)
361 lock_data->idle_has_lock = 1; 357 lock_data->idle_has_lock = 1;
362 } 358 }
363 spin_unlock_irqrestore(&lock_data->spinlock, irqflags); 359 spin_unlock_bh(&lock_data->spinlock);
364} 360}
365EXPORT_SYMBOL(drm_idlelock_take); 361EXPORT_SYMBOL(drm_idlelock_take);
366 362
@@ -368,9 +364,8 @@ void drm_idlelock_release(struct drm_lock_data *lock_data)
368{ 364{
369 unsigned int old, prev; 365 unsigned int old, prev;
370 volatile unsigned int *lock = &lock_data->hw_lock->lock; 366 volatile unsigned int *lock = &lock_data->hw_lock->lock;
371 unsigned long irqflags;
372 367
373 spin_lock_irqsave(&lock_data->spinlock, irqflags); 368 spin_lock_bh(&lock_data->spinlock);
374 if (--lock_data->kernel_waiters == 0) { 369 if (--lock_data->kernel_waiters == 0) {
375 if (lock_data->idle_has_lock) { 370 if (lock_data->idle_has_lock) {
376 do { 371 do {
@@ -381,7 +376,7 @@ void drm_idlelock_release(struct drm_lock_data *lock_data)
381 lock_data->idle_has_lock = 0; 376 lock_data->idle_has_lock = 0;
382 } 377 }
383 } 378 }
384 spin_unlock_irqrestore(&lock_data->spinlock, irqflags); 379 spin_unlock_bh(&lock_data->spinlock);
385} 380}
386EXPORT_SYMBOL(drm_idlelock_release); 381EXPORT_SYMBOL(drm_idlelock_release);
387 382
diff --git a/drivers/char/drm/i915_dma.c b/drivers/char/drm/i915_dma.c
index f47e46e3529f..88974342933c 100644
--- a/drivers/char/drm/i915_dma.c
+++ b/drivers/char/drm/i915_dma.c
@@ -415,13 +415,10 @@ static void i915_emit_breadcrumb(struct drm_device *dev)
415 drm_i915_private_t *dev_priv = dev->dev_private; 415 drm_i915_private_t *dev_priv = dev->dev_private;
416 RING_LOCALS; 416 RING_LOCALS;
417 417
418 if (++dev_priv->counter > BREADCRUMB_MASK) { 418 dev_priv->sarea_priv->last_enqueue = ++dev_priv->counter;
419 dev_priv->counter = 1;
420 DRM_DEBUG("Breadcrumb counter wrapped around\n");
421 }
422 419
423 if (dev_priv->sarea_priv) 420 if (dev_priv->counter > 0x7FFFFFFFUL)
424 dev_priv->sarea_priv->last_enqueue = dev_priv->counter; 421 dev_priv->sarea_priv->last_enqueue = dev_priv->counter = 1;
425 422
426 BEGIN_LP_RING(4); 423 BEGIN_LP_RING(4);
427 OUT_RING(CMD_STORE_DWORD_IDX); 424 OUT_RING(CMD_STORE_DWORD_IDX);
@@ -431,26 +428,6 @@ static void i915_emit_breadcrumb(struct drm_device *dev)
431 ADVANCE_LP_RING(); 428 ADVANCE_LP_RING();
432} 429}
433 430
434int i915_emit_mi_flush(struct drm_device *dev, uint32_t flush)
435{
436 drm_i915_private_t *dev_priv = dev->dev_private;
437 uint32_t flush_cmd = CMD_MI_FLUSH;
438 RING_LOCALS;
439
440 flush_cmd |= flush;
441
442 i915_kernel_lost_context(dev);
443
444 BEGIN_LP_RING(4);
445 OUT_RING(flush_cmd);
446 OUT_RING(0);
447 OUT_RING(0);
448 OUT_RING(0);
449 ADVANCE_LP_RING();
450
451 return 0;
452}
453
454static int i915_dispatch_cmdbuffer(struct drm_device * dev, 431static int i915_dispatch_cmdbuffer(struct drm_device * dev,
455 drm_i915_cmdbuffer_t * cmd) 432 drm_i915_cmdbuffer_t * cmd)
456{ 433{
@@ -534,74 +511,52 @@ static int i915_dispatch_batchbuffer(struct drm_device * dev,
534 return 0; 511 return 0;
535} 512}
536 513
537static void i915_do_dispatch_flip(struct drm_device * dev, int plane, int sync) 514static int i915_dispatch_flip(struct drm_device * dev)
538{ 515{
539 drm_i915_private_t *dev_priv = dev->dev_private; 516 drm_i915_private_t *dev_priv = dev->dev_private;
540 u32 num_pages, current_page, next_page, dspbase;
541 int shift = 2 * plane, x, y;
542 RING_LOCALS; 517 RING_LOCALS;
543 518
544 /* Calculate display base offset */ 519 DRM_DEBUG("%s: page=%d pfCurrentPage=%d\n",
545 num_pages = dev_priv->sarea_priv->third_handle ? 3 : 2; 520 __FUNCTION__,
546 current_page = (dev_priv->sarea_priv->pf_current_page >> shift) & 0x3; 521 dev_priv->current_page,
547 next_page = (current_page + 1) % num_pages; 522 dev_priv->sarea_priv->pf_current_page);
548 523
549 switch (next_page) { 524 i915_kernel_lost_context(dev);
550 default: 525
551 case 0: 526 BEGIN_LP_RING(2);
552 dspbase = dev_priv->sarea_priv->front_offset; 527 OUT_RING(INST_PARSER_CLIENT | INST_OP_FLUSH | INST_FLUSH_MAP_CACHE);
553 break; 528 OUT_RING(0);
554 case 1: 529 ADVANCE_LP_RING();
555 dspbase = dev_priv->sarea_priv->back_offset;
556 break;
557 case 2:
558 dspbase = dev_priv->sarea_priv->third_offset;
559 break;
560 }
561 530
562 if (plane == 0) { 531 BEGIN_LP_RING(6);
563 x = dev_priv->sarea_priv->planeA_x; 532 OUT_RING(CMD_OP_DISPLAYBUFFER_INFO | ASYNC_FLIP);
564 y = dev_priv->sarea_priv->planeA_y; 533 OUT_RING(0);
534 if (dev_priv->current_page == 0) {
535 OUT_RING(dev_priv->back_offset);
536 dev_priv->current_page = 1;
565 } else { 537 } else {
566 x = dev_priv->sarea_priv->planeB_x; 538 OUT_RING(dev_priv->front_offset);
567 y = dev_priv->sarea_priv->planeB_y; 539 dev_priv->current_page = 0;
568 } 540 }
541 OUT_RING(0);
542 ADVANCE_LP_RING();
569 543
570 dspbase += (y * dev_priv->sarea_priv->pitch + x) * dev_priv->cpp; 544 BEGIN_LP_RING(2);
545 OUT_RING(MI_WAIT_FOR_EVENT | MI_WAIT_FOR_PLANE_A_FLIP);
546 OUT_RING(0);
547 ADVANCE_LP_RING();
571 548
572 DRM_DEBUG("plane=%d current_page=%d dspbase=0x%x\n", plane, current_page, 549 dev_priv->sarea_priv->last_enqueue = dev_priv->counter++;
573 dspbase);
574 550
575 BEGIN_LP_RING(4); 551 BEGIN_LP_RING(4);
576 OUT_RING(sync ? 0 : 552 OUT_RING(CMD_STORE_DWORD_IDX);
577 (MI_WAIT_FOR_EVENT | (plane ? MI_WAIT_FOR_PLANE_B_FLIP : 553 OUT_RING(20);
578 MI_WAIT_FOR_PLANE_A_FLIP))); 554 OUT_RING(dev_priv->counter);
579 OUT_RING(CMD_OP_DISPLAYBUFFER_INFO | (sync ? 0 : ASYNC_FLIP) | 555 OUT_RING(0);
580 (plane ? DISPLAY_PLANE_B : DISPLAY_PLANE_A));
581 OUT_RING(dev_priv->sarea_priv->pitch * dev_priv->cpp);
582 OUT_RING(dspbase);
583 ADVANCE_LP_RING(); 556 ADVANCE_LP_RING();
584 557
585 dev_priv->sarea_priv->pf_current_page &= ~(0x3 << shift); 558 dev_priv->sarea_priv->pf_current_page = dev_priv->current_page;
586 dev_priv->sarea_priv->pf_current_page |= next_page << shift; 559 return 0;
587}
588
589void i915_dispatch_flip(struct drm_device * dev, int planes, int sync)
590{
591 drm_i915_private_t *dev_priv = dev->dev_private;
592 int i;
593
594 DRM_DEBUG("planes=0x%x pfCurrentPage=%d\n",
595 planes, dev_priv->sarea_priv->pf_current_page);
596
597 i915_emit_mi_flush(dev, MI_READ_FLUSH | MI_EXE_FLUSH);
598
599 for (i = 0; i < 2; i++)
600 if (planes & (1 << i))
601 i915_do_dispatch_flip(dev, i, sync);
602
603 i915_emit_breadcrumb(dev);
604
605} 560}
606 561
607static int i915_quiescent(struct drm_device * dev) 562static int i915_quiescent(struct drm_device * dev)
@@ -624,6 +579,7 @@ static int i915_batchbuffer(struct drm_device *dev, void *data,
624 struct drm_file *file_priv) 579 struct drm_file *file_priv)
625{ 580{
626 drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; 581 drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
582 u32 *hw_status = dev_priv->hw_status_page;
627 drm_i915_sarea_t *sarea_priv = (drm_i915_sarea_t *) 583 drm_i915_sarea_t *sarea_priv = (drm_i915_sarea_t *)
628 dev_priv->sarea_priv; 584 dev_priv->sarea_priv;
629 drm_i915_batchbuffer_t *batch = data; 585 drm_i915_batchbuffer_t *batch = data;
@@ -646,7 +602,7 @@ static int i915_batchbuffer(struct drm_device *dev, void *data,
646 602
647 ret = i915_dispatch_batchbuffer(dev, batch); 603 ret = i915_dispatch_batchbuffer(dev, batch);
648 604
649 sarea_priv->last_dispatch = READ_BREADCRUMB(dev_priv); 605 sarea_priv->last_dispatch = (int)hw_status[5];
650 return ret; 606 return ret;
651} 607}
652 608
@@ -654,6 +610,7 @@ static int i915_cmdbuffer(struct drm_device *dev, void *data,
654 struct drm_file *file_priv) 610 struct drm_file *file_priv)
655{ 611{
656 drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; 612 drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
613 u32 *hw_status = dev_priv->hw_status_page;
657 drm_i915_sarea_t *sarea_priv = (drm_i915_sarea_t *) 614 drm_i915_sarea_t *sarea_priv = (drm_i915_sarea_t *)
658 dev_priv->sarea_priv; 615 dev_priv->sarea_priv;
659 drm_i915_cmdbuffer_t *cmdbuf = data; 616 drm_i915_cmdbuffer_t *cmdbuf = data;
@@ -678,51 +635,18 @@ static int i915_cmdbuffer(struct drm_device *dev, void *data,
678 return ret; 635 return ret;
679 } 636 }
680 637
681 sarea_priv->last_dispatch = READ_BREADCRUMB(dev_priv); 638 sarea_priv->last_dispatch = (int)hw_status[5];
682 return 0;
683}
684
685static int i915_do_cleanup_pageflip(struct drm_device * dev)
686{
687 drm_i915_private_t *dev_priv = dev->dev_private;
688 int i, planes, num_pages = dev_priv->sarea_priv->third_handle ? 3 : 2;
689
690 DRM_DEBUG("\n");
691
692 for (i = 0, planes = 0; i < 2; i++)
693 if (dev_priv->sarea_priv->pf_current_page & (0x3 << (2 * i))) {
694 dev_priv->sarea_priv->pf_current_page =
695 (dev_priv->sarea_priv->pf_current_page &
696 ~(0x3 << (2 * i))) | ((num_pages - 1) << (2 * i));
697
698 planes |= 1 << i;
699 }
700
701 if (planes)
702 i915_dispatch_flip(dev, planes, 0);
703
704 return 0; 639 return 0;
705} 640}
706 641
707static int i915_flip_bufs(struct drm_device *dev, void *data, 642static int i915_flip_bufs(struct drm_device *dev, void *data,
708 struct drm_file *file_priv) 643 struct drm_file *file_priv)
709{ 644{
710 drm_i915_flip_t *param = data; 645 DRM_DEBUG("%s\n", __FUNCTION__);
711
712 DRM_DEBUG("\n");
713 646
714 LOCK_TEST_WITH_RETURN(dev, file_priv); 647 LOCK_TEST_WITH_RETURN(dev, file_priv);
715 648
716 /* This is really planes */ 649 return i915_dispatch_flip(dev);
717 if (param->pipes & ~0x3) {
718 DRM_ERROR("Invalid planes 0x%x, only <= 0x3 is valid\n",
719 param->pipes);
720 return -EINVAL;
721 }
722
723 i915_dispatch_flip(dev, param->pipes, 0);
724
725 return 0;
726} 650}
727 651
728static int i915_getparam(struct drm_device *dev, void *data, 652static int i915_getparam(struct drm_device *dev, void *data,
@@ -883,8 +807,6 @@ void i915_driver_lastclose(struct drm_device * dev)
883 if (!dev_priv) 807 if (!dev_priv)
884 return; 808 return;
885 809
886 if (drm_getsarea(dev) && dev_priv->sarea_priv)
887 i915_do_cleanup_pageflip(dev);
888 if (dev_priv->agp_heap) 810 if (dev_priv->agp_heap)
889 i915_mem_takedown(&(dev_priv->agp_heap)); 811 i915_mem_takedown(&(dev_priv->agp_heap));
890 812
diff --git a/drivers/char/drm/i915_drm.h b/drivers/char/drm/i915_drm.h
index 0431c00e2289..05c66cf03a9e 100644
--- a/drivers/char/drm/i915_drm.h
+++ b/drivers/char/drm/i915_drm.h
@@ -105,29 +105,14 @@ typedef struct _drm_i915_sarea {
105 unsigned int rotated_tiled; 105 unsigned int rotated_tiled;
106 unsigned int rotated2_tiled; 106 unsigned int rotated2_tiled;
107 107
108 int planeA_x; 108 int pipeA_x;
109 int planeA_y; 109 int pipeA_y;
110 int planeA_w; 110 int pipeA_w;
111 int planeA_h; 111 int pipeA_h;
112 int planeB_x; 112 int pipeB_x;
113 int planeB_y; 113 int pipeB_y;
114 int planeB_w; 114 int pipeB_w;
115 int planeB_h; 115 int pipeB_h;
116
117 /* Triple buffering */
118 drm_handle_t third_handle;
119 int third_offset;
120 int third_size;
121 unsigned int third_tiled;
122
123 /* buffer object handles for the static buffers. May change
124 * over the lifetime of the client, though it doesn't in our current
125 * implementation.
126 */
127 unsigned int front_bo_handle;
128 unsigned int back_bo_handle;
129 unsigned int third_bo_handle;
130 unsigned int depth_bo_handle;
131} drm_i915_sarea_t; 116} drm_i915_sarea_t;
132 117
133/* Flags for perf_boxes 118/* Flags for perf_boxes
@@ -161,7 +146,7 @@ typedef struct _drm_i915_sarea {
161 146
162#define DRM_IOCTL_I915_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t) 147#define DRM_IOCTL_I915_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t)
163#define DRM_IOCTL_I915_FLUSH DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLUSH) 148#define DRM_IOCTL_I915_FLUSH DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLUSH)
164#define DRM_IOCTL_I915_FLIP DRM_IOW( DRM_COMMAND_BASE + DRM_I915_FLIP, drm_i915_flip_t) 149#define DRM_IOCTL_I915_FLIP DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLIP)
165#define DRM_IOCTL_I915_BATCHBUFFER DRM_IOW( DRM_COMMAND_BASE + DRM_I915_BATCHBUFFER, drm_i915_batchbuffer_t) 150#define DRM_IOCTL_I915_BATCHBUFFER DRM_IOW( DRM_COMMAND_BASE + DRM_I915_BATCHBUFFER, drm_i915_batchbuffer_t)
166#define DRM_IOCTL_I915_IRQ_EMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_IRQ_EMIT, drm_i915_irq_emit_t) 151#define DRM_IOCTL_I915_IRQ_EMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_IRQ_EMIT, drm_i915_irq_emit_t)
167#define DRM_IOCTL_I915_IRQ_WAIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_IRQ_WAIT, drm_i915_irq_wait_t) 152#define DRM_IOCTL_I915_IRQ_WAIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_IRQ_WAIT, drm_i915_irq_wait_t)
@@ -176,18 +161,6 @@ typedef struct _drm_i915_sarea {
176#define DRM_IOCTL_I915_GET_VBLANK_PIPE DRM_IOR( DRM_COMMAND_BASE + DRM_I915_GET_VBLANK_PIPE, drm_i915_vblank_pipe_t) 161#define DRM_IOCTL_I915_GET_VBLANK_PIPE DRM_IOR( DRM_COMMAND_BASE + DRM_I915_GET_VBLANK_PIPE, drm_i915_vblank_pipe_t)
177#define DRM_IOCTL_I915_VBLANK_SWAP DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_VBLANK_SWAP, drm_i915_vblank_swap_t) 162#define DRM_IOCTL_I915_VBLANK_SWAP DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_VBLANK_SWAP, drm_i915_vblank_swap_t)
178 163
179/* Asynchronous page flipping:
180 */
181typedef struct drm_i915_flip {
182 /*
183 * This is really talking about planes, and we could rename it
184 * except for the fact that some of the duplicated i915_drm.h files
185 * out there check for HAVE_I915_FLIP and so might pick up this
186 * version.
187 */
188 int pipes;
189} drm_i915_flip_t;
190
191/* Allow drivers to submit batchbuffers directly to hardware, relying 164/* Allow drivers to submit batchbuffers directly to hardware, relying
192 * on the security mechanisms provided by hardware. 165 * on the security mechanisms provided by hardware.
193 */ 166 */
diff --git a/drivers/char/drm/i915_drv.c b/drivers/char/drm/i915_drv.c
index bb8f1b2fb383..e8f3d682e3b1 100644
--- a/drivers/char/drm/i915_drv.c
+++ b/drivers/char/drm/i915_drv.c
@@ -147,7 +147,7 @@ static void i915_save_vga(struct drm_device *dev)
147 i915_write_indexed(cr_index, cr_data, 0x11, 147 i915_write_indexed(cr_index, cr_data, 0x11,
148 i915_read_indexed(cr_index, cr_data, 0x11) & 148 i915_read_indexed(cr_index, cr_data, 0x11) &
149 (~0x80)); 149 (~0x80));
150 for (i = 0; i < 0x24; i++) 150 for (i = 0; i <= 0x24; i++)
151 dev_priv->saveCR[i] = 151 dev_priv->saveCR[i] =
152 i915_read_indexed(cr_index, cr_data, i); 152 i915_read_indexed(cr_index, cr_data, i);
153 /* Make sure we don't turn off CR group 0 writes */ 153 /* Make sure we don't turn off CR group 0 writes */
@@ -156,7 +156,7 @@ static void i915_save_vga(struct drm_device *dev)
156 /* Attribute controller registers */ 156 /* Attribute controller registers */
157 inb(st01); 157 inb(st01);
158 dev_priv->saveAR_INDEX = inb(VGA_AR_INDEX); 158 dev_priv->saveAR_INDEX = inb(VGA_AR_INDEX);
159 for (i = 0; i < 20; i++) 159 for (i = 0; i <= 0x14; i++)
160 dev_priv->saveAR[i] = i915_read_ar(st01, i, 0); 160 dev_priv->saveAR[i] = i915_read_ar(st01, i, 0);
161 inb(st01); 161 inb(st01);
162 outb(dev_priv->saveAR_INDEX, VGA_AR_INDEX); 162 outb(dev_priv->saveAR_INDEX, VGA_AR_INDEX);
@@ -206,7 +206,7 @@ static void i915_restore_vga(struct drm_device *dev)
206 /* CRT controller regs */ 206 /* CRT controller regs */
207 /* Enable CR group 0 writes */ 207 /* Enable CR group 0 writes */
208 i915_write_indexed(cr_index, cr_data, 0x11, dev_priv->saveCR[0x11]); 208 i915_write_indexed(cr_index, cr_data, 0x11, dev_priv->saveCR[0x11]);
209 for (i = 0; i < 0x24; i++) 209 for (i = 0; i <= 0x24; i++)
210 i915_write_indexed(cr_index, cr_data, i, dev_priv->saveCR[i]); 210 i915_write_indexed(cr_index, cr_data, i, dev_priv->saveCR[i]);
211 211
212 /* Graphics controller regs */ 212 /* Graphics controller regs */
@@ -223,7 +223,7 @@ static void i915_restore_vga(struct drm_device *dev)
223 223
224 /* Attribute controller registers */ 224 /* Attribute controller registers */
225 inb(st01); 225 inb(st01);
226 for (i = 0; i < 20; i++) 226 for (i = 0; i <= 0x14; i++)
227 i915_write_ar(st01, i, dev_priv->saveAR[i], 0); 227 i915_write_ar(st01, i, dev_priv->saveAR[i], 0);
228 inb(st01); /* switch back to index mode */ 228 inb(st01); /* switch back to index mode */
229 outb(dev_priv->saveAR_INDEX | 0x20, VGA_AR_INDEX); 229 outb(dev_priv->saveAR_INDEX | 0x20, VGA_AR_INDEX);
@@ -256,6 +256,9 @@ static int i915_suspend(struct drm_device *dev, pm_message_t state)
256 pci_save_state(dev->pdev); 256 pci_save_state(dev->pdev);
257 pci_read_config_byte(dev->pdev, LBB, &dev_priv->saveLBB); 257 pci_read_config_byte(dev->pdev, LBB, &dev_priv->saveLBB);
258 258
259 /* Display arbitration control */
260 dev_priv->saveDSPARB = I915_READ(DSPARB);
261
259 /* Pipe & plane A info */ 262 /* Pipe & plane A info */
260 dev_priv->savePIPEACONF = I915_READ(PIPEACONF); 263 dev_priv->savePIPEACONF = I915_READ(PIPEACONF);
261 dev_priv->savePIPEASRC = I915_READ(PIPEASRC); 264 dev_priv->savePIPEASRC = I915_READ(PIPEASRC);
@@ -349,6 +352,7 @@ static int i915_suspend(struct drm_device *dev, pm_message_t state)
349 dev_priv->saveVGACNTRL = I915_READ(VGACNTRL); 352 dev_priv->saveVGACNTRL = I915_READ(VGACNTRL);
350 353
351 /* Clock gating state */ 354 /* Clock gating state */
355 dev_priv->saveD_STATE = I915_READ(D_STATE);
352 dev_priv->saveDSPCLK_GATE_D = I915_READ(DSPCLK_GATE_D); 356 dev_priv->saveDSPCLK_GATE_D = I915_READ(DSPCLK_GATE_D);
353 357
354 /* Cache mode state */ 358 /* Cache mode state */
@@ -388,6 +392,8 @@ static int i915_resume(struct drm_device *dev)
388 392
389 pci_write_config_byte(dev->pdev, LBB, dev_priv->saveLBB); 393 pci_write_config_byte(dev->pdev, LBB, dev_priv->saveLBB);
390 394
395 I915_WRITE(DSPARB, dev_priv->saveDSPARB);
396
391 /* Pipe & plane A info */ 397 /* Pipe & plane A info */
392 /* Prime the clock */ 398 /* Prime the clock */
393 if (dev_priv->saveDPLL_A & DPLL_VCO_ENABLE) { 399 if (dev_priv->saveDPLL_A & DPLL_VCO_ENABLE) {
@@ -507,6 +513,7 @@ static int i915_resume(struct drm_device *dev)
507 udelay(150); 513 udelay(150);
508 514
509 /* Clock gating state */ 515 /* Clock gating state */
516 I915_WRITE (D_STATE, dev_priv->saveD_STATE);
510 I915_WRITE (DSPCLK_GATE_D, dev_priv->saveDSPCLK_GATE_D); 517 I915_WRITE (DSPCLK_GATE_D, dev_priv->saveDSPCLK_GATE_D);
511 518
512 /* Cache mode state */ 519 /* Cache mode state */
@@ -533,7 +540,8 @@ static struct drm_driver driver = {
533 */ 540 */
534 .driver_features = 541 .driver_features =
535 DRIVER_USE_AGP | DRIVER_REQUIRE_AGP | /* DRIVER_USE_MTRR |*/ 542 DRIVER_USE_AGP | DRIVER_REQUIRE_AGP | /* DRIVER_USE_MTRR |*/
536 DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED, 543 DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED | DRIVER_IRQ_VBL |
544 DRIVER_IRQ_VBL2,
537 .load = i915_driver_load, 545 .load = i915_driver_load,
538 .unload = i915_driver_unload, 546 .unload = i915_driver_unload,
539 .lastclose = i915_driver_lastclose, 547 .lastclose = i915_driver_lastclose,
@@ -541,9 +549,8 @@ static struct drm_driver driver = {
541 .suspend = i915_suspend, 549 .suspend = i915_suspend,
542 .resume = i915_resume, 550 .resume = i915_resume,
543 .device_is_agp = i915_driver_device_is_agp, 551 .device_is_agp = i915_driver_device_is_agp,
544 .get_vblank_counter = i915_get_vblank_counter, 552 .vblank_wait = i915_driver_vblank_wait,
545 .enable_vblank = i915_enable_vblank, 553 .vblank_wait2 = i915_driver_vblank_wait2,
546 .disable_vblank = i915_disable_vblank,
547 .irq_preinstall = i915_driver_irq_preinstall, 554 .irq_preinstall = i915_driver_irq_preinstall,
548 .irq_postinstall = i915_driver_irq_postinstall, 555 .irq_postinstall = i915_driver_irq_postinstall,
549 .irq_uninstall = i915_driver_irq_uninstall, 556 .irq_uninstall = i915_driver_irq_uninstall,
diff --git a/drivers/char/drm/i915_drv.h b/drivers/char/drm/i915_drv.h
index db7001f22561..1b20f7c0639c 100644
--- a/drivers/char/drm/i915_drv.h
+++ b/drivers/char/drm/i915_drv.h
@@ -76,9 +76,8 @@ struct mem_block {
76typedef struct _drm_i915_vbl_swap { 76typedef struct _drm_i915_vbl_swap {
77 struct list_head head; 77 struct list_head head;
78 drm_drawable_t drw_id; 78 drm_drawable_t drw_id;
79 unsigned int plane; 79 unsigned int pipe;
80 unsigned int sequence; 80 unsigned int sequence;
81 int flip;
82} drm_i915_vbl_swap_t; 81} drm_i915_vbl_swap_t;
83 82
84typedef struct drm_i915_private { 83typedef struct drm_i915_private {
@@ -91,7 +90,7 @@ typedef struct drm_i915_private {
91 drm_dma_handle_t *status_page_dmah; 90 drm_dma_handle_t *status_page_dmah;
92 void *hw_status_page; 91 void *hw_status_page;
93 dma_addr_t dma_status_page; 92 dma_addr_t dma_status_page;
94 uint32_t counter; 93 unsigned long counter;
95 unsigned int status_gfx_addr; 94 unsigned int status_gfx_addr;
96 drm_local_map_t hws_map; 95 drm_local_map_t hws_map;
97 96
@@ -104,18 +103,13 @@ typedef struct drm_i915_private {
104 103
105 wait_queue_head_t irq_queue; 104 wait_queue_head_t irq_queue;
106 atomic_t irq_received; 105 atomic_t irq_received;
107 atomic_t irq_emited; 106 atomic_t irq_emitted;
108 107
109 int tex_lru_log_granularity; 108 int tex_lru_log_granularity;
110 int allow_batchbuffer; 109 int allow_batchbuffer;
111 struct mem_block *agp_heap; 110 struct mem_block *agp_heap;
112 unsigned int sr01, adpa, ppcr, dvob, dvoc, lvds; 111 unsigned int sr01, adpa, ppcr, dvob, dvoc, lvds;
113 int vblank_pipe; 112 int vblank_pipe;
114 spinlock_t user_irq_lock;
115 int user_irq_refcount;
116 int fence_irq_on;
117 uint32_t irq_enable_reg;
118 int irq_enabled;
119 113
120 spinlock_t swaps_lock; 114 spinlock_t swaps_lock;
121 drm_i915_vbl_swap_t vbl_swaps; 115 drm_i915_vbl_swap_t vbl_swaps;
@@ -125,6 +119,7 @@ typedef struct drm_i915_private {
125 u8 saveLBB; 119 u8 saveLBB;
126 u32 saveDSPACNTR; 120 u32 saveDSPACNTR;
127 u32 saveDSPBCNTR; 121 u32 saveDSPBCNTR;
122 u32 saveDSPARB;
128 u32 savePIPEACONF; 123 u32 savePIPEACONF;
129 u32 savePIPEBCONF; 124 u32 savePIPEBCONF;
130 u32 savePIPEASRC; 125 u32 savePIPEASRC;
@@ -194,6 +189,7 @@ typedef struct drm_i915_private {
194 u32 saveIIR; 189 u32 saveIIR;
195 u32 saveIMR; 190 u32 saveIMR;
196 u32 saveCACHE_MODE_0; 191 u32 saveCACHE_MODE_0;
192 u32 saveD_STATE;
197 u32 saveDSPCLK_GATE_D; 193 u32 saveDSPCLK_GATE_D;
198 u32 saveMI_ARB_STATE; 194 u32 saveMI_ARB_STATE;
199 u32 saveSWF0[16]; 195 u32 saveSWF0[16];
@@ -203,10 +199,10 @@ typedef struct drm_i915_private {
203 u8 saveSR[8]; 199 u8 saveSR[8];
204 u8 saveGR[25]; 200 u8 saveGR[25];
205 u8 saveAR_INDEX; 201 u8 saveAR_INDEX;
206 u8 saveAR[20]; 202 u8 saveAR[21];
207 u8 saveDACMASK; 203 u8 saveDACMASK;
208 u8 saveDACDATA[256*3]; /* 256 3-byte colors */ 204 u8 saveDACDATA[256*3]; /* 256 3-byte colors */
209 u8 saveCR[36]; 205 u8 saveCR[37];
210} drm_i915_private_t; 206} drm_i915_private_t;
211 207
212extern struct drm_ioctl_desc i915_ioctls[]; 208extern struct drm_ioctl_desc i915_ioctls[];
@@ -222,7 +218,7 @@ extern void i915_driver_preclose(struct drm_device *dev,
222extern int i915_driver_device_is_agp(struct drm_device * dev); 218extern int i915_driver_device_is_agp(struct drm_device * dev);
223extern long i915_compat_ioctl(struct file *filp, unsigned int cmd, 219extern long i915_compat_ioctl(struct file *filp, unsigned int cmd,
224 unsigned long arg); 220 unsigned long arg);
225extern void i915_dispatch_flip(struct drm_device * dev, int pipes, int sync); 221
226/* i915_irq.c */ 222/* i915_irq.c */
227extern int i915_irq_emit(struct drm_device *dev, void *data, 223extern int i915_irq_emit(struct drm_device *dev, void *data,
228 struct drm_file *file_priv); 224 struct drm_file *file_priv);
@@ -233,7 +229,7 @@ extern int i915_driver_vblank_wait(struct drm_device *dev, unsigned int *sequenc
233extern int i915_driver_vblank_wait2(struct drm_device *dev, unsigned int *sequence); 229extern int i915_driver_vblank_wait2(struct drm_device *dev, unsigned int *sequence);
234extern irqreturn_t i915_driver_irq_handler(DRM_IRQ_ARGS); 230extern irqreturn_t i915_driver_irq_handler(DRM_IRQ_ARGS);
235extern void i915_driver_irq_preinstall(struct drm_device * dev); 231extern void i915_driver_irq_preinstall(struct drm_device * dev);
236extern int i915_driver_irq_postinstall(struct drm_device * dev); 232extern void i915_driver_irq_postinstall(struct drm_device * dev);
237extern void i915_driver_irq_uninstall(struct drm_device * dev); 233extern void i915_driver_irq_uninstall(struct drm_device * dev);
238extern int i915_vblank_pipe_set(struct drm_device *dev, void *data, 234extern int i915_vblank_pipe_set(struct drm_device *dev, void *data,
239 struct drm_file *file_priv); 235 struct drm_file *file_priv);
@@ -241,9 +237,6 @@ extern int i915_vblank_pipe_get(struct drm_device *dev, void *data,
241 struct drm_file *file_priv); 237 struct drm_file *file_priv);
242extern int i915_vblank_swap(struct drm_device *dev, void *data, 238extern int i915_vblank_swap(struct drm_device *dev, void *data,
243 struct drm_file *file_priv); 239 struct drm_file *file_priv);
244extern int i915_enable_vblank(struct drm_device *dev, int crtc);
245extern void i915_disable_vblank(struct drm_device *dev, int crtc);
246extern u32 i915_get_vblank_counter(struct drm_device *dev, int crtc);
247 240
248/* i915_mem.c */ 241/* i915_mem.c */
249extern int i915_mem_alloc(struct drm_device *dev, void *data, 242extern int i915_mem_alloc(struct drm_device *dev, void *data,
@@ -388,91 +381,21 @@ extern int i915_wait_ring(struct drm_device * dev, int n, const char *caller);
388 381
389/* Interrupt bits: 382/* Interrupt bits:
390 */ 383 */
391#define I915_PIPE_CONTROL_NOTIFY_INTERRUPT (1<<18) 384#define USER_INT_FLAG (1<<1)
392#define I915_DISPLAY_PORT_INTERRUPT (1<<17) 385#define VSYNC_PIPEB_FLAG (1<<5)
393#define I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT (1<<15) 386#define VSYNC_PIPEA_FLAG (1<<7)
394#define I915_GMCH_THERMAL_SENSOR_EVENT_INTERRUPT (1<<14) 387#define HWB_OOM_FLAG (1<<13) /* binner out of memory */
395#define I915_HWB_OOM_INTERRUPT (1<<13) /* binner out of memory */
396#define I915_SYNC_STATUS_INTERRUPT (1<<12)
397#define I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT (1<<11)
398#define I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT (1<<10)
399#define I915_OVERLAY_PLANE_FLIP_PENDING_INTERRUPT (1<<9)
400#define I915_DISPLAY_PLANE_C_FLIP_PENDING_INTERRUPT (1<<8)
401#define I915_DISPLAY_PIPE_A_VBLANK_INTERRUPT (1<<7)
402#define I915_DISPLAY_PIPE_A_EVENT_INTERRUPT (1<<6)
403#define I915_DISPLAY_PIPE_B_VBLANK_INTERRUPT (1<<5)
404#define I915_DISPLAY_PIPE_B_EVENT_INTERRUPT (1<<4)
405#define I915_DEBUG_INTERRUPT (1<<2)
406#define I915_USER_INTERRUPT (1<<1)
407
408 388
409#define I915REG_HWSTAM 0x02098 389#define I915REG_HWSTAM 0x02098
410#define I915REG_INT_IDENTITY_R 0x020a4 390#define I915REG_INT_IDENTITY_R 0x020a4
411#define I915REG_INT_MASK_R 0x020a8 391#define I915REG_INT_MASK_R 0x020a8
412#define I915REG_INT_ENABLE_R 0x020a0 392#define I915REG_INT_ENABLE_R 0x020a0
413#define I915REG_INSTPM 0x020c0
414
415#define PIPEADSL 0x70000
416#define PIPEBDSL 0x71000
417 393
418#define I915REG_PIPEASTAT 0x70024 394#define I915REG_PIPEASTAT 0x70024
419#define I915REG_PIPEBSTAT 0x71024 395#define I915REG_PIPEBSTAT 0x71024
420/*
421 * The two pipe frame counter registers are not synchronized, so
422 * reading a stable value is somewhat tricky. The following code
423 * should work:
424 *
425 * do {
426 * high1 = ((INREG(PIPEAFRAMEHIGH) & PIPE_FRAME_HIGH_MASK) >>
427 * PIPE_FRAME_HIGH_SHIFT;
428 * low1 = ((INREG(PIPEAFRAMEPIXEL) & PIPE_FRAME_LOW_MASK) >>
429 * PIPE_FRAME_LOW_SHIFT);
430 * high2 = ((INREG(PIPEAFRAMEHIGH) & PIPE_FRAME_HIGH_MASK) >>
431 * PIPE_FRAME_HIGH_SHIFT);
432 * } while (high1 != high2);
433 * frame = (high1 << 8) | low1;
434 */
435#define PIPEAFRAMEHIGH 0x70040
436#define PIPEBFRAMEHIGH 0x71040
437#define PIPE_FRAME_HIGH_MASK 0x0000ffff
438#define PIPE_FRAME_HIGH_SHIFT 0
439#define PIPEAFRAMEPIXEL 0x70044
440#define PIPEBFRAMEPIXEL 0x71044
441 396
442#define PIPE_FRAME_LOW_MASK 0xff000000 397#define I915_VBLANK_INTERRUPT_ENABLE (1UL<<17)
443#define PIPE_FRAME_LOW_SHIFT 24 398#define I915_VBLANK_CLEAR (1UL<<1)
444/*
445 * Pixel within the current frame is counted in the PIPEAFRAMEPIXEL register
446 * and is 24 bits wide.
447 */
448#define PIPE_PIXEL_MASK 0x00ffffff
449#define PIPE_PIXEL_SHIFT 0
450
451#define I915_FIFO_UNDERRUN_STATUS (1UL<<31)
452#define I915_CRC_ERROR_ENABLE (1UL<<29)
453#define I915_CRC_DONE_ENABLE (1UL<<28)
454#define I915_GMBUS_EVENT_ENABLE (1UL<<27)
455#define I915_VSYNC_INTERRUPT_ENABLE (1UL<<25)
456#define I915_DISPLAY_LINE_COMPARE_ENABLE (1UL<<24)
457#define I915_DPST_EVENT_ENABLE (1UL<<23)
458#define I915_LEGACY_BLC_EVENT_ENABLE (1UL<<22)
459#define I915_ODD_FIELD_INTERRUPT_ENABLE (1UL<<21)
460#define I915_EVEN_FIELD_INTERRUPT_ENABLE (1UL<<20)
461#define I915_START_VBLANK_INTERRUPT_ENABLE (1UL<<18) /* 965 or later */
462#define I915_VBLANK_INTERRUPT_ENABLE (1UL<<17)
463#define I915_OVERLAY_UPDATED_ENABLE (1UL<<16)
464#define I915_CRC_ERROR_INTERRUPT_STATUS (1UL<<13)
465#define I915_CRC_DONE_INTERRUPT_STATUS (1UL<<12)
466#define I915_GMBUS_INTERRUPT_STATUS (1UL<<11)
467#define I915_VSYNC_INTERRUPT_STATUS (1UL<<9)
468#define I915_DISPLAY_LINE_COMPARE_STATUS (1UL<<8)
469#define I915_DPST_EVENT_STATUS (1UL<<7)
470#define I915_LEGACY_BLC_EVENT_STATUS (1UL<<6)
471#define I915_ODD_FIELD_INTERRUPT_STATUS (1UL<<5)
472#define I915_EVEN_FIELD_INTERRUPT_STATUS (1UL<<4)
473#define I915_START_VBLANK_INTERRUPT_STATUS (1UL<<2) /* 965 or later */
474#define I915_VBLANK_INTERRUPT_STATUS (1UL<<1)
475#define I915_OVERLAY_UPDATED_STATUS (1UL<<0)
476 399
477#define SRX_INDEX 0x3c4 400#define SRX_INDEX 0x3c4
478#define SRX_DATA 0x3c5 401#define SRX_DATA 0x3c5
@@ -749,6 +672,8 @@ extern int i915_wait_ring(struct drm_device * dev, int n, const char *caller);
749/** P1 value is 2 greater than this field */ 672/** P1 value is 2 greater than this field */
750# define VGA0_PD_P1_MASK (0x1f << 0) 673# define VGA0_PD_P1_MASK (0x1f << 0)
751 674
675/* PCI D state control register */
676#define D_STATE 0x6104
752#define DSPCLK_GATE_D 0x6200 677#define DSPCLK_GATE_D 0x6200
753 678
754/* I830 CRTC registers */ 679/* I830 CRTC registers */
@@ -1059,6 +984,12 @@ extern int i915_wait_ring(struct drm_device * dev, int n, const char *caller);
1059#define PIPECONF_INTERLACE_W_FIELD_INDICATION (6 << 21) 984#define PIPECONF_INTERLACE_W_FIELD_INDICATION (6 << 21)
1060#define PIPECONF_INTERLACE_FIELD_0_ONLY (7 << 21) 985#define PIPECONF_INTERLACE_FIELD_0_ONLY (7 << 21)
1061 986
987#define DSPARB 0x70030
988#define DSPARB_CSTART_MASK (0x7f << 7)
989#define DSPARB_CSTART_SHIFT 7
990#define DSPARB_BSTART_MASK (0x7f)
991#define DSPARB_BSTART_SHIFT 0
992
1062#define PIPEBCONF 0x71008 993#define PIPEBCONF 0x71008
1063#define PIPEBCONF_ENABLE (1<<31) 994#define PIPEBCONF_ENABLE (1<<31)
1064#define PIPEBCONF_DISABLE 0 995#define PIPEBCONF_DISABLE 0
diff --git a/drivers/char/drm/i915_irq.c b/drivers/char/drm/i915_irq.c
index 023ce66ef3ab..f7f16e7a8bf3 100644
--- a/drivers/char/drm/i915_irq.c
+++ b/drivers/char/drm/i915_irq.c
@@ -38,109 +38,6 @@
38#define MAX_NOPID ((u32)~0) 38#define MAX_NOPID ((u32)~0)
39 39
40/** 40/**
41 * i915_get_pipe - return the the pipe associated with a given plane
42 * @dev: DRM device
43 * @plane: plane to look for
44 *
45 * The Intel Mesa & 2D drivers call the vblank routines with a plane number
46 * rather than a pipe number, since they may not always be equal. This routine
47 * maps the given @plane back to a pipe number.
48 */
49static int
50i915_get_pipe(struct drm_device *dev, int plane)
51{
52 drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
53 u32 dspcntr;
54
55 dspcntr = plane ? I915_READ(DSPBCNTR) : I915_READ(DSPACNTR);
56
57 return dspcntr & DISPPLANE_SEL_PIPE_MASK ? 1 : 0;
58}
59
60/**
61 * i915_get_plane - return the the plane associated with a given pipe
62 * @dev: DRM device
63 * @pipe: pipe to look for
64 *
65 * The Intel Mesa & 2D drivers call the vblank routines with a plane number
66 * rather than a plane number, since they may not always be equal. This routine
67 * maps the given @pipe back to a plane number.
68 */
69static int
70i915_get_plane(struct drm_device *dev, int pipe)
71{
72 if (i915_get_pipe(dev, 0) == pipe)
73 return 0;
74 return 1;
75}
76
77/**
78 * i915_pipe_enabled - check if a pipe is enabled
79 * @dev: DRM device
80 * @pipe: pipe to check
81 *
82 * Reading certain registers when the pipe is disabled can hang the chip.
83 * Use this routine to make sure the PLL is running and the pipe is active
84 * before reading such registers if unsure.
85 */
86static int
87i915_pipe_enabled(struct drm_device *dev, int pipe)
88{
89 drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
90 unsigned long pipeconf = pipe ? PIPEBCONF : PIPEACONF;
91
92 if (I915_READ(pipeconf) & PIPEACONF_ENABLE)
93 return 1;
94
95 return 0;
96}
97
98/**
99 * Emit a synchronous flip.
100 *
101 * This function must be called with the drawable spinlock held.
102 */
103static void
104i915_dispatch_vsync_flip(struct drm_device *dev, struct drm_drawable_info *drw,
105 int plane)
106{
107 drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
108 drm_i915_sarea_t *sarea_priv = dev_priv->sarea_priv;
109 u16 x1, y1, x2, y2;
110 int pf_planes = 1 << plane;
111
112 /* If the window is visible on the other plane, we have to flip on that
113 * plane as well.
114 */
115 if (plane == 1) {
116 x1 = sarea_priv->planeA_x;
117 y1 = sarea_priv->planeA_y;
118 x2 = x1 + sarea_priv->planeA_w;
119 y2 = y1 + sarea_priv->planeA_h;
120 } else {
121 x1 = sarea_priv->planeB_x;
122 y1 = sarea_priv->planeB_y;
123 x2 = x1 + sarea_priv->planeB_w;
124 y2 = y1 + sarea_priv->planeB_h;
125 }
126
127 if (x2 > 0 && y2 > 0) {
128 int i, num_rects = drw->num_rects;
129 struct drm_clip_rect *rect = drw->rects;
130
131 for (i = 0; i < num_rects; i++)
132 if (!(rect[i].x1 >= x2 || rect[i].y1 >= y2 ||
133 rect[i].x2 <= x1 || rect[i].y2 <= y1)) {
134 pf_planes = 0x3;
135
136 break;
137 }
138 }
139
140 i915_dispatch_flip(dev, pf_planes, 1);
141}
142
143/**
144 * Emit blits for scheduled buffer swaps. 41 * Emit blits for scheduled buffer swaps.
145 * 42 *
146 * This function will be called with the HW lock held. 43 * This function will be called with the HW lock held.
@@ -148,19 +45,20 @@ i915_dispatch_vsync_flip(struct drm_device *dev, struct drm_drawable_info *drw,
148static void i915_vblank_tasklet(struct drm_device *dev) 45static void i915_vblank_tasklet(struct drm_device *dev)
149{ 46{
150 drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; 47 drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
48 unsigned long irqflags;
151 struct list_head *list, *tmp, hits, *hit; 49 struct list_head *list, *tmp, hits, *hit;
152 int nhits, nrects, slice[2], upper[2], lower[2], i, num_pages; 50 int nhits, nrects, slice[2], upper[2], lower[2], i;
153 unsigned counter[2]; 51 unsigned counter[2] = { atomic_read(&dev->vbl_received),
52 atomic_read(&dev->vbl_received2) };
154 struct drm_drawable_info *drw; 53 struct drm_drawable_info *drw;
155 drm_i915_sarea_t *sarea_priv = dev_priv->sarea_priv; 54 drm_i915_sarea_t *sarea_priv = dev_priv->sarea_priv;
156 u32 cpp = dev_priv->cpp, offsets[3]; 55 u32 cpp = dev_priv->cpp;
157 u32 cmd = (cpp == 4) ? (XY_SRC_COPY_BLT_CMD | 56 u32 cmd = (cpp == 4) ? (XY_SRC_COPY_BLT_CMD |
158 XY_SRC_COPY_BLT_WRITE_ALPHA | 57 XY_SRC_COPY_BLT_WRITE_ALPHA |
159 XY_SRC_COPY_BLT_WRITE_RGB) 58 XY_SRC_COPY_BLT_WRITE_RGB)
160 : XY_SRC_COPY_BLT_CMD; 59 : XY_SRC_COPY_BLT_CMD;
161 u32 src_pitch = sarea_priv->pitch * cpp; 60 u32 src_pitch = sarea_priv->pitch * cpp;
162 u32 dst_pitch = sarea_priv->pitch * cpp; 61 u32 dst_pitch = sarea_priv->pitch * cpp;
163 /* COPY rop (0xcc), map cpp to magic color depth constants */
164 u32 ropcpp = (0xcc << 16) | ((cpp - 1) << 24); 62 u32 ropcpp = (0xcc << 16) | ((cpp - 1) << 24);
165 RING_LOCALS; 63 RING_LOCALS;
166 64
@@ -173,34 +71,24 @@ static void i915_vblank_tasklet(struct drm_device *dev)
173 src_pitch >>= 2; 71 src_pitch >>= 2;
174 } 72 }
175 73
176 counter[0] = drm_vblank_count(dev, 0);
177 counter[1] = drm_vblank_count(dev, 1);
178
179 DRM_DEBUG("\n"); 74 DRM_DEBUG("\n");
180 75
181 INIT_LIST_HEAD(&hits); 76 INIT_LIST_HEAD(&hits);
182 77
183 nhits = nrects = 0; 78 nhits = nrects = 0;
184 79
185 /* No irqsave/restore necessary. This tasklet may be run in an 80 spin_lock_irqsave(&dev_priv->swaps_lock, irqflags);
186 * interrupt context or normal context, but we don't have to worry
187 * about getting interrupted by something acquiring the lock, because
188 * we are the interrupt context thing that acquires the lock.
189 */
190 spin_lock(&dev_priv->swaps_lock);
191 81
192 /* Find buffer swaps scheduled for this vertical blank */ 82 /* Find buffer swaps scheduled for this vertical blank */
193 list_for_each_safe(list, tmp, &dev_priv->vbl_swaps.head) { 83 list_for_each_safe(list, tmp, &dev_priv->vbl_swaps.head) {
194 drm_i915_vbl_swap_t *vbl_swap = 84 drm_i915_vbl_swap_t *vbl_swap =
195 list_entry(list, drm_i915_vbl_swap_t, head); 85 list_entry(list, drm_i915_vbl_swap_t, head);
196 int pipe = i915_get_pipe(dev, vbl_swap->plane);
197 86
198 if ((counter[pipe] - vbl_swap->sequence) > (1<<23)) 87 if ((counter[vbl_swap->pipe] - vbl_swap->sequence) > (1<<23))
199 continue; 88 continue;
200 89
201 list_del(list); 90 list_del(list);
202 dev_priv->swaps_pending--; 91 dev_priv->swaps_pending--;
203 drm_vblank_put(dev, pipe);
204 92
205 spin_unlock(&dev_priv->swaps_lock); 93 spin_unlock(&dev_priv->swaps_lock);
206 spin_lock(&dev->drw_lock); 94 spin_lock(&dev->drw_lock);
@@ -238,23 +126,43 @@ static void i915_vblank_tasklet(struct drm_device *dev)
238 spin_lock(&dev_priv->swaps_lock); 126 spin_lock(&dev_priv->swaps_lock);
239 } 127 }
240 128
241 spin_unlock(&dev_priv->swaps_lock); 129 if (nhits == 0) {
242 130 spin_unlock_irqrestore(&dev_priv->swaps_lock, irqflags);
243 if (nhits == 0)
244 return; 131 return;
132 }
133
134 spin_unlock(&dev_priv->swaps_lock);
245 135
246 i915_kernel_lost_context(dev); 136 i915_kernel_lost_context(dev);
247 137
248 upper[0] = upper[1] = 0; 138 if (IS_I965G(dev)) {
249 slice[0] = max(sarea_priv->planeA_h / nhits, 1); 139 BEGIN_LP_RING(4);
250 slice[1] = max(sarea_priv->planeB_h / nhits, 1); 140
251 lower[0] = sarea_priv->planeA_y + slice[0]; 141 OUT_RING(GFX_OP_DRAWRECT_INFO_I965);
252 lower[1] = sarea_priv->planeB_y + slice[0]; 142 OUT_RING(0);
143 OUT_RING(((sarea_priv->width - 1) & 0xffff) | ((sarea_priv->height - 1) << 16));
144 OUT_RING(0);
145 ADVANCE_LP_RING();
146 } else {
147 BEGIN_LP_RING(6);
253 148
254 offsets[0] = sarea_priv->front_offset; 149 OUT_RING(GFX_OP_DRAWRECT_INFO);
255 offsets[1] = sarea_priv->back_offset; 150 OUT_RING(0);
256 offsets[2] = sarea_priv->third_offset; 151 OUT_RING(0);
257 num_pages = sarea_priv->third_handle ? 3 : 2; 152 OUT_RING(sarea_priv->width | sarea_priv->height << 16);
153 OUT_RING(sarea_priv->width | sarea_priv->height << 16);
154 OUT_RING(0);
155
156 ADVANCE_LP_RING();
157 }
158
159 sarea_priv->ctxOwner = DRM_KERNEL_CONTEXT;
160
161 upper[0] = upper[1] = 0;
162 slice[0] = max(sarea_priv->pipeA_h / nhits, 1);
163 slice[1] = max(sarea_priv->pipeB_h / nhits, 1);
164 lower[0] = sarea_priv->pipeA_y + slice[0];
165 lower[1] = sarea_priv->pipeB_y + slice[0];
258 166
259 spin_lock(&dev->drw_lock); 167 spin_lock(&dev->drw_lock);
260 168
@@ -266,8 +174,6 @@ static void i915_vblank_tasklet(struct drm_device *dev)
266 for (i = 0; i++ < nhits; 174 for (i = 0; i++ < nhits;
267 upper[0] = lower[0], lower[0] += slice[0], 175 upper[0] = lower[0], lower[0] += slice[0],
268 upper[1] = lower[1], lower[1] += slice[1]) { 176 upper[1] = lower[1], lower[1] += slice[1]) {
269 int init_drawrect = 1;
270
271 if (i == nhits) 177 if (i == nhits)
272 lower[0] = lower[1] = sarea_priv->height; 178 lower[0] = lower[1] = sarea_priv->height;
273 179
@@ -275,7 +181,7 @@ static void i915_vblank_tasklet(struct drm_device *dev)
275 drm_i915_vbl_swap_t *swap_hit = 181 drm_i915_vbl_swap_t *swap_hit =
276 list_entry(hit, drm_i915_vbl_swap_t, head); 182 list_entry(hit, drm_i915_vbl_swap_t, head);
277 struct drm_clip_rect *rect; 183 struct drm_clip_rect *rect;
278 int num_rects, plane, front, back; 184 int num_rects, pipe;
279 unsigned short top, bottom; 185 unsigned short top, bottom;
280 186
281 drw = drm_get_drawable_info(dev, swap_hit->drw_id); 187 drw = drm_get_drawable_info(dev, swap_hit->drw_id);
@@ -283,50 +189,10 @@ static void i915_vblank_tasklet(struct drm_device *dev)
283 if (!drw) 189 if (!drw)
284 continue; 190 continue;
285 191
286 plane = swap_hit->plane;
287
288 if (swap_hit->flip) {
289 i915_dispatch_vsync_flip(dev, drw, plane);
290 continue;
291 }
292
293 if (init_drawrect) {
294 int width = sarea_priv->width;
295 int height = sarea_priv->height;
296 if (IS_I965G(dev)) {
297 BEGIN_LP_RING(4);
298
299 OUT_RING(GFX_OP_DRAWRECT_INFO_I965);
300 OUT_RING(0);
301 OUT_RING(((width - 1) & 0xffff) | ((height - 1) << 16));
302 OUT_RING(0);
303
304 ADVANCE_LP_RING();
305 } else {
306 BEGIN_LP_RING(6);
307
308 OUT_RING(GFX_OP_DRAWRECT_INFO);
309 OUT_RING(0);
310 OUT_RING(0);
311 OUT_RING(((width - 1) & 0xffff) | ((height - 1) << 16));
312 OUT_RING(0);
313 OUT_RING(0);
314
315 ADVANCE_LP_RING();
316 }
317
318 sarea_priv->ctxOwner = DRM_KERNEL_CONTEXT;
319
320 init_drawrect = 0;
321 }
322
323 rect = drw->rects; 192 rect = drw->rects;
324 top = upper[plane]; 193 pipe = swap_hit->pipe;
325 bottom = lower[plane]; 194 top = upper[pipe];
326 195 bottom = lower[pipe];
327 front = (dev_priv->sarea_priv->pf_current_page >>
328 (2 * plane)) & 0x3;
329 back = (front + 1) % num_pages;
330 196
331 for (num_rects = drw->num_rects; num_rects--; rect++) { 197 for (num_rects = drw->num_rects; num_rects--; rect++) {
332 int y1 = max(rect->y1, top); 198 int y1 = max(rect->y1, top);
@@ -341,17 +207,17 @@ static void i915_vblank_tasklet(struct drm_device *dev)
341 OUT_RING(ropcpp | dst_pitch); 207 OUT_RING(ropcpp | dst_pitch);
342 OUT_RING((y1 << 16) | rect->x1); 208 OUT_RING((y1 << 16) | rect->x1);
343 OUT_RING((y2 << 16) | rect->x2); 209 OUT_RING((y2 << 16) | rect->x2);
344 OUT_RING(offsets[front]); 210 OUT_RING(sarea_priv->front_offset);
345 OUT_RING((y1 << 16) | rect->x1); 211 OUT_RING((y1 << 16) | rect->x1);
346 OUT_RING(src_pitch); 212 OUT_RING(src_pitch);
347 OUT_RING(offsets[back]); 213 OUT_RING(sarea_priv->back_offset);
348 214
349 ADVANCE_LP_RING(); 215 ADVANCE_LP_RING();
350 } 216 }
351 } 217 }
352 } 218 }
353 219
354 spin_unlock(&dev->drw_lock); 220 spin_unlock_irqrestore(&dev->drw_lock, irqflags);
355 221
356 list_for_each_safe(hit, tmp, &hits) { 222 list_for_each_safe(hit, tmp, &hits) {
357 drm_i915_vbl_swap_t *swap_hit = 223 drm_i915_vbl_swap_t *swap_hit =
@@ -363,112 +229,67 @@ static void i915_vblank_tasklet(struct drm_device *dev)
363 } 229 }
364} 230}
365 231
366u32 i915_get_vblank_counter(struct drm_device *dev, int plane)
367{
368 drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
369 unsigned long high_frame;
370 unsigned long low_frame;
371 u32 high1, high2, low, count;
372 int pipe;
373
374 pipe = i915_get_pipe(dev, plane);
375 high_frame = pipe ? PIPEBFRAMEHIGH : PIPEAFRAMEHIGH;
376 low_frame = pipe ? PIPEBFRAMEPIXEL : PIPEAFRAMEPIXEL;
377
378 if (!i915_pipe_enabled(dev, pipe)) {
379 printk(KERN_ERR "trying to get vblank count for disabled "
380 "pipe %d\n", pipe);
381 return 0;
382 }
383
384 /*
385 * High & low register fields aren't synchronized, so make sure
386 * we get a low value that's stable across two reads of the high
387 * register.
388 */
389 do {
390 high1 = ((I915_READ(high_frame) & PIPE_FRAME_HIGH_MASK) >>
391 PIPE_FRAME_HIGH_SHIFT);
392 low = ((I915_READ(low_frame) & PIPE_FRAME_LOW_MASK) >>
393 PIPE_FRAME_LOW_SHIFT);
394 high2 = ((I915_READ(high_frame) & PIPE_FRAME_HIGH_MASK) >>
395 PIPE_FRAME_HIGH_SHIFT);
396 } while (high1 != high2);
397
398 count = (high1 << 8) | low;
399
400 /* count may be reset by other driver(e.g. 2D driver),
401 we have no way to know if it is wrapped or resetted
402 when count is zero. do a rough guess.
403 */
404 if (count == 0 && dev->last_vblank[pipe] < dev->max_vblank_count/2)
405 dev->last_vblank[pipe] = 0;
406
407 return count;
408}
409
410irqreturn_t i915_driver_irq_handler(DRM_IRQ_ARGS) 232irqreturn_t i915_driver_irq_handler(DRM_IRQ_ARGS)
411{ 233{
412 struct drm_device *dev = (struct drm_device *) arg; 234 struct drm_device *dev = (struct drm_device *) arg;
413 drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; 235 drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
414 u32 iir; 236 u16 temp;
415 u32 pipea_stats, pipeb_stats; 237 u32 pipea_stats, pipeb_stats;
416 int vblank = 0;
417
418 iir = I915_READ(I915REG_INT_IDENTITY_R);
419 if (iir == 0) {
420 DRM_DEBUG ("iir 0x%08x im 0x%08x ie 0x%08x pipea 0x%08x pipeb 0x%08x\n",
421 iir,
422 I915_READ(I915REG_INT_MASK_R),
423 I915_READ(I915REG_INT_ENABLE_R),
424 I915_READ(I915REG_PIPEASTAT),
425 I915_READ(I915REG_PIPEBSTAT));
426 return IRQ_NONE;
427 }
428 238
429 /* 239 pipea_stats = I915_READ(I915REG_PIPEASTAT);
430 * Clear the PIPE(A|B)STAT regs before the IIR otherwise 240 pipeb_stats = I915_READ(I915REG_PIPEBSTAT);
431 * we may get extra interrupts.
432 */
433 if (iir & I915_DISPLAY_PIPE_A_EVENT_INTERRUPT) {
434 pipea_stats = I915_READ(I915REG_PIPEASTAT);
435 if (pipea_stats & (I915_START_VBLANK_INTERRUPT_STATUS|
436 I915_VBLANK_INTERRUPT_STATUS))
437 {
438 vblank++;
439 drm_handle_vblank(dev, i915_get_plane(dev, 0));
440 }
441 I915_WRITE(I915REG_PIPEASTAT, pipea_stats);
442 }
443 if (iir & I915_DISPLAY_PIPE_B_EVENT_INTERRUPT) {
444 pipeb_stats = I915_READ(I915REG_PIPEBSTAT);
445 if (pipeb_stats & (I915_START_VBLANK_INTERRUPT_STATUS|
446 I915_VBLANK_INTERRUPT_STATUS))
447 {
448 vblank++;
449 drm_handle_vblank(dev, i915_get_plane(dev, 1));
450 }
451 I915_WRITE(I915REG_PIPEBSTAT, pipeb_stats);
452 }
453 241
454 if (dev_priv->sarea_priv) 242 temp = I915_READ16(I915REG_INT_IDENTITY_R);
455 dev_priv->sarea_priv->last_dispatch = READ_BREADCRUMB(dev_priv);
456 243
457 I915_WRITE(I915REG_INT_IDENTITY_R, iir); 244 temp &= (USER_INT_FLAG | VSYNC_PIPEA_FLAG | VSYNC_PIPEB_FLAG);
458 (void) I915_READ(I915REG_INT_IDENTITY_R); /* Flush posted write */
459 245
460 if (iir & I915_USER_INTERRUPT) { 246 DRM_DEBUG("%s flag=%08x\n", __FUNCTION__, temp);
247
248 if (temp == 0)
249 return IRQ_NONE;
250
251 I915_WRITE16(I915REG_INT_IDENTITY_R, temp);
252 (void) I915_READ16(I915REG_INT_IDENTITY_R);
253 DRM_READMEMORYBARRIER();
254
255 dev_priv->sarea_priv->last_dispatch = READ_BREADCRUMB(dev_priv);
256
257 if (temp & USER_INT_FLAG)
461 DRM_WAKEUP(&dev_priv->irq_queue); 258 DRM_WAKEUP(&dev_priv->irq_queue);
462 } 259
463 if (vblank) { 260 if (temp & (VSYNC_PIPEA_FLAG | VSYNC_PIPEB_FLAG)) {
261 int vblank_pipe = dev_priv->vblank_pipe;
262
263 if ((vblank_pipe &
264 (DRM_I915_VBLANK_PIPE_A | DRM_I915_VBLANK_PIPE_B))
265 == (DRM_I915_VBLANK_PIPE_A | DRM_I915_VBLANK_PIPE_B)) {
266 if (temp & VSYNC_PIPEA_FLAG)
267 atomic_inc(&dev->vbl_received);
268 if (temp & VSYNC_PIPEB_FLAG)
269 atomic_inc(&dev->vbl_received2);
270 } else if (((temp & VSYNC_PIPEA_FLAG) &&
271 (vblank_pipe & DRM_I915_VBLANK_PIPE_A)) ||
272 ((temp & VSYNC_PIPEB_FLAG) &&
273 (vblank_pipe & DRM_I915_VBLANK_PIPE_B)))
274 atomic_inc(&dev->vbl_received);
275
276 DRM_WAKEUP(&dev->vbl_queue);
277 drm_vbl_send_signals(dev);
278
464 if (dev_priv->swaps_pending > 0) 279 if (dev_priv->swaps_pending > 0)
465 drm_locked_tasklet(dev, i915_vblank_tasklet); 280 drm_locked_tasklet(dev, i915_vblank_tasklet);
281 I915_WRITE(I915REG_PIPEASTAT,
282 pipea_stats|I915_VBLANK_INTERRUPT_ENABLE|
283 I915_VBLANK_CLEAR);
284 I915_WRITE(I915REG_PIPEBSTAT,
285 pipeb_stats|I915_VBLANK_INTERRUPT_ENABLE|
286 I915_VBLANK_CLEAR);
466 } 287 }
467 288
468 return IRQ_HANDLED; 289 return IRQ_HANDLED;
469} 290}
470 291
471static int i915_emit_irq(struct drm_device *dev) 292static int i915_emit_irq(struct drm_device * dev)
472{ 293{
473 drm_i915_private_t *dev_priv = dev->dev_private; 294 drm_i915_private_t *dev_priv = dev->dev_private;
474 RING_LOCALS; 295 RING_LOCALS;
@@ -515,12 +336,42 @@ static int i915_wait_irq(struct drm_device * dev, int irq_nr)
515 READ_BREADCRUMB(dev_priv), (int)dev_priv->counter); 336 READ_BREADCRUMB(dev_priv), (int)dev_priv->counter);
516 } 337 }
517 338
518 if (dev_priv->sarea_priv) 339 dev_priv->sarea_priv->last_dispatch = READ_BREADCRUMB(dev_priv);
519 dev_priv->sarea_priv->last_dispatch =
520 READ_BREADCRUMB(dev_priv);
521 return ret; 340 return ret;
522} 341}
523 342
343static int i915_driver_vblank_do_wait(struct drm_device *dev, unsigned int *sequence,
344 atomic_t *counter)
345{
346 drm_i915_private_t *dev_priv = dev->dev_private;
347 unsigned int cur_vblank;
348 int ret = 0;
349
350 if (!dev_priv) {
351 DRM_ERROR("called with no initialization\n");
352 return -EINVAL;
353 }
354
355 DRM_WAIT_ON(ret, dev->vbl_queue, 3 * DRM_HZ,
356 (((cur_vblank = atomic_read(counter))
357 - *sequence) <= (1<<23)));
358
359 *sequence = cur_vblank;
360
361 return ret;
362}
363
364
365int i915_driver_vblank_wait(struct drm_device *dev, unsigned int *sequence)
366{
367 return i915_driver_vblank_do_wait(dev, sequence, &dev->vbl_received);
368}
369
370int i915_driver_vblank_wait2(struct drm_device *dev, unsigned int *sequence)
371{
372 return i915_driver_vblank_do_wait(dev, sequence, &dev->vbl_received2);
373}
374
524/* Needs the lock as it touches the ring. 375/* Needs the lock as it touches the ring.
525 */ 376 */
526int i915_irq_emit(struct drm_device *dev, void *data, 377int i915_irq_emit(struct drm_device *dev, void *data,
@@ -563,96 +414,18 @@ int i915_irq_wait(struct drm_device *dev, void *data,
563 return i915_wait_irq(dev, irqwait->irq_seq); 414 return i915_wait_irq(dev, irqwait->irq_seq);
564} 415}
565 416
566int i915_enable_vblank(struct drm_device *dev, int plane)
567{
568 drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
569 int pipe = i915_get_pipe(dev, plane);
570 u32 pipestat_reg = 0;
571 u32 pipestat;
572
573 switch (pipe) {
574 case 0:
575 pipestat_reg = I915REG_PIPEASTAT;
576 dev_priv->irq_enable_reg |= I915_DISPLAY_PIPE_A_EVENT_INTERRUPT;
577 break;
578 case 1:
579 pipestat_reg = I915REG_PIPEBSTAT;
580 dev_priv->irq_enable_reg |= I915_DISPLAY_PIPE_B_EVENT_INTERRUPT;
581 break;
582 default:
583 DRM_ERROR("tried to enable vblank on non-existent pipe %d\n",
584 pipe);
585 break;
586 }
587
588 if (pipestat_reg)
589 {
590 pipestat = I915_READ (pipestat_reg);
591 /*
592 * Older chips didn't have the start vblank interrupt,
593 * but
594 */
595 if (IS_I965G (dev))
596 pipestat |= I915_START_VBLANK_INTERRUPT_ENABLE;
597 else
598 pipestat |= I915_VBLANK_INTERRUPT_ENABLE;
599 /*
600 * Clear any pending status
601 */
602 pipestat |= (I915_START_VBLANK_INTERRUPT_STATUS |
603 I915_VBLANK_INTERRUPT_STATUS);
604 I915_WRITE(pipestat_reg, pipestat);
605 }
606 I915_WRITE(I915REG_INT_ENABLE_R, dev_priv->irq_enable_reg);
607
608 return 0;
609}
610
611void i915_disable_vblank(struct drm_device *dev, int plane)
612{
613 drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
614 int pipe = i915_get_pipe(dev, plane);
615 u32 pipestat_reg = 0;
616 u32 pipestat;
617
618 switch (pipe) {
619 case 0:
620 pipestat_reg = I915REG_PIPEASTAT;
621 dev_priv->irq_enable_reg &= ~I915_DISPLAY_PIPE_A_EVENT_INTERRUPT;
622 break;
623 case 1:
624 pipestat_reg = I915REG_PIPEBSTAT;
625 dev_priv->irq_enable_reg &= ~I915_DISPLAY_PIPE_B_EVENT_INTERRUPT;
626 break;
627 default:
628 DRM_ERROR("tried to disable vblank on non-existent pipe %d\n",
629 pipe);
630 break;
631 }
632
633 I915_WRITE(I915REG_INT_ENABLE_R, dev_priv->irq_enable_reg);
634 if (pipestat_reg)
635 {
636 pipestat = I915_READ (pipestat_reg);
637 pipestat &= ~(I915_START_VBLANK_INTERRUPT_ENABLE |
638 I915_VBLANK_INTERRUPT_ENABLE);
639 /*
640 * Clear any pending status
641 */
642 pipestat |= (I915_START_VBLANK_INTERRUPT_STATUS |
643 I915_VBLANK_INTERRUPT_STATUS);
644 I915_WRITE(pipestat_reg, pipestat);
645 }
646}
647
648static void i915_enable_interrupt (struct drm_device *dev) 417static void i915_enable_interrupt (struct drm_device *dev)
649{ 418{
650 drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; 419 drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
420 u16 flag;
651 421
652 dev_priv->irq_enable_reg |= I915_USER_INTERRUPT; 422 flag = 0;
423 if (dev_priv->vblank_pipe & DRM_I915_VBLANK_PIPE_A)
424 flag |= VSYNC_PIPEA_FLAG;
425 if (dev_priv->vblank_pipe & DRM_I915_VBLANK_PIPE_B)
426 flag |= VSYNC_PIPEB_FLAG;
653 427
654 I915_WRITE(I915REG_INT_ENABLE_R, dev_priv->irq_enable_reg); 428 I915_WRITE16(I915REG_INT_ENABLE_R, USER_INT_FLAG | flag);
655 dev_priv->irq_enabled = 1;
656} 429}
657 430
658/* Set the vblank monitor pipe 431/* Set the vblank monitor pipe
@@ -675,6 +448,8 @@ int i915_vblank_pipe_set(struct drm_device *dev, void *data,
675 448
676 dev_priv->vblank_pipe = pipe->pipe; 449 dev_priv->vblank_pipe = pipe->pipe;
677 450
451 i915_enable_interrupt (dev);
452
678 return 0; 453 return 0;
679} 454}
680 455
@@ -692,9 +467,9 @@ int i915_vblank_pipe_get(struct drm_device *dev, void *data,
692 467
693 flag = I915_READ(I915REG_INT_ENABLE_R); 468 flag = I915_READ(I915REG_INT_ENABLE_R);
694 pipe->pipe = 0; 469 pipe->pipe = 0;
695 if (flag & I915_DISPLAY_PIPE_A_EVENT_INTERRUPT) 470 if (flag & VSYNC_PIPEA_FLAG)
696 pipe->pipe |= DRM_I915_VBLANK_PIPE_A; 471 pipe->pipe |= DRM_I915_VBLANK_PIPE_A;
697 if (flag & I915_DISPLAY_PIPE_B_EVENT_INTERRUPT) 472 if (flag & VSYNC_PIPEB_FLAG)
698 pipe->pipe |= DRM_I915_VBLANK_PIPE_B; 473 pipe->pipe |= DRM_I915_VBLANK_PIPE_B;
699 474
700 return 0; 475 return 0;
@@ -709,30 +484,27 @@ int i915_vblank_swap(struct drm_device *dev, void *data,
709 drm_i915_private_t *dev_priv = dev->dev_private; 484 drm_i915_private_t *dev_priv = dev->dev_private;
710 drm_i915_vblank_swap_t *swap = data; 485 drm_i915_vblank_swap_t *swap = data;
711 drm_i915_vbl_swap_t *vbl_swap; 486 drm_i915_vbl_swap_t *vbl_swap;
712 unsigned int pipe, seqtype, curseq, plane; 487 unsigned int pipe, seqtype, curseq;
713 unsigned long irqflags; 488 unsigned long irqflags;
714 struct list_head *list; 489 struct list_head *list;
715 int ret;
716 490
717 if (!dev_priv) { 491 if (!dev_priv) {
718 DRM_ERROR("%s called with no initialization\n", __func__); 492 DRM_ERROR("%s called with no initialization\n", __func__);
719 return -EINVAL; 493 return -EINVAL;
720 } 494 }
721 495
722 if (!dev_priv->sarea_priv || dev_priv->sarea_priv->rotation) { 496 if (dev_priv->sarea_priv->rotation) {
723 DRM_DEBUG("Rotation not supported\n"); 497 DRM_DEBUG("Rotation not supported\n");
724 return -EINVAL; 498 return -EINVAL;
725 } 499 }
726 500
727 if (swap->seqtype & ~(_DRM_VBLANK_RELATIVE | _DRM_VBLANK_ABSOLUTE | 501 if (swap->seqtype & ~(_DRM_VBLANK_RELATIVE | _DRM_VBLANK_ABSOLUTE |
728 _DRM_VBLANK_SECONDARY | _DRM_VBLANK_NEXTONMISS | 502 _DRM_VBLANK_SECONDARY | _DRM_VBLANK_NEXTONMISS)) {
729 _DRM_VBLANK_FLIP)) {
730 DRM_ERROR("Invalid sequence type 0x%x\n", swap->seqtype); 503 DRM_ERROR("Invalid sequence type 0x%x\n", swap->seqtype);
731 return -EINVAL; 504 return -EINVAL;
732 } 505 }
733 506
734 plane = (swap->seqtype & _DRM_VBLANK_SECONDARY) ? 1 : 0; 507 pipe = (swap->seqtype & _DRM_VBLANK_SECONDARY) ? 1 : 0;
735 pipe = i915_get_pipe(dev, plane);
736 508
737 seqtype = swap->seqtype & (_DRM_VBLANK_RELATIVE | _DRM_VBLANK_ABSOLUTE); 509 seqtype = swap->seqtype & (_DRM_VBLANK_RELATIVE | _DRM_VBLANK_ABSOLUTE);
738 510
@@ -743,11 +515,6 @@ int i915_vblank_swap(struct drm_device *dev, void *data,
743 515
744 spin_lock_irqsave(&dev->drw_lock, irqflags); 516 spin_lock_irqsave(&dev->drw_lock, irqflags);
745 517
746 /* It makes no sense to schedule a swap for a drawable that doesn't have
747 * valid information at this point. E.g. this could mean that the X
748 * server is too old to push drawable information to the DRM, in which
749 * case all such swaps would become ineffective.
750 */
751 if (!drm_get_drawable_info(dev, swap->drawable)) { 518 if (!drm_get_drawable_info(dev, swap->drawable)) {
752 spin_unlock_irqrestore(&dev->drw_lock, irqflags); 519 spin_unlock_irqrestore(&dev->drw_lock, irqflags);
753 DRM_DEBUG("Invalid drawable ID %d\n", swap->drawable); 520 DRM_DEBUG("Invalid drawable ID %d\n", swap->drawable);
@@ -756,8 +523,7 @@ int i915_vblank_swap(struct drm_device *dev, void *data,
756 523
757 spin_unlock_irqrestore(&dev->drw_lock, irqflags); 524 spin_unlock_irqrestore(&dev->drw_lock, irqflags);
758 525
759 drm_update_vblank_count(dev, pipe); 526 curseq = atomic_read(pipe ? &dev->vbl_received2 : &dev->vbl_received);
760 curseq = drm_vblank_count(dev, pipe);
761 527
762 if (seqtype == _DRM_VBLANK_RELATIVE) 528 if (seqtype == _DRM_VBLANK_RELATIVE)
763 swap->sequence += curseq; 529 swap->sequence += curseq;
@@ -771,43 +537,14 @@ int i915_vblank_swap(struct drm_device *dev, void *data,
771 } 537 }
772 } 538 }
773 539
774 if (swap->seqtype & _DRM_VBLANK_FLIP) {
775 swap->sequence--;
776
777 if ((curseq - swap->sequence) <= (1<<23)) {
778 struct drm_drawable_info *drw;
779
780 LOCK_TEST_WITH_RETURN(dev, file_priv);
781
782 spin_lock_irqsave(&dev->drw_lock, irqflags);
783
784 drw = drm_get_drawable_info(dev, swap->drawable);
785
786 if (!drw) {
787 spin_unlock_irqrestore(&dev->drw_lock,
788 irqflags);
789 DRM_DEBUG("Invalid drawable ID %d\n",
790 swap->drawable);
791 return -EINVAL;
792 }
793
794 i915_dispatch_vsync_flip(dev, drw, plane);
795
796 spin_unlock_irqrestore(&dev->drw_lock, irqflags);
797
798 return 0;
799 }
800 }
801
802 spin_lock_irqsave(&dev_priv->swaps_lock, irqflags); 540 spin_lock_irqsave(&dev_priv->swaps_lock, irqflags);
803 541
804 list_for_each(list, &dev_priv->vbl_swaps.head) { 542 list_for_each(list, &dev_priv->vbl_swaps.head) {
805 vbl_swap = list_entry(list, drm_i915_vbl_swap_t, head); 543 vbl_swap = list_entry(list, drm_i915_vbl_swap_t, head);
806 544
807 if (vbl_swap->drw_id == swap->drawable && 545 if (vbl_swap->drw_id == swap->drawable &&
808 vbl_swap->plane == plane && 546 vbl_swap->pipe == pipe &&
809 vbl_swap->sequence == swap->sequence) { 547 vbl_swap->sequence == swap->sequence) {
810 vbl_swap->flip = (swap->seqtype & _DRM_VBLANK_FLIP);
811 spin_unlock_irqrestore(&dev_priv->swaps_lock, irqflags); 548 spin_unlock_irqrestore(&dev_priv->swaps_lock, irqflags);
812 DRM_DEBUG("Already scheduled\n"); 549 DRM_DEBUG("Already scheduled\n");
813 return 0; 550 return 0;
@@ -830,19 +567,9 @@ int i915_vblank_swap(struct drm_device *dev, void *data,
830 567
831 DRM_DEBUG("\n"); 568 DRM_DEBUG("\n");
832 569
833 ret = drm_vblank_get(dev, pipe);
834 if (ret) {
835 drm_free(vbl_swap, sizeof(*vbl_swap), DRM_MEM_DRIVER);
836 return ret;
837 }
838
839 vbl_swap->drw_id = swap->drawable; 570 vbl_swap->drw_id = swap->drawable;
840 vbl_swap->plane = plane; 571 vbl_swap->pipe = pipe;
841 vbl_swap->sequence = swap->sequence; 572 vbl_swap->sequence = swap->sequence;
842 vbl_swap->flip = (swap->seqtype & _DRM_VBLANK_FLIP);
843
844 if (vbl_swap->flip)
845 swap->sequence++;
846 573
847 spin_lock_irqsave(&dev_priv->swaps_lock, irqflags); 574 spin_lock_irqsave(&dev_priv->swaps_lock, irqflags);
848 575
@@ -860,57 +587,37 @@ void i915_driver_irq_preinstall(struct drm_device * dev)
860{ 587{
861 drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; 588 drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
862 589
863 I915_WRITE16(I915REG_HWSTAM, 0xeffe); 590 I915_WRITE16(I915REG_HWSTAM, 0xfffe);
864 I915_WRITE16(I915REG_INT_MASK_R, 0x0); 591 I915_WRITE16(I915REG_INT_MASK_R, 0x0);
865 I915_WRITE16(I915REG_INT_ENABLE_R, 0x0); 592 I915_WRITE16(I915REG_INT_ENABLE_R, 0x0);
866} 593}
867 594
868int i915_driver_irq_postinstall(struct drm_device * dev) 595void i915_driver_irq_postinstall(struct drm_device * dev)
869{ 596{
870 drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; 597 drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
871 int ret, num_pipes = 2;
872 598
873 spin_lock_init(&dev_priv->swaps_lock); 599 spin_lock_init(&dev_priv->swaps_lock);
874 INIT_LIST_HEAD(&dev_priv->vbl_swaps.head); 600 INIT_LIST_HEAD(&dev_priv->vbl_swaps.head);
875 dev_priv->swaps_pending = 0; 601 dev_priv->swaps_pending = 0;
876 602
877 dev_priv->user_irq_refcount = 0; 603 if (!dev_priv->vblank_pipe)
878 dev_priv->irq_enable_reg = 0; 604 dev_priv->vblank_pipe = DRM_I915_VBLANK_PIPE_A;
879
880 ret = drm_vblank_init(dev, num_pipes);
881 if (ret)
882 return ret;
883
884 dev->max_vblank_count = 0xffffff; /* only 24 bits of frame count */
885
886 i915_enable_interrupt(dev); 605 i915_enable_interrupt(dev);
887 DRM_INIT_WAITQUEUE(&dev_priv->irq_queue); 606 DRM_INIT_WAITQUEUE(&dev_priv->irq_queue);
888
889 /*
890 * Initialize the hardware status page IRQ location.
891 */
892
893 I915_WRITE(I915REG_INSTPM, (1 << 5) | (1 << 21));
894 return 0;
895} 607}
896 608
897void i915_driver_irq_uninstall(struct drm_device * dev) 609void i915_driver_irq_uninstall(struct drm_device * dev)
898{ 610{
899 drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; 611 drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
900 u32 temp; 612 u16 temp;
901 613
902 if (!dev_priv) 614 if (!dev_priv)
903 return; 615 return;
904 616
905 dev_priv->irq_enabled = 0; 617 I915_WRITE16(I915REG_HWSTAM, 0xffff);
906 I915_WRITE(I915REG_HWSTAM, 0xffffffff); 618 I915_WRITE16(I915REG_INT_MASK_R, 0xffff);
907 I915_WRITE(I915REG_INT_MASK_R, 0xffffffff); 619 I915_WRITE16(I915REG_INT_ENABLE_R, 0x0);
908 I915_WRITE(I915REG_INT_ENABLE_R, 0x0); 620
909 621 temp = I915_READ16(I915REG_INT_IDENTITY_R);
910 temp = I915_READ(I915REG_PIPEASTAT); 622 I915_WRITE16(I915REG_INT_IDENTITY_R, temp);
911 I915_WRITE(I915REG_PIPEASTAT, temp);
912 temp = I915_READ(I915REG_PIPEBSTAT);
913 I915_WRITE(I915REG_PIPEBSTAT, temp);
914 temp = I915_READ(I915REG_INT_IDENTITY_R);
915 I915_WRITE(I915REG_INT_IDENTITY_R, temp);
916} 623}
diff --git a/drivers/char/drm/mga_drv.c b/drivers/char/drm/mga_drv.c
index 6b3790939e76..5572939fc7d1 100644
--- a/drivers/char/drm/mga_drv.c
+++ b/drivers/char/drm/mga_drv.c
@@ -45,16 +45,15 @@ static struct pci_device_id pciidlist[] = {
45static struct drm_driver driver = { 45static struct drm_driver driver = {
46 .driver_features = 46 .driver_features =
47 DRIVER_USE_AGP | DRIVER_USE_MTRR | DRIVER_PCI_DMA | 47 DRIVER_USE_AGP | DRIVER_USE_MTRR | DRIVER_PCI_DMA |
48 DRIVER_HAVE_DMA | DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED, 48 DRIVER_HAVE_DMA | DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED |
49 DRIVER_IRQ_VBL,
49 .dev_priv_size = sizeof(drm_mga_buf_priv_t), 50 .dev_priv_size = sizeof(drm_mga_buf_priv_t),
50 .load = mga_driver_load, 51 .load = mga_driver_load,
51 .unload = mga_driver_unload, 52 .unload = mga_driver_unload,
52 .lastclose = mga_driver_lastclose, 53 .lastclose = mga_driver_lastclose,
53 .dma_quiescent = mga_driver_dma_quiescent, 54 .dma_quiescent = mga_driver_dma_quiescent,
54 .device_is_agp = mga_driver_device_is_agp, 55 .device_is_agp = mga_driver_device_is_agp,
55 .get_vblank_counter = mga_get_vblank_counter, 56 .vblank_wait = mga_driver_vblank_wait,
56 .enable_vblank = mga_enable_vblank,
57 .disable_vblank = mga_disable_vblank,
58 .irq_preinstall = mga_driver_irq_preinstall, 57 .irq_preinstall = mga_driver_irq_preinstall,
59 .irq_postinstall = mga_driver_irq_postinstall, 58 .irq_postinstall = mga_driver_irq_postinstall,
60 .irq_uninstall = mga_driver_irq_uninstall, 59 .irq_uninstall = mga_driver_irq_uninstall,
diff --git a/drivers/char/drm/mga_drv.h b/drivers/char/drm/mga_drv.h
index 8f7291f36363..f6ebd24bd587 100644
--- a/drivers/char/drm/mga_drv.h
+++ b/drivers/char/drm/mga_drv.h
@@ -120,7 +120,6 @@ typedef struct drm_mga_private {
120 u32 clear_cmd; 120 u32 clear_cmd;
121 u32 maccess; 121 u32 maccess;
122 122
123 atomic_t vbl_received; /**< Number of vblanks received. */
124 wait_queue_head_t fence_queue; 123 wait_queue_head_t fence_queue;
125 atomic_t last_fence_retired; 124 atomic_t last_fence_retired;
126 u32 next_fence_to_post; 125 u32 next_fence_to_post;
@@ -182,14 +181,11 @@ extern int mga_warp_install_microcode(drm_mga_private_t * dev_priv);
182extern int mga_warp_init(drm_mga_private_t * dev_priv); 181extern int mga_warp_init(drm_mga_private_t * dev_priv);
183 182
184 /* mga_irq.c */ 183 /* mga_irq.c */
185extern int mga_enable_vblank(struct drm_device *dev, int crtc);
186extern void mga_disable_vblank(struct drm_device *dev, int crtc);
187extern u32 mga_get_vblank_counter(struct drm_device *dev, int crtc);
188extern int mga_driver_fence_wait(struct drm_device * dev, unsigned int *sequence); 184extern int mga_driver_fence_wait(struct drm_device * dev, unsigned int *sequence);
189extern int mga_driver_vblank_wait(struct drm_device * dev, unsigned int *sequence); 185extern int mga_driver_vblank_wait(struct drm_device * dev, unsigned int *sequence);
190extern irqreturn_t mga_driver_irq_handler(DRM_IRQ_ARGS); 186extern irqreturn_t mga_driver_irq_handler(DRM_IRQ_ARGS);
191extern void mga_driver_irq_preinstall(struct drm_device * dev); 187extern void mga_driver_irq_preinstall(struct drm_device * dev);
192extern int mga_driver_irq_postinstall(struct drm_device * dev); 188extern void mga_driver_irq_postinstall(struct drm_device * dev);
193extern void mga_driver_irq_uninstall(struct drm_device * dev); 189extern void mga_driver_irq_uninstall(struct drm_device * dev);
194extern long mga_compat_ioctl(struct file *filp, unsigned int cmd, 190extern long mga_compat_ioctl(struct file *filp, unsigned int cmd,
195 unsigned long arg); 191 unsigned long arg);
diff --git a/drivers/char/drm/mga_irq.c b/drivers/char/drm/mga_irq.c
index 06852fb4b278..9302cb8f0f83 100644
--- a/drivers/char/drm/mga_irq.c
+++ b/drivers/char/drm/mga_irq.c
@@ -35,20 +35,6 @@
35#include "mga_drm.h" 35#include "mga_drm.h"
36#include "mga_drv.h" 36#include "mga_drv.h"
37 37
38u32 mga_get_vblank_counter(struct drm_device *dev, int crtc)
39{
40 const drm_mga_private_t *const dev_priv =
41 (drm_mga_private_t *) dev->dev_private;
42
43 if (crtc != 0) {
44 return 0;
45 }
46
47
48 return atomic_read(&dev_priv->vbl_received);
49}
50
51
52irqreturn_t mga_driver_irq_handler(DRM_IRQ_ARGS) 38irqreturn_t mga_driver_irq_handler(DRM_IRQ_ARGS)
53{ 39{
54 struct drm_device *dev = (struct drm_device *) arg; 40 struct drm_device *dev = (struct drm_device *) arg;
@@ -61,8 +47,9 @@ irqreturn_t mga_driver_irq_handler(DRM_IRQ_ARGS)
61 /* VBLANK interrupt */ 47 /* VBLANK interrupt */
62 if (status & MGA_VLINEPEN) { 48 if (status & MGA_VLINEPEN) {
63 MGA_WRITE(MGA_ICLEAR, MGA_VLINEICLR); 49 MGA_WRITE(MGA_ICLEAR, MGA_VLINEICLR);
64 atomic_inc(&dev_priv->vbl_received); 50 atomic_inc(&dev->vbl_received);
65 drm_handle_vblank(dev, 0); 51 DRM_WAKEUP(&dev->vbl_queue);
52 drm_vbl_send_signals(dev);
66 handled = 1; 53 handled = 1;
67 } 54 }
68 55
@@ -91,34 +78,22 @@ irqreturn_t mga_driver_irq_handler(DRM_IRQ_ARGS)
91 return IRQ_NONE; 78 return IRQ_NONE;
92} 79}
93 80
94int mga_enable_vblank(struct drm_device *dev, int crtc) 81int mga_driver_vblank_wait(struct drm_device * dev, unsigned int *sequence)
95{ 82{
96 drm_mga_private_t *dev_priv = (drm_mga_private_t *) dev->dev_private; 83 unsigned int cur_vblank;
97 84 int ret = 0;
98 if (crtc != 0) {
99 DRM_ERROR("tried to enable vblank on non-existent crtc %d\n",
100 crtc);
101 return 0;
102 }
103
104 MGA_WRITE(MGA_IEN, MGA_VLINEIEN | MGA_SOFTRAPEN);
105 return 0;
106}
107 85
86 /* Assume that the user has missed the current sequence number
87 * by about a day rather than she wants to wait for years
88 * using vertical blanks...
89 */
90 DRM_WAIT_ON(ret, dev->vbl_queue, 3 * DRM_HZ,
91 (((cur_vblank = atomic_read(&dev->vbl_received))
92 - *sequence) <= (1 << 23)));
108 93
109void mga_disable_vblank(struct drm_device *dev, int crtc) 94 *sequence = cur_vblank;
110{
111 if (crtc != 0) {
112 DRM_ERROR("tried to disable vblank on non-existent crtc %d\n",
113 crtc);
114 }
115 95
116 /* Do *NOT* disable the vertical refresh interrupt. MGA doesn't have 96 return ret;
117 * a nice hardware counter that tracks the number of refreshes when
118 * the interrupt is disabled, and the kernel doesn't know the refresh
119 * rate to calculate an estimate.
120 */
121 /* MGA_WRITE(MGA_IEN, MGA_VLINEIEN | MGA_SOFTRAPEN); */
122} 97}
123 98
124int mga_driver_fence_wait(struct drm_device * dev, unsigned int *sequence) 99int mga_driver_fence_wait(struct drm_device * dev, unsigned int *sequence)
@@ -150,22 +125,14 @@ void mga_driver_irq_preinstall(struct drm_device * dev)
150 MGA_WRITE(MGA_ICLEAR, ~0); 125 MGA_WRITE(MGA_ICLEAR, ~0);
151} 126}
152 127
153int mga_driver_irq_postinstall(struct drm_device * dev) 128void mga_driver_irq_postinstall(struct drm_device * dev)
154{ 129{
155 drm_mga_private_t *dev_priv = (drm_mga_private_t *) dev->dev_private; 130 drm_mga_private_t *dev_priv = (drm_mga_private_t *) dev->dev_private;
156 int ret;
157
158 ret = drm_vblank_init(dev, 1);
159 if (ret)
160 return ret;
161 131
162 DRM_INIT_WAITQUEUE(&dev_priv->fence_queue); 132 DRM_INIT_WAITQUEUE(&dev_priv->fence_queue);
163 133
164 /* Turn on soft trap interrupt. Vertical blank interrupts are enabled 134 /* Turn on vertical blank interrupt and soft trap interrupt. */
165 * in mga_enable_vblank. 135 MGA_WRITE(MGA_IEN, MGA_VLINEIEN | MGA_SOFTRAPEN);
166 */
167 MGA_WRITE(MGA_IEN, MGA_SOFTRAPEN);
168 return 0;
169} 136}
170 137
171void mga_driver_irq_uninstall(struct drm_device * dev) 138void mga_driver_irq_uninstall(struct drm_device * dev)
diff --git a/drivers/char/drm/r128_drv.c b/drivers/char/drm/r128_drv.c
index 2888aa01ebc7..6108e7587e12 100644
--- a/drivers/char/drm/r128_drv.c
+++ b/drivers/char/drm/r128_drv.c
@@ -43,13 +43,12 @@ static struct pci_device_id pciidlist[] = {
43static struct drm_driver driver = { 43static struct drm_driver driver = {
44 .driver_features = 44 .driver_features =
45 DRIVER_USE_AGP | DRIVER_USE_MTRR | DRIVER_PCI_DMA | DRIVER_SG | 45 DRIVER_USE_AGP | DRIVER_USE_MTRR | DRIVER_PCI_DMA | DRIVER_SG |
46 DRIVER_HAVE_DMA | DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED, 46 DRIVER_HAVE_DMA | DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED |
47 DRIVER_IRQ_VBL,
47 .dev_priv_size = sizeof(drm_r128_buf_priv_t), 48 .dev_priv_size = sizeof(drm_r128_buf_priv_t),
48 .preclose = r128_driver_preclose, 49 .preclose = r128_driver_preclose,
49 .lastclose = r128_driver_lastclose, 50 .lastclose = r128_driver_lastclose,
50 .get_vblank_counter = r128_get_vblank_counter, 51 .vblank_wait = r128_driver_vblank_wait,
51 .enable_vblank = r128_enable_vblank,
52 .disable_vblank = r128_disable_vblank,
53 .irq_preinstall = r128_driver_irq_preinstall, 52 .irq_preinstall = r128_driver_irq_preinstall,
54 .irq_postinstall = r128_driver_irq_postinstall, 53 .irq_postinstall = r128_driver_irq_postinstall,
55 .irq_uninstall = r128_driver_irq_uninstall, 54 .irq_uninstall = r128_driver_irq_uninstall,
diff --git a/drivers/char/drm/r128_drv.h b/drivers/char/drm/r128_drv.h
index 80af9e09e75d..011105e51ac6 100644
--- a/drivers/char/drm/r128_drv.h
+++ b/drivers/char/drm/r128_drv.h
@@ -97,8 +97,6 @@ typedef struct drm_r128_private {
97 u32 crtc_offset; 97 u32 crtc_offset;
98 u32 crtc_offset_cntl; 98 u32 crtc_offset_cntl;
99 99
100 atomic_t vbl_received;
101
102 u32 color_fmt; 100 u32 color_fmt;
103 unsigned int front_offset; 101 unsigned int front_offset;
104 unsigned int front_pitch; 102 unsigned int front_pitch;
@@ -151,12 +149,11 @@ extern int r128_wait_ring(drm_r128_private_t * dev_priv, int n);
151extern int r128_do_cce_idle(drm_r128_private_t * dev_priv); 149extern int r128_do_cce_idle(drm_r128_private_t * dev_priv);
152extern int r128_do_cleanup_cce(struct drm_device * dev); 150extern int r128_do_cleanup_cce(struct drm_device * dev);
153 151
154extern int r128_enable_vblank(struct drm_device *dev, int crtc); 152extern int r128_driver_vblank_wait(struct drm_device * dev, unsigned int *sequence);
155extern void r128_disable_vblank(struct drm_device *dev, int crtc); 153
156extern u32 r128_get_vblank_counter(struct drm_device *dev, int crtc);
157extern irqreturn_t r128_driver_irq_handler(DRM_IRQ_ARGS); 154extern irqreturn_t r128_driver_irq_handler(DRM_IRQ_ARGS);
158extern void r128_driver_irq_preinstall(struct drm_device * dev); 155extern void r128_driver_irq_preinstall(struct drm_device * dev);
159extern int r128_driver_irq_postinstall(struct drm_device * dev); 156extern void r128_driver_irq_postinstall(struct drm_device * dev);
160extern void r128_driver_irq_uninstall(struct drm_device * dev); 157extern void r128_driver_irq_uninstall(struct drm_device * dev);
161extern void r128_driver_lastclose(struct drm_device * dev); 158extern void r128_driver_lastclose(struct drm_device * dev);
162extern void r128_driver_preclose(struct drm_device * dev, 159extern void r128_driver_preclose(struct drm_device * dev,
diff --git a/drivers/char/drm/r128_irq.c b/drivers/char/drm/r128_irq.c
index 5b95bd898f95..c76fdca7662d 100644
--- a/drivers/char/drm/r128_irq.c
+++ b/drivers/char/drm/r128_irq.c
@@ -35,16 +35,6 @@
35#include "r128_drm.h" 35#include "r128_drm.h"
36#include "r128_drv.h" 36#include "r128_drv.h"
37 37
38u32 r128_get_vblank_counter(struct drm_device *dev, int crtc)
39{
40 const drm_r128_private_t *dev_priv = dev->dev_private;
41
42 if (crtc != 0)
43 return 0;
44
45 return atomic_read(&dev_priv->vbl_received);
46}
47
48irqreturn_t r128_driver_irq_handler(DRM_IRQ_ARGS) 38irqreturn_t r128_driver_irq_handler(DRM_IRQ_ARGS)
49{ 39{
50 struct drm_device *dev = (struct drm_device *) arg; 40 struct drm_device *dev = (struct drm_device *) arg;
@@ -56,38 +46,30 @@ irqreturn_t r128_driver_irq_handler(DRM_IRQ_ARGS)
56 /* VBLANK interrupt */ 46 /* VBLANK interrupt */
57 if (status & R128_CRTC_VBLANK_INT) { 47 if (status & R128_CRTC_VBLANK_INT) {
58 R128_WRITE(R128_GEN_INT_STATUS, R128_CRTC_VBLANK_INT_AK); 48 R128_WRITE(R128_GEN_INT_STATUS, R128_CRTC_VBLANK_INT_AK);
59 atomic_inc(&dev_priv->vbl_received); 49 atomic_inc(&dev->vbl_received);
60 drm_handle_vblank(dev, 0); 50 DRM_WAKEUP(&dev->vbl_queue);
51 drm_vbl_send_signals(dev);
61 return IRQ_HANDLED; 52 return IRQ_HANDLED;
62 } 53 }
63 return IRQ_NONE; 54 return IRQ_NONE;
64} 55}
65 56
66int r128_enable_vblank(struct drm_device *dev, int crtc) 57int r128_driver_vblank_wait(struct drm_device * dev, unsigned int *sequence)
67{ 58{
68 drm_r128_private_t *dev_priv = dev->dev_private; 59 unsigned int cur_vblank;
69 60 int ret = 0;
70 if (crtc != 0) {
71 DRM_ERROR("%s: bad crtc %d\n", __FUNCTION__, crtc);
72 return -EINVAL;
73 }
74 61
75 R128_WRITE(R128_GEN_INT_CNTL, R128_CRTC_VBLANK_INT_EN); 62 /* Assume that the user has missed the current sequence number
76 return 0; 63 * by about a day rather than she wants to wait for years
77} 64 * using vertical blanks...
65 */
66 DRM_WAIT_ON(ret, dev->vbl_queue, 3 * DRM_HZ,
67 (((cur_vblank = atomic_read(&dev->vbl_received))
68 - *sequence) <= (1 << 23)));
78 69
79void r128_disable_vblank(struct drm_device *dev, int crtc) 70 *sequence = cur_vblank;
80{
81 if (crtc != 0)
82 DRM_ERROR("%s: bad crtc %d\n", __FUNCTION__, crtc);
83 71
84 /* 72 return ret;
85 * FIXME: implement proper interrupt disable by using the vblank
86 * counter register (if available)
87 *
88 * R128_WRITE(R128_GEN_INT_CNTL,
89 * R128_READ(R128_GEN_INT_CNTL) & ~R128_CRTC_VBLANK_INT_EN);
90 */
91} 73}
92 74
93void r128_driver_irq_preinstall(struct drm_device * dev) 75void r128_driver_irq_preinstall(struct drm_device * dev)
@@ -100,9 +82,12 @@ void r128_driver_irq_preinstall(struct drm_device * dev)
100 R128_WRITE(R128_GEN_INT_STATUS, R128_CRTC_VBLANK_INT_AK); 82 R128_WRITE(R128_GEN_INT_STATUS, R128_CRTC_VBLANK_INT_AK);
101} 83}
102 84
103int r128_driver_irq_postinstall(struct drm_device * dev) 85void r128_driver_irq_postinstall(struct drm_device * dev)
104{ 86{
105 return drm_vblank_init(dev, 1); 87 drm_r128_private_t *dev_priv = (drm_r128_private_t *) dev->dev_private;
88
89 /* Turn on VBL interrupt */
90 R128_WRITE(R128_GEN_INT_CNTL, R128_CRTC_VBLANK_INT_EN);
106} 91}
107 92
108void r128_driver_irq_uninstall(struct drm_device * dev) 93void r128_driver_irq_uninstall(struct drm_device * dev)
diff --git a/drivers/char/drm/radeon_drv.c b/drivers/char/drm/radeon_drv.c
index a2610319624d..349ac3d3b848 100644
--- a/drivers/char/drm/radeon_drv.c
+++ b/drivers/char/drm/radeon_drv.c
@@ -59,7 +59,8 @@ static struct pci_device_id pciidlist[] = {
59static struct drm_driver driver = { 59static struct drm_driver driver = {
60 .driver_features = 60 .driver_features =
61 DRIVER_USE_AGP | DRIVER_USE_MTRR | DRIVER_PCI_DMA | DRIVER_SG | 61 DRIVER_USE_AGP | DRIVER_USE_MTRR | DRIVER_PCI_DMA | DRIVER_SG |
62 DRIVER_HAVE_IRQ | DRIVER_HAVE_DMA | DRIVER_IRQ_SHARED, 62 DRIVER_HAVE_IRQ | DRIVER_HAVE_DMA | DRIVER_IRQ_SHARED |
63 DRIVER_IRQ_VBL | DRIVER_IRQ_VBL2,
63 .dev_priv_size = sizeof(drm_radeon_buf_priv_t), 64 .dev_priv_size = sizeof(drm_radeon_buf_priv_t),
64 .load = radeon_driver_load, 65 .load = radeon_driver_load,
65 .firstopen = radeon_driver_firstopen, 66 .firstopen = radeon_driver_firstopen,
@@ -68,9 +69,8 @@ static struct drm_driver driver = {
68 .postclose = radeon_driver_postclose, 69 .postclose = radeon_driver_postclose,
69 .lastclose = radeon_driver_lastclose, 70 .lastclose = radeon_driver_lastclose,
70 .unload = radeon_driver_unload, 71 .unload = radeon_driver_unload,
71 .get_vblank_counter = radeon_get_vblank_counter, 72 .vblank_wait = radeon_driver_vblank_wait,
72 .enable_vblank = radeon_enable_vblank, 73 .vblank_wait2 = radeon_driver_vblank_wait2,
73 .disable_vblank = radeon_disable_vblank,
74 .dri_library_name = dri_library_name, 74 .dri_library_name = dri_library_name,
75 .irq_preinstall = radeon_driver_irq_preinstall, 75 .irq_preinstall = radeon_driver_irq_preinstall,
76 .irq_postinstall = radeon_driver_irq_postinstall, 76 .irq_postinstall = radeon_driver_irq_postinstall,
diff --git a/drivers/char/drm/radeon_drv.h b/drivers/char/drm/radeon_drv.h
index b791420bd3d9..173ae620223a 100644
--- a/drivers/char/drm/radeon_drv.h
+++ b/drivers/char/drm/radeon_drv.h
@@ -304,9 +304,6 @@ typedef struct drm_radeon_private {
304 304
305 u32 scratch_ages[5]; 305 u32 scratch_ages[5];
306 306
307 unsigned int crtc_last_cnt;
308 unsigned int crtc2_last_cnt;
309
310 /* starting from here on, data is preserved accross an open */ 307 /* starting from here on, data is preserved accross an open */
311 uint32_t flags; /* see radeon_chip_flags */ 308 uint32_t flags; /* see radeon_chip_flags */
312 unsigned long fb_aper_offset; 309 unsigned long fb_aper_offset;
@@ -377,13 +374,13 @@ extern int radeon_irq_emit(struct drm_device *dev, void *data, struct drm_file *
377extern int radeon_irq_wait(struct drm_device *dev, void *data, struct drm_file *file_priv); 374extern int radeon_irq_wait(struct drm_device *dev, void *data, struct drm_file *file_priv);
378 375
379extern void radeon_do_release(struct drm_device * dev); 376extern void radeon_do_release(struct drm_device * dev);
380extern u32 radeon_get_vblank_counter(struct drm_device *dev, int crtc); 377extern int radeon_driver_vblank_wait(struct drm_device * dev,
381extern int radeon_enable_vblank(struct drm_device *dev, int crtc); 378 unsigned int *sequence);
382extern void radeon_disable_vblank(struct drm_device *dev, int crtc); 379extern int radeon_driver_vblank_wait2(struct drm_device * dev,
383extern void radeon_do_release(struct drm_device * dev); 380 unsigned int *sequence);
384extern irqreturn_t radeon_driver_irq_handler(DRM_IRQ_ARGS); 381extern irqreturn_t radeon_driver_irq_handler(DRM_IRQ_ARGS);
385extern void radeon_driver_irq_preinstall(struct drm_device * dev); 382extern void radeon_driver_irq_preinstall(struct drm_device * dev);
386extern int radeon_driver_irq_postinstall(struct drm_device * dev); 383extern void radeon_driver_irq_postinstall(struct drm_device * dev);
387extern void radeon_driver_irq_uninstall(struct drm_device * dev); 384extern void radeon_driver_irq_uninstall(struct drm_device * dev);
388extern int radeon_vblank_crtc_get(struct drm_device *dev); 385extern int radeon_vblank_crtc_get(struct drm_device *dev);
389extern int radeon_vblank_crtc_set(struct drm_device *dev, int64_t value); 386extern int radeon_vblank_crtc_set(struct drm_device *dev, int64_t value);
@@ -561,12 +558,6 @@ extern int r300_do_cp_cmdbuf(struct drm_device * dev,
561 ? DRM_READ32( dev_priv->ring_rptr, RADEON_SCRATCHOFF(x) ) \ 558 ? DRM_READ32( dev_priv->ring_rptr, RADEON_SCRATCHOFF(x) ) \
562 : RADEON_READ( RADEON_SCRATCH_REG0 + 4*(x) ) ) 559 : RADEON_READ( RADEON_SCRATCH_REG0 + 4*(x) ) )
563 560
564#define RADEON_CRTC_CRNT_FRAME 0x0214
565#define RADEON_CRTC2_CRNT_FRAME 0x0314
566
567#define RADEON_CRTC_STATUS 0x005c
568#define RADEON_CRTC2_STATUS 0x03fc
569
570#define RADEON_GEN_INT_CNTL 0x0040 561#define RADEON_GEN_INT_CNTL 0x0040
571# define RADEON_CRTC_VBLANK_MASK (1 << 0) 562# define RADEON_CRTC_VBLANK_MASK (1 << 0)
572# define RADEON_CRTC2_VBLANK_MASK (1 << 9) 563# define RADEON_CRTC2_VBLANK_MASK (1 << 9)
diff --git a/drivers/char/drm/radeon_irq.c b/drivers/char/drm/radeon_irq.c
index 507d6b747a13..009af3814b6f 100644
--- a/drivers/char/drm/radeon_irq.c
+++ b/drivers/char/drm/radeon_irq.c
@@ -35,61 +35,12 @@
35#include "radeon_drm.h" 35#include "radeon_drm.h"
36#include "radeon_drv.h" 36#include "radeon_drv.h"
37 37
38static void radeon_irq_set_state(struct drm_device *dev, u32 mask, int state) 38static __inline__ u32 radeon_acknowledge_irqs(drm_radeon_private_t * dev_priv,
39 u32 mask)
39{ 40{
40 drm_radeon_private_t *dev_priv = dev->dev_private; 41 u32 irqs = RADEON_READ(RADEON_GEN_INT_STATUS) & mask;
41
42 if (state)
43 dev_priv->irq_enable_reg |= mask;
44 else
45 dev_priv->irq_enable_reg &= ~mask;
46
47 RADEON_WRITE(RADEON_GEN_INT_CNTL, dev_priv->irq_enable_reg);
48}
49
50int radeon_enable_vblank(struct drm_device *dev, int crtc)
51{
52 switch (crtc) {
53 case 0:
54 radeon_irq_set_state(dev, RADEON_CRTC_VBLANK_MASK, 1);
55 break;
56 case 1:
57 radeon_irq_set_state(dev, RADEON_CRTC2_VBLANK_MASK, 1);
58 break;
59 default:
60 DRM_ERROR("tried to enable vblank on non-existent crtc %d\n",
61 crtc);
62 return EINVAL;
63 }
64
65 return 0;
66}
67
68void radeon_disable_vblank(struct drm_device *dev, int crtc)
69{
70 switch (crtc) {
71 case 0:
72 radeon_irq_set_state(dev, RADEON_CRTC_VBLANK_MASK, 0);
73 break;
74 case 1:
75 radeon_irq_set_state(dev, RADEON_CRTC2_VBLANK_MASK, 0);
76 break;
77 default:
78 DRM_ERROR("tried to enable vblank on non-existent crtc %d\n",
79 crtc);
80 break;
81 }
82}
83
84static __inline__ u32 radeon_acknowledge_irqs(drm_radeon_private_t * dev_priv)
85{
86 u32 irqs = RADEON_READ(RADEON_GEN_INT_STATUS) &
87 (RADEON_SW_INT_TEST | RADEON_CRTC_VBLANK_STAT |
88 RADEON_CRTC2_VBLANK_STAT);
89
90 if (irqs) 42 if (irqs)
91 RADEON_WRITE(RADEON_GEN_INT_STATUS, irqs); 43 RADEON_WRITE(RADEON_GEN_INT_STATUS, irqs);
92
93 return irqs; 44 return irqs;
94} 45}
95 46
@@ -121,21 +72,39 @@ irqreturn_t radeon_driver_irq_handler(DRM_IRQ_ARGS)
121 /* Only consider the bits we're interested in - others could be used 72 /* Only consider the bits we're interested in - others could be used
122 * outside the DRM 73 * outside the DRM
123 */ 74 */
124 stat = radeon_acknowledge_irqs(dev_priv); 75 stat = radeon_acknowledge_irqs(dev_priv, (RADEON_SW_INT_TEST_ACK |
76 RADEON_CRTC_VBLANK_STAT |
77 RADEON_CRTC2_VBLANK_STAT));
125 if (!stat) 78 if (!stat)
126 return IRQ_NONE; 79 return IRQ_NONE;
127 80
128 stat &= dev_priv->irq_enable_reg; 81 stat &= dev_priv->irq_enable_reg;
129 82
130 /* SW interrupt */ 83 /* SW interrupt */
131 if (stat & RADEON_SW_INT_TEST) 84 if (stat & RADEON_SW_INT_TEST) {
132 DRM_WAKEUP(&dev_priv->swi_queue); 85 DRM_WAKEUP(&dev_priv->swi_queue);
86 }
133 87
134 /* VBLANK interrupt */ 88 /* VBLANK interrupt */
135 if (stat & RADEON_CRTC_VBLANK_STAT) 89 if (stat & (RADEON_CRTC_VBLANK_STAT|RADEON_CRTC2_VBLANK_STAT)) {
136 drm_handle_vblank(dev, 0); 90 int vblank_crtc = dev_priv->vblank_crtc;
137 if (stat & RADEON_CRTC2_VBLANK_STAT) 91
138 drm_handle_vblank(dev, 1); 92 if ((vblank_crtc &
93 (DRM_RADEON_VBLANK_CRTC1 | DRM_RADEON_VBLANK_CRTC2)) ==
94 (DRM_RADEON_VBLANK_CRTC1 | DRM_RADEON_VBLANK_CRTC2)) {
95 if (stat & RADEON_CRTC_VBLANK_STAT)
96 atomic_inc(&dev->vbl_received);
97 if (stat & RADEON_CRTC2_VBLANK_STAT)
98 atomic_inc(&dev->vbl_received2);
99 } else if (((stat & RADEON_CRTC_VBLANK_STAT) &&
100 (vblank_crtc & DRM_RADEON_VBLANK_CRTC1)) ||
101 ((stat & RADEON_CRTC2_VBLANK_STAT) &&
102 (vblank_crtc & DRM_RADEON_VBLANK_CRTC2)))
103 atomic_inc(&dev->vbl_received);
104
105 DRM_WAKEUP(&dev->vbl_queue);
106 drm_vbl_send_signals(dev);
107 }
139 108
140 return IRQ_HANDLED; 109 return IRQ_HANDLED;
141} 110}
@@ -175,27 +144,54 @@ static int radeon_wait_irq(struct drm_device * dev, int swi_nr)
175 return ret; 144 return ret;
176} 145}
177 146
178u32 radeon_get_vblank_counter(struct drm_device *dev, int crtc) 147static int radeon_driver_vblank_do_wait(struct drm_device * dev,
148 unsigned int *sequence, int crtc)
179{ 149{
180 drm_radeon_private_t *dev_priv = dev->dev_private; 150 drm_radeon_private_t *dev_priv =
181 u32 crtc_cnt_reg, crtc_status_reg; 151 (drm_radeon_private_t *) dev->dev_private;
182 152 unsigned int cur_vblank;
153 int ret = 0;
154 int ack = 0;
155 atomic_t *counter;
183 if (!dev_priv) { 156 if (!dev_priv) {
184 DRM_ERROR("called with no initialization\n"); 157 DRM_ERROR("called with no initialization\n");
185 return -EINVAL; 158 return -EINVAL;
186 } 159 }
187 160
188 if (crtc == 0) { 161 if (crtc == DRM_RADEON_VBLANK_CRTC1) {
189 crtc_cnt_reg = RADEON_CRTC_CRNT_FRAME; 162 counter = &dev->vbl_received;
190 crtc_status_reg = RADEON_CRTC_STATUS; 163 ack |= RADEON_CRTC_VBLANK_STAT;
191 } else if (crtc == 1) { 164 } else if (crtc == DRM_RADEON_VBLANK_CRTC2) {
192 crtc_cnt_reg = RADEON_CRTC2_CRNT_FRAME; 165 counter = &dev->vbl_received2;
193 crtc_status_reg = RADEON_CRTC2_STATUS; 166 ack |= RADEON_CRTC2_VBLANK_STAT;
194 } else { 167 } else
195 return -EINVAL; 168 return -EINVAL;
196 }
197 169
198 return RADEON_READ(crtc_cnt_reg) + (RADEON_READ(crtc_status_reg) & 1); 170 radeon_acknowledge_irqs(dev_priv, ack);
171
172 dev_priv->stats.boxes |= RADEON_BOX_WAIT_IDLE;
173
174 /* Assume that the user has missed the current sequence number
175 * by about a day rather than she wants to wait for years
176 * using vertical blanks...
177 */
178 DRM_WAIT_ON(ret, dev->vbl_queue, 3 * DRM_HZ,
179 (((cur_vblank = atomic_read(counter))
180 - *sequence) <= (1 << 23)));
181
182 *sequence = cur_vblank;
183
184 return ret;
185}
186
187int radeon_driver_vblank_wait(struct drm_device *dev, unsigned int *sequence)
188{
189 return radeon_driver_vblank_do_wait(dev, sequence, DRM_RADEON_VBLANK_CRTC1);
190}
191
192int radeon_driver_vblank_wait2(struct drm_device *dev, unsigned int *sequence)
193{
194 return radeon_driver_vblank_do_wait(dev, sequence, DRM_RADEON_VBLANK_CRTC2);
199} 195}
200 196
201/* Needs the lock as it touches the ring. 197/* Needs the lock as it touches the ring.
@@ -238,6 +234,21 @@ int radeon_irq_wait(struct drm_device *dev, void *data, struct drm_file *file_pr
238 return radeon_wait_irq(dev, irqwait->irq_seq); 234 return radeon_wait_irq(dev, irqwait->irq_seq);
239} 235}
240 236
237static void radeon_enable_interrupt(struct drm_device *dev)
238{
239 drm_radeon_private_t *dev_priv = (drm_radeon_private_t *) dev->dev_private;
240
241 dev_priv->irq_enable_reg = RADEON_SW_INT_ENABLE;
242 if (dev_priv->vblank_crtc & DRM_RADEON_VBLANK_CRTC1)
243 dev_priv->irq_enable_reg |= RADEON_CRTC_VBLANK_MASK;
244
245 if (dev_priv->vblank_crtc & DRM_RADEON_VBLANK_CRTC2)
246 dev_priv->irq_enable_reg |= RADEON_CRTC2_VBLANK_MASK;
247
248 RADEON_WRITE(RADEON_GEN_INT_CNTL, dev_priv->irq_enable_reg);
249 dev_priv->irq_enabled = 1;
250}
251
241/* drm_dma.h hooks 252/* drm_dma.h hooks
242*/ 253*/
243void radeon_driver_irq_preinstall(struct drm_device * dev) 254void radeon_driver_irq_preinstall(struct drm_device * dev)
@@ -249,27 +260,20 @@ void radeon_driver_irq_preinstall(struct drm_device * dev)
249 RADEON_WRITE(RADEON_GEN_INT_CNTL, 0); 260 RADEON_WRITE(RADEON_GEN_INT_CNTL, 0);
250 261
251 /* Clear bits if they're already high */ 262 /* Clear bits if they're already high */
252 radeon_acknowledge_irqs(dev_priv); 263 radeon_acknowledge_irqs(dev_priv, (RADEON_SW_INT_TEST_ACK |
264 RADEON_CRTC_VBLANK_STAT |
265 RADEON_CRTC2_VBLANK_STAT));
253} 266}
254 267
255int radeon_driver_irq_postinstall(struct drm_device * dev) 268void radeon_driver_irq_postinstall(struct drm_device * dev)
256{ 269{
257 drm_radeon_private_t *dev_priv = 270 drm_radeon_private_t *dev_priv =
258 (drm_radeon_private_t *) dev->dev_private; 271 (drm_radeon_private_t *) dev->dev_private;
259 int ret;
260 272
261 atomic_set(&dev_priv->swi_emitted, 0); 273 atomic_set(&dev_priv->swi_emitted, 0);
262 DRM_INIT_WAITQUEUE(&dev_priv->swi_queue); 274 DRM_INIT_WAITQUEUE(&dev_priv->swi_queue);
263 275
264 ret = drm_vblank_init(dev, 2); 276 radeon_enable_interrupt(dev);
265 if (ret)
266 return ret;
267
268 dev->max_vblank_count = 0x001fffff;
269
270 radeon_irq_set_state(dev, RADEON_SW_INT_ENABLE, 1);
271
272 return 0;
273} 277}
274 278
275void radeon_driver_irq_uninstall(struct drm_device * dev) 279void radeon_driver_irq_uninstall(struct drm_device * dev)
@@ -311,5 +315,6 @@ int radeon_vblank_crtc_set(struct drm_device *dev, int64_t value)
311 return -EINVAL; 315 return -EINVAL;
312 } 316 }
313 dev_priv->vblank_crtc = (unsigned int)value; 317 dev_priv->vblank_crtc = (unsigned int)value;
318 radeon_enable_interrupt(dev);
314 return 0; 319 return 0;
315} 320}
diff --git a/drivers/char/drm/via_drv.c b/drivers/char/drm/via_drv.c
index 37870a4a3dc7..80c01cdfa37d 100644
--- a/drivers/char/drm/via_drv.c
+++ b/drivers/char/drm/via_drv.c
@@ -40,13 +40,11 @@ static struct pci_device_id pciidlist[] = {
40static struct drm_driver driver = { 40static struct drm_driver driver = {
41 .driver_features = 41 .driver_features =
42 DRIVER_USE_AGP | DRIVER_USE_MTRR | DRIVER_HAVE_IRQ | 42 DRIVER_USE_AGP | DRIVER_USE_MTRR | DRIVER_HAVE_IRQ |
43 DRIVER_IRQ_SHARED, 43 DRIVER_IRQ_SHARED | DRIVER_IRQ_VBL,
44 .load = via_driver_load, 44 .load = via_driver_load,
45 .unload = via_driver_unload, 45 .unload = via_driver_unload,
46 .context_dtor = via_final_context, 46 .context_dtor = via_final_context,
47 .get_vblank_counter = via_get_vblank_counter, 47 .vblank_wait = via_driver_vblank_wait,
48 .enable_vblank = via_enable_vblank,
49 .disable_vblank = via_disable_vblank,
50 .irq_preinstall = via_driver_irq_preinstall, 48 .irq_preinstall = via_driver_irq_preinstall,
51 .irq_postinstall = via_driver_irq_postinstall, 49 .irq_postinstall = via_driver_irq_postinstall,
52 .irq_uninstall = via_driver_irq_uninstall, 50 .irq_uninstall = via_driver_irq_uninstall,
diff --git a/drivers/char/drm/via_drv.h b/drivers/char/drm/via_drv.h
index fe67030e39ac..2daae81874cd 100644
--- a/drivers/char/drm/via_drv.h
+++ b/drivers/char/drm/via_drv.h
@@ -75,7 +75,6 @@ typedef struct drm_via_private {
75 struct timeval last_vblank; 75 struct timeval last_vblank;
76 int last_vblank_valid; 76 int last_vblank_valid;
77 unsigned usec_per_vblank; 77 unsigned usec_per_vblank;
78 atomic_t vbl_received;
79 drm_via_state_t hc_state; 78 drm_via_state_t hc_state;
80 char pci_buf[VIA_PCI_BUF_SIZE]; 79 char pci_buf[VIA_PCI_BUF_SIZE];
81 const uint32_t *fire_offsets[VIA_FIRE_BUF_SIZE]; 80 const uint32_t *fire_offsets[VIA_FIRE_BUF_SIZE];
@@ -131,13 +130,11 @@ extern int via_init_context(struct drm_device * dev, int context);
131extern int via_final_context(struct drm_device * dev, int context); 130extern int via_final_context(struct drm_device * dev, int context);
132 131
133extern int via_do_cleanup_map(struct drm_device * dev); 132extern int via_do_cleanup_map(struct drm_device * dev);
134extern u32 via_get_vblank_counter(struct drm_device *dev, int crtc); 133extern int via_driver_vblank_wait(struct drm_device * dev, unsigned int *sequence);
135extern int via_enable_vblank(struct drm_device *dev, int crtc);
136extern void via_disable_vblank(struct drm_device *dev, int crtc);
137 134
138extern irqreturn_t via_driver_irq_handler(DRM_IRQ_ARGS); 135extern irqreturn_t via_driver_irq_handler(DRM_IRQ_ARGS);
139extern void via_driver_irq_preinstall(struct drm_device * dev); 136extern void via_driver_irq_preinstall(struct drm_device * dev);
140extern int via_driver_irq_postinstall(struct drm_device * dev); 137extern void via_driver_irq_postinstall(struct drm_device * dev);
141extern void via_driver_irq_uninstall(struct drm_device * dev); 138extern void via_driver_irq_uninstall(struct drm_device * dev);
142 139
143extern int via_dma_cleanup(struct drm_device * dev); 140extern int via_dma_cleanup(struct drm_device * dev);
diff --git a/drivers/char/drm/via_irq.c b/drivers/char/drm/via_irq.c
index f1ab6fc7c07e..c6bb978a1106 100644
--- a/drivers/char/drm/via_irq.c
+++ b/drivers/char/drm/via_irq.c
@@ -92,17 +92,8 @@ static int via_irqmap_unichrome[] = {-1, -1, -1, 0, -1, 1};
92static unsigned time_diff(struct timeval *now, struct timeval *then) 92static unsigned time_diff(struct timeval *now, struct timeval *then)
93{ 93{
94 return (now->tv_usec >= then->tv_usec) ? 94 return (now->tv_usec >= then->tv_usec) ?
95 now->tv_usec - then->tv_usec : 95 now->tv_usec - then->tv_usec :
96 1000000 - (then->tv_usec - now->tv_usec); 96 1000000 - (then->tv_usec - now->tv_usec);
97}
98
99u32 via_get_vblank_counter(struct drm_device *dev, int crtc)
100{
101 drm_via_private_t *dev_priv = dev->dev_private;
102 if (crtc != 0)
103 return 0;
104
105 return atomic_read(&dev_priv->vbl_received);
106} 97}
107 98
108irqreturn_t via_driver_irq_handler(DRM_IRQ_ARGS) 99irqreturn_t via_driver_irq_handler(DRM_IRQ_ARGS)
@@ -117,8 +108,8 @@ irqreturn_t via_driver_irq_handler(DRM_IRQ_ARGS)
117 108
118 status = VIA_READ(VIA_REG_INTERRUPT); 109 status = VIA_READ(VIA_REG_INTERRUPT);
119 if (status & VIA_IRQ_VBLANK_PENDING) { 110 if (status & VIA_IRQ_VBLANK_PENDING) {
120 atomic_inc(&dev_priv->vbl_received); 111 atomic_inc(&dev->vbl_received);
121 if (!(atomic_read(&dev_priv->vbl_received) & 0x0F)) { 112 if (!(atomic_read(&dev->vbl_received) & 0x0F)) {
122 do_gettimeofday(&cur_vblank); 113 do_gettimeofday(&cur_vblank);
123 if (dev_priv->last_vblank_valid) { 114 if (dev_priv->last_vblank_valid) {
124 dev_priv->usec_per_vblank = 115 dev_priv->usec_per_vblank =
@@ -128,11 +119,12 @@ irqreturn_t via_driver_irq_handler(DRM_IRQ_ARGS)
128 dev_priv->last_vblank = cur_vblank; 119 dev_priv->last_vblank = cur_vblank;
129 dev_priv->last_vblank_valid = 1; 120 dev_priv->last_vblank_valid = 1;
130 } 121 }
131 if (!(atomic_read(&dev_priv->vbl_received) & 0xFF)) { 122 if (!(atomic_read(&dev->vbl_received) & 0xFF)) {
132 DRM_DEBUG("US per vblank is: %u\n", 123 DRM_DEBUG("US per vblank is: %u\n",
133 dev_priv->usec_per_vblank); 124 dev_priv->usec_per_vblank);
134 } 125 }
135 drm_handle_vblank(dev, 0); 126 DRM_WAKEUP(&dev->vbl_queue);
127 drm_vbl_send_signals(dev);
136 handled = 1; 128 handled = 1;
137 } 129 }
138 130
@@ -171,34 +163,31 @@ static __inline__ void viadrv_acknowledge_irqs(drm_via_private_t * dev_priv)
171 } 163 }
172} 164}
173 165
174int via_enable_vblank(struct drm_device *dev, int crtc) 166int via_driver_vblank_wait(struct drm_device * dev, unsigned int *sequence)
175{ 167{
176 drm_via_private_t *dev_priv = dev->dev_private; 168 drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private;
177 u32 status; 169 unsigned int cur_vblank;
170 int ret = 0;
178 171
179 if (crtc != 0) { 172 DRM_DEBUG("\n");
180 DRM_ERROR("%s: bad crtc %d\n", __FUNCTION__, crtc); 173 if (!dev_priv) {
174 DRM_ERROR("called with no initialization\n");
181 return -EINVAL; 175 return -EINVAL;
182 } 176 }
183 177
184 status = VIA_READ(VIA_REG_INTERRUPT); 178 viadrv_acknowledge_irqs(dev_priv);
185 VIA_WRITE(VIA_REG_INTERRUPT, status & VIA_IRQ_VBLANK_ENABLE);
186 179
187 VIA_WRITE8(0x83d4, 0x11); 180 /* Assume that the user has missed the current sequence number
188 VIA_WRITE8(0x83d5, VIA_READ8(0x83d5) | 0x30); 181 * by about a day rather than she wants to wait for years
182 * using vertical blanks...
183 */
189 184
190 return 0; 185 DRM_WAIT_ON(ret, dev->vbl_queue, 3 * DRM_HZ,
191} 186 (((cur_vblank = atomic_read(&dev->vbl_received)) -
187 *sequence) <= (1 << 23)));
192 188
193void via_disable_vblank(struct drm_device *dev, int crtc) 189 *sequence = cur_vblank;
194{ 190 return ret;
195 drm_via_private_t *dev_priv = dev->dev_private;
196
197 VIA_WRITE8(0x83d4, 0x11);
198 VIA_WRITE8(0x83d5, VIA_READ8(0x83d5) & ~0x30);
199
200 if (crtc != 0)
201 DRM_ERROR("%s: bad crtc %d\n", __FUNCTION__, crtc);
202} 191}
203 192
204static int 193static int
@@ -303,25 +292,23 @@ void via_driver_irq_preinstall(struct drm_device * dev)
303 } 292 }
304} 293}
305 294
306int via_driver_irq_postinstall(struct drm_device * dev) 295void via_driver_irq_postinstall(struct drm_device * dev)
307{ 296{
308 drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private; 297 drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private;
309 u32 status; 298 u32 status;
310 299
311 DRM_DEBUG("via_driver_irq_postinstall\n"); 300 DRM_DEBUG("\n");
312 if (!dev_priv) 301 if (dev_priv) {
313 return -EINVAL; 302 status = VIA_READ(VIA_REG_INTERRUPT);
303 VIA_WRITE(VIA_REG_INTERRUPT, status | VIA_IRQ_GLOBAL
304 | dev_priv->irq_enable_mask);
314 305
315 drm_vblank_init(dev, 1); 306 /* Some magic, oh for some data sheets ! */
316 status = VIA_READ(VIA_REG_INTERRUPT);
317 VIA_WRITE(VIA_REG_INTERRUPT, status | VIA_IRQ_GLOBAL
318 | dev_priv->irq_enable_mask);
319 307
320 /* Some magic, oh for some data sheets ! */ 308 VIA_WRITE8(0x83d4, 0x11);
321 VIA_WRITE8(0x83d4, 0x11); 309 VIA_WRITE8(0x83d5, VIA_READ8(0x83d5) | 0x30);
322 VIA_WRITE8(0x83d5, VIA_READ8(0x83d5) | 0x30);
323 310
324 return 0; 311 }
325} 312}
326 313
327void via_driver_irq_uninstall(struct drm_device * dev) 314void via_driver_irq_uninstall(struct drm_device * dev)
diff --git a/drivers/s390/kvm/kvm_virtio.c b/drivers/s390/kvm/kvm_virtio.c
index 47a7e6200b26..9f55ce6f3c78 100644
--- a/drivers/s390/kvm/kvm_virtio.c
+++ b/drivers/s390/kvm/kvm_virtio.c
@@ -78,27 +78,32 @@ static unsigned desc_size(const struct kvm_device_desc *desc)
78 + desc->config_len; 78 + desc->config_len;
79} 79}
80 80
81/* 81/* This gets the device's feature bits. */
82 * This tests (and acknowleges) a feature bit. 82static u32 kvm_get_features(struct virtio_device *vdev)
83 */
84static bool kvm_feature(struct virtio_device *vdev, unsigned fbit)
85{ 83{
84 unsigned int i;
85 u32 features = 0;
86 struct kvm_device_desc *desc = to_kvmdev(vdev)->desc; 86 struct kvm_device_desc *desc = to_kvmdev(vdev)->desc;
87 u8 *features; 87 u8 *in_features = kvm_vq_features(desc);
88 88
89 if (fbit / 8 > desc->feature_len) 89 for (i = 0; i < min(desc->feature_len * 8, 32); i++)
90 return false; 90 if (in_features[i / 8] & (1 << (i % 8)))
91 features |= (1 << i);
92 return features;
93}
91 94
92 features = kvm_vq_features(desc); 95static void kvm_set_features(struct virtio_device *vdev, u32 features)
93 if (!(features[fbit / 8] & (1 << (fbit % 8)))) 96{
94 return false; 97 unsigned int i;
98 struct kvm_device_desc *desc = to_kvmdev(vdev)->desc;
99 /* Second half of bitmap is features we accept. */
100 u8 *out_features = kvm_vq_features(desc) + desc->feature_len;
95 101
96 /* 102 memset(out_features, 0, desc->feature_len);
97 * We set the matching bit in the other half of the bitmap to tell the 103 for (i = 0; i < min(desc->feature_len * 8, 32); i++) {
98 * Host we want to use this feature. 104 if (features & (1 << i))
99 */ 105 out_features[i / 8] |= (1 << (i % 8));
100 features[desc->feature_len + fbit / 8] |= (1 << (fbit % 8)); 106 }
101 return true;
102} 107}
103 108
104/* 109/*
@@ -221,7 +226,8 @@ static void kvm_del_vq(struct virtqueue *vq)
221 * The config ops structure as defined by virtio config 226 * The config ops structure as defined by virtio config
222 */ 227 */
223static struct virtio_config_ops kvm_vq_configspace_ops = { 228static struct virtio_config_ops kvm_vq_configspace_ops = {
224 .feature = kvm_feature, 229 .get_features = kvm_get_features,
230 .set_features = kvm_set_features,
225 .get = kvm_get, 231 .get = kvm_get,
226 .set = kvm_set, 232 .set = kvm_set,
227 .get_status = kvm_get_status, 233 .get_status = kvm_get_status,
diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c
index a1ca9b7bf2d5..1400ea6a2491 100644
--- a/drivers/serial/8250.c
+++ b/drivers/serial/8250.c
@@ -43,6 +43,7 @@
43 43
44#include <asm/io.h> 44#include <asm/io.h>
45#include <asm/irq.h> 45#include <asm/irq.h>
46#include <asm/serial.h>
46 47
47#include "8250.h" 48#include "8250.h"
48 49
@@ -92,8 +93,6 @@ static unsigned int nr_uarts = CONFIG_SERIAL_8250_RUNTIME_UARTS;
92 */ 93 */
93#define CONFIG_HUB6 1 94#define CONFIG_HUB6 1
94 95
95#include <asm/serial.h>
96
97/* 96/*
98 * SERIAL_PORT_DFNS tells us about built-in ports that have no 97 * SERIAL_PORT_DFNS tells us about built-in ports that have no
99 * standard enumeration mechanism. Platforms that can find all 98 * standard enumeration mechanism. Platforms that can find all
@@ -1548,6 +1547,8 @@ static int serial_link_irq_chain(struct uart_8250_port *up)
1548 i->head = &up->list; 1547 i->head = &up->list;
1549 spin_unlock_irq(&i->lock); 1548 spin_unlock_irq(&i->lock);
1550 1549
1550 irq_flags |= SERIAL_EXTRA_IRQ_FLAGS;
1551
1551 ret = request_irq(up->port.irq, serial8250_interrupt, 1552 ret = request_irq(up->port.irq, serial8250_interrupt,
1552 irq_flags, "serial", i); 1553 irq_flags, "serial", i);
1553 if (ret < 0) 1554 if (ret < 0)
diff --git a/drivers/serial/8250.h b/drivers/serial/8250.h
index 91bd28f2bb47..a10a40cc0d9e 100644
--- a/drivers/serial/8250.h
+++ b/drivers/serial/8250.h
@@ -78,3 +78,8 @@ struct serial8250_config {
78#else 78#else
79#define ALPHA_KLUDGE_MCR 0 79#define ALPHA_KLUDGE_MCR 0
80#endif 80#endif
81
82#ifndef SERIAL_EXTRA_IRQ_FLAGS
83#define SERIAL_EXTRA_IRQ_FLAGS 0
84#endif
85
diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig
index 62e6eb136a3c..9bc42763623c 100644
--- a/drivers/serial/Kconfig
+++ b/drivers/serial/Kconfig
@@ -1361,7 +1361,7 @@ config SERIAL_SC26XX_CONSOLE
1361 1361
1362config SERIAL_BFIN_SPORT 1362config SERIAL_BFIN_SPORT
1363 tristate "Blackfin SPORT emulate UART (EXPERIMENTAL)" 1363 tristate "Blackfin SPORT emulate UART (EXPERIMENTAL)"
1364 depends on BFIN && EXPERIMENTAL 1364 depends on BLACKFIN && EXPERIMENTAL
1365 select SERIAL_CORE 1365 select SERIAL_CORE
1366 help 1366 help
1367 Enble support SPORT emulate UART on Blackfin series. 1367 Enble support SPORT emulate UART on Blackfin series.
diff --git a/drivers/serial/sh-sci.c b/drivers/serial/sh-sci.c
index 8fdafc27fce8..ce6ee92b3a1b 100644
--- a/drivers/serial/sh-sci.c
+++ b/drivers/serial/sh-sci.c
@@ -184,15 +184,15 @@ static void put_string(struct sci_port *sci_port, const char *buffer, int count)
184 int h, l; 184 int h, l;
185 185
186 c = *p++; 186 c = *p++;
187 h = highhex(c); 187 h = hex_asc_hi(c);
188 l = lowhex(c); 188 l = hex_asc_lo(c);
189 put_char(port, h); 189 put_char(port, h);
190 put_char(port, l); 190 put_char(port, l);
191 checksum += h + l; 191 checksum += h + l;
192 } 192 }
193 put_char(port, '#'); 193 put_char(port, '#');
194 put_char(port, highhex(checksum)); 194 put_char(port, hex_asc_hi(checksum));
195 put_char(port, lowhex(checksum)); 195 put_char(port, hex_asc_lo(checksum));
196 } while (get_char(port) != '+'); 196 } while (get_char(port) != '+');
197 } else 197 } else
198#endif /* CONFIG_SH_STANDARD_BIOS || CONFIG_SH_KGDB */ 198#endif /* CONFIG_SH_STANDARD_BIOS || CONFIG_SH_KGDB */
diff --git a/fs/dlm/lowcomms.c b/fs/dlm/lowcomms.c
index 7c1e5e5cccd8..637018c891ef 100644
--- a/fs/dlm/lowcomms.c
+++ b/fs/dlm/lowcomms.c
@@ -50,6 +50,7 @@
50#include <linux/pagemap.h> 50#include <linux/pagemap.h>
51#include <linux/idr.h> 51#include <linux/idr.h>
52#include <linux/file.h> 52#include <linux/file.h>
53#include <linux/mutex.h>
53#include <linux/sctp.h> 54#include <linux/sctp.h>
54#include <net/sctp/user.h> 55#include <net/sctp/user.h>
55 56
@@ -138,7 +139,7 @@ static struct workqueue_struct *recv_workqueue;
138static struct workqueue_struct *send_workqueue; 139static struct workqueue_struct *send_workqueue;
139 140
140static DEFINE_IDR(connections_idr); 141static DEFINE_IDR(connections_idr);
141static DECLARE_MUTEX(connections_lock); 142static DEFINE_MUTEX(connections_lock);
142static int max_nodeid; 143static int max_nodeid;
143static struct kmem_cache *con_cache; 144static struct kmem_cache *con_cache;
144 145
@@ -205,9 +206,9 @@ static struct connection *nodeid2con(int nodeid, gfp_t allocation)
205{ 206{
206 struct connection *con; 207 struct connection *con;
207 208
208 down(&connections_lock); 209 mutex_lock(&connections_lock);
209 con = __nodeid2con(nodeid, allocation); 210 con = __nodeid2con(nodeid, allocation);
210 up(&connections_lock); 211 mutex_unlock(&connections_lock);
211 212
212 return con; 213 return con;
213} 214}
@@ -218,15 +219,15 @@ static struct connection *assoc2con(int assoc_id)
218 int i; 219 int i;
219 struct connection *con; 220 struct connection *con;
220 221
221 down(&connections_lock); 222 mutex_lock(&connections_lock);
222 for (i=0; i<=max_nodeid; i++) { 223 for (i=0; i<=max_nodeid; i++) {
223 con = __nodeid2con(i, 0); 224 con = __nodeid2con(i, 0);
224 if (con && con->sctp_assoc == assoc_id) { 225 if (con && con->sctp_assoc == assoc_id) {
225 up(&connections_lock); 226 mutex_unlock(&connections_lock);
226 return con; 227 return con;
227 } 228 }
228 } 229 }
229 up(&connections_lock); 230 mutex_unlock(&connections_lock);
230 return NULL; 231 return NULL;
231} 232}
232 233
@@ -381,7 +382,7 @@ static void sctp_init_failed(void)
381 int i; 382 int i;
382 struct connection *con; 383 struct connection *con;
383 384
384 down(&connections_lock); 385 mutex_lock(&connections_lock);
385 for (i=1; i<=max_nodeid; i++) { 386 for (i=1; i<=max_nodeid; i++) {
386 con = __nodeid2con(i, 0); 387 con = __nodeid2con(i, 0);
387 if (!con) 388 if (!con)
@@ -393,7 +394,7 @@ static void sctp_init_failed(void)
393 } 394 }
394 } 395 }
395 } 396 }
396 up(&connections_lock); 397 mutex_unlock(&connections_lock);
397} 398}
398 399
399/* Something happened to an association */ 400/* Something happened to an association */
@@ -930,7 +931,7 @@ out_err:
930 * errors we try again until the max number of retries is reached. 931 * errors we try again until the max number of retries is reached.
931 */ 932 */
932 if (result != -EHOSTUNREACH && result != -ENETUNREACH && 933 if (result != -EHOSTUNREACH && result != -ENETUNREACH &&
933 result != -ENETDOWN && result != EINVAL 934 result != -ENETDOWN && result != -EINVAL
934 && result != -EPROTONOSUPPORT) { 935 && result != -EPROTONOSUPPORT) {
935 lowcomms_connect_sock(con); 936 lowcomms_connect_sock(con);
936 result = 0; 937 result = 0;
@@ -1417,7 +1418,7 @@ void dlm_lowcomms_stop(void)
1417 /* Set all the flags to prevent any 1418 /* Set all the flags to prevent any
1418 socket activity. 1419 socket activity.
1419 */ 1420 */
1420 down(&connections_lock); 1421 mutex_lock(&connections_lock);
1421 for (i = 0; i <= max_nodeid; i++) { 1422 for (i = 0; i <= max_nodeid; i++) {
1422 con = __nodeid2con(i, 0); 1423 con = __nodeid2con(i, 0);
1423 if (con) { 1424 if (con) {
@@ -1426,11 +1427,11 @@ void dlm_lowcomms_stop(void)
1426 con->sock->sk->sk_user_data = NULL; 1427 con->sock->sk->sk_user_data = NULL;
1427 } 1428 }
1428 } 1429 }
1429 up(&connections_lock); 1430 mutex_unlock(&connections_lock);
1430 1431
1431 work_stop(); 1432 work_stop();
1432 1433
1433 down(&connections_lock); 1434 mutex_lock(&connections_lock);
1434 clean_writequeues(); 1435 clean_writequeues();
1435 1436
1436 for (i = 0; i <= max_nodeid; i++) { 1437 for (i = 0; i <= max_nodeid; i++) {
@@ -1443,7 +1444,7 @@ void dlm_lowcomms_stop(void)
1443 } 1444 }
1444 } 1445 }
1445 max_nodeid = 0; 1446 max_nodeid = 0;
1446 up(&connections_lock); 1447 mutex_unlock(&connections_lock);
1447 kmem_cache_destroy(con_cache); 1448 kmem_cache_destroy(con_cache);
1448 idr_init(&connections_idr); 1449 idr_init(&connections_idr);
1449} 1450}
diff --git a/fs/dlm/netlink.c b/fs/dlm/netlink.c
index 714593621f4f..18bda83cc892 100644
--- a/fs/dlm/netlink.c
+++ b/fs/dlm/netlink.c
@@ -95,7 +95,7 @@ int __init dlm_netlink_init(void)
95 return rv; 95 return rv;
96} 96}
97 97
98void __exit dlm_netlink_exit(void) 98void dlm_netlink_exit(void)
99{ 99{
100 genl_unregister_ops(&family, &dlm_nl_ops); 100 genl_unregister_ops(&family, &dlm_nl_ops);
101 genl_unregister_family(&family); 101 genl_unregister_family(&family);
diff --git a/fs/dlm/plock.c b/fs/dlm/plock.c
index d6d6e370f89c..78878c5781ca 100644
--- a/fs/dlm/plock.c
+++ b/fs/dlm/plock.c
@@ -379,7 +379,7 @@ static ssize_t dev_write(struct file *file, const char __user *u, size_t count,
379 struct plock_xop *xop; 379 struct plock_xop *xop;
380 xop = (struct plock_xop *)op; 380 xop = (struct plock_xop *)op;
381 if (xop->callback) 381 if (xop->callback)
382 count = dlm_plock_callback(op); 382 dlm_plock_callback(op);
383 else 383 else
384 wake_up(&recv_wq); 384 wake_up(&recv_wq);
385 } else 385 } else
diff --git a/fs/nfs/callback.c b/fs/nfs/callback.c
index 5606ae3d72d3..c1e7c8300629 100644
--- a/fs/nfs/callback.c
+++ b/fs/nfs/callback.c
@@ -182,7 +182,7 @@ static int nfs_callback_authenticate(struct svc_rqst *rqstp)
182 if (clp == NULL) 182 if (clp == NULL)
183 return SVC_DROP; 183 return SVC_DROP;
184 184
185 dprintk("%s: %s NFSv4 callback!\n", __FUNCTION__, 185 dprintk("%s: %s NFSv4 callback!\n", __func__,
186 svc_print_addr(rqstp, buf, sizeof(buf))); 186 svc_print_addr(rqstp, buf, sizeof(buf)));
187 nfs_put_client(clp); 187 nfs_put_client(clp);
188 188
diff --git a/fs/nfs/callback_proc.c b/fs/nfs/callback_proc.c
index 15f7785048d3..f7e83e23cf9f 100644
--- a/fs/nfs/callback_proc.c
+++ b/fs/nfs/callback_proc.c
@@ -57,7 +57,7 @@ out_iput:
57out_putclient: 57out_putclient:
58 nfs_put_client(clp); 58 nfs_put_client(clp);
59out: 59out:
60 dprintk("%s: exit with status = %d\n", __FUNCTION__, ntohl(res->status)); 60 dprintk("%s: exit with status = %d\n", __func__, ntohl(res->status));
61 return res->status; 61 return res->status;
62} 62}
63 63
@@ -98,6 +98,6 @@ __be32 nfs4_callback_recall(struct cb_recallargs *args, void *dummy)
98 nfs_put_client(prev); 98 nfs_put_client(prev);
99 } while (clp != NULL); 99 } while (clp != NULL);
100out: 100out:
101 dprintk("%s: exit with status = %d\n", __FUNCTION__, ntohl(res)); 101 dprintk("%s: exit with status = %d\n", __func__, ntohl(res));
102 return res; 102 return res;
103} 103}
diff --git a/fs/nfs/callback_xdr.c b/fs/nfs/callback_xdr.c
index 13619d24f023..dd0ef34b5845 100644
--- a/fs/nfs/callback_xdr.c
+++ b/fs/nfs/callback_xdr.c
@@ -141,7 +141,7 @@ static __be32 decode_compound_hdr_arg(struct xdr_stream *xdr, struct cb_compound
141 /* We do not like overly long tags! */ 141 /* We do not like overly long tags! */
142 if (hdr->taglen > CB_OP_TAGLEN_MAXSZ - 12) { 142 if (hdr->taglen > CB_OP_TAGLEN_MAXSZ - 12) {
143 printk("NFSv4 CALLBACK %s: client sent tag of length %u\n", 143 printk("NFSv4 CALLBACK %s: client sent tag of length %u\n",
144 __FUNCTION__, hdr->taglen); 144 __func__, hdr->taglen);
145 return htonl(NFS4ERR_RESOURCE); 145 return htonl(NFS4ERR_RESOURCE);
146 } 146 }
147 p = read_buf(xdr, 12); 147 p = read_buf(xdr, 12);
@@ -151,7 +151,7 @@ static __be32 decode_compound_hdr_arg(struct xdr_stream *xdr, struct cb_compound
151 /* Check minor version is zero. */ 151 /* Check minor version is zero. */
152 if (minor_version != 0) { 152 if (minor_version != 0) {
153 printk(KERN_WARNING "%s: NFSv4 server callback with illegal minor version %u!\n", 153 printk(KERN_WARNING "%s: NFSv4 server callback with illegal minor version %u!\n",
154 __FUNCTION__, minor_version); 154 __func__, minor_version);
155 return htonl(NFS4ERR_MINOR_VERS_MISMATCH); 155 return htonl(NFS4ERR_MINOR_VERS_MISMATCH);
156 } 156 }
157 hdr->callback_ident = ntohl(*p++); 157 hdr->callback_ident = ntohl(*p++);
@@ -179,7 +179,7 @@ static __be32 decode_getattr_args(struct svc_rqst *rqstp, struct xdr_stream *xdr
179 args->addr = svc_addr(rqstp); 179 args->addr = svc_addr(rqstp);
180 status = decode_bitmap(xdr, args->bitmap); 180 status = decode_bitmap(xdr, args->bitmap);
181out: 181out:
182 dprintk("%s: exit with status = %d\n", __FUNCTION__, ntohl(status)); 182 dprintk("%s: exit with status = %d\n", __func__, ntohl(status));
183 return status; 183 return status;
184} 184}
185 185
@@ -200,7 +200,7 @@ static __be32 decode_recall_args(struct svc_rqst *rqstp, struct xdr_stream *xdr,
200 args->truncate = ntohl(*p); 200 args->truncate = ntohl(*p);
201 status = decode_fh(xdr, &args->fh); 201 status = decode_fh(xdr, &args->fh);
202out: 202out:
203 dprintk("%s: exit with status = %d\n", __FUNCTION__, ntohl(status)); 203 dprintk("%s: exit with status = %d\n", __func__, ntohl(status));
204 return status; 204 return status;
205} 205}
206 206
@@ -349,7 +349,7 @@ static __be32 encode_getattr_res(struct svc_rqst *rqstp, struct xdr_stream *xdr,
349 status = encode_attr_mtime(xdr, res->bitmap, &res->mtime); 349 status = encode_attr_mtime(xdr, res->bitmap, &res->mtime);
350 *savep = htonl((unsigned int)((char *)xdr->p - (char *)(savep+1))); 350 *savep = htonl((unsigned int)((char *)xdr->p - (char *)(savep+1)));
351out: 351out:
352 dprintk("%s: exit with status = %d\n", __FUNCTION__, ntohl(status)); 352 dprintk("%s: exit with status = %d\n", __func__, ntohl(status));
353 return status; 353 return status;
354} 354}
355 355
@@ -363,7 +363,7 @@ static __be32 process_op(struct svc_rqst *rqstp,
363 long maxlen; 363 long maxlen;
364 __be32 res; 364 __be32 res;
365 365
366 dprintk("%s: start\n", __FUNCTION__); 366 dprintk("%s: start\n", __func__);
367 status = decode_op_hdr(xdr_in, &op_nr); 367 status = decode_op_hdr(xdr_in, &op_nr);
368 if (likely(status == 0)) { 368 if (likely(status == 0)) {
369 switch (op_nr) { 369 switch (op_nr) {
@@ -392,7 +392,7 @@ static __be32 process_op(struct svc_rqst *rqstp,
392 status = res; 392 status = res;
393 if (op->encode_res != NULL && status == 0) 393 if (op->encode_res != NULL && status == 0)
394 status = op->encode_res(rqstp, xdr_out, resp); 394 status = op->encode_res(rqstp, xdr_out, resp);
395 dprintk("%s: done, status = %d\n", __FUNCTION__, ntohl(status)); 395 dprintk("%s: done, status = %d\n", __func__, ntohl(status));
396 return status; 396 return status;
397} 397}
398 398
@@ -401,37 +401,37 @@ static __be32 process_op(struct svc_rqst *rqstp,
401 */ 401 */
402static __be32 nfs4_callback_compound(struct svc_rqst *rqstp, void *argp, void *resp) 402static __be32 nfs4_callback_compound(struct svc_rqst *rqstp, void *argp, void *resp)
403{ 403{
404 struct cb_compound_hdr_arg hdr_arg; 404 struct cb_compound_hdr_arg hdr_arg = { 0 };
405 struct cb_compound_hdr_res hdr_res; 405 struct cb_compound_hdr_res hdr_res = { NULL };
406 struct xdr_stream xdr_in, xdr_out; 406 struct xdr_stream xdr_in, xdr_out;
407 __be32 *p; 407 __be32 *p;
408 __be32 status; 408 __be32 status;
409 unsigned int nops = 1; 409 unsigned int nops = 0;
410 410
411 dprintk("%s: start\n", __FUNCTION__); 411 dprintk("%s: start\n", __func__);
412 412
413 xdr_init_decode(&xdr_in, &rqstp->rq_arg, rqstp->rq_arg.head[0].iov_base); 413 xdr_init_decode(&xdr_in, &rqstp->rq_arg, rqstp->rq_arg.head[0].iov_base);
414 414
415 p = (__be32*)((char *)rqstp->rq_res.head[0].iov_base + rqstp->rq_res.head[0].iov_len); 415 p = (__be32*)((char *)rqstp->rq_res.head[0].iov_base + rqstp->rq_res.head[0].iov_len);
416 xdr_init_encode(&xdr_out, &rqstp->rq_res, p); 416 xdr_init_encode(&xdr_out, &rqstp->rq_res, p);
417 417
418 decode_compound_hdr_arg(&xdr_in, &hdr_arg); 418 status = decode_compound_hdr_arg(&xdr_in, &hdr_arg);
419 if (status == __constant_htonl(NFS4ERR_RESOURCE))
420 return rpc_garbage_args;
421
419 hdr_res.taglen = hdr_arg.taglen; 422 hdr_res.taglen = hdr_arg.taglen;
420 hdr_res.tag = hdr_arg.tag; 423 hdr_res.tag = hdr_arg.tag;
421 hdr_res.nops = NULL; 424 if (encode_compound_hdr_res(&xdr_out, &hdr_res) != 0)
422 encode_compound_hdr_res(&xdr_out, &hdr_res); 425 return rpc_system_err;
423 426
424 for (;;) { 427 while (status == 0 && nops != hdr_arg.nops) {
425 status = process_op(rqstp, &xdr_in, argp, &xdr_out, resp); 428 status = process_op(rqstp, &xdr_in, argp, &xdr_out, resp);
426 if (status != 0)
427 break;
428 if (nops == hdr_arg.nops)
429 break;
430 nops++; 429 nops++;
431 } 430 }
431
432 *hdr_res.status = status; 432 *hdr_res.status = status;
433 *hdr_res.nops = htonl(nops); 433 *hdr_res.nops = htonl(nops);
434 dprintk("%s: done, status = %u\n", __FUNCTION__, ntohl(status)); 434 dprintk("%s: done, status = %u\n", __func__, ntohl(status));
435 return rpc_success; 435 return rpc_success;
436} 436}
437 437
diff --git a/fs/nfs/client.c b/fs/nfs/client.c
index 89ac5bb0401c..f2a092ca69b5 100644
--- a/fs/nfs/client.c
+++ b/fs/nfs/client.c
@@ -488,7 +488,7 @@ static int nfs_create_rpc_client(struct nfs_client *clp,
488 clnt = rpc_create(&args); 488 clnt = rpc_create(&args);
489 if (IS_ERR(clnt)) { 489 if (IS_ERR(clnt)) {
490 dprintk("%s: cannot create RPC client. Error = %ld\n", 490 dprintk("%s: cannot create RPC client. Error = %ld\n",
491 __FUNCTION__, PTR_ERR(clnt)); 491 __func__, PTR_ERR(clnt));
492 return PTR_ERR(clnt); 492 return PTR_ERR(clnt);
493 } 493 }
494 494
@@ -576,7 +576,7 @@ static int nfs_init_server_rpcclient(struct nfs_server *server,
576 576
577 server->client = rpc_clone_client(clp->cl_rpcclient); 577 server->client = rpc_clone_client(clp->cl_rpcclient);
578 if (IS_ERR(server->client)) { 578 if (IS_ERR(server->client)) {
579 dprintk("%s: couldn't create rpc_client!\n", __FUNCTION__); 579 dprintk("%s: couldn't create rpc_client!\n", __func__);
580 return PTR_ERR(server->client); 580 return PTR_ERR(server->client);
581 } 581 }
582 582
@@ -590,7 +590,7 @@ static int nfs_init_server_rpcclient(struct nfs_server *server,
590 590
591 auth = rpcauth_create(pseudoflavour, server->client); 591 auth = rpcauth_create(pseudoflavour, server->client);
592 if (IS_ERR(auth)) { 592 if (IS_ERR(auth)) {
593 dprintk("%s: couldn't create credcache!\n", __FUNCTION__); 593 dprintk("%s: couldn't create credcache!\n", __func__);
594 return PTR_ERR(auth); 594 return PTR_ERR(auth);
595 } 595 }
596 } 596 }
@@ -985,7 +985,7 @@ static int nfs4_init_client(struct nfs_client *clp,
985 error = nfs_idmap_new(clp); 985 error = nfs_idmap_new(clp);
986 if (error < 0) { 986 if (error < 0) {
987 dprintk("%s: failed to create idmapper. Error = %d\n", 987 dprintk("%s: failed to create idmapper. Error = %d\n",
988 __FUNCTION__, error); 988 __func__, error);
989 goto error; 989 goto error;
990 } 990 }
991 __set_bit(NFS_CS_IDMAP, &clp->cl_res_state); 991 __set_bit(NFS_CS_IDMAP, &clp->cl_res_state);
diff --git a/fs/nfs/delegation.c b/fs/nfs/delegation.c
index 00a5e4405e16..cc563cfa6940 100644
--- a/fs/nfs/delegation.c
+++ b/fs/nfs/delegation.c
@@ -60,7 +60,7 @@ static int nfs_delegation_claim_locks(struct nfs_open_context *ctx, struct nfs4_
60 switch (status) { 60 switch (status) {
61 default: 61 default:
62 printk(KERN_ERR "%s: unhandled error %d.\n", 62 printk(KERN_ERR "%s: unhandled error %d.\n",
63 __FUNCTION__, status); 63 __func__, status);
64 case -NFS4ERR_EXPIRED: 64 case -NFS4ERR_EXPIRED:
65 /* kill_proc(fl->fl_pid, SIGLOST, 1); */ 65 /* kill_proc(fl->fl_pid, SIGLOST, 1); */
66 case -NFS4ERR_STALE_CLIENTID: 66 case -NFS4ERR_STALE_CLIENTID:
@@ -186,7 +186,7 @@ int nfs_inode_set_delegation(struct inode *inode, struct rpc_cred *cred, struct
186 */ 186 */
187 dfprintk(FILE, "%s: server %s handed out " 187 dfprintk(FILE, "%s: server %s handed out "
188 "a duplicate delegation!\n", 188 "a duplicate delegation!\n",
189 __FUNCTION__, clp->cl_hostname); 189 __func__, clp->cl_hostname);
190 if (delegation->type <= nfsi->delegation->type) { 190 if (delegation->type <= nfsi->delegation->type) {
191 freeme = delegation; 191 freeme = delegation;
192 delegation = NULL; 192 delegation = NULL;
diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
index f288b3ecab4a..58d43daec084 100644
--- a/fs/nfs/dir.c
+++ b/fs/nfs/dir.c
@@ -180,7 +180,7 @@ int nfs_readdir_filler(nfs_readdir_descriptor_t *desc, struct page *page)
180 int error; 180 int error;
181 181
182 dfprintk(DIRCACHE, "NFS: %s: reading cookie %Lu into page %lu\n", 182 dfprintk(DIRCACHE, "NFS: %s: reading cookie %Lu into page %lu\n",
183 __FUNCTION__, (long long)desc->entry->cookie, 183 __func__, (long long)desc->entry->cookie,
184 page->index); 184 page->index);
185 185
186 again: 186 again:
@@ -256,7 +256,7 @@ int find_dirent(nfs_readdir_descriptor_t *desc)
256 256
257 while((status = dir_decode(desc)) == 0) { 257 while((status = dir_decode(desc)) == 0) {
258 dfprintk(DIRCACHE, "NFS: %s: examining cookie %Lu\n", 258 dfprintk(DIRCACHE, "NFS: %s: examining cookie %Lu\n",
259 __FUNCTION__, (unsigned long long)entry->cookie); 259 __func__, (unsigned long long)entry->cookie);
260 if (entry->prev_cookie == *desc->dir_cookie) 260 if (entry->prev_cookie == *desc->dir_cookie)
261 break; 261 break;
262 if (loop_count++ > 200) { 262 if (loop_count++ > 200) {
@@ -315,7 +315,7 @@ int find_dirent_page(nfs_readdir_descriptor_t *desc)
315 int status; 315 int status;
316 316
317 dfprintk(DIRCACHE, "NFS: %s: searching page %ld for target %Lu\n", 317 dfprintk(DIRCACHE, "NFS: %s: searching page %ld for target %Lu\n",
318 __FUNCTION__, desc->page_index, 318 __func__, desc->page_index,
319 (long long) *desc->dir_cookie); 319 (long long) *desc->dir_cookie);
320 320
321 /* If we find the page in the page_cache, we cannot be sure 321 /* If we find the page in the page_cache, we cannot be sure
@@ -339,7 +339,7 @@ int find_dirent_page(nfs_readdir_descriptor_t *desc)
339 if (status < 0) 339 if (status < 0)
340 dir_page_release(desc); 340 dir_page_release(desc);
341 out: 341 out:
342 dfprintk(DIRCACHE, "NFS: %s: returns %d\n", __FUNCTION__, status); 342 dfprintk(DIRCACHE, "NFS: %s: returns %d\n", __func__, status);
343 return status; 343 return status;
344} 344}
345 345
@@ -380,7 +380,7 @@ int readdir_search_pagecache(nfs_readdir_descriptor_t *desc)
380 } 380 }
381 } 381 }
382 382
383 dfprintk(DIRCACHE, "NFS: %s: returns %d\n", __FUNCTION__, res); 383 dfprintk(DIRCACHE, "NFS: %s: returns %d\n", __func__, res);
384 return res; 384 return res;
385} 385}
386 386
@@ -506,7 +506,7 @@ int uncached_readdir(nfs_readdir_descriptor_t *desc, void *dirent,
506 desc->entry->eof = 0; 506 desc->entry->eof = 0;
507 out: 507 out:
508 dfprintk(DIRCACHE, "NFS: %s: returns %d\n", 508 dfprintk(DIRCACHE, "NFS: %s: returns %d\n",
509 __FUNCTION__, status); 509 __func__, status);
510 return status; 510 return status;
511 out_release: 511 out_release:
512 dir_page_release(desc); 512 dir_page_release(desc);
@@ -780,7 +780,7 @@ static int nfs_lookup_revalidate(struct dentry * dentry, struct nameidata *nd)
780 780
781 if (is_bad_inode(inode)) { 781 if (is_bad_inode(inode)) {
782 dfprintk(LOOKUPCACHE, "%s: %s/%s has dud inode\n", 782 dfprintk(LOOKUPCACHE, "%s: %s/%s has dud inode\n",
783 __FUNCTION__, dentry->d_parent->d_name.name, 783 __func__, dentry->d_parent->d_name.name,
784 dentry->d_name.name); 784 dentry->d_name.name);
785 goto out_bad; 785 goto out_bad;
786 } 786 }
@@ -808,7 +808,7 @@ static int nfs_lookup_revalidate(struct dentry * dentry, struct nameidata *nd)
808 unlock_kernel(); 808 unlock_kernel();
809 dput(parent); 809 dput(parent);
810 dfprintk(LOOKUPCACHE, "NFS: %s(%s/%s) is valid\n", 810 dfprintk(LOOKUPCACHE, "NFS: %s(%s/%s) is valid\n",
811 __FUNCTION__, dentry->d_parent->d_name.name, 811 __func__, dentry->d_parent->d_name.name,
812 dentry->d_name.name); 812 dentry->d_name.name);
813 return 1; 813 return 1;
814out_zap_parent: 814out_zap_parent:
@@ -827,7 +827,7 @@ out_zap_parent:
827 unlock_kernel(); 827 unlock_kernel();
828 dput(parent); 828 dput(parent);
829 dfprintk(LOOKUPCACHE, "NFS: %s(%s/%s) is invalid\n", 829 dfprintk(LOOKUPCACHE, "NFS: %s(%s/%s) is invalid\n",
830 __FUNCTION__, dentry->d_parent->d_name.name, 830 __func__, dentry->d_parent->d_name.name,
831 dentry->d_name.name); 831 dentry->d_name.name);
832 return 0; 832 return 0;
833} 833}
diff --git a/fs/nfs/file.c b/fs/nfs/file.c
index 3536b01164f9..d84a3d8f32af 100644
--- a/fs/nfs/file.c
+++ b/fs/nfs/file.c
@@ -526,7 +526,7 @@ static int do_vfs_lock(struct file *file, struct file_lock *fl)
526 if (res < 0) 526 if (res < 0)
527 dprintk(KERN_WARNING "%s: VFS is out of sync with lock manager" 527 dprintk(KERN_WARNING "%s: VFS is out of sync with lock manager"
528 " - error %d!\n", 528 " - error %d!\n",
529 __FUNCTION__, res); 529 __func__, res);
530 return res; 530 return res;
531} 531}
532 532
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
index 5cb3345eb694..596c5d8e86f4 100644
--- a/fs/nfs/inode.c
+++ b/fs/nfs/inode.c
@@ -541,8 +541,7 @@ static void __put_nfs_open_context(struct nfs_open_context *ctx, int wait)
541 } 541 }
542 if (ctx->cred != NULL) 542 if (ctx->cred != NULL)
543 put_rpccred(ctx->cred); 543 put_rpccred(ctx->cred);
544 dput(ctx->path.dentry); 544 path_put(&ctx->path);
545 mntput(ctx->path.mnt);
546 kfree(ctx); 545 kfree(ctx);
547} 546}
548 547
@@ -707,6 +706,13 @@ int nfs_attribute_timeout(struct inode *inode)
707 706
708 if (nfs_have_delegation(inode, FMODE_READ)) 707 if (nfs_have_delegation(inode, FMODE_READ))
709 return 0; 708 return 0;
709 /*
710 * Special case: if the attribute timeout is set to 0, then always
711 * treat the cache as having expired (unless holding
712 * a delegation).
713 */
714 if (nfsi->attrtimeo == 0)
715 return 1;
710 return !time_in_range(jiffies, nfsi->read_cache_jiffies, nfsi->read_cache_jiffies + nfsi->attrtimeo); 716 return !time_in_range(jiffies, nfsi->read_cache_jiffies, nfsi->read_cache_jiffies + nfsi->attrtimeo);
711} 717}
712 718
@@ -995,7 +1001,7 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
995 unsigned long now = jiffies; 1001 unsigned long now = jiffies;
996 1002
997 dfprintk(VFS, "NFS: %s(%s/%ld ct=%d info=0x%x)\n", 1003 dfprintk(VFS, "NFS: %s(%s/%ld ct=%d info=0x%x)\n",
998 __FUNCTION__, inode->i_sb->s_id, inode->i_ino, 1004 __func__, inode->i_sb->s_id, inode->i_ino,
999 atomic_read(&inode->i_count), fattr->valid); 1005 atomic_read(&inode->i_count), fattr->valid);
1000 1006
1001 if (nfsi->fileid != fattr->fileid) 1007 if (nfsi->fileid != fattr->fileid)
@@ -1119,7 +1125,7 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
1119 * Big trouble! The inode has become a different object. 1125 * Big trouble! The inode has become a different object.
1120 */ 1126 */
1121 printk(KERN_DEBUG "%s: inode %ld mode changed, %07o to %07o\n", 1127 printk(KERN_DEBUG "%s: inode %ld mode changed, %07o to %07o\n",
1122 __FUNCTION__, inode->i_ino, inode->i_mode, fattr->mode); 1128 __func__, inode->i_ino, inode->i_mode, fattr->mode);
1123 out_err: 1129 out_err:
1124 /* 1130 /*
1125 * No need to worry about unhashing the dentry, as the 1131 * No need to worry about unhashing the dentry, as the
diff --git a/fs/nfs/namespace.c b/fs/nfs/namespace.c
index af4d0f1e402c..2f285ef76399 100644
--- a/fs/nfs/namespace.c
+++ b/fs/nfs/namespace.c
@@ -106,7 +106,7 @@ static void * nfs_follow_mountpoint(struct dentry *dentry, struct nameidata *nd)
106 dprintk("--> nfs_follow_mountpoint()\n"); 106 dprintk("--> nfs_follow_mountpoint()\n");
107 107
108 BUG_ON(IS_ROOT(dentry)); 108 BUG_ON(IS_ROOT(dentry));
109 dprintk("%s: enter\n", __FUNCTION__); 109 dprintk("%s: enter\n", __func__);
110 dput(nd->path.dentry); 110 dput(nd->path.dentry);
111 nd->path.dentry = dget(dentry); 111 nd->path.dentry = dget(dentry);
112 112
@@ -137,13 +137,12 @@ static void * nfs_follow_mountpoint(struct dentry *dentry, struct nameidata *nd)
137 goto out_follow; 137 goto out_follow;
138 goto out_err; 138 goto out_err;
139 } 139 }
140 mntput(nd->path.mnt); 140 path_put(&nd->path);
141 dput(nd->path.dentry);
142 nd->path.mnt = mnt; 141 nd->path.mnt = mnt;
143 nd->path.dentry = dget(mnt->mnt_root); 142 nd->path.dentry = dget(mnt->mnt_root);
144 schedule_delayed_work(&nfs_automount_task, nfs_mountpoint_expiry_timeout); 143 schedule_delayed_work(&nfs_automount_task, nfs_mountpoint_expiry_timeout);
145out: 144out:
146 dprintk("%s: done, returned %d\n", __FUNCTION__, err); 145 dprintk("%s: done, returned %d\n", __func__, err);
147 146
148 dprintk("<-- nfs_follow_mountpoint() = %d\n", err); 147 dprintk("<-- nfs_follow_mountpoint() = %d\n", err);
149 return ERR_PTR(err); 148 return ERR_PTR(err);
@@ -230,7 +229,7 @@ static struct vfsmount *nfs_do_submount(const struct vfsmount *mnt_parent,
230 229
231 dprintk("--> nfs_do_submount()\n"); 230 dprintk("--> nfs_do_submount()\n");
232 231
233 dprintk("%s: submounting on %s/%s\n", __FUNCTION__, 232 dprintk("%s: submounting on %s/%s\n", __func__,
234 dentry->d_parent->d_name.name, 233 dentry->d_parent->d_name.name,
235 dentry->d_name.name); 234 dentry->d_name.name);
236 if (page == NULL) 235 if (page == NULL)
@@ -243,7 +242,7 @@ static struct vfsmount *nfs_do_submount(const struct vfsmount *mnt_parent,
243free_page: 242free_page:
244 free_page((unsigned long)page); 243 free_page((unsigned long)page);
245out: 244out:
246 dprintk("%s: done\n", __FUNCTION__); 245 dprintk("%s: done\n", __func__);
247 246
248 dprintk("<-- nfs_do_submount() = %p\n", mnt); 247 dprintk("<-- nfs_do_submount() = %p\n", mnt);
249 return mnt; 248 return mnt;
diff --git a/fs/nfs/nfs3proc.c b/fs/nfs/nfs3proc.c
index 549dbce714a4..c3523ad03ed1 100644
--- a/fs/nfs/nfs3proc.c
+++ b/fs/nfs/nfs3proc.c
@@ -63,15 +63,15 @@ do_proc_get_root(struct rpc_clnt *client, struct nfs_fh *fhandle,
63 }; 63 };
64 int status; 64 int status;
65 65
66 dprintk("%s: call fsinfo\n", __FUNCTION__); 66 dprintk("%s: call fsinfo\n", __func__);
67 nfs_fattr_init(info->fattr); 67 nfs_fattr_init(info->fattr);
68 status = rpc_call_sync(client, &msg, 0); 68 status = rpc_call_sync(client, &msg, 0);
69 dprintk("%s: reply fsinfo: %d\n", __FUNCTION__, status); 69 dprintk("%s: reply fsinfo: %d\n", __func__, status);
70 if (!(info->fattr->valid & NFS_ATTR_FATTR)) { 70 if (!(info->fattr->valid & NFS_ATTR_FATTR)) {
71 msg.rpc_proc = &nfs3_procedures[NFS3PROC_GETATTR]; 71 msg.rpc_proc = &nfs3_procedures[NFS3PROC_GETATTR];
72 msg.rpc_resp = info->fattr; 72 msg.rpc_resp = info->fattr;
73 status = rpc_call_sync(client, &msg, 0); 73 status = rpc_call_sync(client, &msg, 0);
74 dprintk("%s: reply getattr: %d\n", __FUNCTION__, status); 74 dprintk("%s: reply getattr: %d\n", __func__, status);
75 } 75 }
76 return status; 76 return status;
77} 77}
diff --git a/fs/nfs/nfs4_fs.h b/fs/nfs/nfs4_fs.h
index bd1b9d663fb9..ea790645fda6 100644
--- a/fs/nfs/nfs4_fs.h
+++ b/fs/nfs/nfs4_fs.h
@@ -206,7 +206,6 @@ struct rpc_cred *nfs4_get_renew_cred(struct nfs_client *clp);
206 206
207extern struct nfs4_state_owner * nfs4_get_state_owner(struct nfs_server *, struct rpc_cred *); 207extern struct nfs4_state_owner * nfs4_get_state_owner(struct nfs_server *, struct rpc_cred *);
208extern void nfs4_put_state_owner(struct nfs4_state_owner *); 208extern void nfs4_put_state_owner(struct nfs4_state_owner *);
209extern void nfs4_drop_state_owner(struct nfs4_state_owner *);
210extern struct nfs4_state * nfs4_get_open_state(struct inode *, struct nfs4_state_owner *); 209extern struct nfs4_state * nfs4_get_open_state(struct inode *, struct nfs4_state_owner *);
211extern void nfs4_put_open_state(struct nfs4_state *); 210extern void nfs4_put_open_state(struct nfs4_state *);
212extern void nfs4_close_state(struct path *, struct nfs4_state *, mode_t); 211extern void nfs4_close_state(struct path *, struct nfs4_state *, mode_t);
diff --git a/fs/nfs/nfs4namespace.c b/fs/nfs/nfs4namespace.c
index 5f9ba41ed5bf..b112857301f7 100644
--- a/fs/nfs/nfs4namespace.c
+++ b/fs/nfs/nfs4namespace.c
@@ -86,7 +86,7 @@ static int nfs4_validate_fspath(const struct vfsmount *mnt_parent,
86 86
87 if (strncmp(path, fs_path, strlen(fs_path)) != 0) { 87 if (strncmp(path, fs_path, strlen(fs_path)) != 0) {
88 dprintk("%s: path %s does not begin with fsroot %s\n", 88 dprintk("%s: path %s does not begin with fsroot %s\n",
89 __FUNCTION__, path, fs_path); 89 __func__, path, fs_path);
90 return -ENOENT; 90 return -ENOENT;
91 } 91 }
92 92
@@ -134,7 +134,7 @@ static struct vfsmount *nfs_follow_referral(const struct vfsmount *mnt_parent,
134 if (locations == NULL || locations->nlocations <= 0) 134 if (locations == NULL || locations->nlocations <= 0)
135 goto out; 135 goto out;
136 136
137 dprintk("%s: referral at %s/%s\n", __FUNCTION__, 137 dprintk("%s: referral at %s/%s\n", __func__,
138 dentry->d_parent->d_name.name, dentry->d_name.name); 138 dentry->d_parent->d_name.name, dentry->d_name.name);
139 139
140 page = (char *) __get_free_page(GFP_USER); 140 page = (char *) __get_free_page(GFP_USER);
@@ -204,7 +204,7 @@ static struct vfsmount *nfs_follow_referral(const struct vfsmount *mnt_parent,
204out: 204out:
205 free_page((unsigned long) page); 205 free_page((unsigned long) page);
206 free_page((unsigned long) page2); 206 free_page((unsigned long) page2);
207 dprintk("%s: done\n", __FUNCTION__); 207 dprintk("%s: done\n", __func__);
208 return mnt; 208 return mnt;
209} 209}
210 210
@@ -223,7 +223,7 @@ struct vfsmount *nfs_do_refmount(const struct vfsmount *mnt_parent, struct dentr
223 int err; 223 int err;
224 224
225 /* BUG_ON(IS_ROOT(dentry)); */ 225 /* BUG_ON(IS_ROOT(dentry)); */
226 dprintk("%s: enter\n", __FUNCTION__); 226 dprintk("%s: enter\n", __func__);
227 227
228 page = alloc_page(GFP_KERNEL); 228 page = alloc_page(GFP_KERNEL);
229 if (page == NULL) 229 if (page == NULL)
@@ -238,7 +238,7 @@ struct vfsmount *nfs_do_refmount(const struct vfsmount *mnt_parent, struct dentr
238 238
239 parent = dget_parent(dentry); 239 parent = dget_parent(dentry);
240 dprintk("%s: getting locations for %s/%s\n", 240 dprintk("%s: getting locations for %s/%s\n",
241 __FUNCTION__, parent->d_name.name, dentry->d_name.name); 241 __func__, parent->d_name.name, dentry->d_name.name);
242 242
243 err = nfs4_proc_fs_locations(parent->d_inode, &dentry->d_name, fs_locations, page); 243 err = nfs4_proc_fs_locations(parent->d_inode, &dentry->d_name, fs_locations, page);
244 dput(parent); 244 dput(parent);
@@ -252,6 +252,6 @@ out_free:
252 __free_page(page); 252 __free_page(page);
253 kfree(fs_locations); 253 kfree(fs_locations);
254out: 254out:
255 dprintk("%s: done\n", __FUNCTION__); 255 dprintk("%s: done\n", __func__);
256 return mnt; 256 return mnt;
257} 257}
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index dbc09271af02..1293e0acd82b 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -73,7 +73,7 @@ int nfs4_map_errors(int err)
73{ 73{
74 if (err < -1000) { 74 if (err < -1000) {
75 dprintk("%s could not handle NFSv4 error %d\n", 75 dprintk("%s could not handle NFSv4 error %d\n",
76 __FUNCTION__, -err); 76 __func__, -err);
77 return -EIO; 77 return -EIO;
78 } 78 }
79 return err; 79 return err;
@@ -306,8 +306,7 @@ static void nfs4_opendata_free(struct kref *kref)
306 nfs4_put_open_state(p->state); 306 nfs4_put_open_state(p->state);
307 nfs4_put_state_owner(p->owner); 307 nfs4_put_state_owner(p->owner);
308 dput(p->dir); 308 dput(p->dir);
309 dput(p->path.dentry); 309 path_put(&p->path);
310 mntput(p->path.mnt);
311 kfree(p); 310 kfree(p);
312} 311}
313 312
@@ -1210,8 +1209,7 @@ static void nfs4_free_closedata(void *data)
1210 nfs4_put_open_state(calldata->state); 1209 nfs4_put_open_state(calldata->state);
1211 nfs_free_seqid(calldata->arg.seqid); 1210 nfs_free_seqid(calldata->arg.seqid);
1212 nfs4_put_state_owner(sp); 1211 nfs4_put_state_owner(sp);
1213 dput(calldata->path.dentry); 1212 path_put(&calldata->path);
1214 mntput(calldata->path.mnt);
1215 kfree(calldata); 1213 kfree(calldata);
1216} 1214}
1217 1215
@@ -1578,7 +1576,7 @@ static int nfs4_get_referral(struct inode *dir, const struct qstr *name, struct
1578 goto out; 1576 goto out;
1579 /* Make sure server returned a different fsid for the referral */ 1577 /* Make sure server returned a different fsid for the referral */
1580 if (nfs_fsid_equal(&NFS_SERVER(dir)->fsid, &locations->fattr.fsid)) { 1578 if (nfs_fsid_equal(&NFS_SERVER(dir)->fsid, &locations->fattr.fsid)) {
1581 dprintk("%s: server did not return a different fsid for a referral at %s\n", __FUNCTION__, name->name); 1579 dprintk("%s: server did not return a different fsid for a referral at %s\n", __func__, name->name);
1582 status = -EIO; 1580 status = -EIO;
1583 goto out; 1581 goto out;
1584 } 1582 }
@@ -2211,7 +2209,7 @@ static int _nfs4_proc_readdir(struct dentry *dentry, struct rpc_cred *cred,
2211 }; 2209 };
2212 int status; 2210 int status;
2213 2211
2214 dprintk("%s: dentry = %s/%s, cookie = %Lu\n", __FUNCTION__, 2212 dprintk("%s: dentry = %s/%s, cookie = %Lu\n", __func__,
2215 dentry->d_parent->d_name.name, 2213 dentry->d_parent->d_name.name,
2216 dentry->d_name.name, 2214 dentry->d_name.name,
2217 (unsigned long long)cookie); 2215 (unsigned long long)cookie);
@@ -2223,7 +2221,7 @@ static int _nfs4_proc_readdir(struct dentry *dentry, struct rpc_cred *cred,
2223 2221
2224 nfs_invalidate_atime(dir); 2222 nfs_invalidate_atime(dir);
2225 2223
2226 dprintk("%s: returns %d\n", __FUNCTION__, status); 2224 dprintk("%s: returns %d\n", __func__, status);
2227 return status; 2225 return status;
2228} 2226}
2229 2227
@@ -3342,7 +3340,7 @@ static void nfs4_lock_prepare(struct rpc_task *task, void *calldata)
3342 struct nfs4_lockdata *data = calldata; 3340 struct nfs4_lockdata *data = calldata;
3343 struct nfs4_state *state = data->lsp->ls_state; 3341 struct nfs4_state *state = data->lsp->ls_state;
3344 3342
3345 dprintk("%s: begin!\n", __FUNCTION__); 3343 dprintk("%s: begin!\n", __func__);
3346 if (nfs_wait_on_sequence(data->arg.lock_seqid, task) != 0) 3344 if (nfs_wait_on_sequence(data->arg.lock_seqid, task) != 0)
3347 return; 3345 return;
3348 /* Do we need to do an open_to_lock_owner? */ 3346 /* Do we need to do an open_to_lock_owner? */
@@ -3356,14 +3354,14 @@ static void nfs4_lock_prepare(struct rpc_task *task, void *calldata)
3356 data->arg.new_lock_owner = 0; 3354 data->arg.new_lock_owner = 0;
3357 data->timestamp = jiffies; 3355 data->timestamp = jiffies;
3358 rpc_call_start(task); 3356 rpc_call_start(task);
3359 dprintk("%s: done!, ret = %d\n", __FUNCTION__, data->rpc_status); 3357 dprintk("%s: done!, ret = %d\n", __func__, data->rpc_status);
3360} 3358}
3361 3359
3362static void nfs4_lock_done(struct rpc_task *task, void *calldata) 3360static void nfs4_lock_done(struct rpc_task *task, void *calldata)
3363{ 3361{
3364 struct nfs4_lockdata *data = calldata; 3362 struct nfs4_lockdata *data = calldata;
3365 3363
3366 dprintk("%s: begin!\n", __FUNCTION__); 3364 dprintk("%s: begin!\n", __func__);
3367 3365
3368 data->rpc_status = task->tk_status; 3366 data->rpc_status = task->tk_status;
3369 if (RPC_ASSASSINATED(task)) 3367 if (RPC_ASSASSINATED(task))
@@ -3381,14 +3379,14 @@ static void nfs4_lock_done(struct rpc_task *task, void *calldata)
3381 renew_lease(NFS_SERVER(data->ctx->path.dentry->d_inode), data->timestamp); 3379 renew_lease(NFS_SERVER(data->ctx->path.dentry->d_inode), data->timestamp);
3382 } 3380 }
3383out: 3381out:
3384 dprintk("%s: done, ret = %d!\n", __FUNCTION__, data->rpc_status); 3382 dprintk("%s: done, ret = %d!\n", __func__, data->rpc_status);
3385} 3383}
3386 3384
3387static void nfs4_lock_release(void *calldata) 3385static void nfs4_lock_release(void *calldata)
3388{ 3386{
3389 struct nfs4_lockdata *data = calldata; 3387 struct nfs4_lockdata *data = calldata;
3390 3388
3391 dprintk("%s: begin!\n", __FUNCTION__); 3389 dprintk("%s: begin!\n", __func__);
3392 nfs_free_seqid(data->arg.open_seqid); 3390 nfs_free_seqid(data->arg.open_seqid);
3393 if (data->cancelled != 0) { 3391 if (data->cancelled != 0) {
3394 struct rpc_task *task; 3392 struct rpc_task *task;
@@ -3396,13 +3394,13 @@ static void nfs4_lock_release(void *calldata)
3396 data->arg.lock_seqid); 3394 data->arg.lock_seqid);
3397 if (!IS_ERR(task)) 3395 if (!IS_ERR(task))
3398 rpc_put_task(task); 3396 rpc_put_task(task);
3399 dprintk("%s: cancelling lock!\n", __FUNCTION__); 3397 dprintk("%s: cancelling lock!\n", __func__);
3400 } else 3398 } else
3401 nfs_free_seqid(data->arg.lock_seqid); 3399 nfs_free_seqid(data->arg.lock_seqid);
3402 nfs4_put_lock_state(data->lsp); 3400 nfs4_put_lock_state(data->lsp);
3403 put_nfs_open_context(data->ctx); 3401 put_nfs_open_context(data->ctx);
3404 kfree(data); 3402 kfree(data);
3405 dprintk("%s: done!\n", __FUNCTION__); 3403 dprintk("%s: done!\n", __func__);
3406} 3404}
3407 3405
3408static const struct rpc_call_ops nfs4_lock_ops = { 3406static const struct rpc_call_ops nfs4_lock_ops = {
@@ -3428,7 +3426,7 @@ static int _nfs4_do_setlk(struct nfs4_state *state, int cmd, struct file_lock *f
3428 }; 3426 };
3429 int ret; 3427 int ret;
3430 3428
3431 dprintk("%s: begin!\n", __FUNCTION__); 3429 dprintk("%s: begin!\n", __func__);
3432 data = nfs4_alloc_lockdata(fl, nfs_file_open_context(fl->fl_file), 3430 data = nfs4_alloc_lockdata(fl, nfs_file_open_context(fl->fl_file),
3433 fl->fl_u.nfs4_fl.owner); 3431 fl->fl_u.nfs4_fl.owner);
3434 if (data == NULL) 3432 if (data == NULL)
@@ -3451,7 +3449,7 @@ static int _nfs4_do_setlk(struct nfs4_state *state, int cmd, struct file_lock *f
3451 } else 3449 } else
3452 data->cancelled = 1; 3450 data->cancelled = 1;
3453 rpc_put_task(task); 3451 rpc_put_task(task);
3454 dprintk("%s: done, ret = %d!\n", __FUNCTION__, ret); 3452 dprintk("%s: done, ret = %d!\n", __func__, ret);
3455 return ret; 3453 return ret;
3456} 3454}
3457 3455
@@ -3527,7 +3525,7 @@ static int _nfs4_proc_setlk(struct nfs4_state *state, int cmd, struct file_lock
3527 /* Note: we always want to sleep here! */ 3525 /* Note: we always want to sleep here! */
3528 request->fl_flags = fl_flags | FL_SLEEP; 3526 request->fl_flags = fl_flags | FL_SLEEP;
3529 if (do_vfs_lock(request->fl_file, request) < 0) 3527 if (do_vfs_lock(request->fl_file, request) < 0)
3530 printk(KERN_WARNING "%s: VFS is out of sync with lock manager!\n", __FUNCTION__); 3528 printk(KERN_WARNING "%s: VFS is out of sync with lock manager!\n", __func__);
3531out_unlock: 3529out_unlock:
3532 up_read(&clp->cl_sem); 3530 up_read(&clp->cl_sem);
3533out: 3531out:
@@ -3665,12 +3663,12 @@ int nfs4_proc_fs_locations(struct inode *dir, const struct qstr *name,
3665 }; 3663 };
3666 int status; 3664 int status;
3667 3665
3668 dprintk("%s: start\n", __FUNCTION__); 3666 dprintk("%s: start\n", __func__);
3669 nfs_fattr_init(&fs_locations->fattr); 3667 nfs_fattr_init(&fs_locations->fattr);
3670 fs_locations->server = server; 3668 fs_locations->server = server;
3671 fs_locations->nlocations = 0; 3669 fs_locations->nlocations = 0;
3672 status = rpc_call_sync(server->client, &msg, 0); 3670 status = rpc_call_sync(server->client, &msg, 0);
3673 dprintk("%s: returned status = %d\n", __FUNCTION__, status); 3671 dprintk("%s: returned status = %d\n", __func__, status);
3674 return status; 3672 return status;
3675} 3673}
3676 3674
diff --git a/fs/nfs/nfs4renewd.c b/fs/nfs/nfs4renewd.c
index 5e2e4af1a0e6..3305acbbe2ae 100644
--- a/fs/nfs/nfs4renewd.c
+++ b/fs/nfs/nfs4renewd.c
@@ -66,7 +66,7 @@ nfs4_renew_state(struct work_struct *work)
66 unsigned long last, now; 66 unsigned long last, now;
67 67
68 down_read(&clp->cl_sem); 68 down_read(&clp->cl_sem);
69 dprintk("%s: start\n", __FUNCTION__); 69 dprintk("%s: start\n", __func__);
70 /* Are there any active superblocks? */ 70 /* Are there any active superblocks? */
71 if (list_empty(&clp->cl_superblocks)) 71 if (list_empty(&clp->cl_superblocks))
72 goto out; 72 goto out;
@@ -92,17 +92,17 @@ nfs4_renew_state(struct work_struct *work)
92 spin_lock(&clp->cl_lock); 92 spin_lock(&clp->cl_lock);
93 } else 93 } else
94 dprintk("%s: failed to call renewd. Reason: lease not expired \n", 94 dprintk("%s: failed to call renewd. Reason: lease not expired \n",
95 __FUNCTION__); 95 __func__);
96 if (timeout < 5 * HZ) /* safeguard */ 96 if (timeout < 5 * HZ) /* safeguard */
97 timeout = 5 * HZ; 97 timeout = 5 * HZ;
98 dprintk("%s: requeueing work. Lease period = %ld\n", 98 dprintk("%s: requeueing work. Lease period = %ld\n",
99 __FUNCTION__, (timeout + HZ - 1) / HZ); 99 __func__, (timeout + HZ - 1) / HZ);
100 cancel_delayed_work(&clp->cl_renewd); 100 cancel_delayed_work(&clp->cl_renewd);
101 schedule_delayed_work(&clp->cl_renewd, timeout); 101 schedule_delayed_work(&clp->cl_renewd, timeout);
102 spin_unlock(&clp->cl_lock); 102 spin_unlock(&clp->cl_lock);
103out: 103out:
104 up_read(&clp->cl_sem); 104 up_read(&clp->cl_sem);
105 dprintk("%s: done\n", __FUNCTION__); 105 dprintk("%s: done\n", __func__);
106} 106}
107 107
108/* Must be called with clp->cl_sem locked for writes */ 108/* Must be called with clp->cl_sem locked for writes */
@@ -117,7 +117,7 @@ nfs4_schedule_state_renewal(struct nfs_client *clp)
117 if (timeout < 5 * HZ) 117 if (timeout < 5 * HZ)
118 timeout = 5 * HZ; 118 timeout = 5 * HZ;
119 dprintk("%s: requeueing work. Lease period = %ld\n", 119 dprintk("%s: requeueing work. Lease period = %ld\n",
120 __FUNCTION__, (timeout + HZ - 1) / HZ); 120 __func__, (timeout + HZ - 1) / HZ);
121 cancel_delayed_work(&clp->cl_renewd); 121 cancel_delayed_work(&clp->cl_renewd);
122 schedule_delayed_work(&clp->cl_renewd, timeout); 122 schedule_delayed_work(&clp->cl_renewd, timeout);
123 set_bit(NFS_CS_RENEWD, &clp->cl_res_state); 123 set_bit(NFS_CS_RENEWD, &clp->cl_res_state);
diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
index 46eb624e4f16..856a8934f610 100644
--- a/fs/nfs/nfs4state.c
+++ b/fs/nfs/nfs4state.c
@@ -282,7 +282,7 @@ nfs4_alloc_state_owner(void)
282 return sp; 282 return sp;
283} 283}
284 284
285void 285static void
286nfs4_drop_state_owner(struct nfs4_state_owner *sp) 286nfs4_drop_state_owner(struct nfs4_state_owner *sp)
287{ 287{
288 if (!RB_EMPTY_NODE(&sp->so_client_node)) { 288 if (!RB_EMPTY_NODE(&sp->so_client_node)) {
@@ -828,7 +828,7 @@ static int nfs4_reclaim_locks(struct nfs4_state_recovery_ops *ops, struct nfs4_s
828 switch (status) { 828 switch (status) {
829 default: 829 default:
830 printk(KERN_ERR "%s: unhandled error %d. Zeroing state\n", 830 printk(KERN_ERR "%s: unhandled error %d. Zeroing state\n",
831 __FUNCTION__, status); 831 __func__, status);
832 case -NFS4ERR_EXPIRED: 832 case -NFS4ERR_EXPIRED:
833 case -NFS4ERR_NO_GRACE: 833 case -NFS4ERR_NO_GRACE:
834 case -NFS4ERR_RECLAIM_BAD: 834 case -NFS4ERR_RECLAIM_BAD:
@@ -869,14 +869,14 @@ static int nfs4_reclaim_open_state(struct nfs4_state_recovery_ops *ops, struct n
869 list_for_each_entry(lock, &state->lock_states, ls_locks) { 869 list_for_each_entry(lock, &state->lock_states, ls_locks) {
870 if (!(lock->ls_flags & NFS_LOCK_INITIALIZED)) 870 if (!(lock->ls_flags & NFS_LOCK_INITIALIZED))
871 printk("%s: Lock reclaim failed!\n", 871 printk("%s: Lock reclaim failed!\n",
872 __FUNCTION__); 872 __func__);
873 } 873 }
874 continue; 874 continue;
875 } 875 }
876 switch (status) { 876 switch (status) {
877 default: 877 default:
878 printk(KERN_ERR "%s: unhandled error %d. Zeroing state\n", 878 printk(KERN_ERR "%s: unhandled error %d. Zeroing state\n",
879 __FUNCTION__, status); 879 __func__, status);
880 case -ENOENT: 880 case -ENOENT:
881 case -NFS4ERR_RECLAIM_BAD: 881 case -NFS4ERR_RECLAIM_BAD:
882 case -NFS4ERR_RECLAIM_CONFLICT: 882 case -NFS4ERR_RECLAIM_CONFLICT:
diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
index 5a2d64927b35..b916297d2334 100644
--- a/fs/nfs/nfs4xdr.c
+++ b/fs/nfs/nfs4xdr.c
@@ -1831,7 +1831,7 @@ static int nfs4_xdr_enc_readdir(struct rpc_rqst *req, __be32 *p, const struct nf
1831 xdr_inline_pages(&req->rq_rcv_buf, replen, args->pages, 1831 xdr_inline_pages(&req->rq_rcv_buf, replen, args->pages,
1832 args->pgbase, args->count); 1832 args->pgbase, args->count);
1833 dprintk("%s: inlined page args = (%u, %p, %u, %u)\n", 1833 dprintk("%s: inlined page args = (%u, %p, %u, %u)\n",
1834 __FUNCTION__, replen, args->pages, 1834 __func__, replen, args->pages,
1835 args->pgbase, args->count); 1835 args->pgbase, args->count);
1836 1836
1837out: 1837out:
@@ -2192,9 +2192,9 @@ out:
2192 p = xdr_inline_decode(xdr, nbytes); \ 2192 p = xdr_inline_decode(xdr, nbytes); \
2193 if (unlikely(!p)) { \ 2193 if (unlikely(!p)) { \
2194 dprintk("nfs: %s: prematurely hit end of receive" \ 2194 dprintk("nfs: %s: prematurely hit end of receive" \
2195 " buffer\n", __FUNCTION__); \ 2195 " buffer\n", __func__); \
2196 dprintk("nfs: %s: xdr->p=%p, bytes=%u, xdr->end=%p\n", \ 2196 dprintk("nfs: %s: xdr->p=%p, bytes=%u, xdr->end=%p\n", \
2197 __FUNCTION__, xdr->p, nbytes, xdr->end); \ 2197 __func__, xdr->p, nbytes, xdr->end); \
2198 return -EIO; \ 2198 return -EIO; \
2199 } \ 2199 } \
2200} while (0) 2200} while (0)
@@ -2306,12 +2306,12 @@ static int decode_attr_type(struct xdr_stream *xdr, uint32_t *bitmap, uint32_t *
2306 READ_BUF(4); 2306 READ_BUF(4);
2307 READ32(*type); 2307 READ32(*type);
2308 if (*type < NF4REG || *type > NF4NAMEDATTR) { 2308 if (*type < NF4REG || *type > NF4NAMEDATTR) {
2309 dprintk("%s: bad type %d\n", __FUNCTION__, *type); 2309 dprintk("%s: bad type %d\n", __func__, *type);
2310 return -EIO; 2310 return -EIO;
2311 } 2311 }
2312 bitmap[0] &= ~FATTR4_WORD0_TYPE; 2312 bitmap[0] &= ~FATTR4_WORD0_TYPE;
2313 } 2313 }
2314 dprintk("%s: type=0%o\n", __FUNCTION__, nfs_type2fmt[*type].nfs2type); 2314 dprintk("%s: type=0%o\n", __func__, nfs_type2fmt[*type].nfs2type);
2315 return 0; 2315 return 0;
2316} 2316}
2317 2317
@@ -2327,7 +2327,7 @@ static int decode_attr_change(struct xdr_stream *xdr, uint32_t *bitmap, uint64_t
2327 READ64(*change); 2327 READ64(*change);
2328 bitmap[0] &= ~FATTR4_WORD0_CHANGE; 2328 bitmap[0] &= ~FATTR4_WORD0_CHANGE;
2329 } 2329 }
2330 dprintk("%s: change attribute=%Lu\n", __FUNCTION__, 2330 dprintk("%s: change attribute=%Lu\n", __func__,
2331 (unsigned long long)*change); 2331 (unsigned long long)*change);
2332 return 0; 2332 return 0;
2333} 2333}
@@ -2344,7 +2344,7 @@ static int decode_attr_size(struct xdr_stream *xdr, uint32_t *bitmap, uint64_t *
2344 READ64(*size); 2344 READ64(*size);
2345 bitmap[0] &= ~FATTR4_WORD0_SIZE; 2345 bitmap[0] &= ~FATTR4_WORD0_SIZE;
2346 } 2346 }
2347 dprintk("%s: file size=%Lu\n", __FUNCTION__, (unsigned long long)*size); 2347 dprintk("%s: file size=%Lu\n", __func__, (unsigned long long)*size);
2348 return 0; 2348 return 0;
2349} 2349}
2350 2350
@@ -2360,7 +2360,7 @@ static int decode_attr_link_support(struct xdr_stream *xdr, uint32_t *bitmap, ui
2360 READ32(*res); 2360 READ32(*res);
2361 bitmap[0] &= ~FATTR4_WORD0_LINK_SUPPORT; 2361 bitmap[0] &= ~FATTR4_WORD0_LINK_SUPPORT;
2362 } 2362 }
2363 dprintk("%s: link support=%s\n", __FUNCTION__, *res == 0 ? "false" : "true"); 2363 dprintk("%s: link support=%s\n", __func__, *res == 0 ? "false" : "true");
2364 return 0; 2364 return 0;
2365} 2365}
2366 2366
@@ -2376,7 +2376,7 @@ static int decode_attr_symlink_support(struct xdr_stream *xdr, uint32_t *bitmap,
2376 READ32(*res); 2376 READ32(*res);
2377 bitmap[0] &= ~FATTR4_WORD0_SYMLINK_SUPPORT; 2377 bitmap[0] &= ~FATTR4_WORD0_SYMLINK_SUPPORT;
2378 } 2378 }
2379 dprintk("%s: symlink support=%s\n", __FUNCTION__, *res == 0 ? "false" : "true"); 2379 dprintk("%s: symlink support=%s\n", __func__, *res == 0 ? "false" : "true");
2380 return 0; 2380 return 0;
2381} 2381}
2382 2382
@@ -2394,7 +2394,7 @@ static int decode_attr_fsid(struct xdr_stream *xdr, uint32_t *bitmap, struct nfs
2394 READ64(fsid->minor); 2394 READ64(fsid->minor);
2395 bitmap[0] &= ~FATTR4_WORD0_FSID; 2395 bitmap[0] &= ~FATTR4_WORD0_FSID;
2396 } 2396 }
2397 dprintk("%s: fsid=(0x%Lx/0x%Lx)\n", __FUNCTION__, 2397 dprintk("%s: fsid=(0x%Lx/0x%Lx)\n", __func__,
2398 (unsigned long long)fsid->major, 2398 (unsigned long long)fsid->major,
2399 (unsigned long long)fsid->minor); 2399 (unsigned long long)fsid->minor);
2400 return 0; 2400 return 0;
@@ -2412,7 +2412,7 @@ static int decode_attr_lease_time(struct xdr_stream *xdr, uint32_t *bitmap, uint
2412 READ32(*res); 2412 READ32(*res);
2413 bitmap[0] &= ~FATTR4_WORD0_LEASE_TIME; 2413 bitmap[0] &= ~FATTR4_WORD0_LEASE_TIME;
2414 } 2414 }
2415 dprintk("%s: file size=%u\n", __FUNCTION__, (unsigned int)*res); 2415 dprintk("%s: file size=%u\n", __func__, (unsigned int)*res);
2416 return 0; 2416 return 0;
2417} 2417}
2418 2418
@@ -2428,7 +2428,7 @@ static int decode_attr_aclsupport(struct xdr_stream *xdr, uint32_t *bitmap, uint
2428 READ32(*res); 2428 READ32(*res);
2429 bitmap[0] &= ~FATTR4_WORD0_ACLSUPPORT; 2429 bitmap[0] &= ~FATTR4_WORD0_ACLSUPPORT;
2430 } 2430 }
2431 dprintk("%s: ACLs supported=%u\n", __FUNCTION__, (unsigned int)*res); 2431 dprintk("%s: ACLs supported=%u\n", __func__, (unsigned int)*res);
2432 return 0; 2432 return 0;
2433} 2433}
2434 2434
@@ -2444,7 +2444,7 @@ static int decode_attr_fileid(struct xdr_stream *xdr, uint32_t *bitmap, uint64_t
2444 READ64(*fileid); 2444 READ64(*fileid);
2445 bitmap[0] &= ~FATTR4_WORD0_FILEID; 2445 bitmap[0] &= ~FATTR4_WORD0_FILEID;
2446 } 2446 }
2447 dprintk("%s: fileid=%Lu\n", __FUNCTION__, (unsigned long long)*fileid); 2447 dprintk("%s: fileid=%Lu\n", __func__, (unsigned long long)*fileid);
2448 return 0; 2448 return 0;
2449} 2449}
2450 2450
@@ -2460,7 +2460,7 @@ static int decode_attr_mounted_on_fileid(struct xdr_stream *xdr, uint32_t *bitma
2460 READ64(*fileid); 2460 READ64(*fileid);
2461 bitmap[1] &= ~FATTR4_WORD1_MOUNTED_ON_FILEID; 2461 bitmap[1] &= ~FATTR4_WORD1_MOUNTED_ON_FILEID;
2462 } 2462 }
2463 dprintk("%s: fileid=%Lu\n", __FUNCTION__, (unsigned long long)*fileid); 2463 dprintk("%s: fileid=%Lu\n", __func__, (unsigned long long)*fileid);
2464 return 0; 2464 return 0;
2465} 2465}
2466 2466
@@ -2477,7 +2477,7 @@ static int decode_attr_files_avail(struct xdr_stream *xdr, uint32_t *bitmap, uin
2477 READ64(*res); 2477 READ64(*res);
2478 bitmap[0] &= ~FATTR4_WORD0_FILES_AVAIL; 2478 bitmap[0] &= ~FATTR4_WORD0_FILES_AVAIL;
2479 } 2479 }
2480 dprintk("%s: files avail=%Lu\n", __FUNCTION__, (unsigned long long)*res); 2480 dprintk("%s: files avail=%Lu\n", __func__, (unsigned long long)*res);
2481 return status; 2481 return status;
2482} 2482}
2483 2483
@@ -2494,7 +2494,7 @@ static int decode_attr_files_free(struct xdr_stream *xdr, uint32_t *bitmap, uint
2494 READ64(*res); 2494 READ64(*res);
2495 bitmap[0] &= ~FATTR4_WORD0_FILES_FREE; 2495 bitmap[0] &= ~FATTR4_WORD0_FILES_FREE;
2496 } 2496 }
2497 dprintk("%s: files free=%Lu\n", __FUNCTION__, (unsigned long long)*res); 2497 dprintk("%s: files free=%Lu\n", __func__, (unsigned long long)*res);
2498 return status; 2498 return status;
2499} 2499}
2500 2500
@@ -2511,7 +2511,7 @@ static int decode_attr_files_total(struct xdr_stream *xdr, uint32_t *bitmap, uin
2511 READ64(*res); 2511 READ64(*res);
2512 bitmap[0] &= ~FATTR4_WORD0_FILES_TOTAL; 2512 bitmap[0] &= ~FATTR4_WORD0_FILES_TOTAL;
2513 } 2513 }
2514 dprintk("%s: files total=%Lu\n", __FUNCTION__, (unsigned long long)*res); 2514 dprintk("%s: files total=%Lu\n", __func__, (unsigned long long)*res);
2515 return status; 2515 return status;
2516} 2516}
2517 2517
@@ -2569,7 +2569,7 @@ static int decode_attr_fs_locations(struct xdr_stream *xdr, uint32_t *bitmap, st
2569 status = 0; 2569 status = 0;
2570 if (unlikely(!(bitmap[0] & FATTR4_WORD0_FS_LOCATIONS))) 2570 if (unlikely(!(bitmap[0] & FATTR4_WORD0_FS_LOCATIONS)))
2571 goto out; 2571 goto out;
2572 dprintk("%s: fsroot ", __FUNCTION__); 2572 dprintk("%s: fsroot ", __func__);
2573 status = decode_pathname(xdr, &res->fs_path); 2573 status = decode_pathname(xdr, &res->fs_path);
2574 if (unlikely(status != 0)) 2574 if (unlikely(status != 0))
2575 goto out; 2575 goto out;
@@ -2586,7 +2586,7 @@ static int decode_attr_fs_locations(struct xdr_stream *xdr, uint32_t *bitmap, st
2586 READ32(m); 2586 READ32(m);
2587 2587
2588 loc->nservers = 0; 2588 loc->nservers = 0;
2589 dprintk("%s: servers ", __FUNCTION__); 2589 dprintk("%s: servers ", __func__);
2590 while (loc->nservers < m) { 2590 while (loc->nservers < m) {
2591 struct nfs4_string *server = &loc->servers[loc->nservers]; 2591 struct nfs4_string *server = &loc->servers[loc->nservers];
2592 status = decode_opaque_inline(xdr, &server->len, &server->data); 2592 status = decode_opaque_inline(xdr, &server->len, &server->data);
@@ -2599,7 +2599,7 @@ static int decode_attr_fs_locations(struct xdr_stream *xdr, uint32_t *bitmap, st
2599 unsigned int i; 2599 unsigned int i;
2600 dprintk("%s: using first %u of %u servers " 2600 dprintk("%s: using first %u of %u servers "
2601 "returned for location %u\n", 2601 "returned for location %u\n",
2602 __FUNCTION__, 2602 __func__,
2603 NFS4_FS_LOCATION_MAXSERVERS, 2603 NFS4_FS_LOCATION_MAXSERVERS,
2604 m, res->nlocations); 2604 m, res->nlocations);
2605 for (i = loc->nservers; i < m; i++) { 2605 for (i = loc->nservers; i < m; i++) {
@@ -2618,7 +2618,7 @@ static int decode_attr_fs_locations(struct xdr_stream *xdr, uint32_t *bitmap, st
2618 res->nlocations++; 2618 res->nlocations++;
2619 } 2619 }
2620out: 2620out:
2621 dprintk("%s: fs_locations done, error = %d\n", __FUNCTION__, status); 2621 dprintk("%s: fs_locations done, error = %d\n", __func__, status);
2622 return status; 2622 return status;
2623out_eio: 2623out_eio:
2624 status = -EIO; 2624 status = -EIO;
@@ -2638,7 +2638,7 @@ static int decode_attr_maxfilesize(struct xdr_stream *xdr, uint32_t *bitmap, uin
2638 READ64(*res); 2638 READ64(*res);
2639 bitmap[0] &= ~FATTR4_WORD0_MAXFILESIZE; 2639 bitmap[0] &= ~FATTR4_WORD0_MAXFILESIZE;
2640 } 2640 }
2641 dprintk("%s: maxfilesize=%Lu\n", __FUNCTION__, (unsigned long long)*res); 2641 dprintk("%s: maxfilesize=%Lu\n", __func__, (unsigned long long)*res);
2642 return status; 2642 return status;
2643} 2643}
2644 2644
@@ -2655,7 +2655,7 @@ static int decode_attr_maxlink(struct xdr_stream *xdr, uint32_t *bitmap, uint32_
2655 READ32(*maxlink); 2655 READ32(*maxlink);
2656 bitmap[0] &= ~FATTR4_WORD0_MAXLINK; 2656 bitmap[0] &= ~FATTR4_WORD0_MAXLINK;
2657 } 2657 }
2658 dprintk("%s: maxlink=%u\n", __FUNCTION__, *maxlink); 2658 dprintk("%s: maxlink=%u\n", __func__, *maxlink);
2659 return status; 2659 return status;
2660} 2660}
2661 2661
@@ -2672,7 +2672,7 @@ static int decode_attr_maxname(struct xdr_stream *xdr, uint32_t *bitmap, uint32_
2672 READ32(*maxname); 2672 READ32(*maxname);
2673 bitmap[0] &= ~FATTR4_WORD0_MAXNAME; 2673 bitmap[0] &= ~FATTR4_WORD0_MAXNAME;
2674 } 2674 }
2675 dprintk("%s: maxname=%u\n", __FUNCTION__, *maxname); 2675 dprintk("%s: maxname=%u\n", __func__, *maxname);
2676 return status; 2676 return status;
2677} 2677}
2678 2678
@@ -2693,7 +2693,7 @@ static int decode_attr_maxread(struct xdr_stream *xdr, uint32_t *bitmap, uint32_
2693 *res = (uint32_t)maxread; 2693 *res = (uint32_t)maxread;
2694 bitmap[0] &= ~FATTR4_WORD0_MAXREAD; 2694 bitmap[0] &= ~FATTR4_WORD0_MAXREAD;
2695 } 2695 }
2696 dprintk("%s: maxread=%lu\n", __FUNCTION__, (unsigned long)*res); 2696 dprintk("%s: maxread=%lu\n", __func__, (unsigned long)*res);
2697 return status; 2697 return status;
2698} 2698}
2699 2699
@@ -2714,7 +2714,7 @@ static int decode_attr_maxwrite(struct xdr_stream *xdr, uint32_t *bitmap, uint32
2714 *res = (uint32_t)maxwrite; 2714 *res = (uint32_t)maxwrite;
2715 bitmap[0] &= ~FATTR4_WORD0_MAXWRITE; 2715 bitmap[0] &= ~FATTR4_WORD0_MAXWRITE;
2716 } 2716 }
2717 dprintk("%s: maxwrite=%lu\n", __FUNCTION__, (unsigned long)*res); 2717 dprintk("%s: maxwrite=%lu\n", __func__, (unsigned long)*res);
2718 return status; 2718 return status;
2719} 2719}
2720 2720
@@ -2731,7 +2731,7 @@ static int decode_attr_mode(struct xdr_stream *xdr, uint32_t *bitmap, uint32_t *
2731 *mode &= ~S_IFMT; 2731 *mode &= ~S_IFMT;
2732 bitmap[1] &= ~FATTR4_WORD1_MODE; 2732 bitmap[1] &= ~FATTR4_WORD1_MODE;
2733 } 2733 }
2734 dprintk("%s: file mode=0%o\n", __FUNCTION__, (unsigned int)*mode); 2734 dprintk("%s: file mode=0%o\n", __func__, (unsigned int)*mode);
2735 return 0; 2735 return 0;
2736} 2736}
2737 2737
@@ -2747,7 +2747,7 @@ static int decode_attr_nlink(struct xdr_stream *xdr, uint32_t *bitmap, uint32_t
2747 READ32(*nlink); 2747 READ32(*nlink);
2748 bitmap[1] &= ~FATTR4_WORD1_NUMLINKS; 2748 bitmap[1] &= ~FATTR4_WORD1_NUMLINKS;
2749 } 2749 }
2750 dprintk("%s: nlink=%u\n", __FUNCTION__, (unsigned int)*nlink); 2750 dprintk("%s: nlink=%u\n", __func__, (unsigned int)*nlink);
2751 return 0; 2751 return 0;
2752} 2752}
2753 2753
@@ -2766,13 +2766,13 @@ static int decode_attr_owner(struct xdr_stream *xdr, uint32_t *bitmap, struct nf
2766 if (len < XDR_MAX_NETOBJ) { 2766 if (len < XDR_MAX_NETOBJ) {
2767 if (nfs_map_name_to_uid(clp, (char *)p, len, uid) != 0) 2767 if (nfs_map_name_to_uid(clp, (char *)p, len, uid) != 0)
2768 dprintk("%s: nfs_map_name_to_uid failed!\n", 2768 dprintk("%s: nfs_map_name_to_uid failed!\n",
2769 __FUNCTION__); 2769 __func__);
2770 } else 2770 } else
2771 dprintk("%s: name too long (%u)!\n", 2771 dprintk("%s: name too long (%u)!\n",
2772 __FUNCTION__, len); 2772 __func__, len);
2773 bitmap[1] &= ~FATTR4_WORD1_OWNER; 2773 bitmap[1] &= ~FATTR4_WORD1_OWNER;
2774 } 2774 }
2775 dprintk("%s: uid=%d\n", __FUNCTION__, (int)*uid); 2775 dprintk("%s: uid=%d\n", __func__, (int)*uid);
2776 return 0; 2776 return 0;
2777} 2777}
2778 2778
@@ -2791,13 +2791,13 @@ static int decode_attr_group(struct xdr_stream *xdr, uint32_t *bitmap, struct nf
2791 if (len < XDR_MAX_NETOBJ) { 2791 if (len < XDR_MAX_NETOBJ) {
2792 if (nfs_map_group_to_gid(clp, (char *)p, len, gid) != 0) 2792 if (nfs_map_group_to_gid(clp, (char *)p, len, gid) != 0)
2793 dprintk("%s: nfs_map_group_to_gid failed!\n", 2793 dprintk("%s: nfs_map_group_to_gid failed!\n",
2794 __FUNCTION__); 2794 __func__);
2795 } else 2795 } else
2796 dprintk("%s: name too long (%u)!\n", 2796 dprintk("%s: name too long (%u)!\n",
2797 __FUNCTION__, len); 2797 __func__, len);
2798 bitmap[1] &= ~FATTR4_WORD1_OWNER_GROUP; 2798 bitmap[1] &= ~FATTR4_WORD1_OWNER_GROUP;
2799 } 2799 }
2800 dprintk("%s: gid=%d\n", __FUNCTION__, (int)*gid); 2800 dprintk("%s: gid=%d\n", __func__, (int)*gid);
2801 return 0; 2801 return 0;
2802} 2802}
2803 2803
@@ -2820,7 +2820,7 @@ static int decode_attr_rdev(struct xdr_stream *xdr, uint32_t *bitmap, dev_t *rde
2820 *rdev = tmp; 2820 *rdev = tmp;
2821 bitmap[1] &= ~ FATTR4_WORD1_RAWDEV; 2821 bitmap[1] &= ~ FATTR4_WORD1_RAWDEV;
2822 } 2822 }
2823 dprintk("%s: rdev=(0x%x:0x%x)\n", __FUNCTION__, major, minor); 2823 dprintk("%s: rdev=(0x%x:0x%x)\n", __func__, major, minor);
2824 return 0; 2824 return 0;
2825} 2825}
2826 2826
@@ -2837,7 +2837,7 @@ static int decode_attr_space_avail(struct xdr_stream *xdr, uint32_t *bitmap, uin
2837 READ64(*res); 2837 READ64(*res);
2838 bitmap[1] &= ~FATTR4_WORD1_SPACE_AVAIL; 2838 bitmap[1] &= ~FATTR4_WORD1_SPACE_AVAIL;
2839 } 2839 }
2840 dprintk("%s: space avail=%Lu\n", __FUNCTION__, (unsigned long long)*res); 2840 dprintk("%s: space avail=%Lu\n", __func__, (unsigned long long)*res);
2841 return status; 2841 return status;
2842} 2842}
2843 2843
@@ -2854,7 +2854,7 @@ static int decode_attr_space_free(struct xdr_stream *xdr, uint32_t *bitmap, uint
2854 READ64(*res); 2854 READ64(*res);
2855 bitmap[1] &= ~FATTR4_WORD1_SPACE_FREE; 2855 bitmap[1] &= ~FATTR4_WORD1_SPACE_FREE;
2856 } 2856 }
2857 dprintk("%s: space free=%Lu\n", __FUNCTION__, (unsigned long long)*res); 2857 dprintk("%s: space free=%Lu\n", __func__, (unsigned long long)*res);
2858 return status; 2858 return status;
2859} 2859}
2860 2860
@@ -2871,7 +2871,7 @@ static int decode_attr_space_total(struct xdr_stream *xdr, uint32_t *bitmap, uin
2871 READ64(*res); 2871 READ64(*res);
2872 bitmap[1] &= ~FATTR4_WORD1_SPACE_TOTAL; 2872 bitmap[1] &= ~FATTR4_WORD1_SPACE_TOTAL;
2873 } 2873 }
2874 dprintk("%s: space total=%Lu\n", __FUNCTION__, (unsigned long long)*res); 2874 dprintk("%s: space total=%Lu\n", __func__, (unsigned long long)*res);
2875 return status; 2875 return status;
2876} 2876}
2877 2877
@@ -2887,7 +2887,7 @@ static int decode_attr_space_used(struct xdr_stream *xdr, uint32_t *bitmap, uint
2887 READ64(*used); 2887 READ64(*used);
2888 bitmap[1] &= ~FATTR4_WORD1_SPACE_USED; 2888 bitmap[1] &= ~FATTR4_WORD1_SPACE_USED;
2889 } 2889 }
2890 dprintk("%s: space used=%Lu\n", __FUNCTION__, 2890 dprintk("%s: space used=%Lu\n", __func__,
2891 (unsigned long long)*used); 2891 (unsigned long long)*used);
2892 return 0; 2892 return 0;
2893} 2893}
@@ -2918,7 +2918,7 @@ static int decode_attr_time_access(struct xdr_stream *xdr, uint32_t *bitmap, str
2918 status = decode_attr_time(xdr, time); 2918 status = decode_attr_time(xdr, time);
2919 bitmap[1] &= ~FATTR4_WORD1_TIME_ACCESS; 2919 bitmap[1] &= ~FATTR4_WORD1_TIME_ACCESS;
2920 } 2920 }
2921 dprintk("%s: atime=%ld\n", __FUNCTION__, (long)time->tv_sec); 2921 dprintk("%s: atime=%ld\n", __func__, (long)time->tv_sec);
2922 return status; 2922 return status;
2923} 2923}
2924 2924
@@ -2934,7 +2934,7 @@ static int decode_attr_time_metadata(struct xdr_stream *xdr, uint32_t *bitmap, s
2934 status = decode_attr_time(xdr, time); 2934 status = decode_attr_time(xdr, time);
2935 bitmap[1] &= ~FATTR4_WORD1_TIME_METADATA; 2935 bitmap[1] &= ~FATTR4_WORD1_TIME_METADATA;
2936 } 2936 }
2937 dprintk("%s: ctime=%ld\n", __FUNCTION__, (long)time->tv_sec); 2937 dprintk("%s: ctime=%ld\n", __func__, (long)time->tv_sec);
2938 return status; 2938 return status;
2939} 2939}
2940 2940
@@ -2950,7 +2950,7 @@ static int decode_attr_time_modify(struct xdr_stream *xdr, uint32_t *bitmap, str
2950 status = decode_attr_time(xdr, time); 2950 status = decode_attr_time(xdr, time);
2951 bitmap[1] &= ~FATTR4_WORD1_TIME_MODIFY; 2951 bitmap[1] &= ~FATTR4_WORD1_TIME_MODIFY;
2952 } 2952 }
2953 dprintk("%s: mtime=%ld\n", __FUNCTION__, (long)time->tv_sec); 2953 dprintk("%s: mtime=%ld\n", __func__, (long)time->tv_sec);
2954 return status; 2954 return status;
2955} 2955}
2956 2956
@@ -2962,7 +2962,7 @@ static int verify_attr_len(struct xdr_stream *xdr, __be32 *savep, uint32_t attrl
2962 if (unlikely(attrwords != nwords)) { 2962 if (unlikely(attrwords != nwords)) {
2963 dprintk("%s: server returned incorrect attribute length: " 2963 dprintk("%s: server returned incorrect attribute length: "
2964 "%u %c %u\n", 2964 "%u %c %u\n",
2965 __FUNCTION__, 2965 __func__,
2966 attrwords << 2, 2966 attrwords << 2,
2967 (attrwords < nwords) ? '<' : '>', 2967 (attrwords < nwords) ? '<' : '>',
2968 nwords << 2); 2968 nwords << 2);
@@ -3067,7 +3067,7 @@ static int decode_server_caps(struct xdr_stream *xdr, struct nfs4_server_caps_re
3067 goto xdr_error; 3067 goto xdr_error;
3068 status = verify_attr_len(xdr, savep, attrlen); 3068 status = verify_attr_len(xdr, savep, attrlen);
3069xdr_error: 3069xdr_error:
3070 dprintk("%s: xdr returned %d!\n", __FUNCTION__, -status); 3070 dprintk("%s: xdr returned %d!\n", __func__, -status);
3071 return status; 3071 return status;
3072} 3072}
3073 3073
@@ -3100,7 +3100,7 @@ static int decode_statfs(struct xdr_stream *xdr, struct nfs_fsstat *fsstat)
3100 3100
3101 status = verify_attr_len(xdr, savep, attrlen); 3101 status = verify_attr_len(xdr, savep, attrlen);
3102xdr_error: 3102xdr_error:
3103 dprintk("%s: xdr returned %d!\n", __FUNCTION__, -status); 3103 dprintk("%s: xdr returned %d!\n", __func__, -status);
3104 return status; 3104 return status;
3105} 3105}
3106 3106
@@ -3125,7 +3125,7 @@ static int decode_pathconf(struct xdr_stream *xdr, struct nfs_pathconf *pathconf
3125 3125
3126 status = verify_attr_len(xdr, savep, attrlen); 3126 status = verify_attr_len(xdr, savep, attrlen);
3127xdr_error: 3127xdr_error:
3128 dprintk("%s: xdr returned %d!\n", __FUNCTION__, -status); 3128 dprintk("%s: xdr returned %d!\n", __func__, -status);
3129 return status; 3129 return status;
3130} 3130}
3131 3131
@@ -3193,7 +3193,7 @@ static int decode_getfattr(struct xdr_stream *xdr, struct nfs_fattr *fattr, cons
3193 if ((status = verify_attr_len(xdr, savep, attrlen)) == 0) 3193 if ((status = verify_attr_len(xdr, savep, attrlen)) == 0)
3194 fattr->valid = NFS_ATTR_FATTR | NFS_ATTR_FATTR_V3 | NFS_ATTR_FATTR_V4; 3194 fattr->valid = NFS_ATTR_FATTR | NFS_ATTR_FATTR_V3 | NFS_ATTR_FATTR_V4;
3195xdr_error: 3195xdr_error:
3196 dprintk("%s: xdr returned %d\n", __FUNCTION__, -status); 3196 dprintk("%s: xdr returned %d\n", __func__, -status);
3197 return status; 3197 return status;
3198} 3198}
3199 3199
@@ -3226,7 +3226,7 @@ static int decode_fsinfo(struct xdr_stream *xdr, struct nfs_fsinfo *fsinfo)
3226 3226
3227 status = verify_attr_len(xdr, savep, attrlen); 3227 status = verify_attr_len(xdr, savep, attrlen);
3228xdr_error: 3228xdr_error:
3229 dprintk("%s: xdr returned %d!\n", __FUNCTION__, -status); 3229 dprintk("%s: xdr returned %d!\n", __func__, -status);
3230 return status; 3230 return status;
3231} 3231}
3232 3232
@@ -3418,7 +3418,7 @@ static int decode_open(struct xdr_stream *xdr, struct nfs_openres *res)
3418 3418
3419 return decode_delegation(xdr, res); 3419 return decode_delegation(xdr, res);
3420xdr_error: 3420xdr_error:
3421 dprintk("%s: Bitmap too large! Length = %u\n", __FUNCTION__, bmlen); 3421 dprintk("%s: Bitmap too large! Length = %u\n", __func__, bmlen);
3422 return -EIO; 3422 return -EIO;
3423} 3423}
3424 3424
@@ -3575,7 +3575,7 @@ short_pkt:
3575 * the call was successful, but incomplete. The caller can retry the 3575 * the call was successful, but incomplete. The caller can retry the
3576 * readdir starting at the last cookie. 3576 * readdir starting at the last cookie.
3577 */ 3577 */
3578 dprintk("%s: short packet at entry %d\n", __FUNCTION__, nr); 3578 dprintk("%s: short packet at entry %d\n", __func__, nr);
3579 entry[0] = entry[1] = 0; 3579 entry[0] = entry[1] = 0;
3580 if (nr) 3580 if (nr)
3581 goto out; 3581 goto out;
diff --git a/fs/nfs/proc.c b/fs/nfs/proc.c
index 5ccf7faee19c..03599bfe81cf 100644
--- a/fs/nfs/proc.c
+++ b/fs/nfs/proc.c
@@ -63,17 +63,17 @@ nfs_proc_get_root(struct nfs_server *server, struct nfs_fh *fhandle,
63 }; 63 };
64 int status; 64 int status;
65 65
66 dprintk("%s: call getattr\n", __FUNCTION__); 66 dprintk("%s: call getattr\n", __func__);
67 nfs_fattr_init(fattr); 67 nfs_fattr_init(fattr);
68 status = rpc_call_sync(server->nfs_client->cl_rpcclient, &msg, 0); 68 status = rpc_call_sync(server->nfs_client->cl_rpcclient, &msg, 0);
69 dprintk("%s: reply getattr: %d\n", __FUNCTION__, status); 69 dprintk("%s: reply getattr: %d\n", __func__, status);
70 if (status) 70 if (status)
71 return status; 71 return status;
72 dprintk("%s: call statfs\n", __FUNCTION__); 72 dprintk("%s: call statfs\n", __func__);
73 msg.rpc_proc = &nfs_procedures[NFSPROC_STATFS]; 73 msg.rpc_proc = &nfs_procedures[NFSPROC_STATFS];
74 msg.rpc_resp = &fsinfo; 74 msg.rpc_resp = &fsinfo;
75 status = rpc_call_sync(server->nfs_client->cl_rpcclient, &msg, 0); 75 status = rpc_call_sync(server->nfs_client->cl_rpcclient, &msg, 0);
76 dprintk("%s: reply statfs: %d\n", __FUNCTION__, status); 76 dprintk("%s: reply statfs: %d\n", __func__, status);
77 if (status) 77 if (status)
78 return status; 78 return status;
79 info->rtmax = NFS_MAXDATA; 79 info->rtmax = NFS_MAXDATA;
diff --git a/fs/nfs/read.c b/fs/nfs/read.c
index 16f57e0af999..40d17987d0e8 100644
--- a/fs/nfs/read.c
+++ b/fs/nfs/read.c
@@ -329,7 +329,7 @@ int nfs_readpage_result(struct rpc_task *task, struct nfs_read_data *data)
329{ 329{
330 int status; 330 int status;
331 331
332 dprintk("NFS: %s: %5u, (status %d)\n", __FUNCTION__, task->tk_pid, 332 dprintk("NFS: %s: %5u, (status %d)\n", __func__, task->tk_pid,
333 task->tk_status); 333 task->tk_status);
334 334
335 status = NFS_PROTO(data->inode)->read_done(task, data); 335 status = NFS_PROTO(data->inode)->read_done(task, data);
diff --git a/fs/nfs/super.c b/fs/nfs/super.c
index 7226a506f3ca..2a4a024a4e7b 100644
--- a/fs/nfs/super.c
+++ b/fs/nfs/super.c
@@ -405,7 +405,7 @@ static int nfs_statfs(struct dentry *dentry, struct kstatfs *buf)
405 return 0; 405 return 0;
406 406
407 out_err: 407 out_err:
408 dprintk("%s: statfs error = %d\n", __FUNCTION__, -error); 408 dprintk("%s: statfs error = %d\n", __func__, -error);
409 unlock_kernel(); 409 unlock_kernel();
410 return error; 410 return error;
411} 411}
@@ -2015,6 +2015,10 @@ static int nfs4_get_sb(struct file_system_type *fs_type,
2015 goto error_splat_super; 2015 goto error_splat_super;
2016 } 2016 }
2017 2017
2018 error = security_sb_set_mnt_opts(s, &data.lsm_opts);
2019 if (error)
2020 goto error_splat_root;
2021
2018 s->s_flags |= MS_ACTIVE; 2022 s->s_flags |= MS_ACTIVE;
2019 mnt->mnt_sb = s; 2023 mnt->mnt_sb = s;
2020 mnt->mnt_root = mntroot; 2024 mnt->mnt_root = mntroot;
@@ -2031,6 +2035,8 @@ out_free:
2031 nfs_free_server(server); 2035 nfs_free_server(server);
2032 goto out; 2036 goto out;
2033 2037
2038error_splat_root:
2039 dput(mntroot);
2034error_splat_super: 2040error_splat_super:
2035 up_write(&s->s_umount); 2041 up_write(&s->s_umount);
2036 deactivate_super(s); 2042 deactivate_super(s);
@@ -2114,6 +2120,8 @@ static int nfs4_xdev_get_sb(struct file_system_type *fs_type, int flags,
2114 mnt->mnt_sb = s; 2120 mnt->mnt_sb = s;
2115 mnt->mnt_root = mntroot; 2121 mnt->mnt_root = mntroot;
2116 2122
2123 security_sb_clone_mnt_opts(data->sb, s);
2124
2117 dprintk("<-- nfs4_xdev_get_sb() = 0\n"); 2125 dprintk("<-- nfs4_xdev_get_sb() = 0\n");
2118 return 0; 2126 return 0;
2119 2127
@@ -2197,6 +2205,8 @@ static int nfs4_referral_get_sb(struct file_system_type *fs_type, int flags,
2197 mnt->mnt_sb = s; 2205 mnt->mnt_sb = s;
2198 mnt->mnt_root = mntroot; 2206 mnt->mnt_root = mntroot;
2199 2207
2208 security_sb_clone_mnt_opts(data->sb, s);
2209
2200 dprintk("<-- nfs4_referral_get_sb() = 0\n"); 2210 dprintk("<-- nfs4_referral_get_sb() = 0\n");
2201 return 0; 2211 return 0;
2202 2212
diff --git a/fs/nfs/write.c b/fs/nfs/write.c
index 1ade11d1ba07..6d8ace3e3259 100644
--- a/fs/nfs/write.c
+++ b/fs/nfs/write.c
@@ -415,7 +415,7 @@ nfs_dirty_request(struct nfs_page *req)
415 415
416 if (page == NULL || test_bit(PG_NEED_COMMIT, &req->wb_flags)) 416 if (page == NULL || test_bit(PG_NEED_COMMIT, &req->wb_flags))
417 return 0; 417 return 0;
418 return !PageWriteback(req->wb_page); 418 return !PageWriteback(page);
419} 419}
420 420
421#if defined(CONFIG_NFS_V3) || defined(CONFIG_NFS_V4) 421#if defined(CONFIG_NFS_V3) || defined(CONFIG_NFS_V4)
diff --git a/include/asm-blackfin/bfin-global.h b/include/asm-blackfin/bfin-global.h
index 716df7c85923..a9248d883675 100644
--- a/include/asm-blackfin/bfin-global.h
+++ b/include/asm-blackfin/bfin-global.h
@@ -37,7 +37,9 @@
37#include <linux/linkage.h> 37#include <linux/linkage.h>
38#include <linux/types.h> 38#include <linux/types.h>
39 39
40#if defined(CONFIG_DMA_UNCACHED_2M) 40#if defined(CONFIG_DMA_UNCACHED_4M)
41# define DMA_UNCACHED_REGION (4 * 1024 * 1024)
42#elif defined(CONFIG_DMA_UNCACHED_2M)
41# define DMA_UNCACHED_REGION (2 * 1024 * 1024) 43# define DMA_UNCACHED_REGION (2 * 1024 * 1024)
42#elif defined(CONFIG_DMA_UNCACHED_1M) 44#elif defined(CONFIG_DMA_UNCACHED_1M)
43# define DMA_UNCACHED_REGION (1024 * 1024) 45# define DMA_UNCACHED_REGION (1024 * 1024)
diff --git a/include/asm-blackfin/checksum.h b/include/asm-blackfin/checksum.h
index 2638f2586d2f..6f6af2b8e9e0 100644
--- a/include/asm-blackfin/checksum.h
+++ b/include/asm-blackfin/checksum.h
@@ -15,7 +15,7 @@
15 * 15 *
16 * it's best to have buff aligned on a 32-bit boundary 16 * it's best to have buff aligned on a 32-bit boundary
17 */ 17 */
18unsigned int csum_partial(const unsigned char *buff, int len, unsigned int sum); 18__wsum csum_partial(const void *buff, int len, __wsum sum);
19 19
20/* 20/*
21 * the same as csum_partial, but copies from src while it 21 * the same as csum_partial, but copies from src while it
@@ -25,8 +25,8 @@ unsigned int csum_partial(const unsigned char *buff, int len, unsigned int sum);
25 * better 64-bit) boundary 25 * better 64-bit) boundary
26 */ 26 */
27 27
28unsigned int csum_partial_copy(const unsigned char *src, unsigned char *dst, 28__wsum csum_partial_copy(const void *src, void *dst,
29 int len, int sum); 29 int len, __wsum sum);
30 30
31/* 31/*
32 * the same as csum_partial_copy, but copies from user space. 32 * the same as csum_partial_copy, but copies from user space.
@@ -35,20 +35,19 @@ unsigned int csum_partial_copy(const unsigned char *src, unsigned char *dst,
35 * better 64-bit) boundary 35 * better 64-bit) boundary
36 */ 36 */
37 37
38extern unsigned int csum_partial_copy_from_user(const unsigned char *src, 38extern __wsum csum_partial_copy_from_user(const void __user *src, void *dst,
39 unsigned char *dst, int len, 39 int len, __wsum sum, int *csum_err);
40 int sum, int *csum_err);
41 40
42#define csum_partial_copy_nocheck(src, dst, len, sum) \ 41#define csum_partial_copy_nocheck(src, dst, len, sum) \
43 csum_partial_copy((src), (dst), (len), (sum)) 42 csum_partial_copy((src), (dst), (len), (sum))
44 43
45unsigned short ip_fast_csum(unsigned char *iph, unsigned int ihl); 44__sum16 ip_fast_csum(unsigned char *iph, unsigned int ihl);
46 45
47/* 46/*
48 * Fold a partial checksum 47 * Fold a partial checksum
49 */ 48 */
50 49
51static inline unsigned int csum_fold(unsigned int sum) 50static inline __sum16 csum_fold(__wsum sum)
52{ 51{
53 while (sum >> 16) 52 while (sum >> 16)
54 sum = (sum & 0xffff) + (sum >> 16); 53 sum = (sum & 0xffff) + (sum >> 16);
@@ -60,9 +59,9 @@ static inline unsigned int csum_fold(unsigned int sum)
60 * returns a 16-bit checksum, already complemented 59 * returns a 16-bit checksum, already complemented
61 */ 60 */
62 61
63static inline unsigned int 62static inline __wsum
64csum_tcpudp_nofold(unsigned long saddr, unsigned long daddr, unsigned short len, 63csum_tcpudp_nofold(__be32 saddr, __be32 daddr, unsigned short len,
65 unsigned short proto, unsigned int sum) 64 unsigned short proto, __wsum sum)
66{ 65{
67 66
68 __asm__ ("%0 = %0 + %1;\n\t" 67 __asm__ ("%0 = %0 + %1;\n\t"
@@ -84,9 +83,9 @@ csum_tcpudp_nofold(unsigned long saddr, unsigned long daddr, unsigned short len,
84 return (sum); 83 return (sum);
85} 84}
86 85
87static inline unsigned short int 86static inline __sum16
88csum_tcpudp_magic(unsigned long saddr, unsigned long daddr, unsigned short len, 87csum_tcpudp_magic(__be32 saddr, __be32 daddr, unsigned short len,
89 unsigned short proto, unsigned int sum) 88 unsigned short proto, __wsum sum)
90{ 89{
91 return csum_fold(csum_tcpudp_nofold(saddr, daddr, len, proto, sum)); 90 return csum_fold(csum_tcpudp_nofold(saddr, daddr, len, proto, sum));
92} 91}
@@ -96,6 +95,6 @@ csum_tcpudp_magic(unsigned long saddr, unsigned long daddr, unsigned short len,
96 * in icmp.c 95 * in icmp.c
97 */ 96 */
98 97
99extern unsigned short ip_compute_csum(const unsigned char *buff, int len); 98extern __sum16 ip_compute_csum(const void *buff, int len);
100 99
101#endif /* _BFIN_CHECKSUM_H */ 100#endif /* _BFIN_CHECKSUM_H */
diff --git a/include/asm-blackfin/gpio.h b/include/asm-blackfin/gpio.h
index 27ff532a806c..ff95e9d88342 100644
--- a/include/asm-blackfin/gpio.h
+++ b/include/asm-blackfin/gpio.h
@@ -437,7 +437,6 @@ void gpio_set_value(unsigned gpio, int arg);
437int gpio_get_value(unsigned gpio); 437int gpio_get_value(unsigned gpio);
438 438
439#ifndef BF548_FAMILY 439#ifndef BF548_FAMILY
440#define gpio_get_value(gpio) get_gpio_data(gpio)
441#define gpio_set_value(gpio, value) set_gpio_data(gpio, value) 440#define gpio_set_value(gpio, value) set_gpio_data(gpio, value)
442#endif 441#endif
443 442
diff --git a/include/asm-blackfin/io.h b/include/asm-blackfin/io.h
index 574fe56989d1..cbbf7ffdbbff 100644
--- a/include/asm-blackfin/io.h
+++ b/include/asm-blackfin/io.h
@@ -117,10 +117,12 @@ static inline unsigned int readl(const volatile void __iomem *addr)
117 117
118extern void outsb(unsigned long port, const void *addr, unsigned long count); 118extern void outsb(unsigned long port, const void *addr, unsigned long count);
119extern void outsw(unsigned long port, const void *addr, unsigned long count); 119extern void outsw(unsigned long port, const void *addr, unsigned long count);
120extern void outsw_8(unsigned long port, const void *addr, unsigned long count);
120extern void outsl(unsigned long port, const void *addr, unsigned long count); 121extern void outsl(unsigned long port, const void *addr, unsigned long count);
121 122
122extern void insb(unsigned long port, void *addr, unsigned long count); 123extern void insb(unsigned long port, void *addr, unsigned long count);
123extern void insw(unsigned long port, void *addr, unsigned long count); 124extern void insw(unsigned long port, void *addr, unsigned long count);
125extern void insw_8(unsigned long port, void *addr, unsigned long count);
124extern void insl(unsigned long port, void *addr, unsigned long count); 126extern void insl(unsigned long port, void *addr, unsigned long count);
125extern void insl_16(unsigned long port, void *addr, unsigned long count); 127extern void insl_16(unsigned long port, void *addr, unsigned long count);
126 128
diff --git a/include/asm-blackfin/mach-bf527/blackfin.h b/include/asm-blackfin/mach-bf527/blackfin.h
index 2891727b6176..297821e2d79a 100644
--- a/include/asm-blackfin/mach-bf527/blackfin.h
+++ b/include/asm-blackfin/mach-bf527/blackfin.h
@@ -39,22 +39,22 @@
39#include "defBF522.h" 39#include "defBF522.h"
40#include "anomaly.h" 40#include "anomaly.h"
41 41
42#if defined(CONFIG_BF527) 42#if defined(CONFIG_BF527) || defined(CONFIG_BF526)
43#include "defBF527.h" 43#include "defBF527.h"
44#endif 44#endif
45 45
46#if defined(CONFIG_BF525) 46#if defined(CONFIG_BF525) || defined(CONFIG_BF524)
47#include "defBF525.h" 47#include "defBF525.h"
48#endif 48#endif
49 49
50#if !defined(__ASSEMBLY__) 50#if !defined(__ASSEMBLY__)
51#include "cdefBF522.h" 51#include "cdefBF522.h"
52 52
53#if defined(CONFIG_BF527) 53#if defined(CONFIG_BF527) || defined(CONFIG_BF526)
54#include "cdefBF527.h" 54#include "cdefBF527.h"
55#endif 55#endif
56 56
57#if defined(CONFIG_BF525) 57#if defined(CONFIG_BF525) || defined(CONFIG_BF524)
58#include "cdefBF525.h" 58#include "cdefBF525.h"
59#endif 59#endif
60#endif 60#endif
diff --git a/include/asm-blackfin/mach-bf561/dma.h b/include/asm-blackfin/mach-bf561/dma.h
index 21d982003e75..8bc46cd89a02 100644
--- a/include/asm-blackfin/mach-bf561/dma.h
+++ b/include/asm-blackfin/mach-bf561/dma.h
@@ -25,11 +25,11 @@
25#define CH_MEM_STREAM1_SRC 27 /* RX */ 25#define CH_MEM_STREAM1_SRC 27 /* RX */
26#define CH_MEM_STREAM2_DEST 28 26#define CH_MEM_STREAM2_DEST 28
27#define CH_MEM_STREAM2_SRC 29 27#define CH_MEM_STREAM2_SRC 29
28#define CH_MEM_STREAM3_SRC 30 28#define CH_MEM_STREAM3_DEST 30
29#define CH_MEM_STREAM3_DEST 31 29#define CH_MEM_STREAM3_SRC 31
30#define CH_IMEM_STREAM0_DEST 32 30#define CH_IMEM_STREAM0_DEST 32
31#define CH_IMEM_STREAM0_SRC 33 31#define CH_IMEM_STREAM0_SRC 33
32#define CH_IMEM_STREAM1_SRC 34 32#define CH_IMEM_STREAM1_DEST 34
33#define CH_IMEM_STREAM1_DEST 35 33#define CH_IMEM_STREAM1_SRC 35
34 34
35#endif 35#endif
diff --git a/include/asm-blackfin/serial.h b/include/asm-blackfin/serial.h
new file mode 100644
index 000000000000..994dd869558c
--- /dev/null
+++ b/include/asm-blackfin/serial.h
@@ -0,0 +1,5 @@
1/*
2 * include/asm-blackfin/serial.h
3 */
4
5#define SERIAL_EXTRA_IRQ_FLAGS IRQF_TRIGGER_HIGH
diff --git a/include/asm-ia64/kvm.h b/include/asm-ia64/kvm.h
index eb2d3559d089..3f6a090cbd9a 100644
--- a/include/asm-ia64/kvm.h
+++ b/include/asm-ia64/kvm.h
@@ -22,14 +22,13 @@
22 */ 22 */
23 23
24#include <asm/types.h> 24#include <asm/types.h>
25#include <asm/fpu.h>
26 25
27#include <linux/ioctl.h> 26#include <linux/ioctl.h>
28 27
29/* Architectural interrupt line count. */ 28/* Architectural interrupt line count. */
30#define KVM_NR_INTERRUPTS 256 29#define KVM_NR_INTERRUPTS 256
31 30
32#define KVM_IOAPIC_NUM_PINS 24 31#define KVM_IOAPIC_NUM_PINS 48
33 32
34struct kvm_ioapic_state { 33struct kvm_ioapic_state {
35 __u64 base_address; 34 __u64 base_address;
@@ -61,6 +60,13 @@ struct kvm_ioapic_state {
61 60
62#define KVM_CONTEXT_SIZE 8*1024 61#define KVM_CONTEXT_SIZE 8*1024
63 62
63struct kvm_fpreg {
64 union {
65 unsigned long bits[2];
66 long double __dummy; /* force 16-byte alignment */
67 } u;
68};
69
64union context { 70union context {
65 /* 8K size */ 71 /* 8K size */
66 char dummy[KVM_CONTEXT_SIZE]; 72 char dummy[KVM_CONTEXT_SIZE];
@@ -77,7 +83,7 @@ union context {
77 unsigned long ibr[8]; 83 unsigned long ibr[8];
78 unsigned long dbr[8]; 84 unsigned long dbr[8];
79 unsigned long pkr[8]; 85 unsigned long pkr[8];
80 struct ia64_fpreg fr[128]; 86 struct kvm_fpreg fr[128];
81 }; 87 };
82}; 88};
83 89
diff --git a/include/asm-sh/kgdb.h b/include/asm-sh/kgdb.h
index 4bc8cb187d11..24e42078f36f 100644
--- a/include/asm-sh/kgdb.h
+++ b/include/asm-sh/kgdb.h
@@ -66,18 +66,4 @@ extern int setjmp(jmp_buf __jmpb);
66/* Forced breakpoint */ 66/* Forced breakpoint */
67#define breakpoint() __asm__ __volatile__("trapa #0x3c") 67#define breakpoint() __asm__ __volatile__("trapa #0x3c")
68 68
69/* Taken from sh-stub.c of GDB 4.18 */
70static const char hexchars[] = "0123456789abcdef";
71
72/* Get high hex bits */
73static inline char highhex(const int x)
74{
75 return hexchars[(x >> 4) & 0xf];
76}
77
78/* Get low hex bits */
79static inline char lowhex(const int x)
80{
81 return hexchars[x & 0xf];
82}
83#endif 69#endif
diff --git a/include/asm-x86/kvm_x86_emulate.h b/include/asm-x86/kvm_x86_emulate.h
index d6337f941c98..b877bbd2d3a7 100644
--- a/include/asm-x86/kvm_x86_emulate.h
+++ b/include/asm-x86/kvm_x86_emulate.h
@@ -135,6 +135,7 @@ struct decode_cache {
135 u8 modrm_rm; 135 u8 modrm_rm;
136 u8 use_modrm_ea; 136 u8 use_modrm_ea;
137 unsigned long modrm_ea; 137 unsigned long modrm_ea;
138 void *modrm_ptr;
138 unsigned long modrm_val; 139 unsigned long modrm_val;
139 struct fetch_cache fetch; 140 struct fetch_cache fetch;
140}; 141};
diff --git a/include/linux/Kbuild b/include/linux/Kbuild
index b7d81b2a9041..5dfa739045c8 100644
--- a/include/linux/Kbuild
+++ b/include/linux/Kbuild
@@ -105,7 +105,6 @@ header-y += ixjuser.h
105header-y += jffs2.h 105header-y += jffs2.h
106header-y += keyctl.h 106header-y += keyctl.h
107header-y += limits.h 107header-y += limits.h
108header-y += dlm_plock.h
109header-y += magic.h 108header-y += magic.h
110header-y += major.h 109header-y += major.h
111header-y += matroxfb.h 110header-y += matroxfb.h
@@ -190,6 +189,7 @@ unifdef-y += cyclades.h
190unifdef-y += dccp.h 189unifdef-y += dccp.h
191unifdef-y += dirent.h 190unifdef-y += dirent.h
192unifdef-y += dlm.h 191unifdef-y += dlm.h
192unifdef-y += dlm_plock.h
193unifdef-y += edd.h 193unifdef-y += edd.h
194unifdef-y += elf.h 194unifdef-y += elf.h
195unifdef-y += elfcore.h 195unifdef-y += elfcore.h
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 0f17643e0a6e..4a92fbafce9d 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -341,7 +341,7 @@ enum {
341 ATA_EH_PMP_TRIES = 5, 341 ATA_EH_PMP_TRIES = 5,
342 ATA_EH_PMP_LINK_TRIES = 3, 342 ATA_EH_PMP_LINK_TRIES = 3,
343 343
344 SATA_PMP_SCR_TIMEOUT = 250, 344 SATA_PMP_RW_TIMEOUT = 3000, /* PMP read/write timeout */
345 345
346 /* Horkage types. May be set by libata or controller on drives 346 /* Horkage types. May be set by libata or controller on drives
347 (some horkage may be drive/controller pair dependant */ 347 (some horkage may be drive/controller pair dependant */
@@ -351,7 +351,7 @@ enum {
351 ATA_HORKAGE_NONCQ = (1 << 2), /* Don't use NCQ */ 351 ATA_HORKAGE_NONCQ = (1 << 2), /* Don't use NCQ */
352 ATA_HORKAGE_MAX_SEC_128 = (1 << 3), /* Limit max sects to 128 */ 352 ATA_HORKAGE_MAX_SEC_128 = (1 << 3), /* Limit max sects to 128 */
353 ATA_HORKAGE_BROKEN_HPA = (1 << 4), /* Broken HPA */ 353 ATA_HORKAGE_BROKEN_HPA = (1 << 4), /* Broken HPA */
354 ATA_HORKAGE_SKIP_PM = (1 << 5), /* Skip PM operations */ 354 ATA_HORKAGE_DISABLE = (1 << 5), /* Disable it */
355 ATA_HORKAGE_HPA_SIZE = (1 << 6), /* native size off by one */ 355 ATA_HORKAGE_HPA_SIZE = (1 << 6), /* native size off by one */
356 ATA_HORKAGE_IPM = (1 << 7), /* Link PM problems */ 356 ATA_HORKAGE_IPM = (1 << 7), /* Link PM problems */
357 ATA_HORKAGE_IVB = (1 << 8), /* cbl det validity bit bugs */ 357 ATA_HORKAGE_IVB = (1 << 8), /* cbl det validity bit bugs */
@@ -821,8 +821,6 @@ struct ata_timing {
821 unsigned short udma; /* t2CYCTYP/2 */ 821 unsigned short udma; /* t2CYCTYP/2 */
822}; 822};
823 823
824#define FIT(v, vmin, vmax) max_t(short, min_t(short, v, vmax), vmin)
825
826/* 824/*
827 * Core layer - drivers/ata/libata-core.c 825 * Core layer - drivers/ata/libata-core.c
828 */ 826 */
diff --git a/net/sunrpc/auth_generic.c b/net/sunrpc/auth_generic.c
index d927d9f57412..744b79fdcb19 100644
--- a/net/sunrpc/auth_generic.c
+++ b/net/sunrpc/auth_generic.c
@@ -17,8 +17,8 @@
17# define RPCDBG_FACILITY RPCDBG_AUTH 17# define RPCDBG_FACILITY RPCDBG_AUTH
18#endif 18#endif
19 19
20#define RPC_ANONYMOUS_USERID ((uid_t)-2) 20#define RPC_MACHINE_CRED_USERID ((uid_t)0)
21#define RPC_ANONYMOUS_GROUPID ((gid_t)-2) 21#define RPC_MACHINE_CRED_GROUPID ((gid_t)0)
22 22
23struct generic_cred { 23struct generic_cred {
24 struct rpc_cred gc_base; 24 struct rpc_cred gc_base;
@@ -44,8 +44,8 @@ EXPORT_SYMBOL_GPL(rpc_lookup_cred);
44struct rpc_cred *rpc_lookup_machine_cred(void) 44struct rpc_cred *rpc_lookup_machine_cred(void)
45{ 45{
46 struct auth_cred acred = { 46 struct auth_cred acred = {
47 .uid = RPC_ANONYMOUS_USERID, 47 .uid = RPC_MACHINE_CRED_USERID,
48 .gid = RPC_ANONYMOUS_GROUPID, 48 .gid = RPC_MACHINE_CRED_GROUPID,
49 .machine_cred = 1, 49 .machine_cred = 1,
50 }; 50 };
51 51
diff --git a/scripts/kallsyms.c b/scripts/kallsyms.c
index 5d20a2e24cd1..ad2434b26970 100644
--- a/scripts/kallsyms.c
+++ b/scripts/kallsyms.c
@@ -108,6 +108,9 @@ static int read_symbol(FILE *in, struct sym_entry *s)
108 /* exclude also MIPS ELF local symbols ($L123 instead of .L123) */ 108 /* exclude also MIPS ELF local symbols ($L123 instead of .L123) */
109 else if (str[0] == '$') 109 else if (str[0] == '$')
110 return -1; 110 return -1;
111 /* exclude debugging symbols */
112 else if (stype == 'N')
113 return -1;
111 114
112 /* include the type field in the symbol name, so that it gets 115 /* include the type field in the symbol name, so that it gets
113 * compressed together */ 116 * compressed together */
diff --git a/scripts/kconfig/util.c b/scripts/kconfig/util.c
index f8e73c039dc8..3cc9f9369036 100644
--- a/scripts/kconfig/util.c
+++ b/scripts/kconfig/util.c
@@ -77,7 +77,7 @@ struct gstr str_new(void)
77{ 77{
78 struct gstr gs; 78 struct gstr gs;
79 gs.s = malloc(sizeof(char) * 64); 79 gs.s = malloc(sizeof(char) * 64);
80 gs.len = 16; 80 gs.len = 64;
81 strcpy(gs.s, "\0"); 81 strcpy(gs.s, "\0");
82 return gs; 82 return gs;
83} 83}
diff --git a/scripts/kernel-doc b/scripts/kernel-doc
index 83cee18a02e9..88e3934a8b8c 100755
--- a/scripts/kernel-doc
+++ b/scripts/kernel-doc
@@ -1556,7 +1556,9 @@ sub create_parameterlist($$$) {
1556 push_parameter($2, "$type $1", $file); 1556 push_parameter($2, "$type $1", $file);
1557 } 1557 }
1558 elsif ($param =~ m/(.*?):(\d+)/) { 1558 elsif ($param =~ m/(.*?):(\d+)/) {
1559 push_parameter($1, "$type:$2", $file) 1559 if ($type ne "") { # skip unnamed bit-fields
1560 push_parameter($1, "$type:$2", $file)
1561 }
1560 } 1562 }
1561 else { 1563 else {
1562 push_parameter($param, $type, $file); 1564 push_parameter($param, $type, $file);
diff --git a/scripts/mksysmap b/scripts/mksysmap
index 4390fab9f5bd..6e133a0bae7a 100644
--- a/scripts/mksysmap
+++ b/scripts/mksysmap
@@ -32,6 +32,7 @@
32# For System.map filter away: 32# For System.map filter away:
33# a - local absolute symbols 33# a - local absolute symbols
34# U - undefined global symbols 34# U - undefined global symbols
35# N - debugging symbols
35# w - local weak symbols 36# w - local weak symbols
36 37
37# readprofile starts reading symbols when _stext is found, and 38# readprofile starts reading symbols when _stext is found, and
@@ -40,5 +41,5 @@
40# so we just ignore them to let readprofile continue to work. 41# so we just ignore them to let readprofile continue to work.
41# (At least sparc64 has __crc_ in the middle). 42# (At least sparc64 has __crc_ in the middle).
42 43
43$NM -n $1 | grep -v '\( [aUw] \)\|\(__crc_\)\|\( \$[adt]\)' > $2 44$NM -n $1 | grep -v '\( [aNUw] \)\|\(__crc_\)\|\( \$[adt]\)' > $2
44 45
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index 757294b4f322..508c5895c680 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -721,7 +721,7 @@ static int check_section(const char *modname, const char *sec)
721 /* consume all digits */ 721 /* consume all digits */
722 while (*e && e != sec && isdigit(*e)) 722 while (*e && e != sec && isdigit(*e))
723 e--; 723 e--;
724 if (*e == '.') { 724 if (*e == '.' && !strstr(sec, ".linkonce")) {
725 warn("%s (%s): unexpected section name.\n" 725 warn("%s (%s): unexpected section name.\n"
726 "The (.[number]+) following section name are " 726 "The (.[number]+) following section name are "
727 "ld generated and not expected.\n" 727 "ld generated and not expected.\n"
diff --git a/sound/Kconfig b/sound/Kconfig
index b2a2db47aff5..4247406160e7 100644
--- a/sound/Kconfig
+++ b/sound/Kconfig
@@ -28,11 +28,6 @@ config SOUND
28 and read <file:Documentation/sound/oss/README.modules>; the module 28 and read <file:Documentation/sound/oss/README.modules>; the module
29 will be called soundcore. 29 will be called soundcore.
30 30
31 I'm told that even without a sound card, you can make your computer
32 say more than an occasional beep, by programming the PC speaker.
33 Kernel patches and supporting utilities to do that are in the pcsp
34 package, available at <ftp://ftp.infradead.org/pub/pcsp/>.
35
36source "sound/oss/dmasound/Kconfig" 31source "sound/oss/dmasound/Kconfig"
37 32
38if !M68K 33if !M68K
diff --git a/sound/drivers/Kconfig b/sound/drivers/Kconfig
index 379bcb074463..602b58e3b55d 100644
--- a/sound/drivers/Kconfig
+++ b/sound/drivers/Kconfig
@@ -5,9 +5,10 @@ menu "Generic devices"
5 5
6 6
7config SND_PCSP 7config SND_PCSP
8 tristate "PC-Speaker support" 8 tristate "PC-Speaker support (READ HELP!)"
9 depends on PCSPKR_PLATFORM && X86_PC && HIGH_RES_TIMERS 9 depends on PCSPKR_PLATFORM && X86_PC && HIGH_RES_TIMERS
10 depends on INPUT 10 depends on INPUT
11 depends on EXPERIMENTAL
11 depends on SND 12 depends on SND
12 select SND_PCM 13 select SND_PCM
13 help 14 help
@@ -18,11 +19,21 @@ config SND_PCSP
18 19
19 You can compile this as a module which will be called snd-pcsp. 20 You can compile this as a module which will be called snd-pcsp.
20 21
22 WARNING: if you already have a soundcard, enabling this
23 driver may lead to a problem. Namely, it may get loaded
24 before the other sound driver of yours, making the
25 pc-speaker a default sound device. Which is likely not
26 what you want. To make this driver play nicely with other
27 sound driver, you can add this into your /etc/modprobe.conf:
28 options snd-pcsp index=2
29
21 You don't need this driver if you only want your pc-speaker to beep. 30 You don't need this driver if you only want your pc-speaker to beep.
22 You don't need this driver if you have a tablet piezo beeper 31 You don't need this driver if you have a tablet piezo beeper
23 in your PC instead of the real speaker. 32 in your PC instead of the real speaker.
24 33
25 It should not hurt to say Y or M here in all other cases. 34 Say N if you have a sound card.
35 Say M if you don't.
36 Say Y only if you really know what you do.
26 37
27config SND_MPU401_UART 38config SND_MPU401_UART
28 tristate 39 tristate
diff --git a/sound/drivers/pcsp/pcsp_lib.c b/sound/drivers/pcsp/pcsp_lib.c
index ac6238e93513..7ad4a1534b2b 100644
--- a/sound/drivers/pcsp/pcsp_lib.c
+++ b/sound/drivers/pcsp/pcsp_lib.c
@@ -18,6 +18,8 @@ module_param(nforce_wa, bool, 0444);
18MODULE_PARM_DESC(nforce_wa, "Apply NForce chipset workaround " 18MODULE_PARM_DESC(nforce_wa, "Apply NForce chipset workaround "
19 "(expect bad sound)"); 19 "(expect bad sound)");
20 20
21#define DMIX_WANTS_S16 1
22
21static void pcsp_start_timer(unsigned long dummy) 23static void pcsp_start_timer(unsigned long dummy)
22{ 24{
23 hrtimer_start(&pcsp_chip.timer, ktime_set(0, 0), HRTIMER_MODE_REL); 25 hrtimer_start(&pcsp_chip.timer, ktime_set(0, 0), HRTIMER_MODE_REL);
@@ -47,7 +49,7 @@ enum hrtimer_restart pcsp_do_timer(struct hrtimer *handle)
47{ 49{
48 unsigned long flags; 50 unsigned long flags;
49 unsigned char timer_cnt, val; 51 unsigned char timer_cnt, val;
50 int periods_elapsed; 52 int fmt_size, periods_elapsed;
51 u64 ns; 53 u64 ns;
52 size_t period_bytes, buffer_bytes; 54 size_t period_bytes, buffer_bytes;
53 struct snd_pcm_substream *substream; 55 struct snd_pcm_substream *substream;
@@ -92,8 +94,11 @@ enum hrtimer_restart pcsp_do_timer(struct hrtimer *handle)
92 goto exit_nr_unlock2; 94 goto exit_nr_unlock2;
93 95
94 runtime = substream->runtime; 96 runtime = substream->runtime;
95 /* assume it is u8 mono */ 97 fmt_size = snd_pcm_format_physical_width(runtime->format) >> 3;
96 val = runtime->dma_area[chip->playback_ptr]; 98 /* assume it is mono! */
99 val = runtime->dma_area[chip->playback_ptr + fmt_size - 1];
100 if (snd_pcm_format_signed(runtime->format))
101 val ^= 0x80;
97 timer_cnt = val * CUR_DIV() / 256; 102 timer_cnt = val * CUR_DIV() / 256;
98 103
99 if (timer_cnt && chip->enable) { 104 if (timer_cnt && chip->enable) {
@@ -111,12 +116,14 @@ enum hrtimer_restart pcsp_do_timer(struct hrtimer *handle)
111 116
112 period_bytes = snd_pcm_lib_period_bytes(substream); 117 period_bytes = snd_pcm_lib_period_bytes(substream);
113 buffer_bytes = snd_pcm_lib_buffer_bytes(substream); 118 buffer_bytes = snd_pcm_lib_buffer_bytes(substream);
114 chip->playback_ptr += PCSP_INDEX_INC(); 119 chip->playback_ptr += PCSP_INDEX_INC() * fmt_size;
115 periods_elapsed = chip->playback_ptr - chip->period_ptr; 120 periods_elapsed = chip->playback_ptr - chip->period_ptr;
116 if (periods_elapsed < 0) { 121 if (periods_elapsed < 0) {
117 printk(KERN_WARNING "PCSP: playback_ptr inconsistent " 122#if PCSP_DEBUG
123 printk(KERN_INFO "PCSP: buffer_bytes mod period_bytes != 0 ? "
118 "(%zi %zi %zi)\n", 124 "(%zi %zi %zi)\n",
119 chip->playback_ptr, period_bytes, buffer_bytes); 125 chip->playback_ptr, period_bytes, buffer_bytes);
126#endif
120 periods_elapsed += buffer_bytes; 127 periods_elapsed += buffer_bytes;
121 } 128 }
122 periods_elapsed /= period_bytes; 129 periods_elapsed /= period_bytes;
@@ -270,7 +277,11 @@ static struct snd_pcm_hardware snd_pcsp_playback = {
270 .info = (SNDRV_PCM_INFO_INTERLEAVED | 277 .info = (SNDRV_PCM_INFO_INTERLEAVED |
271 SNDRV_PCM_INFO_HALF_DUPLEX | 278 SNDRV_PCM_INFO_HALF_DUPLEX |
272 SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_MMAP_VALID), 279 SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_MMAP_VALID),
273 .formats = SNDRV_PCM_FMTBIT_U8, 280 .formats = (SNDRV_PCM_FMTBIT_U8
281#if DMIX_WANTS_S16
282 | SNDRV_PCM_FMTBIT_S16_LE
283#endif
284 ),
274 .rates = SNDRV_PCM_RATE_KNOT, 285 .rates = SNDRV_PCM_RATE_KNOT,
275 .rate_min = PCSP_DEFAULT_SRATE, 286 .rate_min = PCSP_DEFAULT_SRATE,
276 .rate_max = PCSP_DEFAULT_SRATE, 287 .rate_max = PCSP_DEFAULT_SRATE,
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index f7ba099049ea..2d29e260da3d 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -758,25 +758,26 @@ void mark_page_dirty(struct kvm *kvm, gfn_t gfn)
758 */ 758 */
759void kvm_vcpu_block(struct kvm_vcpu *vcpu) 759void kvm_vcpu_block(struct kvm_vcpu *vcpu)
760{ 760{
761 DECLARE_WAITQUEUE(wait, current); 761 DEFINE_WAIT(wait);
762 762
763 add_wait_queue(&vcpu->wq, &wait); 763 for (;;) {
764 764 prepare_to_wait(&vcpu->wq, &wait, TASK_INTERRUPTIBLE);
765 /* 765
766 * We will block until either an interrupt or a signal wakes us up 766 if (kvm_cpu_has_interrupt(vcpu))
767 */ 767 break;
768 while (!kvm_cpu_has_interrupt(vcpu) 768 if (kvm_cpu_has_pending_timer(vcpu))
769 && !kvm_cpu_has_pending_timer(vcpu) 769 break;
770 && !signal_pending(current) 770 if (kvm_arch_vcpu_runnable(vcpu))
771 && !kvm_arch_vcpu_runnable(vcpu)) { 771 break;
772 set_current_state(TASK_INTERRUPTIBLE); 772 if (signal_pending(current))
773 break;
774
773 vcpu_put(vcpu); 775 vcpu_put(vcpu);
774 schedule(); 776 schedule();
775 vcpu_load(vcpu); 777 vcpu_load(vcpu);
776 } 778 }
777 779
778 __set_current_state(TASK_RUNNING); 780 finish_wait(&vcpu->wq, &wait);
779 remove_wait_queue(&vcpu->wq, &wait);
780} 781}
781 782
782void kvm_resched(struct kvm_vcpu *vcpu) 783void kvm_resched(struct kvm_vcpu *vcpu)