123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- // SPDX-License-Identifier: GPL-2.0+
- /*
- * (C) Copyright 2013
- * Dirk Eibach, Guntermann & Drunck GmbH, dirk.eibach@gdsys.cc
- *
- * based on cmd_mem.c
- * (C) Copyright 2000
- * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
- */
- #include <common.h>
- #include <command.h>
- #include <console.h>
- #include <gdsys_fpga.h>
- static uint dp_last_fpga;
- static uint dp_last_addr;
- static uint dp_last_length = 0x40;
- /*
- * FPGA Memory Display
- *
- * Syntax:
- * fpgad {fpga} {addr} {len}
- */
- #define DISP_LINE_LEN 16
- int do_fpga_md(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
- {
- unsigned int k;
- unsigned int fpga;
- ulong addr, length;
- int rc = 0;
- u16 linebuf[DISP_LINE_LEN/sizeof(u16)];
- ulong nbytes;
- /*
- * We use the last specified parameters, unless new ones are
- * entered.
- */
- fpga = dp_last_fpga;
- addr = dp_last_addr;
- length = dp_last_length;
- if (argc < 3)
- return CMD_RET_USAGE;
- if ((flag & CMD_FLAG_REPEAT) == 0) {
- /*
- * FPGA is specified since argc > 2
- */
- fpga = simple_strtoul(argv[1], NULL, 16);
- /*
- * Address is specified since argc > 2
- */
- addr = simple_strtoul(argv[2], NULL, 16);
- /*
- * If another parameter, it is the length to display.
- * Length is the number of objects, not number of bytes.
- */
- if (argc > 3)
- length = simple_strtoul(argv[3], NULL, 16);
- }
- 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;
- dp_last_length = length;
- return rc;
- }
- U_BOOT_CMD(
- fpgad, 4, 1, do_fpga_md,
- "fpga register display",
- "fpga address [# of objects]"
- );
|