diff options
Diffstat (limited to 'drivers/net/dsa/mt7530.h')
| -rw-r--r-- | drivers/net/dsa/mt7530.h | 95 | 
1 files changed, 26 insertions, 69 deletions
diff --git a/drivers/net/dsa/mt7530.h b/drivers/net/dsa/mt7530.h index 6b2fc6290ea8..08045b035e6a 100644 --- a/drivers/net/dsa/mt7530.h +++ b/drivers/net/dsa/mt7530.h @@ -18,6 +18,7 @@ enum mt753x_id {  	ID_MT7530 = 0,  	ID_MT7621 = 1,  	ID_MT7531 = 2, +	ID_MT7988 = 3,  };  #define	NUM_TRGMII_CTRL			5 @@ -53,18 +54,24 @@ enum mt753x_id {  #define  MT7531_MIRROR_PORT_GET(x)	(((x) >> 16) & MIRROR_MASK)  #define  MT7531_MIRROR_PORT_SET(x)	(((x) & MIRROR_MASK) << 16)  #define  MT7531_CPU_PMAP_MASK		GENMASK(7, 0) +#define  MT7531_CPU_PMAP(x)		FIELD_PREP(MT7531_CPU_PMAP_MASK, x) -#define MT753X_MIRROR_REG(id)		(((id) == ID_MT7531) ? \ +#define MT753X_MIRROR_REG(id)		((((id) == ID_MT7531) || ((id) == ID_MT7988)) ?	\  					 MT7531_CFC : MT7530_MFC) -#define MT753X_MIRROR_EN(id)		(((id) == ID_MT7531) ? \ +#define MT753X_MIRROR_EN(id)		((((id) == ID_MT7531) || ((id) == ID_MT7988)) ?	\  					 MT7531_MIRROR_EN : MIRROR_EN) -#define MT753X_MIRROR_MASK(id)		(((id) == ID_MT7531) ? \ +#define MT753X_MIRROR_MASK(id)		((((id) == ID_MT7531) || ((id) == ID_MT7988)) ?	\  					 MT7531_MIRROR_MASK : MIRROR_MASK)  /* Registers for BPDU and PAE frame control*/  #define MT753X_BPC			0x24  #define  MT753X_BPDU_PORT_FW_MASK	GENMASK(2, 0) +/* Register for :03 and :0E MAC DA frame control */ +#define MT753X_RGAC2			0x2c +#define  MT753X_R0E_PORT_FW_MASK	GENMASK(18, 16) +#define  MT753X_R0E_PORT_FW(x)		FIELD_PREP(MT753X_R0E_PORT_FW_MASK, x) +  enum mt753x_bpdu_port_fw {  	MT753X_BPDU_FOLLOW_MFC,  	MT753X_BPDU_CPU_EXCLUDE = 4, @@ -295,9 +302,8 @@ enum mt7530_vlan_port_acc_frm {  					 MT7531_FORCE_DPX | \  					 MT7531_FORCE_RX_FC | \  					 MT7531_FORCE_TX_FC) -#define  PMCR_FORCE_MODE_ID(id)		(((id) == ID_MT7531) ? \ -					 MT7531_FORCE_MODE : \ -					 PMCR_FORCE_MODE) +#define  PMCR_FORCE_MODE_ID(id)		((((id) == ID_MT7531) || ((id) == ID_MT7988)) ?	\ +					 MT7531_FORCE_MODE : PMCR_FORCE_MODE)  #define  PMCR_LINK_SETTINGS_MASK	(PMCR_TX_EN | PMCR_FORCE_SPEED_1000 | \  					 PMCR_RX_EN | PMCR_FORCE_SPEED_100 | \  					 PMCR_TX_FC_EN | PMCR_RX_FC_EN | \ @@ -364,47 +370,8 @@ enum mt7530_vlan_port_acc_frm {  					 CCR_TX_OCT_CNT_BAD)  /* MT7531 SGMII register group */ -#define MT7531_SGMII_REG_BASE		0x5000 -#define MT7531_SGMII_REG(p, r)		(MT7531_SGMII_REG_BASE + \ -					((p) - 5) * 0x1000 + (r)) - -/* Register forSGMII PCS_CONTROL_1 */ -#define MT7531_PCS_CONTROL_1(p)		MT7531_SGMII_REG(p, 0x00) -#define  MT7531_SGMII_LINK_STATUS	BIT(18) -#define  MT7531_SGMII_AN_ENABLE		BIT(12) -#define  MT7531_SGMII_AN_RESTART	BIT(9) -#define  MT7531_SGMII_AN_COMPLETE	BIT(21) - -/* Register for SGMII PCS_SPPED_ABILITY */ -#define MT7531_PCS_SPEED_ABILITY(p)	MT7531_SGMII_REG(p, 0x08) -#define  MT7531_SGMII_TX_CONFIG_MASK	GENMASK(15, 0) -#define  MT7531_SGMII_TX_CONFIG		BIT(0) - -/* Register for SGMII_MODE */ -#define MT7531_SGMII_MODE(p)		MT7531_SGMII_REG(p, 0x20) -#define  MT7531_SGMII_REMOTE_FAULT_DIS	BIT(8) -#define  MT7531_SGMII_IF_MODE_MASK	GENMASK(5, 1) -#define  MT7531_SGMII_FORCE_DUPLEX	BIT(4) -#define  MT7531_SGMII_FORCE_SPEED_MASK	GENMASK(3, 2) -#define  MT7531_SGMII_FORCE_SPEED_1000	BIT(3) -#define  MT7531_SGMII_FORCE_SPEED_100	BIT(2) -#define  MT7531_SGMII_FORCE_SPEED_10	0 -#define  MT7531_SGMII_SPEED_DUPLEX_AN	BIT(1) - -enum mt7531_sgmii_force_duplex { -	MT7531_SGMII_FORCE_FULL_DUPLEX = 0, -	MT7531_SGMII_FORCE_HALF_DUPLEX = 0x10, -}; - -/* Fields of QPHY_PWR_STATE_CTRL */ -#define MT7531_QPHY_PWR_STATE_CTRL(p)	MT7531_SGMII_REG(p, 0xe8) -#define  MT7531_SGMII_PHYA_PWD		BIT(4) - -/* Values of SGMII SPEED */ -#define MT7531_PHYA_CTRL_SIGNAL3(p)	MT7531_SGMII_REG(p, 0x128) -#define  MT7531_RG_TPHY_SPEED_MASK	(BIT(2) | BIT(3)) -#define  MT7531_RG_TPHY_SPEED_1_25G	0x0 -#define  MT7531_RG_TPHY_SPEED_3_125G	BIT(2) +#define MT7531_SGMII_REG_BASE(p)	(0x5000 + ((p) - 5) * 0x1000) +#define MT7531_PHYA_CTRL_SIGNAL3	0x128  /* Register for system reset */  #define MT7530_SYS_CTRL			0x7000 @@ -703,13 +670,13 @@ struct mt7530_fdb {   * @pm:		The matrix used to show all connections with the port.   * @pvid:	The VLAN specified is to be considered a PVID at ingress.  Any   *		untagged frames will be assigned to the related VLAN. - * @vlan_filtering: The flags indicating whether the port that can recognize - *		    VLAN-tagged frames. + * @sgmii_pcs:	Pointer to PCS instance for SerDes ports   */  struct mt7530_port {  	bool enable;  	u32 pm;  	u16 pvid; +	struct phylink_pcs *sgmii_pcs;  };  /* Port 5 interface select definitions */ @@ -721,24 +688,6 @@ enum p5_interface_select {  	P5_INTF_SEL_GMAC5_SGMII,  }; -static const char *p5_intf_modes(unsigned int p5_interface) -{ -	switch (p5_interface) { -	case P5_DISABLED: -		return "DISABLED"; -	case P5_INTF_SEL_PHY_P0: -		return "PHY P0"; -	case P5_INTF_SEL_PHY_P4: -		return "PHY P4"; -	case P5_INTF_SEL_GMAC5: -		return "GMAC5"; -	case P5_INTF_SEL_GMAC5_SGMII: -		return "GMAC5_SGMII"; -	default: -		return "unknown"; -	} -} -  struct mt7530_priv;  struct mt753x_pcs { @@ -793,6 +742,7 @@ struct mt753x_info {   * @dev:		The device pointer   * @ds:			The pointer to the dsa core structure   * @bus:		The bus used for the device and built-in PHY + * @regmap:		The regmap instance representing all switch registers   * @rstc:		The pointer to reset control used by MCM   * @core_pwr:		The power supplied into the core   * @io_pwr:		The power supplied into the I/O @@ -804,15 +754,16 @@ struct mt753x_info {   *			registers   * @p6_interface	Holding the current port 6 interface   * @p5_intf_sel:	Holding the current port 5 interface select - *   * @irq:		IRQ number of the switch   * @irq_domain:		IRQ domain of the switch irq_chip   * @irq_enable:		IRQ enable bits, synced to SYS_INT_EN + * @create_sgmii:	Pointer to function creating SGMII PCS instance(s)   */  struct mt7530_priv {  	struct device		*dev;  	struct dsa_switch	*ds;  	struct mii_bus		*bus; +	struct regmap		*regmap;  	struct reset_control	*rstc;  	struct regulator	*core_pwr;  	struct regulator	*io_pwr; @@ -825,7 +776,6 @@ struct mt7530_priv {  	unsigned int		p5_intf_sel;  	u8			mirror_rx;  	u8			mirror_tx; -  	struct mt7530_port	ports[MT7530_NUM_PORTS];  	struct mt753x_pcs	pcs[MT7530_NUM_PORTS];  	/* protect among processes for registers access*/ @@ -833,6 +783,7 @@ struct mt7530_priv {  	int irq;  	struct irq_domain *irq_domain;  	u32 irq_enable; +	int (*create_sgmii)(struct mt7530_priv *priv, bool dual_sgmii);  };  struct mt7530_hw_vlan_entry { @@ -869,4 +820,10 @@ static inline void INIT_MT7530_DUMMY_POLL(struct mt7530_dummy_poll *p,  	p->reg = reg;  } +int mt7530_probe_common(struct mt7530_priv *priv); +void mt7530_remove_common(struct mt7530_priv *priv); + +extern const struct dsa_switch_ops mt7530_switch_ops; +extern const struct mt753x_info mt753x_table[]; +  #endif /* __MT7530_H */  |