xref: /rk3399_rockchip-uboot/board/freescale/t4qds/t4240emu.c (revision 723806cc5bea9f8b37323dfd7568603f99af6a06)
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