imx8mn/imx8mp: override env_get_offset and env_get_location
authorYe Li <ye.li@nxp.com>
Mon, 15 Jul 2019 08:16:46 +0000 (01:16 -0700)
committerPeng Fan <peng.fan@nxp.com>
Tue, 14 Jul 2020 07:23:47 +0000 (15:23 +0800)
To use one defconfig for all boot device, we have to runtime set
env offset and return env medium according to the boot device.
This patch overrides the env_get_offset and env_get_location to
implement the feature.

Signed-off-by: Ye Li <ye.li@nxp.com>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
arch/arm/mach-imx/imx8m/soc.c

index f74a343..9517a7c 100644 (file)
@@ -20,6 +20,8 @@
 #include <asm/armv8/mmu.h>
 #include <dm/uclass.h>
 #include <efi_loader.h>
+#include <env.h>
+#include <env_internal.h>
 #include <errno.h>
 #include <fdt_support.h>
 #include <fsl_wdog.h>
@@ -616,3 +618,60 @@ void do_error(struct pt_regs *pt_regs, unsigned int esr)
 }
 #endif
 #endif
+
+#if defined(CONFIG_IMX8MN) || defined(CONFIG_IMX8MP)
+enum env_location env_get_location(enum env_operation op, int prio)
+{
+       enum boot_device dev = get_boot_device();
+       enum env_location env_loc = ENVL_UNKNOWN;
+
+       if (prio)
+               return env_loc;
+
+       switch (dev) {
+#ifdef CONFIG_ENV_IS_IN_SPI_FLASH
+       case QSPI_BOOT:
+               env_loc = ENVL_SPI_FLASH;
+               break;
+#endif
+#ifdef CONFIG_ENV_IS_IN_NAND
+       case NAND_BOOT:
+               env_loc = ENVL_NAND;
+               break;
+#endif
+#ifdef CONFIG_ENV_IS_IN_MMC
+       case SD1_BOOT:
+       case SD2_BOOT:
+       case SD3_BOOT:
+       case MMC1_BOOT:
+       case MMC2_BOOT:
+       case MMC3_BOOT:
+               env_loc =  ENVL_MMC;
+               break;
+#endif
+       default:
+#if defined(CONFIG_ENV_IS_NOWHERE)
+               env_loc = ENVL_NOWHERE;
+#endif
+               break;
+       }
+
+       return env_loc;
+}
+
+#ifndef ENV_IS_EMBEDDED
+long long env_get_offset(long long defautl_offset)
+{
+       enum boot_device dev = get_boot_device();
+
+       switch (dev) {
+       case NAND_BOOT:
+               return (60 << 20);  /* 60MB offset for NAND */
+       default:
+               break;
+       }
+
+       return defautl_offset;
+}
+#endif
+#endif