sync with OpenBSD -current
This commit is contained in:
parent
0bc0a510b3
commit
593fd57b5d
61 changed files with 797 additions and 428 deletions
|
@ -333,6 +333,7 @@ aldebaran_mode2_restore_hwcontext(struct amdgpu_reset_control *reset_ctl,
|
|||
{
|
||||
struct list_head *reset_device_list = reset_context->reset_device_list;
|
||||
struct amdgpu_device *tmp_adev = NULL;
|
||||
struct amdgpu_ras *con;
|
||||
int r;
|
||||
|
||||
if (reset_device_list == NULL)
|
||||
|
@ -358,7 +359,30 @@ aldebaran_mode2_restore_hwcontext(struct amdgpu_reset_control *reset_ctl,
|
|||
*/
|
||||
amdgpu_register_gpu_instance(tmp_adev);
|
||||
|
||||
/* Resume RAS */
|
||||
/* Resume RAS, ecc_irq */
|
||||
con = amdgpu_ras_get_context(tmp_adev);
|
||||
if (!amdgpu_sriov_vf(tmp_adev) && con) {
|
||||
if (tmp_adev->sdma.ras &&
|
||||
tmp_adev->sdma.ras->ras_block.ras_late_init) {
|
||||
r = tmp_adev->sdma.ras->ras_block.ras_late_init(tmp_adev,
|
||||
&tmp_adev->sdma.ras->ras_block.ras_comm);
|
||||
if (r) {
|
||||
dev_err(tmp_adev->dev, "SDMA failed to execute ras_late_init! ret:%d\n", r);
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
|
||||
if (tmp_adev->gfx.ras &&
|
||||
tmp_adev->gfx.ras->ras_block.ras_late_init) {
|
||||
r = tmp_adev->gfx.ras->ras_block.ras_late_init(tmp_adev,
|
||||
&tmp_adev->gfx.ras->ras_block.ras_comm);
|
||||
if (r) {
|
||||
dev_err(tmp_adev->dev, "GFX failed to execute ras_late_init! ret:%d\n", r);
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
amdgpu_ras_resume(tmp_adev);
|
||||
|
||||
/* Update PSP FW topology after reset */
|
||||
|
|
|
@ -90,7 +90,7 @@ struct amdgpu_amdkfd_fence *to_amdgpu_amdkfd_fence(struct dma_fence *f)
|
|||
return NULL;
|
||||
|
||||
fence = container_of(f, struct amdgpu_amdkfd_fence, base);
|
||||
if (fence && f->ops == &amdkfd_fence_ops)
|
||||
if (f->ops == &amdkfd_fence_ops)
|
||||
return fence;
|
||||
|
||||
return NULL;
|
||||
|
|
|
@ -1224,6 +1224,7 @@ bool amdgpu_device_need_post(struct amdgpu_device *adev)
|
|||
return true;
|
||||
|
||||
fw_ver = *((uint32_t *)adev->pm.fw->data + 69);
|
||||
release_firmware(adev->pm.fw);
|
||||
if (fw_ver < 0x00160e00)
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -885,21 +885,28 @@ int amdgpu_gmc_vram_checking(struct amdgpu_device *adev)
|
|||
* seconds, so here, we just pick up three parts for emulation.
|
||||
*/
|
||||
ret = memcmp(vram_ptr, cptr, 10);
|
||||
if (ret)
|
||||
return ret;
|
||||
if (ret) {
|
||||
ret = -EIO;
|
||||
goto release_buffer;
|
||||
}
|
||||
|
||||
ret = memcmp(vram_ptr + (size / 2), cptr, 10);
|
||||
if (ret)
|
||||
return ret;
|
||||
if (ret) {
|
||||
ret = -EIO;
|
||||
goto release_buffer;
|
||||
}
|
||||
|
||||
ret = memcmp(vram_ptr + size - 10, cptr, 10);
|
||||
if (ret)
|
||||
return ret;
|
||||
if (ret) {
|
||||
ret = -EIO;
|
||||
goto release_buffer;
|
||||
}
|
||||
|
||||
release_buffer:
|
||||
amdgpu_bo_free_kernel(&vram_bo, &vram_gpu,
|
||||
&vram_ptr);
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static ssize_t current_memory_partition_show(
|
||||
|
|
|
@ -885,6 +885,11 @@ int amdgpu_mes_set_shader_debugger(struct amdgpu_device *adev,
|
|||
op_input.op = MES_MISC_OP_SET_SHADER_DEBUGGER;
|
||||
op_input.set_shader_debugger.process_context_addr = process_context_addr;
|
||||
op_input.set_shader_debugger.flags.u32all = flags;
|
||||
|
||||
/* use amdgpu mes_flush_shader_debugger instead */
|
||||
if (op_input.set_shader_debugger.flags.process_ctx_flush)
|
||||
return -EINVAL;
|
||||
|
||||
op_input.set_shader_debugger.spi_gdbg_per_vmid_cntl = spi_gdbg_per_vmid_cntl;
|
||||
memcpy(op_input.set_shader_debugger.tcp_watch_cntl, tcp_watch_cntl,
|
||||
sizeof(op_input.set_shader_debugger.tcp_watch_cntl));
|
||||
|
@ -904,6 +909,32 @@ int amdgpu_mes_set_shader_debugger(struct amdgpu_device *adev,
|
|||
return r;
|
||||
}
|
||||
|
||||
int amdgpu_mes_flush_shader_debugger(struct amdgpu_device *adev,
|
||||
uint64_t process_context_addr)
|
||||
{
|
||||
struct mes_misc_op_input op_input = {0};
|
||||
int r;
|
||||
|
||||
if (!adev->mes.funcs->misc_op) {
|
||||
DRM_ERROR("mes flush shader debugger is not supported!\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
op_input.op = MES_MISC_OP_SET_SHADER_DEBUGGER;
|
||||
op_input.set_shader_debugger.process_context_addr = process_context_addr;
|
||||
op_input.set_shader_debugger.flags.process_ctx_flush = true;
|
||||
|
||||
amdgpu_mes_lock(&adev->mes);
|
||||
|
||||
r = adev->mes.funcs->misc_op(&adev->mes, &op_input);
|
||||
if (r)
|
||||
DRM_ERROR("failed to set_shader_debugger\n");
|
||||
|
||||
amdgpu_mes_unlock(&adev->mes);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
static void
|
||||
amdgpu_mes_ring_to_queue_props(struct amdgpu_device *adev,
|
||||
struct amdgpu_ring *ring,
|
||||
|
|
|
@ -293,9 +293,10 @@ struct mes_misc_op_input {
|
|||
uint64_t process_context_addr;
|
||||
union {
|
||||
struct {
|
||||
uint64_t single_memop : 1;
|
||||
uint64_t single_alu_op : 1;
|
||||
uint64_t reserved: 30;
|
||||
uint32_t single_memop : 1;
|
||||
uint32_t single_alu_op : 1;
|
||||
uint32_t reserved: 29;
|
||||
uint32_t process_ctx_flush: 1;
|
||||
};
|
||||
uint32_t u32all;
|
||||
} flags;
|
||||
|
@ -371,7 +372,8 @@ int amdgpu_mes_set_shader_debugger(struct amdgpu_device *adev,
|
|||
const uint32_t *tcp_watch_cntl,
|
||||
uint32_t flags,
|
||||
bool trap_en);
|
||||
|
||||
int amdgpu_mes_flush_shader_debugger(struct amdgpu_device *adev,
|
||||
uint64_t process_context_addr);
|
||||
int amdgpu_mes_add_ring(struct amdgpu_device *adev, int gang_id,
|
||||
int queue_type, int idx,
|
||||
struct amdgpu_mes_ctx_data *ctx_data,
|
||||
|
|
|
@ -1270,19 +1270,15 @@ int amdgpu_bo_get_metadata(struct amdgpu_bo *bo, void *buffer,
|
|||
* amdgpu_bo_move_notify - notification about a memory move
|
||||
* @bo: pointer to a buffer object
|
||||
* @evict: if this move is evicting the buffer from the graphics address space
|
||||
* @new_mem: new information of the bufer object
|
||||
*
|
||||
* Marks the corresponding &amdgpu_bo buffer object as invalid, also performs
|
||||
* bookkeeping.
|
||||
* TTM driver callback which is called when ttm moves a buffer.
|
||||
*/
|
||||
void amdgpu_bo_move_notify(struct ttm_buffer_object *bo,
|
||||
bool evict,
|
||||
struct ttm_resource *new_mem)
|
||||
void amdgpu_bo_move_notify(struct ttm_buffer_object *bo, bool evict)
|
||||
{
|
||||
struct amdgpu_device *adev = amdgpu_ttm_adev(bo->bdev);
|
||||
struct amdgpu_bo *abo;
|
||||
struct ttm_resource *old_mem = bo->resource;
|
||||
|
||||
if (!amdgpu_bo_is_amdgpu_bo(bo))
|
||||
return;
|
||||
|
@ -1301,13 +1297,6 @@ void amdgpu_bo_move_notify(struct ttm_buffer_object *bo,
|
|||
/* remember the eviction */
|
||||
if (evict)
|
||||
atomic64_inc(&adev->num_evictions);
|
||||
|
||||
/* update statistics */
|
||||
if (!new_mem)
|
||||
return;
|
||||
|
||||
/* move_notify is called before move happens */
|
||||
trace_amdgpu_bo_move(abo, new_mem->mem_type, old_mem->mem_type);
|
||||
}
|
||||
|
||||
void amdgpu_bo_get_memory(struct amdgpu_bo *bo,
|
||||
|
|
|
@ -345,9 +345,7 @@ int amdgpu_bo_set_metadata (struct amdgpu_bo *bo, void *metadata,
|
|||
int amdgpu_bo_get_metadata(struct amdgpu_bo *bo, void *buffer,
|
||||
size_t buffer_size, uint32_t *metadata_size,
|
||||
uint64_t *flags);
|
||||
void amdgpu_bo_move_notify(struct ttm_buffer_object *bo,
|
||||
bool evict,
|
||||
struct ttm_resource *new_mem);
|
||||
void amdgpu_bo_move_notify(struct ttm_buffer_object *bo, bool evict);
|
||||
void amdgpu_bo_release_notify(struct ttm_buffer_object *bo);
|
||||
vm_fault_t amdgpu_bo_fault_reserve_notify(struct ttm_buffer_object *bo);
|
||||
void amdgpu_bo_fence(struct amdgpu_bo *bo, struct dma_fence *fence,
|
||||
|
|
|
@ -195,7 +195,8 @@ static bool amdgpu_sync_test_fence(struct amdgpu_device *adev,
|
|||
|
||||
/* Never sync to VM updates either. */
|
||||
if (fence_owner == AMDGPU_FENCE_OWNER_VM &&
|
||||
owner != AMDGPU_FENCE_OWNER_UNDEFINED)
|
||||
owner != AMDGPU_FENCE_OWNER_UNDEFINED &&
|
||||
owner != AMDGPU_FENCE_OWNER_KFD)
|
||||
return false;
|
||||
|
||||
/* Ignore fences depending on the sync mode */
|
||||
|
|
|
@ -545,10 +545,11 @@ static int amdgpu_bo_move(struct ttm_buffer_object *bo, bool evict,
|
|||
return r;
|
||||
}
|
||||
|
||||
trace_amdgpu_bo_move(abo, new_mem->mem_type, old_mem->mem_type);
|
||||
out:
|
||||
/* update statistics */
|
||||
atomic64_add(bo->base.size, &adev->num_bytes_moved);
|
||||
amdgpu_bo_move_notify(bo, evict, new_mem);
|
||||
amdgpu_bo_move_notify(bo, evict);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1592,7 +1593,7 @@ static int amdgpu_ttm_access_memory(struct ttm_buffer_object *bo,
|
|||
static void
|
||||
amdgpu_bo_delete_mem_notify(struct ttm_buffer_object *bo)
|
||||
{
|
||||
amdgpu_bo_move_notify(bo, false, NULL);
|
||||
amdgpu_bo_move_notify(bo, false);
|
||||
}
|
||||
|
||||
static struct ttm_device_funcs amdgpu_bo_driver = {
|
||||
|
|
|
@ -1330,9 +1330,13 @@ int amdgpu_ucode_request(struct amdgpu_device *adev, const struct firmware **fw,
|
|||
|
||||
if (err)
|
||||
return -ENODEV;
|
||||
|
||||
err = amdgpu_ucode_validate(*fw);
|
||||
if (err)
|
||||
if (err) {
|
||||
dev_dbg(adev->dev, "\"%s\" failed to validate\n", fw_name);
|
||||
release_firmware(*fw);
|
||||
*fw = NULL;
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
|
|
@ -102,7 +102,9 @@ static void gfxhub_v1_0_init_system_aperture_regs(struct amdgpu_device *adev)
|
|||
WREG32_SOC15_RLC(GC, 0, mmMC_VM_SYSTEM_APERTURE_LOW_ADDR,
|
||||
min(adev->gmc.fb_start, adev->gmc.agp_start) >> 18);
|
||||
|
||||
if (adev->apu_flags & AMD_APU_IS_RAVEN2)
|
||||
if (adev->apu_flags & (AMD_APU_IS_RAVEN2 |
|
||||
AMD_APU_IS_RENOIR |
|
||||
AMD_APU_IS_GREEN_SARDINE))
|
||||
/*
|
||||
* Raven2 has a HW issue that it is unable to use the
|
||||
* vram which is out of MC_VM_SYSTEM_APERTURE_HIGH_ADDR.
|
||||
|
|
|
@ -139,7 +139,9 @@ gfxhub_v1_2_xcc_init_system_aperture_regs(struct amdgpu_device *adev,
|
|||
WREG32_SOC15_RLC(GC, GET_INST(GC, i), regMC_VM_SYSTEM_APERTURE_LOW_ADDR,
|
||||
min(adev->gmc.fb_start, adev->gmc.agp_start) >> 18);
|
||||
|
||||
if (adev->apu_flags & AMD_APU_IS_RAVEN2)
|
||||
if (adev->apu_flags & (AMD_APU_IS_RAVEN2 |
|
||||
AMD_APU_IS_RENOIR |
|
||||
AMD_APU_IS_GREEN_SARDINE))
|
||||
/*
|
||||
* Raven2 has a HW issue that it is unable to use the
|
||||
* vram which is out of MC_VM_SYSTEM_APERTURE_HIGH_ADDR.
|
||||
|
|
|
@ -1141,6 +1141,10 @@ static int gmc_v10_0_hw_fini(void *handle)
|
|||
|
||||
amdgpu_irq_put(adev, &adev->gmc.vm_fault, 0);
|
||||
|
||||
if (adev->gmc.ecc_irq.funcs &&
|
||||
amdgpu_ras_is_supported(adev, AMDGPU_RAS_BLOCK__UMC))
|
||||
amdgpu_irq_put(adev, &adev->gmc.ecc_irq, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -974,6 +974,11 @@ static int gmc_v11_0_hw_fini(void *handle)
|
|||
}
|
||||
|
||||
amdgpu_irq_put(adev, &adev->gmc.vm_fault, 0);
|
||||
|
||||
if (adev->gmc.ecc_irq.funcs &&
|
||||
amdgpu_ras_is_supported(adev, AMDGPU_RAS_BLOCK__UMC))
|
||||
amdgpu_irq_put(adev, &adev->gmc.ecc_irq, 0);
|
||||
|
||||
gmc_v11_0_gart_disable(adev);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -914,8 +914,8 @@ static int gmc_v6_0_hw_init(void *handle)
|
|||
|
||||
if (amdgpu_emu_mode == 1)
|
||||
return amdgpu_gmc_vram_checking(adev);
|
||||
else
|
||||
return r;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int gmc_v6_0_hw_fini(void *handle)
|
||||
|
|
|
@ -1103,8 +1103,8 @@ static int gmc_v7_0_hw_init(void *handle)
|
|||
|
||||
if (amdgpu_emu_mode == 1)
|
||||
return amdgpu_gmc_vram_checking(adev);
|
||||
else
|
||||
return r;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int gmc_v7_0_hw_fini(void *handle)
|
||||
|
|
|
@ -1224,8 +1224,8 @@ static int gmc_v8_0_hw_init(void *handle)
|
|||
|
||||
if (amdgpu_emu_mode == 1)
|
||||
return amdgpu_gmc_vram_checking(adev);
|
||||
else
|
||||
return r;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int gmc_v8_0_hw_fini(void *handle)
|
||||
|
|
|
@ -2380,8 +2380,8 @@ static int gmc_v9_0_hw_init(void *handle)
|
|||
|
||||
if (amdgpu_emu_mode == 1)
|
||||
return amdgpu_gmc_vram_checking(adev);
|
||||
else
|
||||
return r;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -2420,6 +2420,10 @@ static int gmc_v9_0_hw_fini(void *handle)
|
|||
|
||||
amdgpu_irq_put(adev, &adev->gmc.vm_fault, 0);
|
||||
|
||||
if (adev->gmc.ecc_irq.funcs &&
|
||||
amdgpu_ras_is_supported(adev, AMDGPU_RAS_BLOCK__UMC))
|
||||
amdgpu_irq_put(adev, &adev->gmc.ecc_irq, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -96,7 +96,9 @@ static void mmhub_v1_0_init_system_aperture_regs(struct amdgpu_device *adev)
|
|||
WREG32_SOC15(MMHUB, 0, mmMC_VM_SYSTEM_APERTURE_LOW_ADDR,
|
||||
min(adev->gmc.fb_start, adev->gmc.agp_start) >> 18);
|
||||
|
||||
if (adev->apu_flags & AMD_APU_IS_RAVEN2)
|
||||
if (adev->apu_flags & (AMD_APU_IS_RAVEN2 |
|
||||
AMD_APU_IS_RENOIR |
|
||||
AMD_APU_IS_GREEN_SARDINE))
|
||||
/*
|
||||
* Raven2 has a HW issue that it is unable to use the vram which
|
||||
* is out of MC_VM_SYSTEM_APERTURE_HIGH_ADDR. So here is the
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue