tegra2: Add arch_cpu_init() to fire up Cortex-A9
We want to move away from a special Tegra2 start-up, and just use arch_cpu_init() instead. However, if we run board_init_f() from boot we need to build it for ARMv4T, since the Tegra's AVP start-up CPU does not support ARMv7. The effect of this is to do the AVP init earlier, and in arch_cpu_init(), rather that board_early_init_f(). Signed-off-by: Simon Glass <sjg@chromium.org> Signed-off-by: Tom Warren <twarren@nvidia.com>
This commit is contained in:
		
							parent
							
								
									5fac236a97
								
							
						
					
					
						commit
						e43d6ed932
					
				|  | @ -23,6 +23,7 @@ | ||||||
| 
 | 
 | ||||||
| #include <common.h> | #include <common.h> | ||||||
| #include <asm/io.h> | #include <asm/io.h> | ||||||
|  | #include "ap20.h" | ||||||
| #include <asm/arch/sys_proto.h> | #include <asm/arch/sys_proto.h> | ||||||
| #include <asm/arch/tegra2.h> | #include <asm/arch/tegra2.h> | ||||||
| #include <asm/arch/pmc.h> | #include <asm/arch/pmc.h> | ||||||
|  | @ -86,3 +87,17 @@ int checkboard(void) | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| #endif	/* CONFIG_DISPLAY_BOARDINFO */ | #endif	/* CONFIG_DISPLAY_BOARDINFO */ | ||||||
|  | 
 | ||||||
|  | #ifdef CONFIG_ARCH_CPU_INIT | ||||||
|  | /*
 | ||||||
|  |  * Note this function is executed by the ARM7TDMI AVP. It does not return | ||||||
|  |  * in this case. It is also called once the A9 starts up, but does nothing in | ||||||
|  |  * that case. | ||||||
|  |  */ | ||||||
|  | int arch_cpu_init(void) | ||||||
|  | { | ||||||
|  | 	/* Fire up the Cortex A9 */ | ||||||
|  | 	tegra2_start(); | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | @ -26,3 +26,9 @@ | ||||||
| 
 | 
 | ||||||
| # Use ARMv4 for Tegra2 - initial code runs on the AVP, which is an ARM7TDI.
 | # Use ARMv4 for Tegra2 - initial code runs on the AVP, which is an ARM7TDI.
 | ||||||
| PLATFORM_CPPFLAGS += -march=armv4 | PLATFORM_CPPFLAGS += -march=armv4 | ||||||
|  | 
 | ||||||
|  | # Tegra has an ARMv4T CPU which runs board_init_f(), so we must build this
 | ||||||
|  | # file with compatible flags
 | ||||||
|  | ifdef CONFIG_TEGRA2 | ||||||
|  | CFLAGS_arch/arm/lib/board.o += -march=armv4t | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | @ -125,9 +125,6 @@ int board_early_init_f(void) | ||||||
| 
 | 
 | ||||||
| 	/* Initialize periph GPIOs */ | 	/* Initialize periph GPIOs */ | ||||||
| 	gpio_config_uart(); | 	gpio_config_uart(); | ||||||
| 
 |  | ||||||
| 	/* Init UART, scratch regs, and start CPU */ |  | ||||||
| 	tegra2_start(); |  | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| #endif	/* EARLY_INIT */ | #endif	/* EARLY_INIT */ | ||||||
|  |  | ||||||
|  | @ -24,7 +24,6 @@ | ||||||
| #ifndef _BOARD_H_ | #ifndef _BOARD_H_ | ||||||
| #define _BOARD_H_ | #define _BOARD_H_ | ||||||
| 
 | 
 | ||||||
| void tegra2_start(void); |  | ||||||
| void gpio_config_uart(void); | void gpio_config_uart(void); | ||||||
| int tegra2_mmc_init(int dev_index, int bus_width, int pwr_gpio, int cd_gpio); | int tegra2_mmc_init(int dev_index, int bus_width, int pwr_gpio, int cd_gpio); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -35,6 +35,7 @@ | ||||||
| 
 | 
 | ||||||
| #define CONFIG_SYS_CACHELINE_SIZE	32 | #define CONFIG_SYS_CACHELINE_SIZE	32 | ||||||
| 
 | 
 | ||||||
|  | #define CONFIG_ARCH_CPU_INIT		/* Fire up the A9 core */ | ||||||
| #define CONFIG_ENABLE_CORTEXA9		/* enable CPU (A9 complex) */ | #define CONFIG_ENABLE_CORTEXA9		/* enable CPU (A9 complex) */ | ||||||
| 
 | 
 | ||||||
| #include <asm/arch/tegra2.h>		/* get chip and board defs */ | #include <asm/arch/tegra2.h>		/* get chip and board defs */ | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue