copper: Add support to pass all available ddr regions to kernel.
Change-Id: I4d1094420752a017fc8a3863a8830a911c75177f
diff --git a/target/copper/meminfo.c b/target/copper/meminfo.c
index e0feaa1..086c080 100644
--- a/target/copper/meminfo.c
+++ b/target/copper/meminfo.c
@@ -37,51 +37,6 @@
#include <platform/iomap.h>
#include <dev_tree.h>
-#define SIZE_1M (1024 * 1024)
-
-typedef struct {
- uint32_t size;
- uint32_t start_addr;
-}mem_info;
-
-mem_info copper_default_fixed_memory[] = {
- { .size = (132 * SIZE_1M),
- .start_addr = SDRAM_START_ADDR
- },
- { .size = SIZE_1M,
- .start_addr = SDRAM_START_ADDR +
- (250 * SIZE_1M) +
- (5 * SIZE_1M)
- },
- { .size = (240 * SIZE_1M),
- .start_addr = SDRAM_START_ADDR +
- (16 * SIZE_1M) +
- (256 * SIZE_1M)
- },
-};
-
-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.
@@ -89,70 +44,31 @@
uint32_t target_dev_tree_mem(void *fdt, uint32_t memory_node_offset)
{
struct smem_ram_ptable ram_ptable;
- uint32_t last_fixed_addr;
- int n;
unsigned int i;
- int ret;
+ int ret = 0;
/* Make sure RAM partition table is initialized */
ASSERT(smem_ram_ptable_init(&ram_ptable));
- n = ARRAY_SIZE(copper_default_fixed_memory);
-
- last_fixed_addr = copper_default_fixed_memory[n-1].start_addr +
- copper_default_fixed_memory[n-1].size;
-
/* Calculating the size of the mem_info_ptr */
for (i = 0 ; i < ram_ptable.len; i++)
{
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,
- copper_default_fixed_memory,
- ARRAY_SIZE(copper_default_fixed_memory));
+ /* 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 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 (ret)
{
- /* 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 secondary banks memory addresses\n");
- goto target_dev_tree_mem_err;
- }
+ dprintf(CRITICAL, "Failed to add secondary banks memory addresses\n");
+ goto target_dev_tree_mem_err;
}
+
}
}