xref: /rk3399_rockchip-uboot/board/freescale/ls2080a/ls2080a.c (revision b7b8410a8fee9eda7b062a86a07dda0b97c49f8a)
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>
1444937214SPrabhakar Kushwaha #include <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 
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 
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 
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 int dram_init(void)
5344937214SPrabhakar Kushwaha {
5444937214SPrabhakar Kushwaha 	gd->ram_size = initdram(0);
5544937214SPrabhakar Kushwaha 
5644937214SPrabhakar Kushwaha 	return 0;
5744937214SPrabhakar Kushwaha }
5844937214SPrabhakar Kushwaha 
5944937214SPrabhakar Kushwaha #if defined(CONFIG_ARCH_MISC_INIT)
6044937214SPrabhakar Kushwaha int arch_misc_init(void)
6144937214SPrabhakar Kushwaha {
6244937214SPrabhakar Kushwaha 	return 0;
6344937214SPrabhakar Kushwaha }
6444937214SPrabhakar Kushwaha #endif
6544937214SPrabhakar Kushwaha 
6644937214SPrabhakar Kushwaha int board_eth_init(bd_t *bis)
6744937214SPrabhakar Kushwaha {
6844937214SPrabhakar Kushwaha 	int error = 0;
6944937214SPrabhakar Kushwaha 
7044937214SPrabhakar Kushwaha #ifdef CONFIG_SMC91111
7144937214SPrabhakar Kushwaha 	error = smc91111_initialize(0, CONFIG_SMC91111_BASE);
7244937214SPrabhakar Kushwaha #endif
7344937214SPrabhakar Kushwaha 
7444937214SPrabhakar Kushwaha #ifdef CONFIG_FSL_MC_ENET
7544937214SPrabhakar Kushwaha 	error = cpu_eth_init(bis);
7644937214SPrabhakar Kushwaha #endif
7744937214SPrabhakar Kushwaha 	return error;
7844937214SPrabhakar Kushwaha }
7944937214SPrabhakar Kushwaha 
8044937214SPrabhakar Kushwaha #ifdef CONFIG_FSL_MC_ENET
8144937214SPrabhakar Kushwaha void fdt_fixup_board_enet(void *fdt)
8244937214SPrabhakar Kushwaha {
8344937214SPrabhakar Kushwaha 	int offset;
8444937214SPrabhakar Kushwaha 
85e91f1decSStuart Yoder 	offset = fdt_path_offset(fdt, "/soc/fsl-mc");
8644937214SPrabhakar Kushwaha 
8744937214SPrabhakar Kushwaha 	/*
8844937214SPrabhakar Kushwaha 	 * TODO: Remove this when backward compatibility
89e91f1decSStuart Yoder 	 * with old DT node (/fsl-mc) is no longer needed.
9044937214SPrabhakar Kushwaha 	 */
9144937214SPrabhakar Kushwaha 	if (offset < 0)
92e91f1decSStuart Yoder 		offset = fdt_path_offset(fdt, "/fsl-mc");
9344937214SPrabhakar Kushwaha 
9444937214SPrabhakar Kushwaha 	if (offset < 0) {
9544937214SPrabhakar Kushwaha 		printf("%s: ERROR: fsl-mc node not found in device tree (error %d)\n",
9644937214SPrabhakar Kushwaha 		       __func__, offset);
9744937214SPrabhakar Kushwaha 		return;
9844937214SPrabhakar Kushwaha 	}
9944937214SPrabhakar Kushwaha 
10044937214SPrabhakar Kushwaha 	if (get_mc_boot_status() == 0)
10144937214SPrabhakar Kushwaha 		fdt_status_okay(fdt, offset);
10244937214SPrabhakar Kushwaha 	else
10344937214SPrabhakar Kushwaha 		fdt_status_fail(fdt, offset);
10444937214SPrabhakar Kushwaha }
105*b7b8410aSAlexander Graf 
106*b7b8410aSAlexander Graf void board_quiesce_devices(void)
107*b7b8410aSAlexander Graf {
108*b7b8410aSAlexander Graf 	fsl_mc_ldpaa_exit(gd->bd);
109*b7b8410aSAlexander Graf }
11044937214SPrabhakar Kushwaha #endif
11144937214SPrabhakar Kushwaha 
11244937214SPrabhakar Kushwaha #ifdef CONFIG_OF_BOARD_SETUP
11344937214SPrabhakar Kushwaha int ft_board_setup(void *blob, bd_t *bd)
11444937214SPrabhakar Kushwaha {
11544937214SPrabhakar Kushwaha 	u64 base[CONFIG_NR_DRAM_BANKS];
11644937214SPrabhakar Kushwaha 	u64 size[CONFIG_NR_DRAM_BANKS];
11744937214SPrabhakar Kushwaha 
11844937214SPrabhakar Kushwaha 	ft_cpu_setup(blob, bd);
11944937214SPrabhakar Kushwaha 
12044937214SPrabhakar Kushwaha 	/* fixup DT for the two GPP DDR banks */
12144937214SPrabhakar Kushwaha 	base[0] = gd->bd->bi_dram[0].start;
12244937214SPrabhakar Kushwaha 	size[0] = gd->bd->bi_dram[0].size;
12344937214SPrabhakar Kushwaha 	base[1] = gd->bd->bi_dram[1].start;
12444937214SPrabhakar Kushwaha 	size[1] = gd->bd->bi_dram[1].size;
12544937214SPrabhakar Kushwaha 
12644937214SPrabhakar Kushwaha 	fdt_fixup_memory_banks(blob, base, size, 2);
12744937214SPrabhakar Kushwaha 
12844937214SPrabhakar Kushwaha #ifdef CONFIG_FSL_MC_ENET
12944937214SPrabhakar Kushwaha 	fdt_fixup_board_enet(blob);
13044937214SPrabhakar Kushwaha #endif
13144937214SPrabhakar Kushwaha 
13244937214SPrabhakar Kushwaha 	return 0;
13344937214SPrabhakar Kushwaha }
13444937214SPrabhakar Kushwaha #endif
135