Commit 1dc6a2a0 authored by Colin Foster's avatar Colin Foster Committed by Jakub Kicinski
Browse files

net: dsa: felix: add configurable device quirks



The define FELIX_MAC_QUIRKS was used directly in the felix.c shared driver.
Other devices (VSC7512 for example) don't require the same quirks, so they
need to be configured on a per-device basis.

Signed-off-by: default avatarColin Foster <colin.foster@in-advantage.com>
Reviewed-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
Tested-by: Vladimir Oltean <vladimir.oltean@nxp.com> # regression
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 2efaca41
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -1075,9 +1075,12 @@ static void felix_phylink_mac_link_down(struct dsa_switch *ds, int port,
					phy_interface_t interface)
{
	struct ocelot *ocelot = ds->priv;
	struct felix *felix;

	felix = ocelot_to_felix(ocelot);

	ocelot_phylink_mac_link_down(ocelot, port, link_an_mode, interface,
				     FELIX_MAC_QUIRKS);
				     felix->info->quirks);
}

static void felix_phylink_mac_link_up(struct dsa_switch *ds, int port,
@@ -1092,7 +1095,7 @@ static void felix_phylink_mac_link_up(struct dsa_switch *ds, int port,

	ocelot_phylink_mac_link_up(ocelot, port, phydev, link_an_mode,
				   interface, speed, duplex, tx_pause, rx_pause,
				   FELIX_MAC_QUIRKS);
				   felix->info->quirks);

	if (felix->info->port_sched_speed_set)
		felix->info->port_sched_speed_set(ocelot, port, speed);
+1 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ struct felix_info {
	u16				vcap_pol_base2;
	u16				vcap_pol_max2;
	const struct ptp_clock_info	*ptp_caps;
	unsigned long			quirks;

	/* Some Ocelot switches are integrated into the SoC without the
	 * extraction IRQ line connected to the ARM GIC. By enabling this
+1 −0
Original line number Diff line number Diff line
@@ -2593,6 +2593,7 @@ static const struct felix_info felix_info_vsc9959 = {
	.num_mact_rows		= 2048,
	.num_ports		= VSC9959_NUM_PORTS,
	.num_tx_queues		= OCELOT_NUM_TC,
	.quirks			= FELIX_MAC_QUIRKS,
	.quirk_no_xtr_irq	= true,
	.ptp_caps		= &vsc9959_ptp_caps,
	.mdio_bus_alloc		= vsc9959_mdio_bus_alloc,
+1 −0
Original line number Diff line number Diff line
@@ -971,6 +971,7 @@ static const struct felix_info seville_info_vsc9953 = {
	.vcap_pol_max		= VSC9953_VCAP_POLICER_MAX,
	.vcap_pol_base2		= VSC9953_VCAP_POLICER_BASE2,
	.vcap_pol_max2		= VSC9953_VCAP_POLICER_MAX2,
	.quirks			= FELIX_MAC_QUIRKS,
	.num_mact_rows		= 2048,
	.num_ports		= VSC9953_NUM_PORTS,
	.num_tx_queues		= OCELOT_NUM_TC,