60 lines
2.1 KiB
Diff
60 lines
2.1 KiB
Diff
From bde018222c6b084ac32933a9f933581dd83da18e Mon Sep 17 00:00:00 2001
|
|
From: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>
|
|
Date: Thu, 17 Feb 2022 18:30:35 +0000
|
|
Subject: [PATCH] net: dsa: add support for phylink mac_select_pcs()
|
|
|
|
Add DSA support for the phylink mac_select_pcs() method so DSA drivers
|
|
can return provide phylink with the appropriate PCS for the PHY
|
|
interface mode.
|
|
|
|
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
|
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
---
|
|
include/net/dsa.h | 3 +++
|
|
net/dsa/port.c | 15 +++++++++++++++
|
|
2 files changed, 18 insertions(+)
|
|
|
|
--- a/include/net/dsa.h
|
|
+++ b/include/net/dsa.h
|
|
@@ -631,6 +631,9 @@ struct dsa_switch_ops {
|
|
void (*phylink_validate)(struct dsa_switch *ds, int port,
|
|
unsigned long *supported,
|
|
struct phylink_link_state *state);
|
|
+ struct phylink_pcs *(*phylink_mac_select_pcs)(struct dsa_switch *ds,
|
|
+ int port,
|
|
+ phy_interface_t iface);
|
|
int (*phylink_mac_link_state)(struct dsa_switch *ds, int port,
|
|
struct phylink_link_state *state);
|
|
void (*phylink_mac_config)(struct dsa_switch *ds, int port,
|
|
--- a/net/dsa/port.c
|
|
+++ b/net/dsa/port.c
|
|
@@ -1028,6 +1028,20 @@ static void dsa_port_phylink_mac_pcs_get
|
|
}
|
|
}
|
|
|
|
+static struct phylink_pcs *
|
|
+dsa_port_phylink_mac_select_pcs(struct phylink_config *config,
|
|
+ phy_interface_t interface)
|
|
+{
|
|
+ struct dsa_port *dp = container_of(config, struct dsa_port, pl_config);
|
|
+ struct dsa_switch *ds = dp->ds;
|
|
+ struct phylink_pcs *pcs = NULL;
|
|
+
|
|
+ if (ds->ops->phylink_mac_select_pcs)
|
|
+ pcs = ds->ops->phylink_mac_select_pcs(ds, dp->index, interface);
|
|
+
|
|
+ return pcs;
|
|
+}
|
|
+
|
|
static void dsa_port_phylink_mac_config(struct phylink_config *config,
|
|
unsigned int mode,
|
|
const struct phylink_link_state *state)
|
|
@@ -1094,6 +1108,7 @@ static void dsa_port_phylink_mac_link_up
|
|
|
|
static const struct phylink_mac_ops dsa_port_phylink_mac_ops = {
|
|
.validate = dsa_port_phylink_validate,
|
|
+ .mac_select_pcs = dsa_port_phylink_mac_select_pcs,
|
|
.mac_pcs_get_state = dsa_port_phylink_mac_pcs_get_state,
|
|
.mac_config = dsa_port_phylink_mac_config,
|
|
.mac_an_restart = dsa_port_phylink_mac_an_restart,
|