This is probably a Timur question, but any enlightment is appreciated. This 
concerns Linux-2.6.17.11 from kernel.org with some modifications for our custom 
8541 board. The original BSP was evolved from mpc85xx_cds.
 
Down in the guts of arch/ppc/syslib/ppc85xx_seteup.c is a routine called 
mpc85xx_setup_pci1(). In this routine we do an assignment of some outbound 
window registers and I am most interested in POTAR2, POWAR2 & POWBAR2 right now.
 
This routine uses a ccsr_pci struct to assign potar2, powar2, powbar2 and 
others like this:
 
pci->potar2     = 0x00100000;
pci->powar2   = 0x8004401a;
pci->powbar2 = 0x00888000;
 
Where I have changed the constants for our board. The issue is that when I call 
readl to read back these same registers at the end of this same subroutine, I 
get into endianess issues. That is, I read back
 
POTAR2     == 0x00001000
POWAR2   == 0x1A400480
POWBAR2 == 0x00800800
 
Where the four bytes in each 32bit word are now exchanged so that 80_04_40_1A 
became 1A_40_04_80.
 
I understand big versus little endian, that isn't the question. The question is 
"What is really in the POTAR2, POWAR2 & POWBAR2 registers and how can I prove 
that what is in the registers is really what I wish to be in the registers?"
 
It may be that one or more endian swap things are going on within Linux and I 
have inherited some source from others, so actually proving what is in the 
registers is becoming important.
 
Charles
_______________________________________________
Linuxppc-embedded mailing list
[email protected]
https://ozlabs.org/mailman/listinfo/linuxppc-embedded

Reply via email to