Skip to content

Commit 5ee8805

Browse files
committed
Merge tag 'drm-fixes-2021-01-15' of git://anongit.freedesktop.org/drm/drm
Pull drm fixes from Dave Airlie: "Regular fixes for rc4, a bunch of fixes across i915, amdgpu and nouveau here, along with a couple of TTM fixes, and dma-buf and one core pageflip/modifier interaction fix. One notable i915 fix is a HSW GT1 regression fix that has been outstanding for quite a while. (Thanks to Matt Turner for kicking Intel into getting it fixed). dma-buf: - Fix a memory leak in CMAV heap core: - Fix format check for legacy pageflips ttm: - Pass correct address to dma_mapping_error() - Use mutex in pool shrinker i915: - Allow the sysadmin to override security mitigations - Restore clear-residual mitigations for ivb/byt - Limit VFE threads based on GT - GVT: fix vfio edid and full display detection - Fix DSI DSC power refcounting - Fix LPT CPU mode backlight takeover - Disable RPM wakeref assertions during driver shutdown - Fix DSI sequence sleeps 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 nouveau: - irq handling fix - expansion ROM fix - hw init dpcd disable - aux semaphore owner field fix - vram heap sizing fix - notifier at 0 is valid fix" * tag 'drm-fixes-2021-01-15' of git://anongit.freedesktop.org/drm/drm: (37 commits) drm/nouveau/kms/nv50-: fix case where notifier buffer is at offset 0 drm/nouveau/mmu: fix vram heap sizing drm/nouveau/i2c/gm200: increase width of aux semaphore owner fields drm/nouveau/i2c/gk110-: disable hw-initiated dpcd reads drm/nouveau/i2c/gk110: split out from i2c/gk104 drm/nouveau/privring: ack interrupts the same way as RM drm/nouveau/bios: fix issue shadowing expansion ROMs drm/amd/display: Fix to be able to stop crc calculation Revert "drm/amd/display: Expose new CRC window property" Revert "drm/amdgpu/disply: fix documentation warnings in display manager" Revert "drm/amd/display: Fix unused variable warning" drm/amdgpu: set power brake sequence drm/amdgpu: add new device id for Renior drm/amdgpu: add green_sardine device id (v2) drm/amdgpu: fix vram type and bandwidth error for DDR5 and DDR4 drm/amdgpu/gfx10: add updated GOLDEN_TSC_COUNT_UPPER/LOWER register offsets for VGH drm/amdkfd: Fix out-of-bounds read in kdf_create_vcrat_image_cpu() Revert "drm/amd/display: Fixed Intermittent blue screen on OLED panel" drm/amd/display: disable dcn10 pipe split by default drm/amd/display: Add a missing DCN3.01 API mapping ...
2 parents cdaed11 + c8f6364 commit 5ee8805

48 files changed

Lines changed: 598 additions & 410 deletions

Some content is hidden

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

MAINTAINERS

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -906,7 +906,7 @@ AMD KFD
906906
M: Felix Kuehling <Felix.Kuehling@amd.com>
907907
L: amd-gfx@lists.freedesktop.org
908908
S: Supported
909-
T: git git://people.freedesktop.org/~agd5f/linux
909+
T: git https://gitlab.freedesktop.org/agd5f/linux.git
910910
F: drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd*.[ch]
911911
F: drivers/gpu/drm/amd/amdkfd/
912912
F: drivers/gpu/drm/amd/include/cik_structs.h
@@ -14812,7 +14812,7 @@ M: Alex Deucher <alexander.deucher@amd.com>
1481214812
M: Christian König <christian.koenig@amd.com>
1481314813
L: amd-gfx@lists.freedesktop.org
1481414814
S: Supported
14815-
T: git git://people.freedesktop.org/~agd5f/linux
14815+
T: git https://gitlab.freedesktop.org/agd5f/linux.git
1481614816
F: drivers/gpu/drm/amd/
1481714817
F: drivers/gpu/drm/radeon/
1481814818
F: include/uapi/drm/amdgpu_drm.h

drivers/dma-buf/heaps/cma_heap.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,9 @@ static void cma_heap_dma_buf_release(struct dma_buf *dmabuf)
251251
buffer->vaddr = NULL;
252252
}
253253

254+
/* free page list */
255+
kfree(buffer->pages);
256+
/* release memory */
254257
cma_release(cma_heap->cma, buffer->cma_pages, buffer->pagecount);
255258
kfree(buffer);
256259
}

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)