blob: b2b7093080501798575a5970c12d0e9a96bb84bd [file] [log] [blame]
Tom Rini10e47792018-05-06 17:58:06 -04001// SPDX-License-Identifier: GPL-2.0+
Stelian Pop69c925f2008-05-08 18:52:23 +02002/*
3 * (C) Copyright 2007-2008
Stelian Pop5ee0c7f2011-11-01 00:00:39 +01004 * Stelian Pop <stelian@popies.net>
Stelian Pop69c925f2008-05-08 18:52:23 +02005 * Lead Tech Design <www.leadtechdesign.com>
Stelian Pop69c925f2008-05-08 18:52:23 +02006 */
7
8#include <common.h>
Wenyou Yang4a2c89a2017-04-18 15:31:02 +08009#include <debug_uart.h>
Simon Glass8e16b1e2019-12-28 10:45:05 -070010#include <init.h>
Simon Glass0c364412019-12-28 10:44:48 -070011#include <net.h>
Simon Glassf5c208d2019-11-14 12:57:20 -070012#include <vsprintf.h>
Simon Glass3ba929a2020-10-30 21:38:53 -060013#include <asm/global_data.h>
Alexey Brodkin267d8e22014-02-26 17:47:58 +040014#include <linux/sizes.h>
Stelian Pop69c925f2008-05-08 18:52:23 +020015#include <asm/arch/at91sam9263.h>
Stelian Pop69c925f2008-05-08 18:52:23 +020016#include <asm/arch/at91sam9_smc.h>
Jean-Christophe PLAGNIOL-VILLARD6b0b3db2009-03-21 21:07:59 +010017#include <asm/arch/at91_common.h>
Jens Scharsigc3c10ea2010-02-03 22:47:18 +010018#include <asm/arch/at91_matrix.h>
19#include <asm/arch/at91_pio.h>
Jean-Christophe PLAGNIOL-VILLARD23164f12009-04-16 21:30:44 +020020#include <asm/arch/clk.h>
Xu, Hong504e4e12011-06-10 21:31:26 +000021#include <asm/io.h>
22#include <asm/arch/gpio.h>
Ben Warren057d2022008-08-12 22:11:53 -070023#include <asm/arch/hardware.h>
Stelian Pope068a9b2008-05-08 14:52:31 +020024#include <atmel_lcdc.h>
Simon Glass0ffb9d62017-05-31 19:47:48 -060025#include <asm/mach-types.h>
Stelian Pop69c925f2008-05-08 18:52:23 +020026
27DECLARE_GLOBAL_DATA_PTR;
28
29/* ------------------------------------------------------------------------- */
30/*
31 * Miscelaneous platform dependent initialisations
32 */
33
Stelian Pop69c925f2008-05-08 18:52:23 +020034#ifdef CONFIG_CMD_NAND
35static void at91sam9263ek_nand_hw_init(void)
36{
37 unsigned long csa;
Xu, Hong504e4e12011-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 Pop69c925f2008-05-08 18:52:23 +020040
41 /* Enable CS3 */
Jens Scharsigc3c10ea2010-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 Pop69c925f2008-05-08 18:52:23 +020046
47 /* Configure SMC CS3 for NAND/SmartMedia */
Jens Scharsigc3c10ea2010-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);
51
52 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 |
Jean-Christophe PLAGNIOL-VILLARD03836942008-10-16 15:01:15 +020060#ifdef CONFIG_SYS_NAND_DBW_16
Jens Scharsigc3c10ea2010-02-03 22:47:18 +010061 AT91_SMC_MODE_DBW_16 |
Jean-Christophe PLAGNIOL-VILLARD03836942008-10-16 15:01:15 +020062#else /* CONFIG_SYS_NAND_DBW_8 */
Jens Scharsigc3c10ea2010-02-03 22:47:18 +010063 AT91_SMC_MODE_DBW_8 |
Stelian Pop69c925f2008-05-08 18:52:23 +020064#endif
Jens Scharsigc3c10ea2010-02-03 22:47:18 +010065 AT91_SMC_MODE_TDF_CYCLE(2),
66 &smc->cs[3].mode);
Stelian Pop69c925f2008-05-08 18:52:23 +020067
Wenyou Yang78f89762016-02-03 10:16:50 +080068 at91_periph_clk_enable(ATMEL_ID_PIOA);
69 at91_periph_clk_enable(ATMEL_ID_PIOCDE);
Stelian Pop69c925f2008-05-08 18:52:23 +020070
71 /* Configure RDY/BSY */
Tom Rinib4213492022-11-12 17:36:51 -050072 at91_set_gpio_input(CFG_SYS_NAND_READY_PIN, 1);
Stelian Pop69c925f2008-05-08 18:52:23 +020073
74 /* Enable NandFlash */
Tom Rinib4213492022-11-12 17:36:51 -050075 at91_set_gpio_output(CFG_SYS_NAND_ENABLE_PIN, 1);
Stelian Pop69c925f2008-05-08 18:52:23 +020076}
77#endif
78
Wenyou Yang4a2c89a2017-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, Hong504e4e12011-06-10 21:31:26 +000087int board_early_init_f(void)
88{
Xu, Hong504e4e12011-06-10 21:31:26 +000089 return 0;
90}
Wenyou Yang4a2c89a2017-04-18 15:31:02 +080091#endif
Xu, Hong504e4e12011-06-10 21:31:26 +000092
Stelian Pop69c925f2008-05-08 18:52:23 +020093int board_init(void)
94{
Stelian Pop69c925f2008-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 */
Xu, Hong504e4e12011-06-10 21:31:26 +000098 gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100;
Stelian Pop69c925f2008-05-08 18:52:23 +020099
Stelian Pop69c925f2008-05-08 18:52:23 +0200100#ifdef CONFIG_CMD_NAND
101 at91sam9263ek_nand_hw_init();
102#endif
Stelian Pop69c925f2008-05-08 18:52:23 +0200103#ifdef CONFIG_USB_OHCI_NEW
Jean-Christophe PLAGNIOL-VILLARD4fc81fb2009-03-21 21:08:00 +0100104 at91_uhp_hw_init();
Stelian Pop69c925f2008-05-08 18:52:23 +0200105#endif
Stelian Pop69c925f2008-05-08 18:52:23 +0200106 return 0;
107}
108
109int dram_init(void)
110{
Xu, Hong504e4e12011-06-10 21:31:26 +0000111 gd->ram_size = get_ram_size((void *)CONFIG_SYS_SDRAM_BASE,
112 CONFIG_SYS_SDRAM_SIZE);
113
Stelian Pop69c925f2008-05-08 18:52:23 +0200114 return 0;
115}
116
117#ifdef CONFIG_RESET_PHY_R
118void reset_phy(void)
119{
Stelian Pop69c925f2008-05-08 18:52:23 +0200120}
121#endif