|
@@ -304,7 +304,7 @@ struct snd_dbri {
|
|
|
spinlock_t lock;
|
|
|
|
|
|
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 */
|
|
|
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)
|
|
|
{
|
|
|
+ u32 dvma_addr = (u32)dbri->dma_dvma;
|
|
|
+
|
|
|
/* Space for 2 WAIT cmds (replaced later by 1 JUMP cmd) */
|
|
|
len += 2;
|
|
|
spin_lock(&dbri->cmdlock);
|
|
|
if (dbri->cmdptr - dbri->dma->cmd + len < DBRI_NO_CMDS - 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;
|
|
|
else
|
|
|
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)
|
|
|
{
|
|
|
+ u32 dvma_addr = (u32)dbri->dma_dvma;
|
|
|
s32 tmp, addr;
|
|
|
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);
|
|
|
|
|
|
/* 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) = 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 */
|
|
|
static void dbri_initialize(struct snd_dbri *dbri)
|
|
|
{
|
|
|
+ u32 dvma_addr = (u32)dbri->dma_dvma;
|
|
|
s32 *cmd;
|
|
|
u32 dma_addr;
|
|
|
unsigned long flags;
|
|
@@ -764,7 +768,7 @@ static void dbri_initialize(struct snd_dbri *dbri)
|
|
|
/*
|
|
|
* 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->dbri_irqp = 1;
|
|
|
/*
|
|
@@ -778,7 +782,7 @@ static void dbri_initialize(struct snd_dbri *dbri)
|
|
|
dbri->cmdptr = cmd;
|
|
|
*(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);
|
|
|
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)
|
|
|
{
|
|
|
struct dbri_streaminfo *info = &dbri->stream_info[streamno];
|
|
|
+ u32 dvma_addr = (u32)dbri->dma_dvma;
|
|
|
__u32 dvma_buffer;
|
|
|
int desc;
|
|
|
int len;
|
|
@@ -1177,7 +1182,7 @@ static int setup_descs(struct snd_dbri *dbri, int streamno, unsigned int period)
|
|
|
else {
|
|
|
dbri->next_desc[last_desc] = desc;
|
|
|
dbri->dma->desc[last_desc].nda =
|
|
|
- dbri->dma_dvma + dbri_dma_off(desc, desc);
|
|
|
+ dvma_addr + dbri_dma_off(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_dvma + dbri_dma_off(desc, first_desc);
|
|
|
+ dvma_addr + dbri_dma_off(desc, first_desc);
|
|
|
dbri->next_desc[last_desc] = first_desc;
|
|
|
dbri->pipes[info->pipe].first_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)
|
|
|
{
|
|
|
struct dbri_streaminfo *info;
|
|
|
+ u32 dvma_addr = (u32)dbri->dma_dvma;
|
|
|
s32 *cmd;
|
|
|
unsigned long flags;
|
|
|
int first_td;
|
|
@@ -1718,7 +1724,7 @@ static void xmit_descs(struct snd_dbri *dbri)
|
|
|
*(cmd++) = DBRI_CMD(D_SDP, 0,
|
|
|
dbri->pipes[info->pipe].sdp
|
|
|
| D_SDP_P | D_SDP_EVERY | D_SDP_C);
|
|
|
- *(cmd++) = dbri->dma_dvma +
|
|
|
+ *(cmd++) = dvma_addr +
|
|
|
dbri_dma_off(desc, first_td);
|
|
|
dbri_cmdsend(dbri, cmd, 2);
|
|
|
|
|
@@ -1740,7 +1746,7 @@ static void xmit_descs(struct snd_dbri *dbri)
|
|
|
*(cmd++) = DBRI_CMD(D_SDP, 0,
|
|
|
dbri->pipes[info->pipe].sdp
|
|
|
| D_SDP_P | D_SDP_EVERY | D_SDP_C);
|
|
|
- *(cmd++) = dbri->dma_dvma +
|
|
|
+ *(cmd++) = dvma_addr +
|
|
|
dbri_dma_off(desc, first_td);
|
|
|
dbri_cmdsend(dbri, cmd, 2);
|
|
|
|
|
@@ -2539,7 +2545,7 @@ static int snd_dbri_create(struct snd_card *card,
|
|
|
if (!dbri->dma)
|
|
|
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);
|
|
|
|
|
|
/* Map the registers into memory. */
|