11cb19fbbSYork Sun /*
21cb19fbbSYork Sun * Copyright 2013 Freescale Semiconductor, Inc.
31cb19fbbSYork Sun *
43aab0cd8SYork Sun * SPDX-License-Identifier: GPL-2.0+
51cb19fbbSYork Sun */
61cb19fbbSYork Sun
71cb19fbbSYork Sun #include <common.h>
81cb19fbbSYork Sun #include <command.h>
91cb19fbbSYork Sun #include <i2c.h>
101cb19fbbSYork Sun #include <netdev.h>
111cb19fbbSYork Sun #include <linux/compiler.h>
121cb19fbbSYork Sun #include <asm/mmu.h>
131cb19fbbSYork Sun #include <asm/processor.h>
141cb19fbbSYork Sun #include <asm/cache.h>
151cb19fbbSYork Sun #include <asm/immap_85xx.h>
161cb19fbbSYork Sun #include <asm/fsl_law.h>
171cb19fbbSYork Sun #include <asm/fsl_serdes.h>
181cb19fbbSYork Sun #include <asm/fsl_liodn.h>
191cb19fbbSYork Sun
201cb19fbbSYork Sun DECLARE_GLOBAL_DATA_PTR;
211cb19fbbSYork Sun
checkboard(void)221cb19fbbSYork Sun int checkboard(void)
231cb19fbbSYork Sun {
241cb19fbbSYork Sun struct cpu_type *cpu = gd->arch.cpu;
251cb19fbbSYork Sun
261cb19fbbSYork Sun printf("Board: %sEMU\n", cpu->name);
271cb19fbbSYork Sun
281cb19fbbSYork Sun return 0;
291cb19fbbSYork Sun }
301cb19fbbSYork Sun
board_early_init_r(void)311cb19fbbSYork Sun int board_early_init_r(void)
321cb19fbbSYork Sun {
331cb19fbbSYork Sun const unsigned int flashbase = CONFIG_SYS_FLASH_BASE;
349d045682SYork Sun int flash_esel = find_tlb_idx((void *)flashbase, 1);
351cb19fbbSYork Sun
361cb19fbbSYork Sun /*
371cb19fbbSYork Sun * Remap Boot flash + PROMJET region to caching-inhibited
381cb19fbbSYork Sun * so that flash can be erased properly.
391cb19fbbSYork Sun */
401cb19fbbSYork Sun
411cb19fbbSYork Sun /* Flush d-cache and invalidate i-cache of any FLASH data */
421cb19fbbSYork Sun flush_dcache();
431cb19fbbSYork Sun invalidate_icache();
441cb19fbbSYork Sun
459d045682SYork Sun if (flash_esel == -1) {
469d045682SYork Sun /* very unlikely unless something is messed up */
479d045682SYork Sun puts("Error: Could not find TLB for FLASH BASE\n");
489d045682SYork Sun flash_esel = 2; /* give our best effort to continue */
499d045682SYork Sun } else {
501cb19fbbSYork Sun /* invalidate existing TLB entry for flash */
511cb19fbbSYork Sun disable_tlb(flash_esel);
529d045682SYork Sun }
531cb19fbbSYork Sun
541cb19fbbSYork Sun set_tlb(1, flashbase, CONFIG_SYS_FLASH_BASE_PHYS,
551cb19fbbSYork Sun MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
561cb19fbbSYork Sun 0, flash_esel, BOOKE_PAGESZ_256M, 1);
571cb19fbbSYork Sun
581cb19fbbSYork Sun return 0;
591cb19fbbSYork Sun }
601cb19fbbSYork Sun
misc_init_r(void)611cb19fbbSYork Sun int misc_init_r(void)
621cb19fbbSYork Sun {
631cb19fbbSYork Sun return 0;
641cb19fbbSYork Sun }
651cb19fbbSYork Sun
ft_board_setup(void * blob,bd_t * bd)66e895a4b0SSimon Glass int ft_board_setup(void *blob, bd_t *bd)
671cb19fbbSYork Sun {
681cb19fbbSYork Sun phys_addr_t base;
691cb19fbbSYork Sun phys_size_t size;
701cb19fbbSYork Sun
711cb19fbbSYork Sun ft_cpu_setup(blob, bd);
721cb19fbbSYork Sun
73*723806ccSSimon Glass base = env_get_bootm_low();
74*723806ccSSimon Glass size = env_get_bootm_size();
751cb19fbbSYork Sun
761cb19fbbSYork Sun fdt_fixup_memory(blob, (u64)base, (u64)size);
771cb19fbbSYork Sun
781cb19fbbSYork Sun fdt_fixup_liodn(blob);
79a5c289b9SSriram Dash fsl_fdt_fixup_dr_usb(blob, bd);
80e895a4b0SSimon Glass
81e895a4b0SSimon Glass return 0;
821cb19fbbSYork Sun }
83