Keep shim out of tree
authorCafe <cafe@not.applicable>
Tue, 25 Jul 2017 00:00:00 +0000 (00:00 +0000)
committerCafe <cafe@not.applicable>
Tue, 25 Jul 2017 17:31:04 +0000 (17:31 +0000)
98 files changed:
midgard/backend/gpu/mali_kbase_backend_config.h [deleted file]
midgard/backend/gpu/mali_kbase_cache_policy_backend.h [deleted file]
midgard/backend/gpu/mali_kbase_devfreq.h [deleted file]
midgard/backend/gpu/mali_kbase_device_internal.h [deleted file]
midgard/backend/gpu/mali_kbase_instr_defs.h [deleted file]
midgard/backend/gpu/mali_kbase_instr_internal.h [deleted file]
midgard/backend/gpu/mali_kbase_irq_internal.h [deleted file]
midgard/backend/gpu/mali_kbase_jm_defs.h [deleted file]
midgard/backend/gpu/mali_kbase_jm_internal.h [deleted file]
midgard/backend/gpu/mali_kbase_jm_rb.h [deleted file]
midgard/backend/gpu/mali_kbase_js_affinity.h [deleted file]
midgard/backend/gpu/mali_kbase_js_internal.h [deleted file]
midgard/backend/gpu/mali_kbase_mmu_hw_direct.h [deleted file]
midgard/backend/gpu/mali_kbase_pm_always_on.h [deleted file]
midgard/backend/gpu/mali_kbase_pm_ca.h [deleted file]
midgard/backend/gpu/mali_kbase_pm_ca_fixed.h [deleted file]
midgard/backend/gpu/mali_kbase_pm_coarse_demand.h [deleted file]
midgard/backend/gpu/mali_kbase_pm_defs.h [deleted file]
midgard/backend/gpu/mali_kbase_pm_demand.h [deleted file]
midgard/backend/gpu/mali_kbase_pm_internal.h [deleted file]
midgard/backend/gpu/mali_kbase_pm_policy.h [deleted file]
midgard/backend/gpu/mali_kbase_power_model_simple.h [deleted file]
midgard/backend/gpu/mali_kbase_time.h [deleted file]
midgard/config.h [deleted file]
midgard/mali_base_hwconfig_features.h [deleted file]
midgard/mali_base_hwconfig_issues.h [deleted file]
midgard/mali_base_kernel.h [deleted file]
midgard/mali_base_kernel_sync.h [deleted file]
midgard/mali_base_mem_priv.h [deleted file]
midgard/mali_base_vendor_specific_func.h [deleted file]
midgard/mali_kbase.h [deleted file]
midgard/mali_kbase_10969_workaround.h [deleted file]
midgard/mali_kbase_cache_policy.h [deleted file]
midgard/mali_kbase_config.h [deleted file]
midgard/mali_kbase_config_defaults.h [deleted file]
midgard/mali_kbase_debug.h [deleted file]
midgard/mali_kbase_debug_job_fault.h [deleted file]
midgard/mali_kbase_debug_mem_view.h [deleted file]
midgard/mali_kbase_defs.h [deleted file]
midgard/mali_kbase_dma_fence.h [deleted file]
midgard/mali_kbase_gator.h [deleted file]
midgard/mali_kbase_gator_api.h [deleted file]
midgard/mali_kbase_gator_hwcnt_names.h [deleted file]
midgard/mali_kbase_gator_hwcnt_names_tmix.h [deleted file]
midgard/mali_kbase_gpu_id.h [deleted file]
midgard/mali_kbase_gpu_memory_debugfs.h [deleted file]
midgard/mali_kbase_gpuprops.h [deleted file]
midgard/mali_kbase_gpuprops_types.h [deleted file]
midgard/mali_kbase_hw.h [deleted file]
midgard/mali_kbase_hwaccess_backend.h [deleted file]
midgard/mali_kbase_hwaccess_defs.h [deleted file]
midgard/mali_kbase_hwaccess_gpuprops.h [deleted file]
midgard/mali_kbase_hwaccess_instr.h [deleted file]
midgard/mali_kbase_hwaccess_jm.h [deleted file]
midgard/mali_kbase_hwaccess_pm.h [deleted file]
midgard/mali_kbase_hwaccess_time.h [deleted file]
midgard/mali_kbase_hwcnt_reader.h [deleted file]
midgard/mali_kbase_instr.h [deleted file]
midgard/mali_kbase_ipa.h [deleted file]
midgard/mali_kbase_ipa_tables.h [deleted file]
midgard/mali_kbase_jd_debugfs.h [deleted file]
midgard/mali_kbase_jm.h [deleted file]
midgard/mali_kbase_js.h [deleted file]
midgard/mali_kbase_js_ctx_attr.h [deleted file]
midgard/mali_kbase_js_defs.h [deleted file]
midgard/mali_kbase_js_policy.h [deleted file]
midgard/mali_kbase_js_policy_cfs.h [deleted file]
midgard/mali_kbase_linux.h [deleted file]
midgard/mali_kbase_mem.h [deleted file]
midgard/mali_kbase_mem_linux.h [deleted file]
midgard/mali_kbase_mem_lowlevel.h [deleted file]
midgard/mali_kbase_mem_pool_debugfs.h [deleted file]
midgard/mali_kbase_mem_profile_debugfs.h [deleted file]
midgard/mali_kbase_mem_profile_debugfs_buf_size.h [deleted file]
midgard/mali_kbase_mmu_hw.h [deleted file]
midgard/mali_kbase_mmu_mode.h [deleted file]
midgard/mali_kbase_pm.h [deleted file]
midgard/mali_kbase_profiling_gator_api.h [deleted file]
midgard/mali_kbase_smc.h [deleted file]
midgard/mali_kbase_strings.h [deleted file]
midgard/mali_kbase_sync.h [deleted file]
midgard/mali_kbase_tlstream.h [deleted file]
midgard/mali_kbase_trace_defs.h [deleted file]
midgard/mali_kbase_trace_timeline.h [deleted file]
midgard/mali_kbase_trace_timeline_defs.h [deleted file]
midgard/mali_kbase_uku.h [deleted file]
midgard/mali_kbase_utility.h [deleted file]
midgard/mali_kbase_vinstr.h [deleted file]
midgard/mali_linux_kbase_trace.h [deleted file]
midgard/mali_linux_trace.h [deleted file]
midgard/mali_malisw.h [deleted file]
midgard/mali_midg_coherency.h [deleted file]
midgard/mali_midg_regmap.h [deleted file]
midgard/mali_timeline.h [deleted file]
midgard/mali_uk.h [deleted file]
midgard/platform/mali_kbase_platform_common.h [deleted file]
midgard/platform/mali_kbase_platform_fake.h [deleted file]
shim.h

diff --git a/midgard/backend/gpu/mali_kbase_backend_config.h b/midgard/backend/gpu/mali_kbase_backend_config.h
deleted file mode 100644 (file)
index c8ae87e..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2014-2015 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.
- *
- */
-
-
-
-/*
- * Backend specific configuration
- */
-
-#ifndef _KBASE_BACKEND_CONFIG_H_
-#define _KBASE_BACKEND_CONFIG_H_
-
-/* Enable GPU reset API */
-#define KBASE_GPU_RESET_EN 1
-
-#endif /* _KBASE_BACKEND_CONFIG_H_ */
-
diff --git a/midgard/backend/gpu/mali_kbase_cache_policy_backend.h b/midgard/backend/gpu/mali_kbase_cache_policy_backend.h
deleted file mode 100644 (file)
index fe98691..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2015-2016 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.
- *
- */
-
-
-
-
-#ifndef _KBASE_CACHE_POLICY_BACKEND_H_
-#define _KBASE_CACHE_POLICY_BACKEND_H_
-
-#include "mali_kbase.h"
-#include "mali_base_kernel.h"
-
-/**
-  * kbase_cache_set_coherency_mode() - Sets the system coherency mode
-  *                    in the GPU.
-  * @kbdev:    Device pointer
-  * @mode:     Coherency mode. COHERENCY_ACE/ACE_LITE
-  */
-void kbase_cache_set_coherency_mode(struct kbase_device *kbdev,
-               u32 mode);
-
-#endif                         /* _KBASE_CACHE_POLICY_H_ */
diff --git a/midgard/backend/gpu/mali_kbase_devfreq.h b/midgard/backend/gpu/mali_kbase_devfreq.h
deleted file mode 100644 (file)
index c0bf8b1..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2014 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.
- *
- */
-
-
-
-#ifndef _BASE_DEVFREQ_H_
-#define _BASE_DEVFREQ_H_
-
-int kbase_devfreq_init(struct kbase_device *kbdev);
-void kbase_devfreq_term(struct kbase_device *kbdev);
-
-#endif /* _BASE_DEVFREQ_H_ */
diff --git a/midgard/backend/gpu/mali_kbase_device_internal.h b/midgard/backend/gpu/mali_kbase_device_internal.h
deleted file mode 100644 (file)
index 5b20445..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2014 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.
- *
- */
-
-
-
-
-
-/*
- * Backend-specific HW access device APIs
- */
-
-#ifndef _KBASE_DEVICE_INTERNAL_H_
-#define _KBASE_DEVICE_INTERNAL_H_
-
-/**
- * kbase_reg_write - write to GPU register
- * @kbdev:  Kbase device pointer
- * @offset: Offset of register
- * @value:  Value to write
- * @kctx:   Kbase context pointer. May be NULL
- *
- * Caller must ensure the GPU is powered (@kbdev->pm.gpu_powered != false). If
- * @kctx is not NULL then the caller must ensure it is scheduled (@kctx->as_nr
- * != KBASEP_AS_NR_INVALID).
- */
-void kbase_reg_write(struct kbase_device *kbdev, u16 offset, u32 value,
-                                               struct kbase_context *kctx);
-
-/**
- * kbase_reg_read - read from GPU register
- * @kbdev:  Kbase device pointer
- * @offset: Offset of register
- * @kctx:   Kbase context pointer. May be NULL
- *
- * Caller must ensure the GPU is powered (@kbdev->pm.gpu_powered != false). If
- * @kctx is not NULL then the caller must ensure it is scheduled (@kctx->as_nr
- * != KBASEP_AS_NR_INVALID).
- *
- * Return: Value in desired register
- */
-u32 kbase_reg_read(struct kbase_device *kbdev, u16 offset,
-                                               struct kbase_context *kctx);
-
-
-/**
- * kbase_gpu_interrupt - GPU interrupt handler
- * @kbdev: Kbase device pointer
- * @val:   The value of the GPU IRQ status register which triggered the call
- *
- * This function is called from the interrupt handler when a GPU irq is to be
- * handled.
- */
-void kbase_gpu_interrupt(struct kbase_device *kbdev, u32 val);
-
-#endif /* _KBASE_DEVICE_INTERNAL_H_ */
diff --git a/midgard/backend/gpu/mali_kbase_instr_defs.h b/midgard/backend/gpu/mali_kbase_instr_defs.h
deleted file mode 100644 (file)
index 23bd80a..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2014 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.
- *
- */
-
-
-
-/*
- * Backend-specific instrumentation definitions
- */
-
-#ifndef _KBASE_INSTR_DEFS_H_
-#define _KBASE_INSTR_DEFS_H_
-
-/*
- * Instrumentation State Machine States
- */
-enum kbase_instr_state {
-       /* State where instrumentation is not active */
-       KBASE_INSTR_STATE_DISABLED = 0,
-       /* State machine is active and ready for a command. */
-       KBASE_INSTR_STATE_IDLE,
-       /* Hardware is currently dumping a frame. */
-       KBASE_INSTR_STATE_DUMPING,
-       /* We've requested a clean to occur on a workqueue */
-       KBASE_INSTR_STATE_REQUEST_CLEAN,
-       /* Hardware is currently cleaning and invalidating caches. */
-       KBASE_INSTR_STATE_CLEANING,
-       /* Cache clean completed, and either a) a dump is complete, or
-        * b) instrumentation can now be setup. */
-       KBASE_INSTR_STATE_CLEANED,
-       /* kbasep_reset_timeout_worker() has started (but not compelted) a
-        * reset. This generally indicates the current action should be aborted,
-        * and kbasep_reset_timeout_worker() will handle the cleanup */
-       KBASE_INSTR_STATE_RESETTING,
-       /* An error has occured during DUMPING (page fault). */
-       KBASE_INSTR_STATE_FAULT
-};
-
-/* Structure used for instrumentation and HW counters dumping */
-struct kbase_instr_backend {
-       wait_queue_head_t wait;
-       int triggered;
-
-       enum kbase_instr_state state;
-       wait_queue_head_t cache_clean_wait;
-       struct workqueue_struct *cache_clean_wq;
-       struct work_struct  cache_clean_work;
-};
-
-#endif /* _KBASE_INSTR_DEFS_H_ */
-
diff --git a/midgard/backend/gpu/mali_kbase_instr_internal.h b/midgard/backend/gpu/mali_kbase_instr_internal.h
deleted file mode 100644 (file)
index e96aeae..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2014 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.
- *
- */
-
-
-
-
-
-/*
- * Backend-specific HW access instrumentation APIs
- */
-
-#ifndef _KBASE_INSTR_INTERNAL_H_
-#define _KBASE_INSTR_INTERNAL_H_
-
-/**
- * kbasep_cache_clean_worker() - Workqueue for handling cache cleaning
- * @data: a &struct work_struct
- */
-void kbasep_cache_clean_worker(struct work_struct *data);
-
-/**
- * kbase_clean_caches_done() - Cache clean interrupt received
- * @kbdev: Kbase device
- */
-void kbase_clean_caches_done(struct kbase_device *kbdev);
-
-/**
- * kbase_instr_hwcnt_sample_done() - Dump complete interrupt received
- * @kbdev: Kbase device
- */
-void kbase_instr_hwcnt_sample_done(struct kbase_device *kbdev);
-
-#endif /* _KBASE_INSTR_INTERNAL_H_ */
diff --git a/midgard/backend/gpu/mali_kbase_irq_internal.h b/midgard/backend/gpu/mali_kbase_irq_internal.h
deleted file mode 100644 (file)
index 8781561..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2014-2015 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.
- *
- */
-
-
-
-/*
- * Backend specific IRQ APIs
- */
-
-#ifndef _KBASE_IRQ_INTERNAL_H_
-#define _KBASE_IRQ_INTERNAL_H_
-
-int kbase_install_interrupts(struct kbase_device *kbdev);
-
-void kbase_release_interrupts(struct kbase_device *kbdev);
-
-/**
- * kbase_synchronize_irqs - Ensure that all IRQ handlers have completed
- *                          execution
- * @kbdev: The kbase device
- */
-void kbase_synchronize_irqs(struct kbase_device *kbdev);
-
-int kbasep_common_test_interrupt_handlers(
-                                       struct kbase_device * const kbdev);
-
-#endif /* _KBASE_IRQ_INTERNAL_H_ */
diff --git a/midgard/backend/gpu/mali_kbase_jm_defs.h b/midgard/backend/gpu/mali_kbase_jm_defs.h
deleted file mode 100644 (file)
index 8ccc440..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2014-2015 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.
- *
- */
-
-
-
-
-/*
- * Register-based HW access backend specific definitions
- */
-
-#ifndef _KBASE_HWACCESS_GPU_DEFS_H_
-#define _KBASE_HWACCESS_GPU_DEFS_H_
-
-/* SLOT_RB_SIZE must be < 256 */
-#define SLOT_RB_SIZE 2
-#define SLOT_RB_MASK (SLOT_RB_SIZE - 1)
-
-/**
- * struct rb_entry - Ringbuffer entry
- * @katom:     Atom associated with this entry
- */
-struct rb_entry {
-       struct kbase_jd_atom *katom;
-};
-
-/**
- * struct slot_rb - Slot ringbuffer
- * @entries:           Ringbuffer entries
- * @last_context:      The last context to submit a job on this slot
- * @read_idx:          Current read index of buffer
- * @write_idx:         Current write index of buffer
- * @job_chain_flag:    Flag used to implement jobchain disambiguation
- */
-struct slot_rb {
-       struct rb_entry entries[SLOT_RB_SIZE];
-
-       struct kbase_context *last_context;
-
-       u8 read_idx;
-       u8 write_idx;
-
-       u8 job_chain_flag;
-};
-
-/**
- * struct kbase_backend_data - GPU backend specific data for HW access layer
- * @slot_rb:                   Slot ringbuffers
- * @rmu_workaround_flag:       When PRLAM-8987 is present, this flag determines
- *                             whether slots 0/1 or slot 2 are currently being
- *                             pulled from
- * @scheduling_timer:          The timer tick used for rescheduling jobs
- * @timer_running:             Is the timer running? The runpool_mutex must be
- *                             held whilst modifying this.
- * @suspend_timer:              Is the timer suspended? Set when a suspend
- *                              occurs and cleared on resume. The runpool_mutex
- *                              must be held whilst modifying this.
- * @reset_gpu:                 Set to a KBASE_RESET_xxx value (see comments)
- * @reset_workq:               Work queue for performing the reset
- * @reset_work:                        Work item for performing the reset
- * @reset_wait:                        Wait event signalled when the reset is complete
- * @reset_timer:               Timeout for soft-stops before the reset
- *
- * The kbasep_js_device_data::runpool_irq::lock (a spinlock) must be held when
- * accessing this structure
- */
-struct kbase_backend_data {
-       struct slot_rb slot_rb[BASE_JM_MAX_NR_SLOTS];
-
-       bool rmu_workaround_flag;
-
-       struct hrtimer scheduling_timer;
-
-       bool timer_running;
-       bool suspend_timer;
-
-       atomic_t reset_gpu;
-
-/* The GPU reset isn't pending */
-#define KBASE_RESET_GPU_NOT_PENDING     0
-/* kbase_prepare_to_reset_gpu has been called */
-#define KBASE_RESET_GPU_PREPARED        1
-/* kbase_reset_gpu has been called - the reset will now definitely happen
- * within the timeout period */
-#define KBASE_RESET_GPU_COMMITTED       2
-/* The GPU reset process is currently occuring (timeout has expired or
- * kbasep_try_reset_gpu_early was called) */
-#define KBASE_RESET_GPU_HAPPENING       3
-
-       struct workqueue_struct *reset_workq;
-       struct work_struct reset_work;
-       wait_queue_head_t reset_wait;
-       struct hrtimer reset_timer;
-};
-
-/**
- * struct kbase_jd_atom_backend - GPU backend specific katom data
- */
-struct kbase_jd_atom_backend {
-};
-
-/**
- * struct kbase_context_backend - GPU backend specific context data
- */
-struct kbase_context_backend {
-};
-
-#endif /* _KBASE_HWACCESS_GPU_DEFS_H_ */
diff --git a/midgard/backend/gpu/mali_kbase_jm_internal.h b/midgard/backend/gpu/mali_kbase_jm_internal.h
deleted file mode 100644 (file)
index eb068d4..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2011-2015 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.
- *
- */
-
-
-
-
-
-/*
- * Job Manager backend-specific low-level APIs.
- */
-
-#ifndef _KBASE_JM_HWACCESS_H_
-#define _KBASE_JM_HWACCESS_H_
-
-#include <mali_kbase_hw.h>
-#include <mali_kbase_debug.h>
-#include <linux/atomic.h>
-
-#include <backend/gpu/mali_kbase_jm_rb.h>
-
-/**
- * kbase_job_submit_nolock() - Submit a job to a certain job-slot
- * @kbdev:     Device pointer
- * @katom:     Atom to submit
- * @js:                Job slot to submit on
- *
- * The caller must check kbasep_jm_is_submit_slots_free() != false before
- * calling this.
- *
- * The following locking conditions are made on the caller:
- * - it must hold the kbasep_js_device_data::runpoool_irq::lock
- */
-void kbase_job_submit_nolock(struct kbase_device *kbdev,
-                                       struct kbase_jd_atom *katom, int js);
-
-/**
- * kbase_job_done_slot() - Complete the head job on a particular job-slot
- * @kbdev:             Device pointer
- * @s:                 Job slot
- * @completion_code:   Completion code of job reported by GPU
- * @job_tail:          Job tail address reported by GPU
- * @end_timestamp:     Timestamp of job completion
- */
-void kbase_job_done_slot(struct kbase_device *kbdev, int s, u32 completion_code,
-                                       u64 job_tail, ktime_t *end_timestamp);
-
-#ifdef CONFIG_GPU_TRACEPOINTS
-static inline char *kbasep_make_job_slot_string(int js, char *js_string)
-{
-       sprintf(js_string, "job_slot_%i", js);
-       return js_string;
-}
-#endif
-
-/**
- * kbase_job_hw_submit() - Submit a job to the GPU
- * @kbdev:     Device pointer
- * @katom:     Atom to submit
- * @js:                Job slot to submit on
- *
- * The caller must check kbasep_jm_is_submit_slots_free() != false before
- * calling this.
- *
- * The following locking conditions are made on the caller:
- * - it must hold the kbasep_js_device_data::runpoool_irq::lock
- */
-void kbase_job_hw_submit(struct kbase_device *kbdev,
-                               struct kbase_jd_atom *katom,
-                               int js);
-
-/**
- * kbasep_job_slot_soft_or_hard_stop_do_action() - Perform a soft or hard stop
- *                                                on the specified atom
- * @kbdev:             Device pointer
- * @js:                        Job slot to stop on
- * @action:            The action to perform, either JSn_COMMAND_HARD_STOP or
- *                     JSn_COMMAND_SOFT_STOP
- * @core_reqs:         Core requirements of atom to stop
- * @target_katom:      Atom to stop
- *
- * The following locking conditions are made on the caller:
- * - it must hold the kbasep_js_device_data::runpool_irq::lock
- */
-void kbasep_job_slot_soft_or_hard_stop_do_action(struct kbase_device *kbdev,
-                                       int js,
-                                       u32 action,
-                                       u16 core_reqs,
-                                       struct kbase_jd_atom *target_katom);
-
-/**
- * kbase_backend_soft_hard_stop_slot() - Soft or hard stop jobs on a given job
- *                                      slot belonging to a given context.
- * @kbdev:     Device pointer
- * @kctx:      Context pointer. May be NULL
- * @katom:     Specific atom to stop. May be NULL
- * @js:                Job slot to hard stop
- * @action:    The action to perform, either JSn_COMMAND_HARD_STOP or
- *             JSn_COMMAND_SOFT_STOP
- *
- * If no context is provided then all jobs on the slot will be soft or hard
- * stopped.
- *
- * If a katom is provided then only that specific atom will be stopped. In this
- * case the kctx parameter is ignored.
- *
- * Jobs that are on the slot but are not yet on the GPU will be unpulled and
- * returned to the job scheduler.
- *
- * Return: true if an atom was stopped, false otherwise
- */
-bool kbase_backend_soft_hard_stop_slot(struct kbase_device *kbdev,
-                                       struct kbase_context *kctx,
-                                       int js,
-                                       struct kbase_jd_atom *katom,
-                                       u32 action);
-
-/**
- * kbase_job_slot_init - Initialise job slot framework
- * @kbdev: Device pointer
- *
- * Called on driver initialisation
- *
- * Return: 0 on success
- */
-int kbase_job_slot_init(struct kbase_device *kbdev);
-
-/**
- * kbase_job_slot_halt - Halt the job slot framework
- * @kbdev: Device pointer
- *
- * Should prevent any further job slot processing
- */
-void kbase_job_slot_halt(struct kbase_device *kbdev);
-
-/**
- * kbase_job_slot_term - Terminate job slot framework
- * @kbdev: Device pointer
- *
- * Called on driver termination
- */
-void kbase_job_slot_term(struct kbase_device *kbdev);
-
-#endif /* _KBASE_JM_HWACCESS_H_ */
diff --git a/midgard/backend/gpu/mali_kbase_jm_rb.h b/midgard/backend/gpu/mali_kbase_jm_rb.h
deleted file mode 100644 (file)
index 102d94b..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2014-2015 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.
- *
- */
-
-
-
-
-/*
- * Register-based HW access backend specific APIs
- */
-
-#ifndef _KBASE_HWACCESS_GPU_H_
-#define _KBASE_HWACCESS_GPU_H_
-
-#include <backend/gpu/mali_kbase_pm_internal.h>
-
-/**
- * kbase_gpu_irq_evict - Evict an atom from a NEXT slot
- *
- * @kbdev:         Device pointer
- * @js:            Job slot to evict from
- *
- * Evict the atom in the NEXT slot for the specified job slot. This function is
- * called from the job complete IRQ handler when the previous job has failed.
- *
- * Return: true if job evicted from NEXT registers, false otherwise
- */
-bool kbase_gpu_irq_evict(struct kbase_device *kbdev, int js);
-
-/**
- * kbase_gpu_complete_hw - Complete an atom on job slot js
- *
- * @kbdev:           Device pointer
- * @js:              Job slot that has completed
- * @completion_code: Event code from job that has completed
- * @job_tail:        The tail address from the hardware if the job has partially
- *                   completed
- * @end_timestamp:   Time of completion
- */
-void kbase_gpu_complete_hw(struct kbase_device *kbdev, int js,
-                               u32 completion_code,
-                               u64 job_tail,
-                               ktime_t *end_timestamp);
-
-/**
- * kbase_gpu_inspect - Inspect the contents of the HW access ringbuffer
- *
- * @kbdev:  Device pointer
- * @js:     Job slot to inspect
- * @idx:    Index into ringbuffer. 0 is the job currently running on
- *          the slot, 1 is the job waiting, all other values are invalid.
- * Return:  The atom at that position in the ringbuffer
- *          or NULL if no atom present
- */
-struct kbase_jd_atom *kbase_gpu_inspect(struct kbase_device *kbdev, int js,
-                                       int idx);
-
-/**
- * kbase_gpu_slot_update - Update state based on slot ringbuffers
- *
- * @kbdev:  Device pointer
- *
- * Inspect the jobs in the slot ringbuffers and update state.
- *
- * This will cause jobs to be submitted to hardware if they are unblocked
- */
-void kbase_gpu_slot_update(struct kbase_device *kbdev);
-
-/**
- * kbase_gpu_dump_slots - Print the contents of the slot ringbuffers
- *
- * @kbdev:  Device pointer
- */
-void kbase_gpu_dump_slots(struct kbase_device *kbdev);
-
-#endif /* _KBASE_HWACCESS_GPU_H_ */
diff --git a/midgard/backend/gpu/mali_kbase_js_affinity.h b/midgard/backend/gpu/mali_kbase_js_affinity.h
deleted file mode 100644 (file)
index 3026e6a..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2011-2015 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.
- *
- */
-
-
-
-
-
-/*
- * Affinity Manager internal APIs.
- */
-
-#ifndef _KBASE_JS_AFFINITY_H_
-#define _KBASE_JS_AFFINITY_H_
-
-#ifdef CONFIG_MALI_DEBUG_SHADER_SPLIT_FS
-/* Import the external affinity mask variables */
-extern u64 mali_js0_affinity_mask;
-extern u64 mali_js1_affinity_mask;
-extern u64 mali_js2_affinity_mask;
-#endif /* CONFIG_MALI_DEBUG_SHADER_SPLIT_FS */
-
-
-/**
- * kbase_js_can_run_job_on_slot_no_lock - Decide whether it is possible to
- * submit a job to a particular job slot in the current status
- *
- * @kbdev: The kbase device structure of the device
- * @js:    Job slot number to check for allowance
- *
- * 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 and only
- * having 1 coregroup 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
- */
-bool kbase_js_can_run_job_on_slot_no_lock(struct kbase_device *kbdev,
-                                                                       int js);
-
-/**
- * kbase_js_choose_affinity - Compute affinity for a given job.
- *
- * @affinity: Affinity bitmap computed
- * @kbdev:    The kbase device structure of the device
- * @katom:    Job chain of which affinity is going to be found
- * @js:       Slot the job chain is being submitted
- *
- * Currently assumes an all-on/all-off power management policy.
- * Also assumes there is at least one core with tiler available.
- *
- * Returns true if a valid affinity was chosen, false if
- * no cores were available.
- */
-bool kbase_js_choose_affinity(u64 * const affinity,
-                                       struct kbase_device *kbdev,
-                                       struct kbase_jd_atom *katom,
-                                       int js);
-
-/**
- * kbase_js_affinity_would_violate - Determine whether a proposed affinity on
- * job slot @js would cause a violation of affinity restrictions.
- *
- * @kbdev:    Kbase device structure
- * @js:       The job slot to test
- * @affinity: The affinity mask to test
- *
- * The following locks must be held by the caller
- * - kbasep_js_device_data.runpool_irq.lock
- *
- * Return: true if the affinity would violate the restrictions
- */
-bool kbase_js_affinity_would_violate(struct kbase_device *kbdev, int js,
-                                                               u64 affinity);
-
-/**
- * kbase_js_affinity_retain_slot_cores - Affinity tracking: retain cores used by
- *                                       a slot
- *
- * @kbdev:    Kbase device structure
- * @js:       The job slot retaining the cores
- * @affinity: The cores to retain
- *
- * The following locks must be held by the caller
- * - kbasep_js_device_data.runpool_irq.lock
- */
-void kbase_js_affinity_retain_slot_cores(struct kbase_device *kbdev, int js,
-                                                               u64 affinity);
-
-/**
- * kbase_js_affinity_release_slot_cores - Affinity tracking: release cores used
- *                                        by a slot
- *
- * @kbdev:    Kbase device structure
- * @js:       Job slot
- * @affinity: Bit mask of core to be released
- *
- * Cores must be released as soon as a job is dequeued from a slot's 'submit
- * slots', and before another job is submitted to those slots. Otherwise, the
- * refcount could exceed the maximum number submittable to a slot,
- * %BASE_JM_SUBMIT_SLOTS.
- *
- * The following locks must be held by the caller
- * - kbasep_js_device_data.runpool_irq.lock
- */
-void kbase_js_affinity_release_slot_cores(struct kbase_device *kbdev, int js,
-                                                               u64 affinity);
-
-/**
- * kbase_js_debug_log_current_affinities - log the current affinities
- *
- * @kbdev:  Kbase device structure
- *
- * Output to the Trace log the current tracked affinities on all slots
- */
-#if KBASE_TRACE_ENABLE
-void kbase_js_debug_log_current_affinities(struct kbase_device *kbdev);
-#else                          /*  KBASE_TRACE_ENABLE  */
-static inline void
-kbase_js_debug_log_current_affinities(struct kbase_device *kbdev)
-{
-}
-#endif                         /*  KBASE_TRACE_ENABLE  */
-
-#endif                         /* _KBASE_JS_AFFINITY_H_ */
diff --git a/midgard/backend/gpu/mali_kbase_js_internal.h b/midgard/backend/gpu/mali_kbase_js_internal.h
deleted file mode 100644 (file)
index 3f53779..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2014-2015 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.
- *
- */
-
-
-
-
-/*
- * Register-based HW access backend specific job scheduler APIs
- */
-
-#ifndef _KBASE_JS_BACKEND_H_
-#define _KBASE_JS_BACKEND_H_
-
-/**
- * kbase_backend_timer_init() - Initialise the JS scheduling timer
- * @kbdev:     Device pointer
- *
- * This function should be called at driver initialisation
- *
- * Return: 0 on success
- */
-int kbase_backend_timer_init(struct kbase_device *kbdev);
-
-/**
- * kbase_backend_timer_term() - Terminate the JS scheduling timer
- * @kbdev:     Device pointer
- *
- * This function should be called at driver termination
- */
-void kbase_backend_timer_term(struct kbase_device *kbdev);
-
-/**
- * kbase_backend_timer_suspend - Suspend is happening, stop the JS scheduling
- *                               timer
- * @kbdev: Device pointer
- *
- * This function should be called on suspend, after the active count has reached
- * zero. This is required as the timer may have been started on job submission
- * to the job scheduler, but before jobs are submitted to the GPU.
- *
- * Caller must hold runpool_mutex.
- */
-void kbase_backend_timer_suspend(struct kbase_device *kbdev);
-
-/**
- * kbase_backend_timer_resume - Resume is happening, re-evaluate the JS
- *                              scheduling timer
- * @kbdev: Device pointer
- *
- * This function should be called on resume. Note that is is not guaranteed to
- * re-start the timer, only evalute whether it should be re-started.
- *
- * Caller must hold runpool_mutex.
- */
-void kbase_backend_timer_resume(struct kbase_device *kbdev);
-
-#endif /* _KBASE_JS_BACKEND_H_ */
diff --git a/midgard/backend/gpu/mali_kbase_mmu_hw_direct.h b/midgard/backend/gpu/mali_kbase_mmu_hw_direct.h
deleted file mode 100644 (file)
index c02253c..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2014-2015 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.
- *
- */
-
-
-
-/*
- * Interface file for the direct implementation for MMU hardware access
- *
- * Direct MMU hardware interface
- *
- * This module provides the interface(s) that are required by the direct
- * register access implementation of the MMU hardware interface
- */
-
-#ifndef _MALI_KBASE_MMU_HW_DIRECT_H_
-#define _MALI_KBASE_MMU_HW_DIRECT_H_
-
-#include <mali_kbase_defs.h>
-
-/**
- * kbase_mmu_interrupt - Process an MMU interrupt.
- *
- * Process the MMU interrupt that was reported by the &kbase_device.
- *
- * @kbdev:          kbase context to clear the fault from.
- * @irq_stat:       Value of the MMU_IRQ_STATUS register
- */
-void kbase_mmu_interrupt(struct kbase_device *kbdev, u32 irq_stat);
-
-#endif /* _MALI_KBASE_MMU_HW_DIRECT_H_ */
diff --git a/midgard/backend/gpu/mali_kbase_pm_always_on.h b/midgard/backend/gpu/mali_kbase_pm_always_on.h
deleted file mode 100644 (file)
index f9d244b..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-
-/*
- *
- * (C) COPYRIGHT 2011-2015 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.
- *
- */
-
-
-
-
-
-/*
- * "Always on" power management policy
- */
-
-#ifndef MALI_KBASE_PM_ALWAYS_ON_H
-#define MALI_KBASE_PM_ALWAYS_ON_H
-
-/**
- * DOC:
- * The "Always on" power management policy has the following
- * characteristics:
- *
- * - When KBase indicates that the GPU will be powered up, but we don't yet
- *   know which Job Chains are to be run:
- *    All Shader Cores are powered up, regardless of whether or not they will
- *    be needed later.
- *
- * - When KBase indicates that a set of Shader Cores are needed to submit the
- *   currently queued Job Chains:
- *    All Shader Cores are kept powered, regardless of whether or not they will
- *    be needed
- *
- * - When KBase indicates that the GPU need not be powered:
- *    The Shader Cores are kept powered, regardless of whether or not they will
- *    be needed. The GPU itself is also kept powered, even though it is not
- *    needed.
- *
- * This policy is automatically overridden during system suspend: the desired
- * core state is ignored, and the cores are forced off regardless of what the
- * policy requests. After resuming from suspend, new changes to the desired
- * core state made by the policy are honored.
- *
- * Note:
- *
- * - KBase indicates the GPU will be powered up when it has a User Process that
- *   has just started to submit Job Chains.
- *
- * - KBase indicates the GPU need not be powered when all the Job Chains from
- *   User Processes have finished, and it is waiting for a User Process to
- *   submit some more Job Chains.
- */
-
-/**
- * struct kbasep_pm_policy_always_on - Private struct for policy instance data
- * @dummy: unused dummy variable
- *
- * This contains data that is private to the particular power policy that is
- * active.
- */
-struct kbasep_pm_policy_always_on {
-       int dummy;
-};
-
-extern const struct kbase_pm_policy kbase_pm_always_on_policy_ops;
-
-#endif /* MALI_KBASE_PM_ALWAYS_ON_H */
-
diff --git a/midgard/backend/gpu/mali_kbase_pm_ca.h b/midgard/backend/gpu/mali_kbase_pm_ca.h
deleted file mode 100644 (file)
index ee9e751..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2011-2015 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.
- *
- */
-
-
-
-/*
- * Base kernel core availability APIs
- */
-
-#ifndef _KBASE_PM_CA_H_
-#define _KBASE_PM_CA_H_
-
-/**
- * kbase_pm_ca_init - Initialize core availability framework
- *
- * Must be called before calling any other core availability function
- *
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- *
- * Return: 0 if the core availability framework was successfully initialized,
- *         -errno otherwise
- */
-int kbase_pm_ca_init(struct kbase_device *kbdev);
-
-/**
- * kbase_pm_ca_term - Terminate core availability framework
- *
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- */
-void kbase_pm_ca_term(struct kbase_device *kbdev);
-
-/**
- * kbase_pm_ca_get_core_mask - Get currently available shaders core mask
- *
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- *
- * Returns a mask of the currently available shader cores.
- * Calls into the core availability policy
- *
- * Return: The bit mask of available cores
- */
-u64 kbase_pm_ca_get_core_mask(struct kbase_device *kbdev);
-
-/**
- * kbase_pm_ca_update_core_status - Update core status
- *
- * @kbdev:               The kbase device structure for the device (must be
- *                       a valid pointer)
- * @cores_ready:         The bit mask of cores ready for job submission
- * @cores_transitioning: The bit mask of cores that are transitioning power
- *                       state
- *
- * Update core availability policy with current core power status
- *
- * Calls into the core availability policy
- */
-void kbase_pm_ca_update_core_status(struct kbase_device *kbdev, u64 cores_ready,
-                                               u64 cores_transitioning);
-
-/**
- * kbase_pm_ca_instr_enable - Enable override for instrumentation
- *
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- *
- * This overrides the output of the core availability policy, ensuring that all
- * cores are available
- */
-void kbase_pm_ca_instr_enable(struct kbase_device *kbdev);
-
-/**
- * kbase_pm_ca_instr_disable - Disable override for instrumentation
- *
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- *
- * This disables any previously enabled override, and resumes normal policy
- * functionality
- */
-void kbase_pm_ca_instr_disable(struct kbase_device *kbdev);
-
-#endif /* _KBASE_PM_CA_H_ */
diff --git a/midgard/backend/gpu/mali_kbase_pm_ca_fixed.h b/midgard/backend/gpu/mali_kbase_pm_ca_fixed.h
deleted file mode 100644 (file)
index a763155..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2013-2015 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.
- *
- */
-
-
-
-/*
- * A power policy implementing fixed core availability
- */
-
-#ifndef MALI_KBASE_PM_CA_FIXED_H
-#define MALI_KBASE_PM_CA_FIXED_H
-
-/**
- * struct kbasep_pm_ca_policy_fixed - Private structure for policy instance data
- *
- * @dummy: Dummy member - no state is needed
- *
- * This contains data that is private to the particular power policy that is
- * active.
- */
-struct kbasep_pm_ca_policy_fixed {
-       int dummy;
-};
-
-extern const struct kbase_pm_ca_policy kbase_pm_ca_fixed_policy_ops;
-
-#endif /* MALI_KBASE_PM_CA_FIXED_H */
-
diff --git a/midgard/backend/gpu/mali_kbase_pm_coarse_demand.h b/midgard/backend/gpu/mali_kbase_pm_coarse_demand.h
deleted file mode 100644 (file)
index 749d305..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2012-2015 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.
- *
- */
-
-
-
-
-
-/*
- * "Coarse Demand" power management policy
- */
-
-#ifndef MALI_KBASE_PM_COARSE_DEMAND_H
-#define MALI_KBASE_PM_COARSE_DEMAND_H
-
-/**
- * DOC:
- * The "Coarse" demand power management policy has the following
- * characteristics:
- * - When KBase indicates that the GPU will be powered up, but we don't yet
- *   know which Job Chains are to be run:
- *  - All Shader Cores are powered up, regardless of whether or not they will
- *    be needed later.
- * - When KBase indicates that a set of Shader Cores are needed to submit the
- *   currently queued Job Chains:
- *  - All Shader Cores are kept powered, regardless of whether or not they will
- *    be needed
- * - When KBase indicates that the GPU need not be powered:
- *  - The Shader Cores are powered off, and the GPU itself is powered off too.
- *
- * @note:
- * - KBase indicates the GPU will be powered up when it has a User Process that
- *   has just started to submit Job Chains.
- * - KBase indicates the GPU need not be powered when all the Job Chains from
- *   User Processes have finished, and it is waiting for a User Process to
- *   submit some more Job Chains.
- */
-
-/**
- * struct kbasep_pm_policy_coarse_demand - Private structure for coarse demand
- *                                         policy
- *
- * This contains data that is private to the coarse demand power policy.
- *
- * @dummy: Dummy member - no state needed
- */
-struct kbasep_pm_policy_coarse_demand {
-       int dummy;
-};
-
-extern const struct kbase_pm_policy kbase_pm_coarse_demand_policy_ops;
-
-#endif /* MALI_KBASE_PM_COARSE_DEMAND_H */
diff --git a/midgard/backend/gpu/mali_kbase_pm_defs.h b/midgard/backend/gpu/mali_kbase_pm_defs.h
deleted file mode 100644 (file)
index 6eb1b1c..0000000
+++ /dev/null
@@ -1,481 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2014-2016 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.
- *
- */
-
-
-
-/*
- * Backend-specific Power Manager definitions
- */
-
-#ifndef _KBASE_PM_HWACCESS_DEFS_H_
-#define _KBASE_PM_HWACCESS_DEFS_H_
-
-#include "mali_kbase_pm_ca_fixed.h"
-#if !MALI_CUSTOMER_RELEASE
-#include "mali_kbase_pm_ca_random.h"
-#endif
-
-#include "mali_kbase_pm_always_on.h"
-#include "mali_kbase_pm_coarse_demand.h"
-#include "mali_kbase_pm_demand.h"
-#if !MALI_CUSTOMER_RELEASE
-#include "mali_kbase_pm_demand_always_powered.h"
-#include "mali_kbase_pm_fast_start.h"
-#endif
-
-/* Forward definition - see mali_kbase.h */
-struct kbase_device;
-struct kbase_jd_atom;
-
-/**
- * enum kbase_pm_core_type - The types of core in a GPU.
- *
- * These enumerated values are used in calls to
- * - kbase_pm_get_present_cores()
- * - kbase_pm_get_active_cores()
- * - kbase_pm_get_trans_cores()
- * - kbase_pm_get_ready_cores().
- *
- * They specify which type of core should be acted on.  These values are set in
- * a manner that allows core_type_to_reg() function to be simpler and more
- * efficient.
- *
- * @KBASE_PM_CORE_L2: The L2 cache
- * @KBASE_PM_CORE_SHADER: Shader cores
- * @KBASE_PM_CORE_TILER: Tiler cores
- */
-enum kbase_pm_core_type {
-       KBASE_PM_CORE_L2 = L2_PRESENT_LO,
-       KBASE_PM_CORE_SHADER = SHADER_PRESENT_LO,
-       KBASE_PM_CORE_TILER = TILER_PRESENT_LO
-};
-
-/**
- * struct kbasep_pm_metrics_data - Metrics data collected for use by the power
- *                                 management framework.
- *
- *  @time_period_start: time at which busy/idle measurements started
- *  @time_busy: number of ns the GPU was busy executing jobs since the
- *          @time_period_start timestamp.
- *  @time_idle: number of ns since time_period_start the GPU was not executing
- *          jobs since the @time_period_start timestamp.
- *  @prev_busy: busy time in ns of previous time period.
- *           Updated when metrics are reset.
- *  @prev_idle: idle time in ns of previous time period
- *           Updated when metrics are reset.
- *  @gpu_active: true when the GPU is executing jobs. false when
- *           not. Updated when the job scheduler informs us a job in submitted
- *           or removed from a GPU slot.
- *  @busy_cl: number of ns the GPU was busy executing CL jobs. Note that
- *           if two CL jobs were active for 400ns, this value would be updated
- *           with 800.
- *  @busy_gl: number of ns the GPU was busy executing GL jobs. Note that
- *           if two GL jobs were active for 400ns, this value would be updated
- *           with 800.
- *  @active_cl_ctx: number of CL jobs active on the GPU. Array is per-device.
- *  @active_gl_ctx: number of GL jobs active on the GPU. Array is per-slot. As
- *           GL jobs never run on slot 2 this slot is not recorded.
- *  @lock: spinlock protecting the kbasep_pm_metrics_data structure
- *  @timer: timer to regularly make DVFS decisions based on the power
- *           management metrics.
- *  @timer_active: boolean indicating @timer is running
- *  @platform_data: pointer to data controlled by platform specific code
- *  @kbdev: pointer to kbase device for which metrics are collected
- *
- */
-struct kbasep_pm_metrics_data {
-       ktime_t time_period_start;
-       u32 time_busy;
-       u32 time_idle;
-       u32 prev_busy;
-       u32 prev_idle;
-       bool gpu_active;
-       u32 busy_cl[2];
-       u32 busy_gl;
-       u32 active_cl_ctx[2];
-       u32 active_gl_ctx[2]; /* GL jobs can only run on 2 of the 3 job slots */
-       spinlock_t lock;
-
-#ifdef CONFIG_MALI_MIDGARD_DVFS
-       struct hrtimer timer;
-       bool timer_active;
-#endif
-
-       void *platform_data;
-       struct kbase_device *kbdev;
-};
-
-union kbase_pm_policy_data {
-       struct kbasep_pm_policy_always_on always_on;
-       struct kbasep_pm_policy_coarse_demand coarse_demand;
-       struct kbasep_pm_policy_demand demand;
-#if !MALI_CUSTOMER_RELEASE
-       struct kbasep_pm_policy_demand_always_powered demand_always_powered;
-       struct kbasep_pm_policy_fast_start fast_start;
-#endif
-};
-
-union kbase_pm_ca_policy_data {
-       struct kbasep_pm_ca_policy_fixed fixed;
-#if !MALI_CUSTOMER_RELEASE
-       struct kbasep_pm_ca_policy_random random;
-#endif
-};
-
-/**
- * struct kbase_pm_backend_data - Data stored per device for power management.
- *
- * This structure contains data for the power management framework. There is one
- * instance of this structure per device in the system.
- *
- * @ca_current_policy: The policy that is currently actively controlling core
- *                     availability.
- * @pm_current_policy: The policy that is currently actively controlling the
- *                     power state.
- * @ca_policy_data:    Private data for current CA policy
- * @pm_policy_data:    Private data for current PM policy
- * @ca_in_transition:  Flag indicating when core availability policy is
- *                     transitioning cores. The core availability policy must
- *                     set this when a change in core availability is occurring.
- *                     power_change_lock must be held when accessing this.
- * @reset_done:        Flag when a reset is complete
- * @reset_done_wait:   Wait queue to wait for changes to @reset_done
- * @l2_powered_wait:   Wait queue for whether the l2 cache has been powered as
- *                     requested
- * @l2_powered:        State indicating whether all the l2 caches are powered.
- *                     Non-zero indicates they're *all* powered
- *                     Zero indicates that some (or all) are not powered
- * @gpu_cycle_counter_requests: The reference count of active gpu cycle counter
- *                              users
- * @gpu_cycle_counter_requests_lock: Lock to protect @gpu_cycle_counter_requests
- * @desired_shader_state: A bit mask identifying the shader cores that the
- *                        power policy would like to be on. The current state
- *                        of the cores may be different, but there should be
- *                        transitions in progress that will eventually achieve
- *                        this state (assuming that the policy doesn't change
- *                        its mind in the mean time).
- * @powering_on_shader_state: A bit mask indicating which shader cores are
- *                            currently in a power-on transition
- * @desired_tiler_state: A bit mask identifying the tiler cores that the power
- *                       policy would like to be on. See @desired_shader_state
- * @powering_on_tiler_state: A bit mask indicating which tiler core are
- *                           currently in a power-on transition
- * @powering_on_l2_state: A bit mask indicating which l2-caches are currently
- *                        in a power-on transition
- * @gpu_in_desired_state: This flag is set if the GPU is powered as requested
- *                        by the desired_xxx_state variables
- * @gpu_in_desired_state_wait: Wait queue set when @gpu_in_desired_state != 0
- * @gpu_powered:       Set to true when the GPU is powered and register
- *                     accesses are possible, false otherwise
- * @instr_enabled:     Set to true when instrumentation is enabled,
- *                     false otherwise
- * @cg1_disabled:      Set if the policy wants to keep the second core group
- *                     powered off
- * @driver_ready_for_irqs: Debug state indicating whether sufficient
- *                         initialization of the driver has occurred to handle
- *                         IRQs
- * @gpu_powered_lock:  Spinlock that must be held when writing @gpu_powered or
- *                     accessing @driver_ready_for_irqs
- * @metrics:           Structure to hold metrics for the GPU
- * @gpu_poweroff_pending: number of poweroff timer ticks until the GPU is
- *                        powered off
- * @shader_poweroff_pending_time: number of poweroff timer ticks until shaders
- *                        are powered off
- * @gpu_poweroff_timer: Timer for powering off GPU
- * @gpu_poweroff_wq:   Workqueue to power off GPU on when timer fires
- * @gpu_poweroff_work: Workitem used on @gpu_poweroff_wq
- * @shader_poweroff_pending: Bit mask of shaders to be powered off on next
- *                           timer callback
- * @poweroff_timer_needed: true if the poweroff timer is currently required,
- *                         false otherwise
- * @poweroff_timer_running: true if the poweroff timer is currently running,
- *                          false otherwise
- *                          power_change_lock should be held when accessing,
- *                          unless there is no way the timer can be running (eg
- *                          hrtimer_cancel() was called immediately before)
- * @callback_power_on: Callback when the GPU needs to be turned on. See
- *                     &struct kbase_pm_callback_conf
- * @callback_power_off: Callback when the GPU may be turned off. See
- *                     &struct kbase_pm_callback_conf
- * @callback_power_suspend: Callback when a suspend occurs and the GPU needs to
- *                          be turned off. See &struct kbase_pm_callback_conf
- * @callback_power_resume: Callback when a resume occurs and the GPU needs to
- *                          be turned on. See &struct kbase_pm_callback_conf
- * @callback_power_runtime_on: Callback when the GPU needs to be turned on. See
- *                             &struct kbase_pm_callback_conf
- * @callback_power_runtime_off: Callback when the GPU may be turned off. See
- *                              &struct kbase_pm_callback_conf
- * @callback_power_runtime_idle: Optional callback when the GPU may be idle. See
- *                              &struct kbase_pm_callback_conf
- *
- * Note:
- * During an IRQ, @ca_current_policy or @pm_current_policy can be NULL when the
- * policy is being changed with kbase_pm_ca_set_policy() or
- * kbase_pm_set_policy(). The change is protected under
- * kbase_device.pm.power_change_lock. Direct access to this
- * from IRQ context must therefore check for NULL. If NULL, then
- * kbase_pm_ca_set_policy() or kbase_pm_set_policy() will re-issue the policy
- * functions that would have been done under IRQ.
- */
-struct kbase_pm_backend_data {
-       const struct kbase_pm_ca_policy *ca_current_policy;
-       const struct kbase_pm_policy *pm_current_policy;
-       union kbase_pm_ca_policy_data ca_policy_data;
-       union kbase_pm_policy_data pm_policy_data;
-       bool ca_in_transition;
-       bool reset_done;
-       wait_queue_head_t reset_done_wait;
-       wait_queue_head_t l2_powered_wait;
-       int l2_powered;
-       int gpu_cycle_counter_requests;
-       spinlock_t gpu_cycle_counter_requests_lock;
-
-       u64 desired_shader_state;
-       u64 powering_on_shader_state;
-       u64 desired_tiler_state;
-       u64 powering_on_tiler_state;
-       u64 powering_on_l2_state;
-
-       bool gpu_in_desired_state;
-       wait_queue_head_t gpu_in_desired_state_wait;
-
-       bool gpu_powered;
-
-       bool instr_enabled;
-
-       bool cg1_disabled;
-
-#ifdef CONFIG_MALI_DEBUG
-       bool driver_ready_for_irqs;
-#endif /* CONFIG_MALI_DEBUG */
-
-       spinlock_t gpu_powered_lock;
-
-
-       struct kbasep_pm_metrics_data metrics;
-
-       int gpu_poweroff_pending;
-       int shader_poweroff_pending_time;
-
-       struct hrtimer gpu_poweroff_timer;
-       struct workqueue_struct *gpu_poweroff_wq;
-       struct work_struct gpu_poweroff_work;
-
-       u64 shader_poweroff_pending;
-
-       bool poweroff_timer_needed;
-       bool poweroff_timer_running;
-
-       int (*callback_power_on)(struct kbase_device *kbdev);
-       void (*callback_power_off)(struct kbase_device *kbdev);
-       void (*callback_power_suspend)(struct kbase_device *kbdev);
-       void (*callback_power_resume)(struct kbase_device *kbdev);
-       int (*callback_power_runtime_on)(struct kbase_device *kbdev);
-       void (*callback_power_runtime_off)(struct kbase_device *kbdev);
-       int (*callback_power_runtime_idle)(struct kbase_device *kbdev);
-};
-
-
-/* List of policy IDs */
-enum kbase_pm_policy_id {
-       KBASE_PM_POLICY_ID_DEMAND = 1,
-       KBASE_PM_POLICY_ID_ALWAYS_ON,
-       KBASE_PM_POLICY_ID_COARSE_DEMAND,
-#if !MALI_CUSTOMER_RELEASE
-       KBASE_PM_POLICY_ID_DEMAND_ALWAYS_POWERED,
-       KBASE_PM_POLICY_ID_FAST_START
-#endif
-};
-
-typedef u32 kbase_pm_policy_flags;
-
-/**
- * struct kbase_pm_policy - Power policy structure.
- *
- * Each power policy exposes a (static) instance of this structure which
- * contains function pointers to the policy's methods.
- *
- * @name:               The name of this policy
- * @init:               Function called when the policy is selected
- * @term:               Function called when the policy is unselected
- * @get_core_mask:      Function called to get the current shader core mask
- * @get_core_active:    Function called to get the current overall GPU power
- *                      state
- * @flags:              Field indicating flags for this policy
- * @id:                 Field indicating an ID for this policy. This is not
- *                      necessarily the same as its index in the list returned
- *                      by kbase_pm_list_policies().
- *                      It is used purely for debugging.
- */
-struct kbase_pm_policy {
-       char *name;
-
-       /**
-        * Function called when the policy is selected
-        *
-        * This should initialize the kbdev->pm.pm_policy_data structure. It
-        * should not attempt to make any changes to hardware state.
-        *
-        * It is undefined what state the cores are in when the function is
-        * called.
-        *
-        * @kbdev: The kbase device structure for the device (must be a
-        *         valid pointer)
-        */
-       void (*init)(struct kbase_device *kbdev);
-
-       /**
-        * Function called when the policy is unselected.
-        *
-        * @kbdev: The kbase device structure for the device (must be a
-        *         valid pointer)
-        */
-       void (*term)(struct kbase_device *kbdev);
-
-       /**
-        * Function called to get the current shader core mask
-        *
-        * The returned mask should meet or exceed (kbdev->shader_needed_bitmap
-        * | kbdev->shader_inuse_bitmap).
-        *
-        * @kbdev: The kbase device structure for the device (must be a
-        *         valid pointer)
-        *
-        * Return: The mask of shader cores to be powered
-        */
-       u64 (*get_core_mask)(struct kbase_device *kbdev);
-
-       /**
-        * Function called to get the current overall GPU power state
-        *
-        * This function should consider the state of kbdev->pm.active_count. If
-        * this count is greater than 0 then there is at least one active
-        * context on the device and the GPU should be powered. If it is equal
-        * to 0 then there are no active contexts and the GPU could be powered
-        * off if desired.
-        *
-        * @kbdev: The kbase device structure for the device (must be a
-        *         valid pointer)
-        *
-        * Return: true if the GPU should be powered, false otherwise
-        */
-       bool (*get_core_active)(struct kbase_device *kbdev);
-
-       kbase_pm_policy_flags flags;
-       enum kbase_pm_policy_id id;
-};
-
-
-enum kbase_pm_ca_policy_id {
-       KBASE_PM_CA_POLICY_ID_FIXED = 1,
-       KBASE_PM_CA_POLICY_ID_RANDOM
-};
-
-typedef u32 kbase_pm_ca_policy_flags;
-
-/**
- * struct kbase_pm_ca_policy - Core availability policy structure.
- *
- * Each core availability policy exposes a (static) instance of this structure
- * which contains function pointers to the policy's methods.
- *
- * @name:               The name of this policy
- * @init:               Function called when the policy is selected
- * @term:               Function called when the policy is unselected
- * @get_core_mask:      Function called to get the current shader core
- *                      availability mask
- * @update_core_status: Function called to update the current core status
- * @flags:              Field indicating flags for this policy
- * @id:                 Field indicating an ID for this policy. This is not
- *                      necessarily the same as its index in the list returned
- *                      by kbase_pm_list_policies().
- *                      It is used purely for debugging.
- */
-struct kbase_pm_ca_policy {
-       char *name;
-
-       /**
-        * Function called when the policy is selected
-        *
-        * This should initialize the kbdev->pm.ca_policy_data structure. It
-        * should not attempt to make any changes to hardware state.
-        *
-        * It is undefined what state the cores are in when the function is
-        * called.
-        *
-        * @kbdev The kbase device structure for the device (must be a
-        *        valid pointer)
-        */
-       void (*init)(struct kbase_device *kbdev);
-
-       /**
-        * Function called when the policy is unselected.
-        *
-        * @kbdev The kbase device structure for the device (must be a
-        *        valid pointer)
-        */
-       void (*term)(struct kbase_device *kbdev);
-
-       /**
-        * Function called to get the current shader core availability mask
-        *
-        * When a change in core availability is occurring, the policy must set
-        * kbdev->pm.ca_in_transition to true. This is to indicate that
-        * reporting changes in power state cannot be optimized out, even if
-        * kbdev->pm.desired_shader_state remains unchanged. This must be done
-        * by any functions internal to the Core Availability Policy that change
-        * the return value of kbase_pm_ca_policy::get_core_mask.
-        *
-        * @kbdev The kbase device structure for the device (must be a
-        *              valid pointer)
-        *
-        * Return: The current core availability mask
-        */
-       u64 (*get_core_mask)(struct kbase_device *kbdev);
-
-       /**
-        * Function called to update the current core status
-        *
-        * If none of the cores in core group 0 are ready or transitioning, then
-        * the policy must ensure that the next call to get_core_mask does not
-        * return 0 for all cores in core group 0. It is an error to disable
-        * core group 0 through the core availability policy.
-        *
-        * When a change in core availability has finished, the policy must set
-        * kbdev->pm.ca_in_transition to false. This is to indicate that
-        * changes in power state can once again be optimized out when
-        * kbdev->pm.desired_shader_state is unchanged.
-        *
-        * @kbdev:               The kbase device structure for the device
-        *                       (must be a valid pointer)
-        * @cores_ready:         The mask of cores currently powered and
-        *                       ready to run jobs
-        * @cores_transitioning: The mask of cores currently transitioning
-        *                       power state
-        */
-       void (*update_core_status)(struct kbase_device *kbdev, u64 cores_ready,
-                                               u64 cores_transitioning);
-
-       kbase_pm_ca_policy_flags flags;
-
-       /**
-        * Field indicating an ID for this policy. This is not necessarily the
-        * same as its index in the list returned by kbase_pm_list_policies().
-        * It is used purely for debugging.
-        */
-       enum kbase_pm_ca_policy_id id;
-};
-
-#endif /* _KBASE_PM_HWACCESS_DEFS_H_ */
diff --git a/midgard/backend/gpu/mali_kbase_pm_demand.h b/midgard/backend/gpu/mali_kbase_pm_demand.h
deleted file mode 100644 (file)
index c0c84b6..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2011-2015 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.
- *
- */
-
-
-
-
-
-/*
- * A simple demand based power management policy
- */
-
-#ifndef MALI_KBASE_PM_DEMAND_H
-#define MALI_KBASE_PM_DEMAND_H
-
-/**
- * DOC: Demand power management policy
- *
- * The demand power management policy has the following characteristics:
- * - When KBase indicates that the GPU will be powered up, but we don't yet
- *   know which Job Chains are to be run:
- *  - The Shader Cores are not powered up
- *
- * - When KBase indicates that a set of Shader Cores are needed to submit the
- *   currently queued Job Chains:
- *  - Only those Shader Cores are powered up
- *
- * - When KBase indicates that the GPU need not be powered:
- *  - The Shader Cores are powered off, and the GPU itself is powered off too.
- *
- * Note:
- * - KBase indicates the GPU will be powered up when it has a User Process that
- *   has just started to submit Job Chains.
- *
- * - KBase indicates the GPU need not be powered when all the Job Chains from
- *   User Processes have finished, and it is waiting for a User Process to
- *   submit some more Job Chains.
- */
-
-/**
- * struct kbasep_pm_policy_demand - Private structure for policy instance data
- *
- * @dummy: No state is needed, a dummy variable
- *
- * This contains data that is private to the demand power policy.
- */
-struct kbasep_pm_policy_demand {
-       int dummy;
-};
-
-extern const struct kbase_pm_policy kbase_pm_demand_policy_ops;
-
-#endif /* MALI_KBASE_PM_DEMAND_H */
diff --git a/midgard/backend/gpu/mali_kbase_pm_internal.h b/midgard/backend/gpu/mali_kbase_pm_internal.h
deleted file mode 100644 (file)
index aa51b8c..0000000
+++ /dev/null
@@ -1,523 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2010-2016 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.
- *
- */
-
-
-
-
-
-/*
- * Power management API definitions used internally by GPU backend
- */
-
-#ifndef _KBASE_BACKEND_PM_INTERNAL_H_
-#define _KBASE_BACKEND_PM_INTERNAL_H_
-
-#include <mali_kbase_hwaccess_pm.h>
-
-#include "mali_kbase_pm_ca.h"
-#include "mali_kbase_pm_policy.h"
-
-
-/**
- * kbase_pm_dev_idle - The GPU is idle.
- *
- * The OS may choose to turn off idle devices
- *
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- */
-void kbase_pm_dev_idle(struct kbase_device *kbdev);
-
-/**
- * kbase_pm_dev_activate - The GPU is active.
- *
- * The OS should avoid opportunistically turning off the GPU while it is active
- *
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- */
-void kbase_pm_dev_activate(struct kbase_device *kbdev);
-
-/**
- * kbase_pm_get_present_cores - Get details of the cores that are present in
- *                              the device.
- *
- * This function can be called by the active power policy to return a bitmask of
- * the cores (of a specified type) present in the GPU device and also a count of
- * the number of cores.
- *
- * @kbdev: The kbase device structure for the device (must be a valid
- *         pointer)
- * @type:  The type of core (see the enum kbase_pm_core_type enumeration)
- *
- * Return: The bit mask of cores present
- */
-u64 kbase_pm_get_present_cores(struct kbase_device *kbdev,
-                                               enum kbase_pm_core_type type);
-
-/**
- * kbase_pm_get_active_cores - Get details of the cores that are currently
- *                             active in the device.
- *
- * This function can be called by the active power policy to return a bitmask of
- * the cores (of a specified type) that are actively processing work (i.e.
- * turned on *and* busy).
- *
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- * @type:  The type of core (see the enum kbase_pm_core_type enumeration)
- *
- * Return: The bit mask of active cores
- */
-u64 kbase_pm_get_active_cores(struct kbase_device *kbdev,
-                                               enum kbase_pm_core_type type);
-
-/**
- * kbase_pm_get_trans_cores - Get details of the cores that are currently
- *                            transitioning between power states.
- *
- * This function can be called by the active power policy to return a bitmask of
- * the cores (of a specified type) that are currently transitioning between
- * power states.
- *
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- * @type:  The type of core (see the enum kbase_pm_core_type enumeration)
- *
- * Return: The bit mask of transitioning cores
- */
-u64 kbase_pm_get_trans_cores(struct kbase_device *kbdev,
-                                               enum kbase_pm_core_type type);
-
-/**
- * kbase_pm_get_ready_cores - Get details of the cores that are currently
- *                            powered and ready for jobs.
- *
- * This function can be called by the active power policy to return a bitmask of
- * the cores (of a specified type) that are powered and ready for jobs (they may
- * or may not be currently executing jobs).
- *
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- * @type:  The type of core (see the enum kbase_pm_core_type enumeration)
- *
- * Return: The bit mask of ready cores
- */
-u64 kbase_pm_get_ready_cores(struct kbase_device *kbdev,
-                                               enum kbase_pm_core_type type);
-
-/**
- * kbase_pm_clock_on - Turn the clock for the device on, and enable device
- *                     interrupts.
- *
- * This function can be used by a power policy to turn the clock for the GPU on.
- * It should be modified during integration to perform the necessary actions to
- * ensure that the GPU is fully powered and clocked.
- *
- * @kbdev:     The kbase device structure for the device (must be a valid
- *             pointer)
- * @is_resume: true if clock on due to resume after suspend, false otherwise
- */
-void kbase_pm_clock_on(struct kbase_device *kbdev, bool is_resume);
-
-/**
- * kbase_pm_clock_off - Disable device interrupts, and turn the clock for the
- *                      device off.
- *
- * This function can be used by a power policy to turn the clock for the GPU
- * off. It should be modified during integration to perform the necessary
- * actions to turn the clock off (if this is possible in the integration).
- *
- * @kbdev:      The kbase device structure for the device (must be a valid
- *              pointer)
- * @is_suspend: true if clock off due to suspend, false otherwise
- *
- * Return: true  if clock was turned off, or
- *         false if clock can not be turned off due to pending page/bus fault
- *               workers. Caller must flush MMU workqueues and retry
- */
-bool kbase_pm_clock_off(struct kbase_device *kbdev, bool is_suspend);
-
-/**
- * kbase_pm_enable_interrupts - Enable interrupts on the device.
- *
- * Interrupts are also enabled after a call to kbase_pm_clock_on().
- *
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- */
-void kbase_pm_enable_interrupts(struct kbase_device *kbdev);
-
-/**
- * kbase_pm_disable_interrupts - Disable interrupts on the device.
- *
- * This prevents delivery of Power Management interrupts to the CPU so that
- * kbase_pm_check_transitions_nolock() will not be called from the IRQ handler
- * until kbase_pm_enable_interrupts() or kbase_pm_clock_on() is called.
- *
- * Interrupts are also disabled after a call to kbase_pm_clock_off().
- *
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- */
-void kbase_pm_disable_interrupts(struct kbase_device *kbdev);
-
-/**
- * kbase_pm_init_hw - Initialize the hardware.
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- * @flags: Flags specifying the type of PM init
- *
- * This function checks the GPU ID register to ensure that the GPU is supported
- * by the driver and performs a reset on the device so that it is in a known
- * state before the device is used.
- *
- * Return: 0 if the device is supported and successfully reset.
- */
-int kbase_pm_init_hw(struct kbase_device *kbdev, unsigned int flags);
-
-/**
- * kbase_pm_reset_done - The GPU has been reset successfully.
- *
- * This function must be called by the GPU interrupt handler when the
- * RESET_COMPLETED bit is set. It signals to the power management initialization
- * code that the GPU has been successfully reset.
- *
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- */
-void kbase_pm_reset_done(struct kbase_device *kbdev);
-
-
-/**
- * kbase_pm_check_transitions_nolock - Check if there are any power transitions
- *                                     to make, and if so start them.
- *
- * This function will check the desired_xx_state members of
- * struct kbase_pm_device_data and the actual status of the hardware to see if
- * any power transitions can be made at this time to make the hardware state
- * closer to the state desired by the power policy.
- *
- * The return value can be used to check whether all the desired cores are
- * available, and so whether it's worth submitting a job (e.g. from a Power
- * Management IRQ).
- *
- * Note that this still returns true when desired_xx_state has no
- * cores. That is: of the no cores desired, none were *un*available. In
- * this case, the caller may still need to try submitting jobs. This is because
- * the Core Availability Policy might have taken us to an intermediate state
- * where no cores are powered, before powering on more cores (e.g. for core
- * rotation)
- *
- * The caller must hold kbase_device.pm.power_change_lock
- *
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- *
- * Return:      non-zero when all desired cores are available. That is,
- *              it's worthwhile for the caller to submit a job.
- *              false otherwise
- */
-bool kbase_pm_check_transitions_nolock(struct kbase_device *kbdev);
-
-/**
- * kbase_pm_check_transitions_sync - Synchronous and locking variant of
- *                                   kbase_pm_check_transitions_nolock()
- *
- * On returning, the desired state at the time of the call will have been met.
- *
- * There is nothing to stop the core being switched off by calls to
- * kbase_pm_release_cores() or kbase_pm_unrequest_cores(). Therefore, the
- * caller must have already made a call to
- * kbase_pm_request_cores()/kbase_pm_request_cores_sync() previously.
- *
- * The usual use-case for this is to ensure cores are 'READY' after performing
- * a GPU Reset.
- *
- * Unlike kbase_pm_check_transitions_nolock(), the caller must not hold
- * kbase_device.pm.power_change_lock, because this function will take that
- * lock itself.
- *
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- */
-void kbase_pm_check_transitions_sync(struct kbase_device *kbdev);
-
-/**
- * kbase_pm_update_cores_state_nolock - Variant of kbase_pm_update_cores_state()
- *                                      where the caller must hold
- *                                      kbase_device.pm.power_change_lock
- *
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- */
-void kbase_pm_update_cores_state_nolock(struct kbase_device *kbdev);
-
-/**
- * kbase_pm_update_cores_state - Update the desired state of shader cores from
- *                               the Power Policy, and begin any power
- *                               transitions.
- *
- * This function will update the desired_xx_state members of
- * struct kbase_pm_device_data by calling into the current Power Policy. It will
- * then begin power transitions to make the hardware acheive the desired shader
- * core state.
- *
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- */
-void kbase_pm_update_cores_state(struct kbase_device *kbdev);
-
-/**
- * kbase_pm_cancel_deferred_poweroff - Cancel any pending requests to power off
- *                                     the GPU and/or shader cores.
- *
- * This should be called by any functions which directly power off the GPU.
- *
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- */
-void kbase_pm_cancel_deferred_poweroff(struct kbase_device *kbdev);
-
-/**
- * kbasep_pm_read_present_cores - Read the bitmasks of present cores.
- *
- * This information is cached to avoid having to perform register reads whenever
- * the information is required.
- *
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- */
-void kbasep_pm_read_present_cores(struct kbase_device *kbdev);
-
-/**
- * kbasep_pm_metrics_init - Initialize the metrics gathering framework.
- *
- * This must be called before other metric gathering APIs are called.
- *
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- *
- * Return: 0 on success, error code on error
- */
-int kbasep_pm_metrics_init(struct kbase_device *kbdev);
-
-/**
- * kbasep_pm_metrics_term - Terminate the metrics gathering framework.
- *
- * This must be called when metric gathering is no longer required. It is an
- * error to call any metrics gathering function (other than
- * kbasep_pm_metrics_init()) after calling this function.
- *
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- */
-void kbasep_pm_metrics_term(struct kbase_device *kbdev);
-
-/**
- * kbase_pm_report_vsync - Function to be called by the frame buffer driver to
- *                         update the vsync metric.
- *
- * This function should be called by the frame buffer driver to update whether
- * the system is hitting the vsync target or not. buffer_updated should be true
- * if the vsync corresponded with a new frame being displayed, otherwise it
- * should be false. This function does not need to be called every vsync, but
- * only when the value of @buffer_updated differs from a previous call.
- *
- * @kbdev:          The kbase device structure for the device (must be a
- *                  valid pointer)
- * @buffer_updated: True if the buffer has been updated on this VSync,
- *                  false otherwise
- */
-void kbase_pm_report_vsync(struct kbase_device *kbdev, int buffer_updated);
-
-/**
- * kbase_pm_get_dvfs_action - Determine whether the DVFS system should change
- *                            the clock speed of the GPU.
- *
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- *
- * This function should be called regularly by the DVFS system to check whether
- * the clock speed of the GPU needs updating.
- */
-void kbase_pm_get_dvfs_action(struct kbase_device *kbdev);
-
-/**
- * kbase_pm_request_gpu_cycle_counter - Mark that the GPU cycle counter is
- *                                      needed
- *
- * If the caller is the first caller then the GPU cycle counters will be enabled
- * along with the l2 cache
- *
- * The GPU must be powered when calling this function (i.e.
- * kbase_pm_context_active() must have been called).
- *
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- */
-void kbase_pm_request_gpu_cycle_counter(struct kbase_device *kbdev);
-
-/**
- * kbase_pm_request_gpu_cycle_counter_l2_is_on - Mark GPU cycle counter is
- *                                               needed (l2 cache already on)
- *
- * This is a version of the above function
- * (kbase_pm_request_gpu_cycle_counter()) suitable for being called when the
- * l2 cache is known to be on and assured to be on until the subsequent call of
- * kbase_pm_release_gpu_cycle_counter() such as when a job is submitted. It does
- * not sleep and can be called from atomic functions.
- *
- * The GPU must be powered when calling this function (i.e.
- * kbase_pm_context_active() must have been called) and the l2 cache must be
- * powered on.
- *
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- */
-void kbase_pm_request_gpu_cycle_counter_l2_is_on(struct kbase_device *kbdev);
-
-/**
- * kbase_pm_release_gpu_cycle_counter - Mark that the GPU cycle counter is no
- *                                      longer in use
- *
- * If the caller is the
- * last caller then the GPU cycle counters will be disabled. A request must have
- * been made before a call to this.
- *
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- */
-void kbase_pm_release_gpu_cycle_counter(struct kbase_device *kbdev);
-
-/**
- * kbase_pm_register_access_enable - Enable access to GPU registers
- *
- * Enables access to the GPU registers before power management has powered up
- * the GPU with kbase_pm_powerup().
- *
- * Access to registers should be done using kbase_os_reg_read()/write() at this
- * stage, not kbase_reg_read()/write().
- *
- * This results in the power management callbacks provided in the driver
- * configuration to get called to turn on power and/or clocks to the GPU. See
- * kbase_pm_callback_conf.
- *
- * This should only be used before power management is powered up with
- * kbase_pm_powerup()
- *
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- */
-void kbase_pm_register_access_enable(struct kbase_device *kbdev);
-
-/**
- * kbase_pm_register_access_disable - Disable early register access
- *
- * Disables access to the GPU registers enabled earlier by a call to
- * kbase_pm_register_access_enable().
- *
- * This results in the power management callbacks provided in the driver
- * configuration to get called to turn off power and/or clocks to the GPU. See
- * kbase_pm_callback_conf
- *
- * This should only be used before power management is powered up with
- * kbase_pm_powerup()
- *
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- */
-void kbase_pm_register_access_disable(struct kbase_device *kbdev);
-
-/* NOTE: kbase_pm_is_suspending is in mali_kbase.h, because it is an inline
- * function */
-
-/**
- * kbase_pm_metrics_is_active - Check if the power management metrics
- *                              collection is active.
- *
- * Note that this returns if the power management metrics collection was
- * active at the time of calling, it is possible that after the call the metrics
- * collection enable may have changed state.
- *
- * The caller must handle the consequence that the state may have changed.
- *
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- * Return: true if metrics collection was active else false.
- */
-bool kbase_pm_metrics_is_active(struct kbase_device *kbdev);
-
-/**
- * kbase_pm_do_poweron - Power on the GPU, and any cores that are requested.
- *
- * @kbdev:     The kbase device structure for the device (must be a valid
- *             pointer)
- * @is_resume: true if power on due to resume after suspend,
- *             false otherwise
- */
-void kbase_pm_do_poweron(struct kbase_device *kbdev, bool is_resume);
-
-/**
- * kbase_pm_do_poweroff - Power off the GPU, and any cores that have been
- *                        requested.
- *
- * @kbdev:      The kbase device structure for the device (must be a valid
- *              pointer)
- * @is_suspend: true if power off due to suspend,
- *              false otherwise
- * Return:
- *         true      if power was turned off, else
- *         false     if power can not be turned off due to pending page/bus
- *                   fault workers. Caller must flush MMU workqueues and retry
- */
-bool kbase_pm_do_poweroff(struct kbase_device *kbdev, bool is_suspend);
-
-#ifdef CONFIG_PM_DEVFREQ
-void kbase_pm_get_dvfs_utilisation(struct kbase_device *kbdev,
-               unsigned long *total, unsigned long *busy);
-void kbase_pm_reset_dvfs_utilisation(struct kbase_device *kbdev);
-#endif
-
-#ifdef CONFIG_MALI_MIDGARD_DVFS
-
-/**
- * kbase_platform_dvfs_event - Report utilisation to DVFS code
- *
- * Function provided by platform specific code when DVFS is enabled to allow
- * the power management metrics system to report utilisation.
- *
- * @kbdev:         The kbase device structure for the device (must be a
- *                 valid pointer)
- * @utilisation:   The current calculated utilisation by the metrics system.
- * @util_gl_share: The current calculated gl share of utilisation.
- * @util_cl_share: The current calculated cl share of utilisation per core
- *                 group.
- * Return:         Returns 0 on failure and non zero on success.
- */
-
-int kbase_platform_dvfs_event(struct kbase_device *kbdev, u32 utilisation,
-       u32 util_gl_share, u32 util_cl_share[2]);
-#endif
-
-void kbase_pm_power_changed(struct kbase_device *kbdev);
-
-/**
- * kbase_pm_metrics_update - Inform the metrics system that an atom is either
- *                           about to be run or has just completed.
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- * @now:   Pointer to the timestamp of the change, or NULL to use current time
- *
- * Caller must hold runpool_irq.lock
- */
-void kbase_pm_metrics_update(struct kbase_device *kbdev,
-                               ktime_t *now);
-
-/**
- * kbase_pm_cache_snoop_enable - Allow CPU snoops on the GPU
- * If the GPU does not have coherency this is a no-op
- * @kbdev:     Device pointer
- *
- * This function should be called after L2 power up.
- */
-
-void kbase_pm_cache_snoop_enable(struct kbase_device *kbdev);
-
-/**
- * kbase_pm_cache_snoop_disable - Prevent CPU snoops on the GPU
- * If the GPU does not have coherency this is a no-op
- * @kbdev:     Device pointer
- *
- * This function should be called before L2 power off.
- */
-void kbase_pm_cache_snoop_disable(struct kbase_device *kbdev);
-
-#endif /* _KBASE_BACKEND_PM_INTERNAL_H_ */
diff --git a/midgard/backend/gpu/mali_kbase_pm_policy.h b/midgard/backend/gpu/mali_kbase_pm_policy.h
deleted file mode 100644 (file)
index 611a90e..0000000
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2010-2015 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.
- *
- */
-
-
-
-/*
- * Power policy API definitions
- */
-
-#ifndef _KBASE_PM_POLICY_H_
-#define _KBASE_PM_POLICY_H_
-
-/**
- * kbase_pm_policy_init - Initialize power policy framework
- *
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- *
- * Must be called before calling any other policy function
- *
- * Return: 0 if the power policy framework was successfully
- *         initialized, -errno otherwise.
- */
-int kbase_pm_policy_init(struct kbase_device *kbdev);
-
-/**
- * kbase_pm_policy_term - Terminate power policy framework
- *
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- */
-void kbase_pm_policy_term(struct kbase_device *kbdev);
-
-/**
- * kbase_pm_update_active - Update the active power state of the GPU
- *
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- *
- * Calls into the current power policy
- */
-void kbase_pm_update_active(struct kbase_device *kbdev);
-
-/**
- * kbase_pm_update_cores - Update the desired core state of the GPU
- *
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- *
- * Calls into the current power policy
- */
-void kbase_pm_update_cores(struct kbase_device *kbdev);
-
-
-enum kbase_pm_cores_ready {
-       KBASE_CORES_NOT_READY = 0,
-       KBASE_NEW_AFFINITY = 1,
-       KBASE_CORES_READY = 2
-};
-
-
-/**
- * kbase_pm_request_cores_sync - Synchronous variant of kbase_pm_request_cores()
- *
- * @kbdev:          The kbase device structure for the device
- * @tiler_required: true if the tiler is required, false otherwise
- * @shader_cores:   A bitmask of shader cores which are necessary for the job
- *
- * When this function returns, the @shader_cores will be in the READY state.
- *
- * This is safe variant of kbase_pm_check_transitions_sync(): it handles the
- * work of ensuring the requested cores will remain powered until a matching
- * call to kbase_pm_unrequest_cores()/kbase_pm_release_cores() (as appropriate)
- * is made.
- */
-void kbase_pm_request_cores_sync(struct kbase_device *kbdev,
-                               bool tiler_required, u64 shader_cores);
-
-/**
- * kbase_pm_request_cores - Mark one or more cores as being required
- *                          for jobs to be submitted
- *
- * @kbdev:          The kbase device structure for the device
- * @tiler_required: true if the tiler is required, false otherwise
- * @shader_cores:   A bitmask of shader cores which are necessary for the job
- *
- * This function is called by the job scheduler to mark one or more cores as
- * being required to submit jobs that are ready to run.
- *
- * The cores requested are reference counted and a subsequent call to
- * kbase_pm_register_inuse_cores() or kbase_pm_unrequest_cores() should be
- * made to dereference the cores as being 'needed'.
- *
- * The active power policy will meet or exceed the requirements of the
- * requested cores in the system. Any core transitions needed will be begun
- * immediately, but they might not complete/the cores might not be available
- * until a Power Management IRQ.
- *
- * Return: 0 if the cores were successfully requested, or -errno otherwise.
- */
-void kbase_pm_request_cores(struct kbase_device *kbdev,
-                               bool tiler_required, u64 shader_cores);
-
-/**
- * kbase_pm_unrequest_cores - Unmark one or more cores as being required for
- *                            jobs to be submitted.
- *
- * @kbdev:          The kbase device structure for the device
- * @tiler_required: true if the tiler is required, false otherwise
- * @shader_cores:   A bitmask of shader cores (as given to
- *                  kbase_pm_request_cores() )
- *
- * This function undoes the effect of kbase_pm_request_cores(). It should be
- * used when a job is not going to be submitted to the hardware (e.g. the job is
- * cancelled before it is enqueued).
- *
- * The active power policy will meet or exceed the requirements of the
- * requested cores in the system. Any core transitions needed will be begun
- * immediately, but they might not complete until a Power Management IRQ.
- *
- * The policy may use this as an indication that it can power down cores.
- */
-void kbase_pm_unrequest_cores(struct kbase_device *kbdev,
-                               bool tiler_required, u64 shader_cores);
-
-/**
- * kbase_pm_register_inuse_cores - Register a set of cores as in use by a job
- *
- * @kbdev:          The kbase device structure for the device
- * @tiler_required: true if the tiler is required, false otherwise
- * @shader_cores:   A bitmask of shader cores (as given to
- *                  kbase_pm_request_cores() )
- *
- * This function should be called after kbase_pm_request_cores() when the job
- * is about to be submitted to the hardware. It will check that the necessary
- * cores are available and if so update the 'needed' and 'inuse' bitmasks to
- * reflect that the job is now committed to being run.
- *
- * If the necessary cores are not currently available then the function will
- * return %KBASE_CORES_NOT_READY and have no effect.
- *
- * Return: %KBASE_CORES_NOT_READY if the cores are not immediately ready,
- *
- *         %KBASE_NEW_AFFINITY if the affinity requested is not allowed,
- *
- *         %KBASE_CORES_READY if the cores requested are already available
- */
-enum kbase_pm_cores_ready kbase_pm_register_inuse_cores(
-                                               struct kbase_device *kbdev,
-                                               bool tiler_required,
-                                               u64 shader_cores);
-
-/**
- * kbase_pm_release_cores - Release cores after a job has run
- *
- * @kbdev:          The kbase device structure for the device
- * @tiler_required: true if the tiler is required, false otherwise
- * @shader_cores:   A bitmask of shader cores (as given to
- *                  kbase_pm_register_inuse_cores() )
- *
- * This function should be called when a job has finished running on the
- * hardware. A call to kbase_pm_register_inuse_cores() must have previously
- * occurred. The reference counts of the specified cores will be decremented
- * which may cause the bitmask of 'inuse' cores to be reduced. The power policy
- * may then turn off any cores which are no longer 'inuse'.
- */
-void kbase_pm_release_cores(struct kbase_device *kbdev,
-                               bool tiler_required, u64 shader_cores);
-
-/**
- * kbase_pm_request_l2_caches - Request l2 caches
- *
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- *
- * Request the use of l2 caches for all core groups, power up, wait and prevent
- * the power manager from powering down the l2 caches.
- *
- * This tells the power management that the caches should be powered up, and
- * they should remain powered, irrespective of the usage of shader cores. This
- * does not return until the l2 caches are powered up.
- *
- * The caller must call kbase_pm_release_l2_caches() when they are finished
- * to allow normal power management of the l2 caches to resume.
- *
- * This should only be used when power management is active.
- */
-void kbase_pm_request_l2_caches(struct kbase_device *kbdev);
-
-/**
- * kbase_pm_request_l2_caches_l2_is_on - Request l2 caches but don't power on
- *
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- *
- * Increment the count of l2 users but do not attempt to power on the l2
- *
- * It is the callers responsibility to ensure that the l2 is already powered up
- * and to eventually call kbase_pm_release_l2_caches()
- */
-void kbase_pm_request_l2_caches_l2_is_on(struct kbase_device *kbdev);
-
-/**
- * kbase_pm_request_l2_caches - Release l2 caches
- *
- * @kbdev: The kbase device structure for the device (must be a valid pointer)
- *
- * Release the use of l2 caches for all core groups and allow the power manager
- * to power them down when necessary.
- *
- * This tells the power management that the caches can be powered down if
- * necessary, with respect to the usage of shader cores.
- *
- * The caller must have called kbase_pm_request_l2_caches() prior to a call
- * to this.
- *
- * This should only be used when power management is active.
- */
-void kbase_pm_release_l2_caches(struct kbase_device *kbdev);
-
-#endif /* _KBASE_PM_POLICY_H_ */
diff --git a/midgard/backend/gpu/mali_kbase_power_model_simple.h b/midgard/backend/gpu/mali_kbase_power_model_simple.h
deleted file mode 100644 (file)
index d20de1e..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2014-2015 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.
- *
- */
-
-
-
-#ifndef _BASE_POWER_MODEL_SIMPLE_H_
-#define _BASE_POWER_MODEL_SIMPLE_H_
-
-/**
- * kbase_power_model_simple_init - Initialise the simple power model
- * @kbdev: Device pointer
- *
- * The simple power model estimates power based on current voltage, temperature,
- * and coefficients read from device tree. It does not take utilization into
- * account.
- *
- * The power model requires coefficients from the power_model node in device
- * tree. The absence of this node will prevent the model from functioning, but
- * should not prevent the rest of the driver from running.
- *
- * Return: 0 on success
- *         -ENOSYS if the power_model node is not present in device tree
- *         -EPROBE_DEFER if the thermal zone specified in device tree is not
- *         currently available
- *         Any other negative value on failure
- */
-int kbase_power_model_simple_init(struct kbase_device *kbdev);
-
-extern struct devfreq_cooling_ops power_model_simple_ops;
-
-#endif /* _BASE_POWER_MODEL_SIMPLE_H_ */
diff --git a/midgard/backend/gpu/mali_kbase_time.h b/midgard/backend/gpu/mali_kbase_time.h
deleted file mode 100644 (file)
index 35088ab..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2014-2015 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.
- *
- */
-
-
-
-#ifndef _KBASE_BACKEND_TIME_H_
-#define _KBASE_BACKEND_TIME_H_
-
-/**
- * kbase_backend_get_gpu_time() - Get current GPU time
- * @kbdev:             Device pointer
- * @cycle_counter:     Pointer to u64 to store cycle counter in
- * @system_time:       Pointer to u64 to store system time in
- * @ts:                        Pointer to struct timespec to store current monotonic
- *                     time in
- */
-void kbase_backend_get_gpu_time(struct kbase_device *kbdev, u64 *cycle_counter,
-                               u64 *system_time, struct timespec *ts);
-
-/**
- * kbase_wait_write_flush() -  Wait for GPU write flush
- * @kctx:      Context pointer
- *
- * Wait 1000 GPU clock cycles. This delay is known to give the GPU time to flush
- * its write buffer.
- *
- * If GPU resets occur then the counters are reset to zero, the delay may not be
- * as expected.
- *
- * This function is only in use for BASE_HW_ISSUE_6367
- */
-#ifdef CONFIG_MALI_NO_MALI
-static inline void kbase_wait_write_flush(struct kbase_context *kctx)
-{
-}
-#else
-void kbase_wait_write_flush(struct kbase_context *kctx);
-#endif
-
-#endif /* _KBASE_BACKEND_TIME_H_ */
diff --git a/midgard/config.h b/midgard/config.h
deleted file mode 100644 (file)
index f8fd1dd..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#define CONFIG_MALI_MIDGARD m
-#define CONFIG_MALI_MIDGARD_MODULE
-#define CONFIG_MALI_DEVFREQ
-#define CONFIG_MALI_DMA_FENCE
-#define CONFIG_MALI_EXPERT
diff --git a/midgard/mali_base_hwconfig_features.h b/midgard/mali_base_hwconfig_features.h
deleted file mode 100644 (file)
index a6e08da..0000000
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2015-2016 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.
- *
- */
-
-
-
-/* AUTOMATICALLY GENERATED FILE. If you want to amend the issues/features,
- * please update base/tools/hwconfig_generator/hwc_{issues,features}.py
- * For more information see base/tools/hwconfig_generator/README
- */
-
-#ifndef _BASE_HWCONFIG_FEATURES_H_
-#define _BASE_HWCONFIG_FEATURES_H_
-
-enum base_hw_feature {
-       BASE_HW_FEATURE_JOBCHAIN_DISAMBIGUATION,
-       BASE_HW_FEATURE_PWRON_DURING_PWROFF_TRANS,
-       BASE_HW_FEATURE_33BIT_VA,
-       BASE_HW_FEATURE_OUT_OF_ORDER_EXEC,
-       BASE_HW_FEATURE_MRT,
-       BASE_HW_FEATURE_BRNDOUT_CC,
-       BASE_HW_FEATURE_INTERPIPE_REG_ALIASING,
-       BASE_HW_FEATURE_LD_ST_TILEBUFFER,
-       BASE_HW_FEATURE_MSAA_16X,
-       BASE_HW_FEATURE_32_BIT_UNIFORM_ADDRESS,
-       BASE_HW_FEATURE_ATTR_AUTO_TYPE_INFERRAL,
-       BASE_HW_FEATURE_OPTIMIZED_COVERAGE_MASK,
-       BASE_HW_FEATURE_T7XX_PAIRING_RULES,
-       BASE_HW_FEATURE_LD_ST_LEA_TEX,
-       BASE_HW_FEATURE_LINEAR_FILTER_FLOAT,
-       BASE_HW_FEATURE_WORKGROUP_ROUND_MULTIPLE_OF_4,
-       BASE_HW_FEATURE_IMAGES_IN_FRAGMENT_SHADERS,
-       BASE_HW_FEATURE_TEST4_DATUM_MODE,
-       BASE_HW_FEATURE_NEXT_INSTRUCTION_TYPE,
-       BASE_HW_FEATURE_BRNDOUT_KILL,
-       BASE_HW_FEATURE_WARPING,
-       BASE_HW_FEATURE_V4,
-       BASE_HW_FEATURE_FLUSH_REDUCTION,
-       BASE_HW_FEATURE_PROTECTED_MODE,
-       BASE_HW_FEATURE_COHERENCY_REG,
-       BASE_HW_FEATURE_END
-};
-
-static const enum base_hw_feature base_hw_features_generic[] = {
-       BASE_HW_FEATURE_END
-};
-
-static const enum base_hw_feature base_hw_features_t60x[] = {
-       BASE_HW_FEATURE_LD_ST_LEA_TEX,
-       BASE_HW_FEATURE_LINEAR_FILTER_FLOAT,
-       BASE_HW_FEATURE_V4,
-       BASE_HW_FEATURE_END
-};
-
-static const enum base_hw_feature base_hw_features_t62x[] = {
-       BASE_HW_FEATURE_LD_ST_LEA_TEX,
-       BASE_HW_FEATURE_LINEAR_FILTER_FLOAT,
-       BASE_HW_FEATURE_ATTR_AUTO_TYPE_INFERRAL,
-       BASE_HW_FEATURE_V4,
-       BASE_HW_FEATURE_END
-};
-
-static const enum base_hw_feature base_hw_features_t72x[] = {
-       BASE_HW_FEATURE_33BIT_VA,
-       BASE_HW_FEATURE_32_BIT_UNIFORM_ADDRESS,
-       BASE_HW_FEATURE_ATTR_AUTO_TYPE_INFERRAL,
-       BASE_HW_FEATURE_INTERPIPE_REG_ALIASING,
-       BASE_HW_FEATURE_OPTIMIZED_COVERAGE_MASK,
-       BASE_HW_FEATURE_T7XX_PAIRING_RULES,
-       BASE_HW_FEATURE_WORKGROUP_ROUND_MULTIPLE_OF_4,
-       BASE_HW_FEATURE_WARPING,
-       BASE_HW_FEATURE_V4,
-       BASE_HW_FEATURE_END
-};
-
-static const enum base_hw_feature base_hw_features_t76x[] = {
-       BASE_HW_FEATURE_JOBCHAIN_DISAMBIGUATION,
-       BASE_HW_FEATURE_PWRON_DURING_PWROFF_TRANS,
-       BASE_HW_FEATURE_32_BIT_UNIFORM_ADDRESS,
-       BASE_HW_FEATURE_ATTR_AUTO_TYPE_INFERRAL,
-       BASE_HW_FEATURE_BRNDOUT_CC,
-       BASE_HW_FEATURE_LD_ST_LEA_TEX,
-       BASE_HW_FEATURE_LD_ST_TILEBUFFER,
-       BASE_HW_FEATURE_LINEAR_FILTER_FLOAT,
-       BASE_HW_FEATURE_MRT,
-       BASE_HW_FEATURE_MSAA_16X,
-       BASE_HW_FEATURE_OUT_OF_ORDER_EXEC,
-       BASE_HW_FEATURE_T7XX_PAIRING_RULES,
-       BASE_HW_FEATURE_TEST4_DATUM_MODE,
-       BASE_HW_FEATURE_END
-};
-
-static const enum base_hw_feature base_hw_features_tFxx[] = {
-       BASE_HW_FEATURE_JOBCHAIN_DISAMBIGUATION,
-       BASE_HW_FEATURE_PWRON_DURING_PWROFF_TRANS,
-       BASE_HW_FEATURE_32_BIT_UNIFORM_ADDRESS,
-       BASE_HW_FEATURE_ATTR_AUTO_TYPE_INFERRAL,
-       BASE_HW_FEATURE_BRNDOUT_CC,
-       BASE_HW_FEATURE_BRNDOUT_KILL,
-       BASE_HW_FEATURE_LD_ST_LEA_TEX,
-       BASE_HW_FEATURE_LD_ST_TILEBUFFER,
-       BASE_HW_FEATURE_LINEAR_FILTER_FLOAT,
-       BASE_HW_FEATURE_MRT,
-       BASE_HW_FEATURE_MSAA_16X,
-       BASE_HW_FEATURE_NEXT_INSTRUCTION_TYPE,
-       BASE_HW_FEATURE_OUT_OF_ORDER_EXEC,
-       BASE_HW_FEATURE_T7XX_PAIRING_RULES,
-       BASE_HW_FEATURE_TEST4_DATUM_MODE,
-       BASE_HW_FEATURE_END
-};
-
-static const enum base_hw_feature base_hw_features_t83x[] = {
-       BASE_HW_FEATURE_33BIT_VA,
-       BASE_HW_FEATURE_JOBCHAIN_DISAMBIGUATION,
-       BASE_HW_FEATURE_PWRON_DURING_PWROFF_TRANS,
-       BASE_HW_FEATURE_WARPING,
-       BASE_HW_FEATURE_INTERPIPE_REG_ALIASING,
-       BASE_HW_FEATURE_32_BIT_UNIFORM_ADDRESS,
-       BASE_HW_FEATURE_ATTR_AUTO_TYPE_INFERRAL,
-       BASE_HW_FEATURE_BRNDOUT_CC,
-       BASE_HW_FEATURE_BRNDOUT_KILL,
-       BASE_HW_FEATURE_LD_ST_LEA_TEX,
-       BASE_HW_FEATURE_LD_ST_TILEBUFFER,
-       BASE_HW_FEATURE_LINEAR_FILTER_FLOAT,
-       BASE_HW_FEATURE_MRT,
-       BASE_HW_FEATURE_NEXT_INSTRUCTION_TYPE,
-       BASE_HW_FEATURE_OUT_OF_ORDER_EXEC,
-       BASE_HW_FEATURE_T7XX_PAIRING_RULES,
-       BASE_HW_FEATURE_TEST4_DATUM_MODE,
-       BASE_HW_FEATURE_END
-};
-
-static const enum base_hw_feature base_hw_features_t82x[] = {
-       BASE_HW_FEATURE_33BIT_VA,
-       BASE_HW_FEATURE_JOBCHAIN_DISAMBIGUATION,
-       BASE_HW_FEATURE_PWRON_DURING_PWROFF_TRANS,
-       BASE_HW_FEATURE_WARPING,
-       BASE_HW_FEATURE_INTERPIPE_REG_ALIASING,
-       BASE_HW_FEATURE_32_BIT_UNIFORM_ADDRESS,
-       BASE_HW_FEATURE_ATTR_AUTO_TYPE_INFERRAL,
-       BASE_HW_FEATURE_BRNDOUT_CC,
-       BASE_HW_FEATURE_BRNDOUT_KILL,
-       BASE_HW_FEATURE_LD_ST_LEA_TEX,
-       BASE_HW_FEATURE_LD_ST_TILEBUFFER,
-       BASE_HW_FEATURE_LINEAR_FILTER_FLOAT,
-       BASE_HW_FEATURE_MRT,
-       BASE_HW_FEATURE_NEXT_INSTRUCTION_TYPE,
-       BASE_HW_FEATURE_OUT_OF_ORDER_EXEC,
-       BASE_HW_FEATURE_T7XX_PAIRING_RULES,
-       BASE_HW_FEATURE_TEST4_DATUM_MODE,
-       BASE_HW_FEATURE_END
-};
-
-static const enum base_hw_feature base_hw_features_tMIx[] = {
-       BASE_HW_FEATURE_JOBCHAIN_DISAMBIGUATION,
-       BASE_HW_FEATURE_PWRON_DURING_PWROFF_TRANS,
-       BASE_HW_FEATURE_WARPING,
-       BASE_HW_FEATURE_INTERPIPE_REG_ALIASING,
-       BASE_HW_FEATURE_32_BIT_UNIFORM_ADDRESS,
-       BASE_HW_FEATURE_ATTR_AUTO_TYPE_INFERRAL,
-       BASE_HW_FEATURE_BRNDOUT_CC,
-       BASE_HW_FEATURE_BRNDOUT_KILL,
-       BASE_HW_FEATURE_LD_ST_LEA_TEX,
-       BASE_HW_FEATURE_LD_ST_TILEBUFFER,
-       BASE_HW_FEATURE_LINEAR_FILTER_FLOAT,
-       BASE_HW_FEATURE_MRT,
-       BASE_HW_FEATURE_MSAA_16X,
-       BASE_HW_FEATURE_NEXT_INSTRUCTION_TYPE,
-       BASE_HW_FEATURE_OUT_OF_ORDER_EXEC,
-       BASE_HW_FEATURE_T7XX_PAIRING_RULES,
-       BASE_HW_FEATURE_TEST4_DATUM_MODE,
-       BASE_HW_FEATURE_FLUSH_REDUCTION,
-       BASE_HW_FEATURE_PROTECTED_MODE,
-       BASE_HW_FEATURE_COHERENCY_REG,
-       BASE_HW_FEATURE_END
-};
-
-
-
-#endif /* _BASE_HWCONFIG_FEATURES_H_ */
diff --git a/midgard/mali_base_hwconfig_issues.h b/midgard/mali_base_hwconfig_issues.h
deleted file mode 100644 (file)
index 55e5e5a..0000000
+++ /dev/null
@@ -1,945 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2015-2016 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.
- *
- */
-
-
-
-/* AUTOMATICALLY GENERATED FILE. If you want to amend the issues/features,
- * please update base/tools/hwconfig_generator/hwc_{issues,features}.py
- * For more information see base/tools/hwconfig_generator/README
- */
-
-#ifndef _BASE_HWCONFIG_ISSUES_H_
-#define _BASE_HWCONFIG_ISSUES_H_
-
-enum base_hw_issue {
-       BASE_HW_ISSUE_5736,
-       BASE_HW_ISSUE_6367,
-       BASE_HW_ISSUE_6398,
-       BASE_HW_ISSUE_6402,
-       BASE_HW_ISSUE_6787,
-       BASE_HW_ISSUE_7027,
-       BASE_HW_ISSUE_7144,
-       BASE_HW_ISSUE_7304,
-       BASE_HW_ISSUE_8073,
-       BASE_HW_ISSUE_8186,
-       BASE_HW_ISSUE_8215,
-       BASE_HW_ISSUE_8245,
-       BASE_HW_ISSUE_8250,
-       BASE_HW_ISSUE_8260,
-       BASE_HW_ISSUE_8280,
-       BASE_HW_ISSUE_8316,
-       BASE_HW_ISSUE_8381,
-       BASE_HW_ISSUE_8394,
-       BASE_HW_ISSUE_8401,
-       BASE_HW_ISSUE_8408,
-       BASE_HW_ISSUE_8443,
-       BASE_HW_ISSUE_8456,
-       BASE_HW_ISSUE_8564,
-       BASE_HW_ISSUE_8634,
-       BASE_HW_ISSUE_8778,
-       BASE_HW_ISSUE_8791,
-       BASE_HW_ISSUE_8833,
-       BASE_HW_ISSUE_8879,
-       BASE_HW_ISSUE_8896,
-       BASE_HW_ISSUE_8975,
-       BASE_HW_ISSUE_8986,
-       BASE_HW_ISSUE_8987,
-       BASE_HW_ISSUE_9010,
-       BASE_HW_ISSUE_9418,
-       BASE_HW_ISSUE_9423,
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_9510,
-       BASE_HW_ISSUE_9566,
-       BASE_HW_ISSUE_9630,
-       BASE_HW_ISSUE_10127,
-       BASE_HW_ISSUE_10327,
-       BASE_HW_ISSUE_10410,
-       BASE_HW_ISSUE_10471,
-       BASE_HW_ISSUE_10472,
-       BASE_HW_ISSUE_10487,
-       BASE_HW_ISSUE_10607,
-       BASE_HW_ISSUE_10632,
-       BASE_HW_ISSUE_10676,
-       BASE_HW_ISSUE_10682,
-       BASE_HW_ISSUE_10684,
-       BASE_HW_ISSUE_10797,
-       BASE_HW_ISSUE_10817,
-       BASE_HW_ISSUE_10821,
-       BASE_HW_ISSUE_10883,
-       BASE_HW_ISSUE_10931,
-       BASE_HW_ISSUE_10946,
-       BASE_HW_ISSUE_10959,
-       BASE_HW_ISSUE_10969,
-       BASE_HW_ISSUE_10984,
-       BASE_HW_ISSUE_10995,
-       BASE_HW_ISSUE_11012,
-       BASE_HW_ISSUE_11020,
-       BASE_HW_ISSUE_11024,
-       BASE_HW_ISSUE_11035,
-       BASE_HW_ISSUE_11042,
-       BASE_HW_ISSUE_11051,
-       BASE_HW_ISSUE_11054,
-       BASE_HW_ISSUE_T76X_26,
-       BASE_HW_ISSUE_T76X_1909,
-       BASE_HW_ISSUE_T76X_1963,
-       BASE_HW_ISSUE_T76X_3086,
-       BASE_HW_ISSUE_T76X_3542,
-       BASE_HW_ISSUE_T76X_3556,
-       BASE_HW_ISSUE_T76X_3700,
-       BASE_HW_ISSUE_T76X_3793,
-       BASE_HW_ISSUE_T76X_3953,
-       BASE_HW_ISSUE_T76X_3960,
-       BASE_HW_ISSUE_T76X_3964,
-       BASE_HW_ISSUE_T76X_3966,
-       BASE_HW_ISSUE_T76X_3979,
-       BASE_HW_ISSUE_TMIX_7891,
-       BASE_HW_ISSUE_TMIX_7940,
-       BASE_HW_ISSUE_TMIX_8042,
-       BASE_HW_ISSUE_TMIX_8133,
-       BASE_HW_ISSUE_TMIX_8138,
-       BASE_HW_ISSUE_TMIX_8206,
-       GPUCORE_1619,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_generic[] = {
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_t60x_r0p0_15dev0[] = {
-       BASE_HW_ISSUE_6367,
-       BASE_HW_ISSUE_6398,
-       BASE_HW_ISSUE_6402,
-       BASE_HW_ISSUE_6787,
-       BASE_HW_ISSUE_7027,
-       BASE_HW_ISSUE_7144,
-       BASE_HW_ISSUE_7304,
-       BASE_HW_ISSUE_8073,
-       BASE_HW_ISSUE_8186,
-       BASE_HW_ISSUE_8215,
-       BASE_HW_ISSUE_8245,
-       BASE_HW_ISSUE_8250,
-       BASE_HW_ISSUE_8260,
-       BASE_HW_ISSUE_8280,
-       BASE_HW_ISSUE_8316,
-       BASE_HW_ISSUE_8381,
-       BASE_HW_ISSUE_8394,
-       BASE_HW_ISSUE_8401,
-       BASE_HW_ISSUE_8408,
-       BASE_HW_ISSUE_8443,
-       BASE_HW_ISSUE_8456,
-       BASE_HW_ISSUE_8564,
-       BASE_HW_ISSUE_8634,
-       BASE_HW_ISSUE_8778,
-       BASE_HW_ISSUE_8791,
-       BASE_HW_ISSUE_8833,
-       BASE_HW_ISSUE_8896,
-       BASE_HW_ISSUE_8975,
-       BASE_HW_ISSUE_8986,
-       BASE_HW_ISSUE_8987,
-       BASE_HW_ISSUE_9010,
-       BASE_HW_ISSUE_9418,
-       BASE_HW_ISSUE_9423,
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_9510,
-       BASE_HW_ISSUE_9566,
-       BASE_HW_ISSUE_9630,
-       BASE_HW_ISSUE_10410,
-       BASE_HW_ISSUE_10471,
-       BASE_HW_ISSUE_10472,
-       BASE_HW_ISSUE_10487,
-       BASE_HW_ISSUE_10607,
-       BASE_HW_ISSUE_10632,
-       BASE_HW_ISSUE_10676,
-       BASE_HW_ISSUE_10682,
-       BASE_HW_ISSUE_10684,
-       BASE_HW_ISSUE_10883,
-       BASE_HW_ISSUE_10931,
-       BASE_HW_ISSUE_10946,
-       BASE_HW_ISSUE_10969,
-       BASE_HW_ISSUE_10984,
-       BASE_HW_ISSUE_10995,
-       BASE_HW_ISSUE_11012,
-       BASE_HW_ISSUE_11020,
-       BASE_HW_ISSUE_11035,
-       BASE_HW_ISSUE_11051,
-       BASE_HW_ISSUE_11054,
-       BASE_HW_ISSUE_T76X_1909,
-       BASE_HW_ISSUE_T76X_3964,
-       GPUCORE_1619,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_t60x_r0p0_eac[] = {
-       BASE_HW_ISSUE_6367,
-       BASE_HW_ISSUE_6402,
-       BASE_HW_ISSUE_6787,
-       BASE_HW_ISSUE_7027,
-       BASE_HW_ISSUE_7304,
-       BASE_HW_ISSUE_8408,
-       BASE_HW_ISSUE_8564,
-       BASE_HW_ISSUE_8778,
-       BASE_HW_ISSUE_8975,
-       BASE_HW_ISSUE_9010,
-       BASE_HW_ISSUE_9418,
-       BASE_HW_ISSUE_9423,
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_9510,
-       BASE_HW_ISSUE_10410,
-       BASE_HW_ISSUE_10471,
-       BASE_HW_ISSUE_10472,
-       BASE_HW_ISSUE_10487,
-       BASE_HW_ISSUE_10607,
-       BASE_HW_ISSUE_10632,
-       BASE_HW_ISSUE_10676,
-       BASE_HW_ISSUE_10682,
-       BASE_HW_ISSUE_10684,
-       BASE_HW_ISSUE_10883,
-       BASE_HW_ISSUE_10931,
-       BASE_HW_ISSUE_10946,
-       BASE_HW_ISSUE_10969,
-       BASE_HW_ISSUE_11012,
-       BASE_HW_ISSUE_11020,
-       BASE_HW_ISSUE_11035,
-       BASE_HW_ISSUE_11051,
-       BASE_HW_ISSUE_11054,
-       BASE_HW_ISSUE_T76X_1909,
-       BASE_HW_ISSUE_T76X_3964,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_t60x_r0p1[] = {
-       BASE_HW_ISSUE_6367,
-       BASE_HW_ISSUE_6402,
-       BASE_HW_ISSUE_6787,
-       BASE_HW_ISSUE_7027,
-       BASE_HW_ISSUE_7304,
-       BASE_HW_ISSUE_8408,
-       BASE_HW_ISSUE_8564,
-       BASE_HW_ISSUE_8778,
-       BASE_HW_ISSUE_8975,
-       BASE_HW_ISSUE_9010,
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_9510,
-       BASE_HW_ISSUE_10410,
-       BASE_HW_ISSUE_10471,
-       BASE_HW_ISSUE_10472,
-       BASE_HW_ISSUE_10487,
-       BASE_HW_ISSUE_10607,
-       BASE_HW_ISSUE_10632,
-       BASE_HW_ISSUE_10676,
-       BASE_HW_ISSUE_10682,
-       BASE_HW_ISSUE_10684,
-       BASE_HW_ISSUE_10883,
-       BASE_HW_ISSUE_10931,
-       BASE_HW_ISSUE_10946,
-       BASE_HW_ISSUE_11012,
-       BASE_HW_ISSUE_11020,
-       BASE_HW_ISSUE_11035,
-       BASE_HW_ISSUE_11051,
-       BASE_HW_ISSUE_11054,
-       BASE_HW_ISSUE_T76X_1909,
-       BASE_HW_ISSUE_T76X_1963,
-       BASE_HW_ISSUE_T76X_3964,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_t62x_r0p1[] = {
-       BASE_HW_ISSUE_6402,
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_10127,
-       BASE_HW_ISSUE_10327,
-       BASE_HW_ISSUE_10410,
-       BASE_HW_ISSUE_10471,
-       BASE_HW_ISSUE_10472,
-       BASE_HW_ISSUE_10487,
-       BASE_HW_ISSUE_10607,
-       BASE_HW_ISSUE_10632,
-       BASE_HW_ISSUE_10676,
-       BASE_HW_ISSUE_10682,
-       BASE_HW_ISSUE_10684,
-       BASE_HW_ISSUE_10817,
-       BASE_HW_ISSUE_10821,
-       BASE_HW_ISSUE_10883,
-       BASE_HW_ISSUE_10931,
-       BASE_HW_ISSUE_10946,
-       BASE_HW_ISSUE_10959,
-       BASE_HW_ISSUE_11012,
-       BASE_HW_ISSUE_11020,
-       BASE_HW_ISSUE_11024,
-       BASE_HW_ISSUE_11035,
-       BASE_HW_ISSUE_11042,
-       BASE_HW_ISSUE_11051,
-       BASE_HW_ISSUE_11054,
-       BASE_HW_ISSUE_T76X_1909,
-       BASE_HW_ISSUE_T76X_1963,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_t62x_r1p0[] = {
-       BASE_HW_ISSUE_6402,
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_10471,
-       BASE_HW_ISSUE_10472,
-       BASE_HW_ISSUE_10684,
-       BASE_HW_ISSUE_10821,
-       BASE_HW_ISSUE_10883,
-       BASE_HW_ISSUE_10931,
-       BASE_HW_ISSUE_10946,
-       BASE_HW_ISSUE_10959,
-       BASE_HW_ISSUE_11012,
-       BASE_HW_ISSUE_11020,
-       BASE_HW_ISSUE_11024,
-       BASE_HW_ISSUE_11042,
-       BASE_HW_ISSUE_11051,
-       BASE_HW_ISSUE_11054,
-       BASE_HW_ISSUE_T76X_1909,
-       BASE_HW_ISSUE_T76X_1963,
-       BASE_HW_ISSUE_T76X_3964,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_t62x_r1p1[] = {
-       BASE_HW_ISSUE_6402,
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_10471,
-       BASE_HW_ISSUE_10472,
-       BASE_HW_ISSUE_10684,
-       BASE_HW_ISSUE_10821,
-       BASE_HW_ISSUE_10883,
-       BASE_HW_ISSUE_10931,
-       BASE_HW_ISSUE_10946,
-       BASE_HW_ISSUE_10959,
-       BASE_HW_ISSUE_11012,
-       BASE_HW_ISSUE_11042,
-       BASE_HW_ISSUE_11051,
-       BASE_HW_ISSUE_11054,
-       BASE_HW_ISSUE_T76X_1909,
-       BASE_HW_ISSUE_T76X_1963,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_t76x_r0p0[] = {
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_10821,
-       BASE_HW_ISSUE_10883,
-       BASE_HW_ISSUE_10946,
-       BASE_HW_ISSUE_11020,
-       BASE_HW_ISSUE_11024,
-       BASE_HW_ISSUE_11042,
-       BASE_HW_ISSUE_11051,
-       BASE_HW_ISSUE_11054,
-       BASE_HW_ISSUE_T76X_26,
-       BASE_HW_ISSUE_T76X_1909,
-       BASE_HW_ISSUE_T76X_1963,
-       BASE_HW_ISSUE_T76X_3086,
-       BASE_HW_ISSUE_T76X_3542,
-       BASE_HW_ISSUE_T76X_3556,
-       BASE_HW_ISSUE_T76X_3700,
-       BASE_HW_ISSUE_T76X_3793,
-       BASE_HW_ISSUE_T76X_3953,
-       BASE_HW_ISSUE_T76X_3960,
-       BASE_HW_ISSUE_T76X_3964,
-       BASE_HW_ISSUE_T76X_3966,
-       BASE_HW_ISSUE_T76X_3979,
-       BASE_HW_ISSUE_TMIX_7891,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_t76x_r0p1[] = {
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_10821,
-       BASE_HW_ISSUE_10883,
-       BASE_HW_ISSUE_10946,
-       BASE_HW_ISSUE_11020,
-       BASE_HW_ISSUE_11024,
-       BASE_HW_ISSUE_11042,
-       BASE_HW_ISSUE_11051,
-       BASE_HW_ISSUE_11054,
-       BASE_HW_ISSUE_T76X_26,
-       BASE_HW_ISSUE_T76X_1909,
-       BASE_HW_ISSUE_T76X_1963,
-       BASE_HW_ISSUE_T76X_3086,
-       BASE_HW_ISSUE_T76X_3542,
-       BASE_HW_ISSUE_T76X_3556,
-       BASE_HW_ISSUE_T76X_3700,
-       BASE_HW_ISSUE_T76X_3793,
-       BASE_HW_ISSUE_T76X_3953,
-       BASE_HW_ISSUE_T76X_3960,
-       BASE_HW_ISSUE_T76X_3964,
-       BASE_HW_ISSUE_T76X_3966,
-       BASE_HW_ISSUE_T76X_3979,
-       BASE_HW_ISSUE_TMIX_7891,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_t76x_r0p1_50rel0[] = {
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_10821,
-       BASE_HW_ISSUE_10883,
-       BASE_HW_ISSUE_10946,
-       BASE_HW_ISSUE_11042,
-       BASE_HW_ISSUE_11051,
-       BASE_HW_ISSUE_11054,
-       BASE_HW_ISSUE_T76X_26,
-       BASE_HW_ISSUE_T76X_1909,
-       BASE_HW_ISSUE_T76X_1963,
-       BASE_HW_ISSUE_T76X_3086,
-       BASE_HW_ISSUE_T76X_3542,
-       BASE_HW_ISSUE_T76X_3556,
-       BASE_HW_ISSUE_T76X_3700,
-       BASE_HW_ISSUE_T76X_3793,
-       BASE_HW_ISSUE_T76X_3953,
-       BASE_HW_ISSUE_T76X_3960,
-       BASE_HW_ISSUE_T76X_3964,
-       BASE_HW_ISSUE_T76X_3966,
-       BASE_HW_ISSUE_T76X_3979,
-       BASE_HW_ISSUE_TMIX_7891,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_t76x_r0p2[] = {
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_10821,
-       BASE_HW_ISSUE_10883,
-       BASE_HW_ISSUE_10946,
-       BASE_HW_ISSUE_11020,
-       BASE_HW_ISSUE_11024,
-       BASE_HW_ISSUE_11042,
-       BASE_HW_ISSUE_11051,
-       BASE_HW_ISSUE_11054,
-       BASE_HW_ISSUE_T76X_26,
-       BASE_HW_ISSUE_T76X_1909,
-       BASE_HW_ISSUE_T76X_1963,
-       BASE_HW_ISSUE_T76X_3086,
-       BASE_HW_ISSUE_T76X_3542,
-       BASE_HW_ISSUE_T76X_3556,
-       BASE_HW_ISSUE_T76X_3700,
-       BASE_HW_ISSUE_T76X_3793,
-       BASE_HW_ISSUE_T76X_3953,
-       BASE_HW_ISSUE_T76X_3960,
-       BASE_HW_ISSUE_T76X_3964,
-       BASE_HW_ISSUE_T76X_3966,
-       BASE_HW_ISSUE_T76X_3979,
-       BASE_HW_ISSUE_TMIX_7891,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_t76x_r0p3[] = {
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_10821,
-       BASE_HW_ISSUE_10883,
-       BASE_HW_ISSUE_10946,
-       BASE_HW_ISSUE_11042,
-       BASE_HW_ISSUE_11051,
-       BASE_HW_ISSUE_11054,
-       BASE_HW_ISSUE_T76X_26,
-       BASE_HW_ISSUE_T76X_1909,
-       BASE_HW_ISSUE_T76X_1963,
-       BASE_HW_ISSUE_T76X_3086,
-       BASE_HW_ISSUE_T76X_3542,
-       BASE_HW_ISSUE_T76X_3556,
-       BASE_HW_ISSUE_T76X_3700,
-       BASE_HW_ISSUE_T76X_3793,
-       BASE_HW_ISSUE_T76X_3953,
-       BASE_HW_ISSUE_T76X_3960,
-       BASE_HW_ISSUE_T76X_3964,
-       BASE_HW_ISSUE_T76X_3966,
-       BASE_HW_ISSUE_T76X_3979,
-       BASE_HW_ISSUE_TMIX_7891,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_t76x_r1p0[] = {
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_10821,
-       BASE_HW_ISSUE_10883,
-       BASE_HW_ISSUE_10946,
-       BASE_HW_ISSUE_11042,
-       BASE_HW_ISSUE_11051,
-       BASE_HW_ISSUE_11054,
-       BASE_HW_ISSUE_T76X_1909,
-       BASE_HW_ISSUE_T76X_1963,
-       BASE_HW_ISSUE_T76X_3086,
-       BASE_HW_ISSUE_T76X_3700,
-       BASE_HW_ISSUE_T76X_3793,
-       BASE_HW_ISSUE_T76X_3953,
-       BASE_HW_ISSUE_T76X_3960,
-       BASE_HW_ISSUE_T76X_3964,
-       BASE_HW_ISSUE_T76X_3966,
-       BASE_HW_ISSUE_T76X_3979,
-       BASE_HW_ISSUE_TMIX_7891,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_t72x_r0p0[] = {
-       BASE_HW_ISSUE_6402,
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_10471,
-       BASE_HW_ISSUE_10684,
-       BASE_HW_ISSUE_10797,
-       BASE_HW_ISSUE_10821,
-       BASE_HW_ISSUE_10883,
-       BASE_HW_ISSUE_10946,
-       BASE_HW_ISSUE_11042,
-       BASE_HW_ISSUE_11051,
-       BASE_HW_ISSUE_11054,
-       BASE_HW_ISSUE_T76X_1909,
-       BASE_HW_ISSUE_T76X_1963,
-       BASE_HW_ISSUE_T76X_3964,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_t72x_r1p0[] = {
-       BASE_HW_ISSUE_6402,
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_10471,
-       BASE_HW_ISSUE_10684,
-       BASE_HW_ISSUE_10797,
-       BASE_HW_ISSUE_10821,
-       BASE_HW_ISSUE_10883,
-       BASE_HW_ISSUE_10946,
-       BASE_HW_ISSUE_11042,
-       BASE_HW_ISSUE_11051,
-       BASE_HW_ISSUE_11054,
-       BASE_HW_ISSUE_T76X_1909,
-       BASE_HW_ISSUE_T76X_1963,
-       BASE_HW_ISSUE_T76X_3964,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_t72x_r1p1[] = {
-       BASE_HW_ISSUE_6402,
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_10471,
-       BASE_HW_ISSUE_10684,
-       BASE_HW_ISSUE_10797,
-       BASE_HW_ISSUE_10821,
-       BASE_HW_ISSUE_10883,
-       BASE_HW_ISSUE_10946,
-       BASE_HW_ISSUE_11042,
-       BASE_HW_ISSUE_11051,
-       BASE_HW_ISSUE_11054,
-       BASE_HW_ISSUE_T76X_1909,
-       BASE_HW_ISSUE_T76X_1963,
-       BASE_HW_ISSUE_T76X_3964,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_model_t72x[] = {
-       BASE_HW_ISSUE_5736,
-       BASE_HW_ISSUE_6402,
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_10471,
-       BASE_HW_ISSUE_10797,
-       BASE_HW_ISSUE_11042,
-       BASE_HW_ISSUE_11051,
-       BASE_HW_ISSUE_T76X_1909,
-       BASE_HW_ISSUE_T76X_1963,
-       BASE_HW_ISSUE_T76X_3964,
-       GPUCORE_1619,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_model_t76x[] = {
-       BASE_HW_ISSUE_5736,
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_11020,
-       BASE_HW_ISSUE_11024,
-       BASE_HW_ISSUE_11042,
-       BASE_HW_ISSUE_11051,
-       BASE_HW_ISSUE_T76X_1909,
-       BASE_HW_ISSUE_T76X_1963,
-       BASE_HW_ISSUE_T76X_3086,
-       BASE_HW_ISSUE_T76X_3700,
-       BASE_HW_ISSUE_T76X_3793,
-       BASE_HW_ISSUE_T76X_3964,
-       BASE_HW_ISSUE_T76X_3979,
-       BASE_HW_ISSUE_TMIX_7891,
-       GPUCORE_1619,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_model_t60x[] = {
-       BASE_HW_ISSUE_5736,
-       BASE_HW_ISSUE_6402,
-       BASE_HW_ISSUE_8778,
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_10472,
-       BASE_HW_ISSUE_10931,
-       BASE_HW_ISSUE_11012,
-       BASE_HW_ISSUE_11020,
-       BASE_HW_ISSUE_11024,
-       BASE_HW_ISSUE_11051,
-       BASE_HW_ISSUE_T76X_1909,
-       BASE_HW_ISSUE_T76X_1963,
-       BASE_HW_ISSUE_T76X_3964,
-       GPUCORE_1619,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_model_t62x[] = {
-       BASE_HW_ISSUE_5736,
-       BASE_HW_ISSUE_6402,
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_10472,
-       BASE_HW_ISSUE_10931,
-       BASE_HW_ISSUE_11012,
-       BASE_HW_ISSUE_11020,
-       BASE_HW_ISSUE_11024,
-       BASE_HW_ISSUE_11042,
-       BASE_HW_ISSUE_11051,
-       BASE_HW_ISSUE_T76X_1909,
-       BASE_HW_ISSUE_T76X_1963,
-       BASE_HW_ISSUE_T76X_3964,
-       GPUCORE_1619,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_tFRx_r0p1[] = {
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_10821,
-       BASE_HW_ISSUE_10883,
-       BASE_HW_ISSUE_10946,
-       BASE_HW_ISSUE_11051,
-       BASE_HW_ISSUE_11054,
-       BASE_HW_ISSUE_T76X_1909,
-       BASE_HW_ISSUE_T76X_1963,
-       BASE_HW_ISSUE_T76X_3086,
-       BASE_HW_ISSUE_T76X_3700,
-       BASE_HW_ISSUE_T76X_3793,
-       BASE_HW_ISSUE_T76X_3953,
-       BASE_HW_ISSUE_T76X_3960,
-       BASE_HW_ISSUE_T76X_3964,
-       BASE_HW_ISSUE_T76X_3966,
-       BASE_HW_ISSUE_T76X_3979,
-       BASE_HW_ISSUE_TMIX_7891,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_tFRx_r0p2[] = {
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_10821,
-       BASE_HW_ISSUE_10883,
-       BASE_HW_ISSUE_10946,
-       BASE_HW_ISSUE_11051,
-       BASE_HW_ISSUE_11054,
-       BASE_HW_ISSUE_T76X_1909,
-       BASE_HW_ISSUE_T76X_1963,
-       BASE_HW_ISSUE_T76X_3086,
-       BASE_HW_ISSUE_T76X_3700,
-       BASE_HW_ISSUE_T76X_3793,
-       BASE_HW_ISSUE_T76X_3953,
-       BASE_HW_ISSUE_T76X_3964,
-       BASE_HW_ISSUE_T76X_3966,
-       BASE_HW_ISSUE_T76X_3979,
-       BASE_HW_ISSUE_TMIX_7891,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_tFRx_r1p0[] = {
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_10821,
-       BASE_HW_ISSUE_10883,
-       BASE_HW_ISSUE_10946,
-       BASE_HW_ISSUE_11051,
-       BASE_HW_ISSUE_11054,
-       BASE_HW_ISSUE_T76X_1963,
-       BASE_HW_ISSUE_T76X_3086,
-       BASE_HW_ISSUE_T76X_3700,
-       BASE_HW_ISSUE_T76X_3793,
-       BASE_HW_ISSUE_T76X_3953,
-       BASE_HW_ISSUE_T76X_3966,
-       BASE_HW_ISSUE_T76X_3979,
-       BASE_HW_ISSUE_TMIX_7891,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_tFRx_r2p0[] = {
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_10821,
-       BASE_HW_ISSUE_10883,
-       BASE_HW_ISSUE_10946,
-       BASE_HW_ISSUE_11051,
-       BASE_HW_ISSUE_11054,
-       BASE_HW_ISSUE_T76X_1963,
-       BASE_HW_ISSUE_T76X_3086,
-       BASE_HW_ISSUE_T76X_3700,
-       BASE_HW_ISSUE_T76X_3793,
-       BASE_HW_ISSUE_T76X_3953,
-       BASE_HW_ISSUE_T76X_3966,
-       BASE_HW_ISSUE_T76X_3979,
-       BASE_HW_ISSUE_TMIX_7891,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_model_tFRx[] = {
-       BASE_HW_ISSUE_5736,
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_11051,
-       BASE_HW_ISSUE_T76X_1963,
-       BASE_HW_ISSUE_T76X_3086,
-       BASE_HW_ISSUE_T76X_3700,
-       BASE_HW_ISSUE_T76X_3793,
-       BASE_HW_ISSUE_T76X_3964,
-       BASE_HW_ISSUE_T76X_3979,
-       BASE_HW_ISSUE_TMIX_7891,
-       GPUCORE_1619,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_t86x_r0p2[] = {
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_10821,
-       BASE_HW_ISSUE_10883,
-       BASE_HW_ISSUE_10946,
-       BASE_HW_ISSUE_11051,
-       BASE_HW_ISSUE_11054,
-       BASE_HW_ISSUE_T76X_1909,
-       BASE_HW_ISSUE_T76X_1963,
-       BASE_HW_ISSUE_T76X_3086,
-       BASE_HW_ISSUE_T76X_3700,
-       BASE_HW_ISSUE_T76X_3793,
-       BASE_HW_ISSUE_T76X_3953,
-       BASE_HW_ISSUE_T76X_3964,
-       BASE_HW_ISSUE_T76X_3966,
-       BASE_HW_ISSUE_T76X_3979,
-       BASE_HW_ISSUE_TMIX_7891,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_t86x_r1p0[] = {
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_10821,
-       BASE_HW_ISSUE_10883,
-       BASE_HW_ISSUE_10946,
-       BASE_HW_ISSUE_11051,
-       BASE_HW_ISSUE_11054,
-       BASE_HW_ISSUE_T76X_1963,
-       BASE_HW_ISSUE_T76X_3086,
-       BASE_HW_ISSUE_T76X_3700,
-       BASE_HW_ISSUE_T76X_3793,
-       BASE_HW_ISSUE_T76X_3953,
-       BASE_HW_ISSUE_T76X_3966,
-       BASE_HW_ISSUE_T76X_3979,
-       BASE_HW_ISSUE_TMIX_7891,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_t86x_r2p0[] = {
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_10821,
-       BASE_HW_ISSUE_10883,
-       BASE_HW_ISSUE_10946,
-       BASE_HW_ISSUE_11051,
-       BASE_HW_ISSUE_11054,
-       BASE_HW_ISSUE_T76X_1963,
-       BASE_HW_ISSUE_T76X_3086,
-       BASE_HW_ISSUE_T76X_3700,
-       BASE_HW_ISSUE_T76X_3793,
-       BASE_HW_ISSUE_T76X_3953,
-       BASE_HW_ISSUE_T76X_3966,
-       BASE_HW_ISSUE_T76X_3979,
-       BASE_HW_ISSUE_TMIX_7891,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_model_t86x[] = {
-       BASE_HW_ISSUE_5736,
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_11051,
-       BASE_HW_ISSUE_T76X_1963,
-       BASE_HW_ISSUE_T76X_3086,
-       BASE_HW_ISSUE_T76X_3700,
-       BASE_HW_ISSUE_T76X_3793,
-       BASE_HW_ISSUE_T76X_3979,
-       BASE_HW_ISSUE_TMIX_7891,
-       GPUCORE_1619,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_t83x_r0p1[] = {
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_10821,
-       BASE_HW_ISSUE_10883,
-       BASE_HW_ISSUE_10946,
-       BASE_HW_ISSUE_11051,
-       BASE_HW_ISSUE_11054,
-       BASE_HW_ISSUE_T76X_1909,
-       BASE_HW_ISSUE_T76X_1963,
-       BASE_HW_ISSUE_T76X_3086,
-       BASE_HW_ISSUE_T76X_3700,
-       BASE_HW_ISSUE_T76X_3793,
-       BASE_HW_ISSUE_T76X_3953,
-       BASE_HW_ISSUE_T76X_3960,
-       BASE_HW_ISSUE_T76X_3979,
-       BASE_HW_ISSUE_TMIX_7891,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_t83x_r1p0[] = {
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_10821,
-       BASE_HW_ISSUE_10883,
-       BASE_HW_ISSUE_10946,
-       BASE_HW_ISSUE_11051,
-       BASE_HW_ISSUE_11054,
-       BASE_HW_ISSUE_T76X_1963,
-       BASE_HW_ISSUE_T76X_3086,
-       BASE_HW_ISSUE_T76X_3700,
-       BASE_HW_ISSUE_T76X_3793,
-       BASE_HW_ISSUE_T76X_3953,
-       BASE_HW_ISSUE_T76X_3960,
-       BASE_HW_ISSUE_T76X_3979,
-       BASE_HW_ISSUE_TMIX_7891,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_model_t83x[] = {
-       BASE_HW_ISSUE_5736,
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_11051,
-       BASE_HW_ISSUE_T76X_1909,
-       BASE_HW_ISSUE_T76X_1963,
-       BASE_HW_ISSUE_T76X_3086,
-       BASE_HW_ISSUE_T76X_3700,
-       BASE_HW_ISSUE_T76X_3793,
-       BASE_HW_ISSUE_T76X_3964,
-       BASE_HW_ISSUE_T76X_3979,
-       BASE_HW_ISSUE_TMIX_7891,
-       GPUCORE_1619,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_t82x_r0p0[] = {
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_10821,
-       BASE_HW_ISSUE_10883,
-       BASE_HW_ISSUE_10946,
-       BASE_HW_ISSUE_11051,
-       BASE_HW_ISSUE_11054,
-       BASE_HW_ISSUE_T76X_1909,
-       BASE_HW_ISSUE_T76X_1963,
-       BASE_HW_ISSUE_T76X_3086,
-       BASE_HW_ISSUE_T76X_3700,
-       BASE_HW_ISSUE_T76X_3793,
-       BASE_HW_ISSUE_T76X_3953,
-       BASE_HW_ISSUE_T76X_3960,
-       BASE_HW_ISSUE_T76X_3964,
-       BASE_HW_ISSUE_T76X_3979,
-       BASE_HW_ISSUE_TMIX_7891,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_t82x_r0p1[] = {
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_10821,
-       BASE_HW_ISSUE_10883,
-       BASE_HW_ISSUE_10946,
-       BASE_HW_ISSUE_11051,
-       BASE_HW_ISSUE_11054,
-       BASE_HW_ISSUE_T76X_1909,
-       BASE_HW_ISSUE_T76X_1963,
-       BASE_HW_ISSUE_T76X_3086,
-       BASE_HW_ISSUE_T76X_3700,
-       BASE_HW_ISSUE_T76X_3793,
-       BASE_HW_ISSUE_T76X_3953,
-       BASE_HW_ISSUE_T76X_3960,
-       BASE_HW_ISSUE_T76X_3979,
-       BASE_HW_ISSUE_TMIX_7891,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_t82x_r1p0[] = {
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_10821,
-       BASE_HW_ISSUE_10883,
-       BASE_HW_ISSUE_10946,
-       BASE_HW_ISSUE_11051,
-       BASE_HW_ISSUE_11054,
-       BASE_HW_ISSUE_T76X_1963,
-       BASE_HW_ISSUE_T76X_3086,
-       BASE_HW_ISSUE_T76X_3700,
-       BASE_HW_ISSUE_T76X_3793,
-       BASE_HW_ISSUE_T76X_3953,
-       BASE_HW_ISSUE_T76X_3960,
-       BASE_HW_ISSUE_T76X_3979,
-       BASE_HW_ISSUE_TMIX_7891,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_model_t82x[] = {
-       BASE_HW_ISSUE_5736,
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_11051,
-       BASE_HW_ISSUE_T76X_1909,
-       BASE_HW_ISSUE_T76X_1963,
-       BASE_HW_ISSUE_T76X_3086,
-       BASE_HW_ISSUE_T76X_3700,
-       BASE_HW_ISSUE_T76X_3793,
-       BASE_HW_ISSUE_T76X_3979,
-       BASE_HW_ISSUE_TMIX_7891,
-       GPUCORE_1619,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_tMIx_r0p0_05dev0[] = {
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_10682,
-       BASE_HW_ISSUE_10821,
-       BASE_HW_ISSUE_11054,
-       BASE_HW_ISSUE_T76X_3700,
-       BASE_HW_ISSUE_T76X_3953,
-       BASE_HW_ISSUE_TMIX_7891,
-       BASE_HW_ISSUE_TMIX_8042,
-       BASE_HW_ISSUE_TMIX_8133,
-       BASE_HW_ISSUE_TMIX_8138,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_tMIx_r0p0[] = {
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_10682,
-       BASE_HW_ISSUE_10821,
-       BASE_HW_ISSUE_11054,
-       BASE_HW_ISSUE_T76X_3700,
-       BASE_HW_ISSUE_TMIX_7891,
-       BASE_HW_ISSUE_TMIX_7940,
-       BASE_HW_ISSUE_TMIX_8042,
-       BASE_HW_ISSUE_TMIX_8133,
-       BASE_HW_ISSUE_TMIX_8138,
-       BASE_HW_ISSUE_TMIX_8206,
-       BASE_HW_ISSUE_END
-};
-
-static const enum base_hw_issue base_hw_issues_model_tMIx[] = {
-       BASE_HW_ISSUE_5736,
-       BASE_HW_ISSUE_9435,
-       BASE_HW_ISSUE_T76X_3700,
-       BASE_HW_ISSUE_TMIX_7891,
-       BASE_HW_ISSUE_TMIX_7940,
-       BASE_HW_ISSUE_TMIX_8042,
-       BASE_HW_ISSUE_TMIX_8133,
-       BASE_HW_ISSUE_TMIX_8138,
-       BASE_HW_ISSUE_TMIX_8206,
-       GPUCORE_1619,
-       BASE_HW_ISSUE_END
-};
-
-
-
-
-
-#endif /* _BASE_HWCONFIG_ISSUES_H_ */
diff --git a/midgard/mali_base_kernel.h b/midgard/mali_base_kernel.h
deleted file mode 100644 (file)
index 873cd92..0000000
+++ /dev/null
@@ -1,1751 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2010-2016 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
- * Base structures shared with the kernel.
- */
-
-#ifndef _BASE_KERNEL_H_
-#define _BASE_KERNEL_H_
-
-#ifndef __user
-#define __user
-#endif
-
-/* Support UK6 IOCTLS */
-#define BASE_LEGACY_UK6_SUPPORT 1
-
-/* Support UK7 IOCTLS */
-/* NB: To support UK6 we also need to support UK7 */
-#define BASE_LEGACY_UK7_SUPPORT 1
-
-/* Support UK8 IOCTLS */
-#define BASE_LEGACY_UK8_SUPPORT 1
-
-/* Support UK9 IOCTLS */
-#define BASE_LEGACY_UK9_SUPPORT 1
-
-typedef struct base_mem_handle {
-       struct {
-               u64 handle;
-       } basep;
-} base_mem_handle;
-
-#include "mali_base_mem_priv.h"
-#include "mali_kbase_profiling_gator_api.h"
-#include "mali_midg_coherency.h"
-#include "mali_kbase_gpu_id.h"
-
-/*
- * Dependency stuff, keep it private for now. May want to expose it if
- * we decide to make the number of semaphores a configurable
- * option.
- */
-#define BASE_JD_ATOM_COUNT              256
-
-#define BASEP_JD_SEM_PER_WORD_LOG2      5
-#define BASEP_JD_SEM_PER_WORD           (1 << BASEP_JD_SEM_PER_WORD_LOG2)
-#define BASEP_JD_SEM_WORD_NR(x)         ((x) >> BASEP_JD_SEM_PER_WORD_LOG2)
-#define BASEP_JD_SEM_MASK_IN_WORD(x)    (1 << ((x) & (BASEP_JD_SEM_PER_WORD - 1)))
-#define BASEP_JD_SEM_ARRAY_SIZE         BASEP_JD_SEM_WORD_NR(BASE_JD_ATOM_COUNT)
-
-/* Set/reset values for a software event */
-#define BASE_JD_SOFT_EVENT_SET             ((unsigned char)1)
-#define BASE_JD_SOFT_EVENT_RESET           ((unsigned char)0)
-
-#define BASE_GPU_NUM_TEXTURE_FEATURES_REGISTERS 3
-
-#define BASE_MAX_COHERENT_GROUPS 16
-
-#if defined CDBG_ASSERT
-#define LOCAL_ASSERT CDBG_ASSERT
-#elif defined KBASE_DEBUG_ASSERT
-#define LOCAL_ASSERT KBASE_DEBUG_ASSERT
-#else
-#error assert macro not defined!
-#endif
-
-#if defined PAGE_MASK
-#define LOCAL_PAGE_LSB ~PAGE_MASK
-#else
-#include <osu/mali_osu.h>
-
-#if defined OSU_CONFIG_CPU_PAGE_SIZE_LOG2
-#define LOCAL_PAGE_LSB ((1ul << OSU_CONFIG_CPU_PAGE_SIZE_LOG2) - 1)
-#else
-#error Failed to find page size
-#endif
-#endif
-
-/** 32/64-bit neutral way to represent pointers */
-typedef union kbase_pointer {
-       void __user *value;       /**< client should store their pointers here */
-       u32 compat_value; /**< 64-bit kernels should fetch value here when handling 32-bit clients */
-       u64 sizer;        /**< Force 64-bit storage for all clients regardless */
-} kbase_pointer;
-
-/**
- * @addtogroup base_user_api User-side Base APIs
- * @{
- */
-
-/**
- * @addtogroup base_user_api_memory User-side Base Memory APIs
- * @{
- */
-
-/**
- * @brief Memory allocation, access/hint flags
- *
- * A combination of MEM_PROT/MEM_HINT flags must be passed to each allocator
- * in order to determine the best cache policy. Some combinations are
- * of course invalid (eg @c MEM_PROT_CPU_WR | @c MEM_HINT_CPU_RD),
- * which defines a @a write-only region on the CPU side, which is
- * heavily read by the CPU...
- * Other flags are only meaningful to a particular allocator.
- * More flags can be added to this list, as long as they don't clash
- * (see ::BASE_MEM_FLAGS_NR_BITS for the number of the first free bit).
- */
-typedef u32 base_mem_alloc_flags;
-
-/**
- * @brief Memory allocation, access/hint flags
- *
- * See ::base_mem_alloc_flags.
- *
- */
-enum {
-/* IN */
-       BASE_MEM_PROT_CPU_RD = (1U << 0),      /**< Read access CPU side */
-       BASE_MEM_PROT_CPU_WR = (1U << 1),      /**< Write access CPU side */
-       BASE_MEM_PROT_GPU_RD = (1U << 2),      /**< Read access GPU side */
-       BASE_MEM_PROT_GPU_WR = (1U << 3),      /**< Write access GPU side */
-       BASE_MEM_PROT_GPU_EX = (1U << 4),      /**< Execute allowed on the GPU
-                                                   side */
-
-       /* BASE_MEM_HINT flags have been removed, but their values are reserved
-        * for backwards compatibility with older user-space drivers. The values
-        * can be re-used once support for r5p0 user-space drivers is removed,
-        * presumably in r7p0.
-        *
-        * RESERVED: (1U << 5)
-        * RESERVED: (1U << 6)
-        * RESERVED: (1U << 7)
-        * RESERVED: (1U << 8)
-        */
-
-       BASE_MEM_GROW_ON_GPF = (1U << 9),      /**< Grow backing store on GPU
-                                                   Page Fault */
-
-       BASE_MEM_COHERENT_SYSTEM = (1U << 10), /**< Page coherence Outer
-                                                   shareable, if available */
-       BASE_MEM_COHERENT_LOCAL = (1U << 11),  /**< Page coherence Inner
-                                                   shareable */
-       BASE_MEM_CACHED_CPU = (1U << 12),      /**< Should be cached on the
-                                                   CPU */
-
-/* IN/OUT */
-       BASE_MEM_SAME_VA = (1U << 13), /**< Must have same VA on both the GPU
-                                           and the CPU */
-/* OUT */
-       BASE_MEM_NEED_MMAP = (1U << 14), /**< Must call mmap to aquire a GPU
-                                            address for the alloc */
-/* IN */
-       BASE_MEM_COHERENT_SYSTEM_REQUIRED = (1U << 15), /**< Page coherence
-                                            Outer shareable, required. */
-       BASE_MEM_SECURE = (1U << 16),          /**< Secure memory */
-       BASE_MEM_DONT_NEED = (1U << 17),       /**< Not needed physical
-                                                   memory */
-       BASE_MEM_IMPORT_SHARED = (1U << 18),   /**< Must use shared CPU/GPU zone
-                                                   (SAME_VA zone) but doesn't
-                                                   require the addresses to
-                                                   be the same */
-};
-
-/**
- * @brief Number of bits used as flags for base memory management
- *
- * Must be kept in sync with the ::base_mem_alloc_flags flags
- */
-#define BASE_MEM_FLAGS_NR_BITS 19
-
-/**
-  * A mask for all output bits, excluding IN/OUT bits.
-  */
-#define BASE_MEM_FLAGS_OUTPUT_MASK BASE_MEM_NEED_MMAP
-
-/**
-  * A mask for all input bits, including IN/OUT bits.
-  */
-#define BASE_MEM_FLAGS_INPUT_MASK \
-       (((1 << BASE_MEM_FLAGS_NR_BITS) - 1) & ~BASE_MEM_FLAGS_OUTPUT_MASK)
-
-/**
- * A mask for all the flags which are modifiable via the base_mem_set_flags
- * interface.
- */
-#define BASE_MEM_FLAGS_MODIFIABLE \
-       (BASE_MEM_DONT_NEED | BASE_MEM_COHERENT_SYSTEM | \
-        BASE_MEM_COHERENT_LOCAL)
-
-/**
- * enum base_mem_import_type - Memory types supported by @a base_mem_import
- *
- * @BASE_MEM_IMPORT_TYPE_INVALID: Invalid type
- * @BASE_MEM_IMPORT_TYPE_UMP: UMP import. Handle type is ump_secure_id.
- * @BASE_MEM_IMPORT_TYPE_UMM: UMM import. Handle type is a file descriptor (int)
- * @BASE_MEM_IMPORT_TYPE_USER_BUFFER: User buffer import. Handle is a
- * base_mem_import_user_buffer
- *
- * Each type defines what the supported handle type is.
- *
- * If any new type is added here ARM must be contacted
- * to allocate a numeric value for it.
- * Do not just add a new type without synchronizing with ARM
- * as future releases from ARM might include other new types
- * which could clash with your custom types.
- */
-typedef enum base_mem_import_type {
-       BASE_MEM_IMPORT_TYPE_INVALID = 0,
-       BASE_MEM_IMPORT_TYPE_UMP = 1,
-       BASE_MEM_IMPORT_TYPE_UMM = 2,
-       BASE_MEM_IMPORT_TYPE_USER_BUFFER = 3
-} base_mem_import_type;
-
-/**
- * struct base_mem_import_user_buffer - Handle of an imported user buffer
- *
- * @ptr:       kbase_pointer to imported user buffer
- * @length:    length of imported user buffer in bytes
- *
- * This structure is used to represent a handle of an imported user buffer.
- */
-
-struct base_mem_import_user_buffer {
-       kbase_pointer ptr;
-       u64 length;
-};
-
-/**
- * @brief Invalid memory handle.
- *
- * Return value from functions returning @ref base_mem_handle on error.
- *
- * @warning @ref base_mem_handle_new_invalid must be used instead of this macro
- *          in C++ code or other situations where compound literals cannot be used.
- */
-#define BASE_MEM_INVALID_HANDLE ((base_mem_handle) { {BASEP_MEM_INVALID_HANDLE} })
-
-/**
- * @brief Special write-alloc memory handle.
- *
- * A special handle is used to represent a region where a special page is mapped
- * with a write-alloc cache setup, typically used when the write result of the
- * GPU isn't needed, but the GPU must write anyway.
- *
- * @warning @ref base_mem_handle_new_write_alloc must be used instead of this macro
- *          in C++ code or other situations where compound literals cannot be used.
- */
-#define BASE_MEM_WRITE_ALLOC_PAGES_HANDLE ((base_mem_handle) { {BASEP_MEM_WRITE_ALLOC_PAGES_HANDLE} })
-
-#define BASEP_MEM_INVALID_HANDLE               (0ull  << 12)
-#define BASE_MEM_MMU_DUMP_HANDLE               (1ull  << 12)
-#define BASE_MEM_TRACE_BUFFER_HANDLE           (2ull  << 12)
-#define BASE_MEM_MAP_TRACKING_HANDLE           (3ull  << 12)
-#define BASEP_MEM_WRITE_ALLOC_PAGES_HANDLE     (4ull  << 12)
-/* reserved handles ..-64<<PAGE_SHIFT> for future special handles */
-#define BASE_MEM_COOKIE_BASE                   (64ul  << 12)
-#define BASE_MEM_FIRST_FREE_ADDRESS            ((BITS_PER_LONG << 12) + \
-                                               BASE_MEM_COOKIE_BASE)
-
-/* Mask to detect 4GB boundary alignment */
-#define BASE_MEM_MASK_4GB  0xfffff000UL
-
-
-/* Bit mask of cookies used for for memory allocation setup */
-#define KBASE_COOKIE_MASK  ~1UL /* bit 0 is reserved */
-
-
-/**
- * @brief Result codes of changing the size of the backing store allocated to a tmem region
- */
-typedef enum base_backing_threshold_status {
-       BASE_BACKING_THRESHOLD_OK = 0,                      /**< Resize successful */
-       BASE_BACKING_THRESHOLD_ERROR_NOT_GROWABLE = -1,     /**< Not a growable tmem object */
-       BASE_BACKING_THRESHOLD_ERROR_OOM = -2,              /**< Increase failed due to an out-of-memory condition */
-       BASE_BACKING_THRESHOLD_ERROR_MAPPED = -3,           /**< Resize attempted on buffer while it was mapped, which is not permitted */
-       BASE_BACKING_THRESHOLD_ERROR_INVALID_ARGUMENTS = -4 /**< Invalid arguments (not tmem, illegal size request, etc.) */
-} base_backing_threshold_status;
-
-/**
- * @addtogroup base_user_api_memory_defered User-side Base Defered Memory Coherency APIs
- * @{
- */
-
-/**
- * @brief a basic memory operation (sync-set).
- *
- * The content of this structure is private, and should only be used
- * by the accessors.
- */
-typedef struct base_syncset {
-       struct basep_syncset basep_sset;
-} base_syncset;
-
-/** @} end group base_user_api_memory_defered */
-
-/**
- * Handle to represent imported memory object.
- * Simple opague handle to imported memory, can't be used
- * with anything but base_external_resource_init to bind to an atom.
- */
-typedef struct base_import_handle {
-       struct {
-               u64 handle;
-       } basep;
-} base_import_handle;
-
-/** @} end group base_user_api_memory */
-
-/**
- * @addtogroup base_user_api_job_dispatch User-side Base Job Dispatcher APIs
- * @{
- */
-
-typedef int platform_fence_type;
-#define INVALID_PLATFORM_FENCE ((platform_fence_type)-1)
-
-/**
- * Base stream handle.
- *
- * References an underlying base stream object.
- */
-typedef struct base_stream {
-       struct {
-               int fd;
-       } basep;
-} base_stream;
-
-/**
- * Base fence handle.
- *
- * References an underlying base fence object.
- */
-typedef struct base_fence {
-       struct {
-               int fd;
-               int stream_fd;
-       } basep;
-} base_fence;
-
-/**
- * @brief Per-job data
- *
- * This structure is used to store per-job data, and is completly unused
- * by the Base driver. It can be used to store things such as callback
- * function pointer, data to handle job completion. It is guaranteed to be
- * untouched by the Base driver.
- */
-typedef struct base_jd_udata {
-       u64 blob[2];     /**< per-job data array */
-} base_jd_udata;
-
-/**
- * @brief Memory aliasing info
- *
- * Describes a memory handle to be aliased.
- * A subset of the handle can be chosen for aliasing, given an offset and a
- * length.
- * A special handle BASE_MEM_WRITE_ALLOC_PAGES_HANDLE is used to represent a
- * region where a special page is mapped with a write-alloc cache setup,
- * typically used when the write result of the GPU isn't needed, but the GPU
- * must write anyway.
- *
- * Offset and length are specified in pages.
- * Offset must be within the size of the handle.
- * Offset+length must not overrun the size of the handle.
- *
- * @handle Handle to alias, can be BASE_MEM_WRITE_ALLOC_PAGES_HANDLE
- * @offset Offset within the handle to start aliasing from, in pages.
- *         Not used with BASE_MEM_WRITE_ALLOC_PAGES_HANDLE.
- * @length Length to alias, in pages. For BASE_MEM_WRITE_ALLOC_PAGES_HANDLE
- *         specifies the number of times the special page is needed.
- */
-struct base_mem_aliasing_info {
-       base_mem_handle handle;
-       u64 offset;
-       u64 length;
-};
-
-/**
- * struct base_jit_alloc_info - Structure which describes a JIT allocation
- *                              request.
- * @gpu_alloc_addr:             The GPU virtual address to write the JIT
- *                              allocated GPU virtual address to.
- * @va_pages:                   The minimum number of virtual pages required.
- * @commit_pages:               The minimum number of physical pages which
- *                              should back the allocation.
- * @extent:                     Granularity of physical pages to grow the
- *                              allocation by during a fault.
- * @id:                         Unique ID provided by the caller, this is used
- *                              to pair allocation and free requests.
- *                              Zero is not a valid value.
- */
-struct base_jit_alloc_info {
-       u64 gpu_alloc_addr;
-       u64 va_pages;
-       u64 commit_pages;
-       u64 extent;
-       u8 id;
-};
-
-/**
- * @brief Job dependency type.
- *
- * A flags field will be inserted into the atom structure to specify whether a dependency is a data or
- * ordering dependency (by putting it before/after 'core_req' in the structure it should be possible to add without
- * changing the structure size).
- * When the flag is set for a particular dependency to signal that it is an ordering only dependency then
- * errors will not be propagated.
- */
-typedef u8 base_jd_dep_type;
-
-
-#define BASE_JD_DEP_TYPE_INVALID  (0)       /**< Invalid dependency */
-#define BASE_JD_DEP_TYPE_DATA     (1U << 0) /**< Data dependency */
-#define BASE_JD_DEP_TYPE_ORDER    (1U << 1) /**< Order dependency */
-
-/**
- * @brief Job chain hardware requirements.
- *
- * A job chain must specify what GPU features it needs to allow the
- * driver to schedule the job correctly.  By not specifying the
- * correct settings can/will cause an early job termination.  Multiple
- * values can be ORed together to specify multiple requirements.
- * Special case is ::BASE_JD_REQ_DEP, which is used to express complex
- * dependencies, and that doesn't execute anything on the hardware.
- */
-typedef u16 base_jd_core_req;
-
-/* Requirements that come from the HW */
-#define BASE_JD_REQ_DEP 0          /**< No requirement, dependency only */
-#define BASE_JD_REQ_FS  (1U << 0)   /**< Requires fragment shaders */
-/**
- * Requires compute shaders
- * This covers any of the following Midgard Job types:
- * - Vertex Shader Job
- * - Geometry Shader Job
- * - An actual Compute Shader Job
- *
- * Compare this with @ref BASE_JD_REQ_ONLY_COMPUTE, which specifies that the
- * job is specifically just the "Compute Shader" job type, and not the "Vertex
- * Shader" nor the "Geometry Shader" job type.
- */
-#define BASE_JD_REQ_CS  (1U << 1)
-#define BASE_JD_REQ_T   (1U << 2)   /**< Requires tiling */
-#define BASE_JD_REQ_CF  (1U << 3)   /**< Requires cache flushes */
-#define BASE_JD_REQ_V   (1U << 4)   /**< Requires value writeback */
-
-/* SW-only requirements - the HW does not expose these as part of the job slot capabilities */
-
-/* Requires fragment job with AFBC encoding */
-#define BASE_JD_REQ_FS_AFBC  (1U << 13)
-
-/**
- * SW-only requirement: coalesce completion events.
- * If this bit is set then completion of this atom will not cause an event to
- * be sent to userspace, whether successful or not; completion events will be
- * deferred until an atom completes which does not have this bit set.
- *
- * This bit may not be used in combination with BASE_JD_REQ_EXTERNAL_RESOURCES.
- */
-#define BASE_JD_REQ_EVENT_COALESCE (1U << 5)
-
-/**
- * SW Only requirement: the job chain requires a coherent core group. We don't
- * mind which coherent core group is used.
- */
-#define BASE_JD_REQ_COHERENT_GROUP  (1U << 6)
-
-/**
- * SW Only requirement: The performance counters should be enabled only when
- * they are needed, to reduce power consumption.
- */
-
-#define BASE_JD_REQ_PERMON               (1U << 7)
-
-/**
- * SW Only requirement: External resources are referenced by this atom.
- * When external resources are referenced no syncsets can be bundled with the atom
- * but should instead be part of a NULL jobs inserted into the dependency tree.
- * The first pre_dep object must be configured for the external resouces to use,
- * the second pre_dep object can be used to create other dependencies.
- *
- * This bit may not be used in combination with BASE_JD_REQ_EVENT_COALESCE.
- */
-#define BASE_JD_REQ_EXTERNAL_RESOURCES   (1U << 8)
-
-/**
- * SW Only requirement: Software defined job. Jobs with this bit set will not be submitted
- * to the hardware but will cause some action to happen within the driver
- */
-#define BASE_JD_REQ_SOFT_JOB        (1U << 9)
-
-#define BASE_JD_REQ_SOFT_DUMP_CPU_GPU_TIME      (BASE_JD_REQ_SOFT_JOB | 0x1)
-#define BASE_JD_REQ_SOFT_FENCE_TRIGGER          (BASE_JD_REQ_SOFT_JOB | 0x2)
-#define BASE_JD_REQ_SOFT_FENCE_WAIT             (BASE_JD_REQ_SOFT_JOB | 0x3)
-
-/**
- * SW Only requirement : Replay job.
- *
- * If the preceeding job fails, the replay job will cause the jobs specified in
- * the list of base_jd_replay_payload pointed to by the jc pointer to be
- * replayed.
- *
- * A replay job will only cause jobs to be replayed up to BASEP_JD_REPLAY_LIMIT
- * times. If a job fails more than BASEP_JD_REPLAY_LIMIT times then the replay
- * job is failed, as well as any following dependencies.
- *
- * The replayed jobs will require a number of atom IDs. If there are not enough
- * free atom IDs then the replay job will fail.
- *
- * If the preceeding job does not fail, then the replay job is returned as
- * completed.
- *
- * The replayed jobs will never be returned to userspace. The preceeding failed
- * job will be returned to userspace as failed; the status of this job should
- * be ignored. Completion should be determined by the status of the replay soft
- * job.
- *
- * In order for the jobs to be replayed, the job headers will have to be
- * modified. The Status field will be reset to NOT_STARTED. If the Job Type
- * field indicates a Vertex Shader Job then it will be changed to Null Job.
- *
- * The replayed jobs have the following assumptions :
- *
- * - No external resources. Any required external resources will be held by the
- *   replay atom.
- * - Pre-dependencies are created based on job order.
- * - Atom numbers are automatically assigned.
- * - device_nr is set to 0. This is not relevant as
- *   BASE_JD_REQ_SPECIFIC_COHERENT_GROUP should not be set.
- * - Priority is inherited from the replay job.
- */
-#define BASE_JD_REQ_SOFT_REPLAY                 (BASE_JD_REQ_SOFT_JOB | 0x4)
-/**
- * SW only requirement: event wait/trigger job.
- *
- * - BASE_JD_REQ_SOFT_EVENT_WAIT: this job will block until the event is set.
- * - BASE_JD_REQ_SOFT_EVENT_SET: this job sets the event, thus unblocks the
- *   other waiting jobs. It completes immediately.
- * - BASE_JD_REQ_SOFT_EVENT_RESET: this job resets the event, making it
- *   possible for other jobs to wait upon. It completes immediately.
- */
-#define BASE_JD_REQ_SOFT_EVENT_WAIT             (BASE_JD_REQ_SOFT_JOB | 0x5)
-#define BASE_JD_REQ_SOFT_EVENT_SET              (BASE_JD_REQ_SOFT_JOB | 0x6)
-#define BASE_JD_REQ_SOFT_EVENT_RESET            (BASE_JD_REQ_SOFT_JOB | 0x7)
-
-#define BASE_JD_REQ_SOFT_DEBUG_COPY             (BASE_JD_REQ_SOFT_JOB | 0x8)
-
-/**
- * SW only requirement: Just In Time allocation
- *
- * This job requests a JIT allocation based on the request in the
- * @base_jit_alloc_info structure which is passed via the jc element of
- * the atom.
- *
- * It should be noted that the id entry in @base_jit_alloc_info must not
- * be reused until it has been released via @BASE_JD_REQ_SOFT_JIT_FREE.
- *
- * Should this soft job fail it is expected that a @BASE_JD_REQ_SOFT_JIT_FREE
- * soft job to free the JIT allocation is still made.
- *
- * The job will complete immediately.
- */
-#define BASE_JD_REQ_SOFT_JIT_ALLOC              (BASE_JD_REQ_SOFT_JOB | 0x9)
-/**
- * SW only requirement: Just In Time free
- *
- * This job requests a JIT allocation created by @BASE_JD_REQ_SOFT_JIT_ALLOC
- * to be freed. The ID of the JIT allocation is passed via the jc element of
- * the atom.
- *
- * The job will complete immediately.
- */
-#define BASE_JD_REQ_SOFT_JIT_FREE               (BASE_JD_REQ_SOFT_JOB | 0xa)
-
-/**
- * SW only requirement: Map external resource
- *
- * This job requests external resource(s) are mapped once the dependencies
- * of the job have been satisfied. The list of external resources are
- * passed via the jc element of the atom which is a pointer to a
- * @base_external_resource_list.
- */
-#define BASE_JD_REQ_SOFT_EXT_RES_MAP            (BASE_JD_REQ_SOFT_JOB | 0xb)
-/**
- * SW only requirement: Unmap external resource
- *
- * This job requests external resource(s) are unmapped once the dependencies
- * of the job has been satisfied. The list of external resources are
- * passed via the jc element of the atom which is a pointer to a
- * @base_external_resource_list.
- */
-#define BASE_JD_REQ_SOFT_EXT_RES_UNMAP          (BASE_JD_REQ_SOFT_JOB | 0xc)
-
-/**
- * HW Requirement: Requires Compute shaders (but not Vertex or Geometry Shaders)
- *
- * This indicates that the Job Chain contains Midgard Jobs of the 'Compute Shaders' type.
- *
- * In contrast to @ref BASE_JD_REQ_CS, this does \b not indicate that the Job
- * Chain contains 'Geometry Shader' or 'Vertex Shader' jobs.
- */
-#define BASE_JD_REQ_ONLY_COMPUTE    (1U << 10)
-
-/**
- * HW Requirement: Use the base_jd_atom::device_nr field to specify a
- * particular core group
- *
- * If both BASE_JD_REQ_COHERENT_GROUP and this flag are set, this flag takes priority
- *
- * This is only guaranteed to work for BASE_JD_REQ_ONLY_COMPUTE atoms.
- *
- * If the core availability policy is keeping the required core group turned off, then
- * the job will fail with a BASE_JD_EVENT_PM_EVENT error code.
- */
-#define BASE_JD_REQ_SPECIFIC_COHERENT_GROUP (1U << 11)
-
-/**
- * SW Flag: If this bit is set then the successful completion of this atom
- * will not cause an event to be sent to userspace
- */
-#define BASE_JD_REQ_EVENT_ONLY_ON_FAILURE   (1U << 12)
-
-/**
- * SW Flag: If this bit is set then completion of this atom will not cause an
- * event to be sent to userspace, whether successful or not.
- */
-#define BASEP_JD_REQ_EVENT_NEVER (1U << 14)
-
-/**
- * These requirement bits are currently unused in base_jd_core_req (currently a u16)
- */
-
-#define BASEP_JD_REQ_RESERVED (1U << 15)
-
-/**
- * Mask of all bits in base_jd_core_req that control the type of the atom.
- *
- * This allows dependency only atoms to have flags set
- */
-#define BASEP_JD_REQ_ATOM_TYPE (~(BASEP_JD_REQ_RESERVED |\
-                               BASE_JD_REQ_EVENT_ONLY_ON_FAILURE |\
-                               BASE_JD_REQ_EXTERNAL_RESOURCES |\
-                               BASEP_JD_REQ_EVENT_NEVER |\
-                               BASE_JD_REQ_EVENT_COALESCE))
-
-/**
- * @brief States to model state machine processed by kbasep_js_job_check_ref_cores(), which
- * handles retaining cores for power management and affinity management.
- *
- * The state @ref KBASE_ATOM_COREREF_STATE_RECHECK_AFFINITY prevents an attack
- * where lots of atoms could be submitted before powerup, and each has an
- * affinity chosen that causes other atoms to have an affinity
- * violation. Whilst the affinity was not causing violations at the time it
- * was chosen, it could cause violations thereafter. For example, 1000 jobs
- * could have had their affinity chosen during the powerup time, so any of
- * those 1000 jobs could cause an affinity violation later on.
- *
- * The attack would otherwise occur because other atoms/contexts have to wait for:
- * -# the currently running atoms (which are causing the violation) to
- * finish
- * -# and, the atoms that had their affinity chosen during powerup to
- * finish. These are run preferrentially because they don't cause a
- * violation, but instead continue to cause the violation in others.
- * -# or, the attacker is scheduled out (which might not happen for just 2
- * contexts)
- *
- * By re-choosing the affinity (which is designed to avoid violations at the
- * time it's chosen), we break condition (2) of the wait, which minimizes the
- * problem to just waiting for current jobs to finish (which can be bounded if
- * the Job Scheduling Policy has a timer).
- */
-enum kbase_atom_coreref_state {
-       /** Starting state: No affinity chosen, and cores must be requested. kbase_jd_atom::affinity==0 */
-       KBASE_ATOM_COREREF_STATE_NO_CORES_REQUESTED,
-       /** Cores requested, but waiting for them to be powered. Requested cores given by kbase_jd_atom::affinity */
-       KBASE_ATOM_COREREF_STATE_WAITING_FOR_REQUESTED_CORES,
-       /** Cores given by kbase_jd_atom::affinity are powered, but affinity might be out-of-date, so must recheck */
-       KBASE_ATOM_COREREF_STATE_RECHECK_AFFINITY,
-       /** Cores given by kbase_jd_atom::affinity are powered, and affinity is up-to-date, but must check for violations */
-       KBASE_ATOM_COREREF_STATE_CHECK_AFFINITY_VIOLATIONS,
-       /** Cores are powered, kbase_jd_atom::affinity up-to-date, no affinity violations: atom can be submitted to HW */
-       KBASE_ATOM_COREREF_STATE_READY
-};
-
-/*
- * Base Atom priority
- *
- * Only certain priority levels are actually implemented, as specified by the
- * BASE_JD_PRIO_<...> definitions below. It is undefined to use a priority
- * level that is not one of those defined below.
- *
- * Priority levels only affect scheduling between atoms of the same type within
- * a base context, and only after the atoms have had dependencies resolved.
- * Fragment atoms does not affect non-frament atoms with lower priorities, and
- * the other way around. For example, a low priority atom that has had its
- * dependencies resolved might run before a higher priority atom that has not
- * had its dependencies resolved.
- *
- * The scheduling between base contexts/processes and between atoms from
- * different base contexts/processes is unaffected by atom priority.
- *
- * The atoms are scheduled as follows with respect to their priorities:
- * - Let atoms 'X' and 'Y' be for the same job slot who have dependencies
- *   resolved, and atom 'X' has a higher priority than atom 'Y'
- * - If atom 'Y' is currently running on the HW, then it is interrupted to
- *   allow atom 'X' to run soon after
- * - If instead neither atom 'Y' nor atom 'X' are running, then when choosing
- *   the next atom to run, atom 'X' will always be chosen instead of atom 'Y'
- * - Any two atoms that have the same priority could run in any order with
- *   respect to each other. That is, there is no ordering constraint between
- *   atoms of the same priority.
- */
-typedef u8 base_jd_prio;
-
-/* Medium atom priority. This is a priority higher than BASE_JD_PRIO_LOW */
-#define BASE_JD_PRIO_MEDIUM  ((base_jd_prio)0)
-/* High atom priority. This is a priority higher than BASE_JD_PRIO_MEDIUM and
- * BASE_JD_PRIO_LOW */
-#define BASE_JD_PRIO_HIGH    ((base_jd_prio)1)
-/* Low atom priority. */
-#define BASE_JD_PRIO_LOW     ((base_jd_prio)2)
-
-/* Count of the number of priority levels. This itself is not a valid
- * base_jd_prio setting */
-#define BASE_JD_NR_PRIO_LEVELS 3
-
-enum kbase_jd_atom_state {
-       /** Atom is not used */
-       KBASE_JD_ATOM_STATE_UNUSED,
-       /** Atom is queued in JD */
-       KBASE_JD_ATOM_STATE_QUEUED,
-       /** Atom has been given to JS (is runnable/running) */
-       KBASE_JD_ATOM_STATE_IN_JS,
-       /** Atom has been completed, but not yet handed back to job dispatcher
-        *  for dependency resolution */
-       KBASE_JD_ATOM_STATE_HW_COMPLETED,
-       /** Atom has been completed, but not yet handed back to userspace */
-       KBASE_JD_ATOM_STATE_COMPLETED
-};
-
-typedef u8 base_atom_id; /**< Type big enough to store an atom number in */
-
-struct base_dependency {
-       base_atom_id  atom_id;               /**< An atom number */
-       base_jd_dep_type dependency_type;    /**< Dependency type */
-};
-
-typedef struct base_jd_atom_v2 {
-       u64 jc;                     /**< job-chain GPU address */
-       struct base_jd_udata udata;                 /**< user data */
-       kbase_pointer extres_list;          /**< list of external resources */
-       u16 nr_extres;                      /**< nr of external resources */
-       base_jd_core_req core_req;          /**< core requirements */
-       struct base_dependency pre_dep[2];  /**< pre-dependencies, one need to use SETTER function to assign this field,
-       this is done in order to reduce possibility of improper assigment of a dependency field */
-       base_atom_id atom_number;           /**< unique number to identify the atom */
-       base_jd_prio prio;                  /**< Atom priority. Refer to @ref base_jd_prio for more details */
-       u8 device_nr;                       /**< coregroup when BASE_JD_REQ_SPECIFIC_COHERENT_GROUP specified */
-       u8 padding[5];
-} base_jd_atom_v2;
-
-#ifdef BASE_LEGACY_UK6_SUPPORT
-struct base_jd_atom_v2_uk6 {
-       u64 jc;                     /**< job-chain GPU address */
-       struct base_jd_udata udata;                 /**< user data */
-       kbase_pointer extres_list;          /**< list of external resources */
-       u16 nr_extres;                      /**< nr of external resources */
-       base_jd_core_req core_req;          /**< core requirements */
-       base_atom_id pre_dep[2]; /**< pre-dependencies */
-       base_atom_id atom_number;           /**< unique number to identify the atom */
-       base_jd_prio prio;                  /**< priority - smaller is higher priority */
-       u8 device_nr;                       /**< coregroup when BASE_JD_REQ_SPECIFIC_COHERENT_GROUP specified */
-       u8 padding[7];
-};
-#endif
-
-typedef enum base_external_resource_access {
-       BASE_EXT_RES_ACCESS_SHARED,
-       BASE_EXT_RES_ACCESS_EXCLUSIVE
-} base_external_resource_access;
-
-typedef struct base_external_resource {
-       u64 ext_resource;
-} base_external_resource;
-
-
-/**
- * The maximum number of external resources which can be mapped/unmapped
- * in a single request.
- */
-#define BASE_EXT_RES_COUNT_MAX 10
-
-/**
- * struct base_external_resource_list - Structure which describes a list of
- *                                      external resources.
- * @count:                              The number of resources.
- * @ext_res:                            Array of external resources which is
- *                                      sized at allocation time.
- */
-struct base_external_resource_list {
-       u64 count;
-       struct base_external_resource ext_res[1];
-};
-
-struct base_jd_debug_copy_buffer {
-       u64 address;
-       u64 size;
-       struct base_external_resource extres;
-};
-
-/**
- * @brief Setter for a dependency structure
- *
- * @param[in] dep          The kbase jd atom dependency to be initialized.
- * @param     id           The atom_id to be assigned.
- * @param     dep_type     The dep_type to be assigned.
- *
- */
-static inline void base_jd_atom_dep_set(struct base_dependency *dep,
-               base_atom_id id, base_jd_dep_type dep_type)
-{
-       LOCAL_ASSERT(dep != NULL);
-
-       /*
-        * make sure we don't set not allowed combinations
-        * of atom_id/dependency_type.
-        */
-       LOCAL_ASSERT((id == 0 && dep_type == BASE_JD_DEP_TYPE_INVALID) ||
-                       (id > 0 && dep_type != BASE_JD_DEP_TYPE_INVALID));
-
-       dep->atom_id = id;
-       dep->dependency_type = dep_type;
-}
-
-/**
- * @brief Make a copy of a dependency structure
- *
- * @param[in,out] dep          The kbase jd atom dependency to be written.
- * @param[in]     from         The dependency to make a copy from.
- *
- */
-static inline void base_jd_atom_dep_copy(struct base_dependency *dep,
-               const struct base_dependency *from)
-{
-       LOCAL_ASSERT(dep != NULL);
-
-       base_jd_atom_dep_set(dep, from->atom_id, from->dependency_type);
-}
-
-/**
- * @brief Soft-atom fence trigger setup.
- *
- * Sets up an atom to be a SW-only atom signaling a fence
- * when it reaches the run state.
- *
- * Using the existing base dependency system the fence can
- * be set to trigger when a GPU job has finished.
- *
- * The base fence object must not be terminated until the atom
- * has been submitted to @a base_jd_submit_bag and @a base_jd_submit_bag has returned.
- *
- * @a fence must be a valid fence set up with @a base_fence_init.
- * Calling this function with a uninitialized fence results in undefined behavior.
- *
- * @param[out] atom A pre-allocated atom to configure as a fence trigger SW atom
- * @param[in] fence The base fence object to trigger.
- */
-static inline void base_jd_fence_trigger_setup_v2(struct base_jd_atom_v2 *atom, struct base_fence *fence)
-{
-       LOCAL_ASSERT(atom);
-       LOCAL_ASSERT(fence);
-       LOCAL_ASSERT(fence->basep.fd == INVALID_PLATFORM_FENCE);
-       LOCAL_ASSERT(fence->basep.stream_fd >= 0);
-       atom->jc = (uintptr_t) fence;
-       atom->core_req = BASE_JD_REQ_SOFT_FENCE_TRIGGER;
-}
-
-/**
- * @brief Soft-atom fence wait setup.
- *
- * Sets up an atom to be a SW-only atom waiting on a fence.
- * When the fence becomes triggered the atom becomes runnable
- * and completes immediately.
- *
- * Using the existing base dependency system the fence can
- * be set to block a GPU job until it has been triggered.
- *
- * The base fence object must not be terminated until the atom
- * has been submitted to @a base_jd_submit_bag and @a base_jd_submit_bag has returned.
- *
- * @a fence must be a valid fence set up with @a base_fence_init or @a base_fence_import.
- * Calling this function with a uninitialized fence results in undefined behavior.
- *
- * @param[out] atom A pre-allocated atom to configure as a fence wait SW atom
- * @param[in] fence The base fence object to wait on
- */
-static inline void base_jd_fence_wait_setup_v2(struct base_jd_atom_v2 *atom, struct base_fence *fence)
-{
-       LOCAL_ASSERT(atom);
-       LOCAL_ASSERT(fence);
-       LOCAL_ASSERT(fence->basep.fd >= 0);
-       atom->jc = (uintptr_t) fence;
-       atom->core_req = BASE_JD_REQ_SOFT_FENCE_WAIT;
-}
-
-/**
- * @brief External resource info initialization.
- *
- * Sets up an external resource object to reference
- * a memory allocation and the type of access requested.
- *
- * @param[in] res     The resource object to initialize
- * @param     handle  The handle to the imported memory object, must be
- *                    obtained by calling @ref base_mem_as_import_handle().
- * @param     access  The type of access requested
- */
-static inline void base_external_resource_init(struct base_external_resource *res, struct base_import_handle handle, base_external_resource_access access)
-{
-       u64 address;
-
-       address = handle.basep.handle;
-
-       LOCAL_ASSERT(res != NULL);
-       LOCAL_ASSERT(0 == (address & LOCAL_PAGE_LSB));
-       LOCAL_ASSERT(access == BASE_EXT_RES_ACCESS_SHARED || access == BASE_EXT_RES_ACCESS_EXCLUSIVE);
-
-       res->ext_resource = address | (access & LOCAL_PAGE_LSB);
-}
-
-/**
- * @brief Job chain event code bits
- * Defines the bits used to create ::base_jd_event_code
- */
-enum {
-       BASE_JD_SW_EVENT_KERNEL = (1u << 15), /**< Kernel side event */
-       BASE_JD_SW_EVENT = (1u << 14), /**< SW defined event */
-       BASE_JD_SW_EVENT_SUCCESS = (1u << 13), /**< Event idicates success (SW events only) */
-       BASE_JD_SW_EVENT_JOB = (0u << 11), /**< Job related event */
-       BASE_JD_SW_EVENT_BAG = (1u << 11), /**< Bag related event */
-       BASE_JD_SW_EVENT_INFO = (2u << 11), /**< Misc/info event */
-       BASE_JD_SW_EVENT_RESERVED = (3u << 11), /**< Reserved event type */
-       BASE_JD_SW_EVENT_TYPE_MASK = (3u << 11)     /**< Mask to extract the type from an event code */
-};
-
-/**
- * @brief Job chain event codes
- *
- * HW and low-level SW events are represented by event codes.
- * The status of jobs which succeeded are also represented by
- * an event code (see ::BASE_JD_EVENT_DONE).
- * Events are usually reported as part of a ::base_jd_event.
- *
- * The event codes are encoded in the following way:
- * @li 10:0  - subtype
- * @li 12:11 - type
- * @li 13    - SW success (only valid if the SW bit is set)
- * @li 14    - SW event (HW event if not set)
- * @li 15    - Kernel event (should never be seen in userspace)
- *
- * Events are split up into ranges as follows:
- * - BASE_JD_EVENT_RANGE_\<description\>_START
- * - BASE_JD_EVENT_RANGE_\<description\>_END
- *
- * \a code is in \<description\>'s range when:
- * - <tt>BASE_JD_EVENT_RANGE_\<description\>_START <= code < BASE_JD_EVENT_RANGE_\<description\>_END </tt>
- *
- * Ranges can be asserted for adjacency by testing that the END of the previous
- * is equal to the START of the next. This is useful for optimizing some tests
- * for range.
- *
- * A limitation is that the last member of this enum must explicitly be handled
- * (with an assert-unreachable statement) in switch statements that use
- * variables of this type. Otherwise, the compiler warns that we have not
- * handled that enum value.
- */
-typedef enum base_jd_event_code {
-       /* HW defined exceptions */
-
-       /** Start of HW Non-fault status codes
-        *
-        * @note Obscurely, BASE_JD_EVENT_TERMINATED indicates a real fault,
-        * because the job was hard-stopped
-        */
-       BASE_JD_EVENT_RANGE_HW_NONFAULT_START = 0,
-
-       /* non-fatal exceptions */
-       BASE_JD_EVENT_NOT_STARTED = 0x00, /**< Can't be seen by userspace, treated as 'previous job done' */
-       BASE_JD_EVENT_DONE = 0x01,
-       BASE_JD_EVENT_STOPPED = 0x03,     /**< Can't be seen by userspace, becomes TERMINATED, DONE or JOB_CANCELLED */
-       BASE_JD_EVENT_TERMINATED = 0x04,  /**< This is actually a fault status code - the job was hard stopped */
-       BASE_JD_EVENT_ACTIVE = 0x08,      /**< Can't be seen by userspace, jobs only returned on complete/fail/cancel */
-
-       /** End of HW Non-fault status codes
-        *
-        * @note Obscurely, BASE_JD_EVENT_TERMINATED indicates a real fault,
-        * because the job was hard-stopped
-        */
-       BASE_JD_EVENT_RANGE_HW_NONFAULT_END = 0x40,
-
-       /** Start of HW fault and SW Error status codes */
-       BASE_JD_EVENT_RANGE_HW_FAULT_OR_SW_ERROR_START = 0x40,
-
-       /* job exceptions */
-       BASE_JD_EVENT_JOB_CONFIG_FAULT = 0x40,
-       BASE_JD_EVENT_JOB_POWER_FAULT = 0x41,
-       BASE_JD_EVENT_JOB_READ_FAULT = 0x42,
-       BASE_JD_EVENT_JOB_WRITE_FAULT = 0x43,
-       BASE_JD_EVENT_JOB_AFFINITY_FAULT = 0x44,
-       BASE_JD_EVENT_JOB_BUS_FAULT = 0x48,
-       BASE_JD_EVENT_INSTR_INVALID_PC = 0x50,
-       BASE_JD_EVENT_INSTR_INVALID_ENC = 0x51,
-       BASE_JD_EVENT_INSTR_TYPE_MISMATCH = 0x52,
-       BASE_JD_EVENT_INSTR_OPERAND_FAULT = 0x53,
-       BASE_JD_EVENT_INSTR_TLS_FAULT = 0x54,
-       BASE_JD_EVENT_INSTR_BARRIER_FAULT = 0x55,
-       BASE_JD_EVENT_INSTR_ALIGN_FAULT = 0x56,
-       BASE_JD_EVENT_DATA_INVALID_FAULT = 0x58,
-       BASE_JD_EVENT_TILE_RANGE_FAULT = 0x59,
-       BASE_JD_EVENT_STATE_FAULT = 0x5A,
-       BASE_JD_EVENT_OUT_OF_MEMORY = 0x60,
-       BASE_JD_EVENT_UNKNOWN = 0x7F,
-
-       /* GPU exceptions */
-       BASE_JD_EVENT_DELAYED_BUS_FAULT = 0x80,
-       BASE_JD_EVENT_SHAREABILITY_FAULT = 0x88,
-
-       /* MMU exceptions */
-       BASE_JD_EVENT_TRANSLATION_FAULT_LEVEL1 = 0xC1,
-       BASE_JD_EVENT_TRANSLATION_FAULT_LEVEL2 = 0xC2,
-       BASE_JD_EVENT_TRANSLATION_FAULT_LEVEL3 = 0xC3,
-       BASE_JD_EVENT_TRANSLATION_FAULT_LEVEL4 = 0xC4,
-       BASE_JD_EVENT_PERMISSION_FAULT = 0xC8,
-       BASE_JD_EVENT_TRANSTAB_BUS_FAULT_LEVEL1 = 0xD1,
-       BASE_JD_EVENT_TRANSTAB_BUS_FAULT_LEVEL2 = 0xD2,
-       BASE_JD_EVENT_TRANSTAB_BUS_FAULT_LEVEL3 = 0xD3,
-       BASE_JD_EVENT_TRANSTAB_BUS_FAULT_LEVEL4 = 0xD4,
-       BASE_JD_EVENT_ACCESS_FLAG = 0xD8,
-
-       /* SW defined exceptions */
-       BASE_JD_EVENT_MEM_GROWTH_FAILED = BASE_JD_SW_EVENT | BASE_JD_SW_EVENT_JOB | 0x000,
-       BASE_JD_EVENT_TIMED_OUT         = BASE_JD_SW_EVENT | BASE_JD_SW_EVENT_JOB | 0x001,
-       BASE_JD_EVENT_JOB_CANCELLED     = BASE_JD_SW_EVENT | BASE_JD_SW_EVENT_JOB | 0x002,
-       BASE_JD_EVENT_JOB_INVALID       = BASE_JD_SW_EVENT | BASE_JD_SW_EVENT_JOB | 0x003,
-       BASE_JD_EVENT_PM_EVENT          = BASE_JD_SW_EVENT | BASE_JD_SW_EVENT_JOB | 0x004,
-       BASE_JD_EVENT_FORCE_REPLAY      = BASE_JD_SW_EVENT | BASE_JD_SW_EVENT_JOB | 0x005,
-
-       BASE_JD_EVENT_BAG_INVALID       = BASE_JD_SW_EVENT | BASE_JD_SW_EVENT_BAG | 0x003,
-
-       /** End of HW fault and SW Error status codes */
-       BASE_JD_EVENT_RANGE_HW_FAULT_OR_SW_ERROR_END = BASE_JD_SW_EVENT | BASE_JD_SW_EVENT_RESERVED | 0x3FF,
-
-       /** Start of SW Success status codes */
-       BASE_JD_EVENT_RANGE_SW_SUCCESS_START = BASE_JD_SW_EVENT | BASE_JD_SW_EVENT_SUCCESS | 0x000,
-
-       BASE_JD_EVENT_PROGRESS_REPORT = BASE_JD_SW_EVENT | BASE_JD_SW_EVENT_SUCCESS | BASE_JD_SW_EVENT_JOB | 0x000,
-       BASE_JD_EVENT_BAG_DONE = BASE_JD_SW_EVENT | BASE_JD_SW_EVENT_SUCCESS | BASE_JD_SW_EVENT_BAG | 0x000,
-       BASE_JD_EVENT_DRV_TERMINATED = BASE_JD_SW_EVENT | BASE_JD_SW_EVENT_SUCCESS | BASE_JD_SW_EVENT_INFO | 0x000,
-
-       /** End of SW Success status codes */
-       BASE_JD_EVENT_RANGE_SW_SUCCESS_END = BASE_JD_SW_EVENT | BASE_JD_SW_EVENT_SUCCESS | BASE_JD_SW_EVENT_RESERVED | 0x3FF,
-
-       /** Start of Kernel-only status codes. Such codes are never returned to user-space */
-       BASE_JD_EVENT_RANGE_KERNEL_ONLY_START = BASE_JD_SW_EVENT | BASE_JD_SW_EVENT_KERNEL | 0x000,
-       BASE_JD_EVENT_REMOVED_FROM_NEXT = BASE_JD_SW_EVENT | BASE_JD_SW_EVENT_KERNEL | BASE_JD_SW_EVENT_JOB | 0x000,
-
-       /** End of Kernel-only status codes. */
-       BASE_JD_EVENT_RANGE_KERNEL_ONLY_END = BASE_JD_SW_EVENT | BASE_JD_SW_EVENT_KERNEL | BASE_JD_SW_EVENT_RESERVED | 0x3FF
-} base_jd_event_code;
-
-/**
- * @brief Event reporting structure
- *
- * This structure is used by the kernel driver to report information
- * about GPU events. The can either be HW-specific events or low-level
- * SW events, such as job-chain completion.
- *
- * The event code contains an event type field which can be extracted
- * by ANDing with ::BASE_JD_SW_EVENT_TYPE_MASK.
- *
- * Based on the event type base_jd_event::data holds:
- * @li ::BASE_JD_SW_EVENT_JOB : the offset in the ring-buffer for the completed
- * job-chain
- * @li ::BASE_JD_SW_EVENT_BAG : The address of the ::base_jd_bag that has
- * been completed (ie all contained job-chains have been completed).
- * @li ::BASE_JD_SW_EVENT_INFO : base_jd_event::data not used
- */
-typedef struct base_jd_event_v2 {
-       base_jd_event_code event_code;  /**< event code */
-       base_atom_id atom_number;       /**< the atom number that has completed */
-       struct base_jd_udata udata;     /**< user data */
-} base_jd_event_v2;
-
-/**
- * Padding required to ensure that the @ref struct base_dump_cpu_gpu_counters structure fills
- * a full cache line.
- */
-
-#define BASE_CPU_GPU_CACHE_LINE_PADDING (36)
-
-
-/**
- * @brief Structure for BASE_JD_REQ_SOFT_DUMP_CPU_GPU_COUNTERS jobs.
- *
- * This structure is stored into the memory pointed to by the @c jc field of @ref base_jd_atom.
- *
- * This structure must be padded to ensure that it will occupy whole cache lines. This is to avoid
- * cases where access to pages containing the structure is shared between cached and un-cached
- * memory regions, which would cause memory corruption.  Here we set the structure size to be 64 bytes
- * which is the cache line for ARM A15 processors.
- */
-
-typedef struct base_dump_cpu_gpu_counters {
-       u64 system_time;
-       u64 cycle_counter;
-       u64 sec;
-       u32 usec;
-       u8 padding[BASE_CPU_GPU_CACHE_LINE_PADDING];
-} base_dump_cpu_gpu_counters;
-
-
-
-/** @} end group base_user_api_job_dispatch */
-
-#define GPU_MAX_JOB_SLOTS 16
-
-/**
- * @page page_base_user_api_gpuprops User-side Base GPU Property Query API
- *
- * The User-side Base GPU Property Query API encapsulates two
- * sub-modules:
- *
- * - @ref base_user_api_gpuprops_dyn "Dynamic GPU Properties"
- * - @ref base_plat_config_gpuprops "Base Platform Config GPU Properties"
- *
- * There is a related third module outside of Base, which is owned by the MIDG
- * module:
- * - @ref gpu_props_static "Midgard Compile-time GPU Properties"
- *
- * Base only deals with properties that vary between different Midgard
- * implementations - the Dynamic GPU properties and the Platform Config
- * properties.
- *
- * For properties that are constant for the Midgard Architecture, refer to the
- * MIDG module. However, we will discuss their relevance here <b>just to
- * provide background information.</b>
- *
- * @section sec_base_user_api_gpuprops_about About the GPU Properties in Base and MIDG modules
- *
- * The compile-time properties (Platform Config, Midgard Compile-time
- * properties) are exposed as pre-processor macros.
- *
- * Complementing the compile-time properties are the Dynamic GPU
- * Properties, which act as a conduit for the Midgard Configuration
- * Discovery.
- *
- * In general, the dynamic properties are present to verify that the platform
- * has been configured correctly with the right set of Platform Config
- * Compile-time Properties.
- *
- * As a consistant guide across the entire DDK, the choice for dynamic or
- * compile-time should consider the following, in order:
- * -# Can the code be written so that it doesn't need to know the
- * implementation limits at all?
- * -# If you need the limits, get the information from the Dynamic Property
- * lookup. This should be done once as you fetch the context, and then cached
- * as part of the context data structure, so it's cheap to access.
- * -# If there's a clear and arguable inefficiency in using Dynamic Properties,
- * then use a Compile-Time Property (Platform Config, or Midgard Compile-time
- * property). Examples of where this might be sensible follow:
- *  - Part of a critical inner-loop
- *  - Frequent re-use throughout the driver, causing significant extra load
- * instructions or control flow that would be worthwhile optimizing out.
- *
- * We cannot provide an exhaustive set of examples, neither can we provide a
- * rule for every possible situation. Use common sense, and think about: what
- * the rest of the driver will be doing; how the compiler might represent the
- * value if it is a compile-time constant; whether an OEM shipping multiple
- * devices would benefit much more from a single DDK binary, instead of
- * insignificant micro-optimizations.
- *
- * @section sec_base_user_api_gpuprops_dyn Dynamic GPU Properties
- *
- * Dynamic GPU properties are presented in two sets:
- * -# the commonly used properties in @ref base_gpu_props, which have been
- * unpacked from GPU register bitfields.
- * -# The full set of raw, unprocessed properties in @ref gpu_raw_gpu_props
- * (also a member of @ref base_gpu_props). All of these are presented in
- * the packed form, as presented by the GPU  registers themselves.
- *
- * @usecase The raw properties in @ref gpu_raw_gpu_props are necessary to
- * allow a user of the Mali Tools (e.g. PAT) to determine "Why is this device
- * behaving differently?". In this case, all information about the
- * configuration is potentially useful, but it <b>does not need to be processed
- * by the driver</b>. Instead, the raw registers can be processed by the Mali
- * Tools software on the host PC.
- *
- * The properties returned extend the Midgard Configuration Discovery
- * registers. For example, GPU clock speed is not specified in the Midgard
- * Architecture, but is <b>necessary for OpenCL's clGetDeviceInfo() function</b>.
- *
- * The GPU properties are obtained by a call to
- * _mali_base_get_gpu_props(). This simply returns a pointer to a const
- * base_gpu_props structure. It is constant for the life of a base
- * context. Multiple calls to _mali_base_get_gpu_props() to a base context
- * return the same pointer to a constant structure. This avoids cache pollution
- * of the common data.
- *
- * This pointer must not be freed, because it does not point to the start of a
- * region allocated by the memory allocator; instead, just close the @ref
- * base_context.
- *
- *
- * @section sec_base_user_api_gpuprops_config Platform Config Compile-time Properties
- *
- * The Platform Config File sets up gpu properties that are specific to a
- * certain platform. Properties that are 'Implementation Defined' in the
- * Midgard Architecture spec are placed here.
- *
- * @note Reference configurations are provided for Midgard Implementations, such as
- * the Mali-T600 family. The customer need not repeat this information, and can select one of
- * these reference configurations. For example, VA_BITS, PA_BITS and the
- * maximum number of samples per pixel might vary between Midgard Implementations, but
- * \b not for platforms using the Mali-T604. This information is placed in
- * the reference configuration files.
- *
- * The System Integrator creates the following structure:
- * - platform_XYZ
- * - platform_XYZ/plat
- * - platform_XYZ/plat/plat_config.h
- *
- * They then edit plat_config.h, using the example plat_config.h files as a
- * guide.
- *
- * At the very least, the customer must set @ref CONFIG_GPU_CORE_TYPE, and will
- * receive a helpful \#error message if they do not do this correctly. This
- * selects the Reference Configuration for the Midgard Implementation. The rationale
- * behind this decision (against asking the customer to write \#include
- * <gpus/mali_t600.h> in their plat_config.h) is as follows:
- * - This mechanism 'looks' like a regular config file (such as Linux's
- * .config)
- * - It is difficult to get wrong in a way that will produce strange build
- * errors:
- *  - They need not know where the mali_t600.h, other_midg_gpu.h etc. files are stored - and
- *  so they won't accidentally pick another file with 'mali_t600' in its name
- *  - When the build doesn't work, the System Integrator may think the DDK is
- *  doesn't work, and attempt to fix it themselves:
- *   - For the @ref CONFIG_GPU_CORE_TYPE mechanism, the only way to get past the
- *   error is to set @ref CONFIG_GPU_CORE_TYPE, and this is what the \#error tells
- *   you.
- *   - For a \#include mechanism, checks must still be made elsewhere, which the
- *   System Integrator may try working around by setting \#defines (such as
- *   VA_BITS) themselves in their plat_config.h. In the  worst case, they may
- *   set the prevention-mechanism \#define of
- *   "A_CORRECT_MIDGARD_CORE_WAS_CHOSEN".
- *   - In this case, they would believe they are on the right track, because
- *   the build progresses with their fix, but with errors elsewhere.
- *
- * However, there is nothing to prevent the customer using \#include to organize
- * their own configurations files hierarchically.
- *
- * The mechanism for the header file processing is as follows:
- *
- * @dot
-   digraph plat_config_mechanism {
-          rankdir=BT
-          size="6,6"
-
-       "mali_base.h";
-          "gpu/mali_gpu.h";
-
-          node [ shape=box ];
-          {
-              rank = same; ordering = out;
-
-                  "gpu/mali_gpu_props.h";
-                  "base/midg_gpus/mali_t600.h";
-                  "base/midg_gpus/other_midg_gpu.h";
-          }
-          { rank = same; "plat/plat_config.h"; }
-          {
-              rank = same;
-                  "gpu/mali_gpu.h" [ shape=box ];
-                  gpu_chooser [ label="" style="invisible" width=0 height=0 fixedsize=true ];
-                  select_gpu [ label="Mali-T600 | Other\n(select_gpu.h)" shape=polygon,sides=4,distortion=0.25 width=3.3 height=0.99 fixedsize=true ] ;
-          }
-          node [ shape=box ];
-          { rank = same; "plat/plat_config.h"; }
-          { rank = same; "mali_base.h"; }
-
-          "mali_base.h" -> "gpu/mali_gpu.h" -> "gpu/mali_gpu_props.h";
-          "mali_base.h" -> "plat/plat_config.h" ;
-          "mali_base.h" -> select_gpu ;
-
-          "plat/plat_config.h" -> gpu_chooser [style="dotted,bold" dir=none weight=4] ;
-          gpu_chooser -> select_gpu [style="dotted,bold"] ;
-
-          select_gpu -> "base/midg_gpus/mali_t600.h" ;
-          select_gpu -> "base/midg_gpus/other_midg_gpu.h" ;
-   }
-   @enddot
- *
- *
- * @section sec_base_user_api_gpuprops_kernel Kernel Operation
- *
- * During Base Context Create time, user-side makes a single kernel call:
- * - A call to fill user memory with GPU information structures
- *
- * The kernel-side will fill the provided the entire processed @ref base_gpu_props
- * structure, because this information is required in both
- * user and kernel side; it does not make sense to decode it twice.
- *
- * Coherency groups must be derived from the bitmasks, but this can be done
- * kernel side, and just once at kernel startup: Coherency groups must already
- * be known kernel-side, to support chains that specify a 'Only Coherent Group'
- * SW requirement, or 'Only Coherent Group with Tiler' SW requirement.
- *
- * @section sec_base_user_api_gpuprops_cocalc Coherency Group calculation
- * Creation of the coherent group data is done at device-driver startup, and so
- * is one-time. This will most likely involve a loop with CLZ, shifting, and
- * bit clearing on the L2_PRESENT mask, depending on whether the
- * system is L2 Coherent. The number of shader cores is done by a
- * population count, since faulty cores may be disabled during production,
- * producing a non-contiguous mask.
- *
- * The memory requirements for this algoirthm can be determined either by a u64
- * population count on the L2_PRESENT mask (a LUT helper already is
- * requried for the above), or simple assumption that there can be no more than
- * 16 coherent groups, since core groups are typically 4 cores.
- */
-
-/**
- * @addtogroup base_user_api_gpuprops User-side Base GPU Property Query APIs
- * @{
- */
-
-/**
- * @addtogroup base_user_api_gpuprops_dyn Dynamic HW Properties
- * @{
- */
-
-#define BASE_GPU_NUM_TEXTURE_FEATURES_REGISTERS 3
-
-#define BASE_MAX_COHERENT_GROUPS 16
-
-struct mali_base_gpu_core_props {
-       /**
-        * Product specific value.
-        */
-       u32 product_id;
-
-       /**
-        * Status of the GPU release.
-     * No defined values, but starts at 0 and increases by one for each release
-     * status (alpha, beta, EAC, etc.).
-     * 4 bit values (0-15).
-        */
-       u16 version_status;
-
-       /**
-        * Minor release number of the GPU. "P" part of an "RnPn" release number.
-     * 8 bit values (0-255).
-        */
-       u16 minor_revision;
-
-       /**
-        * Major release number of the GPU. "R" part of an "RnPn" release number.
-     * 4 bit values (0-15).
-        */
-       u16 major_revision;
-
-       u16 padding;
-
-       /**
-        * @usecase GPU clock speed is not specified in the Midgard Architecture, but is
-        * <b>necessary for OpenCL's clGetDeviceInfo() function</b>.
-        */
-       u32 gpu_speed_mhz;
-
-       /**
-        * @usecase GPU clock max/min speed is required for computing best/worst case
-        * in tasks as job scheduling ant irq_throttling. (It is not specified in the
-        *  Midgard Architecture).
-        */
-       u32 gpu_freq_khz_max;
-       u32 gpu_freq_khz_min;
-
-       /**
-        * Size of the shader program counter, in bits.
-        */
-       u32 log2_program_counter_size;
-
-       /**
-        * TEXTURE_FEATURES_x registers, as exposed by the GPU. This is a
-        * bitpattern where a set bit indicates that the format is supported.
-        *
-        * Before using a texture format, it is recommended that the corresponding
-        * bit be checked.
-        */
-       u32 texture_features[BASE_GPU_NUM_TEXTURE_FEATURES_REGISTERS];
-
-       /**
-        * Theoretical maximum memory available to the GPU. It is unlikely that a
-        * client will be able to allocate all of this memory for their own
-        * purposes, but this at least provides an upper bound on the memory
-        * available to the GPU.
-        *
-        * This is required for OpenCL's clGetDeviceInfo() call when
-        * CL_DEVICE_GLOBAL_MEM_SIZE is requested, for OpenCL GPU devices. The
-        * client will not be expecting to allocate anywhere near this value.
-        */
-       u64 gpu_available_memory_size;
-};
-
-/**
- *
- * More information is possible - but associativity and bus width are not
- * required by upper-level apis.
- */
-struct mali_base_gpu_l2_cache_props {
-       u8 log2_line_size;
-       u8 log2_cache_size;
-       u8 num_l2_slices; /* Number of L2C slices. 1 or higher */
-       u8 padding[5];
-};
-
-struct mali_base_gpu_tiler_props {
-       u32 bin_size_bytes;     /* Max is 4*2^15 */
-       u32 max_active_levels;  /* Max is 2^15 */
-};
-
-/**
- * GPU threading system details.
- */
-struct mali_base_gpu_thread_props {
-       u32 max_threads;            /* Max. number of threads per core */
-       u32 max_workgroup_size;     /* Max. number of threads per workgroup */
-       u32 max_barrier_size;       /* Max. number of threads that can synchronize on a simple barrier */
-       u16 max_registers;          /* Total size [1..65535] of the register file available per core. */
-       u8  max_task_queue;         /* Max. tasks [1..255] which may be sent to a core before it becomes blocked. */
-       u8  max_thread_group_split; /* Max. allowed value [1..15] of the Thread Group Split field. */
-       u8  impl_tech;              /* 0 = Not specified, 1 = Silicon, 2 = FPGA, 3 = SW Model/Emulation */
-       u8  padding[7];
-};
-
-/**
- * @brief descriptor for a coherent group
- *
- * \c core_mask exposes all cores in that coherent group, and \c num_cores
- * provides a cached population-count for that mask.
- *
- * @note Whilst all cores are exposed in the mask, not all may be available to
- * the application, depending on the Kernel Power policy.
- *
- * @note if u64s must be 8-byte aligned, then this structure has 32-bits of wastage.
- */
-struct mali_base_gpu_coherent_group {
-       u64 core_mask;         /**< Core restriction mask required for the group */
-       u16 num_cores;         /**< Number of cores in the group */
-       u16 padding[3];
-};
-
-/**
- * @brief Coherency group information
- *
- * Note that the sizes of the members could be reduced. However, the \c group
- * member might be 8-byte aligned to ensure the u64 core_mask is 8-byte
- * aligned, thus leading to wastage if the other members sizes were reduced.
- *
- * The groups are sorted by core mask. The core masks are non-repeating and do
- * not intersect.
- */
-struct mali_base_gpu_coherent_group_info {
-       u32 num_groups;
-
-       /**
-        * Number of core groups (coherent or not) in the GPU. Equivalent to the number of L2 Caches.
-        *
-        * The GPU Counter dumping writes 2048 bytes per core group, regardless of
-        * whether the core groups are coherent or not. Hence this member is needed
-        * to calculate how much memory is required for dumping.
-        *
-        * @note Do not use it to work out how many valid elements are in the
-        * group[] member. Use num_groups instead.
-        */
-       u32 num_core_groups;
-
-       /**
-        * Coherency features of the memory, accessed by @ref gpu_mem_features
-        * methods
-        */
-       u32 coherency;
-
-       u32 padding;
-
-       /**
-        * Descriptors of coherent groups
-        */
-       struct mali_base_gpu_coherent_group group[BASE_MAX_COHERENT_GROUPS];
-};
-
-/**
- * A complete description of the GPU's Hardware Configuration Discovery
- * registers.
- *
- * The information is presented inefficiently for access. For frequent access,
- * the values should be better expressed in an unpacked form in the
- * base_gpu_props structure.
- *
- * @usecase The raw properties in @ref gpu_raw_gpu_props are necessary to
- * allow a user of the Mali Tools (e.g. PAT) to determine "Why is this device
- * behaving differently?". In this case, all information about the
- * configuration is potentially useful, but it <b>does not need to be processed
- * by the driver</b>. Instead, the raw registers can be processed by the Mali
- * Tools software on the host PC.
- *
- */
-struct gpu_raw_gpu_props {
-       u64 shader_present;
-       u64 tiler_present;
-       u64 l2_present;
-       u64 unused_1; /* keep for backward compatibility */
-
-       u32 l2_features;
-       u32 suspend_size; /* API 8.2+ */
-       u32 mem_features;
-       u32 mmu_features;
-
-       u32 as_present;
-
-       u32 js_present;
-       u32 js_features[GPU_MAX_JOB_SLOTS];
-       u32 tiler_features;
-       u32 texture_features[3];
-
-       u32 gpu_id;
-
-       u32 thread_max_threads;
-       u32 thread_max_workgroup_size;
-       u32 thread_max_barrier_size;
-       u32 thread_features;
-
-       /*
-        * Note: This is the _selected_ coherency mode rather than the
-        * available modes as exposed in the coherency_features register.
-        */
-       u32 coherency_mode;
-};
-
-/**
- * Return structure for _mali_base_get_gpu_props().
- *
- * NOTE: the raw_props member in this datastructure contains the register
- * values from which the value of the other members are derived. The derived
- * members exist to allow for efficient access and/or shielding the details
- * of the layout of the registers.
- *
- */
-typedef struct mali_base_gpu_props {
-       struct mali_base_gpu_core_props core_props;
-       struct mali_base_gpu_l2_cache_props l2_props;
-       u64 unused_1; /* keep for backwards compatibility */
-       struct mali_base_gpu_tiler_props tiler_props;
-       struct mali_base_gpu_thread_props thread_props;
-
-       /** This member is large, likely to be 128 bytes */
-       struct gpu_raw_gpu_props raw_props;
-
-       /** This must be last member of the structure */
-       struct mali_base_gpu_coherent_group_info coherency_info;
-} base_gpu_props;
-
-/** @} end group base_user_api_gpuprops_dyn */
-
-/** @} end group base_user_api_gpuprops */
-
-/**
- * @addtogroup base_user_api_core User-side Base core APIs
- * @{
- */
-
-/**
- * \enum base_context_create_flags
- *
- * Flags to pass to ::base_context_init.
- * Flags can be ORed together to enable multiple things.
- *
- * These share the same space as @ref basep_context_private_flags, and so must
- * not collide with them.
- */
-enum base_context_create_flags {
-       /** No flags set */
-       BASE_CONTEXT_CREATE_FLAG_NONE = 0,
-
-       /** Base context is embedded in a cctx object (flag used for CINSTR software counter macros) */
-       BASE_CONTEXT_CCTX_EMBEDDED = (1u << 0),
-
-       /** Base context is a 'System Monitor' context for Hardware counters.
-        *
-        * One important side effect of this is that job submission is disabled. */
-       BASE_CONTEXT_SYSTEM_MONITOR_SUBMIT_DISABLED = (1u << 1)
-};
-
-/**
- * Bitpattern describing the ::base_context_create_flags that can be passed to base_context_init()
- */
-#define BASE_CONTEXT_CREATE_ALLOWED_FLAGS \
-       (((u32)BASE_CONTEXT_CCTX_EMBEDDED) | \
-         ((u32)BASE_CONTEXT_SYSTEM_MONITOR_SUBMIT_DISABLED))
-
-/**
- * Bitpattern describing the ::base_context_create_flags that can be passed to the kernel
- */
-#define BASE_CONTEXT_CREATE_KERNEL_FLAGS \
-       ((u32)BASE_CONTEXT_SYSTEM_MONITOR_SUBMIT_DISABLED)
-
-/**
- * Private flags used on the base context
- *
- * These start at bit 31, and run down to zero.
- *
- * They share the same space as @ref base_context_create_flags, and so must
- * not collide with them.
- */
-enum basep_context_private_flags {
-       /** Private flag tracking whether job descriptor dumping is disabled */
-       BASEP_CONTEXT_FLAG_JOB_DUMP_DISABLED = (1 << 31)
-};
-
-/** @} end group base_user_api_core */
-
-/** @} end group base_user_api */
-
-/**
- * @addtogroup base_plat_config_gpuprops Base Platform Config GPU Properties
- * @{
- *
- * C Pre-processor macros are exposed here to do with Platform
- * Config.
- *
- * These include:
- * - GPU Properties that are constant on a particular Midgard Family
- * Implementation e.g. Maximum samples per pixel on Mali-T600.
- * - General platform config for the GPU, such as the GPU major and minor
- * revison.
- */
-
-/** @} end group base_plat_config_gpuprops */
-
-/**
- * @addtogroup base_api Base APIs
- * @{
- */
-
-/**
- * @brief The payload for a replay job. This must be in GPU memory.
- */
-typedef struct base_jd_replay_payload {
-       /**
-        * Pointer to the first entry in the base_jd_replay_jc list.  These
-        * will be replayed in @b reverse order (so that extra ones can be added
-        * to the head in future soft jobs without affecting this soft job)
-        */
-       u64 tiler_jc_list;
-
-       /**
-        * Pointer to the fragment job chain.
-        */
-       u64 fragment_jc;
-
-       /**
-        * Pointer to the tiler heap free FBD field to be modified.
-        */
-       u64 tiler_heap_free;
-
-       /**
-        * Hierarchy mask for the replayed fragment jobs. May be zero.
-        */
-       u16 fragment_hierarchy_mask;
-
-       /**
-        * Hierarchy mask for the replayed tiler jobs. May be zero.
-        */
-       u16 tiler_hierarchy_mask;
-
-       /**
-        * Default weight to be used for hierarchy levels not in the original
-        * mask.
-        */
-       u32 hierarchy_default_weight;
-
-       /**
-        * Core requirements for the tiler job chain
-        */
-       base_jd_core_req tiler_core_req;
-
-       /**
-        * Core requirements for the fragment job chain
-        */
-       base_jd_core_req fragment_core_req;
-
-       u8 padding[4];
-} base_jd_replay_payload;
-
-/**
- * @brief An entry in the linked list of job chains to be replayed. This must
- *        be in GPU memory.
- */
-typedef struct base_jd_replay_jc {
-       /**
-        * Pointer to next entry in the list. A setting of NULL indicates the
-        * end of the list.
-        */
-       u64 next;
-
-       /**
-        * Pointer to the job chain.
-        */
-       u64 jc;
-
-} base_jd_replay_jc;
-
-/* Maximum number of jobs allowed in a fragment chain in the payload of a
- * replay job */
-#define BASE_JD_REPLAY_F_CHAIN_JOB_LIMIT 256
-
-/** @} end group base_api */
-
-typedef struct base_profiling_controls {
-       u32 profiling_controls[FBDUMP_CONTROL_MAX];
-} base_profiling_controls;
-
-#endif                         /* _BASE_KERNEL_H_ */
diff --git a/midgard/mali_base_kernel_sync.h b/midgard/mali_base_kernel_sync.h
deleted file mode 100644 (file)
index a24791f..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2012-2013 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
- * Base cross-proccess sync API.
- */
-
-#ifndef _BASE_KERNEL_SYNC_H_
-#define _BASE_KERNEL_SYNC_H_
-
-#include <linux/ioctl.h>
-
-#define STREAM_IOC_MAGIC '~'
-
-/* Fence insert.
- *
- * Inserts a fence on the stream operated on.
- * Fence can be waited via a base fence wait soft-job
- * or triggered via a base fence trigger soft-job.
- *
- * Fences must be cleaned up with close when no longer needed.
- *
- * No input/output arguments.
- * Returns
- * >=0 fd
- * <0  error code
- */
-#define STREAM_IOC_FENCE_INSERT _IO(STREAM_IOC_MAGIC, 0)
-
-#endif                         /* _BASE_KERNEL_SYNC_H_ */
diff --git a/midgard/mali_base_mem_priv.h b/midgard/mali_base_mem_priv.h
deleted file mode 100644 (file)
index 4a98a72..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2010-2014 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.
- *
- */
-
-
-
-
-
-#ifndef _BASE_MEM_PRIV_H_
-#define _BASE_MEM_PRIV_H_
-
-#define BASE_SYNCSET_OP_MSYNC  (1U << 0)
-#define BASE_SYNCSET_OP_CSYNC  (1U << 1)
-
-/*
- * This structure describe a basic memory coherency operation.
- * It can either be:
- * @li a sync from CPU to Memory:
- *     - type = ::BASE_SYNCSET_OP_MSYNC
- *     - mem_handle = a handle to the memory object on which the operation
- *       is taking place
- *     - user_addr = the address of the range to be synced
- *     - size = the amount of data to be synced, in bytes
- *     - offset is ignored.
- * @li a sync from Memory to CPU:
- *     - type = ::BASE_SYNCSET_OP_CSYNC
- *     - mem_handle = a handle to the memory object on which the operation
- *       is taking place
- *     - user_addr = the address of the range to be synced
- *     - size = the amount of data to be synced, in bytes.
- *     - offset is ignored.
- */
-struct basep_syncset {
-       base_mem_handle mem_handle;
-       u64 user_addr;
-       u64 size;
-       u8 type;
-       u8 padding[7];
-};
-
-#endif
diff --git a/midgard/mali_base_vendor_specific_func.h b/midgard/mali_base_vendor_specific_func.h
deleted file mode 100644 (file)
index be454a2..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2010, 2012-2013, 2015 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.
- *
- */
-
-
-
-
-#ifndef _BASE_VENDOR_SPEC_FUNC_H_
-#define _BASE_VENDOR_SPEC_FUNC_H_
-
-int kbase_get_vendor_specific_cpu_clock_speed(u32 * const);
-
-#endif /*_BASE_VENDOR_SPEC_FUNC_H_*/
diff --git a/midgard/mali_kbase.h b/midgard/mali_kbase.h
deleted file mode 100644 (file)
index f09b30a..0000000
+++ /dev/null
@@ -1,549 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2010-2016 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.
- *
- */
-
-
-
-
-
-#ifndef _KBASE_H_
-#define _KBASE_H_
-
-#include <mali_malisw.h>
-
-#include <mali_kbase_debug.h>
-
-#include <asm/page.h>
-
-#include <linux/atomic.h>
-#include <linux/highmem.h>
-#include <linux/hrtimer.h>
-#include <linux/ktime.h>
-#include <linux/list.h>
-#include <linux/mm_types.h>
-#include <linux/mutex.h>
-#include <linux/rwsem.h>
-#include <linux/sched.h>
-#include <linux/slab.h>
-#include <linux/spinlock.h>
-#include <linux/vmalloc.h>
-#include <linux/wait.h>
-#include <linux/workqueue.h>
-
-#include "mali_base_kernel.h"
-#include <mali_kbase_uku.h>
-#include <mali_kbase_linux.h>
-
-#include "mali_kbase_strings.h"
-#include "mali_kbase_pm.h"
-#include "mali_kbase_mem_lowlevel.h"
-#include "mali_kbase_defs.h"
-#include "mali_kbase_trace_timeline.h"
-#include "mali_kbase_js.h"
-#include "mali_kbase_mem.h"
-#include "mali_kbase_utility.h"
-#include "mali_kbase_gpu_memory_debugfs.h"
-#include "mali_kbase_mem_profile_debugfs.h"
-#include "mali_kbase_debug_job_fault.h"
-#include "mali_kbase_jd_debugfs.h"
-#include "mali_kbase_gpuprops.h"
-#include "mali_kbase_jm.h"
-#include "mali_kbase_vinstr.h"
-#include "mali_kbase_ipa.h"
-#ifdef CONFIG_GPU_TRACEPOINTS
-#include <trace/events/gpu.h>
-#endif
-/**
- * @page page_base_kernel_main Kernel-side Base (KBase) APIs
- *
- * The Kernel-side Base (KBase) APIs are divided up as follows:
- * - @subpage page_kbase_js_policy
- */
-
-/**
- * @defgroup base_kbase_api Kernel-side Base (KBase) APIs
- */
-
-struct kbase_device *kbase_device_alloc(void);
-/*
-* note: configuration attributes member of kbdev needs to have
-* been setup before calling kbase_device_init
-*/
-
-/*
-* API to acquire device list semaphore and return pointer
-* to the device list head
-*/
-const struct list_head *kbase_dev_list_get(void);
-/* API to release the device list semaphore */
-void kbase_dev_list_put(const struct list_head *dev_list);
-
-int kbase_device_init(struct kbase_device * const kbdev);
-void kbase_device_term(struct kbase_device *kbdev);
-void kbase_device_free(struct kbase_device *kbdev);
-int kbase_device_has_feature(struct kbase_device *kbdev, u32 feature);
-
-/* Needed for gator integration and for reporting vsync information */
-struct kbase_device *kbase_find_device(int minor);
-void kbase_release_device(struct kbase_device *kbdev);
-
-void kbase_set_profiling_control(struct kbase_device *kbdev, u32 control, u32 value);
-
-u32 kbase_get_profiling_control(struct kbase_device *kbdev, u32 control);
-
-struct kbase_context *
-kbase_create_context(struct kbase_device *kbdev, bool is_compat);
-void kbase_destroy_context(struct kbase_context *kctx);
-int kbase_context_set_create_flags(struct kbase_context *kctx, u32 flags);
-
-int kbase_jd_init(struct kbase_context *kctx);
-void kbase_jd_exit(struct kbase_context *kctx);
-#ifdef BASE_LEGACY_UK6_SUPPORT
-int kbase_jd_submit(struct kbase_context *kctx,
-               const struct kbase_uk_job_submit *submit_data,
-               int uk6_atom);
-#else
-int kbase_jd_submit(struct kbase_context *kctx,
-               const struct kbase_uk_job_submit *submit_data);
-#endif
-
-/**
- * kbase_jd_done_worker - Handle a job completion
- * @data: a &struct work_struct
- *
- * This function requeues the job from the runpool (if it was soft-stopped or
- * removed from NEXT registers).
- *
- * Removes it from the system if it finished/failed/was cancelled.
- *
- * Resolves dependencies to add dependent jobs to the context, potentially
- * starting them if necessary (which may add more references to the context)
- *
- * Releases the reference to the context from the no-longer-running job.
- *
- * Handles retrying submission outside of IRQ context if it failed from within
- * IRQ context.
- */
-void kbase_jd_done_worker(struct work_struct *data);
-
-void kbase_jd_done(struct kbase_jd_atom *katom, int slot_nr, ktime_t *end_timestamp,
-               kbasep_js_atom_done_code done_code);
-void kbase_jd_cancel(struct kbase_device *kbdev, struct kbase_jd_atom *katom);
-void kbase_jd_zap_context(struct kbase_context *kctx);
-bool jd_done_nolock(struct kbase_jd_atom *katom,
-               struct list_head *completed_jobs_ctx);
-void kbase_jd_free_external_resources(struct kbase_jd_atom *katom);
-bool jd_submit_atom(struct kbase_context *kctx,
-                        const struct base_jd_atom_v2 *user_atom,
-                        struct kbase_jd_atom *katom);
-void kbase_jd_dep_clear_locked(struct kbase_jd_atom *katom);
-
-void kbase_job_done(struct kbase_device *kbdev, u32 done);
-
-void kbase_gpu_cacheclean(struct kbase_device *kbdev,
-                                       struct kbase_jd_atom *katom);
-/**
- * kbase_job_slot_ctx_priority_check_locked(): - Check for lower priority atoms
- *                                               and soft stop them
- * @kctx: Pointer to context to check.
- * @katom: Pointer to priority atom.
- *
- * Atoms from @kctx on the same job slot as @katom, which have lower priority
- * than @katom will be soft stopped and put back in the queue, so that atoms
- * with higher priority can run.
- *
- * The js_data.runpool_irq.lock must be held when calling this function.
- */
-void kbase_job_slot_ctx_priority_check_locked(struct kbase_context *kctx,
-                               struct kbase_jd_atom *katom);
-
-void kbase_job_slot_softstop(struct kbase_device *kbdev, int js,
-               struct kbase_jd_atom *target_katom);
-void kbase_job_slot_softstop_swflags(struct kbase_device *kbdev, int js,
-               struct kbase_jd_atom *target_katom, u32 sw_flags);
-void kbase_job_slot_hardstop(struct kbase_context *kctx, int js,
-               struct kbase_jd_atom *target_katom);
-void kbase_job_check_enter_disjoint(struct kbase_device *kbdev, u32 action,
-               u16 core_reqs, struct kbase_jd_atom *target_katom);
-void kbase_job_check_leave_disjoint(struct kbase_device *kbdev,
-               struct kbase_jd_atom *target_katom);
-
-void kbase_event_post(struct kbase_context *ctx, struct kbase_jd_atom *event);
-int kbase_event_dequeue(struct kbase_context *ctx, struct base_jd_event_v2 *uevent);
-int kbase_event_pending(struct kbase_context *ctx);
-int kbase_event_init(struct kbase_context *kctx);
-void kbase_event_close(struct kbase_context *kctx);
-void kbase_event_cleanup(struct kbase_context *kctx);
-void kbase_event_wakeup(struct kbase_context *kctx);
-
-int kbase_process_soft_job(struct kbase_jd_atom *katom);
-int kbase_prepare_soft_job(struct kbase_jd_atom *katom);
-void kbase_finish_soft_job(struct kbase_jd_atom *katom);
-void kbase_cancel_soft_job(struct kbase_jd_atom *katom);
-void kbase_resume_suspended_soft_jobs(struct kbase_device *kbdev);
-void kbasep_add_waiting_soft_job(struct kbase_jd_atom *katom);
-
-bool kbase_replay_process(struct kbase_jd_atom *katom);
-
-enum hrtimer_restart kbasep_soft_event_timeout_worker(struct hrtimer *timer);
-void kbasep_complete_triggered_soft_events(struct kbase_context *kctx, u64 evt);
-int kbasep_read_soft_event_status(
-               struct kbase_context *kctx, u64 evt, unsigned char *status);
-int kbasep_write_soft_event_status(
-               struct kbase_context *kctx, u64 evt, unsigned char new_status);
-
-/* api used internally for register access. Contains validation and tracing */
-void kbase_device_trace_register_access(struct kbase_context *kctx, enum kbase_reg_access_type type, u16 reg_offset, u32 reg_value);
-int kbase_device_trace_buffer_install(
-               struct kbase_context *kctx, u32 *tb, size_t size);
-void kbase_device_trace_buffer_uninstall(struct kbase_context *kctx);
-
-/* api to be ported per OS, only need to do the raw register access */
-void kbase_os_reg_write(struct kbase_device *kbdev, u16 offset, u32 value);
-u32 kbase_os_reg_read(struct kbase_device *kbdev, u16 offset);
-
-void kbasep_as_do_poke(struct work_struct *work);
-
-/** Returns the name associated with a Mali exception code
- *
- * This function is called from the interrupt handler when a GPU fault occurs.
- * It reports the details of the fault using KBASE_DEBUG_PRINT_WARN.
- *
- * @param[in] kbdev     The kbase device that the GPU fault occurred from.
- * @param[in] exception_code  exception code
- * @return name associated with the exception code
- */
-const char *kbase_exception_name(struct kbase_device *kbdev,
-               u32 exception_code);
-
-/**
- * Check whether a system suspend is in progress, or has already been suspended
- *
- * The caller should ensure that either kbdev->pm.active_count_lock is held, or
- * a dmb was executed recently (to ensure the value is most
- * up-to-date). However, without a lock the value could change afterwards.
- *
- * @return false if a suspend is not in progress
- * @return !=false otherwise
- */
-static inline bool kbase_pm_is_suspending(struct kbase_device *kbdev)
-{
-       return kbdev->pm.suspending;
-}
-
-/**
- * Return the atom's ID, as was originally supplied by userspace in
- * base_jd_atom_v2::atom_number
- */
-static inline int kbase_jd_atom_id(struct kbase_context *kctx, struct kbase_jd_atom *katom)
-{
-       int result;
-
-       KBASE_DEBUG_ASSERT(kctx);
-       KBASE_DEBUG_ASSERT(katom);
-       KBASE_DEBUG_ASSERT(katom->kctx == kctx);
-
-       result = katom - &kctx->jctx.atoms[0];
-       KBASE_DEBUG_ASSERT(result >= 0 && result <= BASE_JD_ATOM_COUNT);
-       return result;
-}
-
-/**
- * kbase_jd_atom_from_id - Return the atom structure for the given atom ID
- * @kctx: Context pointer
- * @id:   ID of atom to retrieve
- *
- * Return: Pointer to struct kbase_jd_atom associated with the supplied ID
- */
-static inline struct kbase_jd_atom *kbase_jd_atom_from_id(
-               struct kbase_context *kctx, int id)
-{
-       return &kctx->jctx.atoms[id];
-}
-
-/**
- * Initialize the disjoint state
- *
- * The disjoint event count and state are both set to zero.
- *
- * Disjoint functions usage:
- *
- * The disjoint event count should be incremented whenever a disjoint event occurs.
- *
- * There are several cases which are regarded as disjoint behavior. Rather than just increment
- * the counter during disjoint events we also increment the counter when jobs may be affected
- * by what the GPU is currently doing. To facilitate this we have the concept of disjoint state.
- *
- * Disjoint state is entered during GPU reset and for the entire time that an atom is replaying
- * (as part of the replay workaround). Increasing the disjoint state also increases the count of
- * disjoint events.
- *
- * The disjoint state is then used to increase the count of disjoint events during job submission
- * and job completion. Any atom submitted or completed while the disjoint state is greater than
- * zero is regarded as a disjoint event.
- *
- * The disjoint event counter is also incremented immediately whenever a job is soft stopped
- * and during context creation.
- *
- * @param kbdev The kbase device
- */
-void kbase_disjoint_init(struct kbase_device *kbdev);
-
-/**
- * Increase the count of disjoint events
- * called when a disjoint event has happened
- *
- * @param kbdev The kbase device
- */
-void kbase_disjoint_event(struct kbase_device *kbdev);
-
-/**
- * Increase the count of disjoint events only if the GPU is in a disjoint state
- *
- * This should be called when something happens which could be disjoint if the GPU
- * is in a disjoint state. The state refcount keeps track of this.
- *
- * @param kbdev The kbase device
- */
-void kbase_disjoint_event_potential(struct kbase_device *kbdev);
-
-/**
- * Returns the count of disjoint events
- *
- * @param kbdev The kbase device
- * @return the count of disjoint events
- */
-u32 kbase_disjoint_event_get(struct kbase_device *kbdev);
-
-/**
- * Increment the refcount state indicating that the GPU is in a disjoint state.
- *
- * Also Increment the disjoint event count (calls @ref kbase_disjoint_event)
- * eventually after the disjoint state has completed @ref kbase_disjoint_state_down
- * should be called
- *
- * @param kbdev The kbase device
- */
-void kbase_disjoint_state_up(struct kbase_device *kbdev);
-
-/**
- * Decrement the refcount state
- *
- * Also Increment the disjoint event count (calls @ref kbase_disjoint_event)
- *
- * Called after @ref kbase_disjoint_state_up once the disjoint state is over
- *
- * @param kbdev The kbase device
- */
-void kbase_disjoint_state_down(struct kbase_device *kbdev);
-
-/**
- * If a job is soft stopped and the number of contexts is >= this value
- * it is reported as a disjoint event
- */
-#define KBASE_DISJOINT_STATE_INTERLEAVED_CONTEXT_COUNT_THRESHOLD 2
-
-#if !defined(UINT64_MAX)
-       #define UINT64_MAX ((uint64_t)0xFFFFFFFFFFFFFFFFULL)
-#endif
-
-#if KBASE_TRACE_ENABLE
-void kbasep_trace_debugfs_init(struct kbase_device *kbdev);
-
-#ifndef CONFIG_MALI_SYSTEM_TRACE
-/** Add trace values about a job-slot
- *
- * @note Any functions called through this macro will still be evaluated in
- * Release builds (CONFIG_MALI_DEBUG not defined). Therefore, when KBASE_TRACE_ENABLE == 0 any
- * functions called to get the parameters supplied to this macro must:
- * - be static or static inline
- * - must just return 0 and have no other statements present in the body.
- */
-#define KBASE_TRACE_ADD_SLOT(kbdev, code, ctx, katom, gpu_addr, jobslot) \
-       kbasep_trace_add(kbdev, KBASE_TRACE_CODE(code), ctx, katom, gpu_addr, \
-                       KBASE_TRACE_FLAG_JOBSLOT, 0, jobslot, 0)
-
-/** Add trace values about a job-slot, with info
- *
- * @note Any functions called through this macro will still be evaluated in
- * Release builds (CONFIG_MALI_DEBUG not defined). Therefore, when KBASE_TRACE_ENABLE == 0 any
- * functions called to get the parameters supplied to this macro must:
- * - be static or static inline
- * - must just return 0 and have no other statements present in the body.
- */
-#define KBASE_TRACE_ADD_SLOT_INFO(kbdev, code, ctx, katom, gpu_addr, jobslot, info_val) \
-       kbasep_trace_add(kbdev, KBASE_TRACE_CODE(code), ctx, katom, gpu_addr, \
-                       KBASE_TRACE_FLAG_JOBSLOT, 0, jobslot, info_val)
-
-/** Add trace values about a ctx refcount
- *
- * @note Any functions called through this macro will still be evaluated in
- * Release builds (CONFIG_MALI_DEBUG not defined). Therefore, when KBASE_TRACE_ENABLE == 0 any
- * functions called to get the parameters supplied to this macro must:
- * - be static or static inline
- * - must just return 0 and have no other statements present in the body.
- */
-#define KBASE_TRACE_ADD_REFCOUNT(kbdev, code, ctx, katom, gpu_addr, refcount) \
-       kbasep_trace_add(kbdev, KBASE_TRACE_CODE(code), ctx, katom, gpu_addr, \
-                       KBASE_TRACE_FLAG_REFCOUNT, refcount, 0, 0)
-/** Add trace values about a ctx refcount, and info
- *
- * @note Any functions called through this macro will still be evaluated in
- * Release builds (CONFIG_MALI_DEBUG not defined). Therefore, when KBASE_TRACE_ENABLE == 0 any
- * functions called to get the parameters supplied to this macro must:
- * - be static or static inline
- * - must just return 0 and have no other statements present in the body.
- */
-#define KBASE_TRACE_ADD_REFCOUNT_INFO(kbdev, code, ctx, katom, gpu_addr, refcount, info_val) \
-       kbasep_trace_add(kbdev, KBASE_TRACE_CODE(code), ctx, katom, gpu_addr, \
-                       KBASE_TRACE_FLAG_REFCOUNT, refcount, 0, info_val)
-
-/** Add trace values (no slot or refcount)
- *
- * @note Any functions called through this macro will still be evaluated in
- * Release builds (CONFIG_MALI_DEBUG not defined). Therefore, when KBASE_TRACE_ENABLE == 0 any
- * functions called to get the parameters supplied to this macro must:
- * - be static or static inline
- * - must just return 0 and have no other statements present in the body.
- */
-#define KBASE_TRACE_ADD(kbdev, code, ctx, katom, gpu_addr, info_val)     \
-       kbasep_trace_add(kbdev, KBASE_TRACE_CODE(code), ctx, katom, gpu_addr, \
-                       0, 0, 0, info_val)
-
-/** Clear the trace */
-#define KBASE_TRACE_CLEAR(kbdev) \
-       kbasep_trace_clear(kbdev)
-
-/** Dump the slot trace */
-#define KBASE_TRACE_DUMP(kbdev) \
-       kbasep_trace_dump(kbdev)
-
-/** PRIVATE - do not use directly. Use KBASE_TRACE_ADD() instead */
-void kbasep_trace_add(struct kbase_device *kbdev, enum kbase_trace_code code, void *ctx, struct kbase_jd_atom *katom, u64 gpu_addr, u8 flags, int refcount, int jobslot, unsigned long info_val);
-/** PRIVATE - do not use directly. Use KBASE_TRACE_CLEAR() instead */
-void kbasep_trace_clear(struct kbase_device *kbdev);
-#else /* #ifndef CONFIG_MALI_SYSTEM_TRACE */
-/* Dispatch kbase trace events as system trace events */
-#include <mali_linux_kbase_trace.h>
-#define KBASE_TRACE_ADD_SLOT(kbdev, code, ctx, katom, gpu_addr, jobslot)\
-       trace_mali_##code(jobslot, 0)
-
-#define KBASE_TRACE_ADD_SLOT_INFO(kbdev, code, ctx, katom, gpu_addr, jobslot, info_val)\
-       trace_mali_##code(jobslot, info_val)
-
-#define KBASE_TRACE_ADD_REFCOUNT(kbdev, code, ctx, katom, gpu_addr, refcount)\
-       trace_mali_##code(refcount, 0)
-
-#define KBASE_TRACE_ADD_REFCOUNT_INFO(kbdev, code, ctx, katom, gpu_addr, refcount, info_val)\
-       trace_mali_##code(refcount, info_val)
-
-#define KBASE_TRACE_ADD(kbdev, code, ctx, katom, gpu_addr, info_val)\
-       trace_mali_##code(gpu_addr, info_val)
-
-#define KBASE_TRACE_CLEAR(kbdev)\
-       do {\
-               CSTD_UNUSED(kbdev);\
-               CSTD_NOP(0);\
-       } while (0)
-#define KBASE_TRACE_DUMP(kbdev)\
-       do {\
-               CSTD_UNUSED(kbdev);\
-               CSTD_NOP(0);\
-       } while (0)
-
-#endif /* #ifndef CONFIG_MALI_SYSTEM_TRACE */
-#else
-#define KBASE_TRACE_ADD_SLOT(kbdev, code, ctx, katom, gpu_addr, jobslot)\
-       do {\
-               CSTD_UNUSED(kbdev);\
-               CSTD_NOP(code);\
-               CSTD_UNUSED(ctx);\
-               CSTD_UNUSED(katom);\
-               CSTD_UNUSED(gpu_addr);\
-               CSTD_UNUSED(jobslot);\
-       } while (0)
-
-#define KBASE_TRACE_ADD_SLOT_INFO(kbdev, code, ctx, katom, gpu_addr, jobslot, info_val)\
-       do {\
-               CSTD_UNUSED(kbdev);\
-               CSTD_NOP(code);\
-               CSTD_UNUSED(ctx);\
-               CSTD_UNUSED(katom);\
-               CSTD_UNUSED(gpu_addr);\
-               CSTD_UNUSED(jobslot);\
-               CSTD_UNUSED(info_val);\
-               CSTD_NOP(0);\
-       } while (0)
-
-#define KBASE_TRACE_ADD_REFCOUNT(kbdev, code, ctx, katom, gpu_addr, refcount)\
-       do {\
-               CSTD_UNUSED(kbdev);\
-               CSTD_NOP(code);\
-               CSTD_UNUSED(ctx);\
-               CSTD_UNUSED(katom);\
-               CSTD_UNUSED(gpu_addr);\
-               CSTD_UNUSED(refcount);\
-               CSTD_NOP(0);\
-       } while (0)
-
-#define KBASE_TRACE_ADD_REFCOUNT_INFO(kbdev, code, ctx, katom, gpu_addr, refcount, info_val)\
-       do {\
-               CSTD_UNUSED(kbdev);\
-               CSTD_NOP(code);\
-               CSTD_UNUSED(ctx);\
-               CSTD_UNUSED(katom);\
-               CSTD_UNUSED(gpu_addr);\
-               CSTD_UNUSED(info_val);\
-               CSTD_NOP(0);\
-       } while (0)
-
-#define KBASE_TRACE_ADD(kbdev, code, subcode, ctx, katom, val)\
-       do {\
-               CSTD_UNUSED(kbdev);\
-               CSTD_NOP(code);\
-               CSTD_UNUSED(subcode);\
-               CSTD_UNUSED(ctx);\
-               CSTD_UNUSED(katom);\
-               CSTD_UNUSED(val);\
-               CSTD_NOP(0);\
-       } while (0)
-
-#define KBASE_TRACE_CLEAR(kbdev)\
-       do {\
-               CSTD_UNUSED(kbdev);\
-               CSTD_NOP(0);\
-       } while (0)
-#define KBASE_TRACE_DUMP(kbdev)\
-       do {\
-               CSTD_UNUSED(kbdev);\
-               CSTD_NOP(0);\
-       } while (0)
-#endif /* KBASE_TRACE_ENABLE */
-/** PRIVATE - do not use directly. Use KBASE_TRACE_DUMP() instead */
-void kbasep_trace_dump(struct kbase_device *kbdev);
-
-#ifdef CONFIG_MALI_DEBUG
-/**
- * kbase_set_driver_inactive - Force driver to go inactive
- * @kbdev:    Device pointer
- * @inactive: true if driver should go inactive, false otherwise
- *
- * Forcing the driver inactive will cause all future IOCTLs to wait until the
- * driver is made active again. This is intended solely for the use of tests
- * which require that no jobs are running while the test executes.
- */
-void kbase_set_driver_inactive(struct kbase_device *kbdev, bool inactive);
-#endif /* CONFIG_MALI_DEBUG */
-
-#endif
diff --git a/midgard/mali_kbase_10969_workaround.h b/midgard/mali_kbase_10969_workaround.h
deleted file mode 100644 (file)
index 099a298..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2013-2014 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.
- *
- */
-
-
-
-#ifndef _KBASE_10969_WORKAROUND_
-#define _KBASE_10969_WORKAROUND_
-
-int kbasep_10969_workaround_clamp_coordinates(struct kbase_jd_atom *katom);
-
-#endif /* _KBASE_10969_WORKAROUND_ */
diff --git a/midgard/mali_kbase_cache_policy.h b/midgard/mali_kbase_cache_policy.h
deleted file mode 100644 (file)
index 0c18bdb..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2012-2013, 2015 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.
- *
- */
-
-
-
-
-
-/*
- * Cache Policy API.
- */
-
-#ifndef _KBASE_CACHE_POLICY_H_
-#define _KBASE_CACHE_POLICY_H_
-
-#include "mali_kbase.h"
-#include "mali_base_kernel.h"
-
-/**
- * kbase_cache_enabled - Choose the cache policy for a specific region
- * @flags:    flags describing attributes of the region
- * @nr_pages: total number of pages (backed or not) for the region
- *
- * Tells whether the CPU and GPU caches should be enabled or not for a specific
- * region.
- * This function can be modified to customize the cache policy depending on the
- * flags and size of the region.
- *
- * Return: a combination of %KBASE_REG_CPU_CACHED and %KBASE_REG_GPU_CACHED
- *         depending on the cache policy
- */
-u32 kbase_cache_enabled(u32 flags, u32 nr_pages);
-
-#endif                         /* _KBASE_CACHE_POLICY_H_ */
diff --git a/midgard/mali_kbase_config.h b/midgard/mali_kbase_config.h
deleted file mode 100644 (file)
index 516f181..0000000
+++ /dev/null
@@ -1,345 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2010-2016 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_config.h
- * Configuration API and Attributes for KBase
- */
-
-#ifndef _KBASE_CONFIG_H_
-#define _KBASE_CONFIG_H_
-
-/* #include <asm/page.h> */
-
-#include <mali_malisw.h>
-#include <mali_kbase_backend_config.h>
-
-/**
- * @addtogroup base_api
- * @{
- */
-
-/**
- * @addtogroup base_kbase_api
- * @{
- */
-
-/**
- * @addtogroup kbase_config Configuration API and Attributes
- * @{
- */
-
-#include <linux/rbtree.h>
-
-/* Forward declaration of struct kbase_device */
-struct kbase_device;
-
-/**
- * kbase_platform_funcs_conf - Specifies platform init/term function pointers
- *
- * Specifies the functions pointers for platform specific initialization and
- * termination. By default no functions are required. No additional platform
- * specific control is necessary.
- */
-struct kbase_platform_funcs_conf {
-       /**
-        * platform_init_func - platform specific init function pointer
-        * @kbdev - kbase_device pointer
-        *
-        * Returns 0 on success, negative error code otherwise.
-        *
-        * Function pointer for platform specific initialization or NULL if no
-        * initialization function is required. At the point this the GPU is
-        * not active and its power and clocks are in unknown (platform specific
-        * state) as kbase doesn't yet have control of power and clocks.
-        *
-        * The platform specific private pointer kbase_device::platform_context
-        * can be accessed (and possibly initialized) in here.
-        */
-       int (*platform_init_func)(struct kbase_device *kbdev);
-       /**
-        * platform_term_func - platform specific termination function pointer
-        * @kbdev - kbase_device pointer
-        *
-        * Function pointer for platform specific termination or NULL if no
-        * termination function is required. At the point this the GPU will be
-        * idle but still powered and clocked.
-        *
-        * The platform specific private pointer kbase_device::platform_context
-        * can be accessed (and possibly terminated) in here.
-        */
-       void (*platform_term_func)(struct kbase_device *kbdev);
-};
-
-/*
- * @brief Specifies the callbacks for power management
- *
- * By default no callbacks will be made and the GPU must not be powered off.
- */
-struct kbase_pm_callback_conf {
-       /** Callback for when the GPU is idle and the power to it can be switched off.
-        *
-        * The system integrator can decide whether to either do nothing, just switch off
-        * the clocks to the GPU, or to completely power down the GPU.
-        * The platform specific private pointer kbase_device::platform_context can be accessed and modified in here. It is the
-        * platform \em callbacks responsibility to initialize and terminate this pointer if used (see @ref kbase_platform_funcs_conf).
-        */
-       void (*power_off_callback)(struct kbase_device *kbdev);
-
-       /** Callback for when the GPU is about to become active and power must be supplied.
-        *
-        * This function must not return until the GPU is powered and clocked sufficiently for register access to
-        * succeed.  The return value specifies whether the GPU was powered down since the call to power_off_callback.
-        * If the GPU state has been lost then this function must return 1, otherwise it should return 0.
-        * The platform specific private pointer kbase_device::platform_context can be accessed and modified in here. It is the
-        * platform \em callbacks responsibility to initialize and terminate this pointer if used (see @ref kbase_platform_funcs_conf).
-        *
-        * The return value of the first call to this function is ignored.
-        *
-        * @return 1 if the GPU state may have been lost, 0 otherwise.
-        */
-       int (*power_on_callback)(struct kbase_device *kbdev);
-
-       /** Callback for when the system is requesting a suspend and GPU power
-        * must be switched off.
-        *
-        * Note that if this callback is present, then this may be called
-        * without a preceding call to power_off_callback. Therefore this
-        * callback must be able to take any action that might otherwise happen
-        * in power_off_callback.
-        *
-        * The platform specific private pointer kbase_device::platform_context
-        * can be accessed and modified in here. It is the platform \em
-        * callbacks responsibility to initialize and terminate this pointer if
-        * used (see @ref kbase_platform_funcs_conf).
-        */
-       void (*power_suspend_callback)(struct kbase_device *kbdev);
-
-       /** Callback for when the system is resuming from a suspend and GPU
-        * power must be switched on.
-        *
-        * Note that if this callback is present, then this may be called
-        * without a following call to power_on_callback. Therefore this
-        * callback must be able to take any action that might otherwise happen
-        * in power_on_callback.
-        *
-        * The platform specific private pointer kbase_device::platform_context
-        * can be accessed and modified in here. It is the platform \em
-        * callbacks responsibility to initialize and terminate this pointer if
-        * used (see @ref kbase_platform_funcs_conf).
-        */
-       void (*power_resume_callback)(struct kbase_device *kbdev);
-
-       /** Callback for handling runtime power management initialization.
-        *
-        * The runtime power management callbacks @ref power_runtime_off_callback and @ref power_runtime_on_callback
-        * will become active from calls made to the OS from within this function.
-        * The runtime calls can be triggered by calls from @ref power_off_callback and @ref power_on_callback.
-        * Note: for linux the kernel must have CONFIG_PM_RUNTIME enabled to use this feature.
-        *
-        * @return 0 on success, else int error code.
-        */
-        int (*power_runtime_init_callback)(struct kbase_device *kbdev);
-
-       /** Callback for handling runtime power management termination.
-        *
-        * The runtime power management callbacks @ref power_runtime_off_callback and @ref power_runtime_on_callback
-        * should no longer be called by the OS on completion of this function.
-        * Note: for linux the kernel must have CONFIG_PM_RUNTIME enabled to use this feature.
-        */
-       void (*power_runtime_term_callback)(struct kbase_device *kbdev);
-
-       /** Callback for runtime power-off power management callback
-        *
-        * For linux this callback will be called by the kernel runtime_suspend callback.
-        * Note: for linux the kernel must have CONFIG_PM_RUNTIME enabled to use this feature.
-        *
-        * @return 0 on success, else OS error code.
-        */
-       void (*power_runtime_off_callback)(struct kbase_device *kbdev);
-
-       /** Callback for runtime power-on power management callback
-        *
-        * For linux this callback will be called by the kernel runtime_resume callback.
-        * Note: for linux the kernel must have CONFIG_PM_RUNTIME enabled to use this feature.
-        */
-       int (*power_runtime_on_callback)(struct kbase_device *kbdev);
-
-       /*
-        * Optional callback for checking if GPU can be suspended when idle
-        *
-        * This callback will be called by the runtime power management core
-        * when the reference count goes to 0 to provide notification that the
-        * GPU now seems idle.
-        *
-        * If this callback finds that the GPU can't be powered off, or handles
-        * suspend by powering off directly or queueing up a power off, a
-        * non-zero value must be returned to prevent the runtime PM core from
-        * also triggering a suspend.
-        *
-        * Returning 0 will cause the runtime PM core to conduct a regular
-        * autosuspend.
-        *
-        * This callback is optional and if not provided regular autosuspend
-        * will be triggered.
-        *
-        * Note: The Linux kernel must have CONFIG_PM_RUNTIME enabled to use
-        * this feature.
-        *
-        * Return 0 if GPU can be suspended, positive value if it can not be
-        * suspeneded by runtime PM, else OS error code
-        */
-       int (*power_runtime_idle_callback)(struct kbase_device *kbdev);
-};
-
-/**
- * kbase_cpuprops_get_default_clock_speed - default for CPU_SPEED_FUNC
- * @clock_speed - see  kbase_cpu_clk_speed_func for details on the parameters
- *
- * Returns 0 on success, negative error code otherwise.
- *
- * Default implementation of CPU_SPEED_FUNC. This function sets clock_speed
- * to 100, so will be an underestimate for any real system.
- */
-int kbase_cpuprops_get_default_clock_speed(u32 * const clock_speed);
-
-/**
- * kbase_cpu_clk_speed_func - Type of the function pointer for CPU_SPEED_FUNC
- * @param clock_speed - pointer to store the current CPU clock speed in MHz
- *
- * Returns 0 on success, otherwise negative error code.
- *
- * This is mainly used to implement OpenCL's clGetDeviceInfo().
- */
-typedef int (*kbase_cpu_clk_speed_func) (u32 *clock_speed);
-
-/**
- * kbase_gpu_clk_speed_func - Type of the function pointer for GPU_SPEED_FUNC
- * @param clock_speed - pointer to store the current GPU clock speed in MHz
- *
- * Returns 0 on success, otherwise negative error code.
- * When an error is returned the caller assumes maximum GPU speed stored in
- * gpu_freq_khz_max.
- *
- * If the system timer is not available then this function is required
- * for the OpenCL queue profiling to return correct timing information.
- *
- */
-typedef int (*kbase_gpu_clk_speed_func) (u32 *clock_speed);
-
-#ifdef CONFIG_OF
-struct kbase_platform_config {
-};
-#else
-
-/*
- * @brief Specifies start and end of I/O memory region.
- */
-struct kbase_io_memory_region {
-       u64 start;
-       u64 end;
-};
-
-/*
- * @brief Specifies I/O related resources like IRQs and memory region for I/O operations.
- */
-struct kbase_io_resources {
-       u32                      job_irq_number;
-       u32                      mmu_irq_number;
-       u32                      gpu_irq_number;
-       struct kbase_io_memory_region io_memory_region;
-};
-
-struct kbase_platform_config {
-       const struct kbase_io_resources *io_resources;
-};
-
-#endif /* CONFIG_OF */
-
-/**
- * @brief Gets the pointer to platform config.
- *
- * @return Pointer to the platform config
- */
-struct kbase_platform_config *kbase_get_platform_config(void);
-
-/**
- * kbasep_platform_device_init: - Platform specific call to initialize hardware
- * @kbdev: kbase device pointer
- *
- * Function calls a platform defined routine if specified in the configuration
- * attributes.  The routine can initialize any hardware and context state that
- * is required for the GPU block to function.
- *
- * Return: 0 if no errors have been found in the config.
- *         Negative error code otherwise.
- */
-int kbasep_platform_device_init(struct kbase_device *kbdev);
-
-/**
- * kbasep_platform_device_term - Platform specific call to terminate hardware
- * @kbdev: Kbase device pointer
- *
- * Function calls a platform defined routine if specified in the configuration
- * attributes. The routine can destroy any platform specific context state and
- * shut down any hardware functionality that are outside of the Power Management
- * callbacks.
- *
- */
-void kbasep_platform_device_term(struct kbase_device *kbdev);
-
-
-/**
- * kbase_platform_early_init - Early initialisation of the platform code
- *
- * This function will be called when the module is loaded to perform any
- * early initialisation required by the platform code. Such as reading
- * platform specific device tree entries for the GPU.
- *
- * Return: 0 for success, any other fail causes module initialisation to fail
- */
-int kbase_platform_early_init(void);
-
-#ifndef CONFIG_OF
-#ifdef CONFIG_MALI_PLATFORM_FAKE
-/**
- * kbase_platform_fake_register - Register a platform device for the GPU
- *
- * This can be used to register a platform device on systems where device tree
- * is not enabled and the platform initialisation code in the kernel doesn't
- * create the GPU device. Where possible device tree should be used instead.
- *
- * Return: 0 for success, any other fail causes module initialisation to fail
- */
-int kbase_platform_fake_register(void);
-
-/**
- * kbase_platform_fake_unregister - Unregister a fake platform device
- *
- * Unregister the platform device created with kbase_platform_fake_register()
- */
-void kbase_platform_fake_unregister(void);
-#endif
-#endif
-
-         /** @} *//* end group kbase_config */
-         /** @} *//* end group base_kbase_api */
-         /** @} *//* end group base_api */
-
-#endif                         /* _KBASE_CONFIG_H_ */
diff --git a/midgard/mali_kbase_config_defaults.h b/midgard/mali_kbase_config_defaults.h
deleted file mode 100644 (file)
index ee7c96d..0000000
+++ /dev/null
@@ -1,260 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2013-2015 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_config_defaults.h
- *
- * Default values for configuration settings
- *
- */
-
-#ifndef _KBASE_CONFIG_DEFAULTS_H_
-#define _KBASE_CONFIG_DEFAULTS_H_
-
-/* Include mandatory definitions per platform */
-#include <mali_kbase_config_platform.h>
-
-/**
- * Irq throttle. It is the minimum desired time in between two
- * consecutive gpu interrupts (given in 'us'). The irq throttle
- * gpu register will be configured after this, taking into
- * account the configured max frequency.
- *
- * Attached value: number in micro seconds
- */
-#define DEFAULT_IRQ_THROTTLE_TIME_US 20
-
-/**
- *  Default Job Scheduler initial runtime of a context for the CFS Policy,
- *  in time-slices.
- *
- * This value is relative to that of the least-run context, and defines
- * where in the CFS queue a new context is added. A value of 1 means 'after
- * the least-run context has used its timeslice'. Therefore, when all
- * contexts consistently use the same amount of time, a value of 1 models a
- * FIFO. A value of 0 would model a LIFO.
- *
- * The value is represented in "numbers of time slices". Multiply this
- * value by that defined in @ref DEFAULT_JS_CTX_TIMESLICE_NS to get
- * the time value for this in nanoseconds.
- */
-#define DEFAULT_JS_CFS_CTX_RUNTIME_INIT_SLICES 1
-
-/**
- * Default Job Scheduler minimum runtime value of a context for CFS, in
- * time_slices relative to that of the least-run context.
- *
- * This is a measure of how much preferrential treatment is given to a
- * context that is not run very often.
- *
- * Specficially, this value defines how many timeslices such a context is
- * (initially) allowed to use at once. Such contexts (e.g. 'interactive'
- * processes) will appear near the front of the CFS queue, and can initially
- * use more time than contexts that run continuously (e.g. 'batch'
- * processes).
- *
- * This limit \b prevents a "stored-up timeslices" DoS attack, where a ctx
- * not run for a long time attacks the system by using a very large initial
- * number of timeslices when it finally does run.
- *
- * @note A value of zero allows not-run-often contexts to get scheduled in
- * quickly, but to only use a single timeslice when they get scheduled in.
- */
-#define DEFAULT_JS_CFS_CTX_RUNTIME_MIN_SLICES 2
-
-/**
-* Boolean indicating whether the driver is configured to be secure at
-* a potential loss of performance.
-*
-* This currently affects only r0p0-15dev0 HW and earlier.
-*
-* On r0p0-15dev0 HW and earlier, there are tradeoffs between security and
-* performance:
-*
-* - When this is set to true, the driver remains fully secure,
-* but potentially loses performance compared with setting this to
-* false.
-* - When set to false, the driver is open to certain security
-* attacks.
-*
-* From r0p0-00rel0 and onwards, there is no security loss by setting
-* this to false, and no performance loss by setting it to
-* true.
-*/
-#define DEFAULT_SECURE_BUT_LOSS_OF_PERFORMANCE false
-
-enum {
-       /**
-        * Use unrestricted Address ID width on the AXI bus.
-        */
-       KBASE_AID_32 = 0x0,
-
-       /**
-        * Restrict GPU to a half of maximum Address ID count.
-        * This will reduce performance, but reduce bus load due to GPU.
-        */
-       KBASE_AID_16 = 0x3,
-
-       /**
-        * Restrict GPU to a quarter of maximum Address ID count.
-        * This will reduce performance, but reduce bus load due to GPU.
-        */
-       KBASE_AID_8  = 0x2,
-
-       /**
-        * Restrict GPU to an eighth of maximum Address ID count.
-        * This will reduce performance, but reduce bus load due to GPU.
-        */
-       KBASE_AID_4  = 0x1
-};
-
-/**
- * Default setting for read Address ID limiting on AXI bus.
- *
- * Attached value: u32 register value
- *    KBASE_AID_32 - use the full 32 IDs (5 ID bits)
- *    KBASE_AID_16 - use 16 IDs (4 ID bits)
- *    KBASE_AID_8  - use 8 IDs (3 ID bits)
- *    KBASE_AID_4  - use 4 IDs (2 ID bits)
- * Default value: KBASE_AID_32 (no limit). Note hardware implementation
- * may limit to a lower value.
- */
-#define DEFAULT_ARID_LIMIT KBASE_AID_32
-
-/**
- * Default setting for write Address ID limiting on AXI.
- *
- * Attached value: u32 register value
- *    KBASE_AID_32 - use the full 32 IDs (5 ID bits)
- *    KBASE_AID_16 - use 16 IDs (4 ID bits)
- *    KBASE_AID_8  - use 8 IDs (3 ID bits)
- *    KBASE_AID_4  - use 4 IDs (2 ID bits)
- * Default value: KBASE_AID_32 (no limit). Note hardware implementation
- * may limit to a lower value.
- */
-#define DEFAULT_AWID_LIMIT KBASE_AID_32
-
-/**
- * Default UMP device mapping. A UMP_DEVICE_<device>_SHIFT value which
- * defines which UMP device this GPU should be mapped to.
- */
-#define DEFAULT_UMP_GPU_DEVICE_SHIFT UMP_DEVICE_Z_SHIFT
-
-/*
- * Default period for DVFS sampling
- */
-#define DEFAULT_PM_DVFS_PERIOD 100 /* 100ms */
-
-/*
- * Power Management poweroff tick granuality. This is in nanoseconds to
- * allow HR timer support.
- *
- * On each scheduling tick, the power manager core may decide to:
- * -# Power off one or more shader cores
- * -# Power off the entire GPU
- */
-#define DEFAULT_PM_GPU_POWEROFF_TICK_NS (400000) /* 400us */
-
-/*
- * Power Manager number of ticks before shader cores are powered off
- */
-#define DEFAULT_PM_POWEROFF_TICK_SHADER (2) /* 400-800us */
-
-/*
- * Power Manager number of ticks before GPU is powered off
- */
-#define DEFAULT_PM_POWEROFF_TICK_GPU (2) /* 400-800us */
-
-/*
- * Default scheduling tick granuality
- */
-#define DEFAULT_JS_SCHEDULING_PERIOD_NS    (100000000u) /* 100ms */
-
-/*
- * Default minimum number of scheduling ticks before jobs are soft-stopped.
- *
- * This defines the time-slice for a job (which may be different from that of a
- * context)
- */
-#define DEFAULT_JS_SOFT_STOP_TICKS       (1) /* 100ms-200ms */
-
-/*
- * Default minimum number of scheduling ticks before CL jobs are soft-stopped.
- */
-#define DEFAULT_JS_SOFT_STOP_TICKS_CL    (1) /* 100ms-200ms */
-
-/*
- * Default minimum number of scheduling ticks before jobs are hard-stopped
- */
-#define DEFAULT_JS_HARD_STOP_TICKS_SS    (50) /* 5s */
-#define DEFAULT_JS_HARD_STOP_TICKS_SS_8408  (300) /* 30s */
-
-/*
- * Default minimum number of scheduling ticks before CL jobs are hard-stopped.
- */
-#define DEFAULT_JS_HARD_STOP_TICKS_CL    (50) /* 5s */
-
-/*
- * Default minimum number of scheduling ticks before jobs are hard-stopped
- * during dumping
- */
-#define DEFAULT_JS_HARD_STOP_TICKS_DUMPING   (15000) /* 1500s */
-
-/*
- * Default timeout for software event jobs, after which these jobs will be
- * cancelled.
- */
-#define DEFAULT_JS_SOFT_EVENT_TIMEOUT ((u32)3000) /* 3s */
-
-/*
- * Default minimum number of scheduling ticks before the GPU is reset to clear a
- * "stuck" job
- */
-#define DEFAULT_JS_RESET_TICKS_SS           (55) /* 5.5s */
-#define DEFAULT_JS_RESET_TICKS_SS_8408     (450) /* 45s */
-
-/*
- * Default minimum number of scheduling ticks before the GPU is reset to clear a
- * "stuck" CL job.
- */
-#define DEFAULT_JS_RESET_TICKS_CL        (55) /* 5.5s */
-
-/*
- * Default minimum number of scheduling ticks before the GPU is reset to clear a
- * "stuck" job during dumping.
- */
-#define DEFAULT_JS_RESET_TICKS_DUMPING   (15020) /* 1502s */
-
-/*
- * Default number of milliseconds given for other jobs on the GPU to be
- * soft-stopped when the GPU needs to be reset.
- */
-#define DEFAULT_RESET_TIMEOUT_MS (3000) /* 3s */
-
-/*
- * Default timeslice that a context is scheduled in for, in nanoseconds.
- *
- * When a context has used up this amount of time across its jobs, it is
- * scheduled out to let another run.
- *
- * @note the resolution is nanoseconds (ns) here, because that's the format
- * often used by the OS.
- */
-#define DEFAULT_JS_CTX_TIMESLICE_NS (50000000) /* 50ms */
-
-#endif /* _KBASE_CONFIG_DEFAULTS_H_ */
-
diff --git a/midgard/mali_kbase_debug.h b/midgard/mali_kbase_debug.h
deleted file mode 100644 (file)
index 5fff289..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2012-2015 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.
- *
- */
-
-
-
-
-
-#ifndef _KBASE_DEBUG_H
-#define _KBASE_DEBUG_H
-
-#include <linux/bug.h>
-
-/** @brief If equals to 0, a trace containing the file, line, and function will be displayed before each message. */
-#define KBASE_DEBUG_SKIP_TRACE 0
-
-/** @brief If different from 0, the trace will only contain the file and line. */
-#define KBASE_DEBUG_SKIP_FUNCTION_NAME 0
-
-/** @brief Disable the asserts tests if set to 1. Default is to disable the asserts in release. */
-#ifndef KBASE_DEBUG_DISABLE_ASSERTS
-#ifdef CONFIG_MALI_DEBUG
-#define KBASE_DEBUG_DISABLE_ASSERTS 0
-#else
-#define KBASE_DEBUG_DISABLE_ASSERTS 1
-#endif
-#endif                         /* KBASE_DEBUG_DISABLE_ASSERTS */
-
-/** Function type that is called on an KBASE_DEBUG_ASSERT() or KBASE_DEBUG_ASSERT_MSG() */
-typedef void (kbase_debug_assert_hook) (void *);
-
-struct kbasep_debug_assert_cb {
-       kbase_debug_assert_hook *func;
-       void *param;
-};
-
-/**
- * @def KBASEP_DEBUG_PRINT_TRACE
- * @brief Private macro containing the format of the trace to display before every message
- * @sa KBASE_DEBUG_SKIP_TRACE, KBASE_DEBUG_SKIP_FUNCTION_NAME
- */
-#if !KBASE_DEBUG_SKIP_TRACE
-#define KBASEP_DEBUG_PRINT_TRACE \
-               "In file: " __FILE__ " line: " CSTD_STR2(__LINE__)
-#if !KBASE_DEBUG_SKIP_FUNCTION_NAME
-#define KBASEP_DEBUG_PRINT_FUNCTION __func__
-#else
-#define KBASEP_DEBUG_PRINT_FUNCTION ""
-#endif
-#else
-#define KBASEP_DEBUG_PRINT_TRACE ""
-#endif
-
-/**
- * @def KBASEP_DEBUG_ASSERT_OUT(trace, function, ...)
- * @brief (Private) system printing function associated to the @see KBASE_DEBUG_ASSERT_MSG event.
- * @param trace location in the code from where the message is printed
- * @param function function from where the message is printed
- * @param ... Format string followed by format arguments.
- * @note function parameter cannot be concatenated with other strings
- */
-/* Select the correct system output function*/
-#ifdef CONFIG_MALI_DEBUG
-#define KBASEP_DEBUG_ASSERT_OUT(trace, function, ...)\
-               do { \
-                       pr_err("Mali<ASSERT>: %s function:%s ", trace, function);\
-                       pr_err(__VA_ARGS__);\
-                       pr_err("\n");\
-               } while (false)
-#else
-#define KBASEP_DEBUG_ASSERT_OUT(trace, function, ...) CSTD_NOP()
-#endif
-
-#ifdef CONFIG_MALI_DEBUG
-#define KBASE_CALL_ASSERT_HOOK() kbasep_debug_assert_call_hook()
-#else
-#define KBASE_CALL_ASSERT_HOOK() CSTD_NOP()
-#endif
-
-/**
- * @def KBASE_DEBUG_ASSERT(expr)
- * @brief Calls @see KBASE_PRINT_ASSERT and prints the expression @a expr if @a expr is false
- *
- * @note This macro does nothing if the flag @see KBASE_DEBUG_DISABLE_ASSERTS is set to 1
- *
- * @param expr Boolean expression
- */
-#define KBASE_DEBUG_ASSERT(expr) \
-       KBASE_DEBUG_ASSERT_MSG(expr, #expr)
-
-#if KBASE_DEBUG_DISABLE_ASSERTS
-#define KBASE_DEBUG_ASSERT_MSG(expr, ...) CSTD_NOP()
-#else
-       /**
-        * @def KBASE_DEBUG_ASSERT_MSG(expr, ...)
-        * @brief Calls @see KBASEP_DEBUG_ASSERT_OUT and prints the given message if @a expr is false
-        *
-        * @note This macro does nothing if the flag @see KBASE_DEBUG_DISABLE_ASSERTS is set to 1
-        *
-        * @param expr Boolean expression
-        * @param ...  Message to display when @a expr is false, as a format string followed by format arguments.
-        */
-#define KBASE_DEBUG_ASSERT_MSG(expr, ...) \
-               do { \
-                       if (!(expr)) { \
-                               KBASEP_DEBUG_ASSERT_OUT(KBASEP_DEBUG_PRINT_TRACE, KBASEP_DEBUG_PRINT_FUNCTION, __VA_ARGS__);\
-                               KBASE_CALL_ASSERT_HOOK();\
-                               BUG();\
-                       } \
-               } while (false)
-#endif                         /* KBASE_DEBUG_DISABLE_ASSERTS */
-
-/**
- * @def KBASE_DEBUG_CODE( X )
- * @brief Executes the code inside the macro only in debug mode
- *
- * @param X Code to compile only in debug mode.
- */
-#ifdef CONFIG_MALI_DEBUG
-#define KBASE_DEBUG_CODE(X) X
-#else
-#define KBASE_DEBUG_CODE(X) CSTD_NOP()
-#endif                         /* CONFIG_MALI_DEBUG */
-
-/** @} */
-
-/**
- * @brief Register a function to call on ASSERT
- *
- * Such functions will \b only be called during Debug mode, and for debugging
- * features \b only. Do not rely on them to be called in general use.
- *
- * To disable the hook, supply NULL to \a func.
- *
- * @note This function is not thread-safe, and should only be used to
- * register/deregister once in the module's lifetime.
- *
- * @param[in] func the function to call when an assert is triggered.
- * @param[in] param the parameter to pass to \a func when calling it
- */
-void kbase_debug_assert_register_hook(kbase_debug_assert_hook *func, void *param);
-
-/**
- * @brief Call a debug assert hook previously registered with kbase_debug_assert_register_hook()
- *
- * @note This function is not thread-safe with respect to multiple threads
- * registering functions and parameters with
- * kbase_debug_assert_register_hook(). Otherwise, thread safety is the
- * responsibility of the registered hook.
- */
-void kbasep_debug_assert_call_hook(void);
-
-#endif                         /* _KBASE_DEBUG_H */
diff --git a/midgard/mali_kbase_debug_job_fault.h b/midgard/mali_kbase_debug_job_fault.h
deleted file mode 100644 (file)
index 0930f90..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2012-2015 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.
- *
- */
-
-
-
-#ifndef _KBASE_DEBUG_JOB_FAULT_H
-#define _KBASE_DEBUG_JOB_FAULT_H
-
-#include <mali_kbase.h>
-#include <linux/debugfs.h>
-#include <linux/seq_file.h>
-
-#define REGISTER_DUMP_TERMINATION_FLAG 0xFFFFFFFF
-
-/**
- * kbase_debug_job_fault_dev_init - Create the fault event wait queue
- *             per device and initialize the required lists.
- * @kbdev:     Device pointer
- *
- * Return: Zero on success or a negative error code.
- */
-int kbase_debug_job_fault_dev_init(struct kbase_device *kbdev);
-
-/**
- * kbase_debug_job_fault_debugfs_init - Initialize job fault debug sysfs
- * @kbdev:     Device pointer
- */
-void kbase_debug_job_fault_debugfs_init(struct kbase_device *kbdev);
-
-/**
- * kbase_debug_job_fault_dev_term - Clean up resources created in
- *             kbase_debug_job_fault_dev_init.
- * @kbdev:     Device pointer
- */
-void kbase_debug_job_fault_dev_term(struct kbase_device *kbdev);
-
-/**
- * kbase_debug_job_fault_context_init - Initialize the relevant
- *             data structure per context
- * @kctx: KBase context pointer
- */
-void kbase_debug_job_fault_context_init(struct kbase_context *kctx);
-
-/**
- * kbase_debug_job_fault_context_term - Release the relevant
- *             resource per context
- * @kctx: KBase context pointer
- */
-void kbase_debug_job_fault_context_term(struct kbase_context *kctx);
-
-/**
- * kbase_debug_job_fault_process - Process the failed job.
- *      It will send a event and wake up the job fault waiting queue
- *      Then create a work queue to wait for job dump finish
- *      This function should be called in the interrupt handler and before
- *      jd_done that make sure the jd_done_worker will be delayed until the
- *      job dump finish
- * @katom: The failed atom pointer
- * @completion_code: the job status
- * @return true if dump is going on
- */
-bool kbase_debug_job_fault_process(struct kbase_jd_atom *katom,
-               u32 completion_code);
-
-
-/**
- * kbase_debug_job_fault_reg_snapshot_init - Set the interested registers
- *      address during the job fault process, the relevant registers will
- *      be saved when a job fault happen
- * @kctx: KBase context pointer
- * @reg_range: Maximum register address space
- * @return true if initializing successfully
- */
-bool kbase_debug_job_fault_reg_snapshot_init(struct kbase_context *kctx,
-               int reg_range);
-
-/**
- * kbase_job_fault_get_reg_snapshot - Read the interested registers for
- *      failed job dump
- * @kctx: KBase context pointer
- * @return true if getting registers successfully
- */
-bool kbase_job_fault_get_reg_snapshot(struct kbase_context *kctx);
-
-#endif  /*_KBASE_DEBUG_JOB_FAULT_H*/
diff --git a/midgard/mali_kbase_debug_mem_view.h b/midgard/mali_kbase_debug_mem_view.h
deleted file mode 100644 (file)
index 20ab51a..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2013-2014 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.
- *
- */
-
-
-
-#ifndef _KBASE_DEBUG_MEM_VIEW_H
-#define _KBASE_DEBUG_MEM_VIEW_H
-
-#include <mali_kbase.h>
-
-void kbase_debug_mem_view_init(struct file *kctx_file);
-
-#endif
diff --git a/midgard/mali_kbase_defs.h b/midgard/mali_kbase_defs.h
deleted file mode 100644 (file)
index 8fda3aa..0000000
+++ /dev/null
@@ -1,1465 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2011-2016 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_defs.h
- *
- * Defintions (types, defines, etcs) common to Kbase. They are placed here to
- * allow the hierarchy of header files to work.
- */
-
-#ifndef _KBASE_DEFS_H_
-#define _KBASE_DEFS_H_
-
-#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.h>
-
-#include <linux/atomic.h>
-#include <linux/mempool.h>
-#include <linux/slab.h>
-#include <linux/file.h>
-
-#ifdef CONFIG_MALI_FPGA_BUS_LOGGER
-#include <linux/bus_logger.h>
-#endif
-
-
-#ifdef CONFIG_KDS
-#include <linux/kds.h>
-#endif                         /* CONFIG_KDS */
-
-#ifdef CONFIG_SYNC
-#include "sync.h"
-#endif                         /* CONFIG_SYNC */
-
-#include "mali_kbase_dma_fence.h"
-
-#ifdef CONFIG_DEBUG_FS
-#include <linux/debugfs.h>
-#endif                         /* CONFIG_DEBUG_FS */
-
-#ifdef CONFIG_PM_DEVFREQ
-#include <linux/devfreq.h>
-#endif /* CONFIG_DEVFREQ */
-
-#include <linux/clk.h>
-#include <linux/regulator/consumer.h>
-
-#if defined(CONFIG_PM_RUNTIME) || \
-       (defined(CONFIG_PM) && LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0))
-#define KBASE_PM_RUNTIME 1
-#endif
-
-/** Enable SW tracing when set */
-#ifdef CONFIG_MALI_MIDGARD_ENABLE_TRACE
-#define KBASE_TRACE_ENABLE 1
-#endif
-
-#ifndef KBASE_TRACE_ENABLE
-#ifdef CONFIG_MALI_DEBUG
-#define KBASE_TRACE_ENABLE 1
-#else
-#define KBASE_TRACE_ENABLE 0
-#endif                         /* CONFIG_MALI_DEBUG */
-#endif                         /* KBASE_TRACE_ENABLE */
-
-/** Dump Job slot trace on error (only active if KBASE_TRACE_ENABLE != 0) */
-#define KBASE_TRACE_DUMP_ON_JOB_SLOT_ERROR 1
-
-/**
- * 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.
- */
-#define ZAP_TIMEOUT             1000
-
-/** Number of milliseconds before we time out on a GPU soft/hard reset */
-#define RESET_TIMEOUT           500
-
-/**
- * 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.
- *
- * @note Soft stop will still be used for non-scheduling purposes e.g. when terminating a context.
- *
- * @note if not in use, define this value to 0 instead of \#undef'ing it
- */
-#define KBASE_DISABLE_SCHEDULING_SOFT_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.
- *
- * @note Hard stop will still be used for non-scheduling purposes e.g. when terminating a context.
- *
- * @note if not in use, define this value to 0 instead of \#undef'ing it
- */
-#define KBASE_DISABLE_SCHEDULING_HARD_STOPS 0
-
-/**
- * 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_JM_MAX_NR_SLOTS        3
-
-/**
- * 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 BASE_MAX_NR_AS              16
-
-/* mmu */
-#define MIDGARD_MMU_VA_BITS 48
-
-#if MIDGARD_MMU_VA_BITS > 39
-#define MIDGARD_MMU_TOPLEVEL    0
-#else
-#define MIDGARD_MMU_TOPLEVEL    1
-#endif
-
-#define MIDGARD_MMU_BOTTOMLEVEL 3
-
-#define GROWABLE_FLAGS_REQUIRED (KBASE_REG_PF_GROW | KBASE_REG_GPU_WR)
-
-/** setting in kbase_context::as_nr that indicates it's invalid */
-#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)
-
-#include "mali_kbase_js_defs.h"
-#include "mali_kbase_hwaccess_defs.h"
-
-#define KBASEP_FORCE_REPLAY_DISABLED 0
-
-/* Maximum force replay limit when randomization is enabled */
-#define KBASEP_FORCE_REPLAY_RANDOM_LIMIT 16
-
-/** Atom has been previously soft-stoppped */
-#define KBASE_KATOM_FLAG_BEEN_SOFT_STOPPPED (1<<1)
-/** Atom has been previously retried to execute */
-#define KBASE_KATOM_FLAGS_RERUN (1<<2)
-#define KBASE_KATOM_FLAGS_JOBCHAIN (1<<3)
-/** Atom has been previously hard-stopped. */
-#define KBASE_KATOM_FLAG_BEEN_HARD_STOPPED (1<<4)
-/** Atom has caused us to enter disjoint state */
-#define KBASE_KATOM_FLAG_IN_DISJOINT (1<<5)
-/* Atom has fail dependency on same-slot dependency */
-#define KBASE_KATOM_FLAG_FAIL_PREV (1<<6)
-/* Atom blocked on cross-slot dependency */
-#define KBASE_KATOM_FLAG_X_DEP_BLOCKED (1<<7)
-/* Atom has fail dependency on cross-slot dependency */
-#define KBASE_KATOM_FLAG_FAIL_BLOCKER (1<<8)
-/* Atom has been submitted to JSCTX ringbuffers */
-#define KBASE_KATOM_FLAG_JSCTX_RB_SUBMITTED (1<<9)
-/* Atom is currently holding a context reference */
-#define KBASE_KATOM_FLAG_HOLDING_CTX_REF (1<<10)
-/* Atom requires GPU to be in secure mode */
-#define KBASE_KATOM_FLAG_SECURE (1<<11)
-/* Atom has been stored in linked list */
-#define KBASE_KATOM_FLAG_JSCTX_IN_LL (1<<12)
-
-/* SW related flags about types of JS_COMMAND action
- * NOTE: These must be masked off by JS_COMMAND_MASK */
-
-/** This command causes a disjoint event */
-#define JS_COMMAND_SW_CAUSES_DISJOINT 0x100
-
-/** Bitmask of all SW related flags */
-#define JS_COMMAND_SW_BITS  (JS_COMMAND_SW_CAUSES_DISJOINT)
-
-#if (JS_COMMAND_SW_BITS & JS_COMMAND_MASK)
-#error JS_COMMAND_SW_BITS not masked off by JS_COMMAND_MASK. Must update JS_COMMAND_SW_<..> bitmasks
-#endif
-
-/** Soft-stop command that causes a Disjoint event. This of course isn't
- *  entirely masked off by JS_COMMAND_MASK */
-#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
-
-#ifdef CONFIG_DEBUG_FS
-struct base_job_fault_event {
-
-       u32 event_code;
-       struct kbase_jd_atom *katom;
-       struct work_struct job_fault_work;
-       struct list_head head;
-       int reg_offset;
-};
-
-#endif
-
-struct kbase_jd_atom_dependency {
-       struct kbase_jd_atom *atom;
-       u8 dep_type;
-};
-
-/**
- * @brief The function retrieves a read-only reference to the atom field from
- * the  kbase_jd_atom_dependency structure
- *
- * @param[in] dep kbase jd atom dependency.
- *
- * @return readonly reference to dependent ATOM.
- */
-static inline const struct kbase_jd_atom *const kbase_jd_katom_dep_atom(const struct kbase_jd_atom_dependency *dep)
-{
-       LOCAL_ASSERT(dep != NULL);
-
-       return (const struct kbase_jd_atom * const)(dep->atom);
-}
-
-/**
- * @brief The function retrieves a read-only reference to the dependency type field from
- * the  kbase_jd_atom_dependency structure
- *
- * @param[in] dep kbase jd atom dependency.
- *
- * @return A dependency type value.
- */
-static inline const u8 kbase_jd_katom_dep_type(const struct kbase_jd_atom_dependency *dep)
-{
-       LOCAL_ASSERT(dep != NULL);
-
-       return dep->dep_type;
-}
-
-/**
- * @brief Setter macro for dep_atom array entry in kbase_jd_atom
- *
- * @param[in] dep    The kbase jd atom dependency.
- * @param[in] a      The ATOM to be set as a dependency.
- * @param     type   The ATOM dependency type to be set.
- *
- */
-static inline void kbase_jd_katom_dep_set(const struct kbase_jd_atom_dependency *const_dep,
-               struct kbase_jd_atom *a, u8 type)
-{
-       struct kbase_jd_atom_dependency *dep;
-
-       LOCAL_ASSERT(const_dep != NULL);
-
-       dep = (struct kbase_jd_atom_dependency *)const_dep;
-
-       dep->atom = a;
-       dep->dep_type = type;
-}
-
-/**
- * @brief Setter macro for dep_atom array entry in kbase_jd_atom
- *
- * @param[in] dep    The kbase jd atom dependency to be cleared.
- *
- */
-static inline void kbase_jd_katom_dep_clear(const struct kbase_jd_atom_dependency *const_dep)
-{
-       struct kbase_jd_atom_dependency *dep;
-
-       LOCAL_ASSERT(const_dep != NULL);
-
-       dep = (struct kbase_jd_atom_dependency *)const_dep;
-
-       dep->atom = NULL;
-       dep->dep_type = BASE_JD_DEP_TYPE_INVALID;
-}
-
-enum kbase_atom_gpu_rb_state {
-       /* Atom is not currently present in slot ringbuffer */
-       KBASE_ATOM_GPU_RB_NOT_IN_SLOT_RB,
-       /* Atom is in slot ringbuffer but is blocked on a previous atom */
-       KBASE_ATOM_GPU_RB_WAITING_BLOCKED,
-       /* Atom is in slot ringbuffer but is waiting for cores to become
-        * available */
-       KBASE_ATOM_GPU_RB_WAITING_FOR_CORE_AVAILABLE,
-       /* Atom is in slot ringbuffer but is blocked on affinity */
-       KBASE_ATOM_GPU_RB_WAITING_AFFINITY,
-       /* Atom is in slot ringbuffer but is waiting for secure mode switch */
-       KBASE_ATOM_GPU_RB_WAITING_SECURE_MODE,
-       /* Atom is in slot ringbuffer and ready to run */
-       KBASE_ATOM_GPU_RB_READY,
-       /* Atom is in slot ringbuffer and has been submitted to the GPU */
-       KBASE_ATOM_GPU_RB_SUBMITTED,
-       /* Atom must be returned to JS as soon as it reaches the head of the
-        * ringbuffer due to a previous failure */
-       KBASE_ATOM_GPU_RB_RETURN_TO_JS
-};
-
-struct kbase_ext_res {
-       u64 gpu_address;
-       struct kbase_mem_phy_alloc *alloc;
-};
-
-struct kbase_jd_atom {
-       struct work_struct work;
-       ktime_t start_timestamp;
-       u64 time_spent_us; /**< Total time spent on the GPU in microseconds */
-
-       struct base_jd_udata udata;
-       struct kbase_context *kctx;
-
-       struct list_head dep_head[2];
-       struct list_head dep_item[2];
-       const struct kbase_jd_atom_dependency dep[2];
-
-       u16 nr_extres;
-       struct kbase_ext_res *extres;
-
-       u32 device_nr;
-       u64 affinity;
-       u64 jc;
-       enum kbase_atom_coreref_state coreref_state;
-#ifdef CONFIG_KDS
-       struct list_head node;
-       struct kds_resource_set *kds_rset;
-       bool kds_dep_satisfied;
-#endif                         /* CONFIG_KDS */
-#ifdef CONFIG_SYNC
-       struct sync_fence *fence;
-       struct sync_fence_waiter sync_waiter;
-#endif                         /* CONFIG_SYNC */
-#ifdef CONFIG_MALI_DMA_FENCE
-       struct {
-               /* This points to the dma-buf fence for this atom. If this is
-                * NULL then there is no fence for this atom and the other
-                * fields related to dma_fence may have invalid data.
-                *
-                * The context and seqno fields contain the details for this
-                * fence.
-                *
-                * This fence is signaled when the katom is completed,
-                * regardless of the event_code of the katom (signal also on
-                * failure).
-                */
-               struct dma_fence *fence;
-               /* The dma-buf fence context number for this atom. A unique
-                * context number is allocated to each katom in the context on
-                * context creation.
-                */
-               unsigned int context;
-               /* The dma-buf fence sequence number for this atom. This is
-                * increased every time this katom uses dma-buf fence.
-                */
-               atomic_t seqno;
-               /* This contains a list of all callbacks set up to wait on
-                * other fences.  This atom must be held back from JS until all
-                * these callbacks have been called and dep_count have reached
-                * 0. The initial value of dep_count must be equal to the
-                * number of callbacks on this list.
-                *
-                * This list is protected by jctx.lock. Callbacks are added to
-                * this list when the atom is built and the wait are set up.
-                * All the callbacks then stay on the list until all callbacks
-                * have been called and the atom is queued, or cancelled, and
-                * then all callbacks are taken off the list and freed.
-                */
-               struct list_head callbacks;
-               /* Atomic counter of number of outstandind dma-buf fence
-                * dependencies for this atom. When dep_count reaches 0 the
-                * atom may be queued.
-                *
-                * The special value "-1" may only be set after the count
-                * reaches 0, while holding jctx.lock. This indicates that the
-                * atom has been handled, either queued in JS or cancelled.
-                *
-                * If anyone but the dma-fence worker sets this to -1 they must
-                * ensure that any potentially queued worker must have
-                * completed before allowing the atom to be marked as unused.
-                * This can be done by flushing the fence work queue:
-                * kctx->dma_fence.wq.
-                */
-               atomic_t dep_count;
-       } dma_fence;
-#endif /* CONFIG_MALI_DMA_FENCE */
-
-       /* Note: refer to kbasep_js_atom_retained_state, which will take a copy of some of the following members */
-       enum base_jd_event_code event_code;
-       base_jd_core_req core_req;          /**< core requirements */
-       /** Job Slot to retry submitting to if submission from IRQ handler failed
-        *
-        * NOTE: see if this can be unified into the another member e.g. the event */
-       int retry_submit_on_slot;
-
-       union kbasep_js_policy_job_info sched_info;
-       /* JS atom priority with respect to other atoms on its kctx. */
-       int sched_priority;
-
-       int poking;             /* BASE_HW_ISSUE_8316 */
-
-       wait_queue_head_t completed;
-       enum kbase_jd_atom_state status;
-#ifdef CONFIG_GPU_TRACEPOINTS
-       int work_id;
-#endif
-       /* Assigned after atom is completed. Used to check whether PRLAM-10676 workaround should be applied */
-       int slot_nr;
-
-       u32 atom_flags;
-
-       /* Number of times this atom has been retried. Used by replay soft job.
-        */
-       int retry_count;
-
-       enum kbase_atom_gpu_rb_state gpu_rb_state;
-
-       u64 need_cache_flush_cores_retained;
-
-       atomic_t blocked;
-
-       /* Pointer to atom that this atom has cross-slot dependency on */
-       struct kbase_jd_atom *x_pre_dep;
-       /* Pointer to atom that has cross-slot dependency on this atom */
-       struct kbase_jd_atom *x_post_dep;
-
-       /* The GPU's flush count recorded at the time of submission, used for
-        * the cache flush optimisation */
-       u32 flush_id;
-
-       struct kbase_jd_atom_backend backend;
-#ifdef CONFIG_DEBUG_FS
-       struct base_job_fault_event fault_event;
-#endif
-
-       struct list_head queue;
-
-       struct kbase_va_region *jit_addr_reg;
-
-       /* If non-zero, this indicates that the atom will fail with the set
-        * event_code when the atom is processed. */
-       enum base_jd_event_code will_fail_event_code;
-};
-
-static inline bool kbase_jd_katom_is_secure(const struct kbase_jd_atom *katom)
-{
-       return (bool)(katom->atom_flags & KBASE_KATOM_FLAG_SECURE);
-}
-
-/*
- * Theory of operations:
- *
- * Atom objects are statically allocated within the context structure.
- *
- * Each atom is the head of two lists, one for the "left" set of dependencies, one for the "right" set.
- */
-
-#define KBASE_JD_DEP_QUEUE_SIZE 256
-
-struct kbase_jd_context {
-       struct mutex lock;
-       struct kbasep_js_kctx_info sched_info;
-       struct kbase_jd_atom atoms[BASE_JD_ATOM_COUNT];
-
-       /** Tracks all job-dispatch jobs.  This includes those not tracked by
-        * the scheduler: 'not ready to run' and 'dependency-only' jobs. */
-       u32 job_nr;
-
-       /** Waitq that reflects whether there are no jobs (including SW-only
-        * dependency jobs). This is set when no jobs are present on the ctx,
-        * and clear when there are jobs.
-        *
-        * @note: Job Dispatcher knows about more jobs than the Job Scheduler:
-        * the Job Scheduler is unaware of jobs that are blocked on dependencies,
-        * and SW-only dependency jobs.
-        *
-        * This waitq can be waited upon to find out when the context jobs are all
-        * done/cancelled (including those that might've been blocked on
-        * dependencies) - and so, whether it can be terminated. However, it should
-        * only be terminated once it is neither present in the policy-queue (see
-        * kbasep_js_policy_try_evict_ctx() ) nor the run-pool (see
-        * kbasep_js_kctx_info::ctx::is_scheduled).
-        *
-        * Since the waitq is only set under kbase_jd_context::lock,
-        * the waiter should also briefly obtain and drop kbase_jd_context::lock to
-        * guarentee that the setter has completed its work on the kbase_context
-        *
-        * This must be updated atomically with:
-        * - kbase_jd_context::job_nr */
-       wait_queue_head_t zero_jobs_wait;
-
-       /** Job Done workqueue. */
-       struct workqueue_struct *job_done_wq;
-
-       spinlock_t tb_lock;
-       u32 *tb;
-       size_t tb_wrap_offset;
-
-#ifdef CONFIG_KDS
-       struct kds_callback kds_cb;
-#endif                         /* CONFIG_KDS */
-#ifdef CONFIG_GPU_TRACEPOINTS
-       atomic_t work_id;
-#endif
-};
-
-struct kbase_device_info {
-       u32 features;
-};
-
-/** Poking state for BASE_HW_ISSUE_8316  */
-enum {
-       KBASE_AS_POKE_STATE_IN_FLIGHT     = 1<<0,
-       KBASE_AS_POKE_STATE_KILLING_POKE  = 1<<1
-};
-
-/** Poking state for BASE_HW_ISSUE_8316  */
-typedef u32 kbase_as_poke_state;
-
-struct kbase_mmu_setup {
-       u64     transtab;
-       u64     memattr;
-       u64     transcfg;
-};
-
-/**
- * Important: Our code makes assumptions that a struct kbase_as structure is always at
- * kbase_device->as[number]. This is used to recover the containing
- * struct kbase_device from a struct kbase_as structure.
- *
- * Therefore, struct kbase_as structures must not be allocated anywhere else.
- */
-struct kbase_as {
-       int number;
-
-       struct workqueue_struct *pf_wq;
-       struct work_struct work_pagefault;
-       struct work_struct work_busfault;
-       enum kbase_mmu_fault_type fault_type;
-       u32 fault_status;
-       u64 fault_addr;
-       u64 fault_extra_addr;
-       struct mutex transaction_mutex;
-
-       struct kbase_mmu_setup current_setup;
-
-       /* BASE_HW_ISSUE_8316  */
-       struct workqueue_struct *poke_wq;
-       struct work_struct poke_work;
-       /** Protected by kbasep_js_device_data::runpool_irq::lock */
-       int poke_refcount;
-       /** Protected by kbasep_js_device_data::runpool_irq::lock */
-       kbase_as_poke_state poke_state;
-       struct hrtimer poke_timer;
-};
-
-static inline int kbase_as_has_bus_fault(struct kbase_as *as)
-{
-       return as->fault_type == KBASE_MMU_FAULT_TYPE_BUS;
-}
-
-static inline int kbase_as_has_page_fault(struct kbase_as *as)
-{
-       return as->fault_type == KBASE_MMU_FAULT_TYPE_PAGE;
-}
-
-struct kbasep_mem_device {
-       atomic_t used_pages;   /* Tracks usage of OS shared memory. Updated
-                                  when OS memory is allocated/freed. */
-
-};
-
-#define KBASE_TRACE_CODE(X) KBASE_TRACE_CODE_ ## X
-
-enum kbase_trace_code {
-       /* IMPORTANT: USE OF SPECIAL #INCLUDE OF NON-STANDARD HEADER FILE
-        * THIS MUST BE USED AT THE START OF THE ENUM */
-#define KBASE_TRACE_CODE_MAKE_CODE(X) KBASE_TRACE_CODE(X)
-#include "mali_kbase_trace_defs.h"
-#undef  KBASE_TRACE_CODE_MAKE_CODE
-       /* Comma on its own, to extend the list */
-       ,
-       /* Must be the last in the enum */
-       KBASE_TRACE_CODE_COUNT
-};
-
-#define KBASE_TRACE_FLAG_REFCOUNT (((u8)1) << 0)
-#define KBASE_TRACE_FLAG_JOBSLOT  (((u8)1) << 1)
-
-struct kbase_trace {
-       struct timespec timestamp;
-       u32 thread_id;
-       u32 cpu;
-       void *ctx;
-       bool katom;
-       int atom_number;
-       u64 atom_udata[2];
-       u64 gpu_addr;
-       unsigned long info_val;
-       u8 code;
-       u8 jobslot;
-       u8 refcount;
-       u8 flags;
-};
-
-/** 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 */
-enum kbase_timeline_pm_event {
-       /* helper for tests */
-       KBASEP_TIMELINE_PM_EVENT_FIRST,
-
-       /** Event reserved for backwards compatibility with 'init' events */
-       KBASE_TIMELINE_PM_EVENT_RESERVED_0 = KBASEP_TIMELINE_PM_EVENT_FIRST,
-
-       /** The power state of the device has changed.
-        *
-        * Specifically, the device has reached a desired or available state.
-        */
-       KBASE_TIMELINE_PM_EVENT_GPU_STATE_CHANGED,
-
-       /** The GPU is becoming active.
-        *
-        * This event is sent when the first context is about to use the GPU.
-        */
-       KBASE_TIMELINE_PM_EVENT_GPU_ACTIVE,
-
-       /** The GPU is becoming idle.
-        *
-        * This event is sent when the last context has finished using the GPU.
-        */
-       KBASE_TIMELINE_PM_EVENT_GPU_IDLE,
-
-       /** Event reserved for backwards compatibility with 'policy_change'
-        * events */
-       KBASE_TIMELINE_PM_EVENT_RESERVED_4,
-
-       /** Event reserved for backwards compatibility with 'system_suspend'
-        * events */
-       KBASE_TIMELINE_PM_EVENT_RESERVED_5,
-
-       /** Event reserved for backwards compatibility with 'system_resume'
-        * events */
-       KBASE_TIMELINE_PM_EVENT_RESERVED_6,
-
-       /** The job scheduler is requesting to power up/down cores.
-        *
-        * This event is sent when:
-        * - powered down cores are needed to complete a job
-        * - powered up cores are not needed anymore
-        */
-       KBASE_TIMELINE_PM_EVENT_CHANGE_GPU_STATE,
-
-       KBASEP_TIMELINE_PM_EVENT_LAST = KBASE_TIMELINE_PM_EVENT_CHANGE_GPU_STATE,
-};
-
-#ifdef CONFIG_MALI_TRACE_TIMELINE
-struct kbase_trace_kctx_timeline {
-       atomic_t jd_atoms_in_flight;
-       u32 owner_tgid;
-};
-
-struct kbase_trace_kbdev_timeline {
-       /* Note: strictly speaking, not needed, because it's in sync with
-        * kbase_device::jm_slots[]::submitted_nr
-        *
-        * But it's kept as an example of how to add global timeline tracking
-        * information
-        *
-        * The caller must hold kbasep_js_device_data::runpool_irq::lock when
-        * accessing this */
-       u8 slot_atoms_submitted[BASE_JM_MAX_NR_SLOTS];
-
-       /* Last UID for each PM event */
-       atomic_t pm_event_uid[KBASEP_TIMELINE_PM_EVENT_LAST+1];
-       /* Counter for generating PM event UIDs */
-       atomic_t pm_event_uid_counter;
-       /*
-        * L2 transition state - true indicates that the transition is ongoing
-        * Expected to be protected by pm.power_change_lock */
-       bool l2_transitioning;
-};
-#endif /* CONFIG_MALI_TRACE_TIMELINE */
-
-
-struct kbasep_kctx_list_element {
-       struct list_head link;
-       struct kbase_context *kctx;
-};
-
-/**
- * Data stored per device for power management.
- *
- * This structure contains data for the power management framework. There is one
- * instance of this structure per device in the system.
- */
-struct kbase_pm_device_data {
-       /**
-        * The lock protecting Power Management structures accessed outside of
-        * IRQ.
-        *
-        * This lock must also be held whenever the GPU is being powered on or
-        * off.
-        */
-       struct mutex lock;
-
-       /** The reference count of active contexts on this device. */
-       int active_count;
-       /** Flag indicating suspending/suspended */
-       bool suspending;
-       /* Wait queue set when active_count == 0 */
-       wait_queue_head_t zero_active_count_wait;
-
-       /**
-        * Bit masks identifying the available shader cores that are specified
-        * via sysfs. One mask per job slot.
-        */
-       u64 debug_core_mask[BASE_JM_MAX_NR_SLOTS];
-       u64 debug_core_mask_all;
-
-       /**
-        * Lock protecting the power state of the device.
-        *
-        * This lock must be held when accessing the shader_available_bitmap,
-        * tiler_available_bitmap, l2_available_bitmap, shader_inuse_bitmap and
-        * tiler_inuse_bitmap fields of kbase_device, and the ca_in_transition
-        * and shader_poweroff_pending fields of kbase_pm_device_data. It is
-        * also held when the hardware power registers are being written to, to
-        * ensure that two threads do not conflict over the power transitions
-        * that the hardware should make.
-        */
-       spinlock_t power_change_lock;
-
-       /**
-        * Callback for initializing the runtime power management.
-        *
-        * @param kbdev The kbase device
-        *
-        * @return 0 on success, else error code
-        */
-        int (*callback_power_runtime_init)(struct kbase_device *kbdev);
-
-       /**
-        * Callback for terminating the runtime power management.
-        *
-        * @param kbdev The kbase device
-        */
-       void (*callback_power_runtime_term)(struct kbase_device *kbdev);
-
-       /* Time in milliseconds between each dvfs sample */
-       u32 dvfs_period;
-
-       /* Period of GPU poweroff timer */
-       ktime_t gpu_poweroff_time;
-
-       /* Number of ticks of GPU poweroff timer before shader is powered off */
-       int poweroff_shader_ticks;
-
-       /* Number of ticks of GPU poweroff timer before GPU is powered off */
-       int poweroff_gpu_ticks;
-
-       struct kbase_pm_backend_data backend;
-};
-
-/**
- * struct kbase_secure_ops - Platform specific functions for GPU secure mode
- * operations
- * @secure_mode_enable:  Callback to enable secure mode on the GPU
- * @secure_mode_disable: Callback to disable secure mode on the GPU
- */
-struct kbase_secure_ops {
-       /**
-        * secure_mode_enable() - Enable secure mode on the GPU
-        * @kbdev:      The kbase device
-        *
-        * Return: 0 on success, non-zero on error
-        */
-       int (*secure_mode_enable)(struct kbase_device *kbdev);
-
-       /**
-        * secure_mode_disable() - Disable secure mode on the GPU
-        * @kbdev:      The kbase device
-        *
-        * Return: 0 on success, non-zero on error
-        */
-       int (*secure_mode_disable)(struct kbase_device *kbdev);
-};
-
-
-/**
- * struct kbase_mem_pool - Page based memory pool for kctx/kbdev
- * @kbdev:     Kbase device where memory is used
- * @cur_size:  Number of free pages currently in the pool (may exceed @max_size
- *             in some corner cases)
- * @max_size:  Maximum number of free pages in the pool
- * @pool_lock: Lock protecting the pool - must be held when modifying @cur_size
- *             and @page_list
- * @page_list: List of free pages in the pool
- * @reclaim:   Shrinker for kernel reclaim of free pages
- * @next_pool: Pointer to next pool where pages can be allocated when this pool
- *             is empty. Pages will spill over to the next pool when this pool
- *             is full. Can be NULL if there is no next pool.
- */
-struct kbase_mem_pool {
-       struct kbase_device *kbdev;
-       size_t              cur_size;
-       size_t              max_size;
-       spinlock_t          pool_lock;
-       struct list_head    page_list;
-       struct shrinker     reclaim;
-
-       struct kbase_mem_pool *next_pool;
-};
-
-
-#define DEVNAME_SIZE   16
-
-struct kbase_device {
-       s8 slot_submit_count_irq[BASE_JM_MAX_NR_SLOTS];
-
-       u32 hw_quirks_sc;
-       u32 hw_quirks_tiler;
-       u32 hw_quirks_mmu;
-       u32 hw_quirks_jm;
-
-       struct list_head entry;
-       struct device *dev;
-       struct miscdevice mdev;
-       u64 reg_start;
-       size_t reg_size;
-       void __iomem *reg;
-
-       struct {
-               int irq;
-               int flags;
-       } irqs[3];
-
-       struct clk *clock;
-#ifdef CONFIG_REGULATOR
-       struct regulator *regulator;
-#endif
-       char devname[DEVNAME_SIZE];
-
-#ifdef CONFIG_MALI_NO_MALI
-       void *model;
-       struct kmem_cache *irq_slab;
-       struct workqueue_struct *irq_workq;
-       atomic_t serving_job_irq;
-       atomic_t serving_gpu_irq;
-       atomic_t serving_mmu_irq;
-       spinlock_t reg_op_lock;
-#endif /* CONFIG_MALI_NO_MALI */
-
-       struct kbase_pm_device_data pm;
-       struct kbasep_js_device_data js_data;
-       struct kbase_mem_pool mem_pool;
-       struct kbasep_mem_device memdev;
-       struct kbase_mmu_mode const *mmu_mode;
-
-       struct kbase_as as[BASE_MAX_NR_AS];
-
-       spinlock_t mmu_mask_change;
-
-       struct kbase_gpu_props gpu_props;
-
-       /** List of SW workarounds for HW issues */
-       unsigned long hw_issues_mask[(BASE_HW_ISSUE_END + BITS_PER_LONG - 1) / BITS_PER_LONG];
-       /** List of features available */
-       unsigned long hw_features_mask[(BASE_HW_FEATURE_END + BITS_PER_LONG - 1) / BITS_PER_LONG];
-
-       /* Bitmaps of cores that are currently in use (running jobs).
-        * These should be kept up to date by the job scheduler.
-        *
-        * pm.power_change_lock should be held when accessing these members.
-        *
-        * kbase_pm_check_transitions_nolock() should be called when bits are
-        * cleared to update the power management system and allow transitions to
-        * occur. */
-       u64 shader_inuse_bitmap;
-
-       /* Refcount for cores in use */
-       u32 shader_inuse_cnt[64];
-
-       /* Bitmaps of cores the JS needs for jobs ready to run */
-       u64 shader_needed_bitmap;
-
-       /* Refcount for cores needed */
-       u32 shader_needed_cnt[64];
-
-       u32 tiler_inuse_cnt;
-
-       u32 tiler_needed_cnt;
-
-       /* struct for keeping track of the disjoint information
-        *
-        * The state  is > 0 if the GPU is in a disjoint state. Otherwise 0
-        * The count is the number of disjoint events that have occurred on the GPU
-        */
-       struct {
-               atomic_t count;
-               atomic_t state;
-       } disjoint_event;
-
-       /* Refcount for tracking users of the l2 cache, e.g. when using hardware counter instrumentation. */
-       u32 l2_users_count;
-
-       /* Bitmaps of cores that are currently available (powered up and the power policy is happy for jobs to be
-        * submitted to these cores. These are updated by the power management code. The job scheduler should avoid
-        * submitting new jobs to any cores that are not marked as available.
-        *
-        * pm.power_change_lock should be held when accessing these members.
-        */
-       u64 shader_available_bitmap;
-       u64 tiler_available_bitmap;
-       u64 l2_available_bitmap;
-
-       u64 shader_ready_bitmap;
-       u64 shader_transitioning_bitmap;
-
-       s8 nr_hw_address_spaces;                          /**< Number of address spaces in the GPU (constant after driver initialisation) */
-       s8 nr_user_address_spaces;                        /**< Number of address spaces available to user contexts */
-
-       /* Structure used for instrumentation and HW counters dumping */
-       struct kbase_hwcnt {
-               /* The lock should be used when accessing any of the following members */
-               spinlock_t lock;
-
-               struct kbase_context *kctx;
-               u64 addr;
-
-               struct kbase_context *suspended_kctx;
-               struct kbase_uk_hwcnt_setup suspended_state;
-
-               struct kbase_instr_backend backend;
-       } hwcnt;
-
-       struct kbase_vinstr_context *vinstr_ctx;
-
-       /*value to be written to the irq_throttle register each time an irq is served */
-       atomic_t irq_throttle_cycles;
-
-#if KBASE_TRACE_ENABLE
-       spinlock_t              trace_lock;
-       u16                     trace_first_out;
-       u16                     trace_next_in;
-       struct kbase_trace            *trace_rbuf;
-#endif
-
-       /* This is used to override the current job scheduler values for
-        * JS_SCHEDULING_PERIOD_NS
-        * JS_SOFT_STOP_TICKS
-        * JS_SOFT_STOP_TICKS_CL
-        * JS_HARD_STOP_TICKS_SS
-        * JS_HARD_STOP_TICKS_CL
-        * JS_HARD_STOP_TICKS_DUMPING
-        * JS_RESET_TICKS_SS
-        * JS_RESET_TICKS_CL
-        * JS_RESET_TICKS_DUMPING.
-        *
-        * These values are set via the js_timeouts sysfs file.
-        */
-       u32 js_scheduling_period_ns;
-       int js_soft_stop_ticks;
-       int js_soft_stop_ticks_cl;
-       int js_hard_stop_ticks_ss;
-       int js_hard_stop_ticks_cl;
-       int js_hard_stop_ticks_dumping;
-       int js_reset_ticks_ss;
-       int js_reset_ticks_cl;
-       int js_reset_ticks_dumping;
-       bool js_timeouts_updated;
-
-       u32 reset_timeout_ms;
-
-       struct mutex cacheclean_lock;
-
-       /* Platform specific private data to be accessed by mali_kbase_config_xxx.c only */
-       void *platform_context;
-
-       /* List of kbase_contexts created */
-       struct list_head        kctx_list;
-       struct mutex            kctx_list_lock;
-
-#ifdef CONFIG_PM_DEVFREQ
-       struct devfreq_dev_profile devfreq_profile;
-       struct devfreq *devfreq;
-       unsigned long current_freq;
-       unsigned long current_voltage;
-#ifdef CONFIG_DEVFREQ_THERMAL
-       struct devfreq_cooling_device *devfreq_cooling;
-#endif
-#endif
-
-       struct kbase_ipa_context *ipa_ctx;
-
-#ifdef CONFIG_MALI_TRACE_TIMELINE
-       struct kbase_trace_kbdev_timeline timeline;
-#endif
-
-       /*
-        * Control for enabling job dump on failure, set when control debugfs
-        * is opened.
-        */
-       bool job_fault_debug;
-
-#ifdef CONFIG_DEBUG_FS
-       /* directory for debugfs entries */
-       struct dentry *mali_debugfs_directory;
-       /* Root directory for per context entry */
-       struct dentry *debugfs_ctx_directory;
-
-       /* failed job dump, used for separate debug process */
-       wait_queue_head_t job_fault_wq;
-       wait_queue_head_t job_fault_resume_wq;
-       struct workqueue_struct *job_fault_resume_workq;
-       struct list_head job_fault_event_list;
-       spinlock_t job_fault_event_lock;
-       struct kbase_context *kctx_fault;
-
-#if !MALI_CUSTOMER_RELEASE
-       /* Per-device data for register dumping interface */
-       struct {
-               u16 reg_offset; /* Offset of a GPU_CONTROL register to be
-                                  dumped upon request */
-       } regs_dump_debugfs_data;
-#endif /* !MALI_CUSTOMER_RELEASE */
-#endif /* CONFIG_DEBUG_FS */
-
-       /* fbdump profiling controls set by gator */
-       u32 kbase_profiling_controls[FBDUMP_CONTROL_MAX];
-
-
-#if MALI_CUSTOMER_RELEASE == 0
-       /* Number of jobs that are run before a job is forced to fail and
-        * replay. May be KBASEP_FORCE_REPLAY_DISABLED, to disable forced
-        * failures. */
-       int force_replay_limit;
-       /* Count of jobs between forced failures. Incremented on each job. A
-        * job is forced to fail once this is greater than or equal to
-        * force_replay_limit. */
-       int force_replay_count;
-       /* Core requirement for jobs to be failed and replayed. May be zero. */
-       base_jd_core_req force_replay_core_req;
-       /* true if force_replay_limit should be randomized. The random
-        * value will be in the range of 1 - KBASEP_FORCE_REPLAY_RANDOM_LIMIT.
-        */
-       bool force_replay_random;
-#endif
-
-       /* Total number of created contexts */
-       atomic_t ctx_num;
-
-       struct kbase_hwaccess_data hwaccess;
-
-       /* Count of page/bus faults waiting for workqueues to process */
-       atomic_t faults_pending;
-
-       /* true if GPU is powered off or power off operation is in progress */
-       bool poweroff_pending;
-
-
-       /* defaults for new context created for this device */
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 0))
-       bool infinite_cache_active_default;
-#else
-       u32 infinite_cache_active_default;
-#endif
-       size_t mem_pool_max_size_default;
-
-       /* system coherency mode  */
-       u32 system_coherency;
-       /* Flag to track when cci snoops have been enabled on the interface */
-       bool cci_snoop_enabled;
-
-       /* SMC function IDs to call into Trusted firmware to enable/disable
-        * cache snooping. Value of 0 indicates that they are not used
-        */
-       u32 snoop_enable_smc;
-       u32 snoop_disable_smc;
-
-       /* Secure operations */
-       struct kbase_secure_ops *secure_ops;
-
-       /*
-        * true when GPU is put into secure mode
-        */
-       bool secure_mode;
-
-       /*
-        * true if secure mode is supported
-        */
-       bool secure_mode_support;
-
-
-#ifdef CONFIG_MALI_DEBUG
-       wait_queue_head_t driver_inactive_wait;
-       bool driver_inactive;
-#endif /* CONFIG_MALI_DEBUG */
-
-#ifdef CONFIG_MALI_FPGA_BUS_LOGGER
-       /*
-        * Bus logger integration.
-        */
-       struct bus_logger_client *buslogger;
-#endif
-       /* Boolean indicating if an IRQ flush during reset is in progress. */
-       bool irq_reset_flush;
-
-       /* list of inited sub systems. Used during terminate/error recovery */
-       u32 inited_subsys;
-};
-
-/* JSCTX ringbuffer size will always be a power of 2. The idx shift must be:
-   - >=2 (buffer size -> 4)
-   - <= 9 (buffer size 2^(9-1)=256) (technically, 10 works for the ringbuffer
-                               but this is unnecessary as max atoms is 256)
- */
-#define JSCTX_RB_IDX_SHIFT (8U)
-#if ((JSCTX_RB_IDX_SHIFT < 2) || ((3 * JSCTX_RB_IDX_SHIFT) >= 32))
-#error "Invalid ring buffer size for 32bit atomic."
-#endif
-#define JSCTX_RB_SIZE (1U << (JSCTX_RB_IDX_SHIFT - 1U)) /* 1 bit for overflow */
-#define JSCTX_RB_SIZE_STORE (1U << JSCTX_RB_IDX_SHIFT)
-#define JSCTX_RB_MASK (JSCTX_RB_SIZE - 1U)
-#define JSCTX_RB_MASK_STORE (JSCTX_RB_SIZE_STORE - 1U)
-
-#define JSCTX_WR_OFFSET         (0U)
-#define JSCTX_RN_OFFSET         (JSCTX_WR_OFFSET   + JSCTX_RB_IDX_SHIFT)
-#define JSCTX_RD_OFFSET         (JSCTX_RN_OFFSET + JSCTX_RB_IDX_SHIFT)
-
-/**
- * struct jsctx_rb_entry - Ringbuffer entry in &struct jsctx_queue.
- * @atom_id: Atom ID
- */
-struct jsctx_rb_entry {
-       u16 atom_id;
-};
-
-/**
- * struct jsctx_queue - JS context atom queue, containing both ring buffer and linked list.
- * @entries:     Array of size %JSCTX_RB_SIZE which holds the &struct
- *               kbase_jd_atom pointers which make up the contents of the ring
- *               buffer.
- * @indicies:    An atomic variable containing indicies for the ring buffer.
- *               Indicies are of size JSCTX_RB_IDX_SHIFT.
- *               The following are contained:
- *                - WR_IDX - Write index. Index of the NEXT slot to be written.
- *                - RN_IDX - Running index. Index of the tail of the list.
- *                           This is the atom that has been running the longest.
- *                - RD_IDX - Read index. Index of the next atom to be pulled.
- * @queue_head:  Head item of the linked list queue.
- *
- * Locking:
- * The linked list assumes jctx.lock is held.
- * The ringbuffer serves as an intermediary between irq context and non-irq
- * context, without the need for the two to share any lock. irq context can
- * pull (and unpull) and only requires the runpool_irq.lock. While non-irq
- * context can add and remove and only requires holding only jctx.lock.
- * Error handling affecting both, or the whole ringbuffer in general, must
- * hold both locks or otherwise ensure (f.ex deschedule/kill) only that thread
- * is accessing the buffer.
- * This means that RD_IDX is updated by irq-context (pull and unpull) and must
- * hold runpool_irq.lock. While WR_IDX (add) and RN_IDX (remove) is updated by
- * non-irq context and must hold jctx.lock.
- * Note that pull (or sister function peek) must also access WR_IDX to ensure
- * there is free space in the buffer, this is ok as WR_IDX is only increased.
- * A similar situation is apparent with unpull and RN_IDX, but only one atom
- * (already pulled) can cause either remove or unpull, so this will never
- * conflict.
- *
- * &struct jsctx_queue is a queue of &struct kbase_jd_atom,
- * part ringbuffer and part linked list.
- */
-struct jsctx_queue {
-       struct jsctx_rb_entry entries[JSCTX_RB_SIZE];
-
-       atomic_t indicies;
-
-       struct list_head queue_head;
-};
-
-
-
-
-
-#define KBASE_API_VERSION(major, minor) ((((major) & 0xFFF) << 20)  | \
-                                        (((minor) & 0xFFF) << 8) | \
-                                        ((0 & 0xFF) << 0))
-
-struct kbase_context {
-       struct file *filp;
-       struct kbase_device *kbdev;
-       int id; /* System wide unique id */
-       unsigned long api_version;
-       phys_addr_t pgd;
-       struct list_head event_list;
-       struct list_head event_coalesce_list;
-       struct mutex event_mutex;
-       atomic_t event_closed;
-       struct workqueue_struct *event_workq;
-       atomic_t event_count;
-       int event_coalesce_count;
-
-       bool is_compat;
-
-       atomic_t                setup_complete;
-       atomic_t                setup_in_progress;
-
-       u64 *mmu_teardown_pages;
-
-       struct page *aliasing_sink_page;
-
-       struct mutex            mmu_lock;
-       struct mutex            reg_lock; /* To be converted to a rwlock? */
-       struct rb_root          reg_rbtree; /* Red-Black tree of GPU regions (live regions) */
-
-       unsigned long    cookies;
-       struct kbase_va_region *pending_regions[BITS_PER_LONG];
-
-       wait_queue_head_t event_queue;
-       pid_t tgid;
-       pid_t pid;
-
-       struct kbase_jd_context jctx;
-       atomic_t used_pages;
-       atomic_t         nonmapped_pages;
-
-       struct kbase_mem_pool mem_pool;
-
-       struct shrinker         reclaim;
-       struct list_head        evict_list;
-       struct mutex            evict_lock;
-
-       struct list_head waiting_soft_jobs;
-       spinlock_t waiting_soft_jobs_lock;
-#ifdef CONFIG_KDS
-       struct list_head waiting_kds_resource;
-#endif
-#ifdef CONFIG_MALI_DMA_FENCE
-       struct {
-               struct list_head waiting_resource;
-               struct workqueue_struct *wq;
-       } dma_fence;
-#endif /* CONFIG_MALI_DMA_FENCE */
-       /** This is effectively part of the Run Pool, because it only has a valid
-        * setting (!=KBASEP_AS_NR_INVALID) whilst the context is scheduled in
-        *
-        * The kbasep_js_device_data::runpool_irq::lock must be held whilst accessing
-        * this.
-        *
-        * If the context relating to this as_nr is required, you must use
-        * kbasep_js_runpool_retain_ctx() to ensure that the context doesn't disappear
-        * whilst you're using it. Alternatively, just hold the kbasep_js_device_data::runpool_irq::lock
-        * to ensure the context doesn't disappear (but this has restrictions on what other locks
-        * you can take whilst doing this) */
-       int as_nr;
-
-       /* NOTE:
-        *
-        * Flags are in jctx.sched_info.ctx.flags
-        * Mutable flags *must* be accessed under jctx.sched_info.ctx.jsctx_mutex
-        *
-        * All other flags must be added there */
-       spinlock_t         mm_update_lock;
-       struct mm_struct *process_mm;
-       /* End of the SAME_VA zone */
-       u64 same_va_end;
-
-#ifdef CONFIG_MALI_TRACE_TIMELINE
-       struct kbase_trace_kctx_timeline timeline;
-#endif
-#ifdef CONFIG_DEBUG_FS
-       /* Content of mem_profile file */
-       char *mem_profile_data;
-       /* Size of @c mem_profile_data */
-       size_t mem_profile_size;
-       /* Mutex guarding memory profile state */
-       struct mutex mem_profile_lock;
-       /* Memory profile file created */
-       bool mem_profile_initialized;
-       struct dentry *kctx_dentry;
-
-       /* for job fault debug */
-       unsigned int *reg_dump;
-       atomic_t job_fault_count;
-       /* This list will keep the following atoms during the dump
-        * in the same context
-        */
-       struct list_head job_fault_resume_event_list;
-
-#endif /* CONFIG_DEBUG_FS */
-
-       struct jsctx_queue jsctx_queue
-               [KBASE_JS_ATOM_SCHED_PRIO_COUNT][BASE_JM_MAX_NR_SLOTS];
-
-       /* Number of atoms currently pulled from this context */
-       atomic_t atoms_pulled;
-       /* Number of atoms currently pulled from this context, per slot */
-       atomic_t atoms_pulled_slot[BASE_JM_MAX_NR_SLOTS];
-       /* true if last kick() caused atoms to be pulled from this context */
-       bool pulled;
-       /* true if infinite cache is to be enabled for new allocations. Existing
-        * allocations will not change. bool stored as a u32 per Linux API */
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 0))
-       bool infinite_cache_active;
-#else
-       u32 infinite_cache_active;
-#endif
-       /* Bitmask of slots that can be pulled from */
-       u32 slots_pullable;
-
-       /* true if address space assignment is pending */
-       bool as_pending;
-
-       /* Backend specific data */
-       struct kbase_context_backend backend;
-
-       /* Work structure used for deferred ASID assignment */
-       struct work_struct work;
-
-       /* Only one userspace vinstr client per kbase context */
-       struct kbase_vinstr_client *vinstr_cli;
-       struct mutex vinstr_cli_lock;
-
-       /* Must hold queue_mutex when accessing */
-       bool ctx_active;
-
-       /* List of completed jobs waiting for events to be posted */
-       struct list_head completed_jobs;
-       /* Number of work items currently pending on job_done_wq */
-       atomic_t work_count;
-
-       /* true if context is counted in kbdev->js_data.nr_contexts_runnable */
-       bool ctx_runnable_ref;
-
-       /* Waiting soft-jobs will fail when this timer expires */
-       struct hrtimer soft_event_timeout;
-
-       /* JIT allocation management */
-       struct kbase_va_region *jit_alloc[255];
-       struct list_head jit_active_head;
-       struct list_head jit_pool_head;
-       struct list_head jit_destroy_head;
-       struct mutex jit_lock;
-       struct work_struct jit_work;
-
-       /* External sticky resource management */
-       struct list_head ext_res_meta_head;
-};
-
-/**
- * struct kbase_ctx_ext_res_meta - Structure which binds an external resource
- *                                 to a @kbase_context.
- * @ext_res_node:                  List head for adding the metadata to a
- *                                 @kbase_context.
- * @alloc:                         The physical memory allocation structure
- *                                 which is mapped.
- * @gpu_addr:                      The GPU virtual address the resource is
- *                                 mapped to.
- *
- * External resources can be mapped into multiple contexts as well as the same
- * context multiple times.
- * As kbase_va_region itself isn't refcounted we can't attach our extra
- * information to it as it could be removed under our feet leaving external
- * resources pinned.
- * This metadata structure binds a single external resource to a single
- * context, ensuring that per context mapping is tracked separately so it can
- * be overridden when needed and abuses by the application (freeing the resource
- * multiple times) don't effect the refcount of the physical allocation.
- */
-struct kbase_ctx_ext_res_meta {
-       struct list_head ext_res_node;
-       struct kbase_mem_phy_alloc *alloc;
-       u64 gpu_addr;
-};
-
-enum kbase_reg_access_type {
-       REG_READ,
-       REG_WRITE
-};
-
-enum kbase_share_attr_bits {
-       /* (1ULL << 8) bit is reserved */
-       SHARE_BOTH_BITS = (2ULL << 8),  /* inner and outer shareable coherency */
-       SHARE_INNER_BITS = (3ULL << 8)  /* inner shareable coherency */
-};
-
-/**
- * kbase_device_is_cpu_coherent - Returns if the device is CPU coherent.
- * @kbdev: kbase device
- *
- * Return: true if the device access are coherent, false if not.
- */
-static inline bool kbase_device_is_cpu_coherent(struct kbase_device *kbdev)
-{
-       if ((kbdev->system_coherency == COHERENCY_ACE_LITE) ||
-                       (kbdev->system_coherency == COHERENCY_ACE))
-               return true;
-
-       return false;
-}
-
-/* Conversion helpers for setting up high resolution timers */
-#define HR_TIMER_DELAY_MSEC(x) (ns_to_ktime((x)*1000000U))
-#define HR_TIMER_DELAY_NSEC(x) (ns_to_ktime(x))
-
-/* Maximum number of loops polling the GPU for a cache flush before we assume it must have completed */
-#define KBASE_CLEAN_CACHE_MAX_LOOPS     100000
-/* Maximum number of loops polling the GPU for an AS command to complete before we assume the GPU has hung */
-#define KBASE_AS_INACTIVE_MAX_LOOPS     100000
-
-/* Maximum number of times a job can be replayed */
-#define BASEP_JD_REPLAY_LIMIT 15
-
-/* JobDescriptorHeader - taken from the architecture specifications, the layout
- * is currently identical for all GPU archs. */
-struct job_descriptor_header {
-       u32 exception_status;
-       u32 first_incomplete_task;
-       u64 fault_pointer;
-       u8 job_descriptor_size : 1;
-       u8 job_type : 7;
-       u8 job_barrier : 1;
-       u8 _reserved_01 : 1;
-       u8 _reserved_1 : 1;
-       u8 _reserved_02 : 1;
-       u8 _reserved_03 : 1;
-       u8 _reserved_2 : 1;
-       u8 _reserved_04 : 1;
-       u8 _reserved_05 : 1;
-       u16 job_index;
-       u16 job_dependency_index_1;
-       u16 job_dependency_index_2;
-       union {
-               u64 _64;
-               u32 _32;
-       } next_job;
-};
-
-#endif                         /* _KBASE_DEFS_H_ */
diff --git a/midgard/mali_kbase_dma_fence.h b/midgard/mali_kbase_dma_fence.h
deleted file mode 100644 (file)
index 74d3e6e..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2010-2016 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.
- *
- */
-
-
-
-#include "config.h"
-#ifndef _KBASE_DMA_FENCE_H_
-#define _KBASE_DMA_FENCE_H_
-
-#ifdef CONFIG_MALI_DMA_FENCE
-
-//#include <linux/fence.h>
-#include <linux/dma-fence.h>
-#include <linux/list.h>
-#include <linux/reservation.h>
-
-
-/* Forward declaration from mali_kbase_defs.h */
-struct kbase_jd_atom;
-struct kbase_context;
-
-/**
- * struct kbase_dma_fence_cb - Mali dma-fence callback data struct
- * @fence_cb: Callback function
- * @katom:    Pointer to katom that is waiting on this callback
- * @fence:    Pointer to the fence object on which this callback is waiting
- * @node:     List head for linking this callback to the katom
- */
-struct kbase_dma_fence_cb {
-       struct dma_fence_cb fence_cb;
-       struct kbase_jd_atom *katom;
-       struct dma_fence *fence;
-       struct list_head node;
-};
-
-/**
- * struct kbase_dma_fence_resv_info - Structure with list of reservation objects
- * @resv_objs:             Array of reservation objects to attach the
- *                         new fence to.
- * @dma_fence_resv_count:  Number of reservation objects in the array.
- * @dma_fence_excl_bitmap: Specifies which resv_obj are exclusive.
- *
- * This is used by some functions to pass around a collection of data about
- * reservation objects.
- */
-struct kbase_dma_fence_resv_info {
-       struct reservation_object **resv_objs;
-       unsigned int dma_fence_resv_count;
-       unsigned long *dma_fence_excl_bitmap;
-};
-
-/**
- * kbase_dma_fence_add_reservation() - Adds a resv to the array of resv_objs
- * @resv:      Reservation object to add to the array.
- * @info:      Pointer to struct with current reservation info
- * @exclusive: Boolean indicating if exclusive access is needed
- *
- * The function adds a new reservation_object to an existing array of
- * reservation_objects. At the same time keeps track of which objects require
- * exclusive access in dma_fence_excl_bitmap.
- */
-void kbase_dma_fence_add_reservation(struct reservation_object *resv,
-                                    struct kbase_dma_fence_resv_info *info,
-                                    bool exclusive);
-
-/**
- * kbase_dma_fence_wait() - Creates a new fence and attaches it to the resv_objs
- * @katom: Katom with the external dependency.
- * @info:  Pointer to struct with current reservation info
- *
- * Return: An error code or 0 if succeeds
- */
-int kbase_dma_fence_wait(struct kbase_jd_atom *katom,
-                        struct kbase_dma_fence_resv_info *info);
-
-/**
- * kbase_dma_fence_cancel_ctx() - Cancel all dma-fences blocked atoms on kctx
- * @kctx: Pointer to kbase context
- *
- * This function will cancel and clean up all katoms on @kctx that is waiting
- * on dma-buf fences.
- *
- * Locking: jctx.lock needs to be held when calling this function.
- */
-void kbase_dma_fence_cancel_all_atoms(struct kbase_context *kctx);
-
-/**
- * kbase_dma_fence_cancel_callbacks() - Cancel only callbacks on katom
- * @katom: Pointer to katom whose callbacks are to be canceled
- *
- * This function cancels all dma-buf fence callbacks on @katom, but does not
- * cancel the katom itself.
- *
- * The caller is responsible for ensuring that jd_done_nolock is called on
- * @katom.
- *
- * Locking: jctx.lock must be held when calling this function.
- */
-void kbase_dma_fence_cancel_callbacks(struct kbase_jd_atom *katom);
-
-/**
- * kbase_dma_fence_signal() - Signal katom's fence and clean up after wait
- * @katom: Pointer to katom to signal and clean up
- *
- * This function will signal the @katom's fence, if it has one, and clean up
- * the callback data from the katom's wait on earlier fences.
- *
- * Locking: jctx.lock must be held while calling this function.
- */
-void kbase_dma_fence_signal(struct kbase_jd_atom *katom);
-
-/**
- * kbase_dma_fence_term() - Terminate Mali dma-fence context
- * @kctx: kbase context to terminate
- */
-void kbase_dma_fence_term(struct kbase_context *kctx);
-
-/**
- * kbase_dma_fence_init() - Initialize Mali dma-fence context
- * @kctx: kbase context to initialize
- */
-int kbase_dma_fence_init(struct kbase_context *kctx);
-
-/**
- * kbase_dma_fence_waiters_remove()- Remove katom from dma-fence wait list
- * @katom: Pointer to katom to remove from list
- */
-void kbase_dma_fence_waiters_remove(struct kbase_jd_atom *katom);
-
-#else /* CONFIG_MALI_DMA_FENCE */
-/* Dummy functions for when dma-buf fence isn't enabled. */
-
-static inline int kbase_dma_fence_init(struct kbase_context *kctx)
-{
-       return 0;
-}
-
-static inline void kbase_dma_fence_term(struct kbase_context *kctx) {}
-#endif /* CONFIG_MALI_DMA_FENCE */
-#endif
diff --git a/midgard/mali_kbase_gator.h b/midgard/mali_kbase_gator.h
deleted file mode 100644 (file)
index ce65b55..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2011-2015 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.
- *
- */
-
-
-
-/* NB taken from gator  */
-/*
- * List of possible actions to be controlled by DS-5 Streamline.
- * The following numbers are used by gator to control the frame buffer dumping
- * and s/w counter reporting. We cannot use the enums in mali_uk_types.h because
- * they are unknown inside gator.
- */
-#ifndef _KBASE_GATOR_H_
-#define _KBASE_GATOR_H_
-
-#ifdef CONFIG_MALI_GATOR_SUPPORT
-#define GATOR_MAKE_EVENT(type, number) (((type) << 24) | ((number) << 16))
-#define GATOR_JOB_SLOT_START 1
-#define GATOR_JOB_SLOT_STOP  2
-#define GATOR_JOB_SLOT_SOFT_STOPPED  3
-
-void kbase_trace_mali_job_slots_event(u32 event, const struct kbase_context *kctx, u8 atom_id);
-void kbase_trace_mali_pm_status(u32 event, u64 value);
-void kbase_trace_mali_pm_power_off(u32 event, u64 value);
-void kbase_trace_mali_pm_power_on(u32 event, u64 value);
-void kbase_trace_mali_page_fault_insert_pages(int event, u32 value);
-void kbase_trace_mali_mmu_as_in_use(int event);
-void kbase_trace_mali_mmu_as_released(int event);
-void kbase_trace_mali_total_alloc_pages_change(long long int event);
-
-#endif /* CONFIG_MALI_GATOR_SUPPORT */
-
-#endif  /* _KBASE_GATOR_H_ */
diff --git a/midgard/mali_kbase_gator_api.h b/midgard/mali_kbase_gator_api.h
deleted file mode 100644 (file)
index ef9ac0f..0000000
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2014-2015 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.
- *
- */
-
-
-
-#ifndef _KBASE_GATOR_API_H_
-#define _KBASE_GATOR_API_H_
-
-/**
- * @brief This file describes the API used by Gator to fetch hardware counters.
- */
-
-/* This define is used by the gator kernel module compile to select which DDK
- * API calling convention to use. If not defined (legacy DDK) gator assumes
- * version 1. The version to DDK release mapping is:
- *     Version 1 API: DDK versions r1px, r2px
- *     Version 2 API: DDK versions r3px, r4px
- *     Version 3 API: DDK version r5p0 and newer
- *
- * API Usage
- * =========
- *
- * 1] Call kbase_gator_hwcnt_init_names() to return the list of short counter
- * names for the GPU present in this device.
- *
- * 2] Create a kbase_gator_hwcnt_info structure and set the counter enables for
- * the counters you want enabled. The enables can all be set for simplicity in
- * most use cases, but disabling some will let you minimize bandwidth impact.
- *
- * 3] Call kbase_gator_hwcnt_init() using the above structure, to create a
- * counter context. On successful return the DDK will have populated the
- * structure with a variety of useful information.
- *
- * 4] Call kbase_gator_hwcnt_dump_irq() to queue a non-blocking request for a
- * counter dump. If this returns a non-zero value the request has been queued,
- * otherwise the driver has been unable to do so (typically because of another
- * user of the instrumentation exists concurrently).
- *
- * 5] Call kbase_gator_hwcnt_dump_complete() to test whether the  previously
- * requested dump has been succesful. If this returns non-zero the counter dump
- * has resolved, but the value of *success must also be tested as the dump
- * may have not been successful. If it returns zero the counter dump was
- * abandoned due to the device being busy (typically because of another
- * user of the instrumentation exists concurrently).
- *
- * 6] Process the counters stored in the buffer pointed to by ...
- *
- *        kbase_gator_hwcnt_info->kernel_dump_buffer
- *
- *    In pseudo code you can find all of the counters via this approach:
- *
- *
- *        hwcnt_info # pointer to kbase_gator_hwcnt_info structure
- *        hwcnt_name # pointer to name list
- *
- *        u32 * hwcnt_data = (u32*)hwcnt_info->kernel_dump_buffer
- *
- *        # Iterate over each 64-counter block in this GPU configuration
- *        for( i = 0; i < hwcnt_info->nr_hwc_blocks; i++) {
- *            hwc_type type = hwcnt_info->hwc_layout[i];
- *
- *            # Skip reserved type blocks - they contain no counters at all
- *            if( type == RESERVED_BLOCK ) {
- *                continue;
- *            }
- *
- *            size_t name_offset = type * 64;
- *            size_t data_offset = i * 64;
- *
- *            # Iterate over the names of the counters in this block type
- *            for( j = 0; j < 64; j++) {
- *                const char * name = hwcnt_name[name_offset+j];
- *
- *                # Skip empty name strings - there is no counter here
- *                if( name[0] == '\0' ) {
- *                    continue;
- *                }
- *
- *                u32 data = hwcnt_data[data_offset+j];
- *
- *                printk( "COUNTER: %s DATA: %u\n", name, data );
- *            }
- *        }
- *
- *
- *     Note that in most implementations you typically want to either SUM or
- *     AVERAGE multiple instances of the same counter if, for example, you have
- *     multiple shader cores or multiple L2 caches. The most sensible view for
- *     analysis is to AVERAGE shader core counters, but SUM L2 cache and MMU
- *     counters.
- *
- * 7] Goto 4, repeating until you want to stop collecting counters.
- *
- * 8] Release the dump resources by calling kbase_gator_hwcnt_term().
- *
- * 9] Release the name table resources by calling
- *    kbase_gator_hwcnt_term_names(). This function must only be called if
- *    init_names() returned a non-NULL value.
- **/
-
-#define MALI_DDK_GATOR_API_VERSION 3
-
-enum hwc_type {
-       JM_BLOCK = 0,
-       TILER_BLOCK,
-       SHADER_BLOCK,
-       MMU_L2_BLOCK,
-       RESERVED_BLOCK
-};
-
-struct kbase_gator_hwcnt_info {
-       /* Passed from Gator to kbase */
-
-       /* the bitmask of enabled hardware counters for each counter block */
-       uint16_t bitmask[4];
-
-       /* Passed from kbase to Gator */
-
-       /* ptr to counter dump memory */
-       void *kernel_dump_buffer;
-
-       /* size of counter dump memory */
-       uint32_t size;
-
-       /* the ID of the Mali device */
-       uint32_t gpu_id;
-
-       /* the number of shader cores in the GPU */
-       uint32_t nr_cores;
-
-       /* the number of core groups */
-       uint32_t nr_core_groups;
-
-       /* the memory layout of the performance counters */
-       enum hwc_type *hwc_layout;
-
-       /* the total number of hardware couter blocks */
-       uint32_t nr_hwc_blocks;
-};
-
-/**
- * @brief Opaque block of Mali data which Gator needs to return to the API later.
- */
-struct kbase_gator_hwcnt_handles;
-
-/**
- * @brief Initialize the resources Gator needs for performance profiling.
- *
- * @param in_out_info   A pointer to a structure containing the enabled counters passed from Gator and all the Mali
- *                      specific information that will be returned to Gator. On entry Gator must have populated the
- *                      'bitmask' field with the counters it wishes to enable for each class of counter block.
- *                      Each entry in the array corresponds to a single counter class based on the "hwc_type"
- *                      enumeration, and each bit corresponds to an enable for 4 sequential counters (LSB enables
- *                      the first 4 counters in the block, and so on). See the GPU counter array as returned by
- *                      kbase_gator_hwcnt_get_names() for the index values of each counter for the curernt GPU.
- *
- * @return              Pointer to an opaque handle block on success, NULL on error.
- */
-extern struct kbase_gator_hwcnt_handles *kbase_gator_hwcnt_init(struct kbase_gator_hwcnt_info *in_out_info);
-
-/**
- * @brief Free all resources once Gator has finished using performance counters.
- *
- * @param in_out_info       A pointer to a structure containing the enabled counters passed from Gator and all the
- *                          Mali specific information that will be returned to Gator.
- * @param opaque_handles    A wrapper structure for kbase structures.
- */
-extern void kbase_gator_hwcnt_term(struct kbase_gator_hwcnt_info *in_out_info, struct kbase_gator_hwcnt_handles *opaque_handles);
-
-/**
- * @brief Poll whether a counter dump is successful.
- *
- * @param opaque_handles    A wrapper structure for kbase structures.
- * @param[out] success      Non-zero on success, zero on failure.
- *
- * @return                  Zero if the dump is still pending, non-zero if the dump has completed. Note that a
- *                          completed dump may not have dumped succesfully, so the caller must test for both
- *                          a completed and successful dump before processing counters.
- */
-extern uint32_t kbase_gator_instr_hwcnt_dump_complete(struct kbase_gator_hwcnt_handles *opaque_handles, uint32_t * const success);
-
-/**
- * @brief Request the generation of a new counter dump.
- *
- * @param opaque_handles    A wrapper structure for kbase structures.
- *
- * @return                  Zero if the hardware device is busy and cannot handle the request, non-zero otherwise.
- */
-extern uint32_t kbase_gator_instr_hwcnt_dump_irq(struct kbase_gator_hwcnt_handles *opaque_handles);
-
-/**
- * @brief This function is used to fetch the names table based on the Mali device in use.
- *
- * @param[out] total_counters The total number of counters short names in the Mali devices' list.
- *
- * @return                    Pointer to an array of strings of length *total_counters.
- */
-extern const char * const *kbase_gator_hwcnt_init_names(uint32_t *total_counters);
-
-/**
- * @brief This function is used to terminate the use of the names table.
- *
- * This function must only be called if the initial call to kbase_gator_hwcnt_init_names returned a non-NULL value.
- */
-extern void kbase_gator_hwcnt_term_names(void);
-
-#endif
diff --git a/midgard/mali_kbase_gator_hwcnt_names.h b/midgard/mali_kbase_gator_hwcnt_names.h
deleted file mode 100644 (file)
index c247dd6..0000000
+++ /dev/null
@@ -1,2163 +0,0 @@
-/*
- *
- * (C) COPYRIGHT 2014-2016 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.
- *
- */
-
-
-
-#ifndef _KBASE_GATOR_HWCNT_NAMES_H_
-#define _KBASE_GATOR_HWCNT_NAMES_H_
-
-/*
- * "Short names" for hardware counters used by Streamline. Counters names are
- * stored in accordance with their memory layout in the binary counter block
- * emitted by the Mali GPU. Each "master" in the GPU emits a fixed-size block
- * of 64 counters, and each GPU implements the same set of "masters" although
- * the counters each master exposes within its block of 64 may vary.
- *
- * Counters which are an empty string are simply "holes" in the counter memory
- * where no counter exists.
- */
-
-static const char * const hardware_counters_mali_t60x[] = {
-       /* Job Manager */
-       "",
-       "",
-       "",
-       "",
-       "T60x_MESSAGES_SENT",
-       "T60x_MESSAGES_RECEIVED",
-       "T60x_GPU_ACTIVE",
-       "T60x_IRQ_ACTIVE",
-       "T60x_JS0_JOBS",
-       "T60x_JS0_TASKS",
-       "T60x_JS0_ACTIVE",
-       "",
-       "T60x_JS0_WAIT_READ",
-       "T60x_JS0_WAIT_ISSUE",
-       "T60x_JS0_WAIT_DEPEND",
-       "T60x_JS0_WAIT_FINISH",
-       "T60x_JS1_JOBS",
-       "T60x_JS1_TASKS",
-       "T60x_JS1_ACTIVE",
-       "",
-       "T60x_JS1_WAIT_READ",
-       "T60x_JS1_WAIT_ISSUE",
-       "T60x_JS1_WAIT_DEPEND",
-       "T60x_JS1_WAIT_FINISH",
-       "T60x_JS2_JOBS",
-       "T60x_JS2_TASKS",
-       "T60x_JS2_ACTIVE",
-       "",
-       "T60x_JS2_WAIT_READ",
-       "T60x_JS2_WAIT_ISSUE",
-       "T60x_JS2_WAIT_DEPEND",
-       "T60x_JS2_WAIT_FINISH",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-
-       /*Tiler */
-       "",
-       "",
-       "",
-       "T60x_TI_JOBS_PROCESSED",
-       "T60x_TI_TRIANGLES",
-       "T60x_TI_QUADS",
-       "T60x_TI_POLYGONS",
-       "T60x_TI_POINTS",
-       "T60x_TI_LINES",
-       "T60x_TI_VCACHE_HIT",
-       "T60x_TI_VCACHE_MISS",
-       "T60x_TI_FRONT_FACING",
-       "T60x_TI_BACK_FACING",
-       "T60x_TI_PRIM_VISIBLE",
-       "T60x_TI_PRIM_CULLED",
-       "T60x_TI_PRIM_CLIPPED",
-       "T60x_TI_LEVEL0",
-       "T60x_TI_LEVEL1",
-       "T60x_TI_LEVEL2",
-       "T60x_TI_LEVEL3",
-       "T60x_TI_LEVEL4",
-       "T60x_TI_LEVEL5",
-       "T60x_TI_LEVEL6",
-       "T60x_TI_LEVEL7",
-       "T60x_TI_COMMAND_1",
-       "T60x_TI_COMMAND_2",
-       "T60x_TI_COMMAND_3",
-       "T60x_TI_COMMAND_4",
-       "T60x_TI_COMMAND_4_7",
-       "T60x_TI_COMMAND_8_15",
-       "T60x_TI_COMMAND_16_63",
-       "T60x_TI_COMMAND_64",
-       "T60x_TI_COMPRESS_IN",
-       "T60x_TI_COMPRESS_OUT",
-       "T60x_TI_COMPRESS_FLUSH",
-       "T60x_TI_TIMESTAMPS",
-       "T60x_TI_PCACHE_HIT",
-       "T60x_TI_PCACHE_MISS",
-       "T60x_TI_PCACHE_LINE",
-       "T60x_TI_PCACHE_STALL",
-       "T60x_TI_WRBUF_HIT",
-       "T60x_TI_WRBUF_MISS",
-       "T60x_TI_WRBUF_LINE",
-       "T60x_TI_WRBUF_PARTIAL",
-       "T60x_TI_WRBUF_STALL",
-       "T60x_TI_ACTIVE",
-       "T60x_TI_LOADING_DESC",
-       "T60x_TI_INDEX_WAIT",
-       "T60x_TI_INDEX_RANGE_WAIT",
-       "T60x_TI_VERTEX_WAIT",
-       "T60x_TI_PCACHE_WAIT",
-       "T60x_TI_WRBUF_WAIT",
-       "T60x_TI_BUS_READ",
-       "T60x_TI_BUS_WRITE",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "T60x_TI_UTLB_STALL",
-       "T60x_TI_UTLB_REPLAY_MISS",
-       "T60x_TI_UTLB_REPLAY_FULL",
-       "T60x_TI_UTLB_NEW_MISS",
-       "T60x_TI_UTLB_HIT",
-
-       /* Shader Core */
-       "",
-       "",
-       "",
-       "",
-       "T60x_FRAG_ACTIVE",
-       "T60x_FRAG_PRIMITIVES",
-       "T60x_FRAG_PRIMITIVES_DROPPED",
-       "T60x_FRAG_CYCLES_DESC",
-       "T60x_FRAG_CYCLES_PLR",
-       "T60x_FRAG_CYCLES_VERT",
-       "T60x_FRAG_CYCLES_TRISETUP",
-       "T60x_FRAG_CYCLES_RAST",
-       "T60x_FRAG_THREADS",
-       "T60x_FRAG_DUMMY_THREADS",
-       "T60x_FRAG_QUADS_RAST",
-       "T60x_FRAG_QUADS_EZS_TEST",
-       "T60x_FRAG_QUADS_EZS_KILLED",
-       "T60x_FRAG_THREADS_LZS_TEST",
-       "T60x_FRAG_THREADS_LZS_KILLED",
-       "T60x_FRAG_CYCLES_NO_TILE",
-       "T60x_FRAG_NUM_TILES",
-       "T60x_FRAG_TRANS_ELIM",
-       "T60x_COMPUTE_ACTIVE",
-       "T60x_COMPUTE_TASKS",
-       "T60x_COMPUTE_THREADS",
-       "T60x_COMPUTE_CYCLES_DESC",
-       "T60x_TRIPIPE_ACTIVE",
-       "T60x_ARITH_WORDS",
-       "T60x_ARITH_CYCLES_REG",
-       "T60x_ARITH_CYCLES_L0",
-       "T60x_ARITH_FRAG_DEPEND",
-       "T60x_LS_WORDS",
-       "T60x_LS_ISSUES",
-       "T60x_LS_RESTARTS",
-       "T60x_LS_REISSUES_MISS",
-       "T60x_LS_REISSUES_VD",
-       "T60x_LS_REISSUE_ATTRIB_MISS",
-       "T60x_LS_NO_WB",
-       "T60x_TEX_WORDS",
-       "T60x_TEX_BUBBLES",
-       "T60x_TEX_WORDS_L0",
-       "T60x_TEX_WORDS_DESC",
-       "T60x_TEX_ISSUES",
-       "T60x_TEX_RECIRC_FMISS",
-       "T60x_TE