Merge branch 'drm-next-4.15' of git://people.freedesktop.org/~agd5f/linux into drm-next
First feature pull for 4.15. Highlights: - Per VM BO support - Lots of powerplay cleanups - Powerplay support for CI - pasid mgr for kfd - interrupt infrastructure for recoverable page faults - SR-IOV fixes - initial GPU reset for vega10 - prime mmap support - ttm page table debugging improvements - lots of bug fixes * 'drm-next-4.15' of git://people.freedesktop.org/~agd5f/linux: (232 commits) drm/amdgpu: clarify license in amdgpu_trace_points.c drm/amdgpu: Add gem_prime_mmap support drm/amd/powerplay: delete dead code in smumgr drm/amd/powerplay: delete SMUM_FIELD_MASK drm/amd/powerplay: delete SMUM_WAIT_INDIRECT_FIELD drm/amd/powerplay: delete SMUM_READ_FIELD drm/amd/powerplay: delete SMUM_SET_FIELD drm/amd/powerplay: delete SMUM_READ_VFPF_INDIRECT_FIELD drm/amd/powerplay: delete SMUM_WRITE_VFPF_INDIRECT_FIELD drm/amd/powerplay: delete SMUM_WRITE_FIELD drm/amd/powerplay: delete SMU_WRITE_INDIRECT_FIELD drm/amd/powerplay: move macros to hwmgr.h drm/amd/powerplay: move PHM_WAIT_VFPF_INDIRECT_FIELD to hwmgr.h drm/amd/powerplay: move SMUM_WAIT_VFPF_INDIRECT_FIELD_UNEQUAL to hwmgr.h drm/amd/powerplay: move SMUM_WAIT_INDIRECT_FIELD_UNEQUAL to hwmgr.h drm/amd/powerplay: add new helper functions in hwmgr.h drm/amd/powerplay: use SMU_IND_INDEX/DATA_11 pair drm/amd/powerplay: refine powerplay code. drm/amd/powerplay: delete dead code in hwmgr.h drm/amd/powerplay: refine interface in struct pp_smumgr_func ...
This commit is contained in:
@@ -109,5 +109,3 @@ radeon-$(CONFIG_VGA_SWITCHEROO) += radeon_atpx_handler.o
|
||||
radeon-$(CONFIG_ACPI) += radeon_acpi.o
|
||||
|
||||
obj-$(CONFIG_DRM_RADEON)+= radeon.o
|
||||
|
||||
CFLAGS_radeon_trace_points.o := -I$(src)
|
||||
|
@@ -58,7 +58,7 @@ enum r600_hdmi_iec_status_bits {
|
||||
|
||||
static struct r600_audio_pin r600_audio_status(struct radeon_device *rdev)
|
||||
{
|
||||
struct r600_audio_pin status;
|
||||
struct r600_audio_pin status = {};
|
||||
uint32_t value;
|
||||
|
||||
value = RREG32(R600_AUDIO_RATE_BPS_CHANNEL);
|
||||
|
@@ -322,10 +322,10 @@ static int radeon_fbdev_destroy(struct drm_device *dev, struct radeon_fbdev *rfb
|
||||
if (rfb->obj) {
|
||||
radeonfb_destroy_pinned_object(rfb->obj);
|
||||
rfb->obj = NULL;
|
||||
drm_framebuffer_unregister_private(&rfb->base);
|
||||
drm_framebuffer_cleanup(&rfb->base);
|
||||
}
|
||||
drm_fb_helper_fini(&rfbdev->helper);
|
||||
drm_framebuffer_unregister_private(&rfb->base);
|
||||
drm_framebuffer_cleanup(&rfb->base);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@@ -58,6 +58,10 @@ static uint64_t get_vmem_size(struct kgd_dev *kgd);
|
||||
static uint64_t get_gpu_clock_counter(struct kgd_dev *kgd);
|
||||
|
||||
static uint32_t get_max_engine_clock_in_mhz(struct kgd_dev *kgd);
|
||||
|
||||
static int alloc_pasid(unsigned int bits);
|
||||
static void free_pasid(unsigned int pasid);
|
||||
|
||||
static uint16_t get_fw_version(struct kgd_dev *kgd, enum kgd_engine_type type);
|
||||
|
||||
/*
|
||||
@@ -112,6 +116,8 @@ static const struct kfd2kgd_calls kfd2kgd = {
|
||||
.get_vmem_size = get_vmem_size,
|
||||
.get_gpu_clock_counter = get_gpu_clock_counter,
|
||||
.get_max_engine_clock_in_mhz = get_max_engine_clock_in_mhz,
|
||||
.alloc_pasid = alloc_pasid,
|
||||
.free_pasid = free_pasid,
|
||||
.program_sh_mem_settings = kgd_program_sh_mem_settings,
|
||||
.set_pasid_vmid_mapping = kgd_set_pasid_vmid_mapping,
|
||||
.init_pipeline = kgd_init_pipeline,
|
||||
@@ -341,6 +347,31 @@ static uint32_t get_max_engine_clock_in_mhz(struct kgd_dev *kgd)
|
||||
return rdev->pm.dpm.dyn_state.max_clock_voltage_on_ac.sclk / 100;
|
||||
}
|
||||
|
||||
/*
|
||||
* PASID manager
|
||||
*/
|
||||
static DEFINE_IDA(pasid_ida);
|
||||
|
||||
int alloc_pasid(unsigned int bits)
|
||||
{
|
||||
int pasid = -EINVAL;
|
||||
|
||||
for (bits = min(bits, 31U); bits > 0; bits--) {
|
||||
pasid = ida_simple_get(&pasid_ida,
|
||||
1U << (bits - 1), 1U << bits,
|
||||
GFP_KERNEL);
|
||||
if (pasid != -ENOSPC)
|
||||
break;
|
||||
}
|
||||
|
||||
return pasid;
|
||||
}
|
||||
|
||||
void free_pasid(unsigned int pasid)
|
||||
{
|
||||
ida_simple_remove(&pasid_ida, pasid);
|
||||
}
|
||||
|
||||
static inline struct radeon_device *get_radeon_device(struct kgd_dev *kgd)
|
||||
{
|
||||
return (struct radeon_device *)kgd;
|
||||
|
@@ -204,5 +204,5 @@ DEFINE_EVENT(radeon_semaphore_request, radeon_semaphore_wait,
|
||||
|
||||
/* This part must be outside protection */
|
||||
#undef TRACE_INCLUDE_PATH
|
||||
#define TRACE_INCLUDE_PATH .
|
||||
#define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/radeon
|
||||
#include <trace/define_trace.h>
|
||||
|
@@ -725,8 +725,6 @@ static int radeon_ttm_tt_populate(struct ttm_tt *ttm)
|
||||
{
|
||||
struct radeon_ttm_tt *gtt = radeon_ttm_tt_to_gtt(ttm);
|
||||
struct radeon_device *rdev;
|
||||
unsigned i;
|
||||
int r;
|
||||
bool slave = !!(ttm->page_flags & TTM_PAGE_FLAG_SG);
|
||||
|
||||
if (ttm->state != tt_unpopulated)
|
||||
@@ -762,33 +760,13 @@ static int radeon_ttm_tt_populate(struct ttm_tt *ttm)
|
||||
}
|
||||
#endif
|
||||
|
||||
r = ttm_pool_populate(ttm);
|
||||
if (r) {
|
||||
return r;
|
||||
}
|
||||
|
||||
for (i = 0; i < ttm->num_pages; i++) {
|
||||
gtt->ttm.dma_address[i] = pci_map_page(rdev->pdev, ttm->pages[i],
|
||||
0, PAGE_SIZE,
|
||||
PCI_DMA_BIDIRECTIONAL);
|
||||
if (pci_dma_mapping_error(rdev->pdev, gtt->ttm.dma_address[i])) {
|
||||
while (i--) {
|
||||
pci_unmap_page(rdev->pdev, gtt->ttm.dma_address[i],
|
||||
PAGE_SIZE, PCI_DMA_BIDIRECTIONAL);
|
||||
gtt->ttm.dma_address[i] = 0;
|
||||
}
|
||||
ttm_pool_unpopulate(ttm);
|
||||
return -EFAULT;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
return ttm_populate_and_map_pages(rdev->dev, >t->ttm);
|
||||
}
|
||||
|
||||
static void radeon_ttm_tt_unpopulate(struct ttm_tt *ttm)
|
||||
{
|
||||
struct radeon_device *rdev;
|
||||
struct radeon_ttm_tt *gtt = radeon_ttm_tt_to_gtt(ttm);
|
||||
unsigned i;
|
||||
bool slave = !!(ttm->page_flags & TTM_PAGE_FLAG_SG);
|
||||
|
||||
if (gtt && gtt->userptr) {
|
||||
@@ -815,14 +793,7 @@ static void radeon_ttm_tt_unpopulate(struct ttm_tt *ttm)
|
||||
}
|
||||
#endif
|
||||
|
||||
for (i = 0; i < ttm->num_pages; i++) {
|
||||
if (gtt->ttm.dma_address[i]) {
|
||||
pci_unmap_page(rdev->pdev, gtt->ttm.dma_address[i],
|
||||
PAGE_SIZE, PCI_DMA_BIDIRECTIONAL);
|
||||
}
|
||||
}
|
||||
|
||||
ttm_pool_unpopulate(ttm);
|
||||
ttm_unmap_and_unpopulate_pages(rdev->dev, >t->ttm);
|
||||
}
|
||||
|
||||
int radeon_ttm_tt_set_userptr(struct ttm_tt *ttm, uint64_t addr,
|
||||
|
Reference in New Issue
Block a user