Message ID | 1350385126-19312-7-git-send-email-hatim.rv@samsung.com |
---|---|
State | Superseded |
Headers | show |
Hi Hatim, On Tue, Oct 16, 2012 at 3:58 AM, Hatim Ali <hatim.rv@samsung.com> wrote: > From: Rajeshwari Shinde <rajeshwari.s@samsung.com> > > This patch enables SPI Booting for EXYNOS5 > > Signed-off-by: Rajeshwari Shinde <rajeshwari.s@samsung.com> > --- > > Changes since v4: > No Change > > board/samsung/smdk5250/Makefile | 2 +- > board/samsung/smdk5250/mmc_boot.c | 58 ------------------------- > board/samsung/smdk5250/spl_boot.c | 85 +++++++++++++++++++++++++++++++++++++ > include/configs/smdk5250.h | 5 ++ > 4 files changed, 91 insertions(+), 59 deletions(-) > delete mode 100644 board/samsung/smdk5250/mmc_boot.c > create mode 100644 board/samsung/smdk5250/spl_boot.c > > diff --git a/board/samsung/smdk5250/Makefile b/board/samsung/smdk5250/Makefile > index 1474fa8..47c6a5a 100644 > --- a/board/samsung/smdk5250/Makefile > +++ b/board/samsung/smdk5250/Makefile > @@ -36,7 +36,7 @@ COBJS += smdk5250.o > endif > > ifdef CONFIG_SPL_BUILD > -COBJS += mmc_boot.o > +COBJS += spl_boot.o > endif > > SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c) > diff --git a/board/samsung/smdk5250/mmc_boot.c b/board/samsung/smdk5250/mmc_boot.c > deleted file mode 100644 > index 449a919..0000000 > --- a/board/samsung/smdk5250/mmc_boot.c > +++ /dev/null > @@ -1,58 +0,0 @@ > -/* > - * Copyright (C) 2012 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/spl_boot.c b/board/samsung/smdk5250/spl_boot.c > new file mode 100644 > index 0000000..d8f3c1e > --- /dev/null > +++ b/board/samsung/smdk5250/spl_boot.c > @@ -0,0 +1,85 @@ > +/* > + * Copyright (C) 2012 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> > + > +enum boot_mode { > + BOOT_MODE_MMC = 4, > + BOOT_MODE_SERIAL = 20, > + /* Boot based on Operating Mode pin settings */ > + BOOT_MODE_OM = 32, > + 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 > +* Pointer to API (Data transfer from mmc to ram) > +*/ > +void copy_uboot_to_ram(void) > +{ > + spi_copy_func_t spi_copy; > + enum boot_mode bootmode; > + u32 (*copy_bl2)(u32, u32, u32); > + > + bootmode = readl(EXYNOS5_POWER_BASE) & OM_STAT; > + > + switch (bootmode) { > + 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); > + break; > + 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); > + break; > + default: > + break; > + } > +} > + > +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/smdk5250.h b/include/configs/smdk5250.h > index a9334cf..1b9bf44 100644 > --- a/include/configs/smdk5250.h > +++ b/include/configs/smdk5250.h > @@ -189,6 +189,11 @@ > /* 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 OM_STAT (0x1f << 1) > +#define EXYNOS_COPY_SPI_FNPTR_ADDR 0x02020058 > +#define SPI_FLASH_UBOOT_POS (CONFIG_SEC_FW_SIZE + CONFIG_BL1_SIZE) > + These header file white space changes seem unrelated. > #define CONFIG_DOS_PARTITION > > #define CONFIG_IRAM_STACK 0x02050000 > -- > 1.7.2.3 > Regards, Simon
diff --git a/board/samsung/smdk5250/Makefile b/board/samsung/smdk5250/Makefile index 1474fa8..47c6a5a 100644 --- a/board/samsung/smdk5250/Makefile +++ b/board/samsung/smdk5250/Makefile @@ -36,7 +36,7 @@ COBJS += smdk5250.o endif ifdef CONFIG_SPL_BUILD -COBJS += mmc_boot.o +COBJS += spl_boot.o endif SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c) diff --git a/board/samsung/smdk5250/mmc_boot.c b/board/samsung/smdk5250/mmc_boot.c deleted file mode 100644 index 449a919..0000000 --- a/board/samsung/smdk5250/mmc_boot.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (C) 2012 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/spl_boot.c b/board/samsung/smdk5250/spl_boot.c new file mode 100644 index 0000000..d8f3c1e --- /dev/null +++ b/board/samsung/smdk5250/spl_boot.c @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2012 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> + +enum boot_mode { + BOOT_MODE_MMC = 4, + BOOT_MODE_SERIAL = 20, + /* Boot based on Operating Mode pin settings */ + BOOT_MODE_OM = 32, + 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 +* Pointer to API (Data transfer from mmc to ram) +*/ +void copy_uboot_to_ram(void) +{ + spi_copy_func_t spi_copy; + enum boot_mode bootmode; + u32 (*copy_bl2)(u32, u32, u32); + + bootmode = readl(EXYNOS5_POWER_BASE) & OM_STAT; + + switch (bootmode) { + 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); + break; + 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); + break; + default: + break; + } +} + +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/smdk5250.h b/include/configs/smdk5250.h index a9334cf..1b9bf44 100644 --- a/include/configs/smdk5250.h +++ b/include/configs/smdk5250.h @@ -189,6 +189,11 @@ /* 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 OM_STAT (0x1f << 1) +#define EXYNOS_COPY_SPI_FNPTR_ADDR 0x02020058 +#define SPI_FLASH_UBOOT_POS (CONFIG_SEC_FW_SIZE + CONFIG_BL1_SIZE) + #define CONFIG_DOS_PARTITION #define CONFIG_IRAM_STACK 0x02050000