intel/nehalem post-car: Use postcar_frame for MTRR setup
Adapt implementation from skylake to prepare for removal of HIGH_MEMORY_SAVE and moving on to RELOCATABLE_RAMSTAGE. With the change, CBMEM and SMM regions are set to WRBACK with MTRRs and romstage ram stack is moved to CBMEM. Change-Id: I84f6fa6f37a7348b2d4ad9f08a18bebe4b1e34e2 Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com> Reviewed-on: https://review.coreboot.org/15793 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Arthur Heymans <arthur@aheymans.xyz>
This commit is contained in:
@@ -170,8 +170,8 @@ before_romstage:
|
||||
/* Call romstage.c main function. */
|
||||
call romstage_main
|
||||
/* Save return value from romstage_main. It contains the stack to use
|
||||
* after cache-as-ram is torn down.
|
||||
*/
|
||||
* after cache-as-ram is torn down. It also contains the information
|
||||
* for setting up MTRRs. */
|
||||
movl %eax, %esp
|
||||
|
||||
post_code(0x30)
|
||||
@@ -220,31 +220,48 @@ before_romstage:
|
||||
|
||||
post_code(0x38)
|
||||
|
||||
/* Enable Write Back and Speculative Reads for the first MB
|
||||
* and ramstage.
|
||||
*/
|
||||
/* Clear all of the variable MTRRs. */
|
||||
popl %ebx
|
||||
movl $MTRR_PHYS_BASE(0), %ecx
|
||||
movl $(0x00000000 | MTRR_TYPE_WRBACK), %eax
|
||||
xorl %edx, %edx
|
||||
wrmsr
|
||||
movl $MTRR_PHYS_MASK(0), %ecx
|
||||
movl $(~(CACHE_TMP_RAMTOP - 1) | MTRR_PHYS_MASK_VALID), %eax
|
||||
movl $CPU_PHYSMASK_HI, %edx // 36bit address space
|
||||
wrmsr
|
||||
clr %eax
|
||||
clr %edx
|
||||
|
||||
#if CACHE_ROM_SIZE
|
||||
/* Enable Caching and speculative Reads for the
|
||||
* complete ROM now that we actually have RAM.
|
||||
*/
|
||||
movl $MTRR_PHYS_BASE(1), %ecx
|
||||
movl $(CACHE_ROM_BASE | MTRR_TYPE_WRPROT), %eax
|
||||
xorl %edx, %edx
|
||||
1:
|
||||
testl %ebx, %ebx
|
||||
jz 1f
|
||||
wrmsr /* Write MTRR base. */
|
||||
inc %ecx
|
||||
wrmsr /* Write MTRR mask. */
|
||||
inc %ecx
|
||||
dec %ebx
|
||||
jmp 1b
|
||||
|
||||
1:
|
||||
/* Get number of MTRRs. */
|
||||
popl %ebx
|
||||
movl $MTRR_PHYS_BASE(0), %ecx
|
||||
2:
|
||||
testl %ebx, %ebx
|
||||
jz 2f
|
||||
|
||||
/* Low 32 bits of MTRR base. */
|
||||
popl %eax
|
||||
/* Upper 32 bits of MTRR base. */
|
||||
popl %edx
|
||||
/* Write MTRR base. */
|
||||
wrmsr
|
||||
movl $MTRR_PHYS_MASK(1), %ecx
|
||||
movl $(~(CACHE_ROM_SIZE - 1) | MTRR_PHYS_MASK_VALID), %eax
|
||||
movl $CPU_PHYSMASK_HI, %edx
|
||||
inc %ecx
|
||||
/* Low 32 bits of MTRR mask. */
|
||||
popl %eax
|
||||
/* Upper 32 bits of MTRR mask. */
|
||||
popl %edx
|
||||
/* Write MTRR mask. */
|
||||
wrmsr
|
||||
#endif
|
||||
inc %ecx
|
||||
|
||||
dec %ebx
|
||||
jmp 2b
|
||||
2:
|
||||
|
||||
post_code(0x39)
|
||||
|
||||
|
Reference in New Issue
Block a user