mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 16:54:21 +00:00 
			
		
		
		
	Merge 3.3-rc2 into the driver-core-next branch.
This was done to resolve a merge and build problem with the drivers/acpi/processor_driver.c file. Reported-by: Stephen Rothwell <sfr@canb.auug.org.au> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
		
						commit
						bd1d462e13
					
				
					 586 changed files with 5486 additions and 8306 deletions
				
			
		|  | @ -50,7 +50,9 @@ | |||
| 
 | ||||
|      <sect1><title>Delaying, scheduling, and timer routines</title> | ||||
| !Iinclude/linux/sched.h | ||||
| !Ekernel/sched.c | ||||
| !Ekernel/sched/core.c | ||||
| !Ikernel/sched/cpupri.c | ||||
| !Ikernel/sched/fair.c | ||||
| !Iinclude/linux/completion.h | ||||
| !Ekernel/timer.c | ||||
|      </sect1> | ||||
|  | @ -216,7 +218,6 @@ X!Isound/sound_firmware.c | |||
| 
 | ||||
|   <chapter id="uart16x50"> | ||||
|      <title>16x50 UART Driver</title> | ||||
| !Iinclude/linux/serial_core.h | ||||
| !Edrivers/tty/serial/serial_core.c | ||||
| !Edrivers/tty/serial/8250.c | ||||
|   </chapter> | ||||
|  |  | |||
|  | @ -317,7 +317,7 @@ CPU B:  spin_unlock_irqrestore(&dev_lock, flags) | |||
|   <chapter id="pubfunctions"> | ||||
|      <title>Public Functions Provided</title> | ||||
| !Iarch/x86/include/asm/io.h | ||||
| !Elib/iomap.c | ||||
| !Elib/pci_iomap.c | ||||
|   </chapter> | ||||
| 
 | ||||
| </book> | ||||
|  |  | |||
|  | @ -233,6 +233,10 @@ certainly invest a bit more effort into libata core layer). | |||
|   6. List of managed interfaces | ||||
|   ----------------------------- | ||||
| 
 | ||||
| MEM | ||||
|   devm_kzalloc() | ||||
|   devm_kfree() | ||||
| 
 | ||||
| IO region | ||||
|   devm_request_region() | ||||
|   devm_request_mem_region() | ||||
|  |  | |||
|  | @ -510,3 +510,17 @@ Why:	The pci_scan_bus_parented() interface creates a new root bus.  The | |||
| 	convert to using pci_scan_root_bus() so they can supply a list of | ||||
| 	bus resources when the bus is created. | ||||
| Who:	Bjorn Helgaas <bhelgaas@google.com> | ||||
| 
 | ||||
| ---------------------------- | ||||
| 
 | ||||
| What:	The CAP9 SoC family will be removed | ||||
| When:	3.4 | ||||
| Files:	arch/arm/mach-at91/at91cap9.c | ||||
| 	arch/arm/mach-at91/at91cap9_devices.c | ||||
| 	arch/arm/mach-at91/include/mach/at91cap9.h | ||||
| 	arch/arm/mach-at91/include/mach/at91cap9_matrix.h | ||||
| 	arch/arm/mach-at91/include/mach/at91cap9_ddrsdr.h | ||||
| 	arch/arm/mach-at91/board-cap9adk.c | ||||
| Why:	The code is not actively maintained and platforms are now hard to find. | ||||
| Who:	Nicolas Ferre <nicolas.ferre@atmel.com> | ||||
| 	Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> | ||||
|  |  | |||
|  | @ -857,42 +857,41 @@ case), we define a mapping like this: | |||
| 
 | ||||
| ... | ||||
| { | ||||
| 	.name "2bit" | ||||
| 	.name = "2bit" | ||||
| 	.ctrl_dev_name = "pinctrl-foo", | ||||
| 	.function = "mmc0", | ||||
| 	.group = "mmc0_1_grp", | ||||
| 	.dev_name = "foo-mmc.0", | ||||
| }, | ||||
| { | ||||
| 	.name "4bit" | ||||
| 	.name = "4bit" | ||||
| 	.ctrl_dev_name = "pinctrl-foo", | ||||
| 	.function = "mmc0", | ||||
| 	.group = "mmc0_1_grp", | ||||
| 	.dev_name = "foo-mmc.0", | ||||
| }, | ||||
| { | ||||
| 	.name "4bit" | ||||
| 	.name = "4bit" | ||||
| 	.ctrl_dev_name = "pinctrl-foo", | ||||
| 	.function = "mmc0", | ||||
| 	.group = "mmc0_2_grp", | ||||
| 	.dev_name = "foo-mmc.0", | ||||
| }, | ||||
| { | ||||
| 	.name "8bit" | ||||
| 	.name = "8bit" | ||||
| 	.ctrl_dev_name = "pinctrl-foo", | ||||
| 	.function = "mmc0", | ||||
| 	.group = "mmc0_1_grp", | ||||
| 	.dev_name = "foo-mmc.0", | ||||
| }, | ||||
| { | ||||
| 	.name "8bit" | ||||
| 	.name = "8bit" | ||||
| 	.ctrl_dev_name = "pinctrl-foo", | ||||
| 	.function = "mmc0", | ||||
| 	.group = "mmc0_2_grp", | ||||
| 	.dev_name = "foo-mmc.0", | ||||
| }, | ||||
| { | ||||
| 	.name "8bit" | ||||
| 	.name = "8bit" | ||||
| 	.ctrl_dev_name = "pinctrl-foo", | ||||
| 	.function = "mmc0", | ||||
| 	.group = "mmc0_3_grp", | ||||
|  | @ -995,7 +994,7 @@ This is enabled by simply setting the .hog_on_boot field in the map to true, | |||
| like this: | ||||
| 
 | ||||
| { | ||||
| 	.name "POWERMAP" | ||||
| 	.name = "POWERMAP" | ||||
| 	.ctrl_dev_name = "pinctrl-foo", | ||||
| 	.function = "power_func", | ||||
| 	.hog_on_boot = true, | ||||
|  | @ -1025,7 +1024,7 @@ it, disables and releases it, and muxes it in on the pins defined by group B: | |||
| 
 | ||||
| foo_switch() | ||||
| { | ||||
| 	struct pinmux pmx; | ||||
| 	struct pinmux *pmx; | ||||
| 
 | ||||
| 	/* Enable on position A */ | ||||
| 	pmx = pinmux_get(&device, "spi0-pos-A"); | ||||
|  |  | |||
|  | @ -15,7 +15,7 @@ test at least a couple of times in a row for confidence.  [This is necessary, | |||
| because some problems only show up on a second attempt at suspending and | ||||
| resuming the system.]  Moreover, hibernating in the "reboot" and "shutdown" | ||||
| modes causes the PM core to skip some platform-related callbacks which on ACPI | ||||
| systems might be necessary to make hibernation work.  Thus, if you machine fails | ||||
| systems might be necessary to make hibernation work.  Thus, if your machine fails | ||||
| to hibernate or resume in the "reboot" mode, you should try the "platform" mode: | ||||
| 
 | ||||
| # echo platform > /sys/power/disk | ||||
|  |  | |||
|  | @ -120,10 +120,10 @@ So in practice, the 'at all' may become a 'why freeze kernel threads?' and | |||
| freezing user threads I don't find really objectionable." | ||||
| 
 | ||||
| Still, there are kernel threads that may want to be freezable.  For example, if | ||||
| a kernel that belongs to a device driver accesses the device directly, it in | ||||
| principle needs to know when the device is suspended, so that it doesn't try to | ||||
| access it at that time.  However, if the kernel thread is freezable, it will be | ||||
| frozen before the driver's .suspend() callback is executed and it will be | ||||
| a kernel thread that belongs to a device driver accesses the device directly, it | ||||
| in principle needs to know when the device is suspended, so that it doesn't try | ||||
| to access it at that time.  However, if the kernel thread is freezable, it will | ||||
| be frozen before the driver's .suspend() callback is executed and it will be | ||||
| thawed after the driver's .resume() callback has run, so it won't be accessing | ||||
| the device while it's suspended. | ||||
| 
 | ||||
|  |  | |||
|  | @ -25,7 +25,8 @@ Procedure for submitting patches to the -stable tree: | |||
| 
 | ||||
|  - Send the patch, after verifying that it follows the above rules, to | ||||
|    stable@vger.kernel.org.  You must note the upstream commit ID in the | ||||
|    changelog of your submission. | ||||
|    changelog of your submission, as well as the kernel version you wish | ||||
|    it to be applied to. | ||||
|  - To have the patch automatically included in the stable tree, add the tag | ||||
|      Cc: stable@vger.kernel.org | ||||
|    in the sign-off area. Once the patch is merged it will be applied to | ||||
|  |  | |||
|  | @ -284,7 +284,7 @@ method, the sys I/F structure will be built like this: | |||
| The framework includes a simple notification mechanism, in the form of a | ||||
| netlink event. Netlink socket initialization is done during the _init_ | ||||
| of the framework. Drivers which intend to use the notification mechanism | ||||
| just need to call generate_netlink_event() with two arguments viz | ||||
| just need to call thermal_generate_netlink_event() with two arguments viz | ||||
| (originator, event). Typically the originator will be an integer assigned | ||||
| to a thermal_zone_device when it registers itself with the framework. The | ||||
| event will be one of:{THERMAL_AUX0, THERMAL_AUX1, THERMAL_CRITICAL, | ||||
|  |  | |||
|  | @ -4,8 +4,6 @@ Virtualization support in the Linux kernel. | |||
| 	- this file. | ||||
| kvm/ | ||||
| 	- Kernel Virtual Machine.  See also http://linux-kvm.org | ||||
| lguest/ | ||||
| 	- Extremely simple hypervisor for experimental/educational use. | ||||
| uml/ | ||||
| 	- User Mode Linux, builds/runs Linux kernel as a userspace program. | ||||
| virtio.txt | ||||
|  |  | |||
							
								
								
									
										27
									
								
								MAINTAINERS
									
										
									
									
									
								
							
							
						
						
									
										27
									
								
								MAINTAINERS
									
										
									
									
									
								
							|  | @ -2246,6 +2246,17 @@ T:	git git://git.kernel.org/pub/scm/linux/kernel/git/teigland/dlm.git | |||
| S:	Supported | ||||
| F:	fs/dlm/ | ||||
| 
 | ||||
| DMA BUFFER SHARING FRAMEWORK | ||||
| M:	Sumit Semwal <sumit.semwal@linaro.org> | ||||
| S:	Maintained | ||||
| L:	linux-media@vger.kernel.org | ||||
| L:	dri-devel@lists.freedesktop.org | ||||
| L:	linaro-mm-sig@lists.linaro.org | ||||
| F:	drivers/base/dma-buf* | ||||
| F:	include/linux/dma-buf* | ||||
| F:	Documentation/dma-buf-sharing.txt | ||||
| T:	git git://git.linaro.org/people/sumitsemwal/linux-dma-buf.git | ||||
| 
 | ||||
| DMA GENERIC OFFLOAD ENGINE SUBSYSTEM | ||||
| M:	Vinod Koul <vinod.koul@intel.com> | ||||
| M:	Dan Williams <dan.j.williams@intel.com> | ||||
|  | @ -2339,6 +2350,9 @@ F:	include/drm/i915* | |||
| 
 | ||||
| DRM DRIVERS FOR EXYNOS | ||||
| M:	Inki Dae <inki.dae@samsung.com> | ||||
| M:	Joonyoung Shim <jy0922.shim@samsung.com> | ||||
| M:	Seung-Woo Kim <sw0312.kim@samsung.com> | ||||
| M:	Kyungmin Park <kyungmin.park@samsung.com> | ||||
| L:	dri-devel@lists.freedesktop.org | ||||
| S:	Supported | ||||
| F:	drivers/gpu/drm/exynos | ||||
|  | @ -2391,7 +2405,7 @@ F:	net/bridge/netfilter/ebt*.c | |||
| 
 | ||||
| ECRYPT FILE SYSTEM | ||||
| M:	Tyler Hicks <tyhicks@canonical.com> | ||||
| M:	Dustin Kirkland <kirkland@canonical.com> | ||||
| M:	Dustin Kirkland <dustin.kirkland@gazzang.com> | ||||
| L:	ecryptfs@vger.kernel.org | ||||
| W:	https://launchpad.net/ecryptfs | ||||
| S:	Supported | ||||
|  | @ -4126,6 +4140,7 @@ F:	fs/partitions/ldm.* | |||
| 
 | ||||
| LogFS | ||||
| M:	Joern Engel <joern@logfs.org> | ||||
| M:	Prasad Joshi <prasadjoshi.linux@gmail.com> | ||||
| L:	logfs@logfs.org | ||||
| W:	logfs.org | ||||
| S:	Maintained | ||||
|  | @ -4267,13 +4282,6 @@ S:	Orphan | |||
| F:	drivers/video/matrox/matroxfb_* | ||||
| F:	include/linux/matroxfb.h | ||||
| 
 | ||||
| MAX1668 TEMPERATURE SENSOR DRIVER | ||||
| M:	"David George" <david.george@ska.ac.za> | ||||
| L:	lm-sensors@lm-sensors.org | ||||
| S:	Maintained | ||||
| F:	Documentation/hwmon/max1668 | ||||
| F:	drivers/hwmon/max1668.c | ||||
| 
 | ||||
| MAX6650 HARDWARE MONITOR AND FAN CONTROLLER DRIVER | ||||
| M:	"Hans J. Koch" <hjk@hansjkoch.de> | ||||
| L:	lm-sensors@lm-sensors.org | ||||
|  | @ -6664,7 +6672,7 @@ TTY LAYER | |||
| M:	Greg Kroah-Hartman <gregkh@suse.de> | ||||
| S:	Maintained | ||||
| T:	git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty-2.6.git | ||||
| F:	drivers/tty/* | ||||
| F:	drivers/tty/ | ||||
| F:	drivers/tty/serial/serial_core.c | ||||
| F:	include/linux/serial_core.h | ||||
| F:	include/linux/serial.h | ||||
|  | @ -7357,6 +7365,7 @@ S:	Supported | |||
| F:	Documentation/hwmon/wm83?? | ||||
| F:	arch/arm/mach-s3c64xx/mach-crag6410* | ||||
| F:	drivers/leds/leds-wm83*.c | ||||
| F:	drivers/hwmon/wm83??-hwmon.c | ||||
| F:	drivers/input/misc/wm831x-on.c | ||||
| F:	drivers/input/touchscreen/wm831x-ts.c | ||||
| F:	drivers/input/touchscreen/wm97*.c | ||||
|  |  | |||
							
								
								
									
										2
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
										
									
									
									
								
							|  | @ -1,7 +1,7 @@ | |||
| VERSION = 3 | ||||
| PATCHLEVEL = 3 | ||||
| SUBLEVEL = 0 | ||||
| EXTRAVERSION = -rc1 | ||||
| EXTRAVERSION = -rc2 | ||||
| NAME = Saber-toothed Squirrel | ||||
| 
 | ||||
| # *DOCUMENTATION*
 | ||||
|  |  | |||
|  | @ -754,7 +754,7 @@ config ARCH_SA1100 | |||
| 	select ARCH_HAS_CPUFREQ | ||||
| 	select CPU_FREQ | ||||
| 	select GENERIC_CLOCKEVENTS | ||||
| 	select CLKDEV_LOOKUP | ||||
| 	select HAVE_CLK | ||||
| 	select HAVE_SCHED_CLOCK | ||||
| 	select TICK_ONESHOT | ||||
| 	select ARCH_REQUIRE_GPIOLIB | ||||
|  | @ -825,7 +825,6 @@ config ARCH_S5PC100 | |||
| 	select HAVE_CLK | ||||
| 	select CLKDEV_LOOKUP | ||||
| 	select CPU_V7 | ||||
| 	select ARM_L1_CACHE_SHIFT_6 | ||||
| 	select ARCH_USES_GETTIMEOFFSET | ||||
| 	select HAVE_S3C2410_I2C if I2C | ||||
| 	select HAVE_S3C_RTC if RTC_CLASS | ||||
|  | @ -842,7 +841,6 @@ config ARCH_S5PV210 | |||
| 	select HAVE_CLK | ||||
| 	select CLKDEV_LOOKUP | ||||
| 	select CLKSRC_MMIO | ||||
| 	select ARM_L1_CACHE_SHIFT_6 | ||||
| 	select ARCH_HAS_CPUFREQ | ||||
| 	select GENERIC_CLOCKEVENTS | ||||
| 	select HAVE_SCHED_CLOCK | ||||
|  |  | |||
|  | @ -160,7 +160,6 @@ machine-$(CONFIG_ARCH_MSM)		:= msm | |||
| machine-$(CONFIG_ARCH_MV78XX0)		:= mv78xx0 | ||||
| machine-$(CONFIG_ARCH_IMX_V4_V5)	:= imx | ||||
| machine-$(CONFIG_ARCH_IMX_V6_V7)	:= imx | ||||
| machine-$(CONFIG_ARCH_MX5)		:= mx5 | ||||
| machine-$(CONFIG_ARCH_MXS)		:= mxs | ||||
| machine-$(CONFIG_ARCH_NETX)		:= netx | ||||
| machine-$(CONFIG_ARCH_NOMADIK)		:= nomadik | ||||
|  |  | |||
|  | @ -41,6 +41,7 @@ | |||
| 
 | ||||
| #include <asm/irq.h> | ||||
| #include <asm/exception.h> | ||||
| #include <asm/smp_plat.h> | ||||
| #include <asm/mach/irq.h> | ||||
| #include <asm/hardware/gic.h> | ||||
| 
 | ||||
|  | @ -352,11 +353,7 @@ static void __init gic_dist_init(struct gic_chip_data *gic) | |||
| 	unsigned int gic_irqs = gic->gic_irqs; | ||||
| 	struct irq_domain *domain = &gic->domain; | ||||
| 	void __iomem *base = gic_data_dist_base(gic); | ||||
| 	u32 cpu = 0; | ||||
| 
 | ||||
| #ifdef CONFIG_SMP | ||||
| 	cpu = cpu_logical_map(smp_processor_id()); | ||||
| #endif | ||||
| 	u32 cpu = cpu_logical_map(smp_processor_id()); | ||||
| 
 | ||||
| 	cpumask = 1 << cpu; | ||||
| 	cpumask |= cpumask << 8; | ||||
|  |  | |||
|  | @ -3,6 +3,7 @@ CONFIG_EXPERIMENTAL=y | |||
| CONFIG_KERNEL_LZO=y | ||||
| CONFIG_SYSVIPC=y | ||||
| CONFIG_LOG_BUF_SHIFT=18 | ||||
| CONFIG_CGROUPS=y | ||||
| CONFIG_RELAY=y | ||||
| CONFIG_EXPERT=y | ||||
| # CONFIG_SLUB_DEBUG is not set | ||||
|  | @ -14,20 +15,31 @@ CONFIG_MODULE_SRCVERSION_ALL=y | |||
| # CONFIG_LBDAF is not set | ||||
| # CONFIG_BLK_DEV_BSG is not set | ||||
| CONFIG_ARCH_MXC=y | ||||
| CONFIG_ARCH_MX5=y | ||||
| CONFIG_MACH_MX51_BABBAGE=y | ||||
| CONFIG_MACH_MX31LILLY=y | ||||
| CONFIG_MACH_MX31LITE=y | ||||
| CONFIG_MACH_PCM037=y | ||||
| CONFIG_MACH_PCM037_EET=y | ||||
| CONFIG_MACH_MX31_3DS=y | ||||
| CONFIG_MACH_MX31MOBOARD=y | ||||
| CONFIG_MACH_QONG=y | ||||
| CONFIG_MACH_ARMADILLO5X0=y | ||||
| CONFIG_MACH_KZM_ARM11_01=y | ||||
| CONFIG_MACH_PCM043=y | ||||
| CONFIG_MACH_MX35_3DS=y | ||||
| CONFIG_MACH_EUKREA_CPUIMX35=y | ||||
| CONFIG_MACH_VPR200=y | ||||
| CONFIG_MACH_IMX51_DT=y | ||||
| CONFIG_MACH_MX51_3DS=y | ||||
| CONFIG_MACH_EUKREA_CPUIMX51=y | ||||
| CONFIG_MACH_EUKREA_CPUIMX51SD=y | ||||
| CONFIG_MACH_MX51_EFIKAMX=y | ||||
| CONFIG_MACH_MX51_EFIKASB=y | ||||
| CONFIG_MACH_MX53_EVK=y | ||||
| CONFIG_MACH_MX53_SMD=y | ||||
| CONFIG_MACH_MX53_LOCO=y | ||||
| CONFIG_MACH_MX53_ARD=y | ||||
| CONFIG_MACH_IMX53_DT=y | ||||
| CONFIG_SOC_IMX6Q=y | ||||
| CONFIG_MXC_PWM=y | ||||
| CONFIG_NO_HZ=y | ||||
| CONFIG_HIGH_RES_TIMERS=y | ||||
| CONFIG_SMP=y | ||||
| CONFIG_VMSPLIT_2G=y | ||||
| CONFIG_PREEMPT_VOLUNTARY=y | ||||
| CONFIG_AEABI=y | ||||
|  | @ -49,7 +61,7 @@ CONFIG_IP_PNP_DHCP=y | |||
| # CONFIG_INET_XFRM_MODE_TUNNEL is not set | ||||
| # CONFIG_INET_XFRM_MODE_BEET is not set | ||||
| # CONFIG_INET_LRO is not set | ||||
| # CONFIG_IPV6 is not set | ||||
| CONFIG_IPV6=y | ||||
| # CONFIG_WIRELESS is not set | ||||
| CONFIG_DEVTMPFS=y | ||||
| CONFIG_DEVTMPFS_MOUNT=y | ||||
|  | @ -68,24 +80,20 @@ CONFIG_SCSI_SCAN_ASYNC=y | |||
| CONFIG_ATA=y | ||||
| CONFIG_PATA_IMX=y | ||||
| CONFIG_NETDEVICES=y | ||||
| CONFIG_MII=m | ||||
| CONFIG_MARVELL_PHY=y | ||||
| CONFIG_DAVICOM_PHY=y | ||||
| CONFIG_QSEMI_PHY=y | ||||
| CONFIG_LXT_PHY=y | ||||
| CONFIG_CICADA_PHY=y | ||||
| CONFIG_VITESSE_PHY=y | ||||
| CONFIG_SMSC_PHY=y | ||||
| CONFIG_BROADCOM_PHY=y | ||||
| CONFIG_ICPLUS_PHY=y | ||||
| CONFIG_REALTEK_PHY=y | ||||
| CONFIG_NATIONAL_PHY=y | ||||
| CONFIG_STE10XP=y | ||||
| CONFIG_LSI_ET1011C_PHY=y | ||||
| CONFIG_MICREL_PHY=y | ||||
| CONFIG_NET_ETHERNET=y | ||||
| # CONFIG_NETDEV_1000 is not set | ||||
| # CONFIG_NETDEV_10000 is not set | ||||
| # CONFIG_NET_VENDOR_BROADCOM is not set | ||||
| # CONFIG_NET_VENDOR_CHELSIO is not set | ||||
| # CONFIG_NET_VENDOR_FARADAY is not set | ||||
| CONFIG_FEC=y | ||||
| # CONFIG_NET_VENDOR_INTEL is not set | ||||
| # CONFIG_NET_VENDOR_MARVELL is not set | ||||
| # CONFIG_NET_VENDOR_MICREL is not set | ||||
| # CONFIG_NET_VENDOR_MICROCHIP is not set | ||||
| # CONFIG_NET_VENDOR_NATSEMI is not set | ||||
| # CONFIG_NET_VENDOR_SEEQ is not set | ||||
| CONFIG_SMC91X=y | ||||
| CONFIG_SMC911X=y | ||||
| CONFIG_SMSC911X=y | ||||
| # CONFIG_NET_VENDOR_STMICRO is not set | ||||
| # CONFIG_WLAN is not set | ||||
| # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | ||||
| CONFIG_INPUT_EVDEV=y | ||||
|  | @ -124,7 +132,6 @@ CONFIG_USB_EHCI_HCD=y | |||
| CONFIG_USB_EHCI_MXC=y | ||||
| CONFIG_USB_STORAGE=y | ||||
| CONFIG_MMC=y | ||||
| CONFIG_MMC_BLOCK=m | ||||
| CONFIG_MMC_SDHCI=y | ||||
| CONFIG_MMC_SDHCI_PLTFM=y | ||||
| CONFIG_MMC_SDHCI_ESDHC_IMX=y | ||||
|  | @ -133,6 +140,8 @@ CONFIG_LEDS_CLASS=y | |||
| CONFIG_RTC_CLASS=y | ||||
| CONFIG_RTC_INTF_DEV_UIE_EMUL=y | ||||
| CONFIG_RTC_MXC=y | ||||
| CONFIG_DMADEVICES=y | ||||
| CONFIG_IMX_SDMA=y | ||||
| CONFIG_EXT2_FS=y | ||||
| CONFIG_EXT2_FS_XATTR=y | ||||
| CONFIG_EXT2_FS_POSIX_ACL=y | ||||
|  | @ -1,144 +0,0 @@ | |||
| CONFIG_EXPERIMENTAL=y | ||||
| CONFIG_SYSVIPC=y | ||||
| CONFIG_IKCONFIG=y | ||||
| CONFIG_IKCONFIG_PROC=y | ||||
| CONFIG_LOG_BUF_SHIFT=14 | ||||
| CONFIG_EXPERT=y | ||||
| CONFIG_SLAB=y | ||||
| CONFIG_MODULES=y | ||||
| CONFIG_MODULE_UNLOAD=y | ||||
| CONFIG_MODULE_FORCE_UNLOAD=y | ||||
| CONFIG_MODVERSIONS=y | ||||
| # CONFIG_BLK_DEV_BSG is not set | ||||
| CONFIG_ARCH_MXC=y | ||||
| CONFIG_MACH_MX31ADS_WM1133_EV1=y | ||||
| CONFIG_MACH_MX31LILLY=y | ||||
| CONFIG_MACH_MX31LITE=y | ||||
| CONFIG_MACH_PCM037=y | ||||
| CONFIG_MACH_PCM037_EET=y | ||||
| CONFIG_MACH_MX31_3DS=y | ||||
| CONFIG_MACH_MX31MOBOARD=y | ||||
| CONFIG_MACH_QONG=y | ||||
| CONFIG_MACH_ARMADILLO5X0=y | ||||
| CONFIG_MACH_KZM_ARM11_01=y | ||||
| CONFIG_MACH_PCM043=y | ||||
| CONFIG_MACH_MX35_3DS=y | ||||
| CONFIG_MACH_EUKREA_CPUIMX35=y | ||||
| CONFIG_MXC_IRQ_PRIOR=y | ||||
| CONFIG_MXC_PWM=y | ||||
| CONFIG_ARM_ERRATA_411920=y | ||||
| CONFIG_NO_HZ=y | ||||
| CONFIG_HIGH_RES_TIMERS=y | ||||
| CONFIG_PREEMPT=y | ||||
| CONFIG_AEABI=y | ||||
| CONFIG_ZBOOT_ROM_TEXT=0x0 | ||||
| CONFIG_ZBOOT_ROM_BSS=0x0 | ||||
| CONFIG_CMDLINE="noinitrd console=ttymxc0,115200 root=/dev/mtdblock2 rw ip=off" | ||||
| CONFIG_VFP=y | ||||
| CONFIG_PM_DEBUG=y | ||||
| CONFIG_NET=y | ||||
| CONFIG_PACKET=y | ||||
| CONFIG_UNIX=y | ||||
| CONFIG_INET=y | ||||
| CONFIG_IP_PNP=y | ||||
| CONFIG_IP_PNP_DHCP=y | ||||
| # CONFIG_INET_XFRM_MODE_TRANSPORT is not set | ||||
| # CONFIG_INET_XFRM_MODE_TUNNEL is not set | ||||
| # CONFIG_INET_XFRM_MODE_BEET is not set | ||||
| # CONFIG_INET_LRO is not set | ||||
| # CONFIG_INET_DIAG is not set | ||||
| # CONFIG_IPV6 is not set | ||||
| CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||||
| CONFIG_FW_LOADER=m | ||||
| CONFIG_MTD=y | ||||
| CONFIG_MTD_CMDLINE_PARTS=y | ||||
| CONFIG_MTD_CHAR=y | ||||
| CONFIG_MTD_BLOCK=y | ||||
| CONFIG_MTD_CFI=y | ||||
| CONFIG_MTD_PHYSMAP=y | ||||
| CONFIG_MTD_NAND=y | ||||
| CONFIG_MTD_NAND_MXC=y | ||||
| CONFIG_MTD_UBI=y | ||||
| # CONFIG_BLK_DEV is not set | ||||
| CONFIG_MISC_DEVICES=y | ||||
| CONFIG_EEPROM_AT24=y | ||||
| CONFIG_NETDEVICES=y | ||||
| CONFIG_SMSC_PHY=y | ||||
| CONFIG_NET_ETHERNET=y | ||||
| CONFIG_SMSC911X=y | ||||
| CONFIG_DNET=y | ||||
| # CONFIG_NETDEV_1000 is not set | ||||
| # CONFIG_NETDEV_10000 is not set | ||||
| # CONFIG_INPUT_MOUSEDEV is not set | ||||
| # CONFIG_KEYBOARD_ATKBD is not set | ||||
| CONFIG_KEYBOARD_IMX=y | ||||
| # CONFIG_INPUT_MOUSE is not set | ||||
| # CONFIG_SERIO is not set | ||||
| # CONFIG_VT is not set | ||||
| # CONFIG_LEGACY_PTYS is not set | ||||
| CONFIG_SERIAL_8250=m | ||||
| CONFIG_SERIAL_8250_EXTENDED=y | ||||
| CONFIG_SERIAL_8250_SHARE_IRQ=y | ||||
| CONFIG_SERIAL_IMX=y | ||||
| CONFIG_SERIAL_IMX_CONSOLE=y | ||||
| # CONFIG_HW_RANDOM is not set | ||||
| CONFIG_I2C=y | ||||
| CONFIG_I2C_CHARDEV=y | ||||
| CONFIG_I2C_IMX=y | ||||
| CONFIG_SPI=y | ||||
| CONFIG_W1=y | ||||
| CONFIG_W1_MASTER_MXC=y | ||||
| CONFIG_W1_SLAVE_THERM=y | ||||
| # CONFIG_HWMON is not set | ||||
| CONFIG_WATCHDOG=y | ||||
| CONFIG_IMX2_WDT=y | ||||
| CONFIG_MFD_WM8350_I2C=y | ||||
| CONFIG_REGULATOR=y | ||||
| CONFIG_REGULATOR_WM8350=y | ||||
| CONFIG_MEDIA_SUPPORT=y | ||||
| CONFIG_VIDEO_DEV=y | ||||
| # CONFIG_RC_CORE is not set | ||||
| # CONFIG_MEDIA_TUNER_CUSTOMISE is not set | ||||
| CONFIG_SOC_CAMERA=y | ||||
| CONFIG_SOC_CAMERA_MT9M001=y | ||||
| CONFIG_SOC_CAMERA_MT9M111=y | ||||
| CONFIG_SOC_CAMERA_MT9T031=y | ||||
| CONFIG_SOC_CAMERA_MT9V022=y | ||||
| CONFIG_SOC_CAMERA_TW9910=y | ||||
| CONFIG_SOC_CAMERA_OV772X=y | ||||
| CONFIG_VIDEO_MX3=y | ||||
| # CONFIG_RADIO_ADAPTERS is not set | ||||
| CONFIG_FB=y | ||||
| CONFIG_SOUND=y | ||||
| CONFIG_SND=y | ||||
| # CONFIG_SND_ARM is not set | ||||
| # CONFIG_SND_SPI is not set | ||||
| CONFIG_SND_SOC=y | ||||
| CONFIG_SND_IMX_SOC=y | ||||
| CONFIG_SND_MXC_SOC_WM1133_EV1=y | ||||
| CONFIG_SND_SOC_PHYCORE_AC97=y | ||||
| CONFIG_SND_SOC_EUKREA_TLV320=y | ||||
| CONFIG_USB=y | ||||
| CONFIG_USB_EHCI_HCD=y | ||||
| CONFIG_USB_EHCI_MXC=y | ||||
| CONFIG_USB_GADGET=m | ||||
| CONFIG_USB_FSL_USB2=m | ||||
| CONFIG_USB_G_SERIAL=m | ||||
| CONFIG_USB_ULPI=y | ||||
| CONFIG_MMC=y | ||||
| CONFIG_MMC_MXC=y | ||||
| CONFIG_RTC_CLASS=y | ||||
| CONFIG_RTC_MXC=y | ||||
| CONFIG_DMADEVICES=y | ||||
| # CONFIG_DNOTIFY is not set | ||||
| CONFIG_TMPFS=y | ||||
| CONFIG_JFFS2_FS=y | ||||
| CONFIG_UBIFS_FS=y | ||||
| CONFIG_NFS_FS=y | ||||
| CONFIG_NFS_V3=y | ||||
| CONFIG_NFS_V4=y | ||||
| CONFIG_ROOT_NFS=y | ||||
| # CONFIG_ENABLE_WARN_DEPRECATED is not set | ||||
| # CONFIG_ENABLE_MUST_CHECK is not set | ||||
| CONFIG_SYSCTL_SYSCALL_CHECK=y | ||||
| # CONFIG_CRYPTO_ANSI_CPRNG is not set | ||||
|  | @ -237,7 +237,7 @@ | |||
|  */ | ||||
| #ifdef CONFIG_THUMB2_KERNEL | ||||
| 
 | ||||
| 	.macro	usraccoff, instr, reg, ptr, inc, off, cond, abort, t=T() | ||||
| 	.macro	usraccoff, instr, reg, ptr, inc, off, cond, abort, t=TUSER() | ||||
| 9999: | ||||
| 	.if	\inc == 1 | ||||
| 	\instr\cond\()b\()\t\().w \reg, [\ptr, #\off] | ||||
|  | @ -277,7 +277,7 @@ | |||
| 
 | ||||
| #else	/* !CONFIG_THUMB2_KERNEL */ | ||||
| 
 | ||||
| 	.macro	usracc, instr, reg, ptr, inc, cond, rept, abort, t=T() | ||||
| 	.macro	usracc, instr, reg, ptr, inc, cond, rept, abort, t=TUSER() | ||||
| 	.rept	\rept | ||||
| 9999: | ||||
| 	.if	\inc == 1 | ||||
|  |  | |||
|  | @ -83,9 +83,9 @@ | |||
|  * instructions (inline assembly) | ||||
|  */ | ||||
| #ifdef CONFIG_CPU_USE_DOMAINS | ||||
| #define T(instr)	#instr "t" | ||||
| #define TUSER(instr)	#instr "t" | ||||
| #else | ||||
| #define T(instr)	#instr | ||||
| #define TUSER(instr)	#instr | ||||
| #endif | ||||
| 
 | ||||
| #else /* __ASSEMBLY__ */ | ||||
|  | @ -95,9 +95,9 @@ | |||
|  * instructions | ||||
|  */ | ||||
| #ifdef CONFIG_CPU_USE_DOMAINS | ||||
| #define T(instr)	instr ## t | ||||
| #define TUSER(instr)	instr ## t | ||||
| #else | ||||
| #define T(instr)	instr | ||||
| #define TUSER(instr)	instr | ||||
| #endif | ||||
| 
 | ||||
| #endif /* __ASSEMBLY__ */ | ||||
|  |  | |||
|  | @ -75,9 +75,9 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr, | |||
| 
 | ||||
| #define __futex_atomic_op(insn, ret, oldval, tmp, uaddr, oparg)	\ | ||||
| 	__asm__ __volatile__(					\ | ||||
| 	"1:	" T(ldr) "	%1, [%3]\n"			\ | ||||
| 	"1:	" TUSER(ldr) "	%1, [%3]\n"			\ | ||||
| 	"	" insn "\n"					\ | ||||
| 	"2:	" T(str) "	%0, [%3]\n"			\ | ||||
| 	"2:	" TUSER(str) "	%0, [%3]\n"			\ | ||||
| 	"	mov	%0, #0\n"				\ | ||||
| 	__futex_atomic_ex_table("%5")				\ | ||||
| 	: "=&r" (ret), "=&r" (oldval), "=&r" (tmp)		\ | ||||
|  | @ -95,10 +95,10 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr, | |||
| 		return -EFAULT; | ||||
| 
 | ||||
| 	__asm__ __volatile__("@futex_atomic_cmpxchg_inatomic\n" | ||||
| 	"1:	" T(ldr) "	%1, [%4]\n" | ||||
| 	"1:	" TUSER(ldr) "	%1, [%4]\n" | ||||
| 	"	teq	%1, %2\n" | ||||
| 	"	it	eq	@ explicit IT needed for the 2b label\n" | ||||
| 	"2:	" T(streq) "	%3, [%4]\n" | ||||
| 	"2:	" TUSER(streq) "	%3, [%4]\n" | ||||
| 	__futex_atomic_ex_table("%5") | ||||
| 	: "+r" (ret), "=&r" (val) | ||||
| 	: "r" (oldval), "r" (newval), "r" (uaddr), "Ir" (-EFAULT) | ||||
|  |  | |||
|  | @ -70,12 +70,6 @@ extern void platform_secondary_init(unsigned int cpu); | |||
|  */ | ||||
| extern void platform_smp_prepare_cpus(unsigned int); | ||||
| 
 | ||||
| /*
 | ||||
|  * Logical CPU mapping. | ||||
|  */ | ||||
| extern int __cpu_logical_map[NR_CPUS]; | ||||
| #define cpu_logical_map(cpu)	__cpu_logical_map[cpu] | ||||
| 
 | ||||
| /*
 | ||||
|  * Initial data for bringing up a secondary CPU. | ||||
|  */ | ||||
|  |  | |||
|  | @ -43,4 +43,10 @@ static inline int cache_ops_need_broadcast(void) | |||
| } | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * Logical CPU mapping. | ||||
|  */ | ||||
| extern int __cpu_logical_map[]; | ||||
| #define cpu_logical_map(cpu)	__cpu_logical_map[cpu] | ||||
| 
 | ||||
| #endif | ||||
|  |  | |||
|  | @ -227,7 +227,7 @@ do {									\ | |||
| 
 | ||||
| #define __get_user_asm_byte(x,addr,err)				\ | ||||
| 	__asm__ __volatile__(					\ | ||||
| 	"1:	" T(ldrb) "	%1,[%2],#0\n"			\ | ||||
| 	"1:	" TUSER(ldrb) "	%1,[%2],#0\n"			\ | ||||
| 	"2:\n"							\ | ||||
| 	"	.pushsection .fixup,\"ax\"\n"			\ | ||||
| 	"	.align	2\n"					\ | ||||
|  | @ -263,7 +263,7 @@ do {									\ | |||
| 
 | ||||
| #define __get_user_asm_word(x,addr,err)				\ | ||||
| 	__asm__ __volatile__(					\ | ||||
| 	"1:	" T(ldr) "	%1,[%2],#0\n"			\ | ||||
| 	"1:	" TUSER(ldr) "	%1,[%2],#0\n"			\ | ||||
| 	"2:\n"							\ | ||||
| 	"	.pushsection .fixup,\"ax\"\n"			\ | ||||
| 	"	.align	2\n"					\ | ||||
|  | @ -308,7 +308,7 @@ do {									\ | |||
| 
 | ||||
| #define __put_user_asm_byte(x,__pu_addr,err)			\ | ||||
| 	__asm__ __volatile__(					\ | ||||
| 	"1:	" T(strb) "	%1,[%2],#0\n"			\ | ||||
| 	"1:	" TUSER(strb) "	%1,[%2],#0\n"			\ | ||||
| 	"2:\n"							\ | ||||
| 	"	.pushsection .fixup,\"ax\"\n"			\ | ||||
| 	"	.align	2\n"					\ | ||||
|  | @ -341,7 +341,7 @@ do {									\ | |||
| 
 | ||||
| #define __put_user_asm_word(x,__pu_addr,err)			\ | ||||
| 	__asm__ __volatile__(					\ | ||||
| 	"1:	" T(str) "	%1,[%2],#0\n"			\ | ||||
| 	"1:	" TUSER(str) "	%1,[%2],#0\n"			\ | ||||
| 	"2:\n"							\ | ||||
| 	"	.pushsection .fixup,\"ax\"\n"			\ | ||||
| 	"	.align	2\n"					\ | ||||
|  | @ -366,10 +366,10 @@ do {									\ | |||
| 
 | ||||
| #define __put_user_asm_dword(x,__pu_addr,err)			\ | ||||
| 	__asm__ __volatile__(					\ | ||||
|  ARM(	"1:	" T(str) "	" __reg_oper1 ", [%1], #4\n"	)	\ | ||||
|  ARM(	"2:	" T(str) "	" __reg_oper0 ", [%1]\n"	)	\ | ||||
|  THUMB(	"1:	" T(str) "	" __reg_oper1 ", [%1]\n"	)	\ | ||||
|  THUMB(	"2:	" T(str) "	" __reg_oper0 ", [%1, #4]\n"	)	\ | ||||
|  ARM(	"1:	" TUSER(str) "	" __reg_oper1 ", [%1], #4\n"	) \ | ||||
|  ARM(	"2:	" TUSER(str) "	" __reg_oper0 ", [%1]\n"	) \ | ||||
|  THUMB(	"1:	" TUSER(str) "	" __reg_oper1 ", [%1]\n"	) \ | ||||
|  THUMB(	"2:	" TUSER(str) "	" __reg_oper0 ", [%1, #4]\n"	) \ | ||||
| 	"3:\n"							\ | ||||
| 	"	.pushsection .fixup,\"ax\"\n"			\ | ||||
| 	"	.align	2\n"					\ | ||||
|  |  | |||
|  | @ -149,6 +149,11 @@ ENDPROC(ret_from_fork) | |||
| #endif | ||||
| #endif | ||||
| 
 | ||||
| .macro mcount_adjust_addr rd, rn | ||||
| 	bic	\rd, \rn, #1		@ clear the Thumb bit if present
 | ||||
| 	sub	\rd, \rd, #MCOUNT_INSN_SIZE | ||||
| .endm | ||||
| 
 | ||||
| .macro __mcount suffix | ||||
| 	mcount_enter | ||||
| 	ldr	r0, =ftrace_trace_function | ||||
|  | @ -173,8 +178,7 @@ ENDPROC(ret_from_fork) | |||
| 	mcount_exit | ||||
| 
 | ||||
| 1: 	mcount_get_lr	r1			@ lr of instrumented func
 | ||||
| 	mov	r0, lr				@ instrumented function
 | ||||
| 	sub	r0, r0, #MCOUNT_INSN_SIZE | ||||
| 	mcount_adjust_addr	r0, lr		@ instrumented function
 | ||||
| 	adr	lr, BSYM(2f) | ||||
| 	mov	pc, r2 | ||||
| 2:	mcount_exit | ||||
|  | @ -184,8 +188,7 @@ ENDPROC(ret_from_fork) | |||
| 	mcount_enter | ||||
| 
 | ||||
| 	mcount_get_lr	r1			@ lr of instrumented func
 | ||||
| 	mov	r0, lr				@ instrumented function
 | ||||
| 	sub	r0, r0, #MCOUNT_INSN_SIZE | ||||
| 	mcount_adjust_addr	r0, lr		@ instrumented function
 | ||||
| 
 | ||||
| 	.globl ftrace_call\suffix | ||||
| ftrace_call\suffix: | ||||
|  | @ -205,11 +208,11 @@ ftrace_graph_call\suffix: | |||
| #ifdef CONFIG_DYNAMIC_FTRACE | ||||
| 	@ called from __ftrace_caller, saved in mcount_enter
 | ||||
| 	ldr	r1, [sp, #16]		@ instrumented routine (func)
 | ||||
| 	mcount_adjust_addr	r1, r1 | ||||
| #else | ||||
| 	@ called from __mcount, untouched in lr
 | ||||
| 	mov	r1, lr			@ instrumented routine (func)
 | ||||
| 	mcount_adjust_addr	r1, lr	@ instrumented routine (func)
 | ||||
| #endif | ||||
| 	sub	r1, r1, #MCOUNT_INSN_SIZE | ||||
| 	mov	r2, fp			@ frame pointer
 | ||||
| 	bl	prepare_ftrace_return | ||||
| 	mcount_exit | ||||
|  |  | |||
|  | @ -21,7 +21,6 @@ | |||
| #include <linux/init.h> | ||||
| #include <linux/kexec.h> | ||||
| #include <linux/of_fdt.h> | ||||
| #include <linux/crash_dump.h> | ||||
| #include <linux/root_dev.h> | ||||
| #include <linux/cpu.h> | ||||
| #include <linux/interrupt.h> | ||||
|  | @ -160,7 +159,7 @@ static struct resource mem_res[] = { | |||
| 		.flags = IORESOURCE_MEM | ||||
| 	}, | ||||
| 	{ | ||||
| 		.name = "Kernel text", | ||||
| 		.name = "Kernel code", | ||||
| 		.start = 0, | ||||
| 		.end = 0, | ||||
| 		.flags = IORESOURCE_MEM | ||||
|  | @ -427,6 +426,20 @@ void cpu_init(void) | |||
| 	    : "r14"); | ||||
| } | ||||
| 
 | ||||
| int __cpu_logical_map[NR_CPUS]; | ||||
| 
 | ||||
| void __init smp_setup_processor_id(void) | ||||
| { | ||||
| 	int i; | ||||
| 	u32 cpu = is_smp() ? read_cpuid_mpidr() & 0xff : 0; | ||||
| 
 | ||||
| 	cpu_logical_map(0) = cpu; | ||||
| 	for (i = 1; i < NR_CPUS; ++i) | ||||
| 		cpu_logical_map(i) = i == cpu ? 0 : i; | ||||
| 
 | ||||
| 	printk(KERN_INFO "Booting Linux on physical CPU %d\n", cpu); | ||||
| } | ||||
| 
 | ||||
| static void __init setup_processor(void) | ||||
| { | ||||
| 	struct proc_info_list *list; | ||||
|  |  | |||
|  | @ -233,20 +233,6 @@ void __ref cpu_die(void) | |||
| } | ||||
| #endif /* CONFIG_HOTPLUG_CPU */ | ||||
| 
 | ||||
| int __cpu_logical_map[NR_CPUS]; | ||||
| 
 | ||||
| void __init smp_setup_processor_id(void) | ||||
| { | ||||
| 	int i; | ||||
| 	u32 cpu = is_smp() ? read_cpuid_mpidr() & 0xff : 0; | ||||
| 
 | ||||
| 	cpu_logical_map(0) = cpu; | ||||
| 	for (i = 1; i < NR_CPUS; ++i) | ||||
| 		cpu_logical_map(i) = i == cpu ? 0 : i; | ||||
| 
 | ||||
| 	printk(KERN_INFO "Booting Linux on physical CPU %d\n", cpu); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Called by both boot and secondaries to move global data into | ||||
|  * per-processor storage. | ||||
|  | @ -443,9 +429,7 @@ static DEFINE_PER_CPU(struct clock_event_device, percpu_clockevent); | |||
| static void ipi_timer(void) | ||||
| { | ||||
| 	struct clock_event_device *evt = &__get_cpu_var(percpu_clockevent); | ||||
| 	irq_enter(); | ||||
| 	evt->event_handler(evt); | ||||
| 	irq_exit(); | ||||
| } | ||||
| 
 | ||||
| #ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST | ||||
|  | @ -548,7 +532,9 @@ void handle_IPI(int ipinr, struct pt_regs *regs) | |||
| 
 | ||||
| 	switch (ipinr) { | ||||
| 	case IPI_TIMER: | ||||
| 		irq_enter(); | ||||
| 		ipi_timer(); | ||||
| 		irq_exit(); | ||||
| 		break; | ||||
| 
 | ||||
| 	case IPI_RESCHEDULE: | ||||
|  | @ -556,15 +542,21 @@ void handle_IPI(int ipinr, struct pt_regs *regs) | |||
| 		break; | ||||
| 
 | ||||
| 	case IPI_CALL_FUNC: | ||||
| 		irq_enter(); | ||||
| 		generic_smp_call_function_interrupt(); | ||||
| 		irq_exit(); | ||||
| 		break; | ||||
| 
 | ||||
| 	case IPI_CALL_FUNC_SINGLE: | ||||
| 		irq_enter(); | ||||
| 		generic_smp_call_function_single_interrupt(); | ||||
| 		irq_exit(); | ||||
| 		break; | ||||
| 
 | ||||
| 	case IPI_CPU_STOP: | ||||
| 		irq_enter(); | ||||
| 		ipi_cpu_stop(cpu); | ||||
| 		irq_exit(); | ||||
| 		break; | ||||
| 
 | ||||
| 	default: | ||||
|  |  | |||
|  | @ -252,6 +252,8 @@ void __cpuinit twd_timer_setup(struct clock_event_device *clk) | |||
| 	else | ||||
| 		twd_calibrate_rate(); | ||||
| 
 | ||||
| 	__raw_writel(0, twd_base + TWD_TIMER_CONTROL); | ||||
| 
 | ||||
| 	clk->name = "local_timer"; | ||||
| 	clk->features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT | | ||||
| 			CLOCK_EVT_FEAT_C3STOP; | ||||
|  |  | |||
|  | @ -4,6 +4,7 @@ | |||
|  */ | ||||
| 
 | ||||
| #include <asm-generic/vmlinux.lds.h> | ||||
| #include <asm/cache.h> | ||||
| #include <asm/thread_info.h> | ||||
| #include <asm/memory.h> | ||||
| #include <asm/page.h> | ||||
|  | @ -181,7 +182,7 @@ SECTIONS | |||
| 	} | ||||
| #endif | ||||
| 
 | ||||
| 	PERCPU_SECTION(32) | ||||
| 	PERCPU_SECTION(L1_CACHE_BYTES) | ||||
| 
 | ||||
| #ifdef CONFIG_XIP_KERNEL | ||||
| 	__data_loc = ALIGN(4);		/* location in binary */
 | ||||
|  | @ -212,13 +213,13 @@ SECTIONS | |||
| #endif | ||||
| 
 | ||||
| 		NOSAVE_DATA | ||||
| 		CACHELINE_ALIGNED_DATA(32) | ||||
| 		READ_MOSTLY_DATA(32) | ||||
| 		CACHELINE_ALIGNED_DATA(L1_CACHE_BYTES) | ||||
| 		READ_MOSTLY_DATA(L1_CACHE_BYTES) | ||||
| 
 | ||||
| 		/* | ||||
| 		 * The exception fixup table (might need resorting at runtime) | ||||
| 		 */ | ||||
| 		. = ALIGN(32);
 | ||||
| 		. = ALIGN(4);
 | ||||
| 		__start___ex_table = .;
 | ||||
| #ifdef CONFIG_MMU | ||||
| 		*(__ex_table) | ||||
|  |  | |||
|  | @ -31,18 +31,18 @@ | |||
| #include <asm/domain.h> | ||||
| 
 | ||||
| ENTRY(__get_user_1) | ||||
| 1:	T(ldrb)	r2, [r0] | ||||
| 1: TUSER(ldrb)	r2, [r0] | ||||
| 	mov	r0, #0 | ||||
| 	mov	pc, lr | ||||
| ENDPROC(__get_user_1) | ||||
| 
 | ||||
| ENTRY(__get_user_2) | ||||
| #ifdef CONFIG_THUMB2_KERNEL | ||||
| 2:	T(ldrb)	r2, [r0] | ||||
| 3:	T(ldrb)	r3, [r0, #1] | ||||
| 2: TUSER(ldrb)	r2, [r0] | ||||
| 3: TUSER(ldrb)	r3, [r0, #1] | ||||
| #else | ||||
| 2:	T(ldrb)	r2, [r0], #1 | ||||
| 3:	T(ldrb)	r3, [r0] | ||||
| 2: TUSER(ldrb)	r2, [r0], #1 | ||||
| 3: TUSER(ldrb)	r3, [r0] | ||||
| #endif | ||||
| #ifndef __ARMEB__ | ||||
| 	orr	r2, r2, r3, lsl #8 | ||||
|  | @ -54,7 +54,7 @@ ENTRY(__get_user_2) | |||
| ENDPROC(__get_user_2) | ||||
| 
 | ||||
| ENTRY(__get_user_4) | ||||
| 4:	T(ldr)	r2, [r0] | ||||
| 4: TUSER(ldr)	r2, [r0] | ||||
| 	mov	r0, #0 | ||||
| 	mov	pc, lr | ||||
| ENDPROC(__get_user_4) | ||||
|  |  | |||
|  | @ -31,7 +31,7 @@ | |||
| #include <asm/domain.h> | ||||
| 
 | ||||
| ENTRY(__put_user_1) | ||||
| 1:	T(strb)	r2, [r0] | ||||
| 1: TUSER(strb)	r2, [r0] | ||||
| 	mov	r0, #0 | ||||
| 	mov	pc, lr | ||||
| ENDPROC(__put_user_1) | ||||
|  | @ -40,19 +40,19 @@ ENTRY(__put_user_2) | |||
| 	mov	ip, r2, lsr #8 | ||||
| #ifdef CONFIG_THUMB2_KERNEL | ||||
| #ifndef __ARMEB__ | ||||
| 2:	T(strb)	r2, [r0] | ||||
| 3:	T(strb)	ip, [r0, #1] | ||||
| 2: TUSER(strb)	r2, [r0] | ||||
| 3: TUSER(strb)	ip, [r0, #1] | ||||
| #else | ||||
| 2:	T(strb)	ip, [r0] | ||||
| 3:	T(strb)	r2, [r0, #1] | ||||
| 2: TUSER(strb)	ip, [r0] | ||||
| 3: TUSER(strb)	r2, [r0, #1] | ||||
| #endif | ||||
| #else	/* !CONFIG_THUMB2_KERNEL */ | ||||
| #ifndef __ARMEB__ | ||||
| 2:	T(strb)	r2, [r0], #1 | ||||
| 3:	T(strb)	ip, [r0] | ||||
| 2: TUSER(strb)	r2, [r0], #1 | ||||
| 3: TUSER(strb)	ip, [r0] | ||||
| #else | ||||
| 2:	T(strb)	ip, [r0], #1 | ||||
| 3:	T(strb)	r2, [r0] | ||||
| 2: TUSER(strb)	ip, [r0], #1 | ||||
| 3: TUSER(strb)	r2, [r0] | ||||
| #endif | ||||
| #endif	/* CONFIG_THUMB2_KERNEL */ | ||||
| 	mov	r0, #0 | ||||
|  | @ -60,18 +60,18 @@ ENTRY(__put_user_2) | |||
| ENDPROC(__put_user_2) | ||||
| 
 | ||||
| ENTRY(__put_user_4) | ||||
| 4:	T(str)	r2, [r0] | ||||
| 4: TUSER(str)	r2, [r0] | ||||
| 	mov	r0, #0 | ||||
| 	mov	pc, lr | ||||
| ENDPROC(__put_user_4) | ||||
| 
 | ||||
| ENTRY(__put_user_8) | ||||
| #ifdef CONFIG_THUMB2_KERNEL | ||||
| 5:	T(str)	r2, [r0] | ||||
| 6:	T(str)	r3, [r0, #4] | ||||
| 5: TUSER(str)	r2, [r0] | ||||
| 6: TUSER(str)	r3, [r0, #4] | ||||
| #else | ||||
| 5:	T(str)	r2, [r0], #4 | ||||
| 6:	T(str)	r3, [r0] | ||||
| 5: TUSER(str)	r2, [r0], #4 | ||||
| 6: TUSER(str)	r3, [r0] | ||||
| #endif | ||||
| 	mov	r0, #0 | ||||
| 	mov	pc, lr | ||||
|  |  | |||
|  | @ -32,11 +32,11 @@ | |||
| 		rsb	ip, ip, #4 | ||||
| 		cmp	ip, #2 | ||||
| 		ldrb	r3, [r1], #1 | ||||
| USER(		T(strb)	r3, [r0], #1)			@ May fault
 | ||||
| USER(	TUSER(	strb)	r3, [r0], #1)			@ May fault
 | ||||
| 		ldrgeb	r3, [r1], #1 | ||||
| USER(		T(strgeb) r3, [r0], #1)			@ May fault
 | ||||
| USER(	TUSER(	strgeb) r3, [r0], #1)			@ May fault
 | ||||
| 		ldrgtb	r3, [r1], #1 | ||||
| USER(		T(strgtb) r3, [r0], #1)			@ May fault
 | ||||
| USER(	TUSER(	strgtb) r3, [r0], #1)			@ May fault
 | ||||
| 		sub	r2, r2, ip | ||||
| 		b	.Lc2u_dest_aligned | ||||
| 
 | ||||
|  | @ -59,7 +59,7 @@ ENTRY(__copy_to_user) | |||
| 		addmi	ip, r2, #4 | ||||
| 		bmi	.Lc2u_0nowords | ||||
| 		ldr	r3, [r1], #4 | ||||
| USER(		T(str)	r3, [r0], #4)			@ May fault
 | ||||
| USER(	TUSER(	str)	r3, [r0], #4)			@ May fault
 | ||||
| 		mov	ip, r0, lsl #32 - PAGE_SHIFT	@ On each page, use a ld/st??t instruction
 | ||||
| 		rsb	ip, ip, #0 | ||||
| 		movs	ip, ip, lsr #32 - PAGE_SHIFT | ||||
|  | @ -88,18 +88,18 @@ USER(		T(str)	r3, [r0], #4)			@ May fault | |||
| 		stmneia	r0!, {r3 - r4}			@ Shouldnt fault
 | ||||
| 		tst	ip, #4 | ||||
| 		ldrne	r3, [r1], #4 | ||||
| 		T(strne) r3, [r0], #4			@ Shouldnt fault
 | ||||
| 	TUSER(	strne) r3, [r0], #4			@ Shouldnt fault
 | ||||
| 		ands	ip, ip, #3 | ||||
| 		beq	.Lc2u_0fupi | ||||
| .Lc2u_0nowords:	teq	ip, #0 | ||||
| 		beq	.Lc2u_finished | ||||
| .Lc2u_nowords:	cmp	ip, #2 | ||||
| 		ldrb	r3, [r1], #1 | ||||
| USER(		T(strb)	r3, [r0], #1)			@ May fault
 | ||||
| USER(	TUSER(	strb)	r3, [r0], #1)			@ May fault
 | ||||
| 		ldrgeb	r3, [r1], #1 | ||||
| USER(		T(strgeb) r3, [r0], #1)			@ May fault
 | ||||
| USER(	TUSER(	strgeb) r3, [r0], #1)			@ May fault
 | ||||
| 		ldrgtb	r3, [r1], #1 | ||||
| USER(		T(strgtb) r3, [r0], #1)			@ May fault
 | ||||
| USER(	TUSER(	strgtb) r3, [r0], #1)			@ May fault
 | ||||
| 		b	.Lc2u_finished | ||||
| 
 | ||||
| .Lc2u_not_enough: | ||||
|  | @ -120,7 +120,7 @@ USER(		T(strgtb) r3, [r0], #1)			@ May fault | |||
| 		mov	r3, r7, pull #8 | ||||
| 		ldr	r7, [r1], #4 | ||||
| 		orr	r3, r3, r7, push #24 | ||||
| USER(		T(str)	r3, [r0], #4)			@ May fault
 | ||||
| USER(	TUSER(	str)	r3, [r0], #4)			@ May fault
 | ||||
| 		mov	ip, r0, lsl #32 - PAGE_SHIFT | ||||
| 		rsb	ip, ip, #0 | ||||
| 		movs	ip, ip, lsr #32 - PAGE_SHIFT | ||||
|  | @ -155,18 +155,18 @@ USER(		T(str)	r3, [r0], #4)			@ May fault | |||
| 		movne	r3, r7, pull #8 | ||||
| 		ldrne	r7, [r1], #4 | ||||
| 		orrne	r3, r3, r7, push #24 | ||||
| 		T(strne) r3, [r0], #4			@ Shouldnt fault
 | ||||
| 	TUSER(	strne) r3, [r0], #4			@ Shouldnt fault
 | ||||
| 		ands	ip, ip, #3 | ||||
| 		beq	.Lc2u_1fupi | ||||
| .Lc2u_1nowords:	mov	r3, r7, get_byte_1 | ||||
| 		teq	ip, #0 | ||||
| 		beq	.Lc2u_finished | ||||
| 		cmp	ip, #2 | ||||
| USER(		T(strb)	r3, [r0], #1)			@ May fault
 | ||||
| USER(	TUSER(	strb)	r3, [r0], #1)			@ May fault
 | ||||
| 		movge	r3, r7, get_byte_2 | ||||
| USER(		T(strgeb) r3, [r0], #1)			@ May fault
 | ||||
| USER(	TUSER(	strgeb) r3, [r0], #1)			@ May fault
 | ||||
| 		movgt	r3, r7, get_byte_3 | ||||
| USER(		T(strgtb) r3, [r0], #1)			@ May fault
 | ||||
| USER(	TUSER(	strgtb) r3, [r0], #1)			@ May fault
 | ||||
| 		b	.Lc2u_finished | ||||
| 
 | ||||
| .Lc2u_2fupi:	subs	r2, r2, #4 | ||||
|  | @ -175,7 +175,7 @@ USER(		T(strgtb) r3, [r0], #1)			@ May fault | |||
| 		mov	r3, r7, pull #16 | ||||
| 		ldr	r7, [r1], #4 | ||||
| 		orr	r3, r3, r7, push #16 | ||||
| USER(		T(str)	r3, [r0], #4)			@ May fault
 | ||||
| USER(	TUSER(	str)	r3, [r0], #4)			@ May fault
 | ||||
| 		mov	ip, r0, lsl #32 - PAGE_SHIFT | ||||
| 		rsb	ip, ip, #0 | ||||
| 		movs	ip, ip, lsr #32 - PAGE_SHIFT | ||||
|  | @ -210,18 +210,18 @@ USER(		T(str)	r3, [r0], #4)			@ May fault | |||
| 		movne	r3, r7, pull #16 | ||||
| 		ldrne	r7, [r1], #4 | ||||
| 		orrne	r3, r3, r7, push #16 | ||||
| 		T(strne) r3, [r0], #4			@ Shouldnt fault
 | ||||
| 	TUSER(	strne) r3, [r0], #4			@ Shouldnt fault
 | ||||
| 		ands	ip, ip, #3 | ||||
| 		beq	.Lc2u_2fupi | ||||
| .Lc2u_2nowords:	mov	r3, r7, get_byte_2 | ||||
| 		teq	ip, #0 | ||||
| 		beq	.Lc2u_finished | ||||
| 		cmp	ip, #2 | ||||
| USER(		T(strb)	r3, [r0], #1)			@ May fault
 | ||||
| USER(	TUSER(	strb)	r3, [r0], #1)			@ May fault
 | ||||
| 		movge	r3, r7, get_byte_3 | ||||
| USER(		T(strgeb) r3, [r0], #1)			@ May fault
 | ||||
| USER(	TUSER(	strgeb) r3, [r0], #1)			@ May fault
 | ||||
| 		ldrgtb	r3, [r1], #0 | ||||
| USER(		T(strgtb) r3, [r0], #1)			@ May fault
 | ||||
| USER(	TUSER(	strgtb) r3, [r0], #1)			@ May fault
 | ||||
| 		b	.Lc2u_finished | ||||
| 
 | ||||
| .Lc2u_3fupi:	subs	r2, r2, #4 | ||||
|  | @ -230,7 +230,7 @@ USER(		T(strgtb) r3, [r0], #1)			@ May fault | |||
| 		mov	r3, r7, pull #24 | ||||
| 		ldr	r7, [r1], #4 | ||||
| 		orr	r3, r3, r7, push #8 | ||||
| USER(		T(str)	r3, [r0], #4)			@ May fault
 | ||||
| USER(	TUSER(	str)	r3, [r0], #4)			@ May fault
 | ||||
| 		mov	ip, r0, lsl #32 - PAGE_SHIFT | ||||
| 		rsb	ip, ip, #0 | ||||
| 		movs	ip, ip, lsr #32 - PAGE_SHIFT | ||||
|  | @ -265,18 +265,18 @@ USER(		T(str)	r3, [r0], #4)			@ May fault | |||
| 		movne	r3, r7, pull #24 | ||||
| 		ldrne	r7, [r1], #4 | ||||
| 		orrne	r3, r3, r7, push #8 | ||||
| 		T(strne) r3, [r0], #4			@ Shouldnt fault
 | ||||
| 	TUSER(	strne) r3, [r0], #4			@ Shouldnt fault
 | ||||
| 		ands	ip, ip, #3 | ||||
| 		beq	.Lc2u_3fupi | ||||
| .Lc2u_3nowords:	mov	r3, r7, get_byte_3 | ||||
| 		teq	ip, #0 | ||||
| 		beq	.Lc2u_finished | ||||
| 		cmp	ip, #2 | ||||
| USER(		T(strb)	r3, [r0], #1)			@ May fault
 | ||||
| USER(	TUSER(	strb)	r3, [r0], #1)			@ May fault
 | ||||
| 		ldrgeb	r3, [r1], #1 | ||||
| USER(		T(strgeb) r3, [r0], #1)			@ May fault
 | ||||
| USER(	TUSER(	strgeb) r3, [r0], #1)			@ May fault
 | ||||
| 		ldrgtb	r3, [r1], #0 | ||||
| USER(		T(strgtb) r3, [r0], #1)			@ May fault
 | ||||
| USER(	TUSER(	strgtb) r3, [r0], #1)			@ May fault
 | ||||
| 		b	.Lc2u_finished | ||||
| ENDPROC(__copy_to_user) | ||||
| 
 | ||||
|  | @ -295,11 +295,11 @@ ENDPROC(__copy_to_user) | |||
| .Lcfu_dest_not_aligned: | ||||
| 		rsb	ip, ip, #4 | ||||
| 		cmp	ip, #2 | ||||
| USER(		T(ldrb)	r3, [r1], #1)			@ May fault
 | ||||
| USER(	TUSER(	ldrb)	r3, [r1], #1)			@ May fault
 | ||||
| 		strb	r3, [r0], #1 | ||||
| USER(		T(ldrgeb) r3, [r1], #1)			@ May fault
 | ||||
| USER(	TUSER(	ldrgeb) r3, [r1], #1)			@ May fault
 | ||||
| 		strgeb	r3, [r0], #1 | ||||
| USER(		T(ldrgtb) r3, [r1], #1)			@ May fault
 | ||||
| USER(	TUSER(	ldrgtb) r3, [r1], #1)			@ May fault
 | ||||
| 		strgtb	r3, [r0], #1 | ||||
| 		sub	r2, r2, ip | ||||
| 		b	.Lcfu_dest_aligned | ||||
|  | @ -322,7 +322,7 @@ ENTRY(__copy_from_user) | |||
| .Lcfu_0fupi:	subs	r2, r2, #4 | ||||
| 		addmi	ip, r2, #4 | ||||
| 		bmi	.Lcfu_0nowords | ||||
| USER(		T(ldr)	r3, [r1], #4) | ||||
| USER(	TUSER(	ldr)	r3, [r1], #4) | ||||
| 		str	r3, [r0], #4 | ||||
| 		mov	ip, r1, lsl #32 - PAGE_SHIFT	@ On each page, use a ld/st??t instruction
 | ||||
| 		rsb	ip, ip, #0 | ||||
|  | @ -351,18 +351,18 @@ USER(		T(ldr)	r3, [r1], #4) | |||
| 		ldmneia	r1!, {r3 - r4}			@ Shouldnt fault
 | ||||
| 		stmneia	r0!, {r3 - r4} | ||||
| 		tst	ip, #4 | ||||
| 		T(ldrne) r3, [r1], #4			@ Shouldnt fault
 | ||||
| 	TUSER(	ldrne) r3, [r1], #4			@ Shouldnt fault
 | ||||
| 		strne	r3, [r0], #4 | ||||
| 		ands	ip, ip, #3 | ||||
| 		beq	.Lcfu_0fupi | ||||
| .Lcfu_0nowords:	teq	ip, #0 | ||||
| 		beq	.Lcfu_finished | ||||
| .Lcfu_nowords:	cmp	ip, #2 | ||||
| USER(		T(ldrb)	r3, [r1], #1)			@ May fault
 | ||||
| USER(	TUSER(	ldrb)	r3, [r1], #1)			@ May fault
 | ||||
| 		strb	r3, [r0], #1 | ||||
| USER(		T(ldrgeb) r3, [r1], #1)			@ May fault
 | ||||
| USER(	TUSER(	ldrgeb) r3, [r1], #1)			@ May fault
 | ||||
| 		strgeb	r3, [r0], #1 | ||||
| USER(		T(ldrgtb) r3, [r1], #1)			@ May fault
 | ||||
| USER(	TUSER(	ldrgtb) r3, [r1], #1)			@ May fault
 | ||||
| 		strgtb	r3, [r0], #1 | ||||
| 		b	.Lcfu_finished | ||||
| 
 | ||||
|  | @ -375,7 +375,7 @@ USER(		T(ldrgtb) r3, [r1], #1)			@ May fault | |||
| 
 | ||||
| .Lcfu_src_not_aligned: | ||||
| 		bic	r1, r1, #3 | ||||
| USER(		T(ldr)	r7, [r1], #4)			@ May fault
 | ||||
| USER(	TUSER(	ldr)	r7, [r1], #4)			@ May fault
 | ||||
| 		cmp	ip, #2 | ||||
| 		bgt	.Lcfu_3fupi | ||||
| 		beq	.Lcfu_2fupi | ||||
|  | @ -383,7 +383,7 @@ USER(		T(ldr)	r7, [r1], #4)			@ May fault | |||
| 		addmi	ip, r2, #4 | ||||
| 		bmi	.Lcfu_1nowords | ||||
| 		mov	r3, r7, pull #8 | ||||
| USER(		T(ldr)	r7, [r1], #4)			@ May fault
 | ||||
| USER(	TUSER(	ldr)	r7, [r1], #4)			@ May fault
 | ||||
| 		orr	r3, r3, r7, push #24 | ||||
| 		str	r3, [r0], #4 | ||||
| 		mov	ip, r1, lsl #32 - PAGE_SHIFT | ||||
|  | @ -418,7 +418,7 @@ USER(		T(ldr)	r7, [r1], #4)			@ May fault | |||
| 		stmneia	r0!, {r3 - r4} | ||||
| 		tst	ip, #4 | ||||
| 		movne	r3, r7, pull #8 | ||||
| USER(		T(ldrne) r7, [r1], #4)			@ May fault
 | ||||
| USER(	TUSER(	ldrne) r7, [r1], #4)			@ May fault
 | ||||
| 		orrne	r3, r3, r7, push #24 | ||||
| 		strne	r3, [r0], #4 | ||||
| 		ands	ip, ip, #3 | ||||
|  | @ -438,7 +438,7 @@ USER(		T(ldrne) r7, [r1], #4)			@ May fault | |||
| 		addmi	ip, r2, #4 | ||||
| 		bmi	.Lcfu_2nowords | ||||
| 		mov	r3, r7, pull #16 | ||||
| USER(		T(ldr)	r7, [r1], #4)			@ May fault
 | ||||
| USER(	TUSER(	ldr)	r7, [r1], #4)			@ May fault
 | ||||
| 		orr	r3, r3, r7, push #16 | ||||
| 		str	r3, [r0], #4 | ||||
| 		mov	ip, r1, lsl #32 - PAGE_SHIFT | ||||
|  | @ -474,7 +474,7 @@ USER(		T(ldr)	r7, [r1], #4)			@ May fault | |||
| 		stmneia	r0!, {r3 - r4} | ||||
| 		tst	ip, #4 | ||||
| 		movne	r3, r7, pull #16 | ||||
| USER(		T(ldrne) r7, [r1], #4)			@ May fault
 | ||||
| USER(	TUSER(	ldrne) r7, [r1], #4)			@ May fault
 | ||||
| 		orrne	r3, r3, r7, push #16 | ||||
| 		strne	r3, [r0], #4 | ||||
| 		ands	ip, ip, #3 | ||||
|  | @ -486,7 +486,7 @@ USER(		T(ldrne) r7, [r1], #4)			@ May fault | |||
| 		strb	r3, [r0], #1 | ||||
| 		movge	r3, r7, get_byte_3 | ||||
| 		strgeb	r3, [r0], #1 | ||||
| USER(		T(ldrgtb) r3, [r1], #0)			@ May fault
 | ||||
| USER(	TUSER(	ldrgtb) r3, [r1], #0)			@ May fault
 | ||||
| 		strgtb	r3, [r0], #1 | ||||
| 		b	.Lcfu_finished | ||||
| 
 | ||||
|  | @ -494,7 +494,7 @@ USER(		T(ldrgtb) r3, [r1], #0)			@ May fault | |||
| 		addmi	ip, r2, #4 | ||||
| 		bmi	.Lcfu_3nowords | ||||
| 		mov	r3, r7, pull #24 | ||||
| USER(		T(ldr)	r7, [r1], #4)			@ May fault
 | ||||
| USER(	TUSER(	ldr)	r7, [r1], #4)			@ May fault
 | ||||
| 		orr	r3, r3, r7, push #8 | ||||
| 		str	r3, [r0], #4 | ||||
| 		mov	ip, r1, lsl #32 - PAGE_SHIFT | ||||
|  | @ -529,7 +529,7 @@ USER(		T(ldr)	r7, [r1], #4)			@ May fault | |||
| 		stmneia	r0!, {r3 - r4} | ||||
| 		tst	ip, #4 | ||||
| 		movne	r3, r7, pull #24 | ||||
| USER(		T(ldrne) r7, [r1], #4)			@ May fault
 | ||||
| USER(	TUSER(	ldrne) r7, [r1], #4)			@ May fault
 | ||||
| 		orrne	r3, r3, r7, push #8 | ||||
| 		strne	r3, [r0], #4 | ||||
| 		ands	ip, ip, #3 | ||||
|  | @ -539,9 +539,9 @@ USER(		T(ldrne) r7, [r1], #4)			@ May fault | |||
| 		beq	.Lcfu_finished | ||||
| 		cmp	ip, #2 | ||||
| 		strb	r3, [r0], #1 | ||||
| USER(		T(ldrgeb) r3, [r1], #1)			@ May fault
 | ||||
| USER(	TUSER(	ldrgeb) r3, [r1], #1)			@ May fault
 | ||||
| 		strgeb	r3, [r0], #1 | ||||
| USER(		T(ldrgtb) r3, [r1], #1)			@ May fault
 | ||||
| USER(	TUSER(	ldrgtb) r3, [r1], #1)			@ May fault
 | ||||
| 		strgtb	r3, [r0], #1 | ||||
| 		b	.Lcfu_finished | ||||
| ENDPROC(__copy_from_user) | ||||
|  |  | |||
|  | @ -18,6 +18,12 @@ config HAVE_AT91_USART4 | |||
| config HAVE_AT91_USART5 | ||||
| 	bool | ||||
| 
 | ||||
| config AT91_SAM9_ALT_RESET | ||||
| 	bool | ||||
| 
 | ||||
| config AT91_SAM9G45_RESET | ||||
| 	bool | ||||
| 
 | ||||
| menu "Atmel AT91 System-on-Chip" | ||||
| 
 | ||||
| choice | ||||
|  | @ -39,6 +45,7 @@ config ARCH_AT91SAM9260 | |||
| 	select HAVE_AT91_USART4 | ||||
| 	select HAVE_AT91_USART5 | ||||
| 	select HAVE_NET_MACB | ||||
| 	select AT91_SAM9_ALT_RESET | ||||
| 
 | ||||
| config ARCH_AT91SAM9261 | ||||
| 	bool "AT91SAM9261" | ||||
|  | @ -46,6 +53,7 @@ config ARCH_AT91SAM9261 | |||
| 	select GENERIC_CLOCKEVENTS | ||||
| 	select HAVE_FB_ATMEL | ||||
| 	select HAVE_AT91_DBGU0 | ||||
| 	select AT91_SAM9_ALT_RESET | ||||
| 
 | ||||
| config ARCH_AT91SAM9G10 | ||||
| 	bool "AT91SAM9G10" | ||||
|  | @ -53,6 +61,7 @@ config ARCH_AT91SAM9G10 | |||
| 	select GENERIC_CLOCKEVENTS | ||||
| 	select HAVE_AT91_DBGU0 | ||||
| 	select HAVE_FB_ATMEL | ||||
| 	select AT91_SAM9_ALT_RESET | ||||
| 
 | ||||
| config ARCH_AT91SAM9263 | ||||
| 	bool "AT91SAM9263" | ||||
|  | @ -61,6 +70,7 @@ config ARCH_AT91SAM9263 | |||
| 	select HAVE_FB_ATMEL | ||||
| 	select HAVE_NET_MACB | ||||
| 	select HAVE_AT91_DBGU1 | ||||
| 	select AT91_SAM9_ALT_RESET | ||||
| 
 | ||||
| config ARCH_AT91SAM9RL | ||||
| 	bool "AT91SAM9RL" | ||||
|  | @ -69,6 +79,7 @@ config ARCH_AT91SAM9RL | |||
| 	select HAVE_AT91_USART3 | ||||
| 	select HAVE_FB_ATMEL | ||||
| 	select HAVE_AT91_DBGU0 | ||||
| 	select AT91_SAM9_ALT_RESET | ||||
| 
 | ||||
| config ARCH_AT91SAM9G20 | ||||
| 	bool "AT91SAM9G20" | ||||
|  | @ -79,6 +90,7 @@ config ARCH_AT91SAM9G20 | |||
| 	select HAVE_AT91_USART4 | ||||
| 	select HAVE_AT91_USART5 | ||||
| 	select HAVE_NET_MACB | ||||
| 	select AT91_SAM9_ALT_RESET | ||||
| 
 | ||||
| config ARCH_AT91SAM9G45 | ||||
| 	bool "AT91SAM9G45" | ||||
|  | @ -88,6 +100,7 @@ config ARCH_AT91SAM9G45 | |||
| 	select HAVE_FB_ATMEL | ||||
| 	select HAVE_NET_MACB | ||||
| 	select HAVE_AT91_DBGU1 | ||||
| 	select AT91_SAM9G45_RESET | ||||
| 
 | ||||
| config ARCH_AT91CAP9 | ||||
| 	bool "AT91CAP9" | ||||
|  | @ -96,6 +109,7 @@ config ARCH_AT91CAP9 | |||
| 	select HAVE_FB_ATMEL | ||||
| 	select HAVE_NET_MACB | ||||
| 	select HAVE_AT91_DBGU1 | ||||
| 	select AT91_SAM9G45_RESET | ||||
| 
 | ||||
| config ARCH_AT91X40 | ||||
| 	bool "AT91x40" | ||||
|  |  | |||
|  | @ -8,15 +8,17 @@ obj-n		:= | |||
| obj-		:= | ||||
| 
 | ||||
| obj-$(CONFIG_AT91_PMC_UNIT)	+= clock.o | ||||
| obj-$(CONFIG_AT91_SAM9_ALT_RESET) += at91sam9_alt_reset.o | ||||
| obj-$(CONFIG_AT91_SAM9G45_RESET) += at91sam9g45_reset.o | ||||
| 
 | ||||
| # CPU-specific support
 | ||||
| obj-$(CONFIG_ARCH_AT91RM9200)	+= at91rm9200.o at91rm9200_time.o at91rm9200_devices.o | ||||
| obj-$(CONFIG_ARCH_AT91SAM9260)	+= at91sam9260.o at91sam926x_time.o at91sam9260_devices.o sam9_smc.o at91sam9_alt_reset.o | ||||
| obj-$(CONFIG_ARCH_AT91SAM9261)	+= at91sam9261.o at91sam926x_time.o at91sam9261_devices.o sam9_smc.o at91sam9_alt_reset.o | ||||
| obj-$(CONFIG_ARCH_AT91SAM9G10)	+= at91sam9261.o at91sam926x_time.o at91sam9261_devices.o sam9_smc.o at91sam9_alt_reset.o | ||||
| obj-$(CONFIG_ARCH_AT91SAM9263)	+= at91sam9263.o at91sam926x_time.o at91sam9263_devices.o sam9_smc.o at91sam9_alt_reset.o | ||||
| obj-$(CONFIG_ARCH_AT91SAM9RL)	+= at91sam9rl.o at91sam926x_time.o at91sam9rl_devices.o sam9_smc.o at91sam9_alt_reset.o | ||||
| obj-$(CONFIG_ARCH_AT91SAM9G20)	+= at91sam9260.o at91sam926x_time.o at91sam9260_devices.o sam9_smc.o at91sam9_alt_reset.o | ||||
| obj-$(CONFIG_ARCH_AT91SAM9260)	+= at91sam9260.o at91sam926x_time.o at91sam9260_devices.o sam9_smc.o | ||||
| obj-$(CONFIG_ARCH_AT91SAM9261)	+= at91sam9261.o at91sam926x_time.o at91sam9261_devices.o sam9_smc.o | ||||
| obj-$(CONFIG_ARCH_AT91SAM9G10)	+= at91sam9261.o at91sam926x_time.o at91sam9261_devices.o sam9_smc.o | ||||
| obj-$(CONFIG_ARCH_AT91SAM9263)	+= at91sam9263.o at91sam926x_time.o at91sam9263_devices.o sam9_smc.o | ||||
| obj-$(CONFIG_ARCH_AT91SAM9RL)	+= at91sam9rl.o at91sam926x_time.o at91sam9rl_devices.o sam9_smc.o | ||||
| obj-$(CONFIG_ARCH_AT91SAM9G20)	+= at91sam9260.o at91sam926x_time.o at91sam9260_devices.o sam9_smc.o | ||||
| obj-$(CONFIG_ARCH_AT91SAM9G45)	+= at91sam9g45.o at91sam926x_time.o at91sam9g45_devices.o sam9_smc.o | ||||
| obj-$(CONFIG_ARCH_AT91CAP9)	+= at91cap9.o at91sam926x_time.o at91cap9_devices.o sam9_smc.o | ||||
| obj-$(CONFIG_ARCH_AT91X40)	+= at91x40.o at91x40_time.o | ||||
|  |  | |||
|  | @ -21,7 +21,6 @@ | |||
| #include <mach/cpu.h> | ||||
| #include <mach/at91cap9.h> | ||||
| #include <mach/at91_pmc.h> | ||||
| #include <mach/at91_rstc.h> | ||||
| 
 | ||||
| #include "soc.h" | ||||
| #include "generic.h" | ||||
|  | @ -314,11 +313,6 @@ static struct at91_gpio_bank at91cap9_gpio[] __initdata = { | |||
| 	} | ||||
| }; | ||||
| 
 | ||||
| static void at91cap9_restart(char mode, const char *cmd) | ||||
| { | ||||
| 	at91_sys_write(AT91_RSTC_CR, AT91_RSTC_KEY | AT91_RSTC_PROCRST | AT91_RSTC_PERRST); | ||||
| } | ||||
| 
 | ||||
| /* --------------------------------------------------------------------
 | ||||
|  *  AT91CAP9 processor initialization | ||||
|  * -------------------------------------------------------------------- */ | ||||
|  | @ -331,13 +325,14 @@ static void __init at91cap9_map_io(void) | |||
| static void __init at91cap9_ioremap_registers(void) | ||||
| { | ||||
| 	at91_ioremap_shdwc(AT91CAP9_BASE_SHDWC); | ||||
| 	at91_ioremap_rstc(AT91CAP9_BASE_RSTC); | ||||
| 	at91sam926x_ioremap_pit(AT91CAP9_BASE_PIT); | ||||
| 	at91sam9_ioremap_smc(0, AT91CAP9_BASE_SMC); | ||||
| } | ||||
| 
 | ||||
| static void __init at91cap9_initialize(void) | ||||
| { | ||||
| 	arm_pm_restart = at91cap9_restart; | ||||
| 	arm_pm_restart = at91sam9g45_restart; | ||||
| 	at91_extern_irq = (1 << AT91CAP9_ID_IRQ0) | (1 << AT91CAP9_ID_IRQ1); | ||||
| 
 | ||||
| 	/* Register GPIO subsystem */ | ||||
|  |  | |||
|  | @ -323,6 +323,7 @@ static void __init at91sam9260_map_io(void) | |||
| static void __init at91sam9260_ioremap_registers(void) | ||||
| { | ||||
| 	at91_ioremap_shdwc(AT91SAM9260_BASE_SHDWC); | ||||
| 	at91_ioremap_rstc(AT91SAM9260_BASE_RSTC); | ||||
| 	at91sam926x_ioremap_pit(AT91SAM9260_BASE_PIT); | ||||
| 	at91sam9_ioremap_smc(0, AT91SAM9260_BASE_SMC); | ||||
| } | ||||
|  |  | |||
|  | @ -281,6 +281,7 @@ static void __init at91sam9261_map_io(void) | |||
| static void __init at91sam9261_ioremap_registers(void) | ||||
| { | ||||
| 	at91_ioremap_shdwc(AT91SAM9261_BASE_SHDWC); | ||||
| 	at91_ioremap_rstc(AT91SAM9261_BASE_RSTC); | ||||
| 	at91sam926x_ioremap_pit(AT91SAM9261_BASE_PIT); | ||||
| 	at91sam9_ioremap_smc(0, AT91SAM9261_BASE_SMC); | ||||
| } | ||||
|  |  | |||
|  | @ -301,6 +301,7 @@ static void __init at91sam9263_map_io(void) | |||
| static void __init at91sam9263_ioremap_registers(void) | ||||
| { | ||||
| 	at91_ioremap_shdwc(AT91SAM9263_BASE_SHDWC); | ||||
| 	at91_ioremap_rstc(AT91SAM9263_BASE_RSTC); | ||||
| 	at91sam926x_ioremap_pit(AT91SAM9263_BASE_PIT); | ||||
| 	at91sam9_ioremap_smc(0, AT91SAM9263_BASE_SMC0); | ||||
| 	at91sam9_ioremap_smc(1, AT91SAM9263_BASE_SMC1); | ||||
|  |  | |||
|  | @ -23,7 +23,8 @@ | |||
| 			.globl	at91sam9_alt_restart
 | ||||
| 
 | ||||
| at91sam9_alt_restart:	ldr	r0, .at91_va_base_sdramc	@ preload constants
 | ||||
| 			ldr	r1, .at91_va_base_rstc_cr | ||||
| 			ldr	r1, =at91_rstc_base | ||||
| 			ldr	r1, [r1] | ||||
| 
 | ||||
| 			mov	r2, #1 | ||||
| 			mov	r3, #AT91_SDRAMC_LPCB_POWER_DOWN | ||||
|  | @ -33,11 +34,9 @@ at91sam9_alt_restart:	ldr	r0, .at91_va_base_sdramc	@ preload constants | |||
| 
 | ||||
| 			str	r2, [r0, #AT91_SDRAMC_TR]	@ disable SDRAM access
 | ||||
| 			str	r3, [r0, #AT91_SDRAMC_LPR]	@ power down SDRAM
 | ||||
| 			str	r4, [r1]			@ reset processor
 | ||||
| 			str	r4, [r1, #AT91_RSTC_CR]		@ reset processor
 | ||||
| 
 | ||||
| 			b	. | ||||
| 
 | ||||
| .at91_va_base_sdramc: | ||||
| 	.word AT91_VA_BASE_SYS + AT91_SDRAMC0 | ||||
| .at91_va_base_rstc_cr: | ||||
| 	.word AT91_VA_BASE_SYS + AT91_RSTC_CR | ||||
|  |  | |||
|  | @ -18,7 +18,6 @@ | |||
| #include <asm/mach/map.h> | ||||
| #include <mach/at91sam9g45.h> | ||||
| #include <mach/at91_pmc.h> | ||||
| #include <mach/at91_rstc.h> | ||||
| #include <mach/cpu.h> | ||||
| 
 | ||||
| #include "soc.h" | ||||
|  | @ -318,11 +317,6 @@ static struct at91_gpio_bank at91sam9g45_gpio[] __initdata = { | |||
| 	} | ||||
| }; | ||||
| 
 | ||||
| static void at91sam9g45_restart(char mode, const char *cmd) | ||||
| { | ||||
| 	at91_sys_write(AT91_RSTC_CR, AT91_RSTC_KEY | AT91_RSTC_PROCRST | AT91_RSTC_PERRST); | ||||
| } | ||||
| 
 | ||||
| /* --------------------------------------------------------------------
 | ||||
|  *  AT91SAM9G45 processor initialization | ||||
|  * -------------------------------------------------------------------- */ | ||||
|  | @ -336,6 +330,7 @@ static void __init at91sam9g45_map_io(void) | |||
| static void __init at91sam9g45_ioremap_registers(void) | ||||
| { | ||||
| 	at91_ioremap_shdwc(AT91SAM9G45_BASE_SHDWC); | ||||
| 	at91_ioremap_rstc(AT91SAM9G45_BASE_RSTC); | ||||
| 	at91sam926x_ioremap_pit(AT91SAM9G45_BASE_PIT); | ||||
| 	at91sam9_ioremap_smc(0, AT91SAM9G45_BASE_SMC); | ||||
| } | ||||
|  |  | |||
							
								
								
									
										40
									
								
								arch/arm/mach-at91/at91sam9g45_reset.S
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								arch/arm/mach-at91/at91sam9g45_reset.S
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,40 @@ | |||
| /* | ||||
|  * reset AT91SAM9G45 as per errata | ||||
|  * | ||||
|  * Copyright (C) 2011 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcosoft.com>
 | ||||
|  * | ||||
|  * unless the SDRAM is cleanly shutdown before we hit the | ||||
|  * reset register it can be left driving the data bus and | ||||
|  * killing the chance of a subsequent boot from NAND | ||||
|  * | ||||
|  * GPLv2 Only | ||||
|  */ | ||||
| 
 | ||||
| #include <linux/linkage.h> | ||||
| #include <mach/hardware.h> | ||||
| #include <mach/at91sam9_ddrsdr.h> | ||||
| #include <mach/at91_rstc.h> | ||||
| 
 | ||||
| 			.arm | ||||
| 
 | ||||
| 			.globl	at91sam9g45_restart
 | ||||
| 
 | ||||
| at91sam9g45_restart: | ||||
| 			ldr	r0, .at91_va_base_sdramc0	@ preload constants
 | ||||
| 			ldr	r1, =at91_rstc_base | ||||
| 			ldr	r1, [r1] | ||||
| 
 | ||||
| 			mov	r2, #1 | ||||
| 			mov	r3, #AT91_DDRSDRC_LPCB_POWER_DOWN | ||||
| 			ldr	r4, =AT91_RSTC_KEY | AT91_RSTC_PERRST | AT91_RSTC_PROCRST | ||||
| 
 | ||||
| 			.balign	32				@ align to cache line
 | ||||
| 
 | ||||
| 			str	r2, [r0, #AT91_DDRSDRC_RTR]	@ disable DDR0 access
 | ||||
| 			str	r3, [r0, #AT91_DDRSDRC_LPR]	@ power down DDR0
 | ||||
| 			str	r4, [r1, #AT91_RSTC_CR]		@ reset processor
 | ||||
| 
 | ||||
| 			b	. | ||||
| 
 | ||||
| .at91_va_base_sdramc0: | ||||
| 	.word AT91_VA_BASE_SYS + AT91_DDRSDRC0 | ||||
|  | @ -286,6 +286,7 @@ static void __init at91sam9rl_map_io(void) | |||
| static void __init at91sam9rl_ioremap_registers(void) | ||||
| { | ||||
| 	at91_ioremap_shdwc(AT91SAM9RL_BASE_SHDWC); | ||||
| 	at91_ioremap_rstc(AT91SAM9RL_BASE_RSTC); | ||||
| 	at91sam926x_ioremap_pit(AT91SAM9RL_BASE_PIT); | ||||
| 	at91sam9_ioremap_smc(0, AT91SAM9RL_BASE_SMC); | ||||
| } | ||||
|  |  | |||
|  | @ -58,7 +58,9 @@ extern void at91_irq_suspend(void); | |||
| extern void at91_irq_resume(void); | ||||
| 
 | ||||
| /* reset */ | ||||
| extern void at91_ioremap_rstc(u32 base_addr); | ||||
| extern void at91sam9_alt_restart(char, const char *); | ||||
| extern void at91sam9g45_restart(char, const char *); | ||||
| 
 | ||||
| /* shutdown */ | ||||
| extern void at91_ioremap_shdwc(u32 base_addr); | ||||
|  |  | |||
|  | @ -16,13 +16,25 @@ | |||
| #ifndef AT91_RSTC_H | ||||
| #define AT91_RSTC_H | ||||
| 
 | ||||
| #define AT91_RSTC_CR		(AT91_RSTC + 0x00)	/* Reset Controller Control Register */ | ||||
| #ifndef __ASSEMBLY__ | ||||
| extern void __iomem *at91_rstc_base; | ||||
| 
 | ||||
| #define at91_rstc_read(field) \ | ||||
| 	__raw_readl(at91_rstc_base + field) | ||||
| 
 | ||||
| #define at91_rstc_write(field, value) \ | ||||
| 	__raw_writel(value, at91_rstc_base + field); | ||||
| #else | ||||
| .extern at91_rstc_base | ||||
| #endif | ||||
| 
 | ||||
| #define AT91_RSTC_CR		0x00			/* Reset Controller Control Register */ | ||||
| #define		AT91_RSTC_PROCRST	(1 << 0)		/* Processor Reset */ | ||||
| #define		AT91_RSTC_PERRST	(1 << 2)		/* Peripheral Reset */ | ||||
| #define		AT91_RSTC_EXTRST	(1 << 3)		/* External Reset */ | ||||
| #define		AT91_RSTC_KEY		(0xa5 << 24)		/* KEY Password */ | ||||
| 
 | ||||
| #define AT91_RSTC_SR		(AT91_RSTC + 0x04)	/* Reset Controller Status Register */ | ||||
| #define AT91_RSTC_SR		0x04			/* Reset Controller Status Register */ | ||||
| #define		AT91_RSTC_URSTS		(1 << 0)		/* User Reset Status */ | ||||
| #define		AT91_RSTC_RSTTYP	(7 << 8)		/* Reset Type */ | ||||
| #define			AT91_RSTC_RSTTYP_GENERAL	(0 << 8) | ||||
|  | @ -33,7 +45,7 @@ | |||
| #define		AT91_RSTC_NRSTL		(1 << 16)		/* NRST Pin Level */ | ||||
| #define		AT91_RSTC_SRCMP		(1 << 17)		/* Software Reset Command in Progress */ | ||||
| 
 | ||||
| #define AT91_RSTC_MR		(AT91_RSTC + 0x08)	/* Reset Controller Mode Register */ | ||||
| #define AT91_RSTC_MR		0x08			/* Reset Controller Mode Register */ | ||||
| #define		AT91_RSTC_URSTEN	(1 << 0)		/* User Reset Enable */ | ||||
| #define		AT91_RSTC_URSTIEN	(1 << 4)		/* User Reset Interrupt Enable */ | ||||
| #define		AT91_RSTC_ERSTL		(0xf << 8)		/* External Reset Length */ | ||||
|  |  | |||
|  | @ -83,7 +83,6 @@ | |||
| #define AT91_DDRSDRC0	(0xffffe600 - AT91_BASE_SYS) | ||||
| #define AT91_MATRIX	(0xffffea00 - AT91_BASE_SYS) | ||||
| #define AT91_PMC	(0xfffffc00 - AT91_BASE_SYS) | ||||
| #define AT91_RSTC	(0xfffffd00 - AT91_BASE_SYS) | ||||
| #define AT91_GPBR	(cpu_is_at91cap9_revB() ?	\ | ||||
| 			(0xfffffd50 - AT91_BASE_SYS) :	\ | ||||
| 			(0xfffffd60 - AT91_BASE_SYS)) | ||||
|  | @ -96,6 +95,7 @@ | |||
| #define AT91CAP9_BASE_PIOB	0xfffff400 | ||||
| #define AT91CAP9_BASE_PIOC	0xfffff600 | ||||
| #define AT91CAP9_BASE_PIOD	0xfffff800 | ||||
| #define AT91CAP9_BASE_RSTC	0xfffffd00 | ||||
| #define AT91CAP9_BASE_SHDWC	0xfffffd10 | ||||
| #define AT91CAP9_BASE_RTT	0xfffffd20 | ||||
| #define AT91CAP9_BASE_PIT	0xfffffd30 | ||||
|  |  | |||
|  | @ -1,108 +0,0 @@ | |||
| /*
 | ||||
|  * arch/arm/mach-at91/include/mach/at91cap9_ddrsdr.h | ||||
|  * | ||||
|  *  (C) 2008 Andrew Victor | ||||
|  * | ||||
|  * DDR/SDR Controller (DDRSDRC) - System peripherals registers. | ||||
|  * Based on AT91CAP9 datasheet revision B. | ||||
|  * | ||||
|  * 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. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef AT91CAP9_DDRSDR_H | ||||
| #define AT91CAP9_DDRSDR_H | ||||
| 
 | ||||
| #define AT91_DDRSDRC_MR		0x00	/* Mode Register */ | ||||
| #define		AT91_DDRSDRC_MODE	(0xf << 0)		/* Command Mode */ | ||||
| #define			AT91_DDRSDRC_MODE_NORMAL		0 | ||||
| #define			AT91_DDRSDRC_MODE_NOP		1 | ||||
| #define			AT91_DDRSDRC_MODE_PRECHARGE	2 | ||||
| #define			AT91_DDRSDRC_MODE_LMR		3 | ||||
| #define			AT91_DDRSDRC_MODE_REFRESH	4 | ||||
| #define			AT91_DDRSDRC_MODE_EXT_LMR	5 | ||||
| #define			AT91_DDRSDRC_MODE_DEEP		6 | ||||
| 
 | ||||
| #define AT91_DDRSDRC_RTR	0x04	/* Refresh Timer Register */ | ||||
| #define		AT91_DDRSDRC_COUNT	(0xfff << 0)		/* Refresh Timer Counter */ | ||||
| 
 | ||||
| #define AT91_DDRSDRC_CR		0x08	/* Configuration Register */ | ||||
| #define		AT91_DDRSDRC_NC		(3 << 0)		/* Number of Column Bits */ | ||||
| #define			AT91_DDRSDRC_NC_SDR8	(0 << 0) | ||||
| #define			AT91_DDRSDRC_NC_SDR9	(1 << 0) | ||||
| #define			AT91_DDRSDRC_NC_SDR10	(2 << 0) | ||||
| #define			AT91_DDRSDRC_NC_SDR11	(3 << 0) | ||||
| #define			AT91_DDRSDRC_NC_DDR9	(0 << 0) | ||||
| #define			AT91_DDRSDRC_NC_DDR10	(1 << 0) | ||||
| #define			AT91_DDRSDRC_NC_DDR11	(2 << 0) | ||||
| #define			AT91_DDRSDRC_NC_DDR12	(3 << 0) | ||||
| #define		AT91_DDRSDRC_NR		(3 << 2)		/* Number of Row Bits */ | ||||
| #define			AT91_DDRSDRC_NR_11	(0 << 2) | ||||
| #define			AT91_DDRSDRC_NR_12	(1 << 2) | ||||
| #define			AT91_DDRSDRC_NR_13	(2 << 2) | ||||
| #define		AT91_DDRSDRC_CAS	(7 << 4)		/* CAS Latency */ | ||||
| #define			AT91_DDRSDRC_CAS_2	(2 << 4) | ||||
| #define			AT91_DDRSDRC_CAS_3	(3 << 4) | ||||
| #define			AT91_DDRSDRC_CAS_25	(6 << 4) | ||||
| #define		AT91_DDRSDRC_DLL	(1 << 7)		/* Reset DLL */ | ||||
| #define		AT91_DDRSDRC_DICDS	(1 << 8)		/* Output impedance control */ | ||||
| 
 | ||||
| #define AT91_DDRSDRC_T0PR	0x0C	/* Timing 0 Register */ | ||||
| #define		AT91_DDRSDRC_TRAS	(0xf <<  0)		/* Active to Precharge delay */ | ||||
| #define		AT91_DDRSDRC_TRCD	(0xf <<  4)		/* Row to Column delay */ | ||||
| #define		AT91_DDRSDRC_TWR	(0xf <<  8)		/* Write recovery delay */ | ||||
| #define		AT91_DDRSDRC_TRC	(0xf << 12)		/* Row cycle delay */ | ||||
| #define		AT91_DDRSDRC_TRP	(0xf << 16)		/* Row precharge delay */ | ||||
| #define		AT91_DDRSDRC_TRRD	(0xf << 20)		/* Active BankA to BankB */ | ||||
| #define		AT91_DDRSDRC_TWTR	(1   << 24)		/* Internal Write to Read delay */ | ||||
| #define		AT91_DDRSDRC_TMRD	(0xf << 28)		/* Load mode to active/refresh delay */ | ||||
| 
 | ||||
| #define AT91_DDRSDRC_T1PR	0x10	/* Timing 1 Register */ | ||||
| #define		AT91_DDRSDRC_TRFC	(0x1f << 0)		/* Row Cycle Delay */ | ||||
| #define		AT91_DDRSDRC_TXSNR	(0xff << 8)		/* Exit self-refresh to non-read */ | ||||
| #define		AT91_DDRSDRC_TXSRD	(0xff << 16)		/* Exit self-refresh to read */ | ||||
| #define		AT91_DDRSDRC_TXP	(0xf  << 24)		/* Exit power-down delay */ | ||||
| 
 | ||||
| #define AT91_DDRSDRC_LPR	0x18	/* Low Power Register */ | ||||
| #define		AT91_DDRSDRC_LPCB		(3 << 0)	/* Low-power Configurations */ | ||||
| #define			AT91_DDRSDRC_LPCB_DISABLE		0 | ||||
| #define			AT91_DDRSDRC_LPCB_SELF_REFRESH		1 | ||||
| #define			AT91_DDRSDRC_LPCB_POWER_DOWN		2 | ||||
| #define			AT91_DDRSDRC_LPCB_DEEP_POWER_DOWN	3 | ||||
| #define		AT91_DDRSDRC_CLKFR		(1 << 2)	/* Clock Frozen */ | ||||
| #define		AT91_DDRSDRC_PASR		(7 << 4)	/* Partial Array Self Refresh */ | ||||
| #define		AT91_DDRSDRC_TCSR		(3 << 8)	/* Temperature Compensated Self Refresh */ | ||||
| #define		AT91_DDRSDRC_DS			(3 << 10)	/* Drive Strength */ | ||||
| #define		AT91_DDRSDRC_TIMEOUT		(3 << 12)	/* Time to define when Low Power Mode is enabled */ | ||||
| #define			AT91_DDRSDRC_TIMEOUT_0_CLK_CYCLES	(0 << 12) | ||||
| #define			AT91_DDRSDRC_TIMEOUT_64_CLK_CYCLES	(1 << 12) | ||||
| #define			AT91_DDRSDRC_TIMEOUT_128_CLK_CYCLES	(2 << 12) | ||||
| 
 | ||||
| #define AT91_DDRSDRC_MDR	0x1C	/* Memory Device Register */ | ||||
| #define		AT91_DDRSDRC_MD		(3 << 0)		/* Memory Device Type */ | ||||
| #define			AT91_DDRSDRC_MD_SDR		0 | ||||
| #define			AT91_DDRSDRC_MD_LOW_POWER_SDR	1 | ||||
| #define			AT91_DDRSDRC_MD_DDR		2 | ||||
| #define			AT91_DDRSDRC_MD_LOW_POWER_DDR	3 | ||||
| 
 | ||||
| #define AT91_DDRSDRC_DLLR	0x20	/* DLL Information Register */ | ||||
| #define		AT91_DDRSDRC_MDINC	(1 << 0)		/* Master Delay increment */ | ||||
| #define		AT91_DDRSDRC_MDDEC	(1 << 1)		/* Master Delay decrement */ | ||||
| #define		AT91_DDRSDRC_MDOVF	(1 << 2)		/* Master Delay Overflow */ | ||||
| #define		AT91_DDRSDRC_SDCOVF	(1 << 3)		/* Slave Delay Correction Overflow */ | ||||
| #define		AT91_DDRSDRC_SDCUDF	(1 << 4)		/* Slave Delay Correction Underflow */ | ||||
| #define		AT91_DDRSDRC_SDERF	(1 << 5)		/* Slave Delay Correction error */ | ||||
| #define		AT91_DDRSDRC_MDVAL	(0xff <<  8)		/* Master Delay value */ | ||||
| #define		AT91_DDRSDRC_SDVAL	(0xff << 16)		/* Slave Delay value */ | ||||
| #define		AT91_DDRSDRC_SDCVAL	(0xff << 24)		/* Slave Delay Correction value */ | ||||
| 
 | ||||
| /* Register access macros */ | ||||
| #define at91_ramc_read(num, reg) \ | ||||
| 	at91_sys_read(AT91_DDRSDRC##num + reg) | ||||
| #define at91_ramc_write(num, reg, value) \ | ||||
| 	at91_sys_write(AT91_DDRSDRC##num + reg, value) | ||||
| 
 | ||||
| 
 | ||||
| #endif | ||||
|  | @ -83,7 +83,6 @@ | |||
| #define AT91_SDRAMC0	(0xffffea00 - AT91_BASE_SYS) | ||||
| #define AT91_MATRIX	(0xffffee00 - AT91_BASE_SYS) | ||||
| #define AT91_PMC	(0xfffffc00 - AT91_BASE_SYS) | ||||
| #define AT91_RSTC	(0xfffffd00 - AT91_BASE_SYS) | ||||
| #define AT91_GPBR	(0xfffffd50 - AT91_BASE_SYS) | ||||
| 
 | ||||
| #define AT91SAM9260_BASE_ECC	0xffffe800 | ||||
|  | @ -92,6 +91,7 @@ | |||
| #define AT91SAM9260_BASE_PIOA	0xfffff400 | ||||
| #define AT91SAM9260_BASE_PIOB	0xfffff600 | ||||
| #define AT91SAM9260_BASE_PIOC	0xfffff800 | ||||
| #define AT91SAM9260_BASE_RSTC	0xfffffd00 | ||||
| #define AT91SAM9260_BASE_SHDWC	0xfffffd10 | ||||
| #define AT91SAM9260_BASE_RTT	0xfffffd20 | ||||
| #define AT91SAM9260_BASE_PIT	0xfffffd30 | ||||
|  |  | |||
|  | @ -68,7 +68,6 @@ | |||
| #define AT91_SDRAMC0	(0xffffea00 - AT91_BASE_SYS) | ||||
| #define AT91_MATRIX	(0xffffee00 - AT91_BASE_SYS) | ||||
| #define AT91_PMC	(0xfffffc00 - AT91_BASE_SYS) | ||||
| #define AT91_RSTC	(0xfffffd00 - AT91_BASE_SYS) | ||||
| #define AT91_GPBR	(0xfffffd50 - AT91_BASE_SYS) | ||||
| 
 | ||||
| #define AT91SAM9261_BASE_SMC	0xffffec00 | ||||
|  | @ -76,6 +75,7 @@ | |||
| #define AT91SAM9261_BASE_PIOA	0xfffff400 | ||||
| #define AT91SAM9261_BASE_PIOB	0xfffff600 | ||||
| #define AT91SAM9261_BASE_PIOC	0xfffff800 | ||||
| #define AT91SAM9261_BASE_RSTC	0xfffffd00 | ||||
| #define AT91SAM9261_BASE_SHDWC	0xfffffd10 | ||||
| #define AT91SAM9261_BASE_RTT	0xfffffd20 | ||||
| #define AT91SAM9261_BASE_PIT	0xfffffd30 | ||||
|  |  | |||
|  | @ -78,7 +78,6 @@ | |||
| #define AT91_SDRAMC1	(0xffffe800 - AT91_BASE_SYS) | ||||
| #define AT91_MATRIX	(0xffffec00 - AT91_BASE_SYS) | ||||
| #define AT91_PMC	(0xfffffc00 - AT91_BASE_SYS) | ||||
| #define AT91_RSTC	(0xfffffd00 - AT91_BASE_SYS) | ||||
| #define AT91_GPBR	(0xfffffd60 - AT91_BASE_SYS) | ||||
| 
 | ||||
| #define AT91SAM9263_BASE_ECC0	0xffffe000 | ||||
|  | @ -91,6 +90,7 @@ | |||
| #define AT91SAM9263_BASE_PIOC	0xfffff600 | ||||
| #define AT91SAM9263_BASE_PIOD	0xfffff800 | ||||
| #define AT91SAM9263_BASE_PIOE	0xfffffa00 | ||||
| #define AT91SAM9263_BASE_RSTC	0xfffffd00 | ||||
| #define AT91SAM9263_BASE_SHDWC	0xfffffd10 | ||||
| #define AT91SAM9263_BASE_RTT0	0xfffffd20 | ||||
| #define AT91SAM9263_BASE_PIT	0xfffffd30 | ||||
|  |  | |||
|  | @ -46,10 +46,10 @@ | |||
| #define			AT91_DDRSDRC_CAS_25	(6 << 4) | ||||
| #define		AT91_DDRSDRC_RST_DLL	(1 << 7)		/* Reset DLL */ | ||||
| #define		AT91_DDRSDRC_DICDS	(1 << 8)		/* Output impedance control */ | ||||
| #define		AT91_DDRSDRC_DIS_DLL	(1 << 9)		/* Disable DLL */ | ||||
| #define		AT91_DDRSDRC_OCD	(1 << 12)		/* Off-Chip Driver */ | ||||
| #define		AT91_DDRSDRC_DQMS	(1 << 16)		/* Mask Data is Shared */ | ||||
| #define		AT91_DDRSDRC_ACTBST	(1 << 18)		/* Active Bank X to Burst Stop Read Access Bank Y */ | ||||
| #define		AT91_DDRSDRC_DIS_DLL	(1 << 9)		/* Disable DLL [SAM9 Only] */ | ||||
| #define		AT91_DDRSDRC_OCD	(1 << 12)		/* Off-Chip Driver [SAM9 Only] */ | ||||
| #define		AT91_DDRSDRC_DQMS	(1 << 16)		/* Mask Data is Shared [SAM9 Only] */ | ||||
| #define		AT91_DDRSDRC_ACTBST	(1 << 18)		/* Active Bank X to Burst Stop Read Access Bank Y [SAM9 Only] */ | ||||
| 
 | ||||
| #define AT91_DDRSDRC_T0PR	0x0C	/* Timing 0 Register */ | ||||
| #define		AT91_DDRSDRC_TRAS	(0xf <<  0)		/* Active to Precharge delay */ | ||||
|  | @ -59,7 +59,8 @@ | |||
| #define		AT91_DDRSDRC_TRP	(0xf << 16)		/* Row precharge delay */ | ||||
| #define		AT91_DDRSDRC_TRRD	(0xf << 20)		/* Active BankA to BankB */ | ||||
| #define		AT91_DDRSDRC_TWTR	(0x7 << 24)		/* Internal Write to Read delay */ | ||||
| #define		AT91_DDRSDRC_RED_WRRD	(0x1 << 27)		/* Reduce Write to Read Delay */ | ||||
| #define		AT91CAP9_DDRSDRC_TWTR	(1   << 24)		/* Internal Write to Read delay */ | ||||
| #define		AT91_DDRSDRC_RED_WRRD	(0x1 << 27)		/* Reduce Write to Read Delay [SAM9 Only] */ | ||||
| #define		AT91_DDRSDRC_TMRD	(0xf << 28)		/* Load mode to active/refresh delay */ | ||||
| 
 | ||||
| #define AT91_DDRSDRC_T1PR	0x10	/* Timing 1 Register */ | ||||
|  | @ -68,13 +69,14 @@ | |||
| #define		AT91_DDRSDRC_TXSRD	(0xff << 16)		/* Exit self-refresh to read */ | ||||
| #define		AT91_DDRSDRC_TXP	(0xf  << 24)		/* Exit power-down delay */ | ||||
| 
 | ||||
| #define AT91_DDRSDRC_T2PR	0x14	/* Timing 2 Register */ | ||||
| #define AT91_DDRSDRC_T2PR	0x14	/* Timing 2 Register [SAM9 Only] */ | ||||
| #define		AT91_DDRSDRC_TXARD	(0xf  << 0)		/* Exit active power down delay to read command in mode "Fast Exit" */ | ||||
| #define		AT91_DDRSDRC_TXARDS	(0xf  << 4)		/* Exit active power down delay to read command in mode "Slow Exit" */ | ||||
| #define		AT91_DDRSDRC_TRPA	(0xf  << 8)		/* Row Precharge All delay */ | ||||
| #define		AT91_DDRSDRC_TRTP	(0x7  << 12)		/* Read to Precharge delay */ | ||||
| 
 | ||||
| #define AT91_DDRSDRC_LPR	0x1C	/* Low Power Register */ | ||||
| #define AT91CAP9_DDRSDRC_LPR	0x18	/* Low Power Register */ | ||||
| #define		AT91_DDRSDRC_LPCB	(3 << 0)		/* Low-power Configurations */ | ||||
| #define			AT91_DDRSDRC_LPCB_DISABLE		0 | ||||
| #define			AT91_DDRSDRC_LPCB_SELF_REFRESH		1 | ||||
|  | @ -92,32 +94,40 @@ | |||
| #define		AT91_DDRSDRC_UPD_MR	(3 << 20)	 /* Update load mode register and extended mode register */ | ||||
| 
 | ||||
| #define AT91_DDRSDRC_MDR	0x20	/* Memory Device Register */ | ||||
| #define AT91CAP9_DDRSDRC_MDR	0x1C	/* Memory Device Register */ | ||||
| #define		AT91_DDRSDRC_MD		(3 << 0)		/* Memory Device Type */ | ||||
| #define			AT91_DDRSDRC_MD_SDR		0 | ||||
| #define			AT91_DDRSDRC_MD_LOW_POWER_SDR	1 | ||||
| #define			AT91CAP9_DDRSDRC_MD_DDR		2 | ||||
| #define			AT91_DDRSDRC_MD_LOW_POWER_DDR	3 | ||||
| #define			AT91_DDRSDRC_MD_DDR2		6 | ||||
| #define			AT91_DDRSDRC_MD_DDR2		6	/* [SAM9 Only] */ | ||||
| #define		AT91_DDRSDRC_DBW	(1 << 4)		/* Data Bus Width */ | ||||
| #define			AT91_DDRSDRC_DBW_32BITS		(0 <<  4) | ||||
| #define			AT91_DDRSDRC_DBW_16BITS		(1 <<  4) | ||||
| 
 | ||||
| #define AT91_DDRSDRC_DLL	0x24	/* DLL Information Register */ | ||||
| #define AT91CAP9_DDRSDRC_DLL	0x20	/* DLL Information Register */ | ||||
| #define		AT91_DDRSDRC_MDINC	(1 << 0)		/* Master Delay increment */ | ||||
| #define		AT91_DDRSDRC_MDDEC	(1 << 1)		/* Master Delay decrement */ | ||||
| #define		AT91_DDRSDRC_MDOVF	(1 << 2)		/* Master Delay Overflow */ | ||||
| #define		AT91CAP9_DDRSDRC_SDCOVF	(1 << 3)		/* Slave Delay Correction Overflow */ | ||||
| #define		AT91CAP9_DDRSDRC_SDCUDF	(1 << 4)		/* Slave Delay Correction Underflow */ | ||||
| #define		AT91CAP9_DDRSDRC_SDERF	(1 << 5)		/* Slave Delay Correction error */ | ||||
| #define		AT91_DDRSDRC_MDVAL	(0xff <<  8)		/* Master Delay value */ | ||||
| #define		AT91CAP9_DDRSDRC_SDVAL	(0xff << 16)		/* Slave Delay value */ | ||||
| #define		AT91CAP9_DDRSDRC_SDCVAL	(0xff << 24)		/* Slave Delay Correction value */ | ||||
| 
 | ||||
| #define AT91_DDRSDRC_HS		0x2C	/* High Speed Register */ | ||||
| #define AT91_DDRSDRC_HS		0x2C	/* High Speed Register [SAM9 Only] */ | ||||
| #define		AT91_DDRSDRC_DIS_ATCP_RD	(1 << 2)	/* Anticip read access is disabled */ | ||||
| 
 | ||||
| #define AT91_DDRSDRC_DELAY(n)	(0x30 + (0x4 * (n)))	/* Delay I/O Register n */ | ||||
| 
 | ||||
| #define AT91_DDRSDRC_WPMR	0xE4	/* Write Protect Mode Register */ | ||||
| #define AT91_DDRSDRC_WPMR	0xE4	/* Write Protect Mode Register [SAM9 Only] */ | ||||
| #define		AT91_DDRSDRC_WP		(1 << 0)		/* Write protect enable */ | ||||
| #define		AT91_DDRSDRC_WPKEY	(0xffffff << 8)		/* Write protect key */ | ||||
| #define		AT91_DDRSDRC_KEY	(0x444452 << 8)		/* Write protect key = "DDR" */ | ||||
| 
 | ||||
| #define AT91_DDRSDRC_WPSR	0xE8	/* Write Protect Status Register */ | ||||
| #define AT91_DDRSDRC_WPSR	0xE8	/* Write Protect Status Register [SAM9 Only] */ | ||||
| #define		AT91_DDRSDRC_WPVS	(1 << 0)		/* Write protect violation status */ | ||||
| #define		AT91_DDRSDRC_WPVSRC	(0xffff << 8)		/* Write protect violation source */ | ||||
| 
 | ||||
|  |  | |||
|  | @ -90,7 +90,6 @@ | |||
| #define AT91_DDRSDRC0	(0xffffe600 - AT91_BASE_SYS) | ||||
| #define AT91_MATRIX	(0xffffea00 - AT91_BASE_SYS) | ||||
| #define AT91_PMC	(0xfffffc00 - AT91_BASE_SYS) | ||||
| #define AT91_RSTC	(0xfffffd00 - AT91_BASE_SYS) | ||||
| #define AT91_GPBR	(0xfffffd60 - AT91_BASE_SYS) | ||||
| 
 | ||||
| #define AT91SAM9G45_BASE_ECC	0xffffe200 | ||||
|  | @ -102,6 +101,7 @@ | |||
| #define AT91SAM9G45_BASE_PIOC	0xfffff600 | ||||
| #define AT91SAM9G45_BASE_PIOD	0xfffff800 | ||||
| #define AT91SAM9G45_BASE_PIOE	0xfffffa00 | ||||
| #define AT91SAM9G45_BASE_RSTC	0xfffffd00 | ||||
| #define AT91SAM9G45_BASE_SHDWC	0xfffffd10 | ||||
| #define AT91SAM9G45_BASE_RTT	0xfffffd20 | ||||
| #define AT91SAM9G45_BASE_PIT	0xfffffd30 | ||||
|  |  | |||
|  | @ -72,7 +72,6 @@ | |||
| #define AT91_SDRAMC0	(0xffffea00 - AT91_BASE_SYS) | ||||
| #define AT91_MATRIX	(0xffffee00 - AT91_BASE_SYS) | ||||
| #define AT91_PMC	(0xfffffc00 - AT91_BASE_SYS) | ||||
| #define AT91_RSTC	(0xfffffd00 - AT91_BASE_SYS) | ||||
| #define AT91_SCKCR	(0xfffffd50 - AT91_BASE_SYS) | ||||
| #define AT91_GPBR	(0xfffffd60 - AT91_BASE_SYS) | ||||
| 
 | ||||
|  | @ -84,6 +83,7 @@ | |||
| #define AT91SAM9RL_BASE_PIOB	0xfffff600 | ||||
| #define AT91SAM9RL_BASE_PIOC	0xfffff800 | ||||
| #define AT91SAM9RL_BASE_PIOD	0xfffffa00 | ||||
| #define AT91SAM9RL_BASE_RSTC	0xfffffd00 | ||||
| #define AT91SAM9RL_BASE_SHDWC	0xfffffd10 | ||||
| #define AT91SAM9RL_BASE_RTT	0xfffffd20 | ||||
| #define AT91SAM9RL_BASE_PIT	0xfffffd30 | ||||
|  |  | |||
|  | @ -88,7 +88,7 @@ extern void __init at91_add_device_eth(struct macb_platform_data *data); | |||
| struct at91_usbh_data { | ||||
| 	u8		ports;		/* number of ports on root hub */ | ||||
| 	int		vbus_pin[2];	/* port power-control pin */ | ||||
| 	u8              vbus_pin_inverted; | ||||
| 	u8              vbus_pin_active_low[2]; | ||||
| 	u8              overcurrent_supported; | ||||
| 	int             overcurrent_pin[2]; | ||||
| 	u8              overcurrent_status[2]; | ||||
|  |  | |||
|  | @ -34,7 +34,6 @@ | |||
| /*
 | ||||
|  * Show the reason for the previous system reset. | ||||
|  */ | ||||
| #if defined(AT91_RSTC) | ||||
| 
 | ||||
| #include <mach/at91_rstc.h> | ||||
| #include <mach/at91_shdwc.h> | ||||
|  | @ -58,10 +57,10 @@ static void __init show_reset_status(void) | |||
| 	char *reason, *r2 = reset; | ||||
| 	u32 reset_type, wake_type; | ||||
| 
 | ||||
| 	if (!at91_shdwc_base) | ||||
| 	if (!at91_shdwc_base || !at91_rstc_base) | ||||
| 		return; | ||||
| 
 | ||||
| 	reset_type = at91_sys_read(AT91_RSTC_SR) & AT91_RSTC_RSTTYP; | ||||
| 	reset_type = at91_rstc_read(AT91_RSTC_SR) & AT91_RSTC_RSTTYP; | ||||
| 	wake_type = at91_shdwc_read(AT91_SHDW_SR); | ||||
| 
 | ||||
| 	switch (reset_type) { | ||||
|  | @ -102,10 +101,6 @@ static void __init show_reset_status(void) | |||
| 	} | ||||
| 	pr_info("AT91: Starting after %s %s\n", reason, r2); | ||||
| } | ||||
| #else | ||||
| static void __init show_reset_status(void) {} | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| static int at91_pm_valid_state(suspend_state_t state) | ||||
| { | ||||
|  |  | |||
|  | @ -25,21 +25,21 @@ static inline u32 sdram_selfrefresh_enable(void) | |||
| 								: : "r" (0)) | ||||
| 
 | ||||
| #elif defined(CONFIG_ARCH_AT91CAP9) | ||||
| #include <mach/at91cap9_ddrsdr.h> | ||||
| #include <mach/at91sam9_ddrsdr.h> | ||||
| 
 | ||||
| 
 | ||||
| static inline u32 sdram_selfrefresh_enable(void) | ||||
| { | ||||
| 	u32 saved_lpr, lpr; | ||||
| 
 | ||||
| 	saved_lpr = at91_ramc_read(0, AT91_DDRSDRC_LPR); | ||||
| 	saved_lpr = at91_ramc_read(0, AT91CAP9_DDRSDRC_LPR); | ||||
| 
 | ||||
| 	lpr = saved_lpr & ~AT91_DDRSDRC_LPCB; | ||||
| 	at91_ramc_write(0, AT91_DDRSDRC_LPR, lpr | AT91_DDRSDRC_LPCB_SELF_REFRESH); | ||||
| 	at91_ramc_write(0, AT91CAP9_DDRSDRC_LPR, lpr | AT91_DDRSDRC_LPCB_SELF_REFRESH); | ||||
| 	return saved_lpr; | ||||
| } | ||||
| 
 | ||||
| #define sdram_selfrefresh_disable(saved_lpr)	at91_ramc_write(0, AT91_DDRSDRC_LPR, saved_lpr) | ||||
| #define sdram_selfrefresh_disable(saved_lpr)	at91_ramc_write(0, AT91CAP9_DDRSDRC_LPR, saved_lpr) | ||||
| #define wait_for_interrupt_enable()		cpu_do_idle() | ||||
| 
 | ||||
| #elif defined(CONFIG_ARCH_AT91SAM9G45) | ||||
|  |  | |||
|  | @ -18,9 +18,8 @@ | |||
| 
 | ||||
| #if defined(CONFIG_ARCH_AT91RM9200) | ||||
| #include <mach/at91rm9200_mc.h> | ||||
| #elif defined(CONFIG_ARCH_AT91CAP9) | ||||
| #include <mach/at91cap9_ddrsdr.h> | ||||
| #elif defined(CONFIG_ARCH_AT91SAM9G45) | ||||
| #elif defined(CONFIG_ARCH_AT91CAP9) \ | ||||
| 	|| defined(CONFIG_ARCH_AT91SAM9G45) | ||||
| #include <mach/at91sam9_ddrsdr.h> | ||||
| #else | ||||
| #include <mach/at91sam9_sdramc.h> | ||||
|  |  | |||
|  | @ -29,9 +29,12 @@ EXPORT_SYMBOL(at91_soc_initdata); | |||
| void __init at91rm9200_set_type(int type) | ||||
| { | ||||
| 	if (type == ARCH_REVISON_9200_PQFP) | ||||
| 		at91_soc_initdata.subtype = AT91_SOC_RM9200_BGA; | ||||
| 	else | ||||
| 		at91_soc_initdata.subtype = AT91_SOC_RM9200_PQFP; | ||||
| 	else | ||||
| 		at91_soc_initdata.subtype = AT91_SOC_RM9200_BGA; | ||||
| 
 | ||||
| 	pr_info("AT91: filled in soc subtype: %s\n", | ||||
| 		at91_get_soc_subtype(&at91_soc_initdata)); | ||||
| } | ||||
| 
 | ||||
| void __init at91_init_irq_default(void) | ||||
|  | @ -281,6 +284,15 @@ void __init at91_ioremap_shdwc(u32 base_addr) | |||
| 	pm_power_off = at91sam9_poweroff; | ||||
| } | ||||
| 
 | ||||
| void __iomem *at91_rstc_base; | ||||
| 
 | ||||
| void __init at91_ioremap_rstc(u32 base_addr) | ||||
| { | ||||
| 	at91_rstc_base = ioremap(base_addr, 16); | ||||
| 	if (!at91_rstc_base) | ||||
| 		panic("Impossible to ioremap at91_rstc_base\n"); | ||||
| } | ||||
| 
 | ||||
| void __init at91_initialize(unsigned long main_clock) | ||||
| { | ||||
| 	at91_boot_soc.ioremap_registers(); | ||||
|  |  | |||
|  | @ -16,6 +16,7 @@ | |||
| #include <linux/io.h> | ||||
| 
 | ||||
| #include <asm/cacheflush.h> | ||||
| #include <asm/smp_plat.h> | ||||
| 
 | ||||
| #include <mach/regs-pmu.h> | ||||
| 
 | ||||
|  |  | |||
|  | @ -23,6 +23,7 @@ | |||
| 
 | ||||
| #include <asm/cacheflush.h> | ||||
| #include <asm/hardware/gic.h> | ||||
| #include <asm/smp_plat.h> | ||||
| #include <asm/smp_scu.h> | ||||
| 
 | ||||
| #include <mach/hardware.h> | ||||
|  |  | |||
|  | @ -25,6 +25,7 @@ | |||
| #include <linux/smp.h> | ||||
| 
 | ||||
| #include <asm/cacheflush.h> | ||||
| #include <asm/smp_plat.h> | ||||
| #include <asm/smp_scu.h> | ||||
| #include <asm/hardware/arm_timer.h> | ||||
| #include <asm/hardware/timer-sp.h> | ||||
|  | @ -72,9 +73,7 @@ static void __init highbank_map_io(void) | |||
| 
 | ||||
| void highbank_set_cpu_jump(int cpu, void *jump_addr) | ||||
| { | ||||
| #ifdef CONFIG_SMP | ||||
| 	cpu = cpu_logical_map(cpu); | ||||
| #endif | ||||
| 	writel(virt_to_phys(jump_addr), HB_JUMP_TABLE_VIRT(cpu)); | ||||
| 	__cpuc_flush_dcache_area(HB_JUMP_TABLE_VIRT(cpu), 16); | ||||
| 	outer_clean_range(HB_JUMP_TABLE_PHYS(cpu), | ||||
|  |  | |||
|  | @ -22,6 +22,18 @@ config ARCH_MX25 | |||
| config MACH_MX27 | ||||
| 	bool | ||||
| 
 | ||||
| config ARCH_MX5 | ||||
| 	bool | ||||
| 
 | ||||
| config ARCH_MX50 | ||||
| 	bool | ||||
| 
 | ||||
| config ARCH_MX51 | ||||
| 	bool | ||||
| 
 | ||||
| config ARCH_MX53 | ||||
| 	bool | ||||
| 
 | ||||
| config SOC_IMX1 | ||||
| 	bool | ||||
| 	select ARCH_MX1 | ||||
|  | @ -73,6 +85,31 @@ config SOC_IMX35 | |||
| 	select MXC_AVIC | ||||
| 	select SMP_ON_UP if SMP | ||||
| 
 | ||||
| config SOC_IMX5 | ||||
| 	select CPU_V7 | ||||
| 	select MXC_TZIC | ||||
| 	select ARCH_MXC_IOMUX_V3 | ||||
| 	select ARCH_MXC_AUDMUX_V2 | ||||
| 	select ARCH_HAS_CPUFREQ | ||||
| 	select ARCH_MX5 | ||||
| 	bool | ||||
| 
 | ||||
| config SOC_IMX50 | ||||
| 	bool | ||||
| 	select SOC_IMX5 | ||||
| 	select ARCH_MX50 | ||||
| 
 | ||||
| config	SOC_IMX51 | ||||
| 	bool | ||||
| 	select SOC_IMX5 | ||||
| 	select ARCH_MX5 | ||||
| 	select ARCH_MX51 | ||||
| 
 | ||||
| config	SOC_IMX53 | ||||
| 	bool | ||||
| 	select SOC_IMX5 | ||||
| 	select ARCH_MX5 | ||||
| 	select ARCH_MX53 | ||||
| 
 | ||||
| if ARCH_IMX_V4_V5 | ||||
| 
 | ||||
|  | @ -592,6 +629,207 @@ config MACH_VPR200 | |||
| 	  Include support for VPR200 platform. This includes specific | ||||
| 	  configurations for the board and its peripherals. | ||||
| 
 | ||||
| comment "i.MX5 platforms:" | ||||
| 
 | ||||
| config MACH_MX50_RDP | ||||
| 	bool "Support MX50 reference design platform" | ||||
| 	depends on BROKEN | ||||
| 	select SOC_IMX50 | ||||
| 	select IMX_HAVE_PLATFORM_IMX_I2C | ||||
| 	select IMX_HAVE_PLATFORM_IMX_UART | ||||
| 	select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX | ||||
| 	select IMX_HAVE_PLATFORM_SPI_IMX | ||||
| 	help | ||||
| 	  Include support for MX50 reference design platform (RDP) board. This | ||||
| 	  includes specific configurations for the board and its peripherals. | ||||
| 
 | ||||
| comment "i.MX51 machines:" | ||||
| 
 | ||||
| config MACH_IMX51_DT | ||||
| 	bool "Support i.MX51 platforms from device tree" | ||||
| 	select SOC_IMX51 | ||||
| 	select USE_OF | ||||
| 	select MACH_MX51_BABBAGE | ||||
| 	help | ||||
| 	  Include support for Freescale i.MX51 based platforms | ||||
| 	  using the device tree for discovery | ||||
| 
 | ||||
| config MACH_MX51_BABBAGE | ||||
| 	bool "Support MX51 BABBAGE platforms" | ||||
| 	select SOC_IMX51 | ||||
| 	select IMX_HAVE_PLATFORM_FSL_USB2_UDC | ||||
| 	select IMX_HAVE_PLATFORM_IMX2_WDT | ||||
| 	select IMX_HAVE_PLATFORM_IMX_I2C | ||||
| 	select IMX_HAVE_PLATFORM_IMX_UART | ||||
| 	select IMX_HAVE_PLATFORM_MXC_EHCI | ||||
| 	select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX | ||||
| 	select IMX_HAVE_PLATFORM_SPI_IMX | ||||
| 	help | ||||
| 	  Include support for MX51 Babbage platform, also known as MX51EVK in | ||||
| 	  u-boot. This includes specific configurations for the board and its | ||||
| 	  peripherals. | ||||
| 
 | ||||
| config MACH_MX51_3DS | ||||
| 	bool "Support MX51PDK (3DS)" | ||||
| 	select SOC_IMX51 | ||||
| 	select IMX_HAVE_PLATFORM_IMX2_WDT | ||||
| 	select IMX_HAVE_PLATFORM_IMX_KEYPAD | ||||
| 	select IMX_HAVE_PLATFORM_IMX_UART | ||||
| 	select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX | ||||
| 	select IMX_HAVE_PLATFORM_SPI_IMX | ||||
| 	select MXC_DEBUG_BOARD | ||||
| 	help | ||||
| 	  Include support for MX51PDK (3DS) platform. This includes specific | ||||
| 	  configurations for the board and its peripherals. | ||||
| 
 | ||||
| config MACH_EUKREA_CPUIMX51 | ||||
| 	bool "Support Eukrea CPUIMX51 module" | ||||
| 	select SOC_IMX51 | ||||
| 	select IMX_HAVE_PLATFORM_FSL_USB2_UDC | ||||
| 	select IMX_HAVE_PLATFORM_IMX_I2C | ||||
| 	select IMX_HAVE_PLATFORM_IMX_UART | ||||
| 	select IMX_HAVE_PLATFORM_MXC_EHCI | ||||
| 	select IMX_HAVE_PLATFORM_MXC_NAND | ||||
| 	select IMX_HAVE_PLATFORM_SPI_IMX | ||||
| 	help | ||||
| 	  Include support for Eukrea CPUIMX51 platform. This includes | ||||
| 	  specific configurations for the module and its peripherals. | ||||
| 
 | ||||
| choice | ||||
| 	prompt "Baseboard" | ||||
| 	depends on MACH_EUKREA_CPUIMX51 | ||||
| 	default MACH_EUKREA_MBIMX51_BASEBOARD | ||||
| 
 | ||||
| config MACH_EUKREA_MBIMX51_BASEBOARD | ||||
| 	prompt "Eukrea MBIMX51 development board" | ||||
| 	bool | ||||
| 	select IMX_HAVE_PLATFORM_IMX_KEYPAD | ||||
| 	select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX | ||||
| 	select LEDS_GPIO_REGISTER | ||||
| 	help | ||||
| 	  This adds board specific devices that can be found on Eukrea's | ||||
| 	  MBIMX51 evaluation board. | ||||
| 
 | ||||
| endchoice | ||||
| 
 | ||||
| config MACH_EUKREA_CPUIMX51SD | ||||
| 	bool "Support Eukrea CPUIMX51SD module" | ||||
| 	select SOC_IMX51 | ||||
| 	select IMX_HAVE_PLATFORM_FSL_USB2_UDC | ||||
| 	select IMX_HAVE_PLATFORM_IMX_I2C | ||||
| 	select IMX_HAVE_PLATFORM_IMX_UART | ||||
| 	select IMX_HAVE_PLATFORM_MXC_EHCI | ||||
| 	select IMX_HAVE_PLATFORM_MXC_NAND | ||||
| 	select IMX_HAVE_PLATFORM_SPI_IMX | ||||
| 	help | ||||
| 	  Include support for Eukrea CPUIMX51SD platform. This includes | ||||
| 	  specific configurations for the module and its peripherals. | ||||
| 
 | ||||
| choice | ||||
| 	prompt "Baseboard" | ||||
| 	depends on MACH_EUKREA_CPUIMX51SD | ||||
| 	default MACH_EUKREA_MBIMXSD51_BASEBOARD | ||||
| 
 | ||||
| config MACH_EUKREA_MBIMXSD51_BASEBOARD | ||||
| 	prompt "Eukrea MBIMXSD development board" | ||||
| 	bool | ||||
| 	select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX | ||||
| 	select LEDS_GPIO_REGISTER | ||||
| 	help | ||||
| 	  This adds board specific devices that can be found on Eukrea's | ||||
| 	  MBIMXSD evaluation board. | ||||
| 
 | ||||
| endchoice | ||||
| 
 | ||||
| config MX51_EFIKA_COMMON | ||||
| 	bool | ||||
| 	select SOC_IMX51 | ||||
| 	select IMX_HAVE_PLATFORM_IMX_UART | ||||
| 	select IMX_HAVE_PLATFORM_MXC_EHCI | ||||
| 	select IMX_HAVE_PLATFORM_PATA_IMX | ||||
| 	select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX | ||||
| 	select IMX_HAVE_PLATFORM_SPI_IMX | ||||
| 	select MXC_ULPI if USB_ULPI | ||||
| 
 | ||||
| config MACH_MX51_EFIKAMX | ||||
| 	bool "Support MX51 Genesi Efika MX nettop" | ||||
| 	select LEDS_GPIO_REGISTER | ||||
| 	select MX51_EFIKA_COMMON | ||||
| 	help | ||||
| 	  Include support for Genesi Efika MX nettop. This includes specific | ||||
| 	  configurations for the board and its peripherals. | ||||
| 
 | ||||
| config MACH_MX51_EFIKASB | ||||
| 	bool "Support MX51 Genesi Efika Smartbook" | ||||
| 	select LEDS_GPIO_REGISTER | ||||
| 	select MX51_EFIKA_COMMON | ||||
| 	help | ||||
| 	  Include support for Genesi Efika Smartbook. This includes specific | ||||
| 	  configurations for the board and its peripherals. | ||||
| 
 | ||||
| comment "i.MX53 machines:" | ||||
| 
 | ||||
| config MACH_IMX53_DT | ||||
| 	bool "Support i.MX53 platforms from device tree" | ||||
| 	select SOC_IMX53 | ||||
| 	select USE_OF | ||||
| 	select MACH_MX53_ARD | ||||
| 	select MACH_MX53_EVK | ||||
| 	select MACH_MX53_LOCO | ||||
| 	select MACH_MX53_SMD | ||||
| 	help | ||||
| 	  Include support for Freescale i.MX53 based platforms | ||||
| 	  using the device tree for discovery | ||||
| 
 | ||||
| config MACH_MX53_EVK | ||||
| 	bool "Support MX53 EVK platforms" | ||||
| 	select SOC_IMX53 | ||||
| 	select IMX_HAVE_PLATFORM_IMX2_WDT | ||||
| 	select IMX_HAVE_PLATFORM_IMX_UART | ||||
| 	select IMX_HAVE_PLATFORM_IMX_I2C | ||||
| 	select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX | ||||
| 	select IMX_HAVE_PLATFORM_SPI_IMX | ||||
| 	select LEDS_GPIO_REGISTER | ||||
| 	help | ||||
| 	  Include support for MX53 EVK platform. This includes specific | ||||
| 	  configurations for the board and its peripherals. | ||||
| 
 | ||||
| config MACH_MX53_SMD | ||||
| 	bool "Support MX53 SMD platforms" | ||||
| 	select SOC_IMX53 | ||||
| 	select IMX_HAVE_PLATFORM_IMX2_WDT | ||||
| 	select IMX_HAVE_PLATFORM_IMX_I2C | ||||
| 	select IMX_HAVE_PLATFORM_IMX_UART | ||||
| 	select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX | ||||
| 	help | ||||
| 	  Include support for MX53 SMD platform. This includes specific | ||||
| 	  configurations for the board and its peripherals. | ||||
| 
 | ||||
| config MACH_MX53_LOCO | ||||
| 	bool "Support MX53 LOCO platforms" | ||||
| 	select SOC_IMX53 | ||||
| 	select IMX_HAVE_PLATFORM_IMX2_WDT | ||||
| 	select IMX_HAVE_PLATFORM_IMX_I2C | ||||
| 	select IMX_HAVE_PLATFORM_IMX_UART | ||||
| 	select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX | ||||
| 	select IMX_HAVE_PLATFORM_GPIO_KEYS | ||||
| 	select LEDS_GPIO_REGISTER | ||||
| 	help | ||||
| 	  Include support for MX53 LOCO platform. This includes specific | ||||
| 	  configurations for the board and its peripherals. | ||||
| 
 | ||||
| config MACH_MX53_ARD | ||||
| 	bool "Support MX53 ARD platforms" | ||||
| 	select SOC_IMX53 | ||||
| 	select IMX_HAVE_PLATFORM_IMX2_WDT | ||||
| 	select IMX_HAVE_PLATFORM_IMX_I2C | ||||
| 	select IMX_HAVE_PLATFORM_IMX_UART | ||||
| 	select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX | ||||
| 	select IMX_HAVE_PLATFORM_GPIO_KEYS | ||||
| 	help | ||||
| 	  Include support for MX53 ARD platform. This includes specific | ||||
| 	  configurations for the board and its peripherals. | ||||
| 
 | ||||
| comment "i.MX6 family:" | ||||
| 
 | ||||
| config SOC_IMX6Q | ||||
|  |  | |||
|  | @ -11,6 +11,8 @@ obj-$(CONFIG_SOC_IMX27) += clock-imx27.o mm-imx27.o ehci-imx27.o | |||
| obj-$(CONFIG_SOC_IMX31) += mm-imx3.o cpu-imx31.o clock-imx31.o iomux-imx31.o ehci-imx31.o | ||||
| obj-$(CONFIG_SOC_IMX35) += mm-imx3.o cpu-imx35.o clock-imx35.o ehci-imx35.o | ||||
| 
 | ||||
| obj-$(CONFIG_SOC_IMX5) += cpu-imx5.o mm-imx5.o clock-mx51-mx53.o ehci-imx5.o pm-imx5.o cpu_op-mx51.o | ||||
| 
 | ||||
| # Support for CMOS sensor interface
 | ||||
| obj-$(CONFIG_MX1_VIDEO) += mx1-camera-fiq.o mx1-camera-fiq-ksym.o | ||||
| 
 | ||||
|  | @ -75,3 +77,22 @@ obj-$(CONFIG_SOC_IMX6Q) += clock-imx6q.o mach-imx6q.o | |||
| ifeq ($(CONFIG_PM),y) | ||||
| obj-$(CONFIG_SOC_IMX6Q) += pm-imx6q.o | ||||
| endif | ||||
| 
 | ||||
| # i.MX5 based machines
 | ||||
| obj-$(CONFIG_MACH_MX51_BABBAGE) += mach-mx51_babbage.o | ||||
| obj-$(CONFIG_MACH_MX51_3DS) += mach-mx51_3ds.o | ||||
| obj-$(CONFIG_MACH_MX53_EVK) += mach-mx53_evk.o | ||||
| obj-$(CONFIG_MACH_MX53_SMD) += mach-mx53_smd.o | ||||
| obj-$(CONFIG_MACH_MX53_LOCO) += mach-mx53_loco.o | ||||
| obj-$(CONFIG_MACH_MX53_ARD) += mach-mx53_ard.o | ||||
| obj-$(CONFIG_MACH_EUKREA_CPUIMX51) += mach-cpuimx51.o | ||||
| obj-$(CONFIG_MACH_EUKREA_MBIMX51_BASEBOARD) += eukrea_mbimx51-baseboard.o | ||||
| obj-$(CONFIG_MACH_EUKREA_CPUIMX51SD) += mach-cpuimx51sd.o | ||||
| obj-$(CONFIG_MACH_EUKREA_MBIMXSD51_BASEBOARD) += eukrea_mbimxsd-baseboard.o | ||||
| obj-$(CONFIG_MX51_EFIKA_COMMON) += mx51_efika.o | ||||
| obj-$(CONFIG_MACH_MX51_EFIKAMX) += mach-mx51_efikamx.o | ||||
| obj-$(CONFIG_MACH_MX51_EFIKASB) += mach-mx51_efikasb.o | ||||
| obj-$(CONFIG_MACH_MX50_RDP) += mach-mx50_rdp.o | ||||
| 
 | ||||
| obj-$(CONFIG_MACH_IMX51_DT) += imx51-dt.o | ||||
| obj-$(CONFIG_MACH_IMX53_DT) += imx53-dt.o | ||||
|  |  | |||
|  | @ -22,6 +22,18 @@ zreladdr-$(CONFIG_SOC_IMX35)	+= 0x80008000 | |||
| params_phys-$(CONFIG_SOC_IMX35)	:= 0x80000100 | ||||
| initrd_phys-$(CONFIG_SOC_IMX35)	:= 0x80800000 | ||||
| 
 | ||||
| zreladdr-$(CONFIG_SOC_IMX50)	+= 0x70008000 | ||||
| params_phys-$(CONFIG_SOC_IMX50)	:= 0x70000100 | ||||
| initrd_phys-$(CONFIG_SOC_IMX50)	:= 0x70800000 | ||||
| 
 | ||||
| zreladdr-$(CONFIG_SOC_IMX51)	+= 0x90008000 | ||||
| params_phys-$(CONFIG_SOC_IMX51)	:= 0x90000100 | ||||
| initrd_phys-$(CONFIG_SOC_IMX51)	:= 0x90800000 | ||||
| 
 | ||||
| zreladdr-$(CONFIG_SOC_IMX53)	+= 0x70008000 | ||||
| params_phys-$(CONFIG_SOC_IMX53)	:= 0x70000100 | ||||
| initrd_phys-$(CONFIG_SOC_IMX53)	:= 0x70800000 | ||||
| 
 | ||||
| zreladdr-$(CONFIG_SOC_IMX6Q)	+= 0x10008000 | ||||
| params_phys-$(CONFIG_SOC_IMX6Q)	:= 0x10000100 | ||||
| initrd_phys-$(CONFIG_SOC_IMX6Q)	:= 0x10800000 | ||||
|  |  | |||
|  | @ -814,6 +814,16 @@ DEF_PFD(pll3_pfd_540m, PFD_480, PFD1, &pll3_usb_otg); | |||
| DEF_PFD(pll3_pfd_508m, PFD_480, PFD2, &pll3_usb_otg); | ||||
| DEF_PFD(pll3_pfd_454m, PFD_480, PFD3, &pll3_usb_otg); | ||||
| 
 | ||||
| static unsigned long twd_clk_get_rate(struct clk *clk) | ||||
| { | ||||
| 	return clk_get_rate(clk->parent) / 2; | ||||
| } | ||||
| 
 | ||||
| static struct clk twd_clk = { | ||||
| 	.parent = &arm_clk, | ||||
| 	.get_rate = twd_clk_get_rate, | ||||
| }; | ||||
| 
 | ||||
| static unsigned long pll2_200m_get_rate(struct clk *clk) | ||||
| { | ||||
| 	return clk_get_rate(clk->parent) / 2; | ||||
|  | @ -1894,6 +1904,7 @@ static struct clk_lookup lookups[] = { | |||
| 	_REGISTER_CLOCK("20ec000.sdma", NULL, sdma_clk), | ||||
| 	_REGISTER_CLOCK("20bc000.wdog", NULL, dummy_clk), | ||||
| 	_REGISTER_CLOCK("20c0000.wdog", NULL, dummy_clk), | ||||
| 	_REGISTER_CLOCK("smp_twd", NULL, twd_clk), | ||||
| 	_REGISTER_CLOCK(NULL, "ckih", ckih_clk), | ||||
| 	_REGISTER_CLOCK(NULL, "ckil_clk", ckil_clk), | ||||
| 	_REGISTER_CLOCK(NULL, "aips_tz1_clk", aips_tz1_clk), | ||||
|  |  | |||
|  | @ -23,7 +23,7 @@ | |||
| #include <mach/common.h> | ||||
| #include <mach/clock.h> | ||||
| 
 | ||||
| #include "crm_regs.h" | ||||
| #include "crm-regs-imx5.h" | ||||
| 
 | ||||
| /* External clock values passed-in by the board code */ | ||||
| static unsigned long external_high_reference, external_low_reference; | ||||
|  | @ -32,7 +32,6 @@ | |||
| #include <asm/mach/arch.h> | ||||
| #include <asm/mach/time.h> | ||||
| 
 | ||||
| #include "crm_regs.h" | ||||
| #include "devices-imx53.h" | ||||
| 
 | ||||
| #define ARD_ETHERNET_INT_B	IMX_GPIO_NR(2, 31) | ||||
|  | @ -189,8 +188,10 @@ static int weim_cs_config(void) | |||
| 		return -ENOMEM; | ||||
| 
 | ||||
| 	iomuxc_base = ioremap(MX53_IOMUXC_BASE_ADDR, SZ_4K); | ||||
| 	if (!iomuxc_base) | ||||
| 	if (!iomuxc_base) { | ||||
| 		iounmap(weim_base); | ||||
| 		return -ENOMEM; | ||||
| 	} | ||||
| 
 | ||||
| 	/* CS1 timings for LAN9220 */ | ||||
| 	writel(0x20001, (weim_base + 0x18)); | ||||
|  | @ -37,7 +37,6 @@ | |||
| #define EVK_ECSPI1_CS1		IMX_GPIO_NR(3, 19) | ||||
| #define MX53EVK_LED		IMX_GPIO_NR(7, 7) | ||||
| 
 | ||||
| #include "crm_regs.h" | ||||
| #include "devices-imx53.h" | ||||
| 
 | ||||
| static iomux_v3_cfg_t mx53_evk_pads[] = { | ||||
|  | @ -32,7 +32,6 @@ | |||
| #include <asm/mach/arch.h> | ||||
| #include <asm/mach/time.h> | ||||
| 
 | ||||
| #include "crm_regs.h" | ||||
| #include "devices-imx53.h" | ||||
| 
 | ||||
| #define MX53_LOCO_POWER			IMX_GPIO_NR(1, 8) | ||||
|  | @ -31,7 +31,6 @@ | |||
| #include <asm/mach/arch.h> | ||||
| #include <asm/mach/time.h> | ||||
| 
 | ||||
| #include "crm_regs.h" | ||||
| #include "devices-imx53.h" | ||||
| 
 | ||||
| #define SMD_FEC_PHY_RST		IMX_GPIO_NR(7, 6) | ||||
|  | @ -1,8 +1,6 @@ | |||
| /*
 | ||||
|  * Copyright (C) 2011 Freescale Semiconductor, Inc. All Rights Reserved. | ||||
|  */ | ||||
| 
 | ||||
| /*
 | ||||
|  *  Copyright (C) 2011 Freescale Semiconductor, Inc. All Rights Reserved. | ||||
|  * | ||||
|  * The code contained herein is licensed under the GNU General Public | ||||
|  * License. You may obtain a copy of the GNU General Public License | ||||
|  * Version 2 or later at the following locations: | ||||
|  | @ -10,14 +8,22 @@ | |||
|  * http://www.opensource.org/licenses/gpl-license.html
 | ||||
|  * http://www.gnu.org/copyleft/gpl.html
 | ||||
|  */ | ||||
| #include <linux/platform_device.h> | ||||
| #include <linux/suspend.h> | ||||
| #include <linux/clk.h> | ||||
| #include <linux/io.h> | ||||
| #include <mach/hardware.h> | ||||
| #include <linux/err.h> | ||||
| #include <asm/cacheflush.h> | ||||
| #include <asm/tlbflush.h> | ||||
| #include <mach/common.h> | ||||
| #include "crm_regs.h" | ||||
| #include <mach/hardware.h> | ||||
| #include "crm-regs-imx5.h" | ||||
| 
 | ||||
| /* set cpu low power mode before WFI instruction. This function is called
 | ||||
|   * mx5 because it can be used for mx50, mx51, and mx53.*/ | ||||
| static struct clk *gpc_dvfs_clk; | ||||
| 
 | ||||
| /*
 | ||||
|  * set cpu low power mode before WFI instruction. This function is called | ||||
|  * mx5 because it can be used for mx50, mx51, and mx53. | ||||
|  */ | ||||
| void mx5_cpu_lp_set(enum mxc_cpu_pwr_mode mode) | ||||
| { | ||||
| 	u32 plat_lpc, arm_srpgcr, ccm_clpcr; | ||||
|  | @ -80,3 +86,68 @@ void mx5_cpu_lp_set(enum mxc_cpu_pwr_mode mode) | |||
| 		__raw_writel(empgc1, MXC_SRPG_EMPGC1_SRPGCR); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| static int mx5_suspend_prepare(void) | ||||
| { | ||||
| 	return clk_enable(gpc_dvfs_clk); | ||||
| } | ||||
| 
 | ||||
| static int mx5_suspend_enter(suspend_state_t state) | ||||
| { | ||||
| 	switch (state) { | ||||
| 	case PM_SUSPEND_MEM: | ||||
| 		mx5_cpu_lp_set(STOP_POWER_OFF); | ||||
| 		break; | ||||
| 	case PM_SUSPEND_STANDBY: | ||||
| 		mx5_cpu_lp_set(WAIT_UNCLOCKED_POWER_OFF); | ||||
| 		break; | ||||
| 	default: | ||||
| 		return -EINVAL; | ||||
| 	} | ||||
| 
 | ||||
| 	if (state == PM_SUSPEND_MEM) { | ||||
| 		local_flush_tlb_all(); | ||||
| 		flush_cache_all(); | ||||
| 
 | ||||
| 		/*clear the EMPGC0/1 bits */ | ||||
| 		__raw_writel(0, MXC_SRPG_EMPGC0_SRPGCR); | ||||
| 		__raw_writel(0, MXC_SRPG_EMPGC1_SRPGCR); | ||||
| 	} | ||||
| 	cpu_do_idle(); | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static void mx5_suspend_finish(void) | ||||
| { | ||||
| 	clk_disable(gpc_dvfs_clk); | ||||
| } | ||||
| 
 | ||||
| static int mx5_pm_valid(suspend_state_t state) | ||||
| { | ||||
| 	return (state > PM_SUSPEND_ON && state <= PM_SUSPEND_MAX); | ||||
| } | ||||
| 
 | ||||
| static const struct platform_suspend_ops mx5_suspend_ops = { | ||||
| 	.valid = mx5_pm_valid, | ||||
| 	.prepare = mx5_suspend_prepare, | ||||
| 	.enter = mx5_suspend_enter, | ||||
| 	.finish = mx5_suspend_finish, | ||||
| }; | ||||
| 
 | ||||
| static int __init mx5_pm_init(void) | ||||
| { | ||||
| 	if (!cpu_is_mx51() && !cpu_is_mx53()) | ||||
| 		return 0; | ||||
| 
 | ||||
| 	if (gpc_dvfs_clk == NULL) | ||||
| 		gpc_dvfs_clk = clk_get(NULL, "gpc_dvfs"); | ||||
| 
 | ||||
| 	if (!IS_ERR(gpc_dvfs_clk)) { | ||||
| 		if (cpu_is_mx51()) | ||||
| 			suspend_set_ops(&mx5_suspend_ops); | ||||
| 	} else | ||||
| 		return -EPERM; | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| device_initcall(mx5_pm_init); | ||||
|  | @ -15,6 +15,7 @@ | |||
| #include <linux/of.h> | ||||
| #include <linux/of_address.h> | ||||
| #include <linux/smp.h> | ||||
| #include <asm/smp_plat.h> | ||||
| 
 | ||||
| #define SRC_SCR				0x000 | ||||
| #define SRC_GPR1			0x020 | ||||
|  | @ -24,10 +25,6 @@ | |||
| 
 | ||||
| static void __iomem *src_base; | ||||
| 
 | ||||
| #ifndef CONFIG_SMP | ||||
| #define cpu_logical_map(cpu)		0 | ||||
| #endif | ||||
| 
 | ||||
| void imx_enable_cpu(int cpu, bool enable) | ||||
| { | ||||
| 	u32 mask, val; | ||||
|  |  | |||
|  | @ -11,6 +11,7 @@ | |||
| #include <linux/smp.h> | ||||
| 
 | ||||
| #include <asm/cacheflush.h> | ||||
| #include <asm/smp_plat.h> | ||||
| 
 | ||||
| extern volatile int pen_release; | ||||
| 
 | ||||
|  |  | |||
|  | @ -20,6 +20,7 @@ | |||
| #include <asm/cacheflush.h> | ||||
| #include <asm/cputype.h> | ||||
| #include <asm/mach-types.h> | ||||
| #include <asm/smp_plat.h> | ||||
| 
 | ||||
| #include <mach/msm_iomap.h> | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,244 +0,0 @@ | |||
| if ARCH_MX5 | ||||
| 
 | ||||
| # ARCH_MX5/50/53 are left to mark places where prevent multi-soc in single | ||||
| # image. So for most time, SOC_IMX50/51/53 should be used. | ||||
| 
 | ||||
| config ARCH_MX51 | ||||
| 	bool | ||||
| 
 | ||||
| config ARCH_MX50 | ||||
| 	bool | ||||
| 
 | ||||
| config ARCH_MX53 | ||||
| 	bool | ||||
| 
 | ||||
| config SOC_IMX50 | ||||
| 	bool | ||||
| 	select CPU_V7 | ||||
| 	select ARM_L1_CACHE_SHIFT_6 | ||||
| 	select MXC_TZIC | ||||
| 	select ARCH_MXC_IOMUX_V3 | ||||
| 	select ARCH_MXC_AUDMUX_V2 | ||||
| 	select ARCH_HAS_CPUFREQ | ||||
| 	select ARCH_MX50 | ||||
| 
 | ||||
| config	SOC_IMX51 | ||||
| 	bool | ||||
| 	select CPU_V7 | ||||
| 	select ARM_L1_CACHE_SHIFT_6 | ||||
| 	select MXC_TZIC | ||||
| 	select ARCH_MXC_IOMUX_V3 | ||||
| 	select ARCH_MXC_AUDMUX_V2 | ||||
| 	select ARCH_HAS_CPUFREQ | ||||
| 	select ARCH_MX51 | ||||
| 
 | ||||
| config	SOC_IMX53 | ||||
| 	bool | ||||
| 	select CPU_V7 | ||||
| 	select ARM_L1_CACHE_SHIFT_6 | ||||
| 	select MXC_TZIC | ||||
| 	select ARCH_MXC_IOMUX_V3 | ||||
| 	select ARCH_MX53 | ||||
| 
 | ||||
| #comment "i.MX50 machines:" | ||||
| 
 | ||||
| config MACH_MX50_RDP | ||||
| 	bool "Support MX50 reference design platform" | ||||
| 	depends on BROKEN | ||||
| 	select SOC_IMX50 | ||||
| 	select IMX_HAVE_PLATFORM_IMX_I2C | ||||
| 	select IMX_HAVE_PLATFORM_IMX_UART | ||||
| 	select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX | ||||
| 	select IMX_HAVE_PLATFORM_SPI_IMX | ||||
| 	help | ||||
| 	  Include support for MX50 reference design platform (RDP) board. This | ||||
| 	  includes specific configurations for the board and its peripherals. | ||||
| 
 | ||||
| comment "i.MX51 machines:" | ||||
| 
 | ||||
| config MACH_IMX51_DT | ||||
| 	bool "Support i.MX51 platforms from device tree" | ||||
| 	select SOC_IMX51 | ||||
| 	select USE_OF | ||||
| 	select MACH_MX51_BABBAGE | ||||
| 	help | ||||
| 	  Include support for Freescale i.MX51 based platforms | ||||
| 	  using the device tree for discovery | ||||
| 
 | ||||
| config MACH_MX51_BABBAGE | ||||
| 	bool "Support MX51 BABBAGE platforms" | ||||
| 	select SOC_IMX51 | ||||
| 	select IMX_HAVE_PLATFORM_FSL_USB2_UDC | ||||
| 	select IMX_HAVE_PLATFORM_IMX2_WDT | ||||
| 	select IMX_HAVE_PLATFORM_IMX_I2C | ||||
| 	select IMX_HAVE_PLATFORM_IMX_UART | ||||
| 	select IMX_HAVE_PLATFORM_MXC_EHCI | ||||
| 	select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX | ||||
| 	select IMX_HAVE_PLATFORM_SPI_IMX | ||||
| 	help | ||||
| 	  Include support for MX51 Babbage platform, also known as MX51EVK in | ||||
| 	  u-boot. This includes specific configurations for the board and its | ||||
| 	  peripherals. | ||||
| 
 | ||||
| config MACH_MX51_3DS | ||||
| 	bool "Support MX51PDK (3DS)" | ||||
| 	select SOC_IMX51 | ||||
| 	select IMX_HAVE_PLATFORM_IMX2_WDT | ||||
| 	select IMX_HAVE_PLATFORM_IMX_KEYPAD | ||||
| 	select IMX_HAVE_PLATFORM_IMX_UART | ||||
| 	select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX | ||||
| 	select IMX_HAVE_PLATFORM_SPI_IMX | ||||
| 	select MXC_DEBUG_BOARD | ||||
| 	help | ||||
| 	  Include support for MX51PDK (3DS) platform. This includes specific | ||||
| 	  configurations for the board and its peripherals. | ||||
| 
 | ||||
| config MACH_EUKREA_CPUIMX51 | ||||
| 	bool "Support Eukrea CPUIMX51 module" | ||||
| 	select SOC_IMX51 | ||||
| 	select IMX_HAVE_PLATFORM_FSL_USB2_UDC | ||||
| 	select IMX_HAVE_PLATFORM_IMX_I2C | ||||
| 	select IMX_HAVE_PLATFORM_IMX_UART | ||||
| 	select IMX_HAVE_PLATFORM_MXC_EHCI | ||||
| 	select IMX_HAVE_PLATFORM_MXC_NAND | ||||
| 	select IMX_HAVE_PLATFORM_SPI_IMX | ||||
| 	help | ||||
| 	  Include support for Eukrea CPUIMX51 platform. This includes | ||||
| 	  specific configurations for the module and its peripherals. | ||||
| 
 | ||||
| choice | ||||
| 	prompt "Baseboard" | ||||
| 	depends on MACH_EUKREA_CPUIMX51 | ||||
| 	default MACH_EUKREA_MBIMX51_BASEBOARD | ||||
| 
 | ||||
| config MACH_EUKREA_MBIMX51_BASEBOARD | ||||
| 	prompt "Eukrea MBIMX51 development board" | ||||
| 	bool | ||||
| 	select IMX_HAVE_PLATFORM_IMX_KEYPAD | ||||
| 	select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX | ||||
| 	select LEDS_GPIO_REGISTER | ||||
| 	help | ||||
| 	  This adds board specific devices that can be found on Eukrea's | ||||
| 	  MBIMX51 evaluation board. | ||||
| 
 | ||||
| endchoice | ||||
| 
 | ||||
| config MACH_EUKREA_CPUIMX51SD | ||||
| 	bool "Support Eukrea CPUIMX51SD module" | ||||
| 	select SOC_IMX51 | ||||
| 	select IMX_HAVE_PLATFORM_FSL_USB2_UDC | ||||
| 	select IMX_HAVE_PLATFORM_IMX_I2C | ||||
| 	select IMX_HAVE_PLATFORM_IMX_UART | ||||
| 	select IMX_HAVE_PLATFORM_MXC_EHCI | ||||
| 	select IMX_HAVE_PLATFORM_MXC_NAND | ||||
| 	select IMX_HAVE_PLATFORM_SPI_IMX | ||||
| 	help | ||||
| 	  Include support for Eukrea CPUIMX51SD platform. This includes | ||||
| 	  specific configurations for the module and its peripherals. | ||||
| 
 | ||||
| choice | ||||
| 	prompt "Baseboard" | ||||
| 	depends on MACH_EUKREA_CPUIMX51SD | ||||
| 	default MACH_EUKREA_MBIMXSD51_BASEBOARD | ||||
| 
 | ||||
| config MACH_EUKREA_MBIMXSD51_BASEBOARD | ||||
| 	prompt "Eukrea MBIMXSD development board" | ||||
| 	bool | ||||
| 	select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX | ||||
| 	select LEDS_GPIO_REGISTER | ||||
| 	help | ||||
| 	  This adds board specific devices that can be found on Eukrea's | ||||
| 	  MBIMXSD evaluation board. | ||||
| 
 | ||||
| endchoice | ||||
| 
 | ||||
| config MX51_EFIKA_COMMON | ||||
| 	bool | ||||
| 	select SOC_IMX51 | ||||
| 	select IMX_HAVE_PLATFORM_IMX_UART | ||||
| 	select IMX_HAVE_PLATFORM_MXC_EHCI | ||||
| 	select IMX_HAVE_PLATFORM_PATA_IMX | ||||
| 	select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX | ||||
| 	select IMX_HAVE_PLATFORM_SPI_IMX | ||||
| 	select MXC_ULPI if USB_ULPI | ||||
| 
 | ||||
| config MACH_MX51_EFIKAMX | ||||
| 	bool "Support MX51 Genesi Efika MX nettop" | ||||
| 	select LEDS_GPIO_REGISTER | ||||
| 	select MX51_EFIKA_COMMON | ||||
| 	help | ||||
| 	  Include support for Genesi Efika MX nettop. This includes specific | ||||
| 	  configurations for the board and its peripherals. | ||||
| 
 | ||||
| config MACH_MX51_EFIKASB | ||||
| 	bool "Support MX51 Genesi Efika Smartbook" | ||||
| 	select LEDS_GPIO_REGISTER | ||||
| 	select MX51_EFIKA_COMMON | ||||
| 	help | ||||
| 	  Include support for Genesi Efika Smartbook. This includes specific | ||||
| 	  configurations for the board and its peripherals. | ||||
| 
 | ||||
| comment "i.MX53 machines:" | ||||
| 
 | ||||
| config MACH_IMX53_DT | ||||
| 	bool "Support i.MX53 platforms from device tree" | ||||
| 	select SOC_IMX53 | ||||
| 	select USE_OF | ||||
| 	select MACH_MX53_ARD | ||||
| 	select MACH_MX53_EVK | ||||
| 	select MACH_MX53_LOCO | ||||
| 	select MACH_MX53_SMD | ||||
| 	help | ||||
| 	  Include support for Freescale i.MX53 based platforms | ||||
| 	  using the device tree for discovery | ||||
| 
 | ||||
| config MACH_MX53_EVK | ||||
| 	bool "Support MX53 EVK platforms" | ||||
| 	select SOC_IMX53 | ||||
| 	select IMX_HAVE_PLATFORM_IMX2_WDT | ||||
| 	select IMX_HAVE_PLATFORM_IMX_UART | ||||
| 	select IMX_HAVE_PLATFORM_IMX_I2C | ||||
| 	select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX | ||||
| 	select IMX_HAVE_PLATFORM_SPI_IMX | ||||
| 	select LEDS_GPIO_REGISTER | ||||
| 	help | ||||
| 	  Include support for MX53 EVK platform. This includes specific | ||||
| 	  configurations for the board and its peripherals. | ||||
| 
 | ||||
| config MACH_MX53_SMD | ||||
| 	bool "Support MX53 SMD platforms" | ||||
| 	select SOC_IMX53 | ||||
| 	select IMX_HAVE_PLATFORM_IMX2_WDT | ||||
| 	select IMX_HAVE_PLATFORM_IMX_I2C | ||||
| 	select IMX_HAVE_PLATFORM_IMX_UART | ||||
| 	select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX | ||||
| 	help | ||||
| 	  Include support for MX53 SMD platform. This includes specific | ||||
| 	  configurations for the board and its peripherals. | ||||
| 
 | ||||
| config MACH_MX53_LOCO | ||||
| 	bool "Support MX53 LOCO platforms" | ||||
| 	select SOC_IMX53 | ||||
| 	select IMX_HAVE_PLATFORM_IMX2_WDT | ||||
| 	select IMX_HAVE_PLATFORM_IMX_I2C | ||||
| 	select IMX_HAVE_PLATFORM_IMX_UART | ||||
| 	select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX | ||||
| 	select IMX_HAVE_PLATFORM_GPIO_KEYS | ||||
| 	select LEDS_GPIO_REGISTER | ||||
| 	help | ||||
| 	  Include support for MX53 LOCO platform. This includes specific | ||||
| 	  configurations for the board and its peripherals. | ||||
| 
 | ||||
| config MACH_MX53_ARD | ||||
| 	bool "Support MX53 ARD platforms" | ||||
| 	select SOC_IMX53 | ||||
| 	select IMX_HAVE_PLATFORM_IMX2_WDT | ||||
| 	select IMX_HAVE_PLATFORM_IMX_I2C | ||||
| 	select IMX_HAVE_PLATFORM_IMX_UART | ||||
| 	select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX | ||||
| 	select IMX_HAVE_PLATFORM_GPIO_KEYS | ||||
| 	help | ||||
| 	  Include support for MX53 ARD platform. This includes specific | ||||
| 	  configurations for the board and its peripherals. | ||||
| 
 | ||||
| endif | ||||
|  | @ -1,26 +0,0 @@ | |||
| #
 | ||||
| # Makefile for the linux kernel.
 | ||||
| #
 | ||||
| 
 | ||||
| # Object file lists.
 | ||||
| obj-y   := cpu.o mm.o clock-mx51-mx53.o ehci.o system.o | ||||
| 
 | ||||
| obj-$(CONFIG_PM) += pm-imx5.o | ||||
| obj-$(CONFIG_CPU_FREQ_IMX)    += cpu_op-mx51.o | ||||
| obj-$(CONFIG_MACH_MX51_BABBAGE) += board-mx51_babbage.o | ||||
| obj-$(CONFIG_MACH_MX51_3DS) += board-mx51_3ds.o | ||||
| obj-$(CONFIG_MACH_MX53_EVK) += board-mx53_evk.o | ||||
| obj-$(CONFIG_MACH_MX53_SMD) += board-mx53_smd.o | ||||
| obj-$(CONFIG_MACH_MX53_LOCO) += board-mx53_loco.o | ||||
| obj-$(CONFIG_MACH_MX53_ARD) += board-mx53_ard.o | ||||
| obj-$(CONFIG_MACH_EUKREA_CPUIMX51) += board-cpuimx51.o | ||||
| obj-$(CONFIG_MACH_EUKREA_MBIMX51_BASEBOARD) += eukrea_mbimx51-baseboard.o | ||||
| obj-$(CONFIG_MACH_EUKREA_CPUIMX51SD) += board-cpuimx51sd.o | ||||
| obj-$(CONFIG_MACH_EUKREA_MBIMXSD51_BASEBOARD) += eukrea_mbimxsd-baseboard.o | ||||
| obj-$(CONFIG_MX51_EFIKA_COMMON) += mx51_efika.o | ||||
| obj-$(CONFIG_MACH_MX51_EFIKAMX) += board-mx51_efikamx.o | ||||
| obj-$(CONFIG_MACH_MX51_EFIKASB) += board-mx51_efikasb.o | ||||
| obj-$(CONFIG_MACH_MX50_RDP) += board-mx50_rdp.o | ||||
| 
 | ||||
| obj-$(CONFIG_MACH_IMX51_DT) += imx51-dt.o | ||||
| obj-$(CONFIG_MACH_IMX53_DT) += imx53-dt.o | ||||
|  | @ -1,9 +0,0 @@ | |||
|    zreladdr-$(CONFIG_ARCH_MX50)	+= 0x70008000 | ||||
| params_phys-$(CONFIG_ARCH_MX50)	:= 0x70000100 | ||||
| initrd_phys-$(CONFIG_ARCH_MX50)	:= 0x70800000 | ||||
|    zreladdr-$(CONFIG_ARCH_MX51)	+= 0x90008000 | ||||
| params_phys-$(CONFIG_ARCH_MX51)	:= 0x90000100 | ||||
| initrd_phys-$(CONFIG_ARCH_MX51)	:= 0x90800000 | ||||
|    zreladdr-$(CONFIG_ARCH_MX53)	+= 0x70008000 | ||||
| params_phys-$(CONFIG_ARCH_MX53)	:= 0x70000100 | ||||
| initrd_phys-$(CONFIG_ARCH_MX53)	:= 0x70800000 | ||||
|  | @ -1,83 +0,0 @@ | |||
| /*
 | ||||
|  *  Copyright (C) 2011 Freescale Semiconductor, Inc. All Rights Reserved. | ||||
|  * | ||||
|  * The code contained herein is licensed under the GNU General Public | ||||
|  * License. You may obtain a copy of the GNU General Public License | ||||
|  * Version 2 or later at the following locations: | ||||
|  * | ||||
|  * http://www.opensource.org/licenses/gpl-license.html
 | ||||
|  * http://www.gnu.org/copyleft/gpl.html
 | ||||
|  */ | ||||
| #include <linux/suspend.h> | ||||
| #include <linux/clk.h> | ||||
| #include <linux/io.h> | ||||
| #include <linux/err.h> | ||||
| #include <asm/cacheflush.h> | ||||
| #include <asm/tlbflush.h> | ||||
| #include <mach/common.h> | ||||
| #include <mach/hardware.h> | ||||
| #include "crm_regs.h" | ||||
| 
 | ||||
| static struct clk *gpc_dvfs_clk; | ||||
| 
 | ||||
| static int mx5_suspend_prepare(void) | ||||
| { | ||||
| 	return clk_enable(gpc_dvfs_clk); | ||||
| } | ||||
| 
 | ||||
| static int mx5_suspend_enter(suspend_state_t state) | ||||
| { | ||||
| 	switch (state) { | ||||
| 	case PM_SUSPEND_MEM: | ||||
| 		mx5_cpu_lp_set(STOP_POWER_OFF); | ||||
| 		break; | ||||
| 	case PM_SUSPEND_STANDBY: | ||||
| 		mx5_cpu_lp_set(WAIT_UNCLOCKED_POWER_OFF); | ||||
| 		break; | ||||
| 	default: | ||||
| 		return -EINVAL; | ||||
| 	} | ||||
| 
 | ||||
| 	if (state == PM_SUSPEND_MEM) { | ||||
| 		local_flush_tlb_all(); | ||||
| 		flush_cache_all(); | ||||
| 
 | ||||
| 		/*clear the EMPGC0/1 bits */ | ||||
| 		__raw_writel(0, MXC_SRPG_EMPGC0_SRPGCR); | ||||
| 		__raw_writel(0, MXC_SRPG_EMPGC1_SRPGCR); | ||||
| 	} | ||||
| 	cpu_do_idle(); | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static void mx5_suspend_finish(void) | ||||
| { | ||||
| 	clk_disable(gpc_dvfs_clk); | ||||
| } | ||||
| 
 | ||||
| static int mx5_pm_valid(suspend_state_t state) | ||||
| { | ||||
| 	return (state > PM_SUSPEND_ON && state <= PM_SUSPEND_MAX); | ||||
| } | ||||
| 
 | ||||
| static const struct platform_suspend_ops mx5_suspend_ops = { | ||||
| 	.valid = mx5_pm_valid, | ||||
| 	.prepare = mx5_suspend_prepare, | ||||
| 	.enter = mx5_suspend_enter, | ||||
| 	.finish = mx5_suspend_finish, | ||||
| }; | ||||
| 
 | ||||
| static int __init mx5_pm_init(void) | ||||
| { | ||||
| 	if (gpc_dvfs_clk == NULL) | ||||
| 		gpc_dvfs_clk = clk_get(NULL, "gpc_dvfs"); | ||||
| 
 | ||||
| 	if (!IS_ERR(gpc_dvfs_clk)) { | ||||
| 		if (cpu_is_mx51()) | ||||
| 			suspend_set_ops(&mx5_suspend_ops); | ||||
| 	} else | ||||
| 		return -EPERM; | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| device_initcall(mx5_pm_init); | ||||
|  | @ -33,7 +33,6 @@ config ARCH_OMAP3 | |||
| 	default y | ||||
| 	select CPU_V7 | ||||
| 	select USB_ARCH_HAS_EHCI | ||||
| 	select ARM_L1_CACHE_SHIFT_6 if !ARCH_OMAP4 | ||||
| 	select ARCH_HAS_OPP | ||||
| 	select PM_OPP if PM | ||||
| 	select ARM_CPU_SUSPEND if PM | ||||
|  |  | |||
|  | @ -415,29 +415,9 @@ static struct resource pxa_rtc_resources[] = { | |||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| static struct resource sa1100_rtc_resources[] = { | ||||
| 	[0] = { | ||||
| 		.start  = 0x40900000, | ||||
| 		.end	= 0x409000ff, | ||||
| 		.flags  = IORESOURCE_MEM, | ||||
| 	}, | ||||
| 	[1] = { | ||||
| 		.start  = IRQ_RTC1Hz, | ||||
| 		.end    = IRQ_RTC1Hz, | ||||
| 		.flags  = IORESOURCE_IRQ, | ||||
| 	}, | ||||
| 	[2] = { | ||||
| 		.start  = IRQ_RTCAlrm, | ||||
| 		.end    = IRQ_RTCAlrm, | ||||
| 		.flags  = IORESOURCE_IRQ, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| struct platform_device sa1100_device_rtc = { | ||||
| 	.name		= "sa1100-rtc", | ||||
| 	.id		= -1, | ||||
| 	.num_resources  = ARRAY_SIZE(sa1100_rtc_resources), | ||||
| 	.resource       = sa1100_rtc_resources, | ||||
| }; | ||||
| 
 | ||||
| struct platform_device pxa_device_rtc = { | ||||
|  |  | |||
Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Greg Kroah-Hartman
						Greg Kroah-Hartman