[U-Boot] [PATCH 13/13] ARM: atmel: sama5d4_xplained: enable spl support

Robert Nelson robertcnelson at gmail.com
Wed Dec 10 22:35:59 CET 2014


On Mon, Dec 8, 2014 at 12:09 AM, Bo Shen <voice.shen at atmel.com> wrote:
> Signed-off-by: Bo Shen <voice.shen at atmel.com>
> ---
>
>  arch/arm/Kconfig                                |  1 +
>  board/atmel/sama5d4_xplained/sama5d4_xplained.c | 85 +++++++++++++++++++++++++
>  configs/sama5d4_xplained_mmc_defconfig          |  1 +
>  configs/sama5d4_xplained_nandflash_defconfig    |  1 +
>  configs/sama5d4_xplained_spiflash_defconfig     |  1 +
>  include/configs/sama5d4_xplained.h              | 56 ++++++++++++++++
>  6 files changed, 145 insertions(+)
>
> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
> index 091d615..9c43255 100644
> --- a/arch/arm/Kconfig
> +++ b/arch/arm/Kconfig
> @@ -514,6 +514,7 @@ config TARGET_SAMA5D3XEK
>  config TARGET_SAMA5D4_XPLAINED
>         bool "Support sama5d4_xplained"
>         select CPU_V7
> +       select SUPPORT_SPL
>
>  config TARGET_SAMA5D4EK
>         bool "Support sama5d4ek"
> diff --git a/board/atmel/sama5d4_xplained/sama5d4_xplained.c b/board/atmel/sama5d4_xplained/sama5d4_xplained.c
> index 93bebd4..d64d320 100644
> --- a/board/atmel/sama5d4_xplained/sama5d4_xplained.c
> +++ b/board/atmel/sama5d4_xplained/sama5d4_xplained.c
> @@ -10,6 +10,7 @@
>  #include <asm/arch/at91_common.h>
>  #include <asm/arch/at91_pmc.h>
>  #include <asm/arch/at91_rstc.h>
> +#include <asm/arch/atmel_mpddrc.h>
>  #include <asm/arch/atmel_usba_udc.h>
>  #include <asm/arch/gpio.h>
>  #include <asm/arch/clk.h>
> @@ -328,3 +329,87 @@ int board_eth_init(bd_t *bis)
>
>         return rc;
>  }
> +
> +/* SPL */
> +#ifdef CONFIG_SPL_BUILD
> +void spl_board_init(void)
> +{
> +#ifdef CONFIG_SYS_USE_MMC
> +       sama5d4_xplained_mci1_hw_init();
> +#elif CONFIG_SYS_USE_NANDFLASH
> +       sama5d4_xplained_nand_hw_init();
> +#elif CONFIG_SYS_USE_SERIALFLASH
> +       sama5d4_xplained_spi0_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_NB_8BANKS |
> +                   ATMEL_MPDDRC_CR_NDQS_DISABLED |
> +                   ATMEL_MPDDRC_CR_DECOD_INTERLEAVED |
> +                   ATMEL_MPDDRC_CR_UNAL_SUPPORTED);
> +
> +       ddr2->rtr = 0x2b0;
> +
> +       ddr2->tpr0 = (8 << ATMEL_MPDDRC_TPR0_TRAS_OFFSET |
> +                     3 << ATMEL_MPDDRC_TPR0_TRCD_OFFSET |
> +                     3 << ATMEL_MPDDRC_TPR0_TWR_OFFSET |
> +                     10 << ATMEL_MPDDRC_TPR0_TRC_OFFSET |
> +                     3 << 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 |
> +                     25 << ATMEL_MPDDRC_TPR1_TXSNR_OFFSET |
> +                     23 << 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 |
> +                     2 << 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(87) |
> +             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/sama5d4_xplained_mmc_defconfig b/configs/sama5d4_xplained_mmc_defconfig
> index 3720f3c..73df28c 100644
> --- a/configs/sama5d4_xplained_mmc_defconfig
> +++ b/configs/sama5d4_xplained_mmc_defconfig
> @@ -1,3 +1,4 @@
> +CONFIG_SPL=y
>  CONFIG_SYS_EXTRA_OPTIONS="SAMA5D4,SYS_USE_MMC"
>  +S:CONFIG_ARM=y
>  +S:CONFIG_TARGET_SAMA5D4_XPLAINED=y
> diff --git a/configs/sama5d4_xplained_nandflash_defconfig b/configs/sama5d4_xplained_nandflash_defconfig
> index 5e13da7..046fe06 100644
> --- a/configs/sama5d4_xplained_nandflash_defconfig
> +++ b/configs/sama5d4_xplained_nandflash_defconfig
> @@ -1,3 +1,4 @@
> +CONFIG_SPL=y
>  CONFIG_SYS_EXTRA_OPTIONS="SAMA5D4,SYS_USE_NANDFLASH"
>  +S:CONFIG_ARM=y
>  +S:CONFIG_TARGET_SAMA5D4_XPLAINED=y
> diff --git a/configs/sama5d4_xplained_spiflash_defconfig b/configs/sama5d4_xplained_spiflash_defconfig
> index 3a4607c..755dd8b 100644
> --- a/configs/sama5d4_xplained_spiflash_defconfig
> +++ b/configs/sama5d4_xplained_spiflash_defconfig
> @@ -1,3 +1,4 @@
> +CONFIG_SPL=y
>  CONFIG_SYS_EXTRA_OPTIONS="SAMA5D4,SYS_USE_SERIALFLASH"
>  +S:CONFIG_ARM=y
>  +S:CONFIG_TARGET_SAMA5D4_XPLAINED=y
> diff --git a/include/configs/sama5d4_xplained.h b/include/configs/sama5d4_xplained.h
> index 996973d..6d70bc9 100644
> --- a/include/configs/sama5d4_xplained.h
> +++ b/include/configs/sama5d4_xplained.h
> @@ -20,7 +20,9 @@
>
>  #define CONFIG_ARCH_CPU_INIT
>
> +#ifndef CONFIG_SPL_BUILD
>  #define CONFIG_SKIP_LOWLEVEL_INIT
> +#endif
>  #define CONFIG_BOARD_EARLY_INIT_F
>  #define CONFIG_DISPLAY_CPUINFO
>
> @@ -66,8 +68,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 */
>
> @@ -221,4 +227,54 @@
>  /* Size of malloc() pool */
>  #define CONFIG_SYS_MALLOC_LEN          (4 * 1024 * 1024)
>
> +
> +/* 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/cpu/at91-common/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_MMC_SD_FS_BOOT_PARTITION    1

Hi Bo,

You have an extra "_" there: (MMC_SD) -> (MMCSD), it should be:

#define  CONFIG_SYS_MMCSD_FS_BOOT_PARTITION 1

build error:

common/spl/spl_mmc.c: In function ‘spl_mmc_load_image’:
common/spl/spl_mmc.c:135:6: error:
‘CONFIG_SYS_MMCSD_FS_BOOT_PARTITION’ undeclared (first use in this
function)
      CONFIG_SYS_MMCSD_FS_BOOT_PARTITION,
      ^
common/spl/spl_mmc.c:135:6: note: each undeclared identifier is
reported only once for each function it appears in
scripts/Makefile.build:275: recipe for target 'spl/common/spl/spl_mmc.o' failed
make[2]: *** [spl/common/spl/spl_mmc.o] Error 1
scripts/Makefile.spl:212: recipe for target 'spl/common/spl' failed
make[1]: *** [spl/common/spl] Error 2
make[1]: *** Waiting for unfinished jobs....


Regards,

-- 
Robert Nelson
http://www.rcn-ee.com/


More information about the U-Boot mailing list