Skip to content

Commit 09c505c

Browse files
author
Vinod Koul
committed
Merge branch 'fix/hsu' into fixes
2 parents 3fe6409 + 4f4bc0a commit 09c505c

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed

drivers/dma/hsu/hsu.c

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,10 @@ static void hsu_dma_chan_start(struct hsu_dma_chan *hsuc)
6464

6565
if (hsuc->direction == DMA_MEM_TO_DEV) {
6666
bsr = config->dst_maxburst;
67-
mtsr = config->dst_addr_width;
67+
mtsr = config->src_addr_width;
6868
} else if (hsuc->direction == DMA_DEV_TO_MEM) {
6969
bsr = config->src_maxburst;
70-
mtsr = config->src_addr_width;
70+
mtsr = config->dst_addr_width;
7171
}
7272

7373
hsu_chan_disable(hsuc);
@@ -135,7 +135,7 @@ static u32 hsu_dma_chan_get_sr(struct hsu_dma_chan *hsuc)
135135
sr = hsu_chan_readl(hsuc, HSU_CH_SR);
136136
spin_unlock_irqrestore(&hsuc->vchan.lock, flags);
137137

138-
return sr;
138+
return sr & ~(HSU_CH_SR_DESCE_ANY | HSU_CH_SR_CDESC_ANY);
139139
}
140140

141141
irqreturn_t hsu_dma_irq(struct hsu_dma_chip *chip, unsigned short nr)
@@ -254,10 +254,13 @@ static void hsu_dma_issue_pending(struct dma_chan *chan)
254254
static size_t hsu_dma_active_desc_size(struct hsu_dma_chan *hsuc)
255255
{
256256
struct hsu_dma_desc *desc = hsuc->desc;
257-
size_t bytes = desc->length;
257+
size_t bytes = 0;
258258
int i;
259259

260-
i = desc->active % HSU_DMA_CHAN_NR_DESC;
260+
for (i = desc->active; i < desc->nents; i++)
261+
bytes += desc->sg[i].len;
262+
263+
i = HSU_DMA_CHAN_NR_DESC - 1;
261264
do {
262265
bytes += hsu_chan_readl(hsuc, HSU_CH_DxTSR(i));
263266
} while (--i >= 0);

drivers/dma/hsu/hsu.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@
4141
#define HSU_CH_SR_DESCTO(x) BIT(8 + (x))
4242
#define HSU_CH_SR_DESCTO_ANY (BIT(11) | BIT(10) | BIT(9) | BIT(8))
4343
#define HSU_CH_SR_CHE BIT(15)
44+
#define HSU_CH_SR_DESCE(x) BIT(16 + (x))
45+
#define HSU_CH_SR_DESCE_ANY (BIT(19) | BIT(18) | BIT(17) | BIT(16))
46+
#define HSU_CH_SR_CDESC_ANY (BIT(31) | BIT(30))
4447

4548
/* Bits in HSU_CH_CR */
4649
#define HSU_CH_CR_CHA BIT(0)

0 commit comments

Comments
 (0)