Lines Matching refs:gpii

476 	struct gpii *gpiis;
490 struct gpii *gpii; member
501 struct gpii { struct
543 static void gpi_process_events(struct gpii *gpii); argument
566 static inline u32 gpi_read_reg(struct gpii *gpii, void __iomem *addr) in gpi_read_reg() argument
571 static inline void gpi_write_reg(struct gpii *gpii, void __iomem *addr, u32 val) in gpi_write_reg() argument
577 static inline void gpi_write_reg_field(struct gpii *gpii, void __iomem *addr, in gpi_write_reg_field() argument
580 u32 tmp = gpi_read_reg(gpii, addr); in gpi_write_reg_field()
584 gpi_write_reg(gpii, addr, val); in gpi_write_reg_field()
588 gpi_update_reg(struct gpii *gpii, u32 offset, u32 mask, u32 val) in gpi_update_reg() argument
590 void __iomem *addr = gpii->regs + offset; in gpi_update_reg()
591 u32 tmp = gpi_read_reg(gpii, addr); in gpi_update_reg()
596 gpi_write_reg(gpii, addr, tmp); in gpi_update_reg()
599 static void gpi_disable_interrupts(struct gpii *gpii) in gpi_disable_interrupts() argument
601 gpi_update_reg(gpii, GPII_n_CNTXT_TYPE_IRQ_MSK_OFFS(gpii->gpii_id), in gpi_disable_interrupts()
603 gpi_update_reg(gpii, GPII_n_CNTXT_SRC_IEOB_IRQ_MSK_OFFS(gpii->gpii_id), in gpi_disable_interrupts()
605 gpi_update_reg(gpii, GPII_n_CNTXT_SRC_CH_IRQ_MSK_OFFS(gpii->gpii_id), in gpi_disable_interrupts()
607 gpi_update_reg(gpii, GPII_n_CNTXT_SRC_EV_CH_IRQ_MSK_OFFS(gpii->gpii_id), in gpi_disable_interrupts()
609 gpi_update_reg(gpii, GPII_n_CNTXT_GLOB_IRQ_EN_OFFS(gpii->gpii_id), in gpi_disable_interrupts()
611 gpi_update_reg(gpii, GPII_n_CNTXT_GPII_IRQ_EN_OFFS(gpii->gpii_id), in gpi_disable_interrupts()
613 gpi_update_reg(gpii, GPII_n_CNTXT_INTSET_OFFS(gpii->gpii_id), in gpi_disable_interrupts()
616 gpii->cntxt_type_irq_msk = 0; in gpi_disable_interrupts()
617 devm_free_irq(gpii->gpi_dev->dev, gpii->irq, gpii); in gpi_disable_interrupts()
618 gpii->configured_irq = false; in gpi_disable_interrupts()
622 static int gpi_config_interrupts(struct gpii *gpii, enum gpii_irq_settings settings, bool mask) in gpi_config_interrupts() argument
631 if (!gpii->configured_irq) { in gpi_config_interrupts()
632 ret = devm_request_irq(gpii->gpi_dev->dev, gpii->irq, in gpi_config_interrupts()
634 "gpi-dma", gpii); in gpi_config_interrupts()
636 dev_err(gpii->gpi_dev->dev, "error request irq:%d ret:%d\n", in gpi_config_interrupts()
637 gpii->irq, ret); in gpi_config_interrupts()
648 gpii->cntxt_type_irq_msk |= GPII_n_CNTXT_TYPE_IRQ_MSK_IEOB; in gpi_config_interrupts()
650 gpii->cntxt_type_irq_msk &= ~(GPII_n_CNTXT_TYPE_IRQ_MSK_IEOB); in gpi_config_interrupts()
651 gpi_update_reg(gpii, GPII_n_CNTXT_TYPE_IRQ_MSK_OFFS(gpii->gpii_id), in gpi_config_interrupts()
652 GPII_n_CNTXT_TYPE_IRQ_MSK_BMSK, gpii->cntxt_type_irq_msk); in gpi_config_interrupts()
654 gpi_update_reg(gpii, GPII_n_CNTXT_TYPE_IRQ_MSK_OFFS(gpii->gpii_id), in gpi_config_interrupts()
656 gpi_update_reg(gpii, GPII_n_CNTXT_SRC_IEOB_IRQ_MSK_OFFS(gpii->gpii_id), in gpi_config_interrupts()
659 gpi_update_reg(gpii, GPII_n_CNTXT_SRC_CH_IRQ_MSK_OFFS(gpii->gpii_id), in gpi_config_interrupts()
662 gpi_update_reg(gpii, GPII_n_CNTXT_SRC_EV_CH_IRQ_MSK_OFFS(gpii->gpii_id), in gpi_config_interrupts()
665 gpi_update_reg(gpii, GPII_n_CNTXT_GLOB_IRQ_EN_OFFS(gpii->gpii_id), in gpi_config_interrupts()
668 gpi_update_reg(gpii, GPII_n_CNTXT_GPII_IRQ_EN_OFFS(gpii->gpii_id), in gpi_config_interrupts()
670 gpi_update_reg(gpii, GPII_n_CNTXT_MSI_BASE_LSB_OFFS(gpii->gpii_id), U32_MAX, 0); in gpi_config_interrupts()
671 gpi_update_reg(gpii, GPII_n_CNTXT_MSI_BASE_MSB_OFFS(gpii->gpii_id), U32_MAX, 0); in gpi_config_interrupts()
672 gpi_update_reg(gpii, GPII_n_CNTXT_SCRATCH_0_OFFS(gpii->gpii_id), U32_MAX, 0); in gpi_config_interrupts()
673 gpi_update_reg(gpii, GPII_n_CNTXT_SCRATCH_1_OFFS(gpii->gpii_id), U32_MAX, 0); in gpi_config_interrupts()
674 gpi_update_reg(gpii, GPII_n_CNTXT_INTSET_OFFS(gpii->gpii_id), in gpi_config_interrupts()
676 gpi_update_reg(gpii, GPII_n_ERROR_LOG_OFFS(gpii->gpii_id), U32_MAX, 0); in gpi_config_interrupts()
678 gpii->cntxt_type_irq_msk = enable; in gpi_config_interrupts()
681 gpii->configured_irq = true; in gpi_config_interrupts()
686 static int gpi_send_cmd(struct gpii *gpii, struct gchan *gchan, in gpi_send_cmd() argument
699 dev_dbg(gpii->gpi_dev->dev, in gpi_send_cmd()
703 reinit_completion(&gpii->cmd_completion); in gpi_send_cmd()
704 gpii->gpi_cmd = gpi_cmd; in gpi_send_cmd()
706 cmd_reg = IS_CHAN_CMD(gpi_cmd) ? gchan->ch_cmd_reg : gpii->ev_cmd_reg; in gpi_send_cmd()
709 gpi_write_reg(gpii, cmd_reg, cmd); in gpi_send_cmd()
710 timeout = wait_for_completion_timeout(&gpii->cmd_completion, in gpi_send_cmd()
713 dev_err(gpii->gpi_dev->dev, "cmd: %s completion timeout:%u\n", in gpi_send_cmd()
725 if (!IS_CHAN_CMD(gpi_cmd) && gpii->ev_state == gpi_cmd_info[gpi_cmd].state) in gpi_send_cmd()
735 struct gpii *gpii = gchan->gpii; in gpi_write_ch_db() local
739 gpi_write_reg(gpii, gchan->ch_cntxt_db_reg, p_wp); in gpi_write_ch_db()
743 static inline void gpi_write_ev_db(struct gpii *gpii, in gpi_write_ev_db() argument
749 gpi_write_reg(gpii, gpii->ev_cntxt_db_reg, p_wp); in gpi_write_ev_db()
753 static void gpi_process_ieob(struct gpii *gpii) in gpi_process_ieob() argument
755 gpi_write_reg(gpii, gpii->ieob_clr_reg, BIT(0)); in gpi_process_ieob()
757 gpi_config_interrupts(gpii, MASK_IEOB_SETTINGS, 0); in gpi_process_ieob()
758 tasklet_hi_schedule(&gpii->ev_task); in gpi_process_ieob()
762 static void gpi_process_ch_ctrl_irq(struct gpii *gpii) in gpi_process_ch_ctrl_irq() argument
764 u32 gpii_id = gpii->gpii_id; in gpi_process_ch_ctrl_irq()
766 u32 ch_irq = gpi_read_reg(gpii, gpii->regs + offset); in gpi_process_ch_ctrl_irq()
772 gpi_write_reg(gpii, gpii->regs + offset, (u32)ch_irq); in gpi_process_ch_ctrl_irq()
778 gchan = &gpii->gchan[chid]; in gpi_process_ch_ctrl_irq()
779 state = gpi_read_reg(gpii, gchan->ch_cntxt_base_reg + in gpi_process_ch_ctrl_irq()
788 if (gpii->gpi_cmd == GPI_CH_CMD_DE_ALLOC) in gpi_process_ch_ctrl_irq()
798 complete_all(&gpii->cmd_completion); in gpi_process_ch_ctrl_irq()
803 static void gpi_process_gen_err_irq(struct gpii *gpii) in gpi_process_gen_err_irq() argument
805 u32 gpii_id = gpii->gpii_id; in gpi_process_gen_err_irq()
807 u32 irq_stts = gpi_read_reg(gpii, gpii->regs + offset); in gpi_process_gen_err_irq()
810 dev_dbg(gpii->gpi_dev->dev, "irq_stts:0x%x\n", irq_stts); in gpi_process_gen_err_irq()
814 gpi_write_reg(gpii, gpii->regs + offset, irq_stts); in gpi_process_gen_err_irq()
818 static void gpi_process_glob_err_irq(struct gpii *gpii) in gpi_process_glob_err_irq() argument
820 u32 gpii_id = gpii->gpii_id; in gpi_process_glob_err_irq()
822 u32 irq_stts = gpi_read_reg(gpii, gpii->regs + offset); in gpi_process_glob_err_irq()
825 gpi_write_reg(gpii, gpii->regs + offset, irq_stts); in gpi_process_glob_err_irq()
829 dev_err(gpii->gpi_dev->dev, "invalid error status:0x%x\n", irq_stts); in gpi_process_glob_err_irq()
834 gpi_write_reg(gpii, gpii->regs + offset, 0); in gpi_process_glob_err_irq()
840 struct gpii *gpii = data; in gpi_handle_irq() local
841 u32 gpii_id = gpii->gpii_id; in gpi_handle_irq()
845 read_lock_irqsave(&gpii->pm_lock, flags); in gpi_handle_irq()
851 if (!REG_ACCESS_VALID(gpii->pm_state)) { in gpi_handle_irq()
852 dev_err(gpii->gpi_dev->dev, "receive interrupt while in %s state\n", in gpi_handle_irq()
853 TO_GPI_PM_STR(gpii->pm_state)); in gpi_handle_irq()
857 offset = GPII_n_CNTXT_TYPE_IRQ_OFFS(gpii->gpii_id); in gpi_handle_irq()
858 type = gpi_read_reg(gpii, gpii->regs + offset); in gpi_handle_irq()
863 gpi_process_glob_err_irq(gpii); in gpi_handle_irq()
869 gpi_process_ieob(gpii); in gpi_handle_irq()
878 dev_dbg(gpii->gpi_dev->dev, in gpi_handle_irq()
881 ev_ch_irq = gpi_read_reg(gpii, gpii->regs + offset); in gpi_handle_irq()
885 gpi_write_reg(gpii, gpii->regs + offset, ev_ch_irq); in gpi_handle_irq()
886 ev_state = gpi_read_reg(gpii, gpii->ev_cntxt_base_reg + in gpi_handle_irq()
895 if (gpii->gpi_cmd == GPI_EV_CMD_DEALLOC) in gpi_handle_irq()
898 gpii->ev_state = ev_state; in gpi_handle_irq()
899 dev_dbg(gpii->gpi_dev->dev, "setting EV state to %s\n", in gpi_handle_irq()
900 TO_GPI_EV_STATE_STR(gpii->ev_state)); in gpi_handle_irq()
901 complete_all(&gpii->cmd_completion); in gpi_handle_irq()
907 dev_dbg(gpii->gpi_dev->dev, "process CH CTRL interrupts\n"); in gpi_handle_irq()
908 gpi_process_ch_ctrl_irq(gpii); in gpi_handle_irq()
913 dev_err(gpii->gpi_dev->dev, "Unhandled interrupt status:0x%x\n", type); in gpi_handle_irq()
914 gpi_process_gen_err_irq(gpii); in gpi_handle_irq()
918 offset = GPII_n_CNTXT_TYPE_IRQ_OFFS(gpii->gpii_id); in gpi_handle_irq()
919 type = gpi_read_reg(gpii, gpii->regs + offset); in gpi_handle_irq()
923 read_unlock_irqrestore(&gpii->pm_lock, flags); in gpi_handle_irq()
932 struct gpii *gpii = gchan->gpii; in gpi_process_imed_data_event() local
945 dev_err(gpii->gpi_dev->dev, "skipping processing event because ch @ %s state\n", in gpi_process_imed_data_event()
957 dev_dbg(gpii->gpi_dev->dev, "event without a pending descriptor!\n"); in gpi_process_imed_data_event()
959 dev_dbg(gpii->gpi_dev->dev, in gpi_process_imed_data_event()
964 dev_dbg(gpii->gpi_dev->dev, in gpi_process_imed_data_event()
986 if (imed_event->code == MSM_GPI_TCE_EOT && gpii->ieob_set) { in gpi_process_imed_data_event()
1014 struct gpii *gpii = gchan->gpii; in gpi_process_xfer_compl_event() local
1025 dev_err(gpii->gpi_dev->dev, "skipping processing event because ch @ %s state\n", in gpi_process_xfer_compl_event()
1036 dev_err(gpii->gpi_dev->dev, "Event without a pending descriptor!\n"); in gpi_process_xfer_compl_event()
1038 dev_err(gpii->gpi_dev->dev, in gpi_process_xfer_compl_event()
1061 if (compl_event->code == MSM_GPI_TCE_EOT && gpii->ieob_set) { in gpi_process_xfer_compl_event()
1069 dev_err(gpii->gpi_dev->dev, "Error in Transaction\n"); in gpi_process_xfer_compl_event()
1072 dev_dbg(gpii->gpi_dev->dev, "Transaction Success\n"); in gpi_process_xfer_compl_event()
1076 dev_dbg(gpii->gpi_dev->dev, "Residue %d\n", result.residue); in gpi_process_xfer_compl_event()
1090 static void gpi_process_events(struct gpii *gpii) in gpi_process_events() argument
1092 struct gpi_ring *ev_ring = &gpii->ev_ring; in gpi_process_events()
1099 cntxt_rp = gpi_read_reg(gpii, gpii->ev_ring_rp_lsb_reg); in gpi_process_events()
1108 dev_dbg(gpii->gpi_dev->dev, in gpi_process_events()
1116 gchan = &gpii->gchan[chid]; in gpi_process_events()
1121 dev_dbg(gpii->gpi_dev->dev, "stale event, not processing\n"); in gpi_process_events()
1124 gchan = &gpii->gchan[chid]; in gpi_process_events()
1129 dev_dbg(gpii->gpi_dev->dev, "QUP_NOTIF_EV_TYPE\n"); in gpi_process_events()
1132 dev_dbg(gpii->gpi_dev->dev, in gpi_process_events()
1137 gpi_write_ev_db(gpii, ev_ring, ev_ring->wp); in gpi_process_events()
1140 gpi_write_reg(gpii, gpii->ieob_clr_reg, BIT(0)); in gpi_process_events()
1142 cntxt_rp = gpi_read_reg(gpii, gpii->ev_ring_rp_lsb_reg); in gpi_process_events()
1151 struct gpii *gpii = (struct gpii *)data; in gpi_ev_tasklet() local
1153 read_lock(&gpii->pm_lock); in gpi_ev_tasklet()
1154 if (!REG_ACCESS_VALID(gpii->pm_state)) { in gpi_ev_tasklet()
1155 read_unlock(&gpii->pm_lock); in gpi_ev_tasklet()
1156 dev_err(gpii->gpi_dev->dev, "not processing any events, pm_state:%s\n", in gpi_ev_tasklet()
1157 TO_GPI_PM_STR(gpii->pm_state)); in gpi_ev_tasklet()
1162 gpi_process_events(gpii); in gpi_ev_tasklet()
1165 gpi_config_interrupts(gpii, MASK_IEOB_SETTINGS, 1); in gpi_ev_tasklet()
1166 read_unlock(&gpii->pm_lock); in gpi_ev_tasklet()
1172 struct gpii *gpii = gchan->gpii; in gpi_mark_stale_events() local
1173 struct gpi_ring *ev_ring = &gpii->ev_ring; in gpi_mark_stale_events()
1177 cntxt_rp = gpi_read_reg(gpii, gpii->ev_ring_rp_lsb_reg); in gpi_mark_stale_events()
1190 cntxt_rp = gpi_read_reg(gpii, gpii->ev_ring_rp_lsb_reg); in gpi_mark_stale_events()
1198 struct gpii *gpii = gchan->gpii; in gpi_reset_chan() local
1204 ret = gpi_send_cmd(gpii, gchan, gpi_cmd); in gpi_reset_chan()
1206 dev_err(gpii->gpi_dev->dev, "Error with cmd:%s ret:%d\n", in gpi_reset_chan()
1219 write_lock_irq(&gpii->pm_lock); in gpi_reset_chan()
1226 write_unlock_irq(&gpii->pm_lock); in gpi_reset_chan()
1234 struct gpii *gpii = gchan->gpii; in gpi_start_chan() local
1237 ret = gpi_send_cmd(gpii, gchan, GPI_CH_CMD_START); in gpi_start_chan()
1239 dev_err(gpii->gpi_dev->dev, "Error with cmd:%s ret:%d\n", in gpi_start_chan()
1245 write_lock_irq(&gpii->pm_lock); in gpi_start_chan()
1247 write_unlock_irq(&gpii->pm_lock); in gpi_start_chan()
1254 struct gpii *gpii = gchan->gpii; in gpi_stop_chan() local
1257 ret = gpi_send_cmd(gpii, gchan, GPI_CH_CMD_STOP); in gpi_stop_chan()
1259 dev_err(gpii->gpi_dev->dev, "Error with cmd:%s ret:%d\n", in gpi_stop_chan()
1270 struct gpii *gpii = chan->gpii; in gpi_alloc_chan() local
1273 u32 id = gpii->gpii_id; in gpi_alloc_chan()
1278 ret = gpi_send_cmd(gpii, chan, GPI_CH_CMD_ALLOCATE); in gpi_alloc_chan()
1280 dev_err(gpii->gpi_dev->dev, "Error with cmd:%s ret:%d\n", in gpi_alloc_chan()
1286 gpi_write_reg(gpii, chan->ch_cntxt_base_reg + CNTXT_0_CONFIG, in gpi_alloc_chan()
1288 gpi_write_reg(gpii, chan->ch_cntxt_base_reg + CNTXT_1_R_LENGTH, ring->len); in gpi_alloc_chan()
1289 gpi_write_reg(gpii, chan->ch_cntxt_base_reg + CNTXT_2_RING_BASE_LSB, ring->phys_addr); in gpi_alloc_chan()
1290 gpi_write_reg(gpii, chan->ch_cntxt_base_reg + CNTXT_3_RING_BASE_MSB, in gpi_alloc_chan()
1292 gpi_write_reg(gpii, chan->ch_cntxt_db_reg + CNTXT_5_RING_RP_MSB - CNTXT_4_RING_RP_LSB, in gpi_alloc_chan()
1294 gpi_write_reg(gpii, gpii->regs + GPII_n_CH_k_SCRATCH_0_OFFS(id, chid), in gpi_alloc_chan()
1296 gpi_write_reg(gpii, gpii->regs + GPII_n_CH_k_SCRATCH_1_OFFS(id, chid), 0); in gpi_alloc_chan()
1297 gpi_write_reg(gpii, gpii->regs + GPII_n_CH_k_SCRATCH_2_OFFS(id, chid), 0); in gpi_alloc_chan()
1298 gpi_write_reg(gpii, gpii->regs + GPII_n_CH_k_SCRATCH_3_OFFS(id, chid), 0); in gpi_alloc_chan()
1299 gpi_write_reg(gpii, gpii->regs + GPII_n_CH_k_QOS_OFFS(id, chid), 1); in gpi_alloc_chan()
1307 static int gpi_alloc_ev_chan(struct gpii *gpii) in gpi_alloc_ev_chan() argument
1309 struct gpi_ring *ring = &gpii->ev_ring; in gpi_alloc_ev_chan()
1310 void __iomem *base = gpii->ev_cntxt_base_reg; in gpi_alloc_ev_chan()
1313 ret = gpi_send_cmd(gpii, NULL, GPI_EV_CMD_ALLOCATE); in gpi_alloc_ev_chan()
1315 dev_err(gpii->gpi_dev->dev, "error with cmd:%s ret:%d\n", in gpi_alloc_ev_chan()
1321 gpi_write_reg(gpii, base + CNTXT_0_CONFIG, in gpi_alloc_ev_chan()
1323 gpi_write_reg(gpii, base + CNTXT_1_R_LENGTH, ring->len); in gpi_alloc_ev_chan()
1324 gpi_write_reg(gpii, base + CNTXT_2_RING_BASE_LSB, lower_32_bits(ring->phys_addr)); in gpi_alloc_ev_chan()
1325 gpi_write_reg(gpii, base + CNTXT_3_RING_BASE_MSB, upper_32_bits(ring->phys_addr)); in gpi_alloc_ev_chan()
1326 gpi_write_reg(gpii, gpii->ev_cntxt_db_reg + CNTXT_5_RING_RP_MSB - CNTXT_4_RING_RP_LSB, in gpi_alloc_ev_chan()
1328 gpi_write_reg(gpii, base + CNTXT_8_RING_INT_MOD, 0); in gpi_alloc_ev_chan()
1329 gpi_write_reg(gpii, base + CNTXT_10_RING_MSI_LSB, 0); in gpi_alloc_ev_chan()
1330 gpi_write_reg(gpii, base + CNTXT_11_RING_MSI_MSB, 0); in gpi_alloc_ev_chan()
1331 gpi_write_reg(gpii, base + CNTXT_8_RING_INT_MOD, 0); in gpi_alloc_ev_chan()
1332 gpi_write_reg(gpii, base + CNTXT_12_RING_RP_UPDATE_LSB, 0); in gpi_alloc_ev_chan()
1333 gpi_write_reg(gpii, base + CNTXT_13_RING_RP_UPDATE_MSB, 0); in gpi_alloc_ev_chan()
1342 write_lock_irq(&gpii->pm_lock); in gpi_alloc_ev_chan()
1343 gpii->pm_state = ACTIVE_STATE; in gpi_alloc_ev_chan()
1344 write_unlock_irq(&gpii->pm_lock); in gpi_alloc_ev_chan()
1345 gpi_write_ev_db(gpii, ring, ring->wp); in gpi_alloc_ev_chan()
1398 struct gpii *gpii) in gpi_free_ring() argument
1400 dma_free_coherent(gpii->gpi_dev->dev, ring->alloc_size, in gpi_free_ring()
1407 u32 el_size, struct gpii *gpii) in gpi_alloc_ring() argument
1418 dev_dbg(gpii->gpi_dev->dev, in gpi_alloc_ring()
1423 ring->pre_aligned = dma_alloc_coherent(gpii->gpi_dev->dev, in gpi_alloc_ring()
1427 dev_err(gpii->gpi_dev->dev, "could not alloc size:%zu mem for ring\n", in gpi_alloc_ring()
1446 dev_dbg(gpii->gpi_dev->dev, in gpi_alloc_ring()
1455 static void gpi_queue_xfer(struct gpii *gpii, struct gchan *gchan, in gpi_queue_xfer() argument
1464 dev_err(gpii->gpi_dev->dev, "Error adding ring element to xfer ring\n"); in gpi_queue_xfer()
1477 struct gpii *gpii = gchan->gpii; in gpi_terminate_all() local
1481 mutex_lock(&gpii->ctrl_lock); in gpi_terminate_all()
1492 gchan = &gpii->gchan[i]; in gpi_terminate_all()
1495 write_lock_irq(&gpii->pm_lock); in gpi_terminate_all()
1497 write_unlock_irq(&gpii->pm_lock); in gpi_terminate_all()
1505 gchan = &gpii->gchan[i]; in gpi_terminate_all()
1509 dev_err(gpii->gpi_dev->dev, "Error resetting channel ret:%d\n", ret); in gpi_terminate_all()
1516 dev_err(gpii->gpi_dev->dev, "Error alloc_channel ret:%d\n", ret); in gpi_terminate_all()
1523 gchan = &gpii->gchan[i]; in gpi_terminate_all()
1527 dev_err(gpii->gpi_dev->dev, "Error Starting Channel ret:%d\n", ret); in gpi_terminate_all()
1533 mutex_unlock(&gpii->ctrl_lock); in gpi_terminate_all()
1541 struct gpii *gpii = gchan->gpii; in gpi_pause() local
1544 mutex_lock(&gpii->ctrl_lock); in gpi_pause()
1550 if (gpii->pm_state == PAUSE_STATE) { in gpi_pause()
1551 dev_dbg(gpii->gpi_dev->dev, "channel is already paused\n"); in gpi_pause()
1552 mutex_unlock(&gpii->ctrl_lock); in gpi_pause()
1558 ret = gpi_stop_chan(&gpii->gchan[i]); in gpi_pause()
1560 mutex_unlock(&gpii->ctrl_lock); in gpi_pause()
1565 disable_irq(gpii->irq); in gpi_pause()
1568 tasklet_kill(&gpii->ev_task); in gpi_pause()
1570 write_lock_irq(&gpii->pm_lock); in gpi_pause()
1571 gpii->pm_state = PAUSE_STATE; in gpi_pause()
1572 write_unlock_irq(&gpii->pm_lock); in gpi_pause()
1573 mutex_unlock(&gpii->ctrl_lock); in gpi_pause()
1582 struct gpii *gpii = gchan->gpii; in gpi_resume() local
1585 mutex_lock(&gpii->ctrl_lock); in gpi_resume()
1586 if (gpii->pm_state == ACTIVE_STATE) { in gpi_resume()
1587 dev_dbg(gpii->gpi_dev->dev, "channel is already active\n"); in gpi_resume()
1588 mutex_unlock(&gpii->ctrl_lock); in gpi_resume()
1592 enable_irq(gpii->irq); in gpi_resume()
1596 ret = gpi_send_cmd(gpii, &gpii->gchan[i], GPI_CH_CMD_START); in gpi_resume()
1598 dev_err(gpii->gpi_dev->dev, "Error starting chan, ret:%d\n", ret); in gpi_resume()
1599 mutex_unlock(&gpii->ctrl_lock); in gpi_resume()
1604 write_lock_irq(&gpii->pm_lock); in gpi_resume()
1605 gpii->pm_state = ACTIVE_STATE; in gpi_resume()
1606 write_unlock_irq(&gpii->pm_lock); in gpi_resume()
1607 mutex_unlock(&gpii->ctrl_lock); in gpi_resume()
1641 struct device *dev = chan->gpii->gpi_dev->dev; in gpi_create_i2c_tre()
1716 struct device *dev = chan->gpii->gpi_dev->dev; in gpi_create_spi_tre()
1796 struct gpii *gpii = gchan->gpii; in gpi_prep_slave_sg() local
1797 struct device *dev = gpii->gpi_dev->dev; in gpi_prep_slave_sg()
1804 gpii->ieob_set = false; in gpi_prep_slave_sg()
1806 dev_err(gpii->gpi_dev->dev, "invalid dma direction: %d\n", direction); in gpi_prep_slave_sg()
1856 struct gpii *gpii = gchan->gpii; in gpi_issue_pending() local
1864 read_lock_irqsave(&gpii->pm_lock, pm_lock_flags); in gpi_issue_pending()
1875 read_unlock_irqrestore(&gpii->pm_lock, pm_lock_flags); in gpi_issue_pending()
1882 gpi_queue_xfer(gpii, gchan, tre, &wp); in gpi_issue_pending()
1887 read_unlock_irqrestore(&gpii->pm_lock, pm_lock_flags); in gpi_issue_pending()
1892 struct gpii *gpii = gchan->gpii; in gpi_ch_init() local
1893 const int ev_factor = gpii->gpi_dev->ev_factor; in gpi_ch_init()
1901 if (gpii->gchan[i].pm_state != CONFIG_STATE) in gpi_ch_init()
1905 if (gpii->gchan[0].protocol != gpii->gchan[1].protocol) { in gpi_ch_init()
1906 dev_err(gpii->gpi_dev->dev, "protocol did not match protocol %u != %u\n", in gpi_ch_init()
1907 gpii->gchan[0].protocol, gpii->gchan[1].protocol); in gpi_ch_init()
1914 ret = gpi_alloc_ring(&gpii->ev_ring, elements, in gpi_ch_init()
1915 sizeof(union gpi_event), gpii); in gpi_ch_init()
1920 write_lock_irq(&gpii->pm_lock); in gpi_ch_init()
1921 gpii->pm_state = PREPARE_HARDWARE; in gpi_ch_init()
1922 write_unlock_irq(&gpii->pm_lock); in gpi_ch_init()
1923 ret = gpi_config_interrupts(gpii, DEFAULT_IRQ_SETTINGS, 0); in gpi_ch_init()
1925 dev_err(gpii->gpi_dev->dev, "error config. interrupts, ret:%d\n", ret); in gpi_ch_init()
1930 ret = gpi_alloc_ev_chan(gpii); in gpi_ch_init()
1932 dev_err(gpii->gpi_dev->dev, "error alloc_ev_chan:%d\n", ret); in gpi_ch_init()
1938 ret = gpi_alloc_chan(&gpii->gchan[i], true); in gpi_ch_init()
1940 dev_err(gpii->gpi_dev->dev, "Error allocating chan:%d\n", ret); in gpi_ch_init()
1947 ret = gpi_start_chan(&gpii->gchan[i]); in gpi_ch_init()
1949 dev_err(gpii->gpi_dev->dev, "Error start chan:%d\n", ret); in gpi_ch_init()
1957 gpi_stop_chan(&gpii->gchan[i]); in gpi_ch_init()
1958 gpi_send_cmd(gpii, gchan, GPI_CH_CMD_RESET); in gpi_ch_init()
1965 gpi_disable_interrupts(gpii); in gpi_ch_init()
1967 gpi_free_ring(&gpii->ev_ring, gpii); in gpi_ch_init()
1976 struct gpii *gpii = gchan->gpii; in gpi_free_chan_resources() local
1980 mutex_lock(&gpii->ctrl_lock); in gpi_free_chan_resources()
1985 write_lock_irq(&gpii->pm_lock); in gpi_free_chan_resources()
1987 write_unlock_irq(&gpii->pm_lock); in gpi_free_chan_resources()
1993 ret = gpi_send_cmd(gpii, gchan, GPI_CH_CMD_RESET); in gpi_free_chan_resources()
1995 dev_err(gpii->gpi_dev->dev, "error resetting channel:%d\n", ret); in gpi_free_chan_resources()
2001 gpi_free_ring(&gchan->ch_ring, gpii); in gpi_free_chan_resources()
2005 write_lock_irq(&gpii->pm_lock); in gpi_free_chan_resources()
2007 write_unlock_irq(&gpii->pm_lock); in gpi_free_chan_resources()
2011 if (gpii->gchan[i].ch_ring.configured) in gpi_free_chan_resources()
2015 cur_state = gpii->pm_state; in gpi_free_chan_resources()
2016 write_lock_irq(&gpii->pm_lock); in gpi_free_chan_resources()
2017 gpii->pm_state = PREPARE_TERMINATE; in gpi_free_chan_resources()
2018 write_unlock_irq(&gpii->pm_lock); in gpi_free_chan_resources()
2021 tasklet_kill(&gpii->ev_task); in gpi_free_chan_resources()
2025 gpi_send_cmd(gpii, NULL, GPI_EV_CMD_DEALLOC); in gpi_free_chan_resources()
2027 gpi_free_ring(&gpii->ev_ring, gpii); in gpi_free_chan_resources()
2031 gpi_disable_interrupts(gpii); in gpi_free_chan_resources()
2034 write_lock_irq(&gpii->pm_lock); in gpi_free_chan_resources()
2035 gpii->pm_state = DISABLE_STATE; in gpi_free_chan_resources()
2036 write_unlock_irq(&gpii->pm_lock); in gpi_free_chan_resources()
2039 mutex_unlock(&gpii->ctrl_lock); in gpi_free_chan_resources()
2046 struct gpii *gpii = gchan->gpii; in gpi_alloc_chan_resources() local
2049 mutex_lock(&gpii->ctrl_lock); in gpi_alloc_chan_resources()
2053 sizeof(struct gpi_tre), gpii); in gpi_alloc_chan_resources()
2059 mutex_unlock(&gpii->ctrl_lock); in gpi_alloc_chan_resources()
2063 mutex_unlock(&gpii->ctrl_lock); in gpi_alloc_chan_resources()
2071 unsigned int gpii; in gpi_find_avail_gpii() local
2074 for (gpii = 0; gpii < gpi_dev->max_gpii; gpii++) { in gpi_find_avail_gpii()
2075 if (!((1 << gpii) & gpi_dev->gpii_mask)) in gpi_find_avail_gpii()
2078 tx_chan = &gpi_dev->gpiis[gpii].gchan[GPI_TX_CHAN]; in gpi_find_avail_gpii()
2079 rx_chan = &gpi_dev->gpiis[gpii].gchan[GPI_RX_CHAN]; in gpi_find_avail_gpii()
2082 return gpii; in gpi_find_avail_gpii()
2084 return gpii; in gpi_find_avail_gpii()
2088 for (gpii = 0; gpii < gpi_dev->max_gpii; gpii++) { in gpi_find_avail_gpii()
2089 if (!((1 << gpii) & gpi_dev->gpii_mask)) in gpi_find_avail_gpii()
2092 tx_chan = &gpi_dev->gpiis[gpii].gchan[GPI_TX_CHAN]; in gpi_find_avail_gpii()
2093 rx_chan = &gpi_dev->gpiis[gpii].gchan[GPI_RX_CHAN]; in gpi_find_avail_gpii()
2101 return gpii; in gpi_find_avail_gpii()
2114 int gpii; in gpi_of_dma_xlate() local
2132 gpii = gpi_find_avail_gpii(gpi_dev, seid); in gpi_of_dma_xlate()
2133 if (gpii < 0) { in gpi_of_dma_xlate()
2138 gchan = &gpi_dev->gpiis[gpii].gchan[chid]; in gpi_of_dma_xlate()
2141 gpii, chid, gchan->seid); in gpi_of_dma_xlate()
2201 struct gpii *gpii = &gpi_dev->gpiis[i]; in gpi_probe() local
2208 gpii->ev_cntxt_base_reg = gpi_dev->ee_base + GPII_n_EV_CH_k_CNTXT_0_OFFS(i, 0); in gpi_probe()
2209 gpii->ev_cntxt_db_reg = gpi_dev->ee_base + GPII_n_EV_CH_k_DOORBELL_0_OFFS(i, 0); in gpi_probe()
2210 gpii->ev_ring_rp_lsb_reg = gpii->ev_cntxt_base_reg + CNTXT_4_RING_RP_LSB; in gpi_probe()
2211 gpii->ev_cmd_reg = gpi_dev->ee_base + GPII_n_EV_CH_CMD_OFFS(i); in gpi_probe()
2212 gpii->ieob_clr_reg = gpi_dev->ee_base + GPII_n_CNTXT_SRC_IEOB_IRQ_CLR_OFFS(i); in gpi_probe()
2218 gpii->irq = ret; in gpi_probe()
2222 struct gchan *gchan = &gpii->gchan[chan]; in gpi_probe()
2235 gchan->gpii = gpii; in gpi_probe()
2238 mutex_init(&gpii->ctrl_lock); in gpi_probe()
2239 rwlock_init(&gpii->pm_lock); in gpi_probe()
2240 tasklet_init(&gpii->ev_task, gpi_ev_tasklet, in gpi_probe()
2241 (unsigned long)gpii); in gpi_probe()
2242 init_completion(&gpii->cmd_completion); in gpi_probe()
2243 gpii->gpii_id = i; in gpi_probe()
2244 gpii->regs = gpi_dev->ee_base; in gpi_probe()
2245 gpii->gpi_dev = gpi_dev; in gpi_probe()