Merge branch 'drm-next-4.21' of git://people.freedesktop.org/~agd5f/linux into drm-next
New features for 4.21: amdgpu: - Support for SDMA paging queue on vega - Put compute EOP buffers into vram for better performance - Share more code with amdkfd - Support for scanout with DCC on gfx9 - Initial kerneldoc for DC - Updated SMU firmware support for gfx8 chips - Rework CSA handling for eventual support for preemption - XGMI PSP support - Clean up RLC handling - Enable GPU reset by default on VI, SOC15 dGPUs - Ring and IB test cleanups amdkfd: - Share more code with amdgpu ttm: - Move global init out of the drivers scheduler: - Track if schedulers are ready for work - Timeout/fault handling changes to facilitate GPU recovery Signed-off-by: Dave Airlie <airlied@redhat.com> From: Alex Deucher <alexdeucher@gmail.com> Link: https://patchwork.freedesktop.org/patch/msgid/20181114165113.3751-1-alexander.deucher@amd.com
This commit is contained in:
@ -68,7 +68,6 @@
|
||||
#include <drm/drm_agpsupport.h>
|
||||
#include <drm/drm_crtc.h>
|
||||
#include <drm/drm_fourcc.h>
|
||||
#include <drm/drm_global.h>
|
||||
#include <drm/drm_hashtab.h>
|
||||
#include <drm/drm_mm.h>
|
||||
#include <drm/drm_os_linux.h>
|
||||
|
@ -1,53 +0,0 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2008-2009 VMware, Inc., Palo Alto, CA., USA
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* 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, sub license, 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 (including the
|
||||
* next paragraph) 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 NON-INFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS 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.
|
||||
*
|
||||
**************************************************************************/
|
||||
/*
|
||||
* Authors: Thomas Hellstrom <thellstrom-at-vmware-dot-com>
|
||||
*/
|
||||
|
||||
#ifndef _DRM_GLOBAL_H_
|
||||
#define _DRM_GLOBAL_H_
|
||||
enum drm_global_types {
|
||||
DRM_GLOBAL_TTM_MEM = 0,
|
||||
DRM_GLOBAL_TTM_BO,
|
||||
DRM_GLOBAL_TTM_OBJECT,
|
||||
DRM_GLOBAL_NUM
|
||||
};
|
||||
|
||||
struct drm_global_reference {
|
||||
enum drm_global_types global_type;
|
||||
size_t size;
|
||||
void *object;
|
||||
int (*init) (struct drm_global_reference *);
|
||||
void (*release) (struct drm_global_reference *);
|
||||
};
|
||||
|
||||
void drm_global_init(void);
|
||||
void drm_global_release(void);
|
||||
int drm_global_item_ref(struct drm_global_reference *ref);
|
||||
void drm_global_item_unref(struct drm_global_reference *ref);
|
||||
|
||||
#endif
|
@ -264,6 +264,7 @@ struct drm_sched_backend_ops {
|
||||
* @hang_limit: once the hangs by a job crosses this limit then it is marked
|
||||
* guilty and it will be considered for scheduling further.
|
||||
* @num_jobs: the number of jobs in queue in the scheduler
|
||||
* @ready: marks if the underlying HW is ready to work
|
||||
*
|
||||
* One scheduler is implemented for each hardware ring.
|
||||
*/
|
||||
@ -283,22 +284,26 @@ struct drm_gpu_scheduler {
|
||||
spinlock_t job_list_lock;
|
||||
int hang_limit;
|
||||
atomic_t num_jobs;
|
||||
bool ready;
|
||||
};
|
||||
|
||||
int drm_sched_init(struct drm_gpu_scheduler *sched,
|
||||
const struct drm_sched_backend_ops *ops,
|
||||
uint32_t hw_submission, unsigned hang_limit, long timeout,
|
||||
const char *name);
|
||||
|
||||
void drm_sched_fini(struct drm_gpu_scheduler *sched);
|
||||
int drm_sched_job_init(struct drm_sched_job *job,
|
||||
struct drm_sched_entity *entity,
|
||||
void *owner);
|
||||
void drm_sched_job_cleanup(struct drm_sched_job *job);
|
||||
void drm_sched_wakeup(struct drm_gpu_scheduler *sched);
|
||||
void drm_sched_hw_job_reset(struct drm_gpu_scheduler *sched,
|
||||
struct drm_sched_job *job);
|
||||
void drm_sched_job_recovery(struct drm_gpu_scheduler *sched);
|
||||
bool drm_sched_dependency_optimized(struct dma_fence* fence,
|
||||
struct drm_sched_entity *entity);
|
||||
void drm_sched_fault(struct drm_gpu_scheduler *sched);
|
||||
void drm_sched_job_kickout(struct drm_sched_job *s_job);
|
||||
|
||||
void drm_sched_rq_add_entity(struct drm_sched_rq *rq,
|
||||
|
@ -31,7 +31,6 @@
|
||||
#define _TTM_BO_DRIVER_H_
|
||||
|
||||
#include <drm/drm_mm.h>
|
||||
#include <drm/drm_global.h>
|
||||
#include <drm/drm_vma_manager.h>
|
||||
#include <linux/workqueue.h>
|
||||
#include <linux/fs.h>
|
||||
@ -384,15 +383,6 @@ struct ttm_bo_driver {
|
||||
void *buf, int len, int write);
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ttm_bo_global_ref - Argument to initialize a struct ttm_bo_global.
|
||||
*/
|
||||
|
||||
struct ttm_bo_global_ref {
|
||||
struct drm_global_reference ref;
|
||||
struct ttm_mem_global *mem_glob;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ttm_bo_global - Buffer object driver global data.
|
||||
*
|
||||
@ -407,7 +397,7 @@ struct ttm_bo_global_ref {
|
||||
* @swap_lru: Lru list of buffer objects used for swapping.
|
||||
*/
|
||||
|
||||
struct ttm_bo_global {
|
||||
extern struct ttm_bo_global {
|
||||
|
||||
/**
|
||||
* Constant after init.
|
||||
@ -416,12 +406,12 @@ struct ttm_bo_global {
|
||||
struct kobject kobj;
|
||||
struct ttm_mem_global *mem_glob;
|
||||
struct page *dummy_read_page;
|
||||
struct mutex device_list_mutex;
|
||||
spinlock_t lru_lock;
|
||||
|
||||
/**
|
||||
* Protected by device_list_mutex.
|
||||
* Protected by ttm_global_mutex.
|
||||
*/
|
||||
unsigned int use_count;
|
||||
struct list_head device_list;
|
||||
|
||||
/**
|
||||
@ -433,7 +423,7 @@ struct ttm_bo_global {
|
||||
* Internal protection.
|
||||
*/
|
||||
atomic_t bo_count;
|
||||
};
|
||||
} ttm_bo_glob;
|
||||
|
||||
|
||||
#define TTM_NUM_MEM_TYPES 8
|
||||
@ -578,9 +568,6 @@ void ttm_bo_mem_put(struct ttm_buffer_object *bo, struct ttm_mem_reg *mem);
|
||||
void ttm_bo_mem_put_locked(struct ttm_buffer_object *bo,
|
||||
struct ttm_mem_reg *mem);
|
||||
|
||||
void ttm_bo_global_release(struct drm_global_reference *ref);
|
||||
int ttm_bo_global_init(struct drm_global_reference *ref);
|
||||
|
||||
int ttm_bo_device_release(struct ttm_bo_device *bdev);
|
||||
|
||||
/**
|
||||
@ -598,7 +585,7 @@ int ttm_bo_device_release(struct ttm_bo_device *bdev);
|
||||
* Returns:
|
||||
* !0: Failure.
|
||||
*/
|
||||
int ttm_bo_device_init(struct ttm_bo_device *bdev, struct ttm_bo_global *glob,
|
||||
int ttm_bo_device_init(struct ttm_bo_device *bdev,
|
||||
struct ttm_bo_driver *driver,
|
||||
struct address_space *mapping,
|
||||
uint64_t file_page_offset, bool need_dma32);
|
||||
|
@ -63,7 +63,7 @@
|
||||
|
||||
#define TTM_MEM_MAX_ZONES 2
|
||||
struct ttm_mem_zone;
|
||||
struct ttm_mem_global {
|
||||
extern struct ttm_mem_global {
|
||||
struct kobject kobj;
|
||||
struct ttm_bo_global *bo_glob;
|
||||
struct workqueue_struct *swap_queue;
|
||||
@ -78,7 +78,7 @@ struct ttm_mem_global {
|
||||
#else
|
||||
struct ttm_mem_zone *zone_dma32;
|
||||
#endif
|
||||
};
|
||||
} ttm_mem_glob;
|
||||
|
||||
extern int ttm_mem_global_init(struct ttm_mem_global *glob);
|
||||
extern void ttm_mem_global_release(struct ttm_mem_global *glob);
|
||||
|
Reference in New Issue
Block a user