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 Original line 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);
		dma_resv_fini(dmabuf->resv);


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


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


	if (obj->import_attach)
	if (obj->import_attach) {
		shmem->vaddr = dma_buf_vmap(obj->import_attach->dmabuf);
		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,
		shmem->vaddr = vmap(shmem->pages, obj->size >> PAGE_SHIFT,
				    VM_MAP, pgprot_writecombine(PAGE_KERNEL));
				    VM_MAP, prot);
	}


	if (!shmem->vaddr) {
	if (!shmem->vaddr) {
		DRM_DEBUG_KMS("Failed to vmap pages\n");
		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_flags |= VM_MIXEDMAP | VM_DONTEXPAND;
	vma->vm_page_prot = pgprot_writecombine(vm_get_page_prot(vma->vm_flags));
	vma->vm_page_prot = vm_get_page_prot(vma->vm_flags);
	vma->vm_page_prot = pgprot_decrypted(vma->vm_page_prot);
	if (!shmem->map_cached)
		vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
	vma->vm_ops = &drm_gem_shmem_vm_ops;
	vma->vm_ops = &drm_gem_shmem_vm_ops;


	return 0;
	return 0;
+0 −1
Original line number Original line Diff line number Diff line
@@ -83,7 +83,6 @@
#define VSIZE_OFST			20
#define VSIZE_OFST			20
#define LDI_INT_EN			0x741C
#define LDI_INT_EN			0x741C
#define FRAME_END_INT_EN_OFST		1
#define FRAME_END_INT_EN_OFST		1
#define UNDERFLOW_INT_EN_OFST		2
#define LDI_CTRL			0x7420
#define LDI_CTRL			0x7420
#define BPP_OFST			3
#define BPP_OFST			3
#define DATA_GATE_EN			BIT(2)
#define DATA_GATE_EN			BIT(2)
+0 −20
Original line number Original line Diff line number Diff line
@@ -46,7 +46,6 @@ struct ade_hw_ctx {
	struct clk *media_noc_clk;
	struct clk *media_noc_clk;
	struct clk *ade_pix_clk;
	struct clk *ade_pix_clk;
	struct reset_control *reset;
	struct reset_control *reset;
	struct work_struct display_reset_wq;
	bool power_on;
	bool power_on;
	int irq;
	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,
	ade_update_bits(base + ADE_CTRL, FRM_END_START_OFST,
			FRM_END_START_MASK, REG_EFFECTIVE_IN_ADEEN_FRMEND);
			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,
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);
			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)
static irqreturn_t ade_irq_handler(int irq, void *data)
{
{
	struct ade_hw_ctx *ctx = data;
	struct ade_hw_ctx *ctx = data;
@@ -331,12 +318,6 @@ static irqreturn_t ade_irq_handler(int irq, void *data)
				MASK(1), 1);
				MASK(1), 1);
		drm_crtc_handle_vblank(crtc);
		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;
	return IRQ_HANDLED;
}
}
@@ -919,7 +900,6 @@ static void *ade_hw_ctx_alloc(struct platform_device *pdev,
	if (ret)
	if (ret)
		return ERR_PTR(-EIO);
		return ERR_PTR(-EIO);


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


	return ctx;
	return ctx;
Loading