On Fri, 1 Nov 2013 11:19:30 +0400 Alexander Popov <a13xp0p0...@gmail.com> wrote:
> Concentrate the specific code for MPC8308 in the 'if' branch > and handle MPC512x in the 'else' branch. > This modification only reorders instructions but doesn't change behaviour. > > Signed-off-by: Alexander Popov <a13xp0p0...@gmail.com> > --- > drivers/dma/mpc512x_dma.c | 42 +++++++++++++++++++++++++----------------- > 1 file changed, 25 insertions(+), 17 deletions(-) Acked-by: Anatolij Gustschin <ag...@denx.de> > > diff --git a/drivers/dma/mpc512x_dma.c b/drivers/dma/mpc512x_dma.c > index 2fe4353..f41639f 100644 > --- a/drivers/dma/mpc512x_dma.c > +++ b/drivers/dma/mpc512x_dma.c > @@ -50,9 +50,17 @@ > #define MPC_DMA_DESCRIPTORS 64 > > /* Macro definitions */ > -#define MPC_DMA_CHANNELS 64 > #define MPC_DMA_TCD_OFFSET 0x1000 > > +/* > + * Maximum channel counts for individual hardware variants > + * and the maximum channel count over all supported controllers, > + * used for data structure size > + */ > +#define MPC8308_DMACHAN_MAX 16 > +#define MPC512x_DMACHAN_MAX 64 > +#define MPC_DMA_CHANNELS 64 > + > /* Arbitration mode of group and channel */ > #define MPC_DMA_DMACR_EDCG (1 << 31) > #define MPC_DMA_DMACR_ERGA (1 << 3) > @@ -708,10 +716,10 @@ static int mpc_dma_probe(struct platform_device *op) > > dma = &mdma->dma; > dma->dev = dev; > - if (!mdma->is_mpc8308) > - dma->chancnt = MPC_DMA_CHANNELS; > + if (mdma->is_mpc8308) > + dma->chancnt = MPC8308_DMACHAN_MAX; > else > - dma->chancnt = 16; /* MPC8308 DMA has only 16 channels */ > + dma->chancnt = MPC512x_DMACHAN_MAX; > dma->device_alloc_chan_resources = mpc_dma_alloc_chan_resources; > dma->device_free_chan_resources = mpc_dma_free_chan_resources; > dma->device_issue_pending = mpc_dma_issue_pending; > @@ -745,7 +753,19 @@ static int mpc_dma_probe(struct platform_device *op) > * - Round-robin group arbitration, > * - Round-robin channel arbitration. > */ > - if (!mdma->is_mpc8308) { > + if (mdma->is_mpc8308) { > + /* MPC8308 has 16 channels and lacks some registers */ > + out_be32(&mdma->regs->dmacr, MPC_DMA_DMACR_ERCA); > + > + /* enable snooping */ > + out_be32(&mdma->regs->dmagpor, MPC_DMA_DMAGPOR_SNOOP_ENABLE); > + /* Disable error interrupts */ > + out_be32(&mdma->regs->dmaeeil, 0); > + > + /* Clear interrupts status */ > + out_be32(&mdma->regs->dmaintl, 0xFFFF); > + out_be32(&mdma->regs->dmaerrl, 0xFFFF); > + } else { > out_be32(&mdma->regs->dmacr, MPC_DMA_DMACR_EDCG | > MPC_DMA_DMACR_ERGA | > MPC_DMA_DMACR_ERCA); > > @@ -766,18 +786,6 @@ static int mpc_dma_probe(struct platform_device *op) > /* Route interrupts to IPIC */ > out_be32(&mdma->regs->dmaihsa, 0); > out_be32(&mdma->regs->dmailsa, 0); > - } else { > - /* MPC8308 has 16 channels and lacks some registers */ > - out_be32(&mdma->regs->dmacr, MPC_DMA_DMACR_ERCA); > - > - /* enable snooping */ > - out_be32(&mdma->regs->dmagpor, MPC_DMA_DMAGPOR_SNOOP_ENABLE); > - /* Disable error interrupts */ > - out_be32(&mdma->regs->dmaeeil, 0); > - > - /* Clear interrupts status */ > - out_be32(&mdma->regs->dmaintl, 0xFFFF); > - out_be32(&mdma->regs->dmaerrl, 0xFFFF); > } > > /* Register DMA engine */ _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev