diff options
| -rw-r--r-- | drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.c | 30 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.h | 9 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.c | 105 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.h | 7 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 30 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 31 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 104 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h | 6 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c | 3 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c | 90 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c | 24 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.h | 15 |
12 files changed, 93 insertions, 361 deletions
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.c index 9d5a8d217bc6..e45c69044935 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.c | |||
| @@ -319,10 +319,8 @@ static int dpu_debugfs_core_irq_show(struct seq_file *s, void *v) | |||
| 319 | unsigned long irq_flags; | 319 | unsigned long irq_flags; |
| 320 | int i, irq_count, enable_count, cb_count; | 320 | int i, irq_count, enable_count, cb_count; |
| 321 | 321 | ||
| 322 | if (!irq_obj || !irq_obj->enable_counts || !irq_obj->irq_cb_tbl) { | 322 | if (WARN_ON(!irq_obj->enable_counts || !irq_obj->irq_cb_tbl)) |
| 323 | DPU_ERROR("invalid parameters\n"); | ||
| 324 | return 0; | 323 | return 0; |
| 325 | } | ||
| 326 | 324 | ||
| 327 | for (i = 0; i < irq_obj->total_irqs; i++) { | 325 | for (i = 0; i < irq_obj->total_irqs; i++) { |
| 328 | spin_lock_irqsave(&irq_obj->cb_lock, irq_flags); | 326 | spin_lock_irqsave(&irq_obj->cb_lock, irq_flags); |
| @@ -343,31 +341,11 @@ static int dpu_debugfs_core_irq_show(struct seq_file *s, void *v) | |||
| 343 | 341 | ||
| 344 | DEFINE_DPU_DEBUGFS_SEQ_FOPS(dpu_debugfs_core_irq); | 342 | DEFINE_DPU_DEBUGFS_SEQ_FOPS(dpu_debugfs_core_irq); |
| 345 | 343 | ||
| 346 | int dpu_debugfs_core_irq_init(struct dpu_kms *dpu_kms, | 344 | void dpu_debugfs_core_irq_init(struct dpu_kms *dpu_kms, |
| 347 | struct dentry *parent) | ||
| 348 | { | ||
| 349 | dpu_kms->irq_obj.debugfs_file = debugfs_create_file("core_irq", 0600, | ||
| 350 | parent, &dpu_kms->irq_obj, | ||
| 351 | &dpu_debugfs_core_irq_fops); | ||
| 352 | |||
| 353 | return 0; | ||
| 354 | } | ||
| 355 | |||
| 356 | void dpu_debugfs_core_irq_destroy(struct dpu_kms *dpu_kms) | ||
| 357 | { | ||
| 358 | debugfs_remove(dpu_kms->irq_obj.debugfs_file); | ||
| 359 | dpu_kms->irq_obj.debugfs_file = NULL; | ||
| 360 | } | ||
| 361 | |||
| 362 | #else | ||
| 363 | int dpu_debugfs_core_irq_init(struct dpu_kms *dpu_kms, | ||
| 364 | struct dentry *parent) | 345 | struct dentry *parent) |
| 365 | { | 346 | { |
| 366 | return 0; | 347 | debugfs_create_file("core_irq", 0600, parent, &dpu_kms->irq_obj, |
| 367 | } | 348 | &dpu_debugfs_core_irq_fops); |
| 368 | |||
| 369 | void dpu_debugfs_core_irq_destroy(struct dpu_kms *dpu_kms) | ||
| 370 | { | ||
| 371 | } | 349 | } |
| 372 | #endif | 350 | #endif |
| 373 | 351 | ||
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.h index 884f77fa3eb6..e9015a2b23fe 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.h | |||
| @@ -132,15 +132,8 @@ int dpu_core_irq_unregister_callback( | |||
| 132 | * dpu_debugfs_core_irq_init - register core irq debugfs | 132 | * dpu_debugfs_core_irq_init - register core irq debugfs |
| 133 | * @dpu_kms: pointer to kms | 133 | * @dpu_kms: pointer to kms |
| 134 | * @parent: debugfs directory root | 134 | * @parent: debugfs directory root |
| 135 | * @Return: 0 on success | ||
| 136 | */ | 135 | */ |
| 137 | int dpu_debugfs_core_irq_init(struct dpu_kms *dpu_kms, | 136 | void dpu_debugfs_core_irq_init(struct dpu_kms *dpu_kms, |
| 138 | struct dentry *parent); | 137 | struct dentry *parent); |
| 139 | 138 | ||
| 140 | /** | ||
| 141 | * dpu_debugfs_core_irq_destroy - deregister core irq debugfs | ||
| 142 | * @dpu_kms: pointer to kms | ||
| 143 | */ | ||
| 144 | void dpu_debugfs_core_irq_destroy(struct dpu_kms *dpu_kms); | ||
| 145 | |||
| 146 | #endif /* __DPU_CORE_IRQ_H__ */ | 139 | #endif /* __DPU_CORE_IRQ_H__ */ |
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.c index e8a87f4b8e0e..9f20f397f77d 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.c | |||
| @@ -24,8 +24,6 @@ | |||
| 24 | #include "dpu_crtc.h" | 24 | #include "dpu_crtc.h" |
| 25 | #include "dpu_core_perf.h" | 25 | #include "dpu_core_perf.h" |
| 26 | 26 | ||
| 27 | #define DPU_PERF_MODE_STRING_SIZE 128 | ||
| 28 | |||
| 29 | /** | 27 | /** |
| 30 | * enum dpu_perf_mode - performance tuning mode | 28 | * enum dpu_perf_mode - performance tuning mode |
| 31 | * @DPU_PERF_MODE_NORMAL: performance controlled by user mode client | 29 | * @DPU_PERF_MODE_NORMAL: performance controlled by user mode client |
| @@ -451,24 +449,14 @@ static ssize_t _dpu_core_perf_mode_write(struct file *file, | |||
| 451 | struct dpu_core_perf *perf = file->private_data; | 449 | struct dpu_core_perf *perf = file->private_data; |
| 452 | struct dpu_perf_cfg *cfg = &perf->catalog->perf; | 450 | struct dpu_perf_cfg *cfg = &perf->catalog->perf; |
| 453 | u32 perf_mode = 0; | 451 | u32 perf_mode = 0; |
| 454 | char buf[10]; | 452 | int ret; |
| 455 | |||
| 456 | if (!perf) | ||
| 457 | return -ENODEV; | ||
| 458 | |||
| 459 | if (count >= sizeof(buf)) | ||
| 460 | return -EFAULT; | ||
| 461 | |||
| 462 | if (copy_from_user(buf, user_buf, count)) | ||
| 463 | return -EFAULT; | ||
| 464 | |||
| 465 | buf[count] = 0; /* end of string */ | ||
| 466 | 453 | ||
| 467 | if (kstrtouint(buf, 0, &perf_mode)) | 454 | ret = kstrtouint_from_user(user_buf, count, 0, &perf_mode); |
| 468 | return -EFAULT; | 455 | if (ret) |
| 456 | return ret; | ||
| 469 | 457 | ||
| 470 | if (perf_mode >= DPU_PERF_MODE_MAX) | 458 | if (perf_mode >= DPU_PERF_MODE_MAX) |
| 471 | return -EFAULT; | 459 | return -EINVAL; |
| 472 | 460 | ||
| 473 | if (perf_mode == DPU_PERF_MODE_FIXED) { | 461 | if (perf_mode == DPU_PERF_MODE_FIXED) { |
| 474 | DRM_INFO("fix performance mode\n"); | 462 | DRM_INFO("fix performance mode\n"); |
| @@ -493,29 +481,16 @@ static ssize_t _dpu_core_perf_mode_read(struct file *file, | |||
| 493 | char __user *buff, size_t count, loff_t *ppos) | 481 | char __user *buff, size_t count, loff_t *ppos) |
| 494 | { | 482 | { |
| 495 | struct dpu_core_perf *perf = file->private_data; | 483 | struct dpu_core_perf *perf = file->private_data; |
| 496 | int len = 0; | 484 | int len; |
| 497 | char buf[DPU_PERF_MODE_STRING_SIZE] = {'\0'}; | 485 | char buf[128]; |
| 498 | 486 | ||
| 499 | if (!perf) | 487 | len = scnprintf(buf, sizeof(buf), |
| 500 | return -ENODEV; | ||
| 501 | |||
| 502 | if (*ppos) | ||
| 503 | return 0; /* the end */ | ||
| 504 | |||
| 505 | len = snprintf(buf, sizeof(buf), | ||
| 506 | "mode %d min_mdp_clk %llu min_bus_vote %llu\n", | 488 | "mode %d min_mdp_clk %llu min_bus_vote %llu\n", |
| 507 | perf->perf_tune.mode, | 489 | perf->perf_tune.mode, |
| 508 | perf->perf_tune.min_core_clk, | 490 | perf->perf_tune.min_core_clk, |
| 509 | perf->perf_tune.min_bus_vote); | 491 | perf->perf_tune.min_bus_vote); |
| 510 | if (len < 0 || len >= sizeof(buf)) | ||
| 511 | return 0; | ||
| 512 | |||
| 513 | if ((count < sizeof(buf)) || copy_to_user(buff, buf, len)) | ||
| 514 | return -EFAULT; | ||
| 515 | 492 | ||
| 516 | *ppos += len; /* increase offset */ | 493 | return simple_read_from_buffer(buff, count, ppos, buf, len); |
| 517 | |||
| 518 | return len; | ||
| 519 | } | 494 | } |
| 520 | 495 | ||
| 521 | static const struct file_operations dpu_core_perf_mode_fops = { | 496 | static const struct file_operations dpu_core_perf_mode_fops = { |
| @@ -524,70 +499,43 @@ static const struct file_operations dpu_core_perf_mode_fops = { | |||
| 524 | .write = _dpu_core_perf_mode_write, | 499 | .write = _dpu_core_perf_mode_write, |
| 525 | }; | 500 | }; |
| 526 | 501 | ||
| 527 | static void dpu_core_perf_debugfs_destroy(struct dpu_core_perf *perf) | 502 | int dpu_core_perf_debugfs_init(struct dpu_kms *dpu_kms, struct dentry *parent) |
| 528 | { | ||
| 529 | debugfs_remove_recursive(perf->debugfs_root); | ||
| 530 | perf->debugfs_root = NULL; | ||
| 531 | } | ||
| 532 | |||
| 533 | int dpu_core_perf_debugfs_init(struct dpu_core_perf *perf, | ||
| 534 | struct dentry *parent) | ||
| 535 | { | 503 | { |
| 504 | struct dpu_core_perf *perf = &dpu_kms->perf; | ||
| 536 | struct dpu_mdss_cfg *catalog = perf->catalog; | 505 | struct dpu_mdss_cfg *catalog = perf->catalog; |
| 537 | struct msm_drm_private *priv; | 506 | struct dentry *entry; |
| 538 | struct dpu_kms *dpu_kms; | ||
| 539 | |||
| 540 | priv = perf->dev->dev_private; | ||
| 541 | if (!priv || !priv->kms) { | ||
| 542 | DPU_ERROR("invalid KMS reference\n"); | ||
| 543 | return -EINVAL; | ||
| 544 | } | ||
| 545 | |||
| 546 | dpu_kms = to_dpu_kms(priv->kms); | ||
| 547 | 507 | ||
| 548 | perf->debugfs_root = debugfs_create_dir("core_perf", parent); | 508 | entry = debugfs_create_dir("core_perf", parent); |
| 549 | if (!perf->debugfs_root) { | 509 | if (IS_ERR_OR_NULL(entry)) |
| 550 | DPU_ERROR("failed to create core perf debugfs\n"); | ||
| 551 | return -EINVAL; | 510 | return -EINVAL; |
| 552 | } | ||
| 553 | 511 | ||
| 554 | debugfs_create_u64("max_core_clk_rate", 0600, perf->debugfs_root, | 512 | debugfs_create_u64("max_core_clk_rate", 0600, entry, |
| 555 | &perf->max_core_clk_rate); | 513 | &perf->max_core_clk_rate); |
| 556 | debugfs_create_u64("core_clk_rate", 0600, perf->debugfs_root, | 514 | debugfs_create_u64("core_clk_rate", 0600, entry, |
| 557 | &perf->core_clk_rate); | 515 | &perf->core_clk_rate); |
| 558 | debugfs_create_u32("enable_bw_release", 0600, perf->debugfs_root, | 516 | debugfs_create_u32("enable_bw_release", 0600, entry, |
| 559 | (u32 *)&perf->enable_bw_release); | 517 | (u32 *)&perf->enable_bw_release); |
| 560 | debugfs_create_u32("threshold_low", 0600, perf->debugfs_root, | 518 | debugfs_create_u32("threshold_low", 0600, entry, |
| 561 | (u32 *)&catalog->perf.max_bw_low); | 519 | (u32 *)&catalog->perf.max_bw_low); |
| 562 | debugfs_create_u32("threshold_high", 0600, perf->debugfs_root, | 520 | debugfs_create_u32("threshold_high", 0600, entry, |
| 563 | (u32 *)&catalog->perf.max_bw_high); | 521 | (u32 *)&catalog->perf.max_bw_high); |
| 564 | debugfs_create_u32("min_core_ib", 0600, perf->debugfs_root, | 522 | debugfs_create_u32("min_core_ib", 0600, entry, |
| 565 | (u32 *)&catalog->perf.min_core_ib); | 523 | (u32 *)&catalog->perf.min_core_ib); |
| 566 | debugfs_create_u32("min_llcc_ib", 0600, perf->debugfs_root, | 524 | debugfs_create_u32("min_llcc_ib", 0600, entry, |
| 567 | (u32 *)&catalog->perf.min_llcc_ib); | 525 | (u32 *)&catalog->perf.min_llcc_ib); |
| 568 | debugfs_create_u32("min_dram_ib", 0600, perf->debugfs_root, | 526 | debugfs_create_u32("min_dram_ib", 0600, entry, |
| 569 | (u32 *)&catalog->perf.min_dram_ib); | 527 | (u32 *)&catalog->perf.min_dram_ib); |
| 570 | debugfs_create_file("perf_mode", 0600, perf->debugfs_root, | 528 | debugfs_create_file("perf_mode", 0600, entry, |
| 571 | (u32 *)perf, &dpu_core_perf_mode_fops); | 529 | (u32 *)perf, &dpu_core_perf_mode_fops); |
| 572 | debugfs_create_u64("fix_core_clk_rate", 0600, perf->debugfs_root, | 530 | debugfs_create_u64("fix_core_clk_rate", 0600, entry, |
| 573 | &perf->fix_core_clk_rate); | 531 | &perf->fix_core_clk_rate); |
| 574 | debugfs_create_u64("fix_core_ib_vote", 0600, perf->debugfs_root, | 532 | debugfs_create_u64("fix_core_ib_vote", 0600, entry, |
| 575 | &perf->fix_core_ib_vote); | 533 | &perf->fix_core_ib_vote); |
| 576 | debugfs_create_u64("fix_core_ab_vote", 0600, perf->debugfs_root, | 534 | debugfs_create_u64("fix_core_ab_vote", 0600, entry, |
| 577 | &perf->fix_core_ab_vote); | 535 | &perf->fix_core_ab_vote); |
| 578 | 536 | ||
| 579 | return 0; | 537 | return 0; |
| 580 | } | 538 | } |
| 581 | #else | ||
| 582 | static void dpu_core_perf_debugfs_destroy(struct dpu_core_perf *perf) | ||
| 583 | { | ||
| 584 | } | ||
| 585 | |||
| 586 | int dpu_core_perf_debugfs_init(struct dpu_core_perf *perf, | ||
| 587 | struct dentry *parent) | ||
| 588 | { | ||
| 589 | return 0; | ||
| 590 | } | ||
| 591 | #endif | 539 | #endif |
| 592 | 540 | ||
| 593 | void dpu_core_perf_destroy(struct dpu_core_perf *perf) | 541 | void dpu_core_perf_destroy(struct dpu_core_perf *perf) |
| @@ -597,7 +545,6 @@ void dpu_core_perf_destroy(struct dpu_core_perf *perf) | |||
| 597 | return; | 545 | return; |
| 598 | } | 546 | } |
| 599 | 547 | ||
| 600 | dpu_core_perf_debugfs_destroy(perf); | ||
| 601 | perf->max_core_clk_rate = 0; | 548 | perf->max_core_clk_rate = 0; |
| 602 | perf->core_clk = NULL; | 549 | perf->core_clk = NULL; |
| 603 | perf->catalog = NULL; | 550 | perf->catalog = NULL; |
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.h index c708451a94a1..37f518815eb7 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_core_perf.h | |||
| @@ -130,12 +130,13 @@ int dpu_core_perf_init(struct dpu_core_perf *perf, | |||
| 130 | struct dpu_mdss_cfg *catalog, | 130 | struct dpu_mdss_cfg *catalog, |
| 131 | struct dss_clk *core_clk); | 131 | struct dss_clk *core_clk); |
| 132 | 132 | ||
| 133 | struct dpu_kms; | ||
| 134 | |||
| 133 | /** | 135 | /** |
| 134 | * dpu_core_perf_debugfs_init - initialize debugfs for core performance context | 136 | * dpu_core_perf_debugfs_init - initialize debugfs for core performance context |
| 135 | * @perf: Pointer to core performance context | 137 | * @dpu_kms: Pointer to the dpu_kms struct |
| 136 | * @debugfs_parent: Pointer to parent debugfs | 138 | * @debugfs_parent: Pointer to parent debugfs |
| 137 | */ | 139 | */ |
| 138 | int dpu_core_perf_debugfs_init(struct dpu_core_perf *perf, | 140 | int dpu_core_perf_debugfs_init(struct dpu_kms *dpu_kms, struct dentry *parent); |
| 139 | struct dentry *parent); | ||
| 140 | 141 | ||
| 141 | #endif /* _DPU_CORE_PERF_H_ */ | 142 | #endif /* _DPU_CORE_PERF_H_ */ |
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c index ffdb90c70c34..3090854a8575 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | |||
| @@ -1186,9 +1186,6 @@ static int _dpu_debugfs_status_show(struct seq_file *s, void *data) | |||
| 1186 | 1186 | ||
| 1187 | int i, out_width; | 1187 | int i, out_width; |
| 1188 | 1188 | ||
| 1189 | if (!s || !s->private) | ||
| 1190 | return -EINVAL; | ||
| 1191 | |||
| 1192 | dpu_crtc = s->private; | 1189 | dpu_crtc = s->private; |
| 1193 | crtc = &dpu_crtc->base; | 1190 | crtc = &dpu_crtc->base; |
| 1194 | 1191 | ||
| @@ -1328,8 +1325,7 @@ DEFINE_DPU_DEBUGFS_SEQ_FOPS(dpu_crtc_debugfs_state); | |||
| 1328 | 1325 | ||
| 1329 | static int _dpu_crtc_init_debugfs(struct drm_crtc *crtc) | 1326 | static int _dpu_crtc_init_debugfs(struct drm_crtc *crtc) |
| 1330 | { | 1327 | { |
| 1331 | struct dpu_crtc *dpu_crtc; | 1328 | struct dpu_crtc *dpu_crtc = to_dpu_crtc(crtc); |
| 1332 | struct dpu_kms *dpu_kms; | ||
| 1333 | 1329 | ||
| 1334 | static const struct file_operations debugfs_status_fops = { | 1330 | static const struct file_operations debugfs_status_fops = { |
| 1335 | .open = _dpu_debugfs_status_open, | 1331 | .open = _dpu_debugfs_status_open, |
| @@ -1338,12 +1334,6 @@ static int _dpu_crtc_init_debugfs(struct drm_crtc *crtc) | |||
| 1338 | .release = single_release, | 1334 | .release = single_release, |
| 1339 | }; | 1335 | }; |
| 1340 | 1336 | ||
| 1341 | if (!crtc) | ||
| 1342 | return -EINVAL; | ||
| 1343 | dpu_crtc = to_dpu_crtc(crtc); | ||
| 1344 | |||
| 1345 | dpu_kms = _dpu_crtc_get_kms(crtc); | ||
| 1346 | |||
| 1347 | dpu_crtc->debugfs_root = debugfs_create_dir(dpu_crtc->name, | 1337 | dpu_crtc->debugfs_root = debugfs_create_dir(dpu_crtc->name, |
| 1348 | crtc->dev->primary->debugfs_root); | 1338 | crtc->dev->primary->debugfs_root); |
| 1349 | if (!dpu_crtc->debugfs_root) | 1339 | if (!dpu_crtc->debugfs_root) |
| @@ -1360,25 +1350,11 @@ static int _dpu_crtc_init_debugfs(struct drm_crtc *crtc) | |||
| 1360 | 1350 | ||
| 1361 | return 0; | 1351 | return 0; |
| 1362 | } | 1352 | } |
| 1363 | |||
| 1364 | static void _dpu_crtc_destroy_debugfs(struct drm_crtc *crtc) | ||
| 1365 | { | ||
| 1366 | struct dpu_crtc *dpu_crtc; | ||
| 1367 | |||
| 1368 | if (!crtc) | ||
| 1369 | return; | ||
| 1370 | dpu_crtc = to_dpu_crtc(crtc); | ||
| 1371 | debugfs_remove_recursive(dpu_crtc->debugfs_root); | ||
| 1372 | } | ||
| 1373 | #else | 1353 | #else |
| 1374 | static int _dpu_crtc_init_debugfs(struct drm_crtc *crtc) | 1354 | static int _dpu_crtc_init_debugfs(struct drm_crtc *crtc) |
| 1375 | { | 1355 | { |
| 1376 | return 0; | 1356 | return 0; |
| 1377 | } | 1357 | } |
| 1378 | |||
| 1379 | static void _dpu_crtc_destroy_debugfs(struct drm_crtc *crtc) | ||
| 1380 | { | ||
| 1381 | } | ||
| 1382 | #endif /* CONFIG_DEBUG_FS */ | 1358 | #endif /* CONFIG_DEBUG_FS */ |
| 1383 | 1359 | ||
| 1384 | static int dpu_crtc_late_register(struct drm_crtc *crtc) | 1360 | static int dpu_crtc_late_register(struct drm_crtc *crtc) |
| @@ -1388,7 +1364,9 @@ static int dpu_crtc_late_register(struct drm_crtc *crtc) | |||
| 1388 | 1364 | ||
| 1389 | static void dpu_crtc_early_unregister(struct drm_crtc *crtc) | 1365 | static void dpu_crtc_early_unregister(struct drm_crtc *crtc) |
| 1390 | { | 1366 | { |
| 1391 | _dpu_crtc_destroy_debugfs(crtc); | 1367 | struct dpu_crtc *dpu_crtc = to_dpu_crtc(crtc); |
| 1368 | |||
| 1369 | debugfs_remove_recursive(dpu_crtc->debugfs_root); | ||
| 1392 | } | 1370 | } |
| 1393 | 1371 | ||
| 1394 | static const struct drm_crtc_funcs dpu_crtc_funcs = { | 1372 | static const struct drm_crtc_funcs dpu_crtc_funcs = { |
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c index c1baab4c72d2..0dda4a603685 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | |||
| @@ -1863,14 +1863,9 @@ void dpu_encoder_prepare_commit(struct drm_encoder *drm_enc) | |||
| 1863 | #ifdef CONFIG_DEBUG_FS | 1863 | #ifdef CONFIG_DEBUG_FS |
| 1864 | static int _dpu_encoder_status_show(struct seq_file *s, void *data) | 1864 | static int _dpu_encoder_status_show(struct seq_file *s, void *data) |
| 1865 | { | 1865 | { |
| 1866 | struct dpu_encoder_virt *dpu_enc; | 1866 | struct dpu_encoder_virt *dpu_enc = s->private; |
| 1867 | int i; | 1867 | int i; |
| 1868 | 1868 | ||
| 1869 | if (!s || !s->private) | ||
| 1870 | return -EINVAL; | ||
| 1871 | |||
| 1872 | dpu_enc = s->private; | ||
| 1873 | |||
| 1874 | mutex_lock(&dpu_enc->enc_lock); | 1869 | mutex_lock(&dpu_enc->enc_lock); |
| 1875 | for (i = 0; i < dpu_enc->num_phys_encs; i++) { | 1870 | for (i = 0; i < dpu_enc->num_phys_encs; i++) { |
| 1876 | struct dpu_encoder_phys *phys = dpu_enc->phys_encs[i]; | 1871 | struct dpu_encoder_phys *phys = dpu_enc->phys_encs[i]; |
| @@ -1908,7 +1903,7 @@ static int _dpu_encoder_debugfs_status_open(struct inode *inode, | |||
| 1908 | 1903 | ||
| 1909 | static int _dpu_encoder_init_debugfs(struct drm_encoder *drm_enc) | 1904 | static int _dpu_encoder_init_debugfs(struct drm_encoder *drm_enc) |
| 1910 | { | 1905 | { |
| 1911 | struct dpu_encoder_virt *dpu_enc; | 1906 | struct dpu_encoder_virt *dpu_enc = to_dpu_encoder_virt(drm_enc); |
| 1912 | struct msm_drm_private *priv; | 1907 | struct msm_drm_private *priv; |
| 1913 | struct dpu_kms *dpu_kms; | 1908 | struct dpu_kms *dpu_kms; |
| 1914 | int i; | 1909 | int i; |
| @@ -1922,12 +1917,11 @@ static int _dpu_encoder_init_debugfs(struct drm_encoder *drm_enc) | |||
| 1922 | 1917 | ||
| 1923 | char name[DPU_NAME_SIZE]; | 1918 | char name[DPU_NAME_SIZE]; |
| 1924 | 1919 | ||
| 1925 | if (!drm_enc || !drm_enc->dev || !drm_enc->dev->dev_private) { | 1920 | if (!drm_enc->dev || !drm_enc->dev->dev_private) { |
| 1926 | DPU_ERROR("invalid encoder or kms\n"); | 1921 | DPU_ERROR("invalid encoder or kms\n"); |
| 1927 | return -EINVAL; | 1922 | return -EINVAL; |
| 1928 | } | 1923 | } |
| 1929 | 1924 | ||
| 1930 | dpu_enc = to_dpu_encoder_virt(drm_enc); | ||
| 1931 | priv = drm_enc->dev->dev_private; | 1925 | priv = drm_enc->dev->dev_private; |
| 1932 | dpu_kms = to_dpu_kms(priv->kms); | 1926 | dpu_kms = to_dpu_kms(priv->kms); |
| 1933 | 1927 | ||
| @@ -1952,26 +1946,11 @@ static int _dpu_encoder_init_debugfs(struct drm_encoder *drm_enc) | |||
| 1952 | 1946 | ||
| 1953 | return 0; | 1947 | return 0; |
| 1954 | } | 1948 | } |
| 1955 | |||
| 1956 | static void _dpu_encoder_destroy_debugfs(struct drm_encoder *drm_enc) | ||
| 1957 | { | ||
| 1958 | struct dpu_encoder_virt *dpu_enc; | ||
| 1959 | |||
| 1960 | if (!drm_enc) | ||
| 1961 | return; | ||
| 1962 | |||
| 1963 | dpu_enc = to_dpu_encoder_virt(drm_enc); | ||
| 1964 | debugfs_remove_recursive(dpu_enc->debugfs_root); | ||
| 1965 | } | ||
| 1966 | #else | 1949 | #else |
| 1967 | static int _dpu_encoder_init_debugfs(struct drm_encoder *drm_enc) | 1950 | static int _dpu_encoder_init_debugfs(struct drm_encoder *drm_enc) |
| 1968 | { | 1951 | { |
| 1969 | return 0; | 1952 | return 0; |
| 1970 | } | 1953 | } |
| 1971 | |||
| 1972 | static void _dpu_encoder_destroy_debugfs(struct drm_encoder *drm_enc) | ||
| 1973 | { | ||
| 1974 | } | ||
| 1975 | #endif | 1954 | #endif |
| 1976 | 1955 | ||
| 1977 | static int dpu_encoder_late_register(struct drm_encoder *encoder) | 1956 | static int dpu_encoder_late_register(struct drm_encoder *encoder) |
| @@ -1981,7 +1960,9 @@ static int dpu_encoder_late_register(struct drm_encoder *encoder) | |||
| 1981 | 1960 | ||
| 1982 | static void dpu_encoder_early_unregister(struct drm_encoder *encoder) | 1961 | static void dpu_encoder_early_unregister(struct drm_encoder *encoder) |
| 1983 | { | 1962 | { |
| 1984 | _dpu_encoder_destroy_debugfs(encoder); | 1963 | struct dpu_encoder_virt *dpu_enc = to_dpu_encoder_virt(encoder); |
| 1964 | |||
| 1965 | debugfs_remove_recursive(dpu_enc->debugfs_root); | ||
| 1985 | } | 1966 | } |
| 1986 | 1967 | ||
| 1987 | static int dpu_encoder_virt_add_phys_encs( | 1968 | static int dpu_encoder_virt_add_phys_encs( |
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c index 37dfee1ebba9..51a4a5f7c7f9 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | |||
| @@ -81,7 +81,7 @@ static int _dpu_danger_signal_status(struct seq_file *s, | |||
| 81 | struct dpu_danger_safe_status status; | 81 | struct dpu_danger_safe_status status; |
| 82 | int i; | 82 | int i; |
| 83 | 83 | ||
| 84 | if (!kms || !kms->dev || !kms->dev->dev_private || !kms->hw_mdp) { | 84 | if (!kms->dev || !kms->dev->dev_private || !kms->hw_mdp) { |
| 85 | DPU_ERROR("invalid arg(s)\n"); | 85 | DPU_ERROR("invalid arg(s)\n"); |
| 86 | return 0; | 86 | return 0; |
| 87 | } | 87 | } |
| @@ -138,46 +138,29 @@ static int dpu_debugfs_safe_stats_show(struct seq_file *s, void *v) | |||
| 138 | } | 138 | } |
| 139 | DEFINE_DPU_DEBUGFS_SEQ_FOPS(dpu_debugfs_safe_stats); | 139 | DEFINE_DPU_DEBUGFS_SEQ_FOPS(dpu_debugfs_safe_stats); |
| 140 | 140 | ||
| 141 | static void dpu_debugfs_danger_destroy(struct dpu_kms *dpu_kms) | 141 | static void dpu_debugfs_danger_init(struct dpu_kms *dpu_kms, |
| 142 | { | ||
| 143 | debugfs_remove_recursive(dpu_kms->debugfs_danger); | ||
| 144 | dpu_kms->debugfs_danger = NULL; | ||
| 145 | } | ||
| 146 | |||
| 147 | static int dpu_debugfs_danger_init(struct dpu_kms *dpu_kms, | ||
| 148 | struct dentry *parent) | 142 | struct dentry *parent) |
| 149 | { | 143 | { |
| 150 | dpu_kms->debugfs_danger = debugfs_create_dir("danger", | 144 | struct dentry *entry = debugfs_create_dir("danger", parent); |
| 151 | parent); | 145 | if (IS_ERR_OR_NULL(entry)) |
| 152 | if (!dpu_kms->debugfs_danger) { | 146 | return; |
| 153 | DPU_ERROR("failed to create danger debugfs\n"); | ||
| 154 | return -EINVAL; | ||
| 155 | } | ||
| 156 | 147 | ||
| 157 | debugfs_create_file("danger_status", 0600, dpu_kms->debugfs_danger, | 148 | debugfs_create_file("danger_status", 0600, entry, |
| 158 | dpu_kms, &dpu_debugfs_danger_stats_fops); | 149 | dpu_kms, &dpu_debugfs_danger_stats_fops); |
| 159 | debugfs_create_file("safe_status", 0600, dpu_kms->debugfs_danger, | 150 | debugfs_create_file("safe_status", 0600, entry, |
| 160 | dpu_kms, &dpu_debugfs_safe_stats_fops); | 151 | dpu_kms, &dpu_debugfs_safe_stats_fops); |
| 161 | |||
| 162 | return 0; | ||
| 163 | } | 152 | } |
| 164 | 153 | ||
| 165 | static int _dpu_debugfs_show_regset32(struct seq_file *s, void *data) | 154 | static int _dpu_debugfs_show_regset32(struct seq_file *s, void *data) |
| 166 | { | 155 | { |
| 167 | struct dpu_debugfs_regset32 *regset; | 156 | struct dpu_debugfs_regset32 *regset = s->private; |
| 168 | struct dpu_kms *dpu_kms; | 157 | struct dpu_kms *dpu_kms = regset->dpu_kms; |
| 169 | struct drm_device *dev; | 158 | struct drm_device *dev; |
| 170 | struct msm_drm_private *priv; | 159 | struct msm_drm_private *priv; |
| 171 | void __iomem *base; | 160 | void __iomem *base; |
| 172 | uint32_t i, addr; | 161 | uint32_t i, addr; |
| 173 | 162 | ||
| 174 | if (!s || !s->private) | 163 | if (!dpu_kms->mmio) |
| 175 | return 0; | ||
| 176 | |||
| 177 | regset = s->private; | ||
| 178 | |||
| 179 | dpu_kms = regset->dpu_kms; | ||
| 180 | if (!dpu_kms || !dpu_kms->mmio) | ||
| 181 | return 0; | 164 | return 0; |
| 182 | 165 | ||
| 183 | dev = dpu_kms->dev; | 166 | dev = dpu_kms->dev; |
| @@ -250,51 +233,24 @@ void *dpu_debugfs_create_regset32(const char *name, umode_t mode, | |||
| 250 | 233 | ||
| 251 | static int _dpu_debugfs_init(struct dpu_kms *dpu_kms) | 234 | static int _dpu_debugfs_init(struct dpu_kms *dpu_kms) |
| 252 | { | 235 | { |
| 253 | void *p; | 236 | void *p = dpu_hw_util_get_log_mask_ptr(); |
| 254 | int rc; | 237 | struct dentry *entry; |
| 255 | |||
| 256 | p = dpu_hw_util_get_log_mask_ptr(); | ||
| 257 | 238 | ||
| 258 | if (!dpu_kms || !p) | 239 | if (!p) |
| 259 | return -EINVAL; | 240 | return -EINVAL; |
| 260 | 241 | ||
| 261 | dpu_kms->debugfs_root = debugfs_create_dir("debug", | 242 | entry = debugfs_create_dir("debug", dpu_kms->dev->primary->debugfs_root); |
| 262 | dpu_kms->dev->primary->debugfs_root); | 243 | if (IS_ERR_OR_NULL(entry)) |
| 263 | if (IS_ERR_OR_NULL(dpu_kms->debugfs_root)) { | 244 | return -ENODEV; |
| 264 | DRM_ERROR("debugfs create_dir failed %ld\n", | ||
| 265 | PTR_ERR(dpu_kms->debugfs_root)); | ||
| 266 | return PTR_ERR(dpu_kms->debugfs_root); | ||
| 267 | } | ||
| 268 | 245 | ||
| 269 | /* allow root to be NULL */ | 246 | /* allow root to be NULL */ |
| 270 | debugfs_create_x32(DPU_DEBUGFS_HWMASKNAME, 0600, dpu_kms->debugfs_root, p); | 247 | debugfs_create_x32(DPU_DEBUGFS_HWMASKNAME, 0600, entry, p); |
| 271 | |||
| 272 | (void) dpu_debugfs_danger_init(dpu_kms, dpu_kms->debugfs_root); | ||
| 273 | (void) dpu_debugfs_vbif_init(dpu_kms, dpu_kms->debugfs_root); | ||
| 274 | (void) dpu_debugfs_core_irq_init(dpu_kms, dpu_kms->debugfs_root); | ||
| 275 | 248 | ||
| 276 | rc = dpu_core_perf_debugfs_init(&dpu_kms->perf, dpu_kms->debugfs_root); | 249 | dpu_debugfs_danger_init(dpu_kms, entry); |
| 277 | if (rc) { | 250 | dpu_debugfs_vbif_init(dpu_kms, entry); |
| 278 | DPU_ERROR("failed to init perf %d\n", rc); | 251 | dpu_debugfs_core_irq_init(dpu_kms, entry); |
| 279 | return rc; | ||
| 280 | } | ||
| 281 | 252 | ||
| 282 | return 0; | 253 | return dpu_core_perf_debugfs_init(dpu_kms, entry); |
| 283 | } | ||
| 284 | |||
| 285 | static void _dpu_debugfs_destroy(struct dpu_kms *dpu_kms) | ||
| 286 | { | ||
| 287 | /* don't need to NULL check debugfs_root */ | ||
| 288 | if (dpu_kms) { | ||
| 289 | dpu_debugfs_vbif_destroy(dpu_kms); | ||
| 290 | dpu_debugfs_danger_destroy(dpu_kms); | ||
| 291 | dpu_debugfs_core_irq_destroy(dpu_kms); | ||
| 292 | debugfs_remove_recursive(dpu_kms->debugfs_root); | ||
| 293 | } | ||
| 294 | } | ||
| 295 | #else | ||
| 296 | static void _dpu_debugfs_destroy(struct dpu_kms *dpu_kms) | ||
| 297 | { | ||
| 298 | } | 254 | } |
| 299 | #endif | 255 | #endif |
| 300 | 256 | ||
| @@ -620,22 +576,7 @@ fail: | |||
| 620 | #ifdef CONFIG_DEBUG_FS | 576 | #ifdef CONFIG_DEBUG_FS |
| 621 | static int dpu_kms_debugfs_init(struct msm_kms *kms, struct drm_minor *minor) | 577 | static int dpu_kms_debugfs_init(struct msm_kms *kms, struct drm_minor *minor) |
| 622 | { | 578 | { |
| 623 | struct dpu_kms *dpu_kms = to_dpu_kms(kms); | 579 | return _dpu_debugfs_init(to_dpu_kms(kms)); |
| 624 | struct drm_device *dev; | ||
| 625 | int rc; | ||
| 626 | |||
| 627 | if (!dpu_kms || !dpu_kms->dev || !dpu_kms->dev->dev) { | ||
| 628 | DPU_ERROR("invalid dpu_kms\n"); | ||
| 629 | return -EINVAL; | ||
| 630 | } | ||
| 631 | |||
| 632 | dev = dpu_kms->dev; | ||
| 633 | |||
| 634 | rc = _dpu_debugfs_init(dpu_kms); | ||
| 635 | if (rc) | ||
| 636 | DPU_ERROR("dpu_debugfs init failed: %d\n", rc); | ||
| 637 | |||
| 638 | return rc; | ||
| 639 | } | 580 | } |
| 640 | #endif | 581 | #endif |
| 641 | 582 | ||
| @@ -659,7 +600,6 @@ static void _dpu_kms_hw_destroy(struct dpu_kms *dpu_kms) | |||
| 659 | dpu_kms->hw_intr = NULL; | 600 | dpu_kms->hw_intr = NULL; |
| 660 | 601 | ||
| 661 | /* safe to call these more than once during shutdown */ | 602 | /* safe to call these more than once during shutdown */ |
| 662 | _dpu_debugfs_destroy(dpu_kms); | ||
| 663 | _dpu_kms_mmu_destroy(dpu_kms); | 603 | _dpu_kms_mmu_destroy(dpu_kms); |
| 664 | 604 | ||
| 665 | if (dpu_kms->catalog) { | 605 | if (dpu_kms->catalog) { |
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h index c15d239e9832..ac75cfc267f4 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h | |||
| @@ -102,7 +102,6 @@ struct dpu_irq { | |||
| 102 | atomic_t *enable_counts; | 102 | atomic_t *enable_counts; |
| 103 | atomic_t *irq_counts; | 103 | atomic_t *irq_counts; |
| 104 | spinlock_t cb_lock; | 104 | spinlock_t cb_lock; |
| 105 | struct dentry *debugfs_file; | ||
| 106 | }; | 105 | }; |
| 107 | 106 | ||
| 108 | struct dpu_kms { | 107 | struct dpu_kms { |
| @@ -111,11 +110,6 @@ struct dpu_kms { | |||
| 111 | int core_rev; | 110 | int core_rev; |
| 112 | struct dpu_mdss_cfg *catalog; | 111 | struct dpu_mdss_cfg *catalog; |
| 113 | 112 | ||
| 114 | /* directory entry for debugfs */ | ||
| 115 | struct dentry *debugfs_root; | ||
| 116 | struct dentry *debugfs_danger; | ||
| 117 | struct dentry *debugfs_vbif; | ||
| 118 | |||
| 119 | /* io/register spaces: */ | 113 | /* io/register spaces: */ |
| 120 | void __iomem *mmio, *vbif[VBIF_MAX], *reg_dma; | 114 | void __iomem *mmio, *vbif[VBIF_MAX], *reg_dma; |
| 121 | unsigned long mmio_len, vbif_len[VBIF_MAX], reg_dma_len; | 115 | unsigned long mmio_len, vbif_len[VBIF_MAX], reg_dma_len; |
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c index b7963f6bb865..413e1ee43cf2 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c | |||
| @@ -120,13 +120,12 @@ static int _dpu_mdss_irq_domain_add(struct dpu_mdss *dpu_mdss) | |||
| 120 | return 0; | 120 | return 0; |
| 121 | } | 121 | } |
| 122 | 122 | ||
| 123 | static int _dpu_mdss_irq_domain_fini(struct dpu_mdss *dpu_mdss) | 123 | static void _dpu_mdss_irq_domain_fini(struct dpu_mdss *dpu_mdss) |
| 124 | { | 124 | { |
| 125 | if (dpu_mdss->irq_controller.domain) { | 125 | if (dpu_mdss->irq_controller.domain) { |
| 126 | irq_domain_remove(dpu_mdss->irq_controller.domain); | 126 | irq_domain_remove(dpu_mdss->irq_controller.domain); |
| 127 | dpu_mdss->irq_controller.domain = NULL; | 127 | dpu_mdss->irq_controller.domain = NULL; |
| 128 | } | 128 | } |
| 129 | return 0; | ||
| 130 | } | 129 | } |
| 131 | static int dpu_mdss_enable(struct msm_mdss *mdss) | 130 | static int dpu_mdss_enable(struct msm_mdss *mdss) |
| 132 | { | 131 | { |
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c index f7d9bab80dad..278d0edb41a9 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c | |||
| @@ -1262,26 +1262,12 @@ static ssize_t _dpu_plane_danger_read(struct file *file, | |||
| 1262 | char __user *buff, size_t count, loff_t *ppos) | 1262 | char __user *buff, size_t count, loff_t *ppos) |
| 1263 | { | 1263 | { |
| 1264 | struct dpu_kms *kms = file->private_data; | 1264 | struct dpu_kms *kms = file->private_data; |
| 1265 | struct dpu_mdss_cfg *cfg = kms->catalog; | 1265 | int len; |
| 1266 | int len = 0; | 1266 | char buf[40]; |
| 1267 | char buf[40] = {'\0'}; | ||
| 1268 | 1267 | ||
| 1269 | if (!cfg) | 1268 | len = scnprintf(buf, sizeof(buf), "%d\n", !kms->has_danger_ctrl); |
| 1270 | return -ENODEV; | ||
| 1271 | 1269 | ||
| 1272 | if (*ppos) | 1270 | return simple_read_from_buffer(buff, count, ppos, buf, len); |
| 1273 | return 0; /* the end */ | ||
| 1274 | |||
| 1275 | len = snprintf(buf, sizeof(buf), "%d\n", !kms->has_danger_ctrl); | ||
| 1276 | if (len < 0 || len >= sizeof(buf)) | ||
| 1277 | return 0; | ||
| 1278 | |||
| 1279 | if ((count < sizeof(buf)) || copy_to_user(buff, buf, len)) | ||
| 1280 | return -EFAULT; | ||
| 1281 | |||
| 1282 | *ppos += len; /* increase offset */ | ||
| 1283 | |||
| 1284 | return len; | ||
| 1285 | } | 1271 | } |
| 1286 | 1272 | ||
| 1287 | static void _dpu_plane_set_danger_state(struct dpu_kms *kms, bool enable) | 1273 | static void _dpu_plane_set_danger_state(struct dpu_kms *kms, bool enable) |
| @@ -1311,23 +1297,12 @@ static ssize_t _dpu_plane_danger_write(struct file *file, | |||
| 1311 | const char __user *user_buf, size_t count, loff_t *ppos) | 1297 | const char __user *user_buf, size_t count, loff_t *ppos) |
| 1312 | { | 1298 | { |
| 1313 | struct dpu_kms *kms = file->private_data; | 1299 | struct dpu_kms *kms = file->private_data; |
| 1314 | struct dpu_mdss_cfg *cfg = kms->catalog; | ||
| 1315 | int disable_panic; | 1300 | int disable_panic; |
| 1316 | char buf[10]; | 1301 | int ret; |
| 1317 | |||
| 1318 | if (!cfg) | ||
| 1319 | return -EFAULT; | ||
| 1320 | |||
| 1321 | if (count >= sizeof(buf)) | ||
| 1322 | return -EFAULT; | ||
| 1323 | |||
| 1324 | if (copy_from_user(buf, user_buf, count)) | ||
| 1325 | return -EFAULT; | ||
| 1326 | |||
| 1327 | buf[count] = 0; /* end of string */ | ||
| 1328 | 1302 | ||
| 1329 | if (kstrtoint(buf, 0, &disable_panic)) | 1303 | ret = kstrtouint_from_user(user_buf, count, 0, &disable_panic); |
| 1330 | return -EFAULT; | 1304 | if (ret) |
| 1305 | return ret; | ||
| 1331 | 1306 | ||
| 1332 | if (disable_panic) { | 1307 | if (disable_panic) { |
| 1333 | /* Disable panic signal for all active pipes */ | 1308 | /* Disable panic signal for all active pipes */ |
| @@ -1352,33 +1327,10 @@ static const struct file_operations dpu_plane_danger_enable = { | |||
| 1352 | 1327 | ||
| 1353 | static int _dpu_plane_init_debugfs(struct drm_plane *plane) | 1328 | static int _dpu_plane_init_debugfs(struct drm_plane *plane) |
| 1354 | { | 1329 | { |
| 1355 | struct dpu_plane *pdpu; | 1330 | struct dpu_plane *pdpu = to_dpu_plane(plane); |
| 1356 | struct dpu_kms *kms; | 1331 | struct dpu_kms *kms = _dpu_plane_get_kms(plane); |
| 1357 | struct msm_drm_private *priv; | 1332 | const struct dpu_sspp_cfg *cfg = pdpu->pipe_hw->cap; |
| 1358 | const struct dpu_sspp_sub_blks *sblk = 0; | 1333 | const struct dpu_sspp_sub_blks *sblk = cfg->sblk; |
| 1359 | const struct dpu_sspp_cfg *cfg = 0; | ||
| 1360 | |||
| 1361 | if (!plane || !plane->dev) { | ||
| 1362 | DPU_ERROR("invalid arguments\n"); | ||
| 1363 | return -EINVAL; | ||
| 1364 | } | ||
| 1365 | |||
| 1366 | priv = plane->dev->dev_private; | ||
| 1367 | if (!priv || !priv->kms) { | ||
| 1368 | DPU_ERROR("invalid KMS reference\n"); | ||
| 1369 | return -EINVAL; | ||
| 1370 | } | ||
| 1371 | |||
| 1372 | kms = to_dpu_kms(priv->kms); | ||
| 1373 | pdpu = to_dpu_plane(plane); | ||
| 1374 | |||
| 1375 | if (pdpu && pdpu->pipe_hw) | ||
| 1376 | cfg = pdpu->pipe_hw->cap; | ||
| 1377 | if (cfg) | ||
| 1378 | sblk = cfg->sblk; | ||
| 1379 | |||
| 1380 | if (!sblk) | ||
| 1381 | return 0; | ||
| 1382 | 1334 | ||
| 1383 | /* create overall sub-directory for the pipe */ | 1335 | /* create overall sub-directory for the pipe */ |
| 1384 | pdpu->debugfs_root = | 1336 | pdpu->debugfs_root = |
| @@ -1449,25 +1401,11 @@ static int _dpu_plane_init_debugfs(struct drm_plane *plane) | |||
| 1449 | 1401 | ||
| 1450 | return 0; | 1402 | return 0; |
| 1451 | } | 1403 | } |
| 1452 | |||
| 1453 | static void _dpu_plane_destroy_debugfs(struct drm_plane *plane) | ||
| 1454 | { | ||
| 1455 | struct dpu_plane *pdpu; | ||
| 1456 | |||
| 1457 | if (!plane) | ||
| 1458 | return; | ||
| 1459 | pdpu = to_dpu_plane(plane); | ||
| 1460 | |||
| 1461 | debugfs_remove_recursive(pdpu->debugfs_root); | ||
| 1462 | } | ||
| 1463 | #else | 1404 | #else |
| 1464 | static int _dpu_plane_init_debugfs(struct drm_plane *plane) | 1405 | static int _dpu_plane_init_debugfs(struct drm_plane *plane) |
| 1465 | { | 1406 | { |
| 1466 | return 0; | 1407 | return 0; |
| 1467 | } | 1408 | } |
| 1468 | static void _dpu_plane_destroy_debugfs(struct drm_plane *plane) | ||
| 1469 | { | ||
| 1470 | } | ||
| 1471 | #endif | 1409 | #endif |
| 1472 | 1410 | ||
| 1473 | static int dpu_plane_late_register(struct drm_plane *plane) | 1411 | static int dpu_plane_late_register(struct drm_plane *plane) |
| @@ -1477,7 +1415,9 @@ static int dpu_plane_late_register(struct drm_plane *plane) | |||
| 1477 | 1415 | ||
| 1478 | static void dpu_plane_early_unregister(struct drm_plane *plane) | 1416 | static void dpu_plane_early_unregister(struct drm_plane *plane) |
| 1479 | { | 1417 | { |
| 1480 | _dpu_plane_destroy_debugfs(plane); | 1418 | struct dpu_plane *pdpu = to_dpu_plane(plane); |
| 1419 | |||
| 1420 | debugfs_remove_recursive(pdpu->debugfs_root); | ||
| 1481 | } | 1421 | } |
| 1482 | 1422 | ||
| 1483 | static const struct drm_plane_funcs dpu_plane_funcs = { | 1423 | static const struct drm_plane_funcs dpu_plane_funcs = { |
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c index ff5091d2555d..ef753ea9c499 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.c | |||
| @@ -310,31 +310,25 @@ void dpu_vbif_init_memtypes(struct dpu_kms *dpu_kms) | |||
| 310 | } | 310 | } |
| 311 | 311 | ||
| 312 | #ifdef CONFIG_DEBUG_FS | 312 | #ifdef CONFIG_DEBUG_FS |
| 313 | void dpu_debugfs_vbif_destroy(struct dpu_kms *dpu_kms) | ||
| 314 | { | ||
| 315 | debugfs_remove_recursive(dpu_kms->debugfs_vbif); | ||
| 316 | dpu_kms->debugfs_vbif = NULL; | ||
| 317 | } | ||
| 318 | 313 | ||
| 319 | int dpu_debugfs_vbif_init(struct dpu_kms *dpu_kms, struct dentry *debugfs_root) | 314 | void dpu_debugfs_vbif_init(struct dpu_kms *dpu_kms, struct dentry *debugfs_root) |
| 320 | { | 315 | { |
| 321 | char vbif_name[32]; | 316 | char vbif_name[32]; |
| 322 | struct dentry *debugfs_vbif; | 317 | struct dentry *entry, *debugfs_vbif; |
| 323 | int i, j; | 318 | int i, j; |
| 324 | 319 | ||
| 325 | dpu_kms->debugfs_vbif = debugfs_create_dir("vbif", debugfs_root); | 320 | entry = debugfs_create_dir("vbif", debugfs_root); |
| 326 | if (!dpu_kms->debugfs_vbif) { | 321 | if (IS_ERR_OR_NULL(entry)) |
| 327 | DPU_ERROR("failed to create vbif debugfs\n"); | 322 | return; |
| 328 | return -EINVAL; | ||
| 329 | } | ||
| 330 | 323 | ||
| 331 | for (i = 0; i < dpu_kms->catalog->vbif_count; i++) { | 324 | for (i = 0; i < dpu_kms->catalog->vbif_count; i++) { |
| 332 | struct dpu_vbif_cfg *vbif = &dpu_kms->catalog->vbif[i]; | 325 | struct dpu_vbif_cfg *vbif = &dpu_kms->catalog->vbif[i]; |
| 333 | 326 | ||
| 334 | snprintf(vbif_name, sizeof(vbif_name), "%d", vbif->id); | 327 | snprintf(vbif_name, sizeof(vbif_name), "%d", vbif->id); |
| 335 | 328 | ||
| 336 | debugfs_vbif = debugfs_create_dir(vbif_name, | 329 | debugfs_vbif = debugfs_create_dir(vbif_name, entry); |
| 337 | dpu_kms->debugfs_vbif); | 330 | if (IS_ERR_OR_NULL(debugfs_vbif)) |
| 331 | continue; | ||
| 338 | 332 | ||
| 339 | debugfs_create_u32("features", 0600, debugfs_vbif, | 333 | debugfs_create_u32("features", 0600, debugfs_vbif, |
| 340 | (u32 *)&vbif->features); | 334 | (u32 *)&vbif->features); |
| @@ -376,7 +370,5 @@ int dpu_debugfs_vbif_init(struct dpu_kms *dpu_kms, struct dentry *debugfs_root) | |||
| 376 | (u32 *)&cfg->ot_limit); | 370 | (u32 *)&cfg->ot_limit); |
| 377 | } | 371 | } |
| 378 | } | 372 | } |
| 379 | |||
| 380 | return 0; | ||
| 381 | } | 373 | } |
| 382 | #endif | 374 | #endif |
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.h index f17af52dbbd5..6356876d7a66 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_vbif.h | |||
| @@ -78,17 +78,6 @@ void dpu_vbif_clear_errors(struct dpu_kms *dpu_kms); | |||
| 78 | */ | 78 | */ |
| 79 | void dpu_vbif_init_memtypes(struct dpu_kms *dpu_kms); | 79 | void dpu_vbif_init_memtypes(struct dpu_kms *dpu_kms); |
| 80 | 80 | ||
| 81 | #ifdef CONFIG_DEBUG_FS | 81 | void dpu_debugfs_vbif_init(struct dpu_kms *dpu_kms, struct dentry *debugfs_root); |
| 82 | int dpu_debugfs_vbif_init(struct dpu_kms *dpu_kms, struct dentry *debugfs_root); | 82 | |
| 83 | void dpu_debugfs_vbif_destroy(struct dpu_kms *dpu_kms); | ||
| 84 | #else | ||
| 85 | static inline int dpu_debugfs_vbif_init(struct dpu_kms *dpu_kms, | ||
| 86 | struct dentry *debugfs_root) | ||
| 87 | { | ||
| 88 | return 0; | ||
| 89 | } | ||
| 90 | static inline void dpu_debugfs_vbif_destroy(struct dpu_kms *dpu_kms) | ||
| 91 | { | ||
| 92 | } | ||
| 93 | #endif | ||
| 94 | #endif /* __DPU_VBIF_H__ */ | 83 | #endif /* __DPU_VBIF_H__ */ |
