mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 00:53:34 +02:00
net: sparx5: move PTP IRQ handling out of sparx5_start()
Move the PTP IRQ request into sparx5_ptp_init() so all PTP setup is done in one place. Also move the sparx5_ptp_init() call to right before sparx5_register_netdevs() and add a cleanup_ptp label. Update remove() to disable the PTP IRQ and reorder ptp_deinit accordingly. Signed-off-by: Daniel Machon <daniel.machon@microchip.com> Link: https://patch.msgid.link/20260227-sparx5-init-deinit-v2-7-10ba54ccf005@microchip.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
cdc374359f
commit
0432c60112
|
|
@ -761,18 +761,6 @@ static int sparx5_start(struct sparx5 *sparx5)
|
|||
sparx5->xtr_irq = -ENXIO;
|
||||
}
|
||||
|
||||
if (sparx5->ptp_irq >= 0 &&
|
||||
sparx5_has_feature(sparx5, SPX5_FEATURE_PTP)) {
|
||||
err = devm_request_threaded_irq(sparx5->dev, sparx5->ptp_irq,
|
||||
NULL, ops->ptp_irq_handler,
|
||||
IRQF_ONESHOT, "sparx5-ptp",
|
||||
sparx5);
|
||||
if (err)
|
||||
sparx5->ptp_irq = -ENXIO;
|
||||
|
||||
sparx5->ptp = 1;
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
|
|
@ -956,16 +944,10 @@ static int mchp_sparx5_probe(struct platform_device *pdev)
|
|||
goto cleanup_ports;
|
||||
}
|
||||
|
||||
err = sparx5_ptp_init(sparx5);
|
||||
if (err) {
|
||||
dev_err(sparx5->dev, "PTP failed\n");
|
||||
goto cleanup_ports;
|
||||
}
|
||||
|
||||
err = sparx5_vcap_init(sparx5);
|
||||
if (err) {
|
||||
dev_err(sparx5->dev, "Failed to initialize VCAP\n");
|
||||
goto cleanup_ptp;
|
||||
goto cleanup_ports;
|
||||
}
|
||||
|
||||
err = sparx5_mact_init(sparx5);
|
||||
|
|
@ -982,10 +964,16 @@ static int mchp_sparx5_probe(struct platform_device *pdev)
|
|||
|
||||
INIT_LIST_HEAD(&sparx5->mall_entries);
|
||||
|
||||
err = sparx5_ptp_init(sparx5);
|
||||
if (err) {
|
||||
dev_err(sparx5->dev, "Failed to initialize PTP\n");
|
||||
goto cleanup_stats;
|
||||
}
|
||||
|
||||
err = sparx5_register_netdevs(sparx5);
|
||||
if (err) {
|
||||
dev_err(sparx5->dev, "Failed to register net devices\n");
|
||||
goto cleanup_stats;
|
||||
goto cleanup_ptp;
|
||||
}
|
||||
|
||||
err = sparx5_register_notifier_blocks(sparx5);
|
||||
|
|
@ -998,14 +986,14 @@ static int mchp_sparx5_probe(struct platform_device *pdev)
|
|||
|
||||
cleanup_netdevs:
|
||||
sparx5_unregister_netdevs(sparx5);
|
||||
cleanup_ptp:
|
||||
sparx5_ptp_deinit(sparx5);
|
||||
cleanup_stats:
|
||||
sparx5_stats_deinit(sparx5);
|
||||
cleanup_mact:
|
||||
sparx5_mact_deinit(sparx5);
|
||||
cleanup_vcap:
|
||||
sparx5_vcap_deinit(sparx5);
|
||||
cleanup_ptp:
|
||||
sparx5_ptp_deinit(sparx5);
|
||||
cleanup_ports:
|
||||
sparx5_destroy_netdevs(sparx5);
|
||||
cleanup_config:
|
||||
|
|
@ -1031,10 +1019,10 @@ static void mchp_sparx5_remove(struct platform_device *pdev)
|
|||
}
|
||||
sparx5_unregister_notifier_blocks(sparx5);
|
||||
sparx5_unregister_netdevs(sparx5);
|
||||
sparx5_ptp_deinit(sparx5);
|
||||
sparx5_stats_deinit(sparx5);
|
||||
sparx5_mact_deinit(sparx5);
|
||||
sparx5_vcap_deinit(sparx5);
|
||||
sparx5_ptp_deinit(sparx5);
|
||||
ops->fdma_deinit(sparx5);
|
||||
sparx5_destroy_netdevs(sparx5);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -606,9 +606,22 @@ static int sparx5_ptp_phc_init(struct sparx5 *sparx5,
|
|||
int sparx5_ptp_init(struct sparx5 *sparx5)
|
||||
{
|
||||
u64 tod_adj = sparx5_ptp_get_nominal_value(sparx5);
|
||||
const struct sparx5_ops *ops = sparx5->data->ops;
|
||||
struct sparx5_port *port;
|
||||
int err, i;
|
||||
|
||||
if (sparx5->ptp_irq >= 0 &&
|
||||
sparx5_has_feature(sparx5, SPX5_FEATURE_PTP)) {
|
||||
err = devm_request_threaded_irq(sparx5->dev, sparx5->ptp_irq,
|
||||
NULL, ops->ptp_irq_handler,
|
||||
IRQF_ONESHOT, "sparx5-ptp",
|
||||
sparx5);
|
||||
if (err)
|
||||
sparx5->ptp_irq = -ENXIO;
|
||||
|
||||
sparx5->ptp = 1;
|
||||
}
|
||||
|
||||
if (!sparx5->ptp)
|
||||
return 0;
|
||||
|
||||
|
|
@ -660,6 +673,11 @@ void sparx5_ptp_deinit(struct sparx5 *sparx5)
|
|||
struct sparx5_port *port;
|
||||
int i;
|
||||
|
||||
if (sparx5->ptp_irq >= 0) {
|
||||
disable_irq(sparx5->ptp_irq);
|
||||
sparx5->ptp_irq = -ENXIO;
|
||||
}
|
||||
|
||||
for (i = 0; i < sparx5->data->consts->n_ports; i++) {
|
||||
port = sparx5->ports[i];
|
||||
if (!port)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user