Merge "dma: gpi: Correct the return code in dmaengine_pause api"

This commit is contained in:
qctecmdr 2020-11-17 17:05:50 -08:00 • committed by Gerrit - the friendly Code Review server
commit 03d0199dd1

View file

@ -2306,7 +2306,11 @@ static void gpi_noop_tre(struct gpii_chan *gpii_chan)
noop_tre = NOOP_TRE;
while (local_rp != local_wp) {
/* dump the channel ring at the time of error */
tre = (struct msm_gpi_tre *)cntxt_rp;
GPII_ERR(gpii, gpii_chan->chid, "local_rp:0x%011x TRE: %08x %08x %08x %08x\n",
local_rp, tre->dword[0], tre->dword[1],
tre->dword[2], tre->dword[3]);
tre->dword[3] &= noop_mask;
tre->dword[3] |= noop_tre;
local_rp += ch_ring->el_size;
@ -2327,11 +2331,46 @@ static int gpi_pause(struct dma_chan *chan)
{
struct gpii_chan *gpii_chan = to_gpii_chan(chan);
struct gpii *gpii = gpii_chan->gpii;
int i, ret;
int i, ret, idx = 0;
u32 offset1, offset2, type1, type2;
struct gpi_ring *ev_ring = &gpii->ev_ring;
phys_addr_t cntxt_rp, local_rp;
void *rp, *rp1;
union gpi_event *gpi_event;
u32 chid, type;
GPII_INFO(gpii, gpii_chan->chid, "Enter\n");
mutex_lock(&gpii->ctrl_lock);
/* dump the GPII IRQ register at the time of error */
offset1 = GPI_GPII_n_CNTXT_TYPE_IRQ_OFFS(gpii->gpii_id);
offset2 = GPI_GPII_n_CNTXT_SRC_IEOB_IRQ_MSK_OFFS(gpii->gpii_id);
while (idx++ < 3) {
type1 = gpi_read_reg(gpii, gpii->regs + offset1);
type2 = gpi_read_reg(gpii, gpii->regs + offset2);
GPII_ERR(gpii, GPI_DBG_COMMON, "CNTXT_TYPE_IRQ:0x%08x IEOB_MASK_OFF:0x%08x\n",
type1, type2);
}
cntxt_rp = gpi_read_reg(gpii, gpii->ev_ring_rp_lsb_reg);
rp = to_virtual(ev_ring, cntxt_rp);
local_rp = to_physical(ev_ring, ev_ring->rp);
rp1 = ev_ring->rp;
/* dump the event ring at the time of error */
GPII_ERR(gpii, GPI_DBG_COMMON, "cntxt_rp:%pa local_rp:%pa\n",
&cntxt_rp, &local_rp);
while (rp != rp1) {
gpi_event = rp1;
chid = gpi_event->xfer_compl_event.chid;
type = gpi_event->xfer_compl_event.type;
GPII_ERR(gpii, GPI_DBG_COMMON,
"chid:%u type:0x%x %08x %08x %08x %08x\n", chid, type,
gpi_event->gpi_ere.dword[0], gpi_event->gpi_ere.dword[1],
gpi_event->gpi_ere.dword[2], gpi_event->gpi_ere.dword[3]);
rp1 += ev_ring->el_size;
}
/* send stop command to stop the channels */
for (i = 0; i < MAX_CHANNELS_PER_GPII; i++) {
gpii_chan = &gpii->gpii_chan[i];
@ -2362,7 +2401,7 @@ static int gpi_pause(struct dma_chan *chan)
GPII_ERR(gpii, gpii_chan->chid,
"Error Starting Channel ret:%d\n", ret);
mutex_unlock(&gpii->ctrl_lock);
return ret;
return -ECONNRESET;
}
}