- 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;
|
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)
|
||||||
* 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)
|
||||||
* 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)
|
||||||
|
|
||||||
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 @@
|
||||||
#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,
|
||||||
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,
|
||||||
* 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,
|
||||||
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)
|
||||||
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 {
|
||||||
|
|
||||||
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 @@ err_out0:
|
||||||
|
|
||||||
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,
|
||||||
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)
|
||||||
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);
|
||||||
|
|
Loading…
Reference in New Issue