xref: /rk3399_rockchip-uboot/board/atmel/at91sam9260ek/at91sam9260ek.c (revision f166af88a898601f24c490aa8e2b555cfc2dfc91)
10176d43eSStelian Pop /*
20176d43eSStelian Pop  * (C) Copyright 2007-2008
3c9e798d3SStelian Pop  * Stelian Pop <stelian@popies.net>
40176d43eSStelian Pop  * Lead Tech Design <www.leadtechdesign.com>
50176d43eSStelian Pop  *
61a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
70176d43eSStelian Pop  */
80176d43eSStelian Pop 
90176d43eSStelian Pop #include <common.h>
10*2510be1dSWenyou Yang #include <debug_uart.h>
118c6407fcSReinhard Meyer #include <asm/io.h>
120176d43eSStelian Pop #include <asm/arch/at91sam9260_matrix.h>
139606b3c8SStelian Pop #include <asm/arch/at91sam9_smc.h>
141332a2a0SJean-Christophe PLAGNIOL-VILLARD #include <asm/arch/at91_common.h>
1570341e2eSWenyou Yang #include <asm/arch/clk.h>
160176d43eSStelian Pop #include <asm/arch/gpio.h>
170176d43eSStelian Pop 
180176d43eSStelian Pop DECLARE_GLOBAL_DATA_PTR;
190176d43eSStelian Pop 
200176d43eSStelian Pop /* ------------------------------------------------------------------------- */
210176d43eSStelian Pop /*
220176d43eSStelian Pop  * Miscelaneous platform dependent initialisations
230176d43eSStelian Pop  */
240176d43eSStelian Pop 
250176d43eSStelian Pop #ifdef CONFIG_CMD_NAND
at91sam9260ek_nand_hw_init(void)260176d43eSStelian Pop static void at91sam9260ek_nand_hw_init(void)
270176d43eSStelian Pop {
288c6407fcSReinhard Meyer 	struct at91_smc *smc = (struct at91_smc *)ATMEL_BASE_SMC;
298c6407fcSReinhard Meyer 	struct at91_matrix *matrix = (struct at91_matrix *)ATMEL_BASE_MATRIX;
300176d43eSStelian Pop 	unsigned long csa;
310176d43eSStelian Pop 
328c6407fcSReinhard Meyer 	/* Assign CS3 to NAND/SmartMedia Interface */
338c6407fcSReinhard Meyer 	csa = readl(&matrix->ebicsa);
348c6407fcSReinhard Meyer 	csa |= AT91_MATRIX_CS3A_SMC_SMARTMEDIA;
358c6407fcSReinhard Meyer 	writel(csa, &matrix->ebicsa);
360176d43eSStelian Pop 
370176d43eSStelian Pop 	/* Configure SMC CS3 for NAND/SmartMedia */
388c6407fcSReinhard Meyer 	writel(AT91_SMC_SETUP_NWE(1) | AT91_SMC_SETUP_NCS_WR(0) |
398c6407fcSReinhard Meyer 		AT91_SMC_SETUP_NRD(1) | AT91_SMC_SETUP_NCS_RD(0),
408c6407fcSReinhard Meyer 		&smc->cs[3].setup);
418c6407fcSReinhard Meyer 	writel(AT91_SMC_PULSE_NWE(3) | AT91_SMC_PULSE_NCS_WR(3) |
428c6407fcSReinhard Meyer 		AT91_SMC_PULSE_NRD(3) | AT91_SMC_PULSE_NCS_RD(3),
438c6407fcSReinhard Meyer 		&smc->cs[3].pulse);
448c6407fcSReinhard Meyer 	writel(AT91_SMC_CYCLE_NWE(5) | AT91_SMC_CYCLE_NRD(5),
458c6407fcSReinhard Meyer 		&smc->cs[3].cycle);
468c6407fcSReinhard Meyer 	writel(AT91_SMC_MODE_RM_NRD | AT91_SMC_MODE_WM_NWE |
478c6407fcSReinhard Meyer 		AT91_SMC_MODE_EXNW_DISABLE |
486d0f6bcfSJean-Christophe PLAGNIOL-VILLARD #ifdef CONFIG_SYS_NAND_DBW_16
498c6407fcSReinhard Meyer 		AT91_SMC_MODE_DBW_16 |
506d0f6bcfSJean-Christophe PLAGNIOL-VILLARD #else /* CONFIG_SYS_NAND_DBW_8 */
518c6407fcSReinhard Meyer 		AT91_SMC_MODE_DBW_8 |
52c1212b2fSStelian Pop #endif
538c6407fcSReinhard Meyer 		AT91_SMC_MODE_TDF_CYCLE(2),
548c6407fcSReinhard Meyer 		&smc->cs[3].mode);
550176d43eSStelian Pop 
560176d43eSStelian Pop 	/* Configure RDY/BSY */
5774c076d6SJean-Christophe PLAGNIOL-VILLARD 	at91_set_gpio_input(CONFIG_SYS_NAND_READY_PIN, 1);
580176d43eSStelian Pop 
590176d43eSStelian Pop 	/* Enable NandFlash */
6074c076d6SJean-Christophe PLAGNIOL-VILLARD 	at91_set_gpio_output(CONFIG_SYS_NAND_ENABLE_PIN, 1);
618c6407fcSReinhard Meyer 
620176d43eSStelian Pop }
630176d43eSStelian Pop #endif
640176d43eSStelian Pop 
65*2510be1dSWenyou Yang #ifdef CONFIG_DEBUG_UART_BOARD_INIT
board_debug_uart_init(void)66*2510be1dSWenyou Yang void board_debug_uart_init(void)
67*2510be1dSWenyou Yang {
68*2510be1dSWenyou Yang 	at91_seriald_hw_init();
69*2510be1dSWenyou Yang }
70*2510be1dSWenyou Yang #endif
71*2510be1dSWenyou Yang 
72*2510be1dSWenyou Yang #ifdef CONFIG_BOARD_EARLY_INIT_F
board_early_init_f(void)738c6407fcSReinhard Meyer int board_early_init_f(void)
748c6407fcSReinhard Meyer {
75*2510be1dSWenyou Yang #ifdef CONFIG_DEBUG_UART
76*2510be1dSWenyou Yang 	debug_uart_init();
77*2510be1dSWenyou Yang #endif
788c6407fcSReinhard Meyer 	return 0;
798c6407fcSReinhard Meyer }
80*2510be1dSWenyou Yang #endif
818c6407fcSReinhard Meyer 
board_init(void)820176d43eSStelian Pop int board_init(void)
830176d43eSStelian Pop {
840176d43eSStelian Pop 	/* adress of boot parameters */
858c6407fcSReinhard Meyer 	gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100;
860176d43eSStelian Pop 
870176d43eSStelian Pop #ifdef CONFIG_CMD_NAND
880176d43eSStelian Pop 	at91sam9260ek_nand_hw_init();
890176d43eSStelian Pop #endif
900176d43eSStelian Pop 	return 0;
910176d43eSStelian Pop }
920176d43eSStelian Pop 
dram_init(void)930176d43eSStelian Pop int dram_init(void)
940176d43eSStelian Pop {
958c6407fcSReinhard Meyer 	gd->ram_size = get_ram_size(
968c6407fcSReinhard Meyer 		(void *)CONFIG_SYS_SDRAM_BASE,
978c6407fcSReinhard Meyer 		CONFIG_SYS_SDRAM_SIZE);
980176d43eSStelian Pop 	return 0;
990176d43eSStelian Pop }
1000176d43eSStelian Pop 
1010176d43eSStelian Pop #ifdef CONFIG_RESET_PHY_R
reset_phy(void)1020176d43eSStelian Pop void reset_phy(void)
1030176d43eSStelian Pop {
1040176d43eSStelian Pop }
1050176d43eSStelian Pop #endif
106