x86: ivybridge: Add a way to turn off the CAR
Cache-as-RAM should be turned off when we relocate since we want to run from RAM. Add a function to perform this task. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
db55bd7dad
commit
7b00896ade
|
@ -163,6 +163,52 @@ wait_for_sipi:
|
||||||
/* return */
|
/* return */
|
||||||
jmp car_init_ret
|
jmp car_init_ret
|
||||||
|
|
||||||
|
.globl car_uninit
|
||||||
|
car_uninit:
|
||||||
|
/* Disable cache */
|
||||||
|
movl %cr0, %eax
|
||||||
|
orl $X86_CR0_CD, %eax
|
||||||
|
movl %eax, %cr0
|
||||||
|
|
||||||
|
/* Disable MTRRs */
|
||||||
|
movl $MTRR_DEF_TYPE_MSR, %ecx
|
||||||
|
rdmsr
|
||||||
|
andl $(~MTRR_DEF_TYPE_EN), %eax
|
||||||
|
wrmsr
|
||||||
|
|
||||||
|
/* Disable the no-eviction run state */
|
||||||
|
movl NOEVICTMOD_MSR, %ecx
|
||||||
|
rdmsr
|
||||||
|
andl $~2, %eax
|
||||||
|
wrmsr
|
||||||
|
|
||||||
|
invd
|
||||||
|
|
||||||
|
/* Disable the no-eviction mode */
|
||||||
|
rdmsr
|
||||||
|
andl $~1, %eax
|
||||||
|
wrmsr
|
||||||
|
|
||||||
|
#ifdef CONFIG_CACHE_MRC_BIN
|
||||||
|
/* Clear the MTRR that was used to cache MRC */
|
||||||
|
xorl %eax, %eax
|
||||||
|
xorl %edx, %edx
|
||||||
|
movl $MTRR_PHYS_BASE_MSR(2), %ecx
|
||||||
|
wrmsr
|
||||||
|
movl $MTRR_PHYS_MASK_MSR(2), %ecx
|
||||||
|
wrmsr
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Enable MTRRs */
|
||||||
|
movl $MTRR_DEF_TYPE_MSR, %ecx
|
||||||
|
rdmsr
|
||||||
|
orl $MTRR_DEF_TYPE_EN, %eax
|
||||||
|
wrmsr
|
||||||
|
|
||||||
|
invd
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
mtrr_table:
|
mtrr_table:
|
||||||
/* Fixed MTRRs */
|
/* Fixed MTRRs */
|
||||||
.word 0x250, 0x258, 0x259
|
.word 0x250, 0x258, 0x259
|
||||||
|
|
Loading…
Reference in New Issue