On Mon, 20 Jul 2020 17:38:01 -0700 Tony Nguyen wrote:
> @@ -30,7 +38,32 @@ static enum iecm_status iecm_ctlq_init_regs(struct iecm_hw
> *hw,
> struct iecm_ctlq_info *cq,
> bool is_rxq)
> {
> - /* stub */
> + u32 reg = 0;
> +
> + if (is_rxq)
> + /* Update tail to post pre-allocated buffers for Rx queues */
> + wr32(hw, cq->reg.tail, (u32)(cq->ring_size - 1));
> + else
> + wr32(hw, cq->reg.tail, 0);
> +
> + /* For non-Mailbox control queues only TAIL need to be set */
> + if (cq->q_id != -1)
> + return 0;
> +
> + /* Clear Head for both send or receive */
> + wr32(hw, cq->reg.head, 0);
> +
> + /* set starting point */
> + wr32(hw, cq->reg.bal, IECM_LO_DWORD(cq->desc_ring.pa));
> + wr32(hw, cq->reg.bah, IECM_HI_DWORD(cq->desc_ring.pa));
> + wr32(hw, cq->reg.len, (cq->ring_size | cq->reg.len_ena_mask));
> +
> + /* Check one register to verify that config was applied */
> + reg = rd32(hw, cq->reg.bah);
> + if (reg != IECM_HI_DWORD(cq->desc_ring.pa))
> + return IECM_ERR_CTLQ_ERROR;
Please stop using your own error codes.
> + return 0;
> }