mirror of
https://gitlab.freedesktop.org/mesa/drm.git
synced 2026-05-09 06:18:05 +02:00
radeon: make radeon_do_release() r6xx/r7xx safe
This commit is contained in:
parent
239acbbb27
commit
993d387d75
3 changed files with 25 additions and 14 deletions
|
|
@ -2137,7 +2137,7 @@ static void r600_cp_init_ring_buffer(struct drm_device * dev,
|
|||
|
||||
}
|
||||
|
||||
static int r600_do_cleanup_cp(struct drm_device * dev)
|
||||
int r600_do_cleanup_cp(struct drm_device * dev)
|
||||
{
|
||||
drm_radeon_private_t *dev_priv = dev->dev_private;
|
||||
DRM_DEBUG("\n");
|
||||
|
|
|
|||
|
|
@ -1523,21 +1523,28 @@ void radeon_do_release(struct drm_device * dev)
|
|||
#endif
|
||||
#endif
|
||||
}
|
||||
radeon_do_cp_stop(dev_priv);
|
||||
radeon_do_engine_reset(dev);
|
||||
if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_R600) {
|
||||
r600_do_cp_stop(dev_priv);
|
||||
r600_engine_reset(dev);
|
||||
} else {
|
||||
radeon_do_cp_stop(dev_priv);
|
||||
radeon_do_engine_reset(dev);
|
||||
}
|
||||
}
|
||||
|
||||
/* Disable *all* interrupts */
|
||||
if (dev_priv->mmio) /* remove this after permanent addmaps */
|
||||
RADEON_WRITE(RADEON_GEN_INT_CNTL, 0);
|
||||
if ((dev_priv->flags & RADEON_FAMILY_MASK) < CHIP_R600) {
|
||||
/* Disable *all* interrupts */
|
||||
if (dev_priv->mmio) /* remove this after permanent addmaps */
|
||||
RADEON_WRITE(RADEON_GEN_INT_CNTL, 0);
|
||||
|
||||
if (dev_priv->mmio) { /* remove all surfaces */
|
||||
for (i = 0; i < RADEON_MAX_SURFACES; i++) {
|
||||
RADEON_WRITE(RADEON_SURFACE0_INFO + 16 * i, 0);
|
||||
RADEON_WRITE(RADEON_SURFACE0_LOWER_BOUND +
|
||||
16 * i, 0);
|
||||
RADEON_WRITE(RADEON_SURFACE0_UPPER_BOUND +
|
||||
16 * i, 0);
|
||||
if (dev_priv->mmio) { /* remove all surfaces */
|
||||
for (i = 0; i < RADEON_MAX_SURFACES; i++) {
|
||||
RADEON_WRITE(RADEON_SURFACE0_INFO + 16 * i, 0);
|
||||
RADEON_WRITE(RADEON_SURFACE0_LOWER_BOUND +
|
||||
16 * i, 0);
|
||||
RADEON_WRITE(RADEON_SURFACE0_UPPER_BOUND +
|
||||
16 * i, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1546,7 +1553,10 @@ void radeon_do_release(struct drm_device * dev)
|
|||
radeon_mem_takedown(&(dev_priv->fb_heap));
|
||||
|
||||
/* deallocate kernel resources */
|
||||
radeon_do_cleanup_cp(dev);
|
||||
if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_R600)
|
||||
r600_do_cleanup_cp(dev);
|
||||
else
|
||||
radeon_do_cleanup_cp(dev);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -456,6 +456,7 @@ int r600_cp_indirect(struct drm_device *dev, struct drm_buf *buf, drm_radeon_ind
|
|||
void r600_do_cp_stop(drm_radeon_private_t * dev_priv);
|
||||
int r600_engine_reset(struct drm_device * dev);
|
||||
void r600_do_cp_reset(drm_radeon_private_t * dev_priv);
|
||||
int r600_do_cleanup_cp(struct drm_device * dev);
|
||||
|
||||
/* Flags for stats.boxes
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue