@ -17,6 +17,7 @@
# include <asm/arch/at91_common.h>
# include <asm/arch/at91_pmc.h>
# include <asm/arch/atmel_pio4.h>
# include <asm/arch/atmel_mpddrc.h>
# include <asm/arch/atmel_usba_udc.h>
# include <asm/arch/atmel_sdhci.h>
# include <asm/arch/clk.h>
@ -281,3 +282,105 @@ int board_eth_init(bd_t *bis)
return rc ;
}
/* SPL */
# ifdef CONFIG_SPL_BUILD
void spl_board_init ( void )
{
# ifdef CONFIG_SYS_USE_SERIALFLASH
board_spi0_hw_init ( ) ;
# endif
# ifdef CONFIG_ATMEL_SDHCI
# ifdef CONFIG_ATMEL_SDHCI0
board_sdhci0_hw_init ( ) ;
# endif
# ifdef CONFIG_ATMEL_SDHCI1
board_sdhci1_hw_init ( ) ;
# endif
# endif
}
static void ddrc_conf ( struct atmel_mpddrc_config * ddrc )
{
ddrc - > md = ( ATMEL_MPDDRC_MD_DBW_32_BITS | ATMEL_MPDDRC_MD_DDR3_SDRAM ) ;
ddrc - > cr = ( ATMEL_MPDDRC_CR_NC_COL_10 |
ATMEL_MPDDRC_CR_NR_ROW_14 |
ATMEL_MPDDRC_CR_CAS_DDR_CAS5 |
ATMEL_MPDDRC_CR_DIC_DS |
ATMEL_MPDDRC_CR_DIS_DLL |
ATMEL_MPDDRC_CR_NB_8BANKS |
ATMEL_MPDDRC_CR_DECOD_INTERLEAVED |
ATMEL_MPDDRC_CR_UNAL_SUPPORTED ) ;
ddrc - > rtr = 0x511 ;
ddrc - > tpr0 = ( 6 < < ATMEL_MPDDRC_TPR0_TRAS_OFFSET |
3 < < ATMEL_MPDDRC_TPR0_TRCD_OFFSET |
4 < < ATMEL_MPDDRC_TPR0_TWR_OFFSET |
9 < < ATMEL_MPDDRC_TPR0_TRC_OFFSET |
3 < < ATMEL_MPDDRC_TPR0_TRP_OFFSET |
4 < < ATMEL_MPDDRC_TPR0_TRRD_OFFSET |
4 < < ATMEL_MPDDRC_TPR0_TWTR_OFFSET |
4 < < ATMEL_MPDDRC_TPR0_TMRD_OFFSET ) ;
ddrc - > tpr1 = ( 27 < < ATMEL_MPDDRC_TPR1_TRFC_OFFSET |
29 < < ATMEL_MPDDRC_TPR1_TXSNR_OFFSET |
0 < < ATMEL_MPDDRC_TPR1_TXSRD_OFFSET |
3 < < ATMEL_MPDDRC_TPR1_TXP_OFFSET ) ;
ddrc - > tpr2 = ( 0 < < ATMEL_MPDDRC_TPR2_TXARD_OFFSET |
0 < < ATMEL_MPDDRC_TPR2_TXARDS_OFFSET |
0 < < ATMEL_MPDDRC_TPR2_TRPA_OFFSET |
4 < < ATMEL_MPDDRC_TPR2_TRTP_OFFSET |
7 < < ATMEL_MPDDRC_TPR2_TFAW_OFFSET ) ;
}
void mem_init ( void )
{
struct at91_pmc * pmc = ( struct at91_pmc * ) ATMEL_BASE_PMC ;
struct atmel_mpddr * mpddrc = ( struct atmel_mpddr * ) ATMEL_BASE_MPDDRC ;
struct atmel_mpddrc_config ddrc_config ;
u32 reg ;
ddrc_conf ( & ddrc_config ) ;
at91_periph_clk_enable ( ATMEL_ID_MPDDRC ) ;
writel ( AT91_PMC_DDR , & pmc - > scer ) ;
reg = readl ( & mpddrc - > io_calibr ) ;
reg & = ~ ATMEL_MPDDRC_IO_CALIBR_RDIV ;
reg | = ATMEL_MPDDRC_IO_CALIBR_DDR3_RZQ_55 ;
reg & = ~ ATMEL_MPDDRC_IO_CALIBR_TZQIO ;
reg | = ATMEL_MPDDRC_IO_CALIBR_TZQIO_ ( 100 ) ;
writel ( reg , & mpddrc - > io_calibr ) ;
writel ( ATMEL_MPDDRC_RD_DATA_PATH_SHIFT_TWO_CYCLE ,
& mpddrc - > rd_data_path ) ;
ddr3_init ( ATMEL_BASE_MPDDRC , ATMEL_BASE_DDRCS , & ddrc_config ) ;
writel ( 0x3 , & mpddrc - > cal_mr4 ) ;
writel ( 64 , & mpddrc - > tim_cal ) ;
}
void at91_pmc_init ( void )
{
struct at91_pmc * pmc = ( struct at91_pmc * ) ATMEL_BASE_PMC ;
u32 tmp ;
tmp = AT91_PMC_PLLAR_29 |
AT91_PMC_PLLXR_PLLCOUNT ( 0x3f ) |
AT91_PMC_PLLXR_MUL ( 82 ) |
AT91_PMC_PLLXR_DIV ( 1 ) ;
at91_plla_init ( tmp ) ;
writel ( 0x0 < < 8 , & pmc - > pllicpr ) ;
tmp = AT91_PMC_MCKR_H32MXDIV |
AT91_PMC_MCKR_PLLADIV_2 |
AT91_PMC_MCKR_MDIV_3 |
AT91_PMC_MCKR_CSS_PLLA ;
at91_mck_init ( tmp ) ;
}
# endif