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()
79 mutex_lock(&cmd_q->q_mutex); in pt_core_execute_cmd()
83 cmd_q->qidx = (cmd_q->qidx + 1) % CMD_Q_LEN; in pt_core_execute_cmd()
89 tail = lower_32_bits(cmd_q->qdma_tail + cmd_q->qidx * Q_DESC_SIZE); in pt_core_execute_cmd()
90 iowrite32(tail, cmd_q->reg_control + 0x0004); in pt_core_execute_cmd()
93 pt_start_queue(cmd_q); in pt_core_execute_cmd()
94 mutex_unlock(&cmd_q->q_mutex); in pt_core_execute_cmd()
99 int pt_core_perform_passthru(struct pt_cmd_queue *cmd_q, in pt_core_perform_passthru() argument
103 struct pt_device *pt = container_of(cmd_q, struct pt_device, cmd_q); in pt_core_perform_passthru()
105 cmd_q->cmd_error = 0; in pt_core_perform_passthru()
106 cmd_q->total_pt_ops++; in pt_core_perform_passthru()
115 if (cmd_q->int_en) in pt_core_perform_passthru()
120 return pt_core_execute_cmd(&desc, cmd_q); in pt_core_perform_passthru()
127 struct pt_cmd_queue *cmd_q = &cmd->pt->cmd_q; in pt_do_cmd_complete() local
130 if (cmd_q->cmd_error) { in pt_do_cmd_complete()
135 tail = lower_32_bits(cmd_q->qdma_tail + cmd_q->qidx * Q_DESC_SIZE); in pt_do_cmd_complete()
136 pt_log_error(cmd_q->pt, cmd_q->cmd_error); in pt_do_cmd_complete()
137 iowrite32(tail, cmd_q->reg_control + 0x0008); in pt_do_cmd_complete()
143 void pt_check_status_trans(struct pt_device *pt, struct pt_cmd_queue *cmd_q) in pt_check_status_trans() argument
147 status = ioread32(cmd_q->reg_control + 0x0010); in pt_check_status_trans()
149 cmd_q->int_status = status; in pt_check_status_trans()
150 cmd_q->q_status = ioread32(cmd_q->reg_control + 0x0100); in pt_check_status_trans()
151 cmd_q->q_int_status = ioread32(cmd_q->reg_control + 0x0104); in pt_check_status_trans()
154 if ((status & INT_ERROR) && !cmd_q->cmd_error) in pt_check_status_trans()
155 cmd_q->cmd_error = CMD_Q_ERROR(cmd_q->q_status); in pt_check_status_trans()
158 iowrite32(status, cmd_q->reg_control + 0x0010); in pt_check_status_trans()
166 struct pt_cmd_queue *cmd_q = &pt->cmd_q; in pt_core_irq_handler() local
170 pt_check_status_trans(pt, cmd_q); in pt_core_irq_handler()
178 struct pt_cmd_queue *cmd_q = &pt->cmd_q; in pt_core_init() local
200 cmd_q->pt = pt; in pt_core_init()
201 cmd_q->dma_pool = dma_pool; in pt_core_init()
202 mutex_init(&cmd_q->q_mutex); in pt_core_init()
205 cmd_q->qsize = Q_SIZE(Q_DESC_SIZE); in pt_core_init()
206 cmd_q->qbase = dma_alloc_coherent(dev, cmd_q->qsize, in pt_core_init()
207 &cmd_q->qbase_dma, in pt_core_init()
209 if (!cmd_q->qbase) { in pt_core_init()
215 cmd_q->qidx = 0; in pt_core_init()
218 cmd_q->reg_control = pt->io_regs + CMD_Q_STATUS_INCR; in pt_core_init()
223 cmd_q->qcontrol = 0; /* Start with nothing */ in pt_core_init()
224 iowrite32(cmd_q->qcontrol, cmd_q->reg_control); in pt_core_init()
226 ioread32(cmd_q->reg_control + 0x0104); in pt_core_init()
227 ioread32(cmd_q->reg_control + 0x0100); in pt_core_init()
230 iowrite32(SUPPORTED_INTERRUPTS, cmd_q->reg_control + 0x0010); in pt_core_init()
240 cmd_q->qcontrol &= ~CMD_Q_SIZE; in pt_core_init()
241 cmd_q->qcontrol |= FIELD_PREP(CMD_Q_SIZE, QUEUE_SIZE_VAL); in pt_core_init()
243 cmd_q->qdma_tail = cmd_q->qbase_dma; in pt_core_init()
244 dma_addr_lo = lower_32_bits(cmd_q->qdma_tail); in pt_core_init()
245 iowrite32((u32)dma_addr_lo, cmd_q->reg_control + 0x0004); in pt_core_init()
246 iowrite32((u32)dma_addr_lo, cmd_q->reg_control + 0x0008); in pt_core_init()
248 dma_addr_hi = upper_32_bits(cmd_q->qdma_tail); in pt_core_init()
249 cmd_q->qcontrol |= (dma_addr_hi << 16); in pt_core_init()
250 iowrite32(cmd_q->qcontrol, cmd_q->reg_control); in pt_core_init()
268 dma_free_coherent(dev, cmd_q->qsize, cmd_q->qbase, cmd_q->qbase_dma); in pt_core_init()
271 dma_pool_destroy(pt->cmd_q.dma_pool); in pt_core_init()
279 struct pt_cmd_queue *cmd_q = &pt->cmd_q; in pt_core_destroy() local
289 pt_stop_queue(cmd_q); in pt_core_destroy()
292 iowrite32(SUPPORTED_INTERRUPTS, cmd_q->reg_control + 0x0010); in pt_core_destroy()
293 ioread32(cmd_q->reg_control + 0x0104); in pt_core_destroy()
294 ioread32(cmd_q->reg_control + 0x0100); in pt_core_destroy()
298 dma_free_coherent(dev, cmd_q->qsize, cmd_q->qbase, in pt_core_destroy()
299 cmd_q->qbase_dma); in pt_core_destroy()