Lines Matching refs:edev
72 static u32 efa_com_reg_read32(struct efa_com_dev *edev, u16 offset) in efa_com_reg_read32() argument
74 struct efa_com_mmio_read *mmio_read = &edev->mmio_read; in efa_com_reg_read32()
91 writel(mmio_read_reg, edev->reg_bar + EFA_REGS_MMIO_REG_READ_OFF); in efa_com_reg_read32()
102 edev->efa_dev, in efa_com_reg_read32()
112 edev->efa_dev, in efa_com_reg_read32()
124 static int efa_com_admin_init_sq(struct efa_com_dev *edev) in efa_com_admin_init_sq() argument
126 struct efa_com_admin_queue *aq = &edev->aq; in efa_com_admin_init_sq()
144 sq->db_addr = (u32 __iomem *)(edev->reg_bar + EFA_REGS_AQ_PROD_DB_OFF); in efa_com_admin_init_sq()
149 writel(addr_low, edev->reg_bar + EFA_REGS_AQ_BASE_LO_OFF); in efa_com_admin_init_sq()
150 writel(addr_high, edev->reg_bar + EFA_REGS_AQ_BASE_HI_OFF); in efa_com_admin_init_sq()
156 writel(aq_caps, edev->reg_bar + EFA_REGS_AQ_CAPS_OFF); in efa_com_admin_init_sq()
161 static int efa_com_admin_init_cq(struct efa_com_dev *edev) in efa_com_admin_init_cq() argument
163 struct efa_com_admin_queue *aq = &edev->aq; in efa_com_admin_init_cq()
183 writel(addr_low, edev->reg_bar + EFA_REGS_ACQ_BASE_LO_OFF); in efa_com_admin_init_cq()
184 writel(addr_high, edev->reg_bar + EFA_REGS_ACQ_BASE_HI_OFF); in efa_com_admin_init_cq()
192 writel(acq_caps, edev->reg_bar + EFA_REGS_ACQ_CAPS_OFF); in efa_com_admin_init_cq()
197 static int efa_com_admin_init_aenq(struct efa_com_dev *edev, in efa_com_admin_init_aenq() argument
200 struct efa_com_aenq *aenq = &edev->aenq; in efa_com_admin_init_aenq()
206 ibdev_err(edev->efa_dev, "aenq handlers pointer is NULL\n"); in efa_com_admin_init_aenq()
211 aenq->entries = dma_alloc_coherent(edev->dmadev, size, &aenq->dma_addr, in efa_com_admin_init_aenq()
224 writel(addr_low, edev->reg_bar + EFA_REGS_AENQ_BASE_LO_OFF); in efa_com_admin_init_aenq()
225 writel(addr_high, edev->reg_bar + EFA_REGS_AENQ_BASE_HI_OFF); in efa_com_admin_init_aenq()
232 writel(aenq_caps, edev->reg_bar + EFA_REGS_AENQ_CAPS_OFF); in efa_com_admin_init_aenq()
238 writel(edev->aenq.cc, edev->reg_bar + EFA_REGS_AENQ_CONS_DB_OFF); in efa_com_admin_init_aenq()
659 void efa_com_admin_destroy(struct efa_com_dev *edev) in efa_com_admin_destroy() argument
661 struct efa_com_admin_queue *aq = &edev->aq; in efa_com_admin_destroy()
662 struct efa_com_aenq *aenq = &edev->aenq; in efa_com_admin_destroy()
669 devm_kfree(edev->dmadev, aq->comp_ctx_pool); in efa_com_admin_destroy()
670 devm_kfree(edev->dmadev, aq->comp_ctx); in efa_com_admin_destroy()
673 dma_free_coherent(edev->dmadev, size, sq->entries, sq->dma_addr); in efa_com_admin_destroy()
676 dma_free_coherent(edev->dmadev, size, cq->entries, cq->dma_addr); in efa_com_admin_destroy()
679 dma_free_coherent(edev->dmadev, size, aenq->entries, aenq->dma_addr); in efa_com_admin_destroy()
689 void efa_com_set_admin_polling_mode(struct efa_com_dev *edev, bool polling) in efa_com_set_admin_polling_mode() argument
696 writel(mask_value, edev->reg_bar + EFA_REGS_INTR_MASK_OFF); in efa_com_set_admin_polling_mode()
698 set_bit(EFA_AQ_STATE_POLLING_BIT, &edev->aq.state); in efa_com_set_admin_polling_mode()
700 clear_bit(EFA_AQ_STATE_POLLING_BIT, &edev->aq.state); in efa_com_set_admin_polling_mode()
703 static void efa_com_stats_init(struct efa_com_dev *edev) in efa_com_stats_init() argument
705 atomic64_t *s = (atomic64_t *)&edev->aq.stats; in efa_com_stats_init()
708 for (i = 0; i < sizeof(edev->aq.stats) / sizeof(*s); i++, s++) in efa_com_stats_init()
722 int efa_com_admin_init(struct efa_com_dev *edev, in efa_com_admin_init() argument
725 struct efa_com_admin_queue *aq = &edev->aq; in efa_com_admin_init()
731 dev_sts = efa_com_reg_read32(edev, EFA_REGS_DEV_STS_OFF); in efa_com_admin_init()
733 ibdev_err(edev->efa_dev, in efa_com_admin_init()
740 aq->dmadev = edev->dmadev; in efa_com_admin_init()
741 aq->efa_dev = edev->efa_dev; in efa_com_admin_init()
746 efa_com_stats_init(edev); in efa_com_admin_init()
752 err = efa_com_admin_init_sq(edev); in efa_com_admin_init()
756 err = efa_com_admin_init_cq(edev); in efa_com_admin_init()
760 efa_com_set_admin_polling_mode(edev, false); in efa_com_admin_init()
762 err = efa_com_admin_init_aenq(edev, aenq_handlers); in efa_com_admin_init()
766 cap = efa_com_reg_read32(edev, EFA_REGS_CAPS_OFF); in efa_com_admin_init()
781 dma_free_coherent(edev->dmadev, aq->depth * sizeof(*aq->cq.entries), in efa_com_admin_init()
784 dma_free_coherent(edev->dmadev, aq->depth * sizeof(*aq->sq.entries), in efa_com_admin_init()
787 devm_kfree(edev->dmadev, aq->comp_ctx); in efa_com_admin_init()
801 void efa_com_admin_q_comp_intr_handler(struct efa_com_dev *edev) in efa_com_admin_q_comp_intr_handler() argument
805 spin_lock_irqsave(&edev->aq.cq.lock, flags); in efa_com_admin_q_comp_intr_handler()
806 efa_com_handle_admin_completion(&edev->aq); in efa_com_admin_q_comp_intr_handler()
807 spin_unlock_irqrestore(&edev->aq.cq.lock, flags); in efa_com_admin_q_comp_intr_handler()
814 static efa_aenq_handler efa_com_get_specific_aenq_cb(struct efa_com_dev *edev, in efa_com_get_specific_aenq_cb() argument
817 struct efa_aenq_handlers *aenq_handlers = edev->aenq.aenq_handlers; in efa_com_get_specific_aenq_cb()
832 void efa_com_aenq_intr_handler(struct efa_com_dev *edev, void *data) in efa_com_aenq_intr_handler() argument
835 struct efa_com_aenq *aenq = &edev->aenq; in efa_com_aenq_intr_handler()
857 handler_cb = efa_com_get_specific_aenq_cb(edev, in efa_com_aenq_intr_handler()
881 writel(aenq->cc, edev->reg_bar + EFA_REGS_AENQ_CONS_DB_OFF); in efa_com_aenq_intr_handler()
884 static void efa_com_mmio_reg_read_resp_addr_init(struct efa_com_dev *edev) in efa_com_mmio_reg_read_resp_addr_init() argument
886 struct efa_com_mmio_read *mmio_read = &edev->mmio_read; in efa_com_mmio_reg_read_resp_addr_init()
894 writel(addr_high, edev->reg_bar + EFA_REGS_MMIO_RESP_HI_OFF); in efa_com_mmio_reg_read_resp_addr_init()
895 writel(addr_low, edev->reg_bar + EFA_REGS_MMIO_RESP_LO_OFF); in efa_com_mmio_reg_read_resp_addr_init()
898 int efa_com_mmio_reg_read_init(struct efa_com_dev *edev) in efa_com_mmio_reg_read_init() argument
900 struct efa_com_mmio_read *mmio_read = &edev->mmio_read; in efa_com_mmio_reg_read_init()
904 dma_alloc_coherent(edev->dmadev, sizeof(*mmio_read->read_resp), in efa_com_mmio_reg_read_init()
909 efa_com_mmio_reg_read_resp_addr_init(edev); in efa_com_mmio_reg_read_init()
918 void efa_com_mmio_reg_read_destroy(struct efa_com_dev *edev) in efa_com_mmio_reg_read_destroy() argument
920 struct efa_com_mmio_read *mmio_read = &edev->mmio_read; in efa_com_mmio_reg_read_destroy()
922 dma_free_coherent(edev->dmadev, sizeof(*mmio_read->read_resp), in efa_com_mmio_reg_read_destroy()
926 int efa_com_validate_version(struct efa_com_dev *edev) in efa_com_validate_version() argument
938 ver = efa_com_reg_read32(edev, EFA_REGS_VERSION_OFF); in efa_com_validate_version()
939 ctrl_ver = efa_com_reg_read32(edev, in efa_com_validate_version()
942 ibdev_dbg(edev->efa_dev, "efa device version: %d.%d\n", in efa_com_validate_version()
951 ibdev_err(edev->efa_dev, in efa_com_validate_version()
957 edev->efa_dev, in efa_com_validate_version()
979 ibdev_err(edev->efa_dev, in efa_com_validate_version()
996 int efa_com_get_dma_width(struct efa_com_dev *edev) in efa_com_get_dma_width() argument
998 u32 caps = efa_com_reg_read32(edev, EFA_REGS_CAPS_OFF); in efa_com_get_dma_width()
1003 ibdev_dbg(edev->efa_dev, "DMA width: %d\n", width); in efa_com_get_dma_width()
1006 ibdev_err(edev->efa_dev, "DMA width illegal value: %d\n", width); in efa_com_get_dma_width()
1010 edev->dma_addr_bits = width; in efa_com_get_dma_width()
1015 static int wait_for_reset_state(struct efa_com_dev *edev, u32 timeout, int on) in wait_for_reset_state() argument
1020 val = efa_com_reg_read32(edev, EFA_REGS_DEV_STS_OFF); in wait_for_reset_state()
1025 ibdev_dbg(edev->efa_dev, "Reset indication val %d\n", val); in wait_for_reset_state()
1039 int efa_com_dev_reset(struct efa_com_dev *edev, in efa_com_dev_reset() argument
1046 stat = efa_com_reg_read32(edev, EFA_REGS_DEV_STS_OFF); in efa_com_dev_reset()
1047 cap = efa_com_reg_read32(edev, EFA_REGS_CAPS_OFF); in efa_com_dev_reset()
1050 ibdev_err(edev->efa_dev, in efa_com_dev_reset()
1057 ibdev_err(edev->efa_dev, "Invalid timeout value\n"); in efa_com_dev_reset()
1064 writel(reset_val, edev->reg_bar + EFA_REGS_DEV_CTL_OFF); in efa_com_dev_reset()
1067 efa_com_mmio_reg_read_resp_addr_init(edev); in efa_com_dev_reset()
1069 err = wait_for_reset_state(edev, timeout, 1); in efa_com_dev_reset()
1071 ibdev_err(edev->efa_dev, "Reset indication didn't turn on\n"); in efa_com_dev_reset()
1076 writel(0, edev->reg_bar + EFA_REGS_DEV_CTL_OFF); in efa_com_dev_reset()
1077 err = wait_for_reset_state(edev, timeout, 0); in efa_com_dev_reset()
1079 ibdev_err(edev->efa_dev, "Reset indication didn't turn off\n"); in efa_com_dev_reset()
1086 edev->aq.completion_timeout = timeout * 100000; in efa_com_dev_reset()
1088 edev->aq.completion_timeout = ADMIN_CMD_TIMEOUT_US; in efa_com_dev_reset()
1093 static int efa_com_create_eq(struct efa_com_dev *edev, in efa_com_create_eq() argument
1097 struct efa_com_admin_queue *aq = &edev->aq; in efa_com_create_eq()
1118 ibdev_err_ratelimited(edev->efa_dev, in efa_com_create_eq()
1128 static void efa_com_destroy_eq(struct efa_com_dev *edev, in efa_com_destroy_eq() argument
1131 struct efa_com_admin_queue *aq = &edev->aq; in efa_com_destroy_eq()
1145 ibdev_err_ratelimited(edev->efa_dev, in efa_com_destroy_eq()
1150 static void efa_com_arm_eq(struct efa_com_dev *edev, struct efa_com_eq *eeq) in efa_com_arm_eq() argument
1157 writel(val, edev->reg_bar + EFA_REGS_EQ_DB_OFF); in efa_com_arm_eq()
1160 void efa_com_eq_comp_intr_handler(struct efa_com_dev *edev, in efa_com_eq_comp_intr_handler() argument
1196 efa_com_arm_eq(eeq->edev, eeq); in efa_com_eq_comp_intr_handler()
1199 void efa_com_eq_destroy(struct efa_com_dev *edev, struct efa_com_eq *eeq) in efa_com_eq_destroy() argument
1205 efa_com_destroy_eq(edev, ¶ms); in efa_com_eq_destroy()
1206 dma_free_coherent(edev->dmadev, eeq->depth * sizeof(*eeq->eqes), in efa_com_eq_destroy()
1210 int efa_com_eq_init(struct efa_com_dev *edev, struct efa_com_eq *eeq, in efa_com_eq_init() argument
1223 eeq->eqes = dma_alloc_coherent(edev->dmadev, in efa_com_eq_init()
1229 err = efa_com_create_eq(edev, ¶ms, &result); in efa_com_eq_init()
1234 eeq->edev = edev; in efa_com_eq_init()
1239 efa_com_arm_eq(edev, eeq); in efa_com_eq_init()
1244 dma_free_coherent(edev->dmadev, params.depth * sizeof(*eeq->eqes), in efa_com_eq_init()