netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/3] net: dsa: SERDES support for mv88e632x family
@ 2023-07-18  6:59 M. Haener
  2023-07-18  6:59 ` [PATCH v3 1/3] net: dsa: mv88e632x: Refactor serdes read M. Haener
                   ` (2 more replies)
  0 siblings, 3 replies; 13+ messages in thread
From: M. Haener @ 2023-07-18  6:59 UTC (permalink / raw)
  To: netdev
  Cc: Michael Haener, linux-kernel, Andrew Lunn, Florian Fainelli,
	Vladimir Oltean, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Russell King, Alexander Sverdlin

From: Michael Haener <michael.haener@siemens.com>

This patch series brings SERDES support for the mv88e632x family.

We have backported and tested the patch series with kernel 6.1.
With the current kernel it was possible to build without errors,
but not to test on the HW (due to a vendor kernel).

Changelog:
v3: rebased onto main branch
v2: rebased onto Russell Kings series dsa/88e6xxx/phylink

Michael Haener (3):
  net: dsa: mv88e632x: Refactor serdes read
  net: dsa: mv88e632x: Refactor serdes write
  net: dsa: mv88e632x: Add SERDES ops

 drivers/net/dsa/mv88e6xxx/chip.c   | 35 ++++++++++++++
 drivers/net/dsa/mv88e6xxx/chip.h   |  5 ++
 drivers/net/dsa/mv88e6xxx/serdes.c | 76 +++++++++++++++++++++++-------
 drivers/net/dsa/mv88e6xxx/serdes.h | 33 +++++++++++++
 4 files changed, 133 insertions(+), 16 deletions(-)

-- 
2.41.0


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH v3 1/3] net: dsa: mv88e632x: Refactor serdes read
  2023-07-18  6:59 [PATCH v3 0/3] net: dsa: SERDES support for mv88e632x family M. Haener
@ 2023-07-18  6:59 ` M. Haener
  2023-07-18  7:29   ` Sverdlin, Alexander
  2023-07-18  6:59 ` [PATCH v3 2/3] net: dsa: mv88e632x: Refactor serdes write M. Haener
  2023-07-18  6:59 ` [PATCH v3 3/3] net: dsa: mv88e632x: Add SERDES ops M. Haener
  2 siblings, 1 reply; 13+ messages in thread
From: M. Haener @ 2023-07-18  6:59 UTC (permalink / raw)
  To: netdev
  Cc: Michael Haener, linux-kernel, Andrew Lunn, Florian Fainelli,
	Vladimir Oltean, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Russell King, Alexander Sverdlin

From: Michael Haener <michael.haener@siemens.com>

To avoid code duplication, the serdes read functions
have been combined.

Signed-off-by: Michael Haener <michael.haener@siemens.com>
---
Changelog:
v3: rebased onto main branch
v2: rebased onto Russell Kings series dsa/88e6xxx/phylink

 drivers/net/dsa/mv88e6xxx/chip.c   | 13 +++++++++++++
 drivers/net/dsa/mv88e6xxx/chip.h   |  3 +++
 drivers/net/dsa/mv88e6xxx/serdes.c | 31 +++++++++++++++++-------------
 drivers/net/dsa/mv88e6xxx/serdes.h | 13 +++++++++++++
 4 files changed, 47 insertions(+), 13 deletions(-)

diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index 6174855188d9..81fa66568e25 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -4195,6 +4195,7 @@ static const struct mv88e6xxx_ops mv88e6141_ops = {
 	.serdes_get_stats = mv88e6390_serdes_get_stats,
 	.serdes_get_regs_len = mv88e6390_serdes_get_regs_len,
 	.serdes_get_regs = mv88e6390_serdes_get_regs,
+	.serdes_read = mv88e6390_serdes_read,
 	.phylink_get_caps = mv88e6341_phylink_get_caps,
 	.pcs_ops = &mv88e6390_pcs_ops,
 };
@@ -4377,6 +4378,7 @@ static const struct mv88e6xxx_ops mv88e6172_ops = {
 	.vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
 	.stu_getnext = mv88e6352_g1_stu_getnext,
 	.stu_loadpurge = mv88e6352_g1_stu_loadpurge,
+	.serdes_read = mv88e6352_serdes_read,
 	.serdes_get_regs_len = mv88e6352_serdes_get_regs_len,
 	.serdes_get_regs = mv88e6352_serdes_get_regs,
 	.gpio_ops = &mv88e6352_gpio_ops,
@@ -4477,6 +4479,7 @@ static const struct mv88e6xxx_ops mv88e6176_ops = {
 	.vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
 	.stu_getnext = mv88e6352_g1_stu_getnext,
 	.stu_loadpurge = mv88e6352_g1_stu_loadpurge,
+	.serdes_read = mv88e6352_serdes_read,
 	.serdes_irq_mapping = mv88e6352_serdes_irq_mapping,
 	.serdes_get_regs_len = mv88e6352_serdes_get_regs_len,
 	.serdes_get_regs = mv88e6352_serdes_get_regs,
@@ -4577,6 +4580,7 @@ static const struct mv88e6xxx_ops mv88e6190_ops = {
 	.serdes_get_stats = mv88e6390_serdes_get_stats,
 	.serdes_get_regs_len = mv88e6390_serdes_get_regs_len,
 	.serdes_get_regs = mv88e6390_serdes_get_regs,
+	.serdes_read = mv88e6390_serdes_read,
 	.gpio_ops = &mv88e6352_gpio_ops,
 	.phylink_get_caps = mv88e6390_phylink_get_caps,
 	.pcs_ops = &mv88e6390_pcs_ops,
@@ -4635,6 +4639,7 @@ static const struct mv88e6xxx_ops mv88e6190x_ops = {
 	.serdes_get_stats = mv88e6390_serdes_get_stats,
 	.serdes_get_regs_len = mv88e6390_serdes_get_regs_len,
 	.serdes_get_regs = mv88e6390_serdes_get_regs,
+	.serdes_read = mv88e6390_serdes_read,
 	.gpio_ops = &mv88e6352_gpio_ops,
 	.phylink_get_caps = mv88e6390x_phylink_get_caps,
 	.pcs_ops = &mv88e6390_pcs_ops,
@@ -4691,6 +4696,7 @@ static const struct mv88e6xxx_ops mv88e6191_ops = {
 	.serdes_get_stats = mv88e6390_serdes_get_stats,
 	.serdes_get_regs_len = mv88e6390_serdes_get_regs_len,
 	.serdes_get_regs = mv88e6390_serdes_get_regs,
+	.serdes_read = mv88e6390_serdes_read,
 	.avb_ops = &mv88e6390_avb_ops,
 	.ptp_ops = &mv88e6352_ptp_ops,
 	.phylink_get_caps = mv88e6390_phylink_get_caps,
@@ -4744,6 +4750,7 @@ static const struct mv88e6xxx_ops mv88e6240_ops = {
 	.vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
 	.stu_getnext = mv88e6352_g1_stu_getnext,
 	.stu_loadpurge = mv88e6352_g1_stu_loadpurge,
+	.serdes_read = mv88e6352_serdes_read,
 	.serdes_irq_mapping = mv88e6352_serdes_irq_mapping,
 	.serdes_get_regs_len = mv88e6352_serdes_get_regs_len,
 	.serdes_get_regs = mv88e6352_serdes_get_regs,
@@ -4850,6 +4857,7 @@ static const struct mv88e6xxx_ops mv88e6290_ops = {
 	.serdes_get_stats = mv88e6390_serdes_get_stats,
 	.serdes_get_regs_len = mv88e6390_serdes_get_regs_len,
 	.serdes_get_regs = mv88e6390_serdes_get_regs,
+	.serdes_read = mv88e6390_serdes_read,
 	.gpio_ops = &mv88e6352_gpio_ops,
 	.avb_ops = &mv88e6390_avb_ops,
 	.ptp_ops = &mv88e6390_ptp_ops,
@@ -5009,6 +5017,7 @@ static const struct mv88e6xxx_ops mv88e6341_ops = {
 	.serdes_get_stats = mv88e6390_serdes_get_stats,
 	.serdes_get_regs_len = mv88e6390_serdes_get_regs_len,
 	.serdes_get_regs = mv88e6390_serdes_get_regs,
+	.serdes_read = mv88e6390_serdes_read,
 	.phylink_get_caps = mv88e6341_phylink_get_caps,
 	.pcs_ops = &mv88e6390_pcs_ops,
 };
@@ -5154,6 +5163,7 @@ static const struct mv88e6xxx_ops mv88e6352_ops = {
 	.vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
 	.stu_getnext = mv88e6352_g1_stu_getnext,
 	.stu_loadpurge = mv88e6352_g1_stu_loadpurge,
+	.serdes_read = mv88e6352_serdes_read,
 	.serdes_irq_mapping = mv88e6352_serdes_irq_mapping,
 	.gpio_ops = &mv88e6352_gpio_ops,
 	.avb_ops = &mv88e6352_avb_ops,
@@ -5226,6 +5236,7 @@ static const struct mv88e6xxx_ops mv88e6390_ops = {
 	.serdes_get_stats = mv88e6390_serdes_get_stats,
 	.serdes_get_regs_len = mv88e6390_serdes_get_regs_len,
 	.serdes_get_regs = mv88e6390_serdes_get_regs,
+	.serdes_read = mv88e6390_serdes_read,
 	.phylink_get_caps = mv88e6390_phylink_get_caps,
 	.pcs_ops = &mv88e6390_pcs_ops,
 };
@@ -5285,6 +5296,7 @@ static const struct mv88e6xxx_ops mv88e6390x_ops = {
 	.serdes_get_stats = mv88e6390_serdes_get_stats,
 	.serdes_get_regs_len = mv88e6390_serdes_get_regs_len,
 	.serdes_get_regs = mv88e6390_serdes_get_regs,
+	.serdes_read = mv88e6390_serdes_read,
 	.gpio_ops = &mv88e6352_gpio_ops,
 	.avb_ops = &mv88e6390_avb_ops,
 	.ptp_ops = &mv88e6390_ptp_ops,
@@ -5345,6 +5357,7 @@ static const struct mv88e6xxx_ops mv88e6393x_ops = {
 	.stu_loadpurge = mv88e6390_g1_stu_loadpurge,
 	.serdes_get_lane = mv88e6393x_serdes_get_lane,
 	.serdes_irq_mapping = mv88e6390_serdes_irq_mapping,
+	.serdes_read = mv88e6390_serdes_read,
 	/* TODO: serdes stats */
 	.gpio_ops = &mv88e6352_gpio_ops,
 	.avb_ops = &mv88e6390_avb_ops,
diff --git a/drivers/net/dsa/mv88e6xxx/chip.h b/drivers/net/dsa/mv88e6xxx/chip.h
index 44383a03ef2f..bbf1e7f6f343 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.h
+++ b/drivers/net/dsa/mv88e6xxx/chip.h
@@ -593,6 +593,9 @@ struct mv88e6xxx_ops {
 	/* SERDES lane mapping */
 	int (*serdes_get_lane)(struct mv88e6xxx_chip *chip, int port);
 
+	int (*serdes_read)(struct mv88e6xxx_chip *chip, int lane, int device,
+			   int reg, u16 *val);
+
 	/* SERDES interrupt handling */
 	unsigned int (*serdes_irq_mapping)(struct mv88e6xxx_chip *chip,
 					   int port);
diff --git a/drivers/net/dsa/mv88e6xxx/serdes.c b/drivers/net/dsa/mv88e6xxx/serdes.c
index 3b4b42651fa3..5696b94c9155 100644
--- a/drivers/net/dsa/mv88e6xxx/serdes.c
+++ b/drivers/net/dsa/mv88e6xxx/serdes.c
@@ -17,8 +17,8 @@
 #include "port.h"
 #include "serdes.h"
 
-static int mv88e6352_serdes_read(struct mv88e6xxx_chip *chip, int reg,
-				 u16 *val)
+int mv88e6352_serdes_read(struct mv88e6xxx_chip *chip, int lane,
+			  int device, int reg, u16 *val)
 {
 	return mv88e6xxx_phy_page_read(chip, MV88E6352_ADDR_SERDES,
 				       MV88E6352_SERDES_PAGE_FIBER,
@@ -33,8 +33,8 @@ static int mv88e6352_serdes_write(struct mv88e6xxx_chip *chip, int reg,
 					reg, val);
 }
 
-static int mv88e6390_serdes_read(struct mv88e6xxx_chip *chip,
-				 int lane, int device, int reg, u16 *val)
+int mv88e6390_serdes_read(struct mv88e6xxx_chip *chip,
+			  int lane, int device, int reg, u16 *val)
 {
 	return mv88e6xxx_phy_read_c45(chip, lane, device, reg, val);
 }
@@ -109,7 +109,6 @@ int mv88e6xxx_pcs_decode_state(struct device *dev, u16 bmsr, u16 lpa,
 
 	return 0;
 }
-
 struct mv88e6352_serdes_hw_stat {
 	char string[ETH_GSTRING_LEN];
 	int sizeof_stat;
@@ -150,14 +149,16 @@ int mv88e6352_serdes_get_strings(struct mv88e6xxx_chip *chip,
 	return ARRAY_SIZE(mv88e6352_serdes_hw_stats);
 }
 
-static uint64_t mv88e6352_serdes_get_stat(struct mv88e6xxx_chip *chip,
+static uint64_t mv88e6352_serdes_get_stat(struct mv88e6xxx_chip *chip, int port,
 					  struct mv88e6352_serdes_hw_stat *stat)
 {
 	u64 val = 0;
 	u16 reg;
 	int err;
+	int lane;
 
-	err = mv88e6352_serdes_read(chip, stat->reg, &reg);
+	lane = mv88e6xxx_serdes_get_lane(chip, port);
+	err = mv88e6xxx_serdes_read(chip, lane, 0, stat->reg, &reg);
 	if (err) {
 		dev_err(chip->dev, "failed to read statistic\n");
 		return 0;
@@ -166,7 +167,7 @@ static uint64_t mv88e6352_serdes_get_stat(struct mv88e6xxx_chip *chip,
 	val = reg;
 
 	if (stat->sizeof_stat == 32) {
-		err = mv88e6352_serdes_read(chip, stat->reg + 1, &reg);
+		err = mv88e6xxx_serdes_read(chip, lane, 0, stat->reg + 1, &reg);
 		if (err) {
 			dev_err(chip->dev, "failed to read statistic\n");
 			return 0;
@@ -194,7 +195,7 @@ int mv88e6352_serdes_get_stats(struct mv88e6xxx_chip *chip, int port,
 
 	for (i = 0; i < ARRAY_SIZE(mv88e6352_serdes_hw_stats); i++) {
 		stat = &mv88e6352_serdes_hw_stats[i];
-		value = mv88e6352_serdes_get_stat(chip, stat);
+		value = mv88e6352_serdes_get_stat(chip, port, stat);
 		mv88e6xxx_port->serdes_stats[i] += value;
 		data[i] = mv88e6xxx_port->serdes_stats[i];
 	}
@@ -226,13 +227,15 @@ void mv88e6352_serdes_get_regs(struct mv88e6xxx_chip *chip, int port, void *_p)
 	u16 reg;
 	int err;
 	int i;
+	int lane;
 
 	err = mv88e6352_g2_scratch_port_has_serdes(chip, port);
 	if (err <= 0)
 		return;
 
+	lane = mv88e6xxx_serdes_get_lane(chip, port);
 	for (i = 0 ; i < 32; i++) {
-		err = mv88e6352_serdes_read(chip, i, &reg);
+		err = mv88e6xxx_serdes_read(chip, lane, 0, i, &reg);
 		if (!err)
 			p[i] = reg;
 	}
@@ -418,7 +421,7 @@ static uint64_t mv88e6390_serdes_get_stat(struct mv88e6xxx_chip *chip, int lane,
 	int err, i;
 
 	for (i = 0; i < 3; i++) {
-		err = mv88e6390_serdes_read(chip, lane, MDIO_MMD_PHYXS,
+		err = mv88e6xxx_serdes_read(chip, lane, MDIO_MMD_PHYXS,
 					    stat->reg + i, &reg[i]);
 		if (err) {
 			dev_err(chip->dev, "failed to read statistic\n");
@@ -502,7 +505,7 @@ void mv88e6390_serdes_get_regs(struct mv88e6xxx_chip *chip, int port, void *_p)
 		return;
 
 	for (i = 0 ; i < ARRAY_SIZE(mv88e6390_serdes_regs); i++) {
-		err = mv88e6390_serdes_read(chip, lane, MDIO_MMD_PHYXS,
+		err = mv88e6xxx_serdes_read(chip, lane, MDIO_MMD_PHYXS,
 					    mv88e6390_serdes_regs[i], &reg);
 		if (!err)
 			p[i] = reg;
@@ -521,6 +524,7 @@ int mv88e6352_serdes_set_tx_amplitude(struct mv88e6xxx_chip *chip, int port,
 	u16 ctrl, reg;
 	int err;
 	int i;
+	int lane;
 
 	err = mv88e6352_g2_scratch_port_has_serdes(chip, port);
 	if (err <= 0)
@@ -537,7 +541,8 @@ int mv88e6352_serdes_set_tx_amplitude(struct mv88e6xxx_chip *chip, int port,
 	if (!found)
 		return -EINVAL;
 
-	err = mv88e6352_serdes_read(chip, MV88E6352_SERDES_SPEC_CTRL2, &ctrl);
+	lane = mv88e6xxx_serdes_get_lane(chip, port);
+	err = mv88e6xxx_serdes_read(chip, lane, 0, MV88E6352_SERDES_SPEC_CTRL2, &ctrl);
 	if (err)
 		return err;
 
diff --git a/drivers/net/dsa/mv88e6xxx/serdes.h b/drivers/net/dsa/mv88e6xxx/serdes.h
index aac95cab46e3..9b3a5ece33e7 100644
--- a/drivers/net/dsa/mv88e6xxx/serdes.h
+++ b/drivers/net/dsa/mv88e6xxx/serdes.h
@@ -120,6 +120,10 @@ int mv88e6341_serdes_get_lane(struct mv88e6xxx_chip *chip, int port);
 int mv88e6390_serdes_get_lane(struct mv88e6xxx_chip *chip, int port);
 int mv88e6390x_serdes_get_lane(struct mv88e6xxx_chip *chip, int port);
 int mv88e6393x_serdes_get_lane(struct mv88e6xxx_chip *chip, int port);
+int mv88e6352_serdes_read(struct mv88e6xxx_chip *chip, int lane, int device,
+			  int reg, u16 *val);
+int mv88e6390_serdes_read(struct mv88e6xxx_chip *chip, int lane, int device,
+			  int reg, u16 *val);
 unsigned int mv88e6352_serdes_irq_mapping(struct mv88e6xxx_chip *chip,
 					  int port);
 unsigned int mv88e6390_serdes_irq_mapping(struct mv88e6xxx_chip *chip,
@@ -153,6 +157,15 @@ static inline int mv88e6xxx_serdes_get_lane(struct mv88e6xxx_chip *chip,
 	return chip->info->ops->serdes_get_lane(chip, port);
 }
 
+static inline int mv88e6xxx_serdes_read(struct mv88e6xxx_chip *chip, int lane,
+					int device, int reg, u16 *val)
+{
+	if (!chip->info->ops->serdes_read)
+		return -EOPNOTSUPP;
+
+	return chip->info->ops->serdes_read(chip, lane, device, reg, val);
+}
+
 static inline unsigned int
 mv88e6xxx_serdes_irq_mapping(struct mv88e6xxx_chip *chip, int port)
 {
-- 
2.41.0


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH v3 2/3] net: dsa: mv88e632x: Refactor serdes write
  2023-07-18  6:59 [PATCH v3 0/3] net: dsa: SERDES support for mv88e632x family M. Haener
  2023-07-18  6:59 ` [PATCH v3 1/3] net: dsa: mv88e632x: Refactor serdes read M. Haener
@ 2023-07-18  6:59 ` M. Haener
  2023-07-18  7:30   ` Sverdlin, Alexander
  2023-07-18  6:59 ` [PATCH v3 3/3] net: dsa: mv88e632x: Add SERDES ops M. Haener
  2 siblings, 1 reply; 13+ messages in thread
From: M. Haener @ 2023-07-18  6:59 UTC (permalink / raw)
  To: netdev
  Cc: Michael Haener, linux-kernel, Andrew Lunn, Florian Fainelli,
	Vladimir Oltean, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Russell King, Alexander Sverdlin

From: Michael Haener <michael.haener@siemens.com>

To avoid code duplication, the serdes write functions
have been combined.

Signed-off-by: Michael Haener <michael.haener@siemens.com>
---
Changelog:
v3: rebased onto main branch
v2: rebased onto Russell Kings series dsa/88e6xxx/phylink

 drivers/net/dsa/mv88e6xxx/chip.c   |  4 ++++
 drivers/net/dsa/mv88e6xxx/chip.h   |  2 ++
 drivers/net/dsa/mv88e6xxx/serdes.c |  6 +++---
 drivers/net/dsa/mv88e6xxx/serdes.h | 11 +++++++++++
 4 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index 81fa66568e25..7e8aaa1383c6 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -4379,6 +4379,7 @@ static const struct mv88e6xxx_ops mv88e6172_ops = {
 	.stu_getnext = mv88e6352_g1_stu_getnext,
 	.stu_loadpurge = mv88e6352_g1_stu_loadpurge,
 	.serdes_read = mv88e6352_serdes_read,
+	.serdes_write = mv88e6352_serdes_write,
 	.serdes_get_regs_len = mv88e6352_serdes_get_regs_len,
 	.serdes_get_regs = mv88e6352_serdes_get_regs,
 	.gpio_ops = &mv88e6352_gpio_ops,
@@ -4480,6 +4481,7 @@ static const struct mv88e6xxx_ops mv88e6176_ops = {
 	.stu_getnext = mv88e6352_g1_stu_getnext,
 	.stu_loadpurge = mv88e6352_g1_stu_loadpurge,
 	.serdes_read = mv88e6352_serdes_read,
+	.serdes_write = mv88e6352_serdes_write,
 	.serdes_irq_mapping = mv88e6352_serdes_irq_mapping,
 	.serdes_get_regs_len = mv88e6352_serdes_get_regs_len,
 	.serdes_get_regs = mv88e6352_serdes_get_regs,
@@ -4751,6 +4753,7 @@ static const struct mv88e6xxx_ops mv88e6240_ops = {
 	.stu_getnext = mv88e6352_g1_stu_getnext,
 	.stu_loadpurge = mv88e6352_g1_stu_loadpurge,
 	.serdes_read = mv88e6352_serdes_read,
+	.serdes_write = mv88e6352_serdes_write,
 	.serdes_irq_mapping = mv88e6352_serdes_irq_mapping,
 	.serdes_get_regs_len = mv88e6352_serdes_get_regs_len,
 	.serdes_get_regs = mv88e6352_serdes_get_regs,
@@ -5164,6 +5167,7 @@ static const struct mv88e6xxx_ops mv88e6352_ops = {
 	.stu_getnext = mv88e6352_g1_stu_getnext,
 	.stu_loadpurge = mv88e6352_g1_stu_loadpurge,
 	.serdes_read = mv88e6352_serdes_read,
+	.serdes_write = mv88e6352_serdes_write,
 	.serdes_irq_mapping = mv88e6352_serdes_irq_mapping,
 	.gpio_ops = &mv88e6352_gpio_ops,
 	.avb_ops = &mv88e6352_avb_ops,
diff --git a/drivers/net/dsa/mv88e6xxx/chip.h b/drivers/net/dsa/mv88e6xxx/chip.h
index bbf1e7f6f343..7e9b6eb11216 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.h
+++ b/drivers/net/dsa/mv88e6xxx/chip.h
@@ -595,6 +595,8 @@ struct mv88e6xxx_ops {
 
 	int (*serdes_read)(struct mv88e6xxx_chip *chip, int lane, int device,
 			   int reg, u16 *val);
+	int (*serdes_write)(struct mv88e6xxx_chip *chip, int lane, int reg,
+			    u16 val);
 
 	/* SERDES interrupt handling */
 	unsigned int (*serdes_irq_mapping)(struct mv88e6xxx_chip *chip,
diff --git a/drivers/net/dsa/mv88e6xxx/serdes.c b/drivers/net/dsa/mv88e6xxx/serdes.c
index 5696b94c9155..b988d47ecbdd 100644
--- a/drivers/net/dsa/mv88e6xxx/serdes.c
+++ b/drivers/net/dsa/mv88e6xxx/serdes.c
@@ -25,8 +25,8 @@ int mv88e6352_serdes_read(struct mv88e6xxx_chip *chip, int lane,
 				       reg, val);
 }
 
-static int mv88e6352_serdes_write(struct mv88e6xxx_chip *chip, int reg,
-				  u16 val)
+int mv88e6352_serdes_write(struct mv88e6xxx_chip *chip, int lane, int reg,
+			   u16 val)
 {
 	return mv88e6xxx_phy_page_write(chip, MV88E6352_ADDR_SERDES,
 					MV88E6352_SERDES_PAGE_FIBER,
@@ -549,5 +549,5 @@ int mv88e6352_serdes_set_tx_amplitude(struct mv88e6xxx_chip *chip, int port,
 	ctrl &= ~MV88E6352_SERDES_OUT_AMP_MASK;
 	ctrl |= reg;
 
-	return mv88e6352_serdes_write(chip, MV88E6352_SERDES_SPEC_CTRL2, ctrl);
+	return mv88e6xxx_serdes_write(chip, lane, MV88E6352_SERDES_SPEC_CTRL2, ctrl);
 }
diff --git a/drivers/net/dsa/mv88e6xxx/serdes.h b/drivers/net/dsa/mv88e6xxx/serdes.h
index 9b3a5ece33e7..d3e83c674ef7 100644
--- a/drivers/net/dsa/mv88e6xxx/serdes.h
+++ b/drivers/net/dsa/mv88e6xxx/serdes.h
@@ -124,6 +124,8 @@ int mv88e6352_serdes_read(struct mv88e6xxx_chip *chip, int lane, int device,
 			  int reg, u16 *val);
 int mv88e6390_serdes_read(struct mv88e6xxx_chip *chip, int lane, int device,
 			  int reg, u16 *val);
+int mv88e6352_serdes_write(struct mv88e6xxx_chip *chip, int lane, int reg,
+			   u16 val);
 unsigned int mv88e6352_serdes_irq_mapping(struct mv88e6xxx_chip *chip,
 					  int port);
 unsigned int mv88e6390_serdes_irq_mapping(struct mv88e6xxx_chip *chip,
@@ -166,6 +168,15 @@ static inline int mv88e6xxx_serdes_read(struct mv88e6xxx_chip *chip, int lane,
 	return chip->info->ops->serdes_read(chip, lane, device, reg, val);
 }
 
+static inline int mv88e6xxx_serdes_write(struct mv88e6xxx_chip *chip, int lane,
+					 int reg, u16 val)
+{
+	if (!chip->info->ops->serdes_write)
+		return -EOPNOTSUPP;
+
+	return chip->info->ops->serdes_write(chip, lane, reg, val);
+}
+
 static inline unsigned int
 mv88e6xxx_serdes_irq_mapping(struct mv88e6xxx_chip *chip, int port)
 {
-- 
2.41.0


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH v3 3/3] net: dsa: mv88e632x: Add SERDES ops
  2023-07-18  6:59 [PATCH v3 0/3] net: dsa: SERDES support for mv88e632x family M. Haener
  2023-07-18  6:59 ` [PATCH v3 1/3] net: dsa: mv88e632x: Refactor serdes read M. Haener
  2023-07-18  6:59 ` [PATCH v3 2/3] net: dsa: mv88e632x: Refactor serdes write M. Haener
@ 2023-07-18  6:59 ` M. Haener
  2023-07-18  7:30   ` Sverdlin, Alexander
  2023-07-18  7:47   ` Russell King (Oracle)
  2 siblings, 2 replies; 13+ messages in thread
From: M. Haener @ 2023-07-18  6:59 UTC (permalink / raw)
  To: netdev
  Cc: Michael Haener, linux-kernel, Andrew Lunn, Florian Fainelli,
	Vladimir Oltean, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Russell King, Alexander Sverdlin

From: Michael Haener <michael.haener@siemens.com>

The 88e632x family has several SERDES 100/1000 blocks. By adding these
operations, these functionalities can be used.

Signed-off-by: Michael Haener <michael.haener@siemens.com>
---
Changelog:
v3: rebased onto main branch
v2: rebased onto Russell Kings series dsa/88e6xxx/phylink

 drivers/net/dsa/mv88e6xxx/chip.c   | 18 ++++++++++++++
 drivers/net/dsa/mv88e6xxx/serdes.c | 39 ++++++++++++++++++++++++++++++
 drivers/net/dsa/mv88e6xxx/serdes.h |  9 +++++++
 3 files changed, 66 insertions(+)

diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index 7e8aaa1383c6..4750db8f7e58 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -4909,10 +4909,19 @@ static const struct mv88e6xxx_ops mv88e6320_ops = {
 	.reset = mv88e6352_g1_reset,
 	.vtu_getnext = mv88e6185_g1_vtu_getnext,
 	.vtu_loadpurge = mv88e6185_g1_vtu_loadpurge,
+	.serdes_get_lane = mv88e6320_serdes_get_lane,
+	.serdes_read = mv88e6320_serdes_read,
+	.serdes_write = mv88e6320_serdes_write,
+	.serdes_irq_mapping = mv88e6352_serdes_irq_mapping,
 	.gpio_ops = &mv88e6352_gpio_ops,
 	.avb_ops = &mv88e6352_avb_ops,
 	.ptp_ops = &mv88e6352_ptp_ops,
 	.phylink_get_caps = mv88e6185_phylink_get_caps,
+	.serdes_get_sset_count = mv88e6352_serdes_get_sset_count,
+	.serdes_get_strings = mv88e6352_serdes_get_strings,
+	.serdes_get_stats = mv88e6352_serdes_get_stats,
+	.serdes_get_regs_len = mv88e6352_serdes_get_regs_len,
+	.serdes_get_regs = mv88e6352_serdes_get_regs,
 };
 
 static const struct mv88e6xxx_ops mv88e6321_ops = {
@@ -4955,10 +4964,19 @@ static const struct mv88e6xxx_ops mv88e6321_ops = {
 	.reset = mv88e6352_g1_reset,
 	.vtu_getnext = mv88e6185_g1_vtu_getnext,
 	.vtu_loadpurge = mv88e6185_g1_vtu_loadpurge,
+	.serdes_get_lane = mv88e6320_serdes_get_lane,
+	.serdes_read = mv88e6320_serdes_read,
+	.serdes_write = mv88e6320_serdes_write,
+	.serdes_irq_mapping = mv88e6352_serdes_irq_mapping,
 	.gpio_ops = &mv88e6352_gpio_ops,
 	.avb_ops = &mv88e6352_avb_ops,
 	.ptp_ops = &mv88e6352_ptp_ops,
 	.phylink_get_caps = mv88e6185_phylink_get_caps,
+	.serdes_get_sset_count = mv88e6352_serdes_get_sset_count,
+	.serdes_get_strings = mv88e6352_serdes_get_strings,
+	.serdes_get_stats = mv88e6352_serdes_get_stats,
+	.serdes_get_regs_len = mv88e6352_serdes_get_regs_len,
+	.serdes_get_regs = mv88e6352_serdes_get_regs,
 };
 
 static const struct mv88e6xxx_ops mv88e6341_ops = {
diff --git a/drivers/net/dsa/mv88e6xxx/serdes.c b/drivers/net/dsa/mv88e6xxx/serdes.c
index b988d47ecbdd..411fe9ac421a 100644
--- a/drivers/net/dsa/mv88e6xxx/serdes.c
+++ b/drivers/net/dsa/mv88e6xxx/serdes.c
@@ -17,6 +17,45 @@
 #include "port.h"
 #include "serdes.h"
 
+int mv88e6320_serdes_read(struct mv88e6xxx_chip *chip, int lane, int device,
+			  int reg, u16 *val)
+{
+	return mv88e6xxx_phy_page_read(chip, lane,
+				       MV88E6320_SERDES_PAGE_FIBER,
+				       reg, val);
+}
+
+int mv88e6320_serdes_write(struct mv88e6xxx_chip *chip, int lane, int reg,
+			   u16 val)
+{
+	return mv88e6xxx_phy_page_write(chip, lane,
+					MV88E6320_SERDES_PAGE_FIBER,
+					reg, val);
+}
+
+int mv88e6320_serdes_get_lane(struct mv88e6xxx_chip *chip, int port)
+{
+	u8 cmode = chip->ports[port].cmode;
+	int lane = -ENODEV;
+
+	switch (port) {
+	case 0:
+		if (cmode == MV88E6XXX_PORT_STS_CMODE_100BASEX ||
+		    cmode == MV88E6XXX_PORT_STS_CMODE_1000BASEX ||
+		    cmode == MV88E6XXX_PORT_STS_CMODE_SGMII)
+			lane = MV88E6320_PORT0_LANE;
+		break;
+	case 1:
+		if (cmode == MV88E6XXX_PORT_STS_CMODE_100BASEX ||
+		    cmode == MV88E6XXX_PORT_STS_CMODE_1000BASEX ||
+		    cmode == MV88E6XXX_PORT_STS_CMODE_SGMII)
+			lane = MV88E6320_PORT1_LANE;
+		break;
+	}
+
+	return lane;
+}
+
 int mv88e6352_serdes_read(struct mv88e6xxx_chip *chip, int lane,
 			  int device, int reg, u16 *val)
 {
diff --git a/drivers/net/dsa/mv88e6xxx/serdes.h b/drivers/net/dsa/mv88e6xxx/serdes.h
index d3e83c674ef7..9dcc9e581c05 100644
--- a/drivers/net/dsa/mv88e6xxx/serdes.h
+++ b/drivers/net/dsa/mv88e6xxx/serdes.h
@@ -14,6 +14,10 @@
 
 struct phylink_link_state;
 
+#define MV88E6320_PORT0_LANE		0x0c
+#define MV88E6320_PORT1_LANE		0x0d
+#define MV88E6320_SERDES_PAGE_FIBER	0x01
+
 #define MV88E6352_ADDR_SERDES		0x0f
 #define MV88E6352_SERDES_PAGE_FIBER	0x01
 #define MV88E6352_SERDES_IRQ		0x0b
@@ -116,14 +120,19 @@ struct phylink_link_state;
 int mv88e6xxx_pcs_decode_state(struct device *dev, u16 bmsr, u16 lpa,
 			       u16 status, struct phylink_link_state *state);
 
+int mv88e6320_serdes_get_lane(struct mv88e6xxx_chip *chip, int port);
 int mv88e6341_serdes_get_lane(struct mv88e6xxx_chip *chip, int port);
 int mv88e6390_serdes_get_lane(struct mv88e6xxx_chip *chip, int port);
 int mv88e6390x_serdes_get_lane(struct mv88e6xxx_chip *chip, int port);
 int mv88e6393x_serdes_get_lane(struct mv88e6xxx_chip *chip, int port);
+int mv88e6320_serdes_read(struct mv88e6xxx_chip *chip, int lane, int device,
+			  int reg, u16 *val);
 int mv88e6352_serdes_read(struct mv88e6xxx_chip *chip, int lane, int device,
 			  int reg, u16 *val);
 int mv88e6390_serdes_read(struct mv88e6xxx_chip *chip, int lane, int device,
 			  int reg, u16 *val);
+int mv88e6320_serdes_write(struct mv88e6xxx_chip *chip, int lane, int reg,
+			   u16 val);
 int mv88e6352_serdes_write(struct mv88e6xxx_chip *chip, int lane, int reg,
 			   u16 val);
 unsigned int mv88e6352_serdes_irq_mapping(struct mv88e6xxx_chip *chip,
-- 
2.41.0


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH v3 1/3] net: dsa: mv88e632x: Refactor serdes read
  2023-07-18  6:59 ` [PATCH v3 1/3] net: dsa: mv88e632x: Refactor serdes read M. Haener
@ 2023-07-18  7:29   ` Sverdlin, Alexander
  0 siblings, 0 replies; 13+ messages in thread
From: Sverdlin, Alexander @ 2023-07-18  7:29 UTC (permalink / raw)
  To: Haener, Michael, netdev
  Cc: andrew, olteanv, davem, linux, linux-kernel, pabeni, kuba,
	edumazet, f.fainelli

On Tue, 2023-07-18 at 08:59 +0200, M. Haener wrote:
> From: Michael Haener <michael.haener@siemens.com>
> 
> To avoid code duplication, the serdes read functions
> have been combined.
> 
> Signed-off-by: Michael Haener <michael.haener@siemens.com>

Reviewed-by: Alexander Sverdlin <alexander.sverdlin@siemens.com>

> ---
> Changelog:
> v3: rebased onto main branch
> v2: rebased onto Russell Kings series dsa/88e6xxx/phylink
> 
>  drivers/net/dsa/mv88e6xxx/chip.c   | 13 +++++++++++++
>  drivers/net/dsa/mv88e6xxx/chip.h   |  3 +++
>  drivers/net/dsa/mv88e6xxx/serdes.c | 31 +++++++++++++++++-------------
>  drivers/net/dsa/mv88e6xxx/serdes.h | 13 +++++++++++++
>  4 files changed, 47 insertions(+), 13 deletions(-)

-- 
Alexander Sverdlin
Siemens AG
www.siemens.com

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v3 2/3] net: dsa: mv88e632x: Refactor serdes write
  2023-07-18  6:59 ` [PATCH v3 2/3] net: dsa: mv88e632x: Refactor serdes write M. Haener
@ 2023-07-18  7:30   ` Sverdlin, Alexander
  0 siblings, 0 replies; 13+ messages in thread
From: Sverdlin, Alexander @ 2023-07-18  7:30 UTC (permalink / raw)
  To: Haener, Michael, netdev
  Cc: andrew, olteanv, davem, linux, linux-kernel, pabeni, kuba,
	edumazet, f.fainelli

On Tue, 2023-07-18 at 08:59 +0200, M. Haener wrote:
> From: Michael Haener <michael.haener@siemens.com>
> 
> To avoid code duplication, the serdes write functions
> have been combined.
> 
> Signed-off-by: Michael Haener <michael.haener@siemens.com>

Reviewed-by: Alexander Sverdlin <alexander.sverdlin@siemens.com>

> ---
> Changelog:
> v3: rebased onto main branch
> v2: rebased onto Russell Kings series dsa/88e6xxx/phylink
> 
>  drivers/net/dsa/mv88e6xxx/chip.c   |  4 ++++
>  drivers/net/dsa/mv88e6xxx/chip.h   |  2 ++
>  drivers/net/dsa/mv88e6xxx/serdes.c |  6 +++---
>  drivers/net/dsa/mv88e6xxx/serdes.h | 11 +++++++++++
>  4 files changed, 20 insertions(+), 3 deletions(-)

-- 
Alexander Sverdlin
Siemens AG
www.siemens.com

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v3 3/3] net: dsa: mv88e632x: Add SERDES ops
  2023-07-18  6:59 ` [PATCH v3 3/3] net: dsa: mv88e632x: Add SERDES ops M. Haener
@ 2023-07-18  7:30   ` Sverdlin, Alexander
  2023-07-18  7:47   ` Russell King (Oracle)
  1 sibling, 0 replies; 13+ messages in thread
From: Sverdlin, Alexander @ 2023-07-18  7:30 UTC (permalink / raw)
  To: Haener, Michael, netdev
  Cc: andrew, olteanv, davem, linux, linux-kernel, pabeni, kuba,
	edumazet, f.fainelli

On Tue, 2023-07-18 at 08:59 +0200, M. Haener wrote:
> From: Michael Haener <michael.haener@siemens.com>
> 
> The 88e632x family has several SERDES 100/1000 blocks. By adding these
> operations, these functionalities can be used.
> 
> Signed-off-by: Michael Haener <michael.haener@siemens.com>

Reviewed-by: Alexander Sverdlin <alexander.sverdlin@siemens.com>

> ---
> Changelog:
> v3: rebased onto main branch
> v2: rebased onto Russell Kings series dsa/88e6xxx/phylink
> 
>  drivers/net/dsa/mv88e6xxx/chip.c   | 18 ++++++++++++++
>  drivers/net/dsa/mv88e6xxx/serdes.c | 39 ++++++++++++++++++++++++++++++
>  drivers/net/dsa/mv88e6xxx/serdes.h |  9 +++++++
>  3 files changed, 66 insertions(+)

-- 
Alexander Sverdlin
Siemens AG
www.siemens.com

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v3 3/3] net: dsa: mv88e632x: Add SERDES ops
  2023-07-18  6:59 ` [PATCH v3 3/3] net: dsa: mv88e632x: Add SERDES ops M. Haener
  2023-07-18  7:30   ` Sverdlin, Alexander
@ 2023-07-18  7:47   ` Russell King (Oracle)
  2023-07-18  7:48     ` Russell King (Oracle)
  1 sibling, 1 reply; 13+ messages in thread
From: Russell King (Oracle) @ 2023-07-18  7:47 UTC (permalink / raw)
  To: M. Haener
  Cc: netdev, linux-kernel, Andrew Lunn, Florian Fainelli,
	Vladimir Oltean, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Alexander Sverdlin

On Tue, Jul 18, 2023 at 08:59:31AM +0200, M. Haener wrote:
> From: Michael Haener <michael.haener@siemens.com>
> 
> The 88e632x family has several SERDES 100/1000 blocks. By adding these
> operations, these functionalities can be used.
> 
> Signed-off-by: Michael Haener <michael.haener@siemens.com>
> ---
> Changelog:
> v3: rebased onto main branch
> v2: rebased onto Russell Kings series dsa/88e6xxx/phylink

I think you're missing something - you seem to be adding support to read
the statistics from these blocks, but you're not actually driving them
at all in terms of reading their status or configuring them.

You need to modify drivers/net/dsa/mv88e6xxx/pcs-6352.c for that.

-- 
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v3 3/3] net: dsa: mv88e632x: Add SERDES ops
  2023-07-18  7:47   ` Russell King (Oracle)
@ 2023-07-18  7:48     ` Russell King (Oracle)
  2023-07-18  8:24       ` Sverdlin, Alexander
  2023-07-18  8:24       ` Haener, Michael
  0 siblings, 2 replies; 13+ messages in thread
From: Russell King (Oracle) @ 2023-07-18  7:48 UTC (permalink / raw)
  To: M. Haener
  Cc: netdev, linux-kernel, Andrew Lunn, Florian Fainelli,
	Vladimir Oltean, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Alexander Sverdlin

On Tue, Jul 18, 2023 at 08:47:23AM +0100, Russell King (Oracle) wrote:
> On Tue, Jul 18, 2023 at 08:59:31AM +0200, M. Haener wrote:
> > From: Michael Haener <michael.haener@siemens.com>
> > 
> > The 88e632x family has several SERDES 100/1000 blocks. By adding these
> > operations, these functionalities can be used.
> > 
> > Signed-off-by: Michael Haener <michael.haener@siemens.com>
> > ---
> > Changelog:
> > v3: rebased onto main branch
> > v2: rebased onto Russell Kings series dsa/88e6xxx/phylink
> 
> I think you're missing something - you seem to be adding support to read
> the statistics from these blocks, but you're not actually driving them
> at all in terms of reading their status or configuring them.
> 
> You need to modify drivers/net/dsa/mv88e6xxx/pcs-6352.c for that.

... and this is why you need to be able to test on recent kernels!

-- 
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v3 3/3] net: dsa: mv88e632x: Add SERDES ops
  2023-07-18  7:48     ` Russell King (Oracle)
@ 2023-07-18  8:24       ` Sverdlin, Alexander
  2023-07-18  8:42         ` Russell King (Oracle)
  2023-07-18  8:24       ` Haener, Michael
  1 sibling, 1 reply; 13+ messages in thread
From: Sverdlin, Alexander @ 2023-07-18  8:24 UTC (permalink / raw)
  To: linux, Haener, Michael
  Cc: andrew, olteanv, davem, linux-kernel, f.fainelli, kuba, edumazet,
	netdev, pabeni

Hello Russell,

On Tue, 2023-07-18 at 08:48 +0100, Russell King (Oracle) wrote:
> On Tue, Jul 18, 2023 at 08:47:23AM +0100, Russell King (Oracle) wrote:
> > On Tue, Jul 18, 2023 at 08:59:31AM +0200, M. Haener wrote:
> > > From: Michael Haener <michael.haener@siemens.com>
> > > 
> > > The 88e632x family has several SERDES 100/1000 blocks. By adding these
> > > operations, these functionalities can be used.
> > > 
> > > Signed-off-by: Michael Haener <michael.haener@siemens.com>
> > > ---
> > > Changelog:
> > > v3: rebased onto main branch
> > > v2: rebased onto Russell Kings series dsa/88e6xxx/phylink
> > 
> > I think you're missing something - you seem to be adding support to read
> > the statistics from these blocks, but you're not actually driving them
> > at all in terms of reading their status or configuring them.
> > 
> > You need to modify drivers/net/dsa/mv88e6xxx/pcs-6352.c for that.
> 
> ... and this is why you need to be able to test on recent kernels!

are you absolutely sure about it?

mv88e6352_serdes_get_stats() remained in serdes.c after your rework and
as I see it, your rework is about link status, but you didn't touch
registers and statistics.

-- 
Alexander Sverdlin
Siemens AG
www.siemens.com

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v3 3/3] net: dsa: mv88e632x: Add SERDES ops
  2023-07-18  7:48     ` Russell King (Oracle)
  2023-07-18  8:24       ` Sverdlin, Alexander
@ 2023-07-18  8:24       ` Haener, Michael
  1 sibling, 0 replies; 13+ messages in thread
From: Haener, Michael @ 2023-07-18  8:24 UTC (permalink / raw)
  To: linux
  Cc: andrew, olteanv, davem, linux-kernel, f.fainelli, kuba, edumazet,
	netdev, Sverdlin, Alexander, pabeni

On Tue, 2023-07-18 at 08:48 +0100, Russell King (Oracle) wrote:
> On Tue, Jul 18, 2023 at 08:47:23AM +0100, Russell King (Oracle)
> wrote:
> > On Tue, Jul 18, 2023 at 08:59:31AM +0200, M. Haener wrote:
> > > From: Michael Haener <michael.haener@siemens.com>
> > > 
> > > The 88e632x family has several SERDES 100/1000 blocks. By adding
> > > these
> > > operations, these functionalities can be used.
> > > 
> > > Signed-off-by: Michael Haener <michael.haener@siemens.com>
> > > ---
> > > Changelog:
> > > v3: rebased onto main branch
> > > v2: rebased onto Russell Kings series dsa/88e6xxx/phylink
> > 
> > I think you're missing something - you seem to be adding support to
> > read
> > the statistics from these blocks, but you're not actually driving
> > them
> > at all in terms of reading their status or configuring them.
> > 
> > You need to modify drivers/net/dsa/mv88e6xxx/pcs-6352.c for that.
> 
> ... and this is why you need to be able to test on recent kernels!
> 
Thank you very much for your feedback.
I can assure you that we are doing our best to test with the latest
kernel. Unfortunately we can't always do this under certain
circumstances (like in this case).



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v3 3/3] net: dsa: mv88e632x: Add SERDES ops
  2023-07-18  8:24       ` Sverdlin, Alexander
@ 2023-07-18  8:42         ` Russell King (Oracle)
  2023-07-18  8:57           ` Sverdlin, Alexander
  0 siblings, 1 reply; 13+ messages in thread
From: Russell King (Oracle) @ 2023-07-18  8:42 UTC (permalink / raw)
  To: Sverdlin, Alexander
  Cc: Haener, Michael, andrew, olteanv, davem, linux-kernel,
	f.fainelli, kuba, edumazet, netdev, pabeni

On Tue, Jul 18, 2023 at 08:24:47AM +0000, Sverdlin, Alexander wrote:
> Hello Russell,
> 
> On Tue, 2023-07-18 at 08:48 +0100, Russell King (Oracle) wrote:
> > On Tue, Jul 18, 2023 at 08:47:23AM +0100, Russell King (Oracle) wrote:
> > > On Tue, Jul 18, 2023 at 08:59:31AM +0200, M. Haener wrote:
> > > > From: Michael Haener <michael.haener@siemens.com>
> > > > 
> > > > The 88e632x family has several SERDES 100/1000 blocks. By adding these
> > > > operations, these functionalities can be used.
> > > > 
> > > > Signed-off-by: Michael Haener <michael.haener@siemens.com>
> > > > ---
> > > > Changelog:
> > > > v3: rebased onto main branch
> > > > v2: rebased onto Russell Kings series dsa/88e6xxx/phylink
> > > 
> > > I think you're missing something - you seem to be adding support to read
> > > the statistics from these blocks, but you're not actually driving them
> > > at all in terms of reading their status or configuring them.
> > > 
> > > You need to modify drivers/net/dsa/mv88e6xxx/pcs-6352.c for that.
> > 
> > ... and this is why you need to be able to test on recent kernels!
> 
> are you absolutely sure about it?

Yes.

> mv88e6352_serdes_get_stats() remained in serdes.c after your rework and
> as I see it, your rework is about link status, but you didn't touch
> registers and statistics.

What I said was:

"but you're not actually driving them at all in terms of reading their
status or configuring them"

I was not commenting on obtaining statistics, but the status/control
of the blocks, which is now in the PCS drivers.

So, right now it looks to me that _all_ this series is doing is
providing support to read statistics from the PCS blocks and nothing
more, so the cover message for this series is misleading. It is not
adding support for the serdes blocks. It is only adding support for
reading statistics from the serdes blocks.

Either correct the patch series to do what the cover message says it's
doing, or change the cover message to properly describe what the series
is doing. It needs to be consistent.

-- 
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v3 3/3] net: dsa: mv88e632x: Add SERDES ops
  2023-07-18  8:42         ` Russell King (Oracle)
@ 2023-07-18  8:57           ` Sverdlin, Alexander
  0 siblings, 0 replies; 13+ messages in thread
From: Sverdlin, Alexander @ 2023-07-18  8:57 UTC (permalink / raw)
  To: linux
  Cc: andrew, olteanv, davem, linux-kernel, pabeni, f.fainelli, kuba,
	edumazet, Haener, Michael, netdev

Hi Russell,

On Tue, 2023-07-18 at 09:42 +0100, Russell King (Oracle) wrote:
> > > > You need to modify drivers/net/dsa/mv88e6xxx/pcs-6352.c for that.
> > > 
> > > ... and this is why you need to be able to test on recent kernels!
> > 
> > are you absolutely sure about it?
> 
> Yes.
> 
> > mv88e6352_serdes_get_stats() remained in serdes.c after your rework and
> > as I see it, your rework is about link status, but you didn't touch
> > registers and statistics.
> 
> What I said was:
> 
> "but you're not actually driving them at all in terms of reading their
> status or configuring them"
> 
> I was not commenting on obtaining statistics, but the status/control
> of the blocks, which is now in the PCS drivers.
> 
> So, right now it looks to me that _all_ this series is doing is
> providing support to read statistics from the PCS blocks and nothing
> more, so the cover message for this series is misleading. It is not
> adding support for the serdes blocks. It is only adding support for
> reading statistics from the serdes blocks.
> 
> Either correct the patch series to do what the cover message says it's
> doing, or change the cover message to properly describe what the series
> is doing. It needs to be consistent.

thank you, now I see it, .pcs_ops is indeed missing.
And you are right there is no way around it, we will properly port, test
and respin. 

-- 
Alexander Sverdlin
Siemens AG
www.siemens.com

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2023-07-18  8:58 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-07-18  6:59 [PATCH v3 0/3] net: dsa: SERDES support for mv88e632x family M. Haener
2023-07-18  6:59 ` [PATCH v3 1/3] net: dsa: mv88e632x: Refactor serdes read M. Haener
2023-07-18  7:29   ` Sverdlin, Alexander
2023-07-18  6:59 ` [PATCH v3 2/3] net: dsa: mv88e632x: Refactor serdes write M. Haener
2023-07-18  7:30   ` Sverdlin, Alexander
2023-07-18  6:59 ` [PATCH v3 3/3] net: dsa: mv88e632x: Add SERDES ops M. Haener
2023-07-18  7:30   ` Sverdlin, Alexander
2023-07-18  7:47   ` Russell King (Oracle)
2023-07-18  7:48     ` Russell King (Oracle)
2023-07-18  8:24       ` Sverdlin, Alexander
2023-07-18  8:42         ` Russell King (Oracle)
2023-07-18  8:57           ` Sverdlin, Alexander
2023-07-18  8:24       ` Haener, Michael

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).