diff --git a/src/flash/nor/max32xxx.c b/src/flash/nor/max32xxx.c index 1428b37c68533473a8838f6dcacf7612ca9b574d..b4d7bbc86f72bc6c90751842dab8574bf4e60684 100644 --- a/src/flash/nor/max32xxx.c +++ b/src/flash/nor/max32xxx.c @@ -85,10 +85,7 @@ #define ARM_PID_DEFAULT_CM3 0x0000B4C3 #define ARM_PID_DEFAULT_CM4 0x0000B4C4 -#define MAX326XX_ID 0x0000004D - -#define WRITE32BIT 0 -#define WRITE128BIT 1 +#define MAX326XX_ID 0x0000004D #define OPTIONS_128 0x01 /* Perform 128 bit flash writes */ #define OPTIONS_ENC 0x02 /* Encrypt the flash contents */ @@ -98,7 +95,6 @@ #define OPTIONS_RELATIVE_XOR 0x20 /* Only XOR the offset of the address when encrypting */ #define OPTIONS_KEYSIZE 0x40 /* Use a 256 bit KEY */ - static int max32xxx_mass_erase(struct flash_bank *bank); struct max32xxx_flash_bank { @@ -109,11 +105,9 @@ struct max32xxx_flash_bank { unsigned int sector_size; unsigned int clkdiv_value; unsigned int int_state; - unsigned int burst_size_bits; - unsigned int enc_options; + unsigned int options; }; -/* see contib/loaders/flash/max32xxx/max32xxx.s for src */ static const uint8_t write_code[] = { 0x9b, 0x46, 0x51, 0xf8, 0x84, 0x3c, 0xa1, 0xf5, 0x82, 0x77, 0x02, 0x93, 0x13, 0xf0, 0x02, 0x03, 0x05, 0x93, 0x1e, 0xd0, 0x4f, 0xf0, 0x80, 0x43, 0x9c, 0x68, 0x64, 0x03, 0x5e, 0xbf, 0x9c, 0x68, 0x44, 0xf4, 0x80, 0x24, 0x9c, 0x60, 0x5c, 0x6a, @@ -162,15 +156,12 @@ static const uint8_t write_code[] = { 0xff, 0x09, 0x3d, 0xe7, 0x4f, 0xf0, 0xff, 0x09, 0x60, 0xe7, 0x4f, 0xf0, 0xff, 0x09, 0x83, 0xe7, 0x5d, 0x44, 0x9f, 0xe7, }; -/* Config Command: flash bank name driver base size chip_width bus_width target [driver_option] - flash bank max32xxx <base> <size> 0 0 <target> <FLC base> <sector size> <clkdiv> [burst_bits] - */ FLASH_BANK_COMMAND_HANDLER(max32xxx_flash_bank_command) { struct max32xxx_flash_bank *info; - if ((CMD_ARGC < 10) || (CMD_ARGC > 11)) { - LOG_ERROR("incorrect flash bank max32xxx configuration: <base> <size> 0 0 <target> <FLC base> <sector size> <clkdiv> <burst_bits> [enc_options]"); + if ((CMD_ARGC < 10) || (CMD_ARGC > 10)) { + LOG_ERROR("incorrect flash bank max32xxx configuration: <base> <size> 0 0 <target> <FLC base> <sector size> <clkdiv> <options>"); return ERROR_FLASH_BANK_INVALID; } @@ -179,22 +170,7 @@ FLASH_BANK_COMMAND_HANDLER(max32xxx_flash_bank_command) COMMAND_PARSE_NUMBER(u32, CMD_ARGV[6], info->flc_base); COMMAND_PARSE_NUMBER(u32, CMD_ARGV[7], info->sector_size); COMMAND_PARSE_NUMBER(u32, CMD_ARGV[8], info->clkdiv_value); - COMMAND_PARSE_NUMBER(u32, CMD_ARGV[9], info->burst_size_bits); - - if ((info->burst_size_bits != 128) && (info->burst_size_bits != 32)) { - LOG_ERROR("Invalid burst size %d, must be 32 or 128", info->burst_size_bits); - return ERROR_FLASH_BANK_INVALID; - } - - if(CMD_ARGC == 11) { - COMMAND_PARSE_NUMBER(u32, CMD_ARGV[10], info->enc_options); - } else { - if(info->burst_size_bits == 128) { - info->enc_options = OPTIONS_128; - } else { - info->enc_options = 0x0; - } - } + COMMAND_PARSE_NUMBER(u32, CMD_ARGV[9], info->options); info->int_state = 0; bank->driver_priv = info; @@ -514,7 +490,7 @@ static int max32xxx_write_block(struct flash_bank *bank, const uint8_t *buffer, /* mem_params for options */ init_mem_param(&mem_param[0], source->address + (source->size - 4 - 128), 4, PARAM_OUT); - buf_set_u32(mem_param[0].value, 0, 32, info->enc_options); + buf_set_u32(mem_param[0].value, 0, 32, info->options); /* leave room for stack, 32-bit options and encryption buffer */ retval = target_run_flash_async_algorithm(target, buffer, wcount*4, 1, 1, mem_param, @@ -556,7 +532,7 @@ static int max32xxx_write(struct flash_bank *bank, const uint8_t *buffer, if (info->probed == 0) return ERROR_FLASH_BANK_NOT_PROBED; - if (info->burst_size_bits == 32) { + if ((info->options & OPTIONS_128) == 0) { if (offset & 0x3) { LOG_ERROR("offset size must be 32-bit aligned"); return ERROR_FLASH_DST_BREAKS_ALIGNMENT; @@ -600,7 +576,7 @@ static int max32xxx_write(struct flash_bank *bank, const uint8_t *buffer, } } - if ((info->burst_size_bits == 32) && (remaining >= 4)) { + if (((info->options & OPTIONS_128) == 0) && (remaining >= 4)) { /* write in 32-bit units*/ target_read_u32(target, info->flc_base + FLC_CN, &flash_cn); flash_cn |= FLC_CN_32BIT; @@ -629,7 +605,7 @@ static int max32xxx_write(struct flash_bank *bank, const uint8_t *buffer, } } - if ((info->burst_size_bits == 128) && (remaining >= 16)) { + if ((info->options & OPTIONS_128) && (remaining >= 16)) { /* write in 128-bit units */ target_read_u32(target, info->flc_base + FLC_CN, &flash_cn); flash_cn &= ~(FLC_CN_32BIT); @@ -662,7 +638,7 @@ static int max32xxx_write(struct flash_bank *bank, const uint8_t *buffer, } } - if ((info->burst_size_bits == 32) && remaining > 0) { + if (((info->options & OPTIONS_128) == 0) && remaining > 0) { /* write remaining bytes in a 32-bit unit */ target_read_u32(target, info->flc_base + FLC_CN, &flash_cn); flash_cn |= FLC_CN_32BIT; @@ -695,7 +671,7 @@ static int max32xxx_write(struct flash_bank *bank, const uint8_t *buffer, } } - if ((info->burst_size_bits == 128) && remaining > 0) { + if ((info->options & OPTIONS_128) && remaining > 0) { /* write remaining bytes in a 128-bit unit */ if (target_read_u32(target, info->flc_base + FLC_CN, &flash_cn) != ERROR_OK) { max32xxx_flash_op_post(bank); diff --git a/tcl/target/max32520.cfg b/tcl/target/max32520.cfg new file mode 100644 index 0000000000000000000000000000000000000000..4e75a99c3c68621b921750f9b5cfa9bc429cfa73 --- /dev/null +++ b/tcl/target/max32520.cfg @@ -0,0 +1,19 @@ +# Maxim Integrated MAX32665 OpenOCD target configuration file +# www.maximintegrated.com + +# Set the reset pin configuration +reset_config srst_only +adapter_nsrst_delay 200 + +# Set flash parameters +set FLASH_BASE 0x10000000 +set FLASH_SIZE 0x200000 +set FLC_BASE 0x40029000 +set FLASH_SECTOR 0x2000 + +# Currently set for Emulator +set FLASH_CLK 40 + +set FLASH_OPTIONS 0x63 + +source [find target/max32xxx.cfg] diff --git a/tcl/target/max32620.cfg b/tcl/target/max32620.cfg index 1ee892dc6bab3b7099f18371706af0446a22dcb2..8aed3a806407991deefc8df11ab66c4fac2fa288 100644 --- a/tcl/target/max32620.cfg +++ b/tcl/target/max32620.cfg @@ -11,7 +11,7 @@ set FLASH_SIZE 0x200000 set FLC_BASE 0x40002000 set FLASH_SECTOR 0x2000 set FLASH_CLK 96 -set FLASH_BITS 32 +set FLASH_OPTIONS 0x00 # Setup the reserved TAP set RSV_TAP 1 diff --git a/tcl/target/max32625.cfg b/tcl/target/max32625.cfg index 44e62f708b95bed52f91f64cceda55ead5c4defd..f29fabf20ba00dd868ef1631d45b4075fc10bc95 100644 --- a/tcl/target/max32625.cfg +++ b/tcl/target/max32625.cfg @@ -11,7 +11,7 @@ set FLASH_SIZE 0x80000 set FLC_BASE 0x40002000 set FLASH_SECTOR 0x2000 set FLASH_CLK 96 -set FLASH_BITS 32 +set FLASH_OPTIONS 0x00 # Setup the reserved TAP set RSV_TAP 1 diff --git a/tcl/target/max3263x.cfg b/tcl/target/max3263x.cfg index 06565ef6dee96123706703eaf8a0d89a7a05ebbb..2b78df6e3344ab8072fd5e7d2cba5938a213920f 100644 --- a/tcl/target/max3263x.cfg +++ b/tcl/target/max3263x.cfg @@ -10,7 +10,7 @@ set FLASH_SIZE 0x200000 set FLC_BASE 0x40002000 set FLASH_SECTOR 0x2000 set FLASH_CLK 96 -set FLASH_BITS 32 +set FLASH_OPTIONS 0x00 # Setup the reserved TAP set RSV_TAP 1 diff --git a/tcl/target/max32650.cfg b/tcl/target/max32650.cfg index 1ae0f69813ae8c5858826df9a77f4f4758511a47..e5c28bc93f67a02e5a6ade814f6d28d856b4a60d 100644 --- a/tcl/target/max32650.cfg +++ b/tcl/target/max32650.cfg @@ -11,7 +11,6 @@ set FLASH_SIZE 0x300000 set FLC_BASE 0x40029000 set FLASH_SECTOR 0x2000 set FLASH_CLK 96 -set FLASH_BITS 32 -# set FLASH_BITS 128 +set FLASH_OPTIONS 0x00 source [find target/max32xxx.cfg] diff --git a/tcl/target/max32660.cfg b/tcl/target/max32660.cfg index 723d4d5a85ff490203efc4e161faea5cc71f32fb..6c6d60179f2d987563af5ccb9891bc19237db092 100644 --- a/tcl/target/max32660.cfg +++ b/tcl/target/max32660.cfg @@ -11,7 +11,6 @@ set FLASH_SIZE 0x40000 set FLC_BASE 0x40029000 set FLASH_SECTOR 0x2000 set FLASH_CLK 96 -set FLASH_BITS 32 -# set FLASH_BITS 128 +set FLASH_OPTIONS 0x00 source [find target/max32xxx.cfg] diff --git a/tcl/target/max32665.cfg b/tcl/target/max32665.cfg index 5d05ee448cac52e12aa3ca26fd1c716e09750c6e..893ffa8bb4edd3b9d9dd19128f8f1d1096badc07 100644 --- a/tcl/target/max32665.cfg +++ b/tcl/target/max32665.cfg @@ -11,6 +11,6 @@ set FLASH_SIZE 0x300000 set FLC_BASE 0x40029000 set FLASH_SECTOR 0x2000 set FLASH_CLK 96 -set FLASH_BITS 128 +set FLASH_OPTIONS 0x01 source [find target/max32xxx.cfg] diff --git a/tcl/target/max32xxx.cfg b/tcl/target/max32xxx.cfg index 9039f0d925b5bac76b06524be8e5ad8bcdc8c78d..9f5b2719e09ef166e07eeb99a0eb90c452ce98ed 100644 --- a/tcl/target/max32xxx.cfg +++ b/tcl/target/max32xxx.cfg @@ -77,21 +77,19 @@ if { [info exists FLASH_CLK] } { set _FLASH_CLK 96 } -if { [info exists FLASH_BITS] } { - set _FLASH_BITS $FLASH_BITS +# OPTIONS_128 0x01 /* Perform 128 bit flash writes */ +# OPTIONS_ENC 0x02 /* Encrypt the flash contents */ +# OPTIONS_AUTH 0x04 /* Authenticate the flash contents */ +# OPTIONS_COUNT 0x08 /* Add counter values to authentication */ +# OPTIONS_INTER 0x10 /* Interleave the authentication and count values*/ +# OPTIONS_RELATIVE_XOR 0x20 /* Only XOR the offset of the address when encrypting */ +# OPTIONS_KEYSIZE 0x40 /* Use a 256 bit KEY */ + +if { [info exists FLASH_OPTIONS] } { + set _FLASH_OPTIONS $FLASH_OPTIONS } else { - set _FLASH_BITS 32 -} - -if { [info exists ENC_OPTIONS] } { - set _ENC_OPTIONS $ENC_OPTIONS -} else { - if { $FLASH_BITS == 128 } { - set _ENC_OPTIONS 1 - } else { - set _ENC_OPTIONS 0 - } + set _FLASH_OPTIONS 0 } flash bank $_CHIPNAME.flash max32xxx $_FLASH_BASE $_FLASH_SIZE 0 0 $_CHIPNAME.cpu \ -$_FLC_BASE $_FLASH_SECTOR $_FLASH_CLK $_FLASH_BITS $_ENC_OPTIONS +$_FLC_BASE $_FLASH_SECTOR $_FLASH_CLK $_FLASH_OPTIONS