*
  * @adev: amdgpu_device pointer
  * @ring: amdgpu_ring structure holding ring information
- * @ring_size: size of the ring
+ * @max_ndw: maximum number of dw for ring alloc
  * @nop: nop packet for this ring
  *
  * Initialize the driver information for the selected ring (all asics).
  * Returns 0 on success, error on failure.
  */
 int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring,
-                    unsigned ring_size, u32 nop, u32 align_mask,
+                    unsigned max_dw, u32 nop, u32 align_mask,
                     struct amdgpu_irq_src *irq_src, unsigned irq_type,
                     enum amdgpu_ring_type ring_type)
 {
-       u32 rb_bufsz;
        int r;
 
        if (ring->adev == NULL) {
                return r;
        }
 
-       /* Align ring size */
-       rb_bufsz = order_base_2(ring_size / 8);
-       ring_size = (1 << (rb_bufsz + 1)) * 4;
-       ring->ring_size = ring_size;
+       ring->ring_size = roundup_pow_of_two(max_dw * 4 *
+                                            amdgpu_sched_hw_submission);
        ring->align_mask = align_mask;
        ring->nop = nop;
        ring->type = ring_type;
                }
        }
        ring->ptr_mask = (ring->ring_size / 4) - 1;
-       ring->max_dw = DIV_ROUND_UP(ring->ring_size / 4,
-                                   amdgpu_sched_hw_submission);
+       ring->max_dw = max_dw;
 
        if (amdgpu_debugfs_ring_init(adev, ring)) {
                DRM_ERROR("Failed to register debugfs file for rings !\n");
 
                ring = &adev->sdma.instance[i].ring;
                ring->ring_obj = NULL;
                sprintf(ring->name, "sdma%d", i);
-               r = amdgpu_ring_init(adev, ring, 256 * 1024,
+               r = amdgpu_ring_init(adev, ring, 32 * 1024,
                                     SDMA_PACKET(SDMA_OPCODE_NOP, 0, 0), 0xf,
                                     &adev->sdma.trap_irq,
                                     (i == 0) ?
 
                ring = &adev->gfx.gfx_ring[i];
                ring->ring_obj = NULL;
                sprintf(ring->name, "gfx");
-               r = amdgpu_ring_init(adev, ring, 1024 * 1024,
+               r = amdgpu_ring_init(adev, ring, 128 * 1024,
                                     PACKET3(PACKET3_NOP, 0x3FFF), 0xf,
                                     &adev->gfx.eop_irq, AMDGPU_CP_IRQ_GFX_EOP,
                                     AMDGPU_RING_TYPE_GFX);
                sprintf(ring->name, "comp %d.%d.%d", ring->me, ring->pipe, ring->queue);
                irq_type = AMDGPU_CP_IRQ_COMPUTE_MEC1_PIPE0_EOP + ring->pipe;
                /* type-2 packets are deprecated on MEC, use type-3 instead */
-               r = amdgpu_ring_init(adev, ring, 1024 * 1024,
+               r = amdgpu_ring_init(adev, ring, 128 * 1024,
                                     PACKET3(PACKET3_NOP, 0x3FFF), 0xf,
                                     &adev->gfx.eop_irq, irq_type,
                                     AMDGPU_RING_TYPE_COMPUTE);
 
                        ring->doorbell_index = AMDGPU_DOORBELL_GFX_RING0;
                }
 
-               r = amdgpu_ring_init(adev, ring, 1024 * 1024,
+               r = amdgpu_ring_init(adev, ring, 128 * 1024,
                                     PACKET3(PACKET3_NOP, 0x3FFF), 0xf,
                                     &adev->gfx.eop_irq, AMDGPU_CP_IRQ_GFX_EOP,
                                     AMDGPU_RING_TYPE_GFX);
                sprintf(ring->name, "comp %d.%d.%d", ring->me, ring->pipe, ring->queue);
                irq_type = AMDGPU_CP_IRQ_COMPUTE_MEC1_PIPE0_EOP + ring->pipe;
                /* type-2 packets are deprecated on MEC, use type-3 instead */
-               r = amdgpu_ring_init(adev, ring, 1024 * 1024,
+               r = amdgpu_ring_init(adev, ring, 128 * 1024,
                                     PACKET3(PACKET3_NOP, 0x3FFF), 0xf,
                                     &adev->gfx.eop_irq, irq_type,
                                     AMDGPU_RING_TYPE_COMPUTE);
 
                ring->ring_obj = NULL;
                ring->use_doorbell = false;
                sprintf(ring->name, "sdma%d", i);
-               r = amdgpu_ring_init(adev, ring, 256 * 1024,
+               r = amdgpu_ring_init(adev, ring, 32 * 1024,
                                     SDMA_PKT_NOP_HEADER_OP(SDMA_OP_NOP), 0xf,
                                     &adev->sdma.trap_irq,
                                     (i == 0) ?
 
 
        ring = &adev->uvd.ring;
        sprintf(ring->name, "uvd");
-       r = amdgpu_ring_init(adev, ring, 4096, CP_PACKET2, 0xf,
+       r = amdgpu_ring_init(adev, ring, 512, CP_PACKET2, 0xf,
                             &adev->uvd.irq, 0, AMDGPU_RING_TYPE_UVD);
 
        return r;
 
 
        ring = &adev->uvd.ring;
        sprintf(ring->name, "uvd");
-       r = amdgpu_ring_init(adev, ring, 4096, CP_PACKET2, 0xf,
+       r = amdgpu_ring_init(adev, ring, 512, CP_PACKET2, 0xf,
                             &adev->uvd.irq, 0, AMDGPU_RING_TYPE_UVD);
 
        return r;
 
 
        ring = &adev->uvd.ring;
        sprintf(ring->name, "uvd");
-       r = amdgpu_ring_init(adev, ring, 4096, CP_PACKET2, 0xf,
+       r = amdgpu_ring_init(adev, ring, 512, CP_PACKET2, 0xf,
                             &adev->uvd.irq, 0, AMDGPU_RING_TYPE_UVD);
 
        return r;
 
 
        ring = &adev->vce.ring[0];
        sprintf(ring->name, "vce0");
-       r = amdgpu_ring_init(adev, ring, 4096, VCE_CMD_NO_OP, 0xf,
+       r = amdgpu_ring_init(adev, ring, 512, VCE_CMD_NO_OP, 0xf,
                             &adev->vce.irq, 0, AMDGPU_RING_TYPE_VCE);
        if (r)
                return r;
 
        ring = &adev->vce.ring[1];
        sprintf(ring->name, "vce1");
-       r = amdgpu_ring_init(adev, ring, 4096, VCE_CMD_NO_OP, 0xf,
+       r = amdgpu_ring_init(adev, ring, 512, VCE_CMD_NO_OP, 0xf,
                             &adev->vce.irq, 0, AMDGPU_RING_TYPE_VCE);
        if (r)
                return r;
 
 
        ring = &adev->vce.ring[0];
        sprintf(ring->name, "vce0");
-       r = amdgpu_ring_init(adev, ring, 4096, VCE_CMD_NO_OP, 0xf,
+       r = amdgpu_ring_init(adev, ring, 512, VCE_CMD_NO_OP, 0xf,
                             &adev->vce.irq, 0, AMDGPU_RING_TYPE_VCE);
        if (r)
                return r;
 
        ring = &adev->vce.ring[1];
        sprintf(ring->name, "vce1");
-       r = amdgpu_ring_init(adev, ring, 4096, VCE_CMD_NO_OP, 0xf,
+       r = amdgpu_ring_init(adev, ring, 512, VCE_CMD_NO_OP, 0xf,
                             &adev->vce.irq, 0, AMDGPU_RING_TYPE_VCE);
        if (r)
                return r;