xref: /rk3399_rockchip-uboot/board/freescale/ls2080a/ls2080a.c (revision 0e00a84cdedf7a1949486746225b35984b351eca)
144937214SPrabhakar Kushwaha /*
244937214SPrabhakar Kushwaha  * Copyright 2014 Freescale Semiconductor
344937214SPrabhakar Kushwaha  *
444937214SPrabhakar Kushwaha  * SPDX-License-Identifier:	GPL-2.0+
544937214SPrabhakar Kushwaha  */
644937214SPrabhakar Kushwaha #include <common.h>
744937214SPrabhakar Kushwaha #include <malloc.h>
844937214SPrabhakar Kushwaha #include <errno.h>
944937214SPrabhakar Kushwaha #include <netdev.h>
1044937214SPrabhakar Kushwaha #include <fsl_ifc.h>
1144937214SPrabhakar Kushwaha #include <fsl_ddr.h>
1244937214SPrabhakar Kushwaha #include <asm/io.h>
1344937214SPrabhakar Kushwaha #include <fdt_support.h>
14*0e00a84cSMasahiro Yamada #include <linux/libfdt.h>
1544937214SPrabhakar Kushwaha #include <fsl-mc/fsl_mc.h>
1644937214SPrabhakar Kushwaha #include <environment.h>
1744937214SPrabhakar Kushwaha #include <asm/arch/soc.h>
1844937214SPrabhakar Kushwaha 
1944937214SPrabhakar Kushwaha DECLARE_GLOBAL_DATA_PTR;
2044937214SPrabhakar Kushwaha 
board_init(void)2144937214SPrabhakar Kushwaha int board_init(void)
2244937214SPrabhakar Kushwaha {
2344937214SPrabhakar Kushwaha 	init_final_memctl_regs();
2444937214SPrabhakar Kushwaha 
2544937214SPrabhakar Kushwaha #ifdef CONFIG_ENV_IS_NOWHERE
2644937214SPrabhakar Kushwaha 	gd->env_addr = (ulong)&default_environment[0];
2744937214SPrabhakar Kushwaha #endif
2844937214SPrabhakar Kushwaha 
2944937214SPrabhakar Kushwaha 	return 0;
3044937214SPrabhakar Kushwaha }
3144937214SPrabhakar Kushwaha 
board_early_init_f(void)3244937214SPrabhakar Kushwaha int board_early_init_f(void)
3344937214SPrabhakar Kushwaha {
3444937214SPrabhakar Kushwaha 	fsl_lsch3_early_init_f();
3544937214SPrabhakar Kushwaha 	return 0;
3644937214SPrabhakar Kushwaha }
3744937214SPrabhakar Kushwaha 
detail_board_ddr_info(void)3844937214SPrabhakar Kushwaha void detail_board_ddr_info(void)
3944937214SPrabhakar Kushwaha {
4044937214SPrabhakar Kushwaha 	puts("\nDDR    ");
4144937214SPrabhakar Kushwaha 	print_size(gd->bd->bi_dram[0].size + gd->bd->bi_dram[1].size, "");
4244937214SPrabhakar Kushwaha 	print_ddr_info(0);
4344937214SPrabhakar Kushwaha #ifdef CONFIG_SYS_FSL_HAS_DP_DDR
443c1d218aSYork Sun 	if (soc_has_dp_ddr() && gd->bd->bi_dram[2].size) {
4544937214SPrabhakar Kushwaha 		puts("\nDP-DDR ");
4644937214SPrabhakar Kushwaha 		print_size(gd->bd->bi_dram[2].size, "");
4744937214SPrabhakar Kushwaha 		print_ddr_info(CONFIG_DP_DDR_CTRL);
4844937214SPrabhakar Kushwaha 	}
4944937214SPrabhakar Kushwaha #endif
5044937214SPrabhakar Kushwaha }
5144937214SPrabhakar Kushwaha 
5244937214SPrabhakar Kushwaha #if defined(CONFIG_ARCH_MISC_INIT)
arch_misc_init(void)5344937214SPrabhakar Kushwaha int arch_misc_init(void)
5444937214SPrabhakar Kushwaha {
5544937214SPrabhakar Kushwaha 	return 0;
5644937214SPrabhakar Kushwaha }
5744937214SPrabhakar Kushwaha #endif
5844937214SPrabhakar Kushwaha 
board_eth_init(bd_t * bis)5944937214SPrabhakar Kushwaha int board_eth_init(bd_t *bis)
6044937214SPrabhakar Kushwaha {
6144937214SPrabhakar Kushwaha 	int error = 0;
6244937214SPrabhakar Kushwaha 
6344937214SPrabhakar Kushwaha #ifdef CONFIG_SMC91111
6444937214SPrabhakar Kushwaha 	error = smc91111_initialize(0, CONFIG_SMC91111_BASE);
6544937214SPrabhakar Kushwaha #endif
6644937214SPrabhakar Kushwaha 
671f55a938SSantan Kumar #if defined(CONFIG_FSL_MC_ENET) && !defined(CONFIG_SPL_BUILD)
6844937214SPrabhakar Kushwaha 	error = cpu_eth_init(bis);
6944937214SPrabhakar Kushwaha #endif
7044937214SPrabhakar Kushwaha 	return error;
7144937214SPrabhakar Kushwaha }
7244937214SPrabhakar Kushwaha 
731f55a938SSantan Kumar #if defined(CONFIG_FSL_MC_ENET) && !defined(CONFIG_SPL_BUILD)
fdt_fixup_board_enet(void * fdt)7444937214SPrabhakar Kushwaha void fdt_fixup_board_enet(void *fdt)
7544937214SPrabhakar Kushwaha {
7644937214SPrabhakar Kushwaha 	int offset;
7744937214SPrabhakar Kushwaha 
78e91f1decSStuart Yoder 	offset = fdt_path_offset(fdt, "/soc/fsl-mc");
7944937214SPrabhakar Kushwaha 
8044937214SPrabhakar Kushwaha 	/*
8144937214SPrabhakar Kushwaha 	 * TODO: Remove this when backward compatibility
82e91f1decSStuart Yoder 	 * with old DT node (/fsl-mc) is no longer needed.
8344937214SPrabhakar Kushwaha 	 */
8444937214SPrabhakar Kushwaha 	if (offset < 0)
85e91f1decSStuart Yoder 		offset = fdt_path_offset(fdt, "/fsl-mc");
8644937214SPrabhakar Kushwaha 
8744937214SPrabhakar Kushwaha 	if (offset < 0) {
8844937214SPrabhakar Kushwaha 		printf("%s: ERROR: fsl-mc node not found in device tree (error %d)\n",
8944937214SPrabhakar Kushwaha 		       __func__, offset);
9044937214SPrabhakar Kushwaha 		return;
9144937214SPrabhakar Kushwaha 	}
9244937214SPrabhakar Kushwaha 
9344937214SPrabhakar Kushwaha 	if (get_mc_boot_status() == 0)
9444937214SPrabhakar Kushwaha 		fdt_status_okay(fdt, offset);
9544937214SPrabhakar Kushwaha 	else
9644937214SPrabhakar Kushwaha 		fdt_status_fail(fdt, offset);
9744937214SPrabhakar Kushwaha }
98b7b8410aSAlexander Graf 
board_quiesce_devices(void)99b7b8410aSAlexander Graf void board_quiesce_devices(void)
100b7b8410aSAlexander Graf {
101b7b8410aSAlexander Graf 	fsl_mc_ldpaa_exit(gd->bd);
102b7b8410aSAlexander Graf }
10344937214SPrabhakar Kushwaha #endif
10444937214SPrabhakar Kushwaha 
10544937214SPrabhakar Kushwaha #ifdef CONFIG_OF_BOARD_SETUP
ft_board_setup(void * blob,bd_t * bd)10644937214SPrabhakar Kushwaha int ft_board_setup(void *blob, bd_t *bd)
10744937214SPrabhakar Kushwaha {
10844937214SPrabhakar Kushwaha 	u64 base[CONFIG_NR_DRAM_BANKS];
10944937214SPrabhakar Kushwaha 	u64 size[CONFIG_NR_DRAM_BANKS];
11044937214SPrabhakar Kushwaha 
11144937214SPrabhakar Kushwaha 	ft_cpu_setup(blob, bd);
11244937214SPrabhakar Kushwaha 
11344937214SPrabhakar Kushwaha 	/* fixup DT for the two GPP DDR banks */
11444937214SPrabhakar Kushwaha 	base[0] = gd->bd->bi_dram[0].start;
11544937214SPrabhakar Kushwaha 	size[0] = gd->bd->bi_dram[0].size;
11644937214SPrabhakar Kushwaha 	base[1] = gd->bd->bi_dram[1].start;
11744937214SPrabhakar Kushwaha 	size[1] = gd->bd->bi_dram[1].size;
11844937214SPrabhakar Kushwaha 
11936cc0de0SYork Sun #ifdef CONFIG_RESV_RAM
12036cc0de0SYork Sun 	/* reduce size if reserved memory is within this bank */
12136cc0de0SYork Sun 	if (gd->arch.resv_ram >= base[0] &&
12236cc0de0SYork Sun 	    gd->arch.resv_ram < base[0] + size[0])
12336cc0de0SYork Sun 		size[0] = gd->arch.resv_ram - base[0];
12436cc0de0SYork Sun 	else if (gd->arch.resv_ram >= base[1] &&
12536cc0de0SYork Sun 		 gd->arch.resv_ram < base[1] + size[1])
12636cc0de0SYork Sun 		size[1] = gd->arch.resv_ram - base[1];
12736cc0de0SYork Sun #endif
12836cc0de0SYork Sun 
12944937214SPrabhakar Kushwaha 	fdt_fixup_memory_banks(blob, base, size, 2);
13044937214SPrabhakar Kushwaha 
1311f55a938SSantan Kumar #if defined(CONFIG_FSL_MC_ENET) && !defined(CONFIG_SPL_BUILD)
13244937214SPrabhakar Kushwaha 	fdt_fixup_board_enet(blob);
13344937214SPrabhakar Kushwaha #endif
13444937214SPrabhakar Kushwaha 
13544937214SPrabhakar Kushwaha 	return 0;
13644937214SPrabhakar Kushwaha }
13744937214SPrabhakar Kushwaha #endif
13833a8991aSBogdan Purcareata 
13933a8991aSBogdan Purcareata #if defined(CONFIG_RESET_PHY_R)
reset_phy(void)14033a8991aSBogdan Purcareata void reset_phy(void)
14133a8991aSBogdan Purcareata {
14233a8991aSBogdan Purcareata }
14333a8991aSBogdan Purcareata #endif
144