]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
x86: mtrr: Restructure so command execution is in one place
authorSimon Glass <sjg@chromium.org>
Fri, 17 Jul 2020 14:48:28 +0000 (08:48 -0600)
committerBin Meng <bmeng.cn@gmail.com>
Mon, 20 Jul 2020 01:46:48 +0000 (09:46 +0800)
At present do_mtrr() does the 'list' subcommand at the top and the rest
below. Update it to do them all in the same place so we can (in a later
patch) add parsing of the CPU number for all subcommands.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Wolfgang Wallner <wolfgang.wallner@br-automation.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
cmd/x86/mtrr.c

index b047a9897c2e948b58199fe18e1ceff470ec1c00..b51b1cd7e2a234d350e8a0ac6b707aa578508136 100644 (file)
@@ -98,31 +98,48 @@ static int do_mtrr_set(int cpu_select, uint reg, int argc, char *const argv[])
 static int do_mtrr(struct cmd_tbl *cmdtp, int flag, int argc,
                   char *const argv[])
 {
-       const char *cmd;
+       int cmd;
        int cpu_select;
        uint reg;
+       int ret;
 
        cpu_select = MP_SELECT_BSP;
-       cmd = argv[1];
-       if (argc < 2 || *cmd == 'l')
+       argc--;
+       argv++;
+       cmd = argv[0] ? *argv[0] : 0;
+       if (argc < 1 || !cmd) {
+               cmd = 'l';
+               reg = 0;
+       } else {
+               if (argc < 2)
+                       return CMD_RET_USAGE;
+               reg = simple_strtoul(argv[1], NULL, 16);
+               if (reg >= MTRR_COUNT) {
+                       printf("Invalid register number\n");
+                       return CMD_RET_USAGE;
+               }
+       }
+       if (cmd == 'l') {
                return do_mtrr_list(cpu_select);
-       argc -= 2;
-       argv += 2;
-       if (argc <= 0)
-               return CMD_RET_USAGE;
-       reg = simple_strtoul(argv[0], NULL, 16);
-       if (reg >= MTRR_COUNT) {
-               printf("Invalid register number\n");
-               return CMD_RET_USAGE;
+       } else {
+               switch (cmd) {
+               case 'e':
+                       ret = mtrr_set_valid(cpu_select, reg, true);
+                       break;
+               case 'd':
+                       ret = mtrr_set_valid(cpu_select, reg, false);
+                       break;
+               case 's':
+                       ret = do_mtrr_set(cpu_select, reg, argc - 2, argv + 2);
+                       break;
+               default:
+                       return CMD_RET_USAGE;
+               }
+               if (ret) {
+                       printf("Operation failed (err=%d)\n", ret);
+                       return CMD_RET_FAILURE;
+               }
        }
-       if (*cmd == 'e')
-               return mtrr_set_valid(cpu_select, reg, true);
-       else if (*cmd == 'd')
-               return mtrr_set_valid(cpu_select, reg, false);
-       else if (*cmd == 's')
-               return do_mtrr_set(cpu_select, reg, argc - 1, argv + 1);
-       else
-               return CMD_RET_USAGE;
 
        return 0;
 }