Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts: drivers/net/usb/qmi_wwan.c include/net/dst.h Trivial merge conflicts, both were overlapping changes. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
						commit
						c3fa32b976
					
				| @ -37,8 +37,8 @@ Description: | ||||
| 		that the USB device has been connected to the machine.  This | ||||
| 		file is read-only. | ||||
| Users: | ||||
| 		PowerTOP <power@bughost.org> | ||||
| 		http://www.lesswatts.org/projects/powertop/ | ||||
| 		PowerTOP <powertop@lists.01.org> | ||||
| 		https://01.org/powertop/ | ||||
| 
 | ||||
| What:		/sys/bus/usb/device/.../power/active_duration | ||||
| Date:		January 2008 | ||||
| @ -57,8 +57,8 @@ Description: | ||||
| 		will give an integer percentage.  Note that this does not | ||||
| 		account for counter wrap. | ||||
| Users: | ||||
| 		PowerTOP <power@bughost.org> | ||||
| 		http://www.lesswatts.org/projects/powertop/ | ||||
| 		PowerTOP <powertop@lists.01.org> | ||||
| 		https://01.org/powertop/ | ||||
| 
 | ||||
| What:		/sys/bus/usb/devices/<busnum>-<port[.port]>...:<config num>-<interface num>/supports_autosuspend | ||||
| Date:		January 2008 | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| What:		/sys/devices/.../power/ | ||||
| Date:		January 2009 | ||||
| Contact:	Rafael J. Wysocki <rjw@sisk.pl> | ||||
| Contact:	Rafael J. Wysocki <rjw@rjwysocki.net> | ||||
| Description: | ||||
| 		The /sys/devices/.../power directory contains attributes | ||||
| 		allowing the user space to check and modify some power | ||||
| @ -8,7 +8,7 @@ Description: | ||||
| 
 | ||||
| What:		/sys/devices/.../power/wakeup | ||||
| Date:		January 2009 | ||||
| Contact:	Rafael J. Wysocki <rjw@sisk.pl> | ||||
| Contact:	Rafael J. Wysocki <rjw@rjwysocki.net> | ||||
| Description: | ||||
| 		The /sys/devices/.../power/wakeup attribute allows the user | ||||
| 		space to check if the device is enabled to wake up the system | ||||
| @ -34,7 +34,7 @@ Description: | ||||
| 
 | ||||
| What:		/sys/devices/.../power/control | ||||
| Date:		January 2009 | ||||
| Contact:	Rafael J. Wysocki <rjw@sisk.pl> | ||||
| Contact:	Rafael J. Wysocki <rjw@rjwysocki.net> | ||||
| Description: | ||||
| 		The /sys/devices/.../power/control attribute allows the user | ||||
| 		space to control the run-time power management of the device. | ||||
| @ -53,7 +53,7 @@ Description: | ||||
| 
 | ||||
| What:		/sys/devices/.../power/async | ||||
| Date:		January 2009 | ||||
| Contact:	Rafael J. Wysocki <rjw@sisk.pl> | ||||
| Contact:	Rafael J. Wysocki <rjw@rjwysocki.net> | ||||
| Description: | ||||
| 		The /sys/devices/.../async attribute allows the user space to | ||||
| 		enable or diasble the device's suspend and resume callbacks to | ||||
| @ -79,7 +79,7 @@ Description: | ||||
| 
 | ||||
| What:		/sys/devices/.../power/wakeup_count | ||||
| Date:		September 2010 | ||||
| Contact:	Rafael J. Wysocki <rjw@sisk.pl> | ||||
| Contact:	Rafael J. Wysocki <rjw@rjwysocki.net> | ||||
| Description: | ||||
| 		The /sys/devices/.../wakeup_count attribute contains the number | ||||
| 		of signaled wakeup events associated with the device.  This | ||||
| @ -88,7 +88,7 @@ Description: | ||||
| 
 | ||||
| What:		/sys/devices/.../power/wakeup_active_count | ||||
| Date:		September 2010 | ||||
| Contact:	Rafael J. Wysocki <rjw@sisk.pl> | ||||
| Contact:	Rafael J. Wysocki <rjw@rjwysocki.net> | ||||
| Description: | ||||
| 		The /sys/devices/.../wakeup_active_count attribute contains the | ||||
| 		number of times the processing of wakeup events associated with | ||||
| @ -98,7 +98,7 @@ Description: | ||||
| 
 | ||||
| What:		/sys/devices/.../power/wakeup_abort_count | ||||
| Date:		February 2012 | ||||
| Contact:	Rafael J. Wysocki <rjw@sisk.pl> | ||||
| Contact:	Rafael J. Wysocki <rjw@rjwysocki.net> | ||||
| Description: | ||||
| 		The /sys/devices/.../wakeup_abort_count attribute contains the | ||||
| 		number of times the processing of a wakeup event associated with | ||||
| @ -109,7 +109,7 @@ Description: | ||||
| 
 | ||||
| What:		/sys/devices/.../power/wakeup_expire_count | ||||
| Date:		February 2012 | ||||
| Contact:	Rafael J. Wysocki <rjw@sisk.pl> | ||||
| Contact:	Rafael J. Wysocki <rjw@rjwysocki.net> | ||||
| Description: | ||||
| 		The /sys/devices/.../wakeup_expire_count attribute contains the | ||||
| 		number of times a wakeup event associated with the device has | ||||
| @ -119,7 +119,7 @@ Description: | ||||
| 
 | ||||
| What:		/sys/devices/.../power/wakeup_active | ||||
| Date:		September 2010 | ||||
| Contact:	Rafael J. Wysocki <rjw@sisk.pl> | ||||
| Contact:	Rafael J. Wysocki <rjw@rjwysocki.net> | ||||
| Description: | ||||
| 		The /sys/devices/.../wakeup_active attribute contains either 1, | ||||
| 		or 0, depending on whether or not a wakeup event associated with | ||||
| @ -129,7 +129,7 @@ Description: | ||||
| 
 | ||||
| What:		/sys/devices/.../power/wakeup_total_time_ms | ||||
| Date:		September 2010 | ||||
| Contact:	Rafael J. Wysocki <rjw@sisk.pl> | ||||
| Contact:	Rafael J. Wysocki <rjw@rjwysocki.net> | ||||
| Description: | ||||
| 		The /sys/devices/.../wakeup_total_time_ms attribute contains | ||||
| 		the total time of processing wakeup events associated with the | ||||
| @ -139,7 +139,7 @@ Description: | ||||
| 
 | ||||
| What:		/sys/devices/.../power/wakeup_max_time_ms | ||||
| Date:		September 2010 | ||||
| Contact:	Rafael J. Wysocki <rjw@sisk.pl> | ||||
| Contact:	Rafael J. Wysocki <rjw@rjwysocki.net> | ||||
| Description: | ||||
| 		The /sys/devices/.../wakeup_max_time_ms attribute contains | ||||
| 		the maximum time of processing a single wakeup event associated | ||||
| @ -149,7 +149,7 @@ Description: | ||||
| 
 | ||||
| What:		/sys/devices/.../power/wakeup_last_time_ms | ||||
| Date:		September 2010 | ||||
| Contact:	Rafael J. Wysocki <rjw@sisk.pl> | ||||
| Contact:	Rafael J. Wysocki <rjw@rjwysocki.net> | ||||
| Description: | ||||
| 		The /sys/devices/.../wakeup_last_time_ms attribute contains | ||||
| 		the value of the monotonic clock corresponding to the time of | ||||
| @ -160,7 +160,7 @@ Description: | ||||
| 
 | ||||
| What:		/sys/devices/.../power/wakeup_prevent_sleep_time_ms | ||||
| Date:		February 2012 | ||||
| Contact:	Rafael J. Wysocki <rjw@sisk.pl> | ||||
| Contact:	Rafael J. Wysocki <rjw@rjwysocki.net> | ||||
| Description: | ||||
| 		The /sys/devices/.../wakeup_prevent_sleep_time_ms attribute | ||||
| 		contains the total time the device has been preventing | ||||
| @ -189,7 +189,7 @@ Description: | ||||
| 
 | ||||
| What:		/sys/devices/.../power/pm_qos_latency_us | ||||
| Date:		March 2012 | ||||
| Contact:	Rafael J. Wysocki <rjw@sisk.pl> | ||||
| Contact:	Rafael J. Wysocki <rjw@rjwysocki.net> | ||||
| Description: | ||||
| 		The /sys/devices/.../power/pm_qos_resume_latency_us attribute | ||||
| 		contains the PM QoS resume latency limit for the given device, | ||||
| @ -207,7 +207,7 @@ Description: | ||||
| 
 | ||||
| What:		/sys/devices/.../power/pm_qos_no_power_off | ||||
| Date:		September 2012 | ||||
| Contact:	Rafael J. Wysocki <rjw@sisk.pl> | ||||
| Contact:	Rafael J. Wysocki <rjw@rjwysocki.net> | ||||
| Description: | ||||
| 		The /sys/devices/.../power/pm_qos_no_power_off attribute | ||||
| 		is used for manipulating the PM QoS "no power off" flag.  If | ||||
| @ -222,7 +222,7 @@ Description: | ||||
| 
 | ||||
| What:		/sys/devices/.../power/pm_qos_remote_wakeup | ||||
| Date:		September 2012 | ||||
| Contact:	Rafael J. Wysocki <rjw@sisk.pl> | ||||
| Contact:	Rafael J. Wysocki <rjw@rjwysocki.net> | ||||
| Description: | ||||
| 		The /sys/devices/.../power/pm_qos_remote_wakeup attribute | ||||
| 		is used for manipulating the PM QoS "remote wakeup required" | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| What:		/sys/power/ | ||||
| Date:		August 2006 | ||||
| Contact:	Rafael J. Wysocki <rjw@sisk.pl> | ||||
| Contact:	Rafael J. Wysocki <rjw@rjwysocki.net> | ||||
| Description: | ||||
| 		The /sys/power directory will contain files that will | ||||
| 		provide a unified interface to the power management | ||||
| @ -8,7 +8,7 @@ Description: | ||||
| 
 | ||||
| What:		/sys/power/state | ||||
| Date:		August 2006 | ||||
| Contact:	Rafael J. Wysocki <rjw@sisk.pl> | ||||
| Contact:	Rafael J. Wysocki <rjw@rjwysocki.net> | ||||
| Description: | ||||
| 		The /sys/power/state file controls the system power state. | ||||
| 		Reading from this file returns what states are supported, | ||||
| @ -22,7 +22,7 @@ Description: | ||||
| 
 | ||||
| What:		/sys/power/disk | ||||
| Date:		September 2006 | ||||
| Contact:	Rafael J. Wysocki <rjw@sisk.pl> | ||||
| Contact:	Rafael J. Wysocki <rjw@rjwysocki.net> | ||||
| Description: | ||||
| 		The /sys/power/disk file controls the operating mode of the | ||||
| 		suspend-to-disk mechanism.  Reading from this file returns | ||||
| @ -67,7 +67,7 @@ Description: | ||||
| 
 | ||||
| What:		/sys/power/image_size | ||||
| Date:		August 2006 | ||||
| Contact:	Rafael J. Wysocki <rjw@sisk.pl> | ||||
| Contact:	Rafael J. Wysocki <rjw@rjwysocki.net> | ||||
| Description: | ||||
| 		The /sys/power/image_size file controls the size of the image | ||||
| 		created by the suspend-to-disk mechanism.  It can be written a | ||||
| @ -84,7 +84,7 @@ Description: | ||||
| 
 | ||||
| What:		/sys/power/pm_trace | ||||
| Date:		August 2006 | ||||
| Contact:	Rafael J. Wysocki <rjw@sisk.pl> | ||||
| Contact:	Rafael J. Wysocki <rjw@rjwysocki.net> | ||||
| Description: | ||||
| 		The /sys/power/pm_trace file controls the code which saves the | ||||
| 		last PM event point in the RTC across reboots, so that you can | ||||
| @ -133,7 +133,7 @@ Description: | ||||
| 
 | ||||
| What:		/sys/power/pm_async | ||||
| Date:		January 2009 | ||||
| Contact:	Rafael J. Wysocki <rjw@sisk.pl> | ||||
| Contact:	Rafael J. Wysocki <rjw@rjwysocki.net> | ||||
| Description: | ||||
| 		The /sys/power/pm_async file controls the switch allowing the | ||||
| 		user space to enable or disable asynchronous suspend and resume | ||||
| @ -146,7 +146,7 @@ Description: | ||||
| 
 | ||||
| What:		/sys/power/wakeup_count | ||||
| Date:		July 2010 | ||||
| Contact:	Rafael J. Wysocki <rjw@sisk.pl> | ||||
| Contact:	Rafael J. Wysocki <rjw@rjwysocki.net> | ||||
| Description: | ||||
| 		The /sys/power/wakeup_count file allows user space to put the | ||||
| 		system into a sleep state while taking into account the | ||||
| @ -161,7 +161,7 @@ Description: | ||||
| 
 | ||||
| What:		/sys/power/reserved_size | ||||
| Date:		May 2011 | ||||
| Contact:	Rafael J. Wysocki <rjw@sisk.pl> | ||||
| Contact:	Rafael J. Wysocki <rjw@rjwysocki.net> | ||||
| Description: | ||||
| 		The /sys/power/reserved_size file allows user space to control | ||||
| 		the amount of memory reserved for allocations made by device | ||||
| @ -175,7 +175,7 @@ Description: | ||||
| 
 | ||||
| What:		/sys/power/autosleep | ||||
| Date:		April 2012 | ||||
| Contact:	Rafael J. Wysocki <rjw@sisk.pl> | ||||
| Contact:	Rafael J. Wysocki <rjw@rjwysocki.net> | ||||
| Description: | ||||
| 		The /sys/power/autosleep file can be written one of the strings | ||||
| 		returned by reads from /sys/power/state.  If that happens, a | ||||
| @ -192,7 +192,7 @@ Description: | ||||
| 
 | ||||
| What:		/sys/power/wake_lock | ||||
| Date:		February 2012 | ||||
| Contact:	Rafael J. Wysocki <rjw@sisk.pl> | ||||
| Contact:	Rafael J. Wysocki <rjw@rjwysocki.net> | ||||
| Description: | ||||
| 		The /sys/power/wake_lock file allows user space to create | ||||
| 		wakeup source objects and activate them on demand (if one of | ||||
| @ -219,7 +219,7 @@ Description: | ||||
| 
 | ||||
| What:		/sys/power/wake_unlock | ||||
| Date:		February 2012 | ||||
| Contact:	Rafael J. Wysocki <rjw@sisk.pl> | ||||
| Contact:	Rafael J. Wysocki <rjw@rjwysocki.net> | ||||
| Description: | ||||
| 		The /sys/power/wake_unlock file allows user space to deactivate | ||||
| 		wakeup sources created with the help of /sys/power/wake_lock. | ||||
|  | ||||
| @ -4,4 +4,4 @@ CONFIG_ACPI_CUSTOM_DSDT builds the image into the kernel. | ||||
| 
 | ||||
| When to use this method is described in detail on the | ||||
| Linux/ACPI home page: | ||||
| http://www.lesswatts.org/projects/acpi/overridingDSDT.php | ||||
| https://01.org/linux-acpi/documentation/overriding-dsdt | ||||
|  | ||||
| @ -1,168 +0,0 @@ | ||||
| *** Memory binding *** | ||||
| 
 | ||||
| The /memory node provides basic information about the address and size | ||||
| of the physical memory. This node is usually filled or updated by the | ||||
| bootloader, depending on the actual memory configuration of the given | ||||
| hardware. | ||||
| 
 | ||||
| The memory layout is described by the following node: | ||||
| 
 | ||||
| / { | ||||
| 	#address-cells = <(n)>; | ||||
| 	#size-cells = <(m)>; | ||||
| 	memory { | ||||
| 		device_type = "memory"; | ||||
| 		reg =  <(baseaddr1) (size1) | ||||
| 			(baseaddr2) (size2) | ||||
| 			... | ||||
| 			(baseaddrN) (sizeN)>; | ||||
| 	}; | ||||
| 	... | ||||
| }; | ||||
| 
 | ||||
| A memory node follows the typical device tree rules for "reg" property: | ||||
| n:		number of cells used to store base address value | ||||
| m:		number of cells used to store size value | ||||
| baseaddrX:	defines a base address of the defined memory bank | ||||
| sizeX:		the size of the defined memory bank | ||||
| 
 | ||||
| 
 | ||||
| More than one memory bank can be defined. | ||||
| 
 | ||||
| 
 | ||||
| *** Reserved memory regions *** | ||||
| 
 | ||||
| In /memory/reserved-memory node one can create child nodes describing | ||||
| particular reserved (excluded from normal use) memory regions. Such | ||||
| memory regions are usually designed for the special usage by various | ||||
| device drivers. A good example are contiguous memory allocations or | ||||
| memory sharing with other operating system on the same hardware board. | ||||
| Those special memory regions might depend on the board configuration and | ||||
| devices used on the target system. | ||||
| 
 | ||||
| Parameters for each memory region can be encoded into the device tree | ||||
| with the following convention: | ||||
| 
 | ||||
| [(label):] (name) { | ||||
| 	compatible = "linux,contiguous-memory-region", "reserved-memory-region"; | ||||
| 	reg = <(address) (size)>; | ||||
| 	(linux,default-contiguous-region); | ||||
| }; | ||||
| 
 | ||||
| compatible:	one or more of: | ||||
| 	- "linux,contiguous-memory-region" - enables binding of this | ||||
| 	  region to Contiguous Memory Allocator (special region for | ||||
| 	  contiguous memory allocations, shared with movable system | ||||
| 	  memory, Linux kernel-specific). | ||||
| 	- "reserved-memory-region" - compatibility is defined, given | ||||
| 	  region is assigned for exclusive usage for by the respective | ||||
| 	  devices. | ||||
| 
 | ||||
| reg:	standard property defining the base address and size of | ||||
| 	the memory region | ||||
| 
 | ||||
| linux,default-contiguous-region: property indicating that the region | ||||
| 	is the default region for all contiguous memory | ||||
| 	allocations, Linux specific (optional) | ||||
| 
 | ||||
| It is optional to specify the base address, so if one wants to use | ||||
| autoconfiguration of the base address, '0' can be specified as a base | ||||
| address in the 'reg' property. | ||||
| 
 | ||||
| The /memory/reserved-memory node must contain the same #address-cells | ||||
| and #size-cells value as the root node. | ||||
| 
 | ||||
| 
 | ||||
| *** Device node's properties *** | ||||
| 
 | ||||
| Once regions in the /memory/reserved-memory node have been defined, they | ||||
| may be referenced by other device nodes. Bindings that wish to reference | ||||
| memory regions should explicitly document their use of the following | ||||
| property: | ||||
| 
 | ||||
| memory-region = <&phandle_to_defined_region>; | ||||
| 
 | ||||
| This property indicates that the device driver should use the memory | ||||
| region pointed by the given phandle. | ||||
| 
 | ||||
| 
 | ||||
| *** Example *** | ||||
| 
 | ||||
| This example defines a memory consisting of 4 memory banks. 3 contiguous | ||||
| regions are defined for Linux kernel, one default of all device drivers | ||||
| (named contig_mem, placed at 0x72000000, 64MiB), one dedicated to the | ||||
| framebuffer device (labelled display_mem, placed at 0x78000000, 8MiB) | ||||
| and one for multimedia processing (labelled multimedia_mem, placed at | ||||
| 0x77000000, 64MiB). 'display_mem' region is then assigned to fb@12300000 | ||||
| device for DMA memory allocations (Linux kernel drivers will use CMA is | ||||
| available or dma-exclusive usage otherwise). 'multimedia_mem' is | ||||
| assigned to scaler@12500000 and codec@12600000 devices for contiguous | ||||
| memory allocations when CMA driver is enabled. | ||||
| 
 | ||||
| The reason for creating a separate region for framebuffer device is to | ||||
| match the framebuffer base address to the one configured by bootloader, | ||||
| so once Linux kernel drivers starts no glitches on the displayed boot | ||||
| logo appears. Scaller and codec drivers should share the memory | ||||
| allocations. | ||||
| 
 | ||||
| / { | ||||
| 	#address-cells = <1>; | ||||
| 	#size-cells = <1>; | ||||
| 
 | ||||
| 	/* ... */ | ||||
| 
 | ||||
| 	memory { | ||||
| 		reg =  <0x40000000 0x10000000 | ||||
| 			0x50000000 0x10000000 | ||||
| 			0x60000000 0x10000000 | ||||
| 			0x70000000 0x10000000>; | ||||
| 
 | ||||
| 		reserved-memory { | ||||
| 			#address-cells = <1>; | ||||
| 			#size-cells = <1>; | ||||
| 
 | ||||
| 			/* | ||||
| 			 * global autoconfigured region for contiguous allocations | ||||
| 			 * (used only with Contiguous Memory Allocator) | ||||
| 			 */ | ||||
| 			contig_region@0 { | ||||
| 				compatible = "linux,contiguous-memory-region"; | ||||
| 				reg = <0x0 0x4000000>; | ||||
| 				linux,default-contiguous-region; | ||||
| 			}; | ||||
| 
 | ||||
| 			/* | ||||
| 			 * special region for framebuffer | ||||
| 			 */ | ||||
| 			display_region: region@78000000 { | ||||
| 				compatible = "linux,contiguous-memory-region", "reserved-memory-region"; | ||||
| 				reg = <0x78000000 0x800000>; | ||||
| 			}; | ||||
| 
 | ||||
| 			/* | ||||
| 			 * special region for multimedia processing devices | ||||
| 			 */ | ||||
| 			multimedia_region: region@77000000 { | ||||
| 				compatible = "linux,contiguous-memory-region"; | ||||
| 				reg = <0x77000000 0x4000000>; | ||||
| 			}; | ||||
| 		}; | ||||
| 	}; | ||||
| 
 | ||||
| 	/* ... */ | ||||
| 
 | ||||
| 	fb0: fb@12300000 { | ||||
| 		status = "okay"; | ||||
| 		memory-region = <&display_region>; | ||||
| 	}; | ||||
| 
 | ||||
| 	scaler: scaler@12500000 { | ||||
| 		status = "okay"; | ||||
| 		memory-region = <&multimedia_region>; | ||||
| 	}; | ||||
| 
 | ||||
| 	codec: codec@12600000 { | ||||
| 		status = "okay"; | ||||
| 		memory-region = <&multimedia_region>; | ||||
| 	}; | ||||
| }; | ||||
| @ -9,12 +9,15 @@ compulsory and any optional properties, common to all SD/MMC drivers, as | ||||
| described in mmc.txt, can be used. Additionally the following tmio_mmc-specific | ||||
| optional bindings can be used. | ||||
| 
 | ||||
| Required properties: | ||||
| - compatible:	"renesas,sdhi-shmobile" - a generic sh-mobile SDHI unit | ||||
| 		"renesas,sdhi-sh7372" - SDHI IP on SH7372 SoC | ||||
| 		"renesas,sdhi-sh73a0" - SDHI IP on SH73A0 SoC | ||||
| 		"renesas,sdhi-r8a73a4" - SDHI IP on R8A73A4 SoC | ||||
| 		"renesas,sdhi-r8a7740" - SDHI IP on R8A7740 SoC | ||||
| 		"renesas,sdhi-r8a7778" - SDHI IP on R8A7778 SoC | ||||
| 		"renesas,sdhi-r8a7779" - SDHI IP on R8A7779 SoC | ||||
| 		"renesas,sdhi-r8a7790" - SDHI IP on R8A7790 SoC | ||||
| 
 | ||||
| Optional properties: | ||||
| - toshiba,mmc-wrprotect-disable: write-protect detection is unavailable | ||||
| 
 | ||||
| When used with Renesas SDHI hardware, the following compatibility strings | ||||
| configure various model-specific properties: | ||||
| 
 | ||||
| "renesas,sh7372-sdhi":	(default) compatible with SH7372 | ||||
| "renesas,r8a7740-sdhi":	compatible with R8A7740: certain MMC/SD commands have to | ||||
| 			wait for the interface to become idle. | ||||
|  | ||||
| @ -28,6 +28,7 @@ ALC269/270/275/276/28x/29x | ||||
|   alc269-dmic		Enable ALC269(VA) digital mic workaround | ||||
|   alc271-dmic		Enable ALC271X digital mic workaround | ||||
|   inv-dmic		Inverted internal mic workaround | ||||
|   headset-mic		Indicates a combined headset (headphone+mic) jack | ||||
|   lenovo-dock   	Enables docking station I/O for some Lenovos | ||||
|   dell-headset-multi	Headset jack, which can also be used as mic-in | ||||
|   dell-headset-dock	Headset jack (without mic-in), and also dock I/O | ||||
|  | ||||
							
								
								
									
										54
									
								
								MAINTAINERS
									
									
									
									
									
								
							
							
						
						
									
										54
									
								
								MAINTAINERS
									
									
									
									
									
								
							| @ -237,11 +237,11 @@ F:	drivers/platform/x86/acer-wmi.c | ||||
| 
 | ||||
| ACPI | ||||
| M:	Len Brown <lenb@kernel.org> | ||||
| M:	Rafael J. Wysocki <rjw@sisk.pl> | ||||
| M:	Rafael J. Wysocki <rjw@rjwysocki.net> | ||||
| L:	linux-acpi@vger.kernel.org | ||||
| W:	http://www.lesswatts.org/projects/acpi/ | ||||
| Q:	http://patchwork.kernel.org/project/linux-acpi/list/ | ||||
| T:	git git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux | ||||
| W:	https://01.org/linux-acpi | ||||
| Q:	https://patchwork.kernel.org/project/linux-acpi/list/ | ||||
| T:	git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm | ||||
| S:	Supported | ||||
| F:	drivers/acpi/ | ||||
| F:	drivers/pnp/pnpacpi/ | ||||
| @ -256,21 +256,21 @@ F:	drivers/pci/*/*/*acpi* | ||||
| ACPI FAN DRIVER | ||||
| M:	Zhang Rui <rui.zhang@intel.com> | ||||
| L:	linux-acpi@vger.kernel.org | ||||
| W:	http://www.lesswatts.org/projects/acpi/ | ||||
| W:	https://01.org/linux-acpi | ||||
| S:	Supported | ||||
| F:	drivers/acpi/fan.c | ||||
| 
 | ||||
| ACPI THERMAL DRIVER | ||||
| M:	Zhang Rui <rui.zhang@intel.com> | ||||
| L:	linux-acpi@vger.kernel.org | ||||
| W:	http://www.lesswatts.org/projects/acpi/ | ||||
| W:	https://01.org/linux-acpi | ||||
| S:	Supported | ||||
| F:	drivers/acpi/*thermal* | ||||
| 
 | ||||
| ACPI VIDEO DRIVER | ||||
| M:	Zhang Rui <rui.zhang@intel.com> | ||||
| L:	linux-acpi@vger.kernel.org | ||||
| W:	http://www.lesswatts.org/projects/acpi/ | ||||
| W:	https://01.org/linux-acpi | ||||
| S:	Supported | ||||
| F:	drivers/acpi/video.c | ||||
| 
 | ||||
| @ -824,15 +824,21 @@ S:	Maintained | ||||
| F:	arch/arm/mach-gemini/ | ||||
| 
 | ||||
| ARM/CSR SIRFPRIMA2 MACHINE SUPPORT | ||||
| M:	Barry Song <baohua.song@csr.com> | ||||
| M:	Barry Song <baohua@kernel.org> | ||||
| L:	linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | ||||
| T:	git git://git.kernel.org/pub/scm/linux/kernel/git/baohua/linux.git | ||||
| S:	Maintained | ||||
| F:	arch/arm/mach-prima2/ | ||||
| F:	drivers/clk/clk-prima2.c | ||||
| F:	drivers/clocksource/timer-prima2.c | ||||
| F:	drivers/clocksource/timer-marco.c | ||||
| F:	drivers/dma/sirf-dma.c | ||||
| F:	drivers/i2c/busses/i2c-sirf.c | ||||
| F:	drivers/input/misc/sirfsoc-onkey.c | ||||
| F:	drivers/irqchip/irq-sirfsoc.c | ||||
| F:	drivers/mmc/host/sdhci-sirf.c | ||||
| F:	drivers/pinctrl/sirf/ | ||||
| F:	drivers/rtc/rtc-sirfsoc.c | ||||
| F:	drivers/spi/spi-sirf.c | ||||
| 
 | ||||
| ARM/EBSA110 MACHINE SUPPORT | ||||
| @ -2295,7 +2301,7 @@ S:	Maintained | ||||
| F:	drivers/net/ethernet/ti/cpmac.c | ||||
| 
 | ||||
| CPU FREQUENCY DRIVERS | ||||
| M:	Rafael J. Wysocki <rjw@sisk.pl> | ||||
| M:	Rafael J. Wysocki <rjw@rjwysocki.net> | ||||
| M:	Viresh Kumar <viresh.kumar@linaro.org> | ||||
| L:	cpufreq@vger.kernel.org | ||||
| L:	linux-pm@vger.kernel.org | ||||
| @ -2326,7 +2332,7 @@ S:      Maintained | ||||
| F:      drivers/cpuidle/cpuidle-big_little.c | ||||
| 
 | ||||
| CPUIDLE DRIVERS | ||||
| M:	Rafael J. Wysocki <rjw@sisk.pl> | ||||
| M:	Rafael J. Wysocki <rjw@rjwysocki.net> | ||||
| M:	Daniel Lezcano <daniel.lezcano@linaro.org> | ||||
| L:	linux-pm@vger.kernel.org | ||||
| S:	Maintained | ||||
| @ -3548,7 +3554,7 @@ F:	fs/freevxfs/ | ||||
| 
 | ||||
| FREEZER | ||||
| M:	Pavel Machek <pavel@ucw.cz> | ||||
| M:	"Rafael J. Wysocki" <rjw@sisk.pl> | ||||
| M:	"Rafael J. Wysocki" <rjw@rjwysocki.net> | ||||
| L:	linux-pm@vger.kernel.org | ||||
| S:	Supported | ||||
| F:	Documentation/power/freezing-of-tasks.txt | ||||
| @ -3619,6 +3625,12 @@ L:	linux-scsi@vger.kernel.org | ||||
| S:	Odd Fixes (e.g., new signatures) | ||||
| F:	drivers/scsi/fdomain.* | ||||
| 
 | ||||
| GCOV BASED KERNEL PROFILING | ||||
| M:	Peter Oberparleiter <oberpar@linux.vnet.ibm.com> | ||||
| S:	Maintained | ||||
| F:	kernel/gcov/ | ||||
| F:	Documentation/gcov.txt | ||||
| 
 | ||||
| GDT SCSI DISK ARRAY CONTROLLER DRIVER | ||||
| M:	Achim Leubner <achim_leubner@adaptec.com> | ||||
| L:	linux-scsi@vger.kernel.org | ||||
| @ -3884,7 +3896,7 @@ F:	drivers/video/hgafb.c | ||||
| 
 | ||||
| HIBERNATION (aka Software Suspend, aka swsusp) | ||||
| M:	Pavel Machek <pavel@ucw.cz> | ||||
| M:	"Rafael J. Wysocki" <rjw@sisk.pl> | ||||
| M:	"Rafael J. Wysocki" <rjw@rjwysocki.net> | ||||
| L:	linux-pm@vger.kernel.org | ||||
| S:	Supported | ||||
| F:	arch/x86/power/ | ||||
| @ -4334,7 +4346,7 @@ F:	drivers/video/i810/ | ||||
| INTEL MENLOW THERMAL DRIVER | ||||
| M:	Sujith Thomas <sujith.thomas@intel.com> | ||||
| L:	platform-driver-x86@vger.kernel.org | ||||
| W:	http://www.lesswatts.org/projects/acpi/ | ||||
| W:	https://01.org/linux-acpi | ||||
| S:	Supported | ||||
| F:	drivers/platform/x86/intel_menlow.c | ||||
| 
 | ||||
| @ -4471,6 +4483,13 @@ L:	linux-serial@vger.kernel.org | ||||
| S:	Maintained | ||||
| F:	drivers/tty/serial/ioc3_serial.c | ||||
| 
 | ||||
| IOMMU DRIVERS | ||||
| M:	Joerg Roedel <joro@8bytes.org> | ||||
| L:	iommu@lists.linux-foundation.org | ||||
| T:	git git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git | ||||
| S:	Maintained | ||||
| F:	drivers/iommu/ | ||||
| 
 | ||||
| IP MASQUERADING | ||||
| M:	Juanjo Ciarlante <jjciarla@raiz.uncu.edu.ar> | ||||
| S:	Maintained | ||||
| @ -7812,6 +7831,13 @@ F:	Documentation/sound/alsa/soc/ | ||||
| F:	sound/soc/ | ||||
| F:	include/sound/soc* | ||||
| 
 | ||||
| SOUND - DMAENGINE HELPERS | ||||
| M:	Lars-Peter Clausen <lars@metafoo.de> | ||||
| S:	Supported | ||||
| F:	include/sound/dmaengine_pcm.h | ||||
| F:	sound/core/pcm_dmaengine.c | ||||
| F:	sound/soc/soc-generic-dmaengine-pcm.c | ||||
| 
 | ||||
| SPARC + UltraSPARC (sparc/sparc64) | ||||
| M:	"David S. Miller" <davem@davemloft.net> | ||||
| L:	sparclinux@vger.kernel.org | ||||
| @ -8091,7 +8117,7 @@ F:	drivers/sh/ | ||||
| SUSPEND TO RAM | ||||
| M:	Len Brown <len.brown@intel.com> | ||||
| M:	Pavel Machek <pavel@ucw.cz> | ||||
| M:	"Rafael J. Wysocki" <rjw@sisk.pl> | ||||
| M:	"Rafael J. Wysocki" <rjw@rjwysocki.net> | ||||
| L:	linux-pm@vger.kernel.org | ||||
| S:	Supported | ||||
| F:	Documentation/power/ | ||||
|  | ||||
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							| @ -1,7 +1,7 @@ | ||||
| VERSION = 3 | ||||
| PATCHLEVEL = 12 | ||||
| SUBLEVEL = 0 | ||||
| EXTRAVERSION = -rc3 | ||||
| EXTRAVERSION = -rc6 | ||||
| NAME = One Giant Leap for Frogkind | ||||
| 
 | ||||
| # *DOCUMENTATION*
 | ||||
|  | ||||
| @ -102,7 +102,7 @@ static int genregs_set(struct task_struct *target, | ||||
| 	REG_IGNORE_ONE(pad2); | ||||
| 	REG_IN_CHUNK(callee, efa, cregs);	/* callee_regs[r25..r13] */ | ||||
| 	REG_IGNORE_ONE(efa);			/* efa update invalid */ | ||||
| 	REG_IN_ONE(stop_pc, &ptregs->ret);	/* stop_pc: PC update */ | ||||
| 	REG_IGNORE_ONE(stop_pc);			/* PC updated via @ret */ | ||||
| 
 | ||||
| 	return ret; | ||||
| } | ||||
|  | ||||
| @ -101,7 +101,6 @@ SYSCALL_DEFINE0(rt_sigreturn) | ||||
| { | ||||
| 	struct rt_sigframe __user *sf; | ||||
| 	unsigned int magic; | ||||
| 	int err; | ||||
| 	struct pt_regs *regs = current_pt_regs(); | ||||
| 
 | ||||
| 	/* Always make any pending restarted system calls return -EINTR */ | ||||
| @ -119,15 +118,16 @@ SYSCALL_DEFINE0(rt_sigreturn) | ||||
| 	if (!access_ok(VERIFY_READ, sf, sizeof(*sf))) | ||||
| 		goto badframe; | ||||
| 
 | ||||
| 	err = restore_usr_regs(regs, sf); | ||||
| 	err |= __get_user(magic, &sf->sigret_magic); | ||||
| 	if (err) | ||||
| 	if (__get_user(magic, &sf->sigret_magic)) | ||||
| 		goto badframe; | ||||
| 
 | ||||
| 	if (unlikely(is_do_ss_needed(magic))) | ||||
| 		if (restore_altstack(&sf->uc.uc_stack)) | ||||
| 			goto badframe; | ||||
| 
 | ||||
| 	if (restore_usr_regs(regs, sf)) | ||||
| 		goto badframe; | ||||
| 
 | ||||
| 	/* Don't restart from sigreturn */ | ||||
| 	syscall_wont_restart(regs); | ||||
| 
 | ||||
| @ -190,6 +190,15 @@ setup_rt_frame(int signo, struct k_sigaction *ka, siginfo_t *info, | ||||
| 	if (!sf) | ||||
| 		return 1; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * w/o SA_SIGINFO, struct ucontext is partially populated (only | ||||
| 	 * uc_mcontext/uc_sigmask) for kernel's normal user state preservation | ||||
| 	 * during signal handler execution. This works for SA_SIGINFO as well | ||||
| 	 * although the semantics are now overloaded (the same reg state can be | ||||
| 	 * inspected by userland: but are they allowed to fiddle with it ? | ||||
| 	 */ | ||||
| 	err |= stash_usr_regs(sf, regs, set); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * SA_SIGINFO requires 3 args to signal handler: | ||||
| 	 *  #1: sig-no (common to any handler) | ||||
| @ -213,14 +222,6 @@ setup_rt_frame(int signo, struct k_sigaction *ka, siginfo_t *info, | ||||
| 		magic = MAGIC_SIGALTSTK; | ||||
| 	} | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * w/o SA_SIGINFO, struct ucontext is partially populated (only | ||||
| 	 * uc_mcontext/uc_sigmask) for kernel's normal user state preservation | ||||
| 	 * during signal handler execution. This works for SA_SIGINFO as well | ||||
| 	 * although the semantics are now overloaded (the same reg state can be | ||||
| 	 * inspected by userland: but are they allowed to fiddle with it ? | ||||
| 	 */ | ||||
| 	err |= stash_usr_regs(sf, regs, set); | ||||
| 	err |= __put_user(magic, &sf->sigret_magic); | ||||
| 	if (err) | ||||
| 		return err; | ||||
|  | ||||
| @ -296,10 +296,15 @@ archprepare: | ||||
| # Convert bzImage to zImage
 | ||||
| bzImage: zImage | ||||
| 
 | ||||
| zImage Image xipImage bootpImage uImage: vmlinux | ||||
| BOOT_TARGETS	= zImage Image xipImage bootpImage uImage | ||||
| INSTALL_TARGETS	= zinstall uinstall install | ||||
| 
 | ||||
| PHONY += bzImage $(BOOT_TARGETS) $(INSTALL_TARGETS) | ||||
| 
 | ||||
| $(BOOT_TARGETS): vmlinux | ||||
| 	$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@ | ||||
| 
 | ||||
| zinstall uinstall install: vmlinux | ||||
| $(INSTALL_TARGETS): | ||||
| 	$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $@ | ||||
| 
 | ||||
| %.dtb: | scripts | ||||
|  | ||||
| @ -95,24 +95,24 @@ initrd: | ||||
| 	@test "$(INITRD)" != "" || \
 | ||||
| 	(echo You must specify INITRD; exit -1) | ||||
| 
 | ||||
| install: $(obj)/Image | ||||
| 	$(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \
 | ||||
| install: | ||||
| 	$(CONFIG_SHELL) $(srctree)/$(src)/install.sh "$(KERNELRELEASE)" \
 | ||||
| 	$(obj)/Image System.map "$(INSTALL_PATH)" | ||||
| 
 | ||||
| zinstall: $(obj)/zImage | ||||
| 	$(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \
 | ||||
| zinstall: | ||||
| 	$(CONFIG_SHELL) $(srctree)/$(src)/install.sh "$(KERNELRELEASE)" \
 | ||||
| 	$(obj)/zImage System.map "$(INSTALL_PATH)" | ||||
| 
 | ||||
| uinstall: $(obj)/uImage | ||||
| 	$(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \
 | ||||
| uinstall: | ||||
| 	$(CONFIG_SHELL) $(srctree)/$(src)/install.sh "$(KERNELRELEASE)" \
 | ||||
| 	$(obj)/uImage System.map "$(INSTALL_PATH)" | ||||
| 
 | ||||
| zi: | ||||
| 	$(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \
 | ||||
| 	$(CONFIG_SHELL) $(srctree)/$(src)/install.sh "$(KERNELRELEASE)" \
 | ||||
| 	$(obj)/zImage System.map "$(INSTALL_PATH)" | ||||
| 
 | ||||
| i: | ||||
| 	$(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \
 | ||||
| 	$(CONFIG_SHELL) $(srctree)/$(src)/install.sh "$(KERNELRELEASE)" \
 | ||||
| 	$(obj)/Image System.map "$(INSTALL_PATH)" | ||||
| 
 | ||||
| subdir-	    := bootp compressed dts | ||||
|  | ||||
| @ -41,6 +41,8 @@ dtb-$(CONFIG_ARCH_AT91)	+= sama5d33ek.dtb | ||||
| dtb-$(CONFIG_ARCH_AT91)	+= sama5d34ek.dtb | ||||
| dtb-$(CONFIG_ARCH_AT91)	+= sama5d35ek.dtb | ||||
| 
 | ||||
| dtb-$(CONFIG_ARCH_ATLAS6) += atlas6-evb.dtb | ||||
| 
 | ||||
| dtb-$(CONFIG_ARCH_BCM2835) += bcm2835-rpi-b.dtb | ||||
| dtb-$(CONFIG_ARCH_BCM) += bcm11351-brt.dtb \
 | ||||
| 	bcm28155-ap.dtb | ||||
|  | ||||
| @ -27,6 +27,25 @@ | ||||
| 	}; | ||||
| 
 | ||||
| 	soc { | ||||
| 		ranges = <MBUS_ID(0xf0, 0x01) 0 0xd0000000 0x100000 | ||||
| 			  MBUS_ID(0x01, 0xe0) 0 0xfff00000 0x100000>; | ||||
| 
 | ||||
| 		pcie-controller { | ||||
| 			status = "okay"; | ||||
| 
 | ||||
| 			/* Connected to Marvell SATA controller */ | ||||
| 			pcie@1,0 { | ||||
| 				/* Port 0, Lane 0 */ | ||||
| 				status = "okay"; | ||||
| 			}; | ||||
| 
 | ||||
| 			/* Connected to FL1009 USB 3.0 controller */ | ||||
| 			pcie@2,0 { | ||||
| 				/* Port 1, Lane 0 */ | ||||
| 				status = "okay"; | ||||
| 			}; | ||||
| 		}; | ||||
| 
 | ||||
| 		internal-regs { | ||||
| 			serial@12000 { | ||||
| 				clock-frequency = <200000000>; | ||||
| @ -57,6 +76,11 @@ | ||||
| 					marvell,pins = "mpp56"; | ||||
| 					marvell,function = "gpio"; | ||||
| 				}; | ||||
| 
 | ||||
| 				poweroff: poweroff { | ||||
| 					marvell,pins = "mpp8"; | ||||
| 					marvell,function = "gpio"; | ||||
| 				}; | ||||
| 			}; | ||||
| 
 | ||||
| 			mdio { | ||||
| @ -89,22 +113,6 @@ | ||||
| 					pwm_polarity = <0>; | ||||
| 				}; | ||||
| 			}; | ||||
| 
 | ||||
| 			pcie-controller { | ||||
| 				status = "okay"; | ||||
| 
 | ||||
| 				/* Connected to Marvell SATA controller */ | ||||
| 				pcie@1,0 { | ||||
| 					/* Port 0, Lane 0 */ | ||||
| 					status = "okay"; | ||||
| 				}; | ||||
| 
 | ||||
| 				/* Connected to FL1009 USB 3.0 controller */ | ||||
| 				pcie@2,0 { | ||||
| 					/* Port 1, Lane 0 */ | ||||
| 					status = "okay"; | ||||
| 				}; | ||||
| 			}; | ||||
| 		}; | ||||
| 	}; | ||||
| 
 | ||||
| @ -160,7 +168,7 @@ | ||||
| 		button@1 { | ||||
| 			label = "Power Button"; | ||||
| 			linux,code = <116>;     /* KEY_POWER */ | ||||
| 			gpios = <&gpio1 30 1>; | ||||
| 			gpios = <&gpio1 30 0>; | ||||
| 		}; | ||||
| 
 | ||||
| 		button@2 { | ||||
| @ -176,4 +184,11 @@ | ||||
| 		}; | ||||
| 	}; | ||||
| 
 | ||||
| 	gpio_poweroff { | ||||
| 		compatible = "gpio-poweroff"; | ||||
| 		pinctrl-0 = <&poweroff>; | ||||
| 		pinctrl-names = "default"; | ||||
| 		gpios = <&gpio0 8 1>; | ||||
| 	}; | ||||
| 
 | ||||
| }; | ||||
|  | ||||
| @ -70,6 +70,8 @@ | ||||
| 
 | ||||
| 			timer@20300 { | ||||
| 				compatible = "marvell,armada-xp-timer"; | ||||
| 				clocks = <&coreclk 2>, <&refclk>; | ||||
| 				clock-names = "nbclk", "fixed"; | ||||
| 			}; | ||||
| 
 | ||||
| 			coreclk: mvebu-sar@18230 { | ||||
| @ -169,4 +171,13 @@ | ||||
| 			}; | ||||
| 		}; | ||||
| 	}; | ||||
| 
 | ||||
| 	clocks { | ||||
| 		/* 25 MHz reference crystal */ | ||||
| 		refclk: oscillator { | ||||
| 			compatible = "fixed-clock"; | ||||
| 			#clock-cells = <0>; | ||||
| 			clock-frequency = <25000000>; | ||||
| 		}; | ||||
| 	}; | ||||
| }; | ||||
|  | ||||
| @ -190,12 +190,12 @@ | ||||
| 							 AT91_PIOA 8 AT91_PERIPH_A AT91_PINCTRL_NONE>;	/* PA8 periph A */ | ||||
| 					}; | ||||
| 
 | ||||
| 					pinctrl_uart2_rts: uart2_rts-0 { | ||||
| 					pinctrl_usart2_rts: usart2_rts-0 { | ||||
| 						atmel,pins = | ||||
| 							<AT91_PIOB 0 AT91_PERIPH_B AT91_PINCTRL_NONE>;	/* PB0 periph B */ | ||||
| 					}; | ||||
| 
 | ||||
| 					pinctrl_uart2_cts: uart2_cts-0 { | ||||
| 					pinctrl_usart2_cts: usart2_cts-0 { | ||||
| 						atmel,pins = | ||||
| 							<AT91_PIOB 1 AT91_PERIPH_B AT91_PINCTRL_NONE>;	/* PB1 periph B */ | ||||
| 					}; | ||||
| @ -556,6 +556,7 @@ | ||||
| 				interrupts = <12 IRQ_TYPE_LEVEL_HIGH 0>; | ||||
| 				dmas = <&dma0 1 AT91_DMA_CFG_PER_ID(0)>; | ||||
| 				dma-names = "rxtx"; | ||||
| 				pinctrl-names = "default"; | ||||
| 				#address-cells = <1>; | ||||
| 				#size-cells = <0>; | ||||
| 				status = "disabled"; | ||||
| @ -567,6 +568,7 @@ | ||||
| 				interrupts = <26 IRQ_TYPE_LEVEL_HIGH 0>; | ||||
| 				dmas = <&dma1 1 AT91_DMA_CFG_PER_ID(0)>; | ||||
| 				dma-names = "rxtx"; | ||||
| 				pinctrl-names = "default"; | ||||
| 				#address-cells = <1>; | ||||
| 				#size-cells = <0>; | ||||
| 				status = "disabled"; | ||||
|  | ||||
| @ -181,6 +181,8 @@ | ||||
| 				interrupts = <17>; | ||||
| 				fifosize = <128>; | ||||
| 				clocks = <&clks 13>; | ||||
| 				sirf,uart-dma-rx-channel = <21>; | ||||
| 				sirf,uart-dma-tx-channel = <2>; | ||||
| 			}; | ||||
| 
 | ||||
| 			uart1: uart@b0060000 { | ||||
| @ -199,6 +201,8 @@ | ||||
| 				interrupts = <19>; | ||||
| 				fifosize = <128>; | ||||
| 				clocks = <&clks 15>; | ||||
| 				sirf,uart-dma-rx-channel = <6>; | ||||
| 				sirf,uart-dma-tx-channel = <7>; | ||||
| 			}; | ||||
| 
 | ||||
| 			usp0: usp@b0080000 { | ||||
| @ -206,7 +210,10 @@ | ||||
| 				compatible = "sirf,prima2-usp"; | ||||
| 				reg = <0xb0080000 0x10000>; | ||||
| 				interrupts = <20>; | ||||
| 				fifosize = <128>; | ||||
| 				clocks = <&clks 28>; | ||||
| 				sirf,usp-dma-rx-channel = <17>; | ||||
| 				sirf,usp-dma-tx-channel = <18>; | ||||
| 			}; | ||||
| 
 | ||||
| 			usp1: usp@b0090000 { | ||||
| @ -214,7 +221,10 @@ | ||||
| 				compatible = "sirf,prima2-usp"; | ||||
| 				reg = <0xb0090000 0x10000>; | ||||
| 				interrupts = <21>; | ||||
| 				fifosize = <128>; | ||||
| 				clocks = <&clks 29>; | ||||
| 				sirf,usp-dma-rx-channel = <14>; | ||||
| 				sirf,usp-dma-tx-channel = <15>; | ||||
| 			}; | ||||
| 
 | ||||
| 			dmac0: dma-controller@b00b0000 { | ||||
| @ -237,6 +247,8 @@ | ||||
| 				compatible = "sirf,prima2-vip"; | ||||
| 				reg = <0xb00C0000 0x10000>; | ||||
| 				clocks = <&clks 31>; | ||||
| 				interrupts = <14>; | ||||
| 				sirf,vip-dma-rx-channel = <16>; | ||||
| 			}; | ||||
| 
 | ||||
| 			spi0: spi@b00d0000 { | ||||
|  | ||||
| @ -96,6 +96,11 @@ | ||||
| 			     <1 14 0xf08>, | ||||
| 			     <1 11 0xf08>, | ||||
| 			     <1 10 0xf08>; | ||||
| 		/* Unfortunately we need this since some versions of U-Boot | ||||
| 		 * on Exynos don't set the CNTFRQ register, so we need the | ||||
| 		 * value from DT. | ||||
| 		 */ | ||||
| 		clock-frequency = <24000000>; | ||||
| 	}; | ||||
| 
 | ||||
| 	mct@101C0000 { | ||||
|  | ||||
| @ -13,6 +13,7 @@ | ||||
| 		cpu@0 { | ||||
| 			device_type = "cpu"; | ||||
| 			compatible = "marvell,feroceon"; | ||||
| 			reg = <0>; | ||||
| 			clocks = <&core_clk 1>, <&core_clk 3>, <&gate_clk 11>; | ||||
| 			clock-names = "cpu_clk", "ddrclk", "powersave"; | ||||
| 		}; | ||||
| @ -167,7 +168,7 @@ | ||||
| 		xor@60900 { | ||||
| 			compatible = "marvell,orion-xor"; | ||||
| 			reg = <0x60900 0x100 | ||||
| 			       0xd0B00 0x100>; | ||||
| 			       0x60B00 0x100>; | ||||
| 			status = "okay"; | ||||
| 			clocks = <&gate_clk 16>; | ||||
| 
 | ||||
|  | ||||
| @ -11,7 +11,7 @@ | ||||
| 
 | ||||
| / { | ||||
| 	model = "TI OMAP3 BeagleBoard xM"; | ||||
| 	compatible = "ti,omap3-beagle-xm", "ti,omap3-beagle", "ti,omap3"; | ||||
| 	compatible = "ti,omap3-beagle-xm", "ti,omap36xx", "ti,omap3"; | ||||
| 
 | ||||
| 	cpus { | ||||
| 		cpu@0 { | ||||
|  | ||||
| @ -108,7 +108,7 @@ | ||||
| 			#address-cells = <1>; | ||||
| 			#size-cells = <0>; | ||||
| 			pinctrl-single,register-width = <16>; | ||||
| 			pinctrl-single,function-mask = <0x7f1f>; | ||||
| 			pinctrl-single,function-mask = <0xff1f>; | ||||
| 		}; | ||||
| 
 | ||||
| 		omap3_pmx_wkup: pinmux@0x48002a00 { | ||||
| @ -117,7 +117,7 @@ | ||||
| 			#address-cells = <1>; | ||||
| 			#size-cells = <0>; | ||||
| 			pinctrl-single,register-width = <16>; | ||||
| 			pinctrl-single,function-mask = <0x7f1f>; | ||||
| 			pinctrl-single,function-mask = <0xff1f>; | ||||
| 		}; | ||||
| 
 | ||||
| 		gpio1: gpio@48310000 { | ||||
|  | ||||
| @ -171,7 +171,8 @@ | ||||
| 			compatible = "simple-bus"; | ||||
| 			#address-cells = <1>; | ||||
| 			#size-cells = <1>; | ||||
| 			ranges = <0xb0000000 0xb0000000 0x180000>; | ||||
| 			ranges = <0xb0000000 0xb0000000 0x180000>, | ||||
| 			       <0x56000000 0x56000000 0x1b00000>; | ||||
| 
 | ||||
| 			timer@b0020000 { | ||||
| 				compatible = "sirf,prima2-tick"; | ||||
| @ -196,25 +197,32 @@ | ||||
| 			uart0: uart@b0050000 { | ||||
| 				cell-index = <0>; | ||||
| 				compatible = "sirf,prima2-uart"; | ||||
| 				reg = <0xb0050000 0x10000>; | ||||
| 				reg = <0xb0050000 0x1000>; | ||||
| 				interrupts = <17>; | ||||
| 				fifosize = <128>; | ||||
| 				clocks = <&clks 13>; | ||||
| 				sirf,uart-dma-rx-channel = <21>; | ||||
| 				sirf,uart-dma-tx-channel = <2>; | ||||
| 			}; | ||||
| 
 | ||||
| 			uart1: uart@b0060000 { | ||||
| 				cell-index = <1>; | ||||
| 				compatible = "sirf,prima2-uart"; | ||||
| 				reg = <0xb0060000 0x10000>; | ||||
| 				reg = <0xb0060000 0x1000>; | ||||
| 				interrupts = <18>; | ||||
| 				fifosize = <32>; | ||||
| 				clocks = <&clks 14>; | ||||
| 			}; | ||||
| 
 | ||||
| 			uart2: uart@b0070000 { | ||||
| 				cell-index = <2>; | ||||
| 				compatible = "sirf,prima2-uart"; | ||||
| 				reg = <0xb0070000 0x10000>; | ||||
| 				reg = <0xb0070000 0x1000>; | ||||
| 				interrupts = <19>; | ||||
| 				fifosize = <128>; | ||||
| 				clocks = <&clks 15>; | ||||
| 				sirf,uart-dma-rx-channel = <6>; | ||||
| 				sirf,uart-dma-tx-channel = <7>; | ||||
| 			}; | ||||
| 
 | ||||
| 			usp0: usp@b0080000 { | ||||
| @ -222,7 +230,10 @@ | ||||
| 				compatible = "sirf,prima2-usp"; | ||||
| 				reg = <0xb0080000 0x10000>; | ||||
| 				interrupts = <20>; | ||||
| 				fifosize = <128>; | ||||
| 				clocks = <&clks 28>; | ||||
| 				sirf,usp-dma-rx-channel = <17>; | ||||
| 				sirf,usp-dma-tx-channel = <18>; | ||||
| 			}; | ||||
| 
 | ||||
| 			usp1: usp@b0090000 { | ||||
| @ -230,7 +241,10 @@ | ||||
| 				compatible = "sirf,prima2-usp"; | ||||
| 				reg = <0xb0090000 0x10000>; | ||||
| 				interrupts = <21>; | ||||
| 				fifosize = <128>; | ||||
| 				clocks = <&clks 29>; | ||||
| 				sirf,usp-dma-rx-channel = <14>; | ||||
| 				sirf,usp-dma-tx-channel = <15>; | ||||
| 			}; | ||||
| 
 | ||||
| 			usp2: usp@b00a0000 { | ||||
| @ -238,7 +252,10 @@ | ||||
| 				compatible = "sirf,prima2-usp"; | ||||
| 				reg = <0xb00a0000 0x10000>; | ||||
| 				interrupts = <22>; | ||||
| 				fifosize = <128>; | ||||
| 				clocks = <&clks 30>; | ||||
| 				sirf,usp-dma-rx-channel = <10>; | ||||
| 				sirf,usp-dma-tx-channel = <11>; | ||||
| 			}; | ||||
| 
 | ||||
| 			dmac0: dma-controller@b00b0000 { | ||||
| @ -261,6 +278,8 @@ | ||||
| 				compatible = "sirf,prima2-vip"; | ||||
| 				reg = <0xb00C0000 0x10000>; | ||||
| 				clocks = <&clks 31>; | ||||
| 				interrupts = <14>; | ||||
| 				sirf,vip-dma-rx-channel = <16>; | ||||
| 			}; | ||||
| 
 | ||||
| 			spi0: spi@b00d0000 { | ||||
|  | ||||
| @ -193,7 +193,7 @@ | ||||
| 	}; | ||||
| 
 | ||||
| 	sdhi0: sdhi@ee100000 { | ||||
| 		compatible = "renesas,r8a73a4-sdhi"; | ||||
| 		compatible = "renesas,sdhi-r8a73a4"; | ||||
| 		reg = <0 0xee100000 0 0x100>; | ||||
| 		interrupt-parent = <&gic>; | ||||
| 		interrupts = <0 165 4>; | ||||
| @ -202,7 +202,7 @@ | ||||
| 	}; | ||||
| 
 | ||||
| 	sdhi1: sdhi@ee120000 { | ||||
| 		compatible = "renesas,r8a73a4-sdhi"; | ||||
| 		compatible = "renesas,sdhi-r8a73a4"; | ||||
| 		reg = <0 0xee120000 0 0x100>; | ||||
| 		interrupt-parent = <&gic>; | ||||
| 		interrupts = <0 166 4>; | ||||
| @ -211,7 +211,7 @@ | ||||
| 	}; | ||||
| 
 | ||||
| 	sdhi2: sdhi@ee140000 { | ||||
| 		compatible = "renesas,r8a73a4-sdhi"; | ||||
| 		compatible = "renesas,sdhi-r8a73a4"; | ||||
| 		reg = <0 0xee140000 0 0x100>; | ||||
| 		interrupt-parent = <&gic>; | ||||
| 		interrupts = <0 167 4>; | ||||
|  | ||||
| @ -96,6 +96,5 @@ | ||||
| 	pfc: pfc@fffc0000 { | ||||
| 		compatible = "renesas,pfc-r8a7778"; | ||||
| 		reg = <0xfffc000 0x118>; | ||||
| 		#gpio-range-cells = <3>; | ||||
| 	}; | ||||
| }; | ||||
|  | ||||
| @ -188,7 +188,6 @@ | ||||
| 	pfc: pfc@fffc0000 { | ||||
| 		compatible = "renesas,pfc-r8a7779"; | ||||
| 		reg = <0xfffc0000 0x23c>; | ||||
| 		#gpio-range-cells = <3>; | ||||
| 	}; | ||||
| 
 | ||||
| 	thermal@ffc48000 { | ||||
|  | ||||
| @ -148,11 +148,10 @@ | ||||
| 	pfc: pfc@e6060000 { | ||||
| 		compatible = "renesas,pfc-r8a7790"; | ||||
| 		reg = <0 0xe6060000 0 0x250>; | ||||
| 		#gpio-range-cells = <3>; | ||||
| 	}; | ||||
| 
 | ||||
| 	sdhi0: sdhi@ee100000 { | ||||
| 		compatible = "renesas,r8a7790-sdhi"; | ||||
| 		compatible = "renesas,sdhi-r8a7790"; | ||||
| 		reg = <0 0xee100000 0 0x100>; | ||||
| 		interrupt-parent = <&gic>; | ||||
| 		interrupts = <0 165 4>; | ||||
| @ -161,7 +160,7 @@ | ||||
| 	}; | ||||
| 
 | ||||
| 	sdhi1: sdhi@ee120000 { | ||||
| 		compatible = "renesas,r8a7790-sdhi"; | ||||
| 		compatible = "renesas,sdhi-r8a7790"; | ||||
| 		reg = <0 0xee120000 0 0x100>; | ||||
| 		interrupt-parent = <&gic>; | ||||
| 		interrupts = <0 166 4>; | ||||
| @ -170,7 +169,7 @@ | ||||
| 	}; | ||||
| 
 | ||||
| 	sdhi2: sdhi@ee140000 { | ||||
| 		compatible = "renesas,r8a7790-sdhi"; | ||||
| 		compatible = "renesas,sdhi-r8a7790"; | ||||
| 		reg = <0 0xee140000 0 0x100>; | ||||
| 		interrupt-parent = <&gic>; | ||||
| 		interrupts = <0 167 4>; | ||||
| @ -179,7 +178,7 @@ | ||||
| 	}; | ||||
| 
 | ||||
| 	sdhi3: sdhi@ee160000 { | ||||
| 		compatible = "renesas,r8a7790-sdhi"; | ||||
| 		compatible = "renesas,sdhi-r8a7790"; | ||||
| 		reg = <0 0xee160000 0 0x100>; | ||||
| 		interrupt-parent = <&gic>; | ||||
| 		interrupts = <0 168 4>; | ||||
|  | ||||
| @ -196,7 +196,7 @@ | ||||
| 	}; | ||||
| 
 | ||||
| 	sdhi0: sdhi@ee100000 { | ||||
| 		compatible = "renesas,r8a7740-sdhi"; | ||||
| 		compatible = "renesas,sdhi-r8a7740"; | ||||
| 		reg = <0xee100000 0x100>; | ||||
| 		interrupt-parent = <&gic>; | ||||
| 		interrupts = <0 83 4 | ||||
| @ -208,7 +208,7 @@ | ||||
| 
 | ||||
| 	/* SDHI1 and SDHI2 have no CD pins, no need for CD IRQ */ | ||||
| 	sdhi1: sdhi@ee120000 { | ||||
| 		compatible = "renesas,r8a7740-sdhi"; | ||||
| 		compatible = "renesas,sdhi-r8a7740"; | ||||
| 		reg = <0xee120000 0x100>; | ||||
| 		interrupt-parent = <&gic>; | ||||
| 		interrupts = <0 88 4 | ||||
| @ -219,7 +219,7 @@ | ||||
| 	}; | ||||
| 
 | ||||
| 	sdhi2: sdhi@ee140000 { | ||||
| 		compatible = "renesas,r8a7740-sdhi"; | ||||
| 		compatible = "renesas,sdhi-r8a7740"; | ||||
| 		reg = <0xee140000 0x100>; | ||||
| 		interrupt-parent = <&gic>; | ||||
| 		interrupts = <0 104 4 | ||||
|  | ||||
| @ -20,6 +20,20 @@ | ||||
| #   $4 - default install path (blank if root directory) | ||||
| # | ||||
| 
 | ||||
| verify () { | ||||
| 	if [ ! -f "$1" ]; then | ||||
| 		echo ""                                                   1>&2 | ||||
| 		echo " *** Missing file: $1"                              1>&2 | ||||
| 		echo ' *** You need to run "make" before "make install".' 1>&2 | ||||
| 		echo ""                                                   1>&2 | ||||
| 		exit 1 | ||||
| 	fi | ||||
| } | ||||
| 
 | ||||
| # Make sure the files actually exist | ||||
| verify "$2" | ||||
| verify "$3" | ||||
| 
 | ||||
| # User may have a custom install script | ||||
| if [ -x ~/bin/${INSTALLKERNEL} ]; then exec ~/bin/${INSTALLKERNEL} "$@"; fi | ||||
| if [ -x /sbin/${INSTALLKERNEL} ]; then exec /sbin/${INSTALLKERNEL} "$@"; fi | ||||
|  | ||||
| @ -269,6 +269,11 @@ static const struct edmacc_param dummy_paramset = { | ||||
| 	.ccnt = 1, | ||||
| }; | ||||
| 
 | ||||
| static const struct of_device_id edma_of_ids[] = { | ||||
| 	{ .compatible = "ti,edma3", }, | ||||
| 	{} | ||||
| }; | ||||
| 
 | ||||
| /*****************************************************************************/ | ||||
| 
 | ||||
| static void map_dmach_queue(unsigned ctlr, unsigned ch_no, | ||||
| @ -560,14 +565,38 @@ static int reserve_contiguous_slots(int ctlr, unsigned int id, | ||||
| static int prepare_unused_channel_list(struct device *dev, void *data) | ||||
| { | ||||
| 	struct platform_device *pdev = to_platform_device(dev); | ||||
| 	int i, ctlr; | ||||
| 	int i, count, ctlr; | ||||
| 	struct of_phandle_args  dma_spec; | ||||
| 
 | ||||
| 	if (dev->of_node) { | ||||
| 		count = of_property_count_strings(dev->of_node, "dma-names"); | ||||
| 		if (count < 0) | ||||
| 			return 0; | ||||
| 		for (i = 0; i < count; i++) { | ||||
| 			if (of_parse_phandle_with_args(dev->of_node, "dmas", | ||||
| 						       "#dma-cells", i, | ||||
| 						       &dma_spec)) | ||||
| 				continue; | ||||
| 
 | ||||
| 			if (!of_match_node(edma_of_ids, dma_spec.np)) { | ||||
| 				of_node_put(dma_spec.np); | ||||
| 				continue; | ||||
| 			} | ||||
| 
 | ||||
| 			clear_bit(EDMA_CHAN_SLOT(dma_spec.args[0]), | ||||
| 				  edma_cc[0]->edma_unused); | ||||
| 			of_node_put(dma_spec.np); | ||||
| 		} | ||||
| 		return 0; | ||||
| 	} | ||||
| 
 | ||||
| 	/* For non-OF case */ | ||||
| 	for (i = 0; i < pdev->num_resources; i++) { | ||||
| 		if ((pdev->resource[i].flags & IORESOURCE_DMA) && | ||||
| 				(int)pdev->resource[i].start >= 0) { | ||||
| 			ctlr = EDMA_CTLR(pdev->resource[i].start); | ||||
| 			clear_bit(EDMA_CHAN_SLOT(pdev->resource[i].start), | ||||
| 					edma_cc[ctlr]->edma_unused); | ||||
| 				  edma_cc[ctlr]->edma_unused); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| @ -1762,11 +1791,6 @@ static int edma_probe(struct platform_device *pdev) | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static const struct of_device_id edma_of_ids[] = { | ||||
| 	{ .compatible = "ti,edma3", }, | ||||
| 	{} | ||||
| }; | ||||
| 
 | ||||
| static struct platform_driver edma_driver = { | ||||
| 	.driver = { | ||||
| 		.name	= "edma", | ||||
|  | ||||
| @ -51,7 +51,8 @@ void mcpm_cpu_power_down(void) | ||||
| { | ||||
| 	phys_reset_t phys_reset; | ||||
| 
 | ||||
| 	BUG_ON(!platform_ops); | ||||
| 	if (WARN_ON_ONCE(!platform_ops || !platform_ops->power_down)) | ||||
| 		return; | ||||
| 	BUG_ON(!irqs_disabled()); | ||||
| 
 | ||||
| 	/*
 | ||||
| @ -93,7 +94,8 @@ void mcpm_cpu_suspend(u64 expected_residency) | ||||
| { | ||||
| 	phys_reset_t phys_reset; | ||||
| 
 | ||||
| 	BUG_ON(!platform_ops); | ||||
| 	if (WARN_ON_ONCE(!platform_ops || !platform_ops->suspend)) | ||||
| 		return; | ||||
| 	BUG_ON(!irqs_disabled()); | ||||
| 
 | ||||
| 	/* Very similar to mcpm_cpu_power_down() */ | ||||
|  | ||||
| @ -15,6 +15,7 @@ | ||||
| #include <linux/module.h> | ||||
| #include <linux/string.h> | ||||
| #include <asm/mach/sharpsl_param.h> | ||||
| #include <asm/memory.h> | ||||
| 
 | ||||
| /*
 | ||||
|  * Certain hardware parameters determined at the time of device manufacture, | ||||
| @ -25,8 +26,10 @@ | ||||
|  */ | ||||
| #ifdef CONFIG_ARCH_SA1100 | ||||
| #define PARAM_BASE	0xe8ffc000 | ||||
| #define param_start(x)	(void *)(x) | ||||
| #else | ||||
| #define PARAM_BASE	0xa0000a00 | ||||
| #define param_start(x)	__va(x) | ||||
| #endif | ||||
| #define MAGIC_CHG(a,b,c,d) ( ( d << 24 ) | ( c << 16 )  | ( b << 8 ) | a ) | ||||
| 
 | ||||
| @ -41,7 +44,7 @@ EXPORT_SYMBOL(sharpsl_param); | ||||
| 
 | ||||
| void sharpsl_save_param(void) | ||||
| { | ||||
| 	memcpy(&sharpsl_param, (void *)PARAM_BASE, sizeof(struct sharpsl_param_info)); | ||||
| 	memcpy(&sharpsl_param, param_start(PARAM_BASE), sizeof(struct sharpsl_param_info)); | ||||
| 
 | ||||
| 	if (sharpsl_param.comadj_keyword != COMADJ_MAGIC) | ||||
| 		sharpsl_param.comadj=-1; | ||||
|  | ||||
| @ -135,6 +135,7 @@ CONFIG_MMC=y | ||||
| CONFIG_MMC_ARMMMCI=y | ||||
| CONFIG_MMC_SDHCI=y | ||||
| CONFIG_MMC_SDHCI_PLTFM=y | ||||
| CONFIG_MMC_SDHCI_ESDHC_IMX=y | ||||
| CONFIG_MMC_SDHCI_TEGRA=y | ||||
| CONFIG_MMC_SDHCI_SPEAR=y | ||||
| CONFIG_MMC_OMAP=y | ||||
|  | ||||
| @ -31,5 +31,4 @@ generic-y += termbits.h | ||||
| generic-y += termios.h | ||||
| generic-y += timex.h | ||||
| generic-y += trace_clock.h | ||||
| generic-y += types.h | ||||
| generic-y += unaligned.h | ||||
|  | ||||
| @ -16,7 +16,7 @@ | ||||
| 
 | ||||
| static __always_inline bool arch_static_branch(struct static_key *key) | ||||
| { | ||||
| 	asm goto("1:\n\t" | ||||
| 	asm_volatile_goto("1:\n\t" | ||||
| 		 JUMP_LABEL_NOP "\n\t" | ||||
| 		 ".pushsection __jump_table,  \"aw\"\n\t" | ||||
| 		 ".word 1b, %l[l_yes], %c0\n\t" | ||||
|  | ||||
| @ -76,8 +76,11 @@ int mcpm_cpu_power_up(unsigned int cpu, unsigned int cluster); | ||||
|  * | ||||
|  * This must be called with interrupts disabled. | ||||
|  * | ||||
|  * This does not return.  Re-entry in the kernel is expected via | ||||
|  * mcpm_entry_point. | ||||
|  * On success this does not return.  Re-entry in the kernel is expected | ||||
|  * via mcpm_entry_point. | ||||
|  * | ||||
|  * This will return if mcpm_platform_register() has not been called | ||||
|  * previously in which case the caller should take appropriate action. | ||||
|  */ | ||||
| void mcpm_cpu_power_down(void); | ||||
| 
 | ||||
| @ -98,8 +101,11 @@ void mcpm_cpu_power_down(void); | ||||
|  * | ||||
|  * This must be called with interrupts disabled. | ||||
|  * | ||||
|  * This does not return.  Re-entry in the kernel is expected via | ||||
|  * mcpm_entry_point. | ||||
|  * On success this does not return.  Re-entry in the kernel is expected | ||||
|  * via mcpm_entry_point. | ||||
|  * | ||||
|  * This will return if mcpm_platform_register() has not been called | ||||
|  * previously in which case the caller should take appropriate action. | ||||
|  */ | ||||
| void mcpm_cpu_suspend(u64 expected_residency); | ||||
| 
 | ||||
|  | ||||
| @ -57,6 +57,9 @@ static inline void syscall_get_arguments(struct task_struct *task, | ||||
| 					 unsigned int i, unsigned int n, | ||||
| 					 unsigned long *args) | ||||
| { | ||||
| 	if (n == 0) | ||||
| 		return; | ||||
| 
 | ||||
| 	if (i + n > SYSCALL_MAX_ARGS) { | ||||
| 		unsigned long *args_bad = args + SYSCALL_MAX_ARGS - i; | ||||
| 		unsigned int n_bad = n + i - SYSCALL_MAX_ARGS; | ||||
| @ -81,6 +84,9 @@ static inline void syscall_set_arguments(struct task_struct *task, | ||||
| 					 unsigned int i, unsigned int n, | ||||
| 					 const unsigned long *args) | ||||
| { | ||||
| 	if (n == 0) | ||||
| 		return; | ||||
| 
 | ||||
| 	if (i + n > SYSCALL_MAX_ARGS) { | ||||
| 		pr_warning("%s called with max args %d, handling only %d\n", | ||||
| 			   __func__, i + n, SYSCALL_MAX_ARGS); | ||||
|  | ||||
| @ -487,7 +487,26 @@ __fixup_smp: | ||||
| 	mrc	p15, 0, r0, c0, c0, 5	@ read MPIDR
 | ||||
| 	and	r0, r0, #0xc0000000	@ multiprocessing extensions and
 | ||||
| 	teq	r0, #0x80000000		@ not part of a uniprocessor system?
 | ||||
| 	moveq	pc, lr			@ yes, assume SMP
 | ||||
| 	bne    __fixup_smp_on_up	@ no, assume UP
 | ||||
| 
 | ||||
| 	@ Core indicates it is SMP. Check for Aegis SOC where a single
 | ||||
| 	@ Cortex-A9 CPU is present but SMP operations fault.
 | ||||
| 	mov	r4, #0x41000000 | ||||
| 	orr	r4, r4, #0x0000c000 | ||||
| 	orr	r4, r4, #0x00000090 | ||||
| 	teq	r3, r4			@ Check for ARM Cortex-A9
 | ||||
| 	movne	pc, lr			@ Not ARM Cortex-A9,
 | ||||
| 
 | ||||
| 	@ If a future SoC *does* use 0x0 as the PERIPH_BASE, then the
 | ||||
| 	@ below address check will need to be #ifdef'd or equivalent
 | ||||
| 	@ for the Aegis platform.
 | ||||
| 	mrc	p15, 4, r0, c15, c0	@ get SCU base address
 | ||||
| 	teq	r0, #0x0		@ '0' on actual UP A9 hardware
 | ||||
| 	beq	__fixup_smp_on_up	@ So its an A9 UP
 | ||||
| 	ldr	r0, [r0, #4]		@ read SCU Config
 | ||||
| 	and	r0, r0, #0x3		@ number of CPUs
 | ||||
| 	teq	r0, #0x0		@ is 1?
 | ||||
| 	movne	pc, lr | ||||
| 
 | ||||
| __fixup_smp_on_up: | ||||
| 	adr	r0, 1f | ||||
|  | ||||
| @ -93,7 +93,7 @@ static irqreturn_t at91rm9200_timer_interrupt(int irq, void *dev_id) | ||||
| 
 | ||||
| static struct irqaction at91rm9200_timer_irq = { | ||||
| 	.name		= "at91_tick", | ||||
| 	.flags		= IRQF_SHARED | IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL, | ||||
| 	.flags		= IRQF_SHARED | IRQF_TIMER | IRQF_IRQPOLL, | ||||
| 	.handler	= at91rm9200_timer_interrupt, | ||||
| 	.irq		= NR_IRQS_LEGACY + AT91_ID_SYS, | ||||
| }; | ||||
|  | ||||
| @ -171,7 +171,7 @@ static irqreturn_t at91sam926x_pit_interrupt(int irq, void *dev_id) | ||||
| 
 | ||||
| static struct irqaction at91sam926x_pit_irq = { | ||||
| 	.name		= "at91_tick", | ||||
| 	.flags		= IRQF_SHARED | IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL, | ||||
| 	.flags		= IRQF_SHARED | IRQF_TIMER | IRQF_IRQPOLL, | ||||
| 	.handler	= at91sam926x_pit_interrupt, | ||||
| 	.irq		= NR_IRQS_LEGACY + AT91_ID_SYS, | ||||
| }; | ||||
|  | ||||
| @ -16,11 +16,17 @@ | ||||
| #include "at91_rstc.h" | ||||
| 			.arm | ||||
| 
 | ||||
| /* | ||||
|  * at91_ramc_base is an array void* | ||||
|  * init at NULL if only one DDR controler is present in or DT | ||||
|  */ | ||||
| 			.globl	at91sam9g45_restart
 | ||||
| 
 | ||||
| at91sam9g45_restart: | ||||
| 			ldr	r5, =at91_ramc_base		@ preload constants
 | ||||
| 			ldr	r0, [r5] | ||||
| 			ldr	r5, [r5, #4]			@ ddr1
 | ||||
| 			cmp	r5, #0 | ||||
| 			ldr	r4, =at91_rstc_base | ||||
| 			ldr	r1, [r4] | ||||
| 
 | ||||
| @ -30,6 +36,8 @@ at91sam9g45_restart: | ||||
| 
 | ||||
| 			.balign	32				@ align to cache line
 | ||||
| 
 | ||||
| 			strne	r2, [r5, #AT91_DDRSDRC_RTR]	@ disable DDR1 access
 | ||||
| 			strne	r3, [r5, #AT91_DDRSDRC_LPR]	@ power down DDR1
 | ||||
| 			str	r2, [r0, #AT91_DDRSDRC_RTR]	@ disable DDR0 access
 | ||||
| 			str	r3, [r0, #AT91_DDRSDRC_LPR]	@ power down DDR0
 | ||||
| 			str	r4, [r1, #AT91_RSTC_CR]		@ reset processor
 | ||||
|  | ||||
| @ -57,7 +57,7 @@ static irqreturn_t at91x40_timer_interrupt(int irq, void *dev_id) | ||||
| 
 | ||||
| static struct irqaction at91x40_timer_irq = { | ||||
| 	.name		= "at91_tick", | ||||
| 	.flags		= IRQF_DISABLED | IRQF_TIMER, | ||||
| 	.flags		= IRQF_TIMER, | ||||
| 	.handler	= at91x40_timer_interrupt | ||||
| }; | ||||
| 
 | ||||
|  | ||||
| @ -176,7 +176,7 @@ static struct at24_platform_data eeprom_info = { | ||||
| 	.context	= (void *)0x7f00, | ||||
| }; | ||||
| 
 | ||||
| static struct snd_platform_data dm365_evm_snd_data = { | ||||
| static struct snd_platform_data dm365_evm_snd_data __maybe_unused = { | ||||
| 	.asp_chan_q = EVENTQ_3, | ||||
| }; | ||||
| 
 | ||||
|  | ||||
| @ -15,8 +15,6 @@ | ||||
| 
 | ||||
| #include <mach/hardware.h> | ||||
| 
 | ||||
| #include <linux/platform_device.h> | ||||
| 
 | ||||
| #define DAVINCI_UART0_BASE	(IO_PHYS + 0x20000) | ||||
| #define DAVINCI_UART1_BASE	(IO_PHYS + 0x20400) | ||||
| #define DAVINCI_UART2_BASE	(IO_PHYS + 0x20800) | ||||
| @ -39,6 +37,8 @@ | ||||
| #define UART_DM646X_SCR_TX_WATERMARK	0x08 | ||||
| 
 | ||||
| #ifndef __ASSEMBLY__ | ||||
| #include <linux/platform_device.h> | ||||
| 
 | ||||
| extern int davinci_serial_init(struct platform_device *); | ||||
| #endif | ||||
| 
 | ||||
|  | ||||
| @ -1,2 +1,9 @@ | ||||
| /* Simple oneliner include to the PCIv3 early init */ | ||||
| #ifdef CONFIG_PCI | ||||
| extern int pci_v3_early_init(void); | ||||
| #else | ||||
| static inline int pci_v3_early_init(void) | ||||
| { | ||||
| 	return 0; | ||||
| } | ||||
| #endif | ||||
|  | ||||
| @ -140,6 +140,7 @@ int __init coherency_init(void) | ||||
| 		coherency_base = of_iomap(np, 0); | ||||
| 		coherency_cpu_base = of_iomap(np, 1); | ||||
| 		set_cpu_coherent(cpu_logical_map(smp_processor_id()), 0); | ||||
| 		of_node_put(np); | ||||
| 	} | ||||
| 
 | ||||
| 	return 0; | ||||
| @ -147,9 +148,14 @@ int __init coherency_init(void) | ||||
| 
 | ||||
| static int __init coherency_late_init(void) | ||||
| { | ||||
| 	if (of_find_matching_node(NULL, of_coherency_table)) | ||||
| 	struct device_node *np; | ||||
| 
 | ||||
| 	np = of_find_matching_node(NULL, of_coherency_table); | ||||
| 	if (np) { | ||||
| 		bus_register_notifier(&platform_bus_type, | ||||
| 				      &mvebu_hwcc_platform_nb); | ||||
| 		of_node_put(np); | ||||
| 	} | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -67,6 +67,7 @@ int __init armada_370_xp_pmsu_init(void) | ||||
| 		pr_info("Initializing Power Management Service Unit\n"); | ||||
| 		pmsu_mp_base = of_iomap(np, 0); | ||||
| 		pmsu_reset_base = of_iomap(np, 1); | ||||
| 		of_node_put(np); | ||||
| 	} | ||||
| 
 | ||||
| 	return 0; | ||||
|  | ||||
| @ -98,6 +98,7 @@ static int __init mvebu_system_controller_init(void) | ||||
| 		BUG_ON(!match); | ||||
| 		system_controller_base = of_iomap(np, 0); | ||||
| 		mvebu_sc = (struct mvebu_system_controller *)match->data; | ||||
| 		of_node_put(np); | ||||
| 	} | ||||
| 
 | ||||
| 	return 0; | ||||
|  | ||||
| @ -129,6 +129,24 @@ DT_MACHINE_START(OMAP3_DT, "Generic OMAP3 (Flattened Device Tree)") | ||||
| 	.restart	= omap3xxx_restart, | ||||
| MACHINE_END | ||||
| 
 | ||||
| static const char *omap36xx_boards_compat[] __initdata = { | ||||
| 	"ti,omap36xx", | ||||
| 	NULL, | ||||
| }; | ||||
| 
 | ||||
| DT_MACHINE_START(OMAP36XX_DT, "Generic OMAP36xx (Flattened Device Tree)") | ||||
| 	.reserve	= omap_reserve, | ||||
| 	.map_io		= omap3_map_io, | ||||
| 	.init_early	= omap3630_init_early, | ||||
| 	.init_irq	= omap_intc_of_init, | ||||
| 	.handle_irq	= omap3_intc_handle_irq, | ||||
| 	.init_machine	= omap_generic_init, | ||||
| 	.init_late	= omap3_init_late, | ||||
| 	.init_time	= omap3_sync32k_timer_init, | ||||
| 	.dt_compat	= omap36xx_boards_compat, | ||||
| 	.restart	= omap3xxx_restart, | ||||
| MACHINE_END | ||||
| 
 | ||||
| static const char *omap3_gp_boards_compat[] __initdata = { | ||||
| 	"ti,omap3-beagle", | ||||
| 	"timll,omap3-devkit8000", | ||||
|  | ||||
| @ -167,38 +167,47 @@ static struct lp55xx_led_config rx51_lp5523_led_config[] = { | ||||
| 		.name		= "lp5523:kb1", | ||||
| 		.chan_nr	= 0, | ||||
| 		.led_current	= 50, | ||||
| 		.max_current	= 100, | ||||
| 	}, { | ||||
| 		.name		= "lp5523:kb2", | ||||
| 		.chan_nr	= 1, | ||||
| 		.led_current	= 50, | ||||
| 		.max_current	= 100, | ||||
| 	}, { | ||||
| 		.name		= "lp5523:kb3", | ||||
| 		.chan_nr	= 2, | ||||
| 		.led_current	= 50, | ||||
| 		.max_current	= 100, | ||||
| 	}, { | ||||
| 		.name		= "lp5523:kb4", | ||||
| 		.chan_nr	= 3, | ||||
| 		.led_current	= 50, | ||||
| 		.max_current	= 100, | ||||
| 	}, { | ||||
| 		.name		= "lp5523:b", | ||||
| 		.chan_nr	= 4, | ||||
| 		.led_current	= 50, | ||||
| 		.max_current	= 100, | ||||
| 	}, { | ||||
| 		.name		= "lp5523:g", | ||||
| 		.chan_nr	= 5, | ||||
| 		.led_current	= 50, | ||||
| 		.max_current	= 100, | ||||
| 	}, { | ||||
| 		.name		= "lp5523:r", | ||||
| 		.chan_nr	= 6, | ||||
| 		.led_current	= 50, | ||||
| 		.max_current	= 100, | ||||
| 	}, { | ||||
| 		.name		= "lp5523:kb5", | ||||
| 		.chan_nr	= 7, | ||||
| 		.led_current	= 50, | ||||
| 		.max_current	= 100, | ||||
| 	}, { | ||||
| 		.name		= "lp5523:kb6", | ||||
| 		.chan_nr	= 8, | ||||
| 		.led_current	= 50, | ||||
| 		.max_current	= 100, | ||||
| 	} | ||||
| }; | ||||
| 
 | ||||
|  | ||||
| @ -272,9 +272,19 @@ static int omap2_onenand_setup_async(void __iomem *onenand_base) | ||||
| 	struct gpmc_timings t; | ||||
| 	int ret; | ||||
| 
 | ||||
| 	if (gpmc_onenand_data->of_node) | ||||
| 	if (gpmc_onenand_data->of_node) { | ||||
| 		gpmc_read_settings_dt(gpmc_onenand_data->of_node, | ||||
| 				      &onenand_async); | ||||
| 		if (onenand_async.sync_read || onenand_async.sync_write) { | ||||
| 			if (onenand_async.sync_write) | ||||
| 				gpmc_onenand_data->flags |= | ||||
| 					ONENAND_SYNC_READWRITE; | ||||
| 			else | ||||
| 				gpmc_onenand_data->flags |= ONENAND_SYNC_READ; | ||||
| 			onenand_async.sync_read = false; | ||||
| 			onenand_async.sync_write = false; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	omap2_onenand_set_async_mode(onenand_base); | ||||
| 
 | ||||
|  | ||||
| @ -28,7 +28,7 @@ | ||||
| #define OMAP_PULL_UP			(1 << 4) | ||||
| #define OMAP_ALTELECTRICALSEL		(1 << 5) | ||||
| 
 | ||||
| /* 34xx specific mux bit defines */ | ||||
| /* omap3/4/5 specific mux bit defines */ | ||||
| #define OMAP_INPUT_EN			(1 << 8) | ||||
| #define OMAP_OFF_EN			(1 << 9) | ||||
| #define OMAP_OFFOUT_EN			(1 << 10) | ||||
| @ -36,8 +36,6 @@ | ||||
| #define OMAP_OFF_PULL_EN		(1 << 12) | ||||
| #define OMAP_OFF_PULL_UP		(1 << 13) | ||||
| #define OMAP_WAKEUP_EN			(1 << 14) | ||||
| 
 | ||||
| /* 44xx specific mux bit defines */ | ||||
| #define OMAP_WAKEUP_EVENT		(1 << 15) | ||||
| 
 | ||||
| /* Active pin states */ | ||||
|  | ||||
| @ -628,7 +628,7 @@ void __init omap4_local_timer_init(void) | ||||
| #endif /* CONFIG_HAVE_ARM_TWD */ | ||||
| #endif /* CONFIG_ARCH_OMAP4 */ | ||||
| 
 | ||||
| #ifdef CONFIG_SOC_OMAP5 | ||||
| #if defined(CONFIG_SOC_OMAP5) || defined(CONFIG_SOC_DRA7XX) | ||||
| void __init omap5_realtime_timer_init(void) | ||||
| { | ||||
| 	omap4_sync32k_timer_init(); | ||||
| @ -636,7 +636,7 @@ void __init omap5_realtime_timer_init(void) | ||||
| 
 | ||||
| 	clocksource_of_init(); | ||||
| } | ||||
| #endif /* CONFIG_SOC_OMAP5 */ | ||||
| #endif /* CONFIG_SOC_OMAP5 || CONFIG_SOC_DRA7XX */ | ||||
| 
 | ||||
| /**
 | ||||
|  * omap_timer_init - build and register timer device with an | ||||
|  | ||||
| @ -1108,9 +1108,9 @@ static const struct pinctrl_map eva_pinctrl_map[] = { | ||||
| 	PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.1", "pfc-r8a7740", | ||||
| 				  "fsib_mclk_in", "fsib"), | ||||
| 	/* GETHER */ | ||||
| 	PIN_MAP_MUX_GROUP_DEFAULT("sh-eth", "pfc-r8a7740", | ||||
| 	PIN_MAP_MUX_GROUP_DEFAULT("r8a7740-gether", "pfc-r8a7740", | ||||
| 				  "gether_mii", "gether"), | ||||
| 	PIN_MAP_MUX_GROUP_DEFAULT("sh-eth", "pfc-r8a7740", | ||||
| 	PIN_MAP_MUX_GROUP_DEFAULT("r8a7740-gether", "pfc-r8a7740", | ||||
| 				  "gether_int", "gether"), | ||||
| 	/* HDMI */ | ||||
| 	PIN_MAP_MUX_GROUP_DEFAULT("sh-mobile-hdmi", "pfc-r8a7740", | ||||
|  | ||||
| @ -29,6 +29,7 @@ | ||||
| #include <linux/pinctrl/machine.h> | ||||
| #include <linux/platform_data/gpio-rcar.h> | ||||
| #include <linux/platform_device.h> | ||||
| #include <linux/phy.h> | ||||
| #include <linux/regulator/fixed.h> | ||||
| #include <linux/regulator/machine.h> | ||||
| #include <linux/sh_eth.h> | ||||
| @ -155,6 +156,30 @@ static void __init lager_add_standard_devices(void) | ||||
| 					  ðer_pdata, sizeof(ether_pdata)); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Ether LEDs on the Lager board are named LINK and ACTIVE which corresponds | ||||
|  * to non-default 01 setting of the Micrel KSZ8041 PHY control register 1 bits | ||||
|  * 14-15. We have to set them back to 01 from the default 00 value each time | ||||
|  * the PHY is reset. It's also important because the PHY's LED0 signal is | ||||
|  * connected to SoC's ETH_LINK signal and in the PHY's default mode it will | ||||
|  * bounce on and off after each packet, which we apparently want to avoid. | ||||
|  */ | ||||
| static int lager_ksz8041_fixup(struct phy_device *phydev) | ||||
| { | ||||
| 	u16 phyctrl1 = phy_read(phydev, 0x1e); | ||||
| 
 | ||||
| 	phyctrl1 &= ~0xc000; | ||||
| 	phyctrl1 |= 0x4000; | ||||
| 	return phy_write(phydev, 0x1e, phyctrl1); | ||||
| } | ||||
| 
 | ||||
| static void __init lager_init(void) | ||||
| { | ||||
| 	lager_add_standard_devices(); | ||||
| 
 | ||||
| 	phy_register_fixup_for_id("r8a7790-ether-ff:01", lager_ksz8041_fixup); | ||||
| } | ||||
| 
 | ||||
| static const char *lager_boards_compat_dt[] __initdata = { | ||||
| 	"renesas,lager", | ||||
| 	NULL, | ||||
| @ -163,6 +188,6 @@ static const char *lager_boards_compat_dt[] __initdata = { | ||||
| DT_MACHINE_START(LAGER_DT, "lager") | ||||
| 	.init_early	= r8a7790_init_delay, | ||||
| 	.init_time	= r8a7790_timer_init, | ||||
| 	.init_machine	= lager_add_standard_devices, | ||||
| 	.init_machine	= lager_init, | ||||
| 	.dt_compat	= lager_boards_compat_dt, | ||||
| MACHINE_END | ||||
|  | ||||
| @ -131,6 +131,16 @@ static void tc2_pm_down(u64 residency) | ||||
| 	} else | ||||
| 		BUG(); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * If the CPU is committed to power down, make sure | ||||
| 	 * the power controller will be in charge of waking it | ||||
| 	 * up upon IRQ, ie IRQ lines are cut from GIC CPU IF | ||||
| 	 * to the CPU by disabling the GIC CPU IF to prevent wfi | ||||
| 	 * from completing execution behind power controller back | ||||
| 	 */ | ||||
| 	if (!skip_wfi) | ||||
| 		gic_cpu_if_down(); | ||||
| 
 | ||||
| 	if (last_man && __mcpm_outbound_enter_critical(cpu, cluster)) { | ||||
| 		arch_spin_unlock(&tc2_pm_lock); | ||||
| 
 | ||||
| @ -231,7 +241,6 @@ static void tc2_pm_suspend(u64 residency) | ||||
| 	cpu = MPIDR_AFFINITY_LEVEL(mpidr, 0); | ||||
| 	cluster = MPIDR_AFFINITY_LEVEL(mpidr, 1); | ||||
| 	ve_spc_set_resume_addr(cluster, cpu, virt_to_phys(mcpm_entry_point)); | ||||
| 	gic_cpu_if_down(); | ||||
| 	tc2_pm_down(residency); | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -1232,7 +1232,8 @@ __iommu_create_mapping(struct device *dev, struct page **pages, size_t size) | ||||
| 				break; | ||||
| 
 | ||||
| 		len = (j - i) << PAGE_SHIFT; | ||||
| 		ret = iommu_map(mapping->domain, iova, phys, len, 0); | ||||
| 		ret = iommu_map(mapping->domain, iova, phys, len, | ||||
| 				IOMMU_READ|IOMMU_WRITE); | ||||
| 		if (ret < 0) | ||||
| 			goto fail; | ||||
| 		iova += len; | ||||
| @ -1431,6 +1432,27 @@ static int arm_iommu_get_sgtable(struct device *dev, struct sg_table *sgt, | ||||
| 					 GFP_KERNEL); | ||||
| } | ||||
| 
 | ||||
| static int __dma_direction_to_prot(enum dma_data_direction dir) | ||||
| { | ||||
| 	int prot; | ||||
| 
 | ||||
| 	switch (dir) { | ||||
| 	case DMA_BIDIRECTIONAL: | ||||
| 		prot = IOMMU_READ | IOMMU_WRITE; | ||||
| 		break; | ||||
| 	case DMA_TO_DEVICE: | ||||
| 		prot = IOMMU_READ; | ||||
| 		break; | ||||
| 	case DMA_FROM_DEVICE: | ||||
| 		prot = IOMMU_WRITE; | ||||
| 		break; | ||||
| 	default: | ||||
| 		prot = 0; | ||||
| 	} | ||||
| 
 | ||||
| 	return prot; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Map a part of the scatter-gather list into contiguous io address space | ||||
|  */ | ||||
| @ -1444,6 +1466,7 @@ static int __map_sg_chunk(struct device *dev, struct scatterlist *sg, | ||||
| 	int ret = 0; | ||||
| 	unsigned int count; | ||||
| 	struct scatterlist *s; | ||||
| 	int prot; | ||||
| 
 | ||||
| 	size = PAGE_ALIGN(size); | ||||
| 	*handle = DMA_ERROR_CODE; | ||||
| @ -1460,7 +1483,9 @@ static int __map_sg_chunk(struct device *dev, struct scatterlist *sg, | ||||
| 			!dma_get_attr(DMA_ATTR_SKIP_CPU_SYNC, attrs)) | ||||
| 			__dma_page_cpu_to_dev(sg_page(s), s->offset, s->length, dir); | ||||
| 
 | ||||
| 		ret = iommu_map(mapping->domain, iova, phys, len, 0); | ||||
| 		prot = __dma_direction_to_prot(dir); | ||||
| 
 | ||||
| 		ret = iommu_map(mapping->domain, iova, phys, len, prot); | ||||
| 		if (ret < 0) | ||||
| 			goto fail; | ||||
| 		count += len >> PAGE_SHIFT; | ||||
| @ -1665,19 +1690,7 @@ static dma_addr_t arm_coherent_iommu_map_page(struct device *dev, struct page *p | ||||
| 	if (dma_addr == DMA_ERROR_CODE) | ||||
| 		return dma_addr; | ||||
| 
 | ||||
| 	switch (dir) { | ||||
| 	case DMA_BIDIRECTIONAL: | ||||
| 		prot = IOMMU_READ | IOMMU_WRITE; | ||||
| 		break; | ||||
| 	case DMA_TO_DEVICE: | ||||
| 		prot = IOMMU_READ; | ||||
| 		break; | ||||
| 	case DMA_FROM_DEVICE: | ||||
| 		prot = IOMMU_WRITE; | ||||
| 		break; | ||||
| 	default: | ||||
| 		prot = 0; | ||||
| 	} | ||||
| 	prot = __dma_direction_to_prot(dir); | ||||
| 
 | ||||
| 	ret = iommu_map(mapping->domain, dma_addr, page_to_phys(page), len, prot); | ||||
| 	if (ret < 0) | ||||
|  | ||||
| @ -17,7 +17,6 @@ | ||||
| #include <linux/nodemask.h> | ||||
| #include <linux/initrd.h> | ||||
| #include <linux/of_fdt.h> | ||||
| #include <linux/of_reserved_mem.h> | ||||
| #include <linux/highmem.h> | ||||
| #include <linux/gfp.h> | ||||
| #include <linux/memblock.h> | ||||
| @ -379,8 +378,6 @@ void __init arm_memblock_init(struct meminfo *mi, | ||||
| 	if (mdesc->reserve) | ||||
| 		mdesc->reserve(); | ||||
| 
 | ||||
| 	early_init_dt_scan_reserved_mem(); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * reserve memory for DMA contigouos allocations, | ||||
| 	 * must come from DMA area inside low memory | ||||
|  | ||||
| @ -6,13 +6,6 @@ config FRAME_POINTER | ||||
| 	bool | ||||
| 	default y | ||||
| 
 | ||||
| config DEBUG_STACK_USAGE | ||||
| 	bool "Enable stack utilization instrumentation" | ||||
| 	depends on DEBUG_KERNEL | ||||
| 	help | ||||
| 	  Enables the display of the minimum amount of free stack which each | ||||
| 	  task has ever had available in the sysrq-T output. | ||||
| 
 | ||||
| config EARLY_PRINTK | ||||
| 	bool "Early printk support" | ||||
| 	default y | ||||
|  | ||||
| @ -42,7 +42,7 @@ CONFIG_IP_PNP_BOOTP=y | ||||
| # CONFIG_WIRELESS is not set | ||||
| CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||||
| CONFIG_DEVTMPFS=y | ||||
| # CONFIG_BLK_DEV is not set | ||||
| CONFIG_BLK_DEV=y | ||||
| CONFIG_SCSI=y | ||||
| # CONFIG_SCSI_PROC_FS is not set | ||||
| CONFIG_BLK_DEV_SD=y | ||||
| @ -72,6 +72,7 @@ CONFIG_LOGO=y | ||||
| # CONFIG_IOMMU_SUPPORT is not set | ||||
| CONFIG_EXT2_FS=y | ||||
| CONFIG_EXT3_FS=y | ||||
| CONFIG_EXT4_FS=y | ||||
| # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | ||||
| # CONFIG_EXT3_FS_XATTR is not set | ||||
| CONFIG_FUSE_FS=y | ||||
| @ -90,3 +91,5 @@ CONFIG_DEBUG_KERNEL=y | ||||
| CONFIG_DEBUG_INFO=y | ||||
| # CONFIG_FTRACE is not set | ||||
| CONFIG_ATOMIC64_SELFTEST=y | ||||
| CONFIG_VIRTIO_MMIO=y | ||||
| CONFIG_VIRTIO_BLK=y | ||||
|  | ||||
| @ -166,9 +166,10 @@ do {									\ | ||||
| 
 | ||||
| #define get_user(x, ptr)						\ | ||||
| ({									\ | ||||
| 	__typeof__(*(ptr)) __user *__p = (ptr);				\ | ||||
| 	might_fault();							\ | ||||
| 	access_ok(VERIFY_READ, (ptr), sizeof(*(ptr))) ?			\ | ||||
| 		__get_user((x), (ptr)) :				\ | ||||
| 	access_ok(VERIFY_READ, __p, sizeof(*__p)) ?			\ | ||||
| 		__get_user((x), __p) :					\ | ||||
| 		((x) = 0, -EFAULT);					\ | ||||
| }) | ||||
| 
 | ||||
| @ -227,9 +228,10 @@ do {									\ | ||||
| 
 | ||||
| #define put_user(x, ptr)						\ | ||||
| ({									\ | ||||
| 	__typeof__(*(ptr)) __user *__p = (ptr);				\ | ||||
| 	might_fault();							\ | ||||
| 	access_ok(VERIFY_WRITE, (ptr), sizeof(*(ptr))) ?		\ | ||||
| 		__put_user((x), (ptr)) :				\ | ||||
| 	access_ok(VERIFY_WRITE, __p, sizeof(*__p)) ?			\ | ||||
| 		__put_user((x), __p) :					\ | ||||
| 		-EFAULT;						\ | ||||
| }) | ||||
| 
 | ||||
|  | ||||
| @ -80,8 +80,10 @@ void fpsimd_thread_switch(struct task_struct *next) | ||||
| 
 | ||||
| void fpsimd_flush_thread(void) | ||||
| { | ||||
| 	preempt_disable(); | ||||
| 	memset(¤t->thread.fpsimd_state, 0, sizeof(struct fpsimd_state)); | ||||
| 	fpsimd_load_state(¤t->thread.fpsimd_state); | ||||
| 	preempt_enable(); | ||||
| } | ||||
| 
 | ||||
| #ifdef CONFIG_KERNEL_MODE_NEON | ||||
|  | ||||
| @ -35,7 +35,7 @@ | ||||
|  */ | ||||
| ENTRY(__cpu_flush_user_tlb_range) | ||||
| 	vma_vm_mm x3, x2			// get vma->vm_mm | ||||
| 	mmid	x3, x3				// get vm_mm->context.id | ||||
| 	mmid	w3, x3				// get vm_mm->context.id | ||||
| 	dsb	sy | ||||
| 	lsr	x0, x0, #12			// align address | ||||
| 	lsr	x1, x1, #12 | ||||
|  | ||||
| @ -276,7 +276,7 @@ static struct platform_device mtx1_pci_host = { | ||||
| 	.resource	= alchemy_pci_host_res, | ||||
| }; | ||||
| 
 | ||||
| static struct __initdata platform_device * mtx1_devs[] = { | ||||
| static struct platform_device *mtx1_devs[] __initdata = { | ||||
| 	&mtx1_pci_host, | ||||
| 	&mtx1_gpio_leds, | ||||
| 	&mtx1_wdt, | ||||
|  | ||||
| @ -22,7 +22,7 @@ | ||||
| 
 | ||||
| static __always_inline bool arch_static_branch(struct static_key *key) | ||||
| { | ||||
| 	asm goto("1:\tnop\n\t" | ||||
| 	asm_volatile_goto("1:\tnop\n\t" | ||||
| 		"nop\n\t" | ||||
| 		".pushsection __jump_table,  \"aw\"\n\t" | ||||
| 		WORD_INSN " 1b, %l[l_yes], %0\n\t" | ||||
|  | ||||
| @ -73,7 +73,7 @@ | ||||
| 3: | ||||
| 
 | ||||
| #if defined(CONFIG_CC_STACKPROTECTOR) && !defined(CONFIG_SMP) | ||||
| 	PTR_L	t8, __stack_chk_guard | ||||
| 	PTR_LA	t8, __stack_chk_guard | ||||
| 	LONG_L	t9, TASK_STACK_CANARY(a1) | ||||
| 	LONG_S	t9, 0(t8) | ||||
| #endif | ||||
|  | ||||
| @ -67,7 +67,7 @@ LEAF(resume) | ||||
| 1: | ||||
| 
 | ||||
| #if defined(CONFIG_CC_STACKPROTECTOR) && !defined(CONFIG_SMP) | ||||
| 	PTR_L	t8, __stack_chk_guard | ||||
| 	PTR_LA	t8, __stack_chk_guard | ||||
| 	LONG_L	t9, TASK_STACK_CANARY(a1) | ||||
| 	LONG_S	t9, 0(t8) | ||||
| #endif | ||||
|  | ||||
| @ -69,7 +69,7 @@ | ||||
| 1: | ||||
| 
 | ||||
| #if defined(CONFIG_CC_STACKPROTECTOR) && !defined(CONFIG_SMP) | ||||
| 	PTR_L	t8, __stack_chk_guard | ||||
| 	PTR_LA	t8, __stack_chk_guard | ||||
| 	LONG_L	t9, TASK_STACK_CANARY(a1) | ||||
| 	LONG_S	t9, 0(t8) | ||||
| #endif | ||||
|  | ||||
| @ -609,6 +609,7 @@ static void r4k_dma_cache_wback_inv(unsigned long addr, unsigned long size) | ||||
| 			r4k_blast_scache(); | ||||
| 		else | ||||
| 			blast_scache_range(addr, addr + size); | ||||
| 		preempt_enable(); | ||||
| 		__sync(); | ||||
| 		return; | ||||
| 	} | ||||
| @ -650,6 +651,7 @@ static void r4k_dma_cache_inv(unsigned long addr, unsigned long size) | ||||
| 			 */ | ||||
| 			blast_inv_scache_range(addr, addr + size); | ||||
| 		} | ||||
| 		preempt_enable(); | ||||
| 		__sync(); | ||||
| 		return; | ||||
| 	} | ||||
|  | ||||
| @ -40,6 +40,8 @@ CONFIG_IP_NF_QUEUE=m | ||||
| CONFIG_LLC2=m | ||||
| CONFIG_NET_PKTGEN=m | ||||
| CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||||
| CONFIG_DEVTMPFS=y | ||||
| CONFIG_DEVTMPFS_MOUNT=y | ||||
| # CONFIG_STANDALONE is not set | ||||
| # CONFIG_PREVENT_FIRMWARE_BUILD is not set | ||||
| CONFIG_PARPORT=y | ||||
|  | ||||
| @ -79,6 +79,8 @@ CONFIG_IP_DCCP=m | ||||
| CONFIG_LLC2=m | ||||
| CONFIG_NET_PKTGEN=m | ||||
| CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||||
| CONFIG_DEVTMPFS=y | ||||
| CONFIG_DEVTMPFS_MOUNT=y | ||||
| # CONFIG_STANDALONE is not set | ||||
| # CONFIG_PREVENT_FIRMWARE_BUILD is not set | ||||
| CONFIG_BLK_DEV_UMEM=m | ||||
|  | ||||
| @ -4,6 +4,7 @@ CONFIG_IKCONFIG=y | ||||
| CONFIG_IKCONFIG_PROC=y | ||||
| CONFIG_LOG_BUF_SHIFT=16 | ||||
| CONFIG_SYSFS_DEPRECATED_V2=y | ||||
| CONFIG_BLK_DEV_INITRD=y | ||||
| CONFIG_SLAB=y | ||||
| CONFIG_MODULES=y | ||||
| CONFIG_MODVERSIONS=y | ||||
| @ -27,6 +28,8 @@ CONFIG_IP_PNP_BOOTP=y | ||||
| # CONFIG_INET_LRO is not set | ||||
| CONFIG_IPV6=y | ||||
| CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||||
| CONFIG_DEVTMPFS=y | ||||
| CONFIG_DEVTMPFS_MOUNT=y | ||||
| # CONFIG_PREVENT_FIRMWARE_BUILD is not set | ||||
| CONFIG_PARPORT=y | ||||
| CONFIG_PARPORT_PC=y | ||||
|  | ||||
| @ -5,6 +5,7 @@ CONFIG_IKCONFIG=y | ||||
| CONFIG_IKCONFIG_PROC=y | ||||
| CONFIG_LOG_BUF_SHIFT=16 | ||||
| CONFIG_SYSFS_DEPRECATED_V2=y | ||||
| CONFIG_BLK_DEV_INITRD=y | ||||
| # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||||
| CONFIG_EXPERT=y | ||||
| CONFIG_KALLSYMS_ALL=y | ||||
| @ -39,6 +40,8 @@ CONFIG_NETFILTER_DEBUG=y | ||||
| CONFIG_IP_NF_QUEUE=m | ||||
| CONFIG_NET_PKTGEN=m | ||||
| CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||||
| CONFIG_DEVTMPFS=y | ||||
| CONFIG_DEVTMPFS_MOUNT=y | ||||
| # CONFIG_STANDALONE is not set | ||||
| # CONFIG_PREVENT_FIRMWARE_BUILD is not set | ||||
| CONFIG_BLK_DEV_UMEM=m | ||||
|  | ||||
| @ -62,6 +62,8 @@ CONFIG_TIPC=m | ||||
| CONFIG_LLC2=m | ||||
| CONFIG_DNS_RESOLVER=y | ||||
| CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||||
| CONFIG_DEVTMPFS=y | ||||
| CONFIG_DEVTMPFS_MOUNT=y | ||||
| # CONFIG_STANDALONE is not set | ||||
| CONFIG_PARPORT=y | ||||
| CONFIG_PARPORT_PC=y | ||||
|  | ||||
| @ -49,6 +49,8 @@ CONFIG_INET6_ESP=y | ||||
| CONFIG_INET6_IPCOMP=y | ||||
| CONFIG_LLC2=m | ||||
| CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||||
| CONFIG_DEVTMPFS=y | ||||
| CONFIG_DEVTMPFS_MOUNT=y | ||||
| # CONFIG_STANDALONE is not set | ||||
| # CONFIG_PREVENT_FIRMWARE_BUILD is not set | ||||
| CONFIG_PARPORT=y | ||||
|  | ||||
| @ -6,7 +6,7 @@ struct pt_regs; | ||||
| 
 | ||||
| /* traps.c */ | ||||
| void parisc_terminate(char *msg, struct pt_regs *regs, | ||||
| 		int code, unsigned long offset); | ||||
| 		int code, unsigned long offset) __noreturn __cold; | ||||
| 
 | ||||
| /* mm/fault.c */ | ||||
| void do_page_fault(struct pt_regs *regs, unsigned long code, | ||||
|  | ||||
| @ -72,7 +72,6 @@ enum ipi_message_type { | ||||
| 	IPI_NOP=0, | ||||
| 	IPI_RESCHEDULE=1, | ||||
| 	IPI_CALL_FUNC, | ||||
| 	IPI_CALL_FUNC_SINGLE, | ||||
| 	IPI_CPU_START, | ||||
| 	IPI_CPU_STOP, | ||||
| 	IPI_CPU_TEST | ||||
| @ -164,11 +163,6 @@ ipi_interrupt(int irq, void *dev_id) | ||||
| 				generic_smp_call_function_interrupt(); | ||||
| 				break; | ||||
| 
 | ||||
| 			case IPI_CALL_FUNC_SINGLE: | ||||
| 				smp_debug(100, KERN_DEBUG "CPU%d IPI_CALL_FUNC_SINGLE\n", this_cpu); | ||||
| 				generic_smp_call_function_single_interrupt(); | ||||
| 				break; | ||||
| 
 | ||||
| 			case IPI_CPU_START: | ||||
| 				smp_debug(100, KERN_DEBUG "CPU%d IPI_CPU_START\n", this_cpu); | ||||
| 				break; | ||||
| @ -260,7 +254,7 @@ void arch_send_call_function_ipi_mask(const struct cpumask *mask) | ||||
| 
 | ||||
| void arch_send_call_function_single_ipi(int cpu) | ||||
| { | ||||
| 	send_IPI_single(cpu, IPI_CALL_FUNC_SINGLE); | ||||
| 	send_IPI_single(cpu, IPI_CALL_FUNC); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  | ||||
| @ -291,11 +291,6 @@ void die_if_kernel(char *str, struct pt_regs *regs, long err) | ||||
| 	do_exit(SIGSEGV); | ||||
| } | ||||
| 
 | ||||
| int syscall_ipi(int (*syscall) (struct pt_regs *), struct pt_regs *regs) | ||||
| { | ||||
| 	return syscall(regs); | ||||
| } | ||||
| 
 | ||||
| /* gdb uses break 4,8 */ | ||||
| #define GDB_BREAK_INSN 0x10004 | ||||
| static void handle_gdb_break(struct pt_regs *regs, int wot) | ||||
| @ -805,14 +800,14 @@ void notrace handle_interruption(int code, struct pt_regs *regs) | ||||
| 	else { | ||||
| 
 | ||||
| 	    /*
 | ||||
| 	     * The kernel should never fault on its own address space. | ||||
| 	     * The kernel should never fault on its own address space, | ||||
| 	     * unless pagefault_disable() was called before. | ||||
| 	     */ | ||||
| 
 | ||||
| 	    if (fault_space == 0)  | ||||
| 	    if (fault_space == 0 && !in_atomic()) | ||||
| 	    { | ||||
| 		pdc_chassis_send_status(PDC_CHASSIS_DIRECT_PANIC); | ||||
| 		parisc_terminate("Kernel Fault", regs, code, fault_address); | ||||
| 	 | ||||
| 	    } | ||||
| 	} | ||||
| 
 | ||||
|  | ||||
| @ -56,7 +56,7 @@ | ||||
| #ifdef __KERNEL__ | ||||
| #include <linux/module.h> | ||||
| #include <linux/compiler.h> | ||||
| #include <asm/uaccess.h> | ||||
| #include <linux/uaccess.h> | ||||
| #define s_space "%%sr1" | ||||
| #define d_space "%%sr2" | ||||
| #else | ||||
| @ -524,4 +524,17 @@ EXPORT_SYMBOL(copy_to_user); | ||||
| EXPORT_SYMBOL(copy_from_user); | ||||
| EXPORT_SYMBOL(copy_in_user); | ||||
| EXPORT_SYMBOL(memcpy); | ||||
| 
 | ||||
| long probe_kernel_read(void *dst, const void *src, size_t size) | ||||
| { | ||||
| 	unsigned long addr = (unsigned long)src; | ||||
| 
 | ||||
| 	if (size < 0 || addr < PAGE_SIZE) | ||||
| 		return -EFAULT; | ||||
| 
 | ||||
| 	/* check for I/O space F_EXTEND(0xfff00000) access as well? */ | ||||
| 
 | ||||
| 	return __probe_kernel_read(dst, src, size); | ||||
| } | ||||
| 
 | ||||
| #endif | ||||
|  | ||||
| @ -171,20 +171,25 @@ void do_page_fault(struct pt_regs *regs, unsigned long code, | ||||
| 			      unsigned long address) | ||||
| { | ||||
| 	struct vm_area_struct *vma, *prev_vma; | ||||
| 	struct task_struct *tsk = current; | ||||
| 	struct mm_struct *mm = tsk->mm; | ||||
| 	struct task_struct *tsk; | ||||
| 	struct mm_struct *mm; | ||||
| 	unsigned long acc_type; | ||||
| 	int fault; | ||||
| 	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; | ||||
| 	unsigned int flags; | ||||
| 
 | ||||
| 	if (in_atomic() || !mm) | ||||
| 	if (in_atomic()) | ||||
| 		goto no_context; | ||||
| 
 | ||||
| 	tsk = current; | ||||
| 	mm = tsk->mm; | ||||
| 	if (!mm) | ||||
| 		goto no_context; | ||||
| 
 | ||||
| 	flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; | ||||
| 	if (user_mode(regs)) | ||||
| 		flags |= FAULT_FLAG_USER; | ||||
| 
 | ||||
| 	acc_type = parisc_acctyp(code, regs->iir); | ||||
| 
 | ||||
| 	if (acc_type & VM_WRITE) | ||||
| 		flags |= FAULT_FLAG_WRITE; | ||||
| retry: | ||||
|  | ||||
| @ -19,7 +19,7 @@ | ||||
| 
 | ||||
| static __always_inline bool arch_static_branch(struct static_key *key) | ||||
| { | ||||
| 	asm goto("1:\n\t" | ||||
| 	asm_volatile_goto("1:\n\t" | ||||
| 		 "nop\n\t" | ||||
| 		 ".pushsection __jump_table,  \"aw\"\n\t" | ||||
| 		 JUMP_ENTRY_TYPE "1b, %l[l_yes], %c0\n\t" | ||||
|  | ||||
| @ -661,7 +661,7 @@ struct iommu_table *iommu_init_table(struct iommu_table *tbl, int nid) | ||||
| 	/* number of bytes needed for the bitmap */ | ||||
| 	sz = BITS_TO_LONGS(tbl->it_size) * sizeof(unsigned long); | ||||
| 
 | ||||
| 	page = alloc_pages_node(nid, GFP_ATOMIC, get_order(sz)); | ||||
| 	page = alloc_pages_node(nid, GFP_KERNEL, get_order(sz)); | ||||
| 	if (!page) | ||||
| 		panic("iommu_init_table: Can't allocate %ld bytes\n", sz); | ||||
| 	tbl->it_map = page_address(page); | ||||
|  | ||||
| @ -495,14 +495,15 @@ void __do_irq(struct pt_regs *regs) | ||||
| void do_IRQ(struct pt_regs *regs) | ||||
| { | ||||
| 	struct pt_regs *old_regs = set_irq_regs(regs); | ||||
| 	struct thread_info *curtp, *irqtp; | ||||
| 	struct thread_info *curtp, *irqtp, *sirqtp; | ||||
| 
 | ||||
| 	/* Switch to the irq stack to handle this */ | ||||
| 	curtp = current_thread_info(); | ||||
| 	irqtp = hardirq_ctx[raw_smp_processor_id()]; | ||||
| 	sirqtp = softirq_ctx[raw_smp_processor_id()]; | ||||
| 
 | ||||
| 	/* Already there ? */ | ||||
| 	if (unlikely(curtp == irqtp)) { | ||||
| 	if (unlikely(curtp == irqtp || curtp == sirqtp)) { | ||||
| 		__do_irq(regs); | ||||
| 		set_irq_regs(old_regs); | ||||
| 		return; | ||||
|  | ||||
| @ -17,6 +17,7 @@ | ||||
| #include <asm/machdep.h> | ||||
| #include <asm/smp.h> | ||||
| #include <asm/pmc.h> | ||||
| #include <asm/firmware.h> | ||||
| 
 | ||||
| #include "cacheinfo.h" | ||||
| 
 | ||||
| @ -179,15 +180,25 @@ SYSFS_PMCSETUP(spurr, SPRN_SPURR); | ||||
| SYSFS_PMCSETUP(dscr, SPRN_DSCR); | ||||
| SYSFS_PMCSETUP(pir, SPRN_PIR); | ||||
| 
 | ||||
| /*
 | ||||
|   Lets only enable read for phyp resources and | ||||
|   enable write when needed with a separate function. | ||||
|   Lets be conservative and default to pseries. | ||||
| */ | ||||
| static DEVICE_ATTR(mmcra, 0600, show_mmcra, store_mmcra); | ||||
| static DEVICE_ATTR(spurr, 0400, show_spurr, NULL); | ||||
| static DEVICE_ATTR(dscr, 0600, show_dscr, store_dscr); | ||||
| static DEVICE_ATTR(purr, 0600, show_purr, store_purr); | ||||
| static DEVICE_ATTR(purr, 0400, show_purr, store_purr); | ||||
| static DEVICE_ATTR(pir, 0400, show_pir, NULL); | ||||
| 
 | ||||
| unsigned long dscr_default = 0; | ||||
| EXPORT_SYMBOL(dscr_default); | ||||
| 
 | ||||
| static void add_write_permission_dev_attr(struct device_attribute *attr) | ||||
| { | ||||
| 	attr->attr.mode |= 0200; | ||||
| } | ||||
| 
 | ||||
| static ssize_t show_dscr_default(struct device *dev, | ||||
| 		struct device_attribute *attr, char *buf) | ||||
| { | ||||
| @ -394,8 +405,11 @@ static void register_cpu_online(unsigned int cpu) | ||||
| 	if (cpu_has_feature(CPU_FTR_MMCRA)) | ||||
| 		device_create_file(s, &dev_attr_mmcra); | ||||
| 
 | ||||
| 	if (cpu_has_feature(CPU_FTR_PURR)) | ||||
| 	if (cpu_has_feature(CPU_FTR_PURR)) { | ||||
| 		if (!firmware_has_feature(FW_FEATURE_LPAR)) | ||||
| 			add_write_permission_dev_attr(&dev_attr_purr); | ||||
| 		device_create_file(s, &dev_attr_purr); | ||||
| 	} | ||||
| 
 | ||||
| 	if (cpu_has_feature(CPU_FTR_SPURR)) | ||||
| 		device_create_file(s, &dev_attr_spurr); | ||||
|  | ||||
| @ -79,6 +79,11 @@ _GLOBAL(tm_abort) | ||||
| 	TABORT(R3) | ||||
| 	blr | ||||
| 
 | ||||
| 	.section	".toc","aw" | ||||
| DSCR_DEFAULT: | ||||
| 	.tc dscr_default[TC],dscr_default | ||||
| 
 | ||||
| 	.section	".text" | ||||
| 
 | ||||
| /* void tm_reclaim(struct thread_struct *thread, | ||||
|  *                 unsigned long orig_msr, | ||||
| @ -123,6 +128,7 @@ _GLOBAL(tm_reclaim) | ||||
| 	mr	r15, r14 | ||||
| 	ori	r15, r15, MSR_FP | ||||
| 	li	r16, MSR_RI | ||||
| 	ori	r16, r16, MSR_EE /* IRQs hard off */ | ||||
| 	andc	r15, r15, r16 | ||||
| 	oris	r15, r15, MSR_VEC@h
 | ||||
| #ifdef CONFIG_VSX | ||||
| @ -187,11 +193,18 @@ dont_backup_fp: | ||||
| 	std	r1, PACATMSCRATCH(r13) | ||||
| 	ld	r1, PACAR1(r13) | ||||
| 
 | ||||
| 	/* Store the PPR in r11 and reset to decent value */ | ||||
| 	std	r11, GPR11(r1)			/* Temporary stash */ | ||||
| 	mfspr	r11, SPRN_PPR | ||||
| 	HMT_MEDIUM | ||||
| 
 | ||||
| 	/* Now get some more GPRS free */ | ||||
| 	std	r7, GPR7(r1)			/* Temporary stash */ | ||||
| 	std	r12, GPR12(r1)			/* ''   ''    ''   */ | ||||
| 	ld	r12, STACK_PARAM(0)(r1)		/* Param 0, thread_struct * */ | ||||
| 
 | ||||
| 	std	r11, THREAD_TM_PPR(r12)		/* Store PPR and free r11 */ | ||||
| 
 | ||||
| 	addi	r7, r12, PT_CKPT_REGS		/* Thread's ckpt_regs */ | ||||
| 
 | ||||
| 	/* Make r7 look like an exception frame so that we | ||||
| @ -203,15 +216,19 @@ dont_backup_fp: | ||||
| 	SAVE_GPR(0, r7)				/* user r0 */ | ||||
| 	SAVE_GPR(2, r7)			/* user r2 */ | ||||
| 	SAVE_4GPRS(3, r7)			/* user r3-r6 */ | ||||
| 	SAVE_4GPRS(8, r7)			/* user r8-r11 */ | ||||
| 	SAVE_GPR(8, r7)				/* user r8 */ | ||||
| 	SAVE_GPR(9, r7)				/* user r9 */ | ||||
| 	SAVE_GPR(10, r7)			/* user r10 */ | ||||
| 	ld	r3, PACATMSCRATCH(r13)		/* user r1 */ | ||||
| 	ld	r4, GPR7(r1)			/* user r7 */ | ||||
| 	ld	r5, GPR12(r1)			/* user r12 */ | ||||
| 	GET_SCRATCH0(6)				/* user r13 */ | ||||
| 	ld	r5, GPR11(r1)			/* user r11 */ | ||||
| 	ld	r6, GPR12(r1)			/* user r12 */ | ||||
| 	GET_SCRATCH0(8)				/* user r13 */ | ||||
| 	std	r3, GPR1(r7) | ||||
| 	std	r4, GPR7(r7) | ||||
| 	std	r5, GPR12(r7) | ||||
| 	std	r6, GPR13(r7) | ||||
| 	std	r5, GPR11(r7) | ||||
| 	std	r6, GPR12(r7) | ||||
| 	std	r8, GPR13(r7) | ||||
| 
 | ||||
| 	SAVE_NVGPRS(r7)				/* user r14-r31 */ | ||||
| 
 | ||||
| @ -234,14 +251,12 @@ dont_backup_fp: | ||||
| 	std	r6, _XER(r7) | ||||
| 
 | ||||
| 
 | ||||
| 	/* ******************** TAR, PPR, DSCR ********** */ | ||||
| 	/* ******************** TAR, DSCR ********** */ | ||||
| 	mfspr	r3, SPRN_TAR | ||||
| 	mfspr	r4, SPRN_PPR | ||||
| 	mfspr	r5, SPRN_DSCR | ||||
| 	mfspr	r4, SPRN_DSCR | ||||
| 
 | ||||
| 	std	r3, THREAD_TM_TAR(r12) | ||||
| 	std	r4, THREAD_TM_PPR(r12) | ||||
| 	std	r5, THREAD_TM_DSCR(r12) | ||||
| 	std	r4, THREAD_TM_DSCR(r12) | ||||
| 
 | ||||
| 	/* MSR and flags:  We don't change CRs, and we don't need to alter | ||||
| 	 * MSR. | ||||
| @ -258,7 +273,7 @@ dont_backup_fp: | ||||
| 	std	r3, THREAD_TM_TFHAR(r12) | ||||
| 	std	r4, THREAD_TM_TFIAR(r12) | ||||
| 
 | ||||
| 	/* AMR and PPR are checkpointed too, but are unsupported by Linux. */ | ||||
| 	/* AMR is checkpointed too, but is unsupported by Linux. */ | ||||
| 
 | ||||
| 	/* Restore original MSR/IRQ state & clear TM mode */ | ||||
| 	ld	r14, TM_FRAME_L0(r1)		/* Orig MSR */ | ||||
| @ -274,6 +289,12 @@ dont_backup_fp: | ||||
| 	mtcr	r4 | ||||
| 	mtlr	r0 | ||||
| 	ld	r2, 40(r1) | ||||
| 
 | ||||
| 	/* Load system default DSCR */ | ||||
| 	ld	r4, DSCR_DEFAULT@toc(r2)
 | ||||
| 	ld	r0, 0(r4) | ||||
| 	mtspr	SPRN_DSCR, r0 | ||||
| 
 | ||||
| 	blr | ||||
| 
 | ||||
| 
 | ||||
| @ -358,25 +379,24 @@ dont_restore_fp: | ||||
| 
 | ||||
| restore_gprs: | ||||
| 
 | ||||
| 	/* ******************** TAR, PPR, DSCR ********** */ | ||||
| 	ld	r4, THREAD_TM_TAR(r3) | ||||
| 	ld	r5, THREAD_TM_PPR(r3) | ||||
| 	ld	r6, THREAD_TM_DSCR(r3) | ||||
| 
 | ||||
| 	mtspr	SPRN_TAR,	r4 | ||||
| 	mtspr	SPRN_PPR,	r5 | ||||
| 	mtspr	SPRN_DSCR,	r6 | ||||
| 
 | ||||
| 	/* ******************** CR,LR,CCR,MSR ********** */ | ||||
| 	ld	r3, _CTR(r7) | ||||
| 	ld	r4, _LINK(r7) | ||||
| 	ld	r5, _CCR(r7) | ||||
| 	ld	r6, _XER(r7) | ||||
| 	ld	r4, _CTR(r7) | ||||
| 	ld	r5, _LINK(r7) | ||||
| 	ld	r6, _CCR(r7) | ||||
| 	ld	r8, _XER(r7) | ||||
| 
 | ||||
| 	mtctr	r3 | ||||
| 	mtlr	r4 | ||||
| 	mtcr	r5 | ||||
| 	mtxer	r6 | ||||
| 	mtctr	r4 | ||||
| 	mtlr	r5 | ||||
| 	mtcr	r6 | ||||
| 	mtxer	r8 | ||||
| 
 | ||||
| 	/* ******************** TAR ******************** */ | ||||
| 	ld	r4, THREAD_TM_TAR(r3) | ||||
| 	mtspr	SPRN_TAR,	r4 | ||||
| 
 | ||||
| 	/* Load up the PPR and DSCR in GPRs only at this stage */ | ||||
| 	ld	r5, THREAD_TM_DSCR(r3) | ||||
| 	ld	r6, THREAD_TM_PPR(r3) | ||||
| 
 | ||||
| 	/* Clear the MSR RI since we are about to change R1.  EE is already off | ||||
| 	 */ | ||||
| @ -384,19 +404,26 @@ restore_gprs: | ||||
| 	mtmsrd	r4, 1 | ||||
| 
 | ||||
| 	REST_4GPRS(0, r7)			/* GPR0-3 */ | ||||
| 	REST_GPR(4, r7)				/* GPR4-6 */ | ||||
| 	REST_GPR(5, r7) | ||||
| 	REST_GPR(6, r7) | ||||
| 	REST_GPR(4, r7)				/* GPR4 */ | ||||
| 	REST_4GPRS(8, r7)			/* GPR8-11 */ | ||||
| 	REST_2GPRS(12, r7)			/* GPR12-13 */ | ||||
| 
 | ||||
| 	REST_NVGPRS(r7)				/* GPR14-31 */ | ||||
| 
 | ||||
| 	ld	r7, GPR7(r7)			/* GPR7 */ | ||||
| 	/* Load up PPR and DSCR here so we don't run with user values for long | ||||
| 	 */ | ||||
| 	mtspr	SPRN_DSCR, r5 | ||||
| 	mtspr	SPRN_PPR, r6 | ||||
| 
 | ||||
| 	REST_GPR(5, r7)				/* GPR5-7 */ | ||||
| 	REST_GPR(6, r7) | ||||
| 	ld	r7, GPR7(r7) | ||||
| 
 | ||||
| 	/* Commit register state as checkpointed state: */ | ||||
| 	TRECHKPT | ||||
| 
 | ||||
| 	HMT_MEDIUM | ||||
| 
 | ||||
| 	/* Our transactional state has now changed. | ||||
| 	 * | ||||
| 	 * Now just get out of here.  Transactional (current) state will be | ||||
| @ -419,6 +446,12 @@ restore_gprs: | ||||
| 	mtcr	r4 | ||||
| 	mtlr	r0 | ||||
| 	ld	r2, 40(r1) | ||||
| 
 | ||||
| 	/* Load system default DSCR */ | ||||
| 	ld	r4, DSCR_DEFAULT@toc(r2)
 | ||||
| 	ld	r0, 0(r4) | ||||
| 	mtspr	SPRN_DSCR, r0 | ||||
| 
 | ||||
| 	blr | ||||
| 
 | ||||
| 	/* ****************************************************************** */ | ||||
|  | ||||
| @ -1530,11 +1530,15 @@ static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, | ||||
| 	const char *cp; | ||||
| 
 | ||||
| 	dn = dev->of_node; | ||||
| 	if (!dn) | ||||
| 		return -ENODEV; | ||||
| 	if (!dn) { | ||||
| 		strcat(buf, "\n"); | ||||
| 		return strlen(buf); | ||||
| 	} | ||||
| 	cp = of_get_property(dn, "compatible", NULL); | ||||
| 	if (!cp) | ||||
| 		return -ENODEV; | ||||
| 	if (!cp) { | ||||
| 		strcat(buf, "\n"); | ||||
| 		return strlen(buf); | ||||
| 	} | ||||
| 
 | ||||
| 	return sprintf(buf, "vio:T%sS%s\n", vio_dev->type, cp); | ||||
| } | ||||
|  | ||||
| @ -1066,7 +1066,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_206) | ||||
| BEGIN_FTR_SECTION | ||||
| 	mfspr	r8, SPRN_DSCR | ||||
| 	ld	r7, HSTATE_DSCR(r13) | ||||
| 	std	r8, VCPU_DSCR(r7) | ||||
| 	std	r8, VCPU_DSCR(r9) | ||||
| 	mtspr	SPRN_DSCR, r7 | ||||
| END_FTR_SECTION_IFSET(CPU_FTR_ARCH_206) | ||||
| 
 | ||||
|  | ||||
| @ -332,6 +332,13 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500, | ||||
| 	unsigned long hva; | ||||
| 	int pfnmap = 0; | ||||
| 	int tsize = BOOK3E_PAGESZ_4K; | ||||
| 	int ret = 0; | ||||
| 	unsigned long mmu_seq; | ||||
| 	struct kvm *kvm = vcpu_e500->vcpu.kvm; | ||||
| 
 | ||||
| 	/* used to check for invalidations in progress */ | ||||
| 	mmu_seq = kvm->mmu_notifier_seq; | ||||
| 	smp_rmb(); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Translate guest physical to true physical, acquiring | ||||
| @ -449,6 +456,12 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500, | ||||
| 		gvaddr &= ~((tsize_pages << PAGE_SHIFT) - 1); | ||||
| 	} | ||||
| 
 | ||||
| 	spin_lock(&kvm->mmu_lock); | ||||
| 	if (mmu_notifier_retry(kvm, mmu_seq)) { | ||||
| 		ret = -EAGAIN; | ||||
| 		goto out; | ||||
| 	} | ||||
| 
 | ||||
| 	kvmppc_e500_ref_setup(ref, gtlbe, pfn); | ||||
| 
 | ||||
| 	kvmppc_e500_setup_stlbe(&vcpu_e500->vcpu, gtlbe, tsize, | ||||
| @ -457,10 +470,13 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500, | ||||
| 	/* Clear i-cache for new pages */ | ||||
| 	kvmppc_mmu_flush_icache(pfn); | ||||
| 
 | ||||
| out: | ||||
| 	spin_unlock(&kvm->mmu_lock); | ||||
| 
 | ||||
| 	/* Drop refcount on page, so that mmu notifiers can clear it */ | ||||
| 	kvm_release_pfn_clean(pfn); | ||||
| 
 | ||||
| 	return 0; | ||||
| 	return ret; | ||||
| } | ||||
| 
 | ||||
| /* XXX only map the one-one case, for now use TLB0 */ | ||||
|  | ||||
| @ -226,19 +226,35 @@ _GLOBAL(csum_partial) | ||||
| 	blr | ||||
| 
 | ||||
| 
 | ||||
| 	.macro source
 | ||||
| 	.macro srcnr
 | ||||
| 100: | ||||
| 	.section __ex_table,"a" | ||||
| 	.align 3
 | ||||
| 	.llong 100b,.Lsrc_error | ||||
| 	.llong 100b,.Lsrc_error_nr | ||||
| 	.previous | ||||
| 	.endm | ||||
| 
 | ||||
| 	.macro source
 | ||||
| 150: | ||||
| 	.section __ex_table,"a" | ||||
| 	.align 3
 | ||||
| 	.llong 150b,.Lsrc_error | ||||
| 	.previous | ||||
| 	.endm | ||||
| 
 | ||||
| 	.macro dstnr
 | ||||
| 200: | ||||
| 	.section __ex_table,"a" | ||||
| 	.align 3
 | ||||
| 	.llong 200b,.Ldest_error_nr | ||||
| 	.previous | ||||
| 	.endm | ||||
| 
 | ||||
| 	.macro dest
 | ||||
| 200: | ||||
| 250: | ||||
| 	.section __ex_table,"a" | ||||
| 	.align 3
 | ||||
| 	.llong 200b,.Ldest_error | ||||
| 	.llong 250b,.Ldest_error | ||||
| 	.previous | ||||
| 	.endm | ||||
| 
 | ||||
| @ -269,16 +285,16 @@ _GLOBAL(csum_partial_copy_generic) | ||||
| 	rldicl. r6,r3,64-1,64-2		/* r6 = (r3 & 0x3) >> 1 */ | ||||
| 	beq	.Lcopy_aligned | ||||
| 
 | ||||
| 	li	r7,4 | ||||
| 	sub	r6,r7,r6 | ||||
| 	li	r9,4 | ||||
| 	sub	r6,r9,r6 | ||||
| 	mtctr	r6 | ||||
| 
 | ||||
| 1: | ||||
| source;	lhz	r6,0(r3)		/* align to doubleword */
 | ||||
| srcnr;	lhz	r6,0(r3)		/* align to doubleword */
 | ||||
| 	subi	r5,r5,2 | ||||
| 	addi	r3,r3,2 | ||||
| 	adde	r0,r0,r6 | ||||
| dest;	sth	r6,0(r4)
 | ||||
| dstnr;	sth	r6,0(r4)
 | ||||
| 	addi	r4,r4,2 | ||||
| 	bdnz	1b | ||||
| 
 | ||||
| @ -392,10 +408,10 @@ dest;	std	r16,56(r4) | ||||
| 
 | ||||
| 	mtctr	r6 | ||||
| 3: | ||||
| source;	ld	r6,0(r3)
 | ||||
| srcnr;	ld	r6,0(r3)
 | ||||
| 	addi	r3,r3,8 | ||||
| 	adde	r0,r0,r6 | ||||
| dest;	std	r6,0(r4)
 | ||||
| dstnr;	std	r6,0(r4)
 | ||||
| 	addi	r4,r4,8 | ||||
| 	bdnz	3b | ||||
| 
 | ||||
| @ -405,10 +421,10 @@ dest;	std	r6,0(r4) | ||||
| 	srdi.	r6,r5,2 | ||||
| 	beq	.Lcopy_tail_halfword | ||||
| 
 | ||||
| source;	lwz	r6,0(r3)
 | ||||
| srcnr;	lwz	r6,0(r3)
 | ||||
| 	addi	r3,r3,4 | ||||
| 	adde	r0,r0,r6 | ||||
| dest;	stw	r6,0(r4)
 | ||||
| dstnr;	stw	r6,0(r4)
 | ||||
| 	addi	r4,r4,4 | ||||
| 	subi	r5,r5,4 | ||||
| 
 | ||||
| @ -416,10 +432,10 @@ dest;	stw	r6,0(r4) | ||||
| 	srdi.	r6,r5,1 | ||||
| 	beq	.Lcopy_tail_byte | ||||
| 
 | ||||
| source;	lhz	r6,0(r3)
 | ||||
| srcnr;	lhz	r6,0(r3)
 | ||||
| 	addi	r3,r3,2 | ||||
| 	adde	r0,r0,r6 | ||||
| dest;	sth	r6,0(r4)
 | ||||
| dstnr;	sth	r6,0(r4)
 | ||||
| 	addi	r4,r4,2 | ||||
| 	subi	r5,r5,2 | ||||
| 
 | ||||
| @ -427,10 +443,10 @@ dest;	sth	r6,0(r4) | ||||
| 	andi.	r6,r5,1 | ||||
| 	beq	.Lcopy_finish | ||||
| 
 | ||||
| source;	lbz	r6,0(r3)
 | ||||
| srcnr;	lbz	r6,0(r3)
 | ||||
| 	sldi	r9,r6,8			/* Pad the byte out to 16 bits */ | ||||
| 	adde	r0,r0,r9 | ||||
| dest;	stb	r6,0(r4)
 | ||||
| dstnr;	stb	r6,0(r4)
 | ||||
| 
 | ||||
| .Lcopy_finish: | ||||
| 	addze	r0,r0			/* add in final carry */ | ||||
| @ -440,6 +456,11 @@ dest;	stb	r6,0(r4) | ||||
| 	blr | ||||
| 
 | ||||
| .Lsrc_error: | ||||
| 	ld	r14,STK_REG(R14)(r1) | ||||
| 	ld	r15,STK_REG(R15)(r1) | ||||
| 	ld	r16,STK_REG(R16)(r1) | ||||
| 	addi	r1,r1,STACKFRAMESIZE | ||||
| .Lsrc_error_nr: | ||||
| 	cmpdi	0,r7,0 | ||||
| 	beqlr | ||||
| 	li	r6,-EFAULT | ||||
| @ -447,6 +468,11 @@ dest;	stb	r6,0(r4) | ||||
| 	blr | ||||
| 
 | ||||
| .Ldest_error: | ||||
| 	ld	r14,STK_REG(R14)(r1) | ||||
| 	ld	r15,STK_REG(R15)(r1) | ||||
| 	ld	r16,STK_REG(R16)(r1) | ||||
| 	addi	r1,r1,STACKFRAMESIZE | ||||
| .Ldest_error_nr: | ||||
| 	cmpdi	0,r8,0 | ||||
| 	beqlr | ||||
| 	li	r6,-EFAULT | ||||
|  | ||||
| @ -300,5 +300,9 @@ void vmemmap_free(unsigned long start, unsigned long end) | ||||
| { | ||||
| } | ||||
| 
 | ||||
| void register_page_bootmem_memmap(unsigned long section_nr, | ||||
| 				  struct page *start_page, unsigned long size) | ||||
| { | ||||
| } | ||||
| #endif /* CONFIG_SPARSEMEM_VMEMMAP */ | ||||
| 
 | ||||
|  | ||||
| @ -297,12 +297,21 @@ void __init paging_init(void) | ||||
| } | ||||
| #endif /* ! CONFIG_NEED_MULTIPLE_NODES */ | ||||
| 
 | ||||
| static void __init register_page_bootmem_info(void) | ||||
| { | ||||
| 	int i; | ||||
| 
 | ||||
| 	for_each_online_node(i) | ||||
| 		register_page_bootmem_info_node(NODE_DATA(i)); | ||||
| } | ||||
| 
 | ||||
| void __init mem_init(void) | ||||
| { | ||||
| #ifdef CONFIG_SWIOTLB | ||||
| 	swiotlb_init(0); | ||||
| #endif | ||||
| 
 | ||||
| 	register_page_bootmem_info(); | ||||
| 	high_memory = (void *) __va(max_low_pfn * PAGE_SIZE); | ||||
| 	set_max_mapnr(max_pfn); | ||||
| 	free_all_bootmem(); | ||||
|  | ||||
| @ -199,6 +199,7 @@ | ||||
| #define MMCR1_UNIT_SHIFT(pmc)		(60 - (4 * ((pmc) - 1))) | ||||
| #define MMCR1_COMBINE_SHIFT(pmc)	(35 - ((pmc) - 1)) | ||||
| #define MMCR1_PMCSEL_SHIFT(pmc)		(24 - (((pmc) - 1)) * 8) | ||||
| #define MMCR1_FAB_SHIFT			36 | ||||
| #define MMCR1_DC_QUAL_SHIFT		47 | ||||
| #define MMCR1_IC_QUAL_SHIFT		46 | ||||
| 
 | ||||
| @ -388,8 +389,8 @@ static int power8_compute_mmcr(u64 event[], int n_ev, | ||||
| 		 * the threshold bits are used for the match value. | ||||
| 		 */ | ||||
| 		if (event_is_fab_match(event[i])) { | ||||
| 			mmcr1 |= (event[i] >> EVENT_THR_CTL_SHIFT) & | ||||
| 				  EVENT_THR_CTL_MASK; | ||||
| 			mmcr1 |= ((event[i] >> EVENT_THR_CTL_SHIFT) & | ||||
| 				  EVENT_THR_CTL_MASK) << MMCR1_FAB_SHIFT; | ||||
| 		} else { | ||||
| 			val = (event[i] >> EVENT_THR_CTL_SHIFT) & EVENT_THR_CTL_MASK; | ||||
| 			mmcra |= val << MMCRA_THR_CTL_SHIFT; | ||||
|  | ||||
| @ -15,7 +15,7 @@ | ||||
| 
 | ||||
| static __always_inline bool arch_static_branch(struct static_key *key) | ||||
| { | ||||
| 	asm goto("0:	brcl 0,0\n" | ||||
| 	asm_volatile_goto("0:	brcl 0,0\n" | ||||
| 		".pushsection __jump_table, \"aw\"\n" | ||||
| 		ASM_ALIGN "\n" | ||||
| 		ASM_PTR " 0b, %l[label], %0\n" | ||||
|  | ||||
| @ -748,7 +748,9 @@ static inline void pgste_set_key(pte_t *ptep, pgste_t pgste, pte_t entry) | ||||
| 
 | ||||
| static inline void pgste_set_pte(pte_t *ptep, pte_t entry) | ||||
| { | ||||
| 	if (!MACHINE_HAS_ESOP && (pte_val(entry) & _PAGE_WRITE)) { | ||||
| 	if (!MACHINE_HAS_ESOP && | ||||
| 	    (pte_val(entry) & _PAGE_PRESENT) && | ||||
| 	    (pte_val(entry) & _PAGE_WRITE)) { | ||||
| 		/*
 | ||||
| 		 * Without enhanced suppression-on-protection force | ||||
| 		 * the dirty bit on for all writable ptes. | ||||
|  | ||||
| @ -71,30 +71,30 @@ static inline void local_tick_enable(unsigned long long comp) | ||||
| 
 | ||||
| typedef unsigned long long cycles_t; | ||||
| 
 | ||||
| static inline unsigned long long get_tod_clock(void) | ||||
| { | ||||
| 	unsigned long long clk; | ||||
| 
 | ||||
| #ifdef CONFIG_HAVE_MARCH_Z9_109_FEATURES | ||||
| 	asm volatile(".insn s,0xb27c0000,%0" : "=Q" (clk) : : "cc"); | ||||
| #else | ||||
| 	asm volatile("stck %0" : "=Q" (clk) : : "cc"); | ||||
| #endif | ||||
| 	return clk; | ||||
| } | ||||
| 
 | ||||
| static inline void get_tod_clock_ext(char *clk) | ||||
| { | ||||
| 	asm volatile("stcke %0" : "=Q" (*clk) : : "cc"); | ||||
| } | ||||
| 
 | ||||
| static inline unsigned long long get_tod_clock_xt(void) | ||||
| static inline unsigned long long get_tod_clock(void) | ||||
| { | ||||
| 	unsigned char clk[16]; | ||||
| 	get_tod_clock_ext(clk); | ||||
| 	return *((unsigned long long *)&clk[1]); | ||||
| } | ||||
| 
 | ||||
| static inline unsigned long long get_tod_clock_fast(void) | ||||
| { | ||||
| #ifdef CONFIG_HAVE_MARCH_Z9_109_FEATURES | ||||
| 	unsigned long long clk; | ||||
| 
 | ||||
| 	asm volatile("stckf %0" : "=Q" (clk) : : "cc"); | ||||
| 	return clk; | ||||
| #else | ||||
| 	return get_tod_clock(); | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| static inline cycles_t get_cycles(void) | ||||
| { | ||||
| 	return (cycles_t) get_tod_clock() >> 2; | ||||
| @ -125,7 +125,7 @@ extern u64 sched_clock_base_cc; | ||||
|  */ | ||||
| static inline unsigned long long get_tod_clock_monotonic(void) | ||||
| { | ||||
| 	return get_tod_clock_xt() - sched_clock_base_cc; | ||||
| 	return get_tod_clock() - sched_clock_base_cc; | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  | ||||
| @ -99,7 +99,7 @@ int copy_siginfo_to_user32(compat_siginfo_t __user *to, siginfo_t *from) | ||||
| 			break; | ||||
| 		} | ||||
| 	} | ||||
| 	return err; | ||||
| 	return err ? -EFAULT : 0; | ||||
| } | ||||
| 
 | ||||
| int copy_siginfo_from_user32(siginfo_t *to, compat_siginfo_t __user *from) | ||||
| @ -148,7 +148,7 @@ int copy_siginfo_from_user32(siginfo_t *to, compat_siginfo_t __user *from) | ||||
| 			break; | ||||
| 		} | ||||
| 	} | ||||
| 	return err; | ||||
| 	return err ? -EFAULT : 0; | ||||
| } | ||||
| 
 | ||||
| static int save_sigregs32(struct pt_regs *regs, _sigregs32 __user *sregs) | ||||
|  | ||||
| @ -40,28 +40,26 @@ static inline void *load_real_addr(void *addr) | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Copy up to one page to vmalloc or real memory | ||||
|  * Copy real to virtual or real memory | ||||
|  */ | ||||
| static ssize_t copy_page_real(void *buf, void *src, size_t csize) | ||||
| static int copy_from_realmem(void *dest, void *src, size_t count) | ||||
| { | ||||
| 	size_t size; | ||||
| 	unsigned long size; | ||||
| 	int rc; | ||||
| 
 | ||||
| 	if (is_vmalloc_addr(buf)) { | ||||
| 		BUG_ON(csize >= PAGE_SIZE); | ||||
| 		/* If buf is not page aligned, copy first part */ | ||||
| 		size = min(roundup(__pa(buf), PAGE_SIZE) - __pa(buf), csize); | ||||
| 		if (size) { | ||||
| 			if (memcpy_real(load_real_addr(buf), src, size)) | ||||
| 				return -EFAULT; | ||||
| 			buf += size; | ||||
| 			src += size; | ||||
| 		} | ||||
| 		/* Copy second part */ | ||||
| 		size = csize - size; | ||||
| 		return (size) ? memcpy_real(load_real_addr(buf), src, size) : 0; | ||||
| 	} else { | ||||
| 		return memcpy_real(buf, src, csize); | ||||
| 	} | ||||
| 	if (!count) | ||||
| 		return 0; | ||||
| 	if (!is_vmalloc_or_module_addr(dest)) | ||||
| 		return memcpy_real(dest, src, count); | ||||
| 	do { | ||||
| 		size = min(count, PAGE_SIZE - (__pa(dest) & ~PAGE_MASK)); | ||||
| 		if (memcpy_real(load_real_addr(dest), src, size)) | ||||
| 			return -EFAULT; | ||||
| 		count -= size; | ||||
| 		dest += size; | ||||
| 		src += size; | ||||
| 	} while (count); | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
| @ -114,7 +112,7 @@ static ssize_t copy_oldmem_page_kdump(char *buf, size_t csize, | ||||
| 		rc = copy_to_user_real((void __force __user *) buf, | ||||
| 				       (void *) src, csize); | ||||
| 	else | ||||
| 		rc = copy_page_real(buf, (void *) src, csize); | ||||
| 		rc = copy_from_realmem(buf, (void *) src, csize); | ||||
| 	return (rc == 0) ? rc : csize; | ||||
| } | ||||
| 
 | ||||
| @ -210,7 +208,7 @@ int copy_from_oldmem(void *dest, void *src, size_t count) | ||||
| 	if (OLDMEM_BASE) { | ||||
| 		if ((unsigned long) src < OLDMEM_SIZE) { | ||||
| 			copied = min(count, OLDMEM_SIZE - (unsigned long) src); | ||||
| 			rc = memcpy_real(dest, src + OLDMEM_BASE, copied); | ||||
| 			rc = copy_from_realmem(dest, src + OLDMEM_BASE, copied); | ||||
| 			if (rc) | ||||
| 				return rc; | ||||
| 		} | ||||
| @ -223,7 +221,7 @@ int copy_from_oldmem(void *dest, void *src, size_t count) | ||||
| 				return rc; | ||||
| 		} | ||||
| 	} | ||||
| 	return memcpy_real(dest + copied, src + copied, count - copied); | ||||
| 	return copy_from_realmem(dest + copied, src + copied, count - copied); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  | ||||
| @ -867,7 +867,7 @@ static inline void | ||||
| debug_finish_entry(debug_info_t * id, debug_entry_t* active, int level, | ||||
| 			int exception) | ||||
| { | ||||
| 	active->id.stck = get_tod_clock(); | ||||
| 	active->id.stck = get_tod_clock_fast(); | ||||
| 	active->id.fields.cpuid = smp_processor_id(); | ||||
| 	active->caller = __builtin_return_address(0); | ||||
| 	active->id.fields.exception = exception; | ||||
|  | ||||
| @ -266,6 +266,7 @@ sysc_sigpending: | ||||
| 	tm	__TI_flags+3(%r12),_TIF_SYSCALL | ||||
| 	jno	sysc_return | ||||
| 	lm	%r2,%r7,__PT_R2(%r11)	# load svc arguments | ||||
| 	l	%r10,__TI_sysc_table(%r12)	# 31 bit system call table | ||||
| 	xr	%r8,%r8			# svc 0 returns -ENOSYS | ||||
| 	clc	__PT_INT_CODE+2(2,%r11),BASED(.Lnr_syscalls+2) | ||||
| 	jnl	sysc_nr_ok		# invalid svc number -> do svc 0 | ||||
|  | ||||
| @ -297,6 +297,7 @@ sysc_sigpending: | ||||
| 	tm	__TI_flags+7(%r12),_TIF_SYSCALL | ||||
| 	jno	sysc_return | ||||
| 	lmg	%r2,%r7,__PT_R2(%r11)	# load svc arguments | ||||
| 	lg	%r10,__TI_sysc_table(%r12)	# address of system call table | ||||
| 	lghi	%r8,0			# svc 0 returns -ENOSYS | ||||
| 	llgh	%r1,__PT_INT_CODE+2(%r11)	# load new svc number | ||||
| 	cghi	%r1,NR_syscalls | ||||
|  | ||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
		Reference in New Issue
	
	Block a user