]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: sparx5: ops out PTP IRQ handler
authorDaniel Machon <daniel.machon@microchip.com>
Fri, 4 Oct 2024 13:19:38 +0000 (15:19 +0200)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 8 Oct 2024 10:07:01 +0000 (12:07 +0200)
The PTP registers are located in two different register targets on
Sparx5 and lan969x. We can't handle this with the register macros, so
ops out the handler.

Reviewed-by: Steen Hegelund <Steen.Hegelund@microchip.com>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Signed-off-by: Daniel Machon <daniel.machon@microchip.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
drivers/net/ethernet/microchip/sparx5/sparx5_main.h

index 22277a3e91ef8d60a7ccebf4699932890d23ba15..3decf72d1dd83c81df7a58fa7c1cc298d3c00330 100644 (file)
@@ -605,6 +605,7 @@ static int sparx5_start(struct sparx5 *sparx5)
 {
        u8 broadcast[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
        const struct sparx5_consts *consts = sparx5->data->consts;
+       const struct sparx5_ops *ops = sparx5->data->ops;
        char queue_name[32];
        u32 idx;
        int err;
@@ -729,7 +730,7 @@ static int sparx5_start(struct sparx5 *sparx5)
 
        if (sparx5->ptp_irq >= 0) {
                err = devm_request_threaded_irq(sparx5->dev, sparx5->ptp_irq,
-                                               NULL, sparx5_ptp_irq_handler,
+                                               NULL, ops->ptp_irq_handler,
                                                IRQF_ONESHOT, "sparx5-ptp",
                                                sparx5);
                if (err)
@@ -993,6 +994,7 @@ static const struct sparx5_ops sparx5_ops = {
        .get_hsch_max_group_rate = &sparx5_get_hsch_max_group_rate,
        .get_sdlb_group          = &sparx5_get_sdlb_group,
        .set_port_mux            = &sparx5_port_mux_set,
+       .ptp_irq_handler         = &sparx5_ptp_irq_handler,
 };
 
 static const struct sparx5_match_data sparx5_desc = {
index 8d985dfb65ebff044ad3f8efad74a1cd7abb13fc..cc8ab91d98051c2f0a9e60ce09cdf5ce46d04dfe 100644 (file)
@@ -269,6 +269,8 @@ struct sparx5_ops {
        struct sparx5_sdlb_group *(*get_sdlb_group)(int idx);
        int (*set_port_mux)(struct sparx5 *sparx5, struct sparx5_port *port,
                            struct sparx5_port_config *conf);
+
+       irqreturn_t (*ptp_irq_handler)(int irq, void *args);
 };
 
 struct sparx5_main_io_resource {