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