mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 16:54:21 +00:00 
			
		
		
		
	Linux 4.2-rc7
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAABAgAGBQJV0R4AAAoJEHm+PkMAQRiG8xIH/AmiRd+JDrs0qqEy46p6X8Gn 0lB5/KsGycvIGIBTiy2nZzcT0Ly6LeFUKUjzPytlOhIZPMrxMVMShDaQKCXXIMUr 1mN6hkvpkLNnUhvL2fR6mm0zkjbz3zZEazFY+Jic8wQrtSkHgfH0DXqSAo8le0f8 kNrd5BPPhIwvpHGaNGFdTpbgpPcalXyQk/fHyvDGidbyXzY/d7l05QfYJ6XCD4Zm IAy48iK5BFts2+z3aOYrOeuuCcm1qFX8YArqzE1rfPp+U/LQpfUfij4cmOqDLn/F qnv9E7bRRVovvrgKe4I3Trta8kT53VLJvqpdw2Usqo8zvhs4VyrYpHC+gEE6YUY= =9Rd4 -----END PGP SIGNATURE----- Merge tag 'v4.2-rc7' into x86/boot, to refresh the branch before merging new changes Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
		
						commit
						5461bd81bf
					
				
					 1476 changed files with 18232 additions and 10007 deletions
				
			
		
							
								
								
									
										6
									
								
								.mailmap
									
										
									
									
									
								
							
							
						
						
									
										6
									
								
								.mailmap
									
										
									
									
									
								
							|  | @ -17,6 +17,7 @@ Aleksey Gorelov <aleksey_gorelov@phoenix.com> | |||
| Al Viro <viro@ftp.linux.org.uk> | ||||
| Al Viro <viro@zenIV.linux.org.uk> | ||||
| Andreas Herrmann <aherrman@de.ibm.com> | ||||
| Andrey Ryabinin <ryabinin.a.a@gmail.com> <a.ryabinin@samsung.com> | ||||
| Andrew Morton <akpm@linux-foundation.org> | ||||
| Andrew Vasquez <andrew.vasquez@qlogic.com> | ||||
| Andy Adamson <andros@citi.umich.edu> | ||||
|  | @ -116,6 +117,7 @@ Shiraz Hashim <shiraz.linux.kernel@gmail.com> <shiraz.hashim@st.com> | |||
| Simon Kelley <simon@thekelleys.org.uk> | ||||
| Stéphane Witzmann <stephane.witzmann@ubpmes.univ-bpclermont.fr> | ||||
| Stephen Hemminger <shemminger@osdl.org> | ||||
| Sudeep Holla <sudeep.holla@arm.com> Sudeep KarkadaNagesha <sudeep.karkadanagesha@arm.com> | ||||
| Sumit Semwal <sumit.semwal@ti.com> | ||||
| Tejun Heo <htejun@gmail.com> | ||||
| Thomas Graf <tgraf@suug.ch> | ||||
|  | @ -125,7 +127,9 @@ Uwe Kleine-König <ukleinek@informatik.uni-freiburg.de> | |||
| Uwe Kleine-König <ukl@pengutronix.de> | ||||
| Uwe Kleine-König <Uwe.Kleine-Koenig@digi.com> | ||||
| Valdis Kletnieks <Valdis.Kletnieks@vt.edu> | ||||
| Viresh Kumar <viresh.linux@gmail.com> <viresh.kumar@st.com> | ||||
| Viresh Kumar <vireshk@kernel.org> <viresh.kumar@st.com> | ||||
| Viresh Kumar <vireshk@kernel.org> <viresh.linux@gmail.com> | ||||
| Viresh Kumar <vireshk@kernel.org> <viresh.kumar2@arm.com> | ||||
| Takashi YOSHII <takashi.yoshii.zj@renesas.com> | ||||
| Yusuke Goda <goda.yusuke@renesas.com> | ||||
| Gustavo Padovan <gustavo@las.ic.unicamp.br> | ||||
|  |  | |||
|  | @ -1234,10 +1234,8 @@ Description: | |||
| 		object is near the sensor, usually be observing | ||||
| 		reflectivity of infrared or ultrasound emitted. | ||||
| 		Often these sensors are unit less and as such conversion | ||||
| 		to SI units is not possible.  Where it is, the units should | ||||
| 		be meters.  If such a conversion is not possible, the reported | ||||
| 		values should behave in the same way as a distance, i.e. lower | ||||
| 		values indicate something is closer to the sensor. | ||||
| 		to SI units is not possible. Higher proximity measurements | ||||
| 		indicate closer objects, and vice versa. | ||||
| 
 | ||||
| What:		/sys/.../iio:deviceX/in_illuminance_input | ||||
| What:		/sys/.../iio:deviceX/in_illuminance_raw | ||||
|  |  | |||
|  | @ -3383,7 +3383,7 @@ void intel_crt_init(struct drm_device *dev) | |||
| 	<td valign="top" >TBD</td> | ||||
| 	</tr> | ||||
| 	<tr> | ||||
| 	<td rowspan="2" valign="top" >omap</td> | ||||
| 	<td valign="top" >omap</td> | ||||
| 	<td valign="top" >Generic</td> | ||||
| 	<td valign="top" >“zorder”</td> | ||||
| 	<td valign="top" >RANGE</td> | ||||
|  |  | |||
|  | @ -60,4 +60,4 @@ Introduction | |||
|   Document Author | ||||
|   --------------- | ||||
| 
 | ||||
|   Viresh Kumar <viresh.linux@gmail.com>, (c) 2010-2012 ST Microelectronics | ||||
|   Viresh Kumar <vireshk@kernel.org>, (c) 2010-2012 ST Microelectronics | ||||
|  |  | |||
|  | @ -36,7 +36,7 @@ SunXi family | |||
|         + User Manual | ||||
|           http://dl.linux-sunxi.org/A20/A20%20User%20Manual%202013-03-22.pdf | ||||
| 
 | ||||
|       - Allwinner A23 | ||||
|       - Allwinner A23 (sun8i) | ||||
|         + Datasheet | ||||
|           http://dl.linux-sunxi.org/A23/A23%20Datasheet%20V1.0%2020130830.pdf | ||||
|         + User Manual | ||||
|  | @ -55,7 +55,23 @@ SunXi family | |||
|         + User Manual | ||||
|           http://dl.linux-sunxi.org/A31/A3x_release_document/A31s/IC/A31s%20User%20Manual%20%20V1.0%2020130322.pdf | ||||
| 
 | ||||
|       - Allwinner A33 (sun8i) | ||||
|         + Datasheet | ||||
|           http://dl.linux-sunxi.org/A33/A33%20Datasheet%20release%201.1.pdf | ||||
|         + User Manual | ||||
|           http://dl.linux-sunxi.org/A33/A33%20user%20manual%20release%201.1.pdf | ||||
| 
 | ||||
|       - Allwinner H3 (sun8i) | ||||
|         + Datasheet | ||||
|           http://dl.linux-sunxi.org/H3/Allwinner_H3_Datasheet_V1.0.pdf | ||||
| 
 | ||||
|     * Quad ARM Cortex-A15, Quad ARM Cortex-A7 based SoCs | ||||
|       - Allwinner A80 | ||||
|         + Datasheet | ||||
| 	  http://dl.linux-sunxi.org/A80/A80_Datasheet_Revision_1.0_0404.pdf | ||||
| 
 | ||||
|     * Octa ARM Cortex-A7 based SoCs | ||||
|       - Allwinner A83T | ||||
|         + Not Supported | ||||
|         + Datasheet | ||||
|           http://dl.linux-sunxi.org/A83T/A83T_datasheet_Revision_1.1.pdf | ||||
|  |  | |||
|  | @ -258,6 +258,12 @@ cache metadata mode      : ro if read-only, rw if read-write | |||
| 	no further I/O will be permitted and the status will just | ||||
| 	contain the string 'Fail'.  The userspace recovery tools | ||||
| 	should then be used. | ||||
| needs_check		 : 'needs_check' if set, '-' if not set | ||||
| 	A metadata operation has failed, resulting in the needs_check | ||||
| 	flag being set in the metadata's superblock.  The metadata | ||||
| 	device must be deactivated and checked/repaired before the | ||||
| 	cache can be made fully operational again.  '-' indicates | ||||
| 	needs_check is not set. | ||||
| 
 | ||||
| Messages | ||||
| -------- | ||||
|  |  | |||
|  | @ -296,7 +296,7 @@ ii) Status | |||
| 	underlying device.  When this is enabled when loading the table, | ||||
| 	it can get disabled if the underlying device doesn't support it. | ||||
| 
 | ||||
|     ro|rw | ||||
|     ro|rw|out_of_data_space | ||||
| 	If the pool encounters certain types of device failures it will | ||||
| 	drop into a read-only metadata mode in which no changes to | ||||
| 	the pool metadata (like allocating new blocks) are permitted. | ||||
|  | @ -314,6 +314,13 @@ ii) Status | |||
| 	module parameter can be used to change this timeout -- it | ||||
| 	defaults to 60 seconds but may be disabled using a value of 0. | ||||
| 
 | ||||
|     needs_check | ||||
| 	A metadata operation has failed, resulting in the needs_check | ||||
| 	flag being set in the metadata's superblock.  The metadata | ||||
| 	device must be deactivated and checked/repaired before the | ||||
| 	thin-pool can be made fully operational again.  '-' indicates | ||||
| 	needs_check is not set. | ||||
| 
 | ||||
| iii) Messages | ||||
| 
 | ||||
|     create_thin <dev id> | ||||
|  |  | |||
|  | @ -199,6 +199,7 @@ nodes to be present and contain the properties described below. | |||
| 			    "qcom,kpss-acc-v1" | ||||
| 			    "qcom,kpss-acc-v2" | ||||
| 			    "rockchip,rk3066-smp" | ||||
| 			    "ste,dbx500-smp" | ||||
| 
 | ||||
| 	- cpu-release-addr | ||||
| 		Usage: required for systems that have an "enable-method" | ||||
|  |  | |||
|  | @ -9,4 +9,6 @@ using one of the following compatible strings: | |||
|   allwinner,sun6i-a31 | ||||
|   allwinner,sun7i-a20 | ||||
|   allwinner,sun8i-a23 | ||||
|   allwinner,sun8i-a33 | ||||
|   allwinner,sun8i-h3 | ||||
|   allwinner,sun9i-a80 | ||||
|  |  | |||
|  | @ -35,7 +35,7 @@ Example: | |||
| 			device_type = "dma"; | ||||
| 			reg = <0x0 0x1f270000 0x0 0x10000>, | ||||
| 			      <0x0 0x1f200000 0x0 0x10000>, | ||||
| 			      <0x0 0x1b008000 0x0 0x2000>, | ||||
| 			      <0x0 0x1b000000 0x0 0x400000>, | ||||
| 			      <0x0 0x1054a000 0x0 0x100>; | ||||
| 			interrupts = <0x0 0x82 0x4>, | ||||
| 				     <0x0 0xb8 0x4>, | ||||
|  |  | |||
|  | @ -65,8 +65,10 @@ Optional properties: | |||
| - edid: verbatim EDID data block describing attached display. | ||||
| - ddc: phandle describing the i2c bus handling the display data | ||||
|   channel | ||||
| - port: A port node with endpoint definitions as defined in | ||||
| - port@[0-1]: Port nodes with endpoint definitions as defined in | ||||
|   Documentation/devicetree/bindings/media/video-interfaces.txt. | ||||
|   Port 0 is the input port connected to the IPU display interface, | ||||
|   port 1 is the output port connected to a panel. | ||||
| 
 | ||||
| example: | ||||
| 
 | ||||
|  | @ -75,9 +77,29 @@ display@di0 { | |||
| 	edid = [edid-data]; | ||||
| 	interface-pix-fmt = "rgb24"; | ||||
| 
 | ||||
| 	port { | ||||
| 	port@0 { | ||||
| 		reg = <0>; | ||||
| 
 | ||||
| 		display_in: endpoint { | ||||
| 			remote-endpoint = <&ipu_di0_disp0>; | ||||
| 		}; | ||||
| 	}; | ||||
| 
 | ||||
| 	port@1 { | ||||
| 		reg = <1>; | ||||
| 
 | ||||
| 		display_out: endpoint { | ||||
| 			remote-endpoint = <&panel_in>; | ||||
| 		}; | ||||
| 	}; | ||||
| }; | ||||
| 
 | ||||
| panel { | ||||
| 	... | ||||
| 
 | ||||
| 	port { | ||||
| 		panel_in: endpoint { | ||||
| 			remote-endpoint = <&display_out>; | ||||
| 		}; | ||||
| 	}; | ||||
| }; | ||||
|  |  | |||
|  | @ -35,3 +35,6 @@ the PCIe specification. | |||
| 
 | ||||
|                       NOTE: this only applies to the SMMU itself, not | ||||
|                       masters connected upstream of the SMMU. | ||||
| 
 | ||||
| - hisilicon,broken-prefetch-cmd | ||||
|                     : Avoid sending CMD_PREFETCH_* commands to the SMMU. | ||||
|  |  | |||
|  | @ -8,6 +8,7 @@ of the EMIF IP and memory parts attached to it. | |||
| Required properties: | ||||
| - compatible	: Should be of the form "ti,emif-<ip-rev>" where <ip-rev> | ||||
|   is the IP revision of the specific EMIF instance. | ||||
| 		  For am437x should be ti,emif-am4372. | ||||
| 
 | ||||
| - phy-type	: <u32> indicating the DDR phy type. Following are the | ||||
|   allowed values | ||||
|  |  | |||
|  | @ -17,7 +17,6 @@ Required properties: | |||
| 	       "fsl,imx6sx-usdhc" | ||||
| 
 | ||||
| Optional properties: | ||||
| - fsl,cd-controller : Indicate to use controller internal card detection | ||||
| - fsl,wp-controller : Indicate to use controller internal write protection | ||||
| - fsl,delay-line : Specify the number of delay cells for override mode. | ||||
|   This is used to set the clock delay for DLL(Delay Line) on override mode | ||||
|  | @ -35,7 +34,6 @@ esdhc@70004000 { | |||
| 	compatible = "fsl,imx51-esdhc"; | ||||
| 	reg = <0x70004000 0x4000>; | ||||
| 	interrupts = <1>; | ||||
| 	fsl,cd-controller; | ||||
| 	fsl,wp-controller; | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -82,6 +82,9 @@ Optional properties: | |||
|  - id: If there are multiple instance of the same type, in order to | ||||
|    differentiate between each instance "id" can be used (e.g., multi-lane PCIe | ||||
|    PHY). If "id" is not provided, it is set to default value of '1'. | ||||
|  - syscon-pllreset: Handle to system control region that contains the | ||||
|    CTRL_CORE_SMA_SW_0 register and register offset to the CTRL_CORE_SMA_SW_0 | ||||
|    register that contains the SATA_PLL_SOFT_RESET bit. Only valid for sata_phy. | ||||
| 
 | ||||
| This is usually a subnode of ocp2scp to which it is connected. | ||||
| 
 | ||||
|  | @ -100,3 +103,16 @@ usb3phy@4a084400 { | |||
| 			"sysclk", | ||||
| 			"refclk"; | ||||
| }; | ||||
| 
 | ||||
| sata_phy: phy@4A096000 { | ||||
| 	compatible = "ti,phy-pipe3-sata"; | ||||
| 	reg = <0x4A096000 0x80>, /* phy_rx */ | ||||
| 	      <0x4A096400 0x64>, /* phy_tx */ | ||||
| 	      <0x4A096800 0x40>; /* pll_ctrl */ | ||||
| 	reg-names = "phy_rx", "phy_tx", "pll_ctrl"; | ||||
| 	ctrl-module = <&omap_control_sata>; | ||||
| 	clocks = <&sys_clkin1>, <&sata_ref_clk>; | ||||
| 	clock-names = "sysclk", "refclk"; | ||||
| 	syscon-pllreset = <&scm_conf 0x3fc>; | ||||
| 	#phy-cells = <0>; | ||||
| }; | ||||
|  |  | |||
|  | @ -3,11 +3,13 @@ MT8173 with MAX98090 CODEC | |||
| Required properties: | ||||
| - compatible : "mediatek,mt8173-max98090" | ||||
| - mediatek,audio-codec: the phandle of the MAX98090 audio codec | ||||
| - mediatek,platform: the phandle of MT8173 ASoC platform | ||||
| 
 | ||||
| Example: | ||||
| 
 | ||||
| 	sound { | ||||
| 		compatible = "mediatek,mt8173-max98090"; | ||||
| 		mediatek,audio-codec = <&max98090>; | ||||
| 		mediatek,platform = <&afe>; | ||||
| 	}; | ||||
| 
 | ||||
|  |  | |||
|  | @ -3,11 +3,13 @@ MT8173 with RT5650 RT5676 CODECS | |||
| Required properties: | ||||
| - compatible : "mediatek,mt8173-rt5650-rt5676" | ||||
| - mediatek,audio-codec: the phandles of rt5650 and rt5676 codecs | ||||
| - mediatek,platform: the phandle of MT8173 ASoC platform | ||||
| 
 | ||||
| Example: | ||||
| 
 | ||||
| 	sound { | ||||
| 		compatible = "mediatek,mt8173-rt5650-rt5676"; | ||||
| 		mediatek,audio-codec = <&rt5650 &rt5676>; | ||||
| 		mediatek,platform = <&afe>; | ||||
| 	}; | ||||
| 
 | ||||
|  |  | |||
|  | @ -3,7 +3,7 @@ Binding for Qualcomm Atheros AR7xxx/AR9xxx SPI controller | |||
| Required properties: | ||||
| - compatible: has to be "qca,<soc-type>-spi", "qca,ar7100-spi" as fallback. | ||||
| - reg: Base address and size of the controllers memory area | ||||
| - clocks: phandle to the AHB clock. | ||||
| - clocks: phandle of the AHB clock. | ||||
| - clock-names: has to be "ahb". | ||||
| - #address-cells: <1>, as required by generic SPI binding. | ||||
| - #size-cells: <0>, also as required by generic SPI binding. | ||||
|  | @ -12,9 +12,9 @@ Child nodes as per the generic SPI binding. | |||
| 
 | ||||
| Example: | ||||
| 
 | ||||
| 	spi@1F000000 { | ||||
| 	spi@1f000000 { | ||||
| 		compatible = "qca,ar9132-spi", "qca,ar7100-spi"; | ||||
| 		reg = <0x1F000000 0x10>; | ||||
| 		reg = <0x1f000000 0x10>; | ||||
| 
 | ||||
| 		clocks = <&pll 2>; | ||||
| 		clock-names = "ahb"; | ||||
|  |  | |||
|  | @ -35,11 +35,11 @@ temp1_input		Local temperature (1/1000 degree, | |||
| temp[2-9]_input		CPU temperatures (1/1000 degree, | ||||
| 			0.125 degree resolution) | ||||
| 
 | ||||
| fan[1-4]_mode		R/W, 0/1 for manual or SmartFan mode | ||||
| pwm[1-4]_enable		R/W, 1/2 for manual or SmartFan mode | ||||
| 			Setting SmartFan mode is supported only if it has been | ||||
| 			previously configured by BIOS (or configuration EEPROM) | ||||
| 
 | ||||
| fan[1-4]_pwm		R/O in SmartFan mode, R/W in manual control mode | ||||
| pwm[1-4]		R/O in SmartFan mode, R/W in manual control mode | ||||
| 
 | ||||
| The driver checks sensor control registers and does not export the sensors | ||||
| that are not enabled. Anyway, a sensor that is enabled may actually be not | ||||
|  |  | |||
|  | @ -119,8 +119,10 @@ ALPS Absolute Mode - Protocol Version 2 | |||
|  byte 5:  0   z6   z5   z4   z3   z2   z1   z0 | ||||
| 
 | ||||
| Protocol Version 2 DualPoint devices send standard PS/2 mouse packets for | ||||
| the DualPoint Stick. For non interleaved dualpoint devices the pointingstick | ||||
| buttons get reported separately in the PSM, PSR and PSL bits. | ||||
| the DualPoint Stick. The M, R and L bits signal the combined status of both | ||||
| the pointingstick and touchpad buttons, except for Dell dualpoint devices | ||||
| where the pointingstick buttons get reported separately in the PSM, PSR | ||||
| and PSL bits. | ||||
| 
 | ||||
| Dualpoint device -- interleaved packet format | ||||
| --------------------------------------------- | ||||
|  |  | |||
|  | @ -952,6 +952,14 @@ When kbuild executes, the following steps are followed (roughly): | |||
| 	$(KBUILD_ARFLAGS) set by the top level Makefile to "D" (deterministic | ||||
| 	mode) if this option is supported by $(AR). | ||||
| 
 | ||||
|     ARCH_CPPFLAGS, ARCH_AFLAGS, ARCH_CFLAGS   Overrides the kbuild defaults | ||||
| 
 | ||||
| 	These variables are appended to the KBUILD_CPPFLAGS, | ||||
| 	KBUILD_AFLAGS, and KBUILD_CFLAGS, respectively, after the | ||||
| 	top-level Makefile has set any other flags. This provides a | ||||
| 	means for an architecture to override the defaults. | ||||
| 
 | ||||
| 
 | ||||
| --- 6.2 Add prerequisites to archheaders: | ||||
| 
 | ||||
| 	The archheaders: rule is used to generate header files that | ||||
|  |  | |||
|  | @ -410,8 +410,17 @@ Documentation/usb/persist.txt. | |||
| 
 | ||||
| Q: Can I suspend-to-disk using a swap partition under LVM? | ||||
| 
 | ||||
| A: No. You can suspend successfully, but you'll not be able to | ||||
| resume. uswsusp should be able to work with LVM. See suspend.sf.net. | ||||
| A: Yes and No.  You can suspend successfully, but the kernel will not be able | ||||
| to resume on its own.  You need an initramfs that can recognize the resume | ||||
| situation, activate the logical volume containing the swap volume (but not | ||||
| touch any filesystems!), and eventually call | ||||
| 
 | ||||
| echo -n "$major:$minor" > /sys/power/resume | ||||
| 
 | ||||
| where $major and $minor are the respective major and minor device numbers of | ||||
| the swap volume. | ||||
| 
 | ||||
| uswsusp works with LVM, too.  See http://suspend.sourceforge.net/ | ||||
| 
 | ||||
| Q: I upgraded the kernel from 2.6.15 to 2.6.16. Both kernels were | ||||
| compiled with the similar configuration files. Anyway I found that | ||||
|  |  | |||
|  | @ -199,7 +199,8 @@ def tcm_mod_build_configfs(proto_ident, fabric_mod_dir_var, fabric_mod_name): | |||
| 	buf += "#include <linux/string.h>\n" | ||||
| 	buf += "#include <linux/configfs.h>\n" | ||||
| 	buf += "#include <linux/ctype.h>\n" | ||||
| 	buf += "#include <asm/unaligned.h>\n\n" | ||||
| 	buf += "#include <asm/unaligned.h>\n" | ||||
| 	buf += "#include <scsi/scsi_proto.h>\n\n" | ||||
| 	buf += "#include <target/target_core_base.h>\n" | ||||
| 	buf += "#include <target/target_core_fabric.h>\n" | ||||
| 	buf += "#include <target/target_core_fabric_configfs.h>\n" | ||||
|  | @ -230,8 +231,14 @@ def tcm_mod_build_configfs(proto_ident, fabric_mod_dir_var, fabric_mod_name): | |||
| 	buf += "	}\n" | ||||
| 	buf += "	tpg->" + fabric_mod_port + " = " + fabric_mod_port + ";\n" | ||||
| 	buf += "	tpg->" + fabric_mod_port + "_tpgt = tpgt;\n\n" | ||||
| 	buf += "	ret = core_tpg_register(&" + fabric_mod_name + "_ops, wwn,\n" | ||||
| 	buf += "				&tpg->se_tpg, SCSI_PROTOCOL_SAS);\n" | ||||
| 
 | ||||
| 	if proto_ident == "FC": | ||||
| 		buf += "	ret = core_tpg_register(wwn, &tpg->se_tpg, SCSI_PROTOCOL_FCP);\n" | ||||
| 	elif proto_ident == "SAS": | ||||
| 		buf += "	ret = core_tpg_register(wwn, &tpg->se_tpg, SCSI_PROTOCOL_SAS);\n" | ||||
| 	elif proto_ident == "iSCSI": | ||||
| 		buf += "	ret = core_tpg_register(wwn, &tpg->se_tpg, SCSI_PROTOCOL_ISCSI);\n" | ||||
| 
 | ||||
| 	buf += "	if (ret < 0) {\n" | ||||
| 	buf += "		kfree(tpg);\n" | ||||
| 	buf += "		return NULL;\n" | ||||
|  | @ -292,7 +299,7 @@ def tcm_mod_build_configfs(proto_ident, fabric_mod_dir_var, fabric_mod_name): | |||
| 
 | ||||
| 	buf += "static const struct target_core_fabric_ops " + fabric_mod_name + "_ops = {\n" | ||||
| 	buf += "	.module				= THIS_MODULE,\n" | ||||
| 	buf += "	.name				= " + fabric_mod_name + ",\n" | ||||
| 	buf += "	.name				= \"" + fabric_mod_name + "\",\n" | ||||
| 	buf += "	.get_fabric_name		= " + fabric_mod_name + "_get_fabric_name,\n" | ||||
| 	buf += "	.tpg_get_wwn			= " + fabric_mod_name + "_get_fabric_wwn,\n" | ||||
| 	buf += "	.tpg_get_tag			= " + fabric_mod_name + "_get_tag,\n" | ||||
|  | @ -322,17 +329,17 @@ def tcm_mod_build_configfs(proto_ident, fabric_mod_dir_var, fabric_mod_name): | |||
| 	buf += "	.fabric_make_tpg		= " + fabric_mod_name + "_make_tpg,\n" | ||||
| 	buf += "	.fabric_drop_tpg		= " + fabric_mod_name + "_drop_tpg,\n" | ||||
| 	buf += "\n" | ||||
| 	buf += "	.tfc_wwn_attrs			= " + fabric_mod_name + "_wwn_attrs;\n" | ||||
| 	buf += "	.tfc_wwn_attrs			= " + fabric_mod_name + "_wwn_attrs,\n" | ||||
| 	buf += "};\n\n" | ||||
| 
 | ||||
| 	buf += "static int __init " + fabric_mod_name + "_init(void)\n" | ||||
| 	buf += "{\n" | ||||
| 	buf += "	return target_register_template(" + fabric_mod_name + "_ops);\n" | ||||
| 	buf += "	return target_register_template(&" + fabric_mod_name + "_ops);\n" | ||||
| 	buf += "};\n\n" | ||||
| 
 | ||||
| 	buf += "static void __exit " + fabric_mod_name + "_exit(void)\n" | ||||
| 	buf += "{\n" | ||||
| 	buf += "	target_unregister_template(" + fabric_mod_name + "_ops);\n" | ||||
| 	buf += "	target_unregister_template(&" + fabric_mod_name + "_ops);\n" | ||||
| 	buf += "};\n\n" | ||||
| 
 | ||||
| 	buf += "MODULE_DESCRIPTION(\"" + fabric_mod_name.upper() + " series fabric driver\");\n" | ||||
|  |  | |||
							
								
								
									
										167
									
								
								MAINTAINERS
									
										
									
									
									
								
							
							
						
						
									
										167
									
								
								MAINTAINERS
									
										
									
									
									
								
							|  | @ -361,11 +361,11 @@ S:	Supported | |||
| F:	drivers/input/touchscreen/ad7879.c | ||||
| 
 | ||||
| ADDRESS SPACE LAYOUT RANDOMIZATION (ASLR) | ||||
| M:	Jiri Kosina <jkosina@suse.cz> | ||||
| M:	Jiri Kosina <jkosina@suse.com> | ||||
| S:	Maintained | ||||
| 
 | ||||
| ADM1025 HARDWARE MONITOR DRIVER | ||||
| M:	Jean Delvare <jdelvare@suse.de> | ||||
| M:	Jean Delvare <jdelvare@suse.com> | ||||
| L:	lm-sensors@lm-sensors.org | ||||
| S:	Maintained | ||||
| F:	Documentation/hwmon/adm1025 | ||||
|  | @ -430,7 +430,7 @@ S:	Maintained | |||
| F:	drivers/macintosh/therm_adt746x.c | ||||
| 
 | ||||
| ADT7475 HARDWARE MONITOR DRIVER | ||||
| M:	Jean Delvare <jdelvare@suse.de> | ||||
| M:	Jean Delvare <jdelvare@suse.com> | ||||
| L:	lm-sensors@lm-sensors.org | ||||
| S:	Maintained | ||||
| F:	Documentation/hwmon/adt7475 | ||||
|  | @ -445,7 +445,7 @@ F:	drivers/input/misc/adxl34x.c | |||
| 
 | ||||
| ADVANSYS SCSI DRIVER | ||||
| M:	Matthew Wilcox <matthew@wil.cx> | ||||
| M:	Hannes Reinecke <hare@suse.de> | ||||
| M:	Hannes Reinecke <hare@suse.com> | ||||
| L:	linux-scsi@vger.kernel.org | ||||
| S:	Maintained | ||||
| F:	Documentation/scsi/advansys.txt | ||||
|  | @ -506,7 +506,7 @@ F:	drivers/scsi/aha152x* | |||
| F:	drivers/scsi/pcmcia/aha152x* | ||||
| 
 | ||||
| AIC7XXX / AIC79XX SCSI DRIVER | ||||
| M:	Hannes Reinecke <hare@suse.de> | ||||
| M:	Hannes Reinecke <hare@suse.com> | ||||
| L:	linux-scsi@vger.kernel.org | ||||
| S:	Maintained | ||||
| F:	drivers/scsi/aic7xxx/ | ||||
|  | @ -746,7 +746,7 @@ S:	Maintained | |||
| F:	sound/aoa/ | ||||
| 
 | ||||
| APM DRIVER | ||||
| M:	Jiri Kosina <jkosina@suse.cz> | ||||
| M:	Jiri Kosina <jkosina@suse.com> | ||||
| S:	Odd fixes | ||||
| F:	arch/x86/kernel/apm_32.c | ||||
| F:	include/linux/apm_bios.h | ||||
|  | @ -1001,6 +1001,7 @@ ARM/CONEXANT DIGICOLOR MACHINE SUPPORT | |||
| M:	Baruch Siach <baruch@tkos.co.il> | ||||
| L:	linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | ||||
| S:	Maintained | ||||
| F:	arch/arm/boot/dts/cx92755* | ||||
| N:	digicolor | ||||
| 
 | ||||
| ARM/EBSA110 MACHINE SUPPORT | ||||
|  | @ -1324,7 +1325,7 @@ F:	arch/arm/mach-pxa/include/mach/palmtc.h | |||
| F:	arch/arm/mach-pxa/palmtc.c | ||||
| 
 | ||||
| ARM/PALM TREO SUPPORT | ||||
| M:	Tomas Cech <sleep_walker@suse.cz> | ||||
| M:	Tomas Cech <sleep_walker@suse.com> | ||||
| L:	linux-arm-kernel@lists.infradead.org | ||||
| W:	http://hackndev.com | ||||
| S:	Maintained | ||||
|  | @ -1614,6 +1615,7 @@ M:	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> | |||
| L:	linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | ||||
| S:	Maintained | ||||
| F:	arch/arm/boot/dts/vexpress* | ||||
| F:	arch/arm64/boot/dts/arm/vexpress* | ||||
| F:	arch/arm/mach-vexpress/ | ||||
| F:	*/*/vexpress* | ||||
| F:	*/*/*/vexpress* | ||||
|  | @ -2404,7 +2406,7 @@ F:	drivers/gpio/gpio-bt8xx.c | |||
| BTRFS FILE SYSTEM | ||||
| M:	Chris Mason <clm@fb.com> | ||||
| M:	Josef Bacik <jbacik@fb.com> | ||||
| M:	David Sterba <dsterba@suse.cz> | ||||
| M:	David Sterba <dsterba@suse.com> | ||||
| L:	linux-btrfs@vger.kernel.org | ||||
| W:	http://btrfs.wiki.kernel.org/ | ||||
| Q:	http://patchwork.kernel.org/project/linux-btrfs/list/ | ||||
|  | @ -2562,19 +2564,31 @@ F:	arch/powerpc/include/uapi/asm/spu*.h | |||
| F:	arch/powerpc/oprofile/*cell* | ||||
| F:	arch/powerpc/platforms/cell/ | ||||
| 
 | ||||
| CEPH DISTRIBUTED FILE SYSTEM CLIENT | ||||
| CEPH COMMON CODE (LIBCEPH) | ||||
| M:	Ilya Dryomov <idryomov@gmail.com> | ||||
| M:	"Yan, Zheng" <zyan@redhat.com> | ||||
| M:	Sage Weil <sage@redhat.com> | ||||
| L:	ceph-devel@vger.kernel.org | ||||
| W:	http://ceph.com/ | ||||
| T:	git git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client.git | ||||
| T:	git git://github.com/ceph/ceph-client.git | ||||
| S:	Supported | ||||
| F:	Documentation/filesystems/ceph.txt | ||||
| F:	fs/ceph/ | ||||
| F:	net/ceph/ | ||||
| F:	include/linux/ceph/ | ||||
| F:	include/linux/crush/ | ||||
| 
 | ||||
| CEPH DISTRIBUTED FILE SYSTEM CLIENT (CEPH) | ||||
| M:	"Yan, Zheng" <zyan@redhat.com> | ||||
| M:	Sage Weil <sage@redhat.com> | ||||
| M:	Ilya Dryomov <idryomov@gmail.com> | ||||
| L:	ceph-devel@vger.kernel.org | ||||
| W:	http://ceph.com/ | ||||
| T:	git git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client.git | ||||
| T:	git git://github.com/ceph/ceph-client.git | ||||
| S:	Supported | ||||
| F:	Documentation/filesystems/ceph.txt | ||||
| F:	fs/ceph/ | ||||
| 
 | ||||
| CERTIFIED WIRELESS USB (WUSB) SUBSYSTEM: | ||||
| L:	linux-usb@vger.kernel.org | ||||
| S:	Orphan | ||||
|  | @ -2735,7 +2749,7 @@ COCCINELLE/Semantic Patches (SmPL) | |||
| M:	Julia Lawall <Julia.Lawall@lip6.fr> | ||||
| M:	Gilles Muller <Gilles.Muller@lip6.fr> | ||||
| M:	Nicolas Palix <nicolas.palix@imag.fr> | ||||
| M:	Michal Marek <mmarek@suse.cz> | ||||
| M:	Michal Marek <mmarek@suse.com> | ||||
| L:	cocci@systeme.lip6.fr (moderated for non-subscribers) | ||||
| T:	git git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild.git misc | ||||
| W:	http://coccinelle.lip6.fr/ | ||||
|  | @ -2851,7 +2865,7 @@ F:	kernel/cpuset.c | |||
| 
 | ||||
| CONTROL GROUP - MEMORY RESOURCE CONTROLLER (MEMCG) | ||||
| M:	Johannes Weiner <hannes@cmpxchg.org> | ||||
| M:	Michal Hocko <mhocko@suse.cz> | ||||
| M:	Michal Hocko <mhocko@kernel.org> | ||||
| L:	cgroups@vger.kernel.org | ||||
| L:	linux-mm@kvack.org | ||||
| S:	Maintained | ||||
|  | @ -2932,7 +2946,7 @@ F:	arch/x86/kernel/cpuid.c | |||
| F:	arch/x86/kernel/msr.c | ||||
| 
 | ||||
| CPU POWER MONITORING SUBSYSTEM | ||||
| M:	Thomas Renninger <trenn@suse.de> | ||||
| M:	Thomas Renninger <trenn@suse.com> | ||||
| L:	linux-pm@vger.kernel.org | ||||
| S:	Maintained | ||||
| F:	tools/power/cpupower/ | ||||
|  | @ -3162,7 +3176,7 @@ F:	Documentation/networking/dmfe.txt | |||
| F:	drivers/net/ethernet/dec/tulip/dmfe.c | ||||
| 
 | ||||
| DC390/AM53C974 SCSI driver | ||||
| M:	Hannes Reinecke <hare@suse.de> | ||||
| M:	Hannes Reinecke <hare@suse.com> | ||||
| L:	linux-scsi@vger.kernel.org | ||||
| S:	Maintained | ||||
| F:	drivers/scsi/am53c974.c | ||||
|  | @ -3366,7 +3380,7 @@ W:	http://www.win.tue.nl/~aeb/partitions/partition_types-1.html | |||
| S:	Maintained | ||||
| 
 | ||||
| DISKQUOTA | ||||
| M:	Jan Kara <jack@suse.cz> | ||||
| M:	Jan Kara <jack@suse.com> | ||||
| S:	Maintained | ||||
| F:	Documentation/filesystems/quota.txt | ||||
| F:	fs/quota/ | ||||
|  | @ -3422,7 +3436,7 @@ F:	Documentation/hwmon/dme1737 | |||
| F:	drivers/hwmon/dme1737.c | ||||
| 
 | ||||
| DMI/SMBIOS SUPPORT | ||||
| M:	Jean Delvare <jdelvare@suse.de> | ||||
| M:	Jean Delvare <jdelvare@suse.com> | ||||
| S:	Maintained | ||||
| T:	quilt http://jdelvare.nerim.net/devel/linux/jdelvare-dmi/ | ||||
| F:	Documentation/ABI/testing/sysfs-firmware-dmi-tables | ||||
|  | @ -3573,6 +3587,15 @@ S:	Maintained | |||
| F:	drivers/gpu/drm/rockchip/ | ||||
| F:	Documentation/devicetree/bindings/video/rockchip* | ||||
| 
 | ||||
| DRM DRIVERS FOR STI | ||||
| M:	Benjamin Gaignard <benjamin.gaignard@linaro.org> | ||||
| M:	Vincent Abriou <vincent.abriou@st.com> | ||||
| L:	dri-devel@lists.freedesktop.org | ||||
| T:	git http://git.linaro.org/people/benjamin.gaignard/kernel.git | ||||
| S:	Maintained | ||||
| F:	drivers/gpu/drm/sti | ||||
| F:	Documentation/devicetree/bindings/gpu/st,stih4xx.txt | ||||
| 
 | ||||
| DSBR100 USB FM RADIO DRIVER | ||||
| M:	Alexey Klimov <klimov.linux@gmail.com> | ||||
| L:	linux-media@vger.kernel.org | ||||
|  | @ -4038,7 +4061,7 @@ F:	drivers/of/of_mdio.c | |||
| F:	drivers/of/of_net.c | ||||
| 
 | ||||
| EXT2 FILE SYSTEM | ||||
| M:	Jan Kara <jack@suse.cz> | ||||
| M:	Jan Kara <jack@suse.com> | ||||
| L:	linux-ext4@vger.kernel.org | ||||
| S:	Maintained | ||||
| F:	Documentation/filesystems/ext2.txt | ||||
|  | @ -4046,7 +4069,7 @@ F:	fs/ext2/ | |||
| F:	include/linux/ext2* | ||||
| 
 | ||||
| EXT3 FILE SYSTEM | ||||
| M:	Jan Kara <jack@suse.cz> | ||||
| M:	Jan Kara <jack@suse.com> | ||||
| M:	Andrew Morton <akpm@linux-foundation.org> | ||||
| M:	Andreas Dilger <adilger.kernel@dilger.ca> | ||||
| L:	linux-ext4@vger.kernel.org | ||||
|  | @ -4096,7 +4119,7 @@ F:	drivers/video/fbdev/exynos/exynos_mipi* | |||
| F:	include/video/exynos_mipi* | ||||
| 
 | ||||
| F71805F HARDWARE MONITORING DRIVER | ||||
| M:	Jean Delvare <jdelvare@suse.de> | ||||
| M:	Jean Delvare <jdelvare@suse.com> | ||||
| L:	lm-sensors@lm-sensors.org | ||||
| S:	Maintained | ||||
| F:	Documentation/hwmon/f71805f | ||||
|  | @ -4231,7 +4254,7 @@ S:	Maintained | |||
| F:	drivers/block/rsxx/ | ||||
| 
 | ||||
| FLOPPY DRIVER | ||||
| M:	Jiri Kosina <jkosina@suse.cz> | ||||
| M:	Jiri Kosina <jkosina@suse.com> | ||||
| T:	git git://git.kernel.org/pub/scm/linux/kernel/git/jikos/floppy.git | ||||
| S:	Odd fixes | ||||
| F:	drivers/block/floppy.c | ||||
|  | @ -4652,7 +4675,7 @@ F:	drivers/media/usb/stk1160/ | |||
| 
 | ||||
| H8/300 ARCHITECTURE | ||||
| M:	Yoshinori Sato <ysato@users.sourceforge.jp> | ||||
| L:	uclinux-h8-devel@lists.sourceforge.jp | ||||
| L:	uclinux-h8-devel@lists.sourceforge.jp (moderated for non-subscribers) | ||||
| W:	http://uclinux-h8.sourceforge.jp | ||||
| T:	git git://git.sourceforge.jp/gitroot/uclinux-h8/linux.git | ||||
| S:	Maintained | ||||
|  | @ -4699,7 +4722,7 @@ S:	Maintained | |||
| F:	drivers/media/usb/hackrf/ | ||||
| 
 | ||||
| HARDWARE MONITORING | ||||
| M:	Jean Delvare <jdelvare@suse.de> | ||||
| M:	Jean Delvare <jdelvare@suse.com> | ||||
| M:	Guenter Roeck <linux@roeck-us.net> | ||||
| L:	lm-sensors@lm-sensors.org | ||||
| W:	http://www.lm-sensors.org/ | ||||
|  | @ -4802,7 +4825,7 @@ F:	include/linux/pm.h | |||
| F:	arch/*/include/asm/suspend*.h | ||||
| 
 | ||||
| HID CORE LAYER | ||||
| M:	Jiri Kosina <jkosina@suse.cz> | ||||
| M:	Jiri Kosina <jkosina@suse.com> | ||||
| L:	linux-input@vger.kernel.org | ||||
| T:	git git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid.git | ||||
| S:	Maintained | ||||
|  | @ -4811,7 +4834,7 @@ F:	include/linux/hid* | |||
| F:	include/uapi/linux/hid* | ||||
| 
 | ||||
| HID SENSOR HUB DRIVERS | ||||
| M:	Jiri Kosina <jkosina@suse.cz> | ||||
| M:	Jiri Kosina <jkosina@suse.com> | ||||
| M:	Jonathan Cameron <jic23@kernel.org> | ||||
| M:	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com> | ||||
| L:	linux-input@vger.kernel.org | ||||
|  | @ -4945,7 +4968,7 @@ F:	include/linux/hyperv.h | |||
| F:	tools/hv/ | ||||
| 
 | ||||
| I2C OVER PARALLEL PORT | ||||
| M:	Jean Delvare <jdelvare@suse.de> | ||||
| M:	Jean Delvare <jdelvare@suse.com> | ||||
| L:	linux-i2c@vger.kernel.org | ||||
| S:	Maintained | ||||
| F:	Documentation/i2c/busses/i2c-parport | ||||
|  | @ -4954,7 +4977,7 @@ F:	drivers/i2c/busses/i2c-parport.c | |||
| F:	drivers/i2c/busses/i2c-parport-light.c | ||||
| 
 | ||||
| I2C/SMBUS CONTROLLER DRIVERS FOR PC | ||||
| M:	Jean Delvare <jdelvare@suse.de> | ||||
| M:	Jean Delvare <jdelvare@suse.com> | ||||
| L:	linux-i2c@vger.kernel.org | ||||
| S:	Maintained | ||||
| F:	Documentation/i2c/busses/i2c-ali1535 | ||||
|  | @ -4995,7 +5018,7 @@ F:	drivers/i2c/busses/i2c-ismt.c | |||
| F:	Documentation/i2c/busses/i2c-ismt | ||||
| 
 | ||||
| I2C/SMBUS STUB DRIVER | ||||
| M:	Jean Delvare <jdelvare@suse.de> | ||||
| M:	Jean Delvare <jdelvare@suse.com> | ||||
| L:	linux-i2c@vger.kernel.org | ||||
| S:	Maintained | ||||
| F:	drivers/i2c/i2c-stub.c | ||||
|  | @ -5022,7 +5045,7 @@ L:	linux-acpi@vger.kernel.org | |||
| S:	Maintained | ||||
| 
 | ||||
| I2C-TAOS-EVM DRIVER | ||||
| M:	Jean Delvare <jdelvare@suse.de> | ||||
| M:	Jean Delvare <jdelvare@suse.com> | ||||
| L:	linux-i2c@vger.kernel.org | ||||
| S:	Maintained | ||||
| F:	Documentation/i2c/busses/i2c-taos-evm | ||||
|  | @ -5551,8 +5574,8 @@ F:	include/uapi/linux/ip_vs.h | |||
| F:	net/netfilter/ipvs/ | ||||
| 
 | ||||
| IPWIRELESS DRIVER | ||||
| M:	Jiri Kosina <jkosina@suse.cz> | ||||
| M:	David Sterba <dsterba@suse.cz> | ||||
| M:	Jiri Kosina <jkosina@suse.com> | ||||
| M:	David Sterba <dsterba@suse.com> | ||||
| S:	Odd Fixes | ||||
| F:	drivers/tty/ipwireless/ | ||||
| 
 | ||||
|  | @ -5586,6 +5609,7 @@ F:	kernel/irq/ | |||
| IRQCHIP DRIVERS | ||||
| M:	Thomas Gleixner <tglx@linutronix.de> | ||||
| M:	Jason Cooper <jason@lakedaemon.net> | ||||
| M:	Marc Zyngier <marc.zyngier@arm.com> | ||||
| L:	linux-kernel@vger.kernel.org | ||||
| S:	Maintained | ||||
| T:	git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git irq/core | ||||
|  | @ -5594,11 +5618,14 @@ F:	Documentation/devicetree/bindings/interrupt-controller/ | |||
| F:	drivers/irqchip/ | ||||
| 
 | ||||
| IRQ DOMAINS (IRQ NUMBER MAPPING LIBRARY) | ||||
| M:	Benjamin Herrenschmidt <benh@kernel.crashing.org> | ||||
| M:	Jiang Liu <jiang.liu@linux.intel.com> | ||||
| M:	Marc Zyngier <marc.zyngier@arm.com> | ||||
| S:	Maintained | ||||
| T:	git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git irq/core | ||||
| F:	Documentation/IRQ-domain.txt | ||||
| F:	include/linux/irqdomain.h | ||||
| F:	kernel/irq/irqdomain.c | ||||
| F:	kernel/irq/msi.c | ||||
| 
 | ||||
| ISAPNP | ||||
| M:	Jaroslav Kysela <perex@perex.cz> | ||||
|  | @ -5672,7 +5699,7 @@ S:	Maintained | |||
| F:	drivers/isdn/hardware/eicon/ | ||||
| 
 | ||||
| IT87 HARDWARE MONITORING DRIVER | ||||
| M:	Jean Delvare <jdelvare@suse.de> | ||||
| M:	Jean Delvare <jdelvare@suse.com> | ||||
| L:	lm-sensors@lm-sensors.org | ||||
| S:	Maintained | ||||
| F:	Documentation/hwmon/it87 | ||||
|  | @ -5739,7 +5766,7 @@ F:	include/uapi/linux/jffs2.h | |||
| 
 | ||||
| JOURNALLING LAYER FOR BLOCK DEVICES (JBD) | ||||
| M:	Andrew Morton <akpm@linux-foundation.org> | ||||
| M:	Jan Kara <jack@suse.cz> | ||||
| M:	Jan Kara <jack@suse.com> | ||||
| L:	linux-ext4@vger.kernel.org | ||||
| S:	Maintained | ||||
| F:	fs/jbd/ | ||||
|  | @ -5803,7 +5830,7 @@ S:	Maintained | |||
| F:	fs/autofs4/ | ||||
| 
 | ||||
| KERNEL BUILD + files below scripts/ (unless maintained elsewhere) | ||||
| M:	Michal Marek <mmarek@suse.cz> | ||||
| M:	Michal Marek <mmarek@suse.com> | ||||
| T:	git git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild.git for-next | ||||
| T:	git git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild.git rc-fixes | ||||
| L:	linux-kbuild@vger.kernel.org | ||||
|  | @ -5867,7 +5894,7 @@ F:	arch/x86/include/asm/svm.h | |||
| F:	arch/x86/kvm/svm.c | ||||
| 
 | ||||
| KERNEL VIRTUAL MACHINE (KVM) FOR POWERPC | ||||
| M:	Alexander Graf <agraf@suse.de> | ||||
| M:	Alexander Graf <agraf@suse.com> | ||||
| L:	kvm-ppc@vger.kernel.org | ||||
| W:	http://kvm.qumranet.com | ||||
| T:	git git://github.com/agraf/linux-2.6.git | ||||
|  | @ -5885,7 +5912,6 @@ S:	Supported | |||
| F:	Documentation/s390/kvm.txt | ||||
| F:	arch/s390/include/asm/kvm* | ||||
| F:	arch/s390/kvm/ | ||||
| F:	drivers/s390/kvm/ | ||||
| 
 | ||||
| KERNEL VIRTUAL MACHINE (KVM) FOR ARM | ||||
| M:	Christoffer Dall <christoffer.dall@linaro.org> | ||||
|  | @ -6024,7 +6050,7 @@ F:	drivers/leds/ | |||
| F:	include/linux/leds.h | ||||
| 
 | ||||
| LEGACY EEPROM DRIVER | ||||
| M:	Jean Delvare <jdelvare@suse.de> | ||||
| M:	Jean Delvare <jdelvare@suse.com> | ||||
| S:	Maintained | ||||
| F:	Documentation/misc-devices/eeprom | ||||
| F:	drivers/misc/eeprom/eeprom.c | ||||
|  | @ -6077,7 +6103,7 @@ F:	include/linux/ata.h | |||
| F:	include/linux/libata.h | ||||
| 
 | ||||
| LIBATA PATA ARASAN COMPACT FLASH CONTROLLER | ||||
| M:	Viresh Kumar <viresh.linux@gmail.com> | ||||
| M:	Viresh Kumar <vireshk@kernel.org> | ||||
| L:	linux-ide@vger.kernel.org | ||||
| T:	git git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata.git | ||||
| S:	Maintained | ||||
|  | @ -6147,6 +6173,7 @@ L:	linux-nvdimm@lists.01.org | |||
| Q:	https://patchwork.kernel.org/project/linux-nvdimm/list/ | ||||
| S:	Supported | ||||
| F:	drivers/nvdimm/pmem.c | ||||
| F:	include/linux/pmem.h | ||||
| 
 | ||||
| LINUX FOR IBM pSERIES (RS/6000) | ||||
| M:	Paul Mackerras <paulus@au.ibm.com> | ||||
|  | @ -6161,7 +6188,7 @@ M:	Michael Ellerman <mpe@ellerman.id.au> | |||
| W:	http://www.penguinppc.org/ | ||||
| L:	linuxppc-dev@lists.ozlabs.org | ||||
| Q:	http://patchwork.ozlabs.org/project/linuxppc-dev/list/ | ||||
| T:	git git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc.git | ||||
| T:	git git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git | ||||
| S:	Supported | ||||
| F:	Documentation/powerpc/ | ||||
| F:	arch/powerpc/ | ||||
|  | @ -6237,8 +6264,8 @@ F:	drivers/platform/x86/hp_accel.c | |||
| LIVE PATCHING | ||||
| M:	Josh Poimboeuf <jpoimboe@redhat.com> | ||||
| M:	Seth Jennings <sjenning@redhat.com> | ||||
| M:	Jiri Kosina <jkosina@suse.cz> | ||||
| M:	Vojtech Pavlik <vojtech@suse.cz> | ||||
| M:	Jiri Kosina <jkosina@suse.com> | ||||
| M:	Vojtech Pavlik <vojtech@suse.com> | ||||
| S:	Maintained | ||||
| F:	kernel/livepatch/ | ||||
| F:	include/linux/livepatch.h | ||||
|  | @ -6264,21 +6291,21 @@ S:	Maintained | |||
| F:	drivers/hwmon/lm73.c | ||||
| 
 | ||||
| LM78 HARDWARE MONITOR DRIVER | ||||
| M:	Jean Delvare <jdelvare@suse.de> | ||||
| M:	Jean Delvare <jdelvare@suse.com> | ||||
| L:	lm-sensors@lm-sensors.org | ||||
| S:	Maintained | ||||
| F:	Documentation/hwmon/lm78 | ||||
| F:	drivers/hwmon/lm78.c | ||||
| 
 | ||||
| LM83 HARDWARE MONITOR DRIVER | ||||
| M:	Jean Delvare <jdelvare@suse.de> | ||||
| M:	Jean Delvare <jdelvare@suse.com> | ||||
| L:	lm-sensors@lm-sensors.org | ||||
| S:	Maintained | ||||
| F:	Documentation/hwmon/lm83 | ||||
| F:	drivers/hwmon/lm83.c | ||||
| 
 | ||||
| LM90 HARDWARE MONITOR DRIVER | ||||
| M:	Jean Delvare <jdelvare@suse.de> | ||||
| M:	Jean Delvare <jdelvare@suse.com> | ||||
| L:	lm-sensors@lm-sensors.org | ||||
| S:	Maintained | ||||
| F:	Documentation/hwmon/lm90 | ||||
|  | @ -6824,6 +6851,12 @@ T:	git git://linuxtv.org/anttip/media_tree.git | |||
| S:	Maintained | ||||
| F:	drivers/media/usb/msi2500/ | ||||
| 
 | ||||
| MSYSTEMS DISKONCHIP G3 MTD DRIVER | ||||
| M:	Robert Jarzmik <robert.jarzmik@free.fr> | ||||
| L:	linux-mtd@lists.infradead.org | ||||
| S:	Maintained | ||||
| F:	drivers/mtd/devices/docg3* | ||||
| 
 | ||||
| MT9M032 APTINA SENSOR DRIVER | ||||
| M:	Laurent Pinchart <laurent.pinchart@ideasonboard.com> | ||||
| L:	linux-media@vger.kernel.org | ||||
|  | @ -7005,6 +7038,7 @@ F:	include/uapi/linux/netfilter/ | |||
| F:	net/*/netfilter.c | ||||
| F:	net/*/netfilter/ | ||||
| F:	net/netfilter/ | ||||
| F:	net/bridge/br_netfilter*.c | ||||
| 
 | ||||
| NETLABEL | ||||
| M:	Paul Moore <paul@paul-moore.com> | ||||
|  | @ -7704,7 +7738,7 @@ S:	Maintained | |||
| F:	drivers/char/pc8736x_gpio.c | ||||
| 
 | ||||
| PC87427 HARDWARE MONITORING DRIVER | ||||
| M:	Jean Delvare <jdelvare@suse.de> | ||||
| M:	Jean Delvare <jdelvare@suse.com> | ||||
| L:	lm-sensors@lm-sensors.org | ||||
| S:	Maintained | ||||
| F:	Documentation/hwmon/pc87427 | ||||
|  | @ -7981,7 +8015,7 @@ S:	Maintained | |||
| F:	drivers/pinctrl/samsung/ | ||||
| 
 | ||||
| PIN CONTROLLER - ST SPEAR | ||||
| M:	Viresh Kumar <viresh.linux@gmail.com> | ||||
| M:	Viresh Kumar <vireshk@kernel.org> | ||||
| L:	spear-devel@list.st.com | ||||
| L:	linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | ||||
| W:	http://www.st.com/spear | ||||
|  | @ -7989,7 +8023,7 @@ S:	Maintained | |||
| F:	drivers/pinctrl/spear/ | ||||
| 
 | ||||
| PKTCDVD DRIVER | ||||
| M:	Jiri Kosina <jkosina@suse.cz> | ||||
| M:	Jiri Kosina <jkosina@suse.com> | ||||
| S:	Maintained | ||||
| F:	drivers/block/pktcdvd.c | ||||
| F:	include/linux/pktcdvd.h | ||||
|  | @ -8366,10 +8400,12 @@ RADOS BLOCK DEVICE (RBD) | |||
| M:	Ilya Dryomov <idryomov@gmail.com> | ||||
| M:	Sage Weil <sage@redhat.com> | ||||
| M:	Alex Elder <elder@kernel.org> | ||||
| M:	ceph-devel@vger.kernel.org | ||||
| L:	ceph-devel@vger.kernel.org | ||||
| W:	http://ceph.com/ | ||||
| T:	git git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client.git | ||||
| T:	git git://github.com/ceph/ceph-client.git | ||||
| S:	Supported | ||||
| F:	Documentation/ABI/testing/sysfs-bus-rbd | ||||
| F:	drivers/block/rbd.c | ||||
| F:	drivers/block/rbd_types.h | ||||
| 
 | ||||
|  | @ -8878,7 +8914,7 @@ S:	Maintained | |||
| F:	drivers/tty/serial/ | ||||
| 
 | ||||
| SYNOPSYS DESIGNWARE DMAC DRIVER | ||||
| M:	Viresh Kumar <viresh.linux@gmail.com> | ||||
| M:	Viresh Kumar <vireshk@kernel.org> | ||||
| M:	Andy Shevchenko <andriy.shevchenko@linux.intel.com> | ||||
| S:	Maintained | ||||
| F:	include/linux/dma/dw.h | ||||
|  | @ -9045,7 +9081,7 @@ S:	Maintained | |||
| F:	drivers/mmc/host/sdhci-s3c* | ||||
| 
 | ||||
| SECURE DIGITAL HOST CONTROLLER INTERFACE (SDHCI) ST SPEAR DRIVER | ||||
| M:	Viresh Kumar <viresh.linux@gmail.com> | ||||
| M:	Viresh Kumar <vireshk@kernel.org> | ||||
| L:	spear-devel@list.st.com | ||||
| L:	linux-mmc@vger.kernel.org | ||||
| S:	Maintained | ||||
|  | @ -9407,7 +9443,7 @@ F:	Documentation/hwmon/sch5627 | |||
| F:	drivers/hwmon/sch5627.c | ||||
| 
 | ||||
| SMSC47B397 HARDWARE MONITOR DRIVER | ||||
| M:	Jean Delvare <jdelvare@suse.de> | ||||
| M:	Jean Delvare <jdelvare@suse.com> | ||||
| L:	lm-sensors@lm-sensors.org | ||||
| S:	Maintained | ||||
| F:	Documentation/hwmon/smsc47b397 | ||||
|  | @ -9456,7 +9492,7 @@ S:	Supported | |||
| F:	drivers/media/pci/solo6x10/ | ||||
| 
 | ||||
| SOFTWARE RAID (Multiple Disks) SUPPORT | ||||
| M:	Neil Brown <neilb@suse.de> | ||||
| M:	Neil Brown <neilb@suse.com> | ||||
| L:	linux-raid@vger.kernel.org | ||||
| S:	Supported | ||||
| F:	drivers/md/ | ||||
|  | @ -9499,7 +9535,7 @@ F:	drivers/memstick/core/ms_block.* | |||
| 
 | ||||
| SOUND | ||||
| M:	Jaroslav Kysela <perex@perex.cz> | ||||
| M:	Takashi Iwai <tiwai@suse.de> | ||||
| M:	Takashi Iwai <tiwai@suse.com> | ||||
| L:	alsa-devel@alsa-project.org (moderated for non-subscribers) | ||||
| W:	http://www.alsa-project.org/ | ||||
| T:	git git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git | ||||
|  | @ -9583,7 +9619,7 @@ S:	Maintained | |||
| F:	include/linux/compiler.h | ||||
| 
 | ||||
| SPEAR PLATFORM SUPPORT | ||||
| M:	Viresh Kumar <viresh.linux@gmail.com> | ||||
| M:	Viresh Kumar <vireshk@kernel.org> | ||||
| M:	Shiraz Hashim <shiraz.linux.kernel@gmail.com> | ||||
| L:	spear-devel@list.st.com | ||||
| L:	linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | ||||
|  | @ -9592,7 +9628,7 @@ S:	Maintained | |||
| F:	arch/arm/mach-spear/ | ||||
| 
 | ||||
| SPEAR CLOCK FRAMEWORK SUPPORT | ||||
| M:	Viresh Kumar <viresh.linux@gmail.com> | ||||
| M:	Viresh Kumar <vireshk@kernel.org> | ||||
| L:	spear-devel@list.st.com | ||||
| L:	linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | ||||
| W:	http://www.st.com/spear | ||||
|  | @ -10382,7 +10418,7 @@ K:	^Subject:.*(?i)trivial | |||
| 
 | ||||
| TTY LAYER | ||||
| M:	Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||||
| M:	Jiri Slaby <jslaby@suse.cz> | ||||
| M:	Jiri Slaby <jslaby@suse.com> | ||||
| S:	Supported | ||||
| T:	git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git | ||||
| F:	Documentation/serial/ | ||||
|  | @ -10456,7 +10492,7 @@ F:	arch/m68k/*/*_no.* | |||
| F:	arch/m68k/include/asm/*_no.* | ||||
| 
 | ||||
| UDF FILESYSTEM | ||||
| M:	Jan Kara <jack@suse.cz> | ||||
| M:	Jan Kara <jack@suse.com> | ||||
| S:	Maintained | ||||
| F:	Documentation/filesystems/udf.txt | ||||
| F:	fs/udf/ | ||||
|  | @ -10599,7 +10635,7 @@ F:	drivers/usb/gadget/ | |||
| F:	include/linux/usb/gadget* | ||||
| 
 | ||||
| USB HID/HIDBP DRIVERS (USB KEYBOARDS, MICE, REMOTE CONTROLS, ...) | ||||
| M:	Jiri Kosina <jkosina@suse.cz> | ||||
| M:	Jiri Kosina <jkosina@suse.com> | ||||
| L:	linux-usb@vger.kernel.org | ||||
| T:	git git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid.git | ||||
| S:	Maintained | ||||
|  | @ -10724,7 +10760,7 @@ S:	Maintained | |||
| F:	drivers/usb/host/uhci* | ||||
| 
 | ||||
| USB "USBNET" DRIVER FRAMEWORK | ||||
| M:	Oliver Neukum <oneukum@suse.de> | ||||
| M:	Oliver Neukum <oneukum@suse.com> | ||||
| L:	netdev@vger.kernel.org | ||||
| W:	http://www.linux-usb.org/usbnet | ||||
| S:	Maintained | ||||
|  | @ -10878,6 +10914,15 @@ F:	drivers/block/virtio_blk.c | |||
| F:	include/linux/virtio_*.h | ||||
| F:	include/uapi/linux/virtio_*.h | ||||
| 
 | ||||
| VIRTIO DRIVERS FOR S390 | ||||
| M:	Christian Borntraeger <borntraeger@de.ibm.com> | ||||
| M:	Cornelia Huck <cornelia.huck@de.ibm.com> | ||||
| L:	linux-s390@vger.kernel.org | ||||
| L:	virtualization@lists.linux-foundation.org | ||||
| L:	kvm@vger.kernel.org | ||||
| S:	Supported | ||||
| F:	drivers/s390/virtio/ | ||||
| 
 | ||||
| VIRTIO GPU DRIVER | ||||
| M:	David Airlie <airlied@linux.ie> | ||||
| M:	Gerd Hoffmann <kraxel@redhat.com> | ||||
|  | @ -11051,7 +11096,7 @@ F:	Documentation/hwmon/w83793 | |||
| F:	drivers/hwmon/w83793.c | ||||
| 
 | ||||
| W83795 HARDWARE MONITORING DRIVER | ||||
| M:	Jean Delvare <jdelvare@suse.de> | ||||
| M:	Jean Delvare <jdelvare@suse.com> | ||||
| L:	lm-sensors@lm-sensors.org | ||||
| S:	Maintained | ||||
| F:	drivers/hwmon/w83795.c | ||||
|  |  | |||
							
								
								
									
										20
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										20
									
								
								Makefile
									
										
									
									
									
								
							|  | @ -1,7 +1,7 @@ | |||
| VERSION = 4 | ||||
| PATCHLEVEL = 2 | ||||
| SUBLEVEL = 0 | ||||
| EXTRAVERSION = -rc1 | ||||
| EXTRAVERSION = -rc7 | ||||
| NAME = Hurr durr I'ma sheep | ||||
| 
 | ||||
| # *DOCUMENTATION*
 | ||||
|  | @ -597,6 +597,11 @@ endif # $(dot-config) | |||
| # Defaults to vmlinux, but the arch makefile usually adds further targets
 | ||||
| all: vmlinux | ||||
| 
 | ||||
| # The arch Makefile can set ARCH_{CPP,A,C}FLAGS to override the default
 | ||||
| # values of the respective KBUILD_* variables
 | ||||
| ARCH_CPPFLAGS := | ||||
| ARCH_AFLAGS := | ||||
| ARCH_CFLAGS := | ||||
| include arch/$(SRCARCH)/Makefile | ||||
| 
 | ||||
| KBUILD_CFLAGS	+= $(call cc-option,-fno-delete-null-pointer-checks,) | ||||
|  | @ -780,10 +785,11 @@ endif | |||
| include scripts/Makefile.kasan | ||||
| include scripts/Makefile.extrawarn | ||||
| 
 | ||||
| # Add user supplied CPPFLAGS, AFLAGS and CFLAGS as the last assignments
 | ||||
| KBUILD_CPPFLAGS += $(KCPPFLAGS) | ||||
| KBUILD_AFLAGS += $(KAFLAGS) | ||||
| KBUILD_CFLAGS += $(KCFLAGS) | ||||
| # Add any arch overrides and user supplied CPPFLAGS, AFLAGS and CFLAGS as the
 | ||||
| # last assignments
 | ||||
| KBUILD_CPPFLAGS += $(ARCH_CPPFLAGS) $(KCPPFLAGS) | ||||
| KBUILD_AFLAGS   += $(ARCH_AFLAGS)   $(KAFLAGS) | ||||
| KBUILD_CFLAGS   += $(ARCH_CFLAGS)   $(KCFLAGS) | ||||
| 
 | ||||
| # Use --build-id when available.
 | ||||
| LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,\
 | ||||
|  | @ -847,10 +853,10 @@ export mod_strip_cmd | |||
| mod_compress_cmd = true | ||||
| ifdef CONFIG_MODULE_COMPRESS | ||||
|   ifdef CONFIG_MODULE_COMPRESS_GZIP | ||||
|     mod_compress_cmd = gzip -n | ||||
|     mod_compress_cmd = gzip -n -f | ||||
|   endif # CONFIG_MODULE_COMPRESS_GZIP | ||||
|   ifdef CONFIG_MODULE_COMPRESS_XZ | ||||
|     mod_compress_cmd = xz | ||||
|     mod_compress_cmd = xz -f | ||||
|   endif # CONFIG_MODULE_COMPRESS_XZ | ||||
| endif # CONFIG_MODULE_COMPRESS
 | ||||
| export mod_compress_cmd | ||||
|  |  | |||
|  | @ -221,6 +221,10 @@ config ARCH_TASK_STRUCT_ALLOCATOR | |||
| config ARCH_THREAD_INFO_ALLOCATOR | ||||
| 	bool | ||||
| 
 | ||||
| # Select if arch wants to size task_struct dynamically via arch_task_struct_size: | ||||
| config ARCH_WANTS_DYNAMIC_TASK_STRUCT | ||||
| 	bool | ||||
| 
 | ||||
| config HAVE_REGS_AND_STACK_ACCESS_API | ||||
| 	bool | ||||
| 	help | ||||
|  |  | |||
|  | @ -5,6 +5,7 @@ generic-y += cputime.h | |||
| generic-y += exec.h | ||||
| generic-y += irq_work.h | ||||
| generic-y += mcs_spinlock.h | ||||
| generic-y += mm-arch-hooks.h | ||||
| generic-y += preempt.h | ||||
| generic-y += sections.h | ||||
| generic-y += trace_clock.h | ||||
|  |  | |||
|  | @ -1,15 +0,0 @@ | |||
| /*
 | ||||
|  * Architecture specific mm hooks | ||||
|  * | ||||
|  * Copyright (C) 2015, IBM Corporation | ||||
|  * Author: Laurent Dufour <ldufour@linux.vnet.ibm.com> | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License version 2 as | ||||
|  * published by the Free Software Foundation. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef _ASM_ALPHA_MM_ARCH_HOOKS_H | ||||
| #define _ASM_ALPHA_MM_ARCH_HOOKS_H | ||||
| 
 | ||||
| #endif /* _ASM_ALPHA_MM_ARCH_HOOKS_H */ | ||||
|  | @ -115,6 +115,7 @@ if ISA_ARCOMPACT | |||
| 
 | ||||
| config ARC_CPU_750D | ||||
| 	bool "ARC750D" | ||||
| 	select ARC_CANT_LLSC | ||||
| 	help | ||||
| 	  Support for ARC750 core | ||||
| 
 | ||||
|  | @ -312,11 +313,11 @@ config ARC_PAGE_SIZE_8K | |||
| 
 | ||||
| config ARC_PAGE_SIZE_16K | ||||
| 	bool "16KB" | ||||
| 	depends on ARC_MMU_V3 | ||||
| 	depends on ARC_MMU_V3 || ARC_MMU_V4 | ||||
| 
 | ||||
| config ARC_PAGE_SIZE_4K | ||||
| 	bool "4KB" | ||||
| 	depends on ARC_MMU_V3 | ||||
| 	depends on ARC_MMU_V3 || ARC_MMU_V4 | ||||
| 
 | ||||
| endchoice | ||||
| 
 | ||||
|  | @ -362,7 +363,12 @@ config ARC_CANT_LLSC | |||
| config ARC_HAS_LLSC | ||||
| 	bool "Insn: LLOCK/SCOND (efficient atomic ops)" | ||||
| 	default y | ||||
| 	depends on !ARC_CPU_750D && !ARC_CANT_LLSC | ||||
| 	depends on !ARC_CANT_LLSC | ||||
| 
 | ||||
| config ARC_STAR_9000923308 | ||||
| 	bool "Workaround for llock/scond livelock" | ||||
| 	default y | ||||
| 	depends on ISA_ARCV2 && SMP && ARC_HAS_LLSC | ||||
| 
 | ||||
| config ARC_HAS_SWAPE | ||||
| 	bool "Insn: SWAPE (endian-swap)" | ||||
|  | @ -378,6 +384,10 @@ config ARC_HAS_LL64 | |||
| 	  dest operands with 2 possible source operands. | ||||
| 	default y | ||||
| 
 | ||||
| config ARC_HAS_DIV_REM | ||||
| 	bool "Insn: div, divu, rem, remu" | ||||
| 	default y | ||||
| 
 | ||||
| config ARC_HAS_RTC | ||||
| 	bool "Local 64-bit r/o cycle counter" | ||||
| 	default n | ||||
|  |  | |||
|  | @ -36,8 +36,16 @@ cflags-$(atleast_gcc44)			+= -fsection-anchors | |||
| cflags-$(CONFIG_ARC_HAS_LLSC)		+= -mlock | ||||
| cflags-$(CONFIG_ARC_HAS_SWAPE)		+= -mswape | ||||
| 
 | ||||
| ifdef CONFIG_ISA_ARCV2 | ||||
| 
 | ||||
| ifndef CONFIG_ARC_HAS_LL64 | ||||
| cflags-$(CONFIG_ISA_ARCV2)		+= -mno-ll64 | ||||
| cflags-y				+= -mno-ll64 | ||||
| endif | ||||
| 
 | ||||
| ifndef CONFIG_ARC_HAS_DIV_REM | ||||
| cflags-y				+= -mno-div-rem | ||||
| endif | ||||
| 
 | ||||
| endif | ||||
| 
 | ||||
| cflags-$(CONFIG_ARC_DW2_UNWIND)		+= -fasynchronous-unwind-tables | ||||
|  | @ -49,7 +57,8 @@ endif | |||
| 
 | ||||
| ifndef CONFIG_CC_OPTIMIZE_FOR_SIZE | ||||
| # Generic build system uses -O2, we want -O3
 | ||||
| cflags-y  += -O3 | ||||
| # Note: No need to add to cflags-y as that happens anyways
 | ||||
| ARCH_CFLAGS += -O3 | ||||
| endif | ||||
| 
 | ||||
| # small data is default for elf32 tool-chain. If not usable, disable it
 | ||||
|  |  | |||
|  | @ -12,7 +12,7 @@ | |||
| 
 | ||||
| / { | ||||
| 	compatible = "snps,arc"; | ||||
| 	clock-frequency = <75000000>; | ||||
| 	clock-frequency = <90000000>; | ||||
| 	#address-cells = <1>; | ||||
| 	#size-cells = <1>; | ||||
| 
 | ||||
|  |  | |||
|  | @ -12,7 +12,7 @@ | |||
| 
 | ||||
| / { | ||||
| 	compatible = "snps,arc"; | ||||
| 	clock-frequency = <75000000>; | ||||
| 	clock-frequency = <90000000>; | ||||
| 	#address-cells = <1>; | ||||
| 	#size-cells = <1>; | ||||
| 
 | ||||
|  |  | |||
|  | @ -22,6 +22,7 @@ generic-y += kvm_para.h | |||
| generic-y += local.h | ||||
| generic-y += local64.h | ||||
| generic-y += mcs_spinlock.h | ||||
| generic-y += mm-arch-hooks.h | ||||
| generic-y += mman.h | ||||
| generic-y += msgbuf.h | ||||
| generic-y += param.h | ||||
|  |  | |||
|  | @ -89,11 +89,10 @@ | |||
| #define ECR_C_BIT_DTLB_LD_MISS		8 | ||||
| #define ECR_C_BIT_DTLB_ST_MISS		9 | ||||
| 
 | ||||
| 
 | ||||
| /* Auxiliary registers */ | ||||
| #define AUX_IDENTITY		4 | ||||
| #define AUX_INTR_VEC_BASE	0x25 | ||||
| 
 | ||||
| #define AUX_NON_VOL		0x5e | ||||
| 
 | ||||
| /*
 | ||||
|  * Floating Pt Registers | ||||
|  | @ -240,9 +239,9 @@ struct bcr_extn_xymem { | |||
| 
 | ||||
| struct bcr_perip { | ||||
| #ifdef CONFIG_CPU_BIG_ENDIAN | ||||
| 	unsigned int start:8, pad2:8, sz:8, pad:8; | ||||
| 	unsigned int start:8, pad2:8, sz:8, ver:8; | ||||
| #else | ||||
| 	unsigned int pad:8, sz:8, pad2:8, start:8; | ||||
| 	unsigned int ver:8, sz:8, pad2:8, start:8; | ||||
| #endif | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -23,33 +23,60 @@ | |||
| 
 | ||||
| #define atomic_set(v, i) (((v)->counter) = (i)) | ||||
| 
 | ||||
| #ifdef CONFIG_ISA_ARCV2 | ||||
| #define PREFETCHW	"	prefetchw   [%1]	\n" | ||||
| #else | ||||
| #define PREFETCHW | ||||
| #ifdef CONFIG_ARC_STAR_9000923308 | ||||
| 
 | ||||
| #define SCOND_FAIL_RETRY_VAR_DEF						\ | ||||
| 	unsigned int delay = 1, tmp;						\ | ||||
| 
 | ||||
| #define SCOND_FAIL_RETRY_ASM							\ | ||||
| 	"	bz	4f			\n"				\ | ||||
| 	"   ; --- scond fail delay ---		\n"				\ | ||||
| 	"	mov	%[tmp], %[delay]	\n"	/* tmp = delay */	\ | ||||
| 	"2: 	brne.d	%[tmp], 0, 2b		\n"	/* while (tmp != 0) */	\ | ||||
| 	"	sub	%[tmp], %[tmp], 1	\n"	/* tmp-- */		\ | ||||
| 	"	rol	%[delay], %[delay]	\n"	/* delay *= 2 */	\ | ||||
| 	"	b	1b			\n"	/* start over */	\ | ||||
| 	"4: ; --- success ---			\n"				\ | ||||
| 
 | ||||
| #define SCOND_FAIL_RETRY_VARS							\ | ||||
| 	  ,[delay] "+&r" (delay),[tmp] "=&r"	(tmp)				\ | ||||
| 
 | ||||
| #else	/* !CONFIG_ARC_STAR_9000923308 */ | ||||
| 
 | ||||
| #define SCOND_FAIL_RETRY_VAR_DEF | ||||
| 
 | ||||
| #define SCOND_FAIL_RETRY_ASM							\ | ||||
| 	"	bnz     1b			\n"				\ | ||||
| 
 | ||||
| #define SCOND_FAIL_RETRY_VARS | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| #define ATOMIC_OP(op, c_op, asm_op)					\ | ||||
| static inline void atomic_##op(int i, atomic_t *v)			\ | ||||
| {									\ | ||||
| 	unsigned int temp;						\ | ||||
| 	unsigned int val;				                \ | ||||
| 	SCOND_FAIL_RETRY_VAR_DEF                                        \ | ||||
| 									\ | ||||
| 	__asm__ __volatile__(						\ | ||||
| 	"1:				\n"				\ | ||||
| 	PREFETCHW							\ | ||||
| 	"	llock   %0, [%1]	\n"				\ | ||||
| 	"	" #asm_op " %0, %0, %2	\n"				\ | ||||
| 	"	scond   %0, [%1]	\n"				\ | ||||
| 	"	bnz     1b		\n"				\ | ||||
| 	: "=&r"(temp)	/* Early clobber, to prevent reg reuse */	\ | ||||
| 	: "r"(&v->counter), "ir"(i)					\ | ||||
| 	"1:	llock   %[val], [%[ctr]]		\n"		\ | ||||
| 	"	" #asm_op " %[val], %[val], %[i]	\n"		\ | ||||
| 	"	scond   %[val], [%[ctr]]		\n"		\ | ||||
| 	"						\n"		\ | ||||
| 	SCOND_FAIL_RETRY_ASM						\ | ||||
| 									\ | ||||
| 	: [val]	"=&r"	(val) /* Early clobber to prevent reg reuse */	\ | ||||
| 	  SCOND_FAIL_RETRY_VARS						\ | ||||
| 	: [ctr]	"r"	(&v->counter), /* Not "m": llock only supports reg direct addr mode */	\ | ||||
| 	  [i]	"ir"	(i)						\ | ||||
| 	: "cc");							\ | ||||
| }									\ | ||||
| 
 | ||||
| #define ATOMIC_OP_RETURN(op, c_op, asm_op)				\ | ||||
| static inline int atomic_##op##_return(int i, atomic_t *v)		\ | ||||
| {									\ | ||||
| 	unsigned int temp;						\ | ||||
| 	unsigned int val;				                \ | ||||
| 	SCOND_FAIL_RETRY_VAR_DEF                                        \ | ||||
| 									\ | ||||
| 	/*								\
 | ||||
| 	 * Explicit full memory barrier needed before/after as		\ | ||||
|  | @ -58,19 +85,21 @@ static inline int atomic_##op##_return(int i, atomic_t *v)		\ | |||
| 	smp_mb();							\ | ||||
| 									\ | ||||
| 	__asm__ __volatile__(						\ | ||||
| 	"1:				\n"				\ | ||||
| 	PREFETCHW							\ | ||||
| 	"	llock   %0, [%1]	\n"				\ | ||||
| 	"	" #asm_op " %0, %0, %2	\n"				\ | ||||
| 	"	scond   %0, [%1]	\n"				\ | ||||
| 	"	bnz     1b		\n"				\ | ||||
| 	: "=&r"(temp)							\ | ||||
| 	: "r"(&v->counter), "ir"(i)					\ | ||||
| 	"1:	llock   %[val], [%[ctr]]		\n"		\ | ||||
| 	"	" #asm_op " %[val], %[val], %[i]	\n"		\ | ||||
| 	"	scond   %[val], [%[ctr]]		\n"		\ | ||||
| 	"						\n"		\ | ||||
| 	SCOND_FAIL_RETRY_ASM						\ | ||||
| 									\ | ||||
| 	: [val]	"=&r"	(val)						\ | ||||
| 	  SCOND_FAIL_RETRY_VARS						\ | ||||
| 	: [ctr]	"r"	(&v->counter),					\ | ||||
| 	  [i]	"ir"	(i)						\ | ||||
| 	: "cc");							\ | ||||
| 									\ | ||||
| 	smp_mb();							\ | ||||
| 									\ | ||||
| 	return temp;							\ | ||||
| 	return val;							\ | ||||
| } | ||||
| 
 | ||||
| #else	/* !CONFIG_ARC_HAS_LLSC */ | ||||
|  | @ -150,6 +179,9 @@ ATOMIC_OP(and, &=, and) | |||
| #undef ATOMIC_OPS | ||||
| #undef ATOMIC_OP_RETURN | ||||
| #undef ATOMIC_OP | ||||
| #undef SCOND_FAIL_RETRY_VAR_DEF | ||||
| #undef SCOND_FAIL_RETRY_ASM | ||||
| #undef SCOND_FAIL_RETRY_VARS | ||||
| 
 | ||||
| /**
 | ||||
|  * __atomic_add_unless - add unless the number is a given value | ||||
|  |  | |||
|  | @ -50,8 +50,7 @@ static inline void op##_bit(unsigned long nr, volatile unsigned long *m)\ | |||
| 	 * done for const @nr, but no code is generated due to gcc	\ | ||||
| 	 * const prop.							\ | ||||
| 	 */								\ | ||||
| 	if (__builtin_constant_p(nr))					\ | ||||
| 		nr &= 0x1f;						\ | ||||
| 	nr &= 0x1f;							\ | ||||
| 									\ | ||||
| 	__asm__ __volatile__(						\ | ||||
| 	"1:	llock       %0, [%1]		\n"			\ | ||||
|  | @ -82,8 +81,7 @@ static inline int test_and_##op##_bit(unsigned long nr, volatile unsigned long * | |||
| 									\ | ||||
| 	m += nr >> 5;							\ | ||||
| 									\ | ||||
| 	if (__builtin_constant_p(nr))					\ | ||||
| 		nr &= 0x1f;						\ | ||||
| 	nr &= 0x1f;							\ | ||||
| 									\ | ||||
| 	/*								\
 | ||||
| 	 * Explicit full memory barrier needed before/after as		\ | ||||
|  | @ -129,16 +127,13 @@ static inline void op##_bit(unsigned long nr, volatile unsigned long *m)\ | |||
| 	unsigned long temp, flags;					\ | ||||
| 	m += nr >> 5;							\ | ||||
| 									\ | ||||
| 	if (__builtin_constant_p(nr))					\ | ||||
| 		nr &= 0x1f;						\ | ||||
| 									\ | ||||
| 	/*								\
 | ||||
| 	 * spin lock/unlock provide the needed smp_mb() before/after	\ | ||||
| 	 */								\ | ||||
| 	bitops_lock(flags);						\ | ||||
| 									\ | ||||
| 	temp = *m;							\ | ||||
| 	*m = temp c_op (1UL << nr);					\ | ||||
| 	*m = temp c_op (1UL << (nr & 0x1f));					\ | ||||
| 									\ | ||||
| 	bitops_unlock(flags);						\ | ||||
| } | ||||
|  | @ -149,17 +144,14 @@ static inline int test_and_##op##_bit(unsigned long nr, volatile unsigned long * | |||
| 	unsigned long old, flags;					\ | ||||
| 	m += nr >> 5;							\ | ||||
| 									\ | ||||
| 	if (__builtin_constant_p(nr))					\ | ||||
| 		nr &= 0x1f;						\ | ||||
| 									\ | ||||
| 	bitops_lock(flags);						\ | ||||
| 									\ | ||||
| 	old = *m;							\ | ||||
| 	*m = old c_op (1 << nr);					\ | ||||
| 	*m = old c_op (1UL << (nr & 0x1f));				\ | ||||
| 									\ | ||||
| 	bitops_unlock(flags);						\ | ||||
| 									\ | ||||
| 	return (old & (1 << nr)) != 0;					\ | ||||
| 	return (old & (1UL << (nr & 0x1f))) != 0;			\ | ||||
| } | ||||
| 
 | ||||
| #endif /* CONFIG_ARC_HAS_LLSC */ | ||||
|  | @ -174,11 +166,8 @@ static inline void __##op##_bit(unsigned long nr, volatile unsigned long *m)	\ | |||
| 	unsigned long temp;						\ | ||||
| 	m += nr >> 5;							\ | ||||
| 									\ | ||||
| 	if (__builtin_constant_p(nr))					\ | ||||
| 		nr &= 0x1f;						\ | ||||
| 									\ | ||||
| 	temp = *m;							\ | ||||
| 	*m = temp c_op (1UL << nr);					\ | ||||
| 	*m = temp c_op (1UL << (nr & 0x1f));				\ | ||||
| } | ||||
| 
 | ||||
| #define __TEST_N_BIT_OP(op, c_op, asm_op)				\ | ||||
|  | @ -187,13 +176,10 @@ static inline int __test_and_##op##_bit(unsigned long nr, volatile unsigned long | |||
| 	unsigned long old;						\ | ||||
| 	m += nr >> 5;							\ | ||||
| 									\ | ||||
| 	if (__builtin_constant_p(nr))					\ | ||||
| 		nr &= 0x1f;						\ | ||||
| 									\ | ||||
| 	old = *m;							\ | ||||
| 	*m = old c_op (1 << nr);					\ | ||||
| 	*m = old c_op (1UL << (nr & 0x1f));				\ | ||||
| 									\ | ||||
| 	return (old & (1 << nr)) != 0;					\ | ||||
| 	return (old & (1UL << (nr & 0x1f))) != 0;			\ | ||||
| } | ||||
| 
 | ||||
| #define BIT_OPS(op, c_op, asm_op)					\ | ||||
|  | @ -224,10 +210,7 @@ test_bit(unsigned int nr, const volatile unsigned long *addr) | |||
| 
 | ||||
| 	addr += nr >> 5; | ||||
| 
 | ||||
| 	if (__builtin_constant_p(nr)) | ||||
| 		nr &= 0x1f; | ||||
| 
 | ||||
| 	mask = 1 << nr; | ||||
| 	mask = 1UL << (nr & 0x1f); | ||||
| 
 | ||||
| 	return ((mask & *addr) != 0); | ||||
| } | ||||
|  |  | |||
|  | @ -16,12 +16,15 @@ | |||
| #include <linux/uaccess.h> | ||||
| #include <asm/errno.h> | ||||
| 
 | ||||
| #ifdef CONFIG_ARC_HAS_LLSC | ||||
| 
 | ||||
| #define __futex_atomic_op(insn, ret, oldval, uaddr, oparg)\ | ||||
| 							\ | ||||
| 	__asm__ __volatile__(				\ | ||||
| 	"1:	ld  %1, [%2]			\n"	\ | ||||
| 	"1:	llock	%1, [%2]		\n"	\ | ||||
| 		insn				"\n"	\ | ||||
| 	"2:	st  %0, [%2]			\n"	\ | ||||
| 	"2:	scond	%0, [%2]		\n"	\ | ||||
| 	"	bnz	1b			\n"	\ | ||||
| 	"	mov %0, 0			\n"	\ | ||||
| 	"3:					\n"	\ | ||||
| 	"	.section .fixup,\"ax\"		\n"	\ | ||||
|  | @ -39,6 +42,33 @@ | |||
| 	: "r" (uaddr), "r" (oparg), "ir" (-EFAULT)	\ | ||||
| 	: "cc", "memory") | ||||
| 
 | ||||
| #else	/* !CONFIG_ARC_HAS_LLSC */ | ||||
| 
 | ||||
| #define __futex_atomic_op(insn, ret, oldval, uaddr, oparg)\ | ||||
| 							\ | ||||
| 	__asm__ __volatile__(				\ | ||||
| 	"1:	ld	%1, [%2]		\n"	\ | ||||
| 		insn				"\n"	\ | ||||
| 	"2:	st	%0, [%2]		\n"	\ | ||||
| 	"	mov %0, 0			\n"	\ | ||||
| 	"3:					\n"	\ | ||||
| 	"	.section .fixup,\"ax\"		\n"	\ | ||||
| 	"	.align  4			\n"	\ | ||||
| 	"4:	mov %0, %4			\n"	\ | ||||
| 	"	b   3b				\n"	\ | ||||
| 	"	.previous			\n"	\ | ||||
| 	"	.section __ex_table,\"a\"	\n"	\ | ||||
| 	"	.align  4			\n"	\ | ||||
| 	"	.word   1b, 4b			\n"	\ | ||||
| 	"	.word   2b, 4b			\n"	\ | ||||
| 	"	.previous			\n"	\ | ||||
| 							\ | ||||
| 	: "=&r" (ret), "=&r" (oldval)			\ | ||||
| 	: "r" (uaddr), "r" (oparg), "ir" (-EFAULT)	\ | ||||
| 	: "cc", "memory") | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| static inline int futex_atomic_op_inuser(int encoded_op, u32 __user *uaddr) | ||||
| { | ||||
| 	int op = (encoded_op >> 28) & 7; | ||||
|  | @ -123,11 +153,17 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr, u32 oldval, | |||
| 
 | ||||
| 	pagefault_disable(); | ||||
| 
 | ||||
| 	/* TBD : can use llock/scond */ | ||||
| 	__asm__ __volatile__( | ||||
| 	"1:	ld    %0, [%3]	\n" | ||||
| 	"	brne  %0, %1, 3f	\n" | ||||
| 	"2:	st    %2, [%3]	\n" | ||||
| #ifdef CONFIG_ARC_HAS_LLSC | ||||
| 	"1:	llock	%0, [%3]		\n" | ||||
| 	"	brne	%0, %1, 3f		\n" | ||||
| 	"2:	scond	%2, [%3]		\n" | ||||
| 	"	bnz	1b			\n" | ||||
| #else | ||||
| 	"1:	ld	%0, [%3]		\n" | ||||
| 	"	brne	%0, %1, 3f		\n" | ||||
| 	"2:	st	%2, [%3]		\n" | ||||
| #endif | ||||
| 	"3:	\n" | ||||
| 	"	.section .fixup,\"ax\"	\n" | ||||
| 	"4:	mov %0, %4	\n" | ||||
|  |  | |||
|  | @ -1,15 +0,0 @@ | |||
| /*
 | ||||
|  * Architecture specific mm hooks | ||||
|  * | ||||
|  * Copyright (C) 2015, IBM Corporation | ||||
|  * Author: Laurent Dufour <ldufour@linux.vnet.ibm.com> | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License version 2 as | ||||
|  * published by the Free Software Foundation. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef _ASM_ARC_MM_ARCH_HOOKS_H | ||||
| #define _ASM_ARC_MM_ARCH_HOOKS_H | ||||
| 
 | ||||
| #endif /* _ASM_ARC_MM_ARCH_HOOKS_H */ | ||||
|  | @ -20,20 +20,20 @@ | |||
| struct pt_regs { | ||||
| 
 | ||||
| 	/* Real registers */ | ||||
| 	long bta;	/* bta_l1, bta_l2, erbta */ | ||||
| 	unsigned long bta;	/* bta_l1, bta_l2, erbta */ | ||||
| 
 | ||||
| 	long lp_start, lp_end, lp_count; | ||||
| 	unsigned long lp_start, lp_end, lp_count; | ||||
| 
 | ||||
| 	long status32;	/* status32_l1, status32_l2, erstatus */ | ||||
| 	long ret;	/* ilink1, ilink2 or eret */ | ||||
| 	long blink; | ||||
| 	long fp; | ||||
| 	long r26;	/* gp */ | ||||
| 	unsigned long status32;	/* status32_l1, status32_l2, erstatus */ | ||||
| 	unsigned long ret;	/* ilink1, ilink2 or eret */ | ||||
| 	unsigned long blink; | ||||
| 	unsigned long fp; | ||||
| 	unsigned long r26;	/* gp */ | ||||
| 
 | ||||
| 	long r12, r11, r10, r9, r8, r7, r6, r5, r4, r3, r2, r1, r0; | ||||
| 	unsigned long r12, r11, r10, r9, r8, r7, r6, r5, r4, r3, r2, r1, r0; | ||||
| 
 | ||||
| 	long sp;	/* user/kernel sp depending on where we came from  */ | ||||
| 	long orig_r0; | ||||
| 	unsigned long sp;	/* User/Kernel depending on where we came from */ | ||||
| 	unsigned long orig_r0; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * To distinguish bet excp, syscall, irq | ||||
|  | @ -55,13 +55,13 @@ struct pt_regs { | |||
| 		unsigned long event; | ||||
| 	}; | ||||
| 
 | ||||
| 	long user_r25; | ||||
| 	unsigned long user_r25; | ||||
| }; | ||||
| #else | ||||
| 
 | ||||
| struct pt_regs { | ||||
| 
 | ||||
| 	long orig_r0; | ||||
| 	unsigned long orig_r0; | ||||
| 
 | ||||
| 	union { | ||||
| 		struct { | ||||
|  | @ -76,26 +76,26 @@ struct pt_regs { | |||
| 		unsigned long event; | ||||
| 	}; | ||||
| 
 | ||||
| 	long bta;	/* bta_l1, bta_l2, erbta */ | ||||
| 	unsigned long bta;	/* bta_l1, bta_l2, erbta */ | ||||
| 
 | ||||
| 	long user_r25; | ||||
| 	unsigned long user_r25; | ||||
| 
 | ||||
| 	long r26;	/* gp */ | ||||
| 	long fp; | ||||
| 	long sp;	/* user/kernel sp depending on where we came from  */ | ||||
| 	unsigned long r26;	/* gp */ | ||||
| 	unsigned long fp; | ||||
| 	unsigned long sp;	/* user/kernel sp depending on where we came from  */ | ||||
| 
 | ||||
| 	long r12; | ||||
| 	unsigned long r12; | ||||
| 
 | ||||
| 	/*------- Below list auto saved by h/w -----------*/ | ||||
| 	long r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11; | ||||
| 	unsigned long r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11; | ||||
| 
 | ||||
| 	long blink; | ||||
| 	long lp_end, lp_start, lp_count; | ||||
| 	unsigned long blink; | ||||
| 	unsigned long lp_end, lp_start, lp_count; | ||||
| 
 | ||||
| 	long ei, ldi, jli; | ||||
| 	unsigned long ei, ldi, jli; | ||||
| 
 | ||||
| 	long ret; | ||||
| 	long status32; | ||||
| 	unsigned long ret; | ||||
| 	unsigned long status32; | ||||
| }; | ||||
| 
 | ||||
| #endif | ||||
|  | @ -103,7 +103,7 @@ struct pt_regs { | |||
| /* Callee saved registers - need to be saved only when you are scheduled out */ | ||||
| 
 | ||||
| struct callee_regs { | ||||
| 	long r25, r24, r23, r22, r21, r20, r19, r18, r17, r16, r15, r14, r13; | ||||
| 	unsigned long r25, r24, r23, r22, r21, r20, r19, r18, r17, r16, r15, r14, r13; | ||||
| }; | ||||
| 
 | ||||
| #define instruction_pointer(regs)	((regs)->ret) | ||||
|  | @ -142,7 +142,7 @@ struct callee_regs { | |||
| 
 | ||||
| static inline long regs_return_value(struct pt_regs *regs) | ||||
| { | ||||
| 	return regs->r0; | ||||
| 	return (long)regs->r0; | ||||
| } | ||||
| 
 | ||||
| #endif /* !__ASSEMBLY__ */ | ||||
|  |  | |||
|  | @ -18,9 +18,518 @@ | |||
| #define arch_spin_unlock_wait(x) \ | ||||
| 	do { while (arch_spin_is_locked(x)) cpu_relax(); } while (0) | ||||
| 
 | ||||
| #ifdef CONFIG_ARC_HAS_LLSC | ||||
| 
 | ||||
| /*
 | ||||
|  * A normal LLOCK/SCOND based system, w/o need for livelock workaround | ||||
|  */ | ||||
| #ifndef CONFIG_ARC_STAR_9000923308 | ||||
| 
 | ||||
| static inline void arch_spin_lock(arch_spinlock_t *lock) | ||||
| { | ||||
| 	unsigned int tmp = __ARCH_SPIN_LOCK_LOCKED__; | ||||
| 	unsigned int val; | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	__asm__ __volatile__( | ||||
| 	"1:	llock	%[val], [%[slock]]	\n" | ||||
| 	"	breq	%[val], %[LOCKED], 1b	\n"	/* spin while LOCKED */ | ||||
| 	"	scond	%[LOCKED], [%[slock]]	\n"	/* acquire */ | ||||
| 	"	bnz	1b			\n" | ||||
| 	"					\n" | ||||
| 	: [val]		"=&r"	(val) | ||||
| 	: [slock]	"r"	(&(lock->slock)), | ||||
| 	  [LOCKED]	"r"	(__ARCH_SPIN_LOCK_LOCKED__) | ||||
| 	: "memory", "cc"); | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| } | ||||
| 
 | ||||
| /* 1 - lock taken successfully */ | ||||
| static inline int arch_spin_trylock(arch_spinlock_t *lock) | ||||
| { | ||||
| 	unsigned int val, got_it = 0; | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	__asm__ __volatile__( | ||||
| 	"1:	llock	%[val], [%[slock]]	\n" | ||||
| 	"	breq	%[val], %[LOCKED], 4f	\n"	/* already LOCKED, just bail */ | ||||
| 	"	scond	%[LOCKED], [%[slock]]	\n"	/* acquire */ | ||||
| 	"	bnz	1b			\n" | ||||
| 	"	mov	%[got_it], 1		\n" | ||||
| 	"4:					\n" | ||||
| 	"					\n" | ||||
| 	: [val]		"=&r"	(val), | ||||
| 	  [got_it]	"+&r"	(got_it) | ||||
| 	: [slock]	"r"	(&(lock->slock)), | ||||
| 	  [LOCKED]	"r"	(__ARCH_SPIN_LOCK_LOCKED__) | ||||
| 	: "memory", "cc"); | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	return got_it; | ||||
| } | ||||
| 
 | ||||
| static inline void arch_spin_unlock(arch_spinlock_t *lock) | ||||
| { | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	lock->slock = __ARCH_SPIN_LOCK_UNLOCKED__; | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Read-write spinlocks, allowing multiple readers but only one writer. | ||||
|  * Unfair locking as Writers could be starved indefinitely by Reader(s) | ||||
|  */ | ||||
| 
 | ||||
| static inline void arch_read_lock(arch_rwlock_t *rw) | ||||
| { | ||||
| 	unsigned int val; | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * zero means writer holds the lock exclusively, deny Reader. | ||||
| 	 * Otherwise grant lock to first/subseq reader | ||||
| 	 * | ||||
| 	 * 	if (rw->counter > 0) { | ||||
| 	 *		rw->counter--; | ||||
| 	 *		ret = 1; | ||||
| 	 *	} | ||||
| 	 */ | ||||
| 
 | ||||
| 	__asm__ __volatile__( | ||||
| 	"1:	llock	%[val], [%[rwlock]]	\n" | ||||
| 	"	brls	%[val], %[WR_LOCKED], 1b\n"	/* <= 0: spin while write locked */ | ||||
| 	"	sub	%[val], %[val], 1	\n"	/* reader lock */ | ||||
| 	"	scond	%[val], [%[rwlock]]	\n" | ||||
| 	"	bnz	1b			\n" | ||||
| 	"					\n" | ||||
| 	: [val]		"=&r"	(val) | ||||
| 	: [rwlock]	"r"	(&(rw->counter)), | ||||
| 	  [WR_LOCKED]	"ir"	(0) | ||||
| 	: "memory", "cc"); | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| } | ||||
| 
 | ||||
| /* 1 - lock taken successfully */ | ||||
| static inline int arch_read_trylock(arch_rwlock_t *rw) | ||||
| { | ||||
| 	unsigned int val, got_it = 0; | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	__asm__ __volatile__( | ||||
| 	"1:	llock	%[val], [%[rwlock]]	\n" | ||||
| 	"	brls	%[val], %[WR_LOCKED], 4f\n"	/* <= 0: already write locked, bail */ | ||||
| 	"	sub	%[val], %[val], 1	\n"	/* counter-- */ | ||||
| 	"	scond	%[val], [%[rwlock]]	\n" | ||||
| 	"	bnz	1b			\n"	/* retry if collided with someone */ | ||||
| 	"	mov	%[got_it], 1		\n" | ||||
| 	"					\n" | ||||
| 	"4: ; --- done ---			\n" | ||||
| 
 | ||||
| 	: [val]		"=&r"	(val), | ||||
| 	  [got_it]	"+&r"	(got_it) | ||||
| 	: [rwlock]	"r"	(&(rw->counter)), | ||||
| 	  [WR_LOCKED]	"ir"	(0) | ||||
| 	: "memory", "cc"); | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	return got_it; | ||||
| } | ||||
| 
 | ||||
| static inline void arch_write_lock(arch_rwlock_t *rw) | ||||
| { | ||||
| 	unsigned int val; | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * If reader(s) hold lock (lock < __ARCH_RW_LOCK_UNLOCKED__), | ||||
| 	 * deny writer. Otherwise if unlocked grant to writer | ||||
| 	 * Hence the claim that Linux rwlocks are unfair to writers. | ||||
| 	 * (can be starved for an indefinite time by readers). | ||||
| 	 * | ||||
| 	 *	if (rw->counter == __ARCH_RW_LOCK_UNLOCKED__) { | ||||
| 	 *		rw->counter = 0; | ||||
| 	 *		ret = 1; | ||||
| 	 *	} | ||||
| 	 */ | ||||
| 
 | ||||
| 	__asm__ __volatile__( | ||||
| 	"1:	llock	%[val], [%[rwlock]]	\n" | ||||
| 	"	brne	%[val], %[UNLOCKED], 1b	\n"	/* while !UNLOCKED spin */ | ||||
| 	"	mov	%[val], %[WR_LOCKED]	\n" | ||||
| 	"	scond	%[val], [%[rwlock]]	\n" | ||||
| 	"	bnz	1b			\n" | ||||
| 	"					\n" | ||||
| 	: [val]		"=&r"	(val) | ||||
| 	: [rwlock]	"r"	(&(rw->counter)), | ||||
| 	  [UNLOCKED]	"ir"	(__ARCH_RW_LOCK_UNLOCKED__), | ||||
| 	  [WR_LOCKED]	"ir"	(0) | ||||
| 	: "memory", "cc"); | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| } | ||||
| 
 | ||||
| /* 1 - lock taken successfully */ | ||||
| static inline int arch_write_trylock(arch_rwlock_t *rw) | ||||
| { | ||||
| 	unsigned int val, got_it = 0; | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	__asm__ __volatile__( | ||||
| 	"1:	llock	%[val], [%[rwlock]]	\n" | ||||
| 	"	brne	%[val], %[UNLOCKED], 4f	\n"	/* !UNLOCKED, bail */ | ||||
| 	"	mov	%[val], %[WR_LOCKED]	\n" | ||||
| 	"	scond	%[val], [%[rwlock]]	\n" | ||||
| 	"	bnz	1b			\n"	/* retry if collided with someone */ | ||||
| 	"	mov	%[got_it], 1		\n" | ||||
| 	"					\n" | ||||
| 	"4: ; --- done ---			\n" | ||||
| 
 | ||||
| 	: [val]		"=&r"	(val), | ||||
| 	  [got_it]	"+&r"	(got_it) | ||||
| 	: [rwlock]	"r"	(&(rw->counter)), | ||||
| 	  [UNLOCKED]	"ir"	(__ARCH_RW_LOCK_UNLOCKED__), | ||||
| 	  [WR_LOCKED]	"ir"	(0) | ||||
| 	: "memory", "cc"); | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	return got_it; | ||||
| } | ||||
| 
 | ||||
| static inline void arch_read_unlock(arch_rwlock_t *rw) | ||||
| { | ||||
| 	unsigned int val; | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * rw->counter++; | ||||
| 	 */ | ||||
| 	__asm__ __volatile__( | ||||
| 	"1:	llock	%[val], [%[rwlock]]	\n" | ||||
| 	"	add	%[val], %[val], 1	\n" | ||||
| 	"	scond	%[val], [%[rwlock]]	\n" | ||||
| 	"	bnz	1b			\n" | ||||
| 	"					\n" | ||||
| 	: [val]		"=&r"	(val) | ||||
| 	: [rwlock]	"r"	(&(rw->counter)) | ||||
| 	: "memory", "cc"); | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| } | ||||
| 
 | ||||
| static inline void arch_write_unlock(arch_rwlock_t *rw) | ||||
| { | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	rw->counter = __ARCH_RW_LOCK_UNLOCKED__; | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| } | ||||
| 
 | ||||
| #else	/* CONFIG_ARC_STAR_9000923308 */ | ||||
| 
 | ||||
| /*
 | ||||
|  * HS38x4 could get into a LLOCK/SCOND livelock in case of multiple overlapping | ||||
|  * coherency transactions in the SCU. The exclusive line state keeps rotating | ||||
|  * among contenting cores leading to a never ending cycle. So break the cycle | ||||
|  * by deferring the retry of failed exclusive access (SCOND). The actual delay | ||||
|  * needed is function of number of contending cores as well as the unrelated | ||||
|  * coherency traffic from other cores. To keep the code simple, start off with | ||||
|  * small delay of 1 which would suffice most cases and in case of contention | ||||
|  * double the delay. Eventually the delay is sufficient such that the coherency | ||||
|  * pipeline is drained, thus a subsequent exclusive access would succeed. | ||||
|  */ | ||||
| 
 | ||||
| #define SCOND_FAIL_RETRY_VAR_DEF						\ | ||||
| 	unsigned int delay, tmp;						\ | ||||
| 
 | ||||
| #define SCOND_FAIL_RETRY_ASM							\ | ||||
| 	"   ; --- scond fail delay ---		\n"				\ | ||||
| 	"	mov	%[tmp], %[delay]	\n"	/* tmp = delay */	\ | ||||
| 	"2: 	brne.d	%[tmp], 0, 2b		\n"	/* while (tmp != 0) */	\ | ||||
| 	"	sub	%[tmp], %[tmp], 1	\n"	/* tmp-- */		\ | ||||
| 	"	rol	%[delay], %[delay]	\n"	/* delay *= 2 */	\ | ||||
| 	"	b	1b			\n"	/* start over */	\ | ||||
| 	"					\n"				\ | ||||
| 	"4: ; --- done ---			\n"				\ | ||||
| 
 | ||||
| #define SCOND_FAIL_RETRY_VARS							\ | ||||
| 	  ,[delay] "=&r" (delay), [tmp] "=&r"	(tmp)				\ | ||||
| 
 | ||||
| static inline void arch_spin_lock(arch_spinlock_t *lock) | ||||
| { | ||||
| 	unsigned int val; | ||||
| 	SCOND_FAIL_RETRY_VAR_DEF; | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	__asm__ __volatile__( | ||||
| 	"0:	mov	%[delay], 1		\n" | ||||
| 	"1:	llock	%[val], [%[slock]]	\n" | ||||
| 	"	breq	%[val], %[LOCKED], 0b	\n"	/* spin while LOCKED */ | ||||
| 	"	scond	%[LOCKED], [%[slock]]	\n"	/* acquire */ | ||||
| 	"	bz	4f			\n"	/* done */ | ||||
| 	"					\n" | ||||
| 	SCOND_FAIL_RETRY_ASM | ||||
| 
 | ||||
| 	: [val]		"=&r"	(val) | ||||
| 	  SCOND_FAIL_RETRY_VARS | ||||
| 	: [slock]	"r"	(&(lock->slock)), | ||||
| 	  [LOCKED]	"r"	(__ARCH_SPIN_LOCK_LOCKED__) | ||||
| 	: "memory", "cc"); | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| } | ||||
| 
 | ||||
| /* 1 - lock taken successfully */ | ||||
| static inline int arch_spin_trylock(arch_spinlock_t *lock) | ||||
| { | ||||
| 	unsigned int val, got_it = 0; | ||||
| 	SCOND_FAIL_RETRY_VAR_DEF; | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	__asm__ __volatile__( | ||||
| 	"0:	mov	%[delay], 1		\n" | ||||
| 	"1:	llock	%[val], [%[slock]]	\n" | ||||
| 	"	breq	%[val], %[LOCKED], 4f	\n"	/* already LOCKED, just bail */ | ||||
| 	"	scond	%[LOCKED], [%[slock]]	\n"	/* acquire */ | ||||
| 	"	bz.d	4f			\n" | ||||
| 	"	mov.z	%[got_it], 1		\n"	/* got it */ | ||||
| 	"					\n" | ||||
| 	SCOND_FAIL_RETRY_ASM | ||||
| 
 | ||||
| 	: [val]		"=&r"	(val), | ||||
| 	  [got_it]	"+&r"	(got_it) | ||||
| 	  SCOND_FAIL_RETRY_VARS | ||||
| 	: [slock]	"r"	(&(lock->slock)), | ||||
| 	  [LOCKED]	"r"	(__ARCH_SPIN_LOCK_LOCKED__) | ||||
| 	: "memory", "cc"); | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	return got_it; | ||||
| } | ||||
| 
 | ||||
| static inline void arch_spin_unlock(arch_spinlock_t *lock) | ||||
| { | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	lock->slock = __ARCH_SPIN_LOCK_UNLOCKED__; | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Read-write spinlocks, allowing multiple readers but only one writer. | ||||
|  * Unfair locking as Writers could be starved indefinitely by Reader(s) | ||||
|  */ | ||||
| 
 | ||||
| static inline void arch_read_lock(arch_rwlock_t *rw) | ||||
| { | ||||
| 	unsigned int val; | ||||
| 	SCOND_FAIL_RETRY_VAR_DEF; | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * zero means writer holds the lock exclusively, deny Reader. | ||||
| 	 * Otherwise grant lock to first/subseq reader | ||||
| 	 * | ||||
| 	 * 	if (rw->counter > 0) { | ||||
| 	 *		rw->counter--; | ||||
| 	 *		ret = 1; | ||||
| 	 *	} | ||||
| 	 */ | ||||
| 
 | ||||
| 	__asm__ __volatile__( | ||||
| 	"0:	mov	%[delay], 1		\n" | ||||
| 	"1:	llock	%[val], [%[rwlock]]	\n" | ||||
| 	"	brls	%[val], %[WR_LOCKED], 0b\n"	/* <= 0: spin while write locked */ | ||||
| 	"	sub	%[val], %[val], 1	\n"	/* reader lock */ | ||||
| 	"	scond	%[val], [%[rwlock]]	\n" | ||||
| 	"	bz	4f			\n"	/* done */ | ||||
| 	"					\n" | ||||
| 	SCOND_FAIL_RETRY_ASM | ||||
| 
 | ||||
| 	: [val]		"=&r"	(val) | ||||
| 	  SCOND_FAIL_RETRY_VARS | ||||
| 	: [rwlock]	"r"	(&(rw->counter)), | ||||
| 	  [WR_LOCKED]	"ir"	(0) | ||||
| 	: "memory", "cc"); | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| } | ||||
| 
 | ||||
| /* 1 - lock taken successfully */ | ||||
| static inline int arch_read_trylock(arch_rwlock_t *rw) | ||||
| { | ||||
| 	unsigned int val, got_it = 0; | ||||
| 	SCOND_FAIL_RETRY_VAR_DEF; | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	__asm__ __volatile__( | ||||
| 	"0:	mov	%[delay], 1		\n" | ||||
| 	"1:	llock	%[val], [%[rwlock]]	\n" | ||||
| 	"	brls	%[val], %[WR_LOCKED], 4f\n"	/* <= 0: already write locked, bail */ | ||||
| 	"	sub	%[val], %[val], 1	\n"	/* counter-- */ | ||||
| 	"	scond	%[val], [%[rwlock]]	\n" | ||||
| 	"	bz.d	4f			\n" | ||||
| 	"	mov.z	%[got_it], 1		\n"	/* got it */ | ||||
| 	"					\n" | ||||
| 	SCOND_FAIL_RETRY_ASM | ||||
| 
 | ||||
| 	: [val]		"=&r"	(val), | ||||
| 	  [got_it]	"+&r"	(got_it) | ||||
| 	  SCOND_FAIL_RETRY_VARS | ||||
| 	: [rwlock]	"r"	(&(rw->counter)), | ||||
| 	  [WR_LOCKED]	"ir"	(0) | ||||
| 	: "memory", "cc"); | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	return got_it; | ||||
| } | ||||
| 
 | ||||
| static inline void arch_write_lock(arch_rwlock_t *rw) | ||||
| { | ||||
| 	unsigned int val; | ||||
| 	SCOND_FAIL_RETRY_VAR_DEF; | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * If reader(s) hold lock (lock < __ARCH_RW_LOCK_UNLOCKED__), | ||||
| 	 * deny writer. Otherwise if unlocked grant to writer | ||||
| 	 * Hence the claim that Linux rwlocks are unfair to writers. | ||||
| 	 * (can be starved for an indefinite time by readers). | ||||
| 	 * | ||||
| 	 *	if (rw->counter == __ARCH_RW_LOCK_UNLOCKED__) { | ||||
| 	 *		rw->counter = 0; | ||||
| 	 *		ret = 1; | ||||
| 	 *	} | ||||
| 	 */ | ||||
| 
 | ||||
| 	__asm__ __volatile__( | ||||
| 	"0:	mov	%[delay], 1		\n" | ||||
| 	"1:	llock	%[val], [%[rwlock]]	\n" | ||||
| 	"	brne	%[val], %[UNLOCKED], 0b	\n"	/* while !UNLOCKED spin */ | ||||
| 	"	mov	%[val], %[WR_LOCKED]	\n" | ||||
| 	"	scond	%[val], [%[rwlock]]	\n" | ||||
| 	"	bz	4f			\n" | ||||
| 	"					\n" | ||||
| 	SCOND_FAIL_RETRY_ASM | ||||
| 
 | ||||
| 	: [val]		"=&r"	(val) | ||||
| 	  SCOND_FAIL_RETRY_VARS | ||||
| 	: [rwlock]	"r"	(&(rw->counter)), | ||||
| 	  [UNLOCKED]	"ir"	(__ARCH_RW_LOCK_UNLOCKED__), | ||||
| 	  [WR_LOCKED]	"ir"	(0) | ||||
| 	: "memory", "cc"); | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| } | ||||
| 
 | ||||
| /* 1 - lock taken successfully */ | ||||
| static inline int arch_write_trylock(arch_rwlock_t *rw) | ||||
| { | ||||
| 	unsigned int val, got_it = 0; | ||||
| 	SCOND_FAIL_RETRY_VAR_DEF; | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	__asm__ __volatile__( | ||||
| 	"0:	mov	%[delay], 1		\n" | ||||
| 	"1:	llock	%[val], [%[rwlock]]	\n" | ||||
| 	"	brne	%[val], %[UNLOCKED], 4f	\n"	/* !UNLOCKED, bail */ | ||||
| 	"	mov	%[val], %[WR_LOCKED]	\n" | ||||
| 	"	scond	%[val], [%[rwlock]]	\n" | ||||
| 	"	bz.d	4f			\n" | ||||
| 	"	mov.z	%[got_it], 1		\n"	/* got it */ | ||||
| 	"					\n" | ||||
| 	SCOND_FAIL_RETRY_ASM | ||||
| 
 | ||||
| 	: [val]		"=&r"	(val), | ||||
| 	  [got_it]	"+&r"	(got_it) | ||||
| 	  SCOND_FAIL_RETRY_VARS | ||||
| 	: [rwlock]	"r"	(&(rw->counter)), | ||||
| 	  [UNLOCKED]	"ir"	(__ARCH_RW_LOCK_UNLOCKED__), | ||||
| 	  [WR_LOCKED]	"ir"	(0) | ||||
| 	: "memory", "cc"); | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	return got_it; | ||||
| } | ||||
| 
 | ||||
| static inline void arch_read_unlock(arch_rwlock_t *rw) | ||||
| { | ||||
| 	unsigned int val; | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * rw->counter++; | ||||
| 	 */ | ||||
| 	__asm__ __volatile__( | ||||
| 	"1:	llock	%[val], [%[rwlock]]	\n" | ||||
| 	"	add	%[val], %[val], 1	\n" | ||||
| 	"	scond	%[val], [%[rwlock]]	\n" | ||||
| 	"	bnz	1b			\n" | ||||
| 	"					\n" | ||||
| 	: [val]		"=&r"	(val) | ||||
| 	: [rwlock]	"r"	(&(rw->counter)) | ||||
| 	: "memory", "cc"); | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| } | ||||
| 
 | ||||
| static inline void arch_write_unlock(arch_rwlock_t *rw) | ||||
| { | ||||
| 	unsigned int val; | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * rw->counter = __ARCH_RW_LOCK_UNLOCKED__; | ||||
| 	 */ | ||||
| 	__asm__ __volatile__( | ||||
| 	"1:	llock	%[val], [%[rwlock]]	\n" | ||||
| 	"	scond	%[UNLOCKED], [%[rwlock]]\n" | ||||
| 	"	bnz	1b			\n" | ||||
| 	"					\n" | ||||
| 	: [val]		"=&r"	(val) | ||||
| 	: [rwlock]	"r"	(&(rw->counter)), | ||||
| 	  [UNLOCKED]	"r"	(__ARCH_RW_LOCK_UNLOCKED__) | ||||
| 	: "memory", "cc"); | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| } | ||||
| 
 | ||||
| #undef SCOND_FAIL_RETRY_VAR_DEF | ||||
| #undef SCOND_FAIL_RETRY_ASM | ||||
| #undef SCOND_FAIL_RETRY_VARS | ||||
| 
 | ||||
| #endif	/* CONFIG_ARC_STAR_9000923308 */ | ||||
| 
 | ||||
| #else	/* !CONFIG_ARC_HAS_LLSC */ | ||||
| 
 | ||||
| static inline void arch_spin_lock(arch_spinlock_t *lock) | ||||
| { | ||||
| 	unsigned int val = __ARCH_SPIN_LOCK_LOCKED__; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * This smp_mb() is technically superfluous, we only need the one | ||||
|  | @ -33,7 +542,7 @@ static inline void arch_spin_lock(arch_spinlock_t *lock) | |||
| 	__asm__ __volatile__( | ||||
| 	"1:	ex  %0, [%1]		\n" | ||||
| 	"	breq  %0, %2, 1b	\n" | ||||
| 	: "+&r" (tmp) | ||||
| 	: "+&r" (val) | ||||
| 	: "r"(&(lock->slock)), "ir"(__ARCH_SPIN_LOCK_LOCKED__) | ||||
| 	: "memory"); | ||||
| 
 | ||||
|  | @ -48,26 +557,27 @@ static inline void arch_spin_lock(arch_spinlock_t *lock) | |||
| 	smp_mb(); | ||||
| } | ||||
| 
 | ||||
| /* 1 - lock taken successfully */ | ||||
| static inline int arch_spin_trylock(arch_spinlock_t *lock) | ||||
| { | ||||
| 	unsigned int tmp = __ARCH_SPIN_LOCK_LOCKED__; | ||||
| 	unsigned int val = __ARCH_SPIN_LOCK_LOCKED__; | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	__asm__ __volatile__( | ||||
| 	"1:	ex  %0, [%1]		\n" | ||||
| 	: "+r" (tmp) | ||||
| 	: "+r" (val) | ||||
| 	: "r"(&(lock->slock)) | ||||
| 	: "memory"); | ||||
| 
 | ||||
| 	smp_mb(); | ||||
| 
 | ||||
| 	return (tmp == __ARCH_SPIN_LOCK_UNLOCKED__); | ||||
| 	return (val == __ARCH_SPIN_LOCK_UNLOCKED__); | ||||
| } | ||||
| 
 | ||||
| static inline void arch_spin_unlock(arch_spinlock_t *lock) | ||||
| { | ||||
| 	unsigned int tmp = __ARCH_SPIN_LOCK_UNLOCKED__; | ||||
| 	unsigned int val = __ARCH_SPIN_LOCK_UNLOCKED__; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * RELEASE barrier: given the instructions avail on ARCv2, full barrier | ||||
|  | @ -77,7 +587,7 @@ static inline void arch_spin_unlock(arch_spinlock_t *lock) | |||
| 
 | ||||
| 	__asm__ __volatile__( | ||||
| 	"	ex  %0, [%1]		\n" | ||||
| 	: "+r" (tmp) | ||||
| 	: "+r" (val) | ||||
| 	: "r"(&(lock->slock)) | ||||
| 	: "memory"); | ||||
| 
 | ||||
|  | @ -90,19 +600,12 @@ static inline void arch_spin_unlock(arch_spinlock_t *lock) | |||
| 
 | ||||
| /*
 | ||||
|  * Read-write spinlocks, allowing multiple readers but only one writer. | ||||
|  * Unfair locking as Writers could be starved indefinitely by Reader(s) | ||||
|  * | ||||
|  * The spinlock itself is contained in @counter and access to it is | ||||
|  * serialized with @lock_mutex. | ||||
|  * | ||||
|  * Unfair locking as Writers could be starved indefinitely by Reader(s) | ||||
|  */ | ||||
| 
 | ||||
| /* Would read_trylock() succeed? */ | ||||
| #define arch_read_can_lock(x)	((x)->counter > 0) | ||||
| 
 | ||||
| /* Would write_trylock() succeed? */ | ||||
| #define arch_write_can_lock(x)	((x)->counter == __ARCH_RW_LOCK_UNLOCKED__) | ||||
| 
 | ||||
| /* 1 - lock taken successfully */ | ||||
| static inline int arch_read_trylock(arch_rwlock_t *rw) | ||||
| { | ||||
|  | @ -173,6 +676,11 @@ static inline void arch_write_unlock(arch_rwlock_t *rw) | |||
| 	arch_spin_unlock(&(rw->lock_mutex)); | ||||
| } | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| #define arch_read_can_lock(x)	((x)->counter > 0) | ||||
| #define arch_write_can_lock(x)	((x)->counter == __ARCH_RW_LOCK_UNLOCKED__) | ||||
| 
 | ||||
| #define arch_read_lock_flags(lock, flags)	arch_read_lock(lock) | ||||
| #define arch_write_lock_flags(lock, flags)	arch_write_lock(lock) | ||||
| 
 | ||||
|  |  | |||
|  | @ -26,7 +26,9 @@ typedef struct { | |||
|  */ | ||||
| typedef struct { | ||||
| 	volatile unsigned int	counter; | ||||
| #ifndef CONFIG_ARC_HAS_LLSC | ||||
| 	arch_spinlock_t		lock_mutex; | ||||
| #endif | ||||
| } arch_rwlock_t; | ||||
| 
 | ||||
| #define __ARCH_RW_LOCK_UNLOCKED__	0x01000000 | ||||
|  |  | |||
|  | @ -32,20 +32,20 @@ | |||
| */ | ||||
| struct user_regs_struct { | ||||
| 
 | ||||
| 	long pad; | ||||
| 	unsigned long pad; | ||||
| 	struct { | ||||
| 		long bta, lp_start, lp_end, lp_count; | ||||
| 		long status32, ret, blink, fp, gp; | ||||
| 		long r12, r11, r10, r9, r8, r7, r6, r5, r4, r3, r2, r1, r0; | ||||
| 		long sp; | ||||
| 		unsigned long bta, lp_start, lp_end, lp_count; | ||||
| 		unsigned long status32, ret, blink, fp, gp; | ||||
| 		unsigned long r12, r11, r10, r9, r8, r7, r6, r5, r4, r3, r2, r1, r0; | ||||
| 		unsigned long sp; | ||||
| 	} scratch; | ||||
| 	long pad2; | ||||
| 	unsigned long pad2; | ||||
| 	struct { | ||||
| 		long r25, r24, r23, r22, r21, r20; | ||||
| 		long r19, r18, r17, r16, r15, r14, r13; | ||||
| 		unsigned long r25, r24, r23, r22, r21, r20; | ||||
| 		unsigned long r19, r18, r17, r16, r15, r14, r13; | ||||
| 	} callee; | ||||
| 	long efa;	/* break pt addr, for break points in delay slots */ | ||||
| 	long stop_pc;	/* give dbg stop_pc after ensuring brkpt trap */ | ||||
| 	unsigned long efa;	/* break pt addr, for break points in delay slots */ | ||||
| 	unsigned long stop_pc;	/* give dbg stop_pc after ensuring brkpt trap */ | ||||
| }; | ||||
| #endif /* !__ASSEMBLY__ */ | ||||
| 
 | ||||
|  |  | |||
|  | @ -12,7 +12,6 @@ | |||
| #include <linux/of.h> | ||||
| #include <linux/irqdomain.h> | ||||
| #include <linux/irqchip.h> | ||||
| #include "../../drivers/irqchip/irqchip.h" | ||||
| #include <asm/irq.h> | ||||
| 
 | ||||
| /*
 | ||||
|  |  | |||
|  | @ -12,7 +12,6 @@ | |||
| #include <linux/of.h> | ||||
| #include <linux/irqdomain.h> | ||||
| #include <linux/irqchip.h> | ||||
| #include "../../drivers/irqchip/irqchip.h" | ||||
| #include <asm/irq.h> | ||||
| 
 | ||||
| /*
 | ||||
|  |  | |||
|  | @ -175,7 +175,6 @@ void mcip_init_early_smp(void) | |||
| #include <linux/irqchip.h> | ||||
| #include <linux/of.h> | ||||
| #include <linux/of_irq.h> | ||||
| #include "../../drivers/irqchip/irqchip.h" | ||||
| 
 | ||||
| /*
 | ||||
|  * Set the DEST for @cmn_irq to @cpu_mask (1 bit per core) | ||||
|  | @ -218,11 +217,28 @@ static void idu_irq_unmask(struct irq_data *data) | |||
| 	raw_spin_unlock_irqrestore(&mcip_lock, flags); | ||||
| } | ||||
| 
 | ||||
| #ifdef CONFIG_SMP | ||||
| static int | ||||
| idu_irq_set_affinity(struct irq_data *d, const struct cpumask *cpumask, bool f) | ||||
| idu_irq_set_affinity(struct irq_data *data, const struct cpumask *cpumask, | ||||
| 		     bool force) | ||||
| { | ||||
| 	unsigned long flags; | ||||
| 	cpumask_t online; | ||||
| 
 | ||||
| 	/* errout if no online cpu per @cpumask */ | ||||
| 	if (!cpumask_and(&online, cpumask, cpu_online_mask)) | ||||
| 		return -EINVAL; | ||||
| 
 | ||||
| 	raw_spin_lock_irqsave(&mcip_lock, flags); | ||||
| 
 | ||||
| 	idu_set_dest(data->hwirq, cpumask_bits(&online)[0]); | ||||
| 	idu_set_mode(data->hwirq, IDU_M_TRIG_LEVEL, IDU_M_DISTRI_RR); | ||||
| 
 | ||||
| 	raw_spin_unlock_irqrestore(&mcip_lock, flags); | ||||
| 
 | ||||
| 	return IRQ_SET_MASK_OK; | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| static struct irq_chip idu_irq_chip = { | ||||
| 	.name			= "MCIP IDU Intc", | ||||
|  | @ -330,8 +346,7 @@ idu_of_init(struct device_node *intc, struct device_node *parent) | |||
| 		if (!i) | ||||
| 			idu_first_irq = irq; | ||||
| 
 | ||||
| 		irq_set_handler_data(irq, domain); | ||||
| 		irq_set_chained_handler(irq, idu_cascade_isr); | ||||
| 		irq_set_chained_handler_and_data(irq, idu_cascade_isr, domain); | ||||
| 	} | ||||
| 
 | ||||
| 	__mcip_cmd(CMD_IDU_ENABLE, 0); | ||||
|  |  | |||
|  | @ -47,6 +47,7 @@ static void read_arc_build_cfg_regs(void) | |||
| 	struct bcr_perip uncached_space; | ||||
| 	struct bcr_generic bcr; | ||||
| 	struct cpuinfo_arc *cpu = &cpuinfo_arc700[smp_processor_id()]; | ||||
| 	unsigned long perip_space; | ||||
| 	FIX_PTR(cpu); | ||||
| 
 | ||||
| 	READ_BCR(AUX_IDENTITY, cpu->core); | ||||
|  | @ -56,7 +57,12 @@ static void read_arc_build_cfg_regs(void) | |||
| 	cpu->vec_base = read_aux_reg(AUX_INTR_VEC_BASE); | ||||
| 
 | ||||
| 	READ_BCR(ARC_REG_D_UNCACH_BCR, uncached_space); | ||||
| 	BUG_ON((uncached_space.start << 24) != ARC_UNCACHED_ADDR_SPACE); | ||||
|         if (uncached_space.ver < 3) | ||||
| 		perip_space = uncached_space.start << 24; | ||||
| 	else | ||||
| 		perip_space = read_aux_reg(AUX_NON_VOL) & 0xF0000000; | ||||
| 
 | ||||
| 	BUG_ON(perip_space != ARC_UNCACHED_ADDR_SPACE); | ||||
| 
 | ||||
| 	READ_BCR(ARC_REG_MUL_BCR, cpu->extn_mpy); | ||||
| 
 | ||||
|  | @ -142,17 +148,22 @@ static void read_arc_build_cfg_regs(void) | |||
| } | ||||
| 
 | ||||
| static const struct cpuinfo_data arc_cpu_tbl[] = { | ||||
| #ifdef CONFIG_ISA_ARCOMPACT | ||||
| 	{ {0x20, "ARC 600"      }, 0x2F}, | ||||
| 	{ {0x30, "ARC 700"      }, 0x33}, | ||||
| 	{ {0x34, "ARC 700 R4.10"}, 0x34}, | ||||
| 	{ {0x35, "ARC 700 R4.11"}, 0x35}, | ||||
| 	{ {0x50, "ARC HS38"	}, 0x51}, | ||||
| #else | ||||
| 	{ {0x50, "ARC HS38 R2.0"}, 0x51}, | ||||
| 	{ {0x52, "ARC HS38 R2.1"}, 0x52}, | ||||
| #endif | ||||
| 	{ {0x00, NULL		} } | ||||
| }; | ||||
| 
 | ||||
| #define IS_AVAIL1(v, str)	((v) ? str : "") | ||||
| #define IS_USED(cfg)		(IS_ENABLED(cfg) ? "" : "(not used) ") | ||||
| #define IS_AVAIL2(v, str, cfg)  IS_AVAIL1(v, str), IS_AVAIL1(v, IS_USED(cfg)) | ||||
| #define IS_AVAIL1(v, s)		((v) ? s : "") | ||||
| #define IS_USED_RUN(v)		((v) ? "" : "(not used) ") | ||||
| #define IS_USED_CFG(cfg)	IS_USED_RUN(IS_ENABLED(cfg)) | ||||
| #define IS_AVAIL2(v, s, cfg)	IS_AVAIL1(v, s), IS_AVAIL1(v, IS_USED_CFG(cfg)) | ||||
| 
 | ||||
| static char *arc_cpu_mumbojumbo(int cpu_id, char *buf, int len) | ||||
| { | ||||
|  | @ -226,7 +237,7 @@ static char *arc_cpu_mumbojumbo(int cpu_id, char *buf, int len) | |||
| 			n += scnprintf(buf + n, len - n, "mpy[opt %d] ", opt); | ||||
| 		} | ||||
| 		n += scnprintf(buf + n, len - n, "%s", | ||||
| 			       IS_USED(CONFIG_ARC_HAS_HW_MPY)); | ||||
| 			       IS_USED_CFG(CONFIG_ARC_HAS_HW_MPY)); | ||||
| 	} | ||||
| 
 | ||||
| 	n += scnprintf(buf + n, len - n, "%s%s%s%s%s%s%s%s\n", | ||||
|  | @ -325,6 +336,10 @@ static void arc_chk_core_config(void) | |||
| 		pr_warn("CONFIG_ARC_FPU_SAVE_RESTORE needed for working apps\n"); | ||||
| 	else if (!cpu->extn.fpu_dp && fpu_enabled) | ||||
| 		panic("FPU non-existent, disable CONFIG_ARC_FPU_SAVE_RESTORE\n"); | ||||
| 
 | ||||
| 	if (is_isa_arcv2() && IS_ENABLED(CONFIG_SMP) && cpu->isa.atomic && | ||||
| 	    !IS_ENABLED(CONFIG_ARC_STAR_9000923308)) | ||||
| 		panic("llock/scond livelock workaround missing\n"); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  |  | |||
|  | @ -203,34 +203,24 @@ static int arc_clkevent_set_next_event(unsigned long delta, | |||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static void arc_clkevent_set_mode(enum clock_event_mode mode, | ||||
| 				  struct clock_event_device *dev) | ||||
| static int arc_clkevent_set_periodic(struct clock_event_device *dev) | ||||
| { | ||||
| 	switch (mode) { | ||||
| 	case CLOCK_EVT_MODE_PERIODIC: | ||||
|                 /*
 | ||||
|                  * At X Hz, 1 sec = 1000ms -> X cycles; | ||||
|                  *                    10ms -> X / 100 cycles | ||||
|                  */ | ||||
| 		arc_timer_event_setup(arc_get_core_freq() / HZ); | ||||
| 		break; | ||||
| 	case CLOCK_EVT_MODE_ONESHOT: | ||||
| 		break; | ||||
| 	default: | ||||
| 		break; | ||||
| 	} | ||||
| 
 | ||||
| 	return; | ||||
| 	/*
 | ||||
| 	 * At X Hz, 1 sec = 1000ms -> X cycles; | ||||
| 	 *		      10ms -> X / 100 cycles | ||||
| 	 */ | ||||
| 	arc_timer_event_setup(arc_get_core_freq() / HZ); | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static DEFINE_PER_CPU(struct clock_event_device, arc_clockevent_device) = { | ||||
| 	.name		= "ARC Timer0", | ||||
| 	.features	= CLOCK_EVT_FEAT_ONESHOT | CLOCK_EVT_FEAT_PERIODIC, | ||||
| 	.mode		= CLOCK_EVT_MODE_UNUSED, | ||||
| 	.rating		= 300, | ||||
| 	.irq		= TIMER0_IRQ,	/* hardwired, no need for resources */ | ||||
| 	.set_next_event = arc_clkevent_set_next_event, | ||||
| 	.set_mode	= arc_clkevent_set_mode, | ||||
| 	.name			= "ARC Timer0", | ||||
| 	.features		= CLOCK_EVT_FEAT_ONESHOT | | ||||
| 				  CLOCK_EVT_FEAT_PERIODIC, | ||||
| 	.rating			= 300, | ||||
| 	.irq			= TIMER0_IRQ,	/* hardwired, no need for resources */ | ||||
| 	.set_next_event		= arc_clkevent_set_next_event, | ||||
| 	.set_state_periodic	= arc_clkevent_set_periodic, | ||||
| }; | ||||
| 
 | ||||
| static irqreturn_t timer_irq_handler(int irq, void *dev_id) | ||||
|  | @ -240,7 +230,7 @@ static irqreturn_t timer_irq_handler(int irq, void *dev_id) | |||
| 	 * irq_set_chip_and_handler() asked for handle_percpu_devid_irq() | ||||
| 	 */ | ||||
| 	struct clock_event_device *evt = this_cpu_ptr(&arc_clockevent_device); | ||||
| 	int irq_reenable = evt->mode == CLOCK_EVT_MODE_PERIODIC; | ||||
| 	int irq_reenable = clockevent_state_periodic(evt); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Any write to CTRL reg ACks the interrupt, we rewrite the | ||||
|  |  | |||
|  | @ -58,7 +58,6 @@ static void show_callee_regs(struct callee_regs *cregs) | |||
| 
 | ||||
| static void print_task_path_n_nm(struct task_struct *tsk, char *buf) | ||||
| { | ||||
| 	struct path path; | ||||
| 	char *path_nm = NULL; | ||||
| 	struct mm_struct *mm; | ||||
| 	struct file *exe_file; | ||||
|  |  | |||
|  | @ -206,7 +206,7 @@ unalignedOffby3: | |||
| 	ld.ab	r6, [r1, 4] | ||||
| 	prefetch [r1, 28]	;Prefetch the next read location
 | ||||
| 	ld.ab	r8, [r1,4] | ||||
| 	prefetch [r3, 32]	;Prefetch the next write location
 | ||||
| 	prefetchw [r3, 32]	;Prefetch the next write location
 | ||||
| 
 | ||||
| 	SHIFT_1	(r7, r6, 8) | ||||
| 	or	r7, r7, r5 | ||||
|  |  | |||
|  | @ -10,12 +10,6 @@ | |||
| 
 | ||||
| #undef PREALLOC_NOT_AVAIL | ||||
| 
 | ||||
| #ifdef PREALLOC_NOT_AVAIL | ||||
| #define PREWRITE(A,B)	prefetchw [(A),(B)] | ||||
| #else | ||||
| #define PREWRITE(A,B)	prealloc [(A),(B)] | ||||
| #endif | ||||
| 
 | ||||
| ENTRY(memset) | ||||
| 	prefetchw [r0]		; Prefetch the write location
 | ||||
| 	mov.f	0, r2 | ||||
|  | @ -51,9 +45,15 @@ ENTRY(memset) | |||
| 
 | ||||
| ;;; Convert len to Dwords, unfold x8
 | ||||
| 	lsr.f	lp_count, lp_count, 6 | ||||
| 
 | ||||
| 	lpnz	@.Lset64bytes
 | ||||
| 	;; LOOP START
 | ||||
| 	PREWRITE(r3, 64)	;Prefetch the next write location
 | ||||
| #ifdef PREALLOC_NOT_AVAIL | ||||
| 	prefetchw [r3, 64]	;Prefetch the next write location
 | ||||
| #else | ||||
| 	prealloc  [r3, 64] | ||||
| #endif | ||||
| #ifdef CONFIG_ARC_HAS_LL64 | ||||
| 	std.ab	r4, [r3, 8] | ||||
| 	std.ab	r4, [r3, 8] | ||||
| 	std.ab	r4, [r3, 8] | ||||
|  | @ -62,16 +62,45 @@ ENTRY(memset) | |||
| 	std.ab	r4, [r3, 8] | ||||
| 	std.ab	r4, [r3, 8] | ||||
| 	std.ab	r4, [r3, 8] | ||||
| #else | ||||
| 	st.ab	r4, [r3, 4] | ||||
| 	st.ab	r4, [r3, 4] | ||||
| 	st.ab	r4, [r3, 4] | ||||
| 	st.ab	r4, [r3, 4] | ||||
| 	st.ab	r4, [r3, 4] | ||||
| 	st.ab	r4, [r3, 4] | ||||
| 	st.ab	r4, [r3, 4] | ||||
| 	st.ab	r4, [r3, 4] | ||||
| 	st.ab	r4, [r3, 4] | ||||
| 	st.ab	r4, [r3, 4] | ||||
| 	st.ab	r4, [r3, 4] | ||||
| 	st.ab	r4, [r3, 4] | ||||
| 	st.ab	r4, [r3, 4] | ||||
| 	st.ab	r4, [r3, 4] | ||||
| 	st.ab	r4, [r3, 4] | ||||
| 	st.ab	r4, [r3, 4] | ||||
| #endif | ||||
| .Lset64bytes: | ||||
| 
 | ||||
| 	lsr.f	lp_count, r2, 5 ;Last remaining  max 124 bytes
 | ||||
| 	lpnz	.Lset32bytes | ||||
| 	;; LOOP START
 | ||||
| 	prefetchw   [r3, 32]	;Prefetch the next write location
 | ||||
| #ifdef CONFIG_ARC_HAS_LL64 | ||||
| 	std.ab	r4, [r3, 8] | ||||
| 	std.ab	r4, [r3, 8] | ||||
| 	std.ab	r4, [r3, 8] | ||||
| 	std.ab	r4, [r3, 8] | ||||
| #else | ||||
| 	st.ab	r4, [r3, 4] | ||||
| 	st.ab	r4, [r3, 4] | ||||
| 	st.ab	r4, [r3, 4] | ||||
| 	st.ab	r4, [r3, 4] | ||||
| 	st.ab	r4, [r3, 4] | ||||
| 	st.ab	r4, [r3, 4] | ||||
| 	st.ab	r4, [r3, 4] | ||||
| 	st.ab	r4, [r3, 4] | ||||
| #endif | ||||
| .Lset32bytes: | ||||
| 
 | ||||
| 	and.f	lp_count, r2, 0x1F ;Last remaining 31 bytes
 | ||||
|  |  | |||
|  | @ -468,10 +468,18 @@ static void __ic_line_inv_vaddr(unsigned long paddr, unsigned long vaddr, | |||
| noinline void slc_op(unsigned long paddr, unsigned long sz, const int op) | ||||
| { | ||||
| #ifdef CONFIG_ISA_ARCV2 | ||||
| 	/*
 | ||||
| 	 * SLC is shared between all cores and concurrent aux operations from | ||||
| 	 * multiple cores need to be serialized using a spinlock | ||||
| 	 * A concurrent operation can be silently ignored and/or the old/new | ||||
| 	 * operation can remain incomplete forever (lockup in SLC_CTRL_BUSY loop | ||||
| 	 * below) | ||||
| 	 */ | ||||
| 	static DEFINE_SPINLOCK(lock); | ||||
| 	unsigned long flags; | ||||
| 	unsigned int ctrl; | ||||
| 
 | ||||
| 	local_irq_save(flags); | ||||
| 	spin_lock_irqsave(&lock, flags); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * The Region Flush operation is specified by CTRL.RGN_OP[11..9] | ||||
|  | @ -504,7 +512,7 @@ noinline void slc_op(unsigned long paddr, unsigned long sz, const int op) | |||
| 
 | ||||
| 	while (read_aux_reg(ARC_REG_SLC_CTRL) & SLC_CTRL_BUSY); | ||||
| 
 | ||||
| 	local_irq_restore(flags); | ||||
| 	spin_unlock_irqrestore(&lock, flags); | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -60,8 +60,8 @@ void *dma_alloc_coherent(struct device *dev, size_t size, | |||
| 
 | ||||
| 	/* This is kernel Virtual address (0x7000_0000 based) */ | ||||
| 	kvaddr = ioremap_nocache((unsigned long)paddr, size); | ||||
| 	if (kvaddr != NULL) | ||||
| 		memset(kvaddr, 0, size); | ||||
| 	if (kvaddr == NULL) | ||||
| 		return NULL; | ||||
| 
 | ||||
| 	/* This is bus address, platform dependent */ | ||||
| 	*dma_handle = (dma_addr_t)paddr; | ||||
|  |  | |||
|  | @ -389,6 +389,21 @@ axs103_set_freq(unsigned int id, unsigned int fd, unsigned int od) | |||
| 
 | ||||
| static void __init axs103_early_init(void) | ||||
| { | ||||
| 	/*
 | ||||
| 	 * AXS103 configurations for SMP/QUAD configurations share device tree | ||||
| 	 * which defaults to 90 MHz. However recent failures of Quad config | ||||
| 	 * revealed P&R timing violations so clamp it down to safe 50 MHz | ||||
| 	 * Instead of duplicating defconfig/DT for SMP/QUAD, add a small hack | ||||
| 	 * | ||||
| 	 * This hack is really hacky as of now. Fix it properly by getting the | ||||
| 	 * number of cores as return value of platform's early SMP callback | ||||
| 	 */ | ||||
| #ifdef CONFIG_ARC_MCIP | ||||
| 	unsigned int num_cores = (read_aux_reg(ARC_REG_MCIP_BCR) >> 16) & 0x3F; | ||||
| 	if (num_cores > 2) | ||||
| 		arc_set_core_freq(50 * 1000000); | ||||
| #endif | ||||
| 
 | ||||
| 	switch (arc_get_core_freq()/1000000) { | ||||
| 	case 33: | ||||
| 		axs103_set_freq(1, 1, 1); | ||||
|  |  | |||
|  | @ -1693,6 +1693,12 @@ config HIGHMEM | |||
| config HIGHPTE | ||||
| 	bool "Allocate 2nd-level pagetables from highmem" | ||||
| 	depends on HIGHMEM | ||||
| 	help | ||||
| 	  The VM uses one page of physical memory for each page table. | ||||
| 	  For systems with a lot of processes, this can use a lot of | ||||
| 	  precious low memory, eventually leading to low memory being | ||||
| 	  consumed by page tables.  Setting this option will allow | ||||
| 	  user-space 2nd level page tables to reside in high memory. | ||||
| 
 | ||||
| config HW_PERF_EVENTS | ||||
| 	bool "Enable hardware performance counter support for perf events" | ||||
|  |  | |||
|  | @ -1635,7 +1635,7 @@ config PID_IN_CONTEXTIDR | |||
| 
 | ||||
| config DEBUG_SET_MODULE_RONX | ||||
| 	bool "Set loadable kernel module data as NX and text as RO" | ||||
| 	depends on MODULES | ||||
| 	depends on MODULES && MMU | ||||
| 	---help--- | ||||
| 	  This option helps catch unintended modifications to loadable | ||||
| 	  kernel module's text and read-only data. It also prevents execution | ||||
|  |  | |||
|  | @ -80,3 +80,7 @@ | |||
| 		status = "okay"; | ||||
| 	}; | ||||
| }; | ||||
| 
 | ||||
| &rtc { | ||||
| 	system-power-controller; | ||||
| }; | ||||
|  |  | |||
|  | @ -74,6 +74,7 @@ | |||
| 	audio_codec: tlv320aic3106@1b { | ||||
| 		compatible = "ti,tlv320aic3106"; | ||||
| 		reg = <0x1b>; | ||||
| 		ai3x-micbias-vg = <0x2>; | ||||
| 	}; | ||||
| 
 | ||||
| 	accel: lis331dlh@1d { | ||||
|  | @ -153,7 +154,7 @@ | |||
| 	ti,audio-routing = | ||||
| 		"Headphone Jack",	"HPLOUT", | ||||
| 		"Headphone Jack",	"HPROUT", | ||||
| 		"LINE1L",		"Line In"; | ||||
| 		"MIC3L",		"Mic3L Switch"; | ||||
| }; | ||||
| 
 | ||||
| &mcasp0 { | ||||
|  | @ -438,41 +439,50 @@ | |||
| 	regulators { | ||||
| 		dcdc1_reg: regulator@0 { | ||||
| 			/* VDD_1V8 system supply */ | ||||
| 			regulator-always-on; | ||||
| 		}; | ||||
| 
 | ||||
| 		dcdc2_reg: regulator@1 { | ||||
| 			/* VDD_CORE voltage limits 0.95V - 1.26V with +/-4% tolerance */ | ||||
| 			regulator-name = "vdd_core"; | ||||
| 			regulator-min-microvolt = <925000>; | ||||
| 			regulator-max-microvolt = <1325000>; | ||||
| 			regulator-max-microvolt = <1150000>; | ||||
| 			regulator-boot-on; | ||||
| 			regulator-always-on; | ||||
| 		}; | ||||
| 
 | ||||
| 		dcdc3_reg: regulator@2 { | ||||
| 			/* VDD_MPU voltage limits 0.95V - 1.1V with +/-4% tolerance */ | ||||
| 			regulator-name = "vdd_mpu"; | ||||
| 			regulator-min-microvolt = <925000>; | ||||
| 			regulator-max-microvolt = <1150000>; | ||||
| 			regulator-max-microvolt = <1325000>; | ||||
| 			regulator-boot-on; | ||||
| 			regulator-always-on; | ||||
| 		}; | ||||
| 
 | ||||
| 		ldo1_reg: regulator@3 { | ||||
| 			/* VRTC 1.8V always-on supply */ | ||||
| 			regulator-name = "vrtc,vdds"; | ||||
| 			regulator-always-on; | ||||
| 		}; | ||||
| 
 | ||||
| 		ldo2_reg: regulator@4 { | ||||
| 			/* 3.3V rail */ | ||||
| 			regulator-name = "vdd_3v3aux"; | ||||
| 			regulator-always-on; | ||||
| 		}; | ||||
| 
 | ||||
| 		ldo3_reg: regulator@5 { | ||||
| 			/* VDD_3V3A 3.3V rail */ | ||||
| 			regulator-name = "vdd_3v3a"; | ||||
| 			regulator-min-microvolt = <3300000>; | ||||
| 			regulator-max-microvolt = <3300000>; | ||||
| 		}; | ||||
| 
 | ||||
| 		ldo4_reg: regulator@6 { | ||||
| 			/* VDD_3V3B 3.3V rail */ | ||||
| 			regulator-name = "vdd_3v3b"; | ||||
| 			regulator-always-on; | ||||
| 		}; | ||||
| 	}; | ||||
| }; | ||||
|  |  | |||
|  | @ -132,6 +132,12 @@ | |||
| 			}; | ||||
| 		}; | ||||
| 
 | ||||
| 		emif: emif@4c000000 { | ||||
| 			compatible = "ti,emif-am4372"; | ||||
| 			reg = <0x4c000000 0x1000000>; | ||||
| 			ti,hwmods = "emif"; | ||||
| 		}; | ||||
| 
 | ||||
| 		edma: edma@49000000 { | ||||
| 			compatible = "ti,edma3"; | ||||
| 			ti,hwmods = "tpcc", "tptc0", "tptc1", "tptc2"; | ||||
|  | @ -941,6 +947,7 @@ | |||
| 				ti,hwmods = "dss_rfbi"; | ||||
| 				clocks = <&disp_clk>; | ||||
| 				clock-names = "fck"; | ||||
| 				status = "disabled"; | ||||
| 			}; | ||||
| 		}; | ||||
| 
 | ||||
|  |  | |||
|  | @ -605,6 +605,10 @@ | |||
| 	phy-supply = <&ldousb_reg>; | ||||
| }; | ||||
| 
 | ||||
| &usb2_phy2 { | ||||
| 	phy-supply = <&ldousb_reg>; | ||||
| }; | ||||
| 
 | ||||
| &usb1 { | ||||
| 	dr_mode = "host"; | ||||
| 	pinctrl-names = "default"; | ||||
|  |  | |||
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							|  | @ -22,6 +22,7 @@ | |||
| 			MATRIX_KEY(0x00, 0x02, KEY_F1) | ||||
| 			MATRIX_KEY(0x00, 0x03, KEY_B) | ||||
| 			MATRIX_KEY(0x00, 0x04, KEY_F10) | ||||
| 			MATRIX_KEY(0x00, 0x05, KEY_RO) | ||||
| 			MATRIX_KEY(0x00, 0x06, KEY_N) | ||||
| 			MATRIX_KEY(0x00, 0x08, KEY_EQUAL) | ||||
| 			MATRIX_KEY(0x00, 0x0a, KEY_RIGHTALT) | ||||
|  | @ -34,6 +35,7 @@ | |||
| 			MATRIX_KEY(0x01, 0x08, KEY_APOSTROPHE) | ||||
| 			MATRIX_KEY(0x01, 0x09, KEY_F9) | ||||
| 			MATRIX_KEY(0x01, 0x0b, KEY_BACKSPACE) | ||||
| 			MATRIX_KEY(0x01, 0x0c, KEY_HENKAN) | ||||
| 
 | ||||
| 			MATRIX_KEY(0x02, 0x00, KEY_LEFTCTRL) | ||||
| 			MATRIX_KEY(0x02, 0x01, KEY_TAB) | ||||
|  | @ -45,6 +47,7 @@ | |||
| 			MATRIX_KEY(0x02, 0x07, KEY_102ND) | ||||
| 			MATRIX_KEY(0x02, 0x08, KEY_LEFTBRACE) | ||||
| 			MATRIX_KEY(0x02, 0x09, KEY_F8) | ||||
| 			MATRIX_KEY(0x02, 0x0a, KEY_YEN) | ||||
| 
 | ||||
| 			MATRIX_KEY(0x03, 0x01, KEY_GRAVE) | ||||
| 			MATRIX_KEY(0x03, 0x02, KEY_F2) | ||||
|  | @ -53,6 +56,7 @@ | |||
| 			MATRIX_KEY(0x03, 0x06, KEY_6) | ||||
| 			MATRIX_KEY(0x03, 0x08, KEY_MINUS) | ||||
| 			MATRIX_KEY(0x03, 0x0b, KEY_BACKSLASH) | ||||
| 			MATRIX_KEY(0x03, 0x0c, KEY_MUHENKAN) | ||||
| 
 | ||||
| 			MATRIX_KEY(0x04, 0x00, KEY_RIGHTCTRL) | ||||
| 			MATRIX_KEY(0x04, 0x01, KEY_A) | ||||
|  |  | |||
|  | @ -686,7 +686,8 @@ | |||
| 
 | ||||
| &dcan1 { | ||||
| 	status = "ok"; | ||||
| 	pinctrl-names = "default", "sleep"; | ||||
| 	pinctrl-0 = <&dcan1_pins_default>; | ||||
| 	pinctrl-names = "default", "sleep", "active"; | ||||
| 	pinctrl-0 = <&dcan1_pins_sleep>; | ||||
| 	pinctrl-1 = <&dcan1_pins_sleep>; | ||||
| 	pinctrl-2 = <&dcan1_pins_default>; | ||||
| }; | ||||
|  |  | |||
|  | @ -116,7 +116,7 @@ | |||
| 				ranges = <0 0x2000 0x2000>; | ||||
| 
 | ||||
| 				scm_conf: scm_conf@0 { | ||||
| 					compatible = "syscon"; | ||||
| 					compatible = "syscon", "simple-bus"; | ||||
| 					reg = <0x0 0x1400>; | ||||
| 					#address-cells = <1>; | ||||
| 					#size-cells = <1>; | ||||
|  | @ -1140,6 +1140,7 @@ | |||
| 				ctrl-module = <&omap_control_sata>; | ||||
| 				clocks = <&sys_clkin1>, <&sata_ref_clk>; | ||||
| 				clock-names = "sysclk", "refclk"; | ||||
| 				syscon-pllreset = <&scm_conf 0x3fc>; | ||||
| 				#phy-cells = <0>; | ||||
| 			}; | ||||
| 
 | ||||
|  |  | |||
|  | @ -587,9 +587,10 @@ | |||
| 
 | ||||
| &dcan1 { | ||||
| 	status = "ok"; | ||||
| 	pinctrl-names = "default", "sleep"; | ||||
| 	pinctrl-0 = <&dcan1_pins_default>; | ||||
| 	pinctrl-names = "default", "sleep", "active"; | ||||
| 	pinctrl-0 = <&dcan1_pins_sleep>; | ||||
| 	pinctrl-1 = <&dcan1_pins_sleep>; | ||||
| 	pinctrl-2 = <&dcan1_pins_default>; | ||||
| }; | ||||
| 
 | ||||
| &qspi { | ||||
|  |  | |||
|  | @ -138,8 +138,8 @@ | |||
| 
 | ||||
| 		mipi_phy: video-phy@10020710 { | ||||
| 			compatible = "samsung,s5pv210-mipi-video-phy"; | ||||
| 			reg = <0x10020710 8>; | ||||
| 			#phy-cells = <1>; | ||||
| 			syscon = <&pmu_system_controller>; | ||||
| 		}; | ||||
| 
 | ||||
| 		pd_cam: cam-power-domain@10023C00 { | ||||
|  |  | |||
|  | @ -127,6 +127,10 @@ | |||
| 	}; | ||||
| }; | ||||
| 
 | ||||
| &cpu0 { | ||||
| 	cpu0-supply = <&buck1_reg>; | ||||
| }; | ||||
| 
 | ||||
| &fimd { | ||||
| 	pinctrl-0 = <&lcd_en &lcd_clk &lcd_data24 &pwm0_out>; | ||||
| 	pinctrl-names = "default"; | ||||
|  |  | |||
|  | @ -188,6 +188,10 @@ | |||
| 	}; | ||||
| }; | ||||
| 
 | ||||
| &cpu0 { | ||||
| 	cpu0-supply = <&varm_breg>; | ||||
| }; | ||||
| 
 | ||||
| &dsi_0 { | ||||
| 	vddcore-supply = <&vusb_reg>; | ||||
| 	vddio-supply = <&vmipi_reg>; | ||||
|  |  | |||
|  | @ -548,6 +548,10 @@ | |||
| 	}; | ||||
| }; | ||||
| 
 | ||||
| &cpu0 { | ||||
| 	cpu0-supply = <&vdd_arm_reg>; | ||||
| }; | ||||
| 
 | ||||
| &pinctrl_1 { | ||||
| 	hdmi_hpd: hdmi-hpd { | ||||
| 		samsung,pins = "gpx3-7"; | ||||
|  |  | |||
|  | @ -40,6 +40,18 @@ | |||
| 			device_type = "cpu"; | ||||
| 			compatible = "arm,cortex-a9"; | ||||
| 			reg = <0x900>; | ||||
| 			clocks = <&clock CLK_ARM_CLK>; | ||||
| 			clock-names = "cpu"; | ||||
| 			clock-latency = <160000>; | ||||
| 
 | ||||
| 			operating-points = < | ||||
| 				1200000 1250000 | ||||
| 				1000000 1150000 | ||||
| 				800000	1075000 | ||||
| 				500000	975000 | ||||
| 				400000	975000 | ||||
| 				200000	950000 | ||||
| 			>; | ||||
| 			cooling-min-level = <4>; | ||||
| 			cooling-max-level = <2>; | ||||
| 			#cooling-cells = <2>; /* min followed by max */ | ||||
|  |  | |||
|  | @ -468,6 +468,7 @@ | |||
| 				interrupts = <36 37 38 39 40 41 42 43 44>; | ||||
| 				status = "disabled"; | ||||
| 				clocks = <&clks 26>; | ||||
| 				#io-channel-cells = <1>; | ||||
| 			}; | ||||
| 
 | ||||
| 			spdif@80054000 { | ||||
|  |  | |||
|  | @ -10,6 +10,7 @@ | |||
|  */ | ||||
| 
 | ||||
| /dts-v1/; | ||||
| #include <dt-bindings/gpio/gpio.h> | ||||
| #include <dt-bindings/input/input.h> | ||||
| #include "imx25.dtsi" | ||||
| 
 | ||||
|  | @ -114,8 +115,8 @@ | |||
| &esdhc1 { | ||||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&pinctrl_esdhc1>; | ||||
| 	cd-gpios = <&gpio2 1 0>; | ||||
| 	wp-gpios = <&gpio2 0 0>; | ||||
| 	cd-gpios = <&gpio2 1 GPIO_ACTIVE_LOW>; | ||||
| 	wp-gpios = <&gpio2 0 GPIO_ACTIVE_HIGH>; | ||||
| 	status = "okay"; | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -108,7 +108,7 @@ | |||
| 			}; | ||||
| 
 | ||||
| 			gpt1: timer@10003000 { | ||||
| 				compatible = "fsl,imx27-gpt", "fsl,imx1-gpt"; | ||||
| 				compatible = "fsl,imx27-gpt", "fsl,imx21-gpt"; | ||||
| 				reg = <0x10003000 0x1000>; | ||||
| 				interrupts = <26>; | ||||
| 				clocks = <&clks IMX27_CLK_GPT1_IPG_GATE>, | ||||
|  | @ -117,7 +117,7 @@ | |||
| 			}; | ||||
| 
 | ||||
| 			gpt2: timer@10004000 { | ||||
| 				compatible = "fsl,imx27-gpt", "fsl,imx1-gpt"; | ||||
| 				compatible = "fsl,imx27-gpt", "fsl,imx21-gpt"; | ||||
| 				reg = <0x10004000 0x1000>; | ||||
| 				interrupts = <25>; | ||||
| 				clocks = <&clks IMX27_CLK_GPT2_IPG_GATE>, | ||||
|  | @ -126,7 +126,7 @@ | |||
| 			}; | ||||
| 
 | ||||
| 			gpt3: timer@10005000 { | ||||
| 				compatible = "fsl,imx27-gpt", "fsl,imx1-gpt"; | ||||
| 				compatible = "fsl,imx27-gpt", "fsl,imx21-gpt"; | ||||
| 				reg = <0x10005000 0x1000>; | ||||
| 				interrupts = <24>; | ||||
| 				clocks = <&clks IMX27_CLK_GPT3_IPG_GATE>, | ||||
|  | @ -376,7 +376,7 @@ | |||
| 			}; | ||||
| 
 | ||||
| 			gpt4: timer@10019000 { | ||||
| 				compatible = "fsl,imx27-gpt", "fsl,imx1-gpt"; | ||||
| 				compatible = "fsl,imx27-gpt", "fsl,imx21-gpt"; | ||||
| 				reg = <0x10019000 0x1000>; | ||||
| 				interrupts = <4>; | ||||
| 				clocks = <&clks IMX27_CLK_GPT4_IPG_GATE>, | ||||
|  | @ -385,7 +385,7 @@ | |||
| 			}; | ||||
| 
 | ||||
| 			gpt5: timer@1001a000 { | ||||
| 				compatible = "fsl,imx27-gpt", "fsl,imx1-gpt"; | ||||
| 				compatible = "fsl,imx27-gpt", "fsl,imx21-gpt"; | ||||
| 				reg = <0x1001a000 0x1000>; | ||||
| 				interrupts = <3>; | ||||
| 				clocks = <&clks IMX27_CLK_GPT5_IPG_GATE>, | ||||
|  | @ -436,7 +436,7 @@ | |||
| 			}; | ||||
| 
 | ||||
| 			gpt6: timer@1001f000 { | ||||
| 				compatible = "fsl,imx27-gpt", "fsl,imx1-gpt"; | ||||
| 				compatible = "fsl,imx27-gpt", "fsl,imx21-gpt"; | ||||
| 				reg = <0x1001f000 0x1000>; | ||||
| 				interrupts = <2>; | ||||
| 				clocks = <&clks IMX27_CLK_GPT6_IPG_GATE>, | ||||
|  |  | |||
|  | @ -286,8 +286,8 @@ | |||
| 			can1: can@53fe4000 { | ||||
| 				compatible = "fsl,imx35-flexcan", "fsl,p1010-flexcan"; | ||||
| 				reg = <0x53fe4000 0x1000>; | ||||
| 				clocks = <&clks 33>; | ||||
| 				clock-names = "ipg"; | ||||
| 				clocks = <&clks 33>, <&clks 33>; | ||||
| 				clock-names = "ipg", "per"; | ||||
| 				interrupts = <43>; | ||||
| 				status = "disabled"; | ||||
| 			}; | ||||
|  | @ -295,8 +295,8 @@ | |||
| 			can2: can@53fe8000 { | ||||
| 				compatible = "fsl,imx35-flexcan", "fsl,p1010-flexcan"; | ||||
| 				reg = <0x53fe8000 0x1000>; | ||||
| 				clocks = <&clks 34>; | ||||
| 				clock-names = "ipg"; | ||||
| 				clocks = <&clks 34>, <&clks 34>; | ||||
| 				clock-names = "ipg", "per"; | ||||
| 				interrupts = <44>; | ||||
| 				status = "disabled"; | ||||
| 			}; | ||||
|  |  | |||
|  | @ -98,7 +98,7 @@ | |||
| &esdhc1 { | ||||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&pinctrl_esdhc1>; | ||||
| 	cd-gpios = <&gpio2 29 GPIO_ACTIVE_HIGH>; | ||||
| 	cd-gpios = <&gpio2 29 GPIO_ACTIVE_LOW>; | ||||
| 	bus-width = <4>; | ||||
| 	status = "okay"; | ||||
| }; | ||||
|  |  | |||
|  | @ -103,8 +103,8 @@ | |||
| &esdhc1 { | ||||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&pinctrl_esdhc1>; | ||||
| 	cd-gpios = <&gpio1 1 0>; | ||||
| 	wp-gpios = <&gpio1 9 0>; | ||||
| 	cd-gpios = <&gpio1 1 GPIO_ACTIVE_LOW>; | ||||
| 	wp-gpios = <&gpio1 9 GPIO_ACTIVE_HIGH>; | ||||
| 	status = "okay"; | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -124,8 +124,8 @@ | |||
| &esdhc1 { | ||||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&pinctrl_esdhc1>; | ||||
| 	cd-gpios = <&gpio1 1 0>; | ||||
| 	wp-gpios = <&gpio1 9 0>; | ||||
| 	cd-gpios = <&gpio1 1 GPIO_ACTIVE_LOW>; | ||||
| 	wp-gpios = <&gpio1 9 GPIO_ACTIVE_HIGH>; | ||||
| 	status = "okay"; | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -147,8 +147,8 @@ | |||
| &esdhc3 { | ||||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&pinctrl_esdhc3>; | ||||
| 	cd-gpios = <&gpio3 11 0>; | ||||
| 	wp-gpios = <&gpio3 12 0>; | ||||
| 	cd-gpios = <&gpio3 11 GPIO_ACTIVE_LOW>; | ||||
| 	wp-gpios = <&gpio3 12 GPIO_ACTIVE_HIGH>; | ||||
| 	bus-width = <8>; | ||||
| 	status = "okay"; | ||||
| }; | ||||
|  | @ -295,9 +295,10 @@ | |||
| &tve { | ||||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&pinctrl_vga_sync>; | ||||
| 	ddc-i2c-bus = <&i2c2>; | ||||
| 	fsl,tve-mode = "vga"; | ||||
| 	fsl,hsync-pin = <4>; | ||||
| 	fsl,vsync-pin = <6>; | ||||
| 	fsl,hsync-pin = <7>;	/* IPU DI1 PIN7 via EIM_OE */ | ||||
| 	fsl,vsync-pin = <8>;	/* IPU DI1 PIN8 via EIM_RW */ | ||||
| 	status = "okay"; | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -41,8 +41,8 @@ | |||
| &esdhc1 { | ||||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&pinctrl_esdhc1>; | ||||
| 	cd-gpios = <&gpio3 13 0>; | ||||
| 	wp-gpios = <&gpio4 11 0>; | ||||
| 	cd-gpios = <&gpio3 13 GPIO_ACTIVE_LOW>; | ||||
| 	wp-gpios = <&gpio4 11 GPIO_ACTIVE_HIGH>; | ||||
| 	status = "okay"; | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -41,8 +41,8 @@ | |||
| 	pinctrl-0 = <&pinctrl_esdhc2>, | ||||
| 		    <&pinctrl_esdhc2_cdwp>; | ||||
| 	vmmc-supply = <®_3p3v>; | ||||
| 	wp-gpios = <&gpio1 2 0>; | ||||
| 	cd-gpios = <&gpio1 4 0>; | ||||
| 	wp-gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>; | ||||
| 	cd-gpios = <&gpio1 4 GPIO_ACTIVE_LOW>; | ||||
| 	status = "disabled"; | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -183,7 +183,7 @@ | |||
| }; | ||||
| 
 | ||||
| &esdhc1 { | ||||
| 	cd-gpios = <&gpio3 24 GPIO_ACTIVE_HIGH>; | ||||
| 	cd-gpios = <&gpio3 24 GPIO_ACTIVE_LOW>; | ||||
| 	fsl,wp-controller; | ||||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&pinctrl_esdhc1>; | ||||
|  | @ -191,7 +191,7 @@ | |||
| }; | ||||
| 
 | ||||
| &esdhc2 { | ||||
| 	cd-gpios = <&gpio3 25 GPIO_ACTIVE_HIGH>; | ||||
| 	cd-gpios = <&gpio3 25 GPIO_ACTIVE_LOW>; | ||||
| 	fsl,wp-controller; | ||||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&pinctrl_esdhc2>; | ||||
|  |  | |||
|  | @ -119,8 +119,8 @@ | |||
| &esdhc2 { | ||||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&pinctrl_esdhc2>; | ||||
| 	cd-gpios = <&gpio3 25 0>; | ||||
| 	wp-gpios = <&gpio2 19 0>; | ||||
| 	cd-gpios = <&gpio3 25 GPIO_ACTIVE_LOW>; | ||||
| 	wp-gpios = <&gpio2 19 GPIO_ACTIVE_HIGH>; | ||||
| 	vmmc-supply = <®_3p3v>; | ||||
| 	status = "okay"; | ||||
| }; | ||||
|  |  | |||
|  | @ -305,8 +305,8 @@ | |||
| &usdhc2 { | ||||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&pinctrl_usdhc2>; | ||||
| 	cd-gpios = <&gpio1 4 0>; | ||||
| 	wp-gpios = <&gpio1 2 0>; | ||||
| 	cd-gpios = <&gpio1 4 GPIO_ACTIVE_LOW>; | ||||
| 	wp-gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>; | ||||
| 	vmmc-supply = <®_3p3v>; | ||||
| 	status = "okay"; | ||||
| }; | ||||
|  | @ -314,8 +314,8 @@ | |||
| &usdhc3 { | ||||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&pinctrl_usdhc3>; | ||||
| 	cd-gpios = <&gpio7 0 0>; | ||||
| 	wp-gpios = <&gpio7 1 0>; | ||||
| 	cd-gpios = <&gpio7 0 GPIO_ACTIVE_LOW>; | ||||
| 	wp-gpios = <&gpio7 1 GPIO_ACTIVE_HIGH>; | ||||
| 	vmmc-supply = <®_3p3v>; | ||||
| 	status = "okay"; | ||||
| }; | ||||
|  |  | |||
|  | @ -11,6 +11,7 @@ | |||
|  */ | ||||
| 
 | ||||
| /dts-v1/; | ||||
| #include <dt-bindings/gpio/gpio.h> | ||||
| #include "imx6q.dtsi" | ||||
| 
 | ||||
| / { | ||||
|  | @ -196,8 +197,8 @@ | |||
| }; | ||||
| 
 | ||||
| &usdhc3 { | ||||
| 	cd-gpios = <&gpio6 11 0>; | ||||
| 	wp-gpios = <&gpio6 14 0>; | ||||
| 	cd-gpios = <&gpio6 11 GPIO_ACTIVE_LOW>; | ||||
| 	wp-gpios = <&gpio6 14 GPIO_ACTIVE_HIGH>; | ||||
| 	vmmc-supply = <®_3p3v>; | ||||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&pinctrl_usdhc3 | ||||
|  |  | |||
|  | @ -7,6 +7,7 @@ | |||
|  */ | ||||
| 
 | ||||
| /dts-v1/; | ||||
| #include <dt-bindings/gpio/gpio.h> | ||||
| #include "imx6q.dtsi" | ||||
| 
 | ||||
| / { | ||||
|  | @ -161,7 +162,7 @@ | |||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&pinctrl_usdhc3>; | ||||
| 	bus-width = <4>; | ||||
| 	cd-gpios = <&gpio6 11 0>; | ||||
| 	cd-gpios = <&gpio6 11 GPIO_ACTIVE_LOW>; | ||||
| 	vmmc-supply = <®_3p3v>; | ||||
| 	status = "okay"; | ||||
| }; | ||||
|  |  | |||
|  | @ -251,7 +251,7 @@ | |||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&pinctrl_usdhc2>; | ||||
| 	bus-width = <4>; | ||||
| 	cd-gpios = <&gpio2 2 GPIO_ACTIVE_HIGH>; | ||||
| 	cd-gpios = <&gpio2 2 GPIO_ACTIVE_LOW>; | ||||
| 	vmmc-supply = <®_3p3v>; | ||||
| 	status = "okay"; | ||||
| }; | ||||
|  | @ -260,7 +260,7 @@ | |||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&pinctrl_usdhc3>; | ||||
| 	bus-width = <4>; | ||||
| 	cd-gpios = <&gpio2 0 GPIO_ACTIVE_HIGH>; | ||||
| 	cd-gpios = <&gpio2 0 GPIO_ACTIVE_LOW>; | ||||
| 	wp-gpios = <&gpio2 1 GPIO_ACTIVE_HIGH>; | ||||
| 	vmmc-supply = <®_3p3v>; | ||||
| 	status = "okay"; | ||||
|  |  | |||
|  | @ -173,7 +173,7 @@ | |||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&pinctrl_usdhc1>; | ||||
| 	vmmc-supply = <®_3p3v>; | ||||
| 	cd-gpios = <&gpio4 7 GPIO_ACTIVE_HIGH>; | ||||
| 	cd-gpios = <&gpio4 7 GPIO_ACTIVE_LOW>; | ||||
| 	status = "okay"; | ||||
| }; | ||||
| 
 | ||||
|  | @ -181,7 +181,7 @@ | |||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&pinctrl_usdhc2>; | ||||
| 	vmmc-supply = <®_3p3v>; | ||||
| 	cd-gpios = <&gpio4 8 GPIO_ACTIVE_HIGH>; | ||||
| 	cd-gpios = <&gpio4 8 GPIO_ACTIVE_LOW>; | ||||
| 	status = "okay"; | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -392,7 +392,7 @@ | |||
| &usdhc1 { | ||||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&pinctrl_usdhc1>; | ||||
| 	cd-gpios = <&gpio1 27 GPIO_ACTIVE_HIGH>; | ||||
| 	cd-gpios = <&gpio1 27 GPIO_ACTIVE_LOW>; | ||||
| 	no-1-8-v; | ||||
| 	status = "okay"; | ||||
| }; | ||||
|  | @ -400,7 +400,7 @@ | |||
| &usdhc2 { | ||||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&pinctrl_usdhc2>; | ||||
| 	cd-gpios = <&gpio4 5 GPIO_ACTIVE_HIGH>; | ||||
| 	cd-gpios = <&gpio4 5 GPIO_ACTIVE_LOW>; | ||||
| 	wp-gpios = <&gpio2 10 GPIO_ACTIVE_HIGH>; | ||||
| 	no-1-8-v; | ||||
| 	status = "okay"; | ||||
|  |  | |||
|  | @ -258,6 +258,6 @@ | |||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&pinctrl_cubox_i_usdhc2_aux &pinctrl_cubox_i_usdhc2>; | ||||
| 	vmmc-supply = <®_3p3v>; | ||||
| 	cd-gpios = <&gpio1 4 0>; | ||||
| 	cd-gpios = <&gpio1 4 GPIO_ACTIVE_LOW>; | ||||
| 	status = "okay"; | ||||
| }; | ||||
|  |  | |||
|  | @ -1,3 +1,5 @@ | |||
| #include <dt-bindings/gpio/gpio.h> | ||||
| 
 | ||||
| / { | ||||
| 	regulators { | ||||
| 		compatible = "simple-bus"; | ||||
|  | @ -181,7 +183,7 @@ | |||
| &usdhc2 { /* module slot */ | ||||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&pinctrl_usdhc2>; | ||||
| 	cd-gpios = <&gpio2 2 0>; | ||||
| 	cd-gpios = <&gpio2 2 GPIO_ACTIVE_LOW>; | ||||
| 	status = "okay"; | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -318,7 +318,7 @@ | |||
| &usdhc3 { | ||||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&pinctrl_usdhc3>; | ||||
| 	cd-gpios = <&gpio7 0 GPIO_ACTIVE_HIGH>; | ||||
| 	cd-gpios = <&gpio7 0 GPIO_ACTIVE_LOW>; | ||||
| 	vmmc-supply = <®_3p3v>; | ||||
| 	status = "okay"; | ||||
| }; | ||||
|  |  | |||
|  | @ -324,7 +324,7 @@ | |||
| &usdhc3 { | ||||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&pinctrl_usdhc3>; | ||||
| 	cd-gpios = <&gpio7 0 GPIO_ACTIVE_HIGH>; | ||||
| 	cd-gpios = <&gpio7 0 GPIO_ACTIVE_LOW>; | ||||
| 	vmmc-supply = <®_3p3v>; | ||||
| 	status = "okay"; | ||||
| }; | ||||
|  |  | |||
|  | @ -417,7 +417,7 @@ | |||
| &usdhc3 { | ||||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&pinctrl_usdhc3>; | ||||
| 	cd-gpios = <&gpio7 0 GPIO_ACTIVE_HIGH>; | ||||
| 	cd-gpios = <&gpio7 0 GPIO_ACTIVE_LOW>; | ||||
| 	vmmc-supply = <®_3p3v>; | ||||
| 	status = "okay"; | ||||
| }; | ||||
|  |  | |||
|  | @ -299,6 +299,6 @@ | |||
| 		&pinctrl_hummingboard_usdhc2 | ||||
| 	>; | ||||
| 	vmmc-supply = <®_3p3v>; | ||||
| 	cd-gpios = <&gpio1 4 0>; | ||||
| 	cd-gpios = <&gpio1 4 GPIO_ACTIVE_LOW>; | ||||
| 	status = "okay"; | ||||
| }; | ||||
|  |  | |||
|  | @ -453,7 +453,7 @@ | |||
| &usdhc3 { | ||||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&pinctrl_usdhc3>; | ||||
| 	cd-gpios = <&gpio7 0 0>; | ||||
| 	cd-gpios = <&gpio7 0 GPIO_ACTIVE_LOW>; | ||||
| 	vmmc-supply = <®_3p3v>; | ||||
| 	status = "okay"; | ||||
| }; | ||||
|  | @ -461,7 +461,7 @@ | |||
| &usdhc4 { | ||||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&pinctrl_usdhc4>; | ||||
| 	cd-gpios = <&gpio2 6 0>; | ||||
| 	cd-gpios = <&gpio2 6 GPIO_ACTIVE_LOW>; | ||||
| 	vmmc-supply = <®_3p3v>; | ||||
| 	status = "okay"; | ||||
| }; | ||||
|  |  | |||
|  | @ -409,8 +409,8 @@ | |||
| &usdhc2 { | ||||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&pinctrl_usdhc2>; | ||||
| 	cd-gpios = <&gpio1 4 0>; | ||||
| 	wp-gpios = <&gpio1 2 0>; | ||||
| 	cd-gpios = <&gpio1 4 GPIO_ACTIVE_LOW>; | ||||
| 	wp-gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>; | ||||
| 	status = "disabled"; | ||||
| }; | ||||
| 
 | ||||
|  | @ -418,7 +418,7 @@ | |||
|         pinctrl-names = "default"; | ||||
|         pinctrl-0 = <&pinctrl_usdhc3 | ||||
| 		     &pinctrl_usdhc3_cdwp>; | ||||
|         cd-gpios = <&gpio1 27 0>; | ||||
|         wp-gpios = <&gpio1 29 0>; | ||||
| 	cd-gpios = <&gpio1 27 GPIO_ACTIVE_LOW>; | ||||
| 	wp-gpios = <&gpio1 29 GPIO_ACTIVE_HIGH>; | ||||
|         status = "disabled"; | ||||
| }; | ||||
|  |  | |||
|  | @ -342,7 +342,7 @@ | |||
| 	pinctrl-0 = <&pinctrl_usdhc2>; | ||||
| 	bus-width = <4>; | ||||
| 	cd-gpios = <&gpio2 2 GPIO_ACTIVE_LOW>; | ||||
| 	wp-gpios = <&gpio2 3 GPIO_ACTIVE_LOW>; | ||||
| 	wp-gpios = <&gpio2 3 GPIO_ACTIVE_HIGH>; | ||||
| 	status = "okay"; | ||||
| }; | ||||
| 
 | ||||
|  | @ -351,6 +351,6 @@ | |||
| 	pinctrl-0 = <&pinctrl_usdhc3>; | ||||
| 	bus-width = <4>; | ||||
| 	cd-gpios = <&gpio2 0 GPIO_ACTIVE_LOW>; | ||||
| 	wp-gpios = <&gpio2 1 GPIO_ACTIVE_LOW>; | ||||
| 	wp-gpios = <&gpio2 1 GPIO_ACTIVE_HIGH>; | ||||
| 	status = "okay"; | ||||
| }; | ||||
|  |  | |||
|  | @ -467,8 +467,8 @@ | |||
| 	pinctrl-0 = <&pinctrl_usdhc3>; | ||||
| 	pinctrl-1 = <&pinctrl_usdhc3_100mhz>; | ||||
| 	pinctrl-2 = <&pinctrl_usdhc3_200mhz>; | ||||
| 	cd-gpios = <&gpio6 15 0>; | ||||
| 	wp-gpios = <&gpio1 13 0>; | ||||
| 	cd-gpios = <&gpio6 15 GPIO_ACTIVE_LOW>; | ||||
| 	wp-gpios = <&gpio1 13 GPIO_ACTIVE_HIGH>; | ||||
| 	status = "okay"; | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -448,8 +448,8 @@ | |||
| &usdhc3 { | ||||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&pinctrl_usdhc3>; | ||||
| 	cd-gpios = <&gpio7 0 0>; | ||||
| 	wp-gpios = <&gpio7 1 0>; | ||||
| 	cd-gpios = <&gpio7 0 GPIO_ACTIVE_LOW>; | ||||
| 	wp-gpios = <&gpio7 1 GPIO_ACTIVE_HIGH>; | ||||
| 	vmmc-supply = <®_3p3v>; | ||||
| 	status = "okay"; | ||||
| }; | ||||
|  | @ -457,7 +457,7 @@ | |||
| &usdhc4 { | ||||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&pinctrl_usdhc4>; | ||||
| 	cd-gpios = <&gpio2 6 0>; | ||||
| 	cd-gpios = <&gpio2 6 GPIO_ACTIVE_LOW>; | ||||
| 	vmmc-supply = <®_3p3v>; | ||||
| 	status = "okay"; | ||||
| }; | ||||
|  |  | |||
|  | @ -562,8 +562,8 @@ | |||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&pinctrl_usdhc2>; | ||||
| 	bus-width = <8>; | ||||
| 	cd-gpios = <&gpio2 2 0>; | ||||
| 	wp-gpios = <&gpio2 3 0>; | ||||
| 	cd-gpios = <&gpio2 2 GPIO_ACTIVE_LOW>; | ||||
| 	wp-gpios = <&gpio2 3 GPIO_ACTIVE_HIGH>; | ||||
| 	status = "okay"; | ||||
| }; | ||||
| 
 | ||||
|  | @ -571,8 +571,8 @@ | |||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&pinctrl_usdhc3>; | ||||
| 	bus-width = <8>; | ||||
| 	cd-gpios = <&gpio2 0 0>; | ||||
| 	wp-gpios = <&gpio2 1 0>; | ||||
| 	cd-gpios = <&gpio2 0 GPIO_ACTIVE_LOW>; | ||||
| 	wp-gpios = <&gpio2 1 GPIO_ACTIVE_HIGH>; | ||||
| 	status = "okay"; | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -680,7 +680,7 @@ | |||
| 	pinctrl-0 = <&pinctrl_usdhc1>; | ||||
| 	bus-width = <4>; | ||||
| 	no-1-8-v; | ||||
| 	cd-gpios = <&gpio7 2 0>; | ||||
| 	cd-gpios = <&gpio7 2 GPIO_ACTIVE_LOW>; | ||||
| 	fsl,wp-controller; | ||||
| 	status = "okay"; | ||||
| }; | ||||
|  | @ -690,7 +690,7 @@ | |||
| 	pinctrl-0 = <&pinctrl_usdhc2>; | ||||
| 	bus-width = <4>; | ||||
| 	no-1-8-v; | ||||
| 	cd-gpios = <&gpio7 3 0>; | ||||
| 	cd-gpios = <&gpio7 3 GPIO_ACTIVE_LOW>; | ||||
| 	fsl,wp-controller; | ||||
| 	status = "okay"; | ||||
| }; | ||||
|  |  | |||
Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Ingo Molnar
						Ingo Molnar