aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRob Clark <robdclark@gmail.com>2014-11-18 17:22:51 -0500
committerRob Clark <robdclark@gmail.com>2014-11-21 08:57:21 -0500
commit32c0e3e24c885ffeecb6d3a67ecb607b8fe63129 (patch)
tree66c3b60ae6234be0185d6717b6ccbb23c54a89f7
parent42238da8b10320420be19f056cc8e0d95cc606a3 (diff)
drm/msm/mdp5: remove global mdp5_ctl_mgr
A bit cleaner.. and won't resulting in an attempt to kfree() a static global in unload path. Signed-off-by: Rob Clark <robdclark@gmail.com>
-rw-r--r--drivers/gpu/drm/msm/mdp/mdp5/mdp5_ctl.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_ctl.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_ctl.c
index c5347a797ab6..dea4505ac963 100644
--- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_ctl.c
+++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_ctl.c
@@ -34,6 +34,8 @@
34 */ 34 */
35 35
36struct mdp5_ctl { 36struct mdp5_ctl {
37 struct mdp5_ctl_manager *ctlm;
38
37 u32 id; 39 u32 id;
38 40
39 /* whether this CTL has been allocated or not: */ 41 /* whether this CTL has been allocated or not: */
@@ -66,8 +68,6 @@ struct mdp5_ctl_manager {
66 struct mdp5_ctl ctls[MAX_CTL]; 68 struct mdp5_ctl ctls[MAX_CTL];
67}; 69};
68 70
69static struct mdp5_ctl_manager mdp5_ctl_mgr;
70
71static inline 71static inline
72struct mdp5_kms *get_kms(struct mdp5_ctl_manager *ctl_mgr) 72struct mdp5_kms *get_kms(struct mdp5_ctl_manager *ctl_mgr)
73{ 73{
@@ -79,8 +79,7 @@ struct mdp5_kms *get_kms(struct mdp5_ctl_manager *ctl_mgr)
79static inline 79static inline
80void ctl_write(struct mdp5_ctl *ctl, u32 reg, u32 data) 80void ctl_write(struct mdp5_ctl *ctl, u32 reg, u32 data)
81{ 81{
82 struct mdp5_ctl_manager *ctl_mgr = &mdp5_ctl_mgr; 82 struct mdp5_kms *mdp5_kms = get_kms(ctl->ctlm);
83 struct mdp5_kms *mdp5_kms = get_kms(ctl_mgr);
84 83
85 (void)ctl->reg_offset; /* TODO use this instead of mdp5_write */ 84 (void)ctl->reg_offset; /* TODO use this instead of mdp5_write */
86 mdp5_write(mdp5_kms, reg, data); 85 mdp5_write(mdp5_kms, reg, data);
@@ -89,8 +88,7 @@ void ctl_write(struct mdp5_ctl *ctl, u32 reg, u32 data)
89static inline 88static inline
90u32 ctl_read(struct mdp5_ctl *ctl, u32 reg) 89u32 ctl_read(struct mdp5_ctl *ctl, u32 reg)
91{ 90{
92 struct mdp5_ctl_manager *ctl_mgr = &mdp5_ctl_mgr; 91 struct mdp5_kms *mdp5_kms = get_kms(ctl->ctlm);
93 struct mdp5_kms *mdp5_kms = get_kms(ctl_mgr);
94 92
95 (void)ctl->reg_offset; /* TODO use this instead of mdp5_write */ 93 (void)ctl->reg_offset; /* TODO use this instead of mdp5_write */
96 return mdp5_read(mdp5_kms, reg); 94 return mdp5_read(mdp5_kms, reg);
@@ -115,7 +113,7 @@ int mdp5_ctl_set_intf(struct mdp5_ctl *ctl, enum mdp5_intf intf)
115 113
116int mdp5_ctl_set_cursor(struct mdp5_ctl *ctl, bool enable) 114int mdp5_ctl_set_cursor(struct mdp5_ctl *ctl, bool enable)
117{ 115{
118 struct mdp5_ctl_manager *ctl_mgr = &mdp5_ctl_mgr; 116 struct mdp5_ctl_manager *ctl_mgr = ctl->ctlm;
119 unsigned long flags; 117 unsigned long flags;
120 u32 blend_cfg; 118 u32 blend_cfg;
121 int lm; 119 int lm;
@@ -164,7 +162,7 @@ int mdp5_ctl_blend(struct mdp5_ctl *ctl, u32 lm, u32 blend_cfg)
164 162
165int mdp5_ctl_commit(struct mdp5_ctl *ctl, u32 flush_mask) 163int mdp5_ctl_commit(struct mdp5_ctl *ctl, u32 flush_mask)
166{ 164{
167 struct mdp5_ctl_manager *ctl_mgr = &mdp5_ctl_mgr; 165 struct mdp5_ctl_manager *ctl_mgr = ctl->ctlm;
168 unsigned long flags; 166 unsigned long flags;
169 167
170 if (flush_mask & MDP5_CTL_FLUSH_CURSOR_DUMMY) { 168 if (flush_mask & MDP5_CTL_FLUSH_CURSOR_DUMMY) {
@@ -194,7 +192,7 @@ u32 mdp5_ctl_get_flush(struct mdp5_ctl *ctl)
194 192
195void mdp5_ctl_release(struct mdp5_ctl *ctl) 193void mdp5_ctl_release(struct mdp5_ctl *ctl)
196{ 194{
197 struct mdp5_ctl_manager *ctl_mgr = &mdp5_ctl_mgr; 195 struct mdp5_ctl_manager *ctl_mgr = ctl->ctlm;
198 unsigned long flags; 196 unsigned long flags;
199 197
200 if (unlikely(WARN_ON(ctl->id >= MAX_CTL) || !ctl->busy)) { 198 if (unlikely(WARN_ON(ctl->id >= MAX_CTL) || !ctl->busy)) {
@@ -268,11 +266,18 @@ void mdp5_ctlm_destroy(struct mdp5_ctl_manager *ctl_mgr)
268struct mdp5_ctl_manager *mdp5_ctlm_init(struct drm_device *dev, 266struct mdp5_ctl_manager *mdp5_ctlm_init(struct drm_device *dev,
269 void __iomem *mmio_base, const struct mdp5_cfg_hw *hw_cfg) 267 void __iomem *mmio_base, const struct mdp5_cfg_hw *hw_cfg)
270{ 268{
271 struct mdp5_ctl_manager *ctl_mgr = &mdp5_ctl_mgr; 269 struct mdp5_ctl_manager *ctl_mgr;
272 const struct mdp5_sub_block *ctl_cfg = &hw_cfg->ctl; 270 const struct mdp5_sub_block *ctl_cfg = &hw_cfg->ctl;
273 unsigned long flags; 271 unsigned long flags;
274 int c, ret; 272 int c, ret;
275 273
274 ctl_mgr = kzalloc(sizeof(*ctl_mgr), GFP_KERNEL);
275 if (!ctl_mgr) {
276 dev_err(dev->dev, "failed to allocate CTL manager\n");
277 ret = -ENOMEM;
278 goto fail;
279 }
280
276 if (unlikely(WARN_ON(ctl_cfg->count > MAX_CTL))) { 281 if (unlikely(WARN_ON(ctl_cfg->count > MAX_CTL))) {
277 dev_err(dev->dev, "Increase static pool size to at least %d\n", 282 dev_err(dev->dev, "Increase static pool size to at least %d\n",
278 ctl_cfg->count); 283 ctl_cfg->count);
@@ -296,6 +301,7 @@ struct mdp5_ctl_manager *mdp5_ctlm_init(struct drm_device *dev,
296 ret = -EINVAL; 301 ret = -EINVAL;
297 goto fail; 302 goto fail;
298 } 303 }
304 ctl->ctlm = ctl_mgr;
299 ctl->id = c; 305 ctl->id = c;
300 ctl->mode = MODE_NONE; 306 ctl->mode = MODE_NONE;
301 ctl->reg_offset = ctl_cfg->base[c]; 307 ctl->reg_offset = ctl_cfg->base[c];