Cache 8MB flash instead of 4MB
Also fix the MTRR check to use the total_mtrrs variable instead of a hardcoded 8. Change-Id: I2c5ceb3910cd949f43ecf5b8aff857d6ffe0b1a5 Signed-off-by: Duncan Laurie <dlaurie@google.com> Reviewed-on: http://review.coreboot.org/873 Tested-by: build bot (Jenkins) Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
This commit is contained in:
parent
6293d30768
commit
c00dfbc1c8
|
@ -50,6 +50,24 @@ static unsigned int mtrr_msr[] = {
|
||||||
MTRRfix4K_E0000_MSR, MTRRfix4K_E8000_MSR, MTRRfix4K_F0000_MSR, MTRRfix4K_F8000_MSR,
|
MTRRfix4K_E0000_MSR, MTRRfix4K_E8000_MSR, MTRRfix4K_F0000_MSR, MTRRfix4K_F8000_MSR,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* 2 MTRRS are reserved for the operating system */
|
||||||
|
#define BIOS_MTRRS 6
|
||||||
|
#define OS_MTRRS 2
|
||||||
|
#define MTRRS (BIOS_MTRRS + OS_MTRRS)
|
||||||
|
|
||||||
|
static int total_mtrrs = MTRRS;
|
||||||
|
static int bios_mtrrs = BIOS_MTRRS;
|
||||||
|
|
||||||
|
static void detect_var_mtrrs(void)
|
||||||
|
{
|
||||||
|
msr_t msr;
|
||||||
|
|
||||||
|
msr = rdmsr(MTRRcap_MSR);
|
||||||
|
|
||||||
|
total_mtrrs = msr.lo & 0xff;
|
||||||
|
bios_mtrrs = total_mtrrs - OS_MTRRS;
|
||||||
|
}
|
||||||
|
|
||||||
void enable_fixed_mtrr(void)
|
void enable_fixed_mtrr(void)
|
||||||
{
|
{
|
||||||
msr_t msr;
|
msr_t msr;
|
||||||
|
@ -76,7 +94,7 @@ static void set_var_mtrr(
|
||||||
msr_t base, mask;
|
msr_t base, mask;
|
||||||
unsigned address_mask_high;
|
unsigned address_mask_high;
|
||||||
|
|
||||||
if (reg >= 8)
|
if (reg >= total_mtrrs)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// it is recommended that we disable and enable cache when we
|
// it is recommended that we disable and enable cache when we
|
||||||
|
@ -169,28 +187,6 @@ static inline unsigned int fls(unsigned int x)
|
||||||
* or a 156MB (128MB + 32MB - 4MB SMA) example:
|
* or a 156MB (128MB + 32MB - 4MB SMA) example:
|
||||||
* ramsize = 156MB == 128MB WB (at 0MB) + 32MB WB (at 128MB) + 4MB UC (at 156MB)
|
* ramsize = 156MB == 128MB WB (at 0MB) + 32MB WB (at 128MB) + 4MB UC (at 156MB)
|
||||||
*/
|
*/
|
||||||
/* 2 MTRRS are reserved for the operating system */
|
|
||||||
#if 1
|
|
||||||
#define BIOS_MTRRS 6
|
|
||||||
#define OS_MTRRS 2
|
|
||||||
#else
|
|
||||||
#define BIOS_MTRRS 8
|
|
||||||
#define OS_MTRRS 0
|
|
||||||
#endif
|
|
||||||
#define MTRRS (BIOS_MTRRS + OS_MTRRS)
|
|
||||||
|
|
||||||
static int total_mtrrs = MTRRS;
|
|
||||||
static int bios_mtrrs = BIOS_MTRRS;
|
|
||||||
|
|
||||||
static void detect_var_mtrrs(void)
|
|
||||||
{
|
|
||||||
msr_t msr;
|
|
||||||
|
|
||||||
msr = rdmsr(MTRRcap_MSR);
|
|
||||||
|
|
||||||
total_mtrrs = msr.lo & 0xff;
|
|
||||||
bios_mtrrs = total_mtrrs - 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void set_fixed_mtrrs(unsigned int first, unsigned int last, unsigned char type)
|
static void set_fixed_mtrrs(unsigned int first, unsigned int last, unsigned char type)
|
||||||
{
|
{
|
||||||
|
@ -504,7 +500,7 @@ void x86_setup_var_mtrrs(unsigned int address_bits, unsigned int above4gb)
|
||||||
* complete ROM now that we actually have RAM.
|
* complete ROM now that we actually have RAM.
|
||||||
*/
|
*/
|
||||||
if (boot_cpu() && (acpi_slp_type != 3)) {
|
if (boot_cpu() && (acpi_slp_type != 3)) {
|
||||||
set_var_mtrr(total_mtrrs-1, (4096-4)*1024, 4*1024,
|
set_var_mtrr(total_mtrrs - 1, (4096 - 8)*1024, 8 * 1024,
|
||||||
MTRR_TYPE_WRPROT, address_bits);
|
MTRR_TYPE_WRPROT, address_bits);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue