Calculating virtual address from physical address
Chris Dumoulin
cdumoulin at ics-ltd.com
Sat May 6 01:08:48 EST 2006
I'm using a Virtex II Pro-based board with a PPC405. The board is
hanging somewhere very early in the kernel boot process. I believe it
may be dying at the point where the MMU is enabled. In order to
determine the exact point at which my board hangs, I'm blinking two LEDs
in the assembly code found in arch/ppc/kernel/head_4xx.S, . Currently I
am only able to successfully access the LEDs before the MMU is turned
on, but I can't be sure that I'm calculating the virtual address
properly when I try to access the LED after the MMU is turned on.
My LEDs are at address 0x4F600000 and my CONFIG_KERNEL_START is
0xC0000000. If this address were low enough, I would just add 0xC0000000
to the address to get the virtual address, but since my LED address is
so high, the sum will be well past the 32-bit maximum address value. How
is a virtual address calculated for a high address like 0x4F600000?
BTW, he is the assembly code that I'm working with (from
arch/ppc/kernel/head_4xx.S):
.text
_GLOBAL(_stext)
_GLOBAL(_start)
/* Save parameters we are passed.
*/
mr r31,r3
mr r30,r4
mr r29,r5
mr r28,r6
mr r27,r7
/* CRD: set LED state here */
lis r26,0x4F600000 at h
ori r26,r26,0x4F600000 at l
li r25,LED_STATE_0
stw r25,0(r26)
/* We have to turn on the MMU right away so we get cache modes
* set correctly.
*/
bl initial_mmu
/* CRD: set LED state here */
lis r26,0x4F600000 at h
ori r26,r26,0x4F600000 at l
li r25,LED_STATE_1
stw r25,0(r26)
/* We now have the lower 16 Meg mapped into TLB entries, and the caches
* ready to work.
*/
turn_on_mmu:
lis r0,MSR_KERNEL at h
ori r0,r0,MSR_KERNEL at l
mtspr SPRN_SRR1,r0
lis r0,start_here at h
ori r0,r0,start_here at l
mtspr SPRN_SRR0,r0
SYNC
/* CRD: set LED state here */
lis r26,0x4F600000 at h
ori r26,r26,0x4F600000 at l
li r25,LED_STATE_2
stw r25,0(r26)
rfi /* enables MMU */
/* CRD: set LED state here */
/* This address should be a virtual address */
lis r26,0x4F600000 at h
ori r26,r26,0x4F600000 at l
li r25,LED_STATE_3
stw r25,0(r26)
b . /* prevent prefetch past rfi */
Regards,
Chris Dumoulin
--
*--Christopher Dumoulin--*
Software Team Leader
<http://ics-ltd.com/>
<http://ics-ltd.com/>
Interactive Circuits and Systems Ltd.
5430 Canotek Road
Ottawa, ON
K1J 9G2
(613)749-9241
1-800-267-9794 (USA only)
------------------------------------------------------------------------
This e-mail is private and confidential and is for the addressee only.
If misdirected, please notify us by telephone and confirm that it has
been deleted from your system and any hard copies destroyed. You are
strictly prohibited from using, printing, distributing or disseminating
it or any information contained in it save to the intended recipient.
More information about the Linuxppc-embedded
mailing list