drm fixes for v5.10-rc5
core: - vram helper TTM regression fix amdgpu: - Pageflip fix for navi1x with 5 or 6 displays - Remove experimental flag for Arcturus - Fix regression in atomic commit tail rework i915: - Fix tgl power gating issue - Memory leak fixes - Selftest fixes - Display bpc fix - Fix TGL MOCS for PTE tracking dw-hdmi: - probing fix sun4i: - probing fix -----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJftx+jAAoJEAx081l5xIa+iP0P+gJuMX12yISdXJ4u/VdZCEGO SZ2taoqgpnYtd0SiYUgh436yNOB9KsZZLm/413k3vj4Rx+Dm7Fm9MfTu8cVn63pd qS51CGwTGUOp3E+Zc94qqMWgQqg/oqSA9NeWy7Q/kOP5H2Ic3dBWyjiVUdzVlN55 V7X8ac6rsgOfvRq7f8QxWgEHf9WMM+890euFmTbc2/YK7bbdDZt5eckuJsf1rfuk PJKUQHi2YmtaQoNb16ctOkCLmTeFjK626OpO4zFFDQxElCVSxNnC85CqV2gYUOI5 NqjBrLISDeHB6omBdDp8U08Los7y6j+0C6xL78ZV/OErEbb5h9TvdhOHgPDJS7uf KN/LLcEE/S7gmmYcP6osA4bsBGXumHkR7VuctLwEOc2lXCF6eJs2zc1m69Yo68kD z7+OkCPLZd4nZ2sJoBt4MhA+jGFb4pIyRTlBMDeJUo+i6Hn4eJeE7gJJNYRM6Ief DVBgVQxS4qyN0HGf7QlgpnJhcZ1xW06t4yGPzMO1gCPOt+gzzP2d5KWF9hJaRSwX foSkSwoiEXA6OjZb/uoKxAxbp+292P9au70L2y7mruvScyKBAhUOuNmuF4j9jZQ+ WkHE0YgGfMxbCYugnFizyiW7r9kDjYGUIOMFyron1T8n16CWfDuw5Ih7tAtcEtti QWWRRyF0vZzuS22v2QPB =ZJKB -----END PGP SIGNATURE----- Merge tag 'drm-fixes-2020-11-20-2' of git://anongit.freedesktop.org/drm/drm Pull drm fixes from Dave Airlie: "Weekly fixes pull. This contains some fixes for sun4i/dw-hdmi probing, then amdgpu enables arcturus hw without experimental flag and two other fixes and a group of i915 fixes. It also has a backported from next fix for the warn on reported in ast/drm_gem_vram_helper code in the merge window. There's a separate report which initially looked to be the same problem, but I'm going to chase that up next week a bit more as I don't think the bisect landed anywhere useful. Summary: core: - vram helper TTM regression fix amdgpu: - Pageflip fix for navi1x with 5 or 6 displays - Remove experimental flag for Arcturus - Fix regression in atomic commit tail rework i915: - Fix tgl power gating issue - Memory leak fixes - Selftest fixes - Display bpc fix - Fix TGL MOCS for PTE tracking dw-hdmi: - probing fix sun4i: - probing fix" * tag 'drm-fixes-2020-11-20-2' of git://anongit.freedesktop.org/drm/drm: drm/i915/gt: Fixup tgl mocs for PTE tracking drm/vram-helper: Fix use of top-down placement drm/i915/gt: Remember to free the virtual breadcrumbs drm/i915: Handle max_bpc==16 drm/amd/display: Always get CRTC updated constant values inside commit tail drm/sun4i: backend: Fix probe failure with multiple backends drm/sun4i: dw-hdmi: fix error return code in sun8i_dw_hdmi_bind() drm/i915/selftests: Fix wrong return value of perf_request_latency() drm/i915/selftests: Fix wrong return value of perf_series_engines() drm/i915: Avoid memory leak with more than 16 workarounds on a list drm/i915/tgl: Fix Media power gate sequence. drm/amdgpu: remove experimental flag from arcturus drm/amd/display: Add missing pflip irq for dcn2.0 drm/i915/gvt: return error when failing to take the module reference drm: bridge: dw-hdmi: Avoid resetting force in the detect function drm/i915/gvt: Set ENHANCED_FRAME_CAP bit drm/i915/gvt: Temporarily disable vfio_edid for BXT/APL
This commit is contained in:
Коммит
46cbc18ed8
|
@ -1055,10 +1055,10 @@ static const struct pci_device_id pciidlist[] = {
|
|||
{0x1002, 0x15dd, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RAVEN|AMD_IS_APU},
|
||||
{0x1002, 0x15d8, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RAVEN|AMD_IS_APU},
|
||||
/* Arcturus */
|
||||
{0x1002, 0x738C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARCTURUS|AMD_EXP_HW_SUPPORT},
|
||||
{0x1002, 0x7388, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARCTURUS|AMD_EXP_HW_SUPPORT},
|
||||
{0x1002, 0x738E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARCTURUS|AMD_EXP_HW_SUPPORT},
|
||||
{0x1002, 0x7390, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARCTURUS|AMD_EXP_HW_SUPPORT},
|
||||
{0x1002, 0x738C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARCTURUS},
|
||||
{0x1002, 0x7388, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARCTURUS},
|
||||
{0x1002, 0x738E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARCTURUS},
|
||||
{0x1002, 0x7390, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARCTURUS},
|
||||
/* Navi10 */
|
||||
{0x1002, 0x7310, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVI10},
|
||||
{0x1002, 0x7312, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVI10},
|
||||
|
|
|
@ -7506,7 +7506,6 @@ static void amdgpu_dm_atomic_commit_tail(struct drm_atomic_state *state)
|
|||
bool mode_set_reset_required = false;
|
||||
|
||||
drm_atomic_helper_update_legacy_modeset_state(dev, state);
|
||||
drm_atomic_helper_calc_timestamping_constants(state);
|
||||
|
||||
dm_state = dm_atomic_get_new_state(state);
|
||||
if (dm_state && dm_state->context) {
|
||||
|
@ -7533,6 +7532,8 @@ static void amdgpu_dm_atomic_commit_tail(struct drm_atomic_state *state)
|
|||
}
|
||||
}
|
||||
|
||||
drm_atomic_helper_calc_timestamping_constants(state);
|
||||
|
||||
/* update changed items */
|
||||
for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) {
|
||||
struct amdgpu_crtc *acrtc = to_amdgpu_crtc(crtc);
|
||||
|
|
|
@ -299,8 +299,8 @@ irq_source_info_dcn20[DAL_IRQ_SOURCES_NUMBER] = {
|
|||
pflip_int_entry(1),
|
||||
pflip_int_entry(2),
|
||||
pflip_int_entry(3),
|
||||
[DC_IRQ_SOURCE_PFLIP5] = dummy_irq_entry(),
|
||||
[DC_IRQ_SOURCE_PFLIP6] = dummy_irq_entry(),
|
||||
pflip_int_entry(4),
|
||||
pflip_int_entry(5),
|
||||
[DC_IRQ_SOURCE_PFLIP_UNDERLAY0] = dummy_irq_entry(),
|
||||
gpio_pad_int_entry(0),
|
||||
gpio_pad_int_entry(1),
|
||||
|
|
|
@ -2327,12 +2327,6 @@ static enum drm_connector_status dw_hdmi_detect(struct dw_hdmi *hdmi)
|
|||
{
|
||||
enum drm_connector_status result;
|
||||
|
||||
mutex_lock(&hdmi->mutex);
|
||||
hdmi->force = DRM_FORCE_UNSPECIFIED;
|
||||
dw_hdmi_update_power(hdmi);
|
||||
dw_hdmi_update_phy_mask(hdmi);
|
||||
mutex_unlock(&hdmi->mutex);
|
||||
|
||||
result = hdmi->phy.ops->read_hpd(hdmi, hdmi->phy.data);
|
||||
|
||||
mutex_lock(&hdmi->mutex);
|
||||
|
|
|
@ -140,7 +140,7 @@ static void drm_gem_vram_placement(struct drm_gem_vram_object *gbo,
|
|||
unsigned int c = 0;
|
||||
|
||||
if (pl_flag & DRM_GEM_VRAM_PL_FLAG_TOPDOWN)
|
||||
pl_flag = TTM_PL_FLAG_TOPDOWN;
|
||||
invariant_flags = TTM_PL_FLAG_TOPDOWN;
|
||||
|
||||
gbo->placement.placement = gbo->placements;
|
||||
gbo->placement.busy_placement = gbo->placements;
|
||||
|
|
|
@ -12878,10 +12878,11 @@ compute_sink_pipe_bpp(const struct drm_connector_state *conn_state,
|
|||
case 10 ... 11:
|
||||
bpp = 10 * 3;
|
||||
break;
|
||||
case 12:
|
||||
case 12 ... 16:
|
||||
bpp = 12 * 3;
|
||||
break;
|
||||
default:
|
||||
MISSING_CASE(conn_state->max_bpc);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
|
|
@ -5457,6 +5457,7 @@ static void virtual_context_destroy(struct kref *kref)
|
|||
__execlists_context_fini(&ve->context);
|
||||
intel_context_fini(&ve->context);
|
||||
|
||||
intel_breadcrumbs_free(ve->base.breadcrumbs);
|
||||
intel_engine_free_request_pool(&ve->base);
|
||||
|
||||
kfree(ve->bonds);
|
||||
|
|
|
@ -243,8 +243,9 @@ static const struct drm_i915_mocs_entry tgl_mocs_table[] = {
|
|||
* only, __init_mocs_table() take care to program unused index with
|
||||
* this entry.
|
||||
*/
|
||||
MOCS_ENTRY(1, LE_3_WB | LE_TC_1_LLC | LE_LRUM(3),
|
||||
L3_3_WB),
|
||||
MOCS_ENTRY(I915_MOCS_PTE,
|
||||
LE_0_PAGETABLE | LE_TC_0_PAGETABLE,
|
||||
L3_1_UC),
|
||||
GEN11_MOCS_ENTRIES,
|
||||
|
||||
/* Implicitly enable L1 - HDC:L1 + L3 + LLC */
|
||||
|
|
|
@ -56,9 +56,12 @@ static inline void set(struct intel_uncore *uncore, i915_reg_t reg, u32 val)
|
|||
|
||||
static void gen11_rc6_enable(struct intel_rc6 *rc6)
|
||||
{
|
||||
struct intel_uncore *uncore = rc6_to_uncore(rc6);
|
||||
struct intel_gt *gt = rc6_to_gt(rc6);
|
||||
struct intel_uncore *uncore = gt->uncore;
|
||||
struct intel_engine_cs *engine;
|
||||
enum intel_engine_id id;
|
||||
u32 pg_enable;
|
||||
int i;
|
||||
|
||||
/* 2b: Program RC6 thresholds.*/
|
||||
set(uncore, GEN6_RC6_WAKE_RATE_LIMIT, 54 << 16 | 85);
|
||||
|
@ -102,10 +105,19 @@ static void gen11_rc6_enable(struct intel_rc6 *rc6)
|
|||
GEN6_RC_CTL_RC6_ENABLE |
|
||||
GEN6_RC_CTL_EI_MODE(1);
|
||||
|
||||
set(uncore, GEN9_PG_ENABLE,
|
||||
GEN9_RENDER_PG_ENABLE |
|
||||
GEN9_MEDIA_PG_ENABLE |
|
||||
GEN11_MEDIA_SAMPLER_PG_ENABLE);
|
||||
pg_enable =
|
||||
GEN9_RENDER_PG_ENABLE |
|
||||
GEN9_MEDIA_PG_ENABLE |
|
||||
GEN11_MEDIA_SAMPLER_PG_ENABLE;
|
||||
|
||||
if (INTEL_GEN(gt->i915) >= 12) {
|
||||
for (i = 0; i < I915_MAX_VCS; i++)
|
||||
if (HAS_ENGINE(gt, _VCS(i)))
|
||||
pg_enable |= (VDN_HCP_POWERGATE_ENABLE(i) |
|
||||
VDN_MFX_POWERGATE_ENABLE(i));
|
||||
}
|
||||
|
||||
set(uncore, GEN9_PG_ENABLE, pg_enable);
|
||||
}
|
||||
|
||||
static void gen9_rc6_enable(struct intel_rc6 *rc6)
|
||||
|
|
|
@ -131,8 +131,10 @@ static void _wa_add(struct i915_wa_list *wal, const struct i915_wa *wa)
|
|||
return;
|
||||
}
|
||||
|
||||
if (wal->list)
|
||||
if (wal->list) {
|
||||
memcpy(list, wal->list, sizeof(*wa) * wal->count);
|
||||
kfree(wal->list);
|
||||
}
|
||||
|
||||
wal->list = list;
|
||||
}
|
||||
|
|
|
@ -164,7 +164,7 @@ static unsigned char virtual_dp_monitor_edid[GVT_EDID_NUM][EDID_SIZE] = {
|
|||
|
||||
/* let the virtual display supports DP1.2 */
|
||||
static u8 dpcd_fix_data[DPCD_HEADER_SIZE] = {
|
||||
0x12, 0x014, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
0x12, 0x014, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
static void emulate_monitor_status_change(struct intel_vgpu *vgpu)
|
||||
|
|
|
@ -829,8 +829,10 @@ static int intel_vgpu_open(struct mdev_device *mdev)
|
|||
/* Take a module reference as mdev core doesn't take
|
||||
* a reference for vendor driver.
|
||||
*/
|
||||
if (!try_module_get(THIS_MODULE))
|
||||
if (!try_module_get(THIS_MODULE)) {
|
||||
ret = -ENODEV;
|
||||
goto undo_group;
|
||||
}
|
||||
|
||||
ret = kvmgt_guest_init(mdev);
|
||||
if (ret)
|
||||
|
|
|
@ -439,7 +439,8 @@ static struct intel_vgpu *__intel_gvt_create_vgpu(struct intel_gvt *gvt,
|
|||
|
||||
if (IS_BROADWELL(dev_priv))
|
||||
ret = intel_gvt_hypervisor_set_edid(vgpu, PORT_B);
|
||||
else
|
||||
/* FixMe: Re-enable APL/BXT once vfio_edid enabled */
|
||||
else if (!IS_BROXTON(dev_priv))
|
||||
ret = intel_gvt_hypervisor_set_edid(vgpu, PORT_D);
|
||||
if (ret)
|
||||
goto out_clean_sched_policy;
|
||||
|
|
|
@ -8971,10 +8971,6 @@ enum {
|
|||
#define GEN9_PWRGT_MEDIA_STATUS_MASK (1 << 0)
|
||||
#define GEN9_PWRGT_RENDER_STATUS_MASK (1 << 1)
|
||||
|
||||
#define POWERGATE_ENABLE _MMIO(0xa210)
|
||||
#define VDN_HCP_POWERGATE_ENABLE(n) BIT(((n) * 2) + 3)
|
||||
#define VDN_MFX_POWERGATE_ENABLE(n) BIT(((n) * 2) + 4)
|
||||
|
||||
#define GTFIFODBG _MMIO(0x120000)
|
||||
#define GT_FIFO_SBDEDICATE_FREE_ENTRY_CHV (0x1f << 20)
|
||||
#define GT_FIFO_FREE_ENTRIES_CHV (0x7f << 13)
|
||||
|
@ -9114,9 +9110,11 @@ enum {
|
|||
#define GEN9_MEDIA_PG_IDLE_HYSTERESIS _MMIO(0xA0C4)
|
||||
#define GEN9_RENDER_PG_IDLE_HYSTERESIS _MMIO(0xA0C8)
|
||||
#define GEN9_PG_ENABLE _MMIO(0xA210)
|
||||
#define GEN9_RENDER_PG_ENABLE REG_BIT(0)
|
||||
#define GEN9_MEDIA_PG_ENABLE REG_BIT(1)
|
||||
#define GEN11_MEDIA_SAMPLER_PG_ENABLE REG_BIT(2)
|
||||
#define GEN9_RENDER_PG_ENABLE REG_BIT(0)
|
||||
#define GEN9_MEDIA_PG_ENABLE REG_BIT(1)
|
||||
#define GEN11_MEDIA_SAMPLER_PG_ENABLE REG_BIT(2)
|
||||
#define VDN_HCP_POWERGATE_ENABLE(n) REG_BIT(3 + 2 * (n))
|
||||
#define VDN_MFX_POWERGATE_ENABLE(n) REG_BIT(4 + 2 * (n))
|
||||
#define GEN8_PUSHBUS_CONTROL _MMIO(0xA248)
|
||||
#define GEN8_PUSHBUS_ENABLE _MMIO(0xA250)
|
||||
#define GEN8_PUSHBUS_SHIFT _MMIO(0xA25C)
|
||||
|
|
|
@ -7118,23 +7118,10 @@ static void icl_init_clock_gating(struct drm_i915_private *dev_priv)
|
|||
|
||||
static void tgl_init_clock_gating(struct drm_i915_private *dev_priv)
|
||||
{
|
||||
u32 vd_pg_enable = 0;
|
||||
unsigned int i;
|
||||
|
||||
/* Wa_1409120013:tgl */
|
||||
I915_WRITE(ILK_DPFC_CHICKEN,
|
||||
ILK_DPFC_CHICKEN_COMP_DUMMY_PIXEL);
|
||||
|
||||
/* This is not a WA. Enable VD HCP & MFX_ENC powergate */
|
||||
for (i = 0; i < I915_MAX_VCS; i++) {
|
||||
if (HAS_ENGINE(&dev_priv->gt, _VCS(i)))
|
||||
vd_pg_enable |= VDN_HCP_POWERGATE_ENABLE(i) |
|
||||
VDN_MFX_POWERGATE_ENABLE(i);
|
||||
}
|
||||
|
||||
I915_WRITE(POWERGATE_ENABLE,
|
||||
I915_READ(POWERGATE_ENABLE) | vd_pg_enable);
|
||||
|
||||
/* Wa_1409825376:tgl (pre-prod)*/
|
||||
if (IS_TGL_DISP_REVID(dev_priv, TGL_REVID_A0, TGL_REVID_B1))
|
||||
I915_WRITE(GEN9_CLKGATE_DIS_3, I915_READ(GEN9_CLKGATE_DIS_3) |
|
||||
|
|
|
@ -2293,8 +2293,10 @@ static int perf_request_latency(void *arg)
|
|||
struct intel_context *ce;
|
||||
|
||||
ce = intel_context_create(engine);
|
||||
if (IS_ERR(ce))
|
||||
if (IS_ERR(ce)) {
|
||||
err = PTR_ERR(ce);
|
||||
goto out;
|
||||
}
|
||||
|
||||
err = intel_context_pin(ce);
|
||||
if (err) {
|
||||
|
@ -2467,8 +2469,10 @@ static int perf_series_engines(void *arg)
|
|||
struct intel_context *ce;
|
||||
|
||||
ce = intel_context_create(engine);
|
||||
if (IS_ERR(ce))
|
||||
if (IS_ERR(ce)) {
|
||||
err = PTR_ERR(ce);
|
||||
goto out;
|
||||
}
|
||||
|
||||
err = intel_context_pin(ce);
|
||||
if (err) {
|
||||
|
|
|
@ -814,9 +814,15 @@ static int sun4i_backend_bind(struct device *dev, struct device *master,
|
|||
*
|
||||
* XXX(hch): this has no business in a driver and needs to move
|
||||
* to the device tree.
|
||||
*
|
||||
* If we have two subsequent calls to dma_direct_set_offset
|
||||
* returns -EINVAL. Unfortunately, this happens when we have two
|
||||
* backends in the system, and will result in the driver
|
||||
* reporting an error while it has been setup properly before.
|
||||
* Ignore EINVAL, but it should really be removed eventually.
|
||||
*/
|
||||
ret = dma_direct_set_offset(drm->dev, PHYS_OFFSET, 0, SZ_4G);
|
||||
if (ret)
|
||||
if (ret && ret != -EINVAL)
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -208,6 +208,7 @@ static int sun8i_dw_hdmi_bind(struct device *dev, struct device *master,
|
|||
phy_node = of_parse_phandle(dev->of_node, "phys", 0);
|
||||
if (!phy_node) {
|
||||
dev_err(dev, "Can't found PHY phandle\n");
|
||||
ret = -EINVAL;
|
||||
goto err_disable_clk_tmds;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче