Skip to content

Commit 8e10959

Browse files
committed
Merge tag 'amd-drm-fixes-5.11-2021-01-14' of https://gitlab.freedesktop.org/agd5f/linux into drm-fixes
amd-drm-fixes-5.11-2021-01-14: amdgpu: - Update repo location in MAINTAINERS - Add some new renoir PCI IDs - Revert CRC UAPI changes - Revert OLED display fix which cases clocking problems for some systems - Misc vangogh fixes - GFX fix for sienna cichlid - DCN1.0 fix for pipe split - Fix incorrect PSP command amdkfd: - Fix possible out of bounds read in vcrat creation Signed-off-by: Dave Airlie <airlied@redhat.com> From: Alex Deucher <alexdeucher@gmail.com> Link: https://patchwork.freedesktop.org/patch/msgid/20210114201354.3998-1-alexander.deucher@amd.com
2 parents 667d11d + 2f0fa78 commit 8e10959

17 files changed

Lines changed: 125 additions & 265 deletions

MAINTAINERS

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -907,7 +907,7 @@ AMD KFD
907907
M: Felix Kuehling <Felix.Kuehling@amd.com>
908908
L: amd-gfx@lists.freedesktop.org
909909
S: Supported
910-
T: git git://people.freedesktop.org/~agd5f/linux
910+
T: git https://gitlab.freedesktop.org/agd5f/linux.git
911911
F: drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd*.[ch]
912912
F: drivers/gpu/drm/amd/amdkfd/
913913
F: drivers/gpu/drm/amd/include/cik_structs.h
@@ -14818,7 +14818,7 @@ M: Alex Deucher <alexander.deucher@amd.com>
1481814818
M: Christian König <christian.koenig@amd.com>
1481914819
L: amd-gfx@lists.freedesktop.org
1482014820
S: Supported
14821-
T: git git://people.freedesktop.org/~agd5f/linux
14821+
T: git https://gitlab.freedesktop.org/agd5f/linux.git
1482214822
F: drivers/gpu/drm/amd/
1482314823
F: drivers/gpu/drm/radeon/
1482414824
F: include/uapi/drm/amdgpu_drm.h

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

Lines changed: 36 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ int amdgpu_atomfirmware_allocate_fb_scratch(struct amdgpu_device *adev)
112112
union igp_info {
113113
struct atom_integrated_system_info_v1_11 v11;
114114
struct atom_integrated_system_info_v1_12 v12;
115+
struct atom_integrated_system_info_v2_1 v21;
115116
};
116117

117118
union umc_info {
@@ -209,24 +210,42 @@ amdgpu_atomfirmware_get_vram_info(struct amdgpu_device *adev,
209210
if (adev->flags & AMD_IS_APU) {
210211
igp_info = (union igp_info *)
211212
(mode_info->atom_context->bios + data_offset);
212-
switch (crev) {
213-
case 11:
214-
mem_channel_number = igp_info->v11.umachannelnumber;
215-
/* channel width is 64 */
216-
if (vram_width)
217-
*vram_width = mem_channel_number * 64;
218-
mem_type = igp_info->v11.memorytype;
219-
if (vram_type)
220-
*vram_type = convert_atom_mem_type_to_vram_type(adev, mem_type);
213+
switch (frev) {
214+
case 1:
215+
switch (crev) {
216+
case 11:
217+
case 12:
218+
mem_channel_number = igp_info->v11.umachannelnumber;
219+
if (!mem_channel_number)
220+
mem_channel_number = 1;
221+
/* channel width is 64 */
222+
if (vram_width)
223+
*vram_width = mem_channel_number * 64;
224+
mem_type = igp_info->v11.memorytype;
225+
if (vram_type)
226+
*vram_type = convert_atom_mem_type_to_vram_type(adev, mem_type);
227+
break;
228+
default:
229+
return -EINVAL;
230+
}
221231
break;
222-
case 12:
223-
mem_channel_number = igp_info->v12.umachannelnumber;
224-
/* channel width is 64 */
225-
if (vram_width)
226-
*vram_width = mem_channel_number * 64;
227-
mem_type = igp_info->v12.memorytype;
228-
if (vram_type)
229-
*vram_type = convert_atom_mem_type_to_vram_type(adev, mem_type);
232+
case 2:
233+
switch (crev) {
234+
case 1:
235+
case 2:
236+
mem_channel_number = igp_info->v21.umachannelnumber;
237+
if (!mem_channel_number)
238+
mem_channel_number = 1;
239+
/* channel width is 64 */
240+
if (vram_width)
241+
*vram_width = mem_channel_number * 64;
242+
mem_type = igp_info->v21.memorytype;
243+
if (vram_type)
244+
*vram_type = convert_atom_mem_type_to_vram_type(adev, mem_type);
245+
break;
246+
default:
247+
return -EINVAL;
248+
}
230249
break;
231250
default:
232251
return -EINVAL;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3034,7 +3034,7 @@ bool amdgpu_device_asic_has_dc_support(enum amd_asic_type asic_type)
30343034
#endif
30353035
default:
30363036
if (amdgpu_dc > 0)
3037-
DRM_INFO("Display Core has been requested via kernel parameter "
3037+
DRM_INFO_ONCE("Display Core has been requested via kernel parameter "
30383038
"but isn't supported by ASIC, ignoring\n");
30393039
return false;
30403040
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1085,6 +1085,8 @@ static const struct pci_device_id pciidlist[] = {
10851085

10861086
/* Renoir */
10871087
{0x1002, 0x1636, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RENOIR|AMD_IS_APU},
1088+
{0x1002, 0x1638, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RENOIR|AMD_IS_APU},
1089+
{0x1002, 0x164C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RENOIR|AMD_IS_APU},
10881090

10891091
/* Navi12 */
10901092
{0x1002, 0x7360, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVI12},

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

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,10 @@
9999
#define mmGCR_GENERAL_CNTL_Sienna_Cichlid 0x1580
100100
#define mmGCR_GENERAL_CNTL_Sienna_Cichlid_BASE_IDX 0
101101

102+
#define mmGOLDEN_TSC_COUNT_UPPER_Vangogh 0x0025
103+
#define mmGOLDEN_TSC_COUNT_UPPER_Vangogh_BASE_IDX 1
104+
#define mmGOLDEN_TSC_COUNT_LOWER_Vangogh 0x0026
105+
#define mmGOLDEN_TSC_COUNT_LOWER_Vangogh_BASE_IDX 1
102106
#define mmSPI_CONFIG_CNTL_1_Vangogh 0x2441
103107
#define mmSPI_CONFIG_CNTL_1_Vangogh_BASE_IDX 1
104108
#define mmVGT_TF_MEMORY_BASE_HI_Vangogh 0x2261
@@ -160,6 +164,9 @@
160164
#define mmGCVM_L2_CGTT_CLK_CTRL_Sienna_Cichlid 0x15db
161165
#define mmGCVM_L2_CGTT_CLK_CTRL_Sienna_Cichlid_BASE_IDX 0
162166

167+
#define mmGC_THROTTLE_CTRL_Sienna_Cichlid 0x2030
168+
#define mmGC_THROTTLE_CTRL_Sienna_Cichlid_BASE_IDX 0
169+
163170
MODULE_FIRMWARE("amdgpu/navi10_ce.bin");
164171
MODULE_FIRMWARE("amdgpu/navi10_pfp.bin");
165172
MODULE_FIRMWARE("amdgpu/navi10_me.bin");
@@ -3324,6 +3331,7 @@ static void gfx_v10_0_ring_emit_de_meta(struct amdgpu_ring *ring, bool resume);
33243331
static void gfx_v10_0_ring_emit_frame_cntl(struct amdgpu_ring *ring, bool start, bool secure);
33253332
static u32 gfx_v10_3_get_disabled_sa(struct amdgpu_device *adev);
33263333
static void gfx_v10_3_program_pbb_mode(struct amdgpu_device *adev);
3334+
static void gfx_v10_3_set_power_brake_sequence(struct amdgpu_device *adev);
33273335

33283336
static void gfx10_kiq_set_resources(struct amdgpu_ring *kiq_ring, uint64_t queue_mask)
33293337
{
@@ -7192,6 +7200,9 @@ static int gfx_v10_0_hw_init(void *handle)
71927200
if (adev->asic_type == CHIP_SIENNA_CICHLID)
71937201
gfx_v10_3_program_pbb_mode(adev);
71947202

7203+
if (adev->asic_type >= CHIP_SIENNA_CICHLID)
7204+
gfx_v10_3_set_power_brake_sequence(adev);
7205+
71957206
return r;
71967207
}
71977208

@@ -7377,8 +7388,16 @@ static uint64_t gfx_v10_0_get_gpu_clock_counter(struct amdgpu_device *adev)
73777388

73787389
amdgpu_gfx_off_ctrl(adev, false);
73797390
mutex_lock(&adev->gfx.gpu_clock_mutex);
7380-
clock = (uint64_t)RREG32_SOC15(SMUIO, 0, mmGOLDEN_TSC_COUNT_LOWER) |
7381-
((uint64_t)RREG32_SOC15(SMUIO, 0, mmGOLDEN_TSC_COUNT_UPPER) << 32ULL);
7391+
switch (adev->asic_type) {
7392+
case CHIP_VANGOGH:
7393+
clock = (uint64_t)RREG32_SOC15(SMUIO, 0, mmGOLDEN_TSC_COUNT_LOWER_Vangogh) |
7394+
((uint64_t)RREG32_SOC15(SMUIO, 0, mmGOLDEN_TSC_COUNT_UPPER_Vangogh) << 32ULL);
7395+
break;
7396+
default:
7397+
clock = (uint64_t)RREG32_SOC15(SMUIO, 0, mmGOLDEN_TSC_COUNT_LOWER) |
7398+
((uint64_t)RREG32_SOC15(SMUIO, 0, mmGOLDEN_TSC_COUNT_UPPER) << 32ULL);
7399+
break;
7400+
}
73827401
mutex_unlock(&adev->gfx.gpu_clock_mutex);
73837402
amdgpu_gfx_off_ctrl(adev, true);
73847403
return clock;
@@ -9169,6 +9188,31 @@ static void gfx_v10_3_program_pbb_mode(struct amdgpu_device *adev)
91699188
}
91709189
}
91719190

9191+
static void gfx_v10_3_set_power_brake_sequence(struct amdgpu_device *adev)
9192+
{
9193+
WREG32_SOC15(GC, 0, mmGRBM_GFX_INDEX,
9194+
(0x1 << GRBM_GFX_INDEX__SA_BROADCAST_WRITES__SHIFT) |
9195+
(0x1 << GRBM_GFX_INDEX__INSTANCE_BROADCAST_WRITES__SHIFT) |
9196+
(0x1 << GRBM_GFX_INDEX__SE_BROADCAST_WRITES__SHIFT));
9197+
9198+
WREG32_SOC15(GC, 0, mmGC_CAC_IND_INDEX, ixPWRBRK_STALL_PATTERN_CTRL);
9199+
WREG32_SOC15(GC, 0, mmGC_CAC_IND_DATA,
9200+
(0x1 << PWRBRK_STALL_PATTERN_CTRL__PWRBRK_STEP_INTERVAL__SHIFT) |
9201+
(0x12 << PWRBRK_STALL_PATTERN_CTRL__PWRBRK_BEGIN_STEP__SHIFT) |
9202+
(0x13 << PWRBRK_STALL_PATTERN_CTRL__PWRBRK_END_STEP__SHIFT) |
9203+
(0xf << PWRBRK_STALL_PATTERN_CTRL__PWRBRK_THROTTLE_PATTERN_BIT_NUMS__SHIFT));
9204+
9205+
WREG32_SOC15(GC, 0, mmGC_THROTTLE_CTRL_Sienna_Cichlid,
9206+
(0x1 << GC_THROTTLE_CTRL__PWRBRK_STALL_EN__SHIFT) |
9207+
(0x1 << GC_THROTTLE_CTRL__PATTERN_MODE__SHIFT) |
9208+
(0x5 << GC_THROTTLE_CTRL__RELEASE_STEP_INTERVAL__SHIFT));
9209+
9210+
WREG32_SOC15(GC, 0, mmDIDT_IND_INDEX, ixDIDT_SQ_THROTTLE_CTRL);
9211+
9212+
WREG32_SOC15(GC, 0, mmDIDT_IND_DATA,
9213+
(0x1 << DIDT_SQ_THROTTLE_CTRL__PWRBRK_STALL_EN__SHIFT));
9214+
}
9215+
91729216
const struct amdgpu_ip_block_version gfx_v10_0_ip_block =
91739217
{
91749218
.type = AMD_IP_BLOCK_TYPE_GFX,

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ enum psp_gfx_crtl_cmd_id
4747
GFX_CTRL_CMD_ID_DISABLE_INT = 0x00060000, /* disable PSP-to-Gfx interrupt */
4848
GFX_CTRL_CMD_ID_MODE1_RST = 0x00070000, /* trigger the Mode 1 reset */
4949
GFX_CTRL_CMD_ID_GBR_IH_SET = 0x00080000, /* set Gbr IH_RB_CNTL registers */
50-
GFX_CTRL_CMD_ID_CONSUME_CMD = 0x000A0000, /* send interrupt to psp for updating write pointer of vf */
50+
GFX_CTRL_CMD_ID_CONSUME_CMD = 0x00090000, /* send interrupt to psp for updating write pointer of vf */
5151
GFX_CTRL_CMD_ID_DESTROY_GPCOM_RING = 0x000C0000, /* destroy GPCOM ring */
5252

5353
GFX_CTRL_CMD_ID_MAX = 0x000F0000, /* max command ID */

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1239,7 +1239,8 @@ static int soc15_common_early_init(void *handle)
12391239
break;
12401240
case CHIP_RENOIR:
12411241
adev->asic_funcs = &soc15_asic_funcs;
1242-
if (adev->pdev->device == 0x1636)
1242+
if ((adev->pdev->device == 0x1636) ||
1243+
(adev->pdev->device == 0x164c))
12431244
adev->apu_flags |= AMD_APU_IS_RENOIR;
12441245
else
12451246
adev->apu_flags |= AMD_APU_IS_GREEN_SARDINE;

drivers/gpu/drm/amd/amdkfd/kfd_crat.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1040,11 +1040,14 @@ static int kfd_create_vcrat_image_cpu(void *pcrat_image, size_t *size)
10401040
(struct crat_subtype_iolink *)sub_type_hdr);
10411041
if (ret < 0)
10421042
return ret;
1043-
crat_table->length += (sub_type_hdr->length * entries);
1044-
crat_table->total_entries += entries;
10451043

1046-
sub_type_hdr = (typeof(sub_type_hdr))((char *)sub_type_hdr +
1047-
sub_type_hdr->length * entries);
1044+
if (entries) {
1045+
crat_table->length += (sub_type_hdr->length * entries);
1046+
crat_table->total_entries += entries;
1047+
1048+
sub_type_hdr = (typeof(sub_type_hdr))((char *)sub_type_hdr +
1049+
sub_type_hdr->length * entries);
1050+
}
10481051
#else
10491052
pr_info("IO link not available for non x86 platforms\n");
10501053
#endif

0 commit comments

Comments
 (0)