mirror of
https://github.com/torvalds/linux.git
synced 2025-04-09 14:45:27 +00:00
net: dsa: microchip: Do not execute PTP driver code for unsupported switches
The PTP driver code only works for certain KSZ switches like KSZ9477, KSZ9567, LAN937X and their varieties. This code is enabled by kernel configuration CONFIG_NET_DSA_MICROCHIP_KSZ_PTP. As the DSA driver is common to work with all KSZ switches this PTP code is not appropriate for other unsupported switches. The ptp_capable indication is added to the chip data structure to signal whether to execute those code. Signed-off-by: Tristram Ha <tristram.ha@microchip.com> Link: https://patch.msgid.link/20241218020240.70601-1-Tristram.Ha@microchip.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
3272040790
commit
6ed3472173
@ -1339,6 +1339,7 @@ const struct ksz_chip_data ksz_switch_chips[] = {
|
||||
.supports_rgmii = {false, false, true},
|
||||
.internal_phy = {true, true, false},
|
||||
.gbit_capable = {false, false, true},
|
||||
.ptp_capable = true,
|
||||
.wr_table = &ksz8563_register_set,
|
||||
.rd_table = &ksz8563_register_set,
|
||||
},
|
||||
@ -1550,6 +1551,7 @@ const struct ksz_chip_data ksz_switch_chips[] = {
|
||||
.internal_phy = {true, true, true, true,
|
||||
true, false, false},
|
||||
.gbit_capable = {true, true, true, true, true, true, true},
|
||||
.ptp_capable = true,
|
||||
.wr_table = &ksz9477_register_set,
|
||||
.rd_table = &ksz9477_register_set,
|
||||
},
|
||||
@ -1677,6 +1679,7 @@ const struct ksz_chip_data ksz_switch_chips[] = {
|
||||
.supports_rgmii = {false, false, true},
|
||||
.internal_phy = {true, true, false},
|
||||
.gbit_capable = {true, true, true},
|
||||
.ptp_capable = true,
|
||||
},
|
||||
|
||||
[KSZ8567] = {
|
||||
@ -1712,6 +1715,7 @@ const struct ksz_chip_data ksz_switch_chips[] = {
|
||||
true, false, false},
|
||||
.gbit_capable = {false, false, false, false, false,
|
||||
true, true},
|
||||
.ptp_capable = true,
|
||||
},
|
||||
|
||||
[KSZ9567] = {
|
||||
@ -1744,6 +1748,7 @@ const struct ksz_chip_data ksz_switch_chips[] = {
|
||||
.internal_phy = {true, true, true, true,
|
||||
true, false, false},
|
||||
.gbit_capable = {true, true, true, true, true, true, true},
|
||||
.ptp_capable = true,
|
||||
},
|
||||
|
||||
[LAN9370] = {
|
||||
@ -1773,6 +1778,7 @@ const struct ksz_chip_data ksz_switch_chips[] = {
|
||||
.supports_rmii = {false, false, false, false, true},
|
||||
.supports_rgmii = {false, false, false, false, true},
|
||||
.internal_phy = {true, true, true, true, false},
|
||||
.ptp_capable = true,
|
||||
},
|
||||
|
||||
[LAN9371] = {
|
||||
@ -1802,6 +1808,7 @@ const struct ksz_chip_data ksz_switch_chips[] = {
|
||||
.supports_rmii = {false, false, false, false, true, true},
|
||||
.supports_rgmii = {false, false, false, false, true, true},
|
||||
.internal_phy = {true, true, true, true, false, false},
|
||||
.ptp_capable = true,
|
||||
},
|
||||
|
||||
[LAN9372] = {
|
||||
@ -1835,6 +1842,7 @@ const struct ksz_chip_data ksz_switch_chips[] = {
|
||||
true, true, false, false},
|
||||
.internal_phy = {true, true, true, true,
|
||||
false, false, true, true},
|
||||
.ptp_capable = true,
|
||||
},
|
||||
|
||||
[LAN9373] = {
|
||||
@ -1868,6 +1876,7 @@ const struct ksz_chip_data ksz_switch_chips[] = {
|
||||
true, true, false, false},
|
||||
.internal_phy = {true, true, true, false,
|
||||
false, false, true, true},
|
||||
.ptp_capable = true,
|
||||
},
|
||||
|
||||
[LAN9374] = {
|
||||
@ -1901,6 +1910,7 @@ const struct ksz_chip_data ksz_switch_chips[] = {
|
||||
true, true, false, false},
|
||||
.internal_phy = {true, true, true, true,
|
||||
false, false, true, true},
|
||||
.ptp_capable = true,
|
||||
},
|
||||
|
||||
[LAN9646] = {
|
||||
@ -2809,16 +2819,21 @@ static int ksz_setup(struct dsa_switch *ds)
|
||||
if (ret)
|
||||
goto out_girq;
|
||||
|
||||
ret = ksz_ptp_irq_setup(ds, dp->index);
|
||||
if (ret)
|
||||
goto out_pirq;
|
||||
if (dev->info->ptp_capable) {
|
||||
ret = ksz_ptp_irq_setup(ds, dp->index);
|
||||
if (ret)
|
||||
goto out_pirq;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ret = ksz_ptp_clock_register(ds);
|
||||
if (ret) {
|
||||
dev_err(dev->dev, "Failed to register PTP clock: %d\n", ret);
|
||||
goto out_ptpirq;
|
||||
if (dev->info->ptp_capable) {
|
||||
ret = ksz_ptp_clock_register(ds);
|
||||
if (ret) {
|
||||
dev_err(dev->dev, "Failed to register PTP clock: %d\n",
|
||||
ret);
|
||||
goto out_ptpirq;
|
||||
}
|
||||
}
|
||||
|
||||
ret = ksz_mdio_register(dev);
|
||||
@ -2838,9 +2853,10 @@ static int ksz_setup(struct dsa_switch *ds)
|
||||
return 0;
|
||||
|
||||
out_ptp_clock_unregister:
|
||||
ksz_ptp_clock_unregister(ds);
|
||||
if (dev->info->ptp_capable)
|
||||
ksz_ptp_clock_unregister(ds);
|
||||
out_ptpirq:
|
||||
if (dev->irq > 0)
|
||||
if (dev->irq > 0 && dev->info->ptp_capable)
|
||||
dsa_switch_for_each_user_port(dp, dev->ds)
|
||||
ksz_ptp_irq_free(ds, dp->index);
|
||||
out_pirq:
|
||||
@ -2859,11 +2875,13 @@ static void ksz_teardown(struct dsa_switch *ds)
|
||||
struct ksz_device *dev = ds->priv;
|
||||
struct dsa_port *dp;
|
||||
|
||||
ksz_ptp_clock_unregister(ds);
|
||||
if (dev->info->ptp_capable)
|
||||
ksz_ptp_clock_unregister(ds);
|
||||
|
||||
if (dev->irq > 0) {
|
||||
dsa_switch_for_each_user_port(dp, dev->ds) {
|
||||
ksz_ptp_irq_free(ds, dp->index);
|
||||
if (dev->info->ptp_capable)
|
||||
ksz_ptp_irq_free(ds, dp->index);
|
||||
|
||||
ksz_irq_free(&dev->ports[dp->index].pirq);
|
||||
}
|
||||
|
@ -92,6 +92,7 @@ struct ksz_chip_data {
|
||||
bool supports_rgmii[KSZ_MAX_NUM_PORTS];
|
||||
bool internal_phy[KSZ_MAX_NUM_PORTS];
|
||||
bool gbit_capable[KSZ_MAX_NUM_PORTS];
|
||||
bool ptp_capable;
|
||||
const struct regmap_access_table *wr_table;
|
||||
const struct regmap_access_table *rd_table;
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user