Commit a795e4e9 authored by Dave Airlie's avatar Dave Airlie

Merge branch 'drm-fixes-4.0' of git://people.freedesktop.org/~agd5f/linux into drm-fixes

misc radeon fixes.

* 'drm-fixes-4.0' of git://people.freedesktop.org/~agd5f/linux:
  drm/radeon: only enable DP audio if the monitor supports it
  drm/radeon: fix atom aux payload size check for writes (v2)
  drm/radeon: fix 1 RB harvest config setup for TN/RL
  drm/radeon: enable SRBM timeout interrupt on EG/NI
  drm/radeon: enable SRBM timeout interrupt on SI
  drm/radeon: enable SRBM timeout interrupt on CIK v2
  drm/radeon: dump full IB if we hit a packet error
  drm/radeon: disable mclk switching with 120hz+ monitors
  drm/radeon: use drm_mode_vrefresh() rather than mode->vrefresh
  drm/radeon: enable native backlight control on old macs
parents 5b49afd6 3473f542
...@@ -178,6 +178,13 @@ radeon_dp_aux_transfer(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg) ...@@ -178,6 +178,13 @@ radeon_dp_aux_transfer(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg)
switch (msg->request & ~DP_AUX_I2C_MOT) { switch (msg->request & ~DP_AUX_I2C_MOT) {
case DP_AUX_NATIVE_WRITE: case DP_AUX_NATIVE_WRITE:
case DP_AUX_I2C_WRITE: case DP_AUX_I2C_WRITE:
/* The atom implementation only supports writes with a max payload of
* 12 bytes since it uses 4 bits for the total count (header + payload)
* in the parameter space. The atom interface supports 16 byte
* payloads for reads. The hw itself supports up to 16 bytes of payload.
*/
if (WARN_ON_ONCE(msg->size > 12))
return -E2BIG;
/* tx_size needs to be 4 even for bare address packets since the atom /* tx_size needs to be 4 even for bare address packets since the atom
* table needs the info in tx_buf[3]. * table needs the info in tx_buf[3].
*/ */
......
...@@ -731,7 +731,9 @@ atombios_get_encoder_mode(struct drm_encoder *encoder) ...@@ -731,7 +731,9 @@ atombios_get_encoder_mode(struct drm_encoder *encoder)
dig_connector = radeon_connector->con_priv; dig_connector = radeon_connector->con_priv;
if ((dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) || if ((dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) ||
(dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP)) { (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP)) {
if (radeon_audio != 0 && ASIC_IS_DCE4(rdev) && !ASIC_IS_DCE5(rdev)) if (radeon_audio != 0 &&
drm_detect_monitor_audio(radeon_connector_edid(connector)) &&
ASIC_IS_DCE4(rdev) && !ASIC_IS_DCE5(rdev))
return ATOM_ENCODER_MODE_DP_AUDIO; return ATOM_ENCODER_MODE_DP_AUDIO;
return ATOM_ENCODER_MODE_DP; return ATOM_ENCODER_MODE_DP;
} else if (radeon_audio != 0) { } else if (radeon_audio != 0) {
...@@ -747,7 +749,9 @@ atombios_get_encoder_mode(struct drm_encoder *encoder) ...@@ -747,7 +749,9 @@ atombios_get_encoder_mode(struct drm_encoder *encoder)
} }
break; break;
case DRM_MODE_CONNECTOR_eDP: case DRM_MODE_CONNECTOR_eDP:
if (radeon_audio != 0 && ASIC_IS_DCE4(rdev) && !ASIC_IS_DCE5(rdev)) if (radeon_audio != 0 &&
drm_detect_monitor_audio(radeon_connector_edid(connector)) &&
ASIC_IS_DCE4(rdev) && !ASIC_IS_DCE5(rdev))
return ATOM_ENCODER_MODE_DP_AUDIO; return ATOM_ENCODER_MODE_DP_AUDIO;
return ATOM_ENCODER_MODE_DP; return ATOM_ENCODER_MODE_DP;
case DRM_MODE_CONNECTOR_DVIA: case DRM_MODE_CONNECTOR_DVIA:
...@@ -1720,8 +1724,10 @@ radeon_atom_encoder_dpms_dig(struct drm_encoder *encoder, int mode) ...@@ -1720,8 +1724,10 @@ radeon_atom_encoder_dpms_dig(struct drm_encoder *encoder, int mode)
} }
encoder_mode = atombios_get_encoder_mode(encoder); encoder_mode = atombios_get_encoder_mode(encoder);
if (radeon_audio != 0 && if (connector && (radeon_audio != 0) &&
(encoder_mode == ATOM_ENCODER_MODE_HDMI || ENCODER_MODE_IS_DP(encoder_mode))) ((encoder_mode == ATOM_ENCODER_MODE_HDMI) ||
(ENCODER_MODE_IS_DP(encoder_mode) &&
drm_detect_monitor_audio(radeon_connector_edid(connector)))))
radeon_audio_dpms(encoder, mode); radeon_audio_dpms(encoder, mode);
} }
...@@ -2136,6 +2142,7 @@ radeon_atom_encoder_mode_set(struct drm_encoder *encoder, ...@@ -2136,6 +2142,7 @@ radeon_atom_encoder_mode_set(struct drm_encoder *encoder,
struct drm_device *dev = encoder->dev; struct drm_device *dev = encoder->dev;
struct radeon_device *rdev = dev->dev_private; struct radeon_device *rdev = dev->dev_private;
struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
struct drm_connector *connector = radeon_get_connector_for_encoder(encoder);
int encoder_mode; int encoder_mode;
radeon_encoder->pixel_clock = adjusted_mode->clock; radeon_encoder->pixel_clock = adjusted_mode->clock;
...@@ -2164,8 +2171,10 @@ radeon_atom_encoder_mode_set(struct drm_encoder *encoder, ...@@ -2164,8 +2171,10 @@ radeon_atom_encoder_mode_set(struct drm_encoder *encoder,
case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA: case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA:
/* handled in dpms */ /* handled in dpms */
encoder_mode = atombios_get_encoder_mode(encoder); encoder_mode = atombios_get_encoder_mode(encoder);
if (radeon_audio != 0 && if (connector && (radeon_audio != 0) &&
(encoder_mode == ATOM_ENCODER_MODE_HDMI || ENCODER_MODE_IS_DP(encoder_mode))) ((encoder_mode == ATOM_ENCODER_MODE_HDMI) ||
(ENCODER_MODE_IS_DP(encoder_mode) &&
drm_detect_monitor_audio(radeon_connector_edid(connector)))))
radeon_audio_mode_set(encoder, adjusted_mode); radeon_audio_mode_set(encoder, adjusted_mode);
break; break;
case ENCODER_OBJECT_ID_INTERNAL_DDI: case ENCODER_OBJECT_ID_INTERNAL_DDI:
......
...@@ -3613,6 +3613,8 @@ static void cik_gpu_init(struct radeon_device *rdev) ...@@ -3613,6 +3613,8 @@ static void cik_gpu_init(struct radeon_device *rdev)
} }
WREG32(GRBM_CNTL, GRBM_READ_TIMEOUT(0xff)); WREG32(GRBM_CNTL, GRBM_READ_TIMEOUT(0xff));
WREG32(SRBM_INT_CNTL, 0x1);
WREG32(SRBM_INT_ACK, 0x1);
WREG32(BIF_FB_EN, FB_READ_EN | FB_WRITE_EN); WREG32(BIF_FB_EN, FB_READ_EN | FB_WRITE_EN);
...@@ -7230,6 +7232,8 @@ static void cik_disable_interrupt_state(struct radeon_device *rdev) ...@@ -7230,6 +7232,8 @@ static void cik_disable_interrupt_state(struct radeon_device *rdev)
WREG32(CP_ME2_PIPE3_INT_CNTL, 0); WREG32(CP_ME2_PIPE3_INT_CNTL, 0);
/* grbm */ /* grbm */
WREG32(GRBM_INT_CNTL, 0); WREG32(GRBM_INT_CNTL, 0);
/* SRBM */
WREG32(SRBM_INT_CNTL, 0);
/* vline/vblank, etc. */ /* vline/vblank, etc. */
WREG32(LB_INTERRUPT_MASK + EVERGREEN_CRTC0_REGISTER_OFFSET, 0); WREG32(LB_INTERRUPT_MASK + EVERGREEN_CRTC0_REGISTER_OFFSET, 0);
WREG32(LB_INTERRUPT_MASK + EVERGREEN_CRTC1_REGISTER_OFFSET, 0); WREG32(LB_INTERRUPT_MASK + EVERGREEN_CRTC1_REGISTER_OFFSET, 0);
...@@ -8046,6 +8050,10 @@ int cik_irq_process(struct radeon_device *rdev) ...@@ -8046,6 +8050,10 @@ int cik_irq_process(struct radeon_device *rdev)
break; break;
} }
break; break;
case 96:
DRM_ERROR("SRBM_READ_ERROR: 0x%x\n", RREG32(SRBM_READ_ERROR));
WREG32(SRBM_INT_ACK, 0x1);
break;
case 124: /* UVD */ case 124: /* UVD */
DRM_DEBUG("IH: UVD int: 0x%08x\n", src_data); DRM_DEBUG("IH: UVD int: 0x%08x\n", src_data);
radeon_fence_process(rdev, R600_RING_TYPE_UVD_INDEX); radeon_fence_process(rdev, R600_RING_TYPE_UVD_INDEX);
......
...@@ -482,6 +482,10 @@ ...@@ -482,6 +482,10 @@
#define SOFT_RESET_ORB (1 << 23) #define SOFT_RESET_ORB (1 << 23)
#define SOFT_RESET_VCE (1 << 24) #define SOFT_RESET_VCE (1 << 24)
#define SRBM_READ_ERROR 0xE98
#define SRBM_INT_CNTL 0xEA0
#define SRBM_INT_ACK 0xEA8
#define VM_L2_CNTL 0x1400 #define VM_L2_CNTL 0x1400
#define ENABLE_L2_CACHE (1 << 0) #define ENABLE_L2_CACHE (1 << 0)
#define ENABLE_L2_FRAGMENT_PROCESSING (1 << 1) #define ENABLE_L2_FRAGMENT_PROCESSING (1 << 1)
......
...@@ -3253,6 +3253,8 @@ static void evergreen_gpu_init(struct radeon_device *rdev) ...@@ -3253,6 +3253,8 @@ static void evergreen_gpu_init(struct radeon_device *rdev)
} }
WREG32(GRBM_CNTL, GRBM_READ_TIMEOUT(0xff)); WREG32(GRBM_CNTL, GRBM_READ_TIMEOUT(0xff));
WREG32(SRBM_INT_CNTL, 0x1);
WREG32(SRBM_INT_ACK, 0x1);
evergreen_fix_pci_max_read_req_size(rdev); evergreen_fix_pci_max_read_req_size(rdev);
...@@ -4324,6 +4326,7 @@ void evergreen_disable_interrupt_state(struct radeon_device *rdev) ...@@ -4324,6 +4326,7 @@ void evergreen_disable_interrupt_state(struct radeon_device *rdev)
tmp = RREG32(DMA_CNTL) & ~TRAP_ENABLE; tmp = RREG32(DMA_CNTL) & ~TRAP_ENABLE;
WREG32(DMA_CNTL, tmp); WREG32(DMA_CNTL, tmp);
WREG32(GRBM_INT_CNTL, 0); WREG32(GRBM_INT_CNTL, 0);
WREG32(SRBM_INT_CNTL, 0);
WREG32(INT_MASK + EVERGREEN_CRTC0_REGISTER_OFFSET, 0); WREG32(INT_MASK + EVERGREEN_CRTC0_REGISTER_OFFSET, 0);
WREG32(INT_MASK + EVERGREEN_CRTC1_REGISTER_OFFSET, 0); WREG32(INT_MASK + EVERGREEN_CRTC1_REGISTER_OFFSET, 0);
if (rdev->num_crtc >= 4) { if (rdev->num_crtc >= 4) {
...@@ -5066,6 +5069,10 @@ int evergreen_irq_process(struct radeon_device *rdev) ...@@ -5066,6 +5069,10 @@ int evergreen_irq_process(struct radeon_device *rdev)
DRM_ERROR("Unhandled interrupt: %d %d\n", src_id, src_data); DRM_ERROR("Unhandled interrupt: %d %d\n", src_id, src_data);
break; break;
} }
case 96:
DRM_ERROR("SRBM_READ_ERROR: 0x%x\n", RREG32(SRBM_READ_ERROR));
WREG32(SRBM_INT_ACK, 0x1);
break;
case 124: /* UVD */ case 124: /* UVD */
DRM_DEBUG("IH: UVD int: 0x%08x\n", src_data); DRM_DEBUG("IH: UVD int: 0x%08x\n", src_data);
radeon_fence_process(rdev, R600_RING_TYPE_UVD_INDEX); radeon_fence_process(rdev, R600_RING_TYPE_UVD_INDEX);
......
...@@ -1191,6 +1191,10 @@ ...@@ -1191,6 +1191,10 @@
#define SOFT_RESET_REGBB (1 << 22) #define SOFT_RESET_REGBB (1 << 22)
#define SOFT_RESET_ORB (1 << 23) #define SOFT_RESET_ORB (1 << 23)
#define SRBM_READ_ERROR 0xE98
#define SRBM_INT_CNTL 0xEA0
#define SRBM_INT_ACK 0xEA8
/* display watermarks */ /* display watermarks */
#define DC_LB_MEMORY_SPLIT 0x6b0c #define DC_LB_MEMORY_SPLIT 0x6b0c
#define PRIORITY_A_CNT 0x6b18 #define PRIORITY_A_CNT 0x6b18
......
...@@ -962,6 +962,8 @@ static void cayman_gpu_init(struct radeon_device *rdev) ...@@ -962,6 +962,8 @@ static void cayman_gpu_init(struct radeon_device *rdev)
} }
WREG32(GRBM_CNTL, GRBM_READ_TIMEOUT(0xff)); WREG32(GRBM_CNTL, GRBM_READ_TIMEOUT(0xff));
WREG32(SRBM_INT_CNTL, 0x1);
WREG32(SRBM_INT_ACK, 0x1);
evergreen_fix_pci_max_read_req_size(rdev); evergreen_fix_pci_max_read_req_size(rdev);
...@@ -1086,12 +1088,12 @@ static void cayman_gpu_init(struct radeon_device *rdev) ...@@ -1086,12 +1088,12 @@ static void cayman_gpu_init(struct radeon_device *rdev)
if ((rdev->config.cayman.max_backends_per_se == 1) && if ((rdev->config.cayman.max_backends_per_se == 1) &&
(rdev->flags & RADEON_IS_IGP)) { (rdev->flags & RADEON_IS_IGP)) {
if ((disabled_rb_mask & 3) == 1) { if ((disabled_rb_mask & 3) == 2) {
/* RB0 disabled, RB1 enabled */
tmp = 0x11111111;
} else {
/* RB1 disabled, RB0 enabled */ /* RB1 disabled, RB0 enabled */
tmp = 0x00000000; tmp = 0x00000000;
} else {
/* RB0 disabled, RB1 enabled */
tmp = 0x11111111;
} }
} else { } else {
tmp = gb_addr_config & NUM_PIPES_MASK; tmp = gb_addr_config & NUM_PIPES_MASK;
......
...@@ -82,6 +82,10 @@ ...@@ -82,6 +82,10 @@
#define SOFT_RESET_REGBB (1 << 22) #define SOFT_RESET_REGBB (1 << 22)
#define SOFT_RESET_ORB (1 << 23) #define SOFT_RESET_ORB (1 << 23)
#define SRBM_READ_ERROR 0xE98
#define SRBM_INT_CNTL 0xEA0
#define SRBM_INT_ACK 0xEA8
#define SRBM_STATUS2 0x0EC4 #define SRBM_STATUS2 0x0EC4
#define DMA_BUSY (1 << 5) #define DMA_BUSY (1 << 5)
#define DMA1_BUSY (1 << 6) #define DMA1_BUSY (1 << 6)
......
...@@ -188,7 +188,7 @@ u32 r600_dpm_get_vrefresh(struct radeon_device *rdev) ...@@ -188,7 +188,7 @@ u32 r600_dpm_get_vrefresh(struct radeon_device *rdev)
list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
radeon_crtc = to_radeon_crtc(crtc); radeon_crtc = to_radeon_crtc(crtc);
if (crtc->enabled && radeon_crtc->enabled && radeon_crtc->hw_mode.clock) { if (crtc->enabled && radeon_crtc->enabled && radeon_crtc->hw_mode.clock) {
vrefresh = radeon_crtc->hw_mode.vrefresh; vrefresh = drm_mode_vrefresh(&radeon_crtc->hw_mode);
break; break;
} }
} }
......
...@@ -715,6 +715,7 @@ int radeon_cs_packet_parse(struct radeon_cs_parser *p, ...@@ -715,6 +715,7 @@ int radeon_cs_packet_parse(struct radeon_cs_parser *p,
struct radeon_cs_chunk *ib_chunk = p->chunk_ib; struct radeon_cs_chunk *ib_chunk = p->chunk_ib;
struct radeon_device *rdev = p->rdev; struct radeon_device *rdev = p->rdev;
uint32_t header; uint32_t header;
int ret = 0, i;
if (idx >= ib_chunk->length_dw) { if (idx >= ib_chunk->length_dw) {
DRM_ERROR("Can not parse packet at %d after CS end %d !\n", DRM_ERROR("Can not parse packet at %d after CS end %d !\n",
...@@ -743,14 +744,25 @@ int radeon_cs_packet_parse(struct radeon_cs_parser *p, ...@@ -743,14 +744,25 @@ int radeon_cs_packet_parse(struct radeon_cs_parser *p,
break; break;
default: default:
DRM_ERROR("Unknown packet type %d at %d !\n", pkt->type, idx); DRM_ERROR("Unknown packet type %d at %d !\n", pkt->type, idx);
return -EINVAL; ret = -EINVAL;
goto dump_ib;
} }
if ((pkt->count + 1 + pkt->idx) >= ib_chunk->length_dw) { if ((pkt->count + 1 + pkt->idx) >= ib_chunk->length_dw) {
DRM_ERROR("Packet (%d:%d:%d) end after CS buffer (%d) !\n", DRM_ERROR("Packet (%d:%d:%d) end after CS buffer (%d) !\n",
pkt->idx, pkt->type, pkt->count, ib_chunk->length_dw); pkt->idx, pkt->type, pkt->count, ib_chunk->length_dw);
return -EINVAL; ret = -EINVAL;
goto dump_ib;
} }
return 0; return 0;
dump_ib:
for (i = 0; i < ib_chunk->length_dw; i++) {
if (i == idx)
printk("\t0x%08x <---\n", radeon_get_ib_value(p, i));
else
printk("\t0x%08x\n", radeon_get_ib_value(p, i));
}
return ret;
} }
/** /**
......
...@@ -179,9 +179,12 @@ static void radeon_encoder_add_backlight(struct radeon_encoder *radeon_encoder, ...@@ -179,9 +179,12 @@ static void radeon_encoder_add_backlight(struct radeon_encoder *radeon_encoder,
(rdev->pdev->subsystem_vendor == 0x1734) && (rdev->pdev->subsystem_vendor == 0x1734) &&
(rdev->pdev->subsystem_device == 0x1107)) (rdev->pdev->subsystem_device == 0x1107))
use_bl = false; use_bl = false;
/* Older PPC macs use on-GPU backlight controller */
#ifndef CONFIG_PPC_PMAC
/* disable native backlight control on older asics */ /* disable native backlight control on older asics */
else if (rdev->family < CHIP_R600) else if (rdev->family < CHIP_R600)
use_bl = false; use_bl = false;
#endif
else else
use_bl = true; use_bl = true;
} }
......
...@@ -852,6 +852,12 @@ static struct radeon_ps *radeon_dpm_pick_power_state(struct radeon_device *rdev, ...@@ -852,6 +852,12 @@ static struct radeon_ps *radeon_dpm_pick_power_state(struct radeon_device *rdev,
single_display = false; single_display = false;
} }
/* 120hz tends to be problematic even if they are under the
* vblank limit.
*/
if (single_display && (r600_dpm_get_vrefresh(rdev) >= 120))
single_display = false;
/* certain older asics have a separare 3D performance state, /* certain older asics have a separare 3D performance state,
* so try that first if the user selected performance * so try that first if the user selected performance
*/ */
......
...@@ -3162,6 +3162,8 @@ static void si_gpu_init(struct radeon_device *rdev) ...@@ -3162,6 +3162,8 @@ static void si_gpu_init(struct radeon_device *rdev)
} }
WREG32(GRBM_CNTL, GRBM_READ_TIMEOUT(0xff)); WREG32(GRBM_CNTL, GRBM_READ_TIMEOUT(0xff));
WREG32(SRBM_INT_CNTL, 1);
WREG32(SRBM_INT_ACK, 1);
evergreen_fix_pci_max_read_req_size(rdev); evergreen_fix_pci_max_read_req_size(rdev);
...@@ -4699,12 +4701,6 @@ int si_ib_parse(struct radeon_device *rdev, struct radeon_ib *ib) ...@@ -4699,12 +4701,6 @@ int si_ib_parse(struct radeon_device *rdev, struct radeon_ib *ib)
switch (pkt.type) { switch (pkt.type) {
case RADEON_PACKET_TYPE0: case RADEON_PACKET_TYPE0:
dev_err(rdev->dev, "Packet0 not allowed!\n"); dev_err(rdev->dev, "Packet0 not allowed!\n");
for (i = 0; i < ib->length_dw; i++) {
if (i == idx)
printk("\t0x%08x <---\n", ib->ptr[i]);
else
printk("\t0x%08x\n", ib->ptr[i]);
}
ret = -EINVAL; ret = -EINVAL;
break; break;
case RADEON_PACKET_TYPE2: case RADEON_PACKET_TYPE2:
...@@ -4736,8 +4732,15 @@ int si_ib_parse(struct radeon_device *rdev, struct radeon_ib *ib) ...@@ -4736,8 +4732,15 @@ int si_ib_parse(struct radeon_device *rdev, struct radeon_ib *ib)
ret = -EINVAL; ret = -EINVAL;
break; break;
} }
if (ret) if (ret) {
for (i = 0; i < ib->length_dw; i++) {
if (i == idx)
printk("\t0x%08x <---\n", ib->ptr[i]);
else
printk("\t0x%08x\n", ib->ptr[i]);
}
break; break;
}
} while (idx < ib->length_dw); } while (idx < ib->length_dw);
return ret; return ret;
...@@ -5910,6 +5913,7 @@ static void si_disable_interrupt_state(struct radeon_device *rdev) ...@@ -5910,6 +5913,7 @@ static void si_disable_interrupt_state(struct radeon_device *rdev)
tmp = RREG32(DMA_CNTL + DMA1_REGISTER_OFFSET) & ~TRAP_ENABLE; tmp = RREG32(DMA_CNTL + DMA1_REGISTER_OFFSET) & ~TRAP_ENABLE;
WREG32(DMA_CNTL + DMA1_REGISTER_OFFSET, tmp); WREG32(DMA_CNTL + DMA1_REGISTER_OFFSET, tmp);
WREG32(GRBM_INT_CNTL, 0); WREG32(GRBM_INT_CNTL, 0);
WREG32(SRBM_INT_CNTL, 0);
if (rdev->num_crtc >= 2) { if (rdev->num_crtc >= 2) {
WREG32(INT_MASK + EVERGREEN_CRTC0_REGISTER_OFFSET, 0); WREG32(INT_MASK + EVERGREEN_CRTC0_REGISTER_OFFSET, 0);
WREG32(INT_MASK + EVERGREEN_CRTC1_REGISTER_OFFSET, 0); WREG32(INT_MASK + EVERGREEN_CRTC1_REGISTER_OFFSET, 0);
...@@ -6609,6 +6613,10 @@ int si_irq_process(struct radeon_device *rdev) ...@@ -6609,6 +6613,10 @@ int si_irq_process(struct radeon_device *rdev)
break; break;
} }
break; break;
case 96:
DRM_ERROR("SRBM_READ_ERROR: 0x%x\n", RREG32(SRBM_READ_ERROR));
WREG32(SRBM_INT_ACK, 0x1);
break;
case 124: /* UVD */ case 124: /* UVD */
DRM_DEBUG("IH: UVD int: 0x%08x\n", src_data); DRM_DEBUG("IH: UVD int: 0x%08x\n", src_data);
radeon_fence_process(rdev, R600_RING_TYPE_UVD_INDEX); radeon_fence_process(rdev, R600_RING_TYPE_UVD_INDEX);
......
...@@ -358,6 +358,10 @@ ...@@ -358,6 +358,10 @@
#define CC_SYS_RB_BACKEND_DISABLE 0xe80 #define CC_SYS_RB_BACKEND_DISABLE 0xe80
#define GC_USER_SYS_RB_BACKEND_DISABLE 0xe84 #define GC_USER_SYS_RB_BACKEND_DISABLE 0xe84
#define SRBM_READ_ERROR 0xE98
#define SRBM_INT_CNTL 0xEA0
#define SRBM_INT_ACK 0xEA8
#define SRBM_STATUS2 0x0EC4 #define SRBM_STATUS2 0x0EC4
#define DMA_BUSY (1 << 5) #define DMA_BUSY (1 << 5)
#define DMA1_BUSY (1 << 6) #define DMA1_BUSY (1 << 6)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment