Commit ca5c8a4c2aba577b4cd2f4c3c72a768a80830294
Exists in
master
and in
20 other branches
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. ...
Showing 48 changed files Side-by-side Diff
- drivers/gpu/drm/exynos/exynos_drm_buf.c
- drivers/gpu/drm/exynos/exynos_drm_buf.h
- drivers/gpu/drm/exynos/exynos_drm_connector.c
- drivers/gpu/drm/exynos/exynos_drm_connector.h
- drivers/gpu/drm/exynos/exynos_drm_core.c
- drivers/gpu/drm/exynos/exynos_drm_crtc.c
- drivers/gpu/drm/exynos/exynos_drm_crtc.h
- drivers/gpu/drm/exynos/exynos_drm_dmabuf.c
- drivers/gpu/drm/exynos/exynos_drm_dmabuf.h
- drivers/gpu/drm/exynos/exynos_drm_drv.c
- drivers/gpu/drm/exynos/exynos_drm_drv.h
- drivers/gpu/drm/exynos/exynos_drm_encoder.c
- drivers/gpu/drm/exynos/exynos_drm_encoder.h
- drivers/gpu/drm/exynos/exynos_drm_fb.c
- drivers/gpu/drm/exynos/exynos_drm_fb.h
- drivers/gpu/drm/exynos/exynos_drm_fbdev.c
- drivers/gpu/drm/exynos/exynos_drm_fbdev.h
- drivers/gpu/drm/exynos/exynos_drm_fimc.c
- drivers/gpu/drm/exynos/exynos_drm_fimc.h
- drivers/gpu/drm/exynos/exynos_drm_fimd.c
- drivers/gpu/drm/exynos/exynos_drm_gem.c
- drivers/gpu/drm/exynos/exynos_drm_gem.h
- drivers/gpu/drm/exynos/exynos_drm_gsc.c
- drivers/gpu/drm/exynos/exynos_drm_gsc.h
- drivers/gpu/drm/exynos/exynos_drm_hdmi.h
- drivers/gpu/drm/exynos/exynos_drm_iommu.c
- drivers/gpu/drm/exynos/exynos_drm_iommu.h
- drivers/gpu/drm/exynos/exynos_drm_ipp.c
- drivers/gpu/drm/exynos/exynos_drm_ipp.h
- drivers/gpu/drm/exynos/exynos_drm_rotator.c
- drivers/gpu/drm/exynos/exynos_drm_rotator.h
- drivers/gpu/drm/exynos/exynos_drm_vidi.c
- drivers/gpu/drm/exynos/exynos_drm_vidi.h
- drivers/gpu/drm/exynos/exynos_hdmi.h
- drivers/gpu/drm/exynos/exynos_mixer.c
- drivers/gpu/drm/i915/i915_gem_dmabuf.c
- drivers/gpu/drm/nouveau/nouveau_prime.c
- drivers/gpu/drm/radeon/r600.c
- drivers/gpu/drm/radeon/r600_cs.c
- drivers/gpu/drm/radeon/radeon_asic.c
- drivers/gpu/drm/radeon/radeon_asic.h
- drivers/gpu/drm/radeon/radeon_device.c
- drivers/gpu/drm/radeon/radeon_prime.c
- drivers/gpu/drm/radeon/rv770.c
- drivers/gpu/drm/ttm/ttm_bo_util.c
- drivers/staging/omapdrm/omap_gem_dmabuf.c
- include/drm/exynos_drm.h
- include/uapi/drm/exynos_drm.h
drivers/gpu/drm/exynos/exynos_drm_buf.c
... | ... | @@ -3,24 +3,10 @@ |
3 | 3 | * Copyright (c) 2011 Samsung Electronics Co., Ltd. |
4 | 4 | * Author: Inki Dae <inki.dae@samsung.com> |
5 | 5 | * |
6 | - * Permission is hereby granted, free of charge, to any person obtaining a | |
7 | - * copy of this software and associated documentation files (the "Software"), | |
8 | - * to deal in the Software without restriction, including without limitation | |
9 | - * the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
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. | |
6 | + * This program is free software; you can redistribute it and/or modify it | |
7 | + * under the terms of the GNU General Public License as published by the | |
8 | + * Free Software Foundation; either version 2 of the License, or (at your | |
9 | + * option) any later version. | |
24 | 10 | */ |
25 | 11 | |
26 | 12 | #include <drm/drmP.h> |
... | ... | @@ -29,6 +15,7 @@ |
29 | 15 | #include "exynos_drm_drv.h" |
30 | 16 | #include "exynos_drm_gem.h" |
31 | 17 | #include "exynos_drm_buf.h" |
18 | +#include "exynos_drm_iommu.h" | |
32 | 19 | |
33 | 20 | static int lowlevel_buffer_allocate(struct drm_device *dev, |
34 | 21 | unsigned int flags, struct exynos_drm_gem_buf *buf) |
... | ... | @@ -51,7 +38,7 @@ |
51 | 38 | * region will be allocated else physically contiguous |
52 | 39 | * as possible. |
53 | 40 | */ |
54 | - if (flags & EXYNOS_BO_CONTIG) | |
41 | + if (!(flags & EXYNOS_BO_NONCONTIG)) | |
55 | 42 | dma_set_attr(DMA_ATTR_FORCE_CONTIGUOUS, &buf->dma_attrs); |
56 | 43 | |
57 | 44 | /* |
58 | 45 | |
... | ... | @@ -66,14 +53,45 @@ |
66 | 53 | dma_set_attr(attr, &buf->dma_attrs); |
67 | 54 | dma_set_attr(DMA_ATTR_NO_KERNEL_MAPPING, &buf->dma_attrs); |
68 | 55 | |
69 | - buf->pages = dma_alloc_attrs(dev->dev, buf->size, | |
70 | - &buf->dma_addr, GFP_KERNEL, &buf->dma_attrs); | |
71 | - if (!buf->pages) { | |
72 | - DRM_ERROR("failed to allocate buffer.\n"); | |
73 | - return -ENOMEM; | |
56 | + nr_pages = buf->size >> PAGE_SHIFT; | |
57 | + | |
58 | + if (!is_drm_iommu_supported(dev)) { | |
59 | + dma_addr_t start_addr; | |
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 | 95 | buf->sgt = drm_prime_pages_to_sg(buf->pages, nr_pages); |
78 | 96 | if (!buf->sgt) { |
79 | 97 | DRM_ERROR("failed to get sg table.\n"); |
... | ... | @@ -92,6 +110,9 @@ |
92 | 110 | (dma_addr_t)buf->dma_addr, &buf->dma_attrs); |
93 | 111 | buf->dma_addr = (dma_addr_t)NULL; |
94 | 112 | |
113 | + if (!is_drm_iommu_supported(dev)) | |
114 | + kfree(buf->pages); | |
115 | + | |
95 | 116 | return ret; |
96 | 117 | } |
97 | 118 | |
98 | 119 | |
... | ... | @@ -114,8 +135,14 @@ |
114 | 135 | kfree(buf->sgt); |
115 | 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 | 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 | 146 | buf->dma_addr = (dma_addr_t)NULL; |
120 | 147 | } |
121 | 148 |
drivers/gpu/drm/exynos/exynos_drm_buf.h
... | ... | @@ -3,24 +3,10 @@ |
3 | 3 | * Copyright (c) 2011 Samsung Electronics Co., Ltd. |
4 | 4 | * Author: Inki Dae <inki.dae@samsung.com> |
5 | 5 | * |
6 | - * Permission is hereby granted, free of charge, to any person obtaining a | |
7 | - * copy of this software and associated documentation files (the "Software"), | |
8 | - * to deal in the Software without restriction, including without limitation | |
9 | - * the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
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. | |
6 | + * This program is free software; you can redistribute it and/or modify it | |
7 | + * under the terms of the GNU General Public License as published by the | |
8 | + * Free Software Foundation; either version 2 of the License, or (at your | |
9 | + * option) any later version. | |
24 | 10 | */ |
25 | 11 | |
26 | 12 | #ifndef _EXYNOS_DRM_BUF_H_ |
drivers/gpu/drm/exynos/exynos_drm_connector.c
... | ... | @@ -5,24 +5,10 @@ |
5 | 5 | * Joonyoung Shim <jy0922.shim@samsung.com> |
6 | 6 | * Seung-Woo Kim <sw0312.kim@samsung.com> |
7 | 7 | * |
8 | - * Permission is hereby granted, free of charge, to any person obtaining a | |
9 | - * copy of this software and associated documentation files (the "Software"), | |
10 | - * to deal in the Software without restriction, including without limitation | |
11 | - * the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
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. | |
8 | + * This program is free software; you can redistribute it and/or modify it | |
9 | + * under the terms of the GNU General Public License as published by the | |
10 | + * Free Software Foundation; either version 2 of the License, or (at your | |
11 | + * option) any later version. | |
26 | 12 | */ |
27 | 13 | |
28 | 14 | #include <drm/drmP.h> |
drivers/gpu/drm/exynos/exynos_drm_connector.h
... | ... | @@ -5,24 +5,10 @@ |
5 | 5 | * Joonyoung Shim <jy0922.shim@samsung.com> |
6 | 6 | * Seung-Woo Kim <sw0312.kim@samsung.com> |
7 | 7 | * |
8 | - * Permission is hereby granted, free of charge, to any person obtaining a | |
9 | - * copy of this software and associated documentation files (the "Software"), | |
10 | - * to deal in the Software without restriction, including without limitation | |
11 | - * the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
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. | |
8 | + * This program is free software; you can redistribute it and/or modify it | |
9 | + * under the terms of the GNU General Public License as published by the | |
10 | + * Free Software Foundation; either version 2 of the License, or (at your | |
11 | + * option) any later version. | |
26 | 12 | */ |
27 | 13 | |
28 | 14 | #ifndef _EXYNOS_DRM_CONNECTOR_H_ |
drivers/gpu/drm/exynos/exynos_drm_core.c
... | ... | @@ -6,24 +6,10 @@ |
6 | 6 | * Joonyoung Shim <jy0922.shim@samsung.com> |
7 | 7 | * Seung-Woo Kim <sw0312.kim@samsung.com> |
8 | 8 | * |
9 | - * Permission is hereby granted, free of charge, to any person obtaining a | |
10 | - * copy of this software and associated documentation files (the "Software"), | |
11 | - * to deal in the Software without restriction, including without limitation | |
12 | - * the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
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. | |
9 | + * This program is free software; you can redistribute it and/or modify it | |
10 | + * under the terms of the GNU General Public License as published by the | |
11 | + * Free Software Foundation; either version 2 of the License, or (at your | |
12 | + * option) any later version. | |
27 | 13 | */ |
28 | 14 | |
29 | 15 | #include <drm/drmP.h> |
drivers/gpu/drm/exynos/exynos_drm_crtc.c
... | ... | @@ -6,24 +6,10 @@ |
6 | 6 | * Joonyoung Shim <jy0922.shim@samsung.com> |
7 | 7 | * Seung-Woo Kim <sw0312.kim@samsung.com> |
8 | 8 | * |
9 | - * Permission is hereby granted, free of charge, to any person obtaining a | |
10 | - * copy of this software and associated documentation files (the "Software"), | |
11 | - * to deal in the Software without restriction, including without limitation | |
12 | - * the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
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. | |
9 | + * This program is free software; you can redistribute it and/or modify it | |
10 | + * under the terms of the GNU General Public License as published by the | |
11 | + * Free Software Foundation; either version 2 of the License, or (at your | |
12 | + * option) any later version. | |
27 | 13 | */ |
28 | 14 | |
29 | 15 | #include <drm/drmP.h> |
... | ... | @@ -406,5 +392,35 @@ |
406 | 392 | |
407 | 393 | exynos_drm_fn_encoder(private->crtc[crtc], &crtc, |
408 | 394 | exynos_drm_disable_vblank); |
395 | +} | |
396 | + | |
397 | +void 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); | |
409 | 425 | } |
drivers/gpu/drm/exynos/exynos_drm_crtc.h
... | ... | @@ -6,24 +6,10 @@ |
6 | 6 | * Joonyoung Shim <jy0922.shim@samsung.com> |
7 | 7 | * Seung-Woo Kim <sw0312.kim@samsung.com> |
8 | 8 | * |
9 | - * Permission is hereby granted, free of charge, to any person obtaining a | |
10 | - * copy of this software and associated documentation files (the "Software"), | |
11 | - * to deal in the Software without restriction, including without limitation | |
12 | - * the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
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. | |
9 | + * This program is free software; you can redistribute it and/or modify it | |
10 | + * under the terms of the GNU General Public License as published by the | |
11 | + * Free Software Foundation; either version 2 of the License, or (at your | |
12 | + * option) any later version. | |
27 | 13 | */ |
28 | 14 | |
29 | 15 | #ifndef _EXYNOS_DRM_CRTC_H_ |
... | ... | @@ -32,6 +18,7 @@ |
32 | 18 | int exynos_drm_crtc_create(struct drm_device *dev, unsigned int nr); |
33 | 19 | int exynos_drm_crtc_enable_vblank(struct drm_device *dev, int crtc); |
34 | 20 | void exynos_drm_crtc_disable_vblank(struct drm_device *dev, int crtc); |
21 | +void exynos_drm_crtc_finish_pageflip(struct drm_device *dev, int crtc); | |
35 | 22 | |
36 | 23 | #endif |
drivers/gpu/drm/exynos/exynos_drm_dmabuf.c
... | ... | @@ -3,24 +3,10 @@ |
3 | 3 | * Copyright (c) 2012 Samsung Electronics Co., Ltd. |
4 | 4 | * Author: Inki Dae <inki.dae@samsung.com> |
5 | 5 | * |
6 | - * Permission is hereby granted, free of charge, to any person obtaining a | |
7 | - * copy of this software and associated documentation files (the "Software"), | |
8 | - * to deal in the Software without restriction, including without limitation | |
9 | - * the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
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. | |
6 | + * This program is free software; you can redistribute it and/or modify it | |
7 | + * under the terms of the GNU General Public License as published by the | |
8 | + * Free Software Foundation; either version 2 of the License, or (at your | |
9 | + * option) any later version. | |
24 | 10 | */ |
25 | 11 | |
26 | 12 | #include <drm/drmP.h> |
... | ... | @@ -222,7 +208,7 @@ |
222 | 208 | struct exynos_drm_gem_obj *exynos_gem_obj = to_exynos_gem_obj(obj); |
223 | 209 | |
224 | 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 | |
228 | 214 | struct drm_gem_object *exynos_dmabuf_prime_import(struct drm_device *drm_dev, |
229 | 215 | |
... | ... | @@ -246,7 +232,12 @@ |
246 | 232 | |
247 | 233 | /* is it from our device? */ |
248 | 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 | 239 | drm_gem_object_reference(obj); |
240 | + dma_buf_put(dma_buf); | |
250 | 241 | return obj; |
251 | 242 | } |
252 | 243 | } |
drivers/gpu/drm/exynos/exynos_drm_dmabuf.h
... | ... | @@ -3,24 +3,10 @@ |
3 | 3 | * Copyright (c) 2012 Samsung Electronics Co., Ltd. |
4 | 4 | * Author: Inki Dae <inki.dae@samsung.com> |
5 | 5 | * |
6 | - * Permission is hereby granted, free of charge, to any person obtaining a | |
7 | - * copy of this software and associated documentation files (the "Software"), | |
8 | - * to deal in the Software without restriction, including without limitation | |
9 | - * the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
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. | |
6 | + * This program is free software; you can redistribute it and/or modify it | |
7 | + * under the terms of the GNU General Public License as published by the | |
8 | + * Free Software Foundation; either version 2 of the License, or (at your | |
9 | + * option) any later version. | |
24 | 10 | */ |
25 | 11 | |
26 | 12 | #ifndef _EXYNOS_DRM_DMABUF_H_ |
drivers/gpu/drm/exynos/exynos_drm_drv.c
... | ... | @@ -5,24 +5,10 @@ |
5 | 5 | * Joonyoung Shim <jy0922.shim@samsung.com> |
6 | 6 | * Seung-Woo Kim <sw0312.kim@samsung.com> |
7 | 7 | * |
8 | - * Permission is hereby granted, free of charge, to any person obtaining a | |
9 | - * copy of this software and associated documentation files (the "Software"), | |
10 | - * to deal in the Software without restriction, including without limitation | |
11 | - * the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
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. | |
8 | + * This program is free software; you can redistribute it and/or modify it | |
9 | + * under the terms of the GNU General Public License as published by the | |
10 | + * Free Software Foundation; either version 2 of the License, or (at your | |
11 | + * option) any later version. | |
26 | 12 | */ |
27 | 13 | |
28 | 14 | #include <drm/drmP.h> |
drivers/gpu/drm/exynos/exynos_drm_drv.h
... | ... | @@ -6,24 +6,10 @@ |
6 | 6 | * Joonyoung Shim <jy0922.shim@samsung.com> |
7 | 7 | * Seung-Woo Kim <sw0312.kim@samsung.com> |
8 | 8 | * |
9 | - * Permission is hereby granted, free of charge, to any person obtaining a | |
10 | - * copy of this software and associated documentation files (the "Software"), | |
11 | - * to deal in the Software without restriction, including without limitation | |
12 | - * the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
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. | |
9 | + * This program is free software; you can redistribute it and/or modify it | |
10 | + * under the terms of the GNU General Public License as published by the | |
11 | + * Free Software Foundation; either version 2 of the License, or (at your | |
12 | + * option) any later version. | |
27 | 13 | */ |
28 | 14 | |
29 | 15 | #ifndef _EXYNOS_DRM_DRV_H_ |
drivers/gpu/drm/exynos/exynos_drm_encoder.c
... | ... | @@ -6,24 +6,10 @@ |
6 | 6 | * Joonyoung Shim <jy0922.shim@samsung.com> |
7 | 7 | * Seung-Woo Kim <sw0312.kim@samsung.com> |
8 | 8 | * |
9 | - * Permission is hereby granted, free of charge, to any person obtaining a | |
10 | - * copy of this software and associated documentation files (the "Software"), | |
11 | - * to deal in the Software without restriction, including without limitation | |
12 | - * the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
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. | |
9 | + * This program is free software; you can redistribute it and/or modify it | |
10 | + * under the terms of the GNU General Public License as published by the | |
11 | + * Free Software Foundation; either version 2 of the License, or (at your | |
12 | + * option) any later version. | |
27 | 13 | */ |
28 | 14 | |
29 | 15 | #include <drm/drmP.h> |
drivers/gpu/drm/exynos/exynos_drm_encoder.h
... | ... | @@ -5,24 +5,10 @@ |
5 | 5 | * Joonyoung Shim <jy0922.shim@samsung.com> |
6 | 6 | * Seung-Woo Kim <sw0312.kim@samsung.com> |
7 | 7 | * |
8 | - * Permission is hereby granted, free of charge, to any person obtaining a | |
9 | - * copy of this software and associated documentation files (the "Software"), | |
10 | - * to deal in the Software without restriction, including without limitation | |
11 | - * the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
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. | |
8 | + * This program is free software; you can redistribute it and/or modify it | |
9 | + * under the terms of the GNU General Public License as published by the | |
10 | + * Free Software Foundation; either version 2 of the License, or (at your | |
11 | + * option) any later version. | |
26 | 12 | */ |
27 | 13 | |
28 | 14 | #ifndef _EXYNOS_DRM_ENCODER_H_ |
drivers/gpu/drm/exynos/exynos_drm_fb.c
... | ... | @@ -6,24 +6,10 @@ |
6 | 6 | * Joonyoung Shim <jy0922.shim@samsung.com> |
7 | 7 | * Seung-Woo Kim <sw0312.kim@samsung.com> |
8 | 8 | * |
9 | - * Permission is hereby granted, free of charge, to any person obtaining a | |
10 | - * copy of this software and associated documentation files (the "Software"), | |
11 | - * to deal in the Software without restriction, including without limitation | |
12 | - * the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
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. | |
9 | + * This program is free software; you can redistribute it and/or modify it | |
10 | + * under the terms of the GNU General Public License as published by the | |
11 | + * Free Software Foundation; either version 2 of the License, or (at your | |
12 | + * option) any later version. | |
27 | 13 | */ |
28 | 14 | |
29 | 15 | #include <drm/drmP.h> |
drivers/gpu/drm/exynos/exynos_drm_fb.h
... | ... | @@ -5,24 +5,10 @@ |
5 | 5 | * Joonyoung Shim <jy0922.shim@samsung.com> |
6 | 6 | * Seung-Woo Kim <sw0312.kim@samsung.com> |
7 | 7 | * |
8 | - * Permission is hereby granted, free of charge, to any person obtaining a | |
9 | - * copy of this software and associated documentation files (the "Software"), | |
10 | - * to deal in the Software without restriction, including without limitation | |
11 | - * the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
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. | |
8 | + * This program is free software; you can redistribute it and/or modify it | |
9 | + * under the terms of the GNU General Public License as published by the | |
10 | + * Free Software Foundation; either version 2 of the License, or (at your | |
11 | + * option) any later version. | |
26 | 12 | */ |
27 | 13 | |
28 | 14 | #ifndef _EXYNOS_DRM_FB_H_ |
drivers/gpu/drm/exynos/exynos_drm_fbdev.c
... | ... | @@ -6,24 +6,10 @@ |
6 | 6 | * Joonyoung Shim <jy0922.shim@samsung.com> |
7 | 7 | * Seung-Woo Kim <sw0312.kim@samsung.com> |
8 | 8 | * |
9 | - * Permission is hereby granted, free of charge, to any person obtaining a | |
10 | - * copy of this software and associated documentation files (the "Software"), | |
11 | - * to deal in the Software without restriction, including without limitation | |
12 | - * the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
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. | |
9 | + * This program is free software; you can redistribute it and/or modify it | |
10 | + * under the terms of the GNU General Public License as published by the | |
11 | + * Free Software Foundation; either version 2 of the License, or (at your | |
12 | + * option) any later version. | |
27 | 13 | */ |
28 | 14 | |
29 | 15 | #include <drm/drmP.h> |
... | ... | @@ -34,6 +20,7 @@ |
34 | 20 | #include "exynos_drm_drv.h" |
35 | 21 | #include "exynos_drm_fb.h" |
36 | 22 | #include "exynos_drm_gem.h" |
23 | +#include "exynos_drm_iommu.h" | |
37 | 24 | |
38 | 25 | #define MAX_CONNECTOR 4 |
39 | 26 | #define PREFERRED_BPP 32 |
40 | 27 | |
... | ... | @@ -111,9 +98,18 @@ |
111 | 98 | |
112 | 99 | /* map pages with kernel virtual space. */ |
113 | 100 | if (!buffer->kvaddr) { |
114 | - unsigned int nr_pages = buffer->size >> PAGE_SHIFT; | |
115 | - buffer->kvaddr = vmap(buffer->pages, nr_pages, VM_MAP, | |
101 | + if (is_drm_iommu_supported(dev)) { | |
102 | + unsigned int nr_pages = buffer->size >> PAGE_SHIFT; | |
103 | + | |
104 | + buffer->kvaddr = vmap(buffer->pages, nr_pages, VM_MAP, | |
116 | 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 | 113 | if (!buffer->kvaddr) { |
118 | 114 | DRM_ERROR("failed to map pages to kernel space.\n"); |
119 | 115 | return -EIO; |
120 | 116 | |
... | ... | @@ -128,8 +124,12 @@ |
128 | 124 | |
129 | 125 | dev->mode_config.fb_base = (resource_size_t)buffer->dma_addr; |
130 | 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 | 129 | (page_to_phys(sg_page(buffer->sgt->sgl)) + offset); |
130 | + else | |
131 | + fbi->fix.smem_start = (unsigned long)buffer->dma_addr; | |
132 | + | |
133 | 133 | fbi->screen_size = size; |
134 | 134 | fbi->fix.smem_len = size; |
135 | 135 | |
... | ... | @@ -320,7 +320,7 @@ |
320 | 320 | struct exynos_drm_gem_obj *exynos_gem_obj = exynos_fbd->exynos_gem_obj; |
321 | 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 | 324 | vunmap(exynos_gem_obj->buffer->kvaddr); |
325 | 325 | |
326 | 326 | /* release drm framebuffer and real buffer */ |
drivers/gpu/drm/exynos/exynos_drm_fbdev.h
... | ... | @@ -6,24 +6,10 @@ |
6 | 6 | * Joonyoung Shim <jy0922.shim@samsung.com> |
7 | 7 | * Seung-Woo Kim <sw0312.kim@samsung.com> |
8 | 8 | * |
9 | - * Permission is hereby granted, free of charge, to any person obtaining a | |
10 | - * copy of this software and associated documentation files (the "Software"), | |
11 | - * to deal in the Software without restriction, including without limitation | |
12 | - * the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
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. | |
9 | + * This program is free software; you can redistribute it and/or modify it | |
10 | + * under the terms of the GNU General Public License as published by the | |
11 | + * Free Software Foundation; either version 2 of the License, or (at your | |
12 | + * option) any later version. | |
27 | 13 | */ |
28 | 14 | |
29 | 15 | #ifndef _EXYNOS_DRM_FBDEV_H_ |
drivers/gpu/drm/exynos/exynos_drm_fimc.c
... | ... | @@ -25,7 +25,7 @@ |
25 | 25 | #include "exynos_drm_fimc.h" |
26 | 26 | |
27 | 27 | /* |
28 | - * FIMC is stand for Fully Interactive Mobile Camera and | |
28 | + * FIMC stands for Fully Interactive Mobile Camera and | |
29 | 29 | * supports image scaler/rotator and input/output DMA operations. |
30 | 30 | * input DMA reads image data from the memory. |
31 | 31 | * output DMA writes image data to memory. |
32 | 32 | |
33 | 33 | |
34 | 34 | |
35 | 35 | |
... | ... | @@ -163,19 +163,29 @@ |
163 | 163 | bool suspended; |
164 | 164 | }; |
165 | 165 | |
166 | -static void fimc_sw_reset(struct fimc_context *ctx, bool pattern) | |
166 | +static void fimc_sw_reset(struct fimc_context *ctx) | |
167 | 167 | { |
168 | 168 | u32 cfg; |
169 | 169 | |
170 | - DRM_DEBUG_KMS("%s:pattern[%d]\n", __func__, pattern); | |
170 | + DRM_DEBUG_KMS("%s\n", __func__); | |
171 | 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 | + } | |
179 | + | |
172 | 180 | cfg = fimc_read(EXYNOS_CISRCFMT); |
173 | 181 | cfg |= EXYNOS_CISRCFMT_ITU601_8BIT; |
174 | - if (pattern) | |
175 | - cfg |= EXYNOS_CIGCTRL_TESTPATTERN_COLOR_BAR; | |
176 | - | |
177 | 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 | 189 | /* s/w reset */ |
180 | 190 | cfg = fimc_read(EXYNOS_CIGCTRL); |
181 | 191 | cfg |= (EXYNOS_CIGCTRL_SWRST); |
... | ... | @@ -695,7 +705,7 @@ |
695 | 705 | { |
696 | 706 | struct fimc_context *ctx = get_fimc_context(dev); |
697 | 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 | 709 | struct drm_exynos_ipp_property *property; |
700 | 710 | struct drm_exynos_ipp_config *config; |
701 | 711 | |
... | ... | @@ -705,10 +715,6 @@ |
705 | 715 | } |
706 | 716 | |
707 | 717 | property = &c_node->property; |
708 | - if (!property) { | |
709 | - DRM_ERROR("failed to get property.\n"); | |
710 | - return -EINVAL; | |
711 | - } | |
712 | 718 | |
713 | 719 | DRM_DEBUG_KMS("%s:prop_id[%d]buf_id[%d]buf_type[%d]\n", __func__, |
714 | 720 | property->prop_id, buf_id, buf_type); |
... | ... | @@ -1206,7 +1212,7 @@ |
1206 | 1212 | } |
1207 | 1213 | |
1208 | 1214 | /* sequence id */ |
1209 | - cfg &= (~mask); | |
1215 | + cfg &= ~mask; | |
1210 | 1216 | cfg |= (enable << buf_id); |
1211 | 1217 | fimc_write(cfg, EXYNOS_CIFCNTSEQ); |
1212 | 1218 | |
... | ... | @@ -1231,7 +1237,7 @@ |
1231 | 1237 | { |
1232 | 1238 | struct fimc_context *ctx = get_fimc_context(dev); |
1233 | 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 | 1241 | struct drm_exynos_ipp_property *property; |
1236 | 1242 | struct drm_exynos_ipp_config *config; |
1237 | 1243 | |
... | ... | @@ -1241,10 +1247,6 @@ |
1241 | 1247 | } |
1242 | 1248 | |
1243 | 1249 | property = &c_node->property; |
1244 | - if (!property) { | |
1245 | - DRM_ERROR("failed to get property.\n"); | |
1246 | - return -EINVAL; | |
1247 | - } | |
1248 | 1250 | |
1249 | 1251 | DRM_DEBUG_KMS("%s:prop_id[%d]buf_id[%d]buf_type[%d]\n", __func__, |
1250 | 1252 | property->prop_id, buf_id, buf_type); |
... | ... | @@ -1317,7 +1319,7 @@ |
1317 | 1319 | { |
1318 | 1320 | struct fimc_context *ctx = dev_id; |
1319 | 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 | 1323 | struct drm_exynos_ipp_event_work *event_work = |
1322 | 1324 | c_node->event_work; |
1323 | 1325 | int buf_id; |
... | ... | @@ -1395,6 +1397,7 @@ |
1395 | 1397 | case EXYNOS_DRM_FLIP_NONE: |
1396 | 1398 | case EXYNOS_DRM_FLIP_VERTICAL: |
1397 | 1399 | case EXYNOS_DRM_FLIP_HORIZONTAL: |
1400 | + case EXYNOS_DRM_FLIP_BOTH: | |
1398 | 1401 | return true; |
1399 | 1402 | default: |
1400 | 1403 | DRM_DEBUG_KMS("%s:invalid flip\n", __func__); |
... | ... | @@ -1543,7 +1546,7 @@ |
1543 | 1546 | DRM_DEBUG_KMS("%s\n", __func__); |
1544 | 1547 | |
1545 | 1548 | /* reset h/w block */ |
1546 | - fimc_sw_reset(ctx, false); | |
1549 | + fimc_sw_reset(ctx); | |
1547 | 1550 | |
1548 | 1551 | /* reset scaler capability */ |
1549 | 1552 | memset(&ctx->sc, 0x0, sizeof(ctx->sc)); |
... | ... | @@ -1557,7 +1560,7 @@ |
1557 | 1560 | { |
1558 | 1561 | struct fimc_context *ctx = get_fimc_context(dev); |
1559 | 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 | 1564 | struct drm_exynos_ipp_property *property; |
1562 | 1565 | struct drm_exynos_ipp_config *config; |
1563 | 1566 | struct drm_exynos_pos img_pos[EXYNOS_DRM_OPS_MAX]; |
... | ... | @@ -1573,10 +1576,6 @@ |
1573 | 1576 | } |
1574 | 1577 | |
1575 | 1578 | property = &c_node->property; |
1576 | - if (!property) { | |
1577 | - DRM_ERROR("failed to get property.\n"); | |
1578 | - return -EINVAL; | |
1579 | - } | |
1580 | 1579 | |
1581 | 1580 | fimc_handle_irq(ctx, true, false, true); |
1582 | 1581 | |
1583 | 1582 | |
1584 | 1583 | |
1585 | 1584 | |
1586 | 1585 | |
1587 | 1586 | |
1588 | 1587 | |
1589 | 1588 | |
1590 | 1589 | |
1591 | 1590 | |
1592 | 1591 | |
1593 | 1592 | |
1594 | 1593 | |
1595 | 1594 | |
1596 | 1595 | |
1597 | 1596 | |
1598 | 1597 | |
1599 | 1598 | |
1600 | 1599 | |
1601 | 1600 | |
... | ... | @@ -1739,93 +1738,64 @@ |
1739 | 1738 | platform_get_device_id(pdev)->driver_data; |
1740 | 1739 | |
1741 | 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 | 1742 | if (IS_ERR(ctx->sclk_fimc_clk)) { |
1744 | 1743 | dev_err(dev, "failed to get src fimc clock.\n"); |
1745 | - ret = PTR_ERR(ctx->sclk_fimc_clk); | |
1746 | - goto err_ctx; | |
1744 | + return PTR_ERR(ctx->sclk_fimc_clk); | |
1747 | 1745 | } |
1748 | 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 | 1749 | if (IS_ERR(ctx->fimc_clk)) { |
1752 | 1750 | dev_err(dev, "failed to get fimc clock.\n"); |
1753 | - ret = PTR_ERR(ctx->fimc_clk); | |
1754 | 1751 | clk_disable(ctx->sclk_fimc_clk); |
1755 | - clk_put(ctx->sclk_fimc_clk); | |
1756 | - goto err_ctx; | |
1752 | + return PTR_ERR(ctx->fimc_clk); | |
1757 | 1753 | } |
1758 | 1754 | |
1759 | - ctx->wb_clk = clk_get(dev, "pxl_async0"); | |
1755 | + ctx->wb_clk = devm_clk_get(dev, "pxl_async0"); | |
1760 | 1756 | if (IS_ERR(ctx->wb_clk)) { |
1761 | 1757 | dev_err(dev, "failed to get writeback a clock.\n"); |
1762 | - ret = PTR_ERR(ctx->wb_clk); | |
1763 | 1758 | clk_disable(ctx->sclk_fimc_clk); |
1764 | - clk_put(ctx->sclk_fimc_clk); | |
1765 | - clk_put(ctx->fimc_clk); | |
1766 | - goto err_ctx; | |
1759 | + return PTR_ERR(ctx->wb_clk); | |
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 | 1763 | if (IS_ERR(ctx->wb_b_clk)) { |
1771 | 1764 | dev_err(dev, "failed to get writeback b clock.\n"); |
1772 | - ret = PTR_ERR(ctx->wb_b_clk); | |
1773 | 1765 | clk_disable(ctx->sclk_fimc_clk); |
1774 | - clk_put(ctx->sclk_fimc_clk); | |
1775 | - clk_put(ctx->fimc_clk); | |
1776 | - clk_put(ctx->wb_clk); | |
1777 | - goto err_ctx; | |
1766 | + return PTR_ERR(ctx->wb_b_clk); | |
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 | 1771 | if (IS_ERR(parent_clk)) { |
1783 | 1772 | dev_err(dev, "failed to get parent clock.\n"); |
1784 | - ret = PTR_ERR(parent_clk); | |
1785 | 1773 | clk_disable(ctx->sclk_fimc_clk); |
1786 | - clk_put(ctx->sclk_fimc_clk); | |
1787 | - clk_put(ctx->fimc_clk); | |
1788 | - clk_put(ctx->wb_clk); | |
1789 | - clk_put(ctx->wb_b_clk); | |
1790 | - goto err_ctx; | |
1774 | + return PTR_ERR(parent_clk); | |
1791 | 1775 | } |
1792 | 1776 | |
1793 | 1777 | if (clk_set_parent(ctx->sclk_fimc_clk, parent_clk)) { |
1794 | 1778 | dev_err(dev, "failed to set parent.\n"); |
1795 | - ret = -EINVAL; | |
1796 | - clk_put(parent_clk); | |
1797 | 1779 | clk_disable(ctx->sclk_fimc_clk); |
1798 | - clk_put(ctx->sclk_fimc_clk); | |
1799 | - clk_put(ctx->fimc_clk); | |
1800 | - clk_put(ctx->wb_clk); | |
1801 | - clk_put(ctx->wb_b_clk); | |
1802 | - goto err_ctx; | |
1780 | + return -EINVAL; | |
1803 | 1781 | } |
1804 | 1782 | |
1805 | - clk_put(parent_clk); | |
1783 | + devm_clk_put(dev, parent_clk); | |
1806 | 1784 | clk_set_rate(ctx->sclk_fimc_clk, pdata->clk_rate); |
1807 | 1785 | |
1808 | 1786 | /* resource memory */ |
1809 | 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 | 1788 | ctx->regs = devm_request_and_ioremap(dev, ctx->regs_res); |
1817 | 1789 | if (!ctx->regs) { |
1818 | 1790 | dev_err(dev, "failed to map registers.\n"); |
1819 | - ret = -ENXIO; | |
1820 | - goto err_clk; | |
1791 | + return -ENXIO; | |
1821 | 1792 | } |
1822 | 1793 | |
1823 | 1794 | /* resource irq */ |
1824 | 1795 | res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); |
1825 | 1796 | if (!res) { |
1826 | 1797 | dev_err(dev, "failed to request irq resource.\n"); |
1827 | - ret = -ENOENT; | |
1828 | - goto err_get_regs; | |
1798 | + return -ENOENT; | |
1829 | 1799 | } |
1830 | 1800 | |
1831 | 1801 | ctx->irq = res->start; |
... | ... | @@ -1833,7 +1803,7 @@ |
1833 | 1803 | IRQF_ONESHOT, "drm_fimc", ctx); |
1834 | 1804 | if (ret < 0) { |
1835 | 1805 | dev_err(dev, "failed to request irq.\n"); |
1836 | - goto err_get_regs; | |
1806 | + return ret; | |
1837 | 1807 | } |
1838 | 1808 | |
1839 | 1809 | /* context initailization */ |
... | ... | @@ -1879,15 +1849,7 @@ |
1879 | 1849 | pm_runtime_disable(dev); |
1880 | 1850 | err_get_irq: |
1881 | 1851 | free_irq(ctx->irq, ctx); |
1882 | -err_get_regs: | |
1883 | - devm_iounmap(dev, ctx->regs); | |
1884 | -err_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); | |
1889 | -err_ctx: | |
1890 | - devm_kfree(dev, ctx); | |
1852 | + | |
1891 | 1853 | return ret; |
1892 | 1854 | } |
1893 | 1855 | |
... | ... | @@ -1905,14 +1867,6 @@ |
1905 | 1867 | pm_runtime_disable(dev); |
1906 | 1868 | |
1907 | 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 | 1871 | return 0; |
1918 | 1872 | } |
drivers/gpu/drm/exynos/exynos_drm_fimc.h
... | ... | @@ -6,24 +6,10 @@ |
6 | 6 | * Jinyoung Jeon <jy0.jeon@samsung.com> |
7 | 7 | * Sangmin Lee <lsmin.lee@samsung.com> |
8 | 8 | * |
9 | - * Permission is hereby granted, free of charge, to any person obtaining a | |
10 | - * copy of this software and associated documentation files (the "Software"), | |
11 | - * to deal in the Software without restriction, including without limitation | |
12 | - * the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
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. | |
9 | + * This program is free software; you can redistribute it and/or modify it | |
10 | + * under the terms of the GNU General Public License as published by the | |
11 | + * Free Software Foundation; either version 2 of the License, or (at your | |
12 | + * option) any later version. | |
27 | 13 | */ |
28 | 14 | |
29 | 15 | #ifndef _EXYNOS_DRM_FIMC_H_ |
drivers/gpu/drm/exynos/exynos_drm_fimd.c
... | ... | @@ -663,34 +663,6 @@ |
663 | 663 | .display_ops = &fimd_display_ops, |
664 | 664 | }; |
665 | 665 | |
666 | -static 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 | - | |
694 | 666 | static irqreturn_t fimd_irq_handler(int irq, void *dev_id) |
695 | 667 | { |
696 | 668 | struct fimd_context *ctx = (struct fimd_context *)dev_id; |
... | ... | @@ -710,7 +682,7 @@ |
710 | 682 | goto out; |
711 | 683 | |
712 | 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 | 687 | /* set wait vsync event to zero and wake up queue. */ |
716 | 688 | if (atomic_read(&ctx->wait_vsync_event)) { |
... | ... | @@ -1046,7 +1018,7 @@ |
1046 | 1018 | * of pm runtime would still be 1 so in this case, fimd driver |
1047 | 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 | 1022 | int ret; |
1051 | 1023 | |
1052 | 1024 | ret = fimd_activate(ctx, true); |
drivers/gpu/drm/exynos/exynos_drm_gem.c
... | ... | @@ -3,24 +3,10 @@ |
3 | 3 | * Copyright (c) 2011 Samsung Electronics Co., Ltd. |
4 | 4 | * Author: Inki Dae <inki.dae@samsung.com> |
5 | 5 | * |
6 | - * Permission is hereby granted, free of charge, to any person obtaining a | |
7 | - * copy of this software and associated documentation files (the "Software"), | |
8 | - * to deal in the Software without restriction, including without limitation | |
9 | - * the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
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. | |
6 | + * This program is free software; you can redistribute it and/or modify it | |
7 | + * under the terms of the GNU General Public License as published by the | |
8 | + * Free Software Foundation; either version 2 of the License, or (at your | |
9 | + * option) any later version. | |
24 | 10 | */ |
25 | 11 | |
26 | 12 | #include <drm/drmP.h> |
drivers/gpu/drm/exynos/exynos_drm_gem.h
... | ... | @@ -3,24 +3,10 @@ |
3 | 3 | * Copyright (c) 2011 Samsung Electronics Co., Ltd. |
4 | 4 | * Authoer: Inki Dae <inki.dae@samsung.com> |
5 | 5 | * |
6 | - * Permission is hereby granted, free of charge, to any person obtaining a | |
7 | - * copy of this software and associated documentation files (the "Software"), | |
8 | - * to deal in the Software without restriction, including without limitation | |
9 | - * the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
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. | |
6 | + * This program is free software; you can redistribute it and/or modify it | |
7 | + * under the terms of the GNU General Public License as published by the | |
8 | + * Free Software Foundation; either version 2 of the License, or (at your | |
9 | + * option) any later version. | |
24 | 10 | */ |
25 | 11 | |
26 | 12 | #ifndef _EXYNOS_DRM_GEM_H_ |
drivers/gpu/drm/exynos/exynos_drm_gsc.c
... | ... | @@ -25,7 +25,7 @@ |
25 | 25 | #include "exynos_drm_gsc.h" |
26 | 26 | |
27 | 27 | /* |
28 | - * GSC is stand for General SCaler and | |
28 | + * GSC stands for General SCaler and | |
29 | 29 | * supports image scaler/rotator and input/output DMA operations. |
30 | 30 | * input DMA reads image data from the memory. |
31 | 31 | * output DMA writes image data to memory. |
... | ... | @@ -711,7 +711,7 @@ |
711 | 711 | { |
712 | 712 | struct gsc_context *ctx = get_gsc_context(dev); |
713 | 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 | 715 | struct drm_exynos_ipp_property *property; |
716 | 716 | |
717 | 717 | if (!c_node) { |
... | ... | @@ -720,10 +720,6 @@ |
720 | 720 | } |
721 | 721 | |
722 | 722 | property = &c_node->property; |
723 | - if (!property) { | |
724 | - DRM_ERROR("failed to get property.\n"); | |
725 | - return -EFAULT; | |
726 | - } | |
727 | 723 | |
728 | 724 | DRM_DEBUG_KMS("%s:prop_id[%d]buf_id[%d]buf_type[%d]\n", __func__, |
729 | 725 | property->prop_id, buf_id, buf_type); |
... | ... | @@ -1171,7 +1167,7 @@ |
1171 | 1167 | { |
1172 | 1168 | struct gsc_context *ctx = get_gsc_context(dev); |
1173 | 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 | 1171 | struct drm_exynos_ipp_property *property; |
1176 | 1172 | |
1177 | 1173 | if (!c_node) { |
... | ... | @@ -1180,10 +1176,6 @@ |
1180 | 1176 | } |
1181 | 1177 | |
1182 | 1178 | property = &c_node->property; |
1183 | - if (!property) { | |
1184 | - DRM_ERROR("failed to get property.\n"); | |
1185 | - return -EFAULT; | |
1186 | - } | |
1187 | 1179 | |
1188 | 1180 | DRM_DEBUG_KMS("%s:prop_id[%d]buf_id[%d]buf_type[%d]\n", __func__, |
1189 | 1181 | property->prop_id, buf_id, buf_type); |
... | ... | @@ -1312,7 +1304,7 @@ |
1312 | 1304 | { |
1313 | 1305 | struct gsc_context *ctx = dev_id; |
1314 | 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 | 1308 | struct drm_exynos_ipp_event_work *event_work = |
1317 | 1309 | c_node->event_work; |
1318 | 1310 | u32 status; |
... | ... | @@ -1399,7 +1391,7 @@ |
1399 | 1391 | case EXYNOS_DRM_FLIP_NONE: |
1400 | 1392 | case EXYNOS_DRM_FLIP_VERTICAL: |
1401 | 1393 | case EXYNOS_DRM_FLIP_HORIZONTAL: |
1402 | - case EXYNOS_DRM_FLIP_VERTICAL | EXYNOS_DRM_FLIP_HORIZONTAL: | |
1394 | + case EXYNOS_DRM_FLIP_BOTH: | |
1403 | 1395 | return true; |
1404 | 1396 | default: |
1405 | 1397 | DRM_DEBUG_KMS("%s:invalid flip\n", __func__); |
... | ... | @@ -1549,7 +1541,7 @@ |
1549 | 1541 | { |
1550 | 1542 | struct gsc_context *ctx = get_gsc_context(dev); |
1551 | 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 | 1545 | struct drm_exynos_ipp_property *property; |
1554 | 1546 | struct drm_exynos_ipp_config *config; |
1555 | 1547 | struct drm_exynos_pos img_pos[EXYNOS_DRM_OPS_MAX]; |
... | ... | @@ -1565,10 +1557,6 @@ |
1565 | 1557 | } |
1566 | 1558 | |
1567 | 1559 | property = &c_node->property; |
1568 | - if (!property) { | |
1569 | - DRM_ERROR("failed to get property.\n"); | |
1570 | - return -EINVAL; | |
1571 | - } | |
1572 | 1560 | |
1573 | 1561 | gsc_handle_irq(ctx, true, false, true); |
1574 | 1562 | |
... | ... | @@ -1604,7 +1592,7 @@ |
1604 | 1592 | exynos_drm_ippnb_send_event(IPP_SET_WRITEBACK, (void *)&set_wb); |
1605 | 1593 | |
1606 | 1594 | /* src local path */ |
1607 | - cfg = readl(GSC_IN_CON); | |
1595 | + cfg = gsc_read(GSC_IN_CON); | |
1608 | 1596 | cfg &= ~(GSC_IN_PATH_MASK | GSC_IN_LOCAL_SEL_MASK); |
1609 | 1597 | cfg |= (GSC_IN_PATH_LOCAL | GSC_IN_LOCAL_FIMD_WB); |
1610 | 1598 | gsc_write(cfg, GSC_IN_CON); |
1611 | 1599 | |
1612 | 1600 | |
1613 | 1601 | |
1614 | 1602 | |
... | ... | @@ -1696,34 +1684,25 @@ |
1696 | 1684 | return -ENOMEM; |
1697 | 1685 | |
1698 | 1686 | /* clock control */ |
1699 | - ctx->gsc_clk = clk_get(dev, "gscl"); | |
1687 | + ctx->gsc_clk = devm_clk_get(dev, "gscl"); | |
1700 | 1688 | if (IS_ERR(ctx->gsc_clk)) { |
1701 | 1689 | dev_err(dev, "failed to get gsc clock.\n"); |
1702 | - ret = PTR_ERR(ctx->gsc_clk); | |
1703 | - goto err_ctx; | |
1690 | + return PTR_ERR(ctx->gsc_clk); | |
1704 | 1691 | } |
1705 | 1692 | |
1706 | 1693 | /* resource memory */ |
1707 | 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 | 1695 | ctx->regs = devm_request_and_ioremap(dev, ctx->regs_res); |
1715 | 1696 | if (!ctx->regs) { |
1716 | 1697 | dev_err(dev, "failed to map registers.\n"); |
1717 | - ret = -ENXIO; | |
1718 | - goto err_clk; | |
1698 | + return -ENXIO; | |
1719 | 1699 | } |
1720 | 1700 | |
1721 | 1701 | /* resource irq */ |
1722 | 1702 | res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); |
1723 | 1703 | if (!res) { |
1724 | 1704 | dev_err(dev, "failed to request irq resource.\n"); |
1725 | - ret = -ENOENT; | |
1726 | - goto err_get_regs; | |
1705 | + return -ENOENT; | |
1727 | 1706 | } |
1728 | 1707 | |
1729 | 1708 | ctx->irq = res->start; |
... | ... | @@ -1731,7 +1710,7 @@ |
1731 | 1710 | IRQF_ONESHOT, "drm_gsc", ctx); |
1732 | 1711 | if (ret < 0) { |
1733 | 1712 | dev_err(dev, "failed to request irq.\n"); |
1734 | - goto err_get_regs; | |
1713 | + return ret; | |
1735 | 1714 | } |
1736 | 1715 | |
1737 | 1716 | /* context initailization */ |
... | ... | @@ -1775,12 +1754,6 @@ |
1775 | 1754 | pm_runtime_disable(dev); |
1776 | 1755 | err_get_irq: |
1777 | 1756 | free_irq(ctx->irq, ctx); |
1778 | -err_get_regs: | |
1779 | - devm_iounmap(dev, ctx->regs); | |
1780 | -err_clk: | |
1781 | - clk_put(ctx->gsc_clk); | |
1782 | -err_ctx: | |
1783 | - devm_kfree(dev, ctx); | |
1784 | 1757 | return ret; |
1785 | 1758 | } |
1786 | 1759 | |
... | ... | @@ -1798,11 +1771,6 @@ |
1798 | 1771 | pm_runtime_disable(dev); |
1799 | 1772 | |
1800 | 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 | 1775 | return 0; |
1808 | 1776 | } |
drivers/gpu/drm/exynos/exynos_drm_gsc.h
... | ... | @@ -6,24 +6,10 @@ |
6 | 6 | * Jinyoung Jeon <jy0.jeon@samsung.com> |
7 | 7 | * Sangmin Lee <lsmin.lee@samsung.com> |
8 | 8 | * |
9 | - * Permission is hereby granted, free of charge, to any person obtaining a | |
10 | - * copy of this software and associated documentation files (the "Software"), | |
11 | - * to deal in the Software without restriction, including without limitation | |
12 | - * the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
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. | |
9 | + * This program is free software; you can redistribute it and/or modify it | |
10 | + * under the terms of the GNU General Public License as published by the | |
11 | + * Free Software Foundation; either version 2 of the License, or (at your | |
12 | + * option) any later version. | |
27 | 13 | */ |
28 | 14 | |
29 | 15 | #ifndef _EXYNOS_DRM_GSC_H_ |
drivers/gpu/drm/exynos/exynos_drm_hdmi.h
... | ... | @@ -3,24 +3,10 @@ |
3 | 3 | * Copyright (c) 2011 Samsung Electronics Co., Ltd. |
4 | 4 | * Authoer: Inki Dae <inki.dae@samsung.com> |
5 | 5 | * |
6 | - * Permission is hereby granted, free of charge, to any person obtaining a | |
7 | - * copy of this software and associated documentation files (the "Software"), | |
8 | - * to deal in the Software without restriction, including without limitation | |
9 | - * the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
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. | |
6 | + * This program is free software; you can redistribute it and/or modify it | |
7 | + * under the terms of the GNU General Public License as published by the | |
8 | + * Free Software Foundation; either version 2 of the License, or (at your | |
9 | + * option) any later version. | |
24 | 10 | */ |
25 | 11 | |
26 | 12 | #ifndef _EXYNOS_DRM_HDMI_H_ |
drivers/gpu/drm/exynos/exynos_drm_iommu.c
... | ... | @@ -3,24 +3,10 @@ |
3 | 3 | * Copyright (c) 2012 Samsung Electronics Co., Ltd. |
4 | 4 | * Author: Inki Dae <inki.dae@samsung.com> |
5 | 5 | * |
6 | - * Permission is hereby granted, free of charge, to any person obtaining a | |
7 | - * copy of this software and associated documentation files (the "Software"), | |
8 | - * to deal in the Software without restriction, including without limitation | |
9 | - * the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
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. | |
6 | + * This program is free software; you can redistribute it and/or modify it | |
7 | + * under the terms of the GNU General Public License as published by the | |
8 | + * Free Software Foundation; either version 2 of the License, or (at your | |
9 | + * option) any later version. | |
24 | 10 | */ |
25 | 11 | |
26 | 12 | #include <drmP.h> |
drivers/gpu/drm/exynos/exynos_drm_iommu.h
... | ... | @@ -3,24 +3,10 @@ |
3 | 3 | * Copyright (c) 2012 Samsung Electronics Co., Ltd. |
4 | 4 | * Authoer: Inki Dae <inki.dae@samsung.com> |
5 | 5 | * |
6 | - * Permission is hereby granted, free of charge, to any person obtaining a | |
7 | - * copy of this software and associated documentation files (the "Software"), | |
8 | - * to deal in the Software without restriction, including without limitation | |
9 | - * the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
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. | |
6 | + * This program is free software; you can redistribute it and/or modify it | |
7 | + * under the terms of the GNU General Public License as published by the | |
8 | + * Free Software Foundation; either version 2 of the License, or (at your | |
9 | + * option) any later version. | |
24 | 10 | */ |
25 | 11 | |
26 | 12 | #ifndef _EXYNOS_DRM_IOMMU_H_ |
drivers/gpu/drm/exynos/exynos_drm_ipp.c
... | ... | @@ -27,7 +27,7 @@ |
27 | 27 | #include "exynos_drm_iommu.h" |
28 | 28 | |
29 | 29 | /* |
30 | - * IPP is stand for Image Post Processing and | |
30 | + * IPP stands for Image Post Processing and | |
31 | 31 | * supports image scaler/rotator and input/output DMA operations. |
32 | 32 | * using FIMC, GSC, Rotator, so on. |
33 | 33 | * IPP is integration device driver of same attribute h/w |
... | ... | @@ -1292,7 +1292,7 @@ |
1292 | 1292 | DRM_DEBUG_KMS("%s:prop_id[%d]\n", __func__, property->prop_id); |
1293 | 1293 | |
1294 | 1294 | /* store command info in ippdrv */ |
1295 | - ippdrv->cmd = c_node; | |
1295 | + ippdrv->c_node = c_node; | |
1296 | 1296 | |
1297 | 1297 | if (!ipp_check_mem_list(c_node)) { |
1298 | 1298 | DRM_DEBUG_KMS("%s:empty memory.\n", __func__); |
... | ... | @@ -1303,7 +1303,7 @@ |
1303 | 1303 | ret = ipp_set_property(ippdrv, property); |
1304 | 1304 | if (ret) { |
1305 | 1305 | DRM_ERROR("failed to set property.\n"); |
1306 | - ippdrv->cmd = NULL; | |
1306 | + ippdrv->c_node = NULL; | |
1307 | 1307 | return ret; |
1308 | 1308 | } |
1309 | 1309 | |
... | ... | @@ -1487,11 +1487,6 @@ |
1487 | 1487 | mutex_lock(&c_node->cmd_lock); |
1488 | 1488 | |
1489 | 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 | 1491 | switch (cmd_work->ctrl) { |
1497 | 1492 | case IPP_CTRL_PLAY: |
... | ... | @@ -1704,7 +1699,7 @@ |
1704 | 1699 | return; |
1705 | 1700 | } |
1706 | 1701 | |
1707 | - c_node = ippdrv->cmd; | |
1702 | + c_node = ippdrv->c_node; | |
1708 | 1703 | if (!c_node) { |
1709 | 1704 | DRM_ERROR("failed to get command node.\n"); |
1710 | 1705 | return; |
... | ... | @@ -1895,7 +1890,7 @@ |
1895 | 1890 | struct exynos_drm_subdrv *subdrv; |
1896 | 1891 | int ret; |
1897 | 1892 | |
1898 | - ctx = kzalloc(sizeof(*ctx), GFP_KERNEL); | |
1893 | + ctx = devm_kzalloc(&pdev->dev, sizeof(*ctx), GFP_KERNEL); | |
1899 | 1894 | if (!ctx) |
1900 | 1895 | return -ENOMEM; |
1901 | 1896 | |
... | ... | @@ -1916,8 +1911,7 @@ |
1916 | 1911 | ctx->event_workq = create_singlethread_workqueue("ipp_event"); |
1917 | 1912 | if (!ctx->event_workq) { |
1918 | 1913 | dev_err(dev, "failed to create event workqueue\n"); |
1919 | - ret = -EINVAL; | |
1920 | - goto err_clear; | |
1914 | + return -EINVAL; | |
1921 | 1915 | } |
1922 | 1916 | |
1923 | 1917 | /* |
... | ... | @@ -1958,8 +1952,6 @@ |
1958 | 1952 | destroy_workqueue(ctx->cmd_workq); |
1959 | 1953 | err_event_workq: |
1960 | 1954 | destroy_workqueue(ctx->event_workq); |
1961 | -err_clear: | |
1962 | - kfree(ctx); | |
1963 | 1955 | return ret; |
1964 | 1956 | } |
1965 | 1957 | |
... | ... | @@ -1984,8 +1976,6 @@ |
1984 | 1976 | /* destroy command, event work queue */ |
1985 | 1977 | destroy_workqueue(ctx->cmd_workq); |
1986 | 1978 | destroy_workqueue(ctx->event_workq); |
1987 | - | |
1988 | - kfree(ctx); | |
1989 | 1979 | |
1990 | 1980 | return 0; |
1991 | 1981 | } |
drivers/gpu/drm/exynos/exynos_drm_ipp.h
... | ... | @@ -6,24 +6,10 @@ |
6 | 6 | * Jinyoung Jeon <jy0.jeon@samsung.com> |
7 | 7 | * Sangmin Lee <lsmin.lee@samsung.com> |
8 | 8 | * |
9 | - * Permission is hereby granted, free of charge, to any person obtaining a | |
10 | - * copy of this software and associated documentation files (the "Software"), | |
11 | - * to deal in the Software without restriction, including without limitation | |
12 | - * the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
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. | |
9 | + * This program is free software; you can redistribute it and/or modify it | |
10 | + * under the terms of the GNU General Public License as published by the | |
11 | + * Free Software Foundation; either version 2 of the License, or (at your | |
12 | + * option) any later version. | |
27 | 13 | */ |
28 | 14 | |
29 | 15 | #ifndef _EXYNOS_DRM_IPP_H_ |
... | ... | @@ -160,7 +146,7 @@ |
160 | 146 | * @dedicated: dedicated ipp device. |
161 | 147 | * @ops: source, destination operations. |
162 | 148 | * @event_workq: event work queue. |
163 | - * @cmd: current command information. | |
149 | + * @c_node: current command information. | |
164 | 150 | * @cmd_list: list head for command information. |
165 | 151 | * @prop_list: property informations of current ipp driver. |
166 | 152 | * @check_property: check property about format, size, buffer. |
... | ... | @@ -178,7 +164,7 @@ |
178 | 164 | bool dedicated; |
179 | 165 | struct exynos_drm_ipp_ops *ops[EXYNOS_DRM_OPS_MAX]; |
180 | 166 | struct workqueue_struct *event_workq; |
181 | - struct drm_exynos_ipp_cmd_node *cmd; | |
167 | + struct drm_exynos_ipp_cmd_node *c_node; | |
182 | 168 | struct list_head cmd_list; |
183 | 169 | struct drm_exynos_ipp_prop_list *prop_list; |
184 | 170 |
drivers/gpu/drm/exynos/exynos_drm_rotator.c
... | ... | @@ -139,7 +139,7 @@ |
139 | 139 | { |
140 | 140 | struct rot_context *rot = arg; |
141 | 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 | 143 | struct drm_exynos_ipp_event_work *event_work = c_node->event_work; |
144 | 144 | enum rot_irq_status irq_status; |
145 | 145 | u32 val; |
... | ... | @@ -513,6 +513,7 @@ |
513 | 513 | case EXYNOS_DRM_FLIP_NONE: |
514 | 514 | case EXYNOS_DRM_FLIP_VERTICAL: |
515 | 515 | case EXYNOS_DRM_FLIP_HORIZONTAL: |
516 | + case EXYNOS_DRM_FLIP_BOTH: | |
516 | 517 | return true; |
517 | 518 | default: |
518 | 519 | DRM_DEBUG_KMS("%s:invalid flip\n", __func__); |
519 | 520 | |
520 | 521 | |
521 | 522 | |
522 | 523 | |
... | ... | @@ -655,34 +656,26 @@ |
655 | 656 | platform_get_device_id(pdev)->driver_data; |
656 | 657 | |
657 | 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 | 659 | rot->regs = devm_request_and_ioremap(dev, rot->regs_res); |
665 | 660 | if (!rot->regs) { |
666 | 661 | dev_err(dev, "failed to map register\n"); |
667 | - ret = -ENXIO; | |
668 | - goto err_get_resource; | |
662 | + return -ENXIO; | |
669 | 663 | } |
670 | 664 | |
671 | 665 | rot->irq = platform_get_irq(pdev, 0); |
672 | 666 | if (rot->irq < 0) { |
673 | 667 | dev_err(dev, "failed to get irq\n"); |
674 | - ret = rot->irq; | |
675 | - goto err_get_irq; | |
668 | + return rot->irq; | |
676 | 669 | } |
677 | 670 | |
678 | 671 | ret = request_threaded_irq(rot->irq, NULL, rotator_irq_handler, |
679 | 672 | IRQF_ONESHOT, "drm_rotator", rot); |
680 | 673 | if (ret < 0) { |
681 | 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 | 679 | if (IS_ERR_OR_NULL(rot->clock)) { |
687 | 680 | dev_err(dev, "failed to get clock\n"); |
688 | 681 | ret = PTR_ERR(rot->clock); |
689 | 682 | |
... | ... | @@ -720,13 +713,8 @@ |
720 | 713 | err_ippdrv_register: |
721 | 714 | devm_kfree(dev, ippdrv->prop_list); |
722 | 715 | pm_runtime_disable(dev); |
723 | - clk_put(rot->clock); | |
724 | 716 | err_clk_get: |
725 | 717 | free_irq(rot->irq, rot); |
726 | -err_get_irq: | |
727 | - devm_iounmap(dev, rot->regs); | |
728 | -err_get_resource: | |
729 | - devm_kfree(dev, rot); | |
730 | 718 | return ret; |
731 | 719 | } |
732 | 720 | |
733 | 721 | |
... | ... | @@ -740,12 +728,8 @@ |
740 | 728 | exynos_drm_ippdrv_unregister(ippdrv); |
741 | 729 | |
742 | 730 | pm_runtime_disable(dev); |
743 | - clk_put(rot->clock); | |
744 | 731 | |
745 | 732 | free_irq(rot->irq, rot); |
746 | - devm_iounmap(dev, rot->regs); | |
747 | - | |
748 | - devm_kfree(dev, rot); | |
749 | 733 | |
750 | 734 | return 0; |
751 | 735 | } |
drivers/gpu/drm/exynos/exynos_drm_rotator.h
... | ... | @@ -5,24 +5,10 @@ |
5 | 5 | * YoungJun Cho <yj44.cho@samsung.com> |
6 | 6 | * Eunchul Kim <chulspro.kim@samsung.com> |
7 | 7 | * |
8 | - * Permission is hereby granted, free of charge, to any person obtaining a | |
9 | - * copy of this software and associated documentation files (the "Software"), | |
10 | - * to deal in the Software without restriction, including without limitation | |
11 | - * the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
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. | |
8 | + * This program is free software; you can redistribute it and/or modify it | |
9 | + * under the terms of the GNU General Public License as published by the | |
10 | + * Free Software Foundation; either version 2 of the License, or (at your | |
11 | + * option) any later version. | |
26 | 12 | */ |
27 | 13 | |
28 | 14 | #ifndef _EXYNOS_DRM_ROTATOR_H_ |
drivers/gpu/drm/exynos/exynos_drm_vidi.c
... | ... | @@ -372,34 +372,6 @@ |
372 | 372 | .display_ops = &vidi_display_ops, |
373 | 373 | }; |
374 | 374 | |
375 | -static 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 | - | |
403 | 375 | static void vidi_fake_vblank_handler(struct work_struct *work) |
404 | 376 | { |
405 | 377 | struct vidi_context *ctx = container_of(work, struct vidi_context, |
... | ... | @@ -424,7 +396,7 @@ |
424 | 396 | |
425 | 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 | |
430 | 402 | static int vidi_subdrv_probe(struct drm_device *drm_dev, struct device *dev) |
drivers/gpu/drm/exynos/exynos_drm_vidi.h
... | ... | @@ -3,24 +3,10 @@ |
3 | 3 | * Copyright (c) 2012 Samsung Electronics Co., Ltd. |
4 | 4 | * Author: Inki Dae <inki.dae@samsung.com> |
5 | 5 | * |
6 | - * Permission is hereby granted, free of charge, to any person obtaining a | |
7 | - * copy of this software and associated documentation files (the "Software"), | |
8 | - * to deal in the Software without restriction, including without limitation | |
9 | - * the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
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. | |
6 | + * This program is free software; you can redistribute it and/or modify it | |
7 | + * under the terms of the GNU General Public License as published by the | |
8 | + * Free Software Foundation; either version 2 of the License, or (at your | |
9 | + * option) any later version. | |
24 | 10 | */ |
25 | 11 | |
26 | 12 | #ifndef _EXYNOS_DRM_VIDI_H_ |
drivers/gpu/drm/exynos/exynos_hdmi.h
... | ... | @@ -5,24 +5,10 @@ |
5 | 5 | * Inki Dae <inki.dae@samsung.com> |
6 | 6 | * Seung-Woo Kim <sw0312.kim@samsung.com> |
7 | 7 | * |
8 | - * Permission is hereby granted, free of charge, to any person obtaining a | |
9 | - * copy of this software and associated documentation files (the "Software"), | |
10 | - * to deal in the Software without restriction, including without limitation | |
11 | - * the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
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. | |
8 | + * This program is free software; you can redistribute it and/or modify it | |
9 | + * under the terms of the GNU General Public License as published by the | |
10 | + * Free Software Foundation; either version 2 of the License, or (at your | |
11 | + * option) any later version. | |
26 | 12 | */ |
27 | 13 | |
28 | 14 | #ifndef _EXYNOS_HDMI_H_ |
drivers/gpu/drm/exynos/exynos_mixer.c
... | ... | @@ -35,6 +35,7 @@ |
35 | 35 | #include <drm/exynos_drm.h> |
36 | 36 | |
37 | 37 | #include "exynos_drm_drv.h" |
38 | +#include "exynos_drm_crtc.h" | |
38 | 39 | #include "exynos_drm_hdmi.h" |
39 | 40 | #include "exynos_drm_iommu.h" |
40 | 41 | |
... | ... | @@ -949,35 +950,6 @@ |
949 | 950 | .win_disable = mixer_win_disable, |
950 | 951 | }; |
951 | 952 | |
952 | -/* for pageflip event */ | |
953 | -static 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 | - | |
981 | 953 | static irqreturn_t mixer_irq_handler(int irq, void *arg) |
982 | 954 | { |
983 | 955 | struct exynos_drm_hdmi_context *drm_hdmi_ctx = arg; |
... | ... | @@ -1006,7 +978,8 @@ |
1006 | 978 | } |
1007 | 979 | |
1008 | 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 | 984 | /* set wait vsync event to zero and wake up queue. */ |
1012 | 985 | if (atomic_read(&ctx->wait_vsync_event)) { |
drivers/gpu/drm/i915/i915_gem_dmabuf.c
... | ... | @@ -266,7 +266,12 @@ |
266 | 266 | obj = dma_buf->priv; |
267 | 267 | /* is it from our device? */ |
268 | 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 | 273 | drm_gem_object_reference(&obj->base); |
274 | + dma_buf_put(dma_buf); | |
270 | 275 | return &obj->base; |
271 | 276 | } |
272 | 277 | } |
drivers/gpu/drm/nouveau/nouveau_prime.c
drivers/gpu/drm/radeon/r600.c
... | ... | @@ -2646,7 +2646,7 @@ |
2646 | 2646 | * @num_gpu_pages: number of GPU pages to xfer |
2647 | 2647 | * @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 | 2650 | * Used by the radeon ttm implementation to move pages if |
2651 | 2651 | * registered as the asic copy callback. |
2652 | 2652 | */ |
... | ... | @@ -2669,8 +2669,8 @@ |
2669 | 2669 | } |
2670 | 2670 | |
2671 | 2671 | size_in_dw = (num_gpu_pages << RADEON_GPU_PAGE_SHIFT) / 4; |
2672 | - num_loops = DIV_ROUND_UP(size_in_dw, 0xffff); | |
2673 | - r = radeon_ring_lock(rdev, ring, num_loops * 5 + 8); | |
2672 | + num_loops = DIV_ROUND_UP(size_in_dw, 0xFFFE); | |
2673 | + r = radeon_ring_lock(rdev, ring, num_loops * 4 + 8); | |
2674 | 2674 | if (r) { |
2675 | 2675 | DRM_ERROR("radeon: moving bo (%d).\n", r); |
2676 | 2676 | radeon_semaphore_free(rdev, &sem, NULL); |
... | ... | @@ -2693,8 +2693,8 @@ |
2693 | 2693 | radeon_ring_write(ring, DMA_PACKET(DMA_PACKET_COPY, 0, 0, cur_size_in_dw)); |
2694 | 2694 | radeon_ring_write(ring, dst_offset & 0xfffffffc); |
2695 | 2695 | radeon_ring_write(ring, src_offset & 0xfffffffc); |
2696 | - radeon_ring_write(ring, upper_32_bits(dst_offset) & 0xff); | |
2697 | - radeon_ring_write(ring, upper_32_bits(src_offset) & 0xff); | |
2696 | + radeon_ring_write(ring, (((upper_32_bits(dst_offset) & 0xff) << 16) | | |
2697 | + (upper_32_bits(src_offset) & 0xff))); | |
2698 | 2698 | src_offset += cur_size_in_dw * 4; |
2699 | 2699 | dst_offset += cur_size_in_dw * 4; |
2700 | 2700 | } |
drivers/gpu/drm/radeon/r600_cs.c
... | ... | @@ -2677,16 +2677,29 @@ |
2677 | 2677 | } |
2678 | 2678 | p->idx += 7; |
2679 | 2679 | } else { |
2680 | - src_offset = ib[idx+2]; | |
2681 | - src_offset |= ((u64)(ib[idx+4] & 0xff)) << 32; | |
2682 | - dst_offset = ib[idx+1]; | |
2683 | - dst_offset |= ((u64)(ib[idx+3] & 0xff)) << 32; | |
2680 | + if (p->family >= CHIP_RV770) { | |
2681 | + src_offset = ib[idx+2]; | |
2682 | + src_offset |= ((u64)(ib[idx+4] & 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+2] += (u32)(src_reloc->lobj.gpu_offset & 0xfffffffc); | |
2687 | - 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 | - p->idx += 5; | |
2686 | + ib[idx+1] += (u32)(dst_reloc->lobj.gpu_offset & 0xfffffffc); | |
2687 | + ib[idx+2] += (u32)(src_reloc->lobj.gpu_offset & 0xfffffffc); | |
2688 | + ib[idx+3] += upper_32_bits(dst_reloc->lobj.gpu_offset) & 0xff; | |
2689 | + ib[idx+4] += upper_32_bits(src_reloc->lobj.gpu_offset) & 0xff; | |
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 | 2704 | if ((src_offset + (count * 4)) > radeon_bo_size(src_reloc->robj)) { |
2692 | 2705 | dev_warn(p->dev, "DMA copy src buffer too small (%llu %lu)\n", |
drivers/gpu/drm/radeon/radeon_asic.c
... | ... | @@ -1140,9 +1140,9 @@ |
1140 | 1140 | .copy = { |
1141 | 1141 | .blit = &r600_copy_blit, |
1142 | 1142 | .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX, |
1143 | - .dma = &r600_copy_dma, | |
1143 | + .dma = &rv770_copy_dma, | |
1144 | 1144 | .dma_ring_index = R600_RING_TYPE_DMA_INDEX, |
1145 | - .copy = &r600_copy_dma, | |
1145 | + .copy = &rv770_copy_dma, | |
1146 | 1146 | .copy_ring_index = R600_RING_TYPE_DMA_INDEX, |
1147 | 1147 | }, |
1148 | 1148 | .surface = { |
drivers/gpu/drm/radeon/radeon_asic.h
... | ... | @@ -403,6 +403,10 @@ |
403 | 403 | void r700_vram_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc); |
404 | 404 | void r700_cp_stop(struct radeon_device *rdev); |
405 | 405 | void r700_cp_fini(struct radeon_device *rdev); |
406 | +int 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 | 412 | * evergreen |
drivers/gpu/drm/radeon/radeon_device.c
... | ... | @@ -897,6 +897,25 @@ |
897 | 897 | } |
898 | 898 | |
899 | 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 | + */ | |
905 | +static 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 | + | |
918 | +/** | |
900 | 919 | * radeon_switcheroo_set_state - set switcheroo state |
901 | 920 | * |
902 | 921 | * @pdev: pci dev pointer |
903 | 922 | |
904 | 923 | |
... | ... | @@ -910,10 +929,19 @@ |
910 | 929 | struct drm_device *dev = pci_get_drvdata(pdev); |
911 | 930 | pm_message_t pmm = { .event = PM_EVENT_SUSPEND }; |
912 | 931 | if (state == VGA_SWITCHEROO_ON) { |
932 | + unsigned d3_delay = dev->pdev->d3_delay; | |
933 | + | |
913 | 934 | printk(KERN_INFO "radeon: switched on\n"); |
914 | 935 | /* don't suspend or resume card normally */ |
915 | 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 | 941 | radeon_resume_kms(dev); |
942 | + | |
943 | + dev->pdev->d3_delay = d3_delay; | |
944 | + | |
917 | 945 | dev->switch_power_state = DRM_SWITCH_POWER_ON; |
918 | 946 | drm_kms_helper_poll_enable(dev); |
919 | 947 | } else { |
drivers/gpu/drm/radeon/radeon_prime.c
drivers/gpu/drm/radeon/rv770.c
... | ... | @@ -887,6 +887,80 @@ |
887 | 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 | + */ | |
903 | +int 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 | + | |
890 | 964 | static int rv770_startup(struct radeon_device *rdev) |
891 | 965 | { |
892 | 966 | struct radeon_ring *ring; |
drivers/gpu/drm/ttm/ttm_bo_util.c
... | ... | @@ -654,11 +654,13 @@ |
654 | 654 | */ |
655 | 655 | |
656 | 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 | 660 | spin_unlock(&bdev->fence_lock); |
658 | 661 | if (tmp_obj) |
659 | 662 | driver->sync_obj_unref(&tmp_obj); |
660 | 663 | |
661 | - ret = ttm_buffer_object_transfer(bo, &ghost_obj); | |
662 | 664 | if (ret) |
663 | 665 | return ret; |
664 | 666 |
drivers/staging/omapdrm/omap_gem_dmabuf.c
... | ... | @@ -207,7 +207,12 @@ |
207 | 207 | obj = buffer->priv; |
208 | 208 | /* is it from our device? */ |
209 | 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 | 214 | drm_gem_object_reference(obj); |
215 | + dma_buf_put(buffer); | |
211 | 216 | return obj; |
212 | 217 | } |
213 | 218 | } |
include/drm/exynos_drm.h
... | ... | @@ -6,24 +6,10 @@ |
6 | 6 | * Joonyoung Shim <jy0922.shim@samsung.com> |
7 | 7 | * Seung-Woo Kim <sw0312.kim@samsung.com> |
8 | 8 | * |
9 | - * Permission is hereby granted, free of charge, to any person obtaining a | |
10 | - * copy of this software and associated documentation files (the "Software"), | |
11 | - * to deal in the Software without restriction, including without limitation | |
12 | - * the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
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. | |
9 | + * This program is free software; you can redistribute it and/or modify it | |
10 | + * under the terms of the GNU General Public License as published by the | |
11 | + * Free Software Foundation; either version 2 of the License, or (at your | |
12 | + * option) any later version. | |
27 | 13 | */ |
28 | 14 | #ifndef _EXYNOS_DRM_H_ |
29 | 15 | #define _EXYNOS_DRM_H_ |
include/uapi/drm/exynos_drm.h
... | ... | @@ -6,24 +6,10 @@ |
6 | 6 | * Joonyoung Shim <jy0922.shim@samsung.com> |
7 | 7 | * Seung-Woo Kim <sw0312.kim@samsung.com> |
8 | 8 | * |
9 | - * Permission is hereby granted, free of charge, to any person obtaining a | |
10 | - * copy of this software and associated documentation files (the "Software"), | |
11 | - * to deal in the Software without restriction, including without limitation | |
12 | - * the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
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. | |
9 | + * This program is free software; you can redistribute it and/or modify it | |
10 | + * under the terms of the GNU General Public License as published by the | |
11 | + * Free Software Foundation; either version 2 of the License, or (at your | |
12 | + * option) any later version. | |
27 | 13 | */ |
28 | 14 | |
29 | 15 | #ifndef _UAPI_EXYNOS_DRM_H_ |
... | ... | @@ -185,6 +171,8 @@ |
185 | 171 | EXYNOS_DRM_FLIP_NONE = (0 << 0), |
186 | 172 | EXYNOS_DRM_FLIP_VERTICAL = (1 << 0), |
187 | 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 | |
190 | 178 | enum drm_exynos_degree { |