mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 08:44:41 +00:00 
			
		
		
		
	arm-soc fixes for 3.3-rc:
AT91 needed reset fixes which resulted in some minor code refactoring, it also adds a feature-removal for one of their platforms for 3.4. The USB patches have been acked by Greg K-H. i.MX and ux500 both have some minor fixes, nothing controversial. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iQIcBAABAgAGBQJPIlhOAAoJEIwa5zzehBx3l+UP/1LcalLOTEU0bthHNBUoQYEQ drDqaFlnBsDryuOzbtGGO41jRySqQWQfQTiVThrEpE3ZUH+NLih5cDRk2sUIzdMd 8tFWMN7HJnvaA0LT6ODcnC4HoRUBWieYLrPnjA+rlUPFCY/vJQ5010xFhZs2nGBo Y5AOQ6Fun/1z5P4V5u+6GzKPPsJZPaCqEPwLJoc5yCJgvfO6RnAFuICv0F183lMh TYVkZISF3GYdD/wWQZuytYJRj6IB3mV1GCe0q1fRD9E49929mOnC4SZ3gwa3nF4D 9IAJviVq+YtEIwTw4H+DJ+k7NXS7GR+F6hxcCrWygEYlOgFqHlRYIL35pxXWq+Sm s0jMxC3RdyXmbfhuwi4o607OwMQkwVyNM+N5xUGaww4Inn3Lw6VPaqyQRtW6Bhiz o/fyuOALFt7FDoLII02BJgFMdoeEV1gfXlTTdiz7yEekE0h9ng0A3VSRQRph3kLn CScQZyOFGrFFm9UNM0T0FrWlshd+ZU1yQGAdZHIX/Fv/euLNhXDnF2bKxAx7CiTh wcFezf7vjXjs/iTV+ZsDBe0oKWGmdvxVJksDV6X74DlMfZd9AYi+ntvXzvWrcHdp C6wmTtePlSbEMem3RhWEQD8EeTy/qwzPRwLVNqlyT7QURhqCgJlbx133gMEt6113 wd95I9VZjKE6KSKh7BsS =nS4F -----END PGP SIGNATURE----- Merge tag 'fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc arm-soc fixes for 3.3-rc: AT91 needed reset fixes which resulted in some minor code refactoring, it also adds a feature-removal for one of their platforms for 3.4. The USB patches have been acked by Greg K-H. i.MX and ux500 both have some minor fixes, nothing controversial. * tag 'fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: arch/arm/mach-imx/mach-mx53_ard.c: add missing iounmap ARM: imx: iomux-v1.h: Fix build error due to __init annotation ARM: at91: Fix at91sam9g45 and at91cap9 reset ARM: at91: make rstc soc independent ARM: at91: introduce AT91_SAM9_ALT_RESET to select the at91sam9 alternative reset ARM: at91: merge at91cap9_ddrsdr.h in at91sam9_ddrsdr.h ARM: at91: fix cap9 ddrsdr register ARM/USB: at91/ohci-at91: rename vbus_pin_inverted to vbus_pin_active_low USB: at91: fix clk_get error handling ARM: at91: removal of CAP9 SoC family ARM: at91: fix at91rm9200 soc subtype handling mach-ux500: no MMC_CAP_SD_HIGHSPEED on Snowball mach-ux500: enable ARM errata 764369 mach-ux500: do not override outer.inv_all mach-ux500: musb: now musb is always in OTG mode ARM: imx6: add missing twd_clk for imx6q clock
This commit is contained in:
		
						commit
						81bc3009e0
					
				
					 34 changed files with 199 additions and 218 deletions
				
			
		|  | @ -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> | ||||
|  |  | |||
|  | @ -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(); | ||||
|  |  | |||
|  | @ -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), | ||||
|  |  | |||
|  | @ -188,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)); | ||||
|  |  | |||
|  | @ -7,6 +7,7 @@ config UX500_SOC_COMMON | |||
| 	select HAS_MTU | ||||
| 	select ARM_ERRATA_753970 | ||||
| 	select ARM_ERRATA_754322 | ||||
| 	select ARM_ERRATA_764369 | ||||
| 
 | ||||
| menu "Ux500 SoC" | ||||
| 
 | ||||
|  |  | |||
|  | @ -261,6 +261,8 @@ void __init mop500_sdi_init(void) | |||
| 
 | ||||
| void __init snowball_sdi_init(void) | ||||
| { | ||||
| 	/* On Snowball MMC_CAP_SD_HIGHSPEED isn't supported (Hardware issue?) */ | ||||
| 	mop500_sdi0_data.capabilities &= ~MMC_CAP_SD_HIGHSPEED; | ||||
| 	/* On-board eMMC */ | ||||
| 	db8500_add_sdi4(&mop500_sdi4_data, U8500_SDI_V2_PERIPHID); | ||||
| 	/* External Micro SD slot */ | ||||
|  |  | |||
|  | @ -12,44 +12,6 @@ | |||
| 
 | ||||
| static void __iomem *l2x0_base; | ||||
| 
 | ||||
| static inline void ux500_cache_wait(void __iomem *reg, unsigned long mask) | ||||
| { | ||||
| 	/* wait for the operation to complete */ | ||||
| 	while (readl_relaxed(reg) & mask) | ||||
| 		cpu_relax(); | ||||
| } | ||||
| 
 | ||||
| static inline void ux500_cache_sync(void) | ||||
| { | ||||
| 	writel_relaxed(0, l2x0_base + L2X0_CACHE_SYNC); | ||||
| 	ux500_cache_wait(l2x0_base + L2X0_CACHE_SYNC, 1); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * The L2 cache cannot be turned off in the non-secure world. | ||||
|  * Dummy until a secure service is in place. | ||||
|  */ | ||||
| static void ux500_l2x0_disable(void) | ||||
| { | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * This is only called when doing a kexec, just after turning off the L2 | ||||
|  * and L1 cache, and it is surrounded by a spinlock in the generic version. | ||||
|  * However, we're not really turning off the L2 cache right now and the | ||||
|  * PL310 does not support exclusive accesses (used to implement the spinlock). | ||||
|  * So, the invalidation needs to be done without the spinlock. | ||||
|  */ | ||||
| static void ux500_l2x0_inv_all(void) | ||||
| { | ||||
| 	uint32_t l2x0_way_mask = (1<<16) - 1;	/* Bitmask of active ways */ | ||||
| 
 | ||||
| 	/* invalidate all ways */ | ||||
| 	writel_relaxed(l2x0_way_mask, l2x0_base + L2X0_INV_WAY); | ||||
| 	ux500_cache_wait(l2x0_base + L2X0_INV_WAY, l2x0_way_mask); | ||||
| 	ux500_cache_sync(); | ||||
| } | ||||
| 
 | ||||
| static int __init ux500_l2x0_unlock(void) | ||||
| { | ||||
| 	int i; | ||||
|  | @ -85,9 +47,13 @@ static int __init ux500_l2x0_init(void) | |||
| 	/* 64KB way size, 8 way associativity, force WA */ | ||||
| 	l2x0_init(l2x0_base, 0x3e060000, 0xc0000fff); | ||||
| 
 | ||||
| 	/* Override invalidate function */ | ||||
| 	outer_cache.disable = ux500_l2x0_disable; | ||||
| 	outer_cache.inv_all = ux500_l2x0_inv_all; | ||||
| 	/*
 | ||||
| 	 * We can't disable l2 as we are in non secure mode, currently | ||||
| 	 * this seems be called only during kexec path. So let's | ||||
| 	 * override outer.disable with nasty assignment until we have | ||||
| 	 * some SMI service available. | ||||
| 	 */ | ||||
| 	outer_cache.disable = NULL; | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
|  |  | |||
|  | @ -95,13 +95,7 @@ static struct musb_hdrc_config musb_hdrc_config = { | |||
| }; | ||||
| 
 | ||||
| static struct musb_hdrc_platform_data musb_platform_data = { | ||||
| #if defined(CONFIG_USB_MUSB_OTG) | ||||
| 	.mode = MUSB_OTG, | ||||
| #elif defined(CONFIG_USB_MUSB_PERIPHERAL) | ||||
| 	.mode = MUSB_PERIPHERAL, | ||||
| #else /* defined(CONFIG_USB_MUSB_HOST) */ | ||||
| 	.mode = MUSB_HOST, | ||||
| #endif | ||||
| 	.config = &musb_hdrc_config, | ||||
| 	.board_data = &musb_board_data, | ||||
| }; | ||||
|  |  | |||
|  | @ -96,6 +96,6 @@ extern int mxc_gpio_mode(int gpio_mode); | |||
| extern int mxc_gpio_setup_multiple_pins(const int *pin_list, unsigned count, | ||||
| 		const char *label); | ||||
| 
 | ||||
| extern int __init imx_iomuxv1_init(void __iomem *base, int numports); | ||||
| extern int imx_iomuxv1_init(void __iomem *base, int numports); | ||||
| 
 | ||||
| #endif /* __MACH_IOMUX_V1_H__ */ | ||||
|  |  | |||
|  | @ -139,8 +139,23 @@ static int usb_hcd_at91_probe(const struct hc_driver *driver, | |||
| 	} | ||||
| 
 | ||||
| 	iclk = clk_get(&pdev->dev, "ohci_clk"); | ||||
| 	if (IS_ERR(iclk)) { | ||||
| 		dev_err(&pdev->dev, "failed to get ohci_clk\n"); | ||||
| 		retval = PTR_ERR(iclk); | ||||
| 		goto err3; | ||||
| 	} | ||||
| 	fclk = clk_get(&pdev->dev, "uhpck"); | ||||
| 	if (IS_ERR(fclk)) { | ||||
| 		dev_err(&pdev->dev, "failed to get uhpck\n"); | ||||
| 		retval = PTR_ERR(fclk); | ||||
| 		goto err4; | ||||
| 	} | ||||
| 	hclk = clk_get(&pdev->dev, "hclk"); | ||||
| 	if (IS_ERR(hclk)) { | ||||
| 		dev_err(&pdev->dev, "failed to get hclk\n"); | ||||
| 		retval = PTR_ERR(hclk); | ||||
| 		goto err5; | ||||
| 	} | ||||
| 
 | ||||
| 	at91_start_hc(pdev); | ||||
| 	ohci_hcd_init(hcd_to_ohci(hcd)); | ||||
|  | @ -153,9 +168,12 @@ static int usb_hcd_at91_probe(const struct hc_driver *driver, | |||
| 	at91_stop_hc(pdev); | ||||
| 
 | ||||
| 	clk_put(hclk); | ||||
|  err5: | ||||
| 	clk_put(fclk); | ||||
|  err4: | ||||
| 	clk_put(iclk); | ||||
| 
 | ||||
|  err3: | ||||
| 	iounmap(hcd->regs); | ||||
| 
 | ||||
|  err2: | ||||
|  | @ -226,7 +244,8 @@ static void ohci_at91_usb_set_power(struct at91_usbh_data *pdata, int port, int | |||
| 	if (!gpio_is_valid(pdata->vbus_pin[port])) | ||||
| 		return; | ||||
| 
 | ||||
| 	gpio_set_value(pdata->vbus_pin[port], !pdata->vbus_pin_inverted ^ enable); | ||||
| 	gpio_set_value(pdata->vbus_pin[port], | ||||
| 		       !pdata->vbus_pin_active_low[port] ^ enable); | ||||
| } | ||||
| 
 | ||||
| static int ohci_at91_usb_get_power(struct at91_usbh_data *pdata, int port) | ||||
|  | @ -237,7 +256,8 @@ static int ohci_at91_usb_get_power(struct at91_usbh_data *pdata, int port) | |||
| 	if (!gpio_is_valid(pdata->vbus_pin[port])) | ||||
| 		return -EINVAL; | ||||
| 
 | ||||
| 	return gpio_get_value(pdata->vbus_pin[port]) ^ !pdata->vbus_pin_inverted; | ||||
| 	return gpio_get_value(pdata->vbus_pin[port]) ^ | ||||
| 		!pdata->vbus_pin_active_low[port]; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Linus Torvalds
						Linus Torvalds