aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-ppc64
diff options
context:
space:
mode:
Diffstat (limited to 'include/asm-ppc64')
-rw-r--r--include/asm-ppc64/abs_addr.h21
1 files changed, 7 insertions, 14 deletions
diff --git a/include/asm-ppc64/abs_addr.h b/include/asm-ppc64/abs_addr.h
index 05414a9bfdd1..025527742fef 100644
--- a/include/asm-ppc64/abs_addr.h
+++ b/include/asm-ppc64/abs_addr.h
@@ -44,24 +44,17 @@ static inline unsigned long addr_to_chunk(unsigned long addr)
44 return addr >> MSCHUNKS_CHUNK_SHIFT; 44 return addr >> MSCHUNKS_CHUNK_SHIFT;
45} 45}
46 46
47static inline unsigned long chunk_offset(unsigned long addr) 47static inline unsigned long phys_to_abs(unsigned long pa)
48{ 48{
49 return addr & MSCHUNKS_OFFSET_MASK; 49 unsigned long chunk;
50}
51 50
52static inline unsigned long abs_chunk(unsigned long pchunk) 51 chunk = addr_to_chunk(pa);
53{
54 if (pchunk >= mschunks_map.num_chunks)
55 return pchunk;
56 52
57 return mschunks_map.mapping[pchunk]; 53 if (chunk < mschunks_map.num_chunks)
58} 54 chunk = mschunks_map.mapping[chunk];
59 55
60/* A macro so it can take pointers or unsigned long. */ 56 return chunk_to_addr(chunk) + (pa & MSCHUNKS_OFFSET_MASK);
61#define phys_to_abs(pa) \ 57}
62 ({ unsigned long _pa = (unsigned long)(pa); \
63 chunk_to_addr(abs_chunk(addr_to_chunk(_pa))) + chunk_offset(_pa); \
64 })
65 58
66static inline unsigned long 59static inline unsigned long
67physRpn_to_absRpn(unsigned long rpn) 60physRpn_to_absRpn(unsigned long rpn)