Message ID | 20220211034344.4130-6-jon.lin@rock-chips.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | None | expand |
On Fri, Feb 11, 2022 at 11:43:42AM +0800, Jon Lin wrote: > After slave abort, all DMA should be stopped, or it will affect the > next transmission: Again, this is a fix and should be at the start of the series. > > [ 31.693877] Unable to handle kernel paging request at virtual address ffffff8105a2a7c0 > [ 31.694643] Mem abort info: > [ 31.694898] ESR = 0x96000045 > [ 31.695179] EC = 0x25: DABT (current EL), IL = 32 bits > [ 31.695653] SET = 0, FnV = 0 > [ 31.695931] EA = 0, S1PTW = 0 Please think hard before including complete backtraces in upstream reports, they are very large and contain almost no useful information relative to their size so often obscure the relevant content in your message. If part of the backtrace is usefully illustrative (it often is for search engines if nothing else) then it's usually better to pull out the relevant sections.
diff --git a/drivers/spi/spi-rockchip.c b/drivers/spi/spi-rockchip.c index 5457af616a44..3d4e95eda4a6 100644 --- a/drivers/spi/spi-rockchip.c +++ b/drivers/spi/spi-rockchip.c @@ -617,8 +617,6 @@ static int rockchip_spi_slave_abort(struct spi_controller *ctlr) if (atomic_read(&rs->state) & RXDMA) { dmaengine_pause(ctlr->dma_rx); status = dmaengine_tx_status(ctlr->dma_rx, ctlr->dma_rx->cookie, &state); - dmaengine_terminate_sync(ctlr->dma_rx); - atomic_set(&rs->state, 0); if (status == DMA_ERROR) { rs->rx = rs->xfer->rx_buf; rs->xfer->len = 0; @@ -648,6 +646,11 @@ static int rockchip_spi_slave_abort(struct spi_controller *ctlr) } out: + if (atomic_read(&rs->state) & RXDMA) + dmaengine_terminate_sync(ctlr->dma_rx); + if (atomic_read(&rs->state) & TXDMA) + dmaengine_terminate_sync(ctlr->dma_tx); + atomic_set(&rs->state, 0); spi_enable_chip(rs, false); rs->slave_abort = true; spi_finalize_current_transfer(ctlr);
After slave abort, all DMA should be stopped, or it will affect the next transmission: [ 31.693877] Unable to handle kernel paging request at virtual address ffffff8105a2a7c0 [ 31.694643] Mem abort info: [ 31.694898] ESR = 0x96000045 [ 31.695179] EC = 0x25: DABT (current EL), IL = 32 bits [ 31.695653] SET = 0, FnV = 0 [ 31.695931] EA = 0, S1PTW = 0 [ 31.696218] Data abort info: [ 31.696485] ISV = 0, ISS = 0x00000045 [ 31.696832] CM = 0, WnR = 1 [ 31.697112] swapper pgtable: 4k pages, 39-bit VAs, pgdp=000000000142f000 [ 31.697713] [ffffff8105a2a7c0] pgd=0000000000000000, p4d=0000000000000000, pud=0000000000000000 [ 31.698502] Internal error: Oops: 96000045 [#1] SMP [ 31.698943] Modules linked in: [ 31.699235] CPU: 0 PID: 0 Comm: swapper/0 Tainted: G W 5.10.43 #8 [ 31.699895] Hardware name: Rockchip RK3588 EVB1 LP4 V10 Board (DT) [ 31.700455] pstate: 60400089 (nZCv daIf +PAN -UAO -TCO BTYPE=--) [ 31.701000] pc : rockchip_spi_slave_abort+0x150/0x18c [ 31.701456] lr : rockchip_spi_slave_abort+0x78/0x18c Signed-off-by: Jon Lin <jon.lin@rock-chips.com> --- drivers/spi/spi-rockchip.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)