diff options
Diffstat (limited to 'board')
| -rw-r--r-- | board/siemens/taurus/Makefile | 18 | ||||
| -rw-r--r-- | board/siemens/taurus/taurus.c | 160 | 
2 files changed, 178 insertions, 0 deletions
| diff --git a/board/siemens/taurus/Makefile b/board/siemens/taurus/Makefile new file mode 100644 index 000000000..a26fb9214 --- /dev/null +++ b/board/siemens/taurus/Makefile @@ -0,0 +1,18 @@ +# +# Makefile for Siemens TAURUS (AT91SAM9G20) based board +# (C) Copyright 2013 Siemens AG +# +# Based on: +# U-Boot file: board/atmel/at91sam9260ek/Makefile +# +# (C) Copyright 2003-2008 +# Wolfgang Denk, DENX Software Engineering, wd@denx.de. +# +# (C) Copyright 2008 +# Stelian Pop <stelian@popies.net> +# Lead Tech Design <www.leadtechdesign.com> +# +# SPDX-License-Identifier:	GPL-2.0+ +# + +obj-y	+= taurus.o diff --git a/board/siemens/taurus/taurus.c b/board/siemens/taurus/taurus.c new file mode 100644 index 000000000..673b3029a --- /dev/null +++ b/board/siemens/taurus/taurus.c @@ -0,0 +1,160 @@ +/* + * Board functions for Siemens TAURUS (AT91SAM9G20) based boards + * (C) Copyright Siemens AG + * + * Based on: + * U-Boot file: board/atmel/at91sam9260ek/at91sam9260ek.c + * + * (C) Copyright 2007-2008 + * Stelian Pop <stelian@popies.net> + * Lead Tech Design <www.leadtechdesign.com> + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#include <common.h> +#include <asm/io.h> +#include <asm/arch/at91sam9260_matrix.h> +#include <asm/arch/at91sam9_smc.h> +#include <asm/arch/at91_common.h> +#include <asm/arch/at91_pmc.h> +#include <asm/arch/at91_rstc.h> +#include <asm/arch/gpio.h> +#include <asm/arch/at91sam9_sdramc.h> +#include <atmel_mci.h> + +#include <net.h> +#include <netdev.h> + +DECLARE_GLOBAL_DATA_PTR; + +#ifdef CONFIG_CMD_NAND +static void taurus_nand_hw_init(void) +{ +	struct at91_smc *smc = (struct at91_smc *)ATMEL_BASE_SMC; +	struct at91_matrix *matrix = (struct at91_matrix *)ATMEL_BASE_MATRIX; +	unsigned long csa; + +	/* Assign CS3 to NAND/SmartMedia Interface */ +	csa = readl(&matrix->ebicsa); +	csa |= AT91_MATRIX_CS3A_SMC_SMARTMEDIA; +	writel(csa, &matrix->ebicsa); + +	/* Configure SMC CS3 for NAND/SmartMedia */ +	writel(AT91_SMC_SETUP_NWE(2) | AT91_SMC_SETUP_NCS_WR(0) | +	       AT91_SMC_SETUP_NRD(2) | AT91_SMC_SETUP_NCS_RD(0), +	       &smc->cs[3].setup); +	writel(AT91_SMC_PULSE_NWE(4) | AT91_SMC_PULSE_NCS_WR(3) | +	       AT91_SMC_PULSE_NRD(4) | AT91_SMC_PULSE_NCS_RD(3), +	       &smc->cs[3].pulse); +	writel(AT91_SMC_CYCLE_NWE(7) | AT91_SMC_CYCLE_NRD(7), +	       &smc->cs[3].cycle); +	writel(AT91_SMC_MODE_RM_NRD | AT91_SMC_MODE_WM_NWE | +	       AT91_SMC_MODE_EXNW_DISABLE | +	       AT91_SMC_MODE_DBW_8 | +	       AT91_SMC_MODE_TDF_CYCLE(3), +	       &smc->cs[3].mode); + +	/* Configure RDY/BSY */ +	at91_set_gpio_input(CONFIG_SYS_NAND_READY_PIN, 1); + +	/* Enable NandFlash */ +	at91_set_gpio_output(CONFIG_SYS_NAND_ENABLE_PIN, 1); +} +#endif + +#ifdef CONFIG_MACB +static void taurus_macb_hw_init(void) +{ +	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC; + +	/* Enable EMAC clock */ +	writel(1 << ATMEL_ID_EMAC0, &pmc->pcer); + +	/* +	 * Disable pull-up on: +	 *	RXDV (PA17) => PHY normal mode (not Test mode) +	 *	ERX0 (PA14) => PHY ADDR0 +	 *	ERX1 (PA15) => PHY ADDR1 +	 *	ERX2 (PA25) => PHY ADDR2 +	 *	ERX3 (PA26) => PHY ADDR3 +	 *	ECRS (PA28) => PHY ADDR4  => PHYADDR = 0x0 +	 * +	 * PHY has internal pull-down +	 */ +	at91_set_pio_pullup(AT91_PIO_PORTA, 14, 0); +	at91_set_pio_pullup(AT91_PIO_PORTA, 15, 0); +	at91_set_pio_pullup(AT91_PIO_PORTA, 17, 0); +	at91_set_pio_pullup(AT91_PIO_PORTA, 25, 0); +	at91_set_pio_pullup(AT91_PIO_PORTA, 26, 0); +	at91_set_pio_pullup(AT91_PIO_PORTA, 28, 0); + +	at91_phy_reset(); + +	at91_set_gpio_input(AT91_PIN_PA25, 1);   /* ERST tri-state */ + +	/* Re-enable pull-up */ +	at91_set_pio_pullup(AT91_PIO_PORTA, 14, 1); +	at91_set_pio_pullup(AT91_PIO_PORTA, 15, 1); +	at91_set_pio_pullup(AT91_PIO_PORTA, 17, 1); +	at91_set_pio_pullup(AT91_PIO_PORTA, 25, 1); +	at91_set_pio_pullup(AT91_PIO_PORTA, 26, 1); +	at91_set_pio_pullup(AT91_PIO_PORTA, 28, 1); + +	/* Initialize EMAC=MACB hardware */ +	at91_macb_hw_init(); +} +#endif + +#ifdef CONFIG_GENERIC_ATMEL_MCI +int board_mmc_init(bd_t *bd) +{ +	at91_mci_hw_init(); + +	return atmel_mci_init((void *)ATMEL_BASE_MCI); +} +#endif + +int board_early_init_f(void) +{ +	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC; + +	/* Enable clocks for all PIOs */ +	writel((1 << ATMEL_ID_PIOA) | (1 << ATMEL_ID_PIOB) | +		(1 << ATMEL_ID_PIOC), +		&pmc->pcer); + +	return 0; +} + +int board_init(void) +{ +	/* adress of boot parameters */ +	gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100; + +	at91_seriald_hw_init(); +#ifdef CONFIG_CMD_NAND +	taurus_nand_hw_init(); +#endif +#ifdef CONFIG_MACB +	taurus_macb_hw_init(); +#endif + +	return 0; +} + +int dram_init(void) +{ +	gd->ram_size = get_ram_size((void *)CONFIG_SYS_SDRAM_BASE, +				    CONFIG_SYS_SDRAM_SIZE); +	return 0; +} + +int board_eth_init(bd_t *bis) +{ +	int rc = 0; +#ifdef CONFIG_MACB +	rc = macb_eth_initialize(0, (void *)ATMEL_BASE_EMAC0, 0x00); +#endif +	return rc; +} |