Patchwork [U-Boot] spl: exynos: make spl_boot common for all exynos based platforms

login
register
mail settings
Submitter Inderpal Singh
Date March 16, 2013, 8:46 a.m.
Message ID <1363423594-15077-1-git-send-email-inderpal.singh@linaro.org>
Download mbox | patch
Permalink /patch/228200/
State Changes Requested
Delegated to: Minkyu Kang
Headers show

Comments

Inderpal Singh - March 16, 2013, 8:46 a.m.
The spl_boot.c which copies the u-boot from the booting device to ram
is made common for all the exynos based platforms. To do so:

1. Moved smdk5250/spl_boot.c to common armv7/exynos folder and updated
   to make it common for exynos4 and exynos5
2. Introduced a CONFIG_SPL_BOOTING option as only exynos5250 supports
   booting from SPI device
3. Renamed some config options to make them common between exynos5250,
   origen and smdkv310.

SD/MMC booting: tested on exynos4210 based origen, exynos5250 based Arndale
and SMDK5250 boards.
SPI booting: tested on SMDK5250 board

Signed-off-by: Inderpal Singh <inderpal.singh@linaro.org>
---
It depends on the patchset at [1] as it provides the infrastructure to
detect the SOC type and revision in spl at runtime.

[1] http://www.mail-archive.com/u-boot@lists.denx.de/msg108301.html

 arch/arm/cpu/armv7/exynos/Makefile                 |    4 ++
 .../arm/cpu/armv7/exynos}/spl_boot.c               |   33 +++++++----
 board/samsung/origen/Makefile                      |    4 --
 board/samsung/origen/mmc_boot.c                    |   58 -------------------
 board/samsung/smdk5250/Makefile                    |    4 --
 board/samsung/smdkv310/Makefile                    |    4 --
 board/samsung/smdkv310/mmc_boot.c                  |   60 --------------------
 include/configs/exynos5250-dt.h                    |   10 ++--
 include/configs/origen.h                           |   21 +++----
 include/configs/smdkv310.h                         |   21 +++----
 10 files changed, 54 insertions(+), 165 deletions(-)
 rename {board/samsung/smdk5250 => arch/arm/cpu/armv7/exynos}/spl_boot.c (73%)
 delete mode 100644 board/samsung/origen/mmc_boot.c
 delete mode 100644 board/samsung/smdkv310/mmc_boot.c
Inderpal Singh - March 27, 2013, 8:48 a.m.
Dear Minkyu,

Please let me know if you have any comments for this patch.

With Regards,
Inder

On 16 March 2013 14:16, Inderpal Singh <inderpal.singh@linaro.org> wrote:
> The spl_boot.c which copies the u-boot from the booting device to ram
> is made common for all the exynos based platforms. To do so:
>
> 1. Moved smdk5250/spl_boot.c to common armv7/exynos folder and updated
>    to make it common for exynos4 and exynos5
> 2. Introduced a CONFIG_SPL_BOOTING option as only exynos5250 supports
>    booting from SPI device
> 3. Renamed some config options to make them common between exynos5250,
>    origen and smdkv310.
>
> SD/MMC booting: tested on exynos4210 based origen, exynos5250 based Arndale
> and SMDK5250 boards.
> SPI booting: tested on SMDK5250 board
>
> Signed-off-by: Inderpal Singh <inderpal.singh@linaro.org>
> ---
> It depends on the patchset at [1] as it provides the infrastructure to
> detect the SOC type and revision in spl at runtime.
>
> [1] http://www.mail-archive.com/u-boot@lists.denx.de/msg108301.html
>
>  arch/arm/cpu/armv7/exynos/Makefile                 |    4 ++
>  .../arm/cpu/armv7/exynos}/spl_boot.c               |   33 +++++++----
>  board/samsung/origen/Makefile                      |    4 --
>  board/samsung/origen/mmc_boot.c                    |   58 -------------------
>  board/samsung/smdk5250/Makefile                    |    4 --
>  board/samsung/smdkv310/Makefile                    |    4 --
>  board/samsung/smdkv310/mmc_boot.c                  |   60 --------------------
>  include/configs/exynos5250-dt.h                    |   10 ++--
>  include/configs/origen.h                           |   21 +++----
>  include/configs/smdkv310.h                         |   21 +++----
>  10 files changed, 54 insertions(+), 165 deletions(-)
>  rename {board/samsung/smdk5250 => arch/arm/cpu/armv7/exynos}/spl_boot.c (73%)
>  delete mode 100644 board/samsung/origen/mmc_boot.c
>  delete mode 100644 board/samsung/smdkv310/mmc_boot.c
>
> diff --git a/arch/arm/cpu/armv7/exynos/Makefile b/arch/arm/cpu/armv7/exynos/Makefile
> index b9cf921..c507608 100644
> --- a/arch/arm/cpu/armv7/exynos/Makefile
> +++ b/arch/arm/cpu/armv7/exynos/Makefile
> @@ -24,6 +24,10 @@ LIB  = $(obj)lib$(SOC).o
>
>  COBJS  += clock.o power.o soc.o system.o pinmux.o tzpc_init.o
>
> +ifdef CONFIG_SPL_BUILD
> +COBJS  += spl_boot.o
> +endif
> +
>  SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
>  OBJS   := $(addprefix $(obj),$(COBJS) $(SOBJS))
>
> diff --git a/board/samsung/smdk5250/spl_boot.c b/arch/arm/cpu/armv7/exynos/spl_boot.c
> similarity index 73%
> rename from board/samsung/smdk5250/spl_boot.c
> rename to arch/arm/cpu/armv7/exynos/spl_boot.c
> index d8f3c1e..e970ff6 100644
> --- a/board/samsung/smdk5250/spl_boot.c
> +++ b/arch/arm/cpu/armv7/exynos/spl_boot.c
> @@ -23,6 +23,8 @@
>  #include<common.h>
>  #include<config.h>
>
> +#define OM_STAT        (0x1f << 1)
> +
>  enum boot_mode {
>         BOOT_MODE_MMC = 4,
>         BOOT_MODE_SERIAL = 20,
> @@ -31,8 +33,6 @@ enum boot_mode {
>         BOOT_MODE_USB,  /* Boot using USB download */
>  };
>
> -       typedef u32 (*spi_copy_func_t)(u32 offset, u32 nblock, u32 dst);
> -
>  /*
>  * Copy U-boot from mmc to RAM:
>  * COPY_BL2_FNPTR_ADDR: Address in iRAM, which Contains
> @@ -40,26 +40,37 @@ enum boot_mode {
>  */
>  void copy_uboot_to_ram(void)
>  {
> -       spi_copy_func_t spi_copy;
>         enum boot_mode bootmode;
> -       u32 (*copy_bl2)(u32, u32, u32);
> +       u32 (*copy_bl2)(u32, u32, u32) = NULL;
> +       u32 offset = 0, size = 0;
>
> -       bootmode = readl(EXYNOS5_POWER_BASE) & OM_STAT;
> +       bootmode = readl(samsung_get_base_power()) & OM_STAT;
>
>         switch (bootmode) {
> +#ifdef CONFIG_SPI_BOOTING
>         case BOOT_MODE_SERIAL:
> -               spi_copy = *(spi_copy_func_t *)EXYNOS_COPY_SPI_FNPTR_ADDR;
> -               spi_copy(SPI_FLASH_UBOOT_POS, CONFIG_BL2_SIZE,
> -                                               CONFIG_SYS_TEXT_BASE);
> +               offset = CONFIG_BL2_OFFSET - CONFIG_RES_BLOCK_SIZE;
> +               size = CONFIG_BL2_SIZE;
> +               copy_bl2 = (void *) *(u32 *)EXYNOS_COPY_SPI_FNPTR_ADDR;
>                 break;
> +#endif
>         case BOOT_MODE_MMC:
> -               copy_bl2 = (void *) *(u32 *)COPY_BL2_FNPTR_ADDR;
> -               copy_bl2(BL2_START_OFFSET, BL2_SIZE_BLOC_COUNT,
> -                                               CONFIG_SYS_TEXT_BASE);
> +               offset = CONFIG_BL2_BLOCK_OFFSET;
> +               size = CONFIG_BL2_SIZE_BLOCK_COUNT;
> +
> +               /* Only SMDKv310 EVT0 directly jumps to BootROM copy function */
> +               if (s5p_get_cpu_rev())
> +                       copy_bl2 = (void *) *(u32 *)COPY_BL2_FNPTR_ADDR;
> +               else
> +                       copy_bl2 = (void *) COPY_BL2_FNPTR_ADDR;
> +
>                 break;
>         default:
>                 break;
>         }
> +
> +       if (copy_bl2)
> +               copy_bl2(offset, size, CONFIG_SYS_TEXT_BASE);
>  }
>
>  void board_init_f(unsigned long bootflag)
> diff --git a/board/samsung/origen/Makefile b/board/samsung/origen/Makefile
> index 3a885a5..6133b26 100644
> --- a/board/samsung/origen/Makefile
> +++ b/board/samsung/origen/Makefile
> @@ -31,10 +31,6 @@ ifndef CONFIG_SPL_BUILD
>  COBJS  += origen.o
>  endif
>
> -ifdef CONFIG_SPL_BUILD
> -COBJS  += mmc_boot.o
> -endif
> -
>  SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
>  OBJS   := $(addprefix $(obj),$(COBJS) $(SOBJS))
>
> diff --git a/board/samsung/origen/mmc_boot.c b/board/samsung/origen/mmc_boot.c
> deleted file mode 100644
> index 072f161..0000000
> --- a/board/samsung/origen/mmc_boot.c
> +++ /dev/null
> @@ -1,58 +0,0 @@
> -/*
> - * Copyright (C) 2011 Samsung Electronics
> - *
> - * See file CREDITS for list of people who contributed to this
> - * project.
> - *
> - * This program is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU General Public License as
> - * published by the Free Software Foundation; either version 2 of
> - * the License, or (at your option) any later version.
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> - * GNU General Public License for more details.
> - *
> - * You should have received a copy of the GNU General Public License
> - * along with this program; if not, write to the Free Software
> - * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> - * MA 02111-1307 USA
> - */
> -
> -#include<common.h>
> -#include<config.h>
> -
> -/*
> -* Copy U-boot from mmc to RAM:
> -* COPY_BL2_FNPTR_ADDR: Address in iRAM, which Contains
> -* Pointer to API (Data transfer from mmc to ram)
> -*/
> -void copy_uboot_to_ram(void)
> -{
> -       u32 (*copy_bl2)(u32, u32, u32)  = (void *) *(u32 *)COPY_BL2_FNPTR_ADDR;
> -
> -       copy_bl2(BL2_START_OFFSET, BL2_SIZE_BLOC_COUNT, CONFIG_SYS_TEXT_BASE);
> -}
> -
> -void board_init_f(unsigned long bootflag)
> -{
> -       __attribute__((noreturn)) void (*uboot)(void);
> -       copy_uboot_to_ram();
> -
> -       /* Jump to U-Boot image */
> -       uboot = (void *)CONFIG_SYS_TEXT_BASE;
> -       (*uboot)();
> -       /* Never returns Here */
> -}
> -
> -/* Place Holders */
> -void board_init_r(gd_t *id, ulong dest_addr)
> -{
> -       /* Function attribute is no-return */
> -       /* This Function never executes */
> -       while (1)
> -               ;
> -}
> -
> -void save_boot_params(u32 r0, u32 r1, u32 r2, u32 r3) {}
> diff --git a/board/samsung/smdk5250/Makefile b/board/samsung/smdk5250/Makefile
> index f2c32ee..075b1a7 100644
> --- a/board/samsung/smdk5250/Makefile
> +++ b/board/samsung/smdk5250/Makefile
> @@ -38,10 +38,6 @@ COBJS        += smdk5250.o
>  endif
>  endif
>
> -ifdef CONFIG_SPL_BUILD
> -COBJS  += spl_boot.o
> -endif
> -
>  SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
>  OBJS   := $(addprefix $(obj),$(COBJS) $(SOBJS))
>
> diff --git a/board/samsung/smdkv310/Makefile b/board/samsung/smdkv310/Makefile
> index 56e0c16..e79045d 100644
> --- a/board/samsung/smdkv310/Makefile
> +++ b/board/samsung/smdkv310/Makefile
> @@ -30,10 +30,6 @@ ifndef CONFIG_SPL_BUILD
>  COBJS  += smdkv310.o
>  endif
>
> -ifdef CONFIG_SPL_BUILD
> -COBJS  += mmc_boot.o
> -endif
> -
>  SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
>  OBJS   := $(addprefix $(obj),$(COBJS) $(SOBJS))
>
> diff --git a/board/samsung/smdkv310/mmc_boot.c b/board/samsung/smdkv310/mmc_boot.c
> deleted file mode 100644
> index d3fc18d..0000000
> --- a/board/samsung/smdkv310/mmc_boot.c
> +++ /dev/null
> @@ -1,60 +0,0 @@
> -/*
> - * Copyright (C) 2011 Samsung Electronics
> - *
> - * See file CREDITS for list of people who contributed to this
> - * project.
> - *
> - * This program is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU General Public License as
> - * published by the Free Software Foundation; either version 2 of
> - * the License, or (at your option) any later version.
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> - * GNU General Public License for more details.
> - *
> - * You should have received a copy of the GNU General Public License
> - * along with this program; if not, write to the Free Software
> - * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> - * MA 02111-1307 USA
> - */
> -
> -#include<common.h>
> -#include<config.h>
> -
> -/*
> -* Copy U-boot from mmc to RAM:
> -* COPY_BL2_FNPTR_ADDR: Address in iRAM, which Contains
> -* API (Data transfer from mmc to ram)
> -*/
> -void copy_uboot_to_ram(void)
> -{
> -       u32 (*copy_bl2)(u32, u32, u32) = (void *)COPY_BL2_FNPTR_ADDR;
> -
> -       copy_bl2(BL2_START_OFFSET, BL2_SIZE_BLOC_COUNT, CONFIG_SYS_TEXT_BASE);
> -}
> -
> -void board_init_f(unsigned long bootflag)
> -{
> -       __attribute__((noreturn)) void (*uboot)(void);
> -       copy_uboot_to_ram();
> -
> -       /* Jump to U-Boot image */
> -       uboot = (void *)CONFIG_SYS_TEXT_BASE;
> -       (*uboot)();
> -       /* Never returns Here */
> -}
> -
> -/* Place Holders */
> -void board_init_r(gd_t *id, ulong dest_addr)
> -{
> -       /*Function attribute is no-return*/
> -       /*This Function never executes*/
> -       while (1)
> -               ;
> -}
> -
> -void save_boot_params(u32 r0, u32 r1, u32 r2, u32 r3)
> -{
> -}
> diff --git a/include/configs/exynos5250-dt.h b/include/configs/exynos5250-dt.h
> index 16d3ab1..7308522 100644
> --- a/include/configs/exynos5250-dt.h
> +++ b/include/configs/exynos5250-dt.h
> @@ -206,12 +206,14 @@
>  #define CONFIG_ENV_OFFSET      (CONFIG_BL2_OFFSET + CONFIG_BL2_SIZE)
>
>  /* U-boot copy size from boot Media to DRAM.*/
> -#define BL2_START_OFFSET       (CONFIG_BL2_OFFSET/512)
> -#define BL2_SIZE_BLOC_COUNT    (CONFIG_BL2_SIZE/512)
> +#define CONFIG_BL2_BLOCK_OFFSET                (CONFIG_BL2_OFFSET/512)
> +#define CONFIG_BL2_SIZE_BLOCK_COUNT    (CONFIG_BL2_SIZE/512)
>
> -#define OM_STAT                                (0x1f << 1)
> +#define CONFIG_SPI_BOOTING
> +
> +#ifdef CONFIG_SPI_BOOTING
>  #define EXYNOS_COPY_SPI_FNPTR_ADDR     0x02020058
> -#define SPI_FLASH_UBOOT_POS            (CONFIG_SEC_FW_SIZE + CONFIG_BL1_SIZE)
> +#endif
>
>  #define CONFIG_DOS_PARTITION
>
> diff --git a/include/configs/origen.h b/include/configs/origen.h
> index e179911..c4f2ec0 100644
> --- a/include/configs/origen.h
> +++ b/include/configs/origen.h
> @@ -139,20 +139,21 @@
>  /* MIU (Memory Interleaving Unit) */
>  #define CONFIG_MIU_2BIT_21_7_INTERLEAVED
>
> -#define CONFIG_ENV_IS_IN_MMC           1
> -#define CONFIG_SYS_MMC_ENV_DEV         0
> -#define CONFIG_ENV_SIZE                        (16 << 10)      /* 16 KB */
> -#define RESERVE_BLOCK_SIZE             (512)
> -#define BL1_SIZE                       (16 << 10) /*16 K reserved for BL1*/
> -#define CONFIG_ENV_OFFSET              (RESERVE_BLOCK_SIZE + BL1_SIZE)
> -#define CONFIG_DOS_PARTITION           1
> +#define CONFIG_ENV_IS_IN_MMC   1
> +#define CONFIG_SYS_MMC_ENV_DEV 0
> +#define CONFIG_ENV_SIZE                (16 << 10)      /* 16 KB */
> +#define CONFIG_RES_BLOCK_SIZE  (512)
> +#define CONFIG_BL1_SIZE                (16 << 10) /*16 K reserved for BL1*/
> +#define CONFIG_ENV_OFFSET      (CONFIG_RES_BLOCK_SIZE + CONFIG_BL1_SIZE)
> +#define CONFIG_BL2_OFFSET      (CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE)
> +#define CONFIG_DOS_PARTITION   1
>
>  #define CONFIG_SYS_INIT_SP_ADDR        (CONFIG_SYS_LOAD_ADDR - GENERATED_GBL_DATA_SIZE)
>
>  /* U-boot copy size from boot Media to DRAM.*/
> -#define COPY_BL2_SIZE          0x80000
> -#define BL2_START_OFFSET       ((CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE)/512)
> -#define BL2_SIZE_BLOC_COUNT    (COPY_BL2_SIZE/512)
> +#define CONFIG_BL2_SIZE                        0x80000
> +#define CONFIG_BL2_BLOCK_OFFSET                (CONFIG_BL2_OFFSET/512)
> +#define CONFIG_BL2_SIZE_BLOCK_COUNT    (CONFIG_BL2_SIZE/512)
>
>  /* Enable devicetree support */
>  #define CONFIG_OF_LIBFDT
> diff --git a/include/configs/smdkv310.h b/include/configs/smdkv310.h
> index 5e43066..8bb8de7 100644
> --- a/include/configs/smdkv310.h
> +++ b/include/configs/smdkv310.h
> @@ -138,20 +138,21 @@
>  /* MIU (Memory Interleaving Unit) */
>  #define CONFIG_MIU_2BIT_INTERLEAVED
>
> -#define CONFIG_ENV_IS_IN_MMC           1
> -#define CONFIG_SYS_MMC_ENV_DEV         0
> -#define CONFIG_ENV_SIZE                        (16 << 10)      /* 16 KB */
> -#define RESERVE_BLOCK_SIZE             (512)
> -#define BL1_SIZE                       (16 << 10) /*16 K reserved for BL1*/
> -#define CONFIG_ENV_OFFSET              (RESERVE_BLOCK_SIZE + BL1_SIZE)
> -#define CONFIG_DOS_PARTITION           1
> +#define CONFIG_ENV_IS_IN_MMC   1
> +#define CONFIG_SYS_MMC_ENV_DEV 0
> +#define CONFIG_ENV_SIZE                (16 << 10) /* 16 KB */
> +#define CONFIG_RES_BLOCK_SIZE  (512)
> +#define CONFIG_BL1_SIZE                (16 << 10) /*16 K reserved for BL1*/
> +#define CONFIG_ENV_OFFSET      (CONFIG_RES_BLOCK_SIZE + CONFIG_BL1_SIZE)
> +#define CONFIG_BL2_OFFSET      (CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE)
> +#define CONFIG_DOS_PARTITION   1
>
>  #define CONFIG_SYS_INIT_SP_ADDR        (CONFIG_SYS_LOAD_ADDR - GENERATED_GBL_DATA_SIZE)
>
>  /* U-boot copy size from boot Media to DRAM.*/
> -#define        COPY_BL2_SIZE           0x80000
> -#define BL2_START_OFFSET       ((CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE)/512)
> -#define BL2_SIZE_BLOC_COUNT    (COPY_BL2_SIZE/512)
> +#define        CONFIG_BL2_SIZE                 0x80000
> +#define CONFIG_BL2_BLOCK_OFFSET                (CONFIG_BL2_OFFSET/512)
> +#define CONFIG_BL2_SIZE_BLOCK_COUNT    (CONFIG_BL2_SIZE/512)
>
>  /* Ethernet Controllor Driver */
>  #ifdef CONFIG_CMD_NET
> --
> 1.7.9.5
>
Geoff Levand - May 31, 2013, 11:14 p.m.
> [1] http://www.mail-archive.com/u-boot <at> lists.denx.de/msg108301.html

This gives 404 not found...
Minkyu Kang - June 4, 2013, 7:26 a.m.
Dear Inderpal Singh,

On 27/03/13 17:48, Inderpal Singh wrote:
> Dear Minkyu,
> 
> Please let me know if you have any comments for this patch.
> 
> With Regards,
> Inder
> 
> On 16 March 2013 14:16, Inderpal Singh <inderpal.singh@linaro.org> wrote:
>> The spl_boot.c which copies the u-boot from the booting device to ram
>> is made common for all the exynos based platforms. To do so:
>>
>> 1. Moved smdk5250/spl_boot.c to common armv7/exynos folder and updated
>>    to make it common for exynos4 and exynos5
>> 2. Introduced a CONFIG_SPL_BOOTING option as only exynos5250 supports
>>    booting from SPI device
>> 3. Renamed some config options to make them common between exynos5250,
>>    origen and smdkv310.
>>
>> SD/MMC booting: tested on exynos4210 based origen, exynos5250 based Arndale
>> and SMDK5250 boards.
>> SPI booting: tested on SMDK5250 board
>>
>> Signed-off-by: Inderpal Singh <inderpal.singh@linaro.org>
>> ---
>> It depends on the patchset at [1] as it provides the infrastructure to
>> detect the SOC type and revision in spl at runtime.
>>
>> [1] http://www.mail-archive.com/u-boot@lists.denx.de/msg108301.html
>>
>>  arch/arm/cpu/armv7/exynos/Makefile                 |    4 ++
>>  .../arm/cpu/armv7/exynos}/spl_boot.c               |   33 +++++++----
>>  board/samsung/origen/Makefile                      |    4 --
>>  board/samsung/origen/mmc_boot.c                    |   58 -------------------
>>  board/samsung/smdk5250/Makefile                    |    4 --
>>  board/samsung/smdkv310/Makefile                    |    4 --
>>  board/samsung/smdkv310/mmc_boot.c                  |   60 --------------------
>>  include/configs/exynos5250-dt.h                    |   10 ++--
>>  include/configs/origen.h                           |   21 +++----
>>  include/configs/smdkv310.h                         |   21 +++----
>>  10 files changed, 54 insertions(+), 165 deletions(-)
>>  rename {board/samsung/smdk5250 => arch/arm/cpu/armv7/exynos}/spl_boot.c (73%)
>>  delete mode 100644 board/samsung/origen/mmc_boot.c
>>  delete mode 100644 board/samsung/smdkv310/mmc_boot.c

Since this patch had wait too long on queue, need to rebase.
I'm sorry to late review.

>>
>> diff --git a/arch/arm/cpu/armv7/exynos/Makefile b/arch/arm/cpu/armv7/exynos/Makefile
>> index b9cf921..c507608 100644
>> --- a/arch/arm/cpu/armv7/exynos/Makefile
>> +++ b/arch/arm/cpu/armv7/exynos/Makefile
>> @@ -24,6 +24,10 @@ LIB  = $(obj)lib$(SOC).o
>>
>>  COBJS  += clock.o power.o soc.o system.o pinmux.o tzpc_init.o
>>
>> +ifdef CONFIG_SPL_BUILD
>> +COBJS  += spl_boot.o
>> +endif
>> +
>>  SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
>>  OBJS   := $(addprefix $(obj),$(COBJS) $(SOBJS))
>>
>> diff --git a/board/samsung/smdk5250/spl_boot.c b/arch/arm/cpu/armv7/exynos/spl_boot.c
>> similarity index 73%
>> rename from board/samsung/smdk5250/spl_boot.c
>> rename to arch/arm/cpu/armv7/exynos/spl_boot.c
>> index d8f3c1e..e970ff6 100644
>> --- a/board/samsung/smdk5250/spl_boot.c
>> +++ b/arch/arm/cpu/armv7/exynos/spl_boot.c
>> @@ -23,6 +23,8 @@
>>  #include<common.h>
>>  #include<config.h>
>>
>> +#define OM_STAT        (0x1f << 1)
>> +
>>  enum boot_mode {
>>         BOOT_MODE_MMC = 4,
>>         BOOT_MODE_SERIAL = 20,
>> @@ -31,8 +33,6 @@ enum boot_mode {
>>         BOOT_MODE_USB,  /* Boot using USB download */
>>  };
>>
>> -       typedef u32 (*spi_copy_func_t)(u32 offset, u32 nblock, u32 dst);
>> -
>>  /*
>>  * Copy U-boot from mmc to RAM:
>>  * COPY_BL2_FNPTR_ADDR: Address in iRAM, which Contains
>> @@ -40,26 +40,37 @@ enum boot_mode {
>>  */
>>  void copy_uboot_to_ram(void)
>>  {
>> -       spi_copy_func_t spi_copy;
>>         enum boot_mode bootmode;
>> -       u32 (*copy_bl2)(u32, u32, u32);
>> +       u32 (*copy_bl2)(u32, u32, u32) = NULL;
>> +       u32 offset = 0, size = 0;
>>
>> -       bootmode = readl(EXYNOS5_POWER_BASE) & OM_STAT;
>> +       bootmode = readl(samsung_get_base_power()) & OM_STAT;
>>
>>         switch (bootmode) {
>> +#ifdef CONFIG_SPI_BOOTING

Is this ifdef needs?

>>         case BOOT_MODE_SERIAL:
>> -               spi_copy = *(spi_copy_func_t *)EXYNOS_COPY_SPI_FNPTR_ADDR;
>> -               spi_copy(SPI_FLASH_UBOOT_POS, CONFIG_BL2_SIZE,
>> -                                               CONFIG_SYS_TEXT_BASE);
>> +               offset = CONFIG_BL2_OFFSET - CONFIG_RES_BLOCK_SIZE;
>> +               size = CONFIG_BL2_SIZE;
>> +               copy_bl2 = (void *) *(u32 *)EXYNOS_COPY_SPI_FNPTR_ADDR;
>>                 break;
>> +#endif
>>         case BOOT_MODE_MMC:
>> -               copy_bl2 = (void *) *(u32 *)COPY_BL2_FNPTR_ADDR;
>> -               copy_bl2(BL2_START_OFFSET, BL2_SIZE_BLOC_COUNT,
>> -                                               CONFIG_SYS_TEXT_BASE);
>> +               offset = CONFIG_BL2_BLOCK_OFFSET;
>> +               size = CONFIG_BL2_SIZE_BLOCK_COUNT;
>> +
>> +               /* Only SMDKv310 EVT0 directly jumps to BootROM copy function */
>> +               if (s5p_get_cpu_rev())

According to your comment, you should check cpu_ids.

>> +                       copy_bl2 = (void *) *(u32 *)COPY_BL2_FNPTR_ADDR;
>> +               else
>> +                       copy_bl2 = (void *) COPY_BL2_FNPTR_ADDR;
>> +
>>                 break;
>>         default:
>>                 break;
>>         }
>> +
>> +       if (copy_bl2)
>> +               copy_bl2(offset, size, CONFIG_SYS_TEXT_BASE);
>>  }
>>
>>  void board_init_f(unsigned long bootflag)
>> diff --git a/board/samsung/origen/Makefile b/board/samsung/origen/Makefile
>> index 3a885a5..6133b26 100644
>> --- a/board/samsung/origen/Makefile
>> +++ b/board/samsung/origen/Makefile
>> @@ -31,10 +31,6 @@ ifndef CONFIG_SPL_BUILD
>>  COBJS  += origen.o
>>  endif
>>
>> -ifdef CONFIG_SPL_BUILD
>> -COBJS  += mmc_boot.o
>> -endif
>> -
>>  SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
>>  OBJS   := $(addprefix $(obj),$(COBJS) $(SOBJS))
>>
>> diff --git a/board/samsung/origen/mmc_boot.c b/board/samsung/origen/mmc_boot.c
>> deleted file mode 100644
>> index 072f161..0000000
>> --- a/board/samsung/origen/mmc_boot.c
>> +++ /dev/null
>> @@ -1,58 +0,0 @@
>> -/*
>> - * Copyright (C) 2011 Samsung Electronics
>> - *
>> - * See file CREDITS for list of people who contributed to this
>> - * project.
>> - *
>> - * This program is free software; you can redistribute it and/or
>> - * modify it under the terms of the GNU General Public License as
>> - * published by the Free Software Foundation; either version 2 of
>> - * the License, or (at your option) any later version.
>> - *
>> - * This program is distributed in the hope that it will be useful,
>> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
>> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> - * GNU General Public License for more details.
>> - *
>> - * You should have received a copy of the GNU General Public License
>> - * along with this program; if not, write to the Free Software
>> - * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
>> - * MA 02111-1307 USA
>> - */
>> -
>> -#include<common.h>
>> -#include<config.h>
>> -
>> -/*
>> -* Copy U-boot from mmc to RAM:
>> -* COPY_BL2_FNPTR_ADDR: Address in iRAM, which Contains
>> -* Pointer to API (Data transfer from mmc to ram)
>> -*/
>> -void copy_uboot_to_ram(void)
>> -{
>> -       u32 (*copy_bl2)(u32, u32, u32)  = (void *) *(u32 *)COPY_BL2_FNPTR_ADDR;
>> -
>> -       copy_bl2(BL2_START_OFFSET, BL2_SIZE_BLOC_COUNT, CONFIG_SYS_TEXT_BASE);
>> -}
>> -
>> -void board_init_f(unsigned long bootflag)
>> -{
>> -       __attribute__((noreturn)) void (*uboot)(void);
>> -       copy_uboot_to_ram();
>> -
>> -       /* Jump to U-Boot image */
>> -       uboot = (void *)CONFIG_SYS_TEXT_BASE;
>> -       (*uboot)();
>> -       /* Never returns Here */
>> -}
>> -
>> -/* Place Holders */
>> -void board_init_r(gd_t *id, ulong dest_addr)
>> -{
>> -       /* Function attribute is no-return */
>> -       /* This Function never executes */
>> -       while (1)
>> -               ;
>> -}
>> -
>> -void save_boot_params(u32 r0, u32 r1, u32 r2, u32 r3) {}
>> diff --git a/board/samsung/smdk5250/Makefile b/board/samsung/smdk5250/Makefile
>> index f2c32ee..075b1a7 100644
>> --- a/board/samsung/smdk5250/Makefile
>> +++ b/board/samsung/smdk5250/Makefile
>> @@ -38,10 +38,6 @@ COBJS        += smdk5250.o
>>  endif
>>  endif
>>
>> -ifdef CONFIG_SPL_BUILD
>> -COBJS  += spl_boot.o
>> -endif
>> -
>>  SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
>>  OBJS   := $(addprefix $(obj),$(COBJS) $(SOBJS))
>>
>> diff --git a/board/samsung/smdkv310/Makefile b/board/samsung/smdkv310/Makefile
>> index 56e0c16..e79045d 100644
>> --- a/board/samsung/smdkv310/Makefile
>> +++ b/board/samsung/smdkv310/Makefile
>> @@ -30,10 +30,6 @@ ifndef CONFIG_SPL_BUILD
>>  COBJS  += smdkv310.o
>>  endif
>>
>> -ifdef CONFIG_SPL_BUILD
>> -COBJS  += mmc_boot.o
>> -endif
>> -
>>  SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
>>  OBJS   := $(addprefix $(obj),$(COBJS) $(SOBJS))
>>
>> diff --git a/board/samsung/smdkv310/mmc_boot.c b/board/samsung/smdkv310/mmc_boot.c
>> deleted file mode 100644
>> index d3fc18d..0000000
>> --- a/board/samsung/smdkv310/mmc_boot.c
>> +++ /dev/null
>> @@ -1,60 +0,0 @@
>> -/*
>> - * Copyright (C) 2011 Samsung Electronics
>> - *
>> - * See file CREDITS for list of people who contributed to this
>> - * project.
>> - *
>> - * This program is free software; you can redistribute it and/or
>> - * modify it under the terms of the GNU General Public License as
>> - * published by the Free Software Foundation; either version 2 of
>> - * the License, or (at your option) any later version.
>> - *
>> - * This program is distributed in the hope that it will be useful,
>> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
>> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> - * GNU General Public License for more details.
>> - *
>> - * You should have received a copy of the GNU General Public License
>> - * along with this program; if not, write to the Free Software
>> - * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
>> - * MA 02111-1307 USA
>> - */
>> -
>> -#include<common.h>
>> -#include<config.h>
>> -
>> -/*
>> -* Copy U-boot from mmc to RAM:
>> -* COPY_BL2_FNPTR_ADDR: Address in iRAM, which Contains
>> -* API (Data transfer from mmc to ram)
>> -*/
>> -void copy_uboot_to_ram(void)
>> -{
>> -       u32 (*copy_bl2)(u32, u32, u32) = (void *)COPY_BL2_FNPTR_ADDR;
>> -
>> -       copy_bl2(BL2_START_OFFSET, BL2_SIZE_BLOC_COUNT, CONFIG_SYS_TEXT_BASE);
>> -}
>> -
>> -void board_init_f(unsigned long bootflag)
>> -{
>> -       __attribute__((noreturn)) void (*uboot)(void);
>> -       copy_uboot_to_ram();
>> -
>> -       /* Jump to U-Boot image */
>> -       uboot = (void *)CONFIG_SYS_TEXT_BASE;
>> -       (*uboot)();
>> -       /* Never returns Here */
>> -}
>> -
>> -/* Place Holders */
>> -void board_init_r(gd_t *id, ulong dest_addr)
>> -{
>> -       /*Function attribute is no-return*/
>> -       /*This Function never executes*/
>> -       while (1)
>> -               ;
>> -}
>> -
>> -void save_boot_params(u32 r0, u32 r1, u32 r2, u32 r3)
>> -{
>> -}
>> diff --git a/include/configs/exynos5250-dt.h b/include/configs/exynos5250-dt.h
>> index 16d3ab1..7308522 100644
>> --- a/include/configs/exynos5250-dt.h
>> +++ b/include/configs/exynos5250-dt.h
>> @@ -206,12 +206,14 @@
>>  #define CONFIG_ENV_OFFSET      (CONFIG_BL2_OFFSET + CONFIG_BL2_SIZE)
>>
>>  /* U-boot copy size from boot Media to DRAM.*/
>> -#define BL2_START_OFFSET       (CONFIG_BL2_OFFSET/512)
>> -#define BL2_SIZE_BLOC_COUNT    (CONFIG_BL2_SIZE/512)
>> +#define CONFIG_BL2_BLOCK_OFFSET                (CONFIG_BL2_OFFSET/512)
>> +#define CONFIG_BL2_SIZE_BLOCK_COUNT    (CONFIG_BL2_SIZE/512)
>>
>> -#define OM_STAT                                (0x1f << 1)
>> +#define CONFIG_SPI_BOOTING
>> +
>> +#ifdef CONFIG_SPI_BOOTING

I think this ifdef is unnecessary.
You already know that we will use spi booting on this board.

>>  #define EXYNOS_COPY_SPI_FNPTR_ADDR     0x02020058
>> -#define SPI_FLASH_UBOOT_POS            (CONFIG_SEC_FW_SIZE + CONFIG_BL1_SIZE)
>> +#endif
>>
>>  #define CONFIG_DOS_PARTITION
>>
>> diff --git a/include/configs/origen.h b/include/configs/origen.h
>> index e179911..c4f2ec0 100644
>> --- a/include/configs/origen.h
>> +++ b/include/configs/origen.h
>> @@ -139,20 +139,21 @@
>>  /* MIU (Memory Interleaving Unit) */
>>  #define CONFIG_MIU_2BIT_21_7_INTERLEAVED
>>
>> -#define CONFIG_ENV_IS_IN_MMC           1
>> -#define CONFIG_SYS_MMC_ENV_DEV         0
>> -#define CONFIG_ENV_SIZE                        (16 << 10)      /* 16 KB */
>> -#define RESERVE_BLOCK_SIZE             (512)
>> -#define BL1_SIZE                       (16 << 10) /*16 K reserved for BL1*/
>> -#define CONFIG_ENV_OFFSET              (RESERVE_BLOCK_SIZE + BL1_SIZE)
>> -#define CONFIG_DOS_PARTITION           1
>> +#define CONFIG_ENV_IS_IN_MMC   1
>> +#define CONFIG_SYS_MMC_ENV_DEV 0
>> +#define CONFIG_ENV_SIZE                (16 << 10)      /* 16 KB */
>> +#define CONFIG_RES_BLOCK_SIZE  (512)
>> +#define CONFIG_BL1_SIZE                (16 << 10) /*16 K reserved for BL1*/
>> +#define CONFIG_ENV_OFFSET      (CONFIG_RES_BLOCK_SIZE + CONFIG_BL1_SIZE)
>> +#define CONFIG_BL2_OFFSET      (CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE)
>> +#define CONFIG_DOS_PARTITION   1
>>
>>  #define CONFIG_SYS_INIT_SP_ADDR        (CONFIG_SYS_LOAD_ADDR - GENERATED_GBL_DATA_SIZE)
>>
>>  /* U-boot copy size from boot Media to DRAM.*/
>> -#define COPY_BL2_SIZE          0x80000
>> -#define BL2_START_OFFSET       ((CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE)/512)
>> -#define BL2_SIZE_BLOC_COUNT    (COPY_BL2_SIZE/512)
>> +#define CONFIG_BL2_SIZE                        0x80000
>> +#define CONFIG_BL2_BLOCK_OFFSET                (CONFIG_BL2_OFFSET/512)
>> +#define CONFIG_BL2_SIZE_BLOCK_COUNT    (CONFIG_BL2_SIZE/512)
>>
>>  /* Enable devicetree support */
>>  #define CONFIG_OF_LIBFDT
>> diff --git a/include/configs/smdkv310.h b/include/configs/smdkv310.h
>> index 5e43066..8bb8de7 100644
>> --- a/include/configs/smdkv310.h
>> +++ b/include/configs/smdkv310.h
>> @@ -138,20 +138,21 @@
>>  /* MIU (Memory Interleaving Unit) */
>>  #define CONFIG_MIU_2BIT_INTERLEAVED
>>
>> -#define CONFIG_ENV_IS_IN_MMC           1
>> -#define CONFIG_SYS_MMC_ENV_DEV         0
>> -#define CONFIG_ENV_SIZE                        (16 << 10)      /* 16 KB */
>> -#define RESERVE_BLOCK_SIZE             (512)
>> -#define BL1_SIZE                       (16 << 10) /*16 K reserved for BL1*/
>> -#define CONFIG_ENV_OFFSET              (RESERVE_BLOCK_SIZE + BL1_SIZE)
>> -#define CONFIG_DOS_PARTITION           1
>> +#define CONFIG_ENV_IS_IN_MMC   1
>> +#define CONFIG_SYS_MMC_ENV_DEV 0
>> +#define CONFIG_ENV_SIZE                (16 << 10) /* 16 KB */
>> +#define CONFIG_RES_BLOCK_SIZE  (512)
>> +#define CONFIG_BL1_SIZE                (16 << 10) /*16 K reserved for BL1*/
>> +#define CONFIG_ENV_OFFSET      (CONFIG_RES_BLOCK_SIZE + CONFIG_BL1_SIZE)
>> +#define CONFIG_BL2_OFFSET      (CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE)
>> +#define CONFIG_DOS_PARTITION   1
>>
>>  #define CONFIG_SYS_INIT_SP_ADDR        (CONFIG_SYS_LOAD_ADDR - GENERATED_GBL_DATA_SIZE)
>>
>>  /* U-boot copy size from boot Media to DRAM.*/
>> -#define        COPY_BL2_SIZE           0x80000
>> -#define BL2_START_OFFSET       ((CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE)/512)
>> -#define BL2_SIZE_BLOC_COUNT    (COPY_BL2_SIZE/512)
>> +#define        CONFIG_BL2_SIZE                 0x80000
>> +#define CONFIG_BL2_BLOCK_OFFSET                (CONFIG_BL2_OFFSET/512)
>> +#define CONFIG_BL2_SIZE_BLOCK_COUNT    (CONFIG_BL2_SIZE/512)
>>
>>  /* Ethernet Controllor Driver */
>>  #ifdef CONFIG_CMD_NET
>> --
>> 1.7.9.5
>>
> 

This patch needs to test.
Please help to test this patch and let me know.

Thanks,
Minkyu Kang.
Inderpal Singh - June 7, 2013, 6:14 a.m.
Dear Minkyu Kang,

Thanks for the review.


On 4 June 2013 12:56, Minkyu Kang <mk7.kang@samsung.com> wrote:

> Dear Inderpal Singh,
>
> On 27/03/13 17:48, Inderpal Singh wrote:
> > Dear Minkyu,
> >
> > Please let me know if you have any comments for this patch.
> >
> > With Regards,
> > Inder
> >
> > On 16 March 2013 14:16, Inderpal Singh <inderpal.singh@linaro.org>
> wrote:
> >> The spl_boot.c which copies the u-boot from the booting device to ram
> >> is made common for all the exynos based platforms. To do so:
> >>
> >> 1. Moved smdk5250/spl_boot.c to common armv7/exynos folder and updated
> >>    to make it common for exynos4 and exynos5
> >> 2. Introduced a CONFIG_SPL_BOOTING option as only exynos5250 supports
> >>    booting from SPI device
> >> 3. Renamed some config options to make them common between exynos5250,
> >>    origen and smdkv310.
> >>
> >> SD/MMC booting: tested on exynos4210 based origen, exynos5250 based
> Arndale
> >> and SMDK5250 boards.
> >> SPI booting: tested on SMDK5250 board
> >>
> >> Signed-off-by: Inderpal Singh <inderpal.singh@linaro.org>
> >> ---
> >> It depends on the patchset at [1] as it provides the infrastructure to
> >> detect the SOC type and revision in spl at runtime.
> >>
> >> [1] http://www.mail-archive.com/u-boot@lists.denx.de/msg108301.html
> >>
> >>  arch/arm/cpu/armv7/exynos/Makefile                 |    4 ++
> >>  .../arm/cpu/armv7/exynos}/spl_boot.c               |   33 +++++++----
> >>  board/samsung/origen/Makefile                      |    4 --
> >>  board/samsung/origen/mmc_boot.c                    |   58
> -------------------
> >>  board/samsung/smdk5250/Makefile                    |    4 --
> >>  board/samsung/smdkv310/Makefile                    |    4 --
> >>  board/samsung/smdkv310/mmc_boot.c                  |   60
> --------------------
> >>  include/configs/exynos5250-dt.h                    |   10 ++--
> >>  include/configs/origen.h                           |   21 +++----
> >>  include/configs/smdkv310.h                         |   21 +++----
> >>  10 files changed, 54 insertions(+), 165 deletions(-)
> >>  rename {board/samsung/smdk5250 =>
> arch/arm/cpu/armv7/exynos}/spl_boot.c (73%)
> >>  delete mode 100644 board/samsung/origen/mmc_boot.c
> >>  delete mode 100644 board/samsung/smdkv310/mmc_boot.c
>
> Since this patch had wait too long on queue, need to rebase.
> I'm sorry to late review.
>
> >>
> >> diff --git a/arch/arm/cpu/armv7/exynos/Makefile
> b/arch/arm/cpu/armv7/exynos/Makefile
> >> index b9cf921..c507608 100644
> >> --- a/arch/arm/cpu/armv7/exynos/Makefile
> >> +++ b/arch/arm/cpu/armv7/exynos/Makefile
> >> @@ -24,6 +24,10 @@ LIB  = $(obj)lib$(SOC).o
> >>
> >>  COBJS  += clock.o power.o soc.o system.o pinmux.o tzpc_init.o
> >>
> >> +ifdef CONFIG_SPL_BUILD
> >> +COBJS  += spl_boot.o
> >> +endif
> >> +
> >>  SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
> >>  OBJS   := $(addprefix $(obj),$(COBJS) $(SOBJS))
> >>
> >> diff --git a/board/samsung/smdk5250/spl_boot.c
> b/arch/arm/cpu/armv7/exynos/spl_boot.c
> >> similarity index 73%
> >> rename from board/samsung/smdk5250/spl_boot.c
> >> rename to arch/arm/cpu/armv7/exynos/spl_boot.c
> >> index d8f3c1e..e970ff6 100644
> >> --- a/board/samsung/smdk5250/spl_boot.c
> >> +++ b/arch/arm/cpu/armv7/exynos/spl_boot.c
> >> @@ -23,6 +23,8 @@
> >>  #include<common.h>
> >>  #include<config.h>
> >>
> >> +#define OM_STAT        (0x1f << 1)
> >> +
> >>  enum boot_mode {
> >>         BOOT_MODE_MMC = 4,
> >>         BOOT_MODE_SERIAL = 20,
> >> @@ -31,8 +33,6 @@ enum boot_mode {
> >>         BOOT_MODE_USB,  /* Boot using USB download */
> >>  };
> >>
> >> -       typedef u32 (*spi_copy_func_t)(u32 offset, u32 nblock, u32 dst);
> >> -
> >>  /*
> >>  * Copy U-boot from mmc to RAM:
> >>  * COPY_BL2_FNPTR_ADDR: Address in iRAM, which Contains
> >> @@ -40,26 +40,37 @@ enum boot_mode {
> >>  */
> >>  void copy_uboot_to_ram(void)
> >>  {
> >> -       spi_copy_func_t spi_copy;
> >>         enum boot_mode bootmode;
> >> -       u32 (*copy_bl2)(u32, u32, u32);
> >> +       u32 (*copy_bl2)(u32, u32, u32) = NULL;
> >> +       u32 offset = 0, size = 0;
> >>
> >> -       bootmode = readl(EXYNOS5_POWER_BASE) & OM_STAT;
> >> +       bootmode = readl(samsung_get_base_power()) & OM_STAT;
> >>
> >>         switch (bootmode) {
> >> +#ifdef CONFIG_SPI_BOOTING
>
> Is this ifdef needs?
>

I introduced this ifdef because only exynos5250 has
EXYNOS_COPY_SPI_FNPTR_ADDR defined.
If i don't use this ifdef, It won't compile for origen, smdkv310 etc.


> >>         case BOOT_MODE_SERIAL:
> >> -               spi_copy = *(spi_copy_func_t
> *)EXYNOS_COPY_SPI_FNPTR_ADDR;
> >> -               spi_copy(SPI_FLASH_UBOOT_POS, CONFIG_BL2_SIZE,
> >> -                                               CONFIG_SYS_TEXT_BASE);
> >> +               offset = CONFIG_BL2_OFFSET - CONFIG_RES_BLOCK_SIZE;
> >> +               size = CONFIG_BL2_SIZE;
> >> +               copy_bl2 = (void *) *(u32 *)EXYNOS_COPY_SPI_FNPTR_ADDR;
> >>                 break;
> >> +#endif
> >>         case BOOT_MODE_MMC:
> >> -               copy_bl2 = (void *) *(u32 *)COPY_BL2_FNPTR_ADDR;
> >> -               copy_bl2(BL2_START_OFFSET, BL2_SIZE_BLOC_COUNT,
> >> -                                               CONFIG_SYS_TEXT_BASE);
> >> +               offset = CONFIG_BL2_BLOCK_OFFSET;
> >> +               size = CONFIG_BL2_SIZE_BLOCK_COUNT;
> >> +
> >> +               /* Only SMDKv310 EVT0 directly jumps to BootROM copy
> function */
> >> +               if (s5p_get_cpu_rev())
>
> According to your comment, you should check cpu_ids.
>

The s5p_cpu_rev is being set to zero only for Exynos4210 EVT0, hence I
thought only revision check is sufficient.
That's, perhaps, not very clear. I will change it to check both cpuid as
well as cpu_rev.


>
> >> +                       copy_bl2 = (void *) *(u32 *)COPY_BL2_FNPTR_ADDR;
> >> +               else
> >> +                       copy_bl2 = (void *) COPY_BL2_FNPTR_ADDR;
> >> +
> >>                 break;
> >>         default:
> >>                 break;
> >>         }
> >> +
> >> +       if (copy_bl2)
> >> +               copy_bl2(offset, size, CONFIG_SYS_TEXT_BASE);
> >>  }
> >>
> >>  void board_init_f(unsigned long bootflag)
> >> diff --git a/board/samsung/origen/Makefile
> b/board/samsung/origen/Makefile
> >> index 3a885a5..6133b26 100644
> >> --- a/board/samsung/origen/Makefile
> >> +++ b/board/samsung/origen/Makefile
> >> @@ -31,10 +31,6 @@ ifndef CONFIG_SPL_BUILD
> >>  COBJS  += origen.o
> >>  endif
> >>
> >> -ifdef CONFIG_SPL_BUILD
> >> -COBJS  += mmc_boot.o
> >> -endif
> >> -
> >>  SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
> >>  OBJS   := $(addprefix $(obj),$(COBJS) $(SOBJS))
> >>
> >> diff --git a/board/samsung/origen/mmc_boot.c
> b/board/samsung/origen/mmc_boot.c
> >> deleted file mode 100644
> >> index 072f161..0000000
> >> --- a/board/samsung/origen/mmc_boot.c
> >> +++ /dev/null
> >> @@ -1,58 +0,0 @@
> >> -/*
> >> - * Copyright (C) 2011 Samsung Electronics
> >> - *
> >> - * See file CREDITS for list of people who contributed to this
> >> - * project.
> >> - *
> >> - * This program is free software; you can redistribute it and/or
> >> - * modify it under the terms of the GNU General Public License as
> >> - * published by the Free Software Foundation; either version 2 of
> >> - * the License, or (at your option) any later version.
> >> - *
> >> - * This program is distributed in the hope that it will be useful,
> >> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> >> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> >> - * GNU General Public License for more details.
> >> - *
> >> - * You should have received a copy of the GNU General Public License
> >> - * along with this program; if not, write to the Free Software
> >> - * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> >> - * MA 02111-1307 USA
> >> - */
> >> -
> >> -#include<common.h>
> >> -#include<config.h>
> >> -
> >> -/*
> >> -* Copy U-boot from mmc to RAM:
> >> -* COPY_BL2_FNPTR_ADDR: Address in iRAM, which Contains
> >> -* Pointer to API (Data transfer from mmc to ram)
> >> -*/
> >> -void copy_uboot_to_ram(void)
> >> -{
> >> -       u32 (*copy_bl2)(u32, u32, u32)  = (void *) *(u32
> *)COPY_BL2_FNPTR_ADDR;
> >> -
> >> -       copy_bl2(BL2_START_OFFSET, BL2_SIZE_BLOC_COUNT,
> CONFIG_SYS_TEXT_BASE);
> >> -}
> >> -
> >> -void board_init_f(unsigned long bootflag)
> >> -{
> >> -       __attribute__((noreturn)) void (*uboot)(void);
> >> -       copy_uboot_to_ram();
> >> -
> >> -       /* Jump to U-Boot image */
> >> -       uboot = (void *)CONFIG_SYS_TEXT_BASE;
> >> -       (*uboot)();
> >> -       /* Never returns Here */
> >> -}
> >> -
> >> -/* Place Holders */
> >> -void board_init_r(gd_t *id, ulong dest_addr)
> >> -{
> >> -       /* Function attribute is no-return */
> >> -       /* This Function never executes */
> >> -       while (1)
> >> -               ;
> >> -}
> >> -
> >> -void save_boot_params(u32 r0, u32 r1, u32 r2, u32 r3) {}
> >> diff --git a/board/samsung/smdk5250/Makefile
> b/board/samsung/smdk5250/Makefile
> >> index f2c32ee..075b1a7 100644
> >> --- a/board/samsung/smdk5250/Makefile
> >> +++ b/board/samsung/smdk5250/Makefile
> >> @@ -38,10 +38,6 @@ COBJS        += smdk5250.o
> >>  endif
> >>  endif
> >>
> >> -ifdef CONFIG_SPL_BUILD
> >> -COBJS  += spl_boot.o
> >> -endif
> >> -
> >>  SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
> >>  OBJS   := $(addprefix $(obj),$(COBJS) $(SOBJS))
> >>
> >> diff --git a/board/samsung/smdkv310/Makefile
> b/board/samsung/smdkv310/Makefile
> >> index 56e0c16..e79045d 100644
> >> --- a/board/samsung/smdkv310/Makefile
> >> +++ b/board/samsung/smdkv310/Makefile
> >> @@ -30,10 +30,6 @@ ifndef CONFIG_SPL_BUILD
> >>  COBJS  += smdkv310.o
> >>  endif
> >>
> >> -ifdef CONFIG_SPL_BUILD
> >> -COBJS  += mmc_boot.o
> >> -endif
> >> -
> >>  SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
> >>  OBJS   := $(addprefix $(obj),$(COBJS) $(SOBJS))
> >>
> >> diff --git a/board/samsung/smdkv310/mmc_boot.c
> b/board/samsung/smdkv310/mmc_boot.c
> >> deleted file mode 100644
> >> index d3fc18d..0000000
> >> --- a/board/samsung/smdkv310/mmc_boot.c
> >> +++ /dev/null
> >> @@ -1,60 +0,0 @@
> >> -/*
> >> - * Copyright (C) 2011 Samsung Electronics
> >> - *
> >> - * See file CREDITS for list of people who contributed to this
> >> - * project.
> >> - *
> >> - * This program is free software; you can redistribute it and/or
> >> - * modify it under the terms of the GNU General Public License as
> >> - * published by the Free Software Foundation; either version 2 of
> >> - * the License, or (at your option) any later version.
> >> - *
> >> - * This program is distributed in the hope that it will be useful,
> >> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> >> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> >> - * GNU General Public License for more details.
> >> - *
> >> - * You should have received a copy of the GNU General Public License
> >> - * along with this program; if not, write to the Free Software
> >> - * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> >> - * MA 02111-1307 USA
> >> - */
> >> -
> >> -#include<common.h>
> >> -#include<config.h>
> >> -
> >> -/*
> >> -* Copy U-boot from mmc to RAM:
> >> -* COPY_BL2_FNPTR_ADDR: Address in iRAM, which Contains
> >> -* API (Data transfer from mmc to ram)
> >> -*/
> >> -void copy_uboot_to_ram(void)
> >> -{
> >> -       u32 (*copy_bl2)(u32, u32, u32) = (void *)COPY_BL2_FNPTR_ADDR;
> >> -
> >> -       copy_bl2(BL2_START_OFFSET, BL2_SIZE_BLOC_COUNT,
> CONFIG_SYS_TEXT_BASE);
> >> -}
> >> -
> >> -void board_init_f(unsigned long bootflag)
> >> -{
> >> -       __attribute__((noreturn)) void (*uboot)(void);
> >> -       copy_uboot_to_ram();
> >> -
> >> -       /* Jump to U-Boot image */
> >> -       uboot = (void *)CONFIG_SYS_TEXT_BASE;
> >> -       (*uboot)();
> >> -       /* Never returns Here */
> >> -}
> >> -
> >> -/* Place Holders */
> >> -void board_init_r(gd_t *id, ulong dest_addr)
> >> -{
> >> -       /*Function attribute is no-return*/
> >> -       /*This Function never executes*/
> >> -       while (1)
> >> -               ;
> >> -}
> >> -
> >> -void save_boot_params(u32 r0, u32 r1, u32 r2, u32 r3)
> >> -{
> >> -}
> >> diff --git a/include/configs/exynos5250-dt.h
> b/include/configs/exynos5250-dt.h
> >> index 16d3ab1..7308522 100644
> >> --- a/include/configs/exynos5250-dt.h
> >> +++ b/include/configs/exynos5250-dt.h
> >> @@ -206,12 +206,14 @@
> >>  #define CONFIG_ENV_OFFSET      (CONFIG_BL2_OFFSET + CONFIG_BL2_SIZE)
> >>
> >>  /* U-boot copy size from boot Media to DRAM.*/
> >> -#define BL2_START_OFFSET       (CONFIG_BL2_OFFSET/512)
> >> -#define BL2_SIZE_BLOC_COUNT    (CONFIG_BL2_SIZE/512)
> >> +#define CONFIG_BL2_BLOCK_OFFSET                (CONFIG_BL2_OFFSET/512)
> >> +#define CONFIG_BL2_SIZE_BLOCK_COUNT    (CONFIG_BL2_SIZE/512)
> >>
> >> -#define OM_STAT                                (0x1f << 1)
> >> +#define CONFIG_SPI_BOOTING
> >> +
> >> +#ifdef CONFIG_SPI_BOOTING
>
> I think this ifdef is unnecessary.
> You already know that we will use spi booting on this board.
>

As this is consolidation patch, I introduced this to solve the compilation
issue for other boards as mentioned above.

Now, the USB download boot mode is also supported on exynos5250 and it has
one more EXYNOS_COPY_USB_FNPTR_ADDR. The other boards won't have this as
well.

Let me know your thinking about handling this issue for spl_boot.c
consolidation.

With Regards,
Inder


>
> >>  #define EXYNOS_COPY_SPI_FNPTR_ADDR     0x02020058
> >> -#define SPI_FLASH_UBOOT_POS            (CONFIG_SEC_FW_SIZE +
> CONFIG_BL1_SIZE)
> >> +#endif
> >>
> >>  #define CONFIG_DOS_PARTITION
> >>
> >> diff --git a/include/configs/origen.h b/include/configs/origen.h
> >> index e179911..c4f2ec0 100644
> >> --- a/include/configs/origen.h
> >> +++ b/include/configs/origen.h
> >> @@ -139,20 +139,21 @@
> >>  /* MIU (Memory Interleaving Unit) */
> >>  #define CONFIG_MIU_2BIT_21_7_INTERLEAVED
> >>
> >> -#define CONFIG_ENV_IS_IN_MMC           1
> >> -#define CONFIG_SYS_MMC_ENV_DEV         0
> >> -#define CONFIG_ENV_SIZE                        (16 << 10)      /* 16
> KB */
> >> -#define RESERVE_BLOCK_SIZE             (512)
> >> -#define BL1_SIZE                       (16 << 10) /*16 K reserved for
> BL1*/
> >> -#define CONFIG_ENV_OFFSET              (RESERVE_BLOCK_SIZE + BL1_SIZE)
> >> -#define CONFIG_DOS_PARTITION           1
> >> +#define CONFIG_ENV_IS_IN_MMC   1
> >> +#define CONFIG_SYS_MMC_ENV_DEV 0
> >> +#define CONFIG_ENV_SIZE                (16 << 10)      /* 16 KB */
> >> +#define CONFIG_RES_BLOCK_SIZE  (512)
> >> +#define CONFIG_BL1_SIZE                (16 << 10) /*16 K reserved for
> BL1*/
> >> +#define CONFIG_ENV_OFFSET      (CONFIG_RES_BLOCK_SIZE +
> CONFIG_BL1_SIZE)
> >> +#define CONFIG_BL2_OFFSET      (CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE)
> >> +#define CONFIG_DOS_PARTITION   1
> >>
> >>  #define CONFIG_SYS_INIT_SP_ADDR        (CONFIG_SYS_LOAD_ADDR -
> GENERATED_GBL_DATA_SIZE)
> >>
> >>  /* U-boot copy size from boot Media to DRAM.*/
> >> -#define COPY_BL2_SIZE          0x80000
> >> -#define BL2_START_OFFSET       ((CONFIG_ENV_OFFSET +
> CONFIG_ENV_SIZE)/512)
> >> -#define BL2_SIZE_BLOC_COUNT    (COPY_BL2_SIZE/512)
> >> +#define CONFIG_BL2_SIZE                        0x80000
> >> +#define CONFIG_BL2_BLOCK_OFFSET                (CONFIG_BL2_OFFSET/512)
> >> +#define CONFIG_BL2_SIZE_BLOCK_COUNT    (CONFIG_BL2_SIZE/512)
> >>
> >>  /* Enable devicetree support */
> >>  #define CONFIG_OF_LIBFDT
> >> diff --git a/include/configs/smdkv310.h b/include/configs/smdkv310.h
> >> index 5e43066..8bb8de7 100644
> >> --- a/include/configs/smdkv310.h
> >> +++ b/include/configs/smdkv310.h
> >> @@ -138,20 +138,21 @@
> >>  /* MIU (Memory Interleaving Unit) */
> >>  #define CONFIG_MIU_2BIT_INTERLEAVED
> >>
> >> -#define CONFIG_ENV_IS_IN_MMC           1
> >> -#define CONFIG_SYS_MMC_ENV_DEV         0
> >> -#define CONFIG_ENV_SIZE                        (16 << 10)      /* 16
> KB */
> >> -#define RESERVE_BLOCK_SIZE             (512)
> >> -#define BL1_SIZE                       (16 << 10) /*16 K reserved for
> BL1*/
> >> -#define CONFIG_ENV_OFFSET              (RESERVE_BLOCK_SIZE + BL1_SIZE)
> >> -#define CONFIG_DOS_PARTITION           1
> >> +#define CONFIG_ENV_IS_IN_MMC   1
> >> +#define CONFIG_SYS_MMC_ENV_DEV 0
> >> +#define CONFIG_ENV_SIZE                (16 << 10) /* 16 KB */
> >> +#define CONFIG_RES_BLOCK_SIZE  (512)
> >> +#define CONFIG_BL1_SIZE                (16 << 10) /*16 K reserved for
> BL1*/
> >> +#define CONFIG_ENV_OFFSET      (CONFIG_RES_BLOCK_SIZE +
> CONFIG_BL1_SIZE)
> >> +#define CONFIG_BL2_OFFSET      (CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE)
> >> +#define CONFIG_DOS_PARTITION   1
> >>
> >>  #define CONFIG_SYS_INIT_SP_ADDR        (CONFIG_SYS_LOAD_ADDR -
> GENERATED_GBL_DATA_SIZE)
> >>
> >>  /* U-boot copy size from boot Media to DRAM.*/
> >> -#define        COPY_BL2_SIZE           0x80000
> >> -#define BL2_START_OFFSET       ((CONFIG_ENV_OFFSET +
> CONFIG_ENV_SIZE)/512)
> >> -#define BL2_SIZE_BLOC_COUNT    (COPY_BL2_SIZE/512)
> >> +#define        CONFIG_BL2_SIZE                 0x80000
> >> +#define CONFIG_BL2_BLOCK_OFFSET                (CONFIG_BL2_OFFSET/512)
> >> +#define CONFIG_BL2_SIZE_BLOCK_COUNT    (CONFIG_BL2_SIZE/512)
> >>
> >>  /* Ethernet Controllor Driver */
> >>  #ifdef CONFIG_CMD_NET
> >> --
> >> 1.7.9.5
> >>
> >
>
> This patch needs to test.
> Please help to test this patch and let me know.
>
> Thanks,
> Minkyu Kang.
>

Patch

diff --git a/arch/arm/cpu/armv7/exynos/Makefile b/arch/arm/cpu/armv7/exynos/Makefile
index b9cf921..c507608 100644
--- a/arch/arm/cpu/armv7/exynos/Makefile
+++ b/arch/arm/cpu/armv7/exynos/Makefile
@@ -24,6 +24,10 @@  LIB	= $(obj)lib$(SOC).o
 
 COBJS	+= clock.o power.o soc.o system.o pinmux.o tzpc_init.o
 
+ifdef CONFIG_SPL_BUILD
+COBJS	+= spl_boot.o
+endif
+
 SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS	:= $(addprefix $(obj),$(COBJS) $(SOBJS))
 
diff --git a/board/samsung/smdk5250/spl_boot.c b/arch/arm/cpu/armv7/exynos/spl_boot.c
similarity index 73%
rename from board/samsung/smdk5250/spl_boot.c
rename to arch/arm/cpu/armv7/exynos/spl_boot.c
index d8f3c1e..e970ff6 100644
--- a/board/samsung/smdk5250/spl_boot.c
+++ b/arch/arm/cpu/armv7/exynos/spl_boot.c
@@ -23,6 +23,8 @@ 
 #include<common.h>
 #include<config.h>
 
+#define OM_STAT	(0x1f << 1)
+
 enum boot_mode {
 	BOOT_MODE_MMC = 4,
 	BOOT_MODE_SERIAL = 20,
@@ -31,8 +33,6 @@  enum boot_mode {
 	BOOT_MODE_USB,	/* Boot using USB download */
 };
 
-	typedef u32 (*spi_copy_func_t)(u32 offset, u32 nblock, u32 dst);
-
 /*
 * Copy U-boot from mmc to RAM:
 * COPY_BL2_FNPTR_ADDR: Address in iRAM, which Contains
@@ -40,26 +40,37 @@  enum boot_mode {
 */
 void copy_uboot_to_ram(void)
 {
-	spi_copy_func_t spi_copy;
 	enum boot_mode bootmode;
-	u32 (*copy_bl2)(u32, u32, u32);
+	u32 (*copy_bl2)(u32, u32, u32) = NULL;
+	u32 offset = 0, size = 0;
 
-	bootmode = readl(EXYNOS5_POWER_BASE) & OM_STAT;
+	bootmode = readl(samsung_get_base_power()) & OM_STAT;
 
 	switch (bootmode) {
+#ifdef CONFIG_SPI_BOOTING
 	case BOOT_MODE_SERIAL:
-		spi_copy = *(spi_copy_func_t *)EXYNOS_COPY_SPI_FNPTR_ADDR;
-		spi_copy(SPI_FLASH_UBOOT_POS, CONFIG_BL2_SIZE,
-						CONFIG_SYS_TEXT_BASE);
+		offset = CONFIG_BL2_OFFSET - CONFIG_RES_BLOCK_SIZE;
+		size = CONFIG_BL2_SIZE;
+		copy_bl2 = (void *) *(u32 *)EXYNOS_COPY_SPI_FNPTR_ADDR;
 		break;
+#endif
 	case BOOT_MODE_MMC:
-		copy_bl2 = (void *) *(u32 *)COPY_BL2_FNPTR_ADDR;
-		copy_bl2(BL2_START_OFFSET, BL2_SIZE_BLOC_COUNT,
-						CONFIG_SYS_TEXT_BASE);
+		offset = CONFIG_BL2_BLOCK_OFFSET;
+		size = CONFIG_BL2_SIZE_BLOCK_COUNT;
+
+		/* Only SMDKv310 EVT0 directly jumps to BootROM copy function */
+		if (s5p_get_cpu_rev())
+			copy_bl2 = (void *) *(u32 *)COPY_BL2_FNPTR_ADDR;
+		else
+			copy_bl2 = (void *) COPY_BL2_FNPTR_ADDR;
+
 		break;
 	default:
 		break;
 	}
+
+	if (copy_bl2)
+		copy_bl2(offset, size, CONFIG_SYS_TEXT_BASE);
 }
 
 void board_init_f(unsigned long bootflag)
diff --git a/board/samsung/origen/Makefile b/board/samsung/origen/Makefile
index 3a885a5..6133b26 100644
--- a/board/samsung/origen/Makefile
+++ b/board/samsung/origen/Makefile
@@ -31,10 +31,6 @@  ifndef CONFIG_SPL_BUILD
 COBJS	+= origen.o
 endif
 
-ifdef CONFIG_SPL_BUILD
-COBJS	+= mmc_boot.o
-endif
-
 SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS	:= $(addprefix $(obj),$(COBJS) $(SOBJS))
 
diff --git a/board/samsung/origen/mmc_boot.c b/board/samsung/origen/mmc_boot.c
deleted file mode 100644
index 072f161..0000000
--- a/board/samsung/origen/mmc_boot.c
+++ /dev/null
@@ -1,58 +0,0 @@ 
-/*
- * Copyright (C) 2011 Samsung Electronics
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#include<common.h>
-#include<config.h>
-
-/*
-* Copy U-boot from mmc to RAM:
-* COPY_BL2_FNPTR_ADDR: Address in iRAM, which Contains
-* Pointer to API (Data transfer from mmc to ram)
-*/
-void copy_uboot_to_ram(void)
-{
-	u32 (*copy_bl2)(u32, u32, u32)  = (void *) *(u32 *)COPY_BL2_FNPTR_ADDR;
-
-	copy_bl2(BL2_START_OFFSET, BL2_SIZE_BLOC_COUNT, CONFIG_SYS_TEXT_BASE);
-}
-
-void board_init_f(unsigned long bootflag)
-{
-	__attribute__((noreturn)) void (*uboot)(void);
-	copy_uboot_to_ram();
-
-	/* Jump to U-Boot image */
-	uboot = (void *)CONFIG_SYS_TEXT_BASE;
-	(*uboot)();
-	/* Never returns Here */
-}
-
-/* Place Holders */
-void board_init_r(gd_t *id, ulong dest_addr)
-{
-	/* Function attribute is no-return */
-	/* This Function never executes */
-	while (1)
-		;
-}
-
-void save_boot_params(u32 r0, u32 r1, u32 r2, u32 r3) {}
diff --git a/board/samsung/smdk5250/Makefile b/board/samsung/smdk5250/Makefile
index f2c32ee..075b1a7 100644
--- a/board/samsung/smdk5250/Makefile
+++ b/board/samsung/smdk5250/Makefile
@@ -38,10 +38,6 @@  COBJS	+= smdk5250.o
 endif
 endif
 
-ifdef CONFIG_SPL_BUILD
-COBJS	+= spl_boot.o
-endif
-
 SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS	:= $(addprefix $(obj),$(COBJS) $(SOBJS))
 
diff --git a/board/samsung/smdkv310/Makefile b/board/samsung/smdkv310/Makefile
index 56e0c16..e79045d 100644
--- a/board/samsung/smdkv310/Makefile
+++ b/board/samsung/smdkv310/Makefile
@@ -30,10 +30,6 @@  ifndef CONFIG_SPL_BUILD
 COBJS	+= smdkv310.o
 endif
 
-ifdef CONFIG_SPL_BUILD
-COBJS	+= mmc_boot.o
-endif
-
 SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS	:= $(addprefix $(obj),$(COBJS) $(SOBJS))
 
diff --git a/board/samsung/smdkv310/mmc_boot.c b/board/samsung/smdkv310/mmc_boot.c
deleted file mode 100644
index d3fc18d..0000000
--- a/board/samsung/smdkv310/mmc_boot.c
+++ /dev/null
@@ -1,60 +0,0 @@ 
-/*
- * Copyright (C) 2011 Samsung Electronics
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#include<common.h>
-#include<config.h>
-
-/*
-* Copy U-boot from mmc to RAM:
-* COPY_BL2_FNPTR_ADDR: Address in iRAM, which Contains
-* API (Data transfer from mmc to ram)
-*/
-void copy_uboot_to_ram(void)
-{
-	u32 (*copy_bl2)(u32, u32, u32) = (void *)COPY_BL2_FNPTR_ADDR;
-
-	copy_bl2(BL2_START_OFFSET, BL2_SIZE_BLOC_COUNT, CONFIG_SYS_TEXT_BASE);
-}
-
-void board_init_f(unsigned long bootflag)
-{
-	__attribute__((noreturn)) void (*uboot)(void);
-	copy_uboot_to_ram();
-
-	/* Jump to U-Boot image */
-	uboot = (void *)CONFIG_SYS_TEXT_BASE;
-	(*uboot)();
-	/* Never returns Here */
-}
-
-/* Place Holders */
-void board_init_r(gd_t *id, ulong dest_addr)
-{
-	/*Function attribute is no-return*/
-	/*This Function never executes*/
-	while (1)
-		;
-}
-
-void save_boot_params(u32 r0, u32 r1, u32 r2, u32 r3)
-{
-}
diff --git a/include/configs/exynos5250-dt.h b/include/configs/exynos5250-dt.h
index 16d3ab1..7308522 100644
--- a/include/configs/exynos5250-dt.h
+++ b/include/configs/exynos5250-dt.h
@@ -206,12 +206,14 @@ 
 #define CONFIG_ENV_OFFSET	(CONFIG_BL2_OFFSET + CONFIG_BL2_SIZE)
 
 /* U-boot copy size from boot Media to DRAM.*/
-#define BL2_START_OFFSET	(CONFIG_BL2_OFFSET/512)
-#define BL2_SIZE_BLOC_COUNT	(CONFIG_BL2_SIZE/512)
+#define CONFIG_BL2_BLOCK_OFFSET		(CONFIG_BL2_OFFSET/512)
+#define CONFIG_BL2_SIZE_BLOCK_COUNT	(CONFIG_BL2_SIZE/512)
 
-#define OM_STAT				(0x1f << 1)
+#define CONFIG_SPI_BOOTING
+
+#ifdef CONFIG_SPI_BOOTING
 #define EXYNOS_COPY_SPI_FNPTR_ADDR	0x02020058
-#define SPI_FLASH_UBOOT_POS		(CONFIG_SEC_FW_SIZE + CONFIG_BL1_SIZE)
+#endif
 
 #define CONFIG_DOS_PARTITION
 
diff --git a/include/configs/origen.h b/include/configs/origen.h
index e179911..c4f2ec0 100644
--- a/include/configs/origen.h
+++ b/include/configs/origen.h
@@ -139,20 +139,21 @@ 
 /* MIU (Memory Interleaving Unit) */
 #define CONFIG_MIU_2BIT_21_7_INTERLEAVED
 
-#define CONFIG_ENV_IS_IN_MMC		1
-#define CONFIG_SYS_MMC_ENV_DEV		0
-#define CONFIG_ENV_SIZE			(16 << 10)	/* 16 KB */
-#define RESERVE_BLOCK_SIZE		(512)
-#define BL1_SIZE			(16 << 10) /*16 K reserved for BL1*/
-#define CONFIG_ENV_OFFSET		(RESERVE_BLOCK_SIZE + BL1_SIZE)
-#define CONFIG_DOS_PARTITION		1
+#define CONFIG_ENV_IS_IN_MMC	1
+#define CONFIG_SYS_MMC_ENV_DEV	0
+#define CONFIG_ENV_SIZE		(16 << 10)	/* 16 KB */
+#define CONFIG_RES_BLOCK_SIZE	(512)
+#define CONFIG_BL1_SIZE		(16 << 10) /*16 K reserved for BL1*/
+#define CONFIG_ENV_OFFSET	(CONFIG_RES_BLOCK_SIZE + CONFIG_BL1_SIZE)
+#define CONFIG_BL2_OFFSET	(CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE)
+#define CONFIG_DOS_PARTITION	1
 
 #define CONFIG_SYS_INIT_SP_ADDR	(CONFIG_SYS_LOAD_ADDR - GENERATED_GBL_DATA_SIZE)
 
 /* U-boot copy size from boot Media to DRAM.*/
-#define COPY_BL2_SIZE		0x80000
-#define BL2_START_OFFSET	((CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE)/512)
-#define BL2_SIZE_BLOC_COUNT	(COPY_BL2_SIZE/512)
+#define CONFIG_BL2_SIZE			0x80000
+#define CONFIG_BL2_BLOCK_OFFSET		(CONFIG_BL2_OFFSET/512)
+#define CONFIG_BL2_SIZE_BLOCK_COUNT	(CONFIG_BL2_SIZE/512)
 
 /* Enable devicetree support */
 #define CONFIG_OF_LIBFDT
diff --git a/include/configs/smdkv310.h b/include/configs/smdkv310.h
index 5e43066..8bb8de7 100644
--- a/include/configs/smdkv310.h
+++ b/include/configs/smdkv310.h
@@ -138,20 +138,21 @@ 
 /* MIU (Memory Interleaving Unit) */
 #define CONFIG_MIU_2BIT_INTERLEAVED
 
-#define CONFIG_ENV_IS_IN_MMC		1
-#define CONFIG_SYS_MMC_ENV_DEV		0
-#define CONFIG_ENV_SIZE			(16 << 10)	/* 16 KB */
-#define RESERVE_BLOCK_SIZE		(512)
-#define BL1_SIZE			(16 << 10) /*16 K reserved for BL1*/
-#define CONFIG_ENV_OFFSET		(RESERVE_BLOCK_SIZE + BL1_SIZE)
-#define CONFIG_DOS_PARTITION		1
+#define CONFIG_ENV_IS_IN_MMC	1
+#define CONFIG_SYS_MMC_ENV_DEV	0
+#define CONFIG_ENV_SIZE		(16 << 10) /* 16 KB */
+#define CONFIG_RES_BLOCK_SIZE	(512)
+#define CONFIG_BL1_SIZE		(16 << 10) /*16 K reserved for BL1*/
+#define CONFIG_ENV_OFFSET	(CONFIG_RES_BLOCK_SIZE + CONFIG_BL1_SIZE)
+#define CONFIG_BL2_OFFSET	(CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE)
+#define CONFIG_DOS_PARTITION	1
 
 #define CONFIG_SYS_INIT_SP_ADDR	(CONFIG_SYS_LOAD_ADDR - GENERATED_GBL_DATA_SIZE)
 
 /* U-boot copy size from boot Media to DRAM.*/
-#define	COPY_BL2_SIZE		0x80000
-#define BL2_START_OFFSET	((CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE)/512)
-#define BL2_SIZE_BLOC_COUNT	(COPY_BL2_SIZE/512)
+#define	CONFIG_BL2_SIZE			0x80000
+#define CONFIG_BL2_BLOCK_OFFSET		(CONFIG_BL2_OFFSET/512)
+#define CONFIG_BL2_SIZE_BLOCK_COUNT	(CONFIG_BL2_SIZE/512)
 
 /* Ethernet Controllor Driver */
 #ifdef CONFIG_CMD_NET