Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

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