This is an automated email from Gerrit. Jonathan ([email protected]) just uploaded a new patch set to Gerrit, which you can find at http://openocd.zylin.com/5606
-- gerrit commit 57bb3de16c6cb03306899a7cbf668cd53c0e30a8 Author: Jonathan Ibarra <[email protected]> Date: Fri Apr 24 22:55:13 2020 -0500 flash/nor/efm32: add support for bootload, devinfo access Allow programming bootloader region and reading devinfo region Change-Id: I8b6e90b73928dc10aac0d9eb72e0b9974302028c Signed-off-by: Jonathan Ibarra <[email protected]> diff --git a/src/flash/nor/efm32.c b/src/flash/nor/efm32.c index 9cdc325..9820449 100644 --- a/src/flash/nor/efm32.c +++ b/src/flash/nor/efm32.c @@ -53,7 +53,7 @@ #define EFM32_MSC_USER_DATA EFM32_MSC_INFO_BASE #define EFM32_MSC_LOCK_BITS (EFM32_MSC_INFO_BASE+0x4000) #define EFM32_MSC_DEV_INFO (EFM32_MSC_INFO_BASE+0x8000) - +#define EFM32_MSC_BOOTLOADER (EFM32_MSC_INFO_BASE+0x10000) /* PAGE_SIZE is not present in Zero, Happy and the original Gecko MCU */ #define EFM32_MSC_DI_PAGE_SIZE (EFM32_MSC_DEV_INFO+0x1e7) #define EFM32_MSC_DI_FLASH_SZ (EFM32_MSC_DEV_INFO+0x1f8) @@ -964,7 +964,6 @@ static int efm32x_probe(struct flash_bank *bank) struct efm32_info efm32_mcu_info; int ret; int i; - uint32_t base_address = 0x00000000; char buf[256]; efm32x_info->probed = 0; @@ -978,6 +977,20 @@ static int efm32x_probe(struct flash_bank *bank) if (ERROR_OK != ret) return ret; + if ((bank->base == EFM32_MSC_USER_DATA) || + bank->base == EFM32_MSC_LOCK_BITS) { + efm32_mcu_info.flash_sz_kib = 2; + efm32_mcu_info.page_size = 2048; + } + else if (bank->base == EFM32_MSC_DEV_INFO) { + /* FIXME? not true base address */ + efm32_mcu_info.flash_sz_kib = 2; + efm32_mcu_info.page_size = 2048; + } + else if (bank->base == EFM32_MSC_BOOTLOADER) { + efm32_mcu_info.flash_sz_kib = 32; + efm32_mcu_info.page_size = 2048; + } LOG_INFO("detected part: %s", buf); LOG_INFO("flash size = %dkbytes", efm32_mcu_info.flash_sz_kib); LOG_INFO("flash page size = %dbytes", efm32_mcu_info.page_size); @@ -994,7 +1007,6 @@ static int efm32x_probe(struct flash_bank *bank) bank->sectors = NULL; } - bank->base = base_address; bank->size = (num_pages * efm32_mcu_info.page_size); bank->num_sectors = num_pages; @@ -1012,7 +1024,6 @@ static int efm32x_probe(struct flash_bank *bank) bank->sectors[i].is_erased = -1; bank->sectors[i].is_protected = 1; } - efm32x_info->probed = 1; return ERROR_OK; diff --git a/tcl/target/efm32.cfg b/tcl/target/efm32.cfg index c789efc..b74ad70 100644 --- a/tcl/target/efm32.cfg +++ b/tcl/target/efm32.cfg @@ -43,6 +43,10 @@ $_TARGETNAME configure -work-area-phys 0x10000000 -work-area-size $_WORKAREASIZE set _FLASHNAME $_CHIPNAME.flash flash bank $_FLASHNAME efm32 0 0 0 0 $_TARGETNAME +flash bank userdata.flash efm32 0x0FE00000 0x800 0 0 $_TARGETNAME +flash bank lockbits.flash efm32 0x0FE04000 0x800 0 0 $_TARGETNAME +flash bank devinfo.flash efm32 0x0FE08000 0x400 0 0 $_TARGETNAME +flash bank bootloader.flash efm32 0x0FE10000 0x8000 0 0 $_TARGETNAME if {![using_hla]} { # if srst is not fitted use SYSRESETREQ to -- _______________________________________________ OpenOCD-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/openocd-devel
