Lines Matching refs:qinst
156 struct ti_queue_inst *qinst) in ti_msgmgr_queue_get_num_messages() argument
165 val = readl(qinst->queue_state) & status_cnt_mask; in ti_msgmgr_queue_get_num_messages()
179 struct ti_queue_inst *qinst) in ti_msgmgr_queue_is_error() argument
191 val = readl(qinst->queue_state) & d->status_err_mask; in ti_msgmgr_queue_is_error()
196 static int ti_msgmgr_queue_rx_data(struct mbox_chan *chan, struct ti_queue_inst *qinst, in ti_msgmgr_queue_rx_data() argument
211 message.buf = (u8 *)qinst->rx_buff; in ti_msgmgr_queue_rx_data()
227 for (data_reg = qinst->queue_buff_start, word_data = qinst->rx_buff, in ti_msgmgr_queue_rx_data()
247 struct ti_queue_inst *qinst = chan->con_priv; in ti_msgmgr_queue_rx_poll_timeout() local
252 ret = readl_poll_timeout_atomic(qinst->queue_state, msg_count, in ti_msgmgr_queue_rx_poll_timeout()
258 ti_msgmgr_queue_rx_data(chan, qinst, desc); in ti_msgmgr_queue_rx_poll_timeout()
277 struct ti_queue_inst *qinst = chan->con_priv; in ti_msgmgr_queue_rx_interrupt() local
287 if (qinst->is_tx) { in ti_msgmgr_queue_rx_interrupt()
289 qinst->name); in ti_msgmgr_queue_rx_interrupt()
294 if (ti_msgmgr_queue_is_error(desc, qinst)) { in ti_msgmgr_queue_rx_interrupt()
295 dev_err(dev, "Error on Rx channel %s\n", qinst->name); in ti_msgmgr_queue_rx_interrupt()
300 msg_count = ti_msgmgr_queue_get_num_messages(desc, qinst); in ti_msgmgr_queue_rx_interrupt()
307 ti_msgmgr_queue_rx_data(chan, qinst, desc); in ti_msgmgr_queue_rx_interrupt()
320 struct ti_queue_inst *qinst = chan->con_priv; in ti_msgmgr_queue_peek_data() local
326 if (qinst->is_tx) in ti_msgmgr_queue_peek_data()
329 if (ti_msgmgr_queue_is_error(desc, qinst)) { in ti_msgmgr_queue_peek_data()
330 dev_err(dev, "Error on channel %s\n", qinst->name); in ti_msgmgr_queue_peek_data()
334 msg_count = ti_msgmgr_queue_get_num_messages(desc, qinst); in ti_msgmgr_queue_peek_data()
347 struct ti_queue_inst *qinst = chan->con_priv; in ti_msgmgr_last_tx_done() local
353 if (!qinst->is_tx) in ti_msgmgr_last_tx_done()
356 if (ti_msgmgr_queue_is_error(desc, qinst)) { in ti_msgmgr_last_tx_done()
357 dev_err(dev, "Error on channel %s\n", qinst->name); in ti_msgmgr_last_tx_done()
361 msg_count = ti_msgmgr_queue_get_num_messages(desc, qinst); in ti_msgmgr_last_tx_done()
374 struct ti_queue_inst *qinst; in ti_msgmgr_chan_has_polled_queue_rx() local
379 qinst = chan->con_priv; in ti_msgmgr_chan_has_polled_queue_rx()
380 return qinst->polled_rx_mode; in ti_msgmgr_chan_has_polled_queue_rx()
395 struct ti_queue_inst *qinst = chan->con_priv; in ti_msgmgr_send_data() local
408 if (ti_msgmgr_queue_is_error(desc, qinst)) { in ti_msgmgr_send_data()
409 dev_err(dev, "Error on channel %s\n", qinst->name); in ti_msgmgr_send_data()
415 qinst->name, message->len, desc->max_message_size); in ti_msgmgr_send_data()
420 for (data_reg = qinst->queue_buff_start, in ti_msgmgr_send_data()
443 while (data_reg <= qinst->queue_buff_end) { in ti_msgmgr_send_data()
465 struct ti_queue_inst *qinst, in ti_msgmgr_queue_rx_irq_req() argument
473 "rx_%03d", d->is_sproxy ? qinst->proxy_id : qinst->queue_id); in ti_msgmgr_queue_rx_irq_req()
476 if (qinst->irq < 0) { in ti_msgmgr_queue_rx_irq_req()
480 qinst->irq = of_irq_get_byname(np, of_rx_irq_name); in ti_msgmgr_queue_rx_irq_req()
483 if (qinst->irq < 0) { in ti_msgmgr_queue_rx_irq_req()
486 qinst->queue_id, qinst->proxy_id, in ti_msgmgr_queue_rx_irq_req()
487 of_rx_irq_name, qinst->irq); in ti_msgmgr_queue_rx_irq_req()
488 return qinst->irq; in ti_msgmgr_queue_rx_irq_req()
493 ret = request_irq(qinst->irq, ti_msgmgr_queue_rx_interrupt, in ti_msgmgr_queue_rx_irq_req()
494 IRQF_SHARED, qinst->name, chan); in ti_msgmgr_queue_rx_irq_req()
497 qinst->irq, qinst->name, ret); in ti_msgmgr_queue_rx_irq_req()
513 struct ti_queue_inst *qinst = chan->con_priv; in ti_msgmgr_queue_startup() local
523 qinst->is_tx = (readl(qinst->queue_ctrl) & in ti_msgmgr_queue_startup()
526 msg_count = ti_msgmgr_queue_get_num_messages(d, qinst); in ti_msgmgr_queue_startup()
528 if (!msg_count && qinst->is_tx) { in ti_msgmgr_queue_startup()
530 qinst->name); in ti_msgmgr_queue_startup()
535 if (!qinst->is_tx) { in ti_msgmgr_queue_startup()
537 qinst->rx_buff = kzalloc(d->max_message_size, GFP_KERNEL); in ti_msgmgr_queue_startup()
538 if (!qinst->rx_buff) in ti_msgmgr_queue_startup()
541 ret = ti_msgmgr_queue_rx_irq_req(dev, d, qinst, chan); in ti_msgmgr_queue_startup()
543 kfree(qinst->rx_buff); in ti_msgmgr_queue_startup()
557 struct ti_queue_inst *qinst = chan->con_priv; in ti_msgmgr_queue_shutdown() local
559 if (!qinst->is_tx) { in ti_msgmgr_queue_shutdown()
560 free_irq(qinst->irq, chan); in ti_msgmgr_queue_shutdown()
561 kfree(qinst->rx_buff); in ti_msgmgr_queue_shutdown()
578 struct ti_queue_inst *qinst; in ti_msgmgr_of_xlate() local
608 qinst = &inst->qinsts[req_pid]; in ti_msgmgr_of_xlate()
609 return qinst->chan; in ti_msgmgr_of_xlate()
612 for (qinst = inst->qinsts, i = 0; i < inst->num_valid_queues; in ti_msgmgr_of_xlate()
613 i++, qinst++) { in ti_msgmgr_of_xlate()
614 if (req_qid == qinst->queue_id && req_pid == qinst->proxy_id) in ti_msgmgr_of_xlate()
615 return qinst->chan; in ti_msgmgr_of_xlate()
642 struct ti_queue_inst *qinst, in ti_msgmgr_queue_setup() argument
647 qinst->proxy_id = qd->proxy_id; in ti_msgmgr_queue_setup()
648 qinst->queue_id = qd->queue_id; in ti_msgmgr_queue_setup()
650 if (qinst->queue_id > d->queue_count) { in ti_msgmgr_queue_setup()
652 idx, qinst->queue_id, d->queue_count); in ti_msgmgr_queue_setup()
657 qinst->queue_buff_start = inst->queue_proxy_region + in ti_msgmgr_queue_setup()
658 SPROXY_THREAD_DATA_OFFSET(qinst->proxy_id, in ti_msgmgr_queue_setup()
660 qinst->queue_buff_end = inst->queue_proxy_region + in ti_msgmgr_queue_setup()
661 SPROXY_THREAD_DATA_OFFSET(qinst->proxy_id, in ti_msgmgr_queue_setup()
663 qinst->queue_state = inst->queue_state_debug_region + in ti_msgmgr_queue_setup()
664 SPROXY_THREAD_STATUS_OFFSET(qinst->proxy_id); in ti_msgmgr_queue_setup()
665 qinst->queue_ctrl = inst->queue_ctrl_region + in ti_msgmgr_queue_setup()
666 SPROXY_THREAD_CTRL_OFFSET(qinst->proxy_id); in ti_msgmgr_queue_setup()
670 snprintf(qinst->name, sizeof(qinst->name), "%s %s_%03d", in ti_msgmgr_queue_setup()
671 dev_name(dev), dir, qinst->proxy_id); in ti_msgmgr_queue_setup()
673 qinst->queue_buff_start = inst->queue_proxy_region + in ti_msgmgr_queue_setup()
674 Q_DATA_OFFSET(qinst->proxy_id, qinst->queue_id, in ti_msgmgr_queue_setup()
676 qinst->queue_buff_end = inst->queue_proxy_region + in ti_msgmgr_queue_setup()
677 Q_DATA_OFFSET(qinst->proxy_id, qinst->queue_id, in ti_msgmgr_queue_setup()
679 qinst->queue_state = in ti_msgmgr_queue_setup()
681 Q_STATE_OFFSET(qinst->queue_id); in ti_msgmgr_queue_setup()
682 qinst->is_tx = qd->is_tx; in ti_msgmgr_queue_setup()
683 dir = qinst->is_tx ? "tx" : "rx"; in ti_msgmgr_queue_setup()
684 snprintf(qinst->name, sizeof(qinst->name), "%s %s_%03d_%03d", in ti_msgmgr_queue_setup()
685 dev_name(dev), dir, qinst->queue_id, qinst->proxy_id); in ti_msgmgr_queue_setup()
688 qinst->chan = chan; in ti_msgmgr_queue_setup()
691 qinst->irq = -EINVAL; in ti_msgmgr_queue_setup()
693 chan->con_priv = qinst; in ti_msgmgr_queue_setup()
696 idx, qinst->queue_id, qinst->proxy_id, qinst->irq, in ti_msgmgr_queue_setup()
697 qinst->queue_buff_start, qinst->queue_buff_end); in ti_msgmgr_queue_setup()
701 static int ti_msgmgr_queue_rx_set_polled_mode(struct ti_queue_inst *qinst, bool enable) in ti_msgmgr_queue_rx_set_polled_mode() argument
704 disable_irq(qinst->irq); in ti_msgmgr_queue_rx_set_polled_mode()
705 qinst->polled_rx_mode = true; in ti_msgmgr_queue_rx_set_polled_mode()
707 enable_irq(qinst->irq); in ti_msgmgr_queue_rx_set_polled_mode()
708 qinst->polled_rx_mode = false; in ti_msgmgr_queue_rx_set_polled_mode()
717 struct ti_queue_inst *qinst; in ti_msgmgr_suspend() local
725 for (qinst = inst->qinsts, i = 0; i < inst->num_valid_queues; qinst++, i++) { in ti_msgmgr_suspend()
726 if (!qinst->is_tx) in ti_msgmgr_suspend()
727 ti_msgmgr_queue_rx_set_polled_mode(qinst, true); in ti_msgmgr_suspend()
736 struct ti_queue_inst *qinst; in ti_msgmgr_resume() local
739 for (qinst = inst->qinsts, i = 0; i < inst->num_valid_queues; qinst++, i++) { in ti_msgmgr_resume()
740 if (!qinst->is_tx) in ti_msgmgr_resume()
741 ti_msgmgr_queue_rx_set_polled_mode(qinst, false); in ti_msgmgr_resume()
816 struct ti_queue_inst *qinst; in ti_msgmgr_probe() local
865 qinst = devm_kcalloc(dev, queue_count, sizeof(*qinst), GFP_KERNEL); in ti_msgmgr_probe()
866 if (!qinst) in ti_msgmgr_probe()
868 inst->qinsts = qinst; in ti_msgmgr_probe()
879 for (i = 0; i < queue_count; i++, qinst++, chans++) { in ti_msgmgr_probe()
883 desc, &sproxy_desc, qinst, in ti_msgmgr_probe()
891 i < queue_count; i++, qinst++, chans++, queue_desc++) { in ti_msgmgr_probe()
893 desc, queue_desc, qinst, in ti_msgmgr_probe()