Skip to content

Commit 1287c88

Browse files
committed
Merge tag 'drm-intel-next-fixes-2020-04-08' of git://anongit.freedesktop.org/drm/drm-intel into drm-next
- Flush all the reloc_gpu batch (Chris) - Ignore readonly failures when updating relocs (Chris) - Fill all the unused space in the GGTT (Chris) - Return the right vswing table (Jose) - Don't enable DDI IO power on a TypeC port in TBT mode for ICL+ (Imre) Signed-off-by: Dave Airlie <[email protected]> From: Rodrigo Vivi <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
2 parents c445c16 + 1aaea84 commit 1287c88

File tree

3 files changed

+42
-20
lines changed

3 files changed

+42
-20
lines changed

drivers/gpu/drm/i915/display/intel_ddi.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -947,7 +947,8 @@ static const struct cnl_ddi_buf_trans *
947947
ehl_get_combo_buf_trans(struct drm_i915_private *dev_priv, int type, int rate,
948948
int *n_entries)
949949
{
950-
if (type == INTEL_OUTPUT_DP && rate > 270000) {
950+
if (type != INTEL_OUTPUT_HDMI && type != INTEL_OUTPUT_EDP &&
951+
rate > 270000) {
951952
*n_entries = ARRAY_SIZE(ehl_combo_phy_ddi_translations_hbr2_hbr3);
952953
return ehl_combo_phy_ddi_translations_hbr2_hbr3;
953954
}
@@ -959,7 +960,7 @@ static const struct cnl_ddi_buf_trans *
959960
tgl_get_combo_buf_trans(struct drm_i915_private *dev_priv, int type, int rate,
960961
int *n_entries)
961962
{
962-
if (type != INTEL_OUTPUT_DP) {
963+
if (type == INTEL_OUTPUT_HDMI || type == INTEL_OUTPUT_EDP) {
963964
return icl_get_combo_buf_trans(dev_priv, type, rate, n_entries);
964965
} else if (rate > 270000) {
965966
*n_entries = ARRAY_SIZE(tgl_combo_phy_ddi_translations_dp_hbr2);
@@ -1869,7 +1870,11 @@ static void intel_ddi_get_power_domains(struct intel_encoder *encoder,
18691870
return;
18701871

18711872
dig_port = enc_to_dig_port(encoder);
1872-
intel_display_power_get(dev_priv, dig_port->ddi_io_power_domain);
1873+
1874+
if (!intel_phy_is_tc(dev_priv, phy) ||
1875+
dig_port->tc_mode != TC_PORT_TBT_ALT)
1876+
intel_display_power_get(dev_priv,
1877+
dig_port->ddi_io_power_domain);
18731878

18741879
/*
18751880
* AUX power is only needed for (e)DP mode, and for HDMI mode on TC

drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -896,11 +896,13 @@ static inline struct i915_ggtt *cache_to_ggtt(struct reloc_cache *cache)
896896

897897
static void reloc_gpu_flush(struct reloc_cache *cache)
898898
{
899-
GEM_BUG_ON(cache->rq_size >= cache->rq->batch->obj->base.size / sizeof(u32));
899+
struct drm_i915_gem_object *obj = cache->rq->batch->obj;
900+
901+
GEM_BUG_ON(cache->rq_size >= obj->base.size / sizeof(u32));
900902
cache->rq_cmd[cache->rq_size] = MI_BATCH_BUFFER_END;
901903

902-
__i915_gem_object_flush_map(cache->rq->batch->obj, 0, cache->rq_size);
903-
i915_gem_object_unpin_map(cache->rq->batch->obj);
904+
__i915_gem_object_flush_map(obj, 0, sizeof(u32) * (cache->rq_size + 1));
905+
i915_gem_object_unpin_map(obj);
904906

905907
intel_gt_chipset_flush(cache->rq->engine->gt);
906908

@@ -1477,10 +1479,8 @@ static int eb_relocate_vma(struct i915_execbuffer *eb, struct eb_vma *ev)
14771479
* can read from this userspace address.
14781480
*/
14791481
offset = gen8_canonical_addr(offset & ~UPDATE);
1480-
if (unlikely(__put_user(offset, &urelocs[r-stack].presumed_offset))) {
1481-
remain = -EFAULT;
1482-
goto out;
1483-
}
1482+
__put_user(offset,
1483+
&urelocs[r - stack].presumed_offset);
14841484
}
14851485
} while (r++, --count);
14861486
urelocs += ARRAY_SIZE(stack);

drivers/gpu/drm/i915/gt/intel_ggtt.c

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -191,21 +191,29 @@ static void gen8_ggtt_insert_entries(struct i915_address_space *vm,
191191
enum i915_cache_level level,
192192
u32 flags)
193193
{
194-
struct i915_ggtt *ggtt = i915_vm_to_ggtt(vm);
195-
struct sgt_iter sgt_iter;
196-
gen8_pte_t __iomem *gtt_entries;
197194
const gen8_pte_t pte_encode = gen8_ggtt_pte_encode(0, level, 0);
195+
struct i915_ggtt *ggtt = i915_vm_to_ggtt(vm);
196+
gen8_pte_t __iomem *gte;
197+
gen8_pte_t __iomem *end;
198+
struct sgt_iter iter;
198199
dma_addr_t addr;
199200

200201
/*
201202
* Note that we ignore PTE_READ_ONLY here. The caller must be careful
202203
* not to allow the user to override access to a read only page.
203204
*/
204205

205-
gtt_entries = (gen8_pte_t __iomem *)ggtt->gsm;
206-
gtt_entries += vma->node.start / I915_GTT_PAGE_SIZE;
207-
for_each_sgt_daddr(addr, sgt_iter, vma->pages)
208-
gen8_set_pte(gtt_entries++, pte_encode | addr);
206+
gte = (gen8_pte_t __iomem *)ggtt->gsm;
207+
gte += vma->node.start / I915_GTT_PAGE_SIZE;
208+
end = gte + vma->node.size / I915_GTT_PAGE_SIZE;
209+
210+
for_each_sgt_daddr(addr, iter, vma->pages)
211+
gen8_set_pte(gte++, pte_encode | addr);
212+
GEM_BUG_ON(gte > end);
213+
214+
/* Fill the allocated but "unused" space beyond the end of the buffer */
215+
while (gte < end)
216+
gen8_set_pte(gte++, vm->scratch[0].encode);
209217

210218
/*
211219
* We want to flush the TLBs only after we're certain all the PTE
@@ -241,13 +249,22 @@ static void gen6_ggtt_insert_entries(struct i915_address_space *vm,
241249
u32 flags)
242250
{
243251
struct i915_ggtt *ggtt = i915_vm_to_ggtt(vm);
244-
gen6_pte_t __iomem *entries = (gen6_pte_t __iomem *)ggtt->gsm;
245-
unsigned int i = vma->node.start / I915_GTT_PAGE_SIZE;
252+
gen6_pte_t __iomem *gte;
253+
gen6_pte_t __iomem *end;
246254
struct sgt_iter iter;
247255
dma_addr_t addr;
248256

257+
gte = (gen6_pte_t __iomem *)ggtt->gsm;
258+
gte += vma->node.start / I915_GTT_PAGE_SIZE;
259+
end = gte + vma->node.size / I915_GTT_PAGE_SIZE;
260+
249261
for_each_sgt_daddr(addr, iter, vma->pages)
250-
iowrite32(vm->pte_encode(addr, level, flags), &entries[i++]);
262+
iowrite32(vm->pte_encode(addr, level, flags), gte++);
263+
GEM_BUG_ON(gte > end);
264+
265+
/* Fill the allocated but "unused" space beyond the end of the buffer */
266+
while (gte < end)
267+
iowrite32(vm->scratch[0].encode, gte++);
251268

252269
/*
253270
* We want to flush the TLBs only after we're certain all the PTE

0 commit comments

Comments
 (0)