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: Tushar Dave <tushar.n.dave@oracle.com> Reviewed-by: thomas tai <thomas.tai@oracle.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
e58566b1b1
Коммит
16f46050e7
|
@ -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)
|
||||||
*/
|
*/
|
||||||
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)
|
||||||
*/
|
*/
|
||||||
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)
|
||||||
*(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)
|
||||||
/* 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)
|
||||||
/*
|
/*
|
||||||
* 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)
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
}
|
}
|
||||||
|
|
||||||
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.
|
||||||
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)
|
||||||
*(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)
|
||||||
*(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,
|
||||||
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. */
|
||||||
|
|
Загрузка…
Ссылка в новой задаче