flash: fix bug with multiple back-to-back flash chips
[openocd.git] / src / flash / nor / lpc2900.c
index c1fefd70c375d3710a89ea4fb81a888b4af11432..e17823ec2dee513eb63c29de21022960d7b84fa9 100644 (file)
 #endif
 
 
-#include <target/image.h>
-#include "flash.h"
+#include "imp.h"
 #include <helper/binarybuffer.h>
-#include <target/armv4_5.h>
 #include <target/algorithm.h>
+#include <target/arm.h>
+#include <target/image.h>
 
 
 /* 1024 bytes */
@@ -306,39 +306,39 @@ static uint32_t lpc2900_read_security_status( struct flash_bank *bank )
         * a protected sector!
         */
        int sector;
-       int index;
+       int index_t;
        for( sector = 0; sector < bank->num_sectors; sector++ )
        {
                /* Convert logical sector number to physical sector number */
                if( sector <= 4 )
                {
-                       index = sector + 11;
+                       index_t = sector + 11;
                }
                else if( sector <= 7 )
                {
-                       index = sector + 27;
+                       index_t = sector + 27;
                }
                else
                {
-                       index = sector - 8;
+                       index_t = sector - 8;
                }
 
                bank->sectors[sector].is_protected = -1;
 
                if (
-                   (iss_secured_field[index][0] == 0x00000000) &&
-                   (iss_secured_field[index][1] == 0x00000000) &&
-                   (iss_secured_field[index][2] == 0x00000000) &&
-                   (iss_secured_field[index][3] == 0x00000000) )
+                   (iss_secured_field[index_t][0] == 0x00000000) &&
+                   (iss_secured_field[index_t][1] == 0x00000000) &&
+                   (iss_secured_field[index_t][2] == 0x00000000) &&
+                   (iss_secured_field[index_t][3] == 0x00000000) )
                {
                        bank->sectors[sector].is_protected = 1;
                }
 
                if (
-                   (iss_secured_field[index][0] == 0xFFFFFFFF) &&
-                   (iss_secured_field[index][1] == 0xFFFFFFFF) &&
-                   (iss_secured_field[index][2] == 0xFFFFFFFF) &&
-                   (iss_secured_field[index][3] == 0xFFFFFFFF) )
+                   (iss_secured_field[index_t][0] == 0xFFFFFFFF) &&
+                   (iss_secured_field[index_t][1] == 0xFFFFFFFF) &&
+                   (iss_secured_field[index_t][2] == 0xFFFFFFFF) &&
+                   (iss_secured_field[index_t][3] == 0xFFFFFFFF) )
                {
                        bank->sectors[sector].is_protected = 0;
                }
@@ -507,7 +507,7 @@ static int lpc2900_write_index_page( struct flash_bank *bank,
  * @param clock System clock in Hz
  * @param time Program/erase time in µs
  */
-static uint32_t lpc2900_calc_tr( uint32_t clock, uint32_t time )
+static uint32_t lpc2900_calc_tr( uint32_t clock_var, uint32_t time_var )
 {
        /*           ((time[µs]/1e6) * f[Hz]) + 511
         * FPTR.TR = -------------------------------
@@ -516,7 +516,7 @@ static uint32_t lpc2900_calc_tr( uint32_t clock, uint32_t time )
         * The result is the
         */
 
-       uint32_t tr_val = (uint32_t)((((time / 1e6) * clock) + 511.0) / 512.0);
+       uint32_t tr_val = (uint32_t)((((time_var / 1e6) * clock_var) + 511.0) / 512.0);
 
        return tr_val;
 }
@@ -951,45 +951,49 @@ COMMAND_HANDLER(lpc2900_handle_secure_jtag_command)
 static const struct command_registration lpc2900_exec_command_handlers[] = {
        {
                .name = "signature",
-               .handler = &lpc2900_handle_signature_command,
+               .handler = lpc2900_handle_signature_command,
                .mode = COMMAND_EXEC,
-               .usage = "<bank>",
-               .help = "print device signature of flash bank",
+               .usage = "bank_id",
+               .help = "Calculate and display signature of flash bank.",
        },
        {
                .name = "read_custom",
-               .handler = &lpc2900_handle_read_custom_command,
+               .handler = lpc2900_handle_read_custom_command,
                .mode = COMMAND_EXEC,
-               .usage = "<bank> <filename>",
-               .help = "read customer information from index sector to file",
+               .usage = "bank_id filename",
+               .help = "Copies 912 bytes of customer information "
+                       "from index sector into file.",
        },
        {
                .name = "password",
-               .handler = &lpc2900_handle_password_command,
+               .handler = lpc2900_handle_password_command,
                .mode = COMMAND_EXEC,
-               .usage = "<bank> <password>",
-               .help = "enter password to enable 'dangerous' options",
+               .usage = "bank_id password",
+               .help = "Enter fixed password to enable 'dangerous' options.",
        },
        {
                .name = "write_custom",
-               .handler = &lpc2900_handle_write_custom_command,
+               .handler = lpc2900_handle_write_custom_command,
                .mode = COMMAND_EXEC,
-               .usage = "<bank> <filename> [<type>]",
-               .help = "write customer info from file to index sector",
+               .usage = "bank_id filename ('bin'|'ihex'|'elf'|'s19')",
+               .help = "Copies 912 bytes of customer info from file "
+                       "to index sector.",
        },
        {
                .name = "secure_sector",
-               .handler = &lpc2900_handle_secure_sector_command,
+               .handler = lpc2900_handle_secure_sector_command,
                .mode = COMMAND_EXEC,
-               .usage = "<bank> <first> <last>",
-               .help = "activate sector security for a range of sectors",
+               .usage = "bank_id first_sector last_sector",
+               .help = "Activate sector security for a range of sectors.  "
+                       "It will be effective after a power cycle.",
        },
        {
                .name = "secure_jtag",
-               .handler = &lpc2900_handle_secure_jtag_command,
+               .handler = lpc2900_handle_secure_jtag_command,
                .mode = COMMAND_EXEC,
-               .usage = "<bank> <level>",
-               .help = "activate JTAG security",
+               .usage = "bank_id",
+               .help = "Disable the JTAG port.  "
+                       "It will be effective after a power cycle.",
        },
        COMMAND_REGISTRATION_DONE
 };
@@ -1284,7 +1288,7 @@ static int lpc2900_write(struct flash_bank *bank, uint8_t *buffer,
           reduced size if that fails. */
        struct working_area *warea;
        uint32_t buffer_size = lpc2900_info->max_ram_block - 1 * KiB;
-       while( (retval = target_alloc_working_area(target,
+       while( (retval = target_alloc_working_area_try(target,
                                                   buffer_size + target_code_size,
                                                   &warea)) != ERROR_OK )
        {
@@ -1302,7 +1306,7 @@ static int lpc2900_write(struct flash_bank *bank, uint8_t *buffer,
        if( warea )
        {
                struct reg_param reg_params[5];
-               struct armv4_5_algorithm armv4_5_info;
+               struct arm_algorithm armv4_5_info;
 
                /* We can use target mode. Download the algorithm. */
                retval = target_write_buffer( target,
@@ -1361,7 +1365,7 @@ static int lpc2900_write(struct flash_bank *bank, uint8_t *buffer,
                                this_buffer = buffer;
 
                                /* Make sure we stop at the next secured sector */
-                               int sector = start_sector + 1;
+                               sector = start_sector + 1;
                                while( sector < bank->num_sectors )
                                {
                                        /* Secured? */
@@ -1423,9 +1427,9 @@ static int lpc2900_write(struct flash_bank *bank, uint8_t *buffer,
                        buf_set_u32(reg_params[4].value, 0, 32, FPTR_EN_T | prog_time);
 
                        /* Execute algorithm, assume breakpoint for last instruction */
-                       armv4_5_info.common_magic = ARMV4_5_COMMON_MAGIC;
-                       armv4_5_info.core_mode = ARMV4_5_MODE_SVC;
-                       armv4_5_info.core_state = ARMV4_5_STATE_ARM;
+                       armv4_5_info.common_magic = ARM_COMMON_MAGIC;
+                       armv4_5_info.core_mode = ARM_MODE_SVC;
+                       armv4_5_info.core_state = ARM_STATE_ARM;
 
                        retval = target_run_algorithm(target, 0, NULL, 5, reg_params,
                                (warea->address) + buffer_size,
@@ -1826,6 +1830,7 @@ struct flash_driver lpc2900_flash =
        .erase              = lpc2900_erase,
        .protect            = lpc2900_protect,
        .write              = lpc2900_write,
+       .read               = default_flash_read,
        .probe              = lpc2900_probe,
        .auto_probe         = lpc2900_probe,
        .erase_check        = lpc2900_erase_check,

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)