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

Reply via email to