aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRob Clark <robdclark@gmail.com>2017-06-13 10:22:37 -0400
committerRob Clark <robdclark@gmail.com>2017-06-16 11:16:03 -0400
commitf59f62d592a0553bbff6c5b2ba66036becb01c4a (patch)
tree6c9f5d6606c41f1e57c33d1459d0007808012877
parentaa7cd242976af3c0a6fe4bcf5d9fbb87200cb5c4 (diff)
drm/msm/mdp4+5: move aspace/id to base class
Before we can shift to passing the address-space object to _get_iova(), we need to fix a few places (dsi+fbdev) that were hard-coding the adress space id. That gets somewhat easier if we just move these to the kms base class. Prep work for next patch. Signed-off-by: Rob Clark <robdclark@gmail.com>
-rw-r--r--drivers/gpu/drm/msm/dsi/dsi_host.c10
-rw-r--r--drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c9
-rw-r--r--drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c14
-rw-r--r--drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.h4
-rw-r--r--drivers/gpu/drm/msm/mdp/mdp4/mdp4_plane.c15
-rw-r--r--drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c6
-rw-r--r--drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c10
-rw-r--r--drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h4
-rw-r--r--drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c16
-rw-r--r--drivers/gpu/drm/msm/msm_fbdev.c4
-rw-r--r--drivers/gpu/drm/msm/msm_kms.h4
11 files changed, 56 insertions, 40 deletions
diff --git a/drivers/gpu/drm/msm/dsi/dsi_host.c b/drivers/gpu/drm/msm/dsi/dsi_host.c
index f97a7803a02d..3c752cd0cc1c 100644
--- a/drivers/gpu/drm/msm/dsi/dsi_host.c
+++ b/drivers/gpu/drm/msm/dsi/dsi_host.c
@@ -32,6 +32,7 @@
32#include "dsi.xml.h" 32#include "dsi.xml.h"
33#include "sfpb.xml.h" 33#include "sfpb.xml.h"
34#include "dsi_cfg.h" 34#include "dsi_cfg.h"
35#include "msm_kms.h"
35 36
36static int dsi_get_version(const void __iomem *base, u32 *major, u32 *minor) 37static int dsi_get_version(const void __iomem *base, u32 *major, u32 *minor)
37{ 38{
@@ -975,6 +976,7 @@ static void dsi_wait4video_eng_busy(struct msm_dsi_host *msm_host)
975static int dsi_tx_buf_alloc(struct msm_dsi_host *msm_host, int size) 976static int dsi_tx_buf_alloc(struct msm_dsi_host *msm_host, int size)
976{ 977{
977 struct drm_device *dev = msm_host->dev; 978 struct drm_device *dev = msm_host->dev;
979 struct msm_drm_private *priv = dev->dev_private;
978 const struct msm_dsi_cfg_handler *cfg_hnd = msm_host->cfg_hnd; 980 const struct msm_dsi_cfg_handler *cfg_hnd = msm_host->cfg_hnd;
979 int ret; 981 int ret;
980 uint64_t iova; 982 uint64_t iova;
@@ -991,7 +993,8 @@ static int dsi_tx_buf_alloc(struct msm_dsi_host *msm_host, int size)
991 return ret; 993 return ret;
992 } 994 }
993 995
994 ret = msm_gem_get_iova_locked(msm_host->tx_gem_obj, 0, &iova); 996 ret = msm_gem_get_iova_locked(msm_host->tx_gem_obj,
997 priv->kms->id, &iova);
995 mutex_unlock(&dev->struct_mutex); 998 mutex_unlock(&dev->struct_mutex);
996 if (ret) { 999 if (ret) {
997 pr_err("%s: failed to get iova, %d\n", __func__, ret); 1000 pr_err("%s: failed to get iova, %d\n", __func__, ret);
@@ -1141,12 +1144,15 @@ static int dsi_long_read_resp(u8 *buf, const struct mipi_dsi_msg *msg)
1141static int dsi_cmd_dma_tx(struct msm_dsi_host *msm_host, int len) 1144static int dsi_cmd_dma_tx(struct msm_dsi_host *msm_host, int len)
1142{ 1145{
1143 const struct msm_dsi_cfg_handler *cfg_hnd = msm_host->cfg_hnd; 1146 const struct msm_dsi_cfg_handler *cfg_hnd = msm_host->cfg_hnd;
1147 struct drm_device *dev = msm_host->dev;
1148 struct msm_drm_private *priv = dev->dev_private;
1144 int ret; 1149 int ret;
1145 uint64_t dma_base; 1150 uint64_t dma_base;
1146 bool triggered; 1151 bool triggered;
1147 1152
1148 if (cfg_hnd->major == MSM_DSI_VER_MAJOR_6G) { 1153 if (cfg_hnd->major == MSM_DSI_VER_MAJOR_6G) {
1149 ret = msm_gem_get_iova(msm_host->tx_gem_obj, 0, &dma_base); 1154 ret = msm_gem_get_iova(msm_host->tx_gem_obj,
1155 priv->kms->id, &dma_base);
1150 if (ret) { 1156 if (ret) {
1151 pr_err("%s: failed to get iova: %d\n", __func__, ret); 1157 pr_err("%s: failed to get iova: %d\n", __func__, ret);
1152 return ret; 1158 return ret;
diff --git a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c
index 698e514203c6..d9ee73c3672d 100644
--- a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c
+++ b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c
@@ -126,8 +126,9 @@ static void unref_cursor_worker(struct drm_flip_work *work, void *val)
126 struct mdp4_crtc *mdp4_crtc = 126 struct mdp4_crtc *mdp4_crtc =
127 container_of(work, struct mdp4_crtc, unref_cursor_work); 127 container_of(work, struct mdp4_crtc, unref_cursor_work);
128 struct mdp4_kms *mdp4_kms = get_kms(&mdp4_crtc->base); 128 struct mdp4_kms *mdp4_kms = get_kms(&mdp4_crtc->base);
129 struct msm_kms *kms = &mdp4_kms->base.base;
129 130
130 msm_gem_put_iova(val, mdp4_kms->id); 131 msm_gem_put_iova(val, kms->id);
131 drm_gem_object_unreference_unlocked(val); 132 drm_gem_object_unreference_unlocked(val);
132} 133}
133 134
@@ -360,6 +361,7 @@ static void update_cursor(struct drm_crtc *crtc)
360{ 361{
361 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); 362 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc);
362 struct mdp4_kms *mdp4_kms = get_kms(crtc); 363 struct mdp4_kms *mdp4_kms = get_kms(crtc);
364 struct msm_kms *kms = &mdp4_kms->base.base;
363 enum mdp4_dma dma = mdp4_crtc->dma; 365 enum mdp4_dma dma = mdp4_crtc->dma;
364 unsigned long flags; 366 unsigned long flags;
365 367
@@ -372,7 +374,7 @@ static void update_cursor(struct drm_crtc *crtc)
372 if (next_bo) { 374 if (next_bo) {
373 /* take a obj ref + iova ref when we start scanning out: */ 375 /* take a obj ref + iova ref when we start scanning out: */
374 drm_gem_object_reference(next_bo); 376 drm_gem_object_reference(next_bo);
375 msm_gem_get_iova_locked(next_bo, mdp4_kms->id, &iova); 377 msm_gem_get_iova_locked(next_bo, kms->id, &iova);
376 378
377 /* enable cursor: */ 379 /* enable cursor: */
378 mdp4_write(mdp4_kms, REG_MDP4_DMA_CURSOR_SIZE(dma), 380 mdp4_write(mdp4_kms, REG_MDP4_DMA_CURSOR_SIZE(dma),
@@ -409,6 +411,7 @@ static int mdp4_crtc_cursor_set(struct drm_crtc *crtc,
409{ 411{
410 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); 412 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc);
411 struct mdp4_kms *mdp4_kms = get_kms(crtc); 413 struct mdp4_kms *mdp4_kms = get_kms(crtc);
414 struct msm_kms *kms = &mdp4_kms->base.base;
412 struct drm_device *dev = crtc->dev; 415 struct drm_device *dev = crtc->dev;
413 struct drm_gem_object *cursor_bo, *old_bo; 416 struct drm_gem_object *cursor_bo, *old_bo;
414 unsigned long flags; 417 unsigned long flags;
@@ -429,7 +432,7 @@ static int mdp4_crtc_cursor_set(struct drm_crtc *crtc,
429 } 432 }
430 433
431 if (cursor_bo) { 434 if (cursor_bo) {
432 ret = msm_gem_get_iova(cursor_bo, mdp4_kms->id, &iova); 435 ret = msm_gem_get_iova(cursor_bo, kms->id, &iova);
433 if (ret) 436 if (ret)
434 goto fail; 437 goto fail;
435 } else { 438 } else {
diff --git a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c
index 3d26d7774c08..7cf4dd40de28 100644
--- a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c
+++ b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c
@@ -160,10 +160,10 @@ static void mdp4_destroy(struct msm_kms *kms)
160{ 160{
161 struct mdp4_kms *mdp4_kms = to_mdp4_kms(to_mdp_kms(kms)); 161 struct mdp4_kms *mdp4_kms = to_mdp4_kms(to_mdp_kms(kms));
162 struct device *dev = mdp4_kms->dev->dev; 162 struct device *dev = mdp4_kms->dev->dev;
163 struct msm_gem_address_space *aspace = mdp4_kms->aspace; 163 struct msm_gem_address_space *aspace = kms->aspace;
164 164
165 if (mdp4_kms->blank_cursor_iova) 165 if (mdp4_kms->blank_cursor_iova)
166 msm_gem_put_iova(mdp4_kms->blank_cursor_bo, mdp4_kms->id); 166 msm_gem_put_iova(mdp4_kms->blank_cursor_bo, kms->id);
167 drm_gem_object_unreference_unlocked(mdp4_kms->blank_cursor_bo); 167 drm_gem_object_unreference_unlocked(mdp4_kms->blank_cursor_bo);
168 168
169 if (aspace) { 169 if (aspace) {
@@ -510,7 +510,7 @@ struct msm_kms *mdp4_kms_init(struct drm_device *dev)
510 goto fail; 510 goto fail;
511 } 511 }
512 512
513 mdp4_kms->aspace = aspace; 513 kms->aspace = aspace;
514 514
515 ret = aspace->mmu->funcs->attach(aspace->mmu, iommu_ports, 515 ret = aspace->mmu->funcs->attach(aspace->mmu, iommu_ports,
516 ARRAY_SIZE(iommu_ports)); 516 ARRAY_SIZE(iommu_ports));
@@ -522,9 +522,9 @@ struct msm_kms *mdp4_kms_init(struct drm_device *dev)
522 aspace = NULL; 522 aspace = NULL;
523 } 523 }
524 524
525 mdp4_kms->id = msm_register_address_space(dev, aspace); 525 kms->id = msm_register_address_space(dev, aspace);
526 if (mdp4_kms->id < 0) { 526 if (kms->id < 0) {
527 ret = mdp4_kms->id; 527 ret = kms->id;
528 dev_err(dev->dev, "failed to register mdp4 iommu: %d\n", ret); 528 dev_err(dev->dev, "failed to register mdp4 iommu: %d\n", ret);
529 goto fail; 529 goto fail;
530 } 530 }
@@ -545,7 +545,7 @@ struct msm_kms *mdp4_kms_init(struct drm_device *dev)
545 goto fail; 545 goto fail;
546 } 546 }
547 547
548 ret = msm_gem_get_iova(mdp4_kms->blank_cursor_bo, mdp4_kms->id, 548 ret = msm_gem_get_iova(mdp4_kms->blank_cursor_bo, kms->id,
549 &mdp4_kms->blank_cursor_iova); 549 &mdp4_kms->blank_cursor_iova);
550 if (ret) { 550 if (ret) {
551 dev_err(dev->dev, "could not pin blank-cursor bo: %d\n", ret); 551 dev_err(dev->dev, "could not pin blank-cursor bo: %d\n", ret);
diff --git a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.h b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.h
index c413779d488a..940de51ac5cd 100644
--- a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.h
+++ b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.h
@@ -34,9 +34,6 @@ struct mdp4_kms {
34 34
35 int rev; 35 int rev;
36 36
37 /* mapper-id used to request GEM buffer mapped for scanout: */
38 int id;
39
40 void __iomem *mmio; 37 void __iomem *mmio;
41 38
42 struct regulator *vdd; 39 struct regulator *vdd;
@@ -45,7 +42,6 @@ struct mdp4_kms {
45 struct clk *pclk; 42 struct clk *pclk;
46 struct clk *lut_clk; 43 struct clk *lut_clk;
47 struct clk *axi_clk; 44 struct clk *axi_clk;
48 struct msm_gem_address_space *aspace;
49 45
50 struct mdp_irq error_handler; 46 struct mdp_irq error_handler;
51 47
diff --git a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_plane.c b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_plane.c
index 53619d07677e..17fb1d6f2f23 100644
--- a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_plane.c
+++ b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_plane.c
@@ -103,13 +103,14 @@ static int mdp4_plane_prepare_fb(struct drm_plane *plane,
103{ 103{
104 struct mdp4_plane *mdp4_plane = to_mdp4_plane(plane); 104 struct mdp4_plane *mdp4_plane = to_mdp4_plane(plane);
105 struct mdp4_kms *mdp4_kms = get_kms(plane); 105 struct mdp4_kms *mdp4_kms = get_kms(plane);
106 struct msm_kms *kms = &mdp4_kms->base.base;
106 struct drm_framebuffer *fb = new_state->fb; 107 struct drm_framebuffer *fb = new_state->fb;
107 108
108 if (!fb) 109 if (!fb)
109 return 0; 110 return 0;
110 111
111 DBG("%s: prepare: FB[%u]", mdp4_plane->name, fb->base.id); 112 DBG("%s: prepare: FB[%u]", mdp4_plane->name, fb->base.id);
112 return msm_framebuffer_prepare(fb, mdp4_kms->id); 113 return msm_framebuffer_prepare(fb, kms->id);
113} 114}
114 115
115static void mdp4_plane_cleanup_fb(struct drm_plane *plane, 116static void mdp4_plane_cleanup_fb(struct drm_plane *plane,
@@ -117,13 +118,14 @@ static void mdp4_plane_cleanup_fb(struct drm_plane *plane,
117{ 118{
118 struct mdp4_plane *mdp4_plane = to_mdp4_plane(plane); 119 struct mdp4_plane *mdp4_plane = to_mdp4_plane(plane);
119 struct mdp4_kms *mdp4_kms = get_kms(plane); 120 struct mdp4_kms *mdp4_kms = get_kms(plane);
121 struct msm_kms *kms = &mdp4_kms->base.base;
120 struct drm_framebuffer *fb = old_state->fb; 122 struct drm_framebuffer *fb = old_state->fb;
121 123
122 if (!fb) 124 if (!fb)
123 return; 125 return;
124 126
125 DBG("%s: cleanup: FB[%u]", mdp4_plane->name, fb->base.id); 127 DBG("%s: cleanup: FB[%u]", mdp4_plane->name, fb->base.id);
126 msm_framebuffer_cleanup(fb, mdp4_kms->id); 128 msm_framebuffer_cleanup(fb, kms->id);
127} 129}
128 130
129 131
@@ -161,6 +163,7 @@ static void mdp4_plane_set_scanout(struct drm_plane *plane,
161{ 163{
162 struct mdp4_plane *mdp4_plane = to_mdp4_plane(plane); 164 struct mdp4_plane *mdp4_plane = to_mdp4_plane(plane);
163 struct mdp4_kms *mdp4_kms = get_kms(plane); 165 struct mdp4_kms *mdp4_kms = get_kms(plane);
166 struct msm_kms *kms = &mdp4_kms->base.base;
164 enum mdp4_pipe pipe = mdp4_plane->pipe; 167 enum mdp4_pipe pipe = mdp4_plane->pipe;
165 168
166 mdp4_write(mdp4_kms, REG_MDP4_PIPE_SRC_STRIDE_A(pipe), 169 mdp4_write(mdp4_kms, REG_MDP4_PIPE_SRC_STRIDE_A(pipe),
@@ -172,13 +175,13 @@ static void mdp4_plane_set_scanout(struct drm_plane *plane,
172 MDP4_PIPE_SRC_STRIDE_B_P3(fb->pitches[3])); 175 MDP4_PIPE_SRC_STRIDE_B_P3(fb->pitches[3]));
173 176
174 mdp4_write(mdp4_kms, REG_MDP4_PIPE_SRCP0_BASE(pipe), 177 mdp4_write(mdp4_kms, REG_MDP4_PIPE_SRCP0_BASE(pipe),
175 msm_framebuffer_iova(fb, mdp4_kms->id, 0)); 178 msm_framebuffer_iova(fb, kms->id, 0));
176 mdp4_write(mdp4_kms, REG_MDP4_PIPE_SRCP1_BASE(pipe), 179 mdp4_write(mdp4_kms, REG_MDP4_PIPE_SRCP1_BASE(pipe),
177 msm_framebuffer_iova(fb, mdp4_kms->id, 1)); 180 msm_framebuffer_iova(fb, kms->id, 1));
178 mdp4_write(mdp4_kms, REG_MDP4_PIPE_SRCP2_BASE(pipe), 181 mdp4_write(mdp4_kms, REG_MDP4_PIPE_SRCP2_BASE(pipe),
179 msm_framebuffer_iova(fb, mdp4_kms->id, 2)); 182 msm_framebuffer_iova(fb, kms->id, 2));
180 mdp4_write(mdp4_kms, REG_MDP4_PIPE_SRCP3_BASE(pipe), 183 mdp4_write(mdp4_kms, REG_MDP4_PIPE_SRCP3_BASE(pipe),
181 msm_framebuffer_iova(fb, mdp4_kms->id, 3)); 184 msm_framebuffer_iova(fb, kms->id, 3));
182 185
183 plane->fb = fb; 186 plane->fb = fb;
184} 187}
diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c
index 0764a6498110..d79c5faba35e 100644
--- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c
+++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c
@@ -160,8 +160,9 @@ static void unref_cursor_worker(struct drm_flip_work *work, void *val)
160 struct mdp5_crtc *mdp5_crtc = 160 struct mdp5_crtc *mdp5_crtc =
161 container_of(work, struct mdp5_crtc, unref_cursor_work); 161 container_of(work, struct mdp5_crtc, unref_cursor_work);
162 struct mdp5_kms *mdp5_kms = get_kms(&mdp5_crtc->base); 162 struct mdp5_kms *mdp5_kms = get_kms(&mdp5_crtc->base);
163 struct msm_kms *kms = &mdp5_kms->base.base;
163 164
164 msm_gem_put_iova(val, mdp5_kms->id); 165 msm_gem_put_iova(val, kms->id);
165 drm_gem_object_unreference_unlocked(val); 166 drm_gem_object_unreference_unlocked(val);
166} 167}
167 168
@@ -724,6 +725,7 @@ static int mdp5_crtc_cursor_set(struct drm_crtc *crtc,
724 struct mdp5_pipeline *pipeline = &mdp5_cstate->pipeline; 725 struct mdp5_pipeline *pipeline = &mdp5_cstate->pipeline;
725 struct drm_device *dev = crtc->dev; 726 struct drm_device *dev = crtc->dev;
726 struct mdp5_kms *mdp5_kms = get_kms(crtc); 727 struct mdp5_kms *mdp5_kms = get_kms(crtc);
728 struct msm_kms *kms = &mdp5_kms->base.base;
727 struct drm_gem_object *cursor_bo, *old_bo = NULL; 729 struct drm_gem_object *cursor_bo, *old_bo = NULL;
728 uint32_t blendcfg, stride; 730 uint32_t blendcfg, stride;
729 uint64_t cursor_addr; 731 uint64_t cursor_addr;
@@ -758,7 +760,7 @@ static int mdp5_crtc_cursor_set(struct drm_crtc *crtc,
758 if (!cursor_bo) 760 if (!cursor_bo)
759 return -ENOENT; 761 return -ENOENT;
760 762
761 ret = msm_gem_get_iova(cursor_bo, mdp5_kms->id, &cursor_addr); 763 ret = msm_gem_get_iova(cursor_bo, kms->id, &cursor_addr);
762 if (ret) 764 if (ret)
763 return -EINVAL; 765 return -EINVAL;
764 766
diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c
index e2b3346ead48..71d08a805806 100644
--- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c
+++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c
@@ -163,7 +163,7 @@ static void mdp5_set_encoder_mode(struct msm_kms *kms,
163static void mdp5_kms_destroy(struct msm_kms *kms) 163static void mdp5_kms_destroy(struct msm_kms *kms)
164{ 164{
165 struct mdp5_kms *mdp5_kms = to_mdp5_kms(to_mdp_kms(kms)); 165 struct mdp5_kms *mdp5_kms = to_mdp5_kms(to_mdp_kms(kms));
166 struct msm_gem_address_space *aspace = mdp5_kms->aspace; 166 struct msm_gem_address_space *aspace = kms->aspace;
167 int i; 167 int i;
168 168
169 for (i = 0; i < mdp5_kms->num_hwmixers; i++) 169 for (i = 0; i < mdp5_kms->num_hwmixers; i++)
@@ -663,7 +663,7 @@ struct msm_kms *mdp5_kms_init(struct drm_device *dev)
663 goto fail; 663 goto fail;
664 } 664 }
665 665
666 mdp5_kms->aspace = aspace; 666 kms->aspace = aspace;
667 667
668 ret = aspace->mmu->funcs->attach(aspace->mmu, iommu_ports, 668 ret = aspace->mmu->funcs->attach(aspace->mmu, iommu_ports,
669 ARRAY_SIZE(iommu_ports)); 669 ARRAY_SIZE(iommu_ports));
@@ -678,9 +678,9 @@ struct msm_kms *mdp5_kms_init(struct drm_device *dev)
678 aspace = NULL;; 678 aspace = NULL;;
679 } 679 }
680 680
681 mdp5_kms->id = msm_register_address_space(dev, aspace); 681 kms->id = msm_register_address_space(dev, aspace);
682 if (mdp5_kms->id < 0) { 682 if (kms->id < 0) {
683 ret = mdp5_kms->id; 683 ret = kms->id;
684 dev_err(&pdev->dev, "failed to register mdp5 iommu: %d\n", ret); 684 dev_err(&pdev->dev, "failed to register mdp5 iommu: %d\n", ret);
685 goto fail; 685 goto fail;
686 } 686 }
diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h
index 8bdb7ee4983b..17caa0e8c8ae 100644
--- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h
+++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h
@@ -55,10 +55,6 @@ struct mdp5_kms {
55 struct mdp5_state *state; 55 struct mdp5_state *state;
56 struct drm_modeset_lock state_lock; 56 struct drm_modeset_lock state_lock;
57 57
58 /* mapper-id used to request GEM buffer mapped for scanout: */
59 int id;
60 struct msm_gem_address_space *aspace;
61
62 struct mdp5_smp *smp; 58 struct mdp5_smp *smp;
63 struct mdp5_ctl_manager *ctlm; 59 struct mdp5_ctl_manager *ctlm;
64 60
diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
index 65b87a098724..b6a66befd1b7 100644
--- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
+++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
@@ -272,26 +272,28 @@ static int mdp5_plane_prepare_fb(struct drm_plane *plane,
272 struct drm_plane_state *new_state) 272 struct drm_plane_state *new_state)
273{ 273{
274 struct mdp5_kms *mdp5_kms = get_kms(plane); 274 struct mdp5_kms *mdp5_kms = get_kms(plane);
275 struct msm_kms *kms = &mdp5_kms->base.base;
275 struct drm_framebuffer *fb = new_state->fb; 276 struct drm_framebuffer *fb = new_state->fb;
276 277
277 if (!new_state->fb) 278 if (!new_state->fb)
278 return 0; 279 return 0;
279 280
280 DBG("%s: prepare: FB[%u]", plane->name, fb->base.id); 281 DBG("%s: prepare: FB[%u]", plane->name, fb->base.id);
281 return msm_framebuffer_prepare(fb, mdp5_kms->id); 282 return msm_framebuffer_prepare(fb, kms->id);
282} 283}
283 284
284static void mdp5_plane_cleanup_fb(struct drm_plane *plane, 285static void mdp5_plane_cleanup_fb(struct drm_plane *plane,
285 struct drm_plane_state *old_state) 286 struct drm_plane_state *old_state)
286{ 287{
287 struct mdp5_kms *mdp5_kms = get_kms(plane); 288 struct mdp5_kms *mdp5_kms = get_kms(plane);
289 struct msm_kms *kms = &mdp5_kms->base.base;
288 struct drm_framebuffer *fb = old_state->fb; 290 struct drm_framebuffer *fb = old_state->fb;
289 291
290 if (!fb) 292 if (!fb)
291 return; 293 return;
292 294
293 DBG("%s: cleanup: FB[%u]", plane->name, fb->base.id); 295 DBG("%s: cleanup: FB[%u]", plane->name, fb->base.id);
294 msm_framebuffer_cleanup(fb, mdp5_kms->id); 296 msm_framebuffer_cleanup(fb, kms->id);
295} 297}
296 298
297#define FRAC_16_16(mult, div) (((mult) << 16) / (div)) 299#define FRAC_16_16(mult, div) (((mult) << 16) / (div))
@@ -498,6 +500,8 @@ static void set_scanout_locked(struct mdp5_kms *mdp5_kms,
498 enum mdp5_pipe pipe, 500 enum mdp5_pipe pipe,
499 struct drm_framebuffer *fb) 501 struct drm_framebuffer *fb)
500{ 502{
503 struct msm_kms *kms = &mdp5_kms->base.base;
504
501 mdp5_write(mdp5_kms, REG_MDP5_PIPE_SRC_STRIDE_A(pipe), 505 mdp5_write(mdp5_kms, REG_MDP5_PIPE_SRC_STRIDE_A(pipe),
502 MDP5_PIPE_SRC_STRIDE_A_P0(fb->pitches[0]) | 506 MDP5_PIPE_SRC_STRIDE_A_P0(fb->pitches[0]) |
503 MDP5_PIPE_SRC_STRIDE_A_P1(fb->pitches[1])); 507 MDP5_PIPE_SRC_STRIDE_A_P1(fb->pitches[1]));
@@ -507,13 +511,13 @@ static void set_scanout_locked(struct mdp5_kms *mdp5_kms,
507 MDP5_PIPE_SRC_STRIDE_B_P3(fb->pitches[3])); 511 MDP5_PIPE_SRC_STRIDE_B_P3(fb->pitches[3]));
508 512
509 mdp5_write(mdp5_kms, REG_MDP5_PIPE_SRC0_ADDR(pipe), 513 mdp5_write(mdp5_kms, REG_MDP5_PIPE_SRC0_ADDR(pipe),
510 msm_framebuffer_iova(fb, mdp5_kms->id, 0)); 514 msm_framebuffer_iova(fb, kms->id, 0));
511 mdp5_write(mdp5_kms, REG_MDP5_PIPE_SRC1_ADDR(pipe), 515 mdp5_write(mdp5_kms, REG_MDP5_PIPE_SRC1_ADDR(pipe),
512 msm_framebuffer_iova(fb, mdp5_kms->id, 1)); 516 msm_framebuffer_iova(fb, kms->id, 1));
513 mdp5_write(mdp5_kms, REG_MDP5_PIPE_SRC2_ADDR(pipe), 517 mdp5_write(mdp5_kms, REG_MDP5_PIPE_SRC2_ADDR(pipe),
514 msm_framebuffer_iova(fb, mdp5_kms->id, 2)); 518 msm_framebuffer_iova(fb, kms->id, 2));
515 mdp5_write(mdp5_kms, REG_MDP5_PIPE_SRC3_ADDR(pipe), 519 mdp5_write(mdp5_kms, REG_MDP5_PIPE_SRC3_ADDR(pipe),
516 msm_framebuffer_iova(fb, mdp5_kms->id, 3)); 520 msm_framebuffer_iova(fb, kms->id, 3));
517} 521}
518 522
519/* Note: mdp5_plane->pipe_lock must be locked */ 523/* Note: mdp5_plane->pipe_lock must be locked */
diff --git a/drivers/gpu/drm/msm/msm_fbdev.c b/drivers/gpu/drm/msm/msm_fbdev.c
index feea8ba4e05b..3c08d6d35944 100644
--- a/drivers/gpu/drm/msm/msm_fbdev.c
+++ b/drivers/gpu/drm/msm/msm_fbdev.c
@@ -20,6 +20,7 @@
20 20
21#include "msm_drv.h" 21#include "msm_drv.h"
22#include "msm_gem.h" 22#include "msm_gem.h"
23#include "msm_kms.h"
23 24
24extern int msm_gem_mmap_obj(struct drm_gem_object *obj, 25extern int msm_gem_mmap_obj(struct drm_gem_object *obj,
25 struct vm_area_struct *vma); 26 struct vm_area_struct *vma);
@@ -73,6 +74,7 @@ static int msm_fbdev_create(struct drm_fb_helper *helper,
73{ 74{
74 struct msm_fbdev *fbdev = to_msm_fbdev(helper); 75 struct msm_fbdev *fbdev = to_msm_fbdev(helper);
75 struct drm_device *dev = helper->dev; 76 struct drm_device *dev = helper->dev;
77 struct msm_drm_private *priv = dev->dev_private;
76 struct drm_framebuffer *fb = NULL; 78 struct drm_framebuffer *fb = NULL;
77 struct fb_info *fbi = NULL; 79 struct fb_info *fbi = NULL;
78 struct drm_mode_fb_cmd2 mode_cmd = {0}; 80 struct drm_mode_fb_cmd2 mode_cmd = {0};
@@ -124,7 +126,7 @@ static int msm_fbdev_create(struct drm_fb_helper *helper,
124 * in panic (ie. lock-safe, etc) we could avoid pinning the 126 * in panic (ie. lock-safe, etc) we could avoid pinning the
125 * buffer now: 127 * buffer now:
126 */ 128 */
127 ret = msm_gem_get_iova_locked(fbdev->bo, 0, &paddr); 129 ret = msm_gem_get_iova_locked(fbdev->bo, priv->kms->id, &paddr);
128 if (ret) { 130 if (ret) {
129 dev_err(dev->dev, "failed to get buffer obj iova: %d\n", ret); 131 dev_err(dev->dev, "failed to get buffer obj iova: %d\n", ret);
130 goto fail_unlock; 132 goto fail_unlock;
diff --git a/drivers/gpu/drm/msm/msm_kms.h b/drivers/gpu/drm/msm/msm_kms.h
index faa22c7c5423..0b98171415fc 100644
--- a/drivers/gpu/drm/msm/msm_kms.h
+++ b/drivers/gpu/drm/msm/msm_kms.h
@@ -72,6 +72,10 @@ struct msm_kms {
72 72
73 /* irq number to be passed on to drm_irq_install */ 73 /* irq number to be passed on to drm_irq_install */
74 int irq; 74 int irq;
75
76 /* mapper-id used to request GEM buffer mapped for scanout: */
77 int id;
78 struct msm_gem_address_space *aspace;
75}; 79};
76 80
77/** 81/**