summaryrefslogtreecommitdiffstats
path: root/sys/mips/nlm/hal/fmn.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/mips/nlm/hal/fmn.h')
-rw-r--r--sys/mips/nlm/hal/fmn.h275
1 files changed, 275 insertions, 0 deletions
diff --git a/sys/mips/nlm/hal/fmn.h b/sys/mips/nlm/hal/fmn.h
new file mode 100644
index 0000000..75fc774
--- /dev/null
+++ b/sys/mips/nlm/hal/fmn.h
@@ -0,0 +1,275 @@
+/*-
+ * Copyright 2003-2011 Netlogic Microsystems (Netlogic). All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY Netlogic Microsystems ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NETLOGIC OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ * NETLOGIC_BSD */
+
+#ifndef __NLM_FMNV2_H__
+#define __NLM_FMNV2_H__
+
+/**
+* @file_name fmn.h
+* @author Netlogic Microsystems
+* @brief HAL for Fast message network V2
+*/
+
+/* FMN configuration registers */
+#define XLP_CMS_OUTPUTQ_CONFIG_REG(i) ((i)*2)
+#define XLP_CMS_MAX_OUTPUTQ 1024
+#define XLP_CMS_OUTPUTQ_CREDIT_CFG_REG (0x2000/4)
+#define XLP_CMS_MSG_CONFIG_REG (0x2008/4)
+#define XLP_CMS_MSG_ERR_REG (0x2010/4)
+#define XLP_CMS_TRACE_CONFIG_REG (0x2018/4)
+#define XLP_CMS_TRACE_BASE_ADDR_REG (0x2020/4)
+#define XLP_CMS_TRACE_LIMIT_ADDR_REG (0x2028/4)
+#define XLP_CMS_TRACE_CURRENT_ADDR_REG (0x2030/4)
+#define XLP_CMS_MSG_ENDIAN_SWAP_REG (0x2038/4)
+
+#define XLP_CMS_CPU_PUSHQ(node, core, thread, vc) \
+ (((node)<<10) | ((core)<<4) | ((thread)<<2) | ((vc)<<0))
+#define XLP_CMS_POPQ(node, queue) (((node)<<10) | (queue))
+#define XLP_CMS_IO_PUSHQ(node, queue) (((node)<<10) | (queue))
+
+#define XLP_CMS_POPQ_QID(i) (128+(i))
+#define XLP_CMS_POPQ_MAXQID 255
+#define XLP_CMS_PCIE0_QID(i) (256+(i))
+#define XLP_CMS_PCIE0_MAXQID 257
+#define XLP_CMS_PCIE1_QID(i) (258+(i))
+#define XLP_CMS_PCIE1_MAXQID 259
+#define XLP_CMS_PCIE2_QID(i) (260+(i))
+#define XLP_CMS_PCIE2_MAXQID 261
+#define XLP_CMS_PCIE3_QID(i) (262+(i))
+#define XLP_CMS_PCIE3_MAXQID 263
+#define XLP_CMS_DTE_QID(i) (264+(i))
+#define XLP_CMS_DTE_MAXQID 267
+#define XLP_CMS_RSA_ECC_QID(i) (272+(i))
+#define XLP_CMS_RSA_ECC_MAXQID 280
+#define XLP_CMS_CRYPTO_QID(i) (281+(i))
+#define XLP_CMS_CRYPTO_MAXQID 296
+/* TODO PCI header register 0x3C says CMP starts at 297(0x129) VERIFY */
+#define XLP_CMS_CMP_QID(i) (298+(i))
+#define XLP_CMS_CMP_MAXQID 305
+#define XLP_CMS_POE_QID(i) (384+(i))
+#define XLP_CMS_POE_MAXQID 391
+#define XLP_CMS_NAE_QID(i) (476+(i))
+#define XLP_CMS_NAE_MAXQID 1023
+
+#define XLP_CMS_NAE_TX_VC_BASE 476
+#define XLP_CMS_NAE_TX_VC_LIMIT 999
+#define XLP_CMS_NAE_RX_VC_BASE 1000
+#define XLP_CMS_NAE_RX_VC_LIMIT 1019
+
+#define XLP_MAX_CMS_QUEUES 1024
+
+/* FMN Level Interrupt Type */
+#define XLP_CMS_LVL_INTR_DISABLE 0
+#define XLP_CMS_LVL_LOW_WATERMARK 1
+#define XLP_CMS_LVL_HI_WATERMARK 2
+
+/* FMN Level interrupt trigger values */
+#define XLP_CMS_QUEUE_NON_EMPTY 0
+#define XLP_CMS_QUEUE_QUARTER_FULL 1
+#define XLP_CMS_QUEUE_HALF_FULL 2
+#define XLP_CMS_QUEUE_THREE_QUARTER_FULL 3
+#define XLP_CMS_QUEUE_FULL 4
+
+/* FMN Timer Interrupt Type */
+#define XLP_CMS_TIMER_INTR_DISABLE 0
+#define XLP_CMS_TIMER_CONSUMER 1
+#define XLP_CMS_TIMER_PRODUCER 1
+
+/* FMN timer interrupt trigger values */
+#define XLP_CMS_TWO_POW_EIGHT_CYCLES 0
+#define XLP_CMS_TWO_POW_TEN_CYCLES 1
+#define XLP_CMS_TWO_POW_TWELVE_CYCLES 2
+#define XLP_CMS_TWO_POW_FOURTEEN_CYCLES 3
+#define XLP_CMS_TWO_POW_SIXTEEN_CYCLES 4
+#define XLP_CMS_TWO_POW_EIGHTTEEN_CYCLES 5
+#define XLP_CMS_TWO_POW_TWENTY_CYCLES 6
+#define XLP_CMS_TWO_POW_TWENTYTWO_CYCLES 7
+
+#define XLP_CMS_QUEUE_ENA 1ULL
+#define XLP_CMS_QUEUE_DIS 0
+#define XLP_CMS_SPILL_ENA 1ULL
+#define XLP_CMS_SPILL_DIS 0
+
+#define XLP_CMS_MAX_VCPU_VC 4
+
+/* Each XLP chip can hold upto 32K messages on the chip itself */
+#define XLP_CMS_ON_CHIP_MESG_SPACE (32*1024)
+#define XLP_CMS_ON_CHIP_PER_QUEUE_SPACE \
+ ((XLP_CMS_ON_CHIP_MESG_SPACE)/(XLP_MAX_CMS_QUEUES))
+#define XLP_CMS_MAX_ONCHIP_SEGMENTS 1024
+#define XLP_CMS_MAX_SPILL_SEGMENTS_PER_QUEUE 64
+
+/* FMN Network error */
+#define XLP_CMS_ILLEGAL_DST_ERROR 0x100
+#define XLP_CMS_BIU_TIMEOUT_ERROR 0x080
+#define XLP_CMS_BIU_ERROR 0x040
+#define XLP_CMS_SPILL_FILL_UNCORRECT_ECC_ERROR 0x020
+#define XLP_CMS_SPILL_FILL_CORRECT_ECC_ERROR 0x010
+#define XLP_CMS_SPILL_UNCORRECT_ECC_ERROR 0x008
+#define XLP_CMS_SPILL_CORRECT_ECC_ERROR 0x004
+#define XLP_CMS_OUTPUTQ_UNCORRECT_ECC_ERROR 0x002
+#define XLP_CMS_OUTPUTQ_CORRECT_ECC_ERROR 0x001
+
+/* worst case, a single entry message consists of a 4 byte header
+ * and an 8-byte entry = 12 bytes in total
+ */
+#define XLP_CMS_SINGLE_ENTRY_MSG_SIZE 12
+/* total spill memory needed for one FMN queue */
+#define XLP_CMS_PER_QUEUE_SPILL_MEM(spilltotmsgs) \
+ ((spilltotmsgs) * (XLP_CMS_SINGLE_ENTRY_MSG_SIZE))
+/* total spill memory needed */
+#define XLP_CMS_TOTAL_SPILL_MEM(spilltotmsgs) \
+ ((XLP_CMS_PER_QUEUE_SPILL_MEM(spilltotmsgs)) * \
+ (XLP_MAX_CMS_QUEUES))
+/* total number of FMN messages possible in a queue */
+#define XLP_CMS_TOTAL_QUEUE_SIZE(spilltotmsgs) \
+ ((spilltotmsgs) + (XLP_CMS_ON_CHIP_PER_QUEUE_SPACE))
+
+/* FMN Src station id's */
+#define XLP_CMS_CPU0_SRC_STID (0 << 4)
+#define XLP_CMS_CPU1_SRC_STID (1 << 4)
+#define XLP_CMS_CPU2_SRC_STID (2 << 4)
+#define XLP_CMS_CPU3_SRC_STID (3 << 4)
+#define XLP_CMS_CPU4_SRC_STID (4 << 4)
+#define XLP_CMS_CPU5_SRC_STID (5 << 4)
+#define XLP_CMS_CPU6_SRC_STID (6 << 4)
+#define XLP_CMS_CPU7_SRC_STID (7 << 4)
+#define XLP_CMS_PCIE0_SRC_STID 256
+#define XLP_CMS_PCIE1_SRC_STID 258
+#define XLP_CMS_PCIE2_SRC_STID 260
+#define XLP_CMS_PCIE3_SRC_STID 262
+#define XLP_CMS_DTE_SRC_STID 264
+#define XLP_CMS_RSA_ECC_SRC_STID 272
+#define XLP_CMS_CRYPTO_SRC_STID 281
+#define XLP_CMS_CMP_SRC_STID 298
+#define XLP_CMS_POE_SRC_STID 384
+#define XLP_CMS_NAE_SRC_STID 476
+#if 0
+#define XLP_CMS_DEFAULT_CREDIT(cmstotstns,spilltotmsgs) \
+ ((XLP_CMS_TOTAL_QUEUE_SIZE(spilltotmsgs)) / \
+ (cmstotstns))
+#endif
+#define XLP_CMS_DEFAULT_CREDIT(cmstotstns,spilltotmsgs) 8
+
+/* POPQ related defines */
+#define XLP_CMS_POPQID_START 128
+#define XLP_CMS_POPQID_END 255
+
+#define XLP_CMS_INT_RCVD 0x800000000000000ULL
+
+#define nlm_rdreg_cms(b, r) nlm_read_reg64_xkseg(b,r)
+#define nlm_wreg_cms(b, r, v) nlm_write_reg64_xkseg(b,r,v)
+#define nlm_pcibase_cms(node) nlm_pcicfg_base(XLP_IO_CMS_OFFSET(node))
+#define nlm_regbase_cms(node) nlm_pcibar0_base_xkphys(nlm_pcibase_cms(node))
+
+enum fmn_swcode {
+ FMN_SWCODE_CPU0=1,
+ FMN_SWCODE_CPU1,
+ FMN_SWCODE_CPU2,
+ FMN_SWCODE_CPU3,
+ FMN_SWCODE_CPU4,
+ FMN_SWCODE_CPU5,
+ FMN_SWCODE_CPU6,
+ FMN_SWCODE_CPU7,
+ FMN_SWCODE_CPU8,
+ FMN_SWCODE_CPU9,
+ FMN_SWCODE_CPU10,
+ FMN_SWCODE_CPU11,
+ FMN_SWCODE_CPU12,
+ FMN_SWCODE_CPU13,
+ FMN_SWCODE_CPU14,
+ FMN_SWCODE_CPU15,
+ FMN_SWCODE_CPU16,
+ FMN_SWCODE_CPU17,
+ FMN_SWCODE_CPU18,
+ FMN_SWCODE_CPU19,
+ FMN_SWCODE_CPU20,
+ FMN_SWCODE_CPU21,
+ FMN_SWCODE_CPU22,
+ FMN_SWCODE_CPU23,
+ FMN_SWCODE_CPU24,
+ FMN_SWCODE_CPU25,
+ FMN_SWCODE_CPU26,
+ FMN_SWCODE_CPU27,
+ FMN_SWCODE_CPU28,
+ FMN_SWCODE_CPU29,
+ FMN_SWCODE_CPU30,
+ FMN_SWCODE_CPU31,
+ FMN_SWCODE_CPU32,
+ FMN_SWCODE_PCIE0,
+ FMN_SWCODE_PCIE1,
+ FMN_SWCODE_PCIE2,
+ FMN_SWCODE_PCIE3,
+ FMN_SWCODE_DTE,
+ FMN_SWCODE_CRYPTO,
+ FMN_SWCODE_RSA,
+ FMN_SWCODE_CMP,
+ FMN_SWCODE_POE,
+ FMN_SWCODE_NAE,
+};
+
+extern uint64_t nlm_cms_spill_total_messages;
+extern uint32_t nlm_cms_total_stations;
+extern uint32_t cms_onchip_seg_availability[XLP_CMS_ON_CHIP_PER_QUEUE_SPACE];
+
+extern uint64_t cms_base_addr(int node);
+extern int nlm_cms_verify_credit_config (int spill_en, int tot_credit);
+extern int nlm_cms_get_oc_space(int qsize, int max_queues, int qid, int *ocbase, int *ocstart, int *ocend);
+extern void nlm_cms_setup_credits (uint64_t base, int destid, int srcid, int credit);
+extern int nlm_cms_config_onchip_queue (uint64_t base, uint64_t cms_spill_base, int qid, int spill_en);
+extern void nlm_cms_default_setup(int node, uint64_t spill_base, int spill_en, int popq_en);
+extern uint64_t nlm_cms_get_onchip_queue (uint64_t base, int qid);
+extern void nlm_cms_set_onchip_queue (uint64_t base, int qid, uint64_t val);
+extern void nlm_cms_per_queue_level_intr(uint64_t base, int qid, int sub_type, int intr_val);
+extern void nlm_cms_level_intr(int node, int sub_type, int intr_val);
+extern void nlm_cms_per_queue_timer_intr(uint64_t base, int qid, int sub_type, int intr_val);
+extern void nlm_cms_timer_intr(int node, int en, int sub_type, int intr_val);
+extern int nlm_cms_outputq_intr_check(uint64_t base, int qid);
+extern void nlm_cms_outputq_clr_intr(uint64_t base, int qid);
+extern void nlm_cms_illegal_dst_error_intr(uint64_t base, int en);
+extern void nlm_cms_timeout_error_intr(uint64_t base, int en);
+extern void nlm_cms_biu_error_resp_intr(uint64_t base, int en);
+extern void nlm_cms_spill_uncorrectable_ecc_error_intr(uint64_t base, int en);
+extern void nlm_cms_spill_correctable_ecc_error_intr(uint64_t base, int en);
+extern void nlm_cms_outputq_uncorrectable_ecc_error_intr(uint64_t base, int en);
+extern void nlm_cms_outputq_correctable_ecc_error_intr(uint64_t base, int en);
+extern uint64_t nlm_cms_network_error_status(uint64_t base);
+extern int nlm_cms_get_net_error_code(uint64_t err);
+extern int nlm_cms_get_net_error_syndrome(uint64_t err);
+extern int nlm_cms_get_net_error_ramindex(uint64_t err);
+extern int nlm_cms_get_net_error_outputq(uint64_t err);
+extern void nlm_cms_trace_setup(uint64_t base, int en, uint64_t trace_base, uint64_t trace_limit, int match_dstid_en, int dst_id, int match_srcid_en, int src_id, int wrap);
+extern void nlm_cms_endian_byte_swap (uint64_t base, int en);
+extern uint8_t xlp_msg_send(uint8_t vc, uint8_t size);
+extern int nlm_cms_alloc_spill_q(uint64_t base, int qid, uint64_t spill_base,
+ int nsegs);
+extern int nlm_cms_alloc_onchip_q(uint64_t base, int qid, int nsegs);
+
+#endif
OpenPOWER on IntegriCloud