Lines Matching refs:host

15 #include <linux/mmc/host.h>
69 * - host->chan_{rx,tx} will be used as a flag of enabling/disabling the dma
295 renesas_sdhi_internal_dmac_enable_dma(struct tmio_mmc_host *host, bool enable)
297 struct renesas_sdhi *priv = host_to_priv(host);
302 if (!host->chan_tx || !host->chan_rx)
305 writel(enable ? ~dma_irqs : INFO1_MASK_CLEAR, host->ctl + DM_CM_INFO1_MASK);
308 priv->dma_priv.enable(host, enable);
312 renesas_sdhi_internal_dmac_abort_dma(struct tmio_mmc_host *host)
316 renesas_sdhi_internal_dmac_enable_dma(host, false);
318 writel(RST_RESERVED_BITS & ~val, host->ctl + DM_CM_RST);
319 writel(RST_RESERVED_BITS | val, host->ctl + DM_CM_RST);
323 renesas_sdhi_internal_dmac_enable_dma(host, true);
326 static bool renesas_sdhi_internal_dmac_dma_irq(struct tmio_mmc_host *host)
328 struct renesas_sdhi *priv = host_to_priv(host);
334 u32 status = readl(host->ctl + DM_CM_INFO1);
337 writel(status ^ dma_irqs, host->ctl + DM_CM_INFO1);
347 renesas_sdhi_internal_dmac_dataend_dma(struct tmio_mmc_host *host)
349 struct renesas_sdhi *priv = host_to_priv(host);
354 host->data->error)
360 * sg pointers in two mmc_data by .pre_req(), but tmio host can have a single
362 * pointer in a mmc_data instead of host->sg_ptr.
365 renesas_sdhi_internal_dmac_unmap(struct tmio_mmc_host *host,
373 dma_unmap_sg(&host->pdev->dev, data->sg, data->sg_len,
380 renesas_sdhi_internal_dmac_map(struct tmio_mmc_host *host,
387 if (!dma_map_sg(&host->pdev->dev, data->sg, data->sg_len,
395 renesas_sdhi_internal_dmac_unmap(host, data, cookie);
403 renesas_sdhi_internal_dmac_start_dma(struct tmio_mmc_host *host,
406 struct renesas_sdhi *priv = host_to_priv(host);
407 struct scatterlist *sg = host->sg_ptr;
413 if (!renesas_sdhi_internal_dmac_map(host, data, COOKIE_MAPPED))
426 renesas_sdhi_internal_dmac_enable_dma(host, true);
429 writel(dtran_mode, host->ctl + DM_CM_DTRAN_MODE);
430 writel(sg_dma_address(sg), host->ctl + DM_DTRAN_ADDR);
432 host->dma_on = true;
437 renesas_sdhi_internal_dmac_unmap(host, data, COOKIE_UNMAPPED);
440 renesas_sdhi_internal_dmac_enable_dma(host, false);
445 struct tmio_mmc_host *host = (struct tmio_mmc_host *)arg;
446 struct renesas_sdhi *priv = host_to_priv(host);
448 tmio_mmc_enable_mmc_irqs(host, TMIO_STAT_DATAEND);
450 if (!host->cmd->error) {
452 writel(DTRAN_CTRL_DM_START, host->ctl + DM_CM_DTRAN_CTRL);
461 static bool renesas_sdhi_internal_dmac_complete(struct tmio_mmc_host *host)
465 if (!host->dma_on)
468 if (!host->data)
471 if (host->data->flags & MMC_DATA_READ)
476 renesas_sdhi_internal_dmac_enable_dma(host, false);
477 renesas_sdhi_internal_dmac_unmap(host, host->data, COOKIE_MAPPED);
482 host->dma_on = false;
489 struct tmio_mmc_host *host = (struct tmio_mmc_host *)arg;
491 spin_lock_irq(&host->lock);
492 if (!renesas_sdhi_internal_dmac_complete(host))
495 tmio_mmc_do_data_irq(host);
497 spin_unlock_irq(&host->lock);
500 static void renesas_sdhi_internal_dmac_end_dma(struct tmio_mmc_host *host)
502 if (host->data)
503 renesas_sdhi_internal_dmac_complete(host);
510 struct tmio_mmc_host *host = mmc_priv(mmc);
516 renesas_sdhi_internal_dmac_unmap(host, data, COOKIE_UNMAPPED);
522 struct tmio_mmc_host *host = mmc_priv(mmc);
529 renesas_sdhi_internal_dmac_map(host, data, COOKIE_PRE_MAPPED);
533 renesas_sdhi_internal_dmac_request_dma(struct tmio_mmc_host *host,
536 struct renesas_sdhi *priv = host_to_priv(host);
539 writel(INFO1_MASK_CLEAR, host->ctl + DM_CM_INFO1_MASK);
540 writel(INFO2_MASK_CLEAR, host->ctl + DM_CM_INFO2_MASK);
541 writel(0, host->ctl + DM_CM_INFO1);
542 writel(0, host->ctl + DM_CM_INFO2);
545 host->chan_rx = host->chan_tx = (void *)0xdeadbeaf;
549 (unsigned long)host);
550 tasklet_init(&host->dma_issue,
552 (unsigned long)host);
555 host->ops.pre_req = renesas_sdhi_internal_dmac_pre_req;
556 host->ops.post_req = renesas_sdhi_internal_dmac_post_req;
560 renesas_sdhi_internal_dmac_release_dma(struct tmio_mmc_host *host)
563 host->chan_rx = host->chan_tx = NULL;