|
@@ -422,10 +422,20 @@ void free_initrd_mem(unsigned long start, unsigned long end)
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
+void (*free_init_pages_eva)(void *begin, void *end) = NULL;
|
|
|
+
|
|
|
void __init_refok free_initmem(void)
|
|
|
{
|
|
|
prom_free_prom_memory();
|
|
|
- free_initmem_default(POISON_FREE_INITMEM);
|
|
|
+ /*
|
|
|
+ * Let the platform define a specific function to free the
|
|
|
+ * init section since EVA may have used any possible mapping
|
|
|
+ * between virtual and physical addresses.
|
|
|
+ */
|
|
|
+ if (free_init_pages_eva)
|
|
|
+ free_init_pages_eva((void *)&__init_begin, (void *)&__init_end);
|
|
|
+ else
|
|
|
+ free_initmem_default(POISON_FREE_INITMEM);
|
|
|
}
|
|
|
|
|
|
#ifndef CONFIG_MIPS_PGD_C0_CONTEXT
|