Commit 006983e5 authored by Tristram Ha's avatar Tristram Ha Committed by Jakub Kicinski
Browse files

net: dsa: microchip: Setup fiber ports for KSZ8463



The fiber ports in KSZ8463 cannot be detected internally, so it requires
specifying that condition in the device tree.  Like the one used in
Micrel PHY the port link can only be read and there is no write to the
PHY.  The driver programs registers to operate fiber ports correctly.

Signed-off-by: default avatarTristram Ha <tristram.ha@microchip.com>
Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
Link: https://patch.msgid.link/20250725001753.6330-6-Tristram.Ha@microchip.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 5bcdb137
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -1714,6 +1714,7 @@ void ksz8_config_cpu_port(struct dsa_switch *ds)
	const u32 *masks;
	const u16 *regs;
	u8 remote;
	u8 fiber_ports = 0;
	int i;

	masks = dev->info->masks;
@@ -1744,6 +1745,21 @@ void ksz8_config_cpu_port(struct dsa_switch *ds)
		else
			ksz_port_cfg(dev, i, regs[P_STP_CTRL],
				     PORT_FORCE_FLOW_CTRL, false);
		if (p->fiber)
			fiber_ports |= (1 << i);
	}
	if (ksz_is_ksz8463(dev)) {
		/* Setup fiber ports. */
		if (fiber_ports) {
			fiber_ports &= 3;
			regmap_update_bits(ksz_regmap_16(dev),
					   KSZ8463_REG_CFG_CTRL,
					   fiber_ports << PORT_COPPER_MODE_S,
					   0);
			regmap_update_bits(ksz_regmap_16(dev),
					   KSZ8463_REG_DSP_CTRL_6,
					   COPPER_RECEIVE_ADJUSTMENT, 0);
		}
	}
}

+3 −0
Original line number Diff line number Diff line
@@ -5439,6 +5439,9 @@ int ksz_switch_register(struct ksz_device *dev)
						&dev->ports[port_num].interface);

				ksz_parse_rgmii_delay(dev, port_num, port);
				dev->ports[port_num].fiber =
					of_property_read_bool(port,
							      "micrel,fiber-mode");
			}
			of_node_put(ports);
		}