mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	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
					
				
					 557 changed files with 4351 additions and 2992 deletions
				
			
		| 
						 | 
					@ -37,8 +37,8 @@ Description:
 | 
				
			||||||
		that the USB device has been connected to the machine.  This
 | 
							that the USB device has been connected to the machine.  This
 | 
				
			||||||
		file is read-only.
 | 
							file is read-only.
 | 
				
			||||||
Users:
 | 
					Users:
 | 
				
			||||||
		PowerTOP <power@bughost.org>
 | 
							PowerTOP <powertop@lists.01.org>
 | 
				
			||||||
		http://www.lesswatts.org/projects/powertop/
 | 
							https://01.org/powertop/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
What:		/sys/bus/usb/device/.../power/active_duration
 | 
					What:		/sys/bus/usb/device/.../power/active_duration
 | 
				
			||||||
Date:		January 2008
 | 
					Date:		January 2008
 | 
				
			||||||
| 
						 | 
					@ -57,8 +57,8 @@ Description:
 | 
				
			||||||
		will give an integer percentage.  Note that this does not
 | 
							will give an integer percentage.  Note that this does not
 | 
				
			||||||
		account for counter wrap.
 | 
							account for counter wrap.
 | 
				
			||||||
Users:
 | 
					Users:
 | 
				
			||||||
		PowerTOP <power@bughost.org>
 | 
							PowerTOP <powertop@lists.01.org>
 | 
				
			||||||
		http://www.lesswatts.org/projects/powertop/
 | 
							https://01.org/powertop/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
What:		/sys/bus/usb/devices/<busnum>-<port[.port]>...:<config num>-<interface num>/supports_autosuspend
 | 
					What:		/sys/bus/usb/devices/<busnum>-<port[.port]>...:<config num>-<interface num>/supports_autosuspend
 | 
				
			||||||
Date:		January 2008
 | 
					Date:		January 2008
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
What:		/sys/devices/.../power/
 | 
					What:		/sys/devices/.../power/
 | 
				
			||||||
Date:		January 2009
 | 
					Date:		January 2009
 | 
				
			||||||
Contact:	Rafael J. Wysocki <rjw@sisk.pl>
 | 
					Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 | 
				
			||||||
Description:
 | 
					Description:
 | 
				
			||||||
		The /sys/devices/.../power directory contains attributes
 | 
							The /sys/devices/.../power directory contains attributes
 | 
				
			||||||
		allowing the user space to check and modify some power
 | 
							allowing the user space to check and modify some power
 | 
				
			||||||
| 
						 | 
					@ -8,7 +8,7 @@ Description:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
What:		/sys/devices/.../power/wakeup
 | 
					What:		/sys/devices/.../power/wakeup
 | 
				
			||||||
Date:		January 2009
 | 
					Date:		January 2009
 | 
				
			||||||
Contact:	Rafael J. Wysocki <rjw@sisk.pl>
 | 
					Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 | 
				
			||||||
Description:
 | 
					Description:
 | 
				
			||||||
		The /sys/devices/.../power/wakeup attribute allows the user
 | 
							The /sys/devices/.../power/wakeup attribute allows the user
 | 
				
			||||||
		space to check if the device is enabled to wake up the system
 | 
							space to check if the device is enabled to wake up the system
 | 
				
			||||||
| 
						 | 
					@ -34,7 +34,7 @@ Description:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
What:		/sys/devices/.../power/control
 | 
					What:		/sys/devices/.../power/control
 | 
				
			||||||
Date:		January 2009
 | 
					Date:		January 2009
 | 
				
			||||||
Contact:	Rafael J. Wysocki <rjw@sisk.pl>
 | 
					Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 | 
				
			||||||
Description:
 | 
					Description:
 | 
				
			||||||
		The /sys/devices/.../power/control attribute allows the user
 | 
							The /sys/devices/.../power/control attribute allows the user
 | 
				
			||||||
		space to control the run-time power management of the device.
 | 
							space to control the run-time power management of the device.
 | 
				
			||||||
| 
						 | 
					@ -53,7 +53,7 @@ Description:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
What:		/sys/devices/.../power/async
 | 
					What:		/sys/devices/.../power/async
 | 
				
			||||||
Date:		January 2009
 | 
					Date:		January 2009
 | 
				
			||||||
Contact:	Rafael J. Wysocki <rjw@sisk.pl>
 | 
					Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 | 
				
			||||||
Description:
 | 
					Description:
 | 
				
			||||||
		The /sys/devices/.../async attribute allows the user space to
 | 
							The /sys/devices/.../async attribute allows the user space to
 | 
				
			||||||
		enable or diasble the device's suspend and resume callbacks to
 | 
							enable or diasble the device's suspend and resume callbacks to
 | 
				
			||||||
| 
						 | 
					@ -79,7 +79,7 @@ Description:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
What:		/sys/devices/.../power/wakeup_count
 | 
					What:		/sys/devices/.../power/wakeup_count
 | 
				
			||||||
Date:		September 2010
 | 
					Date:		September 2010
 | 
				
			||||||
Contact:	Rafael J. Wysocki <rjw@sisk.pl>
 | 
					Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 | 
				
			||||||
Description:
 | 
					Description:
 | 
				
			||||||
		The /sys/devices/.../wakeup_count attribute contains the number
 | 
							The /sys/devices/.../wakeup_count attribute contains the number
 | 
				
			||||||
		of signaled wakeup events associated with the device.  This
 | 
							of signaled wakeup events associated with the device.  This
 | 
				
			||||||
| 
						 | 
					@ -88,7 +88,7 @@ Description:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
What:		/sys/devices/.../power/wakeup_active_count
 | 
					What:		/sys/devices/.../power/wakeup_active_count
 | 
				
			||||||
Date:		September 2010
 | 
					Date:		September 2010
 | 
				
			||||||
Contact:	Rafael J. Wysocki <rjw@sisk.pl>
 | 
					Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 | 
				
			||||||
Description:
 | 
					Description:
 | 
				
			||||||
		The /sys/devices/.../wakeup_active_count attribute contains the
 | 
							The /sys/devices/.../wakeup_active_count attribute contains the
 | 
				
			||||||
		number of times the processing of wakeup events associated with
 | 
							number of times the processing of wakeup events associated with
 | 
				
			||||||
| 
						 | 
					@ -98,7 +98,7 @@ Description:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
What:		/sys/devices/.../power/wakeup_abort_count
 | 
					What:		/sys/devices/.../power/wakeup_abort_count
 | 
				
			||||||
Date:		February 2012
 | 
					Date:		February 2012
 | 
				
			||||||
Contact:	Rafael J. Wysocki <rjw@sisk.pl>
 | 
					Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 | 
				
			||||||
Description:
 | 
					Description:
 | 
				
			||||||
		The /sys/devices/.../wakeup_abort_count attribute contains the
 | 
							The /sys/devices/.../wakeup_abort_count attribute contains the
 | 
				
			||||||
		number of times the processing of a wakeup event associated with
 | 
							number of times the processing of a wakeup event associated with
 | 
				
			||||||
| 
						 | 
					@ -109,7 +109,7 @@ Description:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
What:		/sys/devices/.../power/wakeup_expire_count
 | 
					What:		/sys/devices/.../power/wakeup_expire_count
 | 
				
			||||||
Date:		February 2012
 | 
					Date:		February 2012
 | 
				
			||||||
Contact:	Rafael J. Wysocki <rjw@sisk.pl>
 | 
					Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 | 
				
			||||||
Description:
 | 
					Description:
 | 
				
			||||||
		The /sys/devices/.../wakeup_expire_count attribute contains the
 | 
							The /sys/devices/.../wakeup_expire_count attribute contains the
 | 
				
			||||||
		number of times a wakeup event associated with the device has
 | 
							number of times a wakeup event associated with the device has
 | 
				
			||||||
| 
						 | 
					@ -119,7 +119,7 @@ Description:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
What:		/sys/devices/.../power/wakeup_active
 | 
					What:		/sys/devices/.../power/wakeup_active
 | 
				
			||||||
Date:		September 2010
 | 
					Date:		September 2010
 | 
				
			||||||
Contact:	Rafael J. Wysocki <rjw@sisk.pl>
 | 
					Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 | 
				
			||||||
Description:
 | 
					Description:
 | 
				
			||||||
		The /sys/devices/.../wakeup_active attribute contains either 1,
 | 
							The /sys/devices/.../wakeup_active attribute contains either 1,
 | 
				
			||||||
		or 0, depending on whether or not a wakeup event associated with
 | 
							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
 | 
					What:		/sys/devices/.../power/wakeup_total_time_ms
 | 
				
			||||||
Date:		September 2010
 | 
					Date:		September 2010
 | 
				
			||||||
Contact:	Rafael J. Wysocki <rjw@sisk.pl>
 | 
					Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 | 
				
			||||||
Description:
 | 
					Description:
 | 
				
			||||||
		The /sys/devices/.../wakeup_total_time_ms attribute contains
 | 
							The /sys/devices/.../wakeup_total_time_ms attribute contains
 | 
				
			||||||
		the total time of processing wakeup events associated with the
 | 
							the total time of processing wakeup events associated with the
 | 
				
			||||||
| 
						 | 
					@ -139,7 +139,7 @@ Description:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
What:		/sys/devices/.../power/wakeup_max_time_ms
 | 
					What:		/sys/devices/.../power/wakeup_max_time_ms
 | 
				
			||||||
Date:		September 2010
 | 
					Date:		September 2010
 | 
				
			||||||
Contact:	Rafael J. Wysocki <rjw@sisk.pl>
 | 
					Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 | 
				
			||||||
Description:
 | 
					Description:
 | 
				
			||||||
		The /sys/devices/.../wakeup_max_time_ms attribute contains
 | 
							The /sys/devices/.../wakeup_max_time_ms attribute contains
 | 
				
			||||||
		the maximum time of processing a single wakeup event associated
 | 
							the maximum time of processing a single wakeup event associated
 | 
				
			||||||
| 
						 | 
					@ -149,7 +149,7 @@ Description:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
What:		/sys/devices/.../power/wakeup_last_time_ms
 | 
					What:		/sys/devices/.../power/wakeup_last_time_ms
 | 
				
			||||||
Date:		September 2010
 | 
					Date:		September 2010
 | 
				
			||||||
Contact:	Rafael J. Wysocki <rjw@sisk.pl>
 | 
					Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 | 
				
			||||||
Description:
 | 
					Description:
 | 
				
			||||||
		The /sys/devices/.../wakeup_last_time_ms attribute contains
 | 
							The /sys/devices/.../wakeup_last_time_ms attribute contains
 | 
				
			||||||
		the value of the monotonic clock corresponding to the time of
 | 
							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
 | 
					What:		/sys/devices/.../power/wakeup_prevent_sleep_time_ms
 | 
				
			||||||
Date:		February 2012
 | 
					Date:		February 2012
 | 
				
			||||||
Contact:	Rafael J. Wysocki <rjw@sisk.pl>
 | 
					Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 | 
				
			||||||
Description:
 | 
					Description:
 | 
				
			||||||
		The /sys/devices/.../wakeup_prevent_sleep_time_ms attribute
 | 
							The /sys/devices/.../wakeup_prevent_sleep_time_ms attribute
 | 
				
			||||||
		contains the total time the device has been preventing
 | 
							contains the total time the device has been preventing
 | 
				
			||||||
| 
						 | 
					@ -189,7 +189,7 @@ Description:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
What:		/sys/devices/.../power/pm_qos_latency_us
 | 
					What:		/sys/devices/.../power/pm_qos_latency_us
 | 
				
			||||||
Date:		March 2012
 | 
					Date:		March 2012
 | 
				
			||||||
Contact:	Rafael J. Wysocki <rjw@sisk.pl>
 | 
					Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 | 
				
			||||||
Description:
 | 
					Description:
 | 
				
			||||||
		The /sys/devices/.../power/pm_qos_resume_latency_us attribute
 | 
							The /sys/devices/.../power/pm_qos_resume_latency_us attribute
 | 
				
			||||||
		contains the PM QoS resume latency limit for the given device,
 | 
							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
 | 
					What:		/sys/devices/.../power/pm_qos_no_power_off
 | 
				
			||||||
Date:		September 2012
 | 
					Date:		September 2012
 | 
				
			||||||
Contact:	Rafael J. Wysocki <rjw@sisk.pl>
 | 
					Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 | 
				
			||||||
Description:
 | 
					Description:
 | 
				
			||||||
		The /sys/devices/.../power/pm_qos_no_power_off attribute
 | 
							The /sys/devices/.../power/pm_qos_no_power_off attribute
 | 
				
			||||||
		is used for manipulating the PM QoS "no power off" flag.  If
 | 
							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
 | 
					What:		/sys/devices/.../power/pm_qos_remote_wakeup
 | 
				
			||||||
Date:		September 2012
 | 
					Date:		September 2012
 | 
				
			||||||
Contact:	Rafael J. Wysocki <rjw@sisk.pl>
 | 
					Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 | 
				
			||||||
Description:
 | 
					Description:
 | 
				
			||||||
		The /sys/devices/.../power/pm_qos_remote_wakeup attribute
 | 
							The /sys/devices/.../power/pm_qos_remote_wakeup attribute
 | 
				
			||||||
		is used for manipulating the PM QoS "remote wakeup required"
 | 
							is used for manipulating the PM QoS "remote wakeup required"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
What:		/sys/power/
 | 
					What:		/sys/power/
 | 
				
			||||||
Date:		August 2006
 | 
					Date:		August 2006
 | 
				
			||||||
Contact:	Rafael J. Wysocki <rjw@sisk.pl>
 | 
					Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 | 
				
			||||||
Description:
 | 
					Description:
 | 
				
			||||||
		The /sys/power directory will contain files that will
 | 
							The /sys/power directory will contain files that will
 | 
				
			||||||
		provide a unified interface to the power management
 | 
							provide a unified interface to the power management
 | 
				
			||||||
| 
						 | 
					@ -8,7 +8,7 @@ Description:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
What:		/sys/power/state
 | 
					What:		/sys/power/state
 | 
				
			||||||
Date:		August 2006
 | 
					Date:		August 2006
 | 
				
			||||||
Contact:	Rafael J. Wysocki <rjw@sisk.pl>
 | 
					Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 | 
				
			||||||
Description:
 | 
					Description:
 | 
				
			||||||
		The /sys/power/state file controls the system power state.
 | 
							The /sys/power/state file controls the system power state.
 | 
				
			||||||
		Reading from this file returns what states are supported,
 | 
							Reading from this file returns what states are supported,
 | 
				
			||||||
| 
						 | 
					@ -22,7 +22,7 @@ Description:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
What:		/sys/power/disk
 | 
					What:		/sys/power/disk
 | 
				
			||||||
Date:		September 2006
 | 
					Date:		September 2006
 | 
				
			||||||
Contact:	Rafael J. Wysocki <rjw@sisk.pl>
 | 
					Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 | 
				
			||||||
Description:
 | 
					Description:
 | 
				
			||||||
		The /sys/power/disk file controls the operating mode of the
 | 
							The /sys/power/disk file controls the operating mode of the
 | 
				
			||||||
		suspend-to-disk mechanism.  Reading from this file returns
 | 
							suspend-to-disk mechanism.  Reading from this file returns
 | 
				
			||||||
| 
						 | 
					@ -67,7 +67,7 @@ Description:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
What:		/sys/power/image_size
 | 
					What:		/sys/power/image_size
 | 
				
			||||||
Date:		August 2006
 | 
					Date:		August 2006
 | 
				
			||||||
Contact:	Rafael J. Wysocki <rjw@sisk.pl>
 | 
					Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 | 
				
			||||||
Description:
 | 
					Description:
 | 
				
			||||||
		The /sys/power/image_size file controls the size of the image
 | 
							The /sys/power/image_size file controls the size of the image
 | 
				
			||||||
		created by the suspend-to-disk mechanism.  It can be written a
 | 
							created by the suspend-to-disk mechanism.  It can be written a
 | 
				
			||||||
| 
						 | 
					@ -84,7 +84,7 @@ Description:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
What:		/sys/power/pm_trace
 | 
					What:		/sys/power/pm_trace
 | 
				
			||||||
Date:		August 2006
 | 
					Date:		August 2006
 | 
				
			||||||
Contact:	Rafael J. Wysocki <rjw@sisk.pl>
 | 
					Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 | 
				
			||||||
Description:
 | 
					Description:
 | 
				
			||||||
		The /sys/power/pm_trace file controls the code which saves the
 | 
							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
 | 
							last PM event point in the RTC across reboots, so that you can
 | 
				
			||||||
| 
						 | 
					@ -133,7 +133,7 @@ Description:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
What:		/sys/power/pm_async
 | 
					What:		/sys/power/pm_async
 | 
				
			||||||
Date:		January 2009
 | 
					Date:		January 2009
 | 
				
			||||||
Contact:	Rafael J. Wysocki <rjw@sisk.pl>
 | 
					Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 | 
				
			||||||
Description:
 | 
					Description:
 | 
				
			||||||
		The /sys/power/pm_async file controls the switch allowing the
 | 
							The /sys/power/pm_async file controls the switch allowing the
 | 
				
			||||||
		user space to enable or disable asynchronous suspend and resume
 | 
							user space to enable or disable asynchronous suspend and resume
 | 
				
			||||||
| 
						 | 
					@ -146,7 +146,7 @@ Description:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
What:		/sys/power/wakeup_count
 | 
					What:		/sys/power/wakeup_count
 | 
				
			||||||
Date:		July 2010
 | 
					Date:		July 2010
 | 
				
			||||||
Contact:	Rafael J. Wysocki <rjw@sisk.pl>
 | 
					Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 | 
				
			||||||
Description:
 | 
					Description:
 | 
				
			||||||
		The /sys/power/wakeup_count file allows user space to put the
 | 
							The /sys/power/wakeup_count file allows user space to put the
 | 
				
			||||||
		system into a sleep state while taking into account the
 | 
							system into a sleep state while taking into account the
 | 
				
			||||||
| 
						 | 
					@ -161,7 +161,7 @@ Description:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
What:		/sys/power/reserved_size
 | 
					What:		/sys/power/reserved_size
 | 
				
			||||||
Date:		May 2011
 | 
					Date:		May 2011
 | 
				
			||||||
Contact:	Rafael J. Wysocki <rjw@sisk.pl>
 | 
					Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 | 
				
			||||||
Description:
 | 
					Description:
 | 
				
			||||||
		The /sys/power/reserved_size file allows user space to control
 | 
							The /sys/power/reserved_size file allows user space to control
 | 
				
			||||||
		the amount of memory reserved for allocations made by device
 | 
							the amount of memory reserved for allocations made by device
 | 
				
			||||||
| 
						 | 
					@ -175,7 +175,7 @@ Description:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
What:		/sys/power/autosleep
 | 
					What:		/sys/power/autosleep
 | 
				
			||||||
Date:		April 2012
 | 
					Date:		April 2012
 | 
				
			||||||
Contact:	Rafael J. Wysocki <rjw@sisk.pl>
 | 
					Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 | 
				
			||||||
Description:
 | 
					Description:
 | 
				
			||||||
		The /sys/power/autosleep file can be written one of the strings
 | 
							The /sys/power/autosleep file can be written one of the strings
 | 
				
			||||||
		returned by reads from /sys/power/state.  If that happens, a
 | 
							returned by reads from /sys/power/state.  If that happens, a
 | 
				
			||||||
| 
						 | 
					@ -192,7 +192,7 @@ Description:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
What:		/sys/power/wake_lock
 | 
					What:		/sys/power/wake_lock
 | 
				
			||||||
Date:		February 2012
 | 
					Date:		February 2012
 | 
				
			||||||
Contact:	Rafael J. Wysocki <rjw@sisk.pl>
 | 
					Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 | 
				
			||||||
Description:
 | 
					Description:
 | 
				
			||||||
		The /sys/power/wake_lock file allows user space to create
 | 
							The /sys/power/wake_lock file allows user space to create
 | 
				
			||||||
		wakeup source objects and activate them on demand (if one of
 | 
							wakeup source objects and activate them on demand (if one of
 | 
				
			||||||
| 
						 | 
					@ -219,7 +219,7 @@ Description:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
What:		/sys/power/wake_unlock
 | 
					What:		/sys/power/wake_unlock
 | 
				
			||||||
Date:		February 2012
 | 
					Date:		February 2012
 | 
				
			||||||
Contact:	Rafael J. Wysocki <rjw@sisk.pl>
 | 
					Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 | 
				
			||||||
Description:
 | 
					Description:
 | 
				
			||||||
		The /sys/power/wake_unlock file allows user space to deactivate
 | 
							The /sys/power/wake_unlock file allows user space to deactivate
 | 
				
			||||||
		wakeup sources created with the help of /sys/power/wake_lock.
 | 
							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
 | 
					When to use this method is described in detail on the
 | 
				
			||||||
Linux/ACPI home page:
 | 
					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
 | 
					described in mmc.txt, can be used. Additionally the following tmio_mmc-specific
 | 
				
			||||||
optional bindings can be used.
 | 
					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:
 | 
					Optional properties:
 | 
				
			||||||
- toshiba,mmc-wrprotect-disable: write-protect detection is unavailable
 | 
					- 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
 | 
					  alc269-dmic		Enable ALC269(VA) digital mic workaround
 | 
				
			||||||
  alc271-dmic		Enable ALC271X digital mic workaround
 | 
					  alc271-dmic		Enable ALC271X digital mic workaround
 | 
				
			||||||
  inv-dmic		Inverted internal 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
 | 
					  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-multi	Headset jack, which can also be used as mic-in
 | 
				
			||||||
  dell-headset-dock	Headset jack (without mic-in), and also dock I/O
 | 
					  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
 | 
					ACPI
 | 
				
			||||||
M:	Len Brown <lenb@kernel.org>
 | 
					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
 | 
					L:	linux-acpi@vger.kernel.org
 | 
				
			||||||
W:	http://www.lesswatts.org/projects/acpi/
 | 
					W:	https://01.org/linux-acpi
 | 
				
			||||||
Q:	http://patchwork.kernel.org/project/linux-acpi/list/
 | 
					Q:	https://patchwork.kernel.org/project/linux-acpi/list/
 | 
				
			||||||
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux
 | 
					T:	git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
 | 
				
			||||||
S:	Supported
 | 
					S:	Supported
 | 
				
			||||||
F:	drivers/acpi/
 | 
					F:	drivers/acpi/
 | 
				
			||||||
F:	drivers/pnp/pnpacpi/
 | 
					F:	drivers/pnp/pnpacpi/
 | 
				
			||||||
| 
						 | 
					@ -256,21 +256,21 @@ F:	drivers/pci/*/*/*acpi*
 | 
				
			||||||
ACPI FAN DRIVER
 | 
					ACPI FAN DRIVER
 | 
				
			||||||
M:	Zhang Rui <rui.zhang@intel.com>
 | 
					M:	Zhang Rui <rui.zhang@intel.com>
 | 
				
			||||||
L:	linux-acpi@vger.kernel.org
 | 
					L:	linux-acpi@vger.kernel.org
 | 
				
			||||||
W:	http://www.lesswatts.org/projects/acpi/
 | 
					W:	https://01.org/linux-acpi
 | 
				
			||||||
S:	Supported
 | 
					S:	Supported
 | 
				
			||||||
F:	drivers/acpi/fan.c
 | 
					F:	drivers/acpi/fan.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ACPI THERMAL DRIVER
 | 
					ACPI THERMAL DRIVER
 | 
				
			||||||
M:	Zhang Rui <rui.zhang@intel.com>
 | 
					M:	Zhang Rui <rui.zhang@intel.com>
 | 
				
			||||||
L:	linux-acpi@vger.kernel.org
 | 
					L:	linux-acpi@vger.kernel.org
 | 
				
			||||||
W:	http://www.lesswatts.org/projects/acpi/
 | 
					W:	https://01.org/linux-acpi
 | 
				
			||||||
S:	Supported
 | 
					S:	Supported
 | 
				
			||||||
F:	drivers/acpi/*thermal*
 | 
					F:	drivers/acpi/*thermal*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ACPI VIDEO DRIVER
 | 
					ACPI VIDEO DRIVER
 | 
				
			||||||
M:	Zhang Rui <rui.zhang@intel.com>
 | 
					M:	Zhang Rui <rui.zhang@intel.com>
 | 
				
			||||||
L:	linux-acpi@vger.kernel.org
 | 
					L:	linux-acpi@vger.kernel.org
 | 
				
			||||||
W:	http://www.lesswatts.org/projects/acpi/
 | 
					W:	https://01.org/linux-acpi
 | 
				
			||||||
S:	Supported
 | 
					S:	Supported
 | 
				
			||||||
F:	drivers/acpi/video.c
 | 
					F:	drivers/acpi/video.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -824,15 +824,21 @@ S:	Maintained
 | 
				
			||||||
F:	arch/arm/mach-gemini/
 | 
					F:	arch/arm/mach-gemini/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ARM/CSR SIRFPRIMA2 MACHINE SUPPORT
 | 
					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)
 | 
					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
 | 
					T:	git git://git.kernel.org/pub/scm/linux/kernel/git/baohua/linux.git
 | 
				
			||||||
S:	Maintained
 | 
					S:	Maintained
 | 
				
			||||||
F:	arch/arm/mach-prima2/
 | 
					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/dma/sirf-dma.c
 | 
				
			||||||
F:	drivers/i2c/busses/i2c-sirf.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/mmc/host/sdhci-sirf.c
 | 
				
			||||||
F:	drivers/pinctrl/sirf/
 | 
					F:	drivers/pinctrl/sirf/
 | 
				
			||||||
 | 
					F:	drivers/rtc/rtc-sirfsoc.c
 | 
				
			||||||
F:	drivers/spi/spi-sirf.c
 | 
					F:	drivers/spi/spi-sirf.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ARM/EBSA110 MACHINE SUPPORT
 | 
					ARM/EBSA110 MACHINE SUPPORT
 | 
				
			||||||
| 
						 | 
					@ -2295,7 +2301,7 @@ S:	Maintained
 | 
				
			||||||
F:	drivers/net/ethernet/ti/cpmac.c
 | 
					F:	drivers/net/ethernet/ti/cpmac.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CPU FREQUENCY DRIVERS
 | 
					CPU FREQUENCY DRIVERS
 | 
				
			||||||
M:	Rafael J. Wysocki <rjw@sisk.pl>
 | 
					M:	Rafael J. Wysocki <rjw@rjwysocki.net>
 | 
				
			||||||
M:	Viresh Kumar <viresh.kumar@linaro.org>
 | 
					M:	Viresh Kumar <viresh.kumar@linaro.org>
 | 
				
			||||||
L:	cpufreq@vger.kernel.org
 | 
					L:	cpufreq@vger.kernel.org
 | 
				
			||||||
L:	linux-pm@vger.kernel.org
 | 
					L:	linux-pm@vger.kernel.org
 | 
				
			||||||
| 
						 | 
					@ -2326,7 +2332,7 @@ S:      Maintained
 | 
				
			||||||
F:      drivers/cpuidle/cpuidle-big_little.c
 | 
					F:      drivers/cpuidle/cpuidle-big_little.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CPUIDLE DRIVERS
 | 
					CPUIDLE DRIVERS
 | 
				
			||||||
M:	Rafael J. Wysocki <rjw@sisk.pl>
 | 
					M:	Rafael J. Wysocki <rjw@rjwysocki.net>
 | 
				
			||||||
M:	Daniel Lezcano <daniel.lezcano@linaro.org>
 | 
					M:	Daniel Lezcano <daniel.lezcano@linaro.org>
 | 
				
			||||||
L:	linux-pm@vger.kernel.org
 | 
					L:	linux-pm@vger.kernel.org
 | 
				
			||||||
S:	Maintained
 | 
					S:	Maintained
 | 
				
			||||||
| 
						 | 
					@ -3548,7 +3554,7 @@ F:	fs/freevxfs/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FREEZER
 | 
					FREEZER
 | 
				
			||||||
M:	Pavel Machek <pavel@ucw.cz>
 | 
					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
 | 
					L:	linux-pm@vger.kernel.org
 | 
				
			||||||
S:	Supported
 | 
					S:	Supported
 | 
				
			||||||
F:	Documentation/power/freezing-of-tasks.txt
 | 
					F:	Documentation/power/freezing-of-tasks.txt
 | 
				
			||||||
| 
						 | 
					@ -3619,6 +3625,12 @@ L:	linux-scsi@vger.kernel.org
 | 
				
			||||||
S:	Odd Fixes (e.g., new signatures)
 | 
					S:	Odd Fixes (e.g., new signatures)
 | 
				
			||||||
F:	drivers/scsi/fdomain.*
 | 
					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
 | 
					GDT SCSI DISK ARRAY CONTROLLER DRIVER
 | 
				
			||||||
M:	Achim Leubner <achim_leubner@adaptec.com>
 | 
					M:	Achim Leubner <achim_leubner@adaptec.com>
 | 
				
			||||||
L:	linux-scsi@vger.kernel.org
 | 
					L:	linux-scsi@vger.kernel.org
 | 
				
			||||||
| 
						 | 
					@ -3884,7 +3896,7 @@ F:	drivers/video/hgafb.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
HIBERNATION (aka Software Suspend, aka swsusp)
 | 
					HIBERNATION (aka Software Suspend, aka swsusp)
 | 
				
			||||||
M:	Pavel Machek <pavel@ucw.cz>
 | 
					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
 | 
					L:	linux-pm@vger.kernel.org
 | 
				
			||||||
S:	Supported
 | 
					S:	Supported
 | 
				
			||||||
F:	arch/x86/power/
 | 
					F:	arch/x86/power/
 | 
				
			||||||
| 
						 | 
					@ -4334,7 +4346,7 @@ F:	drivers/video/i810/
 | 
				
			||||||
INTEL MENLOW THERMAL DRIVER
 | 
					INTEL MENLOW THERMAL DRIVER
 | 
				
			||||||
M:	Sujith Thomas <sujith.thomas@intel.com>
 | 
					M:	Sujith Thomas <sujith.thomas@intel.com>
 | 
				
			||||||
L:	platform-driver-x86@vger.kernel.org
 | 
					L:	platform-driver-x86@vger.kernel.org
 | 
				
			||||||
W:	http://www.lesswatts.org/projects/acpi/
 | 
					W:	https://01.org/linux-acpi
 | 
				
			||||||
S:	Supported
 | 
					S:	Supported
 | 
				
			||||||
F:	drivers/platform/x86/intel_menlow.c
 | 
					F:	drivers/platform/x86/intel_menlow.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4471,6 +4483,13 @@ L:	linux-serial@vger.kernel.org
 | 
				
			||||||
S:	Maintained
 | 
					S:	Maintained
 | 
				
			||||||
F:	drivers/tty/serial/ioc3_serial.c
 | 
					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
 | 
					IP MASQUERADING
 | 
				
			||||||
M:	Juanjo Ciarlante <jjciarla@raiz.uncu.edu.ar>
 | 
					M:	Juanjo Ciarlante <jjciarla@raiz.uncu.edu.ar>
 | 
				
			||||||
S:	Maintained
 | 
					S:	Maintained
 | 
				
			||||||
| 
						 | 
					@ -7812,6 +7831,13 @@ F:	Documentation/sound/alsa/soc/
 | 
				
			||||||
F:	sound/soc/
 | 
					F:	sound/soc/
 | 
				
			||||||
F:	include/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)
 | 
					SPARC + UltraSPARC (sparc/sparc64)
 | 
				
			||||||
M:	"David S. Miller" <davem@davemloft.net>
 | 
					M:	"David S. Miller" <davem@davemloft.net>
 | 
				
			||||||
L:	sparclinux@vger.kernel.org
 | 
					L:	sparclinux@vger.kernel.org
 | 
				
			||||||
| 
						 | 
					@ -8091,7 +8117,7 @@ F:	drivers/sh/
 | 
				
			||||||
SUSPEND TO RAM
 | 
					SUSPEND TO RAM
 | 
				
			||||||
M:	Len Brown <len.brown@intel.com>
 | 
					M:	Len Brown <len.brown@intel.com>
 | 
				
			||||||
M:	Pavel Machek <pavel@ucw.cz>
 | 
					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
 | 
					L:	linux-pm@vger.kernel.org
 | 
				
			||||||
S:	Supported
 | 
					S:	Supported
 | 
				
			||||||
F:	Documentation/power/
 | 
					F:	Documentation/power/
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							| 
						 | 
					@ -1,7 +1,7 @@
 | 
				
			||||||
VERSION = 3
 | 
					VERSION = 3
 | 
				
			||||||
PATCHLEVEL = 12
 | 
					PATCHLEVEL = 12
 | 
				
			||||||
SUBLEVEL = 0
 | 
					SUBLEVEL = 0
 | 
				
			||||||
EXTRAVERSION = -rc3
 | 
					EXTRAVERSION = -rc6
 | 
				
			||||||
NAME = One Giant Leap for Frogkind
 | 
					NAME = One Giant Leap for Frogkind
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# *DOCUMENTATION*
 | 
					# *DOCUMENTATION*
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -102,7 +102,7 @@ static int genregs_set(struct task_struct *target,
 | 
				
			||||||
	REG_IGNORE_ONE(pad2);
 | 
						REG_IGNORE_ONE(pad2);
 | 
				
			||||||
	REG_IN_CHUNK(callee, efa, cregs);	/* callee_regs[r25..r13] */
 | 
						REG_IN_CHUNK(callee, efa, cregs);	/* callee_regs[r25..r13] */
 | 
				
			||||||
	REG_IGNORE_ONE(efa);			/* efa update invalid */
 | 
						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;
 | 
						return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -101,7 +101,6 @@ SYSCALL_DEFINE0(rt_sigreturn)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct rt_sigframe __user *sf;
 | 
						struct rt_sigframe __user *sf;
 | 
				
			||||||
	unsigned int magic;
 | 
						unsigned int magic;
 | 
				
			||||||
	int err;
 | 
					 | 
				
			||||||
	struct pt_regs *regs = current_pt_regs();
 | 
						struct pt_regs *regs = current_pt_regs();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Always make any pending restarted system calls return -EINTR */
 | 
						/* 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)))
 | 
						if (!access_ok(VERIFY_READ, sf, sizeof(*sf)))
 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = restore_usr_regs(regs, sf);
 | 
						if (__get_user(magic, &sf->sigret_magic))
 | 
				
			||||||
	err |= __get_user(magic, &sf->sigret_magic);
 | 
					 | 
				
			||||||
	if (err)
 | 
					 | 
				
			||||||
		goto badframe;
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (unlikely(is_do_ss_needed(magic)))
 | 
						if (unlikely(is_do_ss_needed(magic)))
 | 
				
			||||||
		if (restore_altstack(&sf->uc.uc_stack))
 | 
							if (restore_altstack(&sf->uc.uc_stack))
 | 
				
			||||||
			goto badframe;
 | 
								goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (restore_usr_regs(regs, sf))
 | 
				
			||||||
 | 
							goto badframe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Don't restart from sigreturn */
 | 
						/* Don't restart from sigreturn */
 | 
				
			||||||
	syscall_wont_restart(regs);
 | 
						syscall_wont_restart(regs);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -190,6 +190,15 @@ setup_rt_frame(int signo, struct k_sigaction *ka, siginfo_t *info,
 | 
				
			||||||
	if (!sf)
 | 
						if (!sf)
 | 
				
			||||||
		return 1;
 | 
							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:
 | 
						 * SA_SIGINFO requires 3 args to signal handler:
 | 
				
			||||||
	 *  #1: sig-no (common to any 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;
 | 
							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);
 | 
						err |= __put_user(magic, &sf->sigret_magic);
 | 
				
			||||||
	if (err)
 | 
						if (err)
 | 
				
			||||||
		return err;
 | 
							return err;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -296,10 +296,15 @@ archprepare:
 | 
				
			||||||
# Convert bzImage to zImage
 | 
					# Convert bzImage to zImage
 | 
				
			||||||
bzImage: 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)/$@
 | 
						$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
zinstall uinstall install: vmlinux
 | 
					$(INSTALL_TARGETS):
 | 
				
			||||||
	$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $@
 | 
						$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%.dtb: | scripts
 | 
					%.dtb: | scripts
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -95,24 +95,24 @@ initrd:
 | 
				
			||||||
	@test "$(INITRD)" != "" || \
 | 
						@test "$(INITRD)" != "" || \
 | 
				
			||||||
	(echo You must specify INITRD; exit -1)
 | 
						(echo You must specify INITRD; exit -1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
install: $(obj)/Image
 | 
					install:
 | 
				
			||||||
	$(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \
 | 
						$(CONFIG_SHELL) $(srctree)/$(src)/install.sh "$(KERNELRELEASE)" \
 | 
				
			||||||
	$(obj)/Image System.map "$(INSTALL_PATH)"
 | 
						$(obj)/Image System.map "$(INSTALL_PATH)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
zinstall: $(obj)/zImage
 | 
					zinstall:
 | 
				
			||||||
	$(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \
 | 
						$(CONFIG_SHELL) $(srctree)/$(src)/install.sh "$(KERNELRELEASE)" \
 | 
				
			||||||
	$(obj)/zImage System.map "$(INSTALL_PATH)"
 | 
						$(obj)/zImage System.map "$(INSTALL_PATH)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uinstall: $(obj)/uImage
 | 
					uinstall:
 | 
				
			||||||
	$(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \
 | 
						$(CONFIG_SHELL) $(srctree)/$(src)/install.sh "$(KERNELRELEASE)" \
 | 
				
			||||||
	$(obj)/uImage System.map "$(INSTALL_PATH)"
 | 
						$(obj)/uImage System.map "$(INSTALL_PATH)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
zi:
 | 
					zi:
 | 
				
			||||||
	$(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \
 | 
						$(CONFIG_SHELL) $(srctree)/$(src)/install.sh "$(KERNELRELEASE)" \
 | 
				
			||||||
	$(obj)/zImage System.map "$(INSTALL_PATH)"
 | 
						$(obj)/zImage System.map "$(INSTALL_PATH)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
i:
 | 
					i:
 | 
				
			||||||
	$(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \
 | 
						$(CONFIG_SHELL) $(srctree)/$(src)/install.sh "$(KERNELRELEASE)" \
 | 
				
			||||||
	$(obj)/Image System.map "$(INSTALL_PATH)"
 | 
						$(obj)/Image System.map "$(INSTALL_PATH)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
subdir-	    := bootp compressed dts
 | 
					subdir-	    := bootp compressed dts
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -41,6 +41,8 @@ dtb-$(CONFIG_ARCH_AT91)	+= sama5d33ek.dtb
 | 
				
			||||||
dtb-$(CONFIG_ARCH_AT91)	+= sama5d34ek.dtb
 | 
					dtb-$(CONFIG_ARCH_AT91)	+= sama5d34ek.dtb
 | 
				
			||||||
dtb-$(CONFIG_ARCH_AT91)	+= sama5d35ek.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_BCM2835) += bcm2835-rpi-b.dtb
 | 
				
			||||||
dtb-$(CONFIG_ARCH_BCM) += bcm11351-brt.dtb \
 | 
					dtb-$(CONFIG_ARCH_BCM) += bcm11351-brt.dtb \
 | 
				
			||||||
	bcm28155-ap.dtb
 | 
						bcm28155-ap.dtb
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -27,6 +27,25 @@ memory {
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	soc {
 | 
						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 {
 | 
							internal-regs {
 | 
				
			||||||
			serial@12000 {
 | 
								serial@12000 {
 | 
				
			||||||
				clock-frequency = <200000000>;
 | 
									clock-frequency = <200000000>;
 | 
				
			||||||
| 
						 | 
					@ -57,6 +76,11 @@ backup_led_pin: backup-led-pin {
 | 
				
			||||||
					marvell,pins = "mpp56";
 | 
										marvell,pins = "mpp56";
 | 
				
			||||||
					marvell,function = "gpio";
 | 
										marvell,function = "gpio";
 | 
				
			||||||
				};
 | 
									};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									poweroff: poweroff {
 | 
				
			||||||
 | 
										marvell,pins = "mpp8";
 | 
				
			||||||
 | 
										marvell,function = "gpio";
 | 
				
			||||||
 | 
									};
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			mdio {
 | 
								mdio {
 | 
				
			||||||
| 
						 | 
					@ -89,22 +113,6 @@ g762: g762@3e {
 | 
				
			||||||
					pwm_polarity = <0>;
 | 
										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 @@ gpio_keys {
 | 
				
			||||||
		button@1 {
 | 
							button@1 {
 | 
				
			||||||
			label = "Power Button";
 | 
								label = "Power Button";
 | 
				
			||||||
			linux,code = <116>;     /* KEY_POWER */
 | 
								linux,code = <116>;     /* KEY_POWER */
 | 
				
			||||||
			gpios = <&gpio1 30 1>;
 | 
								gpios = <&gpio1 30 0>;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		button@2 {
 | 
							button@2 {
 | 
				
			||||||
| 
						 | 
					@ -176,4 +184,11 @@ button@3 {
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						gpio_poweroff {
 | 
				
			||||||
 | 
							compatible = "gpio-poweroff";
 | 
				
			||||||
 | 
							pinctrl-0 = <&poweroff>;
 | 
				
			||||||
 | 
							pinctrl-names = "default";
 | 
				
			||||||
 | 
							gpios = <&gpio0 8 1>;
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -70,6 +70,8 @@ serial@12300 {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			timer@20300 {
 | 
								timer@20300 {
 | 
				
			||||||
				compatible = "marvell,armada-xp-timer";
 | 
									compatible = "marvell,armada-xp-timer";
 | 
				
			||||||
 | 
									clocks = <&coreclk 2>, <&refclk>;
 | 
				
			||||||
 | 
									clock-names = "nbclk", "fixed";
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			coreclk: mvebu-sar@18230 {
 | 
								coreclk: mvebu-sar@18230 {
 | 
				
			||||||
| 
						 | 
					@ -169,4 +171,13 @@ thermal@182b0 {
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						clocks {
 | 
				
			||||||
 | 
							/* 25 MHz reference crystal */
 | 
				
			||||||
 | 
							refclk: oscillator {
 | 
				
			||||||
 | 
								compatible = "fixed-clock";
 | 
				
			||||||
 | 
								#clock-cells = <0>;
 | 
				
			||||||
 | 
								clock-frequency = <25000000>;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -190,12 +190,12 @@ pinctrl_usart2: usart2-0 {
 | 
				
			||||||
							 AT91_PIOA 8 AT91_PERIPH_A AT91_PINCTRL_NONE>;	/* PA8 periph A */
 | 
												 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 =
 | 
											atmel,pins =
 | 
				
			||||||
							<AT91_PIOB 0 AT91_PERIPH_B AT91_PINCTRL_NONE>;	/* PB0 periph B */
 | 
												<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 =
 | 
											atmel,pins =
 | 
				
			||||||
							<AT91_PIOB 1 AT91_PERIPH_B AT91_PINCTRL_NONE>;	/* PB1 periph B */
 | 
												<AT91_PIOB 1 AT91_PERIPH_B AT91_PINCTRL_NONE>;	/* PB1 periph B */
 | 
				
			||||||
					};
 | 
										};
 | 
				
			||||||
| 
						 | 
					@ -556,6 +556,7 @@ mmc0: mmc@f0008000 {
 | 
				
			||||||
				interrupts = <12 IRQ_TYPE_LEVEL_HIGH 0>;
 | 
									interrupts = <12 IRQ_TYPE_LEVEL_HIGH 0>;
 | 
				
			||||||
				dmas = <&dma0 1 AT91_DMA_CFG_PER_ID(0)>;
 | 
									dmas = <&dma0 1 AT91_DMA_CFG_PER_ID(0)>;
 | 
				
			||||||
				dma-names = "rxtx";
 | 
									dma-names = "rxtx";
 | 
				
			||||||
 | 
									pinctrl-names = "default";
 | 
				
			||||||
				#address-cells = <1>;
 | 
									#address-cells = <1>;
 | 
				
			||||||
				#size-cells = <0>;
 | 
									#size-cells = <0>;
 | 
				
			||||||
				status = "disabled";
 | 
									status = "disabled";
 | 
				
			||||||
| 
						 | 
					@ -567,6 +568,7 @@ mmc1: mmc@f000c000 {
 | 
				
			||||||
				interrupts = <26 IRQ_TYPE_LEVEL_HIGH 0>;
 | 
									interrupts = <26 IRQ_TYPE_LEVEL_HIGH 0>;
 | 
				
			||||||
				dmas = <&dma1 1 AT91_DMA_CFG_PER_ID(0)>;
 | 
									dmas = <&dma1 1 AT91_DMA_CFG_PER_ID(0)>;
 | 
				
			||||||
				dma-names = "rxtx";
 | 
									dma-names = "rxtx";
 | 
				
			||||||
 | 
									pinctrl-names = "default";
 | 
				
			||||||
				#address-cells = <1>;
 | 
									#address-cells = <1>;
 | 
				
			||||||
				#size-cells = <0>;
 | 
									#size-cells = <0>;
 | 
				
			||||||
				status = "disabled";
 | 
									status = "disabled";
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -181,6 +181,8 @@ uart0: uart@b0050000 {
 | 
				
			||||||
				interrupts = <17>;
 | 
									interrupts = <17>;
 | 
				
			||||||
				fifosize = <128>;
 | 
									fifosize = <128>;
 | 
				
			||||||
				clocks = <&clks 13>;
 | 
									clocks = <&clks 13>;
 | 
				
			||||||
 | 
									sirf,uart-dma-rx-channel = <21>;
 | 
				
			||||||
 | 
									sirf,uart-dma-tx-channel = <2>;
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			uart1: uart@b0060000 {
 | 
								uart1: uart@b0060000 {
 | 
				
			||||||
| 
						 | 
					@ -199,6 +201,8 @@ uart2: uart@b0070000 {
 | 
				
			||||||
				interrupts = <19>;
 | 
									interrupts = <19>;
 | 
				
			||||||
				fifosize = <128>;
 | 
									fifosize = <128>;
 | 
				
			||||||
				clocks = <&clks 15>;
 | 
									clocks = <&clks 15>;
 | 
				
			||||||
 | 
									sirf,uart-dma-rx-channel = <6>;
 | 
				
			||||||
 | 
									sirf,uart-dma-tx-channel = <7>;
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			usp0: usp@b0080000 {
 | 
								usp0: usp@b0080000 {
 | 
				
			||||||
| 
						 | 
					@ -206,7 +210,10 @@ usp0: usp@b0080000 {
 | 
				
			||||||
				compatible = "sirf,prima2-usp";
 | 
									compatible = "sirf,prima2-usp";
 | 
				
			||||||
				reg = <0xb0080000 0x10000>;
 | 
									reg = <0xb0080000 0x10000>;
 | 
				
			||||||
				interrupts = <20>;
 | 
									interrupts = <20>;
 | 
				
			||||||
 | 
									fifosize = <128>;
 | 
				
			||||||
				clocks = <&clks 28>;
 | 
									clocks = <&clks 28>;
 | 
				
			||||||
 | 
									sirf,usp-dma-rx-channel = <17>;
 | 
				
			||||||
 | 
									sirf,usp-dma-tx-channel = <18>;
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			usp1: usp@b0090000 {
 | 
								usp1: usp@b0090000 {
 | 
				
			||||||
| 
						 | 
					@ -214,7 +221,10 @@ usp1: usp@b0090000 {
 | 
				
			||||||
				compatible = "sirf,prima2-usp";
 | 
									compatible = "sirf,prima2-usp";
 | 
				
			||||||
				reg = <0xb0090000 0x10000>;
 | 
									reg = <0xb0090000 0x10000>;
 | 
				
			||||||
				interrupts = <21>;
 | 
									interrupts = <21>;
 | 
				
			||||||
 | 
									fifosize = <128>;
 | 
				
			||||||
				clocks = <&clks 29>;
 | 
									clocks = <&clks 29>;
 | 
				
			||||||
 | 
									sirf,usp-dma-rx-channel = <14>;
 | 
				
			||||||
 | 
									sirf,usp-dma-tx-channel = <15>;
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			dmac0: dma-controller@b00b0000 {
 | 
								dmac0: dma-controller@b00b0000 {
 | 
				
			||||||
| 
						 | 
					@ -237,6 +247,8 @@ vip@b00C0000 {
 | 
				
			||||||
				compatible = "sirf,prima2-vip";
 | 
									compatible = "sirf,prima2-vip";
 | 
				
			||||||
				reg = <0xb00C0000 0x10000>;
 | 
									reg = <0xb00C0000 0x10000>;
 | 
				
			||||||
				clocks = <&clks 31>;
 | 
									clocks = <&clks 31>;
 | 
				
			||||||
 | 
									interrupts = <14>;
 | 
				
			||||||
 | 
									sirf,vip-dma-rx-channel = <16>;
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			spi0: spi@b00d0000 {
 | 
								spi0: spi@b00d0000 {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -96,6 +96,11 @@ timer {
 | 
				
			||||||
			     <1 14 0xf08>,
 | 
								     <1 14 0xf08>,
 | 
				
			||||||
			     <1 11 0xf08>,
 | 
								     <1 11 0xf08>,
 | 
				
			||||||
			     <1 10 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 {
 | 
						mct@101C0000 {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,6 +13,7 @@ cpus {
 | 
				
			||||||
		cpu@0 {
 | 
							cpu@0 {
 | 
				
			||||||
			device_type = "cpu";
 | 
								device_type = "cpu";
 | 
				
			||||||
			compatible = "marvell,feroceon";
 | 
								compatible = "marvell,feroceon";
 | 
				
			||||||
 | 
								reg = <0>;
 | 
				
			||||||
			clocks = <&core_clk 1>, <&core_clk 3>, <&gate_clk 11>;
 | 
								clocks = <&core_clk 1>, <&core_clk 3>, <&gate_clk 11>;
 | 
				
			||||||
			clock-names = "cpu_clk", "ddrclk", "powersave";
 | 
								clock-names = "cpu_clk", "ddrclk", "powersave";
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
| 
						 | 
					@ -167,7 +168,7 @@ xor01 {
 | 
				
			||||||
		xor@60900 {
 | 
							xor@60900 {
 | 
				
			||||||
			compatible = "marvell,orion-xor";
 | 
								compatible = "marvell,orion-xor";
 | 
				
			||||||
			reg = <0x60900 0x100
 | 
								reg = <0x60900 0x100
 | 
				
			||||||
			       0xd0B00 0x100>;
 | 
								       0x60B00 0x100>;
 | 
				
			||||||
			status = "okay";
 | 
								status = "okay";
 | 
				
			||||||
			clocks = <&gate_clk 16>;
 | 
								clocks = <&gate_clk 16>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -11,7 +11,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/ {
 | 
					/ {
 | 
				
			||||||
	model = "TI OMAP3 BeagleBoard xM";
 | 
						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 {
 | 
						cpus {
 | 
				
			||||||
		cpu@0 {
 | 
							cpu@0 {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -108,7 +108,7 @@ omap3_pmx_core: pinmux@48002030 {
 | 
				
			||||||
			#address-cells = <1>;
 | 
								#address-cells = <1>;
 | 
				
			||||||
			#size-cells = <0>;
 | 
								#size-cells = <0>;
 | 
				
			||||||
			pinctrl-single,register-width = <16>;
 | 
								pinctrl-single,register-width = <16>;
 | 
				
			||||||
			pinctrl-single,function-mask = <0x7f1f>;
 | 
								pinctrl-single,function-mask = <0xff1f>;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		omap3_pmx_wkup: pinmux@0x48002a00 {
 | 
							omap3_pmx_wkup: pinmux@0x48002a00 {
 | 
				
			||||||
| 
						 | 
					@ -117,7 +117,7 @@ omap3_pmx_wkup: pinmux@0x48002a00 {
 | 
				
			||||||
			#address-cells = <1>;
 | 
								#address-cells = <1>;
 | 
				
			||||||
			#size-cells = <0>;
 | 
								#size-cells = <0>;
 | 
				
			||||||
			pinctrl-single,register-width = <16>;
 | 
								pinctrl-single,register-width = <16>;
 | 
				
			||||||
			pinctrl-single,function-mask = <0x7f1f>;
 | 
								pinctrl-single,function-mask = <0xff1f>;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		gpio1: gpio@48310000 {
 | 
							gpio1: gpio@48310000 {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -171,7 +171,8 @@ peri-iobg {
 | 
				
			||||||
			compatible = "simple-bus";
 | 
								compatible = "simple-bus";
 | 
				
			||||||
			#address-cells = <1>;
 | 
								#address-cells = <1>;
 | 
				
			||||||
			#size-cells = <1>;
 | 
								#size-cells = <1>;
 | 
				
			||||||
			ranges = <0xb0000000 0xb0000000 0x180000>;
 | 
								ranges = <0xb0000000 0xb0000000 0x180000>,
 | 
				
			||||||
 | 
								       <0x56000000 0x56000000 0x1b00000>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			timer@b0020000 {
 | 
								timer@b0020000 {
 | 
				
			||||||
				compatible = "sirf,prima2-tick";
 | 
									compatible = "sirf,prima2-tick";
 | 
				
			||||||
| 
						 | 
					@ -196,25 +197,32 @@ audio@b0040000 {
 | 
				
			||||||
			uart0: uart@b0050000 {
 | 
								uart0: uart@b0050000 {
 | 
				
			||||||
				cell-index = <0>;
 | 
									cell-index = <0>;
 | 
				
			||||||
				compatible = "sirf,prima2-uart";
 | 
									compatible = "sirf,prima2-uart";
 | 
				
			||||||
				reg = <0xb0050000 0x10000>;
 | 
									reg = <0xb0050000 0x1000>;
 | 
				
			||||||
				interrupts = <17>;
 | 
									interrupts = <17>;
 | 
				
			||||||
 | 
									fifosize = <128>;
 | 
				
			||||||
				clocks = <&clks 13>;
 | 
									clocks = <&clks 13>;
 | 
				
			||||||
 | 
									sirf,uart-dma-rx-channel = <21>;
 | 
				
			||||||
 | 
									sirf,uart-dma-tx-channel = <2>;
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			uart1: uart@b0060000 {
 | 
								uart1: uart@b0060000 {
 | 
				
			||||||
				cell-index = <1>;
 | 
									cell-index = <1>;
 | 
				
			||||||
				compatible = "sirf,prima2-uart";
 | 
									compatible = "sirf,prima2-uart";
 | 
				
			||||||
				reg = <0xb0060000 0x10000>;
 | 
									reg = <0xb0060000 0x1000>;
 | 
				
			||||||
				interrupts = <18>;
 | 
									interrupts = <18>;
 | 
				
			||||||
 | 
									fifosize = <32>;
 | 
				
			||||||
				clocks = <&clks 14>;
 | 
									clocks = <&clks 14>;
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			uart2: uart@b0070000 {
 | 
								uart2: uart@b0070000 {
 | 
				
			||||||
				cell-index = <2>;
 | 
									cell-index = <2>;
 | 
				
			||||||
				compatible = "sirf,prima2-uart";
 | 
									compatible = "sirf,prima2-uart";
 | 
				
			||||||
				reg = <0xb0070000 0x10000>;
 | 
									reg = <0xb0070000 0x1000>;
 | 
				
			||||||
				interrupts = <19>;
 | 
									interrupts = <19>;
 | 
				
			||||||
 | 
									fifosize = <128>;
 | 
				
			||||||
				clocks = <&clks 15>;
 | 
									clocks = <&clks 15>;
 | 
				
			||||||
 | 
									sirf,uart-dma-rx-channel = <6>;
 | 
				
			||||||
 | 
									sirf,uart-dma-tx-channel = <7>;
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			usp0: usp@b0080000 {
 | 
								usp0: usp@b0080000 {
 | 
				
			||||||
| 
						 | 
					@ -222,7 +230,10 @@ usp0: usp@b0080000 {
 | 
				
			||||||
				compatible = "sirf,prima2-usp";
 | 
									compatible = "sirf,prima2-usp";
 | 
				
			||||||
				reg = <0xb0080000 0x10000>;
 | 
									reg = <0xb0080000 0x10000>;
 | 
				
			||||||
				interrupts = <20>;
 | 
									interrupts = <20>;
 | 
				
			||||||
 | 
									fifosize = <128>;
 | 
				
			||||||
				clocks = <&clks 28>;
 | 
									clocks = <&clks 28>;
 | 
				
			||||||
 | 
									sirf,usp-dma-rx-channel = <17>;
 | 
				
			||||||
 | 
									sirf,usp-dma-tx-channel = <18>;
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			usp1: usp@b0090000 {
 | 
								usp1: usp@b0090000 {
 | 
				
			||||||
| 
						 | 
					@ -230,7 +241,10 @@ usp1: usp@b0090000 {
 | 
				
			||||||
				compatible = "sirf,prima2-usp";
 | 
									compatible = "sirf,prima2-usp";
 | 
				
			||||||
				reg = <0xb0090000 0x10000>;
 | 
									reg = <0xb0090000 0x10000>;
 | 
				
			||||||
				interrupts = <21>;
 | 
									interrupts = <21>;
 | 
				
			||||||
 | 
									fifosize = <128>;
 | 
				
			||||||
				clocks = <&clks 29>;
 | 
									clocks = <&clks 29>;
 | 
				
			||||||
 | 
									sirf,usp-dma-rx-channel = <14>;
 | 
				
			||||||
 | 
									sirf,usp-dma-tx-channel = <15>;
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			usp2: usp@b00a0000 {
 | 
								usp2: usp@b00a0000 {
 | 
				
			||||||
| 
						 | 
					@ -238,7 +252,10 @@ usp2: usp@b00a0000 {
 | 
				
			||||||
				compatible = "sirf,prima2-usp";
 | 
									compatible = "sirf,prima2-usp";
 | 
				
			||||||
				reg = <0xb00a0000 0x10000>;
 | 
									reg = <0xb00a0000 0x10000>;
 | 
				
			||||||
				interrupts = <22>;
 | 
									interrupts = <22>;
 | 
				
			||||||
 | 
									fifosize = <128>;
 | 
				
			||||||
				clocks = <&clks 30>;
 | 
									clocks = <&clks 30>;
 | 
				
			||||||
 | 
									sirf,usp-dma-rx-channel = <10>;
 | 
				
			||||||
 | 
									sirf,usp-dma-tx-channel = <11>;
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			dmac0: dma-controller@b00b0000 {
 | 
								dmac0: dma-controller@b00b0000 {
 | 
				
			||||||
| 
						 | 
					@ -261,6 +278,8 @@ vip@b00C0000 {
 | 
				
			||||||
				compatible = "sirf,prima2-vip";
 | 
									compatible = "sirf,prima2-vip";
 | 
				
			||||||
				reg = <0xb00C0000 0x10000>;
 | 
									reg = <0xb00C0000 0x10000>;
 | 
				
			||||||
				clocks = <&clks 31>;
 | 
									clocks = <&clks 31>;
 | 
				
			||||||
 | 
									interrupts = <14>;
 | 
				
			||||||
 | 
									sirf,vip-dma-rx-channel = <16>;
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			spi0: spi@b00d0000 {
 | 
								spi0: spi@b00d0000 {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -193,7 +193,7 @@ pfc: pfc@e6050000 {
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sdhi0: sdhi@ee100000 {
 | 
						sdhi0: sdhi@ee100000 {
 | 
				
			||||||
		compatible = "renesas,r8a73a4-sdhi";
 | 
							compatible = "renesas,sdhi-r8a73a4";
 | 
				
			||||||
		reg = <0 0xee100000 0 0x100>;
 | 
							reg = <0 0xee100000 0 0x100>;
 | 
				
			||||||
		interrupt-parent = <&gic>;
 | 
							interrupt-parent = <&gic>;
 | 
				
			||||||
		interrupts = <0 165 4>;
 | 
							interrupts = <0 165 4>;
 | 
				
			||||||
| 
						 | 
					@ -202,7 +202,7 @@ sdhi0: sdhi@ee100000 {
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sdhi1: sdhi@ee120000 {
 | 
						sdhi1: sdhi@ee120000 {
 | 
				
			||||||
		compatible = "renesas,r8a73a4-sdhi";
 | 
							compatible = "renesas,sdhi-r8a73a4";
 | 
				
			||||||
		reg = <0 0xee120000 0 0x100>;
 | 
							reg = <0 0xee120000 0 0x100>;
 | 
				
			||||||
		interrupt-parent = <&gic>;
 | 
							interrupt-parent = <&gic>;
 | 
				
			||||||
		interrupts = <0 166 4>;
 | 
							interrupts = <0 166 4>;
 | 
				
			||||||
| 
						 | 
					@ -211,7 +211,7 @@ sdhi1: sdhi@ee120000 {
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sdhi2: sdhi@ee140000 {
 | 
						sdhi2: sdhi@ee140000 {
 | 
				
			||||||
		compatible = "renesas,r8a73a4-sdhi";
 | 
							compatible = "renesas,sdhi-r8a73a4";
 | 
				
			||||||
		reg = <0 0xee140000 0 0x100>;
 | 
							reg = <0 0xee140000 0 0x100>;
 | 
				
			||||||
		interrupt-parent = <&gic>;
 | 
							interrupt-parent = <&gic>;
 | 
				
			||||||
		interrupts = <0 167 4>;
 | 
							interrupts = <0 167 4>;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -96,6 +96,5 @@ gpio4: gpio@ffc44000 {
 | 
				
			||||||
	pfc: pfc@fffc0000 {
 | 
						pfc: pfc@fffc0000 {
 | 
				
			||||||
		compatible = "renesas,pfc-r8a7778";
 | 
							compatible = "renesas,pfc-r8a7778";
 | 
				
			||||||
		reg = <0xfffc000 0x118>;
 | 
							reg = <0xfffc000 0x118>;
 | 
				
			||||||
		#gpio-range-cells = <3>;
 | 
					 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -188,7 +188,6 @@ i2c3: i2c@ffc73000 {
 | 
				
			||||||
	pfc: pfc@fffc0000 {
 | 
						pfc: pfc@fffc0000 {
 | 
				
			||||||
		compatible = "renesas,pfc-r8a7779";
 | 
							compatible = "renesas,pfc-r8a7779";
 | 
				
			||||||
		reg = <0xfffc0000 0x23c>;
 | 
							reg = <0xfffc0000 0x23c>;
 | 
				
			||||||
		#gpio-range-cells = <3>;
 | 
					 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	thermal@ffc48000 {
 | 
						thermal@ffc48000 {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -148,11 +148,10 @@ mmcif1: mmcif@ee220000 {
 | 
				
			||||||
	pfc: pfc@e6060000 {
 | 
						pfc: pfc@e6060000 {
 | 
				
			||||||
		compatible = "renesas,pfc-r8a7790";
 | 
							compatible = "renesas,pfc-r8a7790";
 | 
				
			||||||
		reg = <0 0xe6060000 0 0x250>;
 | 
							reg = <0 0xe6060000 0 0x250>;
 | 
				
			||||||
		#gpio-range-cells = <3>;
 | 
					 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sdhi0: sdhi@ee100000 {
 | 
						sdhi0: sdhi@ee100000 {
 | 
				
			||||||
		compatible = "renesas,r8a7790-sdhi";
 | 
							compatible = "renesas,sdhi-r8a7790";
 | 
				
			||||||
		reg = <0 0xee100000 0 0x100>;
 | 
							reg = <0 0xee100000 0 0x100>;
 | 
				
			||||||
		interrupt-parent = <&gic>;
 | 
							interrupt-parent = <&gic>;
 | 
				
			||||||
		interrupts = <0 165 4>;
 | 
							interrupts = <0 165 4>;
 | 
				
			||||||
| 
						 | 
					@ -161,7 +160,7 @@ sdhi0: sdhi@ee100000 {
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sdhi1: sdhi@ee120000 {
 | 
						sdhi1: sdhi@ee120000 {
 | 
				
			||||||
		compatible = "renesas,r8a7790-sdhi";
 | 
							compatible = "renesas,sdhi-r8a7790";
 | 
				
			||||||
		reg = <0 0xee120000 0 0x100>;
 | 
							reg = <0 0xee120000 0 0x100>;
 | 
				
			||||||
		interrupt-parent = <&gic>;
 | 
							interrupt-parent = <&gic>;
 | 
				
			||||||
		interrupts = <0 166 4>;
 | 
							interrupts = <0 166 4>;
 | 
				
			||||||
| 
						 | 
					@ -170,7 +169,7 @@ sdhi1: sdhi@ee120000 {
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sdhi2: sdhi@ee140000 {
 | 
						sdhi2: sdhi@ee140000 {
 | 
				
			||||||
		compatible = "renesas,r8a7790-sdhi";
 | 
							compatible = "renesas,sdhi-r8a7790";
 | 
				
			||||||
		reg = <0 0xee140000 0 0x100>;
 | 
							reg = <0 0xee140000 0 0x100>;
 | 
				
			||||||
		interrupt-parent = <&gic>;
 | 
							interrupt-parent = <&gic>;
 | 
				
			||||||
		interrupts = <0 167 4>;
 | 
							interrupts = <0 167 4>;
 | 
				
			||||||
| 
						 | 
					@ -179,7 +178,7 @@ sdhi2: sdhi@ee140000 {
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sdhi3: sdhi@ee160000 {
 | 
						sdhi3: sdhi@ee160000 {
 | 
				
			||||||
		compatible = "renesas,r8a7790-sdhi";
 | 
							compatible = "renesas,sdhi-r8a7790";
 | 
				
			||||||
		reg = <0 0xee160000 0 0x100>;
 | 
							reg = <0 0xee160000 0 0x100>;
 | 
				
			||||||
		interrupt-parent = <&gic>;
 | 
							interrupt-parent = <&gic>;
 | 
				
			||||||
		interrupts = <0 168 4>;
 | 
							interrupts = <0 168 4>;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -196,7 +196,7 @@ mmcif: mmcif@e6bd0000 {
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sdhi0: sdhi@ee100000 {
 | 
						sdhi0: sdhi@ee100000 {
 | 
				
			||||||
		compatible = "renesas,r8a7740-sdhi";
 | 
							compatible = "renesas,sdhi-r8a7740";
 | 
				
			||||||
		reg = <0xee100000 0x100>;
 | 
							reg = <0xee100000 0x100>;
 | 
				
			||||||
		interrupt-parent = <&gic>;
 | 
							interrupt-parent = <&gic>;
 | 
				
			||||||
		interrupts = <0 83 4
 | 
							interrupts = <0 83 4
 | 
				
			||||||
| 
						 | 
					@ -208,7 +208,7 @@ sdhi0: sdhi@ee100000 {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* SDHI1 and SDHI2 have no CD pins, no need for CD IRQ */
 | 
						/* SDHI1 and SDHI2 have no CD pins, no need for CD IRQ */
 | 
				
			||||||
	sdhi1: sdhi@ee120000 {
 | 
						sdhi1: sdhi@ee120000 {
 | 
				
			||||||
		compatible = "renesas,r8a7740-sdhi";
 | 
							compatible = "renesas,sdhi-r8a7740";
 | 
				
			||||||
		reg = <0xee120000 0x100>;
 | 
							reg = <0xee120000 0x100>;
 | 
				
			||||||
		interrupt-parent = <&gic>;
 | 
							interrupt-parent = <&gic>;
 | 
				
			||||||
		interrupts = <0 88 4
 | 
							interrupts = <0 88 4
 | 
				
			||||||
| 
						 | 
					@ -219,7 +219,7 @@ sdhi1: sdhi@ee120000 {
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sdhi2: sdhi@ee140000 {
 | 
						sdhi2: sdhi@ee140000 {
 | 
				
			||||||
		compatible = "renesas,r8a7740-sdhi";
 | 
							compatible = "renesas,sdhi-r8a7740";
 | 
				
			||||||
		reg = <0xee140000 0x100>;
 | 
							reg = <0xee140000 0x100>;
 | 
				
			||||||
		interrupt-parent = <&gic>;
 | 
							interrupt-parent = <&gic>;
 | 
				
			||||||
		interrupts = <0 104 4
 | 
							interrupts = <0 104 4
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20,6 +20,20 @@
 | 
				
			||||||
#   $4 - default install path (blank if root directory)
 | 
					#   $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
 | 
					# User may have a custom install script
 | 
				
			||||||
if [ -x ~/bin/${INSTALLKERNEL} ]; then exec ~/bin/${INSTALLKERNEL} "$@"; fi
 | 
					if [ -x ~/bin/${INSTALLKERNEL} ]; then exec ~/bin/${INSTALLKERNEL} "$@"; fi
 | 
				
			||||||
if [ -x /sbin/${INSTALLKERNEL} ]; then exec /sbin/${INSTALLKERNEL} "$@"; fi
 | 
					if [ -x /sbin/${INSTALLKERNEL} ]; then exec /sbin/${INSTALLKERNEL} "$@"; fi
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -269,6 +269,11 @@ static const struct edmacc_param dummy_paramset = {
 | 
				
			||||||
	.ccnt = 1,
 | 
						.ccnt = 1,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const struct of_device_id edma_of_ids[] = {
 | 
				
			||||||
 | 
						{ .compatible = "ti,edma3", },
 | 
				
			||||||
 | 
						{}
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*****************************************************************************/
 | 
					/*****************************************************************************/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void map_dmach_queue(unsigned ctlr, unsigned ch_no,
 | 
					static void map_dmach_queue(unsigned ctlr, unsigned ch_no,
 | 
				
			||||||
| 
						 | 
					@ -560,8 +565,32 @@ static int reserve_contiguous_slots(int ctlr, unsigned int id,
 | 
				
			||||||
static int prepare_unused_channel_list(struct device *dev, void *data)
 | 
					static int prepare_unused_channel_list(struct device *dev, void *data)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct platform_device *pdev = to_platform_device(dev);
 | 
						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++) {
 | 
						for (i = 0; i < pdev->num_resources; i++) {
 | 
				
			||||||
		if ((pdev->resource[i].flags & IORESOURCE_DMA) &&
 | 
							if ((pdev->resource[i].flags & IORESOURCE_DMA) &&
 | 
				
			||||||
				(int)pdev->resource[i].start >= 0) {
 | 
									(int)pdev->resource[i].start >= 0) {
 | 
				
			||||||
| 
						 | 
					@ -1762,11 +1791,6 @@ static int edma_probe(struct platform_device *pdev)
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const struct of_device_id edma_of_ids[] = {
 | 
					 | 
				
			||||||
	{ .compatible = "ti,edma3", },
 | 
					 | 
				
			||||||
	{}
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static struct platform_driver edma_driver = {
 | 
					static struct platform_driver edma_driver = {
 | 
				
			||||||
	.driver = {
 | 
						.driver = {
 | 
				
			||||||
		.name	= "edma",
 | 
							.name	= "edma",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -51,7 +51,8 @@ void mcpm_cpu_power_down(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	phys_reset_t phys_reset;
 | 
						phys_reset_t phys_reset;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	BUG_ON(!platform_ops);
 | 
						if (WARN_ON_ONCE(!platform_ops || !platform_ops->power_down))
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
	BUG_ON(!irqs_disabled());
 | 
						BUG_ON(!irqs_disabled());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
| 
						 | 
					@ -93,7 +94,8 @@ void mcpm_cpu_suspend(u64 expected_residency)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	phys_reset_t phys_reset;
 | 
						phys_reset_t phys_reset;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	BUG_ON(!platform_ops);
 | 
						if (WARN_ON_ONCE(!platform_ops || !platform_ops->suspend))
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
	BUG_ON(!irqs_disabled());
 | 
						BUG_ON(!irqs_disabled());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Very similar to mcpm_cpu_power_down() */
 | 
						/* Very similar to mcpm_cpu_power_down() */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,6 +15,7 @@
 | 
				
			||||||
#include <linux/module.h>
 | 
					#include <linux/module.h>
 | 
				
			||||||
#include <linux/string.h>
 | 
					#include <linux/string.h>
 | 
				
			||||||
#include <asm/mach/sharpsl_param.h>
 | 
					#include <asm/mach/sharpsl_param.h>
 | 
				
			||||||
 | 
					#include <asm/memory.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Certain hardware parameters determined at the time of device manufacture,
 | 
					 * Certain hardware parameters determined at the time of device manufacture,
 | 
				
			||||||
| 
						 | 
					@ -25,8 +26,10 @@
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#ifdef CONFIG_ARCH_SA1100
 | 
					#ifdef CONFIG_ARCH_SA1100
 | 
				
			||||||
#define PARAM_BASE	0xe8ffc000
 | 
					#define PARAM_BASE	0xe8ffc000
 | 
				
			||||||
 | 
					#define param_start(x)	(void *)(x)
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
#define PARAM_BASE	0xa0000a00
 | 
					#define PARAM_BASE	0xa0000a00
 | 
				
			||||||
 | 
					#define param_start(x)	__va(x)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#define MAGIC_CHG(a,b,c,d) ( ( d << 24 ) | ( c << 16 )  | ( b << 8 ) | a )
 | 
					#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)
 | 
					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)
 | 
						if (sharpsl_param.comadj_keyword != COMADJ_MAGIC)
 | 
				
			||||||
		sharpsl_param.comadj=-1;
 | 
							sharpsl_param.comadj=-1;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -135,6 +135,7 @@ CONFIG_MMC=y
 | 
				
			||||||
CONFIG_MMC_ARMMMCI=y
 | 
					CONFIG_MMC_ARMMMCI=y
 | 
				
			||||||
CONFIG_MMC_SDHCI=y
 | 
					CONFIG_MMC_SDHCI=y
 | 
				
			||||||
CONFIG_MMC_SDHCI_PLTFM=y
 | 
					CONFIG_MMC_SDHCI_PLTFM=y
 | 
				
			||||||
 | 
					CONFIG_MMC_SDHCI_ESDHC_IMX=y
 | 
				
			||||||
CONFIG_MMC_SDHCI_TEGRA=y
 | 
					CONFIG_MMC_SDHCI_TEGRA=y
 | 
				
			||||||
CONFIG_MMC_SDHCI_SPEAR=y
 | 
					CONFIG_MMC_SDHCI_SPEAR=y
 | 
				
			||||||
CONFIG_MMC_OMAP=y
 | 
					CONFIG_MMC_OMAP=y
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -31,5 +31,4 @@ generic-y += termbits.h
 | 
				
			||||||
generic-y += termios.h
 | 
					generic-y += termios.h
 | 
				
			||||||
generic-y += timex.h
 | 
					generic-y += timex.h
 | 
				
			||||||
generic-y += trace_clock.h
 | 
					generic-y += trace_clock.h
 | 
				
			||||||
generic-y += types.h
 | 
					 | 
				
			||||||
generic-y += unaligned.h
 | 
					generic-y += unaligned.h
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,7 +16,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static __always_inline bool arch_static_branch(struct static_key *key)
 | 
					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"
 | 
							 JUMP_LABEL_NOP "\n\t"
 | 
				
			||||||
		 ".pushsection __jump_table,  \"aw\"\n\t"
 | 
							 ".pushsection __jump_table,  \"aw\"\n\t"
 | 
				
			||||||
		 ".word 1b, %l[l_yes], %c0\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 must be called with interrupts disabled.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * This does not return.  Re-entry in the kernel is expected via
 | 
					 * On success this does not return.  Re-entry in the kernel is expected
 | 
				
			||||||
 * mcpm_entry_point.
 | 
					 * 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);
 | 
					void mcpm_cpu_power_down(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -98,8 +101,11 @@ void mcpm_cpu_power_down(void);
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * This must be called with interrupts disabled.
 | 
					 * This must be called with interrupts disabled.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * This does not return.  Re-entry in the kernel is expected via
 | 
					 * On success this does not return.  Re-entry in the kernel is expected
 | 
				
			||||||
 * mcpm_entry_point.
 | 
					 * 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);
 | 
					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 int i, unsigned int n,
 | 
				
			||||||
					 unsigned long *args)
 | 
										 unsigned long *args)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						if (n == 0)
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (i + n > SYSCALL_MAX_ARGS) {
 | 
						if (i + n > SYSCALL_MAX_ARGS) {
 | 
				
			||||||
		unsigned long *args_bad = args + SYSCALL_MAX_ARGS - i;
 | 
							unsigned long *args_bad = args + SYSCALL_MAX_ARGS - i;
 | 
				
			||||||
		unsigned int n_bad = n + i - SYSCALL_MAX_ARGS;
 | 
							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,
 | 
										 unsigned int i, unsigned int n,
 | 
				
			||||||
					 const unsigned long *args)
 | 
										 const unsigned long *args)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						if (n == 0)
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (i + n > SYSCALL_MAX_ARGS) {
 | 
						if (i + n > SYSCALL_MAX_ARGS) {
 | 
				
			||||||
		pr_warning("%s called with max args %d, handling only %d\n",
 | 
							pr_warning("%s called with max args %d, handling only %d\n",
 | 
				
			||||||
			   __func__, i + n, SYSCALL_MAX_ARGS);
 | 
								   __func__, i + n, SYSCALL_MAX_ARGS);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -487,7 +487,26 @@ __fixup_smp:
 | 
				
			||||||
	mrc	p15, 0, r0, c0, c0, 5	@ read MPIDR
 | 
						mrc	p15, 0, r0, c0, c0, 5	@ read MPIDR
 | 
				
			||||||
	and	r0, r0, #0xc0000000	@ multiprocessing extensions and
 | 
						and	r0, r0, #0xc0000000	@ multiprocessing extensions and
 | 
				
			||||||
	teq	r0, #0x80000000		@ not part of a uniprocessor system?
 | 
						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:
 | 
					__fixup_smp_on_up:
 | 
				
			||||||
	adr	r0, 1f
 | 
						adr	r0, 1f
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -93,7 +93,7 @@ static irqreturn_t at91rm9200_timer_interrupt(int irq, void *dev_id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct irqaction at91rm9200_timer_irq = {
 | 
					static struct irqaction at91rm9200_timer_irq = {
 | 
				
			||||||
	.name		= "at91_tick",
 | 
						.name		= "at91_tick",
 | 
				
			||||||
	.flags		= IRQF_SHARED | IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL,
 | 
						.flags		= IRQF_SHARED | IRQF_TIMER | IRQF_IRQPOLL,
 | 
				
			||||||
	.handler	= at91rm9200_timer_interrupt,
 | 
						.handler	= at91rm9200_timer_interrupt,
 | 
				
			||||||
	.irq		= NR_IRQS_LEGACY + AT91_ID_SYS,
 | 
						.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 = {
 | 
					static struct irqaction at91sam926x_pit_irq = {
 | 
				
			||||||
	.name		= "at91_tick",
 | 
						.name		= "at91_tick",
 | 
				
			||||||
	.flags		= IRQF_SHARED | IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL,
 | 
						.flags		= IRQF_SHARED | IRQF_TIMER | IRQF_IRQPOLL,
 | 
				
			||||||
	.handler	= at91sam926x_pit_interrupt,
 | 
						.handler	= at91sam926x_pit_interrupt,
 | 
				
			||||||
	.irq		= NR_IRQS_LEGACY + AT91_ID_SYS,
 | 
						.irq		= NR_IRQS_LEGACY + AT91_ID_SYS,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,11 +16,17 @@
 | 
				
			||||||
#include "at91_rstc.h"
 | 
					#include "at91_rstc.h"
 | 
				
			||||||
			.arm
 | 
								.arm
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * at91_ramc_base is an array void*
 | 
				
			||||||
 | 
					 * init at NULL if only one DDR controler is present in or DT
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
			.globl	at91sam9g45_restart
 | 
								.globl	at91sam9g45_restart
 | 
				
			||||||
 | 
					
 | 
				
			||||||
at91sam9g45_restart:
 | 
					at91sam9g45_restart:
 | 
				
			||||||
			ldr	r5, =at91_ramc_base		@ preload constants
 | 
								ldr	r5, =at91_ramc_base		@ preload constants
 | 
				
			||||||
			ldr	r0, [r5]
 | 
								ldr	r0, [r5]
 | 
				
			||||||
 | 
								ldr	r5, [r5, #4]			@ ddr1
 | 
				
			||||||
 | 
								cmp	r5, #0
 | 
				
			||||||
			ldr	r4, =at91_rstc_base
 | 
								ldr	r4, =at91_rstc_base
 | 
				
			||||||
			ldr	r1, [r4]
 | 
								ldr	r1, [r4]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -30,6 +36,8 @@ at91sam9g45_restart:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			.balign	32				@ align to cache line
 | 
								.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	r2, [r0, #AT91_DDRSDRC_RTR]	@ disable DDR0 access
 | 
				
			||||||
			str	r3, [r0, #AT91_DDRSDRC_LPR]	@ power down DDR0
 | 
								str	r3, [r0, #AT91_DDRSDRC_LPR]	@ power down DDR0
 | 
				
			||||||
			str	r4, [r1, #AT91_RSTC_CR]		@ reset processor
 | 
								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 = {
 | 
					static struct irqaction at91x40_timer_irq = {
 | 
				
			||||||
	.name		= "at91_tick",
 | 
						.name		= "at91_tick",
 | 
				
			||||||
	.flags		= IRQF_DISABLED | IRQF_TIMER,
 | 
						.flags		= IRQF_TIMER,
 | 
				
			||||||
	.handler	= at91x40_timer_interrupt
 | 
						.handler	= at91x40_timer_interrupt
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -176,7 +176,7 @@ static struct at24_platform_data eeprom_info = {
 | 
				
			||||||
	.context	= (void *)0x7f00,
 | 
						.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,
 | 
						.asp_chan_q = EVENTQ_3,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,8 +15,6 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <mach/hardware.h>
 | 
					#include <mach/hardware.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <linux/platform_device.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define DAVINCI_UART0_BASE	(IO_PHYS + 0x20000)
 | 
					#define DAVINCI_UART0_BASE	(IO_PHYS + 0x20000)
 | 
				
			||||||
#define DAVINCI_UART1_BASE	(IO_PHYS + 0x20400)
 | 
					#define DAVINCI_UART1_BASE	(IO_PHYS + 0x20400)
 | 
				
			||||||
#define DAVINCI_UART2_BASE	(IO_PHYS + 0x20800)
 | 
					#define DAVINCI_UART2_BASE	(IO_PHYS + 0x20800)
 | 
				
			||||||
| 
						 | 
					@ -39,6 +37,8 @@
 | 
				
			||||||
#define UART_DM646X_SCR_TX_WATERMARK	0x08
 | 
					#define UART_DM646X_SCR_TX_WATERMARK	0x08
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef __ASSEMBLY__
 | 
					#ifndef __ASSEMBLY__
 | 
				
			||||||
 | 
					#include <linux/platform_device.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern int davinci_serial_init(struct platform_device *);
 | 
					extern int davinci_serial_init(struct platform_device *);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,2 +1,9 @@
 | 
				
			||||||
/* Simple oneliner include to the PCIv3 early init */
 | 
					/* Simple oneliner include to the PCIv3 early init */
 | 
				
			||||||
 | 
					#ifdef CONFIG_PCI
 | 
				
			||||||
extern int pci_v3_early_init(void);
 | 
					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_base = of_iomap(np, 0);
 | 
				
			||||||
		coherency_cpu_base = of_iomap(np, 1);
 | 
							coherency_cpu_base = of_iomap(np, 1);
 | 
				
			||||||
		set_cpu_coherent(cpu_logical_map(smp_processor_id()), 0);
 | 
							set_cpu_coherent(cpu_logical_map(smp_processor_id()), 0);
 | 
				
			||||||
 | 
							of_node_put(np);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
| 
						 | 
					@ -147,9 +148,14 @@ int __init coherency_init(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int __init coherency_late_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,
 | 
							bus_register_notifier(&platform_bus_type,
 | 
				
			||||||
				      &mvebu_hwcc_platform_nb);
 | 
									      &mvebu_hwcc_platform_nb);
 | 
				
			||||||
 | 
							of_node_put(np);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -67,6 +67,7 @@ int __init armada_370_xp_pmsu_init(void)
 | 
				
			||||||
		pr_info("Initializing Power Management Service Unit\n");
 | 
							pr_info("Initializing Power Management Service Unit\n");
 | 
				
			||||||
		pmsu_mp_base = of_iomap(np, 0);
 | 
							pmsu_mp_base = of_iomap(np, 0);
 | 
				
			||||||
		pmsu_reset_base = of_iomap(np, 1);
 | 
							pmsu_reset_base = of_iomap(np, 1);
 | 
				
			||||||
 | 
							of_node_put(np);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -98,6 +98,7 @@ static int __init mvebu_system_controller_init(void)
 | 
				
			||||||
		BUG_ON(!match);
 | 
							BUG_ON(!match);
 | 
				
			||||||
		system_controller_base = of_iomap(np, 0);
 | 
							system_controller_base = of_iomap(np, 0);
 | 
				
			||||||
		mvebu_sc = (struct mvebu_system_controller *)match->data;
 | 
							mvebu_sc = (struct mvebu_system_controller *)match->data;
 | 
				
			||||||
 | 
							of_node_put(np);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -129,6 +129,24 @@ DT_MACHINE_START(OMAP3_DT, "Generic OMAP3 (Flattened Device Tree)")
 | 
				
			||||||
	.restart	= omap3xxx_restart,
 | 
						.restart	= omap3xxx_restart,
 | 
				
			||||||
MACHINE_END
 | 
					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 = {
 | 
					static const char *omap3_gp_boards_compat[] __initdata = {
 | 
				
			||||||
	"ti,omap3-beagle",
 | 
						"ti,omap3-beagle",
 | 
				
			||||||
	"timll,omap3-devkit8000",
 | 
						"timll,omap3-devkit8000",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -167,38 +167,47 @@ static struct lp55xx_led_config rx51_lp5523_led_config[] = {
 | 
				
			||||||
		.name		= "lp5523:kb1",
 | 
							.name		= "lp5523:kb1",
 | 
				
			||||||
		.chan_nr	= 0,
 | 
							.chan_nr	= 0,
 | 
				
			||||||
		.led_current	= 50,
 | 
							.led_current	= 50,
 | 
				
			||||||
 | 
							.max_current	= 100,
 | 
				
			||||||
	}, {
 | 
						}, {
 | 
				
			||||||
		.name		= "lp5523:kb2",
 | 
							.name		= "lp5523:kb2",
 | 
				
			||||||
		.chan_nr	= 1,
 | 
							.chan_nr	= 1,
 | 
				
			||||||
		.led_current	= 50,
 | 
							.led_current	= 50,
 | 
				
			||||||
 | 
							.max_current	= 100,
 | 
				
			||||||
	}, {
 | 
						}, {
 | 
				
			||||||
		.name		= "lp5523:kb3",
 | 
							.name		= "lp5523:kb3",
 | 
				
			||||||
		.chan_nr	= 2,
 | 
							.chan_nr	= 2,
 | 
				
			||||||
		.led_current	= 50,
 | 
							.led_current	= 50,
 | 
				
			||||||
 | 
							.max_current	= 100,
 | 
				
			||||||
	}, {
 | 
						}, {
 | 
				
			||||||
		.name		= "lp5523:kb4",
 | 
							.name		= "lp5523:kb4",
 | 
				
			||||||
		.chan_nr	= 3,
 | 
							.chan_nr	= 3,
 | 
				
			||||||
		.led_current	= 50,
 | 
							.led_current	= 50,
 | 
				
			||||||
 | 
							.max_current	= 100,
 | 
				
			||||||
	}, {
 | 
						}, {
 | 
				
			||||||
		.name		= "lp5523:b",
 | 
							.name		= "lp5523:b",
 | 
				
			||||||
		.chan_nr	= 4,
 | 
							.chan_nr	= 4,
 | 
				
			||||||
		.led_current	= 50,
 | 
							.led_current	= 50,
 | 
				
			||||||
 | 
							.max_current	= 100,
 | 
				
			||||||
	}, {
 | 
						}, {
 | 
				
			||||||
		.name		= "lp5523:g",
 | 
							.name		= "lp5523:g",
 | 
				
			||||||
		.chan_nr	= 5,
 | 
							.chan_nr	= 5,
 | 
				
			||||||
		.led_current	= 50,
 | 
							.led_current	= 50,
 | 
				
			||||||
 | 
							.max_current	= 100,
 | 
				
			||||||
	}, {
 | 
						}, {
 | 
				
			||||||
		.name		= "lp5523:r",
 | 
							.name		= "lp5523:r",
 | 
				
			||||||
		.chan_nr	= 6,
 | 
							.chan_nr	= 6,
 | 
				
			||||||
		.led_current	= 50,
 | 
							.led_current	= 50,
 | 
				
			||||||
 | 
							.max_current	= 100,
 | 
				
			||||||
	}, {
 | 
						}, {
 | 
				
			||||||
		.name		= "lp5523:kb5",
 | 
							.name		= "lp5523:kb5",
 | 
				
			||||||
		.chan_nr	= 7,
 | 
							.chan_nr	= 7,
 | 
				
			||||||
		.led_current	= 50,
 | 
							.led_current	= 50,
 | 
				
			||||||
 | 
							.max_current	= 100,
 | 
				
			||||||
	}, {
 | 
						}, {
 | 
				
			||||||
		.name		= "lp5523:kb6",
 | 
							.name		= "lp5523:kb6",
 | 
				
			||||||
		.chan_nr	= 8,
 | 
							.chan_nr	= 8,
 | 
				
			||||||
		.led_current	= 50,
 | 
							.led_current	= 50,
 | 
				
			||||||
 | 
							.max_current	= 100,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -272,9 +272,19 @@ static int omap2_onenand_setup_async(void __iomem *onenand_base)
 | 
				
			||||||
	struct gpmc_timings t;
 | 
						struct gpmc_timings t;
 | 
				
			||||||
	int ret;
 | 
						int ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (gpmc_onenand_data->of_node)
 | 
						if (gpmc_onenand_data->of_node) {
 | 
				
			||||||
		gpmc_read_settings_dt(gpmc_onenand_data->of_node,
 | 
							gpmc_read_settings_dt(gpmc_onenand_data->of_node,
 | 
				
			||||||
				      &onenand_async);
 | 
									      &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);
 | 
						omap2_onenand_set_async_mode(onenand_base);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -28,7 +28,7 @@
 | 
				
			||||||
#define OMAP_PULL_UP			(1 << 4)
 | 
					#define OMAP_PULL_UP			(1 << 4)
 | 
				
			||||||
#define OMAP_ALTELECTRICALSEL		(1 << 5)
 | 
					#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_INPUT_EN			(1 << 8)
 | 
				
			||||||
#define OMAP_OFF_EN			(1 << 9)
 | 
					#define OMAP_OFF_EN			(1 << 9)
 | 
				
			||||||
#define OMAP_OFFOUT_EN			(1 << 10)
 | 
					#define OMAP_OFFOUT_EN			(1 << 10)
 | 
				
			||||||
| 
						 | 
					@ -36,8 +36,6 @@
 | 
				
			||||||
#define OMAP_OFF_PULL_EN		(1 << 12)
 | 
					#define OMAP_OFF_PULL_EN		(1 << 12)
 | 
				
			||||||
#define OMAP_OFF_PULL_UP		(1 << 13)
 | 
					#define OMAP_OFF_PULL_UP		(1 << 13)
 | 
				
			||||||
#define OMAP_WAKEUP_EN			(1 << 14)
 | 
					#define OMAP_WAKEUP_EN			(1 << 14)
 | 
				
			||||||
 | 
					 | 
				
			||||||
/* 44xx specific mux bit defines */
 | 
					 | 
				
			||||||
#define OMAP_WAKEUP_EVENT		(1 << 15)
 | 
					#define OMAP_WAKEUP_EVENT		(1 << 15)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Active pin states */
 | 
					/* Active pin states */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -628,7 +628,7 @@ void __init omap4_local_timer_init(void)
 | 
				
			||||||
#endif /* CONFIG_HAVE_ARM_TWD */
 | 
					#endif /* CONFIG_HAVE_ARM_TWD */
 | 
				
			||||||
#endif /* CONFIG_ARCH_OMAP4 */
 | 
					#endif /* CONFIG_ARCH_OMAP4 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_SOC_OMAP5
 | 
					#if defined(CONFIG_SOC_OMAP5) || defined(CONFIG_SOC_DRA7XX)
 | 
				
			||||||
void __init omap5_realtime_timer_init(void)
 | 
					void __init omap5_realtime_timer_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	omap4_sync32k_timer_init();
 | 
						omap4_sync32k_timer_init();
 | 
				
			||||||
| 
						 | 
					@ -636,7 +636,7 @@ void __init omap5_realtime_timer_init(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	clocksource_of_init();
 | 
						clocksource_of_init();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif /* CONFIG_SOC_OMAP5 */
 | 
					#endif /* CONFIG_SOC_OMAP5 || CONFIG_SOC_DRA7XX */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * omap_timer_init - build and register timer device with an
 | 
					 * 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",
 | 
						PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.1", "pfc-r8a7740",
 | 
				
			||||||
				  "fsib_mclk_in", "fsib"),
 | 
									  "fsib_mclk_in", "fsib"),
 | 
				
			||||||
	/* GETHER */
 | 
						/* GETHER */
 | 
				
			||||||
	PIN_MAP_MUX_GROUP_DEFAULT("sh-eth", "pfc-r8a7740",
 | 
						PIN_MAP_MUX_GROUP_DEFAULT("r8a7740-gether", "pfc-r8a7740",
 | 
				
			||||||
				  "gether_mii", "gether"),
 | 
									  "gether_mii", "gether"),
 | 
				
			||||||
	PIN_MAP_MUX_GROUP_DEFAULT("sh-eth", "pfc-r8a7740",
 | 
						PIN_MAP_MUX_GROUP_DEFAULT("r8a7740-gether", "pfc-r8a7740",
 | 
				
			||||||
				  "gether_int", "gether"),
 | 
									  "gether_int", "gether"),
 | 
				
			||||||
	/* HDMI */
 | 
						/* HDMI */
 | 
				
			||||||
	PIN_MAP_MUX_GROUP_DEFAULT("sh-mobile-hdmi", "pfc-r8a7740",
 | 
						PIN_MAP_MUX_GROUP_DEFAULT("sh-mobile-hdmi", "pfc-r8a7740",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -29,6 +29,7 @@
 | 
				
			||||||
#include <linux/pinctrl/machine.h>
 | 
					#include <linux/pinctrl/machine.h>
 | 
				
			||||||
#include <linux/platform_data/gpio-rcar.h>
 | 
					#include <linux/platform_data/gpio-rcar.h>
 | 
				
			||||||
#include <linux/platform_device.h>
 | 
					#include <linux/platform_device.h>
 | 
				
			||||||
 | 
					#include <linux/phy.h>
 | 
				
			||||||
#include <linux/regulator/fixed.h>
 | 
					#include <linux/regulator/fixed.h>
 | 
				
			||||||
#include <linux/regulator/machine.h>
 | 
					#include <linux/regulator/machine.h>
 | 
				
			||||||
#include <linux/sh_eth.h>
 | 
					#include <linux/sh_eth.h>
 | 
				
			||||||
| 
						 | 
					@ -155,6 +156,30 @@ static void __init lager_add_standard_devices(void)
 | 
				
			||||||
					  ðer_pdata, sizeof(ether_pdata));
 | 
										  ð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 = {
 | 
					static const char *lager_boards_compat_dt[] __initdata = {
 | 
				
			||||||
	"renesas,lager",
 | 
						"renesas,lager",
 | 
				
			||||||
	NULL,
 | 
						NULL,
 | 
				
			||||||
| 
						 | 
					@ -163,6 +188,6 @@ static const char *lager_boards_compat_dt[] __initdata = {
 | 
				
			||||||
DT_MACHINE_START(LAGER_DT, "lager")
 | 
					DT_MACHINE_START(LAGER_DT, "lager")
 | 
				
			||||||
	.init_early	= r8a7790_init_delay,
 | 
						.init_early	= r8a7790_init_delay,
 | 
				
			||||||
	.init_time	= r8a7790_timer_init,
 | 
						.init_time	= r8a7790_timer_init,
 | 
				
			||||||
	.init_machine	= lager_add_standard_devices,
 | 
						.init_machine	= lager_init,
 | 
				
			||||||
	.dt_compat	= lager_boards_compat_dt,
 | 
						.dt_compat	= lager_boards_compat_dt,
 | 
				
			||||||
MACHINE_END
 | 
					MACHINE_END
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -131,6 +131,16 @@ static void tc2_pm_down(u64 residency)
 | 
				
			||||||
	} else
 | 
						} else
 | 
				
			||||||
		BUG();
 | 
							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)) {
 | 
						if (last_man && __mcpm_outbound_enter_critical(cpu, cluster)) {
 | 
				
			||||||
		arch_spin_unlock(&tc2_pm_lock);
 | 
							arch_spin_unlock(&tc2_pm_lock);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -231,7 +241,6 @@ static void tc2_pm_suspend(u64 residency)
 | 
				
			||||||
	cpu = MPIDR_AFFINITY_LEVEL(mpidr, 0);
 | 
						cpu = MPIDR_AFFINITY_LEVEL(mpidr, 0);
 | 
				
			||||||
	cluster = MPIDR_AFFINITY_LEVEL(mpidr, 1);
 | 
						cluster = MPIDR_AFFINITY_LEVEL(mpidr, 1);
 | 
				
			||||||
	ve_spc_set_resume_addr(cluster, cpu, virt_to_phys(mcpm_entry_point));
 | 
						ve_spc_set_resume_addr(cluster, cpu, virt_to_phys(mcpm_entry_point));
 | 
				
			||||||
	gic_cpu_if_down();
 | 
					 | 
				
			||||||
	tc2_pm_down(residency);
 | 
						tc2_pm_down(residency);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1232,7 +1232,8 @@ __iommu_create_mapping(struct device *dev, struct page **pages, size_t size)
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		len = (j - i) << PAGE_SHIFT;
 | 
							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)
 | 
							if (ret < 0)
 | 
				
			||||||
			goto fail;
 | 
								goto fail;
 | 
				
			||||||
		iova += len;
 | 
							iova += len;
 | 
				
			||||||
| 
						 | 
					@ -1431,6 +1432,27 @@ static int arm_iommu_get_sgtable(struct device *dev, struct sg_table *sgt,
 | 
				
			||||||
					 GFP_KERNEL);
 | 
										 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
 | 
					 * 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;
 | 
						int ret = 0;
 | 
				
			||||||
	unsigned int count;
 | 
						unsigned int count;
 | 
				
			||||||
	struct scatterlist *s;
 | 
						struct scatterlist *s;
 | 
				
			||||||
 | 
						int prot;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	size = PAGE_ALIGN(size);
 | 
						size = PAGE_ALIGN(size);
 | 
				
			||||||
	*handle = DMA_ERROR_CODE;
 | 
						*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_get_attr(DMA_ATTR_SKIP_CPU_SYNC, attrs))
 | 
				
			||||||
			__dma_page_cpu_to_dev(sg_page(s), s->offset, s->length, dir);
 | 
								__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)
 | 
							if (ret < 0)
 | 
				
			||||||
			goto fail;
 | 
								goto fail;
 | 
				
			||||||
		count += len >> PAGE_SHIFT;
 | 
							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)
 | 
						if (dma_addr == DMA_ERROR_CODE)
 | 
				
			||||||
		return dma_addr;
 | 
							return dma_addr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	switch (dir) {
 | 
						prot = __dma_direction_to_prot(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;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ret = iommu_map(mapping->domain, dma_addr, page_to_phys(page), len, prot);
 | 
						ret = iommu_map(mapping->domain, dma_addr, page_to_phys(page), len, prot);
 | 
				
			||||||
	if (ret < 0)
 | 
						if (ret < 0)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,7 +17,6 @@
 | 
				
			||||||
#include <linux/nodemask.h>
 | 
					#include <linux/nodemask.h>
 | 
				
			||||||
#include <linux/initrd.h>
 | 
					#include <linux/initrd.h>
 | 
				
			||||||
#include <linux/of_fdt.h>
 | 
					#include <linux/of_fdt.h>
 | 
				
			||||||
#include <linux/of_reserved_mem.h>
 | 
					 | 
				
			||||||
#include <linux/highmem.h>
 | 
					#include <linux/highmem.h>
 | 
				
			||||||
#include <linux/gfp.h>
 | 
					#include <linux/gfp.h>
 | 
				
			||||||
#include <linux/memblock.h>
 | 
					#include <linux/memblock.h>
 | 
				
			||||||
| 
						 | 
					@ -379,8 +378,6 @@ void __init arm_memblock_init(struct meminfo *mi,
 | 
				
			||||||
	if (mdesc->reserve)
 | 
						if (mdesc->reserve)
 | 
				
			||||||
		mdesc->reserve();
 | 
							mdesc->reserve();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	early_init_dt_scan_reserved_mem();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
	 * reserve memory for DMA contigouos allocations,
 | 
						 * reserve memory for DMA contigouos allocations,
 | 
				
			||||||
	 * must come from DMA area inside low memory
 | 
						 * must come from DMA area inside low memory
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,13 +6,6 @@ config FRAME_POINTER
 | 
				
			||||||
	bool
 | 
						bool
 | 
				
			||||||
	default y
 | 
						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
 | 
					config EARLY_PRINTK
 | 
				
			||||||
	bool "Early printk support"
 | 
						bool "Early printk support"
 | 
				
			||||||
	default y
 | 
						default y
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -42,7 +42,7 @@ CONFIG_IP_PNP_BOOTP=y
 | 
				
			||||||
# CONFIG_WIRELESS is not set
 | 
					# CONFIG_WIRELESS is not set
 | 
				
			||||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 | 
					CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 | 
				
			||||||
CONFIG_DEVTMPFS=y
 | 
					CONFIG_DEVTMPFS=y
 | 
				
			||||||
# CONFIG_BLK_DEV is not set
 | 
					CONFIG_BLK_DEV=y
 | 
				
			||||||
CONFIG_SCSI=y
 | 
					CONFIG_SCSI=y
 | 
				
			||||||
# CONFIG_SCSI_PROC_FS is not set
 | 
					# CONFIG_SCSI_PROC_FS is not set
 | 
				
			||||||
CONFIG_BLK_DEV_SD=y
 | 
					CONFIG_BLK_DEV_SD=y
 | 
				
			||||||
| 
						 | 
					@ -72,6 +72,7 @@ CONFIG_LOGO=y
 | 
				
			||||||
# CONFIG_IOMMU_SUPPORT is not set
 | 
					# CONFIG_IOMMU_SUPPORT is not set
 | 
				
			||||||
CONFIG_EXT2_FS=y
 | 
					CONFIG_EXT2_FS=y
 | 
				
			||||||
CONFIG_EXT3_FS=y
 | 
					CONFIG_EXT3_FS=y
 | 
				
			||||||
 | 
					CONFIG_EXT4_FS=y
 | 
				
			||||||
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
 | 
					# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
 | 
				
			||||||
# CONFIG_EXT3_FS_XATTR is not set
 | 
					# CONFIG_EXT3_FS_XATTR is not set
 | 
				
			||||||
CONFIG_FUSE_FS=y
 | 
					CONFIG_FUSE_FS=y
 | 
				
			||||||
| 
						 | 
					@ -90,3 +91,5 @@ CONFIG_DEBUG_KERNEL=y
 | 
				
			||||||
CONFIG_DEBUG_INFO=y
 | 
					CONFIG_DEBUG_INFO=y
 | 
				
			||||||
# CONFIG_FTRACE is not set
 | 
					# CONFIG_FTRACE is not set
 | 
				
			||||||
CONFIG_ATOMIC64_SELFTEST=y
 | 
					CONFIG_ATOMIC64_SELFTEST=y
 | 
				
			||||||
 | 
					CONFIG_VIRTIO_MMIO=y
 | 
				
			||||||
 | 
					CONFIG_VIRTIO_BLK=y
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -166,9 +166,10 @@ do {									\
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define get_user(x, ptr)						\
 | 
					#define get_user(x, ptr)						\
 | 
				
			||||||
({									\
 | 
					({									\
 | 
				
			||||||
 | 
						__typeof__(*(ptr)) __user *__p = (ptr);				\
 | 
				
			||||||
	might_fault();							\
 | 
						might_fault();							\
 | 
				
			||||||
	access_ok(VERIFY_READ, (ptr), sizeof(*(ptr))) ?			\
 | 
						access_ok(VERIFY_READ, __p, sizeof(*__p)) ?			\
 | 
				
			||||||
		__get_user((x), (ptr)) :				\
 | 
							__get_user((x), __p) :					\
 | 
				
			||||||
		((x) = 0, -EFAULT);					\
 | 
							((x) = 0, -EFAULT);					\
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -227,9 +228,10 @@ do {									\
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define put_user(x, ptr)						\
 | 
					#define put_user(x, ptr)						\
 | 
				
			||||||
({									\
 | 
					({									\
 | 
				
			||||||
 | 
						__typeof__(*(ptr)) __user *__p = (ptr);				\
 | 
				
			||||||
	might_fault();							\
 | 
						might_fault();							\
 | 
				
			||||||
	access_ok(VERIFY_WRITE, (ptr), sizeof(*(ptr))) ?		\
 | 
						access_ok(VERIFY_WRITE, __p, sizeof(*__p)) ?			\
 | 
				
			||||||
		__put_user((x), (ptr)) :				\
 | 
							__put_user((x), __p) :					\
 | 
				
			||||||
		-EFAULT;						\
 | 
							-EFAULT;						\
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -80,8 +80,10 @@ void fpsimd_thread_switch(struct task_struct *next)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void fpsimd_flush_thread(void)
 | 
					void fpsimd_flush_thread(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						preempt_disable();
 | 
				
			||||||
	memset(¤t->thread.fpsimd_state, 0, sizeof(struct fpsimd_state));
 | 
						memset(¤t->thread.fpsimd_state, 0, sizeof(struct fpsimd_state));
 | 
				
			||||||
	fpsimd_load_state(¤t->thread.fpsimd_state);
 | 
						fpsimd_load_state(¤t->thread.fpsimd_state);
 | 
				
			||||||
 | 
						preempt_enable();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_KERNEL_MODE_NEON
 | 
					#ifdef CONFIG_KERNEL_MODE_NEON
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -35,7 +35,7 @@
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
ENTRY(__cpu_flush_user_tlb_range)
 | 
					ENTRY(__cpu_flush_user_tlb_range)
 | 
				
			||||||
	vma_vm_mm x3, x2			// get vma->vm_mm
 | 
						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
 | 
						dsb	sy
 | 
				
			||||||
	lsr	x0, x0, #12			// align address
 | 
						lsr	x0, x0, #12			// align address
 | 
				
			||||||
	lsr	x1, x1, #12
 | 
						lsr	x1, x1, #12
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -276,7 +276,7 @@ static struct platform_device mtx1_pci_host = {
 | 
				
			||||||
	.resource	= alchemy_pci_host_res,
 | 
						.resource	= alchemy_pci_host_res,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct __initdata platform_device * mtx1_devs[] = {
 | 
					static struct platform_device *mtx1_devs[] __initdata = {
 | 
				
			||||||
	&mtx1_pci_host,
 | 
						&mtx1_pci_host,
 | 
				
			||||||
	&mtx1_gpio_leds,
 | 
						&mtx1_gpio_leds,
 | 
				
			||||||
	&mtx1_wdt,
 | 
						&mtx1_wdt,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -22,7 +22,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static __always_inline bool arch_static_branch(struct static_key *key)
 | 
					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"
 | 
							"nop\n\t"
 | 
				
			||||||
		".pushsection __jump_table,  \"aw\"\n\t"
 | 
							".pushsection __jump_table,  \"aw\"\n\t"
 | 
				
			||||||
		WORD_INSN " 1b, %l[l_yes], %0\n\t"
 | 
							WORD_INSN " 1b, %l[l_yes], %0\n\t"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -73,7 +73,7 @@
 | 
				
			||||||
3:
 | 
					3:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(CONFIG_CC_STACKPROTECTOR) && !defined(CONFIG_SMP)
 | 
					#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_L	t9, TASK_STACK_CANARY(a1)
 | 
				
			||||||
	LONG_S	t9, 0(t8)
 | 
						LONG_S	t9, 0(t8)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -67,7 +67,7 @@ LEAF(resume)
 | 
				
			||||||
1:
 | 
					1:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(CONFIG_CC_STACKPROTECTOR) && !defined(CONFIG_SMP)
 | 
					#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_L	t9, TASK_STACK_CANARY(a1)
 | 
				
			||||||
	LONG_S	t9, 0(t8)
 | 
						LONG_S	t9, 0(t8)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -69,7 +69,7 @@
 | 
				
			||||||
1:
 | 
					1:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(CONFIG_CC_STACKPROTECTOR) && !defined(CONFIG_SMP)
 | 
					#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_L	t9, TASK_STACK_CANARY(a1)
 | 
				
			||||||
	LONG_S	t9, 0(t8)
 | 
						LONG_S	t9, 0(t8)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -609,6 +609,7 @@ static void r4k_dma_cache_wback_inv(unsigned long addr, unsigned long size)
 | 
				
			||||||
			r4k_blast_scache();
 | 
								r4k_blast_scache();
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
			blast_scache_range(addr, addr + size);
 | 
								blast_scache_range(addr, addr + size);
 | 
				
			||||||
 | 
							preempt_enable();
 | 
				
			||||||
		__sync();
 | 
							__sync();
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -650,6 +651,7 @@ static void r4k_dma_cache_inv(unsigned long addr, unsigned long size)
 | 
				
			||||||
			 */
 | 
								 */
 | 
				
			||||||
			blast_inv_scache_range(addr, addr + size);
 | 
								blast_inv_scache_range(addr, addr + size);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							preempt_enable();
 | 
				
			||||||
		__sync();
 | 
							__sync();
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -40,6 +40,8 @@ CONFIG_IP_NF_QUEUE=m
 | 
				
			||||||
CONFIG_LLC2=m
 | 
					CONFIG_LLC2=m
 | 
				
			||||||
CONFIG_NET_PKTGEN=m
 | 
					CONFIG_NET_PKTGEN=m
 | 
				
			||||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 | 
					CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 | 
				
			||||||
 | 
					CONFIG_DEVTMPFS=y
 | 
				
			||||||
 | 
					CONFIG_DEVTMPFS_MOUNT=y
 | 
				
			||||||
# CONFIG_STANDALONE is not set
 | 
					# CONFIG_STANDALONE is not set
 | 
				
			||||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
 | 
					# CONFIG_PREVENT_FIRMWARE_BUILD is not set
 | 
				
			||||||
CONFIG_PARPORT=y
 | 
					CONFIG_PARPORT=y
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -79,6 +79,8 @@ CONFIG_IP_DCCP=m
 | 
				
			||||||
CONFIG_LLC2=m
 | 
					CONFIG_LLC2=m
 | 
				
			||||||
CONFIG_NET_PKTGEN=m
 | 
					CONFIG_NET_PKTGEN=m
 | 
				
			||||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 | 
					CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 | 
				
			||||||
 | 
					CONFIG_DEVTMPFS=y
 | 
				
			||||||
 | 
					CONFIG_DEVTMPFS_MOUNT=y
 | 
				
			||||||
# CONFIG_STANDALONE is not set
 | 
					# CONFIG_STANDALONE is not set
 | 
				
			||||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
 | 
					# CONFIG_PREVENT_FIRMWARE_BUILD is not set
 | 
				
			||||||
CONFIG_BLK_DEV_UMEM=m
 | 
					CONFIG_BLK_DEV_UMEM=m
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,6 +4,7 @@ CONFIG_IKCONFIG=y
 | 
				
			||||||
CONFIG_IKCONFIG_PROC=y
 | 
					CONFIG_IKCONFIG_PROC=y
 | 
				
			||||||
CONFIG_LOG_BUF_SHIFT=16
 | 
					CONFIG_LOG_BUF_SHIFT=16
 | 
				
			||||||
CONFIG_SYSFS_DEPRECATED_V2=y
 | 
					CONFIG_SYSFS_DEPRECATED_V2=y
 | 
				
			||||||
 | 
					CONFIG_BLK_DEV_INITRD=y
 | 
				
			||||||
CONFIG_SLAB=y
 | 
					CONFIG_SLAB=y
 | 
				
			||||||
CONFIG_MODULES=y
 | 
					CONFIG_MODULES=y
 | 
				
			||||||
CONFIG_MODVERSIONS=y
 | 
					CONFIG_MODVERSIONS=y
 | 
				
			||||||
| 
						 | 
					@ -27,6 +28,8 @@ CONFIG_IP_PNP_BOOTP=y
 | 
				
			||||||
# CONFIG_INET_LRO is not set
 | 
					# CONFIG_INET_LRO is not set
 | 
				
			||||||
CONFIG_IPV6=y
 | 
					CONFIG_IPV6=y
 | 
				
			||||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 | 
					CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 | 
				
			||||||
 | 
					CONFIG_DEVTMPFS=y
 | 
				
			||||||
 | 
					CONFIG_DEVTMPFS_MOUNT=y
 | 
				
			||||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
 | 
					# CONFIG_PREVENT_FIRMWARE_BUILD is not set
 | 
				
			||||||
CONFIG_PARPORT=y
 | 
					CONFIG_PARPORT=y
 | 
				
			||||||
CONFIG_PARPORT_PC=y
 | 
					CONFIG_PARPORT_PC=y
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,6 +5,7 @@ CONFIG_IKCONFIG=y
 | 
				
			||||||
CONFIG_IKCONFIG_PROC=y
 | 
					CONFIG_IKCONFIG_PROC=y
 | 
				
			||||||
CONFIG_LOG_BUF_SHIFT=16
 | 
					CONFIG_LOG_BUF_SHIFT=16
 | 
				
			||||||
CONFIG_SYSFS_DEPRECATED_V2=y
 | 
					CONFIG_SYSFS_DEPRECATED_V2=y
 | 
				
			||||||
 | 
					CONFIG_BLK_DEV_INITRD=y
 | 
				
			||||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 | 
					# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 | 
				
			||||||
CONFIG_EXPERT=y
 | 
					CONFIG_EXPERT=y
 | 
				
			||||||
CONFIG_KALLSYMS_ALL=y
 | 
					CONFIG_KALLSYMS_ALL=y
 | 
				
			||||||
| 
						 | 
					@ -39,6 +40,8 @@ CONFIG_NETFILTER_DEBUG=y
 | 
				
			||||||
CONFIG_IP_NF_QUEUE=m
 | 
					CONFIG_IP_NF_QUEUE=m
 | 
				
			||||||
CONFIG_NET_PKTGEN=m
 | 
					CONFIG_NET_PKTGEN=m
 | 
				
			||||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 | 
					CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 | 
				
			||||||
 | 
					CONFIG_DEVTMPFS=y
 | 
				
			||||||
 | 
					CONFIG_DEVTMPFS_MOUNT=y
 | 
				
			||||||
# CONFIG_STANDALONE is not set
 | 
					# CONFIG_STANDALONE is not set
 | 
				
			||||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
 | 
					# CONFIG_PREVENT_FIRMWARE_BUILD is not set
 | 
				
			||||||
CONFIG_BLK_DEV_UMEM=m
 | 
					CONFIG_BLK_DEV_UMEM=m
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -62,6 +62,8 @@ CONFIG_TIPC=m
 | 
				
			||||||
CONFIG_LLC2=m
 | 
					CONFIG_LLC2=m
 | 
				
			||||||
CONFIG_DNS_RESOLVER=y
 | 
					CONFIG_DNS_RESOLVER=y
 | 
				
			||||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 | 
					CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 | 
				
			||||||
 | 
					CONFIG_DEVTMPFS=y
 | 
				
			||||||
 | 
					CONFIG_DEVTMPFS_MOUNT=y
 | 
				
			||||||
# CONFIG_STANDALONE is not set
 | 
					# CONFIG_STANDALONE is not set
 | 
				
			||||||
CONFIG_PARPORT=y
 | 
					CONFIG_PARPORT=y
 | 
				
			||||||
CONFIG_PARPORT_PC=y
 | 
					CONFIG_PARPORT_PC=y
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -49,6 +49,8 @@ CONFIG_INET6_ESP=y
 | 
				
			||||||
CONFIG_INET6_IPCOMP=y
 | 
					CONFIG_INET6_IPCOMP=y
 | 
				
			||||||
CONFIG_LLC2=m
 | 
					CONFIG_LLC2=m
 | 
				
			||||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 | 
					CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 | 
				
			||||||
 | 
					CONFIG_DEVTMPFS=y
 | 
				
			||||||
 | 
					CONFIG_DEVTMPFS_MOUNT=y
 | 
				
			||||||
# CONFIG_STANDALONE is not set
 | 
					# CONFIG_STANDALONE is not set
 | 
				
			||||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
 | 
					# CONFIG_PREVENT_FIRMWARE_BUILD is not set
 | 
				
			||||||
CONFIG_PARPORT=y
 | 
					CONFIG_PARPORT=y
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,7 +6,7 @@ struct pt_regs;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* traps.c */
 | 
					/* traps.c */
 | 
				
			||||||
void parisc_terminate(char *msg, struct pt_regs *regs,
 | 
					void parisc_terminate(char *msg, struct pt_regs *regs,
 | 
				
			||||||
		int code, unsigned long offset);
 | 
							int code, unsigned long offset) __noreturn __cold;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* mm/fault.c */
 | 
					/* mm/fault.c */
 | 
				
			||||||
void do_page_fault(struct pt_regs *regs, unsigned long code,
 | 
					void do_page_fault(struct pt_regs *regs, unsigned long code,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -72,7 +72,6 @@ enum ipi_message_type {
 | 
				
			||||||
	IPI_NOP=0,
 | 
						IPI_NOP=0,
 | 
				
			||||||
	IPI_RESCHEDULE=1,
 | 
						IPI_RESCHEDULE=1,
 | 
				
			||||||
	IPI_CALL_FUNC,
 | 
						IPI_CALL_FUNC,
 | 
				
			||||||
	IPI_CALL_FUNC_SINGLE,
 | 
					 | 
				
			||||||
	IPI_CPU_START,
 | 
						IPI_CPU_START,
 | 
				
			||||||
	IPI_CPU_STOP,
 | 
						IPI_CPU_STOP,
 | 
				
			||||||
	IPI_CPU_TEST
 | 
						IPI_CPU_TEST
 | 
				
			||||||
| 
						 | 
					@ -164,11 +163,6 @@ ipi_interrupt(int irq, void *dev_id)
 | 
				
			||||||
				generic_smp_call_function_interrupt();
 | 
									generic_smp_call_function_interrupt();
 | 
				
			||||||
				break;
 | 
									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:
 | 
								case IPI_CPU_START:
 | 
				
			||||||
				smp_debug(100, KERN_DEBUG "CPU%d IPI_CPU_START\n", this_cpu);
 | 
									smp_debug(100, KERN_DEBUG "CPU%d IPI_CPU_START\n", this_cpu);
 | 
				
			||||||
				break;
 | 
									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)
 | 
					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);
 | 
						do_exit(SIGSEGV);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int syscall_ipi(int (*syscall) (struct pt_regs *), struct pt_regs *regs)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	return syscall(regs);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* gdb uses break 4,8 */
 | 
					/* gdb uses break 4,8 */
 | 
				
			||||||
#define GDB_BREAK_INSN 0x10004
 | 
					#define GDB_BREAK_INSN 0x10004
 | 
				
			||||||
static void handle_gdb_break(struct pt_regs *regs, int wot)
 | 
					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 {
 | 
						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);
 | 
							pdc_chassis_send_status(PDC_CHASSIS_DIRECT_PANIC);
 | 
				
			||||||
		parisc_terminate("Kernel Fault", regs, code, fault_address);
 | 
							parisc_terminate("Kernel Fault", regs, code, fault_address);
 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	    }
 | 
						    }
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -56,7 +56,7 @@
 | 
				
			||||||
#ifdef __KERNEL__
 | 
					#ifdef __KERNEL__
 | 
				
			||||||
#include <linux/module.h>
 | 
					#include <linux/module.h>
 | 
				
			||||||
#include <linux/compiler.h>
 | 
					#include <linux/compiler.h>
 | 
				
			||||||
#include <asm/uaccess.h>
 | 
					#include <linux/uaccess.h>
 | 
				
			||||||
#define s_space "%%sr1"
 | 
					#define s_space "%%sr1"
 | 
				
			||||||
#define d_space "%%sr2"
 | 
					#define d_space "%%sr2"
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
| 
						 | 
					@ -524,4 +524,17 @@ EXPORT_SYMBOL(copy_to_user);
 | 
				
			||||||
EXPORT_SYMBOL(copy_from_user);
 | 
					EXPORT_SYMBOL(copy_from_user);
 | 
				
			||||||
EXPORT_SYMBOL(copy_in_user);
 | 
					EXPORT_SYMBOL(copy_in_user);
 | 
				
			||||||
EXPORT_SYMBOL(memcpy);
 | 
					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
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -171,20 +171,25 @@ void do_page_fault(struct pt_regs *regs, unsigned long code,
 | 
				
			||||||
			      unsigned long address)
 | 
								      unsigned long address)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct vm_area_struct *vma, *prev_vma;
 | 
						struct vm_area_struct *vma, *prev_vma;
 | 
				
			||||||
	struct task_struct *tsk = current;
 | 
						struct task_struct *tsk;
 | 
				
			||||||
	struct mm_struct *mm = tsk->mm;
 | 
						struct mm_struct *mm;
 | 
				
			||||||
	unsigned long acc_type;
 | 
						unsigned long acc_type;
 | 
				
			||||||
	int fault;
 | 
						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;
 | 
							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))
 | 
						if (user_mode(regs))
 | 
				
			||||||
		flags |= FAULT_FLAG_USER;
 | 
							flags |= FAULT_FLAG_USER;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	acc_type = parisc_acctyp(code, regs->iir);
 | 
						acc_type = parisc_acctyp(code, regs->iir);
 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (acc_type & VM_WRITE)
 | 
						if (acc_type & VM_WRITE)
 | 
				
			||||||
		flags |= FAULT_FLAG_WRITE;
 | 
							flags |= FAULT_FLAG_WRITE;
 | 
				
			||||||
retry:
 | 
					retry:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,7 +19,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static __always_inline bool arch_static_branch(struct static_key *key)
 | 
					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"
 | 
							 "nop\n\t"
 | 
				
			||||||
		 ".pushsection __jump_table,  \"aw\"\n\t"
 | 
							 ".pushsection __jump_table,  \"aw\"\n\t"
 | 
				
			||||||
		 JUMP_ENTRY_TYPE "1b, %l[l_yes], %c0\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 */
 | 
						/* number of bytes needed for the bitmap */
 | 
				
			||||||
	sz = BITS_TO_LONGS(tbl->it_size) * sizeof(unsigned long);
 | 
						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)
 | 
						if (!page)
 | 
				
			||||||
		panic("iommu_init_table: Can't allocate %ld bytes\n", sz);
 | 
							panic("iommu_init_table: Can't allocate %ld bytes\n", sz);
 | 
				
			||||||
	tbl->it_map = page_address(page);
 | 
						tbl->it_map = page_address(page);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -495,14 +495,15 @@ void __do_irq(struct pt_regs *regs)
 | 
				
			||||||
void do_IRQ(struct pt_regs *regs)
 | 
					void do_IRQ(struct pt_regs *regs)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct pt_regs *old_regs = set_irq_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 */
 | 
						/* Switch to the irq stack to handle this */
 | 
				
			||||||
	curtp = current_thread_info();
 | 
						curtp = current_thread_info();
 | 
				
			||||||
	irqtp = hardirq_ctx[raw_smp_processor_id()];
 | 
						irqtp = hardirq_ctx[raw_smp_processor_id()];
 | 
				
			||||||
 | 
						sirqtp = softirq_ctx[raw_smp_processor_id()];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Already there ? */
 | 
						/* Already there ? */
 | 
				
			||||||
	if (unlikely(curtp == irqtp)) {
 | 
						if (unlikely(curtp == irqtp || curtp == sirqtp)) {
 | 
				
			||||||
		__do_irq(regs);
 | 
							__do_irq(regs);
 | 
				
			||||||
		set_irq_regs(old_regs);
 | 
							set_irq_regs(old_regs);
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,6 +17,7 @@
 | 
				
			||||||
#include <asm/machdep.h>
 | 
					#include <asm/machdep.h>
 | 
				
			||||||
#include <asm/smp.h>
 | 
					#include <asm/smp.h>
 | 
				
			||||||
#include <asm/pmc.h>
 | 
					#include <asm/pmc.h>
 | 
				
			||||||
 | 
					#include <asm/firmware.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "cacheinfo.h"
 | 
					#include "cacheinfo.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -179,15 +180,25 @@ SYSFS_PMCSETUP(spurr, SPRN_SPURR);
 | 
				
			||||||
SYSFS_PMCSETUP(dscr, SPRN_DSCR);
 | 
					SYSFS_PMCSETUP(dscr, SPRN_DSCR);
 | 
				
			||||||
SYSFS_PMCSETUP(pir, SPRN_PIR);
 | 
					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(mmcra, 0600, show_mmcra, store_mmcra);
 | 
				
			||||||
static DEVICE_ATTR(spurr, 0400, show_spurr, NULL);
 | 
					static DEVICE_ATTR(spurr, 0400, show_spurr, NULL);
 | 
				
			||||||
static DEVICE_ATTR(dscr, 0600, show_dscr, store_dscr);
 | 
					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);
 | 
					static DEVICE_ATTR(pir, 0400, show_pir, NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
unsigned long dscr_default = 0;
 | 
					unsigned long dscr_default = 0;
 | 
				
			||||||
EXPORT_SYMBOL(dscr_default);
 | 
					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,
 | 
					static ssize_t show_dscr_default(struct device *dev,
 | 
				
			||||||
		struct device_attribute *attr, char *buf)
 | 
							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))
 | 
						if (cpu_has_feature(CPU_FTR_MMCRA))
 | 
				
			||||||
		device_create_file(s, &dev_attr_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);
 | 
							device_create_file(s, &dev_attr_purr);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (cpu_has_feature(CPU_FTR_SPURR))
 | 
						if (cpu_has_feature(CPU_FTR_SPURR))
 | 
				
			||||||
		device_create_file(s, &dev_attr_spurr);
 | 
							device_create_file(s, &dev_attr_spurr);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -79,6 +79,11 @@ _GLOBAL(tm_abort)
 | 
				
			||||||
	TABORT(R3)
 | 
						TABORT(R3)
 | 
				
			||||||
	blr
 | 
						blr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.section	".toc","aw"
 | 
				
			||||||
 | 
					DSCR_DEFAULT:
 | 
				
			||||||
 | 
						.tc dscr_default[TC],dscr_default
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.section	".text"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* void tm_reclaim(struct thread_struct *thread,
 | 
					/* void tm_reclaim(struct thread_struct *thread,
 | 
				
			||||||
 *                 unsigned long orig_msr,
 | 
					 *                 unsigned long orig_msr,
 | 
				
			||||||
| 
						 | 
					@ -123,6 +128,7 @@ _GLOBAL(tm_reclaim)
 | 
				
			||||||
	mr	r15, r14
 | 
						mr	r15, r14
 | 
				
			||||||
	ori	r15, r15, MSR_FP
 | 
						ori	r15, r15, MSR_FP
 | 
				
			||||||
	li	r16, MSR_RI
 | 
						li	r16, MSR_RI
 | 
				
			||||||
 | 
						ori	r16, r16, MSR_EE /* IRQs hard off */
 | 
				
			||||||
	andc	r15, r15, r16
 | 
						andc	r15, r15, r16
 | 
				
			||||||
	oris	r15, r15, MSR_VEC@h
 | 
						oris	r15, r15, MSR_VEC@h
 | 
				
			||||||
#ifdef CONFIG_VSX
 | 
					#ifdef CONFIG_VSX
 | 
				
			||||||
| 
						 | 
					@ -187,11 +193,18 @@ dont_backup_fp:
 | 
				
			||||||
	std	r1, PACATMSCRATCH(r13)
 | 
						std	r1, PACATMSCRATCH(r13)
 | 
				
			||||||
	ld	r1, PACAR1(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 */
 | 
						/* Now get some more GPRS free */
 | 
				
			||||||
	std	r7, GPR7(r1)			/* Temporary stash */
 | 
						std	r7, GPR7(r1)			/* Temporary stash */
 | 
				
			||||||
	std	r12, GPR12(r1)			/* ''   ''    ''   */
 | 
						std	r12, GPR12(r1)			/* ''   ''    ''   */
 | 
				
			||||||
	ld	r12, STACK_PARAM(0)(r1)		/* Param 0, thread_struct * */
 | 
						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 */
 | 
						addi	r7, r12, PT_CKPT_REGS		/* Thread's ckpt_regs */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Make r7 look like an exception frame so that we
 | 
						/* 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(0, r7)				/* user r0 */
 | 
				
			||||||
	SAVE_GPR(2, r7)			/* user r2 */
 | 
						SAVE_GPR(2, r7)			/* user r2 */
 | 
				
			||||||
	SAVE_4GPRS(3, r7)			/* user r3-r6 */
 | 
						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	r3, PACATMSCRATCH(r13)		/* user r1 */
 | 
				
			||||||
	ld	r4, GPR7(r1)			/* user r7 */
 | 
						ld	r4, GPR7(r1)			/* user r7 */
 | 
				
			||||||
	ld	r5, GPR12(r1)			/* user r12 */
 | 
						ld	r5, GPR11(r1)			/* user r11 */
 | 
				
			||||||
	GET_SCRATCH0(6)				/* user r13 */
 | 
						ld	r6, GPR12(r1)			/* user r12 */
 | 
				
			||||||
 | 
						GET_SCRATCH0(8)				/* user r13 */
 | 
				
			||||||
	std	r3, GPR1(r7)
 | 
						std	r3, GPR1(r7)
 | 
				
			||||||
	std	r4, GPR7(r7)
 | 
						std	r4, GPR7(r7)
 | 
				
			||||||
	std	r5, GPR12(r7)
 | 
						std	r5, GPR11(r7)
 | 
				
			||||||
	std	r6, GPR13(r7)
 | 
						std	r6, GPR12(r7)
 | 
				
			||||||
 | 
						std	r8, GPR13(r7)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SAVE_NVGPRS(r7)				/* user r14-r31 */
 | 
						SAVE_NVGPRS(r7)				/* user r14-r31 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -234,14 +251,12 @@ dont_backup_fp:
 | 
				
			||||||
	std	r6, _XER(r7)
 | 
						std	r6, _XER(r7)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* ******************** TAR, PPR, DSCR ********** */
 | 
						/* ******************** TAR, DSCR ********** */
 | 
				
			||||||
	mfspr	r3, SPRN_TAR
 | 
						mfspr	r3, SPRN_TAR
 | 
				
			||||||
	mfspr	r4, SPRN_PPR
 | 
						mfspr	r4, SPRN_DSCR
 | 
				
			||||||
	mfspr	r5, SPRN_DSCR
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	std	r3, THREAD_TM_TAR(r12)
 | 
						std	r3, THREAD_TM_TAR(r12)
 | 
				
			||||||
	std	r4, THREAD_TM_PPR(r12)
 | 
						std	r4, THREAD_TM_DSCR(r12)
 | 
				
			||||||
	std	r5, THREAD_TM_DSCR(r12)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* MSR and flags:  We don't change CRs, and we don't need to alter
 | 
						/* MSR and flags:  We don't change CRs, and we don't need to alter
 | 
				
			||||||
	 * MSR.
 | 
						 * MSR.
 | 
				
			||||||
| 
						 | 
					@ -258,7 +273,7 @@ dont_backup_fp:
 | 
				
			||||||
	std	r3, THREAD_TM_TFHAR(r12)
 | 
						std	r3, THREAD_TM_TFHAR(r12)
 | 
				
			||||||
	std	r4, THREAD_TM_TFIAR(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 */
 | 
						/* Restore original MSR/IRQ state & clear TM mode */
 | 
				
			||||||
	ld	r14, TM_FRAME_L0(r1)		/* Orig MSR */
 | 
						ld	r14, TM_FRAME_L0(r1)		/* Orig MSR */
 | 
				
			||||||
| 
						 | 
					@ -274,6 +289,12 @@ dont_backup_fp:
 | 
				
			||||||
	mtcr	r4
 | 
						mtcr	r4
 | 
				
			||||||
	mtlr	r0
 | 
						mtlr	r0
 | 
				
			||||||
	ld	r2, 40(r1)
 | 
						ld	r2, 40(r1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Load system default DSCR */
 | 
				
			||||||
 | 
						ld	r4, DSCR_DEFAULT@toc(r2)
 | 
				
			||||||
 | 
						ld	r0, 0(r4)
 | 
				
			||||||
 | 
						mtspr	SPRN_DSCR, r0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	blr
 | 
						blr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -358,25 +379,24 @@ dont_restore_fp:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
restore_gprs:
 | 
					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 ********** */
 | 
						/* ******************** CR,LR,CCR,MSR ********** */
 | 
				
			||||||
	ld	r3, _CTR(r7)
 | 
						ld	r4, _CTR(r7)
 | 
				
			||||||
	ld	r4, _LINK(r7)
 | 
						ld	r5, _LINK(r7)
 | 
				
			||||||
	ld	r5, _CCR(r7)
 | 
						ld	r6, _CCR(r7)
 | 
				
			||||||
	ld	r6, _XER(r7)
 | 
						ld	r8, _XER(r7)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	mtctr	r3
 | 
						mtctr	r4
 | 
				
			||||||
	mtlr	r4
 | 
						mtlr	r5
 | 
				
			||||||
	mtcr	r5
 | 
						mtcr	r6
 | 
				
			||||||
	mtxer	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
 | 
						/* Clear the MSR RI since we are about to change R1.  EE is already off
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
| 
						 | 
					@ -384,19 +404,26 @@ restore_gprs:
 | 
				
			||||||
	mtmsrd	r4, 1
 | 
						mtmsrd	r4, 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	REST_4GPRS(0, r7)			/* GPR0-3 */
 | 
						REST_4GPRS(0, r7)			/* GPR0-3 */
 | 
				
			||||||
	REST_GPR(4, r7)				/* GPR4-6 */
 | 
						REST_GPR(4, r7)				/* GPR4 */
 | 
				
			||||||
	REST_GPR(5, r7)
 | 
					 | 
				
			||||||
	REST_GPR(6, r7)
 | 
					 | 
				
			||||||
	REST_4GPRS(8, r7)			/* GPR8-11 */
 | 
						REST_4GPRS(8, r7)			/* GPR8-11 */
 | 
				
			||||||
	REST_2GPRS(12, r7)			/* GPR12-13 */
 | 
						REST_2GPRS(12, r7)			/* GPR12-13 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	REST_NVGPRS(r7)				/* GPR14-31 */
 | 
						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: */
 | 
						/* Commit register state as checkpointed state: */
 | 
				
			||||||
	TRECHKPT
 | 
						TRECHKPT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						HMT_MEDIUM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Our transactional state has now changed.
 | 
						/* Our transactional state has now changed.
 | 
				
			||||||
	 *
 | 
						 *
 | 
				
			||||||
	 * Now just get out of here.  Transactional (current) state will be
 | 
						 * Now just get out of here.  Transactional (current) state will be
 | 
				
			||||||
| 
						 | 
					@ -419,6 +446,12 @@ restore_gprs:
 | 
				
			||||||
	mtcr	r4
 | 
						mtcr	r4
 | 
				
			||||||
	mtlr	r0
 | 
						mtlr	r0
 | 
				
			||||||
	ld	r2, 40(r1)
 | 
						ld	r2, 40(r1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Load system default DSCR */
 | 
				
			||||||
 | 
						ld	r4, DSCR_DEFAULT@toc(r2)
 | 
				
			||||||
 | 
						ld	r0, 0(r4)
 | 
				
			||||||
 | 
						mtspr	SPRN_DSCR, r0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	blr
 | 
						blr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* ****************************************************************** */
 | 
						/* ****************************************************************** */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1530,11 +1530,15 @@ static ssize_t modalias_show(struct device *dev, struct device_attribute *attr,
 | 
				
			||||||
	const char *cp;
 | 
						const char *cp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	dn = dev->of_node;
 | 
						dn = dev->of_node;
 | 
				
			||||||
	if (!dn)
 | 
						if (!dn) {
 | 
				
			||||||
		return -ENODEV;
 | 
							strcat(buf, "\n");
 | 
				
			||||||
 | 
							return strlen(buf);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	cp = of_get_property(dn, "compatible", NULL);
 | 
						cp = of_get_property(dn, "compatible", NULL);
 | 
				
			||||||
	if (!cp)
 | 
						if (!cp) {
 | 
				
			||||||
		return -ENODEV;
 | 
							strcat(buf, "\n");
 | 
				
			||||||
 | 
							return strlen(buf);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return sprintf(buf, "vio:T%sS%s\n", vio_dev->type, cp);
 | 
						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
 | 
					BEGIN_FTR_SECTION
 | 
				
			||||||
	mfspr	r8, SPRN_DSCR
 | 
						mfspr	r8, SPRN_DSCR
 | 
				
			||||||
	ld	r7, HSTATE_DSCR(r13)
 | 
						ld	r7, HSTATE_DSCR(r13)
 | 
				
			||||||
	std	r8, VCPU_DSCR(r7)
 | 
						std	r8, VCPU_DSCR(r9)
 | 
				
			||||||
	mtspr	SPRN_DSCR, r7
 | 
						mtspr	SPRN_DSCR, r7
 | 
				
			||||||
END_FTR_SECTION_IFSET(CPU_FTR_ARCH_206)
 | 
					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;
 | 
						unsigned long hva;
 | 
				
			||||||
	int pfnmap = 0;
 | 
						int pfnmap = 0;
 | 
				
			||||||
	int tsize = BOOK3E_PAGESZ_4K;
 | 
						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
 | 
						 * 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);
 | 
							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_ref_setup(ref, gtlbe, pfn);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kvmppc_e500_setup_stlbe(&vcpu_e500->vcpu, gtlbe, tsize,
 | 
						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 */
 | 
						/* Clear i-cache for new pages */
 | 
				
			||||||
	kvmppc_mmu_flush_icache(pfn);
 | 
						kvmppc_mmu_flush_icache(pfn);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					out:
 | 
				
			||||||
 | 
						spin_unlock(&kvm->mmu_lock);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Drop refcount on page, so that mmu notifiers can clear it */
 | 
						/* Drop refcount on page, so that mmu notifiers can clear it */
 | 
				
			||||||
	kvm_release_pfn_clean(pfn);
 | 
						kvm_release_pfn_clean(pfn);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* XXX only map the one-one case, for now use TLB0 */
 | 
					/* XXX only map the one-one case, for now use TLB0 */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -226,19 +226,35 @@ _GLOBAL(csum_partial)
 | 
				
			||||||
	blr
 | 
						blr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	.macro source
 | 
						.macro srcnr
 | 
				
			||||||
100:
 | 
					100:
 | 
				
			||||||
	.section __ex_table,"a"
 | 
						.section __ex_table,"a"
 | 
				
			||||||
	.align 3
 | 
						.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
 | 
						.previous
 | 
				
			||||||
	.endm
 | 
						.endm
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	.macro dest
 | 
						.macro dest
 | 
				
			||||||
200:
 | 
					250:
 | 
				
			||||||
	.section __ex_table,"a"
 | 
						.section __ex_table,"a"
 | 
				
			||||||
	.align 3
 | 
						.align 3
 | 
				
			||||||
	.llong 200b,.Ldest_error
 | 
						.llong 250b,.Ldest_error
 | 
				
			||||||
	.previous
 | 
						.previous
 | 
				
			||||||
	.endm
 | 
						.endm
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -269,16 +285,16 @@ _GLOBAL(csum_partial_copy_generic)
 | 
				
			||||||
	rldicl. r6,r3,64-1,64-2		/* r6 = (r3 & 0x3) >> 1 */
 | 
						rldicl. r6,r3,64-1,64-2		/* r6 = (r3 & 0x3) >> 1 */
 | 
				
			||||||
	beq	.Lcopy_aligned
 | 
						beq	.Lcopy_aligned
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	li	r7,4
 | 
						li	r9,4
 | 
				
			||||||
	sub	r6,r7,r6
 | 
						sub	r6,r9,r6
 | 
				
			||||||
	mtctr	r6
 | 
						mtctr	r6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1:
 | 
					1:
 | 
				
			||||||
source;	lhz	r6,0(r3)		/* align to doubleword */
 | 
					srcnr;	lhz	r6,0(r3)		/* align to doubleword */
 | 
				
			||||||
	subi	r5,r5,2
 | 
						subi	r5,r5,2
 | 
				
			||||||
	addi	r3,r3,2
 | 
						addi	r3,r3,2
 | 
				
			||||||
	adde	r0,r0,r6
 | 
						adde	r0,r0,r6
 | 
				
			||||||
dest;	sth	r6,0(r4)
 | 
					dstnr;	sth	r6,0(r4)
 | 
				
			||||||
	addi	r4,r4,2
 | 
						addi	r4,r4,2
 | 
				
			||||||
	bdnz	1b
 | 
						bdnz	1b
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -392,10 +408,10 @@ dest;	std	r16,56(r4)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	mtctr	r6
 | 
						mtctr	r6
 | 
				
			||||||
3:
 | 
					3:
 | 
				
			||||||
source;	ld	r6,0(r3)
 | 
					srcnr;	ld	r6,0(r3)
 | 
				
			||||||
	addi	r3,r3,8
 | 
						addi	r3,r3,8
 | 
				
			||||||
	adde	r0,r0,r6
 | 
						adde	r0,r0,r6
 | 
				
			||||||
dest;	std	r6,0(r4)
 | 
					dstnr;	std	r6,0(r4)
 | 
				
			||||||
	addi	r4,r4,8
 | 
						addi	r4,r4,8
 | 
				
			||||||
	bdnz	3b
 | 
						bdnz	3b
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -405,10 +421,10 @@ dest;	std	r6,0(r4)
 | 
				
			||||||
	srdi.	r6,r5,2
 | 
						srdi.	r6,r5,2
 | 
				
			||||||
	beq	.Lcopy_tail_halfword
 | 
						beq	.Lcopy_tail_halfword
 | 
				
			||||||
 | 
					
 | 
				
			||||||
source;	lwz	r6,0(r3)
 | 
					srcnr;	lwz	r6,0(r3)
 | 
				
			||||||
	addi	r3,r3,4
 | 
						addi	r3,r3,4
 | 
				
			||||||
	adde	r0,r0,r6
 | 
						adde	r0,r0,r6
 | 
				
			||||||
dest;	stw	r6,0(r4)
 | 
					dstnr;	stw	r6,0(r4)
 | 
				
			||||||
	addi	r4,r4,4
 | 
						addi	r4,r4,4
 | 
				
			||||||
	subi	r5,r5,4
 | 
						subi	r5,r5,4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -416,10 +432,10 @@ dest;	stw	r6,0(r4)
 | 
				
			||||||
	srdi.	r6,r5,1
 | 
						srdi.	r6,r5,1
 | 
				
			||||||
	beq	.Lcopy_tail_byte
 | 
						beq	.Lcopy_tail_byte
 | 
				
			||||||
 | 
					
 | 
				
			||||||
source;	lhz	r6,0(r3)
 | 
					srcnr;	lhz	r6,0(r3)
 | 
				
			||||||
	addi	r3,r3,2
 | 
						addi	r3,r3,2
 | 
				
			||||||
	adde	r0,r0,r6
 | 
						adde	r0,r0,r6
 | 
				
			||||||
dest;	sth	r6,0(r4)
 | 
					dstnr;	sth	r6,0(r4)
 | 
				
			||||||
	addi	r4,r4,2
 | 
						addi	r4,r4,2
 | 
				
			||||||
	subi	r5,r5,2
 | 
						subi	r5,r5,2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -427,10 +443,10 @@ dest;	sth	r6,0(r4)
 | 
				
			||||||
	andi.	r6,r5,1
 | 
						andi.	r6,r5,1
 | 
				
			||||||
	beq	.Lcopy_finish
 | 
						beq	.Lcopy_finish
 | 
				
			||||||
 | 
					
 | 
				
			||||||
source;	lbz	r6,0(r3)
 | 
					srcnr;	lbz	r6,0(r3)
 | 
				
			||||||
	sldi	r9,r6,8			/* Pad the byte out to 16 bits */
 | 
						sldi	r9,r6,8			/* Pad the byte out to 16 bits */
 | 
				
			||||||
	adde	r0,r0,r9
 | 
						adde	r0,r0,r9
 | 
				
			||||||
dest;	stb	r6,0(r4)
 | 
					dstnr;	stb	r6,0(r4)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.Lcopy_finish:
 | 
					.Lcopy_finish:
 | 
				
			||||||
	addze	r0,r0			/* add in final carry */
 | 
						addze	r0,r0			/* add in final carry */
 | 
				
			||||||
| 
						 | 
					@ -440,6 +456,11 @@ dest;	stb	r6,0(r4)
 | 
				
			||||||
	blr
 | 
						blr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.Lsrc_error:
 | 
					.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
 | 
						cmpdi	0,r7,0
 | 
				
			||||||
	beqlr
 | 
						beqlr
 | 
				
			||||||
	li	r6,-EFAULT
 | 
						li	r6,-EFAULT
 | 
				
			||||||
| 
						 | 
					@ -447,6 +468,11 @@ dest;	stb	r6,0(r4)
 | 
				
			||||||
	blr
 | 
						blr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.Ldest_error:
 | 
					.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
 | 
						cmpdi	0,r8,0
 | 
				
			||||||
	beqlr
 | 
						beqlr
 | 
				
			||||||
	li	r6,-EFAULT
 | 
						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 */
 | 
					#endif /* CONFIG_SPARSEMEM_VMEMMAP */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -297,12 +297,21 @@ void __init paging_init(void)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif /* ! CONFIG_NEED_MULTIPLE_NODES */
 | 
					#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)
 | 
					void __init mem_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#ifdef CONFIG_SWIOTLB
 | 
					#ifdef CONFIG_SWIOTLB
 | 
				
			||||||
	swiotlb_init(0);
 | 
						swiotlb_init(0);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						register_page_bootmem_info();
 | 
				
			||||||
	high_memory = (void *) __va(max_low_pfn * PAGE_SIZE);
 | 
						high_memory = (void *) __va(max_low_pfn * PAGE_SIZE);
 | 
				
			||||||
	set_max_mapnr(max_pfn);
 | 
						set_max_mapnr(max_pfn);
 | 
				
			||||||
	free_all_bootmem();
 | 
						free_all_bootmem();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -199,6 +199,7 @@
 | 
				
			||||||
#define MMCR1_UNIT_SHIFT(pmc)		(60 - (4 * ((pmc) - 1)))
 | 
					#define MMCR1_UNIT_SHIFT(pmc)		(60 - (4 * ((pmc) - 1)))
 | 
				
			||||||
#define MMCR1_COMBINE_SHIFT(pmc)	(35 - ((pmc) - 1))
 | 
					#define MMCR1_COMBINE_SHIFT(pmc)	(35 - ((pmc) - 1))
 | 
				
			||||||
#define MMCR1_PMCSEL_SHIFT(pmc)		(24 - (((pmc) - 1)) * 8)
 | 
					#define MMCR1_PMCSEL_SHIFT(pmc)		(24 - (((pmc) - 1)) * 8)
 | 
				
			||||||
 | 
					#define MMCR1_FAB_SHIFT			36
 | 
				
			||||||
#define MMCR1_DC_QUAL_SHIFT		47
 | 
					#define MMCR1_DC_QUAL_SHIFT		47
 | 
				
			||||||
#define MMCR1_IC_QUAL_SHIFT		46
 | 
					#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.
 | 
							 * the threshold bits are used for the match value.
 | 
				
			||||||
		 */
 | 
							 */
 | 
				
			||||||
		if (event_is_fab_match(event[i])) {
 | 
							if (event_is_fab_match(event[i])) {
 | 
				
			||||||
			mmcr1 |= (event[i] >> EVENT_THR_CTL_SHIFT) &
 | 
								mmcr1 |= ((event[i] >> EVENT_THR_CTL_SHIFT) &
 | 
				
			||||||
				  EVENT_THR_CTL_MASK;
 | 
									  EVENT_THR_CTL_MASK) << MMCR1_FAB_SHIFT;
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			val = (event[i] >> EVENT_THR_CTL_SHIFT) & EVENT_THR_CTL_MASK;
 | 
								val = (event[i] >> EVENT_THR_CTL_SHIFT) & EVENT_THR_CTL_MASK;
 | 
				
			||||||
			mmcra |= val << MMCRA_THR_CTL_SHIFT;
 | 
								mmcra |= val << MMCRA_THR_CTL_SHIFT;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,7 +15,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static __always_inline bool arch_static_branch(struct static_key *key)
 | 
					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"
 | 
							".pushsection __jump_table, \"aw\"\n"
 | 
				
			||||||
		ASM_ALIGN "\n"
 | 
							ASM_ALIGN "\n"
 | 
				
			||||||
		ASM_PTR " 0b, %l[label], %0\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)
 | 
					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
 | 
							 * Without enhanced suppression-on-protection force
 | 
				
			||||||
		 * the dirty bit on for all writable ptes.
 | 
							 * 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;
 | 
					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)
 | 
					static inline void get_tod_clock_ext(char *clk)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	asm volatile("stcke %0" : "=Q" (*clk) : : "cc");
 | 
						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];
 | 
						unsigned char clk[16];
 | 
				
			||||||
	get_tod_clock_ext(clk);
 | 
						get_tod_clock_ext(clk);
 | 
				
			||||||
	return *((unsigned long long *)&clk[1]);
 | 
						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)
 | 
					static inline cycles_t get_cycles(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return (cycles_t) get_tod_clock() >> 2;
 | 
						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)
 | 
					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;
 | 
								break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return err;
 | 
						return err ? -EFAULT : 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int copy_siginfo_from_user32(siginfo_t *to, compat_siginfo_t __user *from)
 | 
					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;
 | 
								break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return err;
 | 
						return err ? -EFAULT : 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int save_sigregs32(struct pt_regs *regs, _sigregs32 __user *sregs)
 | 
					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)) {
 | 
						if (!count)
 | 
				
			||||||
		BUG_ON(csize >= PAGE_SIZE);
 | 
							return 0;
 | 
				
			||||||
		/* If buf is not page aligned, copy first part */
 | 
						if (!is_vmalloc_or_module_addr(dest))
 | 
				
			||||||
		size = min(roundup(__pa(buf), PAGE_SIZE) - __pa(buf), csize);
 | 
							return memcpy_real(dest, src, count);
 | 
				
			||||||
		if (size) {
 | 
						do {
 | 
				
			||||||
			if (memcpy_real(load_real_addr(buf), src, size))
 | 
							size = min(count, PAGE_SIZE - (__pa(dest) & ~PAGE_MASK));
 | 
				
			||||||
 | 
							if (memcpy_real(load_real_addr(dest), src, size))
 | 
				
			||||||
			return -EFAULT;
 | 
								return -EFAULT;
 | 
				
			||||||
			buf += size;
 | 
							count -= size;
 | 
				
			||||||
 | 
							dest += size;
 | 
				
			||||||
		src += size;
 | 
							src += size;
 | 
				
			||||||
		}
 | 
						} while (count);
 | 
				
			||||||
		/* Copy second part */
 | 
						return 0;
 | 
				
			||||||
		size = csize - size;
 | 
					 | 
				
			||||||
		return (size) ? memcpy_real(load_real_addr(buf), src, size) : 0;
 | 
					 | 
				
			||||||
	} else {
 | 
					 | 
				
			||||||
		return memcpy_real(buf, src, csize);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
| 
						 | 
					@ -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,
 | 
							rc = copy_to_user_real((void __force __user *) buf,
 | 
				
			||||||
				       (void *) src, csize);
 | 
									       (void *) src, csize);
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		rc = copy_page_real(buf, (void *) src, csize);
 | 
							rc = copy_from_realmem(buf, (void *) src, csize);
 | 
				
			||||||
	return (rc == 0) ? rc : 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 (OLDMEM_BASE) {
 | 
				
			||||||
		if ((unsigned long) src < OLDMEM_SIZE) {
 | 
							if ((unsigned long) src < OLDMEM_SIZE) {
 | 
				
			||||||
			copied = min(count, OLDMEM_SIZE - (unsigned long) src);
 | 
								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)
 | 
								if (rc)
 | 
				
			||||||
				return rc;
 | 
									return rc;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
| 
						 | 
					@ -223,7 +221,7 @@ int copy_from_oldmem(void *dest, void *src, size_t count)
 | 
				
			||||||
				return rc;
 | 
									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,
 | 
					debug_finish_entry(debug_info_t * id, debug_entry_t* active, int level,
 | 
				
			||||||
			int exception)
 | 
								int exception)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	active->id.stck = get_tod_clock();
 | 
						active->id.stck = get_tod_clock_fast();
 | 
				
			||||||
	active->id.fields.cpuid = smp_processor_id();
 | 
						active->id.fields.cpuid = smp_processor_id();
 | 
				
			||||||
	active->caller = __builtin_return_address(0);
 | 
						active->caller = __builtin_return_address(0);
 | 
				
			||||||
	active->id.fields.exception = exception;
 | 
						active->id.fields.exception = exception;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -266,6 +266,7 @@ sysc_sigpending:
 | 
				
			||||||
	tm	__TI_flags+3(%r12),_TIF_SYSCALL
 | 
						tm	__TI_flags+3(%r12),_TIF_SYSCALL
 | 
				
			||||||
	jno	sysc_return
 | 
						jno	sysc_return
 | 
				
			||||||
	lm	%r2,%r7,__PT_R2(%r11)	# load svc arguments
 | 
						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
 | 
						xr	%r8,%r8			# svc 0 returns -ENOSYS
 | 
				
			||||||
	clc	__PT_INT_CODE+2(2,%r11),BASED(.Lnr_syscalls+2)
 | 
						clc	__PT_INT_CODE+2(2,%r11),BASED(.Lnr_syscalls+2)
 | 
				
			||||||
	jnl	sysc_nr_ok		# invalid svc number -> do svc 0
 | 
						jnl	sysc_nr_ok		# invalid svc number -> do svc 0
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -297,6 +297,7 @@ sysc_sigpending:
 | 
				
			||||||
	tm	__TI_flags+7(%r12),_TIF_SYSCALL
 | 
						tm	__TI_flags+7(%r12),_TIF_SYSCALL
 | 
				
			||||||
	jno	sysc_return
 | 
						jno	sysc_return
 | 
				
			||||||
	lmg	%r2,%r7,__PT_R2(%r11)	# load svc arguments
 | 
						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
 | 
						lghi	%r8,0			# svc 0 returns -ENOSYS
 | 
				
			||||||
	llgh	%r1,__PT_INT_CODE+2(%r11)	# load new svc number
 | 
						llgh	%r1,__PT_INT_CODE+2(%r11)	# load new svc number
 | 
				
			||||||
	cghi	%r1,NR_syscalls
 | 
						cghi	%r1,NR_syscalls
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
		Reference in a new issue