3 * (C) COPYRIGHT 2011-2015 ARM Limited. All rights reserved.
5 * This program is free software and is provided to you under the terms of the
6 * GNU General Public License version 2 as published by the Free Software
7 * Foundation, and any use by you of this program is subject to the terms
10 * A copy of the licence is included with the program, and can also be obtained
11 * from Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
12 * Boston, MA 02110-1301, USA.
21 * @file mali_kbase_js_affinity.h
22 * Affinity Manager internal APIs.
25 #ifndef _KBASE_JS_AFFINITY_H_
26 #define _KBASE_JS_AFFINITY_H_
28 #ifdef CONFIG_MALI_DEBUG_SHADER_SPLIT_FS
29 /* Import the external affinity mask variables */
30 extern u64 mali_js0_affinity_mask;
31 extern u64 mali_js1_affinity_mask;
32 extern u64 mali_js2_affinity_mask;
33 #endif /* CONFIG_MALI_DEBUG_SHADER_SPLIT_FS */
37 * @addtogroup base_api
42 * @addtogroup base_kbase_api
47 * @addtogroup kbase_js_affinity Affinity Manager internal APIs.
53 * @brief Decide whether it is possible to submit a job to a particular job slot
54 * in the current status
56 * Will check if submitting to the given job slot is allowed in the current
57 * status. For example using job slot 2 while in soft-stoppable state and only
58 * having 1 coregroup is not allowed by the policy. This function should be
59 * called prior to submitting a job to a slot to make sure policy rules are not
62 * The following locking conditions are made on the caller:
63 * - it must hold kbasep_js_device_data::runpool_irq::lock
65 * @param kbdev The kbase device structure of the device
66 * @param js Job slot number to check for allowance
68 bool kbase_js_can_run_job_on_slot_no_lock(struct kbase_device *kbdev,
72 * @brief Compute affinity for a given job.
74 * Currently assumes an all-on/all-off power management policy.
75 * Also assumes there is at least one core with tiler available.
77 * Returns true if a valid affinity was chosen, false if
78 * no cores were available.
80 * @param[out] affinity Affinity bitmap computed
81 * @param kbdev The kbase device structure of the device
82 * @param katom Job chain of which affinity is going to be found
83 * @param js Slot the job chain is being submitted
85 bool kbase_js_choose_affinity(u64 * const affinity,
86 struct kbase_device *kbdev,
87 struct kbase_jd_atom *katom,
91 * @brief Determine whether a proposed \a affinity on job slot \a js would
92 * cause a violation of affinity restrictions.
94 * The following locks must be held by the caller:
95 * - kbasep_js_device_data::runpool_irq::lock
97 bool kbase_js_affinity_would_violate(struct kbase_device *kbdev, int js,
101 * @brief Affinity tracking: retain cores used by a slot
103 * The following locks must be held by the caller:
104 * - kbasep_js_device_data::runpool_irq::lock
106 void kbase_js_affinity_retain_slot_cores(struct kbase_device *kbdev, int js,
110 * @brief Affinity tracking: release cores used by a slot
112 * Cores \b must be released as soon as a job is dequeued from a slot's 'submit
113 * slots', and before another job is submitted to those slots. Otherwise, the
114 * refcount could exceed the maximum number submittable to a slot,
115 * BASE_JM_SUBMIT_SLOTS.
117 * The following locks must be held by the caller:
118 * - kbasep_js_device_data::runpool_irq::lock
120 void kbase_js_affinity_release_slot_cores(struct kbase_device *kbdev, int js,
124 * @brief Output to the Trace log the current tracked affinities on all slots
126 #if KBASE_TRACE_ENABLE
127 void kbase_js_debug_log_current_affinities(struct kbase_device *kbdev);
128 #else /* KBASE_TRACE_ENABLE */
130 kbase_js_debug_log_current_affinities(struct kbase_device *kbdev)
133 #endif /* KBASE_TRACE_ENABLE */
135 /** @} *//* end group kbase_js_affinity */
136 /** @} *//* end group base_kbase_api */
137 /** @} *//* end group base_api */
140 #endif /* _KBASE_JS_AFFINITY_H_ */