Improve str9x config command argument parsing.
[fw/openocd] / src / flash / str9x.c
index cfd37b9da4c32239450c3a0aad60a422a81071cd..fe6c086890e6ea7a741e23ae7069a4447a7c0f38 100644 (file)
@@ -300,12 +300,12 @@ static int str9x_erase(struct flash_bank_s *bank, int first, int last)
                }
 
                int timeout;
-               for (timeout = 0; timeout<1000; timeout++) {
+               for (timeout = 0; timeout < 1000; timeout++) {
                        if ((retval = target_read_u8(target, adr, &status)) != ERROR_OK)
                        {
                                return retval;
                        }
-                       if ( status & 0x80 )
+                       if (status & 0x80)
                                break;
                        alive_sleep(1);
                }
@@ -327,7 +327,7 @@ static int str9x_erase(struct flash_bank_s *bank, int first, int last)
                        return retval;
                }
 
-               if ( status & 0x22 )
+               if (status & 0x22)
                {
                        LOG_ERROR("error erasing flash bank, status: 0x%x", status);
                        return ERROR_FLASH_OPERATION_FAILED;
@@ -365,7 +365,7 @@ static int str9x_protect(struct flash_bank_s *bank,
                adr = bank->base + bank->sectors[i].offset;
 
                target_write_u16(target, adr, 0x60);
-               if ( set )
+               if (set)
                        target_write_u16(target, adr, 0x01);
                else
                        target_write_u16(target, adr, 0xD0);
@@ -575,10 +575,10 @@ static int str9x_write(struct flash_bank_s *bank,
                target_write_u16(target, bank_adr, 0x70);
 
                int timeout;
-               for (timeout = 0; timeout<1000; timeout++)
+               for (timeout = 0; timeout < 1000; timeout++)
                {
                        target_read_u8(target, bank_adr, &status);
-                       if ( status & 0x80 )
+                       if (status & 0x80)
                                break;
                        alive_sleep(1);
                }
@@ -624,10 +624,10 @@ static int str9x_write(struct flash_bank_s *bank,
                target_write_u16(target, bank_adr, 0x70);
 
                int timeout;
-               for (timeout = 0; timeout<1000; timeout++)
+               for (timeout = 0; timeout < 1000; timeout++)
                {
                        target_read_u8(target, bank_adr, &status);
-                       if ( status & 0x80 )
+                       if (status & 0x80)
                                break;
                        alive_sleep(1);
                }
@@ -665,7 +665,7 @@ static int str9x_handle_part_id_command(struct command_context_s *cmd_ctx,
 
 static int str9x_info(struct flash_bank_s *bank, char *buf, int buf_size)
 {
-       snprintf(buf, buf_size, "str9x flash driver info" );
+       snprintf(buf, buf_size, "str9x flash driver info");
        return ERROR_OK;
 }
 
@@ -673,7 +673,6 @@ static int str9x_handle_flash_config_command(struct command_context_s *cmd_ctx,
                char *cmd, char **args, int argc)
 {
        str9x_flash_bank_t *str9x_info;
-       flash_bank_t *bank;
        target_t *target = NULL;
 
        if (argc < 5)
@@ -681,12 +680,16 @@ static int str9x_handle_flash_config_command(struct command_context_s *cmd_ctx,
                return ERROR_COMMAND_SYNTAX_ERROR;
        }
 
-       bank = get_flash_bank_by_num(strtoul(args[0], NULL, 0));
-       if (!bank)
-       {
-               command_print(cmd_ctx, "flash bank '#%s' is out of bounds", args[0]);
-               return ERROR_OK;
-       }
+       flash_bank_t *bank;
+       int retval = flash_command_get_bank_by_num(cmd_ctx, args[0], &bank);
+       if (ERROR_OK != retval)
+               return retval;
+
+       uint32_t bbsr, nbbsr, bbadr, nbbadr;
+       COMMAND_PARSE_NUMBER(u32, args[1], bbsr);
+       COMMAND_PARSE_NUMBER(u32, args[2], nbbsr);
+       COMMAND_PARSE_NUMBER(u32, args[3], bbadr);
+       COMMAND_PARSE_NUMBER(u32, args[4], nbbadr);
 
        str9x_info = bank->driver_priv;
 
@@ -699,10 +702,10 @@ static int str9x_handle_flash_config_command(struct command_context_s *cmd_ctx,
        }
 
        /* config flash controller */
-       target_write_u32(target, FLASH_BBSR, strtoul(args[1], NULL, 0));
-       target_write_u32(target, FLASH_NBBSR, strtoul(args[2], NULL, 0));
-       target_write_u32(target, FLASH_BBADR, (strtoul(args[3], NULL, 0) >> 2));
-       target_write_u32(target, FLASH_NBBADR, (strtoul(args[4], NULL, 0) >> 2));
+       target_write_u32(target, FLASH_BBSR, bbsr);
+       target_write_u32(target, FLASH_NBBSR, nbbsr);
+       target_write_u32(target, FLASH_BBADR, bbadr >> 2);
+       target_write_u32(target, FLASH_NBBADR, nbbadr >> 2);
 
        /* set bit 18 instruction TCM order as per flash programming manual */
        arm966e_write_cp15(target, 62, 0x40000);