9
0
Fork 0

NIOS2: use dma_addr_t in dma_alloc_coherent

This allows to consolidate the prototype of this function across
architectures. Also guard against calles that pass in NULL as the
dma handle pointer.

Signed-off-by: Lucas Stach <dev@lynxeye.de>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
Lucas Stach 2015-03-05 22:49:53 +01:00 committed by Sascha Hauer
parent f61fa09a42
commit 394a3533a8
3 changed files with 10 additions and 7 deletions

View File

@ -14,24 +14,25 @@
*/
#if (DCACHE_SIZE != 0)
static inline void *dma_alloc_coherent(size_t len, unsigned long *handle)
static inline void *dma_alloc_coherent(size_t len, dma_addr_t *handle)
{
void *addr = malloc(len + DCACHE_LINE_SIZE);
if (!addr)
return 0;
flush_dcache_range((unsigned long)addr,(unsigned long)addr + len + DCACHE_LINE_SIZE);
*handle = ((unsigned long)addr +
(DCACHE_LINE_SIZE - 1)) &
~(DCACHE_LINE_SIZE - 1) & ~(IO_REGION_BASE);
if (handle)
*handle = ((dma_addr_t)addr + (DCACHE_LINE_SIZE - 1)) &
~(DCACHE_LINE_SIZE - 1) & ~(IO_REGION_BASE);
return (void *)(*handle | IO_REGION_BASE);
}
#else
static inline void *dma_alloc_coherent(size_t len, unsigned long *handle)
static inline void *dma_alloc_coherent(size_t len, dma_addr_t *handle)
{
void *addr = malloc(len);
if (!addr)
return 0;
*handle = (unsigned long)addr;
if (handle)
*handle = (dma_addr_t)addr;
return (void *)(*handle | IO_REGION_BASE);
}
#endif

View File

@ -3,5 +3,7 @@
#include <asm/int-ll64.h>
typedef u32 dma_addr_t;
#endif

View File

@ -520,7 +520,7 @@ static int tse_probe(struct device_d *dev)
return PTR_ERR(tx_desc);
rx_desc = tx_desc + 2;
#else
tx_desc = dma_alloc_coherent(sizeof(*tx_desc) * (3 + PKTBUFSRX), (unsigned long *)&dma_handle);
tx_desc = dma_alloc_coherent(sizeof(*tx_desc) * (3 + PKTBUFSRX), (dma_addr_t *)&dma_handle);
rx_desc = tx_desc + 2;
if (!tx_desc) {