• Suzuki Poulose's avatar
    powerpc/44x: Enable CONFIG_RELOCATABLE for PPC44x · 26ecb6c4
    Suzuki Poulose authored
    The following patch adds relocatable kernel support - based on processing
    of dynamic relocations - for PPC44x kernel.
    
    We find the runtime address of _stext and relocate ourselves based
    on the following calculation.
    
    	virtual_base = ALIGN(KERNELBASE,256M) +
    			MODULO(_stext.run,256M)
    
    relocate() is called with the Effective Virtual Base Address (as
    shown below)
    
                | Phys. Addr| Virt. Addr |
    Page (256M) |------------------------|
    Boundary    |           |            |
                |           |            |
                |           |            |
    Kernel Load |___________|_ __ _ _ _ _|<- Effective
    Addr(_stext)|           |      ^     |Virt. Base Addr
                |           |      |     |
                |           |      |     |
                |           |reloc_offset|
                |           |      |     |
                |           |      |     |
                |           |______v_____|<-(KERNELBASE)%256M
                |           |            |
                |           |            |
                |           |            |
    Page(256M)  |-----------|------------|
    Boundary    |           |            |
    
    The virt_phys_offset is updated accordingly, i.e,
    
    	virt_phys_offset = effective. kernel virt base - kernstart_addr
    
    I have tested the patches on 440x platforms only. However this should
    work fine for PPC_47x also, as we only depend on the runtime address
    and the current TLB XLAT entry for the startup code, which is available
    in r25. I don't have access to a 47x board yet. So, it would be great if
    somebody could test this on 47x.
    Signed-off-by: default avatarSuzuki K. Poulose <suzuki@in.ibm.com>
    Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    Cc: Kumar Gala <galak@kernel.crashing.org>
    Cc: Tony Breeds <tony@bakeyournoodle.com>
    Cc: Josh Boyer <jwboyer@gmail.com>
    Cc: linuxppc-dev <linuxppc-dev@lists.ozlabs.org>
    Signed-off-by: default avatarJosh Boyer <jwboyer@gmail.com>
    26ecb6c4
head_44x.S 32.6 KB