blob: 2b0b01798eae978b9ca498118469e54b4b7ee4a0 [file] [log] [blame]
Tom Rini83d290c2018-05-06 17:58:06 -04001// SPDX-License-Identifier: GPL-2.0+
Stelian Pop8e429b32008-05-08 18:52:23 +02002/*
3 * (C) Copyright 2007-2008
Stelian Popc9e798d2011-11-01 00:00:39 +01004 * Stelian Pop <stelian@popies.net>
Stelian Pop8e429b32008-05-08 18:52:23 +02005 * Lead Tech Design <www.leadtechdesign.com>
Stelian Pop8e429b32008-05-08 18:52:23 +02006 */
7
Tom Rinie7ef4dc2024-04-30 20:41:08 -06008#include <config.h>
Wenyou Yangeaa59b32017-04-18 15:31:02 +08009#include <debug_uart.h>
Simon Glass9b4a2052019-12-28 10:45:05 -070010#include <init.h>
Simon Glass5e6267a2019-12-28 10:44:48 -070011#include <net.h>
Simon Glass2189d5f2019-11-14 12:57:20 -070012#include <vsprintf.h>
Simon Glass401d1c42020-10-30 21:38:53 -060013#include <asm/global_data.h>
Alexey Brodkin1ace4022014-02-26 17:47:58 +040014#include <linux/sizes.h>
Stelian Pop8e429b32008-05-08 18:52:23 +020015#include <asm/arch/at91sam9263.h>
Stelian Pop8e429b32008-05-08 18:52:23 +020016#include <asm/arch/at91sam9_smc.h>
Jean-Christophe PLAGNIOL-VILLARD1332a2a2009-03-21 21:07:59 +010017#include <asm/arch/at91_common.h>
Jens Scharsig1b34f002010-02-03 22:47:18 +010018#include <asm/arch/at91_matrix.h>
19#include <asm/arch/at91_pio.h>
Jean-Christophe PLAGNIOL-VILLARDdc39ae92009-04-16 21:30:44 +020020#include <asm/arch/clk.h>
Xu, Hongcd46b0f2011-06-10 21:31:26 +000021#include <asm/io.h>
22#include <asm/arch/gpio.h>
Ben Warren3ae071e2008-08-12 22:11:53 -070023#include <asm/arch/hardware.h>
Stelian Pop56a24792008-05-08 14:52:31 +020024#include <atmel_lcdc.h>
Simon Glassc62db352017-05-31 19:47:48 -060025#include <asm/mach-types.h>
Stelian Pop8e429b32008-05-08 18:52:23 +020026
27DECLARE_GLOBAL_DATA_PTR;
28
29/* ------------------------------------------------------------------------- */
30/*
31 * Miscelaneous platform dependent initialisations
32 */
33
Stelian Pop8e429b32008-05-08 18:52:23 +020034#ifdef CONFIG_CMD_NAND
35static void at91sam9263ek_nand_hw_init(void)
36{
37 unsigned long csa;
Xu, Hongcd46b0f2011-06-10 21:31:26 +000038 at91_smc_t *smc = (at91_smc_t *) ATMEL_BASE_SMC0;
39 at91_matrix_t *matrix = (at91_matrix_t *) ATMEL_BASE_MATRIX;
Stelian Pop8e429b32008-05-08 18:52:23 +020040
41 /* Enable CS3 */
Jens Scharsig1b34f002010-02-03 22:47:18 +010042 csa = readl(&matrix->csa[0]) | AT91_MATRIX_CSA_EBI_CS3A;
43 writel(csa, &matrix->csa[0]);
44
45 /* Enable CS3 */
Stelian Pop8e429b32008-05-08 18:52:23 +020046
47 /* Configure SMC CS3 for NAND/SmartMedia */
Jens Scharsig1b34f002010-02-03 22:47:18 +010048 writel(AT91_SMC_SETUP_NWE(1) | AT91_SMC_SETUP_NCS_WR(0) |
49 AT91_SMC_SETUP_NRD(1) | AT91_SMC_SETUP_NCS_RD(0),
50 &smc->cs[3].setup);
Stelian Pop8e429b32008-05-08 18:52:23 +020051
Jens Scharsig1b34f002010-02-03 22:47:18 +010052 writel(AT91_SMC_PULSE_NWE(3) | AT91_SMC_PULSE_NCS_WR(3) |
53 AT91_SMC_PULSE_NRD(3) | AT91_SMC_PULSE_NCS_RD(3),
54 &smc->cs[3].pulse);
55
56 writel(AT91_SMC_CYCLE_NWE(5) | AT91_SMC_CYCLE_NRD(5),
57 &smc->cs[3].cycle);
58 writel(AT91_SMC_MODE_RM_NRD | AT91_SMC_MODE_WM_NWE |
59 AT91_SMC_MODE_EXNW_DISABLE |
60#ifdef CONFIG_SYS_NAND_DBW_16
61 AT91_SMC_MODE_DBW_16 |
62#else /* CONFIG_SYS_NAND_DBW_8 */
63 AT91_SMC_MODE_DBW_8 |
64#endif
65 AT91_SMC_MODE_TDF_CYCLE(2),
66 &smc->cs[3].mode);
67
Wenyou Yang70341e22016-02-03 10:16:50 +080068 at91_periph_clk_enable(ATMEL_ID_PIOA);
69 at91_periph_clk_enable(ATMEL_ID_PIOCDE);
Stelian Pop8e429b32008-05-08 18:52:23 +020070
71 /* Configure RDY/BSY */
Tom Rini4e590942022-11-12 17:36:51 -050072 at91_set_gpio_input(CFG_SYS_NAND_READY_PIN, 1);
Stelian Pop8e429b32008-05-08 18:52:23 +020073
74 /* Enable NandFlash */
Tom Rini4e590942022-11-12 17:36:51 -050075 at91_set_gpio_output(CFG_SYS_NAND_ENABLE_PIN, 1);
Stelian Pop8e429b32008-05-08 18:52:23 +020076}
77#endif
78
Wenyou Yangeaa59b32017-04-18 15:31:02 +080079#ifdef CONFIG_DEBUG_UART_BOARD_INIT
80void board_debug_uart_init(void)
81{
82 at91_seriald_hw_init();
83}
84#endif
85
86#ifdef CONFIG_BOARD_EARLY_INIT_F
Xu, Hongcd46b0f2011-06-10 21:31:26 +000087int board_early_init_f(void)
88{
Xu, Hongcd46b0f2011-06-10 21:31:26 +000089 return 0;
90}
Wenyou Yangeaa59b32017-04-18 15:31:02 +080091#endif
Xu, Hongcd46b0f2011-06-10 21:31:26 +000092
Stelian Pop8e429b32008-05-08 18:52:23 +020093int board_init(void)
94{
Stelian Pop8e429b32008-05-08 18:52:23 +020095 /* arch number of AT91SAM9263EK-Board */
96 gd->bd->bi_arch_number = MACH_TYPE_AT91SAM9263EK;
97 /* adress of boot parameters */
Tom Riniaa6e94d2022-11-16 13:10:37 -050098 gd->bd->bi_boot_params = CFG_SYS_SDRAM_BASE + 0x100;
Stelian Pop8e429b32008-05-08 18:52:23 +020099
Stelian Pop8e429b32008-05-08 18:52:23 +0200100#ifdef CONFIG_CMD_NAND
101 at91sam9263ek_nand_hw_init();
102#endif
Stelian Pop8e429b32008-05-08 18:52:23 +0200103#ifdef CONFIG_USB_OHCI_NEW
Jean-Christophe PLAGNIOL-VILLARDf3f91f82009-03-21 21:08:00 +0100104 at91_uhp_hw_init();
Stelian Pop8e429b32008-05-08 18:52:23 +0200105#endif
Stelian Pop8e429b32008-05-08 18:52:23 +0200106 return 0;
107}
108
109int dram_init(void)
110{
Tom Riniaa6e94d2022-11-16 13:10:37 -0500111 gd->ram_size = get_ram_size((void *)CFG_SYS_SDRAM_BASE,
112 CFG_SYS_SDRAM_SIZE);
Xu, Hongcd46b0f2011-06-10 21:31:26 +0000113
Stelian Pop8e429b32008-05-08 18:52:23 +0200114 return 0;
115}
116
117#ifdef CONFIG_RESET_PHY_R
118void reset_phy(void)
119{
Stelian Pop8e429b32008-05-08 18:52:23 +0200120}
121#endif