22 #include <linux/module.h>
23 #include <linux/slab.h>
35 #include "../dmaengine.h"
38 #define SH_DMAE_DRV_NAME "sh-dma-engine"
41 #define LOG2_DEFAULT_XFER_SIZE 2
42 #define SH_DMA_SLAVE_NUMBER 256
43 #define SH_DMA_TCR_MAX (16 * 1024 * 1024 - 1)
74 if (shdev->
pdata->dmaor_is_32bit)
84 if (shdev->
pdata->dmaor_is_32bit)
111 unsigned short dmaor;
116 dmaor = dmaor_read(shdev);
119 spin_unlock_irqrestore(&sh_dmae_lock, flags);
124 unsigned short dmaor;
131 if (shdev->
pdata->chclr_present) {
133 for (i = 0; i < shdev->
pdata->channel_num; i++) {
136 chclr_write(sh_chan, 0);
140 dmaor_write(shdev, dmaor | shdev->
pdata->dmaor_init);
142 dmaor = dmaor_read(shdev);
144 spin_unlock_irqrestore(&sh_dmae_lock, flags);
150 if (shdev->
pdata->dmaor_init & ~dmaor)
152 "DMAOR=0x%x hasn't latched the initial value 0x%x.\n",
153 dmaor, shdev->
pdata->dmaor_init);
159 u32 chcr = chcr_read(sh_chan);
167 static unsigned int calc_xmit_shift(
struct sh_dmae_chan *sh_chan,
u32 chcr)
199 sh_dmae_writel(sh_chan, hw->
sar,
SAR);
200 sh_dmae_writel(sh_chan, hw->
dar,
DAR);
207 u32 chcr = chcr_read(sh_chan);
209 if (shdev->
pdata->needs_tend_set)
210 sh_dmae_writel(sh_chan, 0xFFFFFFFF,
TEND);
213 chcr_write(sh_chan, chcr & ~
CHCR_TE);
224 sh_chan->
xmit_shift = calc_xmit_shift(sh_chan, chcr);
225 chcr_write(sh_chan, chcr);
231 if (dmae_is_busy(sh_chan))
234 sh_chan->
xmit_shift = calc_xmit_shift(sh_chan, val);
235 chcr_write(sh_chan, val);
246 unsigned int shift = chan_pdata->
dmars_bit;
248 if (dmae_is_busy(sh_chan))
257 addr += chan_pdata->
dmars /
sizeof(
u16);
265 static void sh_dmae_start_xfer(
struct shdma_chan *schan,
274 sh_desc->
hw.tcr, sh_desc->
hw.sar, sh_desc->
hw.dar);
276 dmae_set_reg(sh_chan, &sh_desc->
hw);
280 static bool sh_dmae_channel_busy(
struct shdma_chan *schan)
284 return dmae_is_busy(sh_chan);
287 static void sh_dmae_setup_xfer(
struct shdma_chan *schan,
297 dmae_set_dmars(sh_chan, cfg->
mid_rid);
298 dmae_set_chcr(sh_chan, cfg->
chcr);
315 for (i = 0, cfg = pdata->
slave; i < pdata->slave_num; i++, cfg++)
322 static int sh_dmae_set_slave(
struct shdma_chan *schan,
323 int slave_id,
bool try)
340 u32 chcr = chcr_read(sh_chan);
343 chcr_write(sh_chan, chcr);
346 static int sh_dmae_desc_setup(
struct shdma_chan *schan,
356 sh_desc->
hw.sar =
src;
357 sh_desc->
hw.dar =
dst;
358 sh_desc->
hw.tcr = *len;
363 static void sh_dmae_halt(
struct shdma_chan *schan)
370 static bool sh_dmae_chan_irq(
struct shdma_chan *schan,
int irq)
375 if (!(chcr_read(sh_chan) &
CHCR_TE))
384 static size_t sh_dmae_get_partial(
struct shdma_chan *schan,
391 return (sh_desc->
hw.tcr - sh_dmae_readl(sh_chan,
TCR)) <<
401 sh_dmae_ctl_stop(shdev);
411 static irqreturn_t sh_dmae_err(
int irq,
void *data)
415 if (!(dmaor_read(shdev) &
DMAOR_AE))
418 sh_dmae_reset(shdev);
422 static bool sh_dmae_desc_completed(
struct shdma_chan *schan,
429 u32 sar_buf = sh_dmae_readl(sh_chan,
SAR);
430 u32 dar_buf = sh_dmae_readl(sh_chan,
DAR);
433 (sh_desc->
hw.dar + sh_desc->
hw.tcr) == dar_buf) ||
435 (sh_desc->
hw.sar + sh_desc->
hw.tcr) == sar_buf);
444 return sh_dmae_reset(shdev);
448 unsigned long cmd,
void *data)
451 int ret = NOTIFY_DONE;
464 list_for_each_entry_rcu(shdev, &sh_dmae_devices,
node) {
470 triggered = sh_dmae_nmi_notify(shdev);
471 if (triggered ==
true)
480 .notifier_call = sh_dmae_nmi_handler,
487 int irq,
unsigned long flags)
499 "No free memory for allocating dma channels!\n");
513 "sh-dmae%d.%d", pdev->
id,
id);
521 "DMA channel %d request_irq error %d\n",
526 shdev->
chan[
id] = sh_chan;
558 sh_dmae_ctl_stop(shdev);
561 static int sh_dmae_runtime_suspend(
struct device *
dev)
566 static int sh_dmae_runtime_resume(
struct device *
dev)
570 return sh_dmae_rst(shdev);
584 ret = sh_dmae_rst(shdev);
586 dev_err(dev,
"Failed to reset!\n");
588 for (i = 0; i < shdev->
pdata->channel_num; i++) {
596 dmae_set_dmars(sh_chan, cfg->
mid_rid);
597 dmae_set_chcr(sh_chan, cfg->
chcr);
606 #define sh_dmae_suspend NULL
607 #define sh_dmae_resume NULL
613 .runtime_suspend = sh_dmae_runtime_suspend,
614 .runtime_resume = sh_dmae_runtime_resume,
627 return sh_chan->
config->addr;
630 static struct shdma_desc *sh_dmae_embedded_desc(
void *
buf,
int i)
635 static const struct shdma_ops sh_dmae_shdma_ops = {
636 .desc_completed = sh_dmae_desc_completed,
637 .halt_channel = sh_dmae_halt,
638 .channel_busy = sh_dmae_channel_busy,
639 .slave_addr = sh_dmae_slave_addr,
640 .desc_setup = sh_dmae_desc_setup,
641 .set_slave = sh_dmae_set_slave,
642 .setup_xfer = sh_dmae_setup_xfer,
643 .start_xfer = sh_dmae_start_xfer,
644 .embedded_desc = sh_dmae_embedded_desc,
645 .chan_irq = sh_dmae_chan_irq,
646 .get_partial = sh_dmae_get_partial,
655 int err,
i, irq_cnt = 0, irqres = 0, irq_cap = 0;
658 struct resource *
chan, *dmars, *errirq_res, *chanirq_res;
684 if (!chan || !errirq_res)
688 dev_err(&pdev->
dev,
"DMAC register region already claimed\n");
693 dev_err(&pdev->
dev,
"DMAC DMARS region already claimed\n");
724 shdev->
shdma_dev.ops = &sh_dmae_shdma_ops;
732 shdev->
pdata = pdev->
dev.platform_data;
744 platform_set_drvdata(pdev, shdev);
747 err = pm_runtime_get_sync(&pdev->
dev);
749 dev_err(&pdev->
dev,
"%s(): GET = %d\n", __func__, err);
751 spin_lock_irq(&sh_dmae_lock);
752 list_add_tail_rcu(&shdev->
node, &sh_dmae_devices);
753 spin_unlock_irq(&sh_dmae_lock);
756 err = sh_dmae_rst(shdev);
760 #if defined(CONFIG_CPU_SH4) || defined(CONFIG_ARCH_SHMOBILE)
764 chanirq_res = errirq_res;
768 if (chanirq_res == errirq_res ||
772 errirq = errirq_res->
start;
775 "DMAC Address Error", shdev);
778 "DMA failed requesting irq #%d, error %d\n",
784 chanirq_res = errirq_res;
787 if (chanirq_res->
start == chanirq_res->
end &&
792 chan_irq[irq_cnt] = chanirq_res->
start;
801 for (i = chanirq_res->
start; i <= chanirq_res->
end; i++) {
813 "Found IRQ %d for channel %d\n",
815 chan_irq[irq_cnt++] =
i;
823 }
while (irq_cnt < pdata->channel_num && chanirq_res);
827 for (i = 0; i < irq_cnt; i++) {
828 err = sh_dmae_chan_probe(shdev, i, chan_irq[i], chan_flag[i]);
834 dev_notice(&pdev->
dev,
"Attempting to register %d DMA "
835 "channels when a maximum of %d are supported.\n",
838 pm_runtime_put(&pdev->
dev);
847 pm_runtime_get(&pdev->
dev);
850 sh_dmae_chan_remove(shdev);
852 #if defined(CONFIG_CPU_SH4) || defined(CONFIG_ARCH_SHMOBILE)
857 spin_lock_irq(&sh_dmae_lock);
858 list_del_rcu(&shdev->
node);
859 spin_unlock_irq(&sh_dmae_lock);
861 pm_runtime_put(&pdev->
dev);
862 pm_runtime_disable(&pdev->
dev);
864 platform_set_drvdata(pdev,
NULL);
895 spin_lock_irq(&sh_dmae_lock);
896 list_del_rcu(&shdev->
node);
897 spin_unlock_irq(&sh_dmae_lock);
899 pm_runtime_disable(&pdev->
dev);
901 sh_dmae_chan_remove(shdev);
908 platform_set_drvdata(pdev,
NULL);
930 .shutdown = sh_dmae_shutdown,
933 static int __init sh_dmae_init(
void)
944 static void __exit sh_dmae_exit(
void)