mirror of
				https://source.denx.de/u-boot/u-boot.git
				synced 2025-10-31 00:11:51 +01:00 
			
		
		
		
	Rewrite the resource management code (i.e. I/O memory, clock gating, gpio) so it doesn't depend on any global state. This is necessary because this code is heavily used before relocation to RAM, so we can't write to any global variables. As an added bonus, this makes u-boot's memory footprint a bit smaller, although some functionality has been left out; all clocks are enabled all the time, and there's no checking for gpio line conflicts. Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
		
			
				
	
	
		
			127 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * Register definitions for Static Memory Controller
 | |
|  */
 | |
| #ifndef __CPU_AT32AP_HSMC3_H__
 | |
| #define __CPU_AT32AP_HSMC3_H__
 | |
| 
 | |
| /* HSMC3 register offsets */
 | |
| #define HSMC3_SETUP0				0x0000
 | |
| #define HSMC3_PULSE0				0x0004
 | |
| #define HSMC3_CYCLE0				0x0008
 | |
| #define HSMC3_MODE0				0x000c
 | |
| #define HSMC3_SETUP1				0x0010
 | |
| #define HSMC3_PULSE1				0x0014
 | |
| #define HSMC3_CYCLE1				0x0018
 | |
| #define HSMC3_MODE1				0x001c
 | |
| #define HSMC3_SETUP2				0x0020
 | |
| #define HSMC3_PULSE2				0x0024
 | |
| #define HSMC3_CYCLE2				0x0028
 | |
| #define HSMC3_MODE2				0x002c
 | |
| #define HSMC3_SETUP3				0x0030
 | |
| #define HSMC3_PULSE3				0x0034
 | |
| #define HSMC3_CYCLE3				0x0038
 | |
| #define HSMC3_MODE3				0x003c
 | |
| #define HSMC3_SETUP4				0x0040
 | |
| #define HSMC3_PULSE4				0x0044
 | |
| #define HSMC3_CYCLE4				0x0048
 | |
| #define HSMC3_MODE4				0x004c
 | |
| #define HSMC3_SETUP5				0x0050
 | |
| #define HSMC3_PULSE5				0x0054
 | |
| #define HSMC3_CYCLE5				0x0058
 | |
| #define HSMC3_MODE5				0x005c
 | |
| 
 | |
| /* Bitfields in SETUP0 */
 | |
| #define HSMC3_NWE_SETUP_OFFSET			0
 | |
| #define HSMC3_NWE_SETUP_SIZE			6
 | |
| #define HSMC3_NCS_WR_SETUP_OFFSET		8
 | |
| #define HSMC3_NCS_WR_SETUP_SIZE			6
 | |
| #define HSMC3_NRD_SETUP_OFFSET			16
 | |
| #define HSMC3_NRD_SETUP_SIZE			6
 | |
| #define HSMC3_NCS_RD_SETUP_OFFSET		24
 | |
| #define HSMC3_NCS_RD_SETUP_SIZE			6
 | |
| 
 | |
| /* Bitfields in PULSE0 */
 | |
| #define HSMC3_NWE_PULSE_OFFSET			0
 | |
| #define HSMC3_NWE_PULSE_SIZE			7
 | |
| #define HSMC3_NCS_WR_PULSE_OFFSET		8
 | |
| #define HSMC3_NCS_WR_PULSE_SIZE			7
 | |
| #define HSMC3_NRD_PULSE_OFFSET			16
 | |
| #define HSMC3_NRD_PULSE_SIZE			7
 | |
| #define HSMC3_NCS_RD_PULSE_OFFSET		24
 | |
| #define HSMC3_NCS_RD_PULSE_SIZE			7
 | |
| 
 | |
| /* Bitfields in CYCLE0 */
 | |
| #define HSMC3_NWE_CYCLE_OFFSET			0
 | |
| #define HSMC3_NWE_CYCLE_SIZE			9
 | |
| #define HSMC3_NRD_CYCLE_OFFSET			16
 | |
| #define HSMC3_NRD_CYCLE_SIZE			9
 | |
| 
 | |
| /* Bitfields in MODE0 */
 | |
| #define HSMC3_READ_MODE_OFFSET			0
 | |
| #define HSMC3_READ_MODE_SIZE			1
 | |
| #define HSMC3_WRITE_MODE_OFFSET			1
 | |
| #define HSMC3_WRITE_MODE_SIZE			1
 | |
| #define HSMC3_EXNW_MODE_OFFSET			4
 | |
| #define HSMC3_EXNW_MODE_SIZE			2
 | |
| #define HSMC3_BAT_OFFSET			8
 | |
| #define HSMC3_BAT_SIZE				1
 | |
| #define HSMC3_DBW_OFFSET			12
 | |
| #define HSMC3_DBW_SIZE				2
 | |
| #define HSMC3_TDF_CYCLES_OFFSET			16
 | |
| #define HSMC3_TDF_CYCLES_SIZE			4
 | |
| #define HSMC3_TDF_MODE_OFFSET			20
 | |
| #define HSMC3_TDF_MODE_SIZE			1
 | |
| #define HSMC3_PMEN_OFFSET			24
 | |
| #define HSMC3_PMEN_SIZE				1
 | |
| #define HSMC3_PS_OFFSET				28
 | |
| #define HSMC3_PS_SIZE				2
 | |
| 
 | |
| /* Bitfields in MODE1 */
 | |
| #define HSMC3_PD_OFFSET				28
 | |
| #define HSMC3_PD_SIZE				2
 | |
| 
 | |
| /* Constants for READ_MODE */
 | |
| #define HSMC3_READ_MODE_NCS_CONTROLLED		0
 | |
| #define HSMC3_READ_MODE_NRD_CONTROLLED		1
 | |
| 
 | |
| /* Constants for WRITE_MODE */
 | |
| #define HSMC3_WRITE_MODE_NCS_CONTROLLED		0
 | |
| #define HSMC3_WRITE_MODE_NWE_CONTROLLED		1
 | |
| 
 | |
| /* Constants for EXNW_MODE */
 | |
| #define HSMC3_EXNW_MODE_DISABLED		0
 | |
| #define HSMC3_EXNW_MODE_RESERVED		1
 | |
| #define HSMC3_EXNW_MODE_FROZEN			2
 | |
| #define HSMC3_EXNW_MODE_READY			3
 | |
| 
 | |
| /* Constants for BAT */
 | |
| #define HSMC3_BAT_BYTE_SELECT			0
 | |
| #define HSMC3_BAT_BYTE_WRITE			1
 | |
| 
 | |
| /* Constants for DBW */
 | |
| #define HSMC3_DBW_8_BITS			0
 | |
| #define HSMC3_DBW_16_BITS			1
 | |
| #define HSMC3_DBW_32_BITS			2
 | |
| 
 | |
| /* Bit manipulation macros */
 | |
| #define HSMC3_BIT(name)						\
 | |
| 	(1 << HSMC3_##name##_OFFSET)
 | |
| #define HSMC3_BF(name,value)					\
 | |
| 	(((value) & ((1 << HSMC3_##name##_SIZE) - 1))		\
 | |
| 	 << HSMC3_##name##_OFFSET)
 | |
| #define HSMC3_BFEXT(name,value)					\
 | |
| 	(((value) >> HSMC3_##name##_OFFSET)			\
 | |
| 	 & ((1 << HSMC3_##name##_SIZE) - 1))
 | |
| #define HSMC3_BFINS(name,value,old)\
 | |
| 	(((old) & ~(((1 << HSMC3_##name##_SIZE) - 1)		\
 | |
| 		    << HSMC3_##name##_OFFSET))			\
 | |
| 	 | HSMC3_BF(name,value))
 | |
| 
 | |
| /* Register access macros */
 | |
| #define hsmc3_readl(reg)					\
 | |
| 	readl((void *)HSMC_BASE + HSMC3_##reg)
 | |
| #define hsmc3_writel(reg,value)					\
 | |
| 	writel((value), (void *)HSMC_BASE + HSMC3_##reg)
 | |
| 
 | |
| #endif /* __CPU_AT32AP_HSMC3_H__ */
 |