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/devices/*/device_capabilities | ||||
| What:		/sys/bus/usb/drivers/usbtmc/*/interface_capabilities | ||||
| What:		/sys/bus/usb/drivers/usbtmc/*/device_capabilities | ||||
| Date:		August 2008 | ||||
| Contact:	Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||||
| Description: | ||||
|  | @ -12,8 +12,8 @@ Description: | |||
| 		The files are read only. | ||||
| 
 | ||||
| 
 | ||||
| What:		/sys/bus/usb/drivers/usbtmc/devices/*/usb488_interface_capabilities | ||||
| What:		/sys/bus/usb/drivers/usbtmc/devices/*/usb488_device_capabilities | ||||
| What:		/sys/bus/usb/drivers/usbtmc/*/usb488_interface_capabilities | ||||
| What:		/sys/bus/usb/drivers/usbtmc/*/usb488_device_capabilities | ||||
| Date:		August 2008 | ||||
| Contact:	Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||||
| Description: | ||||
|  | @ -27,7 +27,7 @@ Description: | |||
| 		The files are read only. | ||||
| 
 | ||||
| 
 | ||||
| What:		/sys/bus/usb/drivers/usbtmc/devices/*/TermChar | ||||
| What:		/sys/bus/usb/drivers/usbtmc/*/TermChar | ||||
| Date:		August 2008 | ||||
| Contact:	Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||||
| Description: | ||||
|  | @ -40,7 +40,7 @@ Description: | |||
| 		sent to the device or not. | ||||
| 
 | ||||
| 
 | ||||
| What:		/sys/bus/usb/drivers/usbtmc/devices/*/TermCharEnabled | ||||
| What:		/sys/bus/usb/drivers/usbtmc/*/TermCharEnabled | ||||
| Date:		August 2008 | ||||
| Contact:	Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||||
| Description: | ||||
|  | @ -51,7 +51,7 @@ Description: | |||
| 		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 | ||||
| Contact:	Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||||
| 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, | ||||
| those that do not will simply ignore the attribute and exhibit default | ||||
| 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 | ||||
|   </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> | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
|     <refentry id="V4L2-PIX-FMT-NV12M"> | ||||
|       <refmeta> | ||||
| 	<refentrytitle>V4L2_PIX_FMT_NV12M ('NV12M')</refentrytitle> | ||||
| 	<refentrytitle>V4L2_PIX_FMT_NV12M ('NM12')</refentrytitle> | ||||
| 	&manvol; | ||||
|       </refmeta> | ||||
|       <refnamediv> | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
|     <refentry id="V4L2-PIX-FMT-YUV420M"> | ||||
|       <refmeta> | ||||
| 	<refentrytitle>V4L2_PIX_FMT_YUV420M ('YU12M')</refentrytitle> | ||||
| 	<refentrytitle>V4L2_PIX_FMT_YUV420M ('YM12')</refentrytitle> | ||||
| 	&manvol; | ||||
|       </refmeta> | ||||
|       <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 | ||||
| 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., | ||||
| 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: | ||||
|  - accounting anonymous pages, file caches, swap caches usage and limiting them. | ||||
|  - private LRU and reclaim routine. (system's global LRU and private LRU | ||||
|    work independently from each other) | ||||
|  - pages are linked to per-memcg LRU exclusively, and there is no global LRU. | ||||
|  - optionally, memory+swap usage can be accounted and limited. | ||||
|  - hierarchical accounting | ||||
|  - soft limit | ||||
|  | @ -154,7 +153,7 @@ updated. page_cgroup has its own LRU on cgroup. | |||
| 2.2.1 Accounting details | ||||
| 
 | ||||
| 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. | ||||
| 
 | ||||
| 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. | ||||
| 
 | ||||
| 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 | ||||
| 		            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 | ||||
| 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 | ||||
| cpu_possible_map. | ||||
| cpu_possible_mask. | ||||
| 
 | ||||
| possible_cpus=n		[s390,x86_64] use this to set hotpluggable cpus. | ||||
| 			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. | ||||
| 
 | ||||
| CPU maps and such | ||||
|  | @ -76,7 +76,7 @@ CPU maps and such | |||
| [More on cpumaps and primitive to manipulate, please check | ||||
| 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 | ||||
| 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 | ||||
|  | @ -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 | ||||
| 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 | ||||
| interrupts from devices. Its cleared when a cpu is brought down using | ||||
| __cpu_disable(), before which all OS services including interrupts are | ||||
| 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 | ||||
| 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 | ||||
|  | @ -99,22 +99,22 @@ at which time hotplug is disabled. | |||
| 
 | ||||
| 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 | ||||
| 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. | ||||
| 
 | ||||
| 	#include <linux/cpumask.h> | ||||
| 
 | ||||
| 	for_each_possible_cpu     - Iterate over cpu_possible_map | ||||
| 	for_each_online_cpu       - Iterate over cpu_online_map | ||||
| 	for_each_present_cpu      - Iterate over cpu_present_map | ||||
| 	for_each_possible_cpu     - Iterate over cpu_possible_mask | ||||
| 	for_each_online_cpu       - Iterate over cpu_online_mask | ||||
| 	for_each_present_cpu      - Iterate over cpu_present_mask | ||||
| 	for_each_cpu_mask(x,mask) - Iterate over some random collection of cpu mask. | ||||
| 
 | ||||
| 	#include <linux/cpu.h> | ||||
| 	get_online_cpus() and put_online_cpus(): | ||||
| 
 | ||||
| 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 | ||||
| preempt_disable() and preempt_enable() for those sections. | ||||
| 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. | ||||
| Each SATA controller should have its own node. | ||||
| 
 | ||||
| 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> | ||||
| - reg               : <registers mapping> | ||||
| 
 | ||||
|  | @ -14,4 +14,3 @@ Example: | |||
|                 reg = <0xffe08000 0x1000>; | ||||
|                 interrupts = <115>; | ||||
|         }; | ||||
| 
 | ||||
|  | @ -27,13 +27,13 @@ nand0: nand@40000000,0 { | |||
| 	reg = <0x40000000 0x10000000 | ||||
| 	       0xffffe800 0x200 | ||||
| 	      >; | ||||
| 	atmel,nand-addr-offset = <21>; | ||||
| 	atmel,nand-cmd-offset = <22>; | ||||
| 	atmel,nand-addr-offset = <21>;	/* ale */ | ||||
| 	atmel,nand-cmd-offset = <22>;	/* cle */ | ||||
| 	nand-on-flash-bbt; | ||||
| 	nand-ecc-mode = "soft"; | ||||
| 	gpios = <&pioC 13 0 | ||||
| 		 &pioC 14 0 | ||||
| 		 0 | ||||
| 	gpios = <&pioC 13 0	/* rdy */ | ||||
| 		 &pioC 14 0 	/* nce */ | ||||
| 		 0		/* cd */ | ||||
| 		>; | ||||
| 	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: | ||||
| - compatible : "fsl,sgtl5000". | ||||
| 
 | ||||
| - reg : the I2C address of the device | ||||
| 
 | ||||
| Example: | ||||
| 
 | ||||
| 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 | ||||
| When:	2012 | ||||
| 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 | ||||
| 	removed. | ||||
| 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 { | ||||
| 	const char *name; | ||||
| 	int fs_flags; | ||||
|         struct dentry (*mount) (struct file_system_type *, int, | ||||
|         struct dentry *(*mount) (struct file_system_type *, int, | ||||
|                        const char *, void *); | ||||
|         void (*kill_sb) (struct super_block *); | ||||
|         struct module *owner; | ||||
|  |  | |||
|  | @ -11,7 +11,7 @@ Supported chips: | |||
|   Socket S1G2: Athlon (X2), Sempron (X2), Turion X2 (Ultra) | ||||
| * AMD Family 12h processors: "Llano" (E2/A4/A6/A8-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' | ||||
|   Addresses scanned: PCI space | ||||
|  |  | |||
|  | @ -225,6 +225,7 @@ Code  Seq#(hex)	Include File		Comments | |||
| 'j'	00-3F	linux/joystick.h | ||||
| 'k'	00-0F	linux/spi/spidev.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 | ||||
| 					<http://web.archive.org/web/*/http://mikonos.dia.unisa.it/tcfs> | ||||
| 'l'	40-7F	linux/udf_fs_i.h	in development: | ||||
|  |  | |||
|  | @ -2,15 +2,15 @@ Document about softnet driver issues | |||
| 
 | ||||
| Transmit path guidelines: | ||||
| 
 | ||||
| 1) The hard_start_xmit method must never return '1' under any | ||||
|    normal circumstances.  It is considered a hard error unless | ||||
| 1) The ndo_start_xmit method must not return NETDEV_TX_BUSY under | ||||
|    any normal circumstances.  It is considered a hard error unless | ||||
|    there is no way your device can tell ahead of time when it's | ||||
|    transmit function will become busy. | ||||
| 
 | ||||
|    Instead it must maintain the queue properly.  For example, | ||||
|    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 drv *dp = netdev_priv(dev); | ||||
|  | @ -23,7 +23,7 @@ Transmit path guidelines: | |||
| 			unlock_tx(dp); | ||||
| 			printk(KERN_ERR PFX "%s: BUG! Tx Ring full when queue awake!\n", | ||||
| 			       dev->name); | ||||
| 			return 1; | ||||
| 			return NETDEV_TX_BUSY; | ||||
| 		} | ||||
| 
 | ||||
| 		... queue packet to card ... | ||||
|  | @ -35,6 +35,7 @@ Transmit path guidelines: | |||
| 		... | ||||
| 		unlock_tx(dp); | ||||
| 		... | ||||
| 		return NETDEV_TX_OK; | ||||
| 	} | ||||
| 
 | ||||
|    And then at the end of your TX reclamation event handling: | ||||
|  | @ -58,15 +59,12 @@ Transmit path guidelines: | |||
|             TX_BUFFS_AVAIL(dp) > 0) | ||||
| 		netif_wake_queue(dp->dev); | ||||
| 
 | ||||
| 2) Do not forget to update netdev->trans_start to jiffies after | ||||
|    each new tx packet is given to the hardware. | ||||
| 
 | ||||
| 3) A hard_start_xmit method must not modify the shared parts of a | ||||
| 2) An ndo_start_xmit method must not modify the shared parts of a | ||||
|    cloned SKB. | ||||
| 
 | ||||
| 4) Do not forget that once you return 0 from your hard_start_xmit | ||||
|    method, it is your driver's responsibility to free up the SKB | ||||
|    and in some finite amount of time. | ||||
| 3) Do not forget that once you return NETDEV_TX_OK from your | ||||
|    ndo_start_xmit method, it is your driver's responsibility to free | ||||
|    up the SKB and in some finite amount of time. | ||||
| 
 | ||||
|    For example, this means that it is not allowed for your 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 | ||||
|    to be freed up. | ||||
| 
 | ||||
|    If you return 1 from the hard_start_xmit method, you must not keep | ||||
|    any reference to that SKB and you must not attempt to free it up. | ||||
|    If you return NETDEV_TX_BUSY from the ndo_start_xmit method, you | ||||
|    must not keep any reference to that SKB and you must not attempt | ||||
|    to free it up. | ||||
| 
 | ||||
| Probing guidelines: | ||||
| 
 | ||||
|  | @ -85,10 +84,10 @@ Probing 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 | ||||
|    be aborted. If necessary, poll or wait for completion of  | ||||
|    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. | ||||
|  |  | |||
|  | @ -147,7 +147,7 @@ tcp_adv_win_scale - INTEGER | |||
| 	(if tcp_adv_win_scale > 0) or bytes-bytes/2^(-tcp_adv_win_scale), | ||||
| 	if it is <= 0. | ||||
| 	Possible values are [-31, 31], inclusive. | ||||
| 	Default: 2 | ||||
| 	Default: 1 | ||||
| 
 | ||||
| tcp_allowed_congestion_control - STRING | ||||
| 	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 | ||||
| 	automatic tuning of that socket's receive buffer size, in which | ||||
| 	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 | ||||
| 	Enable select acknowledgments (SACKS). | ||||
|  | @ -604,15 +604,8 @@ IP Variables: | |||
| ip_local_port_range - 2 INTEGERS | ||||
| 	Defines the local port range that is used by TCP and UDP to | ||||
| 	choose the local port. The first number is the first, the | ||||
| 	second the last local port number. Default value depends on | ||||
| 	amount of memory available on the system: | ||||
| 	> 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. | ||||
| 	second the last local port number. The default values are | ||||
| 	32768 and 61000 respectively. | ||||
| 
 | ||||
| ip_local_reserved_ports - list of comma separated ranges | ||||
| 	Specify the ports which are reserved for known third-party | ||||
|  |  | |||
|  | @ -47,26 +47,25 @@ packets is preferred. | |||
| 
 | ||||
| struct net_device synchronization rules | ||||
| ======================================= | ||||
| dev->open: | ||||
| ndo_open: | ||||
| 	Synchronization: rtnl_lock() semaphore. | ||||
| 	Context: process | ||||
| 
 | ||||
| dev->stop: | ||||
| ndo_stop: | ||||
| 	Synchronization: rtnl_lock() semaphore. | ||||
| 	Context: process | ||||
| 	Note1: netif_running() is guaranteed false | ||||
| 	Note2: dev->poll() is guaranteed to be stopped | ||||
| 	Note: netif_running() is guaranteed false | ||||
| 
 | ||||
| dev->do_ioctl: | ||||
| ndo_do_ioctl: | ||||
| 	Synchronization: rtnl_lock() semaphore. | ||||
| 	Context: process | ||||
| 
 | ||||
| dev->get_stats: | ||||
| ndo_get_stats: | ||||
| 	Synchronization: dev_base_lock rwlock. | ||||
| 	Context: nominally process, but don't sleep inside an rwlock | ||||
| 
 | ||||
| dev->hard_start_xmit: | ||||
| 	Synchronization: netif_tx_lock spinlock. | ||||
| ndo_start_xmit: | ||||
| 	Synchronization: __netif_tx_lock spinlock. | ||||
| 
 | ||||
| 	When the driver sets NETIF_F_LLTX in dev->features this will be | ||||
| 	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. | ||||
| 	  Only valid when NETIF_F_LLTX is set. | ||||
| 
 | ||||
| dev->tx_timeout: | ||||
| 	Synchronization: netif_tx_lock spinlock. | ||||
| ndo_tx_timeout: | ||||
| 	Synchronization: netif_tx_lock spinlock; all TX queues frozen. | ||||
| 	Context: BHs disabled | ||||
| 	Notes: netif_queue_stopped() is guaranteed true | ||||
| 
 | ||||
| dev->set_rx_mode: | ||||
| 	Synchronization: netif_tx_lock spinlock. | ||||
| ndo_set_rx_mode: | ||||
| 	Synchronization: netif_addr_lock spinlock. | ||||
| 	Context: BHs disabled | ||||
| 
 | ||||
| struct napi_struct synchronization rules | ||||
| ======================================== | ||||
| napi->poll: | ||||
| 	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 | ||||
| 		NAPI_STATE_SCHED napi->state bit, waiting for all pending | ||||
| 		NAPI activity to cease. | ||||
|  |  | |||
|  | @ -9,7 +9,7 @@ architectures). | |||
| 
 | ||||
| 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 | ||||
| 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 | ||||
|  | @ -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). | ||||
| 
 | ||||
| Namely, as the first step of the hibernation procedure the function | ||||
| freeze_processes() (defined in kernel/power/process.c) is called.  It executes | ||||
| try_to_freeze_tasks() that sets TIF_FREEZE for all of the freezable tasks and | ||||
| either wakes them up, if they are kernel threads, or sends fake signals to them, | ||||
| if they are user space processes.  A task that has TIF_FREEZE set, should react | ||||
| to it by calling the function called __refrigerator() (defined in | ||||
| kernel/freezer.c), which sets the task's PF_FROZEN flag, changes its state | ||||
| to TASK_UNINTERRUPTIBLE and makes it loop until PF_FROZEN is cleared for it. | ||||
| Then, we say that the task is 'frozen' and therefore the set of functions | ||||
| handling this mechanism is referred 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. | ||||
| freeze_processes() (defined in kernel/power/process.c) is called.  A system-wide | ||||
| variable system_freezing_cnt (as opposed to a per-task flag) is used to indicate | ||||
| whether the system is to undergo a freezing operation. And freeze_processes() | ||||
| sets this variable.  After this, it executes try_to_freeze_tasks() that sends a | ||||
| fake signal to all user space processes, and wakes up all the kernel threads. | ||||
| All freezable tasks must react to that by calling try_to_freeze(), which | ||||
| results in a call to __refrigerator() (defined in kernel/freezer.c), which sets | ||||
| the task's PF_FROZEN flag, changes its state to TASK_UNINTERRUPTIBLE and makes | ||||
| it loop until PF_FROZEN is cleared for it. Then, we say that the task is | ||||
| 'frozen' and therefore the set of functions handling this mechanism is referred | ||||
| 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 | ||||
| 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 | ||||
| flag is set. | ||||
| if the task is to be frozen and makes the task enter __refrigerator(). | ||||
| 
 | ||||
| For user space processes try_to_freeze() is called automatically from the | ||||
| signal-handling code, but the freezable kernel threads need to call it | ||||
| explicitly in suitable places or use the wait_event_freezable() or | ||||
| wait_event_freezable_timeout() macros (defined in include/linux/freezer.h) | ||||
| that combine interruptible sleep with checking if TIF_FREEZE is set and calling | ||||
| try_to_freeze().  The main loop of a freezable kernel thread may look like the | ||||
| following one: | ||||
| that combine interruptible sleep with checking if the task is to be frozen and | ||||
| calling try_to_freeze().  The main loop of a freezable kernel thread may look | ||||
| like the following one: | ||||
| 
 | ||||
| 	set_freezable(); | ||||
| 	do { | ||||
|  | @ -53,7 +54,7 @@ following one: | |||
| (from drivers/usb/core/hub.c::hub_thread()). | ||||
| 
 | ||||
| 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 | ||||
| threads must call try_to_freeze() somewhere or use one of the | ||||
| 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 defines two special key types: | ||||
|  (*) The key service defines three special key types: | ||||
| 
 | ||||
|      (+) "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, | ||||
| 	 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 | ||||
|      process-specific keyring, and a session-specific keyring. | ||||
| 
 | ||||
|  |  | |||
|  | @ -43,7 +43,9 @@ ALC680 | |||
| 
 | ||||
| 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 | ||||
| ========== | ||||
|  |  | |||
|  | @ -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 | ||||
| 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? | ||||
| 
 | ||||
|  |  | |||
|  | @ -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 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 | ||||
| to a storage device at address 5: | ||||
| An output bulk transfer to send a SCSI command 0x28 (READ_10) in a 31-byte | ||||
| 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 > | ||||
| 
 | ||||
| * 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 | ||||
| W:	http://www.lesswatts.org/projects/acpi/ | ||||
| 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 | ||||
| F:	drivers/acpi/ | ||||
| F:	drivers/pnp/pnpacpi/ | ||||
|  | @ -1251,7 +1251,6 @@ ATHEROS ATH5K WIRELESS DRIVER | |||
| M:	Jiri Slaby <jirislaby@gmail.com> | ||||
| M:	Nick Kossifidis <mickflemm@gmail.com> | ||||
| M:	"Luis R. Rodriguez" <mcgrof@qca.qualcomm.com> | ||||
| M:	Bob Copeland <me@bobcopeland.com> | ||||
| L:	linux-wireless@vger.kernel.org | ||||
| L:	ath5k-devel@lists.ath5k.org | ||||
| 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> | ||||
| L:	linux-bluetooth@vger.kernel.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/jh/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/bluetooth/bluetooth-next.git | ||||
| S:	Maintained | ||||
| F:	drivers/bluetooth/ | ||||
| 
 | ||||
|  | @ -1533,8 +1532,8 @@ M:	Gustavo Padovan <gustavo@padovan.org> | |||
| M:	Johan Hedberg <johan.hedberg@gmail.com> | ||||
| L:	linux-bluetooth@vger.kernel.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/jh/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/bluetooth/bluetooth-next.git | ||||
| S:	Maintained | ||||
| F:	net/bluetooth/ | ||||
| F:	include/net/bluetooth/ | ||||
|  | @ -1969,10 +1968,7 @@ S:	Maintained | |||
| F:	drivers/net/ethernet/ti/cpmac.c | ||||
| 
 | ||||
| CPU FREQUENCY DRIVERS | ||||
| M:	Dave Jones <davej@redhat.com> | ||||
| 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 | ||||
| F:	drivers/cpufreq/ | ||||
| F:	include/linux/cpufreq.h | ||||
|  | @ -2322,9 +2318,9 @@ S:	Supported | |||
| F:	drivers/acpi/dock.c | ||||
| 
 | ||||
| DOCUMENTATION | ||||
| M:	Randy Dunlap <rdunlap@xenotime.net> | ||||
| M:	Rob Landley <rob@landley.net> | ||||
| L:	linux-doc@vger.kernel.org | ||||
| T:	quilt http://xenotime.net/kernel-doc-patches/current/ | ||||
| T:	TBD | ||||
| S:	Maintained | ||||
| F:	Documentation/ | ||||
| 
 | ||||
|  | @ -2451,17 +2447,17 @@ F:	fs/ecryptfs/ | |||
| 
 | ||||
| EDAC-CORE | ||||
| 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 | ||||
| S:	Supported | ||||
| F:	Documentation/edac.txt | ||||
| F:	drivers/edac/edac_* | ||||
| F:	drivers/edac/ | ||||
| F:	include/linux/edac.h | ||||
| 
 | ||||
| EDAC-AMD64 | ||||
| M:	Doug Thompson <dougthompson@xmission.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 | ||||
| S:	Supported | ||||
| F:	drivers/edac/amd64_edac* | ||||
|  | @ -2469,35 +2465,35 @@ F:	drivers/edac/amd64_edac* | |||
| EDAC-E752X | ||||
| M:	Mark Gross <mark.gross@intel.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 | ||||
| S:	Maintained | ||||
| F:	drivers/edac/e752x_edac.c | ||||
| 
 | ||||
| EDAC-E7XXX | ||||
| 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 | ||||
| S:	Maintained | ||||
| F:	drivers/edac/e7xxx_edac.c | ||||
| 
 | ||||
| EDAC-I82443BXGX | ||||
| 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 | ||||
| S:	Maintained | ||||
| F:	drivers/edac/i82443bxgx_edac.c | ||||
| 
 | ||||
| EDAC-I3000 | ||||
| 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 | ||||
| S:	Maintained | ||||
| F:	drivers/edac/i3000_edac.c | ||||
| 
 | ||||
| EDAC-I5000 | ||||
| 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 | ||||
| S:	Maintained | ||||
| F:	drivers/edac/i5000_edac.c | ||||
|  | @ -2526,21 +2522,21 @@ F:	drivers/edac/i7core_edac.c | |||
| EDAC-I82975X | ||||
| M:	Ranganathan Desikan <ravi@jetztechnologies.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 | ||||
| S:	Maintained | ||||
| F:	drivers/edac/i82975x_edac.c | ||||
| 
 | ||||
| EDAC-PASEMI | ||||
| 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 | ||||
| S:	Maintained | ||||
| F:	drivers/edac/pasemi_edac.c | ||||
| 
 | ||||
| EDAC-R82600 | ||||
| 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 | ||||
| S:	Maintained | ||||
| F:	drivers/edac/r82600_edac.c | ||||
|  | @ -3557,17 +3553,13 @@ L:	linux-pm@vger.kernel.org | |||
| S:	Supported | ||||
| 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 | ||||
| S:	Orphan | ||||
| S:	Maintained | ||||
| 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:	drivers/net/wireless/ipw2x00/ipw2200.* | ||||
| F:	drivers/net/wireless/ipw2x00/ | ||||
| 
 | ||||
| INTEL(R) TRUSTED EXECUTION TECHNOLOGY (TXT) | ||||
| M:	Joseph Cihula <joseph.cihula@intel.com> | ||||
|  | @ -3597,6 +3589,7 @@ S:	Supported | |||
| F:	drivers/net/wireless/iwlegacy/ | ||||
| 
 | ||||
| INTEL WIRELESS WIFI LINK (iwlwifi) | ||||
| M:	Johannes Berg <johannes.berg@intel.com> | ||||
| M:	Wey-Yi Guy <wey-yi.w.guy@intel.com> | ||||
| M:	Intel Linux Wireless <ilw@linux.intel.com> | ||||
| L:	linux-wireless@vger.kernel.org | ||||
|  | @ -4314,6 +4307,13 @@ W:	http://www.kernel.org/doc/man-pages | |||
| L:	linux-man@vger.kernel.org | ||||
| 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 | ||||
| M:	Dan Williams <dcbw@redhat.com> | ||||
| L:	libertas-dev@lists.infradead.org | ||||
|  | @ -4344,12 +4344,6 @@ M:	Nicolas Pitre <nico@fluxnic.net> | |||
| S:	Odd Fixes | ||||
| 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 | ||||
| L:	linux-fbdev@vger.kernel.org | ||||
| S:	Orphan | ||||
|  | @ -4537,8 +4531,7 @@ S:	Supported | |||
| F:	drivers/net/ethernet/myricom/myri10ge/ | ||||
| 
 | ||||
| NATSEMI ETHERNET DRIVER (DP8381x) | ||||
| M:	Tim Hockin <thockin@hockin.org> | ||||
| S:	Maintained | ||||
| S:	Orphan | ||||
| F:	drivers/net/ethernet/natsemi/natsemi.c | ||||
| 
 | ||||
| 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 | ||||
| 
 | ||||
| OMAP AUDIO SUPPORT | ||||
| M:	Peter Ujfalusi <peter.ujfalusi@ti.com> | ||||
| M:	Jarkko Nikula <jarkko.nikula@bitmer.com> | ||||
| L:	alsa-devel@alsa-project.org (subscribers-only) | ||||
| 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-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 | ||||
| M:     Linas Vepstas <linasvepstas@gmail.com> | ||||
| L:	linux-pci@vger.kernel.org | ||||
|  | @ -5642,7 +5641,7 @@ M:	Ohad Ben-Cohen <ohad@wizery.com> | |||
| S:	Maintained | ||||
| F:	drivers/remoteproc/ | ||||
| F:	Documentation/remoteproc.txt | ||||
| F:	include/linux/remoteproc.txt | ||||
| F:	include/linux/remoteproc.h | ||||
| 
 | ||||
| RFKILL | ||||
| M:	Johannes Berg <johannes@sipsolutions.net> | ||||
|  | @ -5890,11 +5889,11 @@ F:	Documentation/scsi/st.txt | |||
| F:	drivers/scsi/st* | ||||
| 
 | ||||
| SCTP PROTOCOL | ||||
| M:	Vlad Yasevich <vladislav.yasevich@hp.com> | ||||
| M:	Vlad Yasevich <vyasevich@gmail.com> | ||||
| M:	Sridhar Samudrala <sri@us.ibm.com> | ||||
| L:	linux-sctp@vger.kernel.org | ||||
| W:	http://lksctp.sourceforge.net | ||||
| S:	Supported | ||||
| S:	Maintained | ||||
| F:	Documentation/networking/sctp.txt | ||||
| F:	include/linux/sctp.h | ||||
| F:	include/net/sctp/ | ||||
|  | @ -6121,12 +6120,6 @@ W:	http://www.winischhofer.at/linuxsisusbvga.shtml | |||
| S:	Maintained | ||||
| 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 | ||||
| M:	Christoph Lameter <cl@linux-foundation.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.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 | ||||
| M:	Viresh Kumar <viresh.kumar@st.com> | ||||
| L:	spear-devel@list.st.com | ||||
|  | @ -6467,6 +6469,7 @@ S:	Odd Fixes | |||
| F:	drivers/staging/olpc_dcon/ | ||||
| 
 | ||||
| STAGING - OZMO DEVICES USB OVER WIFI DRIVER | ||||
| M:	Rupesh Gujare <rgujare@ozmodevices.com> | ||||
| M:	Chris Kelly <ckelly@ozmodevices.com> | ||||
| S:	Maintained | ||||
| F:	drivers/staging/ozwpan/ | ||||
|  | @ -7462,8 +7465,7 @@ F:	include/linux/wm97xx.h | |||
| 
 | ||||
| WOLFSON MICROELECTRONICS DRIVERS | ||||
| M:	Mark Brown <broonie@opensource.wolfsonmicro.com> | ||||
| M:	Ian Lartey <ian@opensource.wolfsonmicro.com> | ||||
| M:	Dimitris Papastamos <dp@opensource.wolfsonmicro.com> | ||||
| L:	patches@opensource.wolfsonmicro.com | ||||
| T:	git git://opensource.wolfsonmicro.com/linux-2.6-asoc | ||||
| T:	git git://opensource.wolfsonmicro.com/linux-2.6-audioplus | ||||
| W:	http://opensource.wolfsonmicro.com/content/linux-drivers-wolfson-devices | ||||
|  | @ -7574,8 +7576,8 @@ F:	Documentation/filesystems/xfs.txt | |||
| F:	fs/xfs/ | ||||
| 
 | ||||
| XILINX AXI ETHERNET DRIVER | ||||
| M:	Ariane Keller <ariane.keller@tik.ee.ethz.ch> | ||||
| M:	Daniel Borkmann <daniel.borkmann@tik.ee.ethz.ch> | ||||
| M:	Anirudha Sarangi <anirudh@xilinx.com> | ||||
| M:	John Linn <John.Linn@xilinx.com> | ||||
| S:	Maintained | ||||
| F:	drivers/net/ethernet/xilinx/xilinx_axienet* | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										2
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
										
									
									
									
								
							|  | @ -1,7 +1,7 @@ | |||
| VERSION = 3 | ||||
| PATCHLEVEL = 4 | ||||
| SUBLEVEL = 0 | ||||
| EXTRAVERSION = -rc1 | ||||
| EXTRAVERSION = -rc6 | ||||
| NAME = Saber-toothed Squirrel | ||||
| 
 | ||||
| # *DOCUMENTATION*
 | ||||
|  |  | |||
|  | @ -477,7 +477,7 @@ config ALPHA_BROKEN_IRQ_MASK | |||
| 
 | ||||
| config VGA_HOSE | ||||
| 	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 | ||||
| 	help | ||||
| 	  Support VGA on an arbitrary hose; needed for several platforms | ||||
|  |  | |||
|  | @ -3,6 +3,7 @@ | |||
| 
 | ||||
| #include <linux/types.h> | ||||
| #include <asm/barrier.h> | ||||
| #include <asm/cmpxchg.h> | ||||
| 
 | ||||
| /*
 | ||||
|  * 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; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * 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_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> | ||||
| 
 | ||||
| static inline void *dma_alloc_coherent(struct device *dev, size_t size, | ||||
| 				       dma_addr_t *dma_handle, gfp_t gfp) | ||||
| #define dma_alloc_coherent(d,s,h,f)	dma_alloc_attrs(d,s,h,f,NULL) | ||||
| 
 | ||||
| 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, | ||||
| 				     void *vaddr, dma_addr_t dma_handle) | ||||
| #define dma_free_coherent(d,s,c,h) dma_free_attrs(d,s,c,h,NULL) | ||||
| 
 | ||||
| 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) | ||||
|  |  | |||
|  | @ -1,14 +1,10 @@ | |||
| #ifndef _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 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 | ||||
| 
 | ||||
| #include <asm-generic/rtc.h> | ||||
|  |  | |||
|  | @ -1,10 +1,10 @@ | |||
| #ifndef _ALPHA_ATOMIC_H | ||||
| #ifndef _ALPHA_CMPXCHG_H | ||||
| #error Do not include xchg.h directly! | ||||
| #else | ||||
| /*
 | ||||
|  * xchg/xchg_local and cmpxchg/cmpxchg_local share the same code | ||||
|  * 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> | ||||
| #undef __EXTERN_INLINE | ||||
| 
 | ||||
| #include <linux/module.h> | ||||
| #include <linux/types.h> | ||||
| #include <linux/pci.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, | ||||
| 				       dma_addr_t *dma_handle, gfp_t gfp) | ||||
| 				       dma_addr_t *dma_handle, gfp_t gfp, | ||||
| 				       struct dma_attrs *attrs) | ||||
| { | ||||
| 	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, | ||||
| 				     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)); | ||||
| } | ||||
|  | @ -174,8 +176,8 @@ static int alpha_noop_set_mask(struct device *dev, u64 mask) | |||
| } | ||||
| 
 | ||||
| struct dma_map_ops alpha_noop_ops = { | ||||
| 	.alloc_coherent		= alpha_noop_alloc_coherent, | ||||
| 	.free_coherent		= alpha_noop_free_coherent, | ||||
| 	.alloc			= alpha_noop_alloc_coherent, | ||||
| 	.free			= alpha_noop_free_coherent, | ||||
| 	.map_page		= alpha_noop_map_page, | ||||
| 	.map_sg			= alpha_noop_map_sg, | ||||
| 	.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.  */ | ||||
| 
 | ||||
| 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); | ||||
| 	void *cpu_addr; | ||||
|  | @ -478,7 +479,8 @@ try_again: | |||
|    DMA_ADDR past this call are illegal.  */ | ||||
| 
 | ||||
| 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); | ||||
| 	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 = { | ||||
| 	.alloc_coherent		= alpha_pci_alloc_coherent, | ||||
| 	.free_coherent		= alpha_pci_free_coherent, | ||||
| 	.alloc			= alpha_pci_alloc_coherent, | ||||
| 	.free			= alpha_pci_free_coherent, | ||||
| 	.map_page		= alpha_pci_map_page, | ||||
| 	.unmap_page		= alpha_pci_unmap_page, | ||||
| 	.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) | ||||
| { | ||||
| 	mask &= _BLOCKABLE; | ||||
| 	spin_lock_irq(¤t->sighand->siglock); | ||||
| 	sigset_t blocked; | ||||
| 
 | ||||
| 	current->saved_sigmask = current->blocked; | ||||
| 	siginitset(¤t->blocked, mask); | ||||
| 	recalc_sigpending(); | ||||
| 	spin_unlock_irq(¤t->sighand->siglock); | ||||
| 
 | ||||
| 	mask &= _BLOCKABLE; | ||||
| 	siginitset(&blocked, mask); | ||||
| 	set_current_blocked(&blocked); | ||||
| 
 | ||||
| 	current->state = TASK_INTERRUPTIBLE; | ||||
| 	schedule(); | ||||
|  | @ -238,10 +239,7 @@ do_sigreturn(struct sigcontext __user *sc, struct pt_regs *regs, | |||
| 		goto give_sigsegv; | ||||
| 
 | ||||
| 	sigdelsetmask(&set, ~_BLOCKABLE); | ||||
| 	spin_lock_irq(¤t->sighand->siglock); | ||||
| 	current->blocked = set; | ||||
| 	recalc_sigpending(); | ||||
| 	spin_unlock_irq(¤t->sighand->siglock); | ||||
| 	set_current_blocked(&set); | ||||
| 
 | ||||
| 	if (restore_sigcontext(sc, regs, sw)) | ||||
| 		goto give_sigsegv; | ||||
|  | @ -276,10 +274,7 @@ do_rt_sigreturn(struct rt_sigframe __user *frame, struct pt_regs *regs, | |||
| 		goto give_sigsegv; | ||||
| 
 | ||||
| 	sigdelsetmask(&set, ~_BLOCKABLE); | ||||
| 	spin_lock_irq(¤t->sighand->siglock); | ||||
| 	current->blocked = set; | ||||
| 	recalc_sigpending(); | ||||
| 	spin_unlock_irq(¤t->sighand->siglock); | ||||
| 	set_current_blocked(&set); | ||||
| 
 | ||||
| 	if (restore_sigcontext(&frame->uc.uc_mcontext, regs, sw)) | ||||
| 		goto give_sigsegv; | ||||
|  | @ -501,14 +496,8 @@ handle_signal(int sig, struct k_sigaction *ka, siginfo_t *info, | |||
| 	else | ||||
| 		ret = setup_frame(sig, ka, oldset, regs, sw); | ||||
| 
 | ||||
| 	if (ret == 0) { | ||||
| 		spin_lock_irq(¤t->sighand->siglock); | ||||
| 		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); | ||||
| 	} | ||||
| 	if (ret == 0) | ||||
| 		block_sigmask(ka, sig); | ||||
| 
 | ||||
| 	return ret; | ||||
| } | ||||
|  |  | |||
|  | @ -450,7 +450,7 @@ setup_smp(void) | |||
| 		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]); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -317,7 +317,7 @@ marvel_init_irq(void) | |||
| } | ||||
| 
 | ||||
| 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 io7_port *io7_port = hose->sysdata; | ||||
|  |  | |||
|  | @ -338,6 +338,7 @@ config ARCH_AT91 | |||
| 	select HAVE_CLK | ||||
| 	select CLKDEV_LOOKUP | ||||
| 	select IRQ_DOMAIN | ||||
| 	select NEED_MACH_IO_H if PCCARD | ||||
| 	help | ||||
| 	  This enables support for systems based on the Atmel AT91RM9200, | ||||
| 	  AT91SAM9 processors. | ||||
|  | @ -1185,6 +1186,15 @@ if !MMU | |||
| source "arch/arm/Kconfig-nommu" | ||||
| 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 | ||||
| 	bool "ARM errata: Invalidation of the Instruction Cache operation can fail" | ||||
| 	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) { | ||||
| 			if (memcount >= sizeof(mem_reg_property)/4) | ||||
| 				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.size); | ||||
| 		} else if (atag->hdr.tag == ATAG_INITRD2) { | ||||
|  |  | |||
|  | @ -273,7 +273,7 @@ restart:	adr	r0, LC0 | |||
| 		add	r0, r0, #0x100 | ||||
| 		mov	r1, r6 | ||||
| 		sub	r2, sp, r6 | ||||
| 		blne	atags_to_fdt | ||||
| 		bleq	atags_to_fdt | ||||
| 
 | ||||
| 		ldmfd	sp!, {r0-r3, ip, lr} | ||||
| 		sub	sp, sp, #0x10000 | ||||
|  |  | |||
|  | @ -35,7 +35,7 @@ | |||
| 		}; | ||||
| 	}; | ||||
| 
 | ||||
| 	memory@20000000 { | ||||
| 	memory { | ||||
| 		reg = <0x20000000 0x08000000>; | ||||
| 	}; | ||||
| 
 | ||||
|  | @ -55,7 +55,6 @@ | |||
| 				#interrupt-cells = <2>; | ||||
| 				compatible = "atmel,at91rm9200-aic"; | ||||
| 				interrupt-controller; | ||||
| 				interrupt-parent; | ||||
| 				reg = <0xfffff000 0x200>; | ||||
| 			}; | ||||
| 
 | ||||
|  |  | |||
|  | @ -37,8 +37,8 @@ | |||
| 		usb0: ohci@00600000 { | ||||
| 			status = "okay"; | ||||
| 			num-ports = <2>; | ||||
| 			atmel,vbus-gpio = <&pioD 19 0 | ||||
| 					   &pioD 20 0 | ||||
| 			atmel,vbus-gpio = <&pioD 19 1 | ||||
| 					   &pioD 20 1 | ||||
| 					  >; | ||||
| 		}; | ||||
| 
 | ||||
|  |  | |||
|  | @ -36,7 +36,7 @@ | |||
| 		}; | ||||
| 	}; | ||||
| 
 | ||||
| 	memory@70000000 { | ||||
| 	memory { | ||||
| 		reg = <0x70000000 0x10000000>; | ||||
| 	}; | ||||
| 
 | ||||
|  | @ -56,7 +56,6 @@ | |||
| 				#interrupt-cells = <2>; | ||||
| 				compatible = "atmel,at91rm9200-aic"; | ||||
| 				interrupt-controller; | ||||
| 				interrupt-parent; | ||||
| 				reg = <0xfffff000 0x200>; | ||||
| 			}; | ||||
| 
 | ||||
|  |  | |||
|  | @ -17,7 +17,7 @@ | |||
| 		bootargs = "mem=64M console=ttyS0,115200 root=/dev/mtdblock1 rw rootfstype=jffs2"; | ||||
| 	}; | ||||
| 
 | ||||
| 	memory@70000000 { | ||||
| 	memory { | ||||
| 		reg = <0x70000000 0x4000000>; | ||||
| 	}; | ||||
| 
 | ||||
|  | @ -73,8 +73,8 @@ | |||
| 		usb0: ohci@00700000 { | ||||
| 			status = "okay"; | ||||
| 			num-ports = <2>; | ||||
| 			atmel,vbus-gpio = <&pioD 1 0 | ||||
| 					   &pioD 3 0>; | ||||
| 			atmel,vbus-gpio = <&pioD 1 1 | ||||
| 					   &pioD 3 1>; | ||||
| 		}; | ||||
| 
 | ||||
| 		usb1: ehci@00800000 { | ||||
|  |  | |||
|  | @ -34,7 +34,7 @@ | |||
| 		}; | ||||
| 	}; | ||||
| 
 | ||||
| 	memory@20000000 { | ||||
| 	memory { | ||||
| 		reg = <0x20000000 0x10000000>; | ||||
| 	}; | ||||
| 
 | ||||
|  | @ -54,7 +54,6 @@ | |||
| 				#interrupt-cells = <2>; | ||||
| 				compatible = "atmel,at91rm9200-aic"; | ||||
| 				interrupt-controller; | ||||
| 				interrupt-parent; | ||||
| 				reg = <0xfffff000 0x200>; | ||||
| 			}; | ||||
| 
 | ||||
|  | @ -201,8 +200,8 @@ | |||
| 			      >; | ||||
| 			atmel,nand-addr-offset = <21>; | ||||
| 			atmel,nand-cmd-offset = <22>; | ||||
| 			gpios = <&pioC 8 0 | ||||
| 				 &pioC 14 0 | ||||
| 			gpios = <&pioD 5 0 | ||||
| 				 &pioD 4 0 | ||||
| 				 0 | ||||
| 				>; | ||||
| 			status = "disabled"; | ||||
|  |  | |||
|  | @ -8,7 +8,7 @@ | |||
|  */ | ||||
| 
 | ||||
| / { | ||||
| 	memory@20000000 { | ||||
| 	memory { | ||||
| 		reg = <0x20000000 0x8000000>; | ||||
| 	}; | ||||
| 
 | ||||
|  |  | |||
|  | @ -24,7 +24,6 @@ | |||
| 			#interrupt-cells = <3>; | ||||
| 			#address-cells = <1>; | ||||
| 			interrupt-controller; | ||||
| 			interrupt-parent; | ||||
| 			reg = <0xa0411000 0x1000>, | ||||
| 			      <0xa0410100 0x100>; | ||||
| 		}; | ||||
|  |  | |||
|  | @ -89,7 +89,6 @@ | |||
| 			#size-cells = <0>; | ||||
| 			#address-cells = <1>; | ||||
| 			interrupt-controller; | ||||
| 			interrupt-parent; | ||||
| 			reg = <0xfff11000 0x1000>, | ||||
| 			      <0xfff10100 0x100>; | ||||
| 		}; | ||||
|  |  | |||
|  | @ -10,7 +10,7 @@ | |||
| 	intc: interrupt-controller@02080000 { | ||||
| 		compatible = "qcom,msm-8660-qgic"; | ||||
| 		interrupt-controller; | ||||
| 		#interrupt-cells = <1>; | ||||
| 		#interrupt-cells = <3>; | ||||
| 		reg = < 0x02080000 0x1000 >, | ||||
| 		      < 0x02081000 0x1000 >; | ||||
| 	}; | ||||
|  | @ -19,6 +19,6 @@ | |||
| 		compatible = "qcom,msm-hsuart", "qcom,msm-uart"; | ||||
| 		reg = <0x19c40000 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"; | ||||
| 	}; | ||||
| 
 | ||||
| 	memory@20000000 { | ||||
| 	memory { | ||||
| 		reg = <0x20000000 0x4000000>; | ||||
| 	}; | ||||
| 
 | ||||
|  |  | |||
|  | @ -173,7 +173,7 @@ | |||
| 			mmc@5000 { | ||||
| 				compatible = "arm,primecell"; | ||||
| 				reg = < 0x5000 0x1000>; | ||||
| 				interrupts = <22>; | ||||
| 				interrupts = <22 34>; | ||||
| 			}; | ||||
| 			kmi@6000 { | ||||
| 				compatible = "arm,pl050", "arm,primecell"; | ||||
|  |  | |||
|  | @ -41,7 +41,7 @@ | |||
| 			mmc@b000 { | ||||
| 				compatible = "arm,primecell"; | ||||
| 				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 | ||||
|  * handled at least one interrupt.  This does a single read of the | ||||
|  * status register and handles all interrupts in order from LSB first. | ||||
|  * handled at least one interrupt.  This reads the status register | ||||
|  * 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) | ||||
| { | ||||
| 	u32 stat, irq; | ||||
| 	int handled = 0; | ||||
| 
 | ||||
| 	stat = readl_relaxed(vic->base + VIC_IRQ_STATUS); | ||||
| 	while (stat) { | ||||
| 	while ((stat = readl_relaxed(vic->base + VIC_IRQ_STATUS))) { | ||||
| 		irq = ffs(stat) - 1; | ||||
| 		handle_IRQ(irq_find_mapping(vic->domain, irq), regs); | ||||
| 		stat &= ~(1 << irq); | ||||
| 		handled = 1; | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
|  | @ -112,6 +112,7 @@ CONFIG_WATCHDOG=y | |||
| CONFIG_IMX2_WDT=y | ||||
| CONFIG_MFD_MC13XXX=y | ||||
| CONFIG_REGULATOR=y | ||||
| CONFIG_REGULATOR_FIXED_VOLTAGE=y | ||||
| CONFIG_REGULATOR_MC13783=y | ||||
| CONFIG_REGULATOR_MC13892=y | ||||
| CONFIG_FB=y | ||||
|  |  | |||
|  | @ -14,6 +14,8 @@ CONFIG_MODULE_FORCE_UNLOAD=y | |||
| # CONFIG_BLK_DEV_BSG is not set | ||||
| CONFIG_BLK_DEV_INTEGRITY=y | ||||
| CONFIG_ARCH_S3C24XX=y | ||||
| # CONFIG_CPU_S3C2410 is not set | ||||
| CONFIG_CPU_S3C2440=y | ||||
| CONFIG_S3C_ADC=y | ||||
| CONFIG_S3C24XX_PWM=y | ||||
| CONFIG_MACH_MINI2440=y | ||||
|  |  | |||
|  | @ -8,8 +8,6 @@ CONFIG_MODULE_UNLOAD=y | |||
| # CONFIG_LBDAF is not set | ||||
| # CONFIG_BLK_DEV_BSG is not set | ||||
| CONFIG_ARCH_U8500=y | ||||
| CONFIG_UX500_SOC_DB5500=y | ||||
| CONFIG_UX500_SOC_DB8500=y | ||||
| CONFIG_MACH_HREFV60=y | ||||
| CONFIG_MACH_SNOWBALL=y | ||||
| CONFIG_MACH_U5500=y | ||||
|  | @ -39,7 +37,6 @@ CONFIG_CAIF=y | |||
| CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||||
| CONFIG_BLK_DEV_RAM=y | ||||
| CONFIG_BLK_DEV_RAM_SIZE=65536 | ||||
| CONFIG_MISC_DEVICES=y | ||||
| CONFIG_AB8500_PWM=y | ||||
| CONFIG_SENSORS_BH1780=y | ||||
| CONFIG_NETDEVICES=y | ||||
|  | @ -65,16 +62,18 @@ CONFIG_SERIAL_AMBA_PL011=y | |||
| CONFIG_SERIAL_AMBA_PL011_CONSOLE=y | ||||
| CONFIG_HW_RANDOM=y | ||||
| CONFIG_HW_RANDOM_NOMADIK=y | ||||
| CONFIG_I2C=y | ||||
| CONFIG_I2C_NOMADIK=y | ||||
| CONFIG_SPI=y | ||||
| CONFIG_SPI_PL022=y | ||||
| CONFIG_GPIO_STMPE=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_TC3589X=y | ||||
| CONFIG_AB5500_CORE=y | ||||
| CONFIG_AB8500_CORE=y | ||||
| CONFIG_REGULATOR=y | ||||
| CONFIG_REGULATOR_AB8500=y | ||||
| # CONFIG_HID_SUPPORT is not set | ||||
| CONFIG_USB_GADGET=y | ||||
|  |  | |||
|  | @ -2,6 +2,7 @@ | |||
| #define __ASM_BARRIER_H | ||||
| 
 | ||||
| #ifndef __ASSEMBLY__ | ||||
| #include <asm/outercache.h> | ||||
| 
 | ||||
| #define nop() __asm__ __volatile__("mov\tr0,r0\t@ nop\n\t"); | ||||
| 
 | ||||
|  | @ -39,7 +40,6 @@ | |||
| #ifdef CONFIG_ARCH_HAS_BARRIERS | ||||
| #include <mach/barriers.h> | ||||
| #elif defined(CONFIG_ARM_DMA_MEM_BUFFERABLE) || defined(CONFIG_SMP) | ||||
| #include <asm/outercache.h> | ||||
| #define mb()		do { dsb(); outer_sync(); } while (0) | ||||
| #define rmb()		dsb() | ||||
| #define wmb()		mb() | ||||
|  |  | |||
|  | @ -119,7 +119,7 @@ static inline void __iomem *__typesafe_io(unsigned long addr) | |||
| #ifdef CONFIG_NEED_MACH_IO_H | ||||
| #include <mach/io.h> | ||||
| #else | ||||
| #define __io(a)		({ (void)(a); __typesafe_io(0); }) | ||||
| #define __io(a)		__typesafe_io((a) & IO_SPACE_LIMIT) | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  |  | |||
|  | @ -14,7 +14,7 @@ | |||
| #define JUMP_LABEL_NOP	"nop" | ||||
| #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" | ||||
| 		 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_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 | ||||
| 
 | ||||
| /*
 | ||||
|  |  | |||
|  | @ -7,6 +7,8 @@ | |||
| 
 | ||||
| 	.macro set_tls_v6k, tp, tmp1, tmp2 | ||||
| 	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 | ||||
| 
 | ||||
| 	.macro set_tls_v6, tp, tmp1, tmp2 | ||||
|  | @ -15,6 +17,8 @@ | |||
| 	mov	\tmp2, #0xffff0fff | ||||
| 	tst	\tmp1, #HWCAP_TLS		@ hardware TLS available? | ||||
| 	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 | ||||
| 	.endm | ||||
| 
 | ||||
|  |  | |||
|  | @ -299,7 +299,6 @@ static inline int pdev_bad_for_parity(struct pci_dev *dev) | |||
|  */ | ||||
| void pcibios_fixup_bus(struct pci_bus *bus) | ||||
| { | ||||
| 	struct pci_sys_data *root = bus->sysdata; | ||||
| 	struct pci_dev *dev; | ||||
| 	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 <asm/opcodes.h> | ||||
| 
 | ||||
|  |  | |||
|  | @ -155,10 +155,10 @@ static bool migrate_one_irq(struct irq_desc *desc) | |||
| 	} | ||||
| 
 | ||||
| 	c = irq_data_get_irq_chip(d); | ||||
| 	if (c->irq_set_affinity) | ||||
| 		c->irq_set_affinity(d, affinity, true); | ||||
| 	else | ||||
| 	if (!c->irq_set_affinity) | ||||
| 		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; | ||||
| } | ||||
|  |  | |||
|  | @ -152,7 +152,7 @@ int __kprobes __arch_disarm_kprobe(void *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) | ||||
|  |  | |||
|  | @ -256,7 +256,7 @@ static int ptrace_read_user(struct task_struct *tsk, unsigned long off, | |||
| { | ||||
| 	unsigned long tmp; | ||||
| 
 | ||||
| 	if (off & 3 || off >= sizeof(struct user)) | ||||
| 	if (off & 3) | ||||
| 		return -EIO; | ||||
| 
 | ||||
| 	tmp = 0; | ||||
|  | @ -268,6 +268,8 @@ static int ptrace_read_user(struct task_struct *tsk, unsigned long off, | |||
| 		tmp = tsk->mm->end_code; | ||||
| 	else if (off < sizeof(struct pt_regs)) | ||||
| 		tmp = get_user_reg(tsk, off >> 2); | ||||
| 	else if (off >= sizeof(struct user)) | ||||
| 		return -EIO; | ||||
| 
 | ||||
| 	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; | ||||
| 	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; | ||||
| 
 | ||||
| 	/*
 | ||||
|  |  | |||
|  | @ -180,44 +180,23 @@ static int restore_iwmmxt_context(struct iwmmxt_sigframe *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 size = VFP_STORAGE_SIZE; | ||||
| 	int err = 0; | ||||
| 
 | ||||
| 	vfp_sync_hwstate(thread); | ||||
| 	__put_user_error(magic, &frame->magic, err); | ||||
| 	__put_user_error(size, &frame->size, err); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Copy the floating point registers. There can be unused | ||||
| 	 * 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); | ||||
| 	if (err) | ||||
| 		return -EFAULT; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * 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; | ||||
| 	return vfp_preserve_user_clear_hwstate(&frame->ufp, &frame->ufp_exc); | ||||
| } | ||||
| 
 | ||||
| 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 size; | ||||
| 	unsigned long fpexc; | ||||
| 	int err = 0; | ||||
| 
 | ||||
| 	__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) | ||||
| 		return -EINVAL; | ||||
| 
 | ||||
| 	vfp_flush_hwstate(thread); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * 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; | ||||
| 	return vfp_restore_user_hwstate(&frame->ufp, &frame->ufp_exc); | ||||
| } | ||||
| 
 | ||||
| #endif | ||||
|  |  | |||
|  | @ -349,7 +349,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus) | |||
| 		 * re-initialize the map in platform_smp_prepare_cpus() if | ||||
| 		 * 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 | ||||
|  | @ -510,10 +510,6 @@ static void ipi_cpu_stop(unsigned int cpu) | |||
| 	local_fiq_disable(); | ||||
| 	local_irq_disable(); | ||||
| 
 | ||||
| #ifdef CONFIG_HOTPLUG_CPU | ||||
| 	platform_cpu_kill(cpu); | ||||
| #endif | ||||
| 
 | ||||
| 	while (1) | ||||
| 		cpu_relax(); | ||||
| } | ||||
|  | @ -576,16 +572,25 @@ void smp_send_reschedule(int cpu) | |||
| 	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) | ||||
| { | ||||
| 	unsigned long timeout; | ||||
| 	struct cpumask mask; | ||||
| 
 | ||||
| 	if (num_online_cpus() > 1) { | ||||
| 		cpumask_t mask = cpu_online_map; | ||||
| 		cpu_clear(smp_processor_id(), mask); | ||||
| 
 | ||||
| 	cpumask_copy(&mask, cpu_online_mask); | ||||
| 	cpumask_clear_cpu(smp_processor_id(), &mask); | ||||
| 	smp_cross_call(&mask, IPI_CPU_STOP); | ||||
| 	} | ||||
| 
 | ||||
| 	/* Wait up to one second for other CPUs to stop */ | ||||
| 	timeout = USEC_PER_SEC; | ||||
|  | @ -594,6 +599,8 @@ void smp_send_stop(void) | |||
| 
 | ||||
| 	if (num_online_cpus() > 1) | ||||
| 		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"); | ||||
| } | ||||
| #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_set_serial_console(unsigned portnr) {} | ||||
| void __init at91_add_device_serial(void) {} | ||||
|  |  | |||
|  | @ -23,6 +23,7 @@ | |||
| #include <linux/interrupt.h> | ||||
| #include <linux/irq.h> | ||||
| #include <linux/clockchips.h> | ||||
| #include <linux/export.h> | ||||
| 
 | ||||
| #include <asm/mach/time.h> | ||||
| 
 | ||||
|  | @ -176,6 +177,7 @@ static struct clock_event_device clkevt = { | |||
| }; | ||||
| 
 | ||||
| void __iomem *at91_st_base; | ||||
| EXPORT_SYMBOL_GPL(at91_st_base); | ||||
| 
 | ||||
| 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 | ||||
| 			cs_pin = spi1_standard_cs[devices[i].chip_select]; | ||||
| 
 | ||||
| 		if (!gpio_is_valid(cs_pin)) | ||||
| 			continue; | ||||
| 
 | ||||
| 		if (devices[i].bus_num == 0) | ||||
| 			enable_spi0 = 1; | ||||
| 		else | ||||
|  |  | |||
|  | @ -415,6 +415,9 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices) | |||
| 		else | ||||
| 			cs_pin = spi1_standard_cs[devices[i].chip_select]; | ||||
| 
 | ||||
| 		if (!gpio_is_valid(cs_pin)) | ||||
| 			continue; | ||||
| 
 | ||||
| 		if (devices[i].bus_num == 0) | ||||
| 			enable_spi0 = 1; | ||||
| 		else | ||||
|  |  | |||
|  | @ -72,7 +72,8 @@ void __init at91_add_device_usbh(struct at91_usbh_data *data) | |||
| 	/* Enable VBus control for UHP ports */ | ||||
| 	for (i = 0; i < data->ports; 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 */ | ||||
|  | @ -671,6 +672,9 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices) | |||
| 		else | ||||
| 			cs_pin = spi1_standard_cs[devices[i].chip_select]; | ||||
| 
 | ||||
| 		if (!gpio_is_valid(cs_pin)) | ||||
| 			continue; | ||||
| 
 | ||||
| 		if (devices[i].bus_num == 0) | ||||
| 			enable_spi0 = 1; | ||||
| 		else | ||||
|  |  | |||
|  | @ -127,12 +127,13 @@ void __init at91_add_device_usbh_ohci(struct at91_usbh_data *data) | |||
| 	/* Enable VBus control for UHP ports */ | ||||
| 	for (i = 0; i < data->ports; 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 */ | ||||
| 	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); | ||||
| 	} | ||||
| 
 | ||||
|  | @ -188,7 +189,8 @@ void __init at91_add_device_usbh_ehci(struct at91_usbh_data *data) | |||
| 	/* Enable VBus control for UHP ports */ | ||||
| 	for (i = 0; i < data->ports; 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; | ||||
|  | @ -785,6 +787,9 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices) | |||
| 		else | ||||
| 			cs_pin = spi1_standard_cs[devices[i].chip_select]; | ||||
| 
 | ||||
| 		if (!gpio_is_valid(cs_pin)) | ||||
| 			continue; | ||||
| 
 | ||||
| 		if (devices[i].bus_num == 0) | ||||
| 			enable_spi0 = 1; | ||||
| 		else | ||||
|  |  | |||
|  | @ -419,6 +419,9 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices) | |||
| 		else | ||||
| 			cs_pin = spi_standard_cs[devices[i].chip_select]; | ||||
| 
 | ||||
| 		if (!gpio_is_valid(cs_pin)) | ||||
| 			continue; | ||||
| 
 | ||||
| 		/* enable chip-select pin */ | ||||
| 		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("t0_clk", "f8008000.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("pioB", &pioAB_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_SIZE	SZ_2M | ||||
| #define EK_FLASH_SIZE	SZ_8M | ||||
| 
 | ||||
| static struct physmap_flash_data ek_flash_data = { | ||||
| 	.width		= 2, | ||||
|  |  | |||
|  | @ -85,8 +85,6 @@ static struct resource dm9000_resource[] = { | |||
| 		.flags	= IORESOURCE_MEM | ||||
| 	}, | ||||
| 	[2] = { | ||||
| 		.start	= AT91_PIN_PC11, | ||||
| 		.end	= AT91_PIN_PC11, | ||||
| 		.flags	= IORESOURCE_IRQ | ||||
| 			| 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) | ||||
| { | ||||
| 	struct resource *r = &dm9000_resource[2]; | ||||
| 
 | ||||
| 	/* Configure chip-select 2 (DM9000) */ | ||||
| 	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 */ | ||||
| 	at91_set_gpio_input(AT91_PIN_PC11, 0); | ||||
| 
 | ||||
| 	r->start = r->end = gpio_to_irq(AT91_PIN_PC11); | ||||
| 	platform_device_register(&dm9000_device); | ||||
| } | ||||
| #else | ||||
|  |  | |||
|  | @ -74,6 +74,7 @@ static void __init ek_init_early(void) | |||
| static struct at91_usbh_data __initdata ek_usbh_data = { | ||||
| 	.ports		= 2, | ||||
| 	.vbus_pin	= { AT91_PIN_PA24, AT91_PIN_PA21 }, | ||||
| 	.vbus_pin_active_low = {1, 1}, | ||||
| 	.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 = { | ||||
| 	.ports		= 2, | ||||
| 	.vbus_pin	= {AT91_PIN_PD1, AT91_PIN_PD3}, | ||||
| 	.vbus_pin_active_low = {1, 1}, | ||||
| 	.overcurrent_pin= {-EINVAL, -EINVAL}, | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -35,6 +35,7 @@ | |||
| #include "generic.h" | ||||
| 
 | ||||
| void __iomem *at91_pmc_base; | ||||
| EXPORT_SYMBOL_GPL(at91_pmc_base); | ||||
| 
 | ||||
| /*
 | ||||
|  * 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) \ | ||||
| 	__raw_writel(value, at91_pmc_base + field) | ||||
| #else | ||||
| .extern at91_aic_base | ||||
| .extern at91_pmc_base | ||||
| #endif | ||||
| 
 | ||||
| #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); | ||||
| 
 | ||||
|  /* USB Host */ | ||||
| #define AT91_MAX_USBH_PORTS	3 | ||||
| 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 */ | ||||
| 	int		vbus_pin[2];	/* port power-control pin */ | ||||
| 	u8              vbus_pin_active_low[2]; | ||||
| 	u8              overcurrent_supported; | ||||
| 	int             overcurrent_pin[2]; | ||||
| 	u8              overcurrent_status[2]; | ||||
| 	u8              overcurrent_changed[2]; | ||||
| 	u8              vbus_pin_active_low[AT91_MAX_USBH_PORTS]; | ||||
| 	u8              overcurrent_status[AT91_MAX_USBH_PORTS]; | ||||
| 	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_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]; | ||||
| EXPORT_SYMBOL_GPL(at91_ramc_base); | ||||
| 
 | ||||
| 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; | ||||
| EXPORT_SYMBOL_GPL(at91_matrix_base); | ||||
| 
 | ||||
| void __init at91_ioremap_matrix(u32 base_addr) | ||||
| { | ||||
|  |  | |||
|  | @ -52,8 +52,8 @@ | |||
| #include <mach/csp/chipcHw_inline.h> | ||||
| #include <mach/csp/tmrHw_reg.h> | ||||
| 
 | ||||
| static AMBA_APB_DEVICE(uartA, "uarta", MM_ADDR_IO_UARTA, { IRQ_UARTA }, NULL); | ||||
| static AMBA_APB_DEVICE(uartB, "uartb", MM_ADDR_IO_UARTB, { IRQ_UARTB }, NULL); | ||||
| static AMBA_APB_DEVICE(uartA, "uartA", 0, MM_ADDR_IO_UARTA, {IRQ_UARTA}, NULL); | ||||
| static AMBA_APB_DEVICE(uartB, "uartB", 0, MM_ADDR_IO_UARTB, {IRQ_UARTB}, NULL); | ||||
| 
 | ||||
| static struct clk pll1_clk = { | ||||
| 	.name = "PLL1", | ||||
|  |  | |||
|  | @ -368,6 +368,7 @@ comment "Flattened Device Tree based board for EXYNOS SoCs" | |||
| 
 | ||||
| config MACH_EXYNOS4_DT | ||||
| 	bool "Samsung Exynos4 Machine using device tree" | ||||
| 	depends on ARCH_EXYNOS4 | ||||
| 	select CPU_EXYNOS4210 | ||||
| 	select USE_OF | ||||
| 	select ARM_AMBA | ||||
|  | @ -380,6 +381,7 @@ config MACH_EXYNOS4_DT | |||
| 
 | ||||
| config MACH_EXYNOS5_DT | ||||
| 	bool "SAMSUNG EXYNOS5 Machine using device tree" | ||||
| 	depends on ARCH_EXYNOS5 | ||||
| 	select SOC_EXYNOS5250 | ||||
| 	select USE_OF | ||||
| 	select ARM_AMBA | ||||
|  |  | |||
|  | @ -497,25 +497,25 @@ static struct clk exynos4_init_clocks_off[] = { | |||
| 		.ctrlbit	= (1 << 3), | ||||
| 	}, { | ||||
| 		.name		= "hsmmc", | ||||
| 		.devname	= "s3c-sdhci.0", | ||||
| 		.devname	= "exynos4-sdhci.0", | ||||
| 		.parent		= &exynos4_clk_aclk_133.clk, | ||||
| 		.enable		= exynos4_clk_ip_fsys_ctrl, | ||||
| 		.ctrlbit	= (1 << 5), | ||||
| 	}, { | ||||
| 		.name		= "hsmmc", | ||||
| 		.devname	= "s3c-sdhci.1", | ||||
| 		.devname	= "exynos4-sdhci.1", | ||||
| 		.parent		= &exynos4_clk_aclk_133.clk, | ||||
| 		.enable		= exynos4_clk_ip_fsys_ctrl, | ||||
| 		.ctrlbit	= (1 << 6), | ||||
| 	}, { | ||||
| 		.name		= "hsmmc", | ||||
| 		.devname	= "s3c-sdhci.2", | ||||
| 		.devname	= "exynos4-sdhci.2", | ||||
| 		.parent		= &exynos4_clk_aclk_133.clk, | ||||
| 		.enable		= exynos4_clk_ip_fsys_ctrl, | ||||
| 		.ctrlbit	= (1 << 7), | ||||
| 	}, { | ||||
| 		.name		= "hsmmc", | ||||
| 		.devname	= "s3c-sdhci.3", | ||||
| 		.devname	= "exynos4-sdhci.3", | ||||
| 		.parent		= &exynos4_clk_aclk_133.clk, | ||||
| 		.enable		= exynos4_clk_ip_fsys_ctrl, | ||||
| 		.ctrlbit	= (1 << 8), | ||||
|  | @ -1202,7 +1202,7 @@ static struct clksrc_clk exynos4_clk_sclk_uart3 = { | |||
| static struct clksrc_clk exynos4_clk_sclk_mmc0 = { | ||||
| 	.clk	= { | ||||
| 		.name		= "sclk_mmc", | ||||
| 		.devname	= "s3c-sdhci.0", | ||||
| 		.devname	= "exynos4-sdhci.0", | ||||
| 		.parent		= &exynos4_clk_dout_mmc0.clk, | ||||
| 		.enable		= exynos4_clksrc_mask_fsys_ctrl, | ||||
| 		.ctrlbit	= (1 << 0), | ||||
|  | @ -1213,7 +1213,7 @@ static struct clksrc_clk exynos4_clk_sclk_mmc0 = { | |||
| static struct clksrc_clk exynos4_clk_sclk_mmc1 = { | ||||
| 	.clk	= { | ||||
| 		.name		= "sclk_mmc", | ||||
| 		.devname	= "s3c-sdhci.1", | ||||
| 		.devname	= "exynos4-sdhci.1", | ||||
| 		.parent		= &exynos4_clk_dout_mmc1.clk, | ||||
| 		.enable		= exynos4_clksrc_mask_fsys_ctrl, | ||||
| 		.ctrlbit	= (1 << 4), | ||||
|  | @ -1224,7 +1224,7 @@ static struct clksrc_clk exynos4_clk_sclk_mmc1 = { | |||
| static struct clksrc_clk exynos4_clk_sclk_mmc2 = { | ||||
| 	.clk	= { | ||||
| 		.name		= "sclk_mmc", | ||||
| 		.devname	= "s3c-sdhci.2", | ||||
| 		.devname	= "exynos4-sdhci.2", | ||||
| 		.parent		= &exynos4_clk_dout_mmc2.clk, | ||||
| 		.enable		= exynos4_clksrc_mask_fsys_ctrl, | ||||
| 		.ctrlbit	= (1 << 8), | ||||
|  | @ -1235,7 +1235,7 @@ static struct clksrc_clk exynos4_clk_sclk_mmc2 = { | |||
| static struct clksrc_clk exynos4_clk_sclk_mmc3 = { | ||||
| 	.clk	= { | ||||
| 		.name		= "sclk_mmc", | ||||
| 		.devname	= "s3c-sdhci.3", | ||||
| 		.devname	= "exynos4-sdhci.3", | ||||
| 		.parent		= &exynos4_clk_dout_mmc3.clk, | ||||
| 		.enable		= exynos4_clksrc_mask_fsys_ctrl, | ||||
| 		.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.2", "clk_uart_baud0", &exynos4_clk_sclk_uart2.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("s3c-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("s3c-sdhci.3", "mmc_busclk.2", &exynos4_clk_sclk_mmc3.clk), | ||||
| 	CLKDEV_INIT("exynos4-sdhci.0", "mmc_busclk.2", &exynos4_clk_sclk_mmc0.clk), | ||||
| 	CLKDEV_INIT("exynos4-sdhci.1", "mmc_busclk.2", &exynos4_clk_sclk_mmc1.clk), | ||||
| 	CLKDEV_INIT("exynos4-sdhci.2", "mmc_busclk.2", &exynos4_clk_sclk_mmc2.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("dma-pl330.0", "apb_pclk", &exynos4_clk_pdma0), | ||||
| 	CLKDEV_INIT("dma-pl330.1", "apb_pclk", &exynos4_clk_pdma1), | ||||
|  |  | |||
|  | @ -455,25 +455,25 @@ static struct clk exynos5_init_clocks_off[] = { | |||
| 		.ctrlbit	= (1 << 20), | ||||
| 	}, { | ||||
| 		.name		= "hsmmc", | ||||
| 		.devname	= "s3c-sdhci.0", | ||||
| 		.devname	= "exynos4-sdhci.0", | ||||
| 		.parent		= &exynos5_clk_aclk_200.clk, | ||||
| 		.enable		= exynos5_clk_ip_fsys_ctrl, | ||||
| 		.ctrlbit	= (1 << 12), | ||||
| 	}, { | ||||
| 		.name		= "hsmmc", | ||||
| 		.devname	= "s3c-sdhci.1", | ||||
| 		.devname	= "exynos4-sdhci.1", | ||||
| 		.parent		= &exynos5_clk_aclk_200.clk, | ||||
| 		.enable		= exynos5_clk_ip_fsys_ctrl, | ||||
| 		.ctrlbit	= (1 << 13), | ||||
| 	}, { | ||||
| 		.name		= "hsmmc", | ||||
| 		.devname	= "s3c-sdhci.2", | ||||
| 		.devname	= "exynos4-sdhci.2", | ||||
| 		.parent		= &exynos5_clk_aclk_200.clk, | ||||
| 		.enable		= exynos5_clk_ip_fsys_ctrl, | ||||
| 		.ctrlbit	= (1 << 14), | ||||
| 	}, { | ||||
| 		.name		= "hsmmc", | ||||
| 		.devname	= "s3c-sdhci.3", | ||||
| 		.devname	= "exynos4-sdhci.3", | ||||
| 		.parent		= &exynos5_clk_aclk_200.clk, | ||||
| 		.enable		= exynos5_clk_ip_fsys_ctrl, | ||||
| 		.ctrlbit	= (1 << 15), | ||||
|  | @ -813,7 +813,7 @@ static struct clksrc_clk exynos5_clk_sclk_uart3 = { | |||
| static struct clksrc_clk exynos5_clk_sclk_mmc0 = { | ||||
| 	.clk	= { | ||||
| 		.name		= "sclk_mmc", | ||||
| 		.devname	= "s3c-sdhci.0", | ||||
| 		.devname	= "exynos4-sdhci.0", | ||||
| 		.parent		= &exynos5_clk_dout_mmc0.clk, | ||||
| 		.enable		= exynos5_clksrc_mask_fsys_ctrl, | ||||
| 		.ctrlbit	= (1 << 0), | ||||
|  | @ -824,7 +824,7 @@ static struct clksrc_clk exynos5_clk_sclk_mmc0 = { | |||
| static struct clksrc_clk exynos5_clk_sclk_mmc1 = { | ||||
| 	.clk	= { | ||||
| 		.name		= "sclk_mmc", | ||||
| 		.devname	= "s3c-sdhci.1", | ||||
| 		.devname	= "exynos4-sdhci.1", | ||||
| 		.parent		= &exynos5_clk_dout_mmc1.clk, | ||||
| 		.enable		= exynos5_clksrc_mask_fsys_ctrl, | ||||
| 		.ctrlbit	= (1 << 4), | ||||
|  | @ -835,7 +835,7 @@ static struct clksrc_clk exynos5_clk_sclk_mmc1 = { | |||
| static struct clksrc_clk exynos5_clk_sclk_mmc2 = { | ||||
| 	.clk	= { | ||||
| 		.name		= "sclk_mmc", | ||||
| 		.devname	= "s3c-sdhci.2", | ||||
| 		.devname	= "exynos4-sdhci.2", | ||||
| 		.parent		= &exynos5_clk_dout_mmc2.clk, | ||||
| 		.enable		= exynos5_clksrc_mask_fsys_ctrl, | ||||
| 		.ctrlbit	= (1 << 8), | ||||
|  | @ -846,7 +846,7 @@ static struct clksrc_clk exynos5_clk_sclk_mmc2 = { | |||
| static struct clksrc_clk exynos5_clk_sclk_mmc3 = { | ||||
| 	.clk	= { | ||||
| 		.name		= "sclk_mmc", | ||||
| 		.devname	= "s3c-sdhci.3", | ||||
| 		.devname	= "exynos4-sdhci.3", | ||||
| 		.parent		= &exynos5_clk_dout_mmc3.clk, | ||||
| 		.enable		= exynos5_clksrc_mask_fsys_ctrl, | ||||
| 		.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.2", "clk_uart_baud0", &exynos5_clk_sclk_uart2.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("s3c-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("s3c-sdhci.3", "mmc_busclk.2", &exynos5_clk_sclk_mmc3.clk), | ||||
| 	CLKDEV_INIT("exynos4-sdhci.0", "mmc_busclk.2", &exynos5_clk_sclk_mmc0.clk), | ||||
| 	CLKDEV_INIT("exynos4-sdhci.1", "mmc_busclk.2", &exynos5_clk_sclk_mmc1.clk), | ||||
| 	CLKDEV_INIT("exynos4-sdhci.2", "mmc_busclk.2", &exynos5_clk_sclk_mmc2.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.1", "apb_pclk", &exynos5_clk_pdma1), | ||||
| 	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(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 */ | ||||
| 	s3c_i2c0_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].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 */ | ||||
| 	s3c_i2c0_setname("s3c2440-i2c"); | ||||
| 	s3c_i2c1_setname("s3c2440-i2c"); | ||||
|  | @ -537,7 +547,9 @@ void __init exynos5_init_irq(void) | |||
| { | ||||
| 	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++) { | ||||
| 		combiner_init(irq, (void __iomem *)S5P_VA_COMBINER(irq), | ||||
|  | @ -583,10 +595,11 @@ core_initcall(exynos_core_init); | |||
| #ifdef CONFIG_CACHE_L2X0 | ||||
| static int __init exynos4_l2x0_cache_init(void) | ||||
| { | ||||
| 	int ret; | ||||
| 
 | ||||
| 	if (soc_is_exynos5250()) | ||||
| 		return 0; | ||||
| 
 | ||||
| 	int ret; | ||||
| 	ret = l2x0_of_init(L2_AUX_VAL, L2_AUX_MASK); | ||||
| 	if (!ret) { | ||||
| 		l2x0_regs_phys = virt_to_phys(&l2x0_saved_regs); | ||||
|  |  | |||
|  | @ -16,6 +16,7 @@ | |||
| #include <linux/dma-mapping.h> | ||||
| #include <linux/platform_device.h> | ||||
| #include <linux/interrupt.h> | ||||
| #include <linux/ioport.h> | ||||
| #include <linux/mmc/dw_mmc.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[] = { | ||||
| 	[0] = { | ||||
| 		.start	= EXYNOS4_PA_DWMCI, | ||||
| 		.end	= EXYNOS4_PA_DWMCI + SZ_4K - 1, | ||||
| 		.flags	= IORESOURCE_MEM, | ||||
| 	}, | ||||
| 	[1] = { | ||||
| 		.start	= IRQ_DWMCI, | ||||
| 		.end	= IRQ_DWMCI, | ||||
| 		.flags	= IORESOURCE_IRQ, | ||||
| 	} | ||||
| 	[0] = DEFINE_RES_MEM(EXYNOS4_PA_DWMCI, SZ_4K), | ||||
| 	[1] = DEFINE_RES_IRQ(EXYNOS4_IRQ_DWMCI), | ||||
| }; | ||||
| 
 | ||||
| static struct dw_mci_board exynos4_dwci_pdata = { | ||||
|  |  | |||
|  | @ -35,8 +35,6 @@ | |||
| #include <mach/irqs.h> | ||||
| #include <mach/dma.h> | ||||
| 
 | ||||
| static u64 dma_dmamask = DMA_BIT_MASK(32); | ||||
| 
 | ||||
| static u8 exynos4210_pdma0_peri[] = { | ||||
| 	DMACH_PCM0_RX, | ||||
| 	DMACH_PCM0_TX, | ||||
|  |  | |||
|  | @ -21,10 +21,9 @@ | |||
| 	 */ | ||||
| 
 | ||||
| 	.macro addruart, rp, rv, tmp | ||||
| 		mov	\rp, #0x10000000 | ||||
| 		ldr	\rp, [\rp, #0x0] | ||||
| 		and	\rp, \rp, #0xf00000 | ||||
| 		teq	\rp, #0x500000		@@ EXYNOS5
 | ||||
| 		mrc	p15, 0, \tmp, c0, c0, 0 | ||||
| 		and	\tmp, \tmp, #0xf0 | ||||
| 		teq	\tmp, #0xf0		@@ A15
 | ||||
| 		ldreq	\rp, =EXYNOS5_PA_UART | ||||
| 		movne	\rp, #EXYNOS4_PA_UART	@@ EXYNOS4
 | ||||
| 		ldr	\rv, =S3C_VA_UART | ||||
|  |  | |||
|  | @ -212,6 +212,8 @@ | |||
| #define IRQ_MFC				EXYNOS4_IRQ_MFC | ||||
| #define IRQ_SDO				EXYNOS4_IRQ_SDO | ||||
| 
 | ||||
| #define IRQ_I2S0			EXYNOS4_IRQ_I2S0 | ||||
| 
 | ||||
| #define IRQ_ADC				EXYNOS4_IRQ_ADC0 | ||||
| #define IRQ_TC				EXYNOS4_IRQ_PEN0 | ||||
| 
 | ||||
|  |  | |||
|  | @ -89,6 +89,10 @@ | |||
| #define EXYNOS4_PA_MDMA1		0x12840000 | ||||
| #define EXYNOS4_PA_PDMA0		0x12680000 | ||||
| #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_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