Merge branch 'drm-fixes-4.3' of git://people.freedesktop.org/~agd5f/linux into drm-fixes
radeon and amdgpu fixes for 4.3. - backlight s/r fixes - typo fix from Dan - vm debugging fix - remove import_gpu_mem after discussion with Daniel * 'drm-fixes-4.3' of git://people.freedesktop.org/~agd5f/linux: drm/amdgpu: only print meaningful VM faults drm/amdgpu/cgs: remove import_gpu_mem drm/amdgpu: Restore LCD backlight level on resume drm/radeon: Restore LCD backlight level on resume (>= R5xx) drm/amdgpu: signedness bug in amdgpu_cs_parser_init()
This commit is contained in:
Коммит
5b6386419c
|
@ -208,44 +208,6 @@ static int amdgpu_cgs_alloc_gpu_mem(void *cgs_device,
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int amdgpu_cgs_import_gpu_mem(void *cgs_device, int dmabuf_fd,
|
||||
cgs_handle_t *handle)
|
||||
{
|
||||
CGS_FUNC_ADEV;
|
||||
int r;
|
||||
uint32_t dma_handle;
|
||||
struct drm_gem_object *obj;
|
||||
struct amdgpu_bo *bo;
|
||||
struct drm_device *dev = adev->ddev;
|
||||
struct drm_file *file_priv = NULL, *priv;
|
||||
|
||||
mutex_lock(&dev->struct_mutex);
|
||||
list_for_each_entry(priv, &dev->filelist, lhead) {
|
||||
rcu_read_lock();
|
||||
if (priv->pid == get_pid(task_pid(current)))
|
||||
file_priv = priv;
|
||||
rcu_read_unlock();
|
||||
if (file_priv)
|
||||
break;
|
||||
}
|
||||
mutex_unlock(&dev->struct_mutex);
|
||||
r = dev->driver->prime_fd_to_handle(dev,
|
||||
file_priv, dmabuf_fd,
|
||||
&dma_handle);
|
||||
spin_lock(&file_priv->table_lock);
|
||||
|
||||
/* Check if we currently have a reference on the object */
|
||||
obj = idr_find(&file_priv->object_idr, dma_handle);
|
||||
if (obj == NULL) {
|
||||
spin_unlock(&file_priv->table_lock);
|
||||
return -EINVAL;
|
||||
}
|
||||
spin_unlock(&file_priv->table_lock);
|
||||
bo = gem_to_amdgpu_bo(obj);
|
||||
*handle = (cgs_handle_t)bo;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int amdgpu_cgs_free_gpu_mem(void *cgs_device, cgs_handle_t handle)
|
||||
{
|
||||
struct amdgpu_bo *obj = (struct amdgpu_bo *)handle;
|
||||
|
@ -810,7 +772,6 @@ static const struct cgs_ops amdgpu_cgs_ops = {
|
|||
};
|
||||
|
||||
static const struct cgs_os_ops amdgpu_cgs_os_ops = {
|
||||
amdgpu_cgs_import_gpu_mem,
|
||||
amdgpu_cgs_add_irq_source,
|
||||
amdgpu_cgs_irq_get,
|
||||
amdgpu_cgs_irq_put
|
||||
|
|
|
@ -156,7 +156,8 @@ int amdgpu_cs_parser_init(struct amdgpu_cs_parser *p, void *data)
|
|||
uint64_t *chunk_array_user;
|
||||
uint64_t *chunk_array;
|
||||
struct amdgpu_fpriv *fpriv = p->filp->driver_priv;
|
||||
unsigned size, i;
|
||||
unsigned size;
|
||||
int i;
|
||||
int ret;
|
||||
|
||||
if (cs->in.num_chunks == 0)
|
||||
|
|
|
@ -1279,8 +1279,7 @@ amdgpu_atombios_encoder_setup_dig(struct drm_encoder *encoder, int action)
|
|||
amdgpu_atombios_encoder_setup_dig_encoder(encoder, ATOM_ENCODER_CMD_DP_VIDEO_ON, 0);
|
||||
}
|
||||
if (amdgpu_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT))
|
||||
amdgpu_atombios_encoder_setup_dig_transmitter(encoder,
|
||||
ATOM_TRANSMITTER_ACTION_LCD_BLON, 0, 0);
|
||||
amdgpu_atombios_encoder_set_backlight_level(amdgpu_encoder, dig->backlight_level);
|
||||
if (ext_encoder)
|
||||
amdgpu_atombios_encoder_setup_external_encoder(encoder, ext_encoder, ATOM_ENABLE);
|
||||
} else {
|
||||
|
|
|
@ -1262,6 +1262,12 @@ static int gmc_v7_0_process_interrupt(struct amdgpu_device *adev,
|
|||
addr = RREG32(mmVM_CONTEXT1_PROTECTION_FAULT_ADDR);
|
||||
status = RREG32(mmVM_CONTEXT1_PROTECTION_FAULT_STATUS);
|
||||
mc_client = RREG32(mmVM_CONTEXT1_PROTECTION_FAULT_MCCLIENT);
|
||||
/* reset addr and status */
|
||||
WREG32_P(mmVM_CONTEXT1_CNTL2, 1, ~1);
|
||||
|
||||
if (!addr && !status)
|
||||
return 0;
|
||||
|
||||
dev_err(adev->dev, "GPU fault detected: %d 0x%08x\n",
|
||||
entry->src_id, entry->src_data);
|
||||
dev_err(adev->dev, " VM_CONTEXT1_PROTECTION_FAULT_ADDR 0x%08X\n",
|
||||
|
@ -1269,8 +1275,6 @@ static int gmc_v7_0_process_interrupt(struct amdgpu_device *adev,
|
|||
dev_err(adev->dev, " VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x%08X\n",
|
||||
status);
|
||||
gmc_v7_0_vm_decode_fault(adev, status, addr, mc_client);
|
||||
/* reset addr and status */
|
||||
WREG32_P(mmVM_CONTEXT1_CNTL2, 1, ~1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1262,6 +1262,12 @@ static int gmc_v8_0_process_interrupt(struct amdgpu_device *adev,
|
|||
addr = RREG32(mmVM_CONTEXT1_PROTECTION_FAULT_ADDR);
|
||||
status = RREG32(mmVM_CONTEXT1_PROTECTION_FAULT_STATUS);
|
||||
mc_client = RREG32(mmVM_CONTEXT1_PROTECTION_FAULT_MCCLIENT);
|
||||
/* reset addr and status */
|
||||
WREG32_P(mmVM_CONTEXT1_CNTL2, 1, ~1);
|
||||
|
||||
if (!addr && !status)
|
||||
return 0;
|
||||
|
||||
dev_err(adev->dev, "GPU fault detected: %d 0x%08x\n",
|
||||
entry->src_id, entry->src_data);
|
||||
dev_err(adev->dev, " VM_CONTEXT1_PROTECTION_FAULT_ADDR 0x%08X\n",
|
||||
|
@ -1269,8 +1275,6 @@ static int gmc_v8_0_process_interrupt(struct amdgpu_device *adev,
|
|||
dev_err(adev->dev, " VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x%08X\n",
|
||||
status);
|
||||
gmc_v8_0_vm_decode_fault(adev, status, addr, mc_client);
|
||||
/* reset addr and status */
|
||||
WREG32_P(mmVM_CONTEXT1_CNTL2, 1, ~1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -26,19 +26,6 @@
|
|||
|
||||
#include "cgs_common.h"
|
||||
|
||||
/**
|
||||
* cgs_import_gpu_mem() - Import dmabuf handle
|
||||
* @cgs_device: opaque device handle
|
||||
* @dmabuf_fd: DMABuf file descriptor
|
||||
* @handle: memory handle (output)
|
||||
*
|
||||
* Must be called in the process context that dmabuf_fd belongs to.
|
||||
*
|
||||
* Return: 0 on success, -errno otherwise
|
||||
*/
|
||||
typedef int (*cgs_import_gpu_mem_t)(void *cgs_device, int dmabuf_fd,
|
||||
cgs_handle_t *handle);
|
||||
|
||||
/**
|
||||
* cgs_irq_source_set_func() - Callback for enabling/disabling interrupt sources
|
||||
* @private_data: private data provided to cgs_add_irq_source
|
||||
|
@ -114,16 +101,12 @@ typedef int (*cgs_irq_get_t)(void *cgs_device, unsigned src_id, unsigned type);
|
|||
typedef int (*cgs_irq_put_t)(void *cgs_device, unsigned src_id, unsigned type);
|
||||
|
||||
struct cgs_os_ops {
|
||||
cgs_import_gpu_mem_t import_gpu_mem;
|
||||
|
||||
/* IRQ handling */
|
||||
cgs_add_irq_source_t add_irq_source;
|
||||
cgs_irq_get_t irq_get;
|
||||
cgs_irq_put_t irq_put;
|
||||
};
|
||||
|
||||
#define cgs_import_gpu_mem(dev,dmabuf_fd,handle) \
|
||||
CGS_OS_CALL(import_gpu_mem,dev,dmabuf_fd,handle)
|
||||
#define cgs_add_irq_source(dev,src_id,num_types,set,handler,private_data) \
|
||||
CGS_OS_CALL(add_irq_source,dev,src_id,num_types,set,handler, \
|
||||
private_data)
|
||||
|
|
|
@ -1624,8 +1624,9 @@ radeon_atom_encoder_dpms_avivo(struct drm_encoder *encoder, int mode)
|
|||
} else
|
||||
atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args);
|
||||
if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) {
|
||||
args.ucAction = ATOM_LCD_BLON;
|
||||
atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args);
|
||||
struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv;
|
||||
|
||||
atombios_set_backlight_level(radeon_encoder, dig->backlight_level);
|
||||
}
|
||||
break;
|
||||
case DRM_MODE_DPMS_STANDBY:
|
||||
|
@ -1706,8 +1707,7 @@ radeon_atom_encoder_dpms_dig(struct drm_encoder *encoder, int mode)
|
|||
atombios_dig_encoder_setup(encoder, ATOM_ENCODER_CMD_DP_VIDEO_ON, 0);
|
||||
}
|
||||
if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT))
|
||||
atombios_dig_transmitter_setup(encoder,
|
||||
ATOM_TRANSMITTER_ACTION_LCD_BLON, 0, 0);
|
||||
atombios_set_backlight_level(radeon_encoder, dig->backlight_level);
|
||||
if (ext_encoder)
|
||||
atombios_external_encoder_setup(encoder, ext_encoder, ATOM_ENABLE);
|
||||
break;
|
||||
|
|
Загрузка…
Ссылка в новой задаче