Skip to content

Commit df95968

Browse files
committed
Merge tag 'amd-drm-next-5.6-2020-01-17' of git://people.freedesktop.org/~agd5f/linux into drm-next
amd-drm-next-5.6-2020-01-17: amdgpu: - Fix 32 bit harder - Powerplay cleanups - VCN fixes for Arcturus - RAS fixes - eDP/DP fixes - SR-IOV fixes - Re-enable S/G display for PCO/RV2 - Free stolen memory after init on gmc10 - DF hashing optimizations for Arcturus - Properly handle runtime pm in sysfs and debugfs - Unify more GC programming between amdgpu and amdkfd - Golden settings updates for gfx10 - GDDR6 training fixes - Freesync fixes - DSC fixes - TMDS fixes - Renoir USB-C fixes - DC dml updates from hw team - Pollock support - Mutex init regresson fix amdkfd: - Unify more GC programming between amdgpu and amdkfd - Use KIQ to setup HIQ rather than using MMIO scheduler: - Documentation fixes - Improve job distribution with load sharing drm: - DP MST fix Signed-off-by: Dave Airlie <[email protected]> From: Alex Deucher <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
2 parents 71e7274 + 7b19914 commit df95968

File tree

141 files changed

+4559
-1781
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

141 files changed

+4559
-1781
lines changed

drivers/gpu/drm/amd/amdgpu/amdgpu.h

Lines changed: 4 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@
9090
#include "amdgpu_mes.h"
9191
#include "amdgpu_umc.h"
9292
#include "amdgpu_mmhub.h"
93+
#include "amdgpu_df.h"
9394

9495
#define MAX_GPU_INSTANCE 16
9596

@@ -664,29 +665,6 @@ struct amdgpu_mmio_remap {
664665
resource_size_t bus_addr;
665666
};
666667

667-
struct amdgpu_df_funcs {
668-
void (*sw_init)(struct amdgpu_device *adev);
669-
void (*sw_fini)(struct amdgpu_device *adev);
670-
void (*enable_broadcast_mode)(struct amdgpu_device *adev,
671-
bool enable);
672-
u32 (*get_fb_channel_number)(struct amdgpu_device *adev);
673-
u32 (*get_hbm_channel_number)(struct amdgpu_device *adev);
674-
void (*update_medium_grain_clock_gating)(struct amdgpu_device *adev,
675-
bool enable);
676-
void (*get_clockgating_state)(struct amdgpu_device *adev,
677-
u32 *flags);
678-
void (*enable_ecc_force_par_wr_rmw)(struct amdgpu_device *adev,
679-
bool enable);
680-
int (*pmc_start)(struct amdgpu_device *adev, uint64_t config,
681-
int is_enable);
682-
int (*pmc_stop)(struct amdgpu_device *adev, uint64_t config,
683-
int is_disable);
684-
void (*pmc_get_count)(struct amdgpu_device *adev, uint64_t config,
685-
uint64_t *count);
686-
uint64_t (*get_fica)(struct amdgpu_device *adev, uint32_t ficaa_val);
687-
void (*set_fica)(struct amdgpu_device *adev, uint32_t ficaa_val,
688-
uint32_t ficadl_val, uint32_t ficadh_val);
689-
};
690668
/* Define the HW IP blocks will be used in driver , add more if necessary */
691669
enum amd_hw_ip_block_type {
692670
GC_HWIP = 1,
@@ -930,6 +908,9 @@ struct amdgpu_device {
930908
bool enable_mes;
931909
struct amdgpu_mes mes;
932910

911+
/* df */
912+
struct amdgpu_df df;
913+
933914
struct amdgpu_ip_block ip_blocks[AMDGPU_MAX_IP_NUM];
934915
int num_ip_blocks;
935916
struct mutex mn_lock;
@@ -943,8 +924,6 @@ struct amdgpu_device {
943924
/* soc15 register offset based on ip, instance and segment */
944925
uint32_t *reg_offset[MAX_HWIP][HWIP_MAX_INSTANCE];
945926

946-
const struct amdgpu_df_funcs *df_funcs;
947-
948927
/* delayed work_func for deferring clockgating during resume */
949928
struct delayed_work delayed_init_work;
950929

drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -613,15 +613,9 @@ void amdgpu_amdkfd_set_compute_idle(struct kgd_dev *kgd, bool idle)
613613
{
614614
struct amdgpu_device *adev = (struct amdgpu_device *)kgd;
615615

616-
if (is_support_sw_smu(adev))
617-
smu_switch_power_profile(&adev->smu,
618-
PP_SMC_POWER_PROFILE_COMPUTE,
619-
!idle);
620-
else if (adev->powerplay.pp_funcs &&
621-
adev->powerplay.pp_funcs->switch_power_profile)
622-
amdgpu_dpm_switch_power_profile(adev,
623-
PP_SMC_POWER_PROFILE_COMPUTE,
624-
!idle);
616+
amdgpu_dpm_switch_power_profile(adev,
617+
PP_SMC_POWER_PROFILE_COMPUTE,
618+
!idle);
625619
}
626620

627621
bool amdgpu_amdkfd_is_kfd_vmid(struct amdgpu_device *adev, u32 vmid)
@@ -634,6 +628,38 @@ bool amdgpu_amdkfd_is_kfd_vmid(struct amdgpu_device *adev, u32 vmid)
634628
return false;
635629
}
636630

631+
int amdgpu_amdkfd_flush_gpu_tlb_vmid(struct kgd_dev *kgd, uint16_t vmid)
632+
{
633+
struct amdgpu_device *adev = (struct amdgpu_device *)kgd;
634+
635+
if (adev->family == AMDGPU_FAMILY_AI) {
636+
int i;
637+
638+
for (i = 0; i < adev->num_vmhubs; i++)
639+
amdgpu_gmc_flush_gpu_tlb(adev, vmid, i, 0);
640+
} else {
641+
amdgpu_gmc_flush_gpu_tlb(adev, vmid, AMDGPU_GFXHUB_0, 0);
642+
}
643+
644+
return 0;
645+
}
646+
647+
int amdgpu_amdkfd_flush_gpu_tlb_pasid(struct kgd_dev *kgd, uint16_t pasid)
648+
{
649+
struct amdgpu_device *adev = (struct amdgpu_device *)kgd;
650+
uint32_t flush_type = 0;
651+
bool all_hub = false;
652+
653+
if (adev->gmc.xgmi.num_physical_nodes &&
654+
adev->asic_type == CHIP_VEGA20)
655+
flush_type = 2;
656+
657+
if (adev->family == AMDGPU_FAMILY_AI)
658+
all_hub = true;
659+
660+
return amdgpu_gmc_flush_gpu_tlb_pasid(adev, pasid, flush_type, all_hub);
661+
}
662+
637663
bool amdgpu_amdkfd_have_atomics_support(struct kgd_dev *kgd)
638664
{
639665
struct amdgpu_device *adev = (struct amdgpu_device *)kgd;

drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,8 @@ int amdgpu_amdkfd_submit_ib(struct kgd_dev *kgd, enum kgd_engine_type engine,
136136
uint32_t *ib_cmd, uint32_t ib_len);
137137
void amdgpu_amdkfd_set_compute_idle(struct kgd_dev *kgd, bool idle);
138138
bool amdgpu_amdkfd_have_atomics_support(struct kgd_dev *kgd);
139+
int amdgpu_amdkfd_flush_gpu_tlb_vmid(struct kgd_dev *kgd, uint16_t vmid);
140+
int amdgpu_amdkfd_flush_gpu_tlb_pasid(struct kgd_dev *kgd, uint16_t pasid);
139141

140142
bool amdgpu_amdkfd_is_kfd_vmid(struct amdgpu_device *adev, u32 vmid);
141143

drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_arcturus.c

Lines changed: 47 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -71,32 +71,56 @@ static uint32_t get_sdma_rlc_reg_offset(struct amdgpu_device *adev,
7171
unsigned int engine_id,
7272
unsigned int queue_id)
7373
{
74-
uint32_t sdma_engine_reg_base[8] = {
75-
SOC15_REG_OFFSET(SDMA0, 0,
76-
mmSDMA0_RLC0_RB_CNTL) - mmSDMA0_RLC0_RB_CNTL,
77-
SOC15_REG_OFFSET(SDMA1, 0,
78-
mmSDMA1_RLC0_RB_CNTL) - mmSDMA1_RLC0_RB_CNTL,
79-
SOC15_REG_OFFSET(SDMA2, 0,
80-
mmSDMA2_RLC0_RB_CNTL) - mmSDMA2_RLC0_RB_CNTL,
81-
SOC15_REG_OFFSET(SDMA3, 0,
82-
mmSDMA3_RLC0_RB_CNTL) - mmSDMA3_RLC0_RB_CNTL,
83-
SOC15_REG_OFFSET(SDMA4, 0,
84-
mmSDMA4_RLC0_RB_CNTL) - mmSDMA4_RLC0_RB_CNTL,
85-
SOC15_REG_OFFSET(SDMA5, 0,
86-
mmSDMA5_RLC0_RB_CNTL) - mmSDMA5_RLC0_RB_CNTL,
87-
SOC15_REG_OFFSET(SDMA6, 0,
88-
mmSDMA6_RLC0_RB_CNTL) - mmSDMA6_RLC0_RB_CNTL,
89-
SOC15_REG_OFFSET(SDMA7, 0,
90-
mmSDMA7_RLC0_RB_CNTL) - mmSDMA7_RLC0_RB_CNTL
91-
};
92-
93-
uint32_t retval = sdma_engine_reg_base[engine_id]
74+
uint32_t sdma_engine_reg_base = 0;
75+
uint32_t sdma_rlc_reg_offset;
76+
77+
switch (engine_id) {
78+
default:
79+
dev_warn(adev->dev,
80+
"Invalid sdma engine id (%d), using engine id 0\n",
81+
engine_id);
82+
/* fall through */
83+
case 0:
84+
sdma_engine_reg_base = SOC15_REG_OFFSET(SDMA0, 0,
85+
mmSDMA0_RLC0_RB_CNTL) - mmSDMA0_RLC0_RB_CNTL;
86+
break;
87+
case 1:
88+
sdma_engine_reg_base = SOC15_REG_OFFSET(SDMA1, 0,
89+
mmSDMA1_RLC0_RB_CNTL) - mmSDMA1_RLC0_RB_CNTL;
90+
break;
91+
case 2:
92+
sdma_engine_reg_base = SOC15_REG_OFFSET(SDMA2, 0,
93+
mmSDMA2_RLC0_RB_CNTL) - mmSDMA2_RLC0_RB_CNTL;
94+
break;
95+
case 3:
96+
sdma_engine_reg_base = SOC15_REG_OFFSET(SDMA3, 0,
97+
mmSDMA3_RLC0_RB_CNTL) - mmSDMA3_RLC0_RB_CNTL;
98+
break;
99+
case 4:
100+
sdma_engine_reg_base = SOC15_REG_OFFSET(SDMA4, 0,
101+
mmSDMA4_RLC0_RB_CNTL) - mmSDMA4_RLC0_RB_CNTL;
102+
break;
103+
case 5:
104+
sdma_engine_reg_base = SOC15_REG_OFFSET(SDMA5, 0,
105+
mmSDMA5_RLC0_RB_CNTL) - mmSDMA5_RLC0_RB_CNTL;
106+
break;
107+
case 6:
108+
sdma_engine_reg_base = SOC15_REG_OFFSET(SDMA6, 0,
109+
mmSDMA6_RLC0_RB_CNTL) - mmSDMA6_RLC0_RB_CNTL;
110+
break;
111+
case 7:
112+
sdma_engine_reg_base = SOC15_REG_OFFSET(SDMA7, 0,
113+
mmSDMA7_RLC0_RB_CNTL) - mmSDMA7_RLC0_RB_CNTL;
114+
break;
115+
}
116+
117+
sdma_rlc_reg_offset = sdma_engine_reg_base
94118
+ queue_id * (mmSDMA0_RLC1_RB_CNTL - mmSDMA0_RLC0_RB_CNTL);
95119

96120
pr_debug("RLC register offset for SDMA%d RLC%d: 0x%x\n", engine_id,
97-
queue_id, retval);
121+
queue_id, sdma_rlc_reg_offset);
98122

99-
return retval;
123+
return sdma_rlc_reg_offset;
100124
}
101125

102126
static int kgd_hqd_sdma_load(struct kgd_dev *kgd, void *mqd,
@@ -281,6 +305,7 @@ const struct kfd2kgd_calls arcturus_kfd2kgd = {
281305
.set_pasid_vmid_mapping = kgd_gfx_v9_set_pasid_vmid_mapping,
282306
.init_interrupts = kgd_gfx_v9_init_interrupts,
283307
.hqd_load = kgd_gfx_v9_hqd_load,
308+
.hiq_mqd_load = kgd_gfx_v9_hiq_mqd_load,
284309
.hqd_sdma_load = kgd_hqd_sdma_load,
285310
.hqd_dump = kgd_gfx_v9_hqd_dump,
286311
.hqd_sdma_dump = kgd_hqd_sdma_dump,
@@ -296,7 +321,5 @@ const struct kfd2kgd_calls arcturus_kfd2kgd = {
296321
kgd_gfx_v9_get_atc_vmid_pasid_mapping_info,
297322
.get_tile_config = kgd_gfx_v9_get_tile_config,
298323
.set_vm_context_page_table_base = kgd_set_vm_context_page_table_base,
299-
.invalidate_tlbs = kgd_gfx_v9_invalidate_tlbs,
300-
.invalidate_tlbs_vmid = kgd_gfx_v9_invalidate_tlbs_vmid,
301324
.get_hive_id = amdgpu_amdkfd_get_hive_id,
302325
};

0 commit comments

Comments
 (0)