DF-3986 / fix.diff
--- a/sys/dev/drm/radeon/ni.c +++ b/sys/dev/drm/radeon/ni.c @@ -2434,6 +2434,18 @@ ring->ring_obj = NULL; r600_ring_init(rdev, ring, 1024 * 1024); + /* compute rings (dropped in the DFly port, present upstream): + * without these cayman_cp_resume() runs order_base_2(0) (UB: + * 1UL << 64) and programs CP_RB1/2 with a zero-size/zero-base + * ring on every Cayman/Aruba boot (DF-3986). */ + ring = &rdev->ring[CAYMAN_RING_TYPE_CP1_INDEX]; + ring->ring_obj = NULL; + r600_ring_init(rdev, ring, 1024 * 1024); + + ring = &rdev->ring[CAYMAN_RING_TYPE_CP2_INDEX]; + ring->ring_obj = NULL; + r600_ring_init(rdev, ring, 1024 * 1024); + ring = &rdev->ring[R600_RING_TYPE_DMA_INDEX]; ring->ring_obj = NULL; r600_ring_init(rdev, ring, 64 * 1024); |