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. ...
Unified · Split
| @@ -3,24 +3,10 @@ · 2 unmodified lines | ||
| 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 @@ · 2 unmodified lines | ||
| 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 @@ static int lowlevel_buffer_allocate(struct drm_device *dev, · 16 unmodified lines | ||
| 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 | /* |
| @@ -66,14 +53,45 @@ static int lowlevel_buffer_allocate(struct drm_device *dev, · 8 unmodified lines | ||
| 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 @@ err_free_attrs: · 12 unmodified lines | ||
| 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 | |
| @@ -114,8 +135,14 @@ static void lowlevel_buffer_deallocate(struct drm_device *dev, · 16 unmodified lines | ||
| 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 | |
| @@ -3,24 +3,10 @@ · 2 unmodified lines | ||
| 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_ |
| @@ -5,24 +5,10 @@ · 4 unmodified lines | ||
| 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> |
| @@ -5,24 +5,10 @@ · 4 unmodified lines | ||
| 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_ |
| @@ -6,24 +6,10 @@ · 5 unmodified lines | ||
| 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> |
| @@ -6,24 +6,10 @@ · 5 unmodified lines | ||
| 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> |
| @@ -407,3 +393,33 @@ void exynos_drm_crtc_disable_vblank(struct drm_device *dev, int crtc) · 377 unmodified lines | ||
| 407 | 393 | exynos_drm_fn_encoder(private->crtc[crtc], &crtc, |
| 408 | 394 | exynos_drm_disable_vblank); |
| 409 | 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); | |
| 425 | +} | |
| @@ -6,24 +6,10 @@ · 5 unmodified lines | ||
| 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,5 +18,6 @@ · 2 unmodified lines | ||
| 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 |
| @@ -3,24 +3,10 @@ · 2 unmodified lines | ||
| 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 @@ struct dma_buf *exynos_dmabuf_prime_export(struct drm_device *drm_dev, · 195 unmodified lines | ||
| 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, |
| @@ -246,7 +232,12 @@ struct drm_gem_object *exynos_dmabuf_prime_import(struct drm_device *drm_dev, · 17 unmodified lines | ||
| 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 | } |
| @@ -3,24 +3,10 @@ · 2 unmodified lines | ||
| 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_ |
| @@ -5,24 +5,10 @@ · 4 unmodified lines | ||
| 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> |
| @@ -6,24 +6,10 @@ · 5 unmodified lines | ||
| 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_ |
| @@ -6,24 +6,10 @@ · 5 unmodified lines | ||
| 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> |
| @@ -5,24 +5,10 @@ · 4 unmodified lines | ||
| 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_ |
| @@ -6,24 +6,10 @@ · 5 unmodified lines | ||
| 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> |
| @@ -5,24 +5,10 @@ · 4 unmodified lines | ||
| 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_ |
| @@ -6,24 +6,10 @@ · 5 unmodified lines | ||
| 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 @@ · 4 unmodified lines | ||
| 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 |
| @@ -111,9 +98,18 @@ static int exynos_drm_fbdev_update(struct drm_fb_helper *helper, · 71 unmodified lines | ||
| 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; |
| @@ -128,8 +124,12 @@ static int exynos_drm_fbdev_update(struct drm_fb_helper *helper, · 8 unmodified lines | ||
| 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 @@ static void exynos_drm_fbdev_destroy(struct drm_device *dev, · 184 unmodified lines | ||
| 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 */ |
| @@ -6,24 +6,10 @@ · 5 unmodified lines | ||
| 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_ |
| @@ -25,7 +25,7 @@ · 24 unmodified lines | ||
| 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. |
| @@ -163,19 +163,29 @@ struct fimc_context { · 131 unmodified lines | ||
| 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 | + | |
| 172 | + /* stop dma operation */ | |
| 173 | + cfg = fimc_read(EXYNOS_CISTATUS); | |
| 174 | + if (EXYNOS_CISTATUS_GET_ENVID_STATUS(cfg)) { | |
| 175 | + cfg = fimc_read(EXYNOS_MSCTRL); | |
| 176 | + cfg &= ~EXYNOS_MSCTRL_ENVID; | |
| 177 | + fimc_write(cfg, EXYNOS_MSCTRL); | |
| 178 | + } | |
| 171 | 179 | |
| 172 | 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 @@ static int fimc_src_set_addr(struct device *dev, · 513 unmodified lines | ||
| 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 @@ static int fimc_src_set_addr(struct device *dev, · 3 unmodified lines | ||
| 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 @@ static int fimc_dst_set_buf_seq(struct fimc_context *ctx, u32 buf_id, · 491 unmodified lines | ||
| 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 @@ static int fimc_dst_set_addr(struct device *dev, · 18 unmodified lines | ||
| 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 @@ static int fimc_dst_set_addr(struct device *dev, · 3 unmodified lines | ||
| 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 @@ static irqreturn_t fimc_irq_handler(int irq, void *dev_id) · 66 unmodified lines | ||
| 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 @@ static inline bool fimc_check_drm_flip(enum drm_exynos_flip flip) · 71 unmodified lines | ||
| 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 @@ static int fimc_ippdrv_reset(struct device *dev) · 142 unmodified lines | ||
| 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 @@ static int fimc_ippdrv_start(struct device *dev, enum drm_exynos_ipp_cmd cmd) · 7 unmodified lines | ||
| 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 @@ static int fimc_ippdrv_start(struct device *dev, enum drm_exynos_ipp_cmd cmd) · 9 unmodified lines | ||
| 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 | |
| @@ -1739,93 +1738,64 @@ static int fimc_probe(struct platform_device *pdev) · 156 unmodified lines | ||
| 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 @@ static int fimc_probe(struct platform_device *pdev) · 1 unmodified line | ||
| 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 @@ err_ippdrv_register: · 39 unmodified lines | ||
| 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 @@ static int fimc_remove(struct platform_device *pdev) · 11 unmodified lines | ||
| 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 | } |
| @@ -6,24 +6,10 @@ · 5 unmodified lines | ||
| 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_ |
| @@ -663,34 +663,6 @@ static struct exynos_drm_manager fimd_manager = { · 662 unmodified lines | ||
| 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 @@ static irqreturn_t fimd_irq_handler(int irq, void *dev_id) · 13 unmodified lines | ||
| 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 @@ static int fimd_resume(struct device *dev) · 329 unmodified lines | ||
| 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); |
| @@ -3,24 +3,10 @@ · 2 unmodified lines | ||
| 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> |
| @@ -3,24 +3,10 @@ · 2 unmodified lines | ||
| 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_ |
| @@ -25,7 +25,7 @@ · 24 unmodified lines | ||
| 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 @@ static int gsc_src_set_addr(struct device *dev, · 679 unmodified lines | ||
| 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 @@ static int gsc_src_set_addr(struct device *dev, · 2 unmodified lines | ||
| 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 @@ static int gsc_dst_set_addr(struct device *dev, · 441 unmodified lines | ||
| 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 @@ static int gsc_dst_set_addr(struct device *dev, · 2 unmodified lines | ||
| 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 @@ static irqreturn_t gsc_irq_handler(int irq, void *dev_id) · 122 unmodified lines | ||
| 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 @@ static inline bool gsc_check_drm_flip(enum drm_exynos_flip flip) · 80 unmodified lines | ||
| 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 @@ static int gsc_ippdrv_start(struct device *dev, enum drm_exynos_ipp_cmd cmd) · 143 unmodified lines | ||
| 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 @@ static int gsc_ippdrv_start(struct device *dev, enum drm_exynos_ipp_cmd cmd) · 9 unmodified lines | ||
| 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 @@ static int gsc_ippdrv_start(struct device *dev, enum drm_exynos_ipp_cmd cmd) · 29 unmodified lines | ||
| 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); |
| @@ -1696,34 +1684,25 @@ static int gsc_probe(struct platform_device *pdev) · 85 unmodified lines | ||
| 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 @@ static int gsc_probe(struct platform_device *pdev) · 1 unmodified line | ||
| 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 @@ err_ippdrv_register: · 37 unmodified lines | ||
| 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 @@ static int gsc_remove(struct platform_device *pdev) · 11 unmodified lines | ||
| 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 | } |
| @@ -6,24 +6,10 @@ · 5 unmodified lines | ||
| 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_ |
| @@ -3,24 +3,10 @@ · 2 unmodified lines | ||
| 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_ |
| @@ -3,24 +3,10 @@ · 2 unmodified lines | ||
| 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> |
| @@ -3,24 +3,10 @@ · 2 unmodified lines | ||
| 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_ |
| @@ -27,7 +27,7 @@ · 26 unmodified lines | ||
| 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 @@ static int ipp_start_property(struct exynos_drm_ippdrv *ippdrv, · 1258 unmodified lines | ||
| 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 @@ static int ipp_start_property(struct exynos_drm_ippdrv *ippdrv, · 4 unmodified lines | ||
| 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 @@ void ipp_sched_cmd(struct work_struct *work) · 177 unmodified lines | ||
| 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 @@ void ipp_sched_event(struct work_struct *work) · 206 unmodified lines | ||
| 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 @@ static int ipp_probe(struct platform_device *pdev) · 184 unmodified lines | ||
| 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 @@ static int ipp_probe(struct platform_device *pdev) · 14 unmodified lines | ||
| 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 @@ err_cmd_workq: · 34 unmodified lines | ||
| 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 | |
| @@ -1985,8 +1977,6 @@ static int ipp_remove(struct platform_device *pdev) · 19 unmodified lines | ||
| 1985 | 1977 | destroy_workqueue(ctx->cmd_workq); |
| 1986 | 1978 | destroy_workqueue(ctx->event_workq); |
| 1987 | 1979 | |
| 1988 | − kfree(ctx); | |
| 1989 | − | |
| 1990 | 1980 | return 0; |
| 1991 | 1981 | } |
| 1992 | 1982 | |
| @@ -6,24 +6,10 @@ · 5 unmodified lines | ||
| 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 @@ struct exynos_drm_ipp_ops { · 130 unmodified lines | ||
| 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 @@ struct exynos_drm_ippdrv { · 11 unmodified lines | ||
| 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 | |
| @@ -139,7 +139,7 @@ static irqreturn_t rotator_irq_handler(int irq, void *arg) · 138 unmodified lines | ||
| 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 @@ static inline bool rotator_check_drm_flip(enum drm_exynos_flip flip) · 367 unmodified lines | ||
| 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__); |
| @@ -655,34 +656,26 @@ static int rotator_probe(struct platform_device *pdev) · 136 unmodified lines | ||
| 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); |
| @@ -720,13 +713,8 @@ static int rotator_probe(struct platform_device *pdev) · 31 unmodified lines | ||
| 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 | |
| @@ -740,12 +728,8 @@ static int rotator_remove(struct platform_device *pdev) · 7 unmodified lines | ||
| 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 | } |
| @@ -5,24 +5,10 @@ · 4 unmodified lines | ||
| 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_ |
| @@ -372,34 +372,6 @@ static struct exynos_drm_manager vidi_manager = { · 371 unmodified lines | ||
| 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 @@ static void vidi_fake_vblank_handler(struct work_struct *work) · 18 unmodified lines | ||
| 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) |
| @@ -3,24 +3,10 @@ · 2 unmodified lines | ||
| 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_ |
| @@ -5,24 +5,10 @@ · 4 unmodified lines | ||
| 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_ |
| @@ -35,6 +35,7 @@ · 34 unmodified lines | ||
| 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 @@ static struct exynos_mixer_ops mixer_ops = { · 908 unmodified lines | ||
| 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 @@ static irqreturn_t mixer_irq_handler(int irq, void *arg) · 22 unmodified lines | ||
| 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)) { |
| @@ -266,7 +266,12 @@ struct drm_gem_object *i915_gem_prime_import(struct drm_device *dev, · 265 unmodified lines | ||
| 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 | } |
| @@ -193,6 +193,7 @@ struct drm_gem_object *nouveau_gem_prime_import(struct drm_device *dev, · 192 unmodified lines | ||
| 193 | 193 | if (nvbo->gem) { |
| 194 | 194 | if (nvbo->gem->dev == dev) { |
| 195 | 195 | drm_gem_object_reference(nvbo->gem); |
| 196 | + dma_buf_put(dma_buf); | |
| 196 | 197 | return nvbo->gem; |
| 197 | 198 | } |
| 198 | 199 | } |
| @@ -2646,7 +2646,7 @@ int r600_copy_blit(struct radeon_device *rdev, · 2645 unmodified lines | ||
| 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 @@ int r600_copy_dma(struct radeon_device *rdev, · 16 unmodified lines | ||
| 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 @@ int r600_copy_dma(struct radeon_device *rdev, · 16 unmodified lines | ||
| 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 | } |
| @@ -2677,16 +2677,29 @@ int r600_dma_cs_parse(struct radeon_cs_parser *p) · 2676 unmodified lines | ||
| 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", |
| @@ -1140,9 +1140,9 @@ static struct radeon_asic rv770_asic = { · 1139 unmodified lines | ||
| 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 = { |
| @@ -403,6 +403,10 @@ u32 rv770_page_flip(struct radeon_device *rdev, int crtc, u64 crtc_base); · 402 unmodified lines | ||
| 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 |
| @@ -896,6 +896,25 @@ static void radeon_check_arguments(struct radeon_device *rdev) · 895 unmodified lines | ||
| 896 | 896 | } |
| 897 | 897 | } |
| 898 | 898 | |
| 899 | +/** | |
| 900 | + * radeon_switcheroo_quirk_long_wakeup - return true if longer d3 delay is | |
| 901 | + * needed for waking up. | |
| 902 | + * | |
| 903 | + * @pdev: pci dev pointer | |
| 904 | + */ | |
| 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 | + | |
| 899 | 918 | /** |
| 900 | 919 | * radeon_switcheroo_set_state - set switcheroo state |
| 901 | 920 | * |
| @@ -910,10 +929,19 @@ static void radeon_switcheroo_set_state(struct pci_dev *pdev, enum vga_switchero · 8 unmodified lines | ||
| 910 | 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 { |
| @@ -194,6 +194,7 @@ struct drm_gem_object *radeon_gem_prime_import(struct drm_device *dev, · 193 unmodified lines | ||
| 194 | 194 | bo = dma_buf->priv; |
| 195 | 195 | if (bo->gem_base.dev == dev) { |
| 196 | 196 | drm_gem_object_reference(&bo->gem_base); |
| 197 | + dma_buf_put(dma_buf); | |
| 197 | 198 | return &bo->gem_base; |
| 198 | 199 | } |
| 199 | 200 | } |
| @@ -887,6 +887,80 @@ static int rv770_mc_init(struct radeon_device *rdev) · 886 unmodified lines | ||
| 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; |
| @@ -654,11 +654,13 @@ int ttm_bo_move_accel_cleanup(struct ttm_buffer_object *bo, · 653 unmodified lines | ||
| 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 | |
| @@ -207,7 +207,12 @@ struct drm_gem_object *omap_gem_prime_import(struct drm_device *dev, · 206 unmodified lines | ||
| 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 | } |
| @@ -6,24 +6,10 @@ · 5 unmodified lines | ||
| 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_ |
| @@ -6,24 +6,10 @@ · 5 unmodified lines | ||
| 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 @@ enum drm_exynos_flip { · 155 unmodified lines | ||
| 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 { |