summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/radeon
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2026-01-15 14:49:33 +1000
committerDave Airlie <airlied@redhat.com>2026-01-15 14:49:33 +1000
commit83dc0ba2755296b5e5882e044c80973b7c3fce9e (patch)
tree53774323449c41eb1b17e101be83197c6b5cbb82 /drivers/gpu/drm/radeon
parenta87fef0880c4f52769b5a3c2fc1b2d73aaa04eb3 (diff)
parent38a0f4cf8c6147fd10baa206ab349f8ff724e391 (diff)
downloadlinux-next-83dc0ba2755296b5e5882e044c80973b7c3fce9e.tar.gz
linux-next-83dc0ba2755296b5e5882e044c80973b7c3fce9e.zip
Merge tag 'amd-drm-next-6.20-2026-01-09' of https://gitlab.freedesktop.org/agd5f/linux into drm-next
amd-drm-next-6.20-2026-01-09: amdgpu: - GPUVM updates - Initial support for larger GPU address spaces - Initial SMUIO 15.x support - Documentation updates - Initial PSP 15.x support - Initial IH 7.1 support - Initial IH 6.1.1 support - SMU 13.0.12 updates - RAS updates - Initial MMHUB 3.4 support - Initial MMHUB 4.2 support - Initial GC 12.1 support - Initial GC 11.5.4 support - HDMI fixes - Panel replay improvements - DML updates - DC FP fixes - Initial SDMA 6.1.4 support - Initial SDMA 7.1 support - Userq updates - DC HPD refactor - SwSMU cleanups and refactoring - TTM memory ops parallelization - DCN 3.5 fixes - DP audio fixes - Clang fixes - Misc spelling fixes and cleanups - Initial SDMA 7.11.4 support - Convert legacy DRM logging helpers to new drm logging helpers - Initial JPEG 5.3 support - Add support for changing UMA size via the driver - DC analog fixes - GC 9 gfx queue reset support - Initial SMU 15.x support amdkfd: - Reserved SDMA rework - Refactor SPM - Initial GC 12.1 support - Initial GC 11.5.4 support - Initial SDMA 7.1 support - Initial SDMA 6.1.4 support - Increase the kfd process hash table - Per context support - Topology fixes radeon: - Convert legacy DRM logging helpers to new drm logging helpers - Use devm for i2c adapters - Variable sized array fix - Misc cleanups UAPI: - KFD context support. Proposed userspace: https://github.com/ROCm/rocm-systems/pull/1705 https://github.com/ROCm/rocm-systems/pull/1701 - Add userq metadata queries for more queue types. Proposed userspace: https://gitlab.freedesktop.org/yogeshmohan/mesa/-/commits/userq_query From: Alex Deucher <alexander.deucher@amd.com> Link: https://patch.msgid.link/20260109154713.3242957-1-alexander.deucher@amd.com Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/radeon')
-rw-r--r--drivers/gpu/drm/radeon/evergreen.c112
-rw-r--r--drivers/gpu/drm/radeon/pptable.h2
-rw-r--r--drivers/gpu/drm/radeon/radeon_display.c66
-rw-r--r--drivers/gpu/drm/radeon/radeon_gem.c6
-rw-r--r--drivers/gpu/drm/radeon/radeon_i2c.c15
-rw-r--r--drivers/gpu/drm/radeon/uvd_v1_0.c26
6 files changed, 120 insertions, 107 deletions
diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
index bc4ab71613a5..3cbc6eedbf66 100644
--- a/drivers/gpu/drm/radeon/evergreen.c
+++ b/drivers/gpu/drm/radeon/evergreen.c
@@ -1630,6 +1630,7 @@ void evergreen_pm_misc(struct radeon_device *rdev)
int req_cm_idx = rdev->pm.requested_clock_mode_index;
struct radeon_power_state *ps = &rdev->pm.power_state[req_ps_idx];
struct radeon_voltage *voltage = &ps->clock_info[req_cm_idx].voltage;
+ struct drm_device *ddev = rdev_to_drm(rdev);
if (voltage->type == VOLTAGE_SW) {
/* 0xff0x are flags rather then an actual voltage */
@@ -1638,7 +1639,7 @@ void evergreen_pm_misc(struct radeon_device *rdev)
if (voltage->voltage && (voltage->voltage != rdev->pm.current_vddc)) {
radeon_atom_set_voltage(rdev, voltage->voltage, SET_VOLTAGE_TYPE_ASIC_VDDC);
rdev->pm.current_vddc = voltage->voltage;
- DRM_DEBUG("Setting: vddc: %d\n", voltage->voltage);
+ drm_dbg(ddev, "Setting: vddc: %d\n", voltage->voltage);
}
/* starting with BTC, there is one state that is used for both
@@ -1659,7 +1660,7 @@ void evergreen_pm_misc(struct radeon_device *rdev)
if (voltage->vddci && (voltage->vddci != rdev->pm.current_vddci)) {
radeon_atom_set_voltage(rdev, voltage->vddci, SET_VOLTAGE_TYPE_ASIC_VDDCI);
rdev->pm.current_vddci = voltage->vddci;
- DRM_DEBUG("Setting: vddci: %d\n", voltage->vddci);
+ drm_dbg(ddev, "Setting: vddci: %d\n", voltage->vddci);
}
}
}
@@ -2168,6 +2169,7 @@ static void evergreen_program_watermarks(struct radeon_device *rdev,
u32 pipe_offset = radeon_crtc->crtc_id * 16;
u32 tmp, arb_control3;
fixed20_12 a, b, c;
+ struct drm_device *ddev = rdev_to_drm(rdev);
if (radeon_crtc->base.enabled && num_heads && mode) {
active_time = (u32) div_u64((u64)mode->crtc_hdisplay * 1000000,
@@ -2244,14 +2246,14 @@ static void evergreen_program_watermarks(struct radeon_device *rdev,
!evergreen_average_bandwidth_vs_available_bandwidth(&wm_high) ||
!evergreen_check_latency_hiding(&wm_high) ||
(rdev->disp_priority == 2)) {
- DRM_DEBUG_KMS("force priority a to high\n");
+ drm_dbg_kms(ddev, "force priority a to high\n");
priority_a_cnt |= PRIORITY_ALWAYS_ON;
}
if (!evergreen_average_bandwidth_vs_dram_bandwidth_for_display(&wm_low) ||
!evergreen_average_bandwidth_vs_available_bandwidth(&wm_low) ||
!evergreen_check_latency_hiding(&wm_low) ||
(rdev->disp_priority == 2)) {
- DRM_DEBUG_KMS("force priority b to high\n");
+ drm_dbg_kms(ddev, "force priority b to high\n");
priority_b_cnt |= PRIORITY_ALWAYS_ON;
}
@@ -2401,6 +2403,7 @@ static int evergreen_pcie_gart_enable(struct radeon_device *rdev)
{
u32 tmp;
int r;
+ struct drm_device *ddev = rdev_to_drm(rdev);
if (rdev->gart.robj == NULL) {
dev_err(rdev->dev, "No VRAM object for PCIE GART.\n");
@@ -2448,7 +2451,7 @@ static int evergreen_pcie_gart_enable(struct radeon_device *rdev)
WREG32(VM_CONTEXT1_CNTL, 0);
evergreen_pcie_gart_tlb_flush(rdev);
- DRM_INFO("PCIE GART of %uM enabled (table at 0x%016llX).\n",
+ drm_info(ddev, "PCIE GART of %uM enabled (table at 0x%016llX).\n",
(unsigned)(rdev->mc.gtt_size >> 20),
(unsigned long long)rdev->gart.table_addr);
rdev->gart.ready = true;
@@ -2626,16 +2629,17 @@ static void evergreen_blank_dp_output(struct radeon_device *rdev,
unsigned stream_ctrl;
unsigned fifo_ctrl;
unsigned counter = 0;
+ struct drm_device *ddev = rdev_to_drm(rdev);
if (dig_fe >= ARRAY_SIZE(evergreen_dp_offsets)) {
- DRM_ERROR("invalid dig_fe %d\n", dig_fe);
+ drm_err(ddev, "invalid dig_fe %d\n", dig_fe);
return;
}
stream_ctrl = RREG32(EVERGREEN_DP_VID_STREAM_CNTL +
evergreen_dp_offsets[dig_fe]);
if (!(stream_ctrl & EVERGREEN_DP_VID_STREAM_CNTL_ENABLE)) {
- DRM_ERROR("dig %d , should be enable\n", dig_fe);
+ drm_err(ddev, "dig %d , should be enable\n", dig_fe);
return;
}
@@ -2652,7 +2656,7 @@ static void evergreen_blank_dp_output(struct radeon_device *rdev,
evergreen_dp_offsets[dig_fe]);
}
if (counter >= 32)
- DRM_ERROR("counter exceeds %d\n", counter);
+ drm_err(ddev, "counter exceeds %d\n", counter);
fifo_ctrl = RREG32(EVERGREEN_DP_STEER_FIFO + evergreen_dp_offsets[dig_fe]);
fifo_ctrl |= EVERGREEN_DP_STEER_FIFO_RESET;
@@ -2998,10 +3002,11 @@ static int evergreen_cp_start(struct radeon_device *rdev)
struct radeon_ring *ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX];
int r, i;
uint32_t cp_me;
+ struct drm_device *ddev = rdev_to_drm(rdev);
r = radeon_ring_lock(rdev, ring, 7);
if (r) {
- DRM_ERROR("radeon: cp failed to lock ring (%d).\n", r);
+ drm_err(ddev, "radeon: cp failed to lock ring (%d).\n", r);
return r;
}
radeon_ring_write(ring, PACKET3(PACKET3_ME_INITIALIZE, 5));
@@ -3018,7 +3023,7 @@ static int evergreen_cp_start(struct radeon_device *rdev)
r = radeon_ring_lock(rdev, ring, evergreen_default_size + 19);
if (r) {
- DRM_ERROR("radeon: cp failed to lock ring (%d).\n", r);
+ drm_err(ddev, "radeon: cp failed to lock ring (%d).\n", r);
return r;
}
@@ -3826,6 +3831,7 @@ u32 evergreen_gpu_check_soft_reset(struct radeon_device *rdev)
{
u32 reset_mask = 0;
u32 tmp;
+ struct drm_device *ddev = rdev_to_drm(rdev);
/* GRBM_STATUS */
tmp = RREG32(GRBM_STATUS);
@@ -3884,7 +3890,7 @@ u32 evergreen_gpu_check_soft_reset(struct radeon_device *rdev)
/* Skip MC reset as it's mostly likely not hung, just busy */
if (reset_mask & RADEON_RESET_MC) {
- DRM_DEBUG("MC busy: 0x%08X, clearing.\n", reset_mask);
+ drm_dbg(ddev, "MC busy: 0x%08X, clearing.\n", reset_mask);
reset_mask &= ~RADEON_RESET_MC;
}
@@ -4495,6 +4501,7 @@ int evergreen_irq_set(struct radeon_device *rdev)
u32 grbm_int_cntl = 0;
u32 dma_cntl, dma_cntl1 = 0;
u32 thermal_int = 0;
+ struct drm_device *ddev = rdev_to_drm(rdev);
if (!rdev->irq.installed) {
WARN(1, "Can't enable IRQ/MSI because no handler is installed\n");
@@ -4520,40 +4527,40 @@ int evergreen_irq_set(struct radeon_device *rdev)
if (rdev->family >= CHIP_CAYMAN) {
/* enable CP interrupts on all rings */
if (atomic_read(&rdev->irq.ring_int[RADEON_RING_TYPE_GFX_INDEX])) {
- DRM_DEBUG("evergreen_irq_set: sw int gfx\n");
+ drm_dbg(ddev, "%s : sw int gfx\n", __func__);
cp_int_cntl |= TIME_STAMP_INT_ENABLE;
}
if (atomic_read(&rdev->irq.ring_int[CAYMAN_RING_TYPE_CP1_INDEX])) {
- DRM_DEBUG("evergreen_irq_set: sw int cp1\n");
+ drm_dbg(ddev, "%s : sw int cp1\n", __func__);
cp_int_cntl1 |= TIME_STAMP_INT_ENABLE;
}
if (atomic_read(&rdev->irq.ring_int[CAYMAN_RING_TYPE_CP2_INDEX])) {
- DRM_DEBUG("evergreen_irq_set: sw int cp2\n");
+ drm_dbg(ddev, "%s : sw int cp2\n", __func__);
cp_int_cntl2 |= TIME_STAMP_INT_ENABLE;
}
} else {
if (atomic_read(&rdev->irq.ring_int[RADEON_RING_TYPE_GFX_INDEX])) {
- DRM_DEBUG("evergreen_irq_set: sw int gfx\n");
+ drm_dbg(ddev, "%s : sw int gfx\n", __func__);
cp_int_cntl |= RB_INT_ENABLE;
cp_int_cntl |= TIME_STAMP_INT_ENABLE;
}
}
if (atomic_read(&rdev->irq.ring_int[R600_RING_TYPE_DMA_INDEX])) {
- DRM_DEBUG("r600_irq_set: sw int dma\n");
+ drm_dbg(ddev, "r600_irq_set: sw int dma\n");
dma_cntl |= TRAP_ENABLE;
}
if (rdev->family >= CHIP_CAYMAN) {
dma_cntl1 = RREG32(CAYMAN_DMA1_CNTL) & ~TRAP_ENABLE;
if (atomic_read(&rdev->irq.ring_int[CAYMAN_RING_TYPE_DMA1_INDEX])) {
- DRM_DEBUG("r600_irq_set: sw int dma1\n");
+ drm_dbg(ddev, "r600_irq_set: sw int dma1\n");
dma_cntl1 |= TRAP_ENABLE;
}
}
if (rdev->irq.dpm_thermal) {
- DRM_DEBUG("dpm thermal\n");
+ drm_dbg(ddev, "dpm thermal\n");
thermal_int |= THERM_INT_MASK_HIGH | THERM_INT_MASK_LOW;
}
@@ -4713,6 +4720,7 @@ int evergreen_irq_process(struct radeon_device *rdev)
bool queue_thermal = false;
u32 status, addr;
const char *event_name;
+ struct drm_device *ddev = rdev_to_drm(rdev);
if (!rdev->ih.enabled || rdev->shutdown)
return IRQ_NONE;
@@ -4725,7 +4733,7 @@ restart_ih:
return IRQ_NONE;
rptr = rdev->ih.rptr;
- DRM_DEBUG("evergreen_irq_process start: rptr %d, wptr %d\n", rptr, wptr);
+ drm_dbg(ddev, "%s start: rptr %d, wptr %d\n", __func__, rptr, wptr);
/* Order reading of wptr vs. reading of IH ring data */
rmb();
@@ -4766,18 +4774,18 @@ restart_ih:
mask = LB_D1_VLINE_INTERRUPT;
event_name = "vline";
} else {
- DRM_DEBUG("Unhandled interrupt: %d %d\n",
+ drm_dbg(ddev, "Unhandled interrupt: %d %d\n",
src_id, src_data);
break;
}
if (!(disp_int[crtc_idx] & mask)) {
- DRM_DEBUG("IH: D%d %s - IH event w/o asserted irq bit?\n",
+ drm_dbg(ddev, "IH: D%d %s - IH event w/o asserted irq bit?\n",
crtc_idx + 1, event_name);
}
disp_int[crtc_idx] &= ~mask;
- DRM_DEBUG("IH: D%d %s\n", crtc_idx + 1, event_name);
+ drm_dbg(ddev, "IH: D%d %s\n", crtc_idx + 1, event_name);
break;
case 8: /* D1 page flip */
@@ -4786,7 +4794,7 @@ restart_ih:
case 14: /* D4 page flip */
case 16: /* D5 page flip */
case 18: /* D6 page flip */
- DRM_DEBUG("IH: D%d flip\n", ((src_id - 8) >> 1) + 1);
+ drm_dbg(ddev, "IH: D%d flip\n", ((src_id - 8) >> 1) + 1);
if (radeon_use_pflipirq > 0)
radeon_crtc_handle_flip(rdev, (src_id - 8) >> 1);
break;
@@ -4804,39 +4812,39 @@ restart_ih:
event_name = "HPD_RX";
} else {
- DRM_DEBUG("Unhandled interrupt: %d %d\n",
+ drm_dbg(ddev, "Unhandled interrupt: %d %d\n",
src_id, src_data);
break;
}
if (!(disp_int[hpd_idx] & mask))
- DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
+ drm_dbg(ddev, "IH: IH event w/o asserted irq bit?\n");
disp_int[hpd_idx] &= ~mask;
- DRM_DEBUG("IH: %s%d\n", event_name, hpd_idx + 1);
+ drm_dbg(ddev, "IH: %s%d\n", event_name, hpd_idx + 1);
break;
case 44: /* hdmi */
afmt_idx = src_data;
if (afmt_idx > 5) {
- DRM_ERROR("Unhandled interrupt: %d %d\n",
+ drm_err(ddev, "Unhandled interrupt: %d %d\n",
src_id, src_data);
break;
}
if (!(afmt_status[afmt_idx] & AFMT_AZ_FORMAT_WTRIG))
- DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
+ drm_dbg(ddev, "IH: IH event w/o asserted irq bit?\n");
afmt_status[afmt_idx] &= ~AFMT_AZ_FORMAT_WTRIG;
queue_hdmi = true;
- DRM_DEBUG("IH: HDMI%d\n", afmt_idx + 1);
+ drm_dbg(ddev, "IH: HDMI%d\n", afmt_idx + 1);
break;
case 96:
- DRM_ERROR("SRBM_READ_ERROR: 0x%x\n", RREG32(SRBM_READ_ERROR));
+ drm_err(ddev, "SRBM_READ_ERROR: 0x%x\n", RREG32(SRBM_READ_ERROR));
WREG32(SRBM_INT_ACK, 0x1);
break;
case 124: /* UVD */
- DRM_DEBUG("IH: UVD int: 0x%08x\n", src_data);
+ drm_dbg(ddev, "IH: UVD int: 0x%08x\n", src_data);
radeon_fence_process(rdev, R600_RING_TYPE_UVD_INDEX);
break;
case 146:
@@ -4857,11 +4865,11 @@ restart_ih:
case 176: /* CP_INT in ring buffer */
case 177: /* CP_INT in IB1 */
case 178: /* CP_INT in IB2 */
- DRM_DEBUG("IH: CP int: 0x%08x\n", src_data);
+ drm_dbg(ddev, "IH: CP int: 0x%08x\n", src_data);
radeon_fence_process(rdev, RADEON_RING_TYPE_GFX_INDEX);
break;
case 181: /* CP EOP event */
- DRM_DEBUG("IH: CP EOP\n");
+ drm_dbg(ddev, "IH: CP EOP\n");
if (rdev->family >= CHIP_CAYMAN) {
switch (src_data) {
case 0:
@@ -4878,30 +4886,30 @@ restart_ih:
radeon_fence_process(rdev, RADEON_RING_TYPE_GFX_INDEX);
break;
case 224: /* DMA trap event */
- DRM_DEBUG("IH: DMA trap\n");
+ drm_dbg(ddev, "IH: DMA trap\n");
radeon_fence_process(rdev, R600_RING_TYPE_DMA_INDEX);
break;
case 230: /* thermal low to high */
- DRM_DEBUG("IH: thermal low to high\n");
+ drm_dbg(ddev, "IH: thermal low to high\n");
rdev->pm.dpm.thermal.high_to_low = false;
queue_thermal = true;
break;
case 231: /* thermal high to low */
- DRM_DEBUG("IH: thermal high to low\n");
+ drm_dbg(ddev, "IH: thermal high to low\n");
rdev->pm.dpm.thermal.high_to_low = true;
queue_thermal = true;
break;
case 233: /* GUI IDLE */
- DRM_DEBUG("IH: GUI idle\n");
+ drm_dbg(ddev, "IH: GUI idle\n");
break;
case 244: /* DMA trap event */
if (rdev->family >= CHIP_CAYMAN) {
- DRM_DEBUG("IH: DMA1 trap\n");
+ drm_dbg(ddev, "IH: DMA1 trap\n");
radeon_fence_process(rdev, CAYMAN_RING_TYPE_DMA1_INDEX);
}
break;
default:
- DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
+ drm_dbg(ddev, "Unhandled interrupt: %d %d\n", src_id, src_data);
break;
}
@@ -5000,6 +5008,7 @@ static int evergreen_startup(struct radeon_device *rdev)
{
struct radeon_ring *ring;
int r;
+ struct drm_device *ddev = rdev_to_drm(rdev);
/* enable pcie gen2 link */
evergreen_pcie_gen2_enable(rdev);
@@ -5016,7 +5025,7 @@ static int evergreen_startup(struct radeon_device *rdev)
if (ASIC_IS_DCE5(rdev) && !rdev->pm.dpm_enabled) {
r = ni_mc_load_microcode(rdev);
if (r) {
- DRM_ERROR("Failed to load MC firmware!\n");
+ drm_err(ddev, "Failed to load MC firmware!\n");
return r;
}
}
@@ -5038,7 +5047,7 @@ static int evergreen_startup(struct radeon_device *rdev)
rdev->rlc.cs_data = evergreen_cs_data;
r = sumo_rlc_init(rdev);
if (r) {
- DRM_ERROR("Failed to init rlc BOs!\n");
+ drm_err(ddev, "Failed to init rlc BOs!\n");
return r;
}
}
@@ -5071,7 +5080,7 @@ static int evergreen_startup(struct radeon_device *rdev)
r = r600_irq_init(rdev);
if (r) {
- DRM_ERROR("radeon: IH init failed (%d).\n", r);
+ drm_err(ddev, "radeon: IH init failed (%d).\n", r);
radeon_irq_kms_fini(rdev);
return r;
}
@@ -5109,7 +5118,7 @@ static int evergreen_startup(struct radeon_device *rdev)
r = radeon_audio_init(rdev);
if (r) {
- DRM_ERROR("radeon: audio init failed\n");
+ drm_err(ddev, "radeon: audio init failed\n");
return r;
}
@@ -5119,6 +5128,7 @@ static int evergreen_startup(struct radeon_device *rdev)
int evergreen_resume(struct radeon_device *rdev)
{
int r;
+ struct drm_device *ddev = rdev_to_drm(rdev);
/* reset the asic, the gfx blocks are often in a bad state
* after the driver is unloaded or after a resume
@@ -5141,7 +5151,7 @@ int evergreen_resume(struct radeon_device *rdev)
rdev->accel_working = true;
r = evergreen_startup(rdev);
if (r) {
- DRM_ERROR("evergreen startup failed on resume\n");
+ drm_err(ddev, "evergreen startup failed on resume\n");
rdev->accel_working = false;
return r;
}
@@ -5176,6 +5186,7 @@ int evergreen_suspend(struct radeon_device *rdev)
int evergreen_init(struct radeon_device *rdev)
{
int r;
+ struct drm_device *ddev = rdev_to_drm(rdev);
/* Read BIOS */
if (!radeon_get_bios(rdev)) {
@@ -5201,7 +5212,7 @@ int evergreen_init(struct radeon_device *rdev)
dev_err(rdev->dev, "Card not posted and no BIOS - ignoring\n");
return -EINVAL;
}
- DRM_INFO("GPU not posted. posting now...\n");
+ drm_info(ddev, "GPU not posted. posting now...\n");
atom_asic_init(rdev->mode_info.atom_context);
}
/* init golden registers */
@@ -5233,7 +5244,7 @@ int evergreen_init(struct radeon_device *rdev)
if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw || !rdev->mc_fw) {
r = ni_init_microcode(rdev);
if (r) {
- DRM_ERROR("Failed to load firmware!\n");
+ drm_err(ddev, "Failed to load firmware!\n");
return r;
}
}
@@ -5241,7 +5252,7 @@ int evergreen_init(struct radeon_device *rdev)
if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) {
r = r600_init_microcode(rdev);
if (r) {
- DRM_ERROR("Failed to load firmware!\n");
+ drm_err(ddev, "Failed to load firmware!\n");
return r;
}
}
@@ -5287,7 +5298,7 @@ int evergreen_init(struct radeon_device *rdev)
*/
if (ASIC_IS_DCE5(rdev)) {
if (!rdev->mc_fw && !(rdev->flags & RADEON_IS_IGP)) {
- DRM_ERROR("radeon: MC ucode required for NI+.\n");
+ drm_err(ddev, "radeon: MC ucode required for NI+.\n");
return -EINVAL;
}
}
@@ -5323,6 +5334,7 @@ void evergreen_fini(struct radeon_device *rdev)
void evergreen_pcie_gen2_enable(struct radeon_device *rdev)
{
u32 link_width_cntl, speed_cntl;
+ struct drm_device *ddev = rdev_to_drm(rdev);
if (radeon_pcie_gen2 == 0)
return;
@@ -5343,11 +5355,11 @@ void evergreen_pcie_gen2_enable(struct radeon_device *rdev)
speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL);
if (speed_cntl & LC_CURRENT_DATA_RATE) {
- DRM_INFO("PCIE gen 2 link speeds already enabled\n");
+ drm_info(ddev, "PCIE gen 2 link speeds already enabled\n");
return;
}
- DRM_INFO("enabling PCIE gen 2 link speeds, disable with radeon.pcie_gen2=0\n");
+ drm_info(ddev, "enabling PCIE gen 2 link speeds, disable with radeon.pcie_gen2=0\n");
if ((speed_cntl & LC_OTHER_SIDE_EVER_SENT_GEN2) ||
(speed_cntl & LC_OTHER_SIDE_SUPPORTS_GEN2)) {
diff --git a/drivers/gpu/drm/radeon/pptable.h b/drivers/gpu/drm/radeon/pptable.h
index 969a8fb0ee9e..f4e71046dc91 100644
--- a/drivers/gpu/drm/radeon/pptable.h
+++ b/drivers/gpu/drm/radeon/pptable.h
@@ -450,7 +450,7 @@ typedef struct _ClockInfoArray{
//sizeof(ATOM_PPLIB_CLOCK_INFO)
UCHAR ucEntrySize;
- UCHAR clockInfo[] __counted_by(ucNumEntries);
+ UCHAR clockInfo[] /*__counted_by(ucNumEntries)*/;
}ClockInfoArray;
typedef struct _NonClockInfoArray{
diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
index 35fb99bcd9a7..bc28117e01b4 100644
--- a/drivers/gpu/drm/radeon/radeon_display.c
+++ b/drivers/gpu/drm/radeon/radeon_display.c
@@ -41,6 +41,7 @@
#include <drm/drm_probe_helper.h>
#include <drm/drm_vblank.h>
#include <drm/radeon_drm.h>
+#include <drm/drm_print.h>
#include "atom.h"
#include "radeon.h"
@@ -273,7 +274,7 @@ static void radeon_unpin_work_func(struct work_struct *__work)
radeon_bo_unpin(work->old_rbo);
radeon_bo_unreserve(work->old_rbo);
} else
- DRM_ERROR("failed to reserve buffer after flip\n");
+ drm_err(&work->rdev->ddev, "failed to reserve buffer after flip\n");
drm_gem_object_put(&work->old_rbo->tbo.base);
kfree(work);
@@ -434,7 +435,7 @@ static void radeon_flip_work_func(struct work_struct *__work)
r = dma_fence_wait(work->fence, false);
if (r)
- DRM_ERROR("failed to wait on page flip fence (%d)!\n", r);
+ drm_err(dev, "failed to wait on page flip fence (%d)!\n", r);
/* We continue with the page flip even if we failed to wait on
* the fence, otherwise the DRM core and userspace will be
@@ -521,7 +522,7 @@ static int radeon_crtc_page_flip_target(struct drm_crtc *crtc,
r = radeon_bo_reserve(new_rbo, false);
if (unlikely(r != 0)) {
- DRM_ERROR("failed to reserve new rbo buffer before flip\n");
+ drm_err(dev, "failed to reserve new rbo buffer before flip\n");
goto cleanup;
}
/* Only 27 bit offset for legacy CRTC */
@@ -530,14 +531,14 @@ static int radeon_crtc_page_flip_target(struct drm_crtc *crtc,
if (unlikely(r != 0)) {
radeon_bo_unreserve(new_rbo);
r = -EINVAL;
- DRM_ERROR("failed to pin new rbo buffer before flip\n");
+ drm_err(dev, "failed to pin new rbo buffer before flip\n");
goto cleanup;
}
r = dma_resv_get_singleton(new_rbo->tbo.base.resv, DMA_RESV_USAGE_WRITE,
&work->fence);
if (r) {
radeon_bo_unreserve(new_rbo);
- DRM_ERROR("failed to get new rbo buffer fences\n");
+ drm_err(dev, "failed to get new rbo buffer fences\n");
goto cleanup;
}
radeon_bo_get_tiling_flags(new_rbo, &tiling_flags, NULL);
@@ -604,7 +605,7 @@ static int radeon_crtc_page_flip_target(struct drm_crtc *crtc,
pflip_cleanup:
if (unlikely(radeon_bo_reserve(new_rbo, false) != 0)) {
- DRM_ERROR("failed to reserve new rbo in error path\n");
+ drm_err(dev, "failed to reserve new rbo in error path\n");
goto cleanup;
}
radeon_bo_unpin(new_rbo);
@@ -772,15 +773,15 @@ static void radeon_print_display_setup(struct drm_device *dev)
uint32_t devices;
int i = 0;
- DRM_INFO("Radeon Display Connectors\n");
+ drm_info(dev, "Radeon Display Connectors\n");
list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
radeon_connector = to_radeon_connector(connector);
- DRM_INFO("Connector %d:\n", i);
- DRM_INFO(" %s\n", connector->name);
+ drm_info(dev, "Connector %d:\n", i);
+ drm_info(dev, " %s\n", connector->name);
if (radeon_connector->hpd.hpd != RADEON_HPD_NONE)
- DRM_INFO(" %s\n", hpd_names[radeon_connector->hpd.hpd]);
+ drm_info(dev, " %s\n", hpd_names[radeon_connector->hpd.hpd]);
if (radeon_connector->ddc_bus) {
- DRM_INFO(" DDC: 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n",
+ drm_info(dev, " DDC: 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n",
radeon_connector->ddc_bus->rec.mask_clk_reg,
radeon_connector->ddc_bus->rec.mask_data_reg,
radeon_connector->ddc_bus->rec.a_clk_reg,
@@ -790,11 +791,11 @@ static void radeon_print_display_setup(struct drm_device *dev)
radeon_connector->ddc_bus->rec.y_clk_reg,
radeon_connector->ddc_bus->rec.y_data_reg);
if (radeon_connector->router.ddc_valid)
- DRM_INFO(" DDC Router 0x%x/0x%x\n",
+ drm_info(dev, " DDC Router 0x%x/0x%x\n",
radeon_connector->router.ddc_mux_control_pin,
radeon_connector->router.ddc_mux_state);
if (radeon_connector->router.cd_valid)
- DRM_INFO(" Clock/Data Router 0x%x/0x%x\n",
+ drm_info(dev, " Clock/Data Router 0x%x/0x%x\n",
radeon_connector->router.cd_mux_control_pin,
radeon_connector->router.cd_mux_state);
} else {
@@ -804,35 +805,46 @@ static void radeon_print_display_setup(struct drm_device *dev)
connector->connector_type == DRM_MODE_CONNECTOR_DVIA ||
connector->connector_type == DRM_MODE_CONNECTOR_HDMIA ||
connector->connector_type == DRM_MODE_CONNECTOR_HDMIB)
- DRM_INFO(" DDC: no ddc bus - possible BIOS bug - please report to xorg-driver-ati@lists.x.org\n");
+ drm_info(dev, " DDC: no ddc bus - possible BIOS bug - please report to xorg-driver-ati@lists.x.org\n");
}
- DRM_INFO(" Encoders:\n");
+ drm_info(dev, " Encoders:\n");
list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
radeon_encoder = to_radeon_encoder(encoder);
devices = radeon_encoder->devices & radeon_connector->devices;
if (devices) {
if (devices & ATOM_DEVICE_CRT1_SUPPORT)
- DRM_INFO(" CRT1: %s\n", encoder_names[radeon_encoder->encoder_id]);
+ drm_info(dev, " CRT1: %s\n",
+ encoder_names[radeon_encoder->encoder_id]);
if (devices & ATOM_DEVICE_CRT2_SUPPORT)
- DRM_INFO(" CRT2: %s\n", encoder_names[radeon_encoder->encoder_id]);
+ drm_info(dev, " CRT2: %s\n",
+ encoder_names[radeon_encoder->encoder_id]);
if (devices & ATOM_DEVICE_LCD1_SUPPORT)
- DRM_INFO(" LCD1: %s\n", encoder_names[radeon_encoder->encoder_id]);
+ drm_info(dev, " LCD1: %s\n",
+ encoder_names[radeon_encoder->encoder_id]);
if (devices & ATOM_DEVICE_DFP1_SUPPORT)
- DRM_INFO(" DFP1: %s\n", encoder_names[radeon_encoder->encoder_id]);
+ drm_info(dev, " DFP1: %s\n",
+ encoder_names[radeon_encoder->encoder_id]);
if (devices & ATOM_DEVICE_DFP2_SUPPORT)
- DRM_INFO(" DFP2: %s\n", encoder_names[radeon_encoder->encoder_id]);
+ drm_info(dev, " DFP2: %s\n",
+ encoder_names[radeon_encoder->encoder_id]);
if (devices & ATOM_DEVICE_DFP3_SUPPORT)
- DRM_INFO(" DFP3: %s\n", encoder_names[radeon_encoder->encoder_id]);
+ drm_info(dev, " DFP3: %s\n",
+ encoder_names[radeon_encoder->encoder_id]);
if (devices & ATOM_DEVICE_DFP4_SUPPORT)
- DRM_INFO(" DFP4: %s\n", encoder_names[radeon_encoder->encoder_id]);
+ drm_info(dev, " DFP4: %s\n",
+ encoder_names[radeon_encoder->encoder_id]);
if (devices & ATOM_DEVICE_DFP5_SUPPORT)
- DRM_INFO(" DFP5: %s\n", encoder_names[radeon_encoder->encoder_id]);
+ drm_info(dev, " DFP5: %s\n",
+ encoder_names[radeon_encoder->encoder_id]);
if (devices & ATOM_DEVICE_DFP6_SUPPORT)
- DRM_INFO(" DFP6: %s\n", encoder_names[radeon_encoder->encoder_id]);
+ drm_info(dev, " DFP6: %s\n",
+ encoder_names[radeon_encoder->encoder_id]);
if (devices & ATOM_DEVICE_TV1_SUPPORT)
- DRM_INFO(" TV1: %s\n", encoder_names[radeon_encoder->encoder_id]);
+ drm_info(dev, " TV1: %s\n",
+ encoder_names[radeon_encoder->encoder_id]);
if (devices & ATOM_DEVICE_CV_SUPPORT)
- DRM_INFO(" CV: %s\n", encoder_names[radeon_encoder->encoder_id]);
+ drm_info(dev, " CV: %s\n",
+ encoder_names[radeon_encoder->encoder_id]);
}
}
i++;
@@ -1747,7 +1759,7 @@ bool radeon_crtc_scaling_mode_fixup(struct drm_crtc *crtc,
* (ie all encoder can work with the same
* scaling).
*/
- DRM_ERROR("Scaling not consistent across encoder.\n");
+ drm_err(dev, "Scaling not consistent across encoder.\n");
return false;
}
}
diff --git a/drivers/gpu/drm/radeon/radeon_gem.c b/drivers/gpu/drm/radeon/radeon_gem.c
index 18ca1bcfd2f9..20fc87409f2e 100644
--- a/drivers/gpu/drm/radeon/radeon_gem.c
+++ b/drivers/gpu/drm/radeon/radeon_gem.c
@@ -110,7 +110,7 @@ int radeon_gem_object_create(struct radeon_device *rdev, unsigned long size,
*/
max_size = rdev->mc.gtt_size - rdev->gart_pin_size;
if (size > max_size) {
- DRM_DEBUG("Allocation size %ldMb bigger than %ldMb limit\n",
+ DRM_DEBUG("Allocation size %luMb bigger than %luMb limit\n",
size >> 20, max_size >> 20);
return -ENOMEM;
}
@@ -560,7 +560,7 @@ int radeon_gem_set_tiling_ioctl(struct drm_device *dev, void *data,
struct radeon_bo *robj;
int r = 0;
- DRM_DEBUG("%d \n", args->handle);
+ DRM_DEBUG("%u \n", args->handle);
gobj = drm_gem_object_lookup(filp, args->handle);
if (gobj == NULL)
return -ENOENT;
@@ -886,7 +886,7 @@ static int radeon_debugfs_gem_info_show(struct seq_file *m, void *unused)
placement = " CPU";
break;
}
- seq_printf(m, "bo[0x%08x] %8ldkB %8ldMB %s pid %8ld\n",
+ seq_printf(m, "bo[0x%08x] %8lukB %8luMB %s pid %8lu\n",
i, radeon_bo_size(rbo) >> 10, radeon_bo_size(rbo) >> 20,
placement, (unsigned long)rbo->pid);
i++;
diff --git a/drivers/gpu/drm/radeon/radeon_i2c.c b/drivers/gpu/drm/radeon/radeon_i2c.c
index 1f16619ed06e..f3ba4187092c 100644
--- a/drivers/gpu/drm/radeon/radeon_i2c.c
+++ b/drivers/gpu/drm/radeon/radeon_i2c.c
@@ -931,7 +931,7 @@ struct radeon_i2c_chan *radeon_i2c_create(struct drm_device *dev,
snprintf(i2c->adapter.name, sizeof(i2c->adapter.name),
"Radeon i2c hw bus %s", name);
i2c->adapter.algo = &radeon_i2c_algo;
- ret = i2c_add_adapter(&i2c->adapter);
+ ret = devm_i2c_add_adapter(dev->dev, &i2c->adapter);
if (ret)
goto out_free;
} else if (rec->hw_capable &&
@@ -972,15 +972,6 @@ out_free:
}
-void radeon_i2c_destroy(struct radeon_i2c_chan *i2c)
-{
- if (!i2c)
- return;
- WARN_ON(i2c->has_aux);
- i2c_del_adapter(&i2c->adapter);
- kfree(i2c);
-}
-
/* Add the default buses */
void radeon_i2c_init(struct radeon_device *rdev)
{
@@ -999,10 +990,8 @@ void radeon_i2c_fini(struct radeon_device *rdev)
int i;
for (i = 0; i < RADEON_MAX_I2C_BUS; i++) {
- if (rdev->i2c_bus[i]) {
- radeon_i2c_destroy(rdev->i2c_bus[i]);
+ if (rdev->i2c_bus[i])
rdev->i2c_bus[i] = NULL;
- }
}
}
diff --git a/drivers/gpu/drm/radeon/uvd_v1_0.c b/drivers/gpu/drm/radeon/uvd_v1_0.c
index 5684639d20a6..5e6607e16244 100644
--- a/drivers/gpu/drm/radeon/uvd_v1_0.c
+++ b/drivers/gpu/drm/radeon/uvd_v1_0.c
@@ -179,7 +179,7 @@ int uvd_v1_0_init(struct radeon_device *rdev)
r = radeon_ring_lock(rdev, ring, 10);
if (r) {
- DRM_ERROR("radeon: ring failed to lock UVD ring (%d).\n", r);
+ drm_err(&rdev->ddev, "radeon: ring failed to lock UVD ring (%d).\n", r);
goto done;
}
@@ -232,7 +232,7 @@ done:
break;
}
- DRM_INFO("UVD initialized successfully.\n");
+ drm_info(&rdev->ddev, "UVD initialized successfully.\n");
}
return r;
@@ -338,7 +338,7 @@ int uvd_v1_0_start(struct radeon_device *rdev)
if (status & 2)
break;
- DRM_ERROR("UVD not responding, trying to reset the VCPU!!!\n");
+ drm_err(&rdev->ddev, "UVD not responding, trying to reset the VCPU!!!\n");
WREG32_P(UVD_SOFT_RESET, VCPU_SOFT_RESET, ~VCPU_SOFT_RESET);
mdelay(10);
WREG32_P(UVD_SOFT_RESET, 0, ~VCPU_SOFT_RESET);
@@ -347,7 +347,7 @@ int uvd_v1_0_start(struct radeon_device *rdev)
}
if (r) {
- DRM_ERROR("UVD not responding, giving up!!!\n");
+ drm_err(&rdev->ddev, "UVD not responding, giving up!!!\n");
return r;
}
@@ -427,7 +427,7 @@ int uvd_v1_0_ring_test(struct radeon_device *rdev, struct radeon_ring *ring)
WREG32(UVD_CONTEXT_ID, 0xCAFEDEAD);
r = radeon_ring_lock(rdev, ring, 3);
if (r) {
- DRM_ERROR("radeon: cp failed to lock ring %d (%d).\n",
+ drm_err(&rdev->ddev, "radeon: cp failed to lock ring %d (%d).\n",
ring->idx, r);
return r;
}
@@ -442,10 +442,10 @@ int uvd_v1_0_ring_test(struct radeon_device *rdev, struct radeon_ring *ring)
}
if (i < rdev->usec_timeout) {
- DRM_INFO("ring test on %d succeeded in %d usecs\n",
+ drm_info(&rdev->ddev, "ring test on %d succeeded in %d usecs\n",
ring->idx, i);
} else {
- DRM_ERROR("radeon: ring %d test failed (0x%08X)\n",
+ drm_err(&rdev->ddev, "radeon: ring %d test failed (0x%08X)\n",
ring->idx, tmp);
r = -EINVAL;
}
@@ -507,34 +507,34 @@ int uvd_v1_0_ib_test(struct radeon_device *rdev, struct radeon_ring *ring)
else
r = radeon_set_uvd_clocks(rdev, 53300, 40000);
if (r) {
- DRM_ERROR("radeon: failed to raise UVD clocks (%d).\n", r);
+ drm_err(&rdev->ddev, "radeon: failed to raise UVD clocks (%d).\n", r);
return r;
}
r = radeon_uvd_get_create_msg(rdev, ring->idx, 1, NULL);
if (r) {
- DRM_ERROR("radeon: failed to get create msg (%d).\n", r);
+ drm_err(&rdev->ddev, "radeon: failed to get create msg (%d).\n", r);
goto error;
}
r = radeon_uvd_get_destroy_msg(rdev, ring->idx, 1, &fence);
if (r) {
- DRM_ERROR("radeon: failed to get destroy ib (%d).\n", r);
+ drm_err(&rdev->ddev, "radeon: failed to get destroy ib (%d).\n", r);
goto error;
}
r = radeon_fence_wait_timeout(fence, false, usecs_to_jiffies(
RADEON_USEC_IB_TEST_TIMEOUT));
if (r < 0) {
- DRM_ERROR("radeon: fence wait failed (%d).\n", r);
+ drm_err(&rdev->ddev, "radeon: fence wait failed (%d).\n", r);
goto error;
} else if (r == 0) {
- DRM_ERROR("radeon: fence wait timed out.\n");
+ drm_err(&rdev->ddev, "radeon: fence wait timed out.\n");
r = -ETIMEDOUT;
goto error;
}
r = 0;
- DRM_INFO("ib test on ring %d succeeded\n", ring->idx);
+ drm_info(&rdev->ddev, "ib test on ring %d succeeded\n", ring->idx);
error:
radeon_fence_unref(&fence);
radeon_set_uvd_clocks(rdev, 0, 0);