Date: | 2012-04-12 18:37:33 (11 years 11 months ago) |
---|---|
Author: | Maarten ter Huurne |
Commit: | 6c19f27c831d470cbed52ab7214fb2dfae8563f9 |
Message: | MIPS: JZ4740: Use round robin DMA channel priority mode. Round robin is performed over two priority groups of 3 channels each, so an argument was added to jz4740_dma_request() to select priority group. |
Files: |
arch/mips/include/asm/mach-jz4740/dma.h (1 diff) arch/mips/jz4740/dma.c (3 diffs) sound/soc/jz4740/jz4740-pcm.c (1 diff) |
Change Details
arch/mips/include/asm/mach-jz4740/dma.h | ||
---|---|---|
68 | 68 | |
69 | 69 | typedef void (*jz4740_dma_complete_callback_t)(struct jz4740_dma_chan *, int, void *); |
70 | 70 | |
71 | struct jz4740_dma_chan *jz4740_dma_request(void *dev, const char *name); | |
71 | /* | |
72 | * The 'prio' argument selects priority group: 0 (high) or 1 (low). | |
73 | * There are 3 DMA channels available per group. | |
74 | */ | |
75 | struct jz4740_dma_chan *jz4740_dma_request(void *dev, const char *name, int prio); | |
72 | 76 | void jz4740_dma_free(struct jz4740_dma_chan *dma); |
73 | 77 | |
74 | 78 | void jz4740_dma_configure(struct jz4740_dma_chan *dma, |
arch/mips/jz4740/dma.c | ||
---|---|---|
63 | 63 | #define JZ_DMA_CMD_TRANSFER_SIZE_OFFSET 8 |
64 | 64 | #define JZ_DMA_CMD_MODE_OFFSET 7 |
65 | 65 | |
66 | #define JZ_DMA_CTRL_PRIORITY_MASK (0x3 << 8) | |
67 | #define JZ_DMA_CTRL_HALT BIT(3) | |
68 | #define JZ_DMA_CTRL_ADDRESS_ERROR BIT(2) | |
69 | #define JZ_DMA_CTRL_ENABLE BIT(0) | |
66 | #define JZ_DMA_CTRL_PRIORITY_012345 (0x0 << 8) | |
67 | #define JZ_DMA_CTRL_PRIORITY_023145 (0x1 << 8) | |
68 | #define JZ_DMA_CTRL_PRIORITY_201345 (0x2 << 8) | |
69 | #define JZ_DMA_CTRL_PRIORITY_ROUND_ROBIN (0x3 << 8) | |
70 | #define JZ_DMA_CTRL_PRIORITY_MASK (0x3 << 8) | |
71 | #define JZ_DMA_CTRL_HALT BIT(3) | |
72 | #define JZ_DMA_CTRL_ADDRESS_ERROR BIT(2) | |
73 | #define JZ_DMA_CTRL_ENABLE BIT(0) | |
70 | 74 | |
71 | 75 | |
72 | 76 | static void __iomem *jz4740_dma_base; |
... | ... | |
115 | 119 | JZ4740_DMA_CHANNEL(5), |
116 | 120 | }; |
117 | 121 | |
118 | struct jz4740_dma_chan *jz4740_dma_request(void *dev, const char *name) | |
122 | struct jz4740_dma_chan *jz4740_dma_request(void *dev, const char *name, | |
123 | int prio) | |
119 | 124 | { |
120 | 125 | unsigned int i; |
121 | 126 | struct jz4740_dma_chan *dma = NULL; |
122 | 127 | |
128 | if (prio < 0 || prio > 1) | |
129 | return NULL; | |
130 | ||
123 | 131 | spin_lock(&jz4740_dma_lock); |
124 | 132 | |
125 | for (i = 0; i < ARRAY_SIZE(jz4740_dma_channels); ++i) { | |
133 | for (i = prio * 3; i < prio * 3 + 3; ++i) { | |
126 | 134 | if (!jz4740_dma_channels[i].used) { |
127 | 135 | dma = &jz4740_dma_channels[i]; |
128 | 136 | dma->used = 1; |
... | ... | |
271 | 279 | unsigned int ret; |
272 | 280 | |
273 | 281 | jz4740_dma_base = ioremap(JZ4740_DMAC_BASE_ADDR, 0x400); |
274 | ||
275 | 282 | if (!jz4740_dma_base) |
276 | 283 | return -EBUSY; |
277 | 284 | |
278 | 285 | spin_lock_init(&jz4740_dma_lock); |
279 | 286 | |
280 | 287 | ret = request_irq(JZ4740_IRQ_DMAC, jz4740_dma_irq, 0, "DMA", NULL); |
281 | ||
282 | if (ret) | |
288 | if (ret) { | |
283 | 289 | printk(KERN_ERR "JZ4740 DMA: Failed to request irq: %d\n", ret); |
290 | goto err_iounmap; | |
291 | } | |
292 | ||
293 | jz4740_dma_write_mask(JZ_REG_DMA_CTRL, | |
294 | JZ_DMA_CTRL_PRIORITY_ROUND_ROBIN, | |
295 | JZ_DMA_CTRL_PRIORITY_MASK); | |
296 | ||
297 | return 0; | |
284 | 298 | |
299 | err_iounmap: | |
300 | iounmap(jz4740_dma_base); | |
285 | 301 | return ret; |
286 | 302 | } |
287 | 303 | arch_initcall(jz4740_dma_init); |
sound/soc/jz4740/jz4740-pcm.c | ||
---|---|---|
109 | 109 | |
110 | 110 | if (!prtd->dma) { |
111 | 111 | if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) |
112 | prtd->dma = jz4740_dma_request(substream, "PCM Capture"); | |
112 | prtd->dma = jz4740_dma_request(substream, | |
113 | "PCM Capture", 0); | |
113 | 114 | else |
114 | prtd->dma = jz4740_dma_request(substream, "PCM Playback"); | |
115 | prtd->dma = jz4740_dma_request(substream, | |
116 | "PCM Playback", 0); | |
115 | 117 | } |
116 | 118 | |
117 | 119 | if (!prtd->dma) |
Branches:
ben-wpan
ben-wpan-stefan
5396a9238205f20f811ea57898980d3ca82df0b6
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9