unsigned *target_atag_mem(unsigned *ptr) { struct smem_ram_ptable ram_ptable; uint8_t i = 0; /* Make sure RAM partition table is initialized */ ASSERT(smem_ram_ptable_init(&ram_ptable)); for (i = 0; i < ram_ptable.len; i++) { if (ram_ptable.parts[i].category == SDRAM && (ram_ptable.parts[i].type == SYS_MEMORY) && ((ram_ptable.parts[i].start == SDRAM_START_ADDR)|| (ram_ptable.parts[i].start == SDRAM_SEC_BANK_START_ADDR))) { ASSERT(ram_ptable.parts[i].size >= SIZE_256M); if (ram_ptable.parts[i].start == SDRAM_START_ADDR) ptr = target_create_atag(ptr, copper_default_first_256M); else ptr = target_create_atag(ptr, copper_default_second_256M); if (ram_ptable.parts[i].size > SIZE_256M) { ptr = target_mem_atag_create(ptr, (ram_ptable.parts[i].size - SIZE_256M), (ram_ptable.parts[i].start + SIZE_256M)); } } /* Pass along all other usable memory regions to Linux */ if (ram_ptable.parts[i].category == SDRAM && (ram_ptable.parts[i].type == SYS_MEMORY) && (ram_ptable.parts[i].start != SDRAM_START_ADDR)) { ptr = target_mem_atag_create(ptr, ram_ptable.parts[i].size, ram_ptable.parts[i].start); } } return ptr; }
unsigned *target_atag_mem(unsigned *ptr) { struct smem_ram_ptable ram_ptable; uint8_t i = 0; if (smem_ram_ptable_init(&ram_ptable)) { for (i = 0; i < ram_ptable.len; i++) { if (ram_ptable.parts[i].category == SDRAM && (ram_ptable.parts[i].type == SYS_MEMORY) && (ram_ptable.parts[i].start == PHYS_MEM_START_ADDR)) { ASSERT(ram_ptable.parts[i].size >= SIZE_256M); ptr = target_first_256M_atag(ptr); if (ram_ptable.parts[i].size > SIZE_256M) { ptr = target_mem_atag_create(ptr, (ram_ptable.parts[i].size - SIZE_256M), (ram_ptable.parts[i].start + SIZE_256M)); } } /* Pass along all other usable memory regions to Linux */ if (ram_ptable.parts[i].category == SDRAM && (ram_ptable.parts[i].type == SYS_MEMORY) && (ram_ptable.parts[i].start != PHYS_MEM_START_ADDR)) { ptr = target_mem_atag_create(ptr, ram_ptable.parts[i].size, ram_ptable.parts[i].start); } } } else { dprintf(CRITICAL, "ERROR: Unable to read RAM partition\n"); ASSERT(0); } return ptr; }
unsigned *target_atag(unsigned *ptr, atag_mem_info usable_mem_map[], unsigned num_regions) { unsigned i; dprintf(SPEW, "Number of regions for HLOS in 1st 256MB = %u\n", num_regions); for (i=0; i < num_regions; i++) { ptr = target_mem_atag_create(ptr, usable_mem_map[i].size, usable_mem_map[i].start_addr); } return ptr; }
unsigned *target_atag_create(unsigned *ptr, mem_info usable_mem_map[], unsigned num_regions) { unsigned int i; ASSERT(num_regions); dprintf(SPEW, "Number of HLOS regions in 1st bank = %u\n", num_regions); for (i = 0; i < num_regions; i++) { ptr = target_mem_atag_create(ptr, usable_mem_map[i].size, usable_mem_map[i].start_addr); } return ptr; }