Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'drm-fixes-2019-08-09' of git://anongit.freedesktop.org/drm/drm

Pull drm fixes from Dave Airlie:
"Usual fixes roundup. Nothing too crazy or serious, one non-released
ioctl is removed in the amdkfd driver.

core:
- mode parser strncpy fix

i915:
- GLK DSI escape clock setting
- HDCP memleak fix

tegra:
- one gpiod/of regression fix

amdgpu:
- fix VCN to handle the latest navi10 firmware
- fix for fan control on navi10
- properly handle SMU metrics table on navi10
- fix a resume regression on Stoney
- kfd revert a GWS ioctl

vmwgfx:
- memory leak fix

rockchip:
- suspend fix"

* tag 'drm-fixes-2019-08-09' of git://anongit.freedesktop.org/drm/drm:
drm/vmwgfx: fix memory leak when too many retries have occurred
Revert "drm/amdkfd: New IOCTL to allocate queue GWS"
Revert "drm/amdgpu: fix transform feedback GDS hang on gfx10 (v2)"
drm/amdgpu: pin the csb buffer on hw init for gfx v8
drm/rockchip: Suspend DP late
drm/i915: Fix wrong escape clock divisor init for GLK
drm/i915: fix possible memory leak in intel_hdcp_auth_downstream()
drm/modes: Fix unterminated strncpy
drm/amd/powerplay: correct navi10 vcn powergate
drm/amd/powerplay: honor hw limit on fetching metrics data for navi10
drm/amd/powerplay: Allow changing of fan_control in smu_v11_0
drm/amd/amdgpu/vcn_v2_0: Move VCN 2.0 specific dec ring test to vcn_v2_0
drm/amd/amdgpu/vcn_v2_0: Mark RB commands as KMD commands
drm/tegra: Fix gpiod_get_from_of_node() regression

+155 -102
-1
drivers/gpu/drm/amd/amdgpu/amdgpu_gds.h
··· 32 32 uint32_t gws_size; 33 33 uint32_t oa_size; 34 34 uint32_t gds_compute_max_wave_id; 35 - uint32_t vgt_gs_max_wave_id; 36 35 }; 37 36 38 37 struct amdgpu_gds_reg_offset {
+1
drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h
··· 30 30 #define AMDGPU_VCN_FIRMWARE_OFFSET 256 31 31 #define AMDGPU_VCN_MAX_ENC_RINGS 3 32 32 33 + #define VCN_DEC_KMD_CMD 0x80000000 33 34 #define VCN_DEC_CMD_FENCE 0x00000000 34 35 #define VCN_DEC_CMD_TRAP 0x00000001 35 36 #define VCN_DEC_CMD_WRITE_REG 0x00000004
+1 -11
drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c
··· 4206 4206 unsigned vmid = AMDGPU_JOB_GET_VMID(job); 4207 4207 u32 header, control = 0; 4208 4208 4209 - /* Prevent a hw deadlock due to a wave ID mismatch between ME and GDS. 4210 - * This resets the wave ID counters. (needed by transform feedback) 4211 - * TODO: This might only be needed on a VMID switch when we change 4212 - * the GDS OA mapping, not sure. 4213 - */ 4214 - amdgpu_ring_write(ring, PACKET3(PACKET3_SET_CONFIG_REG, 1)); 4215 - amdgpu_ring_write(ring, mmVGT_GS_MAX_WAVE_ID); 4216 - amdgpu_ring_write(ring, ring->adev->gds.vgt_gs_max_wave_id); 4217 - 4218 4209 if (ib->flags & AMDGPU_IB_FLAG_CE) 4219 4210 header = PACKET3(PACKET3_INDIRECT_BUFFER_CNST, 2); 4220 4211 else ··· 4952 4961 5 + /* HDP_INVL */ 4953 4962 8 + 8 + /* FENCE x2 */ 4954 4963 2, /* SWITCH_BUFFER */ 4955 - .emit_ib_size = 7, /* gfx_v10_0_ring_emit_ib_gfx */ 4964 + .emit_ib_size = 4, /* gfx_v10_0_ring_emit_ib_gfx */ 4956 4965 .emit_ib = gfx_v10_0_ring_emit_ib_gfx, 4957 4966 .emit_fence = gfx_v10_0_ring_emit_fence, 4958 4967 .emit_pipeline_sync = gfx_v10_0_ring_emit_pipeline_sync, ··· 5103 5112 default: 5104 5113 adev->gds.gds_size = 0x10000; 5105 5114 adev->gds.gds_compute_max_wave_id = 0x4ff; 5106 - adev->gds.vgt_gs_max_wave_id = 0x3ff; 5107 5115 break; 5108 5116 } 5109 5117
+40
drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
··· 1321 1321 return 0; 1322 1322 } 1323 1323 1324 + static int gfx_v8_0_csb_vram_pin(struct amdgpu_device *adev) 1325 + { 1326 + int r; 1327 + 1328 + r = amdgpu_bo_reserve(adev->gfx.rlc.clear_state_obj, false); 1329 + if (unlikely(r != 0)) 1330 + return r; 1331 + 1332 + r = amdgpu_bo_pin(adev->gfx.rlc.clear_state_obj, 1333 + AMDGPU_GEM_DOMAIN_VRAM); 1334 + if (!r) 1335 + adev->gfx.rlc.clear_state_gpu_addr = 1336 + amdgpu_bo_gpu_offset(adev->gfx.rlc.clear_state_obj); 1337 + 1338 + amdgpu_bo_unreserve(adev->gfx.rlc.clear_state_obj); 1339 + 1340 + return r; 1341 + } 1342 + 1343 + static void gfx_v8_0_csb_vram_unpin(struct amdgpu_device *adev) 1344 + { 1345 + int r; 1346 + 1347 + if (!adev->gfx.rlc.clear_state_obj) 1348 + return; 1349 + 1350 + r = amdgpu_bo_reserve(adev->gfx.rlc.clear_state_obj, true); 1351 + if (likely(r == 0)) { 1352 + amdgpu_bo_unpin(adev->gfx.rlc.clear_state_obj); 1353 + amdgpu_bo_unreserve(adev->gfx.rlc.clear_state_obj); 1354 + } 1355 + } 1356 + 1324 1357 static void gfx_v8_0_mec_fini(struct amdgpu_device *adev) 1325 1358 { 1326 1359 amdgpu_bo_free_kernel(&adev->gfx.mec.hpd_eop_obj, NULL, NULL); ··· 4818 4785 gfx_v8_0_init_golden_registers(adev); 4819 4786 gfx_v8_0_constants_init(adev); 4820 4787 4788 + r = gfx_v8_0_csb_vram_pin(adev); 4789 + if (r) 4790 + return r; 4791 + 4821 4792 r = adev->gfx.rlc.funcs->resume(adev); 4822 4793 if (r) 4823 4794 return r; ··· 4938 4901 else 4939 4902 pr_err("rlc is busy, skip halt rlc\n"); 4940 4903 amdgpu_gfx_rlc_exit_safe_mode(adev); 4904 + 4905 + gfx_v8_0_csb_vram_unpin(adev); 4906 + 4941 4907 return 0; 4942 4908 } 4943 4909
+37 -7
drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c
··· 1485 1485 amdgpu_ring_write(ring, PACKET0(mmUVD_GPCOM_VCPU_DATA0_INTERNAL_OFFSET, 0)); 1486 1486 amdgpu_ring_write(ring, 0); 1487 1487 amdgpu_ring_write(ring, PACKET0(mmUVD_GPCOM_VCPU_CMD_INTERNAL_OFFSET, 0)); 1488 - amdgpu_ring_write(ring, VCN_DEC_CMD_PACKET_START << 1); 1488 + amdgpu_ring_write(ring, VCN_DEC_KMD_CMD | (VCN_DEC_CMD_PACKET_START << 1)); 1489 1489 } 1490 1490 1491 1491 /** ··· 1498 1498 static void vcn_v2_0_dec_ring_insert_end(struct amdgpu_ring *ring) 1499 1499 { 1500 1500 amdgpu_ring_write(ring, PACKET0(mmUVD_GPCOM_VCPU_CMD_INTERNAL_OFFSET, 0)); 1501 - amdgpu_ring_write(ring, VCN_DEC_CMD_PACKET_END << 1); 1501 + amdgpu_ring_write(ring, VCN_DEC_KMD_CMD | (VCN_DEC_CMD_PACKET_END << 1)); 1502 1502 } 1503 1503 1504 1504 /** ··· 1543 1543 amdgpu_ring_write(ring, upper_32_bits(addr) & 0xff); 1544 1544 1545 1545 amdgpu_ring_write(ring, PACKET0(mmUVD_GPCOM_VCPU_CMD_INTERNAL_OFFSET, 0)); 1546 - amdgpu_ring_write(ring, VCN_DEC_CMD_FENCE << 1); 1546 + amdgpu_ring_write(ring, VCN_DEC_KMD_CMD | (VCN_DEC_CMD_FENCE << 1)); 1547 1547 1548 1548 amdgpu_ring_write(ring, PACKET0(mmUVD_GPCOM_VCPU_DATA0_INTERNAL_OFFSET, 0)); 1549 1549 amdgpu_ring_write(ring, 0); ··· 1553 1553 1554 1554 amdgpu_ring_write(ring, PACKET0(mmUVD_GPCOM_VCPU_CMD_INTERNAL_OFFSET, 0)); 1555 1555 1556 - amdgpu_ring_write(ring, VCN_DEC_CMD_TRAP << 1); 1556 + amdgpu_ring_write(ring, VCN_DEC_KMD_CMD | (VCN_DEC_CMD_TRAP << 1)); 1557 1557 } 1558 1558 1559 1559 /** ··· 1597 1597 1598 1598 amdgpu_ring_write(ring, PACKET0(mmUVD_GPCOM_VCPU_CMD_INTERNAL_OFFSET, 0)); 1599 1599 1600 - amdgpu_ring_write(ring, VCN_DEC_CMD_REG_READ_COND_WAIT << 1); 1600 + amdgpu_ring_write(ring, VCN_DEC_KMD_CMD | (VCN_DEC_CMD_REG_READ_COND_WAIT << 1)); 1601 1601 } 1602 1602 1603 1603 static void vcn_v2_0_dec_ring_emit_vm_flush(struct amdgpu_ring *ring, ··· 1626 1626 1627 1627 amdgpu_ring_write(ring, PACKET0(mmUVD_GPCOM_VCPU_CMD_INTERNAL_OFFSET, 0)); 1628 1628 1629 - amdgpu_ring_write(ring, VCN_DEC_CMD_WRITE_REG << 1); 1629 + amdgpu_ring_write(ring, VCN_DEC_KMD_CMD | (VCN_DEC_CMD_WRITE_REG << 1)); 1630 1630 } 1631 1631 1632 1632 /** ··· 2079 2079 return 0; 2080 2080 } 2081 2081 2082 + static int vcn_v2_0_dec_ring_test_ring(struct amdgpu_ring *ring) 2083 + { 2084 + struct amdgpu_device *adev = ring->adev; 2085 + uint32_t tmp = 0; 2086 + unsigned i; 2087 + int r; 2088 + 2089 + WREG32(adev->vcn.external.scratch9, 0xCAFEDEAD); 2090 + r = amdgpu_ring_alloc(ring, 4); 2091 + if (r) 2092 + return r; 2093 + amdgpu_ring_write(ring, PACKET0(mmUVD_GPCOM_VCPU_CMD_INTERNAL_OFFSET, 0)); 2094 + amdgpu_ring_write(ring, VCN_DEC_KMD_CMD | (VCN_DEC_CMD_PACKET_START << 1)); 2095 + amdgpu_ring_write(ring, PACKET0(adev->vcn.internal.scratch9, 0)); 2096 + amdgpu_ring_write(ring, 0xDEADBEEF); 2097 + amdgpu_ring_commit(ring); 2098 + for (i = 0; i < adev->usec_timeout; i++) { 2099 + tmp = RREG32(adev->vcn.external.scratch9); 2100 + if (tmp == 0xDEADBEEF) 2101 + break; 2102 + DRM_UDELAY(1); 2103 + } 2104 + 2105 + if (i >= adev->usec_timeout) 2106 + r = -ETIMEDOUT; 2107 + 2108 + return r; 2109 + } 2110 + 2111 + 2082 2112 static int vcn_v2_0_set_powergating_state(void *handle, 2083 2113 enum amd_powergating_state state) 2084 2114 { ··· 2172 2142 .emit_ib = vcn_v2_0_dec_ring_emit_ib, 2173 2143 .emit_fence = vcn_v2_0_dec_ring_emit_fence, 2174 2144 .emit_vm_flush = vcn_v2_0_dec_ring_emit_vm_flush, 2175 - .test_ring = amdgpu_vcn_dec_ring_test_ring, 2145 + .test_ring = vcn_v2_0_dec_ring_test_ring, 2176 2146 .test_ib = amdgpu_vcn_dec_ring_test_ib, 2177 2147 .insert_nop = vcn_v2_0_dec_ring_insert_nop, 2178 2148 .insert_start = vcn_v2_0_dec_ring_insert_start,
-28
drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
··· 1567 1567 return err; 1568 1568 } 1569 1569 1570 - static int kfd_ioctl_alloc_queue_gws(struct file *filep, 1571 - struct kfd_process *p, void *data) 1572 - { 1573 - int retval; 1574 - struct kfd_ioctl_alloc_queue_gws_args *args = data; 1575 - struct kfd_dev *dev; 1576 - 1577 - if (!hws_gws_support) 1578 - return -ENODEV; 1579 - 1580 - dev = kfd_device_by_id(args->gpu_id); 1581 - if (!dev) { 1582 - pr_debug("Could not find gpu id 0x%x\n", args->gpu_id); 1583 - return -ENODEV; 1584 - } 1585 - if (dev->dqm->sched_policy == KFD_SCHED_POLICY_NO_HWS) 1586 - return -ENODEV; 1587 - 1588 - mutex_lock(&p->mutex); 1589 - retval = pqm_set_gws(&p->pqm, args->queue_id, args->num_gws ? dev->gws : NULL); 1590 - mutex_unlock(&p->mutex); 1591 - 1592 - args->first_gws = 0; 1593 - return retval; 1594 - } 1595 - 1596 1570 static int kfd_ioctl_get_dmabuf_info(struct file *filep, 1597 1571 struct kfd_process *p, void *data) 1598 1572 { ··· 1769 1795 AMDKFD_IOCTL_DEF(AMDKFD_IOC_IMPORT_DMABUF, 1770 1796 kfd_ioctl_import_dmabuf, 0), 1771 1797 1772 - AMDKFD_IOCTL_DEF(AMDKFD_IOC_ALLOC_QUEUE_GWS, 1773 - kfd_ioctl_alloc_queue_gws, 0), 1774 1798 }; 1775 1799 1776 1800 #define AMDKFD_CORE_IOCTL_COUNT ARRAY_SIZE(amdkfd_ioctls)
+3 -1
drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
··· 315 315 int smu_common_read_sensor(struct smu_context *smu, enum amd_pp_sensors sensor, 316 316 void *data, uint32_t *size) 317 317 { 318 + struct smu_power_context *smu_power = &smu->smu_power; 319 + struct smu_power_gate *power_gate = &smu_power->power_gate; 318 320 int ret = 0; 319 321 320 322 switch (sensor) { ··· 341 339 *size = 4; 342 340 break; 343 341 case AMDGPU_PP_SENSOR_VCN_POWER_STATE: 344 - *(uint32_t *)data = smu_feature_is_enabled(smu, SMU_FEATURE_VCN_PG_BIT) ? 1 : 0; 342 + *(uint32_t *)data = power_gate->vcn_gated ? 0 : 1; 345 343 *size = 4; 346 344 break; 347 345 default:
+1
drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
··· 451 451 struct smu_power_gate { 452 452 bool uvd_gated; 453 453 bool vce_gated; 454 + bool vcn_gated; 454 455 }; 455 456 456 457 struct smu_power_context {
+53 -26
drivers/gpu/drm/amd/powerplay/navi10_ppt.c
··· 502 502 503 503 static int navi10_tables_init(struct smu_context *smu, struct smu_table *tables) 504 504 { 505 + struct smu_table_context *smu_table = &smu->smu_table; 506 + 505 507 SMU_TABLE_INIT(tables, SMU_TABLE_PPTABLE, sizeof(PPTable_t), 506 508 PAGE_SIZE, AMDGPU_GEM_DOMAIN_VRAM); 507 509 SMU_TABLE_INIT(tables, SMU_TABLE_WATERMARKS, sizeof(Watermarks_t), ··· 518 516 sizeof(DpmActivityMonitorCoeffInt_t), PAGE_SIZE, 519 517 AMDGPU_GEM_DOMAIN_VRAM); 520 518 519 + smu_table->metrics_table = kzalloc(sizeof(SmuMetrics_t), GFP_KERNEL); 520 + if (!smu_table->metrics_table) 521 + return -ENOMEM; 522 + smu_table->metrics_time = 0; 523 + 521 524 return 0; 525 + } 526 + 527 + static int navi10_get_metrics_table(struct smu_context *smu, 528 + SmuMetrics_t *metrics_table) 529 + { 530 + struct smu_table_context *smu_table= &smu->smu_table; 531 + int ret = 0; 532 + 533 + if (!smu_table->metrics_time || time_after(jiffies, smu_table->metrics_time + HZ / 1000)) { 534 + ret = smu_update_table(smu, SMU_TABLE_SMU_METRICS, 0, 535 + (void *)smu_table->metrics_table, false); 536 + if (ret) { 537 + pr_info("Failed to export SMU metrics table!\n"); 538 + return ret; 539 + } 540 + smu_table->metrics_time = jiffies; 541 + } 542 + 543 + memcpy(metrics_table, smu_table->metrics_table, sizeof(SmuMetrics_t)); 544 + 545 + return ret; 522 546 } 523 547 524 548 static int navi10_allocate_dpm_context(struct smu_context *smu) ··· 605 577 606 578 static int navi10_dpm_set_uvd_enable(struct smu_context *smu, bool enable) 607 579 { 580 + struct smu_power_context *smu_power = &smu->smu_power; 581 + struct smu_power_gate *power_gate = &smu_power->power_gate; 608 582 int ret = 0; 609 583 610 584 if (enable) { 611 - ret = smu_send_smc_msg_with_param(smu, SMU_MSG_PowerUpVcn, 1); 612 - if (ret) 613 - return ret; 585 + /* vcn dpm on is a prerequisite for vcn power gate messages */ 586 + if (smu_feature_is_enabled(smu, SMU_FEATURE_VCN_PG_BIT)) { 587 + ret = smu_send_smc_msg_with_param(smu, SMU_MSG_PowerUpVcn, 1); 588 + if (ret) 589 + return ret; 590 + } 591 + power_gate->vcn_gated = false; 614 592 } else { 615 - ret = smu_send_smc_msg(smu, SMU_MSG_PowerDownVcn); 616 - if (ret) 617 - return ret; 593 + if (smu_feature_is_enabled(smu, SMU_FEATURE_VCN_PG_BIT)) { 594 + ret = smu_send_smc_msg(smu, SMU_MSG_PowerDownVcn); 595 + if (ret) 596 + return ret; 597 + } 598 + power_gate->vcn_gated = true; 618 599 } 619 - 620 - ret = smu_feature_set_enabled(smu, SMU_FEATURE_VCN_PG_BIT, enable); 621 600 622 601 return ret; 623 602 } ··· 633 598 enum smu_clk_type clk_type, 634 599 uint32_t *value) 635 600 { 636 - static SmuMetrics_t metrics; 637 601 int ret = 0, clk_id = 0; 602 + SmuMetrics_t metrics; 638 603 639 - if (!value) 640 - return -EINVAL; 641 - 642 - memset(&metrics, 0, sizeof(metrics)); 643 - 644 - ret = smu_update_table(smu, SMU_TABLE_SMU_METRICS, 0, (void *)&metrics, false); 604 + ret = navi10_get_metrics_table(smu, &metrics); 645 605 if (ret) 646 606 return ret; 647 607 ··· 924 894 if (!value) 925 895 return -EINVAL; 926 896 927 - ret = smu_update_table(smu, SMU_TABLE_SMU_METRICS, 0, (void *)&metrics, 928 - false); 897 + ret = navi10_get_metrics_table(smu, &metrics); 898 + if (ret) 899 + return ret; 929 900 if (ret) 930 901 return ret; 931 902 ··· 945 914 if (!value) 946 915 return -EINVAL; 947 916 948 - msleep(1); 949 - 950 - ret = smu_update_table(smu, SMU_TABLE_SMU_METRICS, 0, 951 - (void *)&metrics, false); 917 + ret = navi10_get_metrics_table(smu, &metrics); 952 918 if (ret) 953 919 return ret; 954 920 ··· 984 956 if (!speed) 985 957 return -EINVAL; 986 958 987 - memset(&metrics, 0, sizeof(metrics)); 988 - 989 - ret = smu_update_table(smu, SMU_TABLE_SMU_METRICS, 0, 990 - (void *)&metrics, false); 959 + ret = navi10_get_metrics_table(smu, &metrics); 960 + if (ret) 961 + return ret; 991 962 if (ret) 992 963 return ret; 993 964 ··· 1334 1307 if (!value) 1335 1308 return -EINVAL; 1336 1309 1337 - ret = smu_update_table(smu, SMU_TABLE_SMU_METRICS, 0, (void *)&metrics, false); 1310 + ret = navi10_get_metrics_table(smu, &metrics); 1338 1311 if (ret) 1339 1312 return ret; 1340 1313
+1 -1
drivers/gpu/drm/amd/powerplay/smu_v11_0.c
··· 1391 1391 { 1392 1392 int ret = 0; 1393 1393 1394 - if (smu_feature_is_supported(smu, SMU_FEATURE_FAN_CONTROL_BIT)) 1394 + if (!smu_feature_is_supported(smu, SMU_FEATURE_FAN_CONTROL_BIT)) 1395 1395 return 0; 1396 1396 1397 1397 ret = smu_feature_set_enabled(smu, SMU_FEATURE_FAN_CONTROL_BIT, start);
+3 -1
drivers/gpu/drm/drm_modes.c
··· 1770 1770 } 1771 1771 1772 1772 if (named_mode) { 1773 - strncpy(mode->name, name, mode_end); 1773 + if (mode_end + 1 > DRM_DISPLAY_MODE_LEN) 1774 + return false; 1775 + strscpy(mode->name, name, mode_end + 1); 1774 1776 } else { 1775 1777 ret = drm_mode_parse_cmdline_res_mode(name, mode_end, 1776 1778 parse_extras,
+2 -1
drivers/gpu/drm/i915/display/intel_hdcp.c
··· 536 536 537 537 if (drm_hdcp_check_ksvs_revoked(dev, ksv_fifo, num_downstream)) { 538 538 DRM_ERROR("Revoked Ksv(s) in ksv_fifo\n"); 539 - return -EPERM; 539 + ret = -EPERM; 540 + goto err; 540 541 } 541 542 542 543 /*
+2 -2
drivers/gpu/drm/i915/display/vlv_dsi_pll.c
··· 396 396 else 397 397 txesc2_div = 10; 398 398 399 - I915_WRITE(MIPIO_TXESC_CLK_DIV1, txesc1_div & GLK_TX_ESC_CLK_DIV1_MASK); 400 - I915_WRITE(MIPIO_TXESC_CLK_DIV2, txesc2_div & GLK_TX_ESC_CLK_DIV2_MASK); 399 + I915_WRITE(MIPIO_TXESC_CLK_DIV1, (1 << (txesc1_div - 1)) & GLK_TX_ESC_CLK_DIV1_MASK); 400 + I915_WRITE(MIPIO_TXESC_CLK_DIV2, (1 << (txesc2_div - 1)) & GLK_TX_ESC_CLK_DIV2_MASK); 401 401 } 402 402 403 403 /* Program BXT Mipi clocks and dividers */
+1 -1
drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
··· 432 432 433 433 static const struct dev_pm_ops rockchip_dp_pm_ops = { 434 434 #ifdef CONFIG_PM_SLEEP 435 - .suspend = rockchip_dp_suspend, 435 + .suspend_late = rockchip_dp_suspend, 436 436 .resume_early = rockchip_dp_resume, 437 437 #endif 438 438 };
+6 -2
drivers/gpu/drm/tegra/output.c
··· 126 126 "nvidia,hpd-gpio", 0, 127 127 GPIOD_IN, 128 128 "HDMI hotplug detect"); 129 - if (IS_ERR(output->hpd_gpio)) 130 - return PTR_ERR(output->hpd_gpio); 129 + if (IS_ERR(output->hpd_gpio)) { 130 + if (PTR_ERR(output->hpd_gpio) != -ENOENT) 131 + return PTR_ERR(output->hpd_gpio); 132 + 133 + output->hpd_gpio = NULL; 134 + } 131 135 132 136 if (output->hpd_gpio) { 133 137 err = gpiod_to_irq(output->hpd_gpio);
+3 -1
drivers/gpu/drm/vmwgfx/vmwgfx_msg.c
··· 389 389 break; 390 390 } 391 391 392 - if (retries == RETRIES) 392 + if (retries == RETRIES) { 393 + kfree(reply); 393 394 return -EINVAL; 395 + } 394 396 395 397 *msg_len = reply_len; 396 398 *msg = reply;
+1 -19
include/uapi/linux/kfd_ioctl.h
··· 410 410 __u32 n_success; /* to/from KFD */ 411 411 }; 412 412 413 - /* Allocate GWS for specific queue 414 - * 415 - * @gpu_id: device identifier 416 - * @queue_id: queue's id that GWS is allocated for 417 - * @num_gws: how many GWS to allocate 418 - * @first_gws: index of the first GWS allocated. 419 - * only support contiguous GWS allocation 420 - */ 421 - struct kfd_ioctl_alloc_queue_gws_args { 422 - __u32 gpu_id; /* to KFD */ 423 - __u32 queue_id; /* to KFD */ 424 - __u32 num_gws; /* to KFD */ 425 - __u32 first_gws; /* from KFD */ 426 - }; 427 - 428 413 struct kfd_ioctl_get_dmabuf_info_args { 429 414 __u64 size; /* from KFD */ 430 415 __u64 metadata_ptr; /* to KFD */ ··· 529 544 #define AMDKFD_IOC_IMPORT_DMABUF \ 530 545 AMDKFD_IOWR(0x1D, struct kfd_ioctl_import_dmabuf_args) 531 546 532 - #define AMDKFD_IOC_ALLOC_QUEUE_GWS \ 533 - AMDKFD_IOWR(0x1E, struct kfd_ioctl_alloc_queue_gws_args) 534 - 535 547 #define AMDKFD_COMMAND_START 0x01 536 - #define AMDKFD_COMMAND_END 0x1F 548 + #define AMDKFD_COMMAND_END 0x1E 537 549 538 550 #endif