Commit 8da0e152 authored by Dave Airlie's avatar Dave Airlie

Merge tag 'drm-misc-next-fixes-2019-05-15' of...

Merge tag 'drm-misc-next-fixes-2019-05-15' of git://anongit.freedesktop.org/drm/drm-misc into drm-next

- A couple new panfrost fixes
- Fix the low refresh rate register in adv7511
- A handful of msm fixes that fell out of 5.1 bringup on SDM845
- Fix spinlock initialization in pl111
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>

From: Sean Paul <sean@poorly.run>
Link: https://patchwork.freedesktop.org/patch/msgid/20190515201729.GA89093@art_vandelay
parents dc28d574 2b117451
...@@ -748,11 +748,11 @@ static void adv7511_mode_set(struct adv7511 *adv7511, ...@@ -748,11 +748,11 @@ static void adv7511_mode_set(struct adv7511 *adv7511,
vsync_polarity = 1; vsync_polarity = 1;
} }
if (mode->vrefresh <= 24000) if (drm_mode_vrefresh(mode) <= 24)
low_refresh_rate = ADV7511_LOW_REFRESH_RATE_24HZ; low_refresh_rate = ADV7511_LOW_REFRESH_RATE_24HZ;
else if (mode->vrefresh <= 25000) else if (drm_mode_vrefresh(mode) <= 25)
low_refresh_rate = ADV7511_LOW_REFRESH_RATE_25HZ; low_refresh_rate = ADV7511_LOW_REFRESH_RATE_25HZ;
else if (mode->vrefresh <= 30000) else if (drm_mode_vrefresh(mode) <= 30)
low_refresh_rate = ADV7511_LOW_REFRESH_RATE_30HZ; low_refresh_rate = ADV7511_LOW_REFRESH_RATE_30HZ;
else else
low_refresh_rate = ADV7511_LOW_REFRESH_RATE_NONE; low_refresh_rate = ADV7511_LOW_REFRESH_RATE_NONE;
......
...@@ -747,7 +747,7 @@ int a6xx_gmu_resume(struct a6xx_gpu *a6xx_gpu) ...@@ -747,7 +747,7 @@ int a6xx_gmu_resume(struct a6xx_gpu *a6xx_gpu)
* will make sure that the refcounting is correct in case we need to * will make sure that the refcounting is correct in case we need to
* bring down the GX after a GMU failure * bring down the GX after a GMU failure
*/ */
if (!IS_ERR(gmu->gxpd)) if (!IS_ERR_OR_NULL(gmu->gxpd))
pm_runtime_get(gmu->gxpd); pm_runtime_get(gmu->gxpd);
out: out:
...@@ -863,7 +863,7 @@ int a6xx_gmu_stop(struct a6xx_gpu *a6xx_gpu) ...@@ -863,7 +863,7 @@ int a6xx_gmu_stop(struct a6xx_gpu *a6xx_gpu)
* domain. Usually the GMU does this but only if the shutdown sequence * domain. Usually the GMU does this but only if the shutdown sequence
* was successful * was successful
*/ */
if (!IS_ERR(gmu->gxpd)) if (!IS_ERR_OR_NULL(gmu->gxpd))
pm_runtime_put_sync(gmu->gxpd); pm_runtime_put_sync(gmu->gxpd);
clk_bulk_disable_unprepare(gmu->nr_clocks, gmu->clocks); clk_bulk_disable_unprepare(gmu->nr_clocks, gmu->clocks);
...@@ -1234,7 +1234,7 @@ void a6xx_gmu_remove(struct a6xx_gpu *a6xx_gpu) ...@@ -1234,7 +1234,7 @@ void a6xx_gmu_remove(struct a6xx_gpu *a6xx_gpu)
pm_runtime_disable(gmu->dev); pm_runtime_disable(gmu->dev);
if (!IS_ERR(gmu->gxpd)) { if (!IS_ERR_OR_NULL(gmu->gxpd)) {
pm_runtime_disable(gmu->gxpd); pm_runtime_disable(gmu->gxpd);
dev_pm_domain_detach(gmu->gxpd, false); dev_pm_domain_detach(gmu->gxpd, false);
} }
......
...@@ -15,7 +15,6 @@ ...@@ -15,7 +15,6 @@
#include "dpu_hwio.h" #include "dpu_hwio.h"
#include "dpu_hw_lm.h" #include "dpu_hw_lm.h"
#include "dpu_hw_mdss.h" #include "dpu_hw_mdss.h"
#include "dpu_kms.h"
#define LM_OP_MODE 0x00 #define LM_OP_MODE 0x00
#define LM_OUT_SIZE 0x04 #define LM_OUT_SIZE 0x04
......
...@@ -780,7 +780,6 @@ static int dpu_plane_prepare_fb(struct drm_plane *plane, ...@@ -780,7 +780,6 @@ static int dpu_plane_prepare_fb(struct drm_plane *plane,
struct dpu_plane_state *pstate = to_dpu_plane_state(new_state); struct dpu_plane_state *pstate = to_dpu_plane_state(new_state);
struct dpu_hw_fmt_layout layout; struct dpu_hw_fmt_layout layout;
struct drm_gem_object *obj; struct drm_gem_object *obj;
struct msm_gem_object *msm_obj;
struct dma_fence *fence; struct dma_fence *fence;
struct dpu_kms *kms = _dpu_plane_get_kms(&pdpu->base); struct dpu_kms *kms = _dpu_plane_get_kms(&pdpu->base);
int ret; int ret;
...@@ -799,8 +798,7 @@ static int dpu_plane_prepare_fb(struct drm_plane *plane, ...@@ -799,8 +798,7 @@ static int dpu_plane_prepare_fb(struct drm_plane *plane,
* implicit fence and fb prepare by hand here. * implicit fence and fb prepare by hand here.
*/ */
obj = msm_framebuffer_bo(new_state->fb, 0); obj = msm_framebuffer_bo(new_state->fb, 0);
msm_obj = to_msm_bo(obj); fence = reservation_object_get_excl_rcu(obj->resv);
fence = reservation_object_get_excl_rcu(msm_obj->resv);
if (fence) if (fence)
drm_atomic_set_fence_for_plane(new_state, fence); drm_atomic_set_fence_for_plane(new_state, fence);
......
...@@ -49,15 +49,13 @@ int msm_atomic_prepare_fb(struct drm_plane *plane, ...@@ -49,15 +49,13 @@ int msm_atomic_prepare_fb(struct drm_plane *plane,
struct msm_drm_private *priv = plane->dev->dev_private; struct msm_drm_private *priv = plane->dev->dev_private;
struct msm_kms *kms = priv->kms; struct msm_kms *kms = priv->kms;
struct drm_gem_object *obj; struct drm_gem_object *obj;
struct msm_gem_object *msm_obj;
struct dma_fence *fence; struct dma_fence *fence;
if (!new_state->fb) if (!new_state->fb)
return 0; return 0;
obj = msm_framebuffer_bo(new_state->fb, 0); obj = msm_framebuffer_bo(new_state->fb, 0);
msm_obj = to_msm_bo(obj); fence = reservation_object_get_excl_rcu(obj->resv);
fence = reservation_object_get_excl_rcu(msm_obj->resv);
drm_atomic_set_fence_for_plane(new_state, fence); drm_atomic_set_fence_for_plane(new_state, fence);
......
...@@ -803,7 +803,8 @@ void msm_gem_describe(struct drm_gem_object *obj, struct seq_file *m) ...@@ -803,7 +803,8 @@ void msm_gem_describe(struct drm_gem_object *obj, struct seq_file *m)
seq_puts(m, " vmas:"); seq_puts(m, " vmas:");
list_for_each_entry(vma, &msm_obj->vmas, list) list_for_each_entry(vma, &msm_obj->vmas, list)
seq_printf(m, " [%s: %08llx,%s,inuse=%d]", vma->aspace->name, seq_printf(m, " [%s: %08llx,%s,inuse=%d]",
vma->aspace != NULL ? vma->aspace->name : NULL,
vma->iova, vma->mapped ? "mapped" : "unmapped", vma->iova, vma->mapped ? "mapped" : "unmapped",
vma->inuse); vma->inuse);
......
...@@ -86,10 +86,6 @@ struct msm_gem_object { ...@@ -86,10 +86,6 @@ struct msm_gem_object {
struct llist_node freed; struct llist_node freed;
/* normally (resv == &_resv) except for imported bo's */
struct reservation_object *resv;
struct reservation_object _resv;
/* For physically contiguous buffers. Used when we don't have /* For physically contiguous buffers. Used when we don't have
* an IOMMU. Also used for stolen/splashscreen buffer. * an IOMMU. Also used for stolen/splashscreen buffer.
*/ */
......
...@@ -165,6 +165,10 @@ int panfrost_device_init(struct panfrost_device *pfdev) ...@@ -165,6 +165,10 @@ int panfrost_device_init(struct panfrost_device *pfdev)
void panfrost_device_fini(struct panfrost_device *pfdev) void panfrost_device_fini(struct panfrost_device *pfdev)
{ {
panfrost_job_fini(pfdev);
panfrost_mmu_fini(pfdev);
panfrost_gpu_fini(pfdev);
panfrost_reset_fini(pfdev);
panfrost_regulator_fini(pfdev); panfrost_regulator_fini(pfdev);
panfrost_clk_fini(pfdev); panfrost_clk_fini(pfdev);
} }
......
...@@ -219,7 +219,8 @@ static int panfrost_ioctl_submit(struct drm_device *dev, void *data, ...@@ -219,7 +219,8 @@ static int panfrost_ioctl_submit(struct drm_device *dev, void *data,
fail_job: fail_job:
panfrost_job_put(job); panfrost_job_put(job);
fail_out_sync: fail_out_sync:
drm_syncobj_put(sync_out); if (sync_out)
drm_syncobj_put(sync_out);
return ret; return ret;
} }
......
...@@ -531,14 +531,15 @@ pl111_init_clock_divider(struct drm_device *drm) ...@@ -531,14 +531,15 @@ pl111_init_clock_divider(struct drm_device *drm)
dev_err(drm->dev, "CLCD: unable to get clcdclk.\n"); dev_err(drm->dev, "CLCD: unable to get clcdclk.\n");
return PTR_ERR(parent); return PTR_ERR(parent);
} }
spin_lock_init(&priv->tim2_lock);
/* If the clock divider is broken, use the parent directly */ /* If the clock divider is broken, use the parent directly */
if (priv->variant->broken_clockdivider) { if (priv->variant->broken_clockdivider) {
priv->clk = parent; priv->clk = parent;
return 0; return 0;
} }
parent_name = __clk_get_name(parent); parent_name = __clk_get_name(parent);
spin_lock_init(&priv->tim2_lock);
div->init = &init; div->init = &init;
ret = devm_clk_hw_register(drm->dev, div); ret = devm_clk_hw_register(drm->dev, div);
......
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