csky: Support dynamic start physical address
Before this patch csky-linux need CONFIG_RAM_BASE to determine start physical address. Now we use phys_offset variable to replace the macro of PHYS_OFFSET and we setup phys_offset with real physical address which is determined during startup in head.S. With this patch we needn't re-compile kernel for different start physical address. ie: 0x0 / 0xc0000000 start physical address could use the same vmlinux, be care different start address must be 512MB aligned. Signed-off-by: Guo Ren <ren_guo@c-sky.com> Cc: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
@@ -40,7 +40,8 @@ ENTRY(csky_\name)
|
||||
WR_MCIR a2
|
||||
#endif
|
||||
bclri r6, 0
|
||||
lrw a2, PHYS_OFFSET
|
||||
lrw a2, phys_offset
|
||||
ld.w a2, (a2, 0)
|
||||
subu r6, a2
|
||||
bseti r6, 31
|
||||
|
||||
@@ -50,7 +51,8 @@ ENTRY(csky_\name)
|
||||
addu r6, a2
|
||||
ldw r6, (r6)
|
||||
|
||||
lrw a2, PHYS_OFFSET
|
||||
lrw a2, phys_offset
|
||||
ld.w a2, (a2, 0)
|
||||
subu r6, a2
|
||||
bseti r6, 31
|
||||
|
||||
|
@@ -142,11 +142,16 @@ void __init setup_arch(char **cmdline_p)
|
||||
#endif
|
||||
}
|
||||
|
||||
unsigned long phys_offset;
|
||||
EXPORT_SYMBOL(phys_offset);
|
||||
|
||||
asmlinkage __visible void __init csky_start(unsigned int unused, void *param)
|
||||
{
|
||||
/* Clean up bss section */
|
||||
memset(__bss_start, 0, __bss_stop - __bss_start);
|
||||
|
||||
phys_offset = read_mmu_msa0() & ~(SSEG_SIZE - 1);
|
||||
|
||||
pre_trap_init();
|
||||
pre_mmu_init();
|
||||
|
||||
|
Reference in New Issue
Block a user