|
My Project
|
#include <mali_kbase_config.h>#include <mali_base_hwconfig_features.h>#include <mali_base_hwconfig_issues.h>#include <mali_kbase_mem_lowlevel.h>#include <mali_kbase_mmu_hw.h>#include <mali_kbase_mmu_mode.h>#include <mali_kbase_instr_defs.h>#include <mali_kbase_pm.h>#include <linux/atomic.h>#include <linux/mempool.h>#include <linux/slab.h>#include <linux/file.h>#include "mali_kbase_dma_fence.h"#include <linux/debugfs.h>#include <linux/clk.h>#include <linux/regulator/consumer.h>#include "mali_kbase_js_defs.h"#include "mali_kbase_hwaccess_defs.h"#include "mali_kbase_trace_defs.h"Go to the source code of this file.
Classes | |
| struct | kbase_jd_atom_dependency |
| struct | kbase_io_access |
| struct | kbase_io_history |
| struct | kbase_ext_res |
| struct | kbase_jd_atom |
| struct | kbase_jd_context |
| struct | kbase_device_info |
| struct | kbase_mmu_setup |
| struct | kbase_as |
| struct | kbasep_mem_device |
| struct | kbase_trace |
| struct | kbasep_kctx_list_element |
| struct | kbase_pm_device_data |
| struct | kbase_protected_ops |
| struct | kbase_mem_pool |
| struct | kbase_device |
| struct | kbase_device::kbase_hwcnt |
| struct | jsctx_queue |
| struct | kbase_context |
| struct | kbase_ctx_ext_res_meta |
| struct | job_descriptor_header |
Macros | |
| #define | KBASE_TRACE_ENABLE 0 |
| #define | KBASE_TRACE_DUMP_ON_JOB_SLOT_ERROR 1 |
| #define | ZAP_TIMEOUT 1000 |
| #define | RESET_TIMEOUT 500 |
| #define | KBASE_DISABLE_SCHEDULING_SOFT_STOPS 0 |
| #define | KBASE_DISABLE_SCHEDULING_HARD_STOPS 0 |
| #define | BASE_JM_MAX_NR_SLOTS 3 |
| #define | BASE_MAX_NR_AS 16 |
| #define | MIDGARD_MMU_VA_BITS 48 |
| #define | MIDGARD_MMU_TOPLEVEL 0 |
| #define | MIDGARD_MMU_BOTTOMLEVEL 3 |
| #define | GROWABLE_FLAGS_REQUIRED (KBASE_REG_PF_GROW | KBASE_REG_GPU_WR) |
| #define | KBASEP_AS_NR_INVALID (-1) |
| #define | KBASE_LOCK_REGION_MAX_SIZE (63) |
| #define | KBASE_LOCK_REGION_MIN_SIZE (11) |
| #define | KBASE_TRACE_SIZE_LOG2 8 /* 256 entries */ |
| #define | KBASE_TRACE_SIZE (1 << KBASE_TRACE_SIZE_LOG2) |
| #define | KBASE_TRACE_MASK ((1 << KBASE_TRACE_SIZE_LOG2)-1) |
| #define | KBASEP_FORCE_REPLAY_DISABLED 0 |
| #define | KBASEP_FORCE_REPLAY_RANDOM_LIMIT 16 |
| #define | KBASE_KATOM_FLAG_BEEN_SOFT_STOPPPED (1<<1) |
| #define | KBASE_KATOM_FLAGS_RERUN (1<<2) |
| #define | KBASE_KATOM_FLAGS_JOBCHAIN (1<<3) |
| #define | KBASE_KATOM_FLAG_BEEN_HARD_STOPPED (1<<4) |
| #define | KBASE_KATOM_FLAG_IN_DISJOINT (1<<5) |
| #define | KBASE_KATOM_FLAG_X_DEP_BLOCKED (1<<7) |
| #define | KBASE_KATOM_FLAG_FAIL_BLOCKER (1<<8) |
| #define | KBASE_KATOM_FLAG_JSCTX_IN_X_DEP_LIST (1<<9) |
| #define | KBASE_KATOM_FLAG_HOLDING_CTX_REF (1<<10) |
| #define | KBASE_KATOM_FLAG_PROTECTED (1<<11) |
| #define | KBASE_KATOM_FLAG_JSCTX_IN_TREE (1<<12) |
| #define | JS_COMMAND_SW_CAUSES_DISJOINT 0x100 |
| #define | JS_COMMAND_SW_BITS (JS_COMMAND_SW_CAUSES_DISJOINT) |
| #define | JS_COMMAND_SOFT_STOP_WITH_SW_DISJOINT (JS_COMMAND_SW_CAUSES_DISJOINT | JS_COMMAND_SOFT_STOP) |
| #define | KBASEP_ATOM_ID_INVALID BASE_JD_ATOM_COUNT |
| #define | KBASE_SERIALIZE_INTRA_SLOT (1 << 0) |
| #define | KBASE_SERIALIZE_INTER_SLOT (1 << 1) |
| #define | KBASE_SERIALIZE_RESET (1 << 2) |
| #define | KBASE_JD_DEP_QUEUE_SIZE 256 |
| #define | KBASE_TRACE_CODE(X) KBASE_TRACE_CODE_ ## X |
| #define | KBASE_TRACE_CODE_MAKE_CODE(X) KBASE_TRACE_CODE(X) |
| #define | KBASE_TRACE_FLAG_REFCOUNT (((u8)1) << 0) |
| #define | KBASE_TRACE_FLAG_JOBSLOT (((u8)1) << 1) |
| #define | DEVNAME_SIZE 16 |
| #define | KBASE_API_VERSION(major, minor) |
| #define | HR_TIMER_DELAY_MSEC(x) (ns_to_ktime(((u64)(x))*1000000U)) |
| #define | HR_TIMER_DELAY_NSEC(x) (ns_to_ktime(x)) |
| #define | KBASE_CLEAN_CACHE_MAX_LOOPS 100000 |
| #define | KBASE_AS_INACTIVE_MAX_LOOPS 100000 |
| #define | BASEP_JD_REPLAY_LIMIT 15 |
Typedefs | |
| typedef u32 | kbase_as_poke_state |
Enumerations | |
| enum | kbase_atom_gpu_rb_state { KBASE_ATOM_GPU_RB_NOT_IN_SLOT_RB, KBASE_ATOM_GPU_RB_WAITING_BLOCKED, KBASE_ATOM_GPU_RB_WAITING_PROTECTED_MODE_PREV, KBASE_ATOM_GPU_RB_WAITING_PROTECTED_MODE_TRANSITION, KBASE_ATOM_GPU_RB_WAITING_FOR_CORE_AVAILABLE, KBASE_ATOM_GPU_RB_WAITING_AFFINITY, KBASE_ATOM_GPU_RB_READY, KBASE_ATOM_GPU_RB_SUBMITTED, KBASE_ATOM_GPU_RB_RETURN_TO_JS = -1 } |
| enum | kbase_atom_enter_protected_state { KBASE_ATOM_ENTER_PROTECTED_CHECK = 0, KBASE_ATOM_ENTER_PROTECTED_VINSTR, KBASE_ATOM_ENTER_PROTECTED_IDLE_L2, KBASE_ATOM_ENTER_PROTECTED_FINISHED } |
| enum | kbase_atom_exit_protected_state { KBASE_ATOM_EXIT_PROTECTED_CHECK = 0, KBASE_ATOM_EXIT_PROTECTED_IDLE_L2, KBASE_ATOM_EXIT_PROTECTED_RESET, KBASE_ATOM_EXIT_PROTECTED_RESET_WAIT } |
| enum | { KBASE_AS_POKE_STATE_IN_FLIGHT = 1<<0, KBASE_AS_POKE_STATE_KILLING_POKE = 1<<1 } |
| enum | kbase_trace_code { KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_MAKE_CODE =(CORE_CTX_DESTROY), KBASE_TRACE_CODE_COUNT } |
| enum | kbase_timeline_pm_event { KBASEP_TIMELINE_PM_EVENT_FIRST, KBASE_TIMELINE_PM_EVENT_RESERVED_0 = KBASEP_TIMELINE_PM_EVENT_FIRST, KBASE_TIMELINE_PM_EVENT_GPU_STATE_CHANGED, KBASE_TIMELINE_PM_EVENT_GPU_ACTIVE, KBASE_TIMELINE_PM_EVENT_GPU_IDLE, KBASE_TIMELINE_PM_EVENT_RESERVED_4, KBASE_TIMELINE_PM_EVENT_RESERVED_5, KBASE_TIMELINE_PM_EVENT_RESERVED_6, KBASE_TIMELINE_PM_EVENT_CHANGE_GPU_STATE, KBASEP_TIMELINE_PM_EVENT_LAST = KBASE_TIMELINE_PM_EVENT_CHANGE_GPU_STATE } |
| enum | kbase_context_flags { KCTX_COMPAT = 1U << 0, KCTX_RUNNABLE_REF = 1U << 1, KCTX_ACTIVE = 1U << 2, KCTX_PULLED = 1U << 3, KCTX_MEM_PROFILE_INITIALIZED = 1U << 4, KCTX_INFINITE_CACHE = 1U << 5, KCTX_SUBMIT_DISABLED = 1U << 6, KCTX_PRIVILEGED = 1U << 7, KCTX_SCHEDULED = 1U << 8, KCTX_DYING = 1U << 9, KCTX_NO_IMPLICIT_SYNC = 1U << 10 } |
| enum | kbase_reg_access_type { REG_READ, REG_WRITE } |
| enum | kbase_share_attr_bits { SHARE_BOTH_BITS = (2ULL << 8), SHARE_INNER_BITS = (3ULL << 8) } |
Defintions (types, defines, etcs) common to Kbase. They are placed here to allow the hierarchy of header files to work.
| #define BASE_JM_MAX_NR_SLOTS 3 |
The maximum number of Job Slots to support in the Hardware.
You can optimize this down if your target devices will only ever support a small number of job slots.
| #define BASE_MAX_NR_AS 16 |
The maximum number of Address Spaces to support in the Hardware.
You can optimize this down if your target devices will only ever support a small number of Address Spaces
| #define JS_COMMAND_SOFT_STOP_WITH_SW_DISJOINT (JS_COMMAND_SW_CAUSES_DISJOINT | JS_COMMAND_SOFT_STOP) |
Soft-stop command that causes a Disjoint event. This of course isn't entirely masked off by JS_COMMAND_MASK
| #define JS_COMMAND_SW_BITS (JS_COMMAND_SW_CAUSES_DISJOINT) |
Bitmask of all SW related flags
| #define JS_COMMAND_SW_CAUSES_DISJOINT 0x100 |
This command causes a disjoint event
| #define KBASE_API_VERSION | ( | major, | |
| minor | |||
| ) |
| #define KBASE_DISABLE_SCHEDULING_HARD_STOPS 0 |
Prevent hard-stops from occuring in scheduling situations
This is not due to HW issues, but when scheduling is desired to be more predictable.
| #define KBASE_DISABLE_SCHEDULING_SOFT_STOPS 0 |
Prevent soft-stops from occuring in scheduling situations
This is not due to HW issues, but when scheduling is desired to be more predictable.
Therefore, soft stop may still be disabled due to HW issues.
| #define KBASE_KATOM_FLAG_BEEN_HARD_STOPPED (1<<4) |
Atom has been previously hard-stopped.
| #define KBASE_KATOM_FLAG_BEEN_SOFT_STOPPPED (1<<1) |
Atom has been previously soft-stoppped
| #define KBASE_KATOM_FLAG_IN_DISJOINT (1<<5) |
Atom has caused us to enter disjoint state
| #define KBASE_KATOM_FLAGS_RERUN (1<<2) |
Atom has been previously retried to execute
| #define KBASE_TRACE_DUMP_ON_JOB_SLOT_ERROR 1 |
Dump Job slot trace on error (only active if KBASE_TRACE_ENABLE != 0)
| #define KBASE_TRACE_ENABLE 0 |
Enable SW tracing when set
| #define KBASEP_AS_NR_INVALID (-1) |
setting in kbase_context::as_nr that indicates it's invalid
| #define RESET_TIMEOUT 500 |
Number of milliseconds before we time out on a GPU soft/hard reset
| #define ZAP_TIMEOUT 1000 |
Number of milliseconds before resetting the GPU when a job cannot be "zapped" from the hardware. Note that the time is actually ZAP_TIMEOUT+SOFT_STOP_RESET_TIMEOUT between the context zap starting and the GPU actually being reset to give other contexts time for their jobs to be soft-stopped and removed from the hardware before resetting.
| typedef u32 kbase_as_poke_state |
Poking state for BASE_HW_ISSUE_8316
| anonymous enum |
Poking state for BASE_HW_ISSUE_8316
| enum kbase_context_flags |
enum kbase_context_flags - Flags for kbase contexts
: Set when the context process is a compat process, 32-bit process on a 64-bit kernel.
: Set when context is counted in kbdev->js_data.nr_contexts_runnable. Must hold queue_mutex when accessing.
: Set when the context is active.
: Set when last kick() caused atoms to be pulled from this context.
: Set when the context's memory profile has been initialized.
: Set when infinite cache is to be enabled for new allocations. Existing allocations will not change.
: Set to prevent context from submitting any jobs.
:Set if the context uses an address space and should be kept scheduled in.
: Set when the context is scheduled on the Run Pool. This is only ever updated whilst the jsctx_mutex is held.
: Set when the context process is in the process of being evicted.
: Set when explicit Android fences are in use on this context, to disable use of implicit dma-buf fences. This is used to avoid potential synchronization deadlocks.
All members need to be separate bits. This enum is intended for use in a bitmask where multiple values get OR-ed together.
Event IDs for the power management framework.
Any of these events might be missed, so they should not be relied upon to find the precise state of the GPU at a particular time in the trace. Overall, we should get a high percentage of these events for statisical purposes, and so a few missing should not be a problem
1.8.13