This is an automated email from Gerrit.

Salvador Arroyo ([email protected]) just uploaded a new patch set to Gerrit, 
which you can find at http://openocd.zylin.com/1562

-- gerrit

commit 45018c993fdade990af14928b0b440b25a6ab3f2
Author: Salvador Arroyo <[email protected]>
Date:   Fri Aug 23 18:50:43 2013 +0200

    mips: load code in buffer mode
    
    Currently the functions mips32_checksum_memory() and 
mips32_blank_check_memory()
    load the code word by word.
    The bug in cache code is a good reason for doing so.
    If there is no other reason we can load the code as a buffer to save time.
    
    Change-Id: Ib63ed98732b2e23b058e7349a0a57934b7604905
    Signed-off-by: Salvador Arroyo <[email protected]>

diff --git a/src/target/mips32.c b/src/target/mips32.c
index c9cbf86..d7f1303 100644
--- a/src/target/mips32.c
+++ b/src/target/mips32.c
@@ -610,12 +610,10 @@ int mips32_checksum_memory(struct target *target, 
uint32_t address,
        struct working_area *crc_algorithm;
        struct reg_param reg_params[2];
        struct mips32_algorithm mips32_info;
-       int retval;
-       uint32_t i;
 
-       /* see contib/loaders/checksum/mips32.s for src */
+       /* see contrib/loaders/checksum/mips32.s for src */
 
-       static const uint32_t mips_crc_code[] = {
+       uint32_t mips_crc_code[] = {
                0x248C0000,             /* addiu        $t4, $a0, 0 */
                0x24AA0000,             /* addiu        $t2, $a1, 0 */
                0x2404FFFF,             /* addiu        $a0, $zero, 0xffffffff 
*/
@@ -648,9 +646,10 @@ int mips32_checksum_memory(struct target *target, uint32_t 
address,
        if (target_alloc_working_area(target, sizeof(mips_crc_code), 
&crc_algorithm) != ERROR_OK)
                return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
 
-       /* convert flash writing code into a buffer in target endianness */
-       for (i = 0; i < ARRAY_SIZE(mips_crc_code); i++)
-               target_write_u32(target, crc_algorithm->address + 
i*sizeof(uint32_t), mips_crc_code[i]);
+       /* convert crc code into a buffer in target endianness */
+       target_buffer_set_u32_array(target, (uint8_t *)mips_crc_code, 
ARRAY_SIZE(mips_crc_code), mips_crc_code);
+
+       target_write_buffer(target, crc_algorithm->address, 
sizeof(mips_crc_code), (uint8_t *)mips_crc_code);
 
        mips32_info.common_magic = MIPS32_COMMON_MAGIC;
        mips32_info.isa_mode = MIPS32_ISA_MIPS32;
@@ -663,8 +662,8 @@ int mips32_checksum_memory(struct target *target, uint32_t 
address,
 
        int timeout = 20000 * (1 + (count / (1024 * 1024)));
 
-       retval = target_run_algorithm(target, 0, NULL, 2, reg_params,
-                       crc_algorithm->address, crc_algorithm->address + 
(sizeof(mips_crc_code)-4), timeout,
+       int retval = target_run_algorithm(target, 0, NULL, 2, reg_params,
+                       crc_algorithm->address, crc_algorithm->address + 
(sizeof(mips_crc_code) - 4), timeout,
                        &mips32_info);
        if (retval != ERROR_OK) {
                destroy_reg_param(&reg_params[0]);
@@ -690,10 +689,8 @@ int mips32_blank_check_memory(struct target *target,
        struct working_area *erase_check_algorithm;
        struct reg_param reg_params[3];
        struct mips32_algorithm mips32_info;
-       int retval;
-       uint32_t i;
 
-       static const uint32_t erase_check_code[] = {
+       uint32_t erase_check_code[] = {
                                                /* nbyte: */
                0x80880000,             /* lb           $t0, ($a0) */
                0x00C83024,             /* and          $a2, $a2, $t0 */
@@ -707,11 +704,10 @@ int mips32_blank_check_memory(struct target *target,
        if (target_alloc_working_area(target, sizeof(erase_check_code), 
&erase_check_algorithm) != ERROR_OK)
                return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
 
-       /* convert flash writing code into a buffer in target endianness */
-       for (i = 0; i < ARRAY_SIZE(erase_check_code); i++) {
-               target_write_u32(target, erase_check_algorithm->address + 
i*sizeof(uint32_t),
-                               erase_check_code[i]);
-       }
+       /* convert erase check code into a buffer in target endianness */
+       target_buffer_set_u32_array(target, (uint8_t *)erase_check_code, 
ARRAY_SIZE(erase_check_code), erase_check_code);
+
+       target_write_buffer(target, erase_check_algorithm->address, 
sizeof(erase_check_code), (uint8_t *)erase_check_code);
 
        mips32_info.common_magic = MIPS32_COMMON_MAGIC;
        mips32_info.isa_mode = MIPS32_ISA_MIPS32;
@@ -725,9 +721,9 @@ int mips32_blank_check_memory(struct target *target,
        init_reg_param(&reg_params[2], "a2", 32, PARAM_IN_OUT);
        buf_set_u32(reg_params[2].value, 0, 32, 0xff);
 
-       retval = target_run_algorithm(target, 0, NULL, 3, reg_params,
+       int retval = target_run_algorithm(target, 0, NULL, 3, reg_params,
                        erase_check_algorithm->address,
-                       erase_check_algorithm->address + 
(sizeof(erase_check_code)-4),
+                       erase_check_algorithm->address + 
(sizeof(erase_check_code) - 4),
                        10000, &mips32_info);
        if (retval != ERROR_OK) {
                destroy_reg_param(&reg_params[0]);

-- 

------------------------------------------------------------------------------
Introducing Performance Central, a new site from SourceForge and 
AppDynamics. Performance Central is your source for news, insights, 
analysis and resources for efficient Application Performance Management. 
Visit us today!
http://pubads.g.doubleclick.net/gampad/clk?id=48897511&iu=/4140/ostg.clktrk
_______________________________________________
OpenOCD-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to