diff --git a/src/jtag2rw.cc b/src/jtag2rw.cc index 2d1a96c..2cc497d 100644 --- a/src/jtag2rw.cc +++ b/src/jtag2rw.cc @@ -151,11 +151,12 @@ uchar *jtag2::jtagRead(unsigned long addr, unsigned int numBytes) unsigned int chunksize = numBytes; unsigned int targetOffset = 0; - if (addr + chunksize >= pageAddr + pageSize) + offset = addr & mask; + if (chunksize > pageSize - offset) { // Chunk would cross a page boundary, reduce it // appropriately. - chunksize -= (addr + numBytes - (pageAddr + pageSize)); - offset = addr - pageAddr; + chunksize = pageSize - offset; + } while (numBytes > 0) { diff --git a/src/jtag3rw.cc b/src/jtag3rw.cc index ada7430..de4e3fb 100644 --- a/src/jtag3rw.cc +++ b/src/jtag3rw.cc @@ -150,11 +150,12 @@ uchar *jtag3::jtagRead(unsigned long addr, unsigned int numBytes) unsigned int chunksize = numBytes; unsigned int targetOffset = 0; - if (addr + numBytes >= pageAddr + pageSize) + offset = addr & mask; + if (chunksize > pageSize - offset) { // Chunk would cross a page boundary, reduce it // appropriately. - chunksize -= (addr + numBytes - (pageAddr + pageSize)); - offset = addr - pageAddr; + chunksize = pageSize - offset; + } while (numBytes > 0) {