Commit 88bfb6db authored by Dave Airlie's avatar Dave Airlie

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

A use-after-free fix for panfrost, and a DT invalid configuration fix for
ti-sn65dsi83
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>

From: Maxime Ripard <maxime@cerno.tech>
Link: https://patchwork.freedesktop.org/patch/msgid/20220526090532.nvhlmwev5qgln3nb@houat
parents 0a178750 6e516faf
...@@ -577,7 +577,7 @@ static int sn65dsi83_parse_dt(struct sn65dsi83 *ctx, enum sn65dsi83_model model) ...@@ -577,7 +577,7 @@ static int sn65dsi83_parse_dt(struct sn65dsi83 *ctx, enum sn65dsi83_model model)
ctx->host_node = of_graph_get_remote_port_parent(endpoint); ctx->host_node = of_graph_get_remote_port_parent(endpoint);
of_node_put(endpoint); of_node_put(endpoint);
if (ctx->dsi_lanes < 0 || ctx->dsi_lanes > 4) { if (ctx->dsi_lanes <= 0 || ctx->dsi_lanes > 4) {
ret = -EINVAL; ret = -EINVAL;
goto err_put_node; goto err_put_node;
} }
......
...@@ -233,6 +233,7 @@ static int panfrost_ioctl_submit(struct drm_device *dev, void *data, ...@@ -233,6 +233,7 @@ static int panfrost_ioctl_submit(struct drm_device *dev, void *data,
struct drm_file *file) struct drm_file *file)
{ {
struct panfrost_device *pfdev = dev->dev_private; struct panfrost_device *pfdev = dev->dev_private;
struct panfrost_file_priv *file_priv = file->driver_priv;
struct drm_panfrost_submit *args = data; struct drm_panfrost_submit *args = data;
struct drm_syncobj *sync_out = NULL; struct drm_syncobj *sync_out = NULL;
struct panfrost_job *job; struct panfrost_job *job;
...@@ -262,12 +263,12 @@ static int panfrost_ioctl_submit(struct drm_device *dev, void *data, ...@@ -262,12 +263,12 @@ static int panfrost_ioctl_submit(struct drm_device *dev, void *data,
job->jc = args->jc; job->jc = args->jc;
job->requirements = args->requirements; job->requirements = args->requirements;
job->flush_id = panfrost_gpu_get_latest_flush_id(pfdev); job->flush_id = panfrost_gpu_get_latest_flush_id(pfdev);
job->file_priv = file->driver_priv; job->mmu = file_priv->mmu;
slot = panfrost_job_get_slot(job); slot = panfrost_job_get_slot(job);
ret = drm_sched_job_init(&job->base, ret = drm_sched_job_init(&job->base,
&job->file_priv->sched_entity[slot], &file_priv->sched_entity[slot],
NULL); NULL);
if (ret) if (ret)
goto out_put_job; goto out_put_job;
......
...@@ -201,7 +201,7 @@ static void panfrost_job_hw_submit(struct panfrost_job *job, int js) ...@@ -201,7 +201,7 @@ static void panfrost_job_hw_submit(struct panfrost_job *job, int js)
return; return;
} }
cfg = panfrost_mmu_as_get(pfdev, job->file_priv->mmu); cfg = panfrost_mmu_as_get(pfdev, job->mmu);
job_write(pfdev, JS_HEAD_NEXT_LO(js), lower_32_bits(jc_head)); job_write(pfdev, JS_HEAD_NEXT_LO(js), lower_32_bits(jc_head));
job_write(pfdev, JS_HEAD_NEXT_HI(js), upper_32_bits(jc_head)); job_write(pfdev, JS_HEAD_NEXT_HI(js), upper_32_bits(jc_head));
...@@ -435,7 +435,7 @@ static void panfrost_job_handle_err(struct panfrost_device *pfdev, ...@@ -435,7 +435,7 @@ static void panfrost_job_handle_err(struct panfrost_device *pfdev,
job->jc = 0; job->jc = 0;
} }
panfrost_mmu_as_put(pfdev, job->file_priv->mmu); panfrost_mmu_as_put(pfdev, job->mmu);
panfrost_devfreq_record_idle(&pfdev->pfdevfreq); panfrost_devfreq_record_idle(&pfdev->pfdevfreq);
if (signal_fence) if (signal_fence)
...@@ -456,7 +456,7 @@ static void panfrost_job_handle_done(struct panfrost_device *pfdev, ...@@ -456,7 +456,7 @@ static void panfrost_job_handle_done(struct panfrost_device *pfdev,
* happen when we receive the DONE interrupt while doing a GPU reset). * happen when we receive the DONE interrupt while doing a GPU reset).
*/ */
job->jc = 0; job->jc = 0;
panfrost_mmu_as_put(pfdev, job->file_priv->mmu); panfrost_mmu_as_put(pfdev, job->mmu);
panfrost_devfreq_record_idle(&pfdev->pfdevfreq); panfrost_devfreq_record_idle(&pfdev->pfdevfreq);
dma_fence_signal_locked(job->done_fence); dma_fence_signal_locked(job->done_fence);
......
...@@ -17,7 +17,7 @@ struct panfrost_job { ...@@ -17,7 +17,7 @@ struct panfrost_job {
struct kref refcount; struct kref refcount;
struct panfrost_device *pfdev; struct panfrost_device *pfdev;
struct panfrost_file_priv *file_priv; struct panfrost_mmu *mmu;
/* Fence to be signaled by IRQ handler when the job is complete. */ /* Fence to be signaled by IRQ handler when the job is complete. */
struct dma_fence *done_fence; struct dma_fence *done_fence;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment