1
0

disp: msm: add changes missing during snapshots

This change ports the missing changes from 4.14 to 4.19
that were missed. It includes changes up until
commit 0f8fb25421ff ("cnss2: Add device version to
SOC info structure").

Change-Id: Idfdfe891f146e389e3c65cc3fc4c98d93220e789
Signed-off-by: Samantha Tran <samtran@codeaurora.org>
Este cometimento está contido em:
Samantha Tran
2019-05-23 11:27:41 -07:00
ascendente 5af1fe1891
cometimento 1ab07a4d7c
17 ficheiros modificados com 196 adições e 22 eliminações

Ver ficheiro

@@ -17,6 +17,7 @@
#include "sde_connector.h"
#include "sde_hw_dsc.h"
#include "sde_crtc.h"
#include "sde_hw_qdss.h"
#define RESERVED_BY_OTHER(h, r) \
(((h)->rsvp && ((h)->rsvp->enc_id != (r)->enc_id)) ||\
@@ -322,6 +323,9 @@ static void _sde_rm_hw_destroy(enum sde_hw_blk_type type, void *hw)
case SDE_HW_BLK_DSC:
sde_hw_dsc_destroy(hw);
break;
case SDE_HW_BLK_QDSS:
sde_hw_qdss_destroy(hw);
break;
case SDE_HW_BLK_SSPP:
/* SSPPs are not managed by the resource manager */
case SDE_HW_BLK_TOP:
@@ -410,6 +414,9 @@ static int _sde_rm_hw_blk_create(
case SDE_HW_BLK_DSC:
hw = sde_hw_dsc_init(id, mmio, cat);
break;
case SDE_HW_BLK_QDSS:
hw = sde_hw_qdss_init(id, mmio, cat);
break;
case SDE_HW_BLK_SSPP:
/* SSPPs are not managed by the resource manager */
case SDE_HW_BLK_TOP:
@@ -525,6 +532,15 @@ static int _sde_rm_hw_blk_create_new(struct sde_rm *rm,
}
}
for (i = 0; i < cat->qdss_count; i++) {
rc = _sde_rm_hw_blk_create(rm, cat, mmio, SDE_HW_BLK_QDSS,
cat->qdss[i].id, &cat->qdss[i]);
if (rc) {
SDE_ERROR("failed: qdss hw not available\n");
goto fail;
}
}
fail:
return rc;
}
@@ -1102,6 +1118,44 @@ static int _sde_rm_reserve_dsc(
return -ENAVAIL;
}
static int _sde_rm_reserve_qdss(
struct sde_rm *rm,
struct sde_rm_rsvp *rsvp,
const struct sde_rm_topology_def *top,
u8 *_qdss_ids)
{
struct sde_rm_hw_iter iter;
struct msm_drm_private *priv = rm->dev->dev_private;
struct sde_kms *sde_kms;
if (!priv->kms) {
SDE_ERROR("invalid kms\n");
return -EINVAL;
}
sde_kms = to_sde_kms(priv->kms);
sde_rm_init_hw_iter(&iter, 0, SDE_HW_BLK_QDSS);
while (_sde_rm_get_hw_locked(rm, &iter)) {
if (RESERVED_BY_OTHER(iter.blk, rsvp))
continue;
SDE_DEBUG("blk id = %d\n", iter.blk->id);
iter.blk->rsvp_nxt = rsvp;
SDE_EVT32(iter.blk->type, rsvp->enc_id, iter.blk->id);
return 0;
}
if (!iter.hw && sde_kms->catalog->qdss_count) {
SDE_DEBUG("couldn't reserve qdss for type %d id %d\n",
SDE_HW_BLK_QDSS, iter.blk->id);
return -ENAVAIL;
}
return 0;
}
static int _sde_rm_reserve_cdm(
struct sde_rm *rm,
struct sde_rm_rsvp *rsvp,
@@ -1368,6 +1422,10 @@ static int _sde_rm_make_next_rsvp(struct sde_rm *rm, struct drm_encoder *enc,
if (ret)
return ret;
ret = _sde_rm_reserve_qdss(rm, rsvp, reqs->topology, NULL);
if (ret)
return ret;
return ret;
}