Skip to contentSkip to conversation

pagetable / BDI2000 question

U-Boot-Users Stuart Yoder 2 participants 2 messages Oct 2, 2004 – Oct 3, 2004

lore
Share & tools
lore
#0 lore raw

This is not specifically a u-boot question, but involves some things that knowledgeable u-boot person may have insight into.

We are debugging a Linux kernel that has been booted via U-boot on our own custom PowerPC board-- 750GX processor. Early in the Linux kernel initialization our system bridge chip (Marvell 64360 / DiscoveryII) is remapped to a new virtual address (via the ioremap() kernel call). At that point the new virtual address returns bad data.

Physical address is: 0xF1000000
Original virtual address:  0xF1000000
Remapped virtual address:  0xEF5F0000

After the remapping occurs the following is true:
-programmatic/kernel access to virtual address 0xF1000000 returns good data -programmatic/kernel access to new virtual address 0xEF5F0000 returns bad data -access via the BDI2000 to address 0xF1000000 returns good data -access via the BDI2000 to address 0xEF5F0000 returns _good data_

THIS MAKES NO SENSE. The fact that the BDI2000 can read the data proves that the page table entry is good.

Here is the key question: How is it possible that the same location in memory accessed via the BDI2000 and accessed programmatically return DIFFERENT values.

This remapped location is not supposed to be cached since it is IO memory.

We have the page table / mmu option turned on the BDI config. Also, the Linux kernel has the BDI2000 config option enabled.

Stuart

#1 lore raw
Quoted 2 lines · In message <[email protected]> you wrote:

This is not specifically a u-boot question, but involves some things that knowledgeable u-boot person may have insight into.

Actually this is 100% off topic here.

Quoted 7 lines

initialization our system bridge chip (Marvell 64360 / DiscoveryII) is remapped to a new virtual address (via the ioremap() kernel call). At that point the new virtual address returns bad data.

Physical address is: 0xF1000000
Original virtual address:  0xF1000000
Remapped virtual address:  0xEF5F0000

0xEF5F0000 is obviously a bogus address. How exactly did you call ioremap() ?

And why do you have (and need) an "original virtual address" at all?

Quoted 2 lines

Here is the key question: How is it possible that the same location in memory accessed via the BDI2000 and accessed programmatically return DIFFERENT values.

The BDI2000 (through the telnet interface) uses physical addresses.

Best regards,

Wolfgang Denk

Signature · 4 lines
Software Engineering:  Embedded and Realtime Systems,  Embedded Linux
Phone: (+49)-8142-4596-87  Fax: (+49)-8142-4596-88  Email: wd at denx.de
"There's only one way to have a happy marriage and as soon as I learn
what it is I'll get married again."                  - Clint Eastwood