提交 6600f9d5 编写于 作者: D Dave Airlie

Merge tag 'drm-intel-fixes-2020-11-19' of...

Merge tag 'drm-intel-fixes-2020-11-19' of git://anongit.freedesktop.org/drm/drm-intel into drm-fixes

- Fix tgl power gating issue (Rodrigo)
- Memory leak fixes (Tvrtko, Chris)
- Selftest fixes (Zhang)
- Display bpc fix (Ville)
- Fix TGL MOCS for PTE tracking (Chris)

GVT Fixes: It temporarily disables VFIO edid
feature on BXT/APL until its virtual display is really fixed to make
it work properly. And fixes for DPCD 1.2 and error return in taking
module reference.
Signed-off-by: NDave Airlie <airlied@redhat.com>

From: Rodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20201119203417.GA1795798@intel.com
...@@ -12878,10 +12878,11 @@ compute_sink_pipe_bpp(const struct drm_connector_state *conn_state, ...@@ -12878,10 +12878,11 @@ compute_sink_pipe_bpp(const struct drm_connector_state *conn_state,
case 10 ... 11: case 10 ... 11:
bpp = 10 * 3; bpp = 10 * 3;
break; break;
case 12: case 12 ... 16:
bpp = 12 * 3; bpp = 12 * 3;
break; break;
default: default:
MISSING_CASE(conn_state->max_bpc);
return -EINVAL; return -EINVAL;
} }
......
...@@ -5457,6 +5457,7 @@ static void virtual_context_destroy(struct kref *kref) ...@@ -5457,6 +5457,7 @@ static void virtual_context_destroy(struct kref *kref)
__execlists_context_fini(&ve->context); __execlists_context_fini(&ve->context);
intel_context_fini(&ve->context); intel_context_fini(&ve->context);
intel_breadcrumbs_free(ve->base.breadcrumbs);
intel_engine_free_request_pool(&ve->base); intel_engine_free_request_pool(&ve->base);
kfree(ve->bonds); kfree(ve->bonds);
......
...@@ -243,8 +243,9 @@ static const struct drm_i915_mocs_entry tgl_mocs_table[] = { ...@@ -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 * only, __init_mocs_table() take care to program unused index with
* this entry. * this entry.
*/ */
MOCS_ENTRY(1, LE_3_WB | LE_TC_1_LLC | LE_LRUM(3), MOCS_ENTRY(I915_MOCS_PTE,
L3_3_WB), LE_0_PAGETABLE | LE_TC_0_PAGETABLE,
L3_1_UC),
GEN11_MOCS_ENTRIES, GEN11_MOCS_ENTRIES,
/* Implicitly enable L1 - HDC:L1 + L3 + LLC */ /* 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) ...@@ -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) 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; struct intel_engine_cs *engine;
enum intel_engine_id id; enum intel_engine_id id;
u32 pg_enable;
int i;
/* 2b: Program RC6 thresholds.*/ /* 2b: Program RC6 thresholds.*/
set(uncore, GEN6_RC6_WAKE_RATE_LIMIT, 54 << 16 | 85); set(uncore, GEN6_RC6_WAKE_RATE_LIMIT, 54 << 16 | 85);
...@@ -102,10 +105,19 @@ static void gen11_rc6_enable(struct intel_rc6 *rc6) ...@@ -102,10 +105,19 @@ static void gen11_rc6_enable(struct intel_rc6 *rc6)
GEN6_RC_CTL_RC6_ENABLE | GEN6_RC_CTL_RC6_ENABLE |
GEN6_RC_CTL_EI_MODE(1); GEN6_RC_CTL_EI_MODE(1);
set(uncore, GEN9_PG_ENABLE, pg_enable =
GEN9_RENDER_PG_ENABLE | GEN9_RENDER_PG_ENABLE |
GEN9_MEDIA_PG_ENABLE | GEN9_MEDIA_PG_ENABLE |
GEN11_MEDIA_SAMPLER_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) 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) ...@@ -131,8 +131,10 @@ static void _wa_add(struct i915_wa_list *wal, const struct i915_wa *wa)
return; return;
} }
if (wal->list) if (wal->list) {
memcpy(list, wal->list, sizeof(*wa) * wal->count); memcpy(list, wal->list, sizeof(*wa) * wal->count);
kfree(wal->list);
}
wal->list = list; wal->list = list;
} }
......
...@@ -164,7 +164,7 @@ static unsigned char virtual_dp_monitor_edid[GVT_EDID_NUM][EDID_SIZE] = { ...@@ -164,7 +164,7 @@ static unsigned char virtual_dp_monitor_edid[GVT_EDID_NUM][EDID_SIZE] = {
/* let the virtual display supports DP1.2 */ /* let the virtual display supports DP1.2 */
static u8 dpcd_fix_data[DPCD_HEADER_SIZE] = { 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) static void emulate_monitor_status_change(struct intel_vgpu *vgpu)
......
...@@ -829,8 +829,10 @@ static int intel_vgpu_open(struct mdev_device *mdev) ...@@ -829,8 +829,10 @@ static int intel_vgpu_open(struct mdev_device *mdev)
/* Take a module reference as mdev core doesn't take /* Take a module reference as mdev core doesn't take
* a reference for vendor driver. * a reference for vendor driver.
*/ */
if (!try_module_get(THIS_MODULE)) if (!try_module_get(THIS_MODULE)) {
ret = -ENODEV;
goto undo_group; goto undo_group;
}
ret = kvmgt_guest_init(mdev); ret = kvmgt_guest_init(mdev);
if (ret) if (ret)
......
...@@ -439,7 +439,8 @@ static struct intel_vgpu *__intel_gvt_create_vgpu(struct intel_gvt *gvt, ...@@ -439,7 +439,8 @@ static struct intel_vgpu *__intel_gvt_create_vgpu(struct intel_gvt *gvt,
if (IS_BROADWELL(dev_priv)) if (IS_BROADWELL(dev_priv))
ret = intel_gvt_hypervisor_set_edid(vgpu, PORT_B); 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); ret = intel_gvt_hypervisor_set_edid(vgpu, PORT_D);
if (ret) if (ret)
goto out_clean_sched_policy; goto out_clean_sched_policy;
......
...@@ -8971,10 +8971,6 @@ enum { ...@@ -8971,10 +8971,6 @@ enum {
#define GEN9_PWRGT_MEDIA_STATUS_MASK (1 << 0) #define GEN9_PWRGT_MEDIA_STATUS_MASK (1 << 0)
#define GEN9_PWRGT_RENDER_STATUS_MASK (1 << 1) #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 GTFIFODBG _MMIO(0x120000)
#define GT_FIFO_SBDEDICATE_FREE_ENTRY_CHV (0x1f << 20) #define GT_FIFO_SBDEDICATE_FREE_ENTRY_CHV (0x1f << 20)
#define GT_FIFO_FREE_ENTRIES_CHV (0x7f << 13) #define GT_FIFO_FREE_ENTRIES_CHV (0x7f << 13)
...@@ -9114,9 +9110,11 @@ enum { ...@@ -9114,9 +9110,11 @@ enum {
#define GEN9_MEDIA_PG_IDLE_HYSTERESIS _MMIO(0xA0C4) #define GEN9_MEDIA_PG_IDLE_HYSTERESIS _MMIO(0xA0C4)
#define GEN9_RENDER_PG_IDLE_HYSTERESIS _MMIO(0xA0C8) #define GEN9_RENDER_PG_IDLE_HYSTERESIS _MMIO(0xA0C8)
#define GEN9_PG_ENABLE _MMIO(0xA210) #define GEN9_PG_ENABLE _MMIO(0xA210)
#define GEN9_RENDER_PG_ENABLE REG_BIT(0) #define GEN9_RENDER_PG_ENABLE REG_BIT(0)
#define GEN9_MEDIA_PG_ENABLE REG_BIT(1) #define GEN9_MEDIA_PG_ENABLE REG_BIT(1)
#define GEN11_MEDIA_SAMPLER_PG_ENABLE REG_BIT(2) #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_CONTROL _MMIO(0xA248)
#define GEN8_PUSHBUS_ENABLE _MMIO(0xA250) #define GEN8_PUSHBUS_ENABLE _MMIO(0xA250)
#define GEN8_PUSHBUS_SHIFT _MMIO(0xA25C) #define GEN8_PUSHBUS_SHIFT _MMIO(0xA25C)
......
...@@ -7118,23 +7118,10 @@ static void icl_init_clock_gating(struct drm_i915_private *dev_priv) ...@@ -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) static void tgl_init_clock_gating(struct drm_i915_private *dev_priv)
{ {
u32 vd_pg_enable = 0;
unsigned int i;
/* Wa_1409120013:tgl */ /* Wa_1409120013:tgl */
I915_WRITE(ILK_DPFC_CHICKEN, I915_WRITE(ILK_DPFC_CHICKEN,
ILK_DPFC_CHICKEN_COMP_DUMMY_PIXEL); 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)*/ /* Wa_1409825376:tgl (pre-prod)*/
if (IS_TGL_DISP_REVID(dev_priv, TGL_REVID_A0, TGL_REVID_B1)) 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) | I915_WRITE(GEN9_CLKGATE_DIS_3, I915_READ(GEN9_CLKGATE_DIS_3) |
......
...@@ -2293,8 +2293,10 @@ static int perf_request_latency(void *arg) ...@@ -2293,8 +2293,10 @@ static int perf_request_latency(void *arg)
struct intel_context *ce; struct intel_context *ce;
ce = intel_context_create(engine); ce = intel_context_create(engine);
if (IS_ERR(ce)) if (IS_ERR(ce)) {
err = PTR_ERR(ce);
goto out; goto out;
}
err = intel_context_pin(ce); err = intel_context_pin(ce);
if (err) { if (err) {
...@@ -2467,8 +2469,10 @@ static int perf_series_engines(void *arg) ...@@ -2467,8 +2469,10 @@ static int perf_series_engines(void *arg)
struct intel_context *ce; struct intel_context *ce;
ce = intel_context_create(engine); ce = intel_context_create(engine);
if (IS_ERR(ce)) if (IS_ERR(ce)) {
err = PTR_ERR(ce);
goto out; goto out;
}
err = intel_context_pin(ce); err = intel_context_pin(ce);
if (err) { if (err) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册