* [PATCH 1/3] drm/msm/dpu: index dpu_kms->hw_vbif using vbif_idx
@ 2022-02-17 3:45 ` Dmitry Baryshkov
0 siblings, 0 replies; 12+ messages in thread
From: Dmitry Baryshkov @ 2022-02-17 3:45 UTC (permalink / raw)
To: Bjorn Andersson, Rob Clark, Sean Paul, Abhinav Kumar
Cc: Stephen Boyd, David Airlie, Daniel Vetter, linux-arm-msm,
dri-devel, freedreno
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: 25fdd5933e4c ("drm/msm: Add SDM845 DPU support")
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 10 ++++----
drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c | 29 +++++++++++-------------
2 files changed, 17 insertions(+), 22 deletions(-)
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
index d0653a9ec694..81a35c8d62e7 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
@@ -790,11 +790,9 @@ 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]);
+ 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]);
}
}
@@ -1102,7 +1100,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]);
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c
index 21d20373eb8b..cbbf77b17fc3 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c
@@ -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,20 +156,15 @@ 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;
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) {
DRM_DEBUG_ATOMIC("invalid arguments vbif %d mdp %d\n",
vbif != NULL, mdp != NULL);
@@ -204,7 +207,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;
@@ -216,13 +219,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);
--
2.34.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 1/3] drm/msm/dpu: index dpu_kms->hw_vbif using vbif_idx
@ 2022-02-17 3:45 ` Dmitry Baryshkov
0 siblings, 0 replies; 12+ messages in thread
From: Dmitry Baryshkov @ 2022-02-17 3:45 UTC (permalink / raw)
To: Bjorn Andersson, Rob Clark, Sean Paul, Abhinav Kumar
Cc: David Airlie, linux-arm-msm, dri-devel, Stephen Boyd, freedreno
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: 25fdd5933e4c ("drm/msm: Add SDM845 DPU support")
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 10 ++++----
drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c | 29 +++++++++++-------------
2 files changed, 17 insertions(+), 22 deletions(-)
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
index d0653a9ec694..81a35c8d62e7 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
@@ -790,11 +790,9 @@ 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]);
+ 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]);
}
}
@@ -1102,7 +1100,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]);
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c
index 21d20373eb8b..cbbf77b17fc3 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c
@@ -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,20 +156,15 @@ 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;
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) {
DRM_DEBUG_ATOMIC("invalid arguments vbif %d mdp %d\n",
vbif != NULL, mdp != NULL);
@@ -204,7 +207,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;
@@ -216,13 +219,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);
--
2.34.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 2/3] drm/msm/dpu: fix error handling around dpu_hw_vbif_init
2022-02-17 3:45 ` Dmitry Baryshkov
@ 2022-02-17 3:45 ` Dmitry Baryshkov
-1 siblings, 0 replies; 12+ messages in thread
From: Dmitry Baryshkov @ 2022-02-17 3:45 UTC (permalink / raw)
To: Bjorn Andersson, Rob Clark, Sean Paul, Abhinav Kumar
Cc: Stephen Boyd, David Airlie, Daniel Vetter, linux-arm-msm,
dri-devel, freedreno
Using IS_ERR_OR_NULL() together with PTR_ERR() is a typical mistake. If
the value is NULL, then the function will return 0 instead of a proper
return code. Moreover dpu_hw_vbif_init() function can not return NULL.
So, replace corresponding IS_ERR_OR_NULL() call with IS_ERR().
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
index 81a35c8d62e7..f8f1bf3b511d 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
@@ -1102,10 +1102,8 @@ static int dpu_kms_hw_init(struct msm_kms *kms)
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])) {
+ if (IS_ERR(dpu_kms->hw_vbif[vbif_idx])) {
rc = PTR_ERR(dpu_kms->hw_vbif[vbif_idx]);
- if (!dpu_kms->hw_vbif[vbif_idx])
- rc = -EINVAL;
DPU_ERROR("failed to init vbif %d: %d\n", vbif_idx, rc);
dpu_kms->hw_vbif[vbif_idx] = NULL;
goto power_error;
--
2.34.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 2/3] drm/msm/dpu: fix error handling around dpu_hw_vbif_init
@ 2022-02-17 3:45 ` Dmitry Baryshkov
0 siblings, 0 replies; 12+ messages in thread
From: Dmitry Baryshkov @ 2022-02-17 3:45 UTC (permalink / raw)
To: Bjorn Andersson, Rob Clark, Sean Paul, Abhinav Kumar
Cc: David Airlie, linux-arm-msm, dri-devel, Stephen Boyd, freedreno
Using IS_ERR_OR_NULL() together with PTR_ERR() is a typical mistake. If
the value is NULL, then the function will return 0 instead of a proper
return code. Moreover dpu_hw_vbif_init() function can not return NULL.
So, replace corresponding IS_ERR_OR_NULL() call with IS_ERR().
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
index 81a35c8d62e7..f8f1bf3b511d 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
@@ -1102,10 +1102,8 @@ static int dpu_kms_hw_init(struct msm_kms *kms)
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])) {
+ if (IS_ERR(dpu_kms->hw_vbif[vbif_idx])) {
rc = PTR_ERR(dpu_kms->hw_vbif[vbif_idx]);
- if (!dpu_kms->hw_vbif[vbif_idx])
- rc = -EINVAL;
DPU_ERROR("failed to init vbif %d: %d\n", vbif_idx, rc);
dpu_kms->hw_vbif[vbif_idx] = NULL;
goto power_error;
--
2.34.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 3/3] drm/msm/dpu: drop VBIF indices
2022-02-17 3:45 ` Dmitry Baryshkov
@ 2022-02-17 3:45 ` Dmitry Baryshkov
-1 siblings, 0 replies; 12+ messages in thread
From: Dmitry Baryshkov @ 2022-02-17 3:45 UTC (permalink / raw)
To: Bjorn Andersson, Rob Clark, Sean Paul, Abhinav Kumar
Cc: Stephen Boyd, David Airlie, Daniel Vetter, linux-arm-msm,
dri-devel, freedreno
We do not expect to have other VBIFs. Drop VBIF_n indices and always use
VBIF_RT and VBIF_NRT.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
.../gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 4 +--
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h | 6 ++--
drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c | 36 ++++++++++++-------
3 files changed, 28 insertions(+), 18 deletions(-)
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
index aa4d20762ccb..dbb853042aa0 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
@@ -1115,7 +1115,7 @@ static const struct dpu_vbif_dynamic_ot_cfg msm8998_ot_rdwr_cfg[] = {
static const struct dpu_vbif_cfg msm8998_vbif[] = {
{
- .name = "vbif_0", .id = VBIF_0,
+ .name = "vbif_rt", .id = VBIF_RT,
.base = 0, .len = 0x1040,
.default_ot_rd_limit = 32,
.default_ot_wr_limit = 32,
@@ -1144,7 +1144,7 @@ static const struct dpu_vbif_cfg msm8998_vbif[] = {
static const struct dpu_vbif_cfg sdm845_vbif[] = {
{
- .name = "vbif_0", .id = VBIF_0,
+ .name = "vbif_rt", .id = VBIF_RT,
.base = 0, .len = 0x1040,
.features = BIT(DPU_VBIF_QOS_REMAP),
.xin_halt_timeout = 0x4000,
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h
index bb9ceadeb0bb..598c201ae50d 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h
@@ -254,11 +254,9 @@ enum dpu_wd_timer {
};
enum dpu_vbif {
- VBIF_0,
- VBIF_1,
+ VBIF_RT,
+ VBIF_NRT,
VBIF_MAX,
- VBIF_RT = VBIF_0,
- VBIF_NRT = VBIF_1
};
/**
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c
index cbbf77b17fc3..c011d4ab6acc 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c
@@ -19,6 +19,18 @@ static struct dpu_hw_vbif *dpu_get_vbif(struct dpu_kms *dpu_kms, enum dpu_vbif v
return NULL;
}
+static const char *dpu_vbif_name(enum dpu_vbif idx)
+{
+ switch (idx) {
+ case VBIF_RT:
+ return "VBIF_RT";
+ case VBIF_NRT:
+ return "VBIF_NRT";
+ default:
+ return "??";
+ }
+}
+
/**
* _dpu_vbif_wait_for_xin_halt - wait for the xin to halt
* @vbif: Pointer to hardware vbif driver
@@ -50,12 +62,12 @@ static int _dpu_vbif_wait_for_xin_halt(struct dpu_hw_vbif *vbif, u32 xin_id)
if (!status) {
rc = -ETIMEDOUT;
- DPU_ERROR("VBIF %d client %d not halting. TIMEDOUT.\n",
- vbif->idx - VBIF_0, xin_id);
+ DPU_ERROR("%s client %d not halting. TIMEDOUT.\n",
+ dpu_vbif_name(vbif->idx), xin_id);
} else {
rc = 0;
- DRM_DEBUG_ATOMIC("VBIF %d client %d is halted\n",
- vbif->idx - VBIF_0, xin_id);
+ DRM_DEBUG_ATOMIC("%s client %d is halted\n",
+ dpu_vbif_name(vbif->idx), xin_id);
}
return rc;
@@ -95,8 +107,8 @@ static void _dpu_vbif_apply_dynamic_ot_limit(struct dpu_hw_vbif *vbif,
}
}
- DRM_DEBUG_ATOMIC("vbif:%d xin:%d w:%d h:%d fps:%d pps:%llu ot:%u\n",
- vbif->idx - VBIF_0, params->xin_id,
+ DRM_DEBUG_ATOMIC("%s xin:%d w:%d h:%d fps:%d pps:%llu ot:%u\n",
+ dpu_vbif_name(vbif->idx), params->xin_id,
params->width, params->height, params->frame_rate,
pps, *ot_lim);
}
@@ -141,8 +153,8 @@ static u32 _dpu_vbif_get_ot_limit(struct dpu_hw_vbif *vbif,
}
exit:
- DRM_DEBUG_ATOMIC("vbif:%d xin:%d ot_lim:%d\n",
- vbif->idx - VBIF_0, params->xin_id, ot_lim);
+ DRM_DEBUG_ATOMIC("%s xin:%d ot_lim:%d\n",
+ dpu_vbif_name(vbif->idx), params->xin_id, ot_lim);
return ot_lim;
}
@@ -242,8 +254,8 @@ void dpu_vbif_set_qos_remap(struct dpu_kms *dpu_kms,
forced_on = mdp->ops.setup_clk_force_ctrl(mdp, params->clk_ctrl, true);
for (i = 0; i < qos_tbl->npriority_lvl; i++) {
- DRM_DEBUG_ATOMIC("vbif:%d xin:%d lvl:%d/%d\n",
- params->vbif_idx, params->xin_id, i,
+ DRM_DEBUG_ATOMIC("%s xin:%d lvl:%d/%d\n",
+ dpu_vbif_name(params->vbif_idx), params->xin_id, i,
qos_tbl->priority_lvl[i]);
vbif->ops.set_qos_remap(vbif, params->xin_id, i,
qos_tbl->priority_lvl[i]);
@@ -263,8 +275,8 @@ void dpu_vbif_clear_errors(struct dpu_kms *dpu_kms)
if (vbif && vbif->ops.clear_errors) {
vbif->ops.clear_errors(vbif, &pnd, &src);
if (pnd || src) {
- DRM_DEBUG_KMS("VBIF %d: pnd 0x%X, src 0x%X\n",
- vbif->idx - VBIF_0, pnd, src);
+ DRM_DEBUG_KMS("%s: pnd 0x%X, src 0x%X\n",
+ dpu_vbif_name(vbif->idx), pnd, src);
}
}
}
--
2.34.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 3/3] drm/msm/dpu: drop VBIF indices
@ 2022-02-17 3:45 ` Dmitry Baryshkov
0 siblings, 0 replies; 12+ messages in thread
From: Dmitry Baryshkov @ 2022-02-17 3:45 UTC (permalink / raw)
To: Bjorn Andersson, Rob Clark, Sean Paul, Abhinav Kumar
Cc: David Airlie, linux-arm-msm, dri-devel, Stephen Boyd, freedreno
We do not expect to have other VBIFs. Drop VBIF_n indices and always use
VBIF_RT and VBIF_NRT.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
.../gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 4 +--
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h | 6 ++--
drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c | 36 ++++++++++++-------
3 files changed, 28 insertions(+), 18 deletions(-)
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
index aa4d20762ccb..dbb853042aa0 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
@@ -1115,7 +1115,7 @@ static const struct dpu_vbif_dynamic_ot_cfg msm8998_ot_rdwr_cfg[] = {
static const struct dpu_vbif_cfg msm8998_vbif[] = {
{
- .name = "vbif_0", .id = VBIF_0,
+ .name = "vbif_rt", .id = VBIF_RT,
.base = 0, .len = 0x1040,
.default_ot_rd_limit = 32,
.default_ot_wr_limit = 32,
@@ -1144,7 +1144,7 @@ static const struct dpu_vbif_cfg msm8998_vbif[] = {
static const struct dpu_vbif_cfg sdm845_vbif[] = {
{
- .name = "vbif_0", .id = VBIF_0,
+ .name = "vbif_rt", .id = VBIF_RT,
.base = 0, .len = 0x1040,
.features = BIT(DPU_VBIF_QOS_REMAP),
.xin_halt_timeout = 0x4000,
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h
index bb9ceadeb0bb..598c201ae50d 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h
@@ -254,11 +254,9 @@ enum dpu_wd_timer {
};
enum dpu_vbif {
- VBIF_0,
- VBIF_1,
+ VBIF_RT,
+ VBIF_NRT,
VBIF_MAX,
- VBIF_RT = VBIF_0,
- VBIF_NRT = VBIF_1
};
/**
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c
index cbbf77b17fc3..c011d4ab6acc 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c
@@ -19,6 +19,18 @@ static struct dpu_hw_vbif *dpu_get_vbif(struct dpu_kms *dpu_kms, enum dpu_vbif v
return NULL;
}
+static const char *dpu_vbif_name(enum dpu_vbif idx)
+{
+ switch (idx) {
+ case VBIF_RT:
+ return "VBIF_RT";
+ case VBIF_NRT:
+ return "VBIF_NRT";
+ default:
+ return "??";
+ }
+}
+
/**
* _dpu_vbif_wait_for_xin_halt - wait for the xin to halt
* @vbif: Pointer to hardware vbif driver
@@ -50,12 +62,12 @@ static int _dpu_vbif_wait_for_xin_halt(struct dpu_hw_vbif *vbif, u32 xin_id)
if (!status) {
rc = -ETIMEDOUT;
- DPU_ERROR("VBIF %d client %d not halting. TIMEDOUT.\n",
- vbif->idx - VBIF_0, xin_id);
+ DPU_ERROR("%s client %d not halting. TIMEDOUT.\n",
+ dpu_vbif_name(vbif->idx), xin_id);
} else {
rc = 0;
- DRM_DEBUG_ATOMIC("VBIF %d client %d is halted\n",
- vbif->idx - VBIF_0, xin_id);
+ DRM_DEBUG_ATOMIC("%s client %d is halted\n",
+ dpu_vbif_name(vbif->idx), xin_id);
}
return rc;
@@ -95,8 +107,8 @@ static void _dpu_vbif_apply_dynamic_ot_limit(struct dpu_hw_vbif *vbif,
}
}
- DRM_DEBUG_ATOMIC("vbif:%d xin:%d w:%d h:%d fps:%d pps:%llu ot:%u\n",
- vbif->idx - VBIF_0, params->xin_id,
+ DRM_DEBUG_ATOMIC("%s xin:%d w:%d h:%d fps:%d pps:%llu ot:%u\n",
+ dpu_vbif_name(vbif->idx), params->xin_id,
params->width, params->height, params->frame_rate,
pps, *ot_lim);
}
@@ -141,8 +153,8 @@ static u32 _dpu_vbif_get_ot_limit(struct dpu_hw_vbif *vbif,
}
exit:
- DRM_DEBUG_ATOMIC("vbif:%d xin:%d ot_lim:%d\n",
- vbif->idx - VBIF_0, params->xin_id, ot_lim);
+ DRM_DEBUG_ATOMIC("%s xin:%d ot_lim:%d\n",
+ dpu_vbif_name(vbif->idx), params->xin_id, ot_lim);
return ot_lim;
}
@@ -242,8 +254,8 @@ void dpu_vbif_set_qos_remap(struct dpu_kms *dpu_kms,
forced_on = mdp->ops.setup_clk_force_ctrl(mdp, params->clk_ctrl, true);
for (i = 0; i < qos_tbl->npriority_lvl; i++) {
- DRM_DEBUG_ATOMIC("vbif:%d xin:%d lvl:%d/%d\n",
- params->vbif_idx, params->xin_id, i,
+ DRM_DEBUG_ATOMIC("%s xin:%d lvl:%d/%d\n",
+ dpu_vbif_name(params->vbif_idx), params->xin_id, i,
qos_tbl->priority_lvl[i]);
vbif->ops.set_qos_remap(vbif, params->xin_id, i,
qos_tbl->priority_lvl[i]);
@@ -263,8 +275,8 @@ void dpu_vbif_clear_errors(struct dpu_kms *dpu_kms)
if (vbif && vbif->ops.clear_errors) {
vbif->ops.clear_errors(vbif, &pnd, &src);
if (pnd || src) {
- DRM_DEBUG_KMS("VBIF %d: pnd 0x%X, src 0x%X\n",
- vbif->idx - VBIF_0, pnd, src);
+ DRM_DEBUG_KMS("%s: pnd 0x%X, src 0x%X\n",
+ dpu_vbif_name(vbif->idx), pnd, src);
}
}
}
--
2.34.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH 1/3] drm/msm/dpu: index dpu_kms->hw_vbif using vbif_idx
2022-02-17 3:45 ` Dmitry Baryshkov
@ 2022-03-29 21:24 ` Abhinav Kumar
-1 siblings, 0 replies; 12+ messages in thread
From: Abhinav Kumar @ 2022-03-29 21:24 UTC (permalink / raw)
To: Dmitry Baryshkov, Bjorn Andersson, Rob Clark, Sean Paul
Cc: David Airlie, linux-arm-msm, dri-devel, Stephen Boyd, freedreno
Assuming this series is newer and supersedes
https://patchwork.freedesktop.org/patch/464353/?series=97307&rev=2,
please check below.
On 2/16/2022 7:45 PM, Dmitry Baryshkov wrote:
> 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: 25fdd5933e4c ("drm/msm: Add SDM845 DPU support")
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> ---
> drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 10 ++++----
> drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c | 29 +++++++++++-------------
> 2 files changed, 17 insertions(+), 22 deletions(-)
>
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> index d0653a9ec694..81a35c8d62e7 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> @@ -790,11 +790,9 @@ 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]);
> + 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]);
> }
> }
>
> @@ -1102,7 +1100,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]);
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c
> index 21d20373eb8b..cbbf77b17fc3 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c
> @@ -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];
Shouldnt this be
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,20 +156,15 @@ 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;
>
> 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) {
> DRM_DEBUG_ATOMIC("invalid arguments vbif %d mdp %d\n",
> vbif != NULL, mdp != NULL);
> @@ -204,7 +207,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;
> @@ -216,13 +219,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);
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 1/3] drm/msm/dpu: index dpu_kms->hw_vbif using vbif_idx
@ 2022-03-29 21:24 ` Abhinav Kumar
0 siblings, 0 replies; 12+ messages in thread
From: Abhinav Kumar @ 2022-03-29 21:24 UTC (permalink / raw)
To: Dmitry Baryshkov, Bjorn Andersson, Rob Clark, Sean Paul
Cc: David Airlie, linux-arm-msm, freedreno, dri-devel, Stephen Boyd
Assuming this series is newer and supersedes
https://patchwork.freedesktop.org/patch/464353/?series=97307&rev=2,
please check below.
On 2/16/2022 7:45 PM, Dmitry Baryshkov wrote:
> 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: 25fdd5933e4c ("drm/msm: Add SDM845 DPU support")
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> ---
> drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 10 ++++----
> drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c | 29 +++++++++++-------------
> 2 files changed, 17 insertions(+), 22 deletions(-)
>
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> index d0653a9ec694..81a35c8d62e7 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> @@ -790,11 +790,9 @@ 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]);
> + 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]);
> }
> }
>
> @@ -1102,7 +1100,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]);
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c
> index 21d20373eb8b..cbbf77b17fc3 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c
> @@ -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];
Shouldnt this be
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,20 +156,15 @@ 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;
>
> 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) {
> DRM_DEBUG_ATOMIC("invalid arguments vbif %d mdp %d\n",
> vbif != NULL, mdp != NULL);
> @@ -204,7 +207,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;
> @@ -216,13 +219,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);
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 2/3] drm/msm/dpu: fix error handling around dpu_hw_vbif_init
2022-02-17 3:45 ` Dmitry Baryshkov
@ 2022-03-29 21:26 ` Abhinav Kumar
-1 siblings, 0 replies; 12+ messages in thread
From: Abhinav Kumar @ 2022-03-29 21:26 UTC (permalink / raw)
To: Dmitry Baryshkov, Bjorn Andersson, Rob Clark, Sean Paul
Cc: Stephen Boyd, David Airlie, Daniel Vetter, linux-arm-msm,
dri-devel, freedreno
On 2/16/2022 7:45 PM, Dmitry Baryshkov wrote:
> Using IS_ERR_OR_NULL() together with PTR_ERR() is a typical mistake. If
> the value is NULL, then the function will return 0 instead of a proper
> return code. Moreover dpu_hw_vbif_init() function can not return NULL.
> So, replace corresponding IS_ERR_OR_NULL() call with IS_ERR().
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
> ---
> drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 4 +---
> 1 file changed, 1 insertion(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> index 81a35c8d62e7..f8f1bf3b511d 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> @@ -1102,10 +1102,8 @@ static int dpu_kms_hw_init(struct msm_kms *kms)
>
> 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])) {
> + if (IS_ERR(dpu_kms->hw_vbif[vbif_idx])) {
> rc = PTR_ERR(dpu_kms->hw_vbif[vbif_idx]);
> - if (!dpu_kms->hw_vbif[vbif_idx])
> - rc = -EINVAL;
> DPU_ERROR("failed to init vbif %d: %d\n", vbif_idx, rc);
> dpu_kms->hw_vbif[vbif_idx] = NULL;
> goto power_error;
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 2/3] drm/msm/dpu: fix error handling around dpu_hw_vbif_init
@ 2022-03-29 21:26 ` Abhinav Kumar
0 siblings, 0 replies; 12+ messages in thread
From: Abhinav Kumar @ 2022-03-29 21:26 UTC (permalink / raw)
To: Dmitry Baryshkov, Bjorn Andersson, Rob Clark, Sean Paul
Cc: David Airlie, linux-arm-msm, dri-devel, Stephen Boyd, freedreno
On 2/16/2022 7:45 PM, Dmitry Baryshkov wrote:
> Using IS_ERR_OR_NULL() together with PTR_ERR() is a typical mistake. If
> the value is NULL, then the function will return 0 instead of a proper
> return code. Moreover dpu_hw_vbif_init() function can not return NULL.
> So, replace corresponding IS_ERR_OR_NULL() call with IS_ERR().
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
> ---
> drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 4 +---
> 1 file changed, 1 insertion(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> index 81a35c8d62e7..f8f1bf3b511d 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> @@ -1102,10 +1102,8 @@ static int dpu_kms_hw_init(struct msm_kms *kms)
>
> 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])) {
> + if (IS_ERR(dpu_kms->hw_vbif[vbif_idx])) {
> rc = PTR_ERR(dpu_kms->hw_vbif[vbif_idx]);
> - if (!dpu_kms->hw_vbif[vbif_idx])
> - rc = -EINVAL;
> DPU_ERROR("failed to init vbif %d: %d\n", vbif_idx, rc);
> dpu_kms->hw_vbif[vbif_idx] = NULL;
> goto power_error;
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 3/3] drm/msm/dpu: drop VBIF indices
2022-02-17 3:45 ` Dmitry Baryshkov
@ 2022-03-29 21:52 ` Abhinav Kumar
-1 siblings, 0 replies; 12+ messages in thread
From: Abhinav Kumar @ 2022-03-29 21:52 UTC (permalink / raw)
To: Dmitry Baryshkov, Bjorn Andersson, Rob Clark, Sean Paul
Cc: Stephen Boyd, David Airlie, Daniel Vetter, linux-arm-msm,
dri-devel, freedreno
On 2/16/2022 7:45 PM, Dmitry Baryshkov wrote:
> We do not expect to have other VBIFs. Drop VBIF_n indices and always use
> VBIF_RT and VBIF_NRT.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
> ---
> .../gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 4 +--
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h | 6 ++--
> drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c | 36 ++++++++++++-------
> 3 files changed, 28 insertions(+), 18 deletions(-)
>
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> index aa4d20762ccb..dbb853042aa0 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> @@ -1115,7 +1115,7 @@ static const struct dpu_vbif_dynamic_ot_cfg msm8998_ot_rdwr_cfg[] = {
>
> static const struct dpu_vbif_cfg msm8998_vbif[] = {
> {
> - .name = "vbif_0", .id = VBIF_0,
> + .name = "vbif_rt", .id = VBIF_RT,
> .base = 0, .len = 0x1040,
> .default_ot_rd_limit = 32,
> .default_ot_wr_limit = 32,
> @@ -1144,7 +1144,7 @@ static const struct dpu_vbif_cfg msm8998_vbif[] = {
>
> static const struct dpu_vbif_cfg sdm845_vbif[] = {
> {
> - .name = "vbif_0", .id = VBIF_0,
> + .name = "vbif_rt", .id = VBIF_RT,
> .base = 0, .len = 0x1040,
> .features = BIT(DPU_VBIF_QOS_REMAP),
> .xin_halt_timeout = 0x4000,
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h
> index bb9ceadeb0bb..598c201ae50d 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h
> @@ -254,11 +254,9 @@ enum dpu_wd_timer {
> };
>
> enum dpu_vbif {
> - VBIF_0,
> - VBIF_1,
> + VBIF_RT,
> + VBIF_NRT,
> VBIF_MAX,
> - VBIF_RT = VBIF_0,
> - VBIF_NRT = VBIF_1
> };
>
> /**
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c
> index cbbf77b17fc3..c011d4ab6acc 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c
> @@ -19,6 +19,18 @@ static struct dpu_hw_vbif *dpu_get_vbif(struct dpu_kms *dpu_kms, enum dpu_vbif v
> return NULL;
> }
>
> +static const char *dpu_vbif_name(enum dpu_vbif idx)
> +{
> + switch (idx) {
> + case VBIF_RT:
> + return "VBIF_RT";
> + case VBIF_NRT:
> + return "VBIF_NRT";
> + default:
> + return "??";
> + }
> +}
> +
> /**
> * _dpu_vbif_wait_for_xin_halt - wait for the xin to halt
> * @vbif: Pointer to hardware vbif driver
> @@ -50,12 +62,12 @@ static int _dpu_vbif_wait_for_xin_halt(struct dpu_hw_vbif *vbif, u32 xin_id)
>
> if (!status) {
> rc = -ETIMEDOUT;
> - DPU_ERROR("VBIF %d client %d not halting. TIMEDOUT.\n",
> - vbif->idx - VBIF_0, xin_id);
> + DPU_ERROR("%s client %d not halting. TIMEDOUT.\n",
> + dpu_vbif_name(vbif->idx), xin_id);
> } else {
> rc = 0;
> - DRM_DEBUG_ATOMIC("VBIF %d client %d is halted\n",
> - vbif->idx - VBIF_0, xin_id);
> + DRM_DEBUG_ATOMIC("%s client %d is halted\n",
> + dpu_vbif_name(vbif->idx), xin_id);
> }
>
> return rc;
> @@ -95,8 +107,8 @@ static void _dpu_vbif_apply_dynamic_ot_limit(struct dpu_hw_vbif *vbif,
> }
> }
>
> - DRM_DEBUG_ATOMIC("vbif:%d xin:%d w:%d h:%d fps:%d pps:%llu ot:%u\n",
> - vbif->idx - VBIF_0, params->xin_id,
> + DRM_DEBUG_ATOMIC("%s xin:%d w:%d h:%d fps:%d pps:%llu ot:%u\n",
> + dpu_vbif_name(vbif->idx), params->xin_id,
> params->width, params->height, params->frame_rate,
> pps, *ot_lim);
> }
> @@ -141,8 +153,8 @@ static u32 _dpu_vbif_get_ot_limit(struct dpu_hw_vbif *vbif,
> }
>
> exit:
> - DRM_DEBUG_ATOMIC("vbif:%d xin:%d ot_lim:%d\n",
> - vbif->idx - VBIF_0, params->xin_id, ot_lim);
> + DRM_DEBUG_ATOMIC("%s xin:%d ot_lim:%d\n",
> + dpu_vbif_name(vbif->idx), params->xin_id, ot_lim);
> return ot_lim;
> }
>
> @@ -242,8 +254,8 @@ void dpu_vbif_set_qos_remap(struct dpu_kms *dpu_kms,
> forced_on = mdp->ops.setup_clk_force_ctrl(mdp, params->clk_ctrl, true);
>
> for (i = 0; i < qos_tbl->npriority_lvl; i++) {
> - DRM_DEBUG_ATOMIC("vbif:%d xin:%d lvl:%d/%d\n",
> - params->vbif_idx, params->xin_id, i,
> + DRM_DEBUG_ATOMIC("%s xin:%d lvl:%d/%d\n",
> + dpu_vbif_name(params->vbif_idx), params->xin_id, i,
> qos_tbl->priority_lvl[i]);
> vbif->ops.set_qos_remap(vbif, params->xin_id, i,
> qos_tbl->priority_lvl[i]);
> @@ -263,8 +275,8 @@ void dpu_vbif_clear_errors(struct dpu_kms *dpu_kms)
> if (vbif && vbif->ops.clear_errors) {
> vbif->ops.clear_errors(vbif, &pnd, &src);
> if (pnd || src) {
> - DRM_DEBUG_KMS("VBIF %d: pnd 0x%X, src 0x%X\n",
> - vbif->idx - VBIF_0, pnd, src);
> + DRM_DEBUG_KMS("%s: pnd 0x%X, src 0x%X\n",
> + dpu_vbif_name(vbif->idx), pnd, src);
> }
> }
> }
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 3/3] drm/msm/dpu: drop VBIF indices
@ 2022-03-29 21:52 ` Abhinav Kumar
0 siblings, 0 replies; 12+ messages in thread
From: Abhinav Kumar @ 2022-03-29 21:52 UTC (permalink / raw)
To: Dmitry Baryshkov, Bjorn Andersson, Rob Clark, Sean Paul
Cc: David Airlie, linux-arm-msm, dri-devel, Stephen Boyd, freedreno
On 2/16/2022 7:45 PM, Dmitry Baryshkov wrote:
> We do not expect to have other VBIFs. Drop VBIF_n indices and always use
> VBIF_RT and VBIF_NRT.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
> ---
> .../gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 4 +--
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h | 6 ++--
> drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c | 36 ++++++++++++-------
> 3 files changed, 28 insertions(+), 18 deletions(-)
>
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> index aa4d20762ccb..dbb853042aa0 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> @@ -1115,7 +1115,7 @@ static const struct dpu_vbif_dynamic_ot_cfg msm8998_ot_rdwr_cfg[] = {
>
> static const struct dpu_vbif_cfg msm8998_vbif[] = {
> {
> - .name = "vbif_0", .id = VBIF_0,
> + .name = "vbif_rt", .id = VBIF_RT,
> .base = 0, .len = 0x1040,
> .default_ot_rd_limit = 32,
> .default_ot_wr_limit = 32,
> @@ -1144,7 +1144,7 @@ static const struct dpu_vbif_cfg msm8998_vbif[] = {
>
> static const struct dpu_vbif_cfg sdm845_vbif[] = {
> {
> - .name = "vbif_0", .id = VBIF_0,
> + .name = "vbif_rt", .id = VBIF_RT,
> .base = 0, .len = 0x1040,
> .features = BIT(DPU_VBIF_QOS_REMAP),
> .xin_halt_timeout = 0x4000,
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h
> index bb9ceadeb0bb..598c201ae50d 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h
> @@ -254,11 +254,9 @@ enum dpu_wd_timer {
> };
>
> enum dpu_vbif {
> - VBIF_0,
> - VBIF_1,
> + VBIF_RT,
> + VBIF_NRT,
> VBIF_MAX,
> - VBIF_RT = VBIF_0,
> - VBIF_NRT = VBIF_1
> };
>
> /**
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c
> index cbbf77b17fc3..c011d4ab6acc 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c
> @@ -19,6 +19,18 @@ static struct dpu_hw_vbif *dpu_get_vbif(struct dpu_kms *dpu_kms, enum dpu_vbif v
> return NULL;
> }
>
> +static const char *dpu_vbif_name(enum dpu_vbif idx)
> +{
> + switch (idx) {
> + case VBIF_RT:
> + return "VBIF_RT";
> + case VBIF_NRT:
> + return "VBIF_NRT";
> + default:
> + return "??";
> + }
> +}
> +
> /**
> * _dpu_vbif_wait_for_xin_halt - wait for the xin to halt
> * @vbif: Pointer to hardware vbif driver
> @@ -50,12 +62,12 @@ static int _dpu_vbif_wait_for_xin_halt(struct dpu_hw_vbif *vbif, u32 xin_id)
>
> if (!status) {
> rc = -ETIMEDOUT;
> - DPU_ERROR("VBIF %d client %d not halting. TIMEDOUT.\n",
> - vbif->idx - VBIF_0, xin_id);
> + DPU_ERROR("%s client %d not halting. TIMEDOUT.\n",
> + dpu_vbif_name(vbif->idx), xin_id);
> } else {
> rc = 0;
> - DRM_DEBUG_ATOMIC("VBIF %d client %d is halted\n",
> - vbif->idx - VBIF_0, xin_id);
> + DRM_DEBUG_ATOMIC("%s client %d is halted\n",
> + dpu_vbif_name(vbif->idx), xin_id);
> }
>
> return rc;
> @@ -95,8 +107,8 @@ static void _dpu_vbif_apply_dynamic_ot_limit(struct dpu_hw_vbif *vbif,
> }
> }
>
> - DRM_DEBUG_ATOMIC("vbif:%d xin:%d w:%d h:%d fps:%d pps:%llu ot:%u\n",
> - vbif->idx - VBIF_0, params->xin_id,
> + DRM_DEBUG_ATOMIC("%s xin:%d w:%d h:%d fps:%d pps:%llu ot:%u\n",
> + dpu_vbif_name(vbif->idx), params->xin_id,
> params->width, params->height, params->frame_rate,
> pps, *ot_lim);
> }
> @@ -141,8 +153,8 @@ static u32 _dpu_vbif_get_ot_limit(struct dpu_hw_vbif *vbif,
> }
>
> exit:
> - DRM_DEBUG_ATOMIC("vbif:%d xin:%d ot_lim:%d\n",
> - vbif->idx - VBIF_0, params->xin_id, ot_lim);
> + DRM_DEBUG_ATOMIC("%s xin:%d ot_lim:%d\n",
> + dpu_vbif_name(vbif->idx), params->xin_id, ot_lim);
> return ot_lim;
> }
>
> @@ -242,8 +254,8 @@ void dpu_vbif_set_qos_remap(struct dpu_kms *dpu_kms,
> forced_on = mdp->ops.setup_clk_force_ctrl(mdp, params->clk_ctrl, true);
>
> for (i = 0; i < qos_tbl->npriority_lvl; i++) {
> - DRM_DEBUG_ATOMIC("vbif:%d xin:%d lvl:%d/%d\n",
> - params->vbif_idx, params->xin_id, i,
> + DRM_DEBUG_ATOMIC("%s xin:%d lvl:%d/%d\n",
> + dpu_vbif_name(params->vbif_idx), params->xin_id, i,
> qos_tbl->priority_lvl[i]);
> vbif->ops.set_qos_remap(vbif, params->xin_id, i,
> qos_tbl->priority_lvl[i]);
> @@ -263,8 +275,8 @@ void dpu_vbif_clear_errors(struct dpu_kms *dpu_kms)
> if (vbif && vbif->ops.clear_errors) {
> vbif->ops.clear_errors(vbif, &pnd, &src);
> if (pnd || src) {
> - DRM_DEBUG_KMS("VBIF %d: pnd 0x%X, src 0x%X\n",
> - vbif->idx - VBIF_0, pnd, src);
> + DRM_DEBUG_KMS("%s: pnd 0x%X, src 0x%X\n",
> + dpu_vbif_name(vbif->idx), pnd, src);
> }
> }
> }
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2022-03-29 21:52 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-02-17 3:45 [PATCH 1/3] drm/msm/dpu: index dpu_kms->hw_vbif using vbif_idx Dmitry Baryshkov
2022-02-17 3:45 ` Dmitry Baryshkov
2022-02-17 3:45 ` [PATCH 2/3] drm/msm/dpu: fix error handling around dpu_hw_vbif_init Dmitry Baryshkov
2022-02-17 3:45 ` Dmitry Baryshkov
2022-03-29 21:26 ` Abhinav Kumar
2022-03-29 21:26 ` Abhinav Kumar
2022-02-17 3:45 ` [PATCH 3/3] drm/msm/dpu: drop VBIF indices Dmitry Baryshkov
2022-02-17 3:45 ` Dmitry Baryshkov
2022-03-29 21:52 ` Abhinav Kumar
2022-03-29 21:52 ` Abhinav Kumar
2022-03-29 21:24 ` [PATCH 1/3] drm/msm/dpu: index dpu_kms->hw_vbif using vbif_idx Abhinav Kumar
2022-03-29 21:24 ` Abhinav Kumar
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.