From: "Andreas Bießmann" <andreas.devel@googlemail.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v2] board: atmel: sama5d2_xplained: add SPL support
Date: Tue, 2 Feb 2016 09:20:36 +0100 [thread overview]
Message-ID: <56B066D4.9000200@gmail.com> (raw)
In-Reply-To: <1454321901-29722-1-git-send-email-wenyou.yang@atmel.com>
On 01.02.2016 11:18, Wenyou Yang wrote:
> The sama5d2 Xplained SPL supports the boot medias: spi flash
> and SD Card.
>
> Signed-off-by: Wenyou Yang <wenyou.yang@atmel.com>
Reviewed-by: Andreas Bie?mann <andreas.devel@googlemail.com>
> ---
> This patch is base on [U-Boot] [PATCH v3 0/3] arm: at91/spl: add DDR3-SDRAM initialization support
> http://lists.denx.de/pipermail/u-boot/2016-February/244228.html
>
> Changes in v2:
> - adapt to ddr3_init() declaration variation.
>
> arch/arm/mach-at91/Kconfig | 1 +
> arch/arm/mach-at91/Makefile | 1 +
> arch/arm/mach-at91/include/mach/sama5d2.h | 32 +++++++
> board/atmel/sama5d2_xplained/sama5d2_xplained.c | 103 +++++++++++++++++++++++
> configs/sama5d2_xplained_mmc_defconfig | 1 +
> configs/sama5d2_xplained_spiflash_defconfig | 1 +
> include/configs/sama5d2_xplained.h | 39 +++++++++
> 7 files changed, 178 insertions(+)
>
> diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig
> index c333647..9426302b 100644
> --- a/arch/arm/mach-at91/Kconfig
> +++ b/arch/arm/mach-at91/Kconfig
> @@ -74,6 +74,7 @@ config TARGET_AT91SAM9X5EK
> config TARGET_SAMA5D2_XPLAINED
> bool "SAMA5D2 Xplained board"
> select CPU_V7
> + select SUPPORT_SPL
>
> config TARGET_SAMA5D3_XPLAINED
> bool "SAMA5D3 Xplained board"
> diff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile
> index 5b89617..abd1d13 100644
> --- a/arch/arm/mach-at91/Makefile
> +++ b/arch/arm/mach-at91/Makefile
> @@ -9,6 +9,7 @@ obj-$(CONFIG_AT91SAM9G20) += sdram.o spl_at91.o
> obj-$(CONFIG_AT91SAM9M10G45) += mpddrc.o spl_at91.o
> obj-$(CONFIG_AT91SAM9N12) += mpddrc.o spl_at91.o
> obj-$(CONFIG_AT91SAM9X5) += mpddrc.o spl_at91.o
> +obj-$(CONFIG_SAMA5D2) += mpddrc.o spl_atmel.o matrix.o atmel_sfr.o
> obj-$(CONFIG_SAMA5D3) += mpddrc.o spl_atmel.o
> obj-$(CONFIG_SAMA5D4) += mpddrc.o spl_atmel.o matrix.o atmel_sfr.o
> obj-y += spl.o
> diff --git a/arch/arm/mach-at91/include/mach/sama5d2.h b/arch/arm/mach-at91/include/mach/sama5d2.h
> index c85571c..dd5a2a7 100644
> --- a/arch/arm/mach-at91/include/mach/sama5d2.h
> +++ b/arch/arm/mach-at91/include/mach/sama5d2.h
> @@ -106,6 +106,7 @@
> #define ATMEL_BASE_MPDDRC 0xf000c000
> #define ATMEL_BASE_XDMAC0 0xf0010000
> #define ATMEL_BASE_PMC 0xf0014000
> +#define ATMEL_BASE_MATRIX0 0xf0018000
> #define ATMEL_BASE_QSPI0 0xf0020000
> #define ATMEL_BASE_QSPI1 0xf0024000
> #define ATMEL_BASE_SPI0 0xf8000000
> @@ -117,6 +118,7 @@
> #define ATMEL_BASE_UART1 0xf8020000
> #define ATMEL_BASE_UART2 0xf8024000
> #define ATMEL_BASE_TWI0 0xf8028000
> +#define ATMEL_BASE_SFR 0xf8030000
> #define ATMEL_BASE_SYSC 0xf8048000
> #define ATMEL_BASE_SPI1 0xfc000000
> #define ATMEL_BASE_UART3 0xfc008000
> @@ -125,6 +127,7 @@
> #define ATMEL_BASE_UDPHS 0xfc02c000
>
> #define ATMEL_BASE_PIOA 0xfc038000
> +#define ATMEL_BASE_MATRIX1 0xfc03c000
>
> #define ATMEL_CHIPID_CIDR 0xfc069000
> #define ATMEL_CHIPID_EXID 0xfc069004
> @@ -171,6 +174,35 @@
> #define CPU_HAS_PCR
> #define CPU_HAS_H32MXDIV
>
> +/* AICREDIR Unlock Key */
> +#define ATMEL_SFR_AICREDIR_KEY 0xB6D81C4D
> +
> +/* MATRIX0(H64MX) slave id definitions */
> +#define H64MX_SLAVE_AXIMX_BRIDGE 0 /* Bridge from H64MX to AXIMX */
> +#define H64MX_SLAVE_PERIPH_BRIDGE 1 /* H64MX Peripheral Bridge */
> +#define H64MX_SLAVE_DDRC_PORT0 2 /* DDR2 Port0-AESOTF */
> +#define H64MX_SLAVE_DDRC_PORT1 3 /* DDR2 Port1 */
> +#define H64MX_SLAVE_DDRC_PORT2 4 /* DDR2 Port2 */
> +#define H64MX_SLAVE_DDRC_PORT3 5 /* DDR2 Port3 */
> +#define H64MX_SLAVE_DDRC_PORT4 6 /* DDR2 Port4 */
> +#define H64MX_SLAVE_DDRC_PORT5 7 /* DDR2 Port5 */
> +#define H64MX_SLAVE_DDRC_PORT6 8 /* DDR2 Port6 */
> +#define H64MX_SLAVE_DDRC_PORT7 9 /* DDR2 Port7 */
> +#define H64MX_SLAVE_SRAM 10 /* Internal SRAM 128K */
> +#define H64MX_SLAVE_CACHE_L2 11 /* Internal SRAM 128K(L2) */
> +#define H64MX_SLAVE_QSPI0 12 /* QSPI0 */
> +#define H64MX_SLAVE_QSPI1 13 /* QSPI1 */
> +#define H64MX_SLAVE_AESB 14 /* AESB */
> +
> +/* MATRIX1(H32MX) slave id definitions */
> +#define H32MX_SLAVE_H64MX_BRIDGE 0 /* Bridge from H32MX to H64MX */
> +#define H32MX_SLAVE_PERIPH_BRIDGE0 1 /* H32MX Peripheral Bridge 0 */
> +#define H32MX_SLAVE_PERIPH_BRIDGE1 2 /* H32MX Peripheral Bridge 1 */
> +#define H32MX_SLAVE_EBI 3 /* External Bus Interface */
> +#define H32MX_SLAVE_NFC_CMD 3 /* NFC command Register */
> +#define H32MX_SLAVE_NFC_SRAM 4 /* NFC SRAM */
> +#define H32MX_SLAVE_USB 5 /* USB Device & Host */
> +
> /* SAMA5D2 series chip id definitions */
> #define ARCH_ID_SAMA5D2 0x8a5c08c0
> #define ARCH_EXID_SAMA5D21CU 0x0000005a
> diff --git a/board/atmel/sama5d2_xplained/sama5d2_xplained.c b/board/atmel/sama5d2_xplained/sama5d2_xplained.c
> index 0b3397f..8ed01dd 100644
> --- a/board/atmel/sama5d2_xplained/sama5d2_xplained.c
> +++ b/board/atmel/sama5d2_xplained/sama5d2_xplained.c
> @@ -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
> diff --git a/configs/sama5d2_xplained_mmc_defconfig b/configs/sama5d2_xplained_mmc_defconfig
> index c1dcbef..75b1713 100644
> --- a/configs/sama5d2_xplained_mmc_defconfig
> +++ b/configs/sama5d2_xplained_mmc_defconfig
> @@ -1,6 +1,7 @@
> CONFIG_ARM=y
> CONFIG_ARCH_AT91=y
> CONFIG_TARGET_SAMA5D2_XPLAINED=y
> +CONFIG_SPL=y
> CONFIG_SYS_EXTRA_OPTIONS="SAMA5D2,SYS_USE_MMC"
> # CONFIG_CMD_IMI is not set
> # CONFIG_CMD_IMLS is not set
> diff --git a/configs/sama5d2_xplained_spiflash_defconfig b/configs/sama5d2_xplained_spiflash_defconfig
> index 0271e8e..6d61a7e 100644
> --- a/configs/sama5d2_xplained_spiflash_defconfig
> +++ b/configs/sama5d2_xplained_spiflash_defconfig
> @@ -1,6 +1,7 @@
> CONFIG_ARM=y
> CONFIG_ARCH_AT91=y
> CONFIG_TARGET_SAMA5D2_XPLAINED=y
> +CONFIG_SPL=y
> CONFIG_SYS_EXTRA_OPTIONS="SAMA5D2,SYS_USE_SERIALFLASH"
> # CONFIG_CMD_IMI is not set
> # CONFIG_CMD_IMLS is not set
> diff --git a/include/configs/sama5d2_xplained.h b/include/configs/sama5d2_xplained.h
> index ae5ba3d..272257e 100644
> --- a/include/configs/sama5d2_xplained.h
> +++ b/include/configs/sama5d2_xplained.h
> @@ -25,8 +25,12 @@
> #define CONFIG_SYS_SDRAM_BASE ATMEL_BASE_DDRCS
> #define CONFIG_SYS_SDRAM_SIZE 0x20000000
>
> +#ifdef CONFIG_SPL_BUILD
> +#define CONFIG_SYS_INIT_SP_ADDR 0x210000
> +#else
> #define CONFIG_SYS_INIT_SP_ADDR \
> (CONFIG_SYS_SDRAM_BASE + 4 * 1024 - GENERATED_GBL_DATA_SIZE)
> +#endif
>
> #define CONFIG_SYS_LOAD_ADDR 0x22000000 /* load address */
>
> @@ -119,4 +123,39 @@
>
> #endif
>
> +/* SPL */
> +#define CONFIG_SPL_FRAMEWORK
> +#define CONFIG_SPL_TEXT_BASE 0x200000
> +#define CONFIG_SPL_MAX_SIZE 0x10000
> +#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)
> +
> +#ifdef CONFIG_SYS_USE_MMC
> +#define CONFIG_SPL_LDSCRIPT arch/arm/mach-at91/armv7/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_SERIALFLASH
> +#define CONFIG_SPL_SPI_SUPPORT
> +#define CONFIG_SPL_SPI_FLASH_SUPPORT
> +#define CONFIG_SPL_SPI_LOAD
> +#define CONFIG_SYS_SPI_U_BOOT_OFFS 0x8000
> +
> +#endif
> +
> #endif
>
next prev parent reply other threads:[~2016-02-02 8:20 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-01 10:18 [U-Boot] [PATCH v2] board: atmel: sama5d2_xplained: add SPL support Wenyou Yang
2016-02-02 8:20 ` Andreas Bießmann [this message]
2016-02-02 10:50 ` [U-Boot] [U-Boot, " Andreas Bießmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=56B066D4.9000200@gmail.com \
--to=andreas.devel@googlemail.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.