diff --git a/drivers/gpu/drm/radeon/radeon_cp.c b/drivers/gpu/drm/radeon/radeon_cp.c index 248ab4a..c698ecd 100644 --- a/drivers/gpu/drm/radeon/radeon_cp.c +++ b/drivers/gpu/drm/radeon/radeon_cp.c @@ -252,9 +252,10 @@ static int radeon_do_wait_for_idle(drm_radeon_private_t * dev_priv) } DRM_UDELAY(1); } - DRM_DEBUG("wait idle failed status : 0x%08X 0x%08X\n", + DRM_DEBUG("wait idle failed status : 0x%08X 0x%08X 0x%08X\n", RADEON_READ(RADEON_RBBM_STATUS), - RADEON_READ(R300_VAP_CNTL_STATUS)); + RADEON_READ(R300_VAP_CNTL_STATUS), + RADEON_READ(0x7C0)); #if RADEON_FIFO_DEBUG DRM_ERROR("failed!\n"); @@ -646,8 +647,26 @@ static void radeon_cp_init_ring_buffer(struct drm_device * dev, RADEON_WRITE(RADEON_SCRATCH_UMSK, 0x7); /* Turn on bus mastering */ + DRM_INFO("initial BUS_CNTL : 0x%08X\n", RADEON_READ(RADEON_BUS_CNTL)); + DRM_INFO("initial BUS_CNTL1 : 0x%08X\n", RADEON_READ(0x34)); tmp = RADEON_READ(RADEON_BUS_CNTL) & ~RADEON_BUS_MASTER_DIS; + /* enable : + * BUS_MSTR_DISCONNECT_EN (1 << 28) + * BUS_RD_DISCARD_EN (1 << 24) + * BUS_MSTR_RD_LINE (1 << 21) + * BUS_MSTR_RD_MULT (1 << 20) + * BUS_PCI_WRT_RETRY_EN (1 << 15) + * BUS_PCI_READ_RETRY_EN (1 << 13) + * BUS_NON_PM4_READ_COMBINE_EN (1 << 9) + * BUS_WRT_COMBINE_EN (1 << 5) + */ + tmp |= (1 << 28) | (1 << 24) | (1 << 21) | (1 << 20) | (1 << 15); + tmp |= (1 << 13) | (1 << 9) | (1 << 5); RADEON_WRITE(RADEON_BUS_CNTL, tmp); + tmp = RADEON_READ(0x34); + RADEON_WRITE(0x34, tmp); + DRM_INFO("set BUS_CNTL : 0x%08X\n", RADEON_READ(RADEON_BUS_CNTL)); + DRM_INFO("set BUS_CNTL1 : 0x%08X\n", RADEON_READ(0x34)); dev_priv->sarea_priv->last_frame = dev_priv->scratch[0] = 0; RADEON_WRITE(RADEON_LAST_FRAME_REG, dev_priv->sarea_priv->last_frame); @@ -1519,7 +1538,7 @@ struct drm_buf *radeon_freelist_get(struct drm_device * dev) for (t = 0; t < dev_priv->usec_timeout; t++) { u32 done_age = GET_SCRATCH(1); - DRM_DEBUG("done_age = %d\n", done_age); +// DRM_DEBUG("done_age = %d\n", done_age); for (i = start; i < dma->buf_count; i++) { buf = dma->buflist[i]; buf_priv = buf->dev_private; diff --git a/drivers/gpu/drm/radeon/radeon_irq.c b/drivers/gpu/drm/radeon/radeon_irq.c index ee40d19..553b4b2 100644 --- a/drivers/gpu/drm/radeon/radeon_irq.c +++ b/drivers/gpu/drm/radeon/radeon_irq.c @@ -38,9 +38,12 @@ static __inline__ u32 radeon_acknowledge_irqs(drm_radeon_private_t * dev_priv, u32 mask) { - u32 irqs = RADEON_READ(RADEON_GEN_INT_STATUS) & mask; + u32 irqs = RADEON_READ(RADEON_GEN_INT_STATUS); + if (irqs & (~mask)) { + DRM_INFO("irq not acking : 0x%08X\n", irqs & (~mask)); + } if (irqs) - RADEON_WRITE(RADEON_GEN_INT_STATUS, irqs); + RADEON_WRITE(RADEON_GEN_INT_STATUS, irqs & mask); return irqs; }