xref: /freebsd/sys/dev/etherswitch/e6000sw/e6000swreg.h (revision 2dd020069e3d868047357044d87dfe509df1643e)
15420071dSZbigniew Bodek /*-
25420071dSZbigniew Bodek  * Copyright (c) 2015 Semihalf
35420071dSZbigniew Bodek  * Copyright (c) 2015 Stormshield
45420071dSZbigniew Bodek  * All rights reserved.
55420071dSZbigniew Bodek  *
65420071dSZbigniew Bodek  * Redistribution and use in source and binary forms, with or without
75420071dSZbigniew Bodek  * modification, are permitted provided that the following conditions
85420071dSZbigniew Bodek  * are met:
95420071dSZbigniew Bodek  * 1. Redistributions of source code must retain the above copyright
105420071dSZbigniew Bodek  *    notice, this list of conditions and the following disclaimer.
115420071dSZbigniew Bodek  * 2. Redistributions in binary form must reproduce the above copyright
125420071dSZbigniew Bodek  *    notice, this list of conditions and the following disclaimer in the
135420071dSZbigniew Bodek  *    documentation and/or other materials provided with the distribution.
145420071dSZbigniew Bodek  *
155420071dSZbigniew Bodek  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
165420071dSZbigniew Bodek  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
175420071dSZbigniew Bodek  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
185420071dSZbigniew Bodek  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
195420071dSZbigniew Bodek  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
205420071dSZbigniew Bodek  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
215420071dSZbigniew Bodek  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
225420071dSZbigniew Bodek  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
235420071dSZbigniew Bodek  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
245420071dSZbigniew Bodek  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
255420071dSZbigniew Bodek  * SUCH DAMAGE.
265420071dSZbigniew Bodek  *
275420071dSZbigniew Bodek  * $FreeBSD$
285420071dSZbigniew Bodek  *
295420071dSZbigniew Bodek  */
305420071dSZbigniew Bodek 
315420071dSZbigniew Bodek #ifndef _E6000SWREG_H_
325420071dSZbigniew Bodek #define _E6000SWREG_H_
335420071dSZbigniew Bodek 
345420071dSZbigniew Bodek struct atu_opt {
355420071dSZbigniew Bodek 	uint16_t mac_01;
365420071dSZbigniew Bodek 	uint16_t mac_23;
375420071dSZbigniew Bodek 	uint16_t mac_45;
385420071dSZbigniew Bodek 	uint16_t fid;
395420071dSZbigniew Bodek };
405420071dSZbigniew Bodek 
415420071dSZbigniew Bodek /*
425420071dSZbigniew Bodek  * Definitions for the Marvell 88E6000 series Ethernet Switch.
435420071dSZbigniew Bodek  */
445420071dSZbigniew Bodek 
455420071dSZbigniew Bodek /*
465420071dSZbigniew Bodek  * Switch Registers
475420071dSZbigniew Bodek  */
485420071dSZbigniew Bodek #define REG_GLOBAL			0x1b
495420071dSZbigniew Bodek #define REG_GLOBAL2			0x1c
505420071dSZbigniew Bodek #define REG_PORT(p)			(0x10 + (p))
515420071dSZbigniew Bodek 
525420071dSZbigniew Bodek #define REG_NUM_MAX			31
535420071dSZbigniew Bodek 
545420071dSZbigniew Bodek /*
555420071dSZbigniew Bodek  * Per-Port Switch Registers
565420071dSZbigniew Bodek  */
575420071dSZbigniew Bodek #define PORT_STATUS			0x0
58*2dd02006SWojciech Macek #define	PORT_STATUS_SPEED_MASK		0x300
59*2dd02006SWojciech Macek #define	PORT_STATUS_SPEED_10		0
60*2dd02006SWojciech Macek #define	PORT_STATUS_SPEED_100		1
61*2dd02006SWojciech Macek #define	PORT_STATUS_SPEED_1000		2
62*2dd02006SWojciech Macek #define	PORT_STATUS_DUPLEX_MASK		(1 << 10)
63*2dd02006SWojciech Macek #define	PORT_STATUS_LINK_MASK		(1 << 11)
64*2dd02006SWojciech Macek #define	PORT_STATUS_PHY_DETECT_MASK	(1 << 12)
65*2dd02006SWojciech Macek 
665420071dSZbigniew Bodek #define PSC_CONTROL			0x1
675420071dSZbigniew Bodek #define SWITCH_ID			0x3
685420071dSZbigniew Bodek #define PORT_CONTROL			0x4
695420071dSZbigniew Bodek #define PORT_CONTROL_1			0x5
705420071dSZbigniew Bodek #define PORT_VLAN_MAP			0x6
715420071dSZbigniew Bodek #define PORT_VID			0x7
725420071dSZbigniew Bodek #define PORT_ASSOCIATION_VECTOR		0xb
735420071dSZbigniew Bodek #define PORT_ATU_CTRL			0xc
745420071dSZbigniew Bodek #define RX_COUNTER			0x12
755420071dSZbigniew Bodek #define TX_COUNTER			0x13
765420071dSZbigniew Bodek 
775420071dSZbigniew Bodek #define PORT_VID_DEF_VID		0
785420071dSZbigniew Bodek #define PORT_VID_DEF_VID_MASK		0xfff
795420071dSZbigniew Bodek #define PORT_VID_PRIORITY_MASK		0xc00
805420071dSZbigniew Bodek 
815420071dSZbigniew Bodek #define PORT_CONTROL_ENABLE		0x3
825420071dSZbigniew Bodek 
835420071dSZbigniew Bodek /* PORT_VLAN fields */
845420071dSZbigniew Bodek #define PORT_VLAN_MAP_TABLE_MASK	0x7f
855420071dSZbigniew Bodek #define PORT_VLAN_MAP_FID		12
865420071dSZbigniew Bodek #define PORT_VLAN_MAP_FID_MASK		0xf000
875420071dSZbigniew Bodek /*
885420071dSZbigniew Bodek  * Switch Global Register 1 accessed via REG_GLOBAL_ADDR
895420071dSZbigniew Bodek  */
905420071dSZbigniew Bodek #define SWITCH_GLOBAL_STATUS		0
915420071dSZbigniew Bodek #define SWITCH_GLOBAL_CONTROL		4
925420071dSZbigniew Bodek #define SWITCH_GLOBAL_CONTROL2		28
935420071dSZbigniew Bodek 
945420071dSZbigniew Bodek #define MONITOR_CONTROL			26
955420071dSZbigniew Bodek 
965420071dSZbigniew Bodek /* ATU operation */
975420071dSZbigniew Bodek #define ATU_FID				1
985420071dSZbigniew Bodek #define ATU_CONTROL			10
995420071dSZbigniew Bodek #define ATU_OPERATION			11
1005420071dSZbigniew Bodek #define ATU_DATA			12
1015420071dSZbigniew Bodek #define ATU_MAC_ADDR01			13
1025420071dSZbigniew Bodek #define ATU_MAC_ADDR23			14
1035420071dSZbigniew Bodek #define ATU_MAC_ADDR45			15
1045420071dSZbigniew Bodek 
1055420071dSZbigniew Bodek #define ATU_UNIT_BUSY			(1 << 15)
1065420071dSZbigniew Bodek #define ENTRY_STATE			0xf
1075420071dSZbigniew Bodek 
1085420071dSZbigniew Bodek /* ATU_CONTROL fields */
1095420071dSZbigniew Bodek #define ATU_CONTROL_AGETIME		4
1105420071dSZbigniew Bodek #define ATU_CONTROL_AGETIME_MASK	0xff0
1115420071dSZbigniew Bodek #define ATU_CONTROL_LEARN2ALL		3
1125420071dSZbigniew Bodek 
1135420071dSZbigniew Bodek /* ATU opcode */
1145420071dSZbigniew Bodek #define NO_OPERATION			(0 << 0)
1155420071dSZbigniew Bodek #define FLUSH_ALL			(1 << 0)
1165420071dSZbigniew Bodek #define FLUSH_NON_STATIC		(1 << 1)
1175420071dSZbigniew Bodek #define LOAD_FROM_FIB			(3 << 0)
1185420071dSZbigniew Bodek #define PURGE_FROM_FIB			(3 << 0)
1195420071dSZbigniew Bodek #define GET_NEXT_IN_FIB			(1 << 2)
1205420071dSZbigniew Bodek #define FLUSH_ALL_IN_FIB		(5 << 0)
1215420071dSZbigniew Bodek #define FLUSH_NON_STATIC_IN_FIB		(3 << 1)
1225420071dSZbigniew Bodek #define GET_VIOLATION_DATA		(7 << 0)
1235420071dSZbigniew Bodek #define CLEAR_VIOLATION_DATA		(7 << 0)
1245420071dSZbigniew Bodek 
1255420071dSZbigniew Bodek /* ATU Stats */
1265420071dSZbigniew Bodek #define COUNT_ALL			(0 << 0)
1275420071dSZbigniew Bodek 
1285420071dSZbigniew Bodek /*
1295420071dSZbigniew Bodek  * Switch Global Register 2 accessed via REG_GLOBAL2_ADDR
1305420071dSZbigniew Bodek  */
1315420071dSZbigniew Bodek #define MGMT_EN_2x			2
1325420071dSZbigniew Bodek #define MGMT_EN_0x			3
1335420071dSZbigniew Bodek #define SWITCH_MGMT			5
1345420071dSZbigniew Bodek #define ATU_STATS			14
1355420071dSZbigniew Bodek 
1365420071dSZbigniew Bodek #define MGMT_EN_ALL			0xffff
1375420071dSZbigniew Bodek 
1385420071dSZbigniew Bodek /* SWITCH_MGMT fields */
1395420071dSZbigniew Bodek 
1405420071dSZbigniew Bodek #define SWITCH_MGMT_PRI			0
1415420071dSZbigniew Bodek #define SWITCH_MGMT_PRI_MASK		7
1425420071dSZbigniew Bodek #define	SWITCH_MGMT_RSVD2CPU		3
1435420071dSZbigniew Bodek #define SWITCH_MGMT_FC_PRI		4
1445420071dSZbigniew Bodek #define SWITCH_MGMT_FC_PRI_MASK		(7 << 4)
1455420071dSZbigniew Bodek #define SWITCH_MGMT_FORCEFLOW		7
1465420071dSZbigniew Bodek 
1475420071dSZbigniew Bodek /* ATU_STATS fields */
1485420071dSZbigniew Bodek 
1495420071dSZbigniew Bodek #define ATU_STATS_BIN			14
1505420071dSZbigniew Bodek #define ATU_STATS_FLAG			12
1515420071dSZbigniew Bodek 
1525420071dSZbigniew Bodek /*
1535420071dSZbigniew Bodek  * PHY registers accessed via 'Switch Global Registers' (REG_GLOBAL2).
1545420071dSZbigniew Bodek  */
1555420071dSZbigniew Bodek #define SMI_PHY_CMD_REG			0x18
1565420071dSZbigniew Bodek #define SMI_PHY_DATA_REG		0x19
1575420071dSZbigniew Bodek 
1585420071dSZbigniew Bodek #define PHY_CMD				0x18
1595420071dSZbigniew Bodek #define PHY_DATA			0x19
1605420071dSZbigniew Bodek #define PHY_DATA_MASK			0xffff
1615420071dSZbigniew Bodek 
1625420071dSZbigniew Bodek #define PHY_CMD_SMI_BUSY		15
1635420071dSZbigniew Bodek #define PHY_CMD_MODE			12
1645420071dSZbigniew Bodek #define PHY_CMD_MODE_MDIO		1
1655420071dSZbigniew Bodek #define PHY_CMD_MODE_XMDIO		0
1665420071dSZbigniew Bodek #define PHY_CMD_OPCODE			10
1675420071dSZbigniew Bodek #define PHY_CMD_OPCODE_WRITE		1
1685420071dSZbigniew Bodek #define PHY_CMD_OPCODE_READ		2
1695420071dSZbigniew Bodek #define PHY_CMD_DEV_ADDR		5
1705420071dSZbigniew Bodek #define PHY_CMD_DEV_ADDR_MASK		0x3e0
1715420071dSZbigniew Bodek #define PHY_CMD_REG_ADDR		0
1725420071dSZbigniew Bodek #define PHY_CMD_REG_ADDR_MASK		0x1f
1735420071dSZbigniew Bodek 
1745420071dSZbigniew Bodek #define PHY_PAGE_REG			22
1755420071dSZbigniew Bodek 
176f7c13d78SZbigniew Bodek /*
177f7c13d78SZbigniew Bodek  * Scratch and Misc register accessed via
178f7c13d78SZbigniew Bodek  * 'Switch Global Registers' (REG_GLOBAL2)
179f7c13d78SZbigniew Bodek  */
180f7c13d78SZbigniew Bodek #define SCR_AND_MISC_REG		0x1a
181f7c13d78SZbigniew Bodek 
182f7c13d78SZbigniew Bodek #define SCR_AND_MISC_PTR_CFG		0x7000
183f7c13d78SZbigniew Bodek #define SCR_AND_MISC_DATA_CFG_MASK	0xf0
184f7c13d78SZbigniew Bodek 
1855420071dSZbigniew Bodek #define E6000SW_NUM_PHY_REGS		29
1865420071dSZbigniew Bodek #define E6000SW_NUM_VGROUPS		8
187f7c13d78SZbigniew Bodek #define E6000SW_MAX_PORTS		10
1885420071dSZbigniew Bodek #define E6000SW_PORT_NO_VGROUP		-1
1895420071dSZbigniew Bodek #define E6000SW_DEFAULT_AGETIME		20
1905420071dSZbigniew Bodek #define E6000SW_RETRIES			100
191f7c13d78SZbigniew Bodek #define E6000SW_SMI_TIMEOUT		16
1925420071dSZbigniew Bodek 
1935420071dSZbigniew Bodek #endif /* _E6000SWREG_H_ */
194