ARM: remove initrd handling from mmu code
Let the platform mmu_map_physical_memory the initrd region, and reserve it before calling mmu_init. This removes another hardcoded address, since e.g. U-Boot gets the address from the uImage file.
This commit is contained in:
@@ -61,8 +61,7 @@ HAIKU_BOARD_SDIMAGE_FILES =
|
|||||||
#
|
#
|
||||||
# gcc flags for the specific cpu
|
# gcc flags for the specific cpu
|
||||||
|
|
||||||
local flags = -mcpu=cortex-a8 -mfpu=vfpv3 -mfloat-abi=hard
|
local flags = -mcpu=cortex-a8 -mfpu=vfpv3 -mfloat-abi=hard ;
|
||||||
-DHAIKU_BOARD_LOADER_UIBASE=$(HAIKU_BOARD_LOADER_UIBASE) ;
|
|
||||||
|
|
||||||
HAIKU_ASFLAGS_$(HAIKU_PACKAGING_ARCH) += $(flags) ;
|
HAIKU_ASFLAGS_$(HAIKU_PACKAGING_ARCH) += $(flags) ;
|
||||||
HAIKU_CCFLAGS_$(HAIKU_PACKAGING_ARCH) += $(flags) ;
|
HAIKU_CCFLAGS_$(HAIKU_PACKAGING_ARCH) += $(flags) ;
|
||||||
|
|||||||
@@ -110,12 +110,6 @@ static struct memblock LOADER_MEMORYMAP[] = {
|
|||||||
kLoaderBaseAddress + 0x11FFFFF,
|
kLoaderBaseAddress + 0x11FFFFF,
|
||||||
ARM_MMU_L2_FLAG_C,
|
ARM_MMU_L2_FLAG_C,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"RAM_initrd", // initrd
|
|
||||||
HAIKU_BOARD_LOADER_UIBASE,
|
|
||||||
HAIKU_BOARD_LOADER_UIBASE + 0x500000,
|
|
||||||
ARM_MMU_L2_FLAG_C,
|
|
||||||
},
|
|
||||||
|
|
||||||
#ifdef FB_BASE
|
#ifdef FB_BASE
|
||||||
{
|
{
|
||||||
@@ -548,8 +542,10 @@ mmu_init_for_kernel(void)
|
|||||||
TRACE(("mmu_init_for_kernel\n"));
|
TRACE(("mmu_init_for_kernel\n"));
|
||||||
|
|
||||||
// save the memory we've physically allocated
|
// save the memory we've physically allocated
|
||||||
gKernelArgs.physical_allocated_range[0].size
|
int index = gKernelArgs.num_physical_allocated_ranges;
|
||||||
= sNextPhysicalAddress - gKernelArgs.physical_allocated_range[0].start;
|
gKernelArgs.physical_allocated_range[index].start = SDRAM_BASE;
|
||||||
|
gKernelArgs.physical_allocated_range[index].size = sNextPhysicalAddress - SDRAM_BASE;
|
||||||
|
gKernelArgs.num_physical_allocated_ranges++;
|
||||||
|
|
||||||
// Save the memory we've virtually allocated (for the kernel and other
|
// Save the memory we've virtually allocated (for the kernel and other
|
||||||
// stuff)
|
// stuff)
|
||||||
@@ -619,11 +615,6 @@ mmu_init(void)
|
|||||||
gKernelArgs.physical_memory_range[0].size = highestRAMAddress - SDRAM_BASE;
|
gKernelArgs.physical_memory_range[0].size = highestRAMAddress - SDRAM_BASE;
|
||||||
gKernelArgs.num_physical_memory_ranges = 1;
|
gKernelArgs.num_physical_memory_ranges = 1;
|
||||||
|
|
||||||
gKernelArgs.physical_allocated_range[0].start = SDRAM_BASE;
|
|
||||||
gKernelArgs.physical_allocated_range[0].size = 0;
|
|
||||||
gKernelArgs.num_physical_allocated_ranges = 1;
|
|
||||||
// remember the start of the allocated physical pages
|
|
||||||
|
|
||||||
init_page_directory();
|
init_page_directory();
|
||||||
|
|
||||||
// map in a kernel stack
|
// map in a kernel stack
|
||||||
|
|||||||
@@ -134,6 +134,9 @@ _start(void)
|
|||||||
// Flick on "OK" led, use pre-mmu firmware base
|
// Flick on "OK" led, use pre-mmu firmware base
|
||||||
gpio_write(gPeripheralBase + GPIO_BASE, 16, 0);
|
gpio_write(gPeripheralBase + GPIO_BASE, 16, 0);
|
||||||
|
|
||||||
|
// Reserve memory for boot archive before switching on MMU
|
||||||
|
insert_physical_allocated_range(BOOT_ARCHIVE_BASE, BOOT_ARCHIVE_SIZE);
|
||||||
|
|
||||||
// To debug mmu, enable serial_init above me!
|
// To debug mmu, enable serial_init above me!
|
||||||
mmu_init();
|
mmu_init();
|
||||||
|
|
||||||
|
|||||||
@@ -267,8 +267,20 @@ start_raw(int argc, const char **argv)
|
|||||||
dump_fdt(gFDT);
|
dump_fdt(gFDT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (args.platform.boot_tgz_size > 0) {
|
||||||
|
insert_physical_allocated_range((addr_t)args.platform.boot_tgz_data,
|
||||||
|
args.platform.boot_tgz_size);
|
||||||
|
}
|
||||||
|
|
||||||
mmu_init();
|
mmu_init();
|
||||||
|
|
||||||
|
// Handle our tarFS post-mmu
|
||||||
|
if (args.platform.boot_tgz_size > 0) {
|
||||||
|
args.platform.boot_tgz_data = (void*)mmu_map_physical_memory((addr_t)
|
||||||
|
args.platform.boot_tgz_data, args.platform.boot_tgz_size,
|
||||||
|
kDefaultPageFlags);
|
||||||
|
}
|
||||||
|
|
||||||
// wait a bit to give the user the opportunity to press a key
|
// wait a bit to give the user the opportunity to press a key
|
||||||
// spin(750000);
|
// spin(750000);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user