History

Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux

Pull drm update from Dave Airlie: "Exynos and Radeon mostly, with a dma-buf and ttm fix thrown in. It's a bit big but its mostly exynos license fix ups and I'd rather not hold those up since its legally stuff. Radeon has a couple of fixes from dma engine work, TTM is just a locking fix, and dma-buf fix has been hanging around and I finally got a chance to review it." * 'drm-fixes' of git://people.freedesktop.org/~airlied/linux: (30 commits) drm/ttm: fix fence locking in ttm_buffer_object_transfer drm/prime: drop reference on imported dma-buf come from gem drm/radeon: add quirk for d3 delay during switcheroo poweron for apple macbooks drm/exynos: move finish page flip to a common place drm/exynos: fimd: modify condition in fimd resume drm/radeon: fix DMA CS parser for r6xx linear copy packet drm/radeon: split r6xx and r7xx copy_dma functions drm/exynos: Use devm_clk_get in exynos_drm_gsc.c drm/exynos: Remove redundant NULL check in exynos_drm_gsc.c drm/exynos: Remove explicit freeing using devm_* APIs in exynos_drm_gsc.c drm/exynos: Use devm_clk_get in exynos_drm_rotator.c drm/exynos: Remove redundant NULL check in exynos_drm_rotator.c drm/exynos: Remove unnecessary devm_* freeing APIs in exynos_drm_rotator.c drm/exynos: Use devm_clk_get in exynos_drm_fimc.c drm/exynos: Remove redundant NULL check drm/exynos: Remove explicit freeing using devm_* APIs in exynos_drm_fimc.c drm/exynos: Use devm_kzalloc in exynos_drm_ipp.c drm/exynos: fix gem buffer allocation type checking drm/exynos: remove needless parenthesis. drm/exynos: fix incorrect interrupt induced by m2m operation. ...

Linus Torvalds committed 13 years ago

Commit ca5c8a42 parents ed2c891 e8e896248 files · +447 −828Browse files

Unified · Split

48 files
  1. drivers/gpu/drm/exynos/exynos_drm_buf.c +53 −26
  2. drivers/gpu/drm/exynos/exynos_drm_buf.h +4 −18
  3. drivers/gpu/drm/exynos/exynos_drm_connector.c +4 −18
  4. drivers/gpu/drm/exynos/exynos_drm_connector.h +4 −18
  5. drivers/gpu/drm/exynos/exynos_drm_core.c +4 −18
  6. drivers/gpu/drm/exynos/exynos_drm_crtc.c +34 −18
  7. drivers/gpu/drm/exynos/exynos_drm_crtc.h +5 −18
  8. drivers/gpu/drm/exynos/exynos_drm_dmabuf.c +10 −19
  9. drivers/gpu/drm/exynos/exynos_drm_dmabuf.h +4 −18
  10. drivers/gpu/drm/exynos/exynos_drm_drv.c +4 −18
  11. drivers/gpu/drm/exynos/exynos_drm_drv.h +4 −18
  12. drivers/gpu/drm/exynos/exynos_drm_encoder.c +4 −18
  13. drivers/gpu/drm/exynos/exynos_drm_encoder.h +4 −18
  14. drivers/gpu/drm/exynos/exynos_drm_fb.c +4 −18
  15. drivers/gpu/drm/exynos/exynos_drm_fb.h +4 −18
  16. drivers/gpu/drm/exynos/exynos_drm_fbdev.c +22 −22
  17. drivers/gpu/drm/exynos/exynos_drm_fbdev.h +4 −18
  18. drivers/gpu/drm/exynos/exynos_drm_fimc.c +39 −85
  19. drivers/gpu/drm/exynos/exynos_drm_fimc.h +4 −18
  20. drivers/gpu/drm/exynos/exynos_drm_fimd.c +2 −30
  21. drivers/gpu/drm/exynos/exynos_drm_gem.c +4 −18
  22. drivers/gpu/drm/exynos/exynos_drm_gem.h +4 −18
  23. drivers/gpu/drm/exynos/exynos_drm_gsc.c +12 −44
  24. drivers/gpu/drm/exynos/exynos_drm_gsc.h +4 −18
  25. drivers/gpu/drm/exynos/exynos_drm_hdmi.h +4 −18
  26. drivers/gpu/drm/exynos/exynos_drm_iommu.c +4 −18
  27. drivers/gpu/drm/exynos/exynos_drm_iommu.h +4 −18
  28. drivers/gpu/drm/exynos/exynos_drm_ipp.c +6 −16
  29. drivers/gpu/drm/exynos/exynos_drm_ipp.h +6 −20
  30. drivers/gpu/drm/exynos/exynos_drm_rotator.c +6 −22
  31. drivers/gpu/drm/exynos/exynos_drm_rotator.h +4 −18
  32. drivers/gpu/drm/exynos/exynos_drm_vidi.c +1 −29
  33. drivers/gpu/drm/exynos/exynos_drm_vidi.h +4 −18
  34. drivers/gpu/drm/exynos/exynos_hdmi.h +4 −18
  35. drivers/gpu/drm/exynos/exynos_mixer.c +3 −30
  36. drivers/gpu/drm/i915/i915_gem_dmabuf.c +5 −0
  37. drivers/gpu/drm/nouveau/nouveau_prime.c +1 −0
  38. drivers/gpu/drm/radeon/r600.c +5 −5
  39. drivers/gpu/drm/radeon/r600_cs.c +22 −9
  40. drivers/gpu/drm/radeon/radeon_asic.c +2 −2
  41. drivers/gpu/drm/radeon/radeon_asic.h +4 −0
  42. drivers/gpu/drm/radeon/radeon_device.c +28 −0
  43. drivers/gpu/drm/radeon/radeon_prime.c +1 −0
  44. drivers/gpu/drm/radeon/rv770.c +74 −0
  45. drivers/gpu/drm/ttm/ttm_bo_util.c +3 −1
  46. drivers/staging/omapdrm/omap_gem_dmabuf.c +5 −0
  47. include/drm/exynos_drm.h +4 −18
  48. include/uapi/drm/exynos_drm.h +6 −18
drivers/gpu/drm/exynos/exynos_drm_buf.c+53−26
@@ -3,24 +3,10 @@ · 2 unmodified lines
3 * Copyright (c) 2011 Samsung Electronics Co., Ltd.3 * Copyright (c) 2011 Samsung Electronics Co., Ltd.
4 * Author: Inki Dae <inki.dae@samsung.com>4 * Author: Inki Dae <inki.dae@samsung.com>
5 *5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a6 * This program is free software; you can redistribute it and/or modify it
7 * copy of this software and associated documentation files (the "Software"),7 * under the terms of the GNU General Public License as published by the
8 * to deal in the Software without restriction, including without limitation8 * Free Software Foundation; either version 2 of the License, or (at your
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,9 * option) any later version.
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice (including the next
14 * paragraph) shall be included in all copies or substantial portions of the
15 * Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23 * OTHER DEALINGS IN THE SOFTWARE.
24 */10 */
25 11
26#include <drm/drmP.h>12#include <drm/drmP.h>
@@ -29,6 +15,7 @@ · 2 unmodified lines
29#include "exynos_drm_drv.h"15#include "exynos_drm_drv.h"
30#include "exynos_drm_gem.h"16#include "exynos_drm_gem.h"
31#include "exynos_drm_buf.h"17#include "exynos_drm_buf.h"
18#include "exynos_drm_iommu.h"
32 19
33static int lowlevel_buffer_allocate(struct drm_device *dev,20static int lowlevel_buffer_allocate(struct drm_device *dev,
34 unsigned int flags, struct exynos_drm_gem_buf *buf)21 unsigned int flags, struct exynos_drm_gem_buf *buf)
@@ -51,7 +38,7 @@ static int lowlevel_buffer_allocate(struct drm_device *dev, · 16 unmodified lines
51 * region will be allocated else physically contiguous38 * region will be allocated else physically contiguous
52 * as possible.39 * as possible.
53 */40 */
54 if (flags & EXYNOS_BO_CONTIG)41 if (!(flags & EXYNOS_BO_NONCONTIG))
55 dma_set_attr(DMA_ATTR_FORCE_CONTIGUOUS, &buf->dma_attrs);42 dma_set_attr(DMA_ATTR_FORCE_CONTIGUOUS, &buf->dma_attrs);
56 43
57 /*44 /*
@@ -66,14 +53,45 @@ static int lowlevel_buffer_allocate(struct drm_device *dev, · 8 unmodified lines
66 dma_set_attr(attr, &buf->dma_attrs);53 dma_set_attr(attr, &buf->dma_attrs);
67 dma_set_attr(DMA_ATTR_NO_KERNEL_MAPPING, &buf->dma_attrs);54 dma_set_attr(DMA_ATTR_NO_KERNEL_MAPPING, &buf->dma_attrs);
68 55
69 buf->pages = dma_alloc_attrs(dev->dev, buf->size,56 nr_pages = buf->size >> PAGE_SHIFT;
70 &buf->dma_addr, GFP_KERNEL, &buf->dma_attrs);57
71 if (!buf->pages) {58 if (!is_drm_iommu_supported(dev)) {
72 DRM_ERROR("failed to allocate buffer.\n");59 dma_addr_t start_addr;
73 return -ENOMEM;60 unsigned int i = 0;
61
62 buf->pages = kzalloc(sizeof(struct page) * nr_pages,
63 GFP_KERNEL);
64 if (!buf->pages) {
65 DRM_ERROR("failed to allocate pages.\n");
66 return -ENOMEM;
67 }
68
69 buf->kvaddr = dma_alloc_attrs(dev->dev, buf->size,
70 &buf->dma_addr, GFP_KERNEL,
71 &buf->dma_attrs);
72 if (!buf->kvaddr) {
73 DRM_ERROR("failed to allocate buffer.\n");
74 kfree(buf->pages);
75 return -ENOMEM;
76 }
77
78 start_addr = buf->dma_addr;
79 while (i < nr_pages) {
80 buf->pages[i] = phys_to_page(start_addr);
81 start_addr += PAGE_SIZE;
82 i++;
83 }
84 } else {
85
86 buf->pages = dma_alloc_attrs(dev->dev, buf->size,
87 &buf->dma_addr, GFP_KERNEL,
88 &buf->dma_attrs);
89 if (!buf->pages) {
90 DRM_ERROR("failed to allocate buffer.\n");
91 return -ENOMEM;
92 }
74 }93 }
75 94
76 nr_pages = buf->size >> PAGE_SHIFT;
77 buf->sgt = drm_prime_pages_to_sg(buf->pages, nr_pages);95 buf->sgt = drm_prime_pages_to_sg(buf->pages, nr_pages);
78 if (!buf->sgt) {96 if (!buf->sgt) {
79 DRM_ERROR("failed to get sg table.\n");97 DRM_ERROR("failed to get sg table.\n");
@@ -92,6 +110,9 @@ err_free_attrs: · 12 unmodified lines
92 (dma_addr_t)buf->dma_addr, &buf->dma_attrs);110 (dma_addr_t)buf->dma_addr, &buf->dma_attrs);
93 buf->dma_addr = (dma_addr_t)NULL;111 buf->dma_addr = (dma_addr_t)NULL;
94 112
113 if (!is_drm_iommu_supported(dev))
114 kfree(buf->pages);
115
95 return ret;116 return ret;
96}117}
97 118
@@ -114,8 +135,14 @@ static void lowlevel_buffer_deallocate(struct drm_device *dev, · 16 unmodified lines
114 kfree(buf->sgt);135 kfree(buf->sgt);
115 buf->sgt = NULL;136 buf->sgt = NULL;
116 137
117 dma_free_attrs(dev->dev, buf->size, buf->pages,138 if (!is_drm_iommu_supported(dev)) {
139 dma_free_attrs(dev->dev, buf->size, buf->kvaddr,
118 (dma_addr_t)buf->dma_addr, &buf->dma_attrs);140 (dma_addr_t)buf->dma_addr, &buf->dma_attrs);
141 kfree(buf->pages);
142 } else
143 dma_free_attrs(dev->dev, buf->size, buf->pages,
144 (dma_addr_t)buf->dma_addr, &buf->dma_attrs);
145
119 buf->dma_addr = (dma_addr_t)NULL;146 buf->dma_addr = (dma_addr_t)NULL;
120}147}
121 148
drivers/gpu/drm/exynos/exynos_drm_buf.h+4−18
@@ -3,24 +3,10 @@ · 2 unmodified lines
3 * Copyright (c) 2011 Samsung Electronics Co., Ltd.3 * Copyright (c) 2011 Samsung Electronics Co., Ltd.
4 * Author: Inki Dae <inki.dae@samsung.com>4 * Author: Inki Dae <inki.dae@samsung.com>
5 *5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a6 * This program is free software; you can redistribute it and/or modify it
7 * copy of this software and associated documentation files (the "Software"),7 * under the terms of the GNU General Public License as published by the
8 * to deal in the Software without restriction, including without limitation8 * Free Software Foundation; either version 2 of the License, or (at your
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,9 * option) any later version.
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice (including the next
14 * paragraph) shall be included in all copies or substantial portions of the
15 * Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23 * OTHER DEALINGS IN THE SOFTWARE.
24 */10 */
25 11
26#ifndef _EXYNOS_DRM_BUF_H_12#ifndef _EXYNOS_DRM_BUF_H_
drivers/gpu/drm/exynos/exynos_drm_connector.c+4−18
@@ -5,24 +5,10 @@ · 4 unmodified lines
5 * Joonyoung Shim <jy0922.shim@samsung.com>5 * Joonyoung Shim <jy0922.shim@samsung.com>
6 * Seung-Woo Kim <sw0312.kim@samsung.com>6 * Seung-Woo Kim <sw0312.kim@samsung.com>
7 *7 *
8 * Permission is hereby granted, free of charge, to any person obtaining a8 * This program is free software; you can redistribute it and/or modify it
9 * copy of this software and associated documentation files (the "Software"),9 * under the terms of the GNU General Public License as published by the
10 * to deal in the Software without restriction, including without limitation10 * Free Software Foundation; either version 2 of the License, or (at your
11 * the rights to use, copy, modify, merge, publish, distribute, sublicense,11 * option) any later version.
12 * and/or sell copies of the Software, and to permit persons to whom the
13 * Software is furnished to do so, subject to the following conditions:
14 *
15 * The above copyright notice and this permission notice (including the next
16 * paragraph) shall be included in all copies or substantial portions of the
17 * Software.
18 *
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
22 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
23 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
24 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
25 * OTHER DEALINGS IN THE SOFTWARE.
26 */12 */
27 13
28#include <drm/drmP.h>14#include <drm/drmP.h>
drivers/gpu/drm/exynos/exynos_drm_connector.h+4−18
@@ -5,24 +5,10 @@ · 4 unmodified lines
5 * Joonyoung Shim <jy0922.shim@samsung.com>5 * Joonyoung Shim <jy0922.shim@samsung.com>
6 * Seung-Woo Kim <sw0312.kim@samsung.com>6 * Seung-Woo Kim <sw0312.kim@samsung.com>
7 *7 *
8 * Permission is hereby granted, free of charge, to any person obtaining a8 * This program is free software; you can redistribute it and/or modify it
9 * copy of this software and associated documentation files (the "Software"),9 * under the terms of the GNU General Public License as published by the
10 * to deal in the Software without restriction, including without limitation10 * Free Software Foundation; either version 2 of the License, or (at your
11 * the rights to use, copy, modify, merge, publish, distribute, sublicense,11 * option) any later version.
12 * and/or sell copies of the Software, and to permit persons to whom the
13 * Software is furnished to do so, subject to the following conditions:
14 *
15 * The above copyright notice and this permission notice (including the next
16 * paragraph) shall be included in all copies or substantial portions of the
17 * Software.
18 *
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
22 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
23 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
24 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
25 * OTHER DEALINGS IN THE SOFTWARE.
26 */12 */
27 13
28#ifndef _EXYNOS_DRM_CONNECTOR_H_14#ifndef _EXYNOS_DRM_CONNECTOR_H_
drivers/gpu/drm/exynos/exynos_drm_core.c+4−18
@@ -6,24 +6,10 @@ · 5 unmodified lines
6 * Joonyoung Shim <jy0922.shim@samsung.com>6 * Joonyoung Shim <jy0922.shim@samsung.com>
7 * Seung-Woo Kim <sw0312.kim@samsung.com>7 * Seung-Woo Kim <sw0312.kim@samsung.com>
8 *8 *
9 * Permission is hereby granted, free of charge, to any person obtaining a9 * This program is free software; you can redistribute it and/or modify it
10 * copy of this software and associated documentation files (the "Software"),10 * under the terms of the GNU General Public License as published by the
11 * to deal in the Software without restriction, including without limitation11 * Free Software Foundation; either version 2 of the License, or (at your
12 * the rights to use, copy, modify, merge, publish, distribute, sublicense,12 * option) any later version.
13 * and/or sell copies of the Software, and to permit persons to whom the
14 * Software is furnished to do so, subject to the following conditions:
15 *
16 * The above copyright notice and this permission notice (including the next
17 * paragraph) shall be included in all copies or substantial portions of the
18 * Software.
19 *
20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
23 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
24 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
25 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
26 * OTHER DEALINGS IN THE SOFTWARE.
27 */13 */
28 14
29#include <drm/drmP.h>15#include <drm/drmP.h>
drivers/gpu/drm/exynos/exynos_drm_crtc.c+34−18
@@ -6,24 +6,10 @@ · 5 unmodified lines
6 * Joonyoung Shim <jy0922.shim@samsung.com>6 * Joonyoung Shim <jy0922.shim@samsung.com>
7 * Seung-Woo Kim <sw0312.kim@samsung.com>7 * Seung-Woo Kim <sw0312.kim@samsung.com>
8 *8 *
9 * Permission is hereby granted, free of charge, to any person obtaining a9 * This program is free software; you can redistribute it and/or modify it
10 * copy of this software and associated documentation files (the "Software"),10 * under the terms of the GNU General Public License as published by the
11 * to deal in the Software without restriction, including without limitation11 * Free Software Foundation; either version 2 of the License, or (at your
12 * the rights to use, copy, modify, merge, publish, distribute, sublicense,12 * option) any later version.
13 * and/or sell copies of the Software, and to permit persons to whom the
14 * Software is furnished to do so, subject to the following conditions:
15 *
16 * The above copyright notice and this permission notice (including the next
17 * paragraph) shall be included in all copies or substantial portions of the
18 * Software.
19 *
20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
23 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
24 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
25 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
26 * OTHER DEALINGS IN THE SOFTWARE.
27 */13 */
28 14
29#include <drm/drmP.h>15#include <drm/drmP.h>
@@ -407,3 +393,33 @@ void exynos_drm_crtc_disable_vblank(struct drm_device *dev, int crtc) · 377 unmodified lines
407 exynos_drm_fn_encoder(private->crtc[crtc], &crtc,393 exynos_drm_fn_encoder(private->crtc[crtc], &crtc,
408 exynos_drm_disable_vblank);394 exynos_drm_disable_vblank);
409}395}
396
397void exynos_drm_crtc_finish_pageflip(struct drm_device *dev, int crtc)
398{
399 struct exynos_drm_private *dev_priv = dev->dev_private;
400 struct drm_pending_vblank_event *e, *t;
401 struct timeval now;
402 unsigned long flags;
403
404 DRM_DEBUG_KMS("%s\n", __FILE__);
405
406 spin_lock_irqsave(&dev->event_lock, flags);
407
408 list_for_each_entry_safe(e, t, &dev_priv->pageflip_event_list,
409 base.link) {
410 /* if event's pipe isn't same as crtc then ignore it. */
411 if (crtc != e->pipe)
412 continue;
413
414 do_gettimeofday(&now);
415 e->event.sequence = 0;
416 e->event.tv_sec = now.tv_sec;
417 e->event.tv_usec = now.tv_usec;
418
419 list_move_tail(&e->base.link, &e->base.file_priv->event_list);
420 wake_up_interruptible(&e->base.file_priv->event_wait);
421 drm_vblank_put(dev, crtc);
422 }
423
424 spin_unlock_irqrestore(&dev->event_lock, flags);
425}
drivers/gpu/drm/exynos/exynos_drm_crtc.h+5−18
@@ -6,24 +6,10 @@ · 5 unmodified lines
6 * Joonyoung Shim <jy0922.shim@samsung.com>6 * Joonyoung Shim <jy0922.shim@samsung.com>
7 * Seung-Woo Kim <sw0312.kim@samsung.com>7 * Seung-Woo Kim <sw0312.kim@samsung.com>
8 *8 *
9 * Permission is hereby granted, free of charge, to any person obtaining a9 * This program is free software; you can redistribute it and/or modify it
10 * copy of this software and associated documentation files (the "Software"),10 * under the terms of the GNU General Public License as published by the
11 * to deal in the Software without restriction, including without limitation11 * Free Software Foundation; either version 2 of the License, or (at your
12 * the rights to use, copy, modify, merge, publish, distribute, sublicense,12 * option) any later version.
13 * and/or sell copies of the Software, and to permit persons to whom the
14 * Software is furnished to do so, subject to the following conditions:
15 *
16 * The above copyright notice and this permission notice (including the next
17 * paragraph) shall be included in all copies or substantial portions of the
18 * Software.
19 *
20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
23 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
24 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
25 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
26 * OTHER DEALINGS IN THE SOFTWARE.
27 */13 */
28 14
29#ifndef _EXYNOS_DRM_CRTC_H_15#ifndef _EXYNOS_DRM_CRTC_H_
@@ -32,5 +18,6 @@ · 2 unmodified lines
32int exynos_drm_crtc_create(struct drm_device *dev, unsigned int nr);18int exynos_drm_crtc_create(struct drm_device *dev, unsigned int nr);
33int exynos_drm_crtc_enable_vblank(struct drm_device *dev, int crtc);19int exynos_drm_crtc_enable_vblank(struct drm_device *dev, int crtc);
34void exynos_drm_crtc_disable_vblank(struct drm_device *dev, int crtc);20void exynos_drm_crtc_disable_vblank(struct drm_device *dev, int crtc);
21void exynos_drm_crtc_finish_pageflip(struct drm_device *dev, int crtc);
35 22
36#endif23#endif
drivers/gpu/drm/exynos/exynos_drm_dmabuf.c+10−19
@@ -3,24 +3,10 @@ · 2 unmodified lines
3 * Copyright (c) 2012 Samsung Electronics Co., Ltd.3 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 * Author: Inki Dae <inki.dae@samsung.com>4 * Author: Inki Dae <inki.dae@samsung.com>
5 *5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a6 * This program is free software; you can redistribute it and/or modify it
7 * copy of this software and associated documentation files (the "Software"),7 * under the terms of the GNU General Public License as published by the
8 * to deal in the Software without restriction, including without limitation8 * Free Software Foundation; either version 2 of the License, or (at your
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,9 * option) any later version.
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice (including the next
14 * paragraph) shall be included in all copies or substantial portions of the
15 * Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23 * OTHER DEALINGS IN THE SOFTWARE.
24 */10 */
25 11
26#include <drm/drmP.h>12#include <drm/drmP.h>
@@ -222,7 +208,7 @@ struct dma_buf *exynos_dmabuf_prime_export(struct drm_device *drm_dev, · 195 unmodified lines
222 struct exynos_drm_gem_obj *exynos_gem_obj = to_exynos_gem_obj(obj);208 struct exynos_drm_gem_obj *exynos_gem_obj = to_exynos_gem_obj(obj);
223 209
224 return dma_buf_export(exynos_gem_obj, &exynos_dmabuf_ops,210 return dma_buf_export(exynos_gem_obj, &exynos_dmabuf_ops,
225 exynos_gem_obj->base.size, 0600);211 exynos_gem_obj->base.size, flags);
226}212}
227 213
228struct drm_gem_object *exynos_dmabuf_prime_import(struct drm_device *drm_dev,214struct drm_gem_object *exynos_dmabuf_prime_import(struct drm_device *drm_dev,
@@ -246,7 +232,12 @@ struct drm_gem_object *exynos_dmabuf_prime_import(struct drm_device *drm_dev, · 17 unmodified lines
246 232
247 /* is it from our device? */233 /* is it from our device? */
248 if (obj->dev == drm_dev) {234 if (obj->dev == drm_dev) {
235 /*
236 * Importing dmabuf exported from out own gem increases
237 * refcount on gem itself instead of f_count of dmabuf.
238 */
249 drm_gem_object_reference(obj);239 drm_gem_object_reference(obj);
240 dma_buf_put(dma_buf);
250 return obj;241 return obj;
251 }242 }
252 }243 }
drivers/gpu/drm/exynos/exynos_drm_dmabuf.h+4−18
@@ -3,24 +3,10 @@ · 2 unmodified lines
3 * Copyright (c) 2012 Samsung Electronics Co., Ltd.3 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 * Author: Inki Dae <inki.dae@samsung.com>4 * Author: Inki Dae <inki.dae@samsung.com>
5 *5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a6 * This program is free software; you can redistribute it and/or modify it
7 * copy of this software and associated documentation files (the "Software"),7 * under the terms of the GNU General Public License as published by the
8 * to deal in the Software without restriction, including without limitation8 * Free Software Foundation; either version 2 of the License, or (at your
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,9 * option) any later version.
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice (including the next
14 * paragraph) shall be included in all copies or substantial portions of the
15 * Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23 * OTHER DEALINGS IN THE SOFTWARE.
24 */10 */
25 11
26#ifndef _EXYNOS_DRM_DMABUF_H_12#ifndef _EXYNOS_DRM_DMABUF_H_
drivers/gpu/drm/exynos/exynos_drm_drv.c+4−18
@@ -5,24 +5,10 @@ · 4 unmodified lines
5 * Joonyoung Shim <jy0922.shim@samsung.com>5 * Joonyoung Shim <jy0922.shim@samsung.com>
6 * Seung-Woo Kim <sw0312.kim@samsung.com>6 * Seung-Woo Kim <sw0312.kim@samsung.com>
7 *7 *
8 * Permission is hereby granted, free of charge, to any person obtaining a8 * This program is free software; you can redistribute it and/or modify it
9 * copy of this software and associated documentation files (the "Software"),9 * under the terms of the GNU General Public License as published by the
10 * to deal in the Software without restriction, including without limitation10 * Free Software Foundation; either version 2 of the License, or (at your
11 * the rights to use, copy, modify, merge, publish, distribute, sublicense,11 * option) any later version.
12 * and/or sell copies of the Software, and to permit persons to whom the
13 * Software is furnished to do so, subject to the following conditions:
14 *
15 * The above copyright notice and this permission notice (including the next
16 * paragraph) shall be included in all copies or substantial portions of the
17 * Software.
18 *
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
22 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
23 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
24 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
25 * OTHER DEALINGS IN THE SOFTWARE.
26 */12 */
27 13
28#include <drm/drmP.h>14#include <drm/drmP.h>
drivers/gpu/drm/exynos/exynos_drm_drv.h+4−18
@@ -6,24 +6,10 @@ · 5 unmodified lines
6 * Joonyoung Shim <jy0922.shim@samsung.com>6 * Joonyoung Shim <jy0922.shim@samsung.com>
7 * Seung-Woo Kim <sw0312.kim@samsung.com>7 * Seung-Woo Kim <sw0312.kim@samsung.com>
8 *8 *
9 * Permission is hereby granted, free of charge, to any person obtaining a9 * This program is free software; you can redistribute it and/or modify it
10 * copy of this software and associated documentation files (the "Software"),10 * under the terms of the GNU General Public License as published by the
11 * to deal in the Software without restriction, including without limitation11 * Free Software Foundation; either version 2 of the License, or (at your
12 * the rights to use, copy, modify, merge, publish, distribute, sublicense,12 * option) any later version.
13 * and/or sell copies of the Software, and to permit persons to whom the
14 * Software is furnished to do so, subject to the following conditions:
15 *
16 * The above copyright notice and this permission notice (including the next
17 * paragraph) shall be included in all copies or substantial portions of the
18 * Software.
19 *
20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
23 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
24 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
25 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
26 * OTHER DEALINGS IN THE SOFTWARE.
27 */13 */
28 14
29#ifndef _EXYNOS_DRM_DRV_H_15#ifndef _EXYNOS_DRM_DRV_H_
drivers/gpu/drm/exynos/exynos_drm_encoder.c+4−18
@@ -6,24 +6,10 @@ · 5 unmodified lines
6 * Joonyoung Shim <jy0922.shim@samsung.com>6 * Joonyoung Shim <jy0922.shim@samsung.com>
7 * Seung-Woo Kim <sw0312.kim@samsung.com>7 * Seung-Woo Kim <sw0312.kim@samsung.com>
8 *8 *
9 * Permission is hereby granted, free of charge, to any person obtaining a9 * This program is free software; you can redistribute it and/or modify it
10 * copy of this software and associated documentation files (the "Software"),10 * under the terms of the GNU General Public License as published by the
11 * to deal in the Software without restriction, including without limitation11 * Free Software Foundation; either version 2 of the License, or (at your
12 * the rights to use, copy, modify, merge, publish, distribute, sublicense,12 * option) any later version.
13 * and/or sell copies of the Software, and to permit persons to whom the
14 * Software is furnished to do so, subject to the following conditions:
15 *
16 * The above copyright notice and this permission notice (including the next
17 * paragraph) shall be included in all copies or substantial portions of the
18 * Software.
19 *
20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
23 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
24 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
25 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
26 * OTHER DEALINGS IN THE SOFTWARE.
27 */13 */
28 14
29#include <drm/drmP.h>15#include <drm/drmP.h>
drivers/gpu/drm/exynos/exynos_drm_encoder.h+4−18
@@ -5,24 +5,10 @@ · 4 unmodified lines
5 * Joonyoung Shim <jy0922.shim@samsung.com>5 * Joonyoung Shim <jy0922.shim@samsung.com>
6 * Seung-Woo Kim <sw0312.kim@samsung.com>6 * Seung-Woo Kim <sw0312.kim@samsung.com>
7 *7 *
8 * Permission is hereby granted, free of charge, to any person obtaining a8 * This program is free software; you can redistribute it and/or modify it
9 * copy of this software and associated documentation files (the "Software"),9 * under the terms of the GNU General Public License as published by the
10 * to deal in the Software without restriction, including without limitation10 * Free Software Foundation; either version 2 of the License, or (at your
11 * the rights to use, copy, modify, merge, publish, distribute, sublicense,11 * option) any later version.
12 * and/or sell copies of the Software, and to permit persons to whom the
13 * Software is furnished to do so, subject to the following conditions:
14 *
15 * The above copyright notice and this permission notice (including the next
16 * paragraph) shall be included in all copies or substantial portions of the
17 * Software.
18 *
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
22 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
23 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
24 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
25 * OTHER DEALINGS IN THE SOFTWARE.
26 */12 */
27 13
28#ifndef _EXYNOS_DRM_ENCODER_H_14#ifndef _EXYNOS_DRM_ENCODER_H_
drivers/gpu/drm/exynos/exynos_drm_fb.c+4−18
@@ -6,24 +6,10 @@ · 5 unmodified lines
6 * Joonyoung Shim <jy0922.shim@samsung.com>6 * Joonyoung Shim <jy0922.shim@samsung.com>
7 * Seung-Woo Kim <sw0312.kim@samsung.com>7 * Seung-Woo Kim <sw0312.kim@samsung.com>
8 *8 *
9 * Permission is hereby granted, free of charge, to any person obtaining a9 * This program is free software; you can redistribute it and/or modify it
10 * copy of this software and associated documentation files (the "Software"),10 * under the terms of the GNU General Public License as published by the
11 * to deal in the Software without restriction, including without limitation11 * Free Software Foundation; either version 2 of the License, or (at your
12 * the rights to use, copy, modify, merge, publish, distribute, sublicense,12 * option) any later version.
13 * and/or sell copies of the Software, and to permit persons to whom the
14 * Software is furnished to do so, subject to the following conditions:
15 *
16 * The above copyright notice and this permission notice (including the next
17 * paragraph) shall be included in all copies or substantial portions of the
18 * Software.
19 *
20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
23 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
24 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
25 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
26 * OTHER DEALINGS IN THE SOFTWARE.
27 */13 */
28 14
29#include <drm/drmP.h>15#include <drm/drmP.h>
drivers/gpu/drm/exynos/exynos_drm_fb.h+4−18
@@ -5,24 +5,10 @@ · 4 unmodified lines
5 * Joonyoung Shim <jy0922.shim@samsung.com>5 * Joonyoung Shim <jy0922.shim@samsung.com>
6 * Seung-Woo Kim <sw0312.kim@samsung.com>6 * Seung-Woo Kim <sw0312.kim@samsung.com>
7 *7 *
8 * Permission is hereby granted, free of charge, to any person obtaining a8 * This program is free software; you can redistribute it and/or modify it
9 * copy of this software and associated documentation files (the "Software"),9 * under the terms of the GNU General Public License as published by the
10 * to deal in the Software without restriction, including without limitation10 * Free Software Foundation; either version 2 of the License, or (at your
11 * the rights to use, copy, modify, merge, publish, distribute, sublicense,11 * option) any later version.
12 * and/or sell copies of the Software, and to permit persons to whom the
13 * Software is furnished to do so, subject to the following conditions:
14 *
15 * The above copyright notice and this permission notice (including the next
16 * paragraph) shall be included in all copies or substantial portions of the
17 * Software.
18 *
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
22 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
23 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
24 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
25 * OTHER DEALINGS IN THE SOFTWARE.
26 */12 */
27 13
28#ifndef _EXYNOS_DRM_FB_H_14#ifndef _EXYNOS_DRM_FB_H_
drivers/gpu/drm/exynos/exynos_drm_fbdev.c+22−22
@@ -6,24 +6,10 @@ · 5 unmodified lines
6 * Joonyoung Shim <jy0922.shim@samsung.com>6 * Joonyoung Shim <jy0922.shim@samsung.com>
7 * Seung-Woo Kim <sw0312.kim@samsung.com>7 * Seung-Woo Kim <sw0312.kim@samsung.com>
8 *8 *
9 * Permission is hereby granted, free of charge, to any person obtaining a9 * This program is free software; you can redistribute it and/or modify it
10 * copy of this software and associated documentation files (the "Software"),10 * under the terms of the GNU General Public License as published by the
11 * to deal in the Software without restriction, including without limitation11 * Free Software Foundation; either version 2 of the License, or (at your
12 * the rights to use, copy, modify, merge, publish, distribute, sublicense,12 * option) any later version.
13 * and/or sell copies of the Software, and to permit persons to whom the
14 * Software is furnished to do so, subject to the following conditions:
15 *
16 * The above copyright notice and this permission notice (including the next
17 * paragraph) shall be included in all copies or substantial portions of the
18 * Software.
19 *
20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
23 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
24 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
25 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
26 * OTHER DEALINGS IN THE SOFTWARE.
27 */13 */
28 14
29#include <drm/drmP.h>15#include <drm/drmP.h>
@@ -34,6 +20,7 @@ · 4 unmodified lines
34#include "exynos_drm_drv.h"20#include "exynos_drm_drv.h"
35#include "exynos_drm_fb.h"21#include "exynos_drm_fb.h"
36#include "exynos_drm_gem.h"22#include "exynos_drm_gem.h"
23#include "exynos_drm_iommu.h"
37 24
38#define MAX_CONNECTOR 425#define MAX_CONNECTOR 4
39#define PREFERRED_BPP 3226#define PREFERRED_BPP 32
@@ -111,9 +98,18 @@ static int exynos_drm_fbdev_update(struct drm_fb_helper *helper, · 71 unmodified lines
111 98
112 /* map pages with kernel virtual space. */99 /* map pages with kernel virtual space. */
113 if (!buffer->kvaddr) {100 if (!buffer->kvaddr) {
114 unsigned int nr_pages = buffer->size >> PAGE_SHIFT;101 if (is_drm_iommu_supported(dev)) {
115 buffer->kvaddr = vmap(buffer->pages, nr_pages, VM_MAP,102 unsigned int nr_pages = buffer->size >> PAGE_SHIFT;
103
104 buffer->kvaddr = vmap(buffer->pages, nr_pages, VM_MAP,
116 pgprot_writecombine(PAGE_KERNEL));105 pgprot_writecombine(PAGE_KERNEL));
106 } else {
107 phys_addr_t dma_addr = buffer->dma_addr;
108 if (dma_addr)
109 buffer->kvaddr = phys_to_virt(dma_addr);
110 else
111 buffer->kvaddr = (void __iomem *)NULL;
112 }
117 if (!buffer->kvaddr) {113 if (!buffer->kvaddr) {
118 DRM_ERROR("failed to map pages to kernel space.\n");114 DRM_ERROR("failed to map pages to kernel space.\n");
119 return -EIO;115 return -EIO;
@@ -128,8 +124,12 @@ static int exynos_drm_fbdev_update(struct drm_fb_helper *helper, · 8 unmodified lines
128 124
129 dev->mode_config.fb_base = (resource_size_t)buffer->dma_addr;125 dev->mode_config.fb_base = (resource_size_t)buffer->dma_addr;
130 fbi->screen_base = buffer->kvaddr + offset;126 fbi->screen_base = buffer->kvaddr + offset;
131 fbi->fix.smem_start = (unsigned long)127 if (is_drm_iommu_supported(dev))
128 fbi->fix.smem_start = (unsigned long)
132 (page_to_phys(sg_page(buffer->sgt->sgl)) + offset);129 (page_to_phys(sg_page(buffer->sgt->sgl)) + offset);
130 else
131 fbi->fix.smem_start = (unsigned long)buffer->dma_addr;
132
133 fbi->screen_size = size;133 fbi->screen_size = size;
134 fbi->fix.smem_len = size;134 fbi->fix.smem_len = size;
135 135
@@ -320,7 +320,7 @@ static void exynos_drm_fbdev_destroy(struct drm_device *dev, · 184 unmodified lines
320 struct exynos_drm_gem_obj *exynos_gem_obj = exynos_fbd->exynos_gem_obj;320 struct exynos_drm_gem_obj *exynos_gem_obj = exynos_fbd->exynos_gem_obj;
321 struct drm_framebuffer *fb;321 struct drm_framebuffer *fb;
322 322
323 if (exynos_gem_obj->buffer->kvaddr)323 if (is_drm_iommu_supported(dev) && exynos_gem_obj->buffer->kvaddr)
324 vunmap(exynos_gem_obj->buffer->kvaddr);324 vunmap(exynos_gem_obj->buffer->kvaddr);
325 325
326 /* release drm framebuffer and real buffer */326 /* release drm framebuffer and real buffer */
drivers/gpu/drm/exynos/exynos_drm_fbdev.h+4−18
@@ -6,24 +6,10 @@ · 5 unmodified lines
6 * Joonyoung Shim <jy0922.shim@samsung.com>6 * Joonyoung Shim <jy0922.shim@samsung.com>
7 * Seung-Woo Kim <sw0312.kim@samsung.com>7 * Seung-Woo Kim <sw0312.kim@samsung.com>
8 *8 *
9 * Permission is hereby granted, free of charge, to any person obtaining a9 * This program is free software; you can redistribute it and/or modify it
10 * copy of this software and associated documentation files (the "Software"),10 * under the terms of the GNU General Public License as published by the
11 * to deal in the Software without restriction, including without limitation11 * Free Software Foundation; either version 2 of the License, or (at your
12 * the rights to use, copy, modify, merge, publish, distribute, sublicense,12 * option) any later version.
13 * and/or sell copies of the Software, and to permit persons to whom the
14 * Software is furnished to do so, subject to the following conditions:
15 *
16 * The above copyright notice and this permission notice (including the next
17 * paragraph) shall be included in all copies or substantial portions of the
18 * Software.
19 *
20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
23 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
24 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
25 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
26 * OTHER DEALINGS IN THE SOFTWARE.
27 */13 */
28 14
29#ifndef _EXYNOS_DRM_FBDEV_H_15#ifndef _EXYNOS_DRM_FBDEV_H_
drivers/gpu/drm/exynos/exynos_drm_fimc.c+39−85
@@ -25,7 +25,7 @@ · 24 unmodified lines
25#include "exynos_drm_fimc.h"25#include "exynos_drm_fimc.h"
26 26
27/*27/*
28 * FIMC is stand for Fully Interactive Mobile Camera and28 * FIMC stands for Fully Interactive Mobile Camera and
29 * supports image scaler/rotator and input/output DMA operations.29 * supports image scaler/rotator and input/output DMA operations.
30 * input DMA reads image data from the memory.30 * input DMA reads image data from the memory.
31 * output DMA writes image data to memory.31 * output DMA writes image data to memory.
@@ -163,19 +163,29 @@ struct fimc_context { · 131 unmodified lines
163 bool suspended;163 bool suspended;
164};164};
165 165
166static void fimc_sw_reset(struct fimc_context *ctx, bool pattern)166static void fimc_sw_reset(struct fimc_context *ctx)
167{167{
168 u32 cfg;168 u32 cfg;
169 169
170 DRM_DEBUG_KMS("%s:pattern[%d]\n", __func__, pattern);170 DRM_DEBUG_KMS("%s\n", __func__);
171
172 /* stop dma operation */
173 cfg = fimc_read(EXYNOS_CISTATUS);
174 if (EXYNOS_CISTATUS_GET_ENVID_STATUS(cfg)) {
175 cfg = fimc_read(EXYNOS_MSCTRL);
176 cfg &= ~EXYNOS_MSCTRL_ENVID;
177 fimc_write(cfg, EXYNOS_MSCTRL);
178 }
171 179
172 cfg = fimc_read(EXYNOS_CISRCFMT);180 cfg = fimc_read(EXYNOS_CISRCFMT);
173 cfg |= EXYNOS_CISRCFMT_ITU601_8BIT;181 cfg |= EXYNOS_CISRCFMT_ITU601_8BIT;
174 if (pattern)
175 cfg |= EXYNOS_CIGCTRL_TESTPATTERN_COLOR_BAR;
176
177 fimc_write(cfg, EXYNOS_CISRCFMT);182 fimc_write(cfg, EXYNOS_CISRCFMT);
178 183
184 /* disable image capture */
185 cfg = fimc_read(EXYNOS_CIIMGCPT);
186 cfg &= ~(EXYNOS_CIIMGCPT_IMGCPTEN_SC | EXYNOS_CIIMGCPT_IMGCPTEN);
187 fimc_write(cfg, EXYNOS_CIIMGCPT);
188
179 /* s/w reset */189 /* s/w reset */
180 cfg = fimc_read(EXYNOS_CIGCTRL);190 cfg = fimc_read(EXYNOS_CIGCTRL);
181 cfg |= (EXYNOS_CIGCTRL_SWRST);191 cfg |= (EXYNOS_CIGCTRL_SWRST);
@@ -695,7 +705,7 @@ static int fimc_src_set_addr(struct device *dev, · 513 unmodified lines
695{705{
696 struct fimc_context *ctx = get_fimc_context(dev);706 struct fimc_context *ctx = get_fimc_context(dev);
697 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv;707 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv;
698 struct drm_exynos_ipp_cmd_node *c_node = ippdrv->cmd;708 struct drm_exynos_ipp_cmd_node *c_node = ippdrv->c_node;
699 struct drm_exynos_ipp_property *property;709 struct drm_exynos_ipp_property *property;
700 struct drm_exynos_ipp_config *config;710 struct drm_exynos_ipp_config *config;
701 711
@@ -705,10 +715,6 @@ static int fimc_src_set_addr(struct device *dev, · 3 unmodified lines
705 }715 }
706 716
707 property = &c_node->property;717 property = &c_node->property;
708 if (!property) {
709 DRM_ERROR("failed to get property.\n");
710 return -EINVAL;
711 }
712 718
713 DRM_DEBUG_KMS("%s:prop_id[%d]buf_id[%d]buf_type[%d]\n", __func__,719 DRM_DEBUG_KMS("%s:prop_id[%d]buf_id[%d]buf_type[%d]\n", __func__,
714 property->prop_id, buf_id, buf_type);720 property->prop_id, buf_id, buf_type);
@@ -1206,7 +1212,7 @@ static int fimc_dst_set_buf_seq(struct fimc_context *ctx, u32 buf_id, · 491 unmodified lines
1206 }1212 }
1207 1213
1208 /* sequence id */1214 /* sequence id */
1209 cfg &= (~mask);1215 cfg &= ~mask;
1210 cfg |= (enable << buf_id);1216 cfg |= (enable << buf_id);
1211 fimc_write(cfg, EXYNOS_CIFCNTSEQ);1217 fimc_write(cfg, EXYNOS_CIFCNTSEQ);
1212 1218
@@ -1231,7 +1237,7 @@ static int fimc_dst_set_addr(struct device *dev, · 18 unmodified lines
1231{1237{
1232 struct fimc_context *ctx = get_fimc_context(dev);1238 struct fimc_context *ctx = get_fimc_context(dev);
1233 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv;1239 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv;
1234 struct drm_exynos_ipp_cmd_node *c_node = ippdrv->cmd;1240 struct drm_exynos_ipp_cmd_node *c_node = ippdrv->c_node;
1235 struct drm_exynos_ipp_property *property;1241 struct drm_exynos_ipp_property *property;
1236 struct drm_exynos_ipp_config *config;1242 struct drm_exynos_ipp_config *config;
1237 1243
@@ -1241,10 +1247,6 @@ static int fimc_dst_set_addr(struct device *dev, · 3 unmodified lines
1241 }1247 }
1242 1248
1243 property = &c_node->property;1249 property = &c_node->property;
1244 if (!property) {
1245 DRM_ERROR("failed to get property.\n");
1246 return -EINVAL;
1247 }
1248 1250
1249 DRM_DEBUG_KMS("%s:prop_id[%d]buf_id[%d]buf_type[%d]\n", __func__,1251 DRM_DEBUG_KMS("%s:prop_id[%d]buf_id[%d]buf_type[%d]\n", __func__,
1250 property->prop_id, buf_id, buf_type);1252 property->prop_id, buf_id, buf_type);
@@ -1317,7 +1319,7 @@ static irqreturn_t fimc_irq_handler(int irq, void *dev_id) · 66 unmodified lines
1317{1319{
1318 struct fimc_context *ctx = dev_id;1320 struct fimc_context *ctx = dev_id;
1319 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv;1321 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv;
1320 struct drm_exynos_ipp_cmd_node *c_node = ippdrv->cmd;1322 struct drm_exynos_ipp_cmd_node *c_node = ippdrv->c_node;
1321 struct drm_exynos_ipp_event_work *event_work =1323 struct drm_exynos_ipp_event_work *event_work =
1322 c_node->event_work;1324 c_node->event_work;
1323 int buf_id;1325 int buf_id;
@@ -1395,6 +1397,7 @@ static inline bool fimc_check_drm_flip(enum drm_exynos_flip flip) · 71 unmodified lines
1395 case EXYNOS_DRM_FLIP_NONE:1397 case EXYNOS_DRM_FLIP_NONE:
1396 case EXYNOS_DRM_FLIP_VERTICAL:1398 case EXYNOS_DRM_FLIP_VERTICAL:
1397 case EXYNOS_DRM_FLIP_HORIZONTAL:1399 case EXYNOS_DRM_FLIP_HORIZONTAL:
1400 case EXYNOS_DRM_FLIP_BOTH:
1398 return true;1401 return true;
1399 default:1402 default:
1400 DRM_DEBUG_KMS("%s:invalid flip\n", __func__);1403 DRM_DEBUG_KMS("%s:invalid flip\n", __func__);
@@ -1543,7 +1546,7 @@ static int fimc_ippdrv_reset(struct device *dev) · 142 unmodified lines
1543 DRM_DEBUG_KMS("%s\n", __func__);1546 DRM_DEBUG_KMS("%s\n", __func__);
1544 1547
1545 /* reset h/w block */1548 /* reset h/w block */
1546 fimc_sw_reset(ctx, false);1549 fimc_sw_reset(ctx);
1547 1550
1548 /* reset scaler capability */1551 /* reset scaler capability */
1549 memset(&ctx->sc, 0x0, sizeof(ctx->sc));1552 memset(&ctx->sc, 0x0, sizeof(ctx->sc));
@@ -1557,7 +1560,7 @@ static int fimc_ippdrv_start(struct device *dev, enum drm_exynos_ipp_cmd cmd) · 7 unmodified lines
1557{1560{
1558 struct fimc_context *ctx = get_fimc_context(dev);1561 struct fimc_context *ctx = get_fimc_context(dev);
1559 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv;1562 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv;
1560 struct drm_exynos_ipp_cmd_node *c_node = ippdrv->cmd;1563 struct drm_exynos_ipp_cmd_node *c_node = ippdrv->c_node;
1561 struct drm_exynos_ipp_property *property;1564 struct drm_exynos_ipp_property *property;
1562 struct drm_exynos_ipp_config *config;1565 struct drm_exynos_ipp_config *config;
1563 struct drm_exynos_pos img_pos[EXYNOS_DRM_OPS_MAX];1566 struct drm_exynos_pos img_pos[EXYNOS_DRM_OPS_MAX];
@@ -1573,10 +1576,6 @@ static int fimc_ippdrv_start(struct device *dev, enum drm_exynos_ipp_cmd cmd) · 9 unmodified lines
1573 }1576 }
1574 1577
1575 property = &c_node->property;1578 property = &c_node->property;
1576 if (!property) {
1577 DRM_ERROR("failed to get property.\n");
1578 return -EINVAL;
1579 }
1580 1579
1581 fimc_handle_irq(ctx, true, false, true);1580 fimc_handle_irq(ctx, true, false, true);
1582 1581
@@ -1739,93 +1738,64 @@ static int fimc_probe(struct platform_device *pdev) · 156 unmodified lines
1739 platform_get_device_id(pdev)->driver_data;1738 platform_get_device_id(pdev)->driver_data;
1740 1739
1741 /* clock control */1740 /* clock control */
1742 ctx->sclk_fimc_clk = clk_get(dev, "sclk_fimc");1741 ctx->sclk_fimc_clk = devm_clk_get(dev, "sclk_fimc");
1743 if (IS_ERR(ctx->sclk_fimc_clk)) {1742 if (IS_ERR(ctx->sclk_fimc_clk)) {
1744 dev_err(dev, "failed to get src fimc clock.\n");1743 dev_err(dev, "failed to get src fimc clock.\n");
1745 ret = PTR_ERR(ctx->sclk_fimc_clk);1744 return PTR_ERR(ctx->sclk_fimc_clk);
1746 goto err_ctx;
1747 }1745 }
1748 clk_enable(ctx->sclk_fimc_clk);1746 clk_enable(ctx->sclk_fimc_clk);
1749 1747
1750 ctx->fimc_clk = clk_get(dev, "fimc");1748 ctx->fimc_clk = devm_clk_get(dev, "fimc");
1751 if (IS_ERR(ctx->fimc_clk)) {1749 if (IS_ERR(ctx->fimc_clk)) {
1752 dev_err(dev, "failed to get fimc clock.\n");1750 dev_err(dev, "failed to get fimc clock.\n");
1753 ret = PTR_ERR(ctx->fimc_clk);
1754 clk_disable(ctx->sclk_fimc_clk);1751 clk_disable(ctx->sclk_fimc_clk);
1755 clk_put(ctx->sclk_fimc_clk);1752 return PTR_ERR(ctx->fimc_clk);
1756 goto err_ctx;
1757 }1753 }
1758 1754
1759 ctx->wb_clk = clk_get(dev, "pxl_async0");1755 ctx->wb_clk = devm_clk_get(dev, "pxl_async0");
1760 if (IS_ERR(ctx->wb_clk)) {1756 if (IS_ERR(ctx->wb_clk)) {
1761 dev_err(dev, "failed to get writeback a clock.\n");1757 dev_err(dev, "failed to get writeback a clock.\n");
1762 ret = PTR_ERR(ctx->wb_clk);
1763 clk_disable(ctx->sclk_fimc_clk);1758 clk_disable(ctx->sclk_fimc_clk);
1764 clk_put(ctx->sclk_fimc_clk);1759 return PTR_ERR(ctx->wb_clk);
1765 clk_put(ctx->fimc_clk);
1766 goto err_ctx;
1767 }1760 }
1768 1761
1769 ctx->wb_b_clk = clk_get(dev, "pxl_async1");1762 ctx->wb_b_clk = devm_clk_get(dev, "pxl_async1");
1770 if (IS_ERR(ctx->wb_b_clk)) {1763 if (IS_ERR(ctx->wb_b_clk)) {
1771 dev_err(dev, "failed to get writeback b clock.\n");1764 dev_err(dev, "failed to get writeback b clock.\n");
1772 ret = PTR_ERR(ctx->wb_b_clk);
1773 clk_disable(ctx->sclk_fimc_clk);1765 clk_disable(ctx->sclk_fimc_clk);
1774 clk_put(ctx->sclk_fimc_clk);1766 return PTR_ERR(ctx->wb_b_clk);
1775 clk_put(ctx->fimc_clk);
1776 clk_put(ctx->wb_clk);
1777 goto err_ctx;
1778 }1767 }
1779 1768
1780 parent_clk = clk_get(dev, ddata->parent_clk);1769 parent_clk = devm_clk_get(dev, ddata->parent_clk);
1781 1770
1782 if (IS_ERR(parent_clk)) {1771 if (IS_ERR(parent_clk)) {
1783 dev_err(dev, "failed to get parent clock.\n");1772 dev_err(dev, "failed to get parent clock.\n");
1784 ret = PTR_ERR(parent_clk);
1785 clk_disable(ctx->sclk_fimc_clk);1773 clk_disable(ctx->sclk_fimc_clk);
1786 clk_put(ctx->sclk_fimc_clk);1774 return PTR_ERR(parent_clk);
1787 clk_put(ctx->fimc_clk);
1788 clk_put(ctx->wb_clk);
1789 clk_put(ctx->wb_b_clk);
1790 goto err_ctx;
1791 }1775 }
1792 1776
1793 if (clk_set_parent(ctx->sclk_fimc_clk, parent_clk)) {1777 if (clk_set_parent(ctx->sclk_fimc_clk, parent_clk)) {
1794 dev_err(dev, "failed to set parent.\n");1778 dev_err(dev, "failed to set parent.\n");
1795 ret = -EINVAL;
1796 clk_put(parent_clk);
1797 clk_disable(ctx->sclk_fimc_clk);1779 clk_disable(ctx->sclk_fimc_clk);
1798 clk_put(ctx->sclk_fimc_clk);1780 return -EINVAL;
1799 clk_put(ctx->fimc_clk);
1800 clk_put(ctx->wb_clk);
1801 clk_put(ctx->wb_b_clk);
1802 goto err_ctx;
1803 }1781 }
1804 1782
1805 clk_put(parent_clk);1783 devm_clk_put(dev, parent_clk);
1806 clk_set_rate(ctx->sclk_fimc_clk, pdata->clk_rate);1784 clk_set_rate(ctx->sclk_fimc_clk, pdata->clk_rate);
1807 1785
1808 /* resource memory */1786 /* resource memory */
1809 ctx->regs_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);1787 ctx->regs_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1810 if (!ctx->regs_res) {
1811 dev_err(dev, "failed to find registers.\n");
1812 ret = -ENOENT;
1813 goto err_clk;
1814 }
1815
1816 ctx->regs = devm_request_and_ioremap(dev, ctx->regs_res);1788 ctx->regs = devm_request_and_ioremap(dev, ctx->regs_res);
1817 if (!ctx->regs) {1789 if (!ctx->regs) {
1818 dev_err(dev, "failed to map registers.\n");1790 dev_err(dev, "failed to map registers.\n");
1819 ret = -ENXIO;1791 return -ENXIO;
1820 goto err_clk;
1821 }1792 }
1822 1793
1823 /* resource irq */1794 /* resource irq */
1824 res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);1795 res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
1825 if (!res) {1796 if (!res) {
1826 dev_err(dev, "failed to request irq resource.\n");1797 dev_err(dev, "failed to request irq resource.\n");
1827 ret = -ENOENT;1798 return -ENOENT;
1828 goto err_get_regs;
1829 }1799 }
1830 1800
1831 ctx->irq = res->start;1801 ctx->irq = res->start;
@@ -1833,7 +1803,7 @@ static int fimc_probe(struct platform_device *pdev) · 1 unmodified line
1833 IRQF_ONESHOT, "drm_fimc", ctx);1803 IRQF_ONESHOT, "drm_fimc", ctx);
1834 if (ret < 0) {1804 if (ret < 0) {
1835 dev_err(dev, "failed to request irq.\n");1805 dev_err(dev, "failed to request irq.\n");
1836 goto err_get_regs;1806 return ret;
1837 }1807 }
1838 1808
1839 /* context initailization */1809 /* context initailization */
@@ -1879,15 +1849,7 @@ err_ippdrv_register: · 39 unmodified lines
1879 pm_runtime_disable(dev);1849 pm_runtime_disable(dev);
1880err_get_irq:1850err_get_irq:
1881 free_irq(ctx->irq, ctx);1851 free_irq(ctx->irq, ctx);
1882err_get_regs:1852
1883 devm_iounmap(dev, ctx->regs);
1884err_clk:
1885 clk_put(ctx->sclk_fimc_clk);
1886 clk_put(ctx->fimc_clk);
1887 clk_put(ctx->wb_clk);
1888 clk_put(ctx->wb_b_clk);
1889err_ctx:
1890 devm_kfree(dev, ctx);
1891 return ret;1853 return ret;
1892}1854}
1893 1855
@@ -1905,14 +1867,6 @@ static int fimc_remove(struct platform_device *pdev) · 11 unmodified lines
1905 pm_runtime_disable(dev);1867 pm_runtime_disable(dev);
1906 1868
1907 free_irq(ctx->irq, ctx);1869 free_irq(ctx->irq, ctx);
1908 devm_iounmap(dev, ctx->regs);
1909
1910 clk_put(ctx->sclk_fimc_clk);
1911 clk_put(ctx->fimc_clk);
1912 clk_put(ctx->wb_clk);
1913 clk_put(ctx->wb_b_clk);
1914
1915 devm_kfree(dev, ctx);
1916 1870
1917 return 0;1871 return 0;
1918}1872}
drivers/gpu/drm/exynos/exynos_drm_fimc.h+4−18
@@ -6,24 +6,10 @@ · 5 unmodified lines
6 * Jinyoung Jeon <jy0.jeon@samsung.com>6 * Jinyoung Jeon <jy0.jeon@samsung.com>
7 * Sangmin Lee <lsmin.lee@samsung.com>7 * Sangmin Lee <lsmin.lee@samsung.com>
8 *8 *
9 * Permission is hereby granted, free of charge, to any person obtaining a9 * This program is free software; you can redistribute it and/or modify it
10 * copy of this software and associated documentation files (the "Software"),10 * under the terms of the GNU General Public License as published by the
11 * to deal in the Software without restriction, including without limitation11 * Free Software Foundation; either version 2 of the License, or (at your
12 * the rights to use, copy, modify, merge, publish, distribute, sublicense,12 * option) any later version.
13 * and/or sell copies of the Software, and to permit persons to whom the
14 * Software is furnished to do so, subject to the following conditions:
15 *
16 * The above copyright notice and this permission notice (including the next
17 * paragraph) shall be included in all copies or substantial portions of the
18 * Software.
19 *
20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
23 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
24 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
25 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
26 * OTHER DEALINGS IN THE SOFTWARE.
27 */13 */
28 14
29#ifndef _EXYNOS_DRM_FIMC_H_15#ifndef _EXYNOS_DRM_FIMC_H_
drivers/gpu/drm/exynos/exynos_drm_fimd.c+2−30
@@ -663,34 +663,6 @@ static struct exynos_drm_manager fimd_manager = { · 662 unmodified lines
663 .display_ops = &fimd_display_ops,663 .display_ops = &fimd_display_ops,
664};664};
665 665
666static void fimd_finish_pageflip(struct drm_device *drm_dev, int crtc)
667{
668 struct exynos_drm_private *dev_priv = drm_dev->dev_private;
669 struct drm_pending_vblank_event *e, *t;
670 struct timeval now;
671 unsigned long flags;
672
673 spin_lock_irqsave(&drm_dev->event_lock, flags);
674
675 list_for_each_entry_safe(e, t, &dev_priv->pageflip_event_list,
676 base.link) {
677 /* if event's pipe isn't same as crtc then ignore it. */
678 if (crtc != e->pipe)
679 continue;
680
681 do_gettimeofday(&now);
682 e->event.sequence = 0;
683 e->event.tv_sec = now.tv_sec;
684 e->event.tv_usec = now.tv_usec;
685
686 list_move_tail(&e->base.link, &e->base.file_priv->event_list);
687 wake_up_interruptible(&e->base.file_priv->event_wait);
688 drm_vblank_put(drm_dev, crtc);
689 }
690
691 spin_unlock_irqrestore(&drm_dev->event_lock, flags);
692}
693
694static irqreturn_t fimd_irq_handler(int irq, void *dev_id)666static irqreturn_t fimd_irq_handler(int irq, void *dev_id)
695{667{
696 struct fimd_context *ctx = (struct fimd_context *)dev_id;668 struct fimd_context *ctx = (struct fimd_context *)dev_id;
@@ -710,7 +682,7 @@ static irqreturn_t fimd_irq_handler(int irq, void *dev_id) · 13 unmodified lines
710 goto out;682 goto out;
711 683
712 drm_handle_vblank(drm_dev, manager->pipe);684 drm_handle_vblank(drm_dev, manager->pipe);
713 fimd_finish_pageflip(drm_dev, manager->pipe);685 exynos_drm_crtc_finish_pageflip(drm_dev, manager->pipe);
714 686
715 /* set wait vsync event to zero and wake up queue. */687 /* set wait vsync event to zero and wake up queue. */
716 if (atomic_read(&ctx->wait_vsync_event)) {688 if (atomic_read(&ctx->wait_vsync_event)) {
@@ -1046,7 +1018,7 @@ static int fimd_resume(struct device *dev) · 329 unmodified lines
1046 * of pm runtime would still be 1 so in this case, fimd driver1018 * of pm runtime would still be 1 so in this case, fimd driver
1047 * should be on directly not drawing on pm runtime interface.1019 * should be on directly not drawing on pm runtime interface.
1048 */1020 */
1049 if (pm_runtime_suspended(dev)) {1021 if (!pm_runtime_suspended(dev)) {
1050 int ret;1022 int ret;
1051 1023
1052 ret = fimd_activate(ctx, true);1024 ret = fimd_activate(ctx, true);
drivers/gpu/drm/exynos/exynos_drm_gem.c+4−18
@@ -3,24 +3,10 @@ · 2 unmodified lines
3 * Copyright (c) 2011 Samsung Electronics Co., Ltd.3 * Copyright (c) 2011 Samsung Electronics Co., Ltd.
4 * Author: Inki Dae <inki.dae@samsung.com>4 * Author: Inki Dae <inki.dae@samsung.com>
5 *5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a6 * This program is free software; you can redistribute it and/or modify it
7 * copy of this software and associated documentation files (the "Software"),7 * under the terms of the GNU General Public License as published by the
8 * to deal in the Software without restriction, including without limitation8 * Free Software Foundation; either version 2 of the License, or (at your
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,9 * option) any later version.
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice (including the next
14 * paragraph) shall be included in all copies or substantial portions of the
15 * Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23 * OTHER DEALINGS IN THE SOFTWARE.
24 */10 */
25 11
26#include <drm/drmP.h>12#include <drm/drmP.h>
drivers/gpu/drm/exynos/exynos_drm_gem.h+4−18
@@ -3,24 +3,10 @@ · 2 unmodified lines
3 * Copyright (c) 2011 Samsung Electronics Co., Ltd.3 * Copyright (c) 2011 Samsung Electronics Co., Ltd.
4 * Authoer: Inki Dae <inki.dae@samsung.com>4 * Authoer: Inki Dae <inki.dae@samsung.com>
5 *5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a6 * This program is free software; you can redistribute it and/or modify it
7 * copy of this software and associated documentation files (the "Software"),7 * under the terms of the GNU General Public License as published by the
8 * to deal in the Software without restriction, including without limitation8 * Free Software Foundation; either version 2 of the License, or (at your
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,9 * option) any later version.
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice (including the next
14 * paragraph) shall be included in all copies or substantial portions of the
15 * Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23 * OTHER DEALINGS IN THE SOFTWARE.
24 */10 */
25 11
26#ifndef _EXYNOS_DRM_GEM_H_12#ifndef _EXYNOS_DRM_GEM_H_
drivers/gpu/drm/exynos/exynos_drm_gsc.c+12−44
@@ -25,7 +25,7 @@ · 24 unmodified lines
25#include "exynos_drm_gsc.h"25#include "exynos_drm_gsc.h"
26 26
27/*27/*
28 * GSC is stand for General SCaler and28 * GSC stands for General SCaler and
29 * supports image scaler/rotator and input/output DMA operations.29 * supports image scaler/rotator and input/output DMA operations.
30 * input DMA reads image data from the memory.30 * input DMA reads image data from the memory.
31 * output DMA writes image data to memory.31 * output DMA writes image data to memory.
@@ -711,7 +711,7 @@ static int gsc_src_set_addr(struct device *dev, · 679 unmodified lines
711{711{
712 struct gsc_context *ctx = get_gsc_context(dev);712 struct gsc_context *ctx = get_gsc_context(dev);
713 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv;713 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv;
714 struct drm_exynos_ipp_cmd_node *c_node = ippdrv->cmd;714 struct drm_exynos_ipp_cmd_node *c_node = ippdrv->c_node;
715 struct drm_exynos_ipp_property *property;715 struct drm_exynos_ipp_property *property;
716 716
717 if (!c_node) {717 if (!c_node) {
@@ -720,10 +720,6 @@ static int gsc_src_set_addr(struct device *dev, · 2 unmodified lines
720 }720 }
721 721
722 property = &c_node->property;722 property = &c_node->property;
723 if (!property) {
724 DRM_ERROR("failed to get property.\n");
725 return -EFAULT;
726 }
727 723
728 DRM_DEBUG_KMS("%s:prop_id[%d]buf_id[%d]buf_type[%d]\n", __func__,724 DRM_DEBUG_KMS("%s:prop_id[%d]buf_id[%d]buf_type[%d]\n", __func__,
729 property->prop_id, buf_id, buf_type);725 property->prop_id, buf_id, buf_type);
@@ -1171,7 +1167,7 @@ static int gsc_dst_set_addr(struct device *dev, · 441 unmodified lines
1171{1167{
1172 struct gsc_context *ctx = get_gsc_context(dev);1168 struct gsc_context *ctx = get_gsc_context(dev);
1173 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv;1169 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv;
1174 struct drm_exynos_ipp_cmd_node *c_node = ippdrv->cmd;1170 struct drm_exynos_ipp_cmd_node *c_node = ippdrv->c_node;
1175 struct drm_exynos_ipp_property *property;1171 struct drm_exynos_ipp_property *property;
1176 1172
1177 if (!c_node) {1173 if (!c_node) {
@@ -1180,10 +1176,6 @@ static int gsc_dst_set_addr(struct device *dev, · 2 unmodified lines
1180 }1176 }
1181 1177
1182 property = &c_node->property;1178 property = &c_node->property;
1183 if (!property) {
1184 DRM_ERROR("failed to get property.\n");
1185 return -EFAULT;
1186 }
1187 1179
1188 DRM_DEBUG_KMS("%s:prop_id[%d]buf_id[%d]buf_type[%d]\n", __func__,1180 DRM_DEBUG_KMS("%s:prop_id[%d]buf_id[%d]buf_type[%d]\n", __func__,
1189 property->prop_id, buf_id, buf_type);1181 property->prop_id, buf_id, buf_type);
@@ -1312,7 +1304,7 @@ static irqreturn_t gsc_irq_handler(int irq, void *dev_id) · 122 unmodified lines
1312{1304{
1313 struct gsc_context *ctx = dev_id;1305 struct gsc_context *ctx = dev_id;
1314 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv;1306 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv;
1315 struct drm_exynos_ipp_cmd_node *c_node = ippdrv->cmd;1307 struct drm_exynos_ipp_cmd_node *c_node = ippdrv->c_node;
1316 struct drm_exynos_ipp_event_work *event_work =1308 struct drm_exynos_ipp_event_work *event_work =
1317 c_node->event_work;1309 c_node->event_work;
1318 u32 status;1310 u32 status;
@@ -1399,7 +1391,7 @@ static inline bool gsc_check_drm_flip(enum drm_exynos_flip flip) · 80 unmodified lines
1399 case EXYNOS_DRM_FLIP_NONE:1391 case EXYNOS_DRM_FLIP_NONE:
1400 case EXYNOS_DRM_FLIP_VERTICAL:1392 case EXYNOS_DRM_FLIP_VERTICAL:
1401 case EXYNOS_DRM_FLIP_HORIZONTAL:1393 case EXYNOS_DRM_FLIP_HORIZONTAL:
1402 case EXYNOS_DRM_FLIP_VERTICAL | EXYNOS_DRM_FLIP_HORIZONTAL:1394 case EXYNOS_DRM_FLIP_BOTH:
1403 return true;1395 return true;
1404 default:1396 default:
1405 DRM_DEBUG_KMS("%s:invalid flip\n", __func__);1397 DRM_DEBUG_KMS("%s:invalid flip\n", __func__);
@@ -1549,7 +1541,7 @@ static int gsc_ippdrv_start(struct device *dev, enum drm_exynos_ipp_cmd cmd) · 143 unmodified lines
1549{1541{
1550 struct gsc_context *ctx = get_gsc_context(dev);1542 struct gsc_context *ctx = get_gsc_context(dev);
1551 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv;1543 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv;
1552 struct drm_exynos_ipp_cmd_node *c_node = ippdrv->cmd;1544 struct drm_exynos_ipp_cmd_node *c_node = ippdrv->c_node;
1553 struct drm_exynos_ipp_property *property;1545 struct drm_exynos_ipp_property *property;
1554 struct drm_exynos_ipp_config *config;1546 struct drm_exynos_ipp_config *config;
1555 struct drm_exynos_pos img_pos[EXYNOS_DRM_OPS_MAX];1547 struct drm_exynos_pos img_pos[EXYNOS_DRM_OPS_MAX];
@@ -1565,10 +1557,6 @@ static int gsc_ippdrv_start(struct device *dev, enum drm_exynos_ipp_cmd cmd) · 9 unmodified lines
1565 }1557 }
1566 1558
1567 property = &c_node->property;1559 property = &c_node->property;
1568 if (!property) {
1569 DRM_ERROR("failed to get property.\n");
1570 return -EINVAL;
1571 }
1572 1560
1573 gsc_handle_irq(ctx, true, false, true);1561 gsc_handle_irq(ctx, true, false, true);
1574 1562
@@ -1604,7 +1592,7 @@ static int gsc_ippdrv_start(struct device *dev, enum drm_exynos_ipp_cmd cmd) · 29 unmodified lines
1604 exynos_drm_ippnb_send_event(IPP_SET_WRITEBACK, (void *)&set_wb);1592 exynos_drm_ippnb_send_event(IPP_SET_WRITEBACK, (void *)&set_wb);
1605 1593
1606 /* src local path */1594 /* src local path */
1607 cfg = readl(GSC_IN_CON);1595 cfg = gsc_read(GSC_IN_CON);
1608 cfg &= ~(GSC_IN_PATH_MASK | GSC_IN_LOCAL_SEL_MASK);1596 cfg &= ~(GSC_IN_PATH_MASK | GSC_IN_LOCAL_SEL_MASK);
1609 cfg |= (GSC_IN_PATH_LOCAL | GSC_IN_LOCAL_FIMD_WB);1597 cfg |= (GSC_IN_PATH_LOCAL | GSC_IN_LOCAL_FIMD_WB);
1610 gsc_write(cfg, GSC_IN_CON);1598 gsc_write(cfg, GSC_IN_CON);
@@ -1696,34 +1684,25 @@ static int gsc_probe(struct platform_device *pdev) · 85 unmodified lines
1696 return -ENOMEM;1684 return -ENOMEM;
1697 1685
1698 /* clock control */1686 /* clock control */
1699 ctx->gsc_clk = clk_get(dev, "gscl");1687 ctx->gsc_clk = devm_clk_get(dev, "gscl");
1700 if (IS_ERR(ctx->gsc_clk)) {1688 if (IS_ERR(ctx->gsc_clk)) {
1701 dev_err(dev, "failed to get gsc clock.\n");1689 dev_err(dev, "failed to get gsc clock.\n");
1702 ret = PTR_ERR(ctx->gsc_clk);1690 return PTR_ERR(ctx->gsc_clk);
1703 goto err_ctx;
1704 }1691 }
1705 1692
1706 /* resource memory */1693 /* resource memory */
1707 ctx->regs_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);1694 ctx->regs_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1708 if (!ctx->regs_res) {
1709 dev_err(dev, "failed to find registers.\n");
1710 ret = -ENOENT;
1711 goto err_clk;
1712 }
1713
1714 ctx->regs = devm_request_and_ioremap(dev, ctx->regs_res);1695 ctx->regs = devm_request_and_ioremap(dev, ctx->regs_res);
1715 if (!ctx->regs) {1696 if (!ctx->regs) {
1716 dev_err(dev, "failed to map registers.\n");1697 dev_err(dev, "failed to map registers.\n");
1717 ret = -ENXIO;1698 return -ENXIO;
1718 goto err_clk;
1719 }1699 }
1720 1700
1721 /* resource irq */1701 /* resource irq */
1722 res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);1702 res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
1723 if (!res) {1703 if (!res) {
1724 dev_err(dev, "failed to request irq resource.\n");1704 dev_err(dev, "failed to request irq resource.\n");
1725 ret = -ENOENT;1705 return -ENOENT;
1726 goto err_get_regs;
1727 }1706 }
1728 1707
1729 ctx->irq = res->start;1708 ctx->irq = res->start;
@@ -1731,7 +1710,7 @@ static int gsc_probe(struct platform_device *pdev) · 1 unmodified line
1731 IRQF_ONESHOT, "drm_gsc", ctx);1710 IRQF_ONESHOT, "drm_gsc", ctx);
1732 if (ret < 0) {1711 if (ret < 0) {
1733 dev_err(dev, "failed to request irq.\n");1712 dev_err(dev, "failed to request irq.\n");
1734 goto err_get_regs;1713 return ret;
1735 }1714 }
1736 1715
1737 /* context initailization */1716 /* context initailization */
@@ -1775,12 +1754,6 @@ err_ippdrv_register: · 37 unmodified lines
1775 pm_runtime_disable(dev);1754 pm_runtime_disable(dev);
1776err_get_irq:1755err_get_irq:
1777 free_irq(ctx->irq, ctx);1756 free_irq(ctx->irq, ctx);
1778err_get_regs:
1779 devm_iounmap(dev, ctx->regs);
1780err_clk:
1781 clk_put(ctx->gsc_clk);
1782err_ctx:
1783 devm_kfree(dev, ctx);
1784 return ret;1757 return ret;
1785}1758}
1786 1759
@@ -1798,11 +1771,6 @@ static int gsc_remove(struct platform_device *pdev) · 11 unmodified lines
1798 pm_runtime_disable(dev);1771 pm_runtime_disable(dev);
1799 1772
1800 free_irq(ctx->irq, ctx);1773 free_irq(ctx->irq, ctx);
1801 devm_iounmap(dev, ctx->regs);
1802
1803 clk_put(ctx->gsc_clk);
1804
1805 devm_kfree(dev, ctx);
1806 1774
1807 return 0;1775 return 0;
1808}1776}
drivers/gpu/drm/exynos/exynos_drm_gsc.h+4−18
@@ -6,24 +6,10 @@ · 5 unmodified lines
6 * Jinyoung Jeon <jy0.jeon@samsung.com>6 * Jinyoung Jeon <jy0.jeon@samsung.com>
7 * Sangmin Lee <lsmin.lee@samsung.com>7 * Sangmin Lee <lsmin.lee@samsung.com>
8 *8 *
9 * Permission is hereby granted, free of charge, to any person obtaining a9 * This program is free software; you can redistribute it and/or modify it
10 * copy of this software and associated documentation files (the "Software"),10 * under the terms of the GNU General Public License as published by the
11 * to deal in the Software without restriction, including without limitation11 * Free Software Foundation; either version 2 of the License, or (at your
12 * the rights to use, copy, modify, merge, publish, distribute, sublicense,12 * option) any later version.
13 * and/or sell copies of the Software, and to permit persons to whom the
14 * Software is furnished to do so, subject to the following conditions:
15 *
16 * The above copyright notice and this permission notice (including the next
17 * paragraph) shall be included in all copies or substantial portions of the
18 * Software.
19 *
20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
23 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
24 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
25 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
26 * OTHER DEALINGS IN THE SOFTWARE.
27 */13 */
28 14
29#ifndef _EXYNOS_DRM_GSC_H_15#ifndef _EXYNOS_DRM_GSC_H_
drivers/gpu/drm/exynos/exynos_drm_hdmi.h+4−18
@@ -3,24 +3,10 @@ · 2 unmodified lines
3 * Copyright (c) 2011 Samsung Electronics Co., Ltd.3 * Copyright (c) 2011 Samsung Electronics Co., Ltd.
4 * Authoer: Inki Dae <inki.dae@samsung.com>4 * Authoer: Inki Dae <inki.dae@samsung.com>
5 *5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a6 * This program is free software; you can redistribute it and/or modify it
7 * copy of this software and associated documentation files (the "Software"),7 * under the terms of the GNU General Public License as published by the
8 * to deal in the Software without restriction, including without limitation8 * Free Software Foundation; either version 2 of the License, or (at your
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,9 * option) any later version.
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice (including the next
14 * paragraph) shall be included in all copies or substantial portions of the
15 * Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23 * OTHER DEALINGS IN THE SOFTWARE.
24 */10 */
25 11
26#ifndef _EXYNOS_DRM_HDMI_H_12#ifndef _EXYNOS_DRM_HDMI_H_
drivers/gpu/drm/exynos/exynos_drm_iommu.c+4−18
@@ -3,24 +3,10 @@ · 2 unmodified lines
3 * Copyright (c) 2012 Samsung Electronics Co., Ltd.3 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 * Author: Inki Dae <inki.dae@samsung.com>4 * Author: Inki Dae <inki.dae@samsung.com>
5 *5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a6 * This program is free software; you can redistribute it and/or modify it
7 * copy of this software and associated documentation files (the "Software"),7 * under the terms of the GNU General Public License as published by the
8 * to deal in the Software without restriction, including without limitation8 * Free Software Foundation; either version 2 of the License, or (at your
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,9 * option) any later version.
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice (including the next
14 * paragraph) shall be included in all copies or substantial portions of the
15 * Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23 * OTHER DEALINGS IN THE SOFTWARE.
24 */10 */
25 11
26#include <drmP.h>12#include <drmP.h>
drivers/gpu/drm/exynos/exynos_drm_iommu.h+4−18
@@ -3,24 +3,10 @@ · 2 unmodified lines
3 * Copyright (c) 2012 Samsung Electronics Co., Ltd.3 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 * Authoer: Inki Dae <inki.dae@samsung.com>4 * Authoer: Inki Dae <inki.dae@samsung.com>
5 *5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a6 * This program is free software; you can redistribute it and/or modify it
7 * copy of this software and associated documentation files (the "Software"),7 * under the terms of the GNU General Public License as published by the
8 * to deal in the Software without restriction, including without limitation8 * Free Software Foundation; either version 2 of the License, or (at your
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,9 * option) any later version.
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice (including the next
14 * paragraph) shall be included in all copies or substantial portions of the
15 * Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23 * OTHER DEALINGS IN THE SOFTWARE.
24 */10 */
25 11
26#ifndef _EXYNOS_DRM_IOMMU_H_12#ifndef _EXYNOS_DRM_IOMMU_H_
drivers/gpu/drm/exynos/exynos_drm_ipp.c+6−16
@@ -27,7 +27,7 @@ · 26 unmodified lines
27#include "exynos_drm_iommu.h"27#include "exynos_drm_iommu.h"
28 28
29/*29/*
30 * IPP is stand for Image Post Processing and30 * IPP stands for Image Post Processing and
31 * supports image scaler/rotator and input/output DMA operations.31 * supports image scaler/rotator and input/output DMA operations.
32 * using FIMC, GSC, Rotator, so on.32 * using FIMC, GSC, Rotator, so on.
33 * IPP is integration device driver of same attribute h/w33 * IPP is integration device driver of same attribute h/w
@@ -1292,7 +1292,7 @@ static int ipp_start_property(struct exynos_drm_ippdrv *ippdrv, · 1258 unmodified lines
1292 DRM_DEBUG_KMS("%s:prop_id[%d]\n", __func__, property->prop_id);1292 DRM_DEBUG_KMS("%s:prop_id[%d]\n", __func__, property->prop_id);
1293 1293
1294 /* store command info in ippdrv */1294 /* store command info in ippdrv */
1295 ippdrv->cmd = c_node;1295 ippdrv->c_node = c_node;
1296 1296
1297 if (!ipp_check_mem_list(c_node)) {1297 if (!ipp_check_mem_list(c_node)) {
1298 DRM_DEBUG_KMS("%s:empty memory.\n", __func__);1298 DRM_DEBUG_KMS("%s:empty memory.\n", __func__);
@@ -1303,7 +1303,7 @@ static int ipp_start_property(struct exynos_drm_ippdrv *ippdrv, · 4 unmodified lines
1303 ret = ipp_set_property(ippdrv, property);1303 ret = ipp_set_property(ippdrv, property);
1304 if (ret) {1304 if (ret) {
1305 DRM_ERROR("failed to set property.\n");1305 DRM_ERROR("failed to set property.\n");
1306 ippdrv->cmd = NULL;1306 ippdrv->c_node = NULL;
1307 return ret;1307 return ret;
1308 }1308 }
1309 1309
@@ -1487,11 +1487,6 @@ void ipp_sched_cmd(struct work_struct *work) · 177 unmodified lines
1487 mutex_lock(&c_node->cmd_lock);1487 mutex_lock(&c_node->cmd_lock);
1488 1488
1489 property = &c_node->property;1489 property = &c_node->property;
1490 if (!property) {
1491 DRM_ERROR("failed to get property:prop_id[%d]\n",
1492 c_node->property.prop_id);
1493 goto err_unlock;
1494 }
1495 1490
1496 switch (cmd_work->ctrl) {1491 switch (cmd_work->ctrl) {
1497 case IPP_CTRL_PLAY:1492 case IPP_CTRL_PLAY:
@@ -1704,7 +1699,7 @@ void ipp_sched_event(struct work_struct *work) · 206 unmodified lines
1704 return;1699 return;
1705 }1700 }
1706 1701
1707 c_node = ippdrv->cmd;1702 c_node = ippdrv->c_node;
1708 if (!c_node) {1703 if (!c_node) {
1709 DRM_ERROR("failed to get command node.\n");1704 DRM_ERROR("failed to get command node.\n");
1710 return;1705 return;
@@ -1895,7 +1890,7 @@ static int ipp_probe(struct platform_device *pdev) · 184 unmodified lines
1895 struct exynos_drm_subdrv *subdrv;1890 struct exynos_drm_subdrv *subdrv;
1896 int ret;1891 int ret;
1897 1892
1898 ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);1893 ctx = devm_kzalloc(&pdev->dev, sizeof(*ctx), GFP_KERNEL);
1899 if (!ctx)1894 if (!ctx)
1900 return -ENOMEM;1895 return -ENOMEM;
1901 1896
@@ -1916,8 +1911,7 @@ static int ipp_probe(struct platform_device *pdev) · 14 unmodified lines
1916 ctx->event_workq = create_singlethread_workqueue("ipp_event");1911 ctx->event_workq = create_singlethread_workqueue("ipp_event");
1917 if (!ctx->event_workq) {1912 if (!ctx->event_workq) {
1918 dev_err(dev, "failed to create event workqueue\n");1913 dev_err(dev, "failed to create event workqueue\n");
1919 ret = -EINVAL;1914 return -EINVAL;
1920 goto err_clear;
1921 }1915 }
1922 1916
1923 /*1917 /*
@@ -1958,8 +1952,6 @@ err_cmd_workq: · 34 unmodified lines
1958 destroy_workqueue(ctx->cmd_workq);1952 destroy_workqueue(ctx->cmd_workq);
1959err_event_workq:1953err_event_workq:
1960 destroy_workqueue(ctx->event_workq);1954 destroy_workqueue(ctx->event_workq);
1961err_clear:
1962 kfree(ctx);
1963 return ret;1955 return ret;
1964}1956}
1965 1957
@@ -1985,8 +1977,6 @@ static int ipp_remove(struct platform_device *pdev) · 19 unmodified lines
1985 destroy_workqueue(ctx->cmd_workq);1977 destroy_workqueue(ctx->cmd_workq);
1986 destroy_workqueue(ctx->event_workq);1978 destroy_workqueue(ctx->event_workq);
1987 1979
1988 kfree(ctx);
1989
1990 return 0;1980 return 0;
1991}1981}
1992 1982
drivers/gpu/drm/exynos/exynos_drm_ipp.h+6−20
@@ -6,24 +6,10 @@ · 5 unmodified lines
6 * Jinyoung Jeon <jy0.jeon@samsung.com>6 * Jinyoung Jeon <jy0.jeon@samsung.com>
7 * Sangmin Lee <lsmin.lee@samsung.com>7 * Sangmin Lee <lsmin.lee@samsung.com>
8 *8 *
9 * Permission is hereby granted, free of charge, to any person obtaining a9 * This program is free software; you can redistribute it and/or modify it
10 * copy of this software and associated documentation files (the "Software"),10 * under the terms of the GNU General Public License as published by the
11 * to deal in the Software without restriction, including without limitation11 * Free Software Foundation; either version 2 of the License, or (at your
12 * the rights to use, copy, modify, merge, publish, distribute, sublicense,12 * option) any later version.
13 * and/or sell copies of the Software, and to permit persons to whom the
14 * Software is furnished to do so, subject to the following conditions:
15 *
16 * The above copyright notice and this permission notice (including the next
17 * paragraph) shall be included in all copies or substantial portions of the
18 * Software.
19 *
20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
23 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
24 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
25 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
26 * OTHER DEALINGS IN THE SOFTWARE.
27 */13 */
28 14
29#ifndef _EXYNOS_DRM_IPP_H_15#ifndef _EXYNOS_DRM_IPP_H_
@@ -160,7 +146,7 @@ struct exynos_drm_ipp_ops { · 130 unmodified lines
160 * @dedicated: dedicated ipp device.146 * @dedicated: dedicated ipp device.
161 * @ops: source, destination operations.147 * @ops: source, destination operations.
162 * @event_workq: event work queue.148 * @event_workq: event work queue.
163 * @cmd: current command information.149 * @c_node: current command information.
164 * @cmd_list: list head for command information.150 * @cmd_list: list head for command information.
165 * @prop_list: property informations of current ipp driver.151 * @prop_list: property informations of current ipp driver.
166 * @check_property: check property about format, size, buffer.152 * @check_property: check property about format, size, buffer.
@@ -178,7 +164,7 @@ struct exynos_drm_ippdrv { · 11 unmodified lines
178 bool dedicated;164 bool dedicated;
179 struct exynos_drm_ipp_ops *ops[EXYNOS_DRM_OPS_MAX];165 struct exynos_drm_ipp_ops *ops[EXYNOS_DRM_OPS_MAX];
180 struct workqueue_struct *event_workq;166 struct workqueue_struct *event_workq;
181 struct drm_exynos_ipp_cmd_node *cmd;167 struct drm_exynos_ipp_cmd_node *c_node;
182 struct list_head cmd_list;168 struct list_head cmd_list;
183 struct drm_exynos_ipp_prop_list *prop_list;169 struct drm_exynos_ipp_prop_list *prop_list;
184 170
drivers/gpu/drm/exynos/exynos_drm_rotator.c+6−22
@@ -139,7 +139,7 @@ static irqreturn_t rotator_irq_handler(int irq, void *arg) · 138 unmodified lines
139{139{
140 struct rot_context *rot = arg;140 struct rot_context *rot = arg;
141 struct exynos_drm_ippdrv *ippdrv = &rot->ippdrv;141 struct exynos_drm_ippdrv *ippdrv = &rot->ippdrv;
142 struct drm_exynos_ipp_cmd_node *c_node = ippdrv->cmd;142 struct drm_exynos_ipp_cmd_node *c_node = ippdrv->c_node;
143 struct drm_exynos_ipp_event_work *event_work = c_node->event_work;143 struct drm_exynos_ipp_event_work *event_work = c_node->event_work;
144 enum rot_irq_status irq_status;144 enum rot_irq_status irq_status;
145 u32 val;145 u32 val;
@@ -513,6 +513,7 @@ static inline bool rotator_check_drm_flip(enum drm_exynos_flip flip) · 367 unmodified lines
513 case EXYNOS_DRM_FLIP_NONE:513 case EXYNOS_DRM_FLIP_NONE:
514 case EXYNOS_DRM_FLIP_VERTICAL:514 case EXYNOS_DRM_FLIP_VERTICAL:
515 case EXYNOS_DRM_FLIP_HORIZONTAL:515 case EXYNOS_DRM_FLIP_HORIZONTAL:
516 case EXYNOS_DRM_FLIP_BOTH:
516 return true;517 return true;
517 default:518 default:
518 DRM_DEBUG_KMS("%s:invalid flip\n", __func__);519 DRM_DEBUG_KMS("%s:invalid flip\n", __func__);
@@ -655,34 +656,26 @@ static int rotator_probe(struct platform_device *pdev) · 136 unmodified lines
655 platform_get_device_id(pdev)->driver_data;656 platform_get_device_id(pdev)->driver_data;
656 657
657 rot->regs_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);658 rot->regs_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
658 if (!rot->regs_res) {
659 dev_err(dev, "failed to find registers\n");
660 ret = -ENOENT;
661 goto err_get_resource;
662 }
663
664 rot->regs = devm_request_and_ioremap(dev, rot->regs_res);659 rot->regs = devm_request_and_ioremap(dev, rot->regs_res);
665 if (!rot->regs) {660 if (!rot->regs) {
666 dev_err(dev, "failed to map register\n");661 dev_err(dev, "failed to map register\n");
667 ret = -ENXIO;662 return -ENXIO;
668 goto err_get_resource;
669 }663 }
670 664
671 rot->irq = platform_get_irq(pdev, 0);665 rot->irq = platform_get_irq(pdev, 0);
672 if (rot->irq < 0) {666 if (rot->irq < 0) {
673 dev_err(dev, "failed to get irq\n");667 dev_err(dev, "failed to get irq\n");
674 ret = rot->irq;668 return rot->irq;
675 goto err_get_irq;
676 }669 }
677 670
678 ret = request_threaded_irq(rot->irq, NULL, rotator_irq_handler,671 ret = request_threaded_irq(rot->irq, NULL, rotator_irq_handler,
679 IRQF_ONESHOT, "drm_rotator", rot);672 IRQF_ONESHOT, "drm_rotator", rot);
680 if (ret < 0) {673 if (ret < 0) {
681 dev_err(dev, "failed to request irq\n");674 dev_err(dev, "failed to request irq\n");
682 goto err_get_irq;675 return ret;
683 }676 }
684 677
685 rot->clock = clk_get(dev, "rotator");678 rot->clock = devm_clk_get(dev, "rotator");
686 if (IS_ERR_OR_NULL(rot->clock)) {679 if (IS_ERR_OR_NULL(rot->clock)) {
687 dev_err(dev, "failed to get clock\n");680 dev_err(dev, "failed to get clock\n");
688 ret = PTR_ERR(rot->clock);681 ret = PTR_ERR(rot->clock);
@@ -720,13 +713,8 @@ static int rotator_probe(struct platform_device *pdev) · 31 unmodified lines
720err_ippdrv_register:713err_ippdrv_register:
721 devm_kfree(dev, ippdrv->prop_list);714 devm_kfree(dev, ippdrv->prop_list);
722 pm_runtime_disable(dev);715 pm_runtime_disable(dev);
723 clk_put(rot->clock);
724err_clk_get:716err_clk_get:
725 free_irq(rot->irq, rot);717 free_irq(rot->irq, rot);
726err_get_irq:
727 devm_iounmap(dev, rot->regs);
728err_get_resource:
729 devm_kfree(dev, rot);
730 return ret;718 return ret;
731}719}
732 720
@@ -740,12 +728,8 @@ static int rotator_remove(struct platform_device *pdev) · 7 unmodified lines
740 exynos_drm_ippdrv_unregister(ippdrv);728 exynos_drm_ippdrv_unregister(ippdrv);
741 729
742 pm_runtime_disable(dev);730 pm_runtime_disable(dev);
743 clk_put(rot->clock);
744 731
745 free_irq(rot->irq, rot);732 free_irq(rot->irq, rot);
746 devm_iounmap(dev, rot->regs);
747
748 devm_kfree(dev, rot);
749 733
750 return 0;734 return 0;
751}735}
drivers/gpu/drm/exynos/exynos_drm_rotator.h+4−18
@@ -5,24 +5,10 @@ · 4 unmodified lines
5 * YoungJun Cho <yj44.cho@samsung.com>5 * YoungJun Cho <yj44.cho@samsung.com>
6 * Eunchul Kim <chulspro.kim@samsung.com>6 * Eunchul Kim <chulspro.kim@samsung.com>
7 *7 *
8 * Permission is hereby granted, free of charge, to any person obtaining a8 * This program is free software; you can redistribute it and/or modify it
9 * copy of this software and associated documentation files (the "Software"),9 * under the terms of the GNU General Public License as published by the
10 * to deal in the Software without restriction, including without limitation10 * Free Software Foundation; either version 2 of the License, or (at your
11 * the rights to use, copy, modify, merge, publish, distribute, sublicense,11 * option) any later version.
12 * and/or sell copies of the Software, and to permit persons to whom the
13 * Software is furnished to do so, subject to the following conditions:
14 *
15 * The above copyright notice and this permission notice (including the next
16 * paragraph) shall be included in all copies or substantial portions of the
17 * Software.
18 *
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
22 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
23 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
24 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
25 * OTHER DEALINGS IN THE SOFTWARE.
26 */12 */
27 13
28#ifndef _EXYNOS_DRM_ROTATOR_H_14#ifndef _EXYNOS_DRM_ROTATOR_H_
drivers/gpu/drm/exynos/exynos_drm_vidi.c+1−29
@@ -372,34 +372,6 @@ static struct exynos_drm_manager vidi_manager = { · 371 unmodified lines
372 .display_ops = &vidi_display_ops,372 .display_ops = &vidi_display_ops,
373};373};
374 374
375static void vidi_finish_pageflip(struct drm_device *drm_dev, int crtc)
376{
377 struct exynos_drm_private *dev_priv = drm_dev->dev_private;
378 struct drm_pending_vblank_event *e, *t;
379 struct timeval now;
380 unsigned long flags;
381
382 spin_lock_irqsave(&drm_dev->event_lock, flags);
383
384 list_for_each_entry_safe(e, t, &dev_priv->pageflip_event_list,
385 base.link) {
386 /* if event's pipe isn't same as crtc then ignore it. */
387 if (crtc != e->pipe)
388 continue;
389
390 do_gettimeofday(&now);
391 e->event.sequence = 0;
392 e->event.tv_sec = now.tv_sec;
393 e->event.tv_usec = now.tv_usec;
394
395 list_move_tail(&e->base.link, &e->base.file_priv->event_list);
396 wake_up_interruptible(&e->base.file_priv->event_wait);
397 drm_vblank_put(drm_dev, crtc);
398 }
399
400 spin_unlock_irqrestore(&drm_dev->event_lock, flags);
401}
402
403static void vidi_fake_vblank_handler(struct work_struct *work)375static void vidi_fake_vblank_handler(struct work_struct *work)
404{376{
405 struct vidi_context *ctx = container_of(work, struct vidi_context,377 struct vidi_context *ctx = container_of(work, struct vidi_context,
@@ -424,7 +396,7 @@ static void vidi_fake_vblank_handler(struct work_struct *work) · 18 unmodified lines
424 396
425 mutex_unlock(&ctx->lock);397 mutex_unlock(&ctx->lock);
426 398
427 vidi_finish_pageflip(subdrv->drm_dev, manager->pipe);399 exynos_drm_crtc_finish_pageflip(subdrv->drm_dev, manager->pipe);
428}400}
429 401
430static int vidi_subdrv_probe(struct drm_device *drm_dev, struct device *dev)402static int vidi_subdrv_probe(struct drm_device *drm_dev, struct device *dev)
drivers/gpu/drm/exynos/exynos_drm_vidi.h+4−18
@@ -3,24 +3,10 @@ · 2 unmodified lines
3 * Copyright (c) 2012 Samsung Electronics Co., Ltd.3 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 * Author: Inki Dae <inki.dae@samsung.com>4 * Author: Inki Dae <inki.dae@samsung.com>
5 *5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a6 * This program is free software; you can redistribute it and/or modify it
7 * copy of this software and associated documentation files (the "Software"),7 * under the terms of the GNU General Public License as published by the
8 * to deal in the Software without restriction, including without limitation8 * Free Software Foundation; either version 2 of the License, or (at your
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,9 * option) any later version.
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice (including the next
14 * paragraph) shall be included in all copies or substantial portions of the
15 * Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23 * OTHER DEALINGS IN THE SOFTWARE.
24 */10 */
25 11
26#ifndef _EXYNOS_DRM_VIDI_H_12#ifndef _EXYNOS_DRM_VIDI_H_
drivers/gpu/drm/exynos/exynos_hdmi.h+4−18
@@ -5,24 +5,10 @@ · 4 unmodified lines
5 * Inki Dae <inki.dae@samsung.com>5 * Inki Dae <inki.dae@samsung.com>
6 * Seung-Woo Kim <sw0312.kim@samsung.com>6 * Seung-Woo Kim <sw0312.kim@samsung.com>
7 *7 *
8 * Permission is hereby granted, free of charge, to any person obtaining a8 * This program is free software; you can redistribute it and/or modify it
9 * copy of this software and associated documentation files (the "Software"),9 * under the terms of the GNU General Public License as published by the
10 * to deal in the Software without restriction, including without limitation10 * Free Software Foundation; either version 2 of the License, or (at your
11 * the rights to use, copy, modify, merge, publish, distribute, sublicense,11 * option) any later version.
12 * and/or sell copies of the Software, and to permit persons to whom the
13 * Software is furnished to do so, subject to the following conditions:
14 *
15 * The above copyright notice and this permission notice (including the next
16 * paragraph) shall be included in all copies or substantial portions of the
17 * Software.
18 *
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
22 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
23 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
24 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
25 * OTHER DEALINGS IN THE SOFTWARE.
26 */12 */
27 13
28#ifndef _EXYNOS_HDMI_H_14#ifndef _EXYNOS_HDMI_H_
drivers/gpu/drm/exynos/exynos_mixer.c+3−30
@@ -35,6 +35,7 @@ · 34 unmodified lines
35#include <drm/exynos_drm.h>35#include <drm/exynos_drm.h>
36 36
37#include "exynos_drm_drv.h"37#include "exynos_drm_drv.h"
38#include "exynos_drm_crtc.h"
38#include "exynos_drm_hdmi.h"39#include "exynos_drm_hdmi.h"
39#include "exynos_drm_iommu.h"40#include "exynos_drm_iommu.h"
40 41
@@ -949,35 +950,6 @@ static struct exynos_mixer_ops mixer_ops = { · 908 unmodified lines
949 .win_disable = mixer_win_disable,950 .win_disable = mixer_win_disable,
950};951};
951 952
952/* for pageflip event */
953static void mixer_finish_pageflip(struct drm_device *drm_dev, int crtc)
954{
955 struct exynos_drm_private *dev_priv = drm_dev->dev_private;
956 struct drm_pending_vblank_event *e, *t;
957 struct timeval now;
958 unsigned long flags;
959
960 spin_lock_irqsave(&drm_dev->event_lock, flags);
961
962 list_for_each_entry_safe(e, t, &dev_priv->pageflip_event_list,
963 base.link) {
964 /* if event's pipe isn't same as crtc then ignore it. */
965 if (crtc != e->pipe)
966 continue;
967
968 do_gettimeofday(&now);
969 e->event.sequence = 0;
970 e->event.tv_sec = now.tv_sec;
971 e->event.tv_usec = now.tv_usec;
972
973 list_move_tail(&e->base.link, &e->base.file_priv->event_list);
974 wake_up_interruptible(&e->base.file_priv->event_wait);
975 drm_vblank_put(drm_dev, crtc);
976 }
977
978 spin_unlock_irqrestore(&drm_dev->event_lock, flags);
979}
980
981static irqreturn_t mixer_irq_handler(int irq, void *arg)953static irqreturn_t mixer_irq_handler(int irq, void *arg)
982{954{
983 struct exynos_drm_hdmi_context *drm_hdmi_ctx = arg;955 struct exynos_drm_hdmi_context *drm_hdmi_ctx = arg;
@@ -1006,7 +978,8 @@ static irqreturn_t mixer_irq_handler(int irq, void *arg) · 22 unmodified lines
1006 }978 }
1007 979
1008 drm_handle_vblank(drm_hdmi_ctx->drm_dev, ctx->pipe);980 drm_handle_vblank(drm_hdmi_ctx->drm_dev, ctx->pipe);
1009 mixer_finish_pageflip(drm_hdmi_ctx->drm_dev, ctx->pipe);981 exynos_drm_crtc_finish_pageflip(drm_hdmi_ctx->drm_dev,
982 ctx->pipe);
1010 983
1011 /* set wait vsync event to zero and wake up queue. */984 /* set wait vsync event to zero and wake up queue. */
1012 if (atomic_read(&ctx->wait_vsync_event)) {985 if (atomic_read(&ctx->wait_vsync_event)) {
drivers/gpu/drm/i915/i915_gem_dmabuf.c+5−0
@@ -266,7 +266,12 @@ struct drm_gem_object *i915_gem_prime_import(struct drm_device *dev, · 265 unmodified lines
266 obj = dma_buf->priv;266 obj = dma_buf->priv;
267 /* is it from our device? */267 /* is it from our device? */
268 if (obj->base.dev == dev) {268 if (obj->base.dev == dev) {
269 /*
270 * Importing dmabuf exported from out own gem increases
271 * refcount on gem itself instead of f_count of dmabuf.
272 */
269 drm_gem_object_reference(&obj->base);273 drm_gem_object_reference(&obj->base);
274 dma_buf_put(dma_buf);
270 return &obj->base;275 return &obj->base;
271 }276 }
272 }277 }
drivers/gpu/drm/nouveau/nouveau_prime.c+1−0
@@ -193,6 +193,7 @@ struct drm_gem_object *nouveau_gem_prime_import(struct drm_device *dev, · 192 unmodified lines
193 if (nvbo->gem) {193 if (nvbo->gem) {
194 if (nvbo->gem->dev == dev) {194 if (nvbo->gem->dev == dev) {
195 drm_gem_object_reference(nvbo->gem);195 drm_gem_object_reference(nvbo->gem);
196 dma_buf_put(dma_buf);
196 return nvbo->gem;197 return nvbo->gem;
197 }198 }
198 }199 }
drivers/gpu/drm/radeon/r600.c+5−5
@@ -2646,7 +2646,7 @@ int r600_copy_blit(struct radeon_device *rdev, · 2645 unmodified lines
2646 * @num_gpu_pages: number of GPU pages to xfer2646 * @num_gpu_pages: number of GPU pages to xfer
2647 * @fence: radeon fence object2647 * @fence: radeon fence object
2648 *2648 *
2649 * Copy GPU paging using the DMA engine (r6xx-r7xx).2649 * Copy GPU paging using the DMA engine (r6xx).
2650 * Used by the radeon ttm implementation to move pages if2650 * Used by the radeon ttm implementation to move pages if
2651 * registered as the asic copy callback.2651 * registered as the asic copy callback.
2652 */2652 */
@@ -2669,8 +2669,8 @@ int r600_copy_dma(struct radeon_device *rdev, · 16 unmodified lines
2669 }2669 }
2670 2670
2671 size_in_dw = (num_gpu_pages << RADEON_GPU_PAGE_SHIFT) / 4;2671 size_in_dw = (num_gpu_pages << RADEON_GPU_PAGE_SHIFT) / 4;
2672 num_loops = DIV_ROUND_UP(size_in_dw, 0xffff);2672 num_loops = DIV_ROUND_UP(size_in_dw, 0xFFFE);
2673 r = radeon_ring_lock(rdev, ring, num_loops * 5 + 8);2673 r = radeon_ring_lock(rdev, ring, num_loops * 4 + 8);
2674 if (r) {2674 if (r) {
2675 DRM_ERROR("radeon: moving bo (%d).\n", r);2675 DRM_ERROR("radeon: moving bo (%d).\n", r);
2676 radeon_semaphore_free(rdev, &sem, NULL);2676 radeon_semaphore_free(rdev, &sem, NULL);
@@ -2693,8 +2693,8 @@ int r600_copy_dma(struct radeon_device *rdev, · 16 unmodified lines
2693 radeon_ring_write(ring, DMA_PACKET(DMA_PACKET_COPY, 0, 0, cur_size_in_dw));2693 radeon_ring_write(ring, DMA_PACKET(DMA_PACKET_COPY, 0, 0, cur_size_in_dw));
2694 radeon_ring_write(ring, dst_offset & 0xfffffffc);2694 radeon_ring_write(ring, dst_offset & 0xfffffffc);
2695 radeon_ring_write(ring, src_offset & 0xfffffffc);2695 radeon_ring_write(ring, src_offset & 0xfffffffc);
2696 radeon_ring_write(ring, upper_32_bits(dst_offset) & 0xff);2696 radeon_ring_write(ring, (((upper_32_bits(dst_offset) & 0xff) << 16) |
2697 radeon_ring_write(ring, upper_32_bits(src_offset) & 0xff);2697 (upper_32_bits(src_offset) & 0xff)));
2698 src_offset += cur_size_in_dw * 4;2698 src_offset += cur_size_in_dw * 4;
2699 dst_offset += cur_size_in_dw * 4;2699 dst_offset += cur_size_in_dw * 4;
2700 }2700 }
drivers/gpu/drm/radeon/r600_cs.c+22−9
@@ -2677,16 +2677,29 @@ int r600_dma_cs_parse(struct radeon_cs_parser *p) · 2676 unmodified lines
2677 }2677 }
2678 p->idx += 7;2678 p->idx += 7;
2679 } else {2679 } else {
2680 src_offset = ib[idx+2];2680 if (p->family >= CHIP_RV770) {
2681 src_offset |= ((u64)(ib[idx+4] & 0xff)) << 32;2681 src_offset = ib[idx+2];
2682 dst_offset = ib[idx+1];2682 src_offset |= ((u64)(ib[idx+4] & 0xff)) << 32;
2683 dst_offset |= ((u64)(ib[idx+3] & 0xff)) << 32;2683 dst_offset = ib[idx+1];
2684 dst_offset |= ((u64)(ib[idx+3] & 0xff)) << 32;
2684 2685
2685 ib[idx+1] += (u32)(dst_reloc->lobj.gpu_offset & 0xfffffffc);2686 ib[idx+1] += (u32)(dst_reloc->lobj.gpu_offset & 0xfffffffc);
2686 ib[idx+2] += (u32)(src_reloc->lobj.gpu_offset & 0xfffffffc);2687 ib[idx+2] += (u32)(src_reloc->lobj.gpu_offset & 0xfffffffc);
2687 ib[idx+3] += upper_32_bits(dst_reloc->lobj.gpu_offset) & 0xff;2688 ib[idx+3] += upper_32_bits(dst_reloc->lobj.gpu_offset) & 0xff;
2688 ib[idx+4] += upper_32_bits(src_reloc->lobj.gpu_offset) & 0xff;2689 ib[idx+4] += upper_32_bits(src_reloc->lobj.gpu_offset) & 0xff;
2689 p->idx += 5;2690 p->idx += 5;
2691 } else {
2692 src_offset = ib[idx+2];
2693 src_offset |= ((u64)(ib[idx+3] & 0xff)) << 32;
2694 dst_offset = ib[idx+1];
2695 dst_offset |= ((u64)(ib[idx+3] & 0xff0000)) << 16;
2696
2697 ib[idx+1] += (u32)(dst_reloc->lobj.gpu_offset & 0xfffffffc);
2698 ib[idx+2] += (u32)(src_reloc->lobj.gpu_offset & 0xfffffffc);
2699 ib[idx+3] += upper_32_bits(src_reloc->lobj.gpu_offset) & 0xff;
2700 ib[idx+3] += (upper_32_bits(dst_reloc->lobj.gpu_offset) & 0xff) << 16;
2701 p->idx += 4;
2702 }
2690 }2703 }
2691 if ((src_offset + (count * 4)) > radeon_bo_size(src_reloc->robj)) {2704 if ((src_offset + (count * 4)) > radeon_bo_size(src_reloc->robj)) {
2692 dev_warn(p->dev, "DMA copy src buffer too small (%llu %lu)\n",2705 dev_warn(p->dev, "DMA copy src buffer too small (%llu %lu)\n",
drivers/gpu/drm/radeon/radeon_asic.c+2−2
@@ -1140,9 +1140,9 @@ static struct radeon_asic rv770_asic = { · 1139 unmodified lines
1140 .copy = {1140 .copy = {
1141 .blit = &r600_copy_blit,1141 .blit = &r600_copy_blit,
1142 .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX,1142 .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX,
1143 .dma = &r600_copy_dma,1143 .dma = &rv770_copy_dma,
1144 .dma_ring_index = R600_RING_TYPE_DMA_INDEX,1144 .dma_ring_index = R600_RING_TYPE_DMA_INDEX,
1145 .copy = &r600_copy_dma,1145 .copy = &rv770_copy_dma,
1146 .copy_ring_index = R600_RING_TYPE_DMA_INDEX,1146 .copy_ring_index = R600_RING_TYPE_DMA_INDEX,
1147 },1147 },
1148 .surface = {1148 .surface = {
drivers/gpu/drm/radeon/radeon_asic.h+4−0
@@ -403,6 +403,10 @@ u32 rv770_page_flip(struct radeon_device *rdev, int crtc, u64 crtc_base); · 402 unmodified lines
403void r700_vram_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc);403void r700_vram_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc);
404void r700_cp_stop(struct radeon_device *rdev);404void r700_cp_stop(struct radeon_device *rdev);
405void r700_cp_fini(struct radeon_device *rdev);405void r700_cp_fini(struct radeon_device *rdev);
406int rv770_copy_dma(struct radeon_device *rdev,
407 uint64_t src_offset, uint64_t dst_offset,
408 unsigned num_gpu_pages,
409 struct radeon_fence **fence);
406 410
407/*411/*
408 * evergreen412 * evergreen
drivers/gpu/drm/radeon/radeon_device.c+28−0
@@ -896,6 +896,25 @@ static void radeon_check_arguments(struct radeon_device *rdev) · 895 unmodified lines
896 }896 }
897}897}
898 898
899/**
900 * radeon_switcheroo_quirk_long_wakeup - return true if longer d3 delay is
901 * needed for waking up.
902 *
903 * @pdev: pci dev pointer
904 */
905static bool radeon_switcheroo_quirk_long_wakeup(struct pci_dev *pdev)
906{
907
908 /* 6600m in a macbook pro */
909 if (pdev->subsystem_vendor == PCI_VENDOR_ID_APPLE &&
910 pdev->subsystem_device == 0x00e2) {
911 printk(KERN_INFO "radeon: quirking longer d3 wakeup delay\n");
912 return true;
913 }
914
915 return false;
916}
917
899/**918/**
900 * radeon_switcheroo_set_state - set switcheroo state919 * radeon_switcheroo_set_state - set switcheroo state
901 *920 *
@@ -910,10 +929,19 @@ static void radeon_switcheroo_set_state(struct pci_dev *pdev, enum vga_switchero · 8 unmodified lines
910 struct drm_device *dev = pci_get_drvdata(pdev);929 struct drm_device *dev = pci_get_drvdata(pdev);
911 pm_message_t pmm = { .event = PM_EVENT_SUSPEND };930 pm_message_t pmm = { .event = PM_EVENT_SUSPEND };
912 if (state == VGA_SWITCHEROO_ON) {931 if (state == VGA_SWITCHEROO_ON) {
932 unsigned d3_delay = dev->pdev->d3_delay;
933
913 printk(KERN_INFO "radeon: switched on\n");934 printk(KERN_INFO "radeon: switched on\n");
914 /* don't suspend or resume card normally */935 /* don't suspend or resume card normally */
915 dev->switch_power_state = DRM_SWITCH_POWER_CHANGING;936 dev->switch_power_state = DRM_SWITCH_POWER_CHANGING;
937
938 if (d3_delay < 20 && radeon_switcheroo_quirk_long_wakeup(pdev))
939 dev->pdev->d3_delay = 20;
940
916 radeon_resume_kms(dev);941 radeon_resume_kms(dev);
942
943 dev->pdev->d3_delay = d3_delay;
944
917 dev->switch_power_state = DRM_SWITCH_POWER_ON;945 dev->switch_power_state = DRM_SWITCH_POWER_ON;
918 drm_kms_helper_poll_enable(dev);946 drm_kms_helper_poll_enable(dev);
919 } else {947 } else {
drivers/gpu/drm/radeon/radeon_prime.c+1−0
@@ -194,6 +194,7 @@ struct drm_gem_object *radeon_gem_prime_import(struct drm_device *dev, · 193 unmodified lines
194 bo = dma_buf->priv;194 bo = dma_buf->priv;
195 if (bo->gem_base.dev == dev) {195 if (bo->gem_base.dev == dev) {
196 drm_gem_object_reference(&bo->gem_base);196 drm_gem_object_reference(&bo->gem_base);
197 dma_buf_put(dma_buf);
197 return &bo->gem_base;198 return &bo->gem_base;
198 }199 }
199 }200 }
drivers/gpu/drm/radeon/rv770.c+74−0
@@ -887,6 +887,80 @@ static int rv770_mc_init(struct radeon_device *rdev) · 886 unmodified lines
887 return 0;887 return 0;
888}888}
889 889
890/**
891 * rv770_copy_dma - copy pages using the DMA engine
892 *
893 * @rdev: radeon_device pointer
894 * @src_offset: src GPU address
895 * @dst_offset: dst GPU address
896 * @num_gpu_pages: number of GPU pages to xfer
897 * @fence: radeon fence object
898 *
899 * Copy GPU paging using the DMA engine (r7xx).
900 * Used by the radeon ttm implementation to move pages if
901 * registered as the asic copy callback.
902 */
903int rv770_copy_dma(struct radeon_device *rdev,
904 uint64_t src_offset, uint64_t dst_offset,
905 unsigned num_gpu_pages,
906 struct radeon_fence **fence)
907{
908 struct radeon_semaphore *sem = NULL;
909 int ring_index = rdev->asic->copy.dma_ring_index;
910 struct radeon_ring *ring = &rdev->ring[ring_index];
911 u32 size_in_dw, cur_size_in_dw;
912 int i, num_loops;
913 int r = 0;
914
915 r = radeon_semaphore_create(rdev, &sem);
916 if (r) {
917 DRM_ERROR("radeon: moving bo (%d).\n", r);
918 return r;
919 }
920
921 size_in_dw = (num_gpu_pages << RADEON_GPU_PAGE_SHIFT) / 4;
922 num_loops = DIV_ROUND_UP(size_in_dw, 0xFFFF);
923 r = radeon_ring_lock(rdev, ring, num_loops * 5 + 8);
924 if (r) {
925 DRM_ERROR("radeon: moving bo (%d).\n", r);
926 radeon_semaphore_free(rdev, &sem, NULL);
927 return r;
928 }
929
930 if (radeon_fence_need_sync(*fence, ring->idx)) {
931 radeon_semaphore_sync_rings(rdev, sem, (*fence)->ring,
932 ring->idx);
933 radeon_fence_note_sync(*fence, ring->idx);
934 } else {
935 radeon_semaphore_free(rdev, &sem, NULL);
936 }
937
938 for (i = 0; i < num_loops; i++) {
939 cur_size_in_dw = size_in_dw;
940 if (cur_size_in_dw > 0xFFFF)
941 cur_size_in_dw = 0xFFFF;
942 size_in_dw -= cur_size_in_dw;
943 radeon_ring_write(ring, DMA_PACKET(DMA_PACKET_COPY, 0, 0, cur_size_in_dw));
944 radeon_ring_write(ring, dst_offset & 0xfffffffc);
945 radeon_ring_write(ring, src_offset & 0xfffffffc);
946 radeon_ring_write(ring, upper_32_bits(dst_offset) & 0xff);
947 radeon_ring_write(ring, upper_32_bits(src_offset) & 0xff);
948 src_offset += cur_size_in_dw * 4;
949 dst_offset += cur_size_in_dw * 4;
950 }
951
952 r = radeon_fence_emit(rdev, fence, ring->idx);
953 if (r) {
954 radeon_ring_unlock_undo(rdev, ring);
955 return r;
956 }
957
958 radeon_ring_unlock_commit(rdev, ring);
959 radeon_semaphore_free(rdev, &sem, *fence);
960
961 return r;
962}
963
890static int rv770_startup(struct radeon_device *rdev)964static int rv770_startup(struct radeon_device *rdev)
891{965{
892 struct radeon_ring *ring;966 struct radeon_ring *ring;
drivers/gpu/drm/ttm/ttm_bo_util.c+3−1
@@ -654,11 +654,13 @@ int ttm_bo_move_accel_cleanup(struct ttm_buffer_object *bo, · 653 unmodified lines
654 */654 */
655 655
656 set_bit(TTM_BO_PRIV_FLAG_MOVING, &bo->priv_flags);656 set_bit(TTM_BO_PRIV_FLAG_MOVING, &bo->priv_flags);
657
658 /* ttm_buffer_object_transfer accesses bo->sync_obj */
659 ret = ttm_buffer_object_transfer(bo, &ghost_obj);
657 spin_unlock(&bdev->fence_lock);660 spin_unlock(&bdev->fence_lock);
658 if (tmp_obj)661 if (tmp_obj)
659 driver->sync_obj_unref(&tmp_obj);662 driver->sync_obj_unref(&tmp_obj);
660 663
661 ret = ttm_buffer_object_transfer(bo, &ghost_obj);
662 if (ret)664 if (ret)
663 return ret;665 return ret;
664 666
drivers/staging/omapdrm/omap_gem_dmabuf.c+5−0
@@ -207,7 +207,12 @@ struct drm_gem_object *omap_gem_prime_import(struct drm_device *dev, · 206 unmodified lines
207 obj = buffer->priv;207 obj = buffer->priv;
208 /* is it from our device? */208 /* is it from our device? */
209 if (obj->dev == dev) {209 if (obj->dev == dev) {
210 /*
211 * Importing dmabuf exported from out own gem increases
212 * refcount on gem itself instead of f_count of dmabuf.
213 */
210 drm_gem_object_reference(obj);214 drm_gem_object_reference(obj);
215 dma_buf_put(buffer);
211 return obj;216 return obj;
212 }217 }
213 }218 }
include/drm/exynos_drm.h+4−18
@@ -6,24 +6,10 @@ · 5 unmodified lines
6 * Joonyoung Shim <jy0922.shim@samsung.com>6 * Joonyoung Shim <jy0922.shim@samsung.com>
7 * Seung-Woo Kim <sw0312.kim@samsung.com>7 * Seung-Woo Kim <sw0312.kim@samsung.com>
8 *8 *
9 * Permission is hereby granted, free of charge, to any person obtaining a9 * This program is free software; you can redistribute it and/or modify it
10 * copy of this software and associated documentation files (the "Software"),10 * under the terms of the GNU General Public License as published by the
11 * to deal in the Software without restriction, including without limitation11 * Free Software Foundation; either version 2 of the License, or (at your
12 * the rights to use, copy, modify, merge, publish, distribute, sublicense,12 * option) any later version.
13 * and/or sell copies of the Software, and to permit persons to whom the
14 * Software is furnished to do so, subject to the following conditions:
15 *
16 * The above copyright notice and this permission notice (including the next
17 * paragraph) shall be included in all copies or substantial portions of the
18 * Software.
19 *
20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
23 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
24 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
25 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
26 * OTHER DEALINGS IN THE SOFTWARE.
27 */13 */
28#ifndef _EXYNOS_DRM_H_14#ifndef _EXYNOS_DRM_H_
29#define _EXYNOS_DRM_H_15#define _EXYNOS_DRM_H_
include/uapi/drm/exynos_drm.h+6−18
@@ -6,24 +6,10 @@ · 5 unmodified lines
6 * Joonyoung Shim <jy0922.shim@samsung.com>6 * Joonyoung Shim <jy0922.shim@samsung.com>
7 * Seung-Woo Kim <sw0312.kim@samsung.com>7 * Seung-Woo Kim <sw0312.kim@samsung.com>
8 *8 *
9 * Permission is hereby granted, free of charge, to any person obtaining a9 * This program is free software; you can redistribute it and/or modify it
10 * copy of this software and associated documentation files (the "Software"),10 * under the terms of the GNU General Public License as published by the
11 * to deal in the Software without restriction, including without limitation11 * Free Software Foundation; either version 2 of the License, or (at your
12 * the rights to use, copy, modify, merge, publish, distribute, sublicense,12 * option) any later version.
13 * and/or sell copies of the Software, and to permit persons to whom the
14 * Software is furnished to do so, subject to the following conditions:
15 *
16 * The above copyright notice and this permission notice (including the next
17 * paragraph) shall be included in all copies or substantial portions of the
18 * Software.
19 *
20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
23 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
24 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
25 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
26 * OTHER DEALINGS IN THE SOFTWARE.
27 */13 */
28 14
29#ifndef _UAPI_EXYNOS_DRM_H_15#ifndef _UAPI_EXYNOS_DRM_H_
@@ -185,6 +171,8 @@ enum drm_exynos_flip { · 155 unmodified lines
185 EXYNOS_DRM_FLIP_NONE = (0 << 0),171 EXYNOS_DRM_FLIP_NONE = (0 << 0),
186 EXYNOS_DRM_FLIP_VERTICAL = (1 << 0),172 EXYNOS_DRM_FLIP_VERTICAL = (1 << 0),
187 EXYNOS_DRM_FLIP_HORIZONTAL = (1 << 1),173 EXYNOS_DRM_FLIP_HORIZONTAL = (1 << 1),
174 EXYNOS_DRM_FLIP_BOTH = EXYNOS_DRM_FLIP_VERTICAL |
175 EXYNOS_DRM_FLIP_HORIZONTAL,
188};176};
189 177
190enum drm_exynos_degree {178enum drm_exynos_degree {