On Mon, Jun 23, 2014 at 05:42:50AM -0700, Mateo Lozano, Oscar wrote: > > -----Original Message----- > > From: Volkin, Bradley D > > > + reg_state[CTX_RING_HEAD+1] = 0; > > > + reg_state[CTX_RING_TAIL] = RING_TAIL(ring->mmio_base); > > > + reg_state[CTX_RING_TAIL+1] = 0; > > > + reg_state[CTX_RING_BUFFER_START] = RING_START(ring- > > >mmio_base); > > > + reg_state[CTX_RING_BUFFER_START+1] = > > i915_gem_obj_ggtt_offset(ring_obj); > > > + reg_state[CTX_RING_BUFFER_CONTROL] = RING_CTL(ring- > > >mmio_base); > > > + reg_state[CTX_RING_BUFFER_CONTROL+1] = (31 * PAGE_SIZE) | > > > +RING_VALID; > > > > The size here doesn't look right to me. Shouldn't it be (number of pages - 1)? > > See init_ring_common() > > But that´s exactly what it is, right? > > Our ringbuf->size = 32 * PAGE_SIZE; > so we are setting 31 * PAGE_SIZE Ok, on closer inspection, the result is correct because the Buffer Length field happens to be bits 20:12. But it looked to me like a size-in-bytes rather than the encoding I expected. So I guess I'd prefer that we do it as in init_ring_common(), using ring_obj->base.size and the RING_NR_PAGES mask so that it's a bit more obvious what's going on. Thanks, Brad > > > > + reg_state[CTX_BB_HEAD_U] = ring->mmio_base + 0x168; > > > + reg_state[CTX_BB_HEAD_U+1] = 0; > > > + reg_state[CTX_BB_HEAD_L] = ring->mmio_base + 0x140; > > > + reg_state[CTX_BB_HEAD_L+1] = 0; > > > + reg_state[CTX_BB_STATE] = ring->mmio_base + 0x110; > > > + reg_state[CTX_BB_STATE+1] = (1<<5); > > > + reg_state[CTX_SECOND_BB_HEAD_U] = ring->mmio_base + 0x11c; > > > + reg_state[CTX_SECOND_BB_HEAD_U+1] = 0; > > > + reg_state[CTX_SECOND_BB_HEAD_L] = ring->mmio_base + 0x114; > > > + reg_state[CTX_SECOND_BB_HEAD_L+1] = 0; > > > + reg_state[CTX_SECOND_BB_STATE] = ring->mmio_base + 0x118; > > > + reg_state[CTX_SECOND_BB_STATE+1] = 0; > > > + if (ring->id == RCS) { > > > + reg_state[CTX_BB_PER_CTX_PTR] = ring->mmio_base + > > 0x1c0; > > > + reg_state[CTX_BB_PER_CTX_PTR+1] = 0; > > > + reg_state[CTX_RCS_INDIRECT_CTX] = ring->mmio_base + > > 0x1c4; > > > + reg_state[CTX_RCS_INDIRECT_CTX+1] = 0; > > > + reg_state[CTX_RCS_INDIRECT_CTX_OFFSET] = ring- > > >mmio_base + 0x1c8; > > > + reg_state[CTX_RCS_INDIRECT_CTX_OFFSET+1] = 0; > > > + } > > > + reg_state[CTX_LRI_HEADER_1] = MI_LOAD_REGISTER_IMM(9); > > > + reg_state[CTX_LRI_HEADER_1] |= MI_LRI_FORCE_POSTED; > > > + reg_state[CTX_CTX_TIMESTAMP] = ring->mmio_base + 0x3a8; > > > + reg_state[CTX_CTX_TIMESTAMP+1] = 0; > > > + reg_state[CTX_PDP3_UDW] = GEN8_RING_PDP_UDW(ring, 3); > > > + reg_state[CTX_PDP3_LDW] = GEN8_RING_PDP_LDW(ring, 3); > > > + reg_state[CTX_PDP2_UDW] = GEN8_RING_PDP_UDW(ring, 2); > > > + reg_state[CTX_PDP2_LDW] = GEN8_RING_PDP_LDW(ring, 2); > > > + reg_state[CTX_PDP1_UDW] = GEN8_RING_PDP_UDW(ring, 1); > > > + reg_state[CTX_PDP1_LDW] = GEN8_RING_PDP_LDW(ring, 1); > > > + reg_state[CTX_PDP0_UDW] = GEN8_RING_PDP_UDW(ring, 0); > > > + reg_state[CTX_PDP0_LDW] = GEN8_RING_PDP_LDW(ring, 0); > > > + reg_state[CTX_PDP3_UDW+1] = (u64)ppgtt->pd_dma_addr[3] >> 32; > > > + reg_state[CTX_PDP3_LDW+1] = ppgtt->pd_dma_addr[3]; > > > + reg_state[CTX_PDP2_UDW+1] = (u64)ppgtt->pd_dma_addr[2] >> 32; > > > + reg_state[CTX_PDP2_LDW+1] = ppgtt->pd_dma_addr[2]; > > > + reg_state[CTX_PDP1_UDW+1] = (u64)ppgtt->pd_dma_addr[1] >> 32; > > > + reg_state[CTX_PDP1_LDW+1] = ppgtt->pd_dma_addr[1]; > > > + reg_state[CTX_PDP0_UDW+1] = (u64)ppgtt->pd_dma_addr[0] >> 32; > > > + reg_state[CTX_PDP0_LDW+1] = ppgtt->pd_dma_addr[0]; > > > > Are we able to use upper_32_bits() and lower_32_bits() for these? > > ACK > > -- Oscar _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx