/* Run a check of memory-to-memory DMA */ void dma_test(enum dma_channel stream) { stm32_dma_stream_t *dma_stream = dma_get_channel(stream); uint32_t ctrl; char periph[32], memory[32]; unsigned count = sizeof(periph); int i; memset(memory, '\0', sizeof(memory)); for (i = 0; i < count; i++) periph[i] = 10 + i; dma_clear_isr(stream); /* Following the order in Doc ID 15965 Rev 5 p194 */ dma_stream->spar = (uint32_t)periph; dma_stream->sm0ar = (uint32_t)memory; dma_stream->sndtr = count; dma_stream->sfcr &= ~STM32_DMA_SFCR_DMDIS; ctrl = STM32_DMA_CCR_PL_MEDIUM; dma_stream->scr = ctrl; ctrl |= STM32_DMA_CCR_MINC; ctrl |= STM32_DMA_CCR_DIR_M2M; ctrl |= STM32_DMA_CCR_PINC; dma_stream->scr = ctrl; dma_dump(stream); dma_stream->scr = ctrl | STM32_DMA_CCR_EN; for (i = 0; i < count; i++) CPRINTF("%d/%d ", periph[i], memory[i]); CPRINTF("\ncount=%d\n", dma_stream->sndtr); dma_dump(stream); }
static void chipdump(struct bcm4xxx *ch, struct bcmstrbuf *b) { #ifdef BCMDBG bcm_bprintf(b, "regs 0x%x etphy 0x%x ch->intstatus 0x%x intmask 0x%x\n", (ulong)ch->regs, (ulong)ch->etphy, ch->intstatus, ch->intmask); bcm_bprintf(b, "\n"); /* dma engine state */ dma_dump(ch->di, b, FALSE); bcm_bprintf(b, "\n"); /* registers */ chipdumpregs(ch, ch->regs, b); bcm_bprintf(b, "\n"); /* switch registers */ #ifdef ETROBO if (ch->etc->robo) robo_dump_regs(ch->etc->robo, b); #endif /* ETROBO */ #ifdef ETADM if (ch->adm) adm_dump_regs(ch->adm, b->buf); #endif /* ETADM */ #endif /* BCMDBG */ }
static int bcm947xx_pcm_close(struct snd_pcm_substream *substream) { struct snd_soc_pcm_runtime *rtd = substream->private_data; bcm947xx_i2s_info_t *snd_bcm = rtd->dai->cpu_dai->private_data; struct bcm947xx_runtime_data *brtd = substream->runtime->private_data; DBG("%s %s\n", __FUNCTION__, bcm947xx_direction_str(substream)); DBG("%s: i2s intstatus 0x%x intmask 0x%x\n", __FUNCTION__, R_REG(snd_bcm->osh, &snd_bcm->regs->intstatus), R_REG(snd_bcm->osh, &snd_bcm->regs->intmask)); /* #if required because dma_dump is unavailable in non-debug builds. */ #if BCM947XX_DUMP_RING_BUFFER_ON_PCM_CLOSE_ON { /* dump dma rings to console */ #if !defined(FIFOERROR_DUMP_SIZE) #define FIFOERROR_DUMP_SIZE 8192 #endif char *tmp; struct bcmstrbuf b; if (snd_bcm->di[0] && (tmp = MALLOC(snd_bcm->osh, FIFOERROR_DUMP_SIZE))) { bcm_binit(&b, tmp, FIFOERROR_DUMP_SIZE); dma_dump(snd_bcm->di[0], &b, TRUE); printbig(tmp); MFREE(snd_bcm->osh, tmp, FIFOERROR_DUMP_SIZE); } } #endif /* BCM947XX_DUMP_RING_BUFFER_ON_PCM_CLOSE_ON */ /* reclaim all descriptors */ if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) { dma_rxreset(snd_bcm->di[0]); dma_rxreclaim(snd_bcm->di[0]); } else { dma_txreset(snd_bcm->di[0]); dma_txreclaim(snd_bcm->di[0], HNDDMA_RANGE_ALL); } if (brtd) kfree(brtd); else DBG("%s: called with brtd == NULL\n", __FUNCTION__); return 0; }