|
|
|
|
@@ -47,7 +47,7 @@ static void fsl_edma_enable_request(struct fsl_edma_chan *fsl_chan)
|
|
|
|
|
struct edma_regs *regs = &fsl_chan->edma->regs;
|
|
|
|
|
u32 ch = fsl_chan->vchan.chan.chan_id;
|
|
|
|
|
|
|
|
|
|
if (fsl_chan->edma->drvdata->version == v1) {
|
|
|
|
|
if (fsl_chan->edma->drvdata->flags & FSL_EDMA_DRV_WRAP_IO) {
|
|
|
|
|
edma_writeb(fsl_chan->edma, EDMA_SEEI_SEEI(ch), regs->seei);
|
|
|
|
|
edma_writeb(fsl_chan->edma, ch, regs->serq);
|
|
|
|
|
} else {
|
|
|
|
|
@@ -64,7 +64,7 @@ void fsl_edma_disable_request(struct fsl_edma_chan *fsl_chan)
|
|
|
|
|
struct edma_regs *regs = &fsl_chan->edma->regs;
|
|
|
|
|
u32 ch = fsl_chan->vchan.chan.chan_id;
|
|
|
|
|
|
|
|
|
|
if (fsl_chan->edma->drvdata->version == v1) {
|
|
|
|
|
if (fsl_chan->edma->drvdata->flags & FSL_EDMA_DRV_WRAP_IO) {
|
|
|
|
|
edma_writeb(fsl_chan->edma, ch, regs->cerq);
|
|
|
|
|
edma_writeb(fsl_chan->edma, EDMA_CEEI_CEEI(ch), regs->ceei);
|
|
|
|
|
} else {
|
|
|
|
|
@@ -120,7 +120,7 @@ void fsl_edma_chan_mux(struct fsl_edma_chan *fsl_chan,
|
|
|
|
|
muxaddr = fsl_chan->edma->muxbase[ch / chans_per_mux];
|
|
|
|
|
slot = EDMAMUX_CHCFG_SOURCE(slot);
|
|
|
|
|
|
|
|
|
|
if (fsl_chan->edma->drvdata->version == v3)
|
|
|
|
|
if (fsl_chan->edma->drvdata->flags & FSL_EDMA_DRV_CONFIG32)
|
|
|
|
|
mux_configure32(fsl_chan, muxaddr, ch_off, slot, enable);
|
|
|
|
|
else
|
|
|
|
|
mux_configure8(fsl_chan, muxaddr, ch_off, slot, enable);
|
|
|
|
|
@@ -682,9 +682,8 @@ void fsl_edma_cleanup_vchan(struct dma_device *dmadev)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* On the 32 channels Vybrid/mpc577x edma version (here called "v1"),
|
|
|
|
|
* register offsets are different compared to ColdFire mcf5441x 64 channels
|
|
|
|
|
* edma (here called "v2").
|
|
|
|
|
* On the 32 channels Vybrid/mpc577x edma version, register offsets are
|
|
|
|
|
* different compared to ColdFire mcf5441x 64 channels edma.
|
|
|
|
|
*
|
|
|
|
|
* This function sets up register offsets as per proper declared version
|
|
|
|
|
* so must be called in xxx_edma_probe() just after setting the
|
|
|
|
|
@@ -692,33 +691,25 @@ void fsl_edma_cleanup_vchan(struct dma_device *dmadev)
|
|
|
|
|
*/
|
|
|
|
|
void fsl_edma_setup_regs(struct fsl_edma_engine *edma)
|
|
|
|
|
{
|
|
|
|
|
bool is64 = !!(edma->drvdata->flags & FSL_EDMA_DRV_EDMA64);
|
|
|
|
|
|
|
|
|
|
edma->regs.cr = edma->membase + EDMA_CR;
|
|
|
|
|
edma->regs.es = edma->membase + EDMA_ES;
|
|
|
|
|
edma->regs.erql = edma->membase + EDMA_ERQ;
|
|
|
|
|
edma->regs.eeil = edma->membase + EDMA_EEI;
|
|
|
|
|
|
|
|
|
|
edma->regs.serq = edma->membase + ((edma->drvdata->version == v2) ?
|
|
|
|
|
EDMA64_SERQ : EDMA_SERQ);
|
|
|
|
|
edma->regs.cerq = edma->membase + ((edma->drvdata->version == v2) ?
|
|
|
|
|
EDMA64_CERQ : EDMA_CERQ);
|
|
|
|
|
edma->regs.seei = edma->membase + ((edma->drvdata->version == v2) ?
|
|
|
|
|
EDMA64_SEEI : EDMA_SEEI);
|
|
|
|
|
edma->regs.ceei = edma->membase + ((edma->drvdata->version == v2) ?
|
|
|
|
|
EDMA64_CEEI : EDMA_CEEI);
|
|
|
|
|
edma->regs.cint = edma->membase + ((edma->drvdata->version == v2) ?
|
|
|
|
|
EDMA64_CINT : EDMA_CINT);
|
|
|
|
|
edma->regs.cerr = edma->membase + ((edma->drvdata->version == v2) ?
|
|
|
|
|
EDMA64_CERR : EDMA_CERR);
|
|
|
|
|
edma->regs.ssrt = edma->membase + ((edma->drvdata->version == v2) ?
|
|
|
|
|
EDMA64_SSRT : EDMA_SSRT);
|
|
|
|
|
edma->regs.cdne = edma->membase + ((edma->drvdata->version == v2) ?
|
|
|
|
|
EDMA64_CDNE : EDMA_CDNE);
|
|
|
|
|
edma->regs.intl = edma->membase + ((edma->drvdata->version == v2) ?
|
|
|
|
|
EDMA64_INTL : EDMA_INTR);
|
|
|
|
|
edma->regs.errl = edma->membase + ((edma->drvdata->version == v2) ?
|
|
|
|
|
EDMA64_ERRL : EDMA_ERR);
|
|
|
|
|
edma->regs.serq = edma->membase + (is64 ? EDMA64_SERQ : EDMA_SERQ);
|
|
|
|
|
edma->regs.cerq = edma->membase + (is64 ? EDMA64_CERQ : EDMA_CERQ);
|
|
|
|
|
edma->regs.seei = edma->membase + (is64 ? EDMA64_SEEI : EDMA_SEEI);
|
|
|
|
|
edma->regs.ceei = edma->membase + (is64 ? EDMA64_CEEI : EDMA_CEEI);
|
|
|
|
|
edma->regs.cint = edma->membase + (is64 ? EDMA64_CINT : EDMA_CINT);
|
|
|
|
|
edma->regs.cerr = edma->membase + (is64 ? EDMA64_CERR : EDMA_CERR);
|
|
|
|
|
edma->regs.ssrt = edma->membase + (is64 ? EDMA64_SSRT : EDMA_SSRT);
|
|
|
|
|
edma->regs.cdne = edma->membase + (is64 ? EDMA64_CDNE : EDMA_CDNE);
|
|
|
|
|
edma->regs.intl = edma->membase + (is64 ? EDMA64_INTL : EDMA_INTR);
|
|
|
|
|
edma->regs.errl = edma->membase + (is64 ? EDMA64_ERRL : EDMA_ERR);
|
|
|
|
|
|
|
|
|
|
if (edma->drvdata->version == v2) {
|
|
|
|
|
if (is64) {
|
|
|
|
|
edma->regs.erqh = edma->membase + EDMA64_ERQH;
|
|
|
|
|
edma->regs.eeih = edma->membase + EDMA64_EEIH;
|
|
|
|
|
edma->regs.errh = edma->membase + EDMA64_ERRH;
|
|
|
|
|
|