mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 23:24:38 +00:00
ARM: mach-k3: sysfw-loader: Copy sysfw.itb to OCRAM in OSPI/SPI bootmode
In case of xSPI bootmode OSPI flash is in DDR mode and needs to be accessed in multiple of 16bit accesses Hence we cannot parse sysfw.itb FIT image directly on OSPI flash via MMIO window. So, copy the image to internal on-chip RAM before parsing the image. Moreover, board cfg data maybe modified by ROM/TIFS in case of HS platform and thus cannot reside in OSPI/xSPI and needs to be copied over to internal OCRAM. This unblocks OSPI/xSPI boot on HS platforms Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com> Reviewed-by: Dave Gerlach <d-gerlach@ti.com> Tested-by: Keerthy <j-keerthy@ti.com> Acked-by: Pratyush Yadav <p.yadav@ti.com>
This commit is contained in:
parent
67c8678346
commit
584216315d
1 changed files with 16 additions and 2 deletions
|
@ -22,6 +22,7 @@
|
||||||
#include <dm/uclass-internal.h>
|
#include <dm/uclass-internal.h>
|
||||||
#include <spi_flash.h>
|
#include <spi_flash.h>
|
||||||
|
|
||||||
|
#include <asm/io.h>
|
||||||
#include <asm/arch/sys_proto.h>
|
#include <asm/arch/sys_proto.h>
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
|
@ -335,6 +336,14 @@ static void *k3_sysfw_get_spi_addr(void)
|
||||||
|
|
||||||
return (void *)(addr + CONFIG_K3_SYSFW_IMAGE_SPI_OFFS);
|
return (void *)(addr + CONFIG_K3_SYSFW_IMAGE_SPI_OFFS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void k3_sysfw_spi_copy(u32 *dst, u32 *src, size_t len)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
for (i = 0; i < len / sizeof(*dst); i++)
|
||||||
|
*dst++ = *src++;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void k3_sysfw_loader(bool rom_loaded_sysfw,
|
void k3_sysfw_loader(bool rom_loaded_sysfw,
|
||||||
|
@ -344,6 +353,9 @@ void k3_sysfw_loader(bool rom_loaded_sysfw,
|
||||||
struct spl_image_info spl_image = { 0 };
|
struct spl_image_info spl_image = { 0 };
|
||||||
struct spl_boot_device bootdev = { 0 };
|
struct spl_boot_device bootdev = { 0 };
|
||||||
struct ti_sci_handle *ti_sci;
|
struct ti_sci_handle *ti_sci;
|
||||||
|
#if CONFIG_IS_ENABLED(SPI_LOAD)
|
||||||
|
void *sysfw_spi_base;
|
||||||
|
#endif
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
if (rom_loaded_sysfw) {
|
if (rom_loaded_sysfw) {
|
||||||
|
@ -394,9 +406,11 @@ void k3_sysfw_loader(bool rom_loaded_sysfw,
|
||||||
#endif
|
#endif
|
||||||
#if CONFIG_IS_ENABLED(SPI_LOAD)
|
#if CONFIG_IS_ENABLED(SPI_LOAD)
|
||||||
case BOOT_DEVICE_SPI:
|
case BOOT_DEVICE_SPI:
|
||||||
sysfw_load_address = k3_sysfw_get_spi_addr();
|
sysfw_spi_base = k3_sysfw_get_spi_addr();
|
||||||
if (!sysfw_load_address)
|
if (!sysfw_spi_base)
|
||||||
ret = -ENODEV;
|
ret = -ENODEV;
|
||||||
|
k3_sysfw_spi_copy(sysfw_load_address, sysfw_spi_base,
|
||||||
|
CONFIG_K3_SYSFW_IMAGE_SIZE_MAX);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#if CONFIG_IS_ENABLED(YMODEM_SUPPORT)
|
#if CONFIG_IS_ENABLED(YMODEM_SUPPORT)
|
||||||
|
|
Loading…
Reference in a new issue