mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	Linux 4.4-rc6
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAABAgAGBQJWd0J7AAoJEHm+PkMAQRiGm+cIAIWUlh9PQY5nH2C8Jta4HyTq u/MNLCoKM1LUjG7ZBryFxFG3X6BBMpfzUF011Nv5XC7oQj845dYxWK6f+lIKTq6N 8KsQkVrSv5SJ48o5Vj/ZTTrNt4rN54l0Camuwk8YXdtq6r6FSGzEkn33PQvQArAz z3Jln+dZod7NE7QhQqZHbTKvQTNuG0dkV/sEHHW4OoMo5Ag4KutZtlheQc9XdM9F jz0uEu4Nc3yHQM+DpuQ5qp3wSsUXoqcYRbsdpxwdeGgWXPqbkNBVgwlr68RsjQ0g HqIn2Bln7mJvJ7iZCWvniMHVrYHOPKceHjOsYgXRDUEav/2mA7Dyjj6ttbmNuOg= =5AQv -----END PGP SIGNATURE----- Merge tag 'v4.4-rc6' into devel Linux 4.4-rc6
This commit is contained in:
		
						commit
						0529357f10
					
				
					 1309 changed files with 16411 additions and 11961 deletions
				
			
		| 
						 | 
					@ -587,7 +587,7 @@ used to control it:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  modprobe ipmi_watchdog timeout=<t> pretimeout=<t> action=<action type>
 | 
					  modprobe ipmi_watchdog timeout=<t> pretimeout=<t> action=<action type>
 | 
				
			||||||
      preaction=<preaction type> preop=<preop type> start_now=x
 | 
					      preaction=<preaction type> preop=<preop type> start_now=x
 | 
				
			||||||
      nowayout=x ifnum_to_use=n
 | 
					      nowayout=x ifnum_to_use=n panic_wdt_timeout=<t>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ifnum_to_use specifies which interface the watchdog timer should use.
 | 
					ifnum_to_use specifies which interface the watchdog timer should use.
 | 
				
			||||||
The default is -1, which means to pick the first one registered.
 | 
					The default is -1, which means to pick the first one registered.
 | 
				
			||||||
| 
						 | 
					@ -597,7 +597,9 @@ is the amount of seconds before the reset that the pre-timeout panic will
 | 
				
			||||||
occur (if pretimeout is zero, then pretimeout will not be enabled).  Note
 | 
					occur (if pretimeout is zero, then pretimeout will not be enabled).  Note
 | 
				
			||||||
that the pretimeout is the time before the final timeout.  So if the
 | 
					that the pretimeout is the time before the final timeout.  So if the
 | 
				
			||||||
timeout is 50 seconds and the pretimeout is 10 seconds, then the pretimeout
 | 
					timeout is 50 seconds and the pretimeout is 10 seconds, then the pretimeout
 | 
				
			||||||
will occur in 40 second (10 seconds before the timeout).
 | 
					will occur in 40 second (10 seconds before the timeout). The panic_wdt_timeout
 | 
				
			||||||
 | 
					is the value of timeout which is set on kernel panic, in order to let actions
 | 
				
			||||||
 | 
					such as kdump to occur during panic.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The action may be "reset", "power_cycle", or "power_off", and
 | 
					The action may be "reset", "power_cycle", or "power_off", and
 | 
				
			||||||
specifies what to do when the timer times out, and defaults to
 | 
					specifies what to do when the timer times out, and defaults to
 | 
				
			||||||
| 
						 | 
					@ -634,6 +636,7 @@ for configuring the watchdog:
 | 
				
			||||||
	ipmi_watchdog.preop=<preop type>
 | 
						ipmi_watchdog.preop=<preop type>
 | 
				
			||||||
	ipmi_watchdog.start_now=x
 | 
						ipmi_watchdog.start_now=x
 | 
				
			||||||
	ipmi_watchdog.nowayout=x
 | 
						ipmi_watchdog.nowayout=x
 | 
				
			||||||
 | 
						ipmi_watchdog.panic_wdt_timeout=<t>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The options are the same as the module parameter options.
 | 
					The options are the same as the module parameter options.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -49,24 +49,6 @@ specified through DTS. Following are the DTS used:-
 | 
				
			||||||
The device tree documentation for the keystone machines are located at
 | 
					The device tree documentation for the keystone machines are located at
 | 
				
			||||||
        Documentation/devicetree/bindings/arm/keystone/keystone.txt
 | 
					        Documentation/devicetree/bindings/arm/keystone/keystone.txt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Known issues & workaround
 | 
					 | 
				
			||||||
-------------------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Some of the device drivers used on keystone are re-used from that from
 | 
					 | 
				
			||||||
DaVinci and other TI SoCs. These device drivers may use clock APIs directly.
 | 
					 | 
				
			||||||
Some of the keystone specific drivers such as netcp uses run time power
 | 
					 | 
				
			||||||
management API instead to enable clock. As this API has limitations on
 | 
					 | 
				
			||||||
keystone, following workaround is needed to boot Linux.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   Add 'clk_ignore_unused' to the bootargs env variable in u-boot. Otherwise
 | 
					 | 
				
			||||||
   clock frameworks will try to disable clocks that are unused and disable
 | 
					 | 
				
			||||||
   the hardware. This is because netcp related power domain and clock
 | 
					 | 
				
			||||||
   domains are enabled in u-boot as run time power management API currently
 | 
					 | 
				
			||||||
   doesn't enable clocks for netcp due to a limitation. This workaround is
 | 
					 | 
				
			||||||
   expected to be removed in the future when proper API support becomes
 | 
					 | 
				
			||||||
   available. Until then, this work around is needed.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Document Author
 | 
					Document Author
 | 
				
			||||||
---------------
 | 
					---------------
 | 
				
			||||||
Murali Karicheri <m-karicheri2@ti.com>
 | 
					Murali Karicheri <m-karicheri2@ti.com>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -70,3 +70,6 @@ use_per_node_hctx=[0/1]: Default: 0
 | 
				
			||||||
     parameter.
 | 
					     parameter.
 | 
				
			||||||
  1: The multi-queue block layer is instantiated with a hardware dispatch
 | 
					  1: The multi-queue block layer is instantiated with a hardware dispatch
 | 
				
			||||||
     queue for each CPU node in the system.
 | 
					     queue for each CPU node in the system.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use_lightnvm=[0/1]: Default: 0
 | 
				
			||||||
 | 
					  Register device with LightNVM. Requires blk-mq to be used.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -22,8 +22,7 @@ Required properties:
 | 
				
			||||||
Optional properties:
 | 
					Optional properties:
 | 
				
			||||||
- ti,hwmods:	Name of the hwmods associated to the eDMA CC
 | 
					- ti,hwmods:	Name of the hwmods associated to the eDMA CC
 | 
				
			||||||
- ti,edma-memcpy-channels: List of channels allocated to be used for memcpy, iow
 | 
					- ti,edma-memcpy-channels: List of channels allocated to be used for memcpy, iow
 | 
				
			||||||
		these channels will be SW triggered channels. The list must
 | 
							these channels will be SW triggered channels. See example.
 | 
				
			||||||
		contain 16 bits numbers, see example.
 | 
					 | 
				
			||||||
- ti,edma-reserved-slot-ranges: PaRAM slot ranges which should not be used by
 | 
					- ti,edma-reserved-slot-ranges: PaRAM slot ranges which should not be used by
 | 
				
			||||||
		the driver, they are allocated to be used by for example the
 | 
							the driver, they are allocated to be used by for example the
 | 
				
			||||||
		DSP. See example.
 | 
							DSP. See example.
 | 
				
			||||||
| 
						 | 
					@ -56,10 +55,9 @@ edma: edma@49000000 {
 | 
				
			||||||
	ti,tptcs = <&edma_tptc0 7>, <&edma_tptc1 7>, <&edma_tptc2 0>;
 | 
						ti,tptcs = <&edma_tptc0 7>, <&edma_tptc1 7>, <&edma_tptc2 0>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Channel 20 and 21 is allocated for memcpy */
 | 
						/* Channel 20 and 21 is allocated for memcpy */
 | 
				
			||||||
	ti,edma-memcpy-channels = /bits/ 16 <20 21>;
 | 
						ti,edma-memcpy-channels = <20 21>;
 | 
				
			||||||
	/* The following PaRAM slots are reserved: 35-45 and 100-110 */
 | 
						/* The following PaRAM slots are reserved: 35-44 and 100-109 */
 | 
				
			||||||
	ti,edma-reserved-slot-ranges = /bits/ 16 <35 10>,
 | 
						ti,edma-reserved-slot-ranges = <35 10>, <100 10>;
 | 
				
			||||||
				       /bits/ 16 <100 10>;
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
edma_tptc0: tptc@49800000 {
 | 
					edma_tptc0: tptc@49800000 {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -11,6 +11,10 @@ Required properties:
 | 
				
			||||||
      0 = active high
 | 
					      0 = active high
 | 
				
			||||||
      1 = active low
 | 
					      1 = active low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Optional properties:
 | 
				
			||||||
 | 
					- little-endian : GPIO registers are used as little endian. If not
 | 
				
			||||||
 | 
					                  present registers are used as big endian by default.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Example:
 | 
					Example:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
gpio0: gpio@1100 {
 | 
					gpio0: gpio@1100 {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,7 +12,7 @@ Each key is represented as a sub-node of "allwinner,sun4i-a10-lradc-keys":
 | 
				
			||||||
Required subnode-properties:
 | 
					Required subnode-properties:
 | 
				
			||||||
	- label: Descriptive name of the key.
 | 
						- label: Descriptive name of the key.
 | 
				
			||||||
	- linux,code: Keycode to emit.
 | 
						- linux,code: Keycode to emit.
 | 
				
			||||||
	- channel: Channel this key is attached to, mut be 0 or 1.
 | 
						- channel: Channel this key is attached to, must be 0 or 1.
 | 
				
			||||||
	- voltage: Voltage in µV at lradc input when this key is pressed.
 | 
						- voltage: Voltage in µV at lradc input when this key is pressed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Example:
 | 
					Example:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,7 +6,9 @@ used for what purposes, but which don't use an on-flash partition table such
 | 
				
			||||||
as RedBoot.
 | 
					as RedBoot.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The partition table should be a subnode of the mtd node and should be named
 | 
					The partition table should be a subnode of the mtd node and should be named
 | 
				
			||||||
'partitions'. Partitions are defined in subnodes of the partitions node.
 | 
					'partitions'. This node should have the following property:
 | 
				
			||||||
 | 
					- compatible : (required) must be "fixed-partitions"
 | 
				
			||||||
 | 
					Partitions are then defined in subnodes of the partitions node.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
For backwards compatibility partitions as direct subnodes of the mtd device are
 | 
					For backwards compatibility partitions as direct subnodes of the mtd device are
 | 
				
			||||||
supported. This use is discouraged.
 | 
					supported. This use is discouraged.
 | 
				
			||||||
| 
						 | 
					@ -36,6 +38,7 @@ Examples:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
flash@0 {
 | 
					flash@0 {
 | 
				
			||||||
	partitions {
 | 
						partitions {
 | 
				
			||||||
 | 
							compatible = "fixed-partitions";
 | 
				
			||||||
		#address-cells = <1>;
 | 
							#address-cells = <1>;
 | 
				
			||||||
		#size-cells = <1>;
 | 
							#size-cells = <1>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -53,6 +56,7 @@ flash@0 {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
flash@1 {
 | 
					flash@1 {
 | 
				
			||||||
	partitions {
 | 
						partitions {
 | 
				
			||||||
 | 
							compatible = "fixed-partitions";
 | 
				
			||||||
		#address-cells = <1>;
 | 
							#address-cells = <1>;
 | 
				
			||||||
		#size-cells = <2>;
 | 
							#size-cells = <2>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -66,6 +70,7 @@ flash@1 {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
flash@2 {
 | 
					flash@2 {
 | 
				
			||||||
	partitions {
 | 
						partitions {
 | 
				
			||||||
 | 
							compatible = "fixed-partitions";
 | 
				
			||||||
		#address-cells = <2>;
 | 
							#address-cells = <2>;
 | 
				
			||||||
		#size-cells = <2>;
 | 
							#size-cells = <2>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,6 +8,11 @@ Required properties:
 | 
				
			||||||
- phy-mode: See ethernet.txt file in the same directory
 | 
					- phy-mode: See ethernet.txt file in the same directory
 | 
				
			||||||
- clocks: a pointer to the reference clock for this device.
 | 
					- clocks: a pointer to the reference clock for this device.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Optional properties:
 | 
				
			||||||
 | 
					- tx-csum-limit: maximum mtu supported by port that allow TX checksum.
 | 
				
			||||||
 | 
					  Value is presented in bytes. If not used, by default 1600B is set for
 | 
				
			||||||
 | 
					  "marvell,armada-370-neta" and 9800B for others.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Example:
 | 
					Example:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ethernet@d0070000 {
 | 
					ethernet@d0070000 {
 | 
				
			||||||
| 
						 | 
					@ -15,6 +20,7 @@ ethernet@d0070000 {
 | 
				
			||||||
	reg = <0xd0070000 0x2500>;
 | 
						reg = <0xd0070000 0x2500>;
 | 
				
			||||||
	interrupts = <8>;
 | 
						interrupts = <8>;
 | 
				
			||||||
	clocks = <&gate_clk 4>;
 | 
						clocks = <&gate_clk 4>;
 | 
				
			||||||
 | 
						tx-csum-limit = <9800>
 | 
				
			||||||
	status = "okay";
 | 
						status = "okay";
 | 
				
			||||||
	phy = <&phy0>;
 | 
						phy = <&phy0>;
 | 
				
			||||||
	phy-mode = "rgmii-id";
 | 
						phy-mode = "rgmii-id";
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,9 @@
 | 
				
			||||||
* Temperature Sensor ADC (TSADC) on rockchip SoCs
 | 
					* Temperature Sensor ADC (TSADC) on rockchip SoCs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Required properties:
 | 
					Required properties:
 | 
				
			||||||
- compatible : "rockchip,rk3288-tsadc"
 | 
					- compatible : should be "rockchip,<name>-tsadc"
 | 
				
			||||||
 | 
					   "rockchip,rk3288-tsadc": found on RK3288 SoCs
 | 
				
			||||||
 | 
					   "rockchip,rk3368-tsadc": found on RK3368 SoCs
 | 
				
			||||||
- reg : physical base address of the controller and length of memory mapped
 | 
					- reg : physical base address of the controller and length of memory mapped
 | 
				
			||||||
	region.
 | 
						region.
 | 
				
			||||||
- interrupts : The interrupt number to the cpu. The interrupt specifier format
 | 
					- interrupts : The interrupt number to the cpu. The interrupt specifier format
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,6 +32,7 @@ Supported adapters:
 | 
				
			||||||
  * Intel Sunrise Point-LP (PCH)
 | 
					  * Intel Sunrise Point-LP (PCH)
 | 
				
			||||||
  * Intel DNV (SOC)
 | 
					  * Intel DNV (SOC)
 | 
				
			||||||
  * Intel Broxton (SOC)
 | 
					  * Intel Broxton (SOC)
 | 
				
			||||||
 | 
					  * Intel Lewisburg (PCH)
 | 
				
			||||||
   Datasheets: Publicly available at the Intel website
 | 
					   Datasheets: Publicly available at the Intel website
 | 
				
			||||||
 | 
					
 | 
				
			||||||
On Intel Patsburg and later chipsets, both the normal host SMBus controller
 | 
					On Intel Patsburg and later chipsets, both the normal host SMBus controller
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1583,9 +1583,6 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
 | 
				
			||||||
		hwp_only
 | 
							hwp_only
 | 
				
			||||||
			Only load intel_pstate on systems which support
 | 
								Only load intel_pstate on systems which support
 | 
				
			||||||
			hardware P state control (HWP) if available.
 | 
								hardware P state control (HWP) if available.
 | 
				
			||||||
		no_acpi
 | 
					 | 
				
			||||||
			Don't use ACPI processor performance control objects
 | 
					 | 
				
			||||||
			_PSS and _PPC specified limits.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	intremap=	[X86-64, Intel-IOMMU]
 | 
						intremap=	[X86-64, Intel-IOMMU]
 | 
				
			||||||
			on	enable Interrupt Remapping (default)
 | 
								on	enable Interrupt Remapping (default)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -181,17 +181,3 @@ For general information, go to the Intel support website at:
 | 
				
			||||||
If an issue is identified with the released source code on the supported
 | 
					If an issue is identified with the released source code on the supported
 | 
				
			||||||
kernel with a supported adapter, email the specific information related to the
 | 
					kernel with a supported adapter, email the specific information related to the
 | 
				
			||||||
issue to e1000-devel@lists.sourceforge.net.
 | 
					issue to e1000-devel@lists.sourceforge.net.
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
License
 | 
					 | 
				
			||||||
=======
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
This software program is released under the terms of a license agreement
 | 
					 | 
				
			||||||
between you ('Licensee') and Intel. Do not use or load this software or any
 | 
					 | 
				
			||||||
associated materials (collectively, the 'Software') until you have carefully
 | 
					 | 
				
			||||||
read the full terms and conditions of the file COPYING located in this software
 | 
					 | 
				
			||||||
package. By loading or using the Software, you agree to the terms of this
 | 
					 | 
				
			||||||
Agreement. If you do not agree with the terms of this Agreement, do not install
 | 
					 | 
				
			||||||
or use the Software.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* Other names and brands may be claimed as the property of others.
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										78
									
								
								MAINTAINERS
									
									
									
									
									
								
							
							
						
						
									
										78
									
								
								MAINTAINERS
									
									
									
									
									
								
							| 
						 | 
					@ -324,7 +324,7 @@ M:	Zhang Rui <rui.zhang@intel.com>
 | 
				
			||||||
L:	linux-acpi@vger.kernel.org
 | 
					L:	linux-acpi@vger.kernel.org
 | 
				
			||||||
W:	https://01.org/linux-acpi
 | 
					W:	https://01.org/linux-acpi
 | 
				
			||||||
S:	Supported
 | 
					S:	Supported
 | 
				
			||||||
F:	drivers/acpi/video.c
 | 
					F:	drivers/acpi/acpi_video.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ACPI WMI DRIVER
 | 
					ACPI WMI DRIVER
 | 
				
			||||||
L:	platform-driver-x86@vger.kernel.org
 | 
					L:	platform-driver-x86@vger.kernel.org
 | 
				
			||||||
| 
						 | 
					@ -1853,7 +1853,7 @@ S:	Supported
 | 
				
			||||||
F:	drivers/net/wireless/ath/ath6kl/
 | 
					F:	drivers/net/wireless/ath/ath6kl/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
WILOCITY WIL6210 WIRELESS DRIVER
 | 
					WILOCITY WIL6210 WIRELESS DRIVER
 | 
				
			||||||
M:	Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>
 | 
					M:	Maya Erez <qca_merez@qca.qualcomm.com>
 | 
				
			||||||
L:	linux-wireless@vger.kernel.org
 | 
					L:	linux-wireless@vger.kernel.org
 | 
				
			||||||
L:	wil6210@qca.qualcomm.com
 | 
					L:	wil6210@qca.qualcomm.com
 | 
				
			||||||
S:	Supported
 | 
					S:	Supported
 | 
				
			||||||
| 
						 | 
					@ -1937,7 +1937,7 @@ S:	Supported
 | 
				
			||||||
F:	drivers/i2c/busses/i2c-at91.c
 | 
					F:	drivers/i2c/busses/i2c-at91.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ATMEL ISI DRIVER
 | 
					ATMEL ISI DRIVER
 | 
				
			||||||
M:	Josh Wu <josh.wu@atmel.com>
 | 
					M:	Ludovic Desroches <ludovic.desroches@atmel.com>
 | 
				
			||||||
L:	linux-media@vger.kernel.org
 | 
					L:	linux-media@vger.kernel.org
 | 
				
			||||||
S:	Supported
 | 
					S:	Supported
 | 
				
			||||||
F:	drivers/media/platform/soc_camera/atmel-isi.c
 | 
					F:	drivers/media/platform/soc_camera/atmel-isi.c
 | 
				
			||||||
| 
						 | 
					@ -1956,7 +1956,8 @@ S:	Supported
 | 
				
			||||||
F:	drivers/net/ethernet/cadence/
 | 
					F:	drivers/net/ethernet/cadence/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ATMEL NAND DRIVER
 | 
					ATMEL NAND DRIVER
 | 
				
			||||||
M:	Josh Wu <josh.wu@atmel.com>
 | 
					M:	Wenyou Yang <wenyou.yang@atmel.com>
 | 
				
			||||||
 | 
					M:	Josh Wu <rainyfeeling@outlook.com>
 | 
				
			||||||
L:	linux-mtd@lists.infradead.org
 | 
					L:	linux-mtd@lists.infradead.org
 | 
				
			||||||
S:	Supported
 | 
					S:	Supported
 | 
				
			||||||
F:	drivers/mtd/nand/atmel_nand*
 | 
					F:	drivers/mtd/nand/atmel_nand*
 | 
				
			||||||
| 
						 | 
					@ -2455,7 +2456,9 @@ F:	drivers/firmware/broadcom/*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
BROADCOM STB NAND FLASH DRIVER
 | 
					BROADCOM STB NAND FLASH DRIVER
 | 
				
			||||||
M:	Brian Norris <computersforpeace@gmail.com>
 | 
					M:	Brian Norris <computersforpeace@gmail.com>
 | 
				
			||||||
 | 
					M:	Kamal Dasu <kdasu.kdev@gmail.com>
 | 
				
			||||||
L:	linux-mtd@lists.infradead.org
 | 
					L:	linux-mtd@lists.infradead.org
 | 
				
			||||||
 | 
					L:	bcm-kernel-feedback-list@broadcom.com
 | 
				
			||||||
S:	Maintained
 | 
					S:	Maintained
 | 
				
			||||||
F:	drivers/mtd/nand/brcmnand/
 | 
					F:	drivers/mtd/nand/brcmnand/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2552,7 +2555,7 @@ F:	arch/c6x/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CACHEFILES: FS-CACHE BACKEND FOR CACHING ON MOUNTED FILESYSTEMS
 | 
					CACHEFILES: FS-CACHE BACKEND FOR CACHING ON MOUNTED FILESYSTEMS
 | 
				
			||||||
M:	David Howells <dhowells@redhat.com>
 | 
					M:	David Howells <dhowells@redhat.com>
 | 
				
			||||||
L:	linux-cachefs@redhat.com
 | 
					L:	linux-cachefs@redhat.com (moderated for non-subscribers)
 | 
				
			||||||
S:	Supported
 | 
					S:	Supported
 | 
				
			||||||
F:	Documentation/filesystems/caching/cachefiles.txt
 | 
					F:	Documentation/filesystems/caching/cachefiles.txt
 | 
				
			||||||
F:	fs/cachefiles/
 | 
					F:	fs/cachefiles/
 | 
				
			||||||
| 
						 | 
					@ -2935,10 +2938,9 @@ S:	Maintained
 | 
				
			||||||
F:	drivers/platform/x86/compal-laptop.c
 | 
					F:	drivers/platform/x86/compal-laptop.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CONEXANT ACCESSRUNNER USB DRIVER
 | 
					CONEXANT ACCESSRUNNER USB DRIVER
 | 
				
			||||||
M:	Simon Arlott <cxacru@fire.lp0.eu>
 | 
					 | 
				
			||||||
L:	accessrunner-general@lists.sourceforge.net
 | 
					L:	accessrunner-general@lists.sourceforge.net
 | 
				
			||||||
W:	http://accessrunner.sourceforge.net/
 | 
					W:	http://accessrunner.sourceforge.net/
 | 
				
			||||||
S:	Maintained
 | 
					S:	Orphan
 | 
				
			||||||
F:	drivers/usb/atm/cxacru.c
 | 
					F:	drivers/usb/atm/cxacru.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CONFIGFS
 | 
					CONFIGFS
 | 
				
			||||||
| 
						 | 
					@ -2979,6 +2981,7 @@ F:	kernel/cpuset.c
 | 
				
			||||||
CONTROL GROUP - MEMORY RESOURCE CONTROLLER (MEMCG)
 | 
					CONTROL GROUP - MEMORY RESOURCE CONTROLLER (MEMCG)
 | 
				
			||||||
M:	Johannes Weiner <hannes@cmpxchg.org>
 | 
					M:	Johannes Weiner <hannes@cmpxchg.org>
 | 
				
			||||||
M:	Michal Hocko <mhocko@kernel.org>
 | 
					M:	Michal Hocko <mhocko@kernel.org>
 | 
				
			||||||
 | 
					M:	Vladimir Davydov <vdavydov@virtuozzo.com>
 | 
				
			||||||
L:	cgroups@vger.kernel.org
 | 
					L:	cgroups@vger.kernel.org
 | 
				
			||||||
L:	linux-mm@kvack.org
 | 
					L:	linux-mm@kvack.org
 | 
				
			||||||
S:	Maintained
 | 
					S:	Maintained
 | 
				
			||||||
| 
						 | 
					@ -4415,6 +4418,7 @@ K:	fmc_d.*register
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FPGA MANAGER FRAMEWORK
 | 
					FPGA MANAGER FRAMEWORK
 | 
				
			||||||
M:	Alan Tull <atull@opensource.altera.com>
 | 
					M:	Alan Tull <atull@opensource.altera.com>
 | 
				
			||||||
 | 
					R:	Moritz Fischer <moritz.fischer@ettus.com>
 | 
				
			||||||
S:	Maintained
 | 
					S:	Maintained
 | 
				
			||||||
F:	drivers/fpga/
 | 
					F:	drivers/fpga/
 | 
				
			||||||
F:	include/linux/fpga/fpga-mgr.h
 | 
					F:	include/linux/fpga/fpga-mgr.h
 | 
				
			||||||
| 
						 | 
					@ -4565,7 +4569,7 @@ F:	include/linux/frontswap.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FS-CACHE: LOCAL CACHING FOR NETWORK FILESYSTEMS
 | 
					FS-CACHE: LOCAL CACHING FOR NETWORK FILESYSTEMS
 | 
				
			||||||
M:	David Howells <dhowells@redhat.com>
 | 
					M:	David Howells <dhowells@redhat.com>
 | 
				
			||||||
L:	linux-cachefs@redhat.com
 | 
					L:	linux-cachefs@redhat.com (moderated for non-subscribers)
 | 
				
			||||||
S:	Supported
 | 
					S:	Supported
 | 
				
			||||||
F:	Documentation/filesystems/caching/
 | 
					F:	Documentation/filesystems/caching/
 | 
				
			||||||
F:	fs/fscache/
 | 
					F:	fs/fscache/
 | 
				
			||||||
| 
						 | 
					@ -5580,7 +5584,7 @@ R:	Jesse Brandeburg <jesse.brandeburg@intel.com>
 | 
				
			||||||
R:	Shannon Nelson <shannon.nelson@intel.com>
 | 
					R:	Shannon Nelson <shannon.nelson@intel.com>
 | 
				
			||||||
R:	Carolyn Wyborny <carolyn.wyborny@intel.com>
 | 
					R:	Carolyn Wyborny <carolyn.wyborny@intel.com>
 | 
				
			||||||
R:	Don Skidmore <donald.c.skidmore@intel.com>
 | 
					R:	Don Skidmore <donald.c.skidmore@intel.com>
 | 
				
			||||||
R:	Matthew Vick <matthew.vick@intel.com>
 | 
					R:	Bruce Allan <bruce.w.allan@intel.com>
 | 
				
			||||||
R:	John Ronciak <john.ronciak@intel.com>
 | 
					R:	John Ronciak <john.ronciak@intel.com>
 | 
				
			||||||
R:	Mitch Williams <mitch.a.williams@intel.com>
 | 
					R:	Mitch Williams <mitch.a.williams@intel.com>
 | 
				
			||||||
L:	intel-wired-lan@lists.osuosl.org
 | 
					L:	intel-wired-lan@lists.osuosl.org
 | 
				
			||||||
| 
						 | 
					@ -5717,13 +5721,6 @@ M:	Juanjo Ciarlante <jjciarla@raiz.uncu.edu.ar>
 | 
				
			||||||
S:	Maintained
 | 
					S:	Maintained
 | 
				
			||||||
F:	net/ipv4/netfilter/ipt_MASQUERADE.c
 | 
					F:	net/ipv4/netfilter/ipt_MASQUERADE.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
IP1000A 10/100/1000 GIGABIT ETHERNET DRIVER
 | 
					 | 
				
			||||||
M:	Francois Romieu <romieu@fr.zoreil.com>
 | 
					 | 
				
			||||||
M:	Sorbica Shieh <sorbica@icplus.com.tw>
 | 
					 | 
				
			||||||
L:	netdev@vger.kernel.org
 | 
					 | 
				
			||||||
S:	Maintained
 | 
					 | 
				
			||||||
F:	drivers/net/ethernet/icplus/ipg.*
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
IPATH DRIVER
 | 
					IPATH DRIVER
 | 
				
			||||||
M:	Mike Marciniszyn <infinipath@intel.com>
 | 
					M:	Mike Marciniszyn <infinipath@intel.com>
 | 
				
			||||||
L:	linux-rdma@vger.kernel.org
 | 
					L:	linux-rdma@vger.kernel.org
 | 
				
			||||||
| 
						 | 
					@ -6377,6 +6374,7 @@ F:	arch/*/include/asm/pmem.h
 | 
				
			||||||
LIGHTNVM PLATFORM SUPPORT
 | 
					LIGHTNVM PLATFORM SUPPORT
 | 
				
			||||||
M:	Matias Bjorling <mb@lightnvm.io>
 | 
					M:	Matias Bjorling <mb@lightnvm.io>
 | 
				
			||||||
W:	http://github/OpenChannelSSD
 | 
					W:	http://github/OpenChannelSSD
 | 
				
			||||||
 | 
					L:	linux-block@vger.kernel.org
 | 
				
			||||||
S:	Maintained
 | 
					S:	Maintained
 | 
				
			||||||
F:	drivers/lightnvm/
 | 
					F:	drivers/lightnvm/
 | 
				
			||||||
F:	include/linux/lightnvm.h
 | 
					F:	include/linux/lightnvm.h
 | 
				
			||||||
| 
						 | 
					@ -6929,13 +6927,21 @@ F:	drivers/scsi/megaraid.*
 | 
				
			||||||
F:	drivers/scsi/megaraid/
 | 
					F:	drivers/scsi/megaraid/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MELLANOX ETHERNET DRIVER (mlx4_en)
 | 
					MELLANOX ETHERNET DRIVER (mlx4_en)
 | 
				
			||||||
M:	Amir Vadai <amirv@mellanox.com>
 | 
					M: 	Eugenia Emantayev <eugenia@mellanox.com>
 | 
				
			||||||
L:	netdev@vger.kernel.org
 | 
					L:	netdev@vger.kernel.org
 | 
				
			||||||
S:	Supported
 | 
					S:	Supported
 | 
				
			||||||
W:	http://www.mellanox.com
 | 
					W:	http://www.mellanox.com
 | 
				
			||||||
Q:	http://patchwork.ozlabs.org/project/netdev/list/
 | 
					Q:	http://patchwork.ozlabs.org/project/netdev/list/
 | 
				
			||||||
F:	drivers/net/ethernet/mellanox/mlx4/en_*
 | 
					F:	drivers/net/ethernet/mellanox/mlx4/en_*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MELLANOX ETHERNET DRIVER (mlx5e)
 | 
				
			||||||
 | 
					M:	Saeed Mahameed <saeedm@mellanox.com>
 | 
				
			||||||
 | 
					L:	netdev@vger.kernel.org
 | 
				
			||||||
 | 
					S:	Supported
 | 
				
			||||||
 | 
					W:	http://www.mellanox.com
 | 
				
			||||||
 | 
					Q:	http://patchwork.ozlabs.org/project/netdev/list/
 | 
				
			||||||
 | 
					F:	drivers/net/ethernet/mellanox/mlx5/core/en_*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MELLANOX ETHERNET SWITCH DRIVERS
 | 
					MELLANOX ETHERNET SWITCH DRIVERS
 | 
				
			||||||
M:	Jiri Pirko <jiri@mellanox.com>
 | 
					M:	Jiri Pirko <jiri@mellanox.com>
 | 
				
			||||||
M:	Ido Schimmel <idosch@mellanox.com>
 | 
					M:	Ido Schimmel <idosch@mellanox.com>
 | 
				
			||||||
| 
						 | 
					@ -7908,6 +7914,18 @@ S:	Maintained
 | 
				
			||||||
F:	net/openvswitch/
 | 
					F:	net/openvswitch/
 | 
				
			||||||
F:	include/uapi/linux/openvswitch.h
 | 
					F:	include/uapi/linux/openvswitch.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					OPERATING PERFORMANCE POINTS (OPP)
 | 
				
			||||||
 | 
					M:	Viresh Kumar <vireshk@kernel.org>
 | 
				
			||||||
 | 
					M:	Nishanth Menon <nm@ti.com>
 | 
				
			||||||
 | 
					M:	Stephen Boyd <sboyd@codeaurora.org>
 | 
				
			||||||
 | 
					L:	linux-pm@vger.kernel.org
 | 
				
			||||||
 | 
					S:	Maintained
 | 
				
			||||||
 | 
					T:	git git://git.kernel.org/pub/scm/linux/kernel/git/vireshk/pm.git
 | 
				
			||||||
 | 
					F:	drivers/base/power/opp/
 | 
				
			||||||
 | 
					F:	include/linux/pm_opp.h
 | 
				
			||||||
 | 
					F:	Documentation/power/opp.txt
 | 
				
			||||||
 | 
					F:	Documentation/devicetree/bindings/opp/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
OPL4 DRIVER
 | 
					OPL4 DRIVER
 | 
				
			||||||
M:	Clemens Ladisch <clemens@ladisch.de>
 | 
					M:	Clemens Ladisch <clemens@ladisch.de>
 | 
				
			||||||
L:	alsa-devel@alsa-project.org (moderated for non-subscribers)
 | 
					L:	alsa-devel@alsa-project.org (moderated for non-subscribers)
 | 
				
			||||||
| 
						 | 
					@ -8276,7 +8294,7 @@ F:	include/linux/delayacct.h
 | 
				
			||||||
F:	kernel/delayacct.c
 | 
					F:	kernel/delayacct.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PERFORMANCE EVENTS SUBSYSTEM
 | 
					PERFORMANCE EVENTS SUBSYSTEM
 | 
				
			||||||
M:	Peter Zijlstra <a.p.zijlstra@chello.nl>
 | 
					M:	Peter Zijlstra <peterz@infradead.org>
 | 
				
			||||||
M:	Ingo Molnar <mingo@redhat.com>
 | 
					M:	Ingo Molnar <mingo@redhat.com>
 | 
				
			||||||
M:	Arnaldo Carvalho de Melo <acme@kernel.org>
 | 
					M:	Arnaldo Carvalho de Melo <acme@kernel.org>
 | 
				
			||||||
L:	linux-kernel@vger.kernel.org
 | 
					L:	linux-kernel@vger.kernel.org
 | 
				
			||||||
| 
						 | 
					@ -8369,6 +8387,14 @@ L:	linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
 | 
				
			||||||
S:	Maintained
 | 
					S:	Maintained
 | 
				
			||||||
F:	drivers/pinctrl/samsung/
 | 
					F:	drivers/pinctrl/samsung/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PIN CONTROLLER - SINGLE
 | 
				
			||||||
 | 
					M:	Tony Lindgren <tony@atomide.com>
 | 
				
			||||||
 | 
					M:	Haojian Zhuang <haojian.zhuang@linaro.org>
 | 
				
			||||||
 | 
					L:	linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 | 
				
			||||||
 | 
					L:	linux-omap@vger.kernel.org
 | 
				
			||||||
 | 
					S:	Maintained
 | 
				
			||||||
 | 
					F:	drivers/pinctrl/pinctrl-single.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PIN CONTROLLER - ST SPEAR
 | 
					PIN CONTROLLER - ST SPEAR
 | 
				
			||||||
M:	Viresh Kumar <vireshk@kernel.org>
 | 
					M:	Viresh Kumar <vireshk@kernel.org>
 | 
				
			||||||
L:	spear-devel@list.st.com
 | 
					L:	spear-devel@list.st.com
 | 
				
			||||||
| 
						 | 
					@ -8935,6 +8961,13 @@ F:	drivers/rpmsg/
 | 
				
			||||||
F:	Documentation/rpmsg.txt
 | 
					F:	Documentation/rpmsg.txt
 | 
				
			||||||
F:	include/linux/rpmsg.h
 | 
					F:	include/linux/rpmsg.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RENESAS ETHERNET DRIVERS
 | 
				
			||||||
 | 
					R:	Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
 | 
				
			||||||
 | 
					L:	netdev@vger.kernel.org
 | 
				
			||||||
 | 
					L:	linux-sh@vger.kernel.org
 | 
				
			||||||
 | 
					F:	drivers/net/ethernet/renesas/
 | 
				
			||||||
 | 
					F:	include/linux/sh_eth.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
RESET CONTROLLER FRAMEWORK
 | 
					RESET CONTROLLER FRAMEWORK
 | 
				
			||||||
M:	Philipp Zabel <p.zabel@pengutronix.de>
 | 
					M:	Philipp Zabel <p.zabel@pengutronix.de>
 | 
				
			||||||
S:	Maintained
 | 
					S:	Maintained
 | 
				
			||||||
| 
						 | 
					@ -9321,7 +9354,6 @@ F:	drivers/i2c/busses/i2c-designware-*
 | 
				
			||||||
F:	include/linux/platform_data/i2c-designware.h
 | 
					F:	include/linux/platform_data/i2c-designware.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SYNOPSYS DESIGNWARE MMC/SD/SDIO DRIVER
 | 
					SYNOPSYS DESIGNWARE MMC/SD/SDIO DRIVER
 | 
				
			||||||
M:	Seungwon Jeon <tgih.jun@samsung.com>
 | 
					 | 
				
			||||||
M:	Jaehoon Chung <jh80.chung@samsung.com>
 | 
					M:	Jaehoon Chung <jh80.chung@samsung.com>
 | 
				
			||||||
L:	linux-mmc@vger.kernel.org
 | 
					L:	linux-mmc@vger.kernel.org
 | 
				
			||||||
S:	Maintained
 | 
					S:	Maintained
 | 
				
			||||||
| 
						 | 
					@ -9418,8 +9450,10 @@ F:	include/scsi/sg.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SCSI SUBSYSTEM
 | 
					SCSI SUBSYSTEM
 | 
				
			||||||
M:	"James E.J. Bottomley" <JBottomley@odin.com>
 | 
					M:	"James E.J. Bottomley" <JBottomley@odin.com>
 | 
				
			||||||
L:	linux-scsi@vger.kernel.org
 | 
					 | 
				
			||||||
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git
 | 
					T:	git git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git
 | 
				
			||||||
 | 
					M:	"Martin K. Petersen" <martin.petersen@oracle.com>
 | 
				
			||||||
 | 
					T:	git git://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git
 | 
				
			||||||
 | 
					L:	linux-scsi@vger.kernel.org
 | 
				
			||||||
S:	Maintained
 | 
					S:	Maintained
 | 
				
			||||||
F:	drivers/scsi/
 | 
					F:	drivers/scsi/
 | 
				
			||||||
F:	include/scsi/
 | 
					F:	include/scsi/
 | 
				
			||||||
| 
						 | 
					@ -10894,9 +10928,9 @@ S:	Maintained
 | 
				
			||||||
F:	drivers/media/tuners/tua9001*
 | 
					F:	drivers/media/tuners/tua9001*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TULIP NETWORK DRIVERS
 | 
					TULIP NETWORK DRIVERS
 | 
				
			||||||
M:	Grant Grundler <grundler@parisc-linux.org>
 | 
					 | 
				
			||||||
L:	netdev@vger.kernel.org
 | 
					L:	netdev@vger.kernel.org
 | 
				
			||||||
S:	Maintained
 | 
					L:	linux-parisc@vger.kernel.org
 | 
				
			||||||
 | 
					S:	Orphan
 | 
				
			||||||
F:	drivers/net/ethernet/dec/tulip/
 | 
					F:	drivers/net/ethernet/dec/tulip/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TUN/TAP driver
 | 
					TUN/TAP driver
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							| 
						 | 
					@ -1,7 +1,7 @@
 | 
				
			||||||
VERSION = 4
 | 
					VERSION = 4
 | 
				
			||||||
PATCHLEVEL = 4
 | 
					PATCHLEVEL = 4
 | 
				
			||||||
SUBLEVEL = 0
 | 
					SUBLEVEL = 0
 | 
				
			||||||
EXTRAVERSION = -rc1
 | 
					EXTRAVERSION = -rc6
 | 
				
			||||||
NAME = Blurry Fish Butt
 | 
					NAME = Blurry Fish Butt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# *DOCUMENTATION*
 | 
					# *DOCUMENTATION*
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -445,6 +445,7 @@ config LINUX_LINK_BASE
 | 
				
			||||||
	  However some customers have peripherals mapped at this addr, so
 | 
						  However some customers have peripherals mapped at this addr, so
 | 
				
			||||||
	  Linux needs to be scooted a bit.
 | 
						  Linux needs to be scooted a bit.
 | 
				
			||||||
	  If you don't know what the above means, leave this setting alone.
 | 
						  If you don't know what the above means, leave this setting alone.
 | 
				
			||||||
 | 
						  This needs to match memory start address specified in Device Tree
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config HIGHMEM
 | 
					config HIGHMEM
 | 
				
			||||||
	bool "High Memory Support"
 | 
						bool "High Memory Support"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -46,6 +46,7 @@ ethernet@0x18000 {
 | 
				
			||||||
			snps,pbl = < 32 >;
 | 
								snps,pbl = < 32 >;
 | 
				
			||||||
			clocks = <&apbclk>;
 | 
								clocks = <&apbclk>;
 | 
				
			||||||
			clock-names = "stmmaceth";
 | 
								clock-names = "stmmaceth";
 | 
				
			||||||
 | 
								max-speed = <100>;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ehci@0x40000 {
 | 
							ehci@0x40000 {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,7 +17,8 @@ / {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	memory {
 | 
						memory {
 | 
				
			||||||
		device_type = "memory";
 | 
							device_type = "memory";
 | 
				
			||||||
		reg = <0x0 0x80000000 0x0 0x40000000	/* 1 GB low mem */
 | 
							/* CONFIG_LINUX_LINK_BASE needs to match low mem start */
 | 
				
			||||||
 | 
							reg = <0x0 0x80000000 0x0 0x20000000	/* 512 MB low mem */
 | 
				
			||||||
		       0x1 0x00000000 0x0 0x40000000>;	/* 1 GB highmem */
 | 
							       0x1 0x00000000 0x0 0x40000000>;	/* 1 GB highmem */
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
CONFIG_CROSS_COMPILE="arc-linux-uclibc-"
 | 
					CONFIG_CROSS_COMPILE="arc-linux-"
 | 
				
			||||||
CONFIG_DEFAULT_HOSTNAME="ARCLinux"
 | 
					CONFIG_DEFAULT_HOSTNAME="ARCLinux"
 | 
				
			||||||
# CONFIG_SWAP is not set
 | 
					# CONFIG_SWAP is not set
 | 
				
			||||||
CONFIG_SYSVIPC=y
 | 
					CONFIG_SYSVIPC=y
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
CONFIG_CROSS_COMPILE="arc-linux-uclibc-"
 | 
					CONFIG_CROSS_COMPILE="arc-linux-"
 | 
				
			||||||
CONFIG_DEFAULT_HOSTNAME="ARCLinux"
 | 
					CONFIG_DEFAULT_HOSTNAME="ARCLinux"
 | 
				
			||||||
# CONFIG_SWAP is not set
 | 
					# CONFIG_SWAP is not set
 | 
				
			||||||
CONFIG_SYSVIPC=y
 | 
					CONFIG_SYSVIPC=y
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
CONFIG_CROSS_COMPILE="arc-linux-uclibc-"
 | 
					CONFIG_CROSS_COMPILE="arc-linux-"
 | 
				
			||||||
CONFIG_DEFAULT_HOSTNAME="ARCLinux"
 | 
					CONFIG_DEFAULT_HOSTNAME="ARCLinux"
 | 
				
			||||||
# CONFIG_SWAP is not set
 | 
					# CONFIG_SWAP is not set
 | 
				
			||||||
CONFIG_SYSVIPC=y
 | 
					CONFIG_SYSVIPC=y
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
CONFIG_CROSS_COMPILE="arc-linux-uclibc-"
 | 
					CONFIG_CROSS_COMPILE="arc-linux-"
 | 
				
			||||||
# CONFIG_LOCALVERSION_AUTO is not set
 | 
					# CONFIG_LOCALVERSION_AUTO is not set
 | 
				
			||||||
CONFIG_DEFAULT_HOSTNAME="ARCLinux"
 | 
					CONFIG_DEFAULT_HOSTNAME="ARCLinux"
 | 
				
			||||||
# CONFIG_SWAP is not set
 | 
					# CONFIG_SWAP is not set
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
CONFIG_CROSS_COMPILE="arc-linux-uclibc-"
 | 
					CONFIG_CROSS_COMPILE="arc-linux-"
 | 
				
			||||||
# CONFIG_LOCALVERSION_AUTO is not set
 | 
					# CONFIG_LOCALVERSION_AUTO is not set
 | 
				
			||||||
CONFIG_DEFAULT_HOSTNAME="ARCLinux"
 | 
					CONFIG_DEFAULT_HOSTNAME="ARCLinux"
 | 
				
			||||||
# CONFIG_SWAP is not set
 | 
					# CONFIG_SWAP is not set
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
CONFIG_CROSS_COMPILE="arc-linux-uclibc-"
 | 
					CONFIG_CROSS_COMPILE="arc-linux-"
 | 
				
			||||||
# CONFIG_LOCALVERSION_AUTO is not set
 | 
					# CONFIG_LOCALVERSION_AUTO is not set
 | 
				
			||||||
CONFIG_DEFAULT_HOSTNAME="ARCLinux"
 | 
					CONFIG_DEFAULT_HOSTNAME="ARCLinux"
 | 
				
			||||||
# CONFIG_SWAP is not set
 | 
					# CONFIG_SWAP is not set
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
CONFIG_CROSS_COMPILE="arc-linux-uclibc-"
 | 
					CONFIG_CROSS_COMPILE="arc-linux-"
 | 
				
			||||||
CONFIG_DEFAULT_HOSTNAME="ARCLinux"
 | 
					CONFIG_DEFAULT_HOSTNAME="ARCLinux"
 | 
				
			||||||
# CONFIG_SWAP is not set
 | 
					# CONFIG_SWAP is not set
 | 
				
			||||||
CONFIG_SYSVIPC=y
 | 
					CONFIG_SYSVIPC=y
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
CONFIG_CROSS_COMPILE="arc-linux-uclibc-"
 | 
					CONFIG_CROSS_COMPILE="arc-linux-"
 | 
				
			||||||
# CONFIG_LOCALVERSION_AUTO is not set
 | 
					# CONFIG_LOCALVERSION_AUTO is not set
 | 
				
			||||||
CONFIG_DEFAULT_HOSTNAME="ARCLinux"
 | 
					CONFIG_DEFAULT_HOSTNAME="ARCLinux"
 | 
				
			||||||
# CONFIG_CROSS_MEMORY_ATTACH is not set
 | 
					# CONFIG_CROSS_MEMORY_ATTACH is not set
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
CONFIG_CROSS_COMPILE="arc-linux-uclibc-"
 | 
					CONFIG_CROSS_COMPILE="arc-linux-"
 | 
				
			||||||
# CONFIG_LOCALVERSION_AUTO is not set
 | 
					# CONFIG_LOCALVERSION_AUTO is not set
 | 
				
			||||||
CONFIG_DEFAULT_HOSTNAME="ARCLinux"
 | 
					CONFIG_DEFAULT_HOSTNAME="ARCLinux"
 | 
				
			||||||
# CONFIG_CROSS_MEMORY_ATTACH is not set
 | 
					# CONFIG_CROSS_MEMORY_ATTACH is not set
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -37,6 +37,9 @@
 | 
				
			||||||
#define ISA_INIT_STATUS_BITS	(STATUS_IE_MASK | STATUS_AD_MASK | \
 | 
					#define ISA_INIT_STATUS_BITS	(STATUS_IE_MASK | STATUS_AD_MASK | \
 | 
				
			||||||
					(ARCV2_IRQ_DEF_PRIO << 1))
 | 
										(ARCV2_IRQ_DEF_PRIO << 1))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* SLEEP needs default irq priority (<=) which can interrupt the doze */
 | 
				
			||||||
 | 
					#define ISA_SLEEP_ARG		(0x10 | ARCV2_IRQ_DEF_PRIO)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef __ASSEMBLY__
 | 
					#ifndef __ASSEMBLY__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -43,6 +43,8 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define ISA_INIT_STATUS_BITS	STATUS_IE_MASK
 | 
					#define ISA_INIT_STATUS_BITS	STATUS_IE_MASK
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define ISA_SLEEP_ARG		0x3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef __ASSEMBLY__
 | 
					#ifndef __ASSEMBLY__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/******************************************************************
 | 
					/******************************************************************
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -23,7 +23,7 @@
 | 
				
			||||||
 * @dt_compat:		Array of device tree 'compatible' strings
 | 
					 * @dt_compat:		Array of device tree 'compatible' strings
 | 
				
			||||||
 * 			(XXX: although only 1st entry is looked at)
 | 
					 * 			(XXX: although only 1st entry is looked at)
 | 
				
			||||||
 * @init_early:		Very early callback [called from setup_arch()]
 | 
					 * @init_early:		Very early callback [called from setup_arch()]
 | 
				
			||||||
 * @init_cpu_smp:	for each CPU as it is coming up (SMP as well as UP)
 | 
					 * @init_per_cpu:	for each CPU as it is coming up (SMP as well as UP)
 | 
				
			||||||
 * 			[(M):init_IRQ(), (o):start_kernel_secondary()]
 | 
					 * 			[(M):init_IRQ(), (o):start_kernel_secondary()]
 | 
				
			||||||
 * @init_machine:	arch initcall level callback (e.g. populate static
 | 
					 * @init_machine:	arch initcall level callback (e.g. populate static
 | 
				
			||||||
 * 			platform devices or parse Devicetree)
 | 
					 * 			platform devices or parse Devicetree)
 | 
				
			||||||
| 
						 | 
					@ -35,7 +35,7 @@ struct machine_desc {
 | 
				
			||||||
	const char		**dt_compat;
 | 
						const char		**dt_compat;
 | 
				
			||||||
	void			(*init_early)(void);
 | 
						void			(*init_early)(void);
 | 
				
			||||||
#ifdef CONFIG_SMP
 | 
					#ifdef CONFIG_SMP
 | 
				
			||||||
	void			(*init_cpu_smp)(unsigned int);
 | 
						void			(*init_per_cpu)(unsigned int);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	void			(*init_machine)(void);
 | 
						void			(*init_machine)(void);
 | 
				
			||||||
	void			(*init_late)(void);
 | 
						void			(*init_late)(void);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -48,7 +48,7 @@ extern int smp_ipi_irq_setup(int cpu, int irq);
 | 
				
			||||||
 * @init_early_smp:	A SMP specific h/w block can init itself
 | 
					 * @init_early_smp:	A SMP specific h/w block can init itself
 | 
				
			||||||
 * 			Could be common across platforms so not covered by
 | 
					 * 			Could be common across platforms so not covered by
 | 
				
			||||||
 * 			mach_desc->init_early()
 | 
					 * 			mach_desc->init_early()
 | 
				
			||||||
 * @init_irq_cpu:	Called for each core so SMP h/w block driver can do
 | 
					 * @init_per_cpu:	Called for each core so SMP h/w block driver can do
 | 
				
			||||||
 * 			any needed setup per cpu (e.g. IPI request)
 | 
					 * 			any needed setup per cpu (e.g. IPI request)
 | 
				
			||||||
 * @cpu_kick:		For Master to kickstart a cpu (optionally at a PC)
 | 
					 * @cpu_kick:		For Master to kickstart a cpu (optionally at a PC)
 | 
				
			||||||
 * @ipi_send:		To send IPI to a @cpu
 | 
					 * @ipi_send:		To send IPI to a @cpu
 | 
				
			||||||
| 
						 | 
					@ -57,7 +57,7 @@ extern int smp_ipi_irq_setup(int cpu, int irq);
 | 
				
			||||||
struct plat_smp_ops {
 | 
					struct plat_smp_ops {
 | 
				
			||||||
	const char 	*info;
 | 
						const char 	*info;
 | 
				
			||||||
	void		(*init_early_smp)(void);
 | 
						void		(*init_early_smp)(void);
 | 
				
			||||||
	void		(*init_irq_cpu)(int cpu);
 | 
						void		(*init_per_cpu)(int cpu);
 | 
				
			||||||
	void		(*cpu_kick)(int cpu, unsigned long pc);
 | 
						void		(*cpu_kick)(int cpu, unsigned long pc);
 | 
				
			||||||
	void		(*ipi_send)(int cpu);
 | 
						void		(*ipi_send)(int cpu);
 | 
				
			||||||
	void		(*ipi_clear)(int irq);
 | 
						void		(*ipi_clear)(int irq);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -112,7 +112,6 @@ struct unwind_frame_info {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern int arc_unwind(struct unwind_frame_info *frame);
 | 
					extern int arc_unwind(struct unwind_frame_info *frame);
 | 
				
			||||||
extern void arc_unwind_init(void);
 | 
					extern void arc_unwind_init(void);
 | 
				
			||||||
extern void arc_unwind_setup(void);
 | 
					 | 
				
			||||||
extern void *unwind_add_table(struct module *module, const void *table_start,
 | 
					extern void *unwind_add_table(struct module *module, const void *table_start,
 | 
				
			||||||
			      unsigned long table_size);
 | 
								      unsigned long table_size);
 | 
				
			||||||
extern void unwind_remove_table(void *handle, int init_only);
 | 
					extern void unwind_remove_table(void *handle, int init_only);
 | 
				
			||||||
| 
						 | 
					@ -152,9 +151,6 @@ static inline void arc_unwind_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline void arc_unwind_setup(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
#define unwind_add_table(a, b, c)
 | 
					#define unwind_add_table(a, b, c)
 | 
				
			||||||
#define unwind_remove_table(a, b)
 | 
					#define unwind_remove_table(a, b)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -58,8 +58,6 @@ __switch_to(struct task_struct *prev_task, struct task_struct *next_task)
 | 
				
			||||||
		"st      sp, [r24]       \n\t"
 | 
							"st      sp, [r24]       \n\t"
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		"sync   \n\t"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		/*
 | 
							/*
 | 
				
			||||||
		 * setup _current_task with incoming tsk.
 | 
							 * setup _current_task with incoming tsk.
 | 
				
			||||||
		 * optionally, set r25 to that as well
 | 
							 * optionally, set r25 to that as well
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -44,9 +44,6 @@ __switch_to:
 | 
				
			||||||
	* don't need to do anything special to return it
 | 
						* don't need to do anything special to return it
 | 
				
			||||||
	*/
 | 
						*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* hardware memory barrier */
 | 
					 | 
				
			||||||
	sync
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
	 * switch to new task, contained in r1
 | 
						 * switch to new task, contained in r1
 | 
				
			||||||
	 * Temp reg r3 is required to get the ptr to store val
 | 
						 * Temp reg r3 is required to get the ptr to store val
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -106,10 +106,21 @@ static struct irq_chip arcv2_irq_chip = {
 | 
				
			||||||
static int arcv2_irq_map(struct irq_domain *d, unsigned int irq,
 | 
					static int arcv2_irq_map(struct irq_domain *d, unsigned int irq,
 | 
				
			||||||
			 irq_hw_number_t hw)
 | 
								 irq_hw_number_t hw)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (irq == TIMER0_IRQ || irq == IPI_IRQ)
 | 
						/*
 | 
				
			||||||
 | 
						 * core intc IRQs [16, 23]:
 | 
				
			||||||
 | 
						 * Statically assigned always private-per-core (Timers, WDT, IPI, PCT)
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						if (hw < 24) {
 | 
				
			||||||
 | 
							/*
 | 
				
			||||||
 | 
							 * A subsequent request_percpu_irq() fails if percpu_devid is
 | 
				
			||||||
 | 
							 * not set. That in turns sets NOAUTOEN, meaning each core needs
 | 
				
			||||||
 | 
							 * to call enable_percpu_irq()
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							irq_set_percpu_devid(irq);
 | 
				
			||||||
		irq_set_chip_and_handler(irq, &arcv2_irq_chip, handle_percpu_irq);
 | 
							irq_set_chip_and_handler(irq, &arcv2_irq_chip, handle_percpu_irq);
 | 
				
			||||||
	else
 | 
						} else {
 | 
				
			||||||
		irq_set_chip_and_handler(irq, &arcv2_irq_chip, handle_level_irq);
 | 
							irq_set_chip_and_handler(irq, &arcv2_irq_chip, handle_level_irq);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -29,11 +29,11 @@ void __init init_IRQ(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_SMP
 | 
					#ifdef CONFIG_SMP
 | 
				
			||||||
	/* a SMP H/w block could do IPI IRQ request here */
 | 
						/* a SMP H/w block could do IPI IRQ request here */
 | 
				
			||||||
	if (plat_smp_ops.init_irq_cpu)
 | 
						if (plat_smp_ops.init_per_cpu)
 | 
				
			||||||
		plat_smp_ops.init_irq_cpu(smp_processor_id());
 | 
							plat_smp_ops.init_per_cpu(smp_processor_id());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (machine_desc->init_cpu_smp)
 | 
						if (machine_desc->init_per_cpu)
 | 
				
			||||||
		machine_desc->init_cpu_smp(smp_processor_id());
 | 
							machine_desc->init_per_cpu(smp_processor_id());
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -51,6 +51,18 @@ void arch_do_IRQ(unsigned int irq, struct pt_regs *regs)
 | 
				
			||||||
	set_irq_regs(old_regs);
 | 
						set_irq_regs(old_regs);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * API called for requesting percpu interrupts - called by each CPU
 | 
				
			||||||
 | 
					 *  - For boot CPU, actually request the IRQ with genirq core + enables
 | 
				
			||||||
 | 
					 *  - For subsequent callers only enable called locally
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Relies on being called by boot cpu first (i.e. request called ahead) of
 | 
				
			||||||
 | 
					 * any enable as expected by genirq. Hence Suitable only for TIMER, IPI
 | 
				
			||||||
 | 
					 * which are guaranteed to be setup on boot core first.
 | 
				
			||||||
 | 
					 * Late probed peripherals such as perf can't use this as there no guarantee
 | 
				
			||||||
 | 
					 * of being called on boot CPU first.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void arc_request_percpu_irq(int irq, int cpu,
 | 
					void arc_request_percpu_irq(int irq, int cpu,
 | 
				
			||||||
                            irqreturn_t (*isr)(int irq, void *dev),
 | 
					                            irqreturn_t (*isr)(int irq, void *dev),
 | 
				
			||||||
                            const char *irq_nm,
 | 
					                            const char *irq_nm,
 | 
				
			||||||
| 
						 | 
					@ -60,14 +72,17 @@ void arc_request_percpu_irq(int irq, int cpu,
 | 
				
			||||||
	if (!cpu) {
 | 
						if (!cpu) {
 | 
				
			||||||
		int rc;
 | 
							int rc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef CONFIG_ISA_ARCOMPACT
 | 
				
			||||||
		/*
 | 
							/*
 | 
				
			||||||
		 * These 2 calls are essential to making percpu IRQ APIs work
 | 
							 * A subsequent request_percpu_irq() fails if percpu_devid is
 | 
				
			||||||
		 * Ideally these details could be hidden in irq chip map function
 | 
							 * not set. That in turns sets NOAUTOEN, meaning each core needs
 | 
				
			||||||
		 * but the issue is IPIs IRQs being static (non-DT) and platform
 | 
							 * to call enable_percpu_irq()
 | 
				
			||||||
		 * specific, so we can't identify them there.
 | 
							 *
 | 
				
			||||||
 | 
							 * For ARCv2, this is done in irq map function since we know
 | 
				
			||||||
 | 
							 * which irqs are strictly per cpu
 | 
				
			||||||
		 */
 | 
							 */
 | 
				
			||||||
		irq_set_percpu_devid(irq);
 | 
							irq_set_percpu_devid(irq);
 | 
				
			||||||
		irq_modify_status(irq, IRQ_NOAUTOEN, 0);  /* @irq, @clr, @set */
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		rc = request_percpu_irq(irq, isr, irq_nm, percpu_dev);
 | 
							rc = request_percpu_irq(irq, isr, irq_nm, percpu_dev);
 | 
				
			||||||
		if (rc)
 | 
							if (rc)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -132,7 +132,7 @@ static void mcip_probe_n_setup(void)
 | 
				
			||||||
struct plat_smp_ops plat_smp_ops = {
 | 
					struct plat_smp_ops plat_smp_ops = {
 | 
				
			||||||
	.info		= smp_cpuinfo_buf,
 | 
						.info		= smp_cpuinfo_buf,
 | 
				
			||||||
	.init_early_smp	= mcip_probe_n_setup,
 | 
						.init_early_smp	= mcip_probe_n_setup,
 | 
				
			||||||
	.init_irq_cpu	= mcip_setup_per_cpu,
 | 
						.init_per_cpu	= mcip_setup_per_cpu,
 | 
				
			||||||
	.ipi_send	= mcip_ipi_send,
 | 
						.ipi_send	= mcip_ipi_send,
 | 
				
			||||||
	.ipi_clear	= mcip_ipi_clear,
 | 
						.ipi_clear	= mcip_ipi_clear,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -428,12 +428,11 @@ static irqreturn_t arc_pmu_intr(int irq, void *dev)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* CONFIG_ISA_ARCV2 */
 | 
					#endif /* CONFIG_ISA_ARCV2 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void arc_cpu_pmu_irq_init(void)
 | 
					static void arc_cpu_pmu_irq_init(void *data)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct arc_pmu_cpu *pmu_cpu = this_cpu_ptr(&arc_pmu_cpu);
 | 
						int irq = *(int *)data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	arc_request_percpu_irq(arc_pmu->irq, smp_processor_id(), arc_pmu_intr,
 | 
						enable_percpu_irq(irq, IRQ_TYPE_NONE);
 | 
				
			||||||
			       "ARC perf counters", pmu_cpu);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Clear all pending interrupt flags */
 | 
						/* Clear all pending interrupt flags */
 | 
				
			||||||
	write_aux_reg(ARC_REG_PCT_INT_ACT, 0xffffffff);
 | 
						write_aux_reg(ARC_REG_PCT_INT_ACT, 0xffffffff);
 | 
				
			||||||
| 
						 | 
					@ -515,7 +514,6 @@ static int arc_pmu_device_probe(struct platform_device *pdev)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (has_interrupts) {
 | 
						if (has_interrupts) {
 | 
				
			||||||
		int irq = platform_get_irq(pdev, 0);
 | 
							int irq = platform_get_irq(pdev, 0);
 | 
				
			||||||
		unsigned long flags;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (irq < 0) {
 | 
							if (irq < 0) {
 | 
				
			||||||
			pr_err("Cannot get IRQ number for the platform\n");
 | 
								pr_err("Cannot get IRQ number for the platform\n");
 | 
				
			||||||
| 
						 | 
					@ -524,24 +522,12 @@ static int arc_pmu_device_probe(struct platform_device *pdev)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		arc_pmu->irq = irq;
 | 
							arc_pmu->irq = irq;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/*
 | 
							/* intc map function ensures irq_set_percpu_devid() called */
 | 
				
			||||||
		 * arc_cpu_pmu_irq_init() needs to be called on all cores for
 | 
							request_percpu_irq(irq, arc_pmu_intr, "ARC perf counters",
 | 
				
			||||||
		 * their respective local PMU.
 | 
									   this_cpu_ptr(&arc_pmu_cpu));
 | 
				
			||||||
		 * However we use opencoded on_each_cpu() to ensure it is called
 | 
					
 | 
				
			||||||
		 * on core0 first, so that arc_request_percpu_irq() sets up
 | 
							on_each_cpu(arc_cpu_pmu_irq_init, &irq, 1);
 | 
				
			||||||
		 * AUTOEN etc. Otherwise enable_percpu_irq() fails to enable
 | 
					 | 
				
			||||||
		 * perf IRQ on non master cores.
 | 
					 | 
				
			||||||
		 * see arc_request_percpu_irq()
 | 
					 | 
				
			||||||
		 */
 | 
					 | 
				
			||||||
		preempt_disable();
 | 
					 | 
				
			||||||
		local_irq_save(flags);
 | 
					 | 
				
			||||||
		arc_cpu_pmu_irq_init();
 | 
					 | 
				
			||||||
		local_irq_restore(flags);
 | 
					 | 
				
			||||||
		smp_call_function((smp_call_func_t)arc_cpu_pmu_irq_init, 0, 1);
 | 
					 | 
				
			||||||
		preempt_enable();
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Clean all pending interrupt flags */
 | 
					 | 
				
			||||||
		write_aux_reg(ARC_REG_PCT_INT_ACT, 0xffffffff);
 | 
					 | 
				
			||||||
	} else
 | 
						} else
 | 
				
			||||||
		arc_pmu->pmu.capabilities |= PERF_PMU_CAP_NO_INTERRUPT;
 | 
							arc_pmu->pmu.capabilities |= PERF_PMU_CAP_NO_INTERRUPT;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -44,11 +44,10 @@ SYSCALL_DEFINE0(arc_gettls)
 | 
				
			||||||
void arch_cpu_idle(void)
 | 
					void arch_cpu_idle(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/* sleep, but enable all interrupts before committing */
 | 
						/* sleep, but enable all interrupts before committing */
 | 
				
			||||||
	if (is_isa_arcompact()) {
 | 
						__asm__ __volatile__(
 | 
				
			||||||
		__asm__("sleep 0x3");
 | 
							"sleep %0	\n"
 | 
				
			||||||
	} else {
 | 
							:
 | 
				
			||||||
		__asm__("sleep 0x10");
 | 
							:"I"(ISA_SLEEP_ARG)); /* can't be "r" has to be embedded const */
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
asmlinkage void ret_from_fork(void);
 | 
					asmlinkage void ret_from_fork(void);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -429,7 +429,6 @@ void __init setup_arch(char **cmdline_p)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	arc_unwind_init();
 | 
						arc_unwind_init();
 | 
				
			||||||
	arc_unwind_setup();
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int __init customize_machine(void)
 | 
					static int __init customize_machine(void)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -132,11 +132,11 @@ void start_kernel_secondary(void)
 | 
				
			||||||
	pr_info("## CPU%u LIVE ##: Executing Code...\n", cpu);
 | 
						pr_info("## CPU%u LIVE ##: Executing Code...\n", cpu);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Some SMP H/w setup - for each cpu */
 | 
						/* Some SMP H/w setup - for each cpu */
 | 
				
			||||||
	if (plat_smp_ops.init_irq_cpu)
 | 
						if (plat_smp_ops.init_per_cpu)
 | 
				
			||||||
		plat_smp_ops.init_irq_cpu(cpu);
 | 
							plat_smp_ops.init_per_cpu(cpu);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (machine_desc->init_cpu_smp)
 | 
						if (machine_desc->init_per_cpu)
 | 
				
			||||||
		machine_desc->init_cpu_smp(cpu);
 | 
							machine_desc->init_per_cpu(cpu);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	arc_local_timer_setup();
 | 
						arc_local_timer_setup();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -170,6 +170,23 @@ static struct unwind_table *find_table(unsigned long pc)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static unsigned long read_pointer(const u8 **pLoc,
 | 
					static unsigned long read_pointer(const u8 **pLoc,
 | 
				
			||||||
				  const void *end, signed ptrType);
 | 
									  const void *end, signed ptrType);
 | 
				
			||||||
 | 
					static void init_unwind_hdr(struct unwind_table *table,
 | 
				
			||||||
 | 
								    void *(*alloc) (unsigned long));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * wrappers for header alloc (vs. calling one vs. other at call site)
 | 
				
			||||||
 | 
					 * to elide section mismatches warnings
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					static void *__init unw_hdr_alloc_early(unsigned long sz)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return __alloc_bootmem_nopanic(sz, sizeof(unsigned int),
 | 
				
			||||||
 | 
									       MAX_DMA_ADDRESS);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void *unw_hdr_alloc(unsigned long sz)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return kmalloc(sz, GFP_KERNEL);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void init_unwind_table(struct unwind_table *table, const char *name,
 | 
					static void init_unwind_table(struct unwind_table *table, const char *name,
 | 
				
			||||||
			      const void *core_start, unsigned long core_size,
 | 
								      const void *core_start, unsigned long core_size,
 | 
				
			||||||
| 
						 | 
					@ -209,6 +226,8 @@ void __init arc_unwind_init(void)
 | 
				
			||||||
			  __start_unwind, __end_unwind - __start_unwind,
 | 
								  __start_unwind, __end_unwind - __start_unwind,
 | 
				
			||||||
			  NULL, 0);
 | 
								  NULL, 0);
 | 
				
			||||||
	  /*__start_unwind_hdr, __end_unwind_hdr - __start_unwind_hdr);*/
 | 
						  /*__start_unwind_hdr, __end_unwind_hdr - __start_unwind_hdr);*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						init_unwind_hdr(&root_table, unw_hdr_alloc_early);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const u32 bad_cie, not_fde;
 | 
					static const u32 bad_cie, not_fde;
 | 
				
			||||||
| 
						 | 
					@ -241,7 +260,7 @@ static void swap_eh_frame_hdr_table_entries(void *p1, void *p2, int size)
 | 
				
			||||||
	e2->fde = v;
 | 
						e2->fde = v;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void __init setup_unwind_table(struct unwind_table *table,
 | 
					static void init_unwind_hdr(struct unwind_table *table,
 | 
				
			||||||
			    void *(*alloc) (unsigned long))
 | 
								    void *(*alloc) (unsigned long))
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	const u8 *ptr;
 | 
						const u8 *ptr;
 | 
				
			||||||
| 
						 | 
					@ -274,13 +293,13 @@ static void __init setup_unwind_table(struct unwind_table *table,
 | 
				
			||||||
		const u32 *cie = cie_for_fde(fde, table);
 | 
							const u32 *cie = cie_for_fde(fde, table);
 | 
				
			||||||
		signed ptrType;
 | 
							signed ptrType;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (cie == ¬_fde)
 | 
							if (cie == ¬_fde)	/* only process FDE here */
 | 
				
			||||||
			continue;
 | 
								continue;
 | 
				
			||||||
		if (cie == NULL || cie == &bad_cie)
 | 
							if (cie == NULL || cie == &bad_cie)
 | 
				
			||||||
			return;
 | 
								continue;	/* say FDE->CIE.version != 1 */
 | 
				
			||||||
		ptrType = fde_pointer_type(cie);
 | 
							ptrType = fde_pointer_type(cie);
 | 
				
			||||||
		if (ptrType < 0)
 | 
							if (ptrType < 0)
 | 
				
			||||||
			return;
 | 
								continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ptr = (const u8 *)(fde + 2);
 | 
							ptr = (const u8 *)(fde + 2);
 | 
				
			||||||
		if (!read_pointer(&ptr, (const u8 *)(fde + 1) + *fde,
 | 
							if (!read_pointer(&ptr, (const u8 *)(fde + 1) + *fde,
 | 
				
			||||||
| 
						 | 
					@ -300,9 +319,11 @@ static void __init setup_unwind_table(struct unwind_table *table,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	hdrSize = 4 + sizeof(unsigned long) + sizeof(unsigned int)
 | 
						hdrSize = 4 + sizeof(unsigned long) + sizeof(unsigned int)
 | 
				
			||||||
	    + 2 * n * sizeof(unsigned long);
 | 
						    + 2 * n * sizeof(unsigned long);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	header = alloc(hdrSize);
 | 
						header = alloc(hdrSize);
 | 
				
			||||||
	if (!header)
 | 
						if (!header)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	header->version = 1;
 | 
						header->version = 1;
 | 
				
			||||||
	header->eh_frame_ptr_enc = DW_EH_PE_abs | DW_EH_PE_native;
 | 
						header->eh_frame_ptr_enc = DW_EH_PE_abs | DW_EH_PE_native;
 | 
				
			||||||
	header->fde_count_enc = DW_EH_PE_abs | DW_EH_PE_data4;
 | 
						header->fde_count_enc = DW_EH_PE_abs | DW_EH_PE_data4;
 | 
				
			||||||
| 
						 | 
					@ -322,6 +343,10 @@ static void __init setup_unwind_table(struct unwind_table *table,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (fde[1] == 0xffffffff)
 | 
							if (fde[1] == 0xffffffff)
 | 
				
			||||||
			continue;	/* this is a CIE */
 | 
								continue;	/* this is a CIE */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (*(u8 *)(cie + 2) != 1)
 | 
				
			||||||
 | 
								continue;	/* FDE->CIE.version not supported */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ptr = (const u8 *)(fde + 2);
 | 
							ptr = (const u8 *)(fde + 2);
 | 
				
			||||||
		header->table[n].start = read_pointer(&ptr,
 | 
							header->table[n].start = read_pointer(&ptr,
 | 
				
			||||||
						      (const u8 *)(fde + 1) +
 | 
											      (const u8 *)(fde + 1) +
 | 
				
			||||||
| 
						 | 
					@ -342,18 +367,6 @@ static void __init setup_unwind_table(struct unwind_table *table,
 | 
				
			||||||
	table->header = (const void *)header;
 | 
						table->header = (const void *)header;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void *__init balloc(unsigned long sz)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	return __alloc_bootmem_nopanic(sz,
 | 
					 | 
				
			||||||
				       sizeof(unsigned int),
 | 
					 | 
				
			||||||
				       __pa(MAX_DMA_ADDRESS));
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void __init arc_unwind_setup(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	setup_unwind_table(&root_table, balloc);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef CONFIG_MODULES
 | 
					#ifdef CONFIG_MODULES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct unwind_table *last_table;
 | 
					static struct unwind_table *last_table;
 | 
				
			||||||
| 
						 | 
					@ -377,6 +390,8 @@ void *unwind_add_table(struct module *module, const void *table_start,
 | 
				
			||||||
			  table_start, table_size,
 | 
								  table_start, table_size,
 | 
				
			||||||
			  NULL, 0);
 | 
								  NULL, 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						init_unwind_hdr(table, unw_hdr_alloc);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef UNWIND_DEBUG
 | 
					#ifdef UNWIND_DEBUG
 | 
				
			||||||
	unw_debug("Table added for [%s] %lx %lx\n",
 | 
						unw_debug("Table added for [%s] %lx %lx\n",
 | 
				
			||||||
		module->name, table->core.pc, table->core.range);
 | 
							module->name, table->core.pc, table->core.range);
 | 
				
			||||||
| 
						 | 
					@ -439,6 +454,7 @@ void unwind_remove_table(void *handle, int init_only)
 | 
				
			||||||
	info.init_only = init_only;
 | 
						info.init_only = init_only;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	unlink_table(&info); /* XXX: SMP */
 | 
						unlink_table(&info); /* XXX: SMP */
 | 
				
			||||||
 | 
						kfree(table->header);
 | 
				
			||||||
	kfree(table);
 | 
						kfree(table);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -507,7 +523,8 @@ static const u32 *cie_for_fde(const u32 *fde, const struct unwind_table *table)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (*cie <= sizeof(*cie) + 4 || *cie >= fde[1] - sizeof(*fde)
 | 
						if (*cie <= sizeof(*cie) + 4 || *cie >= fde[1] - sizeof(*fde)
 | 
				
			||||||
	    || (*cie & (sizeof(*cie) - 1))
 | 
						    || (*cie & (sizeof(*cie) - 1))
 | 
				
			||||||
	    || (cie[1] != 0xffffffff))
 | 
						    || (cie[1] != 0xffffffff)
 | 
				
			||||||
 | 
						    || ( *(u8 *)(cie + 2) != 1))   /* version 1 supported */
 | 
				
			||||||
		return NULL;	/* this is not a (valid) CIE */
 | 
							return NULL;	/* this is not a (valid) CIE */
 | 
				
			||||||
	return cie;
 | 
						return cie;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -986,42 +1003,13 @@ int arc_unwind(struct unwind_frame_info *frame)
 | 
				
			||||||
							    (const u8 *)(fde +
 | 
												    (const u8 *)(fde +
 | 
				
			||||||
									 1) +
 | 
														 1) +
 | 
				
			||||||
							    *fde, ptrType);
 | 
												    *fde, ptrType);
 | 
				
			||||||
				if (pc >= endLoc)
 | 
									if (pc >= endLoc) {
 | 
				
			||||||
					fde = NULL;
 | 
										fde = NULL;
 | 
				
			||||||
			} else
 | 
					 | 
				
			||||||
				fde = NULL;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		if (fde == NULL) {
 | 
					 | 
				
			||||||
			for (fde = table->address, tableSize = table->size;
 | 
					 | 
				
			||||||
			     cie = NULL, tableSize > sizeof(*fde)
 | 
					 | 
				
			||||||
			     && tableSize - sizeof(*fde) >= *fde;
 | 
					 | 
				
			||||||
			     tableSize -= sizeof(*fde) + *fde,
 | 
					 | 
				
			||||||
			     fde += 1 + *fde / sizeof(*fde)) {
 | 
					 | 
				
			||||||
				cie = cie_for_fde(fde, table);
 | 
					 | 
				
			||||||
				if (cie == &bad_cie) {
 | 
					 | 
				
			||||||
					cie = NULL;
 | 
										cie = NULL;
 | 
				
			||||||
					break;
 | 
					 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				if (cie == NULL
 | 
								} else {
 | 
				
			||||||
				    || cie == ¬_fde
 | 
									fde = NULL;
 | 
				
			||||||
				    || (ptrType = fde_pointer_type(cie)) < 0)
 | 
									cie = NULL;
 | 
				
			||||||
					continue;
 | 
					 | 
				
			||||||
				ptr = (const u8 *)(fde + 2);
 | 
					 | 
				
			||||||
				startLoc = read_pointer(&ptr,
 | 
					 | 
				
			||||||
							(const u8 *)(fde + 1) +
 | 
					 | 
				
			||||||
							*fde, ptrType);
 | 
					 | 
				
			||||||
				if (!startLoc)
 | 
					 | 
				
			||||||
					continue;
 | 
					 | 
				
			||||||
				if (!(ptrType & DW_EH_PE_indirect))
 | 
					 | 
				
			||||||
					ptrType &=
 | 
					 | 
				
			||||||
					    DW_EH_PE_FORM | DW_EH_PE_signed;
 | 
					 | 
				
			||||||
				endLoc =
 | 
					 | 
				
			||||||
				    startLoc + read_pointer(&ptr,
 | 
					 | 
				
			||||||
							    (const u8 *)(fde +
 | 
					 | 
				
			||||||
									 1) +
 | 
					 | 
				
			||||||
							    *fde, ptrType);
 | 
					 | 
				
			||||||
				if (pc >= startLoc && pc < endLoc)
 | 
					 | 
				
			||||||
					break;
 | 
					 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -51,7 +51,9 @@ void __init early_init_dt_add_memory_arch(u64 base, u64 size)
 | 
				
			||||||
	int in_use = 0;
 | 
						int in_use = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!low_mem_sz) {
 | 
						if (!low_mem_sz) {
 | 
				
			||||||
		BUG_ON(base != low_mem_start);
 | 
							if (base != low_mem_start)
 | 
				
			||||||
 | 
								panic("CONFIG_LINUX_LINK_BASE != DT memory { }");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		low_mem_sz = size;
 | 
							low_mem_sz = size;
 | 
				
			||||||
		in_use = 1;
 | 
							in_use = 1;
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -619,10 +619,10 @@ void update_mmu_cache(struct vm_area_struct *vma, unsigned long vaddr_unaligned,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		int dirty = !test_and_set_bit(PG_dc_clean, &page->flags);
 | 
							int dirty = !test_and_set_bit(PG_dc_clean, &page->flags);
 | 
				
			||||||
		if (dirty) {
 | 
							if (dirty) {
 | 
				
			||||||
			/* wback + inv dcache lines */
 | 
								/* wback + inv dcache lines (K-mapping) */
 | 
				
			||||||
			__flush_dcache_page(paddr, paddr);
 | 
								__flush_dcache_page(paddr, paddr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			/* invalidate any existing icache lines */
 | 
								/* invalidate any existing icache lines (U-mapping) */
 | 
				
			||||||
			if (vma->vm_flags & VM_EXEC)
 | 
								if (vma->vm_flags & VM_EXEC)
 | 
				
			||||||
				__inv_icache_page(paddr, vaddr);
 | 
									__inv_icache_page(paddr, vaddr);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -76,6 +76,8 @@ config ARM
 | 
				
			||||||
	select IRQ_FORCED_THREADING
 | 
						select IRQ_FORCED_THREADING
 | 
				
			||||||
	select MODULES_USE_ELF_REL
 | 
						select MODULES_USE_ELF_REL
 | 
				
			||||||
	select NO_BOOTMEM
 | 
						select NO_BOOTMEM
 | 
				
			||||||
 | 
						select OF_EARLY_FLATTREE if OF
 | 
				
			||||||
 | 
						select OF_RESERVED_MEM if OF
 | 
				
			||||||
	select OLD_SIGACTION
 | 
						select OLD_SIGACTION
 | 
				
			||||||
	select OLD_SIGSUSPEND3
 | 
						select OLD_SIGSUSPEND3
 | 
				
			||||||
	select PERF_USE_VMALLOC
 | 
						select PERF_USE_VMALLOC
 | 
				
			||||||
| 
						 | 
					@ -1822,8 +1824,6 @@ config USE_OF
 | 
				
			||||||
	bool "Flattened Device Tree support"
 | 
						bool "Flattened Device Tree support"
 | 
				
			||||||
	select IRQ_DOMAIN
 | 
						select IRQ_DOMAIN
 | 
				
			||||||
	select OF
 | 
						select OF
 | 
				
			||||||
	select OF_EARLY_FLATTREE
 | 
					 | 
				
			||||||
	select OF_RESERVED_MEM
 | 
					 | 
				
			||||||
	help
 | 
						help
 | 
				
			||||||
	  Include support for flattened device tree machine descriptions.
 | 
						  Include support for flattened device tree machine descriptions.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -74,7 +74,7 @@ global_timer: timer@48240200 {
 | 
				
			||||||
		reg = <0x48240200 0x100>;
 | 
							reg = <0x48240200 0x100>;
 | 
				
			||||||
		interrupts = <GIC_PPI 11 IRQ_TYPE_LEVEL_HIGH>;
 | 
							interrupts = <GIC_PPI 11 IRQ_TYPE_LEVEL_HIGH>;
 | 
				
			||||||
		interrupt-parent = <&gic>;
 | 
							interrupt-parent = <&gic>;
 | 
				
			||||||
		clocks = <&dpll_mpu_m2_ck>;
 | 
							clocks = <&mpu_periphclk>;
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local_timer: timer@48240600 {
 | 
						local_timer: timer@48240600 {
 | 
				
			||||||
| 
						 | 
					@ -82,7 +82,7 @@ local_timer: timer@48240600 {
 | 
				
			||||||
		reg = <0x48240600 0x100>;
 | 
							reg = <0x48240600 0x100>;
 | 
				
			||||||
		interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_HIGH>;
 | 
							interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_HIGH>;
 | 
				
			||||||
		interrupt-parent = <&gic>;
 | 
							interrupt-parent = <&gic>;
 | 
				
			||||||
		clocks = <&dpll_mpu_m2_ck>;
 | 
							clocks = <&mpu_periphclk>;
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	l2-cache-controller@48242000 {
 | 
						l2-cache-controller@48242000 {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -259,6 +259,14 @@ dpll_mpu_m2_ck: dpll_mpu_m2_ck {
 | 
				
			||||||
		ti,invert-autoidle-bit;
 | 
							ti,invert-autoidle-bit;
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						mpu_periphclk: mpu_periphclk {
 | 
				
			||||||
 | 
							#clock-cells = <0>;
 | 
				
			||||||
 | 
							compatible = "fixed-factor-clock";
 | 
				
			||||||
 | 
							clocks = <&dpll_mpu_m2_ck>;
 | 
				
			||||||
 | 
							clock-mult = <1>;
 | 
				
			||||||
 | 
							clock-div = <2>;
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	dpll_ddr_ck: dpll_ddr_ck {
 | 
						dpll_ddr_ck: dpll_ddr_ck {
 | 
				
			||||||
		#clock-cells = <0>;
 | 
							#clock-cells = <0>;
 | 
				
			||||||
		compatible = "ti,am3-dpll-clock";
 | 
							compatible = "ti,am3-dpll-clock";
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -604,6 +604,7 @@ mcp_rtc: rtc@6f {
 | 
				
			||||||
		reg = <0x6f>;
 | 
							reg = <0x6f>;
 | 
				
			||||||
		interrupts-extended = <&crossbar_mpu GIC_SPI 2 IRQ_TYPE_EDGE_RISING>,
 | 
							interrupts-extended = <&crossbar_mpu GIC_SPI 2 IRQ_TYPE_EDGE_RISING>,
 | 
				
			||||||
				      <&dra7_pmx_core 0x424>;
 | 
									      <&dra7_pmx_core 0x424>;
 | 
				
			||||||
 | 
							interrupt-names = "irq", "wakeup";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		pinctrl-names = "default";
 | 
							pinctrl-names = "default";
 | 
				
			||||||
		pinctrl-0 = <&mcp79410_pins_default>;
 | 
							pinctrl-0 = <&mcp79410_pins_default>;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -155,21 +155,21 @@ keyswitch_in {
 | 
				
			||||||
			label = "keyswitch_in";
 | 
								label = "keyswitch_in";
 | 
				
			||||||
			gpios = <&pioB 1 GPIO_ACTIVE_HIGH>;
 | 
								gpios = <&pioB 1 GPIO_ACTIVE_HIGH>;
 | 
				
			||||||
			linux,code = <28>;
 | 
								linux,code = <28>;
 | 
				
			||||||
			gpio-key,wakeup;
 | 
								wakeup-source;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		error_in {
 | 
							error_in {
 | 
				
			||||||
			label = "error_in";
 | 
								label = "error_in";
 | 
				
			||||||
			gpios = <&pioB 2 GPIO_ACTIVE_HIGH>;
 | 
								gpios = <&pioB 2 GPIO_ACTIVE_HIGH>;
 | 
				
			||||||
			linux,code = <29>;
 | 
								linux,code = <29>;
 | 
				
			||||||
			gpio-key,wakeup;
 | 
								wakeup-source;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		btn {
 | 
							btn {
 | 
				
			||||||
			label = "btn";
 | 
								label = "btn";
 | 
				
			||||||
			gpios = <&pioC 23 GPIO_ACTIVE_HIGH>;
 | 
								gpios = <&pioC 23 GPIO_ACTIVE_HIGH>;
 | 
				
			||||||
			linux,code = <31>;
 | 
								linux,code = <31>;
 | 
				
			||||||
			gpio-key,wakeup;
 | 
								wakeup-source;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -498,6 +498,7 @@ eth0: ethernet@70000 {
 | 
				
			||||||
				reg = <0x70000 0x4000>;
 | 
									reg = <0x70000 0x4000>;
 | 
				
			||||||
				interrupts-extended = <&mpic 8>;
 | 
									interrupts-extended = <&mpic 8>;
 | 
				
			||||||
				clocks = <&gateclk 4>;
 | 
									clocks = <&gateclk 4>;
 | 
				
			||||||
 | 
									tx-csum-limit = <9800>;
 | 
				
			||||||
				status = "disabled";
 | 
									status = "disabled";
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -159,7 +159,7 @@ btn {
 | 
				
			||||||
			label = "Button";
 | 
								label = "Button";
 | 
				
			||||||
			gpios = <&pioC 4 GPIO_ACTIVE_LOW>;
 | 
								gpios = <&pioC 4 GPIO_ACTIVE_LOW>;
 | 
				
			||||||
			linux,code = <0x103>;
 | 
								linux,code = <0x103>;
 | 
				
			||||||
			gpio-key,wakeup;
 | 
								wakeup-source;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -24,15 +24,6 @@ memory {
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	clocks {
 | 
						clocks {
 | 
				
			||||||
		#address-cells = <1>;
 | 
					 | 
				
			||||||
		#size-cells = <1>;
 | 
					 | 
				
			||||||
		ranges;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		main_clock: clock@0 {
 | 
					 | 
				
			||||||
			compatible = "atmel,osc", "fixed-clock";
 | 
					 | 
				
			||||||
			clock-frequency = <18432000>;
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		main_xtal {
 | 
							main_xtal {
 | 
				
			||||||
			clock-frequency = <18432000>;
 | 
								clock-frequency = <18432000>;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
| 
						 | 
					@ -94,14 +85,14 @@ reset {
 | 
				
			||||||
			label = "PB_RST";
 | 
								label = "PB_RST";
 | 
				
			||||||
			gpios = <&pioB 30 GPIO_ACTIVE_HIGH>;
 | 
								gpios = <&pioB 30 GPIO_ACTIVE_HIGH>;
 | 
				
			||||||
			linux,code = <0x100>;
 | 
								linux,code = <0x100>;
 | 
				
			||||||
			gpio-key,wakeup;
 | 
								wakeup-source;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		user {
 | 
							user {
 | 
				
			||||||
			label = "PB_USER";
 | 
								label = "PB_USER";
 | 
				
			||||||
			gpios = <&pioB 31 GPIO_ACTIVE_HIGH>;
 | 
								gpios = <&pioB 31 GPIO_ACTIVE_HIGH>;
 | 
				
			||||||
			linux,code = <0x101>;
 | 
								linux,code = <0x101>;
 | 
				
			||||||
			gpio-key,wakeup;
 | 
								wakeup-source;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -171,21 +171,21 @@ prog {
 | 
				
			||||||
			label = "PB_PROG";
 | 
								label = "PB_PROG";
 | 
				
			||||||
			gpios = <&pioE 27 GPIO_ACTIVE_LOW>;
 | 
								gpios = <&pioE 27 GPIO_ACTIVE_LOW>;
 | 
				
			||||||
			linux,code = <0x102>;
 | 
								linux,code = <0x102>;
 | 
				
			||||||
			gpio-key,wakeup;
 | 
								wakeup-source;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		reset {
 | 
							reset {
 | 
				
			||||||
			label = "PB_RST";
 | 
								label = "PB_RST";
 | 
				
			||||||
			gpios = <&pioE 29 GPIO_ACTIVE_LOW>;
 | 
								gpios = <&pioE 29 GPIO_ACTIVE_LOW>;
 | 
				
			||||||
			linux,code = <0x100>;
 | 
								linux,code = <0x100>;
 | 
				
			||||||
			gpio-key,wakeup;
 | 
								wakeup-source;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		user {
 | 
							user {
 | 
				
			||||||
			label = "PB_USER";
 | 
								label = "PB_USER";
 | 
				
			||||||
			gpios = <&pioE 31 GPIO_ACTIVE_HIGH>;
 | 
								gpios = <&pioE 31 GPIO_ACTIVE_HIGH>;
 | 
				
			||||||
			linux,code = <0x101>;
 | 
								linux,code = <0x101>;
 | 
				
			||||||
			gpio-key,wakeup;
 | 
								wakeup-source;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -98,14 +98,14 @@ prog {
 | 
				
			||||||
			label = "PB_PROG";
 | 
								label = "PB_PROG";
 | 
				
			||||||
			gpios = <&pioC 17 GPIO_ACTIVE_LOW>;
 | 
								gpios = <&pioC 17 GPIO_ACTIVE_LOW>;
 | 
				
			||||||
			linux,code = <0x102>;
 | 
								linux,code = <0x102>;
 | 
				
			||||||
			gpio-key,wakeup;
 | 
								wakeup-source;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		reset {
 | 
							reset {
 | 
				
			||||||
			label = "PB_RST";
 | 
								label = "PB_RST";
 | 
				
			||||||
			gpios = <&pioC 16 GPIO_ACTIVE_LOW>;
 | 
								gpios = <&pioC 16 GPIO_ACTIVE_LOW>;
 | 
				
			||||||
			linux,code = <0x100>;
 | 
								linux,code = <0x100>;
 | 
				
			||||||
			gpio-key,wakeup;
 | 
								wakeup-source;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -183,7 +183,7 @@ user_pb {
 | 
				
			||||||
			label = "user_pb";
 | 
								label = "user_pb";
 | 
				
			||||||
			gpios = <&pioB 10 GPIO_ACTIVE_LOW>;
 | 
								gpios = <&pioB 10 GPIO_ACTIVE_LOW>;
 | 
				
			||||||
			linux,code = <28>;
 | 
								linux,code = <28>;
 | 
				
			||||||
			gpio-key,wakeup;
 | 
								wakeup-source;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -45,6 +45,7 @@
 | 
				
			||||||
/dts-v1/;
 | 
					/dts-v1/;
 | 
				
			||||||
#include "sama5d2.dtsi"
 | 
					#include "sama5d2.dtsi"
 | 
				
			||||||
#include "sama5d2-pinfunc.h"
 | 
					#include "sama5d2-pinfunc.h"
 | 
				
			||||||
 | 
					#include <dt-bindings/mfd/atmel-flexcom.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/ {
 | 
					/ {
 | 
				
			||||||
	model = "Atmel SAMA5D2 Xplained";
 | 
						model = "Atmel SAMA5D2 Xplained";
 | 
				
			||||||
| 
						 | 
					@ -59,15 +60,6 @@ memory {
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	clocks {
 | 
						clocks {
 | 
				
			||||||
		#address-cells = <1>;
 | 
					 | 
				
			||||||
		#size-cells = <1>;
 | 
					 | 
				
			||||||
		ranges;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		main_clock: clock@0 {
 | 
					 | 
				
			||||||
			compatible = "atmel,osc", "fixed-clock";
 | 
					 | 
				
			||||||
			clock-frequency = <12000000>;
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		slow_xtal {
 | 
							slow_xtal {
 | 
				
			||||||
			clock-frequency = <32768>;
 | 
								clock-frequency = <32768>;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
| 
						 | 
					@ -91,6 +83,22 @@ usb2: ehci@00500000 {
 | 
				
			||||||
			status = "okay";
 | 
								status = "okay";
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							sdmmc0: sdio-host@a0000000 {
 | 
				
			||||||
 | 
								bus-width = <8>;
 | 
				
			||||||
 | 
								pinctrl-names = "default";
 | 
				
			||||||
 | 
								pinctrl-0 = <&pinctrl_sdmmc0_default>;
 | 
				
			||||||
 | 
								non-removable;
 | 
				
			||||||
 | 
								mmc-ddr-1_8v;
 | 
				
			||||||
 | 
								status = "okay";
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							sdmmc1: sdio-host@b0000000 {
 | 
				
			||||||
 | 
								bus-width = <4>;
 | 
				
			||||||
 | 
								pinctrl-names = "default";
 | 
				
			||||||
 | 
								pinctrl-0 = <&pinctrl_sdmmc1_default>;
 | 
				
			||||||
 | 
								status = "okay"; /* conflict with qspi0 */
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		apb {
 | 
							apb {
 | 
				
			||||||
			spi0: spi@f8000000 {
 | 
								spi0: spi@f8000000 {
 | 
				
			||||||
				pinctrl-names = "default";
 | 
									pinctrl-names = "default";
 | 
				
			||||||
| 
						 | 
					@ -176,17 +184,55 @@ vdd_sdhc_1v8_reg: LDO_REG4 {
 | 
				
			||||||
							regulator-name = "VDD_SDHC_1V8";
 | 
												regulator-name = "VDD_SDHC_1V8";
 | 
				
			||||||
							regulator-min-microvolt = <1800000>;
 | 
												regulator-min-microvolt = <1800000>;
 | 
				
			||||||
							regulator-max-microvolt = <1800000>;
 | 
												regulator-max-microvolt = <1800000>;
 | 
				
			||||||
 | 
												regulator-always-on;
 | 
				
			||||||
						};
 | 
											};
 | 
				
			||||||
					};
 | 
										};
 | 
				
			||||||
				};
 | 
									};
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								flx0: flexcom@f8034000 {
 | 
				
			||||||
 | 
									atmel,flexcom-mode = <ATMEL_FLEXCOM_MODE_USART>;
 | 
				
			||||||
 | 
									status = "disabled"; /* conflict with ISC_D2 & ISC_D3 data pins */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									uart5: serial@200 {
 | 
				
			||||||
 | 
										compatible = "atmel,at91sam9260-usart";
 | 
				
			||||||
 | 
										reg = <0x200 0x200>;
 | 
				
			||||||
 | 
										interrupts = <19 IRQ_TYPE_LEVEL_HIGH 7>;
 | 
				
			||||||
 | 
										clocks = <&flx0_clk>;
 | 
				
			||||||
 | 
										clock-names = "usart";
 | 
				
			||||||
 | 
										pinctrl-names = "default";
 | 
				
			||||||
 | 
										pinctrl-0 = <&pinctrl_flx0_default>;
 | 
				
			||||||
 | 
										atmel,fifo-size = <32>;
 | 
				
			||||||
 | 
										status = "okay";
 | 
				
			||||||
 | 
									};
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			uart3: serial@fc008000 {
 | 
								uart3: serial@fc008000 {
 | 
				
			||||||
				pinctrl-names = "default";
 | 
									pinctrl-names = "default";
 | 
				
			||||||
				pinctrl-0 = <&pinctrl_uart3_default>;
 | 
									pinctrl-0 = <&pinctrl_uart3_default>;
 | 
				
			||||||
				status = "okay";
 | 
									status = "okay";
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								flx4: flexcom@fc018000 {
 | 
				
			||||||
 | 
									atmel,flexcom-mode = <ATMEL_FLEXCOM_MODE_TWI>;
 | 
				
			||||||
 | 
									status = "okay";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									i2c2: i2c@600 {
 | 
				
			||||||
 | 
										compatible = "atmel,sama5d2-i2c";
 | 
				
			||||||
 | 
										reg = <0x600 0x200>;
 | 
				
			||||||
 | 
										interrupts = <23 IRQ_TYPE_LEVEL_HIGH 7>;
 | 
				
			||||||
 | 
										dmas = <0>, <0>;
 | 
				
			||||||
 | 
										dma-names = "tx", "rx";
 | 
				
			||||||
 | 
										#address-cells = <1>;
 | 
				
			||||||
 | 
										#size-cells = <0>;
 | 
				
			||||||
 | 
										clocks = <&flx4_clk>;
 | 
				
			||||||
 | 
										pinctrl-names = "default";
 | 
				
			||||||
 | 
										pinctrl-0 = <&pinctrl_flx4_default>;
 | 
				
			||||||
 | 
										atmel,fifo-size = <16>;
 | 
				
			||||||
 | 
										status = "okay";
 | 
				
			||||||
 | 
									};
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			i2c1: i2c@fc028000 {
 | 
								i2c1: i2c@fc028000 {
 | 
				
			||||||
				dmas = <0>, <0>;
 | 
									dmas = <0>, <0>;
 | 
				
			||||||
				pinctrl-names = "default";
 | 
									pinctrl-names = "default";
 | 
				
			||||||
| 
						 | 
					@ -201,6 +247,18 @@ at24@54 {
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			pinctrl@fc038000 {
 | 
								pinctrl@fc038000 {
 | 
				
			||||||
 | 
									pinctrl_flx0_default: flx0_default {
 | 
				
			||||||
 | 
										pinmux = <PIN_PB28__FLEXCOM0_IO0>,
 | 
				
			||||||
 | 
											 <PIN_PB29__FLEXCOM0_IO1>;
 | 
				
			||||||
 | 
										bias-disable;
 | 
				
			||||||
 | 
									};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									pinctrl_flx4_default: flx4_default {
 | 
				
			||||||
 | 
										pinmux = <PIN_PD12__FLEXCOM4_IO0>,
 | 
				
			||||||
 | 
											 <PIN_PD13__FLEXCOM4_IO1>;
 | 
				
			||||||
 | 
										bias-disable;
 | 
				
			||||||
 | 
									};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				pinctrl_i2c0_default: i2c0_default {
 | 
									pinctrl_i2c0_default: i2c0_default {
 | 
				
			||||||
					pinmux = <PIN_PD21__TWD0>,
 | 
										pinmux = <PIN_PD21__TWD0>,
 | 
				
			||||||
						 <PIN_PD22__TWCK0>;
 | 
											 <PIN_PD22__TWCK0>;
 | 
				
			||||||
| 
						 | 
					@ -227,6 +285,46 @@ pinctrl_macb0_default: macb0_default {
 | 
				
			||||||
					bias-disable;
 | 
										bias-disable;
 | 
				
			||||||
				};
 | 
									};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									pinctrl_sdmmc0_default: sdmmc0_default {
 | 
				
			||||||
 | 
										cmd_data {
 | 
				
			||||||
 | 
											pinmux = <PIN_PA1__SDMMC0_CMD>,
 | 
				
			||||||
 | 
												 <PIN_PA2__SDMMC0_DAT0>,
 | 
				
			||||||
 | 
												 <PIN_PA3__SDMMC0_DAT1>,
 | 
				
			||||||
 | 
												 <PIN_PA4__SDMMC0_DAT2>,
 | 
				
			||||||
 | 
												 <PIN_PA5__SDMMC0_DAT3>,
 | 
				
			||||||
 | 
												 <PIN_PA6__SDMMC0_DAT4>,
 | 
				
			||||||
 | 
												 <PIN_PA7__SDMMC0_DAT5>,
 | 
				
			||||||
 | 
												 <PIN_PA8__SDMMC0_DAT6>,
 | 
				
			||||||
 | 
												 <PIN_PA9__SDMMC0_DAT7>;
 | 
				
			||||||
 | 
											bias-pull-up;
 | 
				
			||||||
 | 
										};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										ck_cd_rstn_vddsel {
 | 
				
			||||||
 | 
											pinmux = <PIN_PA0__SDMMC0_CK>,
 | 
				
			||||||
 | 
												 <PIN_PA10__SDMMC0_RSTN>,
 | 
				
			||||||
 | 
												 <PIN_PA11__SDMMC0_VDDSEL>,
 | 
				
			||||||
 | 
												 <PIN_PA13__SDMMC0_CD>;
 | 
				
			||||||
 | 
											bias-disable;
 | 
				
			||||||
 | 
										};
 | 
				
			||||||
 | 
									};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									pinctrl_sdmmc1_default: sdmmc1_default {
 | 
				
			||||||
 | 
										cmd_data {
 | 
				
			||||||
 | 
											pinmux = <PIN_PA28__SDMMC1_CMD>,
 | 
				
			||||||
 | 
												 <PIN_PA18__SDMMC1_DAT0>,
 | 
				
			||||||
 | 
												 <PIN_PA19__SDMMC1_DAT1>,
 | 
				
			||||||
 | 
												 <PIN_PA20__SDMMC1_DAT2>,
 | 
				
			||||||
 | 
												 <PIN_PA21__SDMMC1_DAT3>;
 | 
				
			||||||
 | 
											bias-pull-up;
 | 
				
			||||||
 | 
										};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										conf-ck_cd {
 | 
				
			||||||
 | 
											pinmux = <PIN_PA22__SDMMC1_CK>,
 | 
				
			||||||
 | 
												 <PIN_PA30__SDMMC1_CD>;
 | 
				
			||||||
 | 
											bias-disable;
 | 
				
			||||||
 | 
										};
 | 
				
			||||||
 | 
									};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				pinctrl_spi0_default: spi0_default {
 | 
									pinctrl_spi0_default: spi0_default {
 | 
				
			||||||
					pinmux = <PIN_PA14__SPI0_SPCK>,
 | 
										pinmux = <PIN_PA14__SPI0_SPCK>,
 | 
				
			||||||
						 <PIN_PA15__SPI0_MOSI>,
 | 
											 <PIN_PA15__SPI0_MOSI>,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -315,7 +315,7 @@ bp3 {
 | 
				
			||||||
			label = "PB_USER";
 | 
								label = "PB_USER";
 | 
				
			||||||
			gpios = <&pioE 29 GPIO_ACTIVE_LOW>;
 | 
								gpios = <&pioE 29 GPIO_ACTIVE_LOW>;
 | 
				
			||||||
			linux,code = <0x104>;
 | 
								linux,code = <0x104>;
 | 
				
			||||||
			gpio-key,wakeup;
 | 
								wakeup-source;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -50,7 +50,6 @@ / {
 | 
				
			||||||
	compatible = "atmel,sama5d4-xplained", "atmel,sama5d4", "atmel,sama5";
 | 
						compatible = "atmel,sama5d4-xplained", "atmel,sama5d4", "atmel,sama5";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	chosen {
 | 
						chosen {
 | 
				
			||||||
		bootargs = "ignore_loglevel earlyprintk";
 | 
					 | 
				
			||||||
		stdout-path = "serial0:115200n8";
 | 
							stdout-path = "serial0:115200n8";
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -59,15 +58,6 @@ memory {
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	clocks {
 | 
						clocks {
 | 
				
			||||||
		#address-cells = <1>;
 | 
					 | 
				
			||||||
		#size-cells = <1>;
 | 
					 | 
				
			||||||
		ranges;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		main_clock: clock@0 {
 | 
					 | 
				
			||||||
			compatible = "atmel,osc", "fixed-clock";
 | 
					 | 
				
			||||||
			clock-frequency = <12000000>;
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		slow_xtal {
 | 
							slow_xtal {
 | 
				
			||||||
			clock-frequency = <32768>;
 | 
								clock-frequency = <32768>;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
| 
						 | 
					@ -235,7 +225,7 @@ pb_user1 {
 | 
				
			||||||
			label = "pb_user1";
 | 
								label = "pb_user1";
 | 
				
			||||||
			gpios = <&pioE 8 GPIO_ACTIVE_HIGH>;
 | 
								gpios = <&pioE 8 GPIO_ACTIVE_HIGH>;
 | 
				
			||||||
			linux,code = <0x100>;
 | 
								linux,code = <0x100>;
 | 
				
			||||||
			gpio-key,wakeup;
 | 
								wakeup-source;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -50,7 +50,6 @@ / {
 | 
				
			||||||
	compatible = "atmel,sama5d4ek", "atmel,sama5d4", "atmel,sama5";
 | 
						compatible = "atmel,sama5d4ek", "atmel,sama5d4", "atmel,sama5";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	chosen {
 | 
						chosen {
 | 
				
			||||||
		bootargs = "ignore_loglevel earlyprintk";
 | 
					 | 
				
			||||||
		stdout-path = "serial0:115200n8";
 | 
							stdout-path = "serial0:115200n8";
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -59,15 +58,6 @@ memory {
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	clocks {
 | 
						clocks {
 | 
				
			||||||
		#address-cells = <1>;
 | 
					 | 
				
			||||||
		#size-cells = <1>;
 | 
					 | 
				
			||||||
		ranges;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		main_clock: clock@0 {
 | 
					 | 
				
			||||||
			compatible = "atmel,osc", "fixed-clock";
 | 
					 | 
				
			||||||
			clock-frequency = <12000000>;
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		slow_xtal {
 | 
							slow_xtal {
 | 
				
			||||||
			clock-frequency = <32768>;
 | 
								clock-frequency = <32768>;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
| 
						 | 
					@ -304,7 +294,7 @@ pb_user1 {
 | 
				
			||||||
			label = "pb_user1";
 | 
								label = "pb_user1";
 | 
				
			||||||
			gpios = <&pioE 13 GPIO_ACTIVE_HIGH>;
 | 
								gpios = <&pioE 13 GPIO_ACTIVE_HIGH>;
 | 
				
			||||||
			linux,code = <0x100>;
 | 
								linux,code = <0x100>;
 | 
				
			||||||
			gpio-key,wakeup;
 | 
								wakeup-source;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,15 +21,6 @@ memory {
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	clocks {
 | 
						clocks {
 | 
				
			||||||
		#address-cells = <1>;
 | 
					 | 
				
			||||||
		#size-cells = <1>;
 | 
					 | 
				
			||||||
		ranges;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		main_clock: clock@0 {
 | 
					 | 
				
			||||||
			compatible = "atmel,osc", "fixed-clock";
 | 
					 | 
				
			||||||
			clock-frequency = <18432000>;
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		slow_xtal {
 | 
							slow_xtal {
 | 
				
			||||||
			clock-frequency = <32768>;
 | 
								clock-frequency = <32768>;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -22,15 +22,6 @@ memory {
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	clocks {
 | 
						clocks {
 | 
				
			||||||
		#address-cells = <1>;
 | 
					 | 
				
			||||||
		#size-cells = <1>;
 | 
					 | 
				
			||||||
		ranges;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		main_clock: clock@0 {
 | 
					 | 
				
			||||||
			compatible = "atmel,osc", "fixed-clock";
 | 
					 | 
				
			||||||
			clock-frequency = <18432000>;
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		slow_xtal {
 | 
							slow_xtal {
 | 
				
			||||||
			clock-frequency = <32768>;
 | 
								clock-frequency = <32768>;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
| 
						 | 
					@ -149,7 +140,7 @@ tsc2046@0 {
 | 
				
			||||||
					ti,debounce-tol = /bits/ 16 <65535>;
 | 
										ti,debounce-tol = /bits/ 16 <65535>;
 | 
				
			||||||
					ti,debounce-max = /bits/ 16 <1>;
 | 
										ti,debounce-max = /bits/ 16 <1>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					linux,wakeup;
 | 
										wakeup-source;
 | 
				
			||||||
				};
 | 
									};
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -193,28 +184,28 @@ button_0 {
 | 
				
			||||||
			label = "button_0";
 | 
								label = "button_0";
 | 
				
			||||||
			gpios = <&pioA 27 GPIO_ACTIVE_LOW>;
 | 
								gpios = <&pioA 27 GPIO_ACTIVE_LOW>;
 | 
				
			||||||
			linux,code = <256>;
 | 
								linux,code = <256>;
 | 
				
			||||||
			gpio-key,wakeup;
 | 
								wakeup-source;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		button_1 {
 | 
							button_1 {
 | 
				
			||||||
			label = "button_1";
 | 
								label = "button_1";
 | 
				
			||||||
			gpios = <&pioA 26 GPIO_ACTIVE_LOW>;
 | 
								gpios = <&pioA 26 GPIO_ACTIVE_LOW>;
 | 
				
			||||||
			linux,code = <257>;
 | 
								linux,code = <257>;
 | 
				
			||||||
			gpio-key,wakeup;
 | 
								wakeup-source;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		button_2 {
 | 
							button_2 {
 | 
				
			||||||
			label = "button_2";
 | 
								label = "button_2";
 | 
				
			||||||
			gpios = <&pioA 25 GPIO_ACTIVE_LOW>;
 | 
								gpios = <&pioA 25 GPIO_ACTIVE_LOW>;
 | 
				
			||||||
			linux,code = <258>;
 | 
								linux,code = <258>;
 | 
				
			||||||
			gpio-key,wakeup;
 | 
								wakeup-source;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		button_3 {
 | 
							button_3 {
 | 
				
			||||||
			label = "button_3";
 | 
								label = "button_3";
 | 
				
			||||||
			gpios = <&pioA 24 GPIO_ACTIVE_LOW>;
 | 
								gpios = <&pioA 24 GPIO_ACTIVE_LOW>;
 | 
				
			||||||
			linux,code = <259>;
 | 
								linux,code = <259>;
 | 
				
			||||||
			gpio-key,wakeup;
 | 
								wakeup-source;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -22,15 +22,6 @@ memory {
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	clocks {
 | 
						clocks {
 | 
				
			||||||
		#address-cells = <1>;
 | 
					 | 
				
			||||||
		#size-cells = <1>;
 | 
					 | 
				
			||||||
		ranges;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		main_clock: clock@0 {
 | 
					 | 
				
			||||||
			compatible = "atmel,osc", "fixed-clock";
 | 
					 | 
				
			||||||
			clock-frequency = <16367660>;
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		slow_xtal {
 | 
							slow_xtal {
 | 
				
			||||||
			clock-frequency = <32768>;
 | 
								clock-frequency = <32768>;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
| 
						 | 
					@ -213,14 +204,14 @@ left_click {
 | 
				
			||||||
			label = "left_click";
 | 
								label = "left_click";
 | 
				
			||||||
			gpios = <&pioC 5 GPIO_ACTIVE_LOW>;
 | 
								gpios = <&pioC 5 GPIO_ACTIVE_LOW>;
 | 
				
			||||||
			linux,code = <272>;
 | 
								linux,code = <272>;
 | 
				
			||||||
			gpio-key,wakeup;
 | 
								wakeup-source;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		right_click {
 | 
							right_click {
 | 
				
			||||||
			label = "right_click";
 | 
								label = "right_click";
 | 
				
			||||||
			gpios = <&pioC 4 GPIO_ACTIVE_LOW>;
 | 
								gpios = <&pioC 4 GPIO_ACTIVE_LOW>;
 | 
				
			||||||
			linux,code = <273>;
 | 
								linux,code = <273>;
 | 
				
			||||||
			gpio-key,wakeup;
 | 
								wakeup-source;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,15 +19,6 @@ memory {
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	clocks {
 | 
						clocks {
 | 
				
			||||||
		#address-cells = <1>;
 | 
					 | 
				
			||||||
		#size-cells = <1>;
 | 
					 | 
				
			||||||
		ranges;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		main_clock: clock@0 {
 | 
					 | 
				
			||||||
			compatible = "atmel,osc", "fixed-clock";
 | 
					 | 
				
			||||||
			clock-frequency = <18432000>;
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		slow_xtal {
 | 
							slow_xtal {
 | 
				
			||||||
			clock-frequency = <32768>;
 | 
								clock-frequency = <32768>;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
| 
						 | 
					@ -206,14 +197,14 @@ btn3 {
 | 
				
			||||||
			label = "Button 3";
 | 
								label = "Button 3";
 | 
				
			||||||
			gpios = <&pioA 30 GPIO_ACTIVE_LOW>;
 | 
								gpios = <&pioA 30 GPIO_ACTIVE_LOW>;
 | 
				
			||||||
			linux,code = <0x103>;
 | 
								linux,code = <0x103>;
 | 
				
			||||||
			gpio-key,wakeup;
 | 
								wakeup-source;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		btn4 {
 | 
							btn4 {
 | 
				
			||||||
			label = "Button 4";
 | 
								label = "Button 4";
 | 
				
			||||||
			gpios = <&pioA 31 GPIO_ACTIVE_LOW>;
 | 
								gpios = <&pioA 31 GPIO_ACTIVE_LOW>;
 | 
				
			||||||
			linux,code = <0x104>;
 | 
								linux,code = <0x104>;
 | 
				
			||||||
			gpio-key,wakeup;
 | 
								wakeup-source;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -24,15 +24,6 @@ memory {
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	clocks {
 | 
						clocks {
 | 
				
			||||||
		#address-cells = <1>;
 | 
					 | 
				
			||||||
		#size-cells = <1>;
 | 
					 | 
				
			||||||
		ranges;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		main_clock: clock@0 {
 | 
					 | 
				
			||||||
			compatible = "atmel,osc", "fixed-clock";
 | 
					 | 
				
			||||||
			clock-frequency = <12000000>;
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		slow_xtal {
 | 
							slow_xtal {
 | 
				
			||||||
		      clock-frequency = <32768>;
 | 
							      clock-frequency = <32768>;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
| 
						 | 
					@ -323,14 +314,14 @@ left_click {
 | 
				
			||||||
			label = "left_click";
 | 
								label = "left_click";
 | 
				
			||||||
			gpios = <&pioB 6 GPIO_ACTIVE_LOW>;
 | 
								gpios = <&pioB 6 GPIO_ACTIVE_LOW>;
 | 
				
			||||||
			linux,code = <272>;
 | 
								linux,code = <272>;
 | 
				
			||||||
			gpio-key,wakeup;
 | 
								wakeup-source;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		right_click {
 | 
							right_click {
 | 
				
			||||||
			label = "right_click";
 | 
								label = "right_click";
 | 
				
			||||||
			gpios = <&pioB 7 GPIO_ACTIVE_LOW>;
 | 
								gpios = <&pioB 7 GPIO_ACTIVE_LOW>;
 | 
				
			||||||
			linux,code = <273>;
 | 
								linux,code = <273>;
 | 
				
			||||||
			gpio-key,wakeup;
 | 
								wakeup-source;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		left {
 | 
							left {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -23,15 +23,6 @@ memory {
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	clocks {
 | 
						clocks {
 | 
				
			||||||
		#address-cells = <1>;
 | 
					 | 
				
			||||||
		#size-cells = <1>;
 | 
					 | 
				
			||||||
		ranges;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		main_clock: clock@0 {
 | 
					 | 
				
			||||||
			compatible = "atmel,osc", "fixed-clock";
 | 
					 | 
				
			||||||
			clock-frequency = <16000000>;
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		slow_xtal {
 | 
							slow_xtal {
 | 
				
			||||||
			clock-frequency = <32768>;
 | 
								clock-frequency = <32768>;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
| 
						 | 
					@ -219,7 +210,7 @@ enter {
 | 
				
			||||||
			label = "Enter";
 | 
								label = "Enter";
 | 
				
			||||||
			gpios = <&pioB 3 GPIO_ACTIVE_LOW>;
 | 
								gpios = <&pioB 3 GPIO_ACTIVE_LOW>;
 | 
				
			||||||
			linux,code = <28>;
 | 
								linux,code = <28>;
 | 
				
			||||||
			gpio-key,wakeup;
 | 
								wakeup-source;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -22,15 +22,6 @@ memory {
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	clocks {
 | 
						clocks {
 | 
				
			||||||
		#address-cells = <1>;
 | 
					 | 
				
			||||||
		#size-cells = <1>;
 | 
					 | 
				
			||||||
		ranges;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		main_clock: clock {
 | 
					 | 
				
			||||||
			compatible = "atmel,osc", "fixed-clock";
 | 
					 | 
				
			||||||
			clock-frequency = <12000000>;
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		slow_xtal {
 | 
							slow_xtal {
 | 
				
			||||||
			clock-frequency = <32768>;
 | 
								clock-frequency = <32768>;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
| 
						 | 
					@ -225,14 +216,14 @@ right_click {
 | 
				
			||||||
			label = "right_click";
 | 
								label = "right_click";
 | 
				
			||||||
			gpios = <&pioB 0 GPIO_ACTIVE_LOW>;
 | 
								gpios = <&pioB 0 GPIO_ACTIVE_LOW>;
 | 
				
			||||||
			linux,code = <273>;
 | 
								linux,code = <273>;
 | 
				
			||||||
			gpio-key,wakeup;
 | 
								wakeup-source;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		left_click {
 | 
							left_click {
 | 
				
			||||||
			label = "left_click";
 | 
								label = "left_click";
 | 
				
			||||||
			gpios = <&pioB 1 GPIO_ACTIVE_LOW>;
 | 
								gpios = <&pioB 1 GPIO_ACTIVE_LOW>;
 | 
				
			||||||
			linux,code = <272>;
 | 
								linux,code = <272>;
 | 
				
			||||||
			gpio-key,wakeup;
 | 
								wakeup-source;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,17 +12,6 @@ memory {
 | 
				
			||||||
		reg = <0x20000000 0x8000000>;
 | 
							reg = <0x20000000 0x8000000>;
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	clocks {
 | 
					 | 
				
			||||||
		#address-cells = <1>;
 | 
					 | 
				
			||||||
		#size-cells = <1>;
 | 
					 | 
				
			||||||
		ranges;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		main_clock: clock@0 {
 | 
					 | 
				
			||||||
			compatible = "atmel,osc", "fixed-clock";
 | 
					 | 
				
			||||||
			clock-frequency = <12000000>;
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
	};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	clocks {
 | 
						clocks {
 | 
				
			||||||
		slow_xtal {
 | 
							slow_xtal {
 | 
				
			||||||
			clock-frequency = <32768>;
 | 
								clock-frequency = <32768>;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -118,7 +118,8 @@ pmu {
 | 
				
			||||||
		sdhci0: sdhci@ab0000 {
 | 
							sdhci0: sdhci@ab0000 {
 | 
				
			||||||
			compatible = "mrvl,pxav3-mmc";
 | 
								compatible = "mrvl,pxav3-mmc";
 | 
				
			||||||
			reg = <0xab0000 0x200>;
 | 
								reg = <0xab0000 0x200>;
 | 
				
			||||||
			clocks = <&chip_clk CLKID_SDIO1XIN>;
 | 
								clocks = <&chip_clk CLKID_SDIO1XIN>, <&chip_clk CLKID_SDIO>;
 | 
				
			||||||
 | 
								clock-names = "io", "core";
 | 
				
			||||||
			interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
 | 
								interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
 | 
				
			||||||
			status = "disabled";
 | 
								status = "disabled";
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
| 
						 | 
					@ -126,7 +127,8 @@ sdhci0: sdhci@ab0000 {
 | 
				
			||||||
		sdhci1: sdhci@ab0800 {
 | 
							sdhci1: sdhci@ab0800 {
 | 
				
			||||||
			compatible = "mrvl,pxav3-mmc";
 | 
								compatible = "mrvl,pxav3-mmc";
 | 
				
			||||||
			reg = <0xab0800 0x200>;
 | 
								reg = <0xab0800 0x200>;
 | 
				
			||||||
			clocks = <&chip_clk CLKID_SDIO1XIN>;
 | 
								clocks = <&chip_clk CLKID_SDIO1XIN>, <&chip_clk CLKID_SDIO>;
 | 
				
			||||||
 | 
								clock-names = "io", "core";
 | 
				
			||||||
			interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
 | 
								interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
 | 
				
			||||||
			status = "disabled";
 | 
								status = "disabled";
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
| 
						 | 
					@ -135,7 +137,7 @@ sdhci2: sdhci@ab1000 {
 | 
				
			||||||
			compatible = "mrvl,pxav3-mmc";
 | 
								compatible = "mrvl,pxav3-mmc";
 | 
				
			||||||
			reg = <0xab1000 0x200>;
 | 
								reg = <0xab1000 0x200>;
 | 
				
			||||||
			interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>;
 | 
								interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>;
 | 
				
			||||||
			clocks = <&chip_clk CLKID_NFC_ECC>, <&chip_clk CLKID_NFC>;
 | 
								clocks = <&chip_clk CLKID_NFC_ECC>, <&chip_clk CLKID_SDIO>;
 | 
				
			||||||
			clock-names = "io", "core";
 | 
								clock-names = "io", "core";
 | 
				
			||||||
			status = "disabled";
 | 
								status = "disabled";
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -218,6 +218,7 @@ mailbox: mailbox@480c8000 {
 | 
				
			||||||
			reg = <0x480c8000 0x2000>;
 | 
								reg = <0x480c8000 0x2000>;
 | 
				
			||||||
			interrupts = <77>;
 | 
								interrupts = <77>;
 | 
				
			||||||
			ti,hwmods = "mailbox";
 | 
								ti,hwmods = "mailbox";
 | 
				
			||||||
 | 
								#mbox-cells = <1>;
 | 
				
			||||||
			ti,mbox-num-users = <4>;
 | 
								ti,mbox-num-users = <4>;
 | 
				
			||||||
			ti,mbox-num-fifos = <12>;
 | 
								ti,mbox-num-fifos = <12>;
 | 
				
			||||||
			mbox_dsp: mbox_dsp {
 | 
								mbox_dsp: mbox_dsp {
 | 
				
			||||||
| 
						 | 
					@ -279,8 +280,11 @@ mcspi1: spi@48030000 {
 | 
				
			||||||
			ti,spi-num-cs = <4>;
 | 
								ti,spi-num-cs = <4>;
 | 
				
			||||||
			ti,hwmods = "mcspi1";
 | 
								ti,hwmods = "mcspi1";
 | 
				
			||||||
			dmas = <&edma 16 &edma 17
 | 
								dmas = <&edma 16 &edma 17
 | 
				
			||||||
				&edma 18 &edma 19>;
 | 
									&edma 18 &edma 19
 | 
				
			||||||
			dma-names = "tx0", "rx0", "tx1", "rx1";
 | 
									&edma 20 &edma 21
 | 
				
			||||||
 | 
									&edma 22 &edma 23>;
 | 
				
			||||||
 | 
								dma-names = "tx0", "rx0", "tx1", "rx1",
 | 
				
			||||||
 | 
									    "tx2", "rx2", "tx3", "rx3";
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		mmc1: mmc@48060000 {
 | 
							mmc1: mmc@48060000 {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1459,8 +1459,8 @@ mcasp3: mcasp@48468000 {
 | 
				
			||||||
			interrupt-names = "tx", "rx";
 | 
								interrupt-names = "tx", "rx";
 | 
				
			||||||
			dmas = <&sdma_xbar 133>, <&sdma_xbar 132>;
 | 
								dmas = <&sdma_xbar 133>, <&sdma_xbar 132>;
 | 
				
			||||||
			dma-names = "tx", "rx";
 | 
								dma-names = "tx", "rx";
 | 
				
			||||||
			clocks = <&mcasp3_ahclkx_mux>;
 | 
								clocks = <&mcasp3_aux_gfclk_mux>, <&mcasp3_ahclkx_mux>;
 | 
				
			||||||
			clock-names = "fck";
 | 
								clock-names = "fck", "ahclkx";
 | 
				
			||||||
			status = "disabled";
 | 
								status = "disabled";
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -486,7 +486,10 @@ usbotg: usb@10024000 {
 | 
				
			||||||
				compatible = "fsl,imx27-usb";
 | 
									compatible = "fsl,imx27-usb";
 | 
				
			||||||
				reg = <0x10024000 0x200>;
 | 
									reg = <0x10024000 0x200>;
 | 
				
			||||||
				interrupts = <56>;
 | 
									interrupts = <56>;
 | 
				
			||||||
				clocks = <&clks IMX27_CLK_USB_IPG_GATE>;
 | 
									clocks = <&clks IMX27_CLK_USB_IPG_GATE>,
 | 
				
			||||||
 | 
										<&clks IMX27_CLK_USB_AHB_GATE>,
 | 
				
			||||||
 | 
										<&clks IMX27_CLK_USB_DIV>;
 | 
				
			||||||
 | 
									clock-names = "ipg", "ahb", "per";
 | 
				
			||||||
				fsl,usbmisc = <&usbmisc 0>;
 | 
									fsl,usbmisc = <&usbmisc 0>;
 | 
				
			||||||
				status = "disabled";
 | 
									status = "disabled";
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
| 
						 | 
					@ -495,7 +498,10 @@ usbh1: usb@10024200 {
 | 
				
			||||||
				compatible = "fsl,imx27-usb";
 | 
									compatible = "fsl,imx27-usb";
 | 
				
			||||||
				reg = <0x10024200 0x200>;
 | 
									reg = <0x10024200 0x200>;
 | 
				
			||||||
				interrupts = <54>;
 | 
									interrupts = <54>;
 | 
				
			||||||
				clocks = <&clks IMX27_CLK_USB_IPG_GATE>;
 | 
									clocks = <&clks IMX27_CLK_USB_IPG_GATE>,
 | 
				
			||||||
 | 
										<&clks IMX27_CLK_USB_AHB_GATE>,
 | 
				
			||||||
 | 
										<&clks IMX27_CLK_USB_DIV>;
 | 
				
			||||||
 | 
									clock-names = "ipg", "ahb", "per";
 | 
				
			||||||
				fsl,usbmisc = <&usbmisc 1>;
 | 
									fsl,usbmisc = <&usbmisc 1>;
 | 
				
			||||||
				dr_mode = "host";
 | 
									dr_mode = "host";
 | 
				
			||||||
				status = "disabled";
 | 
									status = "disabled";
 | 
				
			||||||
| 
						 | 
					@ -505,7 +511,10 @@ usbh2: usb@10024400 {
 | 
				
			||||||
				compatible = "fsl,imx27-usb";
 | 
									compatible = "fsl,imx27-usb";
 | 
				
			||||||
				reg = <0x10024400 0x200>;
 | 
									reg = <0x10024400 0x200>;
 | 
				
			||||||
				interrupts = <55>;
 | 
									interrupts = <55>;
 | 
				
			||||||
				clocks = <&clks IMX27_CLK_USB_IPG_GATE>;
 | 
									clocks = <&clks IMX27_CLK_USB_IPG_GATE>,
 | 
				
			||||||
 | 
										<&clks IMX27_CLK_USB_AHB_GATE>,
 | 
				
			||||||
 | 
										<&clks IMX27_CLK_USB_DIV>;
 | 
				
			||||||
 | 
									clock-names = "ipg", "ahb", "per";
 | 
				
			||||||
				fsl,usbmisc = <&usbmisc 2>;
 | 
									fsl,usbmisc = <&usbmisc 2>;
 | 
				
			||||||
				dr_mode = "host";
 | 
									dr_mode = "host";
 | 
				
			||||||
				status = "disabled";
 | 
									status = "disabled";
 | 
				
			||||||
| 
						 | 
					@ -515,7 +524,6 @@ usbmisc: usbmisc@10024600 {
 | 
				
			||||||
				#index-cells = <1>;
 | 
									#index-cells = <1>;
 | 
				
			||||||
				compatible = "fsl,imx27-usbmisc";
 | 
									compatible = "fsl,imx27-usbmisc";
 | 
				
			||||||
				reg = <0x10024600 0x200>;
 | 
									reg = <0x10024600 0x200>;
 | 
				
			||||||
				clocks = <&clks IMX27_CLK_USB_AHB_GATE>;
 | 
					 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			sahara2: sahara@10025000 {
 | 
								sahara2: sahara@10025000 {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -137,7 +137,7 @@ netcp: netcp@26000000 {
 | 
				
			||||||
	/* NetCP address range */
 | 
						/* NetCP address range */
 | 
				
			||||||
	ranges = <0 0x26000000 0x1000000>;
 | 
						ranges = <0 0x26000000 0x1000000>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	clocks = <&papllclk>, <&clkcpgmac>, <&chipclk12>;
 | 
						clocks = <&clkosr>, <&papllclk>, <&clkcpgmac>, <&chipclk12>;
 | 
				
			||||||
	dma-coherent;
 | 
						dma-coherent;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ti,navigator-dmas = <&dma_gbe 0>,
 | 
						ti,navigator-dmas = <&dma_gbe 0>,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -40,7 +40,7 @@ serial@12100 {
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
		poweroff@12100 {
 | 
							poweroff@12100 {
 | 
				
			||||||
			compatible = "qnap,power-off";
 | 
								compatible = "qnap,power-off";
 | 
				
			||||||
			reg = <0x12000 0x100>;
 | 
								reg = <0x12100 0x100>;
 | 
				
			||||||
			clocks = <&gate_clk 7>;
 | 
								clocks = <&gate_clk 7>;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
		spi@10600 {
 | 
							spi@10600 {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -86,6 +86,10 @@ vcc18_lcd: vcc18-lcd {
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					&emmc {
 | 
				
			||||||
 | 
						/delete-property/mmc-hs200-1_8v;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
&gpio_keys {
 | 
					&gpio_keys {
 | 
				
			||||||
	pinctrl-0 = <&pwr_key_l &ap_lid_int_l &volum_down_l &volum_up_l>;
 | 
						pinctrl-0 = <&pwr_key_l &ap_lid_int_l &volum_down_l &volum_up_l>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -452,8 +452,10 @@ tsadc: tsadc@ff280000 {
 | 
				
			||||||
		clock-names = "tsadc", "apb_pclk";
 | 
							clock-names = "tsadc", "apb_pclk";
 | 
				
			||||||
		resets = <&cru SRST_TSADC>;
 | 
							resets = <&cru SRST_TSADC>;
 | 
				
			||||||
		reset-names = "tsadc-apb";
 | 
							reset-names = "tsadc-apb";
 | 
				
			||||||
		pinctrl-names = "default";
 | 
							pinctrl-names = "init", "default", "sleep";
 | 
				
			||||||
		pinctrl-0 = <&otp_out>;
 | 
							pinctrl-0 = <&otp_gpio>;
 | 
				
			||||||
 | 
							pinctrl-1 = <&otp_out>;
 | 
				
			||||||
 | 
							pinctrl-2 = <&otp_gpio>;
 | 
				
			||||||
		#thermal-sensor-cells = <1>;
 | 
							#thermal-sensor-cells = <1>;
 | 
				
			||||||
		rockchip,hw-tshut-temp = <95000>;
 | 
							rockchip,hw-tshut-temp = <95000>;
 | 
				
			||||||
		status = "disabled";
 | 
							status = "disabled";
 | 
				
			||||||
| 
						 | 
					@ -1395,6 +1397,10 @@ uart4_rts: uart4-rts {
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		tsadc {
 | 
							tsadc {
 | 
				
			||||||
 | 
								otp_gpio: otp-gpio {
 | 
				
			||||||
 | 
									rockchip,pins = <0 10 RK_FUNC_GPIO &pcfg_pull_none>;
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			otp_out: otp-out {
 | 
								otp_out: otp-out {
 | 
				
			||||||
				rockchip,pins = <0 10 RK_FUNC_1 &pcfg_pull_none>;
 | 
									rockchip,pins = <0 10 RK_FUNC_1 &pcfg_pull_none>;
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -49,7 +49,7 @@ pb_user1 {
 | 
				
			||||||
			label = "pb_user1";
 | 
								label = "pb_user1";
 | 
				
			||||||
			gpios = <&pioE 27 GPIO_ACTIVE_HIGH>;
 | 
								gpios = <&pioE 27 GPIO_ACTIVE_HIGH>;
 | 
				
			||||||
			linux,code = <0x100>;
 | 
								linux,code = <0x100>;
 | 
				
			||||||
			gpio-key,wakeup;
 | 
								wakeup-source;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1300,7 +1300,7 @@ pit: timer@fc068630 {
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			watchdog@fc068640 {
 | 
								watchdog@fc068640 {
 | 
				
			||||||
				compatible = "atmel,at91sam9260-wdt";
 | 
									compatible = "atmel,sama5d4-wdt";
 | 
				
			||||||
				reg = <0xfc068640 0x10>;
 | 
									reg = <0xfc068640 0x10>;
 | 
				
			||||||
				clocks = <&clk32k>;
 | 
									clocks = <&clk32k>;
 | 
				
			||||||
				status = "disabled";
 | 
									status = "disabled";
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -115,7 +115,7 @@ user_pb {
 | 
				
			||||||
			label = "user_pb";
 | 
								label = "user_pb";
 | 
				
			||||||
			gpios = <&pioB 10 GPIO_ACTIVE_LOW>;
 | 
								gpios = <&pioB 10 GPIO_ACTIVE_LOW>;
 | 
				
			||||||
			linux,code = <28>;
 | 
								linux,code = <28>;
 | 
				
			||||||
			gpio-key,wakeup;
 | 
								wakeup-source;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -143,7 +143,7 @@ user_pb {
 | 
				
			||||||
			label = "user_pb";
 | 
								label = "user_pb";
 | 
				
			||||||
			gpios = <&pioB 10 GPIO_ACTIVE_LOW>;
 | 
								gpios = <&pioB 10 GPIO_ACTIVE_LOW>;
 | 
				
			||||||
			linux,code = <28>;
 | 
								linux,code = <28>;
 | 
				
			||||||
			gpio-key,wakeup;
 | 
								wakeup-source;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,8 +18,3 @@ memory {
 | 
				
			||||||
		reg = <0x80000000 0x10000000>;
 | 
							reg = <0x80000000 0x10000000>;
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					 | 
				
			||||||
&L2 {
 | 
					 | 
				
			||||||
	arm,data-latency = <2 1 2>;
 | 
					 | 
				
			||||||
	arm,tag-latency = <3 2 3>;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,7 +19,7 @@ L2: l2-cache@40006000 {
 | 
				
			||||||
		reg = <0x40006000 0x1000>;
 | 
							reg = <0x40006000 0x1000>;
 | 
				
			||||||
		cache-unified;
 | 
							cache-unified;
 | 
				
			||||||
		cache-level = <2>;
 | 
							cache-level = <2>;
 | 
				
			||||||
		arm,data-latency = <1 1 1>;
 | 
							arm,data-latency = <3 3 3>;
 | 
				
			||||||
		arm,tag-latency = <2 2 2>;
 | 
							arm,tag-latency = <2 2 2>;
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -158,7 +158,7 @@ dspi0: dspi0@4002c000 {
 | 
				
			||||||
				interrupts = <67 IRQ_TYPE_LEVEL_HIGH>;
 | 
									interrupts = <67 IRQ_TYPE_LEVEL_HIGH>;
 | 
				
			||||||
				clocks = <&clks VF610_CLK_DSPI0>;
 | 
									clocks = <&clks VF610_CLK_DSPI0>;
 | 
				
			||||||
				clock-names = "dspi";
 | 
									clock-names = "dspi";
 | 
				
			||||||
				spi-num-chipselects = <5>;
 | 
									spi-num-chipselects = <6>;
 | 
				
			||||||
				status = "disabled";
 | 
									status = "disabled";
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -170,7 +170,7 @@ dspi1: dspi1@4002d000 {
 | 
				
			||||||
				interrupts = <68 IRQ_TYPE_LEVEL_HIGH>;
 | 
									interrupts = <68 IRQ_TYPE_LEVEL_HIGH>;
 | 
				
			||||||
				clocks = <&clks VF610_CLK_DSPI1>;
 | 
									clocks = <&clks VF610_CLK_DSPI1>;
 | 
				
			||||||
				clock-names = "dspi";
 | 
									clock-names = "dspi";
 | 
				
			||||||
				spi-num-chipselects = <5>;
 | 
									spi-num-chipselects = <4>;
 | 
				
			||||||
				status = "disabled";
 | 
									status = "disabled";
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -178,8 +178,10 @@ sai2: sai@40031000 {
 | 
				
			||||||
				compatible = "fsl,vf610-sai";
 | 
									compatible = "fsl,vf610-sai";
 | 
				
			||||||
				reg = <0x40031000 0x1000>;
 | 
									reg = <0x40031000 0x1000>;
 | 
				
			||||||
				interrupts = <86 IRQ_TYPE_LEVEL_HIGH>;
 | 
									interrupts = <86 IRQ_TYPE_LEVEL_HIGH>;
 | 
				
			||||||
				clocks = <&clks VF610_CLK_SAI2>;
 | 
									clocks = <&clks VF610_CLK_SAI2>,
 | 
				
			||||||
				clock-names = "sai";
 | 
										<&clks VF610_CLK_SAI2_DIV>,
 | 
				
			||||||
 | 
										<&clks 0>, <&clks 0>;
 | 
				
			||||||
 | 
									clock-names = "bus", "mclk1", "mclk2", "mclk3";
 | 
				
			||||||
				dma-names = "tx", "rx";
 | 
									dma-names = "tx", "rx";
 | 
				
			||||||
				dmas = <&edma0 0 21>,
 | 
									dmas = <&edma0 0 21>,
 | 
				
			||||||
					<&edma0 0 20>;
 | 
										<&edma0 0 20>;
 | 
				
			||||||
| 
						 | 
					@ -461,6 +463,8 @@ adc1: adc@400bb000 {
 | 
				
			||||||
				clock-names = "adc";
 | 
									clock-names = "adc";
 | 
				
			||||||
				#io-channel-cells = <1>;
 | 
									#io-channel-cells = <1>;
 | 
				
			||||||
				status = "disabled";
 | 
									status = "disabled";
 | 
				
			||||||
 | 
									fsl,adck-max-frequency = <30000000>, <40000000>,
 | 
				
			||||||
 | 
												<20000000>;
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			esdhc0: esdhc@400b1000 {
 | 
								esdhc0: esdhc@400b1000 {
 | 
				
			||||||
| 
						 | 
					@ -472,8 +476,6 @@ esdhc0: esdhc@400b1000 {
 | 
				
			||||||
					<&clks VF610_CLK_ESDHC0>;
 | 
										<&clks VF610_CLK_ESDHC0>;
 | 
				
			||||||
				clock-names = "ipg", "ahb", "per";
 | 
									clock-names = "ipg", "ahb", "per";
 | 
				
			||||||
				status = "disabled";
 | 
									status = "disabled";
 | 
				
			||||||
				fsl,adck-max-frequency = <30000000>, <40000000>,
 | 
					 | 
				
			||||||
							<20000000>;
 | 
					 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			esdhc1: esdhc@400b2000 {
 | 
								esdhc1: esdhc@400b2000 {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -125,7 +125,6 @@ CONFIG_POWER_RESET=y
 | 
				
			||||||
# CONFIG_HWMON is not set
 | 
					# CONFIG_HWMON is not set
 | 
				
			||||||
CONFIG_WATCHDOG=y
 | 
					CONFIG_WATCHDOG=y
 | 
				
			||||||
CONFIG_AT91SAM9X_WATCHDOG=y
 | 
					CONFIG_AT91SAM9X_WATCHDOG=y
 | 
				
			||||||
CONFIG_SSB=m
 | 
					 | 
				
			||||||
CONFIG_MFD_ATMEL_HLCDC=y
 | 
					CONFIG_MFD_ATMEL_HLCDC=y
 | 
				
			||||||
CONFIG_REGULATOR=y
 | 
					CONFIG_REGULATOR=y
 | 
				
			||||||
CONFIG_REGULATOR_FIXED_VOLTAGE=y
 | 
					CONFIG_REGULATOR_FIXED_VOLTAGE=y
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -129,7 +129,6 @@ CONFIG_GPIO_SYSFS=y
 | 
				
			||||||
CONFIG_POWER_SUPPLY=y
 | 
					CONFIG_POWER_SUPPLY=y
 | 
				
			||||||
CONFIG_POWER_RESET=y
 | 
					CONFIG_POWER_RESET=y
 | 
				
			||||||
# CONFIG_HWMON is not set
 | 
					# CONFIG_HWMON is not set
 | 
				
			||||||
CONFIG_SSB=m
 | 
					 | 
				
			||||||
CONFIG_MFD_ATMEL_FLEXCOM=y
 | 
					CONFIG_MFD_ATMEL_FLEXCOM=y
 | 
				
			||||||
CONFIG_REGULATOR=y
 | 
					CONFIG_REGULATOR=y
 | 
				
			||||||
CONFIG_REGULATOR_FIXED_VOLTAGE=y
 | 
					CONFIG_REGULATOR_FIXED_VOLTAGE=y
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,6 +21,7 @@
 | 
				
			||||||
#ifndef __ASSEMBLY__
 | 
					#ifndef __ASSEMBLY__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <linux/io.h>
 | 
					#include <linux/io.h>
 | 
				
			||||||
 | 
					#include <asm/barrier.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define __ACCESS_CP15(CRn, Op1, CRm, Op2)	p15, Op1, %0, CRn, CRm, Op2
 | 
					#define __ACCESS_CP15(CRn, Op1, CRm, Op2)	p15, Op1, %0, CRn, CRm, Op2
 | 
				
			||||||
#define __ACCESS_CP15_64(Op1, CRm)		p15, Op1, %Q0, %R0, CRm
 | 
					#define __ACCESS_CP15_64(Op1, CRm)		p15, Op1, %Q0, %R0, CRm
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -40,6 +40,11 @@ extern void arch_trigger_all_cpu_backtrace(bool);
 | 
				
			||||||
#define arch_trigger_all_cpu_backtrace(x) arch_trigger_all_cpu_backtrace(x)
 | 
					#define arch_trigger_all_cpu_backtrace(x) arch_trigger_all_cpu_backtrace(x)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static inline int nr_legacy_irqs(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return NR_IRQS_LEGACY;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -28,6 +28,18 @@
 | 
				
			||||||
unsigned long *vcpu_reg(struct kvm_vcpu *vcpu, u8 reg_num);
 | 
					unsigned long *vcpu_reg(struct kvm_vcpu *vcpu, u8 reg_num);
 | 
				
			||||||
unsigned long *vcpu_spsr(struct kvm_vcpu *vcpu);
 | 
					unsigned long *vcpu_spsr(struct kvm_vcpu *vcpu);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static inline unsigned long vcpu_get_reg(struct kvm_vcpu *vcpu,
 | 
				
			||||||
 | 
										 u8 reg_num)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return *vcpu_reg(vcpu, reg_num);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static inline void vcpu_set_reg(struct kvm_vcpu *vcpu, u8 reg_num,
 | 
				
			||||||
 | 
									unsigned long val)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						*vcpu_reg(vcpu, reg_num) = val;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool kvm_condition_valid(struct kvm_vcpu *vcpu);
 | 
					bool kvm_condition_valid(struct kvm_vcpu *vcpu);
 | 
				
			||||||
void kvm_skip_instr(struct kvm_vcpu *vcpu, bool is_wide_instr);
 | 
					void kvm_skip_instr(struct kvm_vcpu *vcpu, bool is_wide_instr);
 | 
				
			||||||
void kvm_inject_undefined(struct kvm_vcpu *vcpu);
 | 
					void kvm_inject_undefined(struct kvm_vcpu *vcpu);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -510,10 +510,14 @@ __copy_to_user_std(void __user *to, const void *from, unsigned long n);
 | 
				
			||||||
static inline unsigned long __must_check
 | 
					static inline unsigned long __must_check
 | 
				
			||||||
__copy_to_user(void __user *to, const void *from, unsigned long n)
 | 
					__copy_to_user(void __user *to, const void *from, unsigned long n)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					#ifndef CONFIG_UACCESS_WITH_MEMCPY
 | 
				
			||||||
	unsigned int __ua_flags = uaccess_save_and_enable();
 | 
						unsigned int __ua_flags = uaccess_save_and_enable();
 | 
				
			||||||
	n = arm_copy_to_user(to, from, n);
 | 
						n = arm_copy_to_user(to, from, n);
 | 
				
			||||||
	uaccess_restore(__ua_flags);
 | 
						uaccess_restore(__ua_flags);
 | 
				
			||||||
	return n;
 | 
						return n;
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
						return arm_copy_to_user(to, from, n);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern unsigned long __must_check
 | 
					extern unsigned long __must_check
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -416,6 +416,7 @@
 | 
				
			||||||
#define __NR_execveat			(__NR_SYSCALL_BASE+387)
 | 
					#define __NR_execveat			(__NR_SYSCALL_BASE+387)
 | 
				
			||||||
#define __NR_userfaultfd		(__NR_SYSCALL_BASE+388)
 | 
					#define __NR_userfaultfd		(__NR_SYSCALL_BASE+388)
 | 
				
			||||||
#define __NR_membarrier			(__NR_SYSCALL_BASE+389)
 | 
					#define __NR_membarrier			(__NR_SYSCALL_BASE+389)
 | 
				
			||||||
 | 
					#define __NR_mlock2			(__NR_SYSCALL_BASE+390)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * The following SWIs are ARM private.
 | 
					 * The following SWIs are ARM private.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,11 +17,6 @@
 | 
				
			||||||
#include <asm/mach/pci.h>
 | 
					#include <asm/mach/pci.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int debug_pci;
 | 
					static int debug_pci;
 | 
				
			||||||
static resource_size_t (*align_resource)(struct pci_dev *dev,
 | 
					 | 
				
			||||||
		  const struct resource *res,
 | 
					 | 
				
			||||||
		  resource_size_t start,
 | 
					 | 
				
			||||||
		  resource_size_t size,
 | 
					 | 
				
			||||||
		  resource_size_t align) = NULL;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * We can't use pci_get_device() here since we are
 | 
					 * We can't use pci_get_device() here since we are
 | 
				
			||||||
| 
						 | 
					@ -461,7 +456,6 @@ static void pcibios_init_hw(struct device *parent, struct hw_pci *hw,
 | 
				
			||||||
		sys->busnr   = busnr;
 | 
							sys->busnr   = busnr;
 | 
				
			||||||
		sys->swizzle = hw->swizzle;
 | 
							sys->swizzle = hw->swizzle;
 | 
				
			||||||
		sys->map_irq = hw->map_irq;
 | 
							sys->map_irq = hw->map_irq;
 | 
				
			||||||
		align_resource = hw->align_resource;
 | 
					 | 
				
			||||||
		INIT_LIST_HEAD(&sys->resources);
 | 
							INIT_LIST_HEAD(&sys->resources);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (hw->private_data)
 | 
							if (hw->private_data)
 | 
				
			||||||
| 
						 | 
					@ -470,6 +464,8 @@ static void pcibios_init_hw(struct device *parent, struct hw_pci *hw,
 | 
				
			||||||
		ret = hw->setup(nr, sys);
 | 
							ret = hw->setup(nr, sys);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (ret > 0) {
 | 
							if (ret > 0) {
 | 
				
			||||||
 | 
								struct pci_host_bridge *host_bridge;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			ret = pcibios_init_resources(nr, sys);
 | 
								ret = pcibios_init_resources(nr, sys);
 | 
				
			||||||
			if (ret)  {
 | 
								if (ret)  {
 | 
				
			||||||
				kfree(sys);
 | 
									kfree(sys);
 | 
				
			||||||
| 
						 | 
					@ -491,6 +487,9 @@ static void pcibios_init_hw(struct device *parent, struct hw_pci *hw,
 | 
				
			||||||
			busnr = sys->bus->busn_res.end + 1;
 | 
								busnr = sys->bus->busn_res.end + 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			list_add(&sys->node, head);
 | 
								list_add(&sys->node, head);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								host_bridge = pci_find_host_bridge(sys->bus);
 | 
				
			||||||
 | 
								host_bridge->align_resource = hw->align_resource;
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			kfree(sys);
 | 
								kfree(sys);
 | 
				
			||||||
			if (ret < 0)
 | 
								if (ret < 0)
 | 
				
			||||||
| 
						 | 
					@ -578,14 +577,18 @@ resource_size_t pcibios_align_resource(void *data, const struct resource *res,
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct pci_dev *dev = data;
 | 
						struct pci_dev *dev = data;
 | 
				
			||||||
	resource_size_t start = res->start;
 | 
						resource_size_t start = res->start;
 | 
				
			||||||
 | 
						struct pci_host_bridge *host_bridge;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (res->flags & IORESOURCE_IO && start & 0x300)
 | 
						if (res->flags & IORESOURCE_IO && start & 0x300)
 | 
				
			||||||
		start = (start + 0x3ff) & ~0x3ff;
 | 
							start = (start + 0x3ff) & ~0x3ff;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	start = (start + align - 1) & ~(align - 1);
 | 
						start = (start + align - 1) & ~(align - 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (align_resource)
 | 
						host_bridge = pci_find_host_bridge(dev->bus);
 | 
				
			||||||
		return align_resource(dev, res, start, size, align);
 | 
					
 | 
				
			||||||
 | 
						if (host_bridge->align_resource)
 | 
				
			||||||
 | 
							return host_bridge->align_resource(dev, res,
 | 
				
			||||||
 | 
									start, size, align);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return start;
 | 
						return start;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -399,6 +399,7 @@
 | 
				
			||||||
		CALL(sys_execveat)
 | 
							CALL(sys_execveat)
 | 
				
			||||||
		CALL(sys_userfaultfd)
 | 
							CALL(sys_userfaultfd)
 | 
				
			||||||
		CALL(sys_membarrier)
 | 
							CALL(sys_membarrier)
 | 
				
			||||||
 | 
							CALL(sys_mlock2)
 | 
				
			||||||
#ifndef syscalls_counted
 | 
					#ifndef syscalls_counted
 | 
				
			||||||
.equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls
 | 
					.equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls
 | 
				
			||||||
#define syscalls_counted
 | 
					#define syscalls_counted
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -95,6 +95,22 @@ void __show_regs(struct pt_regs *regs)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	unsigned long flags;
 | 
						unsigned long flags;
 | 
				
			||||||
	char buf[64];
 | 
						char buf[64];
 | 
				
			||||||
 | 
					#ifndef CONFIG_CPU_V7M
 | 
				
			||||||
 | 
						unsigned int domain;
 | 
				
			||||||
 | 
					#ifdef CONFIG_CPU_SW_DOMAIN_PAN
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
 | 
						 * Get the domain register for the parent context. In user
 | 
				
			||||||
 | 
						 * mode, we don't save the DACR, so lets use what it should
 | 
				
			||||||
 | 
						 * be. For other modes, we place it after the pt_regs struct.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						if (user_mode(regs))
 | 
				
			||||||
 | 
							domain = DACR_UACCESS_ENABLE;
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							domain = *(unsigned int *)(regs + 1);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
						domain = get_domain();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	show_regs_print_info(KERN_DEFAULT);
 | 
						show_regs_print_info(KERN_DEFAULT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -123,21 +139,8 @@ void __show_regs(struct pt_regs *regs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef CONFIG_CPU_V7M
 | 
					#ifndef CONFIG_CPU_V7M
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		unsigned int domain = get_domain();
 | 
					 | 
				
			||||||
		const char *segment;
 | 
							const char *segment;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_CPU_SW_DOMAIN_PAN
 | 
					 | 
				
			||||||
		/*
 | 
					 | 
				
			||||||
		 * Get the domain register for the parent context. In user
 | 
					 | 
				
			||||||
		 * mode, we don't save the DACR, so lets use what it should
 | 
					 | 
				
			||||||
		 * be. For other modes, we place it after the pt_regs struct.
 | 
					 | 
				
			||||||
		 */
 | 
					 | 
				
			||||||
		if (user_mode(regs))
 | 
					 | 
				
			||||||
			domain = DACR_UACCESS_ENABLE;
 | 
					 | 
				
			||||||
		else
 | 
					 | 
				
			||||||
			domain = *(unsigned int *)(regs + 1);
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if ((domain & domain_mask(DOMAIN_USER)) ==
 | 
							if ((domain & domain_mask(DOMAIN_USER)) ==
 | 
				
			||||||
		    domain_val(DOMAIN_USER, DOMAIN_NOACCESS))
 | 
							    domain_val(DOMAIN_USER, DOMAIN_NOACCESS))
 | 
				
			||||||
			segment = "none";
 | 
								segment = "none";
 | 
				
			||||||
| 
						 | 
					@ -163,11 +166,11 @@ void __show_regs(struct pt_regs *regs)
 | 
				
			||||||
		buf[0] = '\0';
 | 
							buf[0] = '\0';
 | 
				
			||||||
#ifdef CONFIG_CPU_CP15_MMU
 | 
					#ifdef CONFIG_CPU_CP15_MMU
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			unsigned int transbase, dac = get_domain();
 | 
								unsigned int transbase;
 | 
				
			||||||
			asm("mrc p15, 0, %0, c2, c0\n\t"
 | 
								asm("mrc p15, 0, %0, c2, c0\n\t"
 | 
				
			||||||
			    : "=r" (transbase));
 | 
								    : "=r" (transbase));
 | 
				
			||||||
			snprintf(buf, sizeof(buf), "  Table: %08x  DAC: %08x",
 | 
								snprintf(buf, sizeof(buf), "  Table: %08x  DAC: %08x",
 | 
				
			||||||
			  	transbase, dac);
 | 
									transbase, domain);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
		asm("mrc p15, 0, %0, c1, c0\n" : "=r" (ctrl));
 | 
							asm("mrc p15, 0, %0, c1, c0\n" : "=r" (ctrl));
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -36,10 +36,10 @@
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#define __user_swpX_asm(data, addr, res, temp, B)		\
 | 
					#define __user_swpX_asm(data, addr, res, temp, B)		\
 | 
				
			||||||
	__asm__ __volatile__(					\
 | 
						__asm__ __volatile__(					\
 | 
				
			||||||
	"	mov		%2, %1\n"			\
 | 
						"0:	ldrex"B"	%2, [%3]\n"			\
 | 
				
			||||||
	"0:	ldrex"B"	%1, [%3]\n"			\
 | 
						"1:	strex"B"	%0, %1, [%3]\n"			\
 | 
				
			||||||
	"1:	strex"B"	%0, %2, [%3]\n"			\
 | 
					 | 
				
			||||||
	"	cmp		%0, #0\n"			\
 | 
						"	cmp		%0, #0\n"			\
 | 
				
			||||||
 | 
						"	moveq		%1, %2\n"			\
 | 
				
			||||||
	"	movne		%0, %4\n"			\
 | 
						"	movne		%0, %4\n"			\
 | 
				
			||||||
	"2:\n"							\
 | 
						"2:\n"							\
 | 
				
			||||||
	"	.section	 .text.fixup,\"ax\"\n"		\
 | 
						"	.section	 .text.fixup,\"ax\"\n"		\
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -563,18 +563,13 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run)
 | 
				
			||||||
		if (vcpu->arch.power_off || vcpu->arch.pause)
 | 
							if (vcpu->arch.power_off || vcpu->arch.pause)
 | 
				
			||||||
			vcpu_sleep(vcpu);
 | 
								vcpu_sleep(vcpu);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/*
 | 
					 | 
				
			||||||
		 * Disarming the background timer must be done in a
 | 
					 | 
				
			||||||
		 * preemptible context, as this call may sleep.
 | 
					 | 
				
			||||||
		 */
 | 
					 | 
				
			||||||
		kvm_timer_flush_hwstate(vcpu);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		/*
 | 
							/*
 | 
				
			||||||
		 * Preparing the interrupts to be injected also
 | 
							 * Preparing the interrupts to be injected also
 | 
				
			||||||
		 * involves poking the GIC, which must be done in a
 | 
							 * involves poking the GIC, which must be done in a
 | 
				
			||||||
		 * non-preemptible context.
 | 
							 * non-preemptible context.
 | 
				
			||||||
		 */
 | 
							 */
 | 
				
			||||||
		preempt_disable();
 | 
							preempt_disable();
 | 
				
			||||||
 | 
							kvm_timer_flush_hwstate(vcpu);
 | 
				
			||||||
		kvm_vgic_flush_hwstate(vcpu);
 | 
							kvm_vgic_flush_hwstate(vcpu);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		local_irq_disable();
 | 
							local_irq_disable();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -115,7 +115,7 @@ int kvm_handle_mmio_return(struct kvm_vcpu *vcpu, struct kvm_run *run)
 | 
				
			||||||
		trace_kvm_mmio(KVM_TRACE_MMIO_READ, len, run->mmio.phys_addr,
 | 
							trace_kvm_mmio(KVM_TRACE_MMIO_READ, len, run->mmio.phys_addr,
 | 
				
			||||||
			       data);
 | 
								       data);
 | 
				
			||||||
		data = vcpu_data_host_to_guest(vcpu, data, len);
 | 
							data = vcpu_data_host_to_guest(vcpu, data, len);
 | 
				
			||||||
		*vcpu_reg(vcpu, vcpu->arch.mmio_decode.rt) = data;
 | 
							vcpu_set_reg(vcpu, vcpu->arch.mmio_decode.rt, data);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
| 
						 | 
					@ -186,7 +186,8 @@ int io_mem_abort(struct kvm_vcpu *vcpu, struct kvm_run *run,
 | 
				
			||||||
	rt = vcpu->arch.mmio_decode.rt;
 | 
						rt = vcpu->arch.mmio_decode.rt;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (is_write) {
 | 
						if (is_write) {
 | 
				
			||||||
		data = vcpu_data_guest_to_host(vcpu, *vcpu_reg(vcpu, rt), len);
 | 
							data = vcpu_data_guest_to_host(vcpu, vcpu_get_reg(vcpu, rt),
 | 
				
			||||||
 | 
										       len);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		trace_kvm_mmio(KVM_TRACE_MMIO_WRITE, len, fault_ipa, data);
 | 
							trace_kvm_mmio(KVM_TRACE_MMIO_WRITE, len, fault_ipa, data);
 | 
				
			||||||
		mmio_write_buf(data_buf, len, data);
 | 
							mmio_write_buf(data_buf, len, data);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -98,6 +98,11 @@ static void kvm_flush_dcache_pud(pud_t pud)
 | 
				
			||||||
	__kvm_flush_dcache_pud(pud);
 | 
						__kvm_flush_dcache_pud(pud);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static bool kvm_is_device_pfn(unsigned long pfn)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return !pfn_valid(pfn);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * stage2_dissolve_pmd() - clear and flush huge PMD entry
 | 
					 * stage2_dissolve_pmd() - clear and flush huge PMD entry
 | 
				
			||||||
 * @kvm:	pointer to kvm structure.
 | 
					 * @kvm:	pointer to kvm structure.
 | 
				
			||||||
| 
						 | 
					@ -213,7 +218,7 @@ static void unmap_ptes(struct kvm *kvm, pmd_t *pmd,
 | 
				
			||||||
			kvm_tlb_flush_vmid_ipa(kvm, addr);
 | 
								kvm_tlb_flush_vmid_ipa(kvm, addr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			/* No need to invalidate the cache for device mappings */
 | 
								/* No need to invalidate the cache for device mappings */
 | 
				
			||||||
			if ((pte_val(old_pte) & PAGE_S2_DEVICE) != PAGE_S2_DEVICE)
 | 
								if (!kvm_is_device_pfn(pte_pfn(old_pte)))
 | 
				
			||||||
				kvm_flush_dcache_pte(old_pte);
 | 
									kvm_flush_dcache_pte(old_pte);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			put_page(virt_to_page(pte));
 | 
								put_page(virt_to_page(pte));
 | 
				
			||||||
| 
						 | 
					@ -305,8 +310,7 @@ static void stage2_flush_ptes(struct kvm *kvm, pmd_t *pmd,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pte = pte_offset_kernel(pmd, addr);
 | 
						pte = pte_offset_kernel(pmd, addr);
 | 
				
			||||||
	do {
 | 
						do {
 | 
				
			||||||
		if (!pte_none(*pte) &&
 | 
							if (!pte_none(*pte) && !kvm_is_device_pfn(pte_pfn(*pte)))
 | 
				
			||||||
		    (pte_val(*pte) & PAGE_S2_DEVICE) != PAGE_S2_DEVICE)
 | 
					 | 
				
			||||||
			kvm_flush_dcache_pte(*pte);
 | 
								kvm_flush_dcache_pte(*pte);
 | 
				
			||||||
	} while (pte++, addr += PAGE_SIZE, addr != end);
 | 
						} while (pte++, addr += PAGE_SIZE, addr != end);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1037,11 +1041,6 @@ static bool kvm_is_write_fault(struct kvm_vcpu *vcpu)
 | 
				
			||||||
	return kvm_vcpu_dabt_iswrite(vcpu);
 | 
						return kvm_vcpu_dabt_iswrite(vcpu);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static bool kvm_is_device_pfn(unsigned long pfn)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	return !pfn_valid(pfn);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * stage2_wp_ptes - write protect PMD range
 | 
					 * stage2_wp_ptes - write protect PMD range
 | 
				
			||||||
 * @pmd:	pointer to pmd entry
 | 
					 * @pmd:	pointer to pmd entry
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -75,7 +75,7 @@ static unsigned long kvm_psci_vcpu_on(struct kvm_vcpu *source_vcpu)
 | 
				
			||||||
	unsigned long context_id;
 | 
						unsigned long context_id;
 | 
				
			||||||
	phys_addr_t target_pc;
 | 
						phys_addr_t target_pc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cpu_id = *vcpu_reg(source_vcpu, 1) & MPIDR_HWID_BITMASK;
 | 
						cpu_id = vcpu_get_reg(source_vcpu, 1) & MPIDR_HWID_BITMASK;
 | 
				
			||||||
	if (vcpu_mode_is_32bit(source_vcpu))
 | 
						if (vcpu_mode_is_32bit(source_vcpu))
 | 
				
			||||||
		cpu_id &= ~((u32) 0);
 | 
							cpu_id &= ~((u32) 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -94,8 +94,8 @@ static unsigned long kvm_psci_vcpu_on(struct kvm_vcpu *source_vcpu)
 | 
				
			||||||
			return PSCI_RET_INVALID_PARAMS;
 | 
								return PSCI_RET_INVALID_PARAMS;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	target_pc = *vcpu_reg(source_vcpu, 2);
 | 
						target_pc = vcpu_get_reg(source_vcpu, 2);
 | 
				
			||||||
	context_id = *vcpu_reg(source_vcpu, 3);
 | 
						context_id = vcpu_get_reg(source_vcpu, 3);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kvm_reset_vcpu(vcpu);
 | 
						kvm_reset_vcpu(vcpu);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -114,7 +114,7 @@ static unsigned long kvm_psci_vcpu_on(struct kvm_vcpu *source_vcpu)
 | 
				
			||||||
	 * NOTE: We always update r0 (or x0) because for PSCI v0.1
 | 
						 * NOTE: We always update r0 (or x0) because for PSCI v0.1
 | 
				
			||||||
	 * the general puspose registers are undefined upon CPU_ON.
 | 
						 * the general puspose registers are undefined upon CPU_ON.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	*vcpu_reg(vcpu, 0) = context_id;
 | 
						vcpu_set_reg(vcpu, 0, context_id);
 | 
				
			||||||
	vcpu->arch.power_off = false;
 | 
						vcpu->arch.power_off = false;
 | 
				
			||||||
	smp_mb();		/* Make sure the above is visible */
 | 
						smp_mb();		/* Make sure the above is visible */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -134,8 +134,8 @@ static unsigned long kvm_psci_vcpu_affinity_info(struct kvm_vcpu *vcpu)
 | 
				
			||||||
	struct kvm *kvm = vcpu->kvm;
 | 
						struct kvm *kvm = vcpu->kvm;
 | 
				
			||||||
	struct kvm_vcpu *tmp;
 | 
						struct kvm_vcpu *tmp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	target_affinity = *vcpu_reg(vcpu, 1);
 | 
						target_affinity = vcpu_get_reg(vcpu, 1);
 | 
				
			||||||
	lowest_affinity_level = *vcpu_reg(vcpu, 2);
 | 
						lowest_affinity_level = vcpu_get_reg(vcpu, 2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Determine target affinity mask */
 | 
						/* Determine target affinity mask */
 | 
				
			||||||
	target_affinity_mask = psci_affinity_mask(lowest_affinity_level);
 | 
						target_affinity_mask = psci_affinity_mask(lowest_affinity_level);
 | 
				
			||||||
| 
						 | 
					@ -209,7 +209,7 @@ int kvm_psci_version(struct kvm_vcpu *vcpu)
 | 
				
			||||||
static int kvm_psci_0_2_call(struct kvm_vcpu *vcpu)
 | 
					static int kvm_psci_0_2_call(struct kvm_vcpu *vcpu)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int ret = 1;
 | 
						int ret = 1;
 | 
				
			||||||
	unsigned long psci_fn = *vcpu_reg(vcpu, 0) & ~((u32) 0);
 | 
						unsigned long psci_fn = vcpu_get_reg(vcpu, 0) & ~((u32) 0);
 | 
				
			||||||
	unsigned long val;
 | 
						unsigned long val;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	switch (psci_fn) {
 | 
						switch (psci_fn) {
 | 
				
			||||||
| 
						 | 
					@ -273,13 +273,13 @@ static int kvm_psci_0_2_call(struct kvm_vcpu *vcpu)
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	*vcpu_reg(vcpu, 0) = val;
 | 
						vcpu_set_reg(vcpu, 0, val);
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int kvm_psci_0_1_call(struct kvm_vcpu *vcpu)
 | 
					static int kvm_psci_0_1_call(struct kvm_vcpu *vcpu)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	unsigned long psci_fn = *vcpu_reg(vcpu, 0) & ~((u32) 0);
 | 
						unsigned long psci_fn = vcpu_get_reg(vcpu, 0) & ~((u32) 0);
 | 
				
			||||||
	unsigned long val;
 | 
						unsigned long val;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	switch (psci_fn) {
 | 
						switch (psci_fn) {
 | 
				
			||||||
| 
						 | 
					@ -295,7 +295,7 @@ static int kvm_psci_0_1_call(struct kvm_vcpu *vcpu)
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	*vcpu_reg(vcpu, 0) = val;
 | 
						vcpu_set_reg(vcpu, 0, val);
 | 
				
			||||||
	return 1;
 | 
						return 1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -88,6 +88,7 @@ pin_page_for_write(const void __user *_addr, pte_t **ptep, spinlock_t **ptlp)
 | 
				
			||||||
static unsigned long noinline
 | 
					static unsigned long noinline
 | 
				
			||||||
__copy_to_user_memcpy(void __user *to, const void *from, unsigned long n)
 | 
					__copy_to_user_memcpy(void __user *to, const void *from, unsigned long n)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						unsigned long ua_flags;
 | 
				
			||||||
	int atomic;
 | 
						int atomic;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (unlikely(segment_eq(get_fs(), KERNEL_DS))) {
 | 
						if (unlikely(segment_eq(get_fs(), KERNEL_DS))) {
 | 
				
			||||||
| 
						 | 
					@ -118,7 +119,9 @@ __copy_to_user_memcpy(void __user *to, const void *from, unsigned long n)
 | 
				
			||||||
		if (tocopy > n)
 | 
							if (tocopy > n)
 | 
				
			||||||
			tocopy = n;
 | 
								tocopy = n;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							ua_flags = uaccess_save_and_enable();
 | 
				
			||||||
		memcpy((void *)to, from, tocopy);
 | 
							memcpy((void *)to, from, tocopy);
 | 
				
			||||||
 | 
							uaccess_restore(ua_flags);
 | 
				
			||||||
		to += tocopy;
 | 
							to += tocopy;
 | 
				
			||||||
		from += tocopy;
 | 
							from += tocopy;
 | 
				
			||||||
		n -= tocopy;
 | 
							n -= tocopy;
 | 
				
			||||||
| 
						 | 
					@ -145,14 +148,21 @@ arm_copy_to_user(void __user *to, const void *from, unsigned long n)
 | 
				
			||||||
	 * With frame pointer disabled, tail call optimization kicks in
 | 
						 * With frame pointer disabled, tail call optimization kicks in
 | 
				
			||||||
	 * as well making this test almost invisible.
 | 
						 * as well making this test almost invisible.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	if (n < 64)
 | 
						if (n < 64) {
 | 
				
			||||||
		return __copy_to_user_std(to, from, n);
 | 
							unsigned long ua_flags = uaccess_save_and_enable();
 | 
				
			||||||
	return __copy_to_user_memcpy(to, from, n);
 | 
							n = __copy_to_user_std(to, from, n);
 | 
				
			||||||
 | 
							uaccess_restore(ua_flags);
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							n = __copy_to_user_memcpy(to, from, n);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return n;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
static unsigned long noinline
 | 
					static unsigned long noinline
 | 
				
			||||||
__clear_user_memset(void __user *addr, unsigned long n)
 | 
					__clear_user_memset(void __user *addr, unsigned long n)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						unsigned long ua_flags;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (unlikely(segment_eq(get_fs(), KERNEL_DS))) {
 | 
						if (unlikely(segment_eq(get_fs(), KERNEL_DS))) {
 | 
				
			||||||
		memset((void *)addr, 0, n);
 | 
							memset((void *)addr, 0, n);
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
| 
						 | 
					@ -175,7 +185,9 @@ __clear_user_memset(void __user *addr, unsigned long n)
 | 
				
			||||||
		if (tocopy > n)
 | 
							if (tocopy > n)
 | 
				
			||||||
			tocopy = n;
 | 
								tocopy = n;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							ua_flags = uaccess_save_and_enable();
 | 
				
			||||||
		memset((void *)addr, 0, tocopy);
 | 
							memset((void *)addr, 0, tocopy);
 | 
				
			||||||
 | 
							uaccess_restore(ua_flags);
 | 
				
			||||||
		addr += tocopy;
 | 
							addr += tocopy;
 | 
				
			||||||
		n -= tocopy;
 | 
							n -= tocopy;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -193,9 +205,14 @@ __clear_user_memset(void __user *addr, unsigned long n)
 | 
				
			||||||
unsigned long arm_clear_user(void __user *addr, unsigned long n)
 | 
					unsigned long arm_clear_user(void __user *addr, unsigned long n)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/* See rational for this in __copy_to_user() above. */
 | 
						/* See rational for this in __copy_to_user() above. */
 | 
				
			||||||
	if (n < 64)
 | 
						if (n < 64) {
 | 
				
			||||||
		return __clear_user_std(addr, n);
 | 
							unsigned long ua_flags = uaccess_save_and_enable();
 | 
				
			||||||
	return __clear_user_memset(addr, n);
 | 
							n = __clear_user_std(addr, n);
 | 
				
			||||||
 | 
							uaccess_restore(ua_flags);
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							n = __clear_user_memset(addr, n);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return n;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if 0
 | 
					#if 0
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,7 +4,6 @@ menuconfig ARCH_AT91
 | 
				
			||||||
	select ARCH_REQUIRE_GPIOLIB
 | 
						select ARCH_REQUIRE_GPIOLIB
 | 
				
			||||||
	select COMMON_CLK_AT91
 | 
						select COMMON_CLK_AT91
 | 
				
			||||||
	select PINCTRL
 | 
						select PINCTRL
 | 
				
			||||||
	select PINCTRL_AT91
 | 
					 | 
				
			||||||
	select SOC_BUS
 | 
						select SOC_BUS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if ARCH_AT91
 | 
					if ARCH_AT91
 | 
				
			||||||
| 
						 | 
					@ -17,6 +16,7 @@ config SOC_SAMA5D2
 | 
				
			||||||
	select HAVE_AT91_USB_CLK
 | 
						select HAVE_AT91_USB_CLK
 | 
				
			||||||
	select HAVE_AT91_H32MX
 | 
						select HAVE_AT91_H32MX
 | 
				
			||||||
	select HAVE_AT91_GENERATED_CLK
 | 
						select HAVE_AT91_GENERATED_CLK
 | 
				
			||||||
 | 
						select PINCTRL_AT91PIO4
 | 
				
			||||||
	help
 | 
						help
 | 
				
			||||||
	  Select this if ou are using one of Atmel's SAMA5D2 family SoC.
 | 
						  Select this if ou are using one of Atmel's SAMA5D2 family SoC.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -27,6 +27,7 @@ config SOC_SAMA5D3
 | 
				
			||||||
	select HAVE_AT91_UTMI
 | 
						select HAVE_AT91_UTMI
 | 
				
			||||||
	select HAVE_AT91_SMD
 | 
						select HAVE_AT91_SMD
 | 
				
			||||||
	select HAVE_AT91_USB_CLK
 | 
						select HAVE_AT91_USB_CLK
 | 
				
			||||||
 | 
						select PINCTRL_AT91
 | 
				
			||||||
	help
 | 
						help
 | 
				
			||||||
	  Select this if you are using one of Atmel's SAMA5D3 family SoC.
 | 
						  Select this if you are using one of Atmel's SAMA5D3 family SoC.
 | 
				
			||||||
	  This support covers SAMA5D31, SAMA5D33, SAMA5D34, SAMA5D35, SAMA5D36.
 | 
						  This support covers SAMA5D31, SAMA5D33, SAMA5D34, SAMA5D35, SAMA5D36.
 | 
				
			||||||
| 
						 | 
					@ -40,6 +41,7 @@ config SOC_SAMA5D4
 | 
				
			||||||
	select HAVE_AT91_SMD
 | 
						select HAVE_AT91_SMD
 | 
				
			||||||
	select HAVE_AT91_USB_CLK
 | 
						select HAVE_AT91_USB_CLK
 | 
				
			||||||
	select HAVE_AT91_H32MX
 | 
						select HAVE_AT91_H32MX
 | 
				
			||||||
 | 
						select PINCTRL_AT91
 | 
				
			||||||
	help
 | 
						help
 | 
				
			||||||
	  Select this if you are using one of Atmel's SAMA5D4 family SoC.
 | 
						  Select this if you are using one of Atmel's SAMA5D4 family SoC.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -50,6 +52,7 @@ config SOC_AT91RM9200
 | 
				
			||||||
	select CPU_ARM920T
 | 
						select CPU_ARM920T
 | 
				
			||||||
	select HAVE_AT91_USB_CLK
 | 
						select HAVE_AT91_USB_CLK
 | 
				
			||||||
	select MIGHT_HAVE_PCI
 | 
						select MIGHT_HAVE_PCI
 | 
				
			||||||
 | 
						select PINCTRL_AT91
 | 
				
			||||||
	select SOC_SAM_V4_V5
 | 
						select SOC_SAM_V4_V5
 | 
				
			||||||
	select SRAM if PM
 | 
						select SRAM if PM
 | 
				
			||||||
	help
 | 
						help
 | 
				
			||||||
| 
						 | 
					@ -65,6 +68,7 @@ config SOC_AT91SAM9
 | 
				
			||||||
	select HAVE_AT91_UTMI
 | 
						select HAVE_AT91_UTMI
 | 
				
			||||||
	select HAVE_FB_ATMEL
 | 
						select HAVE_FB_ATMEL
 | 
				
			||||||
	select MEMORY
 | 
						select MEMORY
 | 
				
			||||||
 | 
						select PINCTRL_AT91
 | 
				
			||||||
	select SOC_SAM_V4_V5
 | 
						select SOC_SAM_V4_V5
 | 
				
			||||||
	select SRAM if PM
 | 
						select SRAM if PM
 | 
				
			||||||
	help
 | 
						help
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -41,8 +41,10 @@
 | 
				
			||||||
 * implementation should be moved down into the pinctrl driver and get
 | 
					 * implementation should be moved down into the pinctrl driver and get
 | 
				
			||||||
 * called as part of the generic suspend/resume path.
 | 
					 * called as part of the generic suspend/resume path.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					#ifdef CONFIG_PINCTRL_AT91
 | 
				
			||||||
extern void at91_pinctrl_gpio_suspend(void);
 | 
					extern void at91_pinctrl_gpio_suspend(void);
 | 
				
			||||||
extern void at91_pinctrl_gpio_resume(void);
 | 
					extern void at91_pinctrl_gpio_resume(void);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct {
 | 
					static struct {
 | 
				
			||||||
	unsigned long uhp_udp_mask;
 | 
						unsigned long uhp_udp_mask;
 | 
				
			||||||
| 
						 | 
					@ -151,8 +153,9 @@ static void at91_pm_suspend(suspend_state_t state)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int at91_pm_enter(suspend_state_t state)
 | 
					static int at91_pm_enter(suspend_state_t state)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					#ifdef CONFIG_PINCTRL_AT91
 | 
				
			||||||
	at91_pinctrl_gpio_suspend();
 | 
						at91_pinctrl_gpio_suspend();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
	switch (state) {
 | 
						switch (state) {
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
	 * Suspend-to-RAM is like STANDBY plus slow clock mode, so
 | 
						 * Suspend-to-RAM is like STANDBY plus slow clock mode, so
 | 
				
			||||||
| 
						 | 
					@ -192,7 +195,9 @@ static int at91_pm_enter(suspend_state_t state)
 | 
				
			||||||
error:
 | 
					error:
 | 
				
			||||||
	target_state = PM_SUSPEND_ON;
 | 
						target_state = PM_SUSPEND_ON;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef CONFIG_PINCTRL_AT91
 | 
				
			||||||
	at91_pinctrl_gpio_resume();
 | 
						at91_pinctrl_gpio_resume();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,13 +18,13 @@
 | 
				
			||||||
	@ check low interrupts
 | 
						@ check low interrupts
 | 
				
			||||||
	ldr	\irqstat, [\base, #IRQ_CAUSE_LOW_OFF]
 | 
						ldr	\irqstat, [\base, #IRQ_CAUSE_LOW_OFF]
 | 
				
			||||||
	ldr	\tmp, [\base, #IRQ_MASK_LOW_OFF]
 | 
						ldr	\tmp, [\base, #IRQ_MASK_LOW_OFF]
 | 
				
			||||||
	mov	\irqnr, #31
 | 
						mov	\irqnr, #32
 | 
				
			||||||
	ands	\irqstat, \irqstat, \tmp
 | 
						ands	\irqstat, \irqstat, \tmp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@ if no low interrupts set, check high interrupts
 | 
						@ if no low interrupts set, check high interrupts
 | 
				
			||||||
	ldreq	\irqstat, [\base, #IRQ_CAUSE_HIGH_OFF]
 | 
						ldreq	\irqstat, [\base, #IRQ_CAUSE_HIGH_OFF]
 | 
				
			||||||
	ldreq	\tmp, [\base, #IRQ_MASK_HIGH_OFF]
 | 
						ldreq	\tmp, [\base, #IRQ_MASK_HIGH_OFF]
 | 
				
			||||||
	moveq	\irqnr, #63
 | 
						moveq	\irqnr, #64
 | 
				
			||||||
	andeqs	\irqstat, \irqstat, \tmp
 | 
						andeqs	\irqstat, \irqstat, \tmp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@ find first active interrupt source
 | 
						@ find first active interrupt source
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
		Reference in a new issue