From: Dirk Eibach dirk.eib...@gdsys.cc
Addressing was completely broken for cmd_fpgad.
Signed-off-by: Dirk Eibach dirk.eib...@gdsys.cc
---
Changes in v2: None
common/cmd_fpgad.c | 32
1 file changed, 24 insertions(+), 8 deletions(-)
diff --git a/common/cmd_fpgad.c b/common/cmd_fpgad.c
index 1b25ed8..1f1d00f 100644
--- a/common/cmd_fpgad.c
+++ b/common/cmd_fpgad.c
@@ -31,7 +31,8 @@ int do_fpga_md(cmd_tbl_t *cmdtp, int flag, int argc, char *
const argv[])
unsigned int fpga;
ulong addr, length;
int rc = 0;
- u16 linebuf[DISP_LINE_LEN/sizeof(u16)];
+ u16 linebuf[DISP_LINE_LEN/sizeof(u16)];
+ ulong nbytes;
/*
* We use the last specified parameters, unless new ones are
@@ -63,13 +64,28 @@ int do_fpga_md(cmd_tbl_t *cmdtp, int flag, int argc, char *
const argv[])
length = simple_strtoul(argv[3], NULL, 16);
}
- /* Print the lines. */
- for (k = 0; k DISP_LINE_LEN / sizeof(u16); ++k)
- fpga_get_reg(fpga, (u16 *)fpga_ptr[fpga] + k, k * sizeof(u16),
-linebuf[k]);
- print_buffer(addr, (void *)linebuf, sizeof(u16),
-length, DISP_LINE_LEN / sizeof(u16));
- addr += sizeof(u16)*length;
+ nbytes = length * sizeof(u16);
+ do {
+ ulong linebytes = (nbytes DISP_LINE_LEN) ?
+ DISP_LINE_LEN : nbytes;
+
+ for (k = 0; k linebytes / sizeof(u16); ++k)
+ fpga_get_reg(fpga,
+(u16 *)fpga_ptr[fpga] + addr
+/ sizeof(u16) + k,
+addr + k * sizeof(u16),
+linebuf[k]);
+ print_buffer(addr, (void *)linebuf, sizeof(u16),
+linebytes / sizeof(u16),
+DISP_LINE_LEN / sizeof(u16));
+
+ nbytes -= linebytes;
+ addr += linebytes;
+ if (ctrlc()) {
+ rc = 1;
+ break;
+ }
+ } while (nbytes 0);
dp_last_fpga = fpga;
dp_last_addr = addr;
--
1.8.3
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot