From 82ea640830fe13f9ab8ef33c65a76480b697f856 Mon Sep 17 00:00:00 2001 From: Øyvind Harboe Date: Tue, 4 May 2010 13:26:52 +0200 Subject: gdb: connect will now fail if flash autoprobe fails MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This stops GDB from launching with an empty memory map, making gdb load w/flashing fail for no obvious reason. The error message points in the direction of the gdb-attach event that can be set up to issue a halt or "reset init" which will put GDB in a well defined stated upon attach and thus have a robust flash autoprobe. Signed-off-by: Øyvind Harboe --- src/flash/nor/core.c | 11 +++++++---- src/flash/nor/core.h | 5 +++-- src/flash/nor/tcl.c | 26 +++++++++++--------------- 3 files changed, 21 insertions(+), 21 deletions(-) (limited to 'src/flash') diff --git a/src/flash/nor/core.c b/src/flash/nor/core.c index e6c0eeb2..232d5037 100644 --- a/src/flash/nor/core.c +++ b/src/flash/nor/core.c @@ -220,22 +220,25 @@ struct flash_bank *get_flash_bank_by_name(const char *name) return NULL; } -struct flash_bank *get_flash_bank_by_num(int num) +int get_flash_bank_by_num(int num, struct flash_bank **bank) { struct flash_bank *p = get_flash_bank_by_num_noprobe(num); int retval; if (p == NULL) - return NULL; + { + return ERROR_FAIL; + } retval = p->driver->auto_probe(p); if (retval != ERROR_OK) { LOG_ERROR("auto_probe failed %d\n", retval); - return NULL; + return retval; } - return p; + *bank = p; + return ERROR_OK; } /* lookup flash bank by address */ diff --git a/src/flash/nor/core.h b/src/flash/nor/core.h index 68220afe..797cf686 100644 --- a/src/flash/nor/core.h +++ b/src/flash/nor/core.h @@ -157,9 +157,10 @@ struct flash_bank *get_flash_bank_by_name(const char *name); /** * Returns a flash bank by the specified flash_bank_s bank_number, @a num. * @param num The flash bank number. - * @returns A struct flash_bank for flash bank @a num, or NULL + * @param bank returned bank if fn returns ERROR_OK + * @returns ERROR_OK if successful */ -struct flash_bank *get_flash_bank_by_num(int num); +int get_flash_bank_by_num(int num, struct flash_bank **bank); /** * Retreives @a bank from a command argument, reporting errors parsing * the bank identifier or retreiving the specified bank. The bank diff --git a/src/flash/nor/tcl.c b/src/flash/nor/tcl.c index aed55c05..66b8ac34 100644 --- a/src/flash/nor/tcl.c +++ b/src/flash/nor/tcl.c @@ -42,13 +42,7 @@ COMMAND_HELPER(flash_command_get_bank, unsigned name_index, unsigned bank_num; COMMAND_PARSE_NUMBER(uint, name, bank_num); - *bank = get_flash_bank_by_num(bank_num); - if (!*bank) - { - command_print(CMD_CTX, "flash bank '%s' not found", name); - return ERROR_INVALID_ARGUMENTS; - } - return ERROR_OK; + return get_flash_bank_by_num(bank_num, bank); } @@ -310,9 +304,12 @@ COMMAND_HANDLER(handle_flash_erase_command) uint32_t last; COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], bank_nr); - struct flash_bank *p = get_flash_bank_by_num(bank_nr); - if (!p) - return ERROR_OK; + + struct flash_bank *p; + int retval; + retval = get_flash_bank_by_num(bank_nr, &p); + if (retval != ERROR_OK) + return retval; COMMAND_PARSE_NUMBER(u32, CMD_ARGV[1], first); if (strcmp(CMD_ARGV[2], "last") == 0) @@ -320,7 +317,6 @@ COMMAND_HANDLER(handle_flash_erase_command) else COMMAND_PARSE_NUMBER(u32, CMD_ARGV[2], last); - int retval; if ((retval = flash_check_sector_parameters(CMD_CTX, first, last, p->num_sectors)) != ERROR_OK) return retval; @@ -350,9 +346,10 @@ COMMAND_HANDLER(handle_flash_protect_command) uint32_t last; COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], bank_nr); - struct flash_bank *p = get_flash_bank_by_num(bank_nr); - if (!p) - return ERROR_OK; + struct flash_bank *p; + int retval = get_flash_bank_by_num(bank_nr, &p); + if (retval != ERROR_OK) + return retval; COMMAND_PARSE_NUMBER(u32, CMD_ARGV[1], first); if (strcmp(CMD_ARGV[2], "last") == 0) @@ -363,7 +360,6 @@ COMMAND_HANDLER(handle_flash_protect_command) bool set; COMMAND_PARSE_ON_OFF(CMD_ARGV[3], set); - int retval; if ((retval = flash_check_sector_parameters(CMD_CTX, first, last, p->num_sectors)) != ERROR_OK) return retval; -- cgit v1.2.3-18-g5258