Recently removed io accessors
jacmet at sunsite.dk
Fri Oct 13 22:38:12 EST 2006
>>>>> "BH" == Benjamin Herrenschmidt <benh at kernel.crashing.org> writes:
>> Unfortunately they didn't so I need to enable big endian mode and
>> NOT swap on normal register access and swap on access to the FIFO.
BH> That's where it bothers me... you need to enable BE register
Yes, because the hw people didn't swap the byte lanes. To go back to
my previous mail:
Endian register set to little endian (default at powerup):
RedBoot> x -b 0x8e000064 -2 -l 4
8E000064: 4321 8765
RedBoot> x -b 0x8e000064 -4 -l 4
With the bytelanes swapped the 32bit read would return 21436587 which
is simply the little endian form of what we need.
But because they didn't swap the lanes I need to enable the BE mode
and not do bswap.
BH> On normal HW, you don't do that... you get LE registers and
BH> everybody is happy with that and the fifo just works. Unless what
BH> you really do is enable BE register mode (and it looks like BE) or
BH> something around those lines.
Sorry, I cannot parse that. I AM enabling BE mode.
- Bytelanes directly connected (as on our boards): You have to enable BE
mode in the chip, NOT swap normal register accesses and SWAP accesses
to/from the FIFOs.
- Bytelanes swapped: You should NOT enable BE mode, SWAP normal
register accesses and NOT swap accesses from/to the FIFOs.
BH> Have you actually verified that it works if you endian swap the
BH> whole buffer ? Maybe it's just some headers added by the chip that
BH> need swapping in which case it's all fine, just add the proper
BH> leXX_to_cpu() to the driver when reading those...
Yes, we've be using it since January (I worked together with Dustin
before smc911x.c got submitted to mainline) - We need to swap all data
to/from the FIFOs.
>> The question is what to do about it. Adding another special case to
>> smc911x.h for my board is not a big deal, but I would like to get
>> the _insl / _outsl implementations back in misc.S instead of adding
>> them to my platform file.
BH> Maybe with a different name but that's possible. I just wnat to be
BH> 150% sure that this is what you need and the problem isn't lurking
BH> somewhere else ;)
Not as far as I can see.
BH> Overkill ? well, not that much.. you get free byteswap from the
BH> hardware with just a bit set in the PTEs :) Just a matter of
BH> making sure the TLB miss handlers does proerly forward that bit
BH> from the linux PTE to the TLB.
It's still a lot more work than simply doing a s/_outsl_ns/_outsl/.
Isn't the stwbrx as fast as a regular stw?
Bye, Peter Korsgaard
More information about the Linuxppc-dev