aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2017-10-28 13:50:38 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2017-10-28 13:50:38 -0400
commitb35f0ca74f055cc322fcbc6ec8c31cfb8dad892f (patch)
treef5769d1bc2e96d755d212b9f68ffdb376bde45cf
parent5345da892c0771ac1276283a29ba4bcd7ec426df (diff)
parentce485df43dc286f3ad96f9992b22e3974d051c44 (diff)
Merge tag 'drm-fixes-for-v4.14-rc7' of git://people.freedesktop.org/~airlied/linux
Pull drm fixes from Dave Airlie: "Two amd fixes, one i915 core and a few i915 GVT fixes, things seem fairly quiet" * tag 'drm-fixes-for-v4.14-rc7' of git://people.freedesktop.org/~airlied/linux: drm/i915/gvt: Adding ACTHD mmio read handler drm/i915/gvt: Extract mmio_read_from_hw() common function drm/i915/gvt: Refine MMIO_RING_F() drm/i915/gvt: properly check per_ctx bb valid state drm/i915/perf: fix perf enable/disable ioctls with 32bits userspace drm/amd/amdgpu: Remove workaround check for UVD6 on APUs drm/amd/powerplay: fix uninitialized variable
-rw-r--r--drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c16
-rw-r--r--drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c6
-rw-r--r--drivers/gpu/drm/i915/gvt/cmd_parser.c3
-rw-r--r--drivers/gpu/drm/i915/gvt/execlist.c3
-rw-r--r--drivers/gpu/drm/i915/gvt/handlers.c70
-rw-r--r--drivers/gpu/drm/i915/gvt/reg.h3
-rw-r--r--drivers/gpu/drm/i915/gvt/scheduler.h1
-rw-r--r--drivers/gpu/drm/i915/i915_perf.c4
8 files changed, 27 insertions, 79 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
index 31db356476f8..430a6b4dfac9 100644
--- a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
@@ -225,11 +225,7 @@ static int uvd_v6_0_suspend(void *handle)
225 if (r) 225 if (r)
226 return r; 226 return r;
227 227
228 /* Skip this for APU for now */ 228 return amdgpu_uvd_suspend(adev);
229 if (!(adev->flags & AMD_IS_APU))
230 r = amdgpu_uvd_suspend(adev);
231
232 return r;
233} 229}
234 230
235static int uvd_v6_0_resume(void *handle) 231static int uvd_v6_0_resume(void *handle)
@@ -237,12 +233,10 @@ static int uvd_v6_0_resume(void *handle)
237 int r; 233 int r;
238 struct amdgpu_device *adev = (struct amdgpu_device *)handle; 234 struct amdgpu_device *adev = (struct amdgpu_device *)handle;
239 235
240 /* Skip this for APU for now */ 236 r = amdgpu_uvd_resume(adev);
241 if (!(adev->flags & AMD_IS_APU)) { 237 if (r)
242 r = amdgpu_uvd_resume(adev); 238 return r;
243 if (r) 239
244 return r;
245 }
246 return uvd_v6_0_hw_init(adev); 240 return uvd_v6_0_hw_init(adev);
247} 241}
248 242
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c
index c2743233ba10..b526f49be65d 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c
@@ -830,7 +830,7 @@ uint32_t smu7_get_xclk(struct pp_hwmgr *hwmgr)
830{ 830{
831 uint32_t reference_clock, tmp; 831 uint32_t reference_clock, tmp;
832 struct cgs_display_info info = {0}; 832 struct cgs_display_info info = {0};
833 struct cgs_mode_info mode_info; 833 struct cgs_mode_info mode_info = {0};
834 834
835 info.mode_info = &mode_info; 835 info.mode_info = &mode_info;
836 836
@@ -3948,10 +3948,9 @@ static int smu7_program_display_gap(struct pp_hwmgr *hwmgr)
3948 uint32_t ref_clock; 3948 uint32_t ref_clock;
3949 uint32_t refresh_rate = 0; 3949 uint32_t refresh_rate = 0;
3950 struct cgs_display_info info = {0}; 3950 struct cgs_display_info info = {0};
3951 struct cgs_mode_info mode_info; 3951 struct cgs_mode_info mode_info = {0};
3952 3952
3953 info.mode_info = &mode_info; 3953 info.mode_info = &mode_info;
3954
3955 cgs_get_active_displays_info(hwmgr->device, &info); 3954 cgs_get_active_displays_info(hwmgr->device, &info);
3956 num_active_displays = info.display_count; 3955 num_active_displays = info.display_count;
3957 3956
@@ -3967,6 +3966,7 @@ static int smu7_program_display_gap(struct pp_hwmgr *hwmgr)
3967 frame_time_in_us = 1000000 / refresh_rate; 3966 frame_time_in_us = 1000000 / refresh_rate;
3968 3967
3969 pre_vbi_time_in_us = frame_time_in_us - 200 - mode_info.vblank_time_us; 3968 pre_vbi_time_in_us = frame_time_in_us - 200 - mode_info.vblank_time_us;
3969
3970 data->frame_time_x2 = frame_time_in_us * 2 / 100; 3970 data->frame_time_x2 = frame_time_in_us * 2 / 100;
3971 3971
3972 display_gap2 = pre_vbi_time_in_us * (ref_clock / 100); 3972 display_gap2 = pre_vbi_time_in_us * (ref_clock / 100);
diff --git a/drivers/gpu/drm/i915/gvt/cmd_parser.c b/drivers/gpu/drm/i915/gvt/cmd_parser.c
index 21c36e256884..d4726a3358a4 100644
--- a/drivers/gpu/drm/i915/gvt/cmd_parser.c
+++ b/drivers/gpu/drm/i915/gvt/cmd_parser.c
@@ -2723,6 +2723,9 @@ static int combine_wa_ctx(struct intel_shadow_wa_ctx *wa_ctx)
2723 uint32_t per_ctx_start[CACHELINE_DWORDS] = {0}; 2723 uint32_t per_ctx_start[CACHELINE_DWORDS] = {0};
2724 unsigned char *bb_start_sva; 2724 unsigned char *bb_start_sva;
2725 2725
2726 if (!wa_ctx->per_ctx.valid)
2727 return 0;
2728
2726 per_ctx_start[0] = 0x18800001; 2729 per_ctx_start[0] = 0x18800001;
2727 per_ctx_start[1] = wa_ctx->per_ctx.guest_gma; 2730 per_ctx_start[1] = wa_ctx->per_ctx.guest_gma;
2728 2731
diff --git a/drivers/gpu/drm/i915/gvt/execlist.c b/drivers/gpu/drm/i915/gvt/execlist.c
index 91b4300f3b39..e5320b4eb698 100644
--- a/drivers/gpu/drm/i915/gvt/execlist.c
+++ b/drivers/gpu/drm/i915/gvt/execlist.c
@@ -701,8 +701,7 @@ static int submit_context(struct intel_vgpu *vgpu, int ring_id,
701 CACHELINE_BYTES; 701 CACHELINE_BYTES;
702 workload->wa_ctx.per_ctx.guest_gma = 702 workload->wa_ctx.per_ctx.guest_gma =
703 per_ctx & PER_CTX_ADDR_MASK; 703 per_ctx & PER_CTX_ADDR_MASK;
704 704 workload->wa_ctx.per_ctx.valid = per_ctx & 1;
705 WARN_ON(workload->wa_ctx.indirect_ctx.size && !(per_ctx & 0x1));
706 } 705 }
707 706
708 if (emulate_schedule_in) 707 if (emulate_schedule_in)
diff --git a/drivers/gpu/drm/i915/gvt/handlers.c b/drivers/gpu/drm/i915/gvt/handlers.c
index 2294466dd415..a5bed2e71b92 100644
--- a/drivers/gpu/drm/i915/gvt/handlers.c
+++ b/drivers/gpu/drm/i915/gvt/handlers.c
@@ -1429,18 +1429,7 @@ static int skl_lcpll_write(struct intel_vgpu *vgpu, unsigned int offset,
1429 return 0; 1429 return 0;
1430} 1430}
1431 1431
1432static int ring_timestamp_mmio_read(struct intel_vgpu *vgpu, 1432static int mmio_read_from_hw(struct intel_vgpu *vgpu,
1433 unsigned int offset, void *p_data, unsigned int bytes)
1434{
1435 struct drm_i915_private *dev_priv = vgpu->gvt->dev_priv;
1436
1437 mmio_hw_access_pre(dev_priv);
1438 vgpu_vreg(vgpu, offset) = I915_READ(_MMIO(offset));
1439 mmio_hw_access_post(dev_priv);
1440 return intel_vgpu_default_mmio_read(vgpu, offset, p_data, bytes);
1441}
1442
1443static int instdone_mmio_read(struct intel_vgpu *vgpu,
1444 unsigned int offset, void *p_data, unsigned int bytes) 1433 unsigned int offset, void *p_data, unsigned int bytes)
1445{ 1434{
1446 struct drm_i915_private *dev_priv = vgpu->gvt->dev_priv; 1435 struct drm_i915_private *dev_priv = vgpu->gvt->dev_priv;
@@ -1589,6 +1578,8 @@ static int ring_reset_ctl_write(struct intel_vgpu *vgpu,
1589 MMIO_F(prefix(BLT_RING_BASE), s, f, am, rm, d, r, w); \ 1578 MMIO_F(prefix(BLT_RING_BASE), s, f, am, rm, d, r, w); \
1590 MMIO_F(prefix(GEN6_BSD_RING_BASE), s, f, am, rm, d, r, w); \ 1579 MMIO_F(prefix(GEN6_BSD_RING_BASE), s, f, am, rm, d, r, w); \
1591 MMIO_F(prefix(VEBOX_RING_BASE), s, f, am, rm, d, r, w); \ 1580 MMIO_F(prefix(VEBOX_RING_BASE), s, f, am, rm, d, r, w); \
1581 if (HAS_BSD2(dev_priv)) \
1582 MMIO_F(prefix(GEN8_BSD2_RING_BASE), s, f, am, rm, d, r, w); \
1592} while (0) 1583} while (0)
1593 1584
1594#define MMIO_RING_D(prefix, d) \ 1585#define MMIO_RING_D(prefix, d) \
@@ -1635,10 +1626,9 @@ static int init_generic_mmio_info(struct intel_gvt *gvt)
1635#undef RING_REG 1626#undef RING_REG
1636 1627
1637#define RING_REG(base) (base + 0x6c) 1628#define RING_REG(base) (base + 0x6c)
1638 MMIO_RING_DFH(RING_REG, D_ALL, 0, instdone_mmio_read, NULL); 1629 MMIO_RING_DFH(RING_REG, D_ALL, 0, mmio_read_from_hw, NULL);
1639 MMIO_DH(RING_REG(GEN8_BSD2_RING_BASE), D_ALL, instdone_mmio_read, NULL);
1640#undef RING_REG 1630#undef RING_REG
1641 MMIO_DH(GEN7_SC_INSTDONE, D_BDW_PLUS, instdone_mmio_read, NULL); 1631 MMIO_DH(GEN7_SC_INSTDONE, D_BDW_PLUS, mmio_read_from_hw, NULL);
1642 1632
1643 MMIO_GM_RDR(0x2148, D_ALL, NULL, NULL); 1633 MMIO_GM_RDR(0x2148, D_ALL, NULL, NULL);
1644 MMIO_GM_RDR(CCID, D_ALL, NULL, NULL); 1634 MMIO_GM_RDR(CCID, D_ALL, NULL, NULL);
@@ -1648,7 +1638,7 @@ static int init_generic_mmio_info(struct intel_gvt *gvt)
1648 MMIO_RING_DFH(RING_TAIL, D_ALL, F_CMD_ACCESS, NULL, NULL); 1638 MMIO_RING_DFH(RING_TAIL, D_ALL, F_CMD_ACCESS, NULL, NULL);
1649 MMIO_RING_DFH(RING_HEAD, D_ALL, F_CMD_ACCESS, NULL, NULL); 1639 MMIO_RING_DFH(RING_HEAD, D_ALL, F_CMD_ACCESS, NULL, NULL);
1650 MMIO_RING_DFH(RING_CTL, D_ALL, F_CMD_ACCESS, NULL, NULL); 1640 MMIO_RING_DFH(RING_CTL, D_ALL, F_CMD_ACCESS, NULL, NULL);
1651 MMIO_RING_DFH(RING_ACTHD, D_ALL, F_CMD_ACCESS, NULL, NULL); 1641 MMIO_RING_DFH(RING_ACTHD, D_ALL, F_CMD_ACCESS, mmio_read_from_hw, NULL);
1652 MMIO_RING_GM_RDR(RING_START, D_ALL, NULL, NULL); 1642 MMIO_RING_GM_RDR(RING_START, D_ALL, NULL, NULL);
1653 1643
1654 /* RING MODE */ 1644 /* RING MODE */
@@ -1662,9 +1652,9 @@ static int init_generic_mmio_info(struct intel_gvt *gvt)
1662 MMIO_RING_DFH(RING_INSTPM, D_ALL, F_MODE_MASK | F_CMD_ACCESS, 1652 MMIO_RING_DFH(RING_INSTPM, D_ALL, F_MODE_MASK | F_CMD_ACCESS,
1663 NULL, NULL); 1653 NULL, NULL);
1664 MMIO_RING_DFH(RING_TIMESTAMP, D_ALL, F_CMD_ACCESS, 1654 MMIO_RING_DFH(RING_TIMESTAMP, D_ALL, F_CMD_ACCESS,
1665 ring_timestamp_mmio_read, NULL); 1655 mmio_read_from_hw, NULL);
1666 MMIO_RING_DFH(RING_TIMESTAMP_UDW, D_ALL, F_CMD_ACCESS, 1656 MMIO_RING_DFH(RING_TIMESTAMP_UDW, D_ALL, F_CMD_ACCESS,
1667 ring_timestamp_mmio_read, NULL); 1657 mmio_read_from_hw, NULL);
1668 1658
1669 MMIO_DFH(GEN7_GT_MODE, D_ALL, F_MODE_MASK | F_CMD_ACCESS, NULL, NULL); 1659 MMIO_DFH(GEN7_GT_MODE, D_ALL, F_MODE_MASK | F_CMD_ACCESS, NULL, NULL);
1670