diff options
-rw-r--r-- | src/arch/x86/include/arch/memlayout.h | 4 | ||||
-rw-r--r-- | src/cpu/amd/agesa/s3_resume.c | 4 | ||||
-rw-r--r-- | src/cpu/amd/car/post_cache_as_ram.c | 4 | ||||
-rw-r--r-- | src/cpu/amd/family_10h-family_15h/init_cpus.c | 2 | ||||
-rw-r--r-- | src/cpu/amd/model_fxx/init_cpus.c | 2 | ||||
-rw-r--r-- | src/cpu/amd/model_fxx/model_fxx_init.c | 4 | ||||
-rw-r--r-- | src/cpu/amd/pi/s3_resume.c | 4 | ||||
-rw-r--r-- | src/cpu/intel/car/cache_as_ram_ht.inc | 2 | ||||
-rw-r--r-- | src/cpu/intel/haswell/romstage.c | 4 | ||||
-rw-r--r-- | src/cpu/intel/model_2065x/cache_as_ram.inc | 2 | ||||
-rw-r--r-- | src/cpu/intel/model_206ax/cache_as_ram.inc | 2 | ||||
-rw-r--r-- | src/cpu/intel/model_6ex/cache_as_ram.inc | 2 | ||||
-rw-r--r-- | src/cpu/via/car/cache_as_ram.inc | 4 | ||||
-rw-r--r-- | src/drivers/intel/fsp1_1/stack.c | 4 | ||||
-rw-r--r-- | src/include/cpu/x86/mtrr.h | 12 | ||||
-rw-r--r-- | src/northbridge/intel/i3100/raminit.c | 4 | ||||
-rw-r--r-- | src/soc/intel/baytrail/romstage/romstage.c | 4 | ||||
-rw-r--r-- | src/soc/intel/broadwell/romstage/stack.c | 4 |
18 files changed, 35 insertions, 33 deletions
diff --git a/src/arch/x86/include/arch/memlayout.h b/src/arch/x86/include/arch/memlayout.h index 840ceb02eb..5f5cba64e2 100644 --- a/src/arch/x86/include/arch/memlayout.h +++ b/src/arch/x86/include/arch/memlayout.h @@ -24,4 +24,8 @@ #define ARCH_STAGE_HAS_BSS_SECTION 0 #endif +#if !defined(CONFIG_RAMTOP) || !CONFIG_RAMTOP +# error "CONFIG_RAMTOP not configured" +#endif + #endif /* __ARCH_MEMLAYOUT_H */ diff --git a/src/cpu/amd/agesa/s3_resume.c b/src/cpu/amd/agesa/s3_resume.c index 5f486f2fea..3a60b8d06c 100644 --- a/src/cpu/amd/agesa/s3_resume.c +++ b/src/cpu/amd/agesa/s3_resume.c @@ -75,11 +75,11 @@ static void set_resume_cache(void) msr.lo &= ~(SYSCFG_MSR_MtrrFixDramEn | SYSCFG_MSR_MtrrFixDramModEn); wrmsr(SYSCFG_MSR, msr); - /* Enable caching for 0 - coreboot ram using variable mtrr */ + /* Enable cached access to RAM in the range 0M to CACHE_TMP_RAMTOP */ msr.lo = 0 | MTRR_TYPE_WRBACK; msr.hi = 0; wrmsr(MTRR_PHYS_BASE(0), msr); - msr.lo = ~(CONFIG_RAMTOP - 1) | MTRR_PHYS_MASK_VALID; + msr.lo = ~(CACHE_TMP_RAMTOP - 1) | MTRR_PHYS_MASK_VALID; msr.hi = (1 << (CONFIG_CPU_ADDR_BITS - 32)) - 1; wrmsr(MTRR_PHYS_MASK(0), msr); diff --git a/src/cpu/amd/car/post_cache_as_ram.c b/src/cpu/amd/car/post_cache_as_ram.c index 0a59696b56..1880ccb441 100644 --- a/src/cpu/amd/car/post_cache_as_ram.c +++ b/src/cpu/amd/car/post_cache_as_ram.c @@ -175,8 +175,8 @@ void cache_as_ram_new_stack (void) disable_cache_as_ram_bsp(); disable_cache(); - /* Enable cached access to RAM in the range 1M to CONFIG_RAMTOP */ - set_var_mtrr(0, 0x00000000, CONFIG_RAMTOP, MTRR_TYPE_WRBACK); + /* Enable cached access to RAM in the range 0M to CACHE_TMP_RAMTOP */ + set_var_mtrr(0, 0x00000000, CACHE_TMP_RAMTOP, MTRR_TYPE_WRBACK); enable_cache(); if (acpi_is_wakeup_s3()) { diff --git a/src/cpu/amd/family_10h-family_15h/init_cpus.c b/src/cpu/amd/family_10h-family_15h/init_cpus.c index c1ff24042d..0edded2b8c 100644 --- a/src/cpu/amd/family_10h-family_15h/init_cpus.c +++ b/src/cpu/amd/family_10h-family_15h/init_cpus.c @@ -519,7 +519,7 @@ static u32 init_cpus(u32 cpu_init_detectedx, struct sys_info *sysinfo) /* AP is ready, configure MTRRs and go to sleep */ if (set_mtrrs) - set_var_mtrr(0, 0x00000000, CONFIG_RAMTOP, MTRR_TYPE_WRBACK); + set_var_mtrr(0, 0x00000000, CACHE_TMP_RAMTOP, MTRR_TYPE_WRBACK); printk(BIOS_DEBUG, "Disabling CAR on AP %02x\n", apicid); if (is_fam15h()) { diff --git a/src/cpu/amd/model_fxx/init_cpus.c b/src/cpu/amd/model_fxx/init_cpus.c index 8968e7e0be..51e1b7c849 100644 --- a/src/cpu/amd/model_fxx/init_cpus.c +++ b/src/cpu/amd/model_fxx/init_cpus.c @@ -326,7 +326,7 @@ static u32 init_cpus(u32 cpu_init_detectedx) apicid); } lapic_write(LAPIC_MSG_REG, (apicid << 24) | 0x44); // bsp can not check it before stop_this_cpu - set_var_mtrr(0, 0x00000000, CONFIG_RAMTOP, MTRR_TYPE_WRBACK); + set_var_mtrr(0, 0x00000000, CACHE_TMP_RAMTOP, MTRR_TYPE_WRBACK); #if CONFIG_K8_REV_F_SUPPORT #if CONFIG_MEM_TRAIN_SEQ == 1 train_ram_on_node(id.nodeid, id.coreid, sysinfo, diff --git a/src/cpu/amd/model_fxx/model_fxx_init.c b/src/cpu/amd/model_fxx/model_fxx_init.c index b1e599acb1..cf0b08a04c 100644 --- a/src/cpu/amd/model_fxx/model_fxx_init.c +++ b/src/cpu/amd/model_fxx/model_fxx_init.c @@ -173,12 +173,12 @@ static void set_init_ecc_mtrrs(void) wrmsr(MTRR_PHYS_MASK(i), zero); } - /* Write back cache the first 1MB */ + /* Write back cache from 0x0 to CACHE_TMP_RAMTOP. */ msr.hi = 0x00000000; msr.lo = 0x00000000 | MTRR_TYPE_WRBACK; wrmsr(MTRR_PHYS_BASE(0), msr); msr.hi = 0x000000ff; - msr.lo = ~((CONFIG_RAMTOP) - 1) | 0x800; + msr.lo = ~((CACHE_TMP_RAMTOP) - 1) | 0x800; wrmsr(MTRR_PHYS_MASK(0), msr); /* Set the default type to write combining */ diff --git a/src/cpu/amd/pi/s3_resume.c b/src/cpu/amd/pi/s3_resume.c index 53172d48f6..b6d363377a 100644 --- a/src/cpu/amd/pi/s3_resume.c +++ b/src/cpu/amd/pi/s3_resume.c @@ -271,11 +271,11 @@ static void set_resume_cache(void) msr.lo &= ~(SYSCFG_MSR_MtrrFixDramEn | SYSCFG_MSR_MtrrFixDramModEn); wrmsr(SYSCFG_MSR, msr); - /* Enable caching for 0 - coreboot ram using variable mtrr */ + /* Enable cached access to RAM in the range 0M to CACHE_TMP_RAMTOP */ msr.lo = 0 | MTRR_TYPE_WRBACK; msr.hi = 0; wrmsr(MTRR_PHYS_BASE(0), msr); - msr.lo = ~(CONFIG_RAMTOP - 1) | MTRR_PHYS_MASK_VALID; + msr.lo = ~(CACHE_TMP_RAMTOP - 1) | MTRR_PHYS_MASK_VALID; msr.hi = (1 << (CONFIG_CPU_ADDR_BITS - 32)) - 1; wrmsr(MTRR_PHYS_MASK(0), msr); diff --git a/src/cpu/intel/car/cache_as_ram_ht.inc b/src/cpu/intel/car/cache_as_ram_ht.inc index 1e21d9dc6d..095b9b6cda 100644 --- a/src/cpu/intel/car/cache_as_ram_ht.inc +++ b/src/cpu/intel/car/cache_as_ram_ht.inc @@ -388,7 +388,7 @@ no_msr_11e: wrmsr movl $MTRR_PHYS_MASK(0), %ecx rdmsr - movl $(~(CONFIG_RAMTOP - 1) | MTRR_PHYS_MASK_VALID), %eax + movl $(~(CACHE_TMP_RAMTOP - 1) | MTRR_PHYS_MASK_VALID), %eax wrmsr #if CACHE_ROM_SIZE diff --git a/src/cpu/intel/haswell/romstage.c b/src/cpu/intel/haswell/romstage.c index b8ce5d6d43..0e8fd09837 100644 --- a/src/cpu/intel/haswell/romstage.c +++ b/src/cpu/intel/haswell/romstage.c @@ -119,9 +119,9 @@ static void *setup_romstage_stack_after_car(void) slot = stack_push(slot, ~(CACHE_ROM_SIZE - 1) | MTRR_TYPE_WRPROT); num_mtrrs++; - /* Cache RAM as WB from 0 -> CONFIG_RAMTOP. */ + /* Cache RAM as WB from 0 -> CACHE_TMP_RAMTOP. */ slot = stack_push(slot, mtrr_mask_upper); /* upper mask */ - slot = stack_push(slot, ~(CONFIG_RAMTOP - 1) | MTRR_PHYS_MASK_VALID); + slot = stack_push(slot, ~(CACHE_TMP_RAMTOP - 1) | MTRR_PHYS_MASK_VALID); slot = stack_push(slot, 0); /* upper base */ slot = stack_push(slot, 0 | MTRR_TYPE_WRBACK); num_mtrrs++; diff --git a/src/cpu/intel/model_2065x/cache_as_ram.inc b/src/cpu/intel/model_2065x/cache_as_ram.inc index 51af5c69d2..e6d95d572a 100644 --- a/src/cpu/intel/model_2065x/cache_as_ram.inc +++ b/src/cpu/intel/model_2065x/cache_as_ram.inc @@ -233,7 +233,7 @@ before_romstage: xorl %edx, %edx wrmsr movl $MTRR_PHYS_MASK(0), %ecx - movl $(~(CONFIG_RAMTOP - 1) | MTRR_PHYS_MASK_VALID), %eax + movl $(~(CACHE_TMP_RAMTOP - 1) | MTRR_PHYS_MASK_VALID), %eax movl $CPU_PHYSMASK_HI, %edx // 36bit address space wrmsr diff --git a/src/cpu/intel/model_206ax/cache_as_ram.inc b/src/cpu/intel/model_206ax/cache_as_ram.inc index 0dc3cab1dd..a1f5cc9d80 100644 --- a/src/cpu/intel/model_206ax/cache_as_ram.inc +++ b/src/cpu/intel/model_206ax/cache_as_ram.inc @@ -243,7 +243,7 @@ before_romstage: xorl %edx, %edx wrmsr movl $MTRR_PHYS_MASK(0), %ecx - movl $(~(CONFIG_RAMTOP - 1) | MTRR_PHYS_MASK_VALID), %eax + movl $(~(CACHE_TMP_RAMTOP - 1) | MTRR_PHYS_MASK_VALID), %eax movl $CPU_PHYSMASK_HI, %edx // 36bit address space wrmsr diff --git a/src/cpu/intel/model_6ex/cache_as_ram.inc b/src/cpu/intel/model_6ex/cache_as_ram.inc index 79383e163f..6b80e7ae7b 100644 --- a/src/cpu/intel/model_6ex/cache_as_ram.inc +++ b/src/cpu/intel/model_6ex/cache_as_ram.inc @@ -182,7 +182,7 @@ clear_mtrrs: xorl %edx, %edx wrmsr movl $MTRR_PHYS_MASK(0), %ecx - movl $(~(CONFIG_RAMTOP - 1) | MTRR_PHYS_MASK_VALID), %eax + movl $(~(CACHE_TMP_RAMTOP - 1) | MTRR_PHYS_MASK_VALID), %eax movl $CPU_PHYSMASK_HI, %edx wrmsr diff --git a/src/cpu/via/car/cache_as_ram.inc b/src/cpu/via/car/cache_as_ram.inc index 2f61b9138a..8d02e5d2ec 100644 --- a/src/cpu/via/car/cache_as_ram.inc +++ b/src/cpu/via/car/cache_as_ram.inc @@ -225,7 +225,7 @@ testok: movl $(MTRR_DEF_TYPE_EN), %eax wrmsr - /* Enable caching for 0..CONFIG_RAMTOP. */ + /* Enable caching for 0..CACHE_TMP_RAMTOP. */ movl $MTRR_PHYS_BASE(0), %ecx xorl %edx, %edx movl $(0x0 | MTRR_TYPE_WRBACK), %eax @@ -233,7 +233,7 @@ testok: movl $MTRR_PHYS_MASK(0), %ecx movl $0x0000000f, %edx /* AMD 40 bit 0xff */ - movl $(~(CONFIG_RAMTOP - 1) | MTRR_PHYS_MASK_VALID), %eax + movl $(~(CACHE_TMP_RAMTOP - 1) | MTRR_PHYS_MASK_VALID), %eax wrmsr /* Cache XIP_ROM area to speedup coreboot code. */ diff --git a/src/drivers/intel/fsp1_1/stack.c b/src/drivers/intel/fsp1_1/stack.c index e048229baa..65ba235a90 100644 --- a/src/drivers/intel/fsp1_1/stack.c +++ b/src/drivers/intel/fsp1_1/stack.c @@ -88,9 +88,9 @@ void *setup_stack_and_mtrrs(void) * +0: Number of variable MTRRs to clear */ - /* Cache RAM as WB from 0 -> CONFIG_RAMTOP. */ + /* Cache RAM as WB from 0 -> CACHE_TMP_RAMTOP. */ slot = stack_push32(slot, mtrr_mask_upper); /* upper mask */ - slot = stack_push32(slot, ~(CONFIG_RAMTOP - 1) | MTRR_PHYS_MASK_VALID); + slot = stack_push32(slot, ~(CACHE_TMP_RAMTOP - 1) | MTRR_PHYS_MASK_VALID); slot = stack_push32(slot, 0); /* upper base */ slot = stack_push32(slot, 0 | MTRR_TYPE_WRBACK); num_mtrrs++; diff --git a/src/include/cpu/x86/mtrr.h b/src/include/cpu/x86/mtrr.h index 4eb4f135c3..f33a4ace4c 100644 --- a/src/include/cpu/x86/mtrr.h +++ b/src/include/cpu/x86/mtrr.h @@ -91,9 +91,11 @@ int get_free_var_mtrr(void); (x>>6)|(x>>7)|(x>>8)|((1<<18)-1)) #define _ALIGN_UP_POW2(x) ((x + _POW2_MASK(x)) & ~_POW2_MASK(x)) -#if !defined(CONFIG_RAMTOP) || !CONFIG_RAMTOP -# error "CONFIG_RAMTOP not configured" -#endif +/* At the end of romstage, low ram 0..CACHE_TM_RAMTOP may be set + * as write-back cacheable to speed up ramstage decompression. + * Note MTRR boundaries, must be power of two. + */ +#define CACHE_TMP_RAMTOP (16<<20) #if ((CONFIG_XIP_ROM_SIZE & (CONFIG_XIP_ROM_SIZE -1)) != 0) # error "CONFIG_XIP_ROM_SIZE is not a power of 2" @@ -122,8 +124,4 @@ int get_free_var_mtrr(void); #define CACHE_ROM_BASE (((1<<20) - (CACHE_ROM_SIZE>>12))<<12) -#if (CONFIG_RAMTOP & (CONFIG_RAMTOP - 1)) != 0 -# error "CONFIG_RAMTOP must be a power of 2" -#endif - #endif /* CPU_X86_MTRR_H */ diff --git a/src/northbridge/intel/i3100/raminit.c b/src/northbridge/intel/i3100/raminit.c index 53bf17c8d2..b69efbc4bb 100644 --- a/src/northbridge/intel/i3100/raminit.c +++ b/src/northbridge/intel/i3100/raminit.c @@ -928,9 +928,9 @@ static void set_receive_enable(const struct mem_controller *ctrl) static void cache_ramstage(void) { - /* Enable caching for lower 1MB and ram stage using variable mtrr */ + /* Enable cached access to RAM in the range 0M to CACHE_TMP_RAMTOP */ disable_cache(); - set_var_mtrr(0, 0x00000000, CONFIG_RAMTOP, MTRR_TYPE_WRBACK); + set_var_mtrr(0, 0x00000000, CACHE_TMP_RAMTOP, MTRR_TYPE_WRBACK); enable_cache(); } diff --git a/src/soc/intel/baytrail/romstage/romstage.c b/src/soc/intel/baytrail/romstage/romstage.c index 36682352cb..d3eea26604 100644 --- a/src/soc/intel/baytrail/romstage/romstage.c +++ b/src/soc/intel/baytrail/romstage/romstage.c @@ -312,9 +312,9 @@ static void *setup_stack_and_mttrs(void) slot = stack_push(slot, ~(CONFIG_ROM_SIZE - 1) | MTRR_TYPE_WRPROT); num_mtrrs++; - /* Cache RAM as WB from 0 -> CONFIG_RAMTOP. */ + /* Cache RAM as WB from 0 -> CACHE_TMP_RAMTOP. */ slot = stack_push(slot, mtrr_mask_upper); /* upper mask */ - slot = stack_push(slot, ~(CONFIG_RAMTOP - 1) | MTRR_PHYS_MASK_VALID); + slot = stack_push(slot, ~(CACHE_TMP_RAMTOP - 1) | MTRR_PHYS_MASK_VALID); slot = stack_push(slot, 0); /* upper base */ slot = stack_push(slot, 0 | MTRR_TYPE_WRBACK); num_mtrrs++; diff --git a/src/soc/intel/broadwell/romstage/stack.c b/src/soc/intel/broadwell/romstage/stack.c index 5c7a6e3cfa..6c602a800d 100644 --- a/src/soc/intel/broadwell/romstage/stack.c +++ b/src/soc/intel/broadwell/romstage/stack.c @@ -83,9 +83,9 @@ void *setup_stack_and_mttrs(void) slot = stack_push(slot, ~(CONFIG_ROM_SIZE - 1) | MTRR_TYPE_WRPROT); num_mtrrs++; - /* Cache RAM as WB from 0 -> CONFIG_RAMTOP. */ + /* Cache RAM as WB from 0 -> CACHE_TMP_RAMTOP. */ slot = stack_push(slot, mtrr_mask_upper); /* upper mask */ - slot = stack_push(slot, ~(CONFIG_RAMTOP - 1) | MTRR_PHYS_MASK_VALID); + slot = stack_push(slot, ~(CACHE_TMP_RAMTOP - 1) | MTRR_PHYS_MASK_VALID); slot = stack_push(slot, 0); /* upper base */ slot = stack_push(slot, 0 | MTRR_TYPE_WRBACK); num_mtrrs++; |