ARM: mach-k3: sysfw-loader: Use SPI memmapped addr when loading SYSFW

Since ROM configures OSPI controller to be in memory mapped mode in OSPI
boot, R5 SPL can directly pass the memory mapped pointer to ROM. With
this ROM can directly pull the SYSFW image from OSPI.

Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com>
Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>
This commit is contained in:
Lokesh Vutla 2020-02-04 11:09:50 +05:30
parent 8915a40da4
commit 7d0866b9be
2 changed files with 38 additions and 1 deletions

View file

@ -126,6 +126,14 @@ config K3_SYSFW_IMAGE_SIZE_MAX
tree blob. Keep it as tight as possible, as this directly affects the
overall SPL memory footprint.
config K3_SYSFW_IMAGE_SPI_OFFS
hex "SPI offset of SYSFW firmware and configuration blob"
depends on K3_LOAD_SYSFW
default 0x6C0000
help
Offset of the combined System Firmware and configuration image tree
blob to be loaded when booting from a SPI flash memory.
config SYS_K3_SPL_ATF
bool "Start Cortex-A from SPL"
depends on SPL && CPU_V7R

View file

@ -14,6 +14,8 @@
#include <g_dnl.h>
#include <usb.h>
#include <dfu.h>
#include <dm/uclass-internal.h>
#include <spi_flash.h>
#include <asm/arch/sys_proto.h>
#include "common.h"
@ -197,12 +199,32 @@ exit:
}
#endif
#if CONFIG_IS_ENABLED(SPI_LOAD)
static void *k3_sysfw_get_spi_addr(void)
{
struct udevice *dev;
fdt_addr_t addr;
int ret;
ret = uclass_find_device_by_seq(UCLASS_SPI, CONFIG_SF_DEFAULT_BUS,
true, &dev);
if (ret)
return NULL;
addr = dev_read_addr_index(dev, 1);
if (addr == FDT_ADDR_T_NONE)
return NULL;
return (void *)(addr + CONFIG_K3_SYSFW_IMAGE_SPI_OFFS);
}
#endif
void k3_sysfw_loader(void (*config_pm_done_callback)(void))
{
struct spl_image_info spl_image = { 0 };
struct spl_boot_device bootdev = { 0 };
struct ti_sci_handle *ti_sci;
int ret;
int ret = 0;
/* Reserve a block of aligned memory for loading the SYSFW image */
sysfw_load_address = memalign(ARCH_DMA_MINALIGN,
@ -243,6 +265,13 @@ void k3_sysfw_loader(void (*config_pm_done_callback)(void))
#endif
break;
#endif
#if CONFIG_IS_ENABLED(SPI_LOAD)
case BOOT_DEVICE_SPI:
sysfw_load_address = k3_sysfw_get_spi_addr();
if (!sysfw_load_address)
ret = -ENODEV;
break;
#endif
#if CONFIG_IS_ENABLED(YMODEM_SUPPORT)
case BOOT_DEVICE_UART:
#ifdef CONFIG_K3_EARLY_CONS