* [PATCH net-next v1 0/5] Side MDIO Support for LAN937x Switches
@ 2024-10-26 6:35 Oleksij Rempel
2024-10-26 6:35 ` [PATCH net-next v1 1/5] dt-bindings: net: dsa: ksz: add internal MDIO bus description Oleksij Rempel
` (4 more replies)
0 siblings, 5 replies; 16+ messages in thread
From: Oleksij Rempel @ 2024-10-26 6:35 UTC (permalink / raw)
To: David S. Miller, Andrew Lunn, Eric Dumazet, Florian Fainelli,
Jakub Kicinski, Paolo Abeni, Vladimir Oltean, Woojung Huh,
Arun Ramadoss, Conor Dooley, Krzysztof Kozlowski, Rob Herring
Cc: Oleksij Rempel, kernel, linux-kernel, netdev, UNGLinuxDriver,
Russell King (Oracle), devicetree
This patch set introduces support for an internal MDIO bus in LAN937x
switches, enabling the use of a side MDIO channel for PHY management
while keeping SPI as the main interface for switch configuration.
Oleksij Rempel (5):
dt-bindings: net: dsa: ksz: add internal MDIO bus description
dt-bindings: net: dsa: ksz: add mdio-parent-bus property for internal
MDIO
net: dsa: microchip: Refactor MDIO handling for side MDIO access
net: dsa: microchip: cleanup error handling in ksz_mdio_register
net: dsa: microchip: add support for side MDIO interface in LAN937x
.../bindings/net/dsa/microchip,ksz.yaml | 20 +++
drivers/net/dsa/microchip/ksz_common.c | 119 +++++++++++++--
drivers/net/dsa/microchip/ksz_common.h | 7 +
drivers/net/dsa/microchip/lan937x.h | 2 +
drivers/net/dsa/microchip/lan937x_main.c | 139 ++++++++++++++++--
drivers/net/dsa/microchip/lan937x_reg.h | 4 +
6 files changed, 259 insertions(+), 32 deletions(-)
--
2.39.5
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH net-next v1 1/5] dt-bindings: net: dsa: ksz: add internal MDIO bus description
2024-10-26 6:35 [PATCH net-next v1 0/5] Side MDIO Support for LAN937x Switches Oleksij Rempel
@ 2024-10-26 6:35 ` Oleksij Rempel
2024-10-27 23:04 ` Rob Herring (Arm)
2024-10-28 12:09 ` Andrew Lunn
2024-10-26 6:35 ` [PATCH net-next v1 2/5] dt-bindings: net: dsa: ksz: add mdio-parent-bus property for internal MDIO Oleksij Rempel
` (3 subsequent siblings)
4 siblings, 2 replies; 16+ messages in thread
From: Oleksij Rempel @ 2024-10-26 6:35 UTC (permalink / raw)
To: David S. Miller, Andrew Lunn, Eric Dumazet, Florian Fainelli,
Jakub Kicinski, Paolo Abeni, Vladimir Oltean, Woojung Huh,
Arun Ramadoss, Conor Dooley, Krzysztof Kozlowski, Rob Herring
Cc: Oleksij Rempel, kernel, linux-kernel, netdev, UNGLinuxDriver,
Russell King (Oracle), devicetree
Add description for the internal MDIO bus, including integrated PHY
nodes, to ksz DSA bindings.
Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
---
.../devicetree/bindings/net/dsa/microchip,ksz.yaml | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/Documentation/devicetree/bindings/net/dsa/microchip,ksz.yaml b/Documentation/devicetree/bindings/net/dsa/microchip,ksz.yaml
index 30c0c3e6f37a4..a4e463819d4d7 100644
--- a/Documentation/devicetree/bindings/net/dsa/microchip,ksz.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/microchip,ksz.yaml
@@ -81,6 +81,17 @@ properties:
interrupts:
maxItems: 1
+ mdio:
+ $ref: /schemas/net/mdio.yaml#
+ unevaluatedProperties: false
+ patternProperties:
+ "^ethernet-phy@[0-9a-f]$":
+ type: object
+ $ref: /schemas/net/ethernet-phy.yaml#
+ unevaluatedProperties: false
+ description:
+ Integrated PHY node
+
required:
- compatible
- reg
--
2.39.5
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH net-next v1 2/5] dt-bindings: net: dsa: ksz: add mdio-parent-bus property for internal MDIO
2024-10-26 6:35 [PATCH net-next v1 0/5] Side MDIO Support for LAN937x Switches Oleksij Rempel
2024-10-26 6:35 ` [PATCH net-next v1 1/5] dt-bindings: net: dsa: ksz: add internal MDIO bus description Oleksij Rempel
@ 2024-10-26 6:35 ` Oleksij Rempel
2024-10-27 23:06 ` Rob Herring (Arm)
2024-10-28 12:09 ` Andrew Lunn
2024-10-26 6:35 ` [PATCH net-next v1 3/5] net: dsa: microchip: Refactor MDIO handling for side MDIO access Oleksij Rempel
` (2 subsequent siblings)
4 siblings, 2 replies; 16+ messages in thread
From: Oleksij Rempel @ 2024-10-26 6:35 UTC (permalink / raw)
To: David S. Miller, Andrew Lunn, Eric Dumazet, Florian Fainelli,
Jakub Kicinski, Paolo Abeni, Vladimir Oltean, Woojung Huh,
Arun Ramadoss, Conor Dooley, Krzysztof Kozlowski, Rob Herring
Cc: Oleksij Rempel, kernel, linux-kernel, netdev, UNGLinuxDriver,
Russell King (Oracle), devicetree
Introduce `mdio-parent-bus` property in the ksz DSA bindings to
reference the parent MDIO bus when the internal MDIO bus is attached to
it, bypassing the main management interface.
Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
---
.../devicetree/bindings/net/dsa/microchip,ksz.yaml | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/Documentation/devicetree/bindings/net/dsa/microchip,ksz.yaml b/Documentation/devicetree/bindings/net/dsa/microchip,ksz.yaml
index a4e463819d4d7..121a4bbd147be 100644
--- a/Documentation/devicetree/bindings/net/dsa/microchip,ksz.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/microchip,ksz.yaml
@@ -84,6 +84,15 @@ properties:
mdio:
$ref: /schemas/net/mdio.yaml#
unevaluatedProperties: false
+ properties:
+ mdio-parent-bus:
+ $ref: /schemas/types.yaml#/definitions/phandle
+ description:
+ Phandle pointing to the MDIO bus controller connected to the
+ secondary MDIO interface. This property should be used when
+ the internal MDIO bus is accessed via a secondary MDIO
+ interface rather than the primary management interface.
+
patternProperties:
"^ethernet-phy@[0-9a-f]$":
type: object
--
2.39.5
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH net-next v1 3/5] net: dsa: microchip: Refactor MDIO handling for side MDIO access
2024-10-26 6:35 [PATCH net-next v1 0/5] Side MDIO Support for LAN937x Switches Oleksij Rempel
2024-10-26 6:35 ` [PATCH net-next v1 1/5] dt-bindings: net: dsa: ksz: add internal MDIO bus description Oleksij Rempel
2024-10-26 6:35 ` [PATCH net-next v1 2/5] dt-bindings: net: dsa: ksz: add mdio-parent-bus property for internal MDIO Oleksij Rempel
@ 2024-10-26 6:35 ` Oleksij Rempel
2024-10-28 12:08 ` Andrew Lunn
2024-10-26 6:35 ` [PATCH net-next v1 4/5] net: dsa: microchip: cleanup error handling in ksz_mdio_register Oleksij Rempel
2024-10-26 6:35 ` [PATCH net-next v1 5/5] net: dsa: microchip: add support for side MDIO interface in LAN937x Oleksij Rempel
4 siblings, 1 reply; 16+ messages in thread
From: Oleksij Rempel @ 2024-10-26 6:35 UTC (permalink / raw)
To: David S. Miller, Andrew Lunn, Eric Dumazet, Florian Fainelli,
Jakub Kicinski, Paolo Abeni, Vladimir Oltean, Woojung Huh,
Arun Ramadoss, Conor Dooley, Krzysztof Kozlowski, Rob Herring
Cc: Oleksij Rempel, kernel, linux-kernel, netdev, UNGLinuxDriver,
Russell King (Oracle), devicetree
Add support for accessing PHYs via a side MDIO interface in LAN937x
switches. The existing code already supports accessing PHYs via main
management interfaces, which can be SPI, I2C, or MDIO, depending on the
chip variant. This patch enables using a side MDIO bus, where SPI is
used for the main switch configuration and MDIO for managing the
integrated PHYs. On LAN937x, this is optional, allowing them to operate
in both configurations: SPI only, or SPI + MDIO. Typically, the SPI
interface is used for switch configuration, while MDIO handles PHY
management.
Additionally, update interrupt controller code to support non-linear
port to PHY address mapping, enabling correct interrupt handling for
configurations where PHY addresses do not directly correspond to port
indexes. This change ensures that the interrupt mechanism properly
aligns with the new, flexible PHY address mappings introduced by side
MDIO support.
Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
---
drivers/net/dsa/microchip/ksz_common.c | 102 ++++++++++++++++++++++---
drivers/net/dsa/microchip/ksz_common.h | 7 ++
2 files changed, 99 insertions(+), 10 deletions(-)
diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/microchip/ksz_common.c
index 5290f5ad98f39..bcd963191cb25 100644
--- a/drivers/net/dsa/microchip/ksz_common.c
+++ b/drivers/net/dsa/microchip/ksz_common.c
@@ -2238,16 +2238,51 @@ static int ksz_sw_mdio_write(struct mii_bus *bus, int addr, int regnum,
return dev->dev_ops->w_phy(dev, addr, regnum, val);
}
+static int ksz_parent_mdio_read(struct mii_bus *bus, int addr, int regnum)
+{
+ struct ksz_device *dev = bus->priv;
+
+ return mdiobus_read_nested(dev->parent_mdio_bus, addr, regnum);
+}
+
+static int ksz_parent_mdio_write(struct mii_bus *bus, int addr, int regnum,
+ u16 val)
+{
+ struct ksz_device *dev = bus->priv;
+
+ return mdiobus_write_nested(dev->parent_mdio_bus, addr, regnum, val);
+}
+
+static int ksz_phy_addr_to_port(struct ksz_device *dev, int addr)
+{
+ struct dsa_switch *ds = dev->ds;
+ struct dsa_port *dp;
+
+ dsa_switch_for_each_user_port(dp, ds) {
+ if (dev->info->internal_phy[dp->index] &&
+ dev->phy_addr_map[dp->index] == addr)
+ return dp->index;
+ }
+
+ return -EINVAL;
+}
+
static int ksz_irq_phy_setup(struct ksz_device *dev)
{
struct dsa_switch *ds = dev->ds;
- int phy;
+ int phy, port;
int irq;
int ret;
- for (phy = 0; phy < KSZ_MAX_NUM_PORTS; phy++) {
+ for (phy = 0; phy < PHY_MAX_ADDR; phy++) {
if (BIT(phy) & ds->phys_mii_mask) {
- irq = irq_find_mapping(dev->ports[phy].pirq.domain,
+ port = ksz_phy_addr_to_port(dev, phy);
+ if (port < 0) {
+ ret = port;
+ goto out;
+ }
+
+ irq = irq_find_mapping(dev->ports[port].pirq.domain,
PORT_SRC_PHY_INT);
if (irq < 0) {
ret = irq;
@@ -2270,35 +2305,81 @@ static void ksz_irq_phy_free(struct ksz_device *dev)
struct dsa_switch *ds = dev->ds;
int phy;
- for (phy = 0; phy < KSZ_MAX_NUM_PORTS; phy++)
+ for (phy = 0; phy < PHY_MAX_ADDR; phy++)
if (BIT(phy) & ds->phys_mii_mask)
irq_dispose_mapping(ds->user_mii_bus->irq[phy]);
}
static int ksz_mdio_register(struct ksz_device *dev)
{
+ struct device_node *parent_bus_node;
+ struct mii_bus *parent_bus = NULL;
struct dsa_switch *ds = dev->ds;
struct device_node *mdio_np;
struct mii_bus *bus;
- int ret;
+ struct dsa_port *dp;
+ int ret, i;
mdio_np = of_get_child_by_name(dev->dev->of_node, "mdio");
if (!mdio_np)
return 0;
+ parent_bus_node = of_parse_phandle(mdio_np, "mdio-parent-bus", 0);
+ if (parent_bus_node && !dev->info->phy_side_mdio_supported) {
+ dev_warn(dev->dev, "Side MDIO bus is not supported for this HW, ignoring 'mdio-parent-bus' property.\n");
+ } else if (parent_bus_node) {
+ parent_bus = of_mdio_find_bus(parent_bus_node);
+ if (!parent_bus) {
+ of_node_put(parent_bus_node);
+ return -EPROBE_DEFER;
+ }
+
+ dev->parent_mdio_bus = parent_bus;
+ }
+
bus = devm_mdiobus_alloc(ds->dev);
if (!bus) {
of_node_put(mdio_np);
return -ENOMEM;
}
+ if (dev->dev_ops->mdio_bus_preinit) {
+ ret = dev->dev_ops->mdio_bus_preinit(dev, !!parent_bus);
+ if (ret)
+ goto put_mdio_node;
+ }
+
+ if (dev->dev_ops->create_phy_addr_map) {
+ ret = dev->dev_ops->create_phy_addr_map(dev, !!parent_bus);
+ if (ret)
+ goto put_mdio_node;
+ } else {
+ for (i = 0; i < dev->info->port_cnt; i++)
+ dev->phy_addr_map[i] = i;
+ }
+
bus->priv = dev;
- bus->read = ksz_sw_mdio_read;
- bus->write = ksz_sw_mdio_write;
- bus->name = "ksz user smi";
- snprintf(bus->id, MII_BUS_ID_SIZE, "SMI-%d", ds->index);
+ if (parent_bus) {
+ bus->read = ksz_parent_mdio_read;
+ bus->write = ksz_parent_mdio_write;
+ bus->name = "KSZ side MDIO";
+ snprintf(bus->id, MII_BUS_ID_SIZE, "ksz-side-mdio-%d",
+ ds->index);
+ } else {
+ bus->read = ksz_sw_mdio_read;
+ bus->write = ksz_sw_mdio_write;
+ bus->name = "ksz user smi";
+ snprintf(bus->id, MII_BUS_ID_SIZE, "SMI-%d", ds->index);
+ }
+
+ dsa_switch_for_each_user_port(dp, dev->ds) {
+ if (dev->info->internal_phy[dp->index] &&
+ dev->phy_addr_map[dp->index] < PHY_MAX_ADDR)
+ bus->phy_mask |= BIT(dev->phy_addr_map[dp->index]);
+ }
+
+ ds->phys_mii_mask = bus->phy_mask;
bus->parent = ds->dev;
- bus->phy_mask = ~ds->phys_mii_mask;
ds->user_mii_bus = bus;
@@ -2318,6 +2399,7 @@ static int ksz_mdio_register(struct ksz_device *dev)
ksz_irq_phy_free(dev);
}
+put_mdio_node:
of_node_put(mdio_np);
return ret;
diff --git a/drivers/net/dsa/microchip/ksz_common.h b/drivers/net/dsa/microchip/ksz_common.h
index bec846e20682f..fdfb624d3ff6a 100644
--- a/drivers/net/dsa/microchip/ksz_common.h
+++ b/drivers/net/dsa/microchip/ksz_common.h
@@ -65,6 +65,8 @@ struct ksz_chip_data {
u8 num_tx_queues;
u8 num_ipms; /* number of Internal Priority Maps */
bool tc_cbs_supported;
+ /* PHYs can be accessed via side MDIO channel */
+ bool phy_side_mdio_supported;
const struct ksz_dev_ops *ops;
const struct phylink_mac_ops *phylink_mac_ops;
bool phy_errata_9477;
@@ -191,6 +193,9 @@ struct ksz_device {
struct ksz_switch_macaddr *switch_macaddr;
struct net_device *hsr_dev; /* HSR */
u8 hsr_ports;
+
+ u8 phy_addr_map[KSZ_MAX_NUM_PORTS];
+ struct mii_bus *parent_mdio_bus;
};
/* List of supported models */
@@ -326,6 +331,8 @@ struct ksz_dev_ops {
void (*port_cleanup)(struct ksz_device *dev, int port);
void (*port_setup)(struct ksz_device *dev, int port, bool cpu_port);
int (*set_ageing_time)(struct ksz_device *dev, unsigned int msecs);
+ int (*mdio_bus_preinit)(struct ksz_device *dev, bool side_mdio);
+ int (*create_phy_addr_map)(struct ksz_device *dev, bool side_mdio);
int (*r_phy)(struct ksz_device *dev, u16 phy, u16 reg, u16 *val);
int (*w_phy)(struct ksz_device *dev, u16 phy, u16 reg, u16 val);
void (*r_mib_cnt)(struct ksz_device *dev, int port, u16 addr,
--
2.39.5
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH net-next v1 4/5] net: dsa: microchip: cleanup error handling in ksz_mdio_register
2024-10-26 6:35 [PATCH net-next v1 0/5] Side MDIO Support for LAN937x Switches Oleksij Rempel
` (2 preceding siblings ...)
2024-10-26 6:35 ` [PATCH net-next v1 3/5] net: dsa: microchip: Refactor MDIO handling for side MDIO access Oleksij Rempel
@ 2024-10-26 6:35 ` Oleksij Rempel
2024-10-28 12:09 ` Andrew Lunn
2024-10-26 6:35 ` [PATCH net-next v1 5/5] net: dsa: microchip: add support for side MDIO interface in LAN937x Oleksij Rempel
4 siblings, 1 reply; 16+ messages in thread
From: Oleksij Rempel @ 2024-10-26 6:35 UTC (permalink / raw)
To: David S. Miller, Andrew Lunn, Eric Dumazet, Florian Fainelli,
Jakub Kicinski, Paolo Abeni, Vladimir Oltean, Woojung Huh,
Arun Ramadoss, Conor Dooley, Krzysztof Kozlowski, Rob Herring
Cc: Oleksij Rempel, kernel, linux-kernel, netdev, UNGLinuxDriver,
Russell King (Oracle), devicetree
Replace repeated cleanup code with a single error path using a label.
Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
---
drivers/net/dsa/microchip/ksz_common.c | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/microchip/ksz_common.c
index bcd963191cb25..f08fa52dd1387 100644
--- a/drivers/net/dsa/microchip/ksz_common.c
+++ b/drivers/net/dsa/microchip/ksz_common.c
@@ -2339,8 +2339,8 @@ static int ksz_mdio_register(struct ksz_device *dev)
bus = devm_mdiobus_alloc(ds->dev);
if (!bus) {
- of_node_put(mdio_np);
- return -ENOMEM;
+ ret = -ENOMEM;
+ goto put_mdio_node;
}
if (dev->dev_ops->mdio_bus_preinit) {
@@ -2385,10 +2385,8 @@ static int ksz_mdio_register(struct ksz_device *dev)
if (dev->irq > 0) {
ret = ksz_irq_phy_setup(dev);
- if (ret) {
- of_node_put(mdio_np);
- return ret;
- }
+ if (ret)
+ goto put_mdio_node;
}
ret = devm_of_mdiobus_register(ds->dev, bus, mdio_np);
--
2.39.5
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH net-next v1 5/5] net: dsa: microchip: add support for side MDIO interface in LAN937x
2024-10-26 6:35 [PATCH net-next v1 0/5] Side MDIO Support for LAN937x Switches Oleksij Rempel
` (3 preceding siblings ...)
2024-10-26 6:35 ` [PATCH net-next v1 4/5] net: dsa: microchip: cleanup error handling in ksz_mdio_register Oleksij Rempel
@ 2024-10-26 6:35 ` Oleksij Rempel
2024-10-28 12:15 ` Andrew Lunn
2024-10-29 3:39 ` Arun.Ramadoss
4 siblings, 2 replies; 16+ messages in thread
From: Oleksij Rempel @ 2024-10-26 6:35 UTC (permalink / raw)
To: David S. Miller, Andrew Lunn, Eric Dumazet, Florian Fainelli,
Jakub Kicinski, Paolo Abeni, Vladimir Oltean, Woojung Huh,
Arun Ramadoss, Conor Dooley, Krzysztof Kozlowski, Rob Herring
Cc: Oleksij Rempel, kernel, linux-kernel, netdev, UNGLinuxDriver,
Russell King (Oracle), devicetree
Implement side MDIO channel support for LAN937x switches, providing an
alternative to SPI for PHY management alongside existing SPI-based
switch configuration. This is needed to reduce SPI load, as SPI can be
relatively expensive for small packets compared to MDIO support.
Also, implemented static mappings for PHY addresses for various LAN937x
models to support different internal PHY configurations. Since the PHY
address mappings are not equal to the port indexes, this patch also
provides PHY address calculation based on hardware strapping
configuration.
Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
---
drivers/net/dsa/microchip/ksz_common.c | 7 ++
drivers/net/dsa/microchip/lan937x.h | 2 +
drivers/net/dsa/microchip/lan937x_main.c | 139 ++++++++++++++++++++---
drivers/net/dsa/microchip/lan937x_reg.h | 4 +
4 files changed, 136 insertions(+), 16 deletions(-)
diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/microchip/ksz_common.c
index f08fa52dd1387..303f1342e6cc2 100644
--- a/drivers/net/dsa/microchip/ksz_common.c
+++ b/drivers/net/dsa/microchip/ksz_common.c
@@ -411,6 +411,8 @@ static const struct ksz_dev_ops lan937x_dev_ops = {
.flush_dyn_mac_table = ksz9477_flush_dyn_mac_table,
.port_setup = lan937x_port_setup,
.set_ageing_time = lan937x_set_ageing_time,
+ .mdio_bus_preinit = lan937x_mdio_bus_preinit,
+ .create_phy_addr_map = lan937x_create_phy_addr_map,
.r_phy = lan937x_r_phy,
.w_phy = lan937x_w_phy,
.r_mib_cnt = ksz9477_r_mib_cnt,
@@ -1762,6 +1764,7 @@ const struct ksz_chip_data ksz_switch_chips[] = {
.num_tx_queues = 8,
.num_ipms = 8,
.tc_cbs_supported = true,
+ .phy_side_mdio_supported = true,
.ops = &lan937x_dev_ops,
.phylink_mac_ops = &lan937x_phylink_mac_ops,
.mib_names = ksz9477_mib_names,
@@ -1790,6 +1793,7 @@ const struct ksz_chip_data ksz_switch_chips[] = {
.num_tx_queues = 8,
.num_ipms = 8,
.tc_cbs_supported = true,
+ .phy_side_mdio_supported = true,
.ops = &lan937x_dev_ops,
.phylink_mac_ops = &lan937x_phylink_mac_ops,
.mib_names = ksz9477_mib_names,
@@ -1818,6 +1822,7 @@ const struct ksz_chip_data ksz_switch_chips[] = {
.num_tx_queues = 8,
.num_ipms = 8,
.tc_cbs_supported = true,
+ .phy_side_mdio_supported = true,
.ops = &lan937x_dev_ops,
.phylink_mac_ops = &lan937x_phylink_mac_ops,
.mib_names = ksz9477_mib_names,
@@ -1850,6 +1855,7 @@ const struct ksz_chip_data ksz_switch_chips[] = {
.num_tx_queues = 8,
.num_ipms = 8,
.tc_cbs_supported = true,
+ .phy_side_mdio_supported = true,
.ops = &lan937x_dev_ops,
.phylink_mac_ops = &lan937x_phylink_mac_ops,
.mib_names = ksz9477_mib_names,
@@ -1882,6 +1888,7 @@ const struct ksz_chip_data ksz_switch_chips[] = {
.num_tx_queues = 8,
.num_ipms = 8,
.tc_cbs_supported = true,
+ .phy_side_mdio_supported = true,
.ops = &lan937x_dev_ops,
.phylink_mac_ops = &lan937x_phylink_mac_ops,
.mib_names = ksz9477_mib_names,
diff --git a/drivers/net/dsa/microchip/lan937x.h b/drivers/net/dsa/microchip/lan937x.h
index 3388d91dbc44e..df13ebbd356f9 100644
--- a/drivers/net/dsa/microchip/lan937x.h
+++ b/drivers/net/dsa/microchip/lan937x.h
@@ -13,6 +13,8 @@ void lan937x_port_setup(struct ksz_device *dev, int port, bool cpu_port);
void lan937x_config_cpu_port(struct dsa_switch *ds);
int lan937x_switch_init(struct ksz_device *dev);
void lan937x_switch_exit(struct ksz_device *dev);
+int lan937x_mdio_bus_preinit(struct ksz_device *dev, bool side_mdio);
+int lan937x_create_phy_addr_map(struct ksz_device *dev, bool side_mdio);
int lan937x_r_phy(struct ksz_device *dev, u16 addr, u16 reg, u16 *data);
int lan937x_w_phy(struct ksz_device *dev, u16 addr, u16 reg, u16 val);
int lan937x_change_mtu(struct ksz_device *dev, int port, int new_mtu);
diff --git a/drivers/net/dsa/microchip/lan937x_main.c b/drivers/net/dsa/microchip/lan937x_main.c
index 824d9309a3d35..7dfd21d0d2843 100644
--- a/drivers/net/dsa/microchip/lan937x_main.c
+++ b/drivers/net/dsa/microchip/lan937x_main.c
@@ -18,6 +18,47 @@
#include "ksz9477.h"
#include "lan937x.h"
+static const u8 lan9370_phy_addr[] = {
+ [0] = 2, /* Port 1, T1 AFE0 */
+ [1] = 3, /* Port 2, T1 AFE1 */
+ [2] = 5, /* Port 3, T1 AFE3 */
+ [3] = 6, /* Port 4, T1 AFE4 */
+ [4] = U8_MAX, /* Port 5, RGMII 2 */
+};
+
+static const u8 lan9372_phy_addr[] = {
+ [0] = 2, /* Port 1, T1 AFE0 */
+ [1] = 3, /* Port 2, T1 AFE1 */
+ [2] = 5, /* Port 3, T1 AFE3 */
+ [3] = 8, /* Port 4, TX PHY */
+ [4] = U8_MAX, /* Port 5, RGMII 2 */
+ [5] = U8_MAX, /* Port 6, RGMII 1 */
+ [6] = 6, /* Port 7, T1 AFE4 */
+ [7] = 4, /* Port 8, T1 AFE2 */
+};
+
+static const u8 lan9373_phy_addr[] = {
+ [0] = 2, /* Port 1, T1 AFE0 */
+ [1] = 3, /* Port 2, T1 AFE1 */
+ [2] = 5, /* Port 3, T1 AFE3 */
+ [3] = U8_MAX, /* Port 4, SGMII */
+ [4] = U8_MAX, /* Port 5, RGMII 2 */
+ [5] = U8_MAX, /* Port 6, RGMII 1 */
+ [6] = 6, /* Port 7, T1 AFE4 */
+ [7] = 4, /* Port 8, T1 AFE2 */
+};
+
+static const u8 lan9374_phy_addr[] = {
+ [0] = 2, /* Port 1, T1 AFE0 */
+ [1] = 3, /* Port 2, T1 AFE1 */
+ [2] = 5, /* Port 3, T1 AFE3 */
+ [3] = 7, /* Port 4, T1 AFE5 */
+ [4] = U8_MAX, /* Port 5, RGMII 2 */
+ [5] = U8_MAX, /* Port 6, RGMII 1 */
+ [6] = 6, /* Port 7, T1 AFE4 */
+ [7] = 4, /* Port 8, T1 AFE2 */
+};
+
static int lan937x_cfg(struct ksz_device *dev, u32 addr, u8 bits, bool set)
{
return regmap_update_bits(ksz_regmap_8(dev), addr, bits, set ? bits : 0);
@@ -30,24 +71,97 @@ static int lan937x_port_cfg(struct ksz_device *dev, int port, int offset,
bits, set ? bits : 0);
}
-static int lan937x_enable_spi_indirect_access(struct ksz_device *dev)
+int lan937x_create_phy_addr_map(struct ksz_device *dev, bool side_mdio)
+{
+ static const u8 *phy_addr_map;
+ u32 strap_val;
+ u8 offset = 0;
+ size_t size;
+ int ret, i;
+
+ if (!side_mdio) {
+ /* simple direct mapping */
+ for (i = 0; i < dev->info->port_cnt; i++)
+ dev->phy_addr_map[i] = i;
+
+ return 0;
+ }
+
+ ret = ksz_read32(dev, REG_SW_CFG_STRAP_VAL, &strap_val);
+ if (ret < 0)
+ return ret;
+
+ if (!(strap_val & SW_CASCADE_ID_CFG) && !(strap_val & SW_VPHY_ADD_CFG))
+ offset = 0;
+ else if (!(strap_val & SW_CASCADE_ID_CFG) && (strap_val & SW_VPHY_ADD_CFG))
+ offset = 7;
+ else if ((strap_val & SW_CASCADE_ID_CFG) && !(strap_val & SW_VPHY_ADD_CFG))
+ offset = 15;
+ else
+ offset = 22;
+
+ switch (dev->info->chip_id) {
+ case LAN9370_CHIP_ID:
+ phy_addr_map = lan9370_phy_addr;
+ size = ARRAY_SIZE(lan9370_phy_addr);
+ break;
+ case LAN9372_CHIP_ID:
+ phy_addr_map = lan9372_phy_addr;
+ size = ARRAY_SIZE(lan9372_phy_addr);
+ break;
+ case LAN9373_CHIP_ID:
+ phy_addr_map = lan9373_phy_addr;
+ size = ARRAY_SIZE(lan9373_phy_addr);
+ break;
+ case LAN9374_CHIP_ID:
+ phy_addr_map = lan9374_phy_addr;
+ size = ARRAY_SIZE(lan9374_phy_addr);
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ if (size < dev->info->port_cnt)
+ return -EINVAL;
+
+ for (i = 0; i < dev->info->port_cnt; i++) {
+ if (phy_addr_map[i] == U8_MAX)
+ dev->phy_addr_map[i] = phy_addr_map[i];
+ else
+ dev->phy_addr_map[i] = phy_addr_map[i] + offset;
+ }
+
+ return 0;
+}
+
+int lan937x_mdio_bus_preinit(struct ksz_device *dev, bool side_mdio)
{
u16 data16;
int ret;
- /* Enable Phy access through SPI */
+ /* Unlock access to the PHYs, needed for SPI and side MDIO access */
ret = lan937x_cfg(dev, REG_GLOBAL_CTRL_0, SW_PHY_REG_BLOCK, false);
if (ret < 0)
- return ret;
+ goto print_error;
- ret = ksz_read16(dev, REG_VPHY_SPECIAL_CTRL__2, &data16);
- if (ret < 0)
- return ret;
+ if (side_mdio)
+ /* Allow access to internal PHYs over MDIO bus */
+ data16 = VPHY_MDIO_INTERNAL_ENABLE;
+ else
+ /* Enable SPI indirect access to address clock domain crossing
+ * issue
+ */
+ data16 = VPHY_SPI_INDIRECT_ENABLE;
+
+ ret = ksz_rmw16(dev, REG_VPHY_SPECIAL_CTRL__2,
+ VPHY_SPI_INDIRECT_ENABLE | VPHY_MDIO_INTERNAL_ENABLE,
+ data16);
- /* Allow SPI access */
- data16 |= VPHY_SPI_INDIRECT_ENABLE;
+print_error:
+ if (ret < 0)
+ dev_err(dev->dev, "failed to enable spi indirect access");
- return ksz_write16(dev, REG_VPHY_SPECIAL_CTRL__2, data16);
+ return ret;
}
static int lan937x_vphy_ind_addr_wr(struct ksz_device *dev, int addr, int reg)
@@ -363,13 +477,6 @@ int lan937x_setup(struct dsa_switch *ds)
struct ksz_device *dev = ds->priv;
int ret;
- /* enable Indirect Access from SPI to the VPHY registers */
- ret = lan937x_enable_spi_indirect_access(dev);
- if (ret < 0) {
- dev_err(dev->dev, "failed to enable spi indirect access");
- return ret;
- }
-
/* The VLAN aware is a global setting. Mixed vlan
* filterings are not supported.
*/
diff --git a/drivers/net/dsa/microchip/lan937x_reg.h b/drivers/net/dsa/microchip/lan937x_reg.h
index 2f22a9d01de36..4ec93e421da45 100644
--- a/drivers/net/dsa/microchip/lan937x_reg.h
+++ b/drivers/net/dsa/microchip/lan937x_reg.h
@@ -37,6 +37,10 @@
#define SW_CLK125_ENB BIT(1)
#define SW_CLK25_ENB BIT(0)
+#define REG_SW_CFG_STRAP_VAL 0x0200
+#define SW_CASCADE_ID_CFG BIT(15)
+#define SW_VPHY_ADD_CFG BIT(0)
+
/* 2 - PHY Control */
#define REG_SW_CFG_STRAP_OVR 0x0214
#define SW_VPHY_DISABLE BIT(31)
--
2.39.5
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH net-next v1 1/5] dt-bindings: net: dsa: ksz: add internal MDIO bus description
2024-10-26 6:35 ` [PATCH net-next v1 1/5] dt-bindings: net: dsa: ksz: add internal MDIO bus description Oleksij Rempel
@ 2024-10-27 23:04 ` Rob Herring (Arm)
2024-10-28 12:09 ` Andrew Lunn
1 sibling, 0 replies; 16+ messages in thread
From: Rob Herring (Arm) @ 2024-10-27 23:04 UTC (permalink / raw)
To: Oleksij Rempel
Cc: Andrew Lunn, Conor Dooley, Russell King (Oracle), David S. Miller,
Jakub Kicinski, Rob Herring, Krzysztof Kozlowski, linux-kernel,
Woojung Huh, Eric Dumazet, netdev, UNGLinuxDriver, devicetree,
Florian Fainelli, Paolo Abeni, Vladimir Oltean, kernel,
Arun Ramadoss
On Sat, 26 Oct 2024 08:35:34 +0200, Oleksij Rempel wrote:
> Add description for the internal MDIO bus, including integrated PHY
> nodes, to ksz DSA bindings.
>
> Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
> ---
> .../devicetree/bindings/net/dsa/microchip,ksz.yaml | 11 +++++++++++
> 1 file changed, 11 insertions(+)
>
Reviewed-by: Rob Herring (Arm) <robh@kernel.org>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH net-next v1 2/5] dt-bindings: net: dsa: ksz: add mdio-parent-bus property for internal MDIO
2024-10-26 6:35 ` [PATCH net-next v1 2/5] dt-bindings: net: dsa: ksz: add mdio-parent-bus property for internal MDIO Oleksij Rempel
@ 2024-10-27 23:06 ` Rob Herring (Arm)
2024-10-28 12:09 ` Andrew Lunn
1 sibling, 0 replies; 16+ messages in thread
From: Rob Herring (Arm) @ 2024-10-27 23:06 UTC (permalink / raw)
To: Oleksij Rempel
Cc: Woojung Huh, Florian Fainelli, Arun Ramadoss, Rob Herring,
Andrew Lunn, David S. Miller, linux-kernel, Russell King (Oracle),
devicetree, Eric Dumazet, Paolo Abeni, Krzysztof Kozlowski,
Vladimir Oltean, UNGLinuxDriver, Jakub Kicinski, Conor Dooley,
netdev, kernel
On Sat, 26 Oct 2024 08:35:35 +0200, Oleksij Rempel wrote:
> Introduce `mdio-parent-bus` property in the ksz DSA bindings to
> reference the parent MDIO bus when the internal MDIO bus is attached to
> it, bypassing the main management interface.
>
> Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
> ---
> .../devicetree/bindings/net/dsa/microchip,ksz.yaml | 9 +++++++++
> 1 file changed, 9 insertions(+)
>
Reviewed-by: Rob Herring (Arm) <robh@kernel.org>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH net-next v1 3/5] net: dsa: microchip: Refactor MDIO handling for side MDIO access
2024-10-26 6:35 ` [PATCH net-next v1 3/5] net: dsa: microchip: Refactor MDIO handling for side MDIO access Oleksij Rempel
@ 2024-10-28 12:08 ` Andrew Lunn
0 siblings, 0 replies; 16+ messages in thread
From: Andrew Lunn @ 2024-10-28 12:08 UTC (permalink / raw)
To: Oleksij Rempel
Cc: David S. Miller, Eric Dumazet, Florian Fainelli, Jakub Kicinski,
Paolo Abeni, Vladimir Oltean, Woojung Huh, Arun Ramadoss,
Conor Dooley, Krzysztof Kozlowski, Rob Herring, kernel,
linux-kernel, netdev, UNGLinuxDriver, Russell King (Oracle),
devicetree
> static int ksz_mdio_register(struct ksz_device *dev)
> {
> + struct device_node *parent_bus_node;
> + struct mii_bus *parent_bus = NULL;
> struct dsa_switch *ds = dev->ds;
> struct device_node *mdio_np;
> struct mii_bus *bus;
> - int ret;
> + struct dsa_port *dp;
> + int ret, i;
>
> mdio_np = of_get_child_by_name(dev->dev->of_node, "mdio");
> if (!mdio_np)
> return 0;
>
> + parent_bus_node = of_parse_phandle(mdio_np, "mdio-parent-bus", 0);
> + if (parent_bus_node && !dev->info->phy_side_mdio_supported) {
> + dev_warn(dev->dev, "Side MDIO bus is not supported for this HW, ignoring 'mdio-parent-bus' property.\n");
I think dev_err() and return -EINVAL. It is an error in the DT.
Andrew
---
pw-bot: cr
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH net-next v1 4/5] net: dsa: microchip: cleanup error handling in ksz_mdio_register
2024-10-26 6:35 ` [PATCH net-next v1 4/5] net: dsa: microchip: cleanup error handling in ksz_mdio_register Oleksij Rempel
@ 2024-10-28 12:09 ` Andrew Lunn
0 siblings, 0 replies; 16+ messages in thread
From: Andrew Lunn @ 2024-10-28 12:09 UTC (permalink / raw)
To: Oleksij Rempel
Cc: David S. Miller, Eric Dumazet, Florian Fainelli, Jakub Kicinski,
Paolo Abeni, Vladimir Oltean, Woojung Huh, Arun Ramadoss,
Conor Dooley, Krzysztof Kozlowski, Rob Herring, kernel,
linux-kernel, netdev, UNGLinuxDriver, Russell King (Oracle),
devicetree
On Sat, Oct 26, 2024 at 08:35:37AM +0200, Oleksij Rempel wrote:
> Replace repeated cleanup code with a single error path using a label.
>
> Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Andrew
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH net-next v1 1/5] dt-bindings: net: dsa: ksz: add internal MDIO bus description
2024-10-26 6:35 ` [PATCH net-next v1 1/5] dt-bindings: net: dsa: ksz: add internal MDIO bus description Oleksij Rempel
2024-10-27 23:04 ` Rob Herring (Arm)
@ 2024-10-28 12:09 ` Andrew Lunn
1 sibling, 0 replies; 16+ messages in thread
From: Andrew Lunn @ 2024-10-28 12:09 UTC (permalink / raw)
To: Oleksij Rempel
Cc: David S. Miller, Eric Dumazet, Florian Fainelli, Jakub Kicinski,
Paolo Abeni, Vladimir Oltean, Woojung Huh, Arun Ramadoss,
Conor Dooley, Krzysztof Kozlowski, Rob Herring, kernel,
linux-kernel, netdev, UNGLinuxDriver, Russell King (Oracle),
devicetree
On Sat, Oct 26, 2024 at 08:35:34AM +0200, Oleksij Rempel wrote:
> Add description for the internal MDIO bus, including integrated PHY
> nodes, to ksz DSA bindings.
>
> Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Andrew
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH net-next v1 2/5] dt-bindings: net: dsa: ksz: add mdio-parent-bus property for internal MDIO
2024-10-26 6:35 ` [PATCH net-next v1 2/5] dt-bindings: net: dsa: ksz: add mdio-parent-bus property for internal MDIO Oleksij Rempel
2024-10-27 23:06 ` Rob Herring (Arm)
@ 2024-10-28 12:09 ` Andrew Lunn
1 sibling, 0 replies; 16+ messages in thread
From: Andrew Lunn @ 2024-10-28 12:09 UTC (permalink / raw)
To: Oleksij Rempel
Cc: David S. Miller, Eric Dumazet, Florian Fainelli, Jakub Kicinski,
Paolo Abeni, Vladimir Oltean, Woojung Huh, Arun Ramadoss,
Conor Dooley, Krzysztof Kozlowski, Rob Herring, kernel,
linux-kernel, netdev, UNGLinuxDriver, Russell King (Oracle),
devicetree
On Sat, Oct 26, 2024 at 08:35:35AM +0200, Oleksij Rempel wrote:
> Introduce `mdio-parent-bus` property in the ksz DSA bindings to
> reference the parent MDIO bus when the internal MDIO bus is attached to
> it, bypassing the main management interface.
>
> Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Andrew
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH net-next v1 5/5] net: dsa: microchip: add support for side MDIO interface in LAN937x
2024-10-26 6:35 ` [PATCH net-next v1 5/5] net: dsa: microchip: add support for side MDIO interface in LAN937x Oleksij Rempel
@ 2024-10-28 12:15 ` Andrew Lunn
2024-10-28 13:43 ` Oleksij Rempel
2024-10-29 3:39 ` Arun.Ramadoss
1 sibling, 1 reply; 16+ messages in thread
From: Andrew Lunn @ 2024-10-28 12:15 UTC (permalink / raw)
To: Oleksij Rempel
Cc: David S. Miller, Eric Dumazet, Florian Fainelli, Jakub Kicinski,
Paolo Abeni, Vladimir Oltean, Woojung Huh, Arun Ramadoss,
Conor Dooley, Krzysztof Kozlowski, Rob Herring, kernel,
linux-kernel, netdev, UNGLinuxDriver, Russell King (Oracle),
devicetree
> +static const u8 lan9370_phy_addr[] = {
> + [0] = 2, /* Port 1, T1 AFE0 */
> + [1] = 3, /* Port 2, T1 AFE1 */
> + [2] = 5, /* Port 3, T1 AFE3 */
> + [3] = 6, /* Port 4, T1 AFE4 */
> + [4] = U8_MAX, /* Port 5, RGMII 2 */
> +};
I think it would be good to add a #define for U8_MAX which gives a
hint at its meaning.
> + for (i = 0; i < dev->info->port_cnt; i++) {
> + if (phy_addr_map[i] == U8_MAX)
> + dev->phy_addr_map[i] = phy_addr_map[i];
> + else
> + dev->phy_addr_map[i] = phy_addr_map[i] + offset;
> + }
My first guess was that U8_MAX means the PHY is external, so could be
on any address depending on strapping. Looking at this code, i'm not
sure it does actually mean that.
Andrew
---
pw-bot: cr
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH net-next v1 5/5] net: dsa: microchip: add support for side MDIO interface in LAN937x
2024-10-28 12:15 ` Andrew Lunn
@ 2024-10-28 13:43 ` Oleksij Rempel
0 siblings, 0 replies; 16+ messages in thread
From: Oleksij Rempel @ 2024-10-28 13:43 UTC (permalink / raw)
To: Andrew Lunn
Cc: David S. Miller, Eric Dumazet, Florian Fainelli, Jakub Kicinski,
Paolo Abeni, Vladimir Oltean, Woojung Huh, Arun Ramadoss,
Conor Dooley, Krzysztof Kozlowski, Rob Herring, kernel,
linux-kernel, netdev, UNGLinuxDriver, Russell King (Oracle),
devicetree
On Mon, Oct 28, 2024 at 01:15:42PM +0100, Andrew Lunn wrote:
> > +static const u8 lan9370_phy_addr[] = {
> > + [0] = 2, /* Port 1, T1 AFE0 */
> > + [1] = 3, /* Port 2, T1 AFE1 */
> > + [2] = 5, /* Port 3, T1 AFE3 */
> > + [3] = 6, /* Port 4, T1 AFE4 */
> > + [4] = U8_MAX, /* Port 5, RGMII 2 */
> > +};
>
> I think it would be good to add a #define for U8_MAX which gives a
> hint at its meaning.
ack
> > + for (i = 0; i < dev->info->port_cnt; i++) {
> > + if (phy_addr_map[i] == U8_MAX)
> > + dev->phy_addr_map[i] = phy_addr_map[i];
> > + else
> > + dev->phy_addr_map[i] = phy_addr_map[i] + offset;
> > + }
>
> My first guess was that U8_MAX means the PHY is external, so could be
> on any address depending on strapping. Looking at this code, i'm not
> sure it does actually mean that.
Yes, the U8_MAX for ports without integrated PHYs. This code calculates address
for integrated PHYs, which can be different depending on strap
configuration.
I'll use some different define.
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH net-next v1 5/5] net: dsa: microchip: add support for side MDIO interface in LAN937x
2024-10-26 6:35 ` [PATCH net-next v1 5/5] net: dsa: microchip: add support for side MDIO interface in LAN937x Oleksij Rempel
2024-10-28 12:15 ` Andrew Lunn
@ 2024-10-29 3:39 ` Arun.Ramadoss
2024-10-29 5:15 ` Oleksij Rempel
1 sibling, 1 reply; 16+ messages in thread
From: Arun.Ramadoss @ 2024-10-29 3:39 UTC (permalink / raw)
To: andrew, olteanv, davem, Woojung.Huh, robh+dt, pabeni, o.rempel,
edumazet, f.fainelli, krzysztof.kozlowski+dt, conor+dt, kuba
Cc: linux, kernel, devicetree, linux-kernel, netdev, UNGLinuxDriver
Hi Oleksij,
On Sat, 2024-10-26 at 08:35 +0200, Oleksij Rempel wrote:
> EXTERNAL EMAIL: Do not click links or open attachments unless you
> know the content is safe
>
> diff --git a/drivers/net/dsa/microchip/lan937x_main.c
> b/drivers/net/dsa/microchip/lan937x_main.c
> index 824d9309a3d35..7dfd21d0d2843 100644
> --- a/drivers/net/dsa/microchip/lan937x_main.c
> +++ b/drivers/net/dsa/microchip/lan937x_main.c
> @@ -18,6 +18,47 @@
> #include "ksz9477.h"
> #include "lan937x.h"
>
> +static const u8 lan9370_phy_addr[] = {
> + [0] = 2, /* Port 1, T1 AFE0 */
> + [1] = 3, /* Port 2, T1 AFE1 */
> + [2] = 5, /* Port 3, T1 AFE3 */
> + [3] = 6, /* Port 4, T1 AFE4 */
> + [4] = U8_MAX, /* Port 5, RGMII 2 */
> +};
> +
Is it intentional to not to add support for lan9371 variant switch?
> +static const u8 lan9372_phy_addr[] = {
> + [0] = 2, /* Port 1, T1 AFE0 */
> + [1] = 3, /* Port 2, T1 AFE1 */
> + [2] = 5, /* Port 3, T1 AFE3 */
> + [3] = 8, /* Port 4, TX PHY */
> + [4] = U8_MAX, /* Port 5, RGMII 2 */
> + [5] = U8_MAX, /* Port 6, RGMII 1 */
> + [6] = 6, /* Port 7, T1 AFE4 */
> + [7] = 4, /* Port 8, T1 AFE2 */
> +};
> +
> +static const u8 lan9373_phy_addr[] = {
> + [0] = 2, /* Port 1, T1 AFE0 */
> + [1] = 3, /* Port 2, T1 AFE1 */
> + [2] = 5, /* Port 3, T1 AFE3 */
> + [3] = U8_MAX, /* Port 4, SGMII */
> + [4] = U8_MAX, /* Port 5, RGMII 2 */
> + [5] = U8_MAX, /* Port 6, RGMII 1 */
> + [6] = 6, /* Port 7, T1 AFE4 */
> + [7] = 4, /* Port 8, T1 AFE2 */
> +};
> +
> +static const u8 lan9374_phy_addr[] = {
> + [0] = 2, /* Port 1, T1 AFE0 */
> + [1] = 3, /* Port 2, T1 AFE1 */
> + [2] = 5, /* Port 3, T1 AFE3 */
> + [3] = 7, /* Port 4, T1 AFE5 */
> + [4] = U8_MAX, /* Port 5, RGMII 2 */
> + [5] = U8_MAX, /* Port 6, RGMII 1 */
> + [6] = 6, /* Port 7, T1 AFE4 */
> + [7] = 4, /* Port 8, T1 AFE2 */
> +};
> +
> static int lan937x_cfg(struct ksz_device *dev, u32 addr, u8 bits,
> bool set)
> {
> return regmap_update_bits(ksz_regmap_8(dev), addr, bits, set
> ? bits : 0);
> @@ -30,24 +71,97 @@ static int lan937x_port_cfg(struct ksz_device
> *dev, int port, int offset,
> bits, set ? bits : 0);
> }
>
>
> 2.39.5
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH net-next v1 5/5] net: dsa: microchip: add support for side MDIO interface in LAN937x
2024-10-29 3:39 ` Arun.Ramadoss
@ 2024-10-29 5:15 ` Oleksij Rempel
0 siblings, 0 replies; 16+ messages in thread
From: Oleksij Rempel @ 2024-10-29 5:15 UTC (permalink / raw)
To: Arun.Ramadoss
Cc: andrew, olteanv, davem, Woojung.Huh, robh+dt, pabeni, edumazet,
f.fainelli, krzysztof.kozlowski+dt, conor+dt, kuba, linux, kernel,
devicetree, linux-kernel, netdev, UNGLinuxDriver
Hi Arun,
On Tue, Oct 29, 2024 at 03:39:33AM +0000, Arun.Ramadoss@microchip.com wrote:
> Hi Oleksij,
>
> On Sat, 2024-10-26 at 08:35 +0200, Oleksij Rempel wrote:
> > EXTERNAL EMAIL: Do not click links or open attachments unless you
> > know the content is safe
> >
> > diff --git a/drivers/net/dsa/microchip/lan937x_main.c
> > b/drivers/net/dsa/microchip/lan937x_main.c
> > index 824d9309a3d35..7dfd21d0d2843 100644
> > --- a/drivers/net/dsa/microchip/lan937x_main.c
> > +++ b/drivers/net/dsa/microchip/lan937x_main.c
> > @@ -18,6 +18,47 @@
> > #include "ksz9477.h"
> > #include "lan937x.h"
> >
> > +static const u8 lan9370_phy_addr[] = {
> > + [0] = 2, /* Port 1, T1 AFE0 */
> > + [1] = 3, /* Port 2, T1 AFE1 */
> > + [2] = 5, /* Port 3, T1 AFE3 */
> > + [3] = 6, /* Port 4, T1 AFE4 */
> > + [4] = U8_MAX, /* Port 5, RGMII 2 */
> > +};
> > +
>
> Is it intentional to not to add support for lan9371 variant switch?
I forgot about this one, will add it too.
Regards,
Oleksij
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2024-10-29 5:16 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-26 6:35 [PATCH net-next v1 0/5] Side MDIO Support for LAN937x Switches Oleksij Rempel
2024-10-26 6:35 ` [PATCH net-next v1 1/5] dt-bindings: net: dsa: ksz: add internal MDIO bus description Oleksij Rempel
2024-10-27 23:04 ` Rob Herring (Arm)
2024-10-28 12:09 ` Andrew Lunn
2024-10-26 6:35 ` [PATCH net-next v1 2/5] dt-bindings: net: dsa: ksz: add mdio-parent-bus property for internal MDIO Oleksij Rempel
2024-10-27 23:06 ` Rob Herring (Arm)
2024-10-28 12:09 ` Andrew Lunn
2024-10-26 6:35 ` [PATCH net-next v1 3/5] net: dsa: microchip: Refactor MDIO handling for side MDIO access Oleksij Rempel
2024-10-28 12:08 ` Andrew Lunn
2024-10-26 6:35 ` [PATCH net-next v1 4/5] net: dsa: microchip: cleanup error handling in ksz_mdio_register Oleksij Rempel
2024-10-28 12:09 ` Andrew Lunn
2024-10-26 6:35 ` [PATCH net-next v1 5/5] net: dsa: microchip: add support for side MDIO interface in LAN937x Oleksij Rempel
2024-10-28 12:15 ` Andrew Lunn
2024-10-28 13:43 ` Oleksij Rempel
2024-10-29 3:39 ` Arun.Ramadoss
2024-10-29 5:15 ` Oleksij Rempel
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox