mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-27 22:51:31 +00:00
drm imx, i915, amdgpu, panfrost, virtio, etnaviv fixes
-----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJdHthAAAoJEAx081l5xIa+m4wQAJAFm0YimQFznAzVHat2fpCc 61cT27GjT1Zbg3LlO2euIKbJ328VWMndxWqXbM6+BXFh3Cd5uOw39az3q5ihLs8t U1/dWt4UKHirGkbSB+qHan6C6rXPVOGjcuwL7cQxnwB+p7RV+dud36/Eq71sQ7yc vqaiSuEIBkElOQ8TDR92nK/ty1bzmFoky6/UWkVPxq560Yo8B6TlhS+guzdwDE3F DaS2y8Yi0FLowwrWMXpzzjVrxjcb+TzcM7p0iSToZsfXRapBkHa4PUskfbLZA6j8 GSye5wc65WKbX4FxuFEj4koeBMUu5IBP7MrlR1tfouATBhUe5cibW7/MFAoDEQuh /5icw+/1gp1rqjApaA3vHrPzbiBOBOZGhHQqDCtHZXTkbulp1sFLVJdbX02SYK+d kj5tQFxMDdOeGwmZDVNhF13id5go2vmY4vYY+APhiNbQT3ibsh+fejBe5zUVa8U0 iTmeTE7L+SB/5jS9Lcp3S8ZfUwcOTONn2cRcOuPO+38lzx3WE6HaYrR2FUbe7OVU CBFQD1Cl+jDjUJ0W1JPwTrvIbK0aUYhkIzT3pmBMlA6N62SKmuQH+Z1nPJY0THsi RNkTMHgPd7m01zUjOMCjpucbygdKDtPGTLcxd3djZediJhpjwgapy1NySzfotEcp ZkhRs/3ddNFvxibRpz41 =Ipfl -----END PGP SIGNATURE----- Merge tag 'drm-fixes-2019-07-05-1' of git://anongit.freedesktop.org/drm/drm Pull drm fixes from Dave Airlie: "I skipped last week because there wasn't much worth doing, this week got a few more fixes in. amdgpu: - default register value change - runpm regression fix - fan control fix i915: - fix Ironlake regression panfrost: - fix a double free virtio: - fix a locking bug imx: - crtc disable fixes" * tag 'drm-fixes-2019-07-05-1' of git://anongit.freedesktop.org/drm/drm: drm/imx: only send event on crtc disable if kept disabled drm/imx: notify drm core before sending event during crtc disable drm/i915/ringbuffer: EMIT_INVALIDATE *before* switch context drm/amdgpu/gfx9: use reset default for PA_SC_FIFO_SIZE drm/amdgpu: Don't skip display settings in hwmgr_resume() drm/amd/powerplay: use hardware fan control if no powerplay fan table drm/panfrost: Fix a double-free error drm/etnaviv: add missing failure path to destroy suballoc drm/virtio: move drm_connector_update_edid_property() call
This commit is contained in:
commit
3f9c4dc633
10 changed files with 22 additions and 31 deletions
|
@ -1959,25 +1959,6 @@ static void gfx_v9_0_constants_init(struct amdgpu_device *adev)
|
||||||
mutex_unlock(&adev->srbm_mutex);
|
mutex_unlock(&adev->srbm_mutex);
|
||||||
|
|
||||||
gfx_v9_0_init_compute_vmid(adev);
|
gfx_v9_0_init_compute_vmid(adev);
|
||||||
|
|
||||||
mutex_lock(&adev->grbm_idx_mutex);
|
|
||||||
/*
|
|
||||||
* making sure that the following register writes will be broadcasted
|
|
||||||
* to all the shaders
|
|
||||||
*/
|
|
||||||
gfx_v9_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
|
|
||||||
|
|
||||||
WREG32_SOC15(GC, 0, mmPA_SC_FIFO_SIZE,
|
|
||||||
(adev->gfx.config.sc_prim_fifo_size_frontend <<
|
|
||||||
PA_SC_FIFO_SIZE__SC_FRONTEND_PRIM_FIFO_SIZE__SHIFT) |
|
|
||||||
(adev->gfx.config.sc_prim_fifo_size_backend <<
|
|
||||||
PA_SC_FIFO_SIZE__SC_BACKEND_PRIM_FIFO_SIZE__SHIFT) |
|
|
||||||
(adev->gfx.config.sc_hiz_tile_fifo_size <<
|
|
||||||
PA_SC_FIFO_SIZE__SC_HIZ_TILE_FIFO_SIZE__SHIFT) |
|
|
||||||
(adev->gfx.config.sc_earlyz_tile_fifo_size <<
|
|
||||||
PA_SC_FIFO_SIZE__SC_EARLYZ_TILE_FIFO_SIZE__SHIFT));
|
|
||||||
mutex_unlock(&adev->grbm_idx_mutex);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gfx_v9_0_wait_for_rlc_serdes(struct amdgpu_device *adev)
|
static void gfx_v9_0_wait_for_rlc_serdes(struct amdgpu_device *adev)
|
||||||
|
|
|
@ -326,7 +326,7 @@ int hwmgr_resume(struct pp_hwmgr *hwmgr)
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
ret = psm_adjust_power_state_dynamic(hwmgr, true, NULL);
|
ret = psm_adjust_power_state_dynamic(hwmgr, false, NULL);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -916,8 +916,10 @@ static int init_thermal_controller(
|
||||||
PHM_PlatformCaps_ThermalController
|
PHM_PlatformCaps_ThermalController
|
||||||
);
|
);
|
||||||
|
|
||||||
if (0 == powerplay_table->usFanTableOffset)
|
if (0 == powerplay_table->usFanTableOffset) {
|
||||||
|
hwmgr->thermal_controller.use_hw_fan_control = 1;
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
fan_table = (const PPTable_Generic_SubTable_Header *)
|
fan_table = (const PPTable_Generic_SubTable_Header *)
|
||||||
(((unsigned long)powerplay_table) +
|
(((unsigned long)powerplay_table) +
|
||||||
|
|
|
@ -694,6 +694,7 @@ struct pp_thermal_controller_info {
|
||||||
uint8_t ucType;
|
uint8_t ucType;
|
||||||
uint8_t ucI2cLine;
|
uint8_t ucI2cLine;
|
||||||
uint8_t ucI2cAddress;
|
uint8_t ucI2cAddress;
|
||||||
|
uint8_t use_hw_fan_control;
|
||||||
struct pp_fan_info fanInfo;
|
struct pp_fan_info fanInfo;
|
||||||
struct pp_advance_fan_control_parameters advanceFanControlParameters;
|
struct pp_advance_fan_control_parameters advanceFanControlParameters;
|
||||||
};
|
};
|
||||||
|
|
|
@ -2092,6 +2092,10 @@ static int polaris10_thermal_setup_fan_table(struct pp_hwmgr *hwmgr)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* use hardware fan control */
|
||||||
|
if (hwmgr->thermal_controller.use_hw_fan_control)
|
||||||
|
return 0;
|
||||||
|
|
||||||
tmp64 = hwmgr->thermal_controller.advanceFanControlParameters.
|
tmp64 = hwmgr->thermal_controller.advanceFanControlParameters.
|
||||||
usPWMMin * duty100;
|
usPWMMin * duty100;
|
||||||
do_div(tmp64, 10000);
|
do_div(tmp64, 10000);
|
||||||
|
|
|
@ -760,7 +760,7 @@ int etnaviv_gpu_init(struct etnaviv_gpu *gpu)
|
||||||
if (IS_ERR(gpu->cmdbuf_suballoc)) {
|
if (IS_ERR(gpu->cmdbuf_suballoc)) {
|
||||||
dev_err(gpu->dev, "Failed to create cmdbuf suballocator\n");
|
dev_err(gpu->dev, "Failed to create cmdbuf suballocator\n");
|
||||||
ret = PTR_ERR(gpu->cmdbuf_suballoc);
|
ret = PTR_ERR(gpu->cmdbuf_suballoc);
|
||||||
goto fail;
|
goto destroy_iommu;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create buffer: */
|
/* Create buffer: */
|
||||||
|
@ -768,7 +768,7 @@ int etnaviv_gpu_init(struct etnaviv_gpu *gpu)
|
||||||
PAGE_SIZE);
|
PAGE_SIZE);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(gpu->dev, "could not create command buffer\n");
|
dev_err(gpu->dev, "could not create command buffer\n");
|
||||||
goto destroy_iommu;
|
goto destroy_suballoc;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gpu->mmu->version == ETNAVIV_IOMMU_V1 &&
|
if (gpu->mmu->version == ETNAVIV_IOMMU_V1 &&
|
||||||
|
@ -800,6 +800,9 @@ int etnaviv_gpu_init(struct etnaviv_gpu *gpu)
|
||||||
free_buffer:
|
free_buffer:
|
||||||
etnaviv_cmdbuf_free(&gpu->buffer);
|
etnaviv_cmdbuf_free(&gpu->buffer);
|
||||||
gpu->buffer.suballoc = NULL;
|
gpu->buffer.suballoc = NULL;
|
||||||
|
destroy_suballoc:
|
||||||
|
etnaviv_cmdbuf_suballoc_destroy(gpu->cmdbuf_suballoc);
|
||||||
|
gpu->cmdbuf_suballoc = NULL;
|
||||||
destroy_iommu:
|
destroy_iommu:
|
||||||
etnaviv_iommu_destroy(gpu->mmu);
|
etnaviv_iommu_destroy(gpu->mmu);
|
||||||
gpu->mmu = NULL;
|
gpu->mmu = NULL;
|
||||||
|
|
|
@ -1888,12 +1888,12 @@ static int ring_request_alloc(struct i915_request *request)
|
||||||
*/
|
*/
|
||||||
request->reserved_space += LEGACY_REQUEST_SIZE;
|
request->reserved_space += LEGACY_REQUEST_SIZE;
|
||||||
|
|
||||||
ret = switch_context(request);
|
/* Unconditionally invalidate GPU caches and TLBs. */
|
||||||
|
ret = request->engine->emit_flush(request, EMIT_INVALIDATE);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
/* Unconditionally invalidate GPU caches and TLBs. */
|
ret = switch_context(request);
|
||||||
ret = request->engine->emit_flush(request, EMIT_INVALIDATE);
|
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
|
|
@ -91,14 +91,14 @@ static void ipu_crtc_atomic_disable(struct drm_crtc *crtc,
|
||||||
ipu_dc_disable(ipu);
|
ipu_dc_disable(ipu);
|
||||||
ipu_prg_disable(ipu);
|
ipu_prg_disable(ipu);
|
||||||
|
|
||||||
|
drm_crtc_vblank_off(crtc);
|
||||||
|
|
||||||
spin_lock_irq(&crtc->dev->event_lock);
|
spin_lock_irq(&crtc->dev->event_lock);
|
||||||
if (crtc->state->event) {
|
if (crtc->state->event && !crtc->state->active) {
|
||||||
drm_crtc_send_vblank_event(crtc, crtc->state->event);
|
drm_crtc_send_vblank_event(crtc, crtc->state->event);
|
||||||
crtc->state->event = NULL;
|
crtc->state->event = NULL;
|
||||||
}
|
}
|
||||||
spin_unlock_irq(&crtc->dev->event_lock);
|
spin_unlock_irq(&crtc->dev->event_lock);
|
||||||
|
|
||||||
drm_crtc_vblank_off(crtc);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void imx_drm_crtc_reset(struct drm_crtc *crtc)
|
static void imx_drm_crtc_reset(struct drm_crtc *crtc)
|
||||||
|
|
|
@ -63,7 +63,7 @@ static int panfrost_ioctl_create_bo(struct drm_device *dev, void *data,
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_free:
|
err_free:
|
||||||
drm_gem_object_put_unlocked(&shmem->base);
|
drm_gem_handle_delete(file, args->handle);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -619,11 +619,11 @@ static void virtio_gpu_cmd_get_edid_cb(struct virtio_gpu_device *vgdev,
|
||||||
output = vgdev->outputs + scanout;
|
output = vgdev->outputs + scanout;
|
||||||
|
|
||||||
new_edid = drm_do_get_edid(&output->conn, virtio_get_edid_block, resp);
|
new_edid = drm_do_get_edid(&output->conn, virtio_get_edid_block, resp);
|
||||||
|
drm_connector_update_edid_property(&output->conn, new_edid);
|
||||||
|
|
||||||
spin_lock(&vgdev->display_info_lock);
|
spin_lock(&vgdev->display_info_lock);
|
||||||
old_edid = output->edid;
|
old_edid = output->edid;
|
||||||
output->edid = new_edid;
|
output->edid = new_edid;
|
||||||
drm_connector_update_edid_property(&output->conn, output->edid);
|
|
||||||
spin_unlock(&vgdev->display_info_lock);
|
spin_unlock(&vgdev->display_info_lock);
|
||||||
|
|
||||||
kfree(old_edid);
|
kfree(old_edid);
|
||||||
|
|
Loading…
Reference in a new issue