28524ea8601f7a8341b6187a175b129e6f0cd7c6
[platform/kernel/linux-rpi.git] / drivers / gpu / drm / msm / msm_drv.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (c) 2016-2018, 2020-2021 The Linux Foundation. All rights reserved.
4  * Copyright (C) 2013 Red Hat
5  * Author: Rob Clark <robdclark@gmail.com>
6  */
7
8 #include <linux/dma-mapping.h>
9 #include <linux/kthread.h>
10 #include <linux/sched/mm.h>
11 #include <linux/uaccess.h>
12 #include <uapi/linux/sched/types.h>
13
14 #include <drm/drm_bridge.h>
15 #include <drm/drm_drv.h>
16 #include <drm/drm_file.h>
17 #include <drm/drm_ioctl.h>
18 #include <drm/drm_prime.h>
19 #include <drm/drm_of.h>
20 #include <drm/drm_vblank.h>
21
22 #include "disp/msm_disp_snapshot.h"
23 #include "msm_drv.h"
24 #include "msm_debugfs.h"
25 #include "msm_fence.h"
26 #include "msm_gem.h"
27 #include "msm_gpu.h"
28 #include "msm_kms.h"
29 #include "adreno/adreno_gpu.h"
30
31 /*
32  * MSM driver version:
33  * - 1.0.0 - initial interface
34  * - 1.1.0 - adds madvise, and support for submits with > 4 cmd buffers
35  * - 1.2.0 - adds explicit fence support for submit ioctl
36  * - 1.3.0 - adds GMEM_BASE + NR_RINGS params, SUBMITQUEUE_NEW +
37  *           SUBMITQUEUE_CLOSE ioctls, and MSM_INFO_IOVA flag for
38  *           MSM_GEM_INFO ioctl.
39  * - 1.4.0 - softpin, MSM_RELOC_BO_DUMP, and GEM_INFO support to set/get
40  *           GEM object's debug name
41  * - 1.5.0 - Add SUBMITQUERY_QUERY ioctl
42  * - 1.6.0 - Syncobj support
43  * - 1.7.0 - Add MSM_PARAM_SUSPENDS to access suspend count
44  * - 1.8.0 - Add MSM_BO_CACHED_COHERENT for supported GPUs (a6xx)
45  */
46 #define MSM_VERSION_MAJOR       1
47 #define MSM_VERSION_MINOR       8
48 #define MSM_VERSION_PATCHLEVEL  0
49
50 static const struct drm_mode_config_funcs mode_config_funcs = {
51         .fb_create = msm_framebuffer_create,
52         .output_poll_changed = drm_fb_helper_output_poll_changed,
53         .atomic_check = drm_atomic_helper_check,
54         .atomic_commit = drm_atomic_helper_commit,
55 };
56
57 static const struct drm_mode_config_helper_funcs mode_config_helper_funcs = {
58         .atomic_commit_tail = msm_atomic_commit_tail,
59 };
60
61 #ifdef CONFIG_DRM_MSM_REGISTER_LOGGING
62 static bool reglog = false;
63 MODULE_PARM_DESC(reglog, "Enable register read/write logging");
64 module_param(reglog, bool, 0600);
65 #else
66 #define reglog 0
67 #endif
68
69 #ifdef CONFIG_DRM_FBDEV_EMULATION
70 static bool fbdev = true;
71 MODULE_PARM_DESC(fbdev, "Enable fbdev compat layer");
72 module_param(fbdev, bool, 0600);
73 #endif
74
75 static char *vram = "16m";
76 MODULE_PARM_DESC(vram, "Configure VRAM size (for devices without IOMMU/GPUMMU)");
77 module_param(vram, charp, 0);
78
79 bool dumpstate = false;
80 MODULE_PARM_DESC(dumpstate, "Dump KMS state on errors");
81 module_param(dumpstate, bool, 0600);
82
83 static bool modeset = true;
84 MODULE_PARM_DESC(modeset, "Use kernel modesetting [KMS] (1=on (default), 0=disable)");
85 module_param(modeset, bool, 0600);
86
87 /*
88  * Util/helpers:
89  */
90
91 struct clk *msm_clk_bulk_get_clock(struct clk_bulk_data *bulk, int count,
92                 const char *name)
93 {
94         int i;
95         char n[32];
96
97         snprintf(n, sizeof(n), "%s_clk", name);
98
99         for (i = 0; bulk && i < count; i++) {
100                 if (!strcmp(bulk[i].id, name) || !strcmp(bulk[i].id, n))
101                         return bulk[i].clk;
102         }
103
104
105         return NULL;
106 }
107
108 struct clk *msm_clk_get(struct platform_device *pdev, const char *name)
109 {
110         struct clk *clk;
111         char name2[32];
112
113         clk = devm_clk_get(&pdev->dev, name);
114         if (!IS_ERR(clk) || PTR_ERR(clk) == -EPROBE_DEFER)
115                 return clk;
116
117         snprintf(name2, sizeof(name2), "%s_clk", name);
118
119         clk = devm_clk_get(&pdev->dev, name2);
120         if (!IS_ERR(clk))
121                 dev_warn(&pdev->dev, "Using legacy clk name binding.  Use "
122                                 "\"%s\" instead of \"%s\"\n", name, name2);
123
124         return clk;
125 }
126
127 static void __iomem *_msm_ioremap(struct platform_device *pdev, const char *name,
128                                   const char *dbgname, bool quiet, phys_addr_t *psize)
129 {
130         struct resource *res;
131         unsigned long size;
132         void __iomem *ptr;
133
134         if (name)
135                 res = platform_get_resource_byname(pdev, IORESOURCE_MEM, name);
136         else
137                 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
138
139         if (!res) {
140                 if (!quiet)
141                         DRM_DEV_ERROR(&pdev->dev, "failed to get memory resource: %s\n", name);
142                 return ERR_PTR(-EINVAL);
143         }
144
145         size = resource_size(res);
146
147         ptr = devm_ioremap(&pdev->dev, res->start, size);
148         if (!ptr) {
149                 if (!quiet)
150                         DRM_DEV_ERROR(&pdev->dev, "failed to ioremap: %s\n", name);
151                 return ERR_PTR(-ENOMEM);
152         }
153
154         if (reglog)
155                 printk(KERN_DEBUG "IO:region %s %p %08lx\n", dbgname, ptr, size);
156
157         if (psize)
158                 *psize = size;
159
160         return ptr;
161 }
162
163 void __iomem *msm_ioremap(struct platform_device *pdev, const char *name,
164                           const char *dbgname)
165 {
166         return _msm_ioremap(pdev, name, dbgname, false, NULL);
167 }
168
169 void __iomem *msm_ioremap_quiet(struct platform_device *pdev, const char *name,
170                                 const char *dbgname)
171 {
172         return _msm_ioremap(pdev, name, dbgname, true, NULL);
173 }
174
175 void __iomem *msm_ioremap_size(struct platform_device *pdev, const char *name,
176                           const char *dbgname, phys_addr_t *psize)
177 {
178         return _msm_ioremap(pdev, name, dbgname, false, psize);
179 }
180
181 void msm_writel(u32 data, void __iomem *addr)
182 {
183         if (reglog)
184                 printk(KERN_DEBUG "IO:W %p %08x\n", addr, data);
185         writel(data, addr);
186 }
187
188 u32 msm_readl(const void __iomem *addr)
189 {
190         u32 val = readl(addr);
191         if (reglog)
192                 pr_err("IO:R %p %08x\n", addr, val);
193         return val;
194 }
195
196 void msm_rmw(void __iomem *addr, u32 mask, u32 or)
197 {
198         u32 val = msm_readl(addr);
199
200         val &= ~mask;
201         msm_writel(val | or, addr);
202 }
203
204 static irqreturn_t msm_irq(int irq, void *arg)
205 {
206         struct drm_device *dev = arg;
207         struct msm_drm_private *priv = dev->dev_private;
208         struct msm_kms *kms = priv->kms;
209
210         BUG_ON(!kms);
211
212         return kms->funcs->irq(kms);
213 }
214
215 static void msm_irq_preinstall(struct drm_device *dev)
216 {
217         struct msm_drm_private *priv = dev->dev_private;
218         struct msm_kms *kms = priv->kms;
219
220         BUG_ON(!kms);
221
222         kms->funcs->irq_preinstall(kms);
223 }
224
225 static int msm_irq_postinstall(struct drm_device *dev)
226 {
227         struct msm_drm_private *priv = dev->dev_private;
228         struct msm_kms *kms = priv->kms;
229
230         BUG_ON(!kms);
231
232         if (kms->funcs->irq_postinstall)
233                 return kms->funcs->irq_postinstall(kms);
234
235         return 0;
236 }
237
238 static int msm_irq_install(struct drm_device *dev, unsigned int irq)
239 {
240         int ret;
241
242         if (irq == IRQ_NOTCONNECTED)
243                 return -ENOTCONN;
244
245         msm_irq_preinstall(dev);
246
247         ret = request_irq(irq, msm_irq, 0, dev->driver->name, dev);
248         if (ret)
249                 return ret;
250
251         ret = msm_irq_postinstall(dev);
252         if (ret) {
253                 free_irq(irq, dev);
254                 return ret;
255         }
256
257         return 0;
258 }
259
260 static void msm_irq_uninstall(struct drm_device *dev)
261 {
262         struct msm_drm_private *priv = dev->dev_private;
263         struct msm_kms *kms = priv->kms;
264
265         kms->funcs->irq_uninstall(kms);
266         free_irq(kms->irq, dev);
267 }
268
269 struct msm_vblank_work {
270         struct work_struct work;
271         int crtc_id;
272         bool enable;
273         struct msm_drm_private *priv;
274 };
275
276 static void vblank_ctrl_worker(struct work_struct *work)
277 {
278         struct msm_vblank_work *vbl_work = container_of(work,
279                                                 struct msm_vblank_work, work);
280         struct msm_drm_private *priv = vbl_work->priv;
281         struct msm_kms *kms = priv->kms;
282
283         if (vbl_work->enable)
284                 kms->funcs->enable_vblank(kms, priv->crtcs[vbl_work->crtc_id]);
285         else
286                 kms->funcs->disable_vblank(kms, priv->crtcs[vbl_work->crtc_id]);
287
288         kfree(vbl_work);
289 }
290
291 static int vblank_ctrl_queue_work(struct msm_drm_private *priv,
292                                         int crtc_id, bool enable)
293 {
294         struct msm_vblank_work *vbl_work;
295
296         vbl_work = kzalloc(sizeof(*vbl_work), GFP_ATOMIC);
297         if (!vbl_work)
298                 return -ENOMEM;
299
300         INIT_WORK(&vbl_work->work, vblank_ctrl_worker);
301
302         vbl_work->crtc_id = crtc_id;
303         vbl_work->enable = enable;
304         vbl_work->priv = priv;
305
306         queue_work(priv->wq, &vbl_work->work);
307
308         return 0;
309 }
310
311 static int msm_drm_uninit(struct device *dev)
312 {
313         struct platform_device *pdev = to_platform_device(dev);
314         struct drm_device *ddev = platform_get_drvdata(pdev);
315         struct msm_drm_private *priv = ddev->dev_private;
316         struct msm_kms *kms = priv->kms;
317         struct msm_mdss *mdss = priv->mdss;
318         int i;
319
320         /*
321          * Shutdown the hw if we're far enough along where things might be on.
322          * If we run this too early, we'll end up panicking in any variety of
323          * places. Since we don't register the drm device until late in
324          * msm_drm_init, drm_dev->registered is used as an indicator that the
325          * shutdown will be successful.
326          */
327         if (ddev->registered) {
328                 drm_dev_unregister(ddev);
329                 drm_atomic_helper_shutdown(ddev);
330         }
331
332         /* We must cancel and cleanup any pending vblank enable/disable
333          * work before msm_irq_uninstall() to avoid work re-enabling an
334          * irq after uninstall has disabled it.
335          */
336
337         flush_workqueue(priv->wq);
338
339         /* clean up event worker threads */
340         for (i = 0; i < priv->num_crtcs; i++) {
341                 if (priv->event_thread[i].worker)
342                         kthread_destroy_worker(priv->event_thread[i].worker);
343         }
344
345         msm_gem_shrinker_cleanup(ddev);
346
347         drm_kms_helper_poll_fini(ddev);
348
349         msm_perf_debugfs_cleanup(priv);
350         msm_rd_debugfs_cleanup(priv);
351
352 #ifdef CONFIG_DRM_FBDEV_EMULATION
353         if (fbdev && priv->fbdev)
354                 msm_fbdev_free(ddev);
355 #endif
356
357         msm_disp_snapshot_destroy(ddev);
358
359         drm_mode_config_cleanup(ddev);
360
361         pm_runtime_get_sync(dev);
362         msm_irq_uninstall(ddev);
363         pm_runtime_put_sync(dev);
364
365         if (kms && kms->funcs)
366                 kms->funcs->destroy(kms);
367
368         if (priv->vram.paddr) {
369                 unsigned long attrs = DMA_ATTR_NO_KERNEL_MAPPING;
370                 drm_mm_takedown(&priv->vram.mm);
371                 dma_free_attrs(dev, priv->vram.size, NULL,
372                                priv->vram.paddr, attrs);
373         }
374
375         component_unbind_all(dev, ddev);
376
377         if (mdss && mdss->funcs)
378                 mdss->funcs->destroy(ddev);
379
380         ddev->dev_private = NULL;
381         drm_dev_put(ddev);
382
383         destroy_workqueue(priv->wq);
384         kfree(priv);
385
386         return 0;
387 }
388
389 #define KMS_MDP4 4
390 #define KMS_MDP5 5
391 #define KMS_DPU  3
392
393 static int get_mdp_ver(struct platform_device *pdev)
394 {
395         struct device *dev = &pdev->dev;
396
397         return (int) (unsigned long) of_device_get_match_data(dev);
398 }
399
400 #include <linux/of_address.h>
401
402 bool msm_use_mmu(struct drm_device *dev)
403 {
404         struct msm_drm_private *priv = dev->dev_private;
405
406         /* a2xx comes with its own MMU */
407         return priv->is_a2xx || iommu_present(&platform_bus_type);
408 }
409
410 static int msm_init_vram(struct drm_device *dev)
411 {
412         struct msm_drm_private *priv = dev->dev_private;
413         struct device_node *node;
414         unsigned long size = 0;
415         int ret = 0;
416
417         /* In the device-tree world, we could have a 'memory-region'
418          * phandle, which gives us a link to our "vram".  Allocating
419          * is all nicely abstracted behind the dma api, but we need
420          * to know the entire size to allocate it all in one go. There
421          * are two cases:
422          *  1) device with no IOMMU, in which case we need exclusive
423          *     access to a VRAM carveout big enough for all gpu
424          *     buffers
425          *  2) device with IOMMU, but where the bootloader puts up
426          *     a splash screen.  In this case, the VRAM carveout
427          *     need only be large enough for fbdev fb.  But we need
428          *     exclusive access to the buffer to avoid the kernel
429          *     using those pages for other purposes (which appears
430          *     as corruption on screen before we have a chance to
431          *     load and do initial modeset)
432          */
433
434         node = of_parse_phandle(dev->dev->of_node, "memory-region", 0);
435         if (node) {
436                 struct resource r;
437                 ret = of_address_to_resource(node, 0, &r);
438                 of_node_put(node);
439                 if (ret)
440                         return ret;
441                 size = r.end - r.start + 1;
442                 DRM_INFO("using VRAM carveout: %lx@%pa\n", size, &r.start);
443
444                 /* if we have no IOMMU, then we need to use carveout allocator.
445                  * Grab the entire CMA chunk carved out in early startup in
446                  * mach-msm:
447                  */
448         } else if (!msm_use_mmu(dev)) {
449                 DRM_INFO("using %s VRAM carveout\n", vram);
450                 size = memparse(vram, NULL);
451         }
452
453         if (size) {
454                 unsigned long attrs = 0;
455                 void *p;
456
457                 priv->vram.size = size;
458
459                 drm_mm_init(&priv->vram.mm, 0, (size >> PAGE_SHIFT) - 1);
460                 spin_lock_init(&priv->vram.lock);
461
462                 attrs |= DMA_ATTR_NO_KERNEL_MAPPING;
463                 attrs |= DMA_ATTR_WRITE_COMBINE;
464
465                 /* note that for no-kernel-mapping, the vaddr returned
466                  * is bogus, but non-null if allocation succeeded:
467                  */
468                 p = dma_alloc_attrs(dev->dev, size,
469                                 &priv->vram.paddr, GFP_KERNEL, attrs);
470                 if (!p) {
471                         DRM_DEV_ERROR(dev->dev, "failed to allocate VRAM\n");
472                         priv->vram.paddr = 0;
473                         return -ENOMEM;
474                 }
475
476                 DRM_DEV_INFO(dev->dev, "VRAM: %08x->%08x\n",
477                                 (uint32_t)priv->vram.paddr,
478                                 (uint32_t)(priv->vram.paddr + size));
479         }
480
481         return ret;
482 }
483
484 static int msm_drm_init(struct device *dev, const struct drm_driver *drv)
485 {
486         struct platform_device *pdev = to_platform_device(dev);
487         struct drm_device *ddev;
488         struct msm_drm_private *priv;
489         struct msm_kms *kms;
490         struct msm_mdss *mdss;
491         int ret, i;
492
493         ddev = drm_dev_alloc(drv, dev);
494         if (IS_ERR(ddev)) {
495                 DRM_DEV_ERROR(dev, "failed to allocate drm_device\n");
496                 return PTR_ERR(ddev);
497         }
498
499         platform_set_drvdata(pdev, ddev);
500
501         priv = kzalloc(sizeof(*priv), GFP_KERNEL);
502         if (!priv) {
503                 ret = -ENOMEM;
504                 goto err_put_drm_dev;
505         }
506
507         ddev->dev_private = priv;
508         priv->dev = ddev;
509
510         switch (get_mdp_ver(pdev)) {
511         case KMS_MDP5:
512                 ret = mdp5_mdss_init(ddev);
513                 break;
514         case KMS_DPU:
515                 ret = dpu_mdss_init(ddev);
516                 break;
517         default:
518                 ret = 0;
519                 break;
520         }
521         if (ret)
522                 goto err_free_priv;
523
524         mdss = priv->mdss;
525
526         priv->wq = alloc_ordered_workqueue("msm", 0);
527         priv->hangcheck_period = DRM_MSM_HANGCHECK_DEFAULT_PERIOD;
528
529         INIT_LIST_HEAD(&priv->objects);
530         mutex_init(&priv->obj_lock);
531
532         INIT_LIST_HEAD(&priv->inactive_willneed);
533         INIT_LIST_HEAD(&priv->inactive_dontneed);
534         INIT_LIST_HEAD(&priv->inactive_unpinned);
535         mutex_init(&priv->mm_lock);
536
537         /* Teach lockdep about lock ordering wrt. shrinker: */
538         fs_reclaim_acquire(GFP_KERNEL);
539         might_lock(&priv->mm_lock);
540         fs_reclaim_release(GFP_KERNEL);
541
542         drm_mode_config_init(ddev);
543
544         ret = msm_init_vram(ddev);
545         if (ret)
546                 goto err_destroy_mdss;
547
548         /* Bind all our sub-components: */
549         ret = component_bind_all(dev, ddev);
550         if (ret)
551                 goto err_destroy_mdss;
552
553         dma_set_max_seg_size(dev, UINT_MAX);
554
555         msm_gem_shrinker_init(ddev);
556
557         switch (get_mdp_ver(pdev)) {
558         case KMS_MDP4:
559                 kms = mdp4_kms_init(ddev);
560                 priv->kms = kms;
561                 break;
562         case KMS_MDP5:
563                 kms = mdp5_kms_init(ddev);
564                 break;
565         case KMS_DPU:
566                 kms = dpu_kms_init(ddev);
567                 priv->kms = kms;
568                 break;
569         default:
570                 /* valid only for the dummy headless case, where of_node=NULL */
571                 WARN_ON(dev->of_node);
572                 kms = NULL;
573                 break;
574         }
575
576         if (IS_ERR(kms)) {
577                 DRM_DEV_ERROR(dev, "failed to load kms\n");
578                 ret = PTR_ERR(kms);
579                 priv->kms = NULL;
580                 goto err_msm_uninit;
581         }
582
583         /* Enable normalization of plane zpos */
584         ddev->mode_config.normalize_zpos = true;
585
586         if (kms) {
587                 kms->dev = ddev;
588                 ret = kms->funcs->hw_init(kms);
589                 if (ret) {
590                         DRM_DEV_ERROR(dev, "kms hw init failed: %d\n", ret);
591                         goto err_msm_uninit;
592                 }
593         }
594
595         ddev->mode_config.funcs = &mode_config_funcs;
596         ddev->mode_config.helper_private = &mode_config_helper_funcs;
597
598         for (i = 0; i < priv->num_crtcs; i++) {
599                 /* initialize event thread */
600                 priv->event_thread[i].crtc_id = priv->crtcs[i]->base.id;
601                 priv->event_thread[i].dev = ddev;
602                 priv->event_thread[i].worker = kthread_create_worker(0,
603                         "crtc_event:%d", priv->event_thread[i].crtc_id);
604                 if (IS_ERR(priv->event_thread[i].worker)) {
605                         ret = PTR_ERR(priv->event_thread[i].worker);
606                         DRM_DEV_ERROR(dev, "failed to create crtc_event kthread\n");
607                         ret = PTR_ERR(priv->event_thread[i].worker);
608                         goto err_msm_uninit;
609                 }
610
611                 sched_set_fifo(priv->event_thread[i].worker->task);
612         }
613
614         ret = drm_vblank_init(ddev, priv->num_crtcs);
615         if (ret < 0) {
616                 DRM_DEV_ERROR(dev, "failed to initialize vblank\n");
617                 goto err_msm_uninit;
618         }
619
620         if (kms) {
621                 pm_runtime_get_sync(dev);
622                 ret = msm_irq_install(ddev, kms->irq);
623                 pm_runtime_put_sync(dev);
624                 if (ret < 0) {
625                         DRM_DEV_ERROR(dev, "failed to install IRQ handler\n");
626                         goto err_msm_uninit;
627                 }
628         }
629
630         ret = drm_dev_register(ddev, 0);
631         if (ret)
632                 goto err_msm_uninit;
633
634         if (kms) {
635                 ret = msm_disp_snapshot_init(ddev);
636                 if (ret)
637                         DRM_DEV_ERROR(dev, "msm_disp_snapshot_init failed ret = %d\n", ret);
638         }
639         drm_mode_config_reset(ddev);
640
641 #ifdef CONFIG_DRM_FBDEV_EMULATION
642         if (kms && fbdev)
643                 priv->fbdev = msm_fbdev_init(ddev);
644 #endif
645
646         ret = msm_debugfs_late_init(ddev);
647         if (ret)
648                 goto err_msm_uninit;
649
650         drm_kms_helper_poll_init(ddev);
651
652         return 0;
653
654 err_msm_uninit:
655         msm_drm_uninit(dev);
656         return ret;
657 err_destroy_mdss:
658         if (mdss && mdss->funcs)
659                 mdss->funcs->destroy(ddev);
660 err_free_priv:
661         kfree(priv);
662 err_put_drm_dev:
663         drm_dev_put(ddev);
664         platform_set_drvdata(pdev, NULL);
665         return ret;
666 }
667
668 /*
669  * DRM operations:
670  */
671
672 static void load_gpu(struct drm_device *dev)
673 {
674         static DEFINE_MUTEX(init_lock);
675         struct msm_drm_private *priv = dev->dev_private;
676
677         mutex_lock(&init_lock);
678
679         if (!priv->gpu)
680                 priv->gpu = adreno_load_gpu(dev);
681
682         mutex_unlock(&init_lock);
683 }
684
685 static int context_init(struct drm_device *dev, struct drm_file *file)
686 {
687         static atomic_t ident = ATOMIC_INIT(0);
688         struct msm_drm_private *priv = dev->dev_private;
689         struct msm_file_private *ctx;
690
691         ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
692         if (!ctx)
693                 return -ENOMEM;
694
695         INIT_LIST_HEAD(&ctx->submitqueues);
696         rwlock_init(&ctx->queuelock);
697
698         kref_init(&ctx->ref);
699         msm_submitqueue_init(dev, ctx);
700
701         ctx->aspace = msm_gpu_create_private_address_space(priv->gpu, current);
702         file->driver_priv = ctx;
703
704         ctx->seqno = atomic_inc_return(&ident);
705
706         return 0;
707 }
708
709 static int msm_open(struct drm_device *dev, struct drm_file *file)
710 {
711         /* For now, load gpu on open.. to avoid the requirement of having
712          * firmware in the initrd.
713          */
714         load_gpu(dev);
715
716         return context_init(dev, file);
717 }
718
719 static void context_close(struct msm_file_private *ctx)
720 {
721         msm_submitqueue_close(ctx);
722         msm_file_private_put(ctx);
723 }
724
725 static void msm_postclose(struct drm_device *dev, struct drm_file *file)
726 {
727         struct msm_drm_private *priv = dev->dev_private;
728         struct msm_file_private *ctx = file->driver_priv;
729
730         mutex_lock(&dev->struct_mutex);
731         if (ctx == priv->lastctx)
732                 priv->lastctx = NULL;
733         mutex_unlock(&dev->struct_mutex);
734
735         context_close(ctx);
736 }
737
738 int msm_crtc_enable_vblank(struct drm_crtc *crtc)
739 {
740         struct drm_device *dev = crtc->dev;
741         unsigned int pipe = crtc->index;
742         struct msm_drm_private *priv = dev->dev_private;
743         struct msm_kms *kms = priv->kms;
744         if (!kms)
745                 return -ENXIO;
746         drm_dbg_vbl(dev, "crtc=%u", pipe);
747         return vblank_ctrl_queue_work(priv, pipe, true);
748 }
749
750 void msm_crtc_disable_vblank(struct drm_crtc *crtc)
751 {
752         struct drm_device *dev = crtc->dev;
753         unsigned int pipe = crtc->index;
754         struct msm_drm_private *priv = dev->dev_private;
755         struct msm_kms *kms = priv->kms;
756         if (!kms)
757                 return;
758         drm_dbg_vbl(dev, "crtc=%u", pipe);
759         vblank_ctrl_queue_work(priv, pipe, false);
760 }
761
762 /*
763  * DRM ioctls:
764  */
765
766 static int msm_ioctl_get_param(struct drm_device *dev, void *data,
767                 struct drm_file *file)
768 {
769         struct msm_drm_private *priv = dev->dev_private;
770         struct drm_msm_param *args = data;
771         struct msm_gpu *gpu;
772
773         /* for now, we just have 3d pipe.. eventually this would need to
774          * be more clever to dispatch to appropriate gpu module:
775          */
776         if (args->pipe != MSM_PIPE_3D0)
777                 return -EINVAL;
778
779         gpu = priv->gpu;
780
781         if (!gpu)
782                 return -ENXIO;
783
784         return gpu->funcs->get_param(gpu, args->param, &args->value);
785 }
786
787 static int msm_ioctl_gem_new(struct drm_device *dev, void *data,
788                 struct drm_file *file)
789 {
790         struct drm_msm_gem_new *args = data;
791
792         if (args->flags & ~MSM_BO_FLAGS) {
793                 DRM_ERROR("invalid flags: %08x\n", args->flags);
794                 return -EINVAL;
795         }
796
797         return msm_gem_new_handle(dev, file, args->size,
798                         args->flags, &args->handle, NULL);
799 }
800
801 static inline ktime_t to_ktime(struct drm_msm_timespec timeout)
802 {
803         return ktime_set(timeout.tv_sec, timeout.tv_nsec);
804 }
805
806 static int msm_ioctl_gem_cpu_prep(struct drm_device *dev, void *data,
807                 struct drm_file *file)
808 {
809         struct drm_msm_gem_cpu_prep *args = data;
810         struct drm_gem_object *obj;
811         ktime_t timeout = to_ktime(args->timeout);
812         int ret;
813
814         if (args->op & ~MSM_PREP_FLAGS) {
815                 DRM_ERROR("invalid op: %08x\n", args->op);
816                 return -EINVAL;
817         }
818
819         obj = drm_gem_object_lookup(file, args->handle);
820         if (!obj)
821                 return -ENOENT;
822
823         ret = msm_gem_cpu_prep(obj, args->op, &timeout);
824
825         drm_gem_object_put(obj);
826
827         return ret;
828 }
829
830 static int msm_ioctl_gem_cpu_fini(struct drm_device *dev, void *data,
831                 struct drm_file *file)
832 {
833         struct drm_msm_gem_cpu_fini *args = data;
834         struct drm_gem_object *obj;
835         int ret;
836
837         obj = drm_gem_object_lookup(file, args->handle);
838         if (!obj)
839                 return -ENOENT;
840
841         ret = msm_gem_cpu_fini(obj);
842
843         drm_gem_object_put(obj);
844
845         return ret;
846 }
847
848 static int msm_ioctl_gem_info_iova(struct drm_device *dev,
849                 struct drm_file *file, struct drm_gem_object *obj,
850                 uint64_t *iova)
851 {
852         struct msm_drm_private *priv = dev->dev_private;
853         struct msm_file_private *ctx = file->driver_priv;
854
855         if (!priv->gpu)
856                 return -EINVAL;
857
858         /*
859          * Don't pin the memory here - just get an address so that userspace can
860          * be productive
861          */
862         return msm_gem_get_iova(obj, ctx->aspace, iova);
863 }
864
865 static int msm_ioctl_gem_info(struct drm_device *dev, void *data,
866                 struct drm_file *file)
867 {
868         struct drm_msm_gem_info *args = data;
869         struct drm_gem_object *obj;
870         struct msm_gem_object *msm_obj;
871         int i, ret = 0;
872
873         if (args->pad)
874                 return -EINVAL;
875
876         switch (args->info) {
877         case MSM_INFO_GET_OFFSET:
878         case MSM_INFO_GET_IOVA:
879                 /* value returned as immediate, not pointer, so len==0: */
880                 if (args->len)
881                         return -EINVAL;
882                 break;
883         case MSM_INFO_SET_NAME:
884         case MSM_INFO_GET_NAME:
885                 break;
886         default:
887                 return -EINVAL;
888         }
889
890         obj = drm_gem_object_lookup(file, args->handle);
891         if (!obj)
892                 return -ENOENT;
893
894         msm_obj = to_msm_bo(obj);
895
896         switch (args->info) {
897         case MSM_INFO_GET_OFFSET:
898                 args->value = msm_gem_mmap_offset(obj);
899                 break;
900         case MSM_INFO_GET_IOVA:
901                 ret = msm_ioctl_gem_info_iova(dev, file, obj, &args->value);
902                 break;
903         case MSM_INFO_SET_NAME:
904                 /* length check should leave room for terminating null: */
905                 if (args->len >= sizeof(msm_obj->name)) {
906                         ret = -EINVAL;
907                         break;
908                 }
909                 if (copy_from_user(msm_obj->name, u64_to_user_ptr(args->value),
910                                    args->len)) {
911                         msm_obj->name[0] = '\0';
912                         ret = -EFAULT;
913                         break;
914                 }
915                 msm_obj->name[args->len] = '\0';
916                 for (i = 0; i < args->len; i++) {
917                         if (!isprint(msm_obj->name[i])) {
918                                 msm_obj->name[i] = '\0';
919                                 break;
920                         }
921                 }
922                 break;
923         case MSM_INFO_GET_NAME:
924                 if (args->value && (args->len < strlen(msm_obj->name))) {
925                         ret = -EINVAL;
926                         break;
927                 }
928                 args->len = strlen(msm_obj->name);
929                 if (args->value) {
930                         if (copy_to_user(u64_to_user_ptr(args->value),
931                                          msm_obj->name, args->len))
932                                 ret = -EFAULT;
933                 }
934                 break;
935         }
936
937         drm_gem_object_put(obj);
938
939         return ret;
940 }
941
942 static int wait_fence(struct msm_gpu_submitqueue *queue, uint32_t fence_id,
943                       ktime_t timeout)
944 {
945         struct dma_fence *fence;
946         int ret;
947
948         if (fence_id > queue->last_fence) {
949                 DRM_ERROR_RATELIMITED("waiting on invalid fence: %u (of %u)\n",
950                                       fence_id, queue->last_fence);
951                 return -EINVAL;
952         }
953
954         /*
955          * Map submitqueue scoped "seqno" (which is actually an idr key)
956          * back to underlying dma-fence
957          *
958          * The fence is removed from the fence_idr when the submit is
959          * retired, so if the fence is not found it means there is nothing
960          * to wait for
961          */
962         ret = mutex_lock_interruptible(&queue->lock);
963         if (ret)
964                 return ret;
965         fence = idr_find(&queue->fence_idr, fence_id);
966         if (fence)
967                 fence = dma_fence_get_rcu(fence);
968         mutex_unlock(&queue->lock);
969
970         if (!fence)
971                 return 0;
972
973         ret = dma_fence_wait_timeout(fence, true, timeout_to_jiffies(&timeout));
974         if (ret == 0) {
975                 ret = -ETIMEDOUT;
976         } else if (ret != -ERESTARTSYS) {
977                 ret = 0;
978         }
979
980         dma_fence_put(fence);
981
982         return ret;
983 }
984
985 static int msm_ioctl_wait_fence(struct drm_device *dev, void *data,
986                 struct drm_file *file)
987 {
988         struct msm_drm_private *priv = dev->dev_private;
989         struct drm_msm_wait_fence *args = data;
990         struct msm_gpu_submitqueue *queue;
991         int ret;
992
993         if (args->pad) {
994                 DRM_ERROR("invalid pad: %08x\n", args->pad);
995                 return -EINVAL;
996         }
997
998         if (!priv->gpu)
999                 return 0;
1000
1001         queue = msm_submitqueue_get(file->driver_priv, args->queueid);
1002         if (!queue)
1003                 return -ENOENT;
1004
1005         ret = wait_fence(queue, args->fence, to_ktime(args->timeout));
1006
1007         msm_submitqueue_put(queue);
1008
1009         return ret;
1010 }
1011
1012 static int msm_ioctl_gem_madvise(struct drm_device *dev, void *data,
1013                 struct drm_file *file)
1014 {
1015         struct drm_msm_gem_madvise *args = data;
1016         struct drm_gem_object *obj;
1017         int ret;
1018
1019         switch (args->madv) {
1020         case MSM_MADV_DONTNEED:
1021         case MSM_MADV_WILLNEED:
1022                 break;
1023         default:
1024                 return -EINVAL;
1025         }
1026
1027         obj = drm_gem_object_lookup(file, args->handle);
1028         if (!obj) {
1029                 return -ENOENT;
1030         }
1031
1032         ret = msm_gem_madvise(obj, args->madv);
1033         if (ret >= 0) {
1034                 args->retained = ret;
1035                 ret = 0;
1036         }
1037
1038         drm_gem_object_put(obj);
1039
1040         return ret;
1041 }
1042
1043
1044 static int msm_ioctl_submitqueue_new(struct drm_device *dev, void *data,
1045                 struct drm_file *file)
1046 {
1047         struct drm_msm_submitqueue *args = data;
1048
1049         if (args->flags & ~MSM_SUBMITQUEUE_FLAGS)
1050                 return -EINVAL;
1051
1052         return msm_submitqueue_create(dev, file->driver_priv, args->prio,
1053                 args->flags, &args->id);
1054 }
1055
1056 static int msm_ioctl_submitqueue_query(struct drm_device *dev, void *data,
1057                 struct drm_file *file)
1058 {
1059         return msm_submitqueue_query(dev, file->driver_priv, data);
1060 }
1061
1062 static int msm_ioctl_submitqueue_close(struct drm_device *dev, void *data,
1063                 struct drm_file *file)
1064 {
1065         u32 id = *(u32 *) data;
1066
1067         return msm_submitqueue_remove(file->driver_priv, id);
1068 }
1069
1070 static const struct drm_ioctl_desc msm_ioctls[] = {
1071         DRM_IOCTL_DEF_DRV(MSM_GET_PARAM,    msm_ioctl_get_param,    DRM_RENDER_ALLOW),
1072         DRM_IOCTL_DEF_DRV(MSM_GEM_NEW,      msm_ioctl_gem_new,      DRM_RENDER_ALLOW),
1073         DRM_IOCTL_DEF_DRV(MSM_GEM_INFO,     msm_ioctl_gem_info,     DRM_RENDER_ALLOW),
1074         DRM_IOCTL_DEF_DRV(MSM_GEM_CPU_PREP, msm_ioctl_gem_cpu_prep, DRM_RENDER_ALLOW),
1075         DRM_IOCTL_DEF_DRV(MSM_GEM_CPU_FINI, msm_ioctl_gem_cpu_fini, DRM_RENDER_ALLOW),
1076         DRM_IOCTL_DEF_DRV(MSM_GEM_SUBMIT,   msm_ioctl_gem_submit,   DRM_RENDER_ALLOW),
1077         DRM_IOCTL_DEF_DRV(MSM_WAIT_FENCE,   msm_ioctl_wait_fence,   DRM_RENDER_ALLOW),
1078         DRM_IOCTL_DEF_DRV(MSM_GEM_MADVISE,  msm_ioctl_gem_madvise,  DRM_RENDER_ALLOW),
1079         DRM_IOCTL_DEF_DRV(MSM_SUBMITQUEUE_NEW,   msm_ioctl_submitqueue_new,   DRM_RENDER_ALLOW),
1080         DRM_IOCTL_DEF_DRV(MSM_SUBMITQUEUE_CLOSE, msm_ioctl_submitqueue_close, DRM_RENDER_ALLOW),
1081         DRM_IOCTL_DEF_DRV(MSM_SUBMITQUEUE_QUERY, msm_ioctl_submitqueue_query, DRM_RENDER_ALLOW),
1082 };
1083
1084 DEFINE_DRM_GEM_FOPS(fops);
1085
1086 static const struct drm_driver msm_driver = {
1087         .driver_features    = DRIVER_GEM |
1088                                 DRIVER_RENDER |
1089                                 DRIVER_ATOMIC |
1090                                 DRIVER_MODESET |
1091                                 DRIVER_SYNCOBJ,
1092         .open               = msm_open,
1093         .postclose           = msm_postclose,
1094         .lastclose          = drm_fb_helper_lastclose,
1095         .dumb_create        = msm_gem_dumb_create,
1096         .dumb_map_offset    = msm_gem_dumb_map_offset,
1097         .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
1098         .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
1099         .gem_prime_import_sg_table = msm_gem_prime_import_sg_table,
1100         .gem_prime_mmap     = drm_gem_prime_mmap,
1101 #ifdef CONFIG_DEBUG_FS
1102         .debugfs_init       = msm_debugfs_init,
1103 #endif
1104         .ioctls             = msm_ioctls,
1105         .num_ioctls         = ARRAY_SIZE(msm_ioctls),
1106         .fops               = &fops,
1107         .name               = "msm",
1108         .desc               = "MSM Snapdragon DRM",
1109         .date               = "20130625",
1110         .major              = MSM_VERSION_MAJOR,
1111         .minor              = MSM_VERSION_MINOR,
1112         .patchlevel         = MSM_VERSION_PATCHLEVEL,
1113 };
1114
1115 static int __maybe_unused msm_runtime_suspend(struct device *dev)
1116 {
1117         struct drm_device *ddev = dev_get_drvdata(dev);
1118         struct msm_drm_private *priv = ddev->dev_private;
1119         struct msm_mdss *mdss = priv->mdss;
1120
1121         DBG("");
1122
1123         if (mdss && mdss->funcs)
1124                 return mdss->funcs->disable(mdss);
1125
1126         return 0;
1127 }
1128
1129 static int __maybe_unused msm_runtime_resume(struct device *dev)
1130 {
1131         struct drm_device *ddev = dev_get_drvdata(dev);
1132         struct msm_drm_private *priv = ddev->dev_private;
1133         struct msm_mdss *mdss = priv->mdss;
1134
1135         DBG("");
1136
1137         if (mdss && mdss->funcs)
1138                 return mdss->funcs->enable(mdss);
1139
1140         return 0;
1141 }
1142
1143 static int __maybe_unused msm_pm_suspend(struct device *dev)
1144 {
1145
1146         if (pm_runtime_suspended(dev))
1147                 return 0;
1148
1149         return msm_runtime_suspend(dev);
1150 }
1151
1152 static int __maybe_unused msm_pm_resume(struct device *dev)
1153 {
1154         if (pm_runtime_suspended(dev))
1155                 return 0;
1156
1157         return msm_runtime_resume(dev);
1158 }
1159
1160 static int __maybe_unused msm_pm_prepare(struct device *dev)
1161 {
1162         struct drm_device *ddev = dev_get_drvdata(dev);
1163         struct msm_drm_private *priv = ddev ? ddev->dev_private : NULL;
1164
1165         if (!priv || !priv->kms)
1166                 return 0;
1167
1168         return drm_mode_config_helper_suspend(ddev);
1169 }
1170
1171 static void __maybe_unused msm_pm_complete(struct device *dev)
1172 {
1173         struct drm_device *ddev = dev_get_drvdata(dev);
1174         struct msm_drm_private *priv = ddev ? ddev->dev_private : NULL;
1175
1176         if (!priv || !priv->kms)
1177                 return;
1178
1179         drm_mode_config_helper_resume(ddev);
1180 }
1181
1182 static const struct dev_pm_ops msm_pm_ops = {
1183         SET_SYSTEM_SLEEP_PM_OPS(msm_pm_suspend, msm_pm_resume)
1184         SET_RUNTIME_PM_OPS(msm_runtime_suspend, msm_runtime_resume, NULL)
1185         .prepare = msm_pm_prepare,
1186         .complete = msm_pm_complete,
1187 };
1188
1189 /*
1190  * Componentized driver support:
1191  */
1192
1193 /*
1194  * NOTE: duplication of the same code as exynos or imx (or probably any other).
1195  * so probably some room for some helpers
1196  */
1197 static int compare_of(struct device *dev, void *data)
1198 {
1199         return dev->of_node == data;
1200 }
1201
1202 /*
1203  * Identify what components need to be added by parsing what remote-endpoints
1204  * our MDP output ports are connected to. In the case of LVDS on MDP4, there
1205  * is no external component that we need to add since LVDS is within MDP4
1206  * itself.
1207  */
1208 static int add_components_mdp(struct device *mdp_dev,
1209                               struct component_match **matchptr)
1210 {
1211         struct device_node *np = mdp_dev->of_node;
1212         struct device_node *ep_node;
1213         struct device *master_dev;
1214
1215         /*
1216          * on MDP4 based platforms, the MDP platform device is the component
1217          * master that adds other display interface components to itself.
1218          *
1219          * on MDP5 based platforms, the MDSS platform device is the component
1220          * master that adds MDP5 and other display interface components to
1221          * itself.
1222          */
1223         if (of_device_is_compatible(np, "qcom,mdp4"))
1224                 master_dev = mdp_dev;
1225         else
1226                 master_dev = mdp_dev->parent;
1227
1228         for_each_endpoint_of_node(np, ep_node) {
1229                 struct device_node *intf;
1230                 struct of_endpoint ep;
1231                 int ret;
1232
1233                 ret = of_graph_parse_endpoint(ep_node, &ep);
1234                 if (ret) {
1235                         DRM_DEV_ERROR(mdp_dev, "unable to parse port endpoint\n");
1236                         of_node_put(ep_node);
1237                         return ret;
1238                 }
1239
1240                 /*
1241                  * The LCDC/LVDS port on MDP4 is a speacial case where the
1242                  * remote-endpoint isn't a component that we need to add
1243                  */
1244                 if (of_device_is_compatible(np, "qcom,mdp4") &&
1245                     ep.port == 0)
1246                         continue;
1247
1248                 /*
1249                  * It's okay if some of the ports don't have a remote endpoint
1250                  * specified. It just means that the port isn't connected to
1251                  * any external interface.
1252                  */
1253                 intf = of_graph_get_remote_port_parent(ep_node);
1254                 if (!intf)
1255                         continue;
1256
1257                 if (of_device_is_available(intf))
1258                         drm_of_component_match_add(master_dev, matchptr,
1259                                                    compare_of, intf);
1260
1261                 of_node_put(intf);
1262         }
1263
1264         return 0;
1265 }
1266
1267 static int compare_name_mdp(struct device *dev, void *data)
1268 {
1269         return (strstr(dev_name(dev), "mdp") != NULL);
1270 }
1271
1272 static int add_display_components(struct platform_device *pdev,
1273                                   struct component_match **matchptr)
1274 {
1275         struct device *mdp_dev;
1276         struct device *dev = &pdev->dev;
1277         int ret;
1278
1279         /*
1280          * MDP5/DPU based devices don't have a flat hierarchy. There is a top
1281          * level parent: MDSS, and children: MDP5/DPU, DSI, HDMI, eDP etc.
1282          * Populate the children devices, find the MDP5/DPU node, and then add
1283          * the interfaces to our components list.
1284          */
1285         switch (get_mdp_ver(pdev)) {
1286         case KMS_MDP5:
1287         case KMS_DPU:
1288                 ret = of_platform_populate(dev->of_node, NULL, NULL, dev);
1289                 if (ret) {
1290                         DRM_DEV_ERROR(dev, "failed to populate children devices\n");
1291                         return ret;
1292                 }
1293
1294                 mdp_dev = device_find_child(dev, NULL, compare_name_mdp);
1295                 if (!mdp_dev) {
1296                         DRM_DEV_ERROR(dev, "failed to find MDSS MDP node\n");
1297                         of_platform_depopulate(dev);
1298                         return -ENODEV;
1299                 }
1300
1301                 put_device(mdp_dev);
1302
1303                 /* add the MDP component itself */
1304                 drm_of_component_match_add(dev, matchptr, compare_of,
1305                                            mdp_dev->of_node);
1306                 break;
1307         case KMS_MDP4:
1308                 /* MDP4 */
1309                 mdp_dev = dev;
1310                 break;
1311         }
1312
1313         ret = add_components_mdp(mdp_dev, matchptr);
1314         if (ret)
1315                 of_platform_depopulate(dev);
1316
1317         return ret;
1318 }
1319
1320 /*
1321  * We don't know what's the best binding to link the gpu with the drm device.
1322  * Fow now, we just hunt for all the possible gpus that we support, and add them
1323  * as components.
1324  */
1325 static const struct of_device_id msm_gpu_match[] = {
1326         { .compatible = "qcom,adreno" },
1327         { .compatible = "qcom,adreno-3xx" },
1328         { .compatible = "amd,imageon" },
1329         { .compatible = "qcom,kgsl-3d0" },
1330         { },
1331 };
1332
1333 static int add_gpu_components(struct device *dev,
1334                               struct component_match **matchptr)
1335 {
1336         struct device_node *np;
1337
1338         np = of_find_matching_node(NULL, msm_gpu_match);
1339         if (!np)
1340                 return 0;
1341
1342         if (of_device_is_available(np))
1343                 drm_of_component_match_add(dev, matchptr, compare_of, np);
1344
1345         of_node_put(np);
1346
1347         return 0;
1348 }
1349
1350 static int msm_drm_bind(struct device *dev)
1351 {
1352         return msm_drm_init(dev, &msm_driver);
1353 }
1354
1355 static void msm_drm_unbind(struct device *dev)
1356 {
1357         msm_drm_uninit(dev);
1358 }
1359
1360 static const struct component_master_ops msm_drm_ops = {
1361         .bind = msm_drm_bind,
1362         .unbind = msm_drm_unbind,
1363 };
1364
1365 /*
1366  * Platform driver:
1367  */
1368
1369 static int msm_pdev_probe(struct platform_device *pdev)
1370 {
1371         struct component_match *match = NULL;
1372         int ret;
1373
1374         if (get_mdp_ver(pdev)) {
1375                 ret = add_display_components(pdev, &match);
1376                 if (ret)
1377                         return ret;
1378         }
1379
1380         ret = add_gpu_components(&pdev->dev, &match);
1381         if (ret)
1382                 goto fail;
1383
1384         /* on all devices that I am aware of, iommu's which can map
1385          * any address the cpu can see are used:
1386          */
1387         ret = dma_set_mask_and_coherent(&pdev->dev, ~0);
1388         if (ret)
1389                 goto fail;
1390
1391         ret = component_master_add_with_match(&pdev->dev, &msm_drm_ops, match);
1392         if (ret)
1393                 goto fail;
1394
1395         return 0;
1396
1397 fail:
1398         of_platform_depopulate(&pdev->dev);
1399         return ret;
1400 }
1401
1402 static int msm_pdev_remove(struct platform_device *pdev)
1403 {
1404         component_master_del(&pdev->dev, &msm_drm_ops);
1405         of_platform_depopulate(&pdev->dev);
1406
1407         return 0;
1408 }
1409
1410 static void msm_pdev_shutdown(struct platform_device *pdev)
1411 {
1412         struct drm_device *drm = platform_get_drvdata(pdev);
1413         struct msm_drm_private *priv = drm ? drm->dev_private : NULL;
1414
1415         if (!priv || !priv->kms)
1416                 return;
1417
1418         drm_atomic_helper_shutdown(drm);
1419 }
1420
1421 static const struct of_device_id dt_match[] = {
1422         { .compatible = "qcom,mdp4", .data = (void *)KMS_MDP4 },
1423         { .compatible = "qcom,mdss", .data = (void *)KMS_MDP5 },
1424         { .compatible = "qcom,sdm845-mdss", .data = (void *)KMS_DPU },
1425         { .compatible = "qcom,sc7180-mdss", .data = (void *)KMS_DPU },
1426         { .compatible = "qcom,sc7280-mdss", .data = (void *)KMS_DPU },
1427         { .compatible = "qcom,sm8150-mdss", .data = (void *)KMS_DPU },
1428         { .compatible = "qcom,sm8250-mdss", .data = (void *)KMS_DPU },
1429         {}
1430 };
1431 MODULE_DEVICE_TABLE(of, dt_match);
1432
1433 static struct platform_driver msm_platform_driver = {
1434         .probe      = msm_pdev_probe,
1435         .remove     = msm_pdev_remove,
1436         .shutdown   = msm_pdev_shutdown,
1437         .driver     = {
1438                 .name   = "msm",
1439                 .of_match_table = dt_match,
1440                 .pm     = &msm_pm_ops,
1441         },
1442 };
1443
1444 static int __init msm_drm_register(void)
1445 {
1446         if (!modeset)
1447                 return -EINVAL;
1448
1449         DBG("init");
1450         msm_mdp_register();
1451         msm_dpu_register();
1452         msm_dsi_register();
1453         msm_edp_register();
1454         msm_hdmi_register();
1455         msm_dp_register();
1456         adreno_register();
1457         return platform_driver_register(&msm_platform_driver);
1458 }
1459
1460 static void __exit msm_drm_unregister(void)
1461 {
1462         DBG("fini");
1463         platform_driver_unregister(&msm_platform_driver);
1464         msm_dp_unregister();
1465         msm_hdmi_unregister();
1466         adreno_unregister();
1467         msm_edp_unregister();
1468         msm_dsi_unregister();
1469         msm_mdp_unregister();
1470         msm_dpu_unregister();
1471 }
1472
1473 module_init(msm_drm_register);
1474 module_exit(msm_drm_unregister);
1475
1476 MODULE_AUTHOR("Rob Clark <robdclark@gmail.com");
1477 MODULE_DESCRIPTION("MSM DRM Driver");
1478 MODULE_LICENSE("GPL");