]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
ppc: io.h: Use addrmap_ translation APIs only in post-relocation phase
authorBin Meng <bmeng.cn@gmail.com>
Thu, 25 Feb 2021 09:22:37 +0000 (17:22 +0800)
committerPriyanka Jain <priyanka.jain@nxp.com>
Fri, 5 Mar 2021 04:55:43 +0000 (10:25 +0530)
In phys_to_virt() and virt_to_phys(), if CONFIG_ADDR_MAP is defined,
they use addrmap_ translation APIs to do the address translation.
However these APIs only work in post-relocation phase.

Update the code logic to fall back to use the default one when in
pre-relocation phase.

Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Priyanka Jain <priyanka.jain@nxp.com>
arch/powerpc/include/asm/io.h

index 6d76e3e99ccab595fd72f6c80da83e13464edc89..998a82aa0d13150549e52c39ea599ea392a14af5 100644 (file)
 #include <asm/byteorder.h>
 
 #ifdef CONFIG_ADDR_MAP
+#include <asm/global_data.h>
 #include <addr_map.h>
+
+DECLARE_GLOBAL_DATA_PTR;
 #endif
 
 #define SIO_CONFIG_RA   0x398
@@ -303,20 +306,20 @@ static inline void out_be32(volatile unsigned __iomem *addr, u32 val)
 static inline void *phys_to_virt(phys_addr_t paddr)
 {
 #ifdef CONFIG_ADDR_MAP
-       return addrmap_phys_to_virt(paddr);
-#else
-       return (void *)((unsigned long)paddr);
+       if (gd->flags & GD_FLG_RELOC)
+               return addrmap_phys_to_virt(paddr);
 #endif
+       return (void *)((unsigned long)paddr);
 }
 #define phys_to_virt phys_to_virt
 
 static inline phys_addr_t virt_to_phys(void * vaddr)
 {
 #ifdef CONFIG_ADDR_MAP
-       return addrmap_virt_to_phys(vaddr);
-#else
-       return (phys_addr_t)((unsigned long)vaddr);
+       if (gd->flags & GD_FLG_RELOC)
+               return addrmap_virt_to_phys(vaddr);
 #endif
+       return (phys_addr_t)((unsigned long)vaddr);
 }
 #define virt_to_phys virt_to_phys