mirror of
https://xff.cz/git/u-boot/
synced 2025-09-01 08:42:12 +02:00
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>
This commit is contained in:
@@ -59,14 +59,14 @@ static int do_mtrr_list(int cpu_select)
|
|||||||
return 0;
|
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];
|
const char *typename = argv[0];
|
||||||
struct mtrr_state state;
|
|
||||||
uint32_t start, size;
|
uint32_t start, size;
|
||||||
uint64_t base, mask;
|
uint64_t base, mask;
|
||||||
int i, type = -1;
|
int i, type = -1;
|
||||||
bool valid;
|
bool valid;
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (argc < 3)
|
if (argc < 3)
|
||||||
return CMD_RET_USAGE;
|
return CMD_RET_USAGE;
|
||||||
@@ -88,27 +88,9 @@ static int do_mtrr_set(uint reg, int argc, char *const argv[])
|
|||||||
if (valid)
|
if (valid)
|
||||||
mask |= MTRR_PHYS_MASK_VALID;
|
mask |= MTRR_PHYS_MASK_VALID;
|
||||||
|
|
||||||
mtrr_open(&state, true);
|
ret = mtrr_set(cpu_select, reg, base, mask);
|
||||||
wrmsrl(MTRR_PHYS_BASE_MSR(reg), base);
|
if (ret)
|
||||||
wrmsrl(MTRR_PHYS_MASK_MSR(reg), mask);
|
return CMD_RET_FAILURE;
|
||||||
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);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -134,11 +116,11 @@ static int do_mtrr(struct cmd_tbl *cmdtp, int flag, int argc,
|
|||||||
return CMD_RET_USAGE;
|
return CMD_RET_USAGE;
|
||||||
}
|
}
|
||||||
if (*cmd == 'e')
|
if (*cmd == 'e')
|
||||||
return mtrr_set_valid_(reg, true);
|
return mtrr_set_valid(cpu_select, reg, true);
|
||||||
else if (*cmd == 'd')
|
else if (*cmd == 'd')
|
||||||
return mtrr_set_valid_(reg, false);
|
return mtrr_set_valid(cpu_select, reg, false);
|
||||||
else if (*cmd == 's')
|
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
|
else
|
||||||
return CMD_RET_USAGE;
|
return CMD_RET_USAGE;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user