Skip to content

Commit

Permalink
Merge tag 'drm-misc-next-2016-11-16' of git://anongit.freedesktop.org…
Browse files Browse the repository at this point in the history
…/git/drm-misc into drm-next

Another pile of misc:
- Explicit fencing for atomic! Big thanks to Gustavo, Sean, Rob 3x, Brian
  and anyone else I've forgotten to make this happen.
- roll out fbdev helper ops to drivers (Stefan Christ)
- last bits of drm_crtc split-up&kerneldoc
- some drm_irq.c crtc functions cleanup
- prepare_fb helper for cma, works correctly with explicit fencing (Marek
  Vasut)
- misc small patches all over

* tag 'drm-misc-next-2016-11-16' of git://anongit.freedesktop.org/git/drm-misc: (51 commits)
  drm/fence: add out-fences support
  drm/fence: add fence timeline to drm_crtc
  drm/fence: add in-fences support
  drm/bridge: analogix_dp: return error if transfer none byte
  drm: drm_irq.h header cleanup
  drm/irq: Unexport drm_vblank_on/off
  drm/irq: Unexport drm_vblank_count
  drm/irq: Make drm_vblank_pre/post_modeset internal
  drm/nouveau: Use drm_crtc_vblank_off/on
  drm/amdgpu: Use drm_crtc_vblank_on/off for dce6
  drm/color: document NULL values and default settings better
  drm: Drop externs from drm_crtc.h
  drm: Move tile group code into drm_connector.c
  drm: Extract drm_mode_config.[hc]
  Revert "drm: Add aspect ratio parsing in DRM layer"
  Revert "drm: Add and handle new aspect ratios in DRM layer"
  drm/print: Move kerneldoc next to definition
  drm: Consolidate dumb buffer docs
  drm: Clean up kerneldoc for struct drm_driver
  drm: Extract drm_drv.h
  ...
  • Loading branch information
Dave Airlie committed Nov 16, 2016
2 parents 4473904 + beaf5af commit 318313d
Show file tree
Hide file tree
Showing 80 changed files with 2,499 additions and 2,231 deletions.
8 changes: 4 additions & 4 deletions Documentation/driver-api/infrastructure.rst
Original file line number Diff line number Diff line change
Expand Up @@ -86,10 +86,10 @@ reservation
fence
~~~~~

.. kernel-doc:: drivers/dma-buf/fence.c
.. kernel-doc:: drivers/dma-buf/dma-fence.c
:export:

.. kernel-doc:: include/linux/fence.h
.. kernel-doc:: include/linux/dma-fence.h
:internal:

.. kernel-doc:: drivers/dma-buf/seqno-fence.c
Expand All @@ -98,10 +98,10 @@ fence
.. kernel-doc:: include/linux/seqno-fence.h
:internal:

.. kernel-doc:: drivers/dma-buf/fence-array.c
.. kernel-doc:: drivers/dma-buf/dma-fence-array.c
:export:

.. kernel-doc:: include/linux/fence-array.h
.. kernel-doc:: include/linux/dma-fence-array.h
:internal:

.. kernel-doc:: drivers/dma-buf/reservation.c
Expand Down
5 changes: 4 additions & 1 deletion Documentation/gpu/drm-internals.rst
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,9 @@ Device Instance and Driver Handling
.. kernel-doc:: drivers/gpu/drm/drm_drv.c
:export:

.. kernel-doc:: include/drm/drm_drv.h
:internal:

Driver Load
-----------

Expand Down Expand Up @@ -363,7 +366,7 @@ Printer
.. kernel-doc:: include/drm/drm_print.h
:internal:

.. kernel-doc:: include/drm/drm_print.h
.. kernel-doc:: drivers/gpu/drm/drm_print.c
:export:


Expand Down
8 changes: 0 additions & 8 deletions Documentation/gpu/drm-kms-helpers.rst
Original file line number Diff line number Diff line change
Expand Up @@ -261,14 +261,6 @@ Plane Helper Reference
.. kernel-doc:: drivers/gpu/drm/drm_plane_helper.c
:export:

Tile group
==========

# FIXME: This should probably be moved into a property documentation section

.. kernel-doc:: drivers/gpu/drm/drm_crtc.c
:doc: Tile group

Auxiliary Modeset Helpers
=========================

Expand Down
80 changes: 28 additions & 52 deletions Documentation/gpu/drm-kms.rst
Original file line number Diff line number Diff line change
Expand Up @@ -15,25 +15,24 @@ be setup by initializing the following fields.
- struct drm_mode_config_funcs \*funcs;
Mode setting functions.

Modeset Base Object Abstraction
===============================
Mode Configuration

.. kernel-doc:: include/drm/drm_mode_object.h
:internal:
KMS Core Structures and Functions
=================================

.. kernel-doc:: drivers/gpu/drm/drm_mode_object.c
.. kernel-doc:: drivers/gpu/drm/drm_mode_config.c
:export:

KMS Data Structures
===================

.. kernel-doc:: include/drm/drm_crtc.h
.. kernel-doc:: include/drm/drm_mode_config.h
:internal:

KMS API Functions
=================
Modeset Base Object Abstraction
===============================

.. kernel-doc:: drivers/gpu/drm/drm_crtc.c
.. kernel-doc:: include/drm/drm_mode_object.h
:internal:

.. kernel-doc:: drivers/gpu/drm/drm_mode_object.c
:export:

Atomic Mode Setting Function Reference
Expand All @@ -45,6 +44,15 @@ Atomic Mode Setting Function Reference
.. kernel-doc:: include/drm/drm_atomic.h
:internal:

CRTC Abstraction
================

.. kernel-doc:: drivers/gpu/drm/drm_crtc.c
:export:

.. kernel-doc:: include/drm/drm_crtc.h
:internal:

Frame Buffer Abstraction
========================

Expand Down Expand Up @@ -72,46 +80,8 @@ DRM Format Handling
Dumb Buffer Objects
===================

The KMS API doesn't standardize backing storage object creation and
leaves it to driver-specific ioctls. Furthermore actually creating a
buffer object even for GEM-based drivers is done through a
driver-specific ioctl - GEM only has a common userspace interface for
sharing and destroying objects. While not an issue for full-fledged
graphics stacks that include device-specific userspace components (in
libdrm for instance), this limit makes DRM-based early boot graphics
unnecessarily complex.

Dumb objects partly alleviate the problem by providing a standard API to
create dumb buffers suitable for scanout, which can then be used to
create KMS frame buffers.

To support dumb objects drivers must implement the dumb_create,
dumb_destroy and dumb_map_offset operations.

- int (\*dumb_create)(struct drm_file \*file_priv, struct
drm_device \*dev, struct drm_mode_create_dumb \*args);
The dumb_create operation creates a driver object (GEM or TTM
handle) suitable for scanout based on the width, height and depth
from the struct :c:type:`struct drm_mode_create_dumb
<drm_mode_create_dumb>` argument. It fills the argument's
handle, pitch and size fields with a handle for the newly created
object and its line pitch and size in bytes.

- int (\*dumb_destroy)(struct drm_file \*file_priv, struct
drm_device \*dev, uint32_t handle);
The dumb_destroy operation destroys a dumb object created by
dumb_create.

- int (\*dumb_map_offset)(struct drm_file \*file_priv, struct
drm_device \*dev, uint32_t handle, uint64_t \*offset);
The dumb_map_offset operation associates an mmap fake offset with
the object given by the handle and returns it. Drivers must use the
:c:func:`drm_gem_create_mmap_offset()` function to associate
the fake offset as described in ?.

Note that dumb objects may not be used for gpu acceleration, as has been
attempted on some ARM embedded platforms. Such drivers really must have
a hardware-specific ioctl to allocate suitable buffer objects.
.. kernel-doc:: drivers/gpu/drm/drm_dumb_buffers.c
:doc: overview

Plane Abstraction
=================
Expand Down Expand Up @@ -311,6 +281,12 @@ Color Management Properties
.. kernel-doc:: drivers/gpu/drm/drm_color_mgmt.c
:export:

Tile Group Property
-------------------

.. kernel-doc:: drivers/gpu/drm/drm_connector.c
:doc: Tile group

Existing KMS Properties
-----------------------

Expand Down
6 changes: 3 additions & 3 deletions Documentation/gpu/i915.rst
Original file line number Diff line number Diff line change
Expand Up @@ -258,19 +258,19 @@ Global GTT views
GTT Fences and Swizzling
------------------------

.. kernel-doc:: drivers/gpu/drm/i915/i915_gem_fence.c
.. kernel-doc:: drivers/gpu/drm/i915/i915_gem_fence_reg.c
:internal:

Global GTT Fence Handling
~~~~~~~~~~~~~~~~~~~~~~~~~

.. kernel-doc:: drivers/gpu/drm/i915/i915_gem_fence.c
.. kernel-doc:: drivers/gpu/drm/i915/i915_gem_fence_reg.c
:doc: fence register handling

Hardware Tiling and Swizzling Details
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. kernel-doc:: drivers/gpu/drm/i915/i915_gem_fence.c
.. kernel-doc:: drivers/gpu/drm/i915/i915_gem_fence_reg.c
:doc: tiling swizzling details

Object Tiling IOCTLs
Expand Down
1 change: 1 addition & 0 deletions drivers/gpu/drm/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ menuconfig DRM
select I2C
select I2C_ALGOBIT
select DMA_SHARED_BUFFER
select SYNC_FILE
help
Kernel-level support for the Direct Rendering Infrastructure (DRI)
introduced in XFree86 4.0. If you say Y here, you need to select
Expand Down
3 changes: 2 additions & 1 deletion drivers/gpu/drm/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ drm-y := drm_auth.o drm_bufs.o drm_cache.o \
drm_modeset_lock.o drm_atomic.o drm_bridge.o \
drm_framebuffer.o drm_connector.o drm_blend.o \
drm_encoder.o drm_mode_object.o drm_property.o \
drm_plane.o drm_color_mgmt.o drm_print.o
drm_plane.o drm_color_mgmt.o drm_print.o \
drm_dumb_buffers.o drm_mode_config.o

drm-$(CONFIG_COMPAT) += drm_ioc32.o
drm-$(CONFIG_DRM_GEM_CMA_HELPER) += drm_gem_cma_helper.o
Expand Down
8 changes: 1 addition & 7 deletions drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,18 +75,12 @@ amdgpufb_release(struct fb_info *info, int user)

static struct fb_ops amdgpufb_ops = {
.owner = THIS_MODULE,
DRM_FB_HELPER_DEFAULT_OPS,
.fb_open = amdgpufb_open,
.fb_release = amdgpufb_release,
.fb_check_var = drm_fb_helper_check_var,
.fb_set_par = drm_fb_helper_set_par,
.fb_fillrect = drm_fb_helper_cfb_fillrect,
.fb_copyarea = drm_fb_helper_cfb_copyarea,
.fb_imageblit = drm_fb_helper_cfb_imageblit,
.fb_pan_display = drm_fb_helper_pan_display,
.fb_blank = drm_fb_helper_blank,
.fb_setcmap = drm_fb_helper_setcmap,
.fb_debug_enter = drm_fb_helper_debug_enter,
.fb_debug_leave = drm_fb_helper_debug_leave,
};


Expand Down
7 changes: 3 additions & 4 deletions drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
Original file line number Diff line number Diff line change
Expand Up @@ -2032,7 +2032,7 @@ static int dce_v10_0_crtc_do_set_base(struct drm_crtc *crtc,
u32 tmp, viewport_w, viewport_h;
int r;
bool bypass_lut = false;
char *format_name;
struct drm_format_name_buf format_name;

/* no fb bound */
if (!atomic && !crtc->primary->fb) {
Expand Down Expand Up @@ -2144,9 +2144,8 @@ static int dce_v10_0_crtc_do_set_base(struct drm_crtc *crtc,
bypass_lut = true;
break;
default:
format_name = drm_get_format_name(target_fb->pixel_format);
DRM_ERROR("Unsupported screen format %s\n", format_name);
kfree(format_name);
DRM_ERROR("Unsupported screen format %s\n",
drm_get_format_name(target_fb->pixel_format, &format_name));
return -EINVAL;
}

Expand Down
7 changes: 3 additions & 4 deletions drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
Original file line number Diff line number Diff line change
Expand Up @@ -2013,7 +2013,7 @@ static int dce_v11_0_crtc_do_set_base(struct drm_crtc *crtc,
u32 tmp, viewport_w, viewport_h;
int r;
bool bypass_lut = false;
char *format_name;
struct drm_format_name_buf format_name;

/* no fb bound */
if (!atomic && !crtc->primary->fb) {
Expand Down Expand Up @@ -2125,9 +2125,8 @@ static int dce_v11_0_crtc_do_set_base(struct drm_crtc *crtc,
bypass_lut = true;
break;
default:
format_name = drm_get_format_name(target_fb->pixel_format);
DRM_ERROR("Unsupported screen format %s\n", format_name);
kfree(format_name);
DRM_ERROR("Unsupported screen format %s\n",
drm_get_format_name(target_fb->pixel_format, &format_name));
return -EINVAL;
}

Expand Down
7 changes: 4 additions & 3 deletions drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
Original file line number Diff line number Diff line change
Expand Up @@ -1456,6 +1456,7 @@ static int dce_v6_0_crtc_do_set_base(struct drm_crtc *crtc,
u32 viewport_w, viewport_h;
int r;
bool bypass_lut = false;
struct drm_format_name_buf format_name;

/* no fb bound */
if (!atomic && !crtc->primary->fb) {
Expand Down Expand Up @@ -1559,7 +1560,7 @@ static int dce_v6_0_crtc_do_set_base(struct drm_crtc *crtc,
break;
default:
DRM_ERROR("Unsupported screen format %s\n",
drm_get_format_name(target_fb->pixel_format));
drm_get_format_name(target_fb->pixel_format, &format_name));
return -EINVAL;
}

Expand Down Expand Up @@ -2039,13 +2040,13 @@ static void dce_v6_0_crtc_dpms(struct drm_crtc *crtc, int mode)
type = amdgpu_crtc_idx_to_irq_type(adev, amdgpu_crtc->crtc_id);
amdgpu_irq_update(adev, &adev->crtc_irq, type);
amdgpu_irq_update(adev, &adev->pageflip_irq, type);
drm_vblank_post_modeset(dev, amdgpu_crtc->crtc_id);
drm_crtc_vblank_on(crtc);
dce_v6_0_crtc_load_lut(crtc);
break;
case DRM_MODE_DPMS_STANDBY:
case DRM_MODE_DPMS_SUSPEND:
case DRM_MODE_DPMS_OFF:
drm_vblank_pre_modeset(dev, amdgpu_crtc->crtc_id);
drm_crtc_vblank_off(crtc);
if (amdgpu_crtc->enabled)
amdgpu_atombios_crtc_blank(crtc, ATOM_ENABLE);
amdgpu_atombios_crtc_enable(crtc, ATOM_DISABLE);
Expand Down
7 changes: 3 additions & 4 deletions drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
Original file line number Diff line number Diff line change
Expand Up @@ -1910,7 +1910,7 @@ static int dce_v8_0_crtc_do_set_base(struct drm_crtc *crtc,
u32 viewport_w, viewport_h;
int r;
bool bypass_lut = false;
char *format_name;
struct drm_format_name_buf format_name;

/* no fb bound */
if (!atomic && !crtc->primary->fb) {
Expand Down Expand Up @@ -2015,9 +2015,8 @@ static int dce_v8_0_crtc_do_set_base(struct drm_crtc *crtc,
bypass_lut = true;
break;
default:
format_name = drm_get_format_name(target_fb->pixel_format);
DRM_ERROR("Unsupported screen format %s\n", format_name);
kfree(format_name);
DRM_ERROR("Unsupported screen format %s\n",
drm_get_format_name(target_fb->pixel_format, &format_name));
return -EINVAL;
}

Expand Down
4 changes: 2 additions & 2 deletions drivers/gpu/drm/amd/amdgpu/dce_virtual.c
Original file line number Diff line number Diff line change
Expand Up @@ -214,12 +214,12 @@ static void dce_virtual_crtc_dpms(struct drm_crtc *crtc, int mode)
/* Make sure VBLANK interrupts are still enabled */
type = amdgpu_crtc_idx_to_irq_type(adev, amdgpu_crtc->crtc_id);
amdgpu_irq_update(adev, &adev->crtc_irq, type);
drm_vblank_on(dev, amdgpu_crtc->crtc_id);
drm_crtc_vblank_on(crtc);
break;
case DRM_MODE_DPMS_STANDBY:
case DRM_MODE_DPMS_SUSPEND:
case DRM_MODE_DPMS_OFF:
drm_vblank_off(dev, amdgpu_crtc->crtc_id);
drm_crtc_vblank_off(crtc);
amdgpu_crtc->enabled = false;
break;
}
Expand Down
8 changes: 1 addition & 7 deletions drivers/gpu/drm/armada/armada_fbdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,10 @@

static /*const*/ struct fb_ops armada_fb_ops = {
.owner = THIS_MODULE,
.fb_check_var = drm_fb_helper_check_var,
.fb_set_par = drm_fb_helper_set_par,
DRM_FB_HELPER_DEFAULT_OPS,
.fb_fillrect = drm_fb_helper_cfb_fillrect,
.fb_copyarea = drm_fb_helper_cfb_copyarea,
.fb_imageblit = drm_fb_helper_cfb_imageblit,
.fb_pan_display = drm_fb_helper_pan_display,
.fb_blank = drm_fb_helper_blank,
.fb_setcmap = drm_fb_helper_setcmap,
.fb_debug_enter = drm_fb_helper_debug_enter,
.fb_debug_leave = drm_fb_helper_debug_leave,
};

static int armada_fb_create(struct drm_fb_helper *fbh,
Expand Down
2 changes: 1 addition & 1 deletion drivers/gpu/drm/ast/ast_fb.c
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ static int astfb_create(struct drm_fb_helper *helper,
err_release_fbi:
drm_fb_helper_release_fbi(helper);
err_free_vram:
vfree(afbdev->sysram);
vfree(sysram);
return ret;
}

Expand Down
6 changes: 1 addition & 5 deletions drivers/gpu/drm/bochs/bochs_fbdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,10 @@ static int bochsfb_mmap(struct fb_info *info,

static struct fb_ops bochsfb_ops = {
.owner = THIS_MODULE,
.fb_check_var = drm_fb_helper_check_var,
.fb_set_par = drm_fb_helper_set_par,
DRM_FB_HELPER_DEFAULT_OPS,
.fb_fillrect = drm_fb_helper_sys_fillrect,
.fb_copyarea = drm_fb_helper_sys_copyarea,
.fb_imageblit = drm_fb_helper_sys_imageblit,
.fb_pan_display = drm_fb_helper_pan_display,
.fb_blank = drm_fb_helper_blank,
.fb_setcmap = drm_fb_helper_setcmap,
.fb_mmap = bochsfb_mmap,
};

Expand Down
2 changes: 1 addition & 1 deletion drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c
Original file line number Diff line number Diff line change
Expand Up @@ -1162,5 +1162,5 @@ ssize_t analogix_dp_transfer(struct analogix_dp_device *dp,
(msg->request & ~DP_AUX_I2C_MOT) == DP_AUX_NATIVE_READ)
msg->reply = DP_AUX_NATIVE_REPLY_ACK;

return num_transferred;
return num_transferred > 0 ? num_transferred : -EBUSY;
}
Loading

0 comments on commit 318313d

Please sign in to comment.