Hi

I am using PPC Linux version 2.4.20 on a MPC8260 based custom board, using 
U-boot 0.4.5 as a bootloader.

I am having some problems using the CPM drivers, which I am inclined to think 
that could be due to the fact that the kernel memory in cache enabled.

I am modified the uart driver in order to suit the CPM SCC4 port, which is used 
as a UART on this board.
The UART driver seems to use m8260_cpm_dpalloc function to allocate memory from 
DPRAM (DBAT0 - cache is disabled), for the buffer descriptors, and use 
m8260_cpm_hostalloc function to allocate system memory (DBAT2 - cache is 
enabled) for the data buffers.

I tried to use the driver in this way, but it did not work. I got a series of 
blank cahracters on the terminal, and when I looked at the TX data with a 
scope, I saw that the data was always the same, even though the characters were 
being copied to the exact memory location where the buffer descriptor 
cbd_bufaddr was set to. i.e. __va(bdp->cdb_bufaddr).

I then, taking as a reference the CPM SPI driver, tried to call 
flush_dcache_range() with the data buffer range, just before setting the 
BD_SC_READY bit on bdp->cdb_sc.

This seemed to resolve the problem for the UART driver, but now I am confronted 
with the fact that the FCC driver uses m8260_cpm_hostalloc for both Buffer 
Descriptors and data buffers.
I see that this driver is widely used by a series of standard boards, and 
invalidating cache after writing to Buffer Descriptor and after writing onto 
data buffers seems a bit over the top.

I also tried to disable cashing on DBAT2 to see if I could use the UART and FCC 
drivers, but I did not get any output on the console.

I try to find threads with similar problems as the one I am getting here, but I 
did not seem to find any relevant ones for this particular problem, which is 
leading me to think that I might be missing something here.

Should I allocate a section of memory into another DBAT with non caching 
attribute, to be used with hardware ?
Is there another trick to bypass caching for a particular section of memory 
allocated ?

I would appreciate any suggestions regarding this

Best regards

Joao Vicente

** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/



Reply via email to