Skip to content

Commit 7801edc

Browse files
vladimirolteankuba-moo
authored andcommitted
Revert "dsa: mv88e6xxx: make serdes SGMII/Fiber tx amplitude configurable"
This reverts commit 926eae6, which never could have produced the intended effect: https://lore.kernel.org/netdev/AM0PR06MB10396BBF8B568D77556FC46F8F7DEA@AM0PR06MB10396.eurprd06.prod.outlook.com/ The reason why it is broken beyond repair in this form is that the mv88e6xxx driver outsources its "tx-p2p-microvolt" property to the OF node of an external Ethernet PHY. This: (a) does not work if there is no external PHY (chip-to-chip connection, or SFP module) (b) pollutes the OF property namespace / bindings of said external PHY ("tx-p2p-microvolt" could have meaning for the Ethernet PHY's SerDes interface as well) We can revisit the idea of making SerDes amplitude configurable once we have proper bindings for the mv88e6xxx SerDes. Until then, remove the code that leaves us with unnecessary baggage. Fixes: 926eae6 ("dsa: mv88e6xxx: make serdes SGMII/Fiber tx amplitude configurable") Cc: Holger Brunck <holger.brunck@hitachienergy.com> Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Link: https://patch.msgid.link/20260104093952.486606-1-vladimir.oltean@nxp.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
1 parent 44694ff commit 7801edc

4 files changed

Lines changed: 0 additions & 78 deletions

File tree

drivers/net/dsa/mv88e6xxx/chip.c

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3364,13 +3364,10 @@ static int mv88e6xxx_setup_upstream_port(struct mv88e6xxx_chip *chip, int port)
33643364

33653365
static int mv88e6xxx_setup_port(struct mv88e6xxx_chip *chip, int port)
33663366
{
3367-
struct device_node *phy_handle = NULL;
33683367
struct fwnode_handle *ports_fwnode;
33693368
struct fwnode_handle *port_fwnode;
33703369
struct dsa_switch *ds = chip->ds;
33713370
struct mv88e6xxx_port *p;
3372-
struct dsa_port *dp;
3373-
int tx_amp;
33743371
int err;
33753372
u16 reg;
33763373
u32 val;
@@ -3582,23 +3579,6 @@ static int mv88e6xxx_setup_port(struct mv88e6xxx_chip *chip, int port)
35823579
return err;
35833580
}
35843581

3585-
if (chip->info->ops->serdes_set_tx_amplitude) {
3586-
dp = dsa_to_port(ds, port);
3587-
if (dp)
3588-
phy_handle = of_parse_phandle(dp->dn, "phy-handle", 0);
3589-
3590-
if (phy_handle && !of_property_read_u32(phy_handle,
3591-
"tx-p2p-microvolt",
3592-
&tx_amp))
3593-
err = chip->info->ops->serdes_set_tx_amplitude(chip,
3594-
port, tx_amp);
3595-
if (phy_handle) {
3596-
of_node_put(phy_handle);
3597-
if (err)
3598-
return err;
3599-
}
3600-
}
3601-
36023582
/* Port based VLAN map: give each port the same default address
36033583
* database, and allow bidirectional communication between the
36043584
* CPU and DSA port(s), and the other ports.
@@ -4768,7 +4748,6 @@ static const struct mv88e6xxx_ops mv88e6176_ops = {
47684748
.serdes_irq_mapping = mv88e6352_serdes_irq_mapping,
47694749
.serdes_get_regs_len = mv88e6352_serdes_get_regs_len,
47704750
.serdes_get_regs = mv88e6352_serdes_get_regs,
4771-
.serdes_set_tx_amplitude = mv88e6352_serdes_set_tx_amplitude,
47724751
.gpio_ops = &mv88e6352_gpio_ops,
47734752
.phylink_get_caps = mv88e6352_phylink_get_caps,
47744753
.pcs_ops = &mv88e6352_pcs_ops,
@@ -5044,7 +5023,6 @@ static const struct mv88e6xxx_ops mv88e6240_ops = {
50445023
.serdes_irq_mapping = mv88e6352_serdes_irq_mapping,
50455024
.serdes_get_regs_len = mv88e6352_serdes_get_regs_len,
50465025
.serdes_get_regs = mv88e6352_serdes_get_regs,
5047-
.serdes_set_tx_amplitude = mv88e6352_serdes_set_tx_amplitude,
50485026
.gpio_ops = &mv88e6352_gpio_ops,
50495027
.avb_ops = &mv88e6352_avb_ops,
50505028
.ptp_ops = &mv88e6352_ptp_ops,
@@ -5481,7 +5459,6 @@ static const struct mv88e6xxx_ops mv88e6352_ops = {
54815459
.serdes_get_stats = mv88e6352_serdes_get_stats,
54825460
.serdes_get_regs_len = mv88e6352_serdes_get_regs_len,
54835461
.serdes_get_regs = mv88e6352_serdes_get_regs,
5484-
.serdes_set_tx_amplitude = mv88e6352_serdes_set_tx_amplitude,
54855462
.phylink_get_caps = mv88e6352_phylink_get_caps,
54865463
.pcs_ops = &mv88e6352_pcs_ops,
54875464
};

drivers/net/dsa/mv88e6xxx/chip.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -642,10 +642,6 @@ struct mv88e6xxx_ops {
642642
void (*serdes_get_regs)(struct mv88e6xxx_chip *chip, int port,
643643
void *_p);
644644

645-
/* SERDES SGMII/Fiber Output Amplitude */
646-
int (*serdes_set_tx_amplitude)(struct mv88e6xxx_chip *chip, int port,
647-
int val);
648-
649645
/* Address Translation Unit operations */
650646
int (*atu_get_hash)(struct mv88e6xxx_chip *chip, u8 *hash);
651647
int (*atu_set_hash)(struct mv88e6xxx_chip *chip, u8 hash);

drivers/net/dsa/mv88e6xxx/serdes.c

Lines changed: 0 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,6 @@ static int mv88e6352_serdes_read(struct mv88e6xxx_chip *chip, int reg,
2525
reg, val);
2626
}
2727

28-
static int mv88e6352_serdes_write(struct mv88e6xxx_chip *chip, int reg,
29-
u16 val)
30-
{
31-
return mv88e6xxx_phy_page_write(chip, MV88E6352_ADDR_SERDES,
32-
MV88E6352_SERDES_PAGE_FIBER,
33-
reg, val);
34-
}
35-
3628
static int mv88e6390_serdes_read(struct mv88e6xxx_chip *chip,
3729
int lane, int device, int reg, u16 *val)
3830
{
@@ -506,41 +498,3 @@ void mv88e6390_serdes_get_regs(struct mv88e6xxx_chip *chip, int port, void *_p)
506498
p[i] = reg;
507499
}
508500
}
509-
510-
static const int mv88e6352_serdes_p2p_to_reg[] = {
511-
/* Index of value in microvolts corresponds to the register value */
512-
14000, 112000, 210000, 308000, 406000, 504000, 602000, 700000,
513-
};
514-
515-
int mv88e6352_serdes_set_tx_amplitude(struct mv88e6xxx_chip *chip, int port,
516-
int val)
517-
{
518-
bool found = false;
519-
u16 ctrl, reg;
520-
int err;
521-
int i;
522-
523-
err = mv88e6352_g2_scratch_port_has_serdes(chip, port);
524-
if (err <= 0)
525-
return err;
526-
527-
for (i = 0; i < ARRAY_SIZE(mv88e6352_serdes_p2p_to_reg); ++i) {
528-
if (mv88e6352_serdes_p2p_to_reg[i] == val) {
529-
reg = i;
530-
found = true;
531-
break;
532-
}
533-
}
534-
535-
if (!found)
536-
return -EINVAL;
537-
538-
err = mv88e6352_serdes_read(chip, MV88E6352_SERDES_SPEC_CTRL2, &ctrl);
539-
if (err)
540-
return err;
541-
542-
ctrl &= ~MV88E6352_SERDES_OUT_AMP_MASK;
543-
ctrl |= reg;
544-
545-
return mv88e6352_serdes_write(chip, MV88E6352_SERDES_SPEC_CTRL2, ctrl);
546-
}

drivers/net/dsa/mv88e6xxx/serdes.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@ struct phylink_link_state;
2929
#define MV88E6352_SERDES_INT_FIBRE_ENERGY BIT(4)
3030
#define MV88E6352_SERDES_INT_STATUS 0x13
3131

32-
#define MV88E6352_SERDES_SPEC_CTRL2 0x1a
33-
#define MV88E6352_SERDES_OUT_AMP_MASK 0x0007
3432

3533
#define MV88E6341_PORT5_LANE 0x15
3634

@@ -140,9 +138,6 @@ void mv88e6352_serdes_get_regs(struct mv88e6xxx_chip *chip, int port, void *_p);
140138
int mv88e6390_serdes_get_regs_len(struct mv88e6xxx_chip *chip, int port);
141139
void mv88e6390_serdes_get_regs(struct mv88e6xxx_chip *chip, int port, void *_p);
142140

143-
int mv88e6352_serdes_set_tx_amplitude(struct mv88e6xxx_chip *chip, int port,
144-
int val);
145-
146141
/* Return the (first) SERDES lane address a port is using, -errno otherwise. */
147142
static inline int mv88e6xxx_serdes_get_lane(struct mv88e6xxx_chip *chip,
148143
int port)

0 commit comments

Comments
 (0)