/* Copyright 2019 IBM Corp. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or * implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef __NPU3_REGS_H #define __NPU3_REGS_H #define NPU3_FIR(n) (0x2c00 + (n) * 0x40) #define NPU3_FIR_MASK(n) (0x2c03 + (n) * 0x40) #define NPU3_FIR_ACTION0(n) (0x2c06 + (n) * 0x40) #define NPU3_FIR_ACTION1(n) (0x2c07 + (n) * 0x40) #define NPU3_FIR_MAX 3 /* NPU RING: Indirect address/data port */ #define NPU3_MISC_SCOM_IND_SCOM_ADDR 0x33e #define NPU3_MISC_DA_ADDR PPC_BITMASK(0, 23) #define NPU3_MISC_DA_LEN PPC_BITMASK(24, 25) #define NPU3_MISC_DA_LEN_4B 2 #define NPU3_MISC_DA_LEN_8B 3 #define NPU3_MISC_SCOM_IND_SCOM_DATA 0x33f /* NPU RING: Indirect register blocks */ #define NPU3_BLOCK(nib0, nib1) ((nib0) << 20 | (nib1) << 16) #define NPU3_REG_BLOCK(reg) ((reg) & 0xff0000) #define NPU3_REG_OFFSET(reg) ((reg) & 0xffff) #define NPU3_BLOCK_NDL_U(brk) NPU3_BLOCK(0 + (brk) / 2,\ 8 + (brk) % 2 * 2) #define NPU3_BLOCK_NTL_U(brk) NPU3_BLOCK(0 + (brk) / 2,\ 9 + (brk) % 2 * 2) #define NPU3_BLOCK_CQ_SM(n) NPU3_BLOCK(4, (n)) #define NPU3_BLOCK_CQ_CTL NPU3_BLOCK(4, 4) #define NPU3_BLOCK_CQ_DAT NPU3_BLOCK(4, 5) #define NPU3_BLOCK_NDL(brk) NPU3_BLOCK(4 + (brk) / 2,\ 8 + (brk) % 2 * 2) #define NPU3_BLOCK_NTL(brk) NPU3_BLOCK(4 + (brk) / 2,\ 9 + (brk) % 2 * 2) #define NPU3_BLOCK_NPU_ATS NPU3_BLOCK(7, 0) #define NPU3_BLOCK_NPU_XTS NPU3_BLOCK(7, 1) #define NPU3_BLOCK_NPU_MISC NPU3_BLOCK(7, 2) #define NPU3_BLOCK_NPU_XTS_ATSD(n) NPU3_BLOCK(8, (n)) /* NDL_U block registers */ #define NPU3_DLPL_CTL(brk) (NPU3_BLOCK_NDL_U(brk) + 0xfff4) #define NPU3_DLPL_CTL_RESET_RX PPC_BIT32(0) #define NPU3_DLPL_CTL_RESET_MISC PPC_BIT32(1) #define NPU3_DLPL_CFG(brk) (NPU3_BLOCK_NDL_U(brk) + 0xfff8) #define NPU3_DLPL_CFG_PRI_BYTESWAP PPC_BIT32(0) /* NTL_U block registers */ #define NPU3_NTL_MISC_CFG1(brk) (NPU3_BLOCK_NTL_U(brk) + 0x0c0) #define NPU3_NTL_MISC_CFG1_NTL_RESET PPC_BITMASK(8, 9) #define NPU3_NTL_CREQ_HDR_CRED_SND(brk) (NPU3_BLOCK_NTL_U(brk) + 0x400) #define NPU3_NTL_PRB_HDR_CRED_SND(brk) (NPU3_BLOCK_NTL_U(brk) + 0x410) #define NPU3_NTL_ATR_HDR_CRED_SND(brk) (NPU3_BLOCK_NTL_U(brk) + 0x418) #define NPU3_NTL_RSP_HDR_CRED_SND(brk) (NPU3_BLOCK_NTL_U(brk) + 0x428) #define NPU3_NTL_CREQ_DAT_CRED_SND(brk) (NPU3_BLOCK_NTL_U(brk) + 0x430) #define NPU3_NTL_RSP_DAT_CRED_SND(brk) (NPU3_BLOCK_NTL_U(brk) + 0x438) #define NPU3_NTL_CREQ_HDR_CRED_RCV(brk) (NPU3_BLOCK_NTL_U(brk) + 0x440) #define NPU3_NTL_DGD_HDR_CRED_RCV(brk) (NPU3_BLOCK_NTL_U(brk) + 0x448) #define NPU3_NTL_ATSD_HDR_CRED_RCV(brk) (NPU3_BLOCK_NTL_U(brk) + 0x460) #define NPU3_NTL_RSP_HDR_CRED_RCV(brk) (NPU3_BLOCK_NTL_U(brk) + 0x468) #define NPU3_NTL_CREQ_DAT_CRED_RCV(brk) (NPU3_BLOCK_NTL_U(brk) + 0x470) #define NPU3_NTL_RSP_DAT_CRED_RCV(brk) (NPU3_BLOCK_NTL_U(brk) + 0x478) #define NPU3_NTL_CQ_FENCE_STATUS(brk) (NPU3_BLOCK_NTL_U(brk) + 0x500) #define NPU3_NTL_CQ_FENCE_STATUS_FIELD PPC_BITMASK(0, 1) #define NPU3_NTL_CQ_FENCE_STATUS_FULL 3 #define NPU3_NTL_CQ_FENCE_STATUS_HALF 2 #define NPU3_NTL_CQ_FENCE_STATUS_NONE 0 /* * CQ_SM block registers * * Definitions here use NPU3_BLOCK_CQ_SM(0), but when npu3_write() is given * one of these, it will do corresponding writes to every CQ_SM block. */ #define NPU3_MCP_MISC_CFG0 (NPU3_BLOCK_CQ_SM(0) + 0x000) #define NPU3_MCP_MISC_CFG0_ENABLE_PBUS PPC_BIT(26) #define NPU3_MCP_MISC_CFG0_ENABLE_SNARF_CPM PPC_BIT(27) #define NPU3_MCP_MISC_CFG0_OCAPI_MODE PPC_BITMASK(44, 48) #define NPU3_MCP_MISC_CFG0_NVLINK_MODE PPC_BITMASK(49, 53) #define NPU3_MCP_MISC_CFG1 (NPU3_BLOCK_CQ_SM(0) + 0x008) #define NPU3_MCP_MISC_CFG2 (NPU3_BLOCK_CQ_SM(0) + 0x0f0) #define NPU3_SNP_MISC_CFG0 (NPU3_BLOCK_CQ_SM(0) + 0x180) #define NPU3_SNP_MISC_CFG0_ENABLE_PBUS PPC_BIT(2) #define NPU3_SNP_MISC_CFG0_OCAPI_MODE PPC_BITMASK(32, 36) #define NPU3_SNP_MISC_CFG0_NVLINK_MODE PPC_BITMASK(37, 41) #define NPU3_GPU_MEM_BAR(brk) (NPU3_BLOCK_CQ_SM(0) + 0x190 + (brk) * 8) #define NPU3_GPU_MEM_BAR_ENABLE PPC_BIT(0) #define NPU3_GPU_MEM_BAR_ADDR_MASK PPC_BITMASK(1, 35) #define NPU3_GPU_MEM_BAR_ADDR PPC_BITMASK(1, 21) #define NPU3_GPU_MEM_BAR_SIZE PPC_BITMASK(22, 35) #define NPU3_GPU_MEM_BAR_SL_MODE PPC_BIT(36) #define NPU3_GPU_MEM_BAR_4T_LIMIT PPC_BIT(37) #define NPU3_GPU_MEM_BAR_4T_SELECT PPC_BITMASK(38, 39) #define NPU3_GPU_MEM_BAR_MODE PPC_BITMASK(40, 43) #define NPU3_GPU_MEM_BAR_POISON PPC_BIT(45) #define NPU3_GPU_MEM_BAR_CHIP_EQ_GROUP PPC_BIT(49) #define NPU3_NTL_BAR(brk) (NPU3_BLOCK_CQ_SM(0) + 0x1b8 + (brk) * 8) #define NPU3_NTL_BAR_ENABLE PPC_BIT(0) #define NPU3_NTL_BAR_ADDR PPC_BITMASK(3, 35) #define NPU3_NTL_BAR_SIZE PPC_BITMASK(39, 43) #define NPU3_NTL_BAR_SIZE_128K 1 #define NPU3_MMIO_BAR (NPU3_BLOCK_CQ_SM(0) + 0x1e0) #define NPU3_MMIO_BAR_ENABLE PPC_BIT(0) #define NPU3_MMIO_BAR_ADDR PPC_BITMASK(3, 27) #define NPU3_GENID_BAR (NPU3_BLOCK_CQ_SM(0) + 0x1e8) #define NPU3_GENID_BAR_ENABLE PPC_BIT(0) #define NPU3_GENID_BAR_ADDR PPC_BITMASK(3, 32) #define NPU3_RELAXED_SRC(n) (NPU3_BLOCK_CQ_SM(0) + 0x1f0 + (n) * 8) #define NPU3_RELAXED_SRC_MAX 4 #define NPU3_RELAXED_SRC_TAG PPC_BITMASK(0, 13) #define NPU3_RELAXED_SRC_GRPCHP PPC_BITMASK(0, 6) #define NPU3_RELAXED_SRC_PEC PPC_BITMASK(12, 13) #define NPU3_RELAXED_SRC_TAGMASK PPC_BITMASK(14, 27) #define NPU3_RELAXED_SRC_MASK_NPU PPC_BIT(28) #define NPU3_RELAXED_SRC_MASK_PCIE PPC_BIT(29) #define NPU3_RELAXED_SRC_MASK_L2L3 PPC_BIT(30) #define NPU3_RELAXED_SRC_RDSTART PPC_BITMASK(32, 39) #define NPU3_RELAXED_SRC_RDEND PPC_BITMASK(40, 47) #define NPU3_RELAXED_SRC_WRSTART PPC_BITMASK(48, 55) #define NPU3_RELAXED_SRC_WREND PPC_BITMASK(56, 63) #define NPU3_RELAXED_CFG2(brk) (NPU3_BLOCK_CQ_SM(0) + 0x230 + (brk) * 8) #define NPU3_RELAXED_CFG2_CMD_CL_DMA_W PPC_BIT(0) #define NPU3_RELAXED_CFG2_CMD_CL_DMA_W_HP PPC_BIT(1) #define NPU3_RELAXED_CFG2_CMD_CL_DMA_INJ PPC_BIT(2) #define NPU3_RELAXED_CFG2_CMD_PR_DMA_INJ PPC_BIT(3) #define NPU3_RELAXED_CFG2_CMD_DMA_PR_W PPC_BIT(4) #define NPU3_RELAXED_CFG2_CMD_CL_RD_NC_F0 PPC_BIT(5) #define NPU3_RELAXED_CFG2_SRC_WRENA(src) PPC_BIT(32 + (src) * 4) #define NPU3_RELAXED_CFG2_SRC_RDENA(src) PPC_BIT(33 + (src) * 4) #define NPU3_RELAXED_CFG2_SRC_AWENA(src) PPC_BIT(34 + (src) * 4) #define NPU3_RELAXED_CFG2_SRC_ARENA(src) PPC_BIT(35 + (src) * 4) /* CQ_CTL block registers */ #define NPU3_CTL_MISC_CFG0 (NPU3_BLOCK_CQ_CTL + 0x000) #define NPU3_CTL_MISC_CFG1 (NPU3_BLOCK_CQ_CTL + 0x008) #define NPU3_CTL_MISC_CFG2 (NPU3_BLOCK_CQ_CTL + 0x010) #define NPU3_CTL_MISC_CFG2_OCAPI_MODE PPC_BITMASK(0, 4) #define NPU3_CTL_MISC_CFG2_NVLINK_MODE PPC_BITMASK(5, 9) #define NPU3_CTL_MISC_CFG3 (NPU3_BLOCK_CQ_CTL + 0x018) #define NPU3_CTL_BDF2PE_CFG(n) (NPU3_BLOCK_CQ_CTL + 0x180 + (n) * 8) #define NPU3_CTL_BDF2PE_CFG_ENABLE PPC_BIT(0) #define NPU3_CTL_BDF2PE_CFG_PE PPC_BITMASK(4, 7) #define NPU3_CTL_BDF2PE_CFG_BDF PPC_BITMASK(8, 23) /* CQ_DAT block registers */ #define NPU3_DAT_MISC_CFG1 (NPU3_BLOCK_CQ_DAT + 0x008) #define NPU3_DAT_MISC_CFG1_OCAPI_MODE PPC_BITMASK(40, 44) #define NPU3_DAT_MISC_CFG1_NVLINK_MODE PPC_BITMASK(45, 49) /* NTL block registers */ #define NPU3_NTL_MISC_CFG2(brk) (NPU3_BLOCK_NTL(brk) + 0x000) #define NPU3_NTL_MISC_CFG2_BRICK_ENABLE PPC_BIT(0) #define NPU3_NTL_MISC_CFG2_NDL_RX_PARITY_ENA PPC_BIT(16) #define NPU3_NTL_MISC_CFG2_NDL_TX_PARITY_ENA PPC_BIT(17) #define NPU3_NTL_MISC_CFG2_NDL_PRI_PARITY_ENA PPC_BIT(18) #define NPU3_NTL_MISC_CFG2_RCV_CREDIT_OVERFLOW_ENA PPC_BIT(19) #define NPU3_NTL_PRI_CFG(brk) (NPU3_BLOCK_NTL(brk) + 0x0b0) #define NPU3_NTL_PRI_CFG_NDL PPC_BITMASK(1, 2) /* NPU_ATS block registers */ #define NPU3_ATS_IODA_ADDR (NPU3_BLOCK_NPU_ATS + 0x108) #define NPU3_ATS_IODA_ADDR_AUTO_INC PPC_BIT(0) #define NPU3_ATS_IODA_ADDR_TBL_SEL PPC_BITMASK(11, 15) #define NPU3_ATS_IODA_ADDR_TBL_TVT 9 #define NPU3_ATS_IODA_ADDR_TBL_ADDR PPC_BITMASK(54, 63) #define NPU3_ATS_IODA_DATA (NPU3_BLOCK_NPU_ATS + 0x110) #define NPU3_ATS_IODA_TVT_XLAT_ADDR PPC_BITMASK(0, 47) #define NPU3_ATS_IODA_TVT_TABLE_LEVEL PPC_BITMASK(48, 50) #define NPU3_ATS_IODA_TVT_TABLE_SIZE PPC_BITMASK(51, 55) #define NPU3_ATS_IODA_TVT_PAGE_SIZE PPC_BITMASK(59, 63) #define NPU3_ATS_TCE_KILL (NPU3_BLOCK_NPU_ATS + 0x120) #define NPU3_ATS_TCE_KILL_ALL PPC_BIT(0) #define NPU3_ATS_TCE_KILL_ONE PPC_BIT(2) #define NPU3_ATS_TCE_KILL_PE_NUMBER PPC_BITMASK(4, 7) #define NPU3_ATS_TCE_KILL_ADDRESS PPC_BITMASK(15, 51) /* NPU_XTS block registers */ #define NPU3_XTS_CFG (NPU3_BLOCK_NPU_XTS + 0x020) #define NPU3_XTS_CFG_MMIOSD PPC_BIT(1) #define NPU3_XTS_CFG_TRY_ATR_RO PPC_BIT(6) #define NPU3_XTS_CFG_OPENCAPI PPC_BIT(15) #define NPU3_XTS_CFG2 (NPU3_BLOCK_NPU_XTS + 0x028) #define NPU3_XTS_CFG2_NO_FLUSH_ENA PPC_BIT(49) #define NPU3_XTS_CFG2_XSL2_ENA PPC_BIT(55) #define NPU3_XTS_CFG3 (NPU3_BLOCK_NPU_XTS + 0x068) #define NPU3_XTS_ATSD_HYP(n) (NPU3_BLOCK_NPU_XTS + 0x100 + (n) * 8) #define NPU3_XTS_ATSD_HYP_MSR_HV PPC_BIT(51) #define NPU3_XTS_ATSD_HYP_LPARID PPC_BITMASK(52, 63) #define NPU3_XTS_BDF_MAP(n) (NPU3_BLOCK_NPU_XTS + 0x4000 + (n) * 8) #define NPU3_XTS_BDF_MAP_MAX 16 #define NPU3_XTS_BDF_MAP_VALID PPC_BIT(0) #define NPU3_XTS_BDF_MAP_UNFILT PPC_BIT(1) #define NPU3_XTS_BDF_MAP_STACK PPC_BITMASK(4, 6) #define NPU3_XTS_BDF_MAP_BRICK PPC_BITMASK(7, 9) #define NPU3_XTS_BDF_MAP_BDF PPC_BITMASK(16, 31) #define NPU3_XTS_BDF_MAP_XLAT PPC_BITMASK(39, 40) #define NPU3_XTS_BDF_MAP_LPCR_PS PPC_BITMASK(41, 43) #define NPU3_XTS_BDF_MAP_LPCR_ISL PPC_BIT(44) #define NPU3_XTS_BDF_MAP_LPCR_TC PPC_BIT(45) #define NPU3_XTS_BDF_MAP_LPCR_SC PPC_BIT(46) #define NPU3_XTS_BDF_MAP_LPCR_BOT PPC_BIT(47) #define NPU3_XTS_BDF_MAP_LPARSHORT PPC_BITMASK(48, 51) #define NPU3_XTS_BDF_MAP_LPARID PPC_BITMASK(52, 63) #define NPU3_XTS_PID_MAP(n) (NPU3_BLOCK_NPU_XTS + 0x8000 + (n) * 32) #define NPU3_XTS_PID_MAP_VALID_ATRGPA0 PPC_BIT(0) #define NPU3_XTS_PID_MAP_VALID_ATRGPA1 PPC_BIT(1) #define NPU3_XTS_PID_MAP_VALID_ATSD PPC_BIT(2) #define NPU3_XTS_PID_MAP_MSR PPC_BITMASK(25, 31) #define NPU3_XTS_PID_MAP_MSR_DR PPC_BIT(25) #define NPU3_XTS_PID_MAP_MSR_TA PPC_BIT(26) #define NPU3_XTS_PID_MAP_MSR_HV PPC_BIT(27) #define NPU3_XTS_PID_MAP_MSR_PR PPC_BIT(28) #define NPU3_XTS_PID_MAP_MSR_US PPC_BIT(29) #define NPU3_XTS_PID_MAP_MSR_SF PPC_BIT(30) #define NPU3_XTS_PID_MAP_MSR_UV PPC_BIT(31) #define NPU3_XTS_PID_MAP_LPARSHORT PPC_BITMASK(40, 43) #define NPU3_XTS_PID_MAP_PID PPC_BITMASK(44, 63) /* NPU_MISC block registers */ #define NPU3_MISC_CFG (NPU3_BLOCK_NPU_MISC + 0x030) #define NPU3_MISC_CFG_IPI_PS PPC_BIT(11) #define NPU3_MISC_CFG_IPI_PS_64K 1 #define NPU3_MISC_CFG_IPI_OS PPC_BIT(12) #define NPU3_MISC_CFG_IPI_OS_AIX 0 #define NPU3_MISC_CFG_IPI_OS_LINUX 1 #define NPU3_MISC_INT_BAR (NPU3_BLOCK_NPU_MISC + 0x098) #define NPU3_MISC_INT_BAR_ADDR PPC_BITMASK(0, 39) #define NPU3_MISC_BDF2PE_CFG(n) (NPU3_BLOCK_NPU_MISC + 0x100 + (n) * 8) #define NPU3_MISC_BDF2PE_CFG_ENABLE PPC_BIT(0) #define NPU3_MISC_BDF2PE_CFG_PE PPC_BITMASK(4, 7) #define NPU3_MISC_BDF2PE_CFG_BDF PPC_BITMASK(8, 23) #define NPU3_MISC_PESTB_DATA(pe) (NPU3_BLOCK_NPU_MISC + 0x200 + (pe) * 8) #define NPU3_MISC_PESTB_DATA_DMA_STOPPED_STATE PPC_BIT(0) /* NPU_XTS_ATSD block registers */ #define NPU3_XTS_ATSD_LAUNCH(n) (NPU3_BLOCK_NPU_XTS_ATSD(n) + 0x000) #define NPU3_XTS_ATSD_MAX 16 #endif /* __NPU3_REGS_H */