root/drivers/gpu/drm/gma500/blitter.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. gma_blt_wait_idle

   1 // SPDX-License-Identifier: GPL-2.0-only
   2 /*
   3  * Copyright (c) 2014, Patrik Jakobsson
   4  * All Rights Reserved.
   5  *
   6  * Authors: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
   7  */
   8 
   9 #include "psb_drv.h"
  10 
  11 #include "blitter.h"
  12 #include "psb_reg.h"
  13 
  14 /* Wait for the blitter to be completely idle */
  15 int gma_blt_wait_idle(struct drm_psb_private *dev_priv)
  16 {
  17         unsigned long stop = jiffies + HZ;
  18         int busy = 1;
  19 
  20         /* NOP for Cedarview */
  21         if (IS_CDV(dev_priv->dev))
  22                 return 0;
  23 
  24         /* First do a quick check */
  25         if ((PSB_RSGX32(PSB_CR_2D_SOCIF) == _PSB_C2_SOCIF_EMPTY) &&
  26             ((PSB_RSGX32(PSB_CR_2D_BLIT_STATUS) & _PSB_C2B_STATUS_BUSY) == 0))
  27                 return 0;
  28 
  29         do {
  30                 busy = (PSB_RSGX32(PSB_CR_2D_SOCIF) != _PSB_C2_SOCIF_EMPTY);
  31         } while (busy && !time_after_eq(jiffies, stop));
  32 
  33         if (busy)
  34                 return -EBUSY;
  35 
  36         do {
  37                 busy = ((PSB_RSGX32(PSB_CR_2D_BLIT_STATUS) &
  38                         _PSB_C2B_STATUS_BUSY) != 0);
  39         } while (busy && !time_after_eq(jiffies, stop));
  40 
  41         /* If still busy, we probably have a hang */
  42         return (busy) ? -EBUSY : 0;
  43 }

/* [<][>][^][v][top][bottom][index][help] */