- 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 -----BEGIN PGP SIGNATURE----- iQEzBAABCgAdFiEEfxcpfMSgdnQMs+QqlvcN/ahKBwoFAlzccqQACgkQlvcN/ahK Bwojowf/fzcPku4y1L8IzPIoQ75iYr7VC4jhHiTN1DxHHVQUCCMpdPk9EPMJUPY3 OeMmOqirtOL4+QK+5z/3Zp8ERJ+NYz93Hgkc3GNlNGwt12odr1mavRWNmhPRNx0t Ghj3nFDRI9MuK6rK3Hzc+Kap5vTFwD3bAEaCt3eRGlnf0yTzqwer969GsaKCeMeo XqSI3ZtJq2T6bxpvwgKbRNHWxnEGtW/wI7newfz0I3BIVIbciTPz564kNmXiba8R mC8CG2WB860hxT4AZkFoKTP8IalfskL9XPrLKOmpYocPxPDSwBz6lHQzOJlvk52d OjQrcmD3URs5j3xSVmMvoPrT05fTYQ== =dZYN -----END PGP SIGNATURE----- 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: Dave Airlie <airlied@redhat.com> From: Sean Paul <sean@poorly.run> Link: https://patchwork.freedesktop.org/patch/msgid/20190515201729.GA89093@art_vandelay
This commit is contained in:
commit
8da0e1525b
|
@ -748,11 +748,11 @@ static void adv7511_mode_set(struct adv7511 *adv7511,
|
|||
vsync_polarity = 1;
|
||||
}
|
||||
|
||||
if (mode->vrefresh <= 24000)
|
||||
if (drm_mode_vrefresh(mode) <= 24)
|
||||
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;
|
||||
else if (mode->vrefresh <= 30000)
|
||||
else if (drm_mode_vrefresh(mode) <= 30)
|
||||
low_refresh_rate = ADV7511_LOW_REFRESH_RATE_30HZ;
|
||||
else
|
||||
low_refresh_rate = ADV7511_LOW_REFRESH_RATE_NONE;
|
||||
|
|
|
@ -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
|
||||
* 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);
|
||||
|
||||
out:
|
||||
|
@ -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
|
||||
* was successful
|
||||
*/
|
||||
if (!IS_ERR(gmu->gxpd))
|
||||
if (!IS_ERR_OR_NULL(gmu->gxpd))
|
||||
pm_runtime_put_sync(gmu->gxpd);
|
||||
|
||||
clk_bulk_disable_unprepare(gmu->nr_clocks, gmu->clocks);
|
||||
|
@ -1234,7 +1234,7 @@ void a6xx_gmu_remove(struct a6xx_gpu *a6xx_gpu)
|
|||
|
||||
pm_runtime_disable(gmu->dev);
|
||||
|
||||
if (!IS_ERR(gmu->gxpd)) {
|
||||
if (!IS_ERR_OR_NULL(gmu->gxpd)) {
|
||||
pm_runtime_disable(gmu->gxpd);
|
||||
dev_pm_domain_detach(gmu->gxpd, false);
|
||||
}
|
||||
|
|
|
@ -15,7 +15,6 @@
|
|||
#include "dpu_hwio.h"
|
||||
#include "dpu_hw_lm.h"
|
||||
#include "dpu_hw_mdss.h"
|
||||
#include "dpu_kms.h"
|
||||
|
||||
#define LM_OP_MODE 0x00
|
||||
#define LM_OUT_SIZE 0x04
|
||||
|
|
|
@ -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_hw_fmt_layout layout;
|
||||
struct drm_gem_object *obj;
|
||||
struct msm_gem_object *msm_obj;
|
||||
struct dma_fence *fence;
|
||||
struct dpu_kms *kms = _dpu_plane_get_kms(&pdpu->base);
|
||||
int ret;
|
||||
|
@ -799,8 +798,7 @@ static int dpu_plane_prepare_fb(struct drm_plane *plane,
|
|||
* implicit fence and fb prepare by hand here.
|
||||
*/
|
||||
obj = msm_framebuffer_bo(new_state->fb, 0);
|
||||
msm_obj = to_msm_bo(obj);
|
||||
fence = reservation_object_get_excl_rcu(msm_obj->resv);
|
||||
fence = reservation_object_get_excl_rcu(obj->resv);
|
||||
if (fence)
|
||||
drm_atomic_set_fence_for_plane(new_state, fence);
|
||||
|
||||
|
|
|
@ -49,15 +49,13 @@ int msm_atomic_prepare_fb(struct drm_plane *plane,
|
|||
struct msm_drm_private *priv = plane->dev->dev_private;
|
||||
struct msm_kms *kms = priv->kms;
|
||||
struct drm_gem_object *obj;
|
||||
struct msm_gem_object *msm_obj;
|
||||
struct dma_fence *fence;
|
||||
|
||||
if (!new_state->fb)
|
||||
return 0;
|
||||
|
||||
obj = msm_framebuffer_bo(new_state->fb, 0);
|
||||
msm_obj = to_msm_bo(obj);
|
||||
fence = reservation_object_get_excl_rcu(msm_obj->resv);
|
||||
fence = reservation_object_get_excl_rcu(obj->resv);
|
||||
|
||||
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)
|
|||
seq_puts(m, " vmas:");
|
||||
|
||||
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->inuse);
|
||||
|
||||
|
|
|
@ -86,10 +86,6 @@ struct msm_gem_object {
|
|||
|
||||
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
|
||||
* an IOMMU. Also used for stolen/splashscreen buffer.
|
||||
*/
|
||||
|
|
|
@ -165,6 +165,10 @@ err_out0:
|
|||
|
||||
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_clk_fini(pfdev);
|
||||
}
|
||||
|
|
|
@ -219,7 +219,8 @@ static int panfrost_ioctl_submit(struct drm_device *dev, void *data,
|
|||
fail_job:
|
||||
panfrost_job_put(job);
|
||||
fail_out_sync:
|
||||
drm_syncobj_put(sync_out);
|
||||
if (sync_out)
|
||||
drm_syncobj_put(sync_out);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -531,14 +531,15 @@ pl111_init_clock_divider(struct drm_device *drm)
|
|||
dev_err(drm->dev, "CLCD: unable to get clcdclk.\n");
|
||||
return PTR_ERR(parent);
|
||||
}
|
||||
|
||||
spin_lock_init(&priv->tim2_lock);
|
||||
|
||||
/* If the clock divider is broken, use the parent directly */
|
||||
if (priv->variant->broken_clockdivider) {
|
||||
priv->clk = parent;
|
||||
return 0;
|
||||
}
|
||||
parent_name = __clk_get_name(parent);
|
||||
|
||||
spin_lock_init(&priv->tim2_lock);
|
||||
div->init = &init;
|
||||
|
||||
ret = devm_clk_hw_register(drm->dev, div);
|
||||
|
|
Loading…
Reference in New Issue