]> git.sur5r.net Git - openocd/commitdiff
- correctly mask out bits that aren't part of a copied buffer
authordrath <drath@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Thu, 12 Apr 2007 13:27:23 +0000 (13:27 +0000)
committerdrath <drath@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Thu, 12 Apr 2007 13:27:23 +0000 (13:27 +0000)
- fixed arm926ej-s CP15 register access handling
- correctly identify SYSCLK source in LPC3180 NAND flash controller driver

git-svn-id: svn://svn.berlios.de/openocd/trunk@139 b42882b7-edfa-0310-969c-e2dbd0fdcd60

src/flash/lpc3180_nand_controller.c
src/helper/binarybuffer.c
src/target/arm926ejs.c

index aae5cbbfb17836be017598c0fa2f32da7abbbef5..2ef6f40b6cdc361a6f43d16dec6f4e8a8f9d1f34 100644 (file)
@@ -150,7 +150,7 @@ float lpc3180_cycle_time(lpc3180_nand_controller_t *lpc3180_info)
        /* determine current SYSCLK (13'MHz or main oscillator) */ 
        target_read_u32(target, 0x40004050, &sysclk_ctrl);
        
-       if (sysclk_ctrl & 1)
+       if ((sysclk_ctrl & 1) == 0)
                sysclk = lpc3180_info->osc_freq;
        else
                sysclk = 13000;
index 7d41dc73a499efd6689fbcf1131addfa683353a6..acc8237eb08323fcdfab29fbb3623b0a2a061025 100644 (file)
@@ -101,6 +101,12 @@ u8* buf_cpy(u8 *from, u8 *to, int size)
 
        for (i = 0; i < num_bytes; i++)
                to[i] = from[i];
+       
+       /* mask out bits that don't belong to the buffer */     
+       if (size % 8)
+       {
+               to[size / 8] &= (0xff >> (8 - (size % 8)));
+       }
 
        return to;
 }
index 78d128de74e6b4ea36871847e04aeb99906dbc50..ecabfcd697d9bc0b0217f27420aa4157ebcfc68c 100644 (file)
@@ -158,7 +158,7 @@ int arm926ejs_read_cp15(target_t *target, u32 address, u32 *value)
        {
                jtag_add_dr_scan(4, fields, -1);
                jtag_execute_queue();
-       } while ((access & 1) != 1);
+       } while (buf_get_u32(&access, 0, 1) != 1);
 
 #ifdef _DEBUG_INSTRUCTION_EXECUTION_
        DEBUG("addr: 0x%x value: %8.8x", address, *value);
@@ -234,7 +234,7 @@ int arm926ejs_write_cp15(target_t *target, u32 address, u32 value)
        {
                jtag_add_dr_scan(4, fields, -1);
                jtag_execute_queue();
-       } while (access != 1);
+       } while (buf_get_u32(&access, 0, 1) != 1);
 
 #ifdef _DEBUG_INSTRUCTION_EXECUTION_
        DEBUG("addr: 0x%x value: %8.8x", address, value);