summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorMarco Felsch <m.felsch@pengutronix.de>2023-03-13 14:41:58 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2023-04-04 09:02:28 +0200
commit6e0cb133bee8d16ecb7d47222261f3a90209c472 (patch)
treeb17579136c31af470dfdfd34f10d5cc5cd082773 /arch
parenta24517b3421a8023ffb78a464216f7ad871de13a (diff)
downloadbarebox-6e0cb133bee8d16ecb7d47222261f3a90209c472.tar.gz
ARM: i.MX: bbu: add FlexSPI update handler
This adds the update handler support to flash barebox flexspi compatible images to the QSPI. Signed-off-by: Marco Felsch <m.felsch@pengutronix.de> Link: https://lore.barebox.org/20230228-v2023-02-0-topic-flexspi-v2-19-3d33126d2434@pengutronix.de Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/mach-imx/imx-bbu-internal.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/arch/arm/mach-imx/imx-bbu-internal.c b/arch/arm/mach-imx/imx-bbu-internal.c
index 7c13437b61..8cdaab5c16 100644
--- a/arch/arm/mach-imx/imx-bbu-internal.c
+++ b/arch/arm/mach-imx/imx-bbu-internal.c
@@ -19,6 +19,7 @@
#include <environment.h>
#include <mach/imx/bbu.h>
#include <mach/imx/generic.h>
+#include <mach/imx/imx-header.h>
#include <libfile.h>
struct imx_internal_bbu_handler {
@@ -655,3 +656,34 @@ int imx_bbu_external_nor_register_handler(const char *name,
return __register_handler(imx_handler);
}
+
+static unsigned long imx_bbu_filetype_offset_flexspi(void)
+{
+ unsigned int sd_flash_header_gap = SZ_32K;
+
+ if (cpu_is_mx8mm())
+ return sd_flash_header_gap;
+
+ return sd_flash_header_gap + SZ_1K;
+}
+
+static int
+imx_bbu_internal_flexspi_nor_register_handler(const char *name,
+ const char *devicefile,
+ unsigned long flags)
+{
+ struct imx_internal_bbu_handler *imx_handler;
+
+ flags |= IMX_BBU_FLAG_ERASE | IMX_BBU_FLAG_PARTITION_STARTS_AT_HEADER;
+ imx_handler = __init_handler(name, devicefile, flags);
+ imx_handler->flash_header_offset = SZ_32K;
+ imx_handler->expected_type = filetype_nxp_fspi_image;
+ imx_handler->filetype_offset = imx_bbu_filetype_offset_flexspi();
+
+ return __register_handler(imx_handler);
+}
+
+int imx8m_bbu_internal_flexspi_nor_register_handler(const char *name,
+ const char *devicefile,
+ unsigned long flags)
+ __alias(imx_bbu_internal_flexspi_nor_register_handler);