Skip to content

Commit 10184da

Browse files
committed
Merge branch 'mlxsw-Spectrum-4-prep'
From: Ido Schimmel <[email protected]> ==================== mlxsw: Spectrum-4 preparations The Spectrum-4 ASIC will support more than 256 ports, unlike existing ASICs. As such, various device registers were extended with two additional bits to encode a 10 bit local port. In some cases, new (Version 2) registers were introduced. This patchset prepares mlxsw for Spectrum-4 support by encoding local port in a 'u16' instead of a 'u8' and by extending the definitions of the various registers to support the extended local port form. ==================== Signed-off-by: David S. Miller <[email protected]>
2 parents 8c659fd + 51ef6b0 commit 10184da

20 files changed

+515
-464
lines changed

drivers/net/ethernet/mellanox/mlxsw/core.c

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ static struct workqueue_struct *mlxsw_owq;
4747
struct mlxsw_core_port {
4848
struct devlink_port devlink_port;
4949
void *port_driver_priv;
50-
u8 local_port;
50+
u16 local_port;
5151
};
5252

5353
void *mlxsw_core_port_driver_priv(struct mlxsw_core_port *mlxsw_core_port)
@@ -77,7 +77,7 @@ struct mlxsw_core {
7777
bool enable_string_tlv;
7878
} emad;
7979
struct {
80-
u8 *mapping; /* lag_id+port_index to local_port mapping */
80+
u16 *mapping; /* lag_id+port_index to local_port mapping */
8181
} lag;
8282
struct mlxsw_res res;
8383
struct mlxsw_hwmon *hwmon;
@@ -718,7 +718,7 @@ static void mlxsw_emad_process_response(struct mlxsw_core *mlxsw_core,
718718
}
719719

720720
/* called with rcu read lock held */
721-
static void mlxsw_emad_rx_listener_func(struct sk_buff *skb, u8 local_port,
721+
static void mlxsw_emad_rx_listener_func(struct sk_buff *skb, u16 local_port,
722722
void *priv)
723723
{
724724
struct mlxsw_core *mlxsw_core = priv;
@@ -1959,7 +1959,7 @@ __mlxsw_core_bus_device_register(const struct mlxsw_bus_info *mlxsw_bus_info,
19591959

19601960
if (MLXSW_CORE_RES_VALID(mlxsw_core, MAX_LAG) &&
19611961
MLXSW_CORE_RES_VALID(mlxsw_core, MAX_LAG_MEMBERS)) {
1962-
alloc_size = sizeof(u8) *
1962+
alloc_size = sizeof(*mlxsw_core->lag.mapping) *
19631963
MLXSW_CORE_RES_GET(mlxsw_core, MAX_LAG) *
19641964
MLXSW_CORE_RES_GET(mlxsw_core, MAX_LAG_MEMBERS);
19651965
mlxsw_core->lag.mapping = kzalloc(alloc_size, GFP_KERNEL);
@@ -2130,7 +2130,7 @@ int mlxsw_core_skb_transmit(struct mlxsw_core *mlxsw_core, struct sk_buff *skb,
21302130
EXPORT_SYMBOL(mlxsw_core_skb_transmit);
21312131

21322132
void mlxsw_core_ptp_transmitted(struct mlxsw_core *mlxsw_core,
2133-
struct sk_buff *skb, u8 local_port)
2133+
struct sk_buff *skb, u16 local_port)
21342134
{
21352135
if (mlxsw_core->driver->ptp_transmitted)
21362136
mlxsw_core->driver->ptp_transmitted(mlxsw_core, skb,
@@ -2208,7 +2208,7 @@ mlxsw_core_rx_listener_state_set(struct mlxsw_core *mlxsw_core,
22082208
rxl_item->enabled = enabled;
22092209
}
22102210

2211-
static void mlxsw_core_event_listener_func(struct sk_buff *skb, u8 local_port,
2211+
static void mlxsw_core_event_listener_func(struct sk_buff *skb, u16 local_port,
22122212
void *priv)
22132213
{
22142214
struct mlxsw_event_listener_item *event_listener_item = priv;
@@ -2641,7 +2641,7 @@ void mlxsw_core_skb_receive(struct mlxsw_core *mlxsw_core, struct sk_buff *skb,
26412641
{
26422642
struct mlxsw_rx_listener_item *rxl_item;
26432643
const struct mlxsw_rx_listener *rxl;
2644-
u8 local_port;
2644+
u16 local_port;
26452645
bool found = false;
26462646

26472647
if (rx_info->is_lag) {
@@ -2699,7 +2699,7 @@ static int mlxsw_core_lag_mapping_index(struct mlxsw_core *mlxsw_core,
26992699
}
27002700

27012701
void mlxsw_core_lag_mapping_set(struct mlxsw_core *mlxsw_core,
2702-
u16 lag_id, u8 port_index, u8 local_port)
2702+
u16 lag_id, u8 port_index, u16 local_port)
27032703
{
27042704
int index = mlxsw_core_lag_mapping_index(mlxsw_core,
27052705
lag_id, port_index);
@@ -2708,8 +2708,8 @@ void mlxsw_core_lag_mapping_set(struct mlxsw_core *mlxsw_core,
27082708
}
27092709
EXPORT_SYMBOL(mlxsw_core_lag_mapping_set);
27102710

2711-
u8 mlxsw_core_lag_mapping_get(struct mlxsw_core *mlxsw_core,
2712-
u16 lag_id, u8 port_index)
2711+
u16 mlxsw_core_lag_mapping_get(struct mlxsw_core *mlxsw_core,
2712+
u16 lag_id, u8 port_index)
27132713
{
27142714
int index = mlxsw_core_lag_mapping_index(mlxsw_core,
27152715
lag_id, port_index);
@@ -2719,7 +2719,7 @@ u8 mlxsw_core_lag_mapping_get(struct mlxsw_core *mlxsw_core,
27192719
EXPORT_SYMBOL(mlxsw_core_lag_mapping_get);
27202720

27212721
void mlxsw_core_lag_mapping_clear(struct mlxsw_core *mlxsw_core,
2722-
u16 lag_id, u8 local_port)
2722+
u16 lag_id, u16 local_port)
27232723
{
27242724
int i;
27252725

@@ -2747,7 +2747,7 @@ u64 mlxsw_core_res_get(struct mlxsw_core *mlxsw_core,
27472747
}
27482748
EXPORT_SYMBOL(mlxsw_core_res_get);
27492749

2750-
static int __mlxsw_core_port_init(struct mlxsw_core *mlxsw_core, u8 local_port,
2750+
static int __mlxsw_core_port_init(struct mlxsw_core *mlxsw_core, u16 local_port,
27512751
enum devlink_port_flavour flavour,
27522752
u32 port_number, bool split,
27532753
u32 split_port_subnumber,
@@ -2778,7 +2778,7 @@ static int __mlxsw_core_port_init(struct mlxsw_core *mlxsw_core, u8 local_port,
27782778
return err;
27792779
}
27802780

2781-
static void __mlxsw_core_port_fini(struct mlxsw_core *mlxsw_core, u8 local_port)
2781+
static void __mlxsw_core_port_fini(struct mlxsw_core *mlxsw_core, u16 local_port)
27822782
{
27832783
struct mlxsw_core_port *mlxsw_core_port =
27842784
&mlxsw_core->ports[local_port];
@@ -2788,7 +2788,7 @@ static void __mlxsw_core_port_fini(struct mlxsw_core *mlxsw_core, u8 local_port)
27882788
memset(mlxsw_core_port, 0, sizeof(*mlxsw_core_port));
27892789
}
27902790

2791-
int mlxsw_core_port_init(struct mlxsw_core *mlxsw_core, u8 local_port,
2791+
int mlxsw_core_port_init(struct mlxsw_core *mlxsw_core, u16 local_port,
27922792
u32 port_number, bool split,
27932793
u32 split_port_subnumber,
27942794
bool splittable, u32 lanes,
@@ -2810,7 +2810,7 @@ int mlxsw_core_port_init(struct mlxsw_core *mlxsw_core, u8 local_port,
28102810
}
28112811
EXPORT_SYMBOL(mlxsw_core_port_init);
28122812

2813-
void mlxsw_core_port_fini(struct mlxsw_core *mlxsw_core, u8 local_port)
2813+
void mlxsw_core_port_fini(struct mlxsw_core *mlxsw_core, u16 local_port)
28142814
{
28152815
atomic_dec(&mlxsw_core->active_ports_count);
28162816

@@ -2845,7 +2845,7 @@ void mlxsw_core_cpu_port_fini(struct mlxsw_core *mlxsw_core)
28452845
}
28462846
EXPORT_SYMBOL(mlxsw_core_cpu_port_fini);
28472847

2848-
void mlxsw_core_port_eth_set(struct mlxsw_core *mlxsw_core, u8 local_port,
2848+
void mlxsw_core_port_eth_set(struct mlxsw_core *mlxsw_core, u16 local_port,
28492849
void *port_driver_priv, struct net_device *dev)
28502850
{
28512851
struct mlxsw_core_port *mlxsw_core_port =
@@ -2857,7 +2857,7 @@ void mlxsw_core_port_eth_set(struct mlxsw_core *mlxsw_core, u8 local_port,
28572857
}
28582858
EXPORT_SYMBOL(mlxsw_core_port_eth_set);
28592859

2860-
void mlxsw_core_port_ib_set(struct mlxsw_core *mlxsw_core, u8 local_port,
2860+
void mlxsw_core_port_ib_set(struct mlxsw_core *mlxsw_core, u16 local_port,
28612861
void *port_driver_priv)
28622862
{
28632863
struct mlxsw_core_port *mlxsw_core_port =
@@ -2869,7 +2869,7 @@ void mlxsw_core_port_ib_set(struct mlxsw_core *mlxsw_core, u8 local_port,
28692869
}
28702870
EXPORT_SYMBOL(mlxsw_core_port_ib_set);
28712871

2872-
void mlxsw_core_port_clear(struct mlxsw_core *mlxsw_core, u8 local_port,
2872+
void mlxsw_core_port_clear(struct mlxsw_core *mlxsw_core, u16 local_port,
28732873
void *port_driver_priv)
28742874
{
28752875
struct mlxsw_core_port *mlxsw_core_port =
@@ -2882,7 +2882,7 @@ void mlxsw_core_port_clear(struct mlxsw_core *mlxsw_core, u8 local_port,
28822882
EXPORT_SYMBOL(mlxsw_core_port_clear);
28832883

28842884
enum devlink_port_type mlxsw_core_port_type_get(struct mlxsw_core *mlxsw_core,
2885-
u8 local_port)
2885+
u16 local_port)
28862886
{
28872887
struct mlxsw_core_port *mlxsw_core_port =
28882888
&mlxsw_core->ports[local_port];
@@ -2895,7 +2895,7 @@ EXPORT_SYMBOL(mlxsw_core_port_type_get);
28952895

28962896
struct devlink_port *
28972897
mlxsw_core_port_devlink_port_get(struct mlxsw_core *mlxsw_core,
2898-
u8 local_port)
2898+
u16 local_port)
28992899
{
29002900
struct mlxsw_core_port *mlxsw_core_port =
29012901
&mlxsw_core->ports[local_port];
@@ -2905,7 +2905,7 @@ mlxsw_core_port_devlink_port_get(struct mlxsw_core *mlxsw_core,
29052905
}
29062906
EXPORT_SYMBOL(mlxsw_core_port_devlink_port_get);
29072907

2908-
bool mlxsw_core_port_is_xm(const struct mlxsw_core *mlxsw_core, u8 local_port)
2908+
bool mlxsw_core_port_is_xm(const struct mlxsw_core *mlxsw_core, u16 local_port)
29092909
{
29102910
const struct mlxsw_bus_info *bus_info = mlxsw_core->bus_info;
29112911
int i;

drivers/net/ethernet/mellanox/mlxsw/core.h

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ int mlxsw_core_bus_device_register(const struct mlxsw_bus_info *mlxsw_bus_info,
5454
void mlxsw_core_bus_device_unregister(struct mlxsw_core *mlxsw_core, bool reload);
5555

5656
struct mlxsw_tx_info {
57-
u8 local_port;
57+
u16 local_port;
5858
bool is_emad;
5959
};
6060

@@ -67,7 +67,7 @@ struct mlxsw_rx_md_info {
6767
u16 tx_sys_port;
6868
u16 tx_lag_id;
6969
};
70-
u8 tx_lag_port_index; /* Valid when 'tx_port_is_lag' is set. */
70+
u16 tx_lag_port_index; /* Valid when 'tx_port_is_lag' is set. */
7171
u8 tx_tc;
7272
u8 latency_valid:1,
7373
tx_congestion_valid:1,
@@ -82,11 +82,11 @@ bool mlxsw_core_skb_transmit_busy(struct mlxsw_core *mlxsw_core,
8282
int mlxsw_core_skb_transmit(struct mlxsw_core *mlxsw_core, struct sk_buff *skb,
8383
const struct mlxsw_tx_info *tx_info);
8484
void mlxsw_core_ptp_transmitted(struct mlxsw_core *mlxsw_core,
85-
struct sk_buff *skb, u8 local_port);
85+
struct sk_buff *skb, u16 local_port);
8686

8787
struct mlxsw_rx_listener {
88-
void (*func)(struct sk_buff *skb, u8 local_port, void *priv);
89-
u8 local_port;
88+
void (*func)(struct sk_buff *skb, u16 local_port, void *priv);
89+
u16 local_port;
9090
u8 mirror_reason;
9191
u16 trap_id;
9292
};
@@ -209,7 +209,7 @@ struct mlxsw_rx_info {
209209
u16 sys_port;
210210
u16 lag_id;
211211
} u;
212-
u8 lag_port_index;
212+
u16 lag_port_index;
213213
u8 mirror_reason;
214214
int trap_id;
215215
};
@@ -218,36 +218,36 @@ void mlxsw_core_skb_receive(struct mlxsw_core *mlxsw_core, struct sk_buff *skb,
218218
struct mlxsw_rx_info *rx_info);
219219

220220
void mlxsw_core_lag_mapping_set(struct mlxsw_core *mlxsw_core,
221-
u16 lag_id, u8 port_index, u8 local_port);
222-
u8 mlxsw_core_lag_mapping_get(struct mlxsw_core *mlxsw_core,
223-
u16 lag_id, u8 port_index);
221+
u16 lag_id, u8 port_index, u16 local_port);
222+
u16 mlxsw_core_lag_mapping_get(struct mlxsw_core *mlxsw_core,
223+
u16 lag_id, u8 port_index);
224224
void mlxsw_core_lag_mapping_clear(struct mlxsw_core *mlxsw_core,
225-
u16 lag_id, u8 local_port);
225+
u16 lag_id, u16 local_port);
226226

227227
void *mlxsw_core_port_driver_priv(struct mlxsw_core_port *mlxsw_core_port);
228-
int mlxsw_core_port_init(struct mlxsw_core *mlxsw_core, u8 local_port,
228+
int mlxsw_core_port_init(struct mlxsw_core *mlxsw_core, u16 local_port,
229229
u32 port_number, bool split, u32 split_port_subnumber,
230230
bool splittable, u32 lanes,
231231
const unsigned char *switch_id,
232232
unsigned char switch_id_len);
233-
void mlxsw_core_port_fini(struct mlxsw_core *mlxsw_core, u8 local_port);
233+
void mlxsw_core_port_fini(struct mlxsw_core *mlxsw_core, u16 local_port);
234234
int mlxsw_core_cpu_port_init(struct mlxsw_core *mlxsw_core,
235235
void *port_driver_priv,
236236
const unsigned char *switch_id,
237237
unsigned char switch_id_len);
238238
void mlxsw_core_cpu_port_fini(struct mlxsw_core *mlxsw_core);
239-
void mlxsw_core_port_eth_set(struct mlxsw_core *mlxsw_core, u8 local_port,
239+
void mlxsw_core_port_eth_set(struct mlxsw_core *mlxsw_core, u16 local_port,
240240
void *port_driver_priv, struct net_device *dev);
241-
void mlxsw_core_port_ib_set(struct mlxsw_core *mlxsw_core, u8 local_port,
241+
void mlxsw_core_port_ib_set(struct mlxsw_core *mlxsw_core, u16 local_port,
242242
void *port_driver_priv);
243-
void mlxsw_core_port_clear(struct mlxsw_core *mlxsw_core, u8 local_port,
243+
void mlxsw_core_port_clear(struct mlxsw_core *mlxsw_core, u16 local_port,
244244
void *port_driver_priv);
245245
enum devlink_port_type mlxsw_core_port_type_get(struct mlxsw_core *mlxsw_core,
246-
u8 local_port);
246+
u16 local_port);
247247
struct devlink_port *
248248
mlxsw_core_port_devlink_port_get(struct mlxsw_core *mlxsw_core,
249-
u8 local_port);
250-
bool mlxsw_core_port_is_xm(const struct mlxsw_core *mlxsw_core, u8 local_port);
249+
u16 local_port);
250+
bool mlxsw_core_port_is_xm(const struct mlxsw_core *mlxsw_core, u16 local_port);
251251
struct mlxsw_env *mlxsw_core_env(const struct mlxsw_core *mlxsw_core);
252252

253253
int mlxsw_core_schedule_dw(struct delayed_work *dwork, unsigned long delay);
@@ -316,11 +316,11 @@ struct mlxsw_driver {
316316
struct netlink_ext_ack *extack);
317317
void (*fini)(struct mlxsw_core *mlxsw_core);
318318
int (*basic_trap_groups_set)(struct mlxsw_core *mlxsw_core);
319-
int (*port_type_set)(struct mlxsw_core *mlxsw_core, u8 local_port,
319+
int (*port_type_set)(struct mlxsw_core *mlxsw_core, u16 local_port,
320320
enum devlink_port_type new_type);
321-
int (*port_split)(struct mlxsw_core *mlxsw_core, u8 local_port,
321+
int (*port_split)(struct mlxsw_core *mlxsw_core, u16 local_port,
322322
unsigned int count, struct netlink_ext_ack *extack);
323-
int (*port_unsplit)(struct mlxsw_core *mlxsw_core, u8 local_port,
323+
int (*port_unsplit)(struct mlxsw_core *mlxsw_core, u16 local_port,
324324
struct netlink_ext_ack *extack);
325325
int (*sb_pool_get)(struct mlxsw_core *mlxsw_core,
326326
unsigned int sb_index, u16 pool_index,
@@ -394,7 +394,7 @@ struct mlxsw_driver {
394394
* is responsible for freeing the passed-in SKB.
395395
*/
396396
void (*ptp_transmitted)(struct mlxsw_core *mlxsw_core,
397-
struct sk_buff *skb, u8 local_port);
397+
struct sk_buff *skb, u16 local_port);
398398

399399
u8 txhdr_len;
400400
const struct mlxsw_config_profile *profile;

drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_actions.c

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ static const struct rhashtable_params mlxsw_afa_set_ht_params = {
113113
};
114114

115115
struct mlxsw_afa_fwd_entry_ht_key {
116-
u8 local_port;
116+
u16 local_port;
117117
};
118118

119119
struct mlxsw_afa_fwd_entry {
@@ -555,7 +555,7 @@ int mlxsw_afa_block_terminate(struct mlxsw_afa_block *block)
555555
EXPORT_SYMBOL(mlxsw_afa_block_terminate);
556556

557557
static struct mlxsw_afa_fwd_entry *
558-
mlxsw_afa_fwd_entry_create(struct mlxsw_afa *mlxsw_afa, u8 local_port)
558+
mlxsw_afa_fwd_entry_create(struct mlxsw_afa *mlxsw_afa, u16 local_port)
559559
{
560560
struct mlxsw_afa_fwd_entry *fwd_entry;
561561
int err;
@@ -598,7 +598,7 @@ static void mlxsw_afa_fwd_entry_destroy(struct mlxsw_afa *mlxsw_afa,
598598
}
599599

600600
static struct mlxsw_afa_fwd_entry *
601-
mlxsw_afa_fwd_entry_get(struct mlxsw_afa *mlxsw_afa, u8 local_port)
601+
mlxsw_afa_fwd_entry_get(struct mlxsw_afa *mlxsw_afa, u16 local_port)
602602
{
603603
struct mlxsw_afa_fwd_entry_ht_key ht_key = {0};
604604
struct mlxsw_afa_fwd_entry *fwd_entry;
@@ -647,7 +647,7 @@ mlxsw_afa_fwd_entry_ref_destructor(struct mlxsw_afa_block *block,
647647
}
648648

649649
static struct mlxsw_afa_fwd_entry_ref *
650-
mlxsw_afa_fwd_entry_ref_create(struct mlxsw_afa_block *block, u8 local_port)
650+
mlxsw_afa_fwd_entry_ref_create(struct mlxsw_afa_block *block, u16 local_port)
651651
{
652652
struct mlxsw_afa_fwd_entry_ref *fwd_entry_ref;
653653
struct mlxsw_afa_fwd_entry *fwd_entry;
@@ -1352,7 +1352,7 @@ EXPORT_SYMBOL(mlxsw_afa_block_append_trap_and_forward);
13521352
struct mlxsw_afa_mirror {
13531353
struct mlxsw_afa_resource resource;
13541354
int span_id;
1355-
u8 local_in_port;
1355+
u16 local_in_port;
13561356
bool ingress;
13571357
};
13581358

@@ -1379,7 +1379,7 @@ mlxsw_afa_mirror_destructor(struct mlxsw_afa_block *block,
13791379
}
13801380

13811381
static struct mlxsw_afa_mirror *
1382-
mlxsw_afa_mirror_create(struct mlxsw_afa_block *block, u8 local_in_port,
1382+
mlxsw_afa_mirror_create(struct mlxsw_afa_block *block, u16 local_in_port,
13831383
const struct net_device *out_dev, bool ingress)
13841384
{
13851385
struct mlxsw_afa_mirror *mirror;
@@ -1423,7 +1423,7 @@ mlxsw_afa_block_append_allocated_mirror(struct mlxsw_afa_block *block,
14231423
}
14241424

14251425
int
1426-
mlxsw_afa_block_append_mirror(struct mlxsw_afa_block *block, u8 local_in_port,
1426+
mlxsw_afa_block_append_mirror(struct mlxsw_afa_block *block, u16 local_in_port,
14271427
const struct net_device *out_dev, bool ingress,
14281428
struct netlink_ext_ack *extack)
14291429
{
@@ -1663,7 +1663,7 @@ mlxsw_afa_forward_pack(char *payload, enum mlxsw_afa_forward_type type,
16631663
}
16641664

16651665
int mlxsw_afa_block_append_fwd(struct mlxsw_afa_block *block,
1666-
u8 local_port, bool in_port,
1666+
u16 local_port, bool in_port,
16671667
struct netlink_ext_ack *extack)
16681668
{
16691669
struct mlxsw_afa_fwd_entry_ref *fwd_entry_ref;
@@ -2038,7 +2038,7 @@ static void mlxsw_afa_sampler_pack(char *payload, u8 mirror_agent, u32 rate)
20382038
struct mlxsw_afa_sampler {
20392039
struct mlxsw_afa_resource resource;
20402040
int span_id;
2041-
u8 local_port;
2041+
u16 local_port;
20422042
bool ingress;
20432043
};
20442044

@@ -2061,7 +2061,7 @@ static void mlxsw_afa_sampler_destructor(struct mlxsw_afa_block *block,
20612061
}
20622062

20632063
static struct mlxsw_afa_sampler *
2064-
mlxsw_afa_sampler_create(struct mlxsw_afa_block *block, u8 local_port,
2064+
mlxsw_afa_sampler_create(struct mlxsw_afa_block *block, u16 local_port,
20652065
struct psample_group *psample_group, u32 rate,
20662066
u32 trunc_size, bool truncate, bool ingress,
20672067
struct netlink_ext_ack *extack)
@@ -2104,7 +2104,7 @@ mlxsw_afa_block_append_allocated_sampler(struct mlxsw_afa_block *block,
21042104
return 0;
21052105
}
21062106

2107-
int mlxsw_afa_block_append_sampler(struct mlxsw_afa_block *block, u8 local_port,
2107+
int mlxsw_afa_block_append_sampler(struct mlxsw_afa_block *block, u16 local_port,
21082108
struct psample_group *psample_group,
21092109
u32 rate, u32 trunc_size, bool truncate,
21102110
bool ingress,

0 commit comments

Comments
 (0)