Skip to content

Commit 00df051

Browse files
committed
Merge tag 'amd-drm-next-5.19-2022-05-18' of https://gitlab.freedesktop.org/agd5f/linux into drm-next
amd-drm-next-5.19-2022-05-18: amdgpu: - Misc code cleanups - Additional SMU 13.x enablement - Smartshift fixes - GFX11 fixes - Support for SMU 13.0.4 - SMU mutex fix - Suspend/resume fix amdkfd: - static checker fix - Doorbell/MMIO resource handling fix Signed-off-by: Dave Airlie <airlied@redhat.com> From: Alex Deucher <alexander.deucher@amd.com> Link: https://patchwork.freedesktop.org/patch/msgid/20220518205621.5741-1-alexander.deucher@amd.com
2 parents f812250 + 0223e51 commit 00df051

251 files changed

Lines changed: 384442 additions & 2210 deletions

File tree

Some content is hidden

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

drivers/gpu/drm/amd/amdgpu/Makefile

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ amdgpu-y += amdgpu_device.o amdgpu_kms.o \
5858
amdgpu_vm_sdma.o amdgpu_discovery.o amdgpu_ras_eeprom.o amdgpu_nbio.o \
5959
amdgpu_umc.o smu_v11_0_i2c.o amdgpu_fru_eeprom.o amdgpu_rap.o \
6060
amdgpu_fw_attestation.o amdgpu_securedisplay.o \
61-
amdgpu_eeprom.o amdgpu_mca.o amdgpu_psp_ta.o
61+
amdgpu_eeprom.o amdgpu_mca.o amdgpu_psp_ta.o amdgpu_lsdma.o
6262

6363
amdgpu-$(CONFIG_PROC_FS) += amdgpu_fdinfo.o
6464

@@ -74,7 +74,8 @@ amdgpu-$(CONFIG_DRM_AMDGPU_SI)+= si.o gmc_v6_0.o gfx_v6_0.o si_ih.o si_dma.o dce
7474
amdgpu-y += \
7575
vi.o mxgpu_vi.o nbio_v6_1.o soc15.o emu_soc.o mxgpu_ai.o nbio_v7_0.o vega10_reg_init.o \
7676
vega20_reg_init.o nbio_v7_4.o nbio_v2_3.o nv.o arct_reg_init.o mxgpu_nv.o \
77-
nbio_v7_2.o hdp_v4_0.o hdp_v5_0.o aldebaran_reg_init.o aldebaran.o soc21.o
77+
nbio_v7_2.o hdp_v4_0.o hdp_v5_0.o aldebaran_reg_init.o aldebaran.o soc21.o \
78+
nbio_v4_3.o hdp_v6_0.o nbio_v7_7.o hdp_v5_2.o lsdma_v6_0.o
7879

7980
# add DF block
8081
amdgpu-y += \
@@ -87,7 +88,7 @@ amdgpu-y += \
8788
gmc_v8_0.o \
8889
gfxhub_v1_0.o mmhub_v1_0.o gmc_v9_0.o gfxhub_v1_1.o mmhub_v9_4.o \
8990
gfxhub_v2_0.o mmhub_v2_0.o gmc_v10_0.o gfxhub_v2_1.o mmhub_v2_3.o \
90-
mmhub_v1_7.o
91+
mmhub_v1_7.o gfxhub_v3_0.o mmhub_v3_0.o mmhub_v3_0_2.o gmc_v11_0.o
9192

9293
# add UMC block
9394
amdgpu-y += \
@@ -102,7 +103,8 @@ amdgpu-y += \
102103
cz_ih.o \
103104
vega10_ih.o \
104105
vega20_ih.o \
105-
navi10_ih.o
106+
navi10_ih.o \
107+
ih_v6_0.o
106108

107109
# add PSP block
108110
amdgpu-y += \
@@ -128,7 +130,9 @@ amdgpu-y += \
128130
gfx_v9_0.o \
129131
gfx_v9_4.o \
130132
gfx_v9_4_2.o \
131-
gfx_v10_0.o
133+
gfx_v10_0.o \
134+
imu_v11_0.o \
135+
gfx_v11_0.o
132136

133137
# add async DMA block
134138
amdgpu-y += \
@@ -138,11 +142,14 @@ amdgpu-y += \
138142
sdma_v4_0.o \
139143
sdma_v4_4.o \
140144
sdma_v5_0.o \
141-
sdma_v5_2.o
145+
sdma_v5_2.o \
146+
sdma_v6_0.o
142147

143148
# add MES block
144149
amdgpu-y += \
145-
mes_v10_1.o
150+
amdgpu_mes.o \
151+
mes_v10_1.o \
152+
mes_v11_0.o
146153

147154
# add UVD block
148155
amdgpu-y += \
@@ -160,28 +167,33 @@ amdgpu-y += \
160167
# add VCN and JPEG block
161168
amdgpu-y += \
162169
amdgpu_vcn.o \
170+
vcn_sw_ring.o \
163171
vcn_v1_0.o \
164172
vcn_v2_0.o \
165173
vcn_v2_5.o \
166174
vcn_v3_0.o \
175+
vcn_v4_0.o \
167176
amdgpu_jpeg.o \
168177
jpeg_v1_0.o \
169178
jpeg_v2_0.o \
170179
jpeg_v2_5.o \
171-
jpeg_v3_0.o
180+
jpeg_v3_0.o \
181+
jpeg_v4_0.o
172182

173183
# add ATHUB block
174184
amdgpu-y += \
175185
athub_v1_0.o \
176186
athub_v2_0.o \
177-
athub_v2_1.o
187+
athub_v2_1.o \
188+
athub_v3_0.o
178189

179190
# add SMUIO block
180191
amdgpu-y += \
181192
smuio_v9_0.o \
182193
smuio_v11_0.o \
183194
smuio_v11_0_6.o \
184-
smuio_v13_0.o
195+
smuio_v13_0.o \
196+
smuio_v13_0_6.o
185197

186198
# add reset block
187199
amdgpu-y += \
@@ -207,7 +219,8 @@ amdgpu-y += \
207219
amdgpu_amdkfd_arcturus.o \
208220
amdgpu_amdkfd_aldebaran.o \
209221
amdgpu_amdkfd_gfx_v10.o \
210-
amdgpu_amdkfd_gfx_v10_3.o
222+
amdgpu_amdkfd_gfx_v10_3.o \
223+
amdgpu_amdkfd_gfx_v11.o
211224

212225
ifneq ($(CONFIG_DRM_AMDGPU_CIK),)
213226
amdgpu-y += amdgpu_amdkfd_gfx_v7.o

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

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,11 +86,13 @@
8686
#include "amdgpu_gmc.h"
8787
#include "amdgpu_gfx.h"
8888
#include "amdgpu_sdma.h"
89+
#include "amdgpu_lsdma.h"
8990
#include "amdgpu_nbio.h"
9091
#include "amdgpu_hdp.h"
9192
#include "amdgpu_dm.h"
9293
#include "amdgpu_virt.h"
9394
#include "amdgpu_csa.h"
95+
#include "amdgpu_mes_ctx.h"
9496
#include "amdgpu_gart.h"
9597
#include "amdgpu_debugfs.h"
9698
#include "amdgpu_job.h"
@@ -207,6 +209,7 @@ extern int amdgpu_async_gfx_ring;
207209
extern int amdgpu_mcbp;
208210
extern int amdgpu_discovery;
209211
extern int amdgpu_mes;
212+
extern int amdgpu_mes_kiq;
210213
extern int amdgpu_noretry;
211214
extern int amdgpu_force_asic_type;
212215
extern int amdgpu_smartshift_bias;
@@ -641,6 +644,7 @@ enum amd_hw_ip_block_type {
641644
SDMA5_HWIP,
642645
SDMA6_HWIP,
643646
SDMA7_HWIP,
647+
LSDMA_HWIP,
644648
MMHUB_HWIP,
645649
ATHUB_HWIP,
646650
NBIO_HWIP,
@@ -720,6 +724,26 @@ struct ip_discovery_top;
720724
(rid == 0x01) || \
721725
(rid == 0x10))))
722726

727+
struct amdgpu_mqd_prop {
728+
uint64_t mqd_gpu_addr;
729+
uint64_t hqd_base_gpu_addr;
730+
uint64_t rptr_gpu_addr;
731+
uint64_t wptr_gpu_addr;
732+
uint32_t queue_size;
733+
bool use_doorbell;
734+
uint32_t doorbell_index;
735+
uint64_t eop_gpu_addr;
736+
uint32_t hqd_pipe_priority;
737+
uint32_t hqd_queue_priority;
738+
bool hqd_active;
739+
};
740+
741+
struct amdgpu_mqd {
742+
unsigned mqd_size;
743+
int (*init_mqd)(struct amdgpu_device *adev, void *mqd,
744+
struct amdgpu_mqd_prop *p);
745+
};
746+
723747
#define AMDGPU_RESET_MAGIC_NUM 64
724748
#define AMDGPU_MAX_DF_PERFMONS 4
725749
#define AMDGPU_PRODUCT_NAME_LEN 64
@@ -887,6 +911,9 @@ struct amdgpu_device {
887911
/* sdma */
888912
struct amdgpu_sdma sdma;
889913

914+
/* lsdma */
915+
struct amdgpu_lsdma lsdma;
916+
890917
/* uvd */
891918
struct amdgpu_uvd uvd;
892919

@@ -919,7 +946,9 @@ struct amdgpu_device {
919946

920947
/* mes */
921948
bool enable_mes;
949+
bool enable_mes_kiq;
922950
struct amdgpu_mes mes;
951+
struct amdgpu_mqd mqds[AMDGPU_HW_IP_NUM];
923952

924953
/* df */
925954
struct amdgpu_df df;
@@ -981,10 +1010,10 @@ struct amdgpu_device {
9811010
bool runpm;
9821011
bool in_runpm;
9831012
bool has_pr3;
984-
bool is_fw_fb;
9851013

9861014
bool pm_sysfs_en;
9871015
bool ucode_sysfs_en;
1016+
bool psp_sysfs_en;
9881017

9891018
/* Chip product information */
9901019
char product_number[16];
@@ -1016,6 +1045,9 @@ struct amdgpu_device {
10161045
/* reset dump register */
10171046
uint32_t *reset_dump_reg_list;
10181047
int num_regs;
1048+
1049+
bool scpm_enabled;
1050+
uint32_t scpm_status;
10191051
};
10201052

10211053
static inline struct amdgpu_device *drm_to_adev(struct drm_device *ddev)
@@ -1188,7 +1220,8 @@ int emu_soc_asic_init(struct amdgpu_device *adev);
11881220
#define amdgpu_asic_flush_hdp(adev, r) \
11891221
((adev)->asic_funcs->flush_hdp ? (adev)->asic_funcs->flush_hdp((adev), (r)) : (adev)->hdp.funcs->flush_hdp((adev), (r)))
11901222
#define amdgpu_asic_invalidate_hdp(adev, r) \
1191-
((adev)->asic_funcs->invalidate_hdp ? (adev)->asic_funcs->invalidate_hdp((adev), (r)) : (adev)->hdp.funcs->invalidate_hdp((adev), (r)))
1223+
((adev)->asic_funcs->invalidate_hdp ? (adev)->asic_funcs->invalidate_hdp((adev), (r)) : \
1224+
((adev)->hdp.funcs->invalidate_hdp ? (adev)->hdp.funcs->invalidate_hdp((adev), (r)) : 0))
11921225
#define amdgpu_asic_need_full_reset(adev) (adev)->asic_funcs->need_full_reset((adev))
11931226
#define amdgpu_asic_init_doorbell_index(adev) (adev)->asic_funcs->init_doorbell_index((adev))
11941227
#define amdgpu_asic_get_pcie_usage(adev, cnt0, cnt1) ((adev)->asic_funcs->get_pcie_usage((adev), (cnt0), (cnt1)))
@@ -1345,9 +1378,11 @@ static inline int amdgpu_acpi_smart_shift_update(struct drm_device *dev,
13451378

13461379
#if defined(CONFIG_ACPI) && defined(CONFIG_SUSPEND)
13471380
bool amdgpu_acpi_is_s3_active(struct amdgpu_device *adev);
1381+
bool amdgpu_acpi_should_gpu_reset(struct amdgpu_device *adev);
13481382
bool amdgpu_acpi_is_s0ix_active(struct amdgpu_device *adev);
13491383
#else
13501384
static inline bool amdgpu_acpi_is_s0ix_active(struct amdgpu_device *adev) { return false; }
1385+
static inline bool amdgpu_acpi_should_gpu_reset(struct amdgpu_device *adev) { return false; }
13511386
static inline bool amdgpu_acpi_is_s3_active(struct amdgpu_device *adev) { return false; }
13521387
#endif
13531388

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1045,6 +1045,20 @@ bool amdgpu_acpi_is_s3_active(struct amdgpu_device *adev)
10451045
(pm_suspend_target_state == PM_SUSPEND_MEM);
10461046
}
10471047

1048+
/**
1049+
* amdgpu_acpi_should_gpu_reset
1050+
*
1051+
* @adev: amdgpu_device_pointer
1052+
*
1053+
* returns true if should reset GPU, false if not
1054+
*/
1055+
bool amdgpu_acpi_should_gpu_reset(struct amdgpu_device *adev)
1056+
{
1057+
if (adev->flags & AMD_IS_APU)
1058+
return false;
1059+
return pm_suspend_target_state != PM_SUSPEND_TO_IDLE;
1060+
}
1061+
10481062
/**
10491063
* amdgpu_acpi_is_s0ix_active
10501064
*

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

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,18 @@ static void amdgpu_doorbell_get_kfd_info(struct amdgpu_device *adev,
100100
* The first num_doorbells are used by amdgpu.
101101
* amdkfd takes whatever's left in the aperture.
102102
*/
103-
if (adev->doorbell.size > adev->doorbell.num_doorbells * sizeof(u32)) {
103+
if (adev->enable_mes) {
104+
/*
105+
* With MES enabled, we only need to initialize
106+
* the base address. The size and offset are
107+
* not initialized as AMDGPU manages the whole
108+
* doorbell space.
109+
*/
110+
*aperture_base = adev->doorbell.base;
111+
*aperture_size = 0;
112+
*start_offset = 0;
113+
} else if (adev->doorbell.size > adev->doorbell.num_doorbells *
114+
sizeof(u32)) {
104115
*aperture_base = adev->doorbell.base;
105116
*aperture_size = adev->doorbell.size;
106117
*start_offset = adev->doorbell.num_doorbells * sizeof(u32);
@@ -128,7 +139,7 @@ void amdgpu_amdkfd_device_init(struct amdgpu_device *adev)
128139
AMDGPU_GMC_HOLE_START),
129140
.drm_render_minor = adev_to_drm(adev)->render->index,
130141
.sdma_doorbell_idx = adev->doorbell_index.sdma_engine,
131-
142+
.enable_mes = adev->enable_mes,
132143
};
133144

134145
/* this is going to have a few of the MSBs set that we need to

0 commit comments

Comments
 (0)