xref: /linux/drivers/net/dsa/lantiq/mxl-gsw1xx.h (revision a046d6fc54d46168f69cf4d4a35f714594d205b8)
122335939SDaniel Golle /* SPDX-License-Identifier: GPL-2.0 */
222335939SDaniel Golle /* Register definitions for MaxLinear GSW1xx series switches
322335939SDaniel Golle  *
422335939SDaniel Golle  * Copyright (C) 2025 Daniel Golle <daniel@makrotopia.org>
522335939SDaniel Golle  * Copyright (C) 2023 - 2024 MaxLinear Inc.
622335939SDaniel Golle  */
722335939SDaniel Golle #ifndef __MXL_GSW1XX_H
822335939SDaniel Golle #define __MXL_GSW1XX_H
922335939SDaniel Golle 
1022335939SDaniel Golle #include <linux/bitfield.h>
1122335939SDaniel Golle 
1222335939SDaniel Golle #define GSW1XX_PORTS				6
13afe813fdSDaniel Golle #define GSW150_PORTS				7
14afe813fdSDaniel Golle 
1522335939SDaniel Golle /* Port used for RGMII or optional RMII */
1622335939SDaniel Golle #define GSW1XX_MII_PORT				5
1722335939SDaniel Golle /* Port used for SGMII */
1822335939SDaniel Golle #define GSW1XX_SGMII_PORT			4
1922335939SDaniel Golle 
2022335939SDaniel Golle #define GSW1XX_SYS_CLK_FREQ			340000000
2122335939SDaniel Golle 
2222335939SDaniel Golle /* SMDIO switch register base address */
2322335939SDaniel Golle #define GSW1XX_SMDIO_BADR			0x1f
2422335939SDaniel Golle #define  GSW1XX_SMDIO_BADR_UNKNOWN		-1
2522335939SDaniel Golle 
2622335939SDaniel Golle /* GSW1XX SGMII PCS */
2722335939SDaniel Golle #define GSW1XX_SGMII_BASE			0xd000
2822335939SDaniel Golle #define GSW1XX_SGMII_PHY_HWBU_CTRL		0x009
2922335939SDaniel Golle #define  GSW1XX_SGMII_PHY_HWBU_CTRL_EN_HWBU_FSM	BIT(0)
3022335939SDaniel Golle #define  GSW1XX_SGMII_PHY_HWBU_CTRL_HW_FSM_EN	BIT(3)
3122335939SDaniel Golle #define GSW1XX_SGMII_TBI_TXANEGH		0x300
3222335939SDaniel Golle #define GSW1XX_SGMII_TBI_TXANEGL		0x301
3322335939SDaniel Golle #define GSW1XX_SGMII_TBI_ANEGCTL		0x304
3422335939SDaniel Golle #define  GSW1XX_SGMII_TBI_ANEGCTL_LT		GENMASK(1, 0)
3522335939SDaniel Golle #define   GSW1XX_SGMII_TBI_ANEGCTL_LT_10US	0
3622335939SDaniel Golle #define   GSW1XX_SGMII_TBI_ANEGCTL_LT_1_6MS	1
3722335939SDaniel Golle #define   GSW1XX_SGMII_TBI_ANEGCTL_LT_5MS	2
3822335939SDaniel Golle #define   GSW1XX_SGMII_TBI_ANEGCTL_LT_10MS	3
3922335939SDaniel Golle #define  GSW1XX_SGMII_TBI_ANEGCTL_ANEGEN	BIT(2)
4022335939SDaniel Golle #define  GSW1XX_SGMII_TBI_ANEGCTL_RANEG		BIT(3)
4122335939SDaniel Golle #define  GSW1XX_SGMII_TBI_ANEGCTL_OVRABL	BIT(4)
4222335939SDaniel Golle #define  GSW1XX_SGMII_TBI_ANEGCTL_OVRANEG	BIT(5)
4322335939SDaniel Golle #define  GSW1XX_SGMII_TBI_ANEGCTL_ANMODE	GENMASK(7, 6)
4422335939SDaniel Golle #define   GSW1XX_SGMII_TBI_ANEGCTL_ANMODE_1000BASEX	1
4522335939SDaniel Golle #define   GSW1XX_SGMII_TBI_ANEGCTL_ANMODE_SGMII_PHY	2
4622335939SDaniel Golle #define   GSW1XX_SGMII_TBI_ANEGCTL_ANMODE_SGMII_MAC	3
4722335939SDaniel Golle #define  GSW1XX_SGMII_TBI_ANEGCTL_BCOMP		BIT(15)
4822335939SDaniel Golle 
4922335939SDaniel Golle #define GSW1XX_SGMII_TBI_TBICTL			0x305
5022335939SDaniel Golle #define  GSW1XX_SGMII_TBI_TBICTL_INITTBI	BIT(0)
5122335939SDaniel Golle #define  GSW1XX_SGMII_TBI_TBICTL_ENTBI		BIT(1)
5222335939SDaniel Golle #define  GSW1XX_SGMII_TBI_TBICTL_CRSTRR		BIT(4)
5322335939SDaniel Golle #define  GSW1XX_SGMII_TBI_TBICTL_CRSOFF		BIT(5)
5422335939SDaniel Golle #define GSW1XX_SGMII_TBI_TBISTAT		0x309
5522335939SDaniel Golle #define  GSW1XX_SGMII_TBI_TBISTAT_LINK		BIT(0)
5622335939SDaniel Golle #define  GSW1XX_SGMII_TBI_TBISTAT_AN_COMPLETE	BIT(1)
5722335939SDaniel Golle #define GSW1XX_SGMII_TBI_LPSTAT			0x30a
5822335939SDaniel Golle #define  GSW1XX_SGMII_TBI_LPSTAT_DUPLEX		BIT(0)
5922335939SDaniel Golle #define  GSW1XX_SGMII_TBI_LPSTAT_PAUSE_RX	BIT(1)
6022335939SDaniel Golle #define  GSW1XX_SGMII_TBI_LPSTAT_PAUSE_TX	BIT(2)
6122335939SDaniel Golle #define  GSW1XX_SGMII_TBI_LPSTAT_SPEED		GENMASK(6, 5)
6222335939SDaniel Golle #define   GSW1XX_SGMII_TBI_LPSTAT_SPEED_10	0
6322335939SDaniel Golle #define   GSW1XX_SGMII_TBI_LPSTAT_SPEED_100	1
6422335939SDaniel Golle #define   GSW1XX_SGMII_TBI_LPSTAT_SPEED_1000	2
6522335939SDaniel Golle #define   GSW1XX_SGMII_TBI_LPSTAT_SPEED_NOSGMII	3
6622335939SDaniel Golle #define GSW1XX_SGMII_PHY_D			0x100
6722335939SDaniel Golle #define GSW1XX_SGMII_PHY_A			0x101
6822335939SDaniel Golle #define GSW1XX_SGMII_PHY_C			0x102
6922335939SDaniel Golle #define  GSW1XX_SGMII_PHY_STATUS		BIT(0)
7022335939SDaniel Golle #define  GSW1XX_SGMII_PHY_READ			BIT(4)
7122335939SDaniel Golle #define  GSW1XX_SGMII_PHY_WRITE			BIT(8)
7222335939SDaniel Golle #define  GSW1XX_SGMII_PHY_RESET_N		BIT(12)
7322335939SDaniel Golle #define GSW1XX_SGMII_PCS_RXB_CTL		0x401
7422335939SDaniel Golle #define  GSW1XX_SGMII_PCS_RXB_CTL_INIT_RX_RXB	BIT(1)
7522335939SDaniel Golle #define GSW1XX_SGMII_PCS_TXB_CTL		0x404
7622335939SDaniel Golle #define  GSW1XX_SGMII_PCS_TXB_CTL_INIT_TX_TXB	BIT(1)
7722335939SDaniel Golle 
7822335939SDaniel Golle #define GSW1XX_SGMII_PHY_RX0_CFG2		0x004
7922335939SDaniel Golle #define  GSW1XX_SGMII_PHY_RX0_CFG2_EQ		GENMASK(2, 0)
8022335939SDaniel Golle #define   GSW1XX_SGMII_PHY_RX0_CFG2_EQ_DEF	2
8122335939SDaniel Golle #define  GSW1XX_SGMII_PHY_RX0_CFG2_INVERT	BIT(3)
8222335939SDaniel Golle #define  GSW1XX_SGMII_PHY_RX0_CFG2_LOS_EN	BIT(4)
8322335939SDaniel Golle #define  GSW1XX_SGMII_PHY_RX0_CFG2_TERM_EN	BIT(5)
8422335939SDaniel Golle #define  GSW1XX_SGMII_PHY_RX0_CFG2_FILT_CNT	GENMASK(12, 6)
8522335939SDaniel Golle #define   GSW1XX_SGMII_PHY_RX0_CFG2_FILT_CNT_DEF	20
8622335939SDaniel Golle 
8722335939SDaniel Golle #define GSW1XX_SGMII_PHY_TX0_CFG3		0x007
8822335939SDaniel Golle #define  GSW1XX_SGMII_PHY_TX0_CFG3_VBOOST_EN	BIT(12)
8922335939SDaniel Golle #define  GSW1XX_SGMII_PHY_TX0_CFG3_VBOOST_LEVEL	GENMASK(11, 9)
9022335939SDaniel Golle #define   GSW1XX_SGMII_PHY_TX0_CFG3_VBOOST_LEVEL_DEF	4
9122335939SDaniel Golle #define  GSW1XX_SGMII_PHY_TX0_CFG3_INVERT	BIT(8)
9222335939SDaniel Golle 
9322335939SDaniel Golle /* GSW1XX PDI Registers */
9422335939SDaniel Golle #define GSW1XX_SWITCH_BASE			0xe000
9522335939SDaniel Golle 
9622335939SDaniel Golle /* GSW1XX MII Registers */
9722335939SDaniel Golle #define GSW1XX_RGMII_BASE			0xf100
9822335939SDaniel Golle 
9922335939SDaniel Golle /* GSW1XX GPIO Registers */
10022335939SDaniel Golle #define GSW1XX_GPIO_BASE			0xf300
10122335939SDaniel Golle #define GPIO_ALTSEL0				0x83
10222335939SDaniel Golle #define GPIO_ALTSEL0_EXTPHY_MUX_VAL		0x03c3
10322335939SDaniel Golle #define GPIO_ALTSEL1				0x84
10422335939SDaniel Golle #define GPIO_ALTSEL1_EXTPHY_MUX_VAL		0x003f
10522335939SDaniel Golle 
10622335939SDaniel Golle /* MDIO bus controller */
10722335939SDaniel Golle #define GSW1XX_MMDIO_BASE			0xf400
10822335939SDaniel Golle 
10922335939SDaniel Golle /* generic IC registers */
11022335939SDaniel Golle #define GSW1XX_SHELL_BASE			0xfa00
11122335939SDaniel Golle #define  GSW1XX_SHELL_RST_REQ			0x01
11222335939SDaniel Golle #define   GSW1XX_RST_REQ_SGMII_SHELL		BIT(5)
113*a046d6fcSDaniel Golle #define  GSW1XX_SHELL_MANU_ID			0x10
114*a046d6fcSDaniel Golle #define   GSW1XX_SHELL_MANU_ID_PNUML		GENMASK(15, 12)
115*a046d6fcSDaniel Golle #define   GSW1XX_SHELL_MANU_ID_MANID		GENMASK(11, 1)
116*a046d6fcSDaniel Golle #define    GSW1XX_SHELL_MANU_ID_MANID_VAL	0x389
117*a046d6fcSDaniel Golle #define   GSW1XX_SHELL_MANU_ID_FIX1		BIT(0)
118*a046d6fcSDaniel Golle #define  GSW1XX_SHELL_PNUM_ID			0x11
119*a046d6fcSDaniel Golle #define   GSW1XX_SHELL_PNUM_ID_VER		GENMASK(15, 12)
120*a046d6fcSDaniel Golle #define   GSW1XX_SHELL_PNUM_ID_PNUMM		GENMASK(11, 0)
121*a046d6fcSDaniel Golle 
12222335939SDaniel Golle /* RGMII PAD Slew Control Register */
12322335939SDaniel Golle #define  GSW1XX_SHELL_RGMII_SLEW_CFG		0x78
124dbf24ab5SAlexander Sverdlin #define   RGMII_SLEW_CFG_DRV_TXC		BIT(2)
125dbf24ab5SAlexander Sverdlin #define   RGMII_SLEW_CFG_DRV_TXD		BIT(3)
12622335939SDaniel Golle #define   RGMII_SLEW_CFG_RX_2_5_V		BIT(4)
12722335939SDaniel Golle #define   RGMII_SLEW_CFG_TX_2_5_V		BIT(5)
12822335939SDaniel Golle 
12922335939SDaniel Golle /* SGMII clock related settings */
13022335939SDaniel Golle #define GSW1XX_CLK_BASE				0xf900
13122335939SDaniel Golle #define  GSW1XX_CLK_NCO_CTRL			0x68
13222335939SDaniel Golle #define   GSW1XX_SGMII_HSP_MASK			GENMASK(3, 2)
13322335939SDaniel Golle #define   GSW1XX_SGMII_SEL			BIT(1)
13422335939SDaniel Golle #define   GSW1XX_SGMII_1G			0x0
13522335939SDaniel Golle #define   GSW1XX_SGMII_2G5			0xc
13622335939SDaniel Golle #define   GSW1XX_SGMII_1G_NCO1			0x0
13722335939SDaniel Golle #define   GSW1XX_SGMII_2G5_NCO2			0x2
13822335939SDaniel Golle 
13922335939SDaniel Golle #endif /* __MXL_GSW1XX_H */
140