sf: Add spi_boot() to allow booting from SPI flash in an SPL
Signed-off-by: Christian Riesch <christian.riesch@omicron.at> Cc: Heiko Schocher <hs@denx.de> Cc: Mike Frysinger <vapier@gentoo.org> Cc: Scott Wood <scottwood@freescale.com> Acked-by: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
parent
7029a24f2c
commit
32b1127397
|
@ -65,3 +65,4 @@ CONFIG_SPL_NAND_SUPPORT (drivers/mtd/nand/libnand.o)
|
|||
CONFIG_SPL_DMA_SUPPORT (drivers/dma/libdma.o)
|
||||
CONFIG_SPL_POST_MEM_SUPPORT (post/drivers/memory.o)
|
||||
CONFIG_SPL_NAND_LOAD (drivers/mtd/nand/nand_spl_load.o)
|
||||
CONFIG_SPL_SPI_LOAD (drivers/mtd/spi/spi_spl_load.o)
|
||||
|
|
|
@ -25,6 +25,10 @@ include $(TOPDIR)/config.mk
|
|||
|
||||
LIB := $(obj)libspi_flash.o
|
||||
|
||||
ifdef CONFIG_SPL_BUILD
|
||||
COBJS-$(CONFIG_SPL_SPI_LOAD) += spi_spl_load.o
|
||||
endif
|
||||
|
||||
COBJS-$(CONFIG_SPI_FLASH) += spi_flash.o
|
||||
COBJS-$(CONFIG_SPI_FLASH_ATMEL) += atmel.o
|
||||
COBJS-$(CONFIG_SPI_FLASH_EON) += eon.o
|
||||
|
|
|
@ -0,0 +1,58 @@
|
|||
/*
|
||||
* Copyright (C) 2011 OMICRON electronics GmbH
|
||||
*
|
||||
* based on drivers/mtd/nand/nand_spl_load.c
|
||||
*
|
||||
* Copyright (C) 2011
|
||||
* Heiko Schocher, DENX Software Engineering, hs@denx.de.
|
||||
*
|
||||
* 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 <spi_flash.h>
|
||||
|
||||
/*
|
||||
* The main entry for SPI booting. It's necessary that SDRAM is already
|
||||
* configured and available since this code loads the main U-Boot image
|
||||
* from SPI into SDRAM and starts it from there.
|
||||
*/
|
||||
void spi_boot(void)
|
||||
{
|
||||
struct spi_flash *flash;
|
||||
void (*uboot)(void) __noreturn;
|
||||
|
||||
/*
|
||||
* Load U-Boot image from SPI flash into RAM
|
||||
*/
|
||||
|
||||
flash = spi_flash_probe(CONFIG_SPL_SPI_BUS, CONFIG_SPL_SPI_CS,
|
||||
CONFIG_SF_DEFAULT_SPEED, SPI_MODE_3);
|
||||
if (!flash) {
|
||||
puts("failed.\n");
|
||||
hang();
|
||||
}
|
||||
|
||||
spi_flash_read(flash, CONFIG_SYS_SPI_U_BOOT_OFFS,
|
||||
CONFIG_SYS_SPI_U_BOOT_SIZE,
|
||||
(void *) CONFIG_SYS_TEXT_BASE);
|
||||
|
||||
/*
|
||||
* Jump to U-Boot image
|
||||
*/
|
||||
uboot = (void *) CONFIG_SYS_TEXT_BASE;
|
||||
(*uboot)();
|
||||
}
|
|
@ -25,6 +25,7 @@
|
|||
|
||||
#include <spi.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/compiler.h>
|
||||
|
||||
struct spi_flash {
|
||||
struct spi_slave *spi;
|
||||
|
@ -68,4 +69,6 @@ static inline int spi_flash_erase(struct spi_flash *flash, u32 offset,
|
|||
return flash->erase(flash, offset, len);
|
||||
}
|
||||
|
||||
void spi_boot(void) __noreturn;
|
||||
|
||||
#endif /* _SPI_FLASH_H_ */
|
||||
|
|
Loading…
Reference in New Issue