On Fri, Feb 26, 2016 at 07:33:54PM +0530, Kedareswara rao Appana wrote:

>  static void xilinx_vdma_halt(struct xilinx_vdma_chan *chan)
>  {
> -     int loop = XILINX_VDMA_LOOP_COUNT;
> +     int err = 0;
> +     u32 val;
>  
>       vdma_ctrl_clr(chan, XILINX_VDMA_REG_DMACR, XILINX_VDMA_DMACR_RUNSTOP);
>  
>       /* Wait for the hardware to halt */
> -     do {
> -             if (vdma_ctrl_read(chan, XILINX_VDMA_REG_DMASR) &
> -                 XILINX_VDMA_DMASR_HALTED)
> -                     break;
> -     } while (loop--);
> +     err = xilinx_vdma_poll_timeout(chan, XILINX_VDMA_REG_DMASR, val,
> +                                   (val & XILINX_VDMA_DMASR_HALTED), 0,
> +                                   XILINX_VDMA_LOOP_COUNT);
>  
> -     if (!loop) {
> +     if (err) {
>               dev_err(chan->dev, "Cannot stop channel %p: %x\n",
>                       chan, vdma_ctrl_read(chan, XILINX_VDMA_REG_DMASR));
>               chan->err = true;
> @@ -576,18 +579,17 @@ static void xilinx_vdma_halt(struct xilinx_vdma_chan 
> *chan)
>   */
>  static void xilinx_vdma_start(struct xilinx_vdma_chan *chan)
>  {
> -     int loop = XILINX_VDMA_LOOP_COUNT;
> +     int err = 0;

why is this initialization required here and other places?

> +     u32 val;
>  
>       vdma_ctrl_set(chan, XILINX_VDMA_REG_DMACR, XILINX_VDMA_DMACR_RUNSTOP);
>  
>       /* Wait for the hardware to start */
> -     do {
> -             if (!(vdma_ctrl_read(chan, XILINX_VDMA_REG_DMASR) &
> -                   XILINX_VDMA_DMASR_HALTED))
> -                     break;
> -     } while (loop--);
> +     err = xilinx_vdma_poll_timeout(chan, XILINX_VDMA_REG_DMASR, val,
> +                                   !(val & XILINX_VDMA_DMASR_HALTED), 0,
> +                                   XILINX_VDMA_LOOP_COUNT);
>  
> -     if (!loop) {
> +     if (err) {
>               dev_err(chan->dev, "Cannot start channel %p: %x\n",
>                       chan, vdma_ctrl_read(chan, XILINX_VDMA_REG_DMASR));
>  
> @@ -754,21 +756,17 @@ static void xilinx_vdma_complete_descriptor(struct 
> xilinx_vdma_chan *chan)
>   */
>  static int xilinx_vdma_reset(struct xilinx_vdma_chan *chan)
>  {
> -     int loop = XILINX_VDMA_LOOP_COUNT;
> +     int err = 0;
>       u32 tmp;
>  
>       vdma_ctrl_set(chan, XILINX_VDMA_REG_DMACR, XILINX_VDMA_DMACR_RESET);
>  
> -     tmp = vdma_ctrl_read(chan, XILINX_VDMA_REG_DMACR) &
> -             XILINX_VDMA_DMACR_RESET;
> -
>       /* Wait for the hardware to finish reset */
> -     do {
> -             tmp = vdma_ctrl_read(chan, XILINX_VDMA_REG_DMACR) &
> -                     XILINX_VDMA_DMACR_RESET;
> -     } while (loop-- && tmp);
> +     err = xilinx_vdma_poll_timeout(chan, XILINX_VDMA_REG_DMACR, tmp,
> +                                   !(tmp & XILINX_VDMA_DMACR_RESET), 0,
> +                                   XILINX_VDMA_LOOP_COUNT);
>  
> -     if (!loop) {
> +     if (err) {



-- 
~Vinod

Reply via email to