Skip to content

Commit 56143c5

Browse files
Danielmachonkuba-moo
authored andcommitted
net: sparx5: ops out certain FDMA functions
We are going to implement the RX and TX paths a bit differently on lan969x and therefore need to introduce new ops for FDMA functions: init, deinit, xmit and poll. Assign the Sparx5 equivalents for these and update the code throughout. Also add a 'struct net_device' argument to the xmit() function, as we will be needing that for lan969x. Reviewed-by: Steen Hegelund <[email protected]> Signed-off-by: Daniel Machon <[email protected]> Link: https://patch.msgid.link/20250113-sparx5-lan969x-switch-driver-5-v2-4-c468f02fd623@microchip.com Signed-off-by: Jakub Kicinski <[email protected]>
1 parent cded2e0 commit 56143c5

File tree

4 files changed

+24
-7
lines changed

4 files changed

+24
-7
lines changed

drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ static bool sparx5_fdma_rx_get_frame(struct sparx5 *sparx5, struct sparx5_rx *rx
183183
return true;
184184
}
185185

186-
static int sparx5_fdma_napi_callback(struct napi_struct *napi, int weight)
186+
int sparx5_fdma_napi_callback(struct napi_struct *napi, int weight)
187187
{
188188
struct sparx5_rx *rx = container_of(napi, struct sparx5_rx, napi);
189189
struct sparx5 *sparx5 = container_of(rx, struct sparx5, rx);
@@ -213,7 +213,8 @@ static int sparx5_fdma_napi_callback(struct napi_struct *napi, int weight)
213213
return counter;
214214
}
215215

216-
int sparx5_fdma_xmit(struct sparx5 *sparx5, u32 *ifh, struct sk_buff *skb)
216+
int sparx5_fdma_xmit(struct sparx5 *sparx5, u32 *ifh, struct sk_buff *skb,
217+
struct net_device *dev)
217218
{
218219
struct sparx5_tx *tx = &sparx5->tx;
219220
struct fdma *fdma = &tx->fdma;
@@ -450,12 +451,13 @@ static u32 sparx5_fdma_port_ctrl(struct sparx5 *sparx5)
450451

451452
int sparx5_fdma_start(struct sparx5 *sparx5)
452453
{
454+
const struct sparx5_ops *ops = sparx5->data->ops;
453455
struct sparx5_rx *rx = &sparx5->rx;
454456
struct sparx5_tx *tx = &sparx5->tx;
455457

456458
netif_napi_add_weight(rx->ndev,
457459
&rx->napi,
458-
sparx5_fdma_napi_callback,
460+
ops->fdma_poll,
459461
FDMA_WEIGHT);
460462

461463
napi_enable(&rx->napi);

drivers/net/ethernet/microchip/sparx5/sparx5_main.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -793,7 +793,7 @@ static int sparx5_start(struct sparx5 *sparx5)
793793
0,
794794
"sparx5-fdma", sparx5);
795795
if (!err) {
796-
err = sparx5_fdma_init(sparx5);
796+
err = ops->fdma_init(sparx5);
797797
if (!err)
798798
sparx5_fdma_start(sparx5);
799799
}
@@ -1030,6 +1030,7 @@ static int mchp_sparx5_probe(struct platform_device *pdev)
10301030
static void mchp_sparx5_remove(struct platform_device *pdev)
10311031
{
10321032
struct sparx5 *sparx5 = platform_get_drvdata(pdev);
1033+
const struct sparx5_ops *ops = sparx5->data->ops;
10331034

10341035
debugfs_remove_recursive(sparx5->debugfs_root);
10351036
if (sparx5->xtr_irq) {
@@ -1041,7 +1042,7 @@ static void mchp_sparx5_remove(struct platform_device *pdev)
10411042
sparx5->fdma_irq = -ENXIO;
10421043
}
10431044
sparx5_ptp_deinit(sparx5);
1044-
sparx5_fdma_stop(sparx5);
1045+
ops->fdma_deinit(sparx5);
10451046
sparx5_cleanup_ports(sparx5);
10461047
sparx5_vcap_destroy(sparx5);
10471048
/* Unregister netdevs */
@@ -1096,6 +1097,10 @@ static const struct sparx5_ops sparx5_ops = {
10961097
.set_port_mux = &sparx5_port_mux_set,
10971098
.ptp_irq_handler = &sparx5_ptp_irq_handler,
10981099
.dsm_calendar_calc = &sparx5_dsm_calendar_calc,
1100+
.fdma_init = &sparx5_fdma_init,
1101+
.fdma_deinit = &sparx5_fdma_deinit,
1102+
.fdma_poll = &sparx5_fdma_napi_callback,
1103+
.fdma_xmit = &sparx5_fdma_xmit,
10991104
};
11001105

11011106
static const struct sparx5_match_data sparx5_desc = {

drivers/net/ethernet/microchip/sparx5/sparx5_main.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,11 @@ struct sparx5_ops {
326326
struct sparx5_calendar_data *data);
327327
int (*port_config_rgmii)(struct sparx5_port *port,
328328
struct sparx5_port_config *conf);
329+
int (*fdma_init)(struct sparx5 *sparx5);
330+
int (*fdma_deinit)(struct sparx5 *sparx5);
331+
int (*fdma_poll)(struct napi_struct *napi, int weight);
332+
int (*fdma_xmit)(struct sparx5 *sparx5, u32 *ifh, struct sk_buff *skb,
333+
struct net_device *dev);
329334
};
330335

331336
struct sparx5_main_io_resource {
@@ -440,7 +445,9 @@ int sparx5_fdma_init(struct sparx5 *sparx5);
440445
int sparx5_fdma_deinit(struct sparx5 *sparx5);
441446
int sparx5_fdma_start(struct sparx5 *sparx5);
442447
int sparx5_fdma_stop(struct sparx5 *sparx5);
443-
int sparx5_fdma_xmit(struct sparx5 *sparx5, u32 *ifh, struct sk_buff *skb);
448+
int sparx5_fdma_napi_callback(struct napi_struct *napi, int weight);
449+
int sparx5_fdma_xmit(struct sparx5 *sparx5, u32 *ifh, struct sk_buff *skb,
450+
struct net_device *dev);
444451
irqreturn_t sparx5_fdma_handler(int irq, void *args);
445452

446453
/* sparx5_mactable.c */

drivers/net/ethernet/microchip/sparx5/sparx5_packet.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,9 +232,12 @@ netdev_tx_t sparx5_port_xmit_impl(struct sk_buff *skb, struct net_device *dev)
232232
struct net_device_stats *stats = &dev->stats;
233233
struct sparx5_port *port = netdev_priv(dev);
234234
struct sparx5 *sparx5 = port->sparx5;
235+
const struct sparx5_ops *ops;
235236
u32 ifh[IFH_LEN];
236237
netdev_tx_t ret;
237238

239+
ops = sparx5->data->ops;
240+
238241
memset(ifh, 0, IFH_LEN * 4);
239242
sparx5_set_port_ifh(sparx5, ifh, port->portno);
240243

@@ -254,7 +257,7 @@ netdev_tx_t sparx5_port_xmit_impl(struct sk_buff *skb, struct net_device *dev)
254257
skb_tx_timestamp(skb);
255258
spin_lock(&sparx5->tx_lock);
256259
if (sparx5->fdma_irq > 0)
257-
ret = sparx5_fdma_xmit(sparx5, ifh, skb);
260+
ret = ops->fdma_xmit(sparx5, ifh, skb, dev);
258261
else
259262
ret = sparx5_inject(sparx5, ifh, skb, dev);
260263
spin_unlock(&sparx5->tx_lock);

0 commit comments

Comments
 (0)