blob: 274f72d427416e77cfe3dfc44ab09a7c03253edb [file] [log] [blame]
Tom Rix23b80982009-09-27 11:10:09 -05001/*
2 * (C) Copyright 2007-2008
Stelian Popc9e798d2011-11-01 00:00:39 +01003 * Stelian Pop <stelian@popies.net>
Tom Rix23b80982009-09-27 11:10:09 -05004 * Lead Tech Design <www.leadtechdesign.com>
5 * Ilko Iliev <www.ronetix.at>
6 *
Eric Benard95d50e52011-06-06 22:48:28 +00007 * (C) Copyright 2009-2011
Tom Rix23b80982009-09-27 11:10:09 -05008 * Eric Benard <eric@eukrea.com>
9 *
Wolfgang Denk1a459662013-07-08 09:37:19 +020010 * SPDX-License-Identifier: GPL-2.0+
Tom Rix23b80982009-09-27 11:10:09 -050011 */
12
13#include <common.h>
Eric Benard95d50e52011-06-06 22:48:28 +000014#include <asm/io.h>
Tom Rix23b80982009-09-27 11:10:09 -050015#include <asm/arch/at91sam9260.h>
Tom Rix23b80982009-09-27 11:10:09 -050016#include <asm/arch/at91sam9_smc.h>
17#include <asm/arch/at91_common.h>
Eric Benard95d50e52011-06-06 22:48:28 +000018#include <asm/arch/at91_matrix.h>
Tom Rix23b80982009-09-27 11:10:09 -050019#include <asm/arch/at91_pmc.h>
Eric Benardc2b2a072011-04-03 06:35:54 +000020#include <asm/arch/at91_pio.h>
21#include <asm/arch/clk.h>
Tom Rix23b80982009-09-27 11:10:09 -050022#include <asm/arch/hardware.h>
23#if defined(CONFIG_RESET_PHY_R) && defined(CONFIG_MACB)
24#include <net.h>
25#endif
26#include <netdev.h>
27
28DECLARE_GLOBAL_DATA_PTR;
29
30/* ------------------------------------------------------------------------- */
31/*
32 * Miscelaneous platform dependent initialisations
33 */
34
35#ifdef CONFIG_CMD_NAND
36static void cpu9260_nand_hw_init(void)
37{
38 unsigned long csa;
Eric Benard95d50e52011-06-06 22:48:28 +000039 at91_smc_t *smc = (at91_smc_t *) ATMEL_BASE_SMC;
40 at91_matrix_t *matrix = (at91_matrix_t *) ATMEL_BASE_MATRIX;
41 at91_pmc_t *pmc = (at91_pmc_t *) ATMEL_BASE_PMC;
Tom Rix23b80982009-09-27 11:10:09 -050042
43 /* Enable CS3 */
Eric Benardc2b2a072011-04-03 06:35:54 +000044 csa = readl(&matrix->csa) | AT91_MATRIX_CSA_EBI_CS3A;
45 writel(csa, &matrix->csa);
Tom Rix23b80982009-09-27 11:10:09 -050046
47 /* Configure SMC CS3 for NAND/SmartMedia */
48#if defined(CONFIG_CPU9G20)
Eric Benardc2b2a072011-04-03 06:35:54 +000049 writel(AT91_SMC_SETUP_NWE(2) | AT91_SMC_SETUP_NCS_WR(0) |
50 AT91_SMC_SETUP_NRD(2) | AT91_SMC_SETUP_NCS_RD(0),
51 &smc->cs[3].setup);
52 writel(AT91_SMC_PULSE_NWE(4) | AT91_SMC_PULSE_NCS_WR(4) |
53 AT91_SMC_PULSE_NRD(4) | AT91_SMC_PULSE_NCS_RD(4),
54 &smc->cs[3].pulse);
55 writel(AT91_SMC_CYCLE_NWE(7) | AT91_SMC_CYCLE_NRD(7),
56 &smc->cs[3].cycle);
57 writel(AT91_SMC_MODE_RM_NRD | AT91_SMC_MODE_WM_NWE |
58 AT91_SMC_MODE_EXNW_DISABLE |
59 AT91_SMC_MODE_DBW_8 |
60 AT91_SMC_MODE_TDF_CYCLE(3),
61 &smc->cs[3].mode);
Tom Rix23b80982009-09-27 11:10:09 -050062#elif defined(CONFIG_CPU9260)
Eric Benardc2b2a072011-04-03 06:35:54 +000063 writel(AT91_SMC_SETUP_NWE(1) | AT91_SMC_SETUP_NCS_WR(0) |
64 AT91_SMC_SETUP_NRD(1) | AT91_SMC_SETUP_NCS_RD(0),
65 &smc->cs[3].setup);
66 writel(AT91_SMC_PULSE_NWE(3) | AT91_SMC_PULSE_NCS_WR(3) |
67 AT91_SMC_PULSE_NRD(3) | AT91_SMC_PULSE_NCS_RD(3),
68 &smc->cs[3].pulse);
69 writel(AT91_SMC_CYCLE_NWE(5) | AT91_SMC_CYCLE_NRD(5),
70 &smc->cs[3].cycle);
71 writel(AT91_SMC_MODE_RM_NRD | AT91_SMC_MODE_WM_NWE |
72 AT91_SMC_MODE_EXNW_DISABLE |
73 AT91_SMC_MODE_DBW_8 |
74 AT91_SMC_MODE_TDF_CYCLE(2),
75 &smc->cs[3].mode);
Tom Rix23b80982009-09-27 11:10:09 -050076#endif
77
Eric Benard95d50e52011-06-06 22:48:28 +000078 writel(1 << ATMEL_ID_PIOC, &pmc->pcer);
Tom Rix23b80982009-09-27 11:10:09 -050079
80 /* Configure RDY/BSY */
Eric Benardc2b2a072011-04-03 06:35:54 +000081 at91_set_pio_input(CONFIG_SYS_NAND_READY_PIN, 1);
Tom Rix23b80982009-09-27 11:10:09 -050082
83 /* Enable NandFlash */
Eric Benardc2b2a072011-04-03 06:35:54 +000084 at91_set_pio_output(CONFIG_SYS_NAND_ENABLE_PIN, 1);
Tom Rix23b80982009-09-27 11:10:09 -050085}
86#endif
87
88#ifdef CONFIG_MACB
89static void cpu9260_macb_hw_init(void)
90{
Eric Benard95d50e52011-06-06 22:48:28 +000091 at91_pmc_t *pmc = (at91_pmc_t *) ATMEL_BASE_PMC;
Tom Rix23b80982009-09-27 11:10:09 -050092
93 /* Enable clock */
Eric Benard95d50e52011-06-06 22:48:28 +000094 writel(1 << ATMEL_ID_EMAC0, &pmc->pcer);
Tom Rix23b80982009-09-27 11:10:09 -050095
Eric Benardc2b2a072011-04-03 06:35:54 +000096 at91_set_pio_pullup(AT91_PIO_PORTA, 17, 1);
Tom Rix23b80982009-09-27 11:10:09 -050097
Heiko Schocher4535a242013-11-18 08:07:23 +010098 at91_phy_reset();
Tom Rix23b80982009-09-27 11:10:09 -050099
100 at91_macb_hw_init();
101}
102#endif
103
Eric Benardc2b2a072011-04-03 06:35:54 +0000104int board_early_init_f(void)
105{
Eric Benard95d50e52011-06-06 22:48:28 +0000106 at91_pmc_t *pmc = (at91_pmc_t *) ATMEL_BASE_PMC;
Eric Benardc2b2a072011-04-03 06:35:54 +0000107
Eric Benard95d50e52011-06-06 22:48:28 +0000108 writel((1 << ATMEL_ID_PIOA) |
109 (1 << ATMEL_ID_PIOB) |
110 (1 << ATMEL_ID_PIOC),
Eric Benardc2b2a072011-04-03 06:35:54 +0000111 &pmc->pcer);
112
Eric Benard95d50e52011-06-06 22:48:28 +0000113 at91_seriald_hw_init();
Eric Benardc2b2a072011-04-03 06:35:54 +0000114
115 return 0;
116}
117
118
Tom Rix23b80982009-09-27 11:10:09 -0500119int board_init(void)
120{
Tom Rix23b80982009-09-27 11:10:09 -0500121 /* arch number of the board */
122#if defined(CONFIG_CPU9G20)
Eric Benard94d50c52009-10-12 10:08:20 +0200123 gd->bd->bi_arch_number = MACH_TYPE_CPUAT9G20;
Tom Rix23b80982009-09-27 11:10:09 -0500124#elif defined(CONFIG_CPU9260)
125 gd->bd->bi_arch_number = MACH_TYPE_CPUAT9260;
126#endif
127
128 /* adress of boot parameters */
Eric Benardc2b2a072011-04-03 06:35:54 +0000129 gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100;
Tom Rix23b80982009-09-27 11:10:09 -0500130
Tom Rix23b80982009-09-27 11:10:09 -0500131#ifdef CONFIG_CMD_NAND
132 cpu9260_nand_hw_init();
133#endif
134#ifdef CONFIG_MACB
135 cpu9260_macb_hw_init();
136#endif
137#if defined(CONFIG_STATUS_LED) && defined(STATUS_LED_BOOT)
138 status_led_set(STATUS_LED_BOOT, STATUS_LED_ON);
139#endif
140 return 0;
141}
142
143int dram_init(void)
144{
Albert ARIBAUDa55d23c2011-07-03 05:55:33 +0000145 gd->ram_size = get_ram_size((long *)CONFIG_SYS_SDRAM_BASE,
Eric Benardc2b2a072011-04-03 06:35:54 +0000146 CONFIG_SYS_SDRAM_SIZE);
Tom Rix23b80982009-09-27 11:10:09 -0500147 return 0;
148}
149
Tom Rix23b80982009-09-27 11:10:09 -0500150int board_eth_init(bd_t *bis)
151{
152 int rc = 0;
153#ifdef CONFIG_MACB
Eric Benard95d50e52011-06-06 22:48:28 +0000154 rc = macb_eth_initialize(0, (void *)ATMEL_BASE_EMAC0, 0);
Tom Rix23b80982009-09-27 11:10:09 -0500155#endif
156 return rc;
157}