diff options
-rw-r--r-- | drivers/gpu/drm/msm/dsi/dsi_host.c | 10 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c | 9 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c | 14 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.h | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/mdp/mdp4/mdp4_plane.c | 15 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c | 10 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c | 16 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/msm_fbdev.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/msm_kms.h | 4 |
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 | ||
36 | static int dsi_get_version(const void __iomem *base, u32 *major, u32 *minor) | 37 | static 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) | |||
975 | static int dsi_tx_buf_alloc(struct msm_dsi_host *msm_host, int size) | 976 | static 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) | |||
1141 | static int dsi_cmd_dma_tx(struct msm_dsi_host *msm_host, int len) | 1144 | static 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 | ||
115 | static void mdp4_plane_cleanup_fb(struct drm_plane *plane, | 116 | static 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, | |||
163 | static void mdp5_kms_destroy(struct msm_kms *kms) | 163 | static 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 | ||
284 | static void mdp5_plane_cleanup_fb(struct drm_plane *plane, | 285 | static 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 | ||
24 | extern int msm_gem_mmap_obj(struct drm_gem_object *obj, | 25 | extern 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 | /** |