add topaz_platform.h from quantenna-sdk-v37.4.0.81

Change-Id: I23199d8e455a21e576f76ca146eb178b2b4537f8
diff --git a/quantenna/common/topaz_platform.h b/quantenna/common/topaz_platform.h
new file mode 100644
index 0000000..be27da5
--- /dev/null
+++ b/quantenna/common/topaz_platform.h
@@ -0,0 +1,498 @@
+/*
+ * (C) Copyright 2010 Quantenna Communications Inc.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+/*
+ * Header file which describes Topaz platform.
+ * Has to be used by both kernel and bootloader.
+ */
+
+#ifndef __TOPAZ_PLATFORM_H
+#define __TOPAZ_PLATFORM_H
+
+#include "ruby_platform.h"
+
+#ifndef MS
+#define MS(_v, _f)		(((_v) & _f) >> _f##_S)
+#endif
+#ifndef SM
+#define SM(_v, _f)		(((_v) << _f##_S) & _f)
+#endif
+
+/*
+ * The following macro couldn't be defined via SM because of issues with nesting ##
+ * i.e. the following define does not work
+ * do{ where = (where) & (~(bitmask)) | SM(new_value, bitmask); }while(0)
+ */
+#define UPDATE_BITSET(where, bitmask, new_value) \
+	do{ where = ((where) & (~(bitmask))) | (((new_value) << bitmask##_S) & bitmask); }while(0)
+
+/* Extra reset bits */
+#define TOPAZ_SYS_CTL_RESET_AUC		(RUBY_BIT(10))
+#define TOPAZ_SYS_CTL_ALIAS_MAP		(RUBY_BIT(29))
+#define TOPAZ_SYS_CTL_UNIFIED_MAP	(RUBY_BIT(30))
+
+/* Extra system controller bits */
+#define TOPAZ_SYS_CTL_DDRCLK_S		22
+#define TOPAZ_SYS_CTL_DDRCLK		(0x7 << TOPAZ_SYS_CTL_DDRCLK_S)
+#define TOPAZ_SYS_CTL_DDRCLK_400MHZ	SM(0, TOPAZ_SYS_CTL_DDRCLK)
+#define TOPAZ_SYS_CTL_DDRCLK_320MHZ	SM(1, TOPAZ_SYS_CTL_DDRCLK)
+#define TOPAZ_SYS_CTL_DDRCLK_250MHZ	SM(2, TOPAZ_SYS_CTL_DDRCLK)
+#define TOPAZ_SYS_CTL_DDRCLK_200MHZ	SM(3, TOPAZ_SYS_CTL_DDRCLK)
+#define TOPAZ_SYS_CTL_DDRCLK_160MHZ	SM(4, TOPAZ_SYS_CTL_DDRCLK)
+
+/* Extra system controller registers */
+#define TOPAZ_SYS_CTL_M2D_2_INT		(RUBY_SYS_CTL_BASE_ADDR + 0x0184)
+#define TOPAZ_SYS_CTL_M2D_2_INT_MASK	(RUBY_SYS_CTL_BASE_ADDR + 0x0188)
+#define TOPAZ_SYS_CTL_M2D_3_INT		(RUBY_SYS_CTL_BASE_ADDR + 0x018C)
+#define TOPAZ_SYS_CTL_M2D_3_INT_MASK	(RUBY_SYS_CTL_BASE_ADDR + 0x0190)
+
+/* Temperature control registers */
+#define TOPAZ_SYS_CTL_TEMPSENS_CTL	(RUBY_SYS_CTL_BASE_ADDR + 0x0108)
+#define TOPAZ_SYS_CTL_TEMPSENS_CTL_START_CONV		0x00000001
+#define TOPAZ_SYS_CTL_TEMPSENS_CTL_SHUTDWN		0x00000002
+
+#define TOPAZ_SYS_CTL_TEMP_SENS_TEST_CTL		(RUBY_SYS_CTL_BASE_ADDR + 0x010C)
+
+#define TOPAZ_SYS_CTL_TEMP_SENS_DATA			(RUBY_SYS_CTL_BASE_ADDR + 0x0110)
+#define TOPAZ_SYS_CTL_TEMP_SENS_DATA_TEMP		0x00000FFF
+#define TOPAZ_SYS_CTL_TEMP_SENS_DATA_END_CONV		0x00001000
+#define TOPAZ_SYS_CTL_TEMP_SENS_DATA_END_CONV_S		11
+
+/* AuC SoC interrupt controller registers */
+#define TOPAZ_AUC_INT_MASK		(RUBY_SYS_CTL_BASE_ADDR + 0x0174)
+#define TOPAZ_AUC_IPC_INT		(RUBY_SYS_CTL_BASE_ADDR + 0x0178)
+#define TOPAZ_AUC_IPC_INT_MASK(val)	((val & 0xFFFF) << 16)
+#define TOPAZ_AUC_INT_STATUS		(RUBY_SYS_CTL_BASE_ADDR + 0x00D0)
+
+/* Linux Host interrupt controller registers */
+#define TOPAZ_LH_IPC3_INT		(RUBY_SYS_CTL_BASE_ADDR + 0x14C)
+#define TOPAZ_LH_IPC3_INT_MASK		(RUBY_SYS_CTL_BASE_ADDR + 0x150)
+#define TOPAZ_IPC4_INT(base)	((base) + 0x13C)
+#define TOPAZ_IPC4_INT_MASK(base)	((base) + 0x140)
+#define TOPAZ_LH_IPC4_INT		(TOPAZ_IPC4_INT(RUBY_SYS_CTL_BASE_ADDR))
+#define TOPAZ_LH_IPC4_INT_MASK		(TOPAZ_IPC4_INT_MASK(RUBY_SYS_CTL_BASE_ADDR))
+
+/* Multi-processor hardware semahpore */
+#define TOPAZ_MPROC_SEMA		(RUBY_SYS_CTL_BASE_ADDR + 0x0170)
+
+/* MuC SoC Interrupt controller registers */
+#define TOPAZ_SYS_CTL_A2M_INT		(RUBY_SYS_CTL_BASE_ADDR + 0x0144)
+#define TOPAZ_SYS_CTL_A2M_INT_MASK	(RUBY_SYS_CTL_BASE_ADDR + 0x0148)
+
+/* PCIE SoC Interrupt controller registers */
+#define TOPAZ_SYS_CTL_PCIE_INT_STATUS	(RUBY_SYS_CTL_BASE_ADDR + 0x017c)
+#define TOPAZ_SYS_CTL_TQE_INT_STATS_BIT	(RUBY_BIT(10))
+
+#define TOPAZ_SWITCH_BASE_ADDR		0xE1000000
+#define TOPAZ_SWITCH_OUT_NODE_BITS	7		/* Up to 128 output nodes */
+#define TOPAZ_SWITCH_OUT_NODE_MAX	(1 << TOPAZ_SWITCH_OUT_NODE_BITS)
+#define TOPAZ_SWITCH_OUT_NODE_MASK	((1 << TOPAZ_SWITCH_OUT_NODE_BITS) - 1)
+#define TOPAZ_SWITCH_OUT_PORT_BITS	4		/* Up to 16 output ports. 8 are used */
+#define TOPAZ_SWITCH_OUT_PORT_MAX	(1 << TOPAZ_SWITCH_OUT_PORT_BITS)
+#define TOPAZ_SWITCH_OUT_PORT_MASK	((1 << TOPAZ_SWITCH_OUT_PORT_BITS) - 1)
+
+/* TQE */
+#define TOPAZ_TQE_BASE_ADDR		(TOPAZ_SWITCH_BASE_ADDR + 0x30000)
+#define TOPAZ_TQE_EMAC_TDES_1_CNTL	(TOPAZ_TQE_BASE_ADDR + 0x0000)
+#define TOPAZ_TQE_EMAC_TDES_1_CNTL_VAL				0x000000FF
+#define TOPAZ_TQE_EMAC_TDES_1_CNTL_VAL_S			0
+#define TOPAZ_TQE_EMAC_TDES_1_CNTL_SHIFT			24	/* reg bits [7:0] become emac ctrl [31:24] */
+#define TOPAZ_TQE_EMAC_TDES_1_CNTL_MCAST_APPEND_CNTR_EN_S	16
+#define TOPAZ_TQE_EMAC_TDES_1_CNTL_MCAST_APPEND_CNTR_EN		0x00010000
+#define TOPAZ_TQE_EMAC_TDES_1_CNTL_PRI_MODE			0x0F000000
+#define TOPAZ_TQE_EMAC_TDES_1_CNTL_PRI_MODE_S			24
+#define TOPAZ_TQE_MISC			(TOPAZ_TQE_BASE_ADDR + 0x0004)
+#define TOPAZ_TQE_MISC_CLR_DONE_DLY_CYCLE_NUM		0x000003FF	/* q_avail_clr_done delay cycles */
+#define TOPAZ_TQE_MISC_CLR_DONE_DLY_CYCLE_NUM_S		0
+#define TOPAZ_TQE_MISC_RFLCT_OUT_PORT			0x000F0000	/* dest port for reflected pkts */
+#define TOPAZ_TQE_MISC_RFLCT_OUT_PORT_S			16
+#define TOPAZ_TQE_MISC_RFLCT_OUT_PORT_ENABLE		0x00100000	/* redirect emac0<->emac0 or emac1<->emac1 reflected pkts */
+#define TOPAZ_TQE_MISC_RFLCT_OUT_PORT_ENABLE_S		20
+#define TOPAZ_TQE_MISC_RFLCT_2_OUT_PORT_ENABLE		0x00200000	/* redirect emac0<->emac0/emac1 or emac1<->emac0/emac1 reflected pkts */
+#define TOPAZ_TQE_MISC_RFLCT_2_OUT_PORT_ENABLE_S	21
+#define TOPAZ_TQE_MISC_CLR_DONE_DLY_ENABLE		0x80000000	/* enable q_avail_clr_done delay */
+#define TOPAZ_TQE_MISC_CLR_DONE_DLY_ENABLE_S		31
+#define TOPAZ_TQE_WMAC_Q_STATUS_PTR	(TOPAZ_TQE_BASE_ADDR + 0x0008)
+#define TOPAZ_TQE_CPU_SEM		(TOPAZ_TQE_BASE_ADDR + 0x000c)
+#define TOPAZ_TQE_OUTPORT_EMAC0_CNT	(TOPAZ_TQE_BASE_ADDR + 0x0010)
+#define TOPAZ_TQE_OUTPORT_EMAC1_CNT	(TOPAZ_TQE_BASE_ADDR + 0x0014)
+#define TOPAZ_TQE_OUTPORT_WMAC_CNT	(TOPAZ_TQE_BASE_ADDR + 0x0018)
+#define TOPAZ_TQE_OUTPORT_LHOST_CNT	(TOPAZ_TQE_BASE_ADDR + 0x001c)
+#define TOPAZ_TQE_OUTPORT_MUC_CNT	(TOPAZ_TQE_BASE_ADDR + 0x0020)
+#define TOPAZ_TQE_OUTPORT_DSP_CNT	(TOPAZ_TQE_BASE_ADDR + 0x0024)
+#define TOPAZ_TQE_OUTPORT_AUC_CNT	(TOPAZ_TQE_BASE_ADDR + 0x0028)
+#define TOPAZ_TQE_OUTPORT_PCIE_CNT	(TOPAZ_TQE_BASE_ADDR + 0x002c)
+#define TOPAZ_TQE_Q_AVAIL_CLR_CNTL	(TOPAZ_TQE_BASE_ADDR + 0x0030)
+#define TOPAZ_TQE_Q_AVAIL_CLR_CNTL_TID		0xF
+#define TOPAZ_TQE_Q_AVAIL_CLR_CNTL_TID_S	0
+#define TOPAZ_TQE_Q_AVAIL_CLR_CNTL_NODE		0x7F00
+#define TOPAZ_TQE_Q_AVAIL_CLR_CNTL_NODE_S	8
+#define TOPAZ_TQE_Q_AVAIL_CLR_CNTL_CLEAR	RUBY_BIT(30)
+#define TOPAZ_TQE_Q_AVAIL_CLR_CNTL_CLEAR_DONE	RUBY_BIT(31)
+#define TOPAZ_TQE_DROP_CNT		(TOPAZ_TQE_BASE_ADDR + 0x0034)
+#define TOPAZ_TQE_DROP_EMAC0_CNT	(TOPAZ_TQE_BASE_ADDR + 0x0040)
+#define TOPAZ_TQE_DROP_EMAC1_CNT	(TOPAZ_TQE_BASE_ADDR + 0x0044)
+#define TOPAZ_TQE_DROP_WMAC_CNT		(TOPAZ_TQE_BASE_ADDR + 0x0048)
+#define TOPAZ_TQE_DROP_LHOST_CNT	(TOPAZ_TQE_BASE_ADDR + 0x004c)
+#define TOPAZ_TQE_DROP_MUC_CNT		(TOPAZ_TQE_BASE_ADDR + 0x0050)
+#define TOPAZ_TQE_DROP_DSP_CNT		(TOPAZ_TQE_BASE_ADDR + 0x0054)
+#define TOPAZ_TQE_DROP_AUC_CNT		(TOPAZ_TQE_BASE_ADDR + 0x0058)
+#define TOPAZ_TQE_DROP_PCIE_CNT		(TOPAZ_TQE_BASE_ADDR + 0x005c)
+
+/* TQE-CPU interface */
+#define TOPAZ_TQE_CPUIF_BASE(num)		(TOPAZ_TQE_BASE_ADDR + 0x4000 + 0x1000 * (num))	// For FPGA build 72 and earlier need to use (0xE1040000 + 0x10000 * (num))
+#define TOPAZ_TQE_CPUIF_CSR(num)		(TOPAZ_TQE_CPUIF_BASE(num) + 0x0000)
+#define TOPAZ_TQE_CPUIF_RX_RING_SIZE(num)	(TOPAZ_TQE_CPUIF_BASE(num) + 0x0004)
+#define TOPAZ_TQE_CPUIF_RX_RING(num)		(TOPAZ_TQE_CPUIF_BASE(num) + 0x0008)
+#define TOPAZ_TQE_CPUIF_RX_CURPTR(num)		(TOPAZ_TQE_CPUIF_BASE(num) + 0x000c)
+#define TOPAZ_TQE_CPUIF_PKT_FINISH(num)		(TOPAZ_TQE_CPUIF_BASE(num) + 0x0010)
+#define TOPAZ_TQE_CPUIF_Q_PTR_STATUS(num)	(TOPAZ_TQE_CPUIF_BASE(num) + 0x0014)
+#define TOPAZ_TQE_CPUIF_PPCTL0(num)		(TOPAZ_TQE_CPUIF_BASE(num) + 0x0020)
+#define TOPAZ_TQE_CPUIF_PPCTL1(num)		(TOPAZ_TQE_CPUIF_BASE(num) + 0x0024)
+#define TOPAZ_TQE_CPUIF_PPCTL2(num)		(TOPAZ_TQE_CPUIF_BASE(num) + 0x0028)
+#define TOPAZ_TQE_CPUIF_PPCTL3(num)		(TOPAZ_TQE_CPUIF_BASE(num) + 0x002c)
+#define TOPAZ_TQE_CPUIF_PPCTL4(num)		(TOPAZ_TQE_CPUIF_BASE(num) + 0x0030)
+#define TOPAZ_TQE_CPUIF_PPCTL5(num)		(TOPAZ_TQE_CPUIF_BASE(num) + 0x0034)
+#define TOPAZ_TQE_CPUIF_TXSTART(num)		(TOPAZ_TQE_CPUIF_BASE(num) + 0x0038)
+#define TOPAZ_TQE_CPUIF_STATUS(num)		(TOPAZ_TQE_CPUIF_BASE(num) + 0x003C)
+/* Some bits definitions */
+#define TOPAZ_TQE_CPUIF_CSR_IRQ_EN		RUBY_BIT(0)
+#define TOPAZ_TQE_CPUIF_CSR_IRQ_THRESHOLD(num)	(((num) & 0x7F) << 8)
+#define TOPAZ_TQE_CPUIF_CSR_IRQ_THRESHOLD_EN	RUBY_BIT(15)
+#define TOPAZ_TQE_CPUIF_CSR_RESET		RUBY_BIT(31)
+/* Aux definitions */
+#define TOPAZ_TQE_CPUIF_RXDESC_ALIGN		8	/* TQE CPU rx descriptors must be 64 bit aligned */
+
+/**
+ * Hardware Buffer Manager
+ */
+#define TOPAZ_HBM_BASE_ADDR		(TOPAZ_SWITCH_BASE_ADDR + 0x20000)
+#define TOPAZ_HBM_CSR_REG		(TOPAZ_HBM_BASE_ADDR + 0x0000)
+#define TOPAZ_HBM_CSR_Q_EN(x)		(BIT(0 + (x)))
+#define TOPAZ_HBM_CSR_INT_EN		(BIT(7))
+#define TOPAZ_HBM_CSR_OFLOW_INT_MASK(x)	(BIT(8 + (x)))
+#define TOPAZ_HBM_CSR_UFLOW_INT_MASK(x)	(BIT(12 + (x)))
+#define TOPAZ_HBM_CSR_OFLOW_INT_RAW(x)	(BIT(16 + (x)))
+#define TOPAZ_HBM_CSR_UFLOW_INT_RAW(x)	(BIT(20 + (x)))
+#define TOPAZ_HBM_CSR_INT_MSK_RAW	(0xff << 16)
+#define TOPAZ_HBM_CSR_OFLOW_INT_STATUS(x) (BIT(24 + (x)))
+#define TOPAZ_HBM_CSR_UFLOW_INT_STATUS(x) (BIT(28 + (x)))
+
+#define TOPAZ_HBM_BASE_REG(x)		(TOPAZ_HBM_BASE_ADDR + 0x0004 + ((x) * 0x10))
+#define TOPAZ_HBM_LIMIT_REG(x)		(TOPAZ_HBM_BASE_ADDR + 0x0008 + ((x) * 0x10))
+#define TOPAZ_HBM_WR_PTR(x)		(TOPAZ_HBM_BASE_ADDR + 0x000c + ((x) * 0x10))
+#define TOPAZ_HBM_RD_PTR(x)		(TOPAZ_HBM_BASE_ADDR + 0x0010 + ((x) * 0x10))
+
+#define TOPAZ_HBM_POOL(x)		(TOPAZ_HBM_BASE_ADDR + 0x0100 + ((x) * 0x4))
+#define TOPAZ_HBM_POOL_REQ(x)		(TOPAZ_HBM_BASE_ADDR + 0x0110 + ((x) * 0x4))
+#define TOPAZ_HBM_POOL_DATA(x)		(TOPAZ_HBM_BASE_ADDR + 0x0140 + ((x) * 0x4))
+
+#define TOPAZ_HBM_OVERFLOW_CNT		(TOPAZ_HBM_BASE_ADDR + 0x0190)
+#define TOPAZ_HBM_UNDERFLOW_CNT		(TOPAZ_HBM_BASE_ADDR + 0x0194)
+
+#define TOPAZ_HBM_MASTER_COUNT				9
+#define TOPAZ_HBM_POOL_COUNT				4
+#define TOPAZ_HBM_POOL_REQUEST_CNT(master, pool)	(TOPAZ_HBM_BASE_ADDR + 0x0200 + (master) * 0x20 + (pool) * 0x4)
+#define TOPAZ_HBM_POOL_RELEASE_CNT(master, pool)	(TOPAZ_HBM_BASE_ADDR + 0x0210 + (master) * 0x20 + (pool) * 0x4)
+
+#define TOPAZ_HBM_RELEASE_BUF		(BIT(0))
+#define TOPAZ_HBM_REQUEST_BUF		(BIT(1))
+#define TOPAZ_HBM_POOL_NUM(x)		((x) << 2)
+#define TOPAZ_HBM_DONE			(BIT(31))
+
+/* SoC interrupts */
+#define TOPAZ_SYS_CTL_M2L_HI_INT	PLATFORM_REG_SWITCH(RUBY_SYS_CTL_M2L_INT, (RUBY_SYS_CTL_BASE_ADDR + 0xFC))
+
+/**
+ * Forwarding Table
+ */
+#define TOPAZ_FWT_BASE_ADDR		(TOPAZ_SWITCH_BASE_ADDR + 0x0)
+#define TOPAZ_FWT_SIZE			(BIT(12))
+
+#define TOPAZ_FWT_TABLE_BASE		(TOPAZ_FWT_BASE_ADDR)
+
+#define TOPAZ_FWT_VLAN_TABLE_BASE	(TOPAZ_FWT_BASE_ADDR + 0x10000)
+#define TOPAZ_FWT_VLAN_TABLE_LIMIT	(TOPAZ_FWT_BASE_ADDR + 0x14000)
+
+#define TOPAZ_FWT_CTRL_BASE_ADDR	(TOPAZ_FWT_BASE_ADDR + 0xA000)
+
+#define TOPAZ_FWT_CPU_ACCESS		(TOPAZ_FWT_CTRL_BASE_ADDR + 0x0000)
+#define TOPAZ_FWT_CPU_ACCESS_STATE	0x0000000F
+#define TOPAZ_FWT_CPU_ACCESS_STATE_S	0
+#define TOPAZ_FWT_CPU_ACCESS_STATE_GRANTED	0x3
+#define TOPAZ_FWT_CPU_ACCESS_REQ	BIT(31)
+#define TOPAZ_FWT_TIME_STAMP_CTRL	(TOPAZ_FWT_CTRL_BASE_ADDR + 0x0004)
+#define TOPAZ_FWT_TIME_STAMP_CTRL_UNIT		0x0000001F
+#define TOPAZ_FWT_TIME_STAMP_CTRL_UNIT_S	0
+#define TOPAZ_FWT_TIME_STAMP_CTRL_SCALE		0x000003e0
+#define TOPAZ_FWT_TIME_STAMP_CTRL_SCALE_S	5
+#define TOPAZ_FWT_TIME_STAMP_DIS_AUTO_UPDATE_S	(16)
+#define TOPAZ_FWT_TIME_STAMP_CTRL_CLEAR		BIT(31)
+#define TOPAZ_FWT_TIME_STAMP_CNT	(TOPAZ_FWT_CTRL_BASE_ADDR + 0x0008)
+#define TOPAZ_FWT_HASH_CTRL		(TOPAZ_FWT_CTRL_BASE_ADDR + 0x000c)
+#define TOPAZ_FWT_HASH_CTRL_ENABLE	BIT(15)
+
+#define TOPAZ_FWT_LOOKUP_LHOST		0
+#define TOPAZ_FWT_LOOKUP_MUC		1
+#define TOPAZ_FWT_LOOKUP_DSP		2
+#define TOPAZ_FWT_LOOKUP_AUC		3
+
+#define	__TOPAZ_FWT_LOOKUP_REG(x)	(TOPAZ_FWT_CTRL_BASE_ADDR + 0x0010 + ((x) * 0x10))
+#define	__TOPAZ_FWT_LOOKUP_MAC_LO(x)	(TOPAZ_FWT_CTRL_BASE_ADDR + 0x0014 + ((x) * 0x10))
+#define	__TOPAZ_FWT_LOOKUP_MAC_HI(x)	(TOPAZ_FWT_CTRL_BASE_ADDR + 0x0018 + ((x) * 0x10))
+
+#define TOPAZ_FWT_LOOKUP_TRIG		0x00000001
+#define TOPAZ_FWT_LOOKUP_TRIG_S		0
+#define TOPAZ_FWT_LOOKUP_ENTRY_ADDR	0x7FF00000
+#define TOPAZ_FWT_LOOKUP_ENTRY_ADDR_S	20
+#define TOPAZ_FWT_LOOKUP_HASH_ADDR	0x0003FF00
+#define TOPAZ_FWT_LOOKUP_HASH_ADDR_S	8
+#define TOPAZ_FWT_LOOKUP_VALID		0x80000000
+#define TOPAZ_FWT_LOOKUP_VALID_S	31
+
+#define TOPAZ_FWT_PORT_EMAC0		(0)
+#define TOPAZ_FWT_PORT_EMAC1		(1)
+#define TOPAZ_FWT_PORT_WMAC		(2)
+#define TOPAZ_FWT_PORT_PCIE		(3)
+#define TOPAZ_FWT_PORT_LH		(4)
+#define TOPAZ_FWT_PORT_MUC		(5)
+#define TOPAZ_FWT_PORT_DSP		(6)
+#define TOPAZ_FWT_PORT_AUC		(7)
+
+#define TOPAZ_FWT_ENTRY_NXT_ENTRY	0x0FFE0000
+#define TOPAZ_FWT_ENTRY_NXT_ENTRY_S	17
+#define TOPAZ_FWT_ENTRY_VALID		0x80000000
+#define TOPAZ_FWT_ENTRY_VALID_S		31
+#define TOPAZ_FWT_ENTRY_PORTAL		0x40000000
+#define TOPAZ_FWT_ENTRY_PORTAL_S	30
+
+#define TOPAZ_FWT_ENTRY_OUT_NODE_0		0x0000007F
+#define TOPAZ_FWT_ENTRY_OUT_NODE_0_S		0
+#define TOPAZ_FWT_ENTRY_OUT_NODE_VLD_0		0x00000080
+#define TOPAZ_FWT_ENTRY_OUT_NODE_VLD_0_S	7
+#define TOPAZ_FWT_ENTRY_OUT_NODE_1		0x00007F00
+#define TOPAZ_FWT_ENTRY_OUT_NODE_1_S		8
+#define TOPAZ_FWT_ENTRY_OUT_NODE_VLD_1		0x00008000
+#define TOPAZ_FWT_ENTRY_OUT_NODE_VLD_1_S	15
+#define TOPAZ_FWT_ENTRY_OUT_NODE_2		0x007F0000
+#define TOPAZ_FWT_ENTRY_OUT_NODE_2_S		16
+#define TOPAZ_FWT_ENTRY_OUT_NODE_VLD_2		0x00800000
+#define TOPAZ_FWT_ENTRY_OUT_NODE_VLD_2_S	23
+#define TOPAZ_FWT_ENTRY_OUT_NODE_3		0x7F000000
+#define TOPAZ_FWT_ENTRY_OUT_NODE_3_S		24
+#define TOPAZ_FWT_ENTRY_OUT_NODE_VLD_3		0x80000000
+#define TOPAZ_FWT_ENTRY_OUT_NODE_VLD_3_S	31
+#define TOPAZ_FWT_ENTRY_OUT_NODE_4		0x007F0000
+#define TOPAZ_FWT_ENTRY_OUT_NODE_4_S		16
+#define TOPAZ_FWT_ENTRY_OUT_NODE_VLD_4		0x00800000
+#define TOPAZ_FWT_ENTRY_OUT_NODE_VLD_4_S	23
+#define TOPAZ_FWT_ENTRY_OUT_NODE_5		0x7F000000
+#define TOPAZ_FWT_ENTRY_OUT_NODE_5_S		24
+#define TOPAZ_FWT_ENTRY_OUT_NODE_VLD_5		0x80000000
+#define TOPAZ_FWT_ENTRY_OUT_NODE_VLD_5_S	31
+
+#define TOPAZ_FWT_ENTRY_OUT_PORT	0x00003C00
+#define TOPAZ_FWT_ENTRY_OUT_PORT_S	10
+
+#define TOPAZ_FWT_ENTRY_TIMESTAMP	0x000003FF
+#define TOPAZ_FWT_ENTRY_TIMESTAMP_S	0
+
+#define TOPAZ_FWT_HW_HASH_SHIFT		10
+#define TOPAZ_FWT_HW_HASH_MASK		((1 << TOPAZ_FWT_HW_HASH_SHIFT) - 1)
+#define TOPAZ_FWT_HW_LEVEL1_ENTRIES	(1 << TOPAZ_FWT_HW_HASH_SHIFT)
+#define TOPAZ_FWT_HW_LEVEL2_ENTRIES	1024
+#define TOPAZ_FWT_HW_TOTAL_ENTRIES	(TOPAZ_FWT_HW_LEVEL1_ENTRIES + TOPAZ_FWT_HW_LEVEL2_ENTRIES)
+
+/*
+ * VLAN table
+ */
+#define TOPAZ_VLAN_BASE_ADDR		(TOPAZ_SWITCH_BASE_ADDR + 0x10000)
+#define TOPAZ_VLAN_ENTRIES		(1 << 12)	/* 802.1Q VLAN ID */
+#define TOPAZ_VLAN_ENTRY_ADDR(x)	(TOPAZ_VLAN_BASE_ADDR + 4 * (x))
+#define TOPAZ_VLAN_OUT_NODE		0x0000007F
+#define TOPAZ_VLAN_OUT_NODE_S		0
+#define TOPAZ_VLAN_OUT_PORT		0x00000380
+#define TOPAZ_VLAN_OUT_PORT_S		7
+#define TOPAZ_VLAN_VALID		0x00000400
+#define TOPAZ_VLAN_VALID_S		10
+#define TOPAZ_VLAN_HW_BITMASK		0x000007ff
+
+/* TX AGG */
+#define TOPAZ_TX_AGG_BASE_ADDR				0xE5090000
+#define TOPAZ_TX_AGG_NODE_N_TID_Q_AVAIL(node)		(TOPAZ_TX_AGG_BASE_ADDR + 0x000 + 4 * (node))
+#define TOPAZ_TX_AGG_NODE_N_TID_Q_AVAIL_MASK(val)	((val & 0xFFFF) << 16)
+#define TOPAZ_TX_AGG_NODE_N_TID_Q_AVAIL_SUP(node)	(TOPAZ_TX_AGG_BASE_ADDR + 0x200 + 4 * (node))
+#define TOPAZ_TX_AGG_NODE_N_TID_Q_AVAIL_SUP_MASK(val)	((val & 0xFFFF) << 16)
+#define TOPAZ_TX_AGG_CSR				(TOPAZ_TX_AGG_BASE_ADDR + 0x460)
+#define TOPAZ_TX_AGG_TAC_MAP_MODE_64			0
+#define TOPAZ_TX_AGG_TAC_MAP_MODE_128			1
+#define TOPAZ_TX_AGG_AC					0xF0000000
+#define TOPAZ_TX_AGG_AC_S				28
+#define TOPAZ_TX_AGG_CPU_Q_ACCESS_SEM			(TOPAZ_TX_AGG_BASE_ADDR + 0x464)
+#define TOPAZ_TX_AGG_UC_Q_ACCESS_SEM			(TOPAZ_TX_AGG_BASE_ADDR + 0x468)
+#define TOPAZ_TX_AGG_TAC_CNTL				(TOPAZ_TX_AGG_BASE_ADDR + 0x46C)
+#ifdef TOPAZ_128_NODE_MODE
+#define TOPAZ_TX_AGG_TAC_CNTL_NODE(node)		((node) & 0x7F)
+#else
+#define TOPAZ_TX_AGG_TAC_CNTL_NODE(node)		((node) & 0x3F)
+#endif
+#define TOPAZ_TX_AGG_TAC_CNTL_TID(tid)			(((tid) & 0xF) << 8)
+#define TOPAZ_TX_AGG_TAC_CNTL_READ_CMD(cmd)		(((cmd) & 0x3) << 12)
+#define TOPAZ_TX_AGG_TAC_CNTL_READ_DATA_VLD		RUBY_BIT(29)
+#define TOPAZ_TX_AGG_TAC_CNTL_READ			RUBY_BIT(30)
+#define TOPAZ_TX_AGG_TAC_CNTL_WRITE			RUBY_BIT(31)
+#define TOPAZ_TX_AGG_TAC_DATA				(TOPAZ_TX_AGG_BASE_ADDR + 0x470)
+#define TOPAZ_TX_AGG_TAC_DATA_AC(__ac)			((__ac) & 0x3)
+#define TOPAZ_TX_AGG_TAC_DATA_PRIORITY(__pri)		(((__pri) & 0xFF) << 2)
+#ifdef TOPAZ_128_NODE_MODE
+#define TOPAZ_TX_AGG_TAC_DATA_AC_LO			0x00000003
+#define TOPAZ_TX_AGG_TAC_DATA_AC_LO_S			0
+#define TOPAZ_TX_AGG_TAC_DATA_PRIORITY_LO		0x0000001c
+#define TOPAZ_TX_AGG_TAC_DATA_PRIORITY_LO_S		2
+#define TOPAZ_TX_AGG_TAC_DATA_AC_HI			0x00000060
+#define TOPAZ_TX_AGG_TAC_DATA_AC_HI_S			5
+#define TOPAZ_TX_AGG_TAC_DATA_PRIORITY_HI		0x00000380
+#define TOPAZ_TX_AGG_TAC_DATA_PRIORITY_HI_S		7
+#endif
+#define TOPAZ_TX_AGG_AC_N_NODE_TID(ac)			(TOPAZ_TX_AGG_BASE_ADDR + 0x478 + 4 * (ac))
+#define TOPAZ_TX_AGG_AC_N_STAT_PTR(ac)			(TOPAZ_TX_AGG_BASE_ADDR + 0x488 + 4 * (ac))
+#define TOPAZ_TX_AGG_Q_FULL_THRESH			(TOPAZ_TX_AGG_BASE_ADDR + 0x498)
+#define TOPAZ_TX_AGG_Q_FULL_THRESH_VAL(q0, q1, q2, q3)	(((q0) & 0xF) | (((q1) & 0xF) << 4) | (((q2) & 0xF) << 8) | (((q3) & 0xF) << 12))
+#define TOPAZ_TX_AGG_CPU_IRQ_CSR			(TOPAZ_TX_AGG_BASE_ADDR + 0x49C)
+#define TOPAZ_TX_AGG_STATUS_IRQ				(TOPAZ_TX_AGG_BASE_ADDR + 0x4A0)
+#define TOPAZ_TX_AGG_AC_N_NODE_TID_NO_SEL(ac)		(TOPAZ_TX_AGG_BASE_ADDR + 0x4A4 + 4 * (ac))
+#define TOPAZ_TX_AGG_TAC_CNTL_READ_CMD_NODE_TAB		0
+#define TOPAZ_TX_AGG_TAC_CNTL_READ_CMD_AVAIL_LO		1
+#define TOPAZ_TX_AGG_TAC_CNTL_READ_CMD_AVAIL_HI		3
+#define TOPAZ_TX_AGG_MAX_NODE_NUM			128
+#define TOPAZ_TX_AGG_HALF_MAX_NODE_NUM			(TOPAZ_TX_AGG_MAX_NODE_NUM >> 1)
+
+/*
+ * MuC/Lhost new interrupts.
+ * Old interrupts (even changed number) are in ruby_platform, RUBY_IRQ_*
+ */
+#define	TOPAZ_IRQ_TQE					(5)
+#define TOPAZ_IRQ_HDMA0					(RUBY_IRQ_DMA0)
+#define TOPAZ_IRQ_HBM					(RUBY_IRQ_DMA1)
+#define TOPAZ_IRQ_HDMA1					(RUBY_IRQ_DMA3)
+#define TOPAZ_IRQ_PCIE					(28)
+#define TOPAZ_IRQ_IPC_A2M				(18)
+#define TOPAZ_IQR_TQE_DSP				(19)
+#define	TOPAZ_IRQ_PCIE_DMA				(RUBY_IRQ_DMA2)
+#define	TOPAZ_IRQ_IPC4					(29)
+#define	TOPAZ_MUC_IRQ_BB_PER_PKT			(31)
+#define TOPAZ_HBM_INT_EN				RUBY_BIT(31)
+#define TOPAZ_PCIE_INTX_CLR_MASK			RUBY_BIT(11)
+#define	TOPAZ_PCIE_INT_MASK				RUBY_PCIE_INT_MASK
+#define	TOPAZ_PCIE_MSI_MASK				RUBY_PCIE_MSI_MASK
+#define TOPAZ_PCIE_MSI_EN				RUBY_BIT(0)
+#define TOPAZ_PCIE_MSI_BASE				0xE9000050
+#define TOPAZ_PCIE_MSI_CAP				(TOPAZ_PCIE_MSI_BASE + 0x0)
+
+#define TOPAZ_PCIE_EXP_DEVCTL				(0xE9000078)
+
+/* MSI defines to be used in Topaz PCIe host driver */
+#define	TOPAZ_PCIE_MSI_REGION				RUBY_PCIE_MSI_REGION
+#define	TOPAZ_MSI_ADDR_LOWER				RUBY_MSI_ADDR_LOWER
+#define	TOPAZ_MSI_ADDR_UPPER				RUBY_MSI_ADDR_UPPER
+#define	TOPAZ_MSI_INT_ENABLE				RUBY_MSI_INT_ENABLE
+
+/* AHB Bus monitors */
+#define TOPAZ_BUSMON_INTR_STATUS			(RUBY_SYS_CTL_BASE_ADDR + 0x015c)
+#define TOPAZ_BUSMON_INTR_MASK				(RUBY_SYS_CTL_BASE_ADDR + 0x0160)
+#define TOPAZ_BUSMON_INTR_MASK_TIMEOUT_EN(master)	BIT((master) * 2 + 0)
+#define TOPAZ_BUSMON_INTR_MASK_RANGE_CHECK_EN(master)	BIT((master) * 2 + 1)
+#define TOPAZ_BUSMON_DEBUG_VIEW				(RUBY_SYS_CTL_BASE_ADDR + 0x0164)
+#define TOPAZ_BUSMON_DEBUG_VIEW_MASTER(x)		(((x) & 0x3) << 0)
+#define TOPAZ_BUSMON_DEBUG_VIEW_DATA_SEL(x)		(((x) & 0x7) << 2)
+#define TOPAZ_BUSMON_DEBUG_STATUS			(RUBY_SYS_CTL_BASE_ADDR + 0x0168)
+#define TOPAZ_BUSMON_CTL_BASE_ADDR			(RUBY_SYS_CTL_BASE_ADDR + 0x0200)
+#define TOPAZ_BUSMON_CTL(core)				(TOPAZ_BUSMON_CTL_BASE_ADDR + ((core) * 0x40))
+#define __TOPAZ_BUSMON_CTL_RANGE(core, range)		(TOPAZ_BUSMON_CTL(core) + 0x8 + ((range) * 0x8))
+#define TOPAZ_BUSMON_CTL_RANGE_LOW(core, range)		(__TOPAZ_BUSMON_CTL_RANGE((core), (range)) + 0x0)
+#define TOPAZ_BUSMON_CTL_RANGE_HIGH(core, range)	(__TOPAZ_BUSMON_CTL_RANGE((core), (range)) + 0x4)
+#define TOPAZ_BUSMON_HREADY_EN				BIT(0)
+#define TOPAZ_BUSMON_TIMER_INT_EN			BIT(1)
+#define TOPAZ_BUSMON_TIMER_ERROR_EN			BIT(2)
+#define TOPAZ_BUSMON_ADDR_CHECK_EN			BIT(3)
+#define TOPAZ_BUSMON_REGION_VALID(x)			(((x) & 0xF) << 4)
+#define TOPAZ_BUSMON_TIMEOUT(cycles)			(((cycles) & 0x3FF) << 8)
+#define TOPAZ_BUSMON_BLOCK_TRANS_EN			BIT(18)
+#define TOPAZ_BUSMON_OUTSIDE_ADDR_CHECK			BIT(19)
+
+/* AHB Bus monitor masters */
+#define TOPAZ_BUSMON_LHOST				0
+#define TOPAZ_BUSMON_MUC				1
+#define TOPAZ_BUSMON_DSP				2
+#define TOPAZ_BUSMON_AUC				3
+#define TOPAZ_BUSMON_WMAC				4
+#define TOPAZ_BUSMON_PCIE				5
+#define TOPAZ_BUSMON_SWE				6
+#define TOPAZ_BUSMON_EMAC				7
+
+#define TOPAZ_BUSMON_MASTER_NAMES	{ "lhost", "muc", "dsp", "auc", "wmac", "pcie", "swe", "emac" }
+
+/* AHB Bus monitor debug data select */
+#define TOPAZ_BUSMON_ADDR				0
+#define TOPAZ_BUSMON_WR_L32				1
+#define TOPAZ_BUSMON_WR_H32				2
+#define TOPAZ_BUSMON_RD_L32				3
+#define TOPAZ_BUSMON_RD_H32				4
+#define TOPAZ_BUSMON_CTRL0				5
+#define TOPAZ_BUSMON_CTRL1				6
+#define TOPAZ_BUSMON_CTRL2				7
+#define TOPAZ_BUSMON_DEBUG_MAX				8
+
+/* GPIO Registers */
+#define RUBY_GPIO3_PWM1					(RUBY_GPIO1_PWM0 + 4)
+#define RUBY_GPIO12_PWM3				(RUBY_GPIO1_PWM0 + 12)
+#define RUBY_GPIO13_PWM4				(RUBY_GPIO1_PWM0 + 16)
+#define RUBY_GPIO15_PWM5				(RUBY_GPIO1_PWM0 + 20)
+#define RUBY_GPIO16_PWM6				(RUBY_GPIO1_PWM0 + 24)
+#define RUBY_GPIO_PWM_LOW_SHIFT				(0)
+#define RUBY_GPIO_PWM_HIGH_SHIFT			(8)
+#define RUBY_GPIO_PWM_ENABLE				(BIT(16))
+#define RUBY_GPIO_PWM_MAX_COUNT				(255)
+
+#ifdef TOPAZ_AMBER_IP
+#define	AMBER_GPIO11_PWM0				(RUBY_GPIO_REGS_ADDR + 0x20)
+#define AMBER_GPIO12_PWM1				(RUBY_GPIO_REGS_ADDR + 0x24)
+#define	AMBER_GPIO13_PWM2				(RUBY_GPIO_REGS_ADDR + 0x28)
+#define AMBER_GPIO14_PWM3				(RUBY_GPIO_REGS_ADDR + 0x2C)
+#define AMBER_GPIO15_PWM4				(RUBY_GPIO_REGS_ADDR + 0x30)
+#define AMBER_GPIO16_PWM5				(RUBY_GPIO_REGS_ADDR + 0x34)
+#define AMBER_GPIO17_PWM6				(RUBY_GPIO_REGS_ADDR + 0x38)
+#endif
+
+/* Interrupt lines */
+#define TOPAZ_IRQ_MISC_WDT				(57)
+#define TOPAZ_IRQ_MISC_SPI1				(58)
+#define TOPAZ_IRQ_MISC_AHB_MON				(61)
+#define TOPAZ_IRQ_MISC_HBM				(62)
+#define TOPAZ_IRQ_MISC_FWT				(63)
+#define TOPAZ_IRQ_MISC_EXT_IRQ_COUNT			(8)
+#define TOPAZ_IRQ_MISC_RST_CAUSE_START			(9)
+
+/* RESET CAUSE */
+#define TOPAZ_SYS_CTL_INTR_TIMER_MSK(t)		(1 << (3 + (t)))
+
+#endif /* #ifndef __TOPAZ_PLATFORM_H */