blob: 380fb549159031f2175c2c4685999595e085ca03 [file] [log] [blame]
/* 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 */