pci.c (810813c47a564416f6306ae214e2661366c987a7) | pci.c (8633186209e35dfafc27c3d0f0d5e702ab47265f) |
---|---|
1/* 2 * Copyright 2014 IBM Corp. 3 * 4 * This program is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU General Public License 6 * as published by the Free Software Foundation; either version 7 * 2 of the License, or (at your option) any later version. 8 */ --- 401 unchanged lines hidden (view full) --- 410 if (retry++ > 5) { 411 pr_err("PSL: Timebase sync: giving up!\n"); 412 return -EIO; 413 } 414 psl_tb = cxl_p1_read(adapter, CXL_PSL_Timebase); 415 delta = mftb() - psl_tb; 416 if (delta < 0) 417 delta = -delta; | 1/* 2 * Copyright 2014 IBM Corp. 3 * 4 * This program is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU General Public License 6 * as published by the Free Software Foundation; either version 7 * 2 of the License, or (at your option) any later version. 8 */ --- 401 unchanged lines hidden (view full) --- 410 if (retry++ > 5) { 411 pr_err("PSL: Timebase sync: giving up!\n"); 412 return -EIO; 413 } 414 psl_tb = cxl_p1_read(adapter, CXL_PSL_Timebase); 415 delta = mftb() - psl_tb; 416 if (delta < 0) 417 delta = -delta; |
418 } while (tb_to_ns(delta) > 16000); | 418 } while (cputime_to_usecs(delta) > 16); |
419 420 return 0; 421} 422 423static int init_implementation_afu_regs(struct cxl_afu *afu) 424{ 425 /* read/write masks for this slice */ 426 cxl_p1n_write(afu, CXL_PSL_APCALLOC_A, 0xFFFFFFFEFEFEFEFEULL); --- 172 unchanged lines hidden (view full) --- 599 afu->p1n_mmio = NULL; 600 } 601 if (afu->afu_desc_mmio) { 602 iounmap(afu->afu_desc_mmio); 603 afu->afu_desc_mmio = NULL; 604 } 605} 606 | 419 420 return 0; 421} 422 423static int init_implementation_afu_regs(struct cxl_afu *afu) 424{ 425 /* read/write masks for this slice */ 426 cxl_p1n_write(afu, CXL_PSL_APCALLOC_A, 0xFFFFFFFEFEFEFEFEULL); --- 172 unchanged lines hidden (view full) --- 599 afu->p1n_mmio = NULL; 600 } 601 if (afu->afu_desc_mmio) { 602 iounmap(afu->afu_desc_mmio); 603 afu->afu_desc_mmio = NULL; 604 } 605} 606 |
607static void cxl_release_afu(struct device *dev) | 607void cxl_release_afu(struct device *dev) |
608{ 609 struct cxl_afu *afu = to_cxl_afu(dev); 610 611 pr_devel("cxl_release_afu\n"); 612 613 idr_destroy(&afu->contexts_idr); 614 cxl_release_spa(afu); 615 616 kfree(afu); 617} 618 | 608{ 609 struct cxl_afu *afu = to_cxl_afu(dev); 610 611 pr_devel("cxl_release_afu\n"); 612 613 idr_destroy(&afu->contexts_idr); 614 cxl_release_spa(afu); 615 616 kfree(afu); 617} 618 |
619static struct cxl_afu *cxl_alloc_afu(struct cxl *adapter, int slice) 620{ 621 struct cxl_afu *afu; 622 623 if (!(afu = kzalloc(sizeof(struct cxl_afu), GFP_KERNEL))) 624 return NULL; 625 626 afu->adapter = adapter; 627 afu->dev.parent = &adapter->dev; 628 afu->dev.release = cxl_release_afu; 629 afu->slice = slice; 630 idr_init(&afu->contexts_idr); 631 mutex_init(&afu->contexts_lock); 632 spin_lock_init(&afu->afu_cntl_lock); 633 mutex_init(&afu->spa_mutex); 634 635 afu->prefault_mode = CXL_PREFAULT_NONE; 636 afu->irqs_max = afu->adapter->user_irqs; 637 638 return afu; 639} 640 | |
641/* Expects AFU struct to have recently been zeroed out */ 642static int cxl_read_afu_descriptor(struct cxl_afu *afu) 643{ 644 u64 val; 645 646 val = AFUD_READ_INFO(afu); 647 afu->pp_irqs = AFUD_NUM_INTS_PER_PROC(val); 648 afu->max_procs_virtualised = AFUD_NUM_PROCS(val); --- 451 unchanged lines hidden (view full) --- 1100 1101 pr_devel("cxl_release_adapter\n"); 1102 1103 cxl_remove_adapter_nr(adapter); 1104 1105 kfree(adapter); 1106} 1107 | 619/* Expects AFU struct to have recently been zeroed out */ 620static int cxl_read_afu_descriptor(struct cxl_afu *afu) 621{ 622 u64 val; 623 624 val = AFUD_READ_INFO(afu); 625 afu->pp_irqs = AFUD_NUM_INTS_PER_PROC(val); 626 afu->max_procs_virtualised = AFUD_NUM_PROCS(val); --- 451 unchanged lines hidden (view full) --- 1078 1079 pr_devel("cxl_release_adapter\n"); 1080 1081 cxl_remove_adapter_nr(adapter); 1082 1083 kfree(adapter); 1084} 1085 |
1108static struct cxl *cxl_alloc_adapter(void) 1109{ 1110 struct cxl *adapter; 1111 1112 if (!(adapter = kzalloc(sizeof(struct cxl), GFP_KERNEL))) 1113 return NULL; 1114 1115 spin_lock_init(&adapter->afu_list_lock); 1116 1117 if (cxl_alloc_adapter_nr(adapter)) 1118 goto err1; 1119 1120 if (dev_set_name(&adapter->dev, "card%i", adapter->adapter_num)) 1121 goto err2; 1122 1123 return adapter; 1124 1125err2: 1126 cxl_remove_adapter_nr(adapter); 1127err1: 1128 kfree(adapter); 1129 return NULL; 1130} 1131 | |
1132#define CXL_PSL_ErrIVTE_tberror (0x1ull << (63-31)) 1133 1134static int sanitise_adapter_regs(struct cxl *adapter) 1135{ 1136 /* Clear PSL tberror bit by writing 1 to it */ 1137 cxl_p1_write(adapter, CXL_PSL_ErrIVTE, CXL_PSL_ErrIVTE_tberror); 1138 return cxl_tlb_slb_invalidate(adapter); 1139} --- 441 unchanged lines hidden --- | 1086#define CXL_PSL_ErrIVTE_tberror (0x1ull << (63-31)) 1087 1088static int sanitise_adapter_regs(struct cxl *adapter) 1089{ 1090 /* Clear PSL tberror bit by writing 1 to it */ 1091 cxl_p1_write(adapter, CXL_PSL_ErrIVTE, CXL_PSL_ErrIVTE_tberror); 1092 return cxl_tlb_slb_invalidate(adapter); 1093} --- 441 unchanged lines hidden --- |