summaryrefslogtreecommitdiff
path: root/cmd/x86
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2020-07-17 17:48:27 +0300
committerBin Meng <bmeng.cn@gmail.com>2020-07-20 04:46:47 +0300
commite68b12805b65031e06a97a2257f1ad17a1c38ae4 (patch)
tree3fbc8f9273a942ee0d4c0bd99cd60fdae2c6d4d8 /cmd/x86
parent8dda2baa976a3b4caa9c6e52a861adb0431f7dbf (diff)
downloadu-boot-e68b12805b65031e06a97a2257f1ad17a1c38ae4.tar.xz
x86: mtrr: Update the command to use the new mtrr calls
Use the multi-CPU calls to set the MTRR values. This still supports only the boot CPU for now. 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')
-rw-r--r--cmd/x86/mtrr.c34
1 files changed, 8 insertions, 26 deletions
diff --git a/cmd/x86/mtrr.c b/cmd/x86/mtrr.c
index 46ef6a2830..b047a9897c 100644
--- a/cmd/x86/mtrr.c
+++ b/cmd/x86/mtrr.c
@@ -59,14 +59,14 @@ static int do_mtrr_list(int cpu_select)
return 0;
}
-static int do_mtrr_set(uint reg, int argc, char *const argv[])
+static int do_mtrr_set(int cpu_select, uint reg, int argc, char *const argv[])
{
const char *typename = argv[0];
- struct mtrr_state state;
uint32_t start, size;
uint64_t base, mask;
int i, type = -1;
bool valid;
+ int ret;
if (argc < 3)
return CMD_RET_USAGE;
@@ -88,27 +88,9 @@ static int do_mtrr_set(uint reg, int argc, char *const argv[])
if (valid)
mask |= MTRR_PHYS_MASK_VALID;
- mtrr_open(&state, true);
- wrmsrl(MTRR_PHYS_BASE_MSR(reg), base);
- wrmsrl(MTRR_PHYS_MASK_MSR(reg), mask);
- mtrr_close(&state, true);
-
- return 0;
-}
-
-static int mtrr_set_valid_(int reg, bool valid)
-{
- struct mtrr_state state;
- uint64_t mask;
-
- mtrr_open(&state, true);
- mask = native_read_msr(MTRR_PHYS_MASK_MSR(reg));
- if (valid)
- mask |= MTRR_PHYS_MASK_VALID;
- else
- mask &= ~MTRR_PHYS_MASK_VALID;
- wrmsrl(MTRR_PHYS_MASK_MSR(reg), mask);
- mtrr_close(&state, true);
+ ret = mtrr_set(cpu_select, reg, base, mask);
+ if (ret)
+ return CMD_RET_FAILURE;
return 0;
}
@@ -134,11 +116,11 @@ static int do_mtrr(struct cmd_tbl *cmdtp, int flag, int argc,
return CMD_RET_USAGE;
}
if (*cmd == 'e')
- return mtrr_set_valid_(reg, true);
+ return mtrr_set_valid(cpu_select, reg, true);
else if (*cmd == 'd')
- return mtrr_set_valid_(reg, false);
+ return mtrr_set_valid(cpu_select, reg, false);
else if (*cmd == 's')
- return do_mtrr_set(reg, argc - 1, argv + 1);
+ return do_mtrr_set(cpu_select, reg, argc - 1, argv + 1);
else
return CMD_RET_USAGE;