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
104 cmd_q->cmd_error = 0; in pt_core_perform_passthru()
105 cmd_q->total_pt_ops++; in pt_core_perform_passthru()
114 return pt_core_execute_cmd(&desc, cmd_q); in pt_core_perform_passthru()
119 iowrite32(0, pt->cmd_q.reg_control + 0x000C); in pt_core_disable_queue_interrupts()
124 iowrite32(SUPPORTED_INTERRUPTS, pt->cmd_q.reg_control + 0x000C); in pt_core_enable_queue_interrupts()
131 struct pt_cmd_queue *cmd_q = &cmd->pt->cmd_q; in pt_do_cmd_complete() local
134 if (cmd_q->cmd_error) { in pt_do_cmd_complete()
139 tail = lower_32_bits(cmd_q->qdma_tail + cmd_q->qidx * Q_DESC_SIZE); in pt_do_cmd_complete()
140 pt_log_error(cmd_q->pt, cmd_q->cmd_error); in pt_do_cmd_complete()
141 iowrite32(tail, cmd_q->reg_control + 0x0008); in pt_do_cmd_complete()
150 struct pt_cmd_queue *cmd_q = &pt->cmd_q; in pt_core_irq_handler() local
155 status = ioread32(cmd_q->reg_control + 0x0010); in pt_core_irq_handler()
157 cmd_q->int_status = status; in pt_core_irq_handler()
158 cmd_q->q_status = ioread32(cmd_q->reg_control + 0x0100); in pt_core_irq_handler()
159 cmd_q->q_int_status = ioread32(cmd_q->reg_control + 0x0104); in pt_core_irq_handler()
162 if ((status & INT_ERROR) && !cmd_q->cmd_error) in pt_core_irq_handler()
163 cmd_q->cmd_error = CMD_Q_ERROR(cmd_q->q_status); in pt_core_irq_handler()
166 iowrite32(status, cmd_q->reg_control + 0x0010); in pt_core_irq_handler()
176 struct pt_cmd_queue *cmd_q = &pt->cmd_q; in pt_core_init() local
198 cmd_q->pt = pt; in pt_core_init()
199 cmd_q->dma_pool = dma_pool; in pt_core_init()
200 mutex_init(&cmd_q->q_mutex); in pt_core_init()
203 cmd_q->qsize = Q_SIZE(Q_DESC_SIZE); in pt_core_init()
204 cmd_q->qbase = dma_alloc_coherent(dev, cmd_q->qsize, in pt_core_init()
205 &cmd_q->qbase_dma, in pt_core_init()
207 if (!cmd_q->qbase) { in pt_core_init()
213 cmd_q->qidx = 0; in pt_core_init()
216 cmd_q->reg_control = pt->io_regs + CMD_Q_STATUS_INCR; in pt_core_init()
221 cmd_q->qcontrol = 0; /* Start with nothing */ in pt_core_init()
222 iowrite32(cmd_q->qcontrol, cmd_q->reg_control); in pt_core_init()
224 ioread32(cmd_q->reg_control + 0x0104); in pt_core_init()
225 ioread32(cmd_q->reg_control + 0x0100); in pt_core_init()
228 iowrite32(SUPPORTED_INTERRUPTS, cmd_q->reg_control + 0x0010); in pt_core_init()
236 cmd_q->qcontrol &= ~CMD_Q_SIZE; in pt_core_init()
237 cmd_q->qcontrol |= FIELD_PREP(CMD_Q_SIZE, QUEUE_SIZE_VAL); in pt_core_init()
239 cmd_q->qdma_tail = cmd_q->qbase_dma; in pt_core_init()
240 dma_addr_lo = lower_32_bits(cmd_q->qdma_tail); in pt_core_init()
241 iowrite32((u32)dma_addr_lo, cmd_q->reg_control + 0x0004); in pt_core_init()
242 iowrite32((u32)dma_addr_lo, cmd_q->reg_control + 0x0008); in pt_core_init()
244 dma_addr_hi = upper_32_bits(cmd_q->qdma_tail); in pt_core_init()
245 cmd_q->qcontrol |= (dma_addr_hi << 16); in pt_core_init()
246 iowrite32(cmd_q->qcontrol, cmd_q->reg_control); in pt_core_init()
264 dma_free_coherent(dev, cmd_q->qsize, cmd_q->qbase, cmd_q->qbase_dma); in pt_core_init()
268 dma_pool_destroy(pt->cmd_q.dma_pool); in pt_core_init()
276 struct pt_cmd_queue *cmd_q = &pt->cmd_q; in pt_core_destroy() local
286 pt_stop_queue(cmd_q); in pt_core_destroy()
289 iowrite32(SUPPORTED_INTERRUPTS, cmd_q->reg_control + 0x0010); in pt_core_destroy()
290 ioread32(cmd_q->reg_control + 0x0104); in pt_core_destroy()
291 ioread32(cmd_q->reg_control + 0x0100); in pt_core_destroy()
295 dma_free_coherent(dev, cmd_q->qsize, cmd_q->qbase, in pt_core_destroy()
296 cmd_q->qbase_dma); in pt_core_destroy()