Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
				commit
				
					
						1a98c69af1
					
				
			
		
					 561 changed files with 5004 additions and 3113 deletions
				
			
		|  | @ -280,12 +280,9 @@ that is possible. | |||
| mcelog | ||||
| ------ | ||||
| 
 | ||||
| In Linux 2.6.31+ the i386 kernel needs to run the mcelog utility | ||||
| as a regular cronjob similar to the x86-64 kernel to process and log | ||||
| machine check events when CONFIG_X86_NEW_MCE is enabled. Machine check | ||||
| events are errors reported by the CPU. Processing them is strongly encouraged. | ||||
| All x86-64 kernels since 2.6.4 require the mcelog utility to | ||||
| process machine checks. | ||||
| On x86 kernels the mcelog utility is needed to process and log machine check | ||||
| events when CONFIG_X86_MCE is enabled. Machine check events are errors reported | ||||
| by the CPU. Processing them is strongly encouraged. | ||||
| 
 | ||||
| Getting updated software | ||||
| ======================== | ||||
|  |  | |||
|  | @ -708,7 +708,7 @@ hardware level details could be very different. | |||
| 
 | ||||
| <para>Systems need specialized hardware support to implement OTG, | ||||
| notably including a special <emphasis>Mini-AB</emphasis> jack | ||||
| and associated transciever to support <emphasis>Dual-Role</emphasis> | ||||
| and associated transceiver to support <emphasis>Dual-Role</emphasis> | ||||
| operation: | ||||
| they can act either as a host, using the standard | ||||
| Linux-USB host side driver stack, | ||||
|  |  | |||
|  | @ -182,7 +182,7 @@ | |||
| 	<para> | ||||
| 	Each interrupt is described by an interrupt descriptor structure | ||||
| 	irq_desc. The interrupt is referenced by an 'unsigned int' numeric | ||||
| 	value which selects the corresponding interrupt decription structure | ||||
| 	value which selects the corresponding interrupt description structure | ||||
| 	in the descriptor structures array. | ||||
| 	The descriptor structure contains status information and pointers | ||||
| 	to the interrupt flow method and the interrupt chip structure | ||||
|  | @ -470,7 +470,7 @@ if (desc->irq_data.chip->irq_eoi) | |||
|      <para> | ||||
|        To avoid copies of identical implementations of IRQ chips the | ||||
|        core provides a configurable generic interrupt chip | ||||
|        implementation. Developers should check carefuly whether the | ||||
|        implementation. Developers should check carefully whether the | ||||
|        generic chip fits their needs before implementing the same | ||||
|        functionality slightly differently themselves. | ||||
|      </para> | ||||
|  |  | |||
|  | @ -1760,7 +1760,7 @@ as it would be on UP. | |||
| </para> | ||||
| 
 | ||||
| <para> | ||||
| There is a furthur optimization possible here: remember our original | ||||
| There is a further optimization possible here: remember our original | ||||
| cache code, where there were no reference counts and the caller simply | ||||
| held the lock whenever using the object?  This is still possible: if | ||||
| you hold the lock, no one can delete the object, so you don't need to | ||||
|  |  | |||
|  | @ -677,7 +677,7 @@ and other resources, etc. | |||
| 
 | ||||
| 	<listitem> | ||||
| 	<para> | ||||
| 	ATA_QCFLAG_ACTIVE is clared from qc->flags. | ||||
| 	ATA_QCFLAG_ACTIVE is cleared from qc->flags. | ||||
| 	</para> | ||||
| 	</listitem> | ||||
| 
 | ||||
|  | @ -708,7 +708,7 @@ and other resources, etc. | |||
| 
 | ||||
| 	   <listitem> | ||||
| 	   <para> | ||||
| 	   qc->waiting is claread & completed (in that order). | ||||
| 	   qc->waiting is cleared & completed (in that order). | ||||
| 	   </para> | ||||
| 	   </listitem> | ||||
| 
 | ||||
|  | @ -1163,7 +1163,7 @@ and other resources, etc. | |||
| 
 | ||||
| 	<para> | ||||
| 	Once sense data is acquired, this type of errors can be | ||||
| 	handled similary to other SCSI errors.  Note that sense data | ||||
| 	handled similarly to other SCSI errors.  Note that sense data | ||||
| 	may indicate ATA bus error (e.g. Sense Key 04h HARDWARE ERROR | ||||
| 	&& ASC/ASCQ 47h/00h SCSI PARITY ERROR).  In such | ||||
| 	cases, the error should be considered as an ATA bus error and | ||||
|  |  | |||
|  | @ -68,7 +68,7 @@ | |||
| 		several digital tv standards. While it is called as DVB API, | ||||
| 		in fact it covers several different video standards including | ||||
| 		DVB-T, DVB-S, DVB-C and ATSC. The API is currently being updated | ||||
| 		to documment support also for DVB-S2, ISDB-T and ISDB-S.</para> | ||||
| 		to document support also for DVB-S2, ISDB-T and ISDB-S.</para> | ||||
| 	<para>The third part covers the Remote Controller API.</para> | ||||
| 	<para>The fourth part covers the Media Controller API.</para> | ||||
| 	<para>For additional information and for the latest development code, | ||||
|  |  | |||
|  | @ -91,7 +91,7 @@ | |||
| 		<listitem><para> | ||||
| 	  	[MTD Interface]</para><para> | ||||
| 		These functions provide the interface to the MTD kernel API.  | ||||
| 		They are not replacable and provide functionality | ||||
| 		They are not replaceable and provide functionality | ||||
| 		which is complete hardware independent. | ||||
| 		</para></listitem> | ||||
| 		<listitem><para> | ||||
|  | @ -100,14 +100,14 @@ | |||
| 		</para></listitem> | ||||
| 		<listitem><para> | ||||
| 	  	[GENERIC]</para><para> | ||||
| 		Generic functions are not replacable and provide functionality | ||||
| 		Generic functions are not replaceable and provide functionality | ||||
| 		which is complete hardware independent. | ||||
| 		</para></listitem> | ||||
| 		<listitem><para> | ||||
| 	  	[DEFAULT]</para><para> | ||||
| 		Default functions provide hardware related functionality which is suitable | ||||
| 		for most of the implementations. These functions can be replaced by the | ||||
| 		board driver if neccecary. Those functions are called via pointers in the | ||||
| 		board driver if necessary. Those functions are called via pointers in the | ||||
| 		NAND chip description structure. The board driver can set the functions which | ||||
| 		should be replaced by board dependent functions before calling nand_scan(). | ||||
| 		If the function pointer is NULL on entry to nand_scan() then the pointer | ||||
|  | @ -264,7 +264,7 @@ static void board_hwcontrol(struct mtd_info *mtd, int cmd) | |||
| 			is set up nand_scan() is called. This function tries to | ||||
| 			detect and identify then chip. If a chip is found all the | ||||
| 			internal data fields are initialized accordingly. | ||||
| 			The structure(s) have to be zeroed out first and then filled with the neccecary  | ||||
| 			The structure(s) have to be zeroed out first and then filled with the necessary | ||||
| 			information about the device. | ||||
| 		</para> | ||||
| 		<programlisting> | ||||
|  | @ -327,7 +327,7 @@ module_init(board_init); | |||
| 	<sect1 id="Exit_function"> | ||||
| 		<title>Exit function</title> | ||||
| 		<para> | ||||
| 			The exit function is only neccecary if the driver is | ||||
| 			The exit function is only necessary if the driver is | ||||
| 			compiled as a module. It releases all resources which | ||||
| 			are held by the chip driver and unregisters the partitions | ||||
| 			in the MTD layer. | ||||
|  | @ -494,7 +494,7 @@ static void board_select_chip (struct mtd_info *mtd, int chip) | |||
| 				in this case. See rts_from4.c and diskonchip.c for  | ||||
| 				implementation reference. In those cases we must also | ||||
| 				use bad block tables on FLASH, because the ECC layout is | ||||
| 				interferring with the bad block marker positions. | ||||
| 				interfering with the bad block marker positions. | ||||
| 				See bad block table support for details. | ||||
| 			</para> | ||||
| 		</sect2> | ||||
|  | @ -542,7 +542,7 @@ static void board_select_chip (struct mtd_info *mtd, int chip) | |||
| 		<para>	 | ||||
| 			nand_scan() calls the function nand_default_bbt().  | ||||
| 			nand_default_bbt() selects appropriate default | ||||
| 			bad block table desriptors depending on the chip information | ||||
| 			bad block table descriptors depending on the chip information | ||||
| 			which was retrieved by nand_scan(). | ||||
| 		</para> | ||||
| 		<para> | ||||
|  | @ -554,7 +554,7 @@ static void board_select_chip (struct mtd_info *mtd, int chip) | |||
| 		<sect2 id="Flash_based_tables"> | ||||
| 			<title>Flash based tables</title> | ||||
| 			<para> | ||||
| 				It may be desired or neccecary to keep a bad block table in FLASH.  | ||||
| 				It may be desired or necessary to keep a bad block table in FLASH. | ||||
| 				For AG-AND chips this is mandatory, as they have no factory marked | ||||
| 				bad blocks. They have factory marked good blocks. The marker pattern | ||||
| 				is erased when the block is erased to be reused. So in case of | ||||
|  | @ -565,10 +565,10 @@ static void board_select_chip (struct mtd_info *mtd, int chip) | |||
| 				of the blocks. | ||||
| 			</para> | ||||
| 			<para> | ||||
| 				The blocks in which the tables are stored are procteted against | ||||
| 				The blocks in which the tables are stored are protected against | ||||
| 				accidental access by marking them bad in the memory bad block | ||||
| 				table. The bad block table management functions are allowed | ||||
| 				to circumvernt this protection. | ||||
| 				to circumvent this protection. | ||||
| 			</para> | ||||
| 			<para> | ||||
| 				The simplest way to activate the FLASH based bad block table support  | ||||
|  | @ -592,7 +592,7 @@ static void board_select_chip (struct mtd_info *mtd, int chip) | |||
| 				User defined tables are created by filling out a  | ||||
| 				nand_bbt_descr structure and storing the pointer in the | ||||
| 				nand_chip structure member bbt_td before calling nand_scan().  | ||||
| 				If a mirror table is neccecary a second structure must be | ||||
| 				If a mirror table is necessary a second structure must be | ||||
| 				created and a pointer to this structure must be stored | ||||
| 				in bbt_md inside the nand_chip structure. If the bbt_md  | ||||
| 				member is set to NULL then only the main table is used | ||||
|  | @ -666,7 +666,7 @@ static void board_select_chip (struct mtd_info *mtd, int chip) | |||
| 				<para> | ||||
| 				For automatic placement some blocks must be reserved for | ||||
| 				bad block table storage. The number of reserved blocks is defined  | ||||
| 				in the maxblocks member of the babd block table description structure. | ||||
| 				in the maxblocks member of the bad block table description structure. | ||||
| 				Reserving 4 blocks for mirrored tables should be a reasonable number.  | ||||
| 				This also limits the number of blocks which are scanned for the bad | ||||
| 				block table ident pattern. | ||||
|  | @ -1068,11 +1068,11 @@ in this page</entry> | |||
|   <chapter id="filesystems"> | ||||
|      	<title>Filesystem support</title> | ||||
| 	<para> | ||||
| 		The NAND driver provides all neccecary functions for a | ||||
| 		The NAND driver provides all necessary functions for a | ||||
| 		filesystem via the MTD interface. | ||||
| 	</para> | ||||
| 	<para> | ||||
| 		Filesystems must be aware of the NAND pecularities and | ||||
| 		Filesystems must be aware of the NAND peculiarities and | ||||
| 		restrictions. One major restrictions of NAND Flash is, that you cannot  | ||||
| 		write as often as you want to a page. The consecutive writes to a page,  | ||||
| 		before erasing it again, are restricted to 1-3 writes, depending on the  | ||||
|  | @ -1222,7 +1222,7 @@ in this page</entry> | |||
| #define NAND_BBT_VERSION	0x00000100 | ||||
| /* Create a bbt if none axists */ | ||||
| #define NAND_BBT_CREATE		0x00000200 | ||||
| /* Write bbt if neccecary */ | ||||
| /* Write bbt if necessary */ | ||||
| #define NAND_BBT_WRITE		0x00001000 | ||||
| /* Read and write back block contents when writing bbt */ | ||||
| #define NAND_BBT_SAVECONTENT	0x00002000 | ||||
|  |  | |||
|  | @ -155,7 +155,7 @@ | |||
|        release regulators.  Functions are | ||||
|        provided to <link linkend='API-regulator-enable'>enable</link> | ||||
|        and <link linkend='API-regulator-disable'>disable</link> the | ||||
|        reguator and to get and set the runtime parameters of the | ||||
|        regulator and to get and set the runtime parameters of the | ||||
|        regulator. | ||||
|      </para> | ||||
|      <para> | ||||
|  |  | |||
|  | @ -766,10 +766,10 @@ framework to set up sysfs files for this region. Simply leave it alone. | |||
| 	<para> | ||||
| 	The dynamic memory regions will be allocated when the UIO device file, | ||||
| 	<varname>/dev/uioX</varname> is opened. | ||||
| 	Simiar to static memory resources, the memory region information for | ||||
| 	Similar to static memory resources, the memory region information for | ||||
| 	dynamic regions is then visible via sysfs at | ||||
| 	<varname>/sys/class/uio/uioX/maps/mapY/*</varname>. | ||||
| 	The dynmaic memory regions will be freed when the UIO device file is | ||||
| 	The dynamic memory regions will be freed when the UIO device file is | ||||
| 	closed. When no processes are holding the device file open, the address | ||||
| 	returned to userspace is ~0. | ||||
| 	</para> | ||||
|  |  | |||
|  | @ -153,7 +153,7 @@ | |||
| 
 | ||||
| 	<listitem><para>The Linux USB API supports synchronous calls for | ||||
| 	control and bulk messages. | ||||
| 	It also supports asynchnous calls for all kinds of data transfer, | ||||
| 	It also supports asynchronous calls for all kinds of data transfer, | ||||
| 	using request structures called "URBs" (USB Request Blocks). | ||||
| 	</para></listitem> | ||||
| 
 | ||||
|  |  | |||
|  | @ -5696,7 +5696,7 @@ struct _snd_pcm_runtime { | |||
| 	suspending the PCM operations via | ||||
| 	<function>snd_pcm_suspend_all()</function> or | ||||
| 	<function>snd_pcm_suspend()</function>.  It means that the PCM | ||||
| 	streams are already stoppped when the register snapshot is | ||||
| 	streams are already stopped when the register snapshot is | ||||
| 	taken.  But, remember that you don't have to restart the PCM | ||||
| 	stream in the resume callback. It'll be restarted via  | ||||
| 	trigger call with <constant>SNDRV_PCM_TRIGGER_RESUME</constant> | ||||
|  |  | |||
|  | @ -15,10 +15,13 @@ New sysfs files for controlling P state selection have been added to | |||
| /sys/devices/system/cpu/intel_pstate/ | ||||
| 
 | ||||
|       max_perf_pct: limits the maximum P state that will be requested by | ||||
|       the driver stated as a percentage of the available performance. | ||||
|       the driver stated as a percentage of the available performance. The | ||||
|       available (P states) performance may be reduced by the no_turbo | ||||
|       setting described below. | ||||
| 
 | ||||
|       min_perf_pct: limits the minimum P state that will be  requested by | ||||
|       the driver stated as a percentage of the available performance. | ||||
|       the driver stated as a percentage of the max (non-turbo) | ||||
|       performance level. | ||||
| 
 | ||||
|       no_turbo: limits the driver to selecting P states below the turbo | ||||
|       frequency range. | ||||
|  |  | |||
|  | @ -9,6 +9,18 @@ Required Properties: | |||
| - reg: physical base address of the controller and length of memory mapped | ||||
|     region. | ||||
| 
 | ||||
| Optional Properties: | ||||
| - clocks: List of clock handles. The parent clocks of the input clocks to the | ||||
| 	devices in this power domain are set to oscclk before power gating | ||||
| 	and restored back after powering on a domain. This is required for | ||||
| 	all domains which are powered on and off and not required for unused | ||||
| 	domains. | ||||
| - clock-names: The following clocks can be specified: | ||||
| 	- oscclk: Oscillator clock. | ||||
| 	- pclkN, clkN: Pairs of parent of input clock and input clock to the | ||||
| 		devices in this power domain. Maximum of 4 pairs (N = 0 to 3) | ||||
| 		are supported currently. | ||||
| 
 | ||||
| Node of a device using power domains must have a samsung,power-domain property | ||||
| defined with a phandle to respective power domain. | ||||
| 
 | ||||
|  | @ -19,6 +31,14 @@ Example: | |||
| 		reg = <0x10023C00 0x10>; | ||||
| 	}; | ||||
| 
 | ||||
| 	mfc_pd: power-domain@10044060 { | ||||
| 		compatible = "samsung,exynos4210-pd"; | ||||
| 		reg = <0x10044060 0x20>; | ||||
| 		clocks = <&clock CLK_FIN_PLL>, <&clock CLK_MOUT_SW_ACLK333>, | ||||
| 			<&clock CLK_MOUT_USER_ACLK333>; | ||||
| 		clock-names = "oscclk", "pclk0", "clk0"; | ||||
| 	}; | ||||
| 
 | ||||
| Example of the node using power domain: | ||||
| 
 | ||||
| 	node { | ||||
|  |  | |||
|  | @ -40,6 +40,9 @@ Optional properties: | |||
| - arm,filter-ranges : <start length> Starting address and length of window to | ||||
|   filter. Addresses in the filter window are directed to the M1 port. Other | ||||
|   addresses will go to the M0 port. | ||||
| - arm,io-coherent : indicates that the system is operating in an hardware | ||||
|   I/O coherent mode. Valid only when the arm,pl310-cache compatible | ||||
|   string is used. | ||||
| - interrupts : 1 combined interrupt. | ||||
| - cache-id-part: cache id part number to be used if it is not present | ||||
|   on hardware | ||||
|  |  | |||
|  | @ -4,6 +4,13 @@ Required properties: | |||
| 
 | ||||
|   - compatible: Must contain one of the following: | ||||
| 
 | ||||
|     - "renesas,scifa-sh73a0" for SH73A0 (SH-Mobile AG5) SCIFA compatible UART. | ||||
|     - "renesas,scifb-sh73a0" for SH73A0 (SH-Mobile AG5) SCIFB compatible UART. | ||||
|     - "renesas,scifa-r8a73a4" for R8A73A4 (R-Mobile APE6) SCIFA compatible UART. | ||||
|     - "renesas,scifb-r8a73a4" for R8A73A4 (R-Mobile APE6) SCIFB compatible UART. | ||||
|     - "renesas,scifa-r8a7740" for R8A7740 (R-Mobile A1) SCIFA compatible UART. | ||||
|     - "renesas,scifb-r8a7740" for R8A7740 (R-Mobile A1) SCIFB compatible UART. | ||||
|     - "renesas,scif-r8a7778" for R8A7778 (R-Car M1) SCIF compatible UART. | ||||
|     - "renesas,scif-r8a7779" for R8A7779 (R-Car H1) SCIF compatible UART. | ||||
|     - "renesas,scif-r8a7790" for R8A7790 (R-Car H2) SCIF compatible UART. | ||||
|     - "renesas,scifa-r8a7790" for R8A7790 (R-Car H2) SCIFA compatible UART. | ||||
|  |  | |||
|  | @ -23,6 +23,12 @@ Optional properties: | |||
| - spi-max-frequency: Specifies maximum SPI clock frequency, | ||||
|                      Units - Hz. Definition as per | ||||
|                      Documentation/devicetree/bindings/spi/spi-bus.txt | ||||
| - num-cs:	total number of chipselects | ||||
| - cs-gpios:	should specify GPIOs used for chipselects. | ||||
| 		The gpios will be referred to as reg = <index> in the SPI child | ||||
| 		nodes.  If unspecified, a single SPI device without a chip | ||||
| 		select can be used. | ||||
| 
 | ||||
| 
 | ||||
| SPI slave nodes must be children of the SPI master node and can contain | ||||
| properties described in Documentation/devicetree/bindings/spi/spi-bus.txt | ||||
|  |  | |||
|  | @ -1,6 +1,17 @@ | |||
| Email clients info for Linux | ||||
| ====================================================================== | ||||
| 
 | ||||
| Git | ||||
| ---------------------------------------------------------------------- | ||||
| These days most developers use `git send-email` instead of regular | ||||
| email clients.  The man page for this is quite good.  On the receiving | ||||
| end, maintainers use `git am` to apply the patches. | ||||
| 
 | ||||
| If you are new to git then send your first patch to yourself.  Save it | ||||
| as raw text including all the headers.  Run `git am raw_email.txt` and | ||||
| then review the changelog with `git log`.  When that works then send | ||||
| the patch to the appropriate mailing list(s). | ||||
| 
 | ||||
| General Preferences | ||||
| ---------------------------------------------------------------------- | ||||
| Patches for the Linux kernel are submitted via email, preferably as | ||||
|  |  | |||
|  | @ -8,8 +8,8 @@ disk-shock-protection.txt | |||
| 	- information on hard disk shock protection. | ||||
| dslm.c | ||||
| 	- Simple Disk Sleep Monitor program | ||||
| hpfall.c | ||||
| 	- (HP) laptop accelerometer program for disk protection. | ||||
| freefall.c | ||||
| 	- (HP/DELL) laptop accelerometer program for disk protection. | ||||
| laptop-mode.txt | ||||
| 	- how to conserve battery power using laptop-mode. | ||||
| sony-laptop.txt | ||||
|  |  | |||
|  | @ -1,7 +1,9 @@ | |||
| /* Disk protection for HP machines.
 | ||||
| /* Disk protection for HP/DELL machines.
 | ||||
|  * | ||||
|  * Copyright 2008 Eric Piel | ||||
|  * Copyright 2009 Pavel Machek <pavel@ucw.cz> | ||||
|  * Copyright 2012 Sonal Santan | ||||
|  * Copyright 2014 Pali Rohár <pali.rohar@gmail.com> | ||||
|  * | ||||
|  * GPLv2. | ||||
|  */ | ||||
|  | @ -18,24 +20,31 @@ | |||
| #include <signal.h> | ||||
| #include <sys/mman.h> | ||||
| #include <sched.h> | ||||
| #include <syslog.h> | ||||
| 
 | ||||
| char unload_heads_path[64]; | ||||
| static int noled; | ||||
| static char unload_heads_path[64]; | ||||
| static char device_path[32]; | ||||
| static const char app_name[] = "FREE FALL"; | ||||
| 
 | ||||
| int set_unload_heads_path(char *device) | ||||
| static int set_unload_heads_path(char *device) | ||||
| { | ||||
| 	char devname[64]; | ||||
| 
 | ||||
| 	if (strlen(device) <= 5 || strncmp(device, "/dev/", 5) != 0) | ||||
| 		return -EINVAL; | ||||
| 	strncpy(devname, device + 5, sizeof(devname)); | ||||
| 	strncpy(devname, device + 5, sizeof(devname) - 1); | ||||
| 	strncpy(device_path, device, sizeof(device_path) - 1); | ||||
| 
 | ||||
| 	snprintf(unload_heads_path, sizeof(unload_heads_path) - 1, | ||||
| 				"/sys/block/%s/device/unload_heads", devname); | ||||
| 	return 0; | ||||
| } | ||||
| int valid_disk(void) | ||||
| 
 | ||||
| static int valid_disk(void) | ||||
| { | ||||
| 	int fd = open(unload_heads_path, O_RDONLY); | ||||
| 
 | ||||
| 	if (fd < 0) { | ||||
| 		perror(unload_heads_path); | ||||
| 		return 0; | ||||
|  | @ -45,43 +54,54 @@ int valid_disk(void) | |||
| 	return 1; | ||||
| } | ||||
| 
 | ||||
| void write_int(char *path, int i) | ||||
| static void write_int(char *path, int i) | ||||
| { | ||||
| 	char buf[1024]; | ||||
| 	int fd = open(path, O_RDWR); | ||||
| 
 | ||||
| 	if (fd < 0) { | ||||
| 		perror("open"); | ||||
| 		exit(1); | ||||
| 	} | ||||
| 
 | ||||
| 	sprintf(buf, "%d", i); | ||||
| 
 | ||||
| 	if (write(fd, buf, strlen(buf)) != strlen(buf)) { | ||||
| 		perror("write"); | ||||
| 		exit(1); | ||||
| 	} | ||||
| 
 | ||||
| 	close(fd); | ||||
| } | ||||
| 
 | ||||
| void set_led(int on) | ||||
| static void set_led(int on) | ||||
| { | ||||
| 	if (noled) | ||||
| 		return; | ||||
| 	write_int("/sys/class/leds/hp::hddprotect/brightness", on); | ||||
| } | ||||
| 
 | ||||
| void protect(int seconds) | ||||
| static void protect(int seconds) | ||||
| { | ||||
| 	const char *str = (seconds == 0) ? "Unparked" : "Parked"; | ||||
| 
 | ||||
| 	write_int(unload_heads_path, seconds*1000); | ||||
| 	syslog(LOG_INFO, "%s %s disk head\n", str, device_path); | ||||
| } | ||||
| 
 | ||||
| int on_ac(void) | ||||
| static int on_ac(void) | ||||
| { | ||||
| //	/sys/class/power_supply/AC0/online
 | ||||
| 	/* /sys/class/power_supply/AC0/online */ | ||||
| 	return 1; | ||||
| } | ||||
| 
 | ||||
| int lid_open(void) | ||||
| static int lid_open(void) | ||||
| { | ||||
| //	/proc/acpi/button/lid/LID/state
 | ||||
| 	/* /proc/acpi/button/lid/LID/state */ | ||||
| 	return 1; | ||||
| } | ||||
| 
 | ||||
| void ignore_me(void) | ||||
| static void ignore_me(int signum) | ||||
| { | ||||
| 	protect(0); | ||||
| 	set_led(0); | ||||
|  | @ -90,6 +110,7 @@ void ignore_me(void) | |||
| int main(int argc, char **argv) | ||||
| { | ||||
| 	int fd, ret; | ||||
| 	struct stat st; | ||||
| 	struct sched_param param; | ||||
| 
 | ||||
| 	if (argc == 1) | ||||
|  | @ -111,7 +132,16 @@ int main(int argc, char **argv) | |||
| 		return EXIT_FAILURE; | ||||
| 	} | ||||
| 
 | ||||
| 	daemon(0, 0); | ||||
| 	if (stat("/sys/class/leds/hp::hddprotect/brightness", &st)) | ||||
| 		noled = 1; | ||||
| 
 | ||||
| 	if (daemon(0, 0) != 0) { | ||||
| 		perror("daemon"); | ||||
| 		return EXIT_FAILURE; | ||||
| 	} | ||||
| 
 | ||||
| 	openlog(app_name, LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1); | ||||
| 
 | ||||
| 	param.sched_priority = sched_get_priority_max(SCHED_FIFO); | ||||
| 	sched_setscheduler(0, SCHED_FIFO, ¶m); | ||||
| 	mlockall(MCL_CURRENT|MCL_FUTURE); | ||||
|  | @ -141,6 +171,7 @@ int main(int argc, char **argv) | |||
| 			alarm(20); | ||||
| 	} | ||||
| 
 | ||||
| 	closelog(); | ||||
| 	close(fd); | ||||
| 	return EXIT_SUCCESS; | ||||
| } | ||||
|  | @ -286,6 +286,11 @@ STAC92HD83* | |||
|   hp-inv-led	HP with broken BIOS for inverted mute LED | ||||
|   auto		BIOS setup (default) | ||||
| 
 | ||||
| STAC92HD95 | ||||
| ========== | ||||
|   hp-led	LED support for HP laptops | ||||
|   hp-bass	Bass HPF setup for HP Spectre 13 | ||||
| 
 | ||||
| STAC9872 | ||||
| ======== | ||||
|   vaio		VAIO laptop without SPDIF | ||||
|  |  | |||
|  | @ -47,7 +47,6 @@ use constant HIGH_KSWAPD_REWAKEUP		=> 21; | |||
| use constant HIGH_NR_SCANNED			=> 22; | ||||
| use constant HIGH_NR_TAKEN			=> 23; | ||||
| use constant HIGH_NR_RECLAIMED			=> 24; | ||||
| use constant HIGH_NR_CONTIG_DIRTY		=> 25; | ||||
| 
 | ||||
| my %perprocesspid; | ||||
| my %perprocess; | ||||
|  | @ -105,7 +104,7 @@ my $regex_direct_end_default = 'nr_reclaimed=([0-9]*)'; | |||
| my $regex_kswapd_wake_default = 'nid=([0-9]*) order=([0-9]*)'; | ||||
| my $regex_kswapd_sleep_default = 'nid=([0-9]*)'; | ||||
| my $regex_wakeup_kswapd_default = 'nid=([0-9]*) zid=([0-9]*) order=([0-9]*)'; | ||||
| my $regex_lru_isolate_default = 'isolate_mode=([0-9]*) order=([0-9]*) nr_requested=([0-9]*) nr_scanned=([0-9]*) nr_taken=([0-9]*) contig_taken=([0-9]*) contig_dirty=([0-9]*) contig_failed=([0-9]*)'; | ||||
| my $regex_lru_isolate_default = 'isolate_mode=([0-9]*) order=([0-9]*) nr_requested=([0-9]*) nr_scanned=([0-9]*) nr_taken=([0-9]*) file=([0-9]*)'; | ||||
| my $regex_lru_shrink_inactive_default = 'nid=([0-9]*) zid=([0-9]*) nr_scanned=([0-9]*) nr_reclaimed=([0-9]*) priority=([0-9]*) flags=([A-Z_|]*)'; | ||||
| my $regex_lru_shrink_active_default = 'lru=([A-Z_]*) nr_scanned=([0-9]*) nr_rotated=([0-9]*) priority=([0-9]*)'; | ||||
| my $regex_writepage_default = 'page=([0-9a-f]*) pfn=([0-9]*) flags=([A-Z_|]*)'; | ||||
|  | @ -200,7 +199,7 @@ $regex_lru_isolate = generate_traceevent_regex( | |||
| 			$regex_lru_isolate_default, | ||||
| 			"isolate_mode", "order", | ||||
| 			"nr_requested", "nr_scanned", "nr_taken", | ||||
| 			"contig_taken", "contig_dirty", "contig_failed"); | ||||
| 			"file"); | ||||
| $regex_lru_shrink_inactive = generate_traceevent_regex( | ||||
| 			"vmscan/mm_vmscan_lru_shrink_inactive", | ||||
| 			$regex_lru_shrink_inactive_default, | ||||
|  | @ -375,7 +374,6 @@ EVENT_PROCESS: | |||
| 			} | ||||
| 			my $isolate_mode = $1; | ||||
| 			my $nr_scanned = $4; | ||||
| 			my $nr_contig_dirty = $7; | ||||
| 
 | ||||
| 			# To closer match vmstat scanning statistics, only count isolate_both | ||||
| 			# and isolate_inactive as scanning. isolate_active is rotation | ||||
|  | @ -385,7 +383,6 @@ EVENT_PROCESS: | |||
| 			if ($isolate_mode != 2) { | ||||
| 				$perprocesspid{$process_pid}->{HIGH_NR_SCANNED} += $nr_scanned; | ||||
| 			} | ||||
| 			$perprocesspid{$process_pid}->{HIGH_NR_CONTIG_DIRTY} += $nr_contig_dirty; | ||||
| 		} elsif ($tracepoint eq "mm_vmscan_lru_shrink_inactive") { | ||||
| 			$details = $6; | ||||
| 			if ($details !~ /$regex_lru_shrink_inactive/o) { | ||||
|  | @ -539,13 +536,6 @@ sub dump_stats { | |||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		if ($stats{$process_pid}->{HIGH_NR_CONTIG_DIRTY}) { | ||||
| 			print "      "; | ||||
| 			my $count = $stats{$process_pid}->{HIGH_NR_CONTIG_DIRTY}; | ||||
| 			if ($count != 0) { | ||||
| 				print "contig-dirty=$count "; | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		print "\n"; | ||||
| 	} | ||||
|  |  | |||
							
								
								
									
										84
									
								
								MAINTAINERS
									
										
									
									
									
								
							
							
						
						
									
										84
									
								
								MAINTAINERS
									
										
									
									
									
								
							|  | @ -156,7 +156,6 @@ F:	drivers/net/hamradio/6pack.c | |||
| 
 | ||||
| 8169 10/100/1000 GIGABIT ETHERNET DRIVER | ||||
| M:	Realtek linux nic maintainers <nic_swsd@realtek.com> | ||||
| M:	Francois Romieu <romieu@fr.zoreil.com> | ||||
| L:	netdev@vger.kernel.org | ||||
| S:	Maintained | ||||
| F:	drivers/net/ethernet/realtek/r8169.c | ||||
|  | @ -943,16 +942,10 @@ L:	linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | |||
| S:	Maintained | ||||
| T:	git git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux.git | ||||
| F:	arch/arm/mach-imx/ | ||||
| F:	arch/arm/mach-mxs/ | ||||
| F:	arch/arm/boot/dts/imx* | ||||
| F:	arch/arm/configs/imx*_defconfig | ||||
| 
 | ||||
| ARM/FREESCALE MXS ARM ARCHITECTURE | ||||
| M:	Shawn Guo <shawn.guo@linaro.org> | ||||
| L:	linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | ||||
| S:	Maintained | ||||
| T:	git git://git.linaro.org/people/shawnguo/linux-2.6.git | ||||
| F:	arch/arm/mach-mxs/ | ||||
| 
 | ||||
| ARM/GLOMATION GESBC9312SX MACHINE SUPPORT | ||||
| M:	Lennert Buytenhek <kernel@wantstofly.org> | ||||
| L:	linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | ||||
|  | @ -1052,9 +1045,33 @@ M:	Santosh Shilimkar <santosh.shilimkar@ti.com> | |||
| L:	linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | ||||
| S:	Maintained | ||||
| F:	arch/arm/mach-keystone/ | ||||
| F:	drivers/clk/keystone/ | ||||
| T:	git git://git.kernel.org/pub/scm/linux/kernel/git/ssantosh/linux-keystone.git | ||||
| 
 | ||||
| ARM/TEXAS INSTRUMENT KEYSTONE CLOCK FRAMEWORK | ||||
| M:	Santosh Shilimkar <santosh.shilimkar@ti.com> | ||||
| L:	linux-kernel@vger.kernel.org | ||||
| S:	Maintained | ||||
| F:	drivers/clk/keystone/ | ||||
| 
 | ||||
| ARM/TEXAS INSTRUMENT KEYSTONE ClOCKSOURCE | ||||
| M:	Santosh Shilimkar <santosh.shilimkar@ti.com> | ||||
| L:	linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | ||||
| L:	linux-kernel@vger.kernel.org | ||||
| S:	Maintained | ||||
| F:	drivers/clocksource/timer-keystone.c | ||||
| 
 | ||||
| ARM/TEXAS INSTRUMENT KEYSTONE RESET DRIVER | ||||
| M:	Santosh Shilimkar <santosh.shilimkar@ti.com> | ||||
| L:	linux-kernel@vger.kernel.org | ||||
| S:	Maintained | ||||
| F:	drivers/power/reset/keystone-reset.c | ||||
| 
 | ||||
| ARM/TEXAS INSTRUMENT AEMIF/EMIF DRIVERS | ||||
| M:	Santosh Shilimkar <santosh.shilimkar@ti.com> | ||||
| L:	linux-kernel@vger.kernel.org | ||||
| S:	Maintained | ||||
| F:	drivers/memory/*emif* | ||||
| 
 | ||||
| ARM/LOGICPD PXA270 MACHINE SUPPORT | ||||
| M:	Lennert Buytenhek <kernel@wantstofly.org> | ||||
| L:	linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | ||||
|  | @ -1296,6 +1313,20 @@ W:	http://oss.renesas.com | |||
| Q:	http://patchwork.kernel.org/project/linux-sh/list/ | ||||
| T:	git git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas.git next | ||||
| S:	Supported | ||||
| F:	arch/arm/boot/dts/emev2* | ||||
| F:	arch/arm/boot/dts/r7s* | ||||
| F:	arch/arm/boot/dts/r8a* | ||||
| F:	arch/arm/boot/dts/sh* | ||||
| F:	arch/arm/configs/ape6evm_defconfig | ||||
| F:	arch/arm/configs/armadillo800eva_defconfig | ||||
| F:	arch/arm/configs/bockw_defconfig | ||||
| F:	arch/arm/configs/genmai_defconfig | ||||
| F:	arch/arm/configs/koelsch_defconfig | ||||
| F:	arch/arm/configs/kzm9g_defconfig | ||||
| F:	arch/arm/configs/lager_defconfig | ||||
| F:	arch/arm/configs/mackerel_defconfig | ||||
| F:	arch/arm/configs/marzen_defconfig | ||||
| F:	arch/arm/configs/shmobile_defconfig | ||||
| F:	arch/arm/mach-shmobile/ | ||||
| F:	drivers/sh/ | ||||
| 
 | ||||
|  | @ -2918,6 +2949,9 @@ L:	linux-doc@vger.kernel.org | |||
| T:	quilt http://www.infradead.org/~rdunlap/Doc/patches/ | ||||
| S:	Maintained | ||||
| F:	Documentation/ | ||||
| X:	Documentation/ABI/ | ||||
| X:	Documentation/devicetree/ | ||||
| X:	Documentation/[a-z][a-z]_[A-Z][A-Z]/ | ||||
| 
 | ||||
| DOUBLETALK DRIVER | ||||
| M:	"James R. Van Zandt" <jrv@vanzandt.mv.com> | ||||
|  | @ -4477,8 +4511,7 @@ S:	Supported | |||
| F:	drivers/idle/i7300_idle.c | ||||
| 
 | ||||
| IEEE 802.15.4 SUBSYSTEM | ||||
| M:	Alexander Smirnov <alex.bluesman.smirnov@gmail.com> | ||||
| M:	Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> | ||||
| M:	Alexander Aring <alex.aring@gmail.com> | ||||
| L:	linux-zigbee-devel@lists.sourceforge.net (moderated for non-subscribers) | ||||
| W:	http://apps.sourceforge.net/trac/linux-zigbee | ||||
| T:	git git://git.kernel.org/pub/scm/linux/kernel/git/lowpan/lowpan.git | ||||
|  | @ -5510,10 +5543,11 @@ S:	Maintained | |||
| F:	arch/arm/mach-lpc32xx/ | ||||
| 
 | ||||
| LSILOGIC MPT FUSION DRIVERS (FC/SAS/SPI) | ||||
| M:	Nagalakshmi Nandigama <Nagalakshmi.Nandigama@lsi.com> | ||||
| M:	Sreekanth Reddy <Sreekanth.Reddy@lsi.com> | ||||
| M:	support@lsi.com | ||||
| L:	DL-MPTFusionLinux@lsi.com | ||||
| M:	Nagalakshmi Nandigama <nagalakshmi.nandigama@avagotech.com> | ||||
| M:	Praveen Krishnamoorthy <praveen.krishnamoorthy@avagotech.com> | ||||
| M:	Sreekanth Reddy <sreekanth.reddy@avagotech.com> | ||||
| M:	Abhijit Mahajan <abhijit.mahajan@avagotech.com> | ||||
| L:	MPT-FusionLinux.pdl@avagotech.com | ||||
| L:	linux-scsi@vger.kernel.org | ||||
| W:	http://www.lsilogic.com/support | ||||
| S:	Supported | ||||
|  | @ -6756,7 +6790,7 @@ F:	arch/x86/kernel/quirks.c | |||
| 
 | ||||
| PCI DRIVER FOR IMX6 | ||||
| M:	Richard Zhu <r65037@freescale.com> | ||||
| M:	Shawn Guo <shawn.guo@linaro.org> | ||||
| M:	Shawn Guo <shawn.guo@freescale.com> | ||||
| L:	linux-pci@vger.kernel.org | ||||
| L:	linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | ||||
| S:	Maintained | ||||
|  | @ -8953,7 +8987,7 @@ F:	drivers/media/radio/radio-raremono.c | |||
| 
 | ||||
| THERMAL | ||||
| M:	Zhang Rui <rui.zhang@intel.com> | ||||
| M:	Eduardo Valentin <eduardo.valentin@ti.com> | ||||
| M:	Eduardo Valentin <edubezval@gmail.com> | ||||
| L:	linux-pm@vger.kernel.org | ||||
| T:	git git://git.kernel.org/pub/scm/linux/kernel/git/rzhang/linux.git | ||||
| T:	git git://git.kernel.org/pub/scm/linux/kernel/git/evalenti/linux-soc-thermal.git | ||||
|  | @ -8980,7 +9014,7 @@ S:	Maintained | |||
| F:	drivers/platform/x86/thinkpad_acpi.c | ||||
| 
 | ||||
| TI BANDGAP AND THERMAL DRIVER | ||||
| M:	Eduardo Valentin <eduardo.valentin@ti.com> | ||||
| M:	Eduardo Valentin <edubezval@gmail.com> | ||||
| L:	linux-pm@vger.kernel.org | ||||
| S:	Supported | ||||
| F:	drivers/thermal/ti-soc-thermal/ | ||||
|  | @ -9394,12 +9428,6 @@ S:	Maintained | |||
| F:	drivers/usb/host/isp116x* | ||||
| F:	include/linux/usb/isp116x.h | ||||
| 
 | ||||
| USB KAWASAKI LSI DRIVER | ||||
| M:	Oliver Neukum <oliver@neukum.org> | ||||
| L:	linux-usb@vger.kernel.org | ||||
| S:	Maintained | ||||
| F:	drivers/usb/serial/kl5kusb105.* | ||||
| 
 | ||||
| USB MASS STORAGE DRIVER | ||||
| M:	Matthew Dharm <mdharm-usb@one-eyed-alien.net> | ||||
| L:	linux-usb@vger.kernel.org | ||||
|  | @ -9427,12 +9455,6 @@ S:	Maintained | |||
| F:	Documentation/usb/ohci.txt | ||||
| F:	drivers/usb/host/ohci* | ||||
| 
 | ||||
| USB OPTION-CARD DRIVER | ||||
| M:	Matthias Urlichs <smurf@smurf.noris.de> | ||||
| L:	linux-usb@vger.kernel.org | ||||
| S:	Maintained | ||||
| F:	drivers/usb/serial/option.c | ||||
| 
 | ||||
| USB PEGASUS DRIVER | ||||
| M:	Petko Manolov <petkan@nucleusys.com> | ||||
| L:	linux-usb@vger.kernel.org | ||||
|  | @ -9465,7 +9487,7 @@ S:	Maintained | |||
| F:	drivers/net/usb/rtl8150.c | ||||
| 
 | ||||
| USB SERIAL SUBSYSTEM | ||||
| M:	Johan Hovold <jhovold@gmail.com> | ||||
| M:	Johan Hovold <johan@kernel.org> | ||||
| L:	linux-usb@vger.kernel.org | ||||
| S:	Maintained | ||||
| F:	Documentation/usb/usb-serial.txt | ||||
|  |  | |||
							
								
								
									
										102
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										102
									
								
								Makefile
									
										
									
									
									
								
							|  | @ -1,7 +1,7 @@ | |||
| VERSION = 3 | ||||
| PATCHLEVEL = 16 | ||||
| SUBLEVEL = 0 | ||||
| EXTRAVERSION = -rc2 | ||||
| EXTRAVERSION = -rc5 | ||||
| NAME = Shuffling Zombie Juror | ||||
| 
 | ||||
| # *DOCUMENTATION*
 | ||||
|  | @ -41,6 +41,29 @@ unexport GREP_OPTIONS | |||
| # descending is started. They are now explicitly listed as the
 | ||||
| # prepare rule.
 | ||||
| 
 | ||||
| # Beautify output
 | ||||
| # ---------------------------------------------------------------------------
 | ||||
| #
 | ||||
| # Normally, we echo the whole command before executing it. By making
 | ||||
| # that echo $($(quiet)$(cmd)), we now have the possibility to set
 | ||||
| # $(quiet) to choose other forms of output instead, e.g.
 | ||||
| #
 | ||||
| #         quiet_cmd_cc_o_c = Compiling $(RELDIR)/$@
 | ||||
| #         cmd_cc_o_c       = $(CC) $(c_flags) -c -o $@ $<
 | ||||
| #
 | ||||
| # If $(quiet) is empty, the whole command will be printed.
 | ||||
| # If it is set to "quiet_", only the short version will be printed.
 | ||||
| # If it is set to "silent_", nothing will be printed at all, since
 | ||||
| # the variable $(silent_cmd_cc_o_c) doesn't exist.
 | ||||
| #
 | ||||
| # A simple variant is to prefix commands with $(Q) - that's useful
 | ||||
| # for commands that shall be hidden in non-verbose mode.
 | ||||
| #
 | ||||
| #	$(Q)ln $@ :<
 | ||||
| #
 | ||||
| # If KBUILD_VERBOSE equals 0 then the above command will be hidden.
 | ||||
| # If KBUILD_VERBOSE equals 1 then the above command is displayed.
 | ||||
| #
 | ||||
| # To put more focus on warnings, be less verbose as default
 | ||||
| # Use 'make V=1' to see the full commands
 | ||||
| 
 | ||||
|  | @ -51,6 +74,29 @@ ifndef KBUILD_VERBOSE | |||
|   KBUILD_VERBOSE = 0 | ||||
| endif | ||||
| 
 | ||||
| ifeq ($(KBUILD_VERBOSE),1) | ||||
|   quiet = | ||||
|   Q = | ||||
| else | ||||
|   quiet=quiet_ | ||||
|   Q = @ | ||||
| endif | ||||
| 
 | ||||
| # If the user is running make -s (silent mode), suppress echoing of
 | ||||
| # commands
 | ||||
| 
 | ||||
| ifneq ($(filter 4.%,$(MAKE_VERSION)),)	# make-4
 | ||||
| ifneq ($(filter %s ,$(firstword x$(MAKEFLAGS))),) | ||||
|   quiet=silent_ | ||||
| endif | ||||
| else					# make-3.8x
 | ||||
| ifneq ($(filter s% -s%,$(MAKEFLAGS)),) | ||||
|   quiet=silent_ | ||||
| endif | ||||
| endif | ||||
| 
 | ||||
| export quiet Q KBUILD_VERBOSE | ||||
| 
 | ||||
| # Call a source code checker (by default, "sparse") as part of the
 | ||||
| # C compilation.
 | ||||
| #
 | ||||
|  | @ -126,7 +172,13 @@ PHONY += $(MAKECMDGOALS) sub-make | |||
| $(filter-out _all sub-make $(CURDIR)/Makefile, $(MAKECMDGOALS)) _all: sub-make | ||||
| 	@: | ||||
| 
 | ||||
| # Fake the "Entering directory" message once, so that IDEs/editors are
 | ||||
| # able to understand relative filenames.
 | ||||
|        echodir := @echo | ||||
|  quiet_echodir := @echo | ||||
| silent_echodir := @: | ||||
| sub-make: FORCE | ||||
| 	$($(quiet)echodir) "make[1]: Entering directory \`$(KBUILD_OUTPUT)'" | ||||
| 	$(if $(KBUILD_VERBOSE:1=),@)$(MAKE) -C $(KBUILD_OUTPUT) \
 | ||||
| 	KBUILD_SRC=$(CURDIR) \
 | ||||
| 	KBUILD_EXTMOD="$(KBUILD_EXTMOD)" -f $(CURDIR)/Makefile \
 | ||||
|  | @ -289,52 +341,6 @@ endif | |||
| export KBUILD_MODULES KBUILD_BUILTIN | ||||
| export KBUILD_CHECKSRC KBUILD_SRC KBUILD_EXTMOD | ||||
| 
 | ||||
| # Beautify output
 | ||||
| # ---------------------------------------------------------------------------
 | ||||
| #
 | ||||
| # Normally, we echo the whole command before executing it. By making
 | ||||
| # that echo $($(quiet)$(cmd)), we now have the possibility to set
 | ||||
| # $(quiet) to choose other forms of output instead, e.g.
 | ||||
| #
 | ||||
| #         quiet_cmd_cc_o_c = Compiling $(RELDIR)/$@
 | ||||
| #         cmd_cc_o_c       = $(CC) $(c_flags) -c -o $@ $<
 | ||||
| #
 | ||||
| # If $(quiet) is empty, the whole command will be printed.
 | ||||
| # If it is set to "quiet_", only the short version will be printed.
 | ||||
| # If it is set to "silent_", nothing will be printed at all, since
 | ||||
| # the variable $(silent_cmd_cc_o_c) doesn't exist.
 | ||||
| #
 | ||||
| # A simple variant is to prefix commands with $(Q) - that's useful
 | ||||
| # for commands that shall be hidden in non-verbose mode.
 | ||||
| #
 | ||||
| #	$(Q)ln $@ :<
 | ||||
| #
 | ||||
| # If KBUILD_VERBOSE equals 0 then the above command will be hidden.
 | ||||
| # If KBUILD_VERBOSE equals 1 then the above command is displayed.
 | ||||
| 
 | ||||
| ifeq ($(KBUILD_VERBOSE),1) | ||||
|   quiet = | ||||
|   Q = | ||||
| else | ||||
|   quiet=quiet_ | ||||
|   Q = @ | ||||
| endif | ||||
| 
 | ||||
| # If the user is running make -s (silent mode), suppress echoing of
 | ||||
| # commands
 | ||||
| 
 | ||||
| ifneq ($(filter 4.%,$(MAKE_VERSION)),)	# make-4
 | ||||
| ifneq ($(filter %s ,$(firstword x$(MAKEFLAGS))),) | ||||
|   quiet=silent_ | ||||
| endif | ||||
| else					# make-3.8x
 | ||||
| ifneq ($(filter s% -s%,$(MAKEFLAGS)),) | ||||
|   quiet=silent_ | ||||
| endif | ||||
| endif | ||||
| 
 | ||||
| export quiet Q KBUILD_VERBOSE | ||||
| 
 | ||||
| ifneq ($(CC),) | ||||
| ifeq ($(shell $(CC) -v 2>&1 | grep -c "clang version"), 1) | ||||
| COMPILER := clang | ||||
|  | @ -1170,7 +1176,7 @@ distclean: mrproper | |||
| # Packaging of the kernel to various formats
 | ||||
| # ---------------------------------------------------------------------------
 | ||||
| # rpm target kept for backward compatibility
 | ||||
| package-dir	:= $(srctree)/scripts/package | ||||
| package-dir	:= scripts/package | ||||
| 
 | ||||
| %src-pkg: FORCE | ||||
| 	$(Q)$(MAKE) $(build)=$(package-dir) $@ | ||||
|  |  | |||
|  | @ -60,7 +60,7 @@ extern void read_decode_cache_bcr(void); | |||
| #define ARC_REG_IC_IVIC		0x10 | ||||
| #define ARC_REG_IC_CTRL		0x11 | ||||
| #define ARC_REG_IC_IVIL		0x19 | ||||
| #if defined(CONFIG_ARC_MMU_V3) || defined (CONFIG_ARC_MMU_V4) | ||||
| #if defined(CONFIG_ARC_MMU_V3) | ||||
| #define ARC_REG_IC_PTAG		0x1E | ||||
| #endif | ||||
| 
 | ||||
|  | @ -74,7 +74,7 @@ extern void read_decode_cache_bcr(void); | |||
| #define ARC_REG_DC_IVDL		0x4A | ||||
| #define ARC_REG_DC_FLSH		0x4B | ||||
| #define ARC_REG_DC_FLDL		0x4C | ||||
| #if defined(CONFIG_ARC_MMU_V3) || defined (CONFIG_ARC_MMU_V4) | ||||
| #if defined(CONFIG_ARC_MMU_V3) | ||||
| #define ARC_REG_DC_PTAG		0x5C | ||||
| #endif | ||||
| 
 | ||||
|  |  | |||
|  | @ -11,6 +11,7 @@ | |||
| #ifndef _UAPI__ASM_ARC_PTRACE_H | ||||
| #define _UAPI__ASM_ARC_PTRACE_H | ||||
| 
 | ||||
| #define PTRACE_GET_THREAD_AREA	25 | ||||
| 
 | ||||
| #ifndef __ASSEMBLY__ | ||||
| /*
 | ||||
|  |  | |||
|  | @ -10,9 +10,9 @@ | |||
|  *  -This is the more "natural" hand written assembler | ||||
|  */ | ||||
| 
 | ||||
| #include <linux/linkage.h> | ||||
| #include <asm/entry.h>       /* For the SAVE_* macros */ | ||||
| #include <asm/asm-offsets.h> | ||||
| #include <asm/linkage.h> | ||||
| 
 | ||||
| #define KSP_WORD_OFF 	((TASK_THREAD + THREAD_KSP) / 4) | ||||
| 
 | ||||
|  |  | |||
|  | @ -41,7 +41,7 @@ const struct machine_desc * __init setup_machine_fdt(void *dt) | |||
| { | ||||
| 	const struct machine_desc *mdesc; | ||||
| 	unsigned long dt_root; | ||||
| 	void *clk; | ||||
| 	const void *clk; | ||||
| 	int len; | ||||
| 
 | ||||
| 	if (!early_init_dt_scan(dt)) | ||||
|  |  | |||
|  | @ -77,10 +77,11 @@ stext: | |||
| 	; Clear BSS before updating any globals
 | ||||
| 	; XXX: use ZOL here
 | ||||
| 	mov	r5, __bss_start | ||||
| 	mov	r6, __bss_stop | ||||
| 	sub	r6, __bss_stop, r5 | ||||
| 	lsr.f	lp_count, r6, 2 | ||||
| 	lpnz	1f | ||||
| 	st.ab   0, [r5, 4] | ||||
| 1: | ||||
| 	st.ab   0, [r5,4] | ||||
| 	brlt    r5, r6, 1b | ||||
| 
 | ||||
| 	; Uboot - kernel ABI
 | ||||
| 	;    r0 = [0] No uboot interaction, [1] cmdline in r2, [2] DTB in r2
 | ||||
|  |  | |||
|  | @ -146,6 +146,10 @@ long arch_ptrace(struct task_struct *child, long request, | |||
| 	pr_debug("REQ=%ld: ADDR =0x%lx, DATA=0x%lx)\n", request, addr, data); | ||||
| 
 | ||||
| 	switch (request) { | ||||
| 	case PTRACE_GET_THREAD_AREA: | ||||
| 		ret = put_user(task_thread_info(child)->thr_ptr, | ||||
| 			       (unsigned long __user *)data); | ||||
| 		break; | ||||
| 	default: | ||||
| 		ret = ptrace_request(child, request, addr, data); | ||||
| 		break; | ||||
|  |  | |||
|  | @ -337,8 +337,19 @@ irqreturn_t do_IPI(int irq, void *dev_id) | |||
|  * API called by platform code to hookup arch-common ISR to their IPI IRQ | ||||
|  */ | ||||
| static DEFINE_PER_CPU(int, ipi_dev); | ||||
| 
 | ||||
| static struct irqaction arc_ipi_irq = { | ||||
|         .name    = "IPI Interrupt", | ||||
|         .flags   = IRQF_PERCPU, | ||||
|         .handler = do_IPI, | ||||
| }; | ||||
| 
 | ||||
| int smp_ipi_irq_setup(int cpu, int irq) | ||||
| { | ||||
| 	int *dev_id = &per_cpu(ipi_dev, smp_processor_id()); | ||||
| 	return request_percpu_irq(irq, do_IPI, "IPI Interrupt", dev_id); | ||||
| 	if (!cpu) | ||||
| 		return setup_irq(irq, &arc_ipi_irq); | ||||
| 	else | ||||
| 		arch_unmask_irq(irq); | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
|  |  | |||
|  | @ -116,7 +116,7 @@ SECTIONS | |||
| 
 | ||||
| 	_edata = .;
 | ||||
| 
 | ||||
| 	BSS_SECTION(0, 0, 0) | ||||
| 	BSS_SECTION(4, 4, 4) | ||||
| 
 | ||||
| #ifdef CONFIG_ARC_DW2_UNWIND | ||||
| 	. = ALIGN(PAGE_SIZE);
 | ||||
|  |  | |||
|  | @ -389,7 +389,7 @@ static inline void __dc_line_op(unsigned long paddr, unsigned long vaddr, | |||
| /***********************************************************
 | ||||
|  * Machine specific helper for per line I-Cache invalidate. | ||||
|  */ | ||||
| static void __ic_line_inv_vaddr(unsigned long paddr, unsigned long vaddr, | ||||
| static void __ic_line_inv_vaddr_local(unsigned long paddr, unsigned long vaddr, | ||||
| 				unsigned long sz) | ||||
| { | ||||
| 	unsigned long flags; | ||||
|  | @ -405,6 +405,23 @@ static inline void __ic_entire_inv(void) | |||
| 	read_aux_reg(ARC_REG_IC_CTRL);	/* blocks */ | ||||
| } | ||||
| 
 | ||||
| struct ic_line_inv_vaddr_ipi { | ||||
| 	unsigned long paddr, vaddr; | ||||
| 	int sz; | ||||
| }; | ||||
| 
 | ||||
| static void __ic_line_inv_vaddr_helper(void *info) | ||||
| { | ||||
|         struct ic_line_inv_vaddr_ipi *ic_inv = (struct ic_line_inv_vaddr_ipi*) info; | ||||
|         __ic_line_inv_vaddr_local(ic_inv->paddr, ic_inv->vaddr, ic_inv->sz); | ||||
| } | ||||
| 
 | ||||
| static void __ic_line_inv_vaddr(unsigned long paddr, unsigned long vaddr, | ||||
| 				unsigned long sz) | ||||
| { | ||||
| 	struct ic_line_inv_vaddr_ipi ic_inv = { paddr, vaddr , sz}; | ||||
| 	on_each_cpu(__ic_line_inv_vaddr_helper, &ic_inv, 1); | ||||
| } | ||||
| #else | ||||
| 
 | ||||
| #define __ic_entire_inv() | ||||
|  | @ -553,12 +570,8 @@ void flush_icache_range(unsigned long kstart, unsigned long kend) | |||
|  */ | ||||
| void __sync_icache_dcache(unsigned long paddr, unsigned long vaddr, int len) | ||||
| { | ||||
| 	unsigned long flags; | ||||
| 
 | ||||
| 	local_irq_save(flags); | ||||
| 	__ic_line_inv_vaddr(paddr, vaddr, len); | ||||
| 	__dc_line_op(paddr, vaddr, len, OP_FLUSH_N_INV); | ||||
| 	local_irq_restore(flags); | ||||
| 	__ic_line_inv_vaddr(paddr, vaddr, len); | ||||
| } | ||||
| 
 | ||||
| /* wrapper to compile time eliminate alignment checks in flush loop */ | ||||
|  |  | |||
|  | @ -529,8 +529,8 @@ | |||
| 		serial-dir = <  /* 0: INACTIVE, 1: TX, 2: RX */ | ||||
| 			0 0 1 2 | ||||
| 		>; | ||||
| 		tx-num-evt = <1>; | ||||
| 		rx-num-evt = <1>; | ||||
| 		tx-num-evt = <32>; | ||||
| 		rx-num-evt = <32>; | ||||
| }; | ||||
| 
 | ||||
| &tps { | ||||
|  |  | |||
|  | @ -560,8 +560,8 @@ | |||
| 		serial-dir = <  /* 0: INACTIVE, 1: TX, 2: RX */ | ||||
| 			0 0 1 2 | ||||
| 		>; | ||||
| 		tx-num-evt = <1>; | ||||
| 		rx-num-evt = <1>; | ||||
| 		tx-num-evt = <32>; | ||||
| 		rx-num-evt = <32>; | ||||
| }; | ||||
| 
 | ||||
| &tscadc { | ||||
|  |  | |||
|  | @ -105,10 +105,16 @@ | |||
| 
 | ||||
| &cpsw_emac0 { | ||||
| 	phy_id = <&davinci_mdio>, <0>; | ||||
| 	phy-mode = "rmii"; | ||||
| }; | ||||
| 
 | ||||
| &cpsw_emac1 { | ||||
| 	phy_id = <&davinci_mdio>, <1>; | ||||
| 	phy-mode = "rmii"; | ||||
| }; | ||||
| 
 | ||||
| &phy_sel { | ||||
| 	rmii-clock-ext; | ||||
| }; | ||||
| 
 | ||||
| &elm { | ||||
|  |  | |||
|  | @ -319,6 +319,10 @@ | |||
| 	phy-mode = "rmii"; | ||||
| }; | ||||
| 
 | ||||
| &phy_sel { | ||||
| 	rmii-clock-ext; | ||||
| }; | ||||
| 
 | ||||
| &i2c0 { | ||||
| 	status = "okay"; | ||||
| 	pinctrl-names = "default"; | ||||
|  |  | |||
|  | @ -1045,6 +1045,8 @@ | |||
| 				reg = <0x00500000 0x80000 | ||||
| 				       0xf803c000 0x400>; | ||||
| 				interrupts = <23 IRQ_TYPE_LEVEL_HIGH 0>; | ||||
| 				clocks = <&usb>, <&udphs_clk>; | ||||
| 				clock-names = "hclk", "pclk"; | ||||
| 				status = "disabled"; | ||||
| 
 | ||||
| 				ep0 { | ||||
|  |  | |||
|  | @ -240,6 +240,7 @@ | |||
| 					regulator-name = "ldo3"; | ||||
| 					regulator-min-microvolt = <1800000>; | ||||
| 					regulator-max-microvolt = <1800000>; | ||||
| 					regulator-always-on; | ||||
| 					regulator-boot-on; | ||||
| 				}; | ||||
| 
 | ||||
|  |  | |||
|  | @ -773,7 +773,6 @@ | |||
| 			clocks = <&qspi_gfclk_div>; | ||||
| 			clock-names = "fck"; | ||||
| 			num-cs = <4>; | ||||
| 			interrupts = <0 343 0x4>; | ||||
| 			status = "disabled"; | ||||
| 		}; | ||||
| 
 | ||||
|  | @ -984,6 +983,17 @@ | |||
| 			#size-cells = <1>; | ||||
| 			status = "disabled"; | ||||
| 		}; | ||||
| 
 | ||||
| 		atl: atl@4843c000 { | ||||
| 			compatible = "ti,dra7-atl"; | ||||
| 			reg = <0x4843c000 0x3ff>; | ||||
| 			ti,hwmods = "atl"; | ||||
| 			ti,provided-clocks = <&atl_clkin0_ck>, <&atl_clkin1_ck>, | ||||
| 					     <&atl_clkin2_ck>, <&atl_clkin3_ck>; | ||||
| 			clocks = <&atl_gfclk_mux>; | ||||
| 			clock-names = "fck"; | ||||
| 			status = "disabled"; | ||||
| 		}; | ||||
| 	}; | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -10,26 +10,26 @@ | |||
| &cm_core_aon_clocks { | ||||
| 	atl_clkin0_ck: atl_clkin0_ck { | ||||
| 		#clock-cells = <0>; | ||||
| 		compatible = "fixed-clock"; | ||||
| 		clock-frequency = <0>; | ||||
| 		compatible = "ti,dra7-atl-clock"; | ||||
| 		clocks = <&atl_gfclk_mux>; | ||||
| 	}; | ||||
| 
 | ||||
| 	atl_clkin1_ck: atl_clkin1_ck { | ||||
| 		#clock-cells = <0>; | ||||
| 		compatible = "fixed-clock"; | ||||
| 		clock-frequency = <0>; | ||||
| 		compatible = "ti,dra7-atl-clock"; | ||||
| 		clocks = <&atl_gfclk_mux>; | ||||
| 	}; | ||||
| 
 | ||||
| 	atl_clkin2_ck: atl_clkin2_ck { | ||||
| 		#clock-cells = <0>; | ||||
| 		compatible = "fixed-clock"; | ||||
| 		clock-frequency = <0>; | ||||
| 		compatible = "ti,dra7-atl-clock"; | ||||
| 		clocks = <&atl_gfclk_mux>; | ||||
| 	}; | ||||
| 
 | ||||
| 	atl_clkin3_ck: atl_clkin3_ck { | ||||
| 		#clock-cells = <0>; | ||||
| 		compatible = "fixed-clock"; | ||||
| 		clock-frequency = <0>; | ||||
| 		compatible = "ti,dra7-atl-clock"; | ||||
| 		clocks = <&atl_gfclk_mux>; | ||||
| 	}; | ||||
| 
 | ||||
| 	hdmi_clkin_ck: hdmi_clkin_ck { | ||||
|  | @ -673,10 +673,12 @@ | |||
| 
 | ||||
| 	l3_iclk_div: l3_iclk_div { | ||||
| 		#clock-cells = <0>; | ||||
| 		compatible = "fixed-factor-clock"; | ||||
| 		compatible = "ti,divider-clock"; | ||||
| 		ti,max-div = <2>; | ||||
| 		ti,bit-shift = <4>; | ||||
| 		reg = <0x0100>; | ||||
| 		clocks = <&dpll_core_h12x2_ck>; | ||||
| 		clock-mult = <1>; | ||||
| 		clock-div = <1>; | ||||
| 		ti,index-power-of-two; | ||||
| 	}; | ||||
| 
 | ||||
| 	l4_root_clk_div: l4_root_clk_div { | ||||
|  | @ -684,7 +686,7 @@ | |||
| 		compatible = "fixed-factor-clock"; | ||||
| 		clocks = <&l3_iclk_div>; | ||||
| 		clock-mult = <1>; | ||||
| 		clock-div = <1>; | ||||
| 		clock-div = <2>; | ||||
| 	}; | ||||
| 
 | ||||
| 	video1_clk2_div: video1_clk2_div { | ||||
|  |  | |||
|  | @ -554,7 +554,7 @@ | |||
| 		interrupts = <0 37 0>, <0 38 0>, <0 39 0>, <0 40 0>, <0 41 0>; | ||||
| 		clocks = <&clock CLK_PWM>; | ||||
| 		clock-names = "timers"; | ||||
| 		#pwm-cells = <2>; | ||||
| 		#pwm-cells = <3>; | ||||
| 		status = "disabled"; | ||||
| 	}; | ||||
| 
 | ||||
|  |  | |||
|  | @ -167,7 +167,7 @@ | |||
| 		compatible = "samsung,exynos5420-audss-clock"; | ||||
| 		reg = <0x03810000 0x0C>; | ||||
| 		#clock-cells = <1>; | ||||
| 		clocks = <&clock CLK_FIN_PLL>, <&clock CLK_FOUT_EPLL>, | ||||
| 		clocks = <&clock CLK_FIN_PLL>, <&clock CLK_MAU_EPLL>, | ||||
| 			 <&clock CLK_SCLK_MAUDIO0>, <&clock CLK_SCLK_MAUPCM0>; | ||||
| 		clock-names = "pll_ref", "pll_in", "sclk_audio", "sclk_pcm_in"; | ||||
| 	}; | ||||
|  | @ -260,6 +260,9 @@ | |||
| 	mfc_pd: power-domain@10044060 { | ||||
| 		compatible = "samsung,exynos4210-pd"; | ||||
| 		reg = <0x10044060 0x20>; | ||||
| 		clocks = <&clock CLK_FIN_PLL>, <&clock CLK_MOUT_SW_ACLK333>, | ||||
| 			<&clock CLK_MOUT_USER_ACLK333>; | ||||
| 		clock-names = "oscclk", "pclk0", "clk0"; | ||||
| 	}; | ||||
| 
 | ||||
| 	disp_pd: power-domain@100440C0 { | ||||
|  |  | |||
|  | @ -251,6 +251,11 @@ | |||
| 			codec { | ||||
| 			}; | ||||
| 		}; | ||||
| 
 | ||||
| 		twl_power: power { | ||||
| 			compatible = "ti,twl4030-power-beagleboard-xm", "ti,twl4030-power-idle-osc-off"; | ||||
| 			ti,use_poweroff; | ||||
| 		}; | ||||
| 	}; | ||||
| }; | ||||
| 
 | ||||
|  | @ -301,6 +306,7 @@ | |||
| }; | ||||
| 
 | ||||
| &uart3 { | ||||
| 	interrupts-extended = <&intc 74 &omap3_pmx_core OMAP3_UART3_RX>; | ||||
| 	pinctrl-names = "default"; | ||||
| 	pinctrl-0 = <&uart3_pins>; | ||||
| }; | ||||
|  |  | |||
|  | @ -50,6 +50,13 @@ | |||
| 	gpios = <&twl_gpio 18 GPIO_ACTIVE_LOW>; | ||||
| }; | ||||
| 
 | ||||
| &twl { | ||||
| 	twl_power: power { | ||||
| 		compatible = "ti,twl4030-power-omap3-evm", "ti,twl4030-power-idle"; | ||||
| 		ti,use_poweroff; | ||||
| 	}; | ||||
| }; | ||||
| 
 | ||||
| &i2c2 { | ||||
| 	clock-frequency = <400000>; | ||||
| }; | ||||
|  |  | |||
|  | @ -351,6 +351,11 @@ | |||
| 		compatible = "ti,twl4030-audio"; | ||||
| 		ti,enable-vibra = <1>; | ||||
| 	}; | ||||
| 
 | ||||
| 	twl_power: power { | ||||
| 		compatible = "ti,twl4030-power-n900", "ti,twl4030-power-idle-osc-off"; | ||||
| 		ti,use_poweroff; | ||||
| 	}; | ||||
| }; | ||||
| 
 | ||||
| &twl_keypad { | ||||
|  |  | |||
|  | @ -45,7 +45,6 @@ | |||
| 
 | ||||
| 			operating-points = < | ||||
| 				/* kHz    uV */ | ||||
| 				500000  880000 | ||||
| 				1000000 1060000 | ||||
| 				1500000 1250000 | ||||
| 			>; | ||||
|  |  | |||
|  | @ -94,10 +94,10 @@ CONFIG_BACKLIGHT_CLASS_DEVICE=y | |||
| CONFIG_BACKLIGHT_PWM=y | ||||
| # CONFIG_USB_SUPPORT is not set | ||||
| CONFIG_MMC=y | ||||
| CONFIG_MMC_UNSAFE_RESUME=y | ||||
| CONFIG_MMC_BLOCK_MINORS=32 | ||||
| CONFIG_MMC_TEST=y | ||||
| CONFIG_MMC_SDHCI=y | ||||
| CONFIG_MMC_SDHCI_PLTFM=y | ||||
| CONFIG_MMC_SDHCI_BCM_KONA=y | ||||
| CONFIG_NEW_LEDS=y | ||||
| CONFIG_LEDS_CLASS=y | ||||
|  |  | |||
|  | @ -223,12 +223,12 @@ CONFIG_POWER_RESET_GPIO=y | |||
| CONFIG_POWER_RESET_SUN6I=y | ||||
| CONFIG_SENSORS_LM90=y | ||||
| CONFIG_THERMAL=y | ||||
| CONFIG_DOVE_THERMAL=y | ||||
| CONFIG_ARMADA_THERMAL=y | ||||
| CONFIG_WATCHDOG=y | ||||
| CONFIG_ORION_WATCHDOG=y | ||||
| CONFIG_SUNXI_WATCHDOG=y | ||||
| CONFIG_MFD_AS3722=y | ||||
| CONFIG_MFD_BCM590XX=y | ||||
| CONFIG_MFD_CROS_EC=y | ||||
| CONFIG_MFD_CROS_EC_SPI=y | ||||
| CONFIG_MFD_MAX8907=y | ||||
|  | @ -240,6 +240,7 @@ CONFIG_MFD_TPS65910=y | |||
| CONFIG_REGULATOR_VIRTUAL_CONSUMER=y | ||||
| CONFIG_REGULATOR_AB8500=y | ||||
| CONFIG_REGULATOR_AS3722=y | ||||
| CONFIG_REGULATOR_BCM590XX=y | ||||
| CONFIG_REGULATOR_GPIO=y | ||||
| CONFIG_REGULATOR_MAX8907=y | ||||
| CONFIG_REGULATOR_PALMAS=y | ||||
|  |  | |||
|  | @ -208,8 +208,6 @@ struct sync_struct { | |||
| 	struct mcpm_sync_struct clusters[MAX_NR_CLUSTERS]; | ||||
| }; | ||||
| 
 | ||||
| extern unsigned long sync_phys;	/* physical address of *mcpm_sync */ | ||||
| 
 | ||||
| void __mcpm_cpu_going_down(unsigned int cpu, unsigned int cluster); | ||||
| void __mcpm_cpu_down(unsigned int cpu, unsigned int cluster); | ||||
| void __mcpm_outbound_leave_critical(unsigned int cluster, int state); | ||||
|  |  | |||
|  | @ -74,8 +74,6 @@ void kprobe_arm_test_cases(void) | |||
| 	TEST_RRR( op "lt" s "	r11, r",11,VAL1,", r",14,N(val),", asr r",7, 6,"")\ | ||||
| 	TEST_RR(  op "gt" s "	r12, r13"       ", r",14,val, ", ror r",14,7,"")\ | ||||
| 	TEST_RR(  op "le" s "	r14, r",0, val, ", r13"       ", lsl r",14,8,"")\ | ||||
| 	TEST_RR(  op s "	r12, pc"        ", r",14,val, ", ror r",14,7,"")\ | ||||
| 	TEST_RR(  op s "	r14, r",0, val, ", pc"        ", lsl r",14,8,"")\ | ||||
| 	TEST_R(   op "eq" s "	r0,  r",11,VAL1,", #0xf5")			\ | ||||
| 	TEST_R(   op "ne" s "	r11, r",0, VAL1,", #0xf5000000")		\ | ||||
| 	TEST_R(   op s "	r7,  r",8, VAL2,", #0x000af000")		\ | ||||
|  | @ -103,8 +101,6 @@ void kprobe_arm_test_cases(void) | |||
| 	TEST_RRR( op "ge	r",11,VAL1,", r",14,N(val),", asr r",7, 6,"")	\ | ||||
| 	TEST_RR(  op "le	r13"       ", r",14,val, ", ror r",14,7,"")	\ | ||||
| 	TEST_RR(  op "gt	r",0, val, ", r13"       ", lsl r",14,8,"")	\ | ||||
| 	TEST_RR(  op "	pc"        ", r",14,val, ", ror r",14,7,"")		\ | ||||
| 	TEST_RR(  op "	r",0, val, ", pc"        ", lsl r",14,8,"")		\ | ||||
| 	TEST_R(   op "eq	r",11,VAL1,", #0xf5")				\ | ||||
| 	TEST_R(   op "ne	r",0, VAL1,", #0xf5000000")			\ | ||||
| 	TEST_R(   op "	r",8, VAL2,", #0x000af000") | ||||
|  | @ -125,7 +121,6 @@ void kprobe_arm_test_cases(void) | |||
| 	TEST_RR(  op "ge" s "	r11, r",11,N(val),", asr r",7, 6,"")	\ | ||||
| 	TEST_RR(  op "lt" s "	r12, r",11,val, ", ror r",14,7,"")	\ | ||||
| 	TEST_R(   op "gt" s "	r14, r13"       ", lsl r",14,8,"")	\ | ||||
| 	TEST_R(   op "le" s "	r14, pc"        ", lsl r",14,8,"")	\ | ||||
| 	TEST(     op "eq" s "	r0,  #0xf5")				\ | ||||
| 	TEST(     op "ne" s "	r11, #0xf5000000")			\ | ||||
| 	TEST(     op s "	r7,  #0x000af000")			\ | ||||
|  | @ -159,12 +154,19 @@ void kprobe_arm_test_cases(void) | |||
| 	TEST_SUPPORTED("cmp	pc, #0x1000"); | ||||
| 	TEST_SUPPORTED("cmp	sp, #0x1000"); | ||||
| 
 | ||||
| 	/* Data-processing with PC as shift*/ | ||||
| 	/* Data-processing with PC and a shift count in a register */ | ||||
| 	TEST_UNSUPPORTED(__inst_arm(0xe15c0f1e) "	@ cmp	r12, r14, asl pc") | ||||
| 	TEST_UNSUPPORTED(__inst_arm(0xe1a0cf1e) "	@ mov	r12, r14, asl pc") | ||||
| 	TEST_UNSUPPORTED(__inst_arm(0xe08caf1e) "	@ add	r10, r12, r14, asl pc") | ||||
| 	TEST_UNSUPPORTED(__inst_arm(0xe151021f) "	@ cmp	r1, pc, lsl r2") | ||||
| 	TEST_UNSUPPORTED(__inst_arm(0xe17f0211) "	@ cmn	pc, r1, lsl r2") | ||||
| 	TEST_UNSUPPORTED(__inst_arm(0xe1a0121f) "	@ mov	r1, pc, lsl r2") | ||||
| 	TEST_UNSUPPORTED(__inst_arm(0xe1a0f211) "	@ mov	pc, r1, lsl r2") | ||||
| 	TEST_UNSUPPORTED(__inst_arm(0xe042131f) "	@ sub	r1, r2, pc, lsl r3") | ||||
| 	TEST_UNSUPPORTED(__inst_arm(0xe1cf1312) "	@ bic	r1, pc, r2, lsl r3") | ||||
| 	TEST_UNSUPPORTED(__inst_arm(0xe081f312) "	@ add	pc, r1, r2, lsl r3") | ||||
| 
 | ||||
| 	/* Data-processing with PC as shift*/ | ||||
| 	/* Data-processing with PC as a target and status registers updated */ | ||||
| 	TEST_UNSUPPORTED("movs	pc, r1") | ||||
| 	TEST_UNSUPPORTED("movs	pc, r1, lsl r2") | ||||
| 	TEST_UNSUPPORTED("movs	pc, #0x10000") | ||||
|  | @ -187,14 +189,14 @@ void kprobe_arm_test_cases(void) | |||
| 	TEST_BF_R ("add	pc, pc, r",14,2f-1f-8,"") | ||||
| 	TEST_BF_R ("add	pc, r",14,2f-1f-8,", pc") | ||||
| 	TEST_BF_R ("mov	pc, r",0,2f,"") | ||||
| 	TEST_BF_RR("mov	pc, r",0,2f,", asl r",1,0,"") | ||||
| 	TEST_BF_R ("add	pc, pc, r",14,(2f-1f-8)*2,", asr #1") | ||||
| 	TEST_BB(   "sub	pc, pc, #1b-2b+8") | ||||
| #if __LINUX_ARM_ARCH__ == 6 && !defined(CONFIG_CPU_V7) | ||||
| 	TEST_BB(   "sub	pc, pc, #1b-2b+8-2") /* UNPREDICTABLE before and after ARMv6 */ | ||||
| #endif | ||||
| 	TEST_BB_R( "sub	pc, pc, r",14, 1f-2f+8,"") | ||||
| 	TEST_BB_R( "rsb	pc, r",14,1f-2f+8,", pc") | ||||
| 	TEST_RR(   "add	pc, pc, r",10,-2,", asl r",11,1,"") | ||||
| 	TEST_R(    "add	pc, pc, r",10,-2,", asl #1") | ||||
| #ifdef CONFIG_THUMB2_KERNEL | ||||
| 	TEST_ARM_TO_THUMB_INTERWORK_R("add	pc, pc, r",0,3f-1f-8+1,"") | ||||
| 	TEST_ARM_TO_THUMB_INTERWORK_R("sub	pc, r",0,3f+8+1,", #8") | ||||
|  | @ -216,6 +218,7 @@ void kprobe_arm_test_cases(void) | |||
| 	TEST_BB_R("bx	r",7,2f,"") | ||||
| 	TEST_BF_R("bxeq	r",14,2f,"") | ||||
| 
 | ||||
| #if __LINUX_ARM_ARCH__ >= 5 | ||||
| 	TEST_R("clz	r0, r",0, 0x0,"") | ||||
| 	TEST_R("clzeq	r7, r",14,0x1,"") | ||||
| 	TEST_R("clz	lr, r",7, 0xffffffff,"") | ||||
|  | @ -337,6 +340,7 @@ void kprobe_arm_test_cases(void) | |||
| 	TEST_UNSUPPORTED(__inst_arm(0xe16f02e1) " @ smultt pc, r1, r2") | ||||
| 	TEST_UNSUPPORTED(__inst_arm(0xe16002ef) " @ smultt r0, pc, r2") | ||||
| 	TEST_UNSUPPORTED(__inst_arm(0xe1600fe1) " @ smultt r0, r1, pc") | ||||
| #endif | ||||
| 
 | ||||
| 	TEST_GROUP("Multiply and multiply-accumulate") | ||||
| 
 | ||||
|  | @ -559,6 +563,7 @@ void kprobe_arm_test_cases(void) | |||
| 	TEST_UNSUPPORTED("ldrsht	r1, [r2], #48") | ||||
| #endif | ||||
| 
 | ||||
| #if __LINUX_ARM_ARCH__ >= 5 | ||||
| 	TEST_RPR(  "strd	r",0, VAL1,", [r",1, 48,", -r",2,24,"]") | ||||
| 	TEST_RPR(  "strccd	r",8, VAL2,", [r",13,0, ", r",12,48,"]") | ||||
| 	TEST_RPR(  "strd	r",4, VAL1,", [r",2, 24,", r",3, 48,"]!") | ||||
|  | @ -595,6 +600,7 @@ void kprobe_arm_test_cases(void) | |||
| 	TEST_UNSUPPORTED(__inst_arm(0xe1efc3d0) "	@ ldrd r12, [pc, #48]!") | ||||
| 	TEST_UNSUPPORTED(__inst_arm(0xe0c9f3d0) "	@ ldrd pc, [r9], #48") | ||||
| 	TEST_UNSUPPORTED(__inst_arm(0xe0c9e3d0) "	@ ldrd lr, [r9], #48") | ||||
| #endif | ||||
| 
 | ||||
| 	TEST_GROUP("Miscellaneous") | ||||
| 
 | ||||
|  | @ -1227,7 +1233,9 @@ void kprobe_arm_test_cases(void) | |||
| 	TEST_COPROCESSOR( "mrc"two"	0, 0, r0, cr0, cr0, 0") | ||||
| 
 | ||||
| 	COPROCESSOR_INSTRUCTIONS_ST_LD("",e) | ||||
| #if __LINUX_ARM_ARCH__ >= 5 | ||||
| 	COPROCESSOR_INSTRUCTIONS_MC_MR("",e) | ||||
| #endif | ||||
| 	TEST_UNSUPPORTED("svc	0") | ||||
| 	TEST_UNSUPPORTED("svc	0xffffff") | ||||
| 
 | ||||
|  | @ -1287,7 +1295,9 @@ void kprobe_arm_test_cases(void) | |||
| 	TEST(	"blx	__dummy_thumb_subroutine_odd") | ||||
| #endif /* __LINUX_ARM_ARCH__ >= 6 */ | ||||
| 
 | ||||
| #if __LINUX_ARM_ARCH__ >= 5 | ||||
| 	COPROCESSOR_INSTRUCTIONS_ST_LD("2",f) | ||||
| #endif | ||||
| #if __LINUX_ARM_ARCH__ >= 6 | ||||
| 	COPROCESSOR_INSTRUCTIONS_MC_MR("2",f) | ||||
| #endif | ||||
|  |  | |||
|  | @ -225,6 +225,7 @@ static int pre_handler_called; | |||
| static int post_handler_called; | ||||
| static int jprobe_func_called; | ||||
| static int kretprobe_handler_called; | ||||
| static int tests_failed; | ||||
| 
 | ||||
| #define FUNC_ARG1 0x12345678 | ||||
| #define FUNC_ARG2 0xabcdef | ||||
|  | @ -461,6 +462,13 @@ static int run_api_tests(long (*func)(long, long)) | |||
| 
 | ||||
| 	pr_info("    jprobe\n"); | ||||
| 	ret = test_jprobe(func); | ||||
| #if defined(CONFIG_THUMB2_KERNEL) && !defined(MODULE) | ||||
| 	if (ret == -EINVAL) { | ||||
| 		pr_err("FAIL: Known longtime bug with jprobe on Thumb kernels\n"); | ||||
| 		tests_failed = ret; | ||||
| 		ret = 0; | ||||
| 	} | ||||
| #endif | ||||
| 	if (ret < 0) | ||||
| 		return ret; | ||||
| 
 | ||||
|  | @ -1671,6 +1679,8 @@ static int __init run_all_tests(void) | |||
| #endif | ||||
| 
 | ||||
| out: | ||||
| 	if (ret == 0) | ||||
| 		ret = tests_failed; | ||||
| 	if (ret == 0) | ||||
| 		pr_info("Finished kprobe tests OK\n"); | ||||
| 	else | ||||
|  |  | |||
|  | @ -341,12 +341,12 @@ static const union decode_item arm_cccc_000x_table[] = { | |||
| 	/* CMP (reg-shift reg)	cccc 0001 0101 xxxx xxxx xxxx 0xx1 xxxx */ | ||||
| 	/* CMN (reg-shift reg)	cccc 0001 0111 xxxx xxxx xxxx 0xx1 xxxx */ | ||||
| 	DECODE_EMULATEX	(0x0f900090, 0x01100010, PROBES_DATA_PROCESSING_REG, | ||||
| 						 REGS(ANY, 0, NOPC, 0, ANY)), | ||||
| 						 REGS(NOPC, 0, NOPC, 0, NOPC)), | ||||
| 
 | ||||
| 	/* MOV (reg-shift reg)	cccc 0001 101x xxxx xxxx xxxx 0xx1 xxxx */ | ||||
| 	/* MVN (reg-shift reg)	cccc 0001 111x xxxx xxxx xxxx 0xx1 xxxx */ | ||||
| 	DECODE_EMULATEX	(0x0fa00090, 0x01a00010, PROBES_DATA_PROCESSING_REG, | ||||
| 						 REGS(0, ANY, NOPC, 0, ANY)), | ||||
| 						 REGS(0, NOPC, NOPC, 0, NOPC)), | ||||
| 
 | ||||
| 	/* AND (reg-shift reg)	cccc 0000 000x xxxx xxxx xxxx 0xx1 xxxx */ | ||||
| 	/* EOR (reg-shift reg)	cccc 0000 001x xxxx xxxx xxxx 0xx1 xxxx */ | ||||
|  | @ -359,7 +359,7 @@ static const union decode_item arm_cccc_000x_table[] = { | |||
| 	/* ORR (reg-shift reg)	cccc 0001 100x xxxx xxxx xxxx 0xx1 xxxx */ | ||||
| 	/* BIC (reg-shift reg)	cccc 0001 110x xxxx xxxx xxxx 0xx1 xxxx */ | ||||
| 	DECODE_EMULATEX	(0x0e000090, 0x00000010, PROBES_DATA_PROCESSING_REG, | ||||
| 						 REGS(ANY, ANY, NOPC, 0, ANY)), | ||||
| 						 REGS(NOPC, NOPC, NOPC, 0, NOPC)), | ||||
| 
 | ||||
| 	DECODE_END | ||||
| }; | ||||
|  |  | |||
|  | @ -908,7 +908,7 @@ enum ptrace_syscall_dir { | |||
| 	PTRACE_SYSCALL_EXIT, | ||||
| }; | ||||
| 
 | ||||
| static int tracehook_report_syscall(struct pt_regs *regs, | ||||
| static void tracehook_report_syscall(struct pt_regs *regs, | ||||
| 				    enum ptrace_syscall_dir dir) | ||||
| { | ||||
| 	unsigned long ip; | ||||
|  | @ -926,7 +926,6 @@ static int tracehook_report_syscall(struct pt_regs *regs, | |||
| 		current_thread_info()->syscall = -1; | ||||
| 
 | ||||
| 	regs->ARM_ip = ip; | ||||
| 	return current_thread_info()->syscall; | ||||
| } | ||||
| 
 | ||||
| asmlinkage int syscall_trace_enter(struct pt_regs *regs, int scno) | ||||
|  | @ -938,7 +937,9 @@ asmlinkage int syscall_trace_enter(struct pt_regs *regs, int scno) | |||
| 		return -1; | ||||
| 
 | ||||
| 	if (test_thread_flag(TIF_SYSCALL_TRACE)) | ||||
| 		scno = tracehook_report_syscall(regs, PTRACE_SYSCALL_ENTER); | ||||
| 		tracehook_report_syscall(regs, PTRACE_SYSCALL_ENTER); | ||||
| 
 | ||||
| 	scno = current_thread_info()->syscall; | ||||
| 
 | ||||
| 	if (test_thread_flag(TIF_SYSCALL_TRACEPOINT)) | ||||
| 		trace_sys_enter(regs, scno); | ||||
|  |  | |||
|  | @ -275,7 +275,7 @@ void store_cpu_topology(unsigned int cpuid) | |||
| 		cpu_topology[cpuid].socket_id, mpidr); | ||||
| } | ||||
| 
 | ||||
| static inline const int cpu_corepower_flags(void) | ||||
| static inline int cpu_corepower_flags(void) | ||||
| { | ||||
| 	return SD_SHARE_PKG_RESOURCES  | SD_SHARE_POWERDOMAIN; | ||||
| } | ||||
|  |  | |||
|  | @ -173,10 +173,8 @@ static struct platform_device exynos_cpuidle = { | |||
| 
 | ||||
| void __init exynos_cpuidle_init(void) | ||||
| { | ||||
| 	if (soc_is_exynos5440()) | ||||
| 		return; | ||||
| 
 | ||||
| 	platform_device_register(&exynos_cpuidle); | ||||
| 	if (soc_is_exynos4210() || soc_is_exynos5250()) | ||||
| 		platform_device_register(&exynos_cpuidle); | ||||
| } | ||||
| 
 | ||||
| void __init exynos_cpufreq_init(void) | ||||
|  | @ -297,7 +295,7 @@ static void __init exynos_dt_machine_init(void) | |||
| 	 * This is called from smp_prepare_cpus if we've built for SMP, but | ||||
| 	 * we still need to set it up for PM and firmware ops if not. | ||||
| 	 */ | ||||
| 	if (!IS_ENABLED(SMP)) | ||||
| 	if (!IS_ENABLED(CONFIG_SMP)) | ||||
| 		exynos_sysram_init(); | ||||
| 
 | ||||
| 	exynos_cpuidle_init(); | ||||
|  |  | |||
|  | @ -57,8 +57,13 @@ static int exynos_set_cpu_boot_addr(int cpu, unsigned long boot_addr) | |||
| 
 | ||||
| 	boot_reg = sysram_ns_base_addr + 0x1c; | ||||
| 
 | ||||
| 	if (!soc_is_exynos4212() && !soc_is_exynos3250()) | ||||
| 		boot_reg += 4*cpu; | ||||
| 	/*
 | ||||
| 	 * Almost all Exynos-series of SoCs that run in secure mode don't need | ||||
| 	 * additional offset for every CPU, with Exynos4412 being the only | ||||
| 	 * exception. | ||||
| 	 */ | ||||
| 	if (soc_is_exynos4412()) | ||||
| 		boot_reg += 4 * cpu; | ||||
| 
 | ||||
| 	__raw_writel(boot_addr, boot_reg); | ||||
| 	return 0; | ||||
|  |  | |||
|  | @ -17,6 +17,7 @@ | |||
| #include <linux/err.h> | ||||
| #include <linux/slab.h> | ||||
| #include <linux/pm_domain.h> | ||||
| #include <linux/clk.h> | ||||
| #include <linux/delay.h> | ||||
| #include <linux/of_address.h> | ||||
| #include <linux/of_platform.h> | ||||
|  | @ -24,6 +25,8 @@ | |||
| 
 | ||||
| #include "regs-pmu.h" | ||||
| 
 | ||||
| #define MAX_CLK_PER_DOMAIN	4 | ||||
| 
 | ||||
| /*
 | ||||
|  * Exynos specific wrapper around the generic power domain | ||||
|  */ | ||||
|  | @ -32,6 +35,9 @@ struct exynos_pm_domain { | |||
| 	char const *name; | ||||
| 	bool is_off; | ||||
| 	struct generic_pm_domain pd; | ||||
| 	struct clk *oscclk; | ||||
| 	struct clk *clk[MAX_CLK_PER_DOMAIN]; | ||||
| 	struct clk *pclk[MAX_CLK_PER_DOMAIN]; | ||||
| }; | ||||
| 
 | ||||
| static int exynos_pd_power(struct generic_pm_domain *domain, bool power_on) | ||||
|  | @ -44,6 +50,19 @@ static int exynos_pd_power(struct generic_pm_domain *domain, bool power_on) | |||
| 	pd = container_of(domain, struct exynos_pm_domain, pd); | ||||
| 	base = pd->base; | ||||
| 
 | ||||
| 	/* Set oscclk before powering off a domain*/ | ||||
| 	if (!power_on) { | ||||
| 		int i; | ||||
| 
 | ||||
| 		for (i = 0; i < MAX_CLK_PER_DOMAIN; i++) { | ||||
| 			if (IS_ERR(pd->clk[i])) | ||||
| 				break; | ||||
| 			if (clk_set_parent(pd->clk[i], pd->oscclk)) | ||||
| 				pr_err("%s: error setting oscclk as parent to clock %d\n", | ||||
| 						pd->name, i); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	pwr = power_on ? S5P_INT_LOCAL_PWR_EN : 0; | ||||
| 	__raw_writel(pwr, base); | ||||
| 
 | ||||
|  | @ -60,6 +79,20 @@ static int exynos_pd_power(struct generic_pm_domain *domain, bool power_on) | |||
| 		cpu_relax(); | ||||
| 		usleep_range(80, 100); | ||||
| 	} | ||||
| 
 | ||||
| 	/* Restore clocks after powering on a domain*/ | ||||
| 	if (power_on) { | ||||
| 		int i; | ||||
| 
 | ||||
| 		for (i = 0; i < MAX_CLK_PER_DOMAIN; i++) { | ||||
| 			if (IS_ERR(pd->clk[i])) | ||||
| 				break; | ||||
| 			if (clk_set_parent(pd->clk[i], pd->pclk[i])) | ||||
| 				pr_err("%s: error setting parent to clock%d\n", | ||||
| 						pd->name, i); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
|  | @ -152,9 +185,11 @@ static __init int exynos4_pm_init_power_domain(void) | |||
| 
 | ||||
| 	for_each_compatible_node(np, NULL, "samsung,exynos4210-pd") { | ||||
| 		struct exynos_pm_domain *pd; | ||||
| 		int on; | ||||
| 		int on, i; | ||||
| 		struct device *dev; | ||||
| 
 | ||||
| 		pdev = of_find_device_by_node(np); | ||||
| 		dev = &pdev->dev; | ||||
| 
 | ||||
| 		pd = kzalloc(sizeof(*pd), GFP_KERNEL); | ||||
| 		if (!pd) { | ||||
|  | @ -170,6 +205,30 @@ static __init int exynos4_pm_init_power_domain(void) | |||
| 		pd->pd.power_on = exynos_pd_power_on; | ||||
| 		pd->pd.of_node = np; | ||||
| 
 | ||||
| 		pd->oscclk = clk_get(dev, "oscclk"); | ||||
| 		if (IS_ERR(pd->oscclk)) | ||||
| 			goto no_clk; | ||||
| 
 | ||||
| 		for (i = 0; i < MAX_CLK_PER_DOMAIN; i++) { | ||||
| 			char clk_name[8]; | ||||
| 
 | ||||
| 			snprintf(clk_name, sizeof(clk_name), "clk%d", i); | ||||
| 			pd->clk[i] = clk_get(dev, clk_name); | ||||
| 			if (IS_ERR(pd->clk[i])) | ||||
| 				break; | ||||
| 			snprintf(clk_name, sizeof(clk_name), "pclk%d", i); | ||||
| 			pd->pclk[i] = clk_get(dev, clk_name); | ||||
| 			if (IS_ERR(pd->pclk[i])) { | ||||
| 				clk_put(pd->clk[i]); | ||||
| 				pd->clk[i] = ERR_PTR(-EINVAL); | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		if (IS_ERR(pd->clk[0])) | ||||
| 			clk_put(pd->oscclk); | ||||
| 
 | ||||
| no_clk: | ||||
| 		platform_set_drvdata(pdev, pd); | ||||
| 
 | ||||
| 		on = __raw_readl(pd->base + 0x4) & S5P_INT_LOCAL_PWR_EN; | ||||
|  |  | |||
|  | @ -67,8 +67,12 @@ static void clk_gate2_disable(struct clk_hw *hw) | |||
| 
 | ||||
| 	spin_lock_irqsave(gate->lock, flags); | ||||
| 
 | ||||
| 	if (gate->share_count && --(*gate->share_count) > 0) | ||||
| 		goto out; | ||||
| 	if (gate->share_count) { | ||||
| 		if (WARN_ON(*gate->share_count == 0)) | ||||
| 			goto out; | ||||
| 		else if (--(*gate->share_count) > 0) | ||||
| 			goto out; | ||||
| 	} | ||||
| 
 | ||||
| 	reg = readl(gate->reg); | ||||
| 	reg &= ~(3 << gate->bit_idx); | ||||
|  | @ -78,19 +82,26 @@ out: | |||
| 	spin_unlock_irqrestore(gate->lock, flags); | ||||
| } | ||||
| 
 | ||||
| static int clk_gate2_is_enabled(struct clk_hw *hw) | ||||
| static int clk_gate2_reg_is_enabled(void __iomem *reg, u8 bit_idx) | ||||
| { | ||||
| 	u32 reg; | ||||
| 	struct clk_gate2 *gate = to_clk_gate2(hw); | ||||
| 	u32 val = readl(reg); | ||||
| 
 | ||||
| 	reg = readl(gate->reg); | ||||
| 
 | ||||
| 	if (((reg >> gate->bit_idx) & 1) == 1) | ||||
| 	if (((val >> bit_idx) & 1) == 1) | ||||
| 		return 1; | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static int clk_gate2_is_enabled(struct clk_hw *hw) | ||||
| { | ||||
| 	struct clk_gate2 *gate = to_clk_gate2(hw); | ||||
| 
 | ||||
| 	if (gate->share_count) | ||||
| 		return !!(*gate->share_count); | ||||
| 	else | ||||
| 		return clk_gate2_reg_is_enabled(gate->reg, gate->bit_idx); | ||||
| } | ||||
| 
 | ||||
| static struct clk_ops clk_gate2_ops = { | ||||
| 	.enable = clk_gate2_enable, | ||||
| 	.disable = clk_gate2_disable, | ||||
|  | @ -116,6 +127,10 @@ struct clk *clk_register_gate2(struct device *dev, const char *name, | |||
| 	gate->bit_idx = bit_idx; | ||||
| 	gate->flags = clk_gate2_flags; | ||||
| 	gate->lock = lock; | ||||
| 
 | ||||
| 	/* Initialize share_count per hardware state */ | ||||
| 	if (share_count) | ||||
| 		*share_count = clk_gate2_reg_is_enabled(reg, bit_idx) ? 1 : 0; | ||||
| 	gate->share_count = share_count; | ||||
| 
 | ||||
| 	init.name = name; | ||||
|  |  | |||
|  | @ -7,7 +7,7 @@ CFLAGS_pmsu.o			:= -march=armv7-a | |||
| obj-y				 += system-controller.o mvebu-soc-id.o | ||||
| 
 | ||||
| ifeq ($(CONFIG_MACH_MVEBU_V7),y) | ||||
| obj-y				 += cpu-reset.o board-v7.o coherency.o coherency_ll.o pmsu.o | ||||
| obj-y				 += cpu-reset.o board-v7.o coherency.o coherency_ll.o pmsu.o pmsu_ll.o | ||||
| obj-$(CONFIG_SMP)		 += platsmp.o headsmp.o platsmp-a9.o headsmp-a9.o | ||||
| obj-$(CONFIG_HOTPLUG_CPU)	 += hotplug.o | ||||
| endif | ||||
|  |  | |||
|  | @ -23,6 +23,7 @@ | |||
| #include <linux/mbus.h> | ||||
| #include <linux/signal.h> | ||||
| #include <linux/slab.h> | ||||
| #include <linux/irqchip.h> | ||||
| #include <asm/hardware/cache-l2x0.h> | ||||
| #include <asm/mach/arch.h> | ||||
| #include <asm/mach/map.h> | ||||
|  | @ -71,17 +72,23 @@ static int armada_375_external_abort_wa(unsigned long addr, unsigned int fsr, | |||
| 	return 1; | ||||
| } | ||||
| 
 | ||||
| static void __init mvebu_timer_and_clk_init(void) | ||||
| static void __init mvebu_init_irq(void) | ||||
| { | ||||
| 	of_clk_init(NULL); | ||||
| 	clocksource_of_init(); | ||||
| 	irqchip_init(); | ||||
| 	mvebu_scu_enable(); | ||||
| 	coherency_init(); | ||||
| 	BUG_ON(mvebu_mbus_dt_init(coherency_available())); | ||||
| } | ||||
| 
 | ||||
| 	if (of_machine_is_compatible("marvell,armada375")) | ||||
| 		hook_fault_code(16 + 6, armada_375_external_abort_wa, SIGBUS, 0, | ||||
| 				"imprecise external abort"); | ||||
| static void __init external_abort_quirk(void) | ||||
| { | ||||
| 	u32 dev, rev; | ||||
| 
 | ||||
| 	if (mvebu_get_soc_id(&dev, &rev) == 0 && rev > ARMADA_375_Z1_REV) | ||||
| 		return; | ||||
| 
 | ||||
| 	hook_fault_code(16 + 6, armada_375_external_abort_wa, SIGBUS, 0, | ||||
| 			"imprecise external abort"); | ||||
| } | ||||
| 
 | ||||
| static void __init i2c_quirk(void) | ||||
|  | @ -169,8 +176,10 @@ static void __init mvebu_dt_init(void) | |||
| { | ||||
| 	if (of_machine_is_compatible("plathome,openblocks-ax3-4")) | ||||
| 		i2c_quirk(); | ||||
| 	if (of_machine_is_compatible("marvell,a375-db")) | ||||
| 	if (of_machine_is_compatible("marvell,a375-db")) { | ||||
| 		external_abort_quirk(); | ||||
| 		thermal_quirk(); | ||||
| 	} | ||||
| 
 | ||||
| 	of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); | ||||
| } | ||||
|  | @ -185,7 +194,7 @@ DT_MACHINE_START(ARMADA_370_XP_DT, "Marvell Armada 370/XP (Device Tree)") | |||
| 	.l2c_aux_mask	= ~0, | ||||
| 	.smp		= smp_ops(armada_xp_smp_ops), | ||||
| 	.init_machine	= mvebu_dt_init, | ||||
| 	.init_time	= mvebu_timer_and_clk_init, | ||||
| 	.init_irq       = mvebu_init_irq, | ||||
| 	.restart	= mvebu_restart, | ||||
| 	.dt_compat	= armada_370_xp_dt_compat, | ||||
| MACHINE_END | ||||
|  | @ -198,7 +207,7 @@ static const char * const armada_375_dt_compat[] = { | |||
| DT_MACHINE_START(ARMADA_375_DT, "Marvell Armada 375 (Device Tree)") | ||||
| 	.l2c_aux_val	= 0, | ||||
| 	.l2c_aux_mask	= ~0, | ||||
| 	.init_time	= mvebu_timer_and_clk_init, | ||||
| 	.init_irq       = mvebu_init_irq, | ||||
| 	.init_machine	= mvebu_dt_init, | ||||
| 	.restart	= mvebu_restart, | ||||
| 	.dt_compat	= armada_375_dt_compat, | ||||
|  | @ -213,7 +222,7 @@ static const char * const armada_38x_dt_compat[] = { | |||
| DT_MACHINE_START(ARMADA_38X_DT, "Marvell Armada 380/385 (Device Tree)") | ||||
| 	.l2c_aux_val	= 0, | ||||
| 	.l2c_aux_mask	= ~0, | ||||
| 	.init_time	= mvebu_timer_and_clk_init, | ||||
| 	.init_irq       = mvebu_init_irq, | ||||
| 	.restart	= mvebu_restart, | ||||
| 	.dt_compat	= armada_38x_dt_compat, | ||||
| MACHINE_END | ||||
|  |  | |||
|  | @ -66,6 +66,8 @@ static void __iomem *pmsu_mp_base; | |||
| extern void ll_disable_coherency(void); | ||||
| extern void ll_enable_coherency(void); | ||||
| 
 | ||||
| extern void armada_370_xp_cpu_resume(void); | ||||
| 
 | ||||
| static struct platform_device armada_xp_cpuidle_device = { | ||||
| 	.name = "cpuidle-armada-370-xp", | ||||
| }; | ||||
|  | @ -140,13 +142,6 @@ static void armada_370_xp_pmsu_enable_l2_powerdown_onidle(void) | |||
| 	writel(reg, pmsu_mp_base + L2C_NFABRIC_PM_CTL); | ||||
| } | ||||
| 
 | ||||
| static void armada_370_xp_cpu_resume(void) | ||||
| { | ||||
| 	asm volatile("bl    ll_add_cpu_to_smp_group\n\t" | ||||
| 		     "bl    ll_enable_coherency\n\t" | ||||
| 		     "b	    cpu_resume\n\t"); | ||||
| } | ||||
| 
 | ||||
| /* No locking is needed because we only access per-CPU registers */ | ||||
| void armada_370_xp_pmsu_idle_prepare(bool deepidle) | ||||
| { | ||||
|  |  | |||
							
								
								
									
										25
									
								
								arch/arm/mach-mvebu/pmsu_ll.S
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								arch/arm/mach-mvebu/pmsu_ll.S
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,25 @@ | |||
| /* | ||||
|  * Copyright (C) 2014 Marvell | ||||
|  * | ||||
|  * Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
 | ||||
|  * Gregory Clement <gregory.clement@free-electrons.com>
 | ||||
|  * | ||||
|  * This file is licensed under the terms of the GNU General Public | ||||
|  * License version 2.  This program is licensed "as is" without any | ||||
|  * warranty of any kind, whether express or implied. | ||||
|  */ | ||||
| 
 | ||||
| #include <linux/linkage.h> | ||||
| #include <asm/assembler.h> | ||||
| 
 | ||||
| /* | ||||
|  * This is the entry point through which CPUs exiting cpuidle deep | ||||
|  * idle state are going. | ||||
|  */ | ||||
| ENTRY(armada_370_xp_cpu_resume) | ||||
| ARM_BE8(setend	be )			@ go BE8 if entered LE
 | ||||
| 	bl	ll_add_cpu_to_smp_group | ||||
| 	bl	ll_enable_coherency | ||||
| 	b	cpu_resume | ||||
| ENDPROC(armada_370_xp_cpu_resume) | ||||
| 
 | ||||
|  | @ -110,14 +110,16 @@ obj-y					+= prm_common.o cm_common.o | |||
| obj-$(CONFIG_ARCH_OMAP2)		+= prm2xxx_3xxx.o prm2xxx.o cm2xxx.o | ||||
| obj-$(CONFIG_ARCH_OMAP3)		+= prm2xxx_3xxx.o prm3xxx.o cm3xxx.o | ||||
| obj-$(CONFIG_ARCH_OMAP3)		+= vc3xxx_data.o vp3xxx_data.o | ||||
| obj-$(CONFIG_SOC_AM33XX)		+= prm33xx.o cm33xx.o | ||||
| omap-prcm-4-5-common			=  cminst44xx.o cm44xx.o prm44xx.o \
 | ||||
| 					   prcm_mpu44xx.o prminst44xx.o \
 | ||||
| 					   vc44xx_data.o vp44xx_data.o | ||||
| obj-$(CONFIG_ARCH_OMAP4)		+= $(omap-prcm-4-5-common) | ||||
| obj-$(CONFIG_SOC_OMAP5)			+= $(omap-prcm-4-5-common) | ||||
| obj-$(CONFIG_SOC_DRA7XX)		+= $(omap-prcm-4-5-common) | ||||
| obj-$(CONFIG_SOC_AM43XX)		+= $(omap-prcm-4-5-common) | ||||
| am33xx-43xx-prcm-common			+= prm33xx.o cm33xx.o | ||||
| obj-$(CONFIG_SOC_AM33XX)		+= $(am33xx-43xx-prcm-common) | ||||
| obj-$(CONFIG_SOC_AM43XX)		+= $(omap-prcm-4-5-common) \
 | ||||
| 					   $(am33xx-43xx-prcm-common) | ||||
| 
 | ||||
| # OMAP voltage domains
 | ||||
| voltagedomain-common			:= voltage.o vc.o vp.o | ||||
|  |  | |||
|  | @ -76,7 +76,7 @@ | |||
|  * (assuming that it is counting N upwards), or -2 if the enclosing loop | ||||
|  * should skip to the next iteration (again assuming N is increasing). | ||||
|  */ | ||||
| static int _dpll_test_fint(struct clk_hw_omap *clk, u8 n) | ||||
| static int _dpll_test_fint(struct clk_hw_omap *clk, unsigned int n) | ||||
| { | ||||
| 	struct dpll_data *dd; | ||||
| 	long fint, fint_min, fint_max; | ||||
|  |  | |||
|  | @ -26,11 +26,14 @@ | |||
| #define OMAP3430_EN_WDT3_SHIFT				12 | ||||
| #define OMAP3430_CM_FCLKEN_IVA2_EN_IVA2_MASK		(1 << 0) | ||||
| #define OMAP3430_CM_FCLKEN_IVA2_EN_IVA2_SHIFT		0 | ||||
| #define OMAP3430_IVA2_DPLL_FREQSEL_SHIFT		4 | ||||
| #define OMAP3430_IVA2_DPLL_FREQSEL_MASK			(0xf << 4) | ||||
| #define OMAP3430_EN_IVA2_DPLL_DRIFTGUARD_SHIFT		3 | ||||
| #define OMAP3430_EN_IVA2_DPLL_SHIFT			0 | ||||
| #define OMAP3430_EN_IVA2_DPLL_MASK			(0x7 << 0) | ||||
| #define OMAP3430_ST_IVA2_SHIFT				0 | ||||
| #define OMAP3430_ST_IVA2_CLK_MASK			(1 << 0) | ||||
| #define OMAP3430_AUTO_IVA2_DPLL_SHIFT			0 | ||||
| #define OMAP3430_AUTO_IVA2_DPLL_MASK			(0x7 << 0) | ||||
| #define OMAP3430_IVA2_CLK_SRC_SHIFT			19 | ||||
| #define OMAP3430_IVA2_CLK_SRC_WIDTH			3 | ||||
|  |  | |||
|  | @ -380,7 +380,7 @@ void am33xx_cm_clkdm_disable_hwsup(u16 inst, u16 cdoffs); | |||
| void am33xx_cm_clkdm_force_sleep(u16 inst, u16 cdoffs); | ||||
| void am33xx_cm_clkdm_force_wakeup(u16 inst, u16 cdoffs); | ||||
| 
 | ||||
| #ifdef CONFIG_SOC_AM33XX | ||||
| #if defined(CONFIG_SOC_AM33XX) || defined(CONFIG_SOC_AM43XX) | ||||
| extern int am33xx_cm_wait_module_idle(u16 inst, s16 cdoffs, | ||||
| 					u16 clkctrl_offs); | ||||
| extern void am33xx_cm_module_enable(u8 mode, u16 inst, s16 cdoffs, | ||||
|  |  | |||
|  | @ -162,7 +162,8 @@ static inline void omap3xxx_restart(enum reboot_mode mode, const char *cmd) | |||
| } | ||||
| #endif | ||||
| 
 | ||||
| #if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5) | ||||
| #if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5) || \ | ||||
| 	defined(CONFIG_SOC_DRA7XX) || defined(CONFIG_SOC_AM43XX) | ||||
| void omap44xx_restart(enum reboot_mode mode, const char *cmd); | ||||
| #else | ||||
| static inline void omap44xx_restart(enum reboot_mode mode, const char *cmd) | ||||
|  | @ -248,7 +249,6 @@ static inline void __iomem *omap4_get_scu_base(void) | |||
| } | ||||
| #endif | ||||
| 
 | ||||
| extern void __init gic_init_irq(void); | ||||
| extern void gic_dist_disable(void); | ||||
| extern void gic_dist_enable(void); | ||||
| extern bool gic_dist_disabled(void); | ||||
|  |  | |||
|  | @ -297,33 +297,6 @@ static void omap_init_audio(void) | |||
| static inline void omap_init_audio(void) {} | ||||
| #endif | ||||
| 
 | ||||
| #if defined(CONFIG_SND_OMAP_SOC_OMAP_HDMI) || \ | ||||
| 		defined(CONFIG_SND_OMAP_SOC_OMAP_HDMI_MODULE) | ||||
| 
 | ||||
| static struct platform_device omap_hdmi_audio = { | ||||
| 	.name	= "omap-hdmi-audio", | ||||
| 	.id	= -1, | ||||
| }; | ||||
| 
 | ||||
| static void __init omap_init_hdmi_audio(void) | ||||
| { | ||||
| 	struct omap_hwmod *oh; | ||||
| 	struct platform_device *pdev; | ||||
| 
 | ||||
| 	oh = omap_hwmod_lookup("dss_hdmi"); | ||||
| 	if (!oh) | ||||
| 		return; | ||||
| 
 | ||||
| 	pdev = omap_device_build("omap-hdmi-audio-dai", -1, oh, NULL, 0); | ||||
| 	WARN(IS_ERR(pdev), | ||||
| 	     "Can't build omap_device for omap-hdmi-audio-dai.\n"); | ||||
| 
 | ||||
| 	platform_device_register(&omap_hdmi_audio); | ||||
| } | ||||
| #else | ||||
| static inline void omap_init_hdmi_audio(void) {} | ||||
| #endif | ||||
| 
 | ||||
| #if defined(CONFIG_SPI_OMAP24XX) || defined(CONFIG_SPI_OMAP24XX_MODULE) | ||||
| 
 | ||||
| #include <linux/platform_data/spi-omap2-mcspi.h> | ||||
|  | @ -459,7 +432,6 @@ static int __init omap2_init_devices(void) | |||
| 	 */ | ||||
| 	omap_init_audio(); | ||||
| 	omap_init_camera(); | ||||
| 	omap_init_hdmi_audio(); | ||||
| 	omap_init_mbox(); | ||||
| 	/* If dtb is there, the devices will be created dynamically */ | ||||
| 	if (!of_have_populated_dt()) { | ||||
|  |  | |||
|  | @ -29,6 +29,7 @@ | |||
| #ifdef CONFIG_TIDSPBRIDGE_DVFS | ||||
| #include "omap-pm.h" | ||||
| #endif | ||||
| #include "soc.h" | ||||
| 
 | ||||
| #include <linux/platform_data/dsp-omap.h> | ||||
| 
 | ||||
|  | @ -59,6 +60,9 @@ void __init omap_dsp_reserve_sdram_memblock(void) | |||
| 	phys_addr_t size = CONFIG_TIDSPBRIDGE_MEMPOOL_SIZE; | ||||
| 	phys_addr_t paddr; | ||||
| 
 | ||||
| 	if (!cpu_is_omap34xx()) | ||||
| 		return; | ||||
| 
 | ||||
| 	if (!size) | ||||
| 		return; | ||||
| 
 | ||||
|  | @ -83,6 +87,9 @@ static int __init omap_dsp_init(void) | |||
| 	int err = -ENOMEM; | ||||
| 	struct omap_dsp_platform_data *pdata = &omap_dsp_pdata; | ||||
| 
 | ||||
| 	if (!cpu_is_omap34xx()) | ||||
| 		return 0; | ||||
| 
 | ||||
| 	pdata->phys_mempool_base = omap_dsp_get_mempool_base(); | ||||
| 
 | ||||
| 	if (pdata->phys_mempool_base) { | ||||
|  | @ -115,6 +122,9 @@ module_init(omap_dsp_init); | |||
| 
 | ||||
| static void __exit omap_dsp_exit(void) | ||||
| { | ||||
| 	if (!cpu_is_omap34xx()) | ||||
| 		return; | ||||
| 
 | ||||
| 	platform_device_unregister(omap_dsp_pdev); | ||||
| } | ||||
| module_exit(omap_dsp_exit); | ||||
|  |  | |||
|  | @ -1615,7 +1615,7 @@ static int gpmc_probe_dt(struct platform_device *pdev) | |||
| 		return ret; | ||||
| 	} | ||||
| 
 | ||||
| 	for_each_child_of_node(pdev->dev.of_node, child) { | ||||
| 	for_each_available_child_of_node(pdev->dev.of_node, child) { | ||||
| 
 | ||||
| 		if (!child->name) | ||||
| 			continue; | ||||
|  |  | |||
|  | @ -649,6 +649,18 @@ void __init dra7xxx_check_revision(void) | |||
| 		} | ||||
| 		break; | ||||
| 
 | ||||
| 	case 0xb9bc: | ||||
| 		switch (rev) { | ||||
| 		case 0: | ||||
| 			omap_revision = DRA722_REV_ES1_0; | ||||
| 			break; | ||||
| 		default: | ||||
| 			/* If we have no new revisions */ | ||||
| 			omap_revision = DRA722_REV_ES1_0; | ||||
| 			break; | ||||
| 		} | ||||
| 		break; | ||||
| 
 | ||||
| 	default: | ||||
| 		/* Unknown default to latest silicon rev as default*/ | ||||
| 		pr_warn("%s: unknown idcode=0x%08x (hawkeye=0x%08x,rev=0x%d)\n", | ||||
|  |  | |||
|  | @ -183,8 +183,10 @@ static int __init _omap_mux_get_by_name(struct omap_mux_partition *partition, | |||
| 		m0_entry = mux->muxnames[0]; | ||||
| 
 | ||||
| 		/* First check for full name in mode0.muxmode format */ | ||||
| 		if (mode0_len && strncmp(muxname, m0_entry, mode0_len)) | ||||
| 			continue; | ||||
| 		if (mode0_len) | ||||
| 			if (strncmp(muxname, m0_entry, mode0_len) || | ||||
| 			    (strlen(m0_entry) != mode0_len)) | ||||
| 				continue; | ||||
| 
 | ||||
| 		/* Then check for muxmode only */ | ||||
| 		for (i = 0; i < OMAP_MUX_NR_MODES; i++) { | ||||
|  |  | |||
|  | @ -102,26 +102,6 @@ void __init omap_barriers_init(void) | |||
| {} | ||||
| #endif | ||||
| 
 | ||||
| void __init gic_init_irq(void) | ||||
| { | ||||
| 	void __iomem *omap_irq_base; | ||||
| 
 | ||||
| 	/* Static mapping, never released */ | ||||
| 	gic_dist_base_addr = ioremap(OMAP44XX_GIC_DIST_BASE, SZ_4K); | ||||
| 	BUG_ON(!gic_dist_base_addr); | ||||
| 
 | ||||
| 	twd_base = ioremap(OMAP44XX_LOCAL_TWD_BASE, SZ_4K); | ||||
| 	BUG_ON(!twd_base); | ||||
| 
 | ||||
| 	/* Static mapping, never released */ | ||||
| 	omap_irq_base = ioremap(OMAP44XX_GIC_CPU_BASE, SZ_512); | ||||
| 	BUG_ON(!omap_irq_base); | ||||
| 
 | ||||
| 	omap_wakeupgen_init(); | ||||
| 
 | ||||
| 	gic_init(0, 29, gic_dist_base_addr, omap_irq_base); | ||||
| } | ||||
| 
 | ||||
| void gic_dist_disable(void) | ||||
| { | ||||
| 	if (gic_dist_base_addr) | ||||
|  |  | |||
|  | @ -4251,9 +4251,9 @@ void __init omap_hwmod_init(void) | |||
| 		soc_ops.enable_module = _omap4_enable_module; | ||||
| 		soc_ops.disable_module = _omap4_disable_module; | ||||
| 		soc_ops.wait_target_ready = _omap4_wait_target_ready; | ||||
| 		soc_ops.assert_hardreset = _omap4_assert_hardreset; | ||||
| 		soc_ops.deassert_hardreset = _omap4_deassert_hardreset; | ||||
| 		soc_ops.is_hardreset_asserted = _omap4_is_hardreset_asserted; | ||||
| 		soc_ops.assert_hardreset = _am33xx_assert_hardreset; | ||||
| 		soc_ops.deassert_hardreset = _am33xx_deassert_hardreset; | ||||
| 		soc_ops.is_hardreset_asserted = _am33xx_is_hardreset_asserted; | ||||
| 		soc_ops.init_clkdm = _init_clkdm; | ||||
| 	} else if (soc_is_am33xx()) { | ||||
| 		soc_ops.enable_module = _am33xx_enable_module; | ||||
|  |  | |||
|  | @ -2020,6 +2020,77 @@ static struct omap_hwmod omap54xx_wd_timer2_hwmod = { | |||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| /*
 | ||||
|  * 'ocp2scp' class | ||||
|  * bridge to transform ocp interface protocol to scp (serial control port) | ||||
|  * protocol | ||||
|  */ | ||||
| /* ocp2scp3 */ | ||||
| static struct omap_hwmod omap54xx_ocp2scp3_hwmod; | ||||
| /* l4_cfg -> ocp2scp3 */ | ||||
| static struct omap_hwmod_ocp_if omap54xx_l4_cfg__ocp2scp3 = { | ||||
| 	.master		= &omap54xx_l4_cfg_hwmod, | ||||
| 	.slave		= &omap54xx_ocp2scp3_hwmod, | ||||
| 	.clk		= "l4_root_clk_div", | ||||
| 	.user		= OCP_USER_MPU | OCP_USER_SDMA, | ||||
| }; | ||||
| 
 | ||||
| static struct omap_hwmod omap54xx_ocp2scp3_hwmod = { | ||||
| 	.name		= "ocp2scp3", | ||||
| 	.class		= &omap54xx_ocp2scp_hwmod_class, | ||||
| 	.clkdm_name	= "l3init_clkdm", | ||||
| 	.prcm = { | ||||
| 		.omap4 = { | ||||
| 			.clkctrl_offs = OMAP54XX_CM_L3INIT_OCP2SCP3_CLKCTRL_OFFSET, | ||||
| 			.context_offs = OMAP54XX_RM_L3INIT_OCP2SCP3_CONTEXT_OFFSET, | ||||
| 			.modulemode   = MODULEMODE_HWCTRL, | ||||
| 		}, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| /*
 | ||||
|  * 'sata' class | ||||
|  * sata:  serial ata interface  gen2 compliant   ( 1 rx/ 1 tx) | ||||
|  */ | ||||
| 
 | ||||
| static struct omap_hwmod_class_sysconfig omap54xx_sata_sysc = { | ||||
| 	.sysc_offs	= 0x0000, | ||||
| 	.sysc_flags	= (SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE), | ||||
| 	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART | | ||||
| 			   SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO | | ||||
| 			   MSTANDBY_SMART | MSTANDBY_SMART_WKUP), | ||||
| 	.sysc_fields	= &omap_hwmod_sysc_type2, | ||||
| }; | ||||
| 
 | ||||
| static struct omap_hwmod_class omap54xx_sata_hwmod_class = { | ||||
| 	.name	= "sata", | ||||
| 	.sysc	= &omap54xx_sata_sysc, | ||||
| }; | ||||
| 
 | ||||
| /* sata */ | ||||
| static struct omap_hwmod omap54xx_sata_hwmod = { | ||||
| 	.name		= "sata", | ||||
| 	.class		= &omap54xx_sata_hwmod_class, | ||||
| 	.clkdm_name	= "l3init_clkdm", | ||||
| 	.flags		= HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY, | ||||
| 	.main_clk	= "func_48m_fclk", | ||||
| 	.mpu_rt_idx	= 1, | ||||
| 	.prcm = { | ||||
| 		.omap4 = { | ||||
| 			.clkctrl_offs = OMAP54XX_CM_L3INIT_SATA_CLKCTRL_OFFSET, | ||||
| 			.context_offs = OMAP54XX_RM_L3INIT_SATA_CONTEXT_OFFSET, | ||||
| 			.modulemode   = MODULEMODE_SWCTRL, | ||||
| 		}, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| /* l4_cfg -> sata */ | ||||
| static struct omap_hwmod_ocp_if omap54xx_l4_cfg__sata = { | ||||
| 	.master		= &omap54xx_l4_cfg_hwmod, | ||||
| 	.slave		= &omap54xx_sata_hwmod, | ||||
| 	.clk		= "l3_iclk_div", | ||||
| 	.user		= OCP_USER_MPU | OCP_USER_SDMA, | ||||
| }; | ||||
| 
 | ||||
| /*
 | ||||
|  * Interfaces | ||||
|  | @ -2765,6 +2836,8 @@ static struct omap_hwmod_ocp_if *omap54xx_hwmod_ocp_ifs[] __initdata = { | |||
| 	&omap54xx_l4_cfg__usb_tll_hs, | ||||
| 	&omap54xx_l4_cfg__usb_otg_ss, | ||||
| 	&omap54xx_l4_wkup__wd_timer2, | ||||
| 	&omap54xx_l4_cfg__ocp2scp3, | ||||
| 	&omap54xx_l4_cfg__sata, | ||||
| 	NULL, | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -1268,9 +1268,6 @@ static struct omap_hwmod_class dra7xx_sata_hwmod_class = { | |||
| }; | ||||
| 
 | ||||
| /* sata */ | ||||
| static struct omap_hwmod_opt_clk sata_opt_clks[] = { | ||||
| 	{ .role = "ref_clk", .clk = "sata_ref_clk" }, | ||||
| }; | ||||
| 
 | ||||
| static struct omap_hwmod dra7xx_sata_hwmod = { | ||||
| 	.name		= "sata", | ||||
|  | @ -1278,6 +1275,7 @@ static struct omap_hwmod dra7xx_sata_hwmod = { | |||
| 	.clkdm_name	= "l3init_clkdm", | ||||
| 	.flags		= HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY, | ||||
| 	.main_clk	= "func_48m_fclk", | ||||
| 	.mpu_rt_idx	= 1, | ||||
| 	.prcm = { | ||||
| 		.omap4 = { | ||||
| 			.clkctrl_offs = DRA7XX_CM_L3INIT_SATA_CLKCTRL_OFFSET, | ||||
|  | @ -1285,8 +1283,6 @@ static struct omap_hwmod dra7xx_sata_hwmod = { | |||
| 			.modulemode   = MODULEMODE_SWCTRL, | ||||
| 		}, | ||||
| 	}, | ||||
| 	.opt_clks	= sata_opt_clks, | ||||
| 	.opt_clks_cnt	= ARRAY_SIZE(sata_opt_clks), | ||||
| }; | ||||
| 
 | ||||
| /*
 | ||||
|  | @ -1731,8 +1727,20 @@ static struct omap_hwmod dra7xx_uart6_hwmod = { | |||
|  * | ||||
|  */ | ||||
| 
 | ||||
| static struct omap_hwmod_class_sysconfig dra7xx_usb_otg_ss_sysc = { | ||||
| 	.rev_offs	= 0x0000, | ||||
| 	.sysc_offs	= 0x0010, | ||||
| 	.sysc_flags	= (SYSC_HAS_DMADISABLE | SYSC_HAS_MIDLEMODE | | ||||
| 			   SYSC_HAS_SIDLEMODE), | ||||
| 	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART | | ||||
| 			   SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO | | ||||
| 			   MSTANDBY_SMART | MSTANDBY_SMART_WKUP), | ||||
| 	.sysc_fields	= &omap_hwmod_sysc_type2, | ||||
| }; | ||||
| 
 | ||||
| static struct omap_hwmod_class dra7xx_usb_otg_ss_hwmod_class = { | ||||
| 	.name	= "usb_otg_ss", | ||||
| 	.sysc	= &dra7xx_usb_otg_ss_sysc, | ||||
| }; | ||||
| 
 | ||||
| /* usb_otg_ss1 */ | ||||
|  |  | |||
|  | @ -35,6 +35,8 @@ | |||
| #define OMAP3430_LOGICSTATEST_MASK			(1 << 2) | ||||
| #define OMAP3430_LASTLOGICSTATEENTERED_MASK		(1 << 2) | ||||
| #define OMAP3430_LASTPOWERSTATEENTERED_MASK		(0x3 << 0) | ||||
| #define OMAP3430_GRPSEL_MCBSP5_MASK			(1 << 10) | ||||
| #define OMAP3430_GRPSEL_MCBSP1_MASK			(1 << 9) | ||||
| #define OMAP3630_GRPSEL_UART4_MASK			(1 << 18) | ||||
| #define OMAP3430_GRPSEL_GPIO6_MASK			(1 << 17) | ||||
| #define OMAP3430_GRPSEL_GPIO5_MASK			(1 << 16) | ||||
|  | @ -42,6 +44,10 @@ | |||
| #define OMAP3430_GRPSEL_GPIO3_MASK			(1 << 14) | ||||
| #define OMAP3430_GRPSEL_GPIO2_MASK			(1 << 13) | ||||
| #define OMAP3430_GRPSEL_UART3_MASK			(1 << 11) | ||||
| #define OMAP3430_GRPSEL_GPT8_MASK			(1 << 9) | ||||
| #define OMAP3430_GRPSEL_GPT7_MASK			(1 << 8) | ||||
| #define OMAP3430_GRPSEL_GPT6_MASK			(1 << 7) | ||||
| #define OMAP3430_GRPSEL_GPT5_MASK			(1 << 6) | ||||
| #define OMAP3430_GRPSEL_MCBSP4_MASK			(1 << 2) | ||||
| #define OMAP3430_GRPSEL_MCBSP3_MASK			(1 << 1) | ||||
| #define OMAP3430_GRPSEL_MCBSP2_MASK			(1 << 0) | ||||
|  |  | |||
|  | @ -462,6 +462,7 @@ IS_OMAP_TYPE(3430, 0x3430) | |||
| #define DRA7XX_CLASS		0x07000000 | ||||
| #define DRA752_REV_ES1_0	(DRA7XX_CLASS | (0x52 << 16) | (0x10 << 8)) | ||||
| #define DRA752_REV_ES1_1	(DRA7XX_CLASS | (0x52 << 16) | (0x11 << 8)) | ||||
| #define DRA722_REV_ES1_0	(DRA7XX_CLASS | (0x22 << 16) | (0x10 << 8)) | ||||
| 
 | ||||
| void omap2xxx_check_revision(void); | ||||
| void omap3xxx_check_revision(void); | ||||
|  |  | |||
|  | @ -329,6 +329,11 @@ static struct mtd_partition collie_partitions[] = { | |||
| 		.name		= "rootfs", | ||||
| 		.offset 	= MTDPART_OFS_APPEND, | ||||
| 		.size		= 0x00e20000, | ||||
| 	}, { | ||||
| 		.name		= "bootblock", | ||||
| 		.offset		= MTDPART_OFS_APPEND, | ||||
| 		.size		= 0x00020000, | ||||
| 		.mask_flags	= MTD_WRITEABLE | ||||
| 	} | ||||
| }; | ||||
| 
 | ||||
|  | @ -356,7 +361,7 @@ static void collie_flash_exit(void) | |||
| } | ||||
| 
 | ||||
| static struct flash_platform_data collie_flash_data = { | ||||
| 	.map_name	= "jedec_probe", | ||||
| 	.map_name	= "cfi_probe", | ||||
| 	.init		= collie_flash_init, | ||||
| 	.set_vpp	= collie_set_vpp, | ||||
| 	.exit		= collie_flash_exit, | ||||
|  |  | |||
|  | @ -12,8 +12,81 @@ | |||
| 
 | ||||
| #include <linux/clk-provider.h> | ||||
| #include <linux/clocksource.h> | ||||
| #include <linux/delay.h> | ||||
| #include <linux/kernel.h> | ||||
| #include <linux/init.h> | ||||
| #include <linux/of_address.h> | ||||
| #include <linux/of_irq.h> | ||||
| #include <linux/of_platform.h> | ||||
| #include <linux/io.h> | ||||
| #include <linux/reboot.h> | ||||
| 
 | ||||
| #include <asm/mach/arch.h> | ||||
| #include <asm/mach/map.h> | ||||
| #include <asm/system_misc.h> | ||||
| 
 | ||||
| #define SUN4I_WATCHDOG_CTRL_REG		0x00 | ||||
| #define SUN4I_WATCHDOG_CTRL_RESTART		BIT(0) | ||||
| #define SUN4I_WATCHDOG_MODE_REG		0x04 | ||||
| #define SUN4I_WATCHDOG_MODE_ENABLE		BIT(0) | ||||
| #define SUN4I_WATCHDOG_MODE_RESET_ENABLE	BIT(1) | ||||
| 
 | ||||
| #define SUN6I_WATCHDOG1_IRQ_REG		0x00 | ||||
| #define SUN6I_WATCHDOG1_CTRL_REG	0x10 | ||||
| #define SUN6I_WATCHDOG1_CTRL_RESTART		BIT(0) | ||||
| #define SUN6I_WATCHDOG1_CONFIG_REG	0x14 | ||||
| #define SUN6I_WATCHDOG1_CONFIG_RESTART		BIT(0) | ||||
| #define SUN6I_WATCHDOG1_CONFIG_IRQ		BIT(1) | ||||
| #define SUN6I_WATCHDOG1_MODE_REG	0x18 | ||||
| #define SUN6I_WATCHDOG1_MODE_ENABLE		BIT(0) | ||||
| 
 | ||||
| static void __iomem *wdt_base; | ||||
| 
 | ||||
| static void sun4i_restart(enum reboot_mode mode, const char *cmd) | ||||
| { | ||||
| 	if (!wdt_base) | ||||
| 		return; | ||||
| 
 | ||||
| 	/* Enable timer and set reset bit in the watchdog */ | ||||
| 	writel(SUN4I_WATCHDOG_MODE_ENABLE | SUN4I_WATCHDOG_MODE_RESET_ENABLE, | ||||
| 	       wdt_base + SUN4I_WATCHDOG_MODE_REG); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Restart the watchdog. The default (and lowest) interval | ||||
| 	 * value for the watchdog is 0.5s. | ||||
| 	 */ | ||||
| 	writel(SUN4I_WATCHDOG_CTRL_RESTART, wdt_base + SUN4I_WATCHDOG_CTRL_REG); | ||||
| 
 | ||||
| 	while (1) { | ||||
| 		mdelay(5); | ||||
| 		writel(SUN4I_WATCHDOG_MODE_ENABLE | SUN4I_WATCHDOG_MODE_RESET_ENABLE, | ||||
| 		       wdt_base + SUN4I_WATCHDOG_MODE_REG); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| static struct of_device_id sunxi_restart_ids[] = { | ||||
| 	{ .compatible = "allwinner,sun4i-a10-wdt" }, | ||||
| 	{ /*sentinel*/ } | ||||
| }; | ||||
| 
 | ||||
| static void sunxi_setup_restart(void) | ||||
| { | ||||
| 	struct device_node *np; | ||||
| 
 | ||||
| 	np = of_find_matching_node(NULL, sunxi_restart_ids); | ||||
| 	if (WARN(!np, "unable to setup watchdog restart")) | ||||
| 		return; | ||||
| 
 | ||||
| 	wdt_base = of_iomap(np, 0); | ||||
| 	WARN(!wdt_base, "failed to map watchdog base address"); | ||||
| } | ||||
| 
 | ||||
| static void __init sunxi_dt_init(void) | ||||
| { | ||||
| 	sunxi_setup_restart(); | ||||
| 
 | ||||
| 	of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); | ||||
| } | ||||
| 
 | ||||
| static const char * const sunxi_board_dt_compat[] = { | ||||
| 	"allwinner,sun4i-a10", | ||||
|  | @ -23,7 +96,9 @@ static const char * const sunxi_board_dt_compat[] = { | |||
| }; | ||||
| 
 | ||||
| DT_MACHINE_START(SUNXI_DT, "Allwinner A1X (Device Tree)") | ||||
| 	.init_machine	= sunxi_dt_init, | ||||
| 	.dt_compat	= sunxi_board_dt_compat, | ||||
| 	.restart	= sun4i_restart, | ||||
| MACHINE_END | ||||
| 
 | ||||
| static const char * const sun6i_board_dt_compat[] = { | ||||
|  | @ -51,5 +126,7 @@ static const char * const sun7i_board_dt_compat[] = { | |||
| }; | ||||
| 
 | ||||
| DT_MACHINE_START(SUN7I_DT, "Allwinner sun7i (A20) Family") | ||||
| 	.init_machine	= sunxi_dt_init, | ||||
| 	.dt_compat	= sun7i_board_dt_compat, | ||||
| 	.restart	= sun4i_restart, | ||||
| MACHINE_END | ||||
|  |  | |||
|  | @ -664,7 +664,7 @@ static int l2c310_cpu_enable_flz(struct notifier_block *nb, unsigned long act, v | |||
| 
 | ||||
| static void __init l2c310_enable(void __iomem *base, u32 aux, unsigned num_lock) | ||||
| { | ||||
| 	unsigned rev = readl_relaxed(base + L2X0_CACHE_ID) & L2X0_CACHE_ID_PART_MASK; | ||||
| 	unsigned rev = readl_relaxed(base + L2X0_CACHE_ID) & L2X0_CACHE_ID_RTL_MASK; | ||||
| 	bool cortex_a9 = read_cpuid_part_number() == ARM_CPU_PART_CORTEX_A9; | ||||
| 
 | ||||
| 	if (rev >= L310_CACHE_ID_RTL_R2P0) { | ||||
|  | @ -1068,6 +1068,33 @@ static const struct l2c_init_data of_l2c310_data __initconst = { | |||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| /*
 | ||||
|  * This is a variant of the of_l2c310_data with .sync set to | ||||
|  * NULL. Outer sync operations are not needed when the system is I/O | ||||
|  * coherent, and potentially harmful in certain situations (PCIe/PL310 | ||||
|  * deadlock on Armada 375/38x due to hardware I/O coherency). The | ||||
|  * other operations are kept because they are infrequent (therefore do | ||||
|  * not cause the deadlock in practice) and needed for secondary CPU | ||||
|  * boot and other power management activities. | ||||
|  */ | ||||
| static const struct l2c_init_data of_l2c310_coherent_data __initconst = { | ||||
| 	.type = "L2C-310 Coherent", | ||||
| 	.way_size_0 = SZ_8K, | ||||
| 	.num_lock = 8, | ||||
| 	.of_parse = l2c310_of_parse, | ||||
| 	.enable = l2c310_enable, | ||||
| 	.fixup = l2c310_fixup, | ||||
| 	.save  = l2c310_save, | ||||
| 	.outer_cache = { | ||||
| 		.inv_range   = l2c210_inv_range, | ||||
| 		.clean_range = l2c210_clean_range, | ||||
| 		.flush_range = l2c210_flush_range, | ||||
| 		.flush_all   = l2c210_flush_all, | ||||
| 		.disable     = l2c310_disable, | ||||
| 		.resume      = l2c310_resume, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| /*
 | ||||
|  * Note that the end addresses passed to Linux primitives are | ||||
|  * noninclusive, while the hardware cache range operations use | ||||
|  | @ -1487,6 +1514,10 @@ int __init l2x0_of_init(u32 aux_val, u32 aux_mask) | |||
| 
 | ||||
| 	data = of_match_node(l2x0_ids, np)->data; | ||||
| 
 | ||||
| 	if (of_device_is_compatible(np, "arm,pl310-cache") && | ||||
| 	    of_property_read_bool(np, "arm,io-coherent")) | ||||
| 		data = &of_l2c310_coherent_data; | ||||
| 
 | ||||
| 	old_aux = readl_relaxed(l2x0_base + L2X0_AUX_CTRL); | ||||
| 	if (old_aux != ((old_aux & aux_mask) | aux_val)) { | ||||
| 		pr_warn("L2C: platform modifies aux control register: 0x%08x -> 0x%08x\n", | ||||
|  |  | |||
|  | @ -300,6 +300,7 @@ void __init sanity_check_meminfo(void) | |||
| 	sanity_check_meminfo_mpu(); | ||||
| 	end = memblock_end_of_DRAM(); | ||||
| 	high_memory = __va(end - 1) + 1; | ||||
| 	memblock_set_current_limit(end); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  |  | |||
|  | @ -56,6 +56,8 @@ | |||
| #define TASK_SIZE_32		UL(0x100000000) | ||||
| #define TASK_SIZE		(test_thread_flag(TIF_32BIT) ? \ | ||||
| 				TASK_SIZE_32 : TASK_SIZE_64) | ||||
| #define TASK_SIZE_OF(tsk)	(test_tsk_thread_flag(tsk, TIF_32BIT) ? \ | ||||
| 				TASK_SIZE_32 : TASK_SIZE_64) | ||||
| #else | ||||
| #define TASK_SIZE		TASK_SIZE_64 | ||||
| #endif /* CONFIG_COMPAT */ | ||||
|  |  | |||
|  | @ -292,7 +292,7 @@ extern pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn, | |||
| #define pmd_sect(pmd)		((pmd_val(pmd) & PMD_TYPE_MASK) == \ | ||||
| 				 PMD_TYPE_SECT) | ||||
| 
 | ||||
| #ifdef ARM64_64K_PAGES | ||||
| #ifdef CONFIG_ARM64_64K_PAGES | ||||
| #define pud_sect(pud)		(0) | ||||
| #else | ||||
| #define pud_sect(pud)		((pud_val(pud) & PUD_TYPE_MASK) == \ | ||||
|  |  | |||
|  | @ -21,6 +21,10 @@ | |||
| 
 | ||||
| #include <uapi/asm/ptrace.h> | ||||
| 
 | ||||
| /* Current Exception Level values, as contained in CurrentEL */ | ||||
| #define CurrentEL_EL1		(1 << 2) | ||||
| #define CurrentEL_EL2		(2 << 2) | ||||
| 
 | ||||
| /* AArch32-specific ptrace requests */ | ||||
| #define COMPAT_PTRACE_GETREGS		12 | ||||
| #define COMPAT_PTRACE_SETREGS		13 | ||||
|  |  | |||
|  | @ -78,8 +78,7 @@ ENTRY(efi_stub_entry) | |||
| 
 | ||||
| 	/* Turn off Dcache and MMU */ | ||||
| 	mrs	x0, CurrentEL | ||||
| 	cmp	x0, #PSR_MODE_EL2t | ||||
| 	ccmp	x0, #PSR_MODE_EL2h, #0x4, ne | ||||
| 	cmp	x0, #CurrentEL_EL2 | ||||
| 	b.ne	1f | ||||
| 	mrs	x0, sctlr_el2 | ||||
| 	bic	x0, x0, #1 << 0	// clear SCTLR.M | ||||
|  |  | |||
|  | @ -270,8 +270,7 @@ ENDPROC(stext) | |||
|  */ | ||||
| ENTRY(el2_setup) | ||||
| 	mrs	x0, CurrentEL | ||||
| 	cmp	x0, #PSR_MODE_EL2t | ||||
| 	ccmp	x0, #PSR_MODE_EL2h, #0x4, ne | ||||
| 	cmp	x0, #CurrentEL_EL2 | ||||
| 	b.ne	1f | ||||
| 	mrs	x0, sctlr_el2 | ||||
| CPU_BE(	orr	x0, x0, #(1 << 25)	)	// Set the EE bit for EL2 | ||||
|  |  | |||
|  | @ -27,8 +27,10 @@ void __cpu_copy_user_page(void *kto, const void *kfrom, unsigned long vaddr) | |||
| 	copy_page(kto, kfrom); | ||||
| 	__flush_dcache_area(kto, PAGE_SIZE); | ||||
| } | ||||
| EXPORT_SYMBOL_GPL(__cpu_copy_user_page); | ||||
| 
 | ||||
| void __cpu_clear_user_page(void *kaddr, unsigned long vaddr) | ||||
| { | ||||
| 	clear_page(kaddr); | ||||
| } | ||||
| EXPORT_SYMBOL_GPL(__cpu_clear_user_page); | ||||
|  |  | |||
|  | @ -79,7 +79,8 @@ void __sync_icache_dcache(pte_t pte, unsigned long addr) | |||
| 		return; | ||||
| 
 | ||||
| 	if (!test_and_set_bit(PG_dcache_clean, &page->flags)) { | ||||
| 		__flush_dcache_area(page_address(page), PAGE_SIZE); | ||||
| 		__flush_dcache_area(page_address(page), | ||||
| 				PAGE_SIZE << compound_order(page)); | ||||
| 		__flush_icache_all(); | ||||
| 	} else if (icache_is_aivivt()) { | ||||
| 		__flush_icache_all(); | ||||
|  |  | |||
|  | @ -921,7 +921,8 @@ L(nocon): | |||
| 	jls	1f | ||||
| 	lsrl	#1,%d1 | ||||
| 1: | ||||
| 	movel	%d1,m68k_init_mapped_size | ||||
| 	lea	%pc@(m68k_init_mapped_size),%a0
 | ||||
| 	movel	%d1,%a0@
 | ||||
| 	mmu_map	#PAGE_OFFSET,%pc@(L(phys_kernel_start)),%d1,\ | ||||
| 		%pc@(m68k_supervisor_cachemode)
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -11,6 +11,7 @@ | |||
|  */ | ||||
| 
 | ||||
| #include <linux/errno.h> | ||||
| #include <linux/export.h> | ||||
| #include <linux/module.h> | ||||
| #include <linux/sched.h> | ||||
| #include <linux/kernel.h> | ||||
|  | @ -30,6 +31,7 @@ | |||
| 
 | ||||
| 
 | ||||
| unsigned long (*mach_random_get_entropy)(void); | ||||
| EXPORT_SYMBOL_GPL(mach_random_get_entropy); | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  |  | |||
|  | @ -269,6 +269,7 @@ config LANTIQ | |||
| config LASAT | ||||
| 	bool "LASAT Networks platforms" | ||||
| 	select CEVT_R4K | ||||
| 	select CRC32 | ||||
| 	select CSRC_R4K | ||||
| 	select DMA_NONCOHERENT | ||||
| 	select SYS_HAS_EARLY_PRINTK | ||||
|  |  | |||
|  | @ -32,8 +32,6 @@ struct sigcontext32 { | |||
| 	__u32		sc_lo2; | ||||
| 	__u32		sc_hi3; | ||||
| 	__u32		sc_lo3; | ||||
| 	__u64		sc_msaregs[32];	/* Most significant 64 bits */ | ||||
| 	__u32		sc_msa_csr; | ||||
| }; | ||||
| #endif /* _MIPS_SIM == _MIPS_SIM_ABI64 || _MIPS_SIM == _MIPS_SIM_NABI32 */ | ||||
| #endif /* _ASM_SIGCONTEXT_H */ | ||||
|  |  | |||
|  | @ -67,6 +67,9 @@ void ISAOPC(op)(u32 **buf, unsigned int a, unsigned int b, signed int c) | |||
| #define Ip_u2s3u1(op)							\ | ||||
| void ISAOPC(op)(u32 **buf, unsigned int a, signed int b, unsigned int c) | ||||
| 
 | ||||
| #define Ip_s3s1s2(op)							\ | ||||
| void ISAOPC(op)(u32 **buf, int a, int b, int c) | ||||
| 
 | ||||
| #define Ip_u2u1s3(op)							\ | ||||
| void ISAOPC(op)(u32 **buf, unsigned int a, unsigned int b, signed int c) | ||||
| 
 | ||||
|  | @ -147,6 +150,7 @@ Ip_u2s3u1(_scd); | |||
| Ip_u2s3u1(_sd); | ||||
| Ip_u2u1u3(_sll); | ||||
| Ip_u3u2u1(_sllv); | ||||
| Ip_s3s1s2(_slt); | ||||
| Ip_u2u1s3(_sltiu); | ||||
| Ip_u3u1u2(_sltu); | ||||
| Ip_u2u1u3(_sra); | ||||
|  |  | |||
|  | @ -273,6 +273,7 @@ enum mm_32a_minor_op { | |||
| 	mm_and_op = 0x250, | ||||
| 	mm_or32_op = 0x290, | ||||
| 	mm_xor32_op = 0x310, | ||||
| 	mm_slt_op = 0x350, | ||||
| 	mm_sltu_op = 0x390, | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -12,10 +12,6 @@ | |||
| #include <linux/types.h> | ||||
| #include <asm/sgidefs.h> | ||||
| 
 | ||||
| /* Bits which may be set in sc_used_math */ | ||||
| #define USEDMATH_FP	(1 << 0) | ||||
| #define USEDMATH_MSA	(1 << 1) | ||||
| 
 | ||||
| #if _MIPS_SIM == _MIPS_SIM_ABI32 | ||||
| 
 | ||||
| /*
 | ||||
|  | @ -41,8 +37,6 @@ struct sigcontext { | |||
| 	unsigned long		sc_lo2; | ||||
| 	unsigned long		sc_hi3; | ||||
| 	unsigned long		sc_lo3; | ||||
| 	unsigned long long	sc_msaregs[32];	/* Most significant 64 bits */ | ||||
| 	unsigned long		sc_msa_csr; | ||||
| }; | ||||
| 
 | ||||
| #endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */ | ||||
|  | @ -76,8 +70,6 @@ struct sigcontext { | |||
| 	__u32	sc_used_math; | ||||
| 	__u32	sc_dsp; | ||||
| 	__u32	sc_reserved; | ||||
| 	__u64	sc_msaregs[32]; | ||||
| 	__u32	sc_msa_csr; | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -293,7 +293,6 @@ void output_sc_defines(void) | |||
| 	OFFSET(SC_LO2, sigcontext, sc_lo2); | ||||
| 	OFFSET(SC_HI3, sigcontext, sc_hi3); | ||||
| 	OFFSET(SC_LO3, sigcontext, sc_lo3); | ||||
| 	OFFSET(SC_MSAREGS, sigcontext, sc_msaregs); | ||||
| 	BLANK(); | ||||
| } | ||||
| #endif | ||||
|  | @ -308,7 +307,6 @@ void output_sc_defines(void) | |||
| 	OFFSET(SC_MDLO, sigcontext, sc_mdlo); | ||||
| 	OFFSET(SC_PC, sigcontext, sc_pc); | ||||
| 	OFFSET(SC_FPC_CSR, sigcontext, sc_fpc_csr); | ||||
| 	OFFSET(SC_MSAREGS, sigcontext, sc_msaregs); | ||||
| 	BLANK(); | ||||
| } | ||||
| #endif | ||||
|  | @ -320,7 +318,6 @@ void output_sc32_defines(void) | |||
| 	OFFSET(SC32_FPREGS, sigcontext32, sc_fpregs); | ||||
| 	OFFSET(SC32_FPC_CSR, sigcontext32, sc_fpc_csr); | ||||
| 	OFFSET(SC32_FPC_EIR, sigcontext32, sc_fpc_eir); | ||||
| 	OFFSET(SC32_MSAREGS, sigcontext32, sc_msaregs); | ||||
| 	BLANK(); | ||||
| } | ||||
| #endif | ||||
|  |  | |||
|  | @ -126,7 +126,7 @@ void __init init_msc_irqs(unsigned long icubase, unsigned int irqbase, msc_irqma | |||
| 
 | ||||
| 	board_bind_eic_interrupt = &msc_bind_eic_interrupt; | ||||
| 
 | ||||
| 	for (; nirq >= 0; nirq--, imp++) { | ||||
| 	for (; nirq > 0; nirq--, imp++) { | ||||
| 		int n = imp->im_irq; | ||||
| 
 | ||||
| 		switch (imp->im_type) { | ||||
|  |  | |||
|  | @ -101,7 +101,7 @@ static void coupled_barrier(atomic_t *a, unsigned online) | |||
| 	if (!coupled_coherence) | ||||
| 		return; | ||||
| 
 | ||||
| 	smp_mb__before_atomic_inc(); | ||||
| 	smp_mb__before_atomic(); | ||||
| 	atomic_inc(a); | ||||
| 
 | ||||
| 	while (atomic_read(a) < online) | ||||
|  | @ -158,7 +158,7 @@ int cps_pm_enter_state(enum cps_pm_state state) | |||
| 
 | ||||
| 	/* Indicate that this CPU might not be coherent */ | ||||
| 	cpumask_clear_cpu(cpu, &cpu_coherent_mask); | ||||
| 	smp_mb__after_clear_bit(); | ||||
| 	smp_mb__after_atomic(); | ||||
| 
 | ||||
| 	/* Create a non-coherent mapping of the core ready_count */ | ||||
| 	core_ready_count = per_cpu(ready_count, core); | ||||
|  |  | |||
|  | @ -13,7 +13,6 @@ | |||
|  * Copyright (C) 1999, 2001 Silicon Graphics, Inc. | ||||
|  */ | ||||
| #include <asm/asm.h> | ||||
| #include <asm/asmmacro.h> | ||||
| #include <asm/errno.h> | ||||
| #include <asm/fpregdef.h> | ||||
| #include <asm/mipsregs.h> | ||||
|  | @ -246,218 +245,6 @@ LEAF(_restore_fp_context32) | |||
| 	END(_restore_fp_context32) | ||||
| #endif | ||||
| 
 | ||||
| #ifdef CONFIG_CPU_HAS_MSA | ||||
| 
 | ||||
| 	.macro	save_sc_msareg	wr, off, sc, tmp | ||||
| #ifdef CONFIG_64BIT | ||||
| 	copy_u_d \tmp, \wr, 1 | ||||
| 	EX sd	\tmp, (\off+(\wr*8))(\sc) | ||||
| #elif defined(CONFIG_CPU_LITTLE_ENDIAN) | ||||
| 	copy_u_w \tmp, \wr, 2 | ||||
| 	EX sw	\tmp, (\off+(\wr*8)+0)(\sc) | ||||
| 	copy_u_w \tmp, \wr, 3 | ||||
| 	EX sw	\tmp, (\off+(\wr*8)+4)(\sc) | ||||
| #else /* CONFIG_CPU_BIG_ENDIAN */ | ||||
| 	copy_u_w \tmp, \wr, 2 | ||||
| 	EX sw	\tmp, (\off+(\wr*8)+4)(\sc) | ||||
| 	copy_u_w \tmp, \wr, 3 | ||||
| 	EX sw	\tmp, (\off+(\wr*8)+0)(\sc) | ||||
| #endif | ||||
| 	.endm | ||||
| 
 | ||||
| /* | ||||
|  * int _save_msa_context(struct sigcontext *sc) | ||||
|  * | ||||
|  * Save the upper 64 bits of each vector register along with the MSA_CSR | ||||
|  * register into sc. Returns zero on success, else non-zero. | ||||
|  */ | ||||
| LEAF(_save_msa_context) | ||||
| 	save_sc_msareg	0, SC_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	1, SC_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	2, SC_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	3, SC_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	4, SC_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	5, SC_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	6, SC_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	7, SC_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	8, SC_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	9, SC_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	10, SC_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	11, SC_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	12, SC_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	13, SC_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	14, SC_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	15, SC_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	16, SC_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	17, SC_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	18, SC_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	19, SC_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	20, SC_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	21, SC_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	22, SC_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	23, SC_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	24, SC_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	25, SC_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	26, SC_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	27, SC_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	28, SC_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	29, SC_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	30, SC_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	31, SC_MSAREGS, a0, t0 | ||||
| 	jr	ra | ||||
| 	 li	v0, 0 | ||||
| 	END(_save_msa_context) | ||||
| 
 | ||||
| #ifdef CONFIG_MIPS32_COMPAT | ||||
| 
 | ||||
| /* | ||||
|  * int _save_msa_context32(struct sigcontext32 *sc) | ||||
|  * | ||||
|  * Save the upper 64 bits of each vector register along with the MSA_CSR | ||||
|  * register into sc. Returns zero on success, else non-zero. | ||||
|  */ | ||||
| LEAF(_save_msa_context32) | ||||
| 	save_sc_msareg	0, SC32_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	1, SC32_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	2, SC32_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	3, SC32_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	4, SC32_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	5, SC32_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	6, SC32_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	7, SC32_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	8, SC32_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	9, SC32_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	10, SC32_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	11, SC32_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	12, SC32_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	13, SC32_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	14, SC32_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	15, SC32_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	16, SC32_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	17, SC32_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	18, SC32_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	19, SC32_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	20, SC32_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	21, SC32_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	22, SC32_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	23, SC32_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	24, SC32_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	25, SC32_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	26, SC32_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	27, SC32_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	28, SC32_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	29, SC32_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	30, SC32_MSAREGS, a0, t0 | ||||
| 	save_sc_msareg	31, SC32_MSAREGS, a0, t0 | ||||
| 	jr	ra | ||||
| 	 li	v0, 0 | ||||
| 	END(_save_msa_context32) | ||||
| 
 | ||||
| #endif /* CONFIG_MIPS32_COMPAT */ | ||||
| 
 | ||||
| 	.macro restore_sc_msareg	wr, off, sc, tmp | ||||
| #ifdef CONFIG_64BIT | ||||
| 	EX ld	\tmp, (\off+(\wr*8))(\sc) | ||||
| 	insert_d \wr, 1, \tmp | ||||
| #elif defined(CONFIG_CPU_LITTLE_ENDIAN) | ||||
| 	EX lw	\tmp, (\off+(\wr*8)+0)(\sc) | ||||
| 	insert_w \wr, 2, \tmp | ||||
| 	EX lw	\tmp, (\off+(\wr*8)+4)(\sc) | ||||
| 	insert_w \wr, 3, \tmp | ||||
| #else /* CONFIG_CPU_BIG_ENDIAN */ | ||||
| 	EX lw	\tmp, (\off+(\wr*8)+4)(\sc) | ||||
| 	insert_w \wr, 2, \tmp | ||||
| 	EX lw	\tmp, (\off+(\wr*8)+0)(\sc) | ||||
| 	insert_w \wr, 3, \tmp | ||||
| #endif | ||||
| 	.endm | ||||
| 
 | ||||
| /* | ||||
|  * int _restore_msa_context(struct sigcontext *sc) | ||||
|  */ | ||||
| LEAF(_restore_msa_context) | ||||
| 	restore_sc_msareg	0, SC_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	1, SC_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	2, SC_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	3, SC_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	4, SC_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	5, SC_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	6, SC_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	7, SC_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	8, SC_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	9, SC_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	10, SC_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	11, SC_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	12, SC_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	13, SC_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	14, SC_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	15, SC_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	16, SC_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	17, SC_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	18, SC_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	19, SC_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	20, SC_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	21, SC_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	22, SC_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	23, SC_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	24, SC_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	25, SC_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	26, SC_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	27, SC_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	28, SC_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	29, SC_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	30, SC_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	31, SC_MSAREGS, a0, t0 | ||||
| 	jr	ra | ||||
| 	 li	v0, 0 | ||||
| 	END(_restore_msa_context) | ||||
| 
 | ||||
| #ifdef CONFIG_MIPS32_COMPAT | ||||
| 
 | ||||
| /* | ||||
|  * int _restore_msa_context32(struct sigcontext32 *sc) | ||||
|  */ | ||||
| LEAF(_restore_msa_context32) | ||||
| 	restore_sc_msareg	0, SC32_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	1, SC32_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	2, SC32_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	3, SC32_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	4, SC32_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	5, SC32_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	6, SC32_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	7, SC32_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	8, SC32_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	9, SC32_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	10, SC32_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	11, SC32_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	12, SC32_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	13, SC32_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	14, SC32_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	15, SC32_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	16, SC32_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	17, SC32_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	18, SC32_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	19, SC32_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	20, SC32_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	21, SC32_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	22, SC32_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	23, SC32_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	24, SC32_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	25, SC32_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	26, SC32_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	27, SC32_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	28, SC32_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	29, SC32_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	30, SC32_MSAREGS, a0, t0 | ||||
| 	restore_sc_msareg	31, SC32_MSAREGS, a0, t0 | ||||
| 	jr	ra | ||||
| 	 li	v0, 0 | ||||
| 	END(_restore_msa_context32) | ||||
| 
 | ||||
| #endif /* CONFIG_MIPS32_COMPAT */ | ||||
| 
 | ||||
| #endif /* CONFIG_CPU_HAS_MSA */ | ||||
| 
 | ||||
| 	.set	reorder
 | ||||
| 
 | ||||
| 	.type	fault@function
 | ||||
|  |  | |||
Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 David S. Miller
				David S. Miller