mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-28 15:41:40 +00:00
ARM: atmel: at91sam9x5ek: enable spl support
Enable SPL support for at91sam9x5ek board. Now, it supports boot up from NAND flash and SPI flash. Signed-off-by: Bo Shen <voice.shen@atmel.com>
This commit is contained in:
parent
41d41a93fb
commit
d85e8914b3
11 changed files with 157 additions and 4 deletions
|
@ -83,6 +83,7 @@ config TARGET_AT91SAM9RLEK
|
|||
config TARGET_AT91SAM9X5EK
|
||||
bool "Atmel AT91SAM9X5-EK board"
|
||||
select CPU_ARM926EJS
|
||||
select SUPPORT_SPL
|
||||
|
||||
config TARGET_SAMA5D3_XPLAINED
|
||||
bool "SAMA5D3 Xplained board"
|
||||
|
|
|
@ -2,6 +2,7 @@ obj-$(CONFIG_AT91_WANTS_COMMON_PHY) += phy.o
|
|||
ifneq ($(CONFIG_SPL_BUILD),)
|
||||
obj-$(CONFIG_AT91SAM9G20) += sdram.o spl_at91.o
|
||||
obj-$(CONFIG_AT91SAM9M10G45) += mpddrc.o spl_at91.o
|
||||
obj-$(CONFIG_AT91SAM9X5) += mpddrc.o spl_at91.o
|
||||
obj-$(CONFIG_SAMA5D3) += mpddrc.o spl_atmel.o
|
||||
obj-$(CONFIG_SAMA5D4) += mpddrc.o spl_atmel.o
|
||||
obj-y += spl.o
|
||||
|
|
|
@ -97,7 +97,8 @@ typedef struct at91_pmc {
|
|||
#define AT91_PMC_MCKR_CSS_PLLB 0x00000003
|
||||
#define AT91_PMC_MCKR_CSS_MASK 0x00000003
|
||||
|
||||
#if defined(CONFIG_SAMA5D3) || defined(CONFIG_SAMA5D4)
|
||||
#if defined(CONFIG_SAMA5D3) || defined(CONFIG_SAMA5D4) || \
|
||||
defined(CONFIG_AT91SAM9X5)
|
||||
#define AT91_PMC_MCKR_PRES_1 0x00000000
|
||||
#define AT91_PMC_MCKR_PRES_2 0x00000010
|
||||
#define AT91_PMC_MCKR_PRES_4 0x00000020
|
||||
|
@ -126,7 +127,8 @@ typedef struct at91_pmc {
|
|||
#else
|
||||
#define AT91_PMC_MCKR_MDIV_1 0x00000000
|
||||
#define AT91_PMC_MCKR_MDIV_2 0x00000100
|
||||
#if defined(CONFIG_SAMA5D3) || defined(CONFIG_SAMA5D4)
|
||||
#if defined(CONFIG_SAMA5D3) || defined(CONFIG_SAMA5D4) || \
|
||||
defined(CONFIG_AT91SAM9X5)
|
||||
#define AT91_PMC_MCKR_MDIV_3 0x00000300
|
||||
#endif
|
||||
#define AT91_PMC_MCKR_MDIV_4 0x00000200
|
||||
|
|
|
@ -124,6 +124,16 @@
|
|||
#define ATMEL_BASE_EHCI 0x00700000 /* USB Host controller (EHCI) */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* External memory
|
||||
*/
|
||||
#define ATMEL_BASE_CS0 0x10000000
|
||||
#define ATMEL_BASE_CS1 0x20000000
|
||||
#define ATMEL_BASE_CS2 0x30000000
|
||||
#define ATMEL_BASE_CS3 0x40000000
|
||||
#define ATMEL_BASE_CS4 0x50000000
|
||||
#define ATMEL_BASE_CS5 0x60000000
|
||||
|
||||
/* 9x5 series chip id definitions */
|
||||
#define ARCH_ID_AT91SAM9X5 0x819a05a0
|
||||
#define ARCH_ID_VERSION_MASK 0x1f
|
||||
|
|
|
@ -19,7 +19,8 @@ static inline void atmel_mpddr_op(int mode, u32 ram_address)
|
|||
|
||||
static int ddr2_decodtype_is_seq(u32 cr)
|
||||
{
|
||||
#if defined(CONFIG_SAMA5D3) || defined(CONFIG_SAMA5D4)
|
||||
#if defined(CONFIG_SAMA5D3) || defined(CONFIG_SAMA5D4) || \
|
||||
defined(CONFIG_AT91SAM9X5)
|
||||
if (cr & ATMEL_MPDDRC_CR_DECOD_INTERLEAVED)
|
||||
return 0;
|
||||
#endif
|
||||
|
|
|
@ -29,7 +29,7 @@ u32 spl_boot_device(void)
|
|||
return BOOT_DEVICE_MMC1;
|
||||
#elif CONFIG_SYS_USE_NANDFLASH
|
||||
return BOOT_DEVICE_NAND;
|
||||
#elif CONFIG_SYS_USE_SERIALFLASH
|
||||
#elif CONFIG_SYS_USE_SERIALFLASH || CONFIG_SYS_USE_SPIFLASH
|
||||
return BOOT_DEVICE_SPI;
|
||||
#endif
|
||||
return BOOT_DEVICE_NONE;
|
||||
|
|
|
@ -115,9 +115,14 @@ void board_init_f(ulong dummy)
|
|||
timer_init();
|
||||
|
||||
/* enable clocks for all PIOs */
|
||||
#ifdef CONFIG_AT91SAM9X5
|
||||
at91_periph_clk_enable(ATMEL_ID_PIOAB);
|
||||
at91_periph_clk_enable(ATMEL_ID_PIOCD);
|
||||
#else
|
||||
at91_periph_clk_enable(ATMEL_ID_PIOA);
|
||||
at91_periph_clk_enable(ATMEL_ID_PIOB);
|
||||
at91_periph_clk_enable(ATMEL_ID_PIOC);
|
||||
#endif
|
||||
/* init console */
|
||||
at91_seriald_hw_init();
|
||||
preloader_console_init();
|
||||
|
|
|
@ -293,3 +293,77 @@ int dram_init(void)
|
|||
CONFIG_SYS_SDRAM_SIZE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_SPL_BUILD)
|
||||
#include <spl.h>
|
||||
#include <nand.h>
|
||||
|
||||
void at91_spl_board_init(void)
|
||||
{
|
||||
#ifdef CONFIG_SYS_USE_MMC
|
||||
at91_mci_hw_init();
|
||||
#elif CONFIG_SYS_USE_NANDFLASH
|
||||
at91sam9x5ek_nand_hw_init();
|
||||
#elif CONFIG_SYS_USE_SPIFLASH
|
||||
at91_spi0_hw_init(1 << 4);
|
||||
#endif
|
||||
}
|
||||
|
||||
#include <asm/arch/atmel_mpddrc.h>
|
||||
static void ddr2_conf(struct atmel_mpddr *ddr2)
|
||||
{
|
||||
ddr2->md = (ATMEL_MPDDRC_MD_DBW_16_BITS | ATMEL_MPDDRC_MD_DDR2_SDRAM);
|
||||
|
||||
ddr2->cr = (ATMEL_MPDDRC_CR_NC_COL_10 |
|
||||
ATMEL_MPDDRC_CR_NR_ROW_13 |
|
||||
ATMEL_MPDDRC_CR_CAS_DDR_CAS3 |
|
||||
ATMEL_MPDDRC_CR_NB_8BANKS |
|
||||
ATMEL_MPDDRC_CR_DECOD_INTERLEAVED);
|
||||
|
||||
ddr2->rtr = 0x411;
|
||||
|
||||
ddr2->tpr0 = (6 << ATMEL_MPDDRC_TPR0_TRAS_OFFSET |
|
||||
2 << ATMEL_MPDDRC_TPR0_TRCD_OFFSET |
|
||||
2 << ATMEL_MPDDRC_TPR0_TWR_OFFSET |
|
||||
8 << ATMEL_MPDDRC_TPR0_TRC_OFFSET |
|
||||
2 << ATMEL_MPDDRC_TPR0_TRP_OFFSET |
|
||||
2 << ATMEL_MPDDRC_TPR0_TRRD_OFFSET |
|
||||
2 << ATMEL_MPDDRC_TPR0_TWTR_OFFSET |
|
||||
2 << ATMEL_MPDDRC_TPR0_TMRD_OFFSET);
|
||||
|
||||
ddr2->tpr1 = (2 << ATMEL_MPDDRC_TPR1_TXP_OFFSET |
|
||||
200 << ATMEL_MPDDRC_TPR1_TXSRD_OFFSET |
|
||||
19 << ATMEL_MPDDRC_TPR1_TXSNR_OFFSET |
|
||||
18 << ATMEL_MPDDRC_TPR1_TRFC_OFFSET);
|
||||
|
||||
ddr2->tpr2 = (7 << ATMEL_MPDDRC_TPR2_TFAW_OFFSET |
|
||||
2 << ATMEL_MPDDRC_TPR2_TRTP_OFFSET |
|
||||
3 << ATMEL_MPDDRC_TPR2_TRPA_OFFSET |
|
||||
7 << ATMEL_MPDDRC_TPR2_TXARDS_OFFSET |
|
||||
2 << ATMEL_MPDDRC_TPR2_TXARD_OFFSET);
|
||||
}
|
||||
|
||||
void mem_init(void)
|
||||
{
|
||||
struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
|
||||
struct at91_matrix *matrix = (struct at91_matrix *)ATMEL_BASE_MATRIX;
|
||||
struct atmel_mpddr ddr2;
|
||||
unsigned long csa;
|
||||
|
||||
ddr2_conf(&ddr2);
|
||||
|
||||
/* enable DDR2 clock */
|
||||
writel(0x4, &pmc->scer);
|
||||
|
||||
/* Chip select 1 is for DDR2/SDRAM */
|
||||
csa = readl(&matrix->ebicsa);
|
||||
csa |= AT91_MATRIX_EBI_CS1A_SDRAMC;
|
||||
csa &= ~AT91_MATRIX_EBI_DBPU_OFF;
|
||||
csa |= AT91_MATRIX_EBI_DBPD_OFF;
|
||||
csa |= AT91_MATRIX_EBI_EBI_IOSR_NORMAL;
|
||||
writel(csa, &matrix->ebicsa);
|
||||
|
||||
/* DDRAM2 Controller initialize */
|
||||
ddr2_init(ATMEL_BASE_CS1, &ddr2);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
CONFIG_SPL=y
|
||||
CONFIG_SYS_EXTRA_OPTIONS="AT91SAM9X5,SYS_USE_NANDFLASH"
|
||||
CONFIG_ARM=y
|
||||
CONFIG_ARCH_AT91=y
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
CONFIG_SPL=y
|
||||
CONFIG_SYS_EXTRA_OPTIONS="AT91SAM9X5,SYS_USE_SPIFLASH"
|
||||
CONFIG_ARM=y
|
||||
CONFIG_ARCH_AT91=y
|
||||
|
|
|
@ -243,4 +243,61 @@
|
|||
*/
|
||||
#define CONFIG_SYS_MALLOC_LEN (512 * 1024 + 0x1000)
|
||||
|
||||
/* SPL */
|
||||
#define CONFIG_SPL_FRAMEWORK
|
||||
#define CONFIG_SPL_TEXT_BASE 0x300000
|
||||
#define CONFIG_SPL_MAX_SIZE 0x6000
|
||||
#define CONFIG_SPL_STACK 0x308000
|
||||
|
||||
#define CONFIG_SPL_BSS_START_ADDR 0x20000000
|
||||
#define CONFIG_SPL_BSS_MAX_SIZE 0x80000
|
||||
#define CONFIG_SYS_SPL_MALLOC_START 0x20080000
|
||||
#define CONFIG_SYS_SPL_MALLOC_SIZE 0x80000
|
||||
|
||||
#define CONFIG_SPL_LIBCOMMON_SUPPORT
|
||||
#define CONFIG_SPL_LIBGENERIC_SUPPORT
|
||||
#define CONFIG_SPL_GPIO_SUPPORT
|
||||
#define CONFIG_SPL_SERIAL_SUPPORT
|
||||
|
||||
#define CONFIG_SPL_BOARD_INIT
|
||||
#define CONFIG_SYS_MONITOR_LEN (512 << 10)
|
||||
|
||||
#define CONFIG_SYS_MASTER_CLOCK 132096000
|
||||
#define CONFIG_SYS_AT91_PLLA 0x20c73f03
|
||||
#define CONFIG_SYS_MCKR 0x1301
|
||||
#define CONFIG_SYS_MCKR_CSS 0x1302
|
||||
|
||||
#define ATMEL_BASE_MPDDRC ATMEL_BASE_DDRSDRC
|
||||
|
||||
#ifdef CONFIG_SYS_USE_MMC
|
||||
#define CONFIG_SPL_LDSCRIPT arch/arm/mach-at91/arm926ejs/u-boot-spl.lds
|
||||
#define CONFIG_SPL_MMC_SUPPORT
|
||||
#define CONFIG_SYS_U_BOOT_MAX_SIZE_SECTORS 0x400
|
||||
#define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR 0x200
|
||||
#define CONFIG_SYS_MMCSD_FS_BOOT_PARTITION 1
|
||||
#define CONFIG_SPL_FS_LOAD_PAYLOAD_NAME "u-boot.img"
|
||||
#define CONFIG_SPL_FAT_SUPPORT
|
||||
#define CONFIG_SPL_LIBDISK_SUPPORT
|
||||
|
||||
#elif CONFIG_SYS_USE_NANDFLASH
|
||||
#define CONFIG_SPL_NAND_SUPPORT
|
||||
#define CONFIG_SPL_NAND_DRIVERS
|
||||
#define CONFIG_SPL_NAND_BASE
|
||||
#define CONFIG_SYS_NAND_U_BOOT_OFFS 0x40000
|
||||
#define CONFIG_SYS_NAND_5_ADDR_CYCLE
|
||||
#define CONFIG_SYS_NAND_PAGE_SIZE 0x800
|
||||
#define CONFIG_SYS_NAND_PAGE_COUNT 64
|
||||
#define CONFIG_SYS_NAND_OOBSIZE 64
|
||||
#define CONFIG_SYS_NAND_BLOCK_SIZE 0x20000
|
||||
#define CONFIG_SYS_NAND_BAD_BLOCK_POS 0x0
|
||||
#define CONFIG_SPL_GENERATE_ATMEL_PMECC_HEADER
|
||||
|
||||
#elif CONFIG_SYS_USE_SPIFLASH
|
||||
#define CONFIG_SPL_SPI_SUPPORT
|
||||
#define CONFIG_SPL_SPI_FLASH_SUPPORT
|
||||
#define CONFIG_SPL_SPI_LOAD
|
||||
#define CONFIG_SYS_SPI_U_BOOT_OFFS 0x8400
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue