mirror of
https://github.com/armbian/linux-cix.git
synced 2026-01-06 12:30:45 -08:00
net: dsa: mv88e6xxx: convert 88e639x to phylink_pcs
Convert the 88E6390, 88E6390X, and 88E6393X family of switches to use the phylink_pcs infrastructure. Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
8576455544
commit
e5b732a275
@@ -11,6 +11,7 @@ mv88e6xxx-objs += global2_scratch.o
|
||||
mv88e6xxx-$(CONFIG_NET_DSA_MV88E6XXX_PTP) += hwtstamp.o
|
||||
mv88e6xxx-objs += pcs-6185.o
|
||||
mv88e6xxx-objs += pcs-6352.o
|
||||
mv88e6xxx-objs += pcs-639x.o
|
||||
mv88e6xxx-objs += phy.o
|
||||
mv88e6xxx-objs += port.o
|
||||
mv88e6xxx-objs += port_hidden.o
|
||||
|
||||
@@ -4417,16 +4417,8 @@ static const struct mv88e6xxx_ops mv88e6141_ops = {
|
||||
.vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
|
||||
.stu_getnext = mv88e6352_g1_stu_getnext,
|
||||
.stu_loadpurge = mv88e6352_g1_stu_loadpurge,
|
||||
.serdes_power = mv88e6390_serdes_power,
|
||||
.serdes_get_lane = mv88e6341_serdes_get_lane,
|
||||
/* Check status register pause & lpa register */
|
||||
.serdes_pcs_get_state = mv88e6390_serdes_pcs_get_state,
|
||||
.serdes_pcs_config = mv88e6390_serdes_pcs_config,
|
||||
.serdes_pcs_an_restart = mv88e6390_serdes_pcs_an_restart,
|
||||
.serdes_pcs_link_up = mv88e6390_serdes_pcs_link_up,
|
||||
.serdes_irq_mapping = mv88e6390_serdes_irq_mapping,
|
||||
.serdes_irq_enable = mv88e6390_serdes_irq_enable,
|
||||
.serdes_irq_status = mv88e6390_serdes_irq_status,
|
||||
.gpio_ops = &mv88e6352_gpio_ops,
|
||||
.serdes_get_sset_count = mv88e6390_serdes_get_sset_count,
|
||||
.serdes_get_strings = mv88e6390_serdes_get_strings,
|
||||
@@ -4434,6 +4426,7 @@ static const struct mv88e6xxx_ops mv88e6141_ops = {
|
||||
.serdes_get_regs_len = mv88e6390_serdes_get_regs_len,
|
||||
.serdes_get_regs = mv88e6390_serdes_get_regs,
|
||||
.phylink_get_caps = mv88e6341_phylink_get_caps,
|
||||
.pcs_ops = &mv88e6390_pcs_ops,
|
||||
};
|
||||
|
||||
static const struct mv88e6xxx_ops mv88e6161_ops = {
|
||||
@@ -4808,22 +4801,15 @@ static const struct mv88e6xxx_ops mv88e6190_ops = {
|
||||
.vtu_loadpurge = mv88e6390_g1_vtu_loadpurge,
|
||||
.stu_getnext = mv88e6390_g1_stu_getnext,
|
||||
.stu_loadpurge = mv88e6390_g1_stu_loadpurge,
|
||||
.serdes_power = mv88e6390_serdes_power,
|
||||
.serdes_get_lane = mv88e6390_serdes_get_lane,
|
||||
/* Check status register pause & lpa register */
|
||||
.serdes_pcs_get_state = mv88e6390_serdes_pcs_get_state,
|
||||
.serdes_pcs_config = mv88e6390_serdes_pcs_config,
|
||||
.serdes_pcs_an_restart = mv88e6390_serdes_pcs_an_restart,
|
||||
.serdes_pcs_link_up = mv88e6390_serdes_pcs_link_up,
|
||||
.serdes_irq_mapping = mv88e6390_serdes_irq_mapping,
|
||||
.serdes_irq_enable = mv88e6390_serdes_irq_enable,
|
||||
.serdes_irq_status = mv88e6390_serdes_irq_status,
|
||||
.serdes_get_strings = mv88e6390_serdes_get_strings,
|
||||
.serdes_get_stats = mv88e6390_serdes_get_stats,
|
||||
.serdes_get_regs_len = mv88e6390_serdes_get_regs_len,
|
||||
.serdes_get_regs = mv88e6390_serdes_get_regs,
|
||||
.gpio_ops = &mv88e6352_gpio_ops,
|
||||
.phylink_get_caps = mv88e6390_phylink_get_caps,
|
||||
.pcs_ops = &mv88e6390_pcs_ops,
|
||||
};
|
||||
|
||||
static const struct mv88e6xxx_ops mv88e6190x_ops = {
|
||||
@@ -4873,22 +4859,15 @@ static const struct mv88e6xxx_ops mv88e6190x_ops = {
|
||||
.vtu_loadpurge = mv88e6390_g1_vtu_loadpurge,
|
||||
.stu_getnext = mv88e6390_g1_stu_getnext,
|
||||
.stu_loadpurge = mv88e6390_g1_stu_loadpurge,
|
||||
.serdes_power = mv88e6390_serdes_power,
|
||||
.serdes_get_lane = mv88e6390x_serdes_get_lane,
|
||||
/* Check status register pause & lpa register */
|
||||
.serdes_pcs_get_state = mv88e6390_serdes_pcs_get_state,
|
||||
.serdes_pcs_config = mv88e6390_serdes_pcs_config,
|
||||
.serdes_pcs_an_restart = mv88e6390_serdes_pcs_an_restart,
|
||||
.serdes_pcs_link_up = mv88e6390_serdes_pcs_link_up,
|
||||
.serdes_irq_mapping = mv88e6390_serdes_irq_mapping,
|
||||
.serdes_irq_enable = mv88e6390_serdes_irq_enable,
|
||||
.serdes_irq_status = mv88e6390_serdes_irq_status,
|
||||
.serdes_get_strings = mv88e6390_serdes_get_strings,
|
||||
.serdes_get_stats = mv88e6390_serdes_get_stats,
|
||||
.serdes_get_regs_len = mv88e6390_serdes_get_regs_len,
|
||||
.serdes_get_regs = mv88e6390_serdes_get_regs,
|
||||
.gpio_ops = &mv88e6352_gpio_ops,
|
||||
.phylink_get_caps = mv88e6390x_phylink_get_caps,
|
||||
.pcs_ops = &mv88e6390_pcs_ops,
|
||||
};
|
||||
|
||||
static const struct mv88e6xxx_ops mv88e6191_ops = {
|
||||
@@ -4936,16 +4915,8 @@ static const struct mv88e6xxx_ops mv88e6191_ops = {
|
||||
.vtu_loadpurge = mv88e6390_g1_vtu_loadpurge,
|
||||
.stu_getnext = mv88e6390_g1_stu_getnext,
|
||||
.stu_loadpurge = mv88e6390_g1_stu_loadpurge,
|
||||
.serdes_power = mv88e6390_serdes_power,
|
||||
.serdes_get_lane = mv88e6390_serdes_get_lane,
|
||||
/* Check status register pause & lpa register */
|
||||
.serdes_pcs_get_state = mv88e6390_serdes_pcs_get_state,
|
||||
.serdes_pcs_config = mv88e6390_serdes_pcs_config,
|
||||
.serdes_pcs_an_restart = mv88e6390_serdes_pcs_an_restart,
|
||||
.serdes_pcs_link_up = mv88e6390_serdes_pcs_link_up,
|
||||
.serdes_irq_mapping = mv88e6390_serdes_irq_mapping,
|
||||
.serdes_irq_enable = mv88e6390_serdes_irq_enable,
|
||||
.serdes_irq_status = mv88e6390_serdes_irq_status,
|
||||
.serdes_get_strings = mv88e6390_serdes_get_strings,
|
||||
.serdes_get_stats = mv88e6390_serdes_get_stats,
|
||||
.serdes_get_regs_len = mv88e6390_serdes_get_regs_len,
|
||||
@@ -4953,6 +4924,7 @@ static const struct mv88e6xxx_ops mv88e6191_ops = {
|
||||
.avb_ops = &mv88e6390_avb_ops,
|
||||
.ptp_ops = &mv88e6352_ptp_ops,
|
||||
.phylink_get_caps = mv88e6390_phylink_get_caps,
|
||||
.pcs_ops = &mv88e6390_pcs_ops,
|
||||
};
|
||||
|
||||
static const struct mv88e6xxx_ops mv88e6240_ops = {
|
||||
@@ -5102,16 +5074,8 @@ static const struct mv88e6xxx_ops mv88e6290_ops = {
|
||||
.vtu_loadpurge = mv88e6390_g1_vtu_loadpurge,
|
||||
.stu_getnext = mv88e6390_g1_stu_getnext,
|
||||
.stu_loadpurge = mv88e6390_g1_stu_loadpurge,
|
||||
.serdes_power = mv88e6390_serdes_power,
|
||||
.serdes_get_lane = mv88e6390_serdes_get_lane,
|
||||
/* Check status register pause & lpa register */
|
||||
.serdes_pcs_get_state = mv88e6390_serdes_pcs_get_state,
|
||||
.serdes_pcs_config = mv88e6390_serdes_pcs_config,
|
||||
.serdes_pcs_an_restart = mv88e6390_serdes_pcs_an_restart,
|
||||
.serdes_pcs_link_up = mv88e6390_serdes_pcs_link_up,
|
||||
.serdes_irq_mapping = mv88e6390_serdes_irq_mapping,
|
||||
.serdes_irq_enable = mv88e6390_serdes_irq_enable,
|
||||
.serdes_irq_status = mv88e6390_serdes_irq_status,
|
||||
.serdes_get_strings = mv88e6390_serdes_get_strings,
|
||||
.serdes_get_stats = mv88e6390_serdes_get_stats,
|
||||
.serdes_get_regs_len = mv88e6390_serdes_get_regs_len,
|
||||
@@ -5120,6 +5084,7 @@ static const struct mv88e6xxx_ops mv88e6290_ops = {
|
||||
.avb_ops = &mv88e6390_avb_ops,
|
||||
.ptp_ops = &mv88e6390_ptp_ops,
|
||||
.phylink_get_caps = mv88e6390_phylink_get_caps,
|
||||
.pcs_ops = &mv88e6390_pcs_ops,
|
||||
};
|
||||
|
||||
static const struct mv88e6xxx_ops mv88e6320_ops = {
|
||||
@@ -5264,16 +5229,8 @@ static const struct mv88e6xxx_ops mv88e6341_ops = {
|
||||
.vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
|
||||
.stu_getnext = mv88e6352_g1_stu_getnext,
|
||||
.stu_loadpurge = mv88e6352_g1_stu_loadpurge,
|
||||
.serdes_power = mv88e6390_serdes_power,
|
||||
.serdes_get_lane = mv88e6341_serdes_get_lane,
|
||||
/* Check status register pause & lpa register */
|
||||
.serdes_pcs_get_state = mv88e6390_serdes_pcs_get_state,
|
||||
.serdes_pcs_config = mv88e6390_serdes_pcs_config,
|
||||
.serdes_pcs_an_restart = mv88e6390_serdes_pcs_an_restart,
|
||||
.serdes_pcs_link_up = mv88e6390_serdes_pcs_link_up,
|
||||
.serdes_irq_mapping = mv88e6390_serdes_irq_mapping,
|
||||
.serdes_irq_enable = mv88e6390_serdes_irq_enable,
|
||||
.serdes_irq_status = mv88e6390_serdes_irq_status,
|
||||
.gpio_ops = &mv88e6352_gpio_ops,
|
||||
.avb_ops = &mv88e6390_avb_ops,
|
||||
.ptp_ops = &mv88e6352_ptp_ops,
|
||||
@@ -5283,6 +5240,7 @@ static const struct mv88e6xxx_ops mv88e6341_ops = {
|
||||
.serdes_get_regs_len = mv88e6390_serdes_get_regs_len,
|
||||
.serdes_get_regs = mv88e6390_serdes_get_regs,
|
||||
.phylink_get_caps = mv88e6341_phylink_get_caps,
|
||||
.pcs_ops = &mv88e6390_pcs_ops,
|
||||
};
|
||||
|
||||
static const struct mv88e6xxx_ops mv88e6350_ops = {
|
||||
@@ -5488,16 +5446,8 @@ static const struct mv88e6xxx_ops mv88e6390_ops = {
|
||||
.vtu_loadpurge = mv88e6390_g1_vtu_loadpurge,
|
||||
.stu_getnext = mv88e6390_g1_stu_getnext,
|
||||
.stu_loadpurge = mv88e6390_g1_stu_loadpurge,
|
||||
.serdes_power = mv88e6390_serdes_power,
|
||||
.serdes_get_lane = mv88e6390_serdes_get_lane,
|
||||
/* Check status register pause & lpa register */
|
||||
.serdes_pcs_get_state = mv88e6390_serdes_pcs_get_state,
|
||||
.serdes_pcs_config = mv88e6390_serdes_pcs_config,
|
||||
.serdes_pcs_an_restart = mv88e6390_serdes_pcs_an_restart,
|
||||
.serdes_pcs_link_up = mv88e6390_serdes_pcs_link_up,
|
||||
.serdes_irq_mapping = mv88e6390_serdes_irq_mapping,
|
||||
.serdes_irq_enable = mv88e6390_serdes_irq_enable,
|
||||
.serdes_irq_status = mv88e6390_serdes_irq_status,
|
||||
.gpio_ops = &mv88e6352_gpio_ops,
|
||||
.avb_ops = &mv88e6390_avb_ops,
|
||||
.ptp_ops = &mv88e6390_ptp_ops,
|
||||
@@ -5507,6 +5457,7 @@ static const struct mv88e6xxx_ops mv88e6390_ops = {
|
||||
.serdes_get_regs_len = mv88e6390_serdes_get_regs_len,
|
||||
.serdes_get_regs = mv88e6390_serdes_get_regs,
|
||||
.phylink_get_caps = mv88e6390_phylink_get_caps,
|
||||
.pcs_ops = &mv88e6390_pcs_ops,
|
||||
};
|
||||
|
||||
static const struct mv88e6xxx_ops mv88e6390x_ops = {
|
||||
@@ -5557,15 +5508,8 @@ static const struct mv88e6xxx_ops mv88e6390x_ops = {
|
||||
.vtu_loadpurge = mv88e6390_g1_vtu_loadpurge,
|
||||
.stu_getnext = mv88e6390_g1_stu_getnext,
|
||||
.stu_loadpurge = mv88e6390_g1_stu_loadpurge,
|
||||
.serdes_power = mv88e6390_serdes_power,
|
||||
.serdes_get_lane = mv88e6390x_serdes_get_lane,
|
||||
.serdes_pcs_get_state = mv88e6390_serdes_pcs_get_state,
|
||||
.serdes_pcs_config = mv88e6390_serdes_pcs_config,
|
||||
.serdes_pcs_an_restart = mv88e6390_serdes_pcs_an_restart,
|
||||
.serdes_pcs_link_up = mv88e6390_serdes_pcs_link_up,
|
||||
.serdes_irq_mapping = mv88e6390_serdes_irq_mapping,
|
||||
.serdes_irq_enable = mv88e6390_serdes_irq_enable,
|
||||
.serdes_irq_status = mv88e6390_serdes_irq_status,
|
||||
.serdes_get_sset_count = mv88e6390_serdes_get_sset_count,
|
||||
.serdes_get_strings = mv88e6390_serdes_get_strings,
|
||||
.serdes_get_stats = mv88e6390_serdes_get_stats,
|
||||
@@ -5575,11 +5519,11 @@ static const struct mv88e6xxx_ops mv88e6390x_ops = {
|
||||
.avb_ops = &mv88e6390_avb_ops,
|
||||
.ptp_ops = &mv88e6390_ptp_ops,
|
||||
.phylink_get_caps = mv88e6390x_phylink_get_caps,
|
||||
.pcs_ops = &mv88e6390_pcs_ops,
|
||||
};
|
||||
|
||||
static const struct mv88e6xxx_ops mv88e6393x_ops = {
|
||||
/* MV88E6XXX_FAMILY_6393 */
|
||||
.setup_errata = mv88e6393x_serdes_setup_errata,
|
||||
.irl_init_all = mv88e6390_g2_irl_init_all,
|
||||
.get_eeprom = mv88e6xxx_g2_get_eeprom8,
|
||||
.set_eeprom = mv88e6xxx_g2_set_eeprom8,
|
||||
@@ -5629,20 +5573,14 @@ static const struct mv88e6xxx_ops mv88e6393x_ops = {
|
||||
.vtu_loadpurge = mv88e6390_g1_vtu_loadpurge,
|
||||
.stu_getnext = mv88e6390_g1_stu_getnext,
|
||||
.stu_loadpurge = mv88e6390_g1_stu_loadpurge,
|
||||
.serdes_power = mv88e6393x_serdes_power,
|
||||
.serdes_get_lane = mv88e6393x_serdes_get_lane,
|
||||
.serdes_pcs_get_state = mv88e6393x_serdes_pcs_get_state,
|
||||
.serdes_pcs_config = mv88e6390_serdes_pcs_config,
|
||||
.serdes_pcs_an_restart = mv88e6390_serdes_pcs_an_restart,
|
||||
.serdes_pcs_link_up = mv88e6390_serdes_pcs_link_up,
|
||||
.serdes_irq_mapping = mv88e6390_serdes_irq_mapping,
|
||||
.serdes_irq_enable = mv88e6393x_serdes_irq_enable,
|
||||
.serdes_irq_status = mv88e6393x_serdes_irq_status,
|
||||
/* TODO: serdes stats */
|
||||
.gpio_ops = &mv88e6352_gpio_ops,
|
||||
.avb_ops = &mv88e6390_avb_ops,
|
||||
.ptp_ops = &mv88e6352_ptp_ops,
|
||||
.phylink_get_caps = mv88e6393x_phylink_get_caps,
|
||||
.pcs_ops = &mv88e6393x_pcs_ops,
|
||||
};
|
||||
|
||||
static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|
||||
|
||||
898
drivers/net/dsa/mv88e6xxx/pcs-639x.c
Normal file
898
drivers/net/dsa/mv88e6xxx/pcs-639x.c
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -46,6 +46,10 @@ struct phylink_link_state;
|
||||
/* 10GBASE-R and 10GBASE-X4/X2 */
|
||||
#define MV88E6390_10G_CTRL1 (0x1000 + MDIO_CTRL1)
|
||||
#define MV88E6390_10G_STAT1 (0x1000 + MDIO_STAT1)
|
||||
#define MV88E6390_10G_INT_ENABLE 0x9001
|
||||
#define MV88E6390_10G_INT_LINK_DOWN BIT(3)
|
||||
#define MV88E6390_10G_INT_LINK_UP BIT(2)
|
||||
#define MV88E6390_10G_INT_STATUS 0x9003
|
||||
#define MV88E6393X_10G_INT_ENABLE 0x9000
|
||||
#define MV88E6393X_10G_INT_LINK_CHANGE BIT(2)
|
||||
#define MV88E6393X_10G_INT_STATUS 0x9001
|
||||
@@ -116,35 +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 mv88e6390_serdes_pcs_config(struct mv88e6xxx_chip *chip, int port,
|
||||
int lane, unsigned int mode,
|
||||
phy_interface_t interface,
|
||||
const unsigned long *advertise);
|
||||
int mv88e6390_serdes_pcs_get_state(struct mv88e6xxx_chip *chip, int port,
|
||||
int lane, struct phylink_link_state *state);
|
||||
int mv88e6393x_serdes_pcs_get_state(struct mv88e6xxx_chip *chip, int port,
|
||||
int lane, struct phylink_link_state *state);
|
||||
int mv88e6390_serdes_pcs_an_restart(struct mv88e6xxx_chip *chip, int port,
|
||||
int lane);
|
||||
int mv88e6390_serdes_pcs_link_up(struct mv88e6xxx_chip *chip, int port,
|
||||
int lane, int speed, int duplex);
|
||||
unsigned int mv88e6352_serdes_irq_mapping(struct mv88e6xxx_chip *chip,
|
||||
int port);
|
||||
unsigned int mv88e6390_serdes_irq_mapping(struct mv88e6xxx_chip *chip,
|
||||
int port);
|
||||
int mv88e6390_serdes_power(struct mv88e6xxx_chip *chip, int port, int lane,
|
||||
bool on);
|
||||
int mv88e6393x_serdes_power(struct mv88e6xxx_chip *chip, int port, int lane,
|
||||
bool on);
|
||||
int mv88e6393x_serdes_setup_errata(struct mv88e6xxx_chip *chip);
|
||||
int mv88e6390_serdes_irq_enable(struct mv88e6xxx_chip *chip, int port, int lane,
|
||||
bool enable);
|
||||
int mv88e6393x_serdes_irq_enable(struct mv88e6xxx_chip *chip, int port,
|
||||
int lane, bool enable);
|
||||
irqreturn_t mv88e6390_serdes_irq_status(struct mv88e6xxx_chip *chip, int port,
|
||||
int lane);
|
||||
irqreturn_t mv88e6393x_serdes_irq_status(struct mv88e6xxx_chip *chip, int port,
|
||||
int lane);
|
||||
int mv88e6352_serdes_get_sset_count(struct mv88e6xxx_chip *chip, int port);
|
||||
int mv88e6352_serdes_get_strings(struct mv88e6xxx_chip *chip,
|
||||
int port, uint8_t *data);
|
||||
@@ -230,5 +209,7 @@ mv88e6xxx_serdes_irq_status(struct mv88e6xxx_chip *chip, int port, int lane)
|
||||
|
||||
extern const struct mv88e6xxx_pcs_ops mv88e6185_pcs_ops;
|
||||
extern const struct mv88e6xxx_pcs_ops mv88e6352_pcs_ops;
|
||||
extern const struct mv88e6xxx_pcs_ops mv88e6390_pcs_ops;
|
||||
extern const struct mv88e6xxx_pcs_ops mv88e6393x_pcs_ops;
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user