27 #ifndef _KBASE_DEFS_H_ 28 #define _KBASE_DEFS_H_ 31 #include <mali_base_hwconfig_features.h> 32 #include <mali_base_hwconfig_issues.h> 33 #include <mali_kbase_mem_lowlevel.h> 35 #include <mali_kbase_mmu_mode.h> 36 #include <mali_kbase_instr_defs.h> 39 #include <linux/atomic.h> 40 #include <linux/mempool.h> 41 #include <linux/slab.h> 42 #include <linux/file.h> 44 #ifdef CONFIG_MALI_FPGA_BUS_LOGGER 45 #include <linux/bus_logger.h> 50 #include <linux/kds.h> 57 #include "mali_kbase_dma_fence.h" 59 #ifdef CONFIG_HISI_DEBUG_FS 60 #include <linux/debugfs.h> 63 #ifdef CONFIG_PM_DEVFREQ 64 #include <linux/devfreq.h> 67 #include <linux/clk.h> 68 #include <linux/regulator/consumer.h> 70 #if defined(CONFIG_PM_RUNTIME) || \ 71 (defined(CONFIG_PM) && LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)) 72 #define KBASE_PM_RUNTIME 1 76 #ifdef CONFIG_MALI_MIDGARD_ENABLE_TRACE 77 #define KBASE_TRACE_ENABLE 1 80 #ifndef KBASE_TRACE_ENABLE 81 #ifdef CONFIG_MALI_DEBUG 82 #define KBASE_TRACE_ENABLE 1 84 #define KBASE_TRACE_ENABLE 0 89 #define KBASE_TRACE_DUMP_ON_JOB_SLOT_ERROR 1 97 #define ZAP_TIMEOUT 1000 100 #define RESET_TIMEOUT 500 113 #define KBASE_DISABLE_SCHEDULING_SOFT_STOPS 0 124 #define KBASE_DISABLE_SCHEDULING_HARD_STOPS 0 132 #define BASE_JM_MAX_NR_SLOTS 3 140 #define BASE_MAX_NR_AS 16 143 #define MIDGARD_MMU_VA_BITS 48 145 #if MIDGARD_MMU_VA_BITS > 39 146 #define MIDGARD_MMU_TOPLEVEL 0 148 #define MIDGARD_MMU_TOPLEVEL 1 151 #define MIDGARD_MMU_BOTTOMLEVEL 3 153 #define GROWABLE_FLAGS_REQUIRED (KBASE_REG_PF_GROW | KBASE_REG_GPU_WR) 156 #define KBASEP_AS_NR_INVALID (-1) 158 #define KBASE_LOCK_REGION_MAX_SIZE (63) 159 #define KBASE_LOCK_REGION_MIN_SIZE (11) 161 #define KBASE_TRACE_SIZE_LOG2 8 162 #define KBASE_TRACE_SIZE (1 << KBASE_TRACE_SIZE_LOG2) 163 #define KBASE_TRACE_MASK ((1 << KBASE_TRACE_SIZE_LOG2)-1) 165 #include "mali_kbase_js_defs.h" 166 #include "mali_kbase_hwaccess_defs.h" 168 #define KBASEP_FORCE_REPLAY_DISABLED 0 171 #define KBASEP_FORCE_REPLAY_RANDOM_LIMIT 16 174 #define KBASE_KATOM_FLAG_BEEN_SOFT_STOPPPED (1<<1) 176 #define KBASE_KATOM_FLAGS_RERUN (1<<2) 177 #define KBASE_KATOM_FLAGS_JOBCHAIN (1<<3) 179 #define KBASE_KATOM_FLAG_BEEN_HARD_STOPPED (1<<4) 181 #define KBASE_KATOM_FLAG_IN_DISJOINT (1<<5) 183 #define KBASE_KATOM_FLAG_X_DEP_BLOCKED (1<<7) 185 #define KBASE_KATOM_FLAG_FAIL_BLOCKER (1<<8) 187 #define KBASE_KATOM_FLAG_JSCTX_IN_X_DEP_LIST (1<<9) 189 #define KBASE_KATOM_FLAG_HOLDING_CTX_REF (1<<10) 191 #define KBASE_KATOM_FLAG_PROTECTED (1<<11) 193 #define KBASE_KATOM_FLAG_JSCTX_IN_TREE (1<<12) 199 #define JS_COMMAND_SW_CAUSES_DISJOINT 0x100 202 #define JS_COMMAND_SW_BITS (JS_COMMAND_SW_CAUSES_DISJOINT) 204 #if (JS_COMMAND_SW_BITS & JS_COMMAND_MASK) 205 #error JS_COMMAND_SW_BITS not masked off by JS_COMMAND_MASK. Must update JS_COMMAND_SW_<..> bitmasks 210 #define JS_COMMAND_SOFT_STOP_WITH_SW_DISJOINT \ 211 (JS_COMMAND_SW_CAUSES_DISJOINT | JS_COMMAND_SOFT_STOP) 213 #define KBASEP_ATOM_ID_INVALID BASE_JD_ATOM_COUNT 216 #define KBASE_SERIALIZE_INTRA_SLOT (1 << 0) 218 #define KBASE_SERIALIZE_INTER_SLOT (1 << 1) 220 #define KBASE_SERIALIZE_RESET (1 << 2) 222 #ifdef CONFIG_HISI_DEBUG_FS 223 struct base_job_fault_event {
227 struct work_struct job_fault_work;
228 struct list_head head;
260 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 0)) 282 LOCAL_ASSERT(dep != NULL);
297 LOCAL_ASSERT(dep != NULL);
299 return dep->dep_type;
315 LOCAL_ASSERT(const_dep != NULL);
320 dep->dep_type = type;
333 LOCAL_ASSERT(const_dep != NULL);
341 enum kbase_atom_gpu_rb_state {
343 KBASE_ATOM_GPU_RB_NOT_IN_SLOT_RB,
345 KBASE_ATOM_GPU_RB_WAITING_BLOCKED,
348 KBASE_ATOM_GPU_RB_WAITING_PROTECTED_MODE_PREV,
351 KBASE_ATOM_GPU_RB_WAITING_PROTECTED_MODE_TRANSITION,
354 KBASE_ATOM_GPU_RB_WAITING_FOR_CORE_AVAILABLE,
356 KBASE_ATOM_GPU_RB_WAITING_AFFINITY,
358 KBASE_ATOM_GPU_RB_READY,
360 KBASE_ATOM_GPU_RB_SUBMITTED,
363 KBASE_ATOM_GPU_RB_RETURN_TO_JS = -1
366 enum kbase_atom_enter_protected_state {
374 KBASE_ATOM_ENTER_PROTECTED_CHECK = 0,
376 KBASE_ATOM_ENTER_PROTECTED_VINSTR,
379 KBASE_ATOM_ENTER_PROTECTED_IDLE_L2,
382 KBASE_ATOM_ENTER_PROTECTED_FINISHED,
385 enum kbase_atom_exit_protected_state {
393 KBASE_ATOM_EXIT_PROTECTED_CHECK = 0,
396 KBASE_ATOM_EXIT_PROTECTED_IDLE_L2,
398 KBASE_ATOM_EXIT_PROTECTED_RESET,
401 KBASE_ATOM_EXIT_PROTECTED_RESET_WAIT,
410 struct work_struct work;
411 ktime_t start_timestamp;
416 struct list_head dep_head[2];
417 struct list_head dep_item[2];
422 struct list_head jd_item;
435 struct list_head node;
436 struct kds_resource_set *kds_rset;
437 bool kds_dep_satisfied;
440 struct sync_fence *fence;
441 struct sync_fence_waiter sync_waiter;
443 #ifdef CONFIG_MALI_DMA_FENCE 461 unsigned int context;
478 struct list_head callbacks;
511 wait_queue_head_t completed;
513 #ifdef CONFIG_GPU_TRACEPOINTS 525 enum kbase_atom_gpu_rb_state gpu_rb_state;
527 u64 need_cache_flush_cores_retained;
545 struct kbase_jd_atom_backend backend;
546 #ifdef CONFIG_HISI_DEBUG_FS 547 struct base_job_fault_event fault_event;
556 struct list_head queue;
560 struct list_head jit_node;
571 enum kbase_atom_enter_protected_state enter;
572 enum kbase_atom_exit_protected_state exit;
575 struct rb_node runnable_tree_node;
581 static inline bool kbase_jd_katom_is_protected(
const struct kbase_jd_atom *katom)
583 return (
bool)(katom->atom_flags & KBASE_KATOM_FLAG_PROTECTED);
594 #define KBASE_JD_DEP_QUEUE_SIZE 256 632 size_t tb_wrap_offset;
635 struct kds_callback kds_cb;
637 #ifdef CONFIG_GPU_TRACEPOINTS 648 KBASE_AS_POKE_STATE_IN_FLIGHT = 1<<0,
649 KBASE_AS_POKE_STATE_KILLING_POKE = 1<<1
671 struct workqueue_struct *pf_wq;
672 struct work_struct work_pagefault;
673 struct work_struct work_busfault;
678 u64 fault_extra_addr;
683 struct workqueue_struct *poke_wq;
684 struct work_struct poke_work;
689 struct hrtimer poke_timer;
692 static inline int kbase_as_has_bus_fault(
struct kbase_as *as)
694 return as->fault_type == KBASE_MMU_FAULT_TYPE_BUS;
697 static inline int kbase_as_has_page_fault(
struct kbase_as *as)
699 return as->fault_type == KBASE_MMU_FAULT_TYPE_PAGE;
708 #define KBASE_TRACE_CODE(X) KBASE_TRACE_CODE_ ## X 710 enum kbase_trace_code {
713 #define KBASE_TRACE_CODE_MAKE_CODE(X) KBASE_TRACE_CODE(X) 714 #include "mali_kbase_trace_defs.h" 715 #undef KBASE_TRACE_CODE_MAKE_CODE 719 KBASE_TRACE_CODE_COUNT
722 #define KBASE_TRACE_FLAG_REFCOUNT (((u8)1) << 0) 723 #define KBASE_TRACE_FLAG_JOBSLOT (((u8)1) << 1) 726 struct timespec timestamp;
734 unsigned long info_val;
749 KBASEP_TIMELINE_PM_EVENT_FIRST,
795 #ifdef CONFIG_MALI_TRACE_TIMELINE 796 struct kbase_trace_kctx_timeline {
797 atomic_t jd_atoms_in_flight;
801 struct kbase_trace_kbdev_timeline {
812 atomic_t pm_event_uid[KBASEP_TIMELINE_PM_EVENT_LAST+1];
814 atomic_t pm_event_uid_counter;
818 bool l2_transitioning;
824 struct list_head link;
849 wait_queue_head_t zero_active_count_wait;
856 u64 debug_core_mask_all;
878 ktime_t gpu_poweroff_time;
881 int poweroff_shader_ticks;
884 int poweroff_gpu_ticks;
886 struct kbase_pm_backend_data backend;
941 spinlock_t pool_lock;
942 struct list_head page_list;
943 struct shrinker reclaim;
949 #define DEVNAME_SIZE 16 959 struct list_head entry;
961 struct miscdevice mdev;
966 void __iomem *crgreg;
967 void __iomem *pmctrlreg;
968 void __iomem *pctrlreg;
976 #ifdef CONFIG_REGULATOR 977 struct regulator *regulator;
979 char devname[DEVNAME_SIZE];
981 #ifdef CONFIG_MALI_NO_MALI 983 struct kmem_cache *irq_slab;
984 struct workqueue_struct *irq_workq;
985 atomic_t serving_job_irq;
986 atomic_t serving_gpu_irq;
987 atomic_t serving_mmu_irq;
988 spinlock_t reg_op_lock;
999 spinlock_t mmu_mask_change;
1004 unsigned long hw_issues_mask[(BASE_HW_ISSUE_END + BITS_PER_LONG - 1) / BITS_PER_LONG];
1006 unsigned long hw_features_mask[(BASE_HW_FEATURE_END + BITS_PER_LONG - 1) / BITS_PER_LONG];
1009 unsigned long hi_features_mask[2];
1019 u64 shader_inuse_bitmap;
1022 u32 shader_inuse_cnt[64];
1025 u64 shader_needed_bitmap;
1028 u32 shader_needed_cnt[64];
1030 u32 tiler_inuse_cnt;
1032 u32 tiler_needed_cnt;
1053 u64 shader_available_bitmap;
1054 u64 tiler_available_bitmap;
1055 u64 l2_available_bitmap;
1056 u64 stack_available_bitmap;
1058 u64 shader_ready_bitmap;
1059 u64 shader_transitioning_bitmap;
1072 struct kbase_instr_backend backend;
1078 atomic_t irq_throttle_cycles;
1080 #if KBASE_TRACE_ENABLE 1081 spinlock_t trace_lock;
1082 u16 trace_first_out;
1087 u32 reset_timeout_ms;
1089 struct mutex cacheclean_lock;
1092 void *platform_context;
1095 struct list_head kctx_list;
1096 struct mutex kctx_list_lock;
1098 #ifdef CONFIG_PM_DEVFREQ 1099 struct devfreq_dev_profile devfreq_profile;
1100 struct devfreq *devfreq;
1101 unsigned long current_freq;
1102 unsigned long current_voltage;
1103 #ifdef CONFIG_DEVFREQ_THERMAL 1104 #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 4, 0) 1105 struct devfreq_cooling_device *devfreq_cooling;
1107 struct thermal_cooling_device *devfreq_cooling;
1109 struct list_head ipa_power_models;
1110 struct kbase_ipa_model *ipa_current_model;
1111 struct kbase_ipa_model *ipa_configured_model;
1112 struct kbase_ipa_model *ipa_fallback_model;
1117 #ifdef CONFIG_MALI_TRACE_TIMELINE 1118 struct kbase_trace_kbdev_timeline timeline;
1125 bool job_fault_debug;
1128 struct proc_dir_entry *proc_gpu_memory_dentry;
1130 #ifdef CONFIG_HISI_DEBUG_FS 1132 struct dentry *mali_debugfs_directory;
1134 struct dentry *debugfs_ctx_directory;
1136 #ifdef CONFIG_MALI_DEBUG 1138 u64 debugfs_as_read_bitmap;
1142 wait_queue_head_t job_fault_wq;
1143 wait_queue_head_t job_fault_resume_wq;
1144 struct workqueue_struct *job_fault_resume_workq;
1145 struct list_head job_fault_event_list;
1146 spinlock_t job_fault_event_lock;
1149 #if !MALI_CUSTOMER_RELEASE 1154 } regs_dump_debugfs_data;
1159 u32 kbase_profiling_controls[FBDUMP_CONTROL_MAX];
1163 #if MALI_CUSTOMER_RELEASE == 0 1167 int force_replay_limit;
1171 int force_replay_count;
1177 bool force_replay_random;
1183 #ifdef CONFIG_HISI_DEBUG_FS 1189 u32 gpu_outstanding;
1194 atomic_t faults_pending;
1197 bool poweroff_pending;
1201 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 0)) 1202 bool infinite_cache_active_default;
1204 u32 infinite_cache_active_default;
1206 size_t mem_pool_max_size_default;
1209 u32 current_gpu_coherency_mode;
1211 u32 system_coherency;
1213 bool cci_snoop_enabled;
1218 u32 snoop_enable_smc;
1219 u32 snoop_disable_smc;
1227 bool protected_mode;
1232 bool protected_mode_transition;
1237 bool protected_mode_support;
1240 #ifdef CONFIG_MALI_DEBUG 1241 wait_queue_head_t driver_inactive_wait;
1242 bool driver_inactive;
1245 #ifdef CONFIG_MALI_FPGA_BUS_LOGGER 1249 struct bus_logger_client *buslogger;
1252 bool irq_reset_flush;
1257 spinlock_t hwaccess_lock;
1260 struct mutex mmu_hw_mutex;
1280 struct rb_root runnable_tree;
1281 struct list_head x_dep_head;
1285 #define KBASE_API_VERSION(major, minor) ((((major) & 0xFFF) << 20) | \ 1286 (((minor) & 0xFFF) << 8) | \ 1327 KCTX_COMPAT = 1U << 0,
1328 KCTX_RUNNABLE_REF = 1U << 1,
1329 KCTX_ACTIVE = 1U << 2,
1330 KCTX_PULLED = 1U << 3,
1331 KCTX_MEM_PROFILE_INITIALIZED = 1U << 4,
1332 KCTX_INFINITE_CACHE = 1U << 5,
1333 KCTX_SUBMIT_DISABLED = 1U << 6,
1334 KCTX_PRIVILEGED = 1U << 7,
1335 KCTX_SCHEDULED = 1U << 8,
1336 KCTX_DYING = 1U << 9,
1337 KCTX_NO_IMPLICIT_SYNC = 1U << 10,
1344 unsigned long api_version;
1346 struct list_head event_list;
1347 struct list_head event_coalesce_list;
1348 struct mutex event_mutex;
1349 atomic_t event_closed;
1350 struct workqueue_struct *event_workq;
1351 atomic_t event_count;
1352 int event_coalesce_count;
1356 atomic_t setup_complete;
1357 atomic_t setup_in_progress;
1359 u64 *mmu_teardown_pages;
1361 struct page *aliasing_sink_page;
1363 struct mutex mmu_lock;
1364 struct mutex reg_lock;
1365 struct rb_root reg_rbtree_same;
1367 struct rb_root reg_rbtree_exec;
1369 struct rb_root reg_rbtree_custom;
1372 unsigned long cookies;
1375 wait_queue_head_t event_queue;
1380 atomic_t used_pages;
1381 atomic_t nonmapped_pages;
1385 struct shrinker reclaim;
1386 struct list_head evict_list;
1388 struct list_head waiting_soft_jobs;
1389 spinlock_t waiting_soft_jobs_lock;
1391 struct list_head waiting_kds_resource;
1393 #ifdef CONFIG_MALI_DMA_FENCE 1395 struct list_head waiting_resource;
1396 struct workqueue_struct *wq;
1417 spinlock_t mm_update_lock;
1418 struct mm_struct *process_mm;
1422 #ifdef CONFIG_MALI_TRACE_TIMELINE 1423 struct kbase_trace_kctx_timeline timeline;
1425 #ifdef CONFIG_HISI_DEBUG_FS 1427 char *mem_profile_data;
1429 size_t mem_profile_size;
1431 struct mutex mem_profile_lock;
1433 struct dentry *kctx_dentry;
1436 unsigned int *reg_dump;
1437 atomic_t job_fault_count;
1441 struct list_head job_fault_resume_event_list;
1449 atomic_t atoms_pulled;
1455 KBASE_JS_ATOM_SCHED_PRIO_COUNT];
1465 struct kbase_context_backend backend;
1468 struct work_struct work;
1472 struct mutex vinstr_cli_lock;
1475 struct list_head completed_jobs;
1477 atomic_t work_count;
1480 struct timer_list soft_job_timeout;
1484 struct list_head jit_active_head;
1485 struct list_head jit_pool_head;
1486 struct list_head jit_destroy_head;
1487 struct mutex jit_evict_lock;
1488 struct work_struct jit_work;
1493 struct list_head jit_atoms_head;
1497 struct list_head jit_pending_alloc;
1500 struct list_head ext_res_meta_head;
1503 atomic_t drain_pending;
1508 #if BASE_DEBUG_FENCE_TIMEOUT 1509 struct hrtimer fence_wait_timer;
1535 struct list_head ext_res_node;
1540 enum kbase_reg_access_type {
1545 enum kbase_share_attr_bits {
1547 SHARE_BOTH_BITS = (2ULL << 8),
1548 SHARE_INNER_BITS = (3ULL << 8)
1557 static inline bool kbase_device_is_cpu_coherent(
struct kbase_device *kbdev)
1559 if ((kbdev->system_coherency == COHERENCY_ACE_LITE) ||
1560 (kbdev->system_coherency == COHERENCY_ACE))
1567 #define HR_TIMER_DELAY_MSEC(x) (ns_to_ktime(((u64)(x))*1000000U)) 1568 #define HR_TIMER_DELAY_NSEC(x) (ns_to_ktime(x)) 1571 #define KBASE_CLEAN_CACHE_MAX_LOOPS 100000 1573 #define KBASE_AS_INACTIVE_MAX_LOOPS 100000 1576 #define BASEP_JD_REPLAY_LIMIT 15 1581 u32 exception_status;
1582 u32 first_incomplete_task;
1584 u8 job_descriptor_size : 1;
1587 u8 _reserved_01 : 1;
1589 u8 _reserved_02 : 1;
1590 u8 _reserved_03 : 1;
1592 u8 _reserved_04 : 1;
1593 u8 _reserved_05 : 1;
1595 u16 job_dependency_index_1;
1596 u16 job_dependency_index_2;
Per-job data.
Definition: mali_base_kernel.h:373
int as_nr
Definition: mali_kbase_defs.h:1409
Definition: mali_kbase_defs.h:782
KBase Context Job Scheduling information structure.
Definition: mali_kbase_js_defs.h:321
int retry_submit_on_slot
Definition: mali_kbase_defs.h:503
Definition: mali_kbase_defs.h:409
Definition: mali_kbase_vinstr.c:102
#define BASE_JD_DEP_TYPE_INVALID
Definition: mali_base_kernel.h:438
s8 nr_hw_address_spaces
Definition: mali_kbase_defs.h:1061
Definition: mali_kbase_vinstr.c:152
Definition: mali_kbase_defs.h:234
Definition: mali_kbase_defs.h:655
Definition: mali_kbase_mmu_mode.h:31
kbase_mmu_fault_type
MMU fault type descriptor.
Definition: mali_kbase_mmu_hw.h:53
struct workqueue_struct * job_done_wq
Definition: mali_kbase_defs.h:628
Definition: mali_kbase_defs.h:1340
Definition: mali_kbase_defs.h:790
kbase_context_flags
Definition: mali_kbase_defs.h:1326
Definition: mali_kbase_defs.h:596
int active_count
Definition: mali_kbase_defs.h:845
Definition: mali_kbase_defs.h:725
Definition: mali_kbase_defs.h:702
base_jd_event_code
Job chain event codes.
Definition: mali_base_kernel.h:1057
wait_queue_head_t zero_jobs_wait
Definition: mali_kbase_defs.h:625
int poke_refcount
Definition: mali_kbase_defs.h:686
Definition: mali_kbase_defs.h:758
u32 base_jd_core_req
Job chain hardware requirements.
Definition: mali_base_kernel.h:452
Definition: mali_kbase_defs.h:834
Definition: mali_kbase_hwaccess_defs.h:30
Definition: mali_kbase_defs.h:937
Definition: mali_kbase_defs.h:668
Definition: mali_kbase_defs.h:823
Definition: mali_kbase_mem.h:108
kbase_as_poke_state poke_state
Definition: mali_kbase_defs.h:688
kbase_jd_atom_state
Definition: mali_base_kernel.h:800
Definition: mali_kbase_defs.h:951
kbase_timeline_pm_event
Definition: mali_kbase_defs.h:747
Definition: mali_kbase_gpuprops_types.h:73
Definition: mali_kbase_defs.h:774
base_jd_core_req core_req
Definition: mali_kbase_defs.h:499
Definition: mali_kbase_defs.h:752
s8 nr_user_address_spaces
Definition: mali_kbase_defs.h:1062
bool suspending
Definition: mali_kbase_defs.h:847
Definition: mali_kbase_defs.h:770
Definition: mali_kbase_defs.h:259
Definition: mali_kbase_defs.h:1065
u32 kbase_as_poke_state
Definition: mali_kbase_defs.h:653
#define BASE_JM_MAX_NR_SLOTS
Definition: mali_kbase_defs.h:132
kbase_atom_coreref_state
States to model state machine processed by kbasep_js_job_check_ref_cores(), which handles retaining c...
Definition: mali_base_kernel.h:745
Definition: mali_kbase_defs.h:896
Definition: mali_kbase_defs.h:1279
Definition: mali_kbase_defs.h:778
Definition: mali_kbase_mem.h:206
u32 job_nr
Definition: mali_kbase_defs.h:603
Definition: mali_kbase_defs.h:764
Definition: mali_kbase_defs.h:245
Definition: mali_kbase_defs.h:642
KBase Device Data Job Scheduler sub-structure.
Definition: mali_kbase_js_defs.h:188
Definition: mali_kbase_defs.h:404