Merge branches 'regmap-core', 'regmap-stride', 'regmap-mmio' and 'regmap-irq' into regmap-next
This commit is contained in:
		
				commit
				
					
						06e65cb322
					
				
			
		
					 1532 changed files with 19078 additions and 10364 deletions
				
			
		|  | @ -1,5 +1,5 @@ | ||||||
| What:		/sys/bus/usb/drivers/usbtmc/devices/*/interface_capabilities | What:		/sys/bus/usb/drivers/usbtmc/*/interface_capabilities | ||||||
| What:		/sys/bus/usb/drivers/usbtmc/devices/*/device_capabilities | What:		/sys/bus/usb/drivers/usbtmc/*/device_capabilities | ||||||
| Date:		August 2008 | Date:		August 2008 | ||||||
| Contact:	Greg Kroah-Hartman <gregkh@linuxfoundation.org> | Contact:	Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||||||
| Description: | Description: | ||||||
|  | @ -12,8 +12,8 @@ Description: | ||||||
| 		The files are read only. | 		The files are read only. | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| What:		/sys/bus/usb/drivers/usbtmc/devices/*/usb488_interface_capabilities | What:		/sys/bus/usb/drivers/usbtmc/*/usb488_interface_capabilities | ||||||
| What:		/sys/bus/usb/drivers/usbtmc/devices/*/usb488_device_capabilities | What:		/sys/bus/usb/drivers/usbtmc/*/usb488_device_capabilities | ||||||
| Date:		August 2008 | Date:		August 2008 | ||||||
| Contact:	Greg Kroah-Hartman <gregkh@linuxfoundation.org> | Contact:	Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||||||
| Description: | Description: | ||||||
|  | @ -27,7 +27,7 @@ Description: | ||||||
| 		The files are read only. | 		The files are read only. | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| What:		/sys/bus/usb/drivers/usbtmc/devices/*/TermChar | What:		/sys/bus/usb/drivers/usbtmc/*/TermChar | ||||||
| Date:		August 2008 | Date:		August 2008 | ||||||
| Contact:	Greg Kroah-Hartman <gregkh@linuxfoundation.org> | Contact:	Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||||||
| Description: | Description: | ||||||
|  | @ -40,7 +40,7 @@ Description: | ||||||
| 		sent to the device or not. | 		sent to the device or not. | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| What:		/sys/bus/usb/drivers/usbtmc/devices/*/TermCharEnabled | What:		/sys/bus/usb/drivers/usbtmc/*/TermCharEnabled | ||||||
| Date:		August 2008 | Date:		August 2008 | ||||||
| Contact:	Greg Kroah-Hartman <gregkh@linuxfoundation.org> | Contact:	Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||||||
| Description: | Description: | ||||||
|  | @ -51,7 +51,7 @@ Description: | ||||||
| 		published by the USB-IF. | 		published by the USB-IF. | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| What:		/sys/bus/usb/drivers/usbtmc/devices/*/auto_abort | What:		/sys/bus/usb/drivers/usbtmc/*/auto_abort | ||||||
| Date:		August 2008 | Date:		August 2008 | ||||||
| Contact:	Greg Kroah-Hartman <gregkh@linuxfoundation.org> | Contact:	Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||||||
| Description: | Description: | ||||||
|  |  | ||||||
							
								
								
									
										18
									
								
								Documentation/ABI/testing/sysfs-block-rssd
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								Documentation/ABI/testing/sysfs-block-rssd
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,18 @@ | ||||||
|  | What:           /sys/block/rssd*/registers | ||||||
|  | Date:           March 2012 | ||||||
|  | KernelVersion:  3.3 | ||||||
|  | Contact:        Asai Thambi S P <asamymuthupa@micron.com> | ||||||
|  | Description:    This is a read-only file. Dumps below driver information and | ||||||
|  |                 hardware registers. | ||||||
|  |                     - S ACTive | ||||||
|  |                     - Command Issue | ||||||
|  |                     - Allocated | ||||||
|  |                     - Completed | ||||||
|  |                     - PORT IRQ STAT | ||||||
|  |                     - HOST IRQ STAT | ||||||
|  | 
 | ||||||
|  | What:           /sys/block/rssd*/status | ||||||
|  | Date:           April 2012 | ||||||
|  | KernelVersion:  3.4 | ||||||
|  | Contact:        Asai Thambi S P <asamymuthupa@micron.com> | ||||||
|  | Description:   This is a read-only file. Indicates the status of the device. | ||||||
							
								
								
									
										19
									
								
								Documentation/ABI/testing/sysfs-bus-hsi
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								Documentation/ABI/testing/sysfs-bus-hsi
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,19 @@ | ||||||
|  | What:		/sys/bus/hsi | ||||||
|  | Date:		April 2012 | ||||||
|  | KernelVersion:	3.4 | ||||||
|  | Contact:	Carlos Chinea <carlos.chinea@nokia.com> | ||||||
|  | Description: | ||||||
|  | 		High Speed Synchronous Serial Interface (HSI) is a | ||||||
|  | 		serial interface mainly used for connecting application | ||||||
|  | 		engines (APE) with cellular modem engines (CMT) in cellular | ||||||
|  | 		handsets. | ||||||
|  | 		The bus will be populated with devices (hsi_clients) representing | ||||||
|  | 		the protocols available in the system. Bus drivers implement | ||||||
|  | 		those protocols. | ||||||
|  | 
 | ||||||
|  | What:		/sys/bus/hsi/devices/.../modalias | ||||||
|  | Date:		April 2012 | ||||||
|  | KernelVersion:	3.4 | ||||||
|  | Contact:	Carlos Chinea <carlos.chinea@nokia.com> | ||||||
|  | Description:	Stores the same MODALIAS value emitted by uevent | ||||||
|  | 		Format: hsi:<hsi_client device name> | ||||||
							
								
								
									
										8
									
								
								Documentation/ABI/testing/sysfs-cfq-target-latency
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								Documentation/ABI/testing/sysfs-cfq-target-latency
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,8 @@ | ||||||
|  | What:		/sys/block/<device>/iosched/target_latency | ||||||
|  | Date:		March 2012 | ||||||
|  | contact:	Tao Ma <boyu.mt@taobao.com> | ||||||
|  | Description: | ||||||
|  | 		The /sys/block/<device>/iosched/target_latency only exists | ||||||
|  | 		when the user sets cfq to /sys/block/<device>/scheduler. | ||||||
|  | 		It contains an estimated latency time for the cfq. cfq will | ||||||
|  | 		use it to calculate the time slice used for every task. | ||||||
|  | @ -31,3 +31,21 @@ may be weakly ordered, that is that reads and writes may pass each other. | ||||||
| Since it is optional for platforms to implement DMA_ATTR_WEAK_ORDERING, | Since it is optional for platforms to implement DMA_ATTR_WEAK_ORDERING, | ||||||
| those that do not will simply ignore the attribute and exhibit default | those that do not will simply ignore the attribute and exhibit default | ||||||
| behavior. | behavior. | ||||||
|  | 
 | ||||||
|  | DMA_ATTR_WRITE_COMBINE | ||||||
|  | ---------------------- | ||||||
|  | 
 | ||||||
|  | DMA_ATTR_WRITE_COMBINE specifies that writes to the mapping may be | ||||||
|  | buffered to improve performance. | ||||||
|  | 
 | ||||||
|  | Since it is optional for platforms to implement DMA_ATTR_WRITE_COMBINE, | ||||||
|  | those that do not will simply ignore the attribute and exhibit default | ||||||
|  | behavior. | ||||||
|  | 
 | ||||||
|  | DMA_ATTR_NON_CONSISTENT | ||||||
|  | ----------------------- | ||||||
|  | 
 | ||||||
|  | DMA_ATTR_NON_CONSISTENT lets the platform to choose to return either | ||||||
|  | consistent or non-consistent memory as it sees fit.  By using this API, | ||||||
|  | you are guaranteeing to the platform that you have all the correct and | ||||||
|  | necessary sync points for this memory in the driver. | ||||||
|  |  | ||||||
|  | @ -446,4 +446,21 @@ X!Idrivers/video/console/fonts.c | ||||||
| !Edrivers/i2c/i2c-core.c | !Edrivers/i2c/i2c-core.c | ||||||
|   </chapter> |   </chapter> | ||||||
| 
 | 
 | ||||||
|  |   <chapter id="hsi"> | ||||||
|  |      <title>High Speed Synchronous Serial Interface (HSI)</title> | ||||||
|  | 
 | ||||||
|  |      <para> | ||||||
|  | 	High Speed Synchronous Serial Interface (HSI) is a | ||||||
|  | 	serial interface mainly used for connecting application | ||||||
|  | 	engines (APE) with cellular modem engines (CMT) in cellular | ||||||
|  | 	handsets. | ||||||
|  | 
 | ||||||
|  | 	HSI provides multiplexing for up to 16 logical channels, | ||||||
|  | 	low-latency and full duplex communication. | ||||||
|  |      </para> | ||||||
|  | 
 | ||||||
|  | !Iinclude/linux/hsi/hsi.h | ||||||
|  | !Edrivers/hsi/hsi.c | ||||||
|  |   </chapter> | ||||||
|  | 
 | ||||||
| </book> | </book> | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
|     <refentry id="V4L2-PIX-FMT-NV12M"> |     <refentry id="V4L2-PIX-FMT-NV12M"> | ||||||
|       <refmeta> |       <refmeta> | ||||||
| 	<refentrytitle>V4L2_PIX_FMT_NV12M ('NV12M')</refentrytitle> | 	<refentrytitle>V4L2_PIX_FMT_NV12M ('NM12')</refentrytitle> | ||||||
| 	&manvol; | 	&manvol; | ||||||
|       </refmeta> |       </refmeta> | ||||||
|       <refnamediv> |       <refnamediv> | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
|     <refentry id="V4L2-PIX-FMT-YUV420M"> |     <refentry id="V4L2-PIX-FMT-YUV420M"> | ||||||
|       <refmeta> |       <refmeta> | ||||||
| 	<refentrytitle>V4L2_PIX_FMT_YUV420M ('YU12M')</refentrytitle> | 	<refentrytitle>V4L2_PIX_FMT_YUV420M ('YM12')</refentrytitle> | ||||||
| 	&manvol; | 	&manvol; | ||||||
|       </refmeta> |       </refmeta> | ||||||
|       <refnamediv> |       <refnamediv> | ||||||
|  |  | ||||||
|  | @ -217,7 +217,7 @@ and name space for cpusets, with a minimum of additional kernel code. | ||||||
| 
 | 
 | ||||||
| The cpus and mems files in the root (top_cpuset) cpuset are | The cpus and mems files in the root (top_cpuset) cpuset are | ||||||
| read-only.  The cpus file automatically tracks the value of | read-only.  The cpus file automatically tracks the value of | ||||||
| cpu_online_map using a CPU hotplug notifier, and the mems file | cpu_online_mask using a CPU hotplug notifier, and the mems file | ||||||
| automatically tracks the value of node_states[N_HIGH_MEMORY]--i.e., | automatically tracks the value of node_states[N_HIGH_MEMORY]--i.e., | ||||||
| nodes with memory--using the cpuset_track_online_nodes() hook. | nodes with memory--using the cpuset_track_online_nodes() hook. | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -34,8 +34,7 @@ Current Status: linux-2.6.34-mmotm(development version of 2010/April) | ||||||
| 
 | 
 | ||||||
| Features: | Features: | ||||||
|  - accounting anonymous pages, file caches, swap caches usage and limiting them. |  - accounting anonymous pages, file caches, swap caches usage and limiting them. | ||||||
|  - private LRU and reclaim routine. (system's global LRU and private LRU |  - pages are linked to per-memcg LRU exclusively, and there is no global LRU. | ||||||
|    work independently from each other) |  | ||||||
|  - optionally, memory+swap usage can be accounted and limited. |  - optionally, memory+swap usage can be accounted and limited. | ||||||
|  - hierarchical accounting |  - hierarchical accounting | ||||||
|  - soft limit |  - soft limit | ||||||
|  | @ -154,7 +153,7 @@ updated. page_cgroup has its own LRU on cgroup. | ||||||
| 2.2.1 Accounting details | 2.2.1 Accounting details | ||||||
| 
 | 
 | ||||||
| All mapped anon pages (RSS) and cache pages (Page Cache) are accounted. | All mapped anon pages (RSS) and cache pages (Page Cache) are accounted. | ||||||
| Some pages which are never reclaimable and will not be on the global LRU | Some pages which are never reclaimable and will not be on the LRU | ||||||
| are not accounted. We just account pages under usual VM management. | are not accounted. We just account pages under usual VM management. | ||||||
| 
 | 
 | ||||||
| RSS pages are accounted at page_fault unless they've already been accounted | RSS pages are accounted at page_fault unless they've already been accounted | ||||||
|  |  | ||||||
|  | @ -47,7 +47,7 @@ maxcpus=n    Restrict boot time cpus to n. Say if you have 4 cpus, using | ||||||
|              other cpus later online, read FAQ's for more info. |              other cpus later online, read FAQ's for more info. | ||||||
| 
 | 
 | ||||||
| additional_cpus=n (*)	Use this to limit hotpluggable cpus. This option sets | additional_cpus=n (*)	Use this to limit hotpluggable cpus. This option sets | ||||||
|   			cpu_possible_map = cpu_present_map + additional_cpus |   			cpu_possible_mask = cpu_present_mask + additional_cpus | ||||||
| 
 | 
 | ||||||
| cede_offline={"off","on"}  Use this option to disable/enable putting offlined | cede_offline={"off","on"}  Use this option to disable/enable putting offlined | ||||||
| 		            processors to an extended H_CEDE state on | 		            processors to an extended H_CEDE state on | ||||||
|  | @ -64,11 +64,11 @@ should only rely on this to count the # of cpus, but *MUST* not rely | ||||||
| on the apicid values in those tables for disabled apics. In the event | on the apicid values in those tables for disabled apics. In the event | ||||||
| BIOS doesn't mark such hot-pluggable cpus as disabled entries, one could | BIOS doesn't mark such hot-pluggable cpus as disabled entries, one could | ||||||
| use this parameter "additional_cpus=x" to represent those cpus in the | use this parameter "additional_cpus=x" to represent those cpus in the | ||||||
| cpu_possible_map. | cpu_possible_mask. | ||||||
| 
 | 
 | ||||||
| possible_cpus=n		[s390,x86_64] use this to set hotpluggable cpus. | possible_cpus=n		[s390,x86_64] use this to set hotpluggable cpus. | ||||||
| 			This option sets possible_cpus bits in | 			This option sets possible_cpus bits in | ||||||
| 			cpu_possible_map. Thus keeping the numbers of bits set | 			cpu_possible_mask. Thus keeping the numbers of bits set | ||||||
| 			constant even if the machine gets rebooted. | 			constant even if the machine gets rebooted. | ||||||
| 
 | 
 | ||||||
| CPU maps and such | CPU maps and such | ||||||
|  | @ -76,7 +76,7 @@ CPU maps and such | ||||||
| [More on cpumaps and primitive to manipulate, please check | [More on cpumaps and primitive to manipulate, please check | ||||||
| include/linux/cpumask.h that has more descriptive text.] | include/linux/cpumask.h that has more descriptive text.] | ||||||
| 
 | 
 | ||||||
| cpu_possible_map: Bitmap of possible CPUs that can ever be available in the | cpu_possible_mask: Bitmap of possible CPUs that can ever be available in the | ||||||
| system. This is used to allocate some boot time memory for per_cpu variables | system. This is used to allocate some boot time memory for per_cpu variables | ||||||
| that aren't designed to grow/shrink as CPUs are made available or removed. | that aren't designed to grow/shrink as CPUs are made available or removed. | ||||||
| Once set during boot time discovery phase, the map is static, i.e no bits | Once set during boot time discovery phase, the map is static, i.e no bits | ||||||
|  | @ -84,13 +84,13 @@ are added or removed anytime.  Trimming it accurately for your system needs | ||||||
| upfront can save some boot time memory. See below for how we use heuristics | upfront can save some boot time memory. See below for how we use heuristics | ||||||
| in x86_64 case to keep this under check. | in x86_64 case to keep this under check. | ||||||
| 
 | 
 | ||||||
| cpu_online_map: Bitmap of all CPUs currently online. Its set in __cpu_up() | cpu_online_mask: Bitmap of all CPUs currently online. Its set in __cpu_up() | ||||||
| after a cpu is available for kernel scheduling and ready to receive | after a cpu is available for kernel scheduling and ready to receive | ||||||
| interrupts from devices. Its cleared when a cpu is brought down using | interrupts from devices. Its cleared when a cpu is brought down using | ||||||
| __cpu_disable(), before which all OS services including interrupts are | __cpu_disable(), before which all OS services including interrupts are | ||||||
| migrated to another target CPU. | migrated to another target CPU. | ||||||
| 
 | 
 | ||||||
| cpu_present_map: Bitmap of CPUs currently present in the system. Not all | cpu_present_mask: Bitmap of CPUs currently present in the system. Not all | ||||||
| of them may be online. When physical hotplug is processed by the relevant | of them may be online. When physical hotplug is processed by the relevant | ||||||
| subsystem (e.g ACPI) can change and new bit either be added or removed | subsystem (e.g ACPI) can change and new bit either be added or removed | ||||||
| from the map depending on the event is hot-add/hot-remove. There are currently | from the map depending on the event is hot-add/hot-remove. There are currently | ||||||
|  | @ -99,22 +99,22 @@ at which time hotplug is disabled. | ||||||
| 
 | 
 | ||||||
| You really dont need to manipulate any of the system cpu maps. They should | You really dont need to manipulate any of the system cpu maps. They should | ||||||
| be read-only for most use. When setting up per-cpu resources almost always use | be read-only for most use. When setting up per-cpu resources almost always use | ||||||
| cpu_possible_map/for_each_possible_cpu() to iterate. | cpu_possible_mask/for_each_possible_cpu() to iterate. | ||||||
| 
 | 
 | ||||||
| Never use anything other than cpumask_t to represent bitmap of CPUs. | Never use anything other than cpumask_t to represent bitmap of CPUs. | ||||||
| 
 | 
 | ||||||
| 	#include <linux/cpumask.h> | 	#include <linux/cpumask.h> | ||||||
| 
 | 
 | ||||||
| 	for_each_possible_cpu     - Iterate over cpu_possible_map | 	for_each_possible_cpu     - Iterate over cpu_possible_mask | ||||||
| 	for_each_online_cpu       - Iterate over cpu_online_map | 	for_each_online_cpu       - Iterate over cpu_online_mask | ||||||
| 	for_each_present_cpu      - Iterate over cpu_present_map | 	for_each_present_cpu      - Iterate over cpu_present_mask | ||||||
| 	for_each_cpu_mask(x,mask) - Iterate over some random collection of cpu mask. | 	for_each_cpu_mask(x,mask) - Iterate over some random collection of cpu mask. | ||||||
| 
 | 
 | ||||||
| 	#include <linux/cpu.h> | 	#include <linux/cpu.h> | ||||||
| 	get_online_cpus() and put_online_cpus(): | 	get_online_cpus() and put_online_cpus(): | ||||||
| 
 | 
 | ||||||
| The above calls are used to inhibit cpu hotplug operations. While the | The above calls are used to inhibit cpu hotplug operations. While the | ||||||
| cpu_hotplug.refcount is non zero, the cpu_online_map will not change. | cpu_hotplug.refcount is non zero, the cpu_online_mask will not change. | ||||||
| If you merely need to avoid cpus going away, you could also use | If you merely need to avoid cpus going away, you could also use | ||||||
| preempt_disable() and preempt_enable() for those sections. | preempt_disable() and preempt_enable() for those sections. | ||||||
| Just remember the critical section cannot call any | Just remember the critical section cannot call any | ||||||
|  |  | ||||||
|  | @ -1,10 +1,10 @@ | ||||||
| * Calxeda SATA Controller | * AHCI SATA Controller | ||||||
| 
 | 
 | ||||||
| SATA nodes are defined to describe on-chip Serial ATA controllers. | SATA nodes are defined to describe on-chip Serial ATA controllers. | ||||||
| Each SATA controller should have its own node. | Each SATA controller should have its own node. | ||||||
| 
 | 
 | ||||||
| Required properties: | Required properties: | ||||||
| - compatible        : compatible list, contains "calxeda,hb-ahci" | - compatible        : compatible list, contains "calxeda,hb-ahci" or "snps,spear-ahci" | ||||||
| - interrupts        : <interrupt mapping for SATA IRQ> | - interrupts        : <interrupt mapping for SATA IRQ> | ||||||
| - reg               : <registers mapping> | - reg               : <registers mapping> | ||||||
| 
 | 
 | ||||||
|  | @ -14,4 +14,3 @@ Example: | ||||||
|                 reg = <0xffe08000 0x1000>; |                 reg = <0xffe08000 0x1000>; | ||||||
|                 interrupts = <115>; |                 interrupts = <115>; | ||||||
|         }; |         }; | ||||||
| 
 |  | ||||||
|  | @ -27,13 +27,13 @@ nand0: nand@40000000,0 { | ||||||
| 	reg = <0x40000000 0x10000000 | 	reg = <0x40000000 0x10000000 | ||||||
| 	       0xffffe800 0x200 | 	       0xffffe800 0x200 | ||||||
| 	      >; | 	      >; | ||||||
| 	atmel,nand-addr-offset = <21>; | 	atmel,nand-addr-offset = <21>;	/* ale */ | ||||||
| 	atmel,nand-cmd-offset = <22>; | 	atmel,nand-cmd-offset = <22>;	/* cle */ | ||||||
| 	nand-on-flash-bbt; | 	nand-on-flash-bbt; | ||||||
| 	nand-ecc-mode = "soft"; | 	nand-ecc-mode = "soft"; | ||||||
| 	gpios = <&pioC 13 0 | 	gpios = <&pioC 13 0	/* rdy */ | ||||||
| 		 &pioC 14 0 | 		 &pioC 14 0 	/* nce */ | ||||||
| 		 0 | 		 0		/* cd */ | ||||||
| 		>; | 		>; | ||||||
| 	partition@0 { | 	partition@0 { | ||||||
| 		... | 		... | ||||||
|  |  | ||||||
|  | @ -0,0 +1,29 @@ | ||||||
|  | Anatop Voltage regulators | ||||||
|  | 
 | ||||||
|  | Required properties: | ||||||
|  | - compatible: Must be "fsl,anatop-regulator" | ||||||
|  | - anatop-reg-offset: Anatop MFD register offset | ||||||
|  | - anatop-vol-bit-shift: Bit shift for the register | ||||||
|  | - anatop-vol-bit-width: Number of bits used in the register | ||||||
|  | - anatop-min-bit-val: Minimum value of this register | ||||||
|  | - anatop-min-voltage: Minimum voltage of this regulator | ||||||
|  | - anatop-max-voltage: Maximum voltage of this regulator | ||||||
|  | 
 | ||||||
|  | Any property defined as part of the core regulator | ||||||
|  | binding, defined in regulator.txt, can also be used. | ||||||
|  | 
 | ||||||
|  | Example: | ||||||
|  | 
 | ||||||
|  | 	regulator-vddpu { | ||||||
|  | 		compatible = "fsl,anatop-regulator"; | ||||||
|  | 		regulator-name = "vddpu"; | ||||||
|  | 		regulator-min-microvolt = <725000>; | ||||||
|  | 		regulator-max-microvolt = <1300000>; | ||||||
|  | 		regulator-always-on; | ||||||
|  | 		anatop-reg-offset = <0x140>; | ||||||
|  | 		anatop-vol-bit-shift = <9>; | ||||||
|  | 		anatop-vol-bit-width = <5>; | ||||||
|  | 		anatop-min-bit-val = <1>; | ||||||
|  | 		anatop-min-voltage = <725000>; | ||||||
|  | 		anatop-max-voltage = <1300000>; | ||||||
|  | 	}; | ||||||
|  | @ -3,6 +3,8 @@ | ||||||
| Required properties: | Required properties: | ||||||
| - compatible : "fsl,sgtl5000". | - compatible : "fsl,sgtl5000". | ||||||
| 
 | 
 | ||||||
|  | - reg : the I2C address of the device | ||||||
|  | 
 | ||||||
| Example: | Example: | ||||||
| 
 | 
 | ||||||
| codec: sgtl5000@0a { | codec: sgtl5000@0a { | ||||||
|  |  | ||||||
|  | @ -6,14 +6,6 @@ be removed from this file. | ||||||
| 
 | 
 | ||||||
| --------------------------- | --------------------------- | ||||||
| 
 | 
 | ||||||
| What:	x86 floppy disable_hlt |  | ||||||
| When:	2012 |  | ||||||
| Why:	ancient workaround of dubious utility clutters the |  | ||||||
| 	code used by everybody else. |  | ||||||
| Who:	Len Brown <len.brown@intel.com> |  | ||||||
| 
 |  | ||||||
| --------------------------- |  | ||||||
| 
 |  | ||||||
| What:	CONFIG_APM_CPU_IDLE, and its ability to call APM BIOS in idle | What:	CONFIG_APM_CPU_IDLE, and its ability to call APM BIOS in idle | ||||||
| When:	2012 | When:	2012 | ||||||
| Why:	This optional sub-feature of APM is of dubious reliability, | Why:	This optional sub-feature of APM is of dubious reliability, | ||||||
|  | @ -539,3 +531,11 @@ Why:	There appear to be no production users of the get_robust_list syscall, | ||||||
| 	of ASLR. It was only ever intended for debugging, so it should be | 	of ASLR. It was only ever intended for debugging, so it should be | ||||||
| 	removed. | 	removed. | ||||||
| Who:	Kees Cook <keescook@chromium.org> | Who:	Kees Cook <keescook@chromium.org> | ||||||
|  | 
 | ||||||
|  | ---------------------------- | ||||||
|  | 
 | ||||||
|  | What:	setitimer accepts user NULL pointer (value) | ||||||
|  | When:	3.6 | ||||||
|  | Why:	setitimer is not returning -EFAULT if user pointer is NULL. This | ||||||
|  | 	violates the spec. | ||||||
|  | Who:	Sasikantha Babu <sasikanth.v19@gmail.com> | ||||||
|  |  | ||||||
|  | @ -114,7 +114,7 @@ members are defined: | ||||||
| struct file_system_type { | struct file_system_type { | ||||||
| 	const char *name; | 	const char *name; | ||||||
| 	int fs_flags; | 	int fs_flags; | ||||||
|         struct dentry (*mount) (struct file_system_type *, int, |         struct dentry *(*mount) (struct file_system_type *, int, | ||||||
|                        const char *, void *); |                        const char *, void *); | ||||||
|         void (*kill_sb) (struct super_block *); |         void (*kill_sb) (struct super_block *); | ||||||
|         struct module *owner; |         struct module *owner; | ||||||
|  |  | ||||||
|  | @ -11,7 +11,7 @@ Supported chips: | ||||||
|   Socket S1G2: Athlon (X2), Sempron (X2), Turion X2 (Ultra) |   Socket S1G2: Athlon (X2), Sempron (X2), Turion X2 (Ultra) | ||||||
| * AMD Family 12h processors: "Llano" (E2/A4/A6/A8-Series) | * AMD Family 12h processors: "Llano" (E2/A4/A6/A8-Series) | ||||||
| * AMD Family 14h processors: "Brazos" (C/E/G/Z-Series) | * AMD Family 14h processors: "Brazos" (C/E/G/Z-Series) | ||||||
| * AMD Family 15h processors: "Bulldozer" | * AMD Family 15h processors: "Bulldozer" (FX-Series), "Trinity" | ||||||
| 
 | 
 | ||||||
|   Prefix: 'k10temp' |   Prefix: 'k10temp' | ||||||
|   Addresses scanned: PCI space |   Addresses scanned: PCI space | ||||||
|  |  | ||||||
|  | @ -225,6 +225,7 @@ Code  Seq#(hex)	Include File		Comments | ||||||
| 'j'	00-3F	linux/joystick.h | 'j'	00-3F	linux/joystick.h | ||||||
| 'k'	00-0F	linux/spi/spidev.h	conflict! | 'k'	00-0F	linux/spi/spidev.h	conflict! | ||||||
| 'k'	00-05	video/kyro.h		conflict! | 'k'	00-05	video/kyro.h		conflict! | ||||||
|  | 'k'	10-17	linux/hsi/hsi_char.h	HSI character device | ||||||
| 'l'	00-3F	linux/tcfs_fs.h		transparent cryptographic file system | 'l'	00-3F	linux/tcfs_fs.h		transparent cryptographic file system | ||||||
| 					<http://web.archive.org/web/*/http://mikonos.dia.unisa.it/tcfs> | 					<http://web.archive.org/web/*/http://mikonos.dia.unisa.it/tcfs> | ||||||
| 'l'	40-7F	linux/udf_fs_i.h	in development: | 'l'	40-7F	linux/udf_fs_i.h	in development: | ||||||
|  |  | ||||||
|  | @ -2,15 +2,15 @@ Document about softnet driver issues | ||||||
| 
 | 
 | ||||||
| Transmit path guidelines: | Transmit path guidelines: | ||||||
| 
 | 
 | ||||||
| 1) The hard_start_xmit method must never return '1' under any | 1) The ndo_start_xmit method must not return NETDEV_TX_BUSY under | ||||||
|    normal circumstances.  It is considered a hard error unless |    any normal circumstances.  It is considered a hard error unless | ||||||
|    there is no way your device can tell ahead of time when it's |    there is no way your device can tell ahead of time when it's | ||||||
|    transmit function will become busy. |    transmit function will become busy. | ||||||
| 
 | 
 | ||||||
|    Instead it must maintain the queue properly.  For example, |    Instead it must maintain the queue properly.  For example, | ||||||
|    for a driver implementing scatter-gather this means: |    for a driver implementing scatter-gather this means: | ||||||
| 
 | 
 | ||||||
| 	static int drv_hard_start_xmit(struct sk_buff *skb, | 	static netdev_tx_t drv_hard_start_xmit(struct sk_buff *skb, | ||||||
| 					       struct net_device *dev) | 					       struct net_device *dev) | ||||||
| 	{ | 	{ | ||||||
| 		struct drv *dp = netdev_priv(dev); | 		struct drv *dp = netdev_priv(dev); | ||||||
|  | @ -23,7 +23,7 @@ Transmit path guidelines: | ||||||
| 			unlock_tx(dp); | 			unlock_tx(dp); | ||||||
| 			printk(KERN_ERR PFX "%s: BUG! Tx Ring full when queue awake!\n", | 			printk(KERN_ERR PFX "%s: BUG! Tx Ring full when queue awake!\n", | ||||||
| 			       dev->name); | 			       dev->name); | ||||||
| 			return 1; | 			return NETDEV_TX_BUSY; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		... queue packet to card ... | 		... queue packet to card ... | ||||||
|  | @ -35,6 +35,7 @@ Transmit path guidelines: | ||||||
| 		... | 		... | ||||||
| 		unlock_tx(dp); | 		unlock_tx(dp); | ||||||
| 		... | 		... | ||||||
|  | 		return NETDEV_TX_OK; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|    And then at the end of your TX reclamation event handling: |    And then at the end of your TX reclamation event handling: | ||||||
|  | @ -58,15 +59,12 @@ Transmit path guidelines: | ||||||
|             TX_BUFFS_AVAIL(dp) > 0) |             TX_BUFFS_AVAIL(dp) > 0) | ||||||
| 		netif_wake_queue(dp->dev); | 		netif_wake_queue(dp->dev); | ||||||
| 
 | 
 | ||||||
| 2) Do not forget to update netdev->trans_start to jiffies after | 2) An ndo_start_xmit method must not modify the shared parts of a | ||||||
|    each new tx packet is given to the hardware. |  | ||||||
| 
 |  | ||||||
| 3) A hard_start_xmit method must not modify the shared parts of a |  | ||||||
|    cloned SKB. |    cloned SKB. | ||||||
| 
 | 
 | ||||||
| 4) Do not forget that once you return 0 from your hard_start_xmit | 3) Do not forget that once you return NETDEV_TX_OK from your | ||||||
|    method, it is your driver's responsibility to free up the SKB |    ndo_start_xmit method, it is your driver's responsibility to free | ||||||
|    and in some finite amount of time. |    up the SKB and in some finite amount of time. | ||||||
| 
 | 
 | ||||||
|    For example, this means that it is not allowed for your TX |    For example, this means that it is not allowed for your TX | ||||||
|    mitigation scheme to let TX packets "hang out" in the TX |    mitigation scheme to let TX packets "hang out" in the TX | ||||||
|  | @ -74,8 +72,9 @@ Transmit path guidelines: | ||||||
|    This error can deadlock sockets waiting for send buffer room |    This error can deadlock sockets waiting for send buffer room | ||||||
|    to be freed up. |    to be freed up. | ||||||
| 
 | 
 | ||||||
|    If you return 1 from the hard_start_xmit method, you must not keep |    If you return NETDEV_TX_BUSY from the ndo_start_xmit method, you | ||||||
|    any reference to that SKB and you must not attempt to free it up. |    must not keep any reference to that SKB and you must not attempt | ||||||
|  |    to free it up. | ||||||
| 
 | 
 | ||||||
| Probing guidelines: | Probing guidelines: | ||||||
| 
 | 
 | ||||||
|  | @ -85,10 +84,10 @@ Probing guidelines: | ||||||
| 
 | 
 | ||||||
| Close/stop guidelines: | Close/stop guidelines: | ||||||
| 
 | 
 | ||||||
| 1) After the dev->stop routine has been called, the hardware must | 1) After the ndo_stop routine has been called, the hardware must | ||||||
|    not receive or transmit any data.  All in flight packets must |    not receive or transmit any data.  All in flight packets must | ||||||
|    be aborted. If necessary, poll or wait for completion of  |    be aborted. If necessary, poll or wait for completion of  | ||||||
|    any reset commands. |    any reset commands. | ||||||
| 
 | 
 | ||||||
| 2) The dev->stop routine will be called by unregister_netdevice | 2) The ndo_stop routine will be called by unregister_netdevice | ||||||
|    if device is still UP. |    if device is still UP. | ||||||
|  |  | ||||||
|  | @ -147,7 +147,7 @@ tcp_adv_win_scale - INTEGER | ||||||
| 	(if tcp_adv_win_scale > 0) or bytes-bytes/2^(-tcp_adv_win_scale), | 	(if tcp_adv_win_scale > 0) or bytes-bytes/2^(-tcp_adv_win_scale), | ||||||
| 	if it is <= 0. | 	if it is <= 0. | ||||||
| 	Possible values are [-31, 31], inclusive. | 	Possible values are [-31, 31], inclusive. | ||||||
| 	Default: 2 | 	Default: 1 | ||||||
| 
 | 
 | ||||||
| tcp_allowed_congestion_control - STRING | tcp_allowed_congestion_control - STRING | ||||||
| 	Show/set the congestion control choices available to non-privileged | 	Show/set the congestion control choices available to non-privileged | ||||||
|  | @ -410,7 +410,7 @@ tcp_rmem - vector of 3 INTEGERs: min, default, max | ||||||
| 	net.core.rmem_max.  Calling setsockopt() with SO_RCVBUF disables | 	net.core.rmem_max.  Calling setsockopt() with SO_RCVBUF disables | ||||||
| 	automatic tuning of that socket's receive buffer size, in which | 	automatic tuning of that socket's receive buffer size, in which | ||||||
| 	case this value is ignored. | 	case this value is ignored. | ||||||
| 	Default: between 87380B and 4MB, depending on RAM size. | 	Default: between 87380B and 6MB, depending on RAM size. | ||||||
| 
 | 
 | ||||||
| tcp_sack - BOOLEAN | tcp_sack - BOOLEAN | ||||||
| 	Enable select acknowledgments (SACKS). | 	Enable select acknowledgments (SACKS). | ||||||
|  | @ -604,15 +604,8 @@ IP Variables: | ||||||
| ip_local_port_range - 2 INTEGERS | ip_local_port_range - 2 INTEGERS | ||||||
| 	Defines the local port range that is used by TCP and UDP to | 	Defines the local port range that is used by TCP and UDP to | ||||||
| 	choose the local port. The first number is the first, the | 	choose the local port. The first number is the first, the | ||||||
| 	second the last local port number. Default value depends on | 	second the last local port number. The default values are | ||||||
| 	amount of memory available on the system: | 	32768 and 61000 respectively. | ||||||
| 	> 128Mb 32768-61000 |  | ||||||
| 	< 128Mb 1024-4999 or even less. |  | ||||||
| 	This number defines number of active connections, which this |  | ||||||
| 	system can issue simultaneously to systems not supporting |  | ||||||
| 	TCP extensions (timestamps). With tcp_tw_recycle enabled |  | ||||||
| 	(i.e. by default) range 1024-4999 is enough to issue up to |  | ||||||
| 	2000 connections per second to systems supporting timestamps. |  | ||||||
| 
 | 
 | ||||||
| ip_local_reserved_ports - list of comma separated ranges | ip_local_reserved_ports - list of comma separated ranges | ||||||
| 	Specify the ports which are reserved for known third-party | 	Specify the ports which are reserved for known third-party | ||||||
|  |  | ||||||
|  | @ -47,26 +47,25 @@ packets is preferred. | ||||||
| 
 | 
 | ||||||
| struct net_device synchronization rules | struct net_device synchronization rules | ||||||
| ======================================= | ======================================= | ||||||
| dev->open: | ndo_open: | ||||||
| 	Synchronization: rtnl_lock() semaphore. | 	Synchronization: rtnl_lock() semaphore. | ||||||
| 	Context: process | 	Context: process | ||||||
| 
 | 
 | ||||||
| dev->stop: | ndo_stop: | ||||||
| 	Synchronization: rtnl_lock() semaphore. | 	Synchronization: rtnl_lock() semaphore. | ||||||
| 	Context: process | 	Context: process | ||||||
| 	Note1: netif_running() is guaranteed false | 	Note: netif_running() is guaranteed false | ||||||
| 	Note2: dev->poll() is guaranteed to be stopped |  | ||||||
| 
 | 
 | ||||||
| dev->do_ioctl: | ndo_do_ioctl: | ||||||
| 	Synchronization: rtnl_lock() semaphore. | 	Synchronization: rtnl_lock() semaphore. | ||||||
| 	Context: process | 	Context: process | ||||||
| 
 | 
 | ||||||
| dev->get_stats: | ndo_get_stats: | ||||||
| 	Synchronization: dev_base_lock rwlock. | 	Synchronization: dev_base_lock rwlock. | ||||||
| 	Context: nominally process, but don't sleep inside an rwlock | 	Context: nominally process, but don't sleep inside an rwlock | ||||||
| 
 | 
 | ||||||
| dev->hard_start_xmit: | ndo_start_xmit: | ||||||
| 	Synchronization: netif_tx_lock spinlock. | 	Synchronization: __netif_tx_lock spinlock. | ||||||
| 
 | 
 | ||||||
| 	When the driver sets NETIF_F_LLTX in dev->features this will be | 	When the driver sets NETIF_F_LLTX in dev->features this will be | ||||||
| 	called without holding netif_tx_lock. In this case the driver | 	called without holding netif_tx_lock. In this case the driver | ||||||
|  | @ -87,20 +86,20 @@ dev->hard_start_xmit: | ||||||
| 	o NETDEV_TX_LOCKED Locking failed, please retry quickly. | 	o NETDEV_TX_LOCKED Locking failed, please retry quickly. | ||||||
| 	  Only valid when NETIF_F_LLTX is set. | 	  Only valid when NETIF_F_LLTX is set. | ||||||
| 
 | 
 | ||||||
| dev->tx_timeout: | ndo_tx_timeout: | ||||||
| 	Synchronization: netif_tx_lock spinlock. | 	Synchronization: netif_tx_lock spinlock; all TX queues frozen. | ||||||
| 	Context: BHs disabled | 	Context: BHs disabled | ||||||
| 	Notes: netif_queue_stopped() is guaranteed true | 	Notes: netif_queue_stopped() is guaranteed true | ||||||
| 
 | 
 | ||||||
| dev->set_rx_mode: | ndo_set_rx_mode: | ||||||
| 	Synchronization: netif_tx_lock spinlock. | 	Synchronization: netif_addr_lock spinlock. | ||||||
| 	Context: BHs disabled | 	Context: BHs disabled | ||||||
| 
 | 
 | ||||||
| struct napi_struct synchronization rules | struct napi_struct synchronization rules | ||||||
| ======================================== | ======================================== | ||||||
| napi->poll: | napi->poll: | ||||||
| 	Synchronization: NAPI_STATE_SCHED bit in napi->state.  Device | 	Synchronization: NAPI_STATE_SCHED bit in napi->state.  Device | ||||||
| 		driver's dev->close method will invoke napi_disable() on | 		driver's ndo_stop method will invoke napi_disable() on | ||||||
| 		all NAPI instances which will do a sleeping poll on the | 		all NAPI instances which will do a sleeping poll on the | ||||||
| 		NAPI_STATE_SCHED napi->state bit, waiting for all pending | 		NAPI_STATE_SCHED napi->state bit, waiting for all pending | ||||||
| 		NAPI activity to cease. | 		NAPI activity to cease. | ||||||
|  |  | ||||||
|  | @ -9,7 +9,7 @@ architectures). | ||||||
| 
 | 
 | ||||||
| II. How does it work? | II. How does it work? | ||||||
| 
 | 
 | ||||||
| There are four per-task flags used for that, PF_NOFREEZE, PF_FROZEN, TIF_FREEZE | There are three per-task flags used for that, PF_NOFREEZE, PF_FROZEN | ||||||
| and PF_FREEZER_SKIP (the last one is auxiliary).  The tasks that have | and PF_FREEZER_SKIP (the last one is auxiliary).  The tasks that have | ||||||
| PF_NOFREEZE unset (all user space processes and some kernel threads) are | PF_NOFREEZE unset (all user space processes and some kernel threads) are | ||||||
| regarded as 'freezable' and treated in a special way before the system enters a | regarded as 'freezable' and treated in a special way before the system enters a | ||||||
|  | @ -17,30 +17,31 @@ suspend state as well as before a hibernation image is created (in what follows | ||||||
| we only consider hibernation, but the description also applies to suspend). | we only consider hibernation, but the description also applies to suspend). | ||||||
| 
 | 
 | ||||||
| Namely, as the first step of the hibernation procedure the function | Namely, as the first step of the hibernation procedure the function | ||||||
| freeze_processes() (defined in kernel/power/process.c) is called.  It executes | freeze_processes() (defined in kernel/power/process.c) is called.  A system-wide | ||||||
| try_to_freeze_tasks() that sets TIF_FREEZE for all of the freezable tasks and | variable system_freezing_cnt (as opposed to a per-task flag) is used to indicate | ||||||
| either wakes them up, if they are kernel threads, or sends fake signals to them, | whether the system is to undergo a freezing operation. And freeze_processes() | ||||||
| if they are user space processes.  A task that has TIF_FREEZE set, should react | sets this variable.  After this, it executes try_to_freeze_tasks() that sends a | ||||||
| to it by calling the function called __refrigerator() (defined in | fake signal to all user space processes, and wakes up all the kernel threads. | ||||||
| kernel/freezer.c), which sets the task's PF_FROZEN flag, changes its state | All freezable tasks must react to that by calling try_to_freeze(), which | ||||||
| to TASK_UNINTERRUPTIBLE and makes it loop until PF_FROZEN is cleared for it. | results in a call to __refrigerator() (defined in kernel/freezer.c), which sets | ||||||
| Then, we say that the task is 'frozen' and therefore the set of functions | the task's PF_FROZEN flag, changes its state to TASK_UNINTERRUPTIBLE and makes | ||||||
| handling this mechanism is referred to as 'the freezer' (these functions are | it loop until PF_FROZEN is cleared for it. Then, we say that the task is | ||||||
| defined in kernel/power/process.c, kernel/freezer.c & include/linux/freezer.h). | 'frozen' and therefore the set of functions handling this mechanism is referred | ||||||
| User space processes are generally frozen before kernel threads. | to as 'the freezer' (these functions are defined in kernel/power/process.c, | ||||||
|  | kernel/freezer.c & include/linux/freezer.h). User space processes are generally | ||||||
|  | frozen before kernel threads. | ||||||
| 
 | 
 | ||||||
| __refrigerator() must not be called directly.  Instead, use the | __refrigerator() must not be called directly.  Instead, use the | ||||||
| try_to_freeze() function (defined in include/linux/freezer.h), that checks | try_to_freeze() function (defined in include/linux/freezer.h), that checks | ||||||
| the task's TIF_FREEZE flag and makes the task enter __refrigerator() if the | if the task is to be frozen and makes the task enter __refrigerator(). | ||||||
| flag is set. |  | ||||||
| 
 | 
 | ||||||
| For user space processes try_to_freeze() is called automatically from the | For user space processes try_to_freeze() is called automatically from the | ||||||
| signal-handling code, but the freezable kernel threads need to call it | signal-handling code, but the freezable kernel threads need to call it | ||||||
| explicitly in suitable places or use the wait_event_freezable() or | explicitly in suitable places or use the wait_event_freezable() or | ||||||
| wait_event_freezable_timeout() macros (defined in include/linux/freezer.h) | wait_event_freezable_timeout() macros (defined in include/linux/freezer.h) | ||||||
| that combine interruptible sleep with checking if TIF_FREEZE is set and calling | that combine interruptible sleep with checking if the task is to be frozen and | ||||||
| try_to_freeze().  The main loop of a freezable kernel thread may look like the | calling try_to_freeze().  The main loop of a freezable kernel thread may look | ||||||
| following one: | like the following one: | ||||||
| 
 | 
 | ||||||
| 	set_freezable(); | 	set_freezable(); | ||||||
| 	do { | 	do { | ||||||
|  | @ -53,7 +54,7 @@ following one: | ||||||
| (from drivers/usb/core/hub.c::hub_thread()). | (from drivers/usb/core/hub.c::hub_thread()). | ||||||
| 
 | 
 | ||||||
| If a freezable kernel thread fails to call try_to_freeze() after the freezer has | If a freezable kernel thread fails to call try_to_freeze() after the freezer has | ||||||
| set TIF_FREEZE for it, the freezing of tasks will fail and the entire | initiated a freezing operation, the freezing of tasks will fail and the entire | ||||||
| hibernation operation will be cancelled.  For this reason, freezable kernel | hibernation operation will be cancelled.  For this reason, freezable kernel | ||||||
| threads must call try_to_freeze() somewhere or use one of the | threads must call try_to_freeze() somewhere or use one of the | ||||||
| wait_event_freezable() and wait_event_freezable_timeout() macros. | wait_event_freezable() and wait_event_freezable_timeout() macros. | ||||||
|  |  | ||||||
|  | @ -123,7 +123,7 @@ KEY SERVICE OVERVIEW | ||||||
| 
 | 
 | ||||||
| The key service provides a number of features besides keys: | The key service provides a number of features besides keys: | ||||||
| 
 | 
 | ||||||
|  (*) The key service defines two special key types: |  (*) The key service defines three special key types: | ||||||
| 
 | 
 | ||||||
|      (+) "keyring" |      (+) "keyring" | ||||||
| 
 | 
 | ||||||
|  | @ -137,6 +137,18 @@ The key service provides a number of features besides keys: | ||||||
| 	 blobs of data. These can be created, updated and read by userspace, | 	 blobs of data. These can be created, updated and read by userspace, | ||||||
| 	 and aren't intended for use by kernel services. | 	 and aren't intended for use by kernel services. | ||||||
| 
 | 
 | ||||||
|  |      (+) "logon" | ||||||
|  | 
 | ||||||
|  | 	 Like a "user" key, a "logon" key has a payload that is an arbitrary | ||||||
|  | 	 blob of data. It is intended as a place to store secrets which are | ||||||
|  | 	 accessible to the kernel but not to userspace programs. | ||||||
|  | 
 | ||||||
|  | 	 The description can be arbitrary, but must be prefixed with a non-zero | ||||||
|  | 	 length string that describes the key "subclass". The subclass is | ||||||
|  | 	 separated from the rest of the description by a ':'. "logon" keys can | ||||||
|  | 	 be created and updated from userspace, but the payload is only | ||||||
|  | 	 readable from kernel space. | ||||||
|  | 
 | ||||||
|  (*) Each process subscribes to three keyrings: a thread-specific keyring, a |  (*) Each process subscribes to three keyrings: a thread-specific keyring, a | ||||||
|      process-specific keyring, and a session-specific keyring. |      process-specific keyring, and a session-specific keyring. | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -43,7 +43,9 @@ ALC680 | ||||||
| 
 | 
 | ||||||
| ALC882/883/885/888/889 | ALC882/883/885/888/889 | ||||||
| ====================== | ====================== | ||||||
|   N/A |   acer-aspire-4930g	Acer Aspire 4930G/5930G/6530G/6930G/7730G | ||||||
|  |   acer-aspire-8930g	Acer Aspire 8330G/6935G | ||||||
|  |   acer-aspire		Acer Aspire others | ||||||
| 
 | 
 | ||||||
| ALC861/660 | ALC861/660 | ||||||
| ========== | ========== | ||||||
|  |  | ||||||
|  | @ -168,6 +168,28 @@ that if the completion handler or anyone else tries to resubmit it | ||||||
| they will get a -EPERM error.  Thus you can be sure that when | they will get a -EPERM error.  Thus you can be sure that when | ||||||
| usb_kill_urb() returns, the URB is totally idle. | usb_kill_urb() returns, the URB is totally idle. | ||||||
| 
 | 
 | ||||||
|  | There is a lifetime issue to consider.  An URB may complete at any | ||||||
|  | time, and the completion handler may free the URB.  If this happens | ||||||
|  | while usb_unlink_urb or usb_kill_urb is running, it will cause a | ||||||
|  | memory-access violation.  The driver is responsible for avoiding this, | ||||||
|  | which often means some sort of lock will be needed to prevent the URB | ||||||
|  | from being deallocated while it is still in use. | ||||||
|  | 
 | ||||||
|  | On the other hand, since usb_unlink_urb may end up calling the | ||||||
|  | completion handler, the handler must not take any lock that is held | ||||||
|  | when usb_unlink_urb is invoked.  The general solution to this problem | ||||||
|  | is to increment the URB's reference count while holding the lock, then | ||||||
|  | drop the lock and call usb_unlink_urb or usb_kill_urb, and then | ||||||
|  | decrement the URB's reference count.  You increment the reference | ||||||
|  | count by calling | ||||||
|  | 
 | ||||||
|  | 	struct urb *usb_get_urb(struct urb *urb) | ||||||
|  | 
 | ||||||
|  | (ignore the return value; it is the same as the argument) and | ||||||
|  | decrement the reference count by calling usb_free_urb.  Of course, | ||||||
|  | none of this is necessary if there's no danger of the URB being freed | ||||||
|  | by the completion handler. | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| 1.7. What about the completion handler? | 1.7. What about the completion handler? | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -183,10 +183,10 @@ An input control transfer to get a port status. | ||||||
| d5ea89a0 3575914555 S Ci:1:001:0 s a3 00 0000 0003 0004 4 < | d5ea89a0 3575914555 S Ci:1:001:0 s a3 00 0000 0003 0004 4 < | ||||||
| d5ea89a0 3575914560 C Ci:1:001:0 0 4 = 01050000 | d5ea89a0 3575914560 C Ci:1:001:0 0 4 = 01050000 | ||||||
| 
 | 
 | ||||||
| An output bulk transfer to send a SCSI command 0x5E in a 31-byte Bulk wrapper | An output bulk transfer to send a SCSI command 0x28 (READ_10) in a 31-byte | ||||||
| to a storage device at address 5: | Bulk wrapper to a storage device at address 5: | ||||||
| 
 | 
 | ||||||
| dd65f0e8 4128379752 S Bo:1:005:2 -115 31 = 55534243 5e000000 00000000 00000600 00000000 00000000 00000000 000000 | dd65f0e8 4128379752 S Bo:1:005:2 -115 31 = 55534243 ad000000 00800000 80010a28 20000000 20000040 00000000 000000 | ||||||
| dd65f0e8 4128379808 C Bo:1:005:2 0 31 > | dd65f0e8 4128379808 C Bo:1:005:2 0 31 > | ||||||
| 
 | 
 | ||||||
| * Raw binary format and API | * Raw binary format and API | ||||||
|  |  | ||||||
							
								
								
									
										104
									
								
								MAINTAINERS
									
										
									
									
									
								
							
							
						
						
									
										104
									
								
								MAINTAINERS
									
										
									
									
									
								
							|  | @ -228,7 +228,7 @@ M:	Len Brown <lenb@kernel.org> | ||||||
| L:	linux-acpi@vger.kernel.org | L:	linux-acpi@vger.kernel.org | ||||||
| W:	http://www.lesswatts.org/projects/acpi/ | W:	http://www.lesswatts.org/projects/acpi/ | ||||||
| Q:	http://patchwork.kernel.org/project/linux-acpi/list/ | Q:	http://patchwork.kernel.org/project/linux-acpi/list/ | ||||||
| T:	git git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6.git | T:	git git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux | ||||||
| S:	Supported | S:	Supported | ||||||
| F:	drivers/acpi/ | F:	drivers/acpi/ | ||||||
| F:	drivers/pnp/pnpacpi/ | F:	drivers/pnp/pnpacpi/ | ||||||
|  | @ -1251,7 +1251,6 @@ ATHEROS ATH5K WIRELESS DRIVER | ||||||
| M:	Jiri Slaby <jirislaby@gmail.com> | M:	Jiri Slaby <jirislaby@gmail.com> | ||||||
| M:	Nick Kossifidis <mickflemm@gmail.com> | M:	Nick Kossifidis <mickflemm@gmail.com> | ||||||
| M:	"Luis R. Rodriguez" <mcgrof@qca.qualcomm.com> | M:	"Luis R. Rodriguez" <mcgrof@qca.qualcomm.com> | ||||||
| M:	Bob Copeland <me@bobcopeland.com> |  | ||||||
| L:	linux-wireless@vger.kernel.org | L:	linux-wireless@vger.kernel.org | ||||||
| L:	ath5k-devel@lists.ath5k.org | L:	ath5k-devel@lists.ath5k.org | ||||||
| W:	http://wireless.kernel.org/en/users/Drivers/ath5k | W:	http://wireless.kernel.org/en/users/Drivers/ath5k | ||||||
|  | @ -1522,8 +1521,8 @@ M:	Gustavo Padovan <gustavo@padovan.org> | ||||||
| M:	Johan Hedberg <johan.hedberg@gmail.com> | M:	Johan Hedberg <johan.hedberg@gmail.com> | ||||||
| L:	linux-bluetooth@vger.kernel.org | L:	linux-bluetooth@vger.kernel.org | ||||||
| W:	http://www.bluez.org/ | W:	http://www.bluez.org/ | ||||||
| T:	git git://git.kernel.org/pub/scm/linux/kernel/git/padovan/bluetooth.git | T:	git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth.git | ||||||
| T:	git git://git.kernel.org/pub/scm/linux/kernel/git/jh/bluetooth.git | T:	git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git | ||||||
| S:	Maintained | S:	Maintained | ||||||
| F:	drivers/bluetooth/ | F:	drivers/bluetooth/ | ||||||
| 
 | 
 | ||||||
|  | @ -1533,8 +1532,8 @@ M:	Gustavo Padovan <gustavo@padovan.org> | ||||||
| M:	Johan Hedberg <johan.hedberg@gmail.com> | M:	Johan Hedberg <johan.hedberg@gmail.com> | ||||||
| L:	linux-bluetooth@vger.kernel.org | L:	linux-bluetooth@vger.kernel.org | ||||||
| W:	http://www.bluez.org/ | W:	http://www.bluez.org/ | ||||||
| T:	git git://git.kernel.org/pub/scm/linux/kernel/git/padovan/bluetooth.git | T:	git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth.git | ||||||
| T:	git git://git.kernel.org/pub/scm/linux/kernel/git/jh/bluetooth.git | T:	git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git | ||||||
| S:	Maintained | S:	Maintained | ||||||
| F:	net/bluetooth/ | F:	net/bluetooth/ | ||||||
| F:	include/net/bluetooth/ | F:	include/net/bluetooth/ | ||||||
|  | @ -1969,10 +1968,7 @@ S:	Maintained | ||||||
| F:	drivers/net/ethernet/ti/cpmac.c | F:	drivers/net/ethernet/ti/cpmac.c | ||||||
| 
 | 
 | ||||||
| CPU FREQUENCY DRIVERS | CPU FREQUENCY DRIVERS | ||||||
| M:	Dave Jones <davej@redhat.com> |  | ||||||
| L:	cpufreq@vger.kernel.org | L:	cpufreq@vger.kernel.org | ||||||
| W:	http://www.codemonkey.org.uk/projects/cpufreq/ |  | ||||||
| T:	git git://git.kernel.org/pub/scm/linux/kernel/git/davej/cpufreq.git |  | ||||||
| S:	Maintained | S:	Maintained | ||||||
| F:	drivers/cpufreq/ | F:	drivers/cpufreq/ | ||||||
| F:	include/linux/cpufreq.h | F:	include/linux/cpufreq.h | ||||||
|  | @ -2322,9 +2318,9 @@ S:	Supported | ||||||
| F:	drivers/acpi/dock.c | F:	drivers/acpi/dock.c | ||||||
| 
 | 
 | ||||||
| DOCUMENTATION | DOCUMENTATION | ||||||
| M:	Randy Dunlap <rdunlap@xenotime.net> | M:	Rob Landley <rob@landley.net> | ||||||
| L:	linux-doc@vger.kernel.org | L:	linux-doc@vger.kernel.org | ||||||
| T:	quilt http://xenotime.net/kernel-doc-patches/current/ | T:	TBD | ||||||
| S:	Maintained | S:	Maintained | ||||||
| F:	Documentation/ | F:	Documentation/ | ||||||
| 
 | 
 | ||||||
|  | @ -2451,17 +2447,17 @@ F:	fs/ecryptfs/ | ||||||
| 
 | 
 | ||||||
| EDAC-CORE | EDAC-CORE | ||||||
| M:	Doug Thompson <dougthompson@xmission.com> | M:	Doug Thompson <dougthompson@xmission.com> | ||||||
| L:	bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) | L:	linux-edac@vger.kernel.org | ||||||
| W:	bluesmoke.sourceforge.net | W:	bluesmoke.sourceforge.net | ||||||
| S:	Supported | S:	Supported | ||||||
| F:	Documentation/edac.txt | F:	Documentation/edac.txt | ||||||
| F:	drivers/edac/edac_* | F:	drivers/edac/ | ||||||
| F:	include/linux/edac.h | F:	include/linux/edac.h | ||||||
| 
 | 
 | ||||||
| EDAC-AMD64 | EDAC-AMD64 | ||||||
| M:	Doug Thompson <dougthompson@xmission.com> | M:	Doug Thompson <dougthompson@xmission.com> | ||||||
| M:	Borislav Petkov <borislav.petkov@amd.com> | M:	Borislav Petkov <borislav.petkov@amd.com> | ||||||
| L:	bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) | L:	linux-edac@vger.kernel.org | ||||||
| W:	bluesmoke.sourceforge.net | W:	bluesmoke.sourceforge.net | ||||||
| S:	Supported | S:	Supported | ||||||
| F:	drivers/edac/amd64_edac* | F:	drivers/edac/amd64_edac* | ||||||
|  | @ -2469,35 +2465,35 @@ F:	drivers/edac/amd64_edac* | ||||||
| EDAC-E752X | EDAC-E752X | ||||||
| M:	Mark Gross <mark.gross@intel.com> | M:	Mark Gross <mark.gross@intel.com> | ||||||
| M:	Doug Thompson <dougthompson@xmission.com> | M:	Doug Thompson <dougthompson@xmission.com> | ||||||
| L:	bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) | L:	linux-edac@vger.kernel.org | ||||||
| W:	bluesmoke.sourceforge.net | W:	bluesmoke.sourceforge.net | ||||||
| S:	Maintained | S:	Maintained | ||||||
| F:	drivers/edac/e752x_edac.c | F:	drivers/edac/e752x_edac.c | ||||||
| 
 | 
 | ||||||
| EDAC-E7XXX | EDAC-E7XXX | ||||||
| M:	Doug Thompson <dougthompson@xmission.com> | M:	Doug Thompson <dougthompson@xmission.com> | ||||||
| L:	bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) | L:	linux-edac@vger.kernel.org | ||||||
| W:	bluesmoke.sourceforge.net | W:	bluesmoke.sourceforge.net | ||||||
| S:	Maintained | S:	Maintained | ||||||
| F:	drivers/edac/e7xxx_edac.c | F:	drivers/edac/e7xxx_edac.c | ||||||
| 
 | 
 | ||||||
| EDAC-I82443BXGX | EDAC-I82443BXGX | ||||||
| M:	Tim Small <tim@buttersideup.com> | M:	Tim Small <tim@buttersideup.com> | ||||||
| L:	bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) | L:	linux-edac@vger.kernel.org | ||||||
| W:	bluesmoke.sourceforge.net | W:	bluesmoke.sourceforge.net | ||||||
| S:	Maintained | S:	Maintained | ||||||
| F:	drivers/edac/i82443bxgx_edac.c | F:	drivers/edac/i82443bxgx_edac.c | ||||||
| 
 | 
 | ||||||
| EDAC-I3000 | EDAC-I3000 | ||||||
| M:	Jason Uhlenkott <juhlenko@akamai.com> | M:	Jason Uhlenkott <juhlenko@akamai.com> | ||||||
| L:	bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) | L:	linux-edac@vger.kernel.org | ||||||
| W:	bluesmoke.sourceforge.net | W:	bluesmoke.sourceforge.net | ||||||
| S:	Maintained | S:	Maintained | ||||||
| F:	drivers/edac/i3000_edac.c | F:	drivers/edac/i3000_edac.c | ||||||
| 
 | 
 | ||||||
| EDAC-I5000 | EDAC-I5000 | ||||||
| M:	Doug Thompson <dougthompson@xmission.com> | M:	Doug Thompson <dougthompson@xmission.com> | ||||||
| L:	bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) | L:	linux-edac@vger.kernel.org | ||||||
| W:	bluesmoke.sourceforge.net | W:	bluesmoke.sourceforge.net | ||||||
| S:	Maintained | S:	Maintained | ||||||
| F:	drivers/edac/i5000_edac.c | F:	drivers/edac/i5000_edac.c | ||||||
|  | @ -2526,21 +2522,21 @@ F:	drivers/edac/i7core_edac.c | ||||||
| EDAC-I82975X | EDAC-I82975X | ||||||
| M:	Ranganathan Desikan <ravi@jetztechnologies.com> | M:	Ranganathan Desikan <ravi@jetztechnologies.com> | ||||||
| M:	"Arvind R." <arvino55@gmail.com> | M:	"Arvind R." <arvino55@gmail.com> | ||||||
| L:	bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) | L:	linux-edac@vger.kernel.org | ||||||
| W:	bluesmoke.sourceforge.net | W:	bluesmoke.sourceforge.net | ||||||
| S:	Maintained | S:	Maintained | ||||||
| F:	drivers/edac/i82975x_edac.c | F:	drivers/edac/i82975x_edac.c | ||||||
| 
 | 
 | ||||||
| EDAC-PASEMI | EDAC-PASEMI | ||||||
| M:	Egor Martovetsky <egor@pasemi.com> | M:	Egor Martovetsky <egor@pasemi.com> | ||||||
| L:	bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) | L:	linux-edac@vger.kernel.org | ||||||
| W:	bluesmoke.sourceforge.net | W:	bluesmoke.sourceforge.net | ||||||
| S:	Maintained | S:	Maintained | ||||||
| F:	drivers/edac/pasemi_edac.c | F:	drivers/edac/pasemi_edac.c | ||||||
| 
 | 
 | ||||||
| EDAC-R82600 | EDAC-R82600 | ||||||
| M:	Tim Small <tim@buttersideup.com> | M:	Tim Small <tim@buttersideup.com> | ||||||
| L:	bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) | L:	linux-edac@vger.kernel.org | ||||||
| W:	bluesmoke.sourceforge.net | W:	bluesmoke.sourceforge.net | ||||||
| S:	Maintained | S:	Maintained | ||||||
| F:	drivers/edac/r82600_edac.c | F:	drivers/edac/r82600_edac.c | ||||||
|  | @ -3557,17 +3553,13 @@ L:	linux-pm@vger.kernel.org | ||||||
| S:	Supported | S:	Supported | ||||||
| F:	arch/x86/platform/mrst/pmu.* | F:	arch/x86/platform/mrst/pmu.* | ||||||
| 
 | 
 | ||||||
| INTEL PRO/WIRELESS 2100 NETWORK CONNECTION SUPPORT | INTEL PRO/WIRELESS 2100, 2200BG, 2915ABG NETWORK CONNECTION SUPPORT | ||||||
|  | M:	Stanislav Yakovlev <stas.yakovlev@gmail.com> | ||||||
| L:	linux-wireless@vger.kernel.org | L:	linux-wireless@vger.kernel.org | ||||||
| S:	Orphan | S:	Maintained | ||||||
| F:	Documentation/networking/README.ipw2100 | F:	Documentation/networking/README.ipw2100 | ||||||
| F:	drivers/net/wireless/ipw2x00/ipw2100.* |  | ||||||
| 
 |  | ||||||
| INTEL PRO/WIRELESS 2915ABG NETWORK CONNECTION SUPPORT |  | ||||||
| L:	linux-wireless@vger.kernel.org |  | ||||||
| S:	Orphan |  | ||||||
| F:	Documentation/networking/README.ipw2200 | F:	Documentation/networking/README.ipw2200 | ||||||
| F:	drivers/net/wireless/ipw2x00/ipw2200.* | F:	drivers/net/wireless/ipw2x00/ | ||||||
| 
 | 
 | ||||||
| INTEL(R) TRUSTED EXECUTION TECHNOLOGY (TXT) | INTEL(R) TRUSTED EXECUTION TECHNOLOGY (TXT) | ||||||
| M:	Joseph Cihula <joseph.cihula@intel.com> | M:	Joseph Cihula <joseph.cihula@intel.com> | ||||||
|  | @ -3597,6 +3589,7 @@ S:	Supported | ||||||
| F:	drivers/net/wireless/iwlegacy/ | F:	drivers/net/wireless/iwlegacy/ | ||||||
| 
 | 
 | ||||||
| INTEL WIRELESS WIFI LINK (iwlwifi) | INTEL WIRELESS WIFI LINK (iwlwifi) | ||||||
|  | M:	Johannes Berg <johannes.berg@intel.com> | ||||||
| M:	Wey-Yi Guy <wey-yi.w.guy@intel.com> | M:	Wey-Yi Guy <wey-yi.w.guy@intel.com> | ||||||
| M:	Intel Linux Wireless <ilw@linux.intel.com> | M:	Intel Linux Wireless <ilw@linux.intel.com> | ||||||
| L:	linux-wireless@vger.kernel.org | L:	linux-wireless@vger.kernel.org | ||||||
|  | @ -4314,6 +4307,13 @@ W:	http://www.kernel.org/doc/man-pages | ||||||
| L:	linux-man@vger.kernel.org | L:	linux-man@vger.kernel.org | ||||||
| S:	Maintained | S:	Maintained | ||||||
| 
 | 
 | ||||||
|  | MARVELL GIGABIT ETHERNET DRIVERS (skge/sky2) | ||||||
|  | M:	Mirko Lindner <mlindner@marvell.com> | ||||||
|  | M:	Stephen Hemminger <shemminger@vyatta.com> | ||||||
|  | L:	netdev@vger.kernel.org | ||||||
|  | S:	Maintained | ||||||
|  | F:	drivers/net/ethernet/marvell/sk* | ||||||
|  | 
 | ||||||
| MARVELL LIBERTAS WIRELESS DRIVER | MARVELL LIBERTAS WIRELESS DRIVER | ||||||
| M:	Dan Williams <dcbw@redhat.com> | M:	Dan Williams <dcbw@redhat.com> | ||||||
| L:	libertas-dev@lists.infradead.org | L:	libertas-dev@lists.infradead.org | ||||||
|  | @ -4344,12 +4344,6 @@ M:	Nicolas Pitre <nico@fluxnic.net> | ||||||
| S:	Odd Fixes | S:	Odd Fixes | ||||||
| F:	drivers/mmc/host/mvsdio.* | F:	drivers/mmc/host/mvsdio.* | ||||||
| 
 | 
 | ||||||
| MARVELL YUKON / SYSKONNECT DRIVER |  | ||||||
| M:	Mirko Lindner <mlindner@syskonnect.de> |  | ||||||
| M:	Ralph Roesler <rroesler@syskonnect.de> |  | ||||||
| W:	http://www.syskonnect.com |  | ||||||
| S:	Supported |  | ||||||
| 
 |  | ||||||
| MATROX FRAMEBUFFER DRIVER | MATROX FRAMEBUFFER DRIVER | ||||||
| L:	linux-fbdev@vger.kernel.org | L:	linux-fbdev@vger.kernel.org | ||||||
| S:	Orphan | S:	Orphan | ||||||
|  | @ -4537,8 +4531,7 @@ S:	Supported | ||||||
| F:	drivers/net/ethernet/myricom/myri10ge/ | F:	drivers/net/ethernet/myricom/myri10ge/ | ||||||
| 
 | 
 | ||||||
| NATSEMI ETHERNET DRIVER (DP8381x) | NATSEMI ETHERNET DRIVER (DP8381x) | ||||||
| M:	Tim Hockin <thockin@hockin.org> | S:	Orphan | ||||||
| S:	Maintained |  | ||||||
| F:	drivers/net/ethernet/natsemi/natsemi.c | F:	drivers/net/ethernet/natsemi/natsemi.c | ||||||
| 
 | 
 | ||||||
| NATIVE INSTRUMENTS USB SOUND INTERFACE DRIVER | NATIVE INSTRUMENTS USB SOUND INTERFACE DRIVER | ||||||
|  | @ -4807,6 +4800,7 @@ F:	arch/arm/mach-omap2/clockdomain2xxx_3xxx.c | ||||||
| F:	arch/arm/mach-omap2/clockdomain44xx.c | F:	arch/arm/mach-omap2/clockdomain44xx.c | ||||||
| 
 | 
 | ||||||
| OMAP AUDIO SUPPORT | OMAP AUDIO SUPPORT | ||||||
|  | M:	Peter Ujfalusi <peter.ujfalusi@ti.com> | ||||||
| M:	Jarkko Nikula <jarkko.nikula@bitmer.com> | M:	Jarkko Nikula <jarkko.nikula@bitmer.com> | ||||||
| L:	alsa-devel@alsa-project.org (subscribers-only) | L:	alsa-devel@alsa-project.org (subscribers-only) | ||||||
| L:	linux-omap@vger.kernel.org | L:	linux-omap@vger.kernel.org | ||||||
|  | @ -5121,6 +5115,11 @@ F:	drivers/i2c/busses/i2c-pca-* | ||||||
| F:	include/linux/i2c-algo-pca.h | F:	include/linux/i2c-algo-pca.h | ||||||
| F:	include/linux/i2c-pca-platform.h | F:	include/linux/i2c-pca-platform.h | ||||||
| 
 | 
 | ||||||
|  | PCDP - PRIMARY CONSOLE AND DEBUG PORT | ||||||
|  | M:	Khalid Aziz <khalid.aziz@hp.com> | ||||||
|  | S:	Maintained | ||||||
|  | F:	drivers/firmware/pcdp.* | ||||||
|  | 
 | ||||||
| PCI ERROR RECOVERY | PCI ERROR RECOVERY | ||||||
| M:     Linas Vepstas <linasvepstas@gmail.com> | M:     Linas Vepstas <linasvepstas@gmail.com> | ||||||
| L:	linux-pci@vger.kernel.org | L:	linux-pci@vger.kernel.org | ||||||
|  | @ -5642,7 +5641,7 @@ M:	Ohad Ben-Cohen <ohad@wizery.com> | ||||||
| S:	Maintained | S:	Maintained | ||||||
| F:	drivers/remoteproc/ | F:	drivers/remoteproc/ | ||||||
| F:	Documentation/remoteproc.txt | F:	Documentation/remoteproc.txt | ||||||
| F:	include/linux/remoteproc.txt | F:	include/linux/remoteproc.h | ||||||
| 
 | 
 | ||||||
| RFKILL | RFKILL | ||||||
| M:	Johannes Berg <johannes@sipsolutions.net> | M:	Johannes Berg <johannes@sipsolutions.net> | ||||||
|  | @ -5890,11 +5889,11 @@ F:	Documentation/scsi/st.txt | ||||||
| F:	drivers/scsi/st* | F:	drivers/scsi/st* | ||||||
| 
 | 
 | ||||||
| SCTP PROTOCOL | SCTP PROTOCOL | ||||||
| M:	Vlad Yasevich <vladislav.yasevich@hp.com> | M:	Vlad Yasevich <vyasevich@gmail.com> | ||||||
| M:	Sridhar Samudrala <sri@us.ibm.com> | M:	Sridhar Samudrala <sri@us.ibm.com> | ||||||
| L:	linux-sctp@vger.kernel.org | L:	linux-sctp@vger.kernel.org | ||||||
| W:	http://lksctp.sourceforge.net | W:	http://lksctp.sourceforge.net | ||||||
| S:	Supported | S:	Maintained | ||||||
| F:	Documentation/networking/sctp.txt | F:	Documentation/networking/sctp.txt | ||||||
| F:	include/linux/sctp.h | F:	include/linux/sctp.h | ||||||
| F:	include/net/sctp/ | F:	include/net/sctp/ | ||||||
|  | @ -6121,12 +6120,6 @@ W:	http://www.winischhofer.at/linuxsisusbvga.shtml | ||||||
| S:	Maintained | S:	Maintained | ||||||
| F:	drivers/usb/misc/sisusbvga/ | F:	drivers/usb/misc/sisusbvga/ | ||||||
| 
 | 
 | ||||||
| SKGE, SKY2 10/100/1000 GIGABIT ETHERNET DRIVERS |  | ||||||
| M:	Stephen Hemminger <shemminger@vyatta.com> |  | ||||||
| L:	netdev@vger.kernel.org |  | ||||||
| S:	Maintained |  | ||||||
| F:	drivers/net/ethernet/marvell/sk* |  | ||||||
| 
 |  | ||||||
| SLAB ALLOCATOR | SLAB ALLOCATOR | ||||||
| M:	Christoph Lameter <cl@linux-foundation.org> | M:	Christoph Lameter <cl@linux-foundation.org> | ||||||
| M:	Pekka Enberg <penberg@kernel.org> | M:	Pekka Enberg <penberg@kernel.org> | ||||||
|  | @ -6292,6 +6285,15 @@ F:	drivers/tty/serial/sunsu.c | ||||||
| F:	drivers/tty/serial/sunzilog.c | F:	drivers/tty/serial/sunzilog.c | ||||||
| F:	drivers/tty/serial/sunzilog.h | F:	drivers/tty/serial/sunzilog.h | ||||||
| 
 | 
 | ||||||
|  | SPARSE CHECKER | ||||||
|  | M:	"Christopher Li" <sparse@chrisli.org> | ||||||
|  | L:	linux-sparse@vger.kernel.org | ||||||
|  | W:	https://sparse.wiki.kernel.org/ | ||||||
|  | T:	git git://git.kernel.org/pub/scm/devel/sparse/sparse.git | ||||||
|  | T:	git git://git.kernel.org/pub/scm/devel/sparse/chrisl/sparse.git | ||||||
|  | S:	Maintained | ||||||
|  | F:	include/linux/compiler.h | ||||||
|  | 
 | ||||||
| SPEAR PLATFORM SUPPORT | SPEAR PLATFORM SUPPORT | ||||||
| M:	Viresh Kumar <viresh.kumar@st.com> | M:	Viresh Kumar <viresh.kumar@st.com> | ||||||
| L:	spear-devel@list.st.com | L:	spear-devel@list.st.com | ||||||
|  | @ -6467,6 +6469,7 @@ S:	Odd Fixes | ||||||
| F:	drivers/staging/olpc_dcon/ | F:	drivers/staging/olpc_dcon/ | ||||||
| 
 | 
 | ||||||
| STAGING - OZMO DEVICES USB OVER WIFI DRIVER | STAGING - OZMO DEVICES USB OVER WIFI DRIVER | ||||||
|  | M:	Rupesh Gujare <rgujare@ozmodevices.com> | ||||||
| M:	Chris Kelly <ckelly@ozmodevices.com> | M:	Chris Kelly <ckelly@ozmodevices.com> | ||||||
| S:	Maintained | S:	Maintained | ||||||
| F:	drivers/staging/ozwpan/ | F:	drivers/staging/ozwpan/ | ||||||
|  | @ -7462,8 +7465,7 @@ F:	include/linux/wm97xx.h | ||||||
| 
 | 
 | ||||||
| WOLFSON MICROELECTRONICS DRIVERS | WOLFSON MICROELECTRONICS DRIVERS | ||||||
| M:	Mark Brown <broonie@opensource.wolfsonmicro.com> | M:	Mark Brown <broonie@opensource.wolfsonmicro.com> | ||||||
| M:	Ian Lartey <ian@opensource.wolfsonmicro.com> | L:	patches@opensource.wolfsonmicro.com | ||||||
| M:	Dimitris Papastamos <dp@opensource.wolfsonmicro.com> |  | ||||||
| T:	git git://opensource.wolfsonmicro.com/linux-2.6-asoc | T:	git git://opensource.wolfsonmicro.com/linux-2.6-asoc | ||||||
| T:	git git://opensource.wolfsonmicro.com/linux-2.6-audioplus | T:	git git://opensource.wolfsonmicro.com/linux-2.6-audioplus | ||||||
| W:	http://opensource.wolfsonmicro.com/content/linux-drivers-wolfson-devices | W:	http://opensource.wolfsonmicro.com/content/linux-drivers-wolfson-devices | ||||||
|  | @ -7574,8 +7576,8 @@ F:	Documentation/filesystems/xfs.txt | ||||||
| F:	fs/xfs/ | F:	fs/xfs/ | ||||||
| 
 | 
 | ||||||
| XILINX AXI ETHERNET DRIVER | XILINX AXI ETHERNET DRIVER | ||||||
| M:	Ariane Keller <ariane.keller@tik.ee.ethz.ch> | M:	Anirudha Sarangi <anirudh@xilinx.com> | ||||||
| M:	Daniel Borkmann <daniel.borkmann@tik.ee.ethz.ch> | M:	John Linn <John.Linn@xilinx.com> | ||||||
| S:	Maintained | S:	Maintained | ||||||
| F:	drivers/net/ethernet/xilinx/xilinx_axienet* | F:	drivers/net/ethernet/xilinx/xilinx_axienet* | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										2
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
										
									
									
									
								
							|  | @ -1,7 +1,7 @@ | ||||||
| VERSION = 3 | VERSION = 3 | ||||||
| PATCHLEVEL = 4 | PATCHLEVEL = 4 | ||||||
| SUBLEVEL = 0 | SUBLEVEL = 0 | ||||||
| EXTRAVERSION = -rc1 | EXTRAVERSION = -rc6 | ||||||
| NAME = Saber-toothed Squirrel | NAME = Saber-toothed Squirrel | ||||||
| 
 | 
 | ||||||
| # *DOCUMENTATION*
 | # *DOCUMENTATION*
 | ||||||
|  |  | ||||||
|  | @ -477,7 +477,7 @@ config ALPHA_BROKEN_IRQ_MASK | ||||||
| 
 | 
 | ||||||
| config VGA_HOSE | config VGA_HOSE | ||||||
| 	bool | 	bool | ||||||
| 	depends on ALPHA_GENERIC || ALPHA_TITAN || ALPHA_MARVEL || ALPHA_TSUNAMI | 	depends on VGA_CONSOLE && (ALPHA_GENERIC || ALPHA_TITAN || ALPHA_MARVEL || ALPHA_TSUNAMI) | ||||||
| 	default y | 	default y | ||||||
| 	help | 	help | ||||||
| 	  Support VGA on an arbitrary hose; needed for several platforms | 	  Support VGA on an arbitrary hose; needed for several platforms | ||||||
|  |  | ||||||
|  | @ -3,6 +3,7 @@ | ||||||
| 
 | 
 | ||||||
| #include <linux/types.h> | #include <linux/types.h> | ||||||
| #include <asm/barrier.h> | #include <asm/barrier.h> | ||||||
|  | #include <asm/cmpxchg.h> | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  * Atomic operations that C can't guarantee us.  Useful for |  * Atomic operations that C can't guarantee us.  Useful for | ||||||
|  | @ -168,73 +169,6 @@ static __inline__ long atomic64_sub_return(long i, atomic64_t * v) | ||||||
| 	return result; | 	return result; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 |  | ||||||
|  * Atomic exchange routines. |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| #define __ASM__MB |  | ||||||
| #define ____xchg(type, args...)		__xchg ## type ## _local(args) |  | ||||||
| #define ____cmpxchg(type, args...)	__cmpxchg ## type ## _local(args) |  | ||||||
| #include <asm/xchg.h> |  | ||||||
| 
 |  | ||||||
| #define xchg_local(ptr,x)						\ |  | ||||||
|   ({									\ |  | ||||||
|      __typeof__(*(ptr)) _x_ = (x);					\ |  | ||||||
|      (__typeof__(*(ptr))) __xchg_local((ptr), (unsigned long)_x_,	\ |  | ||||||
| 				       sizeof(*(ptr)));			\ |  | ||||||
|   }) |  | ||||||
| 
 |  | ||||||
| #define cmpxchg_local(ptr, o, n)					\ |  | ||||||
|   ({									\ |  | ||||||
|      __typeof__(*(ptr)) _o_ = (o);					\ |  | ||||||
|      __typeof__(*(ptr)) _n_ = (n);					\ |  | ||||||
|      (__typeof__(*(ptr))) __cmpxchg_local((ptr), (unsigned long)_o_,	\ |  | ||||||
| 					  (unsigned long)_n_,		\ |  | ||||||
| 					  sizeof(*(ptr)));		\ |  | ||||||
|   }) |  | ||||||
| 
 |  | ||||||
| #define cmpxchg64_local(ptr, o, n)					\ |  | ||||||
|   ({									\ |  | ||||||
| 	BUILD_BUG_ON(sizeof(*(ptr)) != 8);				\ |  | ||||||
| 	cmpxchg_local((ptr), (o), (n));					\ |  | ||||||
|   }) |  | ||||||
| 
 |  | ||||||
| #ifdef CONFIG_SMP |  | ||||||
| #undef __ASM__MB |  | ||||||
| #define __ASM__MB	"\tmb\n" |  | ||||||
| #endif |  | ||||||
| #undef ____xchg |  | ||||||
| #undef ____cmpxchg |  | ||||||
| #define ____xchg(type, args...)		__xchg ##type(args) |  | ||||||
| #define ____cmpxchg(type, args...)	__cmpxchg ##type(args) |  | ||||||
| #include <asm/xchg.h> |  | ||||||
| 
 |  | ||||||
| #define xchg(ptr,x)							\ |  | ||||||
|   ({									\ |  | ||||||
|      __typeof__(*(ptr)) _x_ = (x);					\ |  | ||||||
|      (__typeof__(*(ptr))) __xchg((ptr), (unsigned long)_x_,		\ |  | ||||||
| 				 sizeof(*(ptr)));			\ |  | ||||||
|   }) |  | ||||||
| 
 |  | ||||||
| #define cmpxchg(ptr, o, n)						\ |  | ||||||
|   ({									\ |  | ||||||
|      __typeof__(*(ptr)) _o_ = (o);					\ |  | ||||||
|      __typeof__(*(ptr)) _n_ = (n);					\ |  | ||||||
|      (__typeof__(*(ptr))) __cmpxchg((ptr), (unsigned long)_o_,		\ |  | ||||||
| 				    (unsigned long)_n_,	sizeof(*(ptr)));\ |  | ||||||
|   }) |  | ||||||
| 
 |  | ||||||
| #define cmpxchg64(ptr, o, n)						\ |  | ||||||
|   ({									\ |  | ||||||
| 	BUILD_BUG_ON(sizeof(*(ptr)) != 8);				\ |  | ||||||
| 	cmpxchg((ptr), (o), (n));					\ |  | ||||||
|   }) |  | ||||||
| 
 |  | ||||||
| #undef __ASM__MB |  | ||||||
| #undef ____cmpxchg |  | ||||||
| 
 |  | ||||||
| #define __HAVE_ARCH_CMPXCHG 1 |  | ||||||
| 
 |  | ||||||
| #define atomic64_cmpxchg(v, old, new) (cmpxchg(&((v)->counter), old, new)) | #define atomic64_cmpxchg(v, old, new) (cmpxchg(&((v)->counter), old, new)) | ||||||
| #define atomic64_xchg(v, new) (xchg(&((v)->counter), new)) | #define atomic64_xchg(v, new) (xchg(&((v)->counter), new)) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										71
									
								
								arch/alpha/include/asm/cmpxchg.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								arch/alpha/include/asm/cmpxchg.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,71 @@ | ||||||
|  | #ifndef _ALPHA_CMPXCHG_H | ||||||
|  | #define _ALPHA_CMPXCHG_H | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Atomic exchange routines. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #define __ASM__MB | ||||||
|  | #define ____xchg(type, args...)		__xchg ## type ## _local(args) | ||||||
|  | #define ____cmpxchg(type, args...)	__cmpxchg ## type ## _local(args) | ||||||
|  | #include <asm/xchg.h> | ||||||
|  | 
 | ||||||
|  | #define xchg_local(ptr, x)						\ | ||||||
|  | ({									\ | ||||||
|  | 	__typeof__(*(ptr)) _x_ = (x);					\ | ||||||
|  | 	(__typeof__(*(ptr))) __xchg_local((ptr), (unsigned long)_x_,	\ | ||||||
|  | 				       sizeof(*(ptr)));			\ | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | #define cmpxchg_local(ptr, o, n)					\ | ||||||
|  | ({									\ | ||||||
|  | 	__typeof__(*(ptr)) _o_ = (o);					\ | ||||||
|  | 	__typeof__(*(ptr)) _n_ = (n);					\ | ||||||
|  | 	(__typeof__(*(ptr))) __cmpxchg_local((ptr), (unsigned long)_o_,	\ | ||||||
|  | 					  (unsigned long)_n_,		\ | ||||||
|  | 					  sizeof(*(ptr)));		\ | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | #define cmpxchg64_local(ptr, o, n)					\ | ||||||
|  | ({									\ | ||||||
|  | 	BUILD_BUG_ON(sizeof(*(ptr)) != 8);				\ | ||||||
|  | 	cmpxchg_local((ptr), (o), (n));					\ | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | #ifdef CONFIG_SMP | ||||||
|  | #undef __ASM__MB | ||||||
|  | #define __ASM__MB	"\tmb\n" | ||||||
|  | #endif | ||||||
|  | #undef ____xchg | ||||||
|  | #undef ____cmpxchg | ||||||
|  | #define ____xchg(type, args...)		__xchg ##type(args) | ||||||
|  | #define ____cmpxchg(type, args...)	__cmpxchg ##type(args) | ||||||
|  | #include <asm/xchg.h> | ||||||
|  | 
 | ||||||
|  | #define xchg(ptr, x)							\ | ||||||
|  | ({									\ | ||||||
|  | 	__typeof__(*(ptr)) _x_ = (x);					\ | ||||||
|  | 	(__typeof__(*(ptr))) __xchg((ptr), (unsigned long)_x_,		\ | ||||||
|  | 				 sizeof(*(ptr)));			\ | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | #define cmpxchg(ptr, o, n)						\ | ||||||
|  | ({									\ | ||||||
|  | 	__typeof__(*(ptr)) _o_ = (o);					\ | ||||||
|  | 	__typeof__(*(ptr)) _n_ = (n);					\ | ||||||
|  | 	(__typeof__(*(ptr))) __cmpxchg((ptr), (unsigned long)_o_,	\ | ||||||
|  | 				    (unsigned long)_n_,	sizeof(*(ptr)));\ | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | #define cmpxchg64(ptr, o, n)						\ | ||||||
|  | ({									\ | ||||||
|  | 	BUILD_BUG_ON(sizeof(*(ptr)) != 8);				\ | ||||||
|  | 	cmpxchg((ptr), (o), (n));					\ | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | #undef __ASM__MB | ||||||
|  | #undef ____cmpxchg | ||||||
|  | 
 | ||||||
|  | #define __HAVE_ARCH_CMPXCHG 1 | ||||||
|  | 
 | ||||||
|  | #endif /* _ALPHA_CMPXCHG_H */ | ||||||
|  | @ -12,16 +12,22 @@ static inline struct dma_map_ops *get_dma_ops(struct device *dev) | ||||||
| 
 | 
 | ||||||
| #include <asm-generic/dma-mapping-common.h> | #include <asm-generic/dma-mapping-common.h> | ||||||
| 
 | 
 | ||||||
| static inline void *dma_alloc_coherent(struct device *dev, size_t size, | #define dma_alloc_coherent(d,s,h,f)	dma_alloc_attrs(d,s,h,f,NULL) | ||||||
| 				       dma_addr_t *dma_handle, gfp_t gfp) | 
 | ||||||
|  | static inline void *dma_alloc_attrs(struct device *dev, size_t size, | ||||||
|  | 				    dma_addr_t *dma_handle, gfp_t gfp, | ||||||
|  | 				    struct dma_attrs *attrs) | ||||||
| { | { | ||||||
| 	return get_dma_ops(dev)->alloc_coherent(dev, size, dma_handle, gfp); | 	return get_dma_ops(dev)->alloc(dev, size, dma_handle, gfp, attrs); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static inline void dma_free_coherent(struct device *dev, size_t size, | #define dma_free_coherent(d,s,c,h) dma_free_attrs(d,s,c,h,NULL) | ||||||
| 				     void *vaddr, dma_addr_t dma_handle) | 
 | ||||||
|  | static inline void dma_free_attrs(struct device *dev, size_t size, | ||||||
|  | 				  void *vaddr, dma_addr_t dma_handle, | ||||||
|  | 				  struct dma_attrs *attrs) | ||||||
| { | { | ||||||
| 	get_dma_ops(dev)->free_coherent(dev, size, vaddr, dma_handle); | 	get_dma_ops(dev)->free(dev, size, vaddr, dma_handle, attrs); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static inline int dma_mapping_error(struct device *dev, dma_addr_t dma_addr) | static inline int dma_mapping_error(struct device *dev, dma_addr_t dma_addr) | ||||||
|  |  | ||||||
|  | @ -1,14 +1,10 @@ | ||||||
| #ifndef _ALPHA_RTC_H | #ifndef _ALPHA_RTC_H | ||||||
| #define _ALPHA_RTC_H | #define _ALPHA_RTC_H | ||||||
| 
 | 
 | ||||||
| #if defined(CONFIG_ALPHA_GENERIC) | #if defined(CONFIG_ALPHA_MARVEL) && defined(CONFIG_SMP) \ | ||||||
|  |  || defined(CONFIG_ALPHA_GENERIC) | ||||||
| # define get_rtc_time		alpha_mv.rtc_get_time | # define get_rtc_time		alpha_mv.rtc_get_time | ||||||
| # define set_rtc_time		alpha_mv.rtc_set_time | # define set_rtc_time		alpha_mv.rtc_set_time | ||||||
| #else |  | ||||||
| # if defined(CONFIG_ALPHA_MARVEL) && defined(CONFIG_SMP) |  | ||||||
| #  define get_rtc_time		marvel_get_rtc_time |  | ||||||
| #  define set_rtc_time		marvel_set_rtc_time |  | ||||||
| # endif |  | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #include <asm-generic/rtc.h> | #include <asm-generic/rtc.h> | ||||||
|  |  | ||||||
|  | @ -1,10 +1,10 @@ | ||||||
| #ifndef _ALPHA_ATOMIC_H | #ifndef _ALPHA_CMPXCHG_H | ||||||
| #error Do not include xchg.h directly! | #error Do not include xchg.h directly! | ||||||
| #else | #else | ||||||
| /*
 | /*
 | ||||||
|  * xchg/xchg_local and cmpxchg/cmpxchg_local share the same code |  * xchg/xchg_local and cmpxchg/cmpxchg_local share the same code | ||||||
|  * except that local version do not have the expensive memory barrier. |  * except that local version do not have the expensive memory barrier. | ||||||
|  * So this file is included twice from asm/system.h. |  * So this file is included twice from asm/cmpxchg.h. | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  |  | ||||||
|  | @ -11,6 +11,7 @@ | ||||||
| #include <asm/core_tsunami.h> | #include <asm/core_tsunami.h> | ||||||
| #undef __EXTERN_INLINE | #undef __EXTERN_INLINE | ||||||
| 
 | 
 | ||||||
|  | #include <linux/module.h> | ||||||
| #include <linux/types.h> | #include <linux/types.h> | ||||||
| #include <linux/pci.h> | #include <linux/pci.h> | ||||||
| #include <linux/sched.h> | #include <linux/sched.h> | ||||||
|  |  | ||||||
|  | @ -108,7 +108,8 @@ sys_pciconfig_write(unsigned long bus, unsigned long dfn, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void *alpha_noop_alloc_coherent(struct device *dev, size_t size, | static void *alpha_noop_alloc_coherent(struct device *dev, size_t size, | ||||||
| 				       dma_addr_t *dma_handle, gfp_t gfp) | 				       dma_addr_t *dma_handle, gfp_t gfp, | ||||||
|  | 				       struct dma_attrs *attrs) | ||||||
| { | { | ||||||
| 	void *ret; | 	void *ret; | ||||||
| 
 | 
 | ||||||
|  | @ -123,7 +124,8 @@ static void *alpha_noop_alloc_coherent(struct device *dev, size_t size, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void alpha_noop_free_coherent(struct device *dev, size_t size, | static void alpha_noop_free_coherent(struct device *dev, size_t size, | ||||||
| 				     void *cpu_addr, dma_addr_t dma_addr) | 				     void *cpu_addr, dma_addr_t dma_addr, | ||||||
|  | 				     struct dma_attrs *attrs) | ||||||
| { | { | ||||||
| 	free_pages((unsigned long)cpu_addr, get_order(size)); | 	free_pages((unsigned long)cpu_addr, get_order(size)); | ||||||
| } | } | ||||||
|  | @ -174,8 +176,8 @@ static int alpha_noop_set_mask(struct device *dev, u64 mask) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| struct dma_map_ops alpha_noop_ops = { | struct dma_map_ops alpha_noop_ops = { | ||||||
| 	.alloc_coherent		= alpha_noop_alloc_coherent, | 	.alloc			= alpha_noop_alloc_coherent, | ||||||
| 	.free_coherent		= alpha_noop_free_coherent, | 	.free			= alpha_noop_free_coherent, | ||||||
| 	.map_page		= alpha_noop_map_page, | 	.map_page		= alpha_noop_map_page, | ||||||
| 	.map_sg			= alpha_noop_map_sg, | 	.map_sg			= alpha_noop_map_sg, | ||||||
| 	.mapping_error		= alpha_noop_mapping_error, | 	.mapping_error		= alpha_noop_mapping_error, | ||||||
|  |  | ||||||
|  | @ -434,7 +434,8 @@ static void alpha_pci_unmap_page(struct device *dev, dma_addr_t dma_addr, | ||||||
|    else DMA_ADDRP is undefined.  */ |    else DMA_ADDRP is undefined.  */ | ||||||
| 
 | 
 | ||||||
| static void *alpha_pci_alloc_coherent(struct device *dev, size_t size, | static void *alpha_pci_alloc_coherent(struct device *dev, size_t size, | ||||||
| 				      dma_addr_t *dma_addrp, gfp_t gfp) | 				      dma_addr_t *dma_addrp, gfp_t gfp, | ||||||
|  | 				      struct dma_attrs *attrs) | ||||||
| { | { | ||||||
| 	struct pci_dev *pdev = alpha_gendev_to_pci(dev); | 	struct pci_dev *pdev = alpha_gendev_to_pci(dev); | ||||||
| 	void *cpu_addr; | 	void *cpu_addr; | ||||||
|  | @ -478,7 +479,8 @@ try_again: | ||||||
|    DMA_ADDR past this call are illegal.  */ |    DMA_ADDR past this call are illegal.  */ | ||||||
| 
 | 
 | ||||||
| static void alpha_pci_free_coherent(struct device *dev, size_t size, | static void alpha_pci_free_coherent(struct device *dev, size_t size, | ||||||
| 				    void *cpu_addr, dma_addr_t dma_addr) | 				    void *cpu_addr, dma_addr_t dma_addr, | ||||||
|  | 				    struct dma_attrs *attrs) | ||||||
| { | { | ||||||
| 	struct pci_dev *pdev = alpha_gendev_to_pci(dev); | 	struct pci_dev *pdev = alpha_gendev_to_pci(dev); | ||||||
| 	pci_unmap_single(pdev, dma_addr, size, PCI_DMA_BIDIRECTIONAL); | 	pci_unmap_single(pdev, dma_addr, size, PCI_DMA_BIDIRECTIONAL); | ||||||
|  | @ -952,8 +954,8 @@ static int alpha_pci_set_mask(struct device *dev, u64 mask) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| struct dma_map_ops alpha_pci_ops = { | struct dma_map_ops alpha_pci_ops = { | ||||||
| 	.alloc_coherent		= alpha_pci_alloc_coherent, | 	.alloc			= alpha_pci_alloc_coherent, | ||||||
| 	.free_coherent		= alpha_pci_free_coherent, | 	.free			= alpha_pci_free_coherent, | ||||||
| 	.map_page		= alpha_pci_map_page, | 	.map_page		= alpha_pci_map_page, | ||||||
| 	.unmap_page		= alpha_pci_unmap_page, | 	.unmap_page		= alpha_pci_unmap_page, | ||||||
| 	.map_sg			= alpha_pci_map_sg, | 	.map_sg			= alpha_pci_map_sg, | ||||||
|  |  | ||||||
|  | @ -120,12 +120,13 @@ SYSCALL_DEFINE5(rt_sigaction, int, sig, const struct sigaction __user *, act, | ||||||
|  */ |  */ | ||||||
| SYSCALL_DEFINE1(sigsuspend, old_sigset_t, mask) | SYSCALL_DEFINE1(sigsuspend, old_sigset_t, mask) | ||||||
| { | { | ||||||
| 	mask &= _BLOCKABLE; | 	sigset_t blocked; | ||||||
| 	spin_lock_irq(¤t->sighand->siglock); | 
 | ||||||
| 	current->saved_sigmask = current->blocked; | 	current->saved_sigmask = current->blocked; | ||||||
| 	siginitset(¤t->blocked, mask); | 
 | ||||||
| 	recalc_sigpending(); | 	mask &= _BLOCKABLE; | ||||||
| 	spin_unlock_irq(¤t->sighand->siglock); | 	siginitset(&blocked, mask); | ||||||
|  | 	set_current_blocked(&blocked); | ||||||
| 
 | 
 | ||||||
| 	current->state = TASK_INTERRUPTIBLE; | 	current->state = TASK_INTERRUPTIBLE; | ||||||
| 	schedule(); | 	schedule(); | ||||||
|  | @ -238,10 +239,7 @@ do_sigreturn(struct sigcontext __user *sc, struct pt_regs *regs, | ||||||
| 		goto give_sigsegv; | 		goto give_sigsegv; | ||||||
| 
 | 
 | ||||||
| 	sigdelsetmask(&set, ~_BLOCKABLE); | 	sigdelsetmask(&set, ~_BLOCKABLE); | ||||||
| 	spin_lock_irq(¤t->sighand->siglock); | 	set_current_blocked(&set); | ||||||
| 	current->blocked = set; |  | ||||||
| 	recalc_sigpending(); |  | ||||||
| 	spin_unlock_irq(¤t->sighand->siglock); |  | ||||||
| 
 | 
 | ||||||
| 	if (restore_sigcontext(sc, regs, sw)) | 	if (restore_sigcontext(sc, regs, sw)) | ||||||
| 		goto give_sigsegv; | 		goto give_sigsegv; | ||||||
|  | @ -276,10 +274,7 @@ do_rt_sigreturn(struct rt_sigframe __user *frame, struct pt_regs *regs, | ||||||
| 		goto give_sigsegv; | 		goto give_sigsegv; | ||||||
| 
 | 
 | ||||||
| 	sigdelsetmask(&set, ~_BLOCKABLE); | 	sigdelsetmask(&set, ~_BLOCKABLE); | ||||||
| 	spin_lock_irq(¤t->sighand->siglock); | 	set_current_blocked(&set); | ||||||
| 	current->blocked = set; |  | ||||||
| 	recalc_sigpending(); |  | ||||||
| 	spin_unlock_irq(¤t->sighand->siglock); |  | ||||||
| 
 | 
 | ||||||
| 	if (restore_sigcontext(&frame->uc.uc_mcontext, regs, sw)) | 	if (restore_sigcontext(&frame->uc.uc_mcontext, regs, sw)) | ||||||
| 		goto give_sigsegv; | 		goto give_sigsegv; | ||||||
|  | @ -501,14 +496,8 @@ handle_signal(int sig, struct k_sigaction *ka, siginfo_t *info, | ||||||
| 	else | 	else | ||||||
| 		ret = setup_frame(sig, ka, oldset, regs, sw); | 		ret = setup_frame(sig, ka, oldset, regs, sw); | ||||||
| 
 | 
 | ||||||
| 	if (ret == 0) { | 	if (ret == 0) | ||||||
| 		spin_lock_irq(¤t->sighand->siglock); | 		block_sigmask(ka, sig); | ||||||
| 		sigorsets(¤t->blocked,¤t->blocked,&ka->sa.sa_mask); |  | ||||||
| 		if (!(ka->sa.sa_flags & SA_NODEFER))  |  | ||||||
| 			sigaddset(¤t->blocked,sig); |  | ||||||
| 		recalc_sigpending(); |  | ||||||
| 		spin_unlock_irq(¤t->sighand->siglock); |  | ||||||
| 	} |  | ||||||
| 
 | 
 | ||||||
| 	return ret; | 	return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -450,7 +450,7 @@ setup_smp(void) | ||||||
| 		smp_num_probed = 1; | 		smp_num_probed = 1; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	printk(KERN_INFO "SMP: %d CPUs probed -- cpu_present_map = %lx\n", | 	printk(KERN_INFO "SMP: %d CPUs probed -- cpu_present_mask = %lx\n", | ||||||
| 	       smp_num_probed, cpumask_bits(cpu_present_mask)[0]); | 	       smp_num_probed, cpumask_bits(cpu_present_mask)[0]); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -317,7 +317,7 @@ marvel_init_irq(void) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int  | static int  | ||||||
| marvel_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) | marvel_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | ||||||
| { | { | ||||||
| 	struct pci_controller *hose = dev->sysdata; | 	struct pci_controller *hose = dev->sysdata; | ||||||
| 	struct io7_port *io7_port = hose->sysdata; | 	struct io7_port *io7_port = hose->sysdata; | ||||||
|  |  | ||||||
|  | @ -338,6 +338,7 @@ config ARCH_AT91 | ||||||
| 	select HAVE_CLK | 	select HAVE_CLK | ||||||
| 	select CLKDEV_LOOKUP | 	select CLKDEV_LOOKUP | ||||||
| 	select IRQ_DOMAIN | 	select IRQ_DOMAIN | ||||||
|  | 	select NEED_MACH_IO_H if PCCARD | ||||||
| 	help | 	help | ||||||
| 	  This enables support for systems based on the Atmel AT91RM9200, | 	  This enables support for systems based on the Atmel AT91RM9200, | ||||||
| 	  AT91SAM9 processors. | 	  AT91SAM9 processors. | ||||||
|  | @ -1185,6 +1186,15 @@ if !MMU | ||||||
| source "arch/arm/Kconfig-nommu" | source "arch/arm/Kconfig-nommu" | ||||||
| endif | endif | ||||||
| 
 | 
 | ||||||
|  | config ARM_ERRATA_326103 | ||||||
|  | 	bool "ARM errata: FSR write bit incorrect on a SWP to read-only memory" | ||||||
|  | 	depends on CPU_V6 | ||||||
|  | 	help | ||||||
|  | 	  Executing a SWP instruction to read-only memory does not set bit 11 | ||||||
|  | 	  of the FSR on the ARM 1136 prior to r1p0. This causes the kernel to | ||||||
|  | 	  treat the access as a read, preventing a COW from occurring and | ||||||
|  | 	  causing the faulting task to livelock. | ||||||
|  | 
 | ||||||
| config ARM_ERRATA_411920 | config ARM_ERRATA_411920 | ||||||
| 	bool "ARM errata: Invalidation of the Instruction Cache operation can fail" | 	bool "ARM errata: Invalidation of the Instruction Cache operation can fail" | ||||||
| 	depends on CPU_V6 || CPU_V6K | 	depends on CPU_V6 || CPU_V6K | ||||||
|  |  | ||||||
|  | @ -77,6 +77,8 @@ int atags_to_fdt(void *atag_list, void *fdt, int total_space) | ||||||
| 		} else if (atag->hdr.tag == ATAG_MEM) { | 		} else if (atag->hdr.tag == ATAG_MEM) { | ||||||
| 			if (memcount >= sizeof(mem_reg_property)/4) | 			if (memcount >= sizeof(mem_reg_property)/4) | ||||||
| 				continue; | 				continue; | ||||||
|  | 			if (!atag->u.mem.size) | ||||||
|  | 				continue; | ||||||
| 			mem_reg_property[memcount++] = cpu_to_fdt32(atag->u.mem.start); | 			mem_reg_property[memcount++] = cpu_to_fdt32(atag->u.mem.start); | ||||||
| 			mem_reg_property[memcount++] = cpu_to_fdt32(atag->u.mem.size); | 			mem_reg_property[memcount++] = cpu_to_fdt32(atag->u.mem.size); | ||||||
| 		} else if (atag->hdr.tag == ATAG_INITRD2) { | 		} else if (atag->hdr.tag == ATAG_INITRD2) { | ||||||
|  |  | ||||||
|  | @ -273,7 +273,7 @@ restart:	adr	r0, LC0 | ||||||
| 		add	r0, r0, #0x100 | 		add	r0, r0, #0x100 | ||||||
| 		mov	r1, r6 | 		mov	r1, r6 | ||||||
| 		sub	r2, sp, r6 | 		sub	r2, sp, r6 | ||||||
| 		blne	atags_to_fdt | 		bleq	atags_to_fdt | ||||||
| 
 | 
 | ||||||
| 		ldmfd	sp!, {r0-r3, ip, lr} | 		ldmfd	sp!, {r0-r3, ip, lr} | ||||||
| 		sub	sp, sp, #0x10000 | 		sub	sp, sp, #0x10000 | ||||||
|  |  | ||||||
|  | @ -35,7 +35,7 @@ | ||||||
| 		}; | 		}; | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
| 	memory@20000000 { | 	memory { | ||||||
| 		reg = <0x20000000 0x08000000>; | 		reg = <0x20000000 0x08000000>; | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
|  | @ -55,7 +55,6 @@ | ||||||
| 				#interrupt-cells = <2>; | 				#interrupt-cells = <2>; | ||||||
| 				compatible = "atmel,at91rm9200-aic"; | 				compatible = "atmel,at91rm9200-aic"; | ||||||
| 				interrupt-controller; | 				interrupt-controller; | ||||||
| 				interrupt-parent; |  | ||||||
| 				reg = <0xfffff000 0x200>; | 				reg = <0xfffff000 0x200>; | ||||||
| 			}; | 			}; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -37,8 +37,8 @@ | ||||||
| 		usb0: ohci@00600000 { | 		usb0: ohci@00600000 { | ||||||
| 			status = "okay"; | 			status = "okay"; | ||||||
| 			num-ports = <2>; | 			num-ports = <2>; | ||||||
| 			atmel,vbus-gpio = <&pioD 19 0 | 			atmel,vbus-gpio = <&pioD 19 1 | ||||||
| 					   &pioD 20 0 | 					   &pioD 20 1 | ||||||
| 					  >; | 					  >; | ||||||
| 		}; | 		}; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -36,7 +36,7 @@ | ||||||
| 		}; | 		}; | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
| 	memory@70000000 { | 	memory { | ||||||
| 		reg = <0x70000000 0x10000000>; | 		reg = <0x70000000 0x10000000>; | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
|  | @ -56,7 +56,6 @@ | ||||||
| 				#interrupt-cells = <2>; | 				#interrupt-cells = <2>; | ||||||
| 				compatible = "atmel,at91rm9200-aic"; | 				compatible = "atmel,at91rm9200-aic"; | ||||||
| 				interrupt-controller; | 				interrupt-controller; | ||||||
| 				interrupt-parent; |  | ||||||
| 				reg = <0xfffff000 0x200>; | 				reg = <0xfffff000 0x200>; | ||||||
| 			}; | 			}; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -17,7 +17,7 @@ | ||||||
| 		bootargs = "mem=64M console=ttyS0,115200 root=/dev/mtdblock1 rw rootfstype=jffs2"; | 		bootargs = "mem=64M console=ttyS0,115200 root=/dev/mtdblock1 rw rootfstype=jffs2"; | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
| 	memory@70000000 { | 	memory { | ||||||
| 		reg = <0x70000000 0x4000000>; | 		reg = <0x70000000 0x4000000>; | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
|  | @ -73,8 +73,8 @@ | ||||||
| 		usb0: ohci@00700000 { | 		usb0: ohci@00700000 { | ||||||
| 			status = "okay"; | 			status = "okay"; | ||||||
| 			num-ports = <2>; | 			num-ports = <2>; | ||||||
| 			atmel,vbus-gpio = <&pioD 1 0 | 			atmel,vbus-gpio = <&pioD 1 1 | ||||||
| 					   &pioD 3 0>; | 					   &pioD 3 1>; | ||||||
| 		}; | 		}; | ||||||
| 
 | 
 | ||||||
| 		usb1: ehci@00800000 { | 		usb1: ehci@00800000 { | ||||||
|  |  | ||||||
|  | @ -34,7 +34,7 @@ | ||||||
| 		}; | 		}; | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
| 	memory@20000000 { | 	memory { | ||||||
| 		reg = <0x20000000 0x10000000>; | 		reg = <0x20000000 0x10000000>; | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
|  | @ -54,7 +54,6 @@ | ||||||
| 				#interrupt-cells = <2>; | 				#interrupt-cells = <2>; | ||||||
| 				compatible = "atmel,at91rm9200-aic"; | 				compatible = "atmel,at91rm9200-aic"; | ||||||
| 				interrupt-controller; | 				interrupt-controller; | ||||||
| 				interrupt-parent; |  | ||||||
| 				reg = <0xfffff000 0x200>; | 				reg = <0xfffff000 0x200>; | ||||||
| 			}; | 			}; | ||||||
| 
 | 
 | ||||||
|  | @ -201,8 +200,8 @@ | ||||||
| 			      >; | 			      >; | ||||||
| 			atmel,nand-addr-offset = <21>; | 			atmel,nand-addr-offset = <21>; | ||||||
| 			atmel,nand-cmd-offset = <22>; | 			atmel,nand-cmd-offset = <22>; | ||||||
| 			gpios = <&pioC 8 0 | 			gpios = <&pioD 5 0 | ||||||
| 				 &pioC 14 0 | 				 &pioD 4 0 | ||||||
| 				 0 | 				 0 | ||||||
| 				>; | 				>; | ||||||
| 			status = "disabled"; | 			status = "disabled"; | ||||||
|  |  | ||||||
|  | @ -8,7 +8,7 @@ | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| / { | / { | ||||||
| 	memory@20000000 { | 	memory { | ||||||
| 		reg = <0x20000000 0x8000000>; | 		reg = <0x20000000 0x8000000>; | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -24,7 +24,6 @@ | ||||||
| 			#interrupt-cells = <3>; | 			#interrupt-cells = <3>; | ||||||
| 			#address-cells = <1>; | 			#address-cells = <1>; | ||||||
| 			interrupt-controller; | 			interrupt-controller; | ||||||
| 			interrupt-parent; |  | ||||||
| 			reg = <0xa0411000 0x1000>, | 			reg = <0xa0411000 0x1000>, | ||||||
| 			      <0xa0410100 0x100>; | 			      <0xa0410100 0x100>; | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
|  | @ -89,7 +89,6 @@ | ||||||
| 			#size-cells = <0>; | 			#size-cells = <0>; | ||||||
| 			#address-cells = <1>; | 			#address-cells = <1>; | ||||||
| 			interrupt-controller; | 			interrupt-controller; | ||||||
| 			interrupt-parent; |  | ||||||
| 			reg = <0xfff11000 0x1000>, | 			reg = <0xfff11000 0x1000>, | ||||||
| 			      <0xfff10100 0x100>; | 			      <0xfff10100 0x100>; | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
|  | @ -10,7 +10,7 @@ | ||||||
| 	intc: interrupt-controller@02080000 { | 	intc: interrupt-controller@02080000 { | ||||||
| 		compatible = "qcom,msm-8660-qgic"; | 		compatible = "qcom,msm-8660-qgic"; | ||||||
| 		interrupt-controller; | 		interrupt-controller; | ||||||
| 		#interrupt-cells = <1>; | 		#interrupt-cells = <3>; | ||||||
| 		reg = < 0x02080000 0x1000 >, | 		reg = < 0x02080000 0x1000 >, | ||||||
| 		      < 0x02081000 0x1000 >; | 		      < 0x02081000 0x1000 >; | ||||||
| 	}; | 	}; | ||||||
|  | @ -19,6 +19,6 @@ | ||||||
| 		compatible = "qcom,msm-hsuart", "qcom,msm-uart"; | 		compatible = "qcom,msm-hsuart", "qcom,msm-uart"; | ||||||
| 		reg = <0x19c40000 0x1000>, | 		reg = <0x19c40000 0x1000>, | ||||||
| 		      <0x19c00000 0x1000>; | 		      <0x19c00000 0x1000>; | ||||||
| 		interrupts = <195>; | 		interrupts = <0 195 0x0>; | ||||||
| 	}; | 	}; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | @ -16,7 +16,7 @@ | ||||||
| 		bootargs = "mem=64M console=ttyS0,115200 root=/dev/mtdblock5 rw rootfstype=ubifs"; | 		bootargs = "mem=64M console=ttyS0,115200 root=/dev/mtdblock5 rw rootfstype=ubifs"; | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
| 	memory@20000000 { | 	memory { | ||||||
| 		reg = <0x20000000 0x4000000>; | 		reg = <0x20000000 0x4000000>; | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -173,7 +173,7 @@ | ||||||
| 			mmc@5000 { | 			mmc@5000 { | ||||||
| 				compatible = "arm,primecell"; | 				compatible = "arm,primecell"; | ||||||
| 				reg = < 0x5000 0x1000>; | 				reg = < 0x5000 0x1000>; | ||||||
| 				interrupts = <22>; | 				interrupts = <22 34>; | ||||||
| 			}; | 			}; | ||||||
| 			kmi@6000 { | 			kmi@6000 { | ||||||
| 				compatible = "arm,pl050", "arm,primecell"; | 				compatible = "arm,pl050", "arm,primecell"; | ||||||
|  |  | ||||||
|  | @ -41,7 +41,7 @@ | ||||||
| 			mmc@b000 { | 			mmc@b000 { | ||||||
| 				compatible = "arm,primecell"; | 				compatible = "arm,primecell"; | ||||||
| 				reg = <0xb000 0x1000>; | 				reg = <0xb000 0x1000>; | ||||||
| 				interrupts = <23>; | 				interrupts = <23 34>; | ||||||
| 			}; | 			}; | ||||||
| 		}; | 		}; | ||||||
| 	}; | 	}; | ||||||
|  |  | ||||||
|  | @ -427,19 +427,18 @@ int __init vic_of_init(struct device_node *node, struct device_node *parent) | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  * Handle each interrupt in a single VIC.  Returns non-zero if we've |  * Handle each interrupt in a single VIC.  Returns non-zero if we've | ||||||
|  * handled at least one interrupt.  This does a single read of the |  * handled at least one interrupt.  This reads the status register | ||||||
|  * status register and handles all interrupts in order from LSB first. |  * before handling each interrupt, which is necessary given that | ||||||
|  |  * handle_IRQ may briefly re-enable interrupts for soft IRQ handling. | ||||||
|  */ |  */ | ||||||
| static int handle_one_vic(struct vic_device *vic, struct pt_regs *regs) | static int handle_one_vic(struct vic_device *vic, struct pt_regs *regs) | ||||||
| { | { | ||||||
| 	u32 stat, irq; | 	u32 stat, irq; | ||||||
| 	int handled = 0; | 	int handled = 0; | ||||||
| 
 | 
 | ||||||
| 	stat = readl_relaxed(vic->base + VIC_IRQ_STATUS); | 	while ((stat = readl_relaxed(vic->base + VIC_IRQ_STATUS))) { | ||||||
| 	while (stat) { |  | ||||||
| 		irq = ffs(stat) - 1; | 		irq = ffs(stat) - 1; | ||||||
| 		handle_IRQ(irq_find_mapping(vic->domain, irq), regs); | 		handle_IRQ(irq_find_mapping(vic->domain, irq), regs); | ||||||
| 		stat &= ~(1 << irq); |  | ||||||
| 		handled = 1; | 		handled = 1; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -112,6 +112,7 @@ CONFIG_WATCHDOG=y | ||||||
| CONFIG_IMX2_WDT=y | CONFIG_IMX2_WDT=y | ||||||
| CONFIG_MFD_MC13XXX=y | CONFIG_MFD_MC13XXX=y | ||||||
| CONFIG_REGULATOR=y | CONFIG_REGULATOR=y | ||||||
|  | CONFIG_REGULATOR_FIXED_VOLTAGE=y | ||||||
| CONFIG_REGULATOR_MC13783=y | CONFIG_REGULATOR_MC13783=y | ||||||
| CONFIG_REGULATOR_MC13892=y | CONFIG_REGULATOR_MC13892=y | ||||||
| CONFIG_FB=y | CONFIG_FB=y | ||||||
|  |  | ||||||
|  | @ -14,6 +14,8 @@ CONFIG_MODULE_FORCE_UNLOAD=y | ||||||
| # CONFIG_BLK_DEV_BSG is not set | # CONFIG_BLK_DEV_BSG is not set | ||||||
| CONFIG_BLK_DEV_INTEGRITY=y | CONFIG_BLK_DEV_INTEGRITY=y | ||||||
| CONFIG_ARCH_S3C24XX=y | CONFIG_ARCH_S3C24XX=y | ||||||
|  | # CONFIG_CPU_S3C2410 is not set | ||||||
|  | CONFIG_CPU_S3C2440=y | ||||||
| CONFIG_S3C_ADC=y | CONFIG_S3C_ADC=y | ||||||
| CONFIG_S3C24XX_PWM=y | CONFIG_S3C24XX_PWM=y | ||||||
| CONFIG_MACH_MINI2440=y | CONFIG_MACH_MINI2440=y | ||||||
|  |  | ||||||
|  | @ -8,8 +8,6 @@ CONFIG_MODULE_UNLOAD=y | ||||||
| # CONFIG_LBDAF is not set | # CONFIG_LBDAF is not set | ||||||
| # CONFIG_BLK_DEV_BSG is not set | # CONFIG_BLK_DEV_BSG is not set | ||||||
| CONFIG_ARCH_U8500=y | CONFIG_ARCH_U8500=y | ||||||
| CONFIG_UX500_SOC_DB5500=y |  | ||||||
| CONFIG_UX500_SOC_DB8500=y |  | ||||||
| CONFIG_MACH_HREFV60=y | CONFIG_MACH_HREFV60=y | ||||||
| CONFIG_MACH_SNOWBALL=y | CONFIG_MACH_SNOWBALL=y | ||||||
| CONFIG_MACH_U5500=y | CONFIG_MACH_U5500=y | ||||||
|  | @ -39,7 +37,6 @@ CONFIG_CAIF=y | ||||||
| CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||||||
| CONFIG_BLK_DEV_RAM=y | CONFIG_BLK_DEV_RAM=y | ||||||
| CONFIG_BLK_DEV_RAM_SIZE=65536 | CONFIG_BLK_DEV_RAM_SIZE=65536 | ||||||
| CONFIG_MISC_DEVICES=y |  | ||||||
| CONFIG_AB8500_PWM=y | CONFIG_AB8500_PWM=y | ||||||
| CONFIG_SENSORS_BH1780=y | CONFIG_SENSORS_BH1780=y | ||||||
| CONFIG_NETDEVICES=y | CONFIG_NETDEVICES=y | ||||||
|  | @ -65,16 +62,18 @@ CONFIG_SERIAL_AMBA_PL011=y | ||||||
| CONFIG_SERIAL_AMBA_PL011_CONSOLE=y | CONFIG_SERIAL_AMBA_PL011_CONSOLE=y | ||||||
| CONFIG_HW_RANDOM=y | CONFIG_HW_RANDOM=y | ||||||
| CONFIG_HW_RANDOM_NOMADIK=y | CONFIG_HW_RANDOM_NOMADIK=y | ||||||
| CONFIG_I2C=y |  | ||||||
| CONFIG_I2C_NOMADIK=y |  | ||||||
| CONFIG_SPI=y | CONFIG_SPI=y | ||||||
| CONFIG_SPI_PL022=y | CONFIG_SPI_PL022=y | ||||||
| CONFIG_GPIO_STMPE=y | CONFIG_GPIO_STMPE=y | ||||||
| CONFIG_GPIO_TC3589X=y | CONFIG_GPIO_TC3589X=y | ||||||
|  | CONFIG_POWER_SUPPLY=y | ||||||
|  | CONFIG_AB8500_BM=y | ||||||
|  | CONFIG_AB8500_BATTERY_THERM_ON_BATCTRL=y | ||||||
| CONFIG_MFD_STMPE=y | CONFIG_MFD_STMPE=y | ||||||
| CONFIG_MFD_TC3589X=y | CONFIG_MFD_TC3589X=y | ||||||
| CONFIG_AB5500_CORE=y | CONFIG_AB5500_CORE=y | ||||||
| CONFIG_AB8500_CORE=y | CONFIG_AB8500_CORE=y | ||||||
|  | CONFIG_REGULATOR=y | ||||||
| CONFIG_REGULATOR_AB8500=y | CONFIG_REGULATOR_AB8500=y | ||||||
| # CONFIG_HID_SUPPORT is not set | # CONFIG_HID_SUPPORT is not set | ||||||
| CONFIG_USB_GADGET=y | CONFIG_USB_GADGET=y | ||||||
|  |  | ||||||
|  | @ -2,6 +2,7 @@ | ||||||
| #define __ASM_BARRIER_H | #define __ASM_BARRIER_H | ||||||
| 
 | 
 | ||||||
| #ifndef __ASSEMBLY__ | #ifndef __ASSEMBLY__ | ||||||
|  | #include <asm/outercache.h> | ||||||
| 
 | 
 | ||||||
| #define nop() __asm__ __volatile__("mov\tr0,r0\t@ nop\n\t"); | #define nop() __asm__ __volatile__("mov\tr0,r0\t@ nop\n\t"); | ||||||
| 
 | 
 | ||||||
|  | @ -39,7 +40,6 @@ | ||||||
| #ifdef CONFIG_ARCH_HAS_BARRIERS | #ifdef CONFIG_ARCH_HAS_BARRIERS | ||||||
| #include <mach/barriers.h> | #include <mach/barriers.h> | ||||||
| #elif defined(CONFIG_ARM_DMA_MEM_BUFFERABLE) || defined(CONFIG_SMP) | #elif defined(CONFIG_ARM_DMA_MEM_BUFFERABLE) || defined(CONFIG_SMP) | ||||||
| #include <asm/outercache.h> |  | ||||||
| #define mb()		do { dsb(); outer_sync(); } while (0) | #define mb()		do { dsb(); outer_sync(); } while (0) | ||||||
| #define rmb()		dsb() | #define rmb()		dsb() | ||||||
| #define wmb()		mb() | #define wmb()		mb() | ||||||
|  |  | ||||||
|  | @ -119,7 +119,7 @@ static inline void __iomem *__typesafe_io(unsigned long addr) | ||||||
| #ifdef CONFIG_NEED_MACH_IO_H | #ifdef CONFIG_NEED_MACH_IO_H | ||||||
| #include <mach/io.h> | #include <mach/io.h> | ||||||
| #else | #else | ||||||
| #define __io(a)		({ (void)(a); __typesafe_io(0); }) | #define __io(a)		__typesafe_io((a) & IO_SPACE_LIMIT) | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  |  | ||||||
|  | @ -14,7 +14,7 @@ | ||||||
| #define JUMP_LABEL_NOP	"nop" | #define JUMP_LABEL_NOP	"nop" | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| static __always_inline bool arch_static_branch(struct jump_label_key *key) | static __always_inline bool arch_static_branch(struct static_key *key) | ||||||
| { | { | ||||||
| 	asm goto("1:\n\t" | 	asm goto("1:\n\t" | ||||||
| 		 JUMP_LABEL_NOP "\n\t" | 		 JUMP_LABEL_NOP "\n\t" | ||||||
|  |  | ||||||
|  | @ -118,6 +118,13 @@ extern void iwmmxt_task_switch(struct thread_info *); | ||||||
| extern void vfp_sync_hwstate(struct thread_info *); | extern void vfp_sync_hwstate(struct thread_info *); | ||||||
| extern void vfp_flush_hwstate(struct thread_info *); | extern void vfp_flush_hwstate(struct thread_info *); | ||||||
| 
 | 
 | ||||||
|  | struct user_vfp; | ||||||
|  | struct user_vfp_exc; | ||||||
|  | 
 | ||||||
|  | extern int vfp_preserve_user_clear_hwstate(struct user_vfp __user *, | ||||||
|  | 					   struct user_vfp_exc __user *); | ||||||
|  | extern int vfp_restore_user_hwstate(struct user_vfp __user *, | ||||||
|  | 				    struct user_vfp_exc __user *); | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  |  | ||||||
|  | @ -7,6 +7,8 @@ | ||||||
| 
 | 
 | ||||||
| 	.macro set_tls_v6k, tp, tmp1, tmp2 | 	.macro set_tls_v6k, tp, tmp1, tmp2 | ||||||
| 	mcr	p15, 0, \tp, c13, c0, 3		@ set TLS register | 	mcr	p15, 0, \tp, c13, c0, 3		@ set TLS register | ||||||
|  | 	mov	\tmp1, #0 | ||||||
|  | 	mcr	p15, 0, \tmp1, c13, c0, 2	@ clear user r/w TLS register | ||||||
| 	.endm | 	.endm | ||||||
| 
 | 
 | ||||||
| 	.macro set_tls_v6, tp, tmp1, tmp2 | 	.macro set_tls_v6, tp, tmp1, tmp2 | ||||||
|  | @ -15,6 +17,8 @@ | ||||||
| 	mov	\tmp2, #0xffff0fff | 	mov	\tmp2, #0xffff0fff | ||||||
| 	tst	\tmp1, #HWCAP_TLS		@ hardware TLS available? | 	tst	\tmp1, #HWCAP_TLS		@ hardware TLS available? | ||||||
| 	mcrne	p15, 0, \tp, c13, c0, 3		@ yes, set TLS register | 	mcrne	p15, 0, \tp, c13, c0, 3		@ yes, set TLS register | ||||||
|  | 	movne	\tmp1, #0 | ||||||
|  | 	mcrne	p15, 0, \tmp1, c13, c0, 2	@ clear user r/w TLS register | ||||||
| 	streq	\tp, [\tmp2, #-15]		@ set TLS value at 0xffff0ff0 | 	streq	\tp, [\tmp2, #-15]		@ set TLS value at 0xffff0ff0 | ||||||
| 	.endm | 	.endm | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -299,7 +299,6 @@ static inline int pdev_bad_for_parity(struct pci_dev *dev) | ||||||
|  */ |  */ | ||||||
| void pcibios_fixup_bus(struct pci_bus *bus) | void pcibios_fixup_bus(struct pci_bus *bus) | ||||||
| { | { | ||||||
| 	struct pci_sys_data *root = bus->sysdata; |  | ||||||
| 	struct pci_dev *dev; | 	struct pci_dev *dev; | ||||||
| 	u16 features = PCI_COMMAND_SERR | PCI_COMMAND_PARITY | PCI_COMMAND_FAST_BACK; | 	u16 features = PCI_COMMAND_SERR | PCI_COMMAND_PARITY | PCI_COMMAND_FAST_BACK; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,3 +1,4 @@ | ||||||
|  | #include <linux/bug.h> | ||||||
| #include <linux/kernel.h> | #include <linux/kernel.h> | ||||||
| #include <asm/opcodes.h> | #include <asm/opcodes.h> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -155,10 +155,10 @@ static bool migrate_one_irq(struct irq_desc *desc) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	c = irq_data_get_irq_chip(d); | 	c = irq_data_get_irq_chip(d); | ||||||
| 	if (c->irq_set_affinity) | 	if (!c->irq_set_affinity) | ||||||
| 		c->irq_set_affinity(d, affinity, true); |  | ||||||
| 	else |  | ||||||
| 		pr_debug("IRQ%u: unable to set affinity\n", d->irq); | 		pr_debug("IRQ%u: unable to set affinity\n", d->irq); | ||||||
|  | 	else if (c->irq_set_affinity(d, affinity, true) == IRQ_SET_MASK_OK && ret) | ||||||
|  | 		cpumask_copy(d->affinity, affinity); | ||||||
| 
 | 
 | ||||||
| 	return ret; | 	return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -152,7 +152,7 @@ int __kprobes __arch_disarm_kprobe(void *p) | ||||||
| 
 | 
 | ||||||
| void __kprobes arch_disarm_kprobe(struct kprobe *p) | void __kprobes arch_disarm_kprobe(struct kprobe *p) | ||||||
| { | { | ||||||
| 	stop_machine(__arch_disarm_kprobe, p, &cpu_online_map); | 	stop_machine(__arch_disarm_kprobe, p, cpu_online_mask); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void __kprobes arch_remove_kprobe(struct kprobe *p) | void __kprobes arch_remove_kprobe(struct kprobe *p) | ||||||
|  |  | ||||||
|  | @ -256,7 +256,7 @@ static int ptrace_read_user(struct task_struct *tsk, unsigned long off, | ||||||
| { | { | ||||||
| 	unsigned long tmp; | 	unsigned long tmp; | ||||||
| 
 | 
 | ||||||
| 	if (off & 3 || off >= sizeof(struct user)) | 	if (off & 3) | ||||||
| 		return -EIO; | 		return -EIO; | ||||||
| 
 | 
 | ||||||
| 	tmp = 0; | 	tmp = 0; | ||||||
|  | @ -268,6 +268,8 @@ static int ptrace_read_user(struct task_struct *tsk, unsigned long off, | ||||||
| 		tmp = tsk->mm->end_code; | 		tmp = tsk->mm->end_code; | ||||||
| 	else if (off < sizeof(struct pt_regs)) | 	else if (off < sizeof(struct pt_regs)) | ||||||
| 		tmp = get_user_reg(tsk, off >> 2); | 		tmp = get_user_reg(tsk, off >> 2); | ||||||
|  | 	else if (off >= sizeof(struct user)) | ||||||
|  | 		return -EIO; | ||||||
| 
 | 
 | ||||||
| 	return put_user(tmp, ret); | 	return put_user(tmp, ret); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -523,6 +523,20 @@ int __init arm_add_memory(phys_addr_t start, unsigned long size) | ||||||
| 	 */ | 	 */ | ||||||
| 	size -= start & ~PAGE_MASK; | 	size -= start & ~PAGE_MASK; | ||||||
| 	bank->start = PAGE_ALIGN(start); | 	bank->start = PAGE_ALIGN(start); | ||||||
|  | 
 | ||||||
|  | #ifndef CONFIG_LPAE | ||||||
|  | 	if (bank->start + size < bank->start) { | ||||||
|  | 		printk(KERN_CRIT "Truncating memory at 0x%08llx to fit in " | ||||||
|  | 			"32-bit physical address space\n", (long long)start); | ||||||
|  | 		/*
 | ||||||
|  | 		 * To ensure bank->start + bank->size is representable in | ||||||
|  | 		 * 32 bits, we use ULONG_MAX as the upper limit rather than 4GB. | ||||||
|  | 		 * This means we lose a page after masking. | ||||||
|  | 		 */ | ||||||
|  | 		size = ULONG_MAX - bank->start; | ||||||
|  | 	} | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| 	bank->size = size & PAGE_MASK; | 	bank->size = size & PAGE_MASK; | ||||||
| 
 | 
 | ||||||
| 	/*
 | 	/*
 | ||||||
|  |  | ||||||
|  | @ -180,44 +180,23 @@ static int restore_iwmmxt_context(struct iwmmxt_sigframe *frame) | ||||||
| 
 | 
 | ||||||
| static int preserve_vfp_context(struct vfp_sigframe __user *frame) | static int preserve_vfp_context(struct vfp_sigframe __user *frame) | ||||||
| { | { | ||||||
| 	struct thread_info *thread = current_thread_info(); |  | ||||||
| 	struct vfp_hard_struct *h = &thread->vfpstate.hard; |  | ||||||
| 	const unsigned long magic = VFP_MAGIC; | 	const unsigned long magic = VFP_MAGIC; | ||||||
| 	const unsigned long size = VFP_STORAGE_SIZE; | 	const unsigned long size = VFP_STORAGE_SIZE; | ||||||
| 	int err = 0; | 	int err = 0; | ||||||
| 
 | 
 | ||||||
| 	vfp_sync_hwstate(thread); |  | ||||||
| 	__put_user_error(magic, &frame->magic, err); | 	__put_user_error(magic, &frame->magic, err); | ||||||
| 	__put_user_error(size, &frame->size, err); | 	__put_user_error(size, &frame->size, err); | ||||||
| 
 | 
 | ||||||
| 	/*
 | 	if (err) | ||||||
| 	 * Copy the floating point registers. There can be unused | 		return -EFAULT; | ||||||
| 	 * registers see asm/hwcap.h for details. |  | ||||||
| 	 */ |  | ||||||
| 	err |= __copy_to_user(&frame->ufp.fpregs, &h->fpregs, |  | ||||||
| 			      sizeof(h->fpregs)); |  | ||||||
| 	/*
 |  | ||||||
| 	 * Copy the status and control register. |  | ||||||
| 	 */ |  | ||||||
| 	__put_user_error(h->fpscr, &frame->ufp.fpscr, err); |  | ||||||
| 
 | 
 | ||||||
| 	/*
 | 	return vfp_preserve_user_clear_hwstate(&frame->ufp, &frame->ufp_exc); | ||||||
| 	 * Copy the exception registers. |  | ||||||
| 	 */ |  | ||||||
| 	__put_user_error(h->fpexc, &frame->ufp_exc.fpexc, err); |  | ||||||
| 	__put_user_error(h->fpinst, &frame->ufp_exc.fpinst, err); |  | ||||||
| 	__put_user_error(h->fpinst2, &frame->ufp_exc.fpinst2, err); |  | ||||||
| 
 |  | ||||||
| 	return err ? -EFAULT : 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int restore_vfp_context(struct vfp_sigframe __user *frame) | static int restore_vfp_context(struct vfp_sigframe __user *frame) | ||||||
| { | { | ||||||
| 	struct thread_info *thread = current_thread_info(); |  | ||||||
| 	struct vfp_hard_struct *h = &thread->vfpstate.hard; |  | ||||||
| 	unsigned long magic; | 	unsigned long magic; | ||||||
| 	unsigned long size; | 	unsigned long size; | ||||||
| 	unsigned long fpexc; |  | ||||||
| 	int err = 0; | 	int err = 0; | ||||||
| 
 | 
 | ||||||
| 	__get_user_error(magic, &frame->magic, err); | 	__get_user_error(magic, &frame->magic, err); | ||||||
|  | @ -228,33 +207,7 @@ static int restore_vfp_context(struct vfp_sigframe __user *frame) | ||||||
| 	if (magic != VFP_MAGIC || size != VFP_STORAGE_SIZE) | 	if (magic != VFP_MAGIC || size != VFP_STORAGE_SIZE) | ||||||
| 		return -EINVAL; | 		return -EINVAL; | ||||||
| 
 | 
 | ||||||
| 	vfp_flush_hwstate(thread); | 	return vfp_restore_user_hwstate(&frame->ufp, &frame->ufp_exc); | ||||||
| 
 |  | ||||||
| 	/*
 |  | ||||||
| 	 * Copy the floating point registers. There can be unused |  | ||||||
| 	 * registers see asm/hwcap.h for details. |  | ||||||
| 	 */ |  | ||||||
| 	err |= __copy_from_user(&h->fpregs, &frame->ufp.fpregs, |  | ||||||
| 				sizeof(h->fpregs)); |  | ||||||
| 	/*
 |  | ||||||
| 	 * Copy the status and control register. |  | ||||||
| 	 */ |  | ||||||
| 	__get_user_error(h->fpscr, &frame->ufp.fpscr, err); |  | ||||||
| 
 |  | ||||||
| 	/*
 |  | ||||||
| 	 * Sanitise and restore the exception registers. |  | ||||||
| 	 */ |  | ||||||
| 	__get_user_error(fpexc, &frame->ufp_exc.fpexc, err); |  | ||||||
| 	/* Ensure the VFP is enabled. */ |  | ||||||
| 	fpexc |= FPEXC_EN; |  | ||||||
| 	/* Ensure FPINST2 is invalid and the exception flag is cleared. */ |  | ||||||
| 	fpexc &= ~(FPEXC_EX | FPEXC_FP2V); |  | ||||||
| 	h->fpexc = fpexc; |  | ||||||
| 
 |  | ||||||
| 	__get_user_error(h->fpinst, &frame->ufp_exc.fpinst, err); |  | ||||||
| 	__get_user_error(h->fpinst2, &frame->ufp_exc.fpinst2, err); |  | ||||||
| 
 |  | ||||||
| 	return err ? -EFAULT : 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | @ -349,7 +349,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus) | ||||||
| 		 * re-initialize the map in platform_smp_prepare_cpus() if | 		 * re-initialize the map in platform_smp_prepare_cpus() if | ||||||
| 		 * present != possible (e.g. physical hotplug). | 		 * present != possible (e.g. physical hotplug). | ||||||
| 		 */ | 		 */ | ||||||
| 		init_cpu_present(&cpu_possible_map); | 		init_cpu_present(cpu_possible_mask); | ||||||
| 
 | 
 | ||||||
| 		/*
 | 		/*
 | ||||||
| 		 * Initialise the SCU if there are more than one CPU | 		 * Initialise the SCU if there are more than one CPU | ||||||
|  | @ -510,10 +510,6 @@ static void ipi_cpu_stop(unsigned int cpu) | ||||||
| 	local_fiq_disable(); | 	local_fiq_disable(); | ||||||
| 	local_irq_disable(); | 	local_irq_disable(); | ||||||
| 
 | 
 | ||||||
| #ifdef CONFIG_HOTPLUG_CPU |  | ||||||
| 	platform_cpu_kill(cpu); |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| 	while (1) | 	while (1) | ||||||
| 		cpu_relax(); | 		cpu_relax(); | ||||||
| } | } | ||||||
|  | @ -576,16 +572,25 @@ void smp_send_reschedule(int cpu) | ||||||
| 	smp_cross_call(cpumask_of(cpu), IPI_RESCHEDULE); | 	smp_cross_call(cpumask_of(cpu), IPI_RESCHEDULE); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | #ifdef CONFIG_HOTPLUG_CPU | ||||||
|  | static void smp_kill_cpus(cpumask_t *mask) | ||||||
|  | { | ||||||
|  | 	unsigned int cpu; | ||||||
|  | 	for_each_cpu(cpu, mask) | ||||||
|  | 		platform_cpu_kill(cpu); | ||||||
|  | } | ||||||
|  | #else | ||||||
|  | static void smp_kill_cpus(cpumask_t *mask) { } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| void smp_send_stop(void) | void smp_send_stop(void) | ||||||
| { | { | ||||||
| 	unsigned long timeout; | 	unsigned long timeout; | ||||||
|  | 	struct cpumask mask; | ||||||
| 
 | 
 | ||||||
| 	if (num_online_cpus() > 1) { | 	cpumask_copy(&mask, cpu_online_mask); | ||||||
| 		cpumask_t mask = cpu_online_map; | 	cpumask_clear_cpu(smp_processor_id(), &mask); | ||||||
| 		cpu_clear(smp_processor_id(), mask); |  | ||||||
| 
 |  | ||||||
| 	smp_cross_call(&mask, IPI_CPU_STOP); | 	smp_cross_call(&mask, IPI_CPU_STOP); | ||||||
| 	} |  | ||||||
| 
 | 
 | ||||||
| 	/* Wait up to one second for other CPUs to stop */ | 	/* Wait up to one second for other CPUs to stop */ | ||||||
| 	timeout = USEC_PER_SEC; | 	timeout = USEC_PER_SEC; | ||||||
|  | @ -594,6 +599,8 @@ void smp_send_stop(void) | ||||||
| 
 | 
 | ||||||
| 	if (num_online_cpus() > 1) | 	if (num_online_cpus() > 1) | ||||||
| 		pr_warning("SMP: failed to stop secondary CPUs\n"); | 		pr_warning("SMP: failed to stop secondary CPUs\n"); | ||||||
|  | 
 | ||||||
|  | 	smp_kill_cpus(&mask); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  |  | ||||||
|  | @ -1173,7 +1173,6 @@ void __init at91_add_device_serial(void) | ||||||
| 		printk(KERN_INFO "AT91: No default serial console defined.\n"); | 		printk(KERN_INFO "AT91: No default serial console defined.\n"); | ||||||
| } | } | ||||||
| #else | #else | ||||||
| void __init __deprecated at91_init_serial(struct at91_uart_config *config) {} |  | ||||||
| void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins) {} | void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins) {} | ||||||
| void __init at91_set_serial_console(unsigned portnr) {} | void __init at91_set_serial_console(unsigned portnr) {} | ||||||
| void __init at91_add_device_serial(void) {} | void __init at91_add_device_serial(void) {} | ||||||
|  |  | ||||||
|  | @ -23,6 +23,7 @@ | ||||||
| #include <linux/interrupt.h> | #include <linux/interrupt.h> | ||||||
| #include <linux/irq.h> | #include <linux/irq.h> | ||||||
| #include <linux/clockchips.h> | #include <linux/clockchips.h> | ||||||
|  | #include <linux/export.h> | ||||||
| 
 | 
 | ||||||
| #include <asm/mach/time.h> | #include <asm/mach/time.h> | ||||||
| 
 | 
 | ||||||
|  | @ -176,6 +177,7 @@ static struct clock_event_device clkevt = { | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| void __iomem *at91_st_base; | void __iomem *at91_st_base; | ||||||
|  | EXPORT_SYMBOL_GPL(at91_st_base); | ||||||
| 
 | 
 | ||||||
| void __init at91rm9200_ioremap_st(u32 addr) | void __init at91rm9200_ioremap_st(u32 addr) | ||||||
| { | { | ||||||
|  |  | ||||||
|  | @ -598,6 +598,9 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices) | ||||||
| 		else | 		else | ||||||
| 			cs_pin = spi1_standard_cs[devices[i].chip_select]; | 			cs_pin = spi1_standard_cs[devices[i].chip_select]; | ||||||
| 
 | 
 | ||||||
|  | 		if (!gpio_is_valid(cs_pin)) | ||||||
|  | 			continue; | ||||||
|  | 
 | ||||||
| 		if (devices[i].bus_num == 0) | 		if (devices[i].bus_num == 0) | ||||||
| 			enable_spi0 = 1; | 			enable_spi0 = 1; | ||||||
| 		else | 		else | ||||||
|  |  | ||||||
|  | @ -415,6 +415,9 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices) | ||||||
| 		else | 		else | ||||||
| 			cs_pin = spi1_standard_cs[devices[i].chip_select]; | 			cs_pin = spi1_standard_cs[devices[i].chip_select]; | ||||||
| 
 | 
 | ||||||
|  | 		if (!gpio_is_valid(cs_pin)) | ||||||
|  | 			continue; | ||||||
|  | 
 | ||||||
| 		if (devices[i].bus_num == 0) | 		if (devices[i].bus_num == 0) | ||||||
| 			enable_spi0 = 1; | 			enable_spi0 = 1; | ||||||
| 		else | 		else | ||||||
|  |  | ||||||
|  | @ -72,7 +72,8 @@ void __init at91_add_device_usbh(struct at91_usbh_data *data) | ||||||
| 	/* Enable VBus control for UHP ports */ | 	/* Enable VBus control for UHP ports */ | ||||||
| 	for (i = 0; i < data->ports; i++) { | 	for (i = 0; i < data->ports; i++) { | ||||||
| 		if (gpio_is_valid(data->vbus_pin[i])) | 		if (gpio_is_valid(data->vbus_pin[i])) | ||||||
| 			at91_set_gpio_output(data->vbus_pin[i], 0); | 			at91_set_gpio_output(data->vbus_pin[i], | ||||||
|  | 					     data->vbus_pin_active_low[i]); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	/* Enable overcurrent notification */ | 	/* Enable overcurrent notification */ | ||||||
|  | @ -671,6 +672,9 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices) | ||||||
| 		else | 		else | ||||||
| 			cs_pin = spi1_standard_cs[devices[i].chip_select]; | 			cs_pin = spi1_standard_cs[devices[i].chip_select]; | ||||||
| 
 | 
 | ||||||
|  | 		if (!gpio_is_valid(cs_pin)) | ||||||
|  | 			continue; | ||||||
|  | 
 | ||||||
| 		if (devices[i].bus_num == 0) | 		if (devices[i].bus_num == 0) | ||||||
| 			enable_spi0 = 1; | 			enable_spi0 = 1; | ||||||
| 		else | 		else | ||||||
|  |  | ||||||
|  | @ -127,12 +127,13 @@ void __init at91_add_device_usbh_ohci(struct at91_usbh_data *data) | ||||||
| 	/* Enable VBus control for UHP ports */ | 	/* Enable VBus control for UHP ports */ | ||||||
| 	for (i = 0; i < data->ports; i++) { | 	for (i = 0; i < data->ports; i++) { | ||||||
| 		if (gpio_is_valid(data->vbus_pin[i])) | 		if (gpio_is_valid(data->vbus_pin[i])) | ||||||
| 			at91_set_gpio_output(data->vbus_pin[i], 0); | 			at91_set_gpio_output(data->vbus_pin[i], | ||||||
|  | 					     data->vbus_pin_active_low[i]); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	/* Enable overcurrent notification */ | 	/* Enable overcurrent notification */ | ||||||
| 	for (i = 0; i < data->ports; i++) { | 	for (i = 0; i < data->ports; i++) { | ||||||
| 		if (data->overcurrent_pin[i]) | 		if (gpio_is_valid(data->overcurrent_pin[i])) | ||||||
| 			at91_set_gpio_input(data->overcurrent_pin[i], 1); | 			at91_set_gpio_input(data->overcurrent_pin[i], 1); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -188,7 +189,8 @@ void __init at91_add_device_usbh_ehci(struct at91_usbh_data *data) | ||||||
| 	/* Enable VBus control for UHP ports */ | 	/* Enable VBus control for UHP ports */ | ||||||
| 	for (i = 0; i < data->ports; i++) { | 	for (i = 0; i < data->ports; i++) { | ||||||
| 		if (gpio_is_valid(data->vbus_pin[i])) | 		if (gpio_is_valid(data->vbus_pin[i])) | ||||||
| 			at91_set_gpio_output(data->vbus_pin[i], 0); | 			at91_set_gpio_output(data->vbus_pin[i], | ||||||
|  | 					     data->vbus_pin_active_low[i]); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	usbh_ehci_data = *data; | 	usbh_ehci_data = *data; | ||||||
|  | @ -785,6 +787,9 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices) | ||||||
| 		else | 		else | ||||||
| 			cs_pin = spi1_standard_cs[devices[i].chip_select]; | 			cs_pin = spi1_standard_cs[devices[i].chip_select]; | ||||||
| 
 | 
 | ||||||
|  | 		if (!gpio_is_valid(cs_pin)) | ||||||
|  | 			continue; | ||||||
|  | 
 | ||||||
| 		if (devices[i].bus_num == 0) | 		if (devices[i].bus_num == 0) | ||||||
| 			enable_spi0 = 1; | 			enable_spi0 = 1; | ||||||
| 		else | 		else | ||||||
|  |  | ||||||
|  | @ -419,6 +419,9 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices) | ||||||
| 		else | 		else | ||||||
| 			cs_pin = spi_standard_cs[devices[i].chip_select]; | 			cs_pin = spi_standard_cs[devices[i].chip_select]; | ||||||
| 
 | 
 | ||||||
|  | 		if (!gpio_is_valid(cs_pin)) | ||||||
|  | 			continue; | ||||||
|  | 
 | ||||||
| 		/* enable chip-select pin */ | 		/* enable chip-select pin */ | ||||||
| 		at91_set_gpio_output(cs_pin, 1); | 		at91_set_gpio_output(cs_pin, 1); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -223,6 +223,8 @@ static struct clk_lookup periph_clocks_lookups[] = { | ||||||
| 	CLKDEV_CON_DEV_ID("usart", "f8028000.serial", &usart3_clk), | 	CLKDEV_CON_DEV_ID("usart", "f8028000.serial", &usart3_clk), | ||||||
| 	CLKDEV_CON_DEV_ID("t0_clk", "f8008000.timer", &tcb0_clk), | 	CLKDEV_CON_DEV_ID("t0_clk", "f8008000.timer", &tcb0_clk), | ||||||
| 	CLKDEV_CON_DEV_ID("t0_clk", "f800c000.timer", &tcb0_clk), | 	CLKDEV_CON_DEV_ID("t0_clk", "f800c000.timer", &tcb0_clk), | ||||||
|  | 	CLKDEV_CON_DEV_ID("dma_clk", "ffffec00.dma-controller", &dma0_clk), | ||||||
|  | 	CLKDEV_CON_DEV_ID("dma_clk", "ffffee00.dma-controller", &dma1_clk), | ||||||
| 	CLKDEV_CON_ID("pioA", &pioAB_clk), | 	CLKDEV_CON_ID("pioA", &pioAB_clk), | ||||||
| 	CLKDEV_CON_ID("pioB", &pioAB_clk), | 	CLKDEV_CON_ID("pioB", &pioAB_clk), | ||||||
| 	CLKDEV_CON_ID("pioC", &pioCD_clk), | 	CLKDEV_CON_ID("pioC", &pioCD_clk), | ||||||
|  |  | ||||||
|  | @ -117,7 +117,7 @@ static struct i2c_board_info __initdata ek_i2c_devices[] = { | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| #define EK_FLASH_BASE	AT91_CHIPSELECT_0 | #define EK_FLASH_BASE	AT91_CHIPSELECT_0 | ||||||
| #define EK_FLASH_SIZE	SZ_2M | #define EK_FLASH_SIZE	SZ_8M | ||||||
| 
 | 
 | ||||||
| static struct physmap_flash_data ek_flash_data = { | static struct physmap_flash_data ek_flash_data = { | ||||||
| 	.width		= 2, | 	.width		= 2, | ||||||
|  |  | ||||||
|  | @ -85,8 +85,6 @@ static struct resource dm9000_resource[] = { | ||||||
| 		.flags	= IORESOURCE_MEM | 		.flags	= IORESOURCE_MEM | ||||||
| 	}, | 	}, | ||||||
| 	[2] = { | 	[2] = { | ||||||
| 		.start	= AT91_PIN_PC11, |  | ||||||
| 		.end	= AT91_PIN_PC11, |  | ||||||
| 		.flags	= IORESOURCE_IRQ | 		.flags	= IORESOURCE_IRQ | ||||||
| 			| IORESOURCE_IRQ_LOWEDGE | IORESOURCE_IRQ_HIGHEDGE, | 			| IORESOURCE_IRQ_LOWEDGE | IORESOURCE_IRQ_HIGHEDGE, | ||||||
| 	} | 	} | ||||||
|  | @ -130,6 +128,8 @@ static struct sam9_smc_config __initdata dm9000_smc_config = { | ||||||
| 
 | 
 | ||||||
| static void __init ek_add_device_dm9000(void) | static void __init ek_add_device_dm9000(void) | ||||||
| { | { | ||||||
|  | 	struct resource *r = &dm9000_resource[2]; | ||||||
|  | 
 | ||||||
| 	/* Configure chip-select 2 (DM9000) */ | 	/* Configure chip-select 2 (DM9000) */ | ||||||
| 	sam9_smc_configure(0, 2, &dm9000_smc_config); | 	sam9_smc_configure(0, 2, &dm9000_smc_config); | ||||||
| 
 | 
 | ||||||
|  | @ -139,6 +139,7 @@ static void __init ek_add_device_dm9000(void) | ||||||
| 	/* Configure Interrupt pin as input, no pull-up */ | 	/* Configure Interrupt pin as input, no pull-up */ | ||||||
| 	at91_set_gpio_input(AT91_PIN_PC11, 0); | 	at91_set_gpio_input(AT91_PIN_PC11, 0); | ||||||
| 
 | 
 | ||||||
|  | 	r->start = r->end = gpio_to_irq(AT91_PIN_PC11); | ||||||
| 	platform_device_register(&dm9000_device); | 	platform_device_register(&dm9000_device); | ||||||
| } | } | ||||||
| #else | #else | ||||||
|  |  | ||||||
|  | @ -74,6 +74,7 @@ static void __init ek_init_early(void) | ||||||
| static struct at91_usbh_data __initdata ek_usbh_data = { | static struct at91_usbh_data __initdata ek_usbh_data = { | ||||||
| 	.ports		= 2, | 	.ports		= 2, | ||||||
| 	.vbus_pin	= { AT91_PIN_PA24, AT91_PIN_PA21 }, | 	.vbus_pin	= { AT91_PIN_PA24, AT91_PIN_PA21 }, | ||||||
|  | 	.vbus_pin_active_low = {1, 1}, | ||||||
| 	.overcurrent_pin= {-EINVAL, -EINVAL}, | 	.overcurrent_pin= {-EINVAL, -EINVAL}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -71,6 +71,7 @@ static void __init ek_init_early(void) | ||||||
| static struct at91_usbh_data __initdata ek_usbh_hs_data = { | static struct at91_usbh_data __initdata ek_usbh_hs_data = { | ||||||
| 	.ports		= 2, | 	.ports		= 2, | ||||||
| 	.vbus_pin	= {AT91_PIN_PD1, AT91_PIN_PD3}, | 	.vbus_pin	= {AT91_PIN_PD1, AT91_PIN_PD3}, | ||||||
|  | 	.vbus_pin_active_low = {1, 1}, | ||||||
| 	.overcurrent_pin= {-EINVAL, -EINVAL}, | 	.overcurrent_pin= {-EINVAL, -EINVAL}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -35,6 +35,7 @@ | ||||||
| #include "generic.h" | #include "generic.h" | ||||||
| 
 | 
 | ||||||
| void __iomem *at91_pmc_base; | void __iomem *at91_pmc_base; | ||||||
|  | EXPORT_SYMBOL_GPL(at91_pmc_base); | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  * There's a lot more which can be done with clocks, including cpufreq |  * There's a lot more which can be done with clocks, including cpufreq | ||||||
|  |  | ||||||
|  | @ -25,7 +25,7 @@ extern void __iomem *at91_pmc_base; | ||||||
| #define at91_pmc_write(field, value) \ | #define at91_pmc_write(field, value) \ | ||||||
| 	__raw_writel(value, at91_pmc_base + field) | 	__raw_writel(value, at91_pmc_base + field) | ||||||
| #else | #else | ||||||
| .extern at91_aic_base | .extern at91_pmc_base | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #define	AT91_PMC_SCER		0x00			/* System Clock Enable Register */ | #define	AT91_PMC_SCER		0x00			/* System Clock Enable Register */ | ||||||
|  |  | ||||||
|  | @ -86,14 +86,15 @@ extern void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *d | ||||||
| extern void __init at91_add_device_eth(struct macb_platform_data *data); | extern void __init at91_add_device_eth(struct macb_platform_data *data); | ||||||
| 
 | 
 | ||||||
|  /* USB Host */ |  /* USB Host */ | ||||||
|  | #define AT91_MAX_USBH_PORTS	3 | ||||||
| struct at91_usbh_data { | struct at91_usbh_data { | ||||||
|  | 	int		vbus_pin[AT91_MAX_USBH_PORTS];	/* port power-control pin */ | ||||||
|  | 	int             overcurrent_pin[AT91_MAX_USBH_PORTS]; | ||||||
| 	u8		ports;				/* number of ports on root hub */ | 	u8		ports;				/* number of ports on root hub */ | ||||||
| 	int		vbus_pin[2];	/* port power-control pin */ |  | ||||||
| 	u8              vbus_pin_active_low[2]; |  | ||||||
| 	u8              overcurrent_supported; | 	u8              overcurrent_supported; | ||||||
| 	int             overcurrent_pin[2]; | 	u8              vbus_pin_active_low[AT91_MAX_USBH_PORTS]; | ||||||
| 	u8              overcurrent_status[2]; | 	u8              overcurrent_status[AT91_MAX_USBH_PORTS]; | ||||||
| 	u8              overcurrent_changed[2]; | 	u8              overcurrent_changed[AT91_MAX_USBH_PORTS]; | ||||||
| }; | }; | ||||||
| extern void __init at91_add_device_usbh(struct at91_usbh_data *data); | extern void __init at91_add_device_usbh(struct at91_usbh_data *data); | ||||||
| extern void __init at91_add_device_usbh_ohci(struct at91_usbh_data *data); | extern void __init at91_add_device_usbh_ohci(struct at91_usbh_data *data); | ||||||
|  |  | ||||||
							
								
								
									
										27
									
								
								arch/arm/mach-at91/include/mach/io.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								arch/arm/mach-at91/include/mach/io.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,27 @@ | ||||||
|  | /*
 | ||||||
|  |  * arch/arm/mach-at91/include/mach/io.h | ||||||
|  |  * | ||||||
|  |  *  Copyright (C) 2003 SAN People | ||||||
|  |  * | ||||||
|  |  * This program is free software; you can redistribute it and/or modify | ||||||
|  |  * it under the terms of the GNU General Public License as published by | ||||||
|  |  * the Free Software Foundation; either version 2 of the License, or | ||||||
|  |  * (at your option) any later version. | ||||||
|  |  * | ||||||
|  |  * This program is distributed in the hope that it will be useful, | ||||||
|  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  |  * GNU General Public License for more details. | ||||||
|  |  * | ||||||
|  |  * You should have received a copy of the GNU General Public License | ||||||
|  |  * along with this program; if not, write to the Free Software | ||||||
|  |  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #ifndef __ASM_ARCH_IO_H | ||||||
|  | #define __ASM_ARCH_IO_H | ||||||
|  | 
 | ||||||
|  | #define IO_SPACE_LIMIT		0xFFFFFFFF | ||||||
|  | #define __io(a)			__typesafe_io(a) | ||||||
|  | 
 | ||||||
|  | #endif | ||||||
|  | @ -54,6 +54,7 @@ void __init at91_init_interrupts(unsigned int *priority) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void __iomem *at91_ramc_base[2]; | void __iomem *at91_ramc_base[2]; | ||||||
|  | EXPORT_SYMBOL_GPL(at91_ramc_base); | ||||||
| 
 | 
 | ||||||
| void __init at91_ioremap_ramc(int id, u32 addr, u32 size) | void __init at91_ioremap_ramc(int id, u32 addr, u32 size) | ||||||
| { | { | ||||||
|  | @ -292,6 +293,7 @@ void __init at91_ioremap_rstc(u32 base_addr) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void __iomem *at91_matrix_base; | void __iomem *at91_matrix_base; | ||||||
|  | EXPORT_SYMBOL_GPL(at91_matrix_base); | ||||||
| 
 | 
 | ||||||
| void __init at91_ioremap_matrix(u32 base_addr) | void __init at91_ioremap_matrix(u32 base_addr) | ||||||
| { | { | ||||||
|  |  | ||||||
|  | @ -52,8 +52,8 @@ | ||||||
| #include <mach/csp/chipcHw_inline.h> | #include <mach/csp/chipcHw_inline.h> | ||||||
| #include <mach/csp/tmrHw_reg.h> | #include <mach/csp/tmrHw_reg.h> | ||||||
| 
 | 
 | ||||||
| static AMBA_APB_DEVICE(uartA, "uarta", MM_ADDR_IO_UARTA, { IRQ_UARTA }, NULL); | static AMBA_APB_DEVICE(uartA, "uartA", 0, MM_ADDR_IO_UARTA, {IRQ_UARTA}, NULL); | ||||||
| static AMBA_APB_DEVICE(uartB, "uartb", MM_ADDR_IO_UARTB, { IRQ_UARTB }, NULL); | static AMBA_APB_DEVICE(uartB, "uartB", 0, MM_ADDR_IO_UARTB, {IRQ_UARTB}, NULL); | ||||||
| 
 | 
 | ||||||
| static struct clk pll1_clk = { | static struct clk pll1_clk = { | ||||||
| 	.name = "PLL1", | 	.name = "PLL1", | ||||||
|  |  | ||||||
|  | @ -368,6 +368,7 @@ comment "Flattened Device Tree based board for EXYNOS SoCs" | ||||||
| 
 | 
 | ||||||
| config MACH_EXYNOS4_DT | config MACH_EXYNOS4_DT | ||||||
| 	bool "Samsung Exynos4 Machine using device tree" | 	bool "Samsung Exynos4 Machine using device tree" | ||||||
|  | 	depends on ARCH_EXYNOS4 | ||||||
| 	select CPU_EXYNOS4210 | 	select CPU_EXYNOS4210 | ||||||
| 	select USE_OF | 	select USE_OF | ||||||
| 	select ARM_AMBA | 	select ARM_AMBA | ||||||
|  | @ -380,6 +381,7 @@ config MACH_EXYNOS4_DT | ||||||
| 
 | 
 | ||||||
| config MACH_EXYNOS5_DT | config MACH_EXYNOS5_DT | ||||||
| 	bool "SAMSUNG EXYNOS5 Machine using device tree" | 	bool "SAMSUNG EXYNOS5 Machine using device tree" | ||||||
|  | 	depends on ARCH_EXYNOS5 | ||||||
| 	select SOC_EXYNOS5250 | 	select SOC_EXYNOS5250 | ||||||
| 	select USE_OF | 	select USE_OF | ||||||
| 	select ARM_AMBA | 	select ARM_AMBA | ||||||
|  |  | ||||||
|  | @ -497,25 +497,25 @@ static struct clk exynos4_init_clocks_off[] = { | ||||||
| 		.ctrlbit	= (1 << 3), | 		.ctrlbit	= (1 << 3), | ||||||
| 	}, { | 	}, { | ||||||
| 		.name		= "hsmmc", | 		.name		= "hsmmc", | ||||||
| 		.devname	= "s3c-sdhci.0", | 		.devname	= "exynos4-sdhci.0", | ||||||
| 		.parent		= &exynos4_clk_aclk_133.clk, | 		.parent		= &exynos4_clk_aclk_133.clk, | ||||||
| 		.enable		= exynos4_clk_ip_fsys_ctrl, | 		.enable		= exynos4_clk_ip_fsys_ctrl, | ||||||
| 		.ctrlbit	= (1 << 5), | 		.ctrlbit	= (1 << 5), | ||||||
| 	}, { | 	}, { | ||||||
| 		.name		= "hsmmc", | 		.name		= "hsmmc", | ||||||
| 		.devname	= "s3c-sdhci.1", | 		.devname	= "exynos4-sdhci.1", | ||||||
| 		.parent		= &exynos4_clk_aclk_133.clk, | 		.parent		= &exynos4_clk_aclk_133.clk, | ||||||
| 		.enable		= exynos4_clk_ip_fsys_ctrl, | 		.enable		= exynos4_clk_ip_fsys_ctrl, | ||||||
| 		.ctrlbit	= (1 << 6), | 		.ctrlbit	= (1 << 6), | ||||||
| 	}, { | 	}, { | ||||||
| 		.name		= "hsmmc", | 		.name		= "hsmmc", | ||||||
| 		.devname	= "s3c-sdhci.2", | 		.devname	= "exynos4-sdhci.2", | ||||||
| 		.parent		= &exynos4_clk_aclk_133.clk, | 		.parent		= &exynos4_clk_aclk_133.clk, | ||||||
| 		.enable		= exynos4_clk_ip_fsys_ctrl, | 		.enable		= exynos4_clk_ip_fsys_ctrl, | ||||||
| 		.ctrlbit	= (1 << 7), | 		.ctrlbit	= (1 << 7), | ||||||
| 	}, { | 	}, { | ||||||
| 		.name		= "hsmmc", | 		.name		= "hsmmc", | ||||||
| 		.devname	= "s3c-sdhci.3", | 		.devname	= "exynos4-sdhci.3", | ||||||
| 		.parent		= &exynos4_clk_aclk_133.clk, | 		.parent		= &exynos4_clk_aclk_133.clk, | ||||||
| 		.enable		= exynos4_clk_ip_fsys_ctrl, | 		.enable		= exynos4_clk_ip_fsys_ctrl, | ||||||
| 		.ctrlbit	= (1 << 8), | 		.ctrlbit	= (1 << 8), | ||||||
|  | @ -1202,7 +1202,7 @@ static struct clksrc_clk exynos4_clk_sclk_uart3 = { | ||||||
| static struct clksrc_clk exynos4_clk_sclk_mmc0 = { | static struct clksrc_clk exynos4_clk_sclk_mmc0 = { | ||||||
| 	.clk	= { | 	.clk	= { | ||||||
| 		.name		= "sclk_mmc", | 		.name		= "sclk_mmc", | ||||||
| 		.devname	= "s3c-sdhci.0", | 		.devname	= "exynos4-sdhci.0", | ||||||
| 		.parent		= &exynos4_clk_dout_mmc0.clk, | 		.parent		= &exynos4_clk_dout_mmc0.clk, | ||||||
| 		.enable		= exynos4_clksrc_mask_fsys_ctrl, | 		.enable		= exynos4_clksrc_mask_fsys_ctrl, | ||||||
| 		.ctrlbit	= (1 << 0), | 		.ctrlbit	= (1 << 0), | ||||||
|  | @ -1213,7 +1213,7 @@ static struct clksrc_clk exynos4_clk_sclk_mmc0 = { | ||||||
| static struct clksrc_clk exynos4_clk_sclk_mmc1 = { | static struct clksrc_clk exynos4_clk_sclk_mmc1 = { | ||||||
| 	.clk	= { | 	.clk	= { | ||||||
| 		.name		= "sclk_mmc", | 		.name		= "sclk_mmc", | ||||||
| 		.devname	= "s3c-sdhci.1", | 		.devname	= "exynos4-sdhci.1", | ||||||
| 		.parent		= &exynos4_clk_dout_mmc1.clk, | 		.parent		= &exynos4_clk_dout_mmc1.clk, | ||||||
| 		.enable		= exynos4_clksrc_mask_fsys_ctrl, | 		.enable		= exynos4_clksrc_mask_fsys_ctrl, | ||||||
| 		.ctrlbit	= (1 << 4), | 		.ctrlbit	= (1 << 4), | ||||||
|  | @ -1224,7 +1224,7 @@ static struct clksrc_clk exynos4_clk_sclk_mmc1 = { | ||||||
| static struct clksrc_clk exynos4_clk_sclk_mmc2 = { | static struct clksrc_clk exynos4_clk_sclk_mmc2 = { | ||||||
| 	.clk	= { | 	.clk	= { | ||||||
| 		.name		= "sclk_mmc", | 		.name		= "sclk_mmc", | ||||||
| 		.devname	= "s3c-sdhci.2", | 		.devname	= "exynos4-sdhci.2", | ||||||
| 		.parent		= &exynos4_clk_dout_mmc2.clk, | 		.parent		= &exynos4_clk_dout_mmc2.clk, | ||||||
| 		.enable		= exynos4_clksrc_mask_fsys_ctrl, | 		.enable		= exynos4_clksrc_mask_fsys_ctrl, | ||||||
| 		.ctrlbit	= (1 << 8), | 		.ctrlbit	= (1 << 8), | ||||||
|  | @ -1235,7 +1235,7 @@ static struct clksrc_clk exynos4_clk_sclk_mmc2 = { | ||||||
| static struct clksrc_clk exynos4_clk_sclk_mmc3 = { | static struct clksrc_clk exynos4_clk_sclk_mmc3 = { | ||||||
| 	.clk	= { | 	.clk	= { | ||||||
| 		.name		= "sclk_mmc", | 		.name		= "sclk_mmc", | ||||||
| 		.devname	= "s3c-sdhci.3", | 		.devname	= "exynos4-sdhci.3", | ||||||
| 		.parent		= &exynos4_clk_dout_mmc3.clk, | 		.parent		= &exynos4_clk_dout_mmc3.clk, | ||||||
| 		.enable		= exynos4_clksrc_mask_fsys_ctrl, | 		.enable		= exynos4_clksrc_mask_fsys_ctrl, | ||||||
| 		.ctrlbit	= (1 << 12), | 		.ctrlbit	= (1 << 12), | ||||||
|  | @ -1340,10 +1340,10 @@ static struct clk_lookup exynos4_clk_lookup[] = { | ||||||
| 	CLKDEV_INIT("exynos4210-uart.1", "clk_uart_baud0", &exynos4_clk_sclk_uart1.clk), | 	CLKDEV_INIT("exynos4210-uart.1", "clk_uart_baud0", &exynos4_clk_sclk_uart1.clk), | ||||||
| 	CLKDEV_INIT("exynos4210-uart.2", "clk_uart_baud0", &exynos4_clk_sclk_uart2.clk), | 	CLKDEV_INIT("exynos4210-uart.2", "clk_uart_baud0", &exynos4_clk_sclk_uart2.clk), | ||||||
| 	CLKDEV_INIT("exynos4210-uart.3", "clk_uart_baud0", &exynos4_clk_sclk_uart3.clk), | 	CLKDEV_INIT("exynos4210-uart.3", "clk_uart_baud0", &exynos4_clk_sclk_uart3.clk), | ||||||
| 	CLKDEV_INIT("s3c-sdhci.0", "mmc_busclk.2", &exynos4_clk_sclk_mmc0.clk), | 	CLKDEV_INIT("exynos4-sdhci.0", "mmc_busclk.2", &exynos4_clk_sclk_mmc0.clk), | ||||||
| 	CLKDEV_INIT("s3c-sdhci.1", "mmc_busclk.2", &exynos4_clk_sclk_mmc1.clk), | 	CLKDEV_INIT("exynos4-sdhci.1", "mmc_busclk.2", &exynos4_clk_sclk_mmc1.clk), | ||||||
| 	CLKDEV_INIT("s3c-sdhci.2", "mmc_busclk.2", &exynos4_clk_sclk_mmc2.clk), | 	CLKDEV_INIT("exynos4-sdhci.2", "mmc_busclk.2", &exynos4_clk_sclk_mmc2.clk), | ||||||
| 	CLKDEV_INIT("s3c-sdhci.3", "mmc_busclk.2", &exynos4_clk_sclk_mmc3.clk), | 	CLKDEV_INIT("exynos4-sdhci.3", "mmc_busclk.2", &exynos4_clk_sclk_mmc3.clk), | ||||||
| 	CLKDEV_INIT("exynos4-fb.0", "lcd", &exynos4_clk_fimd0), | 	CLKDEV_INIT("exynos4-fb.0", "lcd", &exynos4_clk_fimd0), | ||||||
| 	CLKDEV_INIT("dma-pl330.0", "apb_pclk", &exynos4_clk_pdma0), | 	CLKDEV_INIT("dma-pl330.0", "apb_pclk", &exynos4_clk_pdma0), | ||||||
| 	CLKDEV_INIT("dma-pl330.1", "apb_pclk", &exynos4_clk_pdma1), | 	CLKDEV_INIT("dma-pl330.1", "apb_pclk", &exynos4_clk_pdma1), | ||||||
|  |  | ||||||
|  | @ -455,25 +455,25 @@ static struct clk exynos5_init_clocks_off[] = { | ||||||
| 		.ctrlbit	= (1 << 20), | 		.ctrlbit	= (1 << 20), | ||||||
| 	}, { | 	}, { | ||||||
| 		.name		= "hsmmc", | 		.name		= "hsmmc", | ||||||
| 		.devname	= "s3c-sdhci.0", | 		.devname	= "exynos4-sdhci.0", | ||||||
| 		.parent		= &exynos5_clk_aclk_200.clk, | 		.parent		= &exynos5_clk_aclk_200.clk, | ||||||
| 		.enable		= exynos5_clk_ip_fsys_ctrl, | 		.enable		= exynos5_clk_ip_fsys_ctrl, | ||||||
| 		.ctrlbit	= (1 << 12), | 		.ctrlbit	= (1 << 12), | ||||||
| 	}, { | 	}, { | ||||||
| 		.name		= "hsmmc", | 		.name		= "hsmmc", | ||||||
| 		.devname	= "s3c-sdhci.1", | 		.devname	= "exynos4-sdhci.1", | ||||||
| 		.parent		= &exynos5_clk_aclk_200.clk, | 		.parent		= &exynos5_clk_aclk_200.clk, | ||||||
| 		.enable		= exynos5_clk_ip_fsys_ctrl, | 		.enable		= exynos5_clk_ip_fsys_ctrl, | ||||||
| 		.ctrlbit	= (1 << 13), | 		.ctrlbit	= (1 << 13), | ||||||
| 	}, { | 	}, { | ||||||
| 		.name		= "hsmmc", | 		.name		= "hsmmc", | ||||||
| 		.devname	= "s3c-sdhci.2", | 		.devname	= "exynos4-sdhci.2", | ||||||
| 		.parent		= &exynos5_clk_aclk_200.clk, | 		.parent		= &exynos5_clk_aclk_200.clk, | ||||||
| 		.enable		= exynos5_clk_ip_fsys_ctrl, | 		.enable		= exynos5_clk_ip_fsys_ctrl, | ||||||
| 		.ctrlbit	= (1 << 14), | 		.ctrlbit	= (1 << 14), | ||||||
| 	}, { | 	}, { | ||||||
| 		.name		= "hsmmc", | 		.name		= "hsmmc", | ||||||
| 		.devname	= "s3c-sdhci.3", | 		.devname	= "exynos4-sdhci.3", | ||||||
| 		.parent		= &exynos5_clk_aclk_200.clk, | 		.parent		= &exynos5_clk_aclk_200.clk, | ||||||
| 		.enable		= exynos5_clk_ip_fsys_ctrl, | 		.enable		= exynos5_clk_ip_fsys_ctrl, | ||||||
| 		.ctrlbit	= (1 << 15), | 		.ctrlbit	= (1 << 15), | ||||||
|  | @ -813,7 +813,7 @@ static struct clksrc_clk exynos5_clk_sclk_uart3 = { | ||||||
| static struct clksrc_clk exynos5_clk_sclk_mmc0 = { | static struct clksrc_clk exynos5_clk_sclk_mmc0 = { | ||||||
| 	.clk	= { | 	.clk	= { | ||||||
| 		.name		= "sclk_mmc", | 		.name		= "sclk_mmc", | ||||||
| 		.devname	= "s3c-sdhci.0", | 		.devname	= "exynos4-sdhci.0", | ||||||
| 		.parent		= &exynos5_clk_dout_mmc0.clk, | 		.parent		= &exynos5_clk_dout_mmc0.clk, | ||||||
| 		.enable		= exynos5_clksrc_mask_fsys_ctrl, | 		.enable		= exynos5_clksrc_mask_fsys_ctrl, | ||||||
| 		.ctrlbit	= (1 << 0), | 		.ctrlbit	= (1 << 0), | ||||||
|  | @ -824,7 +824,7 @@ static struct clksrc_clk exynos5_clk_sclk_mmc0 = { | ||||||
| static struct clksrc_clk exynos5_clk_sclk_mmc1 = { | static struct clksrc_clk exynos5_clk_sclk_mmc1 = { | ||||||
| 	.clk	= { | 	.clk	= { | ||||||
| 		.name		= "sclk_mmc", | 		.name		= "sclk_mmc", | ||||||
| 		.devname	= "s3c-sdhci.1", | 		.devname	= "exynos4-sdhci.1", | ||||||
| 		.parent		= &exynos5_clk_dout_mmc1.clk, | 		.parent		= &exynos5_clk_dout_mmc1.clk, | ||||||
| 		.enable		= exynos5_clksrc_mask_fsys_ctrl, | 		.enable		= exynos5_clksrc_mask_fsys_ctrl, | ||||||
| 		.ctrlbit	= (1 << 4), | 		.ctrlbit	= (1 << 4), | ||||||
|  | @ -835,7 +835,7 @@ static struct clksrc_clk exynos5_clk_sclk_mmc1 = { | ||||||
| static struct clksrc_clk exynos5_clk_sclk_mmc2 = { | static struct clksrc_clk exynos5_clk_sclk_mmc2 = { | ||||||
| 	.clk	= { | 	.clk	= { | ||||||
| 		.name		= "sclk_mmc", | 		.name		= "sclk_mmc", | ||||||
| 		.devname	= "s3c-sdhci.2", | 		.devname	= "exynos4-sdhci.2", | ||||||
| 		.parent		= &exynos5_clk_dout_mmc2.clk, | 		.parent		= &exynos5_clk_dout_mmc2.clk, | ||||||
| 		.enable		= exynos5_clksrc_mask_fsys_ctrl, | 		.enable		= exynos5_clksrc_mask_fsys_ctrl, | ||||||
| 		.ctrlbit	= (1 << 8), | 		.ctrlbit	= (1 << 8), | ||||||
|  | @ -846,7 +846,7 @@ static struct clksrc_clk exynos5_clk_sclk_mmc2 = { | ||||||
| static struct clksrc_clk exynos5_clk_sclk_mmc3 = { | static struct clksrc_clk exynos5_clk_sclk_mmc3 = { | ||||||
| 	.clk	= { | 	.clk	= { | ||||||
| 		.name		= "sclk_mmc", | 		.name		= "sclk_mmc", | ||||||
| 		.devname	= "s3c-sdhci.3", | 		.devname	= "exynos4-sdhci.3", | ||||||
| 		.parent		= &exynos5_clk_dout_mmc3.clk, | 		.parent		= &exynos5_clk_dout_mmc3.clk, | ||||||
| 		.enable		= exynos5_clksrc_mask_fsys_ctrl, | 		.enable		= exynos5_clksrc_mask_fsys_ctrl, | ||||||
| 		.ctrlbit	= (1 << 12), | 		.ctrlbit	= (1 << 12), | ||||||
|  | @ -990,10 +990,10 @@ static struct clk_lookup exynos5_clk_lookup[] = { | ||||||
| 	CLKDEV_INIT("exynos4210-uart.1", "clk_uart_baud0", &exynos5_clk_sclk_uart1.clk), | 	CLKDEV_INIT("exynos4210-uart.1", "clk_uart_baud0", &exynos5_clk_sclk_uart1.clk), | ||||||
| 	CLKDEV_INIT("exynos4210-uart.2", "clk_uart_baud0", &exynos5_clk_sclk_uart2.clk), | 	CLKDEV_INIT("exynos4210-uart.2", "clk_uart_baud0", &exynos5_clk_sclk_uart2.clk), | ||||||
| 	CLKDEV_INIT("exynos4210-uart.3", "clk_uart_baud0", &exynos5_clk_sclk_uart3.clk), | 	CLKDEV_INIT("exynos4210-uart.3", "clk_uart_baud0", &exynos5_clk_sclk_uart3.clk), | ||||||
| 	CLKDEV_INIT("s3c-sdhci.0", "mmc_busclk.2", &exynos5_clk_sclk_mmc0.clk), | 	CLKDEV_INIT("exynos4-sdhci.0", "mmc_busclk.2", &exynos5_clk_sclk_mmc0.clk), | ||||||
| 	CLKDEV_INIT("s3c-sdhci.1", "mmc_busclk.2", &exynos5_clk_sclk_mmc1.clk), | 	CLKDEV_INIT("exynos4-sdhci.1", "mmc_busclk.2", &exynos5_clk_sclk_mmc1.clk), | ||||||
| 	CLKDEV_INIT("s3c-sdhci.2", "mmc_busclk.2", &exynos5_clk_sclk_mmc2.clk), | 	CLKDEV_INIT("exynos4-sdhci.2", "mmc_busclk.2", &exynos5_clk_sclk_mmc2.clk), | ||||||
| 	CLKDEV_INIT("s3c-sdhci.3", "mmc_busclk.2", &exynos5_clk_sclk_mmc3.clk), | 	CLKDEV_INIT("exynos4-sdhci.3", "mmc_busclk.2", &exynos5_clk_sclk_mmc3.clk), | ||||||
| 	CLKDEV_INIT("dma-pl330.0", "apb_pclk", &exynos5_clk_pdma0), | 	CLKDEV_INIT("dma-pl330.0", "apb_pclk", &exynos5_clk_pdma0), | ||||||
| 	CLKDEV_INIT("dma-pl330.1", "apb_pclk", &exynos5_clk_pdma1), | 	CLKDEV_INIT("dma-pl330.1", "apb_pclk", &exynos5_clk_pdma1), | ||||||
| 	CLKDEV_INIT("dma-pl330.2", "apb_pclk", &exynos5_clk_mdma1), | 	CLKDEV_INIT("dma-pl330.2", "apb_pclk", &exynos5_clk_mdma1), | ||||||
|  |  | ||||||
|  | @ -326,6 +326,11 @@ static void __init exynos4_map_io(void) | ||||||
| 	s3c_fimc_setname(2, "exynos4-fimc"); | 	s3c_fimc_setname(2, "exynos4-fimc"); | ||||||
| 	s3c_fimc_setname(3, "exynos4-fimc"); | 	s3c_fimc_setname(3, "exynos4-fimc"); | ||||||
| 
 | 
 | ||||||
|  | 	s3c_sdhci_setname(0, "exynos4-sdhci"); | ||||||
|  | 	s3c_sdhci_setname(1, "exynos4-sdhci"); | ||||||
|  | 	s3c_sdhci_setname(2, "exynos4-sdhci"); | ||||||
|  | 	s3c_sdhci_setname(3, "exynos4-sdhci"); | ||||||
|  | 
 | ||||||
| 	/* The I2C bus controllers are directly compatible with s3c2440 */ | 	/* The I2C bus controllers are directly compatible with s3c2440 */ | ||||||
| 	s3c_i2c0_setname("s3c2440-i2c"); | 	s3c_i2c0_setname("s3c2440-i2c"); | ||||||
| 	s3c_i2c1_setname("s3c2440-i2c"); | 	s3c_i2c1_setname("s3c2440-i2c"); | ||||||
|  | @ -344,6 +349,11 @@ static void __init exynos5_map_io(void) | ||||||
| 	s3c_device_i2c0.resource[1].start = EXYNOS5_IRQ_IIC; | 	s3c_device_i2c0.resource[1].start = EXYNOS5_IRQ_IIC; | ||||||
| 	s3c_device_i2c0.resource[1].end   = EXYNOS5_IRQ_IIC; | 	s3c_device_i2c0.resource[1].end   = EXYNOS5_IRQ_IIC; | ||||||
| 
 | 
 | ||||||
|  | 	s3c_sdhci_setname(0, "exynos4-sdhci"); | ||||||
|  | 	s3c_sdhci_setname(1, "exynos4-sdhci"); | ||||||
|  | 	s3c_sdhci_setname(2, "exynos4-sdhci"); | ||||||
|  | 	s3c_sdhci_setname(3, "exynos4-sdhci"); | ||||||
|  | 
 | ||||||
| 	/* The I2C bus controllers are directly compatible with s3c2440 */ | 	/* The I2C bus controllers are directly compatible with s3c2440 */ | ||||||
| 	s3c_i2c0_setname("s3c2440-i2c"); | 	s3c_i2c0_setname("s3c2440-i2c"); | ||||||
| 	s3c_i2c1_setname("s3c2440-i2c"); | 	s3c_i2c1_setname("s3c2440-i2c"); | ||||||
|  | @ -537,7 +547,9 @@ void __init exynos5_init_irq(void) | ||||||
| { | { | ||||||
| 	int irq; | 	int irq; | ||||||
| 
 | 
 | ||||||
| 	gic_init(0, IRQ_PPI(0), S5P_VA_GIC_DIST, S5P_VA_GIC_CPU); | #ifdef CONFIG_OF | ||||||
|  | 	of_irq_init(exynos4_dt_irq_match); | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
| 	for (irq = 0; irq < EXYNOS5_MAX_COMBINER_NR; irq++) { | 	for (irq = 0; irq < EXYNOS5_MAX_COMBINER_NR; irq++) { | ||||||
| 		combiner_init(irq, (void __iomem *)S5P_VA_COMBINER(irq), | 		combiner_init(irq, (void __iomem *)S5P_VA_COMBINER(irq), | ||||||
|  | @ -583,10 +595,11 @@ core_initcall(exynos_core_init); | ||||||
| #ifdef CONFIG_CACHE_L2X0 | #ifdef CONFIG_CACHE_L2X0 | ||||||
| static int __init exynos4_l2x0_cache_init(void) | static int __init exynos4_l2x0_cache_init(void) | ||||||
| { | { | ||||||
|  | 	int ret; | ||||||
|  | 
 | ||||||
| 	if (soc_is_exynos5250()) | 	if (soc_is_exynos5250()) | ||||||
| 		return 0; | 		return 0; | ||||||
| 
 | 
 | ||||||
| 	int ret; |  | ||||||
| 	ret = l2x0_of_init(L2_AUX_VAL, L2_AUX_MASK); | 	ret = l2x0_of_init(L2_AUX_VAL, L2_AUX_MASK); | ||||||
| 	if (!ret) { | 	if (!ret) { | ||||||
| 		l2x0_regs_phys = virt_to_phys(&l2x0_saved_regs); | 		l2x0_regs_phys = virt_to_phys(&l2x0_saved_regs); | ||||||
|  |  | ||||||
|  | @ -16,6 +16,7 @@ | ||||||
| #include <linux/dma-mapping.h> | #include <linux/dma-mapping.h> | ||||||
| #include <linux/platform_device.h> | #include <linux/platform_device.h> | ||||||
| #include <linux/interrupt.h> | #include <linux/interrupt.h> | ||||||
|  | #include <linux/ioport.h> | ||||||
| #include <linux/mmc/dw_mmc.h> | #include <linux/mmc/dw_mmc.h> | ||||||
| 
 | 
 | ||||||
| #include <plat/devs.h> | #include <plat/devs.h> | ||||||
|  | @ -33,16 +34,8 @@ static int exynos4_dwmci_init(u32 slot_id, irq_handler_t handler, void *data) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static struct resource exynos4_dwmci_resource[] = { | static struct resource exynos4_dwmci_resource[] = { | ||||||
| 	[0] = { | 	[0] = DEFINE_RES_MEM(EXYNOS4_PA_DWMCI, SZ_4K), | ||||||
| 		.start	= EXYNOS4_PA_DWMCI, | 	[1] = DEFINE_RES_IRQ(EXYNOS4_IRQ_DWMCI), | ||||||
| 		.end	= EXYNOS4_PA_DWMCI + SZ_4K - 1, |  | ||||||
| 		.flags	= IORESOURCE_MEM, |  | ||||||
| 	}, |  | ||||||
| 	[1] = { |  | ||||||
| 		.start	= IRQ_DWMCI, |  | ||||||
| 		.end	= IRQ_DWMCI, |  | ||||||
| 		.flags	= IORESOURCE_IRQ, |  | ||||||
| 	} |  | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| static struct dw_mci_board exynos4_dwci_pdata = { | static struct dw_mci_board exynos4_dwci_pdata = { | ||||||
|  |  | ||||||
|  | @ -35,8 +35,6 @@ | ||||||
| #include <mach/irqs.h> | #include <mach/irqs.h> | ||||||
| #include <mach/dma.h> | #include <mach/dma.h> | ||||||
| 
 | 
 | ||||||
| static u64 dma_dmamask = DMA_BIT_MASK(32); |  | ||||||
| 
 |  | ||||||
| static u8 exynos4210_pdma0_peri[] = { | static u8 exynos4210_pdma0_peri[] = { | ||||||
| 	DMACH_PCM0_RX, | 	DMACH_PCM0_RX, | ||||||
| 	DMACH_PCM0_TX, | 	DMACH_PCM0_TX, | ||||||
|  |  | ||||||
|  | @ -21,10 +21,9 @@ | ||||||
| 	 */ | 	 */ | ||||||
| 
 | 
 | ||||||
| 	.macro addruart, rp, rv, tmp | 	.macro addruart, rp, rv, tmp | ||||||
| 		mov	\rp, #0x10000000 | 		mrc	p15, 0, \tmp, c0, c0, 0 | ||||||
| 		ldr	\rp, [\rp, #0x0] | 		and	\tmp, \tmp, #0xf0 | ||||||
| 		and	\rp, \rp, #0xf00000 | 		teq	\tmp, #0xf0		@@ A15
 | ||||||
| 		teq	\rp, #0x500000		@@ EXYNOS5
 |  | ||||||
| 		ldreq	\rp, =EXYNOS5_PA_UART | 		ldreq	\rp, =EXYNOS5_PA_UART | ||||||
| 		movne	\rp, #EXYNOS4_PA_UART	@@ EXYNOS4
 | 		movne	\rp, #EXYNOS4_PA_UART	@@ EXYNOS4
 | ||||||
| 		ldr	\rv, =S3C_VA_UART | 		ldr	\rv, =S3C_VA_UART | ||||||
|  |  | ||||||
|  | @ -212,6 +212,8 @@ | ||||||
| #define IRQ_MFC				EXYNOS4_IRQ_MFC | #define IRQ_MFC				EXYNOS4_IRQ_MFC | ||||||
| #define IRQ_SDO				EXYNOS4_IRQ_SDO | #define IRQ_SDO				EXYNOS4_IRQ_SDO | ||||||
| 
 | 
 | ||||||
|  | #define IRQ_I2S0			EXYNOS4_IRQ_I2S0 | ||||||
|  | 
 | ||||||
| #define IRQ_ADC				EXYNOS4_IRQ_ADC0 | #define IRQ_ADC				EXYNOS4_IRQ_ADC0 | ||||||
| #define IRQ_TC				EXYNOS4_IRQ_PEN0 | #define IRQ_TC				EXYNOS4_IRQ_PEN0 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -89,6 +89,10 @@ | ||||||
| #define EXYNOS4_PA_MDMA1		0x12840000 | #define EXYNOS4_PA_MDMA1		0x12840000 | ||||||
| #define EXYNOS4_PA_PDMA0		0x12680000 | #define EXYNOS4_PA_PDMA0		0x12680000 | ||||||
| #define EXYNOS4_PA_PDMA1		0x12690000 | #define EXYNOS4_PA_PDMA1		0x12690000 | ||||||
|  | #define EXYNOS5_PA_MDMA0		0x10800000 | ||||||
|  | #define EXYNOS5_PA_MDMA1		0x11C10000 | ||||||
|  | #define EXYNOS5_PA_PDMA0		0x121A0000 | ||||||
|  | #define EXYNOS5_PA_PDMA1		0x121B0000 | ||||||
| 
 | 
 | ||||||
| #define EXYNOS4_PA_SYSMMU_MDMA		0x10A40000 | #define EXYNOS4_PA_SYSMMU_MDMA		0x10A40000 | ||||||
| #define EXYNOS4_PA_SYSMMU_SSS		0x10A50000 | #define EXYNOS4_PA_SYSMMU_SSS		0x10A50000 | ||||||
|  |  | ||||||
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
	
	 Mark Brown
				Mark Brown