Lines Matching refs:cmd_q

57 void pt_start_queue(struct pt_cmd_queue *cmd_q)  in pt_start_queue()  argument
60 iowrite32(cmd_q->qcontrol | CMD_Q_RUN, cmd_q->reg_control); in pt_start_queue()
63 void pt_stop_queue(struct pt_cmd_queue *cmd_q) in pt_stop_queue() argument
66 iowrite32(cmd_q->qcontrol & ~CMD_Q_RUN, cmd_q->reg_control); in pt_stop_queue()
69 static int pt_core_execute_cmd(struct ptdma_desc *desc, struct pt_cmd_queue *cmd_q) in pt_core_execute_cmd() argument
72 u8 *q_desc = (u8 *)&cmd_q->qbase[cmd_q->qidx]; in pt_core_execute_cmd()
80 spin_lock_irqsave(&cmd_q->q_lock, flags); in pt_core_execute_cmd()
84 cmd_q->qidx = (cmd_q->qidx + 1) % CMD_Q_LEN; in pt_core_execute_cmd()
90 tail = lower_32_bits(cmd_q->qdma_tail + cmd_q->qidx * Q_DESC_SIZE); in pt_core_execute_cmd()
91 iowrite32(tail, cmd_q->reg_control + 0x0004); in pt_core_execute_cmd()
94 pt_start_queue(cmd_q); in pt_core_execute_cmd()
95 spin_unlock_irqrestore(&cmd_q->q_lock, flags); in pt_core_execute_cmd()
100 int pt_core_perform_passthru(struct pt_cmd_queue *cmd_q, in pt_core_perform_passthru() argument
104 struct pt_device *pt = container_of(cmd_q, struct pt_device, cmd_q); in pt_core_perform_passthru()
106 cmd_q->cmd_error = 0; in pt_core_perform_passthru()
107 cmd_q->total_pt_ops++; in pt_core_perform_passthru()
116 if (cmd_q->int_en) in pt_core_perform_passthru()
121 return pt_core_execute_cmd(&desc, cmd_q); in pt_core_perform_passthru()
128 struct pt_cmd_queue *cmd_q = &cmd->pt->cmd_q; in pt_do_cmd_complete() local
131 if (cmd_q->cmd_error) { in pt_do_cmd_complete()
136 tail = lower_32_bits(cmd_q->qdma_tail + cmd_q->qidx * Q_DESC_SIZE); in pt_do_cmd_complete()
137 pt_log_error(cmd_q->pt, cmd_q->cmd_error); in pt_do_cmd_complete()
138 iowrite32(tail, cmd_q->reg_control + 0x0008); in pt_do_cmd_complete()
144 void pt_check_status_trans(struct pt_device *pt, struct pt_cmd_queue *cmd_q) in pt_check_status_trans() argument
148 status = ioread32(cmd_q->reg_control + 0x0010); in pt_check_status_trans()
150 cmd_q->int_status = status; in pt_check_status_trans()
151 cmd_q->q_status = ioread32(cmd_q->reg_control + 0x0100); in pt_check_status_trans()
152 cmd_q->q_int_status = ioread32(cmd_q->reg_control + 0x0104); in pt_check_status_trans()
155 if ((status & INT_ERROR) && !cmd_q->cmd_error) in pt_check_status_trans()
156 cmd_q->cmd_error = CMD_Q_ERROR(cmd_q->q_status); in pt_check_status_trans()
159 iowrite32(status, cmd_q->reg_control + 0x0010); in pt_check_status_trans()
167 struct pt_cmd_queue *cmd_q = &pt->cmd_q; in pt_core_irq_handler() local
171 pt_check_status_trans(pt, cmd_q); in pt_core_irq_handler()
179 struct pt_cmd_queue *cmd_q = &pt->cmd_q; in pt_core_init() local
201 cmd_q->pt = pt; in pt_core_init()
202 cmd_q->dma_pool = dma_pool; in pt_core_init()
203 spin_lock_init(&cmd_q->q_lock); in pt_core_init()
206 cmd_q->qsize = Q_SIZE(Q_DESC_SIZE); in pt_core_init()
207 cmd_q->qbase = dma_alloc_coherent(dev, cmd_q->qsize, in pt_core_init()
208 &cmd_q->qbase_dma, in pt_core_init()
210 if (!cmd_q->qbase) { in pt_core_init()
216 cmd_q->qidx = 0; in pt_core_init()
219 cmd_q->reg_control = pt->io_regs + CMD_Q_STATUS_INCR; in pt_core_init()
224 cmd_q->qcontrol = 0; /* Start with nothing */ in pt_core_init()
225 iowrite32(cmd_q->qcontrol, cmd_q->reg_control); in pt_core_init()
227 ioread32(cmd_q->reg_control + 0x0104); in pt_core_init()
228 ioread32(cmd_q->reg_control + 0x0100); in pt_core_init()
231 iowrite32(SUPPORTED_INTERRUPTS, cmd_q->reg_control + 0x0010); in pt_core_init()
241 cmd_q->qcontrol &= ~CMD_Q_SIZE; in pt_core_init()
242 cmd_q->qcontrol |= FIELD_PREP(CMD_Q_SIZE, QUEUE_SIZE_VAL); in pt_core_init()
244 cmd_q->qdma_tail = cmd_q->qbase_dma; in pt_core_init()
245 dma_addr_lo = lower_32_bits(cmd_q->qdma_tail); in pt_core_init()
246 iowrite32((u32)dma_addr_lo, cmd_q->reg_control + 0x0004); in pt_core_init()
247 iowrite32((u32)dma_addr_lo, cmd_q->reg_control + 0x0008); in pt_core_init()
249 dma_addr_hi = upper_32_bits(cmd_q->qdma_tail); in pt_core_init()
250 cmd_q->qcontrol |= (dma_addr_hi << 16); in pt_core_init()
251 iowrite32(cmd_q->qcontrol, cmd_q->reg_control); in pt_core_init()
269 dma_free_coherent(dev, cmd_q->qsize, cmd_q->qbase, cmd_q->qbase_dma); in pt_core_init()
272 dma_pool_destroy(pt->cmd_q.dma_pool); in pt_core_init()
280 struct pt_cmd_queue *cmd_q = &pt->cmd_q; in pt_core_destroy() local
290 pt_stop_queue(cmd_q); in pt_core_destroy()
293 iowrite32(SUPPORTED_INTERRUPTS, cmd_q->reg_control + 0x0010); in pt_core_destroy()
294 ioread32(cmd_q->reg_control + 0x0104); in pt_core_destroy()
295 ioread32(cmd_q->reg_control + 0x0100); in pt_core_destroy()
299 dma_free_coherent(dev, cmd_q->qsize, cmd_q->qbase, in pt_core_destroy()
300 cmd_q->qbase_dma); in pt_core_destroy()