afu 30 drivers/fpga/dfl-afu-dma-region.c struct dfl_afu *afu = dfl_fpga_pdata_get_private(pdata); afu 32 drivers/fpga/dfl-afu-dma-region.c afu->dma_regions = RB_ROOT; afu 155 drivers/fpga/dfl-afu-dma-region.c struct dfl_afu *afu = dfl_fpga_pdata_get_private(pdata); afu 161 drivers/fpga/dfl-afu-dma-region.c new = &afu->dma_regions.rb_node; afu 182 drivers/fpga/dfl-afu-dma-region.c rb_insert_color(®ion->node, &afu->dma_regions); afu 197 drivers/fpga/dfl-afu-dma-region.c struct dfl_afu *afu; afu 202 drivers/fpga/dfl-afu-dma-region.c afu = dfl_fpga_pdata_get_private(pdata); afu 203 drivers/fpga/dfl-afu-dma-region.c rb_erase(®ion->node, &afu->dma_regions); afu 214 drivers/fpga/dfl-afu-dma-region.c struct dfl_afu *afu = dfl_fpga_pdata_get_private(pdata); afu 215 drivers/fpga/dfl-afu-dma-region.c struct rb_node *node = rb_first(&afu->dma_regions); afu 224 drivers/fpga/dfl-afu-dma-region.c rb_erase(node, &afu->dma_regions); afu 256 drivers/fpga/dfl-afu-dma-region.c struct dfl_afu *afu = dfl_fpga_pdata_get_private(pdata); afu 257 drivers/fpga/dfl-afu-dma-region.c struct rb_node *node = afu->dma_regions.rb_node; afu 604 drivers/fpga/dfl-afu-main.c struct dfl_afu *afu; afu 616 drivers/fpga/dfl-afu-main.c afu = dfl_fpga_pdata_get_private(pdata); afu 618 drivers/fpga/dfl-afu-main.c info.num_regions = afu->num_regions; afu 619 drivers/fpga/dfl-afu-main.c info.num_umsgs = afu->num_umsgs; afu 796 drivers/fpga/dfl-afu-main.c struct dfl_afu *afu; afu 798 drivers/fpga/dfl-afu-main.c afu = devm_kzalloc(&pdev->dev, sizeof(*afu), GFP_KERNEL); afu 799 drivers/fpga/dfl-afu-main.c if (!afu) afu 802 drivers/fpga/dfl-afu-main.c afu->pdata = pdata; afu 805 drivers/fpga/dfl-afu-main.c dfl_fpga_pdata_set_private(pdata, afu); afu 816 drivers/fpga/dfl-afu-main.c struct dfl_afu *afu; afu 819 drivers/fpga/dfl-afu-main.c afu = dfl_fpga_pdata_get_private(pdata); afu 19 drivers/fpga/dfl-afu-region.c struct dfl_afu *afu = dfl_fpga_pdata_get_private(pdata); afu 21 drivers/fpga/dfl-afu-region.c INIT_LIST_HEAD(&afu->regions); afu 24 drivers/fpga/dfl-afu-region.c #define for_each_region(region, afu) \ afu 25 drivers/fpga/dfl-afu-region.c list_for_each_entry((region), &(afu)->regions, node) afu 27 drivers/fpga/dfl-afu-region.c static struct dfl_afu_mmio_region *get_region_by_index(struct dfl_afu *afu, afu 32 drivers/fpga/dfl-afu-region.c for_each_region(region, afu) afu 53 drivers/fpga/dfl-afu-region.c struct dfl_afu *afu; afu 67 drivers/fpga/dfl-afu-region.c afu = dfl_fpga_pdata_get_private(pdata); afu 70 drivers/fpga/dfl-afu-region.c if (get_region_by_index(afu, region_index)) { afu 77 drivers/fpga/dfl-afu-region.c region->offset = afu->region_cur_offset; afu 78 drivers/fpga/dfl-afu-region.c list_add(®ion->node, &afu->regions); afu 80 drivers/fpga/dfl-afu-region.c afu->region_cur_offset += region_size; afu 81 drivers/fpga/dfl-afu-region.c afu->num_regions++; afu 97 drivers/fpga/dfl-afu-region.c struct dfl_afu *afu = dfl_fpga_pdata_get_private(pdata); afu 100 drivers/fpga/dfl-afu-region.c list_for_each_entry_safe(region, tmp, &afu->regions, node) afu 117 drivers/fpga/dfl-afu-region.c struct dfl_afu *afu; afu 121 drivers/fpga/dfl-afu-region.c afu = dfl_fpga_pdata_get_private(pdata); afu 122 drivers/fpga/dfl-afu-region.c region = get_region_by_index(afu, region_index); afu 151 drivers/fpga/dfl-afu-region.c struct dfl_afu *afu; afu 155 drivers/fpga/dfl-afu-region.c afu = dfl_fpga_pdata_get_private(pdata); afu 156 drivers/fpga/dfl-afu-region.c for_each_region(region, afu) afu 102 drivers/misc/cxl/api.c struct cxl_afu *afu; afu 106 drivers/misc/cxl/api.c afu = cxl_pci_to_afu(dev); afu 107 drivers/misc/cxl/api.c if (IS_ERR(afu)) afu 108 drivers/misc/cxl/api.c return ERR_CAST(afu); afu 117 drivers/misc/cxl/api.c rc = cxl_context_init(ctx, afu, false); afu 188 drivers/misc/cxl/api.c num = ctx->afu->pp_irqs; afu 199 drivers/misc/cxl/api.c cxl_map_irq(ctx->afu->adapter, hwirq, cxl_ops->psl_interrupt, ctx, "psl"); afu 226 drivers/misc/cxl/api.c cxl_ops->release_irq_ranges(&ctx->irqs, ctx->afu->adapter); afu 242 drivers/misc/cxl/api.c return cxl_map_irq(ctx->afu->adapter, hwirq, handler, cookie, name); afu 281 drivers/misc/cxl/api.c rc = cxl_adapter_context_get(ctx->afu->adapter); afu 315 drivers/misc/cxl/api.c cxl_adapter_context_put(ctx->afu->adapter); afu 466 drivers/misc/cxl/api.c work->num_interrupts = ctx->afu->pp_irqs; afu 467 drivers/misc/cxl/api.c else if ((work->num_interrupts < ctx->afu->pp_irqs) || afu 468 drivers/misc/cxl/api.c (work->num_interrupts > ctx->afu->irqs_max)) { afu 505 drivers/misc/cxl/api.c struct cxl_afu *afu = ctx->afu; afu 508 drivers/misc/cxl/api.c rc = cxl_ops->afu_reset(afu); afu 512 drivers/misc/cxl/api.c return cxl_ops->afu_check_and_enable(afu); afu 516 drivers/misc/cxl/api.c void cxl_perst_reloads_same_image(struct cxl_afu *afu, afu 519 drivers/misc/cxl/api.c afu->adapter->perst_same_image = perst_reloads_same_image; afu 525 drivers/misc/cxl/api.c struct cxl_afu *afu = cxl_pci_to_afu(dev); afu 526 drivers/misc/cxl/api.c if (IS_ERR(afu)) afu 529 drivers/misc/cxl/api.c return cxl_ops->read_adapter_vpd(afu->adapter, buf, count); afu 54 drivers/misc/cxl/base.c struct cxl_afu *cxl_afu_get(struct cxl_afu *afu) afu 56 drivers/misc/cxl/base.c return (get_device(&afu->dev) == NULL) ? NULL : afu; afu 60 drivers/misc/cxl/base.c void cxl_afu_put(struct cxl_afu *afu) afu 62 drivers/misc/cxl/base.c put_device(&afu->dev); afu 35 drivers/misc/cxl/context.c int cxl_context_init(struct cxl_context *ctx, struct cxl_afu *afu, bool master) afu 39 drivers/misc/cxl/context.c ctx->afu = afu; afu 92 drivers/misc/cxl/context.c mutex_lock(&afu->contexts_lock); afu 94 drivers/misc/cxl/context.c i = idr_alloc(&ctx->afu->contexts_idr, ctx, 0, afu 95 drivers/misc/cxl/context.c ctx->afu->num_procs, GFP_NOWAIT); afu 97 drivers/misc/cxl/context.c mutex_unlock(&afu->contexts_lock); afu 103 drivers/misc/cxl/context.c ctx->elem = &ctx->afu->native->spa[i]; afu 114 drivers/misc/cxl/context.c cxl_afu_get(afu); afu 138 drivers/misc/cxl/context.c if (ctx->afu->current_mode == CXL_MODE_DEDICATED) { afu 139 drivers/misc/cxl/context.c area = ctx->afu->psn_phys; afu 140 drivers/misc/cxl/context.c if (offset >= ctx->afu->adapter->ps_size) afu 187 drivers/misc/cxl/context.c if (ctx->afu->current_mode == CXL_MODE_DEDICATED) { afu 188 drivers/misc/cxl/context.c if (start + len > ctx->afu->adapter->ps_size) afu 196 drivers/misc/cxl/context.c if (ctx->master && !ctx->afu->psa) { afu 202 drivers/misc/cxl/context.c if (!ctx->afu->enabled) afu 210 drivers/misc/cxl/context.c if ((ctx->master && !ctx->afu->psa) || (!ctx->afu->pp_psa)) { afu 216 drivers/misc/cxl/context.c if (!ctx->afu->enabled) afu 249 drivers/misc/cxl/context.c cxl_ops->link_ok(ctx->afu->adapter, ctx->afu)); afu 265 drivers/misc/cxl/context.c cxl_adapter_context_put(ctx->afu->adapter); afu 297 drivers/misc/cxl/context.c void cxl_context_detach_all(struct cxl_afu *afu) afu 302 drivers/misc/cxl/context.c mutex_lock(&afu->contexts_lock); afu 303 drivers/misc/cxl/context.c idr_for_each_entry(&afu->contexts_idr, ctx, tmp) { afu 321 drivers/misc/cxl/context.c mutex_unlock(&afu->contexts_lock); afu 337 drivers/misc/cxl/context.c cxl_afu_put(ctx->afu); afu 346 drivers/misc/cxl/context.c mutex_lock(&ctx->afu->contexts_lock); afu 347 drivers/misc/cxl/context.c idr_remove(&ctx->afu->contexts_idr, ctx->pe); afu 348 drivers/misc/cxl/context.c mutex_unlock(&ctx->afu->contexts_lock); afu 539 drivers/misc/cxl/cxl.h struct cxl_afu *afu; afu 628 drivers/misc/cxl/cxl.h int (*afu_regs_init)(struct cxl_afu *afu); afu 629 drivers/misc/cxl/cxl.h int (*sanitise_afu_regs)(struct cxl_afu *afu); afu 630 drivers/misc/cxl/cxl.h int (*register_serr_irq)(struct cxl_afu *afu); afu 631 drivers/misc/cxl/cxl.h void (*release_serr_irq)(struct cxl_afu *afu); afu 633 drivers/misc/cxl/cxl.h irqreturn_t (*fail_irq)(struct cxl_afu *afu, struct cxl_irq_info *irq_info); afu 634 drivers/misc/cxl/cxl.h int (*activate_dedicated_process)(struct cxl_afu *afu); afu 639 drivers/misc/cxl/cxl.h void (*debugfs_add_afu_regs)(struct cxl_afu *afu, struct dentry *dir); afu 680 drivers/misc/cxl/cxl.h struct cxl_afu *afu[CXL_MAX_SLICES]; afu 763 drivers/misc/cxl/cxl.h static inline bool cxl_adapter_link_ok(struct cxl *cxl, struct cxl_afu *afu) afu 794 drivers/misc/cxl/cxl.h static inline void __iomem *_cxl_p1n_addr(struct cxl_afu *afu, cxl_p1n_reg_t reg) afu 797 drivers/misc/cxl/cxl.h return afu->native->p1n_mmio + cxl_reg_off(reg); afu 800 drivers/misc/cxl/cxl.h static inline void cxl_p1n_write(struct cxl_afu *afu, cxl_p1n_reg_t reg, u64 val) afu 802 drivers/misc/cxl/cxl.h if (likely(cxl_adapter_link_ok(afu->adapter, afu))) afu 803 drivers/misc/cxl/cxl.h out_be64(_cxl_p1n_addr(afu, reg), val); afu 806 drivers/misc/cxl/cxl.h static inline u64 cxl_p1n_read(struct cxl_afu *afu, cxl_p1n_reg_t reg) afu 808 drivers/misc/cxl/cxl.h if (likely(cxl_adapter_link_ok(afu->adapter, afu))) afu 809 drivers/misc/cxl/cxl.h return in_be64(_cxl_p1n_addr(afu, reg)); afu 814 drivers/misc/cxl/cxl.h static inline void __iomem *_cxl_p2n_addr(struct cxl_afu *afu, cxl_p2n_reg_t reg) afu 816 drivers/misc/cxl/cxl.h return afu->p2n_mmio + cxl_reg_off(reg); afu 819 drivers/misc/cxl/cxl.h static inline void cxl_p2n_write(struct cxl_afu *afu, cxl_p2n_reg_t reg, u64 val) afu 821 drivers/misc/cxl/cxl.h if (likely(cxl_adapter_link_ok(afu->adapter, afu))) afu 822 drivers/misc/cxl/cxl.h out_be64(_cxl_p2n_addr(afu, reg), val); afu 825 drivers/misc/cxl/cxl.h static inline u64 cxl_p2n_read(struct cxl_afu *afu, cxl_p2n_reg_t reg) afu 827 drivers/misc/cxl/cxl.h if (likely(cxl_adapter_link_ok(afu->adapter, afu))) afu 828 drivers/misc/cxl/cxl.h return in_be64(_cxl_p2n_addr(afu, reg)); afu 849 drivers/misc/cxl/cxl.h ssize_t cxl_pci_afu_read_err_buffer(struct cxl_afu *afu, char *buf, afu 863 drivers/misc/cxl/cxl.h void cxl_release_spa(struct cxl_afu *afu); afu 869 drivers/misc/cxl/cxl.h int cxl_register_afu(struct cxl_afu *afu); afu 870 drivers/misc/cxl/cxl.h int cxl_chardev_d_afu_add(struct cxl_afu *afu); afu 871 drivers/misc/cxl/cxl.h int cxl_chardev_m_afu_add(struct cxl_afu *afu); afu 872 drivers/misc/cxl/cxl.h int cxl_chardev_s_afu_add(struct cxl_afu *afu); afu 873 drivers/misc/cxl/cxl.h void cxl_chardev_afu_remove(struct cxl_afu *afu); afu 875 drivers/misc/cxl/cxl.h void cxl_context_detach_all(struct cxl_afu *afu); afu 881 drivers/misc/cxl/cxl.h int cxl_sysfs_afu_add(struct cxl_afu *afu); afu 882 drivers/misc/cxl/cxl.h void cxl_sysfs_afu_remove(struct cxl_afu *afu); afu 883 drivers/misc/cxl/cxl.h int cxl_sysfs_afu_m_add(struct cxl_afu *afu); afu 884 drivers/misc/cxl/cxl.h void cxl_sysfs_afu_m_remove(struct cxl_afu *afu); afu 888 drivers/misc/cxl/cxl.h int cxl_afu_select_best_mode(struct cxl_afu *afu); afu 890 drivers/misc/cxl/cxl.h int cxl_native_register_psl_irq(struct cxl_afu *afu); afu 891 drivers/misc/cxl/cxl.h void cxl_native_release_psl_irq(struct cxl_afu *afu); afu 894 drivers/misc/cxl/cxl.h int cxl_native_register_serr_irq(struct cxl_afu *afu); afu 895 drivers/misc/cxl/cxl.h void cxl_native_release_serr_irq(struct cxl_afu *afu); afu 902 drivers/misc/cxl/cxl.h int cxl_activate_dedicated_process_psl9(struct cxl_afu *afu); afu 903 drivers/misc/cxl/cxl.h int cxl_activate_dedicated_process_psl8(struct cxl_afu *afu); afu 915 drivers/misc/cxl/cxl.h void cxl_debugfs_afu_add(struct cxl_afu *afu); afu 916 drivers/misc/cxl/cxl.h void cxl_debugfs_afu_remove(struct cxl_afu *afu); afu 919 drivers/misc/cxl/cxl.h void cxl_debugfs_add_afu_regs_psl9(struct cxl_afu *afu, struct dentry *dir); afu 920 drivers/misc/cxl/cxl.h void cxl_debugfs_add_afu_regs_psl8(struct cxl_afu *afu, struct dentry *dir); afu 940 drivers/misc/cxl/cxl.h static inline void cxl_debugfs_afu_add(struct cxl_afu *afu) afu 944 drivers/misc/cxl/cxl.h static inline void cxl_debugfs_afu_remove(struct cxl_afu *afu) afu 958 drivers/misc/cxl/cxl.h static inline void cxl_debugfs_add_afu_regs_psl9(struct cxl_afu *afu, struct dentry *dir) afu 962 drivers/misc/cxl/cxl.h static inline void cxl_debugfs_add_afu_regs_psl8(struct cxl_afu *afu, struct dentry *dir) afu 979 drivers/misc/cxl/cxl.h int cxl_context_init(struct cxl_context *ctx, struct cxl_afu *afu, bool master); afu 1012 drivers/misc/cxl/cxl.h irqreturn_t cxl_fail_irq_psl(struct cxl_afu *afu, struct cxl_irq_info *irq_info); afu 1017 drivers/misc/cxl/cxl.h int cxl_check_error(struct cxl_afu *afu); afu 1018 drivers/misc/cxl/cxl.h int cxl_afu_slbia(struct cxl_afu *afu); afu 1020 drivers/misc/cxl/cxl.h int cxl_afu_disable(struct cxl_afu *afu); afu 1021 drivers/misc/cxl/cxl.h int cxl_psl_purge(struct cxl_afu *afu); afu 1032 drivers/misc/cxl/cxl.h int cxl_pci_vphb_add(struct cxl_afu *afu); afu 1033 drivers/misc/cxl/cxl.h void cxl_pci_vphb_remove(struct cxl_afu *afu); afu 1053 drivers/misc/cxl/cxl.h ssize_t cxl_guest_read_afu_vpd(struct cxl_afu *afu, void *buf, size_t len); afu 1055 drivers/misc/cxl/cxl.h void cxl_guest_remove_afu(struct cxl_afu *afu); afu 1056 drivers/misc/cxl/cxl.h int cxl_of_read_afu_handle(struct cxl_afu *afu, struct device_node *afu_np); afu 1057 drivers/misc/cxl/cxl.h int cxl_of_read_afu_properties(struct cxl_afu *afu, struct device_node *afu_np); afu 1084 drivers/misc/cxl/cxl.h bool (*link_ok)(struct cxl *cxl, struct cxl_afu *afu); afu 1086 drivers/misc/cxl/cxl.h ssize_t (*afu_read_err_buffer)(struct cxl_afu *afu, char *buf, afu 1088 drivers/misc/cxl/cxl.h int (*afu_check_and_enable)(struct cxl_afu *afu); afu 1089 drivers/misc/cxl/cxl.h int (*afu_activate_mode)(struct cxl_afu *afu, int mode); afu 1090 drivers/misc/cxl/cxl.h int (*afu_deactivate_mode)(struct cxl_afu *afu, int mode); afu 1091 drivers/misc/cxl/cxl.h int (*afu_reset)(struct cxl_afu *afu); afu 1092 drivers/misc/cxl/cxl.h int (*afu_cr_read8)(struct cxl_afu *afu, int cr_idx, u64 offset, u8 *val); afu 1093 drivers/misc/cxl/cxl.h int (*afu_cr_read16)(struct cxl_afu *afu, int cr_idx, u64 offset, u16 *val); afu 1094 drivers/misc/cxl/cxl.h int (*afu_cr_read32)(struct cxl_afu *afu, int cr_idx, u64 offset, u32 *val); afu 1095 drivers/misc/cxl/cxl.h int (*afu_cr_read64)(struct cxl_afu *afu, int cr_idx, u64 offset, u64 *val); afu 1096 drivers/misc/cxl/cxl.h int (*afu_cr_write8)(struct cxl_afu *afu, int cr_idx, u64 offset, u8 val); afu 1097 drivers/misc/cxl/cxl.h int (*afu_cr_write16)(struct cxl_afu *afu, int cr_idx, u64 offset, u16 val); afu 1098 drivers/misc/cxl/cxl.h int (*afu_cr_write32)(struct cxl_afu *afu, int cr_idx, u64 offset, u32 val); afu 1109 drivers/misc/cxl/cxl.h void cxl_afu_decode_psl_serr(struct cxl_afu *afu, u64 serr); afu 80 drivers/misc/cxl/debugfs.c void cxl_debugfs_add_afu_regs_psl9(struct cxl_afu *afu, struct dentry *dir) afu 82 drivers/misc/cxl/debugfs.c debugfs_create_io_x64("serr", S_IRUSR, dir, _cxl_p1n_addr(afu, CXL_PSL_SERR_An)); afu 85 drivers/misc/cxl/debugfs.c void cxl_debugfs_add_afu_regs_psl8(struct cxl_afu *afu, struct dentry *dir) afu 87 drivers/misc/cxl/debugfs.c debugfs_create_io_x64("sstp0", S_IRUSR, dir, _cxl_p2n_addr(afu, CXL_SSTP0_An)); afu 88 drivers/misc/cxl/debugfs.c debugfs_create_io_x64("sstp1", S_IRUSR, dir, _cxl_p2n_addr(afu, CXL_SSTP1_An)); afu 90 drivers/misc/cxl/debugfs.c debugfs_create_io_x64("fir", S_IRUSR, dir, _cxl_p1n_addr(afu, CXL_PSL_FIR_SLICE_An)); afu 91 drivers/misc/cxl/debugfs.c debugfs_create_io_x64("serr", S_IRUSR, dir, _cxl_p1n_addr(afu, CXL_PSL_SERR_An)); afu 92 drivers/misc/cxl/debugfs.c debugfs_create_io_x64("afu_debug", S_IRUSR, dir, _cxl_p1n_addr(afu, CXL_AFU_DEBUG_An)); afu 93 drivers/misc/cxl/debugfs.c debugfs_create_io_x64("trace", S_IRUSR | S_IWUSR, dir, _cxl_p1n_addr(afu, CXL_PSL_SLICE_TRACE)); afu 96 drivers/misc/cxl/debugfs.c void cxl_debugfs_afu_add(struct cxl_afu *afu) afu 101 drivers/misc/cxl/debugfs.c if (!afu->adapter->debugfs) afu 104 drivers/misc/cxl/debugfs.c snprintf(buf, 32, "psl%i.%i", afu->adapter->adapter_num, afu->slice); afu 105 drivers/misc/cxl/debugfs.c dir = debugfs_create_dir(buf, afu->adapter->debugfs); afu 106 drivers/misc/cxl/debugfs.c afu->debugfs = dir; afu 108 drivers/misc/cxl/debugfs.c debugfs_create_io_x64("sr", S_IRUSR, dir, _cxl_p1n_addr(afu, CXL_PSL_SR_An)); afu 109 drivers/misc/cxl/debugfs.c debugfs_create_io_x64("dsisr", S_IRUSR, dir, _cxl_p2n_addr(afu, CXL_PSL_DSISR_An)); afu 110 drivers/misc/cxl/debugfs.c debugfs_create_io_x64("dar", S_IRUSR, dir, _cxl_p2n_addr(afu, CXL_PSL_DAR_An)); afu 112 drivers/misc/cxl/debugfs.c debugfs_create_io_x64("err_status", S_IRUSR, dir, _cxl_p2n_addr(afu, CXL_PSL_ErrStat_An)); afu 114 drivers/misc/cxl/debugfs.c if (afu->adapter->native->sl_ops->debugfs_add_afu_regs) afu 115 drivers/misc/cxl/debugfs.c afu->adapter->native->sl_ops->debugfs_add_afu_regs(afu, dir); afu 118 drivers/misc/cxl/debugfs.c void cxl_debugfs_afu_remove(struct cxl_afu *afu) afu 120 drivers/misc/cxl/debugfs.c debugfs_remove_recursive(afu->debugfs); afu 237 drivers/misc/cxl/fault.c if (cxl_p2n_read(ctx->afu, CXL_PSL_DSISR_An) != dsisr || afu 238 drivers/misc/cxl/fault.c cxl_p2n_read(ctx->afu, CXL_PSL_DAR_An) != dar || afu 239 drivers/misc/cxl/fault.c cxl_p2n_read(ctx->afu, CXL_PSL_PEHandle_An) != ctx->pe) { afu 244 drivers/misc/cxl/fault.c dev_notice(&ctx->afu->dev, "cxl_handle_fault: Translation fault regs changed\n"); afu 346 drivers/misc/cxl/fault.c switch (ctx->afu->prefault_mode) { afu 28 drivers/misc/cxl/file.c #define CXL_AFU_MINOR_D(afu) (CXL_CARD_MINOR(afu->adapter) + 1 + (3 * afu->slice)) afu 29 drivers/misc/cxl/file.c #define CXL_AFU_MINOR_M(afu) (CXL_AFU_MINOR_D(afu) + 1) afu 30 drivers/misc/cxl/file.c #define CXL_AFU_MINOR_S(afu) (CXL_AFU_MINOR_D(afu) + 2) afu 31 drivers/misc/cxl/file.c #define CXL_AFU_MKDEV_D(afu) MKDEV(MAJOR(cxl_dev), CXL_AFU_MINOR_D(afu)) afu 32 drivers/misc/cxl/file.c #define CXL_AFU_MKDEV_M(afu) MKDEV(MAJOR(cxl_dev), CXL_AFU_MINOR_M(afu)) afu 33 drivers/misc/cxl/file.c #define CXL_AFU_MKDEV_S(afu) MKDEV(MAJOR(cxl_dev), CXL_AFU_MINOR_S(afu)) afu 46 drivers/misc/cxl/file.c struct cxl_afu *afu; afu 61 drivers/misc/cxl/file.c if (!(afu = adapter->afu[slice])) { afu 71 drivers/misc/cxl/file.c cxl_afu_get(afu); afu 74 drivers/misc/cxl/file.c if (!afu->current_mode) afu 77 drivers/misc/cxl/file.c if (!cxl_ops->link_ok(adapter, afu)) { afu 87 drivers/misc/cxl/file.c rc = cxl_context_init(ctx, afu, master); afu 101 drivers/misc/cxl/file.c cxl_afu_put(afu); afu 179 drivers/misc/cxl/file.c work.num_interrupts = ctx->afu->pp_irqs; afu 180 drivers/misc/cxl/file.c else if ((work.num_interrupts < ctx->afu->pp_irqs) || afu 181 drivers/misc/cxl/file.c (work.num_interrupts > ctx->afu->irqs_max)) { afu 201 drivers/misc/cxl/file.c rc = cxl_adapter_context_get(ctx->afu->adapter); afu 256 drivers/misc/cxl/file.c cxl_adapter_context_put(ctx->afu->adapter); afu 296 drivers/misc/cxl/file.c afuid.card_id = ctx->afu->adapter->adapter_num; afu 297 drivers/misc/cxl/file.c afuid.afu_offset = ctx->afu->slice; afu 298 drivers/misc/cxl/file.c afuid.afu_mode = ctx->afu->current_mode; afu 301 drivers/misc/cxl/file.c if (ctx->afu->current_mode == CXL_MODE_DIRECTED && !ctx->master) afu 317 drivers/misc/cxl/file.c if (!cxl_ops->link_ok(ctx->afu->adapter, ctx->afu)) afu 347 drivers/misc/cxl/file.c if (!cxl_ops->link_ok(ctx->afu->adapter, ctx->afu)) afu 434 drivers/misc/cxl/file.c if (!cxl_ops->link_ok(ctx->afu->adapter, ctx->afu)) afu 447 drivers/misc/cxl/file.c if (!cxl_ops->link_ok(ctx->afu->adapter, ctx->afu)) { afu 564 drivers/misc/cxl/file.c static int cxl_add_chardev(struct cxl_afu *afu, dev_t devt, struct cdev *cdev, afu 573 drivers/misc/cxl/file.c dev_err(&afu->dev, "Unable to add %s chardev: %i\n", desc, rc); afu 577 drivers/misc/cxl/file.c dev = device_create(cxl_class, &afu->dev, devt, afu, afu 578 drivers/misc/cxl/file.c "afu%i.%i%s", afu->adapter->adapter_num, afu->slice, postfix); afu 580 drivers/misc/cxl/file.c dev_err(&afu->dev, "Unable to create %s chardev in sysfs: %i\n", desc, rc); afu 593 drivers/misc/cxl/file.c int cxl_chardev_d_afu_add(struct cxl_afu *afu) afu 595 drivers/misc/cxl/file.c return cxl_add_chardev(afu, CXL_AFU_MKDEV_D(afu), &afu->afu_cdev_d, afu 596 drivers/misc/cxl/file.c &afu->chardev_d, "d", "dedicated", afu 600 drivers/misc/cxl/file.c int cxl_chardev_m_afu_add(struct cxl_afu *afu) afu 602 drivers/misc/cxl/file.c return cxl_add_chardev(afu, CXL_AFU_MKDEV_M(afu), &afu->afu_cdev_m, afu 603 drivers/misc/cxl/file.c &afu->chardev_m, "m", "master", afu 607 drivers/misc/cxl/file.c int cxl_chardev_s_afu_add(struct cxl_afu *afu) afu 609 drivers/misc/cxl/file.c return cxl_add_chardev(afu, CXL_AFU_MKDEV_S(afu), &afu->afu_cdev_s, afu 610 drivers/misc/cxl/file.c &afu->chardev_s, "s", "shared", afu 614 drivers/misc/cxl/file.c void cxl_chardev_afu_remove(struct cxl_afu *afu) afu 616 drivers/misc/cxl/file.c if (afu->chardev_d) { afu 617 drivers/misc/cxl/file.c cdev_del(&afu->afu_cdev_d); afu 618 drivers/misc/cxl/file.c device_unregister(afu->chardev_d); afu 619 drivers/misc/cxl/file.c afu->chardev_d = NULL; afu 621 drivers/misc/cxl/file.c if (afu->chardev_m) { afu 622 drivers/misc/cxl/file.c cdev_del(&afu->afu_cdev_m); afu 623 drivers/misc/cxl/file.c device_unregister(afu->chardev_m); afu 624 drivers/misc/cxl/file.c afu->chardev_m = NULL; afu 626 drivers/misc/cxl/file.c if (afu->chardev_s) { afu 627 drivers/misc/cxl/file.c cdev_del(&afu->afu_cdev_s); afu 628 drivers/misc/cxl/file.c device_unregister(afu->chardev_s); afu 629 drivers/misc/cxl/file.c afu->chardev_s = NULL; afu 633 drivers/misc/cxl/file.c int cxl_register_afu(struct cxl_afu *afu) afu 635 drivers/misc/cxl/file.c afu->dev.class = cxl_class; afu 637 drivers/misc/cxl/file.c return device_register(&afu->dev); afu 326 drivers/misc/cxl/flash.c int afu; afu 348 drivers/misc/cxl/flash.c for (afu = 0; afu < adapter->slices; afu++) afu 349 drivers/misc/cxl/flash.c cxl_guest_remove_afu(adapter->afu[afu]); afu 18 drivers/misc/cxl/guest.c static void pci_error_handlers(struct cxl_afu *afu, afu 24 drivers/misc/cxl/guest.c if (afu->phb == NULL) afu 27 drivers/misc/cxl/guest.c list_for_each_entry(afu_dev, &afu->phb->bus->devices, bus_list) { afu 59 drivers/misc/cxl/guest.c dev_crit(&ctx->afu->dev, "PSL ERROR STATUS: 0x%.16llx\n", errstat); afu 64 drivers/misc/cxl/guest.c static ssize_t guest_collect_vpd(struct cxl *adapter, struct cxl_afu *afu, afu 114 drivers/misc/cxl/guest.c rc = cxl_h_collect_vpd(afu->guest->handle, 0, afu 152 drivers/misc/cxl/guest.c return cxl_h_collect_int_info(ctx->afu->guest->handle, ctx->process_token, info); afu 172 drivers/misc/cxl/guest.c static int afu_read_error_state(struct cxl_afu *afu, int *state_out) afu 177 drivers/misc/cxl/guest.c if (!afu) afu 180 drivers/misc/cxl/guest.c rc = cxl_h_read_error_state(afu->guest->handle, &state); afu 193 drivers/misc/cxl/guest.c struct cxl_afu *afu = data; afu 197 drivers/misc/cxl/guest.c rc = cxl_h_get_fn_error_interrupt(afu->guest->handle, &serr); afu 199 drivers/misc/cxl/guest.c dev_crit(&afu->dev, "Couldn't read PSL_SERR_An: %d\n", rc); afu 202 drivers/misc/cxl/guest.c afu_error = cxl_p2n_read(afu, CXL_AFU_ERR_An); afu 203 drivers/misc/cxl/guest.c dsisr = cxl_p2n_read(afu, CXL_PSL_DSISR_An); afu 204 drivers/misc/cxl/guest.c cxl_afu_decode_psl_serr(afu, serr); afu 205 drivers/misc/cxl/guest.c dev_crit(&afu->dev, "AFU_ERR_An: 0x%.16llx\n", afu_error); afu 206 drivers/misc/cxl/guest.c dev_crit(&afu->dev, "PSL_DSISR_An: 0x%.16llx\n", dsisr); afu 208 drivers/misc/cxl/guest.c rc = cxl_h_ack_fn_error_interrupt(afu->guest->handle, serr); afu 210 drivers/misc/cxl/guest.c dev_crit(&afu->dev, "Couldn't ack slice error interrupt: %d\n", afu 262 drivers/misc/cxl/guest.c struct cxl_afu *afu = NULL; afu 268 drivers/misc/cxl/guest.c if ((afu = adapter->afu[i])) { afu 269 drivers/misc/cxl/guest.c pci_error_handlers(afu, CXL_ERROR_DETECTED_EVENT, afu 271 drivers/misc/cxl/guest.c cxl_context_detach_all(afu); afu 277 drivers/misc/cxl/guest.c if (!rc && (afu = adapter->afu[i])) { afu 278 drivers/misc/cxl/guest.c pci_error_handlers(afu, CXL_SLOT_RESET_EVENT, afu 280 drivers/misc/cxl/guest.c pci_error_handlers(afu, CXL_RESUME_EVENT, 0); afu 349 drivers/misc/cxl/guest.c static int guest_register_serr_irq(struct cxl_afu *afu) afu 351 drivers/misc/cxl/guest.c afu->err_irq_name = kasprintf(GFP_KERNEL, "cxl-%s-err", afu 352 drivers/misc/cxl/guest.c dev_name(&afu->dev)); afu 353 drivers/misc/cxl/guest.c if (!afu->err_irq_name) afu 356 drivers/misc/cxl/guest.c if (!(afu->serr_virq = cxl_map_irq(afu->adapter, afu->serr_hwirq, afu 357 drivers/misc/cxl/guest.c guest_slice_irq_err, afu, afu->err_irq_name))) { afu 358 drivers/misc/cxl/guest.c kfree(afu->err_irq_name); afu 359 drivers/misc/cxl/guest.c afu->err_irq_name = NULL; afu 366 drivers/misc/cxl/guest.c static void guest_release_serr_irq(struct cxl_afu *afu) afu 368 drivers/misc/cxl/guest.c cxl_unmap_irq(afu->serr_virq, afu); afu 369 drivers/misc/cxl/guest.c cxl_ops->release_one_irq(afu->adapter, afu->serr_hwirq); afu 370 drivers/misc/cxl/guest.c kfree(afu->err_irq_name); afu 375 drivers/misc/cxl/guest.c return cxl_h_control_faults(ctx->afu->guest->handle, ctx->process_token, afu 385 drivers/misc/cxl/guest.c pr_devel("Disabling AFU(%d) interrupts\n", ctx->afu->slice); afu 401 drivers/misc/cxl/guest.c pr_devel("Enabling AFU(%d) interrupts\n", ctx->afu->slice); afu 411 drivers/misc/cxl/guest.c static int _guest_afu_cr_readXX(int sz, struct cxl_afu *afu, int cr_idx, afu 418 drivers/misc/cxl/guest.c if (afu->crs_len < sz) afu 421 drivers/misc/cxl/guest.c if (unlikely(offset >= afu->crs_len)) afu 428 drivers/misc/cxl/guest.c rc = cxl_h_get_config(afu->guest->handle, cr_idx, offset, afu 455 drivers/misc/cxl/guest.c static int guest_afu_cr_read32(struct cxl_afu *afu, int cr_idx, u64 offset, afu 461 drivers/misc/cxl/guest.c rc = _guest_afu_cr_readXX(4, afu, cr_idx, offset, &val); afu 467 drivers/misc/cxl/guest.c static int guest_afu_cr_read16(struct cxl_afu *afu, int cr_idx, u64 offset, afu 473 drivers/misc/cxl/guest.c rc = _guest_afu_cr_readXX(2, afu, cr_idx, offset, &val); afu 479 drivers/misc/cxl/guest.c static int guest_afu_cr_read8(struct cxl_afu *afu, int cr_idx, u64 offset, afu 485 drivers/misc/cxl/guest.c rc = _guest_afu_cr_readXX(1, afu, cr_idx, offset, &val); afu 491 drivers/misc/cxl/guest.c static int guest_afu_cr_read64(struct cxl_afu *afu, int cr_idx, u64 offset, afu 494 drivers/misc/cxl/guest.c return _guest_afu_cr_readXX(8, afu, cr_idx, offset, out); afu 497 drivers/misc/cxl/guest.c static int guest_afu_cr_write32(struct cxl_afu *afu, int cr, u64 off, u32 in) afu 503 drivers/misc/cxl/guest.c static int guest_afu_cr_write16(struct cxl_afu *afu, int cr, u64 off, u16 in) afu 509 drivers/misc/cxl/guest.c static int guest_afu_cr_write8(struct cxl_afu *afu, int cr, u64 off, u8 in) afu 518 drivers/misc/cxl/guest.c struct cxl *adapter = ctx->afu->adapter; afu 585 drivers/misc/cxl/guest.c rc = cxl_h_attach_process(ctx->afu->guest->handle, elem, afu 588 drivers/misc/cxl/guest.c if (ctx->master || !ctx->afu->pp_psa) { afu 589 drivers/misc/cxl/guest.c ctx->psn_phys = ctx->afu->psn_phys; afu 590 drivers/misc/cxl/guest.c ctx->psn_size = ctx->afu->adapter->ps_size; afu 595 drivers/misc/cxl/guest.c if (ctx->afu->pp_psa && mmio_size && afu 596 drivers/misc/cxl/guest.c ctx->afu->pp_size == 0) { afu 605 drivers/misc/cxl/guest.c ctx->afu->pp_size = mmio_size; afu 625 drivers/misc/cxl/guest.c if (ctx->afu->current_mode == CXL_MODE_DIRECTED) afu 637 drivers/misc/cxl/guest.c if (cxl_h_detach_process(ctx->afu->guest->handle, ctx->process_token)) afu 647 drivers/misc/cxl/guest.c if (!cxl_ops->link_ok(ctx->afu->adapter, ctx->afu)) afu 650 drivers/misc/cxl/guest.c if (ctx->afu->current_mode == CXL_MODE_DIRECTED) afu 658 drivers/misc/cxl/guest.c struct cxl_afu *afu = to_cxl_afu(dev); afu 662 drivers/misc/cxl/guest.c idr_destroy(&afu->contexts_idr); afu 664 drivers/misc/cxl/guest.c kfree(afu->guest); afu 665 drivers/misc/cxl/guest.c kfree(afu); afu 668 drivers/misc/cxl/guest.c ssize_t cxl_guest_read_afu_vpd(struct cxl_afu *afu, void *buf, size_t len) afu 670 drivers/misc/cxl/guest.c return guest_collect_vpd(NULL, afu, buf, len); afu 674 drivers/misc/cxl/guest.c static ssize_t guest_afu_read_err_buffer(struct cxl_afu *afu, char *buf, afu 684 drivers/misc/cxl/guest.c rc = cxl_h_get_afu_err(afu->guest->handle, afu 700 drivers/misc/cxl/guest.c static int guest_afu_check_and_enable(struct cxl_afu *afu) afu 729 drivers/misc/cxl/guest.c static int activate_afu_directed(struct cxl_afu *afu) afu 733 drivers/misc/cxl/guest.c dev_info(&afu->dev, "Activating AFU(%d) directed mode\n", afu->slice); afu 735 drivers/misc/cxl/guest.c afu->current_mode = CXL_MODE_DIRECTED; afu 737 drivers/misc/cxl/guest.c afu->num_procs = afu->max_procs_virtualised; afu 739 drivers/misc/cxl/guest.c if ((rc = cxl_chardev_m_afu_add(afu))) afu 742 drivers/misc/cxl/guest.c if ((rc = cxl_sysfs_afu_m_add(afu))) afu 745 drivers/misc/cxl/guest.c if ((rc = cxl_chardev_s_afu_add(afu))) afu 750 drivers/misc/cxl/guest.c cxl_sysfs_afu_m_remove(afu); afu 752 drivers/misc/cxl/guest.c cxl_chardev_afu_remove(afu); afu 756 drivers/misc/cxl/guest.c static int guest_afu_activate_mode(struct cxl_afu *afu, int mode) afu 760 drivers/misc/cxl/guest.c if (!(mode & afu->modes_supported)) afu 764 drivers/misc/cxl/guest.c return activate_afu_directed(afu); afu 767 drivers/misc/cxl/guest.c dev_err(&afu->dev, "Dedicated mode not supported\n"); afu 772 drivers/misc/cxl/guest.c static int deactivate_afu_directed(struct cxl_afu *afu) afu 774 drivers/misc/cxl/guest.c dev_info(&afu->dev, "Deactivating AFU(%d) directed mode\n", afu->slice); afu 776 drivers/misc/cxl/guest.c afu->current_mode = 0; afu 777 drivers/misc/cxl/guest.c afu->num_procs = 0; afu 779 drivers/misc/cxl/guest.c cxl_sysfs_afu_m_remove(afu); afu 780 drivers/misc/cxl/guest.c cxl_chardev_afu_remove(afu); afu 782 drivers/misc/cxl/guest.c cxl_ops->afu_reset(afu); afu 787 drivers/misc/cxl/guest.c static int guest_afu_deactivate_mode(struct cxl_afu *afu, int mode) afu 791 drivers/misc/cxl/guest.c if (!(mode & afu->modes_supported)) afu 795 drivers/misc/cxl/guest.c return deactivate_afu_directed(afu); afu 799 drivers/misc/cxl/guest.c static int guest_afu_reset(struct cxl_afu *afu) afu 801 drivers/misc/cxl/guest.c pr_devel("AFU(%d) reset request\n", afu->slice); afu 802 drivers/misc/cxl/guest.c return cxl_h_reset_afu(afu->guest->handle); afu 805 drivers/misc/cxl/guest.c static int guest_map_slice_regs(struct cxl_afu *afu) afu 807 drivers/misc/cxl/guest.c if (!(afu->p2n_mmio = ioremap(afu->guest->p2n_phys, afu->guest->p2n_size))) { afu 808 drivers/misc/cxl/guest.c dev_err(&afu->dev, "Error mapping AFU(%d) MMIO regions\n", afu 809 drivers/misc/cxl/guest.c afu->slice); afu 815 drivers/misc/cxl/guest.c static void guest_unmap_slice_regs(struct cxl_afu *afu) afu 817 drivers/misc/cxl/guest.c if (afu->p2n_mmio) afu 818 drivers/misc/cxl/guest.c iounmap(afu->p2n_mmio); afu 821 drivers/misc/cxl/guest.c static int afu_update_state(struct cxl_afu *afu) afu 825 drivers/misc/cxl/guest.c rc = afu_read_error_state(afu, &cur_state); afu 829 drivers/misc/cxl/guest.c if (afu->guest->previous_state == cur_state) afu 832 drivers/misc/cxl/guest.c pr_devel("AFU(%d) update state to %#x\n", afu->slice, cur_state); afu 836 drivers/misc/cxl/guest.c afu->guest->previous_state = cur_state; afu 840 drivers/misc/cxl/guest.c pci_error_handlers(afu, CXL_ERROR_DETECTED_EVENT, afu 843 drivers/misc/cxl/guest.c cxl_context_detach_all(afu); afu 844 drivers/misc/cxl/guest.c if ((rc = cxl_ops->afu_reset(afu))) afu 847 drivers/misc/cxl/guest.c rc = afu_read_error_state(afu, &cur_state); afu 849 drivers/misc/cxl/guest.c pci_error_handlers(afu, CXL_SLOT_RESET_EVENT, afu 851 drivers/misc/cxl/guest.c pci_error_handlers(afu, CXL_RESUME_EVENT, 0); afu 853 drivers/misc/cxl/guest.c afu->guest->previous_state = 0; afu 857 drivers/misc/cxl/guest.c afu->guest->previous_state = cur_state; afu 861 drivers/misc/cxl/guest.c dev_err(&afu->dev, "AFU is in permanent error state\n"); afu 862 drivers/misc/cxl/guest.c pci_error_handlers(afu, CXL_ERROR_DETECTED_EVENT, afu 864 drivers/misc/cxl/guest.c afu->guest->previous_state = cur_state; afu 869 drivers/misc/cxl/guest.c afu->slice, cur_state); afu 890 drivers/misc/cxl/guest.c static bool guest_link_ok(struct cxl *cxl, struct cxl_afu *afu) afu 894 drivers/misc/cxl/guest.c if (afu && (!afu_read_error_state(afu, &state))) { afu 902 drivers/misc/cxl/guest.c static int afu_properties_look_ok(struct cxl_afu *afu) afu 904 drivers/misc/cxl/guest.c if (afu->pp_irqs < 0) { afu 905 drivers/misc/cxl/guest.c dev_err(&afu->dev, "Unexpected per-process minimum interrupt value\n"); afu 909 drivers/misc/cxl/guest.c if (afu->max_procs_virtualised < 1) { afu 910 drivers/misc/cxl/guest.c dev_err(&afu->dev, "Unexpected max number of processes virtualised value\n"); afu 919 drivers/misc/cxl/guest.c struct cxl_afu *afu; afu 924 drivers/misc/cxl/guest.c if (!(afu = cxl_alloc_afu(adapter, slice))) afu 927 drivers/misc/cxl/guest.c if (!(afu->guest = kzalloc(sizeof(struct cxl_afu_guest), GFP_KERNEL))) { afu 928 drivers/misc/cxl/guest.c kfree(afu); afu 932 drivers/misc/cxl/guest.c if ((rc = dev_set_name(&afu->dev, "afu%i.%i", afu 939 drivers/misc/cxl/guest.c if ((rc = cxl_of_read_afu_handle(afu, afu_np))) afu 942 drivers/misc/cxl/guest.c if ((rc = cxl_ops->afu_reset(afu))) afu 945 drivers/misc/cxl/guest.c if ((rc = cxl_of_read_afu_properties(afu, afu_np))) afu 948 drivers/misc/cxl/guest.c if ((rc = afu_properties_look_ok(afu))) afu 951 drivers/misc/cxl/guest.c if ((rc = guest_map_slice_regs(afu))) afu 954 drivers/misc/cxl/guest.c if ((rc = guest_register_serr_irq(afu))) afu 961 drivers/misc/cxl/guest.c if ((rc = cxl_register_afu(afu))) afu 964 drivers/misc/cxl/guest.c if ((rc = cxl_sysfs_afu_add(afu))) afu 975 drivers/misc/cxl/guest.c if (afu->max_procs_virtualised == 1) afu 976 drivers/misc/cxl/guest.c afu->modes_supported = CXL_MODE_DEDICATED; afu 978 drivers/misc/cxl/guest.c afu->modes_supported = CXL_MODE_DIRECTED; afu 980 drivers/misc/cxl/guest.c if ((rc = cxl_afu_select_best_mode(afu))) afu 983 drivers/misc/cxl/guest.c adapter->afu[afu->slice] = afu; afu 985 drivers/misc/cxl/guest.c afu->enabled = true; afu 991 drivers/misc/cxl/guest.c afu->guest->parent = afu; afu 992 drivers/misc/cxl/guest.c afu->guest->handle_err = true; afu 993 drivers/misc/cxl/guest.c INIT_DELAYED_WORK(&afu->guest->work_err, afu_handle_errstate); afu 994 drivers/misc/cxl/guest.c schedule_delayed_work(&afu->guest->work_err, msecs_to_jiffies(1000)); afu 996 drivers/misc/cxl/guest.c if ((rc = cxl_pci_vphb_add(afu))) afu 997 drivers/misc/cxl/guest.c dev_info(&afu->dev, "Can't register vPHB\n"); afu 1002 drivers/misc/cxl/guest.c cxl_sysfs_afu_remove(afu); afu 1004 drivers/misc/cxl/guest.c device_unregister(&afu->dev); afu 1006 drivers/misc/cxl/guest.c guest_release_serr_irq(afu); afu 1008 drivers/misc/cxl/guest.c guest_unmap_slice_regs(afu); afu 1011 drivers/misc/cxl/guest.c kfree(afu->guest); afu 1012 drivers/misc/cxl/guest.c kfree(afu); afu 1017 drivers/misc/cxl/guest.c void cxl_guest_remove_afu(struct cxl_afu *afu) afu 1019 drivers/misc/cxl/guest.c if (!afu) afu 1023 drivers/misc/cxl/guest.c afu->guest->handle_err = false; afu 1024 drivers/misc/cxl/guest.c flush_delayed_work(&afu->guest->work_err); afu 1026 drivers/misc/cxl/guest.c cxl_pci_vphb_remove(afu); afu 1027 drivers/misc/cxl/guest.c cxl_sysfs_afu_remove(afu); afu 1029 drivers/misc/cxl/guest.c spin_lock(&afu->adapter->afu_list_lock); afu 1030 drivers/misc/cxl/guest.c afu->adapter->afu[afu->slice] = NULL; afu 1031 drivers/misc/cxl/guest.c spin_unlock(&afu->adapter->afu_list_lock); afu 1033 drivers/misc/cxl/guest.c cxl_context_detach_all(afu); afu 1034 drivers/misc/cxl/guest.c cxl_ops->afu_deactivate_mode(afu, afu->current_mode); afu 1035 drivers/misc/cxl/guest.c guest_release_serr_irq(afu); afu 1036 drivers/misc/cxl/guest.c guest_unmap_slice_regs(afu); afu 1038 drivers/misc/cxl/guest.c device_unregister(&afu->dev); afu 63 drivers/misc/cxl/irq.c dev_err_ratelimited(&ctx->afu->dev, "CXL AFU Error undelivered to pe %i: 0x%016llx\n", afu 148 drivers/misc/cxl/irq.c dev_err_ratelimited(&ctx->afu->dev, "CXL AFU Error " afu 310 drivers/misc/cxl/irq.c if ((rc = cxl_ops->alloc_irq_ranges(&ctx->irqs, ctx->afu->adapter, afu 316 drivers/misc/cxl/irq.c ctx->irqs.offset[0] = ctx->afu->native->psl_hwirq; afu 337 drivers/misc/cxl/irq.c dev_name(&ctx->afu->dev), afu 351 drivers/misc/cxl/irq.c cxl_ops->release_irq_ranges(&ctx->irqs, ctx->afu->adapter); afu 382 drivers/misc/cxl/irq.c cxl_map_irq(ctx->afu->adapter, hwirq, handler, ctx, afu 417 drivers/misc/cxl/irq.c cxl_ops->release_irq_ranges(&ctx->irqs, ctx->afu->adapter); afu 422 drivers/misc/cxl/irq.c void cxl_afu_decode_psl_serr(struct cxl_afu *afu, u64 serr) afu 424 drivers/misc/cxl/irq.c dev_crit(&afu->dev, afu 426 drivers/misc/cxl/irq.c dev_crit(&afu->dev, "PSL_SERR_An: 0x%016llx\n", serr); afu 428 drivers/misc/cxl/irq.c dev_crit(&afu->dev, "AFU MMIO Timeout\n"); afu 430 drivers/misc/cxl/irq.c dev_crit(&afu->dev, afu 433 drivers/misc/cxl/irq.c dev_crit(&afu->dev, "AFU CTAG Overflow\n"); afu 435 drivers/misc/cxl/irq.c dev_crit(&afu->dev, "Bad Interrupt Source\n"); afu 437 drivers/misc/cxl/irq.c dev_crit(&afu->dev, "Bad Context Handle\n"); afu 439 drivers/misc/cxl/irq.c dev_crit(&afu->dev, "LLCMD to Disabled AFU\n"); afu 441 drivers/misc/cxl/irq.c dev_crit(&afu->dev, "LLCMD Timeout to AFU\n"); afu 443 drivers/misc/cxl/irq.c dev_crit(&afu->dev, "AFU MMIO Parity Error\n"); afu 445 drivers/misc/cxl/irq.c dev_crit(&afu->dev, "AFU MMIO Duplicate CTAG Error\n"); afu 447 drivers/misc/cxl/irq.c dev_crit(&afu->dev, afu 36 drivers/misc/cxl/main.c int cxl_afu_slbia(struct cxl_afu *afu) afu 41 drivers/misc/cxl/main.c cxl_p2n_write(afu, CXL_SLBIA_An, CXL_TLB_SLB_IQ_ALL); afu 42 drivers/misc/cxl/main.c while (cxl_p2n_read(afu, CXL_SLBIA_An) & CXL_TLB_SLB_P) { afu 44 drivers/misc/cxl/main.c dev_warn(&afu->dev, "WARNING: CXL AFU SLBIA timed out!\n"); afu 50 drivers/misc/cxl/main.c if (!cxl_ops->link_ok(afu->adapter, afu)) afu 65 drivers/misc/cxl/main.c ctx->afu->adapter->adapter_num, ctx->afu->slice, ctx->pe); afu 72 drivers/misc/cxl/main.c cxl_afu_slbia(ctx->afu); afu 78 drivers/misc/cxl/main.c struct cxl_afu *afu; afu 89 drivers/misc/cxl/main.c afu = adapter->afu[slice]; afu 90 drivers/misc/cxl/main.c if (!afu || !afu->enabled) afu 93 drivers/misc/cxl/main.c idr_for_each_entry(&afu->contexts_idr, ctx, id) afu 245 drivers/misc/cxl/main.c struct cxl_afu *afu; afu 247 drivers/misc/cxl/main.c if (!(afu = kzalloc(sizeof(struct cxl_afu), GFP_KERNEL))) afu 250 drivers/misc/cxl/main.c afu->adapter = adapter; afu 251 drivers/misc/cxl/main.c afu->dev.parent = &adapter->dev; afu 252 drivers/misc/cxl/main.c afu->dev.release = cxl_ops->release_afu; afu 253 drivers/misc/cxl/main.c afu->slice = slice; afu 254 drivers/misc/cxl/main.c idr_init(&afu->contexts_idr); afu 255 drivers/misc/cxl/main.c mutex_init(&afu->contexts_lock); afu 256 drivers/misc/cxl/main.c spin_lock_init(&afu->afu_cntl_lock); afu 257 drivers/misc/cxl/main.c atomic_set(&afu->configured_state, -1); afu 258 drivers/misc/cxl/main.c afu->prefault_mode = CXL_PREFAULT_NONE; afu 259 drivers/misc/cxl/main.c afu->irqs_max = afu->adapter->user_irqs; afu 261 drivers/misc/cxl/main.c return afu; afu 264 drivers/misc/cxl/main.c int cxl_afu_select_best_mode(struct cxl_afu *afu) afu 266 drivers/misc/cxl/main.c if (afu->modes_supported & CXL_MODE_DIRECTED) afu 267 drivers/misc/cxl/main.c return cxl_ops->afu_activate_mode(afu, CXL_MODE_DIRECTED); afu 269 drivers/misc/cxl/main.c if (afu->modes_supported & CXL_MODE_DEDICATED) afu 270 drivers/misc/cxl/main.c return cxl_ops->afu_activate_mode(afu, CXL_MODE_DEDICATED); afu 272 drivers/misc/cxl/main.c dev_warn(&afu->dev, "No supported programming modes available\n"); afu 21 drivers/misc/cxl/native.c static int afu_control(struct cxl_afu *afu, u64 command, u64 clear, afu 28 drivers/misc/cxl/native.c spin_lock(&afu->afu_cntl_lock); afu 31 drivers/misc/cxl/native.c trace_cxl_afu_ctrl(afu, command); afu 33 drivers/misc/cxl/native.c AFU_Cntl = cxl_p2n_read(afu, CXL_AFU_Cntl_An); afu 34 drivers/misc/cxl/native.c cxl_p2n_write(afu, CXL_AFU_Cntl_An, (AFU_Cntl & ~clear) | command); afu 36 drivers/misc/cxl/native.c AFU_Cntl = cxl_p2n_read(afu, CXL_AFU_Cntl_An); afu 39 drivers/misc/cxl/native.c dev_warn(&afu->dev, "WARNING: AFU control timed out!\n"); afu 44 drivers/misc/cxl/native.c if (!cxl_ops->link_ok(afu->adapter, afu)) { afu 45 drivers/misc/cxl/native.c afu->enabled = enabled; afu 53 drivers/misc/cxl/native.c AFU_Cntl = cxl_p2n_read(afu, CXL_AFU_Cntl_An); afu 62 drivers/misc/cxl/native.c cxl_p2n_write(afu, CXL_AFU_Cntl_An, AFU_Cntl & ~CXL_AFU_Cntl_An_RA); afu 66 drivers/misc/cxl/native.c afu->enabled = enabled; afu 68 drivers/misc/cxl/native.c trace_cxl_afu_ctrl_done(afu, command, rc); afu 69 drivers/misc/cxl/native.c spin_unlock(&afu->afu_cntl_lock); afu 74 drivers/misc/cxl/native.c static int afu_enable(struct cxl_afu *afu) afu 78 drivers/misc/cxl/native.c return afu_control(afu, CXL_AFU_Cntl_An_E, 0, afu 83 drivers/misc/cxl/native.c int cxl_afu_disable(struct cxl_afu *afu) afu 87 drivers/misc/cxl/native.c return afu_control(afu, 0, CXL_AFU_Cntl_An_E, afu 93 drivers/misc/cxl/native.c static int native_afu_reset(struct cxl_afu *afu) afu 100 drivers/misc/cxl/native.c rc = afu_control(afu, CXL_AFU_Cntl_An_RA, 0, afu 110 drivers/misc/cxl/native.c if (afu->current_mode == 0) { afu 111 drivers/misc/cxl/native.c serr = cxl_p1n_read(afu, CXL_PSL_SERR_An); afu 113 drivers/misc/cxl/native.c cxl_p1n_write(afu, CXL_PSL_SERR_An, serr); afu 119 drivers/misc/cxl/native.c static int native_afu_check_and_enable(struct cxl_afu *afu) afu 121 drivers/misc/cxl/native.c if (!cxl_ops->link_ok(afu->adapter, afu)) { afu 125 drivers/misc/cxl/native.c if (afu->enabled) afu 127 drivers/misc/cxl/native.c return afu_enable(afu); afu 130 drivers/misc/cxl/native.c int cxl_psl_purge(struct cxl_afu *afu) afu 132 drivers/misc/cxl/native.c u64 PSL_CNTL = cxl_p1n_read(afu, CXL_PSL_SCNTL_An); afu 133 drivers/misc/cxl/native.c u64 AFU_Cntl = cxl_p2n_read(afu, CXL_AFU_Cntl_An); afu 140 drivers/misc/cxl/native.c trace_cxl_psl_ctrl(afu, CXL_PSL_SCNTL_An_Pc); afu 149 drivers/misc/cxl/native.c if (!cxl_ops->link_ok(afu->adapter, afu)) { afu 150 drivers/misc/cxl/native.c dev_warn(&afu->dev, "PSL Purge called with link down, ignoring\n"); afu 157 drivers/misc/cxl/native.c cxl_afu_disable(afu); afu 160 drivers/misc/cxl/native.c cxl_p1n_write(afu, CXL_PSL_SCNTL_An, afu 163 drivers/misc/cxl/native.c PSL_CNTL = cxl_p1n_read(afu, CXL_PSL_SCNTL_An); afu 167 drivers/misc/cxl/native.c dev_warn(&afu->dev, "WARNING: PSL Purge timed out!\n"); afu 171 drivers/misc/cxl/native.c if (!cxl_ops->link_ok(afu->adapter, afu)) { afu 176 drivers/misc/cxl/native.c dsisr = cxl_p2n_read(afu, CXL_PSL_DSISR_An); afu 181 drivers/misc/cxl/native.c dar = cxl_p2n_read(afu, CXL_PSL_DAR_An); afu 182 drivers/misc/cxl/native.c dev_notice(&afu->dev, "PSL purge terminating pending translation, DSISR: 0x%016llx, DAR: 0x%016llx\n", afu 184 drivers/misc/cxl/native.c cxl_p2n_write(afu, CXL_PSL_TFC_An, CXL_PSL_TFC_An_AE); afu 186 drivers/misc/cxl/native.c dev_notice(&afu->dev, "PSL purge acknowledging pending non-translation fault, DSISR: 0x%016llx\n", afu 188 drivers/misc/cxl/native.c cxl_p2n_write(afu, CXL_PSL_TFC_An, CXL_PSL_TFC_An_A); afu 192 drivers/misc/cxl/native.c PSL_CNTL = cxl_p1n_read(afu, CXL_PSL_SCNTL_An); afu 197 drivers/misc/cxl/native.c cxl_p1n_write(afu, CXL_PSL_SCNTL_An, afu 200 drivers/misc/cxl/native.c trace_cxl_psl_ctrl_done(afu, CXL_PSL_SCNTL_An_Pc, rc); afu 222 drivers/misc/cxl/native.c static int cxl_alloc_spa(struct cxl_afu *afu, int mode) afu 227 drivers/misc/cxl/native.c afu->native->spa_order = -1; afu 229 drivers/misc/cxl/native.c afu->native->spa_order++; afu 230 drivers/misc/cxl/native.c spa_size = (1 << afu->native->spa_order) * PAGE_SIZE; afu 233 drivers/misc/cxl/native.c dev_warn(&afu->dev, "num_of_processes too large for the SPA, limiting to %i (0x%x)\n", afu 234 drivers/misc/cxl/native.c afu->native->spa_max_procs, afu->native->spa_size); afu 236 drivers/misc/cxl/native.c afu->num_procs = afu->native->spa_max_procs; afu 240 drivers/misc/cxl/native.c afu->native->spa_size = spa_size; afu 241 drivers/misc/cxl/native.c afu->native->spa_max_procs = spa_max_procs(afu->native->spa_size); afu 242 drivers/misc/cxl/native.c } while (afu->native->spa_max_procs < afu->num_procs); afu 244 drivers/misc/cxl/native.c if (!(afu->native->spa = (struct cxl_process_element *) afu 245 drivers/misc/cxl/native.c __get_free_pages(GFP_KERNEL | __GFP_ZERO, afu->native->spa_order))) { afu 250 drivers/misc/cxl/native.c 1<<afu->native->spa_order, afu->native->spa_max_procs, afu->num_procs); afu 255 drivers/misc/cxl/native.c static void attach_spa(struct cxl_afu *afu) afu 259 drivers/misc/cxl/native.c afu->native->sw_command_status = (__be64 *)((char *)afu->native->spa + afu 260 drivers/misc/cxl/native.c ((afu->native->spa_max_procs + 3) * 128)); afu 262 drivers/misc/cxl/native.c spap = virt_to_phys(afu->native->spa) & CXL_PSL_SPAP_Addr; afu 263 drivers/misc/cxl/native.c spap |= ((afu->native->spa_size >> (12 - CXL_PSL_SPAP_Size_Shift)) - 1) & CXL_PSL_SPAP_Size; afu 266 drivers/misc/cxl/native.c afu->native->spa, afu->native->spa_max_procs, afu 267 drivers/misc/cxl/native.c afu->native->sw_command_status, spap); afu 268 drivers/misc/cxl/native.c cxl_p1n_write(afu, CXL_PSL_SPAP_An, spap); afu 271 drivers/misc/cxl/native.c static inline void detach_spa(struct cxl_afu *afu) afu 273 drivers/misc/cxl/native.c cxl_p1n_write(afu, CXL_PSL_SPAP_An, 0); afu 276 drivers/misc/cxl/native.c void cxl_release_spa(struct cxl_afu *afu) afu 278 drivers/misc/cxl/native.c if (afu->native->spa) { afu 279 drivers/misc/cxl/native.c free_pages((unsigned long) afu->native->spa, afu 280 drivers/misc/cxl/native.c afu->native->spa_order); afu 281 drivers/misc/cxl/native.c afu->native->spa = NULL; afu 387 drivers/misc/cxl/native.c static int cxl_write_sstp(struct cxl_afu *afu, u64 sstp0, u64 sstp1) afu 392 drivers/misc/cxl/native.c cxl_p2n_write(afu, CXL_SSTP1_An, 0); afu 395 drivers/misc/cxl/native.c if ((rc = cxl_afu_slbia(afu))) afu 399 drivers/misc/cxl/native.c cxl_p2n_write(afu, CXL_SSTP0_An, sstp0); afu 402 drivers/misc/cxl/native.c cxl_p2n_write(afu, CXL_SSTP1_An, sstp1); afu 410 drivers/misc/cxl/native.c struct cxl *adapter = ctx->afu->adapter; afu 413 drivers/misc/cxl/native.c WARN_ON(!mutex_is_locked(&ctx->afu->native->spa_mutex)); afu 439 drivers/misc/cxl/native.c WARN_ON(!ctx->afu->enabled); afu 443 drivers/misc/cxl/native.c *(ctx->afu->native->sw_command_status) = cpu_to_be64(cmd | 0 | ctx->pe); afu 445 drivers/misc/cxl/native.c cxl_p1n_write(ctx->afu, CXL_PSL_LLCMD_An, cmd | ctx->pe); afu 448 drivers/misc/cxl/native.c dev_warn(&ctx->afu->dev, "WARNING: Process Element Command timed out!\n"); afu 452 drivers/misc/cxl/native.c if (!cxl_ops->link_ok(ctx->afu->adapter, ctx->afu)) { afu 453 drivers/misc/cxl/native.c dev_warn(&ctx->afu->dev, "WARNING: Device link down, aborting Process Element Command!\n"); afu 457 drivers/misc/cxl/native.c state = be64_to_cpup(ctx->afu->native->sw_command_status); afu 485 drivers/misc/cxl/native.c mutex_lock(&ctx->afu->native->spa_mutex); afu 490 drivers/misc/cxl/native.c mutex_unlock(&ctx->afu->native->spa_mutex); afu 502 drivers/misc/cxl/native.c mutex_lock(&ctx->afu->native->spa_mutex); afu 508 drivers/misc/cxl/native.c if (cxl_ops->link_ok(ctx->afu->adapter, ctx->afu)) afu 513 drivers/misc/cxl/native.c mutex_unlock(&ctx->afu->native->spa_mutex); afu 521 drivers/misc/cxl/native.c mutex_lock(&ctx->afu->native->spa_mutex); afu 527 drivers/misc/cxl/native.c if (cxl_ops->link_ok(ctx->afu->adapter, ctx->afu)) afu 535 drivers/misc/cxl/native.c mutex_unlock(&ctx->afu->native->spa_mutex); afu 542 drivers/misc/cxl/native.c if (!ctx->afu->pp_size || ctx->master) { afu 543 drivers/misc/cxl/native.c ctx->psn_phys = ctx->afu->psn_phys; afu 544 drivers/misc/cxl/native.c ctx->psn_size = ctx->afu->adapter->ps_size; afu 546 drivers/misc/cxl/native.c ctx->psn_phys = ctx->afu->psn_phys + afu 547 drivers/misc/cxl/native.c (ctx->afu->native->pp_offset + ctx->afu->pp_size * ctx->pe); afu 548 drivers/misc/cxl/native.c ctx->psn_size = ctx->afu->pp_size; afu 552 drivers/misc/cxl/native.c static int activate_afu_directed(struct cxl_afu *afu) afu 556 drivers/misc/cxl/native.c dev_info(&afu->dev, "Activating AFU directed mode\n"); afu 558 drivers/misc/cxl/native.c afu->num_procs = afu->max_procs_virtualised; afu 559 drivers/misc/cxl/native.c if (afu->native->spa == NULL) { afu 560 drivers/misc/cxl/native.c if (cxl_alloc_spa(afu, CXL_MODE_DIRECTED)) afu 563 drivers/misc/cxl/native.c attach_spa(afu); afu 565 drivers/misc/cxl/native.c cxl_p1n_write(afu, CXL_PSL_SCNTL_An, CXL_PSL_SCNTL_An_PM_AFU); afu 567 drivers/misc/cxl/native.c cxl_p1n_write(afu, CXL_PSL_AMOR_An, 0xFFFFFFFFFFFFFFFFULL); afu 568 drivers/misc/cxl/native.c cxl_p1n_write(afu, CXL_PSL_ID_An, CXL_PSL_ID_An_F | CXL_PSL_ID_An_L); afu 570 drivers/misc/cxl/native.c afu->current_mode = CXL_MODE_DIRECTED; afu 572 drivers/misc/cxl/native.c if ((rc = cxl_chardev_m_afu_add(afu))) afu 575 drivers/misc/cxl/native.c if ((rc = cxl_sysfs_afu_m_add(afu))) afu 578 drivers/misc/cxl/native.c if ((rc = cxl_chardev_s_afu_add(afu))) afu 583 drivers/misc/cxl/native.c cxl_sysfs_afu_m_remove(afu); afu 585 drivers/misc/cxl/native.c cxl_chardev_afu_remove(afu); afu 707 drivers/misc/cxl/native.c ctx->irqs.offset[0] = ctx->afu->native->psl_hwirq; afu 729 drivers/misc/cxl/native.c result = cxl_ops->afu_check_and_enable(ctx->afu); afu 770 drivers/misc/cxl/native.c ctx->irqs.offset[0] = ctx->afu->native->psl_hwirq; afu 780 drivers/misc/cxl/native.c if ((result = cxl_ops->afu_check_and_enable(ctx->afu))) afu 786 drivers/misc/cxl/native.c static int deactivate_afu_directed(struct cxl_afu *afu) afu 788 drivers/misc/cxl/native.c dev_info(&afu->dev, "Deactivating AFU directed mode\n"); afu 790 drivers/misc/cxl/native.c afu->current_mode = 0; afu 791 drivers/misc/cxl/native.c afu->num_procs = 0; afu 793 drivers/misc/cxl/native.c cxl_sysfs_afu_m_remove(afu); afu 794 drivers/misc/cxl/native.c cxl_chardev_afu_remove(afu); afu 821 drivers/misc/cxl/native.c if (afu->adapter->native->sl_ops->needs_reset_before_disable) afu 822 drivers/misc/cxl/native.c cxl_ops->afu_reset(afu); afu 823 drivers/misc/cxl/native.c cxl_afu_disable(afu); afu 824 drivers/misc/cxl/native.c cxl_psl_purge(afu); afu 829 drivers/misc/cxl/native.c int cxl_activate_dedicated_process_psl9(struct cxl_afu *afu) afu 831 drivers/misc/cxl/native.c dev_info(&afu->dev, "Activating dedicated process mode\n"); afu 840 drivers/misc/cxl/native.c afu->num_procs = 1; afu 841 drivers/misc/cxl/native.c if (afu->native->spa == NULL) { afu 842 drivers/misc/cxl/native.c if (cxl_alloc_spa(afu, CXL_MODE_DEDICATED)) afu 845 drivers/misc/cxl/native.c attach_spa(afu); afu 847 drivers/misc/cxl/native.c cxl_p1n_write(afu, CXL_PSL_SCNTL_An, CXL_PSL_SCNTL_An_PM_Process); afu 848 drivers/misc/cxl/native.c cxl_p1n_write(afu, CXL_PSL_ID_An, CXL_PSL_ID_An_F | CXL_PSL_ID_An_L); afu 850 drivers/misc/cxl/native.c afu->current_mode = CXL_MODE_DEDICATED; afu 852 drivers/misc/cxl/native.c return cxl_chardev_d_afu_add(afu); afu 855 drivers/misc/cxl/native.c int cxl_activate_dedicated_process_psl8(struct cxl_afu *afu) afu 857 drivers/misc/cxl/native.c dev_info(&afu->dev, "Activating dedicated process mode\n"); afu 859 drivers/misc/cxl/native.c cxl_p1n_write(afu, CXL_PSL_SCNTL_An, CXL_PSL_SCNTL_An_PM_Process); afu 861 drivers/misc/cxl/native.c cxl_p1n_write(afu, CXL_PSL_CtxTime_An, 0); /* disable */ afu 862 drivers/misc/cxl/native.c cxl_p1n_write(afu, CXL_PSL_SPAP_An, 0); /* disable */ afu 863 drivers/misc/cxl/native.c cxl_p1n_write(afu, CXL_PSL_AMOR_An, 0xFFFFFFFFFFFFFFFFULL); afu 864 drivers/misc/cxl/native.c cxl_p1n_write(afu, CXL_PSL_LPID_An, mfspr(SPRN_LPID)); afu 865 drivers/misc/cxl/native.c cxl_p1n_write(afu, CXL_HAURP_An, 0); /* disable */ afu 866 drivers/misc/cxl/native.c cxl_p1n_write(afu, CXL_PSL_SDR_An, mfspr(SPRN_SDR1)); afu 868 drivers/misc/cxl/native.c cxl_p2n_write(afu, CXL_CSRP_An, 0); /* disable */ afu 869 drivers/misc/cxl/native.c cxl_p2n_write(afu, CXL_AURP0_An, 0); /* disable */ afu 870 drivers/misc/cxl/native.c cxl_p2n_write(afu, CXL_AURP1_An, 0); /* disable */ afu 872 drivers/misc/cxl/native.c afu->current_mode = CXL_MODE_DEDICATED; afu 873 drivers/misc/cxl/native.c afu->num_procs = 1; afu 875 drivers/misc/cxl/native.c return cxl_chardev_d_afu_add(afu); afu 890 drivers/misc/cxl/native.c struct cxl_afu *afu = ctx->afu; afu 892 drivers/misc/cxl/native.c cxl_p1n_write(afu, CXL_PSL_IVTE_Offset_An, afu 897 drivers/misc/cxl/native.c cxl_p1n_write(afu, CXL_PSL_IVTE_Limit_An, (u64) afu 906 drivers/misc/cxl/native.c struct cxl_afu *afu = ctx->afu; afu 914 drivers/misc/cxl/native.c if (ctx->afu->adapter->native->sl_ops->update_dedicated_ivtes) afu 915 drivers/misc/cxl/native.c afu->adapter->native->sl_ops->update_dedicated_ivtes(ctx); afu 925 drivers/misc/cxl/native.c result = cxl_ops->afu_reset(afu); afu 929 drivers/misc/cxl/native.c return afu_enable(afu); afu 934 drivers/misc/cxl/native.c struct cxl_afu *afu = ctx->afu; afu 941 drivers/misc/cxl/native.c cxl_p2n_write(afu, CXL_PSL_PID_TID_An, pid); afu 943 drivers/misc/cxl/native.c cxl_p1n_write(afu, CXL_PSL_SR_An, calculate_sr(ctx)); afu 945 drivers/misc/cxl/native.c if ((rc = cxl_write_sstp(afu, ctx->sstp0, ctx->sstp1))) afu 950 drivers/misc/cxl/native.c if (ctx->afu->adapter->native->sl_ops->update_dedicated_ivtes) afu 951 drivers/misc/cxl/native.c afu->adapter->native->sl_ops->update_dedicated_ivtes(ctx); afu 953 drivers/misc/cxl/native.c cxl_p2n_write(afu, CXL_PSL_AMR_An, amr); afu 958 drivers/misc/cxl/native.c if ((rc = cxl_ops->afu_reset(afu))) afu 961 drivers/misc/cxl/native.c cxl_p2n_write(afu, CXL_PSL_WED_An, wed); afu 963 drivers/misc/cxl/native.c return afu_enable(afu); afu 966 drivers/misc/cxl/native.c static int deactivate_dedicated_process(struct cxl_afu *afu) afu 968 drivers/misc/cxl/native.c dev_info(&afu->dev, "Deactivating dedicated process mode\n"); afu 970 drivers/misc/cxl/native.c afu->current_mode = 0; afu 971 drivers/misc/cxl/native.c afu->num_procs = 0; afu 973 drivers/misc/cxl/native.c cxl_chardev_afu_remove(afu); afu 978 drivers/misc/cxl/native.c static int native_afu_deactivate_mode(struct cxl_afu *afu, int mode) afu 981 drivers/misc/cxl/native.c return deactivate_afu_directed(afu); afu 983 drivers/misc/cxl/native.c return deactivate_dedicated_process(afu); afu 987 drivers/misc/cxl/native.c static int native_afu_activate_mode(struct cxl_afu *afu, int mode) afu 991 drivers/misc/cxl/native.c if (!(mode & afu->modes_supported)) afu 994 drivers/misc/cxl/native.c if (!cxl_ops->link_ok(afu->adapter, afu)) { afu 1000 drivers/misc/cxl/native.c return activate_afu_directed(afu); afu 1002 drivers/misc/cxl/native.c (afu->adapter->native->sl_ops->activate_dedicated_process)) afu 1003 drivers/misc/cxl/native.c return afu->adapter->native->sl_ops->activate_dedicated_process(afu); afu 1011 drivers/misc/cxl/native.c if (!cxl_ops->link_ok(ctx->afu->adapter, ctx->afu)) { afu 1017 drivers/misc/cxl/native.c if ((ctx->afu->current_mode == CXL_MODE_DIRECTED) && afu 1018 drivers/misc/cxl/native.c (ctx->afu->adapter->native->sl_ops->attach_afu_directed)) afu 1019 drivers/misc/cxl/native.c return ctx->afu->adapter->native->sl_ops->attach_afu_directed(ctx, wed, amr); afu 1021 drivers/misc/cxl/native.c if ((ctx->afu->current_mode == CXL_MODE_DEDICATED) && afu 1022 drivers/misc/cxl/native.c (ctx->afu->adapter->native->sl_ops->attach_dedicated_process)) afu 1023 drivers/misc/cxl/native.c return ctx->afu->adapter->native->sl_ops->attach_dedicated_process(ctx, wed, amr); afu 1046 drivers/misc/cxl/native.c cxl_ops->afu_reset(ctx->afu); afu 1047 drivers/misc/cxl/native.c cxl_afu_disable(ctx->afu); afu 1048 drivers/misc/cxl/native.c cxl_psl_purge(ctx->afu); afu 1054 drivers/misc/cxl/native.c if (ctx->afu->current_mode == CXL_MODE_DIRECTED) afu 1056 drivers/misc/cxl/native.c if ((ctx->afu->current_mode == CXL_MODE_DEDICATED) && afu 1057 drivers/misc/cxl/native.c (ctx->afu->adapter->native->sl_ops->update_dedicated_ivtes)) afu 1058 drivers/misc/cxl/native.c return ctx->afu->adapter->native->sl_ops->update_dedicated_ivtes(ctx); afu 1078 drivers/misc/cxl/native.c if (ctx->afu->current_mode == CXL_MODE_DEDICATED) afu 1084 drivers/misc/cxl/native.c static int native_get_irq_info(struct cxl_afu *afu, struct cxl_irq_info *info) afu 1089 drivers/misc/cxl/native.c if (!cxl_ops->link_ok(afu->adapter, afu)) afu 1092 drivers/misc/cxl/native.c info->dsisr = cxl_p2n_read(afu, CXL_PSL_DSISR_An); afu 1093 drivers/misc/cxl/native.c info->dar = cxl_p2n_read(afu, CXL_PSL_DAR_An); afu 1095 drivers/misc/cxl/native.c info->dsr = cxl_p2n_read(afu, CXL_PSL_DSR_An); afu 1096 drivers/misc/cxl/native.c info->afu_err = cxl_p2n_read(afu, CXL_AFU_ERR_An); afu 1097 drivers/misc/cxl/native.c info->errstat = cxl_p2n_read(afu, CXL_PSL_ErrStat_An); afu 1107 drivers/misc/cxl/native.c fir1 = cxl_p1_read(ctx->afu->adapter, CXL_PSL9_FIR1); afu 1109 drivers/misc/cxl/native.c dev_crit(&ctx->afu->dev, "PSL_FIR1: 0x%016llx\n", fir1); afu 1110 drivers/misc/cxl/native.c if (ctx->afu->adapter->native->sl_ops->register_serr_irq) { afu 1111 drivers/misc/cxl/native.c serr = cxl_p1n_read(ctx->afu, CXL_PSL_SERR_An); afu 1112 drivers/misc/cxl/native.c cxl_afu_decode_psl_serr(ctx->afu, serr); afu 1120 drivers/misc/cxl/native.c fir1 = cxl_p1_read(ctx->afu->adapter, CXL_PSL_FIR1); afu 1121 drivers/misc/cxl/native.c fir2 = cxl_p1_read(ctx->afu->adapter, CXL_PSL_FIR2); afu 1122 drivers/misc/cxl/native.c fir_slice = cxl_p1n_read(ctx->afu, CXL_PSL_FIR_SLICE_An); afu 1123 drivers/misc/cxl/native.c afu_debug = cxl_p1n_read(ctx->afu, CXL_AFU_DEBUG_An); afu 1125 drivers/misc/cxl/native.c dev_crit(&ctx->afu->dev, "PSL_FIR1: 0x%016llx\n", fir1); afu 1126 drivers/misc/cxl/native.c dev_crit(&ctx->afu->dev, "PSL_FIR2: 0x%016llx\n", fir2); afu 1127 drivers/misc/cxl/native.c if (ctx->afu->adapter->native->sl_ops->register_serr_irq) { afu 1128 drivers/misc/cxl/native.c serr = cxl_p1n_read(ctx->afu, CXL_PSL_SERR_An); afu 1129 drivers/misc/cxl/native.c cxl_afu_decode_psl_serr(ctx->afu, serr); afu 1131 drivers/misc/cxl/native.c dev_crit(&ctx->afu->dev, "PSL_FIR_SLICE_An: 0x%016llx\n", fir_slice); afu 1132 drivers/misc/cxl/native.c dev_crit(&ctx->afu->dev, "CXL_PSL_AFU_DEBUG_An: 0x%016llx\n", afu_debug); afu 1139 drivers/misc/cxl/native.c dev_crit(&ctx->afu->dev, "PSL ERROR STATUS: 0x%016llx\n", errstat); afu 1141 drivers/misc/cxl/native.c if (ctx->afu->adapter->native->sl_ops->psl_irq_dump_registers) afu 1142 drivers/misc/cxl/native.c ctx->afu->adapter->native->sl_ops->psl_irq_dump_registers(ctx); afu 1144 drivers/misc/cxl/native.c if (ctx->afu->adapter->native->sl_ops->debugfs_stop_trace) { afu 1145 drivers/misc/cxl/native.c dev_crit(&ctx->afu->dev, "STOPPING CXL TRACE\n"); afu 1146 drivers/misc/cxl/native.c ctx->afu->adapter->native->sl_ops->debugfs_stop_trace(ctx->afu->adapter); afu 1152 drivers/misc/cxl/native.c static bool cxl_is_translation_fault(struct cxl_afu *afu, u64 dsisr) afu 1163 drivers/misc/cxl/native.c irqreturn_t cxl_fail_irq_psl(struct cxl_afu *afu, struct cxl_irq_info *irq_info) afu 1165 drivers/misc/cxl/native.c if (cxl_is_translation_fault(afu, irq_info->dsisr)) afu 1166 drivers/misc/cxl/native.c cxl_p2n_write(afu, CXL_PSL_TFC_An, CXL_PSL_TFC_An_AE); afu 1168 drivers/misc/cxl/native.c cxl_p2n_write(afu, CXL_PSL_TFC_An, CXL_PSL_TFC_An_A); afu 1175 drivers/misc/cxl/native.c struct cxl_afu *afu = data; afu 1178 drivers/misc/cxl/native.c u64 phreg = cxl_p2n_read(afu, CXL_PSL_PEHandle_An); afu 1183 drivers/misc/cxl/native.c dev_warn(&afu->dev, afu 1190 drivers/misc/cxl/native.c if ((res = native_get_irq_info(afu, &irq_info))) { afu 1192 drivers/misc/cxl/native.c if (afu->adapter->native->sl_ops->fail_irq) afu 1193 drivers/misc/cxl/native.c return afu->adapter->native->sl_ops->fail_irq(afu, &irq_info); afu 1198 drivers/misc/cxl/native.c ctx = idr_find(&afu->contexts_idr, ph); afu 1200 drivers/misc/cxl/native.c if (afu->adapter->native->sl_ops->handle_interrupt) afu 1201 drivers/misc/cxl/native.c ret = afu->adapter->native->sl_ops->handle_interrupt(irq, ctx, &irq_info); afu 1211 drivers/misc/cxl/native.c if (afu->adapter->native->sl_ops->fail_irq) afu 1212 drivers/misc/cxl/native.c ret = afu->adapter->native->sl_ops->fail_irq(afu, &irq_info); afu 1227 drivers/misc/cxl/native.c ph = cxl_p2n_read(ctx->afu, CXL_PSL_PEHandle_An) & 0xffff; afu 1230 drivers/misc/cxl/native.c dsisr = cxl_p2n_read(ctx->afu, CXL_PSL_DSISR_An); afu 1244 drivers/misc/cxl/native.c dev_warn(&ctx->afu->dev, "WARNING: waiting on DSI for PE %i" afu 1251 drivers/misc/cxl/native.c struct cxl_afu *afu = data; afu 1258 drivers/misc/cxl/native.c serr = cxl_p1n_read(afu, CXL_PSL_SERR_An); afu 1259 drivers/misc/cxl/native.c errstat = cxl_p2n_read(afu, CXL_PSL_ErrStat_An); afu 1260 drivers/misc/cxl/native.c afu_error = cxl_p2n_read(afu, CXL_AFU_ERR_An); afu 1261 drivers/misc/cxl/native.c dsisr = cxl_p2n_read(afu, CXL_PSL_DSISR_An); afu 1262 drivers/misc/cxl/native.c cxl_afu_decode_psl_serr(afu, serr); afu 1265 drivers/misc/cxl/native.c fir_slice = cxl_p1n_read(afu, CXL_PSL_FIR_SLICE_An); afu 1266 drivers/misc/cxl/native.c afu_debug = cxl_p1n_read(afu, CXL_AFU_DEBUG_An); afu 1267 drivers/misc/cxl/native.c dev_crit(&afu->dev, "PSL_FIR_SLICE_An: 0x%016llx\n", fir_slice); afu 1268 drivers/misc/cxl/native.c dev_crit(&afu->dev, "CXL_PSL_AFU_DEBUG_An: 0x%016llx\n", afu_debug); afu 1270 drivers/misc/cxl/native.c dev_crit(&afu->dev, "CXL_PSL_ErrStat_An: 0x%016llx\n", errstat); afu 1271 drivers/misc/cxl/native.c dev_crit(&afu->dev, "AFU_ERR_An: 0x%.16llx\n", afu_error); afu 1272 drivers/misc/cxl/native.c dev_crit(&afu->dev, "PSL_DSISR_An: 0x%.16llx\n", dsisr); afu 1277 drivers/misc/cxl/native.c cxl_p1n_write(afu, CXL_PSL_SERR_An, serr); afu 1278 drivers/misc/cxl/native.c dev_info(&afu->dev, "Further such interrupts will be masked until the AFU is reset\n"); afu 1360 drivers/misc/cxl/native.c int cxl_native_register_serr_irq(struct cxl_afu *afu) afu 1365 drivers/misc/cxl/native.c afu->err_irq_name = kasprintf(GFP_KERNEL, "cxl-%s-err", afu 1366 drivers/misc/cxl/native.c dev_name(&afu->dev)); afu 1367 drivers/misc/cxl/native.c if (!afu->err_irq_name) afu 1370 drivers/misc/cxl/native.c if ((rc = cxl_register_one_irq(afu->adapter, native_slice_irq_err, afu, afu 1371 drivers/misc/cxl/native.c &afu->serr_hwirq, afu 1372 drivers/misc/cxl/native.c &afu->serr_virq, afu->err_irq_name))) { afu 1373 drivers/misc/cxl/native.c kfree(afu->err_irq_name); afu 1374 drivers/misc/cxl/native.c afu->err_irq_name = NULL; afu 1378 drivers/misc/cxl/native.c serr = cxl_p1n_read(afu, CXL_PSL_SERR_An); afu 1380 drivers/misc/cxl/native.c serr = (serr & 0x00ffffffffff0000ULL) | (afu->serr_hwirq & 0xffff); afu 1386 drivers/misc/cxl/native.c serr = (serr & ~0xff0000007fffffffULL) | (afu->serr_hwirq & 0xffff); afu 1388 drivers/misc/cxl/native.c cxl_p1n_write(afu, CXL_PSL_SERR_An, serr); afu 1393 drivers/misc/cxl/native.c void cxl_native_release_serr_irq(struct cxl_afu *afu) afu 1395 drivers/misc/cxl/native.c if (afu->serr_virq == 0 || afu 1396 drivers/misc/cxl/native.c afu->serr_virq != irq_find_mapping(NULL, afu->serr_hwirq)) afu 1399 drivers/misc/cxl/native.c cxl_p1n_write(afu, CXL_PSL_SERR_An, 0x0000000000000000); afu 1400 drivers/misc/cxl/native.c cxl_unmap_irq(afu->serr_virq, afu); afu 1401 drivers/misc/cxl/native.c cxl_ops->release_one_irq(afu->adapter, afu->serr_hwirq); afu 1402 drivers/misc/cxl/native.c kfree(afu->err_irq_name); afu 1403 drivers/misc/cxl/native.c afu->serr_virq = 0; afu 1406 drivers/misc/cxl/native.c int cxl_native_register_psl_irq(struct cxl_afu *afu) afu 1410 drivers/misc/cxl/native.c afu->psl_irq_name = kasprintf(GFP_KERNEL, "cxl-%s", afu 1411 drivers/misc/cxl/native.c dev_name(&afu->dev)); afu 1412 drivers/misc/cxl/native.c if (!afu->psl_irq_name) afu 1415 drivers/misc/cxl/native.c if ((rc = cxl_register_one_irq(afu->adapter, native_irq_multiplexed, afu 1416 drivers/misc/cxl/native.c afu, &afu->native->psl_hwirq, &afu->native->psl_virq, afu 1417 drivers/misc/cxl/native.c afu->psl_irq_name))) { afu 1418 drivers/misc/cxl/native.c kfree(afu->psl_irq_name); afu 1419 drivers/misc/cxl/native.c afu->psl_irq_name = NULL; afu 1424 drivers/misc/cxl/native.c void cxl_native_release_psl_irq(struct cxl_afu *afu) afu 1426 drivers/misc/cxl/native.c if (afu->native->psl_virq == 0 || afu 1427 drivers/misc/cxl/native.c afu->native->psl_virq != afu 1428 drivers/misc/cxl/native.c irq_find_mapping(NULL, afu->native->psl_hwirq)) afu 1431 drivers/misc/cxl/native.c cxl_unmap_irq(afu->native->psl_virq, afu); afu 1432 drivers/misc/cxl/native.c cxl_ops->release_one_irq(afu->adapter, afu->native->psl_hwirq); afu 1433 drivers/misc/cxl/native.c kfree(afu->psl_irq_name); afu 1434 drivers/misc/cxl/native.c afu->native->psl_virq = 0; afu 1437 drivers/misc/cxl/native.c static void recover_psl_err(struct cxl_afu *afu, u64 errstat) afu 1444 drivers/misc/cxl/native.c dsisr = cxl_p2n_read(afu, CXL_PSL_DSISR_An); afu 1445 drivers/misc/cxl/native.c cxl_p2n_write(afu, CXL_PSL_DSISR_An, dsisr & ~CXL_PSL_DSISR_An_PE); afu 1448 drivers/misc/cxl/native.c cxl_p2n_write(afu, CXL_PSL_ErrStat_An, errstat); afu 1455 drivers/misc/cxl/native.c cxl_p2n_write(ctx->afu, CXL_PSL_TFC_An, tfc); afu 1457 drivers/misc/cxl/native.c recover_psl_err(ctx->afu, psl_reset_mask); afu 1462 drivers/misc/cxl/native.c int cxl_check_error(struct cxl_afu *afu) afu 1464 drivers/misc/cxl/native.c return (cxl_p1n_read(afu, CXL_PSL_SCNTL_An) == ~0ULL); afu 1473 drivers/misc/cxl/native.c static int native_afu_cr_read64(struct cxl_afu *afu, int cr, u64 off, u64 *out) afu 1475 drivers/misc/cxl/native.c if (unlikely(!cxl_ops->link_ok(afu->adapter, afu))) afu 1477 drivers/misc/cxl/native.c if (unlikely(off >= afu->crs_len)) afu 1479 drivers/misc/cxl/native.c *out = in_le64(afu->native->afu_desc_mmio + afu->crs_offset + afu 1480 drivers/misc/cxl/native.c (cr * afu->crs_len) + off); afu 1484 drivers/misc/cxl/native.c static int native_afu_cr_read32(struct cxl_afu *afu, int cr, u64 off, u32 *out) afu 1486 drivers/misc/cxl/native.c if (unlikely(!cxl_ops->link_ok(afu->adapter, afu))) afu 1488 drivers/misc/cxl/native.c if (unlikely(off >= afu->crs_len)) afu 1490 drivers/misc/cxl/native.c *out = in_le32(afu->native->afu_desc_mmio + afu->crs_offset + afu 1491 drivers/misc/cxl/native.c (cr * afu->crs_len) + off); afu 1495 drivers/misc/cxl/native.c static int native_afu_cr_read16(struct cxl_afu *afu, int cr, u64 off, u16 *out) afu 1501 drivers/misc/cxl/native.c rc = native_afu_cr_read32(afu, cr, aligned_off, &val); afu 1507 drivers/misc/cxl/native.c static int native_afu_cr_read8(struct cxl_afu *afu, int cr, u64 off, u8 *out) afu 1513 drivers/misc/cxl/native.c rc = native_afu_cr_read32(afu, cr, aligned_off, &val); afu 1519 drivers/misc/cxl/native.c static int native_afu_cr_write32(struct cxl_afu *afu, int cr, u64 off, u32 in) afu 1521 drivers/misc/cxl/native.c if (unlikely(!cxl_ops->link_ok(afu->adapter, afu))) afu 1523 drivers/misc/cxl/native.c if (unlikely(off >= afu->crs_len)) afu 1525 drivers/misc/cxl/native.c out_le32(afu->native->afu_desc_mmio + afu->crs_offset + afu 1526 drivers/misc/cxl/native.c (cr * afu->crs_len) + off, in); afu 1530 drivers/misc/cxl/native.c static int native_afu_cr_write16(struct cxl_afu *afu, int cr, u64 off, u16 in) afu 1536 drivers/misc/cxl/native.c rc = native_afu_cr_read32(afu, cr, aligned_off, &val32); afu 1544 drivers/misc/cxl/native.c rc = native_afu_cr_write32(afu, cr, aligned_off, val32); afu 1548 drivers/misc/cxl/native.c static int native_afu_cr_write8(struct cxl_afu *afu, int cr, u64 off, u8 in) afu 1554 drivers/misc/cxl/native.c rc = native_afu_cr_read32(afu, cr, aligned_off, &val32); afu 1561 drivers/misc/cxl/native.c rc = native_afu_cr_write32(afu, cr, aligned_off, val32); afu 70 drivers/misc/cxl/of.c struct cxl_afu *afu) afu 88 drivers/misc/cxl/of.c afu->guest->handle = addr; afu 91 drivers/misc/cxl/of.c afu->guest->p2n_phys += addr; afu 92 drivers/misc/cxl/of.c afu->guest->p2n_size = size; afu 95 drivers/misc/cxl/of.c afu->psn_phys += addr; afu 96 drivers/misc/cxl/of.c afu->adapter->ps_size = size; afu 111 drivers/misc/cxl/of.c static int read_vpd(struct cxl *adapter, struct cxl_afu *afu) afu 122 drivers/misc/cxl/of.c rc = cxl_guest_read_afu_vpd(afu, vpd, len); afu 131 drivers/misc/cxl/of.c int cxl_of_read_afu_handle(struct cxl_afu *afu, struct device_node *afu_np) afu 133 drivers/misc/cxl/of.c if (read_handle(afu_np, &afu->guest->handle)) afu 135 drivers/misc/cxl/of.c pr_devel("AFU handle: 0x%.16llx\n", afu->guest->handle); afu 140 drivers/misc/cxl/of.c int cxl_of_read_afu_properties(struct cxl_afu *afu, struct device_node *np) afu 163 drivers/misc/cxl/of.c rc = read_phys_addr(np, "reg", afu); afu 167 drivers/misc/cxl/of.c rc = read_phys_addr(np, "assigned-addresses", afu); afu 171 drivers/misc/cxl/of.c if (afu->psn_phys == 0) afu 172 drivers/misc/cxl/of.c afu->psa = false; afu 174 drivers/misc/cxl/of.c afu->psa = true; afu 181 drivers/misc/cxl/of.c read_prop_dword(np, "ibm,#processes", &afu->max_procs_virtualised); afu 187 drivers/misc/cxl/of.c read_vpd(NULL, afu); afu 190 drivers/misc/cxl/of.c read_prop_dword(np, "ibm,max-ints-per-process", &afu->guest->max_ints); afu 191 drivers/misc/cxl/of.c afu->irqs_max = afu->guest->max_ints; afu 193 drivers/misc/cxl/of.c prop = read_prop_dword(np, "ibm,min-ints-per-process", &afu->pp_irqs); afu 199 drivers/misc/cxl/of.c afu->pp_irqs--; afu 207 drivers/misc/cxl/of.c read_prop64_dword(np, "ibm,error-buffer-size", &afu->eb_len); afu 208 drivers/misc/cxl/of.c afu->eb_offset = 0; afu 213 drivers/misc/cxl/of.c read_prop64_dword(np, "ibm,config-record-size", &afu->crs_len); afu 214 drivers/misc/cxl/of.c afu->crs_offset = 0; afu 216 drivers/misc/cxl/of.c read_prop_dword(np, "ibm,#config-records", &afu->crs_num); afu 219 drivers/misc/cxl/of.c for (i = 0; i < afu->crs_num; i++) { afu 220 drivers/misc/cxl/of.c rc = cxl_ops->afu_cr_read16(afu, i, PCI_DEVICE_ID, afu 225 drivers/misc/cxl/of.c rc = cxl_ops->afu_cr_read16(afu, i, PCI_VENDOR_ID, afu 230 drivers/misc/cxl/of.c rc = cxl_ops->afu_cr_read32(afu, i, PCI_CLASS_REVISION, afu 255 drivers/misc/cxl/of.c afu->pp_psa = true; afu 257 drivers/misc/cxl/of.c afu->pp_psa = false; afu 267 drivers/misc/cxl/of.c afu->serr_hwirq = val; afu 269 drivers/misc/cxl/of.c pr_devel("AFU handle: %#llx\n", afu->guest->handle); afu 271 drivers/misc/cxl/of.c afu->guest->p2n_phys, afu->guest->p2n_size); afu 273 drivers/misc/cxl/of.c afu->psn_phys, afu->adapter->ps_size); afu 275 drivers/misc/cxl/of.c afu->max_procs_virtualised); afu 276 drivers/misc/cxl/of.c pr_devel("Per-process irqs min=%i, max=%i\n", afu->pp_irqs, afu 277 drivers/misc/cxl/of.c afu->irqs_max); afu 278 drivers/misc/cxl/of.c pr_devel("Slice error interrupt=%#lx\n", afu->serr_hwirq); afu 438 drivers/misc/cxl/of.c int afu; afu 441 drivers/misc/cxl/of.c for (afu = 0; afu < adapter->slices; afu++) afu 442 drivers/misc/cxl/of.c cxl_guest_remove_afu(adapter->afu[afu]); afu 89 drivers/misc/cxl/pci.c #define AFUD_READ(afu, off) in_be64(afu->native->afu_desc_mmio + off) afu 90 drivers/misc/cxl/pci.c #define AFUD_READ_LE(afu, off) in_le64(afu->native->afu_desc_mmio + off) afu 94 drivers/misc/cxl/pci.c #define AFUD_READ_INFO(afu) AFUD_READ(afu, 0x0) afu 103 drivers/misc/cxl/pci.c #define AFUD_READ_CR(afu) AFUD_READ(afu, 0x20) afu 105 drivers/misc/cxl/pci.c #define AFUD_READ_CR_OFF(afu) AFUD_READ(afu, 0x28) afu 106 drivers/misc/cxl/pci.c #define AFUD_READ_PPPSA(afu) AFUD_READ(afu, 0x30) afu 110 drivers/misc/cxl/pci.c #define AFUD_READ_PPPSA_OFF(afu) AFUD_READ(afu, 0x38) afu 111 drivers/misc/cxl/pci.c #define AFUD_READ_EB(afu) AFUD_READ(afu, 0x40) afu 113 drivers/misc/cxl/pci.c #define AFUD_READ_EB_OFF(afu) AFUD_READ(afu, 0x48) afu 268 drivers/misc/cxl/pci.c static void dump_afu_descriptor(struct cxl_afu *afu) afu 274 drivers/misc/cxl/pci.c dev_info(&afu->dev, "afu desc: %30s: %#llx\n", name, what) afu 276 drivers/misc/cxl/pci.c val = AFUD_READ_INFO(afu); afu 283 drivers/misc/cxl/pci.c val = AFUD_READ(afu, 0x8); afu 285 drivers/misc/cxl/pci.c val = AFUD_READ(afu, 0x10); afu 287 drivers/misc/cxl/pci.c val = AFUD_READ(afu, 0x18); afu 290 drivers/misc/cxl/pci.c val = AFUD_READ_CR(afu); afu 295 drivers/misc/cxl/pci.c val = AFUD_READ_CR_OFF(afu); afu 299 drivers/misc/cxl/pci.c val = AFUD_READ_PPPSA(afu); afu 303 drivers/misc/cxl/pci.c val = AFUD_READ_PPPSA_OFF(afu); afu 306 drivers/misc/cxl/pci.c val = AFUD_READ_EB(afu); afu 310 drivers/misc/cxl/pci.c val = AFUD_READ_EB_OFF(afu); afu 314 drivers/misc/cxl/pci.c val = AFUD_READ_LE(afu, afu_cr_off + i * afu_cr_len); afu 637 drivers/misc/cxl/pci.c static int init_implementation_afu_regs_psl9(struct cxl_afu *afu) afu 642 drivers/misc/cxl/pci.c static int init_implementation_afu_regs_psl8(struct cxl_afu *afu) afu 645 drivers/misc/cxl/pci.c cxl_p1n_write(afu, CXL_PSL_APCALLOC_A, 0xFFFFFFFEFEFEFEFEULL); afu 647 drivers/misc/cxl/pci.c cxl_p1n_write(afu, CXL_PSL_COALLOC_A, 0xFF000000FEFEFEFEULL); afu 649 drivers/misc/cxl/pci.c cxl_p1n_write(afu, CXL_PSL_SLICE_TRACE, 0x0000FFFF00000000ULL); afu 650 drivers/misc/cxl/pci.c cxl_p1n_write(afu, CXL_PSL_RXCTL_A, CXL_PSL_RXCTL_AFUHP_4S); afu 782 drivers/misc/cxl/pci.c static int pci_map_slice_regs(struct cxl_afu *afu, struct cxl *adapter, struct pci_dev *dev) afu 788 drivers/misc/cxl/pci.c p1n_base = p1_base(dev) + 0x10000 + (afu->slice * p1n_size); afu 789 drivers/misc/cxl/pci.c p2n_base = p2_base(dev) + (afu->slice * p2n_size); afu 790 drivers/misc/cxl/pci.c afu->psn_phys = p2_base(dev) + (adapter->native->ps_off + (afu->slice * adapter->ps_size)); afu 791 drivers/misc/cxl/pci.c afu_desc = p2_base(dev) + adapter->native->afu_desc_off + (afu->slice * adapter->native->afu_desc_size); afu 793 drivers/misc/cxl/pci.c if (!(afu->native->p1n_mmio = ioremap(p1n_base, p1n_size))) afu 795 drivers/misc/cxl/pci.c if (!(afu->p2n_mmio = ioremap(p2n_base, p2n_size))) afu 798 drivers/misc/cxl/pci.c if (!(afu->native->afu_desc_mmio = ioremap(afu_desc, adapter->native->afu_desc_size))) afu 804 drivers/misc/cxl/pci.c iounmap(afu->p2n_mmio); afu 806 drivers/misc/cxl/pci.c iounmap(afu->native->p1n_mmio); afu 808 drivers/misc/cxl/pci.c dev_err(&afu->dev, "Error mapping AFU MMIO regions\n"); afu 812 drivers/misc/cxl/pci.c static void pci_unmap_slice_regs(struct cxl_afu *afu) afu 814 drivers/misc/cxl/pci.c if (afu->p2n_mmio) { afu 815 drivers/misc/cxl/pci.c iounmap(afu->p2n_mmio); afu 816 drivers/misc/cxl/pci.c afu->p2n_mmio = NULL; afu 818 drivers/misc/cxl/pci.c if (afu->native->p1n_mmio) { afu 819 drivers/misc/cxl/pci.c iounmap(afu->native->p1n_mmio); afu 820 drivers/misc/cxl/pci.c afu->native->p1n_mmio = NULL; afu 822 drivers/misc/cxl/pci.c if (afu->native->afu_desc_mmio) { afu 823 drivers/misc/cxl/pci.c iounmap(afu->native->afu_desc_mmio); afu 824 drivers/misc/cxl/pci.c afu->native->afu_desc_mmio = NULL; afu 830 drivers/misc/cxl/pci.c struct cxl_afu *afu = to_cxl_afu(dev); afu 834 drivers/misc/cxl/pci.c idr_destroy(&afu->contexts_idr); afu 835 drivers/misc/cxl/pci.c cxl_release_spa(afu); afu 837 drivers/misc/cxl/pci.c kfree(afu->native); afu 838 drivers/misc/cxl/pci.c kfree(afu); afu 842 drivers/misc/cxl/pci.c static int cxl_read_afu_descriptor(struct cxl_afu *afu) afu 846 drivers/misc/cxl/pci.c val = AFUD_READ_INFO(afu); afu 847 drivers/misc/cxl/pci.c afu->pp_irqs = AFUD_NUM_INTS_PER_PROC(val); afu 848 drivers/misc/cxl/pci.c afu->max_procs_virtualised = AFUD_NUM_PROCS(val); afu 849 drivers/misc/cxl/pci.c afu->crs_num = AFUD_NUM_CRS(val); afu 852 drivers/misc/cxl/pci.c afu->modes_supported |= CXL_MODE_DIRECTED; afu 854 drivers/misc/cxl/pci.c afu->modes_supported |= CXL_MODE_DEDICATED; afu 856 drivers/misc/cxl/pci.c afu->modes_supported |= CXL_MODE_TIME_SLICED; afu 858 drivers/misc/cxl/pci.c val = AFUD_READ_PPPSA(afu); afu 859 drivers/misc/cxl/pci.c afu->pp_size = AFUD_PPPSA_LEN(val) * 4096; afu 860 drivers/misc/cxl/pci.c afu->psa = AFUD_PPPSA_PSA(val); afu 861 drivers/misc/cxl/pci.c if ((afu->pp_psa = AFUD_PPPSA_PP(val))) afu 862 drivers/misc/cxl/pci.c afu->native->pp_offset = AFUD_READ_PPPSA_OFF(afu); afu 864 drivers/misc/cxl/pci.c val = AFUD_READ_CR(afu); afu 865 drivers/misc/cxl/pci.c afu->crs_len = AFUD_CR_LEN(val) * 256; afu 866 drivers/misc/cxl/pci.c afu->crs_offset = AFUD_READ_CR_OFF(afu); afu 870 drivers/misc/cxl/pci.c afu->eb_len = AFUD_EB_LEN(AFUD_READ_EB(afu)) * 4096; afu 871 drivers/misc/cxl/pci.c afu->eb_offset = AFUD_READ_EB_OFF(afu); afu 874 drivers/misc/cxl/pci.c if (EXTRACT_PPC_BITS(afu->eb_offset, 0, 11) != 0) { afu 875 drivers/misc/cxl/pci.c dev_warn(&afu->dev, afu 877 drivers/misc/cxl/pci.c afu->eb_offset); afu 878 drivers/misc/cxl/pci.c dev_info(&afu->dev, afu 881 drivers/misc/cxl/pci.c afu->eb_len = 0; afu 887 drivers/misc/cxl/pci.c static int cxl_afu_descriptor_looks_ok(struct cxl_afu *afu) afu 892 drivers/misc/cxl/pci.c if (afu->psa && afu->adapter->ps_size < afu 893 drivers/misc/cxl/pci.c (afu->native->pp_offset + afu->pp_size*afu->max_procs_virtualised)) { afu 894 drivers/misc/cxl/pci.c dev_err(&afu->dev, "per-process PSA can't fit inside the PSA!\n"); afu 898 drivers/misc/cxl/pci.c if (afu->pp_psa && (afu->pp_size < PAGE_SIZE)) afu 899 drivers/misc/cxl/pci.c dev_warn(&afu->dev, "AFU uses pp_size(%#016llx) < PAGE_SIZE per-process PSA!\n", afu->pp_size); afu 901 drivers/misc/cxl/pci.c for (i = 0; i < afu->crs_num; i++) { afu 902 drivers/misc/cxl/pci.c rc = cxl_ops->afu_cr_read32(afu, i, 0, &val); afu 904 drivers/misc/cxl/pci.c dev_err(&afu->dev, "ABORTING: AFU configuration record %i is invalid\n", i); afu 909 drivers/misc/cxl/pci.c if ((afu->modes_supported & ~CXL_MODE_DEDICATED) && afu->max_procs_virtualised == 0) { afu 920 drivers/misc/cxl/pci.c dev_err(&afu->dev, "AFU does not support any processes\n"); afu 927 drivers/misc/cxl/pci.c static int sanitise_afu_regs_psl9(struct cxl_afu *afu) afu 936 drivers/misc/cxl/pci.c reg = cxl_p2n_read(afu, CXL_AFU_Cntl_An); afu 938 drivers/misc/cxl/pci.c dev_warn(&afu->dev, "WARNING: AFU was not disabled: %#016llx\n", reg); afu 939 drivers/misc/cxl/pci.c if (cxl_ops->afu_reset(afu)) afu 941 drivers/misc/cxl/pci.c if (cxl_afu_disable(afu)) afu 943 drivers/misc/cxl/pci.c if (cxl_psl_purge(afu)) afu 946 drivers/misc/cxl/pci.c cxl_p1n_write(afu, CXL_PSL_SPAP_An, 0x0000000000000000); afu 947 drivers/misc/cxl/pci.c cxl_p1n_write(afu, CXL_PSL_AMBAR_An, 0x0000000000000000); afu 948 drivers/misc/cxl/pci.c reg = cxl_p2n_read(afu, CXL_PSL_DSISR_An); afu 950 drivers/misc/cxl/pci.c dev_warn(&afu->dev, "AFU had pending DSISR: %#016llx\n", reg); afu 952 drivers/misc/cxl/pci.c cxl_p2n_write(afu, CXL_PSL_TFC_An, CXL_PSL_TFC_An_AE); afu 954 drivers/misc/cxl/pci.c cxl_p2n_write(afu, CXL_PSL_TFC_An, CXL_PSL_TFC_An_A); afu 956 drivers/misc/cxl/pci.c if (afu->adapter->native->sl_ops->register_serr_irq) { afu 957 drivers/misc/cxl/pci.c reg = cxl_p1n_read(afu, CXL_PSL_SERR_An); afu 960 drivers/misc/cxl/pci.c dev_warn(&afu->dev, "AFU had pending SERR: %#016llx\n", reg); afu 961 drivers/misc/cxl/pci.c cxl_p1n_write(afu, CXL_PSL_SERR_An, reg & ~0xffff); afu 964 drivers/misc/cxl/pci.c reg = cxl_p2n_read(afu, CXL_PSL_ErrStat_An); afu 966 drivers/misc/cxl/pci.c dev_warn(&afu->dev, "AFU had pending error status: %#016llx\n", reg); afu 967 drivers/misc/cxl/pci.c cxl_p2n_write(afu, CXL_PSL_ErrStat_An, reg); afu 973 drivers/misc/cxl/pci.c static int sanitise_afu_regs_psl8(struct cxl_afu *afu) afu 982 drivers/misc/cxl/pci.c reg = cxl_p2n_read(afu, CXL_AFU_Cntl_An); afu 984 drivers/misc/cxl/pci.c dev_warn(&afu->dev, "WARNING: AFU was not disabled: %#016llx\n", reg); afu 985 drivers/misc/cxl/pci.c if (cxl_ops->afu_reset(afu)) afu 987 drivers/misc/cxl/pci.c if (cxl_afu_disable(afu)) afu 989 drivers/misc/cxl/pci.c if (cxl_psl_purge(afu)) afu 992 drivers/misc/cxl/pci.c cxl_p1n_write(afu, CXL_PSL_SPAP_An, 0x0000000000000000); afu 993 drivers/misc/cxl/pci.c cxl_p1n_write(afu, CXL_PSL_IVTE_Limit_An, 0x0000000000000000); afu 994 drivers/misc/cxl/pci.c cxl_p1n_write(afu, CXL_PSL_IVTE_Offset_An, 0x0000000000000000); afu 995 drivers/misc/cxl/pci.c cxl_p1n_write(afu, CXL_PSL_AMBAR_An, 0x0000000000000000); afu 996 drivers/misc/cxl/pci.c cxl_p1n_write(afu, CXL_PSL_SPOffset_An, 0x0000000000000000); afu 997 drivers/misc/cxl/pci.c cxl_p1n_write(afu, CXL_HAURP_An, 0x0000000000000000); afu 998 drivers/misc/cxl/pci.c cxl_p2n_write(afu, CXL_CSRP_An, 0x0000000000000000); afu 999 drivers/misc/cxl/pci.c cxl_p2n_write(afu, CXL_AURP1_An, 0x0000000000000000); afu 1000 drivers/misc/cxl/pci.c cxl_p2n_write(afu, CXL_AURP0_An, 0x0000000000000000); afu 1001 drivers/misc/cxl/pci.c cxl_p2n_write(afu, CXL_SSTP1_An, 0x0000000000000000); afu 1002 drivers/misc/cxl/pci.c cxl_p2n_write(afu, CXL_SSTP0_An, 0x0000000000000000); afu 1003 drivers/misc/cxl/pci.c reg = cxl_p2n_read(afu, CXL_PSL_DSISR_An); afu 1005 drivers/misc/cxl/pci.c dev_warn(&afu->dev, "AFU had pending DSISR: %#016llx\n", reg); afu 1007 drivers/misc/cxl/pci.c cxl_p2n_write(afu, CXL_PSL_TFC_An, CXL_PSL_TFC_An_AE); afu 1009 drivers/misc/cxl/pci.c cxl_p2n_write(afu, CXL_PSL_TFC_An, CXL_PSL_TFC_An_A); afu 1011 drivers/misc/cxl/pci.c if (afu->adapter->native->sl_ops->register_serr_irq) { afu 1012 drivers/misc/cxl/pci.c reg = cxl_p1n_read(afu, CXL_PSL_SERR_An); afu 1015 drivers/misc/cxl/pci.c dev_warn(&afu->dev, "AFU had pending SERR: %#016llx\n", reg); afu 1016 drivers/misc/cxl/pci.c cxl_p1n_write(afu, CXL_PSL_SERR_An, reg & ~0xffff); afu 1019 drivers/misc/cxl/pci.c reg = cxl_p2n_read(afu, CXL_PSL_ErrStat_An); afu 1021 drivers/misc/cxl/pci.c dev_warn(&afu->dev, "AFU had pending error status: %#016llx\n", reg); afu 1022 drivers/misc/cxl/pci.c cxl_p2n_write(afu, CXL_PSL_ErrStat_An, reg); afu 1035 drivers/misc/cxl/pci.c ssize_t cxl_pci_afu_read_err_buffer(struct cxl_afu *afu, char *buf, afu 1041 drivers/misc/cxl/pci.c const void __iomem *ebuf = afu->native->afu_desc_mmio + afu->eb_offset; afu 1043 drivers/misc/cxl/pci.c if (count == 0 || off < 0 || (size_t)off >= afu->eb_len) afu 1047 drivers/misc/cxl/pci.c count = min((size_t)(afu->eb_len - off), count); afu 1072 drivers/misc/cxl/pci.c static int pci_configure_afu(struct cxl_afu *afu, struct cxl *adapter, struct pci_dev *dev) afu 1076 drivers/misc/cxl/pci.c if ((rc = pci_map_slice_regs(afu, adapter, dev))) afu 1080 drivers/misc/cxl/pci.c rc = adapter->native->sl_ops->sanitise_afu_regs(afu); afu 1086 drivers/misc/cxl/pci.c if ((rc = cxl_ops->afu_reset(afu))) afu 1090 drivers/misc/cxl/pci.c dump_afu_descriptor(afu); afu 1092 drivers/misc/cxl/pci.c if ((rc = cxl_read_afu_descriptor(afu))) afu 1095 drivers/misc/cxl/pci.c if ((rc = cxl_afu_descriptor_looks_ok(afu))) afu 1099 drivers/misc/cxl/pci.c if ((rc = adapter->native->sl_ops->afu_regs_init(afu))) afu 1103 drivers/misc/cxl/pci.c if ((rc = adapter->native->sl_ops->register_serr_irq(afu))) afu 1106 drivers/misc/cxl/pci.c if ((rc = cxl_native_register_psl_irq(afu))) afu 1109 drivers/misc/cxl/pci.c atomic_set(&afu->configured_state, 0); afu 1114 drivers/misc/cxl/pci.c adapter->native->sl_ops->release_serr_irq(afu); afu 1116 drivers/misc/cxl/pci.c pci_unmap_slice_regs(afu); afu 1120 drivers/misc/cxl/pci.c static void pci_deconfigure_afu(struct cxl_afu *afu) afu 1126 drivers/misc/cxl/pci.c if (atomic_read(&afu->configured_state) != -1) { afu 1127 drivers/misc/cxl/pci.c while (atomic_cmpxchg(&afu->configured_state, 0, -1) != -1) afu 1130 drivers/misc/cxl/pci.c cxl_native_release_psl_irq(afu); afu 1131 drivers/misc/cxl/pci.c if (afu->adapter->native->sl_ops->release_serr_irq) afu 1132 drivers/misc/cxl/pci.c afu->adapter->native->sl_ops->release_serr_irq(afu); afu 1133 drivers/misc/cxl/pci.c pci_unmap_slice_regs(afu); afu 1138 drivers/misc/cxl/pci.c struct cxl_afu *afu; afu 1141 drivers/misc/cxl/pci.c afu = cxl_alloc_afu(adapter, slice); afu 1142 drivers/misc/cxl/pci.c if (!afu) afu 1145 drivers/misc/cxl/pci.c afu->native = kzalloc(sizeof(struct cxl_afu_native), GFP_KERNEL); afu 1146 drivers/misc/cxl/pci.c if (!afu->native) afu 1149 drivers/misc/cxl/pci.c mutex_init(&afu->native->spa_mutex); afu 1151 drivers/misc/cxl/pci.c rc = dev_set_name(&afu->dev, "afu%i.%i", adapter->adapter_num, slice); afu 1155 drivers/misc/cxl/pci.c rc = pci_configure_afu(afu, adapter, dev); afu 1160 drivers/misc/cxl/pci.c cxl_debugfs_afu_add(afu); afu 1166 drivers/misc/cxl/pci.c if ((rc = cxl_register_afu(afu))) afu 1169 drivers/misc/cxl/pci.c if ((rc = cxl_sysfs_afu_add(afu))) afu 1172 drivers/misc/cxl/pci.c adapter->afu[afu->slice] = afu; afu 1174 drivers/misc/cxl/pci.c if ((rc = cxl_pci_vphb_add(afu))) afu 1175 drivers/misc/cxl/pci.c dev_info(&afu->dev, "Can't register vPHB\n"); afu 1180 drivers/misc/cxl/pci.c pci_deconfigure_afu(afu); afu 1181 drivers/misc/cxl/pci.c cxl_debugfs_afu_remove(afu); afu 1182 drivers/misc/cxl/pci.c device_unregister(&afu->dev); afu 1186 drivers/misc/cxl/pci.c kfree(afu->native); afu 1188 drivers/misc/cxl/pci.c kfree(afu); afu 1193 drivers/misc/cxl/pci.c static void cxl_pci_remove_afu(struct cxl_afu *afu) afu 1197 drivers/misc/cxl/pci.c if (!afu) afu 1200 drivers/misc/cxl/pci.c cxl_pci_vphb_remove(afu); afu 1201 drivers/misc/cxl/pci.c cxl_sysfs_afu_remove(afu); afu 1202 drivers/misc/cxl/pci.c cxl_debugfs_afu_remove(afu); afu 1204 drivers/misc/cxl/pci.c spin_lock(&afu->adapter->afu_list_lock); afu 1205 drivers/misc/cxl/pci.c afu->adapter->afu[afu->slice] = NULL; afu 1206 drivers/misc/cxl/pci.c spin_unlock(&afu->adapter->afu_list_lock); afu 1208 drivers/misc/cxl/pci.c cxl_context_detach_all(afu); afu 1209 drivers/misc/cxl/pci.c cxl_ops->afu_deactivate_mode(afu, afu->current_mode); afu 1211 drivers/misc/cxl/pci.c pci_deconfigure_afu(afu); afu 1212 drivers/misc/cxl/pci.c device_unregister(&afu->dev); afu 1567 drivers/misc/cxl/pci.c if (adapter->afu[slice]) afu 1568 drivers/misc/cxl/pci.c cxl_p1n_write(adapter->afu[slice], CXL_PSL_SLICE_TRACE, afu 1769 drivers/misc/cxl/pci.c rc = cxl_afu_select_best_mode(adapter->afu[slice]); afu 1780 drivers/misc/cxl/pci.c struct cxl_afu *afu; afu 1788 drivers/misc/cxl/pci.c afu = adapter->afu[i]; afu 1789 drivers/misc/cxl/pci.c cxl_pci_remove_afu(afu); afu 1794 drivers/misc/cxl/pci.c static pci_ers_result_t cxl_vphb_error_detected(struct cxl_afu *afu, afu 1804 drivers/misc/cxl/pci.c if (afu == NULL || afu->phb == NULL) afu 1807 drivers/misc/cxl/pci.c list_for_each_entry(afu_dev, &afu->phb->bus->devices, bus_list) { afu 1830 drivers/misc/cxl/pci.c struct cxl_afu *afu; afu 1845 drivers/misc/cxl/pci.c afu = adapter->afu[i]; afu 1850 drivers/misc/cxl/pci.c cxl_vphb_error_detected(afu, state); afu 1939 drivers/misc/cxl/pci.c afu = adapter->afu[i]; afu 1941 drivers/misc/cxl/pci.c if (afu == NULL) afu 1944 drivers/misc/cxl/pci.c afu_result = cxl_vphb_error_detected(afu, state); afu 1945 drivers/misc/cxl/pci.c cxl_context_detach_all(afu); afu 1946 drivers/misc/cxl/pci.c cxl_ops->afu_deactivate_mode(afu, afu->current_mode); afu 1947 drivers/misc/cxl/pci.c pci_deconfigure_afu(afu); afu 1972 drivers/misc/cxl/pci.c struct cxl_afu *afu; afu 1991 drivers/misc/cxl/pci.c afu = adapter->afu[i]; afu 1993 drivers/misc/cxl/pci.c if (afu == NULL) afu 1996 drivers/misc/cxl/pci.c if (pci_configure_afu(afu, adapter, pdev)) afu 1999 drivers/misc/cxl/pci.c if (cxl_afu_select_best_mode(afu)) afu 2002 drivers/misc/cxl/pci.c if (afu->phb == NULL) afu 2005 drivers/misc/cxl/pci.c list_for_each_entry(afu_dev, &afu->phb->bus->devices, bus_list) { afu 2020 drivers/misc/cxl/pci.c if (cxl_ops->afu_check_and_enable(afu)) afu 2061 drivers/misc/cxl/pci.c struct cxl_afu *afu; afu 2071 drivers/misc/cxl/pci.c afu = adapter->afu[i]; afu 2073 drivers/misc/cxl/pci.c if (afu == NULL || afu->phb == NULL) afu 2076 drivers/misc/cxl/pci.c list_for_each_entry(afu_dev, &afu->phb->bus->devices, bus_list) { afu 204 drivers/misc/cxl/sysfs.c struct cxl_afu *afu = to_afu_chardev_m(device); afu 206 drivers/misc/cxl/sysfs.c return scnprintf(buf, PAGE_SIZE, "%llu\n", afu->adapter->ps_size); afu 213 drivers/misc/cxl/sysfs.c struct cxl_afu *afu = to_afu_chardev_m(device); afu 215 drivers/misc/cxl/sysfs.c return scnprintf(buf, PAGE_SIZE, "%llu\n", afu->native->pp_offset); afu 222 drivers/misc/cxl/sysfs.c struct cxl_afu *afu = to_afu_chardev_m(device); afu 224 drivers/misc/cxl/sysfs.c return scnprintf(buf, PAGE_SIZE, "%llu\n", afu->pp_size); afu 240 drivers/misc/cxl/sysfs.c struct cxl_afu *afu = to_cxl_afu(device); afu 242 drivers/misc/cxl/sysfs.c if (afu->pp_size) afu 243 drivers/misc/cxl/sysfs.c return scnprintf(buf, PAGE_SIZE, "%llu\n", afu->pp_size); afu 244 drivers/misc/cxl/sysfs.c return scnprintf(buf, PAGE_SIZE, "%llu\n", afu->adapter->ps_size); afu 251 drivers/misc/cxl/sysfs.c struct cxl_afu *afu = to_cxl_afu(device); afu 255 drivers/misc/cxl/sysfs.c mutex_lock(&afu->contexts_lock); afu 256 drivers/misc/cxl/sysfs.c if (!idr_is_empty(&afu->contexts_idr)) { afu 261 drivers/misc/cxl/sysfs.c if ((rc = cxl_ops->afu_reset(afu))) afu 266 drivers/misc/cxl/sysfs.c mutex_unlock(&afu->contexts_lock); afu 274 drivers/misc/cxl/sysfs.c struct cxl_afu *afu = to_cxl_afu(device); afu 276 drivers/misc/cxl/sysfs.c return scnprintf(buf, PAGE_SIZE, "%i\n", afu->pp_irqs); afu 283 drivers/misc/cxl/sysfs.c struct cxl_afu *afu = to_cxl_afu(device); afu 285 drivers/misc/cxl/sysfs.c return scnprintf(buf, PAGE_SIZE, "%i\n", afu->irqs_max); afu 292 drivers/misc/cxl/sysfs.c struct cxl_afu *afu = to_cxl_afu(device); afu 300 drivers/misc/cxl/sysfs.c if (irqs_max < afu->pp_irqs) afu 304 drivers/misc/cxl/sysfs.c if (irqs_max > afu->adapter->user_irqs) afu 308 drivers/misc/cxl/sysfs.c if (irqs_max > afu->guest->max_ints) afu 312 drivers/misc/cxl/sysfs.c afu->irqs_max = irqs_max; afu 319 drivers/misc/cxl/sysfs.c struct cxl_afu *afu = to_cxl_afu(device); afu 322 drivers/misc/cxl/sysfs.c if (afu->modes_supported & CXL_MODE_DEDICATED) afu 324 drivers/misc/cxl/sysfs.c if (afu->modes_supported & CXL_MODE_DIRECTED) afu 333 drivers/misc/cxl/sysfs.c struct cxl_afu *afu = to_cxl_afu(device); afu 335 drivers/misc/cxl/sysfs.c switch (afu->prefault_mode) { afu 349 drivers/misc/cxl/sysfs.c struct cxl_afu *afu = to_cxl_afu(device); afu 370 drivers/misc/cxl/sysfs.c afu->prefault_mode = mode; afu 378 drivers/misc/cxl/sysfs.c struct cxl_afu *afu = to_cxl_afu(device); afu 380 drivers/misc/cxl/sysfs.c if (afu->current_mode == CXL_MODE_DEDICATED) afu 382 drivers/misc/cxl/sysfs.c if (afu->current_mode == CXL_MODE_DIRECTED) afu 390 drivers/misc/cxl/sysfs.c struct cxl_afu *afu = to_cxl_afu(device); afu 395 drivers/misc/cxl/sysfs.c mutex_lock(&afu->contexts_lock); afu 396 drivers/misc/cxl/sysfs.c if (!idr_is_empty(&afu->contexts_idr)) afu 415 drivers/misc/cxl/sysfs.c old_mode = afu->current_mode; afu 416 drivers/misc/cxl/sysfs.c afu->current_mode = 0; afu 417 drivers/misc/cxl/sysfs.c afu->num_procs = 0; afu 419 drivers/misc/cxl/sysfs.c mutex_unlock(&afu->contexts_lock); afu 421 drivers/misc/cxl/sysfs.c if ((rc = cxl_ops->afu_deactivate_mode(afu, old_mode))) afu 423 drivers/misc/cxl/sysfs.c if ((rc = cxl_ops->afu_activate_mode(afu, mode))) afu 428 drivers/misc/cxl/sysfs.c mutex_unlock(&afu->contexts_lock); afu 450 drivers/misc/cxl/sysfs.c struct cxl_afu *afu = to_cxl_afu(kobj_to_dev(kobj)); afu 452 drivers/misc/cxl/sysfs.c return cxl_ops->afu_read_err_buffer(afu, buf, off, count); afu 545 drivers/misc/cxl/sysfs.c struct cxl_afu *afu = to_cxl_afu(kobj_to_dev(kobj->parent)); afu 550 drivers/misc/cxl/sysfs.c rc = cxl_ops->afu_cr_read64(afu, cr->cr, off & ~0x7, &val); afu 587 drivers/misc/cxl/sysfs.c static struct afu_config_record *cxl_sysfs_afu_new_cr(struct cxl_afu *afu, int cr_idx) afu 598 drivers/misc/cxl/sysfs.c rc = cxl_ops->afu_cr_read16(afu, cr_idx, PCI_DEVICE_ID, &cr->device); afu 601 drivers/misc/cxl/sysfs.c rc = cxl_ops->afu_cr_read16(afu, cr_idx, PCI_VENDOR_ID, &cr->vendor); afu 604 drivers/misc/cxl/sysfs.c rc = cxl_ops->afu_cr_read32(afu, cr_idx, PCI_CLASS_REVISION, &cr->class); afu 621 drivers/misc/cxl/sysfs.c cr->config_attr.size = afu->crs_len; afu 625 drivers/misc/cxl/sysfs.c &afu->dev.kobj, "cr%i", cr->cr); afu 648 drivers/misc/cxl/sysfs.c void cxl_sysfs_afu_remove(struct cxl_afu *afu) afu 655 drivers/misc/cxl/sysfs.c if (afu->eb_len) afu 656 drivers/misc/cxl/sysfs.c device_remove_bin_file(&afu->dev, &afu->attr_eb); afu 662 drivers/misc/cxl/sysfs.c device_remove_file(&afu->dev, &afu_attrs[i]); afu 665 drivers/misc/cxl/sysfs.c list_for_each_entry_safe(cr, tmp, &afu->crs, list) { afu 671 drivers/misc/cxl/sysfs.c int cxl_sysfs_afu_add(struct cxl_afu *afu) afu 677 drivers/misc/cxl/sysfs.c INIT_LIST_HEAD(&afu->crs); afu 683 drivers/misc/cxl/sysfs.c if ((rc = device_create_file(&afu->dev, &afu_attrs[i]))) afu 689 drivers/misc/cxl/sysfs.c if (afu->eb_len) { afu 690 drivers/misc/cxl/sysfs.c sysfs_attr_init(&afu->attr_eb.attr); afu 692 drivers/misc/cxl/sysfs.c afu->attr_eb.attr.name = "afu_err_buff"; afu 693 drivers/misc/cxl/sysfs.c afu->attr_eb.attr.mode = S_IRUGO; afu 694 drivers/misc/cxl/sysfs.c afu->attr_eb.size = afu->eb_len; afu 695 drivers/misc/cxl/sysfs.c afu->attr_eb.read = afu_eb_read; afu 697 drivers/misc/cxl/sysfs.c rc = device_create_bin_file(&afu->dev, &afu->attr_eb); afu 699 drivers/misc/cxl/sysfs.c dev_err(&afu->dev, afu 706 drivers/misc/cxl/sysfs.c for (i = 0; i < afu->crs_num; i++) { afu 707 drivers/misc/cxl/sysfs.c cr = cxl_sysfs_afu_new_cr(afu, i); afu 712 drivers/misc/cxl/sysfs.c list_add(&cr->list, &afu->crs); afu 718 drivers/misc/cxl/sysfs.c cxl_sysfs_afu_remove(afu); afu 722 drivers/misc/cxl/sysfs.c afu->eb_len = 0; afu 728 drivers/misc/cxl/sysfs.c device_remove_file(&afu->dev, &afu_attrs[i]); afu 733 drivers/misc/cxl/sysfs.c int cxl_sysfs_afu_m_add(struct cxl_afu *afu) afu 742 drivers/misc/cxl/sysfs.c if ((rc = device_create_file(afu->chardev_m, &afu_master_attrs[i]))) afu 754 drivers/misc/cxl/sysfs.c device_remove_file(afu->chardev_m, &afu_master_attrs[i]); afu 759 drivers/misc/cxl/sysfs.c void cxl_sysfs_afu_m_remove(struct cxl_afu *afu) afu 768 drivers/misc/cxl/sysfs.c device_remove_file(afu->chardev_m, &afu_master_attrs[i]); afu 70 drivers/misc/cxl/trace.h __field(u8, afu) afu 75 drivers/misc/cxl/trace.h __entry->card = ctx->afu->adapter->adapter_num; afu 76 drivers/misc/cxl/trace.h __entry->afu = ctx->afu->slice; afu 82 drivers/misc/cxl/trace.h __entry->afu, afu 95 drivers/misc/cxl/trace.h __field(u8, afu) afu 104 drivers/misc/cxl/trace.h __entry->card = ctx->afu->adapter->adapter_num; afu 105 drivers/misc/cxl/trace.h __entry->afu = ctx->afu->slice; afu 115 drivers/misc/cxl/trace.h __entry->afu, afu 136 drivers/misc/cxl/trace.h __field(u8, afu) afu 144 drivers/misc/cxl/trace.h __entry->card = ctx->afu->adapter->adapter_num; afu 145 drivers/misc/cxl/trace.h __entry->afu = ctx->afu->slice; afu 154 drivers/misc/cxl/trace.h __entry->afu, afu 169 drivers/misc/cxl/trace.h __field(u8, afu) afu 177 drivers/misc/cxl/trace.h __entry->card = ctx->afu->adapter->adapter_num; afu 178 drivers/misc/cxl/trace.h __entry->afu = ctx->afu->slice; afu 187 drivers/misc/cxl/trace.h __entry->afu, afu 203 drivers/misc/cxl/trace.h __field(u8, afu) afu 211 drivers/misc/cxl/trace.h __entry->card = ctx->afu->adapter->adapter_num; afu 212 drivers/misc/cxl/trace.h __entry->afu = ctx->afu->slice; afu 221 drivers/misc/cxl/trace.h __entry->afu, afu 236 drivers/misc/cxl/trace.h __field(u8, afu) afu 242 drivers/misc/cxl/trace.h __entry->card = ctx->afu->adapter->adapter_num; afu 243 drivers/misc/cxl/trace.h __entry->afu = ctx->afu->slice; afu 250 drivers/misc/cxl/trace.h __entry->afu, afu 263 drivers/misc/cxl/trace.h __field(u8, afu) afu 269 drivers/misc/cxl/trace.h __entry->card = ctx->afu->adapter->adapter_num; afu 270 drivers/misc/cxl/trace.h __entry->afu = ctx->afu->slice; afu 277 drivers/misc/cxl/trace.h __entry->afu, afu 290 drivers/misc/cxl/trace.h __field(u8, afu) afu 298 drivers/misc/cxl/trace.h __entry->card = ctx->afu->adapter->adapter_num; afu 299 drivers/misc/cxl/trace.h __entry->afu = ctx->afu->slice; afu 308 drivers/misc/cxl/trace.h __entry->afu, afu 323 drivers/misc/cxl/trace.h __field(u8, afu) afu 330 drivers/misc/cxl/trace.h __entry->card = ctx->afu->adapter->adapter_num; afu 331 drivers/misc/cxl/trace.h __entry->afu = ctx->afu->slice; afu 339 drivers/misc/cxl/trace.h __entry->afu, afu 353 drivers/misc/cxl/trace.h __field(u8, afu) afu 359 drivers/misc/cxl/trace.h __entry->card = ctx->afu->adapter->adapter_num; afu 360 drivers/misc/cxl/trace.h __entry->afu = ctx->afu->slice; afu 367 drivers/misc/cxl/trace.h __entry->afu, afu 380 drivers/misc/cxl/trace.h __field(u8, afu) afu 387 drivers/misc/cxl/trace.h __entry->card = ctx->afu->adapter->adapter_num; afu 388 drivers/misc/cxl/trace.h __entry->afu = ctx->afu->slice; afu 396 drivers/misc/cxl/trace.h __entry->afu, afu 404 drivers/misc/cxl/trace.h TP_PROTO(struct cxl_afu *afu, u64 cmd), afu 406 drivers/misc/cxl/trace.h TP_ARGS(afu, cmd), afu 410 drivers/misc/cxl/trace.h __field(u8, afu) afu 415 drivers/misc/cxl/trace.h __entry->card = afu->adapter->adapter_num; afu 416 drivers/misc/cxl/trace.h __entry->afu = afu->slice; afu 422 drivers/misc/cxl/trace.h __entry->afu, afu 428 drivers/misc/cxl/trace.h TP_PROTO(struct cxl_afu *afu, u64 cmd, int rc), afu 430 drivers/misc/cxl/trace.h TP_ARGS(afu, cmd, rc), afu 434 drivers/misc/cxl/trace.h __field(u8, afu) afu 440 drivers/misc/cxl/trace.h __entry->card = afu->adapter->adapter_num; afu 441 drivers/misc/cxl/trace.h __entry->afu = afu->slice; afu 448 drivers/misc/cxl/trace.h __entry->afu, afu 455 drivers/misc/cxl/trace.h TP_PROTO(struct cxl_afu *afu, u64 cmd), afu 456 drivers/misc/cxl/trace.h TP_ARGS(afu, cmd) afu 460 drivers/misc/cxl/trace.h TP_PROTO(struct cxl_afu *afu, u64 cmd, int rc), afu 461 drivers/misc/cxl/trace.h TP_ARGS(afu, cmd, rc) afu 465 drivers/misc/cxl/trace.h TP_PROTO(struct cxl_afu *afu, u64 cmd), afu 466 drivers/misc/cxl/trace.h TP_ARGS(afu, cmd), afu 470 drivers/misc/cxl/trace.h __entry->afu, afu 476 drivers/misc/cxl/trace.h TP_PROTO(struct cxl_afu *afu, u64 cmd, int rc), afu 477 drivers/misc/cxl/trace.h TP_ARGS(afu, cmd, rc), afu 481 drivers/misc/cxl/trace.h __entry->afu, afu 31 drivers/misc/cxl/vphb.c struct cxl_afu *afu; afu 35 drivers/misc/cxl/vphb.c afu = (struct cxl_afu *)phb->private_data; afu 37 drivers/misc/cxl/vphb.c if (!cxl_ops->link_ok(afu->adapter, afu)) { afu 53 drivers/misc/cxl/vphb.c return (cxl_ops->afu_check_and_enable(afu) == 0); afu 93 drivers/misc/cxl/vphb.c static void cxl_afu_configured_put(struct cxl_afu *afu) afu 95 drivers/misc/cxl/vphb.c atomic_dec_if_positive(&afu->configured_state); afu 98 drivers/misc/cxl/vphb.c static bool cxl_afu_configured_get(struct cxl_afu *afu) afu 100 drivers/misc/cxl/vphb.c return atomic_inc_unless_negative(&afu->configured_state); afu 104 drivers/misc/cxl/vphb.c struct cxl_afu *afu, int *_record) afu 109 drivers/misc/cxl/vphb.c if (record > afu->crs_num) afu 120 drivers/misc/cxl/vphb.c struct cxl_afu *afu; afu 125 drivers/misc/cxl/vphb.c afu = pci_bus_to_afu(bus); afu 127 drivers/misc/cxl/vphb.c if (afu == NULL || !cxl_afu_configured_get(afu)) afu 130 drivers/misc/cxl/vphb.c rc = cxl_pcie_config_info(bus, devfn, afu, &record); afu 136 drivers/misc/cxl/vphb.c rc = cxl_ops->afu_cr_read8(afu, record, offset, &val8); afu 140 drivers/misc/cxl/vphb.c rc = cxl_ops->afu_cr_read16(afu, record, offset, &val16); afu 144 drivers/misc/cxl/vphb.c rc = cxl_ops->afu_cr_read32(afu, record, offset, &val32); afu 152 drivers/misc/cxl/vphb.c cxl_afu_configured_put(afu); afu 160 drivers/misc/cxl/vphb.c struct cxl_afu *afu; afu 162 drivers/misc/cxl/vphb.c afu = pci_bus_to_afu(bus); afu 164 drivers/misc/cxl/vphb.c if (afu == NULL || !cxl_afu_configured_get(afu)) afu 167 drivers/misc/cxl/vphb.c rc = cxl_pcie_config_info(bus, devfn, afu, &record); afu 173 drivers/misc/cxl/vphb.c rc = cxl_ops->afu_cr_write8(afu, record, offset, val & 0xff); afu 176 drivers/misc/cxl/vphb.c rc = cxl_ops->afu_cr_write16(afu, record, offset, val & 0xffff); afu 179 drivers/misc/cxl/vphb.c rc = cxl_ops->afu_cr_write32(afu, record, offset, val); afu 186 drivers/misc/cxl/vphb.c cxl_afu_configured_put(afu); afu 209 drivers/misc/cxl/vphb.c int cxl_pci_vphb_add(struct cxl_afu *afu) afu 223 drivers/misc/cxl/vphb.c if (!afu->crs_num) afu 233 drivers/misc/cxl/vphb.c parent = afu->adapter->dev.parent; afu 248 drivers/misc/cxl/vphb.c phb->private_data = afu; afu 270 drivers/misc/cxl/vphb.c afu->phb = phb; afu 275 drivers/misc/cxl/vphb.c void cxl_pci_vphb_remove(struct cxl_afu *afu) afu 280 drivers/misc/cxl/vphb.c if (!afu || !afu->phb) afu 283 drivers/misc/cxl/vphb.c phb = afu->phb; afu 284 drivers/misc/cxl/vphb.c afu->phb = NULL; afu 21 drivers/misc/ocxl/afu_irq.c return (offset - ctx->afu->irq_base_offset) >> PAGE_SHIFT; afu 26 drivers/misc/ocxl/afu_irq.c return ctx->afu->irq_base_offset + (irq_id << PAGE_SHIFT); afu 127 drivers/misc/ocxl/afu_irq.c rc = ocxl_link_irq_alloc(ctx->afu->fn->link, &irq->hw_irq, afu 144 drivers/misc/ocxl/afu_irq.c ocxl_link_free_irq(ctx->afu->fn->link, irq->hw_irq); afu 164 drivers/misc/ocxl/afu_irq.c ocxl_link_free_irq(ctx->afu->fn->link, irq->hw_irq); afu 345 drivers/misc/ocxl/config.c struct ocxl_afu_config *afu) afu 355 drivers/misc/ocxl/config.c ptr = (u32 *) &afu->name[i]; afu 358 drivers/misc/ocxl/config.c afu->name[OCXL_AFU_NAME_SZ - 1] = '\0'; /* play safe */ afu 363 drivers/misc/ocxl/config.c struct ocxl_afu_config *afu) afu 374 drivers/misc/ocxl/config.c afu->global_mmio_bar = EXTRACT_BITS(val, 0, 2); afu 375 drivers/misc/ocxl/config.c afu->global_mmio_offset = EXTRACT_BITS(val, 16, 31) << 16; afu 380 drivers/misc/ocxl/config.c afu->global_mmio_offset += (u64) val << 32; afu 385 drivers/misc/ocxl/config.c afu->global_mmio_size = val; afu 393 drivers/misc/ocxl/config.c afu->pp_mmio_bar = EXTRACT_BITS(val, 0, 2); afu 394 drivers/misc/ocxl/config.c afu->pp_mmio_offset = EXTRACT_BITS(val, 16, 31) << 16; afu 399 drivers/misc/ocxl/config.c afu->pp_mmio_offset += (u64) val << 32; afu 404 drivers/misc/ocxl/config.c afu->pp_mmio_stride = val; afu 409 drivers/misc/ocxl/config.c static int read_afu_control(struct pci_dev *dev, struct ocxl_afu_config *afu) afu 415 drivers/misc/ocxl/config.c pos = find_dvsec_afu_ctrl(dev, afu->idx); afu 418 drivers/misc/ocxl/config.c afu->idx); afu 421 drivers/misc/ocxl/config.c afu->dvsec_afu_control_pos = pos; afu 424 drivers/misc/ocxl/config.c afu->pasid_supported_log = EXTRACT_BITS(val8, 0, 4); afu 427 drivers/misc/ocxl/config.c afu->actag_supported = EXTRACT_BITS(val16, 0, 11); afu 447 drivers/misc/ocxl/config.c static int validate_afu(struct pci_dev *dev, struct ocxl_afu_config *afu) afu 451 drivers/misc/ocxl/config.c if (!afu->name[0]) { afu 456 drivers/misc/ocxl/config.c if (!char_allowed(afu->name[i])) { afu 463 drivers/misc/ocxl/config.c if (afu->global_mmio_bar != 0 && afu 464 drivers/misc/ocxl/config.c afu->global_mmio_bar != 2 && afu 465 drivers/misc/ocxl/config.c afu->global_mmio_bar != 4) { afu 469 drivers/misc/ocxl/config.c if (afu->pp_mmio_bar != 0 && afu 470 drivers/misc/ocxl/config.c afu->pp_mmio_bar != 2 && afu 471 drivers/misc/ocxl/config.c afu->pp_mmio_bar != 4) { afu 488 drivers/misc/ocxl/config.c struct ocxl_afu_config *afu) afu 497 drivers/misc/ocxl/config.c afu->lpc_mem_offset = 0; afu 498 drivers/misc/ocxl/config.c afu->lpc_mem_size = 0; afu 499 drivers/misc/ocxl/config.c afu->special_purpose_mem_offset = 0; afu 500 drivers/misc/ocxl/config.c afu->special_purpose_mem_size = 0; afu 536 drivers/misc/ocxl/config.c afu->lpc_mem_offset = val32; afu 542 drivers/misc/ocxl/config.c afu->lpc_mem_offset |= (u64) val32 << 32; afu 563 drivers/misc/ocxl/config.c afu->lpc_mem_size = lpc_mem_size; afu 566 drivers/misc/ocxl/config.c afu->special_purpose_mem_offset = afu 567 drivers/misc/ocxl/config.c afu->lpc_mem_offset + lpc_mem_size; afu 568 drivers/misc/ocxl/config.c afu->special_purpose_mem_size = afu 575 drivers/misc/ocxl/config.c struct ocxl_afu_config *afu, u8 afu_idx) afu 585 drivers/misc/ocxl/config.c afu->idx = afu_idx; afu 588 drivers/misc/ocxl/config.c afu->idx); afu 590 drivers/misc/ocxl/config.c rc = read_afu_name(dev, fn, afu); afu 597 drivers/misc/ocxl/config.c afu->version_major = EXTRACT_BITS(val32, 24, 31); afu 598 drivers/misc/ocxl/config.c afu->version_minor = EXTRACT_BITS(val32, 16, 23); afu 599 drivers/misc/ocxl/config.c afu->afuc_type = EXTRACT_BITS(val32, 14, 15); afu 600 drivers/misc/ocxl/config.c afu->afum_type = EXTRACT_BITS(val32, 12, 13); afu 601 drivers/misc/ocxl/config.c afu->profile = EXTRACT_BITS(val32, 0, 7); afu 603 drivers/misc/ocxl/config.c rc = read_afu_mmio(dev, fn, afu); afu 607 drivers/misc/ocxl/config.c rc = read_afu_lpc_memory_info(dev, fn, afu); afu 611 drivers/misc/ocxl/config.c rc = read_afu_control(dev, afu); afu 616 drivers/misc/ocxl/config.c dev_dbg(&dev->dev, " name = %s\n", afu->name); afu 617 drivers/misc/ocxl/config.c dev_dbg(&dev->dev, " version = %d.%d\n", afu->version_major, afu 618 drivers/misc/ocxl/config.c afu->version_minor); afu 619 drivers/misc/ocxl/config.c dev_dbg(&dev->dev, " global mmio bar = %hhu\n", afu->global_mmio_bar); afu 621 drivers/misc/ocxl/config.c afu->global_mmio_offset); afu 622 drivers/misc/ocxl/config.c dev_dbg(&dev->dev, " global mmio size = %#x\n", afu->global_mmio_size); afu 623 drivers/misc/ocxl/config.c dev_dbg(&dev->dev, " pp mmio bar = %hhu\n", afu->pp_mmio_bar); afu 624 drivers/misc/ocxl/config.c dev_dbg(&dev->dev, " pp mmio offset = %#llx\n", afu->pp_mmio_offset); afu 625 drivers/misc/ocxl/config.c dev_dbg(&dev->dev, " pp mmio stride = %#x\n", afu->pp_mmio_stride); afu 626 drivers/misc/ocxl/config.c dev_dbg(&dev->dev, " lpc_mem offset = %#llx\n", afu->lpc_mem_offset); afu 627 drivers/misc/ocxl/config.c dev_dbg(&dev->dev, " lpc_mem size = %#llx\n", afu->lpc_mem_size); afu 629 drivers/misc/ocxl/config.c afu->special_purpose_mem_offset); afu 631 drivers/misc/ocxl/config.c afu->special_purpose_mem_size); afu 633 drivers/misc/ocxl/config.c afu->pasid_supported_log); afu 635 drivers/misc/ocxl/config.c afu->actag_supported); afu 637 drivers/misc/ocxl/config.c rc = validate_afu(dev, afu); afu 7 drivers/misc/ocxl/context.c int ocxl_context_alloc(struct ocxl_context **context, struct ocxl_afu *afu, afu 17 drivers/misc/ocxl/context.c ctx->afu = afu; afu 18 drivers/misc/ocxl/context.c mutex_lock(&afu->contexts_lock); afu 19 drivers/misc/ocxl/context.c pasid = idr_alloc(&afu->contexts_idr, ctx, afu->pasid_base, afu 20 drivers/misc/ocxl/context.c afu->pasid_base + afu->pasid_max, GFP_KERNEL); afu 22 drivers/misc/ocxl/context.c mutex_unlock(&afu->contexts_lock); afu 26 drivers/misc/ocxl/context.c afu->pasid_count++; afu 27 drivers/misc/ocxl/context.c mutex_unlock(&afu->contexts_lock); afu 44 drivers/misc/ocxl/context.c ocxl_afu_get(afu); afu 84 drivers/misc/ocxl/context.c rc = ocxl_link_add_pe(ctx->afu->fn->link, ctx->pasid, pidr, ctx->tidr, afu 116 drivers/misc/ocxl/context.c if (offset >= ctx->afu->config.pp_mmio_stride) afu 127 drivers/misc/ocxl/context.c pasid_off = ctx->pasid - ctx->afu->pasid_base; afu 128 drivers/misc/ocxl/context.c pp_mmio_addr = ctx->afu->pp_mmio_start + afu 129 drivers/misc/ocxl/context.c pasid_off * ctx->afu->config.pp_mmio_stride + afu 148 drivers/misc/ocxl/context.c if (offset < ctx->afu->irq_base_offset) afu 189 drivers/misc/ocxl/context.c (ctx->afu->config.pp_mmio_stride >> PAGE_SHIFT)) afu 198 drivers/misc/ocxl/context.c if ((vma->vm_pgoff << PAGE_SHIFT) < ctx->afu->irq_base_offset) afu 225 drivers/misc/ocxl/context.c dev = to_pci_dev(ctx->afu->fn->dev.parent); afu 226 drivers/misc/ocxl/context.c afu_control_pos = ctx->afu->config.dvsec_afu_control_pos; afu 228 drivers/misc/ocxl/context.c mutex_lock(&ctx->afu->afu_control_lock); afu 230 drivers/misc/ocxl/context.c mutex_unlock(&ctx->afu->afu_control_lock); afu 249 drivers/misc/ocxl/context.c rc = ocxl_link_remove_pe(ctx->afu->fn->link, ctx->pasid); afu 258 drivers/misc/ocxl/context.c void ocxl_context_detach_all(struct ocxl_afu *afu) afu 263 drivers/misc/ocxl/context.c mutex_lock(&afu->contexts_lock); afu 264 drivers/misc/ocxl/context.c idr_for_each_entry(&afu->contexts_idr, ctx, tmp) { afu 278 drivers/misc/ocxl/context.c mutex_unlock(&afu->contexts_lock); afu 283 drivers/misc/ocxl/context.c mutex_lock(&ctx->afu->contexts_lock); afu 284 drivers/misc/ocxl/context.c ctx->afu->pasid_count--; afu 285 drivers/misc/ocxl/context.c idr_remove(&ctx->afu->contexts_idr, ctx->pasid); afu 286 drivers/misc/ocxl/context.c mutex_unlock(&ctx->afu->contexts_lock); afu 291 drivers/misc/ocxl/context.c ocxl_afu_put(ctx->afu); afu 18 drivers/misc/ocxl/core.c struct ocxl_afu *afu; afu 20 drivers/misc/ocxl/core.c afu = kzalloc(sizeof(struct ocxl_afu), GFP_KERNEL); afu 21 drivers/misc/ocxl/core.c if (!afu) afu 24 drivers/misc/ocxl/core.c kref_init(&afu->kref); afu 25 drivers/misc/ocxl/core.c mutex_init(&afu->contexts_lock); afu 26 drivers/misc/ocxl/core.c mutex_init(&afu->afu_control_lock); afu 27 drivers/misc/ocxl/core.c idr_init(&afu->contexts_idr); afu 28 drivers/misc/ocxl/core.c afu->fn = fn; afu 30 drivers/misc/ocxl/core.c return afu; afu 35 drivers/misc/ocxl/core.c struct ocxl_afu *afu = container_of(kref, struct ocxl_afu, kref); afu 37 drivers/misc/ocxl/core.c idr_destroy(&afu->contexts_idr); afu 38 drivers/misc/ocxl/core.c ocxl_fn_put(afu->fn); afu 39 drivers/misc/ocxl/core.c kfree(afu); afu 42 drivers/misc/ocxl/core.c void ocxl_afu_get(struct ocxl_afu *afu) afu 44 drivers/misc/ocxl/core.c kref_get(&afu->kref); afu 48 drivers/misc/ocxl/core.c void ocxl_afu_put(struct ocxl_afu *afu) afu 50 drivers/misc/ocxl/core.c kref_put(&afu->kref, free_afu); afu 54 drivers/misc/ocxl/core.c static int assign_afu_actag(struct ocxl_afu *afu) afu 56 drivers/misc/ocxl/core.c struct ocxl_fn *fn = afu->fn; afu 64 drivers/misc/ocxl/core.c actag_count = afu->config.actag_supported * afu 72 drivers/misc/ocxl/core.c afu->actag_base = fn->actag_base + actag_offset; afu 73 drivers/misc/ocxl/core.c afu->actag_enabled = actag_count; afu 75 drivers/misc/ocxl/core.c ocxl_config_set_afu_actag(pci_dev, afu->config.dvsec_afu_control_pos, afu 76 drivers/misc/ocxl/core.c afu->actag_base, afu->actag_enabled); afu 78 drivers/misc/ocxl/core.c afu->actag_base, afu->actag_enabled); afu 82 drivers/misc/ocxl/core.c static void reclaim_afu_actag(struct ocxl_afu *afu) afu 84 drivers/misc/ocxl/core.c struct ocxl_fn *fn = afu->fn; afu 87 drivers/misc/ocxl/core.c start_offset = afu->actag_base - fn->actag_base; afu 88 drivers/misc/ocxl/core.c size = afu->actag_enabled; afu 89 drivers/misc/ocxl/core.c ocxl_actag_afu_free(afu->fn, start_offset, size); afu 92 drivers/misc/ocxl/core.c static int assign_afu_pasid(struct ocxl_afu *afu) afu 94 drivers/misc/ocxl/core.c struct ocxl_fn *fn = afu->fn; afu 102 drivers/misc/ocxl/core.c pasid_count = 1 << afu->config.pasid_supported_log; afu 109 drivers/misc/ocxl/core.c afu->pasid_base = fn->pasid_base + pasid_offset; afu 110 drivers/misc/ocxl/core.c afu->pasid_count = 0; afu 111 drivers/misc/ocxl/core.c afu->pasid_max = pasid_count; afu 113 drivers/misc/ocxl/core.c ocxl_config_set_afu_pasid(pci_dev, afu->config.dvsec_afu_control_pos, afu 114 drivers/misc/ocxl/core.c afu->pasid_base, afu 115 drivers/misc/ocxl/core.c afu->config.pasid_supported_log); afu 117 drivers/misc/ocxl/core.c afu->pasid_base, pasid_count); afu 121 drivers/misc/ocxl/core.c static void reclaim_afu_pasid(struct ocxl_afu *afu) afu 123 drivers/misc/ocxl/core.c struct ocxl_fn *fn = afu->fn; afu 126 drivers/misc/ocxl/core.c start_offset = afu->pasid_base - fn->pasid_base; afu 127 drivers/misc/ocxl/core.c size = 1 << afu->config.pasid_supported_log; afu 128 drivers/misc/ocxl/core.c ocxl_pasid_afu_free(afu->fn, start_offset, size); afu 162 drivers/misc/ocxl/core.c static int map_mmio_areas(struct ocxl_afu *afu) afu 165 drivers/misc/ocxl/core.c struct pci_dev *pci_dev = to_pci_dev(afu->fn->dev.parent); afu 167 drivers/misc/ocxl/core.c rc = reserve_fn_bar(afu->fn, afu->config.global_mmio_bar); afu 171 drivers/misc/ocxl/core.c rc = reserve_fn_bar(afu->fn, afu->config.pp_mmio_bar); afu 173 drivers/misc/ocxl/core.c release_fn_bar(afu->fn, afu->config.global_mmio_bar); afu 177 drivers/misc/ocxl/core.c afu->global_mmio_start = afu 178 drivers/misc/ocxl/core.c pci_resource_start(pci_dev, afu->config.global_mmio_bar) + afu 179 drivers/misc/ocxl/core.c afu->config.global_mmio_offset; afu 180 drivers/misc/ocxl/core.c afu->pp_mmio_start = afu 181 drivers/misc/ocxl/core.c pci_resource_start(pci_dev, afu->config.pp_mmio_bar) + afu 182 drivers/misc/ocxl/core.c afu->config.pp_mmio_offset; afu 184 drivers/misc/ocxl/core.c afu->global_mmio_ptr = ioremap(afu->global_mmio_start, afu 185 drivers/misc/ocxl/core.c afu->config.global_mmio_size); afu 186 drivers/misc/ocxl/core.c if (!afu->global_mmio_ptr) { afu 187 drivers/misc/ocxl/core.c release_fn_bar(afu->fn, afu->config.pp_mmio_bar); afu 188 drivers/misc/ocxl/core.c release_fn_bar(afu->fn, afu->config.global_mmio_bar); afu 197 drivers/misc/ocxl/core.c afu->irq_base_offset = afu->config.pp_mmio_stride + PAGE_SIZE; afu 201 drivers/misc/ocxl/core.c static void unmap_mmio_areas(struct ocxl_afu *afu) afu 203 drivers/misc/ocxl/core.c if (afu->global_mmio_ptr) { afu 204 drivers/misc/ocxl/core.c iounmap(afu->global_mmio_ptr); afu 205 drivers/misc/ocxl/core.c afu->global_mmio_ptr = NULL; afu 207 drivers/misc/ocxl/core.c afu->global_mmio_start = 0; afu 208 drivers/misc/ocxl/core.c afu->pp_mmio_start = 0; afu 209 drivers/misc/ocxl/core.c release_fn_bar(afu->fn, afu->config.pp_mmio_bar); afu 210 drivers/misc/ocxl/core.c release_fn_bar(afu->fn, afu->config.global_mmio_bar); afu 213 drivers/misc/ocxl/core.c static int configure_afu(struct ocxl_afu *afu, u8 afu_idx, struct pci_dev *dev) afu 217 drivers/misc/ocxl/core.c rc = ocxl_config_read_afu(dev, &afu->fn->config, &afu->config, afu_idx); afu 221 drivers/misc/ocxl/core.c rc = assign_afu_actag(afu); afu 225 drivers/misc/ocxl/core.c rc = assign_afu_pasid(afu); afu 229 drivers/misc/ocxl/core.c rc = map_mmio_areas(afu); afu 236 drivers/misc/ocxl/core.c reclaim_afu_pasid(afu); afu 238 drivers/misc/ocxl/core.c reclaim_afu_actag(afu); afu 242 drivers/misc/ocxl/core.c static void deconfigure_afu(struct ocxl_afu *afu) afu 244 drivers/misc/ocxl/core.c unmap_mmio_areas(afu); afu 245 drivers/misc/ocxl/core.c reclaim_afu_pasid(afu); afu 246 drivers/misc/ocxl/core.c reclaim_afu_actag(afu); afu 249 drivers/misc/ocxl/core.c static int activate_afu(struct pci_dev *dev, struct ocxl_afu *afu) afu 251 drivers/misc/ocxl/core.c ocxl_config_set_afu_state(dev, afu->config.dvsec_afu_control_pos, 1); afu 256 drivers/misc/ocxl/core.c static void deactivate_afu(struct ocxl_afu *afu) afu 258 drivers/misc/ocxl/core.c struct pci_dev *dev = to_pci_dev(afu->fn->dev.parent); afu 260 drivers/misc/ocxl/core.c ocxl_config_set_afu_state(dev, afu->config.dvsec_afu_control_pos, 0); afu 266 drivers/misc/ocxl/core.c struct ocxl_afu *afu; afu 268 drivers/misc/ocxl/core.c afu = alloc_afu(fn); afu 269 drivers/misc/ocxl/core.c if (!afu) afu 272 drivers/misc/ocxl/core.c rc = configure_afu(afu, afu_idx, dev); afu 274 drivers/misc/ocxl/core.c ocxl_afu_put(afu); afu 278 drivers/misc/ocxl/core.c rc = activate_afu(dev, afu); afu 280 drivers/misc/ocxl/core.c deconfigure_afu(afu); afu 281 drivers/misc/ocxl/core.c ocxl_afu_put(afu); afu 285 drivers/misc/ocxl/core.c list_add_tail(&afu->list, &fn->afu_list); afu 290 drivers/misc/ocxl/core.c static void remove_afu(struct ocxl_afu *afu) afu 292 drivers/misc/ocxl/core.c list_del(&afu->list); afu 293 drivers/misc/ocxl/core.c ocxl_context_detach_all(afu); afu 294 drivers/misc/ocxl/core.c deactivate_afu(afu); afu 295 drivers/misc/ocxl/core.c deconfigure_afu(afu); afu 296 drivers/misc/ocxl/core.c ocxl_afu_put(afu); // matches the implicit get in alloc_afu afu 483 drivers/misc/ocxl/core.c u8 afu; afu 498 drivers/misc/ocxl/core.c for (afu = 0; afu <= fn->config.max_afu_index; afu++) { afu 499 drivers/misc/ocxl/core.c rc = ocxl_config_check_afu_index(dev, &fn->config, afu); afu 501 drivers/misc/ocxl/core.c rc = init_afu(dev, fn, afu); afu 504 drivers/misc/ocxl/core.c "Can't initialize AFU index %d\n", afu); afu 523 drivers/misc/ocxl/core.c struct ocxl_afu *afu; afu 525 drivers/misc/ocxl/core.c list_for_each_entry(afu, &fn->afu_list, list) { afu 526 drivers/misc/ocxl/core.c if (afu->config.idx == afu_idx) afu 527 drivers/misc/ocxl/core.c return afu; afu 542 drivers/misc/ocxl/core.c struct ocxl_afu *afu, *tmp; afu 544 drivers/misc/ocxl/core.c list_for_each_entry_safe(afu, tmp, &fn->afu_list, list) { afu 545 drivers/misc/ocxl/core.c remove_afu(afu); afu 555 drivers/misc/ocxl/core.c struct ocxl_afu_config *ocxl_afu_config(struct ocxl_afu *afu) afu 557 drivers/misc/ocxl/core.c return &afu->config; afu 561 drivers/misc/ocxl/core.c void ocxl_afu_set_private(struct ocxl_afu *afu, void *private) afu 563 drivers/misc/ocxl/core.c afu->private = private; afu 567 drivers/misc/ocxl/core.c void *ocxl_afu_get_private(struct ocxl_afu *afu) afu 569 drivers/misc/ocxl/core.c if (afu) afu 570 drivers/misc/ocxl/core.c return afu->private; afu 62 drivers/misc/ocxl/file.c rc = ocxl_context_alloc(&ctx, info->afu, inode->i_mapping); afu 102 drivers/misc/ocxl/file.c arg.afu_version_major = ctx->afu->config.version_major; afu 103 drivers/misc/ocxl/file.c arg.afu_version_minor = ctx->afu->config.version_minor; afu 105 drivers/misc/ocxl/file.c arg.pp_mmio_size = ctx->afu->config.pp_mmio_stride; afu 106 drivers/misc/ocxl/file.c arg.global_mmio_size = ctx->afu->config.global_mmio_size; afu 140 drivers/misc/ocxl/file.c int rc = ocxl_link_update_pe(ctx->afu->fn->link, afu 489 drivers/misc/ocxl/file.c ocxl_afu_put(info->afu); afu 512 drivers/misc/ocxl/file.c int ocxl_file_register_afu(struct ocxl_afu *afu) afu 517 drivers/misc/ocxl/file.c struct ocxl_fn *fn = afu->fn; afu 535 drivers/misc/ocxl/file.c info->afu = afu; afu 536 drivers/misc/ocxl/file.c ocxl_afu_get(afu); afu 539 drivers/misc/ocxl/file.c afu->config.name, dev_name(&pci_dev->dev), afu->config.idx); afu 555 drivers/misc/ocxl/file.c ocxl_afu_set_private(afu, info); afu 563 drivers/misc/ocxl/file.c ocxl_afu_put(afu); afu 569 drivers/misc/ocxl/file.c void ocxl_file_unregister_afu(struct ocxl_afu *afu) afu 571 drivers/misc/ocxl/file.c struct ocxl_file_info *info = ocxl_afu_get_private(afu); afu 7 drivers/misc/ocxl/mmio.c int ocxl_global_mmio_read32(struct ocxl_afu *afu, size_t offset, afu 10 drivers/misc/ocxl/mmio.c if (offset > afu->config.global_mmio_size - 4) afu 20 drivers/misc/ocxl/mmio.c *val = readl_be((char *)afu->global_mmio_ptr + offset); afu 24 drivers/misc/ocxl/mmio.c *val = readl((char *)afu->global_mmio_ptr + offset); afu 32 drivers/misc/ocxl/mmio.c int ocxl_global_mmio_read64(struct ocxl_afu *afu, size_t offset, afu 35 drivers/misc/ocxl/mmio.c if (offset > afu->config.global_mmio_size - 8) afu 45 drivers/misc/ocxl/mmio.c *val = readq_be((char *)afu->global_mmio_ptr + offset); afu 49 drivers/misc/ocxl/mmio.c *val = readq((char *)afu->global_mmio_ptr + offset); afu 57 drivers/misc/ocxl/mmio.c int ocxl_global_mmio_write32(struct ocxl_afu *afu, size_t offset, afu 60 drivers/misc/ocxl/mmio.c if (offset > afu->config.global_mmio_size - 4) afu 70 drivers/misc/ocxl/mmio.c writel_be(val, (char *)afu->global_mmio_ptr + offset); afu 74 drivers/misc/ocxl/mmio.c writel(val, (char *)afu->global_mmio_ptr + offset); afu 83 drivers/misc/ocxl/mmio.c int ocxl_global_mmio_write64(struct ocxl_afu *afu, size_t offset, afu 86 drivers/misc/ocxl/mmio.c if (offset > afu->config.global_mmio_size - 8) afu 96 drivers/misc/ocxl/mmio.c writeq_be(val, (char *)afu->global_mmio_ptr + offset); afu 100 drivers/misc/ocxl/mmio.c writeq(val, (char *)afu->global_mmio_ptr + offset); afu 109 drivers/misc/ocxl/mmio.c int ocxl_global_mmio_set32(struct ocxl_afu *afu, size_t offset, afu 114 drivers/misc/ocxl/mmio.c if (offset > afu->config.global_mmio_size - 4) afu 124 drivers/misc/ocxl/mmio.c tmp = readl_be((char *)afu->global_mmio_ptr + offset); afu 126 drivers/misc/ocxl/mmio.c writel_be(tmp, (char *)afu->global_mmio_ptr + offset); afu 130 drivers/misc/ocxl/mmio.c tmp = readl((char *)afu->global_mmio_ptr + offset); afu 132 drivers/misc/ocxl/mmio.c writel(tmp, (char *)afu->global_mmio_ptr + offset); afu 140 drivers/misc/ocxl/mmio.c int ocxl_global_mmio_set64(struct ocxl_afu *afu, size_t offset, afu 145 drivers/misc/ocxl/mmio.c if (offset > afu->config.global_mmio_size - 8) afu 155 drivers/misc/ocxl/mmio.c tmp = readq_be((char *)afu->global_mmio_ptr + offset); afu 157 drivers/misc/ocxl/mmio.c writeq_be(tmp, (char *)afu->global_mmio_ptr + offset); afu 161 drivers/misc/ocxl/mmio.c tmp = readq((char *)afu->global_mmio_ptr + offset); afu 163 drivers/misc/ocxl/mmio.c writeq(tmp, (char *)afu->global_mmio_ptr + offset); afu 171 drivers/misc/ocxl/mmio.c int ocxl_global_mmio_clear32(struct ocxl_afu *afu, size_t offset, afu 176 drivers/misc/ocxl/mmio.c if (offset > afu->config.global_mmio_size - 4) afu 186 drivers/misc/ocxl/mmio.c tmp = readl_be((char *)afu->global_mmio_ptr + offset); afu 188 drivers/misc/ocxl/mmio.c writel_be(tmp, (char *)afu->global_mmio_ptr + offset); afu 192 drivers/misc/ocxl/mmio.c tmp = readl((char *)afu->global_mmio_ptr + offset); afu 194 drivers/misc/ocxl/mmio.c writel(tmp, (char *)afu->global_mmio_ptr + offset); afu 203 drivers/misc/ocxl/mmio.c int ocxl_global_mmio_clear64(struct ocxl_afu *afu, size_t offset, afu 208 drivers/misc/ocxl/mmio.c if (offset > afu->config.global_mmio_size - 8) afu 218 drivers/misc/ocxl/mmio.c tmp = readq_be((char *)afu->global_mmio_ptr + offset); afu 220 drivers/misc/ocxl/mmio.c writeq_be(tmp, (char *)afu->global_mmio_ptr + offset); afu 224 drivers/misc/ocxl/mmio.c tmp = readq((char *)afu->global_mmio_ptr + offset); afu 226 drivers/misc/ocxl/mmio.c writeq(tmp, (char *)afu->global_mmio_ptr + offset); afu 230 drivers/misc/ocxl/mmio.c writeq(tmp, (char *)afu->global_mmio_ptr + offset); afu 31 drivers/misc/ocxl/ocxl_internal.h struct ocxl_afu *afu; afu 71 drivers/misc/ocxl/ocxl_internal.h struct ocxl_afu *afu; afu 97 drivers/misc/ocxl/ocxl_internal.h int ocxl_create_cdev(struct ocxl_afu *afu); afu 98 drivers/misc/ocxl/ocxl_internal.h void ocxl_destroy_cdev(struct ocxl_afu *afu); afu 99 drivers/misc/ocxl/ocxl_internal.h int ocxl_file_register_afu(struct ocxl_afu *afu); afu 100 drivers/misc/ocxl/ocxl_internal.h void ocxl_file_unregister_afu(struct ocxl_afu *afu); afu 135 drivers/misc/ocxl/ocxl_internal.h void ocxl_context_detach_all(struct ocxl_afu *afu); afu 20 drivers/misc/ocxl/pci.c struct ocxl_afu *afu, *tmp; afu 32 drivers/misc/ocxl/pci.c list_for_each_entry_safe(afu, tmp, afu_list, list) { afu 34 drivers/misc/ocxl/pci.c rc = ocxl_file_register_afu(afu); afu 37 drivers/misc/ocxl/pci.c afu->config.name, afu->config.idx); afu 47 drivers/misc/ocxl/pci.c struct ocxl_afu *afu; afu 53 drivers/misc/ocxl/pci.c list_for_each_entry(afu, afu_list, list) { afu 54 drivers/misc/ocxl/pci.c ocxl_file_unregister_afu(afu); afu 10 drivers/misc/ocxl/sysfs.c return info->afu; afu 17 drivers/misc/ocxl/sysfs.c struct ocxl_afu *afu = to_afu(device); afu 20 drivers/misc/ocxl/sysfs.c afu->config.global_mmio_size); afu 27 drivers/misc/ocxl/sysfs.c struct ocxl_afu *afu = to_afu(device); afu 30 drivers/misc/ocxl/sysfs.c afu->config.pp_mmio_stride); afu 37 drivers/misc/ocxl/sysfs.c struct ocxl_afu *afu = to_afu(device); afu 40 drivers/misc/ocxl/sysfs.c afu->config.version_major, afu 41 drivers/misc/ocxl/sysfs.c afu->config.version_minor); afu 48 drivers/misc/ocxl/sysfs.c struct ocxl_afu *afu = to_afu(device); afu 51 drivers/misc/ocxl/sysfs.c afu->pasid_count, afu->pasid_max); afu 65 drivers/misc/ocxl/sysfs.c struct ocxl_afu *afu = to_afu(kobj_to_dev(kobj)); afu 68 drivers/misc/ocxl/sysfs.c off >= afu->config.global_mmio_size) afu 70 drivers/misc/ocxl/sysfs.c memcpy_fromio(buf, afu->global_mmio_ptr + off, count); afu 77 drivers/misc/ocxl/sysfs.c struct ocxl_afu *afu = vma->vm_private_data; afu 80 drivers/misc/ocxl/sysfs.c if (vmf->pgoff >= (afu->config.global_mmio_size >> PAGE_SHIFT)) afu 84 drivers/misc/ocxl/sysfs.c offset += (afu->global_mmio_start >> PAGE_SHIFT); afu 96 drivers/misc/ocxl/sysfs.c struct ocxl_afu *afu = to_afu(kobj_to_dev(kobj)); afu 99 drivers/misc/ocxl/sysfs.c (afu->config.global_mmio_size >> PAGE_SHIFT)) afu 105 drivers/misc/ocxl/sysfs.c vma->vm_private_data = afu; afu 122 drivers/misc/ocxl/sysfs.c info->attr_global_mmio.size = info->afu->config.global_mmio_size; afu 113 drivers/scsi/cxlflash/common.h struct afu *afu; afu 158 drivers/scsi/cxlflash/common.h struct afu *parent; afu 204 drivers/scsi/cxlflash/common.h struct afu *afu; afu 232 drivers/scsi/cxlflash/common.h int (*send_cmd)(struct afu *afu, struct afu_cmd *cmd); afu 255 drivers/scsi/cxlflash/common.h static inline struct hwq *get_hwq(struct afu *afu, u32 index) afu 259 drivers/scsi/cxlflash/common.h return &afu->hwqs[index]; afu 262 drivers/scsi/cxlflash/common.h static inline bool afu_is_irqpoll_enabled(struct afu *afu) afu 264 drivers/scsi/cxlflash/common.h return !!afu->irqpoll_weight; afu 267 drivers/scsi/cxlflash/common.h static inline bool afu_has_cap(struct afu *afu, u64 cap) afu 269 drivers/scsi/cxlflash/common.h u64 afu_cap = afu->interface_version >> SISL_INTVER_CAP_SHIFT; afu 274 drivers/scsi/cxlflash/common.h static inline bool afu_is_ocxl_lisn(struct afu *afu) afu 276 drivers/scsi/cxlflash/common.h return afu_has_cap(afu, SISL_INTVER_CAP_OCXL_LISN); afu 279 drivers/scsi/cxlflash/common.h static inline bool afu_is_afu_debug(struct afu *afu) afu 281 drivers/scsi/cxlflash/common.h return afu_has_cap(afu, SISL_INTVER_CAP_AFU_DEBUG); afu 284 drivers/scsi/cxlflash/common.h static inline bool afu_is_lun_provision(struct afu *afu) afu 286 drivers/scsi/cxlflash/common.h return afu_has_cap(afu, SISL_INTVER_CAP_LUN_PROVISION); afu 289 drivers/scsi/cxlflash/common.h static inline bool afu_is_sq_cmd_mode(struct afu *afu) afu 291 drivers/scsi/cxlflash/common.h return afu_has_cap(afu, SISL_INTVER_CAP_SQ_CMD_MODE); afu 294 drivers/scsi/cxlflash/common.h static inline bool afu_is_ioarrin_cmd_mode(struct afu *afu) afu 296 drivers/scsi/cxlflash/common.h return afu_has_cap(afu, SISL_INTVER_CAP_IOARRIN_CMD_MODE); afu 310 drivers/scsi/cxlflash/common.h struct afu *afu = cfg->afu; afu 312 drivers/scsi/cxlflash/common.h return &afu->afu_map->global.bank[CHAN2PORTBANK(i)]; afu 329 drivers/scsi/cxlflash/common.h int cxlflash_afu_sync(struct afu *afu, ctx_hndl_t c, res_hndl_t r, u8 mode); afu 115 drivers/scsi/cxlflash/cxl_hw.c static void cxlflash_destroy_afu(void *afu) afu 44 drivers/scsi/cxlflash/main.c struct afu *afu = cmd->parent; afu 45 drivers/scsi/cxlflash/main.c struct cxlflash_cfg *cfg = afu->parent; afu 161 drivers/scsi/cxlflash/main.c struct afu *afu = cmd->parent; afu 162 drivers/scsi/cxlflash/main.c struct cxlflash_cfg *cfg = afu->parent; afu 164 drivers/scsi/cxlflash/main.c struct hwq *hwq = get_hwq(afu, cmd->hwq_index); afu 198 drivers/scsi/cxlflash/main.c struct cxlflash_cfg *cfg = hwq->afu->parent; afu 242 drivers/scsi/cxlflash/main.c struct cxlflash_cfg *cfg = hwq->afu->parent; afu 305 drivers/scsi/cxlflash/main.c static int send_cmd_ioarrin(struct afu *afu, struct afu_cmd *cmd) afu 307 drivers/scsi/cxlflash/main.c struct cxlflash_cfg *cfg = afu->parent; afu 309 drivers/scsi/cxlflash/main.c struct hwq *hwq = get_hwq(afu, cmd->hwq_index); afu 349 drivers/scsi/cxlflash/main.c static int send_cmd_sq(struct afu *afu, struct afu_cmd *cmd) afu 351 drivers/scsi/cxlflash/main.c struct cxlflash_cfg *cfg = afu->parent; afu 353 drivers/scsi/cxlflash/main.c struct hwq *hwq = get_hwq(afu, cmd->hwq_index); afu 394 drivers/scsi/cxlflash/main.c static int wait_resp(struct afu *afu, struct afu_cmd *cmd) afu 396 drivers/scsi/cxlflash/main.c struct cxlflash_cfg *cfg = afu->parent; afu 428 drivers/scsi/cxlflash/main.c struct afu *afu) afu 433 drivers/scsi/cxlflash/main.c if (afu->num_hwqs == 1) afu 436 drivers/scsi/cxlflash/main.c switch (afu->hwq_mode) { afu 438 drivers/scsi/cxlflash/main.c hwq = afu->hwq_rr_count++ % afu->num_hwqs; afu 445 drivers/scsi/cxlflash/main.c hwq = smp_processor_id() % afu->num_hwqs; afu 466 drivers/scsi/cxlflash/main.c struct afu *afu = cfg->afu; afu 469 drivers/scsi/cxlflash/main.c struct hwq *hwq = get_hwq(afu, PRIMARY_HWQ); afu 495 drivers/scsi/cxlflash/main.c cmd->parent = afu; afu 508 drivers/scsi/cxlflash/main.c rc = afu->send_cmd(afu, cmd); afu 568 drivers/scsi/cxlflash/main.c struct afu *afu = cfg->afu; afu 572 drivers/scsi/cxlflash/main.c int hwq_index = cmd_to_target_hwq(host, scp, afu); afu 573 drivers/scsi/cxlflash/main.c struct hwq *hwq = get_hwq(afu, hwq_index); afu 613 drivers/scsi/cxlflash/main.c atomic_inc(&afu->cmds_active); afu 623 drivers/scsi/cxlflash/main.c cmd->parent = afu; afu 638 drivers/scsi/cxlflash/main.c rc = afu->send_cmd(afu, cmd); afu 639 drivers/scsi/cxlflash/main.c atomic_dec(&afu->cmds_active); afu 664 drivers/scsi/cxlflash/main.c struct afu *afu = cfg->afu; afu 666 drivers/scsi/cxlflash/main.c if (cfg->afu) { afu 667 drivers/scsi/cxlflash/main.c free_pages((ulong)afu, get_order(sizeof(struct afu))); afu 668 drivers/scsi/cxlflash/main.c cfg->afu = NULL; afu 697 drivers/scsi/cxlflash/main.c struct afu *afu = cfg->afu; afu 705 drivers/scsi/cxlflash/main.c if (likely(afu)) { afu 706 drivers/scsi/cxlflash/main.c while (atomic_read(&afu->cmds_active)) afu 709 drivers/scsi/cxlflash/main.c if (afu_is_irqpoll_enabled(afu)) { afu 710 drivers/scsi/cxlflash/main.c for (i = 0; i < afu->num_hwqs; i++) { afu 711 drivers/scsi/cxlflash/main.c hwq = get_hwq(afu, i); afu 717 drivers/scsi/cxlflash/main.c if (likely(afu->afu_map)) { afu 718 drivers/scsi/cxlflash/main.c cfg->ops->psa_unmap(afu->afu_map); afu 719 drivers/scsi/cxlflash/main.c afu->afu_map = NULL; afu 735 drivers/scsi/cxlflash/main.c struct afu *afu = cfg->afu; afu 739 drivers/scsi/cxlflash/main.c if (!afu) { afu 744 drivers/scsi/cxlflash/main.c hwq = get_hwq(afu, index); afu 781 drivers/scsi/cxlflash/main.c struct afu *afu = cfg->afu; afu 786 drivers/scsi/cxlflash/main.c if (!afu) { afu 791 drivers/scsi/cxlflash/main.c hwq = get_hwq(afu, index); afu 832 drivers/scsi/cxlflash/main.c for (k = cfg->afu->num_hwqs - 1; k >= 0; k--) afu 837 drivers/scsi/cxlflash/main.c for (k = cfg->afu->num_hwqs - 1; k >= 0; k--) afu 855 drivers/scsi/cxlflash/main.c struct afu *afu = cfg->afu; afu 866 drivers/scsi/cxlflash/main.c if (!afu || !afu->afu_map) { afu 1016 drivers/scsi/cxlflash/main.c cfg->afu = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, afu 1017 drivers/scsi/cxlflash/main.c get_order(sizeof(struct afu))); afu 1018 drivers/scsi/cxlflash/main.c if (unlikely(!cfg->afu)) { afu 1020 drivers/scsi/cxlflash/main.c __func__, get_order(sizeof(struct afu))); afu 1024 drivers/scsi/cxlflash/main.c cfg->afu->parent = cfg; afu 1025 drivers/scsi/cxlflash/main.c cfg->afu->desired_hwqs = CXLFLASH_DEF_HWQS; afu 1026 drivers/scsi/cxlflash/main.c cfg->afu->afu_map = NULL; afu 1193 drivers/scsi/cxlflash/main.c static void afu_set_wwpn(struct afu *afu, int port, __be64 __iomem *fc_regs, afu 1196 drivers/scsi/cxlflash/main.c struct cxlflash_cfg *cfg = afu->parent; afu 1229 drivers/scsi/cxlflash/main.c static void afu_link_reset(struct afu *afu, int port, __be64 __iomem *fc_regs) afu 1231 drivers/scsi/cxlflash/main.c struct cxlflash_cfg *cfg = afu->parent; afu 1236 drivers/scsi/cxlflash/main.c port_sel = readq_be(&afu->afu_map->global.regs.afu_port_sel); afu 1238 drivers/scsi/cxlflash/main.c writeq_be(port_sel, &afu->afu_map->global.regs.afu_port_sel); afu 1239 drivers/scsi/cxlflash/main.c cxlflash_afu_sync(afu, 0, 0, AFU_GSYNC); afu 1255 drivers/scsi/cxlflash/main.c writeq_be(port_sel, &afu->afu_map->global.regs.afu_port_sel); afu 1256 drivers/scsi/cxlflash/main.c cxlflash_afu_sync(afu, 0, 0, AFU_GSYNC); afu 1265 drivers/scsi/cxlflash/main.c static void afu_err_intr_init(struct afu *afu) afu 1267 drivers/scsi/cxlflash/main.c struct cxlflash_cfg *cfg = afu->parent; afu 1270 drivers/scsi/cxlflash/main.c struct hwq *hwq = get_hwq(afu, PRIMARY_HWQ); afu 1281 drivers/scsi/cxlflash/main.c writeq_be(-1ULL, &afu->afu_map->global.regs.aintr_mask); afu 1285 drivers/scsi/cxlflash/main.c if (afu->internal_lun) afu 1287 drivers/scsi/cxlflash/main.c writeq_be(reg, &afu->afu_map->global.regs.afu_ctrl); afu 1289 drivers/scsi/cxlflash/main.c writeq_be(-1ULL, &afu->afu_map->global.regs.aintr_clear); afu 1292 drivers/scsi/cxlflash/main.c writeq_be(SISL_ASTATUS_MASK, &afu->afu_map->global.regs.aintr_mask); afu 1295 drivers/scsi/cxlflash/main.c writeq_be(-1ULL, &afu->afu_map->global.regs.aintr_clear); afu 1301 drivers/scsi/cxlflash/main.c if (afu->internal_lun) afu 1302 drivers/scsi/cxlflash/main.c reg |= ((u64)(afu->internal_lun - 1) << SISL_FC_INTERNAL_SHIFT); afu 1319 drivers/scsi/cxlflash/main.c for (i = 0; i < afu->num_hwqs; i++) { afu 1320 drivers/scsi/cxlflash/main.c hwq = get_hwq(afu, i); afu 1340 drivers/scsi/cxlflash/main.c struct cxlflash_cfg *cfg = hwq->afu->parent; afu 1375 drivers/scsi/cxlflash/main.c struct afu *afu = hwq->afu; afu 1395 drivers/scsi/cxlflash/main.c if (afu_is_sq_cmd_mode(afu)) { afu 1478 drivers/scsi/cxlflash/main.c struct afu *afu = hwq->afu; afu 1491 drivers/scsi/cxlflash/main.c if (afu_is_irqpoll_enabled(afu)) { afu 1546 drivers/scsi/cxlflash/main.c struct afu *afu = hwq->afu; afu 1547 drivers/scsi/cxlflash/main.c struct cxlflash_cfg *cfg = afu->parent; afu 1550 drivers/scsi/cxlflash/main.c struct sisl_global_map __iomem *global = &afu->afu_map->global; afu 1737 drivers/scsi/cxlflash/main.c struct afu *afu = cfg->afu; afu 1744 drivers/scsi/cxlflash/main.c ctrl_map = &afu->afu_map->ctrls[i].ctrl; afu 1753 drivers/scsi/cxlflash/main.c for (i = 0; i < afu->num_hwqs; i++) { afu 1754 drivers/scsi/cxlflash/main.c hwq = get_hwq(afu, i); afu 1758 drivers/scsi/cxlflash/main.c hwq->host_map = &afu->afu_map->hosts[hwq->ctx_hndl].host; afu 1759 drivers/scsi/cxlflash/main.c hwq->ctrl_map = &afu->afu_map->ctrls[hwq->ctx_hndl].ctrl; afu 1772 drivers/scsi/cxlflash/main.c struct afu *afu = cfg->afu; afu 1791 drivers/scsi/cxlflash/main.c for (i = 0; i < afu->num_hwqs; i++) { afu 1792 drivers/scsi/cxlflash/main.c hwq = get_hwq(afu, i); afu 1799 drivers/scsi/cxlflash/main.c if (afu_is_sq_cmd_mode(afu)) { afu 1806 drivers/scsi/cxlflash/main.c reg = readq_be(&afu->afu_map->global.regs.afu_config); afu 1812 drivers/scsi/cxlflash/main.c writeq_be(reg, &afu->afu_map->global.regs.afu_config); afu 1815 drivers/scsi/cxlflash/main.c if (afu->internal_lun) { afu 1817 drivers/scsi/cxlflash/main.c writeq_be(PORT0, &afu->afu_map->global.regs.afu_port_sel); afu 1821 drivers/scsi/cxlflash/main.c &afu->afu_map->global.regs.afu_port_sel); afu 1836 drivers/scsi/cxlflash/main.c afu_set_wwpn(afu, i, &fc_port_regs[0], wwpn[i]); afu 1843 drivers/scsi/cxlflash/main.c if (afu_is_ocxl_lisn(afu)) { afu 1845 drivers/scsi/cxlflash/main.c for (i = 0; i < afu->num_hwqs; i++) { afu 1846 drivers/scsi/cxlflash/main.c hwq = get_hwq(afu, i); afu 1865 drivers/scsi/cxlflash/main.c for (i = 0; i < afu->num_hwqs; i++) { afu 1866 drivers/scsi/cxlflash/main.c hwq = get_hwq(afu, i); afu 1881 drivers/scsi/cxlflash/main.c hwq = get_hwq(afu, PRIMARY_HWQ); afu 1887 drivers/scsi/cxlflash/main.c afu->hb = readq_be(&afu->afu_map->global.regs.afu_hb); afu 1898 drivers/scsi/cxlflash/main.c struct afu *afu = cfg->afu; afu 1907 drivers/scsi/cxlflash/main.c for (i = 0; i < afu->num_hwqs; i++) { afu 1908 drivers/scsi/cxlflash/main.c hwq = get_hwq(afu, i); afu 1924 drivers/scsi/cxlflash/main.c if (afu_is_sq_cmd_mode(afu)) { afu 1934 drivers/scsi/cxlflash/main.c if (afu_is_irqpoll_enabled(afu)) afu 1935 drivers/scsi/cxlflash/main.c irq_poll_init(&hwq->irqpoll, afu->irqpoll_weight, afu 2013 drivers/scsi/cxlflash/main.c struct hwq *hwq = get_hwq(cfg->afu, index); afu 2018 drivers/scsi/cxlflash/main.c hwq->afu = cfg->afu; afu 2094 drivers/scsi/cxlflash/main.c struct afu *afu = cfg->afu; afu 2099 drivers/scsi/cxlflash/main.c port_mask = readq_be(&afu->afu_map->global.regs.afu_port_sel); afu 2123 drivers/scsi/cxlflash/main.c struct afu *afu = cfg->afu; afu 2130 drivers/scsi/cxlflash/main.c mutex_init(&afu->sync_active); afu 2131 drivers/scsi/cxlflash/main.c afu->num_hwqs = afu->desired_hwqs; afu 2132 drivers/scsi/cxlflash/main.c for (i = 0; i < afu->num_hwqs; i++) { afu 2142 drivers/scsi/cxlflash/main.c hwq = get_hwq(afu, PRIMARY_HWQ); afu 2143 drivers/scsi/cxlflash/main.c afu->afu_map = cfg->ops->psa_map(hwq->ctx_cookie); afu 2144 drivers/scsi/cxlflash/main.c if (!afu->afu_map) { afu 2151 drivers/scsi/cxlflash/main.c reg = readq(&afu->afu_map->global.regs.afu_version); afu 2152 drivers/scsi/cxlflash/main.c memcpy(afu->version, ®, sizeof(reg)); afu 2153 drivers/scsi/cxlflash/main.c afu->interface_version = afu 2154 drivers/scsi/cxlflash/main.c readq_be(&afu->afu_map->global.regs.interface_version); afu 2155 drivers/scsi/cxlflash/main.c if ((afu->interface_version + 1) == 0) { afu 2157 drivers/scsi/cxlflash/main.c "interface version %016llx\n", afu->version, afu 2158 drivers/scsi/cxlflash/main.c afu->interface_version); afu 2163 drivers/scsi/cxlflash/main.c if (afu_is_sq_cmd_mode(afu)) { afu 2164 drivers/scsi/cxlflash/main.c afu->send_cmd = send_cmd_sq; afu 2165 drivers/scsi/cxlflash/main.c afu->context_reset = context_reset_sq; afu 2167 drivers/scsi/cxlflash/main.c afu->send_cmd = send_cmd_ioarrin; afu 2168 drivers/scsi/cxlflash/main.c afu->context_reset = context_reset_ioarrin; afu 2172 drivers/scsi/cxlflash/main.c afu->version, afu->interface_version); afu 2182 drivers/scsi/cxlflash/main.c afu_err_intr_init(cfg->afu); afu 2183 drivers/scsi/cxlflash/main.c for (i = 0; i < afu->num_hwqs; i++) { afu 2184 drivers/scsi/cxlflash/main.c hwq = get_hwq(afu, i); afu 2196 drivers/scsi/cxlflash/main.c for (i = afu->num_hwqs - 1; i >= 0; i--) { afu 2304 drivers/scsi/cxlflash/main.c static int send_afu_cmd(struct afu *afu, struct sisl_ioarcb *rcb) afu 2306 drivers/scsi/cxlflash/main.c struct cxlflash_cfg *cfg = afu->parent; afu 2309 drivers/scsi/cxlflash/main.c struct hwq *hwq = get_hwq(afu, PRIMARY_HWQ); afu 2321 drivers/scsi/cxlflash/main.c mutex_lock(&afu->sync_active); afu 2322 drivers/scsi/cxlflash/main.c atomic_inc(&afu->cmds_active); afu 2337 drivers/scsi/cxlflash/main.c cmd->parent = afu; afu 2342 drivers/scsi/cxlflash/main.c __func__, afu, cmd, cmd->rcb.cdb[0], nretry); afu 2344 drivers/scsi/cxlflash/main.c rc = afu->send_cmd(afu, cmd); afu 2350 drivers/scsi/cxlflash/main.c rc = wait_resp(afu, cmd); afu 2353 drivers/scsi/cxlflash/main.c rc = afu->context_reset(hwq); afu 2375 drivers/scsi/cxlflash/main.c atomic_dec(&afu->cmds_active); afu 2376 drivers/scsi/cxlflash/main.c mutex_unlock(&afu->sync_active); afu 2398 drivers/scsi/cxlflash/main.c int cxlflash_afu_sync(struct afu *afu, ctx_hndl_t ctx, res_hndl_t res, u8 mode) afu 2400 drivers/scsi/cxlflash/main.c struct cxlflash_cfg *cfg = afu->parent; afu 2405 drivers/scsi/cxlflash/main.c __func__, afu, ctx, res, mode); afu 2416 drivers/scsi/cxlflash/main.c return send_afu_cmd(afu, &rcb); afu 2436 drivers/scsi/cxlflash/main.c struct afu *afu = cfg->afu; afu 2437 drivers/scsi/cxlflash/main.c struct hwq *hwq = get_hwq(afu, cmd->hwq_index); afu 2456 drivers/scsi/cxlflash/main.c rc = afu->context_reset(hwq); afu 2694 drivers/scsi/cxlflash/main.c struct afu *afu = cfg->afu; afu 2696 drivers/scsi/cxlflash/main.c return scnprintf(buf, PAGE_SIZE, "%u\n", afu->internal_lun); afu 2727 drivers/scsi/cxlflash/main.c struct afu *afu = cfg->afu; afu 2732 drivers/scsi/cxlflash/main.c if (!rc && (lun_mode < 5) && (lun_mode != afu->internal_lun)) { afu 2733 drivers/scsi/cxlflash/main.c afu->internal_lun = lun_mode; afu 2740 drivers/scsi/cxlflash/main.c if (afu->internal_lun) afu 2890 drivers/scsi/cxlflash/main.c struct afu *afu = cfg->afu; afu 2892 drivers/scsi/cxlflash/main.c return scnprintf(buf, PAGE_SIZE, "%u\n", afu->irqpoll_weight); afu 2913 drivers/scsi/cxlflash/main.c struct afu *afu = cfg->afu; afu 2928 drivers/scsi/cxlflash/main.c if (weight == afu->irqpoll_weight) { afu 2934 drivers/scsi/cxlflash/main.c if (afu_is_irqpoll_enabled(afu)) { afu 2935 drivers/scsi/cxlflash/main.c for (i = 0; i < afu->num_hwqs; i++) { afu 2936 drivers/scsi/cxlflash/main.c hwq = get_hwq(afu, i); afu 2942 drivers/scsi/cxlflash/main.c afu->irqpoll_weight = weight; afu 2945 drivers/scsi/cxlflash/main.c for (i = 0; i < afu->num_hwqs; i++) { afu 2946 drivers/scsi/cxlflash/main.c hwq = get_hwq(afu, i); afu 2968 drivers/scsi/cxlflash/main.c struct afu *afu = cfg->afu; afu 2970 drivers/scsi/cxlflash/main.c return scnprintf(buf, PAGE_SIZE, "%u\n", afu->num_hwqs); afu 2992 drivers/scsi/cxlflash/main.c struct afu *afu = cfg->afu; afu 3007 drivers/scsi/cxlflash/main.c afu->desired_hwqs = min(num_hwqs, CXLFLASH_MAX_HWQS); afu 3008 drivers/scsi/cxlflash/main.c WARN_ON_ONCE(afu->desired_hwqs == 0); afu 3053 drivers/scsi/cxlflash/main.c struct afu *afu = cfg->afu; afu 3055 drivers/scsi/cxlflash/main.c return scnprintf(buf, PAGE_SIZE, "%s\n", hwq_mode_name[afu->hwq_mode]); afu 3079 drivers/scsi/cxlflash/main.c struct afu *afu = cfg->afu; afu 3095 drivers/scsi/cxlflash/main.c afu->hwq_mode = mode; afu 3224 drivers/scsi/cxlflash/main.c struct afu *afu = cfg->afu; afu 3248 drivers/scsi/cxlflash/main.c afu_link_reset(afu, port, fc_port_regs); afu 3309 drivers/scsi/cxlflash/main.c struct afu *afu = cfg->afu; afu 3322 drivers/scsi/cxlflash/main.c if (!afu_is_lun_provision(afu)) { afu 3374 drivers/scsi/cxlflash/main.c rc = send_afu_cmd(afu, &rcb); afu 3403 drivers/scsi/cxlflash/main.c struct afu *afu = cfg->afu; afu 3415 drivers/scsi/cxlflash/main.c if (!afu_is_afu_debug(afu)) { afu 3463 drivers/scsi/cxlflash/main.c rc = send_afu_cmd(afu, &rcb); afu 180 drivers/scsi/cxlflash/ocxl_hw.c struct ocxl_hw_afu *afu = ctx->hw_afu; afu 181 drivers/scsi/cxlflash/ocxl_hw.c struct device *dev = afu->dev; afu 252 drivers/scsi/cxlflash/ocxl_hw.c struct ocxl_hw_afu *afu = ctx->hw_afu; afu 253 drivers/scsi/cxlflash/ocxl_hw.c struct device *dev = afu->dev; afu 330 drivers/scsi/cxlflash/ocxl_hw.c struct ocxl_hw_afu *afu = ctx->hw_afu; afu 331 drivers/scsi/cxlflash/ocxl_hw.c struct ocxl_afu_config *acfg = &afu->acfg; afu 332 drivers/scsi/cxlflash/ocxl_hw.c void *link_token = afu->link_token; afu 333 drivers/scsi/cxlflash/ocxl_hw.c struct device *dev = afu->dev; afu 349 drivers/scsi/cxlflash/ocxl_hw.c ctx->psn_phys = afu->gmmio_phys; afu 352 drivers/scsi/cxlflash/ocxl_hw.c ctx->psn_phys = afu->ppmmio_phys + (ctx->pe * ctx->psn_size); afu 400 drivers/scsi/cxlflash/ocxl_hw.c struct ocxl_hw_afu *afu = ctx->hw_afu; afu 401 drivers/scsi/cxlflash/ocxl_hw.c struct ocxl_afu_config *acfg = &afu->acfg; afu 402 drivers/scsi/cxlflash/ocxl_hw.c struct pci_dev *pdev = afu->pdev; afu 403 drivers/scsi/cxlflash/ocxl_hw.c struct device *dev = afu->dev; afu 424 drivers/scsi/cxlflash/ocxl_hw.c rc = ocxl_link_remove_pe(afu->link_token, ctx->pe); afu 470 drivers/scsi/cxlflash/ocxl_hw.c struct ocxl_hw_afu *afu = afu_cookie; afu 472 drivers/scsi/cxlflash/ocxl_hw.c return afu->ocxl_ctx; afu 484 drivers/scsi/cxlflash/ocxl_hw.c struct ocxl_hw_afu *afu = afu_cookie; afu 485 drivers/scsi/cxlflash/ocxl_hw.c struct device *dev = afu->dev; afu 497 drivers/scsi/cxlflash/ocxl_hw.c rc = idr_alloc(&afu->idr, ctx, 0, afu->max_pasid, GFP_NOWAIT); afu 512 drivers/scsi/cxlflash/ocxl_hw.c ctx->hw_afu = afu; afu 565 drivers/scsi/cxlflash/ocxl_hw.c struct ocxl_hw_afu *afu = afu_cookie; afu 567 drivers/scsi/cxlflash/ocxl_hw.c afu->perst_same_image = image; afu 590 drivers/scsi/cxlflash/ocxl_hw.c struct ocxl_hw_afu *afu = ctx->hw_afu; afu 591 drivers/scsi/cxlflash/ocxl_hw.c struct device *dev = afu->dev; afu 600 drivers/scsi/cxlflash/ocxl_hw.c ocxl_link_free_irq(afu->link_token, ctx->irqs[i].hwirq); afu 615 drivers/scsi/cxlflash/ocxl_hw.c struct ocxl_hw_afu *afu = ctx->hw_afu; afu 616 drivers/scsi/cxlflash/ocxl_hw.c struct device *dev = afu->dev; afu 643 drivers/scsi/cxlflash/ocxl_hw.c rc = ocxl_link_irq_alloc(afu->link_token, &hwirq, &addr); afu 660 drivers/scsi/cxlflash/ocxl_hw.c ocxl_link_free_irq(afu->link_token, irqs[i].hwirq); afu 690 drivers/scsi/cxlflash/ocxl_hw.c static void ocxlflash_unconfig_afu(struct ocxl_hw_afu *afu) afu 692 drivers/scsi/cxlflash/ocxl_hw.c if (afu->gmmio_virt) { afu 693 drivers/scsi/cxlflash/ocxl_hw.c iounmap(afu->gmmio_virt); afu 694 drivers/scsi/cxlflash/ocxl_hw.c afu->gmmio_virt = NULL; afu 704 drivers/scsi/cxlflash/ocxl_hw.c struct ocxl_hw_afu *afu = afu_cookie; afu 707 drivers/scsi/cxlflash/ocxl_hw.c if (!afu) afu 710 drivers/scsi/cxlflash/ocxl_hw.c ocxlflash_release_context(afu->ocxl_ctx); afu 711 drivers/scsi/cxlflash/ocxl_hw.c idr_destroy(&afu->idr); afu 714 drivers/scsi/cxlflash/ocxl_hw.c pos = afu->acfg.dvsec_afu_control_pos; afu 715 drivers/scsi/cxlflash/ocxl_hw.c ocxl_config_set_afu_state(afu->pdev, pos, 0); afu 717 drivers/scsi/cxlflash/ocxl_hw.c ocxlflash_unconfig_afu(afu); afu 718 drivers/scsi/cxlflash/ocxl_hw.c kfree(afu); afu 728 drivers/scsi/cxlflash/ocxl_hw.c static int ocxlflash_config_fn(struct pci_dev *pdev, struct ocxl_hw_afu *afu) afu 730 drivers/scsi/cxlflash/ocxl_hw.c struct ocxl_fn_config *fcfg = &afu->fcfg; afu 745 drivers/scsi/cxlflash/ocxl_hw.c afu->is_present = true; afu 758 drivers/scsi/cxlflash/ocxl_hw.c afu->fn_actag_base = base; afu 759 drivers/scsi/cxlflash/ocxl_hw.c afu->fn_actag_enabled = enabled; afu 765 drivers/scsi/cxlflash/ocxl_hw.c rc = ocxl_link_setup(pdev, 0, &afu->link_token); afu 781 drivers/scsi/cxlflash/ocxl_hw.c ocxl_link_release(pdev, afu->link_token); afu 790 drivers/scsi/cxlflash/ocxl_hw.c static void ocxlflash_unconfig_fn(struct pci_dev *pdev, struct ocxl_hw_afu *afu) afu 792 drivers/scsi/cxlflash/ocxl_hw.c ocxl_link_release(pdev, afu->link_token); afu 801 drivers/scsi/cxlflash/ocxl_hw.c static int ocxlflash_map_mmio(struct ocxl_hw_afu *afu) afu 803 drivers/scsi/cxlflash/ocxl_hw.c struct ocxl_afu_config *acfg = &afu->acfg; afu 804 drivers/scsi/cxlflash/ocxl_hw.c struct pci_dev *pdev = afu->pdev; afu 805 drivers/scsi/cxlflash/ocxl_hw.c struct device *dev = afu->dev; afu 827 drivers/scsi/cxlflash/ocxl_hw.c afu->gmmio_virt = ioremap(gmmio, acfg->global_mmio_size); afu 828 drivers/scsi/cxlflash/ocxl_hw.c if (unlikely(!afu->gmmio_virt)) { afu 834 drivers/scsi/cxlflash/ocxl_hw.c afu->gmmio_phys = gmmio; afu 835 drivers/scsi/cxlflash/ocxl_hw.c afu->ppmmio_phys = ppmmio; afu 854 drivers/scsi/cxlflash/ocxl_hw.c static int ocxlflash_config_afu(struct pci_dev *pdev, struct ocxl_hw_afu *afu) afu 856 drivers/scsi/cxlflash/ocxl_hw.c struct ocxl_afu_config *acfg = &afu->acfg; afu 857 drivers/scsi/cxlflash/ocxl_hw.c struct ocxl_fn_config *fcfg = &afu->fcfg; afu 865 drivers/scsi/cxlflash/ocxl_hw.c if (!afu->is_present) afu 877 drivers/scsi/cxlflash/ocxl_hw.c base = afu->fn_actag_base; afu 878 drivers/scsi/cxlflash/ocxl_hw.c count = min_t(int, acfg->actag_supported, afu->fn_actag_enabled); afu 883 drivers/scsi/cxlflash/ocxl_hw.c afu->afu_actag_base = base; afu 884 drivers/scsi/cxlflash/ocxl_hw.c afu->afu_actag_enabled = count; afu 885 drivers/scsi/cxlflash/ocxl_hw.c afu->max_pasid = 1 << acfg->pasid_supported_log; afu 889 drivers/scsi/cxlflash/ocxl_hw.c rc = ocxlflash_map_mmio(afu); afu 912 drivers/scsi/cxlflash/ocxl_hw.c struct ocxl_hw_afu *afu; afu 915 drivers/scsi/cxlflash/ocxl_hw.c afu = kzalloc(sizeof(*afu), GFP_KERNEL); afu 916 drivers/scsi/cxlflash/ocxl_hw.c if (unlikely(!afu)) { afu 921 drivers/scsi/cxlflash/ocxl_hw.c afu->pdev = pdev; afu 922 drivers/scsi/cxlflash/ocxl_hw.c afu->dev = dev; afu 923 drivers/scsi/cxlflash/ocxl_hw.c idr_init(&afu->idr); afu 925 drivers/scsi/cxlflash/ocxl_hw.c rc = ocxlflash_config_fn(pdev, afu); afu 932 drivers/scsi/cxlflash/ocxl_hw.c rc = ocxlflash_config_afu(pdev, afu); afu 939 drivers/scsi/cxlflash/ocxl_hw.c ctx = ocxlflash_dev_context_init(pdev, afu); afu 947 drivers/scsi/cxlflash/ocxl_hw.c afu->ocxl_ctx = ctx; afu 949 drivers/scsi/cxlflash/ocxl_hw.c return afu; afu 951 drivers/scsi/cxlflash/ocxl_hw.c ocxlflash_unconfig_afu(afu); afu 953 drivers/scsi/cxlflash/ocxl_hw.c ocxlflash_unconfig_fn(pdev, afu); afu 955 drivers/scsi/cxlflash/ocxl_hw.c idr_destroy(&afu->idr); afu 956 drivers/scsi/cxlflash/ocxl_hw.c kfree(afu); afu 957 drivers/scsi/cxlflash/ocxl_hw.c afu = NULL; afu 1310 drivers/scsi/cxlflash/ocxl_hw.c struct ocxl_hw_afu *afu = ctx->hw_afu; afu 1311 drivers/scsi/cxlflash/ocxl_hw.c struct device *dev = afu->dev; afu 264 drivers/scsi/cxlflash/superpipe.c struct afu *afu = cfg->afu; afu 267 drivers/scsi/cxlflash/superpipe.c struct hwq *hwq = get_hwq(afu, PRIMARY_HWQ); afu 283 drivers/scsi/cxlflash/superpipe.c if (afu_is_ocxl_lisn(afu)) { afu 638 drivers/scsi/cxlflash/superpipe.c struct afu *afu = cfg->afu; afu 711 drivers/scsi/cxlflash/superpipe.c rcr = cxlflash_afu_sync(afu, ctxid, rhndl, AFU_HW_SYNC); afu 754 drivers/scsi/cxlflash/superpipe.c struct afu *afu = cfg->afu; afu 760 drivers/scsi/cxlflash/superpipe.c if (afu->afu_map && ctxi->ctrl_map) { afu 830 drivers/scsi/cxlflash/superpipe.c struct afu *afu = cfg->afu; afu 833 drivers/scsi/cxlflash/superpipe.c ctxi->ctrl_map = &afu->afu_map->ctrls[ctxid].ctrl; afu 1322 drivers/scsi/cxlflash/superpipe.c struct afu *afu = cfg->afu; afu 1469 drivers/scsi/cxlflash/superpipe.c if (afu_is_sq_cmd_mode(afu)) afu 1475 drivers/scsi/cxlflash/superpipe.c attach->mmio_size = sizeof(afu->afu_map->hosts[0].harea); afu 1544 drivers/scsi/cxlflash/superpipe.c struct afu *afu = cfg->afu; afu 1576 drivers/scsi/cxlflash/superpipe.c ctxi->ctrl_map = &afu->afu_map->ctrls[ctxid].ctrl; afu 1657 drivers/scsi/cxlflash/superpipe.c struct afu *afu = cfg->afu; afu 1660 drivers/scsi/cxlflash/superpipe.c struct hwq *hwq = get_hwq(afu, PRIMARY_HWQ); afu 1726 drivers/scsi/cxlflash/superpipe.c if (afu_is_sq_cmd_mode(afu)) afu 1732 drivers/scsi/cxlflash/superpipe.c recover->mmio_size = sizeof(afu->afu_map->hosts[0].harea); afu 1966 drivers/scsi/cxlflash/superpipe.c struct afu *afu = cfg->afu; afu 2017 drivers/scsi/cxlflash/superpipe.c rc = cxlflash_afu_sync(afu, ctxid, rsrc_handle, AFU_LW_SYNC); afu 2101 drivers/scsi/cxlflash/superpipe.c struct afu *afu = cfg->afu; afu 2131 drivers/scsi/cxlflash/superpipe.c if (afu->internal_lun) afu 2138 drivers/scsi/cxlflash/superpipe.c __func__, decode_ioctl(cmd), afu->internal_lun); afu 500 drivers/scsi/cxlflash/vlun.c static int grow_lxt(struct afu *afu, afu 594 drivers/scsi/cxlflash/vlun.c rc = cxlflash_afu_sync(afu, ctxid, rhndl, AFU_LW_SYNC); afu 618 drivers/scsi/cxlflash/vlun.c static int shrink_lxt(struct afu *afu, afu 676 drivers/scsi/cxlflash/vlun.c rc = cxlflash_afu_sync(afu, ctxid, rhndl, AFU_HW_SYNC); afu 737 drivers/scsi/cxlflash/vlun.c struct afu *afu = cfg->afu; afu 790 drivers/scsi/cxlflash/vlun.c rc = grow_lxt(afu, sdev, ctxid, rhndl, rhte, &new_size); afu 792 drivers/scsi/cxlflash/vlun.c rc = shrink_lxt(afu, sdev, rhndl, rhte, ctxi, &new_size); afu 802 drivers/scsi/cxlflash/vlun.c rc = cxlflash_afu_sync(afu, ctxid, rhndl, AFU_HW_SYNC); afu 1091 drivers/scsi/cxlflash/vlun.c static int clone_lxt(struct afu *afu, afu 1098 drivers/scsi/cxlflash/vlun.c struct cxlflash_cfg *cfg = afu->parent; afu 1151 drivers/scsi/cxlflash/vlun.c rc = cxlflash_afu_sync(afu, ctxid, rhndl, AFU_LW_SYNC); afu 1198 drivers/scsi/cxlflash/vlun.c struct afu *afu = cfg->afu; afu 1302 drivers/scsi/cxlflash/vlun.c rc = clone_lxt(afu, blka, ctxid_dst, i, afu 35 include/misc/cxl-base.h struct cxl_afu *cxl_afu_get(struct cxl_afu *afu); afu 36 include/misc/cxl-base.h void cxl_afu_put(struct cxl_afu *afu); afu 42 include/misc/cxl-base.h static inline struct cxl_afu *cxl_afu_get(struct cxl_afu *afu) { return NULL; } afu 43 include/misc/cxl-base.h static inline void cxl_afu_put(struct cxl_afu *afu) {} afu 209 include/misc/cxl.h void cxl_perst_reloads_same_image(struct cxl_afu *afu, afu 99 include/misc/ocxl.h void ocxl_afu_get(struct ocxl_afu *afu); afu 106 include/misc/ocxl.h void ocxl_afu_put(struct ocxl_afu *afu); afu 138 include/misc/ocxl.h int ocxl_context_alloc(struct ocxl_context **context, struct ocxl_afu *afu, afu 222 include/misc/ocxl.h struct ocxl_afu_config *ocxl_afu_config(struct ocxl_afu *afu); afu 230 include/misc/ocxl.h void ocxl_afu_set_private(struct ocxl_afu *afu, void *private); afu 253 include/misc/ocxl.h int ocxl_global_mmio_read32(struct ocxl_afu *afu, size_t offset, afu 266 include/misc/ocxl.h int ocxl_global_mmio_read64(struct ocxl_afu *afu, size_t offset, afu 279 include/misc/ocxl.h int ocxl_global_mmio_write32(struct ocxl_afu *afu, size_t offset, afu 292 include/misc/ocxl.h int ocxl_global_mmio_write64(struct ocxl_afu *afu, size_t offset, afu 305 include/misc/ocxl.h int ocxl_global_mmio_set32(struct ocxl_afu *afu, size_t offset, afu 318 include/misc/ocxl.h int ocxl_global_mmio_set64(struct ocxl_afu *afu, size_t offset, afu 331 include/misc/ocxl.h int ocxl_global_mmio_clear32(struct ocxl_afu *afu, size_t offset, afu 344 include/misc/ocxl.h int ocxl_global_mmio_clear64(struct ocxl_afu *afu, size_t offset, afu 355 include/misc/ocxl.h struct ocxl_afu_config *afu,