#include <linux/delay.h>
#include <linux/kernel.h>
#include <linux/firmware.h>
#include <linux/module.h>
#include <linux/pci.h>
#include "amdgpu.h"
#include "amdgpu_gfx.h"
#include "amdgpu_ring.h"
#include "vi.h"
#include "vi_structs.h"
#include "vid.h"
#include "amdgpu_ucode.h"
#include "amdgpu_atombios.h"
#include "atombios_i2c.h"
#include "clearstate_vi.h"
#include "gmc/gmc_8_2_d.h"
#include "gmc/gmc_8_2_sh_mask.h"
#include "oss/oss_3_0_d.h"
#include "oss/oss_3_0_sh_mask.h"
#include "bif/bif_5_0_d.h"
#include "bif/bif_5_0_sh_mask.h"
#include "gca/gfx_8_0_d.h"
#include "gca/gfx_8_0_enum.h"
#include "gca/gfx_8_0_sh_mask.h"
#include "dce/dce_10_0_d.h"
#include "dce/dce_10_0_sh_mask.h"
#include "smu/smu_7_1_3_d.h"
#include "ivsrcid/ivsrcid_vislands30.h"
#define GFX8_NUM_GFX_RINGS …
#define GFX8_MEC_HPD_SIZE …
#define TOPAZ_GB_ADDR_CONFIG_GOLDEN …
#define CARRIZO_GB_ADDR_CONFIG_GOLDEN …
#define POLARIS11_GB_ADDR_CONFIG_GOLDEN …
#define TONGA_GB_ADDR_CONFIG_GOLDEN …
#define ARRAY_MODE(x) …
#define PIPE_CONFIG(x) …
#define TILE_SPLIT(x) …
#define MICRO_TILE_MODE_NEW(x) …
#define SAMPLE_SPLIT(x) …
#define BANK_WIDTH(x) …
#define BANK_HEIGHT(x) …
#define MACRO_TILE_ASPECT(x) …
#define NUM_BANKS(x) …
#define RLC_CGTT_MGCG_OVERRIDE__CPF_MASK …
#define RLC_CGTT_MGCG_OVERRIDE__RLC_MASK …
#define RLC_CGTT_MGCG_OVERRIDE__MGCG_MASK …
#define RLC_CGTT_MGCG_OVERRIDE__CGCG_MASK …
#define RLC_CGTT_MGCG_OVERRIDE__CGLS_MASK …
#define RLC_CGTT_MGCG_OVERRIDE__GRBM_MASK …
#define SET_BPM_SERDES_CMD …
#define CLE_BPM_SERDES_CMD …
enum { … };
#define RLC_FormatDirectRegListLength …
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
static const struct amdgpu_gds_reg_offset amdgpu_gds_reg_offset[] = …;
static const u32 golden_settings_tonga_a11[] = …;
static const u32 tonga_golden_common_all[] = …;
static const u32 tonga_mgcg_cgcg_init[] = …;
static const u32 golden_settings_vegam_a11[] = …;
static const u32 vegam_golden_common_all[] = …;
static const u32 golden_settings_polaris11_a11[] = …;
static const u32 polaris11_golden_common_all[] = …;
static const u32 golden_settings_polaris10_a11[] = …;
static const u32 polaris10_golden_common_all[] = …;
static const u32 fiji_golden_common_all[] = …;
static const u32 golden_settings_fiji_a10[] = …;
static const u32 fiji_mgcg_cgcg_init[] = …;
static const u32 golden_settings_iceland_a11[] = …;
static const u32 iceland_golden_common_all[] = …;
static const u32 iceland_mgcg_cgcg_init[] = …;
static const u32 cz_golden_settings_a11[] = …;
static const u32 cz_golden_common_all[] = …;
static const u32 cz_mgcg_cgcg_init[] = …;
static const u32 stoney_golden_settings_a11[] = …;
static const u32 stoney_golden_common_all[] = …;
static const u32 stoney_mgcg_cgcg_init[] = …;
static const char * const sq_edc_source_names[] = …;
static void gfx_v8_0_set_ring_funcs(struct amdgpu_device *adev);
static void gfx_v8_0_set_irq_funcs(struct amdgpu_device *adev);
static void gfx_v8_0_set_gds_init(struct amdgpu_device *adev);
static void gfx_v8_0_set_rlc_funcs(struct amdgpu_device *adev);
static u32 gfx_v8_0_get_csb_size(struct amdgpu_device *adev);
static void gfx_v8_0_get_cu_info(struct amdgpu_device *adev);
static void gfx_v8_0_ring_emit_ce_meta(struct amdgpu_ring *ring);
static void gfx_v8_0_ring_emit_de_meta(struct amdgpu_ring *ring);
#define CG_ACLK_CNTL__ACLK_DIVIDER_MASK …
#define CG_ACLK_CNTL__ACLK_DIVIDER__SHIFT …
static void gfx_v8_0_init_golden_registers(struct amdgpu_device *adev)
{ … }
static int gfx_v8_0_ring_test_ring(struct amdgpu_ring *ring)
{ … }
static int gfx_v8_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
{ … }
static void gfx_v8_0_free_microcode(struct amdgpu_device *adev)
{ … }
static int gfx_v8_0_init_microcode(struct amdgpu_device *adev)
{ … }
static void gfx_v8_0_get_csb_buffer(struct amdgpu_device *adev,
volatile u32 *buffer)
{ … }
static int gfx_v8_0_cp_jump_table_num(struct amdgpu_device *adev)
{ … }
static int gfx_v8_0_rlc_init(struct amdgpu_device *adev)
{ … }
static void gfx_v8_0_mec_fini(struct amdgpu_device *adev)
{ … }
static int gfx_v8_0_mec_init(struct amdgpu_device *adev)
{ … }
static const u32 vgpr_init_compute_shader[] = …;
static const u32 sgpr_init_compute_shader[] = …;
static const u32 vgpr_init_regs[] = …;
static const u32 sgpr1_init_regs[] = …;
static const u32 sgpr2_init_regs[] = …;
static const u32 sec_ded_counter_registers[] = …;
static int gfx_v8_0_do_edc_gpr_workarounds(struct amdgpu_device *adev)
{ … }
static int gfx_v8_0_gpu_early_init(struct amdgpu_device *adev)
{ … }
static int gfx_v8_0_compute_ring_init(struct amdgpu_device *adev, int ring_id,
int mec, int pipe, int queue)
{ … }
static void gfx_v8_0_sq_irq_work_func(struct work_struct *work);
static int gfx_v8_0_sw_init(void *handle)
{ … }
static int gfx_v8_0_sw_fini(void *handle)
{ … }
static void gfx_v8_0_tiling_mode_table_init(struct amdgpu_device *adev)
{ … }
static void gfx_v8_0_select_se_sh(struct amdgpu_device *adev,
u32 se_num, u32 sh_num, u32 instance,
int xcc_id)
{ … }
static void gfx_v8_0_select_me_pipe_q(struct amdgpu_device *adev,
u32 me, u32 pipe, u32 q, u32 vm, u32 xcc_id)
{ … }
static u32 gfx_v8_0_get_rb_active_bitmap(struct amdgpu_device *adev)
{ … }
static void
gfx_v8_0_raster_config(struct amdgpu_device *adev, u32 *rconf, u32 *rconf1)
{ … }
static void
gfx_v8_0_write_harvested_raster_configs(struct amdgpu_device *adev,
u32 raster_config, u32 raster_config_1,
unsigned rb_mask, unsigned num_rb)
{ … }
static void gfx_v8_0_setup_rb(struct amdgpu_device *adev)
{ … }
#define DEFAULT_SH_MEM_BASES …
static void gfx_v8_0_init_compute_vmid(struct amdgpu_device *adev)
{ … }
static void gfx_v8_0_init_gds_vmid(struct amdgpu_device *adev)
{ … }
static void gfx_v8_0_config_init(struct amdgpu_device *adev)
{ … }
static void gfx_v8_0_constants_init(struct amdgpu_device *adev)
{ … }
static void gfx_v8_0_wait_for_rlc_serdes(struct amdgpu_device *adev)
{ … }
static void gfx_v8_0_enable_gui_idle_interrupt(struct amdgpu_device *adev,
bool enable)
{ … }
static void gfx_v8_0_init_csb(struct amdgpu_device *adev)
{ … }
static void gfx_v8_0_parse_ind_reg_list(int *register_list_format,
int ind_offset,
int list_size,
int *unique_indices,
int *indices_count,
int max_indices,
int *ind_start_offsets,
int *offset_count,
int max_offset)
{ … }
static int gfx_v8_0_init_save_restore_list(struct amdgpu_device *adev)
{ … }
static void gfx_v8_0_enable_save_restore_machine(struct amdgpu_device *adev)
{ … }
static void gfx_v8_0_init_power_gating(struct amdgpu_device *adev)
{ … }
static void cz_enable_sck_slow_down_on_power_up(struct amdgpu_device *adev,
bool enable)
{ … }
static void cz_enable_sck_slow_down_on_power_down(struct amdgpu_device *adev,
bool enable)
{ … }
static void cz_enable_cp_power_gating(struct amdgpu_device *adev, bool enable)
{ … }
static void gfx_v8_0_init_pg(struct amdgpu_device *adev)
{ … }
static void gfx_v8_0_rlc_stop(struct amdgpu_device *adev)
{ … }
static void gfx_v8_0_rlc_reset(struct amdgpu_device *adev)
{ … }
static void gfx_v8_0_rlc_start(struct amdgpu_device *adev)
{ … }
static int gfx_v8_0_rlc_resume(struct amdgpu_device *adev)
{ … }
static void gfx_v8_0_cp_gfx_enable(struct amdgpu_device *adev, bool enable)
{ … }
static u32 gfx_v8_0_get_csb_size(struct amdgpu_device *adev)
{ … }
static int gfx_v8_0_cp_gfx_start(struct amdgpu_device *adev)
{ … }
static void gfx_v8_0_set_cpg_door_bell(struct amdgpu_device *adev, struct amdgpu_ring *ring)
{ … }
static int gfx_v8_0_cp_gfx_resume(struct amdgpu_device *adev)
{ … }
static void gfx_v8_0_cp_compute_enable(struct amdgpu_device *adev, bool enable)
{ … }
static void gfx_v8_0_kiq_setting(struct amdgpu_ring *ring)
{ … }
static int gfx_v8_0_kiq_kcq_enable(struct amdgpu_device *adev)
{ … }
static int gfx_v8_0_deactivate_hqd(struct amdgpu_device *adev, u32 req)
{ … }
static void gfx_v8_0_mqd_set_priority(struct amdgpu_ring *ring, struct vi_mqd *mqd)
{ … }
static int gfx_v8_0_mqd_init(struct amdgpu_ring *ring)
{ … }
static int gfx_v8_0_mqd_commit(struct amdgpu_device *adev,
struct vi_mqd *mqd)
{ … }
static int gfx_v8_0_kiq_init_queue(struct amdgpu_ring *ring)
{ … }
static int gfx_v8_0_kcq_init_queue(struct amdgpu_ring *ring)
{ … }
static void gfx_v8_0_set_mec_doorbell_range(struct amdgpu_device *adev)
{ … }
static int gfx_v8_0_kiq_resume(struct amdgpu_device *adev)
{ … }
static int gfx_v8_0_kcq_resume(struct amdgpu_device *adev)
{ … }
static int gfx_v8_0_cp_test_all_rings(struct amdgpu_device *adev)
{ … }
static int gfx_v8_0_cp_resume(struct amdgpu_device *adev)
{ … }
static void gfx_v8_0_cp_enable(struct amdgpu_device *adev, bool enable)
{ … }
static int gfx_v8_0_hw_init(void *handle)
{ … }
static int gfx_v8_0_kcq_disable(struct amdgpu_device *adev)
{ … }
static bool gfx_v8_0_is_idle(void *handle)
{ … }
static bool gfx_v8_0_rlc_is_idle(void *handle)
{ … }
static int gfx_v8_0_wait_for_rlc_idle(void *handle)
{ … }
static int gfx_v8_0_wait_for_idle(void *handle)
{ … }
static int gfx_v8_0_hw_fini(void *handle)
{ … }
static int gfx_v8_0_suspend(void *handle)
{ … }
static int gfx_v8_0_resume(void *handle)
{ … }
static bool gfx_v8_0_check_soft_reset(void *handle)
{ … }
static int gfx_v8_0_pre_soft_reset(void *handle)
{ … }
static int gfx_v8_0_soft_reset(void *handle)
{ … }
static int gfx_v8_0_post_soft_reset(void *handle)
{ … }
static uint64_t gfx_v8_0_get_gpu_clock_counter(struct amdgpu_device *adev)
{ … }
static void gfx_v8_0_ring_emit_gds_switch(struct amdgpu_ring *ring,
uint32_t vmid,
uint32_t gds_base, uint32_t gds_size,
uint32_t gws_base, uint32_t gws_size,
uint32_t oa_base, uint32_t oa_size)
{ … }
static uint32_t wave_read_ind(struct amdgpu_device *adev, uint32_t simd, uint32_t wave, uint32_t address)
{ … }
static void wave_read_regs(struct amdgpu_device *adev, uint32_t simd,
uint32_t wave, uint32_t thread,
uint32_t regno, uint32_t num, uint32_t *out)
{ … }
static void gfx_v8_0_read_wave_data(struct amdgpu_device *adev, uint32_t xcc_id, uint32_t simd, uint32_t wave, uint32_t *dst, int *no_fields)
{ … }
static void gfx_v8_0_read_wave_sgprs(struct amdgpu_device *adev, uint32_t xcc_id, uint32_t simd,
uint32_t wave, uint32_t start,
uint32_t size, uint32_t *dst)
{ … }
static const struct amdgpu_gfx_funcs gfx_v8_0_gfx_funcs = …;
static int gfx_v8_0_early_init(void *handle)
{ … }
static int gfx_v8_0_late_init(void *handle)
{ … }
static void gfx_v8_0_enable_gfx_static_mg_power_gating(struct amdgpu_device *adev,
bool enable)
{ … }
static void gfx_v8_0_enable_gfx_dynamic_mg_power_gating(struct amdgpu_device *adev,
bool enable)
{ … }
static void polaris11_enable_gfx_quick_mg_power_gating(struct amdgpu_device *adev,
bool enable)
{ … }
static void cz_enable_gfx_cg_power_gating(struct amdgpu_device *adev,
bool enable)
{ … }
static void cz_enable_gfx_pipeline_power_gating(struct amdgpu_device *adev,
bool enable)
{ … }
static void cz_update_gfx_cg_power_gating(struct amdgpu_device *adev,
bool enable)
{ … }
static int gfx_v8_0_set_powergating_state(void *handle,
enum amd_powergating_state state)
{ … }
static void gfx_v8_0_get_clockgating_state(void *handle, u64 *flags)
{ … }
static void gfx_v8_0_send_serdes_cmd(struct amdgpu_device *adev,
uint32_t reg_addr, uint32_t cmd)
{ … }
#define MSG_ENTER_RLC_SAFE_MODE …
#define MSG_EXIT_RLC_SAFE_MODE …
#define RLC_GPR_REG2__REQ_MASK …
#define RLC_GPR_REG2__REQ__SHIFT …
#define RLC_GPR_REG2__MESSAGE__SHIFT …
#define RLC_GPR_REG2__MESSAGE_MASK …
static bool gfx_v8_0_is_rlc_enabled(struct amdgpu_device *adev)
{ … }
static void gfx_v8_0_set_safe_mode(struct amdgpu_device *adev, int xcc_id)
{ … }
static void gfx_v8_0_unset_safe_mode(struct amdgpu_device *adev, int xcc_id)
{ … }
static void gfx_v8_0_update_spm_vmid(struct amdgpu_device *adev, struct amdgpu_ring *ring, unsigned vmid)
{ … }
static const struct amdgpu_rlc_funcs iceland_rlc_funcs = …;
static void gfx_v8_0_update_medium_grain_clock_gating(struct amdgpu_device *adev,
bool enable)
{ … }
static void gfx_v8_0_update_coarse_grain_clock_gating(struct amdgpu_device *adev,
bool enable)
{ … }
static int gfx_v8_0_update_gfx_clock_gating(struct amdgpu_device *adev,
bool enable)
{ … }
static int gfx_v8_0_tonga_update_gfx_clock_gating(struct amdgpu_device *adev,
enum amd_clockgating_state state)
{ … }
static int gfx_v8_0_polaris_update_gfx_clock_gating(struct amdgpu_device *adev,
enum amd_clockgating_state state)
{ … }
static int gfx_v8_0_set_clockgating_state(void *handle,
enum amd_clockgating_state state)
{ … }
static u64 gfx_v8_0_ring_get_rptr(struct amdgpu_ring *ring)
{ … }
static u64 gfx_v8_0_ring_get_wptr_gfx(struct amdgpu_ring *ring)
{ … }
static void gfx_v8_0_ring_set_wptr_gfx(struct amdgpu_ring *ring)
{ … }
static void gfx_v8_0_ring_emit_hdp_flush(struct amdgpu_ring *ring)
{ … }
static void gfx_v8_0_ring_emit_vgt_flush(struct amdgpu_ring *ring)
{ … }
static void gfx_v8_0_ring_emit_ib_gfx(struct amdgpu_ring *ring,
struct amdgpu_job *job,
struct amdgpu_ib *ib,
uint32_t flags)
{ … }
static void gfx_v8_0_ring_emit_ib_compute(struct amdgpu_ring *ring,
struct amdgpu_job *job,
struct amdgpu_ib *ib,
uint32_t flags)
{ … }
static void gfx_v8_0_ring_emit_fence_gfx(struct amdgpu_ring *ring, u64 addr,
u64 seq, unsigned flags)
{ … }
static void gfx_v8_0_ring_emit_pipeline_sync(struct amdgpu_ring *ring)
{ … }
static void gfx_v8_0_ring_emit_vm_flush(struct amdgpu_ring *ring,
unsigned vmid, uint64_t pd_addr)
{ … }
static u64 gfx_v8_0_ring_get_wptr_compute(struct amdgpu_ring *ring)
{ … }
static void gfx_v8_0_ring_set_wptr_compute(struct amdgpu_ring *ring)
{ … }
static void gfx_v8_0_ring_emit_fence_compute(struct amdgpu_ring *ring,
u64 addr, u64 seq,
unsigned flags)
{ … }
static void gfx_v8_0_ring_emit_fence_kiq(struct amdgpu_ring *ring, u64 addr,
u64 seq, unsigned int flags)
{ … }
static void gfx_v8_ring_emit_sb(struct amdgpu_ring *ring)
{ … }
static void gfx_v8_ring_emit_cntxcntl(struct amdgpu_ring *ring, uint32_t flags)
{ … }
static unsigned gfx_v8_0_ring_emit_init_cond_exec(struct amdgpu_ring *ring,
uint64_t addr)
{ … }
static void gfx_v8_0_ring_emit_rreg(struct amdgpu_ring *ring, uint32_t reg,
uint32_t reg_val_offs)
{ … }
static void gfx_v8_0_ring_emit_wreg(struct amdgpu_ring *ring, uint32_t reg,
uint32_t val)
{ … }
static void gfx_v8_0_ring_soft_recovery(struct amdgpu_ring *ring, unsigned vmid)
{ … }
static void gfx_v8_0_set_gfx_eop_interrupt_state(struct amdgpu_device *adev,
enum amdgpu_interrupt_state state)
{ … }
static void gfx_v8_0_set_compute_eop_interrupt_state(struct amdgpu_device *adev,
int me, int pipe,
enum amdgpu_interrupt_state state)
{ … }
static int gfx_v8_0_set_priv_reg_fault_state(struct amdgpu_device *adev,
struct amdgpu_irq_src *source,
unsigned type,
enum amdgpu_interrupt_state state)
{ … }
static int gfx_v8_0_set_priv_inst_fault_state(struct amdgpu_device *adev,
struct amdgpu_irq_src *source,
unsigned type,
enum amdgpu_interrupt_state state)
{ … }
static int gfx_v8_0_set_eop_interrupt_state(struct amdgpu_device *adev,
struct amdgpu_irq_src *src,
unsigned type,
enum amdgpu_interrupt_state state)
{ … }
static int gfx_v8_0_set_cp_ecc_int_state(struct amdgpu_device *adev,
struct amdgpu_irq_src *source,
unsigned int type,
enum amdgpu_interrupt_state state)
{ … }
static int gfx_v8_0_set_sq_int_state(struct amdgpu_device *adev,
struct amdgpu_irq_src *source,
unsigned int type,
enum amdgpu_interrupt_state state)
{ … }
static int gfx_v8_0_eop_irq(struct amdgpu_device *adev,
struct amdgpu_irq_src *source,
struct amdgpu_iv_entry *entry)
{ … }
static void gfx_v8_0_fault(struct amdgpu_device *adev,
struct amdgpu_iv_entry *entry)
{ … }
static int gfx_v8_0_priv_reg_irq(struct amdgpu_device *adev,
struct amdgpu_irq_src *source,
struct amdgpu_iv_entry *entry)
{ … }
static int gfx_v8_0_priv_inst_irq(struct amdgpu_device *adev,
struct amdgpu_irq_src *source,
struct amdgpu_iv_entry *entry)
{ … }
static int gfx_v8_0_cp_ecc_error_irq(struct amdgpu_device *adev,
struct amdgpu_irq_src *source,
struct amdgpu_iv_entry *entry)
{ … }
static void gfx_v8_0_parse_sq_irq(struct amdgpu_device *adev, unsigned ih_data,
bool from_wq)
{ … }
static void gfx_v8_0_sq_irq_work_func(struct work_struct *work)
{ … }
static int gfx_v8_0_sq_irq(struct amdgpu_device *adev,
struct amdgpu_irq_src *source,
struct amdgpu_iv_entry *entry)
{ … }
static void gfx_v8_0_emit_mem_sync(struct amdgpu_ring *ring)
{ … }
static void gfx_v8_0_emit_mem_sync_compute(struct amdgpu_ring *ring)
{ … }
#define mmSPI_WCL_PIPE_PERCENT_CS_DEFAULT …
static void gfx_v8_0_emit_wave_limit_cs(struct amdgpu_ring *ring,
uint32_t pipe, bool enable)
{ … }
#define mmSPI_WCL_PIPE_PERCENT_GFX_DEFAULT …
static void gfx_v8_0_emit_wave_limit(struct amdgpu_ring *ring, bool enable)
{ … }
static const struct amd_ip_funcs gfx_v8_0_ip_funcs = …;
static const struct amdgpu_ring_funcs gfx_v8_0_ring_funcs_gfx = …;
static const struct amdgpu_ring_funcs gfx_v8_0_ring_funcs_compute = …;
static const struct amdgpu_ring_funcs gfx_v8_0_ring_funcs_kiq = …;
static void gfx_v8_0_set_ring_funcs(struct amdgpu_device *adev)
{ … }
static const struct amdgpu_irq_src_funcs gfx_v8_0_eop_irq_funcs = …;
static const struct amdgpu_irq_src_funcs gfx_v8_0_priv_reg_irq_funcs = …;
static const struct amdgpu_irq_src_funcs gfx_v8_0_priv_inst_irq_funcs = …;
static const struct amdgpu_irq_src_funcs gfx_v8_0_cp_ecc_error_irq_funcs = …;
static const struct amdgpu_irq_src_funcs gfx_v8_0_sq_irq_funcs = …;
static void gfx_v8_0_set_irq_funcs(struct amdgpu_device *adev)
{ … }
static void gfx_v8_0_set_rlc_funcs(struct amdgpu_device *adev)
{ … }
static void gfx_v8_0_set_gds_init(struct amdgpu_device *adev)
{ … }
static void gfx_v8_0_set_user_cu_inactive_bitmap(struct amdgpu_device *adev,
u32 bitmap)
{ … }
static u32 gfx_v8_0_get_cu_active_bitmap(struct amdgpu_device *adev)
{ … }
static void gfx_v8_0_get_cu_info(struct amdgpu_device *adev)
{ … }
const struct amdgpu_ip_block_version gfx_v8_0_ip_block = …;
const struct amdgpu_ip_block_version gfx_v8_1_ip_block = …;
static void gfx_v8_0_ring_emit_ce_meta(struct amdgpu_ring *ring)
{ … }
static void gfx_v8_0_ring_emit_de_meta(struct amdgpu_ring *ring)
{ … }