diff options
| -rw-r--r-- | drivers/gpu/drm/msm/Makefile | 1 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.c | 15 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.h | 7 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/disp/dpu1/dpu_irq.c | 66 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/disp/dpu1/dpu_irq.h | 59 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 22 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h | 1 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c | 5 |
8 files changed, 28 insertions, 148 deletions
diff --git a/drivers/gpu/drm/msm/Makefile b/drivers/gpu/drm/msm/Makefile index 125023068ca8..56a70c74af4e 100644 --- a/drivers/gpu/drm/msm/Makefile +++ b/drivers/gpu/drm/msm/Makefile | |||
| @@ -70,7 +70,6 @@ msm-y := \ | |||
| 70 | disp/dpu1/dpu_hw_util.o \ | 70 | disp/dpu1/dpu_hw_util.o \ |
| 71 | disp/dpu1/dpu_hw_vbif.o \ | 71 | disp/dpu1/dpu_hw_vbif.o \ |
| 72 | disp/dpu1/dpu_io_util.o \ | 72 | disp/dpu1/dpu_io_util.o \ |
| 73 | disp/dpu1/dpu_irq.o \ | ||
| 74 | disp/dpu1/dpu_kms.o \ | 73 | disp/dpu1/dpu_kms.o \ |
| 75 | disp/dpu1/dpu_mdss.o \ | 74 | disp/dpu1/dpu_mdss.o \ |
| 76 | disp/dpu1/dpu_plane.o \ | 75 | disp/dpu1/dpu_plane.o \ |
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 879c13fe74e0..9d5a8d217bc6 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.c | |||
| @@ -376,10 +376,7 @@ void dpu_core_irq_preinstall(struct dpu_kms *dpu_kms) | |||
| 376 | struct msm_drm_private *priv; | 376 | struct msm_drm_private *priv; |
| 377 | int i; | 377 | int i; |
| 378 | 378 | ||
| 379 | if (!dpu_kms) { | 379 | if (!dpu_kms->dev) { |
| 380 | DPU_ERROR("invalid dpu_kms\n"); | ||
| 381 | return; | ||
| 382 | } else if (!dpu_kms->dev) { | ||
| 383 | DPU_ERROR("invalid drm device\n"); | 380 | DPU_ERROR("invalid drm device\n"); |
| 384 | return; | 381 | return; |
| 385 | } else if (!dpu_kms->dev->dev_private) { | 382 | } else if (!dpu_kms->dev->dev_private) { |
| @@ -410,20 +407,12 @@ void dpu_core_irq_preinstall(struct dpu_kms *dpu_kms) | |||
| 410 | } | 407 | } |
| 411 | } | 408 | } |
| 412 | 409 | ||
| 413 | int dpu_core_irq_postinstall(struct dpu_kms *dpu_kms) | ||
| 414 | { | ||
| 415 | return 0; | ||
| 416 | } | ||
| 417 | |||
| 418 | void dpu_core_irq_uninstall(struct dpu_kms *dpu_kms) | 410 | void dpu_core_irq_uninstall(struct dpu_kms *dpu_kms) |
| 419 | { | 411 | { |
| 420 | struct msm_drm_private *priv; | 412 | struct msm_drm_private *priv; |
| 421 | int i; | 413 | int i; |
| 422 | 414 | ||
| 423 | if (!dpu_kms) { | 415 | if (!dpu_kms->dev) { |
| 424 | DPU_ERROR("invalid dpu_kms\n"); | ||
| 425 | return; | ||
| 426 | } else if (!dpu_kms->dev) { | ||
| 427 | DPU_ERROR("invalid drm device\n"); | 416 | DPU_ERROR("invalid drm device\n"); |
| 428 | return; | 417 | return; |
| 429 | } else if (!dpu_kms->dev->dev_private) { | 418 | } else if (!dpu_kms->dev->dev_private) { |
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 5e98bba46af5..884f77fa3eb6 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_core_irq.h | |||
| @@ -24,13 +24,6 @@ | |||
| 24 | void dpu_core_irq_preinstall(struct dpu_kms *dpu_kms); | 24 | void dpu_core_irq_preinstall(struct dpu_kms *dpu_kms); |
| 25 | 25 | ||
| 26 | /** | 26 | /** |
| 27 | * dpu_core_irq_postinstall - perform post-installation of core IRQ handler | ||
| 28 | * @dpu_kms: DPU handle | ||
| 29 | * @return: 0 if success; error code otherwise | ||
| 30 | */ | ||
| 31 | int dpu_core_irq_postinstall(struct dpu_kms *dpu_kms); | ||
| 32 | |||
| 33 | /** | ||
| 34 | * dpu_core_irq_uninstall - uninstall core IRQ handler | 27 | * dpu_core_irq_uninstall - uninstall core IRQ handler |
| 35 | * @dpu_kms: DPU handle | 28 | * @dpu_kms: DPU handle |
| 36 | * @return: none | 29 | * @return: none |
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_irq.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_irq.c deleted file mode 100644 index d5e6ce0140cf..000000000000 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_irq.c +++ /dev/null | |||
| @@ -1,66 +0,0 @@ | |||
| 1 | /* Copyright (c) 2015-2018, The Linux Foundation. All rights reserved. | ||
| 2 | * | ||
| 3 | * This program is free software; you can redistribute it and/or modify | ||
| 4 | * it under the terms of the GNU General Public License version 2 and | ||
| 5 | * only version 2 as published by the Free Software Foundation. | ||
| 6 | * | ||
| 7 | * This program is distributed in the hope that it will be useful, | ||
| 8 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 9 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 10 | * GNU General Public License for more details. | ||
| 11 | */ | ||
| 12 | |||
| 13 | #define pr_fmt(fmt) "[drm:%s:%d] " fmt, __func__, __LINE__ | ||
| 14 | |||
| 15 | #include <linux/irqdomain.h> | ||
| 16 | #include <linux/irq.h> | ||
| 17 | #include <linux/kthread.h> | ||
| 18 | |||
| 19 | #include "dpu_irq.h" | ||
| 20 | #include "dpu_core_irq.h" | ||
| 21 | |||
| 22 | irqreturn_t dpu_irq(struct msm_kms *kms) | ||
| 23 | { | ||
| 24 | struct dpu_kms *dpu_kms = to_dpu_kms(kms); | ||
| 25 | |||
| 26 | return dpu_core_irq(dpu_kms); | ||
| 27 | } | ||
| 28 | |||
| 29 | void dpu_irq_preinstall(struct msm_kms *kms) | ||
| 30 | { | ||
| 31 | struct dpu_kms *dpu_kms = to_dpu_kms(kms); | ||
| 32 | |||
| 33 | if (!dpu_kms->dev || !dpu_kms->dev->dev) { | ||
| 34 | pr_err("invalid device handles\n"); | ||
| 35 | return; | ||
| 36 | } | ||
| 37 | |||
| 38 | dpu_core_irq_preinstall(dpu_kms); | ||
| 39 | } | ||
| 40 | |||
| 41 | int dpu_irq_postinstall(struct msm_kms *kms) | ||
| 42 | { | ||
| 43 | struct dpu_kms *dpu_kms = to_dpu_kms(kms); | ||
| 44 | int rc; | ||
| 45 | |||
| 46 | if (!kms) { | ||
| 47 | DPU_ERROR("invalid parameters\n"); | ||
| 48 | return -EINVAL; | ||
| 49 | } | ||
| 50 | |||
| 51 | rc = dpu_core_irq_postinstall(dpu_kms); | ||
| 52 | |||
| 53 | return rc; | ||
| 54 | } | ||
| 55 | |||
| 56 | void dpu_irq_uninstall(struct msm_kms *kms) | ||
| 57 | { | ||
| 58 | struct dpu_kms *dpu_kms = to_dpu_kms(kms); | ||
| 59 | |||
| 60 | if (!kms) { | ||
| 61 | DPU_ERROR("invalid parameters\n"); | ||
| 62 | return; | ||
| 63 | } | ||
| 64 | |||
| 65 | dpu_core_irq_uninstall(dpu_kms); | ||
| 66 | } | ||
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_irq.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_irq.h deleted file mode 100644 index 3e147f7176e2..000000000000 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_irq.h +++ /dev/null | |||
| @@ -1,59 +0,0 @@ | |||
| 1 | /* Copyright (c) 2015-2018, The Linux Foundation. All rights reserved. | ||
| 2 | * | ||
| 3 | * This program is free software; you can redistribute it and/or modify | ||
| 4 | * it under the terms of the GNU General Public License version 2 and | ||
| 5 | * only version 2 as published by the Free Software Foundation. | ||
| 6 | * | ||
| 7 | * This program is distributed in the hope that it will be useful, | ||
| 8 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 9 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 10 | * GNU General Public License for more details. | ||
| 11 | */ | ||
| 12 | |||
| 13 | #ifndef __DPU_IRQ_H__ | ||
| 14 | #define __DPU_IRQ_H__ | ||
| 15 | |||
| 16 | #include <linux/kernel.h> | ||
| 17 | #include <linux/irqdomain.h> | ||
| 18 | |||
| 19 | #include "msm_kms.h" | ||
| 20 | |||
| 21 | /** | ||
| 22 | * dpu_irq_controller - define MDSS level interrupt controller context | ||
| 23 | * @enabled_mask: enable status of MDSS level interrupt | ||
| 24 | * @domain: interrupt domain of this controller | ||
| 25 | */ | ||
| 26 | struct dpu_irq_controller { | ||
| 27 | unsigned long enabled_mask; | ||
| 28 | struct irq_domain *domain; | ||
| 29 | }; | ||
| 30 | |||
| 31 | /** | ||
| 32 | * dpu_irq_preinstall - perform pre-installation of MDSS IRQ handler | ||
| 33 | * @kms: pointer to kms context | ||
| 34 | * @return: none | ||
| 35 | */ | ||
| 36 | void dpu_irq_preinstall(struct msm_kms *kms); | ||
| 37 | |||
| 38 | /** | ||
| 39 | * dpu_irq_postinstall - perform post-installation of MDSS IRQ handler | ||
| 40 | * @kms: pointer to kms context | ||
| 41 | * @return: 0 if success; error code otherwise | ||
| 42 | */ | ||
| 43 | int dpu_irq_postinstall(struct msm_kms *kms); | ||
| 44 | |||
| 45 | /** | ||
| 46 | * dpu_irq_uninstall - uninstall MDSS IRQ handler | ||
| 47 | * @drm_dev: pointer to kms context | ||
| 48 | * @return: none | ||
| 49 | */ | ||
| 50 | void dpu_irq_uninstall(struct msm_kms *kms); | ||
| 51 | |||
| 52 | /** | ||
| 53 | * dpu_irq - MDSS level IRQ handler | ||
| 54 | * @kms: pointer to kms context | ||
| 55 | * @return: interrupt handling status | ||
| 56 | */ | ||
| 57 | irqreturn_t dpu_irq(struct msm_kms *kms); | ||
| 58 | |||
| 59 | #endif /* __DPU_IRQ_H__ */ | ||
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c index 8d5cd1e7a683..37dfee1ebba9 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | |||
| @@ -734,10 +734,30 @@ static void _dpu_kms_set_encoder_mode(struct msm_kms *kms, | |||
| 734 | encoder->base.id, rc); | 734 | encoder->base.id, rc); |
| 735 | } | 735 | } |
| 736 | 736 | ||
| 737 | static irqreturn_t dpu_irq(struct msm_kms *kms) | ||
| 738 | { | ||
| 739 | struct dpu_kms *dpu_kms = to_dpu_kms(kms); | ||
| 740 | |||
| 741 | return dpu_core_irq(dpu_kms); | ||
| 742 | } | ||
| 743 | |||
| 744 | static void dpu_irq_preinstall(struct msm_kms *kms) | ||
| 745 | { | ||
| 746 | struct dpu_kms *dpu_kms = to_dpu_kms(kms); | ||
| 747 | |||
| 748 | dpu_core_irq_preinstall(dpu_kms); | ||
| 749 | } | ||
| 750 | |||
| 751 | static void dpu_irq_uninstall(struct msm_kms *kms) | ||
| 752 | { | ||
| 753 | struct dpu_kms *dpu_kms = to_dpu_kms(kms); | ||
| 754 | |||
| 755 | dpu_core_irq_uninstall(dpu_kms); | ||
| 756 | } | ||
| 757 | |||
| 737 | static const struct msm_kms_funcs kms_funcs = { | 758 | static const struct msm_kms_funcs kms_funcs = { |
| 738 | .hw_init = dpu_kms_hw_init, | 759 | .hw_init = dpu_kms_hw_init, |
| 739 | .irq_preinstall = dpu_irq_preinstall, | 760 | .irq_preinstall = dpu_irq_preinstall, |
| 740 | .irq_postinstall = dpu_irq_postinstall, | ||
| 741 | .irq_uninstall = dpu_irq_uninstall, | 761 | .irq_uninstall = dpu_irq_uninstall, |
| 742 | .irq = dpu_irq, | 762 | .irq = dpu_irq, |
| 743 | .prepare_commit = dpu_kms_prepare_commit, | 763 | .prepare_commit = dpu_kms_prepare_commit, |
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h index 611c88c1ba10..c15d239e9832 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h | |||
| @@ -30,7 +30,6 @@ | |||
| 30 | #include "dpu_hw_top.h" | 30 | #include "dpu_hw_top.h" |
| 31 | #include "dpu_io_util.h" | 31 | #include "dpu_io_util.h" |
| 32 | #include "dpu_rm.h" | 32 | #include "dpu_rm.h" |
| 33 | #include "dpu_irq.h" | ||
| 34 | #include "dpu_core_perf.h" | 33 | #include "dpu_core_perf.h" |
| 35 | 34 | ||
| 36 | #define DRMID(x) ((x) ? (x)->base.id : -1) | 35 | #define DRMID(x) ((x) ? (x)->base.id : -1) |
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c index 38576f8b90b6..b7963f6bb865 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c | |||
| @@ -9,6 +9,11 @@ | |||
| 9 | 9 | ||
| 10 | #define HW_INTR_STATUS 0x0010 | 10 | #define HW_INTR_STATUS 0x0010 |
| 11 | 11 | ||
| 12 | struct dpu_irq_controller { | ||
| 13 | unsigned long enabled_mask; | ||
| 14 | struct irq_domain *domain; | ||
| 15 | }; | ||
| 16 | |||
| 12 | struct dpu_mdss { | 17 | struct dpu_mdss { |
| 13 | struct msm_mdss base; | 18 | struct msm_mdss base; |
| 14 | void __iomem *mmio; | 19 | void __iomem *mmio; |
