diff options
Diffstat (limited to 'board/atmel')
| -rw-r--r-- | board/atmel/at91sam9260ek/at91sam9260ek.c | 19 | ||||
| -rw-r--r-- | board/atmel/at91sam9263ek/at91sam9263ek.c | 19 | ||||
| -rw-r--r-- | board/atmel/at91sam9m10g45ek/at91sam9m10g45ek.c | 19 | ||||
| -rw-r--r-- | board/atmel/at91sam9x5ek/at91sam9x5ek.c | 1 | ||||
| -rw-r--r-- | board/atmel/sama5d3xek/sama5d3xek.c | 96 | 
5 files changed, 98 insertions, 56 deletions
| diff --git a/board/atmel/at91sam9260ek/at91sam9260ek.c b/board/atmel/at91sam9260ek/at91sam9260ek.c index 263de49c7..7f14af101 100644 --- a/board/atmel/at91sam9260ek/at91sam9260ek.c +++ b/board/atmel/at91sam9260ek/at91sam9260ek.c @@ -12,7 +12,6 @@  #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 <atmel_mci.h> @@ -73,8 +72,6 @@ static void at91sam9260ek_macb_hw_init(void)  {  	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;  	struct at91_port *pioa = (struct at91_port *)ATMEL_BASE_PIOA; -	struct at91_rstc *rstc = (struct at91_rstc *)ATMEL_BASE_RSTC; -	unsigned long erstl;  	/* Enable EMAC clock */  	writel(1 << ATMEL_ID_EMAC0, &pmc->pcer); @@ -98,21 +95,7 @@ static void at91sam9260ek_macb_hw_init(void)  		pin_to_mask(AT91_PIN_PA28),  		&pioa->pudr); -	erstl = readl(&rstc->mr) & AT91_RSTC_MR_ERSTL_MASK; - -	/* Need to reset PHY -> 500ms reset */ -	writel(AT91_RSTC_KEY | AT91_RSTC_MR_ERSTL(13) | -		AT91_RSTC_MR_URSTEN, &rstc->mr); - -	writel(AT91_RSTC_KEY | AT91_RSTC_CR_EXTRST, &rstc->cr); - -	/* Wait for end hardware reset */ -	while (!(readl(&rstc->sr) & AT91_RSTC_SR_NRSTL)) -		; - -	/* Restore NRST value */ -	writel(AT91_RSTC_KEY | erstl | AT91_RSTC_MR_URSTEN, -		&rstc->mr); +	at91_phy_reset();  	/* Re-enable pull-up */  	writel(pin_to_mask(AT91_PIN_PA14) | diff --git a/board/atmel/at91sam9263ek/at91sam9263ek.c b/board/atmel/at91sam9263ek/at91sam9263ek.c index 2e9246f31..d42a1730c 100644 --- a/board/atmel/at91sam9263ek/at91sam9263ek.c +++ b/board/atmel/at91sam9263ek/at91sam9263ek.c @@ -12,7 +12,6 @@  #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/at91_matrix.h>  #include <asm/arch/at91_pio.h>  #include <asm/arch/clk.h> @@ -82,10 +81,9 @@ static void at91sam9263ek_nand_hw_init(void)  #ifdef CONFIG_MACB  static void at91sam9263ek_macb_hw_init(void)  { -	unsigned long 	erstl;  	at91_pmc_t	*pmc	= (at91_pmc_t *) ATMEL_BASE_PMC;  	at91_pio_t	*pio	= (at91_pio_t *) ATMEL_BASE_PIO; -	at91_rstc_t	*rstc	= (at91_rstc_t *) ATMEL_BASE_RSTC; +  	/* Enable clock */  	writel(1 << ATMEL_ID_EMAC, &pmc->pcer); @@ -97,23 +95,10 @@ static void at91sam9263ek_macb_hw_init(void)  	 *  	 * PHY has internal pull-down  	 */ -  	writel(1 << 25, &pio->pioc.pudr);  	writel((1 << 25) | (1 <<26), &pio->pioe.pudr); -	erstl = readl(&rstc->mr) & AT91_RSTC_MR_ERSTL_MASK; - -	/* Need to reset PHY -> 500ms reset */ -	writel(AT91_RSTC_KEY | AT91_RSTC_MR_ERSTL(0x0D) | -		AT91_RSTC_MR_URSTEN, &rstc->mr); - -	writel(AT91_RSTC_KEY | AT91_RSTC_CR_EXTRST, &rstc->cr); -	/* Wait for end hardware reset */ -	while (!(readl(&rstc->sr) & AT91_RSTC_SR_NRSTL)) -		; - -	/* Restore NRST value */ -	writel(AT91_RSTC_KEY | erstl | AT91_RSTC_MR_URSTEN, &rstc->mr); +	at91_phy_reset();  	/* Re-enable pull-up */  	writel(1 << 25, &pio->pioc.puer); diff --git a/board/atmel/at91sam9m10g45ek/at91sam9m10g45ek.c b/board/atmel/at91sam9m10g45ek/at91sam9m10g45ek.c index 6a071f6b7..b7e2efd2f 100644 --- a/board/atmel/at91sam9m10g45ek/at91sam9m10g45ek.c +++ b/board/atmel/at91sam9m10g45ek/at91sam9m10g45ek.c @@ -12,7 +12,6 @@  #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/clk.h>  #include <lcd.h> @@ -88,8 +87,6 @@ static void at91sam9m10g45ek_macb_hw_init(void)  {  	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;  	struct at91_port *pioa = (struct at91_port *)ATMEL_BASE_PIOA; -	struct at91_rstc *rstc = (struct at91_rstc *)ATMEL_BASE_RSTC; -	unsigned long erstl;  	/* Enable clock */  	writel(1 << ATMEL_ID_EMAC, &pmc->pcer); @@ -107,21 +104,7 @@ static void at91sam9m10g45ek_macb_hw_init(void)  	       pin_to_mask(AT91_PIN_PA13),  	       &pioa->pudr); -	erstl = readl(&rstc->mr) & AT91_RSTC_MR_ERSTL_MASK; - -	/* Need to reset PHY -> 500ms reset */ -	writel(AT91_RSTC_KEY | AT91_RSTC_MR_ERSTL(13) | -		AT91_RSTC_MR_URSTEN, &rstc->mr); - -	writel(AT91_RSTC_KEY | AT91_RSTC_CR_EXTRST, &rstc->cr); - -	/* Wait for end hardware reset */ -	while (!(readl(&rstc->sr) & AT91_RSTC_SR_NRSTL)) -		; - -	/* Restore NRST value */ -	writel(AT91_RSTC_KEY | erstl | AT91_RSTC_MR_URSTEN, -		&rstc->mr); +	at91_phy_reset();  	/* Re-enable pull-up */  	writel(pin_to_mask(AT91_PIN_PA15) | diff --git a/board/atmel/at91sam9x5ek/at91sam9x5ek.c b/board/atmel/at91sam9x5ek/at91sam9x5ek.c index 6f67c34a5..17a2a40b4 100644 --- a/board/atmel/at91sam9x5ek/at91sam9x5ek.c +++ b/board/atmel/at91sam9x5ek/at91sam9x5ek.c @@ -271,7 +271,6 @@ int board_init(void)  #endif  #ifdef CONFIG_ATMEL_SPI -	at91_spi0_hw_init(1 << 0);  	at91_spi0_hw_init(1 << 4);  #endif diff --git a/board/atmel/sama5d3xek/sama5d3xek.c b/board/atmel/sama5d3xek/sama5d3xek.c index b0965ef21..eff94a48b 100644 --- a/board/atmel/sama5d3xek/sama5d3xek.c +++ b/board/atmel/sama5d3xek/sama5d3xek.c @@ -20,6 +20,9 @@  #include <micrel.h>  #include <net.h>  #include <netdev.h> +#include <spl.h> +#include <asm/arch/atmel_mpddrc.h> +#include <asm/arch/at91_wdt.h>  #ifdef CONFIG_USB_GADGET_ATMEL_USBA  #include <asm/arch/atmel_usba_udc.h> @@ -131,7 +134,8 @@ static void sama5d3xek_lcd_hw_init(void)  void lcd_show_board_info(void)  { -	ulong dram_size, nand_size; +	ulong dram_size; +	uint64_t nand_size;  	int i;  	char temp[32]; @@ -150,7 +154,7 @@ void lcd_show_board_info(void)  	for (i = 0; i < CONFIG_SYS_MAX_NAND_DEVICE; i++)  		nand_size += nand_info[i].size;  #endif -	lcd_printf("%ld MB SDRAM, %ld MB NAND\n", +	lcd_printf("%ld MB SDRAM, %lld MB NAND\n",  		   dram_size >> 20, nand_size >> 20);  }  #endif /* CONFIG_LCD_INFO */ @@ -158,6 +162,12 @@ void lcd_show_board_info(void)  int board_early_init_f(void)  { +	at91_periph_clk_enable(ATMEL_ID_PIOA); +	at91_periph_clk_enable(ATMEL_ID_PIOB); +	at91_periph_clk_enable(ATMEL_ID_PIOC); +	at91_periph_clk_enable(ATMEL_ID_PIOD); +	at91_periph_clk_enable(ATMEL_ID_PIOE); +  	at91_seriald_hw_init();  	return 0; @@ -290,3 +300,85 @@ void spi_cs_deactivate(struct spi_slave *slave)  	}  }  #endif /* CONFIG_ATMEL_SPI */ + +/* SPL */ +#ifdef CONFIG_SPL_BUILD +void spl_board_init(void) +{ +#ifdef CONFIG_SYS_USE_MMC +	sama5d3xek_mci_hw_init(); +#endif +} + +static void ddr2_conf(struct atmel_mpddr *ddr2) +{ +	ddr2->md = (ATMEL_MPDDRC_MD_DBW_32_BITS | ATMEL_MPDDRC_MD_DDR2_SDRAM); + +	ddr2->cr = (ATMEL_MPDDRC_CR_NC_COL_10 | +		    ATMEL_MPDDRC_CR_NR_ROW_14 | +		    ATMEL_MPDDRC_CR_CAS_DDR_CAS3 | +		    ATMEL_MPDDRC_CR_ENRDM_ON | +		    ATMEL_MPDDRC_CR_NB_8BANKS | +		    ATMEL_MPDDRC_CR_NDQS_DISABLED | +		    ATMEL_MPDDRC_CR_DECOD_INTERLEAVED | +		    ATMEL_MPDDRC_CR_UNAL_SUPPORTED); +	/* +	 * As the DDR2-SDRAm device requires a refresh time is 7.8125us +	 * when DDR run at 133MHz, so it needs (7.8125us * 133MHz / 10^9) clocks +	 */ +	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 | +		      28 << ATMEL_MPDDRC_TPR1_TXSNR_OFFSET | +		      26 << ATMEL_MPDDRC_TPR1_TRFC_OFFSET); + +	ddr2->tpr2 = (7 << ATMEL_MPDDRC_TPR2_TFAW_OFFSET | +		      2 << ATMEL_MPDDRC_TPR2_TRTP_OFFSET | +		      2 << ATMEL_MPDDRC_TPR2_TRPA_OFFSET | +		      7 << ATMEL_MPDDRC_TPR2_TXARDS_OFFSET | +		      8 << ATMEL_MPDDRC_TPR2_TXARD_OFFSET); +} + +void mem_init(void) +{ +	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC; +	struct atmel_mpddr ddr2; + +	ddr2_conf(&ddr2); + +	/* enable MPDDR clock */ +	at91_periph_clk_enable(ATMEL_ID_MPDDRC); +	writel(0x4, &pmc->scer); + +	/* DDRAM2 Controller initialize */ +	ddr2_init(ATMEL_BASE_DDRCS, &ddr2); +} + +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(43) | +	      AT91_PMC_PLLXR_DIV(1); +	at91_plla_init(tmp); + +	writel(0x3 << 8, &pmc->pllicpr); + +	tmp = AT91_PMC_MCKR_MDIV_4 | +	      AT91_PMC_MCKR_CSS_PLLA; +	at91_mck_init(tmp); +} +#endif |