On 07/04/2013 07:54:09 AM, Kevin Hao wrote:
This is based on the codes in the head_44x.S. Since we always align to
256M before mapping the PAGE_OFFSET for a relocatable kernel, we also
change the init tlb map to 256M size.
Signed-off-by: Kevin Hao <haoke...@gmail.com>
---
v2: Move the code to set kernstart_addr and virt_phys_offset to a c
function.
So we can expand it easily later.
Hi Scott,
I still use the 256M align for the init tlb as in v1 for the
following reasons:
* This should be the most possible case in reality.
There is no "most possible case". It's either possible (and supported)
or not. And having less than 256M is definitely possible. The 8540
reference board has 64M.
AMP scenarios that start on a 64M-aligned but not 256M-aligned address
are also something I've done.
* This is just for very early booting code and should not be a big
issue
if the first tlb entry shrink to a less size later.
"We can probably get away with it most of the time" is not a very good
justification. What's wrong with the suggestion I made last time, of
basing the size on the alignment of the address?
+ /*
+ * We have the runtime (virutal) address of our base.
+ * We calculate our shift of offset from a 256M page.
+ * We could map the 256M page we belong to at PAGE_OFFSET and
+ * get going from there.
+ */
+ lis r4,KERNELBASE@h
+ ori r4,r4,KERNELBASE@l
+ rlwinm r6,r25,0,0xfffffff /* r6 = PHYS_START %
256M */
+ rlwinm r5,r4,0,0xfffffff /* r5 = KERNELBASE %
256M */
+ subf r3,r5,r6 /* r3 = r6 - r5 */
+ add r3,r4,r3 /* Required Virutal
Address */
s/Virutal/Virtual/
-Scott
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev