-/* ------------------------------------------------------------------------- */
-/* command form:
- * fpga <op> <device number> <data addr> <datasize>
- * where op is 'load', 'dump', or 'info'
- * If there is no device number field, the fpga environment variable is used.
- * If there is no data addr field, the fpgadata environment variable is used.
- * The info command requires no data address field.
- */
-int do_fpga(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
+ if (devstr)
+ /* Should be strtol to handle -1 cases */
+ dev = simple_strtol(devstr, NULL, 16);
+
+ if (dev == FPGA_INVALID_DEVICE && arg)
+ dev = simple_strtol(arg, NULL, 16);
+
+ debug("%s: device = %ld\n", __func__, dev);
+
+ return dev;
+}
+
+static int do_fpga_check_params(long *dev, long *fpga_data, size_t *data_size,
+ cmd_tbl_t *cmdtp, int argc, char *const argv[])
+{
+ size_t local_data_size;
+ long local_fpga_data;
+
+ debug("%s %d, %d\n", __func__, argc, cmdtp->maxargs);
+
+ if (argc != cmdtp->maxargs) {
+ debug("fpga: incorrect parameters passed\n");
+ return CMD_RET_USAGE;
+ }
+
+ *dev = do_fpga_get_device(argv[0]);
+
+ local_fpga_data = simple_strtol(argv[1], NULL, 16);
+ if (!local_fpga_data) {
+ debug("fpga: zero fpga_data address\n");
+ return CMD_RET_USAGE;
+ }
+ *fpga_data = local_fpga_data;
+
+ local_data_size = simple_strtoul(argv[2], NULL, 16);
+ if (!local_data_size) {
+ debug("fpga: zero size\n");
+ return CMD_RET_USAGE;
+ }
+ *data_size = local_data_size;
+
+ return 0;
+}
+
+#if defined(CONFIG_CMD_FPGA_LOAD_SECURE)
+int do_fpga_loads(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])