mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 11:41:38 -04:00
Merge airlied/drm-next into drm-misc-next
Bake in the conflict between the drm_print.h extraction and the
addition of DRM_DEBUG_LEASES since we lost it a few too many times.
Also fix a new use of drm_plane_helper_check_state in msm to follow
Ville's conversion in
commit a01cb8ba3f
Author: Ville Syrjälä <[email protected]>
Date: Wed Nov 1 22:16:19 2017 +0200
drm: Move drm_plane_helper_check_state() into drm_atomic_helper.c
Acked-by: Ville Syrjälä <[email protected]>
Signed-off-by: Daniel Vetter <[email protected]>
This commit is contained in:
commit
70c5f93669
1802 changed files with 61034 additions and 56663 deletions
52
include/drm/amd_asic_type.h
Normal file
52
include/drm/amd_asic_type.h
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* Copyright 2017 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef __AMD_ASIC_TYPE_H__
|
||||
#define __AMD_ASIC_TYPE_H__
|
||||
/*
|
||||
* Supported ASIC types
|
||||
*/
|
||||
enum amd_asic_type {
|
||||
CHIP_TAHITI = 0,
|
||||
CHIP_PITCAIRN,
|
||||
CHIP_VERDE,
|
||||
CHIP_OLAND,
|
||||
CHIP_HAINAN,
|
||||
CHIP_BONAIRE,
|
||||
CHIP_KAVERI,
|
||||
CHIP_KABINI,
|
||||
CHIP_HAWAII,
|
||||
CHIP_MULLINS,
|
||||
CHIP_TOPAZ,
|
||||
CHIP_TONGA,
|
||||
CHIP_FIJI,
|
||||
CHIP_CARRIZO,
|
||||
CHIP_STONEY,
|
||||
CHIP_POLARIS10,
|
||||
CHIP_POLARIS11,
|
||||
CHIP_POLARIS12,
|
||||
CHIP_VEGA10,
|
||||
CHIP_RAVEN,
|
||||
CHIP_LAST,
|
||||
};
|
||||
|
||||
#endif /*__AMD_ASIC_TYPE_H__ */
|
||||
|
|
@ -52,6 +52,12 @@ struct drm_lock_data {
|
|||
* @dev: Link back to the DRM device
|
||||
* @lock: DRI1 lock information.
|
||||
* @driver_priv: Pointer to driver-private information.
|
||||
* @lessor: Lease holder
|
||||
* @lessee_id: id for lessees. Owners always have id 0
|
||||
* @lessee_list: other lessees of the same master
|
||||
* @lessees: drm_masters leasing from this one
|
||||
* @leases: Objects leased to this drm_master.
|
||||
* @lessee_idr: All lessees under this owner (only used where lessor == NULL)
|
||||
*
|
||||
* Note that master structures are only relevant for the legacy/primary device
|
||||
* nodes, hence there can only be one per device, not one per drm_minor.
|
||||
|
|
@ -76,10 +82,25 @@ struct drm_master {
|
|||
struct idr magic_map;
|
||||
struct drm_lock_data lock;
|
||||
void *driver_priv;
|
||||
|
||||
/* Tree of display resource leases, each of which is a drm_master struct
|
||||
* All of these get activated simultaneously, so drm_device master points
|
||||
* at the top of the tree (for which lessor is NULL). Protected by
|
||||
* &drm_device.mode_config.idr_mutex.
|
||||
*/
|
||||
|
||||
struct drm_master *lessor;
|
||||
int lessee_id;
|
||||
struct list_head lessee_list;
|
||||
struct list_head lessees;
|
||||
struct idr leases;
|
||||
struct idr lessee_idr;
|
||||
};
|
||||
|
||||
struct drm_master *drm_master_get(struct drm_master *master);
|
||||
void drm_master_put(struct drm_master **master);
|
||||
bool drm_is_current_master(struct drm_file *fpriv);
|
||||
|
||||
struct drm_master *drm_master_create(struct drm_device *dev);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -938,16 +938,18 @@ static inline unsigned drm_connector_index(struct drm_connector *connector)
|
|||
/**
|
||||
* drm_connector_lookup - lookup connector object
|
||||
* @dev: DRM device
|
||||
* @file_priv: drm file to check for lease against.
|
||||
* @id: connector object id
|
||||
*
|
||||
* This function looks up the connector object specified by id
|
||||
* add takes a reference to it.
|
||||
*/
|
||||
static inline struct drm_connector *drm_connector_lookup(struct drm_device *dev,
|
||||
struct drm_file *file_priv,
|
||||
uint32_t id)
|
||||
{
|
||||
struct drm_mode_object *mo;
|
||||
mo = drm_mode_object_find(dev, id, DRM_MODE_OBJECT_CONNECTOR);
|
||||
mo = drm_mode_object_find(dev, file_priv, id, DRM_MODE_OBJECT_CONNECTOR);
|
||||
return mo ? obj_to_connector(mo) : NULL;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -952,6 +952,7 @@ struct drm_crtc *drm_crtc_from_index(struct drm_device *dev, int idx);
|
|||
/**
|
||||
* drm_crtc_find - look up a CRTC object from its ID
|
||||
* @dev: DRM device
|
||||
* @file_priv: drm file to check for lease against.
|
||||
* @id: &drm_mode_object ID
|
||||
*
|
||||
* This can be used to look up a CRTC from its userspace ID. Only used by
|
||||
|
|
@ -959,10 +960,11 @@ struct drm_crtc *drm_crtc_from_index(struct drm_device *dev, int idx);
|
|||
* userspace interface should be done using &drm_property.
|
||||
*/
|
||||
static inline struct drm_crtc *drm_crtc_find(struct drm_device *dev,
|
||||
uint32_t id)
|
||||
struct drm_file *file_priv,
|
||||
uint32_t id)
|
||||
{
|
||||
struct drm_mode_object *mo;
|
||||
mo = drm_mode_object_find(dev, id, DRM_MODE_OBJECT_CRTC);
|
||||
mo = drm_mode_object_find(dev, file_priv, id, DRM_MODE_OBJECT_CRTC);
|
||||
return mo ? obj_to_crtc(mo) : NULL;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -736,6 +736,12 @@
|
|||
# define DP_PSR_SINK_INTERNAL_ERROR 7
|
||||
# define DP_PSR_SINK_STATE_MASK 0x07
|
||||
|
||||
#define DP_SYNCHRONIZATION_LATENCY_IN_SINK 0x2009 /* edp 1.4 */
|
||||
# define DP_MAX_RESYNC_FRAME_COUNT_MASK (0xf << 0)
|
||||
# define DP_MAX_RESYNC_FRAME_COUNT_SHIFT 0
|
||||
# define DP_LAST_ACTUAL_SYNCHRONIZATION_LATENCY_MASK (0xf << 4)
|
||||
# define DP_LAST_ACTUAL_SYNCHRONIZATION_LATENCY_SHIFT 4
|
||||
|
||||
#define DP_RECEIVER_ALPM_STATUS 0x200b /* eDP 1.4 */
|
||||
# define DP_ALPM_LOCK_TIMEOUT_ERROR (1 << 0)
|
||||
|
||||
|
|
|
|||
|
|
@ -325,7 +325,7 @@ struct drm_driver {
|
|||
*/
|
||||
bool (*get_vblank_timestamp) (struct drm_device *dev, unsigned int pipe,
|
||||
int *max_error,
|
||||
struct timeval *vblank_time,
|
||||
ktime_t *vblank_time,
|
||||
bool in_vblank_irq);
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -212,17 +212,19 @@ static inline bool drm_encoder_crtc_ok(struct drm_encoder *encoder,
|
|||
/**
|
||||
* drm_encoder_find - find a &drm_encoder
|
||||
* @dev: DRM device
|
||||
* @file_priv: drm file to check for lease against.
|
||||
* @id: encoder id
|
||||
*
|
||||
* Returns the encoder with @id, NULL if it doesn't exist. Simple wrapper around
|
||||
* drm_mode_object_find().
|
||||
*/
|
||||
static inline struct drm_encoder *drm_encoder_find(struct drm_device *dev,
|
||||
struct drm_file *file_priv,
|
||||
uint32_t id)
|
||||
{
|
||||
struct drm_mode_object *mo;
|
||||
|
||||
mo = drm_mode_object_find(dev, id, DRM_MODE_OBJECT_ENCODER);
|
||||
mo = drm_mode_object_find(dev, file_priv, id, DRM_MODE_OBJECT_ENCODER);
|
||||
|
||||
return mo ? obj_to_encoder(mo) : NULL;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -205,6 +205,7 @@ int drm_framebuffer_init(struct drm_device *dev,
|
|||
struct drm_framebuffer *fb,
|
||||
const struct drm_framebuffer_funcs *funcs);
|
||||
struct drm_framebuffer *drm_framebuffer_lookup(struct drm_device *dev,
|
||||
struct drm_file *file_priv,
|
||||
uint32_t id);
|
||||
void drm_framebuffer_remove(struct drm_framebuffer *fb);
|
||||
void drm_framebuffer_cleanup(struct drm_framebuffer *fb);
|
||||
|
|
|
|||
46
include/drm/drm_lease.h
Normal file
46
include/drm/drm_lease.h
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
* Copyright © 2017 Keith Packard <keithp@keithp.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*/
|
||||
|
||||
#ifndef _DRM_LEASE_H_
|
||||
#define _DRM_LEASE_H_
|
||||
|
||||
struct drm_file;
|
||||
struct drm_device;
|
||||
struct drm_master;
|
||||
|
||||
struct drm_master *drm_lease_owner(struct drm_master *master);
|
||||
|
||||
void drm_lease_destroy(struct drm_master *lessee);
|
||||
|
||||
bool drm_lease_held(struct drm_file *file_priv, int id);
|
||||
|
||||
bool _drm_lease_held(struct drm_file *file_priv, int id);
|
||||
|
||||
void drm_lease_revoke(struct drm_master *master);
|
||||
|
||||
uint32_t drm_lease_filter_crtcs(struct drm_file *file_priv, uint32_t crtcs);
|
||||
|
||||
int drm_mode_create_lease_ioctl(struct drm_device *dev,
|
||||
void *data, struct drm_file *file_priv);
|
||||
|
||||
int drm_mode_list_lessees_ioctl(struct drm_device *dev,
|
||||
void *data, struct drm_file *file_priv);
|
||||
|
||||
int drm_mode_get_lease_ioctl(struct drm_device *dev,
|
||||
void *data, struct drm_file *file_priv);
|
||||
|
||||
int drm_mode_revoke_lease_ioctl(struct drm_device *dev,
|
||||
void *data, struct drm_file *file_priv);
|
||||
|
||||
#endif /* _DRM_LEASE_H_ */
|
||||
|
|
@ -429,19 +429,6 @@ struct drm_mode_config {
|
|||
*/
|
||||
struct list_head encoder_list;
|
||||
|
||||
/**
|
||||
* @num_overlay_plane:
|
||||
*
|
||||
* Number of overlay planes on this device, excluding primary and cursor
|
||||
* planes.
|
||||
*
|
||||
* Track number of overlay planes separately from number of total
|
||||
* planes. By default we only advertise overlay planes to userspace; if
|
||||
* userspace sets the "universal plane" capability bit, we'll go ahead
|
||||
* and expose all planes. This is invariant over the lifetime of a
|
||||
* device and hence doesn't need any locks.
|
||||
*/
|
||||
int num_overlay_plane;
|
||||
/**
|
||||
* @num_total_plane:
|
||||
*
|
||||
|
|
|
|||
|
|
@ -24,9 +24,11 @@
|
|||
#define __DRM_MODESET_H__
|
||||
|
||||
#include <linux/kref.h>
|
||||
#include <drm/drm_lease.h>
|
||||
struct drm_object_properties;
|
||||
struct drm_property;
|
||||
struct drm_device;
|
||||
struct drm_file;
|
||||
|
||||
/**
|
||||
* struct drm_mode_object - base structure for modeset objects
|
||||
|
|
@ -113,6 +115,7 @@ struct drm_object_properties {
|
|||
}
|
||||
|
||||
struct drm_mode_object *drm_mode_object_find(struct drm_device *dev,
|
||||
struct drm_file *file_priv,
|
||||
uint32_t id, uint32_t type);
|
||||
void drm_mode_object_get(struct drm_mode_object *obj);
|
||||
void drm_mode_object_put(struct drm_mode_object *obj);
|
||||
|
|
@ -151,4 +154,6 @@ int drm_object_property_get_value(struct drm_mode_object *obj,
|
|||
void drm_object_attach_property(struct drm_mode_object *obj,
|
||||
struct drm_property *property,
|
||||
uint64_t init_val);
|
||||
|
||||
bool drm_mode_object_lease_required(uint32_t type);
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -601,16 +601,18 @@ int drm_mode_plane_set_obj_prop(struct drm_plane *plane,
|
|||
/**
|
||||
* drm_plane_find - find a &drm_plane
|
||||
* @dev: DRM device
|
||||
* @file_priv: drm file to check for lease against.
|
||||
* @id: plane id
|
||||
*
|
||||
* Returns the plane with @id, NULL if it doesn't exist. Simple wrapper around
|
||||
* drm_mode_object_find().
|
||||
*/
|
||||
static inline struct drm_plane *drm_plane_find(struct drm_device *dev,
|
||||
struct drm_file *file_priv,
|
||||
uint32_t id)
|
||||
{
|
||||
struct drm_mode_object *mo;
|
||||
mo = drm_mode_object_find(dev, id, DRM_MODE_OBJECT_PLANE);
|
||||
mo = drm_mode_object_find(dev, file_priv, id, DRM_MODE_OBJECT_PLANE);
|
||||
return mo ? obj_to_plane(mo) : NULL;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -179,6 +179,7 @@ static inline struct drm_printer drm_debug_printer(const char *prefix)
|
|||
#define DRM_UT_ATOMIC 0x10
|
||||
#define DRM_UT_VBL 0x20
|
||||
#define DRM_UT_STATE 0x40
|
||||
#define DRM_UT_LEASE 0x80
|
||||
|
||||
__printf(6, 7)
|
||||
void drm_dev_printk(const struct device *dev, const char *level,
|
||||
|
|
@ -295,6 +296,9 @@ void drm_printk(const char *level, unsigned int category,
|
|||
#define DRM_DEBUG_VBL(fmt, ...) \
|
||||
drm_printk(KERN_DEBUG, DRM_UT_VBL, fmt, ##__VA_ARGS__)
|
||||
|
||||
#define DRM_DEBUG_LEASE(fmt, ...) \
|
||||
drm_printk(KERN_DEBUG, DRM_UT_LEASE, fmt, ##__VA_ARGS__)
|
||||
|
||||
#define _DRM_DEV_DEFINE_DEBUG_RATELIMITED(dev, level, fmt, args...) \
|
||||
({ \
|
||||
static DEFINE_RATELIMIT_STATE(_rs, \
|
||||
|
|
|
|||
|
|
@ -305,17 +305,19 @@ drm_property_unreference_blob(struct drm_property_blob *blob)
|
|||
}
|
||||
|
||||
/**
|
||||
* drm_connector_find - find property object
|
||||
* drm_property_find - find property object
|
||||
* @dev: DRM device
|
||||
* @file_priv: drm file to check for lease against.
|
||||
* @id: property object id
|
||||
*
|
||||
* This function looks up the property object specified by id and returns it.
|
||||
*/
|
||||
static inline struct drm_property *drm_property_find(struct drm_device *dev,
|
||||
struct drm_file *file_priv,
|
||||
uint32_t id)
|
||||
{
|
||||
struct drm_mode_object *mo;
|
||||
mo = drm_mode_object_find(dev, id, DRM_MODE_OBJECT_PROPERTY);
|
||||
mo = drm_mode_object_find(dev, file_priv, id, DRM_MODE_OBJECT_PROPERTY);
|
||||
return mo ? obj_to_property(mo) : NULL;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -136,5 +136,10 @@ int drm_syncobj_find_fence(struct drm_file *file_private,
|
|||
u32 handle,
|
||||
struct dma_fence **fence);
|
||||
void drm_syncobj_free(struct kref *kref);
|
||||
int drm_syncobj_create(struct drm_syncobj **out_syncobj, uint32_t flags,
|
||||
struct dma_fence *fence);
|
||||
int drm_syncobj_get_handle(struct drm_file *file_private,
|
||||
struct drm_syncobj *syncobj, u32 *handle);
|
||||
int drm_syncobj_get_fd(struct drm_syncobj *syncobj, int *p_fd);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -47,10 +47,18 @@ struct drm_pending_vblank_event {
|
|||
* @pipe: drm_crtc_index() of the &drm_crtc this event is for.
|
||||
*/
|
||||
unsigned int pipe;
|
||||
/**
|
||||
* @sequence: frame event should be triggered at
|
||||
*/
|
||||
u64 sequence;
|
||||
/**
|
||||
* @event: Actual event which will be sent to userspace.
|
||||
*/
|
||||
struct drm_event_vblank event;
|
||||
union {
|
||||
struct drm_event base;
|
||||
struct drm_event_vblank vbl;
|
||||
struct drm_event_crtc_sequence seq;
|
||||
} event;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -88,11 +96,11 @@ struct drm_vblank_crtc {
|
|||
/**
|
||||
* @count: Current software vblank counter.
|
||||
*/
|
||||
u32 count;
|
||||
u64 count;
|
||||
/**
|
||||
* @time: Vblank timestamp corresponding to @count.
|
||||
*/
|
||||
struct timeval time;
|
||||
ktime_t time;
|
||||
|
||||
/**
|
||||
* @refcount: Number of users/waiters of the vblank interrupt. Only when
|
||||
|
|
@ -152,13 +160,16 @@ struct drm_vblank_crtc {
|
|||
};
|
||||
|
||||
int drm_vblank_init(struct drm_device *dev, unsigned int num_crtcs);
|
||||
u32 drm_crtc_vblank_count(struct drm_crtc *crtc);
|
||||
u32 drm_crtc_vblank_count_and_time(struct drm_crtc *crtc,
|
||||
struct timeval *vblanktime);
|
||||
u64 drm_crtc_vblank_count(struct drm_crtc *crtc);
|
||||
u64 drm_crtc_vblank_count_and_time(struct drm_crtc *crtc,
|
||||
ktime_t *vblanktime);
|
||||
void drm_crtc_send_vblank_event(struct drm_crtc *crtc,
|
||||
struct drm_pending_vblank_event *e);
|
||||
void drm_crtc_arm_vblank_event(struct drm_crtc *crtc,
|
||||
struct drm_pending_vblank_event *e);
|
||||
void drm_vblank_set_event(struct drm_pending_vblank_event *e,
|
||||
u64 *seq,
|
||||
ktime_t *now);
|
||||
bool drm_handle_vblank(struct drm_device *dev, unsigned int pipe);
|
||||
bool drm_crtc_handle_vblank(struct drm_crtc *crtc);
|
||||
int drm_crtc_vblank_get(struct drm_crtc *crtc);
|
||||
|
|
@ -172,7 +183,7 @@ u32 drm_crtc_accurate_vblank_count(struct drm_crtc *crtc);
|
|||
|
||||
bool drm_calc_vbltimestamp_from_scanoutpos(struct drm_device *dev,
|
||||
unsigned int pipe, int *max_error,
|
||||
struct timeval *vblank_time,
|
||||
ktime_t *vblank_time,
|
||||
bool in_vblank_irq);
|
||||
void drm_calc_timestamping_constants(struct drm_crtc *crtc,
|
||||
const struct drm_display_mode *mode);
|
||||
|
|
|
|||
|
|
@ -339,7 +339,6 @@
|
|||
#define INTEL_KBL_GT1_IDS(info) \
|
||||
INTEL_VGA_DEVICE(0x5913, info), /* ULT GT1.5 */ \
|
||||
INTEL_VGA_DEVICE(0x5915, info), /* ULX GT1.5 */ \
|
||||
INTEL_VGA_DEVICE(0x5917, info), /* DT GT1.5 */ \
|
||||
INTEL_VGA_DEVICE(0x5906, info), /* ULT GT1 */ \
|
||||
INTEL_VGA_DEVICE(0x590E, info), /* ULX GT1 */ \
|
||||
INTEL_VGA_DEVICE(0x5902, info), /* DT GT1 */ \
|
||||
|
|
@ -349,6 +348,7 @@
|
|||
|
||||
#define INTEL_KBL_GT2_IDS(info) \
|
||||
INTEL_VGA_DEVICE(0x5916, info), /* ULT GT2 */ \
|
||||
INTEL_VGA_DEVICE(0x5917, info), /* Mobile GT2 */ \
|
||||
INTEL_VGA_DEVICE(0x5921, info), /* ULT GT2F */ \
|
||||
INTEL_VGA_DEVICE(0x591E, info), /* ULX GT2 */ \
|
||||
INTEL_VGA_DEVICE(0x5912, info), /* DT GT2 */ \
|
||||
|
|
|
|||
|
|
@ -150,10 +150,9 @@ extern int ttm_mem_global_alloc(struct ttm_mem_global *glob, uint64_t memory,
|
|||
extern void ttm_mem_global_free(struct ttm_mem_global *glob,
|
||||
uint64_t amount);
|
||||
extern int ttm_mem_global_alloc_page(struct ttm_mem_global *glob,
|
||||
struct page *page,
|
||||
bool no_wait, bool interruptible);
|
||||
struct page *page, uint64_t size);
|
||||
extern void ttm_mem_global_free_page(struct ttm_mem_global *glob,
|
||||
struct page *page);
|
||||
struct page *page, uint64_t size);
|
||||
extern size_t ttm_round_pot(size_t size);
|
||||
extern uint64_t ttm_get_kernel_zone_memory_size(struct ttm_mem_global *glob);
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Reference in a new issue