Thanks l lot for your advice BMS. :)
I don't flush the CPU cache. How can i do for this method?
Anyway, I'm use virt_to_bus() with address that i get from "kmalloc" .
My stage is clear from SSPTx by DMA, but, I have a new problem with SSPRx,
another channel of DMAM2M.
i check that i got from SSPRX by DMA,sometime it right, sometime it wrong.
In my case, I use TS7400 to get data from external device via SPI bus.
, data is around 6000 byte per sec. That why i choose DMA.
I coding the basic test now before implement it for using in my coding.
--- In "Breton M. Saunders" <>
wrote:
>
> Did you flush the CPU cache after modifying memory that you expect to be
> DMAed out?
>
> If not, then you're likely transmitting data that is in physical ram
> prior to the cpu actually writing data back to physical ram.
>
> The SSP engine is pretty poor on this chip:
> * PIO mode is missing signals so you can use (at best) half of the
> fifo in an interrupt driven mode.
> * DMA works, but you need to use both M2M channels, and the setup
> costs aren't cheap on those. DMA is really only appropriate for
> something like 128 byte or larger transfers.
>
> -bms
>
> pakorn_0608 wrote:
> > Dear members,
> >
> > I'm use DMA on M2M mode with SSP, both of SSPTx and SSPRx for each channel.
> >
> > I have a bit problem with data that transmit and receive from SSP.
> >
> > I use "kmalloc" to get allocate memory address and i write some data into
> > that address.
> > I can write and read correctly by using "printk".
> >
> > I'm also use it with SSPDR for transmit data from SPI by "outl" command,
> > data come out from SSPTx with clock sync correctly.
> >
> > Anyway,It's wrong when i'm using with DMA register.
> >
> > For example, DMA M2M0 using with SSPtx, I set DMA register, source register
> > with address from kmalloc "0xd120_10eo", destination address SSPDR
> > "0x808A_0008" and BCR by 3.
> >
> > There are data come out from SSPtx but it is not right value that it should
> > be in memory address shown by "printk".
> >
> > Could someone have some suggest to me for using DMA with SSP for 7400 board?
> >
> > *******************
> > example with some coding:
> > *******************
> >
> >
> > /* I write it for kernel module*/
> > ...
> > char *buffer_dma[MAX_EP93XX_DMA_M2M_CHANNELS];
> > .
> > .
> > .
> > buffer_dma[0] = kmalloc( size , GFP_KERNEL|GFP_DMA); /* example size is
> > 10*/
> >
> > for(i=0;i<10;i++)
> > {
> > buffer_dma[0][i] = i*10;
> >
> > printk("Address of buffer_dma[0][%d] = 0x%lx\n",i,(unsigned
> > long)&buffer_dma[0][i]);
> > printk("Value of buffer_dma[0][%d] = %d\n",i,buffer_dma[0][i]);
> > }
> >
> > /*
> > I print this value for show address and value
> > my address for buffer_dma[0][0] is "0xd120_10eo" and value is 0
> > next, address for buffer_dma[0][1] is "0xd120_10e1" and value is 10... and
> > other value is shown correctly.
> >
> > I also use with SSP
> >
> > */
> >
> > for(i=0;i<10;i++)
> > {
> > outl(buffer_dma[0][i] , SSPDR );
> > }
> >
> > /*
> > I'm set SSP 8 bit,
> > data come out from SSPTx is correctly , compare bit by bit with ssp_clock
> >
> > next i'm usongit with DMA M2M for SSPTx
> >
> > */
> >
> >
> > outl(&buffer_dma[0][0] , m2m_channel[channel].base + M2M_SAR_BASE0);
> > outl( SSPDR , m2m_channel[channel].base + M2M_DAR_BASE0);
> > outl(3 , m2m_channel[channel].base + M2M_BCR0);
> >
> > /*
> > After that i'm enable DMA
> > my data that come out from SSPTx is wrong all,
> > even i change data in my buffer_dma[0][i] on above
> > data come out from SSPTx is still the same value.
> > It's not match with it should be in memory address
> > */
> >
> > ------------------------------------
> >
> > Yahoo! Groups Links
> >
> >
> >
>
------------------------------------
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/ts-7000/
<*> Your email settings:
Individual Email | Traditional
<*> To change settings online go to:
http://groups.yahoo.com/group/ts-7000/join
(Yahoo! ID required)
<*> To change settings via email:
<*> To unsubscribe from this group, send an email to:
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/
|