Commit 26398db1 authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge tag 'drm-misc-fixes-2020-03-05' of git://anongit.freedesktop.org/drm/drm-misc into drm-fixes



Fixes for v5.6.rc5:
- dma-buf fix memory leak
- Fix resource id creation race in virtio.
- Various mmap fixes.
- Fix fence leak in ttm_buffer_object_transfer().
- Fixes for sun4i VI layer format support.
- kirin: Revert "Fix for hikey620 display offset problem"

Signed-off-by: default avatarDave Airlie <airlied@redhat.com>

From: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/56de63c7-0cdf-5805-e268-44944af7fef2@linux.intel.com
parents 70b8ea1a 1b79cfd9
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -108,6 +108,7 @@ static int dma_buf_release(struct inode *inode, struct file *file)
		dma_resv_fini(dmabuf->resv);

	module_put(dmabuf->owner);
	kfree(dmabuf->name);
	kfree(dmabuf);
	return 0;
}
+1 −2
Original line number Diff line number Diff line
@@ -210,8 +210,7 @@ static int anx6345_dp_link_training(struct anx6345 *anx6345)
	if (err)
		return err;

	dpcd[0] = drm_dp_max_link_rate(anx6345->dpcd);
	dpcd[0] = drm_dp_link_rate_to_bw_code(dpcd[0]);
	dpcd[0] = dp_bw;
	err = regmap_write(anx6345->map[I2C_IDX_DPTX],
			   SP_DP_MAIN_LINK_BW_SET_REG, dpcd[0]);
	if (err)
+11 −5
Original line number Diff line number Diff line
@@ -254,11 +254,16 @@ static void *drm_gem_shmem_vmap_locked(struct drm_gem_shmem_object *shmem)
	if (ret)
		goto err_zero_use;

	if (obj->import_attach)
	if (obj->import_attach) {
		shmem->vaddr = dma_buf_vmap(obj->import_attach->dmabuf);
	else
	} else {
		pgprot_t prot = PAGE_KERNEL;

		if (!shmem->map_cached)
			prot = pgprot_writecombine(prot);
		shmem->vaddr = vmap(shmem->pages, obj->size >> PAGE_SHIFT,
				    VM_MAP, pgprot_writecombine(PAGE_KERNEL));
				    VM_MAP, prot);
	}

	if (!shmem->vaddr) {
		DRM_DEBUG_KMS("Failed to vmap pages\n");
@@ -540,8 +545,9 @@ int drm_gem_shmem_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)
	}

	vma->vm_flags |= VM_MIXEDMAP | VM_DONTEXPAND;
	vma->vm_page_prot = pgprot_writecombine(vm_get_page_prot(vma->vm_flags));
	vma->vm_page_prot = pgprot_decrypted(vma->vm_page_prot);
	vma->vm_page_prot = vm_get_page_prot(vma->vm_flags);
	if (!shmem->map_cached)
		vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
	vma->vm_ops = &drm_gem_shmem_vm_ops;

	return 0;
+0 −1
Original line number Diff line number Diff line
@@ -83,7 +83,6 @@
#define VSIZE_OFST			20
#define LDI_INT_EN			0x741C
#define FRAME_END_INT_EN_OFST		1
#define UNDERFLOW_INT_EN_OFST		2
#define LDI_CTRL			0x7420
#define BPP_OFST			3
#define DATA_GATE_EN			BIT(2)
+0 −20
Original line number Diff line number Diff line
@@ -46,7 +46,6 @@ struct ade_hw_ctx {
	struct clk *media_noc_clk;
	struct clk *ade_pix_clk;
	struct reset_control *reset;
	struct work_struct display_reset_wq;
	bool power_on;
	int irq;

@@ -136,7 +135,6 @@ static void ade_init(struct ade_hw_ctx *ctx)
	 */
	ade_update_bits(base + ADE_CTRL, FRM_END_START_OFST,
			FRM_END_START_MASK, REG_EFFECTIVE_IN_ADEEN_FRMEND);
	ade_update_bits(base + LDI_INT_EN, UNDERFLOW_INT_EN_OFST, MASK(1), 1);
}

static bool ade_crtc_mode_fixup(struct drm_crtc *crtc,
@@ -304,17 +302,6 @@ static void ade_crtc_disable_vblank(struct drm_crtc *crtc)
			MASK(1), 0);
}

static void drm_underflow_wq(struct work_struct *work)
{
	struct ade_hw_ctx *ctx = container_of(work, struct ade_hw_ctx,
					      display_reset_wq);
	struct drm_device *drm_dev = ctx->crtc->dev;
	struct drm_atomic_state *state;

	state = drm_atomic_helper_suspend(drm_dev);
	drm_atomic_helper_resume(drm_dev, state);
}

static irqreturn_t ade_irq_handler(int irq, void *data)
{
	struct ade_hw_ctx *ctx = data;
@@ -331,12 +318,6 @@ static irqreturn_t ade_irq_handler(int irq, void *data)
				MASK(1), 1);
		drm_crtc_handle_vblank(crtc);
	}
	if (status & BIT(UNDERFLOW_INT_EN_OFST)) {
		ade_update_bits(base + LDI_INT_CLR, UNDERFLOW_INT_EN_OFST,
				MASK(1), 1);
		DRM_ERROR("LDI underflow!");
		schedule_work(&ctx->display_reset_wq);
	}

	return IRQ_HANDLED;
}
@@ -919,7 +900,6 @@ static void *ade_hw_ctx_alloc(struct platform_device *pdev,
	if (ret)
		return ERR_PTR(-EIO);

	INIT_WORK(&ctx->display_reset_wq, drm_underflow_wq);
	ctx->crtc = crtc;

	return ctx;
Loading