common: Fix cmd_fpgad addressing

Addressing was completely broken for cmd_fpgad.

Signed-off-by: Dirk Eibach <dirk.eibach@gdsys.cc>
Signed-off-by: Stefan Roese <sr@denx.de>
master
Dirk Eibach 10 years ago committed by Stefan Roese
parent f3c89d9228
commit f1cdde2833
  1. 32
      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;

Loading…
Cancel
Save