diff options
Diffstat (limited to 'board/st/common/stm32mp_dfu.c')
-rw-r--r-- | board/st/common/stm32mp_dfu.c | 103 |
1 files changed, 5 insertions, 98 deletions
diff --git a/board/st/common/stm32mp_dfu.c b/board/st/common/stm32mp_dfu.c index 1cf4a3d5fa..a8eb8d5cae 100644 --- a/board/st/common/stm32mp_dfu.c +++ b/board/st/common/stm32mp_dfu.c @@ -14,6 +14,7 @@ #include <mtd.h> #include <mtd_node.h> #include <asm/arch/stm32prog.h> +#include <linux/printk.h> #define DFU_ALT_BUF_LEN SZ_1K @@ -147,108 +148,14 @@ void set_dfu_alt_info(char *interface, char *devstr) board_get_alt_info_mtd(mtd, buf); } - if (IS_ENABLED(CONFIG_DFU_VIRT) && - IS_ENABLED(CMD_STM32PROG_USB)) { - strncat(buf, "&virt 0=OTP", DFU_ALT_BUF_LEN); + if (IS_ENABLED(CONFIG_DFU_VIRT)) { + /* virtual device id 0 is aligned with stm32mp_dfu_virt.c */ + strlcat(buf, "&virt 0=OTP", DFU_ALT_BUF_LEN); if (IS_ENABLED(CONFIG_PMIC_STPMIC1)) - strncat(buf, "&virt 1=PMIC", DFU_ALT_BUF_LEN); + strlcat(buf, "&virt 1=PMIC", DFU_ALT_BUF_LEN); } env_set("dfu_alt_info", buf); puts("DFU alt info setting: done\n"); } - -#if CONFIG_IS_ENABLED(DFU_VIRT) -#include <dfu.h> -#include <power/stpmic1.h> - -static int dfu_otp_read(u64 offset, u8 *buffer, long *size) -{ - struct udevice *dev; - int ret; - - ret = uclass_get_device_by_driver(UCLASS_MISC, - DM_DRIVER_GET(stm32mp_bsec), - &dev); - if (ret) - return ret; - - ret = misc_read(dev, offset + STM32_BSEC_OTP_OFFSET, buffer, *size); - if (ret >= 0) { - *size = ret; - ret = 0; - } - - return 0; -} - -static int dfu_pmic_read(u64 offset, u8 *buffer, long *size) -{ - int ret; -#ifdef CONFIG_PMIC_STPMIC1 - struct udevice *dev; - - ret = uclass_get_device_by_driver(UCLASS_MISC, - DM_DRIVER_GET(stpmic1_nvm), - &dev); - if (ret) - return ret; - - ret = misc_read(dev, 0xF8 + offset, buffer, *size); - if (ret >= 0) { - *size = ret; - ret = 0; - } - if (ret == -EACCES) { - *size = 0; - ret = 0; - } -#else - log_err("PMIC update not supported"); - ret = -EOPNOTSUPP; -#endif - - return ret; -} - -int dfu_read_medium_virt(struct dfu_entity *dfu, u64 offset, - void *buf, long *len) -{ - switch (dfu->data.virt.dev_num) { - case 0x0: - return dfu_otp_read(offset, buf, len); - case 0x1: - return dfu_pmic_read(offset, buf, len); - } - - if (IS_ENABLED(CONFIG_CMD_STM32PROG_USB) && - dfu->data.virt.dev_num >= STM32PROG_VIRT_FIRST_DEV_NUM) - return stm32prog_read_medium_virt(dfu, offset, buf, len); - - *len = 0; - return 0; -} - -int dfu_write_medium_virt(struct dfu_entity *dfu, u64 offset, - void *buf, long *len) -{ - if (IS_ENABLED(CONFIG_CMD_STM32PROG_USB) && - dfu->data.virt.dev_num >= STM32PROG_VIRT_FIRST_DEV_NUM) - return stm32prog_write_medium_virt(dfu, offset, buf, len); - - return -EOPNOTSUPP; -} - -int __weak dfu_get_medium_size_virt(struct dfu_entity *dfu, u64 *size) -{ - if (IS_ENABLED(CONFIG_CMD_STM32PROG_USB) && - dfu->data.virt.dev_num >= STM32PROG_VIRT_FIRST_DEV_NUM) - return stm32prog_get_medium_size_virt(dfu, size); - - *size = SZ_1K; - - return 0; -} - -#endif |