summaryrefslogtreecommitdiff
path: root/cmd/x86/mtrr.c
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2020-07-17 08:48:28 -0600
committerBin Meng <bmeng.cn@gmail.com>2020-07-20 09:46:48 +0800
commitb2a76b3fe75a24eb4dafe32eebd8a3c98ad18354 (patch)
treecfd16835bce148643db914858b12438e830c4fe3 /cmd/x86/mtrr.c
parente68b12805b65031e06a97a2257f1ad17a1c38ae4 (diff)
x86: mtrr: Restructure so command execution is in one place
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>
Diffstat (limited to 'cmd/x86/mtrr.c')
-rw-r--r--cmd/x86/mtrr.c55
1 files changed, 36 insertions, 19 deletions
diff --git a/cmd/x86/mtrr.c b/cmd/x86/mtrr.c
index b047a9897c..b51b1cd7e2 100644
--- a/cmd/x86/mtrr.c
+++ b/cmd/x86/mtrr.c
@@ -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;
}