stm32mp1: activate SET_DFU_ALT_INFO
[platform/kernel/u-boot.git] / board / st / stm32mp1 / stm32mp1.c
index 126af30..a8f8cca 100644 (file)
@@ -14,6 +14,7 @@
 #include <generic-phy.h>
 #include <i2c.h>
 #include <led.h>
+#include <memalign.h>
 #include <misc.h>
 #include <mtd.h>
 #include <mtd_node.h>
@@ -920,6 +921,56 @@ int ft_board_setup(void *blob, bd_t *bd)
 }
 #endif
 
+#ifdef CONFIG_SET_DFU_ALT_INFO
+#define DFU_ALT_BUF_LEN SZ_1K
+
+static void board_get_alt_info(const char *dev, char *buff)
+{
+       char var_name[32] = "dfu_alt_info_";
+       int ret;
+
+       ALLOC_CACHE_ALIGN_BUFFER(char, tmp_alt, DFU_ALT_BUF_LEN);
+
+       /* name of env variable to read = dfu_alt_info_<dev> */
+       strcat(var_name, dev);
+       ret = env_get_f(var_name, tmp_alt, DFU_ALT_BUF_LEN);
+       if (ret) {
+               if (buff[0] != '\0')
+                       strcat(buff, "&");
+               strncat(buff, tmp_alt, DFU_ALT_BUF_LEN);
+       }
+}
+
+void set_dfu_alt_info(char *interface, char *devstr)
+{
+       struct udevice *dev;
+
+       ALLOC_CACHE_ALIGN_BUFFER(char, buf, DFU_ALT_BUF_LEN);
+
+       if (env_get("dfu_alt_info"))
+               return;
+
+       memset(buf, 0, sizeof(buf));
+
+       board_get_alt_info("ram", buf);
+
+       if (!uclass_get_device(UCLASS_MMC, 0, &dev))
+               board_get_alt_info("mmc0", buf);
+
+       if (!uclass_get_device(UCLASS_MMC, 1, &dev))
+               board_get_alt_info("mmc1", buf);
+
+       if (!uclass_get_device(UCLASS_SPI_FLASH, 0, &dev))
+               board_get_alt_info("nor0", buf);
+
+       if (!uclass_get_device(UCLASS_MTD, 0, &dev))
+               board_get_alt_info("nand0", buf);
+
+       env_set("dfu_alt_info", buf);
+       puts("DFU alt info setting: done\n");
+}
+#endif
+
 static void board_copro_image_process(ulong fw_image, size_t fw_size)
 {
        int ret, id = 0; /* Copro id fixed to 0 as only one coproc on mp1 */