Commit 16f46050 authored by Tushar Dave's avatar Tushar Dave Committed by David S. Miller

dbri: Fix compiler warning

dbri uses 'u32' for dma handle while invoking kernel DMA APIs,
instead of using dma_addr_t. This hasn't caused any 'incompatible
pointer type' warning on SPARC because until now dma_addr_t is of
type u32. However, recent changes in SPARC ATU (iommu) enabled 64bit
DMA and therefore dma_addr_t became of type u64. This makes
'incompatible pointer type' warnings inevitable.

e.g.
sound/sparc/dbri.c: In function ‘snd_dbri_create’:
sound/sparc/dbri.c:2538: warning: passing argument 3 of ‘dma_zalloc_coherent’ from incompatible pointer type
./include/linux/dma-mapping.h:608: note: expected ‘dma_addr_t *’ but argument is of type ‘u32 *’

For the record, dbri(sbus) driver never executes on sun4v. Therefore
even though 64bit DMA is enabled on SPARC, dbri continues to use
legacy iommu that guarantees DMA address is always in 32bit range.

This patch resolves above compiler warning.
Signed-off-by: default avatarTushar Dave <tushar.n.dave@oracle.com>
Reviewed-by: default avatarthomas tai <thomas.tai@oracle.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent e58566b1
...@@ -304,7 +304,7 @@ struct snd_dbri { ...@@ -304,7 +304,7 @@ struct snd_dbri {
spinlock_t lock; spinlock_t lock;
struct dbri_dma *dma; /* Pointer to our DMA block */ struct dbri_dma *dma; /* Pointer to our DMA block */
u32 dma_dvma; /* DBRI visible DMA address */ dma_addr_t dma_dvma; /* DBRI visible DMA address */
void __iomem *regs; /* dbri HW regs */ void __iomem *regs; /* dbri HW regs */
int dbri_irqp; /* intr queue pointer */ int dbri_irqp; /* intr queue pointer */
...@@ -657,12 +657,14 @@ static void dbri_cmdwait(struct snd_dbri *dbri) ...@@ -657,12 +657,14 @@ static void dbri_cmdwait(struct snd_dbri *dbri)
*/ */
static s32 *dbri_cmdlock(struct snd_dbri *dbri, int len) static s32 *dbri_cmdlock(struct snd_dbri *dbri, int len)
{ {
u32 dvma_addr = (u32)dbri->dma_dvma;
/* Space for 2 WAIT cmds (replaced later by 1 JUMP cmd) */ /* Space for 2 WAIT cmds (replaced later by 1 JUMP cmd) */
len += 2; len += 2;
spin_lock(&dbri->cmdlock); spin_lock(&dbri->cmdlock);
if (dbri->cmdptr - dbri->dma->cmd + len < DBRI_NO_CMDS - 2) if (dbri->cmdptr - dbri->dma->cmd + len < DBRI_NO_CMDS - 2)
return dbri->cmdptr + 2; return dbri->cmdptr + 2;
else if (len < sbus_readl(dbri->regs + REG8) - dbri->dma_dvma) else if (len < sbus_readl(dbri->regs + REG8) - dvma_addr)
return dbri->dma->cmd; return dbri->dma->cmd;
else else
printk(KERN_ERR "DBRI: no space for commands."); printk(KERN_ERR "DBRI: no space for commands.");
...@@ -680,6 +682,7 @@ static s32 *dbri_cmdlock(struct snd_dbri *dbri, int len) ...@@ -680,6 +682,7 @@ static s32 *dbri_cmdlock(struct snd_dbri *dbri, int len)
*/ */
static void dbri_cmdsend(struct snd_dbri *dbri, s32 *cmd, int len) static void dbri_cmdsend(struct snd_dbri *dbri, s32 *cmd, int len)
{ {
u32 dvma_addr = (u32)dbri->dma_dvma;
s32 tmp, addr; s32 tmp, addr;
static int wait_id = 0; static int wait_id = 0;
...@@ -689,7 +692,7 @@ static void dbri_cmdsend(struct snd_dbri *dbri, s32 *cmd, int len) ...@@ -689,7 +692,7 @@ static void dbri_cmdsend(struct snd_dbri *dbri, s32 *cmd, int len)
*(cmd+1) = DBRI_CMD(D_WAIT, 1, wait_id); *(cmd+1) = DBRI_CMD(D_WAIT, 1, wait_id);
/* Replace the last command with JUMP */ /* Replace the last command with JUMP */
addr = dbri->dma_dvma + (cmd - len - dbri->dma->cmd) * sizeof(s32); addr = dvma_addr + (cmd - len - dbri->dma->cmd) * sizeof(s32);
*(dbri->cmdptr+1) = addr; *(dbri->cmdptr+1) = addr;
*(dbri->cmdptr) = DBRI_CMD(D_JUMP, 0, 0); *(dbri->cmdptr) = DBRI_CMD(D_JUMP, 0, 0);
...@@ -747,6 +750,7 @@ static void dbri_reset(struct snd_dbri *dbri) ...@@ -747,6 +750,7 @@ static void dbri_reset(struct snd_dbri *dbri)
/* Lock must not be held before calling this */ /* Lock must not be held before calling this */
static void dbri_initialize(struct snd_dbri *dbri) static void dbri_initialize(struct snd_dbri *dbri)
{ {
u32 dvma_addr = (u32)dbri->dma_dvma;
s32 *cmd; s32 *cmd;
u32 dma_addr; u32 dma_addr;
unsigned long flags; unsigned long flags;
...@@ -764,7 +768,7 @@ static void dbri_initialize(struct snd_dbri *dbri) ...@@ -764,7 +768,7 @@ static void dbri_initialize(struct snd_dbri *dbri)
/* /*
* Initialize the interrupt ring buffer. * Initialize the interrupt ring buffer.
*/ */
dma_addr = dbri->dma_dvma + dbri_dma_off(intr, 0); dma_addr = dvma_addr + dbri_dma_off(intr, 0);
dbri->dma->intr[0] = dma_addr; dbri->dma->intr[0] = dma_addr;
dbri->dbri_irqp = 1; dbri->dbri_irqp = 1;
/* /*
...@@ -778,7 +782,7 @@ static void dbri_initialize(struct snd_dbri *dbri) ...@@ -778,7 +782,7 @@ static void dbri_initialize(struct snd_dbri *dbri)
dbri->cmdptr = cmd; dbri->cmdptr = cmd;
*(cmd++) = DBRI_CMD(D_WAIT, 1, 0); *(cmd++) = DBRI_CMD(D_WAIT, 1, 0);
*(cmd++) = DBRI_CMD(D_WAIT, 1, 0); *(cmd++) = DBRI_CMD(D_WAIT, 1, 0);
dma_addr = dbri->dma_dvma + dbri_dma_off(cmd, 0); dma_addr = dvma_addr + dbri_dma_off(cmd, 0);
sbus_writel(dma_addr, dbri->regs + REG8); sbus_writel(dma_addr, dbri->regs + REG8);
spin_unlock(&dbri->cmdlock); spin_unlock(&dbri->cmdlock);
...@@ -1077,6 +1081,7 @@ static void recv_fixed(struct snd_dbri *dbri, int pipe, volatile __u32 *ptr) ...@@ -1077,6 +1081,7 @@ static void recv_fixed(struct snd_dbri *dbri, int pipe, volatile __u32 *ptr)
static int setup_descs(struct snd_dbri *dbri, int streamno, unsigned int period) static int setup_descs(struct snd_dbri *dbri, int streamno, unsigned int period)
{ {
struct dbri_streaminfo *info = &dbri->stream_info[streamno]; struct dbri_streaminfo *info = &dbri->stream_info[streamno];
u32 dvma_addr = (u32)dbri->dma_dvma;
__u32 dvma_buffer; __u32 dvma_buffer;
int desc; int desc;
int len; int len;
...@@ -1177,7 +1182,7 @@ static int setup_descs(struct snd_dbri *dbri, int streamno, unsigned int period) ...@@ -1177,7 +1182,7 @@ static int setup_descs(struct snd_dbri *dbri, int streamno, unsigned int period)
else { else {
dbri->next_desc[last_desc] = desc; dbri->next_desc[last_desc] = desc;
dbri->dma->desc[last_desc].nda = dbri->dma->desc[last_desc].nda =
dbri->dma_dvma + dbri_dma_off(desc, desc); dvma_addr + dbri_dma_off(desc, desc);
} }
last_desc = desc; last_desc = desc;
...@@ -1192,7 +1197,7 @@ static int setup_descs(struct snd_dbri *dbri, int streamno, unsigned int period) ...@@ -1192,7 +1197,7 @@ static int setup_descs(struct snd_dbri *dbri, int streamno, unsigned int period)
} }
dbri->dma->desc[last_desc].nda = dbri->dma->desc[last_desc].nda =
dbri->dma_dvma + dbri_dma_off(desc, first_desc); dvma_addr + dbri_dma_off(desc, first_desc);
dbri->next_desc[last_desc] = first_desc; dbri->next_desc[last_desc] = first_desc;
dbri->pipes[info->pipe].first_desc = first_desc; dbri->pipes[info->pipe].first_desc = first_desc;
dbri->pipes[info->pipe].desc = first_desc; dbri->pipes[info->pipe].desc = first_desc;
...@@ -1697,6 +1702,7 @@ interrupts are disabled. ...@@ -1697,6 +1702,7 @@ interrupts are disabled.
static void xmit_descs(struct snd_dbri *dbri) static void xmit_descs(struct snd_dbri *dbri)
{ {
struct dbri_streaminfo *info; struct dbri_streaminfo *info;
u32 dvma_addr = (u32)dbri->dma_dvma;
s32 *cmd; s32 *cmd;
unsigned long flags; unsigned long flags;
int first_td; int first_td;
...@@ -1718,7 +1724,7 @@ static void xmit_descs(struct snd_dbri *dbri) ...@@ -1718,7 +1724,7 @@ static void xmit_descs(struct snd_dbri *dbri)
*(cmd++) = DBRI_CMD(D_SDP, 0, *(cmd++) = DBRI_CMD(D_SDP, 0,
dbri->pipes[info->pipe].sdp dbri->pipes[info->pipe].sdp
| D_SDP_P | D_SDP_EVERY | D_SDP_C); | D_SDP_P | D_SDP_EVERY | D_SDP_C);
*(cmd++) = dbri->dma_dvma + *(cmd++) = dvma_addr +
dbri_dma_off(desc, first_td); dbri_dma_off(desc, first_td);
dbri_cmdsend(dbri, cmd, 2); dbri_cmdsend(dbri, cmd, 2);
...@@ -1740,7 +1746,7 @@ static void xmit_descs(struct snd_dbri *dbri) ...@@ -1740,7 +1746,7 @@ static void xmit_descs(struct snd_dbri *dbri)
*(cmd++) = DBRI_CMD(D_SDP, 0, *(cmd++) = DBRI_CMD(D_SDP, 0,
dbri->pipes[info->pipe].sdp dbri->pipes[info->pipe].sdp
| D_SDP_P | D_SDP_EVERY | D_SDP_C); | D_SDP_P | D_SDP_EVERY | D_SDP_C);
*(cmd++) = dbri->dma_dvma + *(cmd++) = dvma_addr +
dbri_dma_off(desc, first_td); dbri_dma_off(desc, first_td);
dbri_cmdsend(dbri, cmd, 2); dbri_cmdsend(dbri, cmd, 2);
...@@ -2539,7 +2545,7 @@ static int snd_dbri_create(struct snd_card *card, ...@@ -2539,7 +2545,7 @@ static int snd_dbri_create(struct snd_card *card,
if (!dbri->dma) if (!dbri->dma)
return -ENOMEM; return -ENOMEM;
dprintk(D_GEN, "DMA Cmd Block 0x%p (0x%08x)\n", dprintk(D_GEN, "DMA Cmd Block 0x%p (%pad)\n",
dbri->dma, dbri->dma_dvma); dbri->dma, dbri->dma_dvma);
/* Map the registers into memory. */ /* Map the registers into memory. */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment