summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c')
-rw-r--r--drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c98
1 files changed, 39 insertions, 59 deletions
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
index a683bd9b5a04..0e7a68714e9e 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
@@ -250,6 +250,24 @@ void dpu_debugfs_create_regset32(const char *name, umode_t mode,
debugfs_create_file(name, mode, parent, regset, &dpu_regset32_fops);
}
+static void dpu_debugfs_sspp_init(struct dpu_kms *dpu_kms, struct dentry *debugfs_root)
+{
+ struct dentry *entry = debugfs_create_dir("sspp", debugfs_root);
+ int i;
+
+ if (IS_ERR(entry))
+ return;
+
+ for (i = SSPP_NONE; i < SSPP_MAX; i++) {
+ struct dpu_hw_sspp *hw = dpu_rm_get_sspp(&dpu_kms->rm, i);
+
+ if (!hw)
+ continue;
+
+ _dpu_hw_sspp_init_debugfs(hw, dpu_kms, entry);
+ }
+}
+
static int dpu_kms_debugfs_init(struct msm_kms *kms, struct drm_minor *minor)
{
struct dpu_kms *dpu_kms = to_dpu_kms(kms);
@@ -411,40 +429,6 @@ static void dpu_kms_disable_commit(struct msm_kms *kms)
pm_runtime_put_sync(&dpu_kms->pdev->dev);
}
-static ktime_t dpu_kms_vsync_time(struct msm_kms *kms, struct drm_crtc *crtc)
-{
- struct drm_encoder *encoder;
-
- drm_for_each_encoder_mask(encoder, crtc->dev, crtc->state->encoder_mask) {
- ktime_t vsync_time;
-
- if (dpu_encoder_vsync_time(encoder, &vsync_time) == 0)
- return vsync_time;
- }
-
- return ktime_get();
-}
-
-static void dpu_kms_prepare_commit(struct msm_kms *kms,
- struct drm_atomic_state *state)
-{
- struct drm_crtc *crtc;
- struct drm_crtc_state *crtc_state;
- struct drm_encoder *encoder;
- int i;
-
- if (!kms)
- return;
-
- /* Call prepare_commit for all affected encoders */
- for_each_new_crtc_in_state(state, crtc, crtc_state, i) {
- drm_for_each_encoder_mask(encoder, crtc->dev,
- crtc_state->encoder_mask) {
- dpu_encoder_prepare_commit(encoder);
- }
- }
-}
-
static void dpu_kms_flush_commit(struct msm_kms *kms, unsigned crtc_mask)
{
struct dpu_kms *dpu_kms = to_dpu_kms(kms);
@@ -491,7 +475,7 @@ static void dpu_kms_wait_for_commit_done(struct msm_kms *kms,
return;
}
- if (!crtc->state->active) {
+ if (!drm_atomic_crtc_effectively_active(crtc->state)) {
DPU_DEBUG("[crtc:%d] not active\n", crtc->base.id);
return;
}
@@ -953,8 +937,6 @@ static const struct msm_kms_funcs kms_funcs = {
.irq = dpu_core_irq,
.enable_commit = dpu_kms_enable_commit,
.disable_commit = dpu_kms_disable_commit,
- .vsync_time = dpu_kms_vsync_time,
- .prepare_commit = dpu_kms_prepare_commit,
.flush_commit = dpu_kms_flush_commit,
.wait_flush = dpu_kms_wait_flush,
.complete_commit = dpu_kms_complete_commit,
@@ -1013,6 +995,7 @@ static int dpu_kms_hw_init(struct msm_kms *kms)
struct dpu_kms *dpu_kms;
struct drm_device *dev;
int i, rc = -EINVAL;
+ u32 core_rev;
if (!kms) {
DPU_ERROR("invalid kms\n");
@@ -1062,17 +1045,14 @@ static int dpu_kms_hw_init(struct msm_kms *kms)
if (rc < 0)
goto error;
- dpu_kms->core_rev = readl_relaxed(dpu_kms->mmio + 0x0);
+ core_rev = readl_relaxed(dpu_kms->mmio + 0x0);
- pr_info("dpu hardware revision:0x%x\n", dpu_kms->core_rev);
+ pr_info("dpu hardware revision:0x%x\n", core_rev);
- dpu_kms->catalog = dpu_hw_catalog_init(dpu_kms->core_rev);
- if (IS_ERR_OR_NULL(dpu_kms->catalog)) {
- rc = PTR_ERR(dpu_kms->catalog);
- if (!dpu_kms->catalog)
- rc = -EINVAL;
- DPU_ERROR("catalog init failed: %d\n", rc);
- dpu_kms->catalog = NULL;
+ dpu_kms->catalog = of_device_get_match_data(dev->dev);
+ if (!dpu_kms->catalog) {
+ DPU_ERROR("device config not known!\n");
+ rc = -EINVAL;
goto power_error;
}
@@ -1298,19 +1278,19 @@ static const struct dev_pm_ops dpu_pm_ops = {
};
static const struct of_device_id dpu_dt_match[] = {
- { .compatible = "qcom,msm8998-dpu", },
- { .compatible = "qcom,qcm2290-dpu", },
- { .compatible = "qcom,sdm845-dpu", },
- { .compatible = "qcom,sc7180-dpu", },
- { .compatible = "qcom,sc7280-dpu", },
- { .compatible = "qcom,sc8180x-dpu", },
- { .compatible = "qcom,sc8280xp-dpu", },
- { .compatible = "qcom,sm6115-dpu", },
- { .compatible = "qcom,sm8150-dpu", },
- { .compatible = "qcom,sm8250-dpu", },
- { .compatible = "qcom,sm8350-dpu", },
- { .compatible = "qcom,sm8450-dpu", },
- { .compatible = "qcom,sm8550-dpu", },
+ { .compatible = "qcom,msm8998-dpu", .data = &dpu_msm8998_cfg, },
+ { .compatible = "qcom,qcm2290-dpu", .data = &dpu_qcm2290_cfg, },
+ { .compatible = "qcom,sdm845-dpu", .data = &dpu_sdm845_cfg, },
+ { .compatible = "qcom,sc7180-dpu", .data = &dpu_sc7180_cfg, },
+ { .compatible = "qcom,sc7280-dpu", .data = &dpu_sc7280_cfg, },
+ { .compatible = "qcom,sc8180x-dpu", .data = &dpu_sc8180x_cfg, },
+ { .compatible = "qcom,sc8280xp-dpu", .data = &dpu_sc8280xp_cfg, },
+ { .compatible = "qcom,sm6115-dpu", .data = &dpu_sm6115_cfg, },
+ { .compatible = "qcom,sm8150-dpu", .data = &dpu_sm8150_cfg, },
+ { .compatible = "qcom,sm8250-dpu", .data = &dpu_sm8250_cfg, },
+ { .compatible = "qcom,sm8350-dpu", .data = &dpu_sm8350_cfg, },
+ { .compatible = "qcom,sm8450-dpu", .data = &dpu_sm8450_cfg, },
+ { .compatible = "qcom,sm8550-dpu", .data = &dpu_sm8550_cfg, },
{}
};
MODULE_DEVICE_TABLE(of, dpu_dt_match);