Lines Matching full:ndev

76 static int ndev_mw_to_bar(struct amd_ntb_dev *ndev, int idx)  in ndev_mw_to_bar()  argument
78 if (idx < 0 || idx > ndev->mw_count) in ndev_mw_to_bar()
81 return ndev->dev_data->mw_idx << idx; in ndev_mw_to_bar()
97 struct amd_ntb_dev *ndev = ntb_ndev(ntb); in amd_ntb_mw_get_align() local
103 bar = ndev_mw_to_bar(ndev, idx); in amd_ntb_mw_get_align()
114 *size_max = pci_resource_len(ndev->ntb.pdev, bar); in amd_ntb_mw_get_align()
122 struct amd_ntb_dev *ndev = ntb_ndev(ntb); in amd_ntb_mw_set_trans() local
132 bar = ndev_mw_to_bar(ndev, idx); in amd_ntb_mw_set_trans()
142 mmio = ndev->self_mmio; in amd_ntb_mw_set_trans()
143 peer_mmio = ndev->peer_mmio; in amd_ntb_mw_set_trans()
198 static int amd_ntb_get_link_status(struct amd_ntb_dev *ndev) in amd_ntb_get_link_status() argument
200 struct pci_dev *pdev = ndev->ntb.pdev; in amd_ntb_get_link_status()
206 if (ndev->ntb.topo == NTB_TOPO_SEC) { in amd_ntb_get_link_status()
207 if (ndev->dev_data->is_endpoint) { in amd_ntb_get_link_status()
212 ndev->lnk_sta = stat; in amd_ntb_get_link_status()
217 pci_swds = pci_upstream_bridge(ndev->ntb.pdev); in amd_ntb_get_link_status()
236 } else if (ndev->ntb.topo == NTB_TOPO_PRI) { in amd_ntb_get_link_status()
241 pdev = ndev->ntb.pdev; in amd_ntb_get_link_status()
250 ndev->lnk_sta = stat; in amd_ntb_get_link_status()
255 static int amd_link_is_up(struct amd_ntb_dev *ndev) in amd_link_is_up() argument
297 ret = amd_poll_link(ndev); in amd_link_is_up()
304 if (ndev->ntb.topo == NTB_TOPO_PRI) { in amd_link_is_up()
305 if ((ndev->peer_sta & AMD_LINK_UP_EVENT) || in amd_link_is_up()
306 (ndev->peer_sta == 0)) in amd_link_is_up()
308 else if (ndev->peer_sta & AMD_LINK_DOWN_EVENT) { in amd_link_is_up()
310 amd_clear_side_info_reg(ndev, true); in amd_link_is_up()
326 struct amd_ntb_dev *ndev = ntb_ndev(ntb); in amd_ntb_link_is_up() local
329 if (amd_link_is_up(ndev)) { in amd_ntb_link_is_up()
331 *speed = NTB_LNK_STA_SPEED(ndev->lnk_sta); in amd_ntb_link_is_up()
333 *width = NTB_LNK_STA_WIDTH(ndev->lnk_sta); in amd_ntb_link_is_up()
354 struct amd_ntb_dev *ndev = ntb_ndev(ntb); in amd_ntb_link_enable() local
355 void __iomem *mmio = ndev->self_mmio; in amd_ntb_link_enable()
358 ndev->int_mask &= ~AMD_EVENT_INTMASK; in amd_ntb_link_enable()
359 writel(ndev->int_mask, mmio + AMD_INTMASK_OFFSET); in amd_ntb_link_enable()
361 if (ndev->ntb.topo == NTB_TOPO_SEC) in amd_ntb_link_enable()
370 struct amd_ntb_dev *ndev = ntb_ndev(ntb); in amd_ntb_link_disable() local
371 void __iomem *mmio = ndev->self_mmio; in amd_ntb_link_disable()
374 ndev->int_mask |= AMD_EVENT_INTMASK; in amd_ntb_link_disable()
375 writel(ndev->int_mask, mmio + AMD_INTMASK_OFFSET); in amd_ntb_link_disable()
377 if (ndev->ntb.topo == NTB_TOPO_SEC) in amd_ntb_link_disable()
393 struct amd_ntb_dev *ndev = ntb_ndev(ntb); in amd_ntb_peer_mw_get_addr() local
396 bar = ndev_mw_to_bar(ndev, idx); in amd_ntb_peer_mw_get_addr()
401 *base = pci_resource_start(ndev->ntb.pdev, bar); in amd_ntb_peer_mw_get_addr()
404 *size = pci_resource_len(ndev->ntb.pdev, bar); in amd_ntb_peer_mw_get_addr()
421 struct amd_ntb_dev *ndev = ntb_ndev(ntb); in amd_ntb_db_vector_mask() local
423 if (db_vector < 0 || db_vector > ndev->db_count) in amd_ntb_db_vector_mask()
431 struct amd_ntb_dev *ndev = ntb_ndev(ntb); in amd_ntb_db_read() local
432 void __iomem *mmio = ndev->self_mmio; in amd_ntb_db_read()
439 struct amd_ntb_dev *ndev = ntb_ndev(ntb); in amd_ntb_db_clear() local
440 void __iomem *mmio = ndev->self_mmio; in amd_ntb_db_clear()
449 struct amd_ntb_dev *ndev = ntb_ndev(ntb); in amd_ntb_db_set_mask() local
450 void __iomem *mmio = ndev->self_mmio; in amd_ntb_db_set_mask()
453 if (db_bits & ~ndev->db_valid_mask) in amd_ntb_db_set_mask()
456 spin_lock_irqsave(&ndev->db_mask_lock, flags); in amd_ntb_db_set_mask()
457 ndev->db_mask |= db_bits; in amd_ntb_db_set_mask()
458 writew((u16)ndev->db_mask, mmio + AMD_DBMASK_OFFSET); in amd_ntb_db_set_mask()
459 spin_unlock_irqrestore(&ndev->db_mask_lock, flags); in amd_ntb_db_set_mask()
466 struct amd_ntb_dev *ndev = ntb_ndev(ntb); in amd_ntb_db_clear_mask() local
467 void __iomem *mmio = ndev->self_mmio; in amd_ntb_db_clear_mask()
470 if (db_bits & ~ndev->db_valid_mask) in amd_ntb_db_clear_mask()
473 spin_lock_irqsave(&ndev->db_mask_lock, flags); in amd_ntb_db_clear_mask()
474 ndev->db_mask &= ~db_bits; in amd_ntb_db_clear_mask()
475 writew((u16)ndev->db_mask, mmio + AMD_DBMASK_OFFSET); in amd_ntb_db_clear_mask()
476 spin_unlock_irqrestore(&ndev->db_mask_lock, flags); in amd_ntb_db_clear_mask()
483 struct amd_ntb_dev *ndev = ntb_ndev(ntb); in amd_ntb_peer_db_set() local
484 void __iomem *mmio = ndev->self_mmio; in amd_ntb_peer_db_set()
498 struct amd_ntb_dev *ndev = ntb_ndev(ntb); in amd_ntb_spad_read() local
499 void __iomem *mmio = ndev->self_mmio; in amd_ntb_spad_read()
502 if (idx < 0 || idx >= ndev->spad_count) in amd_ntb_spad_read()
505 offset = ndev->self_spad + (idx << 2); in amd_ntb_spad_read()
512 struct amd_ntb_dev *ndev = ntb_ndev(ntb); in amd_ntb_spad_write() local
513 void __iomem *mmio = ndev->self_mmio; in amd_ntb_spad_write()
516 if (idx < 0 || idx >= ndev->spad_count) in amd_ntb_spad_write()
519 offset = ndev->self_spad + (idx << 2); in amd_ntb_spad_write()
527 struct amd_ntb_dev *ndev = ntb_ndev(ntb); in amd_ntb_peer_spad_read() local
528 void __iomem *mmio = ndev->self_mmio; in amd_ntb_peer_spad_read()
531 if (sidx < 0 || sidx >= ndev->spad_count) in amd_ntb_peer_spad_read()
534 offset = ndev->peer_spad + (sidx << 2); in amd_ntb_peer_spad_read()
541 struct amd_ntb_dev *ndev = ntb_ndev(ntb); in amd_ntb_peer_spad_write() local
542 void __iomem *mmio = ndev->self_mmio; in amd_ntb_peer_spad_write()
545 if (sidx < 0 || sidx >= ndev->spad_count) in amd_ntb_peer_spad_write()
548 offset = ndev->peer_spad + (sidx << 2); in amd_ntb_peer_spad_write()
578 static void amd_ack_smu(struct amd_ntb_dev *ndev, u32 bit) in amd_ack_smu() argument
580 void __iomem *mmio = ndev->self_mmio; in amd_ack_smu()
588 static void amd_handle_event(struct amd_ntb_dev *ndev, int vec) in amd_handle_event() argument
590 void __iomem *mmio = ndev->self_mmio; in amd_handle_event()
591 struct device *dev = &ndev->ntb.pdev->dev; in amd_handle_event()
603 ndev->peer_sta |= AMD_PEER_FLUSH_EVENT; in amd_handle_event()
608 ndev->peer_sta |= status; in amd_handle_event()
610 ndev->peer_sta &= ~AMD_LINK_UP_EVENT; in amd_handle_event()
612 amd_ack_smu(ndev, status); in amd_handle_event()
615 ntb_link_event(&ndev->ntb); in amd_handle_event()
617 schedule_delayed_work(&ndev->hb_timer, AMD_LINK_HB_TIMEOUT); in amd_handle_event()
623 ndev->peer_sta |= status; in amd_handle_event()
625 ndev->peer_sta &= ~AMD_LINK_DOWN_EVENT; in amd_handle_event()
627 ndev->peer_sta &= ~AMD_PEER_D0_EVENT; in amd_handle_event()
629 amd_ack_smu(ndev, status); in amd_handle_event()
632 ntb_link_event(&ndev->ntb); in amd_handle_event()
636 mmio = ndev->peer_mmio; in amd_handle_event()
642 ndev->peer_sta |= AMD_PEER_D0_EVENT; in amd_handle_event()
643 ndev->peer_sta &= ~AMD_PEER_D3_EVENT; in amd_handle_event()
644 amd_ack_smu(ndev, AMD_PEER_D0_EVENT); in amd_handle_event()
647 schedule_delayed_work(&ndev->hb_timer, in amd_handle_event()
659 static void amd_handle_db_event(struct amd_ntb_dev *ndev, int vec) in amd_handle_db_event() argument
661 struct device *dev = &ndev->ntb.pdev->dev; in amd_handle_db_event()
664 status = amd_ntb_db_read(&ndev->ntb); in amd_handle_db_event()
673 if (status & BIT(ndev->db_last_bit)) { in amd_handle_db_event()
674 ntb_db_clear(&ndev->ntb, BIT(ndev->db_last_bit)); in amd_handle_db_event()
676 ntb_link_event(&ndev->ntb); in amd_handle_db_event()
685 schedule_delayed_work(&ndev->hb_timer, AMD_LINK_HB_TIMEOUT); in amd_handle_db_event()
689 static irqreturn_t ndev_interrupt(struct amd_ntb_dev *ndev, int vec) in ndev_interrupt() argument
691 dev_dbg(&ndev->ntb.pdev->dev, "vec %d\n", vec); in ndev_interrupt()
693 if (vec > (AMD_DB_CNT - 1) || (ndev->msix_vec_count == 1)) in ndev_interrupt()
694 amd_handle_event(ndev, vec); in ndev_interrupt()
697 amd_handle_db_event(ndev, vec); in ndev_interrupt()
698 ntb_db_event(&ndev->ntb, vec); in ndev_interrupt()
708 return ndev_interrupt(nvec->ndev, nvec->num); in ndev_vec_isr()
713 struct amd_ntb_dev *ndev = dev; in ndev_irq_isr() local
715 return ndev_interrupt(ndev, irq - ndev->ntb.pdev->irq); in ndev_irq_isr()
718 static int ndev_init_isr(struct amd_ntb_dev *ndev, in ndev_init_isr() argument
724 pdev = ndev->ntb.pdev; in ndev_init_isr()
728 ndev->db_mask = ndev->db_valid_mask; in ndev_init_isr()
731 ndev->vec = kcalloc_node(msix_max, sizeof(*ndev->vec), in ndev_init_isr()
733 if (!ndev->vec) in ndev_init_isr()
736 ndev->msix = kcalloc_node(msix_max, sizeof(*ndev->msix), in ndev_init_isr()
738 if (!ndev->msix) in ndev_init_isr()
742 ndev->msix[i].entry = i; in ndev_init_isr()
744 msix_count = pci_enable_msix_range(pdev, ndev->msix, in ndev_init_isr()
758 ndev->vec[i].ndev = ndev; in ndev_init_isr()
759 ndev->vec[i].num = i; in ndev_init_isr()
760 rc = request_irq(ndev->msix[i].vector, ndev_vec_isr, 0, in ndev_init_isr()
761 "ndev_vec_isr", &ndev->vec[i]); in ndev_init_isr()
767 ndev->db_count = msix_min; in ndev_init_isr()
768 ndev->msix_vec_count = msix_max; in ndev_init_isr()
773 free_irq(ndev->msix[i].vector, &ndev->vec[i]); in ndev_init_isr()
776 kfree(ndev->msix); in ndev_init_isr()
778 kfree(ndev->vec); in ndev_init_isr()
780 ndev->msix = NULL; in ndev_init_isr()
781 ndev->vec = NULL; in ndev_init_isr()
789 "ndev_irq_isr", ndev); in ndev_init_isr()
794 ndev->db_count = 1; in ndev_init_isr()
795 ndev->msix_vec_count = 1; in ndev_init_isr()
806 "ndev_irq_isr", ndev); in ndev_init_isr()
811 ndev->db_count = 1; in ndev_init_isr()
812 ndev->msix_vec_count = 1; in ndev_init_isr()
819 static void ndev_deinit_isr(struct amd_ntb_dev *ndev) in ndev_deinit_isr() argument
822 void __iomem *mmio = ndev->self_mmio; in ndev_deinit_isr()
825 pdev = ndev->ntb.pdev; in ndev_deinit_isr()
828 ndev->db_mask = ndev->db_valid_mask; in ndev_deinit_isr()
829 writel(ndev->db_mask, mmio + AMD_DBMASK_OFFSET); in ndev_deinit_isr()
831 if (ndev->msix) { in ndev_deinit_isr()
832 i = ndev->msix_vec_count; in ndev_deinit_isr()
834 free_irq(ndev->msix[i].vector, &ndev->vec[i]); in ndev_deinit_isr()
836 kfree(ndev->msix); in ndev_deinit_isr()
837 kfree(ndev->vec); in ndev_deinit_isr()
839 free_irq(pdev->irq, ndev); in ndev_deinit_isr()
850 struct amd_ntb_dev *ndev; in ndev_debugfs_read() local
857 ndev = filp->private_data; in ndev_debugfs_read()
858 mmio = ndev->self_mmio; in ndev_debugfs_read()
873 ntb_topo_string(ndev->ntb.topo)); in ndev_debugfs_read()
876 "LNK STA -\t\t%#06x\n", ndev->lnk_sta); in ndev_debugfs_read()
878 if (!amd_link_is_up(ndev)) { in ndev_debugfs_read()
886 NTB_LNK_STA_SPEED(ndev->lnk_sta)); in ndev_debugfs_read()
889 NTB_LNK_STA_WIDTH(ndev->lnk_sta)); in ndev_debugfs_read()
893 "Memory Window Count -\t%u\n", ndev->mw_count); in ndev_debugfs_read()
895 "Scratchpad Count -\t%u\n", ndev->spad_count); in ndev_debugfs_read()
897 "Doorbell Count -\t%u\n", ndev->db_count); in ndev_debugfs_read()
899 "MSIX Vector Count -\t%u\n", ndev->msix_vec_count); in ndev_debugfs_read()
902 "Doorbell Valid Mask -\t%#llx\n", ndev->db_valid_mask); in ndev_debugfs_read()
904 u.v32 = readl(ndev->self_mmio + AMD_DBMASK_OFFSET); in ndev_debugfs_read()
919 u.v64 = read64(ndev->self_mmio + AMD_BAR23XLAT_OFFSET); in ndev_debugfs_read()
923 u.v64 = read64(ndev->self_mmio + AMD_BAR45XLAT_OFFSET); in ndev_debugfs_read()
931 u.v64 = read64(ndev->self_mmio + AMD_BAR23LMT_OFFSET); in ndev_debugfs_read()
935 u.v64 = read64(ndev->self_mmio + AMD_BAR45LMT_OFFSET); in ndev_debugfs_read()
944 static void ndev_init_debugfs(struct amd_ntb_dev *ndev) in ndev_init_debugfs() argument
947 ndev->debugfs_dir = NULL; in ndev_init_debugfs()
948 ndev->debugfs_info = NULL; in ndev_init_debugfs()
950 ndev->debugfs_dir = in ndev_init_debugfs()
951 debugfs_create_dir(pci_name(ndev->ntb.pdev), in ndev_init_debugfs()
953 ndev->debugfs_info = in ndev_init_debugfs()
955 ndev->debugfs_dir, ndev, in ndev_init_debugfs()
960 static void ndev_deinit_debugfs(struct amd_ntb_dev *ndev) in ndev_deinit_debugfs() argument
962 debugfs_remove_recursive(ndev->debugfs_dir); in ndev_deinit_debugfs()
965 static inline void ndev_init_struct(struct amd_ntb_dev *ndev, in ndev_init_struct() argument
968 ndev->ntb.pdev = pdev; in ndev_init_struct()
969 ndev->ntb.topo = NTB_TOPO_NONE; in ndev_init_struct()
970 ndev->ntb.ops = &amd_ntb_ops; in ndev_init_struct()
971 ndev->int_mask = AMD_EVENT_INTMASK; in ndev_init_struct()
972 spin_lock_init(&ndev->db_mask_lock); in ndev_init_struct()
975 static int amd_poll_link(struct amd_ntb_dev *ndev) in amd_poll_link() argument
977 void __iomem *mmio = ndev->peer_mmio; in amd_poll_link()
983 dev_dbg(&ndev->ntb.pdev->dev, "%s: reg_val = 0x%x.\n", __func__, reg); in amd_poll_link()
985 ndev->cntl_sta = reg; in amd_poll_link()
987 amd_ntb_get_link_status(ndev); in amd_poll_link()
989 return ndev->cntl_sta; in amd_poll_link()
994 struct amd_ntb_dev *ndev = hb_ndev(work); in amd_link_hb() local
996 if (amd_poll_link(ndev)) in amd_link_hb()
997 ntb_link_event(&ndev->ntb); in amd_link_hb()
999 if (!amd_link_is_up(ndev)) in amd_link_hb()
1000 schedule_delayed_work(&ndev->hb_timer, AMD_LINK_HB_TIMEOUT); in amd_link_hb()
1003 static int amd_init_isr(struct amd_ntb_dev *ndev) in amd_init_isr() argument
1005 return ndev_init_isr(ndev, AMD_DB_CNT, AMD_MSIX_VECTOR_CNT); in amd_init_isr()
1008 static void amd_set_side_info_reg(struct amd_ntb_dev *ndev, bool peer) in amd_set_side_info_reg() argument
1014 mmio = ndev->peer_mmio; in amd_set_side_info_reg()
1016 mmio = ndev->self_mmio; in amd_set_side_info_reg()
1025 static void amd_clear_side_info_reg(struct amd_ntb_dev *ndev, bool peer) in amd_clear_side_info_reg() argument
1031 mmio = ndev->peer_mmio; in amd_clear_side_info_reg()
1033 mmio = ndev->self_mmio; in amd_clear_side_info_reg()
1043 static void amd_init_side_info(struct amd_ntb_dev *ndev) in amd_init_side_info() argument
1045 void __iomem *mmio = ndev->self_mmio; in amd_init_side_info()
1048 amd_set_side_info_reg(ndev, false); in amd_init_side_info()
1055 static void amd_deinit_side_info(struct amd_ntb_dev *ndev) in amd_deinit_side_info() argument
1057 void __iomem *mmio = ndev->self_mmio; in amd_deinit_side_info()
1060 amd_clear_side_info_reg(ndev, false); in amd_deinit_side_info()
1067 static int amd_init_ntb(struct amd_ntb_dev *ndev) in amd_init_ntb() argument
1069 void __iomem *mmio = ndev->self_mmio; in amd_init_ntb()
1071 ndev->mw_count = ndev->dev_data->mw_count; in amd_init_ntb()
1072 ndev->spad_count = AMD_SPADS_CNT; in amd_init_ntb()
1073 ndev->db_count = AMD_DB_CNT; in amd_init_ntb()
1075 switch (ndev->ntb.topo) { in amd_init_ntb()
1078 ndev->spad_count >>= 1; in amd_init_ntb()
1079 if (ndev->ntb.topo == NTB_TOPO_PRI) { in amd_init_ntb()
1080 ndev->self_spad = 0; in amd_init_ntb()
1081 ndev->peer_spad = 0x20; in amd_init_ntb()
1083 ndev->self_spad = 0x20; in amd_init_ntb()
1084 ndev->peer_spad = 0; in amd_init_ntb()
1087 INIT_DELAYED_WORK(&ndev->hb_timer, amd_link_hb); in amd_init_ntb()
1088 schedule_delayed_work(&ndev->hb_timer, AMD_LINK_HB_TIMEOUT); in amd_init_ntb()
1092 dev_err(&ndev->ntb.pdev->dev, in amd_init_ntb()
1098 writel(ndev->int_mask, mmio + AMD_INTMASK_OFFSET); in amd_init_ntb()
1103 static enum ntb_topo amd_get_topo(struct amd_ntb_dev *ndev) in amd_get_topo() argument
1105 void __iomem *mmio = ndev->self_mmio; in amd_get_topo()
1115 static int amd_init_dev(struct amd_ntb_dev *ndev) in amd_init_dev() argument
1117 void __iomem *mmio = ndev->self_mmio; in amd_init_dev()
1121 pdev = ndev->ntb.pdev; in amd_init_dev()
1123 ndev->ntb.topo = amd_get_topo(ndev); in amd_init_dev()
1125 ntb_topo_string(ndev->ntb.topo)); in amd_init_dev()
1127 rc = amd_init_ntb(ndev); in amd_init_dev()
1131 rc = amd_init_isr(ndev); in amd_init_dev()
1137 ndev->db_valid_mask = BIT_ULL(ndev->db_count) - 1; in amd_init_dev()
1143 ndev->db_last_bit = in amd_init_dev()
1144 find_last_bit((unsigned long *)&ndev->db_valid_mask, in amd_init_dev()
1145 hweight64(ndev->db_valid_mask)); in amd_init_dev()
1146 writew((u16)~BIT(ndev->db_last_bit), mmio + AMD_DBMASK_OFFSET); in amd_init_dev()
1151 ndev->db_count -= 1; in amd_init_dev()
1152 ndev->db_valid_mask = BIT_ULL(ndev->db_count) - 1; in amd_init_dev()
1155 ndev->int_mask &= ~(AMD_LINK_UP_EVENT | AMD_LINK_DOWN_EVENT); in amd_init_dev()
1156 writel(ndev->int_mask, mmio + AMD_INTMASK_OFFSET); in amd_init_dev()
1161 static void amd_deinit_dev(struct amd_ntb_dev *ndev) in amd_deinit_dev() argument
1163 cancel_delayed_work_sync(&ndev->hb_timer); in amd_deinit_dev()
1165 ndev_deinit_isr(ndev); in amd_deinit_dev()
1168 static int amd_ntb_init_pci(struct amd_ntb_dev *ndev, in amd_ntb_init_pci() argument
1173 pci_set_drvdata(pdev, ndev); in amd_ntb_init_pci()
1193 ndev->self_mmio = pci_iomap(pdev, 0, 0); in amd_ntb_init_pci()
1194 if (!ndev->self_mmio) { in amd_ntb_init_pci()
1198 ndev->peer_mmio = ndev->self_mmio + AMD_PEER_OFFSET; in amd_ntb_init_pci()
1211 static void amd_ntb_deinit_pci(struct amd_ntb_dev *ndev) in amd_ntb_deinit_pci() argument
1213 struct pci_dev *pdev = ndev->ntb.pdev; in amd_ntb_deinit_pci()
1215 pci_iounmap(pdev, ndev->self_mmio); in amd_ntb_deinit_pci()
1225 struct amd_ntb_dev *ndev; in amd_ntb_pci_probe() local
1230 ndev = kzalloc_node(sizeof(*ndev), GFP_KERNEL, node); in amd_ntb_pci_probe()
1231 if (!ndev) { in amd_ntb_pci_probe()
1236 ndev->dev_data = (struct ntb_dev_data *)id->driver_data; in amd_ntb_pci_probe()
1238 ndev_init_struct(ndev, pdev); in amd_ntb_pci_probe()
1240 rc = amd_ntb_init_pci(ndev, pdev); in amd_ntb_pci_probe()
1244 rc = amd_init_dev(ndev); in amd_ntb_pci_probe()
1249 amd_init_side_info(ndev); in amd_ntb_pci_probe()
1251 amd_poll_link(ndev); in amd_ntb_pci_probe()
1253 ndev_init_debugfs(ndev); in amd_ntb_pci_probe()
1255 rc = ntb_register_device(&ndev->ntb); in amd_ntb_pci_probe()
1264 ndev_deinit_debugfs(ndev); in amd_ntb_pci_probe()
1265 amd_deinit_dev(ndev); in amd_ntb_pci_probe()
1267 amd_ntb_deinit_pci(ndev); in amd_ntb_pci_probe()
1269 kfree(ndev); in amd_ntb_pci_probe()
1276 struct amd_ntb_dev *ndev = pci_get_drvdata(pdev); in amd_ntb_pci_remove() local
1283 amd_deinit_side_info(ndev); in amd_ntb_pci_remove()
1284 ntb_peer_db_set(&ndev->ntb, BIT_ULL(ndev->db_last_bit)); in amd_ntb_pci_remove()
1285 ntb_unregister_device(&ndev->ntb); in amd_ntb_pci_remove()
1286 ndev_deinit_debugfs(ndev); in amd_ntb_pci_remove()
1287 amd_deinit_dev(ndev); in amd_ntb_pci_remove()
1288 amd_ntb_deinit_pci(ndev); in amd_ntb_pci_remove()
1289 kfree(ndev); in amd_ntb_pci_remove()
1294 struct amd_ntb_dev *ndev = pci_get_drvdata(pdev); in amd_ntb_pci_shutdown() local
1297 ntb_link_event(&ndev->ntb); in amd_ntb_pci_shutdown()
1299 amd_deinit_side_info(ndev); in amd_ntb_pci_shutdown()
1300 ntb_peer_db_set(&ndev->ntb, BIT_ULL(ndev->db_last_bit)); in amd_ntb_pci_shutdown()
1301 ntb_unregister_device(&ndev->ntb); in amd_ntb_pci_shutdown()
1302 ndev_deinit_debugfs(ndev); in amd_ntb_pci_shutdown()
1303 amd_deinit_dev(ndev); in amd_ntb_pci_shutdown()
1304 amd_ntb_deinit_pci(ndev); in amd_ntb_pci_shutdown()
1305 kfree(ndev); in amd_ntb_pci_shutdown()