Forum Discussion
Altera_Forum
Honored Contributor
15 years agoHi FP,
I have tried to do the memcpy by an alt_dma. However even if I flush and clear the cache, the system is very unstable. It freeze after I launch a telnet connection for exemple. If a Guru can have a look to my function below, it would be great !!!
void *memcpy_dma(void *dstpp, const void *srcpp, int length)
{
unsigned int dst = (unsigned int) dstpp;
unsigned int src = (unsigned int) srcpp;
unsigned int len = (unsigned int) length;
flush_dcache_range(src,src+len);
outl(CT_RESET,na_dma_memcpy + REG_DMA_CONTROL);
outl(CT_RESET,na_dma_memcpy + REG_DMA_CONTROL);
outl(src,na_dma_memcpy + REG_DMA_READADDR);
outl(dst,na_dma_memcpy + REG_DMA_WRITEADDR);
outl(len,na_dma_memcpy + REG_DMA_LENGTH);
outl(CT_BYTE+CT_GO+CT_LEEN,na_dma_memcpy + REG_DMA_CONTROL);
while ((inl(na_dma_memcpy+REG_DMA_STATUS) & ST_DONE) != ST_DONE) udelay(1);
outl(0,na_dma_memcpy + REG_DMA_CONTROL);
outl(0,na_dma_memcpy + REG_DMA_STATUS);
cache_clear(dst,len);
return (dst+len);
}
Bye !!!!