MIPS: platform: Allow for DTB to be moved during kernel relocation

Add plat_fdt_relocated(void*) API to allow the kernel relocation code to
update platform's information about the DTB location if the DTB had to
be moved due to being placed in a location used by the relocated kernel.

Signed-off-by: Marcin Nowakowski <marcin.nowakowski@imgtec.com>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/14611/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
Marcin Nowakowski 2016-11-23 14:43:47 +01:00 committed by Ralf Baechle
parent 73346081ca
commit 0063fdede6
2 changed files with 26 additions and 0 deletions

View File

@ -88,6 +88,19 @@ void __init *plat_get_fdt(void)
return (void *)fdt; return (void *)fdt;
} }
void __init plat_fdt_relocated(void *new_location)
{
/*
* reset fdt as the cached value would point to the location
* before relocations happened and update the location argument
* if it was passed using UHI
*/
fdt = NULL;
if (fw_arg0 == -2)
fw_arg1 = (unsigned long)new_location;
}
void __init plat_mem_setup(void) void __init plat_mem_setup(void)
{ {
if (mach && mach->fixup_fdt) if (mach && mach->fixup_fdt)

View File

@ -164,6 +164,19 @@ static inline void plat_swiotlb_setup(void) {}
* Return: Pointer to the flattened device tree blob. * Return: Pointer to the flattened device tree blob.
*/ */
extern void *plat_get_fdt(void); extern void *plat_get_fdt(void);
#ifdef CONFIG_RELOCATABLE
/**
* plat_fdt_relocated() - Update platform's information about relocated dtb
*
* This function provides a platform-independent API to set platform's
* information about relocated DTB if it needs to be moved due to kernel
* relocation occurring at boot.
*/
void plat_fdt_relocated(void *new_location);
#endif /* CONFIG_RELOCATABLE */
#endif /* CONFIG_USE_OF */ #endif /* CONFIG_USE_OF */
#endif /* _ASM_BOOTINFO_H */ #endif /* _ASM_BOOTINFO_H */