mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-10-30 19:48:19 +00:00 
			
		
		
		
	As Ocelot, Servalt, Luton and Jaguar2, this family of SoCs are found in Microsemi Switches solution. Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com> Reviewed-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
		
			
				
	
	
		
			75 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| // SPDX-License-Identifier: (GPL-2.0+ OR MIT)
 | |
| /*
 | |
|  * Copyright (c) 2018 Microsemi Corporation
 | |
|  */
 | |
| 
 | |
| #include <common.h>
 | |
| 
 | |
| #include <asm/io.h>
 | |
| #include <asm/types.h>
 | |
| 
 | |
| #include <mach/tlb.h>
 | |
| #include <mach/ddr.h>
 | |
| 
 | |
| DECLARE_GLOBAL_DATA_PTR;
 | |
| 
 | |
| static inline int vcoreiii_train_bytelane(void)
 | |
| {
 | |
| 	int ret;
 | |
| 
 | |
| 	ret = hal_vcoreiii_train_bytelane(0);
 | |
| 
 | |
| #if defined(CONFIG_SOC_OCELOT) || defined(CONFIG_SOC_JR2) || \
 | |
| 	defined(CONFIG_SOC_SERVALT) || defined(CONFIG_SOC_SERVAL)
 | |
| 	if (ret)
 | |
| 		return ret;
 | |
| 	ret = hal_vcoreiii_train_bytelane(1);
 | |
| #endif
 | |
| 
 | |
| 	return ret;
 | |
| }
 | |
| 
 | |
| int vcoreiii_ddr_init(void)
 | |
| {
 | |
| 	int res;
 | |
| 
 | |
| 	if (!(readl(BASE_CFG + ICPU_MEMCTRL_STAT)
 | |
| 	      & ICPU_MEMCTRL_STAT_INIT_DONE)) {
 | |
| 		hal_vcoreiii_init_memctl();
 | |
| 		hal_vcoreiii_wait_memctl();
 | |
| 		if (hal_vcoreiii_init_dqs() || vcoreiii_train_bytelane())
 | |
| 			hal_vcoreiii_ddr_failed();
 | |
| 	}
 | |
| #if (CONFIG_SYS_TEXT_BASE != 0x20000000)
 | |
| 	res = dram_check();
 | |
| 	if (res == 0)
 | |
| 		hal_vcoreiii_ddr_verified();
 | |
| 	else
 | |
| 		hal_vcoreiii_ddr_failed();
 | |
| 
 | |
| 	/* Clear boot-mode and read-back to activate/verify */
 | |
| 	clrbits_le32(BASE_CFG + ICPU_GENERAL_CTRL,
 | |
| 		     ICPU_GENERAL_CTRL_BOOT_MODE_ENA);
 | |
| 	readl(BASE_CFG + ICPU_GENERAL_CTRL);
 | |
| #else
 | |
| 	res = 0;
 | |
| #endif
 | |
| 	return res;
 | |
| }
 | |
| 
 | |
| int print_cpuinfo(void)
 | |
| {
 | |
| 	printf("MSCC VCore-III MIPS 24Kec\n");
 | |
| 
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| int dram_init(void)
 | |
| {
 | |
| 	while (vcoreiii_ddr_init())
 | |
| 		;
 | |
| 
 | |
| 	gd->ram_size = CONFIG_SYS_SDRAM_SIZE;
 | |
| 	return 0;
 | |
| }
 |