Lines Matching refs:idev
133 u8 asic_type = ionic->idev.dev_info.asic_type; in ionic_doorbell_wa()
140 struct ionic_dev *idev = &ionic->idev; in ionic_watchdog_init() local
146 atomic_long_set(&idev->last_check_time, jiffies - 2 * HZ); in ionic_watchdog_init()
147 idev->last_hb_time = jiffies - 2 * ionic->watchdog_period; in ionic_watchdog_init()
149 idev->last_fw_hb = 0; in ionic_watchdog_init()
150 idev->fw_hb_ready = true; in ionic_watchdog_init()
151 idev->fw_status_ready = true; in ionic_watchdog_init()
152 idev->fw_generation = IONIC_FW_STS_F_GENERATION & in ionic_watchdog_init()
153 ioread8(&idev->dev_info_regs->fw_status); in ionic_watchdog_init()
183 struct ionic_dev *idev = &ionic->idev; in ionic_init_devinfo() local
185 idev->dev_info.asic_type = ioread8(&idev->dev_info_regs->asic_type); in ionic_init_devinfo()
186 idev->dev_info.asic_rev = ioread8(&idev->dev_info_regs->asic_rev); in ionic_init_devinfo()
188 memcpy_fromio(idev->dev_info.fw_version, in ionic_init_devinfo()
189 idev->dev_info_regs->fw_version, in ionic_init_devinfo()
192 memcpy_fromio(idev->dev_info.serial_num, in ionic_init_devinfo()
193 idev->dev_info_regs->serial_num, in ionic_init_devinfo()
196 idev->dev_info.fw_version[IONIC_DEVINFO_FWVERS_BUFLEN] = 0; in ionic_init_devinfo()
197 idev->dev_info.serial_num[IONIC_DEVINFO_SERIAL_BUFLEN] = 0; in ionic_init_devinfo()
199 dev_dbg(ionic->dev, "fw_version %s\n", idev->dev_info.fw_version); in ionic_init_devinfo()
206 struct ionic_dev *idev = &ionic->idev; in ionic_dev_setup() local
224 idev->dev_info_regs = bar->vaddr + IONIC_BAR0_DEV_INFO_REGS_OFFSET; in ionic_dev_setup()
225 idev->dev_cmd_regs = bar->vaddr + IONIC_BAR0_DEV_CMD_REGS_OFFSET; in ionic_dev_setup()
226 idev->intr_status = bar->vaddr + IONIC_BAR0_INTR_STATUS_OFFSET; in ionic_dev_setup()
227 idev->intr_ctrl = bar->vaddr + IONIC_BAR0_INTR_CTRL_OFFSET; in ionic_dev_setup()
229 idev->hwstamp_regs = &idev->dev_info_regs->hwstamp; in ionic_dev_setup()
231 sig = ioread32(&idev->dev_info_regs->signature); in ionic_dev_setup()
250 idev->db_pages = bar->vaddr; in ionic_dev_setup()
251 idev->phy_db_pages = bar->bus_addr; in ionic_dev_setup()
255 mutex_init(&idev->cmb_inuse_lock); in ionic_dev_setup()
257 idev->cmb_inuse = NULL; in ionic_dev_setup()
261 idev->phy_cmb_pages = bar->bus_addr; in ionic_dev_setup()
262 idev->cmb_npages = bar->len / PAGE_SIZE; in ionic_dev_setup()
263 size = BITS_TO_LONGS(idev->cmb_npages) * sizeof(long); in ionic_dev_setup()
264 idev->cmb_inuse = kzalloc(size, GFP_KERNEL); in ionic_dev_setup()
265 if (!idev->cmb_inuse) in ionic_dev_setup()
273 struct ionic_dev *idev = &ionic->idev; in ionic_dev_teardown() local
275 kfree(idev->cmb_inuse); in ionic_dev_teardown()
276 idev->cmb_inuse = NULL; in ionic_dev_teardown()
277 idev->phy_cmb_pages = 0; in ionic_dev_teardown()
278 idev->cmb_npages = 0; in ionic_dev_teardown()
281 mutex_destroy(&idev->cmb_inuse_lock); in ionic_dev_teardown()
285 static bool __ionic_is_fw_running(struct ionic_dev *idev, u8 *status_ptr) in __ionic_is_fw_running() argument
289 if (!idev->dev_info_regs) { in __ionic_is_fw_running()
295 fw_status = ioread8(&idev->dev_info_regs->fw_status); in __ionic_is_fw_running()
305 bool ionic_is_fw_running(struct ionic_dev *idev) in ionic_is_fw_running() argument
307 return __ionic_is_fw_running(idev, NULL); in ionic_is_fw_running()
313 struct ionic_dev *idev = &ionic->idev; in ionic_heartbeat_check() local
323 last_check_time = atomic_long_read(&idev->last_check_time); in ionic_heartbeat_check()
327 if (!atomic_long_try_cmpxchg_relaxed(&idev->last_check_time, in ionic_heartbeat_check()
335 if (!__ionic_is_fw_running(idev, &fw_status)) { in ionic_heartbeat_check()
339 if (idev->fw_generation != fw_generation) { in ionic_heartbeat_check()
341 idev->fw_generation, fw_generation); in ionic_heartbeat_check()
343 idev->fw_generation = fw_generation; in ionic_heartbeat_check()
357 idev->fw_status_ready = false; /* go to running */ in ionic_heartbeat_check()
364 fw_status, fw_status_ready, idev->fw_status_ready, in ionic_heartbeat_check()
365 idev->last_fw_hb, lif->state[0]); in ionic_heartbeat_check()
368 if (fw_status_ready != idev->fw_status_ready && in ionic_heartbeat_check()
372 idev->fw_status_ready = fw_status_ready; in ionic_heartbeat_check()
398 if (!idev->fw_status_ready) in ionic_heartbeat_check()
404 last_check_time = idev->last_hb_time; in ionic_heartbeat_check()
408 fw_hb = ioread32(&idev->dev_info_regs->fw_heartbeat); in ionic_heartbeat_check()
409 fw_hb_ready = fw_hb != idev->last_fw_hb; in ionic_heartbeat_check()
416 __func__, fw_hb, idev->last_fw_hb, fw_hb_ready); in ionic_heartbeat_check()
418 idev->last_fw_hb = fw_hb; in ionic_heartbeat_check()
421 if (fw_hb_ready != idev->fw_hb_ready) { in ionic_heartbeat_check()
422 idev->fw_hb_ready = fw_hb_ready; in ionic_heartbeat_check()
432 idev->last_hb_time = check_time; in ionic_heartbeat_check()
437 u8 ionic_dev_cmd_status(struct ionic_dev *idev) in ionic_dev_cmd_status() argument
439 if (!idev->dev_cmd_regs) in ionic_dev_cmd_status()
441 return ioread8(&idev->dev_cmd_regs->comp.comp.status); in ionic_dev_cmd_status()
444 bool ionic_dev_cmd_done(struct ionic_dev *idev) in ionic_dev_cmd_done() argument
446 if (!idev->dev_cmd_regs) in ionic_dev_cmd_done()
448 return ioread32(&idev->dev_cmd_regs->done) & IONIC_DEV_CMD_DONE; in ionic_dev_cmd_done()
451 void ionic_dev_cmd_comp(struct ionic_dev *idev, union ionic_dev_cmd_comp *comp) in ionic_dev_cmd_comp() argument
453 if (!idev->dev_cmd_regs) in ionic_dev_cmd_comp()
455 memcpy_fromio(comp, &idev->dev_cmd_regs->comp, sizeof(*comp)); in ionic_dev_cmd_comp()
458 void ionic_dev_cmd_go(struct ionic_dev *idev, union ionic_dev_cmd *cmd) in ionic_dev_cmd_go() argument
460 idev->opcode = cmd->cmd.opcode; in ionic_dev_cmd_go()
462 if (!idev->dev_cmd_regs) in ionic_dev_cmd_go()
465 memcpy_toio(&idev->dev_cmd_regs->cmd, cmd, sizeof(*cmd)); in ionic_dev_cmd_go()
466 iowrite32(0, &idev->dev_cmd_regs->done); in ionic_dev_cmd_go()
467 iowrite32(1, &idev->dev_cmd_regs->doorbell); in ionic_dev_cmd_go()
471 void ionic_dev_cmd_identify(struct ionic_dev *idev, u8 ver) in ionic_dev_cmd_identify() argument
478 ionic_dev_cmd_go(idev, &cmd); in ionic_dev_cmd_identify()
481 void ionic_dev_cmd_init(struct ionic_dev *idev) in ionic_dev_cmd_init() argument
488 ionic_dev_cmd_go(idev, &cmd); in ionic_dev_cmd_init()
491 void ionic_dev_cmd_reset(struct ionic_dev *idev) in ionic_dev_cmd_reset() argument
497 ionic_dev_cmd_go(idev, &cmd); in ionic_dev_cmd_reset()
501 void ionic_dev_cmd_port_identify(struct ionic_dev *idev) in ionic_dev_cmd_port_identify() argument
508 ionic_dev_cmd_go(idev, &cmd); in ionic_dev_cmd_port_identify()
511 void ionic_dev_cmd_port_init(struct ionic_dev *idev) in ionic_dev_cmd_port_init() argument
516 .port_init.info_pa = cpu_to_le64(idev->port_info_pa), in ionic_dev_cmd_port_init()
519 ionic_dev_cmd_go(idev, &cmd); in ionic_dev_cmd_port_init()
522 void ionic_dev_cmd_port_reset(struct ionic_dev *idev) in ionic_dev_cmd_port_reset() argument
529 ionic_dev_cmd_go(idev, &cmd); in ionic_dev_cmd_port_reset()
532 void ionic_dev_cmd_port_state(struct ionic_dev *idev, u8 state) in ionic_dev_cmd_port_state() argument
541 ionic_dev_cmd_go(idev, &cmd); in ionic_dev_cmd_port_state()
544 void ionic_dev_cmd_port_speed(struct ionic_dev *idev, u32 speed) in ionic_dev_cmd_port_speed() argument
553 ionic_dev_cmd_go(idev, &cmd); in ionic_dev_cmd_port_speed()
556 void ionic_dev_cmd_port_autoneg(struct ionic_dev *idev, u8 an_enable) in ionic_dev_cmd_port_autoneg() argument
565 ionic_dev_cmd_go(idev, &cmd); in ionic_dev_cmd_port_autoneg()
568 void ionic_dev_cmd_port_fec(struct ionic_dev *idev, u8 fec_type) in ionic_dev_cmd_port_fec() argument
577 ionic_dev_cmd_go(idev, &cmd); in ionic_dev_cmd_port_fec()
580 void ionic_dev_cmd_port_pause(struct ionic_dev *idev, u8 pause_type) in ionic_dev_cmd_port_pause() argument
589 ionic_dev_cmd_go(idev, &cmd); in ionic_dev_cmd_port_pause()
606 ionic_dev_cmd_go(&ionic->idev, &cmd); in ionic_set_vf_config()
623 ionic_dev_cmd_go(&ionic->idev, &cmd); in ionic_vf_start()
628 void ionic_dev_cmd_queue_identify(struct ionic_dev *idev, in ionic_dev_cmd_queue_identify() argument
638 ionic_dev_cmd_go(idev, &cmd); in ionic_dev_cmd_queue_identify()
641 void ionic_dev_cmd_lif_identify(struct ionic_dev *idev, u8 type, u8 ver) in ionic_dev_cmd_lif_identify() argument
649 ionic_dev_cmd_go(idev, &cmd); in ionic_dev_cmd_lif_identify()
652 void ionic_dev_cmd_lif_init(struct ionic_dev *idev, u16 lif_index, in ionic_dev_cmd_lif_init() argument
661 ionic_dev_cmd_go(idev, &cmd); in ionic_dev_cmd_lif_init()
664 void ionic_dev_cmd_lif_reset(struct ionic_dev *idev, u16 lif_index) in ionic_dev_cmd_lif_reset() argument
671 ionic_dev_cmd_go(idev, &cmd); in ionic_dev_cmd_lif_reset()
674 void ionic_dev_cmd_adminq_init(struct ionic_dev *idev, struct ionic_qcq *qcq, in ionic_dev_cmd_adminq_init() argument
695 ionic_dev_cmd_go(idev, &cmd); in ionic_dev_cmd_adminq_init()
705 struct ionic_dev *idev = &lif->ionic->idev; in ionic_get_cmb() local
708 mutex_lock(&idev->cmb_inuse_lock); in ionic_get_cmb()
709 ret = bitmap_find_free_region(idev->cmb_inuse, idev->cmb_npages, order); in ionic_get_cmb()
710 mutex_unlock(&idev->cmb_inuse_lock); in ionic_get_cmb()
716 *pgaddr = idev->phy_cmb_pages + ret * PAGE_SIZE; in ionic_get_cmb()
723 struct ionic_dev *idev = &lif->ionic->idev; in ionic_put_cmb() local
725 mutex_lock(&idev->cmb_inuse_lock); in ionic_put_cmb()
726 bitmap_release_region(idev->cmb_inuse, pgid, order); in ionic_put_cmb()
727 mutex_unlock(&idev->cmb_inuse_lock); in ionic_put_cmb()
749 cq->idev = &lif->ionic->idev; in ionic_cq_init()
779 int ionic_q_init(struct ionic_lif *lif, struct ionic_dev *idev, in ionic_q_init() argument