You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge tag 'topic/drm-misc-2016-07-14' of git://anongit.freedesktop.org/drm-intel into drm-next
I recovered dri-devel backlog from my vacation, more misc stuff: - of_put_node fixes from Peter Chen (not all yet) - more patches from Gustavo to use kms-native drm_crtc_vblank_* funcs - docs sphinxification from Lukas Wunner - bunch of fixes all over from Dan Carpenter - more follow up work from Chris register/unregister rework in various places - vgem dma-buf export (for writing testcases) - small things all over from tons of different people * tag 'topic/drm-misc-2016-07-14' of git://anongit.freedesktop.org/drm-intel: (52 commits) drm: Don't overwrite user ioctl arg unless requested dma-buf/sync_file: improve Kconfig description for Sync Files MAINTAINERS: add entry for the Sync File Framework drm: Resurrect atomic rmfb code drm/vgem: Use PAGE_KERNEL in place of x86-specific PAGE_KERNEL_IO qxl: silence uninitialized variable warning qxl: check for kmap failures vga_switcheroo: Sphinxify docs drm: Restore double clflush on the last partial cacheline gpu: drm: rockchip_drm_drv: add missing of_node_put after calling of_parse_phandle gpu: drm: sti_vtg: add missing of_node_put after calling of_parse_phandle gpu: drm: sti_hqvdp: add missing of_node_put after calling of_parse_phandle gpu: drm: sti_vdo: add missing of_node_put after calling of_parse_phandle gpu: drm: sti_compositor: add missing of_node_put after calling of_parse_phandle drm/tilcdc: use drm_crtc_handle_vblank() drm/rcar-du: use drm_crtc_handle_vblank() drm/nouveau: use drm_crtc_handle_vblank() drm/atmel: use drm_crtc_handle_vblank() drm/armada: use drm_crtc_handle_vblank() drm: make drm_vblank_count_and_time() static ...
This commit is contained in:
@@ -280,8 +280,8 @@ private data in the open method should free it here.
|
||||
The lastclose method should restore CRTC and plane properties to default
|
||||
value, so that a subsequent open of the device will not inherit state
|
||||
from the previous user. It can also be used to execute delayed power
|
||||
switching state changes, e.g. in conjunction with the vga_switcheroo
|
||||
infrastructure (see ?). Beyond that KMS drivers should not do any
|
||||
switching state changes, e.g. in conjunction with the :ref:`vga_switcheroo`
|
||||
infrastructure. Beyond that KMS drivers should not do any
|
||||
further cleanup. Only legacy UMS drivers might need to clean up device
|
||||
state so that the vga console or an independent fbdev driver could take
|
||||
over.
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
.. _vga_switcheroo:
|
||||
|
||||
==============
|
||||
VGA Switcheroo
|
||||
==============
|
||||
@@ -94,9 +96,3 @@ Public functions
|
||||
|
||||
.. kernel-doc:: include/linux/apple-gmux.h
|
||||
:internal:
|
||||
|
||||
.. WARNING: DOCPROC directive not supported: !Cdrivers/gpu/vga/vga_switcheroo.c
|
||||
|
||||
.. WARNING: DOCPROC directive not supported: !Cinclude/linux/vga_switcheroo.h
|
||||
|
||||
.. WARNING: DOCPROC directive not supported: !Cdrivers/platform/x86/apple-gmux.c
|
||||
|
||||
+11
@@ -3779,6 +3779,17 @@ F: include/linux/*fence.h
|
||||
F: Documentation/dma-buf-sharing.txt
|
||||
T: git git://git.linaro.org/people/sumitsemwal/linux-dma-buf.git
|
||||
|
||||
SYNC FILE FRAMEWORK
|
||||
M: Sumit Semwal <sumit.semwal@linaro.org>
|
||||
R: Gustavo Padovan <gustavo@padovan.org>
|
||||
S: Maintained
|
||||
L: linux-media@vger.kernel.org
|
||||
L: dri-devel@lists.freedesktop.org
|
||||
F: drivers/dma-buf/sync_file.c
|
||||
F: include/linux/sync_file.h
|
||||
F: Documentation/sync_file.txt
|
||||
T: git git://git.linaro.org/people/sumitsemwal/linux-dma-buf.git
|
||||
|
||||
DMA GENERIC OFFLOAD ENGINE SUBSYSTEM
|
||||
M: Vinod Koul <vinod.koul@intel.com>
|
||||
L: dmaengine@vger.kernel.org
|
||||
|
||||
+12
-3
@@ -1,11 +1,20 @@
|
||||
menu "DMABUF options"
|
||||
|
||||
config SYNC_FILE
|
||||
bool "sync_file support for fences"
|
||||
bool "Explicit Synchronization Framework"
|
||||
default n
|
||||
select ANON_INODES
|
||||
select DMA_SHARED_BUFFER
|
||||
---help---
|
||||
This option enables the fence framework synchronization to export
|
||||
sync_files to userspace that can represent one or more fences.
|
||||
The Sync File Framework adds explicit syncronization via
|
||||
userspace. It enables send/receive 'struct fence' objects to/from
|
||||
userspace via Sync File fds for synchronization between drivers via
|
||||
userspace components. It has been ported from Android.
|
||||
|
||||
The first and main user for this is graphics in which a fence is
|
||||
associated with a buffer. When a job is submitted to the GPU a fence
|
||||
is attached to the buffer and is transferred via userspace, using Sync
|
||||
Files fds, to the DRM driver for example. More details at
|
||||
Documentation/sync_file.txt.
|
||||
|
||||
endmenu
|
||||
|
||||
@@ -1712,6 +1712,7 @@ void amdgpu_device_fini(struct amdgpu_device *adev)
|
||||
amdgpu_bo_evict_vram(adev);
|
||||
amdgpu_ib_pool_fini(adev);
|
||||
amdgpu_fence_driver_fini(adev);
|
||||
drm_crtc_force_disable_all(adev->ddev);
|
||||
amdgpu_fbdev_fini(adev);
|
||||
r = amdgpu_fini(adev);
|
||||
kfree(adev->ip_block_status);
|
||||
|
||||
@@ -60,7 +60,10 @@ int amdgpu_driver_unload_kms(struct drm_device *dev)
|
||||
if (adev->rmmio == NULL)
|
||||
goto done_free;
|
||||
|
||||
pm_runtime_get_sync(dev->dev);
|
||||
if (amdgpu_device_is_px(dev)) {
|
||||
pm_runtime_get_sync(dev->dev);
|
||||
pm_runtime_forbid(dev->dev);
|
||||
}
|
||||
|
||||
amdgpu_amdkfd_device_fini(adev);
|
||||
|
||||
@@ -135,9 +138,12 @@ int amdgpu_driver_load_kms(struct drm_device *dev, unsigned long flags)
|
||||
}
|
||||
|
||||
out:
|
||||
if (r)
|
||||
if (r) {
|
||||
/* balance pm_runtime_get_sync in amdgpu_driver_unload_kms */
|
||||
if (adev->rmmio && amdgpu_device_is_px(dev))
|
||||
pm_runtime_put_noidle(dev->dev);
|
||||
amdgpu_driver_unload_kms(dev);
|
||||
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
@@ -410,7 +410,7 @@ static void armada_drm_crtc_irq(struct armada_crtc *dcrtc, u32 stat)
|
||||
DRM_ERROR("graphics underflow on crtc %u\n", dcrtc->num);
|
||||
|
||||
if (stat & VSYNC_IRQ)
|
||||
drm_handle_vblank(dcrtc->crtc.dev, dcrtc->num);
|
||||
drm_crtc_handle_vblank(&dcrtc->crtc);
|
||||
|
||||
spin_lock(&dcrtc->irq_lock);
|
||||
ovl_plane = dcrtc->plane;
|
||||
|
||||
@@ -383,7 +383,7 @@ static void atmel_hlcdc_crtc_finish_page_flip(struct atmel_hlcdc_crtc *crtc)
|
||||
|
||||
void atmel_hlcdc_crtc_irq(struct drm_crtc *c)
|
||||
{
|
||||
drm_handle_vblank(c->dev, 0);
|
||||
drm_crtc_handle_vblank(c);
|
||||
atmel_hlcdc_crtc_finish_page_flip(drm_crtc_to_atmel_hlcdc_crtc(c));
|
||||
}
|
||||
|
||||
|
||||
@@ -1589,6 +1589,72 @@ void drm_atomic_clean_old_fb(struct drm_device *dev,
|
||||
}
|
||||
EXPORT_SYMBOL(drm_atomic_clean_old_fb);
|
||||
|
||||
int drm_atomic_remove_fb(struct drm_framebuffer *fb)
|
||||
{
|
||||
struct drm_modeset_acquire_ctx ctx;
|
||||
struct drm_device *dev = fb->dev;
|
||||
struct drm_atomic_state *state;
|
||||
struct drm_plane *plane;
|
||||
int ret = 0;
|
||||
unsigned plane_mask;
|
||||
|
||||
state = drm_atomic_state_alloc(dev);
|
||||
if (!state)
|
||||
return -ENOMEM;
|
||||
|
||||
drm_modeset_acquire_init(&ctx, 0);
|
||||
state->acquire_ctx = &ctx;
|
||||
|
||||
retry:
|
||||
plane_mask = 0;
|
||||
ret = drm_modeset_lock_all_ctx(dev, &ctx);
|
||||
if (ret)
|
||||
goto unlock;
|
||||
|
||||
drm_for_each_plane(plane, dev) {
|
||||
struct drm_plane_state *plane_state;
|
||||
|
||||
if (plane->state->fb != fb)
|
||||
continue;
|
||||
|
||||
plane_state = drm_atomic_get_plane_state(state, plane);
|
||||
if (IS_ERR(plane_state)) {
|
||||
ret = PTR_ERR(plane_state);
|
||||
goto unlock;
|
||||
}
|
||||
|
||||
drm_atomic_set_fb_for_plane(plane_state, NULL);
|
||||
ret = drm_atomic_set_crtc_for_plane(plane_state, NULL);
|
||||
if (ret)
|
||||
goto unlock;
|
||||
|
||||
plane_mask |= BIT(drm_plane_index(plane));
|
||||
|
||||
plane->old_fb = plane->fb;
|
||||
plane->fb = NULL;
|
||||
}
|
||||
|
||||
if (plane_mask)
|
||||
ret = drm_atomic_commit(state);
|
||||
|
||||
unlock:
|
||||
if (plane_mask)
|
||||
drm_atomic_clean_old_fb(dev, plane_mask, ret);
|
||||
|
||||
if (ret == -EDEADLK) {
|
||||
drm_modeset_backoff(&ctx);
|
||||
goto retry;
|
||||
}
|
||||
|
||||
if (ret || !plane_mask)
|
||||
drm_atomic_state_free(state);
|
||||
|
||||
drm_modeset_drop_locks(&ctx);
|
||||
drm_modeset_acquire_fini(&ctx);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int drm_mode_atomic_ioctl(struct drm_device *dev,
|
||||
void *data, struct drm_file *file_priv)
|
||||
{
|
||||
|
||||
@@ -136,6 +136,7 @@ drm_clflush_virt_range(void *addr, unsigned long length)
|
||||
mb();
|
||||
for (; addr < end; addr += size)
|
||||
clflushopt(addr);
|
||||
clflushopt(end - 1); /* force serialisation */
|
||||
mb();
|
||||
return;
|
||||
}
|
||||
|
||||
+53
-25
@@ -396,6 +396,51 @@ void drm_mode_object_reference(struct drm_mode_object *obj)
|
||||
}
|
||||
EXPORT_SYMBOL(drm_mode_object_reference);
|
||||
|
||||
/**
|
||||
* drm_crtc_force_disable - Forcibly turn off a CRTC
|
||||
* @crtc: CRTC to turn off
|
||||
*
|
||||
* Returns:
|
||||
* Zero on success, error code on failure.
|
||||
*/
|
||||
int drm_crtc_force_disable(struct drm_crtc *crtc)
|
||||
{
|
||||
struct drm_mode_set set = {
|
||||
.crtc = crtc,
|
||||
};
|
||||
|
||||
return drm_mode_set_config_internal(&set);
|
||||
}
|
||||
EXPORT_SYMBOL(drm_crtc_force_disable);
|
||||
|
||||
/**
|
||||
* drm_crtc_force_disable_all - Forcibly turn off all enabled CRTCs
|
||||
* @dev: DRM device whose CRTCs to turn off
|
||||
*
|
||||
* Drivers may want to call this on unload to ensure that all displays are
|
||||
* unlit and the GPU is in a consistent, low power state. Takes modeset locks.
|
||||
*
|
||||
* Returns:
|
||||
* Zero on success, error code on failure.
|
||||
*/
|
||||
int drm_crtc_force_disable_all(struct drm_device *dev)
|
||||
{
|
||||
struct drm_crtc *crtc;
|
||||
int ret = 0;
|
||||
|
||||
drm_modeset_lock_all(dev);
|
||||
drm_for_each_crtc(crtc, dev)
|
||||
if (crtc->enabled) {
|
||||
ret = drm_crtc_force_disable(crtc);
|
||||
if (ret)
|
||||
goto out;
|
||||
}
|
||||
out:
|
||||
drm_modeset_unlock_all(dev);
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(drm_crtc_force_disable_all);
|
||||
|
||||
static void drm_framebuffer_free(struct kref *kref)
|
||||
{
|
||||
struct drm_framebuffer *fb =
|
||||
@@ -544,8 +589,6 @@ void drm_framebuffer_remove(struct drm_framebuffer *fb)
|
||||
struct drm_device *dev;
|
||||
struct drm_crtc *crtc;
|
||||
struct drm_plane *plane;
|
||||
struct drm_mode_set set;
|
||||
int ret;
|
||||
|
||||
if (!fb)
|
||||
return;
|
||||
@@ -570,16 +613,17 @@ void drm_framebuffer_remove(struct drm_framebuffer *fb)
|
||||
* in this manner.
|
||||
*/
|
||||
if (drm_framebuffer_read_refcount(fb) > 1) {
|
||||
if (dev->mode_config.funcs->atomic_commit) {
|
||||
drm_atomic_remove_fb(fb);
|
||||
goto out;
|
||||
}
|
||||
|
||||
drm_modeset_lock_all(dev);
|
||||
/* remove from any CRTC */
|
||||
drm_for_each_crtc(crtc, dev) {
|
||||
if (crtc->primary->fb == fb) {
|
||||
/* should turn off the crtc */
|
||||
memset(&set, 0, sizeof(struct drm_mode_set));
|
||||
set.crtc = crtc;
|
||||
set.fb = NULL;
|
||||
ret = drm_mode_set_config_internal(&set);
|
||||
if (ret)
|
||||
if (drm_crtc_force_disable(crtc))
|
||||
DRM_ERROR("failed to reset crtc %p when fb was deleted\n", crtc);
|
||||
}
|
||||
}
|
||||
@@ -591,6 +635,7 @@ void drm_framebuffer_remove(struct drm_framebuffer *fb)
|
||||
drm_modeset_unlock_all(dev);
|
||||
}
|
||||
|
||||
out:
|
||||
drm_framebuffer_unreference(fb);
|
||||
}
|
||||
EXPORT_SYMBOL(drm_framebuffer_remove);
|
||||
@@ -1068,23 +1113,7 @@ void drm_connector_unregister(struct drm_connector *connector)
|
||||
}
|
||||
EXPORT_SYMBOL(drm_connector_unregister);
|
||||
|
||||
/**
|
||||
* drm_connector_register_all - register all connectors
|
||||
* @dev: drm device
|
||||
*
|
||||
* This function registers all connectors in sysfs and other places so that
|
||||
* userspace can start to access them. drm_connector_register_all() is called
|
||||
* automatically from drm_dev_register() to complete the device registration,
|
||||
* if they don't call drm_connector_register() on each connector individually.
|
||||
*
|
||||
* When a device is unplugged and should be removed from userspace access,
|
||||
* call drm_connector_unregister_all(), which is the inverse of this
|
||||
* function.
|
||||
*
|
||||
* Returns:
|
||||
* Zero on success, error code on failure.
|
||||
*/
|
||||
int drm_connector_register_all(struct drm_device *dev)
|
||||
static int drm_connector_register_all(struct drm_device *dev)
|
||||
{
|
||||
struct drm_connector *connector;
|
||||
int ret;
|
||||
@@ -1106,7 +1135,6 @@ err:
|
||||
drm_connector_unregister_all(dev);
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(drm_connector_register_all);
|
||||
|
||||
/**
|
||||
* drm_connector_unregister_all - unregister connector userspace interfaces
|
||||
|
||||
@@ -125,6 +125,7 @@ int drm_atomic_get_property(struct drm_mode_object *obj,
|
||||
struct drm_property *property, uint64_t *val);
|
||||
int drm_mode_atomic_ioctl(struct drm_device *dev,
|
||||
void *data, struct drm_file *file_priv);
|
||||
int drm_atomic_remove_fb(struct drm_framebuffer *fb);
|
||||
|
||||
int drm_modeset_register_all(struct drm_device *dev);
|
||||
void drm_modeset_unregister_all(struct drm_device *dev);
|
||||
|
||||
@@ -355,8 +355,7 @@ int drm_dp_aux_dev_init(void)
|
||||
|
||||
drm_dp_aux_dev_class = class_create(THIS_MODULE, "drm_dp_aux_dev");
|
||||
if (IS_ERR(drm_dp_aux_dev_class)) {
|
||||
res = PTR_ERR(drm_dp_aux_dev_class);
|
||||
goto out;
|
||||
return PTR_ERR(drm_dp_aux_dev_class);
|
||||
}
|
||||
drm_dp_aux_dev_class->dev_groups = drm_dp_aux_groups;
|
||||
|
||||
|
||||
@@ -362,9 +362,7 @@ EXPORT_SYMBOL(drm_put_dev);
|
||||
void drm_unplug_dev(struct drm_device *dev)
|
||||
{
|
||||
/* for a USB device */
|
||||
drm_minor_unregister(dev, DRM_MINOR_LEGACY);
|
||||
drm_minor_unregister(dev, DRM_MINOR_RENDER);
|
||||
drm_minor_unregister(dev, DRM_MINOR_CONTROL);
|
||||
drm_dev_unregister(dev);
|
||||
|
||||
mutex_lock(&drm_global_mutex);
|
||||
|
||||
|
||||
+24
-30
@@ -648,7 +648,7 @@ long drm_ioctl(struct file *filp,
|
||||
int retcode = -EINVAL;
|
||||
char stack_kdata[128];
|
||||
char *kdata = NULL;
|
||||
unsigned int usize, asize, drv_size;
|
||||
unsigned int in_size, out_size, drv_size, ksize;
|
||||
bool is_driver_ioctl;
|
||||
|
||||
dev = file_priv->minor->dev;
|
||||
@@ -671,9 +671,12 @@ long drm_ioctl(struct file *filp,
|
||||
}
|
||||
|
||||
drv_size = _IOC_SIZE(ioctl->cmd);
|
||||
usize = _IOC_SIZE(cmd);
|
||||
asize = max(usize, drv_size);
|
||||
cmd = ioctl->cmd;
|
||||
out_size = in_size = _IOC_SIZE(cmd);
|
||||
if ((cmd & ioctl->cmd & IOC_IN) == 0)
|
||||
in_size = 0;
|
||||
if ((cmd & ioctl->cmd & IOC_OUT) == 0)
|
||||
out_size = 0;
|
||||
ksize = max(max(in_size, out_size), drv_size);
|
||||
|
||||
DRM_DEBUG("pid=%d, dev=0x%lx, auth=%d, %s\n",
|
||||
task_pid_nr(current),
|
||||
@@ -693,30 +696,24 @@ long drm_ioctl(struct file *filp,
|
||||
if (unlikely(retcode))
|
||||
goto err_i1;
|
||||
|
||||
if (cmd & (IOC_IN | IOC_OUT)) {
|
||||
if (asize <= sizeof(stack_kdata)) {
|
||||
kdata = stack_kdata;
|
||||
} else {
|
||||
kdata = kmalloc(asize, GFP_KERNEL);
|
||||
if (!kdata) {
|
||||
retcode = -ENOMEM;
|
||||
goto err_i1;
|
||||
}
|
||||
}
|
||||
if (asize > usize)
|
||||
memset(kdata + usize, 0, asize - usize);
|
||||
}
|
||||
|
||||
if (cmd & IOC_IN) {
|
||||
if (copy_from_user(kdata, (void __user *)arg,
|
||||
usize) != 0) {
|
||||
retcode = -EFAULT;
|
||||
if (ksize <= sizeof(stack_kdata)) {
|
||||
kdata = stack_kdata;
|
||||
} else {
|
||||
kdata = kmalloc(ksize, GFP_KERNEL);
|
||||
if (!kdata) {
|
||||
retcode = -ENOMEM;
|
||||
goto err_i1;
|
||||
}
|
||||
} else if (cmd & IOC_OUT) {
|
||||
memset(kdata, 0, usize);
|
||||
}
|
||||
|
||||
if (copy_from_user(kdata, (void __user *)arg, in_size) != 0) {
|
||||
retcode = -EFAULT;
|
||||
goto err_i1;
|
||||
}
|
||||
|
||||
if (ksize > in_size)
|
||||
memset(kdata + in_size, 0, ksize - in_size);
|
||||
|
||||
/* Enforce sane locking for kms driver ioctls. Core ioctls are
|
||||
* too messy still. */
|
||||
if ((drm_core_check_feature(dev, DRIVER_MODESET) && is_driver_ioctl) ||
|
||||
@@ -728,11 +725,8 @@ long drm_ioctl(struct file *filp,
|
||||
mutex_unlock(&drm_global_mutex);
|
||||
}
|
||||
|
||||
if (cmd & IOC_OUT) {
|
||||
if (copy_to_user((void __user *)arg, kdata,
|
||||
usize) != 0)
|
||||
retcode = -EFAULT;
|
||||
}
|
||||
if (copy_to_user((void __user *)arg, kdata, out_size) != 0)
|
||||
retcode = -EFAULT;
|
||||
|
||||
err_i1:
|
||||
if (!ioctl)
|
||||
@@ -759,7 +753,7 @@ EXPORT_SYMBOL(drm_ioctl);
|
||||
* shouldn't be used by any drivers.
|
||||
*
|
||||
* Returns:
|
||||
* True if the @nr corresponds to a DRM core ioctl numer, false otherwise.
|
||||
* True if the @nr corresponds to a DRM core ioctl number, false otherwise.
|
||||
*/
|
||||
bool drm_ioctl_flags(unsigned int nr, unsigned int *flags)
|
||||
{
|
||||
|
||||
@@ -532,7 +532,7 @@ int drm_irq_uninstall(struct drm_device *dev)
|
||||
|
||||
/*
|
||||
* Wake up any waiters so they don't hang. This is just to paper over
|
||||
* isssues for UMS drivers which aren't in full control of their
|
||||
* issues for UMS drivers which aren't in full control of their
|
||||
* vblank/irq handling. KMS drivers must ensure that vblanks are all
|
||||
* disabled when uninstalling the irq handler.
|
||||
*/
|
||||
@@ -594,7 +594,7 @@ int drm_control(struct drm_device *dev, void *data,
|
||||
return 0;
|
||||
if (drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
return 0;
|
||||
/* UMS was only ever support on pci devices. */
|
||||
/* UMS was only ever supported on pci devices. */
|
||||
if (WARN_ON(!dev->pdev))
|
||||
return -EINVAL;
|
||||
|
||||
@@ -945,8 +945,8 @@ EXPORT_SYMBOL(drm_crtc_vblank_count);
|
||||
*
|
||||
* This is the legacy version of drm_crtc_vblank_count_and_time().
|
||||
*/
|
||||
u32 drm_vblank_count_and_time(struct drm_device *dev, unsigned int pipe,
|
||||
struct timeval *vblanktime)
|
||||
static u32 drm_vblank_count_and_time(struct drm_device *dev, unsigned int pipe,
|
||||
struct timeval *vblanktime)
|
||||
{
|
||||
struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
|
||||
u32 vblank_count;
|
||||
@@ -963,7 +963,6 @@ u32 drm_vblank_count_and_time(struct drm_device *dev, unsigned int pipe,
|
||||
|
||||
return vblank_count;
|
||||
}
|
||||
EXPORT_SYMBOL(drm_vblank_count_and_time);
|
||||
|
||||
/**
|
||||
* drm_crtc_vblank_count_and_time - retrieve "cooked" vblank counter value
|
||||
@@ -975,8 +974,6 @@ EXPORT_SYMBOL(drm_vblank_count_and_time);
|
||||
* vblank events since the system was booted, including lost events due to
|
||||
* modesetting activity. Returns corresponding system timestamp of the time
|
||||
* of the vblank interval that corresponds to the current vblank counter value.
|
||||
*
|
||||
* This is the native KMS version of drm_vblank_count_and_time().
|
||||
*/
|
||||
u32 drm_crtc_vblank_count_and_time(struct drm_crtc *crtc,
|
||||
struct timeval *vblanktime)
|
||||
@@ -1588,12 +1585,6 @@ static int drm_queue_vblank_event(struct drm_device *dev, unsigned int pipe,
|
||||
|
||||
seq = drm_vblank_count_and_time(dev, pipe, &now);
|
||||
|
||||
if ((vblwait->request.type & _DRM_VBLANK_NEXTONMISS) &&
|
||||
(seq - vblwait->request.sequence) <= (1 << 23)) {
|
||||
vblwait->request.sequence = seq + 1;
|
||||
vblwait->reply.sequence = vblwait->request.sequence;
|
||||
}
|
||||
|
||||
DRM_DEBUG("event on vblank count %d, current %d, crtc %u\n",
|
||||
vblwait->request.sequence, seq, pipe);
|
||||
|
||||
@@ -1690,6 +1681,11 @@ int drm_wait_vblank(struct drm_device *dev, void *data,
|
||||
goto done;
|
||||
}
|
||||
|
||||
if ((flags & _DRM_VBLANK_NEXTONMISS) &&
|
||||
(seq - vblwait->request.sequence) <= (1 << 23)) {
|
||||
vblwait->request.sequence = seq + 1;
|
||||
}
|
||||
|
||||
if (flags & _DRM_VBLANK_EVENT) {
|
||||
/* must hold on to the vblank ref until the event fires
|
||||
* drm_vblank_put will be called asynchronously
|
||||
@@ -1697,11 +1693,6 @@ int drm_wait_vblank(struct drm_device *dev, void *data,
|
||||
return drm_queue_vblank_event(dev, pipe, vblwait, file_priv);
|
||||
}
|
||||
|
||||
if ((flags & _DRM_VBLANK_NEXTONMISS) &&
|
||||
(seq - vblwait->request.sequence) <= (1<<23)) {
|
||||
vblwait->request.sequence = seq + 1;
|
||||
}
|
||||
|
||||
DRM_DEBUG("waiting on vblank count %d, crtc %u\n",
|
||||
vblwait->request.sequence, pipe);
|
||||
vblank->last_wait = vblwait->request.sequence;
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
# include <asm/agp.h>
|
||||
#else
|
||||
# ifdef __powerpc__
|
||||
# define PAGE_AGP __pgprot(_PAGE_KERNEL | _PAGE_NO_CACHE)
|
||||
# define PAGE_AGP pgprot_noncached_wc(PAGE_KERNEL)
|
||||
# else
|
||||
# define PAGE_AGP PAGE_KERNEL
|
||||
# endif
|
||||
|
||||
@@ -999,17 +999,17 @@ int mipi_dsi_dcs_set_tear_on(struct mipi_dsi_device *dsi,
|
||||
EXPORT_SYMBOL(mipi_dsi_dcs_set_tear_on);
|
||||
|
||||
/**
|
||||
* mipi_dsi_set_tear_scanline() - turn on the display module's Tearing Effect
|
||||
* output signal on the TE signal line when display module reaches line N
|
||||
* defined by STS[n:0].
|
||||
* mipi_dsi_dcs_set_tear_scanline() - set the scanline to use as trigger for
|
||||
* the Tearing Effect output signal of the display module
|
||||
* @dsi: DSI peripheral device
|
||||
* @param: STS[10:0]
|
||||
* @scanline: scanline to use as trigger
|
||||
*
|
||||
* Return: 0 on success or a negative error code on failure
|
||||
*/
|
||||
int mipi_dsi_set_tear_scanline(struct mipi_dsi_device *dsi, u16 param)
|
||||
int mipi_dsi_dcs_set_tear_scanline(struct mipi_dsi_device *dsi, u16 scanline)
|
||||
{
|
||||
u8 payload[3] = { MIPI_DCS_SET_TEAR_SCANLINE, param >> 8,
|
||||
param & 0xff };
|
||||
u8 payload[3] = { MIPI_DCS_SET_TEAR_SCANLINE, scanline >> 8,
|
||||
scanline & 0xff };
|
||||
ssize_t err;
|
||||
|
||||
err = mipi_dsi_generic_write(dsi, payload, sizeof(payload));
|
||||
@@ -1018,7 +1018,7 @@ int mipi_dsi_set_tear_scanline(struct mipi_dsi_device *dsi, u16 param)
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(mipi_dsi_set_tear_scanline);
|
||||
EXPORT_SYMBOL(mipi_dsi_dcs_set_tear_scanline);
|
||||
|
||||
/**
|
||||
* mipi_dsi_dcs_set_pixel_format() - sets the pixel format for the RGB image
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
static inline void *drm_vmalloc_dma(unsigned long size)
|
||||
{
|
||||
#if defined(__powerpc__) && defined(CONFIG_NOT_COHERENT_CACHE)
|
||||
return __vmalloc(size, GFP_KERNEL, PAGE_KERNEL | _PAGE_NO_CACHE);
|
||||
return __vmalloc(size, GFP_KERNEL, pgprot_noncached_wc(PAGE_KERNEL));
|
||||
#else
|
||||
return vmalloc_32(size);
|
||||
#endif
|
||||
|
||||
@@ -80,7 +80,7 @@ static pgprot_t drm_dma_prot(uint32_t map_type, struct vm_area_struct *vma)
|
||||
pgprot_t tmp = vm_get_page_prot(vma->vm_flags);
|
||||
|
||||
#if defined(__powerpc__) && defined(CONFIG_NOT_COHERENT_CACHE)
|
||||
tmp |= _PAGE_NO_CACHE;
|
||||
tmp = pgprot_noncached_wc(tmp);
|
||||
#endif
|
||||
return tmp;
|
||||
}
|
||||
@@ -593,7 +593,7 @@ static int drm_mmap_locked(struct file *filp, struct vm_area_struct *vma)
|
||||
* pages and mappings in fault()
|
||||
*/
|
||||
#if defined(__powerpc__)
|
||||
pgprot_val(vma->vm_page_prot) |= _PAGE_NO_CACHE;
|
||||
vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
|
||||
#endif
|
||||
vma->vm_ops = &drm_vm_ops;
|
||||
break;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user