mdm9625: Pass all the available DDR regions to the kernel.
diff --git a/target/mdm9625/meminfo.c b/target/mdm9625/meminfo.c
index 7f88b56..0450f81 100644
--- a/target/mdm9625/meminfo.c
+++ b/target/mdm9625/meminfo.c
@@ -38,24 +38,8 @@
#define SIZE_1M (1024 * 1024)
-typedef struct {
- uint32_t size;
- uint32_t start_addr;
-}mem_info;
-
static struct smem_ram_ptable ram_ptable;
-mem_info mdm9625_default_fixed_memory[] = {
- { .size = (29 * SIZE_1M),
- .start_addr = SDRAM_START_ADDR +
- (2 * SIZE_1M)
- },
- { .size = (10 * SIZE_1M),
- .start_addr = SDRAM_START_ADDR +
- (118 * SIZE_1M)
- },
-};
-
struct smem_ram_ptable* target_smem_ram_ptable_init()
{
/* Make sure RAM partition table is initialized */
@@ -64,93 +48,47 @@
return &ram_ptable;
}
-int target_add_first_mem_bank(void *fdt,
- uint32_t offset,
- mem_info usable_mem_map[],
- uint32_t num_regions)
-{
- uint32_t i;
- int ret;
-
- ASSERT(num_regions);
-
- dprintf(SPEW, "Number of HLOS regions in 1st bank = %u\n", num_regions);
-
- for (i = 0; i < num_regions; i++)
- {
- ret = dev_tree_add_mem_info(fdt,
- offset,
- usable_mem_map[i].start_addr,
- usable_mem_map[i].size);
- }
- return ret;
-}
-
/* Funtion to add the ram partition entries into device tree.
* The function assumes that all the entire fixed memory regions should
* be listed in the first bank of the passed in ddr regions.
*/
uint32_t target_dev_tree_mem(void *fdt, uint32_t memory_node_offset)
{
- uint32_t last_fixed_addr;
- int n;
unsigned int i;
int ret;
- n = ARRAY_SIZE(mdm9625_default_fixed_memory);
-
- last_fixed_addr = mdm9625_default_fixed_memory[n-1].start_addr +
- mdm9625_default_fixed_memory[n-1].size;
-
- for (i = 0; i < ram_ptable.len; i++)
+ for (i = 0; i < ram_ptable.len; i++)
{
- if((ram_ptable.parts[i].category == SDRAM) &&
+ if ((ram_ptable.parts[i].category == SDRAM) &&
(ram_ptable.parts[i].type == SYS_MEMORY))
{
- if((ram_ptable.parts[i].start <= last_fixed_addr) &&
- ((ram_ptable.parts[i].start + ram_ptable.parts[i].size) >= last_fixed_addr))
- {
-
- /* Pass along all fixed memory regions to Linux */
- ret = target_add_first_mem_bank(fdt,
- memory_node_offset,
- mdm9625_default_fixed_memory,
- ARRAY_SIZE(mdm9625_default_fixed_memory));
-
- if (ret)
- {
- dprintf(CRITICAL, "Failed to add first bank fixed memory addresses\n");
- goto target_dev_tree_mem_err;
- }
-
- if((ram_ptable.parts[i].start + ram_ptable.parts[i].size) != last_fixed_addr)
- {
- /* Pass the memory beyond the fixed memory present in the partition */
- ret = dev_tree_add_mem_info(fdt,
- memory_node_offset,
- ram_ptable.parts[i].start + last_fixed_addr,
- ram_ptable.parts[i].size - last_fixed_addr);
-
- if (ret)
- {
- dprintf(CRITICAL, "Failed to add first bank memory addresses\n");
- goto target_dev_tree_mem_err;
- }
- }
- }
- else
+ if (ram_ptable.parts[i].start == 0)
{
/* Pass along all other usable memory regions to Linux */
+ /* Any memory not accessible by the kernel which is below the
+ * kernel start address must *not* be given to the kernel.
+ */
ret = dev_tree_add_mem_info(fdt,
memory_node_offset,
- ram_ptable.parts[i].start,
+ ram_ptable.parts[i].start + 2 * SIZE_1M,
ram_ptable.parts[i].size);
- if (ret)
- {
- dprintf(CRITICAL, "Failed to add secondary banks memory addresses\n");
- goto target_dev_tree_mem_err;
- }
+ }
+ else
+ {
+ /* Pass along all other usable memory regions to Linux */
+ ret = dev_tree_add_mem_info(fdt,
+ memory_node_offset,
+ ram_ptable.parts[i].start,
+ ram_ptable.parts[i].size);
+
+ }
+
+
+ if (ret)
+ {
+ dprintf(CRITICAL, "Failed to add memory bank addresses to device tree\n");
+ goto target_dev_tree_mem_err;
}
}
}