1034c328eSXiaoyun Li /* SPDX-License-Identifier: BSD-3-Clause 2034c328eSXiaoyun Li * Copyright(c) 2019 Intel Corporation. 3034c328eSXiaoyun Li */ 4034c328eSXiaoyun Li 5034c328eSXiaoyun Li #ifndef _NTB_HW_INTEL_H_ 6034c328eSXiaoyun Li #define _NTB_HW_INTEL_H_ 7034c328eSXiaoyun Li 8*834d99f3SJunfeng Guo /* Supported PCI device revision ID range for ICX */ 9*834d99f3SJunfeng Guo #define NTB_PCI_DEV_REVISION_ICX_MIN 0x02 10*834d99f3SJunfeng Guo #define NTB_PCI_DEV_REVISION_ICX_MAX 0x0F 11*834d99f3SJunfeng Guo 12*834d99f3SJunfeng Guo #define NTB_PCI_DEV_REVISION_ID_REG 0x08 13*834d99f3SJunfeng Guo #define NTB_PCI_DEV_REVISION_ID_LEN 1 14*834d99f3SJunfeng Guo 15034c328eSXiaoyun Li /* Ntb control and link status */ 16034c328eSXiaoyun Li #define NTB_CTL_CFG_LOCK 1 17034c328eSXiaoyun Li #define NTB_CTL_DISABLE 2 18034c328eSXiaoyun Li #define NTB_CTL_S2P_BAR2_SNOOP (1 << 2) 19034c328eSXiaoyun Li #define NTB_CTL_P2S_BAR2_SNOOP (1 << 4) 20034c328eSXiaoyun Li #define NTB_CTL_S2P_BAR4_SNOOP (1 << 6) 21034c328eSXiaoyun Li #define NTB_CTL_P2S_BAR4_SNOOP (1 << 8) 22034c328eSXiaoyun Li #define NTB_CTL_S2P_BAR5_SNOOP (1 << 12) 23034c328eSXiaoyun Li #define NTB_CTL_P2S_BAR5_SNOOP (1 << 14) 24034c328eSXiaoyun Li 25034c328eSXiaoyun Li #define NTB_LNK_STA_ACTIVE_BIT 0x2000 26034c328eSXiaoyun Li #define NTB_LNK_STA_SPEED_MASK 0x000f 27034c328eSXiaoyun Li #define NTB_LNK_STA_WIDTH_MASK 0x03f0 28034c328eSXiaoyun Li #define NTB_LNK_STA_ACTIVE(x) (!!((x) & NTB_LNK_STA_ACTIVE_BIT)) 29034c328eSXiaoyun Li #define NTB_LNK_STA_SPEED(x) ((x) & NTB_LNK_STA_SPEED_MASK) 30034c328eSXiaoyun Li #define NTB_LNK_STA_WIDTH(x) (((x) & NTB_LNK_STA_WIDTH_MASK) >> 4) 31034c328eSXiaoyun Li 32f5057be3SXiaoyun Li /* Intel Xeon hardware */ 33034c328eSXiaoyun Li #define XEON_IMBAR1SZ_OFFSET 0x00d0 34034c328eSXiaoyun Li #define XEON_IMBAR2SZ_OFFSET 0x00d1 35034c328eSXiaoyun Li #define XEON_EMBAR1SZ_OFFSET 0x00d2 36034c328eSXiaoyun Li #define XEON_EMBAR2SZ_OFFSET 0x00d3 37034c328eSXiaoyun Li #define XEON_DEVCTRL_OFFSET 0x0098 38034c328eSXiaoyun Li #define XEON_DEVSTS_OFFSET 0x009a 39034c328eSXiaoyun Li #define XEON_UNCERRSTS_OFFSET 0x014c 40034c328eSXiaoyun Li #define XEON_CORERRSTS_OFFSET 0x0158 41f5057be3SXiaoyun Li #define XEON_GEN3_LINK_STATUS_OFFSET 0x01a2 42f5057be3SXiaoyun Li /* Link status and PPD are in MMIO but not config space for Gen4 NTB */ 43f5057be3SXiaoyun Li #define XEON_GEN4_PPD0_OFFSET 0xb0d4 44f5057be3SXiaoyun Li #define XEON_GEN4_PPD1_OFFSET 0xb4c0 45f5057be3SXiaoyun Li #define XEON_GEN4_LINK_CTRL_OFFSET 0xb050 46f5057be3SXiaoyun Li #define XEON_GEN4_LINK_STATUS_OFFSET 0xb052 47f5057be3SXiaoyun Li #define XEON_GEN4_LINK_CTRL_LINK_DIS 0x0010 48034c328eSXiaoyun Li 49034c328eSXiaoyun Li #define XEON_NTBCNTL_OFFSET 0x0000 50034c328eSXiaoyun Li #define XEON_BAR_INTERVAL_OFFSET 0x0010 51034c328eSXiaoyun Li #define XEON_IMBAR1XBASE_OFFSET 0x0010 /* SBAR2XLAT */ 52034c328eSXiaoyun Li #define XEON_IMBAR1XLMT_OFFSET 0x0018 /* SBAR2LMT */ 53034c328eSXiaoyun Li #define XEON_IMBAR2XBASE_OFFSET 0x0020 /* SBAR4XLAT */ 54034c328eSXiaoyun Li #define XEON_IMBAR2XLMT_OFFSET 0x0028 /* SBAR4LMT */ 55f5057be3SXiaoyun Li #define XEON_GEN4_XBASEIDX_INTERVAL 0x0002 56f5057be3SXiaoyun Li #define XEON_GEN4_IM1XBASEIDX_OFFSET 0x0074 57f5057be3SXiaoyun Li #define XEON_GEN4_IM2XBASEIDX_OFFSET 0x0076 58034c328eSXiaoyun Li #define XEON_IM_INT_STATUS_OFFSET 0x0040 59034c328eSXiaoyun Li #define XEON_IM_INT_DISABLE_OFFSET 0x0048 60034c328eSXiaoyun Li #define XEON_IM_SPAD_OFFSET 0x0080 /* SPAD */ 61f5057be3SXiaoyun Li #define XEON_GEN3_B2B_SPAD_OFFSET 0x0180 /* GEN3 B2B SPAD */ 62f5057be3SXiaoyun Li #define XEON_GEN4_B2B_SPAD_OFFSET 0x8080 /* GEN4 B2B SPAD */ 63034c328eSXiaoyun Li #define XEON_USMEMMISS_OFFSET 0x0070 64f5057be3SXiaoyun Li #define XEON_GEN3_INTVEC_OFFSET 0x00d0 65f5057be3SXiaoyun Li #define XEON_GEN4_INTVEC_OFFSET 0x0050 66034c328eSXiaoyun Li #define XEON_IM_DOORBELL_OFFSET 0x0100 /* SDOORBELL0 */ 67034c328eSXiaoyun Li #define XEON_EMBAR0XBASE_OFFSET 0x4008 /* B2B_XLAT */ 68034c328eSXiaoyun Li #define XEON_EMBAR1XBASE_OFFSET 0x4010 /* PBAR2XLAT */ 69034c328eSXiaoyun Li #define XEON_EMBAR1XLMT_OFFSET 0x4018 /* PBAR2LMT */ 70034c328eSXiaoyun Li #define XEON_EMBAR2XBASE_OFFSET 0x4020 /* PBAR4XLAT */ 71034c328eSXiaoyun Li #define XEON_EMBAR2XLMT_OFFSET 0x4028 /* PBAR4LMT */ 72034c328eSXiaoyun Li #define XEON_EM_INT_STATUS_OFFSET 0x4040 73034c328eSXiaoyun Li #define XEON_EM_INT_DISABLE_OFFSET 0x4048 74034c328eSXiaoyun Li #define XEON_EM_SPAD_OFFSET 0x4080 /* remote SPAD */ 75034c328eSXiaoyun Li #define XEON_EM_DOORBELL_OFFSET 0x4100 /* PDOORBELL0 */ 76034c328eSXiaoyun Li #define XEON_SPCICMD_OFFSET 0x4504 /* SPCICMD */ 77034c328eSXiaoyun Li #define XEON_EMBAR0_OFFSET 0x4510 /* SBAR0BASE */ 78034c328eSXiaoyun Li #define XEON_EMBAR1_OFFSET 0x4518 /* SBAR23BASE */ 79034c328eSXiaoyun Li #define XEON_EMBAR2_OFFSET 0x4520 /* SBAR45BASE */ 80034c328eSXiaoyun Li 81034c328eSXiaoyun Li #define XEON_PPD_OFFSET 0x00d4 82034c328eSXiaoyun Li #define XEON_PPD_CONN_MASK 0x03 83034c328eSXiaoyun Li #define XEON_PPD_CONN_TRANSPARENT 0x00 84034c328eSXiaoyun Li #define XEON_PPD_CONN_B2B 0x01 85034c328eSXiaoyun Li #define XEON_PPD_CONN_RP 0x02 86034c328eSXiaoyun Li #define XEON_PPD_DEV_MASK 0x10 87034c328eSXiaoyun Li #define XEON_PPD_DEV_USD 0x00 88034c328eSXiaoyun Li #define XEON_PPD_DEV_DSD 0x10 89034c328eSXiaoyun Li #define XEON_PPD_SPLIT_BAR_MASK 0x40 90034c328eSXiaoyun Li 91f5057be3SXiaoyun Li #define XEON_GEN4_PPD_CONN_MASK 0x0300 92f5057be3SXiaoyun Li #define XEON_GEN4_PPD_CONN_B2B 0x0200 93f5057be3SXiaoyun Li #define XEON_GEN4_PPD_DEV_MASK 0x1000 94f5057be3SXiaoyun Li #define XEON_GEN4_PPD_DEV_DSD 0x1000 95f5057be3SXiaoyun Li #define XEON_GEN4_PPD_DEV_USD 0x0000 96f5057be3SXiaoyun Li #define XEON_GEN4_PPD_LINKTRN 0x0008 97f5057be3SXiaoyun Li #define XEON_GEN4_SLOTSTS 0xb05a 98f5057be3SXiaoyun Li #define XEON_GEN4_SLOTSTS_DLLSCS 0x100 99034c328eSXiaoyun Li 100*834d99f3SJunfeng Guo #define XEON_SPR_PPD_CONN_MASK 0x0700 101*834d99f3SJunfeng Guo #define XEON_SPR_PPD_CONN_B2B 0x0200 102*834d99f3SJunfeng Guo #define XEON_SPR_PPD_DEV_MASK 0x4000 103*834d99f3SJunfeng Guo #define XEON_SPR_PPD_DEV_DSD 0x4000 104*834d99f3SJunfeng Guo #define XEON_SPR_PPD_DEV_USD 0x0000 105*834d99f3SJunfeng Guo 106034c328eSXiaoyun Li #define XEON_MW_COUNT 2 107034c328eSXiaoyun Li 108034c328eSXiaoyun Li #define XEON_DB_COUNT 32 109034c328eSXiaoyun Li #define XEON_DB_LINK 32 110034c328eSXiaoyun Li #define XEON_DB_LINK_BIT (1ULL << XEON_DB_LINK) 111034c328eSXiaoyun Li #define XEON_DB_MSIX_VECTOR_COUNT 33 112034c328eSXiaoyun Li #define XEON_DB_MSIX_VECTOR_SHIFT 1 113034c328eSXiaoyun Li #define XEON_DB_TOTAL_SHIFT 33 114034c328eSXiaoyun Li #define XEON_SPAD_COUNT 16 115034c328eSXiaoyun Li 116034c328eSXiaoyun Li extern const struct ntb_dev_ops intel_ntb_ops; 117034c328eSXiaoyun Li 118034c328eSXiaoyun Li #endif /* _NTB_HW_INTEL_H_ */ 119