mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-08 19:11:53 +00:00
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
4 changed files with 66 additions and 0 deletions
|
@ -65,3 +65,4 @@ CONFIG_SPL_NAND_SUPPORT (drivers/mtd/nand/libnand.o)
|
||||||
CONFIG_SPL_DMA_SUPPORT (drivers/dma/libdma.o)
|
CONFIG_SPL_DMA_SUPPORT (drivers/dma/libdma.o)
|
||||||
CONFIG_SPL_POST_MEM_SUPPORT (post/drivers/memory.o)
|
CONFIG_SPL_POST_MEM_SUPPORT (post/drivers/memory.o)
|
||||||
CONFIG_SPL_NAND_LOAD (drivers/mtd/nand/nand_spl_load.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
|
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) += spi_flash.o
|
||||||
COBJS-$(CONFIG_SPI_FLASH_ATMEL) += atmel.o
|
COBJS-$(CONFIG_SPI_FLASH_ATMEL) += atmel.o
|
||||||
COBJS-$(CONFIG_SPI_FLASH_EON) += eon.o
|
COBJS-$(CONFIG_SPI_FLASH_EON) += eon.o
|
||||||
|
|
58
drivers/mtd/spi/spi_spl_load.c
Normal file
58
drivers/mtd/spi/spi_spl_load.c
Normal file
|
@ -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 <spi.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
#include <linux/compiler.h>
|
||||||
|
|
||||||
struct spi_flash {
|
struct spi_flash {
|
||||||
struct spi_slave *spi;
|
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);
|
return flash->erase(flash, offset, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void spi_boot(void) __noreturn;
|
||||||
|
|
||||||
#endif /* _SPI_FLASH_H_ */
|
#endif /* _SPI_FLASH_H_ */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue