|
@@ -1,5 +1,5 @@
|
|
|
/*
|
|
|
- * Copyright 2008 Freescale Semiconductor, Inc.
|
|
|
+ * Copyright 2008-2011 Freescale Semiconductor, Inc.
|
|
|
*
|
|
|
* This program is free software; you can redistribute it and/or
|
|
|
* modify it under the terms of the GNU General Public License
|
|
@@ -233,7 +233,8 @@ int step_assign_addresses(fsl_ddr_info_t *pinfo,
|
|
|
}
|
|
|
|
|
|
unsigned long long
|
|
|
-fsl_ddr_compute(fsl_ddr_info_t *pinfo, unsigned int start_step)
|
|
|
+fsl_ddr_compute(fsl_ddr_info_t *pinfo, unsigned int start_step,
|
|
|
+ unsigned int size_only)
|
|
|
{
|
|
|
unsigned int i, j;
|
|
|
unsigned int all_controllers_memctl_interleaving = 0;
|
|
@@ -338,7 +339,8 @@ fsl_ddr_compute(fsl_ddr_info_t *pinfo, unsigned int start_step)
|
|
|
&pinfo->memctl_opts[i],
|
|
|
&ddr_reg[i], &timing_params[i],
|
|
|
pinfo->dimm_params[i],
|
|
|
- dbw_capacity_adjust[i]);
|
|
|
+ dbw_capacity_adjust[i],
|
|
|
+ size_only);
|
|
|
}
|
|
|
|
|
|
default:
|
|
@@ -405,7 +407,7 @@ phys_size_t fsl_ddr_sdram(void)
|
|
|
memset(&info, 0, sizeof(fsl_ddr_info_t));
|
|
|
|
|
|
/* Compute it once normally. */
|
|
|
- total_memory = fsl_ddr_compute(&info, STEP_GET_SPD);
|
|
|
+ total_memory = fsl_ddr_compute(&info, STEP_GET_SPD, 0);
|
|
|
|
|
|
/* Check for memory controller interleaving. */
|
|
|
memctl_interleaved = 0;
|
|
@@ -430,7 +432,8 @@ phys_size_t fsl_ddr_sdram(void)
|
|
|
info.memctl_opts[i].memctl_interleaving = 0;
|
|
|
debug("Recomputing with memctl_interleaving off.\n");
|
|
|
total_memory = fsl_ddr_compute(&info,
|
|
|
- STEP_ASSIGN_ADDRESSES);
|
|
|
+ STEP_ASSIGN_ADDRESSES,
|
|
|
+ 0);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -478,3 +481,21 @@ phys_size_t fsl_ddr_sdram(void)
|
|
|
|
|
|
return total_memory;
|
|
|
}
|
|
|
+
|
|
|
+/*
|
|
|
+ * fsl_ddr_sdram_size() - This function only returns the size of the total
|
|
|
+ * memory without setting ddr control registers.
|
|
|
+ */
|
|
|
+phys_size_t
|
|
|
+fsl_ddr_sdram_size(void)
|
|
|
+{
|
|
|
+ fsl_ddr_info_t info;
|
|
|
+ unsigned long long total_memory = 0;
|
|
|
+
|
|
|
+ memset(&info, 0 , sizeof(fsl_ddr_info_t));
|
|
|
+
|
|
|
+ /* Compute it once normally. */
|
|
|
+ total_memory = fsl_ddr_compute(&info, STEP_GET_SPD, 1);
|
|
|
+
|
|
|
+ return total_memory;
|
|
|
+}
|