Merge branch 'master' into next
This commit is contained in:
		
						commit
						0b4ec6e4e0
					
				| @ -133,4 +133,4 @@ RAM/SWAP in 10240 inodes and it is only accessible by root. | ||||
| Author: | ||||
|    Christoph Rohland <cr@sap.com>, 1.12.01 | ||||
| Updated: | ||||
|    Hugh Dickins <hugh@veritas.com>, 4 June 2007 | ||||
|    Hugh Dickins, 4 June 2007 | ||||
|  | ||||
| @ -150,6 +150,11 @@ fan[1-*]_min	Fan minimum value | ||||
| 		Unit: revolution/min (RPM) | ||||
| 		RW | ||||
| 
 | ||||
| fan[1-*]_max	Fan maximum value | ||||
| 		Unit: revolution/min (RPM) | ||||
| 		Only rarely supported by the hardware. | ||||
| 		RW | ||||
| 
 | ||||
| fan[1-*]_input	Fan input value. | ||||
| 		Unit: revolution/min (RPM) | ||||
| 		RO | ||||
| @ -390,6 +395,7 @@ OR | ||||
| in[0-*]_min_alarm | ||||
| in[0-*]_max_alarm | ||||
| fan[1-*]_min_alarm | ||||
| fan[1-*]_max_alarm | ||||
| temp[1-*]_min_alarm | ||||
| temp[1-*]_max_alarm | ||||
| temp[1-*]_crit_alarm | ||||
|  | ||||
| @ -18,8 +18,12 @@ Usage | ||||
| Anonymous finger details are sent sequentially as separate packets of ABS | ||||
| events. Only the ABS_MT events are recognized as part of a finger | ||||
| packet. The end of a packet is marked by calling the input_mt_sync() | ||||
| function, which generates a SYN_MT_REPORT event. The end of multi-touch | ||||
| transfer is marked by calling the usual input_sync() function. | ||||
| function, which generates a SYN_MT_REPORT event. This instructs the | ||||
| receiver to accept the data for the current finger and prepare to receive | ||||
| another. The end of a multi-touch transfer is marked by calling the usual | ||||
| input_sync() function. This instructs the receiver to act upon events | ||||
| accumulated since last EV_SYN/SYN_REPORT and prepare to receive a new | ||||
| set of events/packets. | ||||
| 
 | ||||
| A set of ABS_MT events with the desired properties is defined. The events | ||||
| are divided into categories, to allow for partial implementation.  The | ||||
| @ -27,11 +31,26 @@ minimum set consists of ABS_MT_TOUCH_MAJOR, ABS_MT_POSITION_X and | ||||
| ABS_MT_POSITION_Y, which allows for multiple fingers to be tracked.  If the | ||||
| device supports it, the ABS_MT_WIDTH_MAJOR may be used to provide the size | ||||
| of the approaching finger. Anisotropy and direction may be specified with | ||||
| ABS_MT_TOUCH_MINOR, ABS_MT_WIDTH_MINOR and ABS_MT_ORIENTATION. Devices with | ||||
| more granular information may specify general shapes as blobs, i.e., as a | ||||
| sequence of rectangular shapes grouped together by an | ||||
| ABS_MT_BLOB_ID. Finally, the ABS_MT_TOOL_TYPE may be used to specify | ||||
| whether the touching tool is a finger or a pen or something else. | ||||
| ABS_MT_TOUCH_MINOR, ABS_MT_WIDTH_MINOR and ABS_MT_ORIENTATION.  The | ||||
| ABS_MT_TOOL_TYPE may be used to specify whether the touching tool is a | ||||
| finger or a pen or something else.  Devices with more granular information | ||||
| may specify general shapes as blobs, i.e., as a sequence of rectangular | ||||
| shapes grouped together by an ABS_MT_BLOB_ID. Finally, for the few devices | ||||
| that currently support it, the ABS_MT_TRACKING_ID event may be used to | ||||
| report finger tracking from hardware [5]. | ||||
| 
 | ||||
| Here is what a minimal event sequence for a two-finger touch would look | ||||
| like: | ||||
| 
 | ||||
|    ABS_MT_TOUCH_MAJOR | ||||
|    ABS_MT_POSITION_X | ||||
|    ABS_MT_POSITION_Y | ||||
|    SYN_MT_REPORT | ||||
|    ABS_MT_TOUCH_MAJOR | ||||
|    ABS_MT_POSITION_X | ||||
|    ABS_MT_POSITION_Y | ||||
|    SYN_MT_REPORT | ||||
|    SYN_REPORT | ||||
| 
 | ||||
| 
 | ||||
| Event Semantics | ||||
| @ -44,24 +63,24 @@ ABS_MT_TOUCH_MAJOR | ||||
| 
 | ||||
| The length of the major axis of the contact. The length should be given in | ||||
| surface units. If the surface has an X times Y resolution, the largest | ||||
| possible value of ABS_MT_TOUCH_MAJOR is sqrt(X^2 + Y^2), the diagonal. | ||||
| possible value of ABS_MT_TOUCH_MAJOR is sqrt(X^2 + Y^2), the diagonal [4]. | ||||
| 
 | ||||
| ABS_MT_TOUCH_MINOR | ||||
| 
 | ||||
| The length, in surface units, of the minor axis of the contact. If the | ||||
| contact is circular, this event can be omitted. | ||||
| contact is circular, this event can be omitted [4]. | ||||
| 
 | ||||
| ABS_MT_WIDTH_MAJOR | ||||
| 
 | ||||
| The length, in surface units, of the major axis of the approaching | ||||
| tool. This should be understood as the size of the tool itself. The | ||||
| orientation of the contact and the approaching tool are assumed to be the | ||||
| same. | ||||
| same [4]. | ||||
| 
 | ||||
| ABS_MT_WIDTH_MINOR | ||||
| 
 | ||||
| The length, in surface units, of the minor axis of the approaching | ||||
| tool. Omit if circular. | ||||
| tool. Omit if circular [4]. | ||||
| 
 | ||||
| The above four values can be used to derive additional information about | ||||
| the contact. The ratio ABS_MT_TOUCH_MAJOR / ABS_MT_WIDTH_MAJOR approximates | ||||
| @ -70,14 +89,17 @@ different characteristic widths [1]. | ||||
| 
 | ||||
| ABS_MT_ORIENTATION | ||||
| 
 | ||||
| The orientation of the ellipse. The value should describe half a revolution | ||||
| clockwise around the touch center. The scale of the value is arbitrary, but | ||||
| zero should be returned for an ellipse aligned along the Y axis of the | ||||
| surface. As an example, an index finger placed straight onto the axis could | ||||
| return zero orientation, something negative when twisted to the left, and | ||||
| something positive when twisted to the right. This value can be omitted if | ||||
| the touching object is circular, or if the information is not available in | ||||
| the kernel driver. | ||||
| The orientation of the ellipse. The value should describe a signed quarter | ||||
| of a revolution clockwise around the touch center. The signed value range | ||||
| is arbitrary, but zero should be returned for a finger aligned along the Y | ||||
| axis of the surface, a negative value when finger is turned to the left, and | ||||
| a positive value when finger turned to the right. When completely aligned with | ||||
| the X axis, the range max should be returned.  Orientation can be omitted | ||||
| if the touching object is circular, or if the information is not available | ||||
| in the kernel driver. Partial orientation support is possible if the device | ||||
| can distinguish between the two axis, but not (uniquely) any values in | ||||
| between. In such cases, the range of ABS_MT_ORIENTATION should be [0, 1] | ||||
| [4]. | ||||
| 
 | ||||
| ABS_MT_POSITION_X | ||||
| 
 | ||||
| @ -98,8 +120,35 @@ ABS_MT_BLOB_ID | ||||
| 
 | ||||
| The BLOB_ID groups several packets together into one arbitrarily shaped | ||||
| contact. This is a low-level anonymous grouping, and should not be confused | ||||
| with the high-level contactID, explained below. Most kernel drivers will | ||||
| not have this capability, and can safely omit the event. | ||||
| with the high-level trackingID [5]. Most kernel drivers will not have blob | ||||
| capability, and can safely omit the event. | ||||
| 
 | ||||
| ABS_MT_TRACKING_ID | ||||
| 
 | ||||
| The TRACKING_ID identifies an initiated contact throughout its life cycle | ||||
| [5]. There are currently only a few devices that support it, so this event | ||||
| should normally be omitted. | ||||
| 
 | ||||
| 
 | ||||
| Event Computation | ||||
| ----------------- | ||||
| 
 | ||||
| The flora of different hardware unavoidably leads to some devices fitting | ||||
| better to the MT protocol than others. To simplify and unify the mapping, | ||||
| this section gives recipes for how to compute certain events. | ||||
| 
 | ||||
| For devices reporting contacts as rectangular shapes, signed orientation | ||||
| cannot be obtained. Assuming X and Y are the lengths of the sides of the | ||||
| touching rectangle, here is a simple formula that retains the most | ||||
| information possible: | ||||
| 
 | ||||
|    ABS_MT_TOUCH_MAJOR := max(X, Y) | ||||
|    ABS_MT_TOUCH_MINOR := min(X, Y) | ||||
|    ABS_MT_ORIENTATION := bool(X > Y) | ||||
| 
 | ||||
| The range of ABS_MT_ORIENTATION should be set to [0, 1], to indicate that | ||||
| the device can distinguish between a finger along the Y axis (0) and a | ||||
| finger along the X axis (1). | ||||
| 
 | ||||
| 
 | ||||
| Finger Tracking | ||||
| @ -109,14 +158,18 @@ The kernel driver should generate an arbitrary enumeration of the set of | ||||
| anonymous contacts currently on the surface. The order in which the packets | ||||
| appear in the event stream is not important. | ||||
| 
 | ||||
| The process of finger tracking, i.e., to assign a unique contactID to each | ||||
| The process of finger tracking, i.e., to assign a unique trackingID to each | ||||
| initiated contact on the surface, is left to user space; preferably the | ||||
| multi-touch X driver [3]. In that driver, the contactID stays the same and | ||||
| multi-touch X driver [3]. In that driver, the trackingID stays the same and | ||||
| unique until the contact vanishes (when the finger leaves the surface). The | ||||
| problem of assigning a set of anonymous fingers to a set of identified | ||||
| fingers is a euclidian bipartite matching problem at each event update, and | ||||
| relies on a sufficiently rapid update rate. | ||||
| 
 | ||||
| There are a few devices that support trackingID in hardware. User space can | ||||
| make use of these native identifiers to reduce bandwidth and cpu usage. | ||||
| 
 | ||||
| 
 | ||||
| Notes | ||||
| ----- | ||||
| 
 | ||||
| @ -136,5 +189,7 @@ could be used to derive tilt. | ||||
| time of writing (April 2009), the MT protocol is not yet merged, and the | ||||
| prototype implements finger matching, basic mouse support and two-finger | ||||
| scrolling. The project aims at improving the quality of current multi-touch | ||||
| functionality available in the synaptics X driver, and in addition | ||||
| functionality available in the Synaptics X driver, and in addition | ||||
| implement more advanced gestures. | ||||
| [4] See the section on event computation. | ||||
| [5] See the section on finger tracking. | ||||
|  | ||||
| @ -1541,6 +1541,10 @@ and is between 256 and 4096 characters. It is defined in the file | ||||
| 			register save and restore. The kernel will only save | ||||
| 			legacy floating-point registers on task switch. | ||||
| 
 | ||||
| 	noxsave		[BUGS=X86] Disables x86 extended register state save | ||||
| 			and restore using xsave. The kernel will fallback to | ||||
| 			enabling legacy floating-point and sse state. | ||||
| 
 | ||||
| 	nohlt		[BUGS=ARM,SH] Tells the kernel that the sleep(SH) or | ||||
| 			wfi(ARM) instruction doesn't work correctly and not to | ||||
| 			use it. This is also useful when using JTAG debugger. | ||||
|  | ||||
| @ -334,6 +334,7 @@ STAC9227/9228/9229/927x | ||||
|   ref-no-jd	Reference board without HP/Mic jack detection | ||||
|   3stack	D965 3stack | ||||
|   5stack	D965 5stack + SPDIF | ||||
|   5stack-no-fp	D965 5stack without front panel | ||||
|   dell-3stack	Dell Dimension E520 | ||||
|   dell-bios	Fixes with Dell BIOS setup | ||||
|   auto		BIOS setup (default) | ||||
|  | ||||
| @ -104,6 +104,11 @@ card*/pcm*/xrun_debug | ||||
| 	When this value is greater than 1, the driver will show the | ||||
| 	stack trace additionally.  This may help the debugging. | ||||
| 
 | ||||
| 	Since 2.6.30, this option also enables the hwptr check using | ||||
| 	jiffies.  This detects spontaneous invalid pointer callback | ||||
| 	values, but can be lead to too much corrections for a (mostly | ||||
| 	buggy) hardware that doesn't give smooth pointer updates. | ||||
| 
 | ||||
| card*/pcm*/sub*/info | ||||
| 	The general information of this PCM sub-stream. | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										49
									
								
								MAINTAINERS
									
									
									
									
									
								
							
							
						
						
									
										49
									
								
								MAINTAINERS
									
									
									
									
									
								
							| @ -434,7 +434,7 @@ F:	arch/alpha/ | ||||
| 
 | ||||
| AMD GEODE CS5536 USB DEVICE CONTROLLER DRIVER | ||||
| P:	Thomas Dahlmann | ||||
| M:	thomas.dahlmann@amd.com | ||||
| M:	dahlmann.thomas@arcor.de | ||||
| L:	linux-geode@lists.infradead.org (moderated for non-subscribers) | ||||
| S:	Supported | ||||
| F:	drivers/usb/gadget/amd5536udc.* | ||||
| @ -624,6 +624,7 @@ M:	paulius.zaleckas@teltonika.lt | ||||
| L:	linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only) | ||||
| T:	git git://gitorious.org/linux-gemini/mainline.git | ||||
| S:	Maintained | ||||
| F:	arch/arm/mach-gemini/ | ||||
| 
 | ||||
| ARM/EBSA110 MACHINE SUPPORT | ||||
| P:	Russell King | ||||
| @ -650,6 +651,7 @@ P:	Paulius Zaleckas | ||||
| M:	paulius.zaleckas@teltonika.lt | ||||
| L:	linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only) | ||||
| S:	Maintained | ||||
| F:	arch/arm/mm/*-fa* | ||||
| 
 | ||||
| ARM/FOOTBRIDGE ARCHITECTURE | ||||
| P:	Russell King | ||||
| @ -1132,17 +1134,17 @@ F:	fs/bfs/ | ||||
| F:	include/linux/bfs_fs.h | ||||
| 
 | ||||
| BLACKFIN ARCHITECTURE | ||||
| P:	Bryan Wu | ||||
| M:	cooloney@kernel.org | ||||
| P:	Mike Frysinger | ||||
| M:	vapier@gentoo.org | ||||
| L:	uclinux-dist-devel@blackfin.uclinux.org | ||||
| W:	http://blackfin.uclinux.org | ||||
| S:	Supported | ||||
| F:	arch/blackfin/ | ||||
| 
 | ||||
| BLACKFIN EMAC DRIVER | ||||
| P:	Bryan Wu | ||||
| M:	cooloney@kernel.org | ||||
| L:	uclinux-dist-devel@blackfin.uclinux.org (subscribers-only) | ||||
| P:	Michael Hennerich | ||||
| M:	michael.hennerich@analog.com | ||||
| L:	uclinux-dist-devel@blackfin.uclinux.org | ||||
| W:	http://blackfin.uclinux.org | ||||
| S:	Supported | ||||
| F:	drivers/net/bfin_mac.* | ||||
| @ -1150,7 +1152,7 @@ F:	drivers/net/bfin_mac.* | ||||
| BLACKFIN RTC DRIVER | ||||
| P:	Mike Frysinger | ||||
| M:	vapier.adi@gmail.com | ||||
| L:	uclinux-dist-devel@blackfin.uclinux.org (subscribers-only) | ||||
| L:	uclinux-dist-devel@blackfin.uclinux.org | ||||
| W:	http://blackfin.uclinux.org | ||||
| S:	Supported | ||||
| F:	drivers/rtc/rtc-bfin.c | ||||
| @ -1158,7 +1160,7 @@ F:	drivers/rtc/rtc-bfin.c | ||||
| BLACKFIN SERIAL DRIVER | ||||
| P:	Sonic Zhang | ||||
| M:	sonic.zhang@analog.com | ||||
| L:	uclinux-dist-devel@blackfin.uclinux.org (subscribers-only) | ||||
| L:	uclinux-dist-devel@blackfin.uclinux.org | ||||
| W:	http://blackfin.uclinux.org | ||||
| S:	Supported | ||||
| F:	drivers/serial/bfin_5xx.c | ||||
| @ -1166,7 +1168,7 @@ F:	drivers/serial/bfin_5xx.c | ||||
| BLACKFIN WATCHDOG DRIVER | ||||
| P:	Mike Frysinger | ||||
| M:	vapier.adi@gmail.com | ||||
| L:	uclinux-dist-devel@blackfin.uclinux.org (subscribers-only) | ||||
| L:	uclinux-dist-devel@blackfin.uclinux.org | ||||
| W:	http://blackfin.uclinux.org | ||||
| S:	Supported | ||||
| F:	drivers/watchdog/bfin_wdt.c | ||||
| @ -1174,7 +1176,7 @@ F:	drivers/watchdog/bfin_wdt.c | ||||
| BLACKFIN I2C TWI DRIVER | ||||
| P:	Sonic Zhang | ||||
| M:	sonic.zhang@analog.com | ||||
| L:	uclinux-dist-devel@blackfin.uclinux.org (subscribers-only) | ||||
| L:	uclinux-dist-devel@blackfin.uclinux.org | ||||
| W:	http://blackfin.uclinux.org/ | ||||
| S:	Supported | ||||
| F:	drivers/i2c/busses/i2c-bfin-twi.c | ||||
| @ -1431,6 +1433,14 @@ P:	Russell King | ||||
| M:	linux@arm.linux.org.uk | ||||
| F:	include/linux/clk.h | ||||
| 
 | ||||
| CISCO FCOE HBA DRIVER | ||||
| P:	Abhijeet Joglekar | ||||
| M:	abjoglek@cisco.com | ||||
| P:	Joe Eykholt | ||||
| M:	jeykholt@cisco.com | ||||
| L:	linux-scsi@vger.kernel.org | ||||
| S:	Supported | ||||
| 
 | ||||
| CODA FILE SYSTEM | ||||
| P:	Jan Harkes | ||||
| M:	jaharkes@cs.cmu.edu | ||||
| @ -1532,6 +1542,13 @@ W:	http://www.fi.muni.cz/~kas/cosa/ | ||||
| S:	Maintained | ||||
| F:	drivers/net/wan/cosa* | ||||
| 
 | ||||
| CPMAC ETHERNET DRIVER | ||||
| P:	Florian Fainelli | ||||
| M:	florian@openwrt.org | ||||
| L:	netdev@vger.kernel.org | ||||
| S:	Maintained | ||||
| F:	drivers/net/cpmac.c | ||||
| 
 | ||||
| CPU FREQUENCY DRIVERS | ||||
| P:	Dave Jones | ||||
| M:	davej@redhat.com | ||||
| @ -1963,8 +1980,8 @@ F:	include/linux/edac.h | ||||
| 
 | ||||
| EDAC-E752X | ||||
| P:	Mark Gross | ||||
| P:	Doug Thompson | ||||
| M:	mark.gross@intel.com | ||||
| P:	Doug Thompson | ||||
| M:	dougthompson@xmission.com | ||||
| L:	bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) | ||||
| W:	bluesmoke.sourceforge.net | ||||
| @ -2241,7 +2258,7 @@ P:	Li Yang | ||||
| M:	leoli@freescale.com | ||||
| P:	Zhang Wei | ||||
| M:	zw@zh-kernel.org | ||||
| L:	linuxppc-embedded@ozlabs.org | ||||
| L:	linuxppc-dev@ozlabs.org | ||||
| L:	linux-kernel@vger.kernel.org | ||||
| S:	Maintained | ||||
| F:	drivers/dma/fsldma.* | ||||
| @ -5579,6 +5596,14 @@ M:	ian@mnementh.co.uk | ||||
| S:	Maintained | ||||
| F:	drivers/mmc/host/tmio_mmc.* | ||||
| 
 | ||||
| TMPFS (SHMEM FILESYSTEM) | ||||
| P:	Hugh Dickins | ||||
| M:	hugh.dickins@tiscali.co.uk | ||||
| L:	linux-mm@kvack.org | ||||
| S:	Maintained | ||||
| F:	include/linux/shmem_fs.h | ||||
| F:	mm/shmem.c | ||||
| 
 | ||||
| TPM DEVICE DRIVER | ||||
| P:	Debora Velarde | ||||
| M:	debora@linux.vnet.ibm.com | ||||
|  | ||||
							
								
								
									
										6
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								Makefile
									
									
									
									
									
								
							| @ -1,8 +1,8 @@ | ||||
| VERSION = 2 | ||||
| PATCHLEVEL = 6 | ||||
| SUBLEVEL = 30 | ||||
| EXTRAVERSION = -rc6 | ||||
| NAME = Vindictive Armadillo | ||||
| EXTRAVERSION = -rc8 | ||||
| NAME = Man-Eating Seals of Antiquity | ||||
| 
 | ||||
| # *DOCUMENTATION*
 | ||||
| # To see a list of typical targets execute "make help"
 | ||||
| @ -533,7 +533,7 @@ endif | ||||
| 
 | ||||
| include $(srctree)/arch/$(SRCARCH)/Makefile | ||||
| 
 | ||||
| ifneq (CONFIG_FRAME_WARN,0) | ||||
| ifneq ($(CONFIG_FRAME_WARN),0) | ||||
| KBUILD_CFLAGS += $(call cc-option,-Wframe-larger-than=${CONFIG_FRAME_WARN}) | ||||
| endif | ||||
| 
 | ||||
|  | ||||
| @ -114,3 +114,16 @@ | ||||
| 	.align	3;				\ | ||||
| 	.long	9999b,9001f;			\ | ||||
| 	.previous | ||||
| 
 | ||||
| /*
 | ||||
|  * SMP data memory barrier | ||||
|  */ | ||||
| 	.macro	smp_dmb | ||||
| #ifdef CONFIG_SMP | ||||
| #if __LINUX_ARM_ARCH__ >= 7 | ||||
| 	dmb | ||||
| #elif __LINUX_ARM_ARCH__ == 6 | ||||
| 	mcr	p15, 0, r0, c7, c10, 5	@ dmb | ||||
| #endif | ||||
| #endif | ||||
| 	.endm | ||||
|  | ||||
| @ -44,11 +44,29 @@ static inline void atomic_set(atomic_t *v, int i) | ||||
| 	: "cc"); | ||||
| } | ||||
| 
 | ||||
| static inline void atomic_add(int i, atomic_t *v) | ||||
| { | ||||
| 	unsigned long tmp; | ||||
| 	int result; | ||||
| 
 | ||||
| 	__asm__ __volatile__("@ atomic_add\n" | ||||
| "1:	ldrex	%0, [%2]\n" | ||||
| "	add	%0, %0, %3\n" | ||||
| "	strex	%1, %0, [%2]\n" | ||||
| "	teq	%1, #0\n" | ||||
| "	bne	1b" | ||||
| 	: "=&r" (result), "=&r" (tmp) | ||||
| 	: "r" (&v->counter), "Ir" (i) | ||||
| 	: "cc"); | ||||
| } | ||||
| 
 | ||||
| static inline int atomic_add_return(int i, atomic_t *v) | ||||
| { | ||||
| 	unsigned long tmp; | ||||
| 	int result; | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	__asm__ __volatile__("@ atomic_add_return\n" | ||||
| "1:	ldrex	%0, [%2]\n" | ||||
| "	add	%0, %0, %3\n" | ||||
| @ -59,14 +77,34 @@ static inline int atomic_add_return(int i, atomic_t *v) | ||||
| 	: "r" (&v->counter), "Ir" (i) | ||||
| 	: "cc"); | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	return result; | ||||
| } | ||||
| 
 | ||||
| static inline void atomic_sub(int i, atomic_t *v) | ||||
| { | ||||
| 	unsigned long tmp; | ||||
| 	int result; | ||||
| 
 | ||||
| 	__asm__ __volatile__("@ atomic_sub\n" | ||||
| "1:	ldrex	%0, [%2]\n" | ||||
| "	sub	%0, %0, %3\n" | ||||
| "	strex	%1, %0, [%2]\n" | ||||
| "	teq	%1, #0\n" | ||||
| "	bne	1b" | ||||
| 	: "=&r" (result), "=&r" (tmp) | ||||
| 	: "r" (&v->counter), "Ir" (i) | ||||
| 	: "cc"); | ||||
| } | ||||
| 
 | ||||
| static inline int atomic_sub_return(int i, atomic_t *v) | ||||
| { | ||||
| 	unsigned long tmp; | ||||
| 	int result; | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	__asm__ __volatile__("@ atomic_sub_return\n" | ||||
| "1:	ldrex	%0, [%2]\n" | ||||
| "	sub	%0, %0, %3\n" | ||||
| @ -77,6 +115,8 @@ static inline int atomic_sub_return(int i, atomic_t *v) | ||||
| 	: "r" (&v->counter), "Ir" (i) | ||||
| 	: "cc"); | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	return result; | ||||
| } | ||||
| 
 | ||||
| @ -84,6 +124,8 @@ static inline int atomic_cmpxchg(atomic_t *ptr, int old, int new) | ||||
| { | ||||
| 	unsigned long oldval, res; | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	do { | ||||
| 		__asm__ __volatile__("@ atomic_cmpxchg\n" | ||||
| 		"ldrex	%1, [%2]\n" | ||||
| @ -95,6 +137,8 @@ static inline int atomic_cmpxchg(atomic_t *ptr, int old, int new) | ||||
| 		    : "cc"); | ||||
| 	} while (res); | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	return oldval; | ||||
| } | ||||
| 
 | ||||
| @ -135,6 +179,7 @@ static inline int atomic_add_return(int i, atomic_t *v) | ||||
| 
 | ||||
| 	return val; | ||||
| } | ||||
| #define atomic_add(i, v)	(void) atomic_add_return(i, v) | ||||
| 
 | ||||
| static inline int atomic_sub_return(int i, atomic_t *v) | ||||
| { | ||||
| @ -148,6 +193,7 @@ static inline int atomic_sub_return(int i, atomic_t *v) | ||||
| 
 | ||||
| 	return val; | ||||
| } | ||||
| #define atomic_sub(i, v)	(void) atomic_sub_return(i, v) | ||||
| 
 | ||||
| static inline int atomic_cmpxchg(atomic_t *v, int old, int new) | ||||
| { | ||||
| @ -187,10 +233,8 @@ static inline int atomic_add_unless(atomic_t *v, int a, int u) | ||||
| } | ||||
| #define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0) | ||||
| 
 | ||||
| #define atomic_add(i, v)	(void) atomic_add_return(i, v) | ||||
| #define atomic_inc(v)		(void) atomic_add_return(1, v) | ||||
| #define atomic_sub(i, v)	(void) atomic_sub_return(i, v) | ||||
| #define atomic_dec(v)		(void) atomic_sub_return(1, v) | ||||
| #define atomic_inc(v)		atomic_add(1, v) | ||||
| #define atomic_dec(v)		atomic_sub(1, v) | ||||
| 
 | ||||
| #define atomic_inc_and_test(v)	(atomic_add_return(1, v) == 0) | ||||
| #define atomic_dec_and_test(v)	(atomic_sub_return(1, v) == 0) | ||||
| @ -200,11 +244,10 @@ static inline int atomic_add_unless(atomic_t *v, int a, int u) | ||||
| 
 | ||||
| #define atomic_add_negative(i,v) (atomic_add_return(i, v) < 0) | ||||
| 
 | ||||
| /* Atomic operations are already serializing on ARM */ | ||||
| #define smp_mb__before_atomic_dec()	barrier() | ||||
| #define smp_mb__after_atomic_dec()	barrier() | ||||
| #define smp_mb__before_atomic_inc()	barrier() | ||||
| #define smp_mb__after_atomic_inc()	barrier() | ||||
| #define smp_mb__before_atomic_dec()	smp_mb() | ||||
| #define smp_mb__after_atomic_dec()	smp_mb() | ||||
| #define smp_mb__before_atomic_inc()	smp_mb() | ||||
| #define smp_mb__after_atomic_inc()	smp_mb() | ||||
| 
 | ||||
| #include <asm-generic/atomic.h> | ||||
| #endif | ||||
|  | ||||
| @ -7,4 +7,20 @@ | ||||
| #define L1_CACHE_SHIFT		5 | ||||
| #define L1_CACHE_BYTES		(1 << L1_CACHE_SHIFT) | ||||
| 
 | ||||
| /*
 | ||||
|  * Memory returned by kmalloc() may be used for DMA, so we must make | ||||
|  * sure that all such allocations are cache aligned. Otherwise, | ||||
|  * unrelated code may cause parts of the buffer to be read into the | ||||
|  * cache before the transfer is done, causing old data to be seen by | ||||
|  * the CPU. | ||||
|  */ | ||||
| #define ARCH_KMALLOC_MINALIGN	L1_CACHE_BYTES | ||||
| 
 | ||||
| /*
 | ||||
|  * With EABI on ARMv5 and above we must have 64-bit aligned slab pointers. | ||||
|  */ | ||||
| #if defined(CONFIG_AEABI) && (__LINUX_ARM_ARCH__ >= 5) | ||||
| #define ARCH_SLAB_MINALIGN 8 | ||||
| #endif | ||||
| 
 | ||||
| #endif | ||||
|  | ||||
| @ -5,9 +5,6 @@ | ||||
| #ifndef __ARM_FLAT_H__ | ||||
| #define __ARM_FLAT_H__ | ||||
| 
 | ||||
| /* An odd number of words will be pushed after this alignment, so
 | ||||
|    deliberately misalign the value.  */ | ||||
| #define	flat_stack_align(sp)	sp = (void *)(((unsigned long)(sp) - 4) | 4) | ||||
| #define	flat_argvp_envp_on_stack()		1 | ||||
| #define	flat_old_ram_flag(flags)		(flags) | ||||
| #define	flat_reloc_valid(reloc, size)		((reloc) <= (size)) | ||||
|  | ||||
| @ -202,13 +202,6 @@ typedef struct page *pgtable_t; | ||||
| 	(((current->personality & READ_IMPLIES_EXEC) ? VM_EXEC : 0) | \ | ||||
| 	 VM_READ | VM_WRITE | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) | ||||
| 
 | ||||
| /*
 | ||||
|  * With EABI on ARMv5 and above we must have 64-bit aligned slab pointers. | ||||
|  */ | ||||
| #if defined(CONFIG_AEABI) && (__LINUX_ARM_ARCH__ >= 5) | ||||
| #define ARCH_SLAB_MINALIGN 8 | ||||
| #endif | ||||
| 
 | ||||
| #include <asm-generic/page.h> | ||||
| 
 | ||||
| #endif | ||||
|  | ||||
| @ -248,6 +248,8 @@ static inline unsigned long __xchg(unsigned long x, volatile void *ptr, int size | ||||
| 	unsigned int tmp; | ||||
| #endif | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	switch (size) { | ||||
| #if __LINUX_ARM_ARCH__ >= 6 | ||||
| 	case 1: | ||||
| @ -307,6 +309,7 @@ static inline unsigned long __xchg(unsigned long x, volatile void *ptr, int size | ||||
| 		__bad_xchg(ptr, size), ret = 0; | ||||
| 		break; | ||||
| 	} | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	return ret; | ||||
| } | ||||
| @ -316,6 +319,12 @@ extern void enable_hlt(void); | ||||
| 
 | ||||
| #include <asm-generic/cmpxchg-local.h> | ||||
| 
 | ||||
| #if __LINUX_ARM_ARCH__ < 6 | ||||
| 
 | ||||
| #ifdef CONFIG_SMP | ||||
| #error "SMP is not supported on this platform" | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * cmpxchg_local and cmpxchg64_local are atomic wrt current CPU. Always make | ||||
|  * them available. | ||||
| @ -329,6 +338,173 @@ extern void enable_hlt(void); | ||||
| #include <asm-generic/cmpxchg.h> | ||||
| #endif | ||||
| 
 | ||||
| #else	/* __LINUX_ARM_ARCH__ >= 6 */ | ||||
| 
 | ||||
| extern void __bad_cmpxchg(volatile void *ptr, int size); | ||||
| 
 | ||||
| /*
 | ||||
|  * cmpxchg only support 32-bits operands on ARMv6. | ||||
|  */ | ||||
| 
 | ||||
| static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old, | ||||
| 				      unsigned long new, int size) | ||||
| { | ||||
| 	unsigned long oldval, res; | ||||
| 
 | ||||
| 	switch (size) { | ||||
| #ifdef CONFIG_CPU_32v6K | ||||
| 	case 1: | ||||
| 		do { | ||||
| 			asm volatile("@ __cmpxchg1\n" | ||||
| 			"	ldrexb	%1, [%2]\n" | ||||
| 			"	mov	%0, #0\n" | ||||
| 			"	teq	%1, %3\n" | ||||
| 			"	strexbeq %0, %4, [%2]\n" | ||||
| 				: "=&r" (res), "=&r" (oldval) | ||||
| 				: "r" (ptr), "Ir" (old), "r" (new) | ||||
| 				: "memory", "cc"); | ||||
| 		} while (res); | ||||
| 		break; | ||||
| 	case 2: | ||||
| 		do { | ||||
| 			asm volatile("@ __cmpxchg1\n" | ||||
| 			"	ldrexh	%1, [%2]\n" | ||||
| 			"	mov	%0, #0\n" | ||||
| 			"	teq	%1, %3\n" | ||||
| 			"	strexheq %0, %4, [%2]\n" | ||||
| 				: "=&r" (res), "=&r" (oldval) | ||||
| 				: "r" (ptr), "Ir" (old), "r" (new) | ||||
| 				: "memory", "cc"); | ||||
| 		} while (res); | ||||
| 		break; | ||||
| #endif /* CONFIG_CPU_32v6K */ | ||||
| 	case 4: | ||||
| 		do { | ||||
| 			asm volatile("@ __cmpxchg4\n" | ||||
| 			"	ldrex	%1, [%2]\n" | ||||
| 			"	mov	%0, #0\n" | ||||
| 			"	teq	%1, %3\n" | ||||
| 			"	strexeq %0, %4, [%2]\n" | ||||
| 				: "=&r" (res), "=&r" (oldval) | ||||
| 				: "r" (ptr), "Ir" (old), "r" (new) | ||||
| 				: "memory", "cc"); | ||||
| 		} while (res); | ||||
| 		break; | ||||
| 	default: | ||||
| 		__bad_cmpxchg(ptr, size); | ||||
| 		oldval = 0; | ||||
| 	} | ||||
| 
 | ||||
| 	return oldval; | ||||
| } | ||||
| 
 | ||||
| static inline unsigned long __cmpxchg_mb(volatile void *ptr, unsigned long old, | ||||
| 					 unsigned long new, int size) | ||||
| { | ||||
| 	unsigned long ret; | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| 	ret = __cmpxchg(ptr, old, new, size); | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	return ret; | ||||
| } | ||||
| 
 | ||||
| #define cmpxchg(ptr,o,n)						\ | ||||
| 	((__typeof__(*(ptr)))__cmpxchg_mb((ptr),			\ | ||||
| 					  (unsigned long)(o),		\ | ||||
| 					  (unsigned long)(n),		\ | ||||
| 					  sizeof(*(ptr)))) | ||||
| 
 | ||||
| static inline unsigned long __cmpxchg_local(volatile void *ptr, | ||||
| 					    unsigned long old, | ||||
| 					    unsigned long new, int size) | ||||
| { | ||||
| 	unsigned long ret; | ||||
| 
 | ||||
| 	switch (size) { | ||||
| #ifndef CONFIG_CPU_32v6K | ||||
| 	case 1: | ||||
| 	case 2: | ||||
| 		ret = __cmpxchg_local_generic(ptr, old, new, size); | ||||
| 		break; | ||||
| #endif	/* !CONFIG_CPU_32v6K */ | ||||
| 	default: | ||||
| 		ret = __cmpxchg(ptr, old, new, size); | ||||
| 	} | ||||
| 
 | ||||
| 	return ret; | ||||
| } | ||||
| 
 | ||||
| #define cmpxchg_local(ptr,o,n)						\ | ||||
| 	((__typeof__(*(ptr)))__cmpxchg_local((ptr),			\ | ||||
| 				       (unsigned long)(o),		\ | ||||
| 				       (unsigned long)(n),		\ | ||||
| 				       sizeof(*(ptr)))) | ||||
| 
 | ||||
| #ifdef CONFIG_CPU_32v6K | ||||
| 
 | ||||
| /*
 | ||||
|  * Note : ARMv7-M (currently unsupported by Linux) does not support | ||||
|  * ldrexd/strexd. If ARMv7-M is ever supported by the Linux kernel, it should | ||||
|  * not be allowed to use __cmpxchg64. | ||||
|  */ | ||||
| static inline unsigned long long __cmpxchg64(volatile void *ptr, | ||||
| 					     unsigned long long old, | ||||
| 					     unsigned long long new) | ||||
| { | ||||
| 	register unsigned long long oldval asm("r0"); | ||||
| 	register unsigned long long __old asm("r2") = old; | ||||
| 	register unsigned long long __new asm("r4") = new; | ||||
| 	unsigned long res; | ||||
| 
 | ||||
| 	do { | ||||
| 		asm volatile( | ||||
| 		"	@ __cmpxchg8\n" | ||||
| 		"	ldrexd	%1, %H1, [%2]\n" | ||||
| 		"	mov	%0, #0\n" | ||||
| 		"	teq	%1, %3\n" | ||||
| 		"	teqeq	%H1, %H3\n" | ||||
| 		"	strexdeq %0, %4, %H4, [%2]\n" | ||||
| 			: "=&r" (res), "=&r" (oldval) | ||||
| 			: "r" (ptr), "Ir" (__old), "r" (__new) | ||||
| 			: "memory", "cc"); | ||||
| 	} while (res); | ||||
| 
 | ||||
| 	return oldval; | ||||
| } | ||||
| 
 | ||||
| static inline unsigned long long __cmpxchg64_mb(volatile void *ptr, | ||||
| 						unsigned long long old, | ||||
| 						unsigned long long new) | ||||
| { | ||||
| 	unsigned long long ret; | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| 	ret = __cmpxchg64(ptr, old, new); | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	return ret; | ||||
| } | ||||
| 
 | ||||
| #define cmpxchg64(ptr,o,n)						\ | ||||
| 	((__typeof__(*(ptr)))__cmpxchg64_mb((ptr),			\ | ||||
| 					    (unsigned long long)(o),	\ | ||||
| 					    (unsigned long long)(n))) | ||||
| 
 | ||||
| #define cmpxchg64_local(ptr,o,n)					\ | ||||
| 	((__typeof__(*(ptr)))__cmpxchg64((ptr),				\ | ||||
| 					 (unsigned long long)(o),	\ | ||||
| 					 (unsigned long long)(n))) | ||||
| 
 | ||||
| #else	/* !CONFIG_CPU_32v6K */ | ||||
| 
 | ||||
| #define cmpxchg64_local(ptr, o, n) __cmpxchg64_local_generic((ptr), (o), (n)) | ||||
| 
 | ||||
| #endif	/* CONFIG_CPU_32v6K */ | ||||
| 
 | ||||
| #endif	/* __LINUX_ARM_ARCH__ >= 6 */ | ||||
| 
 | ||||
| #endif /* __ASSEMBLY__ */ | ||||
| 
 | ||||
| #define arch_align_stack(x) (x) | ||||
|  | ||||
| @ -78,6 +78,15 @@ int arm_elf_read_implies_exec(const struct elf32_hdr *x, int executable_stack) | ||||
| 		return 1; | ||||
| 	if (cpu_architecture() < CPU_ARCH_ARMv6) | ||||
| 		return 1; | ||||
| #if !defined(CONFIG_AEABI) || defined(CONFIG_OABI_COMPAT) | ||||
| 	/*
 | ||||
| 	 * If we have support for OABI programs, we can never allow NX | ||||
| 	 * support - our signal syscall restart mechanism relies upon | ||||
| 	 * being able to execute code placed on the user stack. | ||||
| 	 */ | ||||
| 	return 1; | ||||
| #else | ||||
| 	return 0; | ||||
| #endif | ||||
| } | ||||
| EXPORT_SYMBOL(arm_elf_read_implies_exec); | ||||
|  | ||||
| @ -815,10 +815,7 @@ __kuser_helper_start: | ||||
|  */ | ||||
| 
 | ||||
| __kuser_memory_barrier:				@ 0xffff0fa0
 | ||||
| 
 | ||||
| #if __LINUX_ARM_ARCH__ >= 6 && defined(CONFIG_SMP) | ||||
| 	mcr	p15, 0, r0, c7, c10, 5	@ dmb
 | ||||
| #endif | ||||
| 	smp_dmb | ||||
| 	usr_ret	lr | ||||
| 
 | ||||
| 	.align	5
 | ||||
|  | ||||
| @ -18,12 +18,14 @@ | ||||
| 	mov	r2, #1 | ||||
| 	add	r1, r1, r0, lsr #3	@ Get byte offset | ||||
| 	mov	r3, r2, lsl r3		@ create mask | ||||
| 	smp_dmb | ||||
| 1:	ldrexb	r2, [r1] | ||||
| 	ands	r0, r2, r3		@ save old value of bit | ||||
| 	\instr	r2, r2, r3			@ toggle bit | ||||
| 	strexb	ip, r2, [r1] | ||||
| 	cmp	ip, #0 | ||||
| 	bne	1b | ||||
| 	smp_dmb | ||||
| 	cmp	r0, #0 | ||||
| 	movne	r0, #1 | ||||
| 2:	mov	pc, lr | ||||
|  | ||||
| @ -15,10 +15,9 @@ | ||||
| /*
 | ||||
|  * Memory Map definitions | ||||
|  */ | ||||
| /* FIXME: Does it really swap SRAM like this? */ | ||||
| #ifdef CONFIG_GEMINI_MEM_SWAP | ||||
| # define GEMINI_DRAM_BASE	0x00000000 | ||||
| # define GEMINI_SRAM_BASE	0x20000000 | ||||
| # define GEMINI_SRAM_BASE	0x70000000 | ||||
| #else | ||||
| # define GEMINI_SRAM_BASE	0x00000000 | ||||
| # define GEMINI_DRAM_BASE	0x10000000 | ||||
|  | ||||
| @ -144,6 +144,9 @@ static struct platform_device kirkwood_ge00 = { | ||||
| 	.id		= 0, | ||||
| 	.num_resources	= 1, | ||||
| 	.resource	= kirkwood_ge00_resources, | ||||
| 	.dev		= { | ||||
| 		.coherent_dma_mask	= 0xffffffff, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| void __init kirkwood_ge00_init(struct mv643xx_eth_platform_data *eth_data) | ||||
| @ -202,6 +205,9 @@ static struct platform_device kirkwood_ge01 = { | ||||
| 	.id		= 1, | ||||
| 	.num_resources	= 1, | ||||
| 	.resource	= kirkwood_ge01_resources, | ||||
| 	.dev		= { | ||||
| 		.coherent_dma_mask	= 0xffffffff, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| void __init kirkwood_ge01_init(struct mv643xx_eth_platform_data *eth_data) | ||||
| @ -386,12 +392,10 @@ static struct mv64xxx_i2c_pdata kirkwood_i2c_pdata = { | ||||
| 
 | ||||
| static struct resource kirkwood_i2c_resources[] = { | ||||
| 	{ | ||||
| 		.name	= "i2c", | ||||
| 		.start	= I2C_PHYS_BASE, | ||||
| 		.end	= I2C_PHYS_BASE + 0x1f, | ||||
| 		.flags	= IORESOURCE_MEM, | ||||
| 	}, { | ||||
| 		.name	= "i2c", | ||||
| 		.start	= IRQ_KIRKWOOD_TWSI, | ||||
| 		.end	= IRQ_KIRKWOOD_TWSI, | ||||
| 		.flags	= IORESOURCE_IRQ, | ||||
|  | ||||
| @ -142,6 +142,8 @@ static unsigned int qnap_ts219_mpp_config[] __initdata = { | ||||
| 	MPP1_SPI_MOSI, | ||||
| 	MPP2_SPI_SCK, | ||||
| 	MPP3_SPI_MISO, | ||||
| 	MPP4_SATA1_ACTn, | ||||
| 	MPP5_SATA0_ACTn, | ||||
| 	MPP8_TW_SDA, | ||||
| 	MPP9_TW_SCK, | ||||
| 	MPP10_UART0_TXD, | ||||
| @ -150,10 +152,6 @@ static unsigned int qnap_ts219_mpp_config[] __initdata = { | ||||
| 	MPP14_UART1_RXD,	/* PIC controller */ | ||||
| 	MPP15_GPIO,		/* USB Copy button */ | ||||
| 	MPP16_GPIO,		/* Reset button */ | ||||
| 	MPP20_SATA1_ACTn, | ||||
| 	MPP21_SATA0_ACTn, | ||||
| 	MPP22_SATA1_PRESENTn, | ||||
| 	MPP23_SATA0_PRESENTn, | ||||
| 	0 | ||||
| }; | ||||
| 
 | ||||
|  | ||||
| @ -82,6 +82,9 @@ static struct platform_device loki_ge0 = { | ||||
| 	.id		= 0, | ||||
| 	.num_resources	= 1, | ||||
| 	.resource	= loki_ge0_resources, | ||||
| 	.dev		= { | ||||
| 		.coherent_dma_mask	= 0xffffffff, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| void __init loki_ge0_init(struct mv643xx_eth_platform_data *eth_data) | ||||
| @ -136,6 +139,9 @@ static struct platform_device loki_ge1 = { | ||||
| 	.id		= 1, | ||||
| 	.num_resources	= 1, | ||||
| 	.resource	= loki_ge1_resources, | ||||
| 	.dev		= { | ||||
| 		.coherent_dma_mask	= 0xffffffff, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| void __init loki_ge1_init(struct mv643xx_eth_platform_data *eth_data) | ||||
|  | ||||
| @ -3,6 +3,11 @@ | ||||
| 
 | ||||
| #include <mach/mfp.h> | ||||
| 
 | ||||
| #define MFP_DRIVE_VERY_SLOW	(0x0 << 13) | ||||
| #define MFP_DRIVE_SLOW		(0x1 << 13) | ||||
| #define MFP_DRIVE_MEDIUM	(0x2 << 13) | ||||
| #define MFP_DRIVE_FAST		(0x3 << 13) | ||||
| 
 | ||||
| /* GPIO */ | ||||
| #define GPIO0_GPIO		MFP_CFG(GPIO0, AF5) | ||||
| #define GPIO1_GPIO		MFP_CFG(GPIO1, AF5) | ||||
|  | ||||
| @ -3,6 +3,11 @@ | ||||
| 
 | ||||
| #include <mach/mfp.h> | ||||
| 
 | ||||
| #define MFP_DRIVE_VERY_SLOW	(0x0 << 13) | ||||
| #define MFP_DRIVE_SLOW		(0x2 << 13) | ||||
| #define MFP_DRIVE_MEDIUM	(0x4 << 13) | ||||
| #define MFP_DRIVE_FAST		(0x8 << 13) | ||||
| 
 | ||||
| /* UART2 */ | ||||
| #define GPIO47_UART2_RXD	MFP_CFG(GPIO47, AF6) | ||||
| #define GPIO48_UART2_TXD	MFP_CFG(GPIO48, AF6) | ||||
|  | ||||
| @ -12,16 +12,13 @@ | ||||
|  * possible, we make the following compromise: | ||||
|  * | ||||
|  * 1. SLEEP_OE_N will always be programmed to '1' (by MFP_LPM_FLOAT) | ||||
|  * 2. DRIVE strength definitions redefined to include the reserved bit10 | ||||
|  * 2. DRIVE strength definitions redefined to include the reserved bit | ||||
|  *    - the reserved bit differs between pxa168 and pxa910, and the | ||||
|  *      MFP_DRIVE_* macros are individually defined in mfp-pxa{168,910}.h | ||||
|  * 3. Override MFP_CFG() and MFP_CFG_DRV() | ||||
|  * 4. Drop the use of MFP_CFG_LPM() and MFP_CFG_X() | ||||
|  */ | ||||
| 
 | ||||
| #define MFP_DRIVE_VERY_SLOW	(0x0 << 13) | ||||
| #define MFP_DRIVE_SLOW		(0x2 << 13) | ||||
| #define MFP_DRIVE_MEDIUM	(0x4 << 13) | ||||
| #define MFP_DRIVE_FAST		(0x8 << 13) | ||||
| 
 | ||||
| #undef MFP_CFG | ||||
| #undef MFP_CFG_DRV | ||||
| #undef MFP_CFG_LPM | ||||
|  | ||||
| @ -136,7 +136,7 @@ static struct clock_event_device ckevt = { | ||||
| 	.set_mode	= timer_set_mode, | ||||
| }; | ||||
| 
 | ||||
| static cycle_t clksrc_read(void) | ||||
| static cycle_t clksrc_read(struct clocksource *cs) | ||||
| { | ||||
| 	return timer_read(); | ||||
| } | ||||
|  | ||||
| @ -321,6 +321,9 @@ static struct platform_device mv78xx0_ge00 = { | ||||
| 	.id		= 0, | ||||
| 	.num_resources	= 1, | ||||
| 	.resource	= mv78xx0_ge00_resources, | ||||
| 	.dev		= { | ||||
| 		.coherent_dma_mask	= 0xffffffff, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| void __init mv78xx0_ge00_init(struct mv643xx_eth_platform_data *eth_data) | ||||
| @ -375,6 +378,9 @@ static struct platform_device mv78xx0_ge01 = { | ||||
| 	.id		= 1, | ||||
| 	.num_resources	= 1, | ||||
| 	.resource	= mv78xx0_ge01_resources, | ||||
| 	.dev		= { | ||||
| 		.coherent_dma_mask	= 0xffffffff, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| void __init mv78xx0_ge01_init(struct mv643xx_eth_platform_data *eth_data) | ||||
| @ -429,6 +435,9 @@ static struct platform_device mv78xx0_ge10 = { | ||||
| 	.id		= 2, | ||||
| 	.num_resources	= 1, | ||||
| 	.resource	= mv78xx0_ge10_resources, | ||||
| 	.dev		= { | ||||
| 		.coherent_dma_mask	= 0xffffffff, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| void __init mv78xx0_ge10_init(struct mv643xx_eth_platform_data *eth_data) | ||||
| @ -496,6 +505,9 @@ static struct platform_device mv78xx0_ge11 = { | ||||
| 	.id		= 3, | ||||
| 	.num_resources	= 1, | ||||
| 	.resource	= mv78xx0_ge11_resources, | ||||
| 	.dev		= { | ||||
| 		.coherent_dma_mask	= 0xffffffff, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| void __init mv78xx0_ge11_init(struct mv643xx_eth_platform_data *eth_data) | ||||
| @ -532,12 +544,10 @@ static struct mv64xxx_i2c_pdata mv78xx0_i2c_0_pdata = { | ||||
| 
 | ||||
| static struct resource mv78xx0_i2c_0_resources[] = { | ||||
| 	{ | ||||
| 		.name   = "i2c 0 base", | ||||
| 		.start  = I2C_0_PHYS_BASE, | ||||
| 		.end    = I2C_0_PHYS_BASE + 0x1f, | ||||
| 		.flags  = IORESOURCE_MEM, | ||||
| 	}, { | ||||
| 		.name   = "i2c 0 irq", | ||||
| 		.start  = IRQ_MV78XX0_I2C_0, | ||||
| 		.end    = IRQ_MV78XX0_I2C_0, | ||||
| 		.flags  = IORESOURCE_IRQ, | ||||
| @ -567,12 +577,10 @@ static struct mv64xxx_i2c_pdata mv78xx0_i2c_1_pdata = { | ||||
| 
 | ||||
| static struct resource mv78xx0_i2c_1_resources[] = { | ||||
| 	{ | ||||
| 		.name   = "i2c 1 base", | ||||
| 		.start  = I2C_1_PHYS_BASE, | ||||
| 		.end    = I2C_1_PHYS_BASE + 0x1f, | ||||
| 		.flags  = IORESOURCE_MEM, | ||||
| 	}, { | ||||
| 		.name   = "i2c 1 irq", | ||||
| 		.start  = IRQ_MV78XX0_I2C_1, | ||||
| 		.end    = IRQ_MV78XX0_I2C_1, | ||||
| 		.flags  = IORESOURCE_IRQ, | ||||
|  | ||||
| @ -890,7 +890,7 @@ static struct clk clko_clk = { | ||||
| 		.con_id = n, \ | ||||
| 		.clk = &c, \ | ||||
| 	}, | ||||
| static struct clk_lookup lookups[] __initdata = { | ||||
| static struct clk_lookup lookups[] = { | ||||
| /* It's unlikely that any driver wants one of them directly:
 | ||||
| 	_REGISTER_CLOCK(NULL, "ckih", ckih_clk) | ||||
| 	_REGISTER_CLOCK(NULL, "ckil", ckil_clk) | ||||
|  | ||||
| @ -621,7 +621,7 @@ DEFINE_CLOCK1(csi_clk,     0, 0,      0, parent, &csi_clk1, &per4_clk); | ||||
| 		.clk = &c, \ | ||||
| 	}, | ||||
| 
 | ||||
| static struct clk_lookup lookups[] __initdata = { | ||||
| static struct clk_lookup lookups[] = { | ||||
| 	_REGISTER_CLOCK("imx-uart.0", NULL, uart1_clk) | ||||
| 	_REGISTER_CLOCK("imx-uart.1", NULL, uart2_clk) | ||||
| 	_REGISTER_CLOCK("imx-uart.2", NULL, uart3_clk) | ||||
|  | ||||
| @ -404,7 +404,7 @@ DEFINE_CLOCK(gpu2d_clk,  0, CCM_CGR3,  4, NULL, NULL); | ||||
| 		.clk = &c,		\ | ||||
| 	}, | ||||
| 
 | ||||
| static struct clk_lookup lookups[] __initdata = { | ||||
| static struct clk_lookup lookups[] = { | ||||
| 	_REGISTER_CLOCK(NULL, "asrc", asrc_clk) | ||||
| 	_REGISTER_CLOCK(NULL, "ata", ata_clk) | ||||
| 	_REGISTER_CLOCK(NULL, "audmux", audmux_clk) | ||||
|  | ||||
| @ -516,7 +516,7 @@ DEFINE_CLOCK(ipg_clk,     0, NULL,          0, ipg_get_rate, NULL, &ahb_clk); | ||||
| 		.clk = &c, \ | ||||
| 	}, | ||||
| 
 | ||||
| static struct clk_lookup lookups[] __initdata = { | ||||
| static struct clk_lookup lookups[] = { | ||||
| 	_REGISTER_CLOCK(NULL, "emi", emi_clk) | ||||
| 	_REGISTER_CLOCK(NULL, "cspi", cspi1_clk) | ||||
| 	_REGISTER_CLOCK(NULL, "cspi", cspi2_clk) | ||||
|  | ||||
| @ -188,6 +188,9 @@ static struct platform_device orion5x_eth = { | ||||
| 	.id		= 0, | ||||
| 	.num_resources	= 1, | ||||
| 	.resource	= orion5x_eth_resources, | ||||
| 	.dev		= { | ||||
| 		.coherent_dma_mask	= 0xffffffff, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| void __init orion5x_eth_init(struct mv643xx_eth_platform_data *eth_data) | ||||
| @ -248,12 +251,10 @@ static struct mv64xxx_i2c_pdata orion5x_i2c_pdata = { | ||||
| 
 | ||||
| static struct resource orion5x_i2c_resources[] = { | ||||
| 	{ | ||||
| 		.name	= "i2c base", | ||||
| 		.start	= I2C_PHYS_BASE, | ||||
| 		.end	= I2C_PHYS_BASE + 0x1f, | ||||
| 		.flags	= IORESOURCE_MEM, | ||||
| 	}, { | ||||
| 		.name	= "i2c irq", | ||||
| 		.start	= IRQ_ORION5X_I2C, | ||||
| 		.end	= IRQ_ORION5X_I2C, | ||||
| 		.flags	= IORESOURCE_IRQ, | ||||
|  | ||||
| @ -72,7 +72,10 @@ void __init pxa_set_mci_info(struct pxamci_platform_data *info) | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| static struct pxa2xx_udc_mach_info pxa_udc_info; | ||||
| static struct pxa2xx_udc_mach_info pxa_udc_info = { | ||||
| 	.gpio_pullup = -1, | ||||
| 	.gpio_vbus   = -1, | ||||
| }; | ||||
| 
 | ||||
| void __init pxa_set_udc_info(struct pxa2xx_udc_mach_info *info) | ||||
| { | ||||
|  | ||||
| @ -111,9 +111,9 @@ static unsigned long ezx_pin_config[] __initdata = { | ||||
| 	GPIO25_SSP1_TXD, | ||||
| 	GPIO26_SSP1_RXD, | ||||
| 	GPIO24_GPIO,				/* pcap chip select */ | ||||
| 	GPIO1_GPIO,				/* pcap interrupt */ | ||||
| 	GPIO4_GPIO,				/* WDI_AP */ | ||||
| 	GPIO55_GPIO,				/* SYS_RESTART */ | ||||
| 	GPIO1_GPIO | WAKEUP_ON_EDGE_RISE,	/* pcap interrupt */ | ||||
| 	GPIO4_GPIO | MFP_LPM_DRIVE_HIGH,	/* WDI_AP */ | ||||
| 	GPIO55_GPIO | MFP_LPM_DRIVE_HIGH,	/* SYS_RESTART */ | ||||
| 
 | ||||
| 	/* MMC */ | ||||
| 	GPIO32_MMC_CLK, | ||||
| @ -144,20 +144,20 @@ static unsigned long ezx_pin_config[] __initdata = { | ||||
| #if defined(CONFIG_MACH_EZX_A780) || defined(CONFIG_MACH_EZX_E680) | ||||
| static unsigned long gen1_pin_config[] __initdata = { | ||||
| 	/* flip / lockswitch */ | ||||
| 	GPIO12_GPIO, | ||||
| 	GPIO12_GPIO | WAKEUP_ON_EDGE_BOTH, | ||||
| 
 | ||||
| 	/* bluetooth (bcm2035) */ | ||||
| 	GPIO14_GPIO | WAKEUP_ON_LEVEL_HIGH,	/* HOSTWAKE */ | ||||
| 	GPIO14_GPIO | WAKEUP_ON_EDGE_RISE,	/* HOSTWAKE */ | ||||
| 	GPIO48_GPIO,				/* RESET */ | ||||
| 	GPIO28_GPIO,				/* WAKEUP */ | ||||
| 
 | ||||
| 	/* Neptune handshake */ | ||||
| 	GPIO0_GPIO | WAKEUP_ON_LEVEL_HIGH,	/* BP_RDY */ | ||||
| 	GPIO57_GPIO,				/* AP_RDY */ | ||||
| 	GPIO13_GPIO | WAKEUP_ON_LEVEL_HIGH,	/* WDI */ | ||||
| 	GPIO3_GPIO | WAKEUP_ON_LEVEL_HIGH,	/* WDI2 */ | ||||
| 	GPIO82_GPIO,				/* RESET */ | ||||
| 	GPIO99_GPIO,				/* TC_MM_EN */ | ||||
| 	GPIO0_GPIO | WAKEUP_ON_EDGE_FALL,	/* BP_RDY */ | ||||
| 	GPIO57_GPIO | MFP_LPM_DRIVE_HIGH,	/* AP_RDY */ | ||||
| 	GPIO13_GPIO | WAKEUP_ON_EDGE_BOTH,	/* WDI */ | ||||
| 	GPIO3_GPIO | WAKEUP_ON_EDGE_BOTH,	/* WDI2 */ | ||||
| 	GPIO82_GPIO | MFP_LPM_DRIVE_HIGH,	/* RESET */ | ||||
| 	GPIO99_GPIO | MFP_LPM_DRIVE_HIGH,	/* TC_MM_EN */ | ||||
| 
 | ||||
| 	/* sound */ | ||||
| 	GPIO52_SSP3_SCLK, | ||||
| @ -199,21 +199,21 @@ static unsigned long gen1_pin_config[] __initdata = { | ||||
| 	defined(CONFIG_MACH_EZX_E2) || defined(CONFIG_MACH_EZX_E6) | ||||
| static unsigned long gen2_pin_config[] __initdata = { | ||||
| 	/* flip / lockswitch */ | ||||
| 	GPIO15_GPIO, | ||||
| 	GPIO15_GPIO | WAKEUP_ON_EDGE_BOTH, | ||||
| 
 | ||||
| 	/* EOC */ | ||||
| 	GPIO10_GPIO, | ||||
| 	GPIO10_GPIO | WAKEUP_ON_EDGE_RISE, | ||||
| 
 | ||||
| 	/* bluetooth (bcm2045) */ | ||||
| 	GPIO13_GPIO | WAKEUP_ON_LEVEL_HIGH,	/* HOSTWAKE */ | ||||
| 	GPIO13_GPIO | WAKEUP_ON_EDGE_RISE,	/* HOSTWAKE */ | ||||
| 	GPIO37_GPIO,				/* RESET */ | ||||
| 	GPIO57_GPIO,				/* WAKEUP */ | ||||
| 
 | ||||
| 	/* Neptune handshake */ | ||||
| 	GPIO0_GPIO | WAKEUP_ON_LEVEL_HIGH,	/* BP_RDY */ | ||||
| 	GPIO96_GPIO,				/* AP_RDY */ | ||||
| 	GPIO3_GPIO | WAKEUP_ON_LEVEL_HIGH,	/* WDI */ | ||||
| 	GPIO116_GPIO,				/* RESET */ | ||||
| 	GPIO0_GPIO | WAKEUP_ON_EDGE_FALL,	/* BP_RDY */ | ||||
| 	GPIO96_GPIO | MFP_LPM_DRIVE_HIGH,	/* AP_RDY */ | ||||
| 	GPIO3_GPIO | WAKEUP_ON_EDGE_FALL,	/* WDI */ | ||||
| 	GPIO116_GPIO | MFP_LPM_DRIVE_HIGH,	/* RESET */ | ||||
| 	GPIO41_GPIO,				/* BP_FLASH */ | ||||
| 
 | ||||
| 	/* sound */ | ||||
|  | ||||
| @ -412,7 +412,7 @@ static struct platform_device imote2_flash_device = { | ||||
|  */ | ||||
| static struct i2c_board_info __initdata imote2_i2c_board_info[] = { | ||||
| 	{ /* UCAM sensor board */ | ||||
| 		.type = "max1238", | ||||
| 		.type = "max1239", | ||||
| 		.addr = 0x35, | ||||
| 	}, { /* ITS400 Sensor board only */ | ||||
| 		.type = "max1363", | ||||
|  | ||||
| @ -13,8 +13,9 @@ extern void clear_reset_status(unsigned int mask); | ||||
| /**
 | ||||
|  * init_gpio_reset() - register GPIO as reset generator | ||||
|  * @gpio: gpio nr | ||||
|  * @output: set gpio as out/low instead of input during normal work | ||||
|  * @output: set gpio as output instead of input during normal work | ||||
|  * @level: output level | ||||
|  */ | ||||
| extern int init_gpio_reset(int gpio, int output); | ||||
| extern int init_gpio_reset(int gpio, int output, int level); | ||||
| 
 | ||||
| #endif /* __ASM_ARCH_RESET_H */ | ||||
|  | ||||
| @ -322,6 +322,7 @@ static inline void pxa27x_mfp_init(void) {} | ||||
| #ifdef CONFIG_PM | ||||
| static unsigned long saved_gafr[2][4]; | ||||
| static unsigned long saved_gpdr[4]; | ||||
| static unsigned long saved_pgsr[4]; | ||||
| 
 | ||||
| static int pxa2xx_mfp_suspend(struct sys_device *d, pm_message_t state) | ||||
| { | ||||
| @ -332,6 +333,7 @@ static int pxa2xx_mfp_suspend(struct sys_device *d, pm_message_t state) | ||||
| 		saved_gafr[0][i] = GAFR_L(i); | ||||
| 		saved_gafr[1][i] = GAFR_U(i); | ||||
| 		saved_gpdr[i] = GPDR(i * 32); | ||||
| 		saved_pgsr[i] = PGSR(i); | ||||
| 
 | ||||
| 		GPDR(i * 32) = gpdr_lpm[i]; | ||||
| 	} | ||||
| @ -346,6 +348,7 @@ static int pxa2xx_mfp_resume(struct sys_device *d) | ||||
| 		GAFR_L(i) = saved_gafr[0][i]; | ||||
| 		GAFR_U(i) = saved_gafr[1][i]; | ||||
| 		GPDR(i * 32) = saved_gpdr[i]; | ||||
| 		PGSR(i) = saved_pgsr[i]; | ||||
| 	} | ||||
| 	PSSR = PSSR_RDH | PSSR_PH; | ||||
| 	return 0; | ||||
| @ -374,6 +377,9 @@ static int __init pxa2xx_mfp_init(void) | ||||
| 	if (cpu_is_pxa27x()) | ||||
| 		pxa27x_mfp_init(); | ||||
| 
 | ||||
| 	/* clear RDH bit to enable GPIO receivers after reset/sleep exit */ | ||||
| 	PSSR = PSSR_RDH; | ||||
| 
 | ||||
| 	/* initialize gafr_run[], pgsr_lpm[] from existing values */ | ||||
| 	for (i = 0; i <= gpio_to_bank(pxa_last_gpio); i++) | ||||
| 		gpdr_lpm[i] = GPDR(i * 32); | ||||
|  | ||||
| @ -62,6 +62,8 @@ static unsigned long palmld_pin_config[] __initdata = { | ||||
| 	GPIO29_AC97_SDATA_IN_0, | ||||
| 	GPIO30_AC97_SDATA_OUT, | ||||
| 	GPIO31_AC97_SYNC, | ||||
| 	GPIO89_AC97_SYSCLK, | ||||
| 	GPIO95_AC97_nRESET, | ||||
| 
 | ||||
| 	/* IrDA */ | ||||
| 	GPIO108_GPIO,	/* ir disable */ | ||||
|  | ||||
| @ -64,6 +64,7 @@ static unsigned long palmt5_pin_config[] __initdata = { | ||||
| 	GPIO29_AC97_SDATA_IN_0, | ||||
| 	GPIO30_AC97_SDATA_OUT, | ||||
| 	GPIO31_AC97_SYNC, | ||||
| 	GPIO89_AC97_SYSCLK, | ||||
| 	GPIO95_AC97_nRESET, | ||||
| 
 | ||||
| 	/* IrDA */ | ||||
|  | ||||
| @ -65,6 +65,7 @@ static unsigned long palmtx_pin_config[] __initdata = { | ||||
| 	GPIO29_AC97_SDATA_IN_0, | ||||
| 	GPIO30_AC97_SDATA_OUT, | ||||
| 	GPIO31_AC97_SYNC, | ||||
| 	GPIO89_AC97_SYSCLK, | ||||
| 	GPIO95_AC97_nRESET, | ||||
| 
 | ||||
| 	/* IrDA */ | ||||
|  | ||||
| @ -20,7 +20,7 @@ static void do_hw_reset(void); | ||||
| 
 | ||||
| static int reset_gpio = -1; | ||||
| 
 | ||||
| int init_gpio_reset(int gpio, int output) | ||||
| int init_gpio_reset(int gpio, int output, int level) | ||||
| { | ||||
| 	int rc; | ||||
| 
 | ||||
| @ -31,7 +31,7 @@ int init_gpio_reset(int gpio, int output) | ||||
| 	} | ||||
| 
 | ||||
| 	if (output) | ||||
| 		rc = gpio_direction_output(gpio, 0); | ||||
| 		rc = gpio_direction_output(gpio, level); | ||||
| 	else | ||||
| 		rc = gpio_direction_input(gpio); | ||||
| 	if (rc) { | ||||
|  | ||||
| @ -531,9 +531,15 @@ static int spitz_ohci_init(struct device *dev) | ||||
| 	return gpio_direction_output(SPITZ_GPIO_USB_HOST, 1); | ||||
| } | ||||
| 
 | ||||
| static void spitz_ohci_exit(struct device *dev) | ||||
| { | ||||
| 	gpio_free(SPITZ_GPIO_USB_HOST); | ||||
| } | ||||
| 
 | ||||
| static struct pxaohci_platform_data spitz_ohci_platform_data = { | ||||
| 	.port_mode	= PMM_NPS_MODE, | ||||
| 	.init		= spitz_ohci_init, | ||||
| 	.exit		= spitz_ohci_exit, | ||||
| 	.flags		= ENABLE_PORT_ALL | NO_OC_PROTECTION, | ||||
| 	.power_budget	= 150, | ||||
| }; | ||||
| @ -731,7 +737,7 @@ static void spitz_restart(char mode, const char *cmd) | ||||
| 
 | ||||
| static void __init common_init(void) | ||||
| { | ||||
| 	init_gpio_reset(SPITZ_GPIO_ON_RESET, 1); | ||||
| 	init_gpio_reset(SPITZ_GPIO_ON_RESET, 1, 0); | ||||
| 	pm_power_off = spitz_poweroff; | ||||
| 	arm_pm_restart = spitz_restart; | ||||
| 
 | ||||
|  | ||||
| @ -897,7 +897,7 @@ static void __init tosa_init(void) | ||||
| 	gpio_set_wake(MFP_PIN_GPIO1, 1); | ||||
| 	/* We can't pass to gpio-keys since it will drop the Reset altfunc */ | ||||
| 
 | ||||
| 	init_gpio_reset(TOSA_GPIO_ON_RESET, 0); | ||||
| 	init_gpio_reset(TOSA_GPIO_ON_RESET, 0, 0); | ||||
| 
 | ||||
| 	pm_power_off = tosa_poweroff; | ||||
| 	arm_pm_restart = tosa_restart; | ||||
|  | ||||
| @ -184,23 +184,37 @@ __v7_setup: | ||||
| 	stmia	r12, {r0-r5, r7, r9, r11, lr} | ||||
| 	bl	v7_flush_dcache_all | ||||
| 	ldmia	r12, {r0-r5, r7, r9, r11, lr} | ||||
| 
 | ||||
| 	mrc	p15, 0, r0, c0, c0, 0		@ read main ID register
 | ||||
| 	and	r10, r0, #0xff000000		@ ARM?
 | ||||
| 	teq	r10, #0x41000000 | ||||
| 	bne	2f | ||||
| 	and	r5, r0, #0x00f00000		@ variant
 | ||||
| 	and	r6, r0, #0x0000000f		@ revision
 | ||||
| 	orr	r0, r6, r5, lsr #20-4		@ combine variant and revision
 | ||||
| 
 | ||||
| #ifdef CONFIG_ARM_ERRATA_430973 | ||||
| 	mrc	p15, 0, r10, c1, c0, 1		@ read aux control register
 | ||||
| 	orr	r10, r10, #(1 << 6)		@ set IBE to 1
 | ||||
| 	mcr	p15, 0, r10, c1, c0, 1		@ write aux control register
 | ||||
| 	teq	r5, #0x00100000			@ only present in r1p*
 | ||||
| 	mrceq	p15, 0, r10, c1, c0, 1		@ read aux control register
 | ||||
| 	orreq	r10, r10, #(1 << 6)		@ set IBE to 1
 | ||||
| 	mcreq	p15, 0, r10, c1, c0, 1		@ write aux control register
 | ||||
| #endif | ||||
| #ifdef CONFIG_ARM_ERRATA_458693 | ||||
| 	mrc	p15, 0, r10, c1, c0, 1		@ read aux control register
 | ||||
| 	orr	r10, r10, #(1 << 5)		@ set L1NEON to 1
 | ||||
| 	orr	r10, r10, #(1 << 9)		@ set PLDNOP to 1
 | ||||
| 	mcr	p15, 0, r10, c1, c0, 1		@ write aux control register
 | ||||
| 	teq	r0, #0x20			@ only present in r2p0
 | ||||
| 	mrceq	p15, 0, r10, c1, c0, 1		@ read aux control register
 | ||||
| 	orreq	r10, r10, #(1 << 5)		@ set L1NEON to 1
 | ||||
| 	orreq	r10, r10, #(1 << 9)		@ set PLDNOP to 1
 | ||||
| 	mcreq	p15, 0, r10, c1, c0, 1		@ write aux control register
 | ||||
| #endif | ||||
| #ifdef CONFIG_ARM_ERRATA_460075 | ||||
| 	mrc	p15, 1, r10, c9, c0, 2		@ read L2 cache aux ctrl register
 | ||||
| 	orr	r10, r10, #(1 << 22)		@ set the Write Allocate disable bit
 | ||||
| 	mcr	p15, 1, r10, c9, c0, 2		@ write the L2 cache aux ctrl register
 | ||||
| 	teq	r0, #0x20			@ only present in r2p0
 | ||||
| 	mrceq	p15, 1, r10, c9, c0, 2		@ read L2 cache aux ctrl register
 | ||||
| 	tsteq	r10, #1 << 22 | ||||
| 	orreq	r10, r10, #(1 << 22)		@ set the Write Allocate disable bit
 | ||||
| 	mcreq	p15, 1, r10, c9, c0, 2		@ write the L2 cache aux ctrl register
 | ||||
| #endif | ||||
| 	mov	r10, #0 | ||||
| 
 | ||||
| 2:	mov	r10, #0 | ||||
| #ifdef HARVARD_CACHE | ||||
| 	mcr	p15, 0, r10, c7, c5, 0		@ I+BTB cache invalidate
 | ||||
| #endif | ||||
|  | ||||
| @ -12,7 +12,7 @@ | ||||
| # | ||||
| #   http://www.arm.linux.org.uk/developer/machines/?action=new | ||||
| # | ||||
| # Last update: Mon Mar 23 20:09:01 2009 | ||||
| # Last update: Fri May 29 10:14:20 2009 | ||||
| # | ||||
| # machine_is_xxx	CONFIG_xxxx		MACH_TYPE_xxx		number | ||||
| # | ||||
| @ -916,7 +916,7 @@ nxdb500			MACH_NXDB500		NXDB500			905 | ||||
| apf9328			MACH_APF9328		APF9328			906 | ||||
| omap_wipoq		MACH_OMAP_WIPOQ		OMAP_WIPOQ		907 | ||||
| omap_twip		MACH_OMAP_TWIP		OMAP_TWIP		908 | ||||
| palmt650		MACH_PALMT650		PALMT650		909 | ||||
| treo650			MACH_TREO650		TREO650			909 | ||||
| acumen			MACH_ACUMEN		ACUMEN			910 | ||||
| xp100			MACH_XP100		XP100			911 | ||||
| fs2410			MACH_FS2410		FS2410			912 | ||||
| @ -1232,7 +1232,7 @@ ql202b			MACH_QL202B		QL202B			1226 | ||||
| vpac270			MACH_VPAC270		VPAC270			1227 | ||||
| rd129			MACH_RD129		RD129			1228 | ||||
| htcwizard		MACH_HTCWIZARD		HTCWIZARD		1229 | ||||
| xscale_treo680		MACH_XSCALE_TREO680	XSCALE_TREO680		1230 | ||||
| treo680			MACH_TREO680		TREO680			1230 | ||||
| tecon_tmezon		MACH_TECON_TMEZON	TECON_TMEZON		1231 | ||||
| zylonite		MACH_ZYLONITE		ZYLONITE		1233 | ||||
| gene1270		MACH_GENE1270		GENE1270		1234 | ||||
| @ -1418,10 +1418,10 @@ looxc550		MACH_LOOXC550		LOOXC550		1417 | ||||
| cnty_titan		MACH_CNTY_TITAN		CNTY_TITAN		1418 | ||||
| app3xx			MACH_APP3XX		APP3XX			1419 | ||||
| sideoatsgrama		MACH_SIDEOATSGRAMA	SIDEOATSGRAMA		1420 | ||||
| palmtreo700p		MACH_PALMTREO700P	PALMTREO700P		1421 | ||||
| palmtreo700w		MACH_PALMTREO700W	PALMTREO700W		1422 | ||||
| palmtreo750		MACH_PALMTREO750	PALMTREO750		1423 | ||||
| palmtreo755p		MACH_PALMTREO755P	PALMTREO755P		1424 | ||||
| treo700p		MACH_TREO700P		TREO700P		1421 | ||||
| treo700w		MACH_TREO700W		TREO700W		1422 | ||||
| treo750			MACH_TREO750		TREO750			1423 | ||||
| treo755p		MACH_TREO755P		TREO755P		1424 | ||||
| ezreganut9200		MACH_EZREGANUT9200	EZREGANUT9200		1425 | ||||
| sarge			MACH_SARGE		SARGE			1426 | ||||
| a696			MACH_A696		A696			1427 | ||||
| @ -1721,7 +1721,7 @@ sapphire		MACH_SAPPHIRE		SAPPHIRE		1729 | ||||
| csb637xo		MACH_CSB637XO		CSB637XO		1730 | ||||
| evisiong		MACH_EVISIONG		EVISIONG		1731 | ||||
| stmp37xx		MACH_STMP37XX		STMP37XX		1732 | ||||
| stmp378x		MACH_STMP38XX		STMP38XX		1733 | ||||
| stmp378x		MACH_STMP378X		STMP378X		1733 | ||||
| tnt			MACH_TNT		TNT			1734 | ||||
| tbxt			MACH_TBXT		TBXT			1735 | ||||
| playmate		MACH_PLAYMATE		PLAYMATE		1736 | ||||
| @ -1817,7 +1817,7 @@ smdkc100		MACH_SMDKC100		SMDKC100		1826 | ||||
| tavorevb		MACH_TAVOREVB		TAVOREVB		1827 | ||||
| saar			MACH_SAAR		SAAR			1828 | ||||
| deister_eyecam		MACH_DEISTER_EYECAM	DEISTER_EYECAM		1829 | ||||
| at91sam9m10ek		MACH_AT91SAM9M10EK	AT91SAM9M10EK		1830 | ||||
| at91sam9m10g45ek	MACH_AT91SAM9M10G45EK	AT91SAM9M10G45EK	1830 | ||||
| linkstation_produo	MACH_LINKSTATION_PRODUO	LINKSTATION_PRODUO	1831 | ||||
| hit_b0			MACH_HIT_B0		HIT_B0			1832 | ||||
| adx_rmu			MACH_ADX_RMU		ADX_RMU			1833 | ||||
| @ -2132,3 +2132,116 @@ apollo			MACH_APOLLO		APOLLO			2141 | ||||
| at91cap9stk		MACH_AT91CAP9STK	AT91CAP9STK		2142 | ||||
| spc300			MACH_SPC300		SPC300			2143 | ||||
| eko			MACH_EKO		EKO			2144 | ||||
| ccw9m2443		MACH_CCW9M2443		CCW9M2443		2145 | ||||
| ccw9m2443js		MACH_CCW9M2443JS	CCW9M2443JS		2146 | ||||
| m2m_router_device	MACH_M2M_ROUTER_DEVICE	M2M_ROUTER_DEVICE	2147 | ||||
| str9104nas		MACH_STAR9104NAS	STAR9104NAS		2148 | ||||
| pca100			MACH_PCA100		PCA100			2149 | ||||
| z3_dm365_mod_01		MACH_Z3_DM365_MOD_01	Z3_DM365_MOD_01		2150 | ||||
| hipox			MACH_HIPOX		HIPOX			2151 | ||||
| omap3_piteds		MACH_OMAP3_PITEDS	OMAP3_PITEDS		2152 | ||||
| bm150r			MACH_BM150R		BM150R			2153 | ||||
| tbone			MACH_TBONE		TBONE			2154 | ||||
| merlin			MACH_MERLIN		MERLIN			2155 | ||||
| falcon			MACH_FALCON		FALCON			2156 | ||||
| davinci_da850_evm	MACH_DAVINCI_DA850_EVM	DAVINCI_DA850_EVM	2157 | ||||
| s5p6440			MACH_S5P6440		S5P6440			2158 | ||||
| at91sam9g10ek		MACH_AT91SAM9G10EK	AT91SAM9G10EK		2159 | ||||
| omap_4430sdp		MACH_OMAP_4430SDP	OMAP_4430SDP		2160 | ||||
| lpc313x			MACH_LPC313X		LPC313X			2161 | ||||
| magx_zn5		MACH_MAGX_ZN5		MAGX_ZN5		2162 | ||||
| magx_em30		MACH_MAGX_EM30		MAGX_EM30		2163 | ||||
| magx_ve66		MACH_MAGX_VE66		MAGX_VE66		2164 | ||||
| meesc			MACH_MEESC		MEESC			2165 | ||||
| otc570			MACH_OTC570		OTC570			2166 | ||||
| bcu2412			MACH_BCU2412		BCU2412			2167 | ||||
| beacon			MACH_BEACON		BEACON			2168 | ||||
| actia_tgw		MACH_ACTIA_TGW		ACTIA_TGW		2169 | ||||
| e4430			MACH_E4430		E4430			2170 | ||||
| ql300			MACH_QL300		QL300			2171 | ||||
| btmavb101		MACH_BTMAVB101		BTMAVB101		2172 | ||||
| btmawb101		MACH_BTMAWB101		BTMAWB101		2173 | ||||
| sq201			MACH_SQ201		SQ201			2174 | ||||
| quatro45xx		MACH_QUATRO45XX		QUATRO45XX		2175 | ||||
| openpad			MACH_OPENPAD		OPENPAD			2176 | ||||
| tx25			MACH_TX25		TX25			2177 | ||||
| omap3_torpedo		MACH_OMAP3_TORPEDO	OMAP3_TORPEDO		2178 | ||||
| htcraphael_k		MACH_HTCRAPHAEL_K	HTCRAPHAEL_K		2179 | ||||
| lal43			MACH_LAL43		LAL43			2181 | ||||
| htcraphael_cdma500	MACH_HTCRAPHAEL_CDMA500	HTCRAPHAEL_CDMA500	2182 | ||||
| anw6410			MACH_ANW6410		ANW6410			2183 | ||||
| htcprophet		MACH_HTCPROPHET		HTCPROPHET		2185 | ||||
| cfa_10022		MACH_CFA_10022		CFA_10022		2186 | ||||
| imx27_visstrim_m10	MACH_IMX27_VISSTRIM_M10	IMX27_VISSTRIM_M10	2187 | ||||
| px2imx27		MACH_PX2IMX27		PX2IMX27		2188 | ||||
| stm3210e_eval		MACH_STM3210E_EVAL	STM3210E_EVAL		2189 | ||||
| dvs10			MACH_DVS10		DVS10			2190 | ||||
| portuxg20		MACH_PORTUXG20		PORTUXG20		2191 | ||||
| arm_spv			MACH_ARM_SPV		ARM_SPV			2192 | ||||
| smdkc110		MACH_SMDKC110		SMDKC110		2193 | ||||
| cabespresso		MACH_CABESPRESSO	CABESPRESSO		2194 | ||||
| hmc800			MACH_HMC800		HMC800			2195 | ||||
| sholes			MACH_SHOLES		SHOLES			2196 | ||||
| btmxc31			MACH_BTMXC31		BTMXC31			2197 | ||||
| dt501			MACH_DT501		DT501			2198 | ||||
| ktx			MACH_KTX		KTX			2199 | ||||
| omap3517evm		MACH_OMAP3517EVM	OMAP3517EVM		2200 | ||||
| netspace_v2		MACH_NETSPACE_V2	NETSPACE_V2		2201 | ||||
| netspace_max_v2		MACH_NETSPACE_MAX_V2	NETSPACE_MAX_V2		2202 | ||||
| d2net_v2		MACH_D2NET_V2		D2NET_V2		2203 | ||||
| net2big_v2		MACH_NET2BIG_V2		NET2BIG_V2		2204 | ||||
| net4big_v2		MACH_NET4BIG_V2		NET4BIG_V2		2205 | ||||
| net5big_v2		MACH_NET5BIG_V2		NET5BIG_V2		2206 | ||||
| endb2443		MACH_ENDB2443		ENDB2443		2207 | ||||
| inetspace_v2		MACH_INETSPACE_V2	INETSPACE_V2		2208 | ||||
| tros			MACH_TROS		TROS			2209 | ||||
| pelco_homer		MACH_PELCO_HOMER	PELCO_HOMER		2210 | ||||
| ofsp8			MACH_OFSP8		OFSP8			2211 | ||||
| at91sam9g45ekes		MACH_AT91SAM9G45EKES	AT91SAM9G45EKES		2212 | ||||
| guf_cupid		MACH_GUF_CUPID		GUF_CUPID		2213 | ||||
| eab1r			MACH_EAB1R		EAB1R			2214 | ||||
| desirec			MACH_DESIREC		DESIREC			2215 | ||||
| cordoba			MACH_CORDOBA		CORDOBA			2216 | ||||
| irvine			MACH_IRVINE		IRVINE			2217 | ||||
| sff772			MACH_SFF772		SFF772			2218 | ||||
| pelco_milano		MACH_PELCO_MILANO	PELCO_MILANO		2219 | ||||
| pc7302			MACH_PC7302		PC7302			2220 | ||||
| bip6000			MACH_BIP6000		BIP6000			2221 | ||||
| silvermoon		MACH_SILVERMOON		SILVERMOON		2222 | ||||
| vc0830			MACH_VC0830		VC0830			2223 | ||||
| dt430			MACH_DT430		DT430			2224 | ||||
| ji42pf			MACH_JI42PF		JI42PF			2225 | ||||
| gnet_ksm		MACH_GNET_KSM		GNET_KSM		2226 | ||||
| gnet_sgm		MACH_GNET_SGM		GNET_SGM		2227 | ||||
| gnet_sgr		MACH_GNET_SGR		GNET_SGR		2228 | ||||
| omap3_icetekevm		MACH_OMAP3_ICETEKEVM	OMAP3_ICETEKEVM		2229 | ||||
| pnp			MACH_PNP		PNP			2230 | ||||
| ctera_2bay_k		MACH_CTERA_2BAY_K	CTERA_2BAY_K		2231 | ||||
| ctera_2bay_u		MACH_CTERA_2BAY_U	CTERA_2BAY_U		2232 | ||||
| sas_c			MACH_SAS_C		SAS_C			2233 | ||||
| vma2315			MACH_VMA2315		VMA2315			2234 | ||||
| vcs			MACH_VCS		VCS			2235 | ||||
| spear600		MACH_SPEAR600		SPEAR600		2236 | ||||
| spear300		MACH_SPEAR300		SPEAR300		2237 | ||||
| spear1300		MACH_SPEAR1300		SPEAR1300		2238 | ||||
| lilly1131		MACH_LILLY1131		LILLY1131		2239 | ||||
| arvoo_ax301		MACH_ARVOO_AX301	ARVOO_AX301		2240 | ||||
| mapphone		MACH_MAPPHONE		MAPPHONE		2241 | ||||
| legend			MACH_LEGEND		LEGEND			2242 | ||||
| salsa			MACH_SALSA		SALSA			2243 | ||||
| lounge			MACH_LOUNGE		LOUNGE			2244 | ||||
| vision			MACH_VISION		VISION			2245 | ||||
| vmb20			MACH_VMB20		VMB20			2246 | ||||
| hy2410			MACH_HY2410		HY2410			2247 | ||||
| hy9315			MACH_HY9315		HY9315			2248 | ||||
| bullwinkle		MACH_BULLWINKLE		BULLWINKLE		2249 | ||||
| arm_ultimator2		MACH_ARM_ULTIMATOR2	ARM_ULTIMATOR2		2250 | ||||
| vs_v210			MACH_VS_V210		VS_V210			2252 | ||||
| vs_v212			MACH_VS_V212		VS_V212			2253 | ||||
| hmt			MACH_HMT		HMT			2254 | ||||
| suen3			MACH_SUEN3		SUEN3			2255 | ||||
| vesper			MACH_VESPER		VESPER			2256 | ||||
| str9			MACH_STR9		STR9			2257 | ||||
| omap3_wl_ff		MACH_OMAP3_WL_FF	OMAP3_WL_FF		2258 | ||||
| simcom			MACH_SIMCOM		SIMCOM			2259 | ||||
| mcwebio			MACH_MCWEBIO		MCWEBIO			2260 | ||||
|  | ||||
							
								
								
									
										1
									
								
								arch/blackfin/include/asm/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								arch/blackfin/include/asm/.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -1 +0,0 @@ | ||||
| +mach | ||||
| @ -10,7 +10,6 @@ | ||||
| 
 | ||||
| #include <asm/unaligned.h> | ||||
| 
 | ||||
| #define	flat_stack_align(sp)	/* nothing needed */ | ||||
| #define	flat_argvp_envp_on_stack()		0 | ||||
| #define	flat_old_ram_flag(flags)		(flags) | ||||
| 
 | ||||
|  | ||||
| @ -378,8 +378,10 @@ | ||||
| #define __NR_dup3		363 | ||||
| #define __NR_pipe2		364 | ||||
| #define __NR_inotify_init1	365 | ||||
| #define __NR_preadv		366 | ||||
| #define __NR_pwritev		367 | ||||
| 
 | ||||
| #define __NR_syscall		366 | ||||
| #define __NR_syscall		368 | ||||
| #define NR_syscalls		__NR_syscall | ||||
| 
 | ||||
| /* Old optional stuff no one actually uses */ | ||||
|  | ||||
							
								
								
									
										1
									
								
								arch/blackfin/kernel/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								arch/blackfin/kernel/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | ||||
| vmlinux.lds | ||||
| @ -8,9 +8,8 @@ | ||||
| 
 | ||||
| #define strncmp __inline_strncmp | ||||
| #include <asm/string.h> | ||||
| #undef strncmp | ||||
| 
 | ||||
| #include <linux/module.h> | ||||
| #undef strncmp | ||||
| 
 | ||||
| int strncmp(const char *cs, const char *ct, size_t count) | ||||
| { | ||||
|  | ||||
| @ -1581,6 +1581,8 @@ ENTRY(_sys_call_table) | ||||
| 	.long _sys_dup3
 | ||||
| 	.long _sys_pipe2
 | ||||
| 	.long _sys_inotify_init1	/* 365 */ | ||||
| 	.long _sys_preadv
 | ||||
| 	.long _sys_pwritev
 | ||||
| 
 | ||||
| 	.rept NR_syscalls-(.-_sys_call_table)/4 | ||||
| 	.long _sys_ni_syscall
 | ||||
|  | ||||
| @ -5,7 +5,6 @@ | ||||
| #ifndef __H8300_FLAT_H__ | ||||
| #define __H8300_FLAT_H__ | ||||
| 
 | ||||
| #define	flat_stack_align(sp)			/* nothing needed */ | ||||
| #define	flat_argvp_envp_on_stack()		1 | ||||
| #define	flat_old_ram_flag(flags)		1 | ||||
| #define	flat_reloc_valid(reloc, size)		((reloc) <= (size)) | ||||
|  | ||||
| @ -12,7 +12,6 @@ | ||||
| #ifndef __ASM_M32R_FLAT_H | ||||
| #define __ASM_M32R_FLAT_H | ||||
| 
 | ||||
| #define	flat_stack_align(sp)		(*sp += (*sp & 3 ? (4 - (*sp & 3)): 0)) | ||||
| #define	flat_argvp_envp_on_stack()		0 | ||||
| #define	flat_old_ram_flag(flags)		(flags) | ||||
| #define	flat_set_persistent(relval, p)		0 | ||||
|  | ||||
| @ -5,7 +5,6 @@ | ||||
| #ifndef __M68KNOMMU_FLAT_H__ | ||||
| #define __M68KNOMMU_FLAT_H__ | ||||
| 
 | ||||
| #define	flat_stack_align(sp)			/* nothing needed */ | ||||
| #define	flat_argvp_envp_on_stack()		1 | ||||
| #define	flat_old_ram_flag(flags)		(flags) | ||||
| #define	flat_reloc_valid(reloc, size)		((reloc) <= (size)) | ||||
|  | ||||
| @ -72,6 +72,7 @@ config MIPS_COBALT | ||||
| 	select IRQ_CPU | ||||
| 	select IRQ_GT641XX | ||||
| 	select PCI_GT64XXX_PCI0 | ||||
| 	select PCI | ||||
| 	select SYS_HAS_CPU_NEVADA | ||||
| 	select SYS_HAS_EARLY_PRINTK | ||||
| 	select SYS_SUPPORTS_32BIT_KERNEL | ||||
| @ -593,7 +594,7 @@ config WR_PPMC | ||||
| 	  board, which is based on GT64120 bridge chip. | ||||
| 
 | ||||
| config CAVIUM_OCTEON_SIMULATOR | ||||
| 	bool "Support for the Cavium Networks Octeon Simulator" | ||||
| 	bool "Cavium Networks Octeon Simulator" | ||||
| 	select CEVT_R4K | ||||
| 	select 64BIT_PHYS_ADDR | ||||
| 	select DMA_COHERENT | ||||
| @ -607,7 +608,7 @@ config CAVIUM_OCTEON_SIMULATOR | ||||
| 	  hardware. | ||||
| 
 | ||||
| config CAVIUM_OCTEON_REFERENCE_BOARD | ||||
| 	bool "Support for the Cavium Networks Octeon reference board" | ||||
| 	bool "Cavium Networks Octeon reference board" | ||||
| 	select CEVT_R4K | ||||
| 	select 64BIT_PHYS_ADDR | ||||
| 	select DMA_COHERENT | ||||
|  | ||||
| @ -39,8 +39,8 @@ struct cache_desc { | ||||
| #define MIPS_CACHE_PINDEX	0x00000020	/* Physically indexed cache */ | ||||
| 
 | ||||
| struct cpuinfo_mips { | ||||
| 	unsigned long		udelay_val; | ||||
| 	unsigned long		asid_cache; | ||||
| 	unsigned int		udelay_val; | ||||
| 	unsigned int		asid_cache; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Capability and feature descriptor structure for MIPS CPU | ||||
|  | ||||
| @ -11,94 +11,12 @@ | ||||
| #ifndef _ASM_DELAY_H | ||||
| #define _ASM_DELAY_H | ||||
| 
 | ||||
| #include <linux/param.h> | ||||
| #include <linux/smp.h> | ||||
| extern void __delay(unsigned int loops); | ||||
| extern void __ndelay(unsigned int ns); | ||||
| extern void __udelay(unsigned int us); | ||||
| 
 | ||||
| #include <asm/compiler.h> | ||||
| #include <asm/war.h> | ||||
| 
 | ||||
| static inline void __delay(unsigned long loops) | ||||
| { | ||||
| 	if (sizeof(long) == 4) | ||||
| 		__asm__ __volatile__ ( | ||||
| 		"	.set	noreorder				\n" | ||||
| 		"	.align	3					\n" | ||||
| 		"1:	bnez	%0, 1b					\n" | ||||
| 		"	subu	%0, 1					\n" | ||||
| 		"	.set	reorder					\n" | ||||
| 		: "=r" (loops) | ||||
| 		: "0" (loops)); | ||||
| 	else if (sizeof(long) == 8 && !DADDI_WAR) | ||||
| 		__asm__ __volatile__ ( | ||||
| 		"	.set	noreorder				\n" | ||||
| 		"	.align	3					\n" | ||||
| 		"1:	bnez	%0, 1b					\n" | ||||
| 		"	dsubu	%0, 1					\n" | ||||
| 		"	.set	reorder					\n" | ||||
| 		: "=r" (loops) | ||||
| 		: "0" (loops)); | ||||
| 	else if (sizeof(long) == 8 && DADDI_WAR) | ||||
| 		__asm__ __volatile__ ( | ||||
| 		"	.set	noreorder				\n" | ||||
| 		"	.align	3					\n" | ||||
| 		"1:	bnez	%0, 1b					\n" | ||||
| 		"	dsubu	%0, %2					\n" | ||||
| 		"	.set	reorder					\n" | ||||
| 		: "=r" (loops) | ||||
| 		: "0" (loops), "r" (1)); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * Division by multiplication: you don't have to worry about | ||||
|  * loss of precision. | ||||
|  * | ||||
|  * Use only for very small delays ( < 1 msec).  Should probably use a | ||||
|  * lookup table, really, as the multiplications take much too long with | ||||
|  * short delays.  This is a "reasonable" implementation, though (and the | ||||
|  * first constant multiplications gets optimized away if the delay is | ||||
|  * a constant) | ||||
|  */ | ||||
| 
 | ||||
| static inline void __udelay(unsigned long usecs, unsigned long lpj) | ||||
| { | ||||
| 	unsigned long hi, lo; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * The rates of 128 is rounded wrongly by the catchall case | ||||
| 	 * for 64-bit.  Excessive precission?  Probably ... | ||||
| 	 */ | ||||
| #if defined(CONFIG_64BIT) && (HZ == 128) | ||||
| 	usecs *= 0x0008637bd05af6c7UL;		/* 2**64 / (1000000 / HZ) */ | ||||
| #elif defined(CONFIG_64BIT) | ||||
| 	usecs *= (0x8000000000000000UL / (500000 / HZ)); | ||||
| #else /* 32-bit junk follows here */ | ||||
| 	usecs *= (unsigned long) (((0x8000000000000000ULL / (500000 / HZ)) + | ||||
| 	                           0x80000000ULL) >> 32); | ||||
| #endif | ||||
| 
 | ||||
| 	if (sizeof(long) == 4) | ||||
| 		__asm__("multu\t%2, %3" | ||||
| 		: "=h" (usecs), "=l" (lo) | ||||
| 		: "r" (usecs), "r" (lpj) | ||||
| 		: GCC_REG_ACCUM); | ||||
| 	else if (sizeof(long) == 8 && !R4000_WAR) | ||||
| 		__asm__("dmultu\t%2, %3" | ||||
| 		: "=h" (usecs), "=l" (lo) | ||||
| 		: "r" (usecs), "r" (lpj) | ||||
| 		: GCC_REG_ACCUM); | ||||
| 	else if (sizeof(long) == 8 && R4000_WAR) | ||||
| 		__asm__("dmultu\t%3, %4\n\tmfhi\t%0" | ||||
| 		: "=r" (usecs), "=h" (hi), "=l" (lo) | ||||
| 		: "r" (usecs), "r" (lpj) | ||||
| 		: GCC_REG_ACCUM); | ||||
| 
 | ||||
| 	__delay(usecs); | ||||
| } | ||||
| 
 | ||||
| #define __udelay_val cpu_data[raw_smp_processor_id()].udelay_val | ||||
| 
 | ||||
| #define udelay(usecs) __udelay((usecs), __udelay_val) | ||||
| #define ndelay(ns) __udelay(ns) | ||||
| #define udelay(us) __udelay(us) | ||||
| 
 | ||||
| /* make sure "usecs *= ..." in udelay do not overflow. */ | ||||
| #if HZ >= 1000 | ||||
|  | ||||
| @ -60,12 +60,16 @@ | ||||
| 	 ((nr)   << _IOC_NRSHIFT) | \ | ||||
| 	 ((size) << _IOC_SIZESHIFT)) | ||||
| 
 | ||||
| #ifdef __KERNEL__ | ||||
| /* provoke compile error for invalid uses of size argument */ | ||||
| extern unsigned int __invalid_size_argument_for_IOC; | ||||
| #define _IOC_TYPECHECK(t) \ | ||||
| 	((sizeof(t) == sizeof(t[1]) && \ | ||||
| 	  sizeof(t) < (1 << _IOC_SIZEBITS)) ? \ | ||||
| 	  sizeof(t) : __invalid_size_argument_for_IOC) | ||||
| #else | ||||
| #define _IOC_TYPECHECK(t)	(sizeof(t)) | ||||
| #endif | ||||
| 
 | ||||
| /* used to create numbers */ | ||||
| #define _IO(type, nr)		_IOC(_IOC_NONE, (type), (nr), 0) | ||||
|  | ||||
| @ -956,7 +956,7 @@ __clear_user(void __user *addr, __kernel_size_t size) | ||||
| 	void __user * __cl_addr = (addr);				\ | ||||
| 	unsigned long __cl_size = (n);					\ | ||||
| 	if (__cl_size && access_ok(VERIFY_WRITE,			\ | ||||
| 		((unsigned long)(__cl_addr)), __cl_size))		\ | ||||
| 					__cl_addr, __cl_size))		\ | ||||
| 		__cl_size = __clear_user(__cl_addr, __cl_size);		\ | ||||
| 	__cl_size;							\ | ||||
| }) | ||||
|  | ||||
| @ -42,7 +42,7 @@ static int show_cpuinfo(struct seq_file *m, void *v) | ||||
| 	seq_printf(m, fmt, __cpu_name[n], | ||||
| 	                           (version >> 4) & 0x0f, version & 0x0f, | ||||
| 	                           (fp_vers >> 4) & 0x0f, fp_vers & 0x0f); | ||||
| 	seq_printf(m, "BogoMIPS\t\t: %lu.%02lu\n", | ||||
| 	seq_printf(m, "BogoMIPS\t\t: %u.%02u\n", | ||||
| 	              cpu_data[n].udelay_val / (500000/HZ), | ||||
| 	              (cpu_data[n].udelay_val / (5000/HZ)) % 100); | ||||
| 	seq_printf(m, "wait instruction\t: %s\n", cpu_wait ? "yes" : "no"); | ||||
|  | ||||
| @ -2,8 +2,8 @@ | ||||
| # Makefile for MIPS-specific library files..
 | ||||
| #
 | ||||
| 
 | ||||
| lib-y	+= csum_partial.o memcpy.o memcpy-inatomic.o memset.o strlen_user.o \
 | ||||
| 	   strncpy_user.o strnlen_user.o uncached.o | ||||
| lib-y	+= csum_partial.o delay.o memcpy.o memcpy-inatomic.o memset.o \
 | ||||
| 	   strlen_user.o strncpy_user.o strnlen_user.o uncached.o | ||||
| 
 | ||||
| obj-y			+= iomap.o | ||||
| obj-$(CONFIG_PCI)	+= iomap-pci.o | ||||
|  | ||||
							
								
								
									
										56
									
								
								arch/mips/lib/delay.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								arch/mips/lib/delay.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,56 @@ | ||||
| /*
 | ||||
|  * This file is subject to the terms and conditions of the GNU General Public | ||||
|  * License.  See the file "COPYING" in the main directory of this archive | ||||
|  * for more details. | ||||
|  * | ||||
|  * Copyright (C) 1994 by Waldorf Electronics | ||||
|  * Copyright (C) 1995 - 2000, 01, 03 by Ralf Baechle | ||||
|  * Copyright (C) 1999, 2000 Silicon Graphics, Inc. | ||||
|  * Copyright (C) 2007  Maciej W. Rozycki | ||||
|  */ | ||||
| #include <linux/module.h> | ||||
| #include <linux/param.h> | ||||
| #include <linux/smp.h> | ||||
| 
 | ||||
| #include <asm/compiler.h> | ||||
| #include <asm/war.h> | ||||
| 
 | ||||
| inline void __delay(unsigned int loops) | ||||
| { | ||||
| 	__asm__ __volatile__ ( | ||||
| 	"	.set	noreorder				\n" | ||||
| 	"	.align	3					\n" | ||||
| 	"1:	bnez	%0, 1b					\n" | ||||
| 	"	subu	%0, 1					\n" | ||||
| 	"	.set	reorder					\n" | ||||
| 	: "=r" (loops) | ||||
| 	: "0" (loops)); | ||||
| } | ||||
| EXPORT_SYMBOL(__delay); | ||||
| 
 | ||||
| /*
 | ||||
|  * Division by multiplication: you don't have to worry about | ||||
|  * loss of precision. | ||||
|  * | ||||
|  * Use only for very small delays ( < 1 msec).  Should probably use a | ||||
|  * lookup table, really, as the multiplications take much too long with | ||||
|  * short delays.  This is a "reasonable" implementation, though (and the | ||||
|  * first constant multiplications gets optimized away if the delay is | ||||
|  * a constant) | ||||
|  */ | ||||
| 
 | ||||
| void __udelay(unsigned long us) | ||||
| { | ||||
| 	unsigned int lpj = current_cpu_data.udelay_val; | ||||
| 
 | ||||
| 	__delay((us * 0x000010c7 * HZ * lpj) >> 32); | ||||
| } | ||||
| EXPORT_SYMBOL(__udelay); | ||||
| 
 | ||||
| void __ndelay(unsigned long ns) | ||||
| { | ||||
| 	unsigned int lpj = current_cpu_data.udelay_val; | ||||
| 
 | ||||
| 	__delay((us * 0x00000005 * HZ * lpj) >> 32); | ||||
| } | ||||
| EXPORT_SYMBOL(__ndelay); | ||||
| @ -53,7 +53,7 @@ static inline void ip32_machine_halt(void) | ||||
| 
 | ||||
| static void ip32_machine_power_off(void) | ||||
| { | ||||
| 	volatile unsigned char reg_a, xctrl_a, xctrl_b; | ||||
| 	unsigned char reg_a, xctrl_a, xctrl_b; | ||||
| 
 | ||||
| 	disable_irq(MACEISA_RTC_IRQ); | ||||
| 	reg_a = CMOS_READ(RTC_REG_A); | ||||
| @ -91,9 +91,10 @@ static void blink_timeout(unsigned long data) | ||||
| 
 | ||||
| static void debounce(unsigned long data) | ||||
| { | ||||
| 	volatile unsigned char reg_a, reg_c, xctrl_a; | ||||
| 	unsigned char reg_a, reg_c, xctrl_a; | ||||
| 
 | ||||
| 	reg_c = CMOS_READ(RTC_INTR_FLAGS); | ||||
| 	reg_a = CMOS_READ(RTC_REG_A); | ||||
| 	CMOS_WRITE(reg_a | DS_REGA_DV0, RTC_REG_A); | ||||
| 	wbflush(); | ||||
| 	xctrl_a = CMOS_READ(DS_B1_XCTRL4A); | ||||
| @ -137,7 +138,7 @@ static inline void ip32_power_button(void) | ||||
| 
 | ||||
| static irqreturn_t ip32_rtc_int(int irq, void *dev_id) | ||||
| { | ||||
| 	volatile unsigned char reg_c; | ||||
| 	unsigned char reg_c; | ||||
| 
 | ||||
| 	reg_c = CMOS_READ(RTC_INTR_FLAGS); | ||||
| 	if (!(reg_c & RTC_IRQF)) { | ||||
|  | ||||
| @ -288,13 +288,7 @@ void __init prom_init(void) | ||||
| 	 */ | ||||
| 	cfe_cons_handle = cfe_getstdhandle(CFE_STDHANDLE_CONSOLE); | ||||
| 	if (cfe_getenv("LINUX_CMDLINE", arcs_cmdline, CL_SIZE) < 0) { | ||||
| 		if (argc < 0) { | ||||
| 			/*
 | ||||
| 			 * It's OK for direct boot to not provide a | ||||
| 			 *  command line | ||||
| 			 */ | ||||
| 			strcpy(arcs_cmdline, "root=/dev/ram0 "); | ||||
| 		} else { | ||||
| 		if (argc >= 0) { | ||||
| 			/* The loader should have set the command line */ | ||||
| 			/* too early for panic to do any good */ | ||||
| 			printk("LINUX_CMDLINE not defined in cfe."); | ||||
|  | ||||
| @ -868,6 +868,18 @@ config TASK_SIZE | ||||
| 	default "0x80000000" if PPC_PREP || PPC_8xx | ||||
| 	default "0xc0000000" | ||||
| 
 | ||||
| config CONSISTENT_SIZE_BOOL | ||||
| 	bool "Set custom consistent memory pool size" | ||||
| 	depends on ADVANCED_OPTIONS && NOT_COHERENT_CACHE | ||||
| 	help | ||||
| 	  This option allows you to set the size of the | ||||
| 	  consistent memory pool.  This pool of virtual memory | ||||
| 	  is used to make consistent memory allocations. | ||||
| 
 | ||||
| config CONSISTENT_SIZE | ||||
| 	hex "Size of consistent memory pool" if CONSISTENT_SIZE_BOOL | ||||
| 	default "0x00200000" if NOT_COHERENT_CACHE | ||||
| 
 | ||||
| config PIN_TLB | ||||
| 	bool "Pinned Kernel TLBs (860 ONLY)" | ||||
| 	depends on ADVANCED_OPTIONS && 8xx | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| # | ||||
| # Automatically generated make config: don't edit | ||||
| # Linux kernel version: 2.6.28-rc3 | ||||
| # Tue Nov 11 19:36:51 2008 | ||||
| # Linux kernel version: 2.6.30-rc7 | ||||
| # Mon May 25 14:53:25 2009 | ||||
| # | ||||
| # CONFIG_PPC64 is not set | ||||
| 
 | ||||
| @ -14,6 +14,7 @@ CONFIG_6xx=y | ||||
| # CONFIG_40x is not set | ||||
| # CONFIG_44x is not set | ||||
| # CONFIG_E200 is not set | ||||
| CONFIG_PPC_BOOK3S=y | ||||
| CONFIG_PPC_FPU=y | ||||
| CONFIG_ALTIVEC=y | ||||
| CONFIG_PPC_STD_MMU=y | ||||
| @ -43,7 +44,7 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y | ||||
| CONFIG_PPC=y | ||||
| CONFIG_EARLY_PRINTK=y | ||||
| CONFIG_GENERIC_NVRAM=y | ||||
| CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | ||||
| CONFIG_SCHED_OMIT_FRAME_POINTER=y | ||||
| CONFIG_ARCH_MAY_HAVE_PC_FDC=y | ||||
| CONFIG_PPC_OF=y | ||||
| CONFIG_OF=y | ||||
| @ -52,12 +53,14 @@ CONFIG_OF=y | ||||
| CONFIG_AUDIT_ARCH=y | ||||
| CONFIG_GENERIC_BUG=y | ||||
| CONFIG_SYS_SUPPORTS_APM_EMULATION=y | ||||
| CONFIG_DTC=y | ||||
| # CONFIG_DEFAULT_UIMAGE is not set | ||||
| CONFIG_HIBERNATE_32=y | ||||
| CONFIG_ARCH_HIBERNATION_POSSIBLE=y | ||||
| CONFIG_ARCH_SUSPEND_POSSIBLE=y | ||||
| # CONFIG_PPC_DCR_NATIVE is not set | ||||
| # CONFIG_PPC_DCR_MMIO is not set | ||||
| CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y | ||||
| CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||||
| 
 | ||||
| # | ||||
| @ -72,14 +75,24 @@ CONFIG_SWAP=y | ||||
| CONFIG_SYSVIPC=y | ||||
| CONFIG_SYSVIPC_SYSCTL=y | ||||
| CONFIG_POSIX_MQUEUE=y | ||||
| CONFIG_POSIX_MQUEUE_SYSCTL=y | ||||
| # CONFIG_BSD_PROCESS_ACCT is not set | ||||
| # CONFIG_TASKSTATS is not set | ||||
| # CONFIG_AUDIT is not set | ||||
| 
 | ||||
| # | ||||
| # RCU Subsystem | ||||
| # | ||||
| CONFIG_CLASSIC_RCU=y | ||||
| # CONFIG_TREE_RCU is not set | ||||
| # CONFIG_PREEMPT_RCU is not set | ||||
| # CONFIG_TREE_RCU_TRACE is not set | ||||
| # CONFIG_PREEMPT_RCU_TRACE is not set | ||||
| CONFIG_IKCONFIG=y | ||||
| CONFIG_IKCONFIG_PROC=y | ||||
| CONFIG_LOG_BUF_SHIFT=14 | ||||
| # CONFIG_CGROUPS is not set | ||||
| # CONFIG_GROUP_SCHED is not set | ||||
| # CONFIG_CGROUPS is not set | ||||
| CONFIG_SYSFS_DEPRECATED=y | ||||
| CONFIG_SYSFS_DEPRECATED_V2=y | ||||
| # CONFIG_RELAY is not set | ||||
| @ -88,23 +101,27 @@ CONFIG_NAMESPACES=y | ||||
| # CONFIG_IPC_NS is not set | ||||
| # CONFIG_USER_NS is not set | ||||
| # CONFIG_PID_NS is not set | ||||
| # CONFIG_NET_NS is not set | ||||
| CONFIG_BLK_DEV_INITRD=y | ||||
| CONFIG_INITRAMFS_SOURCE="" | ||||
| CONFIG_RD_GZIP=y | ||||
| CONFIG_RD_BZIP2=y | ||||
| CONFIG_RD_LZMA=y | ||||
| # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||||
| CONFIG_SYSCTL=y | ||||
| CONFIG_ANON_INODES=y | ||||
| # CONFIG_EMBEDDED is not set | ||||
| CONFIG_SYSCTL_SYSCALL=y | ||||
| CONFIG_KALLSYMS=y | ||||
| CONFIG_KALLSYMS_ALL=y | ||||
| # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||||
| # CONFIG_STRIP_ASM_SYMS is not set | ||||
| CONFIG_HOTPLUG=y | ||||
| CONFIG_PRINTK=y | ||||
| CONFIG_BUG=y | ||||
| CONFIG_ELF_CORE=y | ||||
| # CONFIG_COMPAT_BRK is not set | ||||
| CONFIG_BASE_FULL=y | ||||
| CONFIG_FUTEX=y | ||||
| CONFIG_ANON_INODES=y | ||||
| CONFIG_EPOLL=y | ||||
| CONFIG_SIGNALFD=y | ||||
| CONFIG_TIMERFD=y | ||||
| @ -114,10 +131,12 @@ CONFIG_AIO=y | ||||
| CONFIG_VM_EVENT_COUNTERS=y | ||||
| CONFIG_PCI_QUIRKS=y | ||||
| CONFIG_SLUB_DEBUG=y | ||||
| # CONFIG_COMPAT_BRK is not set | ||||
| # CONFIG_SLAB is not set | ||||
| CONFIG_SLUB=y | ||||
| # CONFIG_SLOB is not set | ||||
| CONFIG_PROFILING=y | ||||
| CONFIG_TRACEPOINTS=y | ||||
| # CONFIG_MARKERS is not set | ||||
| CONFIG_OPROFILE=y | ||||
| CONFIG_HAVE_OPROFILE=y | ||||
| @ -127,10 +146,10 @@ CONFIG_HAVE_IOREMAP_PROT=y | ||||
| CONFIG_HAVE_KPROBES=y | ||||
| CONFIG_HAVE_KRETPROBES=y | ||||
| CONFIG_HAVE_ARCH_TRACEHOOK=y | ||||
| # CONFIG_SLOW_WORK is not set | ||||
| # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | ||||
| CONFIG_SLABINFO=y | ||||
| CONFIG_RT_MUTEXES=y | ||||
| # CONFIG_TINY_SHMEM is not set | ||||
| CONFIG_BASE_SMALL=0 | ||||
| CONFIG_MODULES=y | ||||
| # CONFIG_MODULE_FORCE_LOAD is not set | ||||
| @ -138,11 +157,8 @@ CONFIG_MODULE_UNLOAD=y | ||||
| CONFIG_MODULE_FORCE_UNLOAD=y | ||||
| # CONFIG_MODVERSIONS is not set | ||||
| # CONFIG_MODULE_SRCVERSION_ALL is not set | ||||
| CONFIG_KMOD=y | ||||
| CONFIG_BLOCK=y | ||||
| CONFIG_LBD=y | ||||
| # CONFIG_BLK_DEV_IO_TRACE is not set | ||||
| CONFIG_LSF=y | ||||
| CONFIG_BLK_DEV_BSG=y | ||||
| # CONFIG_BLK_DEV_INTEGRITY is not set | ||||
| 
 | ||||
| @ -158,14 +174,11 @@ CONFIG_DEFAULT_AS=y | ||||
| # CONFIG_DEFAULT_CFQ is not set | ||||
| # CONFIG_DEFAULT_NOOP is not set | ||||
| CONFIG_DEFAULT_IOSCHED="anticipatory" | ||||
| CONFIG_CLASSIC_RCU=y | ||||
| CONFIG_FREEZER=y | ||||
| 
 | ||||
| # | ||||
| # Platform support | ||||
| # | ||||
| CONFIG_PPC_MULTIPLATFORM=y | ||||
| CONFIG_CLASSIC32=y | ||||
| # CONFIG_PPC_CHRP is not set | ||||
| # CONFIG_MPC5121_ADS is not set | ||||
| # CONFIG_MPC5121_GENERIC is not set | ||||
| @ -178,7 +191,9 @@ CONFIG_PPC_PMAC=y | ||||
| # CONFIG_PPC_83xx is not set | ||||
| # CONFIG_PPC_86xx is not set | ||||
| # CONFIG_EMBEDDED6xx is not set | ||||
| # CONFIG_AMIGAONE is not set | ||||
| CONFIG_PPC_NATIVE=y | ||||
| CONFIG_PPC_OF_BOOT_TRAMPOLINE=y | ||||
| # CONFIG_IPIC is not set | ||||
| CONFIG_MPIC=y | ||||
| # CONFIG_MPIC_WEIRD is not set | ||||
| @ -212,11 +227,12 @@ CONFIG_CPU_FREQ_PMAC=y | ||||
| CONFIG_PPC601_SYNC_FIX=y | ||||
| # CONFIG_TAU is not set | ||||
| # CONFIG_FSL_ULI1575 is not set | ||||
| # CONFIG_SIMPLE_GPIO is not set | ||||
| 
 | ||||
| # | ||||
| # Kernel options | ||||
| # | ||||
| # CONFIG_HIGHMEM is not set | ||||
| CONFIG_HIGHMEM=y | ||||
| CONFIG_TICK_ONESHOT=y | ||||
| CONFIG_NO_HZ=y | ||||
| CONFIG_HIGH_RES_TIMERS=y | ||||
| @ -239,6 +255,7 @@ CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y | ||||
| CONFIG_ARCH_HAS_WALK_MEMORY=y | ||||
| CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y | ||||
| # CONFIG_KEXEC is not set | ||||
| # CONFIG_CRASH_DUMP is not set | ||||
| CONFIG_ARCH_FLATMEM_ENABLE=y | ||||
| CONFIG_ARCH_POPULATES_NODE_MAP=y | ||||
| CONFIG_SELECT_MEMORY_MODEL=y | ||||
| @ -250,12 +267,17 @@ CONFIG_FLAT_NODE_MEM_MAP=y | ||||
| CONFIG_PAGEFLAGS_EXTENDED=y | ||||
| CONFIG_SPLIT_PTLOCK_CPUS=4 | ||||
| # CONFIG_MIGRATION is not set | ||||
| # CONFIG_RESOURCES_64BIT is not set | ||||
| # CONFIG_PHYS_ADDR_T_64BIT is not set | ||||
| CONFIG_ZONE_DMA_FLAG=1 | ||||
| CONFIG_BOUNCE=y | ||||
| CONFIG_VIRT_TO_BUS=y | ||||
| CONFIG_UNEVICTABLE_LRU=y | ||||
| CONFIG_HAVE_MLOCK=y | ||||
| CONFIG_HAVE_MLOCKED_PAGE_BIT=y | ||||
| CONFIG_PPC_4K_PAGES=y | ||||
| # CONFIG_PPC_16K_PAGES is not set | ||||
| # CONFIG_PPC_64K_PAGES is not set | ||||
| # CONFIG_PPC_256K_PAGES is not set | ||||
| CONFIG_FORCE_MAX_ZONEORDER=11 | ||||
| CONFIG_PROC_DEVICETREE=y | ||||
| # CONFIG_CMDLINE_BOOL is not set | ||||
| @ -288,6 +310,8 @@ CONFIG_ARCH_SUPPORTS_MSI=y | ||||
| # CONFIG_PCI_MSI is not set | ||||
| # CONFIG_PCI_LEGACY is not set | ||||
| # CONFIG_PCI_DEBUG is not set | ||||
| # CONFIG_PCI_STUB is not set | ||||
| # CONFIG_PCI_IOV is not set | ||||
| CONFIG_PCCARD=m | ||||
| # CONFIG_PCMCIA_DEBUG is not set | ||||
| CONFIG_PCMCIA=m | ||||
| @ -397,6 +421,8 @@ CONFIG_NETFILTER_XTABLES=m | ||||
| CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | ||||
| # CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set | ||||
| # CONFIG_NETFILTER_XT_TARGET_DSCP is not set | ||||
| CONFIG_NETFILTER_XT_TARGET_HL=m | ||||
| # CONFIG_NETFILTER_XT_TARGET_LED is not set | ||||
| CONFIG_NETFILTER_XT_TARGET_MARK=m | ||||
| CONFIG_NETFILTER_XT_TARGET_NFLOG=m | ||||
| CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | ||||
| @ -405,6 +431,7 @@ CONFIG_NETFILTER_XT_TARGET_RATEEST=m | ||||
| CONFIG_NETFILTER_XT_TARGET_TRACE=m | ||||
| CONFIG_NETFILTER_XT_TARGET_TCPMSS=m | ||||
| CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m | ||||
| # CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set | ||||
| CONFIG_NETFILTER_XT_MATCH_COMMENT=m | ||||
| # CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set | ||||
| CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m | ||||
| @ -415,6 +442,7 @@ CONFIG_NETFILTER_XT_MATCH_DSCP=m | ||||
| CONFIG_NETFILTER_XT_MATCH_ESP=m | ||||
| # CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set | ||||
| CONFIG_NETFILTER_XT_MATCH_HELPER=m | ||||
| CONFIG_NETFILTER_XT_MATCH_HL=m | ||||
| CONFIG_NETFILTER_XT_MATCH_IPRANGE=m | ||||
| CONFIG_NETFILTER_XT_MATCH_LENGTH=m | ||||
| CONFIG_NETFILTER_XT_MATCH_LIMIT=m | ||||
| @ -478,17 +506,15 @@ CONFIG_IP_NF_ARPFILTER=m | ||||
| CONFIG_IP_NF_ARP_MANGLE=m | ||||
| CONFIG_IP_DCCP=m | ||||
| CONFIG_INET_DCCP_DIAG=m | ||||
| CONFIG_IP_DCCP_ACKVEC=y | ||||
| 
 | ||||
| # | ||||
| # DCCP CCIDs Configuration (EXPERIMENTAL) | ||||
| # | ||||
| CONFIG_IP_DCCP_CCID2=m | ||||
| # CONFIG_IP_DCCP_CCID2_DEBUG is not set | ||||
| CONFIG_IP_DCCP_CCID3=m | ||||
| CONFIG_IP_DCCP_CCID3=y | ||||
| # CONFIG_IP_DCCP_CCID3_DEBUG is not set | ||||
| CONFIG_IP_DCCP_CCID3_RTO=100 | ||||
| CONFIG_IP_DCCP_TFRC_LIB=m | ||||
| CONFIG_IP_DCCP_TFRC_LIB=y | ||||
| 
 | ||||
| # | ||||
| # DCCP Kernel Hacking | ||||
| @ -508,13 +534,16 @@ CONFIG_IP_DCCP_TFRC_LIB=m | ||||
| # CONFIG_LAPB is not set | ||||
| # CONFIG_ECONET is not set | ||||
| # CONFIG_WAN_ROUTER is not set | ||||
| # CONFIG_PHONET is not set | ||||
| # CONFIG_NET_SCHED is not set | ||||
| CONFIG_NET_CLS_ROUTE=y | ||||
| # CONFIG_DCB is not set | ||||
| 
 | ||||
| # | ||||
| # Network testing | ||||
| # | ||||
| # CONFIG_NET_PKTGEN is not set | ||||
| # CONFIG_NET_DROP_MONITOR is not set | ||||
| # CONFIG_HAMRADIO is not set | ||||
| # CONFIG_CAN is not set | ||||
| CONFIG_IRDA=m | ||||
| @ -577,8 +606,6 @@ CONFIG_BT_HIDP=m | ||||
| # | ||||
| # Bluetooth device drivers | ||||
| # | ||||
| CONFIG_BT_HCIUSB=m | ||||
| # CONFIG_BT_HCIUSB_SCO is not set | ||||
| # CONFIG_BT_HCIBTUSB is not set | ||||
| # CONFIG_BT_HCIUART is not set | ||||
| CONFIG_BT_HCIBCM203X=m | ||||
| @ -590,31 +617,27 @@ CONFIG_BT_HCIBFUSB=m | ||||
| # CONFIG_BT_HCIBTUART is not set | ||||
| # CONFIG_BT_HCIVHCI is not set | ||||
| # CONFIG_AF_RXRPC is not set | ||||
| # CONFIG_PHONET is not set | ||||
| CONFIG_WIRELESS=y | ||||
| CONFIG_CFG80211=m | ||||
| CONFIG_NL80211=y | ||||
| # CONFIG_CFG80211_REG_DEBUG is not set | ||||
| CONFIG_WIRELESS_OLD_REGULATORY=y | ||||
| CONFIG_WIRELESS_EXT=y | ||||
| CONFIG_WIRELESS_EXT_SYSFS=y | ||||
| # CONFIG_LIB80211 is not set | ||||
| CONFIG_MAC80211=m | ||||
| 
 | ||||
| # | ||||
| # Rate control algorithm selection | ||||
| # | ||||
| CONFIG_MAC80211_RC_PID=y | ||||
| # CONFIG_MAC80211_RC_MINSTREL is not set | ||||
| CONFIG_MAC80211_RC_DEFAULT_PID=y | ||||
| # CONFIG_MAC80211_RC_DEFAULT_MINSTREL is not set | ||||
| CONFIG_MAC80211_RC_DEFAULT="pid" | ||||
| CONFIG_MAC80211_RC_MINSTREL=y | ||||
| # CONFIG_MAC80211_RC_DEFAULT_PID is not set | ||||
| CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y | ||||
| CONFIG_MAC80211_RC_DEFAULT="minstrel" | ||||
| # CONFIG_MAC80211_MESH is not set | ||||
| CONFIG_MAC80211_LEDS=y | ||||
| # CONFIG_MAC80211_DEBUGFS is not set | ||||
| # CONFIG_MAC80211_DEBUG_MENU is not set | ||||
| CONFIG_IEEE80211=m | ||||
| # CONFIG_IEEE80211_DEBUG is not set | ||||
| CONFIG_IEEE80211_CRYPT_WEP=m | ||||
| CONFIG_IEEE80211_CRYPT_CCMP=m | ||||
| CONFIG_IEEE80211_CRYPT_TKIP=m | ||||
| # CONFIG_WIMAX is not set | ||||
| # CONFIG_RFKILL is not set | ||||
| # CONFIG_NET_9P is not set | ||||
| 
 | ||||
| @ -662,17 +685,27 @@ CONFIG_BLK_DEV_RAM_SIZE=4096 | ||||
| # CONFIG_BLK_DEV_HD is not set | ||||
| CONFIG_MISC_DEVICES=y | ||||
| # CONFIG_PHANTOM is not set | ||||
| # CONFIG_EEPROM_93CX6 is not set | ||||
| # CONFIG_SGI_IOC4 is not set | ||||
| # CONFIG_TIFM_CORE is not set | ||||
| # CONFIG_ICS932S401 is not set | ||||
| # CONFIG_ENCLOSURE_SERVICES is not set | ||||
| # CONFIG_HP_ILO is not set | ||||
| # CONFIG_ISL29003 is not set | ||||
| # CONFIG_C2PORT is not set | ||||
| 
 | ||||
| # | ||||
| # EEPROM support | ||||
| # | ||||
| # CONFIG_EEPROM_AT24 is not set | ||||
| # CONFIG_EEPROM_LEGACY is not set | ||||
| # CONFIG_EEPROM_93CX6 is not set | ||||
| CONFIG_HAVE_IDE=y | ||||
| CONFIG_IDE=y | ||||
| 
 | ||||
| # | ||||
| # Please see Documentation/ide/ide.txt for help/info on IDE drives | ||||
| # | ||||
| CONFIG_IDE_XFER_MODE=y | ||||
| CONFIG_IDE_TIMINGS=y | ||||
| CONFIG_IDE_ATAPI=y | ||||
| # CONFIG_BLK_DEV_IDE_SATA is not set | ||||
| @ -684,7 +717,6 @@ CONFIG_BLK_DEV_IDECS=m | ||||
| CONFIG_BLK_DEV_IDECD=y | ||||
| CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y | ||||
| # CONFIG_BLK_DEV_IDETAPE is not set | ||||
| CONFIG_BLK_DEV_IDESCSI=y | ||||
| # CONFIG_IDE_TASK_IOCTL is not set | ||||
| CONFIG_IDE_PROC_FS=y | ||||
| 
 | ||||
| @ -714,6 +746,7 @@ CONFIG_BLK_DEV_IDEDMA_PCI=y | ||||
| # CONFIG_BLK_DEV_JMICRON is not set | ||||
| # CONFIG_BLK_DEV_SC1200 is not set | ||||
| # CONFIG_BLK_DEV_PIIX is not set | ||||
| # CONFIG_BLK_DEV_IT8172 is not set | ||||
| # CONFIG_BLK_DEV_IT8213 is not set | ||||
| # CONFIG_BLK_DEV_IT821X is not set | ||||
| # CONFIG_BLK_DEV_NS87415 is not set | ||||
| @ -728,7 +761,6 @@ CONFIG_BLK_DEV_SL82C105=y | ||||
| # CONFIG_BLK_DEV_TC86C001 is not set | ||||
| CONFIG_BLK_DEV_IDE_PMAC=y | ||||
| CONFIG_BLK_DEV_IDE_PMAC_ATA100FIRST=y | ||||
| CONFIG_BLK_DEV_IDEDMA_PMAC=y | ||||
| CONFIG_BLK_DEV_IDEDMA=y | ||||
| 
 | ||||
| # | ||||
| @ -772,6 +804,7 @@ CONFIG_SCSI_FC_ATTRS=y | ||||
| # CONFIG_SCSI_SRP_ATTRS is not set | ||||
| CONFIG_SCSI_LOWLEVEL=y | ||||
| # CONFIG_ISCSI_TCP is not set | ||||
| # CONFIG_SCSI_CXGB3_ISCSI is not set | ||||
| # CONFIG_BLK_DEV_3W_XXXX_RAID is not set | ||||
| # CONFIG_SCSI_3W_9XXX is not set | ||||
| # CONFIG_SCSI_ACARD is not set | ||||
| @ -791,8 +824,12 @@ CONFIG_SCSI_AIC7XXX_OLD=m | ||||
| # CONFIG_MEGARAID_NEWGEN is not set | ||||
| # CONFIG_MEGARAID_LEGACY is not set | ||||
| # CONFIG_MEGARAID_SAS is not set | ||||
| # CONFIG_SCSI_MPT2SAS is not set | ||||
| # CONFIG_SCSI_HPTIOP is not set | ||||
| # CONFIG_SCSI_BUSLOGIC is not set | ||||
| # CONFIG_LIBFC is not set | ||||
| # CONFIG_LIBFCOE is not set | ||||
| # CONFIG_FCOE is not set | ||||
| # CONFIG_SCSI_DMX3191D is not set | ||||
| # CONFIG_SCSI_EATA is not set | ||||
| # CONFIG_SCSI_FUTURE_DOMAIN is not set | ||||
| @ -822,6 +859,7 @@ CONFIG_SCSI_MAC53C94=y | ||||
| # CONFIG_SCSI_SRP is not set | ||||
| # CONFIG_SCSI_LOWLEVEL_PCMCIA is not set | ||||
| # CONFIG_SCSI_DH is not set | ||||
| # CONFIG_SCSI_OSD_INITIATOR is not set | ||||
| # CONFIG_ATA is not set | ||||
| CONFIG_MD=y | ||||
| CONFIG_BLK_DEV_MD=m | ||||
| @ -881,6 +919,7 @@ CONFIG_THERM_ADT746X=m | ||||
| # CONFIG_ANSLCD is not set | ||||
| CONFIG_PMAC_RACKMETER=m | ||||
| CONFIG_NETDEVICES=y | ||||
| CONFIG_COMPAT_NET_DEV_OPS=y | ||||
| CONFIG_DUMMY=m | ||||
| # CONFIG_BONDING is not set | ||||
| # CONFIG_MACVLAN is not set | ||||
| @ -898,6 +937,8 @@ CONFIG_BMAC=y | ||||
| CONFIG_SUNGEM=y | ||||
| # CONFIG_CASSINI is not set | ||||
| # CONFIG_NET_VENDOR_3COM is not set | ||||
| # CONFIG_ETHOC is not set | ||||
| # CONFIG_DNET is not set | ||||
| # CONFIG_NET_TULIP is not set | ||||
| # CONFIG_HP100 is not set | ||||
| # CONFIG_IBM_NEW_EMAC_ZMII is not set | ||||
| @ -913,7 +954,6 @@ CONFIG_PCNET32=y | ||||
| # CONFIG_ADAPTEC_STARFIRE is not set | ||||
| # CONFIG_B44 is not set | ||||
| # CONFIG_FORCEDETH is not set | ||||
| # CONFIG_EEPRO100 is not set | ||||
| # CONFIG_E100 is not set | ||||
| # CONFIG_FEALNX is not set | ||||
| # CONFIG_NATSEMI is not set | ||||
| @ -923,6 +963,7 @@ CONFIG_PCNET32=y | ||||
| # CONFIG_R6040 is not set | ||||
| # CONFIG_SIS900 is not set | ||||
| # CONFIG_EPIC100 is not set | ||||
| # CONFIG_SMSC9420 is not set | ||||
| # CONFIG_SUNDANCE is not set | ||||
| # CONFIG_TLAN is not set | ||||
| # CONFIG_VIA_RHINE is not set | ||||
| @ -935,6 +976,7 @@ CONFIG_NETDEV_1000=y | ||||
| # CONFIG_E1000E is not set | ||||
| # CONFIG_IP1000 is not set | ||||
| # CONFIG_IGB is not set | ||||
| # CONFIG_IGBVF is not set | ||||
| # CONFIG_NS83820 is not set | ||||
| # CONFIG_HAMACHI is not set | ||||
| # CONFIG_YELLOWFIN is not set | ||||
| @ -945,18 +987,20 @@ CONFIG_NETDEV_1000=y | ||||
| # CONFIG_VIA_VELOCITY is not set | ||||
| # CONFIG_TIGON3 is not set | ||||
| # CONFIG_BNX2 is not set | ||||
| # CONFIG_MV643XX_ETH is not set | ||||
| # CONFIG_QLA3XXX is not set | ||||
| # CONFIG_ATL1 is not set | ||||
| # CONFIG_ATL1E is not set | ||||
| # CONFIG_ATL1C is not set | ||||
| # CONFIG_JME is not set | ||||
| CONFIG_NETDEV_10000=y | ||||
| # CONFIG_CHELSIO_T1 is not set | ||||
| CONFIG_CHELSIO_T3_DEPENDS=y | ||||
| # CONFIG_CHELSIO_T3 is not set | ||||
| # CONFIG_ENIC is not set | ||||
| # CONFIG_IXGBE is not set | ||||
| # CONFIG_IXGB is not set | ||||
| # CONFIG_S2IO is not set | ||||
| # CONFIG_VXGE is not set | ||||
| # CONFIG_MYRI10GE is not set | ||||
| # CONFIG_NETXEN_NIC is not set | ||||
| # CONFIG_NIU is not set | ||||
| @ -966,6 +1010,7 @@ CONFIG_NETDEV_10000=y | ||||
| # CONFIG_BNX2X is not set | ||||
| # CONFIG_QLGE is not set | ||||
| # CONFIG_SFC is not set | ||||
| # CONFIG_BE2NET is not set | ||||
| # CONFIG_TR is not set | ||||
| 
 | ||||
| # | ||||
| @ -974,20 +1019,11 @@ CONFIG_NETDEV_10000=y | ||||
| # CONFIG_WLAN_PRE80211 is not set | ||||
| CONFIG_WLAN_80211=y | ||||
| # CONFIG_PCMCIA_RAYCS is not set | ||||
| # CONFIG_IPW2100 is not set | ||||
| # CONFIG_IPW2200 is not set | ||||
| # CONFIG_LIBERTAS is not set | ||||
| # CONFIG_LIBERTAS_THINFIRM is not set | ||||
| # CONFIG_AIRO is not set | ||||
| CONFIG_HERMES=m | ||||
| CONFIG_APPLE_AIRPORT=m | ||||
| # CONFIG_PLX_HERMES is not set | ||||
| # CONFIG_TMD_HERMES is not set | ||||
| # CONFIG_NORTEL_HERMES is not set | ||||
| CONFIG_PCI_HERMES=m | ||||
| CONFIG_PCMCIA_HERMES=m | ||||
| # CONFIG_PCMCIA_SPECTRUM is not set | ||||
| # CONFIG_ATMEL is not set | ||||
| # CONFIG_AT76C50X_USB is not set | ||||
| # CONFIG_AIRO_CS is not set | ||||
| # CONFIG_PCMCIA_WL3501 is not set | ||||
| CONFIG_PRISM54=m | ||||
| @ -997,15 +1033,17 @@ CONFIG_PRISM54=m | ||||
| # CONFIG_RTL8187 is not set | ||||
| # CONFIG_ADM8211 is not set | ||||
| # CONFIG_MAC80211_HWSIM is not set | ||||
| # CONFIG_MWL8K is not set | ||||
| CONFIG_P54_COMMON=m | ||||
| # CONFIG_P54_USB is not set | ||||
| # CONFIG_P54_PCI is not set | ||||
| CONFIG_P54_LEDS=y | ||||
| # CONFIG_ATH5K is not set | ||||
| # CONFIG_ATH9K is not set | ||||
| # CONFIG_IWLCORE is not set | ||||
| # CONFIG_IWLWIFI_LEDS is not set | ||||
| # CONFIG_IWLAGN is not set | ||||
| # CONFIG_IWL3945 is not set | ||||
| # CONFIG_AR9170_USB is not set | ||||
| # CONFIG_IPW2100 is not set | ||||
| # CONFIG_IPW2200 is not set | ||||
| # CONFIG_IWLWIFI is not set | ||||
| # CONFIG_HOSTAP is not set | ||||
| CONFIG_B43=m | ||||
| CONFIG_B43_PCI_AUTOSELECT=y | ||||
| @ -1025,6 +1063,19 @@ CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y | ||||
| # CONFIG_B43LEGACY_PIO_MODE is not set | ||||
| # CONFIG_ZD1211RW is not set | ||||
| # CONFIG_RT2X00 is not set | ||||
| CONFIG_HERMES=m | ||||
| CONFIG_HERMES_CACHE_FW_ON_INIT=y | ||||
| CONFIG_APPLE_AIRPORT=m | ||||
| # CONFIG_PLX_HERMES is not set | ||||
| # CONFIG_TMD_HERMES is not set | ||||
| # CONFIG_NORTEL_HERMES is not set | ||||
| CONFIG_PCI_HERMES=m | ||||
| CONFIG_PCMCIA_HERMES=m | ||||
| # CONFIG_PCMCIA_SPECTRUM is not set | ||||
| 
 | ||||
| # | ||||
| # Enable WiMAX (Networking options) to see the WiMAX drivers | ||||
| # | ||||
| 
 | ||||
| # | ||||
| # USB Network Adapters | ||||
| @ -1036,6 +1087,7 @@ CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y | ||||
| CONFIG_USB_USBNET=m | ||||
| CONFIG_USB_NET_AX8817X=m | ||||
| CONFIG_USB_NET_CDCETHER=m | ||||
| # CONFIG_USB_NET_CDC_EEM is not set | ||||
| # CONFIG_USB_NET_DM9601 is not set | ||||
| # CONFIG_USB_NET_SMSC95XX is not set | ||||
| # CONFIG_USB_NET_GL620A is not set | ||||
| @ -1099,7 +1151,7 @@ CONFIG_INPUT_KEYBOARD=y | ||||
| CONFIG_INPUT_MOUSE=y | ||||
| # CONFIG_MOUSE_PS2 is not set | ||||
| # CONFIG_MOUSE_SERIAL is not set | ||||
| # CONFIG_MOUSE_APPLETOUCH is not set | ||||
| CONFIG_MOUSE_APPLETOUCH=y | ||||
| # CONFIG_MOUSE_BCM5974 is not set | ||||
| # CONFIG_MOUSE_VSXXXAA is not set | ||||
| # CONFIG_INPUT_JOYSTICK is not set | ||||
| @ -1150,10 +1202,13 @@ CONFIG_SERIAL_PMACZILOG_TTYS=y | ||||
| # CONFIG_SERIAL_JSM is not set | ||||
| # CONFIG_SERIAL_OF_PLATFORM is not set | ||||
| CONFIG_UNIX98_PTYS=y | ||||
| # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set | ||||
| CONFIG_LEGACY_PTYS=y | ||||
| CONFIG_LEGACY_PTY_COUNT=256 | ||||
| # CONFIG_HVC_UDBG is not set | ||||
| # CONFIG_IPMI_HANDLER is not set | ||||
| CONFIG_HW_RANDOM=m | ||||
| # CONFIG_HW_RANDOM_TIMERIOMEM is not set | ||||
| CONFIG_NVRAM=y | ||||
| CONFIG_GEN_RTC=y | ||||
| # CONFIG_GEN_RTC_X is not set | ||||
| @ -1232,12 +1287,9 @@ CONFIG_I2C_POWERMAC=y | ||||
| # Miscellaneous I2C Chip support | ||||
| # | ||||
| # CONFIG_DS1682 is not set | ||||
| # CONFIG_EEPROM_AT24 is not set | ||||
| # CONFIG_EEPROM_LEGACY is not set | ||||
| # CONFIG_SENSORS_PCF8574 is not set | ||||
| # CONFIG_PCF8575 is not set | ||||
| # CONFIG_SENSORS_PCA9539 is not set | ||||
| # CONFIG_SENSORS_PCF8591 is not set | ||||
| # CONFIG_SENSORS_MAX6875 is not set | ||||
| # CONFIG_SENSORS_TSL2550 is not set | ||||
| # CONFIG_I2C_DEBUG_CORE is not set | ||||
| @ -1259,11 +1311,11 @@ CONFIG_BATTERY_PMU=y | ||||
| # CONFIG_THERMAL is not set | ||||
| # CONFIG_THERMAL_HWMON is not set | ||||
| # CONFIG_WATCHDOG is not set | ||||
| CONFIG_SSB_POSSIBLE=y | ||||
| 
 | ||||
| # | ||||
| # Sonics Silicon Backplane | ||||
| # | ||||
| CONFIG_SSB_POSSIBLE=y | ||||
| CONFIG_SSB=m | ||||
| CONFIG_SSB_SPROM=y | ||||
| CONFIG_SSB_PCIHOST_POSSIBLE=y | ||||
| @ -1281,18 +1333,13 @@ CONFIG_SSB_DRIVER_PCICORE=y | ||||
| # CONFIG_MFD_CORE is not set | ||||
| # CONFIG_MFD_SM501 is not set | ||||
| # CONFIG_HTC_PASIC3 is not set | ||||
| # CONFIG_TWL4030_CORE is not set | ||||
| # CONFIG_MFD_TMIO is not set | ||||
| # CONFIG_PMIC_DA903X is not set | ||||
| # CONFIG_MFD_WM8400 is not set | ||||
| # CONFIG_MFD_WM8350_I2C is not set | ||||
| 
 | ||||
| # | ||||
| # Voltage and Current regulators | ||||
| # | ||||
| # CONFIG_MFD_PCF50633 is not set | ||||
| # CONFIG_REGULATOR is not set | ||||
| # CONFIG_REGULATOR_FIXED_VOLTAGE is not set | ||||
| # CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set | ||||
| # CONFIG_REGULATOR_BQ24022 is not set | ||||
| 
 | ||||
| # | ||||
| # Multimedia devices | ||||
| @ -1390,6 +1437,7 @@ CONFIG_FB_ATY_BACKLIGHT=y | ||||
| # CONFIG_FB_KYRO is not set | ||||
| CONFIG_FB_3DFX=y | ||||
| # CONFIG_FB_3DFX_ACCEL is not set | ||||
| CONFIG_FB_3DFX_I2C=y | ||||
| # CONFIG_FB_VOODOO1 is not set | ||||
| # CONFIG_FB_VT8623 is not set | ||||
| # CONFIG_FB_TRIDENT is not set | ||||
| @ -1399,12 +1447,14 @@ CONFIG_FB_3DFX=y | ||||
| # CONFIG_FB_IBM_GXT4500 is not set | ||||
| # CONFIG_FB_VIRTUAL is not set | ||||
| # CONFIG_FB_METRONOME is not set | ||||
| # CONFIG_FB_MB862XX is not set | ||||
| # CONFIG_FB_BROADSHEET is not set | ||||
| CONFIG_BACKLIGHT_LCD_SUPPORT=y | ||||
| CONFIG_LCD_CLASS_DEVICE=m | ||||
| # CONFIG_LCD_ILI9320 is not set | ||||
| # CONFIG_LCD_PLATFORM is not set | ||||
| CONFIG_BACKLIGHT_CLASS_DEVICE=y | ||||
| # CONFIG_BACKLIGHT_CORGI is not set | ||||
| CONFIG_BACKLIGHT_GENERIC=y | ||||
| 
 | ||||
| # | ||||
| # Display device support | ||||
| @ -1444,11 +1494,13 @@ CONFIG_SND_MIXER_OSS=m | ||||
| CONFIG_SND_PCM_OSS=m | ||||
| CONFIG_SND_PCM_OSS_PLUGINS=y | ||||
| CONFIG_SND_SEQUENCER_OSS=y | ||||
| # CONFIG_SND_HRTIMER is not set | ||||
| # CONFIG_SND_DYNAMIC_MINORS is not set | ||||
| CONFIG_SND_SUPPORT_OLD_API=y | ||||
| CONFIG_SND_VERBOSE_PROCFS=y | ||||
| # CONFIG_SND_VERBOSE_PRINTK is not set | ||||
| # CONFIG_SND_DEBUG is not set | ||||
| CONFIG_SND_VMASTER=y | ||||
| CONFIG_SND_DRIVERS=y | ||||
| CONFIG_SND_DUMMY=m | ||||
| # CONFIG_SND_VIRMIDI is not set | ||||
| @ -1486,6 +1538,8 @@ CONFIG_SND_PCI=y | ||||
| # CONFIG_SND_INDIGO is not set | ||||
| # CONFIG_SND_INDIGOIO is not set | ||||
| # CONFIG_SND_INDIGODJ is not set | ||||
| # CONFIG_SND_INDIGOIOX is not set | ||||
| # CONFIG_SND_INDIGODJX is not set | ||||
| # CONFIG_SND_EMU10K1 is not set | ||||
| # CONFIG_SND_EMU10K1X is not set | ||||
| # CONFIG_SND_ENS1370 is not set | ||||
| @ -1551,28 +1605,31 @@ CONFIG_USB_HID=y | ||||
| # | ||||
| # Special HID drivers | ||||
| # | ||||
| CONFIG_HID_COMPAT=y | ||||
| CONFIG_HID_A4TECH=y | ||||
| CONFIG_HID_APPLE=y | ||||
| CONFIG_HID_BELKIN=y | ||||
| CONFIG_HID_BRIGHT=y | ||||
| CONFIG_HID_CHERRY=y | ||||
| CONFIG_HID_CHICONY=y | ||||
| CONFIG_HID_CYPRESS=y | ||||
| CONFIG_HID_DELL=y | ||||
| # CONFIG_DRAGONRISE_FF is not set | ||||
| CONFIG_HID_EZKEY=y | ||||
| CONFIG_HID_KYE=y | ||||
| CONFIG_HID_GYRATION=y | ||||
| CONFIG_HID_KENSINGTON=y | ||||
| CONFIG_HID_LOGITECH=y | ||||
| # CONFIG_LOGITECH_FF is not set | ||||
| # CONFIG_LOGIRUMBLEPAD2_FF is not set | ||||
| CONFIG_HID_MICROSOFT=y | ||||
| CONFIG_HID_MONTEREY=y | ||||
| CONFIG_HID_NTRIG=y | ||||
| CONFIG_HID_PANTHERLORD=y | ||||
| # CONFIG_PANTHERLORD_FF is not set | ||||
| CONFIG_HID_PETALYNX=y | ||||
| CONFIG_HID_SAMSUNG=y | ||||
| CONFIG_HID_SONY=y | ||||
| CONFIG_HID_SUNPLUS=y | ||||
| # CONFIG_GREENASIA_FF is not set | ||||
| CONFIG_HID_TOPSEED=y | ||||
| # CONFIG_THRUSTMASTER_FF is not set | ||||
| # CONFIG_ZEROPLUS_FF is not set | ||||
| CONFIG_USB_SUPPORT=y | ||||
| @ -1603,6 +1660,7 @@ CONFIG_USB_EHCI_HCD=m | ||||
| CONFIG_USB_EHCI_ROOT_HUB_TT=y | ||||
| # CONFIG_USB_EHCI_TT_NEWSCHED is not set | ||||
| # CONFIG_USB_EHCI_HCD_PPC_OF is not set | ||||
| # CONFIG_USB_OXU210HP_HCD is not set | ||||
| # CONFIG_USB_ISP116X_HCD is not set | ||||
| # CONFIG_USB_ISP1760_HCD is not set | ||||
| CONFIG_USB_OHCI_HCD=y | ||||
| @ -1625,24 +1683,23 @@ CONFIG_USB_PRINTER=m | ||||
| # CONFIG_USB_TMC is not set | ||||
| 
 | ||||
| # | ||||
| # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | ||||
| # NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may | ||||
| # | ||||
| 
 | ||||
| # | ||||
| # may also be needed; see USB_STORAGE Help for more information | ||||
| # also be needed; see USB_STORAGE Help for more info | ||||
| # | ||||
| CONFIG_USB_STORAGE=m | ||||
| # CONFIG_USB_STORAGE_DEBUG is not set | ||||
| # CONFIG_USB_STORAGE_DATAFAB is not set | ||||
| # CONFIG_USB_STORAGE_FREECOM is not set | ||||
| # CONFIG_USB_STORAGE_ISD200 is not set | ||||
| # CONFIG_USB_STORAGE_DPCM is not set | ||||
| # CONFIG_USB_STORAGE_USBAT is not set | ||||
| # CONFIG_USB_STORAGE_SDDR09 is not set | ||||
| # CONFIG_USB_STORAGE_SDDR55 is not set | ||||
| # CONFIG_USB_STORAGE_JUMPSHOT is not set | ||||
| # CONFIG_USB_STORAGE_ALAUDA is not set | ||||
| CONFIG_USB_STORAGE_ONETOUCH=y | ||||
| CONFIG_USB_STORAGE_ONETOUCH=m | ||||
| # CONFIG_USB_STORAGE_KARMA is not set | ||||
| # CONFIG_USB_STORAGE_CYPRESS_ATACB is not set | ||||
| # CONFIG_USB_LIBUSUAL is not set | ||||
| @ -1665,7 +1722,7 @@ CONFIG_USB_EZUSB=y | ||||
| # CONFIG_USB_SERIAL_CH341 is not set | ||||
| # CONFIG_USB_SERIAL_WHITEHEAT is not set | ||||
| # CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set | ||||
| # CONFIG_USB_SERIAL_CP2101 is not set | ||||
| # CONFIG_USB_SERIAL_CP210X is not set | ||||
| # CONFIG_USB_SERIAL_CYPRESS_M8 is not set | ||||
| # CONFIG_USB_SERIAL_EMPEG is not set | ||||
| # CONFIG_USB_SERIAL_FTDI_SIO is not set | ||||
| @ -1701,15 +1758,19 @@ CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y | ||||
| # CONFIG_USB_SERIAL_NAVMAN is not set | ||||
| # CONFIG_USB_SERIAL_PL2303 is not set | ||||
| # CONFIG_USB_SERIAL_OTI6858 is not set | ||||
| # CONFIG_USB_SERIAL_QUALCOMM is not set | ||||
| # CONFIG_USB_SERIAL_SPCP8X5 is not set | ||||
| # CONFIG_USB_SERIAL_HP4X is not set | ||||
| # CONFIG_USB_SERIAL_SAFE is not set | ||||
| # CONFIG_USB_SERIAL_SIEMENS_MPI is not set | ||||
| # CONFIG_USB_SERIAL_SIERRAWIRELESS is not set | ||||
| # CONFIG_USB_SERIAL_SYMBOL is not set | ||||
| # CONFIG_USB_SERIAL_TI is not set | ||||
| # CONFIG_USB_SERIAL_CYBERJACK is not set | ||||
| # CONFIG_USB_SERIAL_XIRCOM is not set | ||||
| # CONFIG_USB_SERIAL_OPTION is not set | ||||
| # CONFIG_USB_SERIAL_OMNINET is not set | ||||
| # CONFIG_USB_SERIAL_OPTICON is not set | ||||
| # CONFIG_USB_SERIAL_DEBUG is not set | ||||
| 
 | ||||
| # | ||||
| @ -1726,7 +1787,6 @@ CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y | ||||
| # CONFIG_USB_LED is not set | ||||
| # CONFIG_USB_CYPRESS_CY7C63 is not set | ||||
| # CONFIG_USB_CYTHERM is not set | ||||
| # CONFIG_USB_PHIDGET is not set | ||||
| # CONFIG_USB_IDMOUSE is not set | ||||
| # CONFIG_USB_FTDI_ELAN is not set | ||||
| CONFIG_USB_APPLEDISPLAY=m | ||||
| @ -1738,6 +1798,11 @@ CONFIG_USB_APPLEDISPLAY=m | ||||
| # CONFIG_USB_ISIGHTFW is not set | ||||
| # CONFIG_USB_VST is not set | ||||
| # CONFIG_USB_GADGET is not set | ||||
| 
 | ||||
| # | ||||
| # OTG and related infrastructure | ||||
| # | ||||
| # CONFIG_NOP_USB_XCEIV is not set | ||||
| # CONFIG_UWB is not set | ||||
| # CONFIG_MMC is not set | ||||
| # CONFIG_MEMSTICK is not set | ||||
| @ -1748,7 +1813,9 @@ CONFIG_LEDS_CLASS=y | ||||
| # LED drivers | ||||
| # | ||||
| # CONFIG_LEDS_PCA9532 is not set | ||||
| # CONFIG_LEDS_LP5521 is not set | ||||
| # CONFIG_LEDS_PCA955X is not set | ||||
| # CONFIG_LEDS_BD2802 is not set | ||||
| 
 | ||||
| # | ||||
| # LED Triggers | ||||
| @ -1759,11 +1826,16 @@ CONFIG_LEDS_TRIGGER_IDE_DISK=y | ||||
| # CONFIG_LEDS_TRIGGER_HEARTBEAT is not set | ||||
| # CONFIG_LEDS_TRIGGER_BACKLIGHT is not set | ||||
| CONFIG_LEDS_TRIGGER_DEFAULT_ON=y | ||||
| 
 | ||||
| # | ||||
| # iptables trigger is under Netfilter config (LED target) | ||||
| # | ||||
| # CONFIG_ACCESSIBILITY is not set | ||||
| # CONFIG_INFINIBAND is not set | ||||
| # CONFIG_EDAC is not set | ||||
| # CONFIG_RTC_CLASS is not set | ||||
| # CONFIG_DMADEVICES is not set | ||||
| # CONFIG_AUXDISPLAY is not set | ||||
| # CONFIG_UIO is not set | ||||
| # CONFIG_STAGING is not set | ||||
| 
 | ||||
| @ -1774,6 +1846,7 @@ CONFIG_EXT2_FS=y | ||||
| # CONFIG_EXT2_FS_XATTR is not set | ||||
| # CONFIG_EXT2_FS_XIP is not set | ||||
| CONFIG_EXT3_FS=y | ||||
| # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | ||||
| CONFIG_EXT3_FS_XATTR=y | ||||
| CONFIG_EXT3_FS_POSIX_ACL=y | ||||
| # CONFIG_EXT3_FS_SECURITY is not set | ||||
| @ -1783,7 +1856,9 @@ CONFIG_EXT4_FS_XATTR=y | ||||
| # CONFIG_EXT4_FS_POSIX_ACL is not set | ||||
| # CONFIG_EXT4_FS_SECURITY is not set | ||||
| CONFIG_JBD=y | ||||
| # CONFIG_JBD_DEBUG is not set | ||||
| CONFIG_JBD2=y | ||||
| # CONFIG_JBD2_DEBUG is not set | ||||
| CONFIG_FS_MBCACHE=y | ||||
| # CONFIG_REISERFS_FS is not set | ||||
| # CONFIG_JFS_FS is not set | ||||
| @ -1792,6 +1867,7 @@ CONFIG_FILE_LOCKING=y | ||||
| # CONFIG_XFS_FS is not set | ||||
| # CONFIG_GFS2_FS is not set | ||||
| # CONFIG_OCFS2_FS is not set | ||||
| # CONFIG_BTRFS_FS is not set | ||||
| CONFIG_DNOTIFY=y | ||||
| CONFIG_INOTIFY=y | ||||
| CONFIG_INOTIFY_USER=y | ||||
| @ -1800,6 +1876,11 @@ CONFIG_INOTIFY_USER=y | ||||
| CONFIG_AUTOFS4_FS=m | ||||
| CONFIG_FUSE_FS=m | ||||
| 
 | ||||
| # | ||||
| # Caches | ||||
| # | ||||
| # CONFIG_FSCACHE is not set | ||||
| 
 | ||||
| # | ||||
| # CD-ROM/DVD Filesystems | ||||
| # | ||||
| @ -1831,10 +1912,7 @@ CONFIG_TMPFS=y | ||||
| # CONFIG_TMPFS_POSIX_ACL is not set | ||||
| # CONFIG_HUGETLB_PAGE is not set | ||||
| # CONFIG_CONFIGFS_FS is not set | ||||
| 
 | ||||
| # | ||||
| # Miscellaneous filesystems | ||||
| # | ||||
| CONFIG_MISC_FILESYSTEMS=y | ||||
| # CONFIG_ADFS_FS is not set | ||||
| # CONFIG_AFFS_FS is not set | ||||
| CONFIG_HFS_FS=m | ||||
| @ -1843,6 +1921,7 @@ CONFIG_HFSPLUS_FS=m | ||||
| # CONFIG_BFS_FS is not set | ||||
| # CONFIG_EFS_FS is not set | ||||
| # CONFIG_CRAMFS is not set | ||||
| # CONFIG_SQUASHFS is not set | ||||
| # CONFIG_VXFS_FS is not set | ||||
| # CONFIG_MINIX_FS is not set | ||||
| # CONFIG_OMFS_FS is not set | ||||
| @ -1851,6 +1930,7 @@ CONFIG_HFSPLUS_FS=m | ||||
| # CONFIG_ROMFS_FS is not set | ||||
| # CONFIG_SYSV_FS is not set | ||||
| # CONFIG_UFS_FS is not set | ||||
| # CONFIG_NILFS2_FS is not set | ||||
| CONFIG_NETWORK_FILESYSTEMS=y | ||||
| CONFIG_NFS_FS=y | ||||
| CONFIG_NFS_V3=y | ||||
| @ -1868,7 +1948,6 @@ CONFIG_NFS_ACL_SUPPORT=y | ||||
| CONFIG_NFS_COMMON=y | ||||
| CONFIG_SUNRPC=y | ||||
| CONFIG_SUNRPC_GSS=y | ||||
| # CONFIG_SUNRPC_REGISTER_V4 is not set | ||||
| CONFIG_RPCSEC_GSS_KRB5=y | ||||
| # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||||
| CONFIG_SMB_FS=m | ||||
| @ -1940,11 +2019,13 @@ CONFIG_NLS_ISO8859_1=m | ||||
| # CONFIG_NLS_KOI8_U is not set | ||||
| CONFIG_NLS_UTF8=m | ||||
| # CONFIG_DLM is not set | ||||
| CONFIG_BINARY_PRINTF=y | ||||
| 
 | ||||
| # | ||||
| # Library routines | ||||
| # | ||||
| CONFIG_BITREVERSE=y | ||||
| CONFIG_GENERIC_FIND_LAST_BIT=y | ||||
| CONFIG_CRC_CCITT=y | ||||
| CONFIG_CRC16=y | ||||
| CONFIG_CRC_T10DIF=y | ||||
| @ -1954,15 +2035,18 @@ CONFIG_CRC32=y | ||||
| CONFIG_LIBCRC32C=m | ||||
| CONFIG_ZLIB_INFLATE=y | ||||
| CONFIG_ZLIB_DEFLATE=y | ||||
| CONFIG_DECOMPRESS_GZIP=y | ||||
| CONFIG_DECOMPRESS_BZIP2=y | ||||
| CONFIG_DECOMPRESS_LZMA=y | ||||
| CONFIG_TEXTSEARCH=y | ||||
| CONFIG_TEXTSEARCH_KMP=m | ||||
| CONFIG_TEXTSEARCH_BM=m | ||||
| CONFIG_TEXTSEARCH_FSM=m | ||||
| CONFIG_PLIST=y | ||||
| CONFIG_HAS_IOMEM=y | ||||
| CONFIG_HAS_IOPORT=y | ||||
| CONFIG_HAS_DMA=y | ||||
| CONFIG_HAVE_LMB=y | ||||
| CONFIG_NLATTR=y | ||||
| 
 | ||||
| # | ||||
| # Kernel hacking | ||||
| @ -1973,13 +2057,16 @@ CONFIG_ENABLE_MUST_CHECK=y | ||||
| CONFIG_FRAME_WARN=1024 | ||||
| CONFIG_MAGIC_SYSRQ=y | ||||
| # CONFIG_UNUSED_SYMBOLS is not set | ||||
| # CONFIG_DEBUG_FS is not set | ||||
| CONFIG_DEBUG_FS=y | ||||
| # CONFIG_HEADERS_CHECK is not set | ||||
| CONFIG_DEBUG_KERNEL=y | ||||
| # CONFIG_DEBUG_SHIRQ is not set | ||||
| CONFIG_DETECT_SOFTLOCKUP=y | ||||
| # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set | ||||
| CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 | ||||
| CONFIG_DETECT_HUNG_TASK=y | ||||
| # CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set | ||||
| CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0 | ||||
| CONFIG_SCHED_DEBUG=y | ||||
| CONFIG_SCHEDSTATS=y | ||||
| # CONFIG_TIMER_STATS is not set | ||||
| @ -1994,6 +2081,7 @@ CONFIG_SCHEDSTATS=y | ||||
| # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | ||||
| CONFIG_STACKTRACE=y | ||||
| # CONFIG_DEBUG_KOBJECT is not set | ||||
| # CONFIG_DEBUG_HIGHMEM is not set | ||||
| CONFIG_DEBUG_BUGVERBOSE=y | ||||
| # CONFIG_DEBUG_INFO is not set | ||||
| # CONFIG_DEBUG_VM is not set | ||||
| @ -2001,6 +2089,7 @@ CONFIG_DEBUG_BUGVERBOSE=y | ||||
| CONFIG_DEBUG_MEMORY_INIT=y | ||||
| # CONFIG_DEBUG_LIST is not set | ||||
| # CONFIG_DEBUG_SG is not set | ||||
| # CONFIG_DEBUG_NOTIFIERS is not set | ||||
| # CONFIG_BOOT_PRINTK_DELAY is not set | ||||
| # CONFIG_RCU_TORTURE_TEST is not set | ||||
| # CONFIG_RCU_CPU_STALL_DETECTOR is not set | ||||
| @ -2009,7 +2098,14 @@ CONFIG_DEBUG_MEMORY_INIT=y | ||||
| # CONFIG_FAULT_INJECTION is not set | ||||
| CONFIG_LATENCYTOP=y | ||||
| CONFIG_SYSCTL_SYSCALL_CHECK=y | ||||
| CONFIG_NOP_TRACER=y | ||||
| CONFIG_HAVE_FUNCTION_TRACER=y | ||||
| CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y | ||||
| CONFIG_HAVE_DYNAMIC_FTRACE=y | ||||
| CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y | ||||
| CONFIG_RING_BUFFER=y | ||||
| CONFIG_TRACING=y | ||||
| CONFIG_TRACING_SUPPORT=y | ||||
| 
 | ||||
| # | ||||
| # Tracers | ||||
| @ -2017,12 +2113,19 @@ CONFIG_HAVE_FUNCTION_TRACER=y | ||||
| # CONFIG_FUNCTION_TRACER is not set | ||||
| # CONFIG_SCHED_TRACER is not set | ||||
| # CONFIG_CONTEXT_SWITCH_TRACER is not set | ||||
| # CONFIG_EVENT_TRACER is not set | ||||
| # CONFIG_BOOT_TRACER is not set | ||||
| # CONFIG_TRACE_BRANCH_PROFILING is not set | ||||
| # CONFIG_STACK_TRACER is not set | ||||
| # CONFIG_DYNAMIC_PRINTK_DEBUG is not set | ||||
| # CONFIG_KMEMTRACE is not set | ||||
| # CONFIG_WORKQUEUE_TRACER is not set | ||||
| # CONFIG_BLK_DEV_IO_TRACE is not set | ||||
| # CONFIG_FTRACE_STARTUP_TEST is not set | ||||
| # CONFIG_DYNAMIC_DEBUG is not set | ||||
| # CONFIG_SAMPLES is not set | ||||
| CONFIG_HAVE_ARCH_KGDB=y | ||||
| # CONFIG_KGDB is not set | ||||
| CONFIG_PRINT_STACK_DEPTH=64 | ||||
| # CONFIG_DEBUG_STACKOVERFLOW is not set | ||||
| # CONFIG_DEBUG_STACK_USAGE is not set | ||||
| # CONFIG_CODE_PATCHING_SELFTEST is not set | ||||
| @ -2033,6 +2136,7 @@ CONFIG_XMON_DEFAULT=y | ||||
| CONFIG_XMON_DISASSEMBLY=y | ||||
| CONFIG_DEBUGGER=y | ||||
| CONFIG_IRQSTACKS=y | ||||
| # CONFIG_VIRQ_DEBUG is not set | ||||
| # CONFIG_BDI_SWITCH is not set | ||||
| CONFIG_BOOTX_TEXT=y | ||||
| # CONFIG_PPC_EARLY_DEBUG is not set | ||||
| @ -2051,13 +2155,20 @@ CONFIG_CRYPTO=y | ||||
| # | ||||
| # CONFIG_CRYPTO_FIPS is not set | ||||
| CONFIG_CRYPTO_ALGAPI=y | ||||
| CONFIG_CRYPTO_ALGAPI2=y | ||||
| CONFIG_CRYPTO_AEAD=y | ||||
| CONFIG_CRYPTO_AEAD2=y | ||||
| CONFIG_CRYPTO_BLKCIPHER=y | ||||
| CONFIG_CRYPTO_BLKCIPHER2=y | ||||
| CONFIG_CRYPTO_HASH=y | ||||
| CONFIG_CRYPTO_RNG=y | ||||
| CONFIG_CRYPTO_HASH2=y | ||||
| CONFIG_CRYPTO_RNG2=y | ||||
| CONFIG_CRYPTO_PCOMP=y | ||||
| CONFIG_CRYPTO_MANAGER=y | ||||
| CONFIG_CRYPTO_MANAGER2=y | ||||
| # CONFIG_CRYPTO_GF128MUL is not set | ||||
| CONFIG_CRYPTO_NULL=m | ||||
| CONFIG_CRYPTO_WORKQUEUE=y | ||||
| # CONFIG_CRYPTO_CRYPTD is not set | ||||
| CONFIG_CRYPTO_AUTHENC=y | ||||
| # CONFIG_CRYPTO_TEST is not set | ||||
| @ -2127,6 +2238,7 @@ CONFIG_CRYPTO_TWOFISH_COMMON=m | ||||
| # Compression | ||||
| # | ||||
| CONFIG_CRYPTO_DEFLATE=m | ||||
| # CONFIG_CRYPTO_ZLIB is not set | ||||
| # CONFIG_CRYPTO_LZO is not set | ||||
| 
 | ||||
| # | ||||
|  | ||||
| @ -26,7 +26,9 @@ | ||||
|  * allocate the space "normally" and use the cache management functions | ||||
|  * to ensure it is consistent. | ||||
|  */ | ||||
| extern void *__dma_alloc_coherent(size_t size, dma_addr_t *handle, gfp_t gfp); | ||||
| struct device; | ||||
| extern void *__dma_alloc_coherent(struct device *dev, size_t size, | ||||
| 				  dma_addr_t *handle, gfp_t gfp); | ||||
| extern void __dma_free_coherent(size_t size, void *vaddr); | ||||
| extern void __dma_sync(void *vaddr, size_t size, int direction); | ||||
| extern void __dma_sync_page(struct page *page, unsigned long offset, | ||||
| @ -37,7 +39,7 @@ extern void __dma_sync_page(struct page *page, unsigned long offset, | ||||
|  * Cache coherent cores. | ||||
|  */ | ||||
| 
 | ||||
| #define __dma_alloc_coherent(gfp, size, handle)	NULL | ||||
| #define __dma_alloc_coherent(dev, gfp, size, handle)	NULL | ||||
| #define __dma_free_coherent(size, addr)		((void)0) | ||||
| #define __dma_sync(addr, size, rw)		((void)0) | ||||
| #define __dma_sync_page(pg, off, sz, rw)	((void)0) | ||||
|  | ||||
| @ -14,8 +14,6 @@ | ||||
| #ifndef _ASM_FIXMAP_H | ||||
| #define _ASM_FIXMAP_H | ||||
| 
 | ||||
| extern unsigned long FIXADDR_TOP; | ||||
| 
 | ||||
| #ifndef __ASSEMBLY__ | ||||
| #include <linux/kernel.h> | ||||
| #include <asm/page.h> | ||||
| @ -24,6 +22,8 @@ extern unsigned long FIXADDR_TOP; | ||||
| #include <asm/kmap_types.h> | ||||
| #endif | ||||
| 
 | ||||
| #define FIXADDR_TOP	((unsigned long)(-PAGE_SIZE)) | ||||
| 
 | ||||
| /*
 | ||||
|  * Here we define all the compile-time 'special' virtual | ||||
|  * addresses. The point is to have a constant address at | ||||
|  | ||||
| @ -10,7 +10,7 @@ | ||||
| 
 | ||||
| extern unsigned long va_to_phys(unsigned long address); | ||||
| extern pte_t *va_to_pte(unsigned long address); | ||||
| extern unsigned long ioremap_bot, ioremap_base; | ||||
| extern unsigned long ioremap_bot; | ||||
| 
 | ||||
| #ifdef CONFIG_44x | ||||
| extern int icache_44x_need_flush; | ||||
| @ -55,9 +55,31 @@ extern int icache_44x_need_flush; | ||||
| #define pgd_ERROR(e) \ | ||||
| 	printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e)) | ||||
| 
 | ||||
| /*
 | ||||
|  * This is the bottom of the PKMAP area with HIGHMEM or an arbitrary | ||||
|  * value (for now) on others, from where we can start layout kernel | ||||
|  * virtual space that goes below PKMAP and FIXMAP | ||||
|  */ | ||||
| #ifdef CONFIG_HIGHMEM | ||||
| #define KVIRT_TOP	PKMAP_BASE | ||||
| #else | ||||
| #define KVIRT_TOP	(0xfe000000UL)	/* for now, could be FIXMAP_BASE ? */ | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * ioremap_bot starts at that address. Early ioremaps move down from there, | ||||
|  * until mem_init() at which point this becomes the top of the vmalloc | ||||
|  * and ioremap space | ||||
|  */ | ||||
| #ifdef CONFIG_NOT_COHERENT_CACHE | ||||
| #define IOREMAP_TOP	((KVIRT_TOP - CONFIG_CONSISTENT_SIZE) & PAGE_MASK) | ||||
| #else | ||||
| #define IOREMAP_TOP	KVIRT_TOP | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * Just any arbitrary offset to the start of the vmalloc VM area: the | ||||
|  * current 64MB value just means that there will be a 64MB "hole" after the | ||||
|  * current 16MB value just means that there will be a 64MB "hole" after the | ||||
|  * physical memory until the kernel virtual memory starts.  That means that | ||||
|  * any out-of-bounds memory accesses will hopefully be caught. | ||||
|  * The vmalloc() routines leaves a hole of 4kB between each vmalloced | ||||
|  | ||||
| @ -32,7 +32,7 @@ void *dma_direct_alloc_coherent(struct device *dev, size_t size, | ||||
| { | ||||
| 	void *ret; | ||||
| #ifdef CONFIG_NOT_COHERENT_CACHE | ||||
| 	ret = __dma_alloc_coherent(size, dma_handle, flag); | ||||
| 	ret = __dma_alloc_coherent(dev, size, dma_handle, flag); | ||||
| 	if (ret == NULL) | ||||
| 		return NULL; | ||||
| 	*dma_handle += get_dma_direct_offset(dev); | ||||
|  | ||||
| @ -18,7 +18,6 @@ obj-$(CONFIG_PPC64)	+= copypage_64.o copyuser_64.o \ | ||||
| 			   memcpy_64.o usercopy_64.o mem_64.o string.o | ||||
| obj-$(CONFIG_XMON)	+= sstep.o | ||||
| obj-$(CONFIG_KPROBES)	+= sstep.o | ||||
| obj-$(CONFIG_NOT_COHERENT_CACHE)	+= dma-noncoherent.o | ||||
| 
 | ||||
| ifeq ($(CONFIG_PPC64),y) | ||||
| obj-$(CONFIG_SMP)	+= locks.o | ||||
|  | ||||
| @ -1,237 +0,0 @@ | ||||
| /*
 | ||||
|  *  PowerPC version derived from arch/arm/mm/consistent.c | ||||
|  *    Copyright (C) 2001 Dan Malek (dmalek@jlc.net) | ||||
|  * | ||||
|  *  Copyright (C) 2000 Russell King | ||||
|  * | ||||
|  * Consistent memory allocators.  Used for DMA devices that want to | ||||
|  * share uncached memory with the processor core.  The function return | ||||
|  * is the virtual address and 'dma_handle' is the physical address. | ||||
|  * Mostly stolen from the ARM port, with some changes for PowerPC. | ||||
|  *						-- Dan | ||||
|  * | ||||
|  * Reorganized to get rid of the arch-specific consistent_* functions | ||||
|  * and provide non-coherent implementations for the DMA API. -Matt | ||||
|  * | ||||
|  * Added in_interrupt() safe dma_alloc_coherent()/dma_free_coherent() | ||||
|  * implementation. This is pulled straight from ARM and barely | ||||
|  * modified. -Matt | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License version 2 as | ||||
|  * published by the Free Software Foundation. | ||||
|  */ | ||||
| 
 | ||||
| #include <linux/sched.h> | ||||
| #include <linux/kernel.h> | ||||
| #include <linux/errno.h> | ||||
| #include <linux/string.h> | ||||
| #include <linux/types.h> | ||||
| #include <linux/highmem.h> | ||||
| #include <linux/dma-mapping.h> | ||||
| #include <linux/vmalloc.h> | ||||
| 
 | ||||
| #include <asm/tlbflush.h> | ||||
| 
 | ||||
| /*
 | ||||
|  * Allocate DMA-coherent memory space and return both the kernel remapped | ||||
|  * virtual and bus address for that space. | ||||
|  */ | ||||
| void * | ||||
| __dma_alloc_coherent(size_t size, dma_addr_t *handle, gfp_t gfp) | ||||
| { | ||||
| 	struct page *page; | ||||
| 	unsigned long order; | ||||
| 	int i; | ||||
| 	unsigned int nr_pages = PAGE_ALIGN(size)>>PAGE_SHIFT; | ||||
| 	unsigned int array_size = nr_pages * sizeof(struct page *); | ||||
| 	struct page **pages; | ||||
| 	struct page *end; | ||||
| 	u64 mask = 0x00ffffff, limit; /* ISA default */ | ||||
| 	struct vm_struct *area; | ||||
| 
 | ||||
| 	BUG_ON(!mem_init_done); | ||||
| 	size = PAGE_ALIGN(size); | ||||
| 	limit = (mask + 1) & ~mask; | ||||
| 	if (limit && size >= limit) { | ||||
| 		printk(KERN_WARNING "coherent allocation too big (requested " | ||||
| 				"%#x mask %#Lx)\n", size, mask); | ||||
| 		return NULL; | ||||
| 	} | ||||
| 
 | ||||
| 	order = get_order(size); | ||||
| 
 | ||||
| 	if (mask != 0xffffffff) | ||||
| 		gfp |= GFP_DMA; | ||||
| 
 | ||||
| 	page = alloc_pages(gfp, order); | ||||
| 	if (!page) | ||||
| 		goto no_page; | ||||
| 
 | ||||
| 	end = page + (1 << order); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Invalidate any data that might be lurking in the | ||||
| 	 * kernel direct-mapped region for device DMA. | ||||
| 	 */ | ||||
| 	{ | ||||
| 		unsigned long kaddr = (unsigned long)page_address(page); | ||||
| 		memset(page_address(page), 0, size); | ||||
| 		flush_dcache_range(kaddr, kaddr + size); | ||||
| 	} | ||||
| 
 | ||||
| 	split_page(page, order); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Set the "dma handle" | ||||
| 	 */ | ||||
| 	*handle = page_to_phys(page); | ||||
| 
 | ||||
| 	area = get_vm_area_caller(size, VM_IOREMAP, | ||||
| 			__builtin_return_address(1)); | ||||
| 	if (!area) | ||||
| 		goto out_free_pages; | ||||
| 
 | ||||
| 	if (array_size > PAGE_SIZE) { | ||||
| 		pages = vmalloc(array_size); | ||||
| 		area->flags |= VM_VPAGES; | ||||
| 	} else { | ||||
| 		pages = kmalloc(array_size, GFP_KERNEL); | ||||
| 	} | ||||
| 	if (!pages) | ||||
| 		goto out_free_area; | ||||
| 
 | ||||
| 	area->pages = pages; | ||||
| 	area->nr_pages = nr_pages; | ||||
| 
 | ||||
| 	for (i = 0; i < nr_pages; i++) | ||||
| 		pages[i] = page + i; | ||||
| 
 | ||||
| 	if (map_vm_area(area, pgprot_noncached(PAGE_KERNEL), &pages)) | ||||
| 		goto out_unmap; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Free the otherwise unused pages. | ||||
| 	 */ | ||||
| 	page += nr_pages; | ||||
| 	while (page < end) { | ||||
| 		__free_page(page); | ||||
| 		page++; | ||||
| 	} | ||||
| 
 | ||||
| 	return area->addr; | ||||
| out_unmap: | ||||
| 	vunmap(area->addr); | ||||
| 	if (array_size > PAGE_SIZE) | ||||
| 		vfree(pages); | ||||
| 	else | ||||
| 		kfree(pages); | ||||
| 	goto out_free_pages; | ||||
| out_free_area: | ||||
| 	free_vm_area(area); | ||||
| out_free_pages: | ||||
| 	if (page) | ||||
| 		__free_pages(page, order); | ||||
| no_page: | ||||
| 	return NULL; | ||||
| } | ||||
| EXPORT_SYMBOL(__dma_alloc_coherent); | ||||
| 
 | ||||
| /*
 | ||||
|  * free a page as defined by the above mapping. | ||||
|  */ | ||||
| void __dma_free_coherent(size_t size, void *vaddr) | ||||
| { | ||||
| 	vfree(vaddr); | ||||
| 
 | ||||
| } | ||||
| EXPORT_SYMBOL(__dma_free_coherent); | ||||
| 
 | ||||
| /*
 | ||||
|  * make an area consistent. | ||||
|  */ | ||||
| void __dma_sync(void *vaddr, size_t size, int direction) | ||||
| { | ||||
| 	unsigned long start = (unsigned long)vaddr; | ||||
| 	unsigned long end   = start + size; | ||||
| 
 | ||||
| 	switch (direction) { | ||||
| 	case DMA_NONE: | ||||
| 		BUG(); | ||||
| 	case DMA_FROM_DEVICE: | ||||
| 		/*
 | ||||
| 		 * invalidate only when cache-line aligned otherwise there is | ||||
| 		 * the potential for discarding uncommitted data from the cache | ||||
| 		 */ | ||||
| 		if ((start & (L1_CACHE_BYTES - 1)) || (size & (L1_CACHE_BYTES - 1))) | ||||
| 			flush_dcache_range(start, end); | ||||
| 		else | ||||
| 			invalidate_dcache_range(start, end); | ||||
| 		break; | ||||
| 	case DMA_TO_DEVICE:		/* writeback only */ | ||||
| 		clean_dcache_range(start, end); | ||||
| 		break; | ||||
| 	case DMA_BIDIRECTIONAL:	/* writeback and invalidate */ | ||||
| 		flush_dcache_range(start, end); | ||||
| 		break; | ||||
| 	} | ||||
| } | ||||
| EXPORT_SYMBOL(__dma_sync); | ||||
| 
 | ||||
| #ifdef CONFIG_HIGHMEM | ||||
| /*
 | ||||
|  * __dma_sync_page() implementation for systems using highmem. | ||||
|  * In this case, each page of a buffer must be kmapped/kunmapped | ||||
|  * in order to have a virtual address for __dma_sync(). This must | ||||
|  * not sleep so kmap_atomic()/kunmap_atomic() are used. | ||||
|  * | ||||
|  * Note: yes, it is possible and correct to have a buffer extend | ||||
|  * beyond the first page. | ||||
|  */ | ||||
| static inline void __dma_sync_page_highmem(struct page *page, | ||||
| 		unsigned long offset, size_t size, int direction) | ||||
| { | ||||
| 	size_t seg_size = min((size_t)(PAGE_SIZE - offset), size); | ||||
| 	size_t cur_size = seg_size; | ||||
| 	unsigned long flags, start, seg_offset = offset; | ||||
| 	int nr_segs = 1 + ((size - seg_size) + PAGE_SIZE - 1)/PAGE_SIZE; | ||||
| 	int seg_nr = 0; | ||||
| 
 | ||||
| 	local_irq_save(flags); | ||||
| 
 | ||||
| 	do { | ||||
| 		start = (unsigned long)kmap_atomic(page + seg_nr, | ||||
| 				KM_PPC_SYNC_PAGE) + seg_offset; | ||||
| 
 | ||||
| 		/* Sync this buffer segment */ | ||||
| 		__dma_sync((void *)start, seg_size, direction); | ||||
| 		kunmap_atomic((void *)start, KM_PPC_SYNC_PAGE); | ||||
| 		seg_nr++; | ||||
| 
 | ||||
| 		/* Calculate next buffer segment size */ | ||||
| 		seg_size = min((size_t)PAGE_SIZE, size - cur_size); | ||||
| 
 | ||||
| 		/* Add the segment size to our running total */ | ||||
| 		cur_size += seg_size; | ||||
| 		seg_offset = 0; | ||||
| 	} while (seg_nr < nr_segs); | ||||
| 
 | ||||
| 	local_irq_restore(flags); | ||||
| } | ||||
| #endif /* CONFIG_HIGHMEM */ | ||||
| 
 | ||||
| /*
 | ||||
|  * __dma_sync_page makes memory consistent. identical to __dma_sync, but | ||||
|  * takes a struct page instead of a virtual address | ||||
|  */ | ||||
| void __dma_sync_page(struct page *page, unsigned long offset, | ||||
| 	size_t size, int direction) | ||||
| { | ||||
| #ifdef CONFIG_HIGHMEM | ||||
| 	__dma_sync_page_highmem(page, offset, size, direction); | ||||
| #else | ||||
| 	unsigned long start = (unsigned long)page_address(page) + offset; | ||||
| 	__dma_sync((void *)start, size, direction); | ||||
| #endif | ||||
| } | ||||
| EXPORT_SYMBOL(__dma_sync_page); | ||||
| @ -26,3 +26,4 @@ obj-$(CONFIG_NEED_MULTIPLE_NODES) += numa.o | ||||
| obj-$(CONFIG_PPC_MM_SLICES)	+= slice.o | ||||
| obj-$(CONFIG_HUGETLB_PAGE)	+= hugetlbpage.o | ||||
| obj-$(CONFIG_PPC_SUBPAGE_PROT)	+= subpage-prot.o | ||||
| obj-$(CONFIG_NOT_COHERENT_CACHE) += dma-noncoherent.o | ||||
|  | ||||
							
								
								
									
										400
									
								
								arch/powerpc/mm/dma-noncoherent.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										400
									
								
								arch/powerpc/mm/dma-noncoherent.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,400 @@ | ||||
| /*
 | ||||
|  *  PowerPC version derived from arch/arm/mm/consistent.c | ||||
|  *    Copyright (C) 2001 Dan Malek (dmalek@jlc.net) | ||||
|  * | ||||
|  *  Copyright (C) 2000 Russell King | ||||
|  * | ||||
|  * Consistent memory allocators.  Used for DMA devices that want to | ||||
|  * share uncached memory with the processor core.  The function return | ||||
|  * is the virtual address and 'dma_handle' is the physical address. | ||||
|  * Mostly stolen from the ARM port, with some changes for PowerPC. | ||||
|  *						-- Dan | ||||
|  * | ||||
|  * Reorganized to get rid of the arch-specific consistent_* functions | ||||
|  * and provide non-coherent implementations for the DMA API. -Matt | ||||
|  * | ||||
|  * Added in_interrupt() safe dma_alloc_coherent()/dma_free_coherent() | ||||
|  * implementation. This is pulled straight from ARM and barely | ||||
|  * modified. -Matt | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License version 2 as | ||||
|  * published by the Free Software Foundation. | ||||
|  */ | ||||
| 
 | ||||
| #include <linux/sched.h> | ||||
| #include <linux/kernel.h> | ||||
| #include <linux/errno.h> | ||||
| #include <linux/string.h> | ||||
| #include <linux/types.h> | ||||
| #include <linux/highmem.h> | ||||
| #include <linux/dma-mapping.h> | ||||
| 
 | ||||
| #include <asm/tlbflush.h> | ||||
| 
 | ||||
| #include "mmu_decl.h" | ||||
| 
 | ||||
| /*
 | ||||
|  * This address range defaults to a value that is safe for all | ||||
|  * platforms which currently set CONFIG_NOT_COHERENT_CACHE. It | ||||
|  * can be further configured for specific applications under | ||||
|  * the "Advanced Setup" menu. -Matt | ||||
|  */ | ||||
| #define CONSISTENT_BASE		(IOREMAP_TOP) | ||||
| #define CONSISTENT_END 		(CONSISTENT_BASE + CONFIG_CONSISTENT_SIZE) | ||||
| #define CONSISTENT_OFFSET(x)	(((unsigned long)(x) - CONSISTENT_BASE) >> PAGE_SHIFT) | ||||
| 
 | ||||
| /*
 | ||||
|  * This is the page table (2MB) covering uncached, DMA consistent allocations | ||||
|  */ | ||||
| static DEFINE_SPINLOCK(consistent_lock); | ||||
| 
 | ||||
| /*
 | ||||
|  * VM region handling support. | ||||
|  * | ||||
|  * This should become something generic, handling VM region allocations for | ||||
|  * vmalloc and similar (ioremap, module space, etc). | ||||
|  * | ||||
|  * I envisage vmalloc()'s supporting vm_struct becoming: | ||||
|  * | ||||
|  *  struct vm_struct { | ||||
|  *    struct vm_region	region; | ||||
|  *    unsigned long	flags; | ||||
|  *    struct page	**pages; | ||||
|  *    unsigned int	nr_pages; | ||||
|  *    unsigned long	phys_addr; | ||||
|  *  }; | ||||
|  * | ||||
|  * get_vm_area() would then call vm_region_alloc with an appropriate | ||||
|  * struct vm_region head (eg): | ||||
|  * | ||||
|  *  struct vm_region vmalloc_head = { | ||||
|  *	.vm_list	= LIST_HEAD_INIT(vmalloc_head.vm_list), | ||||
|  *	.vm_start	= VMALLOC_START, | ||||
|  *	.vm_end		= VMALLOC_END, | ||||
|  *  }; | ||||
|  * | ||||
|  * However, vmalloc_head.vm_start is variable (typically, it is dependent on | ||||
|  * the amount of RAM found at boot time.)  I would imagine that get_vm_area() | ||||
|  * would have to initialise this each time prior to calling vm_region_alloc(). | ||||
|  */ | ||||
| struct ppc_vm_region { | ||||
| 	struct list_head	vm_list; | ||||
| 	unsigned long		vm_start; | ||||
| 	unsigned long		vm_end; | ||||
| }; | ||||
| 
 | ||||
| static struct ppc_vm_region consistent_head = { | ||||
| 	.vm_list	= LIST_HEAD_INIT(consistent_head.vm_list), | ||||
| 	.vm_start	= CONSISTENT_BASE, | ||||
| 	.vm_end		= CONSISTENT_END, | ||||
| }; | ||||
| 
 | ||||
| static struct ppc_vm_region * | ||||
| ppc_vm_region_alloc(struct ppc_vm_region *head, size_t size, gfp_t gfp) | ||||
| { | ||||
| 	unsigned long addr = head->vm_start, end = head->vm_end - size; | ||||
| 	unsigned long flags; | ||||
| 	struct ppc_vm_region *c, *new; | ||||
| 
 | ||||
| 	new = kmalloc(sizeof(struct ppc_vm_region), gfp); | ||||
| 	if (!new) | ||||
| 		goto out; | ||||
| 
 | ||||
| 	spin_lock_irqsave(&consistent_lock, flags); | ||||
| 
 | ||||
| 	list_for_each_entry(c, &head->vm_list, vm_list) { | ||||
| 		if ((addr + size) < addr) | ||||
| 			goto nospc; | ||||
| 		if ((addr + size) <= c->vm_start) | ||||
| 			goto found; | ||||
| 		addr = c->vm_end; | ||||
| 		if (addr > end) | ||||
| 			goto nospc; | ||||
| 	} | ||||
| 
 | ||||
|  found: | ||||
| 	/*
 | ||||
| 	 * Insert this entry _before_ the one we found. | ||||
| 	 */ | ||||
| 	list_add_tail(&new->vm_list, &c->vm_list); | ||||
| 	new->vm_start = addr; | ||||
| 	new->vm_end = addr + size; | ||||
| 
 | ||||
| 	spin_unlock_irqrestore(&consistent_lock, flags); | ||||
| 	return new; | ||||
| 
 | ||||
|  nospc: | ||||
| 	spin_unlock_irqrestore(&consistent_lock, flags); | ||||
| 	kfree(new); | ||||
|  out: | ||||
| 	return NULL; | ||||
| } | ||||
| 
 | ||||
| static struct ppc_vm_region *ppc_vm_region_find(struct ppc_vm_region *head, unsigned long addr) | ||||
| { | ||||
| 	struct ppc_vm_region *c; | ||||
| 
 | ||||
| 	list_for_each_entry(c, &head->vm_list, vm_list) { | ||||
| 		if (c->vm_start == addr) | ||||
| 			goto out; | ||||
| 	} | ||||
| 	c = NULL; | ||||
|  out: | ||||
| 	return c; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Allocate DMA-coherent memory space and return both the kernel remapped | ||||
|  * virtual and bus address for that space. | ||||
|  */ | ||||
| void * | ||||
| __dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp) | ||||
| { | ||||
| 	struct page *page; | ||||
| 	struct ppc_vm_region *c; | ||||
| 	unsigned long order; | ||||
| 	u64 mask = ISA_DMA_THRESHOLD, limit; | ||||
| 
 | ||||
| 	if (dev) { | ||||
| 		mask = dev->coherent_dma_mask; | ||||
| 
 | ||||
| 		/*
 | ||||
| 		 * Sanity check the DMA mask - it must be non-zero, and | ||||
| 		 * must be able to be satisfied by a DMA allocation. | ||||
| 		 */ | ||||
| 		if (mask == 0) { | ||||
| 			dev_warn(dev, "coherent DMA mask is unset\n"); | ||||
| 			goto no_page; | ||||
| 		} | ||||
| 
 | ||||
| 		if ((~mask) & ISA_DMA_THRESHOLD) { | ||||
| 			dev_warn(dev, "coherent DMA mask %#llx is smaller " | ||||
| 				 "than system GFP_DMA mask %#llx\n", | ||||
| 				 mask, (unsigned long long)ISA_DMA_THRESHOLD); | ||||
| 			goto no_page; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
| 	size = PAGE_ALIGN(size); | ||||
| 	limit = (mask + 1) & ~mask; | ||||
| 	if ((limit && size >= limit) || | ||||
| 	    size >= (CONSISTENT_END - CONSISTENT_BASE)) { | ||||
| 		printk(KERN_WARNING "coherent allocation too big (requested %#x mask %#Lx)\n", | ||||
| 		       size, mask); | ||||
| 		return NULL; | ||||
| 	} | ||||
| 
 | ||||
| 	order = get_order(size); | ||||
| 
 | ||||
| 	/* Might be useful if we ever have a real legacy DMA zone... */ | ||||
| 	if (mask != 0xffffffff) | ||||
| 		gfp |= GFP_DMA; | ||||
| 
 | ||||
| 	page = alloc_pages(gfp, order); | ||||
| 	if (!page) | ||||
| 		goto no_page; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Invalidate any data that might be lurking in the | ||||
| 	 * kernel direct-mapped region for device DMA. | ||||
| 	 */ | ||||
| 	{ | ||||
| 		unsigned long kaddr = (unsigned long)page_address(page); | ||||
| 		memset(page_address(page), 0, size); | ||||
| 		flush_dcache_range(kaddr, kaddr + size); | ||||
| 	} | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Allocate a virtual address in the consistent mapping region. | ||||
| 	 */ | ||||
| 	c = ppc_vm_region_alloc(&consistent_head, size, | ||||
| 			    gfp & ~(__GFP_DMA | __GFP_HIGHMEM)); | ||||
| 	if (c) { | ||||
| 		unsigned long vaddr = c->vm_start; | ||||
| 		struct page *end = page + (1 << order); | ||||
| 
 | ||||
| 		split_page(page, order); | ||||
| 
 | ||||
| 		/*
 | ||||
| 		 * Set the "dma handle" | ||||
| 		 */ | ||||
| 		*handle = page_to_phys(page); | ||||
| 
 | ||||
| 		do { | ||||
| 			SetPageReserved(page); | ||||
| 			map_page(vaddr, page_to_phys(page), | ||||
| 				 pgprot_noncached(PAGE_KERNEL)); | ||||
| 			page++; | ||||
| 			vaddr += PAGE_SIZE; | ||||
| 		} while (size -= PAGE_SIZE); | ||||
| 
 | ||||
| 		/*
 | ||||
| 		 * Free the otherwise unused pages. | ||||
| 		 */ | ||||
| 		while (page < end) { | ||||
| 			__free_page(page); | ||||
| 			page++; | ||||
| 		} | ||||
| 
 | ||||
| 		return (void *)c->vm_start; | ||||
| 	} | ||||
| 
 | ||||
| 	if (page) | ||||
| 		__free_pages(page, order); | ||||
|  no_page: | ||||
| 	return NULL; | ||||
| } | ||||
| EXPORT_SYMBOL(__dma_alloc_coherent); | ||||
| 
 | ||||
| /*
 | ||||
|  * free a page as defined by the above mapping. | ||||
|  */ | ||||
| void __dma_free_coherent(size_t size, void *vaddr) | ||||
| { | ||||
| 	struct ppc_vm_region *c; | ||||
| 	unsigned long flags, addr; | ||||
| 	 | ||||
| 	size = PAGE_ALIGN(size); | ||||
| 
 | ||||
| 	spin_lock_irqsave(&consistent_lock, flags); | ||||
| 
 | ||||
| 	c = ppc_vm_region_find(&consistent_head, (unsigned long)vaddr); | ||||
| 	if (!c) | ||||
| 		goto no_area; | ||||
| 
 | ||||
| 	if ((c->vm_end - c->vm_start) != size) { | ||||
| 		printk(KERN_ERR "%s: freeing wrong coherent size (%ld != %d)\n", | ||||
| 		       __func__, c->vm_end - c->vm_start, size); | ||||
| 		dump_stack(); | ||||
| 		size = c->vm_end - c->vm_start; | ||||
| 	} | ||||
| 
 | ||||
| 	addr = c->vm_start; | ||||
| 	do { | ||||
| 		pte_t *ptep; | ||||
| 		unsigned long pfn; | ||||
| 
 | ||||
| 		ptep = pte_offset_kernel(pmd_offset(pud_offset(pgd_offset_k(addr), | ||||
| 							       addr), | ||||
| 						    addr), | ||||
| 					 addr); | ||||
| 		if (!pte_none(*ptep) && pte_present(*ptep)) { | ||||
| 			pfn = pte_pfn(*ptep); | ||||
| 			pte_clear(&init_mm, addr, ptep); | ||||
| 			if (pfn_valid(pfn)) { | ||||
| 				struct page *page = pfn_to_page(pfn); | ||||
| 
 | ||||
| 				ClearPageReserved(page); | ||||
| 				__free_page(page); | ||||
| 			} | ||||
| 		} | ||||
| 		addr += PAGE_SIZE; | ||||
| 	} while (size -= PAGE_SIZE); | ||||
| 
 | ||||
| 	flush_tlb_kernel_range(c->vm_start, c->vm_end); | ||||
| 
 | ||||
| 	list_del(&c->vm_list); | ||||
| 
 | ||||
| 	spin_unlock_irqrestore(&consistent_lock, flags); | ||||
| 
 | ||||
| 	kfree(c); | ||||
| 	return; | ||||
| 
 | ||||
|  no_area: | ||||
| 	spin_unlock_irqrestore(&consistent_lock, flags); | ||||
| 	printk(KERN_ERR "%s: trying to free invalid coherent area: %p\n", | ||||
| 	       __func__, vaddr); | ||||
| 	dump_stack(); | ||||
| } | ||||
| EXPORT_SYMBOL(__dma_free_coherent); | ||||
| 
 | ||||
| /*
 | ||||
|  * make an area consistent. | ||||
|  */ | ||||
| void __dma_sync(void *vaddr, size_t size, int direction) | ||||
| { | ||||
| 	unsigned long start = (unsigned long)vaddr; | ||||
| 	unsigned long end   = start + size; | ||||
| 
 | ||||
| 	switch (direction) { | ||||
| 	case DMA_NONE: | ||||
| 		BUG(); | ||||
| 	case DMA_FROM_DEVICE: | ||||
| 		/*
 | ||||
| 		 * invalidate only when cache-line aligned otherwise there is | ||||
| 		 * the potential for discarding uncommitted data from the cache | ||||
| 		 */ | ||||
| 		if ((start & (L1_CACHE_BYTES - 1)) || (size & (L1_CACHE_BYTES - 1))) | ||||
| 			flush_dcache_range(start, end); | ||||
| 		else | ||||
| 			invalidate_dcache_range(start, end); | ||||
| 		break; | ||||
| 	case DMA_TO_DEVICE:		/* writeback only */ | ||||
| 		clean_dcache_range(start, end); | ||||
| 		break; | ||||
| 	case DMA_BIDIRECTIONAL:	/* writeback and invalidate */ | ||||
| 		flush_dcache_range(start, end); | ||||
| 		break; | ||||
| 	} | ||||
| } | ||||
| EXPORT_SYMBOL(__dma_sync); | ||||
| 
 | ||||
| #ifdef CONFIG_HIGHMEM | ||||
| /*
 | ||||
|  * __dma_sync_page() implementation for systems using highmem. | ||||
|  * In this case, each page of a buffer must be kmapped/kunmapped | ||||
|  * in order to have a virtual address for __dma_sync(). This must | ||||
|  * not sleep so kmap_atomic()/kunmap_atomic() are used. | ||||
|  * | ||||
|  * Note: yes, it is possible and correct to have a buffer extend | ||||
|  * beyond the first page. | ||||
|  */ | ||||
| static inline void __dma_sync_page_highmem(struct page *page, | ||||
| 		unsigned long offset, size_t size, int direction) | ||||
| { | ||||
| 	size_t seg_size = min((size_t)(PAGE_SIZE - offset), size); | ||||
| 	size_t cur_size = seg_size; | ||||
| 	unsigned long flags, start, seg_offset = offset; | ||||
| 	int nr_segs = 1 + ((size - seg_size) + PAGE_SIZE - 1)/PAGE_SIZE; | ||||
| 	int seg_nr = 0; | ||||
| 
 | ||||
| 	local_irq_save(flags); | ||||
| 
 | ||||
| 	do { | ||||
| 		start = (unsigned long)kmap_atomic(page + seg_nr, | ||||
| 				KM_PPC_SYNC_PAGE) + seg_offset; | ||||
| 
 | ||||
| 		/* Sync this buffer segment */ | ||||
| 		__dma_sync((void *)start, seg_size, direction); | ||||
| 		kunmap_atomic((void *)start, KM_PPC_SYNC_PAGE); | ||||
| 		seg_nr++; | ||||
| 
 | ||||
| 		/* Calculate next buffer segment size */ | ||||
| 		seg_size = min((size_t)PAGE_SIZE, size - cur_size); | ||||
| 
 | ||||
| 		/* Add the segment size to our running total */ | ||||
| 		cur_size += seg_size; | ||||
| 		seg_offset = 0; | ||||
| 	} while (seg_nr < nr_segs); | ||||
| 
 | ||||
| 	local_irq_restore(flags); | ||||
| } | ||||
| #endif /* CONFIG_HIGHMEM */ | ||||
| 
 | ||||
| /*
 | ||||
|  * __dma_sync_page makes memory consistent. identical to __dma_sync, but | ||||
|  * takes a struct page instead of a virtual address | ||||
|  */ | ||||
| void __dma_sync_page(struct page *page, unsigned long offset, | ||||
| 	size_t size, int direction) | ||||
| { | ||||
| #ifdef CONFIG_HIGHMEM | ||||
| 	__dma_sync_page_highmem(page, offset, size, direction); | ||||
| #else | ||||
| 	unsigned long start = (unsigned long)page_address(page) + offset; | ||||
| 	__dma_sync((void *)start, size, direction); | ||||
| #endif | ||||
| } | ||||
| EXPORT_SYMBOL(__dma_sync_page); | ||||
| @ -168,12 +168,8 @@ void __init MMU_init(void) | ||||
| 		ppc_md.progress("MMU:mapin", 0x301); | ||||
| 	mapin_ram(); | ||||
| 
 | ||||
| #ifdef CONFIG_HIGHMEM | ||||
| 	ioremap_base = PKMAP_BASE; | ||||
| #else | ||||
| 	ioremap_base = 0xfe000000UL;	/* for now, could be 0xfffff000 */ | ||||
| #endif /* CONFIG_HIGHMEM */ | ||||
| 	ioremap_bot = ioremap_base; | ||||
| 	/* Initialize early top-down ioremap allocator */ | ||||
| 	ioremap_bot = IOREMAP_TOP; | ||||
| 
 | ||||
| 	/* Map in I/O resources */ | ||||
| 	if (ppc_md.progress) | ||||
|  | ||||
| @ -380,6 +380,23 @@ void __init mem_init(void) | ||||
| 		bsssize >> 10, | ||||
| 		initsize >> 10); | ||||
| 
 | ||||
| #ifdef CONFIG_PPC32 | ||||
| 	pr_info("Kernel virtual memory layout:\n"); | ||||
| 	pr_info("  * 0x%08lx..0x%08lx  : fixmap\n", FIXADDR_START, FIXADDR_TOP); | ||||
| #ifdef CONFIG_HIGHMEM | ||||
| 	pr_info("  * 0x%08lx..0x%08lx  : highmem PTEs\n", | ||||
| 		PKMAP_BASE, PKMAP_ADDR(LAST_PKMAP)); | ||||
| #endif /* CONFIG_HIGHMEM */ | ||||
| #ifdef CONFIG_NOT_COHERENT_CACHE | ||||
| 	pr_info("  * 0x%08lx..0x%08lx  : consistent mem\n", | ||||
| 		IOREMAP_TOP, IOREMAP_TOP + CONFIG_CONSISTENT_SIZE); | ||||
| #endif /* CONFIG_NOT_COHERENT_CACHE */ | ||||
| 	pr_info("  * 0x%08lx..0x%08lx  : early ioremap\n", | ||||
| 		ioremap_bot, IOREMAP_TOP); | ||||
| 	pr_info("  * 0x%08lx..0x%08lx  : vmalloc & ioremap\n", | ||||
| 		VMALLOC_START, VMALLOC_END); | ||||
| #endif /* CONFIG_PPC32 */ | ||||
| 
 | ||||
| 	mem_init_done = 1; | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -127,12 +127,12 @@ static unsigned int steal_context_up(unsigned int id) | ||||
| 
 | ||||
| 	pr_debug("[%d] steal context %d from mm @%p\n", cpu, id, mm); | ||||
| 
 | ||||
| 	/* Mark this mm has having no context anymore */ | ||||
| 	mm->context.id = MMU_NO_CONTEXT; | ||||
| 
 | ||||
| 	/* Flush the TLB for that context */ | ||||
| 	local_flush_tlb_mm(mm); | ||||
| 
 | ||||
| 	/* Mark this mm has having no context anymore */ | ||||
| 	mm->context.id = MMU_NO_CONTEXT; | ||||
| 
 | ||||
| 	/* XXX This clear should ultimately be part of local_flush_tlb_mm */ | ||||
| 	__clear_bit(id, stale_map[cpu]); | ||||
| 
 | ||||
|  | ||||
| @ -399,8 +399,6 @@ void kernel_map_pages(struct page *page, int numpages, int enable) | ||||
| #endif /* CONFIG_DEBUG_PAGEALLOC */ | ||||
| 
 | ||||
| static int fixmaps; | ||||
| unsigned long FIXADDR_TOP = (-PAGE_SIZE); | ||||
| EXPORT_SYMBOL(FIXADDR_TOP); | ||||
| 
 | ||||
| void __set_fixmap (enum fixed_addresses idx, phys_addr_t phys, pgprot_t flags) | ||||
| { | ||||
|  | ||||
| @ -592,3 +592,17 @@ int maple_pci_get_legacy_ide_irq(struct pci_dev *pdev, int channel) | ||||
| 	} | ||||
| 	return irq; | ||||
| } | ||||
| 
 | ||||
| static void __devinit quirk_ipr_msi(struct pci_dev *dev) | ||||
| { | ||||
| 	/* Something prevents MSIs from the IPR from working on Bimini,
 | ||||
| 	 * and the driver has no smarts to recover. So disable MSI | ||||
| 	 * on it for now. */ | ||||
| 
 | ||||
| 	if (machine_is(maple)) { | ||||
| 		dev->no_msi = 1; | ||||
| 		dev_info(&dev->dev, "Quirk disabled MSI\n"); | ||||
| 	} | ||||
| } | ||||
| DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_OBSIDIAN, | ||||
| 			quirk_ipr_msi); | ||||
|  | ||||
| @ -263,6 +263,9 @@ static int camera_probe(void) | ||||
| 	struct i2c_msg msg; | ||||
| 	int ret; | ||||
| 
 | ||||
| 	if (!a) | ||||
| 		return -ENODEV; | ||||
| 
 | ||||
| 	camera_power(1); | ||||
| 	msg.addr = 0x6e; | ||||
| 	msg.buf = camera_ncm03j_magic; | ||||
|  | ||||
| @ -12,7 +12,6 @@ | ||||
| #ifndef __ASM_SH_FLAT_H | ||||
| #define __ASM_SH_FLAT_H | ||||
| 
 | ||||
| #define	flat_stack_align(sp)			/* nothing needed */ | ||||
| #define	flat_argvp_envp_on_stack()		0 | ||||
| #define	flat_old_ram_flag(flags)		(flags) | ||||
| #define	flat_reloc_valid(reloc, size)		((reloc) <= (size)) | ||||
|  | ||||
| @ -208,8 +208,9 @@ do {	unsigned long new_flags = current_thread_info()->flags; \ | ||||
| 	else						\ | ||||
| 		clear_thread_flag(TIF_ABI_PENDING);	\ | ||||
| 	/* flush_thread will update pgd cache */	\ | ||||
| 	if (current->personality != PER_LINUX32)	\ | ||||
| 		set_personality(PER_LINUX);		\ | ||||
| 	if (personality(current->personality) != PER_LINUX32)	\ | ||||
| 		set_personality(PER_LINUX |		\ | ||||
| 			(current->personality & (~PER_MASK)));	\ | ||||
| } while (0) | ||||
| 
 | ||||
| #endif /* !(__ASM_SPARC64_ELF_H) */ | ||||
|  | ||||
| @ -5,7 +5,7 @@ | ||||
| 
 | ||||
| #define EX_LD(x)		\ | ||||
| 98:	x;			\
 | ||||
| 	.section .fixup;	\
 | ||||
| 	.section .fixup, "ax";	\
 | ||||
| 	.align 4;		\
 | ||||
| 99:	retl;			\
 | ||||
| 	 mov	-1, %o0;	\
 | ||||
|  | ||||
| @ -5,7 +5,7 @@ | ||||
| 
 | ||||
| #define EX_ST(x)		\ | ||||
| 98:	x;			\
 | ||||
| 	.section .fixup;	\
 | ||||
| 	.section .fixup,"ax";	\
 | ||||
| 	.align 4;		\
 | ||||
| 99:	retl;			\
 | ||||
| 	 mov	-1, %o0;	\
 | ||||
|  | ||||
| @ -504,8 +504,11 @@ static void walk_relocs(void (*visit)(Elf32_Rel *rel, Elf32_Sym *sym)) | ||||
| 			if (sym->st_shndx == SHN_ABS) { | ||||
| 				continue; | ||||
| 			} | ||||
| 			if (r_type == R_386_PC32) { | ||||
| 				/* PC relative relocations don't need to be adjusted */ | ||||
| 			if (r_type == R_386_NONE || r_type == R_386_PC32) { | ||||
| 				/*
 | ||||
| 				 * NONE can be ignored and and PC relative | ||||
| 				 * relocations don't need to be adjusted. | ||||
| 				 */ | ||||
| 			} | ||||
| 			else if (r_type == R_386_32) { | ||||
| 				/* Visit relocations that need to be adjusted */ | ||||
|  | ||||
| @ -17,11 +17,6 @@ | ||||
| 
 | ||||
| #define SMAP	0x534d4150	/* ASCII "SMAP" */ | ||||
| 
 | ||||
| struct e820_ext_entry { | ||||
| 	struct e820entry std; | ||||
| 	u32 ext_flags; | ||||
| } __attribute__((packed)); | ||||
| 
 | ||||
| static int detect_memory_e820(void) | ||||
| { | ||||
| 	int count = 0; | ||||
| @ -29,13 +24,21 @@ static int detect_memory_e820(void) | ||||
| 	u32 size, id, edi; | ||||
| 	u8 err; | ||||
| 	struct e820entry *desc = boot_params.e820_map; | ||||
| 	static struct e820_ext_entry buf; /* static so it is zeroed */ | ||||
| 	static struct e820entry buf; /* static so it is zeroed */ | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Set this here so that if the BIOS doesn't change this field | ||||
| 	 * but still doesn't change %ecx, we're still okay... | ||||
| 	 * Note: at least one BIOS is known which assumes that the | ||||
| 	 * buffer pointed to by one e820 call is the same one as | ||||
| 	 * the previous call, and only changes modified fields.  Therefore, | ||||
| 	 * we use a temporary buffer and copy the results entry by entry. | ||||
| 	 * | ||||
| 	 * This routine deliberately does not try to account for | ||||
| 	 * ACPI 3+ extended attributes.  This is because there are | ||||
| 	 * BIOSes in the field which report zero for the valid bit for | ||||
| 	 * all ranges, and we don't currently make any use of the | ||||
| 	 * other attribute bits.  Revisit this if we see the extended | ||||
| 	 * attribute bits deployed in a meaningful way in the future. | ||||
| 	 */ | ||||
| 	buf.ext_flags = 1; | ||||
| 
 | ||||
| 	do { | ||||
| 		size = sizeof buf; | ||||
| @ -66,13 +69,7 @@ static int detect_memory_e820(void) | ||||
| 			break; | ||||
| 		} | ||||
| 
 | ||||
| 		/* ACPI 3.0 added the extended flags support.  If bit 0
 | ||||
| 		   in the extended flags is zero, we're supposed to simply | ||||
| 		   ignore the entry -- a backwards incompatible change! */ | ||||
| 		if (size > 20 && !(buf.ext_flags & 1)) | ||||
| 			continue; | ||||
| 
 | ||||
| 		*desc++ = buf.std; | ||||
| 		*desc++ = buf; | ||||
| 		count++; | ||||
| 	} while (next && count < ARRAY_SIZE(boot_params.e820_map)); | ||||
| 
 | ||||
|  | ||||
| @ -114,6 +114,13 @@ DEFINE_PER_CPU_PAGE_ALIGNED(struct gdt_page, gdt_page) = { .gdt = { | ||||
| } }; | ||||
| EXPORT_PER_CPU_SYMBOL_GPL(gdt_page); | ||||
| 
 | ||||
| static int __init x86_xsave_setup(char *s) | ||||
| { | ||||
| 	setup_clear_cpu_cap(X86_FEATURE_XSAVE); | ||||
| 	return 1; | ||||
| } | ||||
| __setup("noxsave", x86_xsave_setup); | ||||
| 
 | ||||
| #ifdef CONFIG_X86_32 | ||||
| static int cachesize_override __cpuinitdata = -1; | ||||
| static int disable_x86_serial_nr __cpuinitdata = 1; | ||||
|  | ||||
| @ -693,8 +693,8 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy) | ||||
| 	if (perf->control_register.space_id == ACPI_ADR_SPACE_FIXED_HARDWARE && | ||||
| 	    policy->cpuinfo.transition_latency > 20 * 1000) { | ||||
| 		policy->cpuinfo.transition_latency = 20 * 1000; | ||||
| 			printk_once(KERN_INFO "Capping off P-state tranision" | ||||
| 				    " latency at 20 uS\n"); | ||||
| 		printk_once(KERN_INFO | ||||
| 			    "P-state transition latency capped at 20 uS\n"); | ||||
| 	} | ||||
| 
 | ||||
| 	/* table init */ | ||||
|  | ||||
| @ -168,6 +168,7 @@ static unsigned int cpufreq_p4_get_frequency(struct cpuinfo_x86 *c) | ||||
| 		case 0x0E: /* Core */ | ||||
| 		case 0x0F: /* Core Duo */ | ||||
| 		case 0x16: /* Celeron Core */ | ||||
| 		case 0x1C: /* Atom */ | ||||
| 			p4clockmod_driver.flags |= CPUFREQ_CONST_LOOPS; | ||||
| 			return speedstep_get_frequency(SPEEDSTEP_CPU_PCORE); | ||||
| 		case 0x0D: /* Pentium M (Dothan) */ | ||||
|  | ||||
| @ -168,10 +168,12 @@ static int check_powernow(void) | ||||
| 	return 1; | ||||
| } | ||||
| 
 | ||||
| #ifdef CONFIG_X86_POWERNOW_K7_ACPI | ||||
| static void invalidate_entry(unsigned int entry) | ||||
| { | ||||
| 	powernow_table[entry].frequency = CPUFREQ_ENTRY_INVALID; | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| static int get_ranges(unsigned char *pst) | ||||
| { | ||||
|  | ||||
| @ -649,6 +649,20 @@ static void print_basics(struct powernow_k8_data *data) | ||||
| 				data->batps); | ||||
| } | ||||
| 
 | ||||
| static u32 freq_from_fid_did(u32 fid, u32 did) | ||||
| { | ||||
| 	u32 mhz = 0; | ||||
| 
 | ||||
| 	if (boot_cpu_data.x86 == 0x10) | ||||
| 		mhz = (100 * (fid + 0x10)) >> did; | ||||
| 	else if (boot_cpu_data.x86 == 0x11) | ||||
| 		mhz = (100 * (fid + 8)) >> did; | ||||
| 	else | ||||
| 		BUG(); | ||||
| 
 | ||||
| 	return mhz * 1000; | ||||
| } | ||||
| 
 | ||||
| static int fill_powernow_table(struct powernow_k8_data *data, | ||||
| 		struct pst_s *pst, u8 maxvid) | ||||
| { | ||||
| @ -821,7 +835,7 @@ static int powernow_k8_cpu_init_acpi(struct powernow_k8_data *data) | ||||
| { | ||||
| 	struct cpufreq_frequency_table *powernow_table; | ||||
| 	int ret_val = -ENODEV; | ||||
| 	acpi_integer space_id; | ||||
| 	acpi_integer control, status; | ||||
| 
 | ||||
| 	if (acpi_processor_register_performance(&data->acpi_data, data->cpu)) { | ||||
| 		dprintk("register performance failed: bad ACPI data\n"); | ||||
| @ -834,12 +848,13 @@ static int powernow_k8_cpu_init_acpi(struct powernow_k8_data *data) | ||||
| 		goto err_out; | ||||
| 	} | ||||
| 
 | ||||
| 	space_id = data->acpi_data.control_register.space_id; | ||||
| 	if ((space_id != ACPI_ADR_SPACE_FIXED_HARDWARE) || | ||||
| 		(space_id != ACPI_ADR_SPACE_FIXED_HARDWARE)) { | ||||
| 	control = data->acpi_data.control_register.space_id; | ||||
| 	status = data->acpi_data.status_register.space_id; | ||||
| 
 | ||||
| 	if ((control != ACPI_ADR_SPACE_FIXED_HARDWARE) || | ||||
| 	    (status != ACPI_ADR_SPACE_FIXED_HARDWARE)) { | ||||
| 		dprintk("Invalid control/status registers (%x - %x)\n", | ||||
| 			data->acpi_data.control_register.space_id, | ||||
| 			space_id); | ||||
| 			control, status); | ||||
| 		goto err_out; | ||||
| 	} | ||||
| 
 | ||||
| @ -923,8 +938,13 @@ static int fill_powernow_table_pstate(struct powernow_k8_data *data, | ||||
| 
 | ||||
| 		powernow_table[i].index = index; | ||||
| 
 | ||||
| 		powernow_table[i].frequency = | ||||
| 			data->acpi_data.states[i].core_frequency * 1000; | ||||
| 		/* Frequency may be rounded for these */ | ||||
| 		if (boot_cpu_data.x86 == 0x10 || boot_cpu_data.x86 == 0x11) { | ||||
| 			powernow_table[i].frequency = | ||||
| 				freq_from_fid_did(lo & 0x3f, (lo >> 6) & 7); | ||||
| 		} else | ||||
| 			powernow_table[i].frequency = | ||||
| 				data->acpi_data.states[i].core_frequency * 1000; | ||||
| 	} | ||||
| 	return 0; | ||||
| } | ||||
| @ -1215,13 +1235,16 @@ static int powernowk8_verify(struct cpufreq_policy *pol) | ||||
| 	return cpufreq_frequency_table_verify(pol, data->powernow_table); | ||||
| } | ||||
| 
 | ||||
| static const char ACPI_PSS_BIOS_BUG_MSG[] = | ||||
| 	KERN_ERR FW_BUG PFX "No compatible ACPI _PSS objects found.\n" | ||||
| 	KERN_ERR FW_BUG PFX "Try again with latest BIOS.\n"; | ||||
| 
 | ||||
| /* per CPU init entry point to the driver */ | ||||
| static int __cpuinit powernowk8_cpu_init(struct cpufreq_policy *pol) | ||||
| { | ||||
| 	struct powernow_k8_data *data; | ||||
| 	cpumask_t oldmask; | ||||
| 	int rc; | ||||
| 	static int print_once; | ||||
| 
 | ||||
| 	if (!cpu_online(pol->cpu)) | ||||
| 		return -ENODEV; | ||||
| @ -1244,19 +1267,7 @@ static int __cpuinit powernowk8_cpu_init(struct cpufreq_policy *pol) | ||||
| 		 * an UP version, and is deprecated by AMD. | ||||
| 		 */ | ||||
| 		if (num_online_cpus() != 1) { | ||||
| 			/*
 | ||||
| 			 * Replace this one with print_once as soon as such a | ||||
| 			 * thing gets introduced | ||||
| 			 */ | ||||
| 			if (!print_once) { | ||||
| 				WARN_ONCE(1, KERN_ERR FW_BUG PFX "Your BIOS " | ||||
| 					"does not provide ACPI _PSS objects " | ||||
| 					"in a way that Linux understands. " | ||||
| 					"Please report this to the Linux ACPI" | ||||
| 					" maintainers and complain to your " | ||||
| 					"BIOS vendor.\n"); | ||||
| 				print_once++; | ||||
| 			} | ||||
| 			printk_once(ACPI_PSS_BIOS_BUG_MSG); | ||||
| 			goto err_out; | ||||
| 		} | ||||
| 		if (pol->cpu != 0) { | ||||
|  | ||||
| @ -232,6 +232,14 @@ static struct dmi_system_id __initdata reboot_dmi_table[] = { | ||||
| 			DMI_MATCH(DMI_PRODUCT_NAME, "Dell DXP061"), | ||||
| 		}, | ||||
| 	}, | ||||
| 	{	/* Handle problems with rebooting on Sony VGN-Z540N */ | ||||
| 		.callback = set_bios_reboot, | ||||
| 		.ident = "Sony VGN-Z540N", | ||||
| 		.matches = { | ||||
| 			DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), | ||||
| 			DMI_MATCH(DMI_PRODUCT_NAME, "VGN-Z540N"), | ||||
| 		}, | ||||
| 	}, | ||||
| 	{ } | ||||
| }; | ||||
| 
 | ||||
|  | ||||
| @ -160,8 +160,10 @@ static ssize_t __init setup_pcpu_remap(size_t static_size) | ||||
| 	/*
 | ||||
| 	 * If large page isn't supported, there's no benefit in doing | ||||
| 	 * this.  Also, on non-NUMA, embedding is better. | ||||
| 	 * | ||||
| 	 * NOTE: disabled for now. | ||||
| 	 */ | ||||
| 	if (!cpu_has_pse || !pcpu_need_numa()) | ||||
| 	if (true || !cpu_has_pse || !pcpu_need_numa()) | ||||
| 		return -EINVAL; | ||||
| 
 | ||||
| 	/*
 | ||||
|  | ||||
| @ -2897,8 +2897,7 @@ static int kvm_pv_mmu_write(struct kvm_vcpu *vcpu, | ||||
| 
 | ||||
| static int kvm_pv_mmu_flush_tlb(struct kvm_vcpu *vcpu) | ||||
| { | ||||
| 	kvm_x86_ops->tlb_flush(vcpu); | ||||
| 	set_bit(KVM_REQ_MMU_SYNC, &vcpu->requests); | ||||
| 	kvm_set_cr3(vcpu, vcpu->arch.cr3); | ||||
| 	return 1; | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -338,6 +338,9 @@ EXPORT_SYMBOL_GPL(kvm_lmsw); | ||||
| 
 | ||||
| void kvm_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4) | ||||
| { | ||||
| 	unsigned long old_cr4 = vcpu->arch.cr4; | ||||
| 	unsigned long pdptr_bits = X86_CR4_PGE | X86_CR4_PSE | X86_CR4_PAE; | ||||
| 
 | ||||
| 	if (cr4 & CR4_RESERVED_BITS) { | ||||
| 		printk(KERN_DEBUG "set_cr4: #GP, reserved bits\n"); | ||||
| 		kvm_inject_gp(vcpu, 0); | ||||
| @ -351,7 +354,8 @@ void kvm_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4) | ||||
| 			kvm_inject_gp(vcpu, 0); | ||||
| 			return; | ||||
| 		} | ||||
| 	} else if (is_paging(vcpu) && !is_pae(vcpu) && (cr4 & X86_CR4_PAE) | ||||
| 	} else if (is_paging(vcpu) && (cr4 & X86_CR4_PAE) | ||||
| 		   && ((cr4 ^ old_cr4) & pdptr_bits) | ||||
| 		   && !load_pdptrs(vcpu, vcpu->arch.cr3)) { | ||||
| 		printk(KERN_DEBUG "set_cr4: #GP, pdptrs reserved bits\n"); | ||||
| 		kvm_inject_gp(vcpu, 0); | ||||
|  | ||||
| @ -1 +1,2 @@ | ||||
| obj-y		:= i386_head.o boot.o | ||||
| CFLAGS_boot.o	:= $(call cc-option, -fno-stack-protector) | ||||
|  | ||||
| @ -67,6 +67,7 @@ | ||||
| #include <asm/mce.h> | ||||
| #include <asm/io.h> | ||||
| #include <asm/i387.h> | ||||
| #include <asm/stackprotector.h> | ||||
| #include <asm/reboot.h>		/* for struct machine_ops */ | ||||
| 
 | ||||
| /*G:010 Welcome to the Guest!
 | ||||
| @ -1088,13 +1089,21 @@ __init void lguest_init(void) | ||||
| 	 * lguest_init() where the rest of the fairly chaotic boot setup | ||||
| 	 * occurs. */ | ||||
| 
 | ||||
| 	/* The stack protector is a weird thing where gcc places a canary
 | ||||
| 	 * value on the stack and then checks it on return.  This file is | ||||
| 	 * compiled with -fno-stack-protector it, so we got this far without | ||||
| 	 * problems.  The value of the canary is kept at offset 20 from the | ||||
| 	 * %gs register, so we need to set that up before calling C functions | ||||
| 	 * in other files. */ | ||||
| 	setup_stack_canary_segment(0); | ||||
| 	/* We could just call load_stack_canary_segment(), but we might as
 | ||||
| 	 * call switch_to_new_gdt() which loads the whole table and sets up | ||||
| 	 * the per-cpu segment descriptor register %fs as well. */ | ||||
| 	switch_to_new_gdt(0); | ||||
| 
 | ||||
| 	/* As described in head_32.S, we map the first 128M of memory. */ | ||||
| 	max_pfn_mapped = (128*1024*1024) >> PAGE_SHIFT; | ||||
| 
 | ||||
| 	/* Load the %fs segment register (the per-cpu segment register) with
 | ||||
| 	 * the normal data segment to get through booting. */ | ||||
| 	asm volatile ("mov %0, %%fs" : : "r" (__KERNEL_DS) : "memory"); | ||||
| 
 | ||||
| 	/* The Host<->Guest Switcher lives at the top of our address space, and
 | ||||
| 	 * the Host told us how big it is when we made LGUEST_INIT hypercall: | ||||
| 	 * it put the answer in lguest_data.reserve_mem  */ | ||||
|  | ||||
| @ -26,12 +26,16 @@ static unsigned long page_table_shareable(struct vm_area_struct *svma, | ||||
| 	unsigned long sbase = saddr & PUD_MASK; | ||||
| 	unsigned long s_end = sbase + PUD_SIZE; | ||||
| 
 | ||||
| 	/* Allow segments to share if only one is marked locked */ | ||||
| 	unsigned long vm_flags = vma->vm_flags & ~VM_LOCKED; | ||||
| 	unsigned long svm_flags = svma->vm_flags & ~VM_LOCKED; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * match the virtual addresses, permission and the alignment of the | ||||
| 	 * page table page. | ||||
| 	 */ | ||||
| 	if (pmd_index(addr) != pmd_index(saddr) || | ||||
| 	    vma->vm_flags != svma->vm_flags || | ||||
| 	    vm_flags != svm_flags || | ||||
| 	    sbase < svma->vm_start || svma->vm_end < s_end) | ||||
| 		return 0; | ||||
| 
 | ||||
|  | ||||
| @ -153,7 +153,7 @@ static void __cpa_flush_all(void *arg) | ||||
| 	 */ | ||||
| 	__flush_tlb_all(); | ||||
| 
 | ||||
| 	if (cache && boot_cpu_data.x86_model >= 4) | ||||
| 	if (cache && boot_cpu_data.x86 >= 4) | ||||
| 		wbinvd(); | ||||
| } | ||||
| 
 | ||||
| @ -208,20 +208,15 @@ static void cpa_flush_array(unsigned long *start, int numpages, int cache, | ||||
| 			    int in_flags, struct page **pages) | ||||
| { | ||||
| 	unsigned int i, level; | ||||
| 	unsigned long do_wbinvd = cache && numpages >= 1024; /* 4M threshold */ | ||||
| 
 | ||||
| 	BUG_ON(irqs_disabled()); | ||||
| 
 | ||||
| 	on_each_cpu(__cpa_flush_range, NULL, 1); | ||||
| 	on_each_cpu(__cpa_flush_all, (void *) do_wbinvd, 1); | ||||
| 
 | ||||
| 	if (!cache) | ||||
| 	if (!cache || do_wbinvd) | ||||
| 		return; | ||||
| 
 | ||||
| 	/* 4M threshold */ | ||||
| 	if (numpages >= 1024) { | ||||
| 		if (boot_cpu_data.x86_model >= 4) | ||||
| 			wbinvd(); | ||||
| 		return; | ||||
| 	} | ||||
| 	/*
 | ||||
| 	 * We only need to flush on one CPU, | ||||
| 	 * clflush is a MESI-coherent instruction that | ||||
|  | ||||
| @ -375,7 +375,7 @@ static acpi_status __init check_mcfg_resource(struct acpi_resource *res, | ||||
| 		if (!fixmem32) | ||||
| 			return AE_OK; | ||||
| 		if ((mcfg_res->start >= fixmem32->address) && | ||||
| 		    (mcfg_res->end <= (fixmem32->address + | ||||
| 		    (mcfg_res->end < (fixmem32->address + | ||||
| 				      fixmem32->address_length))) { | ||||
| 			mcfg_res->flags = 1; | ||||
| 			return AE_CTRL_TERMINATE; | ||||
| @ -392,7 +392,7 @@ static acpi_status __init check_mcfg_resource(struct acpi_resource *res, | ||||
| 		return AE_OK; | ||||
| 
 | ||||
| 	if ((mcfg_res->start >= address.minimum) && | ||||
| 	    (mcfg_res->end <= (address.minimum + address.address_length))) { | ||||
| 	    (mcfg_res->end < (address.minimum + address.address_length))) { | ||||
| 		mcfg_res->flags = 1; | ||||
| 		return AE_CTRL_TERMINATE; | ||||
| 	} | ||||
| @ -418,7 +418,7 @@ static int __init is_acpi_reserved(u64 start, u64 end, unsigned not_used) | ||||
| 	struct resource mcfg_res; | ||||
| 
 | ||||
| 	mcfg_res.start = start; | ||||
| 	mcfg_res.end = end; | ||||
| 	mcfg_res.end = end - 1; | ||||
| 	mcfg_res.flags = 0; | ||||
| 
 | ||||
| 	acpi_get_devices("PNP0C01", find_mboard_resource, &mcfg_res, NULL); | ||||
|  | ||||
| @ -82,10 +82,11 @@ int crypto_hash_walk_done(struct crypto_hash_walk *walk, int err) | ||||
| 	if (err) | ||||
| 		return err; | ||||
| 
 | ||||
| 	walk->offset = 0; | ||||
| 
 | ||||
| 	if (nbytes) | ||||
| 	if (nbytes) { | ||||
| 		walk->offset = 0; | ||||
| 		walk->pg++; | ||||
| 		return hash_walk_next(walk); | ||||
| 	} | ||||
| 
 | ||||
| 	if (!walk->total) | ||||
| 		return 0; | ||||
|  | ||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
		Reference in New Issue
	
	Block a user