cmd: fpga: Reorder the arguments parsing code
authorSiva Durga Prasad Paladugu <siva.durga.paladugu@xilinx.com>
Thu, 31 May 2018 09:40:21 +0000 (15:10 +0530)
committerMichal Simek <michal.simek@xilinx.com>
Fri, 1 Jun 2018 09:37:31 +0000 (11:37 +0200)
This patch modifies the arguments parsing code by parsing
based on requested operation for fpga loadfs and then
parses the most common/basic args for other fpga load
commands. This makes it easy for new command extensions
or additions especially the commands with more args.

Signed-off-by: Siva Durga Prasad Paladugu <siva.durga.paladugu@xilinx.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
cmd/fpga.c

index 14ad4e52666abd4a0b1db6c5f99918f973cc1119..3f09d424135f87ca50f34b41b4b8dffa9b06dbb5 100644 (file)
@@ -60,15 +60,31 @@ int do_fpga(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
        if (datastr)
                fpga_data = (void *)simple_strtoul(datastr, NULL, 16);
 
-       switch (argc) {
+       if (argc > 9 || argc < 2) {
+               debug("%s: Too many or too few args (%d)\n", __func__, argc);
+               return CMD_RET_USAGE;
+       }
+
+       op = (int)fpga_get_op(argv[1]);
+
+       switch (op) {
 #if defined(CONFIG_CMD_FPGA_LOADFS)
-       case 9:
+       case FPGA_LOADFS:
+               if (argc < 9)
+                       return CMD_RET_USAGE;
                fpga_fsinfo.blocksize = (unsigned int)
-                                            simple_strtoul(argv[5], NULL, 16);
+                                       simple_strtoul(argv[5], NULL, 16);
                fpga_fsinfo.interface = argv[6];
                fpga_fsinfo.dev_part = argv[7];
                fpga_fsinfo.filename = argv[8];
+               argc = 5;
+               break;
 #endif
+       default:
+               break;
+       }
+
+       switch (argc) {
        case 5:         /* fpga <op> <dev> <data> <datasize> */
                data_size = simple_strtoul(argv[4], NULL, 16);
 
@@ -117,15 +133,6 @@ int do_fpga(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
                              __func__, (ulong)fpga_data);
                        dev = FPGA_INVALID_DEVICE;      /* reset device num */
                }
-
-       case 2:         /* fpga <op> */
-               op = (int)fpga_get_op(argv[1]);
-               break;
-
-       default:
-               debug("%s: Too many or too few args (%d)\n", __func__, argc);
-               op = FPGA_NONE; /* force usage display */
-               break;
        }
 
        if (dev == FPGA_INVALID_DEVICE) {