I search from the net that it have to include "<asm/glue.h>" and/or
"<asm-arm/caceflush>" for using "dmac_flush_range()".
They have no on my linux include files of ts7400 provided on ftp.
How do you use that, BMS?
Is there anything that i have to do if i wanna use "dmac_flush_range"?
--- In "pakorn_0608" <> wrote:
>
>
> Thank a lot for your advice, i learn a lot from you.
>
>
> I'm using kernel 2.4.26 flatform, and, i also use GFP_DMA flag on my
> "kmalloc" command.
>
> Anyway,for my application, I'm using TS-7400 with ADS1278, adc 24bit/8CH.
>
> By now,I only using this chip only 1CH at 2k sampling.Protocol of ADS1278 is
> SPI, and There is some application which I have to use upto 8 channel but
> maybe in lower sampling.
>
> Not only this module that use transfer data via SPI, but it also have another
> module and application that transform data into some of standard file,
> moreover, it have web server for service some application for configuration
> and monitoring this data. There are moe a few but just a little job.
>
> In section of SPI,I use external interrupt to catch signal from ADS1278 and
> then send and recrieve data via SPI bus which depend on sampling rate,
> 2k/1CH/24bit by now, more in the future.
>
> It's sometime performance drop when i'm running full of them.
> That why i try to use DMA for helping do some job of whole.
>
>
> So, I'll try to use "dmac_flush_range" and tell the result soon.
>
>
>
> --- In "Breton M. Saunders" <breton.saunders@> wrote:
> >
> > The symptoms you describe are likely caused by data not being flushed to
> > physical ram prior to invoking your dma transfer.
> >
> > Just checking back to the sdcard driver I did for the 7400. I did:
> >
> > dmac_flush_range(buf,buf+buflen); // where buf is a pointer to a virtual
> > address (e.g. not a bus address)
> >
> > prior to performing a dma transfer.
> >
> > Although not strictly necessary on this platform, you should probably
> > make sure you use the GFP_DMA flag when you allocate memory for your
> > buffers.
> >
> > Incidentally, you are running this on a >2.6.27 platform?
> > Also, you aren't using the sdcard driver in dma mode right? There will
> > be some pretty serious problems if you are using TS's driver and just
> > banging commands directly into the M2M registers.
> >
> > I think at 6k bytes per second you might as well not bother with DMA.
> > From memory, 6k transfers at half fifo size (4 bytes) per interrupt is
> > 1500 interrupts per second. Keeping the ISR time short, you'll hardly
> > notice a performance drop. The main issue, though, is what are the
> > peripherals you are addressing? If your peripheral is something like a
> > tmp127, then the amount of signaling needed will kill any advantage of a
> > dma driver. If you're transferring from a memory chip, then dma is
> > probably quite sensible.
> >
> > -bms
> >
> > pakorn_0608 wrote:
> > > Unfortunately for me,I test it more and check in deep.
> > > Both of SSPTx and SSPRx are sometime update, not only one like i said
> > > before.
> > >
> > > For ts7400,I use virt_to_bus only for address that i got from "kmalloc",
> > > for SSPDR -address for SSPTX and SSPRx-, I doesn't use it.
> > >
> > > On the morning,I tried to use it with SSPDR. There is nothing comtout
> > > from SSP.
> > > I thoght address of SSPDR is physical addresses by default for EP9302 on
> > > TS7400.
> > >
> > > I try to use bus_to_virt with the memory that use for keeping data from
> > > SSPRx. It's the same result.
> > >
> > > Anyway,Thanks so much, I learn a lot from you.
> > >
> > > Now i looking for mor information about flush cache cpu which another one
> > > tell me in another replying.
> > >
> > > I'm just read from a bit and it seem have a useful for me.
> > > I'll try and update to you again if any progress.
> > >
> > >
> > > --- In Abid Rashid <abidrashid24@> wrote:
> > >
> > >> Â
> > >> It is important to map virtual addresses to physical addresses whenever
> > >> you work with DMA. (Please note that virt_to_bus might restrict your
> > >> cross platform portability).
> > >> I am not sure which Addresses are you using for Rx.Â
> > >>
> > >> Make sure you have mapped your DMA virtual addresses to Rx bus
> > >> addresses and vice versa.U might use bus_to_virt on DMA Rx addresses and
> > >> use this address to look at the data.
> > >> If any thing else I cant help....
> > >> Â
> > >> br,
> > >> Abid
> > >> --- On Mon, 3/15/10, pakorn_0608 <pakorn_0608@> wrote:
> > >>
> > >>
> > >> From: pakorn_0608 <pakorn_0608@>
> > >> Subject: [ts-7000] Re: DMA with SSP on TS7400
> > >> To:
> > >> Date: Monday, March 15, 2010, 11:31 PM
> > >>
> > >>
> > >> Â
> > >>
> > >>
> > >>
> > >> Thanks a lot, Abid :-)
> > >>
> > >> The virt_to_bus it's work for me.
> > >> bit by bit between SSPtx and SSP_CLK is come out correctly, but, i have
> > >> new problem now.
> > >>
> > >> Only SSPTx right , SSPRx is sometime right.
> > >> I use printk" for show what i got from SSPRx by using DMA.
> > >> On start up module,after enable DMA, the memory of SSPRx that i allocate
> > >> for DMA, It's sometime show my default value which i set it up on
> > >> initial, but, sometime it show correct value follow by what it get from
> > >> SSPRx.
> > >>
> > >> I'm finding the way to solve it.
> > >> Could you have any suggestion to me?
> > >>
> > >> Pakorn
> > >>
> > >> --- In .com, Abid Rashid <abidrashid24@ ...> wrote:
> > >>
> > >>> Ã?Â
> > >>> Kmalloc returned addresses need to be mapped to the bus addresses.
> > >>> Use
> > >>> bus_addr = virt_to_bus( virt_addr/ *returned from kmalloc*/);
> > >>> address as the dma destination.
> > >>> Hope it would help
> > >>> br,
> > >>> Abid
> > >>>
> > >>> --- On Mon, 3/15/10, pakorn_0608 <pakorn_0608@ ...> wrote:
> > >>>
> > >>>
> > >>> From: pakorn_0608 <pakorn_0608@ ...>
> > >>> Subject: [ts-7000] DMA with SSP on TS7400
> > >>> To: .com
> > >>> Date: Monday, March 15, 2010, 3:21 AM
> > >>>
> > >>>
> > >>> Ã?Â
> > >>>
> > >>>
> > >>>
> > >>> 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/
|