Skip to content

Commit

Permalink
Merge amd-staging-dkms-5.6 into amd-mainline-dkms-5.6
Browse files Browse the repository at this point in the history
Signed-off-by: Rui Teng <rui.teng@amd.com>
  • Loading branch information
Rui Teng committed Aug 25, 2020
2 parents 49af018 + ad0f7b9 commit dd5d67a
Show file tree
Hide file tree
Showing 298 changed files with 1,689 additions and 1,122 deletions.
14 changes: 5 additions & 9 deletions drivers/gpu/drm/amd/amdgpu/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ FULL_AMD_DISPLAY_PATH := $(FULL_AMD_PATH)/$(DISPLAY_FOLDER_NAME)
ccflags-y := -I$(FULL_AMD_PATH)/include/asic_reg \
-I$(FULL_AMD_PATH)/include \
-I$(FULL_AMD_PATH)/amdgpu \
-I$(FULL_AMD_PATH)/powerplay/inc \
-I$(FULL_AMD_PATH)/pm/inc \
-I$(FULL_AMD_PATH)/acp/include \
-I$(FULL_AMD_DISPLAY_PATH) \
-I$(FULL_AMD_DISPLAY_PATH)/include \
Expand All @@ -54,7 +54,7 @@ amdgpu-y += amdgpu_device.o amdgpu_kms.o \
amdgpu_encoders.o amdgpu_display.o amdgpu_i2c.o \
amdgpu_fb.o amdgpu_gem.o amdgpu_ring.o \
amdgpu_cs.o amdgpu_bios.o amdgpu_benchmark.o amdgpu_test.o \
amdgpu_pm.o atombios_dp.o amdgpu_afmt.o amdgpu_trace_points.o \
atombios_dp.o amdgpu_afmt.o amdgpu_trace_points.o \
atombios_encoders.o amdgpu_sa.o atombios_i2c.o \
amdgpu_dma_buf.o amdgpu_vm.o amdgpu_ib.o amdgpu_pll.o \
amdgpu_ucode.o amdgpu_bo_list.o amdgpu_ctx.o amdgpu_sync.o \
Expand All @@ -67,10 +67,10 @@ amdgpu-y += amdgpu_device.o amdgpu_kms.o \
amdgpu-$(CONFIG_PERF_EVENTS) += amdgpu_pmu.o

# add asic specific block
amdgpu-$(CONFIG_DRM_AMDGPU_CIK)+= cik.o cik_ih.o kv_smc.o kv_dpm.o \
amdgpu-$(CONFIG_DRM_AMDGPU_CIK)+= cik.o cik_ih.o \
dce_v8_0.o gfx_v7_0.o cik_sdma.o uvd_v4_2.o vce_v2_0.o

amdgpu-$(CONFIG_DRM_AMDGPU_SI)+= si.o gmc_v6_0.o gfx_v6_0.o si_ih.o si_dma.o dce_v6_0.o si_dpm.o si_smc.o \
amdgpu-$(CONFIG_DRM_AMDGPU_SI)+= si.o gmc_v6_0.o gfx_v6_0.o si_ih.o si_dma.o dce_v6_0.o \
uvd_v3_1.o

amdgpu-y += \
Expand Down Expand Up @@ -112,10 +112,6 @@ amdgpu-y += \
psp_v11_0.o \
psp_v12_0.o

# add SMC block
amdgpu-y += \
amdgpu_dpm.o

# add DCE block
amdgpu-y += \
dce_v10_0.o \
Expand Down Expand Up @@ -219,7 +215,7 @@ amdgpu-$(CONFIG_VGA_SWITCHEROO) += amdgpu_atpx_handler.o
amdgpu-$(CONFIG_ACPI) += amdgpu_acpi.o
amdgpu-$(CONFIG_MMU_NOTIFIER) += amdgpu_mn.o

include $(FULL_AMD_PATH)/powerplay/Makefile
include $(FULL_AMD_PATH)/pm/Makefile

amdgpu-y += $(AMD_POWERPLAY_FILES)

Expand Down
10 changes: 5 additions & 5 deletions drivers/gpu/drm/amd/amdgpu/amdgpu.h
Original file line number Diff line number Diff line change
Expand Up @@ -1000,9 +1000,9 @@ struct amdgpu_device {
bool in_suspend;
bool in_hibernate;

atomic_t in_gpu_reset;
atomic_t in_gpu_reset;
enum pp_mp1_state mp1_state;
struct rw_semaphore reset_sem;
struct mutex lock_reset;
struct amdgpu_doorbell_index doorbell_index;

#ifdef HAVE_AMDKCL_HMM_MIRROR_ENABLED
Expand Down Expand Up @@ -1186,6 +1186,7 @@ int emu_soc_asic_init(struct amdgpu_device *adev);
#define amdgpu_inc_vram_lost(adev) atomic_inc(&((adev)->vram_lost_counter));

/* Common functions */
bool amdgpu_device_has_job_running(struct amdgpu_device *adev);
bool amdgpu_device_should_recover_gpu(struct amdgpu_device *adev);
int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
struct amdgpu_job* job);
Expand Down Expand Up @@ -1339,9 +1340,8 @@ static inline bool amdgpu_is_tmz(struct amdgpu_device *adev)
return adev->gmc.tmz_enabled;
}

static inline bool amdgpu_in_reset(struct amdgpu_device *adev)
static inline int amdgpu_in_reset(struct amdgpu_device *adev)
{
return atomic_read(&adev->in_gpu_reset) ? true : false;
return atomic_read(&adev->in_gpu_reset);
}

#endif
11 changes: 3 additions & 8 deletions drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c
Original file line number Diff line number Diff line change
Expand Up @@ -140,9 +140,7 @@ static int acp_poweroff(struct generic_pm_domain *genpd)
* 2. power off the acp tiles
* 3. check and enter ulv state
*/
if (adev->powerplay.pp_funcs &&
adev->powerplay.pp_funcs->set_powergating_by_smu)
amdgpu_dpm_set_powergating_by_smu(adev, AMD_IP_BLOCK_TYPE_ACP, true);
amdgpu_dpm_set_powergating_by_smu(adev, AMD_IP_BLOCK_TYPE_ACP, true);
}
return 0;
}
Expand All @@ -161,8 +159,7 @@ static int acp_poweron(struct generic_pm_domain *genpd)
* 2. turn on acp clock
* 3. power on acp tiles
*/
if (adev->powerplay.pp_funcs->set_powergating_by_smu)
amdgpu_dpm_set_powergating_by_smu(adev, AMD_IP_BLOCK_TYPE_ACP, false);
amdgpu_dpm_set_powergating_by_smu(adev, AMD_IP_BLOCK_TYPE_ACP, false);
}
return 0;
}
Expand Down Expand Up @@ -537,9 +534,7 @@ static int acp_set_powergating_state(void *handle,
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
bool enable = (state == AMD_PG_STATE_GATE);

if (adev->powerplay.pp_funcs &&
adev->powerplay.pp_funcs->set_powergating_by_smu)
amdgpu_dpm_set_powergating_by_smu(adev, AMD_IP_BLOCK_TYPE_ACP, enable);
amdgpu_dpm_set_powergating_by_smu(adev, AMD_IP_BLOCK_TYPE_ACP, enable);

return 0;
}
Expand Down
40 changes: 3 additions & 37 deletions drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
Original file line number Diff line number Diff line change
Expand Up @@ -251,14 +251,11 @@ int amdgpu_amdkfd_alloc_gtt_mem(struct kgd_dev *kgd, size_t size,
if (cp_mqd_gfx9)
bp.flags |= AMDGPU_GEM_CREATE_CP_MQD_GFX9;

if (!down_read_trylock(&adev->reset_sem))
return -EIO;

r = amdgpu_bo_create(adev, &bp, &bo);
if (r) {
dev_err(adev->dev,
"failed to allocate BO for amdkfd (%d)\n", r);
goto err;
return r;
}

/* map the buffer */
Expand Down Expand Up @@ -293,7 +290,6 @@ int amdgpu_amdkfd_alloc_gtt_mem(struct kgd_dev *kgd, size_t size,

amdgpu_bo_unreserve(bo);

up_read(&adev->reset_sem);
return 0;

allocate_mem_kmap_bo_failed:
Expand All @@ -302,25 +298,19 @@ int amdgpu_amdkfd_alloc_gtt_mem(struct kgd_dev *kgd, size_t size,
amdgpu_bo_unreserve(bo);
allocate_mem_reserve_bo_failed:
amdgpu_bo_unref(&bo);
err:
up_read(&adev->reset_sem);

return r;
}

void amdgpu_amdkfd_free_gtt_mem(struct kgd_dev *kgd, void *mem_obj)
{
struct amdgpu_device *adev = (struct amdgpu_device *)kgd;
struct amdgpu_bo *bo = (struct amdgpu_bo *) mem_obj;

down_read(&adev->reset_sem);

amdgpu_bo_reserve(bo, true);
amdgpu_bo_kunmap(bo);
amdgpu_bo_unpin(bo);
amdgpu_bo_unreserve(bo);
amdgpu_bo_unref(&(bo));

up_read(&adev->reset_sem);
}

int amdgpu_amdkfd_alloc_gws(struct kgd_dev *kgd, size_t size,
Expand Down Expand Up @@ -352,14 +342,9 @@ int amdgpu_amdkfd_alloc_gws(struct kgd_dev *kgd, size_t size,

void amdgpu_amdkfd_free_gws(struct kgd_dev *kgd, void *mem_obj)
{
struct amdgpu_device *adev = (struct amdgpu_device *)kgd;
struct amdgpu_bo *bo = (struct amdgpu_bo *)mem_obj;

down_read(&adev->reset_sem);

amdgpu_bo_unref(&bo);

up_read(&adev->reset_sem);
}

uint32_t amdgpu_amdkfd_get_fw_version(struct kgd_dev *kgd,
Expand Down Expand Up @@ -639,15 +624,8 @@ int amdgpu_amdkfd_submit_ib(struct kgd_dev *kgd, enum kgd_engine_type engine,
/* This works for NO_HWS. TODO: need to handle without knowing VMID */
job->vmid = vmid;

if (!down_read_trylock(&adev->reset_sem)) {
ret = -EIO;
goto err_ib_sched;
}

ret = amdgpu_ib_schedule(ring, 1, ib, job, &f);

up_read(&adev->reset_sem);

if (ret) {
DRM_ERROR("amdgpu: failed to schedule IB.\n");
goto err_ib_sched;
Expand Down Expand Up @@ -683,9 +661,6 @@ int amdgpu_amdkfd_flush_gpu_tlb_vmid(struct kgd_dev *kgd, uint16_t vmid)
{
struct amdgpu_device *adev = (struct amdgpu_device *)kgd;

if (!down_read_trylock(&adev->reset_sem))
return -EIO;

if (adev->family == AMDGPU_FAMILY_AI) {
int i;

Expand All @@ -695,8 +670,6 @@ int amdgpu_amdkfd_flush_gpu_tlb_vmid(struct kgd_dev *kgd, uint16_t vmid)
amdgpu_gmc_flush_gpu_tlb(adev, vmid, AMDGPU_GFXHUB_0, 0);
}

up_read(&adev->reset_sem);

return 0;
}

Expand All @@ -705,18 +678,11 @@ int amdgpu_amdkfd_flush_gpu_tlb_pasid(struct kgd_dev *kgd, uint16_t pasid)
struct amdgpu_device *adev = (struct amdgpu_device *)kgd;
const uint32_t flush_type = 0;
bool all_hub = false;
int ret = -EIO;

if (adev->family == AMDGPU_FAMILY_AI)
all_hub = true;

if (down_read_trylock(&adev->reset_sem)) {
ret = amdgpu_gmc_flush_gpu_tlb_pasid(adev,
pasid, flush_type, all_hub);
up_read(&adev->reset_sem);
}

return ret;
return amdgpu_gmc_flush_gpu_tlb_pasid(adev, pasid, flush_type, all_hub);
}

bool amdgpu_amdkfd_have_atomics_support(struct kgd_dev *kgd)
Expand Down
48 changes: 48 additions & 0 deletions drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c
Original file line number Diff line number Diff line change
Expand Up @@ -799,6 +799,50 @@ static void kgd_gfx_v10_set_wave_launch_stall(struct amdgpu_device *adev,
/* FIXME - see TBD in notes above. */
}

static bool kgd_gfx_v10_is_rlc_restore_supported(struct amdgpu_device *adev)
{
bool is_supported = true;

switch (adev->asic_type) {
case CHIP_NAVI10:
case CHIP_NAVI14:
/*
* TBD - Navi14 restore list update in progress.
* Will have to version check later.
*/
is_supported = false;
break;
default:
break;
};

return is_supported;
}

static void kgd_gfx_v10_set_gfxoff_and_debug_config(struct amdgpu_device *adev,
uint32_t vmid,
bool enable_debug_trap)
{
uint32_t data = 0;

if (kgd_gfx_v10_is_rlc_restore_supported(adev))
return;

amdgpu_gfx_off_ctrl(adev, !enable_debug_trap);

if (!enable_debug_trap)
return;

data = REG_SET_FIELD(data, SPI_GDBG_TRAP_CONFIG,
VMID_SEL, 1 << vmid);
data = REG_SET_FIELD(data, SPI_GDBG_TRAP_CONFIG,
TRAP_EN, 1);
WREG32(SOC15_REG_OFFSET(GC, 0, mmSPI_GDBG_TRAP_CONFIG), data);

WREG32(SOC15_REG_OFFSET(GC, 0, mmSPI_GDBG_TRAP_DATA0), 0);
WREG32(SOC15_REG_OFFSET(GC, 0, mmSPI_GDBG_TRAP_DATA1), 0);
}

void kgd_gfx_v10_enable_debug_trap(struct kgd_dev *kgd,
uint32_t trap_debug_wave_launch_mode,
uint32_t vmid)
Expand All @@ -809,6 +853,8 @@ void kgd_gfx_v10_enable_debug_trap(struct kgd_dev *kgd,

kgd_gfx_v10_set_wave_launch_stall(adev, vmid, true);

kgd_gfx_v10_set_gfxoff_and_debug_config(adev, vmid, true);

WREG32(SOC15_REG_OFFSET(GC, 0, mmSPI_GDBG_TRAP_MASK), 0);

kgd_gfx_v10_set_wave_launch_stall(adev, vmid, false);
Expand All @@ -824,6 +870,8 @@ void kgd_gfx_v10_disable_debug_trap(struct kgd_dev *kgd, uint32_t vmid)

kgd_gfx_v10_set_wave_launch_stall(adev, vmid, true);

kgd_gfx_v10_set_gfxoff_and_debug_config(adev, vmid, false);

WREG32(SOC15_REG_OFFSET(GC, 0, mmSPI_GDBG_TRAP_MASK), 0);

kgd_gfx_v10_set_wave_launch_stall(adev, vmid, false);
Expand Down
31 changes: 22 additions & 9 deletions drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
Original file line number Diff line number Diff line change
Expand Up @@ -208,19 +208,32 @@ static uint32_t get_sdma_rlc_reg_offset(struct amdgpu_device *adev,
unsigned int engine_id,
unsigned int queue_id)
{
uint32_t sdma_engine_reg_base[2] = {
SOC15_REG_OFFSET(SDMA0, 0,
mmSDMA0_RLC0_RB_CNTL) - mmSDMA0_RLC0_RB_CNTL,
SOC15_REG_OFFSET(SDMA1, 0,
mmSDMA1_RLC0_RB_CNTL) - mmSDMA1_RLC0_RB_CNTL
};
uint32_t retval = sdma_engine_reg_base[engine_id]
uint32_t sdma_engine_reg_base = 0;
uint32_t sdma_rlc_reg_offset;

switch (engine_id) {
default:
dev_warn(adev->dev,
"Invalid sdma engine id (%d), using engine id 0\n",
engine_id);
fallthrough;
case 0:
sdma_engine_reg_base = SOC15_REG_OFFSET(SDMA0, 0,
mmSDMA0_RLC0_RB_CNTL) - mmSDMA0_RLC0_RB_CNTL;
break;
case 1:
sdma_engine_reg_base = SOC15_REG_OFFSET(SDMA1, 0,
mmSDMA1_RLC0_RB_CNTL) - mmSDMA0_RLC0_RB_CNTL;
break;
}

sdma_rlc_reg_offset = sdma_engine_reg_base
+ queue_id * (mmSDMA0_RLC1_RB_CNTL - mmSDMA0_RLC0_RB_CNTL);

pr_debug("RLC register offset for SDMA%d RLC%d: 0x%x\n", engine_id,
queue_id, retval);
queue_id, sdma_rlc_reg_offset);

return retval;
return sdma_rlc_reg_offset;
}

static uint32_t get_watch_base_addr(struct amdgpu_device *adev)
Expand Down
7 changes: 0 additions & 7 deletions drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
Original file line number Diff line number Diff line change
Expand Up @@ -1245,9 +1245,6 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(
return -EINVAL;
}

if (!down_read_trylock(&adev->reset_sem))
return -EIO;

if (sg) {
alloc_domain = AMDGPU_GEM_DOMAIN_CPU;
bo_type = ttm_bo_type_sg;
Expand Down Expand Up @@ -1322,7 +1319,6 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(
if (offset)
*offset = amdgpu_bo_mmap_offset(bo);

up_read(&adev->reset_sem);
return 0;

allocate_init_user_pages_failed:
Expand All @@ -1340,9 +1336,6 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(
sg_free_table(sg);
kfree(sg);
}

up_read(&adev->reset_sem);

return ret;
}

Expand Down
Loading

0 comments on commit dd5d67a

Please sign in to comment.