aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/vithar/kbase/src/common/mali_kbase_js_affinity.h
blob: 99164fb052332972fa9523d8cae93a23630f269f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/*
 *
 * (C) COPYRIGHT 2011 ARM Limited. All rights reserved.
 *
 * This program is free software and is provided to you under the terms of the GNU General Public License version 2
 * as published by the Free Software Foundation, and any use by you of this program is subject to the terms of such GNU licence.
 * 
 * A copy of the licence is included with the program, and can also be obtained from Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 * 
 */



/**
 * @file mali_kbase_js_affinity.h
 * Affinity Manager internal APIs.
 */

#ifndef _KBASE_JS_AFFINITY_H_
#define _KBASE_JS_AFFINITY_H_



/**
 * @addtogroup base_api
 * @{
 */

/**
 * @addtogroup base_kbase_api
 * @{
 */


/**
 * @addtogroup kbase_js_affinity Affinity Manager internal APIs.
 * @{
 *
 */


/**
 * @brief Compute affinity for a given job.
 *
 * Currently assumes an all-on/all-off power management policy.
 * Also assumes there is at least one core with tiler available.
 * Will try to produce an even distribution of cores for SS and
 * NSS jobs. SS jobs will be given cores starting from core-group
 * 0 forward to n. NSS jobs will be given cores from core-group n
 * backwards to 0. This way for example in a T658 SS jobs will
 * tend to run on cores from core-group 0 and NSS jobs will tend
 * to run on cores from core-group 1.
 * An assertion will be raised if computed affinity is 0
 *
 * @param[out] affinity Affinity bitmap computed
 * @param kbdev The kbase device structure of the device
 * @param katom Job chain of which affinity is going to be found
 * @param js    Slot the job chain is being submitted

 */
void kbase_js_choose_affinity( u64 *affinity, kbase_device *kbdev, kbase_jd_atom *katom, int js );


/**
 * @brief Decide whether it is possible to submit a job to a particular job slot in the current status
 *
 * Will check if submitting to the given job slot is allowed in the current status.
 * For example using job slot 2 while in soft-stoppable state is not allowed by the
 * policy. This function should be called prior to submitting a job to a slot to
 * make sure policy rules are not violated.
 * 
 * The following locking conditions are made on the caller:
 * - it must hold kbasep_js_device_data::runpool_irq::lock
 *
 * @param js_devdata Device info, will be read to obtain current state
 * @param js         Job slot number to check for allowance
 */
static INLINE mali_bool kbase_js_can_run_job_on_slot_no_lock( kbasep_js_device_data *js_devdata, int js )
{
#if BASE_HW_ISSUE_7347
	kbase_device *kbdev = CONTAINER_OF(js_devdata, kbase_device, js_data);

	if (js == 0)
	{
		/* Check there are no jobs running on job slots 1 or 2 */
		if (kbdev->jm_slots[1].submitted_nr > 0 || kbdev->jm_slots[2].submitted_nr > 0)
		{
			return MALI_FALSE;
		}
	}
	else
	{
		/* Check there are no jobs running on job slot 0 */
		if (kbdev->jm_slots[0].submitted_nr > 0)
		{
			return MALI_FALSE;
		}
	}
#endif

	/* Submitting to job slot 2 while in soft-stopable state is not allowed. */
	return ( !((js_devdata->runpool_irq.nr_nss_ctxs_running == 0) && (js == 2)));
}


/** @} */ /* end group kbase_js_affinity */
/** @} */ /* end group base_kbase_api */
/** @} */ /* end group base_api */





#endif /* _KBASE_JS_AFFINITY_H_ */