1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+ 20176d43eSStelian Pop /* 30176d43eSStelian Pop * (C) Copyright 2007-2008 4c9e798d3SStelian Pop * Stelian Pop <stelian@popies.net> 50176d43eSStelian Pop * Lead Tech Design <www.leadtechdesign.com> 60176d43eSStelian Pop */ 70176d43eSStelian Pop 80176d43eSStelian Pop #include <common.h> 92510be1dSWenyou Yang #include <debug_uart.h> 108c6407fcSReinhard Meyer #include <asm/io.h> 110176d43eSStelian Pop #include <asm/arch/at91sam9260_matrix.h> 129606b3c8SStelian Pop #include <asm/arch/at91sam9_smc.h> 131332a2a0SJean-Christophe PLAGNIOL-VILLARD #include <asm/arch/at91_common.h> 1470341e2eSWenyou Yang #include <asm/arch/clk.h> 150176d43eSStelian Pop #include <asm/arch/gpio.h> 160176d43eSStelian Pop 170176d43eSStelian Pop DECLARE_GLOBAL_DATA_PTR; 180176d43eSStelian Pop 190176d43eSStelian Pop /* ------------------------------------------------------------------------- */ 200176d43eSStelian Pop /* 210176d43eSStelian Pop * Miscelaneous platform dependent initialisations 220176d43eSStelian Pop */ 230176d43eSStelian Pop 240176d43eSStelian Pop #ifdef CONFIG_CMD_NAND at91sam9260ek_nand_hw_init(void)250176d43eSStelian Popstatic void at91sam9260ek_nand_hw_init(void) 260176d43eSStelian Pop { 278c6407fcSReinhard Meyer struct at91_smc *smc = (struct at91_smc *)ATMEL_BASE_SMC; 288c6407fcSReinhard Meyer struct at91_matrix *matrix = (struct at91_matrix *)ATMEL_BASE_MATRIX; 290176d43eSStelian Pop unsigned long csa; 300176d43eSStelian Pop 318c6407fcSReinhard Meyer /* Assign CS3 to NAND/SmartMedia Interface */ 328c6407fcSReinhard Meyer csa = readl(&matrix->ebicsa); 338c6407fcSReinhard Meyer csa |= AT91_MATRIX_CS3A_SMC_SMARTMEDIA; 348c6407fcSReinhard Meyer writel(csa, &matrix->ebicsa); 350176d43eSStelian Pop 360176d43eSStelian Pop /* Configure SMC CS3 for NAND/SmartMedia */ 378c6407fcSReinhard Meyer writel(AT91_SMC_SETUP_NWE(1) | AT91_SMC_SETUP_NCS_WR(0) | 388c6407fcSReinhard Meyer AT91_SMC_SETUP_NRD(1) | AT91_SMC_SETUP_NCS_RD(0), 398c6407fcSReinhard Meyer &smc->cs[3].setup); 408c6407fcSReinhard Meyer writel(AT91_SMC_PULSE_NWE(3) | AT91_SMC_PULSE_NCS_WR(3) | 418c6407fcSReinhard Meyer AT91_SMC_PULSE_NRD(3) | AT91_SMC_PULSE_NCS_RD(3), 428c6407fcSReinhard Meyer &smc->cs[3].pulse); 438c6407fcSReinhard Meyer writel(AT91_SMC_CYCLE_NWE(5) | AT91_SMC_CYCLE_NRD(5), 448c6407fcSReinhard Meyer &smc->cs[3].cycle); 458c6407fcSReinhard Meyer writel(AT91_SMC_MODE_RM_NRD | AT91_SMC_MODE_WM_NWE | 468c6407fcSReinhard Meyer AT91_SMC_MODE_EXNW_DISABLE | 476d0f6bcfSJean-Christophe PLAGNIOL-VILLARD #ifdef CONFIG_SYS_NAND_DBW_16 488c6407fcSReinhard Meyer AT91_SMC_MODE_DBW_16 | 496d0f6bcfSJean-Christophe PLAGNIOL-VILLARD #else /* CONFIG_SYS_NAND_DBW_8 */ 508c6407fcSReinhard Meyer AT91_SMC_MODE_DBW_8 | 51c1212b2fSStelian Pop #endif 528c6407fcSReinhard Meyer AT91_SMC_MODE_TDF_CYCLE(2), 538c6407fcSReinhard Meyer &smc->cs[3].mode); 540176d43eSStelian Pop 550176d43eSStelian Pop /* Configure RDY/BSY */ 5674c076d6SJean-Christophe PLAGNIOL-VILLARD at91_set_gpio_input(CONFIG_SYS_NAND_READY_PIN, 1); 570176d43eSStelian Pop 580176d43eSStelian Pop /* Enable NandFlash */ 5974c076d6SJean-Christophe PLAGNIOL-VILLARD at91_set_gpio_output(CONFIG_SYS_NAND_ENABLE_PIN, 1); 608c6407fcSReinhard Meyer 610176d43eSStelian Pop } 620176d43eSStelian Pop #endif 630176d43eSStelian Pop 642510be1dSWenyou Yang #ifdef CONFIG_DEBUG_UART_BOARD_INIT board_debug_uart_init(void)652510be1dSWenyou Yangvoid board_debug_uart_init(void) 662510be1dSWenyou Yang { 672510be1dSWenyou Yang at91_seriald_hw_init(); 682510be1dSWenyou Yang } 692510be1dSWenyou Yang #endif 702510be1dSWenyou Yang 712510be1dSWenyou Yang #ifdef CONFIG_BOARD_EARLY_INIT_F board_early_init_f(void)728c6407fcSReinhard Meyerint board_early_init_f(void) 738c6407fcSReinhard Meyer { 742510be1dSWenyou Yang #ifdef CONFIG_DEBUG_UART 752510be1dSWenyou Yang debug_uart_init(); 762510be1dSWenyou Yang #endif 778c6407fcSReinhard Meyer return 0; 788c6407fcSReinhard Meyer } 792510be1dSWenyou Yang #endif 808c6407fcSReinhard Meyer board_init(void)810176d43eSStelian Popint board_init(void) 820176d43eSStelian Pop { 830176d43eSStelian Pop /* adress of boot parameters */ 848c6407fcSReinhard Meyer gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100; 850176d43eSStelian Pop 860176d43eSStelian Pop #ifdef CONFIG_CMD_NAND 870176d43eSStelian Pop at91sam9260ek_nand_hw_init(); 880176d43eSStelian Pop #endif 890176d43eSStelian Pop return 0; 900176d43eSStelian Pop } 910176d43eSStelian Pop dram_init(void)920176d43eSStelian Popint dram_init(void) 930176d43eSStelian Pop { 948c6407fcSReinhard Meyer gd->ram_size = get_ram_size( 958c6407fcSReinhard Meyer (void *)CONFIG_SYS_SDRAM_BASE, 968c6407fcSReinhard Meyer CONFIG_SYS_SDRAM_SIZE); 970176d43eSStelian Pop return 0; 980176d43eSStelian Pop } 990176d43eSStelian Pop 1000176d43eSStelian Pop #ifdef CONFIG_RESET_PHY_R reset_phy(void)1010176d43eSStelian Popvoid reset_phy(void) 1020176d43eSStelian Pop { 1030176d43eSStelian Pop } 1040176d43eSStelian Pop #endif 105