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