Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6c85495e authored by Dmitry Baryshkov's avatar Dmitry Baryshkov Committed by Greg Kroah-Hartman
Browse files

drm/msm/dpu: index dpu_kms->hw_vbif using vbif_idx



[ Upstream commit 7538f80ae0d98bf51eb89eee5344aec219902d42 ]

Remove loops over hw_vbif. Instead always VBIF's idx as an index in the
array. This fixes an error in dpu_kms_hw_init(), where we fill
dpu_kms->hw_vbif[i], but check for an error pointer at
dpu_kms->hw_vbif[vbif_idx].

Fixes: 25fdd593 ("drm/msm: Add SDM845 DPU support")
Signed-off-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: default avatarAbhinav Kumar <quic_abhinavk@quicinc.com>
Patchwork: https://patchwork.freedesktop.org/patch/489569/
Link: https://lore.kernel.org/r/20220615125703.24647-1-dmitry.baryshkov@linaro.org


Signed-off-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Signed-off-by: default avatarRob Clark <robdclark@chromium.org>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent c2404317
Loading
Loading
Loading
Loading
+5 −7
Original line number Diff line number Diff line
@@ -596,12 +596,10 @@ static void _dpu_kms_hw_destroy(struct dpu_kms *dpu_kms)
	_dpu_kms_mmu_destroy(dpu_kms);

	if (dpu_kms->catalog) {
		for (i = 0; i < dpu_kms->catalog->vbif_count; i++) {
			u32 vbif_idx = dpu_kms->catalog->vbif[i].id;

			if ((vbif_idx < VBIF_MAX) && dpu_kms->hw_vbif[vbif_idx]) {
				dpu_hw_vbif_destroy(dpu_kms->hw_vbif[vbif_idx]);
				dpu_kms->hw_vbif[vbif_idx] = NULL;
		for (i = 0; i < ARRAY_SIZE(dpu_kms->hw_vbif); i++) {
			if (dpu_kms->hw_vbif[i]) {
				dpu_hw_vbif_destroy(dpu_kms->hw_vbif[i]);
				dpu_kms->hw_vbif[i] = NULL;
			}
		}
	}
@@ -899,7 +897,7 @@ static int dpu_kms_hw_init(struct msm_kms *kms)
	for (i = 0; i < dpu_kms->catalog->vbif_count; i++) {
		u32 vbif_idx = dpu_kms->catalog->vbif[i].id;

		dpu_kms->hw_vbif[i] = dpu_hw_vbif_init(vbif_idx,
		dpu_kms->hw_vbif[vbif_idx] = dpu_hw_vbif_init(vbif_idx,
				dpu_kms->vbif[vbif_idx], dpu_kms->catalog);
		if (IS_ERR_OR_NULL(dpu_kms->hw_vbif[vbif_idx])) {
			rc = PTR_ERR(dpu_kms->hw_vbif[vbif_idx]);
+13 −16
Original line number Diff line number Diff line
@@ -11,6 +11,14 @@
#include "dpu_hw_vbif.h"
#include "dpu_trace.h"

static struct dpu_hw_vbif *dpu_get_vbif(struct dpu_kms *dpu_kms, enum dpu_vbif vbif_idx)
{
	if (vbif_idx < ARRAY_SIZE(dpu_kms->hw_vbif))
		return dpu_kms->hw_vbif[vbif_idx];

	return NULL;
}

/**
 * _dpu_vbif_wait_for_xin_halt - wait for the xin to halt
 * @vbif:	Pointer to hardware vbif driver
@@ -148,11 +156,11 @@ static u32 _dpu_vbif_get_ot_limit(struct dpu_hw_vbif *vbif,
void dpu_vbif_set_ot_limit(struct dpu_kms *dpu_kms,
		struct dpu_vbif_set_ot_params *params)
{
	struct dpu_hw_vbif *vbif = NULL;
	struct dpu_hw_vbif *vbif;
	struct dpu_hw_mdp *mdp;
	bool forced_on = false;
	u32 ot_lim;
	int ret, i;
	int ret;

	if (!dpu_kms) {
		DPU_ERROR("invalid arguments\n");
@@ -160,12 +168,7 @@ void dpu_vbif_set_ot_limit(struct dpu_kms *dpu_kms,
	}
	mdp = dpu_kms->hw_mdp;

	for (i = 0; i < ARRAY_SIZE(dpu_kms->hw_vbif); i++) {
		if (dpu_kms->hw_vbif[i] &&
				dpu_kms->hw_vbif[i]->idx == params->vbif_idx)
			vbif = dpu_kms->hw_vbif[i];
	}

	vbif = dpu_get_vbif(dpu_kms, params->vbif_idx);
	if (!vbif || !mdp) {
		DPU_DEBUG("invalid arguments vbif %d mdp %d\n",
				vbif != 0, mdp != 0);
@@ -208,7 +211,7 @@ void dpu_vbif_set_ot_limit(struct dpu_kms *dpu_kms,
void dpu_vbif_set_qos_remap(struct dpu_kms *dpu_kms,
		struct dpu_vbif_set_qos_params *params)
{
	struct dpu_hw_vbif *vbif = NULL;
	struct dpu_hw_vbif *vbif;
	struct dpu_hw_mdp *mdp;
	bool forced_on = false;
	const struct dpu_vbif_qos_tbl *qos_tbl;
@@ -220,13 +223,7 @@ void dpu_vbif_set_qos_remap(struct dpu_kms *dpu_kms,
	}
	mdp = dpu_kms->hw_mdp;

	for (i = 0; i < ARRAY_SIZE(dpu_kms->hw_vbif); i++) {
		if (dpu_kms->hw_vbif[i] &&
				dpu_kms->hw_vbif[i]->idx == params->vbif_idx) {
			vbif = dpu_kms->hw_vbif[i];
			break;
		}
	}
	vbif = dpu_get_vbif(dpu_kms, params->vbif_idx);

	if (!vbif || !vbif->cap) {
		DPU_ERROR("invalid vbif %d\n", params->vbif_idx);