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