Thread (15 messages) flat view 15 messages, 3 authors, 2021-01-12

Re: [PATCH net-next v15 5/6] net: dsa: mv88e6xxx: Add support for mv88e6393x family of Marvell

From: Marek Behún <kabel@kernel.org>
Date: 2021-01-12 22:38:03

On Tue, 12 Jan 2021 20:54:04 +0100
Marek Behún [off-list ref] wrote:
+	/* mv88e6393x family errata 3.7 :
+	 * When changing cmode on SERDES port from any other mode to 1000BASE-X
+	 * mode the link may not come up due to invalid 1000BASE-X
+	 * advertisement.
+	 * Workaround: Correct advertisement and reset PHY core.
+	 */
+	if (cmode == MV88E6XXX_PORT_STS_CMODE_1000BASEX) {
+		reg = MV88E6390_SGMII_ANAR_1000BASEX_FD;
+		err = mv88e6390_serdes_write(chip, lane, MDIO_MMD_PHYXS,
+					     MV88E6390_SGMII_ANAR, reg);
+		if (err)
+			return err;
+
+		/* soft reset the PCS/PMA */
+		err = mv88e6390_serdes_read(chip, lane, MDIO_MMD_PHYXS,
+					    MV88E6390_SGMII_CONTROL, &reg);
+		if (err)
+			return err;
+
+		reg |= MV88E6390_SGMII_CONTROL_RESET;
+		err = mv88e6390_serdes_write(chip, lane, MDIO_MMD_PHYXS,
+					     MV88E6390_SGMII_CONTROL, reg);
+		if (err)
+			return err;
It would seem that this is already done in
mv88e6390_serdes_pcs_config, just without the last reset.
+#define MV88E6390_SGMII_STATUS_AN_ABLE	BIT(3)
+#define MV88E6390_SGMII_ANAR	0x2004
+#define MV88E6390_SGMII_ANAR_1000BASEX_FD	BIT(5)
+#define MV88E6390_SGMII_CONTROL		0x2000
This register is already called MV88E6390_SGMII_BMCR and the bits are
defined as BMCR_* macros. Thse same for MV88E6390_SGMII_STATUS and
MV88E6390_SGMII_ANAR.
+#define MV88E6390_SGMII_CONTROL_RESET		BIT(15)
+#define MV88E6390_SGMII_CONTROL_LOOPBACK	BIT(14)
+#define MV88E6390_SGMII_CONTROL_PDOWN		BIT(11)
+#define MV88E6390_SGMII_STATUS		0x2001
I shall fix this in another version.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help