|
@@ -63,7 +63,7 @@ typedef struct {
|
|
/* Memory maps. Ref CXL Appendix A */
|
|
/* Memory maps. Ref CXL Appendix A */
|
|
|
|
|
|
/* PSL Privilege 1 Memory Map */
|
|
/* PSL Privilege 1 Memory Map */
|
|
-/* Configuration and Control area */
|
|
|
|
|
|
+/* Configuration and Control area - CAIA 1&2 */
|
|
static const cxl_p1_reg_t CXL_PSL_CtxTime = {0x0000};
|
|
static const cxl_p1_reg_t CXL_PSL_CtxTime = {0x0000};
|
|
static const cxl_p1_reg_t CXL_PSL_ErrIVTE = {0x0008};
|
|
static const cxl_p1_reg_t CXL_PSL_ErrIVTE = {0x0008};
|
|
static const cxl_p1_reg_t CXL_PSL_KEY1 = {0x0010};
|
|
static const cxl_p1_reg_t CXL_PSL_KEY1 = {0x0010};
|
|
@@ -98,11 +98,29 @@ static const cxl_p1_reg_t CXL_XSL_Timebase = {0x0100};
|
|
static const cxl_p1_reg_t CXL_XSL_TB_CTLSTAT = {0x0108};
|
|
static const cxl_p1_reg_t CXL_XSL_TB_CTLSTAT = {0x0108};
|
|
static const cxl_p1_reg_t CXL_XSL_FEC = {0x0158};
|
|
static const cxl_p1_reg_t CXL_XSL_FEC = {0x0158};
|
|
static const cxl_p1_reg_t CXL_XSL_DSNCTL = {0x0168};
|
|
static const cxl_p1_reg_t CXL_XSL_DSNCTL = {0x0168};
|
|
|
|
+/* PSL registers - CAIA 2 */
|
|
|
|
+static const cxl_p1_reg_t CXL_PSL9_CONTROL = {0x0020};
|
|
|
|
+static const cxl_p1_reg_t CXL_XSL9_DSNCTL = {0x0168};
|
|
|
|
+static const cxl_p1_reg_t CXL_PSL9_FIR1 = {0x0300};
|
|
|
|
+static const cxl_p1_reg_t CXL_PSL9_FIR2 = {0x0308};
|
|
|
|
+static const cxl_p1_reg_t CXL_PSL9_Timebase = {0x0310};
|
|
|
|
+static const cxl_p1_reg_t CXL_PSL9_DEBUG = {0x0320};
|
|
|
|
+static const cxl_p1_reg_t CXL_PSL9_FIR_CNTL = {0x0348};
|
|
|
|
+static const cxl_p1_reg_t CXL_PSL9_DSNDCTL = {0x0350};
|
|
|
|
+static const cxl_p1_reg_t CXL_PSL9_TB_CTLSTAT = {0x0340};
|
|
|
|
+static const cxl_p1_reg_t CXL_PSL9_TRACECFG = {0x0368};
|
|
|
|
+static const cxl_p1_reg_t CXL_PSL9_APCDEDALLOC = {0x0378};
|
|
|
|
+static const cxl_p1_reg_t CXL_PSL9_APCDEDTYPE = {0x0380};
|
|
|
|
+static const cxl_p1_reg_t CXL_PSL9_TNR_ADDR = {0x0388};
|
|
|
|
+static const cxl_p1_reg_t CXL_PSL9_GP_CT = {0x0398};
|
|
|
|
+static const cxl_p1_reg_t CXL_XSL9_IERAT = {0x0588};
|
|
|
|
+static const cxl_p1_reg_t CXL_XSL9_ILPP = {0x0590};
|
|
|
|
+
|
|
/* 0x7F00:7FFF Reserved PCIe MSI-X Pending Bit Array area */
|
|
/* 0x7F00:7FFF Reserved PCIe MSI-X Pending Bit Array area */
|
|
/* 0x8000:FFFF Reserved PCIe MSI-X Table Area */
|
|
/* 0x8000:FFFF Reserved PCIe MSI-X Table Area */
|
|
|
|
|
|
/* PSL Slice Privilege 1 Memory Map */
|
|
/* PSL Slice Privilege 1 Memory Map */
|
|
-/* Configuration Area */
|
|
|
|
|
|
+/* Configuration Area - CAIA 1&2 */
|
|
static const cxl_p1n_reg_t CXL_PSL_SR_An = {0x00};
|
|
static const cxl_p1n_reg_t CXL_PSL_SR_An = {0x00};
|
|
static const cxl_p1n_reg_t CXL_PSL_LPID_An = {0x08};
|
|
static const cxl_p1n_reg_t CXL_PSL_LPID_An = {0x08};
|
|
static const cxl_p1n_reg_t CXL_PSL_AMBAR_An = {0x10};
|
|
static const cxl_p1n_reg_t CXL_PSL_AMBAR_An = {0x10};
|
|
@@ -111,17 +129,18 @@ static const cxl_p1n_reg_t CXL_PSL_ID_An = {0x20};
|
|
static const cxl_p1n_reg_t CXL_PSL_SERR_An = {0x28};
|
|
static const cxl_p1n_reg_t CXL_PSL_SERR_An = {0x28};
|
|
/* Memory Management and Lookaside Buffer Management - CAIA 1*/
|
|
/* Memory Management and Lookaside Buffer Management - CAIA 1*/
|
|
static const cxl_p1n_reg_t CXL_PSL_SDR_An = {0x30};
|
|
static const cxl_p1n_reg_t CXL_PSL_SDR_An = {0x30};
|
|
|
|
+/* Memory Management and Lookaside Buffer Management - CAIA 1&2 */
|
|
static const cxl_p1n_reg_t CXL_PSL_AMOR_An = {0x38};
|
|
static const cxl_p1n_reg_t CXL_PSL_AMOR_An = {0x38};
|
|
-/* Pointer Area */
|
|
|
|
|
|
+/* Pointer Area - CAIA 1&2 */
|
|
static const cxl_p1n_reg_t CXL_HAURP_An = {0x80};
|
|
static const cxl_p1n_reg_t CXL_HAURP_An = {0x80};
|
|
static const cxl_p1n_reg_t CXL_PSL_SPAP_An = {0x88};
|
|
static const cxl_p1n_reg_t CXL_PSL_SPAP_An = {0x88};
|
|
static const cxl_p1n_reg_t CXL_PSL_LLCMD_An = {0x90};
|
|
static const cxl_p1n_reg_t CXL_PSL_LLCMD_An = {0x90};
|
|
-/* Control Area */
|
|
|
|
|
|
+/* Control Area - CAIA 1&2 */
|
|
static const cxl_p1n_reg_t CXL_PSL_SCNTL_An = {0xA0};
|
|
static const cxl_p1n_reg_t CXL_PSL_SCNTL_An = {0xA0};
|
|
static const cxl_p1n_reg_t CXL_PSL_CtxTime_An = {0xA8};
|
|
static const cxl_p1n_reg_t CXL_PSL_CtxTime_An = {0xA8};
|
|
static const cxl_p1n_reg_t CXL_PSL_IVTE_Offset_An = {0xB0};
|
|
static const cxl_p1n_reg_t CXL_PSL_IVTE_Offset_An = {0xB0};
|
|
static const cxl_p1n_reg_t CXL_PSL_IVTE_Limit_An = {0xB8};
|
|
static const cxl_p1n_reg_t CXL_PSL_IVTE_Limit_An = {0xB8};
|
|
-/* 0xC0:FF Implementation Dependent Area */
|
|
|
|
|
|
+/* 0xC0:FF Implementation Dependent Area - CAIA 1&2 */
|
|
static const cxl_p1n_reg_t CXL_PSL_FIR_SLICE_An = {0xC0};
|
|
static const cxl_p1n_reg_t CXL_PSL_FIR_SLICE_An = {0xC0};
|
|
static const cxl_p1n_reg_t CXL_AFU_DEBUG_An = {0xC8};
|
|
static const cxl_p1n_reg_t CXL_AFU_DEBUG_An = {0xC8};
|
|
/* 0xC0:FF Implementation Dependent Area - CAIA 1 */
|
|
/* 0xC0:FF Implementation Dependent Area - CAIA 1 */
|
|
@@ -131,7 +150,7 @@ static const cxl_p1n_reg_t CXL_PSL_RXCTL_A = {0xE0};
|
|
static const cxl_p1n_reg_t CXL_PSL_SLICE_TRACE = {0xE8};
|
|
static const cxl_p1n_reg_t CXL_PSL_SLICE_TRACE = {0xE8};
|
|
|
|
|
|
/* PSL Slice Privilege 2 Memory Map */
|
|
/* PSL Slice Privilege 2 Memory Map */
|
|
-/* Configuration and Control Area */
|
|
|
|
|
|
+/* Configuration and Control Area - CAIA 1&2 */
|
|
static const cxl_p2n_reg_t CXL_PSL_PID_TID_An = {0x000};
|
|
static const cxl_p2n_reg_t CXL_PSL_PID_TID_An = {0x000};
|
|
static const cxl_p2n_reg_t CXL_CSRP_An = {0x008};
|
|
static const cxl_p2n_reg_t CXL_CSRP_An = {0x008};
|
|
/* Configuration and Control Area - CAIA 1 */
|
|
/* Configuration and Control Area - CAIA 1 */
|
|
@@ -145,17 +164,17 @@ static const cxl_p2n_reg_t CXL_PSL_AMR_An = {0x030};
|
|
static const cxl_p2n_reg_t CXL_SLBIE_An = {0x040};
|
|
static const cxl_p2n_reg_t CXL_SLBIE_An = {0x040};
|
|
static const cxl_p2n_reg_t CXL_SLBIA_An = {0x048};
|
|
static const cxl_p2n_reg_t CXL_SLBIA_An = {0x048};
|
|
static const cxl_p2n_reg_t CXL_SLBI_Select_An = {0x050};
|
|
static const cxl_p2n_reg_t CXL_SLBI_Select_An = {0x050};
|
|
-/* Interrupt Registers */
|
|
|
|
|
|
+/* Interrupt Registers - CAIA 1&2 */
|
|
static const cxl_p2n_reg_t CXL_PSL_DSISR_An = {0x060};
|
|
static const cxl_p2n_reg_t CXL_PSL_DSISR_An = {0x060};
|
|
static const cxl_p2n_reg_t CXL_PSL_DAR_An = {0x068};
|
|
static const cxl_p2n_reg_t CXL_PSL_DAR_An = {0x068};
|
|
static const cxl_p2n_reg_t CXL_PSL_DSR_An = {0x070};
|
|
static const cxl_p2n_reg_t CXL_PSL_DSR_An = {0x070};
|
|
static const cxl_p2n_reg_t CXL_PSL_TFC_An = {0x078};
|
|
static const cxl_p2n_reg_t CXL_PSL_TFC_An = {0x078};
|
|
static const cxl_p2n_reg_t CXL_PSL_PEHandle_An = {0x080};
|
|
static const cxl_p2n_reg_t CXL_PSL_PEHandle_An = {0x080};
|
|
static const cxl_p2n_reg_t CXL_PSL_ErrStat_An = {0x088};
|
|
static const cxl_p2n_reg_t CXL_PSL_ErrStat_An = {0x088};
|
|
-/* AFU Registers */
|
|
|
|
|
|
+/* AFU Registers - CAIA 1&2 */
|
|
static const cxl_p2n_reg_t CXL_AFU_Cntl_An = {0x090};
|
|
static const cxl_p2n_reg_t CXL_AFU_Cntl_An = {0x090};
|
|
static const cxl_p2n_reg_t CXL_AFU_ERR_An = {0x098};
|
|
static const cxl_p2n_reg_t CXL_AFU_ERR_An = {0x098};
|
|
-/* Work Element Descriptor */
|
|
|
|
|
|
+/* Work Element Descriptor - CAIA 1&2 */
|
|
static const cxl_p2n_reg_t CXL_PSL_WED_An = {0x0A0};
|
|
static const cxl_p2n_reg_t CXL_PSL_WED_An = {0x0A0};
|
|
/* 0x0C0:FFF Implementation Dependent Area */
|
|
/* 0x0C0:FFF Implementation Dependent Area */
|
|
|
|
|
|
@@ -182,6 +201,10 @@ static const cxl_p2n_reg_t CXL_PSL_WED_An = {0x0A0};
|
|
#define CXL_PSL_SR_An_SF MSR_SF /* 64bit */
|
|
#define CXL_PSL_SR_An_SF MSR_SF /* 64bit */
|
|
#define CXL_PSL_SR_An_TA (1ull << (63-1)) /* Tags active, GA1: 0 */
|
|
#define CXL_PSL_SR_An_TA (1ull << (63-1)) /* Tags active, GA1: 0 */
|
|
#define CXL_PSL_SR_An_HV MSR_HV /* Hypervisor, GA1: 0 */
|
|
#define CXL_PSL_SR_An_HV MSR_HV /* Hypervisor, GA1: 0 */
|
|
|
|
+#define CXL_PSL_SR_An_XLAT_hpt (0ull << (63-6))/* Hashed page table (HPT) mode */
|
|
|
|
+#define CXL_PSL_SR_An_XLAT_roh (2ull << (63-6))/* Radix on HPT mode */
|
|
|
|
+#define CXL_PSL_SR_An_XLAT_ror (3ull << (63-6))/* Radix on Radix mode */
|
|
|
|
+#define CXL_PSL_SR_An_BOT (1ull << (63-10)) /* Use the in-memory segment table */
|
|
#define CXL_PSL_SR_An_PR MSR_PR /* Problem state, GA1: 1 */
|
|
#define CXL_PSL_SR_An_PR MSR_PR /* Problem state, GA1: 1 */
|
|
#define CXL_PSL_SR_An_ISL (1ull << (63-53)) /* Ignore Segment Large Page */
|
|
#define CXL_PSL_SR_An_ISL (1ull << (63-53)) /* Ignore Segment Large Page */
|
|
#define CXL_PSL_SR_An_TC (1ull << (63-54)) /* Page Table secondary hash */
|
|
#define CXL_PSL_SR_An_TC (1ull << (63-54)) /* Page Table secondary hash */
|
|
@@ -298,12 +321,39 @@ static const cxl_p2n_reg_t CXL_PSL_WED_An = {0x0A0};
|
|
#define CXL_PSL_DSISR_An_S DSISR_ISSTORE /* Access was afu_wr or afu_zero */
|
|
#define CXL_PSL_DSISR_An_S DSISR_ISSTORE /* Access was afu_wr or afu_zero */
|
|
#define CXL_PSL_DSISR_An_K DSISR_KEYFAULT /* Access not permitted by virtual page class key protection */
|
|
#define CXL_PSL_DSISR_An_K DSISR_KEYFAULT /* Access not permitted by virtual page class key protection */
|
|
|
|
|
|
|
|
+/****** CXL_PSL_DSISR_An - CAIA 2 ****************************************************/
|
|
|
|
+#define CXL_PSL9_DSISR_An_TF (1ull << (63-3)) /* Translation fault */
|
|
|
|
+#define CXL_PSL9_DSISR_An_PE (1ull << (63-4)) /* PSL Error (implementation specific) */
|
|
|
|
+#define CXL_PSL9_DSISR_An_AE (1ull << (63-5)) /* AFU Error */
|
|
|
|
+#define CXL_PSL9_DSISR_An_OC (1ull << (63-6)) /* OS Context Warning */
|
|
|
|
+#define CXL_PSL9_DSISR_An_S (1ull << (63-38)) /* TF for a write operation */
|
|
|
|
+#define CXL_PSL9_DSISR_PENDING (CXL_PSL9_DSISR_An_TF | CXL_PSL9_DSISR_An_PE | CXL_PSL9_DSISR_An_AE | CXL_PSL9_DSISR_An_OC)
|
|
|
|
+/*
|
|
|
|
+ * NOTE: Bits 56:63 (Checkout Response Status) are valid when DSISR_An[TF] = 1
|
|
|
|
+ * Status (0:7) Encoding
|
|
|
|
+ */
|
|
|
|
+#define CXL_PSL9_DSISR_An_CO_MASK 0x00000000000000ffULL
|
|
|
|
+#define CXL_PSL9_DSISR_An_SF 0x0000000000000080ULL /* Segment Fault 0b10000000 */
|
|
|
|
+#define CXL_PSL9_DSISR_An_PF_SLR 0x0000000000000088ULL /* PTE not found (Single Level Radix) 0b10001000 */
|
|
|
|
+#define CXL_PSL9_DSISR_An_PF_RGC 0x000000000000008CULL /* PTE not found (Radix Guest (child)) 0b10001100 */
|
|
|
|
+#define CXL_PSL9_DSISR_An_PF_RGP 0x0000000000000090ULL /* PTE not found (Radix Guest (parent)) 0b10010000 */
|
|
|
|
+#define CXL_PSL9_DSISR_An_PF_HRH 0x0000000000000094ULL /* PTE not found (HPT/Radix Host) 0b10010100 */
|
|
|
|
+#define CXL_PSL9_DSISR_An_PF_STEG 0x000000000000009CULL /* PTE not found (STEG VA) 0b10011100 */
|
|
|
|
+
|
|
/****** CXL_PSL_TFC_An ******************************************************/
|
|
/****** CXL_PSL_TFC_An ******************************************************/
|
|
#define CXL_PSL_TFC_An_A (1ull << (63-28)) /* Acknowledge non-translation fault */
|
|
#define CXL_PSL_TFC_An_A (1ull << (63-28)) /* Acknowledge non-translation fault */
|
|
#define CXL_PSL_TFC_An_C (1ull << (63-29)) /* Continue (abort transaction) */
|
|
#define CXL_PSL_TFC_An_C (1ull << (63-29)) /* Continue (abort transaction) */
|
|
#define CXL_PSL_TFC_An_AE (1ull << (63-30)) /* Restart PSL with address error */
|
|
#define CXL_PSL_TFC_An_AE (1ull << (63-30)) /* Restart PSL with address error */
|
|
#define CXL_PSL_TFC_An_R (1ull << (63-31)) /* Restart PSL transaction */
|
|
#define CXL_PSL_TFC_An_R (1ull << (63-31)) /* Restart PSL transaction */
|
|
|
|
|
|
|
|
+/****** CXL_XSL9_IERAT_ERAT - CAIA 2 **********************************/
|
|
|
|
+#define CXL_XSL9_IERAT_MLPID (1ull << (63-0)) /* Match LPID */
|
|
|
|
+#define CXL_XSL9_IERAT_MPID (1ull << (63-1)) /* Match PID */
|
|
|
|
+#define CXL_XSL9_IERAT_PRS (1ull << (63-4)) /* PRS bit for Radix invalidations */
|
|
|
|
+#define CXL_XSL9_IERAT_INVR (1ull << (63-3)) /* Invalidate Radix */
|
|
|
|
+#define CXL_XSL9_IERAT_IALL (1ull << (63-8)) /* Invalidate All */
|
|
|
|
+#define CXL_XSL9_IERAT_IINPROG (1ull << (63-63)) /* Invalidate in progress */
|
|
|
|
+
|
|
/* cxl_process_element->software_status */
|
|
/* cxl_process_element->software_status */
|
|
#define CXL_PE_SOFTWARE_STATE_V (1ul << (31 - 0)) /* Valid */
|
|
#define CXL_PE_SOFTWARE_STATE_V (1ul << (31 - 0)) /* Valid */
|
|
#define CXL_PE_SOFTWARE_STATE_C (1ul << (31 - 29)) /* Complete */
|
|
#define CXL_PE_SOFTWARE_STATE_C (1ul << (31 - 29)) /* Complete */
|
|
@@ -654,25 +704,38 @@ int cxl_pci_reset(struct cxl *adapter);
|
|
void cxl_pci_release_afu(struct device *dev);
|
|
void cxl_pci_release_afu(struct device *dev);
|
|
ssize_t cxl_pci_read_adapter_vpd(struct cxl *adapter, void *buf, size_t len);
|
|
ssize_t cxl_pci_read_adapter_vpd(struct cxl *adapter, void *buf, size_t len);
|
|
|
|
|
|
-/* common == phyp + powernv */
|
|
|
|
|
|
+/* common == phyp + powernv - CAIA 1&2 */
|
|
struct cxl_process_element_common {
|
|
struct cxl_process_element_common {
|
|
__be32 tid;
|
|
__be32 tid;
|
|
__be32 pid;
|
|
__be32 pid;
|
|
__be64 csrp;
|
|
__be64 csrp;
|
|
- __be64 aurp0;
|
|
|
|
- __be64 aurp1;
|
|
|
|
- __be64 sstp0;
|
|
|
|
- __be64 sstp1;
|
|
|
|
|
|
+ union {
|
|
|
|
+ struct {
|
|
|
|
+ __be64 aurp0;
|
|
|
|
+ __be64 aurp1;
|
|
|
|
+ __be64 sstp0;
|
|
|
|
+ __be64 sstp1;
|
|
|
|
+ } psl8; /* CAIA 1 */
|
|
|
|
+ struct {
|
|
|
|
+ u8 reserved2[8];
|
|
|
|
+ u8 reserved3[8];
|
|
|
|
+ u8 reserved4[8];
|
|
|
|
+ u8 reserved5[8];
|
|
|
|
+ } psl9; /* CAIA 2 */
|
|
|
|
+ } u;
|
|
__be64 amr;
|
|
__be64 amr;
|
|
- u8 reserved3[4];
|
|
|
|
|
|
+ u8 reserved6[4];
|
|
__be64 wed;
|
|
__be64 wed;
|
|
} __packed;
|
|
} __packed;
|
|
|
|
|
|
-/* just powernv */
|
|
|
|
|
|
+/* just powernv - CAIA 1&2 */
|
|
struct cxl_process_element {
|
|
struct cxl_process_element {
|
|
__be64 sr;
|
|
__be64 sr;
|
|
__be64 SPOffset;
|
|
__be64 SPOffset;
|
|
- __be64 sdr;
|
|
|
|
|
|
+ union {
|
|
|
|
+ __be64 sdr; /* CAIA 1 */
|
|
|
|
+ u8 reserved1[8]; /* CAIA 2 */
|
|
|
|
+ } u;
|
|
__be64 haurp;
|
|
__be64 haurp;
|
|
__be32 ctxtime;
|
|
__be32 ctxtime;
|
|
__be16 ivte_offsets[4];
|
|
__be16 ivte_offsets[4];
|
|
@@ -761,6 +824,16 @@ static inline bool cxl_is_power8(void)
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static inline bool cxl_is_power9(void)
|
|
|
|
+{
|
|
|
|
+ /* intermediate solution */
|
|
|
|
+ if (!cxl_is_power8() &&
|
|
|
|
+ (cpu_has_feature(CPU_FTRS_POWER9) ||
|
|
|
|
+ cpu_has_feature(CPU_FTR_POWER9_DD1)))
|
|
|
|
+ return true;
|
|
|
|
+ return false;
|
|
|
|
+}
|
|
|
|
+
|
|
static inline bool cxl_is_psl8(struct cxl_afu *afu)
|
|
static inline bool cxl_is_psl8(struct cxl_afu *afu)
|
|
{
|
|
{
|
|
if (afu->adapter->caia_major == 1)
|
|
if (afu->adapter->caia_major == 1)
|
|
@@ -768,6 +841,13 @@ static inline bool cxl_is_psl8(struct cxl_afu *afu)
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static inline bool cxl_is_psl9(struct cxl_afu *afu)
|
|
|
|
+{
|
|
|
|
+ if (afu->adapter->caia_major == 2)
|
|
|
|
+ return true;
|
|
|
|
+ return false;
|
|
|
|
+}
|
|
|
|
+
|
|
ssize_t cxl_pci_afu_read_err_buffer(struct cxl_afu *afu, char *buf,
|
|
ssize_t cxl_pci_afu_read_err_buffer(struct cxl_afu *afu, char *buf,
|
|
loff_t off, size_t count);
|
|
loff_t off, size_t count);
|
|
|
|
|
|
@@ -794,7 +874,6 @@ int cxl_update_properties(struct device_node *dn, struct property *new_prop);
|
|
|
|
|
|
void cxl_remove_adapter_nr(struct cxl *adapter);
|
|
void cxl_remove_adapter_nr(struct cxl *adapter);
|
|
|
|
|
|
-int cxl_alloc_spa(struct cxl_afu *afu);
|
|
|
|
void cxl_release_spa(struct cxl_afu *afu);
|
|
void cxl_release_spa(struct cxl_afu *afu);
|
|
|
|
|
|
dev_t cxl_get_dev(void);
|
|
dev_t cxl_get_dev(void);
|
|
@@ -832,9 +911,13 @@ int afu_register_irqs(struct cxl_context *ctx, u32 count);
|
|
void afu_release_irqs(struct cxl_context *ctx, void *cookie);
|
|
void afu_release_irqs(struct cxl_context *ctx, void *cookie);
|
|
void afu_irq_name_free(struct cxl_context *ctx);
|
|
void afu_irq_name_free(struct cxl_context *ctx);
|
|
|
|
|
|
|
|
+int cxl_attach_afu_directed_psl9(struct cxl_context *ctx, u64 wed, u64 amr);
|
|
int cxl_attach_afu_directed_psl8(struct cxl_context *ctx, u64 wed, u64 amr);
|
|
int cxl_attach_afu_directed_psl8(struct cxl_context *ctx, u64 wed, u64 amr);
|
|
|
|
+int cxl_activate_dedicated_process_psl9(struct cxl_afu *afu);
|
|
int cxl_activate_dedicated_process_psl8(struct cxl_afu *afu);
|
|
int cxl_activate_dedicated_process_psl8(struct cxl_afu *afu);
|
|
|
|
+int cxl_attach_dedicated_process_psl9(struct cxl_context *ctx, u64 wed, u64 amr);
|
|
int cxl_attach_dedicated_process_psl8(struct cxl_context *ctx, u64 wed, u64 amr);
|
|
int cxl_attach_dedicated_process_psl8(struct cxl_context *ctx, u64 wed, u64 amr);
|
|
|
|
+void cxl_update_dedicated_ivtes_psl9(struct cxl_context *ctx);
|
|
void cxl_update_dedicated_ivtes_psl8(struct cxl_context *ctx);
|
|
void cxl_update_dedicated_ivtes_psl8(struct cxl_context *ctx);
|
|
|
|
|
|
#ifdef CONFIG_DEBUG_FS
|
|
#ifdef CONFIG_DEBUG_FS
|
|
@@ -845,9 +928,12 @@ int cxl_debugfs_adapter_add(struct cxl *adapter);
|
|
void cxl_debugfs_adapter_remove(struct cxl *adapter);
|
|
void cxl_debugfs_adapter_remove(struct cxl *adapter);
|
|
int cxl_debugfs_afu_add(struct cxl_afu *afu);
|
|
int cxl_debugfs_afu_add(struct cxl_afu *afu);
|
|
void cxl_debugfs_afu_remove(struct cxl_afu *afu);
|
|
void cxl_debugfs_afu_remove(struct cxl_afu *afu);
|
|
|
|
+void cxl_stop_trace_psl9(struct cxl *cxl);
|
|
void cxl_stop_trace_psl8(struct cxl *cxl);
|
|
void cxl_stop_trace_psl8(struct cxl *cxl);
|
|
|
|
+void cxl_debugfs_add_adapter_regs_psl9(struct cxl *adapter, struct dentry *dir);
|
|
void cxl_debugfs_add_adapter_regs_psl8(struct cxl *adapter, struct dentry *dir);
|
|
void cxl_debugfs_add_adapter_regs_psl8(struct cxl *adapter, struct dentry *dir);
|
|
void cxl_debugfs_add_adapter_regs_xsl(struct cxl *adapter, struct dentry *dir);
|
|
void cxl_debugfs_add_adapter_regs_xsl(struct cxl *adapter, struct dentry *dir);
|
|
|
|
+void cxl_debugfs_add_afu_regs_psl9(struct cxl_afu *afu, struct dentry *dir);
|
|
void cxl_debugfs_add_afu_regs_psl8(struct cxl_afu *afu, struct dentry *dir);
|
|
void cxl_debugfs_add_afu_regs_psl8(struct cxl_afu *afu, struct dentry *dir);
|
|
|
|
|
|
#else /* CONFIG_DEBUG_FS */
|
|
#else /* CONFIG_DEBUG_FS */
|
|
@@ -879,10 +965,19 @@ static inline void cxl_debugfs_afu_remove(struct cxl_afu *afu)
|
|
{
|
|
{
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static inline void cxl_stop_trace_psl9(struct cxl *cxl)
|
|
|
|
+{
|
|
|
|
+}
|
|
|
|
+
|
|
static inline void cxl_stop_trace_psl8(struct cxl *cxl)
|
|
static inline void cxl_stop_trace_psl8(struct cxl *cxl)
|
|
{
|
|
{
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static inline void cxl_debugfs_add_adapter_regs_psl9(struct cxl *adapter,
|
|
|
|
+ struct dentry *dir)
|
|
|
|
+{
|
|
|
|
+}
|
|
|
|
+
|
|
static inline void cxl_debugfs_add_adapter_regs_psl8(struct cxl *adapter,
|
|
static inline void cxl_debugfs_add_adapter_regs_psl8(struct cxl *adapter,
|
|
struct dentry *dir)
|
|
struct dentry *dir)
|
|
{
|
|
{
|
|
@@ -893,6 +988,10 @@ static inline void cxl_debugfs_add_adapter_regs_xsl(struct cxl *adapter,
|
|
{
|
|
{
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static inline void cxl_debugfs_add_afu_regs_psl9(struct cxl_afu *afu, struct dentry *dir)
|
|
|
|
+{
|
|
|
|
+}
|
|
|
|
+
|
|
static inline void cxl_debugfs_add_afu_regs_psl8(struct cxl_afu *afu, struct dentry *dir)
|
|
static inline void cxl_debugfs_add_afu_regs_psl8(struct cxl_afu *afu, struct dentry *dir)
|
|
{
|
|
{
|
|
}
|
|
}
|
|
@@ -938,7 +1037,9 @@ struct cxl_irq_info {
|
|
};
|
|
};
|
|
|
|
|
|
void cxl_assign_psn_space(struct cxl_context *ctx);
|
|
void cxl_assign_psn_space(struct cxl_context *ctx);
|
|
|
|
+int cxl_invalidate_all_psl9(struct cxl *adapter);
|
|
int cxl_invalidate_all_psl8(struct cxl *adapter);
|
|
int cxl_invalidate_all_psl8(struct cxl *adapter);
|
|
|
|
+irqreturn_t cxl_irq_psl9(int irq, struct cxl_context *ctx, struct cxl_irq_info *irq_info);
|
|
irqreturn_t cxl_irq_psl8(int irq, struct cxl_context *ctx, struct cxl_irq_info *irq_info);
|
|
irqreturn_t cxl_irq_psl8(int irq, struct cxl_context *ctx, struct cxl_irq_info *irq_info);
|
|
irqreturn_t cxl_fail_irq_psl(struct cxl_afu *afu, struct cxl_irq_info *irq_info);
|
|
irqreturn_t cxl_fail_irq_psl(struct cxl_afu *afu, struct cxl_irq_info *irq_info);
|
|
int cxl_register_one_irq(struct cxl *adapter, irq_handler_t handler,
|
|
int cxl_register_one_irq(struct cxl *adapter, irq_handler_t handler,
|
|
@@ -951,6 +1052,7 @@ int cxl_data_cache_flush(struct cxl *adapter);
|
|
int cxl_afu_disable(struct cxl_afu *afu);
|
|
int cxl_afu_disable(struct cxl_afu *afu);
|
|
int cxl_psl_purge(struct cxl_afu *afu);
|
|
int cxl_psl_purge(struct cxl_afu *afu);
|
|
|
|
|
|
|
|
+void cxl_native_irq_dump_regs_psl9(struct cxl_context *ctx);
|
|
void cxl_native_irq_dump_regs_psl8(struct cxl_context *ctx);
|
|
void cxl_native_irq_dump_regs_psl8(struct cxl_context *ctx);
|
|
void cxl_native_err_irq_dump_regs(struct cxl *adapter);
|
|
void cxl_native_err_irq_dump_regs(struct cxl *adapter);
|
|
int cxl_pci_vphb_add(struct cxl_afu *afu);
|
|
int cxl_pci_vphb_add(struct cxl_afu *afu);
|