From mboxrd@z Thu Jan 1 00:00:00 1970 From: Minkyu Kang Date: Tue, 04 Jun 2013 16:26:45 +0900 Subject: [U-Boot] [PATCH] spl: exynos: make spl_boot common for all exynos based platforms In-Reply-To: References: <1363423594-15077-1-git-send-email-inderpal.singh@linaro.org> Message-ID: <51AD96B5.70107@samsung.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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 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 >> --- >> 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 at 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 >> #include >> >> +#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 >> -#include >> - >> -/* >> -* 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 >> -#include >> - >> -/* >> -* 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.