diff options
Diffstat (limited to 'cpu/mpc8xxx/ddr/util.c')
| -rw-r--r-- | cpu/mpc8xxx/ddr/util.c | 18 | 
1 files changed, 12 insertions, 6 deletions
| diff --git a/cpu/mpc8xxx/ddr/util.c b/cpu/mpc8xxx/ddr/util.c index 27c135b11..70dbee06d 100644 --- a/cpu/mpc8xxx/ddr/util.c +++ b/cpu/mpc8xxx/ddr/util.c @@ -64,6 +64,9 @@ __fsl_ddr_set_lawbar(const common_timing_params_t *memctl_common_params,  			   unsigned int memctl_interleaved,  			   unsigned int ctrl_num)  { +	unsigned long long base = memctl_common_params->base_address; +	unsigned long long size = memctl_common_params->total_mem; +  	/*  	 * If no DIMMs on this controller, do not proceed any further.  	 */ @@ -71,6 +74,13 @@ __fsl_ddr_set_lawbar(const common_timing_params_t *memctl_common_params,  		return;  	} +#if !defined(CONFIG_PHYS_64BIT) +	if (base >= CONFIG_MAX_MEM_MAPPED) +		return; +	if ((base + size) >= CONFIG_MAX_MEM_MAPPED) +		size = CONFIG_MAX_MEM_MAPPED - base; +#endif +  	if (ctrl_num == 0) {  		/*  		 * Set up LAW for DDR controller 1 space. @@ -78,16 +88,12 @@ __fsl_ddr_set_lawbar(const common_timing_params_t *memctl_common_params,  		unsigned int lawbar1_target_id = memctl_interleaved  			? LAW_TRGT_IF_DDR_INTRLV : LAW_TRGT_IF_DDR_1; -		if (set_ddr_laws(memctl_common_params->base_address, -				memctl_common_params->total_mem, -				lawbar1_target_id) < 0) { +		if (set_ddr_laws(base, size, lawbar1_target_id) < 0) {  			printf("ERROR\n");  			return ;  		}  	} else if (ctrl_num == 1) { -		if (set_ddr_laws(memctl_common_params->base_address, -				memctl_common_params->total_mem, -				LAW_TRGT_IF_DDR_2) < 0) { +		if (set_ddr_laws(base, size, LAW_TRGT_IF_DDR_2) < 0) {  			printf("ERROR\n");  			return ;  		} |